From d74cadada6305adbdae0de7bfa989d9ba4d81ba7 Mon Sep 17 00:00:00 2001 From: Thomas Peterson Date: Fri, 6 Dec 2024 17:56:37 +0100 Subject: [PATCH] Backup --- .../docker-compose-php-base.yml | 3 + .../docker-compose.local.ci.prod.yml | 3 + .../docker-compose.local.prod.yml | 11 +- .../docker-compose/docker-compose.local.yml | 3 + .docker/images/nginx/conf.d/default.conf | 2 +- .../images/php/base/conf.d/zz-app-prod.ini | 4 +- .php-cs-fixer.cache | 2 +- src/new/composer.json | 1 + src/new/composer.lock | 1403 ++-- src/new/config/packages/doctrine_mongodb.php | 7 +- src/new/config/packages/lock.yaml | 2 + src/new/config/packages/security.php | 37 +- src/new/fixtures/contact.yml | 30 + src/new/fixtures/install.yml | 2 +- src/new/fixtures/product.yml | 39 +- .../Controller/DashboardController.php | 8 +- .../Exporter/Csv/OrderposExporter.php | 6 +- .../src/PSC/Shop/ContactBundle/Api/Login.php | 10 +- .../Controller/Backend/EditController.php | 13 +- .../Shop/ContactBundle/Dto/Refresh/Output.php | 15 + .../Form/Backend/General/ContactType.php | 11 + .../Shop/ContactBundle/Model/AccountType.php | 10 + .../PSC/Shop/ContactBundle/Model/Contact.php | 14 + .../translations/core_contact_edit.de.yaml | 3 +- .../views/backend/edit/create.html.twig | 32 +- .../views/backend/edit/edit.html.twig | 21 +- .../Transformer/Model/Contact.php | 2 + .../Transformer/Order/Contact.php | 13 +- .../Shop/EntityBundle/Document/Contact.php | 230 +- .../EntityBundle/Document/Embed/Contact.php | 37 + .../Document/Embed/ContactAddress.php | 159 +- .../Shop/EntityBundle/Document/Instance.php | 106 +- .../PSC/Shop/EntityBundle/Document/Order.php | 3 + .../Shop/EntityBundle/Document/Payment.php | 43 +- .../PSC/Shop/EntityBundle/Entity/Contact.php | 3 +- .../PSC/Shop/EntityBundle/Entity/Payment.php | 136 +- .../src/PSC/Shop/OrderBundle/Model/Base.php | 19 +- .../Shop/OrderBundle/Model/Order/Contact.php | 37 + .../src/PSC/Shop/OrderBundle/Service/Calc.php | 18 +- .../PSC/Shop/OrderBundle/Service/Order.php | 3 +- .../Shop/OrderBundle/Transformer/Order.php | 20 +- .../Form/Backend/PaymentType.php | 3 +- .../translations/core_payment_edit.de.yaml | 4 +- .../views/backend/edit/create.html.twig | 15 +- .../views/backend/edit/edit.html.twig | 13 + .../Interfaces/ICalcNeedContact.php | 10 + .../Shop/QueueBundle/Command/DoCommand.php | 252 +- .../Form/Backend/ShopSettingsType.php | 2 + .../Security/ApiKey/InstanceProvider.php | 48 + .../Security/ApiKey/ShopProvider.php | 50 + .../UserBundle/Security/ApiKeyHandler.php | 16 +- .../UserBundle/Security/Authenticator.php | 119 - .../Security/LoginFormAuthenticator.php | 137 - .../UserBundle/Security/User/Provider.php | 146 - .../UserBundle/Security/User/UserProvider.php | 55 + .../Controller/Backend/HelpController.php | 2 +- .../System/SettingsBundle/Service/Help.php | 12 +- .../SettingsBundle/Service/Printing.php | 45 +- .../SettingsBundle/Service/TemplateVars.php | 18 +- .../SettingsBundle/Twig/Node/Barcode.php | 2 +- .../Migrations/Version202411271406.php | 12 + src/new/symfony.lock | 12 + src/new/templates/backend_base.html.twig | 4 +- .../tests/PSC/Shop/Order/Api/UpdateTest.php | 128 + .../Service/CalcContactAccountTypeTest.php | 329 + .../tests/PSC/Shop/Order/Service/calc2.xml | 24 + .../PSC/XmlCalc/Api/CreateOrderTest.php | 235 + .../System/PSC/XmlCalc/Api/GetPriceTest.php | 58 + src/new/tests/RefreshDatabaseTrait.php | 22 + .../views/frontend/designer/collect.html.twig | 45 +- .../views/frontend/designer/load.html.twig | 13 + .../views/frontend/designer/start.html.twig | 33 +- .../Formular/Controller/StartController.php | 6 + .../Custom/PSC/Formular/Document/Formular.php | 14 + .../PSC/Formular/Form/Backend/Formular.php | 4 + .../views/backend/settings/create.html.twig | 12 + .../views/backend/settings/edit.html.twig | 12 + .../PSC/Pitchprint/Form/BackendFields.php | 2 +- .../views/backend/design/edit.html.twig | 2 +- .../views/form/field/backend.html.twig | 6 +- .../PSC/Printess/Form/ProductSettings.php | 2 +- .../views/form/product_settings.html.twig | 20 +- .../Custom/PSC/R2_Pitchprint/Api/Base.php | 4 +- .../Controller/Backend/DesignController.php | 33 +- .../PSC/R2_Pitchprint/Form/BackendFields.php | 4 +- .../views/backend/design/edit.html.twig | 46 +- .../views/form/field/backend.html.twig | 23 +- .../PSC/Saxoprint_API_R1/Api/PutConfig.php | 1 + .../Controller/SaxoprintController.php | 73 +- .../System/PSC/Invoice/InvoiceApp/deno.lock | 449 +- .../PSC/Invoice/InvoiceApp/package.json | 9 +- .../System/PSC/Invoice/InvoiceApp/src/App.tsx | 33 - .../System/PSC/Invoice/InvoiceApp/src/app.tsx | 31 + .../PSC/Invoice/InvoiceApp/src/assets/App.css | 42 - .../PSC/Invoice/InvoiceApp/src/assets/app.css | 1 + .../Invoice/InvoiceApp/src/assets/index.css | 1 + .../InvoiceApp/src/components/login/login.tsx | 154 +- .../src/components/navbar/navbar.tsx | 39 + .../src/components/order/calc/calc.tsx | 16 + .../InvoiceApp/src/components/order/order.tsx | 33 + .../src/components/order/payment/payment.tsx | 55 + .../components/order/shipping/shipping.tsx | 55 + .../src/components/welcome/welcome.tsx | 10 + .../InvoiceApp/src/context/useAuth.tsx | 102 + .../InvoiceApp/src/context/useOrder.tsx | 89 + .../Invoice/InvoiceApp/src/helpers/api.tsx | 54 + .../InvoiceApp/src/helpers/currency.tsx | 18 + .../InvoiceApp/src/helpers/errorHandler.tsx | 24 + .../InvoiceApp/src/helpers/globalRouter.ts | 8 + .../PSC/Invoice/InvoiceApp/src/main.tsx | 6 +- .../Invoice/InvoiceApp/src/models/account.ts | 22 + .../Invoice/InvoiceApp/src/models/address.ts | 73 + .../Invoice/InvoiceApp/src/models/contact.ts | 82 + .../Invoice/InvoiceApp/src/models/country.ts | 15 + .../Invoice/InvoiceApp/src/models/order.ts | 76 + .../Invoice/InvoiceApp/src/models/payment.ts | 11 + .../PSC/Invoice/InvoiceApp/src/models/pos.ts | 23 + .../Invoice/InvoiceApp/src/models/price.ts | 18 + .../Invoice/InvoiceApp/src/models/product.ts | 27 + .../InvoiceApp/src/models/productGroup.ts | 6 + .../Invoice/InvoiceApp/src/models/shipping.ts | 12 + .../PSC/Invoice/InvoiceApp/src/models/shop.ts | 20 + .../PSC/Invoice/InvoiceApp/src/models/user.ts | 10 + .../InvoiceApp/src/router/protectedRoutes.tsx | 17 + .../Invoice/InvoiceApp/src/router/routes.tsx | 25 + .../InvoiceApp/src/services/authService.tsx | 34 + .../InvoiceApp/src/services/orderService.tsx | 0 .../PSC/Invoice/InvoiceApp/tailwind.config.js | 21 +- .../modules/shipping/ShippingComponent.tsx | 1 + .../System/PSC/XmlCalc/Api/GetPrice.php | 83 +- .../System/PSC/XmlCalc/Producer/Producer.php | 63 +- src/new/web/build/backend/dashboard.js | 2 +- src/new/web/build/backend/login.css | 5 +- src/new/web/build/backend/login.js | 9 +- src/new/web/build/entrypoints.json | 2 +- src/new/web/build/manifest.json | 22 +- .../web/build/plugins/system/psc/invoice.js | 5670 ++++++++------- ...bay_nice-modal-react_lib_esm_ind-73e7df.js | 6164 ++++++----------- .../application/articles/Market/Article.php | 4 +- src/old/application/data/models/Article.php | 70 +- src/old/application/data/models/Contact.php | 91 +- .../config/user/registercontact.ini | 11 +- .../config/user/registerguest.ini | 3 + .../config/user/registercontact.ini | 2 +- .../default/controllers/ArticleController.php | 6 +- .../default/controllers/UserController.php | 3 + src/old/library/TP/Controller/Action.php | 104 +- .../Db/NoContactRecordExistsDoctrine.php | 24 + 148 files changed, 10163 insertions(+), 8546 deletions(-) create mode 100644 src/new/config/packages/lock.yaml create mode 100644 src/new/src/PSC/Shop/ContactBundle/Model/AccountType.php create mode 100644 src/new/src/PSC/Shop/EntityBundle/Document/Embed/Contact.php create mode 100644 src/new/src/PSC/Shop/OrderBundle/Model/Order/Contact.php create mode 100644 src/new/src/PSC/Shop/ProductBundle/Interfaces/ICalcNeedContact.php create mode 100644 src/new/src/PSC/Shop/UserBundle/Security/ApiKey/InstanceProvider.php create mode 100644 src/new/src/PSC/Shop/UserBundle/Security/ApiKey/ShopProvider.php delete mode 100755 src/new/src/PSC/Shop/UserBundle/Security/Authenticator.php delete mode 100755 src/new/src/PSC/Shop/UserBundle/Security/LoginFormAuthenticator.php delete mode 100755 src/new/src/PSC/Shop/UserBundle/Security/User/Provider.php create mode 100644 src/new/src/PSC/Shop/UserBundle/Security/User/UserProvider.php create mode 100644 src/new/src/PSC/System/UpdateBundle/Migrations/Version202411271406.php create mode 100644 src/new/tests/PSC/Shop/Order/Api/UpdateTest.php create mode 100644 src/new/tests/PSC/Shop/Order/Service/CalcContactAccountTypeTest.php create mode 100644 src/new/tests/PSC/Shop/Order/Service/calc2.xml create mode 100644 src/new/tests/Plugins/System/PSC/XmlCalc/Api/CreateOrderTest.php create mode 100644 src/new/tests/Plugins/System/PSC/XmlCalc/Api/GetPriceTest.php delete mode 100644 src/new/var/plugins/System/PSC/Invoice/InvoiceApp/src/App.tsx create mode 100644 src/new/var/plugins/System/PSC/Invoice/InvoiceApp/src/app.tsx delete mode 100644 src/new/var/plugins/System/PSC/Invoice/InvoiceApp/src/assets/App.css create mode 100644 src/new/var/plugins/System/PSC/Invoice/InvoiceApp/src/assets/app.css create mode 100644 src/new/var/plugins/System/PSC/Invoice/InvoiceApp/src/components/navbar/navbar.tsx create mode 100644 src/new/var/plugins/System/PSC/Invoice/InvoiceApp/src/components/order/calc/calc.tsx create mode 100644 src/new/var/plugins/System/PSC/Invoice/InvoiceApp/src/components/order/order.tsx create mode 100644 src/new/var/plugins/System/PSC/Invoice/InvoiceApp/src/components/order/payment/payment.tsx create mode 100644 src/new/var/plugins/System/PSC/Invoice/InvoiceApp/src/components/order/shipping/shipping.tsx create mode 100644 src/new/var/plugins/System/PSC/Invoice/InvoiceApp/src/components/welcome/welcome.tsx create mode 100644 src/new/var/plugins/System/PSC/Invoice/InvoiceApp/src/context/useAuth.tsx create mode 100644 src/new/var/plugins/System/PSC/Invoice/InvoiceApp/src/context/useOrder.tsx create mode 100644 src/new/var/plugins/System/PSC/Invoice/InvoiceApp/src/helpers/api.tsx create mode 100644 src/new/var/plugins/System/PSC/Invoice/InvoiceApp/src/helpers/currency.tsx create mode 100644 src/new/var/plugins/System/PSC/Invoice/InvoiceApp/src/helpers/errorHandler.tsx create mode 100644 src/new/var/plugins/System/PSC/Invoice/InvoiceApp/src/helpers/globalRouter.ts create mode 100644 src/new/var/plugins/System/PSC/Invoice/InvoiceApp/src/models/account.ts create mode 100644 src/new/var/plugins/System/PSC/Invoice/InvoiceApp/src/models/address.ts create mode 100644 src/new/var/plugins/System/PSC/Invoice/InvoiceApp/src/models/contact.ts create mode 100644 src/new/var/plugins/System/PSC/Invoice/InvoiceApp/src/models/country.ts create mode 100644 src/new/var/plugins/System/PSC/Invoice/InvoiceApp/src/models/order.ts create mode 100644 src/new/var/plugins/System/PSC/Invoice/InvoiceApp/src/models/payment.ts create mode 100644 src/new/var/plugins/System/PSC/Invoice/InvoiceApp/src/models/pos.ts create mode 100644 src/new/var/plugins/System/PSC/Invoice/InvoiceApp/src/models/price.ts create mode 100644 src/new/var/plugins/System/PSC/Invoice/InvoiceApp/src/models/product.ts create mode 100644 src/new/var/plugins/System/PSC/Invoice/InvoiceApp/src/models/productGroup.ts create mode 100644 src/new/var/plugins/System/PSC/Invoice/InvoiceApp/src/models/shipping.ts create mode 100644 src/new/var/plugins/System/PSC/Invoice/InvoiceApp/src/models/shop.ts create mode 100644 src/new/var/plugins/System/PSC/Invoice/InvoiceApp/src/models/user.ts create mode 100644 src/new/var/plugins/System/PSC/Invoice/InvoiceApp/src/router/protectedRoutes.tsx create mode 100644 src/new/var/plugins/System/PSC/Invoice/InvoiceApp/src/router/routes.tsx create mode 100644 src/new/var/plugins/System/PSC/Invoice/InvoiceApp/src/services/authService.tsx create mode 100644 src/new/var/plugins/System/PSC/Invoice/InvoiceApp/src/services/orderService.tsx create mode 100644 src/old/library/TP/Validate/Db/NoContactRecordExistsDoctrine.php diff --git a/.docker/docker-compose/docker-compose-php-base.yml b/.docker/docker-compose/docker-compose-php-base.yml index d7ea779f1..d2709fd44 100644 --- a/.docker/docker-compose/docker-compose-php-base.yml +++ b/.docker/docker-compose/docker-compose-php-base.yml @@ -6,6 +6,9 @@ services: build: context: ../../ dockerfile: ./.docker/images/php/base/Dockerfile + platforms: + - "linux/amd64" + - "linux/arm64" args: - ALPINE_VERSION=${ALPINE_VERSION?} - APP_CODE_PATH=${APP_CODE_PATH_CONTAINER?} diff --git a/.docker/docker-compose/docker-compose.local.ci.prod.yml b/.docker/docker-compose/docker-compose.local.ci.prod.yml index 55cf0f581..f78c9181a 100644 --- a/.docker/docker-compose/docker-compose.local.ci.prod.yml +++ b/.docker/docker-compose/docker-compose.local.ci.prod.yml @@ -5,6 +5,9 @@ services: image: ${DOCKER_REGISTRY?}/${DOCKER_NAMESPACE?}/application-${ENV?}:${TAG?} build: context: ../ + platforms: + - "linux/amd64" + - "linux/arm64" dockerfile: ./images/php/application/Dockerfile target: ${ENV?} args: diff --git a/.docker/docker-compose/docker-compose.local.prod.yml b/.docker/docker-compose/docker-compose.local.prod.yml index ad6865403..f3965957c 100644 --- a/.docker/docker-compose/docker-compose.local.prod.yml +++ b/.docker/docker-compose/docker-compose.local.prod.yml @@ -5,6 +5,9 @@ services: image: ${DOCKER_REGISTRY?}/${DOCKER_NAMESPACE?}/php-fpm-${ENV?}:${TAG?} build: context: ../ + platforms: + - "linux/amd64" + - "linux/arm64" dockerfile: ./images/php/fpm/Dockerfile target: ${ENV?} args: @@ -14,6 +17,9 @@ services: image: ${DOCKER_REGISTRY?}/${DOCKER_NAMESPACE?}/php-cron-${ENV?}:${TAG?} build: context: ../ + platforms: + - "linux/amd64" + - "linux/arm64" dockerfile: ./images/php/cron/Dockerfile target: ${ENV?} args: @@ -24,8 +30,11 @@ services: image: ${DOCKER_REGISTRY?}/${DOCKER_NAMESPACE?}/web-${ENV?}:${TAG?} build: context: ../../ + platforms: + - "linux/amd64" + - "linux/arm64" dockerfile: ./.docker/images/nginx/Dockerfile target: ${ENV?} args: - NGINX_VERSION=${NGINX_VERSION?} - - APP_CODE_PATH=${APP_CODE_PATH_CONTAINER?} \ No newline at end of file + - APP_CODE_PATH=${APP_CODE_PATH_CONTAINER?} diff --git a/.docker/docker-compose/docker-compose.local.yml b/.docker/docker-compose/docker-compose.local.yml index 4b4d8b9a8..91a43fd78 100644 --- a/.docker/docker-compose/docker-compose.local.yml +++ b/.docker/docker-compose/docker-compose.local.yml @@ -63,6 +63,9 @@ services: image: ${DOCKER_REGISTRY?}/${DOCKER_NAMESPACE?}/application-${ENV?}:${TAG?} build: context: ../ + platforms: + - "linux/amd64" + - "linux/arm64" dockerfile: ./images/php/application/Dockerfile args: - BASE_IMAGE=${DOCKER_REGISTRY?}/${DOCKER_NAMESPACE?}/php-base-${ENV?}:${TAG?} diff --git a/.docker/images/nginx/conf.d/default.conf b/.docker/images/nginx/conf.d/default.conf index 7680b83a0..fe878ebaf 100644 --- a/.docker/images/nginx/conf.d/default.conf +++ b/.docker/images/nginx/conf.d/default.conf @@ -41,7 +41,7 @@ server { add_header X-Content-Type-Options nosniff always; add_header X-Frame-Options "SAMEORIGIN" always; add_header X-XSS-Protection "1; mode=block" always; - add_header Content-Security-Policy "default-src https: 'unsafe-eval' 'unsafe-inline'; object-src 'none'" always; + add_header Content-Security-Policy "default-src https: 'unsafe-eval' 'unsafe-inline'; object-src 'none'; worker-src blob:; img-src https: blob: data:" always; fastcgi_temp_path /tmp/fastcgi 1 2; fastcgi_split_path_info ^(.+\.php)(/.+)$; fastcgi_pass php-fpm:9000; diff --git a/.docker/images/php/base/conf.d/zz-app-prod.ini b/.docker/images/php/base/conf.d/zz-app-prod.ini index 4d9c8fca2..9cc538bde 100644 --- a/.docker/images/php/base/conf.d/zz-app-prod.ini +++ b/.docker/images/php/base/conf.d/zz-app-prod.ini @@ -5,5 +5,5 @@ opcache.revalidate_freq = "0" assert.exception = 1 zend.assertions = 1 -display_error=0 -error_reporting=E_ALL & ~E_NOTICE & ~E_DEPRECATED \ No newline at end of file +display_errors=0 +error_reporting=E_ALL & ~E_NOTICE & ~E_DEPRECATED diff --git a/.php-cs-fixer.cache b/.php-cs-fixer.cache index 27cfb5671..77e68316b 100644 --- a/.php-cs-fixer.cache +++ b/.php-cs-fixer.cache @@ -1 +1 @@ -{"php":"8.1.2-1ubuntu2.19","version":"3.64.0","indent":" ","lineEnding":"\n","rules":{"binary_operator_spaces":{"default":"at_least_single_space"},"blank_line_after_opening_tag":true,"blank_line_between_import_groups":true,"blank_lines_before_namespace":true,"braces_position":{"allow_single_line_empty_anonymous_classes":true},"class_definition":{"inline_constructor_arguments":false,"space_before_parenthesis":true},"compact_nullable_type_declaration":true,"declare_equal_normalize":true,"lowercase_cast":true,"lowercase_static_reference":true,"new_with_parentheses":true,"no_blank_lines_after_class_opening":true,"no_extra_blank_lines":{"tokens":["use"]},"no_leading_import_slash":true,"no_whitespace_in_blank_line":true,"ordered_class_elements":{"order":["use_trait"]},"ordered_imports":{"imports_order":["class","function","const"],"sort_algorithm":"none"},"return_type_declaration":true,"short_scalar_cast":true,"single_import_per_statement":{"group_to_single_imports":false},"single_space_around_construct":{"constructs_followed_by_a_single_space":["abstract","as","case","catch","class","const_import","do","else","elseif","final","finally","for","foreach","function","function_import","if","insteadof","interface","namespace","new","private","protected","public","static","switch","trait","try","use","use_lambda","while"],"constructs_preceded_by_a_single_space":["as","else","elseif","use_lambda"]},"single_trait_insert_per_statement":true,"ternary_operator_spaces":true,"unary_operator_spaces":{"only_dec_inc":true},"visibility_required":true,"blank_line_after_namespace":true,"constant_case":true,"control_structure_braces":true,"control_structure_continuation_position":true,"elseif":true,"function_declaration":true,"indentation_type":true,"line_ending":true,"lowercase_keywords":true,"method_argument_space":{"attribute_placement":"ignore","on_multiline":"ensure_fully_multiline"},"no_break_comment":true,"no_closing_tag":true,"no_multiple_statements_per_line":true,"no_space_around_double_colon":true,"no_spaces_after_function_name":true,"no_trailing_whitespace":true,"no_trailing_whitespace_in_comment":true,"single_blank_line_at_eof":true,"single_class_element_per_statement":{"elements":["property"]},"single_line_after_imports":true,"spaces_inside_parentheses":true,"statement_indentation":true,"switch_case_semicolon_to_colon":true,"switch_case_space":true,"encoding":true,"full_opening_tag":true},"hashes":{"src\/new\/var\/plugins\/System\/PSC\/SecurePay\/Document\/.null-ls_485072_SecurePay.php":"8db7b654f79dcfa0492c0de437d82658","src\/new\/var\/plugins\/System\/PSC\/SecurePay\/Document\/.null-ls_346882_SecurePay.php":"f1cf0f37ca8f40323f79f7400ac7f041","src\/new\/var\/plugins\/System\/PSC\/SecurePay\/Payment\/.null-ls_694600_Provider.php":"cf55a7d0b07d28804d954b19dd80fac4","src\/new\/var\/plugins\/System\/PSC\/SecurePay\/Payment\/.null-ls_600323_Provider.php":"7fa9e337c95fe353a3d5070676cd2408","src\/new\/var\/plugins\/System\/PSC\/SecurePay\/Payment\/.null-ls_120330_Provider.php":"8cc236c3069565d0c285226f7cc177ed","src\/new\/var\/plugins\/System\/PSC\/SecurePay\/Payment\/.null-ls_825549_Provider.php":"385f68f522d8af83f8274369378b71e0","src\/new\/var\/plugins\/System\/PSC\/SecurePay\/Payment\/.null-ls_887501_Provider.php":"6702566312cdc1b7395928990f9b526c","src\/new\/var\/plugins\/System\/PSC\/SecurePay\/Payment\/.null-ls_126430_Provider.php":"626e472983d165c662e348e6d8a0168f","src\/new\/var\/plugins\/System\/PSC\/SecurePay\/Payment\/.null-ls_779747_Provider.php":"c6697c4a1fc124602fedaeedcf1be38c","src\/new\/var\/plugins\/System\/PSC\/SecurePay\/Payment\/.null-ls_307705_Provider.php":"4931be16b9f0a010de1d8667d4abb00f","src\/new\/var\/plugins\/System\/PSC\/SecurePay\/Payment\/.null-ls_881840_Provider.php":"b3000fcba0820e8d9fe052db8998e2f0","src\/new\/var\/plugins\/System\/PSC\/SecurePay\/Payment\/.null-ls_459172_Provider.php":"746def06984a44549f19dc20c11e43a0","src\/new\/var\/plugins\/System\/PSC\/SecurePay\/Payment\/.null-ls_777890_Provider.php":"afa721342c4bd77af180a73589b70f68","src\/new\/var\/plugins\/System\/PSC\/SecurePay\/Payment\/.null-ls_829847_Provider.php":"6705b062187a447289db1250b5501f03","src\/new\/var\/plugins\/System\/PSC\/SecurePay\/Payment\/.null-ls_692307_Provider.php":"96cc9d0305422b7fca29833eadf302b4","src\/new\/var\/plugins\/System\/PSC\/SecurePay\/Payment\/.null-ls_110905_Provider.php":"45937ebe2273f29b0b591085ad9b9b9e","src\/new\/var\/plugins\/System\/PSC\/SecuPay\/.null-ls_305204_Plugin.php":"69c20dbd2e4042af7fc42516e5c625a3","src\/new\/var\/plugins\/System\/PSC\/SecuPay\/.null-ls_912191_Plugin.php":"903815ef37573bd54993d4ef492c4a9b","src\/new\/var\/plugins\/System\/PSC\/SecuPay\/Document\/.null-ls_925218_SecuPay.php":"926a46c14e9196ba7981feaae346c5a4","src\/new\/var\/plugins\/System\/PSC\/SecuPay\/Document\/.null-ls_297600_SecuPay.php":"88b764584fa0c5bea3566ac711976b38","src\/new\/var\/plugins\/System\/PSC\/SecuPay\/Payment\/.null-ls_119662_Provider.php":"d6c7080982411044aba06cced9090240","src\/new\/var\/plugins\/System\/PSC\/SecuPay\/Payment\/.null-ls_604396_Provider.php":"b097a2867b07347d8de8ee0689f15aa4","src\/new\/var\/plugins\/System\/PSC\/SecuPay\/Payment\/.null-ls_924576_Provider.php":"b097a2867b07347d8de8ee0689f15aa4","src\/new\/var\/plugins\/System\/PSC\/SecuPay\/Payment\/.null-ls_640620_Provider.php":"5df2c67b316d7f1ee5b9897a452c75f6","src\/new\/var\/plugins\/System\/PSC\/SecuPay\/Document\/.null-ls_993007_SecuPay.php":"9ba65396cfc9f3ba7548225068b23689","src\/new\/var\/plugins\/System\/PSC\/SecurePay\/Document\/.null-ls_809642_SecurePay.php":"7e4c1842b1aebe1f5ae3b7d2523679bb","src\/new\/var\/plugins\/System\/PSC\/SecuPay\/Document\/.null-ls_482634_SecuPay.php":"ec95bcd60f75f7b5cd739cbeb53459f7","src\/new\/var\/plugins\/System\/PSC\/SecuPay\/Document\/.null-ls_667689_SecuPay.php":"3a0067a7dd0705ac3c3b3a9890f335c9","src\/new\/var\/plugins\/System\/PSC\/SecuPay\/Document\/.null-ls_907126_SecuPay.php":"a3028531ba02862a3f4edf730df0f7b0","src\/new\/var\/plugins\/System\/PSC\/SecurePay\/Document\/.null-ls_505000_SecurePay.php":"a354028bda9d2e99bfa93ef548c10f8c","src\/new\/var\/plugins\/System\/PSC\/SecuPay\/Payment\/.null-ls_708646_Provider.php":"590cf15cf2598629f8e1fdc3ed795a59","src\/new\/var\/plugins\/Custom\/Maincontor\/Reselleradmin\/Controller\/.null-ls_478904_OrdersController.php":"ae89abaa33639571a12f8de922ccc0fe","src\/new\/var\/plugins\/Custom\/Maincontor\/Reselleradmin\/Controller\/.null-ls_538655_OrdersController.php":"3a0ad8ad3026cede9fd966b1f10c08ca","src\/new\/var\/plugins\/Custom\/Rieglerdruck\/TpSplit\/Queue\/.null-ls_876789_Split.php":"64b7f0701b01422f24600a0e043ebe55","src\/new\/var\/plugins\/Custom\/Rieglerdruck\/TpSplit\/Queue\/.null-ls_901343_Split.php":"9323f37107d9d91878cc6d78269af2ef","src\/new\/var\/plugins\/Custom\/Rieglerdruck\/TpSplit\/Queue\/.null-ls_206051_Split.php":"b51f93c8be80c587801b6ffd86224b56","src\/new\/var\/plugins\/Custom\/Rieglerdruck\/TpSplit\/Queue\/.null-ls_368722_Split.php":"b3f6bcbaee9af2e8a808751bf0707b35","src\/new\/var\/plugins\/Custom\/Rieglerdruck\/TpSplit\/Queue\/.null-ls_953446_Split.php":"32e04c1588215cb6802e4da30f0050ac","src\/new\/var\/plugins\/Custom\/Rieglerdruck\/TpSplit\/Queue\/.null-ls_566810_Split.php":"abad50ada2e23398fe5e2ff46e4d0fd5","src\/new\/var\/plugins\/Custom\/Rieglerdruck\/TpSplit\/Queue\/.null-ls_346297_Split.php":"f63d8241a181107a083a3b1d936804a3","src\/new\/var\/plugins\/Custom\/Rieglerdruck\/TpSplit\/Queue\/.null-ls_949960_Split.php":"a0002d5a55588dba485f3d84bcf9e3a9","src\/new\/var\/plugins\/Custom\/Rieglerdruck\/TpSplit\/Queue\/.null-ls_570534_Split.php":"038f139dd78ebed115a531c414ec82ca","src\/new\/var\/plugins\/System\/PSC\/SecuPay\/Api\/.null-ls_252970_Base.php":"4609252df77e1ab81c3946c6ccb9183e","src\/new\/var\/plugins\/System\/PSC\/SecuPay\/Api\/.null-ls_781010_Base.php":"d886678d1a4f9964d5c6497b71f1d27f","src\/new\/var\/plugins\/System\/PSC\/SecuPay\/Api\/.null-ls_293801_Base.php":"9ecd5b5574bc4188300389ebc5a0b624","src\/new\/var\/plugins\/System\/PSC\/SecuPay\/Api\/.null-ls_858487_Base.php":"070ffea3aea71f0efca0b253e48488cd","src\/new\/var\/plugins\/System\/PSC\/SecuPay\/Api\/.null-ls_720417_Base.php":"ee284a42e43b1771aa08771c5d6be927","src\/new\/var\/plugins\/System\/PSC\/SecuPay\/Api\/.null-ls_552351_Base.php":"966df32d4cb6cd301a4f3c64193bbb07","src\/new\/var\/plugins\/System\/PSC\/SecuPay\/Api\/.null-ls_423475_Base.php":"aae0e8ef139177165c2a518b41b0572f","src\/new\/var\/plugins\/System\/PSC\/SecuPay\/Api\/.null-ls_451157_Base.php":"d4091421c74de818d0a3aa1cce41bc03","src\/new\/var\/plugins\/System\/PSC\/SecuPay\/Api\/.null-ls_718850_Base.php":"4314f7516a63aa28033b35260dc0a4ef","src\/new\/var\/plugins\/System\/PSC\/SecuPay\/Api\/.null-ls_482031_Base.php":"bb1777d2e4445b4e7d81d6e7e9db2480","src\/new\/var\/plugins\/System\/PSC\/SecuPay\/Payment\/.null-ls_912948_Provider.php":"69ce7af26883d1b8f6b37bc5755492bb","src\/new\/var\/plugins\/System\/PSC\/SecuPay\/Payment\/.null-ls_881577_Provider.php":"d344bb2a0c94f853c0d2c4343c1a0d79","src\/new\/var\/plugins\/System\/PSC\/SecuPay\/Api\/.null-ls_101891_Base.php":"89f09814d44f2c9f0eb603968a4ff3ff","src\/new\/var\/plugins\/System\/PSC\/SecuPay\/Payment\/.null-ls_143369_Provider.php":"d7c049845ebfa0cfd3c39d6711eb825a","src\/new\/var\/plugins\/System\/PSC\/SecuPay\/Payment\/.null-ls_323358_Provider.php":"a8cd8394b5e98eefb682d0d6bf911801","src\/new\/var\/plugins\/System\/PSC\/SecuPay\/Payment\/.null-ls_563475_Provider.php":"16a48cd14bcd120b823692ebd33d356c","src\/new\/var\/plugins\/System\/PSC\/SecuPay\/Payment\/.null-ls_348112_Provider.php":"662522194b86340ce881946b3af15f5b","src\/new\/var\/plugins\/System\/PSC\/SecuPay\/Payment\/.null-ls_786907_Provider.php":"5965cf16825f79499d125f7f3ed85402","src\/new\/var\/plugins\/System\/PSC\/SecuPay\/Payment\/.null-ls_502516_Provider.php":"4cef9eb507a988a5d5d31378b2524796","src\/new\/var\/plugins\/System\/PSC\/SecuPay\/Payment\/.null-ls_742498_Provider.php":"8f27a6030284897f1939312a7e93556b","src\/new\/var\/plugins\/System\/PSC\/SecuPay\/Api\/.null-ls_723074_CreatePayment.php":"6ebba38c9efd7686502fdde3e0506e3d","src\/new\/var\/plugins\/System\/PSC\/SecuPay\/Api\/.null-ls_951232_CreatePayment.php":"a5e63df52616d998fc0b27982ff6eb50","src\/new\/var\/plugins\/System\/PSC\/SecuPay\/Api\/.null-ls_466937_CreatePayment.php":"ad858c8d0fe8886c864af82f286eba62","src\/new\/var\/plugins\/System\/PSC\/SecuPay\/Api\/.null-ls_938370_Base.php":"a968d7af51c67407d39aa16f02c371c9","src\/new\/var\/plugins\/System\/PSC\/SecuPay\/Api\/.null-ls_322046_Base.php":"f0940337bca454980adac0fd8bb87938","src\/new\/var\/plugins\/System\/PSC\/SecuPay\/Api\/.null-ls_759059_Base.php":"068f8bbce0d81aa759bfcf2fd16d6ae0","src\/new\/var\/plugins\/System\/PSC\/SecuPay\/Api\/.null-ls_717846_CreatePayment.php":"14eafcb0a12b9c542ab6216a8df9e30c","src\/new\/var\/plugins\/System\/PSC\/SecuPay\/Api\/.null-ls_250630_CreatePayment.php":"5b397af024b2d4a357274eb119d8ced3","src\/new\/var\/plugins\/System\/PSC\/SecuPay\/Api\/.null-ls_633494_CreatePayment.php":"82aee13b54d6c4ae6b3fb489467ea0fa","src\/new\/var\/plugins\/System\/PSC\/SecuPay\/Api\/.null-ls_777577_CreatePayment.php":"921e09a8f748289f25f8d23ec47dd518","src\/new\/var\/plugins\/System\/PSC\/SecuPay\/Api\/.null-ls_613616_CreatePayment.php":"9a1f9c9d8c1d43dc1185c1fe16bc3175","src\/new\/var\/plugins\/System\/PSC\/SecuPay\/Api\/.null-ls_945430_CreatePayment.php":"77e761cc9de3df5af37d80b779c48cf0","src\/new\/var\/plugins\/System\/PSC\/SecuPay\/Api\/.null-ls_510574_CreatePayment.php":"f424c05a860674e16beb59bc91d028f9","src\/new\/var\/plugins\/System\/PSC\/SecuPay\/Api\/.null-ls_416640_CreatePayment.php":"7cc426b9b86f2d7dc7f4ff0fce5dad2a","src\/new\/var\/plugins\/System\/PSC\/SecuPay\/Api\/.null-ls_781907_CreatePayment.php":"e31e5a489a8b7971731f3b370595854d","src\/new\/var\/plugins\/System\/PSC\/SecuPay\/Api\/.null-ls_855867_CreatePayment.php":"92c46b5d11272d4d46c66092da2330f0","src\/new\/var\/plugins\/System\/PSC\/SecuPay\/Api\/.null-ls_468111_CreatePayment.php":"c3aca56e5192932b6f08f51c10f30409","src\/new\/var\/plugins\/System\/PSC\/SecuPay\/Api\/.null-ls_126013_Base.php":"69050c9a51f352bce983b5dfd5bb0736","src\/new\/var\/plugins\/System\/PSC\/SecuPay\/Api\/.null-ls_958441_Base.php":"10f3c977e780f5d7a9e07fbd4f2eccaf","src\/new\/var\/plugins\/System\/PSC\/SecuPay\/Api\/.null-ls_197325_Base.php":"8fa1354f69b7e613d366d9dc0440f25e","src\/new\/var\/plugins\/System\/PSC\/SecuPay\/Api\/.null-ls_867334_Base.php":"bf96996f78ab0f7d9aa2d7e56480fca6","src\/new\/var\/plugins\/System\/PSC\/SecuPay\/Api\/.null-ls_478230_CreatePayment.php":"fa2c12a84d92bde3c7522df2c2d30294","src\/new\/var\/plugins\/System\/PSC\/SecuPay\/Api\/.null-ls_146616_Base.php":"9b604893bdf9ea5e015163ff09b071b2","src\/new\/var\/plugins\/System\/PSC\/SecuPay\/Payment\/.null-ls_622204_Provider.php":"d8919ad9f1d37cc45c32c02c554a8704","src\/new\/var\/plugins\/System\/PSC\/SecuPay\/Payment\/.null-ls_126820_Provider.php":"f179e095bc1bdba764bafcdaca250ccd","src\/new\/var\/plugins\/System\/PSC\/SecuPay\/Payment\/.null-ls_806265_Provider.php":"54b952b9f066a344052f8677477e0faa","src\/new\/var\/plugins\/System\/PSC\/SecuPay\/Api\/.null-ls_986660_Base.php":"49b2a9f3cde3c1c3a9548be9de59663e","src\/new\/var\/plugins\/System\/PSC\/SecuPay\/Api\/.null-ls_433980_Base.php":"e9a08e9b44ef3bb99ac8ab3b288e1695","src\/new\/var\/plugins\/System\/PSC\/SecuPay\/Api\/.null-ls_394743_CreatePayment.php":"a86e14aed66250aa200fb9eaf2361c37","src\/new\/var\/plugins\/System\/PSC\/SecuPay\/Api\/.null-ls_746675_CreatePayment.php":"5654a6c905a43bee7d0c431f554c640e","src\/new\/var\/plugins\/System\/PSC\/SecuPay\/Payment\/.null-ls_705039_Provider.php":"ae367d938360702a90edb5d793a9efee","src\/new\/var\/plugins\/System\/PSC\/SecuPay\/Api\/.null-ls_693946_CreatePayment.php":"20fbfdc2f3ce792a4f0c7ba4684adcc8","src\/new\/var\/plugins\/System\/PSC\/SecuPay\/Api\/.null-ls_764179_CreatePayment.php":"b4e2d94c9376cd3ae7eae23c1bd2dbe0","src\/new\/var\/plugins\/System\/PSC\/SecuPay\/Payment\/.null-ls_270264_Provider.php":"9e63eb4e68839ed32653557e43ce50c2","src\/new\/var\/plugins\/System\/PSC\/SecuPay\/Payment\/.null-ls_509621_Provider.php":"6f02d9c110961741e499707200e679a7","src\/new\/var\/plugins\/System\/PSC\/SecuPay\/Api\/.null-ls_171300_CreatePayment.php":"7879301a43a6a105a199bfaf3a960543","src\/new\/var\/plugins\/System\/PSC\/SecuPay\/Payment\/.null-ls_816095_Provider.php":"2abca30c30a6911e10c19b6368a6c303","src\/new\/var\/plugins\/System\/PSC\/SecuPay\/Payment\/.null-ls_420197_Provider.php":"3fba751627ce2c7a15416a76d3c97cfe","src\/new\/var\/plugins\/System\/PSC\/SecuPay\/Api\/.null-ls_867165_CreatePayment.php":"148064e51535e4a72ae504731c824f44","src\/new\/var\/plugins\/System\/PSC\/SecuPay\/Api\/.null-ls_916821_CreatePayment.php":"0e8d3da72fa1c50d7c93294ee2cc86d5","src\/new\/var\/plugins\/System\/PSC\/SecuPay\/Api\/.null-ls_950883_CreatePayment.php":"0dd317ecd25ad106027b1ed140dc76e6","src\/new\/var\/plugins\/System\/PSC\/SecuPay\/Api\/.null-ls_973858_CreatePayment.php":"e7198b49e94457c9ede9597181f411b7","src\/new\/var\/plugins\/System\/PSC\/SecuPay\/Api\/.null-ls_705885_CreatePayment.php":"24c884e4d4e4584fed9d4fa0f65bcfb9","src\/new\/var\/plugins\/System\/PSC\/SecuPay\/Api\/.null-ls_277492_CreatePayment.php":"c8edc07e70267bcbe308ebba664a2c99","src\/new\/var\/plugins\/System\/PSC\/SecuPay\/Api\/.null-ls_255583_CreatePayment.php":"ba750ca292cb6a72a23d3a9b0a471a64","src\/new\/var\/plugins\/System\/PSC\/SecuPay\/Api\/.null-ls_602229_CreatePayment.php":"3258a406d1d4db695b56145dc9035fdf","src\/new\/var\/plugins\/System\/PSC\/SecuPay\/Payment\/.null-ls_433085_Provider.php":"f09388c6550bea08a788b02c0cdb0135","src\/new\/var\/plugins\/System\/PSC\/SecuPay\/Api\/.null-ls_760520_CreatePayment.php":"e66d514b5df953a1a683928d125e1786","src\/new\/var\/plugins\/System\/PSC\/SecuPay\/Api\/.null-ls_473443_CreatePayment.php":"c380035b17dda87e5ecef04a2db3c2e6","src\/new\/src\/PSC\/System\/SettingsBundle\/Service\/.null-ls_110115_Assets.php":"4399e0a8a5efa0cf4ef354dc05ac5606","src\/new\/src\/PSC\/System\/SettingsBundle\/Service\/.null-ls_758685_Assets.php":"6344d4edc98632d2a152ef40f695667a","src\/new\/src\/PSC\/System\/SettingsBundle\/Service\/.null-ls_647644_Assets.php":"2fc136059aeb841ce2643cdfc516491d","src\/new\/src\/PSC\/System\/SettingsBundle\/Service\/.null-ls_995372_Assets.php":"69003196b7ae8a66420a86c70a5d0cd3","src\/new\/src\/PSC\/System\/SettingsBundle\/Service\/.null-ls_346765_Assets.php":"6344d4edc98632d2a152ef40f695667a","src\/new\/src\/PSC\/System\/SettingsBundle\/Service\/.null-ls_618723_Assets.php":"4399e0a8a5efa0cf4ef354dc05ac5606"}} \ No newline at end of file +{"php":"8.3.6","version":"3.64.0","indent":" ","lineEnding":"\n","rules":{"binary_operator_spaces":{"default":"at_least_single_space"},"blank_line_after_opening_tag":true,"blank_line_between_import_groups":true,"blank_lines_before_namespace":true,"braces_position":{"allow_single_line_empty_anonymous_classes":true},"class_definition":{"inline_constructor_arguments":false,"space_before_parenthesis":true},"compact_nullable_type_declaration":true,"declare_equal_normalize":true,"lowercase_cast":true,"lowercase_static_reference":true,"new_with_parentheses":true,"no_blank_lines_after_class_opening":true,"no_extra_blank_lines":{"tokens":["use"]},"no_leading_import_slash":true,"no_whitespace_in_blank_line":true,"ordered_class_elements":{"order":["use_trait"]},"ordered_imports":{"imports_order":["class","function","const"],"sort_algorithm":"none"},"return_type_declaration":true,"short_scalar_cast":true,"single_import_per_statement":{"group_to_single_imports":false},"single_space_around_construct":{"constructs_followed_by_a_single_space":["abstract","as","case","catch","class","const_import","do","else","elseif","final","finally","for","foreach","function","function_import","if","insteadof","interface","namespace","new","private","protected","public","static","switch","trait","try","use","use_lambda","while"],"constructs_preceded_by_a_single_space":["as","else","elseif","use_lambda"]},"single_trait_insert_per_statement":true,"ternary_operator_spaces":true,"unary_operator_spaces":{"only_dec_inc":true},"visibility_required":true,"blank_line_after_namespace":true,"constant_case":true,"control_structure_braces":true,"control_structure_continuation_position":true,"elseif":true,"function_declaration":true,"indentation_type":true,"line_ending":true,"lowercase_keywords":true,"method_argument_space":{"attribute_placement":"ignore","on_multiline":"ensure_fully_multiline"},"no_break_comment":true,"no_closing_tag":true,"no_multiple_statements_per_line":true,"no_space_around_double_colon":true,"no_spaces_after_function_name":true,"no_trailing_whitespace":true,"no_trailing_whitespace_in_comment":true,"single_blank_line_at_eof":true,"single_class_element_per_statement":{"elements":["property"]},"single_line_after_imports":true,"spaces_inside_parentheses":true,"statement_indentation":true,"switch_case_semicolon_to_colon":true,"switch_case_space":true,"encoding":true,"full_opening_tag":true},"hashes":{"src\/new\/src\/PSC\/System\/SettingsBundle\/Service\/.null-ls_678565_TemplateVars.php":"b8148b7eb6ff3fa26e83dd8dcacd7a93","src\/new\/src\/PSC\/System\/SettingsBundle\/Service\/.null-ls_921931_TemplateVars.php":"84afe001da2b9d1ec393bedc80b1ec09","src\/new\/src\/PSC\/Shop\/ContactBundle\/Dto\/Refresh\/.null-ls_979800_Output.php":"01f0c9b0541b5dbaab8319566610ae54","src\/new\/src\/PSC\/Shop\/ContactBundle\/Api\/.null-ls_815970_Login.php":"493f385b67b484d5602b30c5b7f24cdf","src\/new\/src\/PSC\/Shop\/ContactBundle\/Api\/.null-ls_868273_Login.php":"dea97d6b51e7bee6269a7a7afdd7af49","src\/new\/src\/PSC\/System\/SettingsBundle\/Controller\/Backend\/.null-ls_852076_HelpController.php":"f2098b72d5b11060fa53dc1ee2f27fec","src\/new\/var\/plugins\/Custom\/PSC\/Saxoprint_API_R1\/Controller\/.null-ls_305734_SaxoprintController.php":"5817ef815c81fa7e8e5efa924c975b7a","src\/new\/src\/PSC\/System\/SettingsBundle\/Service\/.null-ls_319575_Help.php":"5e45ee4c643ea335a73e47ad2f8b1c17","src\/new\/src\/PSC\/System\/SettingsBundle\/Service\/.null-ls_205986_Help.php":"1c1119b2601a923b1c3a17b48922dbfb","src\/new\/src\/PSC\/System\/SettingsBundle\/Service\/.null-ls_522913_Help.php":"9dc7761f85fb270919ff40cb7cc66ae9","src\/new\/var\/plugins\/Custom\/PSC\/Saxoprint_API_R1\/Controller\/.null-ls_452110_SaxoprintController.php":"65549311b6b6f3c1d74f61566bc3a393","src\/new\/src\/PSC\/Shop\/QueueBundle\/Command\/.null-ls_364286_DoCommand.php":"fd27949bfe1976235f53924c71cc34f5","src\/new\/src\/PSC\/Shop\/QueueBundle\/Command\/.null-ls_556497_DoCommand.php":"058320b69e2d986cc1c3b332727b1fb5","src\/new\/src\/PSC\/Shop\/QueueBundle\/Command\/.null-ls_259153_DoCommand.php":"fe3d0479e9947c877b3440d4047383f1","src\/new\/tests\/PSC\/Shop\/Order\/Api\/.null-ls_859269_UpdateTest.php":"1b40167f7c02015cbbc89a13946b245e","src\/new\/tests\/PSC\/Shop\/Order\/Api\/.null-ls_243528_UpdateTest.php":"c49604c20a014d10dedbe63e7e35967b","src\/new\/tests\/PSC\/Shop\/Order\/Api\/.null-ls_338383_UpdateTest.php":"f0141a829571b09432dd3aff1e324277","src\/new\/tests\/PSC\/Shop\/Order\/Api\/.null-ls_339307_UpdateTest.php":"c12a52adb670b2445b002457e64324c2","src\/new\/tests\/PSC\/Shop\/Order\/Api\/.null-ls_939302_UpdateTest.php":"5f0bd42519dfb74c3084ceaf85c26de3","src\/new\/var\/plugins\/Custom\/PSC\/R2_Pitchprint\/Controller\/Backend\/.null-ls_625843_DesignController.php":"85737b26b598a8b7948c3f31b6ccf0ba","src\/new\/var\/plugins\/Custom\/PSC\/R2_Pitchprint\/Controller\/Backend\/.null-ls_371816_DesignController.php":"4d1a6c76622a8225f63322361d009c9c","src\/new\/var\/plugins\/Custom\/PSC\/R2_Pitchprint\/Controller\/Backend\/.null-ls_737831_DesignController.php":"9f4c54e27ad88c83090478be8a4aab38","src\/new\/var\/plugins\/Custom\/PSC\/R2_Pitchprint\/Controller\/Backend\/.null-ls_638959_DesignController.php":"1b56259576296979ff0899d41f3de951","src\/new\/var\/plugins\/Custom\/PSC\/R2_Pitchprint\/Controller\/Backend\/.null-ls_624172_DesignController.php":"1b56259576296979ff0899d41f3de951","src\/new\/var\/plugins\/Custom\/PSC\/R2_Pitchprint\/Controller\/Backend\/.null-ls_951837_DesignController.php":"ae2eecd0fe7ff165c185aaa057d65bc0","src\/new\/var\/plugins\/Custom\/PSC\/R2_Pitchprint\/Controller\/Backend\/.null-ls_610106_DesignController.php":"318f09a52dc8e14870fe3965af9108f9","src\/new\/var\/plugins\/Custom\/PSC\/R2_Pitchprint\/Controller\/Backend\/.null-ls_355942_DesignController.php":"d4443a2909ebf85cc7a5b709838722cf","src\/new\/var\/plugins\/Custom\/PSC\/R2_Pitchprint\/Controller\/Backend\/.null-ls_873625_DesignController.php":"55c84ed1ae2d9a80124bca2b280dd236","src\/new\/var\/plugins\/Custom\/PSC\/R2_Pitchprint\/Controller\/Backend\/.null-ls_891544_DesignController.php":"3719f4a6a25be03feb2cdbbde9656ae4","src\/new\/var\/plugins\/Custom\/PSC\/R2_Pitchprint\/Controller\/Backend\/.null-ls_993355_DesignController.php":"7614b5b7452b5c58b0a9f37f95509924","src\/new\/var\/plugins\/Custom\/PSC\/R2_Pitchprint\/Controller\/Backend\/.null-ls_182906_DesignController.php":"d010f4513dbdbc4ec5a76160a91b9a59","src\/new\/var\/plugins\/Custom\/PSC\/R2_Pitchprint\/Controller\/Backend\/.null-ls_464907_DesignController.php":"bef87b47b4c0e37ad4a8d5ca66d6afab","src\/new\/var\/plugins\/Custom\/PSC\/R2_Pitchprint\/Controller\/Backend\/.null-ls_927423_DesignController.php":"d169370f4c3451e857c01894f59d2d83","src\/new\/var\/plugins\/Custom\/PSC\/R2_Pitchprint\/Controller\/Backend\/.null-ls_632869_DesignController.php":"843e98ec05b0fc8c35cc56ce90eebb04","src\/new\/var\/plugins\/Custom\/PSC\/R2_Pitchprint\/Controller\/Backend\/.null-ls_135233_DesignController.php":"4288c4b7a481b8e5c5d504ffd6cc9eab","src\/new\/var\/plugins\/Custom\/PSC\/R2_Pitchprint\/Controller\/Backend\/.null-ls_419276_DesignController.php":"7a41b68401d6ccebe0acb0ab8f33bdd7","src\/new\/var\/plugins\/Custom\/PSC\/R2_Pitchprint\/Controller\/Backend\/.null-ls_864618_DesignController.php":"9b1dcb85d4258a2353230bba162a1be2","src\/new\/var\/plugins\/Custom\/PSC\/R2_Pitchprint\/Controller\/Backend\/.null-ls_141750_DesignController.php":"a2edbdee2b13b3bf5b7e033bf1615efd","src\/new\/var\/plugins\/Custom\/PSC\/R2_Pitchprint\/Controller\/Backend\/.null-ls_268024_DesignController.php":"180fa6c40d673a569a6c3da40c1553b4","src\/new\/var\/plugins\/Custom\/PSC\/R2_Pitchprint\/Controller\/Backend\/.null-ls_626338_DesignController.php":"2b2d4d0b1c02113dde8d4478845efd1b","src\/new\/var\/plugins\/Custom\/PSC\/R2_Pitchprint\/Controller\/Backend\/.null-ls_558040_DesignController.php":"0135d944ad127a18f7480134fbed57dd","src\/new\/var\/plugins\/Custom\/PSC\/R2_Pitchprint\/Controller\/Backend\/.null-ls_314969_DesignController.php":"c33d3515fcdcdeb94caf4d9f0a0c8c37","src\/new\/var\/plugins\/Custom\/PSC\/R2_Pitchprint\/Controller\/Backend\/.null-ls_604690_DesignController.php":"74f5fedd6240714029f76237b01bf0ee","src\/new\/var\/plugins\/Custom\/PSC\/R2_Pitchprint\/Controller\/Backend\/.null-ls_960356_DesignController.php":"552c797666575ce5fe02aec6b7827fa6","src\/new\/var\/plugins\/Custom\/PSC\/R2_Pitchprint\/Controller\/Backend\/.null-ls_956709_DesignController.php":"8b90d77d988cafa66b5c5c1147360069","src\/new\/var\/plugins\/Custom\/PSC\/R2_Pitchprint\/Controller\/Backend\/.null-ls_422826_DesignController.php":"f3f4cb16b31629301c7fe9ffa4561bb4","src\/new\/var\/plugins\/Custom\/PSC\/R2_Pitchprint\/Controller\/Backend\/.null-ls_417743_DesignController.php":"2b93bfa822aa1cb99352e709720aa8d9","src\/new\/var\/plugins\/Custom\/PSC\/R2_Pitchprint\/Form\/.null-ls_319709_BackendFields.php":"4223002fa45ed69b5f3e88c1fb6360b3","src\/new\/var\/plugins\/Custom\/PSC\/Pitchprint\/Form\/.null-ls_859577_BackendFields.php":"8fb30cef3bfaa2470196efd1cd7a289f","src\/new\/var\/plugins\/Custom\/PSC\/R2_Pitchprint\/Form\/.null-ls_276725_BackendFields.php":"4242dcb42c41cdee66310c29d35e1ab4","src\/new\/var\/plugins\/Custom\/PSC\/Printess\/Form\/.null-ls_265395_ProductSettings.php":"89ec44c1d3103ebd3d3b81a1616fecd6","src\/new\/src\/PSC\/Shop\/UserBundle\/Security\/.null-ls_441617_ApiKeyHandler.php":"c521dbff20d09f63f93ffd8bae13eb82","src\/new\/src\/PSC\/Shop\/UserBundle\/Security\/.null-ls_450701_ApiKeyHandler.php":"927284608a2df62b8482e46f36fc6dd8","src\/new\/src\/PSC\/Shop\/UserBundle\/Security\/.null-ls_516953_ApiKeyHandler.php":"87489068da6f0ebd9664a73f6d3fc46a","src\/new\/src\/PSC\/Shop\/UserBundle\/Security\/.null-ls_566760_ApiKeyHandler.php":"f8f6148f97c7841c6b4f87b843ad2e0f","src\/new\/src\/PSC\/Shop\/UserBundle\/Security\/.null-ls_786196_ApiKeyHandler.php":"5285e6d3f08d6e2dc242691341e4d9b4","src\/new\/src\/PSC\/Shop\/UserBundle\/Security\/.null-ls_787379_ApiKeyHandler.php":"44bd67024c037df14c4172eddc67ad2b","src\/new\/src\/PSC\/Shop\/UserBundle\/Security\/.null-ls_560445_ApiKeyHandler.php":"83670423a5bdaf3657cc8592db33ccc8","src\/new\/src\/PSC\/Shop\/UserBundle\/Security\/.null-ls_555729_ApiKeyHandler.php":"e0c377e4349b6340454ea9e18f56db39","src\/new\/src\/PSC\/Shop\/UserBundle\/Security\/.null-ls_323495_ApiKeyHandler.php":"d039c8054eaddb47a560bed6a33c1750","src\/new\/src\/PSC\/Shop\/EntityBundle\/Document\/.null-ls_143547_Instance.php":"1894959a9ab878589fdb085d3cedbfc0","src\/new\/src\/PSC\/Shop\/EntityBundle\/Document\/.null-ls_988853_Instance.php":"cdde4e566229f6755cd87c9e10425511","src\/new\/config\/packages\/.null-ls_369825_security.php":"cc9819fd0d57d690a32af5e9298f1eaa","src\/new\/config\/packages\/.null-ls_122899_security.php":"3b1da121ce7567b21cee11a1b5a025cd","src\/new\/config\/packages\/.null-ls_773138_security.php":"47deb0a102d24b9467eb0ad5d9e06996","src\/new\/config\/packages\/.null-ls_295985_doctrine_mongodb.php":"e4eb2a8b1a1ed75552fbda7082721528","src\/new\/src\/PSC\/Shop\/UserBundle\/Security\/ApiKey\/.null-ls_452888_ApiKeyProvider.php":"ffe0e7c7a09e265098c5ba6f723d07e2","src\/new\/src\/PSC\/Shop\/UserBundle\/Security\/ApiKey\/.null-ls_719921_ApiKeyProvider.php":"753a855d5f18f856c7e59762ce07f86a","src\/new\/src\/PSC\/Shop\/UserBundle\/Security\/ApiKey\/.null-ls_887259_ApiKeyProvider.php":"753a855d5f18f856c7e59762ce07f86a","src\/new\/src\/PSC\/Shop\/UserBundle\/Security\/ApiKey\/.null-ls_107007_ApiKeyProvider.php":"fd8556b9ac198388f7b0bb19ad2765ce","src\/new\/src\/PSC\/Shop\/UserBundle\/Security\/ApiKey\/.null-ls_717074_ApiKeyProvider.php":"a7ba4cfed38db8b3017eae6b1e82d0ad","src\/new\/src\/PSC\/Shop\/UserBundle\/Security\/ApiKey\/.null-ls_832274_ApiKeyProvider.php":"6606db6f17ac6c530132bcf8f6d77fea","src\/new\/src\/PSC\/Shop\/UserBundle\/Security\/ApiKey\/.null-ls_534986_ApiKeyProvider.php":"bfb0bd168a6cc16dbe7d87077bc86db0","src\/new\/config\/packages\/.null-ls_719471_security.php":"f69f714f8022c580518d9154ce05a8db","src\/new\/config\/packages\/.null-ls_938927_security.php":"3e9489afa04f5826b20c6d477d7fcf53","src\/new\/config\/packages\/.null-ls_946944_security.php":"28ee6b053d21dbe70514fd6a51845c77","src\/new\/config\/packages\/.null-ls_642419_security.php":"4666a4aba7b09259f65ff1b82fdbf127","src\/new\/config\/packages\/.null-ls_111816_security.php":"77bf796091fcd45d1f3d6cc7ff2e245c","src\/new\/config\/packages\/.null-ls_175793_security.php":"d8069ae443a820102cfda3693bb1bfdc","src\/new\/src\/PSC\/Shop\/UserBundle\/Security\/User\/.null-ls_674552_UserProvider.php":"a9e27c4240d30ddd68ae11729f6d0d92","src\/new\/config\/packages\/.null-ls_339828_security.php":"5646b32b43b462b707a321a106336816","src\/new\/config\/packages\/.null-ls_643009_security.php":"2d60941ccd70e051ff702392df91b21c","src\/new\/config\/packages\/.null-ls_236709_security.php":"5d7b0bbfe3c474eba115d7ac66323861","src\/new\/config\/packages\/.null-ls_936455_security.php":"92f8c4593c181c128f94d8bc175b50f0","src\/new\/src\/PSC\/Shop\/UserBundle\/Security\/User\/.null-ls_281258_UserProvider.php":"6b9b2edf8c5172f4f60b2b9dbf50c82b","src\/new\/src\/PSC\/Shop\/UserBundle\/Security\/User\/.null-ls_952916_UserProvider.php":"2755d2d8926b59b8b02382394a5fe51e","src\/new\/src\/PSC\/Shop\/UserBundle\/Security\/User\/.null-ls_359495_UserProvider.php":"c28979330a716c2d7d55fa8ff5d34c37","src\/new\/src\/PSC\/Shop\/UserBundle\/Security\/User\/.null-ls_155923_UserProvider.php":"68da4f43272b59663f2f3e9392145941","src\/new\/src\/PSC\/Shop\/UserBundle\/Security\/User\/.null-ls_251994_UserProvider.php":"2fac705dbb04aae3882444f268942849","src\/new\/src\/PSC\/Shop\/UserBundle\/Security\/User\/.null-ls_975895_UserProvider.php":"2e2009bddb8f3f6a5cfbde76def2032f","src\/new\/src\/PSC\/Shop\/UserBundle\/Security\/User\/.null-ls_550951_UserProvider.php":"8bb84e157d39fbbaca4a2ab3bc99af5d","src\/new\/src\/PSC\/Shop\/UserBundle\/Security\/User\/.null-ls_620070_UserProvider.php":"49b126e98dc0e87fc701f42275f0a8ac","src\/new\/src\/PSC\/Shop\/UserBundle\/Security\/User\/.null-ls_698562_UserProvider.php":"106f40886d3bfd148508ea2d3c4c2e71","src\/new\/src\/PSC\/Shop\/UserBundle\/Security\/User\/.null-ls_145361_UserProvider.php":"89c8092c4a32440f7b22e675486b81ef","src\/new\/src\/PSC\/Shop\/UserBundle\/Security\/User\/.null-ls_329280_UserProvider.php":"fad9cc1df2f6c42b9c380c4247e8e0cf","src\/new\/src\/PSC\/Shop\/UserBundle\/Security\/User\/.null-ls_387466_UserProvider.php":"7eaae24808f947fa6270d692d9107286","src\/new\/src\/PSC\/Shop\/UserBundle\/Security\/ApiKey\/.null-ls_318887_ShopProvider.php":"816d9b3f2a00bf0e1f2e3a23a084240e","src\/new\/src\/PSC\/Shop\/UserBundle\/Security\/ApiKey\/.null-ls_747604_ShopProvider.php":"1fef82183ce6aca9e66ed3a15e037de8","src\/new\/src\/PSC\/Shop\/UserBundle\/Security\/ApiKey\/.null-ls_910697_ShopProvider.php":"24fa534378ff1cc8b6313ec184a262f5","src\/new\/src\/PSC\/Shop\/UserBundle\/Security\/ApiKey\/.null-ls_388998_ShopProvider.php":"b09753b64b125f305c5f16c165f6e69b","src\/new\/src\/PSC\/Shop\/UserBundle\/Security\/ApiKey\/.null-ls_959459_ShopProvider.php":"1f26544d1f2e5c1cd0c6e180fb9449e5","src\/new\/config\/packages\/.null-ls_750082_security.php":"1e5e2fd84a8586e1120441f699ec3673","src\/new\/config\/packages\/.null-ls_898267_security.php":"7b32a5f82844a813f3dc49ac2dbf5bf6","src\/new\/src\/PSC\/Shop\/UserBundle\/Security\/ApiKey\/.null-ls_800041_InstanceProvider.php":"a7e4e9ec0c1d153727c70adf9fc547a7","src\/new\/config\/packages\/.null-ls_605152_security.php":"de7132e58e92aaee631cb4a5c12ec3ba","src\/new\/config\/packages\/.null-ls_357542_security.php":"437241085b59878a844d9861ac746145","src\/new\/src\/PSC\/Shop\/UserBundle\/Security\/ApiKey\/.null-ls_808993_InstanceProvider.php":"a7e4e9ec0c1d153727c70adf9fc547a7","src\/new\/src\/PSC\/Shop\/UserBundle\/Security\/ApiKey\/.null-ls_199028_InstanceProvider.php":"bff40d00906c652d716ba5bca469d4cb","src\/new\/src\/PSC\/Shop\/UserBundle\/Security\/ApiKey\/.null-ls_684606_InstanceProvider.php":"94a99ef367eb0e76c8c705e0b068777e","src\/new\/src\/PSC\/Shop\/UserBundle\/Security\/ApiKey\/.null-ls_499446_InstanceProvider.php":"3bae4435629a73fccb286f537c785ebe","src\/new\/src\/PSC\/Shop\/UserBundle\/Security\/ApiKey\/.null-ls_880823_InstanceProvider.php":"b3a6580d00a47bef022e885ff3d51047","src\/new\/src\/PSC\/Shop\/UserBundle\/Security\/ApiKey\/.null-ls_317353_InstanceProvider.php":"b4198b55dc86089e15b098fbc9161c4b","src\/new\/src\/PSC\/Shop\/UserBundle\/Security\/ApiKey\/.null-ls_972339_InstanceProvider.php":"9c0ff2bb411b52357393562a682fd3bf","src\/new\/var\/plugins\/Custom\/PSC\/R2_Pitchprint\/Controller\/Backend\/.null-ls_606547_DesignController.php":"9d04a0d066f3d33ee871a39bd8f6dd55","src\/new\/var\/plugins\/Custom\/PSC\/R2_Pitchprint\/Controller\/Backend\/.null-ls_267535_DesignController.php":"fea0cc91c1e729a113d2d9568fbf51fd","src\/new\/var\/plugins\/Custom\/PSC\/R2_Pitchprint\/Controller\/Backend\/.null-ls_980276_DesignController.php":"534b7879b34c8fcf6df323d510363d16","src\/new\/var\/plugins\/Custom\/PSC\/R2_Pitchprint\/Controller\/Backend\/.null-ls_360924_DesignController.php":"4c433d5812dc0b00b5cffc174cdd25b7","src\/new\/var\/plugins\/Custom\/PSC\/R2_Pitchprint\/Controller\/Backend\/.null-ls_887607_DesignController.php":"f3b0f9526481b00d134bdf01390293f6","src\/new\/var\/plugins\/Custom\/PSC\/R2_Pitchprint\/Controller\/Backend\/.null-ls_319473_DesignController.php":"26ada1904b9333fbfb6f9434e859f3cf","src\/new\/var\/plugins\/Custom\/PSC\/R2_Pitchprint\/Controller\/Backend\/.null-ls_306625_DesignController.php":"bbfeadce5e986ecc44d490628a8f2749","src\/new\/var\/plugins\/Custom\/PSC\/R2_Pitchprint\/Controller\/Backend\/.null-ls_174998_DesignController.php":"bf42a22f66f1aa489e1c9a1fa6f8447b","src\/new\/var\/plugins\/Custom\/PSC\/R2_Pitchprint\/Controller\/Backend\/.null-ls_815543_DesignController.php":"2b9b0c2001ace880edd6cfaf70ca84d0","src\/new\/var\/plugins\/Custom\/PSC\/R2_Pitchprint\/Controller\/Backend\/.null-ls_465164_DesignController.php":"f33220b124d5b0285a5a904ac105a773","src\/new\/var\/plugins\/Custom\/PSC\/R2_Pitchprint\/Controller\/Backend\/.null-ls_952262_DesignController.php":"5f5d67fa6a83bbc2f14e30061703936c","src\/new\/var\/plugins\/Custom\/PSC\/R2_Pitchprint\/Controller\/Backend\/.null-ls_659164_DesignController.php":"d2135c60c6efaa0ac74500089e3887ec","src\/new\/var\/plugins\/Custom\/PSC\/R2_Pitchprint\/Controller\/Backend\/.null-ls_933576_DesignController.php":"77c51dfcbac405217e489d014c95aa2b","src\/old\/application\/modules\/default\/controllers\/.null-ls_510799_ArticleController.php":"ef75e133f6eea7b59969835ccc77c585","src\/old\/application\/modules\/default\/controllers\/.null-ls_158315_ArticleController.php":"d7a9bbe4223e4f07e8901ac376afaf9f","src\/old\/application\/modules\/default\/controllers\/.null-ls_308523_ArticleController.php":"166086e39dda2085a1ba62530f94f764","src\/new\/var\/plugins\/Custom\/PSC\/R2_Pitchprint\/Form\/.null-ls_641071_BackendFields.php":"b51679af1b65887476964e6ab6d00d8e","src\/old\/application\/articles\/Market\/.null-ls_477187_Article.php":"93bf159b5c85c90c664bf64d69e46cac","src\/new\/src\/PSC\/System\/UpdateBundle\/Migrations\/.null-ls_122979_Version202411271406.php":"87d98475dfcb143788d3cd70346328c0","src\/new\/src\/PSC\/System\/UpdateBundle\/Migrations\/.null-ls_738697_Version202411271406.php":"87d98475dfcb143788d3cd70346328c0","src\/new\/src\/PSC\/System\/UpdateBundle\/Migrations\/.null-ls_636207_Version202411271406.php":"264c4c9d9a5a87c6d2dffa898d3d68c5","src\/new\/src\/PSC\/Backend\/ToolsBundle\/Exporter\/Csv\/.null-ls_197692_OrderposExporter.php":"3c105efce9c5bfab3b10f6fd8ea88cb1","src\/new\/src\/PSC\/Backend\/ToolsBundle\/Exporter\/Csv\/.null-ls_748381_OrderposExporter.php":"eaca8c79ac265d488a2fb209f36d689a","src\/new\/src\/PSC\/Backend\/ToolsBundle\/Exporter\/Csv\/.null-ls_661260_OrderposExporter.php":"a71669929c5f9e8667161422e59b54f4","src\/old\/application\/data\/models\/.null-ls_707917_Article.php":"6630ebcb42e83d3dc2b0d8eceb9f219d","src\/old\/application\/data\/models\/.null-ls_440041_Article.php":"3b6d5644657b064ee93a7515c90184f9","src\/old\/application\/data\/models\/.null-ls_564114_Article.php":"793bca48574a6784a7094978fa6e5901","src\/old\/application\/data\/models\/.null-ls_695805_Article.php":"f9b2f1c52e697408a4da4d025665528f","src\/old\/application\/data\/models\/.null-ls_689215_Article.php":"ee96fd13ae13bd0cd196e01208d431b4","src\/old\/application\/data\/models\/.null-ls_931378_Article.php":"16ad0e57444cf4bf693bcb373000864d","src\/old\/application\/data\/models\/.null-ls_731325_Article.php":"3e3005ca1b4966b2589a2849e34b3e58","src\/old\/application\/data\/models\/.null-ls_394598_Contact.php":"8ff08b81bcf1ac9a08a6b56bfc3386bb","src\/old\/application\/data\/models\/.null-ls_554799_Contact.php":"59f9b7575cb079ece0968a34ead549e5","src\/old\/application\/data\/models\/.null-ls_497774_Contact.php":"e65df8f8bf5dc9b15657579b0abd0589","src\/old\/application\/data\/models\/.null-ls_291146_Contact.php":"d4cafafca4c11040d4a2cd359ad14e2c","src\/old\/application\/data\/models\/.null-ls_154029_Contact.php":"01687f93dd8257f8d25eb637dde78413","src\/old\/application\/data\/models\/.null-ls_403513_Contact.php":"930fd347ed168f87231a0dee5d86466b","src\/old\/application\/data\/models\/.null-ls_780942_Contact.php":"860b13429a52b599be377fcb525b6a68","src\/old\/application\/data\/models\/.null-ls_302523_Contact.php":"96de403142d43911f0f555331f47b455","src\/old\/application\/data\/models\/.null-ls_632395_Contact.php":"19ab5a037f45198d3ea85fe41537241c","src\/old\/application\/data\/models\/.null-ls_704345_Contact.php":"c9d36867e1c0a87d53270cfdd90de524","src\/old\/application\/data\/models\/.null-ls_238494_Contact.php":"940dfe24b10e37c8638e1031cfffa747","src\/old\/application\/data\/models\/.null-ls_283588_Contact.php":"7dacaea19b9e1c2049680afe3289711e","src\/old\/application\/modules\/default\/controllers\/.null-ls_843010_UserController.php":"ab6aa48529a729c25613def08bb08c8b","src\/old\/application\/modules\/default\/controllers\/.null-ls_707047_UserController.php":"ab6aa48529a729c25613def08bb08c8b","src\/new\/src\/PSC\/Shop\/EntityBundle\/Document\/.null-ls_619803_Contact.php":"c18826db047b9461670fd34a567c4dad","src\/new\/src\/PSC\/Shop\/EntityBundle\/Document\/.null-ls_401089_Contact.php":"e6ac2ab1b37826602a4ef7e0f90595b3","src\/new\/src\/PSC\/Shop\/EntityBundle\/Document\/.null-ls_235476_Contact.php":"2592a8ec21e5f461f1062b6932922ed7","src\/new\/src\/PSC\/Shop\/ContactBundle\/Model\/.null-ls_749972_Type.php":"57e1a1ae65ea56bde771dd10925124aa","src\/new\/src\/PSC\/Shop\/ContactBundle\/Model\/.null-ls_674378_Type.php":"b271dd77714d20b76679ba6b62cd0ff8","src\/new\/src\/PSC\/Shop\/EntityBundle\/Document\/.null-ls_487967_Contact.php":"b79ad83f4474219872977c1185faa9ec","src\/new\/src\/PSC\/Shop\/EntityBundle\/Document\/.null-ls_870766_Contact.php":"00de8494baa67a33a80655136e6da933","src\/new\/src\/PSC\/Shop\/EntityBundle\/Document\/.null-ls_790281_Contact.php":"00de8494baa67a33a80655136e6da933","src\/new\/src\/PSC\/Shop\/EntityBundle\/Document\/.null-ls_128027_Contact.php":"c47402573ac646d18ab2dbd7a974e322","src\/new\/src\/PSC\/Shop\/ContactBundle\/Model\/.null-ls_423563_AccountType.php":"c02ad86f16e457d6f916823037ce067e","src\/new\/src\/PSC\/Shop\/ContactBundle\/Form\/Backend\/General\/.null-ls_271764_ContactType.php":"302d1ccfa5520f96614368770540997d","src\/new\/src\/PSC\/Shop\/ContactBundle\/Form\/Backend\/General\/.null-ls_580250_ContactType.php":"f63a73249bec4eed5c060d531f7f47c2","src\/new\/src\/PSC\/Shop\/ContactBundle\/Form\/Backend\/General\/.null-ls_299292_ContactType.php":"343a61315c3b6219bfb11a13c997b5df","src\/new\/src\/PSC\/Shop\/ContactBundle\/Form\/Backend\/General\/.null-ls_369638_ContactType.php":"a532d17b47756fcd46cea58c2f7c6a7a","src\/new\/src\/PSC\/Shop\/ContactBundle\/Form\/Backend\/General\/.null-ls_814355_ContactType.php":"1ffb70bea346fca536fb94020f3eeec0","src\/new\/src\/PSC\/Shop\/ContactBundle\/Form\/Backend\/General\/.null-ls_906212_ContactType.php":"609f0ddf39a82a2c689f02a543f7d756","src\/new\/src\/PSC\/Shop\/ContactBundle\/Controller\/Backend\/.null-ls_790912_EditController.php":"da520015b784ea9a18803196d318b646","src\/new\/src\/PSC\/Shop\/ContactBundle\/Controller\/Backend\/.null-ls_416512_EditController.php":"be7977914e27c65a8cd4ad16e1ca9437","src\/new\/src\/PSC\/Shop\/EntityBundle\/Entity\/.null-ls_138340_Contact.php":"bbad93821e749f9380a92f219a6be48f","src\/new\/src\/PSC\/Shop\/ContactBundle\/Controller\/Backend\/.null-ls_910897_EditController.php":"fd53b5447a6c54cbd0696ea12f930be5","src\/new\/src\/PSC\/Shop\/EntityBundle\/Entity\/.null-ls_561316_Contact.php":"ba3fcc409a3bb4835937137e4ac94606","src\/new\/src\/PSC\/Shop\/EntityBundle\/Entity\/.null-ls_147271_Contact.php":"bbad93821e749f9380a92f219a6be48f","src\/new\/src\/PSC\/Shop\/ContactBundle\/Controller\/Backend\/.null-ls_362390_EditController.php":"588efbe0dadf8029932f13353940acce","src\/new\/src\/PSC\/Shop\/EntityBundle\/Entity\/.null-ls_805769_Contact.php":"ba3fcc409a3bb4835937137e4ac94606","src\/new\/src\/PSC\/Shop\/EntityBundle\/Entity\/.null-ls_270587_Contact.php":"fd0f2deae3caae897b041f7fa21fc9a4","src\/new\/src\/PSC\/Shop\/ContactBundle\/Form\/Backend\/General\/.null-ls_625827_ContactType.php":"5e6bbf6c6a656ce1f533d832f7d03b18","src\/old\/library\/TP\/Validate\/Db\/.null-ls_207963_NoContactRecordExistsDoctrine.php":"4df085efb954e39223c32e8d6a2631db","src\/new\/src\/PSC\/Shop\/ContactBundle\/Model\/.null-ls_952352_Contact.php":"3dad9d2734384b46d084034ed313a58f","src\/new\/src\/PSC\/Shop\/ContactBundle\/Model\/.null-ls_986383_Contact.php":"416109d2d1d43825096f1c2e8fbe3346","src\/new\/src\/PSC\/Shop\/ContactBundle\/Model\/.null-ls_174076_Contact.php":"e5f3083e6279069fb394010670cffef6","src\/new\/src\/PSC\/Shop\/ContactBundle\/Model\/.null-ls_769792_Contact.php":"3303636cd650d21b47544c87c1b842a7","src\/new\/src\/PSC\/Shop\/ContactBundle\/Transformer\/Model\/.null-ls_646639_Contact.php":"25bd2a057693be09ba25b6cd64281f5e","src\/new\/src\/PSC\/Shop\/ContactBundle\/Transformer\/Model\/.null-ls_594895_Contact.php":"652ae6612d2aa31ff3e97b125ab27c47","src\/new\/var\/plugins\/System\/PSC\/XmlCalc\/Api\/.null-ls_630565_GetPrice.php":"8bf72f3636bb1c72fa050354a4438b01","src\/new\/var\/plugins\/System\/PSC\/XmlCalc\/Api\/.null-ls_961937_GetPrice.php":"6b525f5b19ee61fcc5d693aefd115c71","src\/new\/var\/plugins\/System\/PSC\/XmlCalc\/Api\/.null-ls_500417_GetPrice.php":"6ecc49cd9330dfc1bbd78df9d4bcce87","src\/new\/tests\/Plugins\/System\/PSC\/XmlCalc\/Api\/.null-ls_379039_GetPriceTest.php":"608111c559815b49a33db253d3216559","src\/new\/tests\/Plugins\/System\/PSC\/XmlCalc\/Api\/.null-ls_605813_GetPriceTest.php":"e62ce5457e8de2b322b389635a108bd8","src\/new\/tests\/Plugins\/System\/PSC\/XmlCalc\/Api\/.null-ls_116545_GetPriceTest.php":"0243ae849fb5e152d6b7edb003066f0b","src\/new\/tests\/Plugins\/System\/PSC\/XmlCalc\/Api\/.null-ls_488379_GetPriceTest.php":"ff2f703ade794e68428fb33af391d564","src\/new\/tests\/Plugins\/System\/PSC\/XmlCalc\/Api\/.null-ls_711893_GetPriceTest.php":"e567b5095bed9873d5c3f5bf93c8c1fb","src\/new\/var\/plugins\/System\/PSC\/XmlCalc\/Api\/.null-ls_947271_GetPrice.php":"6ecc49cd9330dfc1bbd78df9d4bcce87","src\/new\/tests\/Plugins\/System\/PSC\/XmlCalc\/Api\/.null-ls_228137_GetPriceTest.php":"955d647fd59c761a1a0fadfdf3c85670","src\/new\/var\/plugins\/System\/PSC\/XmlCalc\/Api\/.null-ls_761543_GetPrice.php":"59bafd62080a79acdb983bfae3b57999","src\/new\/var\/plugins\/System\/PSC\/XmlCalc\/Api\/.null-ls_235174_GetPrice.php":"6ecc49cd9330dfc1bbd78df9d4bcce87","src\/new\/var\/plugins\/System\/PSC\/XmlCalc\/Api\/.null-ls_456434_GetPrice.php":"59bafd62080a79acdb983bfae3b57999","src\/new\/var\/plugins\/System\/PSC\/XmlCalc\/Api\/.null-ls_866004_GetPrice.php":"5aa2a165c4184e6b53c2e81c92303667","src\/new\/var\/plugins\/System\/PSC\/XmlCalc\/Api\/.null-ls_471660_GetPrice.php":"59bafd62080a79acdb983bfae3b57999","src\/new\/tests\/Plugins\/System\/PSC\/XmlCalc\/Api\/.null-ls_690258_GetPriceTest.php":"68d19cae3134ee4619fa89ef45c64545","src\/new\/var\/plugins\/System\/PSC\/XmlCalc\/Api\/.null-ls_247174_GetPrice.php":"6ecc49cd9330dfc1bbd78df9d4bcce87","src\/new\/tests\/Plugins\/System\/PSC\/XmlCalc\/Api\/.null-ls_227389_GetPriceTest.php":"1d175700a847a95ea6478ea6fe023911","src\/new\/tests\/Plugins\/System\/PSC\/XmlCalc\/Api\/.null-ls_273769_GetPriceTest.php":"d0a8a75e33b17f5c4b99693352689660","src\/new\/var\/plugins\/System\/PSC\/XmlCalc\/Api\/.null-ls_237806_GetPrice.php":"15e37b5ea3b8cc4e535ba21eb5f7da2b","src\/new\/tests\/Plugins\/System\/PSC\/XmlCalc\/Api\/.null-ls_315457_GetPriceTest.php":"ac808c06f425a82f0ef12b5731a277d0","src\/new\/tests\/Plugins\/System\/PSC\/XmlCalc\/Api\/.null-ls_842573_GetPriceTest.php":"37b3d7145a07e07bb49ef8246b97a7dd","src\/new\/tests\/Plugins\/System\/PSC\/XmlCalc\/Api\/.null-ls_850862_GetPriceTest.php":"2f4ad3ac21903dc3f21f030fe285e5c4","src\/new\/tests\/Plugins\/System\/PSC\/XmlCalc\/Api\/.null-ls_211417_GetPriceTest.php":"4ed76cc4bb615a68d763d9323172a550","src\/new\/tests\/Plugins\/System\/PSC\/XmlCalc\/Api\/.null-ls_768926_GetPriceTest.php":"6dfa3dcab60083417c926d7cde32d864","src\/new\/tests\/Plugins\/System\/PSC\/XmlCalc\/Api\/.null-ls_773288_GetPriceTest.php":"10e897555b3b6313f2f220c612ec3c71","src\/new\/tests\/.null-ls_688945_RefreshDatabaseTrait.php":"6eaa20c06e8fc6477089ec108889cab1","src\/new\/tests\/.null-ls_169739_RefreshDatabaseTrait.php":"189c5aea5938aa2473251e4c13ca7140","src\/new\/tests\/.null-ls_346509_RefreshDatabaseTrait.php":"cc6f7b739ff5745dcbc1339cc05bb659","src\/new\/tests\/Plugins\/System\/PSC\/XmlCalc\/Api\/.null-ls_756526_GetPriceTest.php":"6008dfc5d929dbedfeeed9ede3b04534","src\/new\/var\/plugins\/System\/PSC\/XmlCalc\/Api\/.null-ls_465442_GetPrice.php":"0d927d432804d96d1ffdbff69be6893e","src\/new\/var\/plugins\/System\/PSC\/XmlCalc\/Api\/.null-ls_167379_GetPrice.php":"7a4feaf175720c5087c0934e02012e9f","src\/new\/var\/plugins\/System\/PSC\/XmlCalc\/Api\/.null-ls_185971_GetPrice.php":"7a4feaf175720c5087c0934e02012e9f","src\/new\/var\/plugins\/System\/PSC\/XmlCalc\/Api\/.null-ls_585433_GetPrice.php":"eee923a32c651368cec953f9e547898f","src\/new\/var\/plugins\/System\/PSC\/XmlCalc\/Api\/.null-ls_343885_GetPrice.php":"98f446863b7123c8da5e98fcb1ae9abb","src\/new\/var\/plugins\/System\/PSC\/XmlCalc\/Api\/.null-ls_845601_GetPrice.php":"eb39cec15eeae92c9b8ae8b4270246bc","src\/new\/var\/plugins\/System\/PSC\/XmlCalc\/Api\/.null-ls_131608_GetPrice.php":"08591a2aeaa191bbe52ee62366f80880","src\/new\/var\/plugins\/System\/PSC\/XmlCalc\/Api\/.null-ls_773032_GetPrice.php":"d1d43429eb0b7abc9a10deae6686ddce","src\/new\/var\/plugins\/System\/PSC\/XmlCalc\/Api\/.null-ls_948372_GetPrice.php":"f69b8a199d1ededb36dbe92398b1a868","src\/new\/var\/plugins\/System\/PSC\/XmlCalc\/Api\/.null-ls_745111_GetPrice.php":"fc9508c77480ec8ec4e7e251fbb5acad","src\/new\/var\/plugins\/System\/PSC\/XmlCalc\/Api\/.null-ls_251219_GetPrice.php":"8347678ae6184bb507dfffaaa7e78dd2","src\/new\/var\/plugins\/System\/PSC\/XmlCalc\/Api\/.null-ls_652588_GetPrice.php":"c0f60c2deeb6e2212d7e216f75dbd955","src\/new\/tests\/Plugins\/System\/PSC\/XmlCalc\/Api\/.null-ls_120942_GetPriceTest.php":"88727749d013b4079140e35709b817cd","src\/new\/tests\/Plugins\/System\/PSC\/XmlCalc\/Api\/.null-ls_154710_GetPriceTest.php":"cf2e3c702a085c7f2dadb65acd0e607f","src\/new\/tests\/.null-ls_983786_RefreshDatabaseTrait.php":"0d110cbcea26bf3f487a541a52b55fd6","src\/new\/tests\/Plugins\/System\/PSC\/XmlCalc\/Api\/.null-ls_444441_GetPriceTest.php":"9aae4eacb46455113df5a34788d7a2e8","src\/new\/tests\/Plugins\/System\/PSC\/XmlCalc\/Api\/.null-ls_851412_GetPriceTest.php":"f375f5a2d8ba4f9b43b1db802fe23d91","src\/new\/var\/plugins\/System\/PSC\/XmlCalc\/Api\/.null-ls_837262_GetPrice.php":"8347678ae6184bb507dfffaaa7e78dd2","src\/new\/var\/plugins\/System\/PSC\/XmlCalc\/Producer\/.null-ls_288615_Producer.php":"de9377267cfa96bb5474991f49d4dc5b","src\/new\/var\/plugins\/System\/PSC\/XmlCalc\/Producer\/.null-ls_258361_Producer.php":"30c1f01c1f16a6fc2abe252a808aa761","src\/new\/tests\/PSC\/Shop\/Order\/Service\/.null-ls_989158_CalcContactAccountTypeTest.php":"69ce76f25df7613d50f5fd1808b77c3c","src\/new\/tests\/PSC\/Shop\/Order\/Service\/.null-ls_874525_CalcContactAccountTypeTest.php":"dcacf3a58ab3b021efc347ecff4ce46c","src\/new\/var\/plugins\/System\/PSC\/XmlCalc\/Producer\/.null-ls_446915_Producer.php":"de9377267cfa96bb5474991f49d4dc5b","src\/new\/var\/plugins\/System\/PSC\/XmlCalc\/Producer\/.null-ls_411811_Producer.php":"28818adf37849d5acd89879beec25d38","src\/new\/var\/plugins\/System\/PSC\/XmlCalc\/Producer\/.null-ls_809866_Producer.php":"621d576656329ff3fcd09fac754b38af","src\/new\/tests\/PSC\/Shop\/Order\/Service\/.null-ls_825403_CalcContactAccountTypeTest.php":"302a09b8da92d36f5ed578ef79ba0a0d","src\/new\/tests\/PSC\/Shop\/Order\/Service\/.null-ls_745196_CalcContactAccountTypeTest.php":"15a22dd6ad8c66f23f3ffb4273f7575d","src\/new\/tests\/PSC\/Shop\/Order\/Service\/.null-ls_801783_CalcContactAccountTypeTest.php":"704114e5c7cf77b7263a61e5e30f12ca","src\/new\/tests\/PSC\/Shop\/Order\/Service\/.null-ls_446709_CalcContactAccountTypeTest.php":"005cc4a78acf8d210aa0421ada9a3d66","src\/new\/tests\/PSC\/Shop\/Order\/Service\/.null-ls_505022_CalcContactAccountTypeTest.php":"659f47c604bad42537e29cb1ab9438b4","src\/new\/var\/plugins\/System\/PSC\/XmlCalc\/Producer\/.null-ls_796158_Producer.php":"a02b279fddbb096e596f34f2e57c2d9c","src\/new\/var\/plugins\/System\/PSC\/XmlCalc\/Producer\/.null-ls_675464_Producer.php":"4fa8ee1c16392aeadbd4ca5e50d070c1","src\/new\/src\/PSC\/Shop\/ProductBundle\/Interfaces\/.null-ls_398550_ICalcNeedContact.php":"1f1cc8380bc12ca468e90195ff0f08c7","src\/new\/src\/PSC\/Shop\/ProductBundle\/Interfaces\/.null-ls_425649_ICalcNeedContact.php":"f64ddd5f57b8dcc688b798f6e7639ec4","src\/new\/src\/PSC\/Shop\/OrderBundle\/Service\/.null-ls_894158_Calc.php":"dc1a1587d838125f638be5b1aff1d354","src\/new\/var\/plugins\/System\/PSC\/XmlCalc\/Producer\/.null-ls_575344_Producer.php":"a9bb86b67b9bb1c5154cf6af4d8d702f","src\/new\/var\/plugins\/System\/PSC\/XmlCalc\/Producer\/.null-ls_532179_Producer.php":"a8227898756ac53608162125e714a2f5","src\/new\/var\/plugins\/System\/PSC\/XmlCalc\/Producer\/.null-ls_659731_Producer.php":"1b214dbcfc9ef9d3f8f1266b5e023b70","src\/new\/var\/plugins\/System\/PSC\/XmlCalc\/Producer\/.null-ls_125019_Producer.php":"c4eaa9f890ece5ac8cfc5430c6a89062","src\/new\/tests\/PSC\/Shop\/Order\/Service\/.null-ls_372791_CalcContactAccountTypeTest.php":"fd279b3c733c0088c83caf7c3b2a4205","src\/new\/tests\/PSC\/Shop\/Order\/Service\/.null-ls_487192_CalcContactAccountTypeTest.php":"23fa7980da48e1fd3c1a419c70a5ede9","src\/new\/tests\/PSC\/Shop\/Order\/Service\/.null-ls_197455_CalcContactAccountTypeTest.php":"b4d8312f2ccfa3c3d47b05e4a8f76135","src\/new\/tests\/PSC\/Shop\/Order\/Service\/.null-ls_888869_CalcContactAccountTypeTest.php":"34c2b5a8429ec50f38e83350f57865b7","src\/new\/tests\/PSC\/Shop\/Order\/Service\/.null-ls_258221_CalcContactAccountTypeTest.php":"1e53dc849bad82b0e7df076fee7dc1af","src\/new\/tests\/Plugins\/System\/PSC\/XmlCalc\/Api\/.null-ls_372091_CreateOrderTest.php":"8a3ca3775ed736921af81dc759de4f8c","src\/new\/tests\/Plugins\/System\/PSC\/XmlCalc\/Api\/.null-ls_654267_CreateOrderTest.php":"4749c883a965f08fc39ff75428aa834a","src\/new\/tests\/Plugins\/System\/PSC\/XmlCalc\/Api\/.null-ls_783943_CreateOrderTest.php":"4f8dc4daceb542b6749c3eaf14d11b65","src\/new\/tests\/Plugins\/System\/PSC\/XmlCalc\/Api\/.null-ls_939692_CreateOrderTest.php":"01feb73abe3ce3aef9d371a5820df856","src\/new\/tests\/Plugins\/System\/PSC\/XmlCalc\/Api\/.null-ls_409086_CreateOrderTest.php":"6b9c5bc08d5781fc34c68d18fcb6fffb","src\/new\/tests\/Plugins\/System\/PSC\/XmlCalc\/Api\/.null-ls_673178_CreateOrderTest.php":"95597b313204c295a7545fb56c7c5c63","src\/new\/tests\/Plugins\/System\/PSC\/XmlCalc\/Api\/.null-ls_907632_CreateOrderTest.php":"39cc99e9f1dc3845bd26b285c4a0bb8e","src\/new\/tests\/Plugins\/System\/PSC\/XmlCalc\/Api\/.null-ls_872425_CreateOrderTest.php":"c58fb0abefd3dd3c2729c4cd73274c85","src\/new\/tests\/Plugins\/System\/PSC\/XmlCalc\/Api\/.null-ls_379471_CreateOrderTest.php":"bf078e640c48ec050864a5756f5b85b0","src\/new\/tests\/Plugins\/System\/PSC\/XmlCalc\/Api\/.null-ls_439347_CreateOrderTest.php":"b36b14f1ec0a69c5e9f4c972b73c1eba","src\/new\/tests\/Plugins\/System\/PSC\/XmlCalc\/Api\/.null-ls_786903_CreateOrderTest.php":"1fa4e48f0c3f4a504f71f6530db1d20c","src\/new\/tests\/Plugins\/System\/PSC\/XmlCalc\/Api\/.null-ls_829844_CreateOrderTest.php":"5657835d9252ed505e8331ca448c2f47","src\/new\/tests\/Plugins\/System\/PSC\/XmlCalc\/Api\/.null-ls_631840_CreateOrderTest.php":"df2099f8502830c5a5406be7e1c6626a","src\/new\/tests\/Plugins\/System\/PSC\/XmlCalc\/Api\/.null-ls_937222_CreateOrderTest.php":"d0ef690a752fdf73d4d4497b0c831d08","src\/new\/tests\/Plugins\/System\/PSC\/XmlCalc\/Api\/.null-ls_207719_CreateOrderTest.php":"ae9af3c6bbe9114889cd44d179358133","src\/new\/tests\/Plugins\/System\/PSC\/XmlCalc\/Api\/.null-ls_851332_CreateOrderTest.php":"9bde4c1b5eb49b47d5d0e2ce44329024","src\/new\/tests\/Plugins\/System\/PSC\/XmlCalc\/Api\/.null-ls_386850_CreateOrderTest.php":"8ae9c8c31a08b326f5691bc8c541f63a","src\/new\/tests\/Plugins\/System\/PSC\/XmlCalc\/Api\/.null-ls_735628_CreateOrderTest.php":"37c29a95ab801709b484abd2b91153c5","src\/new\/tests\/Plugins\/System\/PSC\/XmlCalc\/Api\/.null-ls_285671_CreateOrderTest.php":"0df55b43f51259a1cad085e866fc8f84","src\/new\/tests\/Plugins\/System\/PSC\/XmlCalc\/Api\/.null-ls_247251_CreateOrderTest.php":"37c29a95ab801709b484abd2b91153c5","src\/new\/src\/PSC\/Shop\/ContactBundle\/Transformer\/Order\/.null-ls_354934_Contact.php":"465aea609818f13187cd835286458d1d","src\/new\/src\/PSC\/Shop\/OrderBundle\/Transformer\/.null-ls_697126_Order.php":"cfebebf5444ef12cb5c61467e424e78b","src\/new\/src\/PSC\/Shop\/OrderBundle\/Transformer\/.null-ls_922407_Order.php":"e06619e6da8db3295760a946d3f3329d","src\/new\/src\/PSC\/Backend\/DashboardBundle\/Controller\/.null-ls_837595_DashboardController.php":"a1b2166f7218956a19733ea5fe71ecfb","src\/new\/src\/PSC\/Shop\/EntityBundle\/Document\/.null-ls_855824_Order.php":"53721c1b91875a84c1ddc8342d20505b","src\/new\/src\/PSC\/Shop\/EntityBundle\/Document\/Embed\/.null-ls_893168_Contact.php":"53934173c5268a5a98538d760f9ea8df","src\/new\/src\/PSC\/Shop\/EntityBundle\/Document\/Embed\/.null-ls_964842_ContactAddress.php":"4fee3ed7747359ff072d485f336db43f","src\/new\/src\/PSC\/Shop\/EntityBundle\/Document\/Embed\/.null-ls_222095_Contact.php":"da40c5a29dcb97fbd5ecc41b498f3dcf","src\/new\/src\/PSC\/Shop\/EntityBundle\/Document\/Embed\/.null-ls_219559_Contact.php":"8640bed82b5eecd74cc4f24a71489293","src\/new\/src\/PSC\/Shop\/EntityBundle\/Document\/Embed\/.null-ls_512974_Contact.php":"93b78764c1222f5973479f1a2719f5e0","src\/new\/src\/PSC\/Shop\/ContactBundle\/Model\/.null-ls_811199_OrderContact.php":"193e3476c97ec761b35d32c5953965cc","src\/new\/src\/PSC\/Shop\/OrderBundle\/Model\/Order\/.null-ls_310834_Contact.php":"313f9c0a7f3a8e1b53abf0738833d7ff","src\/new\/src\/PSC\/Shop\/OrderBundle\/Model\/Order\/.null-ls_341567_Contact.php":"bac0f722516b25f866eaee564b850e14","src\/new\/src\/PSC\/Shop\/OrderBundle\/Model\/Order\/.null-ls_252055_Contact.php":"93b30cfc48a1738001e4512b197cbe98","src\/new\/src\/PSC\/Shop\/OrderBundle\/Model\/Order\/.null-ls_986156_Contact.php":"40ec023dd5c2d5ef96ba861b9a62f9f0","src\/new\/src\/PSC\/Shop\/OrderBundle\/Model\/Order\/.null-ls_948524_Contact.php":"5c284096a9a821f1caa2d7dac0a19af2","src\/new\/src\/PSC\/Shop\/OrderBundle\/Model\/.null-ls_158817_Base.php":"b032dbd12b27f2bd3ad5c93b429fe92b","src\/new\/src\/PSC\/Shop\/OrderBundle\/Model\/.null-ls_253224_Base.php":"16fa3ed3d5b3ef547afc1f49f03b9a5a","src\/old\/library\/TP\/Controller\/.null-ls_730282_Action.php":"ad9ac1546dfbd67f951183c57046093d","src\/new\/src\/PSC\/System\/SettingsBundle\/Service\/.null-ls_134108_Printing.php":"773db0547b6c0f2a95c255ce3f52ffe4","src\/new\/src\/PSC\/System\/SettingsBundle\/Service\/.null-ls_836008_Printing.php":"ce0e2e62a8d7c1042a79f73ef72aceb2","src\/new\/src\/PSC\/System\/SettingsBundle\/Service\/.null-ls_126300_Printing.php":"68d53f8781c8a4164c0567544c37ebb5","src\/new\/src\/PSC\/System\/SettingsBundle\/Service\/.null-ls_717397_Printing.php":"867b7673a3ac9cfb8d0c4d13a302d0b1","src\/new\/src\/PSC\/System\/SettingsBundle\/Service\/.null-ls_623466_Printing.php":"1a2fdf2d2d746d08b20dd258f606b2d9","src\/new\/src\/PSC\/System\/SettingsBundle\/Service\/.null-ls_386244_Printing.php":"3318e59d262760f237fa8f873fc52053","src\/new\/src\/PSC\/System\/SettingsBundle\/Service\/.null-ls_381397_Printing.php":"d3023dbd376fbc25cf5aeb61eb3e1298","src\/new\/src\/PSC\/System\/SettingsBundle\/Service\/.null-ls_402504_Printing.php":"794da005290baa9a7384e958bff40929","src\/new\/src\/PSC\/System\/SettingsBundle\/Service\/.null-ls_315100_Printing.php":"9376e2f423257cd26a7aebe96c9cc578","src\/new\/src\/PSC\/System\/SettingsBundle\/Service\/.null-ls_249617_Printing.php":"6cd68a24e774e4cbf47ef9430c0b7fe6","src\/new\/src\/PSC\/System\/SettingsBundle\/Service\/.null-ls_974482_Printing.php":"efdf6f9f97fde433bb26854a776d8e4a","src\/new\/src\/PSC\/System\/SettingsBundle\/Service\/.null-ls_996205_Printing.php":"74f1825b004979fc6a1dcc027b9220eb","src\/new\/src\/PSC\/System\/SettingsBundle\/Service\/.null-ls_328202_Printing.php":"6cd68a24e774e4cbf47ef9430c0b7fe6","src\/new\/src\/PSC\/System\/SettingsBundle\/Service\/.null-ls_686517_Printing.php":"b85c0b9cb0cbdbfe43c671726538e9c9","src\/new\/src\/PSC\/System\/SettingsBundle\/Service\/.null-ls_391330_Printing.php":"d7b11b32d54fca96c8c13ef676c78283","src\/new\/src\/PSC\/System\/SettingsBundle\/Service\/.null-ls_927515_Printing.php":"2d7c827f5030d33057efdc4d6d0f13db","src\/new\/src\/PSC\/System\/SettingsBundle\/Service\/.null-ls_843207_Printing.php":"b85c0b9cb0cbdbfe43c671726538e9c9","src\/new\/src\/PSC\/System\/SettingsBundle\/Service\/.null-ls_264814_Printing.php":"9bf73e39fa0b7b1e9e8ad87850ca057e","src\/new\/src\/PSC\/System\/SettingsBundle\/Service\/.null-ls_620297_Printing.php":"faa7e2eb7534b3bf2a0f11009373dae7","src\/new\/src\/PSC\/System\/SettingsBundle\/Service\/.null-ls_267839_Printing.php":"337ec655affde6d58f4b38bf222e4568","src\/new\/src\/PSC\/System\/SettingsBundle\/Service\/.null-ls_352092_Printing.php":"bb3b7848a88f32068e3b4185c6e0b3b4","src\/new\/src\/PSC\/System\/SettingsBundle\/Service\/.null-ls_653177_Printing.php":"e3af19e5162c4b1bbd1904ec8e1cd07b","src\/new\/src\/PSC\/System\/SettingsBundle\/Service\/.null-ls_159216_Printing.php":"1111d2a88fb018c6c7d6aa1470c1b190","src\/new\/src\/PSC\/System\/SettingsBundle\/Service\/.null-ls_355678_Printing.php":"d4396c090ee6ac88df5f24afddf39264","src\/new\/src\/PSC\/System\/SettingsBundle\/Service\/.null-ls_111569_Printing.php":"db8d1e7ae6dfa77215c4ca336a1fefb8","src\/new\/src\/PSC\/System\/SettingsBundle\/Service\/.null-ls_181913_Printing.php":"d4396c090ee6ac88df5f24afddf39264","src\/new\/src\/PSC\/System\/SettingsBundle\/Service\/.null-ls_566409_Printing.php":"9616fa99fd5c21d9ffded63100088b9d","src\/new\/src\/PSC\/System\/SettingsBundle\/Service\/.null-ls_898561_Printing.php":"d4396c090ee6ac88df5f24afddf39264","src\/new\/src\/PSC\/System\/SettingsBundle\/Service\/.null-ls_229294_Printing.php":"1111d2a88fb018c6c7d6aa1470c1b190","src\/new\/src\/PSC\/System\/SettingsBundle\/Service\/.null-ls_452242_Printing.php":"7c65fa0f982b78b569174ed8965f9027","src\/new\/src\/PSC\/Shop\/PaymentBundle\/Form\/Backend\/.null-ls_123366_PaymentType.php":"b574aceb61238647ecfdd24add3281ed","src\/new\/src\/PSC\/Shop\/PaymentBundle\/Form\/Backend\/.null-ls_818107_PaymentType.php":"c43b4b1f41ad8ad80b182b0959e6d64f","src\/new\/src\/PSC\/Shop\/EntityBundle\/Document\/.null-ls_586583_Payment.php":"b03b6025d9b2e32a36af2cd561e157c5","src\/new\/src\/PSC\/Shop\/EntityBundle\/Document\/.null-ls_429814_Payment.php":"d39328a63fdf2efbfa68e538f97f9c9c","src\/new\/src\/PSC\/Shop\/EntityBundle\/Entity\/.null-ls_811653_Payment.php":"63938b336e9fc941e2dae6e5638c6bef","src\/new\/src\/PSC\/Shop\/EntityBundle\/Entity\/.null-ls_877189_Payment.php":"a182dffbbdc28529f4f0ef75b3283ed8","src\/new\/src\/PSC\/System\/SettingsBundle\/Twig\/Node\/.null-ls_570521_Barcode.php":"54a33296351b0c7b4c8b5aa4cd9e44e6","src\/new\/src\/PSC\/System\/SettingsBundle\/Service\/.null-ls_860590_Printing.php":"ca301ad03bd2068375c13f475b47720a","src\/new\/src\/PSC\/System\/SettingsBundle\/Service\/.null-ls_770120_Printing.php":"5d28b0609b01603503db0c9fdf9a3242","src\/new\/src\/PSC\/System\/SettingsBundle\/Service\/.null-ls_785155_Printing.php":"e50cf7fb32a0e33b9561c4e314de195b","src\/new\/src\/PSC\/System\/SettingsBundle\/Service\/.null-ls_408794_Printing.php":"8751674bf70b22af7718c0db42e732d3","src\/new\/src\/PSC\/System\/SettingsBundle\/Service\/.null-ls_490245_Printing.php":"e8981d09b10252623749704b9fa2d25a","src\/new\/src\/PSC\/System\/SettingsBundle\/Service\/.null-ls_169887_Printing.php":"2e59de8955ba7edef5fd7b0afde0c68d","src\/new\/src\/PSC\/Shop\/SettingsBundle\/Form\/Backend\/.null-ls_689933_ShopSettingsType.php":"e416f82c0b6ae7c91b8a81c809e6da83","src\/new\/src\/PSC\/Shop\/SettingsBundle\/Form\/Backend\/.null-ls_838547_ShopSettingsType.php":"316643729c71ec92f5e592d8711049db","src\/new\/src\/PSC\/System\/SettingsBundle\/Service\/.null-ls_785619_Printing.php":"c4cd97f0a7ce6302c43b0a712d6dd34d","src\/new\/src\/PSC\/System\/SettingsBundle\/Service\/.null-ls_758781_Printing.php":"0488a5ab89998ebcd1613dbcf0f99f15","src\/new\/src\/PSC\/System\/SettingsBundle\/Service\/.null-ls_277724_Printing.php":"f5564223ef063c4520fc08b571e90a4e","src\/new\/src\/PSC\/System\/SettingsBundle\/Service\/.null-ls_613675_Printing.php":"3e29a7486718db0822a822e7130f2593","src\/new\/src\/PSC\/System\/SettingsBundle\/Service\/.null-ls_635527_Printing.php":"229b71e51f5d3d3645ae55c9575d848a","src\/new\/src\/PSC\/System\/SettingsBundle\/Service\/.null-ls_973184_Printing.php":"b0155d2a75dc0c3bd2001402179276fb","src\/new\/src\/PSC\/System\/SettingsBundle\/Service\/.null-ls_209824_Printing.php":"a5fe243b8a66a9c641e3261075efe59c","src\/new\/src\/PSC\/System\/SettingsBundle\/Service\/.null-ls_451323_Printing.php":"f2b3536226a0a5ba6759c9360cddcae5","src\/new\/src\/PSC\/System\/SettingsBundle\/Service\/.null-ls_162178_Printing.php":"d6022f0934be5f94420a673243f47e01","src\/new\/src\/PSC\/System\/SettingsBundle\/Service\/.null-ls_964452_Printing.php":"22ac28923db643747c1ac769a0f7acc2","src\/new\/src\/PSC\/System\/SettingsBundle\/Service\/.null-ls_802757_Printing.php":"0ace15e6db8e0583b6893ef339491a0a","src\/new\/src\/PSC\/System\/SettingsBundle\/Service\/.null-ls_380461_Printing.php":"a5fe243b8a66a9c641e3261075efe59c","src\/new\/src\/PSC\/System\/SettingsBundle\/Service\/.null-ls_261396_Printing.php":"2cb71a83fc96b203445ea0f200391995","src\/new\/src\/PSC\/Shop\/OrderBundle\/Service\/.null-ls_848426_Order.php":"c9c48ecb86692a687eec93a0b65712a0","src\/new\/src\/PSC\/Shop\/OrderBundle\/Model\/.null-ls_308252_Base.php":"0a960d4a6bdd3f9d1bba4a2de4d45367","src\/new\/src\/PSC\/System\/SettingsBundle\/Service\/.null-ls_382327_Printing.php":"a5fe243b8a66a9c641e3261075efe59c","src\/new\/src\/PSC\/System\/SettingsBundle\/Service\/.null-ls_964390_Printing.php":"b810ef69dad4163b97a9d70515b53b4a","src\/new\/src\/PSC\/Shop\/OrderBundle\/Model\/.null-ls_797351_Base.php":"18543cd0088dc539688ec9dc1787b2f4","src\/new\/src\/PSC\/System\/SettingsBundle\/Service\/.null-ls_114405_Printing.php":"e75d525e6fe2ef484218b1448596138e","src\/new\/src\/PSC\/System\/SettingsBundle\/Service\/.null-ls_401518_Printing.php":"423da370ffaf76140e162123b23be42e","src\/new\/src\/PSC\/System\/SettingsBundle\/Service\/.null-ls_106203_Printing.php":"094bd3023210e493b3ee75355372e479","src\/new\/src\/PSC\/System\/SettingsBundle\/Service\/.null-ls_999650_Printing.php":"6459d6a3157b727d5dc0bfcc35e6f6ee","src\/new\/src\/PSC\/System\/SettingsBundle\/Service\/.null-ls_757838_Printing.php":"6459d6a3157b727d5dc0bfcc35e6f6ee","src\/new\/src\/PSC\/System\/SettingsBundle\/Service\/.null-ls_847816_Printing.php":"4074186818239bfe98e8800297539ddf","src\/new\/src\/PSC\/System\/SettingsBundle\/Service\/.null-ls_212139_Printing.php":"c5bc4edbd5b192780ba1d0fa4e29ef5e"}} \ No newline at end of file diff --git a/src/new/composer.json b/src/new/composer.json index 5bb581353..e2ae93936 100755 --- a/src/new/composer.json +++ b/src/new/composer.json @@ -72,6 +72,7 @@ "symfony/framework-bundle": "*", "symfony/http-client": "*", "symfony/intl": "*", + "symfony/lock": "6.4.*", "symfony/mailer": "*", "symfony/mime": "*", "symfony/monolog-bundle": "^3.8", diff --git a/src/new/composer.lock b/src/new/composer.lock index 6bdec1653..93d52fa1a 100755 --- a/src/new/composer.lock +++ b/src/new/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "e1ac41f466682124a37c71ab6b4f0668", + "content-hash": "6af99cec9f297480e6f6e2b979aefc10", "packages": [ { "name": "azuyalabs/yasumi", @@ -891,16 +891,16 @@ }, { "name": "doctrine/common", - "version": "3.4.4", + "version": "3.4.5", "source": { "type": "git", "url": "https://github.com/doctrine/common.git", - "reference": "0aad4b7ab7ce8c6602dfbb1e1a24581275fb9d1a" + "reference": "6c8fef961f67b8bc802ce3e32e3ebd1022907286" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/common/zipball/0aad4b7ab7ce8c6602dfbb1e1a24581275fb9d1a", - "reference": "0aad4b7ab7ce8c6602dfbb1e1a24581275fb9d1a", + "url": "https://api.github.com/repos/doctrine/common/zipball/6c8fef961f67b8bc802ce3e32e3ebd1022907286", + "reference": "6c8fef961f67b8bc802ce3e32e3ebd1022907286", "shasum": "" }, "require": { @@ -962,7 +962,7 @@ ], "support": { "issues": "https://github.com/doctrine/common/issues", - "source": "https://github.com/doctrine/common/tree/3.4.4" + "source": "https://github.com/doctrine/common/tree/3.4.5" }, "funding": [ { @@ -978,20 +978,20 @@ "type": "tidelift" } ], - "time": "2024-04-16T13:35:33+00:00" + "time": "2024-10-08T15:53:43+00:00" }, { "name": "doctrine/dbal", - "version": "3.9.1", + "version": "3.9.3", "source": { "type": "git", "url": "https://github.com/doctrine/dbal.git", - "reference": "d7dc08f98cba352b2bab5d32c5e58f7e745c11a7" + "reference": "61446f07fcb522414d6cfd8b1c3e5f9e18c579ba" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/dbal/zipball/d7dc08f98cba352b2bab5d32c5e58f7e745c11a7", - "reference": "d7dc08f98cba352b2bab5d32c5e58f7e745c11a7", + "url": "https://api.github.com/repos/doctrine/dbal/zipball/61446f07fcb522414d6cfd8b1c3e5f9e18c579ba", + "reference": "61446f07fcb522414d6cfd8b1c3e5f9e18c579ba", "shasum": "" }, "require": { @@ -1007,7 +1007,7 @@ "doctrine/coding-standard": "12.0.0", "fig/log-test": "^1", "jetbrains/phpstorm-stubs": "2023.1", - "phpstan/phpstan": "1.12.0", + "phpstan/phpstan": "1.12.6", "phpstan/phpstan-strict-rules": "^1.6", "phpunit/phpunit": "9.6.20", "psalm/plugin-phpunit": "0.18.4", @@ -1075,7 +1075,7 @@ ], "support": { "issues": "https://github.com/doctrine/dbal/issues", - "source": "https://github.com/doctrine/dbal/tree/3.9.1" + "source": "https://github.com/doctrine/dbal/tree/3.9.3" }, "funding": [ { @@ -1091,7 +1091,7 @@ "type": "tidelift" } ], - "time": "2024-09-01T13:49:23+00:00" + "time": "2024-10-10T17:56:43+00:00" }, { "name": "doctrine/deprecations", @@ -1791,16 +1791,16 @@ }, { "name": "doctrine/orm", - "version": "2.19.7", + "version": "2.20.0", "source": { "type": "git", "url": "https://github.com/doctrine/orm.git", - "reference": "168ac31084226f94d42e7461a40ff5607a56bd35" + "reference": "8ed6c2234aba019f9737a6bcc9516438e62da27c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/orm/zipball/168ac31084226f94d42e7461a40ff5607a56bd35", - "reference": "168ac31084226f94d42e7461a40ff5607a56bd35", + "url": "https://api.github.com/repos/doctrine/orm/zipball/8ed6c2234aba019f9737a6bcc9516438e62da27c", + "reference": "8ed6c2234aba019f9737a6bcc9516438e62da27c", "shasum": "" }, "require": { @@ -1829,7 +1829,9 @@ "doctrine/annotations": "^1.13 || ^2", "doctrine/coding-standard": "^9.0.2 || ^12.0", "phpbench/phpbench": "^0.16.10 || ^1.0", - "phpstan/phpstan": "~1.4.10 || 1.11.1", + "phpstan/extension-installer": "~1.1.0 || ^1.4", + "phpstan/phpstan": "~1.4.10 || 1.12.6", + "phpstan/phpstan-deprecation-rules": "^1", "phpunit/phpunit": "^7.5 || ^8.5 || ^9.6", "psr/log": "^1 || ^2 || ^3", "squizlabs/php_codesniffer": "3.7.2", @@ -1886,22 +1888,22 @@ ], "support": { "issues": "https://github.com/doctrine/orm/issues", - "source": "https://github.com/doctrine/orm/tree/2.19.7" + "source": "https://github.com/doctrine/orm/tree/2.20.0" }, - "time": "2024-08-23T06:54:57+00:00" + "time": "2024-10-11T11:47:24+00:00" }, { "name": "doctrine/persistence", - "version": "3.3.3", + "version": "3.4.0", "source": { "type": "git", "url": "https://github.com/doctrine/persistence.git", - "reference": "b337726451f5d530df338fc7f68dee8781b49779" + "reference": "0ea965320cec355dba75031c1b23d4c78362e3ff" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/persistence/zipball/b337726451f5d530df338fc7f68dee8781b49779", - "reference": "b337726451f5d530df338fc7f68dee8781b49779", + "url": "https://api.github.com/repos/doctrine/persistence/zipball/0ea965320cec355dba75031c1b23d4c78362e3ff", + "reference": "0ea965320cec355dba75031c1b23d4c78362e3ff", "shasum": "" }, "require": { @@ -1915,12 +1917,11 @@ "require-dev": { "doctrine/coding-standard": "^12", "doctrine/common": "^3.0", - "phpstan/phpstan": "1.11.1", + "phpstan/phpstan": "1.12.7", "phpstan/phpstan-phpunit": "^1", "phpstan/phpstan-strict-rules": "^1.1", - "phpunit/phpunit": "^8.5 || ^9.5", - "symfony/cache": "^4.4 || ^5.4 || ^6.0", - "vimeo/psalm": "4.30.0 || 5.24.0" + "phpunit/phpunit": "^8.5.38 || ^9.5", + "symfony/cache": "^4.4 || ^5.4 || ^6.0 || ^7.0" }, "type": "library", "autoload": { @@ -1969,7 +1970,7 @@ ], "support": { "issues": "https://github.com/doctrine/persistence/issues", - "source": "https://github.com/doctrine/persistence/tree/3.3.3" + "source": "https://github.com/doctrine/persistence/tree/3.4.0" }, "funding": [ { @@ -1985,20 +1986,20 @@ "type": "tidelift" } ], - "time": "2024-06-20T10:14:30+00:00" + "time": "2024-10-30T19:48:12+00:00" }, { "name": "doctrine/sql-formatter", - "version": "1.4.1", + "version": "1.5.1", "source": { "type": "git", "url": "https://github.com/doctrine/sql-formatter.git", - "reference": "7f83911cc5eba870de7ebb11283972483f7e2891" + "reference": "b784cbde727cf806721451dde40eff4fec3bbe86" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/sql-formatter/zipball/7f83911cc5eba870de7ebb11283972483f7e2891", - "reference": "7f83911cc5eba870de7ebb11283972483f7e2891", + "url": "https://api.github.com/repos/doctrine/sql-formatter/zipball/b784cbde727cf806721451dde40eff4fec3bbe86", + "reference": "b784cbde727cf806721451dde40eff4fec3bbe86", "shasum": "" }, "require": { @@ -2006,6 +2007,7 @@ }, "require-dev": { "doctrine/coding-standard": "^12", + "ergebnis/phpunit-slow-test-detector": "^2.14", "phpstan/phpstan": "^1.10", "phpunit/phpunit": "^10.5", "vimeo/psalm": "^5.24" @@ -2038,9 +2040,9 @@ ], "support": { "issues": "https://github.com/doctrine/sql-formatter/issues", - "source": "https://github.com/doctrine/sql-formatter/tree/1.4.1" + "source": "https://github.com/doctrine/sql-formatter/tree/1.5.1" }, - "time": "2024-08-05T20:32:22+00:00" + "time": "2024-10-21T18:21:57+00:00" }, { "name": "egulias/email-validator", @@ -2111,20 +2113,20 @@ }, { "name": "ezyang/htmlpurifier", - "version": "v4.17.0", + "version": "v4.18.0", "source": { "type": "git", "url": "https://github.com/ezyang/htmlpurifier.git", - "reference": "bbc513d79acf6691fa9cf10f192c90dd2957f18c" + "reference": "cb56001e54359df7ae76dc522d08845dc741621b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/ezyang/htmlpurifier/zipball/bbc513d79acf6691fa9cf10f192c90dd2957f18c", - "reference": "bbc513d79acf6691fa9cf10f192c90dd2957f18c", + "url": "https://api.github.com/repos/ezyang/htmlpurifier/zipball/cb56001e54359df7ae76dc522d08845dc741621b", + "reference": "cb56001e54359df7ae76dc522d08845dc741621b", "shasum": "" }, "require": { - "php": "~5.6.0 || ~7.0.0 || ~7.1.0 || ~7.2.0 || ~7.3.0 || ~7.4.0 || ~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0" + "php": "~5.6.0 || ~7.0.0 || ~7.1.0 || ~7.2.0 || ~7.3.0 || ~7.4.0 || ~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0 || ~8.4.0" }, "require-dev": { "cerdic/css-tidy": "^1.7 || ^2.0", @@ -2166,9 +2168,9 @@ ], "support": { "issues": "https://github.com/ezyang/htmlpurifier/issues", - "source": "https://github.com/ezyang/htmlpurifier/tree/v4.17.0" + "source": "https://github.com/ezyang/htmlpurifier/tree/v4.18.0" }, - "time": "2023-11-17T15:01:25+00:00" + "time": "2024-11-01T03:51:45+00:00" }, { "name": "friendsofphp/proxy-manager-lts", @@ -2821,20 +2823,20 @@ }, { "name": "horstoeko/mimedb", - "version": "v1.0.5", + "version": "v1.0.8", "source": { "type": "git", "url": "https://github.com/horstoeko/mimedb.git", - "reference": "2790b61cbff7f94ae8f40565761b15beb7792fcb" + "reference": "2d50f2b6bf63f14741514682869b53fc97232308" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/horstoeko/mimedb/zipball/2790b61cbff7f94ae8f40565761b15beb7792fcb", - "reference": "2790b61cbff7f94ae8f40565761b15beb7792fcb", + "url": "https://api.github.com/repos/horstoeko/mimedb/zipball/2d50f2b6bf63f14741514682869b53fc97232308", + "reference": "2d50f2b6bf63f14741514682869b53fc97232308", "shasum": "" }, "require": { - "php": "^7.3|^7.4|^8.0|^8.1|^8.2|^8.3" + "php": ">=7.3" }, "require-dev": { "pdepend/pdepend": "^2", @@ -2870,9 +2872,9 @@ ], "support": { "issues": "https://github.com/horstoeko/mimedb/issues", - "source": "https://github.com/horstoeko/mimedb/tree/v1.0.5" + "source": "https://github.com/horstoeko/mimedb/tree/v1.0.8" }, - "time": "2023-09-22T20:17:48+00:00" + "time": "2024-12-03T10:57:28+00:00" }, { "name": "horstoeko/stringmanagement", @@ -2930,16 +2932,16 @@ }, { "name": "horstoeko/zugferd", - "version": "v1.0.61", + "version": "v1.0.90", "source": { "type": "git", "url": "https://github.com/horstoeko/zugferd.git", - "reference": "e3c0d2b3c2aa84716bfbe235a15870f3798246e1" + "reference": "2dfebcb9c3acbfd62dd20214de817fd764365d7e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/horstoeko/zugferd/zipball/e3c0d2b3c2aa84716bfbe235a15870f3798246e1", - "reference": "e3c0d2b3c2aa84716bfbe235a15870f3798246e1", + "url": "https://api.github.com/repos/horstoeko/zugferd/zipball/2dfebcb9c3acbfd62dd20214de817fd764365d7e", + "reference": "2dfebcb9c3acbfd62dd20214de817fd764365d7e", "shasum": "" }, "require": { @@ -2948,7 +2950,7 @@ "horstoeko/mimedb": "^1", "horstoeko/stringmanagement": "^1", "jms/serializer": "^3", - "php": "^7.3|^7.4|^8", + "php": ">=7.3", "setasign/fpdf": "^1", "setasign/fpdi": "^2", "smalot/pdfparser": "^0|^2", @@ -2960,6 +2962,7 @@ "goetas-webservices/xsd2php": "^0", "nette/php-generator": "*", "pdepend/pdepend": "^2", + "phpdocumentor/reflection-docblock": "^5.3", "phploc/phploc": "^7", "phpmd/phpmd": "^2", "phpstan/phpstan": "^1.8", @@ -2970,11 +2973,7 @@ "type": "package", "autoload": { "psr-4": { - "horstoeko\\zugferd\\": "src", - "horstoeko\\zugferd\\qdt\\": "src/entities/qdt", - "horstoeko\\zugferd\\ram\\": "src/entities/ram", - "horstoeko\\zugferd\\rsm\\": "src/entities/rsm", - "horstoeko\\zugferd\\udt\\": "src/entities/udt" + "horstoeko\\zugferd\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -2999,26 +2998,26 @@ ], "support": { "issues": "https://github.com/horstoeko/zugferd/issues", - "source": "https://github.com/horstoeko/zugferd/tree/v1.0.61" + "source": "https://github.com/horstoeko/zugferd/tree/v1.0.90" }, - "time": "2024-09-12T14:13:26+00:00" + "time": "2024-12-03T04:52:07+00:00" }, { "name": "imagine/imagine", - "version": "1.3.5", + "version": "1.5.0", "source": { "type": "git", "url": "https://github.com/php-imagine/Imagine.git", - "reference": "7151d553edec4dc2bbac60419f7a74ff34700e7f" + "reference": "80ab21434890dee9ba54969d31c51ac8d4d551e0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-imagine/Imagine/zipball/7151d553edec4dc2bbac60419f7a74ff34700e7f", - "reference": "7151d553edec4dc2bbac60419f7a74ff34700e7f", + "url": "https://api.github.com/repos/php-imagine/Imagine/zipball/80ab21434890dee9ba54969d31c51ac8d4d551e0", + "reference": "80ab21434890dee9ba54969d31c51ac8d4d551e0", "shasum": "" }, "require": { - "php": ">=5.5" + "php": ">=7.1" }, "require-dev": { "phpunit/phpunit": "^4.8 || ^5.7 || ^6.5 || ^7.5 || ^8.4 || ^9.3" @@ -3051,7 +3050,7 @@ "homepage": "http://avalanche123.com" } ], - "description": "Image processing for PHP 5.3", + "description": "Image processing for PHP", "homepage": "http://imagine.readthedocs.org/", "keywords": [ "drawing", @@ -3061,9 +3060,9 @@ ], "support": { "issues": "https://github.com/php-imagine/Imagine/issues", - "source": "https://github.com/php-imagine/Imagine/tree/1.3.5" + "source": "https://github.com/php-imagine/Imagine/tree/1.5.0" }, - "time": "2023-06-07T14:49:52+00:00" + "time": "2024-12-03T14:37:55+00:00" }, { "name": "incenteev/composer-parameter-handler", @@ -3124,28 +3123,28 @@ }, { "name": "jean85/pretty-package-versions", - "version": "2.0.6", + "version": "2.1.0", "source": { "type": "git", "url": "https://github.com/Jean85/pretty-package-versions.git", - "reference": "f9fdd29ad8e6d024f52678b570e5593759b550b4" + "reference": "3c4e5f62ba8d7de1734312e4fff32f67a8daaf10" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Jean85/pretty-package-versions/zipball/f9fdd29ad8e6d024f52678b570e5593759b550b4", - "reference": "f9fdd29ad8e6d024f52678b570e5593759b550b4", + "url": "https://api.github.com/repos/Jean85/pretty-package-versions/zipball/3c4e5f62ba8d7de1734312e4fff32f67a8daaf10", + "reference": "3c4e5f62ba8d7de1734312e4fff32f67a8daaf10", "shasum": "" }, "require": { - "composer-runtime-api": "^2.0.0", - "php": "^7.1|^8.0" + "composer-runtime-api": "^2.1.0", + "php": "^7.4|^8.0" }, "require-dev": { "friendsofphp/php-cs-fixer": "^3.2", "jean85/composer-provided-replaced-stub-package": "^1.0", "phpstan/phpstan": "^1.4", - "phpunit/phpunit": "^7.5|^8.5|^9.4", - "vimeo/psalm": "^4.3" + "phpunit/phpunit": "^7.5|^8.5|^9.6", + "vimeo/psalm": "^4.3 || ^5.0" }, "type": "library", "extra": { @@ -3177,9 +3176,9 @@ ], "support": { "issues": "https://github.com/Jean85/pretty-package-versions/issues", - "source": "https://github.com/Jean85/pretty-package-versions/tree/2.0.6" + "source": "https://github.com/Jean85/pretty-package-versions/tree/2.1.0" }, - "time": "2024-03-08T09:58:59+00:00" + "time": "2024-11-18T16:19:46+00:00" }, { "name": "jms/metadata", @@ -3247,16 +3246,16 @@ }, { "name": "jms/serializer", - "version": "3.30.0", + "version": "3.31.1", "source": { "type": "git", "url": "https://github.com/schmittjoh/serializer.git", - "reference": "bf1105358123d7c02ee6cad08ea33ab535a09d5e" + "reference": "362503da26673f210221c25b99c795da718ad9aa" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/schmittjoh/serializer/zipball/bf1105358123d7c02ee6cad08ea33ab535a09d5e", - "reference": "bf1105358123d7c02ee6cad08ea33ab535a09d5e", + "url": "https://api.github.com/repos/schmittjoh/serializer/zipball/362503da26673f210221c25b99c795da718ad9aa", + "reference": "362503da26673f210221c25b99c795da718ad9aa", "shasum": "" }, "require": { @@ -3276,10 +3275,10 @@ "jackalope/jackalope-doctrine-dbal": "^1.3", "ocramius/proxy-manager": "^1.0 || ^2.0", "phpbench/phpbench": "^1.0", - "phpstan/phpstan": "^1.0.2", - "phpunit/phpunit": "^9.0 || ^10.0", + "phpstan/phpstan": "^1.10.57", + "phpunit/phpunit": "^9.0 || ^10.0 || ^11.0", "psr/container": "^1.0 || ^2.0", - "rector/rector": "^0.19.0", + "rector/rector": "^1.0.0", "symfony/dependency-injection": "^5.4 || ^6.0 || ^7.0", "symfony/expression-language": "^5.4 || ^6.0 || ^7.0", "symfony/filesystem": "^5.4 || ^6.0 || ^7.0", @@ -3332,7 +3331,7 @@ ], "support": { "issues": "https://github.com/schmittjoh/serializer/issues", - "source": "https://github.com/schmittjoh/serializer/tree/3.30.0" + "source": "https://github.com/schmittjoh/serializer/tree/3.31.1" }, "funding": [ { @@ -3340,32 +3339,33 @@ "type": "github" } ], - "time": "2024-02-24T14:12:14+00:00" + "time": "2024-10-31T18:35:14+00:00" }, { "name": "jms/serializer-bundle", - "version": "5.4.0", + "version": "5.5.1", "source": { "type": "git", "url": "https://github.com/schmittjoh/JMSSerializerBundle.git", - "reference": "6fa2dd0083e00fe21c5da171556d7ecabc14b437" + "reference": "0538a2bae32a448fdeded53d729308816b5ad2e8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/schmittjoh/JMSSerializerBundle/zipball/6fa2dd0083e00fe21c5da171556d7ecabc14b437", - "reference": "6fa2dd0083e00fe21c5da171556d7ecabc14b437", + "url": "https://api.github.com/repos/schmittjoh/JMSSerializerBundle/zipball/0538a2bae32a448fdeded53d729308816b5ad2e8", + "reference": "0538a2bae32a448fdeded53d729308816b5ad2e8", "shasum": "" }, "require": { "jms/metadata": "^2.6", - "jms/serializer": "^3.28", + "jms/serializer": "^3.31", "php": "^7.4 || ^8.0", "symfony/config": "^5.4 || ^6.0 || ^7.0", "symfony/dependency-injection": "^5.4 || ^6.0 || ^7.0", "symfony/framework-bundle": "^5.4 || ^6.0 || ^7.0" }, "require-dev": { - "doctrine/coding-standard": "^8.1", + "doctrine/annotations": "^1.14 || ^2.0", + "doctrine/coding-standard": "^12.0", "doctrine/orm": "^2.14", "phpunit/phpunit": "^8.0 || ^9.0", "symfony/expression-language": "^5.4 || ^6.0 || ^7.0", @@ -3420,7 +3420,7 @@ ], "support": { "issues": "https://github.com/schmittjoh/JMSSerializerBundle/issues", - "source": "https://github.com/schmittjoh/JMSSerializerBundle/tree/5.4.0" + "source": "https://github.com/schmittjoh/JMSSerializerBundle/tree/5.5.1" }, "funding": [ { @@ -3428,7 +3428,7 @@ "type": "github" } ], - "time": "2023-12-12T15:33:15+00:00" + "time": "2024-11-06T12:45:22+00:00" }, { "name": "knplabs/gaufrette", @@ -3585,16 +3585,16 @@ }, { "name": "knplabs/knp-gaufrette-bundle", - "version": "v0.7.2", + "version": "v0.7.3", "source": { "type": "git", "url": "https://github.com/KnpLabs/KnpGaufretteBundle.git", - "reference": "9cf8706e9f01d4a7ee5013261a10768efdfebb0f" + "reference": "b127fc85958ba321851cb1fe16de7ba0af7871e0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/KnpLabs/KnpGaufretteBundle/zipball/9cf8706e9f01d4a7ee5013261a10768efdfebb0f", - "reference": "9cf8706e9f01d4a7ee5013261a10768efdfebb0f", + "url": "https://api.github.com/repos/KnpLabs/KnpGaufretteBundle/zipball/b127fc85958ba321851cb1fe16de7ba0af7871e0", + "reference": "b127fc85958ba321851cb1fe16de7ba0af7871e0", "shasum": "" }, "require": { @@ -3607,7 +3607,7 @@ "require-dev": { "symfony/console": "^4.4|^5.0|^6.0", "symfony/filesystem": "^4.0|^5.0|^6.0", - "symfony/phpunit-bridge": "^5.4", + "symfony/phpunit-bridge": "^6.4|^7.1", "symfony/yaml": "^4.0|^5.0|^6.0" }, "type": "symfony-bundle", @@ -3645,9 +3645,9 @@ ], "support": { "issues": "https://github.com/KnpLabs/KnpGaufretteBundle/issues", - "source": "https://github.com/KnpLabs/KnpGaufretteBundle/tree/v0.7.2" + "source": "https://github.com/KnpLabs/KnpGaufretteBundle/tree/v0.7.3" }, - "time": "2022-03-21T10:48:39+00:00" + "time": "2024-11-18T07:38:26+00:00" }, { "name": "knplabs/knp-menu", @@ -3863,27 +3863,27 @@ }, { "name": "laminas/laminas-code", - "version": "4.14.0", + "version": "4.16.0", "source": { "type": "git", "url": "https://github.com/laminas/laminas-code.git", - "reference": "562e02b7d85cb9142b5116cc76c4c7c162a11a1c" + "reference": "1793e78dad4108b594084d05d1fb818b85b110af" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laminas/laminas-code/zipball/562e02b7d85cb9142b5116cc76c4c7c162a11a1c", - "reference": "562e02b7d85cb9142b5116cc76c4c7c162a11a1c", + "url": "https://api.github.com/repos/laminas/laminas-code/zipball/1793e78dad4108b594084d05d1fb818b85b110af", + "reference": "1793e78dad4108b594084d05d1fb818b85b110af", "shasum": "" }, "require": { - "php": "~8.1.0 || ~8.2.0 || ~8.3.0" + "php": "~8.1.0 || ~8.2.0 || ~8.3.0 || ~8.4.0" }, "require-dev": { "doctrine/annotations": "^2.0.1", "ext-phar": "*", - "laminas/laminas-coding-standard": "^2.5.0", - "laminas/laminas-stdlib": "^3.17.0", - "phpunit/phpunit": "^10.3.3", + "laminas/laminas-coding-standard": "^3.0.0", + "laminas/laminas-stdlib": "^3.18.0", + "phpunit/phpunit": "^10.5.37", "psalm/plugin-phpunit": "^0.19.0", "vimeo/psalm": "^5.15.0" }, @@ -3922,7 +3922,7 @@ "type": "community_bridge" } ], - "time": "2024-06-17T08:50:25+00:00" + "time": "2024-11-20T13:15:13+00:00" }, { "name": "lcobucci/clock", @@ -4351,16 +4351,16 @@ }, { "name": "maennchen/zipstream-php", - "version": "3.1.0", + "version": "3.1.1", "source": { "type": "git", "url": "https://github.com/maennchen/ZipStream-PHP.git", - "reference": "b8174494eda667f7d13876b4a7bfef0f62a7c0d1" + "reference": "6187e9cc4493da94b9b63eb2315821552015fca9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/maennchen/ZipStream-PHP/zipball/b8174494eda667f7d13876b4a7bfef0f62a7c0d1", - "reference": "b8174494eda667f7d13876b4a7bfef0f62a7c0d1", + "url": "https://api.github.com/repos/maennchen/ZipStream-PHP/zipball/6187e9cc4493da94b9b63eb2315821552015fca9", + "reference": "6187e9cc4493da94b9b63eb2315821552015fca9", "shasum": "" }, "require": { @@ -4416,19 +4416,15 @@ ], "support": { "issues": "https://github.com/maennchen/ZipStream-PHP/issues", - "source": "https://github.com/maennchen/ZipStream-PHP/tree/3.1.0" + "source": "https://github.com/maennchen/ZipStream-PHP/tree/3.1.1" }, "funding": [ { "url": "https://github.com/maennchen", "type": "github" - }, - { - "url": "https://opencollective.com/zipstream", - "type": "open_collective" } ], - "time": "2023-06-21T14:59:35+00:00" + "time": "2024-10-10T12:33:01+00:00" }, { "name": "markbaker/complex", @@ -4601,23 +4597,23 @@ }, { "name": "mongodb/mongodb", - "version": "1.19.1", + "version": "1.20.0", "source": { "type": "git", "url": "https://github.com/mongodb/mongo-php-library.git", - "reference": "afe425b629075fa597fa2d5645045cb20dc93d95" + "reference": "75da9ea3b63d97b05e0e8648d8c09a17bc54c0b6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/mongodb/mongo-php-library/zipball/afe425b629075fa597fa2d5645045cb20dc93d95", - "reference": "afe425b629075fa597fa2d5645045cb20dc93d95", + "url": "https://api.github.com/repos/mongodb/mongo-php-library/zipball/75da9ea3b63d97b05e0e8648d8c09a17bc54c0b6", + "reference": "75da9ea3b63d97b05e0e8648d8c09a17bc54c0b6", "shasum": "" }, "require": { "composer-runtime-api": "^2.0", "ext-hash": "*", "ext-json": "*", - "ext-mongodb": "^1.18.0", + "ext-mongodb": "^1.20.0", "php": "^7.4 || ^8.0", "psr/log": "^1.1.4|^2|^3", "symfony/polyfill-php80": "^1.27", @@ -4672,22 +4668,22 @@ ], "support": { "issues": "https://github.com/mongodb/mongo-php-library/issues", - "source": "https://github.com/mongodb/mongo-php-library/tree/1.19.1" + "source": "https://github.com/mongodb/mongo-php-library/tree/1.20.0" }, - "time": "2024-06-13T14:30:04+00:00" + "time": "2024-09-25T12:54:08+00:00" }, { "name": "monolog/monolog", - "version": "2.9.3", + "version": "2.10.0", "source": { "type": "git", "url": "https://github.com/Seldaek/monolog.git", - "reference": "a30bfe2e142720dfa990d0a7e573997f5d884215" + "reference": "5cf826f2991858b54d5c3809bee745560a1042a7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Seldaek/monolog/zipball/a30bfe2e142720dfa990d0a7e573997f5d884215", - "reference": "a30bfe2e142720dfa990d0a7e573997f5d884215", + "url": "https://api.github.com/repos/Seldaek/monolog/zipball/5cf826f2991858b54d5c3809bee745560a1042a7", + "reference": "5cf826f2991858b54d5c3809bee745560a1042a7", "shasum": "" }, "require": { @@ -4764,7 +4760,7 @@ ], "support": { "issues": "https://github.com/Seldaek/monolog/issues", - "source": "https://github.com/Seldaek/monolog/tree/2.9.3" + "source": "https://github.com/Seldaek/monolog/tree/2.10.0" }, "funding": [ { @@ -4776,7 +4772,7 @@ "type": "tidelift" } ], - "time": "2024-04-12T20:52:51+00:00" + "time": "2024-11-12T12:43:37+00:00" }, { "name": "mpdf/mpdf", @@ -5042,16 +5038,16 @@ }, { "name": "myclabs/deep-copy", - "version": "1.12.0", + "version": "1.12.1", "source": { "type": "git", "url": "https://github.com/myclabs/DeepCopy.git", - "reference": "3a6b9a42cd8f8771bd4295d13e1423fa7f3d942c" + "reference": "123267b2c49fbf30d78a7b2d333f6be754b94845" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/3a6b9a42cd8f8771bd4295d13e1423fa7f3d942c", - "reference": "3a6b9a42cd8f8771bd4295d13e1423fa7f3d942c", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/123267b2c49fbf30d78a7b2d333f6be754b94845", + "reference": "123267b2c49fbf30d78a7b2d333f6be754b94845", "shasum": "" }, "require": { @@ -5090,7 +5086,7 @@ ], "support": { "issues": "https://github.com/myclabs/DeepCopy/issues", - "source": "https://github.com/myclabs/DeepCopy/tree/1.12.0" + "source": "https://github.com/myclabs/DeepCopy/tree/1.12.1" }, "funding": [ { @@ -5098,7 +5094,7 @@ "type": "tidelift" } ], - "time": "2024-06-12T14:39:25+00:00" + "time": "2024-11-08T17:47:46+00:00" }, { "name": "namshi/jose", @@ -5343,20 +5339,20 @@ }, { "name": "nesbot/carbon", - "version": "3.8.0", + "version": "3.8.2", "source": { "type": "git", "url": "https://github.com/briannesbitt/Carbon.git", - "reference": "bbd3eef89af8ba66a3aa7952b5439168fbcc529f" + "reference": "e1268cdbc486d97ce23fef2c666dc3c6b6de9947" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/bbd3eef89af8ba66a3aa7952b5439168fbcc529f", - "reference": "bbd3eef89af8ba66a3aa7952b5439168fbcc529f", + "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/e1268cdbc486d97ce23fef2c666dc3c6b6de9947", + "reference": "e1268cdbc486d97ce23fef2c666dc3c6b6de9947", "shasum": "" }, "require": { - "carbonphp/carbon-doctrine-types": "*", + "carbonphp/carbon-doctrine-types": "<100.0", "ext-json": "*", "php": "^8.1", "psr/clock": "^1.0", @@ -5445,7 +5441,7 @@ "type": "tidelift" } ], - "time": "2024-08-19T06:22:39+00:00" + "time": "2024-11-07T17:46:48+00:00" }, { "name": "nicolab/php-ftp-client", @@ -5771,7 +5767,7 @@ "support": { "source": "https://github.com/paypal/Checkout-PHP-SDK/tree/master" }, - "abandoned": true, + "abandoned": "paypal/paypal-server-sdk", "time": "2021-09-21T21:11:41+00:00" }, { @@ -5869,7 +5865,7 @@ "issues": "https://github.com/paypal/PayPal-PHP-SDK/issues", "source": "https://github.com/paypal/PayPal-PHP-SDK/tree/master" }, - "abandoned": true, + "abandoned": "paypal/paypal-server-sdk", "time": "2020-05-11T17:21:19+00:00" }, { @@ -6104,16 +6100,16 @@ }, { "name": "phpdocumentor/reflection-docblock", - "version": "5.4.1", + "version": "5.6.0", "source": { "type": "git", "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", - "reference": "9d07b3f7fdcf5efec5d1609cba3c19c5ea2bdc9c" + "reference": "f3558a4c23426d12bffeaab463f8a8d8b681193c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/9d07b3f7fdcf5efec5d1609cba3c19c5ea2bdc9c", - "reference": "9d07b3f7fdcf5efec5d1609cba3c19c5ea2bdc9c", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/f3558a4c23426d12bffeaab463f8a8d8b681193c", + "reference": "f3558a4c23426d12bffeaab463f8a8d8b681193c", "shasum": "" }, "require": { @@ -6122,17 +6118,17 @@ "php": "^7.4 || ^8.0", "phpdocumentor/reflection-common": "^2.2", "phpdocumentor/type-resolver": "^1.7", - "phpstan/phpdoc-parser": "^1.7", + "phpstan/phpdoc-parser": "^1.7|^2.0", "webmozart/assert": "^1.9.1" }, "require-dev": { - "mockery/mockery": "~1.3.5", + "mockery/mockery": "~1.3.5 || ~1.6.0", "phpstan/extension-installer": "^1.1", "phpstan/phpstan": "^1.8", "phpstan/phpstan-mockery": "^1.1", "phpstan/phpstan-webmozart-assert": "^1.2", "phpunit/phpunit": "^9.5", - "vimeo/psalm": "^5.13" + "psalm/phar": "^5.26" }, "type": "library", "extra": { @@ -6162,29 +6158,29 @@ "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", "support": { "issues": "https://github.com/phpDocumentor/ReflectionDocBlock/issues", - "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/5.4.1" + "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/5.6.0" }, - "time": "2024-05-21T05:55:05+00:00" + "time": "2024-11-12T11:25:25+00:00" }, { "name": "phpdocumentor/type-resolver", - "version": "1.8.2", + "version": "1.10.0", "source": { "type": "git", "url": "https://github.com/phpDocumentor/TypeResolver.git", - "reference": "153ae662783729388a584b4361f2545e4d841e3c" + "reference": "679e3ce485b99e84c775d28e2e96fade9a7fb50a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/153ae662783729388a584b4361f2545e4d841e3c", - "reference": "153ae662783729388a584b4361f2545e4d841e3c", + "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/679e3ce485b99e84c775d28e2e96fade9a7fb50a", + "reference": "679e3ce485b99e84c775d28e2e96fade9a7fb50a", "shasum": "" }, "require": { "doctrine/deprecations": "^1.0", "php": "^7.3 || ^8.0", "phpdocumentor/reflection-common": "^2.0", - "phpstan/phpdoc-parser": "^1.13" + "phpstan/phpdoc-parser": "^1.18|^2.0" }, "require-dev": { "ext-tokenizer": "*", @@ -6220,9 +6216,9 @@ "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names", "support": { "issues": "https://github.com/phpDocumentor/TypeResolver/issues", - "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.8.2" + "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.10.0" }, - "time": "2024-02-23T11:10:43+00:00" + "time": "2024-11-09T15:12:26+00:00" }, { "name": "phpoffice/phpexcel", @@ -6288,16 +6284,16 @@ }, { "name": "phpoffice/phpspreadsheet", - "version": "1.29.1", + "version": "1.29.5", "source": { "type": "git", "url": "https://github.com/PHPOffice/PhpSpreadsheet.git", - "reference": "59ee38f7480904cd6487e5cbdea4d80ff2758719" + "reference": "727cb704d5479fe4ddc291497ee471c4ec08f1b6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/PHPOffice/PhpSpreadsheet/zipball/59ee38f7480904cd6487e5cbdea4d80ff2758719", - "reference": "59ee38f7480904cd6487e5cbdea4d80ff2758719", + "url": "https://api.github.com/repos/PHPOffice/PhpSpreadsheet/zipball/727cb704d5479fe4ddc291497ee471c4ec08f1b6", + "reference": "727cb704d5479fe4ddc291497ee471c4ec08f1b6", "shasum": "" }, "require": { @@ -6387,22 +6383,22 @@ ], "support": { "issues": "https://github.com/PHPOffice/PhpSpreadsheet/issues", - "source": "https://github.com/PHPOffice/PhpSpreadsheet/tree/1.29.1" + "source": "https://github.com/PHPOffice/PhpSpreadsheet/tree/1.29.5" }, - "time": "2024-09-03T00:55:32+00:00" + "time": "2024-11-22T05:57:44+00:00" }, { "name": "phpstan/phpdoc-parser", - "version": "1.31.0", + "version": "1.33.0", "source": { "type": "git", "url": "https://github.com/phpstan/phpdoc-parser.git", - "reference": "249f15fb843bf240cf058372dad29e100cee6c17" + "reference": "82a311fd3690fb2bf7b64d5c98f912b3dd746140" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/249f15fb843bf240cf058372dad29e100cee6c17", - "reference": "249f15fb843bf240cf058372dad29e100cee6c17", + "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/82a311fd3690fb2bf7b64d5c98f912b3dd746140", + "reference": "82a311fd3690fb2bf7b64d5c98f912b3dd746140", "shasum": "" }, "require": { @@ -6434,9 +6430,9 @@ "description": "PHPDoc parser with support for nullable, intersection and generic types", "support": { "issues": "https://github.com/phpstan/phpdoc-parser/issues", - "source": "https://github.com/phpstan/phpdoc-parser/tree/1.31.0" + "source": "https://github.com/phpstan/phpdoc-parser/tree/1.33.0" }, - "time": "2024-09-22T11:32:18+00:00" + "time": "2024-10-13T11:25:22+00:00" }, { "name": "picqer/sendcloud-php-client", @@ -8009,16 +8005,16 @@ }, { "name": "symfony/asset", - "version": "v6.4.8", + "version": "v6.4.13", "source": { "type": "git", "url": "https://github.com/symfony/asset.git", - "reference": "c668aa320e26b7379540368832b9d1dd43d32603" + "reference": "2466c17d61d14539cddf77e57ebb9cc971185302" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/asset/zipball/c668aa320e26b7379540368832b9d1dd43d32603", - "reference": "c668aa320e26b7379540368832b9d1dd43d32603", + "url": "https://api.github.com/repos/symfony/asset/zipball/2466c17d61d14539cddf77e57ebb9cc971185302", + "reference": "2466c17d61d14539cddf77e57ebb9cc971185302", "shasum": "" }, "require": { @@ -8058,7 +8054,7 @@ "description": "Manages URL generation and versioning of web assets such as CSS stylesheets, JavaScript files and image files", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/asset/tree/v6.4.8" + "source": "https://github.com/symfony/asset/tree/v6.4.13" }, "funding": [ { @@ -8074,20 +8070,20 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:49:08+00:00" + "time": "2024-10-25T15:07:50+00:00" }, { "name": "symfony/cache", - "version": "v6.4.12", + "version": "v6.4.16", "source": { "type": "git", "url": "https://github.com/symfony/cache.git", - "reference": "a463451b7f6ac4a47b98dbfc78ec2d3560c759d8" + "reference": "70d60e9a3603108563010f8592dff15a6f15dfae" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/cache/zipball/a463451b7f6ac4a47b98dbfc78ec2d3560c759d8", - "reference": "a463451b7f6ac4a47b98dbfc78ec2d3560c759d8", + "url": "https://api.github.com/repos/symfony/cache/zipball/70d60e9a3603108563010f8592dff15a6f15dfae", + "reference": "70d60e9a3603108563010f8592dff15a6f15dfae", "shasum": "" }, "require": { @@ -8154,7 +8150,7 @@ "psr6" ], "support": { - "source": "https://github.com/symfony/cache/tree/v6.4.12" + "source": "https://github.com/symfony/cache/tree/v6.4.16" }, "funding": [ { @@ -8170,20 +8166,20 @@ "type": "tidelift" } ], - "time": "2024-09-16T16:01:33+00:00" + "time": "2024-11-20T10:10:54+00:00" }, { "name": "symfony/cache-contracts", - "version": "v3.5.0", + "version": "v3.5.1", "source": { "type": "git", "url": "https://github.com/symfony/cache-contracts.git", - "reference": "df6a1a44c890faded49a5fca33c2d5c5fd3c2197" + "reference": "15a4f8e5cd3bce9aeafc882b1acab39ec8de2c1b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/cache-contracts/zipball/df6a1a44c890faded49a5fca33c2d5c5fd3c2197", - "reference": "df6a1a44c890faded49a5fca33c2d5c5fd3c2197", + "url": "https://api.github.com/repos/symfony/cache-contracts/zipball/15a4f8e5cd3bce9aeafc882b1acab39ec8de2c1b", + "reference": "15a4f8e5cd3bce9aeafc882b1acab39ec8de2c1b", "shasum": "" }, "require": { @@ -8230,7 +8226,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/cache-contracts/tree/v3.5.0" + "source": "https://github.com/symfony/cache-contracts/tree/v3.5.1" }, "funding": [ { @@ -8246,20 +8242,20 @@ "type": "tidelift" } ], - "time": "2024-04-18T09:32:20+00:00" + "time": "2024-09-25T14:20:29+00:00" }, { "name": "symfony/clock", - "version": "v6.4.8", + "version": "v6.4.13", "source": { "type": "git", "url": "https://github.com/symfony/clock.git", - "reference": "7a4840efd17135cbd547e41ec49fb910ed4f8b98" + "reference": "b2bf55c4dd115003309eafa87ee7df9ed3dde81b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/clock/zipball/7a4840efd17135cbd547e41ec49fb910ed4f8b98", - "reference": "7a4840efd17135cbd547e41ec49fb910ed4f8b98", + "url": "https://api.github.com/repos/symfony/clock/zipball/b2bf55c4dd115003309eafa87ee7df9ed3dde81b", + "reference": "b2bf55c4dd115003309eafa87ee7df9ed3dde81b", "shasum": "" }, "require": { @@ -8304,7 +8300,7 @@ "time" ], "support": { - "source": "https://github.com/symfony/clock/tree/v6.4.8" + "source": "https://github.com/symfony/clock/tree/v6.4.13" }, "funding": [ { @@ -8320,20 +8316,20 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:51:39+00:00" + "time": "2024-09-25T14:18:03+00:00" }, { "name": "symfony/config", - "version": "v6.4.8", + "version": "v6.4.14", "source": { "type": "git", "url": "https://github.com/symfony/config.git", - "reference": "12e7e52515ce37191b193cf3365903c4f3951e35" + "reference": "4e55e7e4ffddd343671ea972216d4509f46c22ef" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/config/zipball/12e7e52515ce37191b193cf3365903c4f3951e35", - "reference": "12e7e52515ce37191b193cf3365903c4f3951e35", + "url": "https://api.github.com/repos/symfony/config/zipball/4e55e7e4ffddd343671ea972216d4509f46c22ef", + "reference": "4e55e7e4ffddd343671ea972216d4509f46c22ef", "shasum": "" }, "require": { @@ -8379,7 +8375,7 @@ "description": "Helps you find, load, combine, autofill and validate configuration values of any kind", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/config/tree/v6.4.8" + "source": "https://github.com/symfony/config/tree/v6.4.14" }, "funding": [ { @@ -8395,20 +8391,20 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:49:08+00:00" + "time": "2024-11-04T11:33:53+00:00" }, { "name": "symfony/console", - "version": "v6.4.12", + "version": "v6.4.15", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "72d080eb9edf80e36c19be61f72c98ed8273b765" + "reference": "f1fc6f47283e27336e7cebb9e8946c8de7bff9bd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/72d080eb9edf80e36c19be61f72c98ed8273b765", - "reference": "72d080eb9edf80e36c19be61f72c98ed8273b765", + "url": "https://api.github.com/repos/symfony/console/zipball/f1fc6f47283e27336e7cebb9e8946c8de7bff9bd", + "reference": "f1fc6f47283e27336e7cebb9e8946c8de7bff9bd", "shasum": "" }, "require": { @@ -8473,7 +8469,7 @@ "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v6.4.12" + "source": "https://github.com/symfony/console/tree/v6.4.15" }, "funding": [ { @@ -8489,20 +8485,20 @@ "type": "tidelift" } ], - "time": "2024-09-20T08:15:52+00:00" + "time": "2024-11-06T14:19:14+00:00" }, { "name": "symfony/dependency-injection", - "version": "v6.4.12", + "version": "v6.4.16", "source": { "type": "git", "url": "https://github.com/symfony/dependency-injection.git", - "reference": "cfb9d34a1cdd4911bc737a5358fd1cf8ebfb536e" + "reference": "7a379d8871f6a36f01559c14e11141cc02eb8dc8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/cfb9d34a1cdd4911bc737a5358fd1cf8ebfb536e", - "reference": "cfb9d34a1cdd4911bc737a5358fd1cf8ebfb536e", + "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/7a379d8871f6a36f01559c14e11141cc02eb8dc8", + "reference": "7a379d8871f6a36f01559c14e11141cc02eb8dc8", "shasum": "" }, "require": { @@ -8554,7 +8550,7 @@ "description": "Allows you to standardize and centralize the way objects are constructed in your application", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/dependency-injection/tree/v6.4.12" + "source": "https://github.com/symfony/dependency-injection/tree/v6.4.16" }, "funding": [ { @@ -8570,20 +8566,20 @@ "type": "tidelift" } ], - "time": "2024-09-20T08:18:25+00:00" + "time": "2024-11-25T14:52:46+00:00" }, { "name": "symfony/deprecation-contracts", - "version": "v3.5.0", + "version": "v3.5.1", "source": { "type": "git", "url": "https://github.com/symfony/deprecation-contracts.git", - "reference": "0e0d29ce1f20deffb4ab1b016a7257c4f1e789a1" + "reference": "74c71c939a79f7d5bf3c1ce9f5ea37ba0114c6f6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/0e0d29ce1f20deffb4ab1b016a7257c4f1e789a1", - "reference": "0e0d29ce1f20deffb4ab1b016a7257c4f1e789a1", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/74c71c939a79f7d5bf3c1ce9f5ea37ba0114c6f6", + "reference": "74c71c939a79f7d5bf3c1ce9f5ea37ba0114c6f6", "shasum": "" }, "require": { @@ -8621,7 +8617,7 @@ "description": "A generic function and convention to trigger deprecation notices", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/deprecation-contracts/tree/v3.5.0" + "source": "https://github.com/symfony/deprecation-contracts/tree/v3.5.1" }, "funding": [ { @@ -8637,20 +8633,20 @@ "type": "tidelift" } ], - "time": "2024-04-18T09:32:20+00:00" + "time": "2024-09-25T14:20:29+00:00" }, { "name": "symfony/doctrine-bridge", - "version": "v6.4.12", + "version": "v6.4.16", "source": { "type": "git", "url": "https://github.com/symfony/doctrine-bridge.git", - "reference": "b5c0a0172bbe9b1435181d94ca5cbe4af3fb45af" + "reference": "429a4b6786901afcc085ee16dc3f2be621f33488" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/doctrine-bridge/zipball/b5c0a0172bbe9b1435181d94ca5cbe4af3fb45af", - "reference": "b5c0a0172bbe9b1435181d94ca5cbe4af3fb45af", + "url": "https://api.github.com/repos/symfony/doctrine-bridge/zipball/429a4b6786901afcc085ee16dc3f2be621f33488", + "reference": "429a4b6786901afcc085ee16dc3f2be621f33488", "shasum": "" }, "require": { @@ -8680,7 +8676,7 @@ }, "require-dev": { "doctrine/collections": "^1.0|^2.0", - "doctrine/data-fixtures": "^1.1", + "doctrine/data-fixtures": "^1.1|^2", "doctrine/dbal": "^2.13.1|^3|^4", "doctrine/orm": "^2.15|^3", "psr/log": "^1|^2|^3", @@ -8729,7 +8725,7 @@ "description": "Provides integration for Doctrine with various Symfony components", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/doctrine-bridge/tree/v6.4.12" + "source": "https://github.com/symfony/doctrine-bridge/tree/v6.4.16" }, "funding": [ { @@ -8745,20 +8741,20 @@ "type": "tidelift" } ], - "time": "2024-09-08T12:31:10+00:00" + "time": "2024-11-25T12:00:20+00:00" }, { "name": "symfony/dotenv", - "version": "v6.4.12", + "version": "v6.4.16", "source": { "type": "git", "url": "https://github.com/symfony/dotenv.git", - "reference": "815284236cab7d8e1280f53bf562c07a4dfe5954" + "reference": "1ac5e7e7e862d4d574258daf08bd569ba926e4a5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dotenv/zipball/815284236cab7d8e1280f53bf562c07a4dfe5954", - "reference": "815284236cab7d8e1280f53bf562c07a4dfe5954", + "url": "https://api.github.com/repos/symfony/dotenv/zipball/1ac5e7e7e862d4d574258daf08bd569ba926e4a5", + "reference": "1ac5e7e7e862d4d574258daf08bd569ba926e4a5", "shasum": "" }, "require": { @@ -8803,7 +8799,7 @@ "environment" ], "support": { - "source": "https://github.com/symfony/dotenv/tree/v6.4.12" + "source": "https://github.com/symfony/dotenv/tree/v6.4.16" }, "funding": [ { @@ -8819,20 +8815,20 @@ "type": "tidelift" } ], - "time": "2024-09-16T16:01:33+00:00" + "time": "2024-11-27T11:08:19+00:00" }, { "name": "symfony/error-handler", - "version": "v6.4.10", + "version": "v6.4.14", "source": { "type": "git", "url": "https://github.com/symfony/error-handler.git", - "reference": "231f1b2ee80f72daa1972f7340297d67439224f0" + "reference": "9e024324511eeb00983ee76b9aedc3e6ecd993d9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/error-handler/zipball/231f1b2ee80f72daa1972f7340297d67439224f0", - "reference": "231f1b2ee80f72daa1972f7340297d67439224f0", + "url": "https://api.github.com/repos/symfony/error-handler/zipball/9e024324511eeb00983ee76b9aedc3e6ecd993d9", + "reference": "9e024324511eeb00983ee76b9aedc3e6ecd993d9", "shasum": "" }, "require": { @@ -8878,7 +8874,7 @@ "description": "Provides tools to manage errors and ease debugging PHP code", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/error-handler/tree/v6.4.10" + "source": "https://github.com/symfony/error-handler/tree/v6.4.14" }, "funding": [ { @@ -8894,20 +8890,20 @@ "type": "tidelift" } ], - "time": "2024-07-26T12:30:32+00:00" + "time": "2024-11-05T15:34:40+00:00" }, { "name": "symfony/event-dispatcher", - "version": "v6.4.8", + "version": "v6.4.13", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "8d7507f02b06e06815e56bb39aa0128e3806208b" + "reference": "0ffc48080ab3e9132ea74ef4e09d8dcf26bf897e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/8d7507f02b06e06815e56bb39aa0128e3806208b", - "reference": "8d7507f02b06e06815e56bb39aa0128e3806208b", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/0ffc48080ab3e9132ea74ef4e09d8dcf26bf897e", + "reference": "0ffc48080ab3e9132ea74ef4e09d8dcf26bf897e", "shasum": "" }, "require": { @@ -8958,7 +8954,7 @@ "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/event-dispatcher/tree/v6.4.8" + "source": "https://github.com/symfony/event-dispatcher/tree/v6.4.13" }, "funding": [ { @@ -8974,20 +8970,20 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:49:08+00:00" + "time": "2024-09-25T14:18:03+00:00" }, { "name": "symfony/event-dispatcher-contracts", - "version": "v3.5.0", + "version": "v3.5.1", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher-contracts.git", - "reference": "8f93aec25d41b72493c6ddff14e916177c9efc50" + "reference": "7642f5e970b672283b7823222ae8ef8bbc160b9f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/8f93aec25d41b72493c6ddff14e916177c9efc50", - "reference": "8f93aec25d41b72493c6ddff14e916177c9efc50", + "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/7642f5e970b672283b7823222ae8ef8bbc160b9f", + "reference": "7642f5e970b672283b7823222ae8ef8bbc160b9f", "shasum": "" }, "require": { @@ -9034,7 +9030,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.5.0" + "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.5.1" }, "funding": [ { @@ -9050,20 +9046,20 @@ "type": "tidelift" } ], - "time": "2024-04-18T09:32:20+00:00" + "time": "2024-09-25T14:20:29+00:00" }, { "name": "symfony/expression-language", - "version": "v6.4.11", + "version": "v6.4.13", "source": { "type": "git", "url": "https://github.com/symfony/expression-language.git", - "reference": "564e109c40d3637053c942a29a58e9434592a8bf" + "reference": "3524904fb026356a5230cd197f9a4e6a61e0e7df" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/expression-language/zipball/564e109c40d3637053c942a29a58e9434592a8bf", - "reference": "564e109c40d3637053c942a29a58e9434592a8bf", + "url": "https://api.github.com/repos/symfony/expression-language/zipball/3524904fb026356a5230cd197f9a4e6a61e0e7df", + "reference": "3524904fb026356a5230cd197f9a4e6a61e0e7df", "shasum": "" }, "require": { @@ -9098,7 +9094,7 @@ "description": "Provides an engine that can compile and evaluate expressions", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/expression-language/tree/v6.4.11" + "source": "https://github.com/symfony/expression-language/tree/v6.4.13" }, "funding": [ { @@ -9114,20 +9110,20 @@ "type": "tidelift" } ], - "time": "2024-08-12T09:55:28+00:00" + "time": "2024-10-09T08:40:40+00:00" }, { "name": "symfony/filesystem", - "version": "v6.4.12", + "version": "v6.4.13", "source": { "type": "git", "url": "https://github.com/symfony/filesystem.git", - "reference": "f810e3cbdf7fdc35983968523d09f349fa9ada12" + "reference": "4856c9cf585d5a0313d8d35afd681a526f038dd3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/f810e3cbdf7fdc35983968523d09f349fa9ada12", - "reference": "f810e3cbdf7fdc35983968523d09f349fa9ada12", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/4856c9cf585d5a0313d8d35afd681a526f038dd3", + "reference": "4856c9cf585d5a0313d8d35afd681a526f038dd3", "shasum": "" }, "require": { @@ -9164,7 +9160,7 @@ "description": "Provides basic utilities for the filesystem", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/filesystem/tree/v6.4.12" + "source": "https://github.com/symfony/filesystem/tree/v6.4.13" }, "funding": [ { @@ -9180,20 +9176,20 @@ "type": "tidelift" } ], - "time": "2024-09-16T16:01:33+00:00" + "time": "2024-10-25T15:07:50+00:00" }, { "name": "symfony/finder", - "version": "v6.4.11", + "version": "v6.4.13", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "d7eb6daf8cd7e9ac4976e9576b32042ef7253453" + "reference": "daea9eca0b08d0ed1dc9ab702a46128fd1be4958" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/d7eb6daf8cd7e9ac4976e9576b32042ef7253453", - "reference": "d7eb6daf8cd7e9ac4976e9576b32042ef7253453", + "url": "https://api.github.com/repos/symfony/finder/zipball/daea9eca0b08d0ed1dc9ab702a46128fd1be4958", + "reference": "daea9eca0b08d0ed1dc9ab702a46128fd1be4958", "shasum": "" }, "require": { @@ -9228,7 +9224,7 @@ "description": "Finds files and directories via an intuitive fluent interface", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/finder/tree/v6.4.11" + "source": "https://github.com/symfony/finder/tree/v6.4.13" }, "funding": [ { @@ -9244,26 +9240,29 @@ "type": "tidelift" } ], - "time": "2024-08-13T14:27:37+00:00" + "time": "2024-10-01T08:30:56+00:00" }, { "name": "symfony/flex", - "version": "v1.21.7", + "version": "v1.21.8", "source": { "type": "git", "url": "https://github.com/symfony/flex.git", - "reference": "33ce7c1c0fe78f8c3a106f193b6c0a7d82384462" + "reference": "bda5f869ac51c8e985a6fe9f964c4cb78228a369" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/flex/zipball/33ce7c1c0fe78f8c3a106f193b6c0a7d82384462", - "reference": "33ce7c1c0fe78f8c3a106f193b6c0a7d82384462", + "url": "https://api.github.com/repos/symfony/flex/zipball/bda5f869ac51c8e985a6fe9f964c4cb78228a369", + "reference": "bda5f869ac51c8e985a6fe9f964c4cb78228a369", "shasum": "" }, "require": { "composer-plugin-api": "^1.0|^2.0", "php": ">=7.1" }, + "conflict": { + "composer/semver": "<1.7.2" + }, "require-dev": { "composer/composer": "^1.0.2|^2.0", "symfony/dotenv": "^4.4|^5.0|^6.0", @@ -9293,7 +9292,7 @@ "description": "Composer plugin for Symfony", "support": { "issues": "https://github.com/symfony/flex/issues", - "source": "https://github.com/symfony/flex/tree/v1.21.7" + "source": "https://github.com/symfony/flex/tree/v1.21.8" }, "funding": [ { @@ -9309,20 +9308,20 @@ "type": "tidelift" } ], - "time": "2024-04-27T10:20:37+00:00" + "time": "2024-10-07T08:51:39+00:00" }, { "name": "symfony/form", - "version": "v6.4.12", + "version": "v6.4.13", "source": { "type": "git", "url": "https://github.com/symfony/form.git", - "reference": "5037c00071b193182eae4088fbd1801793b326f4" + "reference": "0fe17f90af23908ddc11dc23507db98e66572046" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/form/zipball/5037c00071b193182eae4088fbd1801793b326f4", - "reference": "5037c00071b193182eae4088fbd1801793b326f4", + "url": "https://api.github.com/repos/symfony/form/zipball/0fe17f90af23908ddc11dc23507db98e66572046", + "reference": "0fe17f90af23908ddc11dc23507db98e66572046", "shasum": "" }, "require": { @@ -9390,7 +9389,7 @@ "description": "Allows to easily create, process and reuse HTML forms", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/form/tree/v6.4.12" + "source": "https://github.com/symfony/form/tree/v6.4.13" }, "funding": [ { @@ -9406,20 +9405,20 @@ "type": "tidelift" } ], - "time": "2024-09-20T08:15:52+00:00" + "time": "2024-10-09T08:40:40+00:00" }, { "name": "symfony/framework-bundle", - "version": "v6.4.12", + "version": "v6.4.13", "source": { "type": "git", "url": "https://github.com/symfony/framework-bundle.git", - "reference": "6a9665bd1fae37b198429775c6132f193339434f" + "reference": "e8b0bd921f9bd35ea4d1508067c3f3f6e2036418" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/framework-bundle/zipball/6a9665bd1fae37b198429775c6132f193339434f", - "reference": "6a9665bd1fae37b198429775c6132f193339434f", + "url": "https://api.github.com/repos/symfony/framework-bundle/zipball/e8b0bd921f9bd35ea4d1508067c3f3f6e2036418", + "reference": "e8b0bd921f9bd35ea4d1508067c3f3f6e2036418", "shasum": "" }, "require": { @@ -9458,6 +9457,7 @@ "symfony/mime": "<6.4", "symfony/property-access": "<5.4", "symfony/property-info": "<5.4", + "symfony/runtime": "<5.4.45|>=6.0,<6.4.13|>=7.0,<7.1.6", "symfony/scheduler": "<6.4.4|>=7.0.0,<7.0.4", "symfony/security-core": "<5.4", "symfony/security-csrf": "<5.4", @@ -9538,7 +9538,7 @@ "description": "Provides a tight integration between Symfony components and the Symfony full-stack framework", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/framework-bundle/tree/v6.4.12" + "source": "https://github.com/symfony/framework-bundle/tree/v6.4.13" }, "funding": [ { @@ -9554,27 +9554,27 @@ "type": "tidelift" } ], - "time": "2024-09-20T13:34:56+00:00" + "time": "2024-10-25T15:07:50+00:00" }, { "name": "symfony/http-client", - "version": "v6.4.12", + "version": "v6.4.16", "source": { "type": "git", "url": "https://github.com/symfony/http-client.git", - "reference": "fbebfcce21084d3e91ea987ae5bdd8c71ff0fd56" + "reference": "60a113666fa67e598abace38e5f46a0954d8833d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-client/zipball/fbebfcce21084d3e91ea987ae5bdd8c71ff0fd56", - "reference": "fbebfcce21084d3e91ea987ae5bdd8c71ff0fd56", + "url": "https://api.github.com/repos/symfony/http-client/zipball/60a113666fa67e598abace38e5f46a0954d8833d", + "reference": "60a113666fa67e598abace38e5f46a0954d8833d", "shasum": "" }, "require": { "php": ">=8.1", "psr/log": "^1|^2|^3", "symfony/deprecation-contracts": "^2.5|^3", - "symfony/http-client-contracts": "^3.4.1", + "symfony/http-client-contracts": "~3.4.3|^3.5.1", "symfony/service-contracts": "^2.5|^3" }, "conflict": { @@ -9631,7 +9631,7 @@ "http" ], "support": { - "source": "https://github.com/symfony/http-client/tree/v6.4.12" + "source": "https://github.com/symfony/http-client/tree/v6.4.16" }, "funding": [ { @@ -9647,20 +9647,20 @@ "type": "tidelift" } ], - "time": "2024-09-20T08:21:33+00:00" + "time": "2024-11-27T11:52:33+00:00" }, { "name": "symfony/http-client-contracts", - "version": "v3.5.0", + "version": "v3.5.1", "source": { "type": "git", "url": "https://github.com/symfony/http-client-contracts.git", - "reference": "20414d96f391677bf80078aa55baece78b82647d" + "reference": "c2f3ad828596624ca39ea40f83617ef51ca8bbf9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-client-contracts/zipball/20414d96f391677bf80078aa55baece78b82647d", - "reference": "20414d96f391677bf80078aa55baece78b82647d", + "url": "https://api.github.com/repos/symfony/http-client-contracts/zipball/c2f3ad828596624ca39ea40f83617ef51ca8bbf9", + "reference": "c2f3ad828596624ca39ea40f83617ef51ca8bbf9", "shasum": "" }, "require": { @@ -9709,7 +9709,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/http-client-contracts/tree/v3.5.0" + "source": "https://github.com/symfony/http-client-contracts/tree/v3.5.1" }, "funding": [ { @@ -9725,20 +9725,20 @@ "type": "tidelift" } ], - "time": "2024-04-18T09:32:20+00:00" + "time": "2024-11-25T12:02:18+00:00" }, { "name": "symfony/http-foundation", - "version": "v6.4.12", + "version": "v6.4.16", "source": { "type": "git", "url": "https://github.com/symfony/http-foundation.git", - "reference": "133ac043875f59c26c55e79cf074562127cce4d2" + "reference": "431771b7a6f662f1575b3cfc8fd7617aa9864d57" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/133ac043875f59c26c55e79cf074562127cce4d2", - "reference": "133ac043875f59c26c55e79cf074562127cce4d2", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/431771b7a6f662f1575b3cfc8fd7617aa9864d57", + "reference": "431771b7a6f662f1575b3cfc8fd7617aa9864d57", "shasum": "" }, "require": { @@ -9748,12 +9748,12 @@ "symfony/polyfill-php83": "^1.27" }, "conflict": { - "symfony/cache": "<6.3" + "symfony/cache": "<6.4.12|>=7.0,<7.1.5" }, "require-dev": { "doctrine/dbal": "^2.13.1|^3|^4", "predis/predis": "^1.1|^2.0", - "symfony/cache": "^6.3|^7.0", + "symfony/cache": "^6.4.12|^7.1.5", "symfony/dependency-injection": "^5.4|^6.0|^7.0", "symfony/expression-language": "^5.4|^6.0|^7.0", "symfony/http-kernel": "^5.4.12|^6.0.12|^6.1.4|^7.0", @@ -9786,7 +9786,7 @@ "description": "Defines an object-oriented layer for the HTTP specification", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/http-foundation/tree/v6.4.12" + "source": "https://github.com/symfony/http-foundation/tree/v6.4.16" }, "funding": [ { @@ -9802,20 +9802,20 @@ "type": "tidelift" } ], - "time": "2024-09-20T08:18:25+00:00" + "time": "2024-11-13T18:58:10+00:00" }, { "name": "symfony/http-kernel", - "version": "v6.4.12", + "version": "v6.4.16", "source": { "type": "git", "url": "https://github.com/symfony/http-kernel.git", - "reference": "96df83d51b5f78804f70c093b97310794fd6257b" + "reference": "8838b5b21d807923b893ccbfc2cbeda0f1bc00f0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/96df83d51b5f78804f70c093b97310794fd6257b", - "reference": "96df83d51b5f78804f70c093b97310794fd6257b", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/8838b5b21d807923b893ccbfc2cbeda0f1bc00f0", + "reference": "8838b5b21d807923b893ccbfc2cbeda0f1bc00f0", "shasum": "" }, "require": { @@ -9900,7 +9900,7 @@ "description": "Provides a structured process for converting a Request into a Response", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/http-kernel/tree/v6.4.12" + "source": "https://github.com/symfony/http-kernel/tree/v6.4.16" }, "funding": [ { @@ -9916,20 +9916,20 @@ "type": "tidelift" } ], - "time": "2024-09-21T06:02:57+00:00" + "time": "2024-11-27T12:49:36+00:00" }, { "name": "symfony/intl", - "version": "v6.4.12", + "version": "v6.4.15", "source": { "type": "git", "url": "https://github.com/symfony/intl.git", - "reference": "5f64d7218f4078492ca59da94747d7474a2a52c4" + "reference": "b1d5e8d82615b60f229216edfee0b59e2ef66da6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/intl/zipball/5f64d7218f4078492ca59da94747d7474a2a52c4", - "reference": "5f64d7218f4078492ca59da94747d7474a2a52c4", + "url": "https://api.github.com/repos/symfony/intl/zipball/b1d5e8d82615b60f229216edfee0b59e2ef66da6", + "reference": "b1d5e8d82615b60f229216edfee0b59e2ef66da6", "shasum": "" }, "require": { @@ -9983,7 +9983,7 @@ "localization" ], "support": { - "source": "https://github.com/symfony/intl/tree/v6.4.12" + "source": "https://github.com/symfony/intl/tree/v6.4.15" }, "funding": [ { @@ -9999,20 +9999,99 @@ "type": "tidelift" } ], - "time": "2024-09-20T08:16:53+00:00" + "time": "2024-11-08T15:28:48+00:00" }, { - "name": "symfony/mailer", - "version": "v6.4.12", + "name": "symfony/lock", + "version": "v6.4.13", "source": { "type": "git", - "url": "https://github.com/symfony/mailer.git", - "reference": "b6a25408c569ae2366b3f663a4edad19420a9c26" + "url": "https://github.com/symfony/lock.git", + "reference": "a69c3dd151ab7e14925f119164cfdf65d55392a4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mailer/zipball/b6a25408c569ae2366b3f663a4edad19420a9c26", - "reference": "b6a25408c569ae2366b3f663a4edad19420a9c26", + "url": "https://api.github.com/repos/symfony/lock/zipball/a69c3dd151ab7e14925f119164cfdf65d55392a4", + "reference": "a69c3dd151ab7e14925f119164cfdf65d55392a4", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "psr/log": "^1|^2|^3", + "symfony/deprecation-contracts": "^2.5|^3" + }, + "conflict": { + "doctrine/dbal": "<2.13", + "symfony/cache": "<6.2" + }, + "require-dev": { + "doctrine/dbal": "^2.13|^3|^4", + "predis/predis": "^1.1|^2.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Lock\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jérémy Derussé", + "email": "jeremy@derusse.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Creates and manages locks, a mechanism to provide exclusive access to a shared resource", + "homepage": "https://symfony.com", + "keywords": [ + "cas", + "flock", + "locking", + "mutex", + "redlock", + "semaphore" + ], + "support": { + "source": "https://github.com/symfony/lock/tree/v6.4.13" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-10-25T15:19:46+00:00" + }, + { + "name": "symfony/mailer", + "version": "v6.4.13", + "source": { + "type": "git", + "url": "https://github.com/symfony/mailer.git", + "reference": "c2f7e0d8d7ac8fe25faccf5d8cac462805db2663" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/mailer/zipball/c2f7e0d8d7ac8fe25faccf5d8cac462805db2663", + "reference": "c2f7e0d8d7ac8fe25faccf5d8cac462805db2663", "shasum": "" }, "require": { @@ -10063,7 +10142,7 @@ "description": "Helps sending emails", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/mailer/tree/v6.4.12" + "source": "https://github.com/symfony/mailer/tree/v6.4.13" }, "funding": [ { @@ -10079,20 +10158,20 @@ "type": "tidelift" } ], - "time": "2024-09-08T12:30:05+00:00" + "time": "2024-09-25T14:18:03+00:00" }, { "name": "symfony/mime", - "version": "v6.4.12", + "version": "v6.4.13", "source": { "type": "git", "url": "https://github.com/symfony/mime.git", - "reference": "abe16ee7790b16aa525877419deb0f113953f0e1" + "reference": "1de1cf14d99b12c7ebbb850491ec6ae3ed468855" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mime/zipball/abe16ee7790b16aa525877419deb0f113953f0e1", - "reference": "abe16ee7790b16aa525877419deb0f113953f0e1", + "url": "https://api.github.com/repos/symfony/mime/zipball/1de1cf14d99b12c7ebbb850491ec6ae3ed468855", + "reference": "1de1cf14d99b12c7ebbb850491ec6ae3ed468855", "shasum": "" }, "require": { @@ -10148,7 +10227,7 @@ "mime-type" ], "support": { - "source": "https://github.com/symfony/mime/tree/v6.4.12" + "source": "https://github.com/symfony/mime/tree/v6.4.13" }, "funding": [ { @@ -10164,20 +10243,20 @@ "type": "tidelift" } ], - "time": "2024-09-20T08:18:25+00:00" + "time": "2024-10-25T15:07:50+00:00" }, { "name": "symfony/monolog-bridge", - "version": "v6.4.8", + "version": "v6.4.13", "source": { "type": "git", "url": "https://github.com/symfony/monolog-bridge.git", - "reference": "0fbee64913b1c595e7650a1919ba3edba8d49ea7" + "reference": "9d14621e59f22c2b6d030d92d37ffe5ae1e60452" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/monolog-bridge/zipball/0fbee64913b1c595e7650a1919ba3edba8d49ea7", - "reference": "0fbee64913b1c595e7650a1919ba3edba8d49ea7", + "url": "https://api.github.com/repos/symfony/monolog-bridge/zipball/9d14621e59f22c2b6d030d92d37ffe5ae1e60452", + "reference": "9d14621e59f22c2b6d030d92d37ffe5ae1e60452", "shasum": "" }, "require": { @@ -10227,7 +10306,7 @@ "description": "Provides integration for Monolog with various Symfony components", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/monolog-bridge/tree/v6.4.8" + "source": "https://github.com/symfony/monolog-bridge/tree/v6.4.13" }, "funding": [ { @@ -10243,7 +10322,7 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:49:08+00:00" + "time": "2024-10-14T08:49:08+00:00" }, { "name": "symfony/monolog-bundle", @@ -10328,16 +10407,16 @@ }, { "name": "symfony/notifier", - "version": "v6.4.12", + "version": "v6.4.13", "source": { "type": "git", "url": "https://github.com/symfony/notifier.git", - "reference": "3db8454f16470d752ff46c6e5d87400c9f7423ab" + "reference": "c46321b53391088861bf627cd9e24873d216cf00" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/notifier/zipball/3db8454f16470d752ff46c6e5d87400c9f7423ab", - "reference": "3db8454f16470d752ff46c6e5d87400c9f7423ab", + "url": "https://api.github.com/repos/symfony/notifier/zipball/c46321b53391088861bf627cd9e24873d216cf00", + "reference": "c46321b53391088861bf627cd9e24873d216cf00", "shasum": "" }, "require": { @@ -10386,7 +10465,7 @@ "notifier" ], "support": { - "source": "https://github.com/symfony/notifier/tree/v6.4.12" + "source": "https://github.com/symfony/notifier/tree/v6.4.13" }, "funding": [ { @@ -10402,20 +10481,20 @@ "type": "tidelift" } ], - "time": "2024-09-08T12:30:05+00:00" + "time": "2024-09-25T14:18:03+00:00" }, { "name": "symfony/options-resolver", - "version": "v6.4.8", + "version": "v6.4.16", "source": { "type": "git", "url": "https://github.com/symfony/options-resolver.git", - "reference": "22ab9e9101ab18de37839074f8a1197f55590c1b" + "reference": "368128ad168f20e22c32159b9f761e456cec0c78" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/options-resolver/zipball/22ab9e9101ab18de37839074f8a1197f55590c1b", - "reference": "22ab9e9101ab18de37839074f8a1197f55590c1b", + "url": "https://api.github.com/repos/symfony/options-resolver/zipball/368128ad168f20e22c32159b9f761e456cec0c78", + "reference": "368128ad168f20e22c32159b9f761e456cec0c78", "shasum": "" }, "require": { @@ -10453,7 +10532,7 @@ "options" ], "support": { - "source": "https://github.com/symfony/options-resolver/tree/v6.4.8" + "source": "https://github.com/symfony/options-resolver/tree/v6.4.16" }, "funding": [ { @@ -10469,20 +10548,20 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:49:08+00:00" + "time": "2024-11-20T10:57:02+00:00" }, { "name": "symfony/password-hasher", - "version": "v6.4.8", + "version": "v6.4.13", "source": { "type": "git", "url": "https://github.com/symfony/password-hasher.git", - "reference": "90ebbe946e5d64a5fad9ac9427e335045cf2bd31" + "reference": "e97a1b31f60b8bdfc1fdedab4398538da9441d47" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/password-hasher/zipball/90ebbe946e5d64a5fad9ac9427e335045cf2bd31", - "reference": "90ebbe946e5d64a5fad9ac9427e335045cf2bd31", + "url": "https://api.github.com/repos/symfony/password-hasher/zipball/e97a1b31f60b8bdfc1fdedab4398538da9441d47", + "reference": "e97a1b31f60b8bdfc1fdedab4398538da9441d47", "shasum": "" }, "require": { @@ -10525,7 +10604,7 @@ "password" ], "support": { - "source": "https://github.com/symfony/password-hasher/tree/v6.4.8" + "source": "https://github.com/symfony/password-hasher/tree/v6.4.13" }, "funding": [ { @@ -10541,7 +10620,7 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:49:08+00:00" + "time": "2024-09-25T14:18:03+00:00" }, { "name": "symfony/polyfill-intl-grapheme", @@ -11248,16 +11327,16 @@ }, { "name": "symfony/process", - "version": "v6.4.12", + "version": "v6.4.15", "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "3f94e5f13ff58df371a7ead461b6e8068900fbb3" + "reference": "3cb242f059c14ae08591c5c4087d1fe443564392" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/3f94e5f13ff58df371a7ead461b6e8068900fbb3", - "reference": "3f94e5f13ff58df371a7ead461b6e8068900fbb3", + "url": "https://api.github.com/repos/symfony/process/zipball/3cb242f059c14ae08591c5c4087d1fe443564392", + "reference": "3cb242f059c14ae08591c5c4087d1fe443564392", "shasum": "" }, "require": { @@ -11289,7 +11368,7 @@ "description": "Executes commands in sub-processes", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/process/tree/v6.4.12" + "source": "https://github.com/symfony/process/tree/v6.4.15" }, "funding": [ { @@ -11305,7 +11384,7 @@ "type": "tidelift" } ], - "time": "2024-09-17T12:47:12+00:00" + "time": "2024-11-06T14:19:14+00:00" }, { "name": "symfony/property-access", @@ -11386,16 +11465,16 @@ }, { "name": "symfony/property-info", - "version": "v6.4.10", + "version": "v6.4.16", "source": { "type": "git", "url": "https://github.com/symfony/property-info.git", - "reference": "edaea9dcc723cb4a0ab6a00f7d6f8c07c0d8ff77" + "reference": "e4782ec1c2b6896e820896357f6a3d02249e63eb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/property-info/zipball/edaea9dcc723cb4a0ab6a00f7d6f8c07c0d8ff77", - "reference": "edaea9dcc723cb4a0ab6a00f7d6f8c07c0d8ff77", + "url": "https://api.github.com/repos/symfony/property-info/zipball/e4782ec1c2b6896e820896357f6a3d02249e63eb", + "reference": "e4782ec1c2b6896e820896357f6a3d02249e63eb", "shasum": "" }, "require": { @@ -11403,17 +11482,18 @@ "symfony/string": "^5.4|^6.0|^7.0" }, "conflict": { + "doctrine/annotations": "<1.12", "phpdocumentor/reflection-docblock": "<5.2", "phpdocumentor/type-resolver": "<1.5.1", - "symfony/dependency-injection": "<5.4", - "symfony/serializer": "<6.4" + "symfony/dependency-injection": "<5.4|>=6.0,<6.4" }, "require-dev": { + "doctrine/annotations": "^1.12|^2", "phpdocumentor/reflection-docblock": "^5.2", - "phpstan/phpdoc-parser": "^1.0", + "phpstan/phpdoc-parser": "^1.0|^2.0", "symfony/cache": "^5.4|^6.0|^7.0", "symfony/dependency-injection": "^5.4|^6.0|^7.0", - "symfony/serializer": "^6.4|^7.0" + "symfony/serializer": "^5.4|^6.4|^7.0" }, "type": "library", "autoload": { @@ -11449,7 +11529,7 @@ "validator" ], "support": { - "source": "https://github.com/symfony/property-info/tree/v6.4.10" + "source": "https://github.com/symfony/property-info/tree/v6.4.16" }, "funding": [ { @@ -11465,20 +11545,20 @@ "type": "tidelift" } ], - "time": "2024-07-26T07:32:07+00:00" + "time": "2024-11-27T10:18:02+00:00" }, { "name": "symfony/proxy-manager-bridge", - "version": "v6.4.8", + "version": "v6.4.13", "source": { "type": "git", "url": "https://github.com/symfony/proxy-manager-bridge.git", - "reference": "b8119e0b248ef0711c25cd09acc729102122621c" + "reference": "8932b572e147e80fb498045c580eb14215197529" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/proxy-manager-bridge/zipball/b8119e0b248ef0711c25cd09acc729102122621c", - "reference": "b8119e0b248ef0711c25cd09acc729102122621c", + "url": "https://api.github.com/repos/symfony/proxy-manager-bridge/zipball/8932b572e147e80fb498045c580eb14215197529", + "reference": "8932b572e147e80fb498045c580eb14215197529", "shasum": "" }, "require": { @@ -11516,7 +11596,7 @@ "description": "Provides integration for ProxyManager with various Symfony components", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/proxy-manager-bridge/tree/v6.4.8" + "source": "https://github.com/symfony/proxy-manager-bridge/tree/v6.4.13" }, "funding": [ { @@ -11532,20 +11612,20 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:49:08+00:00" + "time": "2024-09-25T14:18:03+00:00" }, { "name": "symfony/routing", - "version": "v6.4.12", + "version": "v6.4.16", "source": { "type": "git", "url": "https://github.com/symfony/routing.git", - "reference": "a7c8036bd159486228dc9be3e846a00a0dda9f9f" + "reference": "91e02e606b4b705c2f4fb42f7e7708b7923a3220" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/routing/zipball/a7c8036bd159486228dc9be3e846a00a0dda9f9f", - "reference": "a7c8036bd159486228dc9be3e846a00a0dda9f9f", + "url": "https://api.github.com/repos/symfony/routing/zipball/91e02e606b4b705c2f4fb42f7e7708b7923a3220", + "reference": "91e02e606b4b705c2f4fb42f7e7708b7923a3220", "shasum": "" }, "require": { @@ -11599,7 +11679,7 @@ "url" ], "support": { - "source": "https://github.com/symfony/routing/tree/v6.4.12" + "source": "https://github.com/symfony/routing/tree/v6.4.16" }, "funding": [ { @@ -11615,20 +11695,20 @@ "type": "tidelift" } ], - "time": "2024-09-20T08:32:26+00:00" + "time": "2024-11-13T15:31:34+00:00" }, { "name": "symfony/runtime", - "version": "v6.4.12", + "version": "v6.4.14", "source": { "type": "git", "url": "https://github.com/symfony/runtime.git", - "reference": "bfe32a1adf41da4dd7f6b939a039779d7af5497f" + "reference": "4facd4174f45cd37c65860403412b67c7381136a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/runtime/zipball/bfe32a1adf41da4dd7f6b939a039779d7af5497f", - "reference": "bfe32a1adf41da4dd7f6b939a039779d7af5497f", + "url": "https://api.github.com/repos/symfony/runtime/zipball/4facd4174f45cd37c65860403412b67c7381136a", + "reference": "4facd4174f45cd37c65860403412b67c7381136a", "shasum": "" }, "require": { @@ -11678,7 +11758,7 @@ "runtime" ], "support": { - "source": "https://github.com/symfony/runtime/tree/v6.4.12" + "source": "https://github.com/symfony/runtime/tree/v6.4.14" }, "funding": [ { @@ -11694,20 +11774,20 @@ "type": "tidelift" } ], - "time": "2024-09-19T13:29:10+00:00" + "time": "2024-11-05T16:39:55+00:00" }, { "name": "symfony/security-bundle", - "version": "v6.4.11", + "version": "v6.4.13", "source": { "type": "git", "url": "https://github.com/symfony/security-bundle.git", - "reference": "620be16fceded671823ce6332d06f44bb327096d" + "reference": "181d1fcf5f88ef8212ed7f6434e5ff51c9d7dff3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/security-bundle/zipball/620be16fceded671823ce6332d06f44bb327096d", - "reference": "620be16fceded671823ce6332d06f44bb327096d", + "url": "https://api.github.com/repos/symfony/security-bundle/zipball/181d1fcf5f88ef8212ed7f6434e5ff51c9d7dff3", + "reference": "181d1fcf5f88ef8212ed7f6434e5ff51c9d7dff3", "shasum": "" }, "require": { @@ -11790,7 +11870,7 @@ "description": "Provides a tight integration of the Security component into the Symfony full-stack framework", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/security-bundle/tree/v6.4.11" + "source": "https://github.com/symfony/security-bundle/tree/v6.4.13" }, "funding": [ { @@ -11806,20 +11886,20 @@ "type": "tidelift" } ], - "time": "2024-08-20T11:22:16+00:00" + "time": "2024-09-25T14:18:03+00:00" }, { "name": "symfony/security-core", - "version": "v6.4.12", + "version": "v6.4.16", "source": { "type": "git", "url": "https://github.com/symfony/security-core.git", - "reference": "8c7e52155262b3ef6b7885f6d9bd90fb24eaa66f" + "reference": "19cdb7de86e556202ab16e0cffd1a97348231bc0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/security-core/zipball/8c7e52155262b3ef6b7885f6d9bd90fb24eaa66f", - "reference": "8c7e52155262b3ef6b7885f6d9bd90fb24eaa66f", + "url": "https://api.github.com/repos/symfony/security-core/zipball/19cdb7de86e556202ab16e0cffd1a97348231bc0", + "reference": "19cdb7de86e556202ab16e0cffd1a97348231bc0", "shasum": "" }, "require": { @@ -11876,7 +11956,7 @@ "description": "Symfony Security Component - Core Library", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/security-core/tree/v6.4.12" + "source": "https://github.com/symfony/security-core/tree/v6.4.16" }, "funding": [ { @@ -11892,20 +11972,20 @@ "type": "tidelift" } ], - "time": "2024-09-20T08:21:33+00:00" + "time": "2024-11-27T09:48:51+00:00" }, { "name": "symfony/security-csrf", - "version": "v6.4.8", + "version": "v6.4.13", "source": { "type": "git", "url": "https://github.com/symfony/security-csrf.git", - "reference": "f46ab02b76311087873257071559edcaf6d7ab99" + "reference": "c34421b7d34efbaef5d611ab2e646a0ec464ffe3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/security-csrf/zipball/f46ab02b76311087873257071559edcaf6d7ab99", - "reference": "f46ab02b76311087873257071559edcaf6d7ab99", + "url": "https://api.github.com/repos/symfony/security-csrf/zipball/c34421b7d34efbaef5d611ab2e646a0ec464ffe3", + "reference": "c34421b7d34efbaef5d611ab2e646a0ec464ffe3", "shasum": "" }, "require": { @@ -11944,7 +12024,7 @@ "description": "Symfony Security Component - CSRF Library", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/security-csrf/tree/v6.4.8" + "source": "https://github.com/symfony/security-csrf/tree/v6.4.13" }, "funding": [ { @@ -11960,20 +12040,20 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:49:08+00:00" + "time": "2024-09-25T14:18:03+00:00" }, { "name": "symfony/security-http", - "version": "v6.4.12", + "version": "v6.4.15", "source": { "type": "git", "url": "https://github.com/symfony/security-http.git", - "reference": "f6df97af71943cda726dc852335204eac02a716b" + "reference": "ded1e078f952e686b058d9eac98e497bea47b308" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/security-http/zipball/f6df97af71943cda726dc852335204eac02a716b", - "reference": "f6df97af71943cda726dc852335204eac02a716b", + "url": "https://api.github.com/repos/symfony/security-http/zipball/ded1e078f952e686b058d9eac98e497bea47b308", + "reference": "ded1e078f952e686b058d9eac98e497bea47b308", "shasum": "" }, "require": { @@ -12032,7 +12112,7 @@ "description": "Symfony Security Component - HTTP Integration", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/security-http/tree/v6.4.12" + "source": "https://github.com/symfony/security-http/tree/v6.4.15" }, "funding": [ { @@ -12048,20 +12128,20 @@ "type": "tidelift" } ], - "time": "2024-09-20T08:18:25+00:00" + "time": "2024-11-13T13:40:18+00:00" }, { "name": "symfony/serializer", - "version": "v6.4.12", + "version": "v6.4.15", "source": { "type": "git", "url": "https://github.com/symfony/serializer.git", - "reference": "10ae9c1b90f4809ccb7277cc8fe8d80b3af4412c" + "reference": "9d862d66198f3c2e30404228629ef4c18d5d608e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/serializer/zipball/10ae9c1b90f4809ccb7277cc8fe8d80b3af4412c", - "reference": "10ae9c1b90f4809ccb7277cc8fe8d80b3af4412c", + "url": "https://api.github.com/repos/symfony/serializer/zipball/9d862d66198f3c2e30404228629ef4c18d5d608e", + "reference": "9d862d66198f3c2e30404228629ef4c18d5d608e", "shasum": "" }, "require": { @@ -12130,7 +12210,7 @@ "description": "Handles serializing and deserializing data structures, including object graphs, into array structures or other formats like XML and JSON.", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/serializer/tree/v6.4.12" + "source": "https://github.com/symfony/serializer/tree/v6.4.15" }, "funding": [ { @@ -12146,20 +12226,20 @@ "type": "tidelift" } ], - "time": "2024-09-20T08:15:52+00:00" + "time": "2024-10-23T13:25:59+00:00" }, { "name": "symfony/service-contracts", - "version": "v3.5.0", + "version": "v3.5.1", "source": { "type": "git", "url": "https://github.com/symfony/service-contracts.git", - "reference": "bd1d9e59a81d8fa4acdcea3f617c581f7475a80f" + "reference": "e53260aabf78fb3d63f8d79d69ece59f80d5eda0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/service-contracts/zipball/bd1d9e59a81d8fa4acdcea3f617c581f7475a80f", - "reference": "bd1d9e59a81d8fa4acdcea3f617c581f7475a80f", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/e53260aabf78fb3d63f8d79d69ece59f80d5eda0", + "reference": "e53260aabf78fb3d63f8d79d69ece59f80d5eda0", "shasum": "" }, "require": { @@ -12213,7 +12293,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/service-contracts/tree/v3.5.0" + "source": "https://github.com/symfony/service-contracts/tree/v3.5.1" }, "funding": [ { @@ -12229,20 +12309,20 @@ "type": "tidelift" } ], - "time": "2024-04-18T09:32:20+00:00" + "time": "2024-09-25T14:20:29+00:00" }, { "name": "symfony/stimulus-bundle", - "version": "v2.19.0", + "version": "v2.22.0", "source": { "type": "git", "url": "https://github.com/symfony/stimulus-bundle.git", - "reference": "5e2e1aff3e7cff2875e2f901437543fda9ca9910" + "reference": "2e840a3b12f06b33441cc3eb8907f51b806a7e4b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/stimulus-bundle/zipball/5e2e1aff3e7cff2875e2f901437543fda9ca9910", - "reference": "5e2e1aff3e7cff2875e2f901437543fda9ca9910", + "url": "https://api.github.com/repos/symfony/stimulus-bundle/zipball/2e840a3b12f06b33441cc3eb8907f51b806a7e4b", + "reference": "2e840a3b12f06b33441cc3eb8907f51b806a7e4b", "shasum": "" }, "require": { @@ -12282,7 +12362,7 @@ "symfony-ux" ], "support": { - "source": "https://github.com/symfony/stimulus-bundle/tree/v2.19.0" + "source": "https://github.com/symfony/stimulus-bundle/tree/v2.22.0" }, "funding": [ { @@ -12298,20 +12378,20 @@ "type": "tidelift" } ], - "time": "2024-07-30T19:26:23+00:00" + "time": "2024-11-20T07:57:38+00:00" }, { "name": "symfony/string", - "version": "v6.4.12", + "version": "v6.4.15", "source": { "type": "git", "url": "https://github.com/symfony/string.git", - "reference": "f8a1ccebd0997e16112dfecfd74220b78e5b284b" + "reference": "73a5e66ea2e1677c98d4449177c5a9cf9d8b4c6f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/f8a1ccebd0997e16112dfecfd74220b78e5b284b", - "reference": "f8a1ccebd0997e16112dfecfd74220b78e5b284b", + "url": "https://api.github.com/repos/symfony/string/zipball/73a5e66ea2e1677c98d4449177c5a9cf9d8b4c6f", + "reference": "73a5e66ea2e1677c98d4449177c5a9cf9d8b4c6f", "shasum": "" }, "require": { @@ -12368,7 +12448,7 @@ "utf8" ], "support": { - "source": "https://github.com/symfony/string/tree/v6.4.12" + "source": "https://github.com/symfony/string/tree/v6.4.15" }, "funding": [ { @@ -12384,20 +12464,20 @@ "type": "tidelift" } ], - "time": "2024-09-20T08:15:52+00:00" + "time": "2024-11-13T13:31:12+00:00" }, { "name": "symfony/templating", - "version": "v6.4.8", + "version": "v6.4.13", "source": { "type": "git", "url": "https://github.com/symfony/templating.git", - "reference": "e0a572c7dfd8fc2cfb488909e2ab0f5daeb2a8b9" + "reference": "e27b6ea8d737cb0dfd41b2f5f055c9ed677afa33" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/templating/zipball/e0a572c7dfd8fc2cfb488909e2ab0f5daeb2a8b9", - "reference": "e0a572c7dfd8fc2cfb488909e2ab0f5daeb2a8b9", + "url": "https://api.github.com/repos/symfony/templating/zipball/e27b6ea8d737cb0dfd41b2f5f055c9ed677afa33", + "reference": "e27b6ea8d737cb0dfd41b2f5f055c9ed677afa33", "shasum": "" }, "require": { @@ -12434,7 +12514,7 @@ "description": "Provides all the tools needed to build any kind of template system", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/templating/tree/v6.4.8" + "source": "https://github.com/symfony/templating/tree/v6.4.13" }, "funding": [ { @@ -12450,20 +12530,20 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:49:08+00:00" + "time": "2024-10-25T15:07:50+00:00" }, { "name": "symfony/translation", - "version": "v6.4.12", + "version": "v6.4.13", "source": { "type": "git", "url": "https://github.com/symfony/translation.git", - "reference": "cf8360b8352b086be620fae8342c4d96e391a489" + "reference": "bee9bfabfa8b4045a66bf82520e492cddbaffa66" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/cf8360b8352b086be620fae8342c4d96e391a489", - "reference": "cf8360b8352b086be620fae8342c4d96e391a489", + "url": "https://api.github.com/repos/symfony/translation/zipball/bee9bfabfa8b4045a66bf82520e492cddbaffa66", + "reference": "bee9bfabfa8b4045a66bf82520e492cddbaffa66", "shasum": "" }, "require": { @@ -12529,7 +12609,7 @@ "description": "Provides tools to internationalize your application", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/translation/tree/v6.4.12" + "source": "https://github.com/symfony/translation/tree/v6.4.13" }, "funding": [ { @@ -12545,20 +12625,20 @@ "type": "tidelift" } ], - "time": "2024-09-16T06:02:54+00:00" + "time": "2024-09-27T18:14:25+00:00" }, { "name": "symfony/translation-contracts", - "version": "v3.5.0", + "version": "v3.5.1", "source": { "type": "git", "url": "https://github.com/symfony/translation-contracts.git", - "reference": "b9d2189887bb6b2e0367a9fc7136c5239ab9b05a" + "reference": "4667ff3bd513750603a09c8dedbea942487fb07c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/b9d2189887bb6b2e0367a9fc7136c5239ab9b05a", - "reference": "b9d2189887bb6b2e0367a9fc7136c5239ab9b05a", + "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/4667ff3bd513750603a09c8dedbea942487fb07c", + "reference": "4667ff3bd513750603a09c8dedbea942487fb07c", "shasum": "" }, "require": { @@ -12607,7 +12687,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/translation-contracts/tree/v3.5.0" + "source": "https://github.com/symfony/translation-contracts/tree/v3.5.1" }, "funding": [ { @@ -12623,20 +12703,20 @@ "type": "tidelift" } ], - "time": "2024-04-18T09:32:20+00:00" + "time": "2024-09-25T14:20:29+00:00" }, { "name": "symfony/twig-bridge", - "version": "v6.4.12", + "version": "v6.4.16", "source": { "type": "git", "url": "https://github.com/symfony/twig-bridge.git", - "reference": "09c0df13f822a1b80c5972ca1aa9eeb1288e1194" + "reference": "32ec012ed4f6426441a66014471bdb26674744be" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/twig-bridge/zipball/09c0df13f822a1b80c5972ca1aa9eeb1288e1194", - "reference": "09c0df13f822a1b80c5972ca1aa9eeb1288e1194", + "url": "https://api.github.com/repos/symfony/twig-bridge/zipball/32ec012ed4f6426441a66014471bdb26674744be", + "reference": "32ec012ed4f6426441a66014471bdb26674744be", "shasum": "" }, "require": { @@ -12716,7 +12796,7 @@ "description": "Provides integration for Twig with various Symfony components", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/twig-bridge/tree/v6.4.12" + "source": "https://github.com/symfony/twig-bridge/tree/v6.4.16" }, "funding": [ { @@ -12732,20 +12812,20 @@ "type": "tidelift" } ], - "time": "2024-09-15T06:35:36+00:00" + "time": "2024-11-25T11:59:11+00:00" }, { "name": "symfony/twig-bundle", - "version": "v6.4.12", + "version": "v6.4.13", "source": { "type": "git", "url": "https://github.com/symfony/twig-bundle.git", - "reference": "4e63369647e3924e110b37337c6a58aac3086ad4" + "reference": "c3beeb5336aba1ea03c37e526968c2fde3ef25c4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/twig-bundle/zipball/4e63369647e3924e110b37337c6a58aac3086ad4", - "reference": "4e63369647e3924e110b37337c6a58aac3086ad4", + "url": "https://api.github.com/repos/symfony/twig-bundle/zipball/c3beeb5336aba1ea03c37e526968c2fde3ef25c4", + "reference": "c3beeb5336aba1ea03c37e526968c2fde3ef25c4", "shasum": "" }, "require": { @@ -12800,7 +12880,7 @@ "description": "Provides a tight integration of Twig into the Symfony full-stack framework", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/twig-bundle/tree/v6.4.12" + "source": "https://github.com/symfony/twig-bundle/tree/v6.4.13" }, "funding": [ { @@ -12816,20 +12896,20 @@ "type": "tidelift" } ], - "time": "2024-09-08T12:30:05+00:00" + "time": "2024-09-25T14:18:03+00:00" }, { "name": "symfony/ux-autocomplete", - "version": "v2.19.2", + "version": "v2.22.0", "source": { "type": "git", "url": "https://github.com/symfony/ux-autocomplete.git", - "reference": "ef15862c55e15a2225587e8b226df21561d36c7c" + "reference": "751271204eb309f918dd2ae9caaf3189618442ec" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/ux-autocomplete/zipball/ef15862c55e15a2225587e8b226df21561d36c7c", - "reference": "ef15862c55e15a2225587e8b226df21561d36c7c", + "url": "https://api.github.com/repos/symfony/ux-autocomplete/zipball/751271204eb309f918dd2ae9caaf3189618442ec", + "reference": "751271204eb309f918dd2ae9caaf3189618442ec", "shasum": "" }, "require": { @@ -12838,8 +12918,7 @@ "symfony/deprecation-contracts": "^2.5|^3", "symfony/http-foundation": "^6.3|^7.0", "symfony/http-kernel": "^6.3|^7.0", - "symfony/property-access": "^6.3|^7.0", - "symfony/string": "^6.3|^7.0" + "symfony/property-access": "^6.3|^7.0" }, "conflict": { "doctrine/orm": "2.9.0 || 2.9.1" @@ -12857,7 +12936,6 @@ "symfony/phpunit-bridge": "^6.3|^7.0", "symfony/process": "^6.3|^7.0", "symfony/security-bundle": "^6.3|^7.0", - "symfony/security-csrf": "^6.3|^7.0", "symfony/twig-bundle": "^6.3|^7.0", "symfony/uid": "^6.3|^7.0", "twig/twig": "^2.14.7|^3.0.4", @@ -12867,8 +12945,8 @@ "type": "symfony-bundle", "extra": { "thanks": { - "name": "symfony/ux", - "url": "https://github.com/symfony/ux" + "url": "https://github.com/symfony/ux", + "name": "symfony/ux" } }, "autoload": { @@ -12892,7 +12970,7 @@ "symfony-ux" ], "support": { - "source": "https://github.com/symfony/ux-autocomplete/tree/v2.19.2" + "source": "https://github.com/symfony/ux-autocomplete/tree/v2.22.0" }, "funding": [ { @@ -12908,20 +12986,20 @@ "type": "tidelift" } ], - "time": "2024-08-13T14:54:57+00:00" + "time": "2024-11-28T07:45:46+00:00" }, { "name": "symfony/ux-chartjs", - "version": "v2.19.3", + "version": "v2.22.0", "source": { "type": "git", "url": "https://github.com/symfony/ux-chartjs.git", - "reference": "a16c8272e8e9d362c0f3b4d70742747e26d66147" + "reference": "32476b05eb1bd76dc049a2747cf398e76a9a44a5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/ux-chartjs/zipball/a16c8272e8e9d362c0f3b4d70742747e26d66147", - "reference": "a16c8272e8e9d362c0f3b4d70742747e26d66147", + "url": "https://api.github.com/repos/symfony/ux-chartjs/zipball/32476b05eb1bd76dc049a2747cf398e76a9a44a5", + "reference": "32476b05eb1bd76dc049a2747cf398e76a9a44a5", "shasum": "" }, "require": { @@ -12943,8 +13021,8 @@ "type": "symfony-bundle", "extra": { "thanks": { - "name": "symfony/ux", - "url": "https://github.com/symfony/ux" + "url": "https://github.com/symfony/ux", + "name": "symfony/ux" } }, "autoload": { @@ -12972,7 +13050,7 @@ "symfony-ux" ], "support": { - "source": "https://github.com/symfony/ux-chartjs/tree/v2.19.3" + "source": "https://github.com/symfony/ux-chartjs/tree/v2.22.0" }, "funding": [ { @@ -12988,24 +13066,25 @@ "type": "tidelift" } ], - "time": "2024-08-14T04:55:38+00:00" + "time": "2024-11-20T07:57:38+00:00" }, { "name": "symfony/ux-live-component", - "version": "v2.19.2", + "version": "v2.22.0", "source": { "type": "git", "url": "https://github.com/symfony/ux-live-component.git", - "reference": "9b292543eed8ae0d760d7f5e5397e91e632f2cf5" + "reference": "2df6a25f25788864e65cb8812d85e14ef80b6b44" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/ux-live-component/zipball/9b292543eed8ae0d760d7f5e5397e91e632f2cf5", - "reference": "9b292543eed8ae0d760d7f5e5397e91e632f2cf5", + "url": "https://api.github.com/repos/symfony/ux-live-component/zipball/2df6a25f25788864e65cb8812d85e14ef80b6b44", + "reference": "2df6a25f25788864e65cb8812d85e14ef80b6b44", "shasum": "" }, "require": { "php": ">=8.1", + "symfony/deprecation-contracts": "^2.5|^3.0", "symfony/property-access": "^5.4.5|^6.0|^7.0", "symfony/stimulus-bundle": "^2.9", "symfony/ux-twig-component": "^2.8", @@ -13033,13 +13112,13 @@ "symfony/twig-bundle": "^5.4|^6.0|^7.0", "symfony/validator": "^5.4|^6.0|^7.0", "zenstruck/browser": "^1.2.0", - "zenstruck/foundry": "1.37.*" + "zenstruck/foundry": "^2.0" }, "type": "symfony-bundle", "extra": { "thanks": { - "name": "symfony/ux", - "url": "https://github.com/symfony/ux" + "url": "https://github.com/symfony/ux", + "name": "symfony/ux" } }, "autoload": { @@ -13065,7 +13144,7 @@ "twig" ], "support": { - "source": "https://github.com/symfony/ux-live-component/tree/v2.19.2" + "source": "https://github.com/symfony/ux-live-component/tree/v2.22.0" }, "funding": [ { @@ -13081,20 +13160,20 @@ "type": "tidelift" } ], - "time": "2024-08-11T12:24:16+00:00" + "time": "2024-11-29T15:31:04+00:00" }, { "name": "symfony/ux-twig-component", - "version": "v2.19.2", + "version": "v2.22.0", "source": { "type": "git", "url": "https://github.com/symfony/ux-twig-component.git", - "reference": "7f8d4891e8e3a3303de11bfc7224b176a23a2c1c" + "reference": "03177a494399fbdcbb1f5f2aee017ccf8df581d9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/ux-twig-component/zipball/7f8d4891e8e3a3303de11bfc7224b176a23a2c1c", - "reference": "7f8d4891e8e3a3303de11bfc7224b176a23a2c1c", + "url": "https://api.github.com/repos/symfony/ux-twig-component/zipball/03177a494399fbdcbb1f5f2aee017ccf8df581d9", + "reference": "03177a494399fbdcbb1f5f2aee017ccf8df581d9", "shasum": "" }, "require": { @@ -13115,15 +13194,14 @@ "symfony/framework-bundle": "^5.4|^6.0|^7.0", "symfony/phpunit-bridge": "^6.0|^7.0", "symfony/stimulus-bundle": "^2.9.1", - "symfony/stopwatch": "^5.4|^6.0|^7.0", "symfony/twig-bundle": "^5.4|^6.0|^7.0", "symfony/webpack-encore-bundle": "^1.15" }, "type": "symfony-bundle", "extra": { "thanks": { - "name": "symfony/ux", - "url": "https://github.com/symfony/ux" + "url": "https://github.com/symfony/ux", + "name": "symfony/ux" } }, "autoload": { @@ -13149,7 +13227,7 @@ "twig" ], "support": { - "source": "https://github.com/symfony/ux-twig-component/tree/v2.19.2" + "source": "https://github.com/symfony/ux-twig-component/tree/v2.22.0" }, "funding": [ { @@ -13165,20 +13243,20 @@ "type": "tidelift" } ], - "time": "2024-08-13T03:00:01+00:00" + "time": "2024-11-23T06:59:34+00:00" }, { "name": "symfony/validator", - "version": "v6.4.12", + "version": "v6.4.16", "source": { "type": "git", "url": "https://github.com/symfony/validator.git", - "reference": "6da1f0a1ee73d060a411d832cbe0539cfe9bbaa0" + "reference": "9b0d1988b56511706bc91d96ead39acd77aaf34d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/validator/zipball/6da1f0a1ee73d060a411d832cbe0539cfe9bbaa0", - "reference": "6da1f0a1ee73d060a411d832cbe0539cfe9bbaa0", + "url": "https://api.github.com/repos/symfony/validator/zipball/9b0d1988b56511706bc91d96ead39acd77aaf34d", + "reference": "9b0d1988b56511706bc91d96ead39acd77aaf34d", "shasum": "" }, "require": { @@ -13246,7 +13324,7 @@ "description": "Provides tools to validate values", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/validator/tree/v6.4.12" + "source": "https://github.com/symfony/validator/tree/v6.4.16" }, "funding": [ { @@ -13262,20 +13340,20 @@ "type": "tidelift" } ], - "time": "2024-09-20T08:18:25+00:00" + "time": "2024-11-27T09:48:51+00:00" }, { "name": "symfony/var-dumper", - "version": "v6.4.11", + "version": "v6.4.15", "source": { "type": "git", "url": "https://github.com/symfony/var-dumper.git", - "reference": "ee14c8254a480913268b1e3b1cba8045ed122694" + "reference": "38254d5a5ac2e61f2b52f9caf54e7aa3c9d36b80" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/ee14c8254a480913268b1e3b1cba8045ed122694", - "reference": "ee14c8254a480913268b1e3b1cba8045ed122694", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/38254d5a5ac2e61f2b52f9caf54e7aa3c9d36b80", + "reference": "38254d5a5ac2e61f2b52f9caf54e7aa3c9d36b80", "shasum": "" }, "require": { @@ -13331,7 +13409,7 @@ "dump" ], "support": { - "source": "https://github.com/symfony/var-dumper/tree/v6.4.11" + "source": "https://github.com/symfony/var-dumper/tree/v6.4.15" }, "funding": [ { @@ -13347,20 +13425,20 @@ "type": "tidelift" } ], - "time": "2024-08-30T16:03:21+00:00" + "time": "2024-11-08T15:28:48+00:00" }, { "name": "symfony/var-exporter", - "version": "v6.4.9", + "version": "v6.4.13", "source": { "type": "git", "url": "https://github.com/symfony/var-exporter.git", - "reference": "f9a060622e0d93777b7f8687ec4860191e16802e" + "reference": "0f605f72a363f8743001038a176eeb2a11223b51" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-exporter/zipball/f9a060622e0d93777b7f8687ec4860191e16802e", - "reference": "f9a060622e0d93777b7f8687ec4860191e16802e", + "url": "https://api.github.com/repos/symfony/var-exporter/zipball/0f605f72a363f8743001038a176eeb2a11223b51", + "reference": "0f605f72a363f8743001038a176eeb2a11223b51", "shasum": "" }, "require": { @@ -13408,7 +13486,7 @@ "serialize" ], "support": { - "source": "https://github.com/symfony/var-exporter/tree/v6.4.9" + "source": "https://github.com/symfony/var-exporter/tree/v6.4.13" }, "funding": [ { @@ -13424,20 +13502,20 @@ "type": "tidelift" } ], - "time": "2024-06-24T15:53:56+00:00" + "time": "2024-09-25T14:18:03+00:00" }, { "name": "symfony/web-link", - "version": "v6.4.8", + "version": "v6.4.13", "source": { "type": "git", "url": "https://github.com/symfony/web-link.git", - "reference": "304c67cefe7128ea3957e9bb1ac6ce08a90a635b" + "reference": "4d188b64bb9a9c5e2e4d20c8d5fdce6bbbb32c94" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/web-link/zipball/304c67cefe7128ea3957e9bb1ac6ce08a90a635b", - "reference": "304c67cefe7128ea3957e9bb1ac6ce08a90a635b", + "url": "https://api.github.com/repos/symfony/web-link/zipball/4d188b64bb9a9c5e2e4d20c8d5fdce6bbbb32c94", + "reference": "4d188b64bb9a9c5e2e4d20c8d5fdce6bbbb32c94", "shasum": "" }, "require": { @@ -13491,7 +13569,7 @@ "push" ], "support": { - "source": "https://github.com/symfony/web-link/tree/v6.4.8" + "source": "https://github.com/symfony/web-link/tree/v6.4.13" }, "funding": [ { @@ -13507,7 +13585,7 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:49:08+00:00" + "time": "2024-09-25T14:18:03+00:00" }, { "name": "symfony/webpack-encore-bundle", @@ -13542,8 +13620,8 @@ "type": "symfony-bundle", "extra": { "thanks": { - "name": "symfony/webpack-encore", - "url": "https://github.com/symfony/webpack-encore" + "url": "https://github.com/symfony/webpack-encore", + "name": "symfony/webpack-encore" } }, "autoload": { @@ -13584,16 +13662,16 @@ }, { "name": "symfony/yaml", - "version": "v6.4.12", + "version": "v6.4.13", "source": { "type": "git", "url": "https://github.com/symfony/yaml.git", - "reference": "762ee56b2649659380e0ef4d592d807bc17b7971" + "reference": "e99b4e94d124b29ee4cf3140e1b537d2dad8cec9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/762ee56b2649659380e0ef4d592d807bc17b7971", - "reference": "762ee56b2649659380e0ef4d592d807bc17b7971", + "url": "https://api.github.com/repos/symfony/yaml/zipball/e99b4e94d124b29ee4cf3140e1b537d2dad8cec9", + "reference": "e99b4e94d124b29ee4cf3140e1b537d2dad8cec9", "shasum": "" }, "require": { @@ -13636,7 +13714,7 @@ "description": "Loads and dumps YAML files", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/yaml/tree/v6.4.12" + "source": "https://github.com/symfony/yaml/tree/v6.4.13" }, "funding": [ { @@ -13652,20 +13730,20 @@ "type": "tidelift" } ], - "time": "2024-09-17T12:47:12+00:00" + "time": "2024-09-25T14:18:03+00:00" }, { "name": "symfonycasts/dynamic-forms", - "version": "v0.1.2", + "version": "v0.1.3", "source": { "type": "git", "url": "https://github.com/SymfonyCasts/dynamic-forms.git", - "reference": "1bfe8441e3be250b14dc2bd0ae0323dd4acbfd2c" + "reference": "4c86c48f18a707e451c4dfffe87f3710b2052be6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/SymfonyCasts/dynamic-forms/zipball/1bfe8441e3be250b14dc2bd0ae0323dd4acbfd2c", - "reference": "1bfe8441e3be250b14dc2bd0ae0323dd4acbfd2c", + "url": "https://api.github.com/repos/SymfonyCasts/dynamic-forms/zipball/4c86c48f18a707e451c4dfffe87f3710b2052be6", + "reference": "4c86c48f18a707e451c4dfffe87f3710b2052be6", "shasum": "" }, "require": { @@ -13673,10 +13751,10 @@ "symfony/form": "^5.4|^6.3|^7.0" }, "require-dev": { - "phpstan/phpstan": "^1.11", + "phpunit/phpunit": "^9.6", "symfony/framework-bundle": "^6.3|^7.0", "symfony/options-resolver": "^5.4|^6.3|^7.0", - "symfony/phpunit-bridge": "^5.4|^6.3|^7.0", + "symfony/phpunit-bridge": "^5.4.32|^6.3.9|^7.0", "symfony/twig-bundle": "^5.4|^6.3|^7.0", "twig/twig": "^2.15|^3.0", "zenstruck/browser": "^1.4" @@ -13704,9 +13782,9 @@ ], "support": { "issues": "https://github.com/SymfonyCasts/dynamic-forms/issues", - "source": "https://github.com/SymfonyCasts/dynamic-forms/tree/v0.1.2" + "source": "https://github.com/SymfonyCasts/dynamic-forms/tree/v0.1.3" }, - "time": "2024-02-20T11:55:15+00:00" + "time": "2024-10-22T16:59:02+00:00" }, { "name": "tp/paydirekt-php", @@ -13755,23 +13833,23 @@ }, { "name": "twig/extra-bundle", - "version": "v3.13.0", + "version": "v3.16.0", "source": { "type": "git", "url": "https://github.com/twigphp/twig-extra-bundle.git", - "reference": "21a9a7aa9f79d4493bb6fed4eb2794339f9551f5" + "reference": "9746573ca4bc1cd03a767a183faadaf84e0c31fa" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/twigphp/twig-extra-bundle/zipball/21a9a7aa9f79d4493bb6fed4eb2794339f9551f5", - "reference": "21a9a7aa9f79d4493bb6fed4eb2794339f9551f5", + "url": "https://api.github.com/repos/twigphp/twig-extra-bundle/zipball/9746573ca4bc1cd03a767a183faadaf84e0c31fa", + "reference": "9746573ca4bc1cd03a767a183faadaf84e0c31fa", "shasum": "" }, "require": { "php": ">=8.0.2", "symfony/framework-bundle": "^5.4|^6.4|^7.0", "symfony/twig-bundle": "^5.4|^6.4|^7.0", - "twig/twig": "^3.0|^4.0" + "twig/twig": "^3.2|^4.0" }, "require-dev": { "league/commonmark": "^1.0|^2.0", @@ -13813,7 +13891,7 @@ "twig" ], "support": { - "source": "https://github.com/twigphp/twig-extra-bundle/tree/v3.13.0" + "source": "https://github.com/twigphp/twig-extra-bundle/tree/v3.16.0" }, "funding": [ { @@ -13825,20 +13903,20 @@ "type": "tidelift" } ], - "time": "2024-09-01T20:39:12+00:00" + "time": "2024-09-26T19:22:23+00:00" }, { "name": "twig/intl-extra", - "version": "v3.13.0", + "version": "v3.16.0", "source": { "type": "git", "url": "https://github.com/twigphp/intl-extra.git", - "reference": "1b8d78c5db08bdc61015fd55009d2e84b3aa7e38" + "reference": "4eeab2a3f8d04d1838be7251ab2d183f817aea7b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/twigphp/intl-extra/zipball/1b8d78c5db08bdc61015fd55009d2e84b3aa7e38", - "reference": "1b8d78c5db08bdc61015fd55009d2e84b3aa7e38", + "url": "https://api.github.com/repos/twigphp/intl-extra/zipball/4eeab2a3f8d04d1838be7251ab2d183f817aea7b", + "reference": "4eeab2a3f8d04d1838be7251ab2d183f817aea7b", "shasum": "" }, "require": { @@ -13877,7 +13955,7 @@ "twig" ], "support": { - "source": "https://github.com/twigphp/intl-extra/tree/v3.13.0" + "source": "https://github.com/twigphp/intl-extra/tree/v3.16.0" }, "funding": [ { @@ -13889,20 +13967,20 @@ "type": "tidelift" } ], - "time": "2024-09-03T13:08:40+00:00" + "time": "2024-11-20T13:19:52+00:00" }, { "name": "twig/string-extra", - "version": "v3.13.0", + "version": "v3.16.0", "source": { "type": "git", "url": "https://github.com/twigphp/string-extra.git", - "reference": "148e869d87cf4bea9d97896ab49e048e4add3310" + "reference": "3f90208078a7d55ad4a561301ee3929d3e3840e0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/twigphp/string-extra/zipball/148e869d87cf4bea9d97896ab49e048e4add3310", - "reference": "148e869d87cf4bea9d97896ab49e048e4add3310", + "url": "https://api.github.com/repos/twigphp/string-extra/zipball/3f90208078a7d55ad4a561301ee3929d3e3840e0", + "reference": "3f90208078a7d55ad4a561301ee3929d3e3840e0", "shasum": "" }, "require": { @@ -13944,7 +14022,7 @@ "unicode" ], "support": { - "source": "https://github.com/twigphp/string-extra/tree/v3.13.0" + "source": "https://github.com/twigphp/string-extra/tree/v3.16.0" }, "funding": [ { @@ -13956,20 +14034,20 @@ "type": "tidelift" } ], - "time": "2024-09-03T13:08:40+00:00" + "time": "2024-11-20T13:10:15+00:00" }, { "name": "twig/twig", - "version": "v3.14.0", + "version": "v3.16.0", "source": { "type": "git", "url": "https://github.com/twigphp/Twig.git", - "reference": "126b2c97818dbff0cdf3fbfc881aedb3d40aae72" + "reference": "475ad2dc97d65d8631393e721e7e44fb544f0561" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/twigphp/Twig/zipball/126b2c97818dbff0cdf3fbfc881aedb3d40aae72", - "reference": "126b2c97818dbff0cdf3fbfc881aedb3d40aae72", + "url": "https://api.github.com/repos/twigphp/Twig/zipball/475ad2dc97d65d8631393e721e7e44fb544f0561", + "reference": "475ad2dc97d65d8631393e721e7e44fb544f0561", "shasum": "" }, "require": { @@ -13980,6 +14058,7 @@ "symfony/polyfill-php81": "^1.29" }, "require-dev": { + "phpstan/phpstan": "^2.0", "psr/container": "^1.0|^2.0", "symfony/phpunit-bridge": "^5.4.9|^6.4|^7.0" }, @@ -14023,7 +14102,7 @@ ], "support": { "issues": "https://github.com/twigphp/Twig/issues", - "source": "https://github.com/twigphp/Twig/tree/v3.14.0" + "source": "https://github.com/twigphp/Twig/tree/v3.16.0" }, "funding": [ { @@ -14035,7 +14114,7 @@ "type": "tidelift" } ], - "time": "2024-09-09T17:55:12+00:00" + "time": "2024-11-29T08:27:05+00:00" }, { "name": "webmozart/assert", @@ -14129,16 +14208,16 @@ }, { "name": "zircote/swagger-php", - "version": "4.10.6", + "version": "4.11.1", "source": { "type": "git", "url": "https://github.com/zircote/swagger-php.git", - "reference": "e462ff5269ea0ec91070edd5d51dc7215bdea3b6" + "reference": "7df10e8ec47db07c031db317a25bef962b4e5de1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/zircote/swagger-php/zipball/e462ff5269ea0ec91070edd5d51dc7215bdea3b6", - "reference": "e462ff5269ea0ec91070edd5d51dc7215bdea3b6", + "url": "https://api.github.com/repos/zircote/swagger-php/zipball/7df10e8ec47db07c031db317a25bef962b4e5de1", + "reference": "7df10e8ec47db07c031db317a25bef962b4e5de1", "shasum": "" }, "require": { @@ -14152,7 +14231,7 @@ "require-dev": { "composer/package-versions-deprecated": "^1.11", "doctrine/annotations": "^1.7 || ^2.0", - "friendsofphp/php-cs-fixer": "^2.17 || ^3.47.1", + "friendsofphp/php-cs-fixer": "^2.17 || 3.62.0", "phpstan/phpstan": "^1.6", "phpunit/phpunit": ">=8", "vimeo/psalm": "^4.23" @@ -14204,30 +14283,31 @@ ], "support": { "issues": "https://github.com/zircote/swagger-php/issues", - "source": "https://github.com/zircote/swagger-php/tree/4.10.6" + "source": "https://github.com/zircote/swagger-php/tree/4.11.1" }, - "time": "2024-07-26T03:04:43+00:00" + "time": "2024-10-15T19:20:02+00:00" } ], "packages-dev": [ { "name": "doctrine/data-fixtures", - "version": "1.7.0", + "version": "1.8.0", "source": { "type": "git", "url": "https://github.com/doctrine/data-fixtures.git", - "reference": "bbcb74f2ac6dbe81a14b3c3687d7623490a0448f" + "reference": "d2ff5046b263868baf6e9b06cf4918f60096c0d0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/data-fixtures/zipball/bbcb74f2ac6dbe81a14b3c3687d7623490a0448f", - "reference": "bbcb74f2ac6dbe81a14b3c3687d7623490a0448f", + "url": "https://api.github.com/repos/doctrine/data-fixtures/zipball/d2ff5046b263868baf6e9b06cf4918f60096c0d0", + "reference": "d2ff5046b263868baf6e9b06cf4918f60096c0d0", "shasum": "" }, "require": { "doctrine/deprecations": "^0.5.3 || ^1.0", - "doctrine/persistence": "^2.0|^3.0", - "php": "^7.4 || ^8.0" + "doctrine/persistence": "^2.0 || ^3.0", + "php": "^7.4 || ^8.0", + "symfony/polyfill-php80": "^1" }, "conflict": { "doctrine/dbal": "<3.5 || >=5", @@ -14241,11 +14321,12 @@ "doctrine/mongodb-odm": "^1.3.0 || ^2.0.0", "doctrine/orm": "^2.14 || ^3", "ext-sqlite3": "*", + "fig/log-test": "^1", "phpstan/phpstan": "^1.10", "phpunit/phpunit": "^9.6.13 || ^10.4.2", + "psr/log": "^1.1 || ^2 || ^3", "symfony/cache": "^5.4 || ^6.3 || ^7", - "symfony/var-exporter": "^5.4 || ^6.3 || ^7", - "vimeo/psalm": "^5.9" + "symfony/var-exporter": "^5.4 || ^6.3 || ^7" }, "suggest": { "alcaeus/mongo-php-adapter": "For using MongoDB ODM 1.3 with PHP 7 (deprecated)", @@ -14276,7 +14357,7 @@ ], "support": { "issues": "https://github.com/doctrine/data-fixtures/issues", - "source": "https://github.com/doctrine/data-fixtures/tree/1.7.0" + "source": "https://github.com/doctrine/data-fixtures/tree/1.8.0" }, "funding": [ { @@ -14292,20 +14373,20 @@ "type": "tidelift" } ], - "time": "2023-11-24T11:18:31+00:00" + "time": "2024-11-04T22:36:12+00:00" }, { "name": "fakerphp/faker", - "version": "v1.23.1", + "version": "v1.24.1", "source": { "type": "git", "url": "https://github.com/FakerPHP/Faker.git", - "reference": "bfb4fe148adbf78eff521199619b93a52ae3554b" + "reference": "e0ee18eb1e6dc3cda3ce9fd97e5a0689a88a64b5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/FakerPHP/Faker/zipball/bfb4fe148adbf78eff521199619b93a52ae3554b", - "reference": "bfb4fe148adbf78eff521199619b93a52ae3554b", + "url": "https://api.github.com/repos/FakerPHP/Faker/zipball/e0ee18eb1e6dc3cda3ce9fd97e5a0689a88a64b5", + "reference": "e0ee18eb1e6dc3cda3ce9fd97e5a0689a88a64b5", "shasum": "" }, "require": { @@ -14353,9 +14434,9 @@ ], "support": { "issues": "https://github.com/FakerPHP/Faker/issues", - "source": "https://github.com/FakerPHP/Faker/tree/v1.23.1" + "source": "https://github.com/FakerPHP/Faker/tree/v1.24.1" }, - "time": "2024-01-02T13:46:09+00:00" + "time": "2024-11-21T13:46:39+00:00" }, { "name": "hamcrest/hamcrest-php", @@ -14808,16 +14889,16 @@ }, { "name": "nikic/php-parser", - "version": "v4.19.2", + "version": "v4.19.4", "source": { "type": "git", "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "0ed4c8949a32986043e977dbe14776c14d644c45" + "reference": "715f4d25e225bc47b293a8b997fe6ce99bf987d2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/0ed4c8949a32986043e977dbe14776c14d644c45", - "reference": "0ed4c8949a32986043e977dbe14776c14d644c45", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/715f4d25e225bc47b293a8b997fe6ce99bf987d2", + "reference": "715f4d25e225bc47b293a8b997fe6ce99bf987d2", "shasum": "" }, "require": { @@ -14826,7 +14907,7 @@ }, "require-dev": { "ircmaxell/php-yacc": "^0.0.7", - "phpunit/phpunit": "^6.5 || ^7.0 || ^8.0 || ^9.0" + "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0" }, "bin": [ "bin/php-parse" @@ -14858,9 +14939,9 @@ ], "support": { "issues": "https://github.com/nikic/PHP-Parser/issues", - "source": "https://github.com/nikic/PHP-Parser/tree/v4.19.2" + "source": "https://github.com/nikic/PHP-Parser/tree/v4.19.4" }, - "time": "2024-09-17T19:36:00+00:00" + "time": "2024-09-29T15:01:53+00:00" }, { "name": "phar-io/manifest", @@ -14986,12 +15067,12 @@ "source": { "type": "git", "url": "https://github.com/php-parallel-lint/PHP-Parallel-Lint.git", - "reference": "0c2706086ac36dce31967cb36062ff8915fe03f7" + "reference": "adc351fa7c019b8d931b47923101596caa018a14" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-parallel-lint/PHP-Parallel-Lint/zipball/0c2706086ac36dce31967cb36062ff8915fe03f7", - "reference": "0c2706086ac36dce31967cb36062ff8915fe03f7", + "url": "https://api.github.com/repos/php-parallel-lint/PHP-Parallel-Lint/zipball/adc351fa7c019b8d931b47923101596caa018a14", + "reference": "adc351fa7c019b8d931b47923101596caa018a14", "shasum": "" }, "require": { @@ -15044,20 +15125,20 @@ "issues": "https://github.com/php-parallel-lint/PHP-Parallel-Lint/issues", "source": "https://github.com/php-parallel-lint/PHP-Parallel-Lint/tree/develop" }, - "time": "2024-05-20T10:19:45+00:00" + "time": "2024-11-23T12:13:14+00:00" }, { "name": "phpstan/phpstan", - "version": "1.12.4", + "version": "1.12.12", "source": { "type": "git", "url": "https://github.com/phpstan/phpstan.git", - "reference": "ffa517cb918591b93acc9b95c0bebdcd0e4538bd" + "reference": "b5ae1b88f471d3fd4ba1aa0046234b5ca3776dd0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpstan/zipball/ffa517cb918591b93acc9b95c0bebdcd0e4538bd", - "reference": "ffa517cb918591b93acc9b95c0bebdcd0e4538bd", + "url": "https://api.github.com/repos/phpstan/phpstan/zipball/b5ae1b88f471d3fd4ba1aa0046234b5ca3776dd0", + "reference": "b5ae1b88f471d3fd4ba1aa0046234b5ca3776dd0", "shasum": "" }, "require": { @@ -15102,7 +15183,7 @@ "type": "github" } ], - "time": "2024-09-19T07:58:01+00:00" + "time": "2024-11-28T22:13:23+00:00" }, { "name": "phpunit/php-code-coverage", @@ -16546,16 +16627,16 @@ }, { "name": "squizlabs/php_codesniffer", - "version": "3.10.3", + "version": "3.11.1", "source": { "type": "git", "url": "https://github.com/PHPCSStandards/PHP_CodeSniffer.git", - "reference": "62d32998e820bddc40f99f8251958aed187a5c9c" + "reference": "19473c30efe4f7b3cd42522d0b2e6e7f243c6f87" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/PHPCSStandards/PHP_CodeSniffer/zipball/62d32998e820bddc40f99f8251958aed187a5c9c", - "reference": "62d32998e820bddc40f99f8251958aed187a5c9c", + "url": "https://api.github.com/repos/PHPCSStandards/PHP_CodeSniffer/zipball/19473c30efe4f7b3cd42522d0b2e6e7f243c6f87", + "reference": "19473c30efe4f7b3cd42522d0b2e6e7f243c6f87", "shasum": "" }, "require": { @@ -16622,20 +16703,20 @@ "type": "open_collective" } ], - "time": "2024-09-18T10:38:58+00:00" + "time": "2024-11-16T12:02:36+00:00" }, { "name": "symfony/browser-kit", - "version": "v6.4.8", + "version": "v6.4.13", "source": { "type": "git", "url": "https://github.com/symfony/browser-kit.git", - "reference": "62ab90b92066ef6cce5e79365625b4b1432464c8" + "reference": "65d4b3fd9556e4b5b41287bef93c671f8f9f86ab" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/browser-kit/zipball/62ab90b92066ef6cce5e79365625b4b1432464c8", - "reference": "62ab90b92066ef6cce5e79365625b4b1432464c8", + "url": "https://api.github.com/repos/symfony/browser-kit/zipball/65d4b3fd9556e4b5b41287bef93c671f8f9f86ab", + "reference": "65d4b3fd9556e4b5b41287bef93c671f8f9f86ab", "shasum": "" }, "require": { @@ -16674,7 +16755,7 @@ "description": "Simulates the behavior of a web browser, allowing you to make requests, click on links and submit forms programmatically", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/browser-kit/tree/v6.4.8" + "source": "https://github.com/symfony/browser-kit/tree/v6.4.13" }, "funding": [ { @@ -16690,20 +16771,20 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:49:08+00:00" + "time": "2024-10-25T15:07:50+00:00" }, { "name": "symfony/css-selector", - "version": "v6.4.8", + "version": "v6.4.13", "source": { "type": "git", "url": "https://github.com/symfony/css-selector.git", - "reference": "4b61b02fe15db48e3687ce1c45ea385d1780fe08" + "reference": "cb23e97813c5837a041b73a6d63a9ddff0778f5e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/css-selector/zipball/4b61b02fe15db48e3687ce1c45ea385d1780fe08", - "reference": "4b61b02fe15db48e3687ce1c45ea385d1780fe08", + "url": "https://api.github.com/repos/symfony/css-selector/zipball/cb23e97813c5837a041b73a6d63a9ddff0778f5e", + "reference": "cb23e97813c5837a041b73a6d63a9ddff0778f5e", "shasum": "" }, "require": { @@ -16739,7 +16820,7 @@ "description": "Converts CSS selectors to XPath expressions", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/css-selector/tree/v6.4.8" + "source": "https://github.com/symfony/css-selector/tree/v6.4.13" }, "funding": [ { @@ -16755,20 +16836,20 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:49:08+00:00" + "time": "2024-09-25T14:18:03+00:00" }, { "name": "symfony/debug-bundle", - "version": "v6.4.8", + "version": "v6.4.13", "source": { "type": "git", "url": "https://github.com/symfony/debug-bundle.git", - "reference": "689f1bcb0bd3b945e3c671cbd06274b127c64dc9" + "reference": "7bcfaff39e094cc09455201916d016d9b2ae08ff" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/debug-bundle/zipball/689f1bcb0bd3b945e3c671cbd06274b127c64dc9", - "reference": "689f1bcb0bd3b945e3c671cbd06274b127c64dc9", + "url": "https://api.github.com/repos/symfony/debug-bundle/zipball/7bcfaff39e094cc09455201916d016d9b2ae08ff", + "reference": "7bcfaff39e094cc09455201916d016d9b2ae08ff", "shasum": "" }, "require": { @@ -16813,7 +16894,7 @@ "description": "Provides a tight integration of the Symfony VarDumper component and the ServerLogCommand from MonologBridge into the Symfony full-stack framework", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/debug-bundle/tree/v6.4.8" + "source": "https://github.com/symfony/debug-bundle/tree/v6.4.13" }, "funding": [ { @@ -16829,20 +16910,20 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:49:08+00:00" + "time": "2024-09-25T14:18:03+00:00" }, { "name": "symfony/dom-crawler", - "version": "v6.4.12", + "version": "v6.4.16", "source": { "type": "git", "url": "https://github.com/symfony/dom-crawler.git", - "reference": "9d307ecbcb917001692be333cdc58f474fdb37f0" + "reference": "4304e6ad5c894a9c72831ad459f627bfd35d766d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/9d307ecbcb917001692be333cdc58f474fdb37f0", - "reference": "9d307ecbcb917001692be333cdc58f474fdb37f0", + "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/4304e6ad5c894a9c72831ad459f627bfd35d766d", + "reference": "4304e6ad5c894a9c72831ad459f627bfd35d766d", "shasum": "" }, "require": { @@ -16880,7 +16961,7 @@ "description": "Eases DOM navigation for HTML and XML documents", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/dom-crawler/tree/v6.4.12" + "source": "https://github.com/symfony/dom-crawler/tree/v6.4.16" }, "funding": [ { @@ -16896,7 +16977,7 @@ "type": "tidelift" } ], - "time": "2024-09-15T06:35:36+00:00" + "time": "2024-11-13T15:06:22+00:00" }, { "name": "symfony/phpunit-bridge", @@ -16931,8 +17012,8 @@ "type": "symfony-bridge", "extra": { "thanks": { - "name": "phpunit/phpunit", - "url": "https://github.com/sebastianbergmann/phpunit" + "url": "https://github.com/sebastianbergmann/phpunit", + "name": "phpunit/phpunit" } }, "autoload": { @@ -16983,16 +17064,16 @@ }, { "name": "symfony/stopwatch", - "version": "v6.4.8", + "version": "v6.4.13", "source": { "type": "git", "url": "https://github.com/symfony/stopwatch.git", - "reference": "63e069eb616049632cde9674c46957819454b8aa" + "reference": "2cae0a6f8d04937d02f6d19806251e2104d54f92" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/stopwatch/zipball/63e069eb616049632cde9674c46957819454b8aa", - "reference": "63e069eb616049632cde9674c46957819454b8aa", + "url": "https://api.github.com/repos/symfony/stopwatch/zipball/2cae0a6f8d04937d02f6d19806251e2104d54f92", + "reference": "2cae0a6f8d04937d02f6d19806251e2104d54f92", "shasum": "" }, "require": { @@ -17025,7 +17106,7 @@ "description": "Provides a way to profile code", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/stopwatch/tree/v6.4.8" + "source": "https://github.com/symfony/stopwatch/tree/v6.4.13" }, "funding": [ { @@ -17041,20 +17122,20 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:49:08+00:00" + "time": "2024-09-25T14:18:03+00:00" }, { "name": "symfony/web-profiler-bundle", - "version": "v6.4.11", + "version": "v6.4.16", "source": { "type": "git", "url": "https://github.com/symfony/web-profiler-bundle.git", - "reference": "ef4b8b4f9f51260d18abec40ceacc4bc9c5555e3" + "reference": "2d58fd04ac0d3c6279cadd0105959083ef1d7f5b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/web-profiler-bundle/zipball/ef4b8b4f9f51260d18abec40ceacc4bc9c5555e3", - "reference": "ef4b8b4f9f51260d18abec40ceacc4bc9c5555e3", + "url": "https://api.github.com/repos/symfony/web-profiler-bundle/zipball/2d58fd04ac0d3c6279cadd0105959083ef1d7f5b", + "reference": "2d58fd04ac0d3c6279cadd0105959083ef1d7f5b", "shasum": "" }, "require": { @@ -17107,7 +17188,7 @@ "dev" ], "support": { - "source": "https://github.com/symfony/web-profiler-bundle/tree/v6.4.11" + "source": "https://github.com/symfony/web-profiler-bundle/tree/v6.4.16" }, "funding": [ { @@ -17123,7 +17204,7 @@ "type": "tidelift" } ], - "time": "2024-08-12T09:55:28+00:00" + "time": "2024-11-19T10:11:25+00:00" }, { "name": "symplify/config-transformer", diff --git a/src/new/config/packages/doctrine_mongodb.php b/src/new/config/packages/doctrine_mongodb.php index 495f58df0..9402c0028 100755 --- a/src/new/config/packages/doctrine_mongodb.php +++ b/src/new/config/packages/doctrine_mongodb.php @@ -5,5 +5,10 @@ declare(strict_types=1); use Symfony\Component\DependencyInjection\Loader\Configurator\ContainerConfigurator; return static function (ContainerConfigurator $containerConfigurator): void { - $containerConfigurator->extension('doctrine_mongodb', ['auto_generate_proxy_classes' => true, 'auto_generate_hydrator_classes' => true, 'connections' => ['default' => ['server' => '%env(resolve:MONGODB_URL)%', 'options' => []]], 'default_database' => '%env(resolve:MONGODB_DB)%', 'document_managers' => ['default' => ['auto_mapping' => true]]]); + $containerConfigurator->extension( + 'doctrine_mongodb', + ['auto_generate_proxy_classes' => true, + 'auto_generate_hydrator_classes' => true, + 'connections' => ['default' => ['server' => '%env(resolve:MONGODB_URL)%', 'options' => []]], 'default_database' => '%env(resolve:MONGODB_DB)%', 'document_managers' => ['default' => ['auto_mapping' => true]]] + ); }; diff --git a/src/new/config/packages/lock.yaml b/src/new/config/packages/lock.yaml new file mode 100644 index 000000000..574879f83 --- /dev/null +++ b/src/new/config/packages/lock.yaml @@ -0,0 +1,2 @@ +framework: + lock: '%env(LOCK_DSN)%' diff --git a/src/new/config/packages/security.php b/src/new/config/packages/security.php index f8e8b49d3..b0308e938 100755 --- a/src/new/config/packages/security.php +++ b/src/new/config/packages/security.php @@ -2,17 +2,23 @@ declare(strict_types=1); +use PSC\Shop\EntityBundle\Document\Instance; use PSC\Shop\EntityBundle\Entity\Contact; use PSC\Shop\EntityBundle\Entity\Shop; use PSC\Shop\UserBundle\Model\ApiUser; use PSC\Shop\UserBundle\Security\ApiKeyAuthenticator; use PSC\Shop\UserBundle\Security\ApiKeyExtractor; use PSC\Shop\UserBundle\Security\ApiKeyHandler; +use PSC\Shop\UserBundle\Security\ApiKey\ApiKeyProvider; +use PSC\Shop\UserBundle\Security\ApiKey\InstanceProvider; +use PSC\Shop\UserBundle\Security\ApiKey\ShopProvider; +use PSC\Shop\UserBundle\Security\User\UserProvider; use PSC\Shop\UserBundle\Security\ZendAuthenticator; use Symfony\Component\DependencyInjection\Loader\Configurator\ContainerConfigurator; return static function (ContainerConfigurator $containerConfigurator): void { - $containerConfigurator->extension('security', + $containerConfigurator->extension( + 'security', [ 'password_hashers' => [ @@ -61,16 +67,30 @@ return static function (ContainerConfigurator $containerConfigurator): void { 'ROLE_PRODUCTION', 'ROLE_SUPER_SHOP', 'ROLE_ALLOWED_TO_SWITCH' + ], + 'ROLE_API' => [ + 'ROLE_SHOP' ] ], 'providers' => [ - 'database' => ['entity' => ['class' => Contact::class]], - 'database_token' => ['entity' => ['class' => Shop::class]], + //'database' => ['entity' => ['class' => Contact::class]], + 'user_provider' => ['id' => UserProvider::class ], + 'shop_provider' => ['id' => ShopProvider::class ], + 'instance_provider' => ['id' => InstanceProvider::class ], + 'all' => [ + 'chain' => + [ + 'providers' => + ['user_provider', 'shop_provider', 'instance_provider'] + ] + ] + // 'database_token' => ['entity' => ['class' => Shop::class]], +// 'database_api_key' => ['entity' => ['class' => Instance::class]], ], 'firewalls' => [ 'admin_secured_area' => [ 'pattern' => '^/backend', - 'provider' => 'database', + 'provider' => 'user_provider', 'form_login' => [ 'check_path' => 'psc_backend_login', 'login_path' => 'psc_backend_login', @@ -87,7 +107,7 @@ return static function (ContainerConfigurator $containerConfigurator): void { 'api_login' => [ 'pattern' => '/api/login', 'stateless' => false, - 'provider' => 'database', + 'provider' => 'all', 'json_login' => [ 'check_path' => '/api/login_check', 'success_handler' => 'lexik_jwt_authentication.handler.authentication_success', @@ -97,7 +117,7 @@ return static function (ContainerConfigurator $containerConfigurator): void { 'api' => [ 'pattern' => '^/api', 'stateless' => false, - 'provider' => 'database', + 'provider' => 'all', 'jwt' => null, 'access_token' => [ 'token_handler' => ApiKeyHandler::class, @@ -106,7 +126,7 @@ return static function (ContainerConfigurator $containerConfigurator): void { ], 'storefront' => [ 'pattern' => '^/', - 'provider' => 'database', + 'provider' => 'user_provider', 'stateless' => false, 'jwt' => null, 'custom_authenticators' => [ @@ -141,5 +161,6 @@ return static function (ContainerConfigurator $containerConfigurator): void { 'roles' => 'PUBLIC_ACCESS' ] ] - ]); + ] + ); }; diff --git a/src/new/fixtures/contact.yml b/src/new/fixtures/contact.yml index 45ef7419a..2f3edb53a 100755 --- a/src/new/fixtures/contact.yml +++ b/src/new/fixtures/contact.yml @@ -41,6 +41,36 @@ PSC\Shop\EntityBundle\Entity\Contact: street: "Chausseestraße3" house_number: "24b3" + contact_4: + username: company@shop.de + email: company@shop.de + name: company@shop.de + password: test2014 + enable: true + setRolesForm: ['@role_1','@role_5'] + firstname: "Thomas" + company: "PSC" + lastname: "Peterson" + city: "Gribow" + zip: "17506" + street: "Chausseestraße" + house_number: "24b" + + contact_5: + username: association@shop.de + email: association@shop.de + name: association@shop.de + password: test2014 + enable: true + setRolesForm: ['@role_1','@role_5'] + firstname: "Thomas" + company: "ASSOCATION" + lastname: "Peterson" + city: "Gribow" + zip: "17506" + street: "Chausseestraße" + house_number: "24b" + PSC\Shop\EntityBundle\Entity\ContactAddress: contactaddress_1: diff --git a/src/new/fixtures/install.yml b/src/new/fixtures/install.yml index 2d71c50d5..a7a6ab2af 100755 --- a/src/new/fixtures/install.yml +++ b/src/new/fixtures/install.yml @@ -1,4 +1,4 @@ PSC\Shop\EntityBundle\Entity\Install: install_1: - uid: 1 + # uid: 1 color_db: "TEST" diff --git a/src/new/fixtures/product.yml b/src/new/fixtures/product.yml index ae766d0d0..de0762d3c 100755 --- a/src/new/fixtures/product.yml +++ b/src/new/fixtures/product.yml @@ -50,4 +50,41 @@ PSC\Shop\EntityBundle\Entity\Product: taxClass: 19 price: 20 set_config: '{}' - shop: '@shop_1' \ No newline at end of file + shop: '@shop_1' + product_5: + uid: 9 + title: XML Calc Test 9 Example + language: 'de' + url: xml_test_9 + uuid: 01938686-0e4d-7da9-bae3-b2e1b1681f9f + type: 6 + pos: + private: false + taxClass: 19 + set_config: '{}' + shop: '@shop_1' + calcXml: > + + + + SD-Durchschreibesätze A4-Blocks + 210 mm x 297 mm + + + + + + + diff --git a/src/new/src/PSC/Backend/DashboardBundle/Controller/DashboardController.php b/src/new/src/PSC/Backend/DashboardBundle/Controller/DashboardController.php index 18aa1e3c4..43e31baf7 100755 --- a/src/new/src/PSC/Backend/DashboardBundle/Controller/DashboardController.php +++ b/src/new/src/PSC/Backend/DashboardBundle/Controller/DashboardController.php @@ -64,17 +64,17 @@ class DashboardController extends AbstractController $sales2 = array(); $sales3 = array(); for ($i = 1; $i <= 12; $i++) { - if(isset($tempSales1[$i])) { + if (isset($tempSales1[$i])) { $sales1[] = round($tempSales1[$i]); } else { $sales1[] = 0; } - if(isset($tempSales2[$i])) { + if (isset($tempSales2[$i])) { $sales2[] = round($tempSales2[$i]); } else { $sales2[] = 0; } - if(isset($tempSales3[$i])) { + if (isset($tempSales3[$i])) { $sales3[] = round($tempSales3[$i]); } else { $sales3[] = 0; @@ -82,7 +82,7 @@ class DashboardController extends AbstractController } $chart = $chartBuilder->createChart(Chart::TYPE_LINE); $chart->setData([ - 'labels' => ['Januar', 'Februar', 'März', 'April', 'May', 'Juli', 'Juni', 'August', 'September', 'Oktober', 'November', 'Dezember'], + 'labels' => ['Januar', 'Februar', 'März', 'April', 'May', 'Juni', 'Juli', 'August', 'September', 'Oktober', 'November', 'Dezember'], 'datasets' => [ [ 'label' => $year1, diff --git a/src/new/src/PSC/Backend/ToolsBundle/Exporter/Csv/OrderposExporter.php b/src/new/src/PSC/Backend/ToolsBundle/Exporter/Csv/OrderposExporter.php index 390d4715f..bedc4560f 100755 --- a/src/new/src/PSC/Backend/ToolsBundle/Exporter/Csv/OrderposExporter.php +++ b/src/new/src/PSC/Backend/ToolsBundle/Exporter/Csv/OrderposExporter.php @@ -25,9 +25,9 @@ class OrderposExporter implements ExporterInterface, ConfigurableElementInterfac private $_formFactory = null; private $_entityManager = null; private $_shopService = null; -/** @var Form */ + /** @var Form */ private $_form = null; - function __construct(FormFactoryInterface $formFactory, EntityManagerInterface $entityManager, Shop $shopService) + public function __construct(FormFactoryInterface $formFactory, EntityManagerInterface $entityManager, Shop $shopService) { $this->_formFactory = $formFactory; $this->_entityManager = $entityManager; @@ -88,7 +88,7 @@ class OrderposExporter implements ExporterInterface, ConfigurableElementInterfac $row[0]->getOrder()->getAlias(), $row[0]->getOrder()->getCreated()->format('Y-m-d H:i:s'), $row[0]->getOrder()->getStatus(), - $row[0]->getOrder()->getBrutto(), + round($row[0]->getPriceAllBrutto(), 2), $row[0]->getOrder()->getPackage(), $row[0]->getOrder()->getContact()->getUsername(), $row[0]->getProduct()->getUid(), diff --git a/src/new/src/PSC/Shop/ContactBundle/Api/Login.php b/src/new/src/PSC/Shop/ContactBundle/Api/Login.php index 02f3b417f..7ac76ba14 100755 --- a/src/new/src/PSC/Shop/ContactBundle/Api/Login.php +++ b/src/new/src/PSC/Shop/ContactBundle/Api/Login.php @@ -1,6 +1,6 @@ getRepository(Contact::class) ->getContactByEmailAndShop($input->username, $shop->getUid()); - if(!$user) { + if (!$user) { return new JsonResponse(['message' => 'contact '.$input->username.' not found'], 404); } @@ -46,7 +47,8 @@ class Login extends AbstractController } $output = new Output(); - + $output->userName = $user->getContact()->getUsername(); + $output->email = $user->getContact()->getEmail(); $output->token = $jwtManager->create($user->getContact()); return $this->json($output); diff --git a/src/new/src/PSC/Shop/ContactBundle/Controller/Backend/EditController.php b/src/new/src/PSC/Shop/ContactBundle/Controller/Backend/EditController.php index 5d028f8bd..30ea8e0b2 100755 --- a/src/new/src/PSC/Shop/ContactBundle/Controller/Backend/EditController.php +++ b/src/new/src/PSC/Shop/ContactBundle/Controller/Backend/EditController.php @@ -84,7 +84,7 @@ class EditController extends AbstractController $tmp = array(); /** @var Product $product */ foreach ($contacts as $contact) { - foreach($contact->getShops() as $shop) { + foreach ($contact->getShops() as $shop) { $tmp[] = $shop->getTitle(); } } @@ -135,7 +135,7 @@ class EditController extends AbstractController if ($form->isSubmitted() && $form->isValid()) { $contact->setProducts($this->merge([$contact->getProductsOrg(), $contact->getProductsSub()])); $contact->setUuid(Uuid::uuid4()); - + $entityManager->persist($contact); $entityManager->flush(); @@ -174,7 +174,7 @@ class EditController extends AbstractController $contactDoc->setLayouterEmail($contact->layouterEmail); $contactDoc->setLayouterCountryCode($contact->layouterCountryCode); $contactDoc->setLayouterCountryName($contact->layouterCountryName); - + $contactDoc->setAccountType($contact->accountType); $documentManager->persist($contactDoc); $documentManager->flush(); @@ -309,7 +309,7 @@ class EditController extends AbstractController $contact->layouterCountryName = $contactDoc->getLayouterCountryName(); $contact->layouterCountryCode = $contactDoc->getLayouterCountryCode(); $contact->layouterEmail = $contactDoc->getLayouterEmail(); - + $contact->accountType = $contactDoc->getAccountType(); $contact->setProductsOrg($contact->getProducts()); $contact->setProductsSub($contact->getProducts()); } elseif (!$contactDoc) { @@ -325,6 +325,7 @@ class EditController extends AbstractController $contactDoc->setLayouterEmail($contact->layouterEmail); $contactDoc->setLayouterCountryCode($contact->layouterCountryCode); $contactDoc->setLayouterCountryName($contact->layouterCountryName); + $contactDoc->setAccountType($contact->accountType); $contact->setProductsOrg($contact->getProducts()); $contact->setProductsSub($contact->getProducts()); @@ -344,7 +345,7 @@ class EditController extends AbstractController $form->handleRequest($request); if ($form->isSubmitted() && $form->isValid()) { - if($form->get('password')->getData() !== null) { + if ($form->get('password')->getData() !== null) { $contact->setPassword(password_hash($form->get('password')->getData(), PASSWORD_DEFAULT)); } $contact->setProducts($this->merge([$contact->getProductsOrg(), $contact->getProductsSub()])); @@ -390,7 +391,7 @@ class EditController extends AbstractController $contactDoc->setLayouterEmail($contact->layouterEmail); $contactDoc->setLayouterCountryCode($contact->layouterCountryCode); $contactDoc->setLayouterCountryName($contact->layouterCountryName); - + $contactDoc->setAccountType($contact->accountType); $this->historyService->createHistoryEntry(new PSCHistory((string)$contact->getUid()), $contact, $contactDoc); $entityManager->persist($contact); $entityManager->flush(); diff --git a/src/new/src/PSC/Shop/ContactBundle/Dto/Refresh/Output.php b/src/new/src/PSC/Shop/ContactBundle/Dto/Refresh/Output.php index c35845057..33a65f9c6 100755 --- a/src/new/src/PSC/Shop/ContactBundle/Dto/Refresh/Output.php +++ b/src/new/src/PSC/Shop/ContactBundle/Dto/Refresh/Output.php @@ -13,4 +13,19 @@ class Output * @OA\Property(type="string") */ public string $token; + + /** + * @var string + * + * @OA\Property(type="string") + */ + public string $userName; + + /** + * @var string + * + * @OA\Property(type="string") + */ + public string $email; + } diff --git a/src/new/src/PSC/Shop/ContactBundle/Form/Backend/General/ContactType.php b/src/new/src/PSC/Shop/ContactBundle/Form/Backend/General/ContactType.php index 6dc4cc4a9..c286d6707 100755 --- a/src/new/src/PSC/Shop/ContactBundle/Form/Backend/General/ContactType.php +++ b/src/new/src/PSC/Shop/ContactBundle/Form/Backend/General/ContactType.php @@ -15,6 +15,7 @@ namespace PSC\Shop\ContactBundle\Form\Backend\General; use Doctrine\ORM\EntityManagerInterface; use Doctrine\ORM\EntityRepository; +use PSC\Shop\ContactBundle\Model\AccountType; use PSC\Shop\EntityBundle\Entity\Payment; use PSC\Shop\EntityBundle\Entity\Productgroup; use PSC\Shop\EntityBundle\Entity\Shipping; @@ -28,6 +29,7 @@ use Symfony\Component\Form\AbstractType; use Symfony\Component\Form\Extension\Core\Type\CheckboxType; use Symfony\Component\Form\Extension\Core\Type\ChoiceType; use Symfony\Component\Form\Extension\Core\Type\DateType; +use Symfony\Component\Form\Extension\Core\Type\EnumType; use Symfony\Component\Form\Extension\Core\Type\FormType; use Symfony\Component\Form\Extension\Core\Type\IntegerType; use Symfony\Component\Form\Extension\Core\Type\LanguageType; @@ -224,6 +226,15 @@ class ContactType extends AbstractType 'choice_value' => 'uid', 'multiple' => true )) + ->add('accountType', EnumType::class, [ + 'required' => true, + 'class' => AccountType::class, + 'label' => 'accountType', + 'label_attr' => [ + 'data-bs-toggle' => "tooltip", + 'data-bs-html' => '{{ contact.accountType }}' + ] + ]) ->add('bankKtoName', TextType::class, [ 'required' => false, 'label' => 'accountowner', diff --git a/src/new/src/PSC/Shop/ContactBundle/Model/AccountType.php b/src/new/src/PSC/Shop/ContactBundle/Model/AccountType.php new file mode 100644 index 000000000..6757615da --- /dev/null +++ b/src/new/src/PSC/Shop/ContactBundle/Model/AccountType.php @@ -0,0 +1,10 @@ +accountType; + } + + public function setAccountType(AccountType $var): void + { + $this->accountType = $var; + } + public function getShops(): array { return $this->shops; @@ -118,6 +131,7 @@ class Contact { $this->layouterData = new LayouterData(); $this->account = new Account(); + $this->accountType = AccountType::PERSONAL; } public function getUuid(): string diff --git a/src/new/src/PSC/Shop/ContactBundle/Resources/translations/core_contact_edit.de.yaml b/src/new/src/PSC/Shop/ContactBundle/Resources/translations/core_contact_edit.de.yaml index 903c91123..5765e04c3 100755 --- a/src/new/src/PSC/Shop/ContactBundle/Resources/translations/core_contact_edit.de.yaml +++ b/src/new/src/PSC/Shop/ContactBundle/Resources/translations/core_contact_edit.de.yaml @@ -1,4 +1,5 @@ customer: Kunde +accountType: Kontotyp detail: bearbeiten Company: Firma Companyaddition: Firma Zusatz @@ -125,4 +126,4 @@ grossprice: Preis Brutto status: Status details: Details yes: Ja -no: Nein \ No newline at end of file +no: Nein diff --git a/src/new/src/PSC/Shop/ContactBundle/Resources/views/backend/edit/create.html.twig b/src/new/src/PSC/Shop/ContactBundle/Resources/views/backend/edit/create.html.twig index 0c574f5ab..4e11ed58b 100755 --- a/src/new/src/PSC/Shop/ContactBundle/Resources/views/backend/edit/create.html.twig +++ b/src/new/src/PSC/Shop/ContactBundle/Resources/views/backend/edit/create.html.twig @@ -300,18 +300,32 @@
-
-
{{ form_label(form.information) }}
-
-
-
- {{ form_widget(form.information) }} +
+
{{ form_label(form.information) }}
+
+
+
+ {{ form_widget(form.information) }} +
+ {{ form_errors(form.information) }} +
+
- {{ form_errors(form.information) }}
+
+
+
{{ form_label(form.accountType) }}
+
+
+
+ {{ form_widget(form.accountType) }} +
+ {{ form_errors(form.accountType) }} +
+
+
-
-
+
diff --git a/src/new/src/PSC/Shop/ContactBundle/Resources/views/backend/edit/edit.html.twig b/src/new/src/PSC/Shop/ContactBundle/Resources/views/backend/edit/edit.html.twig index 99c133a27..9eef5b4d0 100755 --- a/src/new/src/PSC/Shop/ContactBundle/Resources/views/backend/edit/edit.html.twig +++ b/src/new/src/PSC/Shop/ContactBundle/Resources/views/backend/edit/edit.html.twig @@ -270,7 +270,7 @@ -
+
{{ form_label(form.vonwo) }}
@@ -283,15 +283,28 @@
+
+
+
{{ form_label(form.information) }}
+
+
+
+ {{ form_widget(form.information) }} +
+ {{ form_errors(form.information) }} +
+
+
+
-
{{ form_label(form.information) }}
+
{{ form_label(form.accountType) }}
- {{ form_widget(form.information) }} + {{ form_widget(form.accountType) }}
- {{ form_errors(form.information) }} + {{ form_errors(form.accountType) }}
diff --git a/src/new/src/PSC/Shop/ContactBundle/Transformer/Model/Contact.php b/src/new/src/PSC/Shop/ContactBundle/Transformer/Model/Contact.php index 8129ecb97..7ac11dbb3 100755 --- a/src/new/src/PSC/Shop/ContactBundle/Transformer/Model/Contact.php +++ b/src/new/src/PSC/Shop/ContactBundle/Transformer/Model/Contact.php @@ -149,6 +149,8 @@ class Contact $contact->setEnable((bool)$contactEntity->isEnabled()); $contact->setCollectingOrders((bool)$contactEntity->getCollectingOrders()); + $contact->setAccountType($contactDoc->getAccountType()); + $contact->setCustom1((string)$contactDoc->getCustom1()); $contact->setCustom2((string)$contactDoc->getCustom2()); $contact->setCustom3((string)$contactDoc->getCustom3()); diff --git a/src/new/src/PSC/Shop/ContactBundle/Transformer/Order/Contact.php b/src/new/src/PSC/Shop/ContactBundle/Transformer/Order/Contact.php index 577c5136a..7524b2b94 100755 --- a/src/new/src/PSC/Shop/ContactBundle/Transformer/Order/Contact.php +++ b/src/new/src/PSC/Shop/ContactBundle/Transformer/Order/Contact.php @@ -9,17 +9,17 @@ use PSC\Shop\EntityBundle\Entity\Order; class Contact { - - public function __construct(private readonly EntityManagerInterface $entityManager, - private readonly \PSC\Shop\ContactBundle\Transformer\Model\Contact $modelTransformer, - private readonly DocumentManager $documentManager) - { + public function __construct( + private readonly EntityManagerInterface $entityManager, + private readonly \PSC\Shop\ContactBundle\Transformer\Model\Contact $modelTransformer, + private readonly DocumentManager $documentManager + ) { } public function toDb(\PSC\Shop\ContactBundle\Model\Contact $contact, Order $orderEntity) { $contact = $this->entityManager->getRepository(\PSC\Shop\EntityBundle\Entity\Contact::class)->findOneBy(['uuid' => $contact->getUuid()]); - if($contact) { + if ($contact) { $orderEntity->setContact($contact); } @@ -28,6 +28,5 @@ class Contact public function fromDb(\PSC\Shop\ContactBundle\Model\Contact $contact, PSCContact $contactEntity) { $this->modelTransformer->fromDb($contact, $contactEntity); - } } diff --git a/src/new/src/PSC/Shop/EntityBundle/Document/Contact.php b/src/new/src/PSC/Shop/EntityBundle/Document/Contact.php index be25d5e44..ac49486b5 100755 --- a/src/new/src/PSC/Shop/EntityBundle/Document/Contact.php +++ b/src/new/src/PSC/Shop/EntityBundle/Document/Contact.php @@ -16,6 +16,7 @@ namespace PSC\Shop\EntityBundle\Document; use Doctrine\ODM\MongoDB\Mapping\Annotations\Field; use Doctrine\ODM\MongoDB\Mapping\Annotations\Id; use Doctrine\ODM\MongoDB\Mapping\Annotations\Document; +use PSC\Shop\ContactBundle\Model\AccountType; #[Document] class Contact @@ -25,154 +26,154 @@ class Contact */ #[Id] protected $id; -/** - * @var string $uid - */ + /** + * @var string $uid + */ #[Field(type: 'string')] protected $uid; -/** - * @var string $kundenNr; - */ + /** + * @var string $kundenNr; + */ #[Field(type: 'string')] protected $kundenNr; -/** - * @var string $defaultPayment; - */ + /** + * @var string $defaultPayment; + */ #[Field(type: 'int')] protected $defaultPayment; -/** - * @var string $defaultShipment; - */ + /** + * @var string $defaultShipment; + */ #[Field(type: 'int')] protected $defaultShipment; -/** - * @var string $calcValue1; - */ + /** + * @var string $calcValue1; + */ #[Field(type: 'string')] protected $calcValue1; -/** - * @var string $calcValue2; - */ + /** + * @var string $calcValue2; + */ #[Field(type: 'string')] protected $calcValue2; -/** - * @var string $custom1; - */ + /** + * @var string $custom1; + */ #[Field(type: 'string')] protected $custom1; -/** - * @var string $custom2; - */ + /** + * @var string $custom2; + */ #[Field(type: 'string')] protected $custom2; -/** - * @var string $custom3; - */ + /** + * @var string $custom3; + */ #[Field(type: 'string')] protected $custom3; -/** - * @var string $custom4; - */ + /** + * @var string $custom4; + */ #[Field(type: 'string')] protected $custom4; -/** - * @var string $custom5; - */ + /** + * @var string $custom5; + */ #[Field(type: 'string')] protected $custom5; -/** - * @var string $custom6; - */ + /** + * @var string $custom6; + */ #[Field(type: 'string')] protected $custom6; -/** - * @var string $custom7; - */ + /** + * @var string $custom7; + */ #[Field(type: 'string')] protected $custom7; -/** - * @var string $custom8; - */ + /** + * @var string $custom8; + */ #[Field(type: 'string')] protected $custom8; -/** - * @var string $custom9; - */ + /** + * @var string $custom9; + */ #[Field(type: 'string')] protected $custom9; -/** - * @var string $custom10; - */ + /** + * @var string $custom10; + */ #[Field(type: 'string')] protected $custom10; -/** - * @var string $custom11; - */ + /** + * @var string $custom11; + */ #[Field(type: 'string')] protected $custom11; -/** - * @var string $custom12; - */ + /** + * @var string $custom12; + */ #[Field(type: 'string')] protected $custom12; -/** - * @var string $custom13; - */ + /** + * @var string $custom13; + */ #[Field(type: 'string')] protected $custom13; -/** - * @var string $custom14; - */ + /** + * @var string $custom14; + */ #[Field(type: 'string')] protected $custom14; -/** - * @var string $custom15; - */ + /** + * @var string $custom15; + */ #[Field(type: 'string')] protected $custom15; -/** - * @var string $custom16; - */ + /** + * @var string $custom16; + */ #[Field(type: 'string')] protected $custom16; -/** - * @var string $custom17; - */ + /** + * @var string $custom17; + */ #[Field(type: 'string')] protected $custom17; -/** - * @var string $custom18; - */ + /** + * @var string $custom18; + */ #[Field(type: 'string')] protected $custom18; -/** - * @var string $custom19; - */ + /** + * @var string $custom19; + */ #[Field(type: 'string')] protected $custom19; -/** - * @var string $custom20; - */ + /** + * @var string $custom20; + */ #[Field(type: 'string')] protected $custom20; -/** - * @var string $custom21; - */ + /** + * @var string $custom21; + */ #[Field(type: 'string')] protected $custom21; -/** - * @var string $custom22; - */ + /** + * @var string $custom22; + */ #[Field(type: 'string')] protected $custom22; -/** - * @var string $custom23; - */ + /** + * @var string $custom23; + */ #[Field(type: 'string')] protected $custom23; -/** - * @var string $custom24; - */ + /** + * @var string $custom24; + */ #[Field(type: 'string')] protected $custom24; #[Field(type: 'string')] @@ -182,39 +183,50 @@ class Contact #[Field(type: 'string')] protected $layouterCountryCode; -/** - * @var boolean $showOtherOrders; - */ + /** + * @var boolean $showOtherOrders; + */ #[Field(type: 'bool')] protected $showOtherOrders; -/** - * @var integer $showOtherOrdersAccountFilter; - */ + /** + * @var integer $showOtherOrdersAccountFilter; + */ #[Field(type: 'int')] protected $showOtherOrdersAccountFilter; -/** - * @var \PSC\Shop\EntityBundle\Entity\Account $showOtherOrdersAccount; - */ + /** + * @var \PSC\Shop\EntityBundle\Entity\Account $showOtherOrdersAccount; + */ #[Field(type: 'int')] protected $showOtherOrdersAccount; #[Field(type: 'hash')] protected $pluginSettings = []; -/** - * @var string $extraSettings; - */ + /** + * @var string $extraSettings; + */ #[Field(type: 'string')] protected $extraSettings; #[Field(type: 'string')] protected $layouterSettings; -/** - * @var float $priceFactor; - */ + /** + * @var float $priceFactor; + */ #[Field(type: 'float')] protected $priceFactor; -/** - * @return bool - */ + + #[Field(type: 'int')] + protected $accountType = 1; + + public function getAccountType(): AccountType + { + return AccountType::tryFrom($this->accountType); + } + + public function setAccountType(AccountType $type): void + { + $this->accountType = $type->value; + } + public function isShowOtherOrders() { return $this->showOtherOrders; @@ -816,7 +828,7 @@ class Contact public function getLayouterSettings(): array { - if($this->layouterSettings == "") { + if ($this->layouterSettings == "") { return []; } return json_decode($this->layouterSettings, true); diff --git a/src/new/src/PSC/Shop/EntityBundle/Document/Embed/Contact.php b/src/new/src/PSC/Shop/EntityBundle/Document/Embed/Contact.php new file mode 100644 index 000000000..dac88b0b0 --- /dev/null +++ b/src/new/src/PSC/Shop/EntityBundle/Document/Embed/Contact.php @@ -0,0 +1,37 @@ +uuid; + } + + public function setUuid(string $var): void + { + $this->uuid = $var; + } + + public function getAccountType(): AccountType + { + return AccountType::tryFrom($this->accountType); + } + + public function setAccountType(AccountType $var): void + { + $this->accountType = $var->value; + } +} diff --git a/src/new/src/PSC/Shop/EntityBundle/Document/Embed/ContactAddress.php b/src/new/src/PSC/Shop/EntityBundle/Document/Embed/ContactAddress.php index 4ecc849e2..a012ff056 100755 --- a/src/new/src/PSC/Shop/EntityBundle/Document/Embed/ContactAddress.php +++ b/src/new/src/PSC/Shop/EntityBundle/Document/Embed/ContactAddress.php @@ -1,16 +1,5 @@ - * @copyright 2012-2013 PrintshopCreator GmbH - * @license Private - * @link http://www.printshopcreator.de - */ - namespace PSC\Shop\EntityBundle\Document\Embed; use Doctrine\ODM\MongoDB\Mapping\Annotations\Field; @@ -21,11 +10,11 @@ use Doctrine\ODM\MongoDB\Mapping\Annotations\EmbeddedDocument; #[EmbeddedDocument] class ContactAddress { -/** - invoiceAddressSaved" : { "id" : "2", "uuid" : "0001-ac11000b-546c8de6-cedf-bb260533", "display" : true, - "install_id" : "1", "contact_id" : "1", "created" : "2014-11-19 13:32:38", "updated" : "2019-01-24 17:47:24", "type" : "1", "anrede" : "3", "pos" : null, "company" : "Musterfirma", "company2" : null, "kostenstellung" : null, "abteilung" : - null, "firstname" : "admin", "lastname" : "admin", "street" : "Musterstrasse", "house_number" : "1", "zip" : "12345", "city" : "Musterort", "phone" : "12345", "mobil_phone" : "", "email" : "admin@shop.de", "country" : "AL", "fax" : "", "position" : null, "ustid" : null, "zusatz1" : null, "zusatz2" : null, "kundenNr" : "" } - */ + /** + invoiceAddressSaved" : { "id" : "2", "uuid" : "0001-ac11000b-546c8de6-cedf-bb260533", "display" : true, + "install_id" : "1", "contact_id" : "1", "created" : "2014-11-19 13:32:38", "updated" : "2019-01-24 17:47:24", "type" : "1", "anrede" : "3", "pos" : null, "company" : "Musterfirma", "company2" : null, "kostenstellung" : null, "abteilung" : + null, "firstname" : "admin", "lastname" : "admin", "street" : "Musterstrasse", "house_number" : "1", "zip" : "12345", "city" : "Musterort", "phone" : "12345", "mobil_phone" : "", "email" : "admin@shop.de", "country" : "AL", "fax" : "", "position" : null, "ustid" : null, "zusatz1" : null, "zusatz2" : null, "kundenNr" : "" } + */ /** * @var string */ @@ -34,119 +23,119 @@ class ContactAddress #[Field(type: 'string')] private $uuid; -/** - * @var string - */ + /** + * @var string + */ #[Field(type: 'string')] private $lastname; -/** - * @var string - */ + /** + * @var string + */ #[Field(type: 'string')] private $street; -/** - * @var string - */ + /** + * @var string + */ #[Field(type: 'string')] private $houseNumber; -/** - * @var string - */ + /** + * @var string + */ #[Field(type: 'string')] private $zip; -/** - * @var string - */ + /** + * @var string + */ #[Field(type: 'string')] private $city; -/** - * @var string - */ + /** + * @var string + */ #[Field(type: 'string')] private $phone; -/** - * @var string - */ + /** + * @var string + */ #[Field(type: 'string')] private $mobilPhone; -/** - * @var string - */ + /** + * @var string + */ #[Field(type: 'string')] private $email; -/** - * @var integer - */ + /** + * @var integer + */ #[Field(type: 'int')] private $type; -/** - * @var string - */ + /** + * @var string + */ #[Field(type: 'string')] private $company; -/** - * @var string - */ + /** + * @var string + */ #[Field(type: 'string')] private $anrede; -/** - * @var string - */ + /** + * @var string + */ #[Field(type: 'string')] private $country; -/** - * @var string - */ + /** + * @var string + */ #[Field(type: 'string')] private $fax; -/** - * @var string - */ + /** + * @var string + */ #[Field(type: 'string')] private $company2; -/** - * @var string - */ + /** + * @var string + */ #[Field(type: 'string')] private $kostenstellung; -/** - * @var string - */ + /** + * @var string + */ #[Field(type: 'string')] private $abteilung; -/** - * @var string - */ + /** + * @var string + */ #[Field(type: 'string')] private $position; -/** - * @var string - */ + /** + * @var string + */ #[Field(type: 'string')] private $ustid; -/** - * @var string - */ + /** + * @var string + */ #[Field(type: 'string')] private $zusatz1; -/** - * @var string - */ + /** + * @var string + */ #[Field(type: 'string')] private $zusatz2; -/** - * @var int - */ + /** + * @var int + */ #[Field(type: 'int')] private $pos; -/** - * @var string - */ + /** + * @var string + */ #[Field(type: 'string')] private $kundenNr; -/** - * @return string - */ + /** + * @return string + */ public function getFirstname() { return $this->firstname; diff --git a/src/new/src/PSC/Shop/EntityBundle/Document/Instance.php b/src/new/src/PSC/Shop/EntityBundle/Document/Instance.php index 2d3991d99..f9f032397 100755 --- a/src/new/src/PSC/Shop/EntityBundle/Document/Instance.php +++ b/src/new/src/PSC/Shop/EntityBundle/Document/Instance.php @@ -16,40 +16,41 @@ namespace PSC\Shop\EntityBundle\Document; use Doctrine\ODM\MongoDB\Mapping\Annotations\Field; use Doctrine\ODM\MongoDB\Mapping\Annotations\Id; use Doctrine\ODM\MongoDB\Mapping\Annotations\Document; +use Symfony\Component\Security\Core\User\UserInterface; #[Document] -class Instance +class Instance implements UserInterface { #[Id] protected $id; -#[Field(type: 'string')] + #[Field(type: 'string')] protected $appId; -#[Field(type: 'string')] + #[Field(type: 'string')] protected $syncServer; -#[Field(type: 'string')] + #[Field(type: 'string')] protected $ftpUsername; -#[Field(type: 'string')] + #[Field(type: 'string')] protected $ftpPassword; -/** - * @var int $smtpPort; - */ + /** + * @var int $smtpPort; + */ #[Field(type: 'int')] protected $smtpPort; -/** - * @var boolean $smtpOwn - */ + /** + * @var boolean $smtpOwn + */ #[Field(type: 'bool')] protected $smtpOwn; -/** - * @var boolean $smtpTls - */ + /** + * @var boolean $smtpTls + */ #[Field(type: 'bool')] protected $smtpTls; -#[Field(type: 'string')] + #[Field(type: 'string')] protected $smtpHost; -#[Field(type: 'string')] + #[Field(type: 'string')] protected $smtpPassword; -#[Field(type: 'string')] + #[Field(type: 'string')] protected $smtpUsername; #[Field(type: 'string')] @@ -94,54 +95,54 @@ class Instance #[Field(type: 'int')] protected $parcelCancelationNumberStart = 0; -/** - * @var string $extraSettings; - */ + /** + * @var string $extraSettings; + */ #[Field(type: 'string')] protected $extraSettings; -/** - * @var string $maintenanceText; - */ + /** + * @var string $maintenanceText; + */ #[Field(type: 'string')] protected $maintenanceText; -/** - * @var string $maintenanceTitle; - */ + /** + * @var string $maintenanceTitle; + */ #[Field(type: 'string')] protected $maintenanceTitle; -/** - * @var bool $maintenanceMode; - */ + /** + * @var bool $maintenanceMode; + */ #[Field(type: 'bool')] protected $maintenanceMode; -/** - * @var string $supporturl; - */ + /** + * @var string $supporturl; + */ #[Field(type: 'string')] protected $supporturl; -/** - * @var string $supporttoken; - */ + /** + * @var string $supporttoken; + */ #[Field(type: 'string')] protected $supporttoken; -/** - * @var string $monitoringkey; - */ + /** + * @var string $monitoringkey; + */ #[Field(type: 'string')] protected $monitoringkey; -/** - * @var string $supportprotokoll; - */ + /** + * @var string $supportprotokoll; + */ #[Field(type: 'bool')] protected $supportprotokoll; -/** - * @var string $supportlogin; - */ + /** + * @var string $supportlogin; + */ #[Field(type: 'bool')] protected $supportlogin; -/** - * @return mixed - */ + /** + * @return mixed + */ public function getId() { return $this->id; @@ -631,6 +632,17 @@ class Instance { $this->parcelCancelationNumberStart = $parcelCancelationNumberStart; } + public function getRoles(): array + { + return ['ROLE_API']; + } + public function eraseCredentials() + { + } + public function getUserIdentifier(): string + { + return $this->id; + } diff --git a/src/new/src/PSC/Shop/EntityBundle/Document/Order.php b/src/new/src/PSC/Shop/EntityBundle/Document/Order.php index 7bb90b395..4b75b144d 100755 --- a/src/new/src/PSC/Shop/EntityBundle/Document/Order.php +++ b/src/new/src/PSC/Shop/EntityBundle/Document/Order.php @@ -88,6 +88,9 @@ class Order protected $deliveryAddressSaved; #[EmbedOne] protected $senderAddressSaved; + + #[EmbedOne] + protected $contactSaved; /** * @var boolean $withTax */ diff --git a/src/new/src/PSC/Shop/EntityBundle/Document/Payment.php b/src/new/src/PSC/Shop/EntityBundle/Document/Payment.php index 304f613ac..c2017be70 100755 --- a/src/new/src/PSC/Shop/EntityBundle/Document/Payment.php +++ b/src/new/src/PSC/Shop/EntityBundle/Document/Payment.php @@ -26,34 +26,38 @@ class Payment */ #[Id] protected $id; -/** - * @var string $uid - */ + /** + * @var string $uid + */ #[Field(type: 'string')] protected $uid; -/** - * @var string $paymentGateway - */ + /** + * @var string $paymentGateway + */ #[Field(type: 'string')] protected $paymentGateway; -/** - * @var array $paymentGatewaySettings - */ + /** + * @var array $paymentGatewaySettings + */ #[Field(type: 'hash')] protected $paymentGatewaySettings; -/** - * @var array $shippings; - */ + /** + * @var array $shippings; + */ #[Field(type: 'hash')] protected $shippings = []; #[Field(type: 'hash')] protected array $countrys = []; -/** - * @var array $pluginSettings; - */ + /** + * @var array $pluginSettings; + */ #[Field(type: 'hash')] protected $pluginSettings = []; + + #[Field(type: 'string')] + protected $paymentTerms; + public function __get($name) { // TODO: Implement __get() method. @@ -64,6 +68,15 @@ class Payment // TODO: Implement __set() method. } + public function getPaymentTerms(): string + { + return (string)$this->paymentTerms; + } + + public function setPaymentTerms(string $var): void + { + $this->paymentTerms = $var; + } /** * @return string */ diff --git a/src/new/src/PSC/Shop/EntityBundle/Entity/Contact.php b/src/new/src/PSC/Shop/EntityBundle/Entity/Contact.php index 086ae8a23..d9e4c9355 100755 --- a/src/new/src/PSC/Shop/EntityBundle/Entity/Contact.php +++ b/src/new/src/PSC/Shop/EntityBundle/Entity/Contact.php @@ -16,6 +16,7 @@ namespace PSC\Shop\EntityBundle\Entity; use Doctrine\Common\Collections\ArrayCollection; use Doctrine\Common\Collections\Collection; use Doctrine\ORM\Mapping as ORM; +use PSC\Shop\ContactBundle\Model\AccountType; use Ramsey\Uuid\Uuid; use Symfony\Component\Security\Core\User\PasswordAuthenticatedUserInterface; use Symfony\Component\Security\Core\User\UserInterface; @@ -63,7 +64,7 @@ class Contact implements UserInterface, PasswordAuthenticatedUserInterface, \Ser public $layouterEmail; public $layouterCountryCode; public $layouterCountryName; - + public $accountType = AccountType::PERSONAL; public $showOtherOrders = false; public $showOtherOrdersAccountFilter; public $showOtherOrdersAccount; diff --git a/src/new/src/PSC/Shop/EntityBundle/Entity/Payment.php b/src/new/src/PSC/Shop/EntityBundle/Entity/Payment.php index 208c82cac..039db8c5e 100755 --- a/src/new/src/PSC/Shop/EntityBundle/Entity/Payment.php +++ b/src/new/src/PSC/Shop/EntityBundle/Entity/Payment.php @@ -31,11 +31,11 @@ class Payment extends Paymenttype protected $shippings = []; /** @var array */ protected $countrys = []; -/** @var string */ + protected $paymentTerms; protected $paymentGateway; -/** @var array */ + /** @var array */ protected $paymentGatewaySettings = []; -/** @var array */ + /** @var array */ protected $pluginSettings = []; public function __get($name) { @@ -59,83 +59,83 @@ class Payment extends Paymenttype #[ORM\Id] #[ORM\GeneratedValue(strategy: 'AUTO')] protected $uid; -/** - * Titel der Versandart - * - * @var string - */ + /** + * Titel der Versandart + * + * @var string + */ #[ORM\Column(name: 'title', type: 'string', length: 255)] protected $title; -/** - * TrustedShop Name - * - * @var string - */ + /** + * TrustedShop Name + * + * @var string + */ #[ORM\Column(name: 'trustedshop_name', type: 'string', length: 255)] protected $trustedShopName; -/** - * Description der Versandart - * - * @var string - */ + /** + * Description der Versandart + * + * @var string + */ #[ORM\Column(name: 'description', type: 'string')] protected $description; -/** - * Einmalige Kosten der Zahlart - * - * @var float - */ + /** + * Einmalige Kosten der Zahlart + * + * @var float + */ #[ORM\Column(name: 'wert', type: 'float')] protected $price; -/** - * Enable - * - * @var boolean - */ + /** + * Enable + * + * @var boolean + */ #[ORM\Column(name: 'enable', type: 'boolean')] protected $enable; -/** - * Privat - * - * @var boolean - */ + /** + * Privat + * + * @var boolean + */ #[ORM\Column(name: 'private', type: 'boolean')] protected $private; -/** - * Prozentual - * - * @var boolean - */ + /** + * Prozentual + * + * @var boolean + */ #[ORM\Column(name: 'prozent', type: 'boolean')] protected $percent; -/** - * Position der Versandart - * - * @var float - */ + /** + * Position der Versandart + * + * @var float + */ #[ORM\Column(name: 'pos', type: 'integer')] protected $pos; -/** - * Shop zu welcher die Versandart gehört - * - * @var int - */ + /** + * Shop zu welcher die Versandart gehört + * + * @var int + */ #[ORM\ManyToOne(targetEntity: 'Shop')] #[ORM\JoinColumn(name: 'shop_id', referencedColumnName: 'id')] protected $shop; -/** - * Install - * - * @var int - */ + /** + * Install + * + * @var int + */ #[ORM\ManyToOne(targetEntity: 'Install')] #[ORM\JoinColumn(name: 'install_id', referencedColumnName: 'id')] protected $install; -/** - * MWert - * - * @var integer - */ + /** + * MWert + * + * @var integer + */ #[ORM\Column(name: 'mwert', type: 'decimal')] protected $taxClass; @@ -145,11 +145,11 @@ class Payment extends Paymenttype #[ORM\Column(name: 'price_from', type: 'integer')] protected int $priceFrom = 0; -/** - * Gibt die Id zurück - * - * @return int - */ + /** + * Gibt die Id zurück + * + * @return int + */ public function getUID() { return $this->uid; @@ -401,6 +401,16 @@ class Payment extends Paymenttype $this->paymentGateway = $paymentGateway; } + public function getPaymentTerms(): string + { + return $this->paymentTerms; + } + + public function setPaymentTerms(string $paymentTerms): void + { + $this->paymentTerms = $paymentTerms; + } + /** * @return array */ diff --git a/src/new/src/PSC/Shop/OrderBundle/Model/Base.php b/src/new/src/PSC/Shop/OrderBundle/Model/Base.php index 1522367b6..c759004df 100755 --- a/src/new/src/PSC/Shop/OrderBundle/Model/Base.php +++ b/src/new/src/PSC/Shop/OrderBundle/Model/Base.php @@ -57,9 +57,6 @@ abstract class Base */ #[\OpenApi\Attributes\Property(ref: new Model(type: \PSC\Shop\ShippingBundle\Model\Shipping::class))] private Shipping $shipping; - /** - * @var Payment - */ #[\OpenApi\Attributes\Property(ref: new Model(type: \PSC\Shop\PaymentBundle\Model\Payment::class))] private $payment; @@ -395,7 +392,7 @@ abstract class Base */ public function getGross() { - return $this->gross; + return $this->net + $this->vat; } /** @@ -579,7 +576,7 @@ abstract class Base } } - if(!$exists) { + if (!$exists) { $tmp[] = $tax; } $this->taxes = $tmp; @@ -688,13 +685,23 @@ abstract class Base public function getWeight(): int { $sum = 0; - foreach($this->positions as $position) { + foreach ($this->positions as $position) { $sum += $position->getWeight(); } return $sum; } + public function getPositionsNet(): int + { + $sum = 0; + foreach ($this->positions as $position) { + $sum += $position->getPrice()->getAllNet(); + } + + return $sum; + } + public function getShop(): Shop { return $this->shop; diff --git a/src/new/src/PSC/Shop/OrderBundle/Model/Order/Contact.php b/src/new/src/PSC/Shop/OrderBundle/Model/Order/Contact.php new file mode 100644 index 000000000..11114b4da --- /dev/null +++ b/src/new/src/PSC/Shop/OrderBundle/Model/Order/Contact.php @@ -0,0 +1,37 @@ +accountType = AccountType::PERSONAL; + } + + public function getUuid(): string + { + return $this->uuid; + } + + public function setUuid(string $uuid): void + { + $this->uuid = $uuid; + } + + public function getAccountType(): AccountType + { + return $this->accountType; + } + + public function setAccountType(AccountType $var): void + { + $this->accountType = $var; + } +} diff --git a/src/new/src/PSC/Shop/OrderBundle/Service/Calc.php b/src/new/src/PSC/Shop/OrderBundle/Service/Calc.php index 7038076b5..9abbe44ad 100755 --- a/src/new/src/PSC/Shop/OrderBundle/Service/Calc.php +++ b/src/new/src/PSC/Shop/OrderBundle/Service/Calc.php @@ -6,6 +6,7 @@ use Brick\Money\Money; use PSC\Component\ApiBundle\Transformer\Shop; use PSC\Shop\PaymentBundle\Service\Price; use PSC\Shop\PaymentBundle\Transformer\Payment; +use PSC\Shop\ProductBundle\Interfaces\ICalcNeedContact; use PSC\Shop\ShippingBundle\Transformer\Shipping; use PSC\Shop\VoucherBundle\Service\Calc as CalcVoucher; use PSC\Shop\VoucherBundle\Transformer\Voucher as PSCVoucher; @@ -13,8 +14,8 @@ use PSC\System\PluginBundle\Service\ProductType; class Calc { - - public function __construct(private readonly Price $pricePayment, + public function __construct( + private readonly Price $pricePayment, private readonly Shop $shopTransformer, private readonly \PSC\Shop\ShippingBundle\Service\Price $priceShipping, private readonly ProductType $productTypeRegistry, @@ -30,9 +31,9 @@ class Calc public function calcOrder(\PSC\Shop\OrderBundle\Model\Base $order) { - if($order->getShop()->getUuid() != "") { + if ($order->getShop()->getUuid() != "") { $this->shopTransformer->parseModel($order->getShop()); - } + } $priceNet = Money::ofMinor(0, 'EUR'); $priceVat = Money::ofMinor(0, 'EUR'); $priceGross = Money::ofMinor(0, 'EUR'); @@ -53,11 +54,14 @@ class Calc $priceGross = $priceGross->plus(Money::ofMinor($order->getShipping()->getCalcPrice()->gross, 'EUR')); $order->setShippingCosts(Money::ofMinor($order->getShipping()->getCalcPrice()->net, 'EUR')->getMinorAmount()->toInt()); $order->addTax($order->getShipping()->getCalcPrice()->tax); - foreach($order->getPositions() as $position) { + foreach ($order->getPositions() as $position) { $position->getProduct()->setShopUuid($order->getShop()->getUuid()); if ($this->productTypeRegistry->getProductType($position->getProduct()->getSpecialProductTypeObject()->getTyp())) { $specialProductTransformer = $this->productTypeRegistry->getProductType($position->getProduct()->getSpecialProductTypeObject()->getTyp())->getProducer(); - if($specialProductTransformer) { + if ($specialProductTransformer) { + if ($specialProductTransformer instanceof ICalcNeedContact) { + $specialProductTransformer->setContact($order->getContact()); + } $specialProductTransformer->setProduct($position->getProduct()); $specialProductTransformer->calcPriceForOrderPosition($position); } @@ -73,7 +77,7 @@ class Calc $order->setVat($priceVat->getMinorAmount()->toInt()); $order->setGross($priceGross->getMinorAmount()->toInt()); $this->voucherTransformer->parseModel($order); - $this->voucherCalcService->calc($order); + $this->voucherCalcService->calc($order); $this->vatCalcService->calcVat($order); } } diff --git a/src/new/src/PSC/Shop/OrderBundle/Service/Order.php b/src/new/src/PSC/Shop/OrderBundle/Service/Order.php index fecb423b0..41fc57335 100755 --- a/src/new/src/PSC/Shop/OrderBundle/Service/Order.php +++ b/src/new/src/PSC/Shop/OrderBundle/Service/Order.php @@ -7,6 +7,7 @@ use Doctrine\ODM\MongoDB\DocumentManager; use Doctrine\ORM\EntityManagerInterface; use PSC\Shop\ContactBundle\Model\Contact; use PSC\Shop\ContactBundle\Service\Address; +use PSC\Shop\EntityBundle\Entity\Order as PSCOrder; use PSC\Shop\EntityBundle\Entity\Orderpos; use PSC\Shop\OrderBundle\Model\Base as PSCBase; use PSC\Shop\OrderBundle\Transformer\Order\Position; @@ -286,7 +287,7 @@ class Order * @param $uuid * @return \PSC\Shop\OrderBundle\Model\Order */ - public function getOrderByUuid($uuid, $load_only_order = false) + public function getOrderByUuid($uuid, $load_only_order = false): PSCBase { $this->load_only_order = $load_only_order; $orderRepo = $this->entityManager->getRepository('PSC\Shop\EntityBundle\Entity\Order'); diff --git a/src/new/src/PSC/Shop/OrderBundle/Transformer/Order.php b/src/new/src/PSC/Shop/OrderBundle/Transformer/Order.php index 94116f5ec..b233dcaa4 100755 --- a/src/new/src/PSC/Shop/OrderBundle/Transformer/Order.php +++ b/src/new/src/PSC/Shop/OrderBundle/Transformer/Order.php @@ -65,8 +65,8 @@ class Order extends Base $order->setPaymentRef((string)$orderDoc->getPaymentRef()); $order->setPaymentGateway((string)$orderDoc->getPaymentGateway()); $order->setTaxes([]); - foreach($orderEntity->getMwertAlle() as $row) { - if(isset($row['name'])) { + foreach ($orderEntity->getMwertAlle() as $row) { + if (isset($row['name'])) { $order->addTax(new Tax($row['name'], $row['value'], TaxEnum::tryFrom($row['type']))); } } @@ -78,10 +78,6 @@ class Order extends Base $this->paymentTransformer->fromDb($order->getPayment(), $orderEntity->getPaymentType()); $this->shippingTransformer->fromDb($order->getShipping(), $orderEntity->getShippingType()); - /** - * DOC -*/ - $invoice = new \PSC\Shop\ContactBundle\Model\Address(); if ($orderDoc->getInvoiceAddressSaved() == null) { $this->addressTransformer->fromDb($invoice, new ContactAddress()); @@ -111,15 +107,15 @@ class Order extends Base $order->setPluginSettings($orderDoc->getPluginSettings()); $order->setSendDataToShipping($orderDoc->isSendDataToShipping()); - if($orderDoc->getVouchers() != "") { + if ($orderDoc->getVouchers() != "") { $order->setVouchers($this->serializer->deserialize($orderDoc->getVouchers(), Voucher::class.'[]', 'json')); } - if($orderDoc->getDiscounts() != "") { + if ($orderDoc->getDiscounts() != "") { $net = 0; $gross = 0; $vat = 0; $order->setDiscounts($this->serializer->deserialize($orderDoc->getDiscounts(), Discount::class.'[]', 'json')); - foreach($order->getDiscounts() as $discounts) { + foreach ($order->getDiscounts() as $discounts) { $net += $discounts->getPrice()->getNet(); $vat += $discounts->getPrice()->getVat(); $gross += $discounts->getPrice()->getGross(); @@ -149,7 +145,7 @@ class Order extends Base $orderEntity->setUseAccountAsInvoice(false); $mwertAlle = []; - foreach($order->getAllTaxes() as $tax) { + foreach ($order->getAllTaxes() as $tax) { $mwertAlle[] = ['name' => $tax->getName(), 'value' => $tax->getValue(), 'type' => $tax->getType()->value]; } $orderEntity->setMwertAlle(json_encode($mwertAlle)); @@ -167,10 +163,6 @@ class Order extends Base $this->contactTransformer->toDb($order->getContact(), $orderEntity); $this->accountTransformer->toDb($order->getAccount(), $orderEntity); - /** - * DOC -*/ - $invoiceDoc = new ContactAddress(); $this->addressTransformer->toDb($order->getInvoiceAddress(), $invoiceDoc); $orderDoc->setInvoiceAddressSaved($invoiceDoc); diff --git a/src/new/src/PSC/Shop/PaymentBundle/Form/Backend/PaymentType.php b/src/new/src/PSC/Shop/PaymentBundle/Form/Backend/PaymentType.php index 7ddede476..818b38dd8 100755 --- a/src/new/src/PSC/Shop/PaymentBundle/Form/Backend/PaymentType.php +++ b/src/new/src/PSC/Shop/PaymentBundle/Form/Backend/PaymentType.php @@ -90,6 +90,7 @@ class PaymentType extends AbstractType ->add('priceFrom', IntegerType::class, array('label' => 'priceof', 'required' => true, 'empty_data' => 0)) ->add('priceTo', IntegerType::class, array('label' => 'priceuntil', 'required' => true, 'empty_data' => 0)) ->add('description', TextareaType::class, array('label' => 'description', 'required' => false)) + ->add('paymentTerms', TextareaType::class, array('label' => 'paymentTerms', 'required' => false)) ->add('trustedShopName', TextType::class, array('label' => 'TrustedShopName', 'required' => false)) ->add('paymentGateway', ChoiceType::class, array( 'label' => 'PaymentGateway', @@ -110,7 +111,7 @@ class PaymentType extends AbstractType 'multiple' => true, 'label' => 'countrys', )); -/** @var \PSC\System\PluginBundle\Form\Interfaces\Field $field */ + /** @var \PSC\System\PluginBundle\Form\Interfaces\Field $field */ foreach ($this->fields->getFields(\PSC\System\PluginBundle\Form\Interfaces\Field::Payment) as $field) { $builder->add($field->buildForm($this->formFactory->createNamedBuilder($field->getGroup()), $options)); } diff --git a/src/new/src/PSC/Shop/PaymentBundle/Resources/translations/core_payment_edit.de.yaml b/src/new/src/PSC/Shop/PaymentBundle/Resources/translations/core_payment_edit.de.yaml index 41da8fbd6..600c78fa9 100755 --- a/src/new/src/PSC/Shop/PaymentBundle/Resources/translations/core_payment_edit.de.yaml +++ b/src/new/src/PSC/Shop/PaymentBundle/Resources/translations/core_payment_edit.de.yaml @@ -1,5 +1,7 @@ Uid: Uid active: Aktiv +paymentTerms: Zahlungsbedingung +paymentTermsExample: 'Beispiel: Zahlbar in 14 Tagen bis zum {{ order.created|date_modify("+14 day")|date("d.m.Y") }}' Pos: Pos Name: Name cost: Kosten @@ -25,4 +27,4 @@ Filter: Filter Gateway: Gateway back: Zurück -save: Speichern \ No newline at end of file +save: Speichern diff --git a/src/new/src/PSC/Shop/PaymentBundle/Resources/views/backend/edit/create.html.twig b/src/new/src/PSC/Shop/PaymentBundle/Resources/views/backend/edit/create.html.twig index 5778327b6..2e0ea2d20 100755 --- a/src/new/src/PSC/Shop/PaymentBundle/Resources/views/backend/edit/create.html.twig +++ b/src/new/src/PSC/Shop/PaymentBundle/Resources/views/backend/edit/create.html.twig @@ -125,6 +125,19 @@
{{ form_widget(form.description) }} +

+ {{ "paymentTermsExample"|trans}} +

+
+
+
+ +
+
+
+ +
+ {{ form_widget(form.paymentTerms) }}
@@ -188,4 +201,4 @@
{{ form_end(form) }} -{% endblock %} \ No newline at end of file +{% endblock %} diff --git a/src/new/src/PSC/Shop/PaymentBundle/Resources/views/backend/edit/edit.html.twig b/src/new/src/PSC/Shop/PaymentBundle/Resources/views/backend/edit/edit.html.twig index 3963e1907..a75104033 100755 --- a/src/new/src/PSC/Shop/PaymentBundle/Resources/views/backend/edit/edit.html.twig +++ b/src/new/src/PSC/Shop/PaymentBundle/Resources/views/backend/edit/edit.html.twig @@ -129,6 +129,19 @@ +
+
+
+ +
+ {{ form_widget(form.paymentTerms) }} +

+ {{ "paymentTermsExample"|trans}} +

+
+
+
+
diff --git a/src/new/src/PSC/Shop/ProductBundle/Interfaces/ICalcNeedContact.php b/src/new/src/PSC/Shop/ProductBundle/Interfaces/ICalcNeedContact.php new file mode 100644 index 000000000..5ed0963cb --- /dev/null +++ b/src/new/src/PSC/Shop/ProductBundle/Interfaces/ICalcNeedContact.php @@ -0,0 +1,10 @@ +internalQueues as $queue) { - $queue->execute(); - } - $queues = $this->mongoDb - ->getRepository('PSC\Shop\EntityBundle\Document\Queue') - ->findBy( - array('eventType' => 'system_plugin_every_run', 'active' => true), [ - 'pos' => 'ASC' - ] - ); - /** - * @var Queue $queue -*/ - foreach ($queues as $queue) { - $queueObj = $this->queueRegistry->get($queue->getQueueType()); - try { - $success = $queueObj->execute(new EveryRun(), $queue); - } catch (\Exception $exception) { - $this->logService->createLogEntry(new Shop(), LogEntry::ERROR, "Cron", "", $exception->getMessage(), []); + $store = new FlockStore(); + $factory = new LockFactory($store); + + $lock = $factory->createLock('doQueue'); + + if ($lock->acquire()) { + foreach ($this->internalQueues as $queue) { + $queue->execute(); } - } - $this->eventManager->clearManager(); - /** - * @var Job $job -*/ - foreach ($this->eventManager->getAll() as $job) { - $canBeRemoved = true; - $event = $this->eventRegistry->get($job->getEvent()); + $queues = $this->mongoDb + ->getRepository('PSC\Shop\EntityBundle\Document\Queue') + ->findBy( + array('eventType' => 'system_plugin_every_run', 'active' => true), + [ + 'pos' => 'ASC' + ] + ); - if ($event instanceof ClearCache) { - $fs = new Filesystem(); - //$fs->remove($this->kernel->getCacheDir()); - } elseif($event instanceof InstallPlugin) { - $event->setData($job->getData()); - $event->setShop($job->getShop()); - $install = $this->containerService->get($event->getInstallClass()); - $install->execute(); + /** + * @var Queue $queue + */ + foreach ($queues as $queue) { + $queueObj = $this->queueRegistry->get($queue->getQueueType()); + try { + $success = $queueObj->execute(new EveryRun(), $queue); + } catch (\Exception $exception) { + $this->logService->createLogEntry(new Shop(), LogEntry::ERROR, "Cron", "", $exception->getMessage(), []); + } + } + $this->eventManager->clearManager(); + /** + * @var Job $job + */ + foreach ($this->eventManager->getAll() as $job) { + $canBeRemoved = true; - $plugin = $this->mongoDb - ->getRepository(Plugin::class) - ->findOneBy(array('id' => (string)$event->getPlugin())); - $plugin->setShouldBeInstalled(false); + $event = $this->eventRegistry->get($job->getEvent()); - $this->mongoDb->persist($plugin); + if ($event instanceof ClearCache) { + $fs = new Filesystem(); + //$fs->remove($this->kernel->getCacheDir()); + } elseif ($event instanceof InstallPlugin) { + $event->setData($job->getData()); + $event->setShop($job->getShop()); + $install = $this->containerService->get($event->getInstallClass()); + $install->execute(); - } elseif($event instanceof DeInstallPlugin) { - $event->setData($job->getData()); - $event->setShop($job->getShop()); - $deinstall = $this->containerService->get($event->getDeInstallClass()); - $deinstall->execute(); + $plugin = $this->mongoDb + ->getRepository(Plugin::class) + ->findOneBy(array('id' => (string)$event->getPlugin())); + $plugin->setShouldBeInstalled(false); - $plugin = $this->mongoDb - ->getRepository(Plugin::class) - ->findOneBy(array('id' => (string)$event->getPlugin())); - $plugin->setInstalled(false); - $plugin->setShouldBeDeInstalled(false); + $this->mongoDb->persist($plugin); - $this->mongoDb->persist($plugin); + } elseif ($event instanceof DeInstallPlugin) { + $event->setData($job->getData()); + $event->setShop($job->getShop()); + $deinstall = $this->containerService->get($event->getDeInstallClass()); + $deinstall->execute(); - } elseif($event instanceof InternalEvent) { - $event->setData($job->getData()); - $event->setShop($job->getShop()); - } else { - $event->setData($job->getData()); - $event->setShop($job->getShop()); + $plugin = $this->mongoDb + ->getRepository(Plugin::class) + ->findOneBy(array('id' => (string)$event->getPlugin())); + $plugin->setInstalled(false); + $plugin->setShouldBeDeInstalled(false); - $queues = $this->mongoDb - ->getRepository(Queue::class) - ->findBy( - array( - 'shop' => $job->getShop(), - 'active' => true, - 'eventType' => $job->getEvent() - ), [ - 'pos' => 'ASC' - ] - ); + $this->mongoDb->persist($plugin); + } elseif ($event instanceof InternalEvent) { + $event->setData($job->getData()); + $event->setShop($job->getShop()); + } else { + $event->setData($job->getData()); + $event->setShop($job->getShop()); - /** - * @var Queue $queue -*/ - foreach ($queues as $queue) { - if (!$event->doProcess($queue)) { - continue; - } + $queues = $this->mongoDb + ->getRepository(Queue::class) + ->findBy( + array( + 'shop' => $job->getShop(), + 'active' => true, + 'eventType' => $job->getEvent() + ), + [ + 'pos' => 'ASC' + ] + ); - $queueObj = $this->queueRegistry->get($queue->getQueueType()); /** - * @var JobLog $jobLog -*/ - $jobLog = $this->mongoDb->getRepository(JobLog::class)->findOneBy( - [ - 'job' => $job->getId(), - 'queue' => $queue->getId() - ] - ); - - if ($jobLog) { - if ($jobLog->getError() == "") { + * @var Queue $queue + */ + foreach ($queues as $queue) { + if (!$event->doProcess($queue)) { continue; } - $jobLog->incCount(); - if ($jobLog->getCount() > 2 && $jobLog->getError() != "") { - $canBeRemoved = false; - continue; - } - } else { - $jobLog = new JobLog(); - $jobLog->setJob($job->getId()); - $jobLog->setQueue($queue->getId()); - } - $jobLog->setUpdated(new \DateTime()); - try { - $success = $queueObj->execute($event, $queue); + $queueObj = $this->queueRegistry->get($queue->getQueueType()); - if (!$success) { - $canBeRemoved = false; - $jobLog->setError($queueObj->getError()); + /** + * @var JobLog $jobLog + */ + $jobLog = $this->mongoDb->getRepository(JobLog::class)->findOneBy( + [ + 'job' => $job->getId(), + 'queue' => $queue->getId() + ] + ); + + if ($jobLog) { + if ($jobLog->getError() == "") { + continue; + } + $jobLog->incCount(); + + if ($jobLog->getCount() > 2 && $jobLog->getError() != "") { + $canBeRemoved = false; + continue; + } } else { - $jobLog->setError(""); + $jobLog = new JobLog(); + $jobLog->setJob($job->getId()); + $jobLog->setQueue($queue->getId()); } - $this->mongoDb->persist($jobLog); - $this->mongoDb->flush(); - } catch (\Exception $e) { - $response = $e->getResponse(); - $message = $response->getContent(false); - $jobLog->setError($e->getMessage()); - $this->mongoDb->persist($jobLog); - $this->mongoDb->flush(); + $jobLog->setUpdated(new \DateTime()); + try { + $success = $queueObj->execute($event, $queue); - $canBeRemoved = false; + if (!$success) { + $canBeRemoved = false; + $jobLog->setError($queueObj->getError()); + } else { + $jobLog->setError(""); + } + $this->mongoDb->persist($jobLog); + $this->mongoDb->flush(); + } catch (\Exception $e) { + $response = $e->getResponse(); + $message = $response->getContent(false); + $jobLog->setError($e->getMessage()); + $this->mongoDb->persist($jobLog); + $this->mongoDb->flush(); + + $canBeRemoved = false; + } } } + + if ($canBeRemoved) { + $this->eventManager->removeJob($job); + } } - if ($canBeRemoved) { - $this->eventManager->removeJob($job); + if (count($this->eventManager->getAll()) == 0) { + $this->mongoDb->createQueryBuilder(JobLog::class)->remove()->getQuery()->execute(); } } - if (count($this->eventManager->getAll()) == 0) { - $this->mongoDb->createQueryBuilder(JobLog::class)->remove()->getQuery()->execute(); - } - date_default_timezone_set('Europe/Berlin'); $output->writeln("Successfully ".date('Y-m-d H:i:s')); + return 0; } } diff --git a/src/new/src/PSC/Shop/SettingsBundle/Form/Backend/ShopSettingsType.php b/src/new/src/PSC/Shop/SettingsBundle/Form/Backend/ShopSettingsType.php index 2fe975d52..45bfc29ab 100755 --- a/src/new/src/PSC/Shop/SettingsBundle/Form/Backend/ShopSettingsType.php +++ b/src/new/src/PSC/Shop/SettingsBundle/Form/Backend/ShopSettingsType.php @@ -93,6 +93,8 @@ class ShopSettingsType extends AbstractType ->add('senderFax', TextType::class, array('required' => false, 'label' => 'Fax')) ->add('senderMobile', TextType::class, array('required' => false, 'label' => 'mobilephonenumber')) ->add('senderEmail', TextType::class, array('required' => false, 'label' => 'EMail')) + ->add('senderIban', TextType::class, array('required' => false, 'label' => 'Iban')) + ->add('senderLId', TextType::class, array('required' => false, 'label' => 'Leitweg Id')) ->add('priceFactor', NumberType::class, array('required' => false, 'label' => 'Factor', 'scale' => 5, 'html5' => true, 'attr' => array( diff --git a/src/new/src/PSC/Shop/UserBundle/Security/ApiKey/InstanceProvider.php b/src/new/src/PSC/Shop/UserBundle/Security/ApiKey/InstanceProvider.php new file mode 100644 index 000000000..3fb48e555 --- /dev/null +++ b/src/new/src/PSC/Shop/UserBundle/Security/ApiKey/InstanceProvider.php @@ -0,0 +1,48 @@ +repository->getRepository(Instance::class)->find($user->getId()); + + return $refreshedUser; + } + + public function supportsClass($class) + { + return Instance::class == $class; + } + + public function loadUserByIdentifier(string $identifier): UserInterface + { + + $instance = $this->repository + ->getRepository(\PSC\Shop\EntityBundle\Document\Instance::class) + ->findOneBy(['supporttoken' => $identifier]); + + if (null === $instance) { + + throw new \Symfony\Component\Security\Core\Exception\UsernameNotFoundException(sprintf('Instance "%s" not found.', $identifier)); + } + + return $instance; + } +} diff --git a/src/new/src/PSC/Shop/UserBundle/Security/ApiKey/ShopProvider.php b/src/new/src/PSC/Shop/UserBundle/Security/ApiKey/ShopProvider.php new file mode 100644 index 000000000..89dc4d48f --- /dev/null +++ b/src/new/src/PSC/Shop/UserBundle/Security/ApiKey/ShopProvider.php @@ -0,0 +1,50 @@ +repository->find($user->getId()); + + return $refreshedUser; + } + + /** + * {@inheritDoc} + */ + public function supportsClass($class) + { + return Shop::class == $class; + } + + public function loadUserByIdentifier(string $identifier): UserInterface + { + + $user = $this->repository->getShopByApiKey($identifier); + + if (null === $user) { + + throw new \Symfony\Component\Security\Core\Exception\UsernameNotFoundException(sprintf('Shop "%s" not found.', $identifier)); + } + + return $user; + } +} diff --git a/src/new/src/PSC/Shop/UserBundle/Security/ApiKeyHandler.php b/src/new/src/PSC/Shop/UserBundle/Security/ApiKeyHandler.php index 5bf39ec90..9ee55169c 100644 --- a/src/new/src/PSC/Shop/UserBundle/Security/ApiKeyHandler.php +++ b/src/new/src/PSC/Shop/UserBundle/Security/ApiKeyHandler.php @@ -2,6 +2,7 @@ namespace PSC\Shop\UserBundle\Security; +use Doctrine\ODM\MongoDB\DocumentManager; use PSC\Shop\EntityBundle\Repository\ShopRepository; use PSC\Shop\UserBundle\Model\ApiUser; use Symfony\Component\Security\Core\Exception\BadCredentialsException; @@ -11,7 +12,8 @@ use Symfony\Component\Security\Http\Authenticator\Passport\Badge\UserBadge; class ApiKeyHandler implements AccessTokenHandlerInterface { public function __construct( - private ShopRepository $repository + private ShopRepository $repository, + private readonly DocumentManager $documentManager ) { } @@ -20,7 +22,17 @@ class ApiKeyHandler implements AccessTokenHandlerInterface // e.g. query the "access token" database to search for this token $accessToken = $this->repository->findOneBy(['apiKey' => $apiToken]); if (null === $accessToken) { - throw new BadCredentialsException('Invalid credentials.'); + $instance = $this->documentManager + ->getRepository(\PSC\Shop\EntityBundle\Document\Instance::class) + ->findOneBy(['supporttoken' => $apiToken]); + + if (!$instance) { + throw new BadCredentialsException('Invalid credentials.'); + } else { + return new UserBadge($instance->getId(), function () use ($instance) { + return $instance; + }); + } } // and return a UserBadge object containing the user identifier from the found token diff --git a/src/new/src/PSC/Shop/UserBundle/Security/Authenticator.php b/src/new/src/PSC/Shop/UserBundle/Security/Authenticator.php deleted file mode 100755 index bf3a11ba0..000000000 --- a/src/new/src/PSC/Shop/UserBundle/Security/Authenticator.php +++ /dev/null @@ -1,119 +0,0 @@ -encoder = $encoder; - $this->entityManager = $entityManager; - $this->urlGenerator = $urlGenerator; - $this->csrfTokenManager = $csrfTokenManager; - } - - protected function getLoginUrl() - { - return $this->urlGenerator->generate(self::LOGIN_ROUTE); - } - - public function supports(Request $request) - { - return self::LOGIN_ROUTE === $request->attributes->get('_route') - && $request->isMethod('POST'); - } - - public function getCredentials(Request $request) - { - $credentials = [ - 'username' => $request->request->get('username'), - 'password' => $request->request->get('password'), - 'csrf_token' => $request->request->get('_csrf_token'), - ]; - $request->getSession()->set( - Security::LAST_USERNAME, - $credentials['username'] - ); - - return $credentials; - } - - public function getUser($credentials, UserProviderInterface $userProvider) - { - $token = new CsrfToken('authenticate', $credentials['csrf_token']); - if (!$this->csrfTokenManager->isTokenValid($token)) { - throw new InvalidCsrfTokenException(); - } - - $user = $userProvider->loadUserByUsername($credentials['username']); - - if (!$user) { - // fail authentication with a custom error - throw new CustomUserMessageAuthenticationException('User could not be found.'); - } - $_SESSION['Zend_Auth']['storage']['self_email'] = $user->getUsername(); - $_SESSION['Zend_Auth']['storage']['id'] = $user->getId(); - return $user; - } - - public function checkCredentials($credentials, UserInterface $user) - { - return password_verify($credentials['password'], $user->getPassword()); - } - - public function onAuthenticationSuccess(Request $request, TokenInterface $token, $providerKey) - { - return new RedirectResponse(self::LOGIN_SUCCESS_ROUTE); - } - - public function getPassword($credentials): ?string - { - return $credentials['password']; - } -} diff --git a/src/new/src/PSC/Shop/UserBundle/Security/LoginFormAuthenticator.php b/src/new/src/PSC/Shop/UserBundle/Security/LoginFormAuthenticator.php deleted file mode 100755 index 8d1a8ac81..000000000 --- a/src/new/src/PSC/Shop/UserBundle/Security/LoginFormAuthenticator.php +++ /dev/null @@ -1,137 +0,0 @@ -entityManager = $entityManager; - $this->urlGenerator = $urlGenerator; - $this->csrfTokenManager = $csrfTokenManager; - $this->passwordEncoder = $passwordEncoder; - $this->shopService = $shopService; - $this->logService = $logService; - } - - public function supports(Request $request) - { - return self::LOGIN_ROUTE === $request->attributes->get('_route') - && $request->isMethod('POST'); - } - - public function getCredentials(Request $request) - { - $credentials = [ - 'username' => $request->request->get('username'), - 'password' => $request->request->get('password'), - 'csrf_token' => $request->request->get('_csrf_token'), - ]; - $request->getSession()->set( - Security::LAST_USERNAME, - $credentials['username'] - ); - - return $credentials; - } - - public function getUser($credentials, UserProviderInterface $userProvider) - { - $token = new CsrfToken('authenticate', $credentials['csrf_token']); - if (!$this->csrfTokenManager->isTokenValid($token)) { - throw new InvalidCsrfTokenException(); - } - - $shop = $this->shopService->getShopByDomain(); - - $user = $this->entityManager - ->getRepository(Contact::class) - ->getContactByEmailAndShop($credentials['username'], $shop->getUid()); - - if (!$user) { - // fail authentication with a custom error - throw new CustomUserMessageAuthenticationException('Email could not be found.'); - } - - $user = $user->getContact(); - - return $user; - } - - public function checkCredentials($credentials, UserInterface $user) - { - $auth = password_verify($credentials['password'], $user->getPassword()); - - if ($auth) { - $this->logService->createLogEntry($this->shopService->getShopByDomain(), new Contact(), LogEntry::INFO, PSCShopUserBundle::class, $credentials['username'], 'Login Successful'); - } else { - $this->logService->createLogEntry($this->shopService->getShopByDomain(), new Contact(), LogEntry::INFO, PSCShopUserBundle::class, $credentials['username'], 'Login Failure'); - } - return $auth; - } - - /** - * Used to upgrade (rehash) the user's password automatically over time. - */ - public function getPassword($credentials): ?string - { - return $credentials['password']; - } - - public function onAuthenticationSuccess(Request $request, TokenInterface $token, $providerKey) - { - if ($targetPath = $this->getTargetPath($request->getSession(), $providerKey)) { - return new RedirectResponse($targetPath); - } - - return new RedirectResponse($this->urlGenerator->generate(self::LOGIN_SUCCESS_ROUTE)); - } - - protected function getLoginUrl() - { - return $this->urlGenerator->generate(self::LOGIN_ROUTE); - } -} diff --git a/src/new/src/PSC/Shop/UserBundle/Security/User/Provider.php b/src/new/src/PSC/Shop/UserBundle/Security/User/Provider.php deleted file mode 100755 index 259913319..000000000 --- a/src/new/src/PSC/Shop/UserBundle/Security/User/Provider.php +++ /dev/null @@ -1,146 +0,0 @@ - - * @copyright 2012-2013 PrintshopCreator GmbH - * @license Private - * @link http://www.printshopcreator.de - */ - -namespace PSC\Shop\UserBundle\Security\User; - -use Doctrine\Bundle\DoctrineBundle\Registry; -use PSC\Shop\UserBundle\Model\ApiUser; -use Symfony\Component\Security\Core\User\UserProviderInterface; -use Symfony\Component\Security\Core\User\UserInterface; -use Symfony\Component\Security\Core\Exception\UsernameNotFoundException; -use Symfony\Component\Security\Core\Exception\UnsupportedUserException; - -class Provider implements UserProviderInterface -{ - private $class; - private $repository; - private $property; - private $metadata; - public function __construct(Registry $registry, $class, $property = null, $managerName = null) - { - $em = $registry->getManager($managerName); - $this->class = $class; - $this->metadata = $em->getClassMetadata($class); - if (false !== strpos($this->class, ':')) { - $this->class = $this->metadata->getName(); - } - - $this->repository = $em->getRepository($class); - $this->property = $property; - } - - /** - * {@inheritdoc} - */ - public function loadUserByUsername($username) - { - if (null !== $this->property) { - $user = $this->repository->findOneBy(array($this->property => $username)); - } else { - if (!$this->repository instanceof UserProviderInterface) { - throw new \InvalidArgumentException(sprintf('The Doctrine repository "%s" must implement UserProviderInterface.', get_class($this->repository))); - } - - $user = $this->repository->loadUserByUsername($username); - } - - if (null === $user) { - throw new \Symfony\Component\Security\Core\Exception\UsernameNotFoundException(sprintf('User "%s" not found.', $username)); - } - - return $user; - } - - /** - * {@inheritDoc} - */ - public function refreshUser(UserInterface $user) - { - if (!$user instanceof $this->class) { - throw new UnsupportedUserException(sprintf('Instances of "%s" are not supported.', get_class($user))); - } - - if ($this->repository instanceof UserProviderInterface) { - $refreshedUser = $this->repository->refreshUser($user); - } else { - // The user must be reloaded via the primary key as all other data - // might have changed without proper persistence in the database. - // That's the case when the user has been changed by a form with - // validation errors. - if (!$id = $this->metadata->getIdentifierValues($user)) { - throw new \InvalidArgumentException("You cannot refresh a user " . - "from the EntityUserProvider that does not contain an identifier. " . - "The user object has to be serialized with its own identifier " . - "mapped by Doctrine."); - } - - if (null === $refreshedUser = $this->repository->find($id)) { - throw new UsernameNotFoundException(sprintf('User with id %s not found', json_encode($id))); - } - } - - return $refreshedUser; - } - - /** - * {@inheritDoc} - */ - public function supportsClass($class) - { - return $class === $this->class || is_subclass_of($class, $this->class); - } - - public function loadUserByUId($id) - { - if (null !== $this->property) { - $user = $this->repository->findOneBy(array('uid' => $id)); - } else { - if (!$this->repository instanceof UserProviderInterface) { - throw new \InvalidArgumentException(sprintf('The Doctrine repository "%s" must implement UserProviderInterface.', get_class($this->repository))); - } - - $user = $this->repository->loadUserByUid($id); - } - - if (null === $user) { - throw new \Symfony\Component\Security\Core\Exception\UsernameNotFoundException(sprintf('User "%s" not found.', $id)); - } - - return $user; - } - - public function mySelectedShop($contact) - { - return $this->repository->mySelectedShop($contact); - } - - public function loadUserByIdentifier(string $identifier): UserInterface - { - if (null !== $this->property) { - $user = $this->repository->findOneBy(array('username' => $identifier)); - } else { - if (!$this->repository instanceof UserProviderInterface) { - throw new \InvalidArgumentException(sprintf('The Doctrine repository "%s" must implement UserProviderInterface.', get_class($this->repository))); - } - - $user = $this->repository->loadUserByUid($identifier); - } - - if (null === $user) { - - throw new \Symfony\Component\Security\Core\Exception\UsernameNotFoundException(sprintf('User "%s" not found.', $identifier)); - } - - return $user; - } -} diff --git a/src/new/src/PSC/Shop/UserBundle/Security/User/UserProvider.php b/src/new/src/PSC/Shop/UserBundle/Security/User/UserProvider.php new file mode 100644 index 000000000..21259b298 --- /dev/null +++ b/src/new/src/PSC/Shop/UserBundle/Security/User/UserProvider.php @@ -0,0 +1,55 @@ +repository->find($user->getId()); + + return $refreshedUser; + } + + /** + * {@inheritDoc} + */ + public function supportsClass($class) + { + return Contact::class == $class || is_subclass_of($class, Contact::class); + } + + public function mySelectedShop($contact) + { + return $this->repository->mySelectedShop($contact); + } + + public function loadUserByIdentifier(string $identifier): UserInterface + { + + $user = $this->repository->loadUserByUsername($identifier); + + if (null === $user) { + + throw new \Symfony\Component\Security\Core\Exception\UsernameNotFoundException(sprintf('User "%s" not found.', $identifier)); + } + + return $user; + } +} diff --git a/src/new/src/PSC/System/SettingsBundle/Controller/Backend/HelpController.php b/src/new/src/PSC/System/SettingsBundle/Controller/Backend/HelpController.php index 1f2057a6b..e54d6fad2 100644 --- a/src/new/src/PSC/System/SettingsBundle/Controller/Backend/HelpController.php +++ b/src/new/src/PSC/System/SettingsBundle/Controller/Backend/HelpController.php @@ -25,7 +25,7 @@ class HelpController extends AbstractController $helpItems = $documentManager ->getRepository(Help::class) - ->findAll(); + ->findBy([], ['name' => 'ASC']); return array( 'helpItems' => $helpItems ); diff --git a/src/new/src/PSC/System/SettingsBundle/Service/Help.php b/src/new/src/PSC/System/SettingsBundle/Service/Help.php index e42a1b4bf..869e81f07 100644 --- a/src/new/src/PSC/System/SettingsBundle/Service/Help.php +++ b/src/new/src/PSC/System/SettingsBundle/Service/Help.php @@ -13,12 +13,16 @@ class Help $this->mongoManager = $mongoManager; } - public function getHelp(string $name): ?\PSC\System\SettingsBundle\Model\Help + public function getHelp(string $id, string $name): ?\PSC\System\SettingsBundle\Model\Help { /** @var \PSC\System\SettingsBundle\Document\Help $doc */ - $doc = $this->mongoManager->getRepository(\PSC\System\SettingsBundle\Document\Help::class)->findOneBy(['name' => $name]); - if(null === $doc) { - return null; + $doc = $this->mongoManager->getRepository(\PSC\System\SettingsBundle\Document\Help::class)->findOneBy(['name' => sprintf("%s_%s", $id, $name)]); + + if (null === $doc) { + $doc = $this->mongoManager->getRepository(\PSC\System\SettingsBundle\Document\Help::class)->findOneBy(['name' => $name]); + if ($doc === null) { + return null; + } } return new \PSC\System\SettingsBundle\Model\Help($doc->id, $doc->name, $doc->helpText); } diff --git a/src/new/src/PSC/System/SettingsBundle/Service/Printing.php b/src/new/src/PSC/System/SettingsBundle/Service/Printing.php index dd1503861..7b0fe8231 100755 --- a/src/new/src/PSC/System/SettingsBundle/Service/Printing.php +++ b/src/new/src/PSC/System/SettingsBundle/Service/Printing.php @@ -16,6 +16,7 @@ use Twig\Environment; use horstoeko\zugferd\ZugferdDocumentBuilder; use horstoeko\zugferd\ZugferdDocumentPdfMerger; use horstoeko\zugferd\ZugferdProfiles; +use horstoeko\zugferd\codelists\ZugferdPaymentMeans; require_once __DIR__ . '/../../../Shop/EntityBundle/Lagacy/TP_Basket_Item.php'; /** @@ -67,35 +68,47 @@ class Printing public function generateXRechnung(\PSC\Shop\EntityBundle\Entity\Order $order): string { $orderModel = $this->orderService->getOrderByUuid($order->getUuid()); - $document = ZugferdDocumentBuilder::CreateNew(ZugferdProfiles::PROFILE_XRECHNUNG_3); - + $document = ZugferdDocumentBuilder::createNew(ZugferdProfiles::PROFILE_XRECHNUNG_3); $document ->setDocumentInformation($orderModel->getAlias(), "380", $orderModel->getCreated(), "EUR") ->addDocumentNote('Rechnung gemäß Bestellung vom ' . $orderModel->getCreated()->format('d.m.Y')) ->setDocumentSupplyChainEvent($orderModel->getCreated()) - ->setDocumentSeller($orderModel->getSenderAddress()->getCompany() . ' ' . $orderModel->getSenderAddress()->getFirstname() . ' ' . $orderModel->getSenderAddress()->getLastname(), "549910") - ->setDocumentSellerAddress($orderModel->getSenderAddress()->getStreet() . ' ' . $orderModel->getSenderAddress()->getHouseNumber(), "", "", $orderModel->getSenderAddress()->getZip(), $orderModel->getSenderAddress()->getCity(), $orderModel->getSenderAddress()->getCountry()) + ->setDocumentBuyerReference("leitwegId") + // ->addDocumentSellerGlobalId("4000001123452", "0088") + ->setDocumentSeller($orderModel->getSenderAddress()->getCompany() . ' ' . $orderModel->getSenderAddress()->getFirstname() . ' ' . $orderModel->getSenderAddress()->getLastname(), "") + ->setDocumentSellerAddress($orderModel->getSenderAddress()->getStreet() . ' ' . $orderModel->getSenderAddress()->getHouseNumber(), "", "", $orderModel->getSenderAddress()->getZip(), $orderModel->getSenderAddress()->getCity(), $orderModel->getSenderAddress()->getCountry() ?? 'DE') + ->setDocumentSellerContact($orderModel->getSenderAddress()->getFirstname() . ' ' . $orderModel->getSenderAddress()->getLastname(), $orderModel->getSenderAddress()->getCompany(), $orderModel->getSenderAddress()->getPhone(), $orderModel->getSenderAddress()->getMobilPhone(), $orderModel->getSenderAddress()->getEmail()) + ->setDocumentSellerCommunication("EM", $orderModel->getSenderAddress()->getEmail()) ->setDocumentBuyer($orderModel->getInvoiceAddress()->getCompany() . ' ' . $orderModel->getInvoiceAddress()->getFirstname() . ' ' . $orderModel->getInvoiceAddress()->getLastname(), $orderModel->getInvoiceAddress()->getKundenNr()) - ->setDocumentBuyerAddress($orderModel->getInvoiceAddress()->getStreet() . ' ' . $orderModel->getInvoiceAddress()->getHouseNumber(), "", "", $orderModel->getInvoiceAddress()->getZip(), $orderModel->getInvoiceAddress()->getCity(), $orderModel->getInvoiceAddress()->getCountry()); + ->setDocumentBuyerAddress($orderModel->getInvoiceAddress()->getStreet() . ' ' . $orderModel->getInvoiceAddress()->getHouseNumber(), "", "", $orderModel->getInvoiceAddress()->getZip(), $orderModel->getInvoiceAddress()->getCity(), $orderModel->getInvoiceAddress()->getCountry() ?? 'DE') + ->addDocumentPaymentMean(ZugferdPaymentMeans::UNTDID_4461_58, null, null, null, null, null, "DE12500105170648489890", null, null, null) + ->addDocumentPaymentTermXRechnung("Zahlungsbedingungen", [], [], [], null, null) - foreach($orderModel->getTaxes() as $tax) { + ->addDocumentSellerVATRegistrationNumber("DEumsatzsteuer") + ->addDocumentSellerTaxNumber("steuernummer") + + ; + + foreach ($orderModel->getTaxes() as $tax) { $document->addDocumentTax("S", "VAT", $tax->getValue() / 100, $tax->getValue() / 100, $tax->getName() / 100); } $document - ->setDocumentSummation($orderModel->getGross() / 100, $orderModel->getGross() / 100, $orderModel->getNet() / 100, 0.0, 0.0, $orderModel->getNet() / 100, $orderModel->getTaxesSum() / 100, null, 0.0); - foreach($orderModel->getPositions() as $position) { + ->setDocumentSummation($orderModel->getGross() / 100, $orderModel->getGross() / 100, $orderModel->getPositionsNet() / 100, 20, 0.0, $orderModel->getNet() / 100, $orderModel->getTaxesSum() / 100, null, 0.0); + + foreach ($orderModel->getPositions() as $position) { $document ->addNewPosition($position->getPos()) ->setDocumentPositionProductDetails($position->getProduct()->getTitle()) - ->setDocumentPositionGrossPrice($position->getPrice()->getGross() / 100) + // ->setDocumentPositionGrossPrice($position->getPrice()->getGross() / 100) ->setDocumentPositionNetPrice($position->getPrice()->getNet() / 100) ->setDocumentPositionQuantity(1, "H87") ->addDocumentPositionTax('S', 'VAT', $position->getPrice()->getTax()->getName() / 100) ->setDocumentPositionLineSummation($position->getPrice()->getNet() / 100) ; } - + $document + ->addDocumentLogisticsServiceCharge("Shippingcost", 20, ['VAT'], [19]); return $document->getContent(); } @@ -224,26 +237,26 @@ class Printing $this->mpdf->WriteHTML($html); } - if($addXRechnung) { + if ($addXRechnung) { $orderModel = $this->orderService->getOrderByUuid($order->getUuid()); - $document = ZugferdDocumentBuilder::CreateNew(ZugferdProfiles::PROFILE_XRECHNUNG_2); + $document = ZugferdDocumentBuilder::CreateNew(ZugferdProfiles::PROFILE_XRECHNUNG_3); $document ->setDocumentInformation($orderModel->getAlias(), "380", $orderModel->getCreated(), "EUR") ->addDocumentNote('Rechnung gemäß Bestellung vom ' . $orderModel->getCreated()->format('d.m.Y')) ->setDocumentSupplyChainEvent($orderModel->getCreated()) ->setDocumentSeller($orderModel->getSenderAddress()->getCompany() . ' ' . $orderModel->getSenderAddress()->getFirstname() . ' ' . $orderModel->getSenderAddress()->getLastname(), "549910") - ->setDocumentSellerAddress($orderModel->getSenderAddress()->getStreet() . ' ' . $orderModel->getSenderAddress()->getHouseNumber(), "", "", $orderModel->getSenderAddress()->getZip(), $orderModel->getSenderAddress()->getCity(), $orderModel->getSenderAddress()->getCountry()) + ->setDocumentSellerAddress($orderModel->getSenderAddress()->getStreet() . ' ' . $orderModel->getSenderAddress()->getHouseNumber(), "", "", $orderModel->getSenderAddress()->getZip(), $orderModel->getSenderAddress()->getCity(), $orderModel->getSenderAddress()->getCountry() ?? 'DE') ->setDocumentBuyer($orderModel->getInvoiceAddress()->getCompany() . ' ' . $orderModel->getInvoiceAddress()->getFirstname() . ' ' . $orderModel->getInvoiceAddress()->getLastname(), $orderModel->getInvoiceAddress()->getKundenNr()) - ->setDocumentBuyerAddress($orderModel->getInvoiceAddress()->getStreet() . ' ' . $orderModel->getInvoiceAddress()->getHouseNumber(), "", "", $orderModel->getInvoiceAddress()->getZip(), $orderModel->getInvoiceAddress()->getCity(), $orderModel->getInvoiceAddress()->getCountry()); + ->setDocumentBuyerAddress($orderModel->getInvoiceAddress()->getStreet() . ' ' . $orderModel->getInvoiceAddress()->getHouseNumber(), "", "", $orderModel->getInvoiceAddress()->getZip(), $orderModel->getInvoiceAddress()->getCity(), $orderModel->getInvoiceAddress()->getCountry() ?? 'DE'); - foreach($orderModel->getTaxes() as $tax) { + foreach ($orderModel->getTaxes() as $tax) { $document->addDocumentTax("S", "VAT", $tax->getValue() / 100, $tax->getValue() / 100, $tax->getName() / 100); } $document ->setDocumentSummation($orderModel->getGross() / 100, $orderModel->getGross() / 100, $orderModel->getNet() / 100, 0.0, 0.0, $orderModel->getNet() / 100, $orderModel->getTaxesSum() / 100, null, 0.0); - foreach($orderModel->getPositions() as $position) { + foreach ($orderModel->getPositions() as $position) { $document ->addNewPosition($position->getPos()) ->setDocumentPositionProductDetails($position->getProduct()->getTitle()) diff --git a/src/new/src/PSC/System/SettingsBundle/Service/TemplateVars.php b/src/new/src/PSC/System/SettingsBundle/Service/TemplateVars.php index 7d4c4d12e..5d214e117 100755 --- a/src/new/src/PSC/System/SettingsBundle/Service/TemplateVars.php +++ b/src/new/src/PSC/System/SettingsBundle/Service/TemplateVars.php @@ -188,19 +188,19 @@ class TemplateVars $engine->setParameters($shop->getParameter()); $tmpDiscounts = []; - if(isset($objDoc->getSpecialProductTypeObject()['params'])) { + if (isset($objDoc->getSpecialProductTypeObject()['params'])) { $engine->setVariables($objDoc->getSpecialProductTypeObject()['params']); $engine->setSavedCalcReferences($objDoc->getCalcReferences()); - if(isset($objDoc->getSpecialProductTypeObject()['kalk_artikel'])) { + if (isset($objDoc->getSpecialProductTypeObject()['kalk_artikel'])) { $engine->setActiveArticle($objDoc->getSpecialProductTypeObject()['kalk_artikel']); } $engine->calc(); } else { $engine->setVariables($objPosition->getOptions()); - if(isset($objPosition->getOptions()['kalk_artikel'])) { + if (isset($objPosition->getOptions()['kalk_artikel'])) { $engine->setActiveArticle($objPosition->getOptions()['kalk_artikel']); } - if($objPosition->getXmlProduct() != "") { + if ($objPosition->getXmlProduct() != "") { $engine->setActiveArticle($objPosition->getXmlProduct()); } $engine->calc(); @@ -210,7 +210,7 @@ class TemplateVars $articleCalc = $engine->getArticle(); $count = $pos->getCount(); - if($auflage = $articleCalc->getOptionById('auflage')) { + if ($auflage = $articleCalc->getOptionById('auflage')) { $count = $auflage->getRawValue(); } @@ -258,11 +258,11 @@ class TemplateVars foreach ($setConfig as $conf) { /** @var Product $product */ $product = $productRepo->findOneBy(['uid' => $conf->article_id]); - if(!$product) { + if (!$product) { $product = $productRepo->findOneBy(['uuid' => $conf->article_id]); } - if($product) { + if ($product) { if (isset($setConfig[$product->getId()])) { $productSets[] = [ 'title' => $product->getTitle(), @@ -451,7 +451,7 @@ class TemplateVars 'steuer' => $steuer, 'brutto' => $brutto, ); - } elseif ($product->hasCalcXml()) { + } elseif ($product->hasCalcXml() && $product->getType() == 6) { $paperContainer = new PaperContainer(); $paperContainer->parse(simplexml_load_string($shop->getInstall()->getPaperContainer())); @@ -470,7 +470,7 @@ class TemplateVars if (isset($options['kalk_artikel'])) { $engine->setActiveArticle($options['kalk_artikel']); } - if($xmlProduct != "") { + if ($xmlProduct != "") { $engine->setActiveArticle($xmlProduct); } diff --git a/src/new/src/PSC/System/SettingsBundle/Twig/Node/Barcode.php b/src/new/src/PSC/System/SettingsBundle/Twig/Node/Barcode.php index c8d5d5e1f..24b5eda4b 100755 --- a/src/new/src/PSC/System/SettingsBundle/Twig/Node/Barcode.php +++ b/src/new/src/PSC/System/SettingsBundle/Twig/Node/Barcode.php @@ -59,7 +59,7 @@ if(isset($_options["logo"]) && $_options["logo"] == true) { } } $options->outputBase64 = false; -$options->scale = 30; +//$options->scale = 30; if(isset($_options["logo"]) && $_options["logo"] !== "") { $options->addLogoSpace = true; $options->logoSpaceWidth = 13; diff --git a/src/new/src/PSC/System/UpdateBundle/Migrations/Version202411271406.php b/src/new/src/PSC/System/UpdateBundle/Migrations/Version202411271406.php new file mode 100644 index 000000000..4278983e6 --- /dev/null +++ b/src/new/src/PSC/System/UpdateBundle/Migrations/Version202411271406.php @@ -0,0 +1,12 @@ +entityManager->getConnection()->exec("ALTER TABLE orderspos ADD INDEX created_date (createdd);"); + $this->entityManager->getConnection()->exec("ALTER TABLE papierdb ADD INDEX art_nr (art_nr);"); + } +} diff --git a/src/new/symfony.lock b/src/new/symfony.lock index aef358989..77438683a 100755 --- a/src/new/symfony.lock +++ b/src/new/symfony.lock @@ -671,6 +671,18 @@ "symfony/intl": { "version": "v4.4.7" }, + "symfony/lock": { + "version": "6.4", + "recipe": { + "repo": "github.com/symfony/recipes", + "branch": "main", + "version": "5.2", + "ref": "8e937ff2b4735d110af1770f242c1107fdab4c8e" + }, + "files": [ + "config/packages/lock.yaml" + ] + }, "symfony/mailer": { "version": "4.3", "recipe": { diff --git a/src/new/templates/backend_base.html.twig b/src/new/templates/backend_base.html.twig index 5da7831f9..6b946a36f 100755 --- a/src/new/templates/backend_base.html.twig +++ b/src/new/templates/backend_base.html.twig @@ -91,11 +91,11 @@ {% endif %} - \ No newline at end of file + diff --git a/src/new/tests/PSC/Shop/Order/Api/UpdateTest.php b/src/new/tests/PSC/Shop/Order/Api/UpdateTest.php new file mode 100644 index 000000000..f1a068447 --- /dev/null +++ b/src/new/tests/PSC/Shop/Order/Api/UpdateTest.php @@ -0,0 +1,128 @@ +get(ShopRepository::class); + + /** + * @var Shop $shop +*/ + $shop = $shopRepository->findOneBy(['title' => 'Printchampion']); + + $shippingRepository = static::getContainer()->get(ShippingRepository::class); + + $paymentRepository = static::getContainer()->get(PaymentRepository::class); + + $client->jsonRequest( + 'POST', + '/api/order/create', + [ + 'shop' => [ + 'uuid' => (string)$shop->getUuid() + ], + 'type' => 2, + 'shipping' => [ + 'uid' => $shippingRepository->findOneBy(['title' => 'Deutschlandweit'])->getUid() + ], + 'payment' => [ + 'uid' => $paymentRepository->findOneBy(['title' => 'per Rechnung'])->getUid() + ], + 'draft' => true, + 'deliveryAddress' => [ + 'firstname' => 'Thomas', + 'lastname' => 'Peterson', + 'street' => 'Chausseestr.', + 'houseNumber' => '24', + 'zip' => '17506', + 'city' => 'Gribow' + ], + 'invoiceAddress' => [ + 'firstname' => 'Thomas', + 'lastname' => 'Peterson', + 'street' => 'Chausseestr.', + 'houseNumber' => '24', + 'zip' => '17400', + 'city' => 'Berlin' + ], + 'positions' => [ + [ + 'count' => 1, + 'product' => [ + 'title' => 'test XML', + 'specialProductTypeObject' => [ + 'typ' => 6, + 'taxClass' => 1900, + 'xml' => ' + + + Blocks A5 25blatt geleimt + kein + + + + + ' + ] + ] + ], + [ + 'count' => 1, + 'product' => [ + 'title' => 'test Manual Position', + 'specialProductTypeObject' => [ + 'typ' => 1, + 'cent' => true, + 'net' => 145, + 'taxClass' => 1900 + ] + ] + ] + ] + ], + ['HTTP_apiKey' => $shop->getApiKey()] + ); + + self::assertSame(200, $client->getResponse()->getStatusCode()); + + $data = json_decode($client->getResponse()->getContent(), true); + + $createdDate = $data['created']; + + $client->jsonRequest( + 'POST', + '/api/order/getonebyuuid', + [ + 'uuid' => $data['uuid'], + ], + ['HTTP_apiKey' => $shop->getApiKey()] + ); + + $data = json_decode($client->getResponse()->getContent(), true); + + self::assertSame($createdDate, $data['created']); + self::assertSame(200, $client->getResponse()->getStatusCode()); + + } + +} diff --git a/src/new/tests/PSC/Shop/Order/Service/CalcContactAccountTypeTest.php b/src/new/tests/PSC/Shop/Order/Service/CalcContactAccountTypeTest.php new file mode 100644 index 000000000..c44f5d2c7 --- /dev/null +++ b/src/new/tests/PSC/Shop/Order/Service/CalcContactAccountTypeTest.php @@ -0,0 +1,329 @@ +get(Calc::class); + + $shop = new Shop(); + $shop->setUuid('shop1'); + + $order = new \PSC\Shop\OrderBundle\Model\Order(); + $order->setShop($shop); + + $contact = new Contact(); + $order->setContact($contact); + + $shipping = new Shipping(); + $shipping->setTaxClass(7); + $shipping->setPrice(560); + + $payment = new Payment(); + $payment->setTaxClass(19); + $payment->setPrice(450); + + $order->setShipping($shipping); + $order->setPayment($payment); + + $deliveryAddress = new Address(); + $deliveryAddress->setCountry('de'); + $deliveryAddress->setZip(17506); + + $order->setDeliveryAddress($deliveryAddress); + + $productW0 = new Product(); + $productW0->setTitle('Manuelle Position 1'); + + $specialProductSettingsW0 = new ProductSpecialObject(); + $specialProductSettingsW0->setCent(true); + $specialProductSettingsW0->setNet(13.12 * 100); + + $productW0->setSpecialProductTypeObject($specialProductSettingsW0); + + $positionW0 = new Position(); + $positionW0->setProduct($productW0); + + $order->addPosition($positionW0); + + $productW1 = new Product(); + $productW1->setTitle('Manuelle Position 2'); + + $specialProductSettingsW1 = new ProductSpecialObject(); + $specialProductSettingsW1->setNet(34); + + $productW1->setSpecialProductTypeObject($specialProductSettingsW1); + + $positionW1 = new Position(); + $positionW1->setProduct($productW1); + + $order->addPosition($positionW1); + + $productW2 = new Product(); + $productW2->setTitle('Manuelle Position XML Calc W1'); + + $specialProductSettingsW2 = new \Plugin\System\PSC\XmlCalc\Model\ProductSpecialObject(); + $specialProductSettingsW2->setXml(file_get_contents(__DIR__ . '/calc2.xml')); + $specialProductSettingsW2->setParams(['auflage' => 10]); + + $productW2->setSpecialProductTypeObject($specialProductSettingsW2); + + $positionW2 = new Position(); + $positionW2->setProduct($productW2); + + $order->addPosition($positionW2); + + $productW3 = new Product(); + $productW3->setTitle('Manuelle Position XML Calc W2'); + + $specialProductSettingsW3 = new \Plugin\System\PSC\XmlCalc\Model\ProductSpecialObject(); + $specialProductSettingsW3->setXml(file_get_contents(__DIR__ . '/calc1.xml')); + $specialProductSettingsW3->setParams(['auflage' => 1000, 'auswahl_1' => 2]); + + $productW3->setSpecialProductTypeObject($specialProductSettingsW3); + + $positionW3 = new Position(); + $positionW3->setProduct($productW3); + + $order->addPosition($positionW3); + + $calcService->calcOrder($order); + + $this->assertSame(1312, $positionW0->getPrice()->getNet()); + $this->assertSame(3400, $positionW1->getPrice()->getNet()); + $this->assertSame(210, $positionW2->getPrice()->getNet()); + $this->assertSame(15000, $positionW3->getPrice()->getNet()); + $this->assertSame(2850, $positionW3->getPrice()->getVat()); + + $this->assertSame(20932, $order->getNet()); + $this->assertSame(3912, $order->getVat()); + $this->assertSame(24844, $order->getGross()); + } + + public function testWithoutContactCalc() + { + self::bootKernel(); + + $container = static::getContainer(); + + /** @var Calc $calcService */ + $calcService = $container->get(Calc::class); + + $shop = new Shop(); + $shop->setUuid('shop1'); + + $order = new \PSC\Shop\OrderBundle\Model\Order(); + $order->setShop($shop); + + $shipping = new Shipping(); + $shipping->setTaxClass(7); + $shipping->setPrice(560); + + $payment = new Payment(); + $payment->setTaxClass(19); + $payment->setPrice(450); + + $order->setShipping($shipping); + $order->setPayment($payment); + + $deliveryAddress = new Address(); + $deliveryAddress->setCountry('de'); + $deliveryAddress->setZip(17506); + + $order->setDeliveryAddress($deliveryAddress); + + $productW0 = new Product(); + $productW0->setTitle('Manuelle Position 1'); + + $specialProductSettingsW0 = new ProductSpecialObject(); + $specialProductSettingsW0->setCent(true); + $specialProductSettingsW0->setNet(13.12 * 100); + + $productW0->setSpecialProductTypeObject($specialProductSettingsW0); + + $positionW0 = new Position(); + $positionW0->setProduct($productW0); + + $order->addPosition($positionW0); + + $productW1 = new Product(); + $productW1->setTitle('Manuelle Position 2'); + + $specialProductSettingsW1 = new ProductSpecialObject(); + $specialProductSettingsW1->setNet(34); + + $productW1->setSpecialProductTypeObject($specialProductSettingsW1); + + $positionW1 = new Position(); + $positionW1->setProduct($productW1); + + $order->addPosition($positionW1); + + $productW2 = new Product(); + $productW2->setTitle('Manuelle Position XML Calc W1'); + + $specialProductSettingsW2 = new \Plugin\System\PSC\XmlCalc\Model\ProductSpecialObject(); + $specialProductSettingsW2->setXml(file_get_contents(__DIR__ . '/calc2.xml')); + $specialProductSettingsW2->setParams(['auflage' => 10]); + + $productW2->setSpecialProductTypeObject($specialProductSettingsW2); + + $positionW2 = new Position(); + $positionW2->setProduct($productW2); + + $order->addPosition($positionW2); + + $productW3 = new Product(); + $productW3->setTitle('Manuelle Position XML Calc W2'); + + $specialProductSettingsW3 = new \Plugin\System\PSC\XmlCalc\Model\ProductSpecialObject(); + $specialProductSettingsW3->setXml(file_get_contents(__DIR__ . '/calc1.xml')); + $specialProductSettingsW3->setParams(['auflage' => 1000, 'auswahl_1' => 2]); + + $productW3->setSpecialProductTypeObject($specialProductSettingsW3); + + $positionW3 = new Position(); + $positionW3->setProduct($productW3); + + $order->addPosition($positionW3); + + $calcService->calcOrder($order); + + $this->assertSame(1312, $positionW0->getPrice()->getNet()); + $this->assertSame(3400, $positionW1->getPrice()->getNet()); + $this->assertSame(210, $positionW2->getPrice()->getNet()); + $this->assertSame(15000, $positionW3->getPrice()->getNet()); + $this->assertSame(2850, $positionW3->getPrice()->getVat()); + + $this->assertSame(20932, $order->getNet()); + $this->assertSame(3912, $order->getVat()); + $this->assertSame(24844, $order->getGross()); + } + + public function testWithContactCompanyCalc() + { + self::bootKernel(); + + $container = static::getContainer(); + + /** @var Calc $calcService */ + $calcService = $container->get(Calc::class); + + $shop = new Shop(); + $shop->setUuid('shop1'); + + $order = new \PSC\Shop\OrderBundle\Model\Order(); + $order->setShop($shop); + + $contact = new Contact(); + $contact->setAccountType(AccountType::COMPANY); + + $order->setContact($contact); + + $shipping = new Shipping(); + $shipping->setTaxClass(7); + $shipping->setPrice(560); + + $payment = new Payment(); + $payment->setTaxClass(19); + $payment->setPrice(450); + + $order->setShipping($shipping); + $order->setPayment($payment); + + $deliveryAddress = new Address(); + $deliveryAddress->setCountry('de'); + $deliveryAddress->setZip(17506); + + $order->setDeliveryAddress($deliveryAddress); + + $productW0 = new Product(); + $productW0->setTitle('Manuelle Position 1'); + + $specialProductSettingsW0 = new ProductSpecialObject(); + $specialProductSettingsW0->setCent(true); + $specialProductSettingsW0->setNet(13.12 * 100); + + $productW0->setSpecialProductTypeObject($specialProductSettingsW0); + + $positionW0 = new Position(); + $positionW0->setProduct($productW0); + + $order->addPosition($positionW0); + + $productW1 = new Product(); + $productW1->setTitle('Manuelle Position 2'); + + $specialProductSettingsW1 = new ProductSpecialObject(); + $specialProductSettingsW1->setNet(34); + + $productW1->setSpecialProductTypeObject($specialProductSettingsW1); + + $positionW1 = new Position(); + $positionW1->setProduct($productW1); + + $order->addPosition($positionW1); + + $productW2 = new Product(); + $productW2->setTitle('Manuelle Position XML Calc W1'); + + $specialProductSettingsW2 = new \Plugin\System\PSC\XmlCalc\Model\ProductSpecialObject(); + $specialProductSettingsW2->setXml(file_get_contents(__DIR__ . '/calc2.xml')); + $specialProductSettingsW2->setParams(['auflage' => 10]); + + $productW2->setSpecialProductTypeObject($specialProductSettingsW2); + + $positionW2 = new Position(); + $positionW2->setProduct($productW2); + + $order->addPosition($positionW2); + + $productW3 = new Product(); + $productW3->setTitle('Manuelle Position XML Calc W2'); + + $specialProductSettingsW3 = new \Plugin\System\PSC\XmlCalc\Model\ProductSpecialObject(); + $specialProductSettingsW3->setXml(file_get_contents(__DIR__ . '/calc1.xml')); + $specialProductSettingsW3->setParams(['auflage' => 1000, 'auswahl_1' => 2]); + + $productW3->setSpecialProductTypeObject($specialProductSettingsW3); + + $positionW3 = new Position(); + $positionW3->setProduct($productW3); + + $order->addPosition($positionW3); + + $calcService->calcOrder($order); + + $this->assertSame(1312, $positionW0->getPrice()->getNet()); + $this->assertSame(3400, $positionW1->getPrice()->getNet()); + $this->assertSame(168, $positionW2->getPrice()->getNet()); + $this->assertSame(15000, $positionW3->getPrice()->getNet()); + $this->assertSame(2850, $positionW3->getPrice()->getVat()); + + $this->assertSame(20890, $order->getNet()); + $this->assertSame(3904, $order->getVat()); + $this->assertSame(24794, $order->getGross()); + } +} diff --git a/src/new/tests/PSC/Shop/Order/Service/calc2.xml b/src/new/tests/PSC/Shop/Order/Service/calc2.xml new file mode 100644 index 000000000..a355b2d41 --- /dev/null +++ b/src/new/tests/PSC/Shop/Order/Service/calc2.xml @@ -0,0 +1,24 @@ + + + + SD-Durchschreibesätze A4-Blocks + 210 mm x 297 mm + + + + + + + diff --git a/src/new/tests/Plugins/System/PSC/XmlCalc/Api/CreateOrderTest.php b/src/new/tests/Plugins/System/PSC/XmlCalc/Api/CreateOrderTest.php new file mode 100644 index 000000000..51a923e75 --- /dev/null +++ b/src/new/tests/Plugins/System/PSC/XmlCalc/Api/CreateOrderTest.php @@ -0,0 +1,235 @@ +get(ShopRepository::class); + + $shop = $shopRepository->findOneBy(['title' => 'Printchampion']); + + $shippingRepository = static::getContainer()->get(ShippingRepository::class); + + $paymentRepository = static::getContainer()->get(PaymentRepository::class); + + $client->jsonRequest( + 'POST', + '/api/order/create', + [ + 'shop' => [ + 'uuid' => (string)$shop->getUuid() + ], + 'type' => 2, + 'shipping' => [ + 'uid' => $shippingRepository->findOneBy(['title' => 'Abholung vor Ort'])->getUid() + ], + 'payment' => [ + 'uid' => $paymentRepository->findOneBy(['title' => 'Bar bei Abholung'])->getUid() + ], + 'draft' => false, + 'deliveryAddress' => [ + 'firstname' => 'Thomas', + 'lastname' => 'Peterson', + 'street' => 'Chausseestr.', + 'houseNumber' => '24', + 'zip' => '17506', + 'city' => 'Gribow' + ], + 'invoiceAddress' => [ + 'firstname' => 'Thomas', + 'lastname' => 'Peterson', + 'street' => 'Chausseestr.', + 'houseNumber' => '24', + 'zip' => '17400', + 'city' => 'Berlin' + ], + 'positions' => [ + [ + 'count' => 1, + 'product' => [ + 'title' => 'test XML', + 'specialProductTypeObject' => [ + 'typ' => 6, + 'taxClass' => 1900, + 'xml' => ' + + + SD-Durchschreibesätze A4-Blocks + 210 mm x 297 mm + + + + + + +' + ] + ] + ] + ] + ], + ['HTTP_apiKey' => $shop->getApiKey()] + ); + + self::assertSame(200, $client->getResponse()->getStatusCode()); + + $data = json_decode($client->getResponse()->getContent(), true); + self::assertSame(11900, $data['gross']); + + $client->jsonRequest( + 'POST', + '/api/order/getonebyuuid', + [ + 'uuid' => $data['uuid'], + ], + ['HTTP_apiKey' => $shop->getApiKey()] + ); + + self::assertSame(200, $client->getResponse()->getStatusCode()); + $data = json_decode($client->getResponse()->getContent(), true); + + self::assertSame(11900, $data['gross']); + + $jobs = static::getContainer()->get(JobRepository::class); + self::assertCount(0, $jobs->findBy(['data.order' => $data['uuid']])); + } + + public function testCreateOrderContactCompany(): void + { + $client = static::createClient(); + + $shopRepository = static::getContainer()->get(ShopRepository::class); + + $shop = $shopRepository->findOneBy(['title' => 'Printchampion']); + + $shippingRepository = static::getContainer()->get(ShippingRepository::class); + + $paymentRepository = static::getContainer()->get(PaymentRepository::class); + + $client->jsonRequest( + 'POST', + '/api/order/create', + [ + 'shop' => [ + 'uuid' => (string)$shop->getUuid() + ], + 'type' => 2, + 'shipping' => [ + 'uid' => $shippingRepository->findOneBy(['title' => 'Abholung vor Ort'])->getUid() + ], + 'payment' => [ + 'uid' => $paymentRepository->findOneBy(['title' => 'Bar bei Abholung'])->getUid() + ], + 'contact' => [ + 'accountType' => AccountType::COMPANY + ], + 'draft' => false, + 'deliveryAddress' => [ + 'firstname' => 'Thomas', + 'lastname' => 'Peterson', + 'street' => 'Chausseestr.', + 'houseNumber' => '24', + 'zip' => '17506', + 'city' => 'Gribow' + ], + 'invoiceAddress' => [ + 'firstname' => 'Thomas', + 'lastname' => 'Peterson', + 'street' => 'Chausseestr.', + 'houseNumber' => '24', + 'zip' => '17400', + 'city' => 'Berlin' + ], + 'positions' => [ + [ + 'count' => 1, + 'product' => [ + 'title' => 'test XML', + 'specialProductTypeObject' => [ + 'typ' => 6, + 'taxClass' => 1900, + 'xml' => ' + + + SD-Durchschreibesätze A4-Blocks + 210 mm x 297 mm + + + + + + +' + ] + ] + ] + ] + ], + ['HTTP_apiKey' => $shop->getApiKey()] + ); + + self::assertSame(200, $client->getResponse()->getStatusCode()); + + $data = json_decode($client->getResponse()->getContent(), true); + self::assertSame(9520, $data['gross']); + + $client->jsonRequest( + 'POST', + '/api/order/getonebyuuid', + [ + 'uuid' => $data['uuid'], + ], + ['HTTP_apiKey' => $shop->getApiKey()] + ); + + self::assertSame(200, $client->getResponse()->getStatusCode()); + $data = json_decode($client->getResponse()->getContent(), true); + + self::assertSame(9520, $data['gross']); + + $jobs = static::getContainer()->get(JobRepository::class); + self::assertCount(0, $jobs->findBy(['data.order' => $data['uuid']])); + } + + +} diff --git a/src/new/tests/Plugins/System/PSC/XmlCalc/Api/GetPriceTest.php b/src/new/tests/Plugins/System/PSC/XmlCalc/Api/GetPriceTest.php new file mode 100644 index 000000000..d03037c6d --- /dev/null +++ b/src/new/tests/Plugins/System/PSC/XmlCalc/Api/GetPriceTest.php @@ -0,0 +1,58 @@ +jsonRequest('POST', '/api/plugin/system/psc/xmlcalc/price', ['product' => '01938686-0e4d-7da9-bae3-b2e1b1681f9f'], []); + $this->assertResponseIsSuccessful(); + + $data = json_decode($client->getResponse()->getContent(), true); + + self::assertSame(2600, $data['netto']); + } + + public function testGetPriceWithCompany(): void + { + $client = static::createClient(); + $userRepository = static::getContainer()->get(ContactRepository::class); + + $testUser = $userRepository->loadUserByUsername('company@shop.de'); + + $client->loginUser($testUser, 'api'); + + $client->jsonRequest('POST', '/api/plugin/system/psc/xmlcalc/price', ['product' => '01938686-0e4d-7da9-bae3-b2e1b1681f9f'], []); + $this->assertResponseIsSuccessful(); + + $data = json_decode($client->getResponse()->getContent(), true); + + self::assertSame(2080, $data['netto']); + } + + public function testGetPriceWithAssociation(): void + { + $client = static::createClient(); + $userRepository = static::getContainer()->get(ContactRepository::class); + + $testUser = $userRepository->loadUserByUsername('association@shop.de'); + + $client->loginUser($testUser, 'api'); + + $client->jsonRequest('POST', '/api/plugin/system/psc/xmlcalc/price', ['product' => '01938686-0e4d-7da9-bae3-b2e1b1681f9f'], []); + $this->assertResponseIsSuccessful(); + + $data = json_decode($client->getResponse()->getContent(), true); + + self::assertSame(1300, $data['netto']); + } +} diff --git a/src/new/tests/RefreshDatabaseTrait.php b/src/new/tests/RefreshDatabaseTrait.php index 36a41f234..1502c17da 100755 --- a/src/new/tests/RefreshDatabaseTrait.php +++ b/src/new/tests/RefreshDatabaseTrait.php @@ -7,6 +7,8 @@ namespace Tests; use Doctrine\ODM\MongoDB\DocumentManager; use Doctrine\ORM\EntityManagerInterface; use Hautelook\AliceBundle\PhpUnit\BaseDatabaseTrait; +use PSC\Shop\ContactBundle\Model\AccountType; +use PSC\Shop\EntityBundle\Document\Contact; use PSC\Shop\EntityBundle\Document\Country; use PSC\Shop\EntityBundle\Document\Instance; use PSC\Shop\EntityBundle\Document\Order; @@ -125,6 +127,26 @@ trait RefreshDatabaseTrait $doc->flush(); $doc->clear(); } + $contactEntity = $em->getRepository(\PSC\Shop\EntityBundle\Entity\Contact::class)->findOneBy(['username' => 'company@shop.de']); + if (!$doc->getRepository(Contact::class)->findOneBy(['uid' => (string)$contactEntity->getUid()])) { + $contact = new Contact(); + $contact->setAccountType(AccountType::COMPANY); + $contact->setUid((string)$contactEntity->getUid()); + $doc->persist($contact); + $doc->flush(); + $doc->clear(); + } + $contactEntity = $em->getRepository(\PSC\Shop\EntityBundle\Entity\Contact::class)->findOneBy(['username' => 'association@shop.de']); + if (!$doc->getRepository(Contact::class)->findOneBy(['uid' => (string)$contactEntity->getUid()])) { + $contact = new Contact(); + $contact->setAccountType(AccountType::ASSOCIATION); + $contact->setUid((string)$contactEntity->getUid()); + $doc->persist($contact); + $doc->flush(); + $doc->clear(); + } + + return $kernel; } diff --git a/src/new/var/plugins/Custom/PSC/CollectLayouter/Resources/views/frontend/designer/collect.html.twig b/src/new/var/plugins/Custom/PSC/CollectLayouter/Resources/views/frontend/designer/collect.html.twig index 4f55194ca..0c71e6eee 100755 --- a/src/new/var/plugins/Custom/PSC/CollectLayouter/Resources/views/frontend/designer/collect.html.twig +++ b/src/new/var/plugins/Custom/PSC/CollectLayouter/Resources/views/frontend/designer/collect.html.twig @@ -36,6 +36,18 @@ +
+
+ Loading + + + + + +
+
{{ product.title }} @@ -98,9 +110,15 @@ $('.save').click(function() { $('.save').prop('disabled', true); var arr = $("#customerForm").serializeArray(); - $.each($("input:checkbox:not(:checked)"), function(i, e) { - arr.push({name: e.name, value: "0"}); + $.each($("input:checkbox"), function(i, e) { + if(!$(this).is(':checked')) { + arr.push({name: e.name, value: "0"}); + }else{ + arr.push({name: e.name, value: "1"}); + } }); + + $('.loadingScreen').removeClass('hidden'); $.ajax({ method: 'PUT', url: '/apps/api/plugin/custom/psc/collectlayouter/{% if mode == 3 %}savenewcontact{% else %}savecontact{% endif %}/' + productUUId, @@ -134,6 +152,7 @@ $('.pleasewait').html('Bitte Warten'); + $('.loadingScreen').removeClass('hidden'); var dataObj = $.param({uuid: '{{ product.uuid }}', modus: 102, layouter_uuid: '{{ layouterUuid }}' }); $.ajax({ method: 'POST', @@ -142,8 +161,12 @@ dataType: "json", success: function (result) { var arr = $("#customerForm").serializeArray(); - $.each($("input:checkbox:not(:checked)"), function(i, e) { - arr.push({name: e.name, value: "0"}); + $.each($("input:checkbox"), function(i, e) { + if(!$(this).is(':checked')) { + arr.push({name: e.name, value: "0"}); + }else{ + arr.push({name: e.name, value: "1"}); + } }); $.ajax({ @@ -476,7 +499,7 @@ var $group = $('
'); } var $groupText = $('
'); - var $check = $(''); + var $check = $(''); var $message = $(''); @@ -484,7 +507,7 @@ if(element.required) { $message.appendTo($group); } - $check.appendTo($container); + //$check.appendTo($container); $label.appendTo($container); $group.appendTo($col); $col.appendTo($container); @@ -523,6 +546,8 @@ preview(); bindImageUploaderFiles(); bindCropper(); + + $('.loadingScreen').addClass("hidden"); } }); } @@ -530,8 +555,12 @@ function preview() { $('.previews').html('
Loading
'); var arr = $("#customerForm").serializeArray(); - $.each($("input:checkbox:not(:checked)"), function(i, e) { - arr.push({name: e.name, value: "0"}); + $.each($("input:checkbox"), function(i, e) { + if(!$(this).is(':checked')) { + arr.push({name: e.name, value: "0"}); + }else{ + arr.push({name: e.name, value: "1"}); + } }); var cont = ""; diff --git a/src/new/var/plugins/Custom/PSC/CollectLayouter/Resources/views/frontend/designer/load.html.twig b/src/new/var/plugins/Custom/PSC/CollectLayouter/Resources/views/frontend/designer/load.html.twig index 692b0cd1b..5344573a9 100755 --- a/src/new/var/plugins/Custom/PSC/CollectLayouter/Resources/views/frontend/designer/load.html.twig +++ b/src/new/var/plugins/Custom/PSC/CollectLayouter/Resources/views/frontend/designer/load.html.twig @@ -36,6 +36,18 @@ +
+
+ Loading + + + + + +
+
{{ product.title }} @@ -479,6 +491,7 @@ preview(); bindImageUploaderFiles(); bindCropper(); + $('.loadingScreen').addClass("hidden"); } }); } diff --git a/src/new/var/plugins/Custom/PSC/CollectLayouter/Resources/views/frontend/designer/start.html.twig b/src/new/var/plugins/Custom/PSC/CollectLayouter/Resources/views/frontend/designer/start.html.twig index a23696593..f87d35b56 100755 --- a/src/new/var/plugins/Custom/PSC/CollectLayouter/Resources/views/frontend/designer/start.html.twig +++ b/src/new/var/plugins/Custom/PSC/CollectLayouter/Resources/views/frontend/designer/start.html.twig @@ -36,6 +36,18 @@ +
+
+ Loading + + + + + +
+
{{ product.title }} @@ -108,8 +120,12 @@ dataType: "json", success: function (result) { var arr = $("#customerForm").serializeArray(); - $.each($("input:checkbox:not(:checked)"), function(i, e) { - arr.push({name: e.name, value: "0"}); + $.each($("input:checkbox"), function(i, e) { + if(!$(this).is(':checked')) { + arr.push({name: e.name, value: "0"}); + }else{ + arr.push({name: e.name, value: "1"}); + } }); $.ajax({ @@ -432,7 +448,7 @@ var $group = $('
'); } var $groupText = $('
'); - var $check = $(''); + var $check = $(''); var $message = $(''); @@ -440,7 +456,7 @@ if(element.required) { $message.appendTo($group); } - $check.appendTo($container); +// $check.appendTo($container); $label.appendTo($container); $group.appendTo($col); $col.appendTo($container); @@ -479,6 +495,7 @@ preview(); bindImageUploaderFiles(); bindCropper(); + $('.loadingScreen').addClass("hidden"); } }); } @@ -486,8 +503,12 @@ function preview() { $('.previews').html('
Loading
'); var arr = $("#customerForm").serializeArray(); - $.each($("input:checkbox:not(:checked)"), function(i, e) { - arr.push({name: e.name, value: "0"}); + $.each($("input:checkbox"), function(i, e) { + if(!$(this).is(':checked')) { + arr.push({name: e.name, value: "0"}); + }else{ + arr.push({name: e.name, value: "1"}); + } }); var cont = ""; diff --git a/src/new/var/plugins/Custom/PSC/Formular/Controller/StartController.php b/src/new/var/plugins/Custom/PSC/Formular/Controller/StartController.php index 8d498e551..f89deb877 100755 --- a/src/new/var/plugins/Custom/PSC/Formular/Controller/StartController.php +++ b/src/new/var/plugins/Custom/PSC/Formular/Controller/StartController.php @@ -27,6 +27,8 @@ class StartController extends AbstractController #[Route('/start/{id}', name: 'plugin_custom_psc_formular_frontend_start')] public function startAction(Request $request, string $id) { + + $selectedShop = $this->shopService->getShopByDomain(); $shopDoc = $this->shopService->getMongoShopByDomain(); @@ -44,6 +46,10 @@ class StartController extends AbstractController $web2mailreCaptchawebcode = $formular->getReCaptchawebcode(); $web2mailreCaptchasecret = $formular->getReCaptchasecret(); + if($formular->isPrivate() && $this->getUser() == null) { + return $this->redirect('/'); + } + $web2maileditor = $formular->getEditor(); $send = false; diff --git a/src/new/var/plugins/Custom/PSC/Formular/Document/Formular.php b/src/new/var/plugins/Custom/PSC/Formular/Document/Formular.php index e81bff123..dd4d4a2fd 100755 --- a/src/new/var/plugins/Custom/PSC/Formular/Document/Formular.php +++ b/src/new/var/plugins/Custom/PSC/Formular/Document/Formular.php @@ -31,6 +31,9 @@ class Formular #[Field(type: 'string')] private $formularname; + #[Field(type: 'boolean')] + private bool $private = false; + #[Field(type: 'boolean')] private $reCaptcha; @@ -55,6 +58,7 @@ class Formular public function __construct() { $this->captcha = true; + $this->private = false; } /** @@ -211,4 +215,14 @@ class Formular $this->captchaFox = $captchaFox; } + public function isPrivate(): bool + { + return (bool)$this->private; + } + + public function setPrivate(bool $private): void + { + $this->private = $private; + } + } \ No newline at end of file diff --git a/src/new/var/plugins/Custom/PSC/Formular/Form/Backend/Formular.php b/src/new/var/plugins/Custom/PSC/Formular/Form/Backend/Formular.php index 938b084c3..27e882325 100755 --- a/src/new/var/plugins/Custom/PSC/Formular/Form/Backend/Formular.php +++ b/src/new/var/plugins/Custom/PSC/Formular/Form/Backend/Formular.php @@ -49,6 +49,10 @@ class Formular extends AbstractType 'label' => 'Formularname', 'required' => false, )); + $builder->add('private', CheckboxType::class, array( + 'label' => 'Nur für Angemeldete Nutzer', + 'required' => false + )); $builder->add('captcha', CheckboxType::class, array( 'label' => 'Captcha nutzen (nach DSGVO)?', 'required' => false diff --git a/src/new/var/plugins/Custom/PSC/Formular/Resources/views/backend/settings/create.html.twig b/src/new/var/plugins/Custom/PSC/Formular/Resources/views/backend/settings/create.html.twig index befde6478..04ad78c77 100755 --- a/src/new/var/plugins/Custom/PSC/Formular/Resources/views/backend/settings/create.html.twig +++ b/src/new/var/plugins/Custom/PSC/Formular/Resources/views/backend/settings/create.html.twig @@ -33,6 +33,18 @@
+
+
+
+
+ {{ form_label(form.private ) }} +
+
+ {{ form_widget(form.private) }} +
+
+
+
diff --git a/src/new/var/plugins/Custom/PSC/Formular/Resources/views/backend/settings/edit.html.twig b/src/new/var/plugins/Custom/PSC/Formular/Resources/views/backend/settings/edit.html.twig index f69b226d7..04a969a4c 100755 --- a/src/new/var/plugins/Custom/PSC/Formular/Resources/views/backend/settings/edit.html.twig +++ b/src/new/var/plugins/Custom/PSC/Formular/Resources/views/backend/settings/edit.html.twig @@ -33,6 +33,18 @@
+
+
+
+
+ {{ form_label(form.private ) }} +
+
+ {{ form_widget(form.private) }} +
+
+
+
diff --git a/src/new/var/plugins/Custom/PSC/Pitchprint/Form/BackendFields.php b/src/new/var/plugins/Custom/PSC/Pitchprint/Form/BackendFields.php index 1937599d6..7d81dd133 100755 --- a/src/new/var/plugins/Custom/PSC/Pitchprint/Form/BackendFields.php +++ b/src/new/var/plugins/Custom/PSC/Pitchprint/Form/BackendFields.php @@ -72,7 +72,7 @@ class BackendFields extends \PSC\System\PluginBundle\Form\Field implements Field $builder ->add('uploadPitchprint', CheckboxType::class, ['required' => false, 'label' => 'Aktivieren']) ->add("uploadPitchprintInitalStatus", ChoiceType::class, array( - 'label' => 'Status', + 'label' => 'Initalstatus', 'choices' => $this->statusService->getPositionStatusAsArray(), 'translation_domain' => 'posstatus' )) diff --git a/src/new/var/plugins/Custom/PSC/Pitchprint/Resources/views/backend/design/edit.html.twig b/src/new/var/plugins/Custom/PSC/Pitchprint/Resources/views/backend/design/edit.html.twig index 8811aa11a..dbf84a7d1 100755 --- a/src/new/var/plugins/Custom/PSC/Pitchprint/Resources/views/backend/design/edit.html.twig +++ b/src/new/var/plugins/Custom/PSC/Pitchprint/Resources/views/backend/design/edit.html.twig @@ -36,7 +36,7 @@ parent.document.getElementById('product_pitchprint_uploadPitchprintDesignId').value = id; parent.document.getElementById('product_pitchprint_uploadPitchprintDesignPreviews').value = previews; var useDesignModal = parent.document.getElementById('useDesign'); - parent.loadChoosenDesign(); + parent.loadChoosenDesign1(); parent.$(useDesignModal).modal('hide'); } diff --git a/src/new/var/plugins/Custom/PSC/Pitchprint/Resources/views/form/field/backend.html.twig b/src/new/var/plugins/Custom/PSC/Pitchprint/Resources/views/form/field/backend.html.twig index beae5deb8..b5d447357 100755 --- a/src/new/var/plugins/Custom/PSC/Pitchprint/Resources/views/form/field/backend.html.twig +++ b/src/new/var/plugins/Custom/PSC/Pitchprint/Resources/views/form/field/backend.html.twig @@ -1,5 +1,5 @@ diff --git a/src/new/var/plugins/Custom/PSC/Printess/Form/ProductSettings.php b/src/new/var/plugins/Custom/PSC/Printess/Form/ProductSettings.php index 074947c6c..c257c9717 100755 --- a/src/new/var/plugins/Custom/PSC/Printess/Form/ProductSettings.php +++ b/src/new/var/plugins/Custom/PSC/Printess/Form/ProductSettings.php @@ -37,7 +37,7 @@ class ProductSettings extends \PSC\System\PluginBundle\Form\Field implements Fie $builder ->add('uploadPrintess', CheckboxType::class, ['required' => false, 'label' => 'Aktivieren']) ->add("uploadPrintessInitalStatus", ChoiceType::class, array( - 'label' => 'Status', + 'label' => 'Initalstatus', 'choices' => $this->statusService->getPositionStatusAsArray(), 'translation_domain' => 'posstatus' )) diff --git a/src/new/var/plugins/Custom/PSC/Printess/Resources/views/form/product_settings.html.twig b/src/new/var/plugins/Custom/PSC/Printess/Resources/views/form/product_settings.html.twig index 7750761f7..310637b87 100755 --- a/src/new/var/plugins/Custom/PSC/Printess/Resources/views/form/product_settings.html.twig +++ b/src/new/var/plugins/Custom/PSC/Printess/Resources/views/form/product_settings.html.twig @@ -12,7 +12,7 @@
-
+
{{ form_label(form.printess.uploadPrintessInitalStatus) }}
@@ -20,7 +20,15 @@
-
+
+
+ {{ form_label(form.printess.uploadPrintessDownload) }} +
+ {{ form_widget(form.printess.uploadPrintessDownload) }} +
+
+
+
@@ -32,14 +40,6 @@
-
-
- {{ form_label(form.printess.uploadPrintessDownload) }} -
- {{ form_widget(form.printess.uploadPrintessDownload) }}
-
-
-
diff --git a/src/new/var/plugins/Custom/PSC/R2_Pitchprint/Api/Base.php b/src/new/var/plugins/Custom/PSC/R2_Pitchprint/Api/Base.php index 859f23de0..a61a9d914 100755 --- a/src/new/var/plugins/Custom/PSC/R2_Pitchprint/Api/Base.php +++ b/src/new/var/plugins/Custom/PSC/R2_Pitchprint/Api/Base.php @@ -8,7 +8,7 @@ use function array_merge; abstract class Base { - private string $apiUrl = 'https://api.print.app/runtime/'; + private string $apiUrl = 'https://api.print.app/v1/'; private Shop $shopService; protected HttpClientInterface $httpClient; @@ -21,7 +21,7 @@ abstract class Base { protected function makeGetCall(string $url): array { - $response = $this->httpClient->request('GET', $this->apiUrl . $url, ['headers' => ['Authorization' => $this->shopService->getMongoSelectedShop()->getPluginSettingModule('pitchprint_r2', 'authKey')]]); + $response = $this->httpClient->request('GET', $this->apiUrl . $url, ['headers' => ['Authorization' => 'Bearer ' .$this->shopService->getMongoSelectedShop()->getPluginSettingModule('pitchprint_r2', 'authKey')]]); if($response->getStatusCode() == 200) { return $response->toArray(); diff --git a/src/new/var/plugins/Custom/PSC/R2_Pitchprint/Controller/Backend/DesignController.php b/src/new/var/plugins/Custom/PSC/R2_Pitchprint/Controller/Backend/DesignController.php index 6d7fc7c63..87b65973f 100755 --- a/src/new/var/plugins/Custom/PSC/R2_Pitchprint/Controller/Backend/DesignController.php +++ b/src/new/var/plugins/Custom/PSC/R2_Pitchprint/Controller/Backend/DesignController.php @@ -9,6 +9,7 @@ * @license Private * @link http://www.printshopcreator.de */ + namespace Plugin\Custom\PSC\R2_Pitchprint\Controller\Backend; use Doctrine\ODM\MongoDB\DocumentManager; @@ -22,6 +23,10 @@ use Symfony\Component\Routing\Annotation\Route; class DesignController extends AbstractController { + public function __construct(private Design $designService) + { + } + #[Template()] #[Route('/design/edit/{uuid}/{folder}', name: 'psc_plugin_pitchprint_r2_backend_design_edit')] public function editAction(Request $request, \PSC\System\SettingsBundle\Service\Shop $shopService, DocumentManager $documentManager, EntityManagerInterface $entityManager, Design $design, $uuid, $folder = "") @@ -35,11 +40,16 @@ class DesignController extends AbstractController $output = $design->getDesigns($folder); - $data = []; - if(isset($output['data']) && isset($output['data']['id']) && $output['data']['id'] == 'root') { - $data = $output['data']['items']; - }else{ - $data = $output['data']; + $data = ['folders' => [], 'designs' => []]; + if (isset($output['root']) && isset($output['root']['id']) && $output['root']['id'] == 'root') { + foreach ($output['root']['items'] as $item) { + $data = $this->getItems($data, $item); + } + } + if (isset($output['data'])) { + foreach ($output['data']['items'] as $item) { + $data = $this->getItems($data, $item); + } } return array( @@ -48,4 +58,17 @@ class DesignController extends AbstractController ); } + private function getItems($data, $folder): array + { + $itemResult = $this->designService->getDesigns($folder); + if (isset($itemResult['data']['unit'])) { + $data['designs'][] = $itemResult['data']; + } + if (!isset($itemResult['data']['unit']) && isset($itemResult['data']['items'])) { + $data['folders'][] = $itemResult['data']; + } + return $data; + } + + } diff --git a/src/new/var/plugins/Custom/PSC/R2_Pitchprint/Form/BackendFields.php b/src/new/var/plugins/Custom/PSC/R2_Pitchprint/Form/BackendFields.php index b62ecd58c..092cb653b 100755 --- a/src/new/var/plugins/Custom/PSC/R2_Pitchprint/Form/BackendFields.php +++ b/src/new/var/plugins/Custom/PSC/R2_Pitchprint/Form/BackendFields.php @@ -34,12 +34,12 @@ class BackendFields extends \PSC\System\PluginBundle\Form\Field implements Field $builder ->add('uploadPitchprint', CheckboxType::class, ['required' => false, 'label' => 'Aktivieren']) ->add("uploadPitchprintInitalStatus", ChoiceType::class, array( - 'label' => 'Status', + 'label' => 'Initalstatus', 'choices' => $this->statusService->getPositionStatusAsArray(), 'translation_domain' => 'posstatus' )) ->add('uploadPitchprintDownload', CheckboxType::class, ['required' => false, 'label' => 'Download']) - ->add('uploadPitchprintDesignId', HiddenType::class) + ->add('uploadPitchprintDesignId', TextType::class, ['label' => 'Design', 'required' => false]) ->add('uploadPitchprintDesignPreviews', HiddenType::class); return $builder; diff --git a/src/new/var/plugins/Custom/PSC/R2_Pitchprint/Resources/views/backend/design/edit.html.twig b/src/new/var/plugins/Custom/PSC/R2_Pitchprint/Resources/views/backend/design/edit.html.twig index 6440cae99..396c2b5c7 100755 --- a/src/new/var/plugins/Custom/PSC/R2_Pitchprint/Resources/views/backend/design/edit.html.twig +++ b/src/new/var/plugins/Custom/PSC/R2_Pitchprint/Resources/views/backend/design/edit.html.twig @@ -2,31 +2,29 @@ {% block body %}
- {% for design in designs %} - {% if design.items is defined %} -
-
-
-
Folder {{design.title}}
- {{ design.title }} -
-
- -
- {% else %} -
-
- -
-
{{design.title}} title
- -
- + {% for design in designs.folders %} +
+
+
+
Folder {{design.title}}
+ {{ design.title }}
- {% endif %} +
+ {% endfor %} + {% for design in designs.designs %} +
+
+ +
+
{{design.title}} title
+ +
+ +
+
{% endfor %}
diff --git a/src/new/var/plugins/Custom/PSC/R2_Pitchprint/Resources/views/form/field/backend.html.twig b/src/new/var/plugins/Custom/PSC/R2_Pitchprint/Resources/views/form/field/backend.html.twig index d1beaffae..ee155f1ca 100755 --- a/src/new/var/plugins/Custom/PSC/R2_Pitchprint/Resources/views/form/field/backend.html.twig +++ b/src/new/var/plugins/Custom/PSC/R2_Pitchprint/Resources/views/form/field/backend.html.twig @@ -1,5 +1,5 @@ diff --git a/src/new/var/plugins/Custom/PSC/Saxoprint_API_R1/Api/PutConfig.php b/src/new/var/plugins/Custom/PSC/Saxoprint_API_R1/Api/PutConfig.php index 2c46282b9..36915f3ef 100755 --- a/src/new/var/plugins/Custom/PSC/Saxoprint_API_R1/Api/PutConfig.php +++ b/src/new/var/plugins/Custom/PSC/Saxoprint_API_R1/Api/PutConfig.php @@ -33,6 +33,7 @@ class PutConfig extends Base $result = $this->put(sprintf("config/%s/%s/configurations", $this->customerNumber, $this->getProductId()), $this->buildData()); + var_dump($result); $tmp = ['property' => [], 'custom' => []]; foreach($result['ValidOptions'] as $key => $value) { diff --git a/src/new/var/plugins/Custom/PSC/Saxoprint_API_R1/Controller/SaxoprintController.php b/src/new/var/plugins/Custom/PSC/Saxoprint_API_R1/Controller/SaxoprintController.php index 5bb5ec9a3..17f416ad9 100755 --- a/src/new/var/plugins/Custom/PSC/Saxoprint_API_R1/Controller/SaxoprintController.php +++ b/src/new/var/plugins/Custom/PSC/Saxoprint_API_R1/Controller/SaxoprintController.php @@ -7,7 +7,6 @@ use Doctrine\ORM\EntityManagerInterface; use Plugin\Custom\PSC\Saxoprint_API_R1\Api\GetConfig; use Plugin\Custom\PSC\Saxoprint_API_R1\Api\GetPrice; use Plugin\Custom\PSC\Saxoprint_API_R1\Api\GetPrices; - use Plugin\Custom\PSC\Saxoprint_API_R1\Api\PutConfig; use PSC\Shop\EntityBundle\Entity\Product; use PSC\System\SettingsBundle\Service\Help; @@ -15,7 +14,6 @@ use PSC\System\SettingsBundle\Service\Shop; use Sensio\Bundle\FrameworkExtraBundle\Configuration\IsGranted; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\JsonResponse; - use Symfony\Component\HttpFoundation\Request; use Symfony\Component\Routing\Annotation\Route; use Symfony\Component\Security\Core\Security; @@ -98,29 +96,29 @@ class SaxoprintController extends AbstractController $putConfig->setProductId((int)$request->get('saxoprintProductId')); $disabledValues = []; - if($productDoc->getPluginSettingModule('saxoprint', 'config')) { + if ($productDoc->getPluginSettingModule('saxoprint', 'config')) { $disabledValues = json_decode($productDoc->getPluginSettingModule('saxoprint', 'config'), true); } - if(!empty($reqConfig)) { + if (!empty($reqConfig)) { $putConfig->setConfig($reqConfig); $config = $putConfig->call(); } else { $config = $getConfig->call(); - foreach($config['property'] as $item) { - if($item['defaultValue'] != null) { + foreach ($config['property'] as $item) { + if ($item['defaultValue'] != null) { $reqConfig['property'][$item['id']] = $item['defaultValue']; } } - foreach($config['custom'] as $item) { - if($item['defaultValue'] != null) { + foreach ($config['custom'] as $item) { + if ($item['defaultValue'] != null) { $reqConfig['custom'][$item['id']] = $item['defaultValue']; } } - foreach($disabledValues as $value) { - if($value['id'] != 'auflage' && $value['id'] != 102) { + foreach ($disabledValues as $value) { + if ($value['id'] != 'auflage' && $value['id'] != 102) { $reqConfig['property'][$value['id']] = $value['value']; } } @@ -128,7 +126,8 @@ class SaxoprintController extends AbstractController $putConfig->setConfig($reqConfig); $config = $putConfig->call(); } - +var_dump($config); + die(); $getPrices->setShop($shop->getMongoShopByUid($product->getShop()->getUid())); $getPrices->setProductId((int)$request->get('saxoprintProductId')); @@ -137,23 +136,23 @@ class SaxoprintController extends AbstractController $disabledConfig = []; - foreach($config['property'] as $item) { - if($item['defaultValue'] != null) { + foreach ($config['property'] as $item) { + if ($item['defaultValue'] != null) { $tmpConfig['property'][$item['id']] = $item['defaultValue']; } $disabledValue = array_filter( $disabledValues, function ($y) use ($item) { - if($item['id'] == $y['id']) { + if ($item['id'] == $y['id']) { return true; } return false; } ); - if(count($disabledValue) > 0) { + if (count($disabledValue) > 0) { $desItem = array_pop($disabledValue); - if($desItem['value'] != null && count($item['values']) > 0) { + if ($desItem['value'] != null && count($item['values']) > 0) { $item['disabled'] = true; $item['defaultValue'] = $desItem['value']; $tmpConfig['property'][$item['id']] = $item['defaultValue']; @@ -166,23 +165,23 @@ class SaxoprintController extends AbstractController $disabledConfig[] = $item; } - foreach($config['custom'] as $item) { - if($item['defaultValue'] != null) { + foreach ($config['custom'] as $item) { + if ($item['defaultValue'] != null) { $tmpConfig['custom'][$item['id']] = $item['defaultValue']; } $disabledValue = array_filter( $disabledValues, function ($y) use ($item) { - if($item['id'] == $y['id']) { + if ($item['id'] == $y['id']) { return true; } return false; } ); - if(count($disabledValue) > 0) { + if (count($disabledValue) > 0) { $desItem = array_pop($disabledValue); - if($desItem['value'] != null) { + if ($desItem['value'] != null) { $item['disabled'] = true; $item['defaultValue'] = $desItem['value']; $tmpConfig['custom'][$item['id']] = $item['defaultValue']; @@ -222,7 +221,7 @@ class SaxoprintController extends AbstractController $versandDisabled = array_filter( $disabledValues, function ($item) { - if($item['id'] == 102) { + if ($item['id'] == 102) { return true; } return false; @@ -232,19 +231,19 @@ class SaxoprintController extends AbstractController $auflageDisabled = array_filter( $disabledValues, function ($item) { - if($item['id'] == 'auflage') { + if ($item['id'] == 'auflage') { return true; } return false; } ); - if(count($versandDisabled) == 1) { + if (count($versandDisabled) == 1) { $versand['defaultValue'] = array_shift($versandDisabled)['value']; $versand['disabled'] = true; } - if(count($auflageDisabled) == 1) { + if (count($auflageDisabled) == 1) { $auflagen['defaultValue'] = array_shift($auflageDisabled)['value']; $auflagen['disabled'] = true; } @@ -252,23 +251,23 @@ class SaxoprintController extends AbstractController $priceSum = 0; - foreach($prices as $price) { - if($price['ProductionSpeedPropertyPropertyValue']['102'] == 1055) { + foreach ($prices as $price) { + if ($price['ProductionSpeedPropertyPropertyValue']['102'] == 1055) { $versand['values'][] = ['id' => 1055, 'label' => 'Standard']; } - if($price['ProductionSpeedPropertyPropertyValue']['102'] == 1056) { + if ($price['ProductionSpeedPropertyPropertyValue']['102'] == 1056) { $versand['values'][] = ['id' => 1056, 'label' => 'Standard+']; } - if($price['ProductionSpeedPropertyPropertyValue']['102'] == 1057) { + if ($price['ProductionSpeedPropertyPropertyValue']['102'] == 1057) { $versand['values'][] = ['id' => 1057, 'label' => 'Express']; } - if($price['ProductionSpeedPropertyPropertyValue']['102'] == 1058) { + if ($price['ProductionSpeedPropertyPropertyValue']['102'] == 1058) { $versand['values'][] = ['id' => 1058, 'label' => 'Express']; } - if($price['ProductionSpeedPropertyPropertyValue']['102'] == 1059) { + if ($price['ProductionSpeedPropertyPropertyValue']['102'] == 1059) { $versand['values'][] = ['id' => 1059, 'label' => 'Overnight']; } - if($versand['defaultValue'] == $price['ProductionSpeedPropertyPropertyValue']['102']) { + if ($versand['defaultValue'] == $price['ProductionSpeedPropertyPropertyValue']['102']) { foreach ($price['CirculationPrice'] as $key => $preis) { $auflagen['values'][] = ['id' => $key, 'label' => $key, 'price' => $preis]; if ($auflagen['defaultValue'] == $key) { @@ -278,7 +277,7 @@ class SaxoprintController extends AbstractController } } - if($priceSum == 0) { + if ($priceSum == 0) { $priceSum = $auflagen['values'][0]['price']; } @@ -299,10 +298,10 @@ class SaxoprintController extends AbstractController $sum = $sum + $aufschlagFix; $tmp = []; - foreach($config as $conf) { - if($help = $this->helpService->getHelp($conf['id'])) { + foreach ($config as $conf) { + if ($help = $this->helpService->getHelp((string)$product->getUid(), $conf['id'])) { $conf['help'] = $help->asArray(); - }else{ + } else { $conf['help'] = false; } $tmp[] = $conf; @@ -331,7 +330,7 @@ class SaxoprintController extends AbstractController #[Route('/storePrice', name: 'plugin_custom_psc_saxoprint_store_price')] public function storePrice(Request $request) { - if(isset($_SESSION['Basket']['TempProduct'][$request->get('productId')])) { + if (isset($_SESSION['Basket']['TempProduct'][$request->get('productId')])) { /** * @var \TP_Basket_Item $basketItem */ diff --git a/src/new/var/plugins/System/PSC/Invoice/InvoiceApp/deno.lock b/src/new/var/plugins/System/PSC/Invoice/InvoiceApp/deno.lock index 87696febd..6551d8d4b 100644 --- a/src/new/var/plugins/System/PSC/Invoice/InvoiceApp/deno.lock +++ b/src/new/var/plugins/System/PSC/Invoice/InvoiceApp/deno.lock @@ -5,17 +5,25 @@ "npm:@types/react-dom@^18.3.0": "18.3.1", "npm:@types/react@^18.3.10": "18.3.11", "npm:@vitejs/plugin-react@^4.3.2": "4.3.2_vite@5.4.8_@babel+core@7.25.8", + "npm:autoprefixer@^10.4.20": "10.4.20_postcss@8.4.47", + "npm:axios@^1.7.7": "1.7.7", "npm:eslint-plugin-react-hooks@^5.1.0-rc.0": "5.1.0-rc-fb9a90fa48-20240614_eslint@9.12.0", "npm:eslint-plugin-react-refresh@~0.4.12": "0.4.12_eslint@9.12.0", "npm:eslint@^9.11.1": "9.12.0", "npm:globals@^15.9.0": "15.11.0", + "npm:postcss@^8.4.47": "8.4.47", "npm:react-dom@^18.3.1": "18.3.1_react@18.3.1", + "npm:react-router-dom@^6.27.0": "6.27.0_react@18.3.1_react-dom@18.3.1__react@18.3.1", "npm:react@^18.3.1": "18.3.1", + "npm:tailwindcss@^3.4.13": "3.4.13_postcss@8.4.47", "npm:typescript-eslint@^8.7.0": "8.8.1_@typescript-eslint+parser@8.8.1__eslint@9.12.0__typescript@5.6.3_eslint@9.12.0_typescript@5.6.3", "npm:typescript@^5.5.3": "5.6.3", "npm:vite@^5.4.8": "5.4.8" }, "npm": { + "@alloc/quick-lru@5.2.0": { + "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==" + }, "@ampproject/remapping@2.3.0": { "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", "dependencies": [ @@ -68,7 +76,7 @@ "@babel/compat-data", "@babel/helper-validator-option", "browserslist", - "lru-cache", + "lru-cache@5.1.1", "semver@6.3.1" ] }, @@ -304,6 +312,17 @@ "@humanwhocodes/retry@0.3.1": { "integrity": "sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==" }, + "@isaacs/cliui@8.0.2": { + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dependencies": [ + "string-width@5.1.2", + "string-width-cjs@npm:string-width@4.2.3", + "strip-ansi@7.1.0", + "strip-ansi-cjs@npm:strip-ansi@6.0.1", + "wrap-ansi@8.1.0", + "wrap-ansi-cjs@npm:wrap-ansi@7.0.0" + ] + }, "@jridgewell/gen-mapping@0.3.5": { "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", "dependencies": [ @@ -345,6 +364,12 @@ "fastq" ] }, + "@pkgjs/parseargs@0.11.0": { + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==" + }, + "@remix-run/router@1.20.0": { + "integrity": "sha512-mUnk8rPJBI9loFDZ+YzPGdeniYK+FTmRD1TMCz7ev2SNIozyKKpnGgsxO34u6Z4z/t0ITuu7voi/AshfsGsgFg==" + }, "@rollup/rollup-android-arm-eabi@4.24.0": { "integrity": "sha512-Q6HJd7Y6xdB48x8ZNVDOqsbh2uByBhgK8PiQgPhwkIw/HC/YX5Ghq2mQY5sRMZWHb3VsFkWooUVOZHKr7DmDIA==" }, @@ -549,6 +574,12 @@ "uri-js" ] }, + "ansi-regex@5.0.1": { + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" + }, + "ansi-regex@6.1.0": { + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==" + }, "ansi-styles@3.2.1": { "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dependencies": [ @@ -561,12 +592,54 @@ "color-convert@2.0.1" ] }, + "ansi-styles@6.2.1": { + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==" + }, + "any-promise@1.3.0": { + "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==" + }, + "anymatch@3.1.3": { + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dependencies": [ + "normalize-path", + "picomatch" + ] + }, + "arg@5.0.2": { + "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==" + }, "argparse@2.0.1": { "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" }, + "asynckit@0.4.0": { + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" + }, + "autoprefixer@10.4.20_postcss@8.4.47": { + "integrity": "sha512-XY25y5xSv/wEoqzDyXXME4AFfkZI0P23z6Fs3YgymDnKJkCGOnkL0iTxCa85UTqaSgfcqyf3UA6+c7wUvx/16g==", + "dependencies": [ + "browserslist", + "caniuse-lite", + "fraction.js", + "normalize-range", + "picocolors", + "postcss", + "postcss-value-parser" + ] + }, + "axios@1.7.7": { + "integrity": "sha512-S4kL7XrjgBmvdGut0sN3yJxqYzrDOnivkBiN0OFs6hLiUam3UPvswUo0kqGyhqUZGEOytHyumEdXsAkgCOUf3Q==", + "dependencies": [ + "follow-redirects", + "form-data", + "proxy-from-env" + ] + }, "balanced-match@1.0.2": { "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, + "binary-extensions@2.3.0": { + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==" + }, "brace-expansion@1.1.11": { "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dependencies": [ @@ -598,6 +671,9 @@ "callsites@3.1.0": { "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==" }, + "camelcase-css@2.0.1": { + "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==" + }, "caniuse-lite@1.0.30001668": { "integrity": "sha512-nWLrdxqCdblixUO+27JtGJJE/txpJlyUy5YN1u53wLZkP0emYCo5zgS6QYft7VUYR42LGgi/S5hdLZTrnyIddw==" }, @@ -616,6 +692,19 @@ "supports-color@7.2.0" ] }, + "chokidar@3.6.0": { + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "dependencies": [ + "anymatch", + "braces", + "fsevents", + "glob-parent@5.1.2", + "is-binary-path", + "is-glob", + "normalize-path", + "readdirp" + ] + }, "color-convert@1.9.3": { "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "dependencies": [ @@ -634,6 +723,15 @@ "color-name@1.1.4": { "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, + "combined-stream@1.0.8": { + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dependencies": [ + "delayed-stream" + ] + }, + "commander@4.1.1": { + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==" + }, "concat-map@0.0.1": { "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" }, @@ -648,6 +746,9 @@ "which" ] }, + "cssesc@3.0.0": { + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==" + }, "csstype@3.1.3": { "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==" }, @@ -660,9 +761,27 @@ "deep-is@0.1.4": { "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==" }, + "delayed-stream@1.0.0": { + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==" + }, + "didyoumean@1.2.2": { + "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==" + }, + "dlv@1.1.3": { + "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==" + }, + "eastasianwidth@0.2.0": { + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==" + }, "electron-to-chromium@1.5.36": { "integrity": "sha512-HYTX8tKge/VNp6FGO+f/uVDmUkq+cEfcxYhKf15Akc4M5yxt5YmorwlAitKWjWhWQnKcDRBAQKXkhqqXMqcrjw==" }, + "emoji-regex@8.0.0": { + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "emoji-regex@9.2.2": { + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" + }, "esbuild@0.21.5": { "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==", "dependencies": [ @@ -845,9 +964,33 @@ "flatted@3.3.1": { "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==" }, + "follow-redirects@1.15.9": { + "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==" + }, + "foreground-child@3.3.0": { + "integrity": "sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==", + "dependencies": [ + "cross-spawn", + "signal-exit" + ] + }, + "form-data@4.0.1": { + "integrity": "sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw==", + "dependencies": [ + "asynckit", + "combined-stream", + "mime-types" + ] + }, + "fraction.js@4.3.7": { + "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==" + }, "fsevents@2.3.3": { "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==" }, + "function-bind@1.1.2": { + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==" + }, "gensync@1.0.0-beta.2": { "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==" }, @@ -863,6 +1006,17 @@ "is-glob" ] }, + "glob@10.4.5": { + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "dependencies": [ + "foreground-child", + "jackspeak", + "minimatch@9.0.5", + "minipass", + "package-json-from-dist", + "path-scurry" + ] + }, "globals@11.12.0": { "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==" }, @@ -881,6 +1035,12 @@ "has-flag@4.0.0": { "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" }, + "hasown@2.0.2": { + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dependencies": [ + "function-bind" + ] + }, "ignore@5.3.2": { "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==" }, @@ -894,9 +1054,24 @@ "imurmurhash@0.1.4": { "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==" }, + "is-binary-path@2.1.0": { + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dependencies": [ + "binary-extensions" + ] + }, + "is-core-module@2.15.1": { + "integrity": "sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==", + "dependencies": [ + "hasown" + ] + }, "is-extglob@2.1.1": { "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==" }, + "is-fullwidth-code-point@3.0.0": { + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" + }, "is-glob@4.0.3": { "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "dependencies": [ @@ -909,6 +1084,16 @@ "isexe@2.0.0": { "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" }, + "jackspeak@3.4.3": { + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + "dependencies": [ + "@isaacs/cliui", + "@pkgjs/parseargs" + ] + }, + "jiti@1.21.6": { + "integrity": "sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w==" + }, "js-tokens@4.0.0": { "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" }, @@ -946,6 +1131,15 @@ "type-check" ] }, + "lilconfig@2.1.0": { + "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==" + }, + "lilconfig@3.1.2": { + "integrity": "sha512-eop+wDAvpItUys0FWkHIKeC9ybYrTGbU41U5K7+bttZZeohvnY7M9dZ5kB21GNWiFT2q1OoPTvncPCgSOVO5ow==" + }, + "lines-and-columns@1.2.4": { + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" + }, "locate-path@6.0.0": { "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dependencies": [ @@ -961,6 +1155,9 @@ "js-tokens" ] }, + "lru-cache@10.4.3": { + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==" + }, "lru-cache@5.1.1": { "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", "dependencies": [ @@ -977,6 +1174,15 @@ "picomatch" ] }, + "mime-db@1.52.0": { + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" + }, + "mime-types@2.1.35": { + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dependencies": [ + "mime-db" + ] + }, "minimatch@3.1.2": { "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dependencies": [ @@ -989,9 +1195,20 @@ "brace-expansion@2.0.1" ] }, + "minipass@7.1.2": { + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==" + }, "ms@2.1.3": { "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" }, + "mz@2.7.0": { + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "dependencies": [ + "any-promise", + "object-assign", + "thenify-all" + ] + }, "nanoid@3.3.7": { "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==" }, @@ -1001,6 +1218,18 @@ "node-releases@2.0.18": { "integrity": "sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==" }, + "normalize-path@3.0.0": { + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" + }, + "normalize-range@0.1.2": { + "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==" + }, + "object-assign@4.1.1": { + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==" + }, + "object-hash@3.0.0": { + "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==" + }, "optionator@0.9.4": { "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", "dependencies": [ @@ -1024,6 +1253,9 @@ "p-limit" ] }, + "package-json-from-dist@1.0.1": { + "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==" + }, "parent-module@1.0.1": { "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", "dependencies": [ @@ -1036,12 +1268,69 @@ "path-key@3.1.1": { "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==" }, + "path-parse@1.0.7": { + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" + }, + "path-scurry@1.11.1": { + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "dependencies": [ + "lru-cache@10.4.3", + "minipass" + ] + }, "picocolors@1.1.0": { "integrity": "sha512-TQ92mBOW0l3LeMeyLV6mzy/kWr8lkd/hp3mTg7wYK7zJhuBStmGMBG0BdeDZS/dZx1IukaX6Bk11zcln25o1Aw==" }, "picomatch@2.3.1": { "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==" }, + "pify@2.3.0": { + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==" + }, + "pirates@4.0.6": { + "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==" + }, + "postcss-import@15.1.0_postcss@8.4.47": { + "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==", + "dependencies": [ + "postcss", + "postcss-value-parser", + "read-cache", + "resolve" + ] + }, + "postcss-js@4.0.1_postcss@8.4.47": { + "integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==", + "dependencies": [ + "camelcase-css", + "postcss" + ] + }, + "postcss-load-config@4.0.2_postcss@8.4.47": { + "integrity": "sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==", + "dependencies": [ + "lilconfig@3.1.2", + "postcss", + "yaml" + ] + }, + "postcss-nested@6.2.0_postcss@8.4.47": { + "integrity": "sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==", + "dependencies": [ + "postcss", + "postcss-selector-parser" + ] + }, + "postcss-selector-parser@6.1.2": { + "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", + "dependencies": [ + "cssesc", + "util-deprecate" + ] + }, + "postcss-value-parser@4.2.0": { + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==" + }, "postcss@8.4.47": { "integrity": "sha512-56rxCq7G/XfB4EkXq9Egn5GCqugWvDFjafDOThIdMBsI15iqPqR5r15TfSr1YPYeEI19YeaXMCbY6u88Y76GLQ==", "dependencies": [ @@ -1053,6 +1342,9 @@ "prelude-ls@1.2.1": { "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==" }, + "proxy-from-env@1.1.0": { + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" + }, "punycode@2.3.1": { "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==" }, @@ -1070,15 +1362,51 @@ "react-refresh@0.14.2": { "integrity": "sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==" }, + "react-router-dom@6.27.0_react@18.3.1_react-dom@18.3.1__react@18.3.1": { + "integrity": "sha512-+bvtFWMC0DgAFrfKXKG9Fc+BcXWRUO1aJIihbB79xaeq0v5UzfvnM5houGUm1Y461WVRcgAQ+Clh5rdb1eCx4g==", + "dependencies": [ + "@remix-run/router", + "react", + "react-dom", + "react-router" + ] + }, + "react-router@6.27.0_react@18.3.1": { + "integrity": "sha512-YA+HGZXz4jaAkVoYBE98VQl+nVzI+cVI2Oj/06F5ZM+0u3TgedN9Y9kmMRo2mnkSK2nCpNQn0DVob4HCsY/WLw==", + "dependencies": [ + "@remix-run/router", + "react" + ] + }, "react@18.3.1": { "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", "dependencies": [ "loose-envify" ] }, + "read-cache@1.0.0": { + "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", + "dependencies": [ + "pify" + ] + }, + "readdirp@3.6.0": { + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dependencies": [ + "picomatch" + ] + }, "resolve-from@4.0.0": { "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==" }, + "resolve@1.22.8": { + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "dependencies": [ + "is-core-module", + "path-parse", + "supports-preserve-symlinks-flag" + ] + }, "reusify@1.0.4": { "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==" }, @@ -1132,12 +1460,55 @@ "shebang-regex@3.0.0": { "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==" }, + "signal-exit@4.1.0": { + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==" + }, "source-map-js@1.2.1": { "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==" }, + "string-width@4.2.3": { + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dependencies": [ + "emoji-regex@8.0.0", + "is-fullwidth-code-point", + "strip-ansi@6.0.1" + ] + }, + "string-width@5.1.2": { + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dependencies": [ + "eastasianwidth", + "emoji-regex@9.2.2", + "strip-ansi@7.1.0" + ] + }, + "strip-ansi@6.0.1": { + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dependencies": [ + "ansi-regex@5.0.1" + ] + }, + "strip-ansi@7.1.0": { + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dependencies": [ + "ansi-regex@6.1.0" + ] + }, "strip-json-comments@3.1.1": { "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==" }, + "sucrase@3.35.0": { + "integrity": "sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==", + "dependencies": [ + "@jridgewell/gen-mapping", + "commander", + "glob", + "lines-and-columns", + "mz", + "pirates", + "ts-interface-checker" + ] + }, "supports-color@5.5.0": { "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dependencies": [ @@ -1150,9 +1521,51 @@ "has-flag@4.0.0" ] }, + "supports-preserve-symlinks-flag@1.0.0": { + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==" + }, + "tailwindcss@3.4.13_postcss@8.4.47": { + "integrity": "sha512-KqjHOJKogOUt5Bs752ykCeiwvi0fKVkr5oqsFNt/8px/tA8scFPIlkygsf6jXrfCqGHz7VflA6+yytWuM+XhFw==", + "dependencies": [ + "@alloc/quick-lru", + "arg", + "chokidar", + "didyoumean", + "dlv", + "fast-glob", + "glob-parent@6.0.2", + "is-glob", + "jiti", + "lilconfig@2.1.0", + "micromatch", + "normalize-path", + "object-hash", + "picocolors", + "postcss", + "postcss-import", + "postcss-js", + "postcss-load-config", + "postcss-nested", + "postcss-selector-parser", + "resolve", + "sucrase" + ] + }, "text-table@0.2.0": { "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==" }, + "thenify-all@1.6.0": { + "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", + "dependencies": [ + "thenify" + ] + }, + "thenify@3.3.1": { + "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", + "dependencies": [ + "any-promise" + ] + }, "to-fast-properties@2.0.0": { "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==" }, @@ -1168,6 +1581,9 @@ "typescript" ] }, + "ts-interface-checker@0.1.13": { + "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==" + }, "type-check@0.4.0": { "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", "dependencies": [ @@ -1199,6 +1615,9 @@ "punycode" ] }, + "util-deprecate@1.0.2": { + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + }, "vite@5.4.8": { "integrity": "sha512-FqrItQ4DT1NC4zCUqMB4c4AZORMKIa0m8/URVCZ77OZ/QSNeJ54bU1vrFADbDsuwfIPcgknRkmqakQcgnL4GiQ==", "dependencies": [ @@ -1217,9 +1636,28 @@ "word-wrap@1.2.5": { "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==" }, + "wrap-ansi@7.0.0": { + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dependencies": [ + "ansi-styles@4.3.0", + "string-width@4.2.3", + "strip-ansi@6.0.1" + ] + }, + "wrap-ansi@8.1.0": { + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dependencies": [ + "ansi-styles@6.2.1", + "string-width@5.1.2", + "strip-ansi@7.1.0" + ] + }, "yallist@3.1.1": { "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" }, + "yaml@2.6.0": { + "integrity": "sha512-a6ae//JvKDEra2kdi1qzCyrJW/WZCgFi8ydDV+eXExl95t+5R+ijnqHJbz9tmMh8FUjx3iv2fCQ4dclAQlO2UQ==" + }, "yocto-queue@0.1.0": { "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==" } @@ -1228,6 +1666,7 @@ "packageJson": { "dependencies": [ "npm:@eslint/js@^9.11.1", + "npm:@hookform/resolvers@^3.9.0", "npm:@types/react-dom@^18.3.0", "npm:@types/react@^18.3.10", "npm:@vitejs/plugin-react@^4.3.2", @@ -1239,12 +1678,18 @@ "npm:globals@^15.9.0", "npm:postcss@^8.4.47", "npm:react-dom@^18.3.1", + "npm:react-hook-form@^7.53.0", "npm:react-router-dom@^6.27.0", + "npm:react-router@^6.27.0", + "npm:react-select-async-paginate@~0.7.6", + "npm:react-toastify@^10.0.6", "npm:react@^18.3.1", "npm:tailwindcss@^3.4.13", "npm:typescript-eslint@^8.7.0", "npm:typescript@^5.5.3", - "npm:vite@^5.4.8" + "npm:uuid@^11.0.1", + "npm:vite@^5.4.8", + "npm:yup@^1.4.0" ] } } diff --git a/src/new/var/plugins/System/PSC/Invoice/InvoiceApp/package.json b/src/new/var/plugins/System/PSC/Invoice/InvoiceApp/package.json index 86896cf63..95396f8b1 100644 --- a/src/new/var/plugins/System/PSC/Invoice/InvoiceApp/package.json +++ b/src/new/var/plugins/System/PSC/Invoice/InvoiceApp/package.json @@ -10,13 +10,20 @@ "preview": "vite preview" }, "dependencies": { + "@hookform/resolvers": "^3.9.0", "autoprefixer": "^10.4.20", "axios": "^1.7.7", "postcss": "^8.4.47", "react": "^18.3.1", "react-dom": "^18.3.1", + "react-hook-form": "^7.53.0", + "react-router": "^6.27.0", "react-router-dom": "^6.27.0", - "tailwindcss": "^3.4.13" + "react-select-async-paginate": "^0.7.6", + "react-toastify": "^10.0.6", + "tailwindcss": "^3.4.13", + "uuid": "^11.0.1", + "yup": "^1.4.0" }, "devDependencies": { "@eslint/js": "^9.11.1", diff --git a/src/new/var/plugins/System/PSC/Invoice/InvoiceApp/src/App.tsx b/src/new/var/plugins/System/PSC/Invoice/InvoiceApp/src/App.tsx deleted file mode 100644 index 0bcbadb7c..000000000 --- a/src/new/var/plugins/System/PSC/Invoice/InvoiceApp/src/App.tsx +++ /dev/null @@ -1,33 +0,0 @@ -import { useState } from 'react' -import { createContext } from 'react'; -import './assets/App.css' -import { BrowserRouter, Route, Routes } from "react-router-dom" -import Login from "./components/login/login" - -interface AuthContextType { - jwt: string; -} - -const AuthContext = createContext(null); - -function App() { - const [jwt, setJWt] = useState(null) - - return ( - <> - - - - } /> - } /> - } /> - - - - - ) -} - -export default App diff --git a/src/new/var/plugins/System/PSC/Invoice/InvoiceApp/src/app.tsx b/src/new/var/plugins/System/PSC/Invoice/InvoiceApp/src/app.tsx new file mode 100644 index 000000000..e4fa8c354 --- /dev/null +++ b/src/new/var/plugins/System/PSC/Invoice/InvoiceApp/src/app.tsx @@ -0,0 +1,31 @@ +import { Outlet } from "react-router"; +import Navbar from "./components/navbar/navbar"; +import './assets/app.css' +import { BrowserRouter, Route, Routes } from "react-router-dom" +import { ToastContainer } from "react-toastify"; +import { UserProvider } from "./context/useAuth" +import { OrderProvider } from "./context/useOrder" +import globalRouter from "./helpers/globalRouter"; +import { useLocation, useNavigate } from "react-router-dom"; + +function App() { + + const navigate = useNavigate(); + const location = useLocation(); + globalRouter.navigate = navigate; + globalRouter.location = location; + + return ( + <> + + + + + + + + + ) +} + +export default App diff --git a/src/new/var/plugins/System/PSC/Invoice/InvoiceApp/src/assets/App.css b/src/new/var/plugins/System/PSC/Invoice/InvoiceApp/src/assets/App.css deleted file mode 100644 index b9d355df2..000000000 --- a/src/new/var/plugins/System/PSC/Invoice/InvoiceApp/src/assets/App.css +++ /dev/null @@ -1,42 +0,0 @@ -#root { - max-width: 1280px; - margin: 0 auto; - padding: 2rem; - text-align: center; -} - -.logo { - height: 6em; - padding: 1.5em; - will-change: filter; - transition: filter 300ms; -} -.logo:hover { - filter: drop-shadow(0 0 2em #646cffaa); -} -.logo.react:hover { - filter: drop-shadow(0 0 2em #61dafbaa); -} - -@keyframes logo-spin { - from { - transform: rotate(0deg); - } - to { - transform: rotate(360deg); - } -} - -@media (prefers-reduced-motion: no-preference) { - a:nth-of-type(2) .logo { - animation: logo-spin infinite 20s linear; - } -} - -.card { - padding: 2em; -} - -.read-the-docs { - color: #888; -} diff --git a/src/new/var/plugins/System/PSC/Invoice/InvoiceApp/src/assets/app.css b/src/new/var/plugins/System/PSC/Invoice/InvoiceApp/src/assets/app.css new file mode 100644 index 000000000..8b1378917 --- /dev/null +++ b/src/new/var/plugins/System/PSC/Invoice/InvoiceApp/src/assets/app.css @@ -0,0 +1 @@ + diff --git a/src/new/var/plugins/System/PSC/Invoice/InvoiceApp/src/assets/index.css b/src/new/var/plugins/System/PSC/Invoice/InvoiceApp/src/assets/index.css index bcf21ebb3..9890d8cda 100644 --- a/src/new/var/plugins/System/PSC/Invoice/InvoiceApp/src/assets/index.css +++ b/src/new/var/plugins/System/PSC/Invoice/InvoiceApp/src/assets/index.css @@ -1,3 +1,4 @@ +@import 'react-toastify/dist/ReactToastify.css'; @tailwind base; @tailwind components; @tailwind utilities; diff --git a/src/new/var/plugins/System/PSC/Invoice/InvoiceApp/src/components/login/login.tsx b/src/new/var/plugins/System/PSC/Invoice/InvoiceApp/src/components/login/login.tsx index bc6b5cf3f..7ed1a263f 100644 --- a/src/new/var/plugins/System/PSC/Invoice/InvoiceApp/src/components/login/login.tsx +++ b/src/new/var/plugins/System/PSC/Invoice/InvoiceApp/src/components/login/login.tsx @@ -1,58 +1,106 @@ -import React, { useState, useContext } from "react"; -import axios from "axios"; +import React from "react"; +import * as Yup from "yup"; +import { yupResolver } from "@hookform/resolvers/yup"; +import { useAuth } from "../../context/useAuth"; +import { useForm } from "react-hook-form"; +import { useLocation } from "react-router-dom" +type Props = {}; -function Login() { - const [username, setUsername] = useState(""); - const [password, setPassword] = useState(""); - const [errorMessage, setErrorMessage] = useState(null); - const { setToken } = useContext(AuthContext); - const navigate = useNavigate(); +type LoginFormsInputs = { + userName: string; + password: string; +}; - const handleSubmit = async (e) => { - e.preventDefault(); - try { - const response = await axios.post("/apps/api/contact/login", { - username, - password, - }); - setToken(response.data.token); - localStorage.setItem("token", response.data.token); - navigate("/dashboard"); - } catch (error) { - console.error("Authentication failed:", error); - setToken(null); - localStorage.removeItem("token"); - if (error.response && error.response.data) { - setErrorMessage(error.response.data); // Set the error message if present in the error response - } else { - setErrorMessage("An unexpected error occurred. Please try again."); - } - } - }; +const validation = Yup.object().shape({ + userName: Yup.string().required("Username is required"), + password: Yup.string().required("Password is required"), +}); +const Login = (props: Props) => { + const { loginUser } = useAuth(); + const { + register, + handleSubmit, + formState: { errors }, + } = useForm({ resolver: yupResolver(validation) }); - return ( - <> -
-
-
-
-

Sign Up Here

-
-

UserName

- -

PassWord

- - -
-

Remember Me

-
-
-
-
-
- - ) -} + const location = useLocation(); -export default Login + const handleLogin = (form: LoginFormsInputs) => { + loginUser(form.userName, form.password, location.state.from); + }; + return ( +
+
+
+
+

+ Sign in to your account +

+
+
+ + + {errors.userName ? ( +

{errors.userName.message}

+ ) : ( + "" + )} +
+
+ + + {errors.password ? ( +

{errors.password.message}

+ ) : ( + "" + )} +
+ + +
+
+
+
+
+ ); +}; + +export default Login; diff --git a/src/new/var/plugins/System/PSC/Invoice/InvoiceApp/src/components/navbar/navbar.tsx b/src/new/var/plugins/System/PSC/Invoice/InvoiceApp/src/components/navbar/navbar.tsx new file mode 100644 index 000000000..9093f56b9 --- /dev/null +++ b/src/new/var/plugins/System/PSC/Invoice/InvoiceApp/src/components/navbar/navbar.tsx @@ -0,0 +1,39 @@ +import React from "react"; +import { Link } from "react-router-dom"; +import { useAuth } from "../../context/useAuth"; + +interface Props {} + +const Navbar = (props: Props) => { + const { isLoggedIn, user, logout } = useAuth(); + return ( + + ); +}; + +export default Navbar; diff --git a/src/new/var/plugins/System/PSC/Invoice/InvoiceApp/src/components/order/calc/calc.tsx b/src/new/var/plugins/System/PSC/Invoice/InvoiceApp/src/components/order/calc/calc.tsx new file mode 100644 index 000000000..92757af0d --- /dev/null +++ b/src/new/var/plugins/System/PSC/Invoice/InvoiceApp/src/components/order/calc/calc.tsx @@ -0,0 +1,16 @@ +import React from 'reactjs' +import Currency from "../../../helpers/currency" +import {useOrder} from "../../../context/useOrder" + +const Calc = () => { + + const { getVat, getGross, getNet } = useOrder(); + + return ( +

+ Netto: + MwSt.: = Brutto: +

+ ) +} + +export default Calc diff --git a/src/new/var/plugins/System/PSC/Invoice/InvoiceApp/src/components/order/order.tsx b/src/new/var/plugins/System/PSC/Invoice/InvoiceApp/src/components/order/order.tsx new file mode 100644 index 000000000..46ff3eb8d --- /dev/null +++ b/src/new/var/plugins/System/PSC/Invoice/InvoiceApp/src/components/order/order.tsx @@ -0,0 +1,33 @@ +import {useParams} from "react-router-dom" +import { useOrder } from "../../context/useOrder" +import { createContext, useState, useEffect } from 'react'; +import Calc from "./calc/calc" +import ShippingComponent from "./shipping/shipping" +import PaymentComponent from "./payment/payment" + +const Order = () => { + + const { loadOrder } = useOrder(); + let { uuid } = useParams(); + + useEffect(() => { + console.log(uuid) + if(uuid) { + loadOrder(uuid) + } + }, [uuid]) + + return ( +
+
+ + +
+
+ +
+
+ ) +} + +export default Order diff --git a/src/new/var/plugins/System/PSC/Invoice/InvoiceApp/src/components/order/payment/payment.tsx b/src/new/var/plugins/System/PSC/Invoice/InvoiceApp/src/components/order/payment/payment.tsx new file mode 100644 index 000000000..99c0e2a6a --- /dev/null +++ b/src/new/var/plugins/System/PSC/Invoice/InvoiceApp/src/components/order/payment/payment.tsx @@ -0,0 +1,55 @@ +import React from 'reactjs' +import { AsyncPaginate } from "react-select-async-paginate" +import {useOrder} from "../../../context/useOrder" +import api from "../../../helpers/api" +import { Payment } from "../../../models/payment" +const PaymentComponent = () => { + + const { getOrder, setPayment, getPayment, getShop } = useOrder(); + + const loadOptions = async (searchQuery, loadedOptions) => { + if(getShop().uuid == "") { + return { + options: [], + hasMore: false + } + } + const data = await api.get('/payment/by/shop/' + getShop().uuid).then(( response ) => { + return response.data.data.map((item: any) => { + let payment = new Payment() + payment.uid = item.uid + payment.title = item.title + payment.uuid = item.uuid + return payment + }) + }) + return { + options: data, + hasMore: false, + } + } + + const onChange = (option) => { + setPayment(option) + } + + return ( +
+ option.uid} + getOptionLabel={(option) => option.title} + onChange={onChange} + isSearchable={false} + className={`${getPayment().uid == 0 ? "border border-red-500" : ""}`} + /> +
+ ) +} + +export default PaymentComponent diff --git a/src/new/var/plugins/System/PSC/Invoice/InvoiceApp/src/components/order/shipping/shipping.tsx b/src/new/var/plugins/System/PSC/Invoice/InvoiceApp/src/components/order/shipping/shipping.tsx new file mode 100644 index 000000000..889bbe274 --- /dev/null +++ b/src/new/var/plugins/System/PSC/Invoice/InvoiceApp/src/components/order/shipping/shipping.tsx @@ -0,0 +1,55 @@ +import React from 'reactjs' +import { AsyncPaginate } from "react-select-async-paginate" +import {useOrder} from "../../../context/useOrder" +import api from "../../../helpers/api" +import { Shipping } from "../../../models/shipping" +const ShippingComponent = () => { + + const { getOrder, setShipping, getShipping, getShop } = useOrder(); + + const loadOptions = async (searchQuery, loadedOptions) => { + if(getShop().uuid == "") { + return { + options: [], + hasMore: false + } + } + const data = await api.get('/shipping/by/shop/' + getShop().uuid).then(( response ) => { + return response.data.data.map((item: any) => { + let shipment = new Shipping() + shipment.uid = item.uid + shipment.title = item.title + shipment.uuid = item.uuid + return shipment + }) + }) + return { + options: data, + hasMore: false, + } + } + + const onChange = (option) => { + setShipping(option) + } + + return ( +
+ option.uid} + getOptionLabel={(option) => option.title} + onChange={onChange} + isSearchable={false} + className={`${getShipping().uid == 0 ? "border border-red-500" : ""}`} + /> +
+ ) +} + +export default ShippingComponent diff --git a/src/new/var/plugins/System/PSC/Invoice/InvoiceApp/src/components/welcome/welcome.tsx b/src/new/var/plugins/System/PSC/Invoice/InvoiceApp/src/components/welcome/welcome.tsx new file mode 100644 index 000000000..427c27890 --- /dev/null +++ b/src/new/var/plugins/System/PSC/Invoice/InvoiceApp/src/components/welcome/welcome.tsx @@ -0,0 +1,10 @@ + +const Welcome = () => { + + return ( + <> + + ) +} + +export default Welcome diff --git a/src/new/var/plugins/System/PSC/Invoice/InvoiceApp/src/context/useAuth.tsx b/src/new/var/plugins/System/PSC/Invoice/InvoiceApp/src/context/useAuth.tsx new file mode 100644 index 000000000..985b63644 --- /dev/null +++ b/src/new/var/plugins/System/PSC/Invoice/InvoiceApp/src/context/useAuth.tsx @@ -0,0 +1,102 @@ +import { createContext, useEffect, useState } from "react"; +import { UserProfile } from "../models/user"; +import { useNavigate } from "react-router-dom"; +import { loginAPI, registerAPI } from "../services/authService"; +import { toast } from "react-toastify"; +import React from "react"; +import axios from "axios"; + +type UserContextType = { + user: UserProfile | null; + token: string | null; + registerUser: (email: string, username: string, password: string) => void; + loginUser: (username: string, password: string) => void; + logout: () => void; + isLoggedIn: () => boolean; +}; + +type Props = { children: React.ReactNode }; + +const UserContext = createContext({} as UserContextType); + +export const UserProvider = ({ children }: Props) => { + const navigate = useNavigate(); + const [token, setToken] = useState(null); + const [user, setUser] = useState(null); + const [isReady, setIsReady] = useState(false); + + useEffect(() => { + const user = localStorage.getItem("user"); + const token = localStorage.getItem("token"); + if (user && token) { + setUser(JSON.parse(user)); + setToken(token); + axios.defaults.headers.common["Authorization"] = "Bearer " + token; + } + setIsReady(true); + }, []); + + const registerUser = async ( + email: string, + username: string, + password: string + ) => { + await registerAPI(email, username, password) + .then((res) => { + if (res) { + localStorage.setItem("token", res?.data.token); + const userObj = { + userName: res?.data.userName, + email: res?.data.email, + }; + localStorage.setItem("user", JSON.stringify(userObj)); + setToken(res?.data.token!); + setUser(userObj!); + toast.success("Login Success!"); + navigate("/search"); + } + }) + .catch((e) => toast.warning("Server error occured")); + }; + + const loginUser = async (username: string, password: string, from: string) => { + await loginAPI(username, password) + .then((res) => { + if (res) { + localStorage.setItem("token", res?.data.token); + const userObj = { + userName: res?.data.userName, + email: res?.data.email, + }; + localStorage.setItem("user", JSON.stringify(userObj)); + setToken(res?.data.token!); + setUser(userObj!); + toast.success("Login Success!"); + navigate(from); + } + }) + .catch((e) => toast.warning("Server error occured")); + }; + + const isLoggedIn = () => { + return !!user; + }; + + const logout = () => { + localStorage.removeItem("token"); + localStorage.removeItem("user"); + setUser(null); + setToken(""); + navigate("/"); + }; + + return ( + + {isReady ? children : null} + + ); +}; + +export const useAuth = () => React.useContext(UserContext); diff --git a/src/new/var/plugins/System/PSC/Invoice/InvoiceApp/src/context/useOrder.tsx b/src/new/var/plugins/System/PSC/Invoice/InvoiceApp/src/context/useOrder.tsx new file mode 100644 index 000000000..0367b4b82 --- /dev/null +++ b/src/new/var/plugins/System/PSC/Invoice/InvoiceApp/src/context/useOrder.tsx @@ -0,0 +1,89 @@ +import { createContext, useState, useEffect } from 'react'; +import api from '../helpers/api'; +import React from "react"; +import { Order } from "../models/order" +import { Shipping } from "../models/shipping" +import { Payment } from "../models/payment" +import { Shop } from "../models/shop" + +type OrderContextType = { + loadOrder: (uuid: string) => void; + getOrder: (uuid: string) => void; + getVat: () => float; + getNet: () => float; + getGross: () => float; + setShipping: (shipping: Shipping) => void; + setPayment: (payment: Payment) => void; + getShipping: () => Shipping; + getPayment: () => Payment; + getShop: () => Shop; +}; + +type Props = { children: React.ReactNode }; + +const OrderContext = createContext({} as OrderContextType); + +export const OrderProvider = ({ children }: Props) => { + const [order, setOrder] = useState(new Order()) + + const loadOrder = async (uuid: string) => { + await api.post('order/getonebyuuid', {uuid: uuid}).then(function(response) { + let order = new Order() + order.parseFromJson(response.data) + setOrder(order) + }); + }; + + const getShop = () => { + return order.shop + }; + const getOrder = () => { + return order + }; + const getGross = () => { + return order.gross + }; + const getVat = () => { + return order.vat + }; + const getNet = () => { + return order.net + }; + const setShipping = (shipping: Shipping) => { + order.shipping = shipping + setOrder(order) + }; + const getShipping = () => { + return order.shipping + }; + const setPayment = (payment: Payment) => { + order.payment = payment + setOrder(order) + }; + const getPayment = () => { + return order.payment + } + + + return ( + + {children} + + ); + +} + +export const useOrder = () => React.useContext(OrderContext); diff --git a/src/new/var/plugins/System/PSC/Invoice/InvoiceApp/src/helpers/api.tsx b/src/new/var/plugins/System/PSC/Invoice/InvoiceApp/src/helpers/api.tsx new file mode 100644 index 000000000..db43bfe5c --- /dev/null +++ b/src/new/var/plugins/System/PSC/Invoice/InvoiceApp/src/helpers/api.tsx @@ -0,0 +1,54 @@ +import axios from 'axios'; +import globalRouter from "./globalRouter"; + +const api = axios.create({ + baseURL: '/apps/api', +}); + +// Add a request interceptor +api.interceptors.request.use( + (config) => { + const token = localStorage.getItem('token'); + if (token) { + config.headers.Authorization = `Bearer ${token}`; + } + return config; + }, + (error) => Promise.reject(error) +); + + +api.interceptors.response.use( + (response) => response, + async (error) => { + const originalRequest = error.config; + + // If the error status is 401 and there is no originalRequest._retry flag, + // it means the token has expired and we need to refresh it + if (error.response.status === 401 && !originalRequest._retry) { + originalRequest._retry = true; + + try { + const refreshToken = localStorage.getItem('refreshToken'); + const response = await axios.get('/apps/api/contact/refresh', { + headers: { + 'Authorization': 'Bearer ' + localStorage.getItem('token') + } + }); + const { token } = response.data; + + localStorage.setItem('token', token); + + // Retry the original request with the new token + originalRequest.headers.Authorization = `Bearer ${token}`; + return axios(originalRequest); + } catch (error) { + localStorage.removeItem('token') + globalRouter.navigate("/login", {state: {from: location.pathname}}) + return Promise.resolve() + } + } + return Promise.reject(error) + } +); +export default api diff --git a/src/new/var/plugins/System/PSC/Invoice/InvoiceApp/src/helpers/currency.tsx b/src/new/var/plugins/System/PSC/Invoice/InvoiceApp/src/helpers/currency.tsx new file mode 100644 index 000000000..ece675805 --- /dev/null +++ b/src/new/var/plugins/System/PSC/Invoice/InvoiceApp/src/helpers/currency.tsx @@ -0,0 +1,18 @@ +import React from 'react' + +interface IProps { + price: number; +} + +const Currency: React.FC = ({ price }) => { + return ( + <> + {Intl.NumberFormat('de-DE', { + style: 'currency', + currency: 'EUR' + }).format(price/100)} + + ); +} + +export default Currency; diff --git a/src/new/var/plugins/System/PSC/Invoice/InvoiceApp/src/helpers/errorHandler.tsx b/src/new/var/plugins/System/PSC/Invoice/InvoiceApp/src/helpers/errorHandler.tsx new file mode 100644 index 000000000..eb33fecc9 --- /dev/null +++ b/src/new/var/plugins/System/PSC/Invoice/InvoiceApp/src/helpers/errorHandler.tsx @@ -0,0 +1,24 @@ +import axios from "axios"; +import { toast } from "react-toastify"; + +export const handleError = (error: any) => { + if (axios.isAxiosError(error)) { + var err = error.response; + if (Array.isArray(err?.data.errors)) { + for (let val of err?.data.errors) { + toast.warning(val.description); + } + } else if (typeof err?.data.errors === "object") { + for (let e in err?.data.errors) { + toast.warning(err.data.errors[e][0]); + } + } else if (err?.data) { + toast.warning(err.data); + } else if (err?.status == 401) { + toast.warning("Please login"); + window.history.pushState({}, "LoginPage", "/login"); + } else if (err) { + toast.warning(err?.data); + } + } +}; diff --git a/src/new/var/plugins/System/PSC/Invoice/InvoiceApp/src/helpers/globalRouter.ts b/src/new/var/plugins/System/PSC/Invoice/InvoiceApp/src/helpers/globalRouter.ts new file mode 100644 index 000000000..5fcfee4e2 --- /dev/null +++ b/src/new/var/plugins/System/PSC/Invoice/InvoiceApp/src/helpers/globalRouter.ts @@ -0,0 +1,8 @@ +import { NavigateFunction } from "react-router-dom"; + +const globalRouter = { navigate: null } as { + navigate: null | NavigateFunction; + location: null | LocationFunction; +}; + +export default globalRouter; diff --git a/src/new/var/plugins/System/PSC/Invoice/InvoiceApp/src/main.tsx b/src/new/var/plugins/System/PSC/Invoice/InvoiceApp/src/main.tsx index 0decd05c9..93a932f68 100644 --- a/src/new/var/plugins/System/PSC/Invoice/InvoiceApp/src/main.tsx +++ b/src/new/var/plugins/System/PSC/Invoice/InvoiceApp/src/main.tsx @@ -1,10 +1,12 @@ import { StrictMode } from 'react' import { createRoot } from 'react-dom/client' -import App from './App.tsx' +import { RouterProvider } from "react-router-dom"; +import App from './app.tsx' import './assets/index.css' +import { router } from "./router/routes"; createRoot(document.getElementById('root')!).render( - + , ) diff --git a/src/new/var/plugins/System/PSC/Invoice/InvoiceApp/src/models/account.ts b/src/new/var/plugins/System/PSC/Invoice/InvoiceApp/src/models/account.ts new file mode 100644 index 000000000..783a50257 --- /dev/null +++ b/src/new/var/plugins/System/PSC/Invoice/InvoiceApp/src/models/account.ts @@ -0,0 +1,22 @@ +import {v4 as uuidv4} from 'uuid' + +export class Account { + uid: Number + appendix: String + title: String + uuid: String + + constructor() { + this.uid = 0 + this.uuid = "" + this.appendix = "" + this.title = "" + } + + parseFromJson(item: any) { + this.uid = item.account.uid + this.uuid = item.account.uuid + this.title = item.account.title + this.appendix = item.account.appendix + } +} \ No newline at end of file diff --git a/src/new/var/plugins/System/PSC/Invoice/InvoiceApp/src/models/address.ts b/src/new/var/plugins/System/PSC/Invoice/InvoiceApp/src/models/address.ts new file mode 100644 index 000000000..957c1ac3d --- /dev/null +++ b/src/new/var/plugins/System/PSC/Invoice/InvoiceApp/src/models/address.ts @@ -0,0 +1,73 @@ +import {v4 as uuidv4} from 'uuid' +import {Contact} from "./contact" +import {Shop} from "./shop" + +export class Address { + uid: Number + uuid: String + firstname: String + lastname: String + street: String + houseNumber: String + zip: String + company: String + company2: String + phone: String + country: String + ustid: String + city: String + email: String + contact: Contact + type: Number + + constructor() { + this.uid = 0 + this.uuid = "" + this.firstname = "" + this.lastname = "" + this.street = "" + this.houseNumber = "" + this.zip = "" + this.company = "" + this.company2 = "" + this.city = "" + this.email = "" + this.country = "" + this.ustid = "" + this.contact = new Contact() + this.type = 0 + } + + parseFromJson(item: any) { + this.uid = item.uid + this.uuid = item.uuid + this.firstname = item.firstname + this.lastname = item.lastname + this.street = item.street + this.houseNumber = item.houseNumber + this.zip = item.zip + this.company = item.company + this.company2 = item.company2 + this.phone = item.phone + this.city = item.city + this.email = item.email + this.type = item.type + this.country = item.country + this.ustid = item.ustid + } + + parseFromFormData(formdata: any) { + + this.email = formdata.email + this.company = formdata.company + this.firstname = formdata.firstname + this.lastname = formdata.lastname + this.street = formdata.street + this.houseNumber = formdata.houseNumber + this.zip = formdata.zip + this.city = formdata.city + this.phone = formdata.phone + this.country = formdata.country + this.ustid = formdata.ustid + } +} \ No newline at end of file diff --git a/src/new/var/plugins/System/PSC/Invoice/InvoiceApp/src/models/contact.ts b/src/new/var/plugins/System/PSC/Invoice/InvoiceApp/src/models/contact.ts new file mode 100644 index 000000000..2912254b6 --- /dev/null +++ b/src/new/var/plugins/System/PSC/Invoice/InvoiceApp/src/models/contact.ts @@ -0,0 +1,82 @@ +import {Shop} from "./shop" + +export class LayouterData { + firstname: string + company: string + lastname: string + street: string + houseNumber: string + zip: string + city: string + phone: string + country: string + ustid: string + + constructor() { + this.firstname = "" + this.company = "" + this.lastname = "" + this.street = "" + this.houseNumber = "" + this.zip = "" + this.city = "" + this.phone = "" + this.country = "" + this.ustid = "" + } +} +export class Contact { + uid: number + username: string + email: string + password: string + uuid: string + shops: Shop[] + layouter_data: LayouterData + + + constructor() { + this.uid = 0 + this.uuid = "" + this.username = "" + this.email = "" + this.password = "" + this.shops = [] + this.layouter_data = new LayouterData() + } + + parseFromJson(item: any) { + this.uid = item.contact.uid + this.uuid = item.contact.uuid + this.email = item.contact.email + this.username = item.contact.username + this.layouter_data.firstname = item.contact.layouter_data.firstname + this.layouter_data.company = item.contact.layouter_data.company + this.layouter_data.lastname = item.contact.layouter_data.lastname + this.layouter_data.street = item.contact.layouter_data.street + this.layouter_data.houseNumber = item.contact.layouter_data.houseNumber + this.layouter_data.zip = item.contact.layouter_data.zip + this.layouter_data.city = item.contact.layouter_data.city + this.layouter_data.phone = item.contact.layouter_data.phone + this.layouter_data.country = item.contact.layouter_data.country + this.layouter_data.ustid = item.contact.layouter_data.ustid + } + + parseFromFormData(formdata: any, shop: Shop = null) { + + this.email = formdata.email + this.layouter_data.company = formdata.company + this.layouter_data.firstname = formdata.firstname + this.layouter_data.lastname = formdata.lastname + this.layouter_data.street = formdata.street + this.layouter_data.houseNumber = formdata.houseNumber + this.layouter_data.zip = formdata.zip + this.layouter_data.city = formdata.city + this.layouter_data.phone = formdata.phone + this.layouter_data.country = formdata.country + this.layouter_data.ustid = formdata.ustid + if(shop) { + this.shops.push(shop) + } + } +} diff --git a/src/new/var/plugins/System/PSC/Invoice/InvoiceApp/src/models/country.ts b/src/new/var/plugins/System/PSC/Invoice/InvoiceApp/src/models/country.ts new file mode 100644 index 000000000..8338d086d --- /dev/null +++ b/src/new/var/plugins/System/PSC/Invoice/InvoiceApp/src/models/country.ts @@ -0,0 +1,15 @@ +export class Country { + uuid: String = "" + title: String = "" + code: String = "" + useVatWithUstId: boolean = true + useVatWithoutUstId: boolean = true + + parseFromJson(item: any) { + this.uuid = item.uuid + this.title = item.title + this.code = item.code + this.useVatWithUstId = item.useVatWithUstId + this.useVatWithoutUstId = item.useVatWithoutUstId + } +} \ No newline at end of file diff --git a/src/new/var/plugins/System/PSC/Invoice/InvoiceApp/src/models/order.ts b/src/new/var/plugins/System/PSC/Invoice/InvoiceApp/src/models/order.ts new file mode 100644 index 000000000..ba02df841 --- /dev/null +++ b/src/new/var/plugins/System/PSC/Invoice/InvoiceApp/src/models/order.ts @@ -0,0 +1,76 @@ +import {v4 as uuidv4} from 'uuid' +import {Contact} from "./contact" +import {Account} from "./account" +import {Address} from "./address" +import {Pos} from "./pos" +import {Payment} from "./payment" +import {Shipping} from "./shipping" +import {Shop} from "./shop" + +export class Order { + + alias: String + uuid: String + draft: Boolean + saved: boolean + + contact: Contact = new Contact() + account: Account = new Account() + deliveryAddress: Address = new Address() + senderAddress: Address = new Address() + invoiceAddress: Address = new Address() + + positions: Array = [] + + payment: Payment = new Payment() + shipping: Shipping = new Shipping() + + basketField1: String + basketField2: String + + type: Number + shop: Shop = new Shop() + + net: number + vat: number + gross: number + + constructor() { + this.uuid = uuidv4() + this.basketField1 = "" + this.basketField2 = "" + this.draft = true + this.saved = false + } + + addPosition(pos: Pos) { + this.positions.push(pos) + } + + parseFromJson(item: any) { + this.shop.parseFromJson(item) + this.contact.parseFromJson(item) + this.account.parseFromJson(item) + this.shipping.parseFromJson(item) + this.payment.parseFromJson(item) + this.invoiceAddress.parseFromJson(item.invoiceAddress) + this.deliveryAddress.parseFromJson(item.deliveryAddress) + this.senderAddress.parseFromJson(item.senderAddress) + this.alias = item.alias + this.uuid = item.uuid + this.type = item.type + this.draft = item.draft + this.saved = true + this.basketField1 = item.basketField1 + this.basketField2 = item.basketField2 + this.net = item.net + this.gross = item.gross + this.vat = item.vat + + item.positions.map((e) => { + let pos = new Pos() + pos.parseFromJson(e) + this.positions.push(pos) + }) + } +} diff --git a/src/new/var/plugins/System/PSC/Invoice/InvoiceApp/src/models/payment.ts b/src/new/var/plugins/System/PSC/Invoice/InvoiceApp/src/models/payment.ts new file mode 100644 index 000000000..525550147 --- /dev/null +++ b/src/new/var/plugins/System/PSC/Invoice/InvoiceApp/src/models/payment.ts @@ -0,0 +1,11 @@ +export class Payment { + uid: Number = 0 + title: String = "" + uuid: String = "" + + parseFromJson(item: any) { + this.uid = item.payment.uid + this.title = item.payment.title + this.uuid = String(item.payment.uuid) + } +} \ No newline at end of file diff --git a/src/new/var/plugins/System/PSC/Invoice/InvoiceApp/src/models/pos.ts b/src/new/var/plugins/System/PSC/Invoice/InvoiceApp/src/models/pos.ts new file mode 100644 index 000000000..a49bd19ab --- /dev/null +++ b/src/new/var/plugins/System/PSC/Invoice/InvoiceApp/src/models/pos.ts @@ -0,0 +1,23 @@ +import {v4 as uuidv4} from 'uuid' +import {Product} from "./product" +import {Price} from "./price" + +export class Pos { + uuid: String = "" + product: Product = new Product() + status: Number = 10 + count: Number = 1 + price: Price = new Price() + + constructor() { + this.uuid = uuidv4() + } + + parseFromJson(item: any) { + this.count = item.price.count + this.status = item.status + this.uuid = item.uuid + this.price.parseFromJson(item.price) + this.product.parseFromJson(item.product) + } +} \ No newline at end of file diff --git a/src/new/var/plugins/System/PSC/Invoice/InvoiceApp/src/models/price.ts b/src/new/var/plugins/System/PSC/Invoice/InvoiceApp/src/models/price.ts new file mode 100644 index 000000000..501cf5dc4 --- /dev/null +++ b/src/new/var/plugins/System/PSC/Invoice/InvoiceApp/src/models/price.ts @@ -0,0 +1,18 @@ +export class Price { + net: number = 0 + vat: number = 0 + gross: number = 0 + + allNet: number = 0 + allVat: number = 0 + allGross: number = 0 + + parseFromJson(item: any) { + this.net = item.net + this.vat = item.vat + this.gross = item.gross + this.allNet = item.allNet + this.allVat = item.allVat + this.allGross = item.allGross + } +} \ No newline at end of file diff --git a/src/new/var/plugins/System/PSC/Invoice/InvoiceApp/src/models/product.ts b/src/new/var/plugins/System/PSC/Invoice/InvoiceApp/src/models/product.ts new file mode 100644 index 000000000..72b0954b9 --- /dev/null +++ b/src/new/var/plugins/System/PSC/Invoice/InvoiceApp/src/models/product.ts @@ -0,0 +1,27 @@ +interface Param { + [key: string]: string | boolean | number +} + +export class SpecialProductTypeObject { + params: Array = [] + typ: Number = 0 + + parseFromJson(item: any) { + this.typ = item.typ + this.params = item.params + } +} + +export class Product { + id: Number = 0 + title: String = "" + uuid: String = "" + specialProductTypeObject: SpecialProductTypeObject = new SpecialProductTypeObject() + + parseFromJson(item: any) { + this.id = item.id + this.title = item.title + this.uuid = item.uuid + this.specialProductTypeObject.parseFromJson(item.specialProductTypeObject) + } +} \ No newline at end of file diff --git a/src/new/var/plugins/System/PSC/Invoice/InvoiceApp/src/models/productGroup.ts b/src/new/var/plugins/System/PSC/Invoice/InvoiceApp/src/models/productGroup.ts new file mode 100644 index 000000000..a30631b76 --- /dev/null +++ b/src/new/var/plugins/System/PSC/Invoice/InvoiceApp/src/models/productGroup.ts @@ -0,0 +1,6 @@ +export class ProductGroup { + id: Number = 0 + label: String = "" + uuid: String = "" + //options: ProductGroup[] = [] +} \ No newline at end of file diff --git a/src/new/var/plugins/System/PSC/Invoice/InvoiceApp/src/models/shipping.ts b/src/new/var/plugins/System/PSC/Invoice/InvoiceApp/src/models/shipping.ts new file mode 100644 index 000000000..eac9e5d39 --- /dev/null +++ b/src/new/var/plugins/System/PSC/Invoice/InvoiceApp/src/models/shipping.ts @@ -0,0 +1,12 @@ + +export class Shipping { + uid: Number = 0 + title: String = "" + uuid: String = "" + + parseFromJson(item: any) { + this.uid = item.shipping.uid + this.title = item.shipping.title + this.uuid = String(item.shipping.uuid) + } +} \ No newline at end of file diff --git a/src/new/var/plugins/System/PSC/Invoice/InvoiceApp/src/models/shop.ts b/src/new/var/plugins/System/PSC/Invoice/InvoiceApp/src/models/shop.ts new file mode 100644 index 000000000..f1fd96684 --- /dev/null +++ b/src/new/var/plugins/System/PSC/Invoice/InvoiceApp/src/models/shop.ts @@ -0,0 +1,20 @@ + +export class Shop { + id: number = 0 + name: string = "" + uuid: string = "" + basketField1: string = "" + basketField2: string = "" + basketPosField1: string = "" + basketPosField2: string = "" + + parseFromJson(item: any) { + this.id = item.shop.id + this.name = item.shop.name + this.uuid = item.shop.uuid + this.basketField1 = item.shop.basketField1 + this.basketField2 = item.shop.basketField2 + this.basketPosField1 = item.shop.basketPosField1 + this.basketPosField2 = item.shop.basketPosField2 + } +} \ No newline at end of file diff --git a/src/new/var/plugins/System/PSC/Invoice/InvoiceApp/src/models/user.ts b/src/new/var/plugins/System/PSC/Invoice/InvoiceApp/src/models/user.ts new file mode 100644 index 000000000..6d0ddf8e5 --- /dev/null +++ b/src/new/var/plugins/System/PSC/Invoice/InvoiceApp/src/models/user.ts @@ -0,0 +1,10 @@ +export type UserProfileToken = { + userName: string; + email: string; + token: string; +}; + +export type UserProfile = { + userName: string; + email: string; +}; diff --git a/src/new/var/plugins/System/PSC/Invoice/InvoiceApp/src/router/protectedRoutes.tsx b/src/new/var/plugins/System/PSC/Invoice/InvoiceApp/src/router/protectedRoutes.tsx new file mode 100644 index 000000000..38b224acb --- /dev/null +++ b/src/new/var/plugins/System/PSC/Invoice/InvoiceApp/src/router/protectedRoutes.tsx @@ -0,0 +1,17 @@ +import React from "react"; +import { Navigate, useLocation } from "react-router-dom"; +import { useAuth } from "../context/useAuth"; + +type Props = { children: React.ReactNode }; + +const ProtectedRoutes = ({ children }: Props) => { + const location = useLocation(); + const { isLoggedIn } = useAuth(); + return isLoggedIn() ? ( + <>{children} + ) : ( + + ); +}; + +export default ProtectedRoutes; diff --git a/src/new/var/plugins/System/PSC/Invoice/InvoiceApp/src/router/routes.tsx b/src/new/var/plugins/System/PSC/Invoice/InvoiceApp/src/router/routes.tsx new file mode 100644 index 000000000..07bcb5622 --- /dev/null +++ b/src/new/var/plugins/System/PSC/Invoice/InvoiceApp/src/router/routes.tsx @@ -0,0 +1,25 @@ +import { createBrowserRouter } from "react-router-dom"; +import App from "../app"; +import Login from "../components/login/login"; +import Order from "../components/order/order"; +import Welcome from "../components/welcome/welcome"; +import ProtectedRoutes from "./protectedRoutes" + +export const router = createBrowserRouter([ + { + path: "/", + element: , + children: [ + { path: "", element: }, + { path: "login", element: }, + { + path: "order/:uuid", + element: ( + + + + ) + } + ], + }, +]); diff --git a/src/new/var/plugins/System/PSC/Invoice/InvoiceApp/src/services/authService.tsx b/src/new/var/plugins/System/PSC/Invoice/InvoiceApp/src/services/authService.tsx new file mode 100644 index 000000000..3c58c58a8 --- /dev/null +++ b/src/new/var/plugins/System/PSC/Invoice/InvoiceApp/src/services/authService.tsx @@ -0,0 +1,34 @@ +import axios from "axios"; +import { handleError } from "../helpers/errorHandler"; +import { UserProfileToken } from "../models/user"; + +const api = "/apps/api/contact"; + +export const loginAPI = async (username: string, password: string) => { + try { + const data = await axios.post(api + "/login", { + username: username, + password: password, + }); + return data; + } catch (error) { + handleError(error); + } +}; + +export const registerAPI = async ( + email: string, + username: string, + password: string +) => { + try { + const data = await axios.post(api + "/register", { + email: email, + username: username, + password: password, + }); + return data; + } catch (error) { + handleError(error); + } +}; diff --git a/src/new/var/plugins/System/PSC/Invoice/InvoiceApp/src/services/orderService.tsx b/src/new/var/plugins/System/PSC/Invoice/InvoiceApp/src/services/orderService.tsx new file mode 100644 index 000000000..e69de29bb diff --git a/src/new/var/plugins/System/PSC/Invoice/InvoiceApp/tailwind.config.js b/src/new/var/plugins/System/PSC/Invoice/InvoiceApp/tailwind.config.js index 22de04408..eefceba7a 100644 --- a/src/new/var/plugins/System/PSC/Invoice/InvoiceApp/tailwind.config.js +++ b/src/new/var/plugins/System/PSC/Invoice/InvoiceApp/tailwind.config.js @@ -2,7 +2,26 @@ export default { content: [ "./src/**/*.{js,ts,jsx,tsx}", ], theme: { - extend: {}, + extend: { + colors: { + psc: { + DEFAULT: '#EA641b', + 50: '#eeb4af', + 100: '#e89a93', + 200: '#e28077', + 300: '#dc665b', + 400: '#d64c3f', + 500: '#EA641b', + 600: '#ac3025', + 700: '#90281f', + 800: '#742019', + 900: '#581913', + } + }, + spacing: { + 180: "32rem", + }, + }, }, plugins: [], } diff --git a/src/new/var/plugins/System/PSC/Invoice/Webpack/src/modules/shipping/ShippingComponent.tsx b/src/new/var/plugins/System/PSC/Invoice/Webpack/src/modules/shipping/ShippingComponent.tsx index 824bd2825..5177885d8 100755 --- a/src/new/var/plugins/System/PSC/Invoice/Webpack/src/modules/shipping/ShippingComponent.tsx +++ b/src/new/var/plugins/System/PSC/Invoice/Webpack/src/modules/shipping/ShippingComponent.tsx @@ -1,3 +1,4 @@ +import * as React from 'react' import { AsyncPaginate } from "react-select-async-paginate" import {ShippingService} from "../../services/shipping" import * as PropTypes from "prop-types" diff --git a/src/new/var/plugins/System/PSC/XmlCalc/Api/GetPrice.php b/src/new/var/plugins/System/PSC/XmlCalc/Api/GetPrice.php index 93fe26209..617d11b44 100755 --- a/src/new/var/plugins/System/PSC/XmlCalc/Api/GetPrice.php +++ b/src/new/var/plugins/System/PSC/XmlCalc/Api/GetPrice.php @@ -15,10 +15,11 @@ namespace Plugin\System\PSC\XmlCalc\Api; use Doctrine\ODM\MongoDB\DocumentManager; use Doctrine\ORM\EntityManagerInterface; use Nelmio\ApiDocBundle\Annotation\Model; -use Nelmio\ApiDocBundle\Annotation\Security; use OpenApi\Annotations as OA; use PSC\Library\Calc\Error\Validation\Input\Max; use PSC\Library\Calc\Error\Validation\Input\Min as PSCMin; +use PSC\Shop\ContactBundle\Model\Contact; +use PSC\Shop\ContactBundle\Transformer\Model\Contact as ContactTransformer; use Plugin\System\PSC\XmlCalc\Dto\Input\PriceInput; use Plugin\System\PSC\XmlCalc\Dto\Output\Display\Group as DisplayGroup; use Plugin\System\PSC\XmlCalc\Dto\Output\PreCalc\Group; @@ -26,7 +27,6 @@ use Plugin\System\PSC\XmlCalc\Dto\Output\PreCalc\Value; use Plugin\System\PSC\XmlCalc\Dto\Output\PreCalc\Variant; use Plugin\System\PSC\XmlCalc\Dto\Output\Price\Element; use Plugin\System\PSC\XmlCalc\Dto\Output\Price\Option; -use PSC\Component\ApiBundle\Dto\Error\NotFound; use PSC\Library\Calc\Engine; use PSC\Library\Calc\Option\Type\Base; use PSC\Library\Calc\Option\Type\DeliverySelect; @@ -63,18 +63,22 @@ class GetPrice extends AbstractController private EntityManagerInterface $entityManager; private TokenStorageInterface $tokenStorage; + private ContactTransformer $contactTransformer; - public function __construct(\PSC\System\SettingsBundle\Service\Shop $shopService, - DocumentManager $documentManager, - EntityManagerInterface $entityManager, - PaperDB $paperDB, - TokenStorageInterface $tokenStorage) - { + public function __construct( + \PSC\System\SettingsBundle\Service\Shop $shopService, + DocumentManager $documentManager, + EntityManagerInterface $entityManager, + PaperDB $paperDB, + ContactTransformer $contactTransformer, + TokenStorageInterface $tokenStorage + ) { $this->shopService = $shopService; $this->documentManager = $documentManager; $this->entityManager = $entityManager; $this->tokenStorage = $tokenStorage; $this->paperDB = $paperDB; + $this->contactTransformer = $contactTransformer; } /** @@ -108,37 +112,46 @@ class GetPrice extends AbstractController $engine = new Engine(); $engine->setPaperRepository($this->paperDB); $engine->setPaperContainer($paperContainer); - if($product->getShop()->getInstall()->getCalcTemplates() && !$data->test) { + if ($product->getShop()->getInstall()->getCalcTemplates() && !$data->test) { $engine->setTemplates(''.$product->getShop()->getInstall()->getCalcTemplates().''); } - if($product->getShop()->getInstall()->getCalcTemplatesTest() && $data->test) { + if ($product->getShop()->getInstall()->getCalcTemplatesTest() && $data->test) { $engine->setTemplates(''.$product->getShop()->getInstall()->getCalcTemplatesTest().''); } $engine->loadString($product->getCalcXml()); - if(!$data->test) { + if (!$data->test) { $engine->setFormulas($product->getShop()->getFormel()); $engine->setParameters($product->getShop()->getParameter()); } - if($data->test) { + if ($data->test) { $engine->setFormulas($product->getShop()->getTestFormel()); $engine->setParameters($product->getShop()->getTestParameter()); } $engine->setVariables($data->values); $engine->setTax($product->getMwert()); - if($data->xmlProduct != "") { + if ($this->tokenStorage->getToken()) { + $contact = new Contact(); + $this->contactTransformer->fromDb($contact, $this->tokenStorage->getToken()->getUser()); + $engine->setVariable('contact.accountType', $contact->getAccountType()->value); + } else { + $engine->setVariable('contact.accountType', 1); + } + + + if ($data->xmlProduct != "") { $engine->setActiveArticle($data->xmlProduct); } - foreach($engine->getArticle()->getDisplayGroups() as $group) { + foreach ($engine->getArticle()->getDisplayGroups() as $group) { $groupObj = new DisplayGroup(); $groupObj->id = $group->getId(); $groupObj->name = $group->getName(); $output->displayGroups[] = $groupObj; } - $output->netto = $engine->getPrice()*100; - $output->steuer = $engine->getTaxPrice()*100; - $output->brutto = $engine->getCompletePrice()*100; + $output->netto = $engine->getPrice() * 100; + $output->steuer = $engine->getTaxPrice() * 100; + $output->brutto = $engine->getCompletePrice() * 100; $output->xmlProduct = $engine->getArticle()->getName(); $output->weight = $engine->getWeight(); $output->weightSingle = $engine->getWeightSingle(); @@ -148,16 +161,16 @@ class GetPrice extends AbstractController } /** @var Base $option */ - foreach($engine->getArticle()->getOptions() as $option) { + foreach ($engine->getArticle()->getOptions() as $option) { $tmp = new Element(); $tmp->name = $option->getName(); $tmp->required = $option->isRequire(); - if(is_array($option->getRawValue())) { + if (is_array($option->getRawValue())) { $tmp->rawValues = $option->getRawValue(); - }else{ + } else { $tmp->rawValue = $option->getRawValue(); } - if($option->getDefault()) { + if ($option->getDefault()) { $tmp->defaultValue = $option->getDefault(); } $tmp->value = $option->getValue(); @@ -168,11 +181,11 @@ class GetPrice extends AbstractController $tmp->htmlType = $option->type; $tmp->displayGroup = $option->getDisplayGroup(); - if($option->type == 'select' || $option->type == 'checkbox' || $option->type == 'radio') { + if ($option->type == 'select' || $option->type == 'checkbox' || $option->type == 'radio') { /** @var Opt $option */ - foreach($option->getOptions() as $opt) { + foreach ($option->getOptions() as $opt) { - if($option instanceof DeliverySelect) { + if ($option instanceof DeliverySelect) { $tmpOpt = new Option(); $tmpOpt->id = $opt->getId(); $tmpOpt->name = $opt->getLabel(); @@ -180,7 +193,7 @@ class GetPrice extends AbstractController $tmpOpt->selected = $opt->isSelected(); $tmpOpt->info = $opt->getInfo(); $tmpOpt->deliveryDate = $opt->getDeliveryDateAsString(); - }else { + } else { $tmpOpt = new Option(); $tmpOpt->id = $opt->getId(); $tmpOpt->name = $opt->getLabel(); @@ -191,16 +204,16 @@ class GetPrice extends AbstractController } } - if($option->type == 'input') { + if ($option->type == 'input') { $tmp->minValue = $option->getMinValue(); $tmp->maxValue = $option->getMaxValue(); $tmp->placeHolder = $option->getPlaceHolder(); $tmp->pattern = $option->getPattern(); - foreach($option->getValidationErrors() as $error) { - if($error instanceof PSCMin) { + foreach ($option->getValidationErrors() as $error) { + if ($error instanceof PSCMin) { $tmp->validationErrors[] = new Min($tmp->value, $option->getMinValue()); } - if($error instanceof Max) { + if ($error instanceof Max) { $tmp->validationErrors[] = new PluginMax($tmp->value, $option->getMaxValue()); } @@ -209,14 +222,14 @@ class GetPrice extends AbstractController $output->elements[] = $tmp; } - - foreach($engine->getArticle()->getPreCalc()->getGroups() as $group) { + + foreach ($engine->getArticle()->getPreCalc()->getGroups() as $group) { $groupObj = new Group(); - $groupObj->name = $group->getName(); - foreach($group->getVariants() as $variant) { + $groupObj->name = $group->getName(); + foreach ($group->getVariants() as $variant) { $variantObj = new Variant(); $variantObj->name = $variant->getName(); - foreach($variant->getValues() as $value) { + foreach ($variant->getValues() as $value) { $valueObj = new Value(); $valueObj->key = $value->getKey(); $valueObj->value = $value->getValue(); @@ -230,7 +243,7 @@ class GetPrice extends AbstractController $output->displayValues = $engine->getDisplayVariables(); $output->exportValues = $engine->getAjaxVariables(); - if($this->isGranted("ROLE_SHOP")) { + if ($this->isGranted("ROLE_SHOP")) { $output->debug['formels'] = $engine->getDebugCalcFormel(); $output->debug['flatPrice'] = $engine->getDebugFlatPrice(); $output->debug['price'] = $engine->getDebugPrice(); diff --git a/src/new/var/plugins/System/PSC/XmlCalc/Producer/Producer.php b/src/new/var/plugins/System/PSC/XmlCalc/Producer/Producer.php index 2d09df779..ae588e8a6 100755 --- a/src/new/var/plugins/System/PSC/XmlCalc/Producer/Producer.php +++ b/src/new/var/plugins/System/PSC/XmlCalc/Producer/Producer.php @@ -1,10 +1,12 @@ product->getSpecialProductTypeObject(); $specProd->setParams($params); @@ -64,15 +67,15 @@ class Producer implements IUiProducer, IProducerHydrateModel $this->setVariables(); /** - * @var ProductSpecialObject $specProd + * @var ProductSpecialObject $specProd */ $specProd = $this->product->getSpecialProductTypeObject(); - $priceObj = Money::ofMinor($this->engine->getPrice()*100, 'EUR'); + $priceObj = Money::ofMinor($this->engine->getPrice() * 100, 'EUR'); $price = new Price(); $price->setNet($priceObj->getMinorAmount()->toInt()); - $price->setVat($priceObj->toRational()->dividedBy(100)->multipliedBy($specProd->getTaxClass()/100)->to($priceObj->getContext(), RoundingMode::UP)->getMinorAmount()->toInt()); + $price->setVat($priceObj->toRational()->dividedBy(100)->multipliedBy($specProd->getTaxClass() / 100)->to($priceObj->getContext(), RoundingMode::UP)->getMinorAmount()->toInt()); $price->setGross($price->getNet() + $price->getVat()); $price->setCount(1); $price->setAllNet($price->getNet()); @@ -85,13 +88,19 @@ class Producer implements IUiProducer, IProducerHydrateModel private function setVariables(): void { - if($this->product->getSpecialProductTypeObject()) { + if ($this->product->getSpecialProductTypeObject()) { /** - * @var ProductSpecialObject $specProd + * @var ProductSpecialObject $specProd */ $specProd = $this->product->getSpecialProductTypeObject(); $this->engine->setVariables($specProd->getParams()); + if ($this->contact->getAccountType()->value > 1) { + $this->engine->setVariable('contact.accountType', $this->contact->getAccountType()->value); + } else { + $this->engine->setVariable('contact.accountType', 1); + } + $this->engine->calc(); } } @@ -106,17 +115,17 @@ class Producer implements IUiProducer, IProducerHydrateModel { $engine = new Engine(); $paperContainer = new PaperContainer(); - if($this->product->getSpecialProductTypeObject() && $this->product->getSpecialProductTypeObject()->getXml()) { + if ($this->product->getSpecialProductTypeObject() && $this->product->getSpecialProductTypeObject()->getXml()) { $shop = $this->shopService->getShopByUid($this->product->getShopUuid()); $engine = new Engine(); $engine->loadString($this->product->getSpecialProductTypeObject()->getXml()); - if($shop) { + if ($shop) { $engine->setFormulas($shop->getFormel()); $engine->setParameters($shop->getParameter()); } - }elseif($this->product->getUid()) { + } elseif ($this->product->getUid()) { /** - * @var \PSC\Shop\EntityBundle\Entity\Product $product + * @var \PSC\Shop\EntityBundle\Entity\Product $product */ $product = $this->entityManager->getRepository(\PSC\Shop\EntityBundle\Entity\Product::class)->find($this->product->getUid()); @@ -124,28 +133,29 @@ class Producer implements IUiProducer, IProducerHydrateModel $engine = new Engine(); $engine->setPaperRepository($this->paperService); $engine->setPaperContainer($paperContainer); - if($product->getShop()->getInstall()->getCalcTemplates()) { + if ($product->getShop()->getInstall()->getCalcTemplates()) { $engine->setTemplates(''.$product->getShop()->getInstall()->getCalcTemplates().''); } $engine->loadString($product->getCalcXml()); $engine->setFormulas($product->getShop()->getFormel()); $engine->setParameters($product->getShop()->getParameter()); - }elseif($this->product->getUuid()) { + } elseif ($this->product->getUuid()) { /** - * @var \PSC\Shop\EntityBundle\Entity\Product $product + * @var \PSC\Shop\EntityBundle\Entity\Product $product */ $product = $this->entityManager->getRepository(\PSC\Shop\EntityBundle\Entity\Product::class)->findOneBy(['uuid' => $this->product->getUuid()]); $paperContainer->parse(simplexml_load_string($product->getShop()->getInstall()->getPaperContainer())); $engine = new Engine(); $engine->setPaperRepository($this->paperService); $engine->setPaperContainer($paperContainer); - if($product->getShop()->getInstall()->getCalcTemplates()) { + if ($product->getShop()->getInstall()->getCalcTemplates()) { $engine->setTemplates(''.$product->getShop()->getInstall()->getCalcTemplates().''); } $engine->loadString($product->getCalcXml()); $engine->setFormulas($product->getShop()->getFormel()); $engine->setParameters($product->getShop()->getParameter()); } + $this->engine = $engine; } @@ -166,15 +176,15 @@ class Producer implements IUiProducer, IProducerHydrateModel ]; - foreach($this->engine->getArticle()->getOptions() as $option) { - if(!$option->isValid()) { + foreach ($this->engine->getArticle()->getOptions() as $option) { + if (!$option->isValid()) { continue; } - if($option->isRequire()) { + if ($option->isRequire()) { $temp['required'][] = $option->getId(); } - if($option instanceof Select) { + if ($option instanceof Select) { $temp['properties'][$option->getId()] = [ 'type' => 'string', @@ -183,11 +193,11 @@ class Producer implements IUiProducer, IProducerHydrateModel 'default' => $option->getSelectedOption()->getId() ]; foreach ($option->getValidOptions() as $opt) { - if($opt->isValid()) { + if ($opt->isValid()) { $temp['properties'][$option->getId()]['oneOf'][] = ['title' => $opt->getLabel(), 'const' => $opt->getId()]; } } - }else{ + } else { $temp['properties'][$option->getId()] = [ 'type' => 'string', 'title' => $option->getName(), @@ -212,8 +222,8 @@ class Producer implements IUiProducer, IProducerHydrateModel ] ]; - foreach($this->engine->getArticle()->getOptions() as $option) { - if($option instanceof Hidden) { + foreach ($this->engine->getArticle()->getOptions() as $option) { + if ($option instanceof Hidden) { $temp[$option->getId()] = [ 'ui:widget' => 'hidden', @@ -223,4 +233,9 @@ class Producer implements IUiProducer, IProducerHydrateModel return $temp; } + + public function setContact(Contact $contact): void + { + $this->contact = $contact; + } } diff --git a/src/new/web/build/backend/dashboard.js b/src/new/web/build/backend/dashboard.js index 630021255..620bf2984 100644 --- a/src/new/web/build/backend/dashboard.js +++ b/src/new/web/build/backend/dashboard.js @@ -8381,4 +8381,4 @@ default_1.values = { /******/ var __webpack_exports__ = __webpack_require__.O(); /******/ } ]); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QyxJQUFJLENBQUN1K0MsS0FBSyxDQUFDcjJDLE9BQU8sR0FBR3UyQyxTQUFTLENBQUN2MkMsT0FBTztRQUN0QyxJQUFJLENBQUNxMkMsS0FBSyxDQUFDSSxNQUFNLEVBQUU7UUFDbkIsSUFBTTV5QixhQUFhLEdBQUcsSUFBSSxDQUFDcGtCLE9BQU8sQ0FBQ29rQixhQUFhO1FBQ2hELElBQUlBLGFBQWEsSUFBSSxJQUFJLENBQUN3eUIsS0FBSyxDQUFDcjJDLE9BQU8sQ0FBQzAyQyxVQUFVLEVBQUU7VUFDaEQsSUFBTUMsYUFBYSxHQUFHOXlCLGFBQWEsQ0FBQ3BmLEtBQUssQ0FBQy9ELEtBQUs7VUFDL0NtakIsYUFBYSxDQUFDcGYsS0FBSyxDQUFDL0QsS0FBSyxhQUFNbWpCLGFBQWEsQ0FBQ3hILFdBQVcsR0FBRyxDQUFDLE9BQUk7VUFDaEV0WSxVQUFVLENBQUMsWUFBTTtZQUNiOGYsYUFBYSxDQUFDcGYsS0FBSyxDQUFDL0QsS0FBSyxHQUFHaTJDLGFBQWE7VUFDN0MsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNUO01BQ0o7SUFDSjtFQUFDO0lBQUE7SUFBQSxPQUNELHVCQUFjajBDLElBQUksRUFBRXduQixPQUFPLEVBQUU7TUFDekIsSUFBSSxDQUFDQyxRQUFRLENBQUN6bkIsSUFBSSxFQUFFO1FBQUUwbkIsTUFBTSxFQUFFRixPQUFPO1FBQUVHLE1BQU0sRUFBRTtNQUFVLENBQUMsQ0FBQztJQUMvRDtFQUFDO0VBQUE7QUFBQSxFQXBEbUIxQywyREFBVTtBQXNEbENjLFNBQVMsQ0FBQ2dILE1BQU0sR0FBRztFQUNmbW5CLElBQUksRUFBRTU1QjtBQUNWLENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9hc3NldHMvY29udHJvbGxlcnMuanNvbiIsIndlYnBhY2s6Ly8vLi9hc3NldHMvYmFja2VuZC9kYXNoYm9hcmQvZGFzaGJvYXJkLmpzIiwid2VicGFjazovLy8uL2Fzc2V0cy9iYWNrZW5kL2Rhc2hib2FyZC9qcy9hcHAuanMiLCJ3ZWJwYWNrOi8vLy4vYXNzZXRzL2JhY2tlbmQvZGFzaGJvYXJkL2pzL2Ryb3B6b25lLmpzIiwid2VicGFjazovLy8uL2Fzc2V0cy9iYWNrZW5kL2Rhc2hib2FyZC9qcy9vcmRlci5qcyIsIndlYnBhY2s6Ly8vLi9hc3NldHMvYmFja2VuZC9kYXNoYm9hcmQvanMvcHJvZHVjdC5qcyIsIndlYnBhY2s6Ly8vLi9hc3NldHMvYmFja2VuZC9kYXNoYm9hcmQvanMvcHJvZHVjdC9zZXQuanMiLCJ3ZWJwYWNrOi8vLy4vYXNzZXRzL2JhY2tlbmQvZGFzaGJvYXJkL2pzL3N1bW1lcm5vdGUvbWVkaWFidW5kbGUucGx1Z2luLmpzIiwid2VicGFjazovLy8uL2Fzc2V0cy9iYWNrZW5kL2Rhc2hib2FyZC9qcy90ZXRoZXIubWluLmpzIiwid2VicGFjazovLy8uL2Fzc2V0cy9iYWNrZW5kL2Rhc2hib2FyZC9qcy90b29scy9hamF4TW9kYWwuanMiLCJ3ZWJwYWNrOi8vLy4vYXNzZXRzL2JhY2tlbmQvZGFzaGJvYXJkL2pzL3Rvb2xzL2NhcmdvYmF5LmdlbmVyYWwubWluLmpzIiwid2VicGFjazovLy8uL2Fzc2V0cy9iYWNrZW5kL2Rhc2hib2FyZC9qcy90b29scy9jYXJnb2JheS50b29nbGUubWluLmpzIiwid2VicGFjazovLy8uL2Fzc2V0cy9iYWNrZW5kL2Rhc2hib2FyZC9qcy90b29scy9tZWRpYUNob29zZXIuanMiLCJ3ZWJwYWNrOi8vLy4vdmVuZG9yL3N5bWZvbnkvdXgtYXV0b2NvbXBsZXRlL2Fzc2V0cy9kaXN0L2NvbnRyb2xsZXIuanMiLCJ3ZWJwYWNrOi8vLy4vdmVuZG9yL3N5bWZvbnkvdXgtbGl2ZS1jb21wb25lbnQvYXNzZXRzL2Rpc3QvbGl2ZV9jb250cm9sbGVyLmpzIiwid2VicGFjazovLy8uL2Fzc2V0cy9iYWNrZW5kL2Rhc2hib2FyZC9jc3MvdG9vbHMvY2FyZ29iYXkudG9vZ2xlLm1pbi5jc3M/ODU2YSIsIndlYnBhY2s6Ly8vLi92ZW5kb3Ivc3ltZm9ueS91eC1saXZlLWNvbXBvbmVudC9hc3NldHMvZGlzdC9saXZlLm1pbi5jc3M/ZGU5YSIsIndlYnBhY2s6Ly8vLi9hc3NldHMvYmFja2VuZC9kYXNoYm9hcmQvbGVzcy9iYXNlLmxlc3M/ZWE0NCIsIndlYnBhY2s6Ly8vLi92ZW5kb3Ivc3ltZm9ueS91eC1jaGFydGpzL2Fzc2V0cy9kaXN0L2NvbnRyb2xsZXIuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGNvbnRyb2xsZXJfMCBmcm9tICdAc3ltZm9ueS91eC1hdXRvY29tcGxldGUvZGlzdC9jb250cm9sbGVyLmpzJztcbmltcG9ydCAndG9tLXNlbGVjdC9kaXN0L2Nzcy90b20tc2VsZWN0LmJvb3RzdHJhcDUuY3NzJztcbmltcG9ydCBjb250cm9sbGVyXzEgZnJvbSAnQHN5bWZvbnkvdXgtY2hhcnRqcy9kaXN0L2NvbnRyb2xsZXIuanMnO1xuaW1wb3J0IGNvbnRyb2xsZXJfMiBmcm9tICdAc3ltZm9ueS91eC1saXZlLWNvbXBvbmVudC9kaXN0L2xpdmVfY29udHJvbGxlci5qcyc7XG5pbXBvcnQgJ0BzeW1mb255L3V4LWxpdmUtY29tcG9uZW50L2Rpc3QvbGl2ZS5taW4uY3NzJztcbmV4cG9ydCBkZWZhdWx0IHtcbiAgJ3N5bWZvbnktLXV4LWF1dG9jb21wbGV0ZS0tYXV0b2NvbXBsZXRlJzogY29udHJvbGxlcl8wLFxuICAnc3ltZm9ueS0tdXgtY2hhcnRqcy0tY2hhcnQnOiBjb250cm9sbGVyXzEsXG4gICdsaXZlJzogY29udHJvbGxlcl8yLFxufTsiLCJpbXBvcnQgQnM1VXRpbHMgZnJvbSBcImJzNS11dGlsc1wiO1xuaW1wb3J0IHsgc3RhcnRTdGltdWx1c0FwcCB9IGZyb20gJ0BzeW1mb255L3N0aW11bHVzLWJyaWRnZSc7XG5jb25zdCBhcHAgPSBzdGFydFN0aW11bHVzQXBwKCk7XG5nbG9iYWwuJCA9IGdsb2JhbC5qUXVlcnkgPSB3aW5kb3cualF1ZXJ5ID0gcmVxdWlyZSgnanF1ZXJ5Jyk7XG5yZXF1aXJlKCdAcG9wcGVyanMvY29yZS9kaXN0L2Nqcy9wb3BwZXInKTtcbmdsb2JhbC5ib290c3RyYXAgPSByZXF1aXJlKCdib290c3RyYXAvZGlzdC9qcy9ib290c3RyYXAnKTtcbmdsb2JhbC5iczVVdGlscyA9IG5ldyBCczVVdGlscygpO1xucmVxdWlyZSgnLi9qcy90ZXRoZXIubWluJyk7XG5yZXF1aXJlKCcuL2pzL2Ryb3B6b25lJyk7XG5nbG9iYWwuUmFwaGFlbCA9IHJlcXVpcmUoJ3JhcGhhZWwvcmFwaGFlbC5taW4nKTtcbnJlcXVpcmUoJ21vcnJpcy5qcy9tb3JyaXMubWluJyk7XG5yZXF1aXJlKCdzdW1tZXJub3RlL2Rpc3Qvc3VtbWVybm90ZS1saXRlJyk7XG5yZXF1aXJlKCcuL2pzL3N1bW1lcm5vdGUvbWVkaWFidW5kbGUucGx1Z2luJyk7XG5yZXF1aXJlKCdtdWx0aXNlbGVjdC10d28tc2lkZXMvZGlzdC9qcy9tdWx0aXNlbGVjdCcpO1xucmVxdWlyZSgnYm9vdHN0cmFwLXRvZ2dsZS9qcy9ib290c3RyYXAtdG9nZ2xlLm1pbicpO1xuaW1wb3J0IGFjZSBmcm9tICdicmFjZSdcbmltcG9ydCAnYnJhY2UvbW9kZS9odG1sJ1xuaW1wb3J0ICdicmFjZS9tb2RlL3BocCdcbmltcG9ydCAnYnJhY2UvbW9kZS94bWwnXG5pbXBvcnQgJ2JyYWNlL3RoZW1lL21vbm9rYWknXG5pbXBvcnQgJ2JyYWNlL2V4dC9zZWFyY2hib3gnXG5cbmdsb2JhbC5Ecm9wem9uZSA9IHJlcXVpcmUoJy4vanMvZHJvcHpvbmUnKTtcblxuZ2xvYmFsLmNhcmdvYmF5ID0ge307XG5nbG9iYWwuY2FyZ29iYXkuZ2VuZXJhbCA9IHJlcXVpcmUoJy4vanMvdG9vbHMvY2FyZ29iYXkuZ2VuZXJhbC5taW4nKTtcbmdsb2JhbC5jYXJnb2JheS50b2dnbGUgPSAgcmVxdWlyZSgnLi9qcy90b29scy9jYXJnb2JheS50b29nbGUubWluJyk7XG5cbmdsb2JhbC5wc2MgPSB7fTtcbmdsb2JhbC5wc2MuYWpheE1vZGFsID0gcmVxdWlyZSgnLi9qcy90b29scy9hamF4TW9kYWwnKTtcbmdsb2JhbC5wc2MubWVkaWFDaG9vc2VyID0gcmVxdWlyZSgnLi9qcy90b29scy9tZWRpYUNob29zZXInKTtcbmdsb2JhbC5wc2MuYXBwID0gcmVxdWlyZSgnLi9qcy9hcHAnKTtcbmdsb2JhbC5wc2Mub3JkZXIgPSByZXF1aXJlKCcuL2pzL29yZGVyLmpzJyk7XG5nbG9iYWwucHNjLnByb2R1Y3QgPSByZXF1aXJlKCcuL2pzL3Byb2R1Y3QuanMnKTtcblxuZ2xvYmFsLnBzYy5hcHAuaW5pdCgpO1xuXG5pbXBvcnQgJy4vanMvdG9vbHMvbWVkaWFDaG9vc2VyJztcbmltcG9ydCAnYm9vdHN0cmFwL3Njc3MvYm9vdHN0cmFwLnNjc3MnO1xuaW1wb3J0ICcuL2Nzcy90b29scy9jYXJnb2JheS50b29nbGUubWluLmNzcyc7XG5pbXBvcnQgJy4vbGVzcy9iYXNlLmxlc3MnO1xuaW1wb3J0ICdzdW1tZXJub3RlL2Rpc3Qvc3VtbWVybm90ZS1saXRlLm1pbi5jc3MnO1xuLy9pbXBvcnQgJ211bHRpc2VsZWN0L2Nzcy9tdWx0aS1zZWxlY3QuY3NzJztcbmltcG9ydCAnYm9vdHN0cmFwLXRvZ2dsZS9jc3MvYm9vdHN0cmFwLXRvZ2dsZS5taW4uY3NzJztcbiIsIlxuXG5kZWZpbmUoZnVuY3Rpb24oKSB7XG5cbiAgICByZXR1cm4ge1xuICAgICAgICAvLyBHZW5lcmFsIEFwcCBpbml0XG4gICAgICAgIGluaXQoKSB7XG5cbiAgICAgICAgICAgIHBzYy5hamF4TW9kYWwuaW5pdCgpO1xuICAgICAgICAgICAgcHNjLm1lZGlhQ2hvb3Nlci5pbml0KCk7XG4gICAgICAgICAgICBwc2Mub3JkZXIuaW5pdCgpO1xuICAgICAgICAgICAgcHNjLnByb2R1Y3QuaW5pdCgpO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBib290c3RyYXBBcHAgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICBib290c3RyYXBBcHAoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn0pO1xuXG5cblxuJChmdW5jdGlvbigpIHtcblxuICAgICQoJ1tkYXRhLWJzLXRvZ2dsZT1cInRvb2x0aXBcIl0nKS5jbGljayhmdW5jdGlvbihlbCkge1xuICAgICAgICBiczVVdGlscy5Ub2FzdC5zaG93KHtcbiAgICAgICAgICAgIHR5cGU6ICdwcmltYXJ5JyxcbiAgICAgICAgICAgIGljb246ICc8aSBjbGFzcz1cImZhciBmYS1jaGVjay1jaXJjbGUgZmEtbGcgbWUtMlwiPjwvaT4nLFxuICAgICAgICAgICAgdGl0bGU6ICQodGhpcykuaHRtbCgpLFxuICAgICAgICAgICAgY29udGVudDogJCh0aGlzKS5kYXRhKCdicy1odG1sJyksXG4gICAgICAgICAgICBidXR0b25zOiBbXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB0ZXh0OiAnQ29weSB0byBjbGlwYm9hcmQnLFxuICAgICAgICAgICAgICAgICAgICBjbGFzczogJ2J0biBidG4tc20gYnRuLXdhcm5pbmcnLFxuICAgICAgICAgICAgICAgICAgICBoYW5kbGVyOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBuYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlVGV4dCgkKHRoaXMpLmRhdGEoJ2JzLWh0bWwnKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgZGVsYXk6IDAsXG4gICAgICAgICAgICBkaXNtaXNzaWJsZTogdHJ1ZVxuICAgICAgICB9KTtcbiAgICAgICAgY29uc29sZS5sb2codGhpcyk7XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSk7XG5cbiAgICAkKCdhW2RhdGEtYnMtdG9nZ2xlPVwidGFiXCJdJykub24oJ3Nob3duLmJzLnRhYicsIGZ1bmN0aW9uIChlKSB7XG4gICAgICAgIGlmKCQoZS50YXJnZXQpLnBhcmVudCgpLnBhcmVudCgpLnBhcmVudCgpLmF0dHIoJ2lkJykgJiYgJChlLnRhcmdldCkucGFyZW50KCkucGFyZW50KCkucGFyZW50KCkuYXR0cignaWQnKSA9PSAnZG9jJykge1xuICAgICAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ2xhc3RUYWJEb2MnLCAkKHRoaXMpLmF0dHIoJ2hyZWYnKSk7XG4gICAgICAgIH1lbHNle1xuICAgICAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ2xhc3RUYWInLCAkKHRoaXMpLmF0dHIoJ2hyZWYnKSk7XG4gICAgICAgIH07XG5cbiAgICB9KTtcblxuICAgIC8vIGdvIHRvIHRoZSBsYXRlc3QgdGFiLCBpZiBpdCBleGlzdHM6XG4gICAgdmFyIGxhc3RUYWIgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnbGFzdFRhYicpO1xuICAgIGlmIChsYXN0VGFiKSB7XG4gICAgICAgICQoJ1tocmVmPVwiJyArIGxhc3RUYWIgKyAnXCJdJykudGFiKCdzaG93Jyk7XG4gICAgfVxuXG4gICAgdmFyIGxhc3RUYWJEb2MgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnbGFzdFRhYkRvYycpO1xuICAgIGlmIChsYXN0VGFiRG9jKSB7XG4gICAgICAgICQoJ1tocmVmPVwiJyArIGxhc3RUYWJEb2MgKyAnXCJdJykudGFiKCdzaG93Jyk7XG4gICAgfVxuXG4gICAgJCgnLm5hdiBsaSB1bCcpLnBhcmVudCgpLmZpbmQoJ2EnKS5jbGljayhmdW5jdGlvbigpIHtcbiAgICAgICAgJCh0aGlzKS5wYXJlbnQoKS5maW5kKFwidWxcIikudG9nZ2xlKCk7XG4gICAgfSk7XG5cbiAgICAkKCdpbnB1dFtkYXRhLWJzLXRvZ2dsZT1cInRvZ2dsZVwiXSwgaW5wdXQuYWpheFRvb2dsZScpLmNoYW5nZShmdW5jdGlvbigpIHtcbiAgICAgICAgJC5nZXRKU09OKCQodGhpcykuZGF0YSgndXJsJykpO1xuICAgIH0pO1xuXG4gICAgJCgnc2VsZWN0Lm11bHRpcGxlJykubXVsdGlzZWxlY3Qoe1xuICAgICAgICBzdWJtaXRBbGxMZWZ0OiBmYWxzZSxcbiAgICAgICAgc3VibWl0QWxsUmlnaHQ6IHRydWUsXG4gICAgICAgIHNlYXJjaDoge1xuICAgICAgICAgICAgbGVmdDogJzxpbnB1dCB0eXBlPVwidGV4dFwiIG5hbWU9XCJxXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBwbGFjZWhvbGRlcj1cIlNlYXJjaC4uLlwiIC8+JyxcbiAgICAgICAgICAgIHJpZ2h0OiAnPGlucHV0IHR5cGU9XCJ0ZXh0XCIgbmFtZT1cInFcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIHBsYWNlaG9sZGVyPVwiU2VhcmNoLi4uXCIgLz4nLFxuICAgICAgICB9LFxuICAgICAgICBmaXJlU2VhcmNoOiBmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgICAgICAgcmV0dXJuIHZhbHVlLmxlbmd0aCA+IDE7XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgICQoJy5zdW1tZXJub3RlJykuc3VtbWVybm90ZSh7XG4gICAgICAgIGhlaWdodDogNDAwLFxuICAgICAgICB0b29sYmFyOiBbXG4gICAgICAgICAgICAgICAgWydzdHlsZScsIFsnc3R5bGUnXV0sXG4gICAgICAgICAgICAgICAgWydmb250JywgWydib2xkJywgJ2l0YWxpYycsICd1bmRlcmxpbmUnLCAnY2xlYXInXV0sXG4gICAgICAgICAgICAgICAgWydmb250c2l6ZScsIFsnZm9udHNpemUnXV0sXG4gICAgICAgICAgICAgICAgWydjb2xvcicsIFsnY29sb3InXV0sXG4gICAgICAgICAgICAgICAgWydwYXJhJywgWyd1bCcsICdvbCcsICdwYXJhZ3JhcGgnXV0sXG4gICAgICAgICAgICAgICAgWydoZWlnaHQnLCBbJ2hlaWdodCddXSxcbiAgICAgICAgICAgICAgICBbJ3RhYmxlJywgWyd0YWJsZSddXSxcbiAgICAgICAgICAgICAgICBbJ2luc2VydCcsIFsnbGluaycsICdociddXSxcbiAgICAgICAgICAgICAgICBbJ3ZpZXcnLCBbJ2Z1bGxzY3JlZW4nLCAnY29kZXZpZXcnXV0sXG4gICAgICAgICAgICAgICAgWydoZWxwJywgWydoZWxwJ11dLFxuICAgICAgICAgICAgICAgIFsnbWVkaWEnLCBbJ21lZGlhJ11dXG4gICAgICAgIF1cbiAgICB9KTtcbn0pO1xuIiwiXG4vKlxuICpcbiAqIE1vcmUgaW5mbyBhdCBbd3d3LmRyb3B6b25lanMuY29tXShodHRwOi8vd3d3LmRyb3B6b25lanMuY29tKVxuICpcbiAqIENvcHlyaWdodCAoYykgMjAxMiwgTWF0aWFzIE1lbm9cbiAqXG4gKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5XG4gKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsXG4gKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzXG4gKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsXG4gKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXNcbiAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4gKlxuICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW5cbiAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuICpcbiAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1JcbiAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4gKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4gKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTlxuICogVEhFIFNPRlRXQVJFLlxuICpcbiAqL1xuXG4oZnVuY3Rpb24oKSB7XG4gIHZhciBEcm9wem9uZSwgRW1pdHRlciwgY2FtZWxpemUsIGNvbnRlbnRMb2FkZWQsIGRldGVjdFZlcnRpY2FsU3F1YXNoLCBkcmF3SW1hZ2VJT1NGaXgsIG5vb3AsIHdpdGhvdXQsXG4gICAgX19zbGljZSA9IFtdLnNsaWNlLFxuICAgIF9faGFzUHJvcCA9IHt9Lmhhc093blByb3BlcnR5LFxuICAgIF9fZXh0ZW5kcyA9IGZ1bmN0aW9uKGNoaWxkLCBwYXJlbnQpIHsgZm9yICh2YXIga2V5IGluIHBhcmVudCkgeyBpZiAoX19oYXNQcm9wLmNhbGwocGFyZW50LCBrZXkpKSBjaGlsZFtrZXldID0gcGFyZW50W2tleV07IH0gZnVuY3Rpb24gY3RvcigpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGNoaWxkOyB9IGN0b3IucHJvdG90eXBlID0gcGFyZW50LnByb3RvdHlwZTsgY2hpbGQucHJvdG90eXBlID0gbmV3IGN0b3IoKTsgY2hpbGQuX19zdXBlcl9fID0gcGFyZW50LnByb3RvdHlwZTsgcmV0dXJuIGNoaWxkOyB9O1xuXG4gIG5vb3AgPSBmdW5jdGlvbigpIHt9O1xuXG4gIEVtaXR0ZXIgPSAoZnVuY3Rpb24oKSB7XG4gICAgZnVuY3Rpb24gRW1pdHRlcigpIHt9XG5cbiAgICBFbWl0dGVyLnByb3RvdHlwZS5hZGRFdmVudExpc3RlbmVyID0gRW1pdHRlci5wcm90b3R5cGUub247XG5cbiAgICBFbWl0dGVyLnByb3RvdHlwZS5vbiA9IGZ1bmN0aW9uKGV2ZW50LCBmbikge1xuICAgICAgdGhpcy5fY2FsbGJhY2tzID0gdGhpcy5fY2FsbGJhY2tzIHx8IHt9O1xuICAgICAgaWYgKCF0aGlzLl9jYWxsYmFja3NbZXZlbnRdKSB7XG4gICAgICAgIHRoaXMuX2NhbGxiYWNrc1tldmVudF0gPSBbXTtcbiAgICAgIH1cbiAgICAgIHRoaXMuX2NhbGxiYWNrc1tldmVudF0ucHVzaChmbik7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuXG4gICAgRW1pdHRlci5wcm90b3R5cGUuZW1pdCA9IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIGFyZ3MsIGNhbGxiYWNrLCBjYWxsYmFja3MsIGV2ZW50LCBfaSwgX2xlbjtcbiAgICAgIGV2ZW50ID0gYXJndW1lbnRzWzBdLCBhcmdzID0gMiA8PSBhcmd1bWVudHMubGVuZ3RoID8gX19zbGljZS5jYWxsKGFyZ3VtZW50cywgMSkgOiBbXTtcbiAgICAgIHRoaXMuX2NhbGxiYWNrcyA9IHRoaXMuX2NhbGxiYWNrcyB8fCB7fTtcbiAgICAgIGNhbGxiYWNrcyA9IHRoaXMuX2NhbGxiYWNrc1tldmVudF07XG4gICAgICBpZiAoY2FsbGJhY2tzKSB7XG4gICAgICAgIGZvciAoX2kgPSAwLCBfbGVuID0gY2FsbGJhY2tzLmxlbmd0aDsgX2kgPCBfbGVuOyBfaSsrKSB7XG4gICAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFja3NbX2ldO1xuICAgICAgICAgIGNhbGxiYWNrLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuXG4gICAgRW1pdHRlci5wcm90b3R5cGUucmVtb3ZlTGlzdGVuZXIgPSBFbWl0dGVyLnByb3RvdHlwZS5vZmY7XG5cbiAgICBFbWl0dGVyLnByb3RvdHlwZS5yZW1vdmVBbGxMaXN0ZW5lcnMgPSBFbWl0dGVyLnByb3RvdHlwZS5vZmY7XG5cbiAgICBFbWl0dGVyLnByb3RvdHlwZS5yZW1vdmVFdmVudExpc3RlbmVyID0gRW1pdHRlci5wcm90b3R5cGUub2ZmO1xuXG4gICAgRW1pdHRlci5wcm90b3R5cGUub2ZmID0gZnVuY3Rpb24oZXZlbnQsIGZuKSB7XG4gICAgICB2YXIgY2FsbGJhY2ssIGNhbGxiYWNrcywgaSwgX2ksIF9sZW47XG4gICAgICBpZiAoIXRoaXMuX2NhbGxiYWNrcyB8fCBhcmd1bWVudHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHRoaXMuX2NhbGxiYWNrcyA9IHt9O1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH1cbiAgICAgIGNhbGxiYWNrcyA9IHRoaXMuX2NhbGxiYWNrc1tldmVudF07XG4gICAgICBpZiAoIWNhbGxiYWNrcykge1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH1cbiAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIGRlbGV0ZSB0aGlzLl9jYWxsYmFja3NbZXZlbnRdO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH1cbiAgICAgIGZvciAoaSA9IF9pID0gMCwgX2xlbiA9IGNhbGxiYWNrcy5sZW5ndGg7IF9pIDwgX2xlbjsgaSA9ICsrX2kpIHtcbiAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFja3NbaV07XG4gICAgICAgIGlmIChjYWxsYmFjayA9PT0gZm4pIHtcbiAgICAgICAgICBjYWxsYmFja3Muc3BsaWNlKGksIDEpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuXG4gICAgcmV0dXJuIEVtaXR0ZXI7XG5cbiAgfSkoKTtcblxuICBEcm9wem9uZSA9IChmdW5jdGlvbihfc3VwZXIpIHtcbiAgICB2YXIgZXh0ZW5kLCByZXNvbHZlT3B0aW9uO1xuXG4gICAgX19leHRlbmRzKERyb3B6b25lLCBfc3VwZXIpO1xuXG4gICAgRHJvcHpvbmUucHJvdG90eXBlLkVtaXR0ZXIgPSBFbWl0dGVyO1xuXG5cbiAgICAvKlxuICAgIFRoaXMgaXMgYSBsaXN0IG9mIGFsbCBhdmFpbGFibGUgZXZlbnRzIHlvdSBjYW4gcmVnaXN0ZXIgb24gYSBkcm9wem9uZSBvYmplY3QuXG4gICAgXG4gICAgWW91IGNhbiByZWdpc3RlciBhbiBldmVudCBoYW5kbGVyIGxpa2UgdGhpczpcbiAgICBcbiAgICAgICAgZHJvcHpvbmUub24oXCJkcmFnRW50ZXJcIiwgZnVuY3Rpb24oKSB7IH0pO1xuICAgICAqL1xuXG4gICAgRHJvcHpvbmUucHJvdG90eXBlLmV2ZW50cyA9IFtcImRyb3BcIiwgXCJkcmFnc3RhcnRcIiwgXCJkcmFnZW5kXCIsIFwiZHJhZ2VudGVyXCIsIFwiZHJhZ292ZXJcIiwgXCJkcmFnbGVhdmVcIiwgXCJhZGRlZGZpbGVcIiwgXCJhZGRlZGZpbGVzXCIsIFwicmVtb3ZlZGZpbGVcIiwgXCJ0aHVtYm5haWxcIiwgXCJlcnJvclwiLCBcImVycm9ybXVsdGlwbGVcIiwgXCJwcm9jZXNzaW5nXCIsIFwicHJvY2Vzc2luZ211bHRpcGxlXCIsIFwidXBsb2FkcHJvZ3Jlc3NcIiwgXCJ0b3RhbHVwbG9hZHByb2dyZXNzXCIsIFwic2VuZGluZ1wiLCBcInNlbmRpbmdtdWx0aXBsZVwiLCBcInN1Y2Nlc3NcIiwgXCJzdWNjZXNzbXVsdGlwbGVcIiwgXCJjYW5jZWxlZFwiLCBcImNhbmNlbGVkbXVsdGlwbGVcIiwgXCJjb21wbGV0ZVwiLCBcImNvbXBsZXRlbXVsdGlwbGVcIiwgXCJyZXNldFwiLCBcIm1heGZpbGVzZXhjZWVkZWRcIiwgXCJtYXhmaWxlc3JlYWNoZWRcIiwgXCJxdWV1ZWNvbXBsZXRlXCJdO1xuXG4gICAgRHJvcHpvbmUucHJvdG90eXBlLmRlZmF1bHRPcHRpb25zID0ge1xuICAgICAgdXJsOiBudWxsLFxuICAgICAgbWV0aG9kOiBcInBvc3RcIixcbiAgICAgIHdpdGhDcmVkZW50aWFsczogZmFsc2UsXG4gICAgICBwYXJhbGxlbFVwbG9hZHM6IDIsXG4gICAgICB1cGxvYWRNdWx0aXBsZTogZmFsc2UsXG4gICAgICBtYXhGaWxlc2l6ZTogMjU2LFxuICAgICAgcGFyYW1OYW1lOiBcImZpbGVcIixcbiAgICAgIGNyZWF0ZUltYWdlVGh1bWJuYWlsczogdHJ1ZSxcbiAgICAgIG1heFRodW1ibmFpbEZpbGVzaXplOiAxMCxcbiAgICAgIHRodW1ibmFpbFdpZHRoOiAxMjAsXG4gICAgICB0aHVtYm5haWxIZWlnaHQ6IDEyMCxcbiAgICAgIGZpbGVzaXplQmFzZTogMTAwMCxcbiAgICAgIG1heEZpbGVzOiBudWxsLFxuICAgICAgcGFyYW1zOiB7fSxcbiAgICAgIGNsaWNrYWJsZTogdHJ1ZSxcbiAgICAgIGlnbm9yZUhpZGRlbkZpbGVzOiB0cnVlLFxuICAgICAgYWNjZXB0ZWRGaWxlczogbnVsbCxcbiAgICAgIGFjY2VwdGVkTWltZVR5cGVzOiBudWxsLFxuICAgICAgYXV0b1Byb2Nlc3NRdWV1ZTogdHJ1ZSxcbiAgICAgIGF1dG9RdWV1ZTogdHJ1ZSxcbiAgICAgIGFkZFJlbW92ZUxpbmtzOiBmYWxzZSxcbiAgICAgIHByZXZpZXdzQ29udGFpbmVyOiBudWxsLFxuICAgICAgaGlkZGVuSW5wdXRDb250YWluZXI6IFwiYm9keVwiLFxuICAgICAgY2FwdHVyZTogbnVsbCxcbiAgICAgIGRpY3REZWZhdWx0TWVzc2FnZTogXCJEcm9wIGZpbGVzIGhlcmUgdG8gdXBsb2FkXCIsXG4gICAgICBkaWN0RmFsbGJhY2tNZXNzYWdlOiBcIllvdXIgYnJvd3NlciBkb2VzIG5vdCBzdXBwb3J0IGRyYWcnbidkcm9wIGZpbGUgdXBsb2Fkcy5cIixcbiAgICAgIGRpY3RGYWxsYmFja1RleHQ6IFwiUGxlYXNlIHVzZSB0aGUgZmFsbGJhY2sgZm9ybSBiZWxvdyB0byB1cGxvYWQgeW91ciBmaWxlcyBsaWtlIGluIHRoZSBvbGRlbiBkYXlzLlwiLFxuICAgICAgZGljdEZpbGVUb29CaWc6IFwiRmlsZSBpcyB0b28gYmlnICh7e2ZpbGVzaXplfX1NaUIpLiBNYXggZmlsZXNpemU6IHt7bWF4RmlsZXNpemV9fU1pQi5cIixcbiAgICAgIGRpY3RJbnZhbGlkRmlsZVR5cGU6IFwiWW91IGNhbid0IHVwbG9hZCBmaWxlcyBvZiB0aGlzIHR5cGUuXCIsXG4gICAgICBkaWN0UmVzcG9uc2VFcnJvcjogXCJTZXJ2ZXIgcmVzcG9uZGVkIHdpdGgge3tzdGF0dXNDb2RlfX0gY29kZS5cIixcbiAgICAgIGRpY3RDYW5jZWxVcGxvYWQ6IFwiQ2FuY2VsIHVwbG9hZFwiLFxuICAgICAgZGljdENhbmNlbFVwbG9hZENvbmZpcm1hdGlvbjogXCJBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gY2FuY2VsIHRoaXMgdXBsb2FkP1wiLFxuICAgICAgZGljdFJlbW92ZUZpbGU6IFwiUmVtb3ZlIGZpbGVcIixcbiAgICAgIGRpY3RSZW1vdmVGaWxlQ29uZmlybWF0aW9uOiBudWxsLFxuICAgICAgZGljdE1heEZpbGVzRXhjZWVkZWQ6IFwiWW91IGNhbiBub3QgdXBsb2FkIGFueSBtb3JlIGZpbGVzLlwiLFxuICAgICAgYWNjZXB0OiBmdW5jdGlvbihmaWxlLCBkb25lKSB7XG4gICAgICAgIHJldHVybiBkb25lKCk7XG4gICAgICB9LFxuICAgICAgaW5pdDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBub29wO1xuICAgICAgfSxcbiAgICAgIGZvcmNlRmFsbGJhY2s6IGZhbHNlLFxuICAgICAgZmFsbGJhY2s6IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgY2hpbGQsIG1lc3NhZ2VFbGVtZW50LCBzcGFuLCBfaSwgX2xlbiwgX3JlZjtcbiAgICAgICAgdGhpcy5lbGVtZW50LmNsYXNzTmFtZSA9IFwiXCIgKyB0aGlzLmVsZW1lbnQuY2xhc3NOYW1lICsgXCIgZHotYnJvd3Nlci1ub3Qtc3VwcG9ydGVkXCI7XG4gICAgICAgIF9yZWYgPSB0aGlzLmVsZW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJkaXZcIik7XG4gICAgICAgIGZvciAoX2kgPSAwLCBfbGVuID0gX3JlZi5sZW5ndGg7IF9pIDwgX2xlbjsgX2krKykge1xuICAgICAgICAgIGNoaWxkID0gX3JlZltfaV07XG4gICAgICAgICAgaWYgKC8oXnwgKWR6LW1lc3NhZ2UoJHwgKS8udGVzdChjaGlsZC5jbGFzc05hbWUpKSB7XG4gICAgICAgICAgICBtZXNzYWdlRWxlbWVudCA9IGNoaWxkO1xuICAgICAgICAgICAgY2hpbGQuY2xhc3NOYW1lID0gXCJkei1tZXNzYWdlXCI7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFtZXNzYWdlRWxlbWVudCkge1xuICAgICAgICAgIG1lc3NhZ2VFbGVtZW50ID0gRHJvcHpvbmUuY3JlYXRlRWxlbWVudChcIjxkaXYgY2xhc3M9XFxcImR6LW1lc3NhZ2VcXFwiPjxzcGFuPjwvc3Bhbj48L2Rpdj5cIik7XG4gICAgICAgICAgdGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKG1lc3NhZ2VFbGVtZW50KTtcbiAgICAgICAgfVxuICAgICAgICBzcGFuID0gbWVzc2FnZUVsZW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJzcGFuXCIpWzBdO1xuICAgICAgICBpZiAoc3Bhbikge1xuICAgICAgICAgIGlmIChzcGFuLnRleHRDb250ZW50ICE9IG51bGwpIHtcbiAgICAgICAgICAgIHNwYW4udGV4dENvbnRlbnQgPSB0aGlzLm9wdGlvbnMuZGljdEZhbGxiYWNrTWVzc2FnZTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHNwYW4uaW5uZXJUZXh0ICE9IG51bGwpIHtcbiAgICAgICAgICAgIHNwYW4uaW5uZXJUZXh0ID0gdGhpcy5vcHRpb25zLmRpY3RGYWxsYmFja01lc3NhZ2U7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5nZXRGYWxsYmFja0Zvcm0oKSk7XG4gICAgICB9LFxuICAgICAgcmVzaXplOiBmdW5jdGlvbihmaWxlKSB7XG4gICAgICAgIHZhciBpbmZvLCBzcmNSYXRpbywgdHJnUmF0aW87XG4gICAgICAgIGluZm8gPSB7XG4gICAgICAgICAgc3JjWDogMCxcbiAgICAgICAgICBzcmNZOiAwLFxuICAgICAgICAgIHNyY1dpZHRoOiBmaWxlLndpZHRoLFxuICAgICAgICAgIHNyY0hlaWdodDogZmlsZS5oZWlnaHRcbiAgICAgICAgfTtcbiAgICAgICAgc3JjUmF0aW8gPSBmaWxlLndpZHRoIC8gZmlsZS5oZWlnaHQ7XG4gICAgICAgIGluZm8ub3B0V2lkdGggPSB0aGlzLm9wdGlvbnMudGh1bWJuYWlsV2lkdGg7XG4gICAgICAgIGluZm8ub3B0SGVpZ2h0ID0gdGhpcy5vcHRpb25zLnRodW1ibmFpbEhlaWdodDtcbiAgICAgICAgaWYgKChpbmZvLm9wdFdpZHRoID09IG51bGwpICYmIChpbmZvLm9wdEhlaWdodCA9PSBudWxsKSkge1xuICAgICAgICAgIGluZm8ub3B0V2lkdGggPSBpbmZvLnNyY1dpZHRoO1xuICAgICAgICAgIGluZm8ub3B0SGVpZ2h0ID0gaW5mby5zcmNIZWlnaHQ7XG4gICAgICAgIH0gZWxzZSBpZiAoaW5mby5vcHRXaWR0aCA9PSBudWxsKSB7XG4gICAgICAgICAgaW5mby5vcHRXaWR0aCA9IHNyY1JhdGlvICogaW5mby5vcHRIZWlnaHQ7XG4gICAgICAgIH0gZWxzZSBpZiAoaW5mby5vcHRIZWlnaHQgPT0gbnVsbCkge1xuICAgICAgICAgIGluZm8ub3B0SGVpZ2h0ID0gKDEgLyBzcmNSYXRpbykgKiBpbmZvLm9wdFdpZHRoO1xuICAgICAgICB9XG4gICAgICAgIHRyZ1JhdGlvID0gaW5mby5vcHRXaWR0aCAvIGluZm8ub3B0SGVpZ2h0O1xuICAgICAgICBpZiAoZmlsZS5oZWlnaHQgPCBpbmZvLm9wdEhlaWdodCB8fCBmaWxlLndpZHRoIDwgaW5mby5vcHRXaWR0aCkge1xuICAgICAgICAgIGluZm8udHJnSGVpZ2h0ID0gaW5mby5zcmNIZWlnaHQ7XG4gICAgICAgICAgaW5mby50cmdXaWR0aCA9IGluZm8uc3JjV2lkdGg7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKHNyY1JhdGlvID4gdHJnUmF0aW8pIHtcbiAgICAgICAgICAgIGluZm8uc3JjSGVpZ2h0ID0gZmlsZS5oZWlnaHQ7XG4gICAgICAgICAgICBpbmZvLnNyY1dpZHRoID0gaW5mby5zcmNIZWlnaHQgKiB0cmdSYXRpbztcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaW5mby5zcmNXaWR0aCA9IGZpbGUud2lkdGg7XG4gICAgICAgICAgICBpbmZvLnNyY0hlaWdodCA9IGluZm8uc3JjV2lkdGggLyB0cmdSYXRpbztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaW5mby5zcmNYID0gKGZpbGUud2lkdGggLSBpbmZvLnNyY1dpZHRoKSAvIDI7XG4gICAgICAgIGluZm8uc3JjWSA9IChmaWxlLmhlaWdodCAtIGluZm8uc3JjSGVpZ2h0KSAvIDI7XG4gICAgICAgIHJldHVybiBpbmZvO1xuICAgICAgfSxcblxuICAgICAgLypcbiAgICAgIFRob3NlIGZ1bmN0aW9ucyByZWdpc3RlciB0aGVtc2VsdmVzIHRvIHRoZSBldmVudHMgb24gaW5pdCBhbmQgaGFuZGxlIGFsbFxuICAgICAgdGhlIHVzZXIgaW50ZXJmYWNlIHNwZWNpZmljIHN0dWZmLiBPdmVyd3JpdGluZyB0aGVtIHdvbid0IGJyZWFrIHRoZSB1cGxvYWRcbiAgICAgIGJ1dCBjYW4gYnJlYWsgdGhlIHdheSBpdCdzIGRpc3BsYXllZC5cbiAgICAgIFlvdSBjYW4gb3ZlcndyaXRlIHRoZW0gaWYgeW91IGRvbid0IGxpa2UgdGhlIGRlZmF1bHQgYmVoYXZpb3IuIElmIHlvdSBqdXN0XG4gICAgICB3YW50IHRvIGFkZCBhbiBhZGRpdGlvbmFsIGV2ZW50IGhhbmRsZXIsIHJlZ2lzdGVyIGl0IG9uIHRoZSBkcm9wem9uZSBvYmplY3RcbiAgICAgIGFuZCBkb24ndCBvdmVyd3JpdGUgdGhvc2Ugb3B0aW9ucy5cbiAgICAgICAqL1xuICAgICAgZHJvcDogZnVuY3Rpb24oZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5lbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoXCJkei1kcmFnLWhvdmVyXCIpO1xuICAgICAgfSxcbiAgICAgIGRyYWdzdGFydDogbm9vcCxcbiAgICAgIGRyYWdlbmQ6IGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKFwiZHotZHJhZy1ob3ZlclwiKTtcbiAgICAgIH0sXG4gICAgICBkcmFnZW50ZXI6IGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWxlbWVudC5jbGFzc0xpc3QuYWRkKFwiZHotZHJhZy1ob3ZlclwiKTtcbiAgICAgIH0sXG4gICAgICBkcmFnb3ZlcjogZnVuY3Rpb24oZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5lbGVtZW50LmNsYXNzTGlzdC5hZGQoXCJkei1kcmFnLWhvdmVyXCIpO1xuICAgICAgfSxcbiAgICAgIGRyYWdsZWF2ZTogZnVuY3Rpb24oZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5lbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoXCJkei1kcmFnLWhvdmVyXCIpO1xuICAgICAgfSxcbiAgICAgIHBhc3RlOiBub29wLFxuICAgICAgcmVzZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5lbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoXCJkei1zdGFydGVkXCIpO1xuICAgICAgfSxcbiAgICAgIGFkZGVkZmlsZTogZnVuY3Rpb24oZmlsZSkge1xuICAgICAgICB2YXIgbm9kZSwgcmVtb3ZlRmlsZUV2ZW50LCByZW1vdmVMaW5rLCBfaSwgX2osIF9rLCBfbGVuLCBfbGVuMSwgX2xlbjIsIF9yZWYsIF9yZWYxLCBfcmVmMiwgX3Jlc3VsdHM7XG4gICAgICAgIGlmICh0aGlzLmVsZW1lbnQgPT09IHRoaXMucHJldmlld3NDb250YWluZXIpIHtcbiAgICAgICAgICB0aGlzLmVsZW1lbnQuY2xhc3NMaXN0LmFkZChcImR6LXN0YXJ0ZWRcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMucHJldmlld3NDb250YWluZXIpIHtcbiAgICAgICAgICBmaWxlLnByZXZpZXdFbGVtZW50ID0gRHJvcHpvbmUuY3JlYXRlRWxlbWVudCh0aGlzLm9wdGlvbnMucHJldmlld1RlbXBsYXRlLnRyaW0oKSk7XG4gICAgICAgICAgZmlsZS5wcmV2aWV3VGVtcGxhdGUgPSBmaWxlLnByZXZpZXdFbGVtZW50O1xuICAgICAgICAgIHRoaXMucHJldmlld3NDb250YWluZXIuYXBwZW5kQ2hpbGQoZmlsZS5wcmV2aWV3RWxlbWVudCk7XG4gICAgICAgICAgX3JlZiA9IGZpbGUucHJldmlld0VsZW1lbnQucXVlcnlTZWxlY3RvckFsbChcIltkYXRhLWR6LW5hbWVdXCIpO1xuICAgICAgICAgIGZvciAoX2kgPSAwLCBfbGVuID0gX3JlZi5sZW5ndGg7IF9pIDwgX2xlbjsgX2krKykge1xuICAgICAgICAgICAgbm9kZSA9IF9yZWZbX2ldO1xuICAgICAgICAgICAgbm9kZS50ZXh0Q29udGVudCA9IGZpbGUubmFtZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgX3JlZjEgPSBmaWxlLnByZXZpZXdFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCJbZGF0YS1kei1zaXplXVwiKTtcbiAgICAgICAgICBmb3IgKF9qID0gMCwgX2xlbjEgPSBfcmVmMS5sZW5ndGg7IF9qIDwgX2xlbjE7IF9qKyspIHtcbiAgICAgICAgICAgIG5vZGUgPSBfcmVmMVtfal07XG4gICAgICAgICAgICBub2RlLmlubmVySFRNTCA9IHRoaXMuZmlsZXNpemUoZmlsZS5zaXplKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5hZGRSZW1vdmVMaW5rcykge1xuICAgICAgICAgICAgZmlsZS5fcmVtb3ZlTGluayA9IERyb3B6b25lLmNyZWF0ZUVsZW1lbnQoXCI8YSBjbGFzcz1cXFwiZHotcmVtb3ZlXFxcIiBocmVmPVxcXCJqYXZhc2NyaXB0OnVuZGVmaW5lZDtcXFwiIGRhdGEtZHotcmVtb3ZlPlwiICsgdGhpcy5vcHRpb25zLmRpY3RSZW1vdmVGaWxlICsgXCI8L2E+XCIpO1xuICAgICAgICAgICAgZmlsZS5wcmV2aWV3RWxlbWVudC5hcHBlbmRDaGlsZChmaWxlLl9yZW1vdmVMaW5rKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmVtb3ZlRmlsZUV2ZW50ID0gKGZ1bmN0aW9uKF90aGlzKSB7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24oZSkge1xuICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICAgIGlmIChmaWxlLnN0YXR1cyA9PT0gRHJvcHpvbmUuVVBMT0FESU5HKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIERyb3B6b25lLmNvbmZpcm0oX3RoaXMub3B0aW9ucy5kaWN0Q2FuY2VsVXBsb2FkQ29uZmlybWF0aW9uLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBfdGhpcy5yZW1vdmVGaWxlKGZpbGUpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmIChfdGhpcy5vcHRpb25zLmRpY3RSZW1vdmVGaWxlQ29uZmlybWF0aW9uKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gRHJvcHpvbmUuY29uZmlybShfdGhpcy5vcHRpb25zLmRpY3RSZW1vdmVGaWxlQ29uZmlybWF0aW9uLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF90aGlzLnJlbW92ZUZpbGUoZmlsZSk7XG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIF90aGlzLnJlbW92ZUZpbGUoZmlsZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH0pKHRoaXMpO1xuICAgICAgICAgIF9yZWYyID0gZmlsZS5wcmV2aWV3RWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKFwiW2RhdGEtZHotcmVtb3ZlXVwiKTtcbiAgICAgICAgICBfcmVzdWx0cyA9IFtdO1xuICAgICAgICAgIGZvciAoX2sgPSAwLCBfbGVuMiA9IF9yZWYyLmxlbmd0aDsgX2sgPCBfbGVuMjsgX2srKykge1xuICAgICAgICAgICAgcmVtb3ZlTGluayA9IF9yZWYyW19rXTtcbiAgICAgICAgICAgIF9yZXN1bHRzLnB1c2gocmVtb3ZlTGluay5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgcmVtb3ZlRmlsZUV2ZW50KSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBfcmVzdWx0cztcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHJlbW92ZWRmaWxlOiBmdW5jdGlvbihmaWxlKSB7XG4gICAgICAgIHZhciBfcmVmO1xuICAgICAgICBpZiAoZmlsZS5wcmV2aWV3RWxlbWVudCkge1xuICAgICAgICAgIGlmICgoX3JlZiA9IGZpbGUucHJldmlld0VsZW1lbnQpICE9IG51bGwpIHtcbiAgICAgICAgICAgIF9yZWYucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChmaWxlLnByZXZpZXdFbGVtZW50KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX3VwZGF0ZU1heEZpbGVzUmVhY2hlZENsYXNzKCk7XG4gICAgICB9LFxuICAgICAgdGh1bWJuYWlsOiBmdW5jdGlvbihmaWxlLCBkYXRhVXJsKSB7XG4gICAgICAgIHZhciB0aHVtYm5haWxFbGVtZW50LCBfaSwgX2xlbiwgX3JlZjtcbiAgICAgICAgaWYgKGZpbGUucHJldmlld0VsZW1lbnQpIHtcbiAgICAgICAgICBmaWxlLnByZXZpZXdFbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoXCJkei1maWxlLXByZXZpZXdcIik7XG4gICAgICAgICAgX3JlZiA9IGZpbGUucHJldmlld0VsZW1lbnQucXVlcnlTZWxlY3RvckFsbChcIltkYXRhLWR6LXRodW1ibmFpbF1cIik7XG4gICAgICAgICAgZm9yIChfaSA9IDAsIF9sZW4gPSBfcmVmLmxlbmd0aDsgX2kgPCBfbGVuOyBfaSsrKSB7XG4gICAgICAgICAgICB0aHVtYm5haWxFbGVtZW50ID0gX3JlZltfaV07XG4gICAgICAgICAgICB0aHVtYm5haWxFbGVtZW50LmFsdCA9IGZpbGUubmFtZTtcbiAgICAgICAgICAgIHRodW1ibmFpbEVsZW1lbnQuc3JjID0gZGF0YVVybDtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHNldFRpbWVvdXQoKChmdW5jdGlvbihfdGhpcykge1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICByZXR1cm4gZmlsZS5wcmV2aWV3RWxlbWVudC5jbGFzc0xpc3QuYWRkKFwiZHotaW1hZ2UtcHJldmlld1wiKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfSkodGhpcykpLCAxKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGVycm9yOiBmdW5jdGlvbihmaWxlLCBtZXNzYWdlKSB7XG4gICAgICAgIHZhciBub2RlLCBfaSwgX2xlbiwgX3JlZiwgX3Jlc3VsdHM7XG4gICAgICAgIGlmIChmaWxlLnByZXZpZXdFbGVtZW50KSB7XG4gICAgICAgICAgZmlsZS5wcmV2aWV3RWxlbWVudC5jbGFzc0xpc3QuYWRkKFwiZHotZXJyb3JcIik7XG4gICAgICAgICAgaWYgKHR5cGVvZiBtZXNzYWdlICE9PSBcIlN0cmluZ1wiICYmIG1lc3NhZ2UuZXJyb3IpIHtcbiAgICAgICAgICAgIG1lc3NhZ2UgPSBtZXNzYWdlLmVycm9yO1xuICAgICAgICAgIH1cbiAgICAgICAgICBfcmVmID0gZmlsZS5wcmV2aWV3RWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKFwiW2RhdGEtZHotZXJyb3JtZXNzYWdlXVwiKTtcbiAgICAgICAgICBfcmVzdWx0cyA9IFtdO1xuICAgICAgICAgIGZvciAoX2kgPSAwLCBfbGVuID0gX3JlZi5sZW5ndGg7IF9pIDwgX2xlbjsgX2krKykge1xuICAgICAgICAgICAgbm9kZSA9IF9yZWZbX2ldO1xuICAgICAgICAgICAgX3Jlc3VsdHMucHVzaChub2RlLnRleHRDb250ZW50ID0gbWVzc2FnZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBfcmVzdWx0cztcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGVycm9ybXVsdGlwbGU6IG5vb3AsXG4gICAgICBwcm9jZXNzaW5nOiBmdW5jdGlvbihmaWxlKSB7XG4gICAgICAgIGlmIChmaWxlLnByZXZpZXdFbGVtZW50KSB7XG4gICAgICAgICAgZmlsZS5wcmV2aWV3RWxlbWVudC5jbGFzc0xpc3QuYWRkKFwiZHotcHJvY2Vzc2luZ1wiKTtcbiAgICAgICAgICBpZiAoZmlsZS5fcmVtb3ZlTGluaykge1xuICAgICAgICAgICAgcmV0dXJuIGZpbGUuX3JlbW92ZUxpbmsudGV4dENvbnRlbnQgPSB0aGlzLm9wdGlvbnMuZGljdENhbmNlbFVwbG9hZDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBwcm9jZXNzaW5nbXVsdGlwbGU6IG5vb3AsXG4gICAgICB1cGxvYWRwcm9ncmVzczogZnVuY3Rpb24oZmlsZSwgcHJvZ3Jlc3MsIGJ5dGVzU2VudCkge1xuICAgICAgICB2YXIgbm9kZSwgX2ksIF9sZW4sIF9yZWYsIF9yZXN1bHRzO1xuICAgICAgICBpZiAoZmlsZS5wcmV2aWV3RWxlbWVudCkge1xuICAgICAgICAgIF9yZWYgPSBmaWxlLnByZXZpZXdFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCJbZGF0YS1kei11cGxvYWRwcm9ncmVzc11cIik7XG4gICAgICAgICAgX3Jlc3VsdHMgPSBbXTtcbiAgICAgICAgICBmb3IgKF9pID0gMCwgX2xlbiA9IF9yZWYubGVuZ3RoOyBfaSA8IF9sZW47IF9pKyspIHtcbiAgICAgICAgICAgIG5vZGUgPSBfcmVmW19pXTtcbiAgICAgICAgICAgIGlmIChub2RlLm5vZGVOYW1lID09PSAnUFJPR1JFU1MnKSB7XG4gICAgICAgICAgICAgIF9yZXN1bHRzLnB1c2gobm9kZS52YWx1ZSA9IHByb2dyZXNzKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIF9yZXN1bHRzLnB1c2gobm9kZS5zdHlsZS53aWR0aCA9IFwiXCIgKyBwcm9ncmVzcyArIFwiJVwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIF9yZXN1bHRzO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgdG90YWx1cGxvYWRwcm9ncmVzczogbm9vcCxcbiAgICAgIHNlbmRpbmc6IG5vb3AsXG4gICAgICBzZW5kaW5nbXVsdGlwbGU6IG5vb3AsXG4gICAgICBzdWNjZXNzOiBmdW5jdGlvbihmaWxlKSB7XG4gICAgICAgIGlmIChmaWxlLnByZXZpZXdFbGVtZW50KSB7XG4gICAgICAgICAgcmV0dXJuIGZpbGUucHJldmlld0VsZW1lbnQuY2xhc3NMaXN0LmFkZChcImR6LXN1Y2Nlc3NcIik7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBzdWNjZXNzbXVsdGlwbGU6IG5vb3AsXG4gICAgICBjYW5jZWxlZDogZnVuY3Rpb24oZmlsZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5lbWl0KFwiZXJyb3JcIiwgZmlsZSwgXCJVcGxvYWQgY2FuY2VsZWQuXCIpO1xuICAgICAgfSxcbiAgICAgIGNhbmNlbGVkbXVsdGlwbGU6IG5vb3AsXG4gICAgICBjb21wbGV0ZTogZnVuY3Rpb24oZmlsZSkge1xuICAgICAgICBpZiAoZmlsZS5fcmVtb3ZlTGluaykge1xuICAgICAgICAgIGZpbGUuX3JlbW92ZUxpbmsudGV4dENvbnRlbnQgPSB0aGlzLm9wdGlvbnMuZGljdFJlbW92ZUZpbGU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZpbGUucHJldmlld0VsZW1lbnQpIHtcbiAgICAgICAgICByZXR1cm4gZmlsZS5wcmV2aWV3RWxlbWVudC5jbGFzc0xpc3QuYWRkKFwiZHotY29tcGxldGVcIik7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBjb21wbGV0ZW11bHRpcGxlOiBub29wLFxuICAgICAgbWF4ZmlsZXNleGNlZWRlZDogbm9vcCxcbiAgICAgIG1heGZpbGVzcmVhY2hlZDogbm9vcCxcbiAgICAgIHF1ZXVlY29tcGxldGU6IG5vb3AsXG4gICAgICBhZGRlZGZpbGVzOiBub29wLFxuICAgICAgcHJldmlld1RlbXBsYXRlOiBcIjxkaXYgY2xhc3M9XFxcImR6LXByZXZpZXcgZHotZmlsZS1wcmV2aWV3XFxcIj5cXG4gIDxkaXYgY2xhc3M9XFxcImR6LWltYWdlXFxcIj48aW1nIGRhdGEtZHotdGh1bWJuYWlsIC8+PC9kaXY+XFxuICA8ZGl2IGNsYXNzPVxcXCJkei1kZXRhaWxzXFxcIj5cXG4gICAgPGRpdiBjbGFzcz1cXFwiZHotc2l6ZVxcXCI+PHNwYW4gZGF0YS1kei1zaXplPjwvc3Bhbj48L2Rpdj5cXG4gICAgPGRpdiBjbGFzcz1cXFwiZHotZmlsZW5hbWVcXFwiPjxzcGFuIGRhdGEtZHotbmFtZT48L3NwYW4+PC9kaXY+XFxuICA8L2Rpdj5cXG4gIDxkaXYgY2xhc3M9XFxcImR6LXByb2dyZXNzXFxcIj48c3BhbiBjbGFzcz1cXFwiZHotdXBsb2FkXFxcIiBkYXRhLWR6LXVwbG9hZHByb2dyZXNzPjwvc3Bhbj48L2Rpdj5cXG4gIDxkaXYgY2xhc3M9XFxcImR6LWVycm9yLW1lc3NhZ2VcXFwiPjxzcGFuIGRhdGEtZHotZXJyb3JtZXNzYWdlPjwvc3Bhbj48L2Rpdj5cXG4gIDxkaXYgY2xhc3M9XFxcImR6LXN1Y2Nlc3MtbWFya1xcXCI+XFxuICAgIDxzdmcgd2lkdGg9XFxcIjU0cHhcXFwiIGhlaWdodD1cXFwiNTRweFxcXCIgdmlld0JveD1cXFwiMCAwIDU0IDU0XFxcIiB2ZXJzaW9uPVxcXCIxLjFcXFwiIHhtbG5zPVxcXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1xcXCIgeG1sbnM6eGxpbms9XFxcImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmtcXFwiIHhtbG5zOnNrZXRjaD1cXFwiaHR0cDovL3d3dy5ib2hlbWlhbmNvZGluZy5jb20vc2tldGNoL25zXFxcIj5cXG4gICAgICA8dGl0bGU+Q2hlY2s8L3RpdGxlPlxcbiAgICAgIDxkZWZzPjwvZGVmcz5cXG4gICAgICA8ZyBpZD1cXFwiUGFnZS0xXFxcIiBzdHJva2U9XFxcIm5vbmVcXFwiIHN0cm9rZS13aWR0aD1cXFwiMVxcXCIgZmlsbD1cXFwibm9uZVxcXCIgZmlsbC1ydWxlPVxcXCJldmVub2RkXFxcIiBza2V0Y2g6dHlwZT1cXFwiTVNQYWdlXFxcIj5cXG4gICAgICAgIDxwYXRoIGQ9XFxcIk0yMy41LDMxLjg0MzE0NTggTDE3LjU4NTI0MTksMjUuOTI4Mzg3NyBDMTYuMDI0ODI1MywyNC4zNjc5NzExIDEzLjQ5MTAyOTQsMjQuMzY2ODM1IDExLjkyODkzMjIsMjUuOTI4OTMyMiBDMTAuMzcwMDEzNiwyNy40ODc4NTA4IDEwLjM2NjU5MTIsMzAuMDIzNDQ1NSAxMS45MjgzODc3LDMxLjU4NTI0MTkgTDIwLjQxNDc1ODEsNDAuMDcxNjEyMyBDMjAuNTEzMzk5OSw0MC4xNzAyNTQxIDIwLjYxNTkzMTUsNDAuMjYyNjY0OSAyMC43MjE4NjE1LDQwLjM0ODg0MzUgQzIyLjI4MzU2NjksNDEuODcyNTY1MSAyNC43OTQyMzQsNDEuODYyNjIwMiAyNi4zNDYxNTY0LDQwLjMxMDY5NzggTDQzLjMxMDY5NzgsMjMuMzQ2MTU2NCBDNDQuODc3MTAyMSwyMS43Nzk3NTIxIDQ0Ljg3NTgwNTcsMTkuMjQ4Mzg4NyA0My4zMTM3MDg1LDE3LjY4NjI5MTUgQzQxLjc1NDc4OTksMTYuMTI3MzcyOSAzOS4yMTc2MDM1LDE2LjEyNTU0MjIgMzcuNjUzODQzNiwxNy42ODkzMDIyIEwyMy41LDMxLjg0MzE0NTggWiBNMjcsNTMgQzQxLjM1OTQwMzUsNTMgNTMsNDEuMzU5NDAzNSA1MywyNyBDNTMsMTIuNjQwNTk2NSA0MS4zNTk0MDM1LDEgMjcsMSBDMTIuNjQwNTk2NSwxIDEsMTIuNjQwNTk2NSAxLDI3IEMxLDQxLjM1OTQwMzUgMTIuNjQwNTk2NSw1MyAyNyw1MyBaXFxcIiBpZD1cXFwiT3ZhbC0yXFxcIiBzdHJva2Utb3BhY2l0eT1cXFwiMC4xOTg3OTQxNThcXFwiIHN0cm9rZT1cXFwiIzc0NzQ3NFxcXCIgZmlsbC1vcGFjaXR5PVxcXCIwLjgxNjUxOTQ3NVxcXCIgZmlsbD1cXFwiI0ZGRkZGRlxcXCIgc2tldGNoOnR5cGU9XFxcIk1TU2hhcGVHcm91cFxcXCI+PC9wYXRoPlxcbiAgICAgIDwvZz5cXG4gICAgPC9zdmc+XFxuICA8L2Rpdj5cXG4gIDxkaXYgY2xhc3M9XFxcImR6LWVycm9yLW1hcmtcXFwiPlxcbiAgICA8c3ZnIHdpZHRoPVxcXCI1NHB4XFxcIiBoZWlnaHQ9XFxcIjU0cHhcXFwiIHZpZXdCb3g9XFxcIjAgMCA1NCA1NFxcXCIgdmVyc2lvbj1cXFwiMS4xXFxcIiB4bWxucz1cXFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcXFwiIHhtbG5zOnhsaW5rPVxcXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rXFxcIiB4bWxuczpza2V0Y2g9XFxcImh0dHA6Ly93d3cuYm9oZW1pYW5jb2RpbmcuY29tL3NrZXRjaC9uc1xcXCI+XFxuICAgICAgPHRpdGxlPkVycm9yPC90aXRsZT5cXG4gICAgICA8ZGVmcz48L2RlZnM+XFxuICAgICAgPGcgaWQ9XFxcIlBhZ2UtMVxcXCIgc3Ryb2tlPVxcXCJub25lXFxcIiBzdHJva2Utd2lkdGg9XFxcIjFcXFwiIGZpbGw9XFxcIm5vbmVcXFwiIGZpbGwtcnVsZT1cXFwiZXZlbm9kZFxcXCIgc2tldGNoOnR5cGU9XFxcIk1TUGFnZVxcXCI+XFxuICAgICAgICA8ZyBpZD1cXFwiQ2hlY2stKy1PdmFsLTJcXFwiIHNrZXRjaDp0eXBlPVxcXCJNU0xheWVyR3JvdXBcXFwiIHN0cm9rZT1cXFwiIzc0NzQ3NFxcXCIgc3Ryb2tlLW9wYWNpdHk9XFxcIjAuMTk4Nzk0MTU4XFxcIiBmaWxsPVxcXCIjRkZGRkZGXFxcIiBmaWxsLW9wYWNpdHk9XFxcIjAuODE2NTE5NDc1XFxcIj5cXG4gICAgICAgICAgPHBhdGggZD1cXFwiTTMyLjY1Njg1NDIsMjkgTDM4LjMxMDY5NzgsMjMuMzQ2MTU2NCBDMzkuODc3MTAyMSwyMS43Nzk3NTIxIDM5Ljg3NTgwNTcsMTkuMjQ4Mzg4NyAzOC4zMTM3MDg1LDE3LjY4NjI5MTUgQzM2Ljc1NDc4OTksMTYuMTI3MzcyOSAzNC4yMTc2MDM1LDE2LjEyNTU0MjIgMzIuNjUzODQzNiwxNy42ODkzMDIyIEwyNywyMy4zNDMxNDU4IEwyMS4zNDYxNTY0LDE3LjY4OTMwMjIgQzE5Ljc4MjM5NjUsMTYuMTI1NTQyMiAxNy4yNDUyMTAxLDE2LjEyNzM3MjkgMTUuNjg2MjkxNSwxNy42ODYyOTE1IEMxNC4xMjQxOTQzLDE5LjI0ODM4ODcgMTQuMTIyODk3OSwyMS43Nzk3NTIxIDE1LjY4OTMwMjIsMjMuMzQ2MTU2NCBMMjEuMzQzMTQ1OCwyOSBMMTUuNjg5MzAyMiwzNC42NTM4NDM2IEMxNC4xMjI4OTc5LDM2LjIyMDI0NzkgMTQuMTI0MTk0MywzOC43NTE2MTEzIDE1LjY4NjI5MTUsNDAuMzEzNzA4NSBDMTcuMjQ1MjEwMSw0MS44NzI2MjcxIDE5Ljc4MjM5NjUsNDEuODc0NDU3OCAyMS4zNDYxNTY0LDQwLjMxMDY5NzggTDI3LDM0LjY1Njg1NDIgTDMyLjY1Mzg0MzYsNDAuMzEwNjk3OCBDMzQuMjE3NjAzNSw0MS44NzQ0NTc4IDM2Ljc1NDc4OTksNDEuODcyNjI3MSAzOC4zMTM3MDg1LDQwLjMxMzcwODUgQzM5Ljg3NTgwNTcsMzguNzUxNjExMyAzOS44NzcxMDIxLDM2LjIyMDI0NzkgMzguMzEwNjk3OCwzNC42NTM4NDM2IEwzMi42NTY4NTQyLDI5IFogTTI3LDUzIEM0MS4zNTk0MDM1LDUzIDUzLDQxLjM1OTQwMzUgNTMsMjcgQzUzLDEyLjY0MDU5NjUgNDEuMzU5NDAzNSwxIDI3LDEgQzEyLjY0MDU5NjUsMSAxLDEyLjY0MDU5NjUgMSwyNyBDMSw0MS4zNTk0MDM1IDEyLjY0MDU5NjUsNTMgMjcsNTMgWlxcXCIgaWQ9XFxcIk92YWwtMlxcXCIgc2tldGNoOnR5cGU9XFxcIk1TU2hhcGVHcm91cFxcXCI+PC9wYXRoPlxcbiAgICAgICAgPC9nPlxcbiAgICAgIDwvZz5cXG4gICAgPC9zdmc+XFxuICA8L2Rpdj5cXG48L2Rpdj5cIlxuICAgIH07XG5cbiAgICBleHRlbmQgPSBmdW5jdGlvbigpIHtcbiAgICAgIHZhciBrZXksIG9iamVjdCwgb2JqZWN0cywgdGFyZ2V0LCB2YWwsIF9pLCBfbGVuO1xuICAgICAgdGFyZ2V0ID0gYXJndW1lbnRzWzBdLCBvYmplY3RzID0gMiA8PSBhcmd1bWVudHMubGVuZ3RoID8gX19zbGljZS5jYWxsKGFyZ3VtZW50cywgMSkgOiBbXTtcbiAgICAgIGZvciAoX2kgPSAwLCBfbGVuID0gb2JqZWN0cy5sZW5ndGg7IF9pIDwgX2xlbjsgX2krKykge1xuICAgICAgICBvYmplY3QgPSBvYmplY3RzW19pXTtcbiAgICAgICAgZm9yIChrZXkgaW4gb2JqZWN0KSB7XG4gICAgICAgICAgdmFsID0gb2JqZWN0W2tleV07XG4gICAgICAgICAgdGFyZ2V0W2tleV0gPSB2YWw7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB0YXJnZXQ7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIERyb3B6b25lKGVsZW1lbnQsIG9wdGlvbnMpIHtcbiAgICAgIHZhciBlbGVtZW50T3B0aW9ucywgZmFsbGJhY2ssIF9yZWY7XG4gICAgICB0aGlzLmVsZW1lbnQgPSBlbGVtZW50O1xuICAgICAgdGhpcy52ZXJzaW9uID0gRHJvcHpvbmUudmVyc2lvbjtcbiAgICAgIHRoaXMuZGVmYXVsdE9wdGlvbnMucHJldmlld1RlbXBsYXRlID0gdGhpcy5kZWZhdWx0T3B0aW9ucy5wcmV2aWV3VGVtcGxhdGUucmVwbGFjZSgvXFxuKi9nLCBcIlwiKTtcbiAgICAgIHRoaXMuY2xpY2thYmxlRWxlbWVudHMgPSBbXTtcbiAgICAgIHRoaXMubGlzdGVuZXJzID0gW107XG4gICAgICB0aGlzLmZpbGVzID0gW107XG4gICAgICBpZiAodHlwZW9mIHRoaXMuZWxlbWVudCA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICB0aGlzLmVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHRoaXMuZWxlbWVudCk7XG4gICAgICB9XG4gICAgICBpZiAoISh0aGlzLmVsZW1lbnQgJiYgKHRoaXMuZWxlbWVudC5ub2RlVHlwZSAhPSBudWxsKSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBkcm9wem9uZSBlbGVtZW50LlwiKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmVsZW1lbnQuZHJvcHpvbmUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRHJvcHpvbmUgYWxyZWFkeSBhdHRhY2hlZC5cIik7XG4gICAgICB9XG4gICAgICBEcm9wem9uZS5pbnN0YW5jZXMucHVzaCh0aGlzKTtcbiAgICAgIHRoaXMuZWxlbWVudC5kcm9wem9uZSA9IHRoaXM7XG4gICAgICBlbGVtZW50T3B0aW9ucyA9IChfcmVmID0gRHJvcHpvbmUub3B0aW9uc0ZvckVsZW1lbnQodGhpcy5lbGVtZW50KSkgIT0gbnVsbCA/IF9yZWYgOiB7fTtcbiAgICAgIHRoaXMub3B0aW9ucyA9IGV4dGVuZCh7fSwgdGhpcy5kZWZhdWx0T3B0aW9ucywgZWxlbWVudE9wdGlvbnMsIG9wdGlvbnMgIT0gbnVsbCA/IG9wdGlvbnMgOiB7fSk7XG4gICAgICBpZiAodGhpcy5vcHRpb25zLmZvcmNlRmFsbGJhY2sgfHwgIURyb3B6b25lLmlzQnJvd3NlclN1cHBvcnRlZCgpKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9wdGlvbnMuZmFsbGJhY2suY2FsbCh0aGlzKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLm9wdGlvbnMudXJsID09IG51bGwpIHtcbiAgICAgICAgdGhpcy5vcHRpb25zLnVybCA9IHRoaXMuZWxlbWVudC5nZXRBdHRyaWJ1dGUoXCJhY3Rpb25cIik7XG4gICAgICB9XG4gICAgICBpZiAoIXRoaXMub3B0aW9ucy51cmwpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gVVJMIHByb3ZpZGVkLlwiKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLm9wdGlvbnMuYWNjZXB0ZWRGaWxlcyAmJiB0aGlzLm9wdGlvbnMuYWNjZXB0ZWRNaW1lVHlwZXMpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiWW91IGNhbid0IHByb3ZpZGUgYm90aCAnYWNjZXB0ZWRGaWxlcycgYW5kICdhY2NlcHRlZE1pbWVUeXBlcycuICdhY2NlcHRlZE1pbWVUeXBlcycgaXMgZGVwcmVjYXRlZC5cIik7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5vcHRpb25zLmFjY2VwdGVkTWltZVR5cGVzKSB7XG4gICAgICAgIHRoaXMub3B0aW9ucy5hY2NlcHRlZEZpbGVzID0gdGhpcy5vcHRpb25zLmFjY2VwdGVkTWltZVR5cGVzO1xuICAgICAgICBkZWxldGUgdGhpcy5vcHRpb25zLmFjY2VwdGVkTWltZVR5cGVzO1xuICAgICAgfVxuICAgICAgdGhpcy5vcHRpb25zLm1ldGhvZCA9IHRoaXMub3B0aW9ucy5tZXRob2QudG9VcHBlckNhc2UoKTtcbiAgICAgIGlmICgoZmFsbGJhY2sgPSB0aGlzLmdldEV4aXN0aW5nRmFsbGJhY2soKSkgJiYgZmFsbGJhY2sucGFyZW50Tm9kZSkge1xuICAgICAgICBmYWxsYmFjay5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGZhbGxiYWNrKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLm9wdGlvbnMucHJldmlld3NDb250YWluZXIgIT09IGZhbHNlKSB7XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMucHJldmlld3NDb250YWluZXIpIHtcbiAgICAgICAgICB0aGlzLnByZXZpZXdzQ29udGFpbmVyID0gRHJvcHpvbmUuZ2V0RWxlbWVudCh0aGlzLm9wdGlvbnMucHJldmlld3NDb250YWluZXIsIFwicHJldmlld3NDb250YWluZXJcIik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5wcmV2aWV3c0NvbnRhaW5lciA9IHRoaXMuZWxlbWVudDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHRoaXMub3B0aW9ucy5jbGlja2FibGUpIHtcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5jbGlja2FibGUgPT09IHRydWUpIHtcbiAgICAgICAgICB0aGlzLmNsaWNrYWJsZUVsZW1lbnRzID0gW3RoaXMuZWxlbWVudF07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5jbGlja2FibGVFbGVtZW50cyA9IERyb3B6b25lLmdldEVsZW1lbnRzKHRoaXMub3B0aW9ucy5jbGlja2FibGUsIFwiY2xpY2thYmxlXCIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aGlzLmluaXQoKTtcbiAgICB9XG5cbiAgICBEcm9wem9uZS5wcm90b3R5cGUuZ2V0QWNjZXB0ZWRGaWxlcyA9IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIGZpbGUsIF9pLCBfbGVuLCBfcmVmLCBfcmVzdWx0cztcbiAgICAgIF9yZWYgPSB0aGlzLmZpbGVzO1xuICAgICAgX3Jlc3VsdHMgPSBbXTtcbiAgICAgIGZvciAoX2kgPSAwLCBfbGVuID0gX3JlZi5sZW5ndGg7IF9pIDwgX2xlbjsgX2krKykge1xuICAgICAgICBmaWxlID0gX3JlZltfaV07XG4gICAgICAgIGlmIChmaWxlLmFjY2VwdGVkKSB7XG4gICAgICAgICAgX3Jlc3VsdHMucHVzaChmaWxlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIF9yZXN1bHRzO1xuICAgIH07XG5cbiAgICBEcm9wem9uZS5wcm90b3R5cGUuZ2V0UmVqZWN0ZWRGaWxlcyA9IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIGZpbGUsIF9pLCBfbGVuLCBfcmVmLCBfcmVzdWx0cztcbiAgICAgIF9yZWYgPSB0aGlzLmZpbGVzO1xuICAgICAgX3Jlc3VsdHMgPSBbXTtcbiAgICAgIGZvciAoX2kgPSAwLCBfbGVuID0gX3JlZi5sZW5ndGg7IF9pIDwgX2xlbjsgX2krKykge1xuICAgICAgICBmaWxlID0gX3JlZltfaV07XG4gICAgICAgIGlmICghZmlsZS5hY2NlcHRlZCkge1xuICAgICAgICAgIF9yZXN1bHRzLnB1c2goZmlsZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBfcmVzdWx0cztcbiAgICB9O1xuXG4gICAgRHJvcHpvbmUucHJvdG90eXBlLmdldEZpbGVzV2l0aFN0YXR1cyA9IGZ1bmN0aW9uKHN0YXR1cykge1xuICAgICAgdmFyIGZpbGUsIF9pLCBfbGVuLCBfcmVmLCBfcmVzdWx0cztcbiAgICAgIF9yZWYgPSB0aGlzLmZpbGVzO1xuICAgICAgX3Jlc3VsdHMgPSBbXTtcbiAgICAgIGZvciAoX2kgPSAwLCBfbGVuID0gX3JlZi5sZW5ndGg7IF9pIDwgX2xlbjsgX2krKykge1xuICAgICAgICBmaWxlID0gX3JlZltfaV07XG4gICAgICAgIGlmIChmaWxlLnN0YXR1cyA9PT0gc3RhdHVzKSB7XG4gICAgICAgICAgX3Jlc3VsdHMucHVzaChmaWxlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIF9yZXN1bHRzO1xuICAgIH07XG5cbiAgICBEcm9wem9uZS5wcm90b3R5cGUuZ2V0UXVldWVkRmlsZXMgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldEZpbGVzV2l0aFN0YXR1cyhEcm9wem9uZS5RVUVVRUQpO1xuICAgIH07XG5cbiAgICBEcm9wem9uZS5wcm90b3R5cGUuZ2V0VXBsb2FkaW5nRmlsZXMgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldEZpbGVzV2l0aFN0YXR1cyhEcm9wem9uZS5VUExPQURJTkcpO1xuICAgIH07XG5cbiAgICBEcm9wem9uZS5wcm90b3R5cGUuZ2V0QWRkZWRGaWxlcyA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0RmlsZXNXaXRoU3RhdHVzKERyb3B6b25lLkFEREVEKTtcbiAgICB9O1xuXG4gICAgRHJvcHpvbmUucHJvdG90eXBlLmdldEFjdGl2ZUZpbGVzID0gZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgZmlsZSwgX2ksIF9sZW4sIF9yZWYsIF9yZXN1bHRzO1xuICAgICAgX3JlZiA9IHRoaXMuZmlsZXM7XG4gICAgICBfcmVzdWx0cyA9IFtdO1xuICAgICAgZm9yIChfaSA9IDAsIF9sZW4gPSBfcmVmLmxlbmd0aDsgX2kgPCBfbGVuOyBfaSsrKSB7XG4gICAgICAgIGZpbGUgPSBfcmVmW19pXTtcbiAgICAgICAgaWYgKGZpbGUuc3RhdHVzID09PSBEcm9wem9uZS5VUExPQURJTkcgfHwgZmlsZS5zdGF0dXMgPT09IERyb3B6b25lLlFVRVVFRCkge1xuICAgICAgICAgIF9yZXN1bHRzLnB1c2goZmlsZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBfcmVzdWx0cztcbiAgICB9O1xuXG4gICAgRHJvcHpvbmUucHJvdG90eXBlLmluaXQgPSBmdW5jdGlvbigpIHtcbiAgICAgIHZhciBldmVudE5hbWUsIG5vUHJvcGFnYXRpb24sIHNldHVwSGlkZGVuRmlsZUlucHV0LCBfaSwgX2xlbiwgX3JlZiwgX3JlZjE7XG4gICAgICBpZiAodGhpcy5lbGVtZW50LnRhZ05hbWUgPT09IFwiZm9ybVwiKSB7XG4gICAgICAgIHRoaXMuZWxlbWVudC5zZXRBdHRyaWJ1dGUoXCJlbmN0eXBlXCIsIFwibXVsdGlwYXJ0L2Zvcm0tZGF0YVwiKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKFwiZHJvcHpvbmVcIikgJiYgIXRoaXMuZWxlbWVudC5xdWVyeVNlbGVjdG9yKFwiLmR6LW1lc3NhZ2VcIikpIHtcbiAgICAgICAgdGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKERyb3B6b25lLmNyZWF0ZUVsZW1lbnQoXCI8ZGl2IGNsYXNzPVxcXCJkei1kZWZhdWx0IGR6LW1lc3NhZ2VcXFwiPjxzcGFuPlwiICsgdGhpcy5vcHRpb25zLmRpY3REZWZhdWx0TWVzc2FnZSArIFwiPC9zcGFuPjwvZGl2PlwiKSk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5jbGlja2FibGVFbGVtZW50cy5sZW5ndGgpIHtcbiAgICAgICAgc2V0dXBIaWRkZW5GaWxlSW5wdXQgPSAoZnVuY3Rpb24oX3RoaXMpIHtcbiAgICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBpZiAoX3RoaXMuaGlkZGVuRmlsZUlucHV0KSB7XG4gICAgICAgICAgICAgIF90aGlzLmhpZGRlbkZpbGVJbnB1dC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKF90aGlzLmhpZGRlbkZpbGVJbnB1dCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBfdGhpcy5oaWRkZW5GaWxlSW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIik7XG4gICAgICAgICAgICBfdGhpcy5oaWRkZW5GaWxlSW5wdXQuc2V0QXR0cmlidXRlKFwidHlwZVwiLCBcImZpbGVcIik7XG4gICAgICAgICAgICBpZiAoKF90aGlzLm9wdGlvbnMubWF4RmlsZXMgPT0gbnVsbCkgfHwgX3RoaXMub3B0aW9ucy5tYXhGaWxlcyA+IDEpIHtcbiAgICAgICAgICAgICAgX3RoaXMuaGlkZGVuRmlsZUlucHV0LnNldEF0dHJpYnV0ZShcIm11bHRpcGxlXCIsIFwibXVsdGlwbGVcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBfdGhpcy5oaWRkZW5GaWxlSW5wdXQuY2xhc3NOYW1lID0gXCJkei1oaWRkZW4taW5wdXRcIjtcbiAgICAgICAgICAgIGlmIChfdGhpcy5vcHRpb25zLmFjY2VwdGVkRmlsZXMgIT0gbnVsbCkge1xuICAgICAgICAgICAgICBfdGhpcy5oaWRkZW5GaWxlSW5wdXQuc2V0QXR0cmlidXRlKFwiYWNjZXB0XCIsIF90aGlzLm9wdGlvbnMuYWNjZXB0ZWRGaWxlcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoX3RoaXMub3B0aW9ucy5jYXB0dXJlICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgX3RoaXMuaGlkZGVuRmlsZUlucHV0LnNldEF0dHJpYnV0ZShcImNhcHR1cmVcIiwgX3RoaXMub3B0aW9ucy5jYXB0dXJlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF90aGlzLmhpZGRlbkZpbGVJbnB1dC5zdHlsZS52aXNpYmlsaXR5ID0gXCJoaWRkZW5cIjtcbiAgICAgICAgICAgIF90aGlzLmhpZGRlbkZpbGVJbnB1dC5zdHlsZS5wb3NpdGlvbiA9IFwiYWJzb2x1dGVcIjtcbiAgICAgICAgICAgIF90aGlzLmhpZGRlbkZpbGVJbnB1dC5zdHlsZS50b3AgPSBcIjBcIjtcbiAgICAgICAgICAgICAgX3RoaXMuaGlkZGVuRmlsZUlucHV0LmlkID0gXCJ1cGxvYWRcIjtcbiAgICAgICAgICAgICAgX3RoaXMuaGlkZGVuRmlsZUlucHV0LnN0eWxlLmxlZnQgPSBcIjBcIjtcbiAgICAgICAgICAgIF90aGlzLmhpZGRlbkZpbGVJbnB1dC5zdHlsZS5oZWlnaHQgPSBcIjBcIjtcbiAgICAgICAgICAgIF90aGlzLmhpZGRlbkZpbGVJbnB1dC5zdHlsZS53aWR0aCA9IFwiMFwiO1xuICAgICAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcihfdGhpcy5vcHRpb25zLmhpZGRlbklucHV0Q29udGFpbmVyKS5hcHBlbmRDaGlsZChfdGhpcy5oaWRkZW5GaWxlSW5wdXQpO1xuICAgICAgICAgICAgcmV0dXJuIF90aGlzLmhpZGRlbkZpbGVJbnB1dC5hZGRFdmVudExpc3RlbmVyKFwiY2hhbmdlXCIsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICB2YXIgZmlsZSwgZmlsZXMsIF9pLCBfbGVuO1xuICAgICAgICAgICAgICBmaWxlcyA9IF90aGlzLmhpZGRlbkZpbGVJbnB1dC5maWxlcztcbiAgICAgICAgICAgICAgaWYgKGZpbGVzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIGZvciAoX2kgPSAwLCBfbGVuID0gZmlsZXMubGVuZ3RoOyBfaSA8IF9sZW47IF9pKyspIHtcbiAgICAgICAgICAgICAgICAgIGZpbGUgPSBmaWxlc1tfaV07XG4gICAgICAgICAgICAgICAgICBfdGhpcy5hZGRGaWxlKGZpbGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBfdGhpcy5lbWl0KFwiYWRkZWRmaWxlc1wiLCBmaWxlcyk7XG4gICAgICAgICAgICAgIHJldHVybiBzZXR1cEhpZGRlbkZpbGVJbnB1dCgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfTtcbiAgICAgICAgfSkodGhpcyk7XG4gICAgICAgIHNldHVwSGlkZGVuRmlsZUlucHV0KCk7XG4gICAgICB9XG4gICAgICB0aGlzLlVSTCA9IChfcmVmID0gd2luZG93LlVSTCkgIT0gbnVsbCA/IF9yZWYgOiB3aW5kb3cud2Via2l0VVJMO1xuICAgICAgX3JlZjEgPSB0aGlzLmV2ZW50cztcbiAgICAgIGZvciAoX2kgPSAwLCBfbGVuID0gX3JlZjEubGVuZ3RoOyBfaSA8IF9sZW47IF9pKyspIHtcbiAgICAgICAgZXZlbnROYW1lID0gX3JlZjFbX2ldO1xuICAgICAgICB0aGlzLm9uKGV2ZW50TmFtZSwgdGhpcy5vcHRpb25zW2V2ZW50TmFtZV0pO1xuICAgICAgfVxuICAgICAgdGhpcy5vbihcInVwbG9hZHByb2dyZXNzXCIsIChmdW5jdGlvbihfdGhpcykge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgcmV0dXJuIF90aGlzLnVwZGF0ZVRvdGFsVXBsb2FkUHJvZ3Jlc3MoKTtcbiAgICAgICAgfTtcbiAgICAgIH0pKHRoaXMpKTtcbiAgICAgIHRoaXMub24oXCJyZW1vdmVkZmlsZVwiLCAoZnVuY3Rpb24oX3RoaXMpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgICAgIHJldHVybiBfdGhpcy51cGRhdGVUb3RhbFVwbG9hZFByb2dyZXNzKCk7XG4gICAgICAgIH07XG4gICAgICB9KSh0aGlzKSk7XG4gICAgICB0aGlzLm9uKFwiY2FuY2VsZWRcIiwgKGZ1bmN0aW9uKF90aGlzKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbihmaWxlKSB7XG4gICAgICAgICAgcmV0dXJuIF90aGlzLmVtaXQoXCJjb21wbGV0ZVwiLCBmaWxlKTtcbiAgICAgICAgfTtcbiAgICAgIH0pKHRoaXMpKTtcbiAgICAgIHRoaXMub24oXCJjb21wbGV0ZVwiLCAoZnVuY3Rpb24oX3RoaXMpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKGZpbGUpIHtcbiAgICAgICAgICBpZiAoX3RoaXMuZ2V0QWRkZWRGaWxlcygpLmxlbmd0aCA9PT0gMCAmJiBfdGhpcy5nZXRVcGxvYWRpbmdGaWxlcygpLmxlbmd0aCA9PT0gMCAmJiBfdGhpcy5nZXRRdWV1ZWRGaWxlcygpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIHNldFRpbWVvdXQoKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICByZXR1cm4gX3RoaXMuZW1pdChcInF1ZXVlY29tcGxldGVcIik7XG4gICAgICAgICAgICB9KSwgMCk7XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgfSkodGhpcykpO1xuICAgICAgbm9Qcm9wYWdhdGlvbiA9IGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgaWYgKGUucHJldmVudERlZmF1bHQpIHtcbiAgICAgICAgICByZXR1cm4gZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBlLnJldHVyblZhbHVlID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICB0aGlzLmxpc3RlbmVycyA9IFtcbiAgICAgICAge1xuICAgICAgICAgIGVsZW1lbnQ6IHRoaXMuZWxlbWVudCxcbiAgICAgICAgICBldmVudHM6IHtcbiAgICAgICAgICAgIFwiZHJhZ3N0YXJ0XCI6IChmdW5jdGlvbihfdGhpcykge1xuICAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24oZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBfdGhpcy5lbWl0KFwiZHJhZ3N0YXJ0XCIsIGUpO1xuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSkodGhpcyksXG4gICAgICAgICAgICBcImRyYWdlbnRlclwiOiAoZnVuY3Rpb24oX3RoaXMpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgICAgICBub1Byb3BhZ2F0aW9uKGUpO1xuICAgICAgICAgICAgICAgIHJldHVybiBfdGhpcy5lbWl0KFwiZHJhZ2VudGVyXCIsIGUpO1xuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSkodGhpcyksXG4gICAgICAgICAgICBcImRyYWdvdmVyXCI6IChmdW5jdGlvbihfdGhpcykge1xuICAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24oZSkge1xuICAgICAgICAgICAgICAgIHZhciBlZmN0O1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICBlZmN0ID0gZS5kYXRhVHJhbnNmZXIuZWZmZWN0QWxsb3dlZDtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChfZXJyb3IpIHt9XG4gICAgICAgICAgICAgICAgZS5kYXRhVHJhbnNmZXIuZHJvcEVmZmVjdCA9ICdtb3ZlJyA9PT0gZWZjdCB8fCAnbGlua01vdmUnID09PSBlZmN0ID8gJ21vdmUnIDogJ2NvcHknO1xuICAgICAgICAgICAgICAgIG5vUHJvcGFnYXRpb24oZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIF90aGlzLmVtaXQoXCJkcmFnb3ZlclwiLCBlKTtcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0pKHRoaXMpLFxuICAgICAgICAgICAgXCJkcmFnbGVhdmVcIjogKGZ1bmN0aW9uKF90aGlzKSB7XG4gICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIF90aGlzLmVtaXQoXCJkcmFnbGVhdmVcIiwgZSk7XG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9KSh0aGlzKSxcbiAgICAgICAgICAgIFwiZHJvcFwiOiAoZnVuY3Rpb24oX3RoaXMpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgICAgICBub1Byb3BhZ2F0aW9uKGUpO1xuICAgICAgICAgICAgICAgIHJldHVybiBfdGhpcy5kcm9wKGUpO1xuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSkodGhpcyksXG4gICAgICAgICAgICBcImRyYWdlbmRcIjogKGZ1bmN0aW9uKF90aGlzKSB7XG4gICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIF90aGlzLmVtaXQoXCJkcmFnZW5kXCIsIGUpO1xuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSkodGhpcylcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIF07XG4gICAgICB0aGlzLmNsaWNrYWJsZUVsZW1lbnRzLmZvckVhY2goKGZ1bmN0aW9uKF90aGlzKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbihjbGlja2FibGVFbGVtZW50KSB7XG4gICAgICAgICAgcmV0dXJuIF90aGlzLmxpc3RlbmVycy5wdXNoKHtcbiAgICAgICAgICAgIGVsZW1lbnQ6IGNsaWNrYWJsZUVsZW1lbnQsXG4gICAgICAgICAgICBldmVudHM6IHtcbiAgICAgICAgICAgICAgXCJjbGlja1wiOiBmdW5jdGlvbihldnQpIHtcbiAgICAgICAgICAgICAgICBpZiAoKGNsaWNrYWJsZUVsZW1lbnQgIT09IF90aGlzLmVsZW1lbnQpIHx8IChldnQudGFyZ2V0ID09PSBfdGhpcy5lbGVtZW50IHx8IERyb3B6b25lLmVsZW1lbnRJbnNpZGUoZXZ0LnRhcmdldCwgX3RoaXMuZWxlbWVudC5xdWVyeVNlbGVjdG9yKFwiLmR6LW1lc3NhZ2VcIikpKSkge1xuICAgICAgICAgICAgICAgICAgX3RoaXMuaGlkZGVuRmlsZUlucHV0LmNsaWNrKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH07XG4gICAgICB9KSh0aGlzKSk7XG4gICAgICB0aGlzLmVuYWJsZSgpO1xuICAgICAgcmV0dXJuIHRoaXMub3B0aW9ucy5pbml0LmNhbGwodGhpcyk7XG4gICAgfTtcblxuICAgIERyb3B6b25lLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgX3JlZjtcbiAgICAgIHRoaXMuZGlzYWJsZSgpO1xuICAgICAgdGhpcy5yZW1vdmVBbGxGaWxlcyh0cnVlKTtcbiAgICAgIGlmICgoX3JlZiA9IHRoaXMuaGlkZGVuRmlsZUlucHV0KSAhPSBudWxsID8gX3JlZi5wYXJlbnROb2RlIDogdm9pZCAwKSB7XG4gICAgICAgIHRoaXMuaGlkZGVuRmlsZUlucHV0LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5oaWRkZW5GaWxlSW5wdXQpO1xuICAgICAgICB0aGlzLmhpZGRlbkZpbGVJbnB1dCA9IG51bGw7XG4gICAgICB9XG4gICAgICBkZWxldGUgdGhpcy5lbGVtZW50LmRyb3B6b25lO1xuICAgICAgcmV0dXJuIERyb3B6b25lLmluc3RhbmNlcy5zcGxpY2UoRHJvcHpvbmUuaW5zdGFuY2VzLmluZGV4T2YodGhpcyksIDEpO1xuICAgIH07XG5cbiAgICBEcm9wem9uZS5wcm90b3R5cGUudXBkYXRlVG90YWxVcGxvYWRQcm9ncmVzcyA9IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIGFjdGl2ZUZpbGVzLCBmaWxlLCB0b3RhbEJ5dGVzLCB0b3RhbEJ5dGVzU2VudCwgdG90YWxVcGxvYWRQcm9ncmVzcywgX2ksIF9sZW4sIF9yZWY7XG4gICAgICB0b3RhbEJ5dGVzU2VudCA9IDA7XG4gICAgICB0b3RhbEJ5dGVzID0gMDtcbiAgICAgIGFjdGl2ZUZpbGVzID0gdGhpcy5nZXRBY3RpdmVGaWxlcygpO1xuICAgICAgaWYgKGFjdGl2ZUZpbGVzLmxlbmd0aCkge1xuICAgICAgICBfcmVmID0gdGhpcy5nZXRBY3RpdmVGaWxlcygpO1xuICAgICAgICBmb3IgKF9pID0gMCwgX2xlbiA9IF9yZWYubGVuZ3RoOyBfaSA8IF9sZW47IF9pKyspIHtcbiAgICAgICAgICBmaWxlID0gX3JlZltfaV07XG4gICAgICAgICAgdG90YWxCeXRlc1NlbnQgKz0gZmlsZS51cGxvYWQuYnl0ZXNTZW50O1xuICAgICAgICAgIHRvdGFsQnl0ZXMgKz0gZmlsZS51cGxvYWQudG90YWw7XG4gICAgICAgIH1cbiAgICAgICAgdG90YWxVcGxvYWRQcm9ncmVzcyA9IDEwMCAqIHRvdGFsQnl0ZXNTZW50IC8gdG90YWxCeXRlcztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRvdGFsVXBsb2FkUHJvZ3Jlc3MgPSAxMDA7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5lbWl0KFwidG90YWx1cGxvYWRwcm9ncmVzc1wiLCB0b3RhbFVwbG9hZFByb2dyZXNzLCB0b3RhbEJ5dGVzLCB0b3RhbEJ5dGVzU2VudCk7XG4gICAgfTtcblxuICAgIERyb3B6b25lLnByb3RvdHlwZS5fZ2V0UGFyYW1OYW1lID0gZnVuY3Rpb24obikge1xuICAgICAgaWYgKHR5cGVvZiB0aGlzLm9wdGlvbnMucGFyYW1OYW1lID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3B0aW9ucy5wYXJhbU5hbWUobik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gXCJcIiArIHRoaXMub3B0aW9ucy5wYXJhbU5hbWUgKyAodGhpcy5vcHRpb25zLnVwbG9hZE11bHRpcGxlID8gXCJbXCIgKyBuICsgXCJdXCIgOiBcIlwiKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgRHJvcHpvbmUucHJvdG90eXBlLmdldEZhbGxiYWNrRm9ybSA9IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIGV4aXN0aW5nRmFsbGJhY2ssIGZpZWxkcywgZmllbGRzU3RyaW5nLCBmb3JtO1xuICAgICAgaWYgKGV4aXN0aW5nRmFsbGJhY2sgPSB0aGlzLmdldEV4aXN0aW5nRmFsbGJhY2soKSkge1xuICAgICAgICByZXR1cm4gZXhpc3RpbmdGYWxsYmFjaztcbiAgICAgIH1cbiAgICAgIGZpZWxkc1N0cmluZyA9IFwiPGRpdiBjbGFzcz1cXFwiZHotZmFsbGJhY2tcXFwiPlwiO1xuICAgICAgaWYgKHRoaXMub3B0aW9ucy5kaWN0RmFsbGJhY2tUZXh0KSB7XG4gICAgICAgIGZpZWxkc1N0cmluZyArPSBcIjxwPlwiICsgdGhpcy5vcHRpb25zLmRpY3RGYWxsYmFja1RleHQgKyBcIjwvcD5cIjtcbiAgICAgIH1cbiAgICAgIGZpZWxkc1N0cmluZyArPSBcIjxpbnB1dCB0eXBlPVxcXCJmaWxlXFxcIiBuYW1lPVxcXCJcIiArICh0aGlzLl9nZXRQYXJhbU5hbWUoMCkpICsgXCJcXFwiIFwiICsgKHRoaXMub3B0aW9ucy51cGxvYWRNdWx0aXBsZSA/ICdtdWx0aXBsZT1cIm11bHRpcGxlXCInIDogdm9pZCAwKSArIFwiIC8+PGlucHV0IHR5cGU9XFxcInN1Ym1pdFxcXCIgdmFsdWU9XFxcIlVwbG9hZCFcXFwiPjwvZGl2PlwiO1xuICAgICAgZmllbGRzID0gRHJvcHpvbmUuY3JlYXRlRWxlbWVudChmaWVsZHNTdHJpbmcpO1xuICAgICAgaWYgKHRoaXMuZWxlbWVudC50YWdOYW1lICE9PSBcIkZPUk1cIikge1xuICAgICAgICBmb3JtID0gRHJvcHpvbmUuY3JlYXRlRWxlbWVudChcIjxmb3JtIGFjdGlvbj1cXFwiXCIgKyB0aGlzLm9wdGlvbnMudXJsICsgXCJcXFwiIGVuY3R5cGU9XFxcIm11bHRpcGFydC9mb3JtLWRhdGFcXFwiIG1ldGhvZD1cXFwiXCIgKyB0aGlzLm9wdGlvbnMubWV0aG9kICsgXCJcXFwiPjwvZm9ybT5cIik7XG4gICAgICAgIGZvcm0uYXBwZW5kQ2hpbGQoZmllbGRzKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZWxlbWVudC5zZXRBdHRyaWJ1dGUoXCJlbmN0eXBlXCIsIFwibXVsdGlwYXJ0L2Zvcm0tZGF0YVwiKTtcbiAgICAgICAgdGhpcy5lbGVtZW50LnNldEF0dHJpYnV0ZShcIm1ldGhvZFwiLCB0aGlzLm9wdGlvbnMubWV0aG9kKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBmb3JtICE9IG51bGwgPyBmb3JtIDogZmllbGRzO1xuICAgIH07XG5cbiAgICBEcm9wem9uZS5wcm90b3R5cGUuZ2V0RXhpc3RpbmdGYWxsYmFjayA9IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIGZhbGxiYWNrLCBnZXRGYWxsYmFjaywgdGFnTmFtZSwgX2ksIF9sZW4sIF9yZWY7XG4gICAgICBnZXRGYWxsYmFjayA9IGZ1bmN0aW9uKGVsZW1lbnRzKSB7XG4gICAgICAgIHZhciBlbCwgX2ksIF9sZW47XG4gICAgICAgIGZvciAoX2kgPSAwLCBfbGVuID0gZWxlbWVudHMubGVuZ3RoOyBfaSA8IF9sZW47IF9pKyspIHtcbiAgICAgICAgICBlbCA9IGVsZW1lbnRzW19pXTtcbiAgICAgICAgICBpZiAoLyhefCApZmFsbGJhY2soJHwgKS8udGVzdChlbC5jbGFzc05hbWUpKSB7XG4gICAgICAgICAgICByZXR1cm4gZWw7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgX3JlZiA9IFtcImRpdlwiLCBcImZvcm1cIl07XG4gICAgICBmb3IgKF9pID0gMCwgX2xlbiA9IF9yZWYubGVuZ3RoOyBfaSA8IF9sZW47IF9pKyspIHtcbiAgICAgICAgdGFnTmFtZSA9IF9yZWZbX2ldO1xuICAgICAgICBpZiAoZmFsbGJhY2sgPSBnZXRGYWxsYmFjayh0aGlzLmVsZW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUodGFnTmFtZSkpKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbGxiYWNrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcblxuICAgIERyb3B6b25lLnByb3RvdHlwZS5zZXR1cEV2ZW50TGlzdGVuZXJzID0gZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgZWxlbWVudExpc3RlbmVycywgZXZlbnQsIGxpc3RlbmVyLCBfaSwgX2xlbiwgX3JlZiwgX3Jlc3VsdHM7XG4gICAgICBfcmVmID0gdGhpcy5saXN0ZW5lcnM7XG4gICAgICBfcmVzdWx0cyA9IFtdO1xuICAgICAgZm9yIChfaSA9IDAsIF9sZW4gPSBfcmVmLmxlbmd0aDsgX2kgPCBfbGVuOyBfaSsrKSB7XG4gICAgICAgIGVsZW1lbnRMaXN0ZW5lcnMgPSBfcmVmW19pXTtcbiAgICAgICAgX3Jlc3VsdHMucHVzaCgoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgdmFyIF9yZWYxLCBfcmVzdWx0czE7XG4gICAgICAgICAgX3JlZjEgPSBlbGVtZW50TGlzdGVuZXJzLmV2ZW50cztcbiAgICAgICAgICBfcmVzdWx0czEgPSBbXTtcbiAgICAgICAgICBmb3IgKGV2ZW50IGluIF9yZWYxKSB7XG4gICAgICAgICAgICBsaXN0ZW5lciA9IF9yZWYxW2V2ZW50XTtcbiAgICAgICAgICAgIF9yZXN1bHRzMS5wdXNoKGVsZW1lbnRMaXN0ZW5lcnMuZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKGV2ZW50LCBsaXN0ZW5lciwgZmFsc2UpKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIF9yZXN1bHRzMTtcbiAgICAgICAgfSkoKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gX3Jlc3VsdHM7XG4gICAgfTtcblxuICAgIERyb3B6b25lLnByb3RvdHlwZS5yZW1vdmVFdmVudExpc3RlbmVycyA9IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIGVsZW1lbnRMaXN0ZW5lcnMsIGV2ZW50LCBsaXN0ZW5lciwgX2ksIF9sZW4sIF9yZWYsIF9yZXN1bHRzO1xuICAgICAgX3JlZiA9IHRoaXMubGlzdGVuZXJzO1xuICAgICAgX3Jlc3VsdHMgPSBbXTtcbiAgICAgIGZvciAoX2kgPSAwLCBfbGVuID0gX3JlZi5sZW5ndGg7IF9pIDwgX2xlbjsgX2krKykge1xuICAgICAgICBlbGVtZW50TGlzdGVuZXJzID0gX3JlZltfaV07XG4gICAgICAgIF9yZXN1bHRzLnB1c2goKGZ1bmN0aW9uKCkge1xuICAgICAgICAgIHZhciBfcmVmMSwgX3Jlc3VsdHMxO1xuICAgICAgICAgIF9yZWYxID0gZWxlbWVudExpc3RlbmVycy5ldmVudHM7XG4gICAgICAgICAgX3Jlc3VsdHMxID0gW107XG4gICAgICAgICAgZm9yIChldmVudCBpbiBfcmVmMSkge1xuICAgICAgICAgICAgbGlzdGVuZXIgPSBfcmVmMVtldmVudF07XG4gICAgICAgICAgICBfcmVzdWx0czEucHVzaChlbGVtZW50TGlzdGVuZXJzLmVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudCwgbGlzdGVuZXIsIGZhbHNlKSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBfcmVzdWx0czE7XG4gICAgICAgIH0pKCkpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIF9yZXN1bHRzO1xuICAgIH07XG5cbiAgICBEcm9wem9uZS5wcm90b3R5cGUuZGlzYWJsZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIGZpbGUsIF9pLCBfbGVuLCBfcmVmLCBfcmVzdWx0cztcbiAgICAgIHRoaXMuY2xpY2thYmxlRWxlbWVudHMuZm9yRWFjaChmdW5jdGlvbihlbGVtZW50KSB7XG4gICAgICAgIHJldHVybiBlbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoXCJkei1jbGlja2FibGVcIik7XG4gICAgICB9KTtcbiAgICAgIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcnMoKTtcbiAgICAgIF9yZWYgPSB0aGlzLmZpbGVzO1xuICAgICAgX3Jlc3VsdHMgPSBbXTtcbiAgICAgIGZvciAoX2kgPSAwLCBfbGVuID0gX3JlZi5sZW5ndGg7IF9pIDwgX2xlbjsgX2krKykge1xuICAgICAgICBmaWxlID0gX3JlZltfaV07XG4gICAgICAgIF9yZXN1bHRzLnB1c2godGhpcy5jYW5jZWxVcGxvYWQoZmlsZSkpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIF9yZXN1bHRzO1xuICAgIH07XG5cbiAgICBEcm9wem9uZS5wcm90b3R5cGUuZW5hYmxlID0gZnVuY3Rpb24oKSB7XG4gICAgICB0aGlzLmNsaWNrYWJsZUVsZW1lbnRzLmZvckVhY2goZnVuY3Rpb24oZWxlbWVudCkge1xuICAgICAgICByZXR1cm4gZWxlbWVudC5jbGFzc0xpc3QuYWRkKFwiZHotY2xpY2thYmxlXCIpO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gdGhpcy5zZXR1cEV2ZW50TGlzdGVuZXJzKCk7XG4gICAgfTtcblxuICAgIERyb3B6b25lLnByb3RvdHlwZS5maWxlc2l6ZSA9IGZ1bmN0aW9uKHNpemUpIHtcbiAgICAgIHZhciBjdXRvZmYsIGksIHNlbGVjdGVkU2l6ZSwgc2VsZWN0ZWRVbml0LCB1bml0LCB1bml0cywgX2ksIF9sZW47XG4gICAgICBzZWxlY3RlZFNpemUgPSAwO1xuICAgICAgc2VsZWN0ZWRVbml0ID0gXCJiXCI7XG4gICAgICBpZiAoc2l6ZSA+IDApIHtcbiAgICAgICAgdW5pdHMgPSBbJ1RCJywgJ0dCJywgJ01CJywgJ0tCJywgJ2InXTtcbiAgICAgICAgZm9yIChpID0gX2kgPSAwLCBfbGVuID0gdW5pdHMubGVuZ3RoOyBfaSA8IF9sZW47IGkgPSArK19pKSB7XG4gICAgICAgICAgdW5pdCA9IHVuaXRzW2ldO1xuICAgICAgICAgIGN1dG9mZiA9IE1hdGgucG93KHRoaXMub3B0aW9ucy5maWxlc2l6ZUJhc2UsIDQgLSBpKSAvIDEwO1xuICAgICAgICAgIGlmIChzaXplID49IGN1dG9mZikge1xuICAgICAgICAgICAgc2VsZWN0ZWRTaXplID0gc2l6ZSAvIE1hdGgucG93KHRoaXMub3B0aW9ucy5maWxlc2l6ZUJhc2UsIDQgLSBpKTtcbiAgICAgICAgICAgIHNlbGVjdGVkVW5pdCA9IHVuaXQ7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgc2VsZWN0ZWRTaXplID0gTWF0aC5yb3VuZCgxMCAqIHNlbGVjdGVkU2l6ZSkgLyAxMDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBcIjxzdHJvbmc+XCIgKyBzZWxlY3RlZFNpemUgKyBcIjwvc3Ryb25nPiBcIiArIHNlbGVjdGVkVW5pdDtcbiAgICB9O1xuXG4gICAgRHJvcHpvbmUucHJvdG90eXBlLl91cGRhdGVNYXhGaWxlc1JlYWNoZWRDbGFzcyA9IGZ1bmN0aW9uKCkge1xuICAgICAgaWYgKCh0aGlzLm9wdGlvbnMubWF4RmlsZXMgIT0gbnVsbCkgJiYgdGhpcy5nZXRBY2NlcHRlZEZpbGVzKCkubGVuZ3RoID49IHRoaXMub3B0aW9ucy5tYXhGaWxlcykge1xuICAgICAgICBpZiAodGhpcy5nZXRBY2NlcHRlZEZpbGVzKCkubGVuZ3RoID09PSB0aGlzLm9wdGlvbnMubWF4RmlsZXMpIHtcbiAgICAgICAgICB0aGlzLmVtaXQoJ21heGZpbGVzcmVhY2hlZCcsIHRoaXMuZmlsZXMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmVsZW1lbnQuY2xhc3NMaXN0LmFkZChcImR6LW1heC1maWxlcy1yZWFjaGVkXCIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKFwiZHotbWF4LWZpbGVzLXJlYWNoZWRcIik7XG4gICAgICB9XG4gICAgfTtcblxuICAgIERyb3B6b25lLnByb3RvdHlwZS5kcm9wID0gZnVuY3Rpb24oZSkge1xuICAgICAgdmFyIGZpbGVzLCBpdGVtcztcbiAgICAgIGlmICghZS5kYXRhVHJhbnNmZXIpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5lbWl0KFwiZHJvcFwiLCBlKTtcbiAgICAgIGZpbGVzID0gZS5kYXRhVHJhbnNmZXIuZmlsZXM7XG4gICAgICB0aGlzLmVtaXQoXCJhZGRlZGZpbGVzXCIsIGZpbGVzKTtcbiAgICAgIGlmIChmaWxlcy5sZW5ndGgpIHtcbiAgICAgICAgaXRlbXMgPSBlLmRhdGFUcmFuc2Zlci5pdGVtcztcbiAgICAgICAgaWYgKGl0ZW1zICYmIGl0ZW1zLmxlbmd0aCAmJiAoaXRlbXNbMF0ud2Via2l0R2V0QXNFbnRyeSAhPSBudWxsKSkge1xuICAgICAgICAgIHRoaXMuX2FkZEZpbGVzRnJvbUl0ZW1zKGl0ZW1zKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmhhbmRsZUZpbGVzKGZpbGVzKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG5cbiAgICBEcm9wem9uZS5wcm90b3R5cGUucGFzdGUgPSBmdW5jdGlvbihlKSB7XG4gICAgICB2YXIgaXRlbXMsIF9yZWY7XG4gICAgICBpZiAoKGUgIT0gbnVsbCA/IChfcmVmID0gZS5jbGlwYm9hcmREYXRhKSAhPSBudWxsID8gX3JlZi5pdGVtcyA6IHZvaWQgMCA6IHZvaWQgMCkgPT0gbnVsbCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aGlzLmVtaXQoXCJwYXN0ZVwiLCBlKTtcbiAgICAgIGl0ZW1zID0gZS5jbGlwYm9hcmREYXRhLml0ZW1zO1xuICAgICAgaWYgKGl0ZW1zLmxlbmd0aCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYWRkRmlsZXNGcm9tSXRlbXMoaXRlbXMpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBEcm9wem9uZS5wcm90b3R5cGUuaGFuZGxlRmlsZXMgPSBmdW5jdGlvbihmaWxlcykge1xuICAgICAgdmFyIGZpbGUsIF9pLCBfbGVuLCBfcmVzdWx0cztcbiAgICAgIF9yZXN1bHRzID0gW107XG4gICAgICBmb3IgKF9pID0gMCwgX2xlbiA9IGZpbGVzLmxlbmd0aDsgX2kgPCBfbGVuOyBfaSsrKSB7XG4gICAgICAgIGZpbGUgPSBmaWxlc1tfaV07XG4gICAgICAgIF9yZXN1bHRzLnB1c2godGhpcy5hZGRGaWxlKGZpbGUpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBfcmVzdWx0cztcbiAgICB9O1xuXG4gICAgRHJvcHpvbmUucHJvdG90eXBlLl9hZGRGaWxlc0Zyb21JdGVtcyA9IGZ1bmN0aW9uKGl0ZW1zKSB7XG4gICAgICB2YXIgZW50cnksIGl0ZW0sIF9pLCBfbGVuLCBfcmVzdWx0cztcbiAgICAgIF9yZXN1bHRzID0gW107XG4gICAgICBmb3IgKF9pID0gMCwgX2xlbiA9IGl0ZW1zLmxlbmd0aDsgX2kgPCBfbGVuOyBfaSsrKSB7XG4gICAgICAgIGl0ZW0gPSBpdGVtc1tfaV07XG4gICAgICAgIGlmICgoaXRlbS53ZWJraXRHZXRBc0VudHJ5ICE9IG51bGwpICYmIChlbnRyeSA9IGl0ZW0ud2Via2l0R2V0QXNFbnRyeSgpKSkge1xuICAgICAgICAgIGlmIChlbnRyeS5pc0ZpbGUpIHtcbiAgICAgICAgICAgIF9yZXN1bHRzLnB1c2godGhpcy5hZGRGaWxlKGl0ZW0uZ2V0QXNGaWxlKCkpKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGVudHJ5LmlzRGlyZWN0b3J5KSB7XG4gICAgICAgICAgICBfcmVzdWx0cy5wdXNoKHRoaXMuX2FkZEZpbGVzRnJvbURpcmVjdG9yeShlbnRyeSwgZW50cnkubmFtZSkpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBfcmVzdWx0cy5wdXNoKHZvaWQgMCk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGl0ZW0uZ2V0QXNGaWxlICE9IG51bGwpIHtcbiAgICAgICAgICBpZiAoKGl0ZW0ua2luZCA9PSBudWxsKSB8fCBpdGVtLmtpbmQgPT09IFwiZmlsZVwiKSB7XG4gICAgICAgICAgICBfcmVzdWx0cy5wdXNoKHRoaXMuYWRkRmlsZShpdGVtLmdldEFzRmlsZSgpKSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIF9yZXN1bHRzLnB1c2godm9pZCAwKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgX3Jlc3VsdHMucHVzaCh2b2lkIDApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gX3Jlc3VsdHM7XG4gICAgfTtcblxuICAgIERyb3B6b25lLnByb3RvdHlwZS5fYWRkRmlsZXNGcm9tRGlyZWN0b3J5ID0gZnVuY3Rpb24oZGlyZWN0b3J5LCBwYXRoKSB7XG4gICAgICB2YXIgZGlyUmVhZGVyLCBlbnRyaWVzUmVhZGVyO1xuICAgICAgZGlyUmVhZGVyID0gZGlyZWN0b3J5LmNyZWF0ZVJlYWRlcigpO1xuICAgICAgZW50cmllc1JlYWRlciA9IChmdW5jdGlvbihfdGhpcykge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24oZW50cmllcykge1xuICAgICAgICAgIHZhciBlbnRyeSwgX2ksIF9sZW47XG4gICAgICAgICAgZm9yIChfaSA9IDAsIF9sZW4gPSBlbnRyaWVzLmxlbmd0aDsgX2kgPCBfbGVuOyBfaSsrKSB7XG4gICAgICAgICAgICBlbnRyeSA9IGVudHJpZXNbX2ldO1xuICAgICAgICAgICAgaWYgKGVudHJ5LmlzRmlsZSkge1xuICAgICAgICAgICAgICBlbnRyeS5maWxlKGZ1bmN0aW9uKGZpbGUpIHtcbiAgICAgICAgICAgICAgICBpZiAoX3RoaXMub3B0aW9ucy5pZ25vcmVIaWRkZW5GaWxlcyAmJiBmaWxlLm5hbWUuc3Vic3RyaW5nKDAsIDEpID09PSAnLicpIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZmlsZS5mdWxsUGF0aCA9IFwiXCIgKyBwYXRoICsgXCIvXCIgKyBmaWxlLm5hbWU7XG4gICAgICAgICAgICAgICAgcmV0dXJuIF90aGlzLmFkZEZpbGUoZmlsZSk7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChlbnRyeS5pc0RpcmVjdG9yeSkge1xuICAgICAgICAgICAgICBfdGhpcy5fYWRkRmlsZXNGcm9tRGlyZWN0b3J5KGVudHJ5LCBcIlwiICsgcGF0aCArIFwiL1wiICsgZW50cnkubmFtZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgfSkodGhpcyk7XG4gICAgICByZXR1cm4gZGlyUmVhZGVyLnJlYWRFbnRyaWVzKGVudHJpZXNSZWFkZXIsIGZ1bmN0aW9uKGVycm9yKSB7XG4gICAgICAgIHJldHVybiB0eXBlb2YgY29uc29sZSAhPT0gXCJ1bmRlZmluZWRcIiAmJiBjb25zb2xlICE9PSBudWxsID8gdHlwZW9mIGNvbnNvbGUubG9nID09PSBcImZ1bmN0aW9uXCIgPyBjb25zb2xlLmxvZyhlcnJvcikgOiB2b2lkIDAgOiB2b2lkIDA7XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgRHJvcHpvbmUucHJvdG90eXBlLmFjY2VwdCA9IGZ1bmN0aW9uKGZpbGUsIGRvbmUpIHtcbiAgICAgIGlmIChmaWxlLnNpemUgPiB0aGlzLm9wdGlvbnMubWF4RmlsZXNpemUgKiAxMDI0ICogMTAyNCkge1xuICAgICAgICByZXR1cm4gZG9uZSh0aGlzLm9wdGlvbnMuZGljdEZpbGVUb29CaWcucmVwbGFjZShcInt7ZmlsZXNpemV9fVwiLCBNYXRoLnJvdW5kKGZpbGUuc2l6ZSAvIDEwMjQgLyAxMC4yNCkgLyAxMDApLnJlcGxhY2UoXCJ7e21heEZpbGVzaXplfX1cIiwgdGhpcy5vcHRpb25zLm1heEZpbGVzaXplKSk7XG4gICAgICB9IGVsc2UgaWYgKCFEcm9wem9uZS5pc1ZhbGlkRmlsZShmaWxlLCB0aGlzLm9wdGlvbnMuYWNjZXB0ZWRGaWxlcykpIHtcbiAgICAgICAgcmV0dXJuIGRvbmUodGhpcy5vcHRpb25zLmRpY3RJbnZhbGlkRmlsZVR5cGUpO1xuICAgICAgfSBlbHNlIGlmICgodGhpcy5vcHRpb25zLm1heEZpbGVzICE9IG51bGwpICYmIHRoaXMuZ2V0QWNjZXB0ZWRGaWxlcygpLmxlbmd0aCA+PSB0aGlzLm9wdGlvbnMubWF4RmlsZXMpIHtcbiAgICAgICAgZG9uZSh0aGlzLm9wdGlvbnMuZGljdE1heEZpbGVzRXhjZWVkZWQucmVwbGFjZShcInt7bWF4RmlsZXN9fVwiLCB0aGlzLm9wdGlvbnMubWF4RmlsZXMpKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuZW1pdChcIm1heGZpbGVzZXhjZWVkZWRcIiwgZmlsZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5vcHRpb25zLmFjY2VwdC5jYWxsKHRoaXMsIGZpbGUsIGRvbmUpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBEcm9wem9uZS5wcm90b3R5cGUuYWRkRmlsZSA9IGZ1bmN0aW9uKGZpbGUpIHtcbiAgICAgIGZpbGUudXBsb2FkID0ge1xuICAgICAgICBwcm9ncmVzczogMCxcbiAgICAgICAgdG90YWw6IGZpbGUuc2l6ZSxcbiAgICAgICAgYnl0ZXNTZW50OiAwXG4gICAgICB9O1xuICAgICAgdGhpcy5maWxlcy5wdXNoKGZpbGUpO1xuICAgICAgZmlsZS5zdGF0dXMgPSBEcm9wem9uZS5BRERFRDtcbiAgICAgIHRoaXMuZW1pdChcImFkZGVkZmlsZVwiLCBmaWxlKTtcbiAgICAgIHRoaXMuX2VucXVldWVUaHVtYm5haWwoZmlsZSk7XG4gICAgICByZXR1cm4gdGhpcy5hY2NlcHQoZmlsZSwgKGZ1bmN0aW9uKF90aGlzKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbihlcnJvcikge1xuICAgICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgICAgZmlsZS5hY2NlcHRlZCA9IGZhbHNlO1xuICAgICAgICAgICAgX3RoaXMuX2Vycm9yUHJvY2Vzc2luZyhbZmlsZV0sIGVycm9yKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZmlsZS5hY2NlcHRlZCA9IHRydWU7XG4gICAgICAgICAgICBpZiAoX3RoaXMub3B0aW9ucy5hdXRvUXVldWUpIHtcbiAgICAgICAgICAgICAgX3RoaXMuZW5xdWV1ZUZpbGUoZmlsZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBfdGhpcy5fdXBkYXRlTWF4RmlsZXNSZWFjaGVkQ2xhc3MoKTtcbiAgICAgICAgfTtcbiAgICAgIH0pKHRoaXMpKTtcbiAgICB9O1xuXG4gICAgRHJvcHpvbmUucHJvdG90eXBlLmVucXVldWVGaWxlcyA9IGZ1bmN0aW9uKGZpbGVzKSB7XG4gICAgICB2YXIgZmlsZSwgX2ksIF9sZW47XG4gICAgICBmb3IgKF9pID0gMCwgX2xlbiA9IGZpbGVzLmxlbmd0aDsgX2kgPCBfbGVuOyBfaSsrKSB7XG4gICAgICAgIGZpbGUgPSBmaWxlc1tfaV07XG4gICAgICAgIHRoaXMuZW5xdWV1ZUZpbGUoZmlsZSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9O1xuXG4gICAgRHJvcHpvbmUucHJvdG90eXBlLmVucXVldWVGaWxlID0gZnVuY3Rpb24oZmlsZSkge1xuICAgICAgaWYgKGZpbGUuc3RhdHVzID09PSBEcm9wem9uZS5BRERFRCAmJiBmaWxlLmFjY2VwdGVkID09PSB0cnVlKSB7XG4gICAgICAgIGZpbGUuc3RhdHVzID0gRHJvcHpvbmUuUVVFVUVEO1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmF1dG9Qcm9jZXNzUXVldWUpIHtcbiAgICAgICAgICByZXR1cm4gc2V0VGltZW91dCgoKGZ1bmN0aW9uKF90aGlzKSB7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgIHJldHVybiBfdGhpcy5wcm9jZXNzUXVldWUoKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfSkodGhpcykpLCAwKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhpcyBmaWxlIGNhbid0IGJlIHF1ZXVlZCBiZWNhdXNlIGl0IGhhcyBhbHJlYWR5IGJlZW4gcHJvY2Vzc2VkIG9yIHdhcyByZWplY3RlZC5cIik7XG4gICAgICB9XG4gICAgfTtcblxuICAgIERyb3B6b25lLnByb3RvdHlwZS5fdGh1bWJuYWlsUXVldWUgPSBbXTtcblxuICAgIERyb3B6b25lLnByb3RvdHlwZS5fcHJvY2Vzc2luZ1RodW1ibmFpbCA9IGZhbHNlO1xuXG4gICAgRHJvcHpvbmUucHJvdG90eXBlLl9lbnF1ZXVlVGh1bWJuYWlsID0gZnVuY3Rpb24oZmlsZSkge1xuICAgICAgaWYgKHRoaXMub3B0aW9ucy5jcmVhdGVJbWFnZVRodW1ibmFpbHMgJiYgZmlsZS50eXBlLm1hdGNoKC9pbWFnZS4qLykgJiYgZmlsZS5zaXplIDw9IHRoaXMub3B0aW9ucy5tYXhUaHVtYm5haWxGaWxlc2l6ZSAqIDEwMjQgKiAxMDI0KSB7XG4gICAgICAgIHRoaXMuX3RodW1ibmFpbFF1ZXVlLnB1c2goZmlsZSk7XG4gICAgICAgIHJldHVybiBzZXRUaW1lb3V0KCgoZnVuY3Rpb24oX3RoaXMpIHtcbiAgICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gX3RoaXMuX3Byb2Nlc3NUaHVtYm5haWxRdWV1ZSgpO1xuICAgICAgICAgIH07XG4gICAgICAgIH0pKHRoaXMpKSwgMCk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIERyb3B6b25lLnByb3RvdHlwZS5fcHJvY2Vzc1RodW1ibmFpbFF1ZXVlID0gZnVuY3Rpb24oKSB7XG4gICAgICBpZiAodGhpcy5fcHJvY2Vzc2luZ1RodW1ibmFpbCB8fCB0aGlzLl90aHVtYm5haWxRdWV1ZS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5fcHJvY2Vzc2luZ1RodW1ibmFpbCA9IHRydWU7XG4gICAgICByZXR1cm4gdGhpcy5jcmVhdGVUaHVtYm5haWwodGhpcy5fdGh1bWJuYWlsUXVldWUuc2hpZnQoKSwgKGZ1bmN0aW9uKF90aGlzKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgICBfdGhpcy5fcHJvY2Vzc2luZ1RodW1ibmFpbCA9IGZhbHNlO1xuICAgICAgICAgIHJldHVybiBfdGhpcy5fcHJvY2Vzc1RodW1ibmFpbFF1ZXVlKCk7XG4gICAgICAgIH07XG4gICAgICB9KSh0aGlzKSk7XG4gICAgfTtcblxuICAgIERyb3B6b25lLnByb3RvdHlwZS5yZW1vdmVGaWxlID0gZnVuY3Rpb24oZmlsZSkge1xuICAgICAgaWYgKGZpbGUuc3RhdHVzID09PSBEcm9wem9uZS5VUExPQURJTkcpIHtcbiAgICAgICAgdGhpcy5jYW5jZWxVcGxvYWQoZmlsZSk7XG4gICAgICB9XG4gICAgICB0aGlzLmZpbGVzID0gd2l0aG91dCh0aGlzLmZpbGVzLCBmaWxlKTtcbiAgICAgIHRoaXMuZW1pdChcInJlbW92ZWRmaWxlXCIsIGZpbGUpO1xuICAgICAgaWYgKHRoaXMuZmlsZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmVtaXQoXCJyZXNldFwiKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgRHJvcHpvbmUucHJvdG90eXBlLnJlbW92ZUFsbEZpbGVzID0gZnVuY3Rpb24oY2FuY2VsSWZOZWNlc3NhcnkpIHtcbiAgICAgIHZhciBmaWxlLCBfaSwgX2xlbiwgX3JlZjtcbiAgICAgIGlmIChjYW5jZWxJZk5lY2Vzc2FyeSA9PSBudWxsKSB7XG4gICAgICAgIGNhbmNlbElmTmVjZXNzYXJ5ID0gZmFsc2U7XG4gICAgICB9XG4gICAgICBfcmVmID0gdGhpcy5maWxlcy5zbGljZSgpO1xuICAgICAgZm9yIChfaSA9IDAsIF9sZW4gPSBfcmVmLmxlbmd0aDsgX2kgPCBfbGVuOyBfaSsrKSB7XG4gICAgICAgIGZpbGUgPSBfcmVmW19pXTtcbiAgICAgICAgaWYgKGZpbGUuc3RhdHVzICE9PSBEcm9wem9uZS5VUExPQURJTkcgfHwgY2FuY2VsSWZOZWNlc3NhcnkpIHtcbiAgICAgICAgICB0aGlzLnJlbW92ZUZpbGUoZmlsZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG5cbiAgICBEcm9wem9uZS5wcm90b3R5cGUuY3JlYXRlVGh1bWJuYWlsID0gZnVuY3Rpb24oZmlsZSwgY2FsbGJhY2spIHtcbiAgICAgIHZhciBmaWxlUmVhZGVyO1xuICAgICAgZmlsZVJlYWRlciA9IG5ldyBGaWxlUmVhZGVyO1xuICAgICAgZmlsZVJlYWRlci5vbmxvYWQgPSAoZnVuY3Rpb24oX3RoaXMpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgICAgIGlmIChmaWxlLnR5cGUgPT09IFwiaW1hZ2Uvc3ZnK3htbFwiKSB7XG4gICAgICAgICAgICBfdGhpcy5lbWl0KFwidGh1bWJuYWlsXCIsIGZpbGUsIGZpbGVSZWFkZXIucmVzdWx0KTtcbiAgICAgICAgICAgIGlmIChjYWxsYmFjayAhPSBudWxsKSB7XG4gICAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBfdGhpcy5jcmVhdGVUaHVtYm5haWxGcm9tVXJsKGZpbGUsIGZpbGVSZWFkZXIucmVzdWx0LCBjYWxsYmFjayk7XG4gICAgICAgIH07XG4gICAgICB9KSh0aGlzKTtcbiAgICAgIHJldHVybiBmaWxlUmVhZGVyLnJlYWRBc0RhdGFVUkwoZmlsZSk7XG4gICAgfTtcblxuICAgIERyb3B6b25lLnByb3RvdHlwZS5jcmVhdGVUaHVtYm5haWxGcm9tVXJsID0gZnVuY3Rpb24oZmlsZSwgaW1hZ2VVcmwsIGNhbGxiYWNrLCBjcm9zc09yaWdpbikge1xuICAgICAgdmFyIGltZztcbiAgICAgIGltZyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpbWdcIik7XG4gICAgICBpZiAoY3Jvc3NPcmlnaW4pIHtcbiAgICAgICAgaW1nLmNyb3NzT3JpZ2luID0gY3Jvc3NPcmlnaW47XG4gICAgICB9XG4gICAgICBpbWcub25sb2FkID0gKGZ1bmN0aW9uKF90aGlzKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgICB2YXIgY2FudmFzLCBjdHgsIHJlc2l6ZUluZm8sIHRodW1ibmFpbCwgX3JlZiwgX3JlZjEsIF9yZWYyLCBfcmVmMztcbiAgICAgICAgICBmaWxlLndpZHRoID0gaW1nLndpZHRoO1xuICAgICAgICAgIGZpbGUuaGVpZ2h0ID0gaW1nLmhlaWdodDtcbiAgICAgICAgICByZXNpemVJbmZvID0gX3RoaXMub3B0aW9ucy5yZXNpemUuY2FsbChfdGhpcywgZmlsZSk7XG4gICAgICAgICAgaWYgKHJlc2l6ZUluZm8udHJnV2lkdGggPT0gbnVsbCkge1xuICAgICAgICAgICAgcmVzaXplSW5mby50cmdXaWR0aCA9IHJlc2l6ZUluZm8ub3B0V2lkdGg7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChyZXNpemVJbmZvLnRyZ0hlaWdodCA9PSBudWxsKSB7XG4gICAgICAgICAgICByZXNpemVJbmZvLnRyZ0hlaWdodCA9IHJlc2l6ZUluZm8ub3B0SGVpZ2h0O1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiY2FudmFzXCIpO1xuICAgICAgICAgIGN0eCA9IGNhbnZhcy5nZXRDb250ZXh0KFwiMmRcIik7XG4gICAgICAgICAgY2FudmFzLndpZHRoID0gcmVzaXplSW5mby50cmdXaWR0aDtcbiAgICAgICAgICBjYW52YXMuaGVpZ2h0ID0gcmVzaXplSW5mby50cmdIZWlnaHQ7XG4gICAgICAgICAgZHJhd0ltYWdlSU9TRml4KGN0eCwgaW1nLCAoX3JlZiA9IHJlc2l6ZUluZm8uc3JjWCkgIT0gbnVsbCA/IF9yZWYgOiAwLCAoX3JlZjEgPSByZXNpemVJbmZvLnNyY1kpICE9IG51bGwgPyBfcmVmMSA6IDAsIHJlc2l6ZUluZm8uc3JjV2lkdGgsIHJlc2l6ZUluZm8uc3JjSGVpZ2h0LCAoX3JlZjIgPSByZXNpemVJbmZvLnRyZ1gpICE9IG51bGwgPyBfcmVmMiA6IDAsIChfcmVmMyA9IHJlc2l6ZUluZm8udHJnWSkgIT0gbnVsbCA/IF9yZWYzIDogMCwgcmVzaXplSW5mby50cmdXaWR0aCwgcmVzaXplSW5mby50cmdIZWlnaHQpO1xuICAgICAgICAgIHRodW1ibmFpbCA9IGNhbnZhcy50b0RhdGFVUkwoXCJpbWFnZS9wbmdcIik7XG4gICAgICAgICAgX3RoaXMuZW1pdChcInRodW1ibmFpbFwiLCBmaWxlLCB0aHVtYm5haWwpO1xuICAgICAgICAgIGlmIChjYWxsYmFjayAhPSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soKTtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICB9KSh0aGlzKTtcbiAgICAgIGlmIChjYWxsYmFjayAhPSBudWxsKSB7XG4gICAgICAgIGltZy5vbmVycm9yID0gY2FsbGJhY2s7XG4gICAgICB9XG4gICAgICByZXR1cm4gaW1nLnNyYyA9IGltYWdlVXJsO1xuICAgIH07XG5cbiAgICBEcm9wem9uZS5wcm90b3R5cGUucHJvY2Vzc1F1ZXVlID0gZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgaSwgcGFyYWxsZWxVcGxvYWRzLCBwcm9jZXNzaW5nTGVuZ3RoLCBxdWV1ZWRGaWxlcztcbiAgICAgIHBhcmFsbGVsVXBsb2FkcyA9IHRoaXMub3B0aW9ucy5wYXJhbGxlbFVwbG9hZHM7XG4gICAgICBwcm9jZXNzaW5nTGVuZ3RoID0gdGhpcy5nZXRVcGxvYWRpbmdGaWxlcygpLmxlbmd0aDtcbiAgICAgIGkgPSBwcm9jZXNzaW5nTGVuZ3RoO1xuICAgICAgaWYgKHByb2Nlc3NpbmdMZW5ndGggPj0gcGFyYWxsZWxVcGxvYWRzKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHF1ZXVlZEZpbGVzID0gdGhpcy5nZXRRdWV1ZWRGaWxlcygpO1xuICAgICAgaWYgKCEocXVldWVkRmlsZXMubGVuZ3RoID4gMCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMub3B0aW9ucy51cGxvYWRNdWx0aXBsZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5wcm9jZXNzRmlsZXMocXVldWVkRmlsZXMuc2xpY2UoMCwgcGFyYWxsZWxVcGxvYWRzIC0gcHJvY2Vzc2luZ0xlbmd0aCkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgd2hpbGUgKGkgPCBwYXJhbGxlbFVwbG9hZHMpIHtcbiAgICAgICAgICBpZiAoIXF1ZXVlZEZpbGVzLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLnByb2Nlc3NGaWxlKHF1ZXVlZEZpbGVzLnNoaWZ0KCkpO1xuICAgICAgICAgIGkrKztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG5cbiAgICBEcm9wem9uZS5wcm90b3R5cGUucHJvY2Vzc0ZpbGUgPSBmdW5jdGlvbihmaWxlKSB7XG4gICAgICByZXR1cm4gdGhpcy5wcm9jZXNzRmlsZXMoW2ZpbGVdKTtcbiAgICB9O1xuXG4gICAgRHJvcHpvbmUucHJvdG90eXBlLnByb2Nlc3NGaWxlcyA9IGZ1bmN0aW9uKGZpbGVzKSB7XG4gICAgICB2YXIgZmlsZSwgX2ksIF9sZW47XG4gICAgICBmb3IgKF9pID0gMCwgX2xlbiA9IGZpbGVzLmxlbmd0aDsgX2kgPCBfbGVuOyBfaSsrKSB7XG4gICAgICAgIGZpbGUgPSBmaWxlc1tfaV07XG4gICAgICAgIGZpbGUucHJvY2Vzc2luZyA9IHRydWU7XG4gICAgICAgIGZpbGUuc3RhdHVzID0gRHJvcHpvbmUuVVBMT0FESU5HO1xuICAgICAgICB0aGlzLmVtaXQoXCJwcm9jZXNzaW5nXCIsIGZpbGUpO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMub3B0aW9ucy51cGxvYWRNdWx0aXBsZSkge1xuICAgICAgICB0aGlzLmVtaXQoXCJwcm9jZXNzaW5nbXVsdGlwbGVcIiwgZmlsZXMpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMudXBsb2FkRmlsZXMoZmlsZXMpO1xuICAgIH07XG5cbiAgICBEcm9wem9uZS5wcm90b3R5cGUuX2dldEZpbGVzV2l0aFhociA9IGZ1bmN0aW9uKHhocikge1xuICAgICAgdmFyIGZpbGUsIGZpbGVzO1xuICAgICAgcmV0dXJuIGZpbGVzID0gKGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgX2ksIF9sZW4sIF9yZWYsIF9yZXN1bHRzO1xuICAgICAgICBfcmVmID0gdGhpcy5maWxlcztcbiAgICAgICAgX3Jlc3VsdHMgPSBbXTtcbiAgICAgICAgZm9yIChfaSA9IDAsIF9sZW4gPSBfcmVmLmxlbmd0aDsgX2kgPCBfbGVuOyBfaSsrKSB7XG4gICAgICAgICAgZmlsZSA9IF9yZWZbX2ldO1xuICAgICAgICAgIGlmIChmaWxlLnhociA9PT0geGhyKSB7XG4gICAgICAgICAgICBfcmVzdWx0cy5wdXNoKGZpbGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gX3Jlc3VsdHM7XG4gICAgICB9KS5jYWxsKHRoaXMpO1xuICAgIH07XG5cbiAgICBEcm9wem9uZS5wcm90b3R5cGUuY2FuY2VsVXBsb2FkID0gZnVuY3Rpb24oZmlsZSkge1xuICAgICAgdmFyIGdyb3VwZWRGaWxlLCBncm91cGVkRmlsZXMsIF9pLCBfaiwgX2xlbiwgX2xlbjEsIF9yZWY7XG4gICAgICBpZiAoZmlsZS5zdGF0dXMgPT09IERyb3B6b25lLlVQTE9BRElORykge1xuICAgICAgICBncm91cGVkRmlsZXMgPSB0aGlzLl9nZXRGaWxlc1dpdGhYaHIoZmlsZS54aHIpO1xuICAgICAgICBmb3IgKF9pID0gMCwgX2xlbiA9IGdyb3VwZWRGaWxlcy5sZW5ndGg7IF9pIDwgX2xlbjsgX2krKykge1xuICAgICAgICAgIGdyb3VwZWRGaWxlID0gZ3JvdXBlZEZpbGVzW19pXTtcbiAgICAgICAgICBncm91cGVkRmlsZS5zdGF0dXMgPSBEcm9wem9uZS5DQU5DRUxFRDtcbiAgICAgICAgfVxuICAgICAgICBmaWxlLnhoci5hYm9ydCgpO1xuICAgICAgICBmb3IgKF9qID0gMCwgX2xlbjEgPSBncm91cGVkRmlsZXMubGVuZ3RoOyBfaiA8IF9sZW4xOyBfaisrKSB7XG4gICAgICAgICAgZ3JvdXBlZEZpbGUgPSBncm91cGVkRmlsZXNbX2pdO1xuICAgICAgICAgIHRoaXMuZW1pdChcImNhbmNlbGVkXCIsIGdyb3VwZWRGaWxlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLnVwbG9hZE11bHRpcGxlKSB7XG4gICAgICAgICAgdGhpcy5lbWl0KFwiY2FuY2VsZWRtdWx0aXBsZVwiLCBncm91cGVkRmlsZXMpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKChfcmVmID0gZmlsZS5zdGF0dXMpID09PSBEcm9wem9uZS5BRERFRCB8fCBfcmVmID09PSBEcm9wem9uZS5RVUVVRUQpIHtcbiAgICAgICAgZmlsZS5zdGF0dXMgPSBEcm9wem9uZS5DQU5DRUxFRDtcbiAgICAgICAgdGhpcy5lbWl0KFwiY2FuY2VsZWRcIiwgZmlsZSk7XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMudXBsb2FkTXVsdGlwbGUpIHtcbiAgICAgICAgICB0aGlzLmVtaXQoXCJjYW5jZWxlZG11bHRpcGxlXCIsIFtmaWxlXSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLm9wdGlvbnMuYXV0b1Byb2Nlc3NRdWV1ZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5wcm9jZXNzUXVldWUoKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgcmVzb2x2ZU9wdGlvbiA9IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIGFyZ3MsIG9wdGlvbjtcbiAgICAgIG9wdGlvbiA9IGFyZ3VtZW50c1swXSwgYXJncyA9IDIgPD0gYXJndW1lbnRzLmxlbmd0aCA/IF9fc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpIDogW107XG4gICAgICBpZiAodHlwZW9mIG9wdGlvbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICByZXR1cm4gb3B0aW9uLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG9wdGlvbjtcbiAgICB9O1xuXG4gICAgRHJvcHpvbmUucHJvdG90eXBlLnVwbG9hZEZpbGUgPSBmdW5jdGlvbihmaWxlKSB7XG4gICAgICByZXR1cm4gdGhpcy51cGxvYWRGaWxlcyhbZmlsZV0pO1xuICAgIH07XG5cbiAgICBEcm9wem9uZS5wcm90b3R5cGUudXBsb2FkRmlsZXMgPSBmdW5jdGlvbihmaWxlcykge1xuICAgICAgdmFyIGZpbGUsIGZvcm1EYXRhLCBoYW5kbGVFcnJvciwgaGVhZGVyTmFtZSwgaGVhZGVyVmFsdWUsIGhlYWRlcnMsIGksIGlucHV0LCBpbnB1dE5hbWUsIGlucHV0VHlwZSwga2V5LCBtZXRob2QsIG9wdGlvbiwgcHJvZ3Jlc3NPYmosIHJlc3BvbnNlLCB1cGRhdGVQcm9ncmVzcywgdXJsLCB2YWx1ZSwgeGhyLCBfaSwgX2osIF9rLCBfbCwgX2xlbiwgX2xlbjEsIF9sZW4yLCBfbGVuMywgX20sIF9yZWYsIF9yZWYxLCBfcmVmMiwgX3JlZjMsIF9yZWY0LCBfcmVmNTtcbiAgICAgIHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuICAgICAgZm9yIChfaSA9IDAsIF9sZW4gPSBmaWxlcy5sZW5ndGg7IF9pIDwgX2xlbjsgX2krKykge1xuICAgICAgICBmaWxlID0gZmlsZXNbX2ldO1xuICAgICAgICBmaWxlLnhociA9IHhocjtcbiAgICAgIH1cbiAgICAgIG1ldGhvZCA9IHJlc29sdmVPcHRpb24odGhpcy5vcHRpb25zLm1ldGhvZCwgZmlsZXMpO1xuICAgICAgdXJsID0gcmVzb2x2ZU9wdGlvbih0aGlzLm9wdGlvbnMudXJsLCBmaWxlcyk7XG4gICAgICB4aHIub3BlbihtZXRob2QsIHVybCwgdHJ1ZSk7XG4gICAgICB4aHIud2l0aENyZWRlbnRpYWxzID0gISF0aGlzLm9wdGlvbnMud2l0aENyZWRlbnRpYWxzO1xuICAgICAgcmVzcG9uc2UgPSBudWxsO1xuICAgICAgaGFuZGxlRXJyb3IgPSAoZnVuY3Rpb24oX3RoaXMpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgICAgIHZhciBfaiwgX2xlbjEsIF9yZXN1bHRzO1xuICAgICAgICAgIF9yZXN1bHRzID0gW107XG4gICAgICAgICAgZm9yIChfaiA9IDAsIF9sZW4xID0gZmlsZXMubGVuZ3RoOyBfaiA8IF9sZW4xOyBfaisrKSB7XG4gICAgICAgICAgICBmaWxlID0gZmlsZXNbX2pdO1xuICAgICAgICAgICAgX3Jlc3VsdHMucHVzaChfdGhpcy5fZXJyb3JQcm9jZXNzaW5nKGZpbGVzLCByZXNwb25zZSB8fCBfdGhpcy5vcHRpb25zLmRpY3RSZXNwb25zZUVycm9yLnJlcGxhY2UoXCJ7e3N0YXR1c0NvZGV9fVwiLCB4aHIuc3RhdHVzKSwgeGhyKSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBfcmVzdWx0cztcbiAgICAgICAgfTtcbiAgICAgIH0pKHRoaXMpO1xuICAgICAgdXBkYXRlUHJvZ3Jlc3MgPSAoZnVuY3Rpb24oX3RoaXMpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICB2YXIgYWxsRmlsZXNGaW5pc2hlZCwgcHJvZ3Jlc3MsIF9qLCBfaywgX2wsIF9sZW4xLCBfbGVuMiwgX2xlbjMsIF9yZXN1bHRzO1xuICAgICAgICAgIGlmIChlICE9IG51bGwpIHtcbiAgICAgICAgICAgIHByb2dyZXNzID0gMTAwICogZS5sb2FkZWQgLyBlLnRvdGFsO1xuICAgICAgICAgICAgZm9yIChfaiA9IDAsIF9sZW4xID0gZmlsZXMubGVuZ3RoOyBfaiA8IF9sZW4xOyBfaisrKSB7XG4gICAgICAgICAgICAgIGZpbGUgPSBmaWxlc1tfal07XG4gICAgICAgICAgICAgIGZpbGUudXBsb2FkID0ge1xuICAgICAgICAgICAgICAgIHByb2dyZXNzOiBwcm9ncmVzcyxcbiAgICAgICAgICAgICAgICB0b3RhbDogZS50b3RhbCxcbiAgICAgICAgICAgICAgICBieXRlc1NlbnQ6IGUubG9hZGVkXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGFsbEZpbGVzRmluaXNoZWQgPSB0cnVlO1xuICAgICAgICAgICAgcHJvZ3Jlc3MgPSAxMDA7XG4gICAgICAgICAgICBmb3IgKF9rID0gMCwgX2xlbjIgPSBmaWxlcy5sZW5ndGg7IF9rIDwgX2xlbjI7IF9rKyspIHtcbiAgICAgICAgICAgICAgZmlsZSA9IGZpbGVzW19rXTtcbiAgICAgICAgICAgICAgaWYgKCEoZmlsZS51cGxvYWQucHJvZ3Jlc3MgPT09IDEwMCAmJiBmaWxlLnVwbG9hZC5ieXRlc1NlbnQgPT09IGZpbGUudXBsb2FkLnRvdGFsKSkge1xuICAgICAgICAgICAgICAgIGFsbEZpbGVzRmluaXNoZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBmaWxlLnVwbG9hZC5wcm9ncmVzcyA9IHByb2dyZXNzO1xuICAgICAgICAgICAgICBmaWxlLnVwbG9hZC5ieXRlc1NlbnQgPSBmaWxlLnVwbG9hZC50b3RhbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChhbGxGaWxlc0ZpbmlzaGVkKSB7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgX3Jlc3VsdHMgPSBbXTtcbiAgICAgICAgICBmb3IgKF9sID0gMCwgX2xlbjMgPSBmaWxlcy5sZW5ndGg7IF9sIDwgX2xlbjM7IF9sKyspIHtcbiAgICAgICAgICAgIGZpbGUgPSBmaWxlc1tfbF07XG4gICAgICAgICAgICBfcmVzdWx0cy5wdXNoKF90aGlzLmVtaXQoXCJ1cGxvYWRwcm9ncmVzc1wiLCBmaWxlLCBwcm9ncmVzcywgZmlsZS51cGxvYWQuYnl0ZXNTZW50KSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBfcmVzdWx0cztcbiAgICAgICAgfTtcbiAgICAgIH0pKHRoaXMpO1xuICAgICAgeGhyLm9ubG9hZCA9IChmdW5jdGlvbihfdGhpcykge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24oZSkge1xuICAgICAgICAgIHZhciBfcmVmO1xuICAgICAgICAgIGlmIChmaWxlc1swXS5zdGF0dXMgPT09IERyb3B6b25lLkNBTkNFTEVEKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICh4aHIucmVhZHlTdGF0ZSAhPT0gNCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXNwb25zZSA9IHhoci5yZXNwb25zZVRleHQ7XG4gICAgICAgICAgaWYgKHhoci5nZXRSZXNwb25zZUhlYWRlcihcImNvbnRlbnQtdHlwZVwiKSAmJiB+eGhyLmdldFJlc3BvbnNlSGVhZGVyKFwiY29udGVudC10eXBlXCIpLmluZGV4T2YoXCJhcHBsaWNhdGlvbi9qc29uXCIpKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICByZXNwb25zZSA9IEpTT04ucGFyc2UocmVzcG9uc2UpO1xuICAgICAgICAgICAgfSBjYXRjaCAoX2Vycm9yKSB7XG4gICAgICAgICAgICAgIGUgPSBfZXJyb3I7XG4gICAgICAgICAgICAgIHJlc3BvbnNlID0gXCJJbnZhbGlkIEpTT04gcmVzcG9uc2UgZnJvbSBzZXJ2ZXIuXCI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHVwZGF0ZVByb2dyZXNzKCk7XG4gICAgICAgICAgaWYgKCEoKDIwMCA8PSAoX3JlZiA9IHhoci5zdGF0dXMpICYmIF9yZWYgPCAzMDApKSkge1xuICAgICAgICAgICAgcmV0dXJuIGhhbmRsZUVycm9yKCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBfdGhpcy5fZmluaXNoZWQoZmlsZXMsIHJlc3BvbnNlLCBlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICB9KSh0aGlzKTtcbiAgICAgIHhoci5vbmVycm9yID0gKGZ1bmN0aW9uKF90aGlzKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgICBpZiAoZmlsZXNbMF0uc3RhdHVzID09PSBEcm9wem9uZS5DQU5DRUxFRCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gaGFuZGxlRXJyb3IoKTtcbiAgICAgICAgfTtcbiAgICAgIH0pKHRoaXMpO1xuICAgICAgcHJvZ3Jlc3NPYmogPSAoX3JlZiA9IHhoci51cGxvYWQpICE9IG51bGwgPyBfcmVmIDogeGhyO1xuICAgICAgcHJvZ3Jlc3NPYmoub25wcm9ncmVzcyA9IHVwZGF0ZVByb2dyZXNzO1xuICAgICAgaGVhZGVycyA9IHtcbiAgICAgICAgXCJBY2NlcHRcIjogXCJhcHBsaWNhdGlvbi9qc29uXCIsXG4gICAgICAgIFwiQ2FjaGUtQ29udHJvbFwiOiBcIm5vLWNhY2hlXCIsXG4gICAgICAgIFwiWC1SZXF1ZXN0ZWQtV2l0aFwiOiBcIlhNTEh0dHBSZXF1ZXN0XCJcbiAgICAgIH07XG4gICAgICBpZiAodGhpcy5vcHRpb25zLmhlYWRlcnMpIHtcbiAgICAgICAgZXh0ZW5kKGhlYWRlcnMsIHRoaXMub3B0aW9ucy5oZWFkZXJzKTtcbiAgICAgIH1cbiAgICAgIGZvciAoaGVhZGVyTmFtZSBpbiBoZWFkZXJzKSB7XG4gICAgICAgIGhlYWRlclZhbHVlID0gaGVhZGVyc1toZWFkZXJOYW1lXTtcbiAgICAgICAgaWYgKGhlYWRlclZhbHVlKSB7XG4gICAgICAgICAgeGhyLnNldFJlcXVlc3RIZWFkZXIoaGVhZGVyTmFtZSwgaGVhZGVyVmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xuICAgICAgaWYgKHRoaXMub3B0aW9ucy5wYXJhbXMpIHtcbiAgICAgICAgX3JlZjEgPSB0aGlzLm9wdGlvbnMucGFyYW1zO1xuICAgICAgICBmb3IgKGtleSBpbiBfcmVmMSkge1xuICAgICAgICAgIHZhbHVlID0gX3JlZjFba2V5XTtcbiAgICAgICAgICBmb3JtRGF0YS5hcHBlbmQoa2V5LCB2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGZvciAoX2ogPSAwLCBfbGVuMSA9IGZpbGVzLmxlbmd0aDsgX2ogPCBfbGVuMTsgX2orKykge1xuICAgICAgICBmaWxlID0gZmlsZXNbX2pdO1xuICAgICAgICB0aGlzLmVtaXQoXCJzZW5kaW5nXCIsIGZpbGUsIHhociwgZm9ybURhdGEpO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMub3B0aW9ucy51cGxvYWRNdWx0aXBsZSkge1xuICAgICAgICB0aGlzLmVtaXQoXCJzZW5kaW5nbXVsdGlwbGVcIiwgZmlsZXMsIHhociwgZm9ybURhdGEpO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuZWxlbWVudC50YWdOYW1lID09PSBcIkZPUk1cIikge1xuICAgICAgICBfcmVmMiA9IHRoaXMuZWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKFwiaW5wdXQsIHRleHRhcmVhLCBzZWxlY3QsIGJ1dHRvblwiKTtcbiAgICAgICAgZm9yIChfayA9IDAsIF9sZW4yID0gX3JlZjIubGVuZ3RoOyBfayA8IF9sZW4yOyBfaysrKSB7XG4gICAgICAgICAgaW5wdXQgPSBfcmVmMltfa107XG4gICAgICAgICAgaW5wdXROYW1lID0gaW5wdXQuZ2V0QXR0cmlidXRlKFwibmFtZVwiKTtcbiAgICAgICAgICBpbnB1dFR5cGUgPSBpbnB1dC5nZXRBdHRyaWJ1dGUoXCJ0eXBlXCIpO1xuICAgICAgICAgIGlmIChpbnB1dC50YWdOYW1lID09PSBcIlNFTEVDVFwiICYmIGlucHV0Lmhhc0F0dHJpYnV0ZShcIm11bHRpcGxlXCIpKSB7XG4gICAgICAgICAgICBfcmVmMyA9IGlucHV0Lm9wdGlvbnM7XG4gICAgICAgICAgICBmb3IgKF9sID0gMCwgX2xlbjMgPSBfcmVmMy5sZW5ndGg7IF9sIDwgX2xlbjM7IF9sKyspIHtcbiAgICAgICAgICAgICAgb3B0aW9uID0gX3JlZjNbX2xdO1xuICAgICAgICAgICAgICBpZiAob3B0aW9uLnNlbGVjdGVkKSB7XG4gICAgICAgICAgICAgICAgZm9ybURhdGEuYXBwZW5kKGlucHV0TmFtZSwgb3B0aW9uLnZhbHVlKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSBpZiAoIWlucHV0VHlwZSB8fCAoKF9yZWY0ID0gaW5wdXRUeXBlLnRvTG93ZXJDYXNlKCkpICE9PSBcImNoZWNrYm94XCIgJiYgX3JlZjQgIT09IFwicmFkaW9cIikgfHwgaW5wdXQuY2hlY2tlZCkge1xuICAgICAgICAgICAgZm9ybURhdGEuYXBwZW5kKGlucHV0TmFtZSwgaW5wdXQudmFsdWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZm9yIChpID0gX20gPSAwLCBfcmVmNSA9IGZpbGVzLmxlbmd0aCAtIDE7IDAgPD0gX3JlZjUgPyBfbSA8PSBfcmVmNSA6IF9tID49IF9yZWY1OyBpID0gMCA8PSBfcmVmNSA/ICsrX20gOiAtLV9tKSB7XG4gICAgICAgIGZvcm1EYXRhLmFwcGVuZCh0aGlzLl9nZXRQYXJhbU5hbWUoaSksIGZpbGVzW2ldLCBmaWxlc1tpXS5uYW1lKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLnN1Ym1pdFJlcXVlc3QoeGhyLCBmb3JtRGF0YSwgZmlsZXMpO1xuICAgIH07XG5cbiAgICBEcm9wem9uZS5wcm90b3R5cGUuc3VibWl0UmVxdWVzdCA9IGZ1bmN0aW9uKHhociwgZm9ybURhdGEsIGZpbGVzKSB7XG4gICAgICByZXR1cm4geGhyLnNlbmQoZm9ybURhdGEpO1xuICAgIH07XG5cbiAgICBEcm9wem9uZS5wcm90b3R5cGUuX2ZpbmlzaGVkID0gZnVuY3Rpb24oZmlsZXMsIHJlc3BvbnNlVGV4dCwgZSkge1xuICAgICAgdmFyIGZpbGUsIF9pLCBfbGVuO1xuICAgICAgZm9yIChfaSA9IDAsIF9sZW4gPSBmaWxlcy5sZW5ndGg7IF9pIDwgX2xlbjsgX2krKykge1xuICAgICAgICBmaWxlID0gZmlsZXNbX2ldO1xuICAgICAgICBmaWxlLnN0YXR1cyA9IERyb3B6b25lLlNVQ0NFU1M7XG4gICAgICAgIHRoaXMuZW1pdChcInN1Y2Nlc3NcIiwgZmlsZSwgcmVzcG9uc2VUZXh0LCBlKTtcbiAgICAgICAgdGhpcy5lbWl0KFwiY29tcGxldGVcIiwgZmlsZSk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5vcHRpb25zLnVwbG9hZE11bHRpcGxlKSB7XG4gICAgICAgIHRoaXMuZW1pdChcInN1Y2Nlc3NtdWx0aXBsZVwiLCBmaWxlcywgcmVzcG9uc2VUZXh0LCBlKTtcbiAgICAgICAgdGhpcy5lbWl0KFwiY29tcGxldGVtdWx0aXBsZVwiLCBmaWxlcyk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5vcHRpb25zLmF1dG9Qcm9jZXNzUXVldWUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc1F1ZXVlKCk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIERyb3B6b25lLnByb3RvdHlwZS5fZXJyb3JQcm9jZXNzaW5nID0gZnVuY3Rpb24oZmlsZXMsIG1lc3NhZ2UsIHhocikge1xuICAgICAgdmFyIGZpbGUsIF9pLCBfbGVuO1xuICAgICAgZm9yIChfaSA9IDAsIF9sZW4gPSBmaWxlcy5sZW5ndGg7IF9pIDwgX2xlbjsgX2krKykge1xuICAgICAgICBmaWxlID0gZmlsZXNbX2ldO1xuICAgICAgICBmaWxlLnN0YXR1cyA9IERyb3B6b25lLkVSUk9SO1xuICAgICAgICB0aGlzLmVtaXQoXCJlcnJvclwiLCBmaWxlLCBtZXNzYWdlLCB4aHIpO1xuICAgICAgICB0aGlzLmVtaXQoXCJjb21wbGV0ZVwiLCBmaWxlKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLm9wdGlvbnMudXBsb2FkTXVsdGlwbGUpIHtcbiAgICAgICAgdGhpcy5lbWl0KFwiZXJyb3JtdWx0aXBsZVwiLCBmaWxlcywgbWVzc2FnZSwgeGhyKTtcbiAgICAgICAgdGhpcy5lbWl0KFwiY29tcGxldGVtdWx0aXBsZVwiLCBmaWxlcyk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5vcHRpb25zLmF1dG9Qcm9jZXNzUXVldWUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc1F1ZXVlKCk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIHJldHVybiBEcm9wem9uZTtcblxuICB9KShFbWl0dGVyKTtcblxuICBEcm9wem9uZS52ZXJzaW9uID0gXCI0LjIuMFwiO1xuXG4gIERyb3B6b25lLm9wdGlvbnMgPSB7fTtcblxuICBEcm9wem9uZS5vcHRpb25zRm9yRWxlbWVudCA9IGZ1bmN0aW9uKGVsZW1lbnQpIHtcbiAgICBpZiAoZWxlbWVudC5nZXRBdHRyaWJ1dGUoXCJpZFwiKSkge1xuICAgICAgcmV0dXJuIERyb3B6b25lLm9wdGlvbnNbY2FtZWxpemUoZWxlbWVudC5nZXRBdHRyaWJ1dGUoXCJpZFwiKSldO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdm9pZCAwO1xuICAgIH1cbiAgfTtcblxuICBEcm9wem9uZS5pbnN0YW5jZXMgPSBbXTtcblxuICBEcm9wem9uZS5mb3JFbGVtZW50ID0gZnVuY3Rpb24oZWxlbWVudCkge1xuICAgIGlmICh0eXBlb2YgZWxlbWVudCA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgZWxlbWVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoZWxlbWVudCk7XG4gICAgfVxuICAgIGlmICgoZWxlbWVudCAhPSBudWxsID8gZWxlbWVudC5kcm9wem9uZSA6IHZvaWQgMCkgPT0gbnVsbCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gRHJvcHpvbmUgZm91bmQgZm9yIGdpdmVuIGVsZW1lbnQuIFRoaXMgaXMgcHJvYmFibHkgYmVjYXVzZSB5b3UncmUgdHJ5aW5nIHRvIGFjY2VzcyBpdCBiZWZvcmUgRHJvcHpvbmUgaGFkIHRoZSB0aW1lIHRvIGluaXRpYWxpemUuIFVzZSB0aGUgYGluaXRgIG9wdGlvbiB0byBzZXR1cCBhbnkgYWRkaXRpb25hbCBvYnNlcnZlcnMgb24geW91ciBEcm9wem9uZS5cIik7XG4gICAgfVxuICAgIHJldHVybiBlbGVtZW50LmRyb3B6b25lO1xuICB9O1xuXG4gIERyb3B6b25lLmF1dG9EaXNjb3ZlciA9IHRydWU7XG5cbiAgRHJvcHpvbmUuZGlzY292ZXIgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgY2hlY2tFbGVtZW50cywgZHJvcHpvbmUsIGRyb3B6b25lcywgX2ksIF9sZW4sIF9yZXN1bHRzO1xuICAgIGlmIChkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKSB7XG4gICAgICBkcm9wem9uZXMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFwiLmRyb3B6b25lXCIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBkcm9wem9uZXMgPSBbXTtcbiAgICAgIGNoZWNrRWxlbWVudHMgPSBmdW5jdGlvbihlbGVtZW50cykge1xuICAgICAgICB2YXIgZWwsIF9pLCBfbGVuLCBfcmVzdWx0cztcbiAgICAgICAgX3Jlc3VsdHMgPSBbXTtcbiAgICAgICAgZm9yIChfaSA9IDAsIF9sZW4gPSBlbGVtZW50cy5sZW5ndGg7IF9pIDwgX2xlbjsgX2krKykge1xuICAgICAgICAgIGVsID0gZWxlbWVudHNbX2ldO1xuICAgICAgICAgIGlmICgvKF58IClkcm9wem9uZSgkfCApLy50ZXN0KGVsLmNsYXNzTmFtZSkpIHtcbiAgICAgICAgICAgIF9yZXN1bHRzLnB1c2goZHJvcHpvbmVzLnB1c2goZWwpKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgX3Jlc3VsdHMucHVzaCh2b2lkIDApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gX3Jlc3VsdHM7XG4gICAgICB9O1xuICAgICAgY2hlY2tFbGVtZW50cyhkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZShcImRpdlwiKSk7XG4gICAgICBjaGVja0VsZW1lbnRzKGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKFwiZm9ybVwiKSk7XG4gICAgfVxuICAgIF9yZXN1bHRzID0gW107XG4gICAgZm9yIChfaSA9IDAsIF9sZW4gPSBkcm9wem9uZXMubGVuZ3RoOyBfaSA8IF9sZW47IF9pKyspIHtcbiAgICAgIGRyb3B6b25lID0gZHJvcHpvbmVzW19pXTtcbiAgICAgIGlmIChEcm9wem9uZS5vcHRpb25zRm9yRWxlbWVudChkcm9wem9uZSkgIT09IGZhbHNlKSB7XG4gICAgICAgIF9yZXN1bHRzLnB1c2gobmV3IERyb3B6b25lKGRyb3B6b25lKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBfcmVzdWx0cy5wdXNoKHZvaWQgMCk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBfcmVzdWx0cztcbiAgfTtcblxuICBEcm9wem9uZS5ibGFja2xpc3RlZEJyb3dzZXJzID0gWy9vcGVyYS4qTWFjaW50b3NoLip2ZXJzaW9uXFwvMTIvaV07XG5cbiAgRHJvcHpvbmUuaXNCcm93c2VyU3VwcG9ydGVkID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIGNhcGFibGVCcm93c2VyLCByZWdleCwgX2ksIF9sZW4sIF9yZWY7XG4gICAgY2FwYWJsZUJyb3dzZXIgPSB0cnVlO1xuICAgIGlmICh3aW5kb3cuRmlsZSAmJiB3aW5kb3cuRmlsZVJlYWRlciAmJiB3aW5kb3cuRmlsZUxpc3QgJiYgd2luZG93LkJsb2IgJiYgd2luZG93LkZvcm1EYXRhICYmIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IpIHtcbiAgICAgIGlmICghKFwiY2xhc3NMaXN0XCIgaW4gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImFcIikpKSB7XG4gICAgICAgIGNhcGFibGVCcm93c2VyID0gZmFsc2U7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBfcmVmID0gRHJvcHpvbmUuYmxhY2tsaXN0ZWRCcm93c2VycztcbiAgICAgICAgZm9yIChfaSA9IDAsIF9sZW4gPSBfcmVmLmxlbmd0aDsgX2kgPCBfbGVuOyBfaSsrKSB7XG4gICAgICAgICAgcmVnZXggPSBfcmVmW19pXTtcbiAgICAgICAgICBpZiAocmVnZXgudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSkge1xuICAgICAgICAgICAgY2FwYWJsZUJyb3dzZXIgPSBmYWxzZTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjYXBhYmxlQnJvd3NlciA9IGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gY2FwYWJsZUJyb3dzZXI7XG4gIH07XG5cbiAgd2l0aG91dCA9IGZ1bmN0aW9uKGxpc3QsIHJlamVjdGVkSXRlbSkge1xuICAgIHZhciBpdGVtLCBfaSwgX2xlbiwgX3Jlc3VsdHM7XG4gICAgX3Jlc3VsdHMgPSBbXTtcbiAgICBmb3IgKF9pID0gMCwgX2xlbiA9IGxpc3QubGVuZ3RoOyBfaSA8IF9sZW47IF9pKyspIHtcbiAgICAgIGl0ZW0gPSBsaXN0W19pXTtcbiAgICAgIGlmIChpdGVtICE9PSByZWplY3RlZEl0ZW0pIHtcbiAgICAgICAgX3Jlc3VsdHMucHVzaChpdGVtKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIF9yZXN1bHRzO1xuICB9O1xuXG4gIGNhbWVsaXplID0gZnVuY3Rpb24oc3RyKSB7XG4gICAgcmV0dXJuIHN0ci5yZXBsYWNlKC9bXFwtX10oXFx3KS9nLCBmdW5jdGlvbihtYXRjaCkge1xuICAgICAgcmV0dXJuIG1hdGNoLmNoYXJBdCgxKS50b1VwcGVyQ2FzZSgpO1xuICAgIH0pO1xuICB9O1xuXG4gIERyb3B6b25lLmNyZWF0ZUVsZW1lbnQgPSBmdW5jdGlvbihzdHJpbmcpIHtcbiAgICB2YXIgZGl2O1xuICAgIGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgZGl2LmlubmVySFRNTCA9IHN0cmluZztcbiAgICByZXR1cm4gZGl2LmNoaWxkTm9kZXNbMF07XG4gIH07XG5cbiAgRHJvcHpvbmUuZWxlbWVudEluc2lkZSA9IGZ1bmN0aW9uKGVsZW1lbnQsIGNvbnRhaW5lcikge1xuICAgIGlmIChlbGVtZW50ID09PSBjb250YWluZXIpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICB3aGlsZSAoZWxlbWVudCA9IGVsZW1lbnQucGFyZW50Tm9kZSkge1xuICAgICAgaWYgKGVsZW1lbnQgPT09IGNvbnRhaW5lcikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9O1xuXG4gIERyb3B6b25lLmdldEVsZW1lbnQgPSBmdW5jdGlvbihlbCwgbmFtZSkge1xuICAgIHZhciBlbGVtZW50O1xuICAgIGlmICh0eXBlb2YgZWwgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIGVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGVsKTtcbiAgICB9IGVsc2UgaWYgKGVsLm5vZGVUeXBlICE9IG51bGwpIHtcbiAgICAgIGVsZW1lbnQgPSBlbDtcbiAgICB9XG4gICAgaWYgKGVsZW1lbnQgPT0gbnVsbCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBgXCIgKyBuYW1lICsgXCJgIG9wdGlvbiBwcm92aWRlZC4gUGxlYXNlIHByb3ZpZGUgYSBDU1Mgc2VsZWN0b3Igb3IgYSBwbGFpbiBIVE1MIGVsZW1lbnQuXCIpO1xuICAgIH1cbiAgICByZXR1cm4gZWxlbWVudDtcbiAgfTtcblxuICBEcm9wem9uZS5nZXRFbGVtZW50cyA9IGZ1bmN0aW9uKGVscywgbmFtZSkge1xuICAgIHZhciBlLCBlbCwgZWxlbWVudHMsIF9pLCBfaiwgX2xlbiwgX2xlbjEsIF9yZWY7XG4gICAgaWYgKGVscyBpbnN0YW5jZW9mIEFycmF5KSB7XG4gICAgICBlbGVtZW50cyA9IFtdO1xuICAgICAgdHJ5IHtcbiAgICAgICAgZm9yIChfaSA9IDAsIF9sZW4gPSBlbHMubGVuZ3RoOyBfaSA8IF9sZW47IF9pKyspIHtcbiAgICAgICAgICBlbCA9IGVsc1tfaV07XG4gICAgICAgICAgZWxlbWVudHMucHVzaCh0aGlzLmdldEVsZW1lbnQoZWwsIG5hbWUpKTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoX2Vycm9yKSB7XG4gICAgICAgIGUgPSBfZXJyb3I7XG4gICAgICAgIGVsZW1lbnRzID0gbnVsbDtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBlbHMgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIGVsZW1lbnRzID0gW107XG4gICAgICBfcmVmID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChlbHMpO1xuICAgICAgZm9yIChfaiA9IDAsIF9sZW4xID0gX3JlZi5sZW5ndGg7IF9qIDwgX2xlbjE7IF9qKyspIHtcbiAgICAgICAgZWwgPSBfcmVmW19qXTtcbiAgICAgICAgZWxlbWVudHMucHVzaChlbCk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChlbHMubm9kZVR5cGUgIT0gbnVsbCkge1xuICAgICAgZWxlbWVudHMgPSBbZWxzXTtcbiAgICB9XG4gICAgaWYgKCEoKGVsZW1lbnRzICE9IG51bGwpICYmIGVsZW1lbnRzLmxlbmd0aCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgYFwiICsgbmFtZSArIFwiYCBvcHRpb24gcHJvdmlkZWQuIFBsZWFzZSBwcm92aWRlIGEgQ1NTIHNlbGVjdG9yLCBhIHBsYWluIEhUTUwgZWxlbWVudCBvciBhIGxpc3Qgb2YgdGhvc2UuXCIpO1xuICAgIH1cbiAgICByZXR1cm4gZWxlbWVudHM7XG4gIH07XG5cbiAgRHJvcHpvbmUuY29uZmlybSA9IGZ1bmN0aW9uKHF1ZXN0aW9uLCBhY2NlcHRlZCwgcmVqZWN0ZWQpIHtcbiAgICBpZiAod2luZG93LmNvbmZpcm0ocXVlc3Rpb24pKSB7XG4gICAgICByZXR1cm4gYWNjZXB0ZWQoKTtcbiAgICB9IGVsc2UgaWYgKHJlamVjdGVkICE9IG51bGwpIHtcbiAgICAgIHJldHVybiByZWplY3RlZCgpO1xuICAgIH1cbiAgfTtcblxuICBEcm9wem9uZS5pc1ZhbGlkRmlsZSA9IGZ1bmN0aW9uKGZpbGUsIGFjY2VwdGVkRmlsZXMpIHtcbiAgICB2YXIgYmFzZU1pbWVUeXBlLCBtaW1lVHlwZSwgdmFsaWRUeXBlLCBfaSwgX2xlbjtcbiAgICBpZiAoIWFjY2VwdGVkRmlsZXMpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBhY2NlcHRlZEZpbGVzID0gYWNjZXB0ZWRGaWxlcy5zcGxpdChcIixcIik7XG4gICAgbWltZVR5cGUgPSBmaWxlLnR5cGU7XG4gICAgYmFzZU1pbWVUeXBlID0gbWltZVR5cGUucmVwbGFjZSgvXFwvLiokLywgXCJcIik7XG4gICAgZm9yIChfaSA9IDAsIF9sZW4gPSBhY2NlcHRlZEZpbGVzLmxlbmd0aDsgX2kgPCBfbGVuOyBfaSsrKSB7XG4gICAgICB2YWxpZFR5cGUgPSBhY2NlcHRlZEZpbGVzW19pXTtcbiAgICAgIHZhbGlkVHlwZSA9IHZhbGlkVHlwZS50cmltKCk7XG4gICAgICBpZiAodmFsaWRUeXBlLmNoYXJBdCgwKSA9PT0gXCIuXCIpIHtcbiAgICAgICAgaWYgKGZpbGUubmFtZS50b0xvd2VyQ2FzZSgpLmluZGV4T2YodmFsaWRUeXBlLnRvTG93ZXJDYXNlKCksIGZpbGUubmFtZS5sZW5ndGggLSB2YWxpZFR5cGUubGVuZ3RoKSAhPT0gLTEpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICgvXFwvXFwqJC8udGVzdCh2YWxpZFR5cGUpKSB7XG4gICAgICAgIGlmIChiYXNlTWltZVR5cGUgPT09IHZhbGlkVHlwZS5yZXBsYWNlKC9cXC8uKiQvLCBcIlwiKSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAobWltZVR5cGUgPT09IHZhbGlkVHlwZSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfTtcblxuICBpZiAodHlwZW9mIGpRdWVyeSAhPT0gXCJ1bmRlZmluZWRcIiAmJiBqUXVlcnkgIT09IG51bGwpIHtcbiAgICBqUXVlcnkuZm4uZHJvcHpvbmUgPSBmdW5jdGlvbihvcHRpb25zKSB7XG4gICAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gbmV3IERyb3B6b25lKHRoaXMsIG9wdGlvbnMpO1xuICAgICAgfSk7XG4gICAgfTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgbW9kdWxlICE9PSBcInVuZGVmaW5lZFwiICYmIG1vZHVsZSAhPT0gbnVsbCkge1xuICAgIG1vZHVsZS5leHBvcnRzID0gRHJvcHpvbmU7XG4gIH0gZWxzZSB7XG4gICAgd2luZG93LkRyb3B6b25lID0gRHJvcHpvbmU7XG4gIH1cblxuICBEcm9wem9uZS5BRERFRCA9IFwiYWRkZWRcIjtcblxuICBEcm9wem9uZS5RVUVVRUQgPSBcInF1ZXVlZFwiO1xuXG4gIERyb3B6b25lLkFDQ0VQVEVEID0gRHJvcHpvbmUuUVVFVUVEO1xuXG4gIERyb3B6b25lLlVQTE9BRElORyA9IFwidXBsb2FkaW5nXCI7XG5cbiAgRHJvcHpvbmUuUFJPQ0VTU0lORyA9IERyb3B6b25lLlVQTE9BRElORztcblxuICBEcm9wem9uZS5DQU5DRUxFRCA9IFwiY2FuY2VsZWRcIjtcblxuICBEcm9wem9uZS5FUlJPUiA9IFwiZXJyb3JcIjtcblxuICBEcm9wem9uZS5TVUNDRVNTID0gXCJzdWNjZXNzXCI7XG5cblxuICAvKlxuICBcbiAgQnVnZml4IGZvciBpT1MgNiBhbmQgN1xuICBTb3VyY2U6IGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMTE5MjkwOTkvaHRtbDUtY2FudmFzLWRyYXdpbWFnZS1yYXRpby1idWctaW9zXG4gIGJhc2VkIG9uIHRoZSB3b3JrIG9mIGh0dHBzOi8vZ2l0aHViLmNvbS9zdG9taXRhL2lvcy1pbWFnZWZpbGUtbWVnYXBpeGVsXG4gICAqL1xuXG4gIGRldGVjdFZlcnRpY2FsU3F1YXNoID0gZnVuY3Rpb24oaW1nKSB7XG4gICAgdmFyIGFscGhhLCBjYW52YXMsIGN0eCwgZGF0YSwgZXksIGloLCBpdywgcHksIHJhdGlvLCBzeTtcbiAgICBpdyA9IGltZy5uYXR1cmFsV2lkdGg7XG4gICAgaWggPSBpbWcubmF0dXJhbEhlaWdodDtcbiAgICBjYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiY2FudmFzXCIpO1xuICAgIGNhbnZhcy53aWR0aCA9IDE7XG4gICAgY2FudmFzLmhlaWdodCA9IGloO1xuICAgIGN0eCA9IGNhbnZhcy5nZXRDb250ZXh0KFwiMmRcIik7XG4gICAgY3R4LmRyYXdJbWFnZShpbWcsIDAsIDApO1xuICAgIGRhdGEgPSBjdHguZ2V0SW1hZ2VEYXRhKDAsIDAsIDEsIGloKS5kYXRhO1xuICAgIHN5ID0gMDtcbiAgICBleSA9IGloO1xuICAgIHB5ID0gaWg7XG4gICAgd2hpbGUgKHB5ID4gc3kpIHtcbiAgICAgIGFscGhhID0gZGF0YVsocHkgLSAxKSAqIDQgKyAzXTtcbiAgICAgIGlmIChhbHBoYSA9PT0gMCkge1xuICAgICAgICBleSA9IHB5O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3kgPSBweTtcbiAgICAgIH1cbiAgICAgIHB5ID0gKGV5ICsgc3kpID4+IDE7XG4gICAgfVxuICAgIHJhdGlvID0gcHkgLyBpaDtcbiAgICBpZiAocmF0aW8gPT09IDApIHtcbiAgICAgIHJldHVybiAxO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gcmF0aW87XG4gICAgfVxuICB9O1xuXG4gIGRyYXdJbWFnZUlPU0ZpeCA9IGZ1bmN0aW9uKGN0eCwgaW1nLCBzeCwgc3ksIHN3LCBzaCwgZHgsIGR5LCBkdywgZGgpIHtcbiAgICB2YXIgdmVydFNxdWFzaFJhdGlvO1xuICAgIHZlcnRTcXVhc2hSYXRpbyA9IGRldGVjdFZlcnRpY2FsU3F1YXNoKGltZyk7XG4gICAgcmV0dXJuIGN0eC5kcmF3SW1hZ2UoaW1nLCBzeCwgc3ksIHN3LCBzaCwgZHgsIGR5LCBkdywgZGggLyB2ZXJ0U3F1YXNoUmF0aW8pO1xuICB9O1xuXG5cbiAgLypcbiAgICogY29udGVudGxvYWRlZC5qc1xuICAgKlxuICAgKiBBdXRob3I6IERpZWdvIFBlcmluaSAoZGllZ28ucGVyaW5pIGF0IGdtYWlsLmNvbSlcbiAgICogU3VtbWFyeTogY3Jvc3MtYnJvd3NlciB3cmFwcGVyIGZvciBET01Db250ZW50TG9hZGVkXG4gICAqIFVwZGF0ZWQ6IDIwMTAxMDIwXG4gICAqIExpY2Vuc2U6IE1JVFxuICAgKiBWZXJzaW9uOiAxLjJcbiAgICpcbiAgICogVVJMOlxuICAgKiBodHRwOi8vamF2YXNjcmlwdC5ud2JveC5jb20vQ29udGVudExvYWRlZC9cbiAgICogaHR0cDovL2phdmFzY3JpcHQubndib3guY29tL0NvbnRlbnRMb2FkZWQvTUlULUxJQ0VOU0VcbiAgICovXG5cbiAgY29udGVudExvYWRlZCA9IGZ1bmN0aW9uKHdpbiwgZm4pIHtcbiAgICB2YXIgYWRkLCBkb2MsIGRvbmUsIGluaXQsIHBvbGwsIHByZSwgcmVtLCByb290LCB0b3A7XG4gICAgZG9uZSA9IGZhbHNlO1xuICAgIHRvcCA9IHRydWU7XG4gICAgZG9jID0gd2luLmRvY3VtZW50O1xuICAgIHJvb3QgPSBkb2MuZG9jdW1lbnRFbGVtZW50O1xuICAgIGFkZCA9IChkb2MuYWRkRXZlbnRMaXN0ZW5lciA/IFwiYWRkRXZlbnRMaXN0ZW5lclwiIDogXCJhdHRhY2hFdmVudFwiKTtcbiAgICByZW0gPSAoZG9jLmFkZEV2ZW50TGlzdGVuZXIgPyBcInJlbW92ZUV2ZW50TGlzdGVuZXJcIiA6IFwiZGV0YWNoRXZlbnRcIik7XG4gICAgcHJlID0gKGRvYy5hZGRFdmVudExpc3RlbmVyID8gXCJcIiA6IFwib25cIik7XG4gICAgaW5pdCA9IGZ1bmN0aW9uKGUpIHtcbiAgICAgIGlmIChlLnR5cGUgPT09IFwicmVhZHlzdGF0ZWNoYW5nZVwiICYmIGRvYy5yZWFkeVN0YXRlICE9PSBcImNvbXBsZXRlXCIpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgKGUudHlwZSA9PT0gXCJsb2FkXCIgPyB3aW4gOiBkb2MpW3JlbV0ocHJlICsgZS50eXBlLCBpbml0LCBmYWxzZSk7XG4gICAgICBpZiAoIWRvbmUgJiYgKGRvbmUgPSB0cnVlKSkge1xuICAgICAgICByZXR1cm4gZm4uY2FsbCh3aW4sIGUudHlwZSB8fCBlKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHBvbGwgPSBmdW5jdGlvbigpIHtcbiAgICAgIHZhciBlO1xuICAgICAgdHJ5IHtcbiAgICAgICAgcm9vdC5kb1Njcm9sbChcImxlZnRcIik7XG4gICAgICB9IGNhdGNoIChfZXJyb3IpIHtcbiAgICAgICAgZSA9IF9lcnJvcjtcbiAgICAgICAgc2V0VGltZW91dChwb2xsLCA1MCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHJldHVybiBpbml0KFwicG9sbFwiKTtcbiAgICB9O1xuICAgIGlmIChkb2MucmVhZHlTdGF0ZSAhPT0gXCJjb21wbGV0ZVwiKSB7XG4gICAgICBpZiAoZG9jLmNyZWF0ZUV2ZW50T2JqZWN0ICYmIHJvb3QuZG9TY3JvbGwpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICB0b3AgPSAhd2luLmZyYW1lRWxlbWVudDtcbiAgICAgICAgfSBjYXRjaCAoX2Vycm9yKSB7fVxuICAgICAgICBpZiAodG9wKSB7XG4gICAgICAgICAgcG9sbCgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBkb2NbYWRkXShwcmUgKyBcIkRPTUNvbnRlbnRMb2FkZWRcIiwgaW5pdCwgZmFsc2UpO1xuICAgICAgZG9jW2FkZF0ocHJlICsgXCJyZWFkeXN0YXRlY2hhbmdlXCIsIGluaXQsIGZhbHNlKTtcbiAgICAgIHJldHVybiB3aW5bYWRkXShwcmUgKyBcImxvYWRcIiwgaW5pdCwgZmFsc2UpO1xuICAgIH1cbiAgfTtcblxuICBEcm9wem9uZS5fYXV0b0Rpc2NvdmVyRnVuY3Rpb24gPSBmdW5jdGlvbigpIHtcbiAgICBpZiAoRHJvcHpvbmUuYXV0b0Rpc2NvdmVyKSB7XG4gICAgICByZXR1cm4gRHJvcHpvbmUuZGlzY292ZXIoKTtcbiAgICB9XG4gIH07XG5cbiAgY29udGVudExvYWRlZCh3aW5kb3csIERyb3B6b25lLl9hdXRvRGlzY292ZXJGdW5jdGlvbik7XG5cbn0pLmNhbGwodGhpcyk7XG4iLCJkZWZpbmUoZnVuY3Rpb24oKSB7XG4gICAgY29uc3QgT3JkZXJfTGlzdF9EZXRhaWwgPSAoeyB1dWlkLCBiYXNrZXRGaWVsZDEsIGN1c3RvbWVySW5mbywgYmFza2V0RmllbGQyLCBwb3MsIHByaWNlLCBwcm9kdWN0LCBzdGF0dXMsIGFsbE5ldCwgcmVPcmRlciwgcmVPcmRlck9yZGVyLCByZU9yZGVyUG9zIH0sIG9yZGVyVXVpZCkgPT4gYFxuICAgICAgICA8ZGl2IHN0eWxlPVwiJHtwc2Mub3JkZXIuZ2V0X3Bvc19iZ19jb2xvcihzdGF0dXMpfVwiIGNsYXNzPVwicm93ICR7cHNjLm9yZGVyLmdldF9wb3NfYmdfY29sb3JfY2xhc3Moc3RhdHVzKX1cIiBpZD1cInJvdy0ke3V1aWR9XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEgcC0xXCI+JHtwb3N9PC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTQgcC0xXCI+XG4gICAgICAgICAgICAke1xuICAgICAgICAgICAgICAgIChwcm9kdWN0ID0+IHByb2R1Y3Qub3JpZ2luYWxQcm9kdWN0ID8gYDxhIGhyZWY9XCIvYXBwcy9iYWNrZW5kL3Byb2R1Y3QvZWRpdC9pbmRleC8ke3Byb2R1Y3Qub3JpZ2luYWxQcm9kdWN0LnV1aWR9XCI+JHtwcm9kdWN0Lm9yaWdpbmFsUHJvZHVjdC50aXRsZX08L2E+YCA6IGA8YSBocmVmPVwiL2FwcHMvYmFja2VuZC9wcm9kdWN0L2VkaXQvaW5kZXgvJHtwcm9kdWN0LnV1aWR9XCI+JHtwcm9kdWN0LnRpdGxlfTwvYT5gICkocHJvZHVjdCkgLy9jYWxsIHRoZSBhbm9ueW1vdXMgaW5saW5lIHdpdGggdGhlIGRhdGEgd2UgY2FyZSBhYm91dFxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgPGJyLz5BcnROciBpbnRlcm46ICR7cHJvZHVjdC5uckludGVybn08YnIvPlxuICAgICAgICAgICAgJHtwc2Mub3JkZXIuZ2V0X3NwZWNpYWxfcHJvZHVjdF9vcHRpb25zKHByb2R1Y3Quc3BlY2lhbFByb2R1Y3RUeXBlT2JqZWN0KX08L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMSBwLTFcIj5BdWZsYWdlOiAke3ByaWNlLmNvdW50fTwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xIHAtMVwiPkt1bmRlbiBJbmZvOiAke2N1c3RvbWVySW5mb30keyhyZU9yZGVyPyBgPGJyLz48c3Ryb25nPklzdCBlaW5lIE5hY2hiZXN0ZWxsdW5nPC9zdHJvbmc+YDpgYCl9PC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEgcC0xXCI+JHtiYXNrZXRGaWVsZDF9PC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEgcC0xXCI+JHtiYXNrZXRGaWVsZDJ9PC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEgcC0xIHRleHQtZW5kXCI+JHtuZXcgSW50bC5OdW1iZXJGb3JtYXQoJ2RlLURFJywgeyBzdHlsZTogJ2N1cnJlbmN5JywgY3VycmVuY3k6ICdFVVInIH0pLmZvcm1hdChwcmljZS5hbGxOZXQvMTAwKX0gPHN0cm9uZz4oJHtuZXcgSW50bC5OdW1iZXJGb3JtYXQoJ2RlLURFJywgeyBzdHlsZTogJ2N1cnJlbmN5JywgY3VycmVuY3k6ICdFVVInIH0pLmZvcm1hdChwcmljZS5hbGxHcm9zcy8xMDApfSk8L3N0cm9uZz48L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMiBwLTIgdGV4dC1lbmRcIj48ZGl2IGNsYXNzPVwiYnRuLWdyb3VwIGJ0bi1ncm91cC1zbSB3LTEwMFwiPlxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBkcm9wZG93bi10b2dnbGVcIiBkYXRhLWJzLXRvZ2dsZT1cImRyb3Bkb3duXCIgYXJpYS1oYXNwb3B1cD1cInRydWVcIiBhcmlhLWV4cGFuZGVkPVwiZmFsc2VcIj5cbiAgICAgICAgICAgICAgICAgICAgJHtwc2Mub3JkZXIuZ2V0X3Bvc19zdGF0dXMoc3RhdHVzKS5pbnRlcm5hbE5hbWV9XG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHJvcGRvd24tbWVudVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgJHtwc2Mub3JkZXIuZ2V0X3Bvc19zdGF0dXNfbG9vcChvcmRlclV1aWQsIHV1aWQpfVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj48L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMSBwLTFcIj48L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgYDtcblxuICAgIGNvbnN0IE9yZGVyX0xpc3RfRGV0YWlsX1NpbXBsZSA9ICh7IHV1aWQsIGJhc2tldEZpZWxkMSwgY3VzdG9tZXJJbmZvLCBiYXNrZXRGaWVsZDIsIHBvcywgcHJpY2UsIHByb2R1Y3QsIHN0YXR1cywgYWxsTmV0IH0sIG9yZGVyVXVpZCkgPT4gYFxuICAgICAgICA8dHIgc3R5bGU9XCIke3BzYy5vcmRlci5nZXRfcG9zX2JnX2NvbG9yKHN0YXR1cyl9XCIgY2xhc3M9XCIke3BzYy5vcmRlci5nZXRfcG9zX2JnX2NvbG9yX2NsYXNzKHN0YXR1cyl9XCI+XG4gICAgICAgIDx0ZD4tPC90ZD5cbiAgICAgICAgPHRkPjwvdGQ+XG4gICAgICAgIDx0ZD4ke3Bvc308L3RkPlxuICAgICAgICA8dGQgY29sc3Bhbj1cIjRcIj4ke1xuICAgICAgICAocHJvZHVjdCA9PiBwcm9kdWN0Lm9yaWdpbmFsUHJvZHVjdCA/IGA8YSBocmVmPVwiL2FwcHMvYmFja2VuZC9wcm9kdWN0L2VkaXQvaW5kZXgvJHtwcm9kdWN0Lm9yaWdpbmFsUHJvZHVjdC51dWlkfVwiPiR7cHJvZHVjdC5vcmlnaW5hbFByb2R1Y3QudGl0bGV9PC9hPmAgOiBgPGEgaHJlZj1cIi9hcHBzL2JhY2tlbmQvcHJvZHVjdC9lZGl0L2luZGV4LyR7cHJvZHVjdC51dWlkfVwiPiR7cHJvZHVjdC50aXRsZX08L2E+YCApKHByb2R1Y3QpIC8vY2FsbCB0aGUgYW5vbnltb3VzIGlubGluZSB3aXRoIHRoZSBkYXRhIHdlIGNhcmUgYWJvdXRcbiAgICB9PGJyLz5BcnROciBpbnRlcm46ICR7cHJvZHVjdC5uckludGVybn08YnIvPlxuICAgICAgICAke3BzYy5vcmRlci5nZXRfc3BlY2lhbF9wcm9kdWN0X29wdGlvbnMocHJvZHVjdC5zcGVjaWFsUHJvZHVjdFR5cGVPYmplY3QpfTwvdGQ+XG4gICAgICAgIDx0ZD5BdWZsYWdlOiAke3ByaWNlLmNvdW50fTwvdGQ+XG4gICAgICAgIDx0ZD5LdW5kZW4gSW5mbzogJHtjdXN0b21lckluZm99PC90ZD5cbiAgICAgICAgPHRkPiR7YmFza2V0RmllbGQxfTwvdGQ+XG4gICAgICAgIDx0ZD4ke2Jhc2tldEZpZWxkMn08L3RkPlxuICAgICAgICA8dGQ+PC90ZD5cbiAgICAgICAgPHRkIGNsYXNzPVwidGV4dC1lbmRcIj4ke25ldyBJbnRsLk51bWJlckZvcm1hdCgnZGUtREUnLCB7IHN0eWxlOiAnY3VycmVuY3knLCBjdXJyZW5jeTogJ0VVUicgfSkuZm9ybWF0KHByaWNlLmFsbE5ldC8xMDApfSA8c3Ryb25nPigke25ldyBJbnRsLk51bWJlckZvcm1hdCgnZGUtREUnLCB7IHN0eWxlOiAnY3VycmVuY3knLCBjdXJyZW5jeTogJ0VVUicgfSkuZm9ybWF0KHByaWNlLmFsbEdyb3NzLzEwMCl9KTwvc3Ryb25nPjwvdGQ+XG4gICAgICAgIDx0ZD4ke3BzYy5vcmRlci5nZXRfcG9zX3N0YXR1cyhzdGF0dXMpLmludGVybmFsTmFtZX08L3RkPlxuICAgICAgICA8dGQ+PC90ZD5cbiAgICA8L3RyPlxuICAgIGA7XG5cbiAgICBjb25zdCBPcmRlcl9MaXN0X1Bvc19TdGF0dXMgPSAoc3RhdHVzLCBvcmRlclV1aWQsIHBvc1V1aWQpID0+IGBcbiAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJkcm9wZG93bi1pdGVtIHN3aXRjaF9wb3NcIiBkYXRhLW9yZGVyLXV1aWQ9XCIke29yZGVyVXVpZH1cIiBkYXRhLXBvcy11dWlkPVwiJHtwb3NVdWlkfVwiIGRhdGEtc3RhdHVzPVwiJHtzdGF0dXMuY29kZX1cIj4ke3N0YXR1cy5pbnRlcm5hbE5hbWV9PC9idXR0b24+XG4gICAgYDtcblxuICAgIGNvbnN0IE9yZGVyX0xpc3RfUG9zX0NhbGNfT3B0aW9uID0gKGVsbSkgPT4gYFxuICAgICAgICA8dHI+PHRkPiR7ZWxtLm5hbWV9PC90ZD48dGQ+JHtlbG0udmFsdWV9PC90ZD48L3RyPlxuICAgIGA7XG4gICAgXG4gICAgcmV0dXJuIHtcbiAgICAgICAgXG4gICAgICAgIGluaXQoKSB7XG5cbiAgICAgICAgICAgIHRoaXMubG9hZF9zdGF0dXMoKTtcbiAgICAgICAgICAgIHRoaXMuYmluZF9idXR0b25zKCk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgZ2V0X3NwZWNpYWxfcHJvZHVjdF9vcHRpb25zKHNwZWNpYWxQcm9kdWN0VHlwZU9iamVjdCkge1xuICAgICAgICAgICAgaWYoc3BlY2lhbFByb2R1Y3RUeXBlT2JqZWN0LnR5cCAhPSA2KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gJzx0YWJsZT4nICsgc3BlY2lhbFByb2R1Y3RUeXBlT2JqZWN0Lm9wdGlvbnMubWFwKGVsbSA9PiB7XG4gICAgICAgICAgICAgICAgaWYoZWxtLnR5cGUgIT0gJ2hpZGRlbicpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE9yZGVyX0xpc3RfUG9zX0NhbGNfT3B0aW9uKGVsbSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSkuam9pbignJykgKyAnPC90YWJsZT4nO1xuICAgICAgICB9LFxuXG4gICAgICAgIGxvYWRfc3RhdHVzKCkge1xuICAgICAgICAgICAgaWYoand0X3Rva2VuICE9IFwiXCIpIHtcbiAgICAgICAgICAgICAgICAkLmFqYXgoe1xuICAgICAgICAgICAgICAgICAgICB1cmw6IFwiL2FwcHMvYXBpL3N5c3RlbS9zdGF0dXNcIixcbiAgICAgICAgICAgICAgICAgICAgY29udGVudFR5cGU6IFwiYXBwbGljYXRpb24vanNvblwiLFxuICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBcIkF1dGhvcml6YXRpb25cIjogXCJCZWFyZXIgXCIgKyBqd3RfdG9rZW5cbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgbWV0aG9kOiAnR0VUJyxcbiAgICAgICAgICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24gKHJlc3VsdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcHNjLm9yZGVyLnN0YXR1c19vcmRlciA9IHJlc3VsdC5vcmRlcjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBzYy5vcmRlci5zdGF0dXNfcG9zID0gcmVzdWx0LnBvc2l0aW9uO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG5cbiAgICAgICAgYmluZF9idXR0b25zKCkge1xuICAgICAgICAgICAgJCgnLnRvb2dsZV9saXN0X2RldGFpbF92aWV3Jykub2ZmKCk7XG4gICAgICAgICAgICAkKCcudG9vZ2xlX2xpc3RfZGV0YWlsX3ZpZXcnKS5vbignY2xpY2snLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICB2YXIgdXVpZCA9ICQodGhpcykuZGF0YSgpLnV1aWQ7IFxuICAgICAgICAgICAgICAgIGlmKCQoJyNyb3dzLScgKyB1dWlkICsgJyA+IGRpdicpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgJCgnI3Jvd3MtJyArIHV1aWQpLmh0bWwoJycpO1xuICAgICAgICAgICAgICAgIH1lbHNle1xuICAgICAgICAgICAgICAgICAgICBwc2Mub3JkZXIubG9hZF9kZXRhaWwodXVpZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICQoJy50b29nbGVfbGlzdF9zaW1wbGVfZGV0YWlsX3ZpZXcnKS5vZmYoKTtcbiAgICAgICAgICAgICQoJy50b29nbGVfbGlzdF9zaW1wbGVfZGV0YWlsX3ZpZXcnKS5vbignY2xpY2snLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICB2YXIgdXVpZCA9ICQodGhpcykuZGF0YSgpLnV1aWQ7IFxuICAgICAgICAgICAgICAgIGlmKCQoJyNyb3dzLScgKyB1dWlkICsgJyA+IHRyJykubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAkKCcjcm93cy0nICsgdXVpZCkuaHRtbCgnJyk7XG4gICAgICAgICAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICAgICAgICAgIHBzYy5vcmRlci5sb2FkX2RldGFpbCh1dWlkLCB0cnVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgXG4gICAgICAgIH0sXG5cbiAgICAgICAgbG9hZF9kZXRhaWwob3JkZXJVdWlkLCBzaW1wbGUgPSBmYWxzZSkge1xuICAgICAgICAgICAgJC5hamF4KHtcbiAgICAgICAgICAgICAgICB1cmw6IFwiL2FwcHMvYXBpL29yZGVyL2dldG9uZWJ5dXVpZFwiLFxuICAgICAgICAgICAgICAgIGNvbnRlbnRUeXBlOiBcImFwcGxpY2F0aW9uL2pzb25cIixcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAgICAgICAgIFwiQXV0aG9yaXphdGlvblwiOiBcIkJlYXJlciBcIiArIGp3dF90b2tlblxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgICAgICAgICAgZGF0YTogSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgICAgICAgICAgICB1dWlkOiBvcmRlclV1aWRcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbihyZXN1bHQpIHtcbiAgICAgICAgICAgICAgICAgICAgcHNjLm9yZGVyLmJ1aWxkX2RldGFpbHMob3JkZXJVdWlkLCByZXN1bHQsIHNpbXBsZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgfSxcblxuICAgICAgICBidWlsZF9kZXRhaWxzKG9yZGVyVXVpZCwgcmVzdWx0LCBzaW1wbGUgPSBmYWxzZSkge1xuICAgICAgICAgICAgaWYoc2ltcGxlKSB7XG4gICAgICAgICAgICAgICAgJCgnI3Jvd3MtJyArIHJlc3VsdC51dWlkKS5odG1sKHJlc3VsdC5wb3NpdGlvbnMubWFwKHggPT4gT3JkZXJfTGlzdF9EZXRhaWxfU2ltcGxlKHgsIG9yZGVyVXVpZCkpLmpvaW4oJycpKTtcbiAgICAgICAgICAgIH1lbHNle1xuICAgICAgICAgICAgICAgICQoJyNyb3dzLScgKyByZXN1bHQudXVpZCkuaHRtbChyZXN1bHQucG9zaXRpb25zLm1hcCh4ID0+IE9yZGVyX0xpc3RfRGV0YWlsKHgsIG9yZGVyVXVpZCkpLmpvaW4oJycpKTtcbiAgICAgICAgICAgICAgICByZXN1bHQucG9zaXRpb25zLm1hcCh4ID0+IHRoaXMubG9hZFBsdWdpbkRldGFpbHMoeCkpO1xuXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHRoaXMuYmluZF9zdGF0dXNfYnV0dG9ucygpO1xuICAgICAgICB9LFxuXG4gICAgICAgIGxvYWRQbHVnaW5EZXRhaWxzKHBvcykge1xuICAgICAgICAgICAgJC5hamF4KHtcbiAgICAgICAgICAgICAgICB1cmw6IFwiL2FwcHMvYXBpL3Bvc2l0aW9uL2dldHBsdWdpbmxpc3RkZXRhaWxzL1wiICsgcG9zLnV1aWQsXG4gICAgICAgICAgICAgICAgY29udGVudFR5cGU6IFwiYXBwbGljYXRpb24vanNvblwiLFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgICAgICAgXCJBdXRob3JpemF0aW9uXCI6IFwiQmVhcmVyIFwiICsgand0X3Rva2VuXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBtZXRob2Q6ICdHRVQnLFxuICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uKHJlc3VsdCkge1xuICAgICAgICAgICAgICAgICAgICAkKCcjcm93LScgKyBwb3MudXVpZCkuYXBwZW5kKHJlc3VsdC5odG1sKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuICAgICAgICB9LFxuXG4gICAgICAgIGJpbmRfc3RhdHVzX2J1dHRvbnMoKSB7XG4gICAgICAgICAgICAkKCcuc3dpdGNoX3BvcycpLm9mZigpO1xuICAgICAgICAgICAgJCgnLnN3aXRjaF9wb3MnKS5vbignY2xpY2snLCBmdW5jdGlvbigpIHtcblxuICAgICAgICAgICAgICAgIHZhciBvcmRlclV1aWQgPSAkKHRoaXMpLmRhdGEoKS5vcmRlclV1aWQ7XG4gICAgICAgICAgICAgICAgdmFyIHBvc1V1aWQgPSAkKHRoaXMpLmRhdGEoKS5wb3NVdWlkO1xuICAgICAgICAgICAgICAgIHZhciBzdGF0dXMgPSAkKHRoaXMpLmRhdGEoKS5zdGF0dXM7XG5cbiAgICAgICAgICAgICAgICAkLmFqYXgoe1xuICAgICAgICAgICAgICAgICAgICB1cmw6IFwiL2FwcHMvYXBpL3Bvc2l0aW9uL3N0YXR1cy9jaGFuZ2VcIixcbiAgICAgICAgICAgICAgICAgICAgY29udGVudFR5cGU6IFwiYXBwbGljYXRpb24vanNvblwiLFxuICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBcIkF1dGhvcml6YXRpb25cIjogXCJCZWFyZXIgXCIgKyBqd3RfdG9rZW5cbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgZGF0YTogSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb246IHBvc1V1aWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXM6IHN0YXR1cyxcbiAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICAgICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbihyZXN1bHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICQoJyNyb3dzLScgKyBvcmRlclV1aWQpLmh0bWwoJycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcHNjLm9yZGVyLmxvYWRfZGV0YWlsKG9yZGVyVXVpZCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuXG4gICAgICAgIGdldF9wb3NfYmdfY29sb3Ioc3RhdHVzKSB7XG5cbiAgICAgICAgICAgIC8qXG4gICAgICAgICAgICB7JSBpZiBvcmRlclN0YXR1c2UuZ2V0UG9zU3RhdHVzQ29sb3IocG9zLnN0YXR1cykgIT0gJycgJX1iYWNrZ3JvdW5kLWNvbG9yOiB7eyBvcmRlclN0YXR1c2UuZ2V0UG9zU3RhdHVzQ29sb3IocG9zLnN0YXR1cykgfX17JSBlbmRpZiAlfVwiXG4gICAgICAgICAgICAqL1xuICAgICAgICAgICAgY29uc3QgZm91bmQgPSBwc2Mub3JkZXIuc3RhdHVzX3Bvcy5maW5kKHN0YXQgPT4gc3RhdC5jb2RlID09IHN0YXR1cyk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGlmKGZvdW5kICYmIGZvdW5kLmNvbG9yICE9IFwiXCIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2JhY2tncm91bmQtY29sb3I6ICcgKyBmb3VuZC5jb2xvcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFxuICAgICAgICB9LFxuXG4gICAgICAgIGdldF9wb3Nfc3RhdHVzKHN0YXR1cykge1xuXG4gICAgICAgICAgICAvKlxuICAgICAgICAgICAgeyUgaWYgb3JkZXJTdGF0dXNlLmdldFBvc1N0YXR1c0NvbG9yKHBvcy5zdGF0dXMpICE9ICcnICV9YmFja2dyb3VuZC1jb2xvcjoge3sgb3JkZXJTdGF0dXNlLmdldFBvc1N0YXR1c0NvbG9yKHBvcy5zdGF0dXMpIH19eyUgZW5kaWYgJX1cIlxuICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIGNvbnN0IGZvdW5kID0gcHNjLm9yZGVyLnN0YXR1c19wb3MuZmluZChzdGF0ID0+IHN0YXQuY29kZSA9PSBzdGF0dXMpO1xuICAgICAgICAgICAgaWYoZm91bmQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZm91bmQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiB7aW50ZXJuYWxOYW1lOiAnbm90Rm91bmQnfTtcblxuICAgICAgICB9LFxuXG4gICAgICAgIGdldF9wb3NfYmdfY29sb3JfY2xhc3Moc3RhdHVzKSB7XG5cbiAgICAgICAgICAgIC8qXG4gICAgICAgICAgICBjbGFzcz1cInslIGlmIHBvcy5zdGF0dXMgPT0gMTcwICV9YmctbGlnaHRkYXJreyUgZWxzZWlmIHBvcy5zdGF0dXMgPT0gMjAwIG9yIHBvcy5zdGF0dXMgPT0gMjEwICV9YmctbGlnaHRzdWNjZXNzeyUgZWxzZSAlfWJnLWxpZ2h0ZGFuZ2VyeyUgZW5kaWYgJX1cbiAgICAgICAgICAgICovXG5cbiAgICAgICAgICAgIGlmKHN0YXR1cyA9PSAxNzApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2JnLWxpZ2h0ZGFyayc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZihzdGF0dXMgPT0gMjAwIHx8IHN0YXR1cyA9PSAyMTApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2JnLWxpZ2h0c3VjY2Vzcyc7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiAnYmctbGlnaHRkYW5nZXInO1xuICAgICAgICB9LFxuXG4gICAgICAgIGdldF9wb3Nfc3RhdHVzX2xvb3Aob3JkZXJVdWlkLCBwb3NVdWlkKSB7XG4gICAgICAgICAgICByZXR1cm4gcHNjLm9yZGVyLnN0YXR1c19wb3MubWFwKHggPT4gT3JkZXJfTGlzdF9Qb3NfU3RhdHVzKHgsIG9yZGVyVXVpZCwgcG9zVXVpZCkpLmpvaW4oJycpO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgIH1cbn0pO1xuIiwiZGVmaW5lKGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB7XG5cbiAgICAgICAgaW5pdCgpIHtcbiAgICAgICAgICAgIHNldCA9IHJlcXVpcmUoJy4vcHJvZHVjdC9zZXQnKTtcbiAgICAgICAgICAgIHNldC5pbml0KCk7XG4gICAgICAgIH1cbiAgICB9XG59KTsiLCJkZWZpbmUoZnVuY3Rpb24oKSB7XG4gICAgZnVuY3Rpb24gYnVpbGRUYWJsZShyZXN1bHQpIHtcbiAgICAgICAgJCgnLnByb2R1Y3Rfc2V0X3RhYmxlID4gdGJvZHknKS5lbXB0eSgpO1xuXG4gICAgICAgICQuZWFjaChyZXN1bHQucHJvZHVjdHMsIGZ1bmN0aW9uKGluZGV4LCBpdGVtKSB7XG4gICAgICAgICAgICAkKCcucHJvZHVjdF9zZXRfdGFibGUgPiB0Ym9keScpLmFwcGVuZCgnPHRyPjx0ZD4nICsgaXRlbS50aXRsZSArICc8L3RkPjx0ZD48YnV0dG9uIHR5cGU9XCJidXR0b25cIiBkYXRhLXV1aWQ9JyArIGl0ZW0udXVpZCArICcgY2xhc3M9XCJidG4gYnRuLWRhbmdlciBidG4tc20gcHJvZHVjdF9zZXRfZGVsZXRlX2J1dHRvblwiPjxzcGFuIGNsYXNzPVwiZmEgZmEtdHJhc2hcIj48L3NwYW4+PC9idXR0b24+PC90ZD48L3RyPicpO1xuICAgICAgICB9KVxuXG4gICAgICAgIGJpbmREZWxldGVCdXR0b25zKCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYmluZERlbGV0ZUJ1dHRvbnMoKSB7XG4gICAgICAgICQoJy5wcm9kdWN0X3NldF9kZWxldGVfYnV0dG9uJykuY2xpY2soZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAkKCcjb3ZlcmxheV9sb2FkaW5nJykuZmFkZUluKCk7XG4gICAgICAgICAgICAkLmFqYXgoe1xuICAgICAgICAgICAgICAgIHVybDogXCIvYXBwcy9hcGkvcHJvZHVjdC9cIiArIHByb2R1Y3RVdWlkICsgXCIvc2V0XCIsXG4gICAgICAgICAgICAgICAgY29udGVudFR5cGU6IFwiYXBwbGljYXRpb24vanNvblwiLFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgICAgICAgXCJBdXRob3JpemF0aW9uXCI6IFwiQmVhcmVyIFwiICsgand0X3Rva2VuXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBtZXRob2Q6ICdERUxFVEUnLFxuICAgICAgICAgICAgICAgIGRhdGE6IEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICAgICAgICAgICAgcHJvZHVjdDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgdXVpZDogJCh0aGlzKS5kYXRhKCd1dWlkJylcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uIChyZXN1bHQpIHtcbiAgICAgICAgICAgICAgICAgICAgYnVpbGRUYWJsZShyZXN1bHQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgICAgICAkKCcjb3ZlcmxheV9sb2FkaW5nJykuZmFkZU91dCgpO1xuICAgIH1cbiAgICByZXR1cm4ge1xuXG4gICAgICAgIGluaXQoKSB7XG4gICAgICAgICAgICBpZigkKCcucHJvZHVjdF9zZXRfYWRkX2J1dHRvbicpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLmluaXRBZGRCdXR0b24oKTtcbiAgICAgICAgICAgICAgICB0aGlzLmxvYWRUYWJsZSgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIH0sXG5cbiAgICAgICAgaW5pdEFkZEJ1dHRvbigpIHtcbiAgICAgICAgICAgICQoJy5wcm9kdWN0X3NldF9hZGRfYnV0dG9uJykuY2xpY2soZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgJCgnI292ZXJsYXlfbG9hZGluZycpLmZhZGVJbigpO1xuICAgICAgICAgICAgICAgICQuYWpheCh7XG4gICAgICAgICAgICAgICAgICAgIHVybDogXCIvYXBwcy9hcGkvcHJvZHVjdC9cIiArIHByb2R1Y3RVdWlkICsgXCIvc2V0XCIsXG4gICAgICAgICAgICAgICAgICAgIGNvbnRlbnRUeXBlOiBcImFwcGxpY2F0aW9uL2pzb25cIixcbiAgICAgICAgICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgXCJBdXRob3JpemF0aW9uXCI6IFwiQmVhcmVyIFwiICsgand0X3Rva2VuXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIG1ldGhvZDogJ1BVVCcsXG4gICAgICAgICAgICAgICAgICAgIGRhdGE6IEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb2R1Y3Q6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1dWlkOiAkKHRoaXMpLmRhdGEoJ3V1aWQnKVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24gKHJlc3VsdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGRUYWJsZShyZXN1bHQpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KVxuICAgICAgICB9LFxuXG4gICAgICAgIGxvYWRUYWJsZSgpIHtcbiAgICAgICAgICAgICQoJyNvdmVybGF5X2xvYWRpbmcnKS5mYWRlSW4oKTtcbiAgICAgICAgICAgICQuYWpheCh7XG4gICAgICAgICAgICAgICAgdXJsOiBcIi9hcHBzL2FwaS9wcm9kdWN0L1wiICsgcHJvZHVjdFV1aWQgKyBcIi9zZXRcIixcbiAgICAgICAgICAgICAgICBjb250ZW50VHlwZTogXCJhcHBsaWNhdGlvbi9qc29uXCIsXG4gICAgICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICAgICAgICBcIkF1dGhvcml6YXRpb25cIjogXCJCZWFyZXIgXCIgKyBqd3RfdG9rZW5cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIG1ldGhvZDogJ0dFVCcsXG4gICAgICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24gKHJlc3VsdCkge1xuICAgICAgICAgICAgICAgICAgICBidWlsZFRhYmxlKHJlc3VsdCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG5cblxuICAgIH1cbn0pOyIsIihmdW5jdGlvbiAoZmFjdG9yeSkge1xuICAgIC8qIGdsb2JhbCBkZWZpbmUgKi9cbiAgICBpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKSB7XG4gICAgICAgIC8vIEFNRC4gUmVnaXN0ZXIgYXMgYW4gYW5vbnltb3VzIG1vZHVsZS5cbiAgICAgICAgZGVmaW5lKFsnanF1ZXJ5J10sIGZhY3RvcnkpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIEJyb3dzZXIgZ2xvYmFsczogalF1ZXJ5XG4gICAgICAgIGZhY3Rvcnkod2luZG93LmpRdWVyeSk7XG4gICAgfVxufShmdW5jdGlvbiAoJCl7XG4gICAgJC5leHRlbmQoJC5zdW1tZXJub3RlLnBsdWdpbnMsIHtcbiAgICAgICAgJ21lZGlhJzogZnVuY3Rpb24oY29udGV4dCkge1xuICAgICAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gICAgICAgICAgICAvLyB1aSBoYXMgcmVuZGVycyB0byBidWlsZCB1aSBlbGVtZW50cy5cbiAgICAgICAgICAgIC8vICAtIHlvdSBjYW4gY3JlYXRlIGEgYnV0dG9uIHdpdGggYHVpLmJ1dHRvbmBcbiAgICAgICAgICAgIHZhciB1aSA9ICQuc3VtbWVybm90ZS51aTtcblxuICAgICAgICAgICAgLy8gYWRkIGhlbGxvIGJ1dHRvblxuICAgICAgICAgICAgY29udGV4dC5tZW1vKCdidXR0b24ubWVkaWEnLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAvLyBjcmVhdGUgYnV0dG9uXG4gICAgICAgICAgICAgICAgdmFyIGJ1dHRvbiA9IHVpLmJ1dHRvbih7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRlbnRzOiAnPGkgY2xhc3M9XCJmYSBmYS1pbWFnZXNcIi8+IE1lZGlhJyxcbiAgICAgICAgICAgICAgICAgICAgdG9vbHRpcDogJ01lZGlhJyxcbiAgICAgICAgICAgICAgICAgICAgY2xpY2s6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbWVkaWFCdW5kbGVCcm93c2VyKGNvbnRleHQuJG5vdGUuYXR0cignaWQnKSk7XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAvLyBjcmVhdGUgalF1ZXJ5IG9iamVjdCBmcm9tIGJ1dHRvbiBpbnN0YW5jZS5cbiAgICAgICAgICAgICAgICB2YXIgJG1lZGlhID0gYnV0dG9uLnJlbmRlcigpO1xuICAgICAgICAgICAgICAgIHJldHVybiAkbWVkaWE7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH0pO1xuXG59KSk7IiwiIWZ1bmN0aW9uKHQsZSl7XCJmdW5jdGlvblwiPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kP2RlZmluZShlKTpcIm9iamVjdFwiPT10eXBlb2YgZXhwb3J0cz9tb2R1bGUuZXhwb3J0cz1lKHJlcXVpcmUsZXhwb3J0cyxtb2R1bGUpOnQuVGV0aGVyPWUoKX0odGhpcyxmdW5jdGlvbih0LGUsbyl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gbih0LGUpe2lmKCEodCBpbnN0YW5jZW9mIGUpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIil9ZnVuY3Rpb24gaSh0KXt2YXIgZT10LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLG89e307Zm9yKHZhciBuIGluIGUpb1tuXT1lW25dO2lmKHQub3duZXJEb2N1bWVudCE9PWRvY3VtZW50KXt2YXIgcj10Lm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcuZnJhbWVFbGVtZW50O2lmKHIpe3ZhciBzPWkocik7by50b3ArPXMudG9wLG8uYm90dG9tKz1zLnRvcCxvLmxlZnQrPXMubGVmdCxvLnJpZ2h0Kz1zLmxlZnR9fXJldHVybiBvfWZ1bmN0aW9uIHIodCl7dmFyIGU9Z2V0Q29tcHV0ZWRTdHlsZSh0KXx8e30sbz1lLnBvc2l0aW9uLG49W107aWYoXCJmaXhlZFwiPT09bylyZXR1cm5bdF07Zm9yKHZhciBpPXQ7KGk9aS5wYXJlbnROb2RlKSYmaSYmMT09PWkubm9kZVR5cGU7KXt2YXIgcj12b2lkIDA7dHJ5e3I9Z2V0Q29tcHV0ZWRTdHlsZShpKX1jYXRjaChzKXt9aWYoXCJ1bmRlZmluZWRcIj09dHlwZW9mIHJ8fG51bGw9PT1yKXJldHVybiBuLnB1c2goaSksbjt2YXIgYT1yLGY9YS5vdmVyZmxvdyxsPWEub3ZlcmZsb3dYLGg9YS5vdmVyZmxvd1k7LyhhdXRvfHNjcm9sbCkvLnRlc3QoZitoK2wpJiYoXCJhYnNvbHV0ZVwiIT09b3x8W1wicmVsYXRpdmVcIixcImFic29sdXRlXCIsXCJmaXhlZFwiXS5pbmRleE9mKHIucG9zaXRpb24pPj0wKSYmbi5wdXNoKGkpfXJldHVybiBuLnB1c2godC5vd25lckRvY3VtZW50LmJvZHkpLHQub3duZXJEb2N1bWVudCE9PWRvY3VtZW50JiZuLnB1c2godC5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3KSxufWZ1bmN0aW9uIHMoKXtBJiZkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKEEpLEE9bnVsbH1mdW5jdGlvbiBhKHQpe3ZhciBlPXZvaWQgMDt0PT09ZG9jdW1lbnQ/KGU9ZG9jdW1lbnQsdD1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpOmU9dC5vd25lckRvY3VtZW50O3ZhciBvPWUuZG9jdW1lbnRFbGVtZW50LG49aSh0KSxyPVAoKTtyZXR1cm4gbi50b3AtPXIudG9wLG4ubGVmdC09ci5sZWZ0LFwidW5kZWZpbmVkXCI9PXR5cGVvZiBuLndpZHRoJiYobi53aWR0aD1kb2N1bWVudC5ib2R5LnNjcm9sbFdpZHRoLW4ubGVmdC1uLnJpZ2h0KSxcInVuZGVmaW5lZFwiPT10eXBlb2Ygbi5oZWlnaHQmJihuLmhlaWdodD1kb2N1bWVudC5ib2R5LnNjcm9sbEhlaWdodC1uLnRvcC1uLmJvdHRvbSksbi50b3A9bi50b3Atby5jbGllbnRUb3Asbi5sZWZ0PW4ubGVmdC1vLmNsaWVudExlZnQsbi5yaWdodD1lLmJvZHkuY2xpZW50V2lkdGgtbi53aWR0aC1uLmxlZnQsbi5ib3R0b209ZS5ib2R5LmNsaWVudEhlaWdodC1uLmhlaWdodC1uLnRvcCxufWZ1bmN0aW9uIGYodCl7cmV0dXJuIHQub2Zmc2V0UGFyZW50fHxkb2N1bWVudC5kb2N1bWVudEVsZW1lbnR9ZnVuY3Rpb24gbCgpe3ZhciB0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7dC5zdHlsZS53aWR0aD1cIjEwMCVcIix0LnN0eWxlLmhlaWdodD1cIjIwMHB4XCI7dmFyIGU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtoKGUuc3R5bGUse3Bvc2l0aW9uOlwiYWJzb2x1dGVcIix0b3A6MCxsZWZ0OjAscG9pbnRlckV2ZW50czpcIm5vbmVcIix2aXNpYmlsaXR5OlwiaGlkZGVuXCIsd2lkdGg6XCIyMDBweFwiLGhlaWdodDpcIjE1MHB4XCIsb3ZlcmZsb3c6XCJoaWRkZW5cIn0pLGUuYXBwZW5kQ2hpbGQodCksZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChlKTt2YXIgbz10Lm9mZnNldFdpZHRoO2Uuc3R5bGUub3ZlcmZsb3c9XCJzY3JvbGxcIjt2YXIgbj10Lm9mZnNldFdpZHRoO289PT1uJiYobj1lLmNsaWVudFdpZHRoKSxkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGUpO3ZhciBpPW8tbjtyZXR1cm57d2lkdGg6aSxoZWlnaHQ6aX19ZnVuY3Rpb24gaCgpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg8PTB8fHZvaWQgMD09PWFyZ3VtZW50c1swXT97fTphcmd1bWVudHNbMF0sZT1bXTtyZXR1cm4gQXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkoZSxhcmd1bWVudHMpLGUuc2xpY2UoMSkuZm9yRWFjaChmdW5jdGlvbihlKXtpZihlKWZvcih2YXIgbyBpbiBlKSh7fSkuaGFzT3duUHJvcGVydHkuY2FsbChlLG8pJiYodFtvXT1lW29dKX0pLHR9ZnVuY3Rpb24gdSh0LGUpe2lmKFwidW5kZWZpbmVkXCIhPXR5cGVvZiB0LmNsYXNzTGlzdCllLnNwbGl0KFwiIFwiKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe2UudHJpbSgpJiZ0LmNsYXNzTGlzdC5yZW1vdmUoZSl9KTtlbHNle3ZhciBvPW5ldyBSZWdFeHAoXCIoXnwgKVwiK2Uuc3BsaXQoXCIgXCIpLmpvaW4oXCJ8XCIpK1wiKCB8JClcIixcImdpXCIpLG49Yyh0KS5yZXBsYWNlKG8sXCIgXCIpO2codCxuKX19ZnVuY3Rpb24gZCh0LGUpe2lmKFwidW5kZWZpbmVkXCIhPXR5cGVvZiB0LmNsYXNzTGlzdCllLnNwbGl0KFwiIFwiKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe2UudHJpbSgpJiZ0LmNsYXNzTGlzdC5hZGQoZSl9KTtlbHNle3UodCxlKTt2YXIgbz1jKHQpKyhcIiBcIitlKTtnKHQsbyl9fWZ1bmN0aW9uIHAodCxlKXtpZihcInVuZGVmaW5lZFwiIT10eXBlb2YgdC5jbGFzc0xpc3QpcmV0dXJuIHQuY2xhc3NMaXN0LmNvbnRhaW5zKGUpO3ZhciBvPWModCk7cmV0dXJuIG5ldyBSZWdFeHAoXCIoXnwgKVwiK2UrXCIoIHwkKVwiLFwiZ2lcIikudGVzdChvKX1mdW5jdGlvbiBjKHQpe3JldHVybiB0LmNsYXNzTmFtZSBpbnN0YW5jZW9mIHQub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlldy5TVkdBbmltYXRlZFN0cmluZz90LmNsYXNzTmFtZS5iYXNlVmFsOnQuY2xhc3NOYW1lfWZ1bmN0aW9uIGcodCxlKXt0LnNldEF0dHJpYnV0ZShcImNsYXNzXCIsZSl9ZnVuY3Rpb24gbSh0LGUsbyl7by5mb3JFYWNoKGZ1bmN0aW9uKG8pey0xPT09ZS5pbmRleE9mKG8pJiZwKHQsbykmJnUodCxvKX0pLGUuZm9yRWFjaChmdW5jdGlvbihlKXtwKHQsZSl8fGQodCxlKX0pfWZ1bmN0aW9uIG4odCxlKXtpZighKHQgaW5zdGFuY2VvZiBlKSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpfWZ1bmN0aW9uIHYodCxlKXtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiBlJiZudWxsIT09ZSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCBcIit0eXBlb2YgZSk7dC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlJiZlLnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOnQsZW51bWVyYWJsZTohMSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksZSYmKE9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YodCxlKTp0Ll9fcHJvdG9fXz1lKX1mdW5jdGlvbiB5KHQsZSl7dmFyIG89YXJndW1lbnRzLmxlbmd0aDw9Mnx8dm9pZCAwPT09YXJndW1lbnRzWzJdPzE6YXJndW1lbnRzWzJdO3JldHVybiB0K28+PWUmJmU+PXQtb31mdW5jdGlvbiBiKCl7cmV0dXJuXCJ1bmRlZmluZWRcIiE9dHlwZW9mIHBlcmZvcm1hbmNlJiZcInVuZGVmaW5lZFwiIT10eXBlb2YgcGVyZm9ybWFuY2Uubm93P3BlcmZvcm1hbmNlLm5vdygpOituZXcgRGF0ZX1mdW5jdGlvbiB3KCl7Zm9yKHZhciB0PXt0b3A6MCxsZWZ0OjB9LGU9YXJndW1lbnRzLmxlbmd0aCxvPUFycmF5KGUpLG49MDtlPm47bisrKW9bbl09YXJndW1lbnRzW25dO3JldHVybiBvLmZvckVhY2goZnVuY3Rpb24oZSl7dmFyIG89ZS50b3Asbj1lLmxlZnQ7XCJzdHJpbmdcIj09dHlwZW9mIG8mJihvPXBhcnNlRmxvYXQobywxMCkpLFwic3RyaW5nXCI9PXR5cGVvZiBuJiYobj1wYXJzZUZsb2F0KG4sMTApKSx0LnRvcCs9byx0LmxlZnQrPW59KSx0fWZ1bmN0aW9uIEModCxlKXtyZXR1cm5cInN0cmluZ1wiPT10eXBlb2YgdC5sZWZ0JiYtMSE9PXQubGVmdC5pbmRleE9mKFwiJVwiKSYmKHQubGVmdD1wYXJzZUZsb2F0KHQubGVmdCwxMCkvMTAwKmUud2lkdGgpLFwic3RyaW5nXCI9PXR5cGVvZiB0LnRvcCYmLTEhPT10LnRvcC5pbmRleE9mKFwiJVwiKSYmKHQudG9wPXBhcnNlRmxvYXQodC50b3AsMTApLzEwMCplLmhlaWdodCksdH1mdW5jdGlvbiBPKHQsZSl7cmV0dXJuXCJzY3JvbGxQYXJlbnRcIj09PWU/ZT10LnNjcm9sbFBhcmVudHNbMF06XCJ3aW5kb3dcIj09PWUmJihlPVtwYWdlWE9mZnNldCxwYWdlWU9mZnNldCxpbm5lcldpZHRoK3BhZ2VYT2Zmc2V0LGlubmVySGVpZ2h0K3BhZ2VZT2Zmc2V0XSksZT09PWRvY3VtZW50JiYoZT1lLmRvY3VtZW50RWxlbWVudCksXCJ1bmRlZmluZWRcIiE9dHlwZW9mIGUubm9kZVR5cGUmJiFmdW5jdGlvbigpe3ZhciB0PWUsbz1hKGUpLG49byxpPWdldENvbXB1dGVkU3R5bGUoZSk7aWYoZT1bbi5sZWZ0LG4udG9wLG8ud2lkdGgrbi5sZWZ0LG8uaGVpZ2h0K24udG9wXSx0Lm93bmVyRG9jdW1lbnQhPT1kb2N1bWVudCl7dmFyIHI9dC5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3O2VbMF0rPXIucGFnZVhPZmZzZXQsZVsxXSs9ci5wYWdlWU9mZnNldCxlWzJdKz1yLnBhZ2VYT2Zmc2V0LGVbM10rPXIucGFnZVlPZmZzZXR9JC5mb3JFYWNoKGZ1bmN0aW9uKHQsbyl7dD10WzBdLnRvVXBwZXJDYXNlKCkrdC5zdWJzdHIoMSksXCJUb3BcIj09PXR8fFwiTGVmdFwiPT09dD9lW29dKz1wYXJzZUZsb2F0KGlbXCJib3JkZXJcIit0K1wiV2lkdGhcIl0pOmVbb10tPXBhcnNlRmxvYXQoaVtcImJvcmRlclwiK3QrXCJXaWR0aFwiXSl9KX0oKSxlfXZhciBFPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUpe2Zvcih2YXIgbz0wO288ZS5sZW5ndGg7bysrKXt2YXIgbj1lW29dO24uZW51bWVyYWJsZT1uLmVudW1lcmFibGV8fCExLG4uY29uZmlndXJhYmxlPSEwLFwidmFsdWVcImluIG4mJihuLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCxuLmtleSxuKX19cmV0dXJuIGZ1bmN0aW9uKGUsbyxuKXtyZXR1cm4gbyYmdChlLnByb3RvdHlwZSxvKSxuJiZ0KGUsbiksZX19KCkseD12b2lkIDA7XCJ1bmRlZmluZWRcIj09dHlwZW9mIHgmJih4PXttb2R1bGVzOltdfSk7dmFyIEE9bnVsbCxUPWZ1bmN0aW9uKCl7dmFyIHQ9MDtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4rK3R9fSgpLFM9e30sUD1mdW5jdGlvbigpe3ZhciB0PUE7dHx8KHQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKSx0LnNldEF0dHJpYnV0ZShcImRhdGEtdGV0aGVyLWlkXCIsVCgpKSxoKHQuc3R5bGUse3RvcDowLGxlZnQ6MCxwb3NpdGlvbjpcImFic29sdXRlXCJ9KSxkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHQpLEE9dCk7dmFyIGU9dC5nZXRBdHRyaWJ1dGUoXCJkYXRhLXRldGhlci1pZFwiKTtyZXR1cm5cInVuZGVmaW5lZFwiPT10eXBlb2YgU1tlXSYmKFNbZV09aSh0KSxNKGZ1bmN0aW9uKCl7ZGVsZXRlIFNbZV19KSksU1tlXX0sVz1bXSxNPWZ1bmN0aW9uKHQpe1cucHVzaCh0KX0sXz1mdW5jdGlvbigpe2Zvcih2YXIgdD12b2lkIDA7dD1XLnBvcCgpOyl0KCl9LGs9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7bih0aGlzLHQpfXJldHVybiBFKHQsW3trZXk6XCJvblwiLHZhbHVlOmZ1bmN0aW9uKHQsZSxvKXt2YXIgbj1hcmd1bWVudHMubGVuZ3RoPD0zfHx2b2lkIDA9PT1hcmd1bWVudHNbM10/ITE6YXJndW1lbnRzWzNdO1widW5kZWZpbmVkXCI9PXR5cGVvZiB0aGlzLmJpbmRpbmdzJiYodGhpcy5iaW5kaW5ncz17fSksXCJ1bmRlZmluZWRcIj09dHlwZW9mIHRoaXMuYmluZGluZ3NbdF0mJih0aGlzLmJpbmRpbmdzW3RdPVtdKSx0aGlzLmJpbmRpbmdzW3RdLnB1c2goe2hhbmRsZXI6ZSxjdHg6byxvbmNlOm59KX19LHtrZXk6XCJvbmNlXCIsdmFsdWU6ZnVuY3Rpb24odCxlLG8pe3RoaXMub24odCxlLG8sITApfX0se2tleTpcIm9mZlwiLHZhbHVlOmZ1bmN0aW9uKHQsZSl7aWYoXCJ1bmRlZmluZWRcIiE9dHlwZW9mIHRoaXMuYmluZGluZ3MmJlwidW5kZWZpbmVkXCIhPXR5cGVvZiB0aGlzLmJpbmRpbmdzW3RdKWlmKFwidW5kZWZpbmVkXCI9PXR5cGVvZiBlKWRlbGV0ZSB0aGlzLmJpbmRpbmdzW3RdO2Vsc2UgZm9yKHZhciBvPTA7bzx0aGlzLmJpbmRpbmdzW3RdLmxlbmd0aDspdGhpcy5iaW5kaW5nc1t0XVtvXS5oYW5kbGVyPT09ZT90aGlzLmJpbmRpbmdzW3RdLnNwbGljZShvLDEpOisrb319LHtrZXk6XCJ0cmlnZ2VyXCIsdmFsdWU6ZnVuY3Rpb24odCl7aWYoXCJ1bmRlZmluZWRcIiE9dHlwZW9mIHRoaXMuYmluZGluZ3MmJnRoaXMuYmluZGluZ3NbdF0pe2Zvcih2YXIgZT0wLG89YXJndW1lbnRzLmxlbmd0aCxuPUFycmF5KG8+MT9vLTE6MCksaT0xO28+aTtpKyspbltpLTFdPWFyZ3VtZW50c1tpXTtmb3IoO2U8dGhpcy5iaW5kaW5nc1t0XS5sZW5ndGg7KXt2YXIgcj10aGlzLmJpbmRpbmdzW3RdW2VdLHM9ci5oYW5kbGVyLGE9ci5jdHgsZj1yLm9uY2UsbD1hO1widW5kZWZpbmVkXCI9PXR5cGVvZiBsJiYobD10aGlzKSxzLmFwcGx5KGwsbiksZj90aGlzLmJpbmRpbmdzW3RdLnNwbGljZShlLDEpOisrZX19fX1dKSx0fSgpO3guVXRpbHM9e2dldEFjdHVhbEJvdW5kaW5nQ2xpZW50UmVjdDppLGdldFNjcm9sbFBhcmVudHM6cixnZXRCb3VuZHM6YSxnZXRPZmZzZXRQYXJlbnQ6ZixleHRlbmQ6aCxhZGRDbGFzczpkLHJlbW92ZUNsYXNzOnUsaGFzQ2xhc3M6cCx1cGRhdGVDbGFzc2VzOm0sZGVmZXI6TSxmbHVzaDpfLHVuaXF1ZUlkOlQsRXZlbnRlZDprLGdldFNjcm9sbEJhclNpemU6bCxyZW1vdmVVdGlsRWxlbWVudHM6c307dmFyIEI9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7dmFyIG89W10sbj0hMCxpPSExLHI9dm9pZCAwO3RyeXtmb3IodmFyIHMsYT10W1N5bWJvbC5pdGVyYXRvcl0oKTshKG49KHM9YS5uZXh0KCkpLmRvbmUpJiYoby5wdXNoKHMudmFsdWUpLCFlfHxvLmxlbmd0aCE9PWUpO249ITApO31jYXRjaChmKXtpPSEwLHI9Zn1maW5hbGx5e3RyeXshbiYmYVtcInJldHVyblwiXSYmYVtcInJldHVyblwiXSgpfWZpbmFsbHl7aWYoaSl0aHJvdyByfX1yZXR1cm4gb31yZXR1cm4gZnVuY3Rpb24oZSxvKXtpZihBcnJheS5pc0FycmF5KGUpKXJldHVybiBlO2lmKFN5bWJvbC5pdGVyYXRvciBpbiBPYmplY3QoZSkpcmV0dXJuIHQoZSxvKTt0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZVwiKX19KCksRT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlKXtmb3IodmFyIG89MDtvPGUubGVuZ3RoO28rKyl7dmFyIG49ZVtvXTtuLmVudW1lcmFibGU9bi5lbnVtZXJhYmxlfHwhMSxuLmNvbmZpZ3VyYWJsZT0hMCxcInZhbHVlXCJpbiBuJiYobi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsbi5rZXksbil9fXJldHVybiBmdW5jdGlvbihlLG8sbil7cmV0dXJuIG8mJnQoZS5wcm90b3R5cGUsbyksbiYmdChlLG4pLGV9fSgpLHo9ZnVuY3Rpb24odCxlLG8pe2Zvcih2YXIgbj0hMDtuOyl7dmFyIGk9dCxyPWUscz1vO249ITEsbnVsbD09PWkmJihpPUZ1bmN0aW9uLnByb3RvdHlwZSk7dmFyIGE9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihpLHIpO2lmKHZvaWQgMCE9PWEpe2lmKFwidmFsdWVcImluIGEpcmV0dXJuIGEudmFsdWU7dmFyIGY9YS5nZXQ7aWYodm9pZCAwPT09ZilyZXR1cm47cmV0dXJuIGYuY2FsbChzKX12YXIgbD1PYmplY3QuZ2V0UHJvdG90eXBlT2YoaSk7aWYobnVsbD09PWwpcmV0dXJuO3Q9bCxlPXIsbz1zLG49ITAsYT1sPXZvaWQgMH19O2lmKFwidW5kZWZpbmVkXCI9PXR5cGVvZiB4KXRocm93IG5ldyBFcnJvcihcIllvdSBtdXN0IGluY2x1ZGUgdGhlIHV0aWxzLmpzIGZpbGUgYmVmb3JlIHRldGhlci5qc1wiKTt2YXIgaj14LlV0aWxzLHI9ai5nZXRTY3JvbGxQYXJlbnRzLGE9ai5nZXRCb3VuZHMsZj1qLmdldE9mZnNldFBhcmVudCxoPWouZXh0ZW5kLGQ9ai5hZGRDbGFzcyx1PWoucmVtb3ZlQ2xhc3MsbT1qLnVwZGF0ZUNsYXNzZXMsTT1qLmRlZmVyLF89ai5mbHVzaCxsPWouZ2V0U2Nyb2xsQmFyU2l6ZSxzPWoucmVtb3ZlVXRpbEVsZW1lbnRzLFk9ZnVuY3Rpb24oKXtpZihcInVuZGVmaW5lZFwiPT10eXBlb2YgZG9jdW1lbnQpcmV0dXJuXCJcIjtmb3IodmFyIHQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKSxlPVtcInRyYW5zZm9ybVwiLFwiV2Via2l0VHJhbnNmb3JtXCIsXCJPVHJhbnNmb3JtXCIsXCJNb3pUcmFuc2Zvcm1cIixcIm1zVHJhbnNmb3JtXCJdLG89MDtvPGUubGVuZ3RoOysrbyl7dmFyIG49ZVtvXTtpZih2b2lkIDAhPT10LnN0eWxlW25dKXJldHVybiBufX0oKSxMPVtdLEQ9ZnVuY3Rpb24oKXtMLmZvckVhY2goZnVuY3Rpb24odCl7dC5wb3NpdGlvbighMSl9KSxfKCl9OyFmdW5jdGlvbigpe3ZhciB0PW51bGwsZT1udWxsLG89bnVsbCxuPWZ1bmN0aW9uIGkoKXtyZXR1cm5cInVuZGVmaW5lZFwiIT10eXBlb2YgZSYmZT4xNj8oZT1NYXRoLm1pbihlLTE2LDI1MCksdm9pZChvPXNldFRpbWVvdXQoaSwyNTApKSk6dm9pZChcInVuZGVmaW5lZFwiIT10eXBlb2YgdCYmYigpLXQ8MTB8fChudWxsIT1vJiYoY2xlYXJUaW1lb3V0KG8pLG89bnVsbCksdD1iKCksRCgpLGU9YigpLXQpKX07XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHdpbmRvdyYmXCJ1bmRlZmluZWRcIiE9dHlwZW9mIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyJiZbXCJyZXNpemVcIixcInNjcm9sbFwiLFwidG91Y2htb3ZlXCJdLmZvckVhY2goZnVuY3Rpb24odCl7d2luZG93LmFkZEV2ZW50TGlzdGVuZXIodCxuKX0pfSgpO3ZhciBYPXtjZW50ZXI6XCJjZW50ZXJcIixsZWZ0OlwicmlnaHRcIixyaWdodDpcImxlZnRcIn0sRj17bWlkZGxlOlwibWlkZGxlXCIsdG9wOlwiYm90dG9tXCIsYm90dG9tOlwidG9wXCJ9LEg9e3RvcDowLGxlZnQ6MCxtaWRkbGU6XCI1MCVcIixjZW50ZXI6XCI1MCVcIixib3R0b206XCIxMDAlXCIscmlnaHQ6XCIxMDAlXCJ9LE49ZnVuY3Rpb24odCxlKXt2YXIgbz10LmxlZnQsbj10LnRvcDtyZXR1cm5cImF1dG9cIj09PW8mJihvPVhbZS5sZWZ0XSksXCJhdXRvXCI9PT1uJiYobj1GW2UudG9wXSkse2xlZnQ6byx0b3A6bn19LFU9ZnVuY3Rpb24odCl7dmFyIGU9dC5sZWZ0LG89dC50b3A7cmV0dXJuXCJ1bmRlZmluZWRcIiE9dHlwZW9mIEhbdC5sZWZ0XSYmKGU9SFt0LmxlZnRdKSxcInVuZGVmaW5lZFwiIT10eXBlb2YgSFt0LnRvcF0mJihvPUhbdC50b3BdKSx7bGVmdDplLHRvcDpvfX0sVj1mdW5jdGlvbih0KXt2YXIgZT10LnNwbGl0KFwiIFwiKSxvPUIoZSwyKSxuPW9bMF0saT1vWzFdO3JldHVybnt0b3A6bixsZWZ0Oml9fSxSPVYscT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKHQpe3ZhciBvPXRoaXM7bih0aGlzLGUpLHooT2JqZWN0LmdldFByb3RvdHlwZU9mKGUucHJvdG90eXBlKSxcImNvbnN0cnVjdG9yXCIsdGhpcykuY2FsbCh0aGlzKSx0aGlzLnBvc2l0aW9uPXRoaXMucG9zaXRpb24uYmluZCh0aGlzKSxMLnB1c2godGhpcyksdGhpcy5oaXN0b3J5PVtdLHRoaXMuc2V0T3B0aW9ucyh0LCExKSx4Lm1vZHVsZXMuZm9yRWFjaChmdW5jdGlvbih0KXtcInVuZGVmaW5lZFwiIT10eXBlb2YgdC5pbml0aWFsaXplJiZ0LmluaXRpYWxpemUuY2FsbChvKX0pLHRoaXMucG9zaXRpb24oKX1yZXR1cm4gdihlLHQpLEUoZSxbe2tleTpcImdldENsYXNzXCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPD0wfHx2b2lkIDA9PT1hcmd1bWVudHNbMF0/XCJcIjphcmd1bWVudHNbMF0sZT10aGlzLm9wdGlvbnMuY2xhc3NlcztyZXR1cm5cInVuZGVmaW5lZFwiIT10eXBlb2YgZSYmZVt0XT90aGlzLm9wdGlvbnMuY2xhc3Nlc1t0XTp0aGlzLm9wdGlvbnMuY2xhc3NQcmVmaXg/dGhpcy5vcHRpb25zLmNsYXNzUHJlZml4K1wiLVwiK3Q6dH19LHtrZXk6XCJzZXRPcHRpb25zXCIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxvPWFyZ3VtZW50cy5sZW5ndGg8PTF8fHZvaWQgMD09PWFyZ3VtZW50c1sxXT8hMDphcmd1bWVudHNbMV0sbj17b2Zmc2V0OlwiMCAwXCIsdGFyZ2V0T2Zmc2V0OlwiMCAwXCIsdGFyZ2V0QXR0YWNobWVudDpcImF1dG8gYXV0b1wiLGNsYXNzUHJlZml4OlwidGV0aGVyXCJ9O3RoaXMub3B0aW9ucz1oKG4sdCk7dmFyIGk9dGhpcy5vcHRpb25zLHM9aS5lbGVtZW50LGE9aS50YXJnZXQsZj1pLnRhcmdldE1vZGlmaWVyO2lmKHRoaXMuZWxlbWVudD1zLHRoaXMudGFyZ2V0PWEsdGhpcy50YXJnZXRNb2RpZmllcj1mLFwidmlld3BvcnRcIj09PXRoaXMudGFyZ2V0Pyh0aGlzLnRhcmdldD1kb2N1bWVudC5ib2R5LHRoaXMudGFyZ2V0TW9kaWZpZXI9XCJ2aXNpYmxlXCIpOlwic2Nyb2xsLWhhbmRsZVwiPT09dGhpcy50YXJnZXQmJih0aGlzLnRhcmdldD1kb2N1bWVudC5ib2R5LHRoaXMudGFyZ2V0TW9kaWZpZXI9XCJzY3JvbGwtaGFuZGxlXCIpLFtcImVsZW1lbnRcIixcInRhcmdldFwiXS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2lmKFwidW5kZWZpbmVkXCI9PXR5cGVvZiBlW3RdKXRocm93IG5ldyBFcnJvcihcIlRldGhlciBFcnJvcjogQm90aCBlbGVtZW50IGFuZCB0YXJnZXQgbXVzdCBiZSBkZWZpbmVkXCIpO1widW5kZWZpbmVkXCIhPXR5cGVvZiBlW3RdLmpxdWVyeT9lW3RdPWVbdF1bMF06XCJzdHJpbmdcIj09dHlwZW9mIGVbdF0mJihlW3RdPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoZVt0XSkpfSksZCh0aGlzLmVsZW1lbnQsdGhpcy5nZXRDbGFzcyhcImVsZW1lbnRcIikpLHRoaXMub3B0aW9ucy5hZGRUYXJnZXRDbGFzc2VzIT09ITEmJmQodGhpcy50YXJnZXQsdGhpcy5nZXRDbGFzcyhcInRhcmdldFwiKSksIXRoaXMub3B0aW9ucy5hdHRhY2htZW50KXRocm93IG5ldyBFcnJvcihcIlRldGhlciBFcnJvcjogWW91IG11c3QgcHJvdmlkZSBhbiBhdHRhY2htZW50XCIpO3RoaXMudGFyZ2V0QXR0YWNobWVudD1SKHRoaXMub3B0aW9ucy50YXJnZXRBdHRhY2htZW50KSx0aGlzLmF0dGFjaG1lbnQ9Uih0aGlzLm9wdGlvbnMuYXR0YWNobWVudCksdGhpcy5vZmZzZXQ9Vih0aGlzLm9wdGlvbnMub2Zmc2V0KSx0aGlzLnRhcmdldE9mZnNldD1WKHRoaXMub3B0aW9ucy50YXJnZXRPZmZzZXQpLFwidW5kZWZpbmVkXCIhPXR5cGVvZiB0aGlzLnNjcm9sbFBhcmVudHMmJnRoaXMuZGlzYWJsZSgpLFwic2Nyb2xsLWhhbmRsZVwiPT09dGhpcy50YXJnZXRNb2RpZmllcj90aGlzLnNjcm9sbFBhcmVudHM9W3RoaXMudGFyZ2V0XTp0aGlzLnNjcm9sbFBhcmVudHM9cih0aGlzLnRhcmdldCksdGhpcy5vcHRpb25zLmVuYWJsZWQhPT0hMSYmdGhpcy5lbmFibGUobyl9fSx7a2V5OlwiZ2V0VGFyZ2V0Qm91bmRzXCIsdmFsdWU6ZnVuY3Rpb24oKXtpZihcInVuZGVmaW5lZFwiPT10eXBlb2YgdGhpcy50YXJnZXRNb2RpZmllcilyZXR1cm4gYSh0aGlzLnRhcmdldCk7aWYoXCJ2aXNpYmxlXCI9PT10aGlzLnRhcmdldE1vZGlmaWVyKXtpZih0aGlzLnRhcmdldD09PWRvY3VtZW50LmJvZHkpcmV0dXJue3RvcDpwYWdlWU9mZnNldCxsZWZ0OnBhZ2VYT2Zmc2V0LGhlaWdodDppbm5lckhlaWdodCx3aWR0aDppbm5lcldpZHRofTt2YXIgdD1hKHRoaXMudGFyZ2V0KSxlPXtoZWlnaHQ6dC5oZWlnaHQsd2lkdGg6dC53aWR0aCx0b3A6dC50b3AsbGVmdDp0LmxlZnR9O3JldHVybiBlLmhlaWdodD1NYXRoLm1pbihlLmhlaWdodCx0LmhlaWdodC0ocGFnZVlPZmZzZXQtdC50b3ApKSxlLmhlaWdodD1NYXRoLm1pbihlLmhlaWdodCx0LmhlaWdodC0odC50b3ArdC5oZWlnaHQtKHBhZ2VZT2Zmc2V0K2lubmVySGVpZ2h0KSkpLGUuaGVpZ2h0PU1hdGgubWluKGlubmVySGVpZ2h0LGUuaGVpZ2h0KSxlLmhlaWdodC09MixlLndpZHRoPU1hdGgubWluKGUud2lkdGgsdC53aWR0aC0ocGFnZVhPZmZzZXQtdC5sZWZ0KSksZS53aWR0aD1NYXRoLm1pbihlLndpZHRoLHQud2lkdGgtKHQubGVmdCt0LndpZHRoLShwYWdlWE9mZnNldCtpbm5lcldpZHRoKSkpLGUud2lkdGg9TWF0aC5taW4oaW5uZXJXaWR0aCxlLndpZHRoKSxlLndpZHRoLT0yLGUudG9wPHBhZ2VZT2Zmc2V0JiYoZS50b3A9cGFnZVlPZmZzZXQpLGUubGVmdDxwYWdlWE9mZnNldCYmKGUubGVmdD1wYWdlWE9mZnNldCksZX1pZihcInNjcm9sbC1oYW5kbGVcIj09PXRoaXMudGFyZ2V0TW9kaWZpZXIpe3ZhciB0PXZvaWQgMCxvPXRoaXMudGFyZ2V0O289PT1kb2N1bWVudC5ib2R5PyhvPWRvY3VtZW50LmRvY3VtZW50RWxlbWVudCx0PXtsZWZ0OnBhZ2VYT2Zmc2V0LHRvcDpwYWdlWU9mZnNldCxoZWlnaHQ6aW5uZXJIZWlnaHQsd2lkdGg6aW5uZXJXaWR0aH0pOnQ9YShvKTt2YXIgbj1nZXRDb21wdXRlZFN0eWxlKG8pLGk9by5zY3JvbGxXaWR0aD5vLmNsaWVudFdpZHRofHxbbi5vdmVyZmxvdyxuLm92ZXJmbG93WF0uaW5kZXhPZihcInNjcm9sbFwiKT49MHx8dGhpcy50YXJnZXQhPT1kb2N1bWVudC5ib2R5LHI9MDtpJiYocj0xNSk7dmFyIHM9dC5oZWlnaHQtcGFyc2VGbG9hdChuLmJvcmRlclRvcFdpZHRoKS1wYXJzZUZsb2F0KG4uYm9yZGVyQm90dG9tV2lkdGgpLXIsZT17d2lkdGg6MTUsaGVpZ2h0Oi45NzUqcyoocy9vLnNjcm9sbEhlaWdodCksbGVmdDp0LmxlZnQrdC53aWR0aC1wYXJzZUZsb2F0KG4uYm9yZGVyTGVmdFdpZHRoKS0xNX0sZj0wOzQwOD5zJiZ0aGlzLnRhcmdldD09PWRvY3VtZW50LmJvZHkmJihmPS0xMWUtNSpNYXRoLnBvdyhzLDIpLS4wMDcyNypzKzIyLjU4KSx0aGlzLnRhcmdldCE9PWRvY3VtZW50LmJvZHkmJihlLmhlaWdodD1NYXRoLm1heChlLmhlaWdodCwyNCkpO3ZhciBsPXRoaXMudGFyZ2V0LnNjcm9sbFRvcC8oby5zY3JvbGxIZWlnaHQtcyk7cmV0dXJuIGUudG9wPWwqKHMtZS5oZWlnaHQtZikrdC50b3ArcGFyc2VGbG9hdChuLmJvcmRlclRvcFdpZHRoKSx0aGlzLnRhcmdldD09PWRvY3VtZW50LmJvZHkmJihlLmhlaWdodD1NYXRoLm1heChlLmhlaWdodCwyNCkpLGV9fX0se2tleTpcImNsZWFyQ2FjaGVcIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuX2NhY2hlPXt9fX0se2tleTpcImNhY2hlXCIsdmFsdWU6ZnVuY3Rpb24odCxlKXtyZXR1cm5cInVuZGVmaW5lZFwiPT10eXBlb2YgdGhpcy5fY2FjaGUmJih0aGlzLl9jYWNoZT17fSksXCJ1bmRlZmluZWRcIj09dHlwZW9mIHRoaXMuX2NhY2hlW3RdJiYodGhpcy5fY2FjaGVbdF09ZS5jYWxsKHRoaXMpKSx0aGlzLl9jYWNoZVt0XX19LHtrZXk6XCJlbmFibGVcIix2YWx1ZTpmdW5jdGlvbigpe3ZhciB0PXRoaXMsZT1hcmd1bWVudHMubGVuZ3RoPD0wfHx2b2lkIDA9PT1hcmd1bWVudHNbMF0/ITA6YXJndW1lbnRzWzBdO3RoaXMub3B0aW9ucy5hZGRUYXJnZXRDbGFzc2VzIT09ITEmJmQodGhpcy50YXJnZXQsdGhpcy5nZXRDbGFzcyhcImVuYWJsZWRcIikpLGQodGhpcy5lbGVtZW50LHRoaXMuZ2V0Q2xhc3MoXCJlbmFibGVkXCIpKSx0aGlzLmVuYWJsZWQ9ITAsdGhpcy5zY3JvbGxQYXJlbnRzLmZvckVhY2goZnVuY3Rpb24oZSl7ZSE9PXQudGFyZ2V0Lm93bmVyRG9jdW1lbnQmJmUuYWRkRXZlbnRMaXN0ZW5lcihcInNjcm9sbFwiLHQucG9zaXRpb24pfSksZSYmdGhpcy5wb3NpdGlvbigpfX0se2tleTpcImRpc2FibGVcIix2YWx1ZTpmdW5jdGlvbigpe3ZhciB0PXRoaXM7dSh0aGlzLnRhcmdldCx0aGlzLmdldENsYXNzKFwiZW5hYmxlZFwiKSksdSh0aGlzLmVsZW1lbnQsdGhpcy5nZXRDbGFzcyhcImVuYWJsZWRcIikpLHRoaXMuZW5hYmxlZD0hMSxcInVuZGVmaW5lZFwiIT10eXBlb2YgdGhpcy5zY3JvbGxQYXJlbnRzJiZ0aGlzLnNjcm9sbFBhcmVudHMuZm9yRWFjaChmdW5jdGlvbihlKXtlLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJzY3JvbGxcIix0LnBvc2l0aW9uKX0pfX0se2tleTpcImRlc3Ryb3lcIix2YWx1ZTpmdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy5kaXNhYmxlKCksTC5mb3JFYWNoKGZ1bmN0aW9uKGUsbyl7ZT09PXQmJkwuc3BsaWNlKG8sMSl9KSwwPT09TC5sZW5ndGgmJnMoKX19LHtrZXk6XCJ1cGRhdGVBdHRhY2hDbGFzc2VzXCIsdmFsdWU6ZnVuY3Rpb24odCxlKXt2YXIgbz10aGlzO3Q9dHx8dGhpcy5hdHRhY2htZW50LGU9ZXx8dGhpcy50YXJnZXRBdHRhY2htZW50O3ZhciBuPVtcImxlZnRcIixcInRvcFwiLFwiYm90dG9tXCIsXCJyaWdodFwiLFwibWlkZGxlXCIsXCJjZW50ZXJcIl07XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHRoaXMuX2FkZEF0dGFjaENsYXNzZXMmJnRoaXMuX2FkZEF0dGFjaENsYXNzZXMubGVuZ3RoJiZ0aGlzLl9hZGRBdHRhY2hDbGFzc2VzLnNwbGljZSgwLHRoaXMuX2FkZEF0dGFjaENsYXNzZXMubGVuZ3RoKSxcInVuZGVmaW5lZFwiPT10eXBlb2YgdGhpcy5fYWRkQXR0YWNoQ2xhc3NlcyYmKHRoaXMuX2FkZEF0dGFjaENsYXNzZXM9W10pO3ZhciBpPXRoaXMuX2FkZEF0dGFjaENsYXNzZXM7dC50b3AmJmkucHVzaCh0aGlzLmdldENsYXNzKFwiZWxlbWVudC1hdHRhY2hlZFwiKStcIi1cIit0LnRvcCksdC5sZWZ0JiZpLnB1c2godGhpcy5nZXRDbGFzcyhcImVsZW1lbnQtYXR0YWNoZWRcIikrXCItXCIrdC5sZWZ0KSxlLnRvcCYmaS5wdXNoKHRoaXMuZ2V0Q2xhc3MoXCJ0YXJnZXQtYXR0YWNoZWRcIikrXCItXCIrZS50b3ApLGUubGVmdCYmaS5wdXNoKHRoaXMuZ2V0Q2xhc3MoXCJ0YXJnZXQtYXR0YWNoZWRcIikrXCItXCIrZS5sZWZ0KTt2YXIgcj1bXTtuLmZvckVhY2goZnVuY3Rpb24odCl7ci5wdXNoKG8uZ2V0Q2xhc3MoXCJlbGVtZW50LWF0dGFjaGVkXCIpK1wiLVwiK3QpLHIucHVzaChvLmdldENsYXNzKFwidGFyZ2V0LWF0dGFjaGVkXCIpK1wiLVwiK3QpfSksTShmdW5jdGlvbigpe1widW5kZWZpbmVkXCIhPXR5cGVvZiBvLl9hZGRBdHRhY2hDbGFzc2VzJiYobShvLmVsZW1lbnQsby5fYWRkQXR0YWNoQ2xhc3NlcyxyKSxvLm9wdGlvbnMuYWRkVGFyZ2V0Q2xhc3NlcyE9PSExJiZtKG8udGFyZ2V0LG8uX2FkZEF0dGFjaENsYXNzZXMsciksZGVsZXRlIG8uX2FkZEF0dGFjaENsYXNzZXMpfSl9fSx7a2V5OlwicG9zaXRpb25cIix2YWx1ZTpmdW5jdGlvbigpe3ZhciB0PXRoaXMsZT1hcmd1bWVudHMubGVuZ3RoPD0wfHx2b2lkIDA9PT1hcmd1bWVudHNbMF0/ITA6YXJndW1lbnRzWzBdO2lmKHRoaXMuZW5hYmxlZCl7dGhpcy5jbGVhckNhY2hlKCk7dmFyIG89Tih0aGlzLnRhcmdldEF0dGFjaG1lbnQsdGhpcy5hdHRhY2htZW50KTt0aGlzLnVwZGF0ZUF0dGFjaENsYXNzZXModGhpcy5hdHRhY2htZW50LG8pO3ZhciBuPXRoaXMuY2FjaGUoXCJlbGVtZW50LWJvdW5kc1wiLGZ1bmN0aW9uKCl7cmV0dXJuIGEodC5lbGVtZW50KX0pLGk9bi53aWR0aCxyPW4uaGVpZ2h0O2lmKDA9PT1pJiYwPT09ciYmXCJ1bmRlZmluZWRcIiE9dHlwZW9mIHRoaXMubGFzdFNpemUpe3ZhciBzPXRoaXMubGFzdFNpemU7aT1zLndpZHRoLHI9cy5oZWlnaHR9ZWxzZSB0aGlzLmxhc3RTaXplPXt3aWR0aDppLGhlaWdodDpyfTt2YXIgaD10aGlzLmNhY2hlKFwidGFyZ2V0LWJvdW5kc1wiLGZ1bmN0aW9uKCl7cmV0dXJuIHQuZ2V0VGFyZ2V0Qm91bmRzKCl9KSx1PWgsZD1DKFUodGhpcy5hdHRhY2htZW50KSx7d2lkdGg6aSxoZWlnaHQ6cn0pLHA9QyhVKG8pLHUpLGM9Qyh0aGlzLm9mZnNldCx7d2lkdGg6aSxoZWlnaHQ6cn0pLGc9Qyh0aGlzLnRhcmdldE9mZnNldCx1KTtkPXcoZCxjKSxwPXcocCxnKTtmb3IodmFyIG09aC5sZWZ0K3AubGVmdC1kLmxlZnQsdj1oLnRvcCtwLnRvcC1kLnRvcCx5PTA7eTx4Lm1vZHVsZXMubGVuZ3RoOysreSl7dmFyIGI9eC5tb2R1bGVzW3ldLE89Yi5wb3NpdGlvbi5jYWxsKHRoaXMse2xlZnQ6bSx0b3A6dix0YXJnZXRBdHRhY2htZW50Om8sdGFyZ2V0UG9zOmgsZWxlbWVudFBvczpuLG9mZnNldDpkLHRhcmdldE9mZnNldDpwLG1hbnVhbE9mZnNldDpjLG1hbnVhbFRhcmdldE9mZnNldDpnLHNjcm9sbGJhclNpemU6UyxhdHRhY2htZW50OnRoaXMuYXR0YWNobWVudH0pO2lmKE89PT0hMSlyZXR1cm4hMTtcInVuZGVmaW5lZFwiIT10eXBlb2YgTyYmXCJvYmplY3RcIj09dHlwZW9mIE8mJih2PU8udG9wLG09Ty5sZWZ0KX12YXIgRT17cGFnZTp7dG9wOnYsbGVmdDptfSx2aWV3cG9ydDp7dG9wOnYtcGFnZVlPZmZzZXQsYm90dG9tOnBhZ2VZT2Zmc2V0LXYtcitpbm5lckhlaWdodCxsZWZ0Om0tcGFnZVhPZmZzZXQscmlnaHQ6cGFnZVhPZmZzZXQtbS1pK2lubmVyV2lkdGh9fSxBPXRoaXMudGFyZ2V0Lm93bmVyRG9jdW1lbnQsVD1BLmRlZmF1bHRWaWV3LFM9dm9pZCAwO3JldHVybiBBLmJvZHkuc2Nyb2xsV2lkdGg+VC5pbm5lcldpZHRoJiYoUz10aGlzLmNhY2hlKFwic2Nyb2xsYmFyLXNpemVcIixsKSxFLnZpZXdwb3J0LmJvdHRvbS09Uy5oZWlnaHQpLEEuYm9keS5zY3JvbGxIZWlnaHQ+VC5pbm5lckhlaWdodCYmKFM9dGhpcy5jYWNoZShcInNjcm9sbGJhci1zaXplXCIsbCksRS52aWV3cG9ydC5yaWdodC09Uy53aWR0aCksKC0xPT09W1wiXCIsXCJzdGF0aWNcIl0uaW5kZXhPZihBLmJvZHkuc3R5bGUucG9zaXRpb24pfHwtMT09PVtcIlwiLFwic3RhdGljXCJdLmluZGV4T2YoQS5ib2R5LnBhcmVudEVsZW1lbnQuc3R5bGUucG9zaXRpb24pKSYmKEUucGFnZS5ib3R0b209QS5ib2R5LnNjcm9sbEhlaWdodC12LXIsRS5wYWdlLnJpZ2h0PUEuYm9keS5zY3JvbGxXaWR0aC1tLWkpLFwidW5kZWZpbmVkXCIhPXR5cGVvZiB0aGlzLm9wdGlvbnMub3B0aW1pemF0aW9ucyYmdGhpcy5vcHRpb25zLm9wdGltaXphdGlvbnMubW92ZUVsZW1lbnQhPT0hMSYmXCJ1bmRlZmluZWRcIj09dHlwZW9mIHRoaXMudGFyZ2V0TW9kaWZpZXImJiFmdW5jdGlvbigpe3ZhciBlPXQuY2FjaGUoXCJ0YXJnZXQtb2Zmc2V0cGFyZW50XCIsZnVuY3Rpb24oKXtyZXR1cm4gZih0LnRhcmdldCl9KSxvPXQuY2FjaGUoXCJ0YXJnZXQtb2Zmc2V0cGFyZW50LWJvdW5kc1wiLGZ1bmN0aW9uKCl7cmV0dXJuIGEoZSl9KSxuPWdldENvbXB1dGVkU3R5bGUoZSksaT1vLHI9e307aWYoW1wiVG9wXCIsXCJMZWZ0XCIsXCJCb3R0b21cIixcIlJpZ2h0XCJdLmZvckVhY2goZnVuY3Rpb24odCl7clt0LnRvTG93ZXJDYXNlKCldPXBhcnNlRmxvYXQobltcImJvcmRlclwiK3QrXCJXaWR0aFwiXSl9KSxvLnJpZ2h0PUEuYm9keS5zY3JvbGxXaWR0aC1vLmxlZnQtaS53aWR0aCtyLnJpZ2h0LG8uYm90dG9tPUEuYm9keS5zY3JvbGxIZWlnaHQtby50b3AtaS5oZWlnaHQrci5ib3R0b20sRS5wYWdlLnRvcD49by50b3Arci50b3AmJkUucGFnZS5ib3R0b20+PW8uYm90dG9tJiZFLnBhZ2UubGVmdD49by5sZWZ0K3IubGVmdCYmRS5wYWdlLnJpZ2h0Pj1vLnJpZ2h0KXt2YXIgcz1lLnNjcm9sbFRvcCxsPWUuc2Nyb2xsTGVmdDtFLm9mZnNldD17dG9wOkUucGFnZS50b3Atby50b3Arcy1yLnRvcCxsZWZ0OkUucGFnZS5sZWZ0LW8ubGVmdCtsLXIubGVmdH19fSgpLHRoaXMubW92ZShFKSx0aGlzLmhpc3RvcnkudW5zaGlmdChFKSx0aGlzLmhpc3RvcnkubGVuZ3RoPjMmJnRoaXMuaGlzdG9yeS5wb3AoKSxlJiZfKCksITB9fX0se2tleTpcIm1vdmVcIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzO2lmKFwidW5kZWZpbmVkXCIhPXR5cGVvZiB0aGlzLmVsZW1lbnQucGFyZW50Tm9kZSl7dmFyIG89e307Zm9yKHZhciBuIGluIHQpe29bbl09e307Zm9yKHZhciBpIGluIHRbbl0pe2Zvcih2YXIgcj0hMSxzPTA7czx0aGlzLmhpc3RvcnkubGVuZ3RoOysrcyl7dmFyIGE9dGhpcy5oaXN0b3J5W3NdO2lmKFwidW5kZWZpbmVkXCIhPXR5cGVvZiBhW25dJiYheShhW25dW2ldLHRbbl1baV0pKXtyPSEwO2JyZWFrfX1yfHwob1tuXVtpXT0hMCl9fXZhciBsPXt0b3A6XCJcIixsZWZ0OlwiXCIscmlnaHQ6XCJcIixib3R0b206XCJcIn0sdT1mdW5jdGlvbih0LG8pe3ZhciBuPVwidW5kZWZpbmVkXCIhPXR5cGVvZiBlLm9wdGlvbnMub3B0aW1pemF0aW9ucyxpPW4/ZS5vcHRpb25zLm9wdGltaXphdGlvbnMuZ3B1Om51bGw7aWYoaSE9PSExKXt2YXIgcj12b2lkIDAscz12b2lkIDA7dC50b3A/KGwudG9wPTAscj1vLnRvcCk6KGwuYm90dG9tPTAscj0tby5ib3R0b20pLHQubGVmdD8obC5sZWZ0PTAscz1vLmxlZnQpOihsLnJpZ2h0PTAscz0tby5yaWdodCksbFtZXT1cInRyYW5zbGF0ZVgoXCIrTWF0aC5yb3VuZChzKStcInB4KSB0cmFuc2xhdGVZKFwiK01hdGgucm91bmQocikrXCJweClcIixcIm1zVHJhbnNmb3JtXCIhPT1ZJiYobFtZXSs9XCIgdHJhbnNsYXRlWigwKVwiKX1lbHNlIHQudG9wP2wudG9wPW8udG9wK1wicHhcIjpsLmJvdHRvbT1vLmJvdHRvbStcInB4XCIsdC5sZWZ0P2wubGVmdD1vLmxlZnQrXCJweFwiOmwucmlnaHQ9by5yaWdodCtcInB4XCJ9LGQ9ITE7aWYoKG8ucGFnZS50b3B8fG8ucGFnZS5ib3R0b20pJiYoby5wYWdlLmxlZnR8fG8ucGFnZS5yaWdodCk/KGwucG9zaXRpb249XCJhYnNvbHV0ZVwiLHUoby5wYWdlLHQucGFnZSkpOihvLnZpZXdwb3J0LnRvcHx8by52aWV3cG9ydC5ib3R0b20pJiYoby52aWV3cG9ydC5sZWZ0fHxvLnZpZXdwb3J0LnJpZ2h0KT8obC5wb3NpdGlvbj1cImZpeGVkXCIsdShvLnZpZXdwb3J0LHQudmlld3BvcnQpKTpcInVuZGVmaW5lZFwiIT10eXBlb2Ygby5vZmZzZXQmJm8ub2Zmc2V0LnRvcCYmby5vZmZzZXQubGVmdD8hZnVuY3Rpb24oKXtsLnBvc2l0aW9uPVwiYWJzb2x1dGVcIjt2YXIgbj1lLmNhY2hlKFwidGFyZ2V0LW9mZnNldHBhcmVudFwiLGZ1bmN0aW9uKCl7cmV0dXJuIGYoZS50YXJnZXQpfSk7ZihlLmVsZW1lbnQpIT09biYmTShmdW5jdGlvbigpe2UuZWxlbWVudC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGUuZWxlbWVudCksbi5hcHBlbmRDaGlsZChlLmVsZW1lbnQpfSksdShvLm9mZnNldCx0Lm9mZnNldCksZD0hMH0oKToobC5wb3NpdGlvbj1cImFic29sdXRlXCIsdSh7dG9wOiEwLGxlZnQ6ITB9LHQucGFnZSkpLCFkKXtmb3IodmFyIHA9ITAsYz10aGlzLmVsZW1lbnQucGFyZW50Tm9kZTtjJiYxPT09Yy5ub2RlVHlwZSYmXCJCT0RZXCIhPT1jLnRhZ05hbWU7KXtpZihcInN0YXRpY1wiIT09Z2V0Q29tcHV0ZWRTdHlsZShjKS5wb3NpdGlvbil7cD0hMTticmVha31jPWMucGFyZW50Tm9kZX1wfHwodGhpcy5lbGVtZW50LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5lbGVtZW50KSx0aGlzLmVsZW1lbnQub3duZXJEb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHRoaXMuZWxlbWVudCkpfXZhciBnPXt9LG09ITE7Zm9yKHZhciBpIGluIGwpe3ZhciB2PWxbaV0sYj10aGlzLmVsZW1lbnQuc3R5bGVbaV07YiE9PXYmJihtPSEwLGdbaV09dil9bSYmTShmdW5jdGlvbigpe2goZS5lbGVtZW50LnN0eWxlLGcpfSl9fX1dKSxlfShrKTtxLm1vZHVsZXM9W10seC5wb3NpdGlvbj1EO3ZhciBJPWgocSx4KSxCPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUpe3ZhciBvPVtdLG49ITAsaT0hMSxyPXZvaWQgMDt0cnl7Zm9yKHZhciBzLGE9dFtTeW1ib2wuaXRlcmF0b3JdKCk7IShuPShzPWEubmV4dCgpKS5kb25lKSYmKG8ucHVzaChzLnZhbHVlKSwhZXx8by5sZW5ndGghPT1lKTtuPSEwKTt9Y2F0Y2goZil7aT0hMCxyPWZ9ZmluYWxseXt0cnl7IW4mJmFbXCJyZXR1cm5cIl0mJmFbXCJyZXR1cm5cIl0oKX1maW5hbGx5e2lmKGkpdGhyb3cgcn19cmV0dXJuIG99cmV0dXJuIGZ1bmN0aW9uKGUsbyl7aWYoQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gZTtpZihTeW1ib2wuaXRlcmF0b3IgaW4gT2JqZWN0KGUpKXJldHVybiB0KGUsbyk7dGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2VcIil9fSgpLGo9eC5VdGlscyxhPWouZ2V0Qm91bmRzLGg9ai5leHRlbmQsbT1qLnVwZGF0ZUNsYXNzZXMsTT1qLmRlZmVyLCQ9W1wibGVmdFwiLFwidG9wXCIsXCJyaWdodFwiLFwiYm90dG9tXCJdO3gubW9kdWxlcy5wdXNoKHtwb3NpdGlvbjpmdW5jdGlvbih0KXt2YXIgZT10aGlzLG89dC50b3Asbj10LmxlZnQsaT10LnRhcmdldEF0dGFjaG1lbnQ7aWYoIXRoaXMub3B0aW9ucy5jb25zdHJhaW50cylyZXR1cm4hMDt2YXIgcj10aGlzLmNhY2hlKFwiZWxlbWVudC1ib3VuZHNcIixmdW5jdGlvbigpe3JldHVybiBhKGUuZWxlbWVudCl9KSxzPXIuaGVpZ2h0LGY9ci53aWR0aDtpZigwPT09ZiYmMD09PXMmJlwidW5kZWZpbmVkXCIhPXR5cGVvZiB0aGlzLmxhc3RTaXplKXt2YXIgbD10aGlzLmxhc3RTaXplO2Y9bC53aWR0aCxzPWwuaGVpZ2h0fXZhciB1PXRoaXMuY2FjaGUoXCJ0YXJnZXQtYm91bmRzXCIsZnVuY3Rpb24oKXtyZXR1cm4gZS5nZXRUYXJnZXRCb3VuZHMoKX0pLGQ9dS5oZWlnaHQscD11LndpZHRoLGM9W3RoaXMuZ2V0Q2xhc3MoXCJwaW5uZWRcIiksdGhpcy5nZXRDbGFzcyhcIm91dC1vZi1ib3VuZHNcIildO3RoaXMub3B0aW9ucy5jb25zdHJhaW50cy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPXQub3V0T2ZCb3VuZHNDbGFzcyxvPXQucGlubmVkQ2xhc3M7ZSYmYy5wdXNoKGUpLG8mJmMucHVzaChvKX0pLGMuZm9yRWFjaChmdW5jdGlvbih0KXtbXCJsZWZ0XCIsXCJ0b3BcIixcInJpZ2h0XCIsXCJib3R0b21cIl0uZm9yRWFjaChmdW5jdGlvbihlKXtjLnB1c2godCtcIi1cIitlKX0pfSk7dmFyIGc9W10sdj1oKHt9LGkpLHk9aCh7fSx0aGlzLmF0dGFjaG1lbnQpO3JldHVybiB0aGlzLm9wdGlvbnMuY29uc3RyYWludHMuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgcj10LnRvLGE9dC5hdHRhY2htZW50LGw9dC5waW47XCJ1bmRlZmluZWRcIj09dHlwZW9mIGEmJihhPVwiXCIpO3ZhciBoPXZvaWQgMCx1PXZvaWQgMDtpZihhLmluZGV4T2YoXCIgXCIpPj0wKXt2YXIgYz1hLnNwbGl0KFwiIFwiKSxtPUIoYywyKTt1PW1bMF0saD1tWzFdfWVsc2UgaD11PWE7dmFyIGI9TyhlLHIpOyhcInRhcmdldFwiPT09dXx8XCJib3RoXCI9PT11KSYmKG88YlsxXSYmXCJ0b3BcIj09PXYudG9wJiYobys9ZCx2LnRvcD1cImJvdHRvbVwiKSxvK3M+YlszXSYmXCJib3R0b21cIj09PXYudG9wJiYoby09ZCx2LnRvcD1cInRvcFwiKSksXCJ0b2dldGhlclwiPT09dSYmKFwidG9wXCI9PT12LnRvcCYmKFwiYm90dG9tXCI9PT15LnRvcCYmbzxiWzFdPyhvKz1kLHYudG9wPVwiYm90dG9tXCIsbys9cyx5LnRvcD1cInRvcFwiKTpcInRvcFwiPT09eS50b3AmJm8rcz5iWzNdJiZvLShzLWQpPj1iWzFdJiYoby09cy1kLHYudG9wPVwiYm90dG9tXCIseS50b3A9XCJib3R0b21cIikpLFwiYm90dG9tXCI9PT12LnRvcCYmKFwidG9wXCI9PT15LnRvcCYmbytzPmJbM10/KG8tPWQsdi50b3A9XCJ0b3BcIixvLT1zLHkudG9wPVwiYm90dG9tXCIpOlwiYm90dG9tXCI9PT15LnRvcCYmbzxiWzFdJiZvKygyKnMtZCk8PWJbM10mJihvKz1zLWQsdi50b3A9XCJ0b3BcIix5LnRvcD1cInRvcFwiKSksXCJtaWRkbGVcIj09PXYudG9wJiYobytzPmJbM10mJlwidG9wXCI9PT15LnRvcD8oby09cyx5LnRvcD1cImJvdHRvbVwiKTpvPGJbMV0mJlwiYm90dG9tXCI9PT15LnRvcCYmKG8rPXMseS50b3A9XCJ0b3BcIikpKSwoXCJ0YXJnZXRcIj09PWh8fFwiYm90aFwiPT09aCkmJihuPGJbMF0mJlwibGVmdFwiPT09di5sZWZ0JiYobis9cCx2LmxlZnQ9XCJyaWdodFwiKSxuK2Y+YlsyXSYmXCJyaWdodFwiPT09di5sZWZ0JiYobi09cCx2LmxlZnQ9XCJsZWZ0XCIpKSxcInRvZ2V0aGVyXCI9PT1oJiYobjxiWzBdJiZcImxlZnRcIj09PXYubGVmdD9cInJpZ2h0XCI9PT15LmxlZnQ/KG4rPXAsdi5sZWZ0PVwicmlnaHRcIixuKz1mLHkubGVmdD1cImxlZnRcIik6XCJsZWZ0XCI9PT15LmxlZnQmJihuKz1wLHYubGVmdD1cInJpZ2h0XCIsbi09Zix5LmxlZnQ9XCJyaWdodFwiKTpuK2Y+YlsyXSYmXCJyaWdodFwiPT09di5sZWZ0P1wibGVmdFwiPT09eS5sZWZ0PyhuLT1wLHYubGVmdD1cImxlZnRcIixuLT1mLHkubGVmdD1cInJpZ2h0XCIpOlwicmlnaHRcIj09PXkubGVmdCYmKG4tPXAsdi5sZWZ0PVwibGVmdFwiLG4rPWYseS5sZWZ0PVwibGVmdFwiKTpcImNlbnRlclwiPT09di5sZWZ0JiYobitmPmJbMl0mJlwibGVmdFwiPT09eS5sZWZ0PyhuLT1mLHkubGVmdD1cInJpZ2h0XCIpOm48YlswXSYmXCJyaWdodFwiPT09eS5sZWZ0JiYobis9Zix5LmxlZnQ9XCJsZWZ0XCIpKSksKFwiZWxlbWVudFwiPT09dXx8XCJib3RoXCI9PT11KSYmKG88YlsxXSYmXCJib3R0b21cIj09PXkudG9wJiYobys9cyx5LnRvcD1cInRvcFwiKSxvK3M+YlszXSYmXCJ0b3BcIj09PXkudG9wJiYoby09cyx5LnRvcD1cImJvdHRvbVwiKSksKFwiZWxlbWVudFwiPT09aHx8XCJib3RoXCI9PT1oKSYmKG48YlswXSYmKFwicmlnaHRcIj09PXkubGVmdD8obis9Zix5LmxlZnQ9XCJsZWZ0XCIpOlwiY2VudGVyXCI9PT15LmxlZnQmJihuKz1mLzIseS5sZWZ0PVwibGVmdFwiKSksbitmPmJbMl0mJihcImxlZnRcIj09PXkubGVmdD8obi09Zix5LmxlZnQ9XCJyaWdodFwiKTpcImNlbnRlclwiPT09eS5sZWZ0JiYobi09Zi8yLHkubGVmdD1cInJpZ2h0XCIpKSksXCJzdHJpbmdcIj09dHlwZW9mIGw/bD1sLnNwbGl0KFwiLFwiKS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQudHJpbSgpfSk6bD09PSEwJiYobD1bXCJ0b3BcIixcImxlZnRcIixcInJpZ2h0XCIsXCJib3R0b21cIl0pLGw9bHx8W107dmFyIHc9W10sQz1bXTtvPGJbMV0mJihsLmluZGV4T2YoXCJ0b3BcIik+PTA/KG89YlsxXSx3LnB1c2goXCJ0b3BcIikpOkMucHVzaChcInRvcFwiKSksbytzPmJbM10mJihsLmluZGV4T2YoXCJib3R0b21cIik+PTA/KG89YlszXS1zLHcucHVzaChcImJvdHRvbVwiKSk6Qy5wdXNoKFwiYm90dG9tXCIpKSxuPGJbMF0mJihsLmluZGV4T2YoXCJsZWZ0XCIpPj0wPyhuPWJbMF0sdy5wdXNoKFwibGVmdFwiKSk6Qy5wdXNoKFwibGVmdFwiKSksbitmPmJbMl0mJihsLmluZGV4T2YoXCJyaWdodFwiKT49MD8obj1iWzJdLWYsdy5wdXNoKFwicmlnaHRcIikpOkMucHVzaChcInJpZ2h0XCIpKSx3Lmxlbmd0aCYmIWZ1bmN0aW9uKCl7dmFyIHQ9dm9pZCAwO3Q9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIGUub3B0aW9ucy5waW5uZWRDbGFzcz9lLm9wdGlvbnMucGlubmVkQ2xhc3M6ZS5nZXRDbGFzcyhcInBpbm5lZFwiKSxnLnB1c2godCksdy5mb3JFYWNoKGZ1bmN0aW9uKGUpe2cucHVzaCh0K1wiLVwiK2UpfSl9KCksQy5sZW5ndGgmJiFmdW5jdGlvbigpe3ZhciB0PXZvaWQgMDt0PVwidW5kZWZpbmVkXCIhPXR5cGVvZiBlLm9wdGlvbnMub3V0T2ZCb3VuZHNDbGFzcz9lLm9wdGlvbnMub3V0T2ZCb3VuZHNDbGFzczplLmdldENsYXNzKFwib3V0LW9mLWJvdW5kc1wiKSxnLnB1c2godCksQy5mb3JFYWNoKGZ1bmN0aW9uKGUpe2cucHVzaCh0K1wiLVwiK2UpfSl9KCksKHcuaW5kZXhPZihcImxlZnRcIik+PTB8fHcuaW5kZXhPZihcInJpZ2h0XCIpPj0wKSYmKHkubGVmdD12LmxlZnQ9ITEpLCh3LmluZGV4T2YoXCJ0b3BcIik+PTB8fHcuaW5kZXhPZihcImJvdHRvbVwiKT49MCkmJih5LnRvcD12LnRvcD0hMSksKHYudG9wIT09aS50b3B8fHYubGVmdCE9PWkubGVmdHx8eS50b3AhPT1lLmF0dGFjaG1lbnQudG9wfHx5LmxlZnQhPT1lLmF0dGFjaG1lbnQubGVmdCkmJihlLnVwZGF0ZUF0dGFjaENsYXNzZXMoeSx2KSxlLnRyaWdnZXIoXCJ1cGRhdGVcIix7YXR0YWNobWVudDp5LHRhcmdldEF0dGFjaG1lbnQ6dn0pKX0pLE0oZnVuY3Rpb24oKXtlLm9wdGlvbnMuYWRkVGFyZ2V0Q2xhc3NlcyE9PSExJiZtKGUudGFyZ2V0LGcsYyksbShlLmVsZW1lbnQsZyxjKX0pLHt0b3A6byxsZWZ0Om59fX0pO3ZhciBqPXguVXRpbHMsYT1qLmdldEJvdW5kcyxtPWoudXBkYXRlQ2xhc3NlcyxNPWouZGVmZXI7eC5tb2R1bGVzLnB1c2goe3Bvc2l0aW9uOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMsbz10LnRvcCxuPXQubGVmdCxpPXRoaXMuY2FjaGUoXCJlbGVtZW50LWJvdW5kc1wiLGZ1bmN0aW9uKCl7cmV0dXJuIGEoZS5lbGVtZW50KX0pLHI9aS5oZWlnaHQscz1pLndpZHRoLGY9dGhpcy5nZXRUYXJnZXRCb3VuZHMoKSxsPW8rcixoPW4rcyx1PVtdO288PWYuYm90dG9tJiZsPj1mLnRvcCYmW1wibGVmdFwiLFwicmlnaHRcIl0uZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgZT1mW3RdOyhlPT09bnx8ZT09PWgpJiZ1LnB1c2godCl9KSxuPD1mLnJpZ2h0JiZoPj1mLmxlZnQmJltcInRvcFwiLFwiYm90dG9tXCJdLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIGU9Zlt0XTsoZT09PW98fGU9PT1sKSYmdS5wdXNoKHQpfSk7dmFyIGQ9W10scD1bXSxjPVtcImxlZnRcIixcInRvcFwiLFwicmlnaHRcIixcImJvdHRvbVwiXTtyZXR1cm4gZC5wdXNoKHRoaXMuZ2V0Q2xhc3MoXCJhYnV0dGVkXCIpKSxjLmZvckVhY2goZnVuY3Rpb24odCl7ZC5wdXNoKGUuZ2V0Q2xhc3MoXCJhYnV0dGVkXCIpK1wiLVwiK3QpfSksdS5sZW5ndGgmJnAucHVzaCh0aGlzLmdldENsYXNzKFwiYWJ1dHRlZFwiKSksdS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3AucHVzaChlLmdldENsYXNzKFwiYWJ1dHRlZFwiKStcIi1cIit0KX0pLE0oZnVuY3Rpb24oKXtlLm9wdGlvbnMuYWRkVGFyZ2V0Q2xhc3NlcyE9PSExJiZtKGUudGFyZ2V0LHAsZCksbShlLmVsZW1lbnQscCxkKX0pLCEwfX0pO3ZhciBCPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUpe3ZhciBvPVtdLG49ITAsaT0hMSxyPXZvaWQgMDt0cnl7Zm9yKHZhciBzLGE9dFtTeW1ib2wuaXRlcmF0b3JdKCk7IShuPShzPWEubmV4dCgpKS5kb25lKSYmKG8ucHVzaChzLnZhbHVlKSwhZXx8by5sZW5ndGghPT1lKTtuPSEwKTt9Y2F0Y2goZil7aT0hMCxyPWZ9ZmluYWxseXt0cnl7IW4mJmFbXCJyZXR1cm5cIl0mJmFbXCJyZXR1cm5cIl0oKX1maW5hbGx5e2lmKGkpdGhyb3cgcn19cmV0dXJuIG99cmV0dXJuIGZ1bmN0aW9uKGUsbyl7aWYoQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gZTtpZihTeW1ib2wuaXRlcmF0b3IgaW4gT2JqZWN0KGUpKXJldHVybiB0KGUsbyk7dGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2VcIil9fSgpO3JldHVybiB4Lm1vZHVsZXMucHVzaCh7cG9zaXRpb246ZnVuY3Rpb24odCl7dmFyIGU9dC50b3Asbz10LmxlZnQ7aWYodGhpcy5vcHRpb25zLnNoaWZ0KXt2YXIgbj10aGlzLm9wdGlvbnMuc2hpZnQ7XCJmdW5jdGlvblwiPT10eXBlb2YgdGhpcy5vcHRpb25zLnNoaWZ0JiYobj10aGlzLm9wdGlvbnMuc2hpZnQuY2FsbCh0aGlzLHt0b3A6ZSxsZWZ0Om99KSk7dmFyIGk9dm9pZCAwLHI9dm9pZCAwO2lmKFwic3RyaW5nXCI9PXR5cGVvZiBuKXtuPW4uc3BsaXQoXCIgXCIpLG5bMV09blsxXXx8blswXTt2YXIgcz1uLGE9QihzLDIpO2k9YVswXSxyPWFbMV0saT1wYXJzZUZsb2F0KGksMTApLHI9cGFyc2VGbG9hdChyLDEwKX1lbHNlIGk9bi50b3Ascj1uLmxlZnQ7cmV0dXJuIGUrPWksbys9cix7dG9wOmUsbGVmdDpvfX19fSksSX0pOyIsImRlZmluZShmdW5jdGlvbigpIHtcblxuICAgIHJldHVybiB7XG5cbiAgICAgICAgaW5pdCgpIHtcbiAgICAgICAgICAgICQoZG9jdW1lbnQpLm9uKCdzaG93LmJzLm1vZGFsJywgJy5qcy1hamF4LW1vZGFsJywgdGhpcy5pbml0TW9kYWxzKTtcbiAgICAgICAgfSxcblxuXG4gICAgICAgIGluaXRNb2RhbHMoZSkge1xuICAgICAgICAgICAgdmFyICRtb2RhbCA9ICQodGhpcyk7XG5cblxuICAgICAgICAgICAgaWYgKCEkbW9kYWwuZGF0YSgnbG9hZGVkJykpIHtcbiAgICAgICAgICAgICAgICB2YXIgJGJ0biA9ICQoZS5yZWxhdGVkVGFyZ2V0KSxcbiAgICAgICAgICAgICAgICAgICAgbGluayA9ICRidG4uZGF0YSgnbGluaycpO1xuXG4gICAgICAgICAgICAgICAgJG1vZGFsLmRhdGEoJ2xvYWRlZCcsIHRydWUpO1xuICAgICAgICAgICAgICAgICRtb2RhbC5maW5kKCcuanMtYWpheC1tb2RhbC1ib2R5JykuYXBwZW5kKCc8aWZyYW1lIGNsYXNzPVwiYWpheC1tb2RhbF9fYm9keV9faWZyYW1lXCIgZnJhbWVib3JkZXI9XCIwXCIgc3JjPVwiJyArIGxpbmsgKyAnXCIgd2lkdGg9XCIxMDAlXCIgaGVpZ2h0PVwiMTAwJVwiIHNjcm9sbGluZz1cImF1dG9cIj48L2lmcmFtZT4nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcblxuXG4gICAgICAgIHJlc2V0QWpheE1vZGFscygpIHtcbiAgICAgICAgICAgICQoJy5qcy1hamF4LW1vZGFsJykub2ZmKCdzaG93LmJzLm1vZGFsJywgdGhpcy5pbml0TW9kYWxzKTtcbiAgICAgICAgICAgICQoJy5qcy1hamF4LW1vZGFsJykub24oJ3Nob3cuYnMubW9kYWwnLCB0aGlzLmluaXRNb2RhbHMpO1xuICAgICAgICB9LFxuICAgIH1cbn0pO1xuIiwiZGVmaW5lKGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKG4pIHtcbiAgICAgICAgdmFyIGEgPSB0aGlzLmdlbmVyYWw7XG4gICAgICAgIGEuZGVib3VuY2UgPSBmdW5jdGlvbiAobiwgYSwgZSkge1xuICAgICAgICAgICAgdmFyIHQ7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHZhciByID0gdGhpcywgdSA9IGFyZ3VtZW50cywgaSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgdCA9IG51bGwsIGUgfHwgbi5hcHBseShyLCB1KVxuICAgICAgICAgICAgICAgIH0sIG8gPSBlICYmICF0O1xuICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dCh0KSwgdCA9IHNldFRpbWVvdXQoaSwgYSksIG8gJiYgbi5hcHBseShyLCB1KVxuICAgICAgICAgICAgfVxuICAgICAgICB9LCBhLmVhc2VJbk91dFF1YWQgPSBmdW5jdGlvbiAobiwgYSwgZSwgdCkge1xuICAgICAgICAgICAgcmV0dXJuIG4gLz0gdCAvIDIsIDEgPiBuID8gZSAvIDIgKiBuICogbiArIGEgOiAobi0tLCAtZSAvIDIgKiAobiAqIChuIC0gMikgLSAxKSArIGEpXG4gICAgICAgIH0sIGEuYW5pbWF0ZSA9IGZ1bmN0aW9uIChuLCBhLCBlLCB0LCByLCB1KSB7XG4gICAgICAgICAgICBuICYmICh3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBuLnN0eWxlW2FdID0gclxuICAgICAgICAgICAgfSwgdSksIG4uc3R5bGVbYV0gPSB0KVxuICAgICAgICB9XG4gICAgfVxufSk7IiwiZGVmaW5lKGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKHQsIGUpIHtcbiAgICAgICAgdmFyIGEsIG8sIG4sIGMsIGksIGwsIHIgPSAxNTAsIHUgPSAwLCBzID0gXCJqcy10b2dnbGUtYnRuXCIsIGcgPSBcInRvZ2dsZS1idG4tLWFjdGl2ZVwiLCBkID0gXCJ0b2dnbGUtaXRlbS0tYWN0aXZlXCIsXG4gICAgICAgICAgICBmID0gXCJ0b2dnbGUtaXRlbV9fY29udGVudFwiO1xuICAgICAgICBvID0gZnVuY3Rpb24gKHQsIGUsIGEpIHtcbiAgICAgICAgICAgIGZvciAodmFyIG8gPSBlLnNwbGl0KFwiIFwiKSwgbiA9IDAsIGMgPSBvLmxlbmd0aDsgYyA+IG47IG4rKykgdC5hZGRFdmVudExpc3RlbmVyKG9bbl0sIGEsICExKVxuICAgICAgICB9LCBuID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgW10uZm9yRWFjaC5jYWxsKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCIuXCIgKyBzKSwgZnVuY3Rpb24gKHQpIHtcbiAgICAgICAgICAgICAgICBvKHQsIFwiY2xpY2sgdG91Y2hzdGFydCBtb3VzZWRvd25cIiwgZnVuY3Rpb24gKHQpIHtcbiAgICAgICAgICAgICAgICAgICAgdC5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICAgICAgICAgICAgfSksIG8odCwgXCJ0b3VjaGVuZCBtb3VzZXVwXCIsIGZ1bmN0aW9uIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBhID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCh0LmdldEF0dHJpYnV0ZShcImRhdGEtdGFyZ2V0XCIpKVswXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG8gPSBhLnF1ZXJ5U2VsZWN0b3JBbGwoXCIuXCIgKyBmKVswXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG4gPSBvLm9mZnNldEhlaWdodCwgdiA9IGEuY2xhc3NMaXN0LmNvbnRhaW5zKGQpLCBiID0gdC5nZXRBdHRyaWJ1dGUoXCJkYXRhLWhpZGUtb3RoZXJzXCIpO1xuICAgICAgICAgICAgICAgICAgICBpZiAodSA9IG51bGwgIT09IHQuZ2V0QXR0cmlidXRlKFwiZGF0YS1kdXJhdGlvblwiKSA/IHQuZ2V0QXR0cmlidXRlKFwiZGF0YS1kdXJhdGlvblwiKSA6IHIsIHYpIGkodCwgYSk7IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaCA9IHQuZ2V0QXR0cmlidXRlKFwiZGF0YS10YXJnZXRcIiksIG0gPSB0LmdldEF0dHJpYnV0ZShcImRhdGEtbGV2ZWxcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW10uZm9yRWFjaC5jYWxsKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCIuXCIgKyBzICsgJ1tkYXRhLWxldmVsPVwiJyArIG0gKyAnXCJdJyksIGZ1bmN0aW9uICh0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlID0gdC5nZXRBdHRyaWJ1dGUoXCJkYXRhLXRhcmdldFwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaCAhPT0gZSAmJiB0LmNsYXNzTGlzdC5jb250YWlucyhnKSAmJiBsKHQsIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoZSlbMF0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGModCwgYSwgbywgbilcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB9KVxuICAgICAgICB9LCBjID0gZnVuY3Rpb24gKHQsIGUsIGEsIG8pIHtcbiAgICAgICAgICAgIGNhcmdvYmF5LmdlbmVyYWwuYW5pbWF0ZShlLCBcImhlaWdodFwiLCBcInB4XCIsIG8sIFwiYXV0b1wiLCB1KSwgdC5jbGFzc0xpc3QuYWRkKGcpLCBlLmNsYXNzTGlzdC5hZGQoZClcbiAgICAgICAgfSwgaSA9IGZ1bmN0aW9uICh0LCBlLCBhLCBvKSB7XG4gICAgICAgICAgICBjYXJnb2JheS5nZW5lcmFsLmFuaW1hdGUoZSwgXCJoZWlnaHRcIiwgXCJweFwiLCAwLCBvLCB1KSwgdC5jbGFzc0xpc3QucmVtb3ZlKGcpLCBlLmNsYXNzTGlzdC5yZW1vdmUoZClcbiAgICAgICAgfSwgbCA9IGZ1bmN0aW9uICh0LCBlKSB7XG4gICAgICAgICAgICB0LmNsYXNzTGlzdC5yZW1vdmUoZyksIGUuc3R5bGUuaGVpZ2h0ID0gMCwgZS5jbGFzc0xpc3QucmVtb3ZlKGQpXG4gICAgICAgIH0sIGEgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBuKClcbiAgICAgICAgfSgpXG4gICAgfVxufSk7IiwiZGVmaW5lKGZ1bmN0aW9uKCkge1xuXG4gICAgcmV0dXJuIHtcblxuICAgICAgICBpbml0KCkge1xuICAgICAgICAgICAgdGhpcy51cmxDaG9vc2VyKCk7XG4gICAgICAgICAgICB0aGlzLmluaXREZWxCdG4oKTtcbiAgICAgICAgfSxcblxuICAgICAgICAvLyBEZWwgYnRuXG4gICAgICAgIGluaXREZWxCdG4oKSB7XG4gICAgICAgICAgICAkKCdib2R5Jykub24oJ2NsaWNrJywgJy5qcy1tZWRpYS1jaG9vc2VyLWRlbC1wcmV2aWV3LWJ0bicsIGZ1bmN0aW9uIChlKSB7XG4gICAgICAgICAgICAgICAgdmFyICR0aGlzID0gJCh0aGlzKSxcbiAgICAgICAgICAgICAgICAgICAgbGlua2VkSUQgPSAkdGhpcy5kYXRhKCdsaW5rZWQtaWQnKSxcbiAgICAgICAgICAgICAgICAgICAgJHdpZGdldCA9ICQoJyMnICsgbGlua2VkSUQgKyAnLXdpZGdldCcpLFxuICAgICAgICAgICAgICAgICAgICAkaW5wdXQgPSAkKCcjJyArIGxpbmtlZElEKTtcblxuICAgICAgICAgICAgICAgICR0aGlzLnBhcmVudCgpLmZpbmQoJy5tZWRpYS1jaG9vc2VyX19wcmV2aWV3JykucmVtb3ZlKCk7XG5cbiAgICAgICAgICAgICAgICAkKFwiLm1lZGlhLXRodW1ibmFpbF9faWNvblwiKS5yZW1vdmUoKTtcblxuICAgICAgICAgICAgICAgICR3aWRnZXQucmVtb3ZlQ2xhc3MoJ21lZGlhLWNob29zZXItLWNob29zZW4nKTtcbiAgICAgICAgICAgICAgICAkaW5wdXQudmFsKCcnKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuXG4gICAgICAgIC8vIFVSTC1DaG9vc2VyXG4gICAgICAgIHVybENob29zZXIoKSB7XG5cbiAgICAgICAgICAgIC8vIExpbmsgQ2hvb3NlciBzZWxlY3RcbiAgICAgICAgICAgICQoJ2JvZHknKS5vbignY2xpY2snLCAnLmpzLXVybC1jaG9vc2VyLWxpbmstc2VsZWN0JywgZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgICAgICAgICAgICB2YXIgJHRoaXMgPSAkKHRoaXMpLFxuICAgICAgICAgICAgICAgICAgICBzbHVnID0gJHRoaXMuZGF0YSgnc2x1ZycpLFxuICAgICAgICAgICAgICAgICAgICBpZCA9ICR0aGlzLmRhdGEoJ2lkJyksXG4gICAgICAgICAgICAgICAgICAgIHJlcGxhY2VVcmwgPSAkdGhpcy5jbG9zZXN0KCduYXYnKS5kYXRhKCdyZXBsYWNlLXVybCcpO1xuXG4gICAgICAgICAgICAgICAgLy8gU3RvcmUgdmFsdWVzXG4gICAgICAgICAgICAgICAgaXRlbVVybCA9IChzbHVnID8gc2x1ZyA6ICcnKTtcbiAgICAgICAgICAgICAgICBpdGVtSWQgPSBpZDtcblxuICAgICAgICAgICAgICAgIC8vIFJlcGxhY2UgVVJMXG4gICAgICAgICAgICAgICAgJC5hamF4KHtcbiAgICAgICAgICAgICAgICAgICAgdXJsOiByZXBsYWNlVXJsLFxuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnR0VUJyxcbiAgICAgICAgICAgICAgICAgICAgZGF0YTogeyd0ZXh0JzogaXRlbVVybH0sXG4gICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uIChyZXNwb25zZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVwbGFjZWRVcmwgPSByZXNwb25zZS50ZXh0O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBVcGRhdGUgcHJldmlld1xuICAgICAgICAgICAgICAgICAgICAgICAgJCgnI3VybC1jaG9vc2VyX19zZWxlY3Rpb24tcHJldmlldycpLnRleHQoJ1NlbGVjdGlvbjogJyArIHJlcGxhY2VkVXJsKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIC8vIE1lZGlhIENob29zZXIgc2VsZWN0XG4gICAgICAgICAgICAkKCdib2R5Jykub24oJ2NsaWNrJywgJy5qcy11cmwtY2hvb3Nlci1tZWRpYS1zZWxlY3QnLCBmdW5jdGlvbiAoZSkge1xuICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgICAgICAgICAgIHZhciAkdGhpcyA9ICQodGhpcyksXG4gICAgICAgICAgICAgICAgICAgIHBhdGggPSAkdGhpcy5kYXRhKCdwYXRoJyksXG4gICAgICAgICAgICAgICAgICAgIHRodW1iUGF0aCA9ICR0aGlzLmRhdGEoJ3RodW1iLXBhdGgnKSxcbiAgICAgICAgICAgICAgICAgICAgaWQgPSAkdGhpcy5kYXRhKCdpZCcpLFxuICAgICAgICAgICAgICAgICAgICB0aXRsZSA9ICR0aGlzLmRhdGEoJ3RpdGxlJyksXG4gICAgICAgICAgICAgICAgICAgIGNrZSA9ICR0aGlzLmRhdGEoJ2NrZScpLFxuICAgICAgICAgICAgICAgICAgICByZXBsYWNlVXJsID0gJHRoaXMuY2xvc2VzdCgnLnRodW1ibmFpbC13cmFwcGVyJykuZGF0YSgncmVwbGFjZS11cmwnKTtcblxuICAgICAgICAgICAgICAgIC8vIFN0b3JlIHZhbHVlc1xuICAgICAgICAgICAgICAgIGl0ZW1VcmwgPSBwYXRoO1xuICAgICAgICAgICAgICAgIGl0ZW1JZCA9IGlkO1xuICAgICAgICAgICAgICAgIGl0ZW1UaXRsZSA9IHRpdGxlO1xuICAgICAgICAgICAgICAgIGl0ZW1UaHVtYlBhdGggPSB0aHVtYlBhdGg7XG5cbiAgICAgICAgICAgICAgICAvLyBTYXZlXG4gICAgICAgICAgICAgICAgaWYgKCFja2UpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGlzTWVkaWFDaG9vc2VyID0gJCh3aW5kb3cuZnJhbWVFbGVtZW50KS5jbG9zZXN0KCcuanMtYWpheC1tb2RhbCcpLmRhdGEoJ21lZGlhLWNob29zZXInKTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoaXNNZWRpYUNob29zZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBzYy5tZWRpYUNob29zZXIuc2F2ZU1lZGlhQ2hvb3Nlck1vZGFsKGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJlcGxhY2UgVVJMXG4gICAgICAgICAgICAgICAgICAgICAgICAkLmFqYXgoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybDogcmVwbGFjZVVybCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnR0VUJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiB7J3RleHQnOiBpdGVtVXJsfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAocmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwbGFjZWRVcmwgPSByZXNwb25zZS50ZXh0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0pLmRvbmUoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBzYy5tZWRpYUNob29zZXIuc2F2ZVVybENob29zZXJNb2RhbChmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcHNjLm1lZGlhQ2hvb3Nlci5zYXZlTWVkaWFDaG9vc2VyTW9kYWwodHJ1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG5cblxuICAgICAgICAgICAgLy8gQ2FuY2VsXG4gICAgICAgICAgICAkKCcjY2FuY2VsLXVybC1jaG9vc2VyLW1vZGFsJykub24oJ2NsaWNrJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHZhciBja2UgPSAkKHRoaXMpLmRhdGEoJ2NrZScpO1xuXG4gICAgICAgICAgICAgICAgaWYgKCFja2UpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyICRwYXJlbnRNb2RhbCA9ICQod2luZG93LmZyYW1lRWxlbWVudCkuY2xvc2VzdCgnLmpzLWFqYXgtbW9kYWwnKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudE1vZGFsSWQgPSAkcGFyZW50TW9kYWwuYXR0cignaWQnKTtcblxuICAgICAgICAgICAgICAgICAgICBwYXJlbnQuJCgnIycgKyBwYXJlbnRNb2RhbElkKS5tb2RhbCgnaGlkZScpO1xuXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgd2luZG93LmNsb3NlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG5cblxuICAgICAgICAgICAgLy8gT0tcbiAgICAgICAgICAgICQoZG9jdW1lbnQpLm9uKCdjbGljaycsICcjc2F2ZS11cmwtY2hvb3Nlci1tb2RhbCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICB2YXIgY2tlID0gJCh0aGlzKS5kYXRhKCdja2UnKTtcblxuICAgICAgICAgICAgICAgIHBzYy5tZWRpYUNob29zZXIuc2F2ZVVybENob29zZXJNb2RhbChja2UpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLy8gU2F2ZSBmb3IgVVJMLWNob29zZXJcbiAgICAgICAgc2F2ZVVybENob29zZXJNb2RhbChja2UpIHtcbiAgICAgICAgICAgIGlmICghY2tlKSB7XG4gICAgICAgICAgICAgICAgdmFyICRwYXJlbnRNb2RhbCA9ICQod2luZG93LmZyYW1lRWxlbWVudCkuY2xvc2VzdCgnLmpzLWFqYXgtbW9kYWwnKSxcbiAgICAgICAgICAgICAgICAgICAgbGlua2VkSW5wdXRJZCA9ICRwYXJlbnRNb2RhbC5kYXRhKCdsaW5rZWQtaW5wdXQtaWQnKSxcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50TW9kYWxJZCA9ICRwYXJlbnRNb2RhbC5hdHRyKCdpZCcpO1xuXG4gICAgICAgICAgICAgICAgLy8gU2V0IHZhbFxuICAgICAgICAgICAgICAgIHBhcmVudC4kKCcjJyArIGxpbmtlZElucHV0SWQpLnZhbChpdGVtVXJsKS5jaGFuZ2UoKTtcblxuICAgICAgICAgICAgICAgIC8vIFNldCBwcm9wZXIgVVJMXG4gICAgICAgICAgICAgICAgcGFyZW50LiQoJyMnICsgbGlua2VkSW5wdXRJZCkucGFyZW50KCkuZmluZCgnLmpzLXVybGNob29zZXItdmFsdWUnKS52YWwocmVwbGFjZWRVcmwpO1xuXG4gICAgICAgICAgICAgICAgLy8gQ2xvc2UgbW9kYWxcbiAgICAgICAgICAgICAgICBwYXJlbnQuJCgnIycgKyBwYXJlbnRNb2RhbElkKS5tb2RhbCgnaGlkZScpO1xuXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHZhciBmdW5jTnVtID0gZ2V0VXJsUGFyYW0oJ0NLRWRpdG9yRnVuY051bScpO1xuXG4gICAgICAgICAgICAgICAgLy8gU2V0IHZhbFxuICAgICAgICAgICAgICAgIHdpbmRvdy5vcGVuZXIuQ0tFRElUT1IudG9vbHMuY2FsbEZ1bmN0aW9uKGZ1bmNOdW0sIGl0ZW1VcmwpO1xuXG4gICAgICAgICAgICAgICAgLy8gQ2xvc2Ugd2luZG93XG4gICAgICAgICAgICAgICAgd2luZG93LmNsb3NlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG5cblxuICAgICAgICAvLyBTYXZlIGZvciBNZWRpYS1jaG9vc2VyXG4gICAgICAgIHNhdmVNZWRpYUNob29zZXJNb2RhbChja2UpIHtcbiAgICAgICAgICAgIGlmICghY2tlKSB7XG4gICAgICAgICAgICAgICAgdmFyICRwYXJlbnRNb2RhbCA9ICQod2luZG93LmZyYW1lRWxlbWVudCkuY2xvc2VzdCgnLmpzLWFqYXgtbW9kYWwnKSxcbiAgICAgICAgICAgICAgICAgICAgbGlua2VkSW5wdXRJZCA9ICRwYXJlbnRNb2RhbC5kYXRhKCdsaW5rZWQtaW5wdXQtaWQnKSxcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50TW9kYWxJZCA9ICRwYXJlbnRNb2RhbC5hdHRyKCdpZCcpO1xuXG4gICAgICAgICAgICAgICAgLy8gU2V0IHZhbFxuICAgICAgICAgICAgICAgIHBhcmVudC4kKCcjJyArIGxpbmtlZElucHV0SWQpLnZhbChpdGVtSWQpLmNoYW5nZSgpO1xuXG4gICAgICAgICAgICAgICAgLy8gVXBkYXRlIHByZXZpZXdcbiAgICAgICAgICAgICAgICB2YXIgJG1lZGlhQ2hvb3NlciA9IHBhcmVudC4kKCcjJyArIGxpbmtlZElucHV0SWQgKyAnLXdpZGdldCcpLFxuICAgICAgICAgICAgICAgICAgICAkcHJldmlld0ltZyA9IHBhcmVudC4kKCcjJyArIGxpbmtlZElucHV0SWQgKyAnX19wcmV2aWV3X19pbWcnKSxcbiAgICAgICAgICAgICAgICAgICAgJHByZXZpZXdUaXRsZSA9IHBhcmVudC4kKCcjJyArIGxpbmtlZElucHV0SWQgKyAnX19wcmV2aWV3X190aXRsZScpO1xuXG4gICAgICAgICAgICAgICAgJG1lZGlhQ2hvb3Nlci5hZGRDbGFzcygnbWVkaWEtY2hvb3Nlci0tY2hvb3NlbicpO1xuICAgICAgICAgICAgICAgICRwcmV2aWV3VGl0bGUuaHRtbChpdGVtVGl0bGUpO1xuXG4gICAgICAgICAgICAgICAgaWYgKGl0ZW1UaHVtYlBhdGggPT09IFwiXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyICRwYXJlbnQgPSAkcHJldmlld1RpdGxlLnBhcmVudCgpO1xuICAgICAgICAgICAgICAgICAgICAkcGFyZW50LnByZXBlbmQoJzxpIGNsYXNzPVwiZmEgZmEtZmlsZS1vIG1lZGlhLXRodW1ibmFpbF9faWNvblwiPjwvaT4nKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAkcHJldmlld0ltZy5hdHRyKCdzcmMnLCBpdGVtVGh1bWJQYXRoKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvLyBDbG9zZSBtb2RhbFxuICAgICAgICAgICAgICAgIHBhcmVudC4kKCcjJyArIHBhcmVudE1vZGFsSWQpLm1vZGFsKCdoaWRlJyk7XG5cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdmFyIGZ1bmNOdW0gPSBnZXRVcmxQYXJhbSgnQ0tFZGl0b3JGdW5jTnVtJyk7XG5cbiAgICAgICAgICAgICAgICAvLyBTZXQgdmFsXG4gICAgICAgICAgICAgICAgd2luZG93Lm9wZW5lci5DS0VESVRPUi50b29scy5jYWxsRnVuY3Rpb24oZnVuY051bSwgaXRlbVVybCk7XG5cbiAgICAgICAgICAgICAgICAvLyBDbG9zZSB3aW5kb3dcbiAgICAgICAgICAgICAgICB3aW5kb3cuY2xvc2UoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcblxuXG4gICAgICAgIC8vIEdldCBVcmwgUGFyYW1ldGVyc1xuICAgICAgICBnZXRVcmxQYXJhbShwYXJhbU5hbWUpIHtcbiAgICAgICAgICAgIHZhciByZVBhcmFtID0gbmV3IFJlZ0V4cCgnKD86W1xcPyZdfCZhbXA7KScgKyBwYXJhbU5hbWUgKyAnPShbXiZdKyknLCAnaScpLFxuICAgICAgICAgICAgICAgIG1hdGNoID0gd2luZG93LmxvY2F0aW9uLnNlYXJjaC5tYXRjaChyZVBhcmFtKTtcblxuICAgICAgICAgICAgcmV0dXJuIChtYXRjaCAmJiBtYXRjaC5sZW5ndGggPiAxKSA/IG1hdGNoWzFdIDogJyc7XG4gICAgICAgIH1cblxuICAgIH1cbn0pO1xuIiwiaW1wb3J0IHsgQ29udHJvbGxlciB9IGZyb20gJ0Bob3R3aXJlZC9zdGltdWx1cyc7XG5pbXBvcnQgVG9tU2VsZWN0IGZyb20gJ3RvbS1zZWxlY3QnO1xuXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXHJcbkNvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxyXG5cclxuUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55XHJcbnB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZC5cclxuXHJcblRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTIFdJVEhcclxuUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZXHJcbkFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIERJUkVDVCxcclxuSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NXHJcbkxPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SXHJcbk9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1JcclxuUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS5cclxuKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi9cclxuXHJcbmZ1bmN0aW9uIF9fY2xhc3NQcml2YXRlRmllbGRHZXQocmVjZWl2ZXIsIHN0YXRlLCBraW5kLCBmKSB7XHJcbiAgICBpZiAoa2luZCA9PT0gXCJhXCIgJiYgIWYpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQcml2YXRlIGFjY2Vzc29yIHdhcyBkZWZpbmVkIHdpdGhvdXQgYSBnZXR0ZXJcIik7XHJcbiAgICBpZiAodHlwZW9mIHN0YXRlID09PSBcImZ1bmN0aW9uXCIgPyByZWNlaXZlciAhPT0gc3RhdGUgfHwgIWYgOiAhc3RhdGUuaGFzKHJlY2VpdmVyKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCByZWFkIHByaXZhdGUgbWVtYmVyIGZyb20gYW4gb2JqZWN0IHdob3NlIGNsYXNzIGRpZCBub3QgZGVjbGFyZSBpdFwiKTtcclxuICAgIHJldHVybiBraW5kID09PSBcIm1cIiA/IGYgOiBraW5kID09PSBcImFcIiA/IGYuY2FsbChyZWNlaXZlcikgOiBmID8gZi52YWx1ZSA6IHN0YXRlLmdldChyZWNlaXZlcik7XHJcbn1cblxudmFyIF9kZWZhdWx0XzFfaW5zdGFuY2VzLCBfZGVmYXVsdF8xX2dldENvbW1vbkNvbmZpZywgX2RlZmF1bHRfMV9jcmVhdGVBdXRvY29tcGxldGUsIF9kZWZhdWx0XzFfY3JlYXRlQXV0b2NvbXBsZXRlV2l0aEh0bWxDb250ZW50cywgX2RlZmF1bHRfMV9jcmVhdGVBdXRvY29tcGxldGVXaXRoUmVtb3RlRGF0YSwgX2RlZmF1bHRfMV9zdHJpcFRhZ3MsIF9kZWZhdWx0XzFfbWVyZ2VPYmplY3RzLCBfZGVmYXVsdF8xX2NyZWF0ZVRvbVNlbGVjdDtcbmNsYXNzIGRlZmF1bHRfMSBleHRlbmRzIENvbnRyb2xsZXIge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICBfZGVmYXVsdF8xX2luc3RhbmNlcy5hZGQodGhpcyk7XG4gICAgICAgIHRoaXMuaXNPYnNlcnZpbmcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5oYXNMb2FkZWRDaG9pY2VzUHJldmlvdXNseSA9IGZhbHNlO1xuICAgICAgICB0aGlzLm9yaWdpbmFsT3B0aW9ucyA9IFtdO1xuICAgIH1cbiAgICBpbml0aWFsaXplKCkge1xuICAgICAgICBpZiAoIXRoaXMubXV0YXRpb25PYnNlcnZlcikge1xuICAgICAgICAgICAgdGhpcy5tdXRhdGlvbk9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoKG11dGF0aW9ucykgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMub25NdXRhdGlvbnMobXV0YXRpb25zKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNvbm5lY3QoKSB7XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdEVsZW1lbnQpIHtcbiAgICAgICAgICAgIHRoaXMub3JpZ2luYWxPcHRpb25zID0gdGhpcy5jcmVhdGVPcHRpb25zRGF0YVN0cnVjdHVyZSh0aGlzLnNlbGVjdEVsZW1lbnQpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuaW5pdGlhbGl6ZVRvbVNlbGVjdCgpO1xuICAgIH1cbiAgICBpbml0aWFsaXplVG9tU2VsZWN0KCkge1xuICAgICAgICBpZiAodGhpcy5zZWxlY3RFbGVtZW50KSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdEVsZW1lbnQuc2V0QXR0cmlidXRlKCdkYXRhLXNraXAtbW9ycGgnLCAnJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMudXJsVmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMudG9tU2VsZWN0ID0gX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfZGVmYXVsdF8xX2luc3RhbmNlcywgXCJtXCIsIF9kZWZhdWx0XzFfY3JlYXRlQXV0b2NvbXBsZXRlV2l0aFJlbW90ZURhdGEpLmNhbGwodGhpcywgdGhpcy51cmxWYWx1ZSwgdGhpcy5oYXNNaW5DaGFyYWN0ZXJzVmFsdWUgPyB0aGlzLm1pbkNoYXJhY3RlcnNWYWx1ZSA6IG51bGwpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnNBc0h0bWxWYWx1ZSkge1xuICAgICAgICAgICAgdGhpcy50b21TZWxlY3QgPSBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9kZWZhdWx0XzFfaW5zdGFuY2VzLCBcIm1cIiwgX2RlZmF1bHRfMV9jcmVhdGVBdXRvY29tcGxldGVXaXRoSHRtbENvbnRlbnRzKS5jYWxsKHRoaXMpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudG9tU2VsZWN0ID0gX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfZGVmYXVsdF8xX2luc3RhbmNlcywgXCJtXCIsIF9kZWZhdWx0XzFfY3JlYXRlQXV0b2NvbXBsZXRlKS5jYWxsKHRoaXMpO1xuICAgICAgICB0aGlzLnN0YXJ0TXV0YXRpb25PYnNlcnZlcigpO1xuICAgIH1cbiAgICBkaXNjb25uZWN0KCkge1xuICAgICAgICB0aGlzLnN0b3BNdXRhdGlvbk9ic2VydmVyKCk7XG4gICAgICAgIGxldCBjdXJyZW50U2VsZWN0ZWRWYWx1ZXMgPSBbXTtcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0RWxlbWVudCkge1xuICAgICAgICAgICAgaWYgKHRoaXMuc2VsZWN0RWxlbWVudC5tdWx0aXBsZSkge1xuICAgICAgICAgICAgICAgIGN1cnJlbnRTZWxlY3RlZFZhbHVlcyA9IEFycmF5LmZyb20odGhpcy5zZWxlY3RFbGVtZW50Lm9wdGlvbnMpXG4gICAgICAgICAgICAgICAgICAgIC5maWx0ZXIoKG9wdGlvbikgPT4gb3B0aW9uLnNlbGVjdGVkKVxuICAgICAgICAgICAgICAgICAgICAubWFwKChvcHRpb24pID0+IG9wdGlvbi52YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBjdXJyZW50U2VsZWN0ZWRWYWx1ZXMgPSBbdGhpcy5zZWxlY3RFbGVtZW50LnZhbHVlXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLnRvbVNlbGVjdC5kZXN0cm95KCk7XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdEVsZW1lbnQpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdEVsZW1lbnQubXVsdGlwbGUpIHtcbiAgICAgICAgICAgICAgICBBcnJheS5mcm9tKHRoaXMuc2VsZWN0RWxlbWVudC5vcHRpb25zKS5mb3JFYWNoKChvcHRpb24pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9uLnNlbGVjdGVkID0gY3VycmVudFNlbGVjdGVkVmFsdWVzLmluY2x1ZGVzKG9wdGlvbi52YWx1ZSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdEVsZW1lbnQudmFsdWUgPSBjdXJyZW50U2VsZWN0ZWRWYWx1ZXNbMF07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgZ2V0TWF4T3B0aW9ucygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0RWxlbWVudCA/IHRoaXMuc2VsZWN0RWxlbWVudC5vcHRpb25zLmxlbmd0aCA6IDUwO1xuICAgIH1cbiAgICBnZXQgc2VsZWN0RWxlbWVudCgpIHtcbiAgICAgICAgaWYgKCEodGhpcy5lbGVtZW50IGluc3RhbmNlb2YgSFRNTFNlbGVjdEVsZW1lbnQpKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5lbGVtZW50O1xuICAgIH1cbiAgICBnZXQgZm9ybUVsZW1lbnQoKSB7XG4gICAgICAgIGlmICghKHRoaXMuZWxlbWVudCBpbnN0YW5jZW9mIEhUTUxJbnB1dEVsZW1lbnQpICYmICEodGhpcy5lbGVtZW50IGluc3RhbmNlb2YgSFRNTFNlbGVjdEVsZW1lbnQpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0F1dG9jb21wbGV0ZSBTdGltdWx1cyBjb250cm9sbGVyIGNhbiBvbmx5IGJlIHVzZWQgb24gYW4gPGlucHV0PiBvciA8c2VsZWN0Pi4nKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5lbGVtZW50O1xuICAgIH1cbiAgICBkaXNwYXRjaEV2ZW50KG5hbWUsIHBheWxvYWQpIHtcbiAgICAgICAgdGhpcy5kaXNwYXRjaChuYW1lLCB7IGRldGFpbDogcGF5bG9hZCwgcHJlZml4OiAnYXV0b2NvbXBsZXRlJyB9KTtcbiAgICB9XG4gICAgZ2V0IHByZWxvYWQoKSB7XG4gICAgICAgIGlmICghdGhpcy5oYXNQcmVsb2FkVmFsdWUpIHtcbiAgICAgICAgICAgIHJldHVybiAnZm9jdXMnO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnByZWxvYWRWYWx1ZSA9PT0gJ2ZhbHNlJykge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnByZWxvYWRWYWx1ZSA9PT0gJ3RydWUnKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5wcmVsb2FkVmFsdWU7XG4gICAgfVxuICAgIHJlc2V0VG9tU2VsZWN0KCkge1xuICAgICAgICBpZiAodGhpcy50b21TZWxlY3QpIHtcbiAgICAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudCgnYmVmb3JlLXJlc2V0JywgeyB0b21TZWxlY3Q6IHRoaXMudG9tU2VsZWN0IH0pO1xuICAgICAgICAgICAgdGhpcy5zdG9wTXV0YXRpb25PYnNlcnZlcigpO1xuICAgICAgICAgICAgY29uc3QgY3VycmVudEh0bWwgPSB0aGlzLmVsZW1lbnQuaW5uZXJIVE1MO1xuICAgICAgICAgICAgY29uc3QgY3VycmVudFZhbHVlID0gdGhpcy50b21TZWxlY3QuZ2V0VmFsdWUoKTtcbiAgICAgICAgICAgIHRoaXMudG9tU2VsZWN0LmRlc3Ryb3koKTtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5pbm5lckhUTUwgPSBjdXJyZW50SHRtbDtcbiAgICAgICAgICAgIHRoaXMuaW5pdGlhbGl6ZVRvbVNlbGVjdCgpO1xuICAgICAgICAgICAgdGhpcy50b21TZWxlY3Quc2V0VmFsdWUoY3VycmVudFZhbHVlKTtcbiAgICAgICAgICAgIHRoaXMuc3RhcnRNdXRhdGlvbk9ic2VydmVyKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY2hhbmdlVG9tU2VsZWN0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkKSB7XG4gICAgICAgIHRoaXMuc3RvcE11dGF0aW9uT2JzZXJ2ZXIoKTtcbiAgICAgICAgaWYgKGlzRGlzYWJsZWQpIHtcbiAgICAgICAgICAgIHRoaXMudG9tU2VsZWN0LmRpc2FibGUoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMudG9tU2VsZWN0LmVuYWJsZSgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc3RhcnRNdXRhdGlvbk9ic2VydmVyKCk7XG4gICAgfVxuICAgIHN0YXJ0TXV0YXRpb25PYnNlcnZlcigpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzT2JzZXJ2aW5nICYmIHRoaXMubXV0YXRpb25PYnNlcnZlcikge1xuICAgICAgICAgICAgdGhpcy5tdXRhdGlvbk9ic2VydmVyLm9ic2VydmUodGhpcy5lbGVtZW50LCB7XG4gICAgICAgICAgICAgICAgY2hpbGRMaXN0OiB0cnVlLFxuICAgICAgICAgICAgICAgIHN1YnRyZWU6IHRydWUsXG4gICAgICAgICAgICAgICAgYXR0cmlidXRlczogdHJ1ZSxcbiAgICAgICAgICAgICAgICBjaGFyYWN0ZXJEYXRhOiB0cnVlLFxuICAgICAgICAgICAgICAgIGF0dHJpYnV0ZU9sZFZhbHVlOiB0cnVlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLmlzT2JzZXJ2aW5nID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzdG9wTXV0YXRpb25PYnNlcnZlcigpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNPYnNlcnZpbmcgJiYgdGhpcy5tdXRhdGlvbk9ic2VydmVyKSB7XG4gICAgICAgICAgICB0aGlzLm11dGF0aW9uT2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xuICAgICAgICAgICAgdGhpcy5pc09ic2VydmluZyA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuICAgIG9uTXV0YXRpb25zKG11dGF0aW9ucykge1xuICAgICAgICBsZXQgY2hhbmdlRGlzYWJsZWRTdGF0ZSA9IGZhbHNlO1xuICAgICAgICBsZXQgcmVxdWlyZVJlc2V0ID0gZmFsc2U7XG4gICAgICAgIG11dGF0aW9ucy5mb3JFYWNoKChtdXRhdGlvbikgPT4ge1xuICAgICAgICAgICAgc3dpdGNoIChtdXRhdGlvbi50eXBlKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAnYXR0cmlidXRlcyc6XG4gICAgICAgICAgICAgICAgICAgIGlmIChtdXRhdGlvbi50YXJnZXQgPT09IHRoaXMuZWxlbWVudCAmJiBtdXRhdGlvbi5hdHRyaWJ1dGVOYW1lID09PSAnZGlzYWJsZWQnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VEaXNhYmxlZFN0YXRlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChtdXRhdGlvbi50YXJnZXQgPT09IHRoaXMuZWxlbWVudCAmJiBtdXRhdGlvbi5hdHRyaWJ1dGVOYW1lID09PSAnbXVsdGlwbGUnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpc05vd011bHRpcGxlID0gdGhpcy5lbGVtZW50Lmhhc0F0dHJpYnV0ZSgnbXVsdGlwbGUnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHdhc011bHRpcGxlID0gbXV0YXRpb24ub2xkVmFsdWUgPT09ICdtdWx0aXBsZSc7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNOb3dNdWx0aXBsZSAhPT0gd2FzTXVsdGlwbGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1aXJlUmVzZXQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBuZXdPcHRpb25zID0gdGhpcy5zZWxlY3RFbGVtZW50ID8gdGhpcy5jcmVhdGVPcHRpb25zRGF0YVN0cnVjdHVyZSh0aGlzLnNlbGVjdEVsZW1lbnQpIDogW107XG4gICAgICAgIGNvbnN0IGFyZU9wdGlvbnNFcXVpdmFsZW50ID0gdGhpcy5hcmVPcHRpb25zRXF1aXZhbGVudChuZXdPcHRpb25zKTtcbiAgICAgICAgaWYgKCFhcmVPcHRpb25zRXF1aXZhbGVudCB8fCByZXF1aXJlUmVzZXQpIHtcbiAgICAgICAgICAgIHRoaXMub3JpZ2luYWxPcHRpb25zID0gbmV3T3B0aW9ucztcbiAgICAgICAgICAgIHRoaXMucmVzZXRUb21TZWxlY3QoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2hhbmdlRGlzYWJsZWRTdGF0ZSkge1xuICAgICAgICAgICAgdGhpcy5jaGFuZ2VUb21TZWxlY3REaXNhYmxlZFN0YXRlKHRoaXMuZm9ybUVsZW1lbnQuZGlzYWJsZWQpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNyZWF0ZU9wdGlvbnNEYXRhU3RydWN0dXJlKHNlbGVjdEVsZW1lbnQpIHtcbiAgICAgICAgcmV0dXJuIEFycmF5LmZyb20oc2VsZWN0RWxlbWVudC5vcHRpb25zKS5tYXAoKG9wdGlvbikgPT4ge1xuICAgICAgICAgICAgY29uc3Qgb3B0Z3JvdXAgPSBvcHRpb24uY2xvc2VzdCgnb3B0Z3JvdXAnKTtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgdmFsdWU6IG9wdGlvbi52YWx1ZSxcbiAgICAgICAgICAgICAgICB0ZXh0OiBvcHRpb24udGV4dCxcbiAgICAgICAgICAgICAgICBncm91cDogb3B0Z3JvdXAgPyBvcHRncm91cC5sYWJlbCA6IG51bGwsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgYXJlT3B0aW9uc0VxdWl2YWxlbnQobmV3T3B0aW9ucykge1xuICAgICAgICBjb25zdCBmaWx0ZXJlZE9yaWdpbmFsT3B0aW9ucyA9IHRoaXMub3JpZ2luYWxPcHRpb25zLmZpbHRlcigob3B0aW9uKSA9PiBvcHRpb24udmFsdWUgIT09ICcnKTtcbiAgICAgICAgY29uc3QgZmlsdGVyZWROZXdPcHRpb25zID0gbmV3T3B0aW9ucy5maWx0ZXIoKG9wdGlvbikgPT4gb3B0aW9uLnZhbHVlICE9PSAnJyk7XG4gICAgICAgIGNvbnN0IG9yaWdpbmFsUGxhY2Vob2xkZXJPcHRpb24gPSB0aGlzLm9yaWdpbmFsT3B0aW9ucy5maW5kKChvcHRpb24pID0+IG9wdGlvbi52YWx1ZSA9PT0gJycpO1xuICAgICAgICBjb25zdCBuZXdQbGFjZWhvbGRlck9wdGlvbiA9IG5ld09wdGlvbnMuZmluZCgob3B0aW9uKSA9PiBvcHRpb24udmFsdWUgPT09ICcnKTtcbiAgICAgICAgaWYgKG9yaWdpbmFsUGxhY2Vob2xkZXJPcHRpb24gJiZcbiAgICAgICAgICAgIG5ld1BsYWNlaG9sZGVyT3B0aW9uICYmXG4gICAgICAgICAgICBvcmlnaW5hbFBsYWNlaG9sZGVyT3B0aW9uLnRleHQgIT09IG5ld1BsYWNlaG9sZGVyT3B0aW9uLnRleHQpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZmlsdGVyZWRPcmlnaW5hbE9wdGlvbnMubGVuZ3RoICE9PSBmaWx0ZXJlZE5ld09wdGlvbnMubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgbm9ybWFsaXplT3B0aW9uID0gKG9wdGlvbikgPT4gYCR7b3B0aW9uLnZhbHVlfS0ke29wdGlvbi50ZXh0fS0ke29wdGlvbi5ncm91cH1gO1xuICAgICAgICBjb25zdCBvcmlnaW5hbE9wdGlvbnNTZXQgPSBuZXcgU2V0KGZpbHRlcmVkT3JpZ2luYWxPcHRpb25zLm1hcChub3JtYWxpemVPcHRpb24pKTtcbiAgICAgICAgY29uc3QgbmV3T3B0aW9uc1NldCA9IG5ldyBTZXQoZmlsdGVyZWROZXdPcHRpb25zLm1hcChub3JtYWxpemVPcHRpb24pKTtcbiAgICAgICAgcmV0dXJuIChvcmlnaW5hbE9wdGlvbnNTZXQuc2l6ZSA9PT0gbmV3T3B0aW9uc1NldC5zaXplICYmXG4gICAgICAgICAgICBbLi4ub3JpZ2luYWxPcHRpb25zU2V0XS5ldmVyeSgob3B0aW9uKSA9PiBuZXdPcHRpb25zU2V0LmhhcyhvcHRpb24pKSk7XG4gICAgfVxufVxuX2RlZmF1bHRfMV9pbnN0YW5jZXMgPSBuZXcgV2Vha1NldCgpLCBfZGVmYXVsdF8xX2dldENvbW1vbkNvbmZpZyA9IGZ1bmN0aW9uIF9kZWZhdWx0XzFfZ2V0Q29tbW9uQ29uZmlnKCkge1xuICAgIGNvbnN0IHBsdWdpbnMgPSB7fTtcbiAgICBjb25zdCBpc011bHRpcGxlID0gIXRoaXMuc2VsZWN0RWxlbWVudCB8fCB0aGlzLnNlbGVjdEVsZW1lbnQubXVsdGlwbGU7XG4gICAgaWYgKCF0aGlzLmZvcm1FbGVtZW50LmRpc2FibGVkICYmICFpc011bHRpcGxlKSB7XG4gICAgICAgIHBsdWdpbnMuY2xlYXJfYnV0dG9uID0geyB0aXRsZTogJycgfTtcbiAgICB9XG4gICAgaWYgKGlzTXVsdGlwbGUpIHtcbiAgICAgICAgcGx1Z2lucy5yZW1vdmVfYnV0dG9uID0geyB0aXRsZTogJycgfTtcbiAgICB9XG4gICAgaWYgKHRoaXMudXJsVmFsdWUpIHtcbiAgICAgICAgcGx1Z2lucy52aXJ0dWFsX3Njcm9sbCA9IHt9O1xuICAgIH1cbiAgICBjb25zdCByZW5kZXIgPSB7XG4gICAgICAgIG5vX3Jlc3VsdHM6ICgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBgPGRpdiBjbGFzcz1cIm5vLXJlc3VsdHNcIj4ke3RoaXMubm9SZXN1bHRzRm91bmRUZXh0VmFsdWV9PC9kaXY+YDtcbiAgICAgICAgfSxcbiAgICB9O1xuICAgIGNvbnN0IGNvbmZpZyA9IHtcbiAgICAgICAgcmVuZGVyLFxuICAgICAgICBwbHVnaW5zLFxuICAgICAgICBvbkl0ZW1BZGQ6ICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMudG9tU2VsZWN0LnNldFRleHRib3hWYWx1ZSgnJyk7XG4gICAgICAgIH0sXG4gICAgICAgIGNsb3NlQWZ0ZXJTZWxlY3Q6IHRydWUsXG4gICAgfTtcbiAgICBpZiAoIXRoaXMuc2VsZWN0RWxlbWVudCAmJiAhdGhpcy51cmxWYWx1ZSkge1xuICAgICAgICBjb25maWcuc2hvdWxkTG9hZCA9ICgpID0+IGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfZGVmYXVsdF8xX2luc3RhbmNlcywgXCJtXCIsIF9kZWZhdWx0XzFfbWVyZ2VPYmplY3RzKS5jYWxsKHRoaXMsIGNvbmZpZywgdGhpcy50b21TZWxlY3RPcHRpb25zVmFsdWUpO1xufSwgX2RlZmF1bHRfMV9jcmVhdGVBdXRvY29tcGxldGUgPSBmdW5jdGlvbiBfZGVmYXVsdF8xX2NyZWF0ZUF1dG9jb21wbGV0ZSgpIHtcbiAgICBjb25zdCBjb25maWcgPSBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9kZWZhdWx0XzFfaW5zdGFuY2VzLCBcIm1cIiwgX2RlZmF1bHRfMV9tZXJnZU9iamVjdHMpLmNhbGwodGhpcywgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfZGVmYXVsdF8xX2luc3RhbmNlcywgXCJtXCIsIF9kZWZhdWx0XzFfZ2V0Q29tbW9uQ29uZmlnKS5jYWxsKHRoaXMpLCB7XG4gICAgICAgIG1heE9wdGlvbnM6IHRoaXMuZ2V0TWF4T3B0aW9ucygpLFxuICAgIH0pO1xuICAgIHJldHVybiBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9kZWZhdWx0XzFfaW5zdGFuY2VzLCBcIm1cIiwgX2RlZmF1bHRfMV9jcmVhdGVUb21TZWxlY3QpLmNhbGwodGhpcywgY29uZmlnKTtcbn0sIF9kZWZhdWx0XzFfY3JlYXRlQXV0b2NvbXBsZXRlV2l0aEh0bWxDb250ZW50cyA9IGZ1bmN0aW9uIF9kZWZhdWx0XzFfY3JlYXRlQXV0b2NvbXBsZXRlV2l0aEh0bWxDb250ZW50cygpIHtcbiAgICBjb25zdCBjb25maWcgPSBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9kZWZhdWx0XzFfaW5zdGFuY2VzLCBcIm1cIiwgX2RlZmF1bHRfMV9tZXJnZU9iamVjdHMpLmNhbGwodGhpcywgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfZGVmYXVsdF8xX2luc3RhbmNlcywgXCJtXCIsIF9kZWZhdWx0XzFfZ2V0Q29tbW9uQ29uZmlnKS5jYWxsKHRoaXMpLCB7XG4gICAgICAgIG1heE9wdGlvbnM6IHRoaXMuZ2V0TWF4T3B0aW9ucygpLFxuICAgICAgICBzY29yZTogKHNlYXJjaCkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgc2NvcmluZ0Z1bmN0aW9uID0gdGhpcy50b21TZWxlY3QuZ2V0U2NvcmVGdW5jdGlvbihzZWFyY2gpO1xuICAgICAgICAgICAgcmV0dXJuIChpdGVtKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHNjb3JpbmdGdW5jdGlvbih7IC4uLml0ZW0sIHRleHQ6IF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX2RlZmF1bHRfMV9pbnN0YW5jZXMsIFwibVwiLCBfZGVmYXVsdF8xX3N0cmlwVGFncykuY2FsbCh0aGlzLCBpdGVtLnRleHQpIH0pO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfSxcbiAgICAgICAgcmVuZGVyOiB7XG4gICAgICAgICAgICBpdGVtOiAoaXRlbSkgPT4gYDxkaXY+JHtpdGVtLnRleHR9PC9kaXY+YCxcbiAgICAgICAgICAgIG9wdGlvbjogKGl0ZW0pID0+IGA8ZGl2PiR7aXRlbS50ZXh0fTwvZGl2PmAsXG4gICAgICAgIH0sXG4gICAgfSk7XG4gICAgcmV0dXJuIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX2RlZmF1bHRfMV9pbnN0YW5jZXMsIFwibVwiLCBfZGVmYXVsdF8xX2NyZWF0ZVRvbVNlbGVjdCkuY2FsbCh0aGlzLCBjb25maWcpO1xufSwgX2RlZmF1bHRfMV9jcmVhdGVBdXRvY29tcGxldGVXaXRoUmVtb3RlRGF0YSA9IGZ1bmN0aW9uIF9kZWZhdWx0XzFfY3JlYXRlQXV0b2NvbXBsZXRlV2l0aFJlbW90ZURhdGEoYXV0b2NvbXBsZXRlRW5kcG9pbnRVcmwsIG1pbkNoYXJhY3Rlckxlbmd0aCkge1xuICAgIGNvbnN0IGNvbmZpZyA9IF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX2RlZmF1bHRfMV9pbnN0YW5jZXMsIFwibVwiLCBfZGVmYXVsdF8xX21lcmdlT2JqZWN0cykuY2FsbCh0aGlzLCBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9kZWZhdWx0XzFfaW5zdGFuY2VzLCBcIm1cIiwgX2RlZmF1bHRfMV9nZXRDb21tb25Db25maWcpLmNhbGwodGhpcyksIHtcbiAgICAgICAgZmlyc3RVcmw6IChxdWVyeSkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgc2VwYXJhdG9yID0gYXV0b2NvbXBsZXRlRW5kcG9pbnRVcmwuaW5jbHVkZXMoJz8nKSA/ICcmJyA6ICc/JztcbiAgICAgICAgICAgIHJldHVybiBgJHthdXRvY29tcGxldGVFbmRwb2ludFVybH0ke3NlcGFyYXRvcn1xdWVyeT0ke2VuY29kZVVSSUNvbXBvbmVudChxdWVyeSl9YDtcbiAgICAgICAgfSxcbiAgICAgICAgbG9hZDogZnVuY3Rpb24gKHF1ZXJ5LCBjYWxsYmFjaykge1xuICAgICAgICAgICAgY29uc3QgdXJsID0gdGhpcy5nZXRVcmwocXVlcnkpO1xuICAgICAgICAgICAgZmV0Y2godXJsKVxuICAgICAgICAgICAgICAgIC50aGVuKChyZXNwb25zZSkgPT4gcmVzcG9uc2UuanNvbigpKVxuICAgICAgICAgICAgICAgIC50aGVuKChqc29uKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXROZXh0VXJsKHF1ZXJ5LCBqc29uLm5leHRfcGFnZSk7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soanNvbi5yZXN1bHRzLm9wdGlvbnMgfHwganNvbi5yZXN1bHRzLCBqc29uLnJlc3VsdHMub3B0Z3JvdXBzIHx8IFtdKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLmNhdGNoKCgpID0+IGNhbGxiYWNrKFtdLCBbXSkpO1xuICAgICAgICB9LFxuICAgICAgICBzaG91bGRMb2FkOiAocXVlcnkpID0+IHtcbiAgICAgICAgICAgIGlmIChudWxsICE9PSBtaW5DaGFyYWN0ZXJMZW5ndGgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcXVlcnkubGVuZ3RoID49IG1pbkNoYXJhY3Rlckxlbmd0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLmhhc0xvYWRlZENob2ljZXNQcmV2aW91c2x5KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocXVlcnkubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIHRoaXMuaGFzTG9hZGVkQ2hvaWNlc1ByZXZpb3VzbHkgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHF1ZXJ5Lmxlbmd0aCA+PSAzO1xuICAgICAgICB9LFxuICAgICAgICBvcHRncm91cEZpZWxkOiAnZ3JvdXBfYnknLFxuICAgICAgICBzY29yZTogKHNlYXJjaCkgPT4gKGl0ZW0pID0+IDEsXG4gICAgICAgIHJlbmRlcjoge1xuICAgICAgICAgICAgb3B0aW9uOiAoaXRlbSkgPT4gYDxkaXY+JHtpdGVtLnRleHR9PC9kaXY+YCxcbiAgICAgICAgICAgIGl0ZW06IChpdGVtKSA9PiBgPGRpdj4ke2l0ZW0udGV4dH08L2Rpdj5gLFxuICAgICAgICAgICAgbG9hZGluZ19tb3JlOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGA8ZGl2IGNsYXNzPVwibG9hZGluZy1tb3JlLXJlc3VsdHNcIj4ke3RoaXMubG9hZGluZ01vcmVUZXh0VmFsdWV9PC9kaXY+YDtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBub19tb3JlX3Jlc3VsdHM6ICgpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYDxkaXYgY2xhc3M9XCJuby1tb3JlLXJlc3VsdHNcIj4ke3RoaXMubm9Nb3JlUmVzdWx0c1RleHRWYWx1ZX08L2Rpdj5gO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG5vX3Jlc3VsdHM6ICgpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYDxkaXYgY2xhc3M9XCJuby1yZXN1bHRzXCI+JHt0aGlzLm5vUmVzdWx0c0ZvdW5kVGV4dFZhbHVlfTwvZGl2PmA7XG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBwcmVsb2FkOiB0aGlzLnByZWxvYWQsXG4gICAgfSk7XG4gICAgcmV0dXJuIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX2RlZmF1bHRfMV9pbnN0YW5jZXMsIFwibVwiLCBfZGVmYXVsdF8xX2NyZWF0ZVRvbVNlbGVjdCkuY2FsbCh0aGlzLCBjb25maWcpO1xufSwgX2RlZmF1bHRfMV9zdHJpcFRhZ3MgPSBmdW5jdGlvbiBfZGVmYXVsdF8xX3N0cmlwVGFncyhzdHJpbmcpIHtcbiAgICByZXR1cm4gc3RyaW5nLnJlcGxhY2UoLyg8KFtePl0rKT4pL2dpLCAnJyk7XG59LCBfZGVmYXVsdF8xX21lcmdlT2JqZWN0cyA9IGZ1bmN0aW9uIF9kZWZhdWx0XzFfbWVyZ2VPYmplY3RzKG9iamVjdDEsIG9iamVjdDIpIHtcbiAgICByZXR1cm4geyAuLi5vYmplY3QxLCAuLi5vYmplY3QyIH07XG59LCBfZGVmYXVsdF8xX2NyZWF0ZVRvbVNlbGVjdCA9IGZ1bmN0aW9uIF9kZWZhdWx0XzFfY3JlYXRlVG9tU2VsZWN0KG9wdGlvbnMpIHtcbiAgICBjb25zdCBwcmVDb25uZWN0UGF5bG9hZCA9IHsgb3B0aW9ucyB9O1xuICAgIHRoaXMuZGlzcGF0Y2hFdmVudCgncHJlLWNvbm5lY3QnLCBwcmVDb25uZWN0UGF5bG9hZCk7XG4gICAgY29uc3QgdG9tU2VsZWN0ID0gbmV3IFRvbVNlbGVjdCh0aGlzLmZvcm1FbGVtZW50LCBvcHRpb25zKTtcbiAgICBjb25zdCBjb25uZWN0UGF5bG9hZCA9IHsgdG9tU2VsZWN0LCBvcHRpb25zIH07XG4gICAgdGhpcy5kaXNwYXRjaEV2ZW50KCdjb25uZWN0JywgY29ubmVjdFBheWxvYWQpO1xuICAgIHJldHVybiB0b21TZWxlY3Q7XG59O1xuZGVmYXVsdF8xLnZhbHVlcyA9IHtcbiAgICB1cmw6IFN0cmluZyxcbiAgICBvcHRpb25zQXNIdG1sOiBCb29sZWFuLFxuICAgIGxvYWRpbmdNb3JlVGV4dDogU3RyaW5nLFxuICAgIG5vUmVzdWx0c0ZvdW5kVGV4dDogU3RyaW5nLFxuICAgIG5vTW9yZVJlc3VsdHNUZXh0OiBTdHJpbmcsXG4gICAgbWluQ2hhcmFjdGVyczogTnVtYmVyLFxuICAgIHRvbVNlbGVjdE9wdGlvbnM6IE9iamVjdCxcbiAgICBwcmVsb2FkOiBTdHJpbmcsXG59O1xuXG5leHBvcnQgeyBkZWZhdWx0XzEgYXMgZGVmYXVsdCB9O1xuIiwiaW1wb3J0IHsgQ29udHJvbGxlciB9IGZyb20gJ0Bob3R3aXJlZC9zdGltdWx1cyc7XG5cbmZ1bmN0aW9uIHBhcnNlRGlyZWN0aXZlcyhjb250ZW50KSB7XG4gICAgY29uc3QgZGlyZWN0aXZlcyA9IFtdO1xuICAgIGlmICghY29udGVudCkge1xuICAgICAgICByZXR1cm4gZGlyZWN0aXZlcztcbiAgICB9XG4gICAgbGV0IGN1cnJlbnRBY3Rpb25OYW1lID0gJyc7XG4gICAgbGV0IGN1cnJlbnRBcmd1bWVudFZhbHVlID0gJyc7XG4gICAgbGV0IGN1cnJlbnRBcmd1bWVudHMgPSBbXTtcbiAgICBsZXQgY3VycmVudE1vZGlmaWVycyA9IFtdO1xuICAgIGxldCBzdGF0ZSA9ICdhY3Rpb24nO1xuICAgIGNvbnN0IGdldExhc3RBY3Rpb25OYW1lID0gKCkgPT4ge1xuICAgICAgICBpZiAoY3VycmVudEFjdGlvbk5hbWUpIHtcbiAgICAgICAgICAgIHJldHVybiBjdXJyZW50QWN0aW9uTmFtZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZGlyZWN0aXZlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQ291bGQgbm90IGZpbmQgYW55IGRpcmVjdGl2ZXMnKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZGlyZWN0aXZlc1tkaXJlY3RpdmVzLmxlbmd0aCAtIDFdLmFjdGlvbjtcbiAgICB9O1xuICAgIGNvbnN0IHB1c2hJbnN0cnVjdGlvbiA9ICgpID0+IHtcbiAgICAgICAgZGlyZWN0aXZlcy5wdXNoKHtcbiAgICAgICAgICAgIGFjdGlvbjogY3VycmVudEFjdGlvbk5hbWUsXG4gICAgICAgICAgICBhcmdzOiBjdXJyZW50QXJndW1lbnRzLFxuICAgICAgICAgICAgbW9kaWZpZXJzOiBjdXJyZW50TW9kaWZpZXJzLFxuICAgICAgICAgICAgZ2V0U3RyaW5nOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRlbnQ7XG4gICAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgICAgY3VycmVudEFjdGlvbk5hbWUgPSAnJztcbiAgICAgICAgY3VycmVudEFyZ3VtZW50VmFsdWUgPSAnJztcbiAgICAgICAgY3VycmVudEFyZ3VtZW50cyA9IFtdO1xuICAgICAgICBjdXJyZW50TW9kaWZpZXJzID0gW107XG4gICAgICAgIHN0YXRlID0gJ2FjdGlvbic7XG4gICAgfTtcbiAgICBjb25zdCBwdXNoQXJndW1lbnQgPSAoKSA9PiB7XG4gICAgICAgIGN1cnJlbnRBcmd1bWVudHMucHVzaChjdXJyZW50QXJndW1lbnRWYWx1ZS50cmltKCkpO1xuICAgICAgICBjdXJyZW50QXJndW1lbnRWYWx1ZSA9ICcnO1xuICAgIH07XG4gICAgY29uc3QgcHVzaE1vZGlmaWVyID0gKCkgPT4ge1xuICAgICAgICBpZiAoY3VycmVudEFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZSBtb2RpZmllciBcIiR7Y3VycmVudEFjdGlvbk5hbWV9KClcIiBkb2VzIG5vdCBzdXBwb3J0IG11bHRpcGxlIGFyZ3VtZW50cy5gKTtcbiAgICAgICAgfVxuICAgICAgICBjdXJyZW50TW9kaWZpZXJzLnB1c2goe1xuICAgICAgICAgICAgbmFtZTogY3VycmVudEFjdGlvbk5hbWUsXG4gICAgICAgICAgICB2YWx1ZTogY3VycmVudEFyZ3VtZW50cy5sZW5ndGggPiAwID8gY3VycmVudEFyZ3VtZW50c1swXSA6IG51bGwsXG4gICAgICAgIH0pO1xuICAgICAgICBjdXJyZW50QWN0aW9uTmFtZSA9ICcnO1xuICAgICAgICBjdXJyZW50QXJndW1lbnRzID0gW107XG4gICAgICAgIHN0YXRlID0gJ2FjdGlvbic7XG4gICAgfTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvbnRlbnQubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgY2hhciA9IGNvbnRlbnRbaV07XG4gICAgICAgIHN3aXRjaCAoc3RhdGUpIHtcbiAgICAgICAgICAgIGNhc2UgJ2FjdGlvbic6XG4gICAgICAgICAgICAgICAgaWYgKGNoYXIgPT09ICcoJykge1xuICAgICAgICAgICAgICAgICAgICBzdGF0ZSA9ICdhcmd1bWVudHMnO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGNoYXIgPT09ICcgJykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoY3VycmVudEFjdGlvbk5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHB1c2hJbnN0cnVjdGlvbigpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoY2hhciA9PT0gJ3wnKSB7XG4gICAgICAgICAgICAgICAgICAgIHB1c2hNb2RpZmllcigpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY3VycmVudEFjdGlvbk5hbWUgKz0gY2hhcjtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2FyZ3VtZW50cyc6XG4gICAgICAgICAgICAgICAgaWYgKGNoYXIgPT09ICcpJykge1xuICAgICAgICAgICAgICAgICAgICBwdXNoQXJndW1lbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgc3RhdGUgPSAnYWZ0ZXJfYXJndW1lbnRzJztcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChjaGFyID09PSAnLCcpIHtcbiAgICAgICAgICAgICAgICAgICAgcHVzaEFyZ3VtZW50KCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjdXJyZW50QXJndW1lbnRWYWx1ZSArPSBjaGFyO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnYWZ0ZXJfYXJndW1lbnRzJzpcbiAgICAgICAgICAgICAgICBpZiAoY2hhciA9PT0gJ3wnKSB7XG4gICAgICAgICAgICAgICAgICAgIHB1c2hNb2RpZmllcigpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGNoYXIgIT09ICcgJykge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE1pc3Npbmcgc3BhY2UgYWZ0ZXIgJHtnZXRMYXN0QWN0aW9uTmFtZSgpfSgpYCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHB1c2hJbnN0cnVjdGlvbigpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxuICAgIHN3aXRjaCAoc3RhdGUpIHtcbiAgICAgICAgY2FzZSAnYWN0aW9uJzpcbiAgICAgICAgY2FzZSAnYWZ0ZXJfYXJndW1lbnRzJzpcbiAgICAgICAgICAgIGlmIChjdXJyZW50QWN0aW9uTmFtZSkge1xuICAgICAgICAgICAgICAgIHB1c2hJbnN0cnVjdGlvbigpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYERpZCB5b3UgZm9yZ2V0IHRvIGFkZCBhIGNsb3NpbmcgXCIpXCIgYWZ0ZXIgXCIke2N1cnJlbnRBY3Rpb25OYW1lfVwiP2ApO1xuICAgIH1cbiAgICByZXR1cm4gZGlyZWN0aXZlcztcbn1cblxuZnVuY3Rpb24gY29tYmluZVNwYWNlZEFycmF5KHBhcnRzKSB7XG4gICAgY29uc3QgZmluYWxQYXJ0cyA9IFtdO1xuICAgIHBhcnRzLmZvckVhY2goKHBhcnQpID0+IHtcbiAgICAgICAgZmluYWxQYXJ0cy5wdXNoKC4uLnRyaW1BbGwocGFydCkuc3BsaXQoJyAnKSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIGZpbmFsUGFydHM7XG59XG5mdW5jdGlvbiB0cmltQWxsKHN0cikge1xuICAgIHJldHVybiBzdHIucmVwbGFjZSgvW1xcc10rL2csICcgJykudHJpbSgpO1xufVxuZnVuY3Rpb24gbm9ybWFsaXplTW9kZWxOYW1lKG1vZGVsKSB7XG4gICAgcmV0dXJuIChtb2RlbFxuICAgICAgICAucmVwbGFjZSgvXFxbXSQvLCAnJylcbiAgICAgICAgLnNwbGl0KCdbJylcbiAgICAgICAgLm1hcCgocykgPT4gcy5yZXBsYWNlKCddJywgJycpKVxuICAgICAgICAuam9pbignLicpKTtcbn1cblxuZnVuY3Rpb24gZ2V0RWxlbWVudEFzVGFnVGV4dChlbGVtZW50KSB7XG4gICAgcmV0dXJuIGVsZW1lbnQuaW5uZXJIVE1MXG4gICAgICAgID8gZWxlbWVudC5vdXRlckhUTUwuc2xpY2UoMCwgZWxlbWVudC5vdXRlckhUTUwuaW5kZXhPZihlbGVtZW50LmlubmVySFRNTCkpXG4gICAgICAgIDogZWxlbWVudC5vdXRlckhUTUw7XG59XG5cbmxldCBjb21wb25lbnRNYXBCeUVsZW1lbnQgPSBuZXcgV2Vha01hcCgpO1xubGV0IGNvbXBvbmVudE1hcEJ5Q29tcG9uZW50ID0gbmV3IE1hcCgpO1xuY29uc3QgcmVnaXN0ZXJDb21wb25lbnQgPSAoY29tcG9uZW50KSA9PiB7XG4gICAgY29tcG9uZW50TWFwQnlFbGVtZW50LnNldChjb21wb25lbnQuZWxlbWVudCwgY29tcG9uZW50KTtcbiAgICBjb21wb25lbnRNYXBCeUNvbXBvbmVudC5zZXQoY29tcG9uZW50LCBjb21wb25lbnQubmFtZSk7XG59O1xuY29uc3QgdW5yZWdpc3RlckNvbXBvbmVudCA9IChjb21wb25lbnQpID0+IHtcbiAgICBjb21wb25lbnRNYXBCeUVsZW1lbnQuZGVsZXRlKGNvbXBvbmVudC5lbGVtZW50KTtcbiAgICBjb21wb25lbnRNYXBCeUNvbXBvbmVudC5kZWxldGUoY29tcG9uZW50KTtcbn07XG5jb25zdCBnZXRDb21wb25lbnQgPSAoZWxlbWVudCkgPT4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGxldCBjb3VudCA9IDA7XG4gICAgY29uc3QgbWF4Q291bnQgPSAxMDtcbiAgICBjb25zdCBpbnRlcnZhbCA9IHNldEludGVydmFsKCgpID0+IHtcbiAgICAgICAgY29uc3QgY29tcG9uZW50ID0gY29tcG9uZW50TWFwQnlFbGVtZW50LmdldChlbGVtZW50KTtcbiAgICAgICAgaWYgKGNvbXBvbmVudCkge1xuICAgICAgICAgICAgY2xlYXJJbnRlcnZhbChpbnRlcnZhbCk7XG4gICAgICAgICAgICByZXNvbHZlKGNvbXBvbmVudCk7XG4gICAgICAgIH1cbiAgICAgICAgY291bnQrKztcbiAgICAgICAgaWYgKGNvdW50ID4gbWF4Q291bnQpIHtcbiAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwoaW50ZXJ2YWwpO1xuICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihgQ29tcG9uZW50IG5vdCBmb3VuZCBmb3IgZWxlbWVudCAke2dldEVsZW1lbnRBc1RhZ1RleHQoZWxlbWVudCl9YCkpO1xuICAgICAgICB9XG4gICAgfSwgNSk7XG59KTtcbmNvbnN0IGZpbmRDb21wb25lbnRzID0gKGN1cnJlbnRDb21wb25lbnQsIG9ubHlQYXJlbnRzLCBvbmx5TWF0Y2hOYW1lKSA9PiB7XG4gICAgY29uc3QgY29tcG9uZW50cyA9IFtdO1xuICAgIGNvbXBvbmVudE1hcEJ5Q29tcG9uZW50LmZvckVhY2goKGNvbXBvbmVudE5hbWUsIGNvbXBvbmVudCkgPT4ge1xuICAgICAgICBpZiAob25seVBhcmVudHMgJiYgKGN1cnJlbnRDb21wb25lbnQgPT09IGNvbXBvbmVudCB8fCAhY29tcG9uZW50LmVsZW1lbnQuY29udGFpbnMoY3VycmVudENvbXBvbmVudC5lbGVtZW50KSkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAob25seU1hdGNoTmFtZSAmJiBjb21wb25lbnROYW1lICE9PSBvbmx5TWF0Y2hOYW1lKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29tcG9uZW50cy5wdXNoKGNvbXBvbmVudCk7XG4gICAgfSk7XG4gICAgcmV0dXJuIGNvbXBvbmVudHM7XG59O1xuY29uc3QgZmluZENoaWxkcmVuID0gKGN1cnJlbnRDb21wb25lbnQpID0+IHtcbiAgICBjb25zdCBjaGlsZHJlbiA9IFtdO1xuICAgIGNvbXBvbmVudE1hcEJ5Q29tcG9uZW50LmZvckVhY2goKGNvbXBvbmVudE5hbWUsIGNvbXBvbmVudCkgPT4ge1xuICAgICAgICBpZiAoY3VycmVudENvbXBvbmVudCA9PT0gY29tcG9uZW50KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFjdXJyZW50Q29tcG9uZW50LmVsZW1lbnQuY29udGFpbnMoY29tcG9uZW50LmVsZW1lbnQpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGZvdW5kQ2hpbGRDb21wb25lbnQgPSBmYWxzZTtcbiAgICAgICAgY29tcG9uZW50TWFwQnlDb21wb25lbnQuZm9yRWFjaCgoY2hpbGRDb21wb25lbnROYW1lLCBjaGlsZENvbXBvbmVudCkgPT4ge1xuICAgICAgICAgICAgaWYgKGZvdW5kQ2hpbGRDb21wb25lbnQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoY2hpbGRDb21wb25lbnQgPT09IGNvbXBvbmVudCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChjaGlsZENvbXBvbmVudC5lbGVtZW50LmNvbnRhaW5zKGNvbXBvbmVudC5lbGVtZW50KSkge1xuICAgICAgICAgICAgICAgIGZvdW5kQ2hpbGRDb21wb25lbnQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgY2hpbGRyZW4ucHVzaChjb21wb25lbnQpO1xuICAgIH0pO1xuICAgIHJldHVybiBjaGlsZHJlbjtcbn07XG5jb25zdCBmaW5kUGFyZW50ID0gKGN1cnJlbnRDb21wb25lbnQpID0+IHtcbiAgICBsZXQgcGFyZW50RWxlbWVudCA9IGN1cnJlbnRDb21wb25lbnQuZWxlbWVudC5wYXJlbnRFbGVtZW50O1xuICAgIHdoaWxlIChwYXJlbnRFbGVtZW50KSB7XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudCA9IGNvbXBvbmVudE1hcEJ5RWxlbWVudC5nZXQocGFyZW50RWxlbWVudCk7XG4gICAgICAgIGlmIChjb21wb25lbnQpIHtcbiAgICAgICAgICAgIHJldHVybiBjb21wb25lbnQ7XG4gICAgICAgIH1cbiAgICAgICAgcGFyZW50RWxlbWVudCA9IHBhcmVudEVsZW1lbnQucGFyZW50RWxlbWVudDtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG59O1xuXG5mdW5jdGlvbiBnZXRWYWx1ZUZyb21FbGVtZW50KGVsZW1lbnQsIHZhbHVlU3RvcmUpIHtcbiAgICBpZiAoZWxlbWVudCBpbnN0YW5jZW9mIEhUTUxJbnB1dEVsZW1lbnQpIHtcbiAgICAgICAgaWYgKGVsZW1lbnQudHlwZSA9PT0gJ2NoZWNrYm94Jykge1xuICAgICAgICAgICAgY29uc3QgbW9kZWxOYW1lRGF0YSA9IGdldE1vZGVsRGlyZWN0aXZlRnJvbUVsZW1lbnQoZWxlbWVudCwgZmFsc2UpO1xuICAgICAgICAgICAgaWYgKG1vZGVsTmFtZURhdGEgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBtb2RlbFZhbHVlID0gdmFsdWVTdG9yZS5nZXQobW9kZWxOYW1lRGF0YS5hY3Rpb24pO1xuICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KG1vZGVsVmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBnZXRNdWx0aXBsZUNoZWNrYm94VmFsdWUoZWxlbWVudCwgbW9kZWxWYWx1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChPYmplY3QobW9kZWxWYWx1ZSkgPT09IG1vZGVsVmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdldE11bHRpcGxlQ2hlY2tib3hWYWx1ZShlbGVtZW50LCBPYmplY3QudmFsdWVzKG1vZGVsVmFsdWUpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZWxlbWVudC5oYXNBdHRyaWJ1dGUoJ3ZhbHVlJykpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZWxlbWVudC5jaGVja2VkID8gZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ3ZhbHVlJykgOiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQuY2hlY2tlZDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaW5wdXRWYWx1ZShlbGVtZW50KTtcbiAgICB9XG4gICAgaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MU2VsZWN0RWxlbWVudCkge1xuICAgICAgICBpZiAoZWxlbWVudC5tdWx0aXBsZSkge1xuICAgICAgICAgICAgcmV0dXJuIEFycmF5LmZyb20oZWxlbWVudC5zZWxlY3RlZE9wdGlvbnMpLm1hcCgoZWwpID0+IGVsLnZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZWxlbWVudC52YWx1ZTtcbiAgICB9XG4gICAgaWYgKGVsZW1lbnQuZGF0YXNldC52YWx1ZSkge1xuICAgICAgICByZXR1cm4gZWxlbWVudC5kYXRhc2V0LnZhbHVlO1xuICAgIH1cbiAgICBpZiAoJ3ZhbHVlJyBpbiBlbGVtZW50KSB7XG4gICAgICAgIHJldHVybiBlbGVtZW50LnZhbHVlO1xuICAgIH1cbiAgICBpZiAoZWxlbWVudC5oYXNBdHRyaWJ1dGUoJ3ZhbHVlJykpIHtcbiAgICAgICAgcmV0dXJuIGVsZW1lbnQuZ2V0QXR0cmlidXRlKCd2YWx1ZScpO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbn1cbmZ1bmN0aW9uIHNldFZhbHVlT25FbGVtZW50KGVsZW1lbnQsIHZhbHVlKSB7XG4gICAgaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MSW5wdXRFbGVtZW50KSB7XG4gICAgICAgIGlmIChlbGVtZW50LnR5cGUgPT09ICdmaWxlJykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChlbGVtZW50LnR5cGUgPT09ICdyYWRpbycpIHtcbiAgICAgICAgICAgIGVsZW1lbnQuY2hlY2tlZCA9IGVsZW1lbnQudmFsdWUgPT09IHZhbHVlO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChlbGVtZW50LnR5cGUgPT09ICdjaGVja2JveCcpIHtcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgICAgICAgIGxldCB2YWx1ZUZvdW5kID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdmFsdWUuZm9yRWFjaCgodmFsKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh2YWwgPT09IGVsZW1lbnQudmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlRm91bmQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgZWxlbWVudC5jaGVja2VkID0gdmFsdWVGb3VuZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmIChlbGVtZW50Lmhhc0F0dHJpYnV0ZSgndmFsdWUnKSkge1xuICAgICAgICAgICAgICAgICAgICBlbGVtZW50LmNoZWNrZWQgPSBlbGVtZW50LnZhbHVlID09PSB2YWx1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuY2hlY2tlZCA9IHZhbHVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAoZWxlbWVudCBpbnN0YW5jZW9mIEhUTUxTZWxlY3RFbGVtZW50KSB7XG4gICAgICAgIGNvbnN0IGFycmF5V3JhcHBlZFZhbHVlID0gW10uY29uY2F0KHZhbHVlKS5tYXAoKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gYCR7dmFsdWV9YDtcbiAgICAgICAgfSk7XG4gICAgICAgIEFycmF5LmZyb20oZWxlbWVudC5vcHRpb25zKS5mb3JFYWNoKChvcHRpb24pID0+IHtcbiAgICAgICAgICAgIG9wdGlvbi5zZWxlY3RlZCA9IGFycmF5V3JhcHBlZFZhbHVlLmluY2x1ZGVzKG9wdGlvbi52YWx1ZSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhbHVlID0gdmFsdWUgPT09IHVuZGVmaW5lZCA/ICcnIDogdmFsdWU7XG4gICAgZWxlbWVudC52YWx1ZSA9IHZhbHVlO1xufVxuZnVuY3Rpb24gZ2V0QWxsTW9kZWxEaXJlY3RpdmVGcm9tRWxlbWVudHMoZWxlbWVudCkge1xuICAgIGlmICghZWxlbWVudC5kYXRhc2V0Lm1vZGVsKSB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgY29uc3QgZGlyZWN0aXZlcyA9IHBhcnNlRGlyZWN0aXZlcyhlbGVtZW50LmRhdGFzZXQubW9kZWwpO1xuICAgIGRpcmVjdGl2ZXMuZm9yRWFjaCgoZGlyZWN0aXZlKSA9PiB7XG4gICAgICAgIGlmIChkaXJlY3RpdmUuYXJncy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZSBkYXRhLW1vZGVsPVwiJHtlbGVtZW50LmRhdGFzZXQubW9kZWx9XCIgZm9ybWF0IGlzIGludmFsaWQ6IGl0IGRvZXMgbm90IHN1cHBvcnQgcGFzc2luZyBhcmd1bWVudHMgdG8gdGhlIG1vZGVsLmApO1xuICAgICAgICB9XG4gICAgICAgIGRpcmVjdGl2ZS5hY3Rpb24gPSBub3JtYWxpemVNb2RlbE5hbWUoZGlyZWN0aXZlLmFjdGlvbik7XG4gICAgfSk7XG4gICAgcmV0dXJuIGRpcmVjdGl2ZXM7XG59XG5mdW5jdGlvbiBnZXRNb2RlbERpcmVjdGl2ZUZyb21FbGVtZW50KGVsZW1lbnQsIHRocm93T25NaXNzaW5nID0gdHJ1ZSkge1xuICAgIGNvbnN0IGRhdGFNb2RlbERpcmVjdGl2ZXMgPSBnZXRBbGxNb2RlbERpcmVjdGl2ZUZyb21FbGVtZW50cyhlbGVtZW50KTtcbiAgICBpZiAoZGF0YU1vZGVsRGlyZWN0aXZlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHJldHVybiBkYXRhTW9kZWxEaXJlY3RpdmVzWzBdO1xuICAgIH1cbiAgICBpZiAoZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ25hbWUnKSkge1xuICAgICAgICBjb25zdCBmb3JtRWxlbWVudCA9IGVsZW1lbnQuY2xvc2VzdCgnZm9ybScpO1xuICAgICAgICBpZiAoZm9ybUVsZW1lbnQgJiYgJ21vZGVsJyBpbiBmb3JtRWxlbWVudC5kYXRhc2V0KSB7XG4gICAgICAgICAgICBjb25zdCBkaXJlY3RpdmVzID0gcGFyc2VEaXJlY3RpdmVzKGZvcm1FbGVtZW50LmRhdGFzZXQubW9kZWwgfHwgJyonKTtcbiAgICAgICAgICAgIGNvbnN0IGRpcmVjdGl2ZSA9IGRpcmVjdGl2ZXNbMF07XG4gICAgICAgICAgICBpZiAoZGlyZWN0aXZlLmFyZ3MubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVGhlIGRhdGEtbW9kZWw9XCIke2Zvcm1FbGVtZW50LmRhdGFzZXQubW9kZWx9XCIgZm9ybWF0IGlzIGludmFsaWQ6IGl0IGRvZXMgbm90IHN1cHBvcnQgcGFzc2luZyBhcmd1bWVudHMgdG8gdGhlIG1vZGVsLmApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGlyZWN0aXZlLmFjdGlvbiA9IG5vcm1hbGl6ZU1vZGVsTmFtZShlbGVtZW50LmdldEF0dHJpYnV0ZSgnbmFtZScpKTtcbiAgICAgICAgICAgIHJldHVybiBkaXJlY3RpdmU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKCF0aHJvd09uTWlzc2luZykge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgZGV0ZXJtaW5lIHRoZSBtb2RlbCBuYW1lIGZvciBcIiR7Z2V0RWxlbWVudEFzVGFnVGV4dChlbGVtZW50KX1cIjogdGhlIGVsZW1lbnQgbXVzdCBlaXRoZXIgaGF2ZSBhIFwiZGF0YS1tb2RlbFwiIChvciBcIm5hbWVcIiBhdHRyaWJ1dGUgbGl2aW5nIGluc2lkZSBhIDxmb3JtIGRhdGEtbW9kZWw9XCIqXCI+KS5gKTtcbn1cbmZ1bmN0aW9uIGVsZW1lbnRCZWxvbmdzVG9UaGlzQ29tcG9uZW50KGVsZW1lbnQsIGNvbXBvbmVudCkge1xuICAgIGlmIChjb21wb25lbnQuZWxlbWVudCA9PT0gZWxlbWVudCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKCFjb21wb25lbnQuZWxlbWVudC5jb250YWlucyhlbGVtZW50KSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGxldCBmb3VuZENoaWxkQ29tcG9uZW50ID0gZmFsc2U7XG4gICAgZmluZENoaWxkcmVuKGNvbXBvbmVudCkuZm9yRWFjaCgoY2hpbGRDb21wb25lbnQpID0+IHtcbiAgICAgICAgaWYgKGZvdW5kQ2hpbGRDb21wb25lbnQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2hpbGRDb21wb25lbnQuZWxlbWVudCA9PT0gZWxlbWVudCB8fCBjaGlsZENvbXBvbmVudC5lbGVtZW50LmNvbnRhaW5zKGVsZW1lbnQpKSB7XG4gICAgICAgICAgICBmb3VuZENoaWxkQ29tcG9uZW50ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiAhZm91bmRDaGlsZENvbXBvbmVudDtcbn1cbmZ1bmN0aW9uIGNsb25lSFRNTEVsZW1lbnQoZWxlbWVudCkge1xuICAgIGNvbnN0IG5ld0VsZW1lbnQgPSBlbGVtZW50LmNsb25lTm9kZSh0cnVlKTtcbiAgICBpZiAoIShuZXdFbGVtZW50IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignQ291bGQgbm90IGNsb25lIGVsZW1lbnQnKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ld0VsZW1lbnQ7XG59XG5mdW5jdGlvbiBodG1sVG9FbGVtZW50KGh0bWwpIHtcbiAgICBjb25zdCB0ZW1wbGF0ZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RlbXBsYXRlJyk7XG4gICAgaHRtbCA9IGh0bWwudHJpbSgpO1xuICAgIHRlbXBsYXRlLmlubmVySFRNTCA9IGh0bWw7XG4gICAgaWYgKHRlbXBsYXRlLmNvbnRlbnQuY2hpbGRFbGVtZW50Q291bnQgPiAxKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgQ29tcG9uZW50IEhUTUwgY29udGFpbnMgJHt0ZW1wbGF0ZS5jb250ZW50LmNoaWxkRWxlbWVudENvdW50fSBlbGVtZW50cywgYnV0IG9ubHkgMSByb290IGVsZW1lbnQgaXMgYWxsb3dlZC5gKTtcbiAgICB9XG4gICAgY29uc3QgY2hpbGQgPSB0ZW1wbGF0ZS5jb250ZW50LmZpcnN0RWxlbWVudENoaWxkO1xuICAgIGlmICghY2hpbGQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDaGlsZCBub3QgZm91bmQnKTtcbiAgICB9XG4gICAgaWYgKCEoY2hpbGQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDcmVhdGVkIGVsZW1lbnQgaXMgbm90IGFuIEhUTUxFbGVtZW50OiAke2h0bWwudHJpbSgpfWApO1xuICAgIH1cbiAgICByZXR1cm4gY2hpbGQ7XG59XG5jb25zdCBnZXRNdWx0aXBsZUNoZWNrYm94VmFsdWUgPSAoZWxlbWVudCwgY3VycmVudFZhbHVlcykgPT4ge1xuICAgIGNvbnN0IGZpbmFsVmFsdWVzID0gWy4uLmN1cnJlbnRWYWx1ZXNdO1xuICAgIGNvbnN0IHZhbHVlID0gaW5wdXRWYWx1ZShlbGVtZW50KTtcbiAgICBjb25zdCBpbmRleCA9IGN1cnJlbnRWYWx1ZXMuaW5kZXhPZih2YWx1ZSk7XG4gICAgaWYgKGVsZW1lbnQuY2hlY2tlZCkge1xuICAgICAgICBpZiAoaW5kZXggPT09IC0xKSB7XG4gICAgICAgICAgICBmaW5hbFZhbHVlcy5wdXNoKHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmluYWxWYWx1ZXM7XG4gICAgfVxuICAgIGlmIChpbmRleCA+IC0xKSB7XG4gICAgICAgIGZpbmFsVmFsdWVzLnNwbGljZShpbmRleCwgMSk7XG4gICAgfVxuICAgIHJldHVybiBmaW5hbFZhbHVlcztcbn07XG5jb25zdCBpbnB1dFZhbHVlID0gKGVsZW1lbnQpID0+IGVsZW1lbnQuZGF0YXNldC52YWx1ZSA/IGVsZW1lbnQuZGF0YXNldC52YWx1ZSA6IGVsZW1lbnQudmFsdWU7XG5cbmZ1bmN0aW9uIGdldERlZXBEYXRhKGRhdGEsIHByb3BlcnR5UGF0aCkge1xuICAgIGNvbnN0IHsgY3VycmVudExldmVsRGF0YSwgZmluYWxLZXkgfSA9IHBhcnNlRGVlcERhdGEoZGF0YSwgcHJvcGVydHlQYXRoKTtcbiAgICBpZiAoY3VycmVudExldmVsRGF0YSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHJldHVybiBjdXJyZW50TGV2ZWxEYXRhW2ZpbmFsS2V5XTtcbn1cbmNvbnN0IHBhcnNlRGVlcERhdGEgPSAoZGF0YSwgcHJvcGVydHlQYXRoKSA9PiB7XG4gICAgY29uc3QgZmluYWxEYXRhID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShkYXRhKSk7XG4gICAgbGV0IGN1cnJlbnRMZXZlbERhdGEgPSBmaW5hbERhdGE7XG4gICAgY29uc3QgcGFydHMgPSBwcm9wZXJ0eVBhdGguc3BsaXQoJy4nKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBhcnRzLmxlbmd0aCAtIDE7IGkrKykge1xuICAgICAgICBjdXJyZW50TGV2ZWxEYXRhID0gY3VycmVudExldmVsRGF0YVtwYXJ0c1tpXV07XG4gICAgfVxuICAgIGNvbnN0IGZpbmFsS2V5ID0gcGFydHNbcGFydHMubGVuZ3RoIC0gMV07XG4gICAgcmV0dXJuIHtcbiAgICAgICAgY3VycmVudExldmVsRGF0YSxcbiAgICAgICAgZmluYWxEYXRhLFxuICAgICAgICBmaW5hbEtleSxcbiAgICAgICAgcGFydHMsXG4gICAgfTtcbn07XG5cbmNsYXNzIFZhbHVlU3RvcmUge1xuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgICAgIHRoaXMucHJvcHMgPSB7fTtcbiAgICAgICAgdGhpcy5kaXJ0eVByb3BzID0ge307XG4gICAgICAgIHRoaXMucGVuZGluZ1Byb3BzID0ge307XG4gICAgICAgIHRoaXMudXBkYXRlZFByb3BzRnJvbVBhcmVudCA9IHt9O1xuICAgICAgICB0aGlzLnByb3BzID0gcHJvcHM7XG4gICAgfVxuICAgIGdldChuYW1lKSB7XG4gICAgICAgIGNvbnN0IG5vcm1hbGl6ZWROYW1lID0gbm9ybWFsaXplTW9kZWxOYW1lKG5hbWUpO1xuICAgICAgICBpZiAodGhpcy5kaXJ0eVByb3BzW25vcm1hbGl6ZWROYW1lXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5kaXJ0eVByb3BzW25vcm1hbGl6ZWROYW1lXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5wZW5kaW5nUHJvcHNbbm9ybWFsaXplZE5hbWVdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnBlbmRpbmdQcm9wc1tub3JtYWxpemVkTmFtZV07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMucHJvcHNbbm9ybWFsaXplZE5hbWVdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnByb3BzW25vcm1hbGl6ZWROYW1lXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZ2V0RGVlcERhdGEodGhpcy5wcm9wcywgbm9ybWFsaXplZE5hbWUpO1xuICAgIH1cbiAgICBoYXMobmFtZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXQobmFtZSkgIT09IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgc2V0KG5hbWUsIHZhbHVlKSB7XG4gICAgICAgIGNvbnN0IG5vcm1hbGl6ZWROYW1lID0gbm9ybWFsaXplTW9kZWxOYW1lKG5hbWUpO1xuICAgICAgICBpZiAodGhpcy5nZXQobm9ybWFsaXplZE5hbWUpID09PSB2YWx1ZSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZGlydHlQcm9wc1tub3JtYWxpemVkTmFtZV0gPSB2YWx1ZTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGdldE9yaWdpbmFsUHJvcHMoKSB7XG4gICAgICAgIHJldHVybiB7IC4uLnRoaXMucHJvcHMgfTtcbiAgICB9XG4gICAgZ2V0RGlydHlQcm9wcygpIHtcbiAgICAgICAgcmV0dXJuIHsgLi4udGhpcy5kaXJ0eVByb3BzIH07XG4gICAgfVxuICAgIGdldFVwZGF0ZWRQcm9wc0Zyb21QYXJlbnQoKSB7XG4gICAgICAgIHJldHVybiB7IC4uLnRoaXMudXBkYXRlZFByb3BzRnJvbVBhcmVudCB9O1xuICAgIH1cbiAgICBmbHVzaERpcnR5UHJvcHNUb1BlbmRpbmcoKSB7XG4gICAgICAgIHRoaXMucGVuZGluZ1Byb3BzID0geyAuLi50aGlzLmRpcnR5UHJvcHMgfTtcbiAgICAgICAgdGhpcy5kaXJ0eVByb3BzID0ge307XG4gICAgfVxuICAgIHJlaW5pdGlhbGl6ZUFsbFByb3BzKHByb3BzKSB7XG4gICAgICAgIHRoaXMucHJvcHMgPSBwcm9wcztcbiAgICAgICAgdGhpcy51cGRhdGVkUHJvcHNGcm9tUGFyZW50ID0ge307XG4gICAgICAgIHRoaXMucGVuZGluZ1Byb3BzID0ge307XG4gICAgfVxuICAgIHB1c2hQZW5kaW5nUHJvcHNCYWNrVG9EaXJ0eSgpIHtcbiAgICAgICAgdGhpcy5kaXJ0eVByb3BzID0geyAuLi50aGlzLnBlbmRpbmdQcm9wcywgLi4udGhpcy5kaXJ0eVByb3BzIH07XG4gICAgICAgIHRoaXMucGVuZGluZ1Byb3BzID0ge307XG4gICAgfVxuICAgIHN0b3JlTmV3UHJvcHNGcm9tUGFyZW50KHByb3BzKSB7XG4gICAgICAgIGxldCBjaGFuZ2VkID0gZmFsc2U7XG4gICAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHByb3BzKSkge1xuICAgICAgICAgICAgY29uc3QgY3VycmVudFZhbHVlID0gdGhpcy5nZXQoa2V5KTtcbiAgICAgICAgICAgIGlmIChjdXJyZW50VmFsdWUgIT09IHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgY2hhbmdlZCA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNoYW5nZWQpIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlZFByb3BzRnJvbVBhcmVudCA9IHByb3BzO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjaGFuZ2VkO1xuICAgIH1cbn1cblxuLy8gYmFzZSBJSUZFIHRvIGRlZmluZSBpZGlvbW9ycGhcbnZhciBJZGlvbW9ycGggPSAoZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIC8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgICAgICAgLy8gQU5EIE5PVyBJVCBCRUdJTlMuLi5cbiAgICAgICAgLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgICAgICBsZXQgRU1QVFlfU0VUID0gbmV3IFNldCgpO1xuXG4gICAgICAgIC8vIGRlZmF1bHQgY29uZmlndXJhdGlvbiB2YWx1ZXMsIHVwZGF0YWJsZSBieSB1c2VycyBub3dcbiAgICAgICAgbGV0IGRlZmF1bHRzID0ge1xuICAgICAgICAgICAgbW9ycGhTdHlsZTogXCJvdXRlckhUTUxcIixcbiAgICAgICAgICAgIGNhbGxiYWNrcyA6IHtcbiAgICAgICAgICAgICAgICBiZWZvcmVOb2RlQWRkZWQ6IG5vT3AsXG4gICAgICAgICAgICAgICAgYWZ0ZXJOb2RlQWRkZWQ6IG5vT3AsXG4gICAgICAgICAgICAgICAgYmVmb3JlTm9kZU1vcnBoZWQ6IG5vT3AsXG4gICAgICAgICAgICAgICAgYWZ0ZXJOb2RlTW9ycGhlZDogbm9PcCxcbiAgICAgICAgICAgICAgICBiZWZvcmVOb2RlUmVtb3ZlZDogbm9PcCxcbiAgICAgICAgICAgICAgICBhZnRlck5vZGVSZW1vdmVkOiBub09wLFxuICAgICAgICAgICAgICAgIGJlZm9yZUF0dHJpYnV0ZVVwZGF0ZWQ6IG5vT3AsXG5cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBoZWFkOiB7XG4gICAgICAgICAgICAgICAgc3R5bGU6ICdtZXJnZScsXG4gICAgICAgICAgICAgICAgc2hvdWxkUHJlc2VydmU6IGZ1bmN0aW9uIChlbHQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVsdC5nZXRBdHRyaWJ1dGUoXCJpbS1wcmVzZXJ2ZVwiKSA9PT0gXCJ0cnVlXCI7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBzaG91bGRSZUFwcGVuZDogZnVuY3Rpb24gKGVsdCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZWx0LmdldEF0dHJpYnV0ZShcImltLXJlLWFwcGVuZFwiKSA9PT0gXCJ0cnVlXCI7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBzaG91bGRSZW1vdmU6IG5vT3AsXG4gICAgICAgICAgICAgICAgYWZ0ZXJIZWFkTW9ycGhlZDogbm9PcCxcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAgICAgIC8vIENvcmUgTW9ycGhpbmcgQWxnb3JpdGhtIC0gbW9ycGgsIG1vcnBoTm9ybWFsaXplZENvbnRlbnQsIG1vcnBoT2xkTm9kZVRvLCBtb3JwaENoaWxkcmVuXG4gICAgICAgIC8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgICAgICAgZnVuY3Rpb24gbW9ycGgob2xkTm9kZSwgbmV3Q29udGVudCwgY29uZmlnID0ge30pIHtcblxuICAgICAgICAgICAgaWYgKG9sZE5vZGUgaW5zdGFuY2VvZiBEb2N1bWVudCkge1xuICAgICAgICAgICAgICAgIG9sZE5vZGUgPSBvbGROb2RlLmRvY3VtZW50RWxlbWVudDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHR5cGVvZiBuZXdDb250ZW50ID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIG5ld0NvbnRlbnQgPSBwYXJzZUNvbnRlbnQobmV3Q29udGVudCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGxldCBub3JtYWxpemVkQ29udGVudCA9IG5vcm1hbGl6ZUNvbnRlbnQobmV3Q29udGVudCk7XG5cbiAgICAgICAgICAgIGxldCBjdHggPSBjcmVhdGVNb3JwaENvbnRleHQob2xkTm9kZSwgbm9ybWFsaXplZENvbnRlbnQsIGNvbmZpZyk7XG5cbiAgICAgICAgICAgIHJldHVybiBtb3JwaE5vcm1hbGl6ZWRDb250ZW50KG9sZE5vZGUsIG5vcm1hbGl6ZWRDb250ZW50LCBjdHgpO1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gbW9ycGhOb3JtYWxpemVkQ29udGVudChvbGROb2RlLCBub3JtYWxpemVkTmV3Q29udGVudCwgY3R4KSB7XG4gICAgICAgICAgICBpZiAoY3R4LmhlYWQuYmxvY2spIHtcbiAgICAgICAgICAgICAgICBsZXQgb2xkSGVhZCA9IG9sZE5vZGUucXVlcnlTZWxlY3RvcignaGVhZCcpO1xuICAgICAgICAgICAgICAgIGxldCBuZXdIZWFkID0gbm9ybWFsaXplZE5ld0NvbnRlbnQucXVlcnlTZWxlY3RvcignaGVhZCcpO1xuICAgICAgICAgICAgICAgIGlmIChvbGRIZWFkICYmIG5ld0hlYWQpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHByb21pc2VzID0gaGFuZGxlSGVhZEVsZW1lbnQobmV3SGVhZCwgb2xkSGVhZCwgY3R4KTtcbiAgICAgICAgICAgICAgICAgICAgLy8gd2hlbiBoZWFkIHByb21pc2VzIHJlc29sdmUsIGNhbGwgbW9ycGggYWdhaW4sIGlnbm9yaW5nIHRoZSBoZWFkIHRhZ1xuICAgICAgICAgICAgICAgICAgICBQcm9taXNlLmFsbChwcm9taXNlcykudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtb3JwaE5vcm1hbGl6ZWRDb250ZW50KG9sZE5vZGUsIG5vcm1hbGl6ZWROZXdDb250ZW50LCBPYmplY3QuYXNzaWduKGN0eCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2s6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZ25vcmU6IHRydWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoY3R4Lm1vcnBoU3R5bGUgPT09IFwiaW5uZXJIVE1MXCIpIHtcblxuICAgICAgICAgICAgICAgIC8vIGlubmVySFRNTCwgc28gd2UgYXJlIG9ubHkgdXBkYXRpbmcgdGhlIGNoaWxkcmVuXG4gICAgICAgICAgICAgICAgbW9ycGhDaGlsZHJlbihub3JtYWxpemVkTmV3Q29udGVudCwgb2xkTm9kZSwgY3R4KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gb2xkTm9kZS5jaGlsZHJlbjtcblxuICAgICAgICAgICAgfSBlbHNlIGlmIChjdHgubW9ycGhTdHlsZSA9PT0gXCJvdXRlckhUTUxcIiB8fCBjdHgubW9ycGhTdHlsZSA9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgLy8gb3RoZXJ3aXNlIGZpbmQgdGhlIGJlc3QgZWxlbWVudCBtYXRjaCBpbiB0aGUgbmV3IGNvbnRlbnQsIG1vcnBoIHRoYXQsIGFuZCBtZXJnZSBpdHMgc2libGluZ3NcbiAgICAgICAgICAgICAgICAvLyBpbnRvIGVpdGhlciBzaWRlIG9mIHRoZSBiZXN0IG1hdGNoXG4gICAgICAgICAgICAgICAgbGV0IGJlc3RNYXRjaCA9IGZpbmRCZXN0Tm9kZU1hdGNoKG5vcm1hbGl6ZWROZXdDb250ZW50LCBvbGROb2RlLCBjdHgpO1xuXG4gICAgICAgICAgICAgICAgLy8gc3Rhc2ggdGhlIHNpYmxpbmdzIHRoYXQgd2lsbCBuZWVkIHRvIGJlIGluc2VydGVkIG9uIGVpdGhlciBzaWRlIG9mIHRoZSBiZXN0IG1hdGNoXG4gICAgICAgICAgICAgICAgbGV0IHByZXZpb3VzU2libGluZyA9IGJlc3RNYXRjaD8ucHJldmlvdXNTaWJsaW5nO1xuICAgICAgICAgICAgICAgIGxldCBuZXh0U2libGluZyA9IGJlc3RNYXRjaD8ubmV4dFNpYmxpbmc7XG5cbiAgICAgICAgICAgICAgICAvLyBtb3JwaCBpdFxuICAgICAgICAgICAgICAgIGxldCBtb3JwaGVkTm9kZSA9IG1vcnBoT2xkTm9kZVRvKG9sZE5vZGUsIGJlc3RNYXRjaCwgY3R4KTtcblxuICAgICAgICAgICAgICAgIGlmIChiZXN0TWF0Y2gpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gaWYgdGhlcmUgd2FzIGEgYmVzdCBtYXRjaCwgbWVyZ2UgdGhlIHNpYmxpbmdzIGluIHRvbyBhbmQgcmV0dXJuIHRoZVxuICAgICAgICAgICAgICAgICAgICAvLyB3aG9sZSBidW5jaFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW5zZXJ0U2libGluZ3MocHJldmlvdXNTaWJsaW5nLCBtb3JwaGVkTm9kZSwgbmV4dFNpYmxpbmcpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIG90aGVyd2lzZSBub3RoaW5nIHdhcyBhZGRlZCB0byB0aGUgRE9NXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbXVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgXCJEbyBub3QgdW5kZXJzdGFuZCBob3cgdG8gbW9ycGggc3R5bGUgXCIgKyBjdHgubW9ycGhTdHlsZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEBwYXJhbSBwb3NzaWJsZUFjdGl2ZUVsZW1lbnRcbiAgICAgICAgICogQHBhcmFtIGN0eFxuICAgICAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICAgICAgICovXG4gICAgICAgIGZ1bmN0aW9uIGlnbm9yZVZhbHVlT2ZBY3RpdmVFbGVtZW50KHBvc3NpYmxlQWN0aXZlRWxlbWVudCwgY3R4KSB7XG4gICAgICAgICAgICByZXR1cm4gY3R4Lmlnbm9yZUFjdGl2ZVZhbHVlICYmIHBvc3NpYmxlQWN0aXZlRWxlbWVudCA9PT0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAcGFyYW0gb2xkTm9kZSByb290IG5vZGUgdG8gbWVyZ2UgY29udGVudCBpbnRvXG4gICAgICAgICAqIEBwYXJhbSBuZXdDb250ZW50IG5ldyBjb250ZW50IHRvIG1lcmdlXG4gICAgICAgICAqIEBwYXJhbSBjdHggdGhlIG1lcmdlIGNvbnRleHRcbiAgICAgICAgICogQHJldHVybnMge0VsZW1lbnR9IHRoZSBlbGVtZW50IHRoYXQgZW5kZWQgdXAgaW4gdGhlIERPTVxuICAgICAgICAgKi9cbiAgICAgICAgZnVuY3Rpb24gbW9ycGhPbGROb2RlVG8ob2xkTm9kZSwgbmV3Q29udGVudCwgY3R4KSB7XG4gICAgICAgICAgICBpZiAoY3R4Lmlnbm9yZUFjdGl2ZSAmJiBvbGROb2RlID09PSBkb2N1bWVudC5hY3RpdmVFbGVtZW50KSA7IGVsc2UgaWYgKG5ld0NvbnRlbnQgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGlmIChjdHguY2FsbGJhY2tzLmJlZm9yZU5vZGVSZW1vdmVkKG9sZE5vZGUpID09PSBmYWxzZSkgcmV0dXJuIG9sZE5vZGU7XG5cbiAgICAgICAgICAgICAgICBvbGROb2RlLnJlbW92ZSgpO1xuICAgICAgICAgICAgICAgIGN0eC5jYWxsYmFja3MuYWZ0ZXJOb2RlUmVtb3ZlZChvbGROb2RlKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoIWlzU29mdE1hdGNoKG9sZE5vZGUsIG5ld0NvbnRlbnQpKSB7XG4gICAgICAgICAgICAgICAgaWYgKGN0eC5jYWxsYmFja3MuYmVmb3JlTm9kZVJlbW92ZWQob2xkTm9kZSkgPT09IGZhbHNlKSByZXR1cm4gb2xkTm9kZTtcbiAgICAgICAgICAgICAgICBpZiAoY3R4LmNhbGxiYWNrcy5iZWZvcmVOb2RlQWRkZWQobmV3Q29udGVudCkgPT09IGZhbHNlKSByZXR1cm4gb2xkTm9kZTtcblxuICAgICAgICAgICAgICAgIG9sZE5vZGUucGFyZW50RWxlbWVudC5yZXBsYWNlQ2hpbGQobmV3Q29udGVudCwgb2xkTm9kZSk7XG4gICAgICAgICAgICAgICAgY3R4LmNhbGxiYWNrcy5hZnRlck5vZGVBZGRlZChuZXdDb250ZW50KTtcbiAgICAgICAgICAgICAgICBjdHguY2FsbGJhY2tzLmFmdGVyTm9kZVJlbW92ZWQob2xkTm9kZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ld0NvbnRlbnQ7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmIChjdHguY2FsbGJhY2tzLmJlZm9yZU5vZGVNb3JwaGVkKG9sZE5vZGUsIG5ld0NvbnRlbnQpID09PSBmYWxzZSkgcmV0dXJuIG9sZE5vZGU7XG5cbiAgICAgICAgICAgICAgICBpZiAob2xkTm9kZSBpbnN0YW5jZW9mIEhUTUxIZWFkRWxlbWVudCAmJiBjdHguaGVhZC5pZ25vcmUpIDsgZWxzZSBpZiAob2xkTm9kZSBpbnN0YW5jZW9mIEhUTUxIZWFkRWxlbWVudCAmJiBjdHguaGVhZC5zdHlsZSAhPT0gXCJtb3JwaFwiKSB7XG4gICAgICAgICAgICAgICAgICAgIGhhbmRsZUhlYWRFbGVtZW50KG5ld0NvbnRlbnQsIG9sZE5vZGUsIGN0eCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgc3luY05vZGVGcm9tKG5ld0NvbnRlbnQsIG9sZE5vZGUsIGN0eCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghaWdub3JlVmFsdWVPZkFjdGl2ZUVsZW1lbnQob2xkTm9kZSwgY3R4KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbW9ycGhDaGlsZHJlbihuZXdDb250ZW50LCBvbGROb2RlLCBjdHgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGN0eC5jYWxsYmFja3MuYWZ0ZXJOb2RlTW9ycGhlZChvbGROb2RlLCBuZXdDb250ZW50KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gb2xkTm9kZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBUaGlzIGlzIHRoZSBjb3JlIGFsZ29yaXRobSBmb3IgbWF0Y2hpbmcgdXAgY2hpbGRyZW4uICBUaGUgaWRlYSBpcyB0byB1c2UgaWQgc2V0cyB0byB0cnkgdG8gbWF0Y2ggdXBcbiAgICAgICAgICogbm9kZXMgYXMgZmFpdGhmdWxseSBhcyBwb3NzaWJsZS4gIFdlIGdyZWVkaWx5IG1hdGNoLCB3aGljaCBhbGxvd3MgdXMgdG8ga2VlcCB0aGUgYWxnb3JpdGhtIGZhc3QsIGJ1dFxuICAgICAgICAgKiBieSB1c2luZyBpZCBzZXRzLCB3ZSBhcmUgYWJsZSB0byBiZXR0ZXIgbWF0Y2ggdXAgd2l0aCBjb250ZW50IGRlZXBlciBpbiB0aGUgRE9NLlxuICAgICAgICAgKlxuICAgICAgICAgKiBCYXNpYyBhbGdvcml0aG0gaXMsIGZvciBlYWNoIG5vZGUgaW4gdGhlIG5ldyBjb250ZW50OlxuICAgICAgICAgKlxuICAgICAgICAgKiAtIGlmIHdlIGhhdmUgcmVhY2hlZCB0aGUgZW5kIG9mIHRoZSBvbGQgcGFyZW50LCBhcHBlbmQgdGhlIG5ldyBjb250ZW50XG4gICAgICAgICAqIC0gaWYgdGhlIG5ldyBjb250ZW50IGhhcyBhbiBpZCBzZXQgbWF0Y2ggd2l0aCB0aGUgY3VycmVudCBpbnNlcnRpb24gcG9pbnQsIG1vcnBoXG4gICAgICAgICAqIC0gc2VhcmNoIGZvciBhbiBpZCBzZXQgbWF0Y2hcbiAgICAgICAgICogLSBpZiBpZCBzZXQgbWF0Y2ggZm91bmQsIG1vcnBoXG4gICAgICAgICAqIC0gb3RoZXJ3aXNlIHNlYXJjaCBmb3IgYSBcInNvZnRcIiBtYXRjaFxuICAgICAgICAgKiAtIGlmIGEgc29mdCBtYXRjaCBpcyBmb3VuZCwgbW9ycGhcbiAgICAgICAgICogLSBvdGhlcndpc2UsIHByZXBlbmQgdGhlIG5ldyBub2RlIGJlZm9yZSB0aGUgY3VycmVudCBpbnNlcnRpb24gcG9pbnRcbiAgICAgICAgICpcbiAgICAgICAgICogVGhlIHR3byBzZWFyY2ggYWxnb3JpdGhtcyB0ZXJtaW5hdGUgaWYgY29tcGV0aW5nIG5vZGUgbWF0Y2hlcyBhcHBlYXIgdG8gb3V0d2VpZ2ggd2hhdCBjYW4gYmUgYWNoaWV2ZWRcbiAgICAgICAgICogd2l0aCB0aGUgY3VycmVudCBub2RlLiAgU2VlIGZpbmRJZFNldE1hdGNoKCkgYW5kIGZpbmRTb2Z0TWF0Y2goKSBmb3IgZGV0YWlscy5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtFbGVtZW50fSBuZXdQYXJlbnQgdGhlIHBhcmVudCBlbGVtZW50IG9mIHRoZSBuZXcgY29udGVudFxuICAgICAgICAgKiBAcGFyYW0ge0VsZW1lbnQgfSBvbGRQYXJlbnQgdGhlIG9sZCBjb250ZW50IHRoYXQgd2UgYXJlIG1lcmdpbmcgdGhlIG5ldyBjb250ZW50IGludG9cbiAgICAgICAgICogQHBhcmFtIGN0eCB0aGUgbWVyZ2UgY29udGV4dFxuICAgICAgICAgKi9cbiAgICAgICAgZnVuY3Rpb24gbW9ycGhDaGlsZHJlbihuZXdQYXJlbnQsIG9sZFBhcmVudCwgY3R4KSB7XG5cbiAgICAgICAgICAgIGxldCBuZXh0TmV3Q2hpbGQgPSBuZXdQYXJlbnQuZmlyc3RDaGlsZDtcbiAgICAgICAgICAgIGxldCBpbnNlcnRpb25Qb2ludCA9IG9sZFBhcmVudC5maXJzdENoaWxkO1xuICAgICAgICAgICAgbGV0IG5ld0NoaWxkO1xuXG4gICAgICAgICAgICAvLyBydW4gdGhyb3VnaCBhbGwgdGhlIG5ldyBjb250ZW50XG4gICAgICAgICAgICB3aGlsZSAobmV4dE5ld0NoaWxkKSB7XG5cbiAgICAgICAgICAgICAgICBuZXdDaGlsZCA9IG5leHROZXdDaGlsZDtcbiAgICAgICAgICAgICAgICBuZXh0TmV3Q2hpbGQgPSBuZXdDaGlsZC5uZXh0U2libGluZztcblxuICAgICAgICAgICAgICAgIC8vIGlmIHdlIGFyZSBhdCB0aGUgZW5kIG9mIHRoZSBleGl0aW5nIHBhcmVudCdzIGNoaWxkcmVuLCBqdXN0IGFwcGVuZFxuICAgICAgICAgICAgICAgIGlmIChpbnNlcnRpb25Qb2ludCA9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjdHguY2FsbGJhY2tzLmJlZm9yZU5vZGVBZGRlZChuZXdDaGlsZCkgPT09IGZhbHNlKSByZXR1cm47XG5cbiAgICAgICAgICAgICAgICAgICAgb2xkUGFyZW50LmFwcGVuZENoaWxkKG5ld0NoaWxkKTtcbiAgICAgICAgICAgICAgICAgICAgY3R4LmNhbGxiYWNrcy5hZnRlck5vZGVBZGRlZChuZXdDaGlsZCk7XG4gICAgICAgICAgICAgICAgICAgIHJlbW92ZUlkc0Zyb21Db25zaWRlcmF0aW9uKGN0eCwgbmV3Q2hpbGQpO1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvLyBpZiB0aGUgY3VycmVudCBub2RlIGhhcyBhbiBpZCBzZXQgbWF0Y2ggdGhlbiBtb3JwaFxuICAgICAgICAgICAgICAgIGlmIChpc0lkU2V0TWF0Y2gobmV3Q2hpbGQsIGluc2VydGlvblBvaW50LCBjdHgpKSB7XG4gICAgICAgICAgICAgICAgICAgIG1vcnBoT2xkTm9kZVRvKGluc2VydGlvblBvaW50LCBuZXdDaGlsZCwgY3R4KTtcbiAgICAgICAgICAgICAgICAgICAgaW5zZXJ0aW9uUG9pbnQgPSBpbnNlcnRpb25Qb2ludC5uZXh0U2libGluZztcbiAgICAgICAgICAgICAgICAgICAgcmVtb3ZlSWRzRnJvbUNvbnNpZGVyYXRpb24oY3R4LCBuZXdDaGlsZCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC8vIG90aGVyd2lzZSBzZWFyY2ggZm9yd2FyZCBpbiB0aGUgZXhpc3Rpbmcgb2xkIGNoaWxkcmVuIGZvciBhbiBpZCBzZXQgbWF0Y2hcbiAgICAgICAgICAgICAgICBsZXQgaWRTZXRNYXRjaCA9IGZpbmRJZFNldE1hdGNoKG5ld1BhcmVudCwgb2xkUGFyZW50LCBuZXdDaGlsZCwgaW5zZXJ0aW9uUG9pbnQsIGN0eCk7XG5cbiAgICAgICAgICAgICAgICAvLyBpZiB3ZSBmb3VuZCBhIHBvdGVudGlhbCBtYXRjaCwgcmVtb3ZlIHRoZSBub2RlcyB1bnRpbCB0aGF0IHBvaW50IGFuZCBtb3JwaFxuICAgICAgICAgICAgICAgIGlmIChpZFNldE1hdGNoKSB7XG4gICAgICAgICAgICAgICAgICAgIGluc2VydGlvblBvaW50ID0gcmVtb3ZlTm9kZXNCZXR3ZWVuKGluc2VydGlvblBvaW50LCBpZFNldE1hdGNoLCBjdHgpO1xuICAgICAgICAgICAgICAgICAgICBtb3JwaE9sZE5vZGVUbyhpZFNldE1hdGNoLCBuZXdDaGlsZCwgY3R4KTtcbiAgICAgICAgICAgICAgICAgICAgcmVtb3ZlSWRzRnJvbUNvbnNpZGVyYXRpb24oY3R4LCBuZXdDaGlsZCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC8vIG5vIGlkIHNldCBtYXRjaCBmb3VuZCwgc28gc2NhbiBmb3J3YXJkIGZvciBhIHNvZnQgbWF0Y2ggZm9yIHRoZSBjdXJyZW50IG5vZGVcbiAgICAgICAgICAgICAgICBsZXQgc29mdE1hdGNoID0gZmluZFNvZnRNYXRjaChuZXdQYXJlbnQsIG9sZFBhcmVudCwgbmV3Q2hpbGQsIGluc2VydGlvblBvaW50LCBjdHgpO1xuXG4gICAgICAgICAgICAgICAgLy8gaWYgd2UgZm91bmQgYSBzb2Z0IG1hdGNoIGZvciB0aGUgY3VycmVudCBub2RlLCBtb3JwaFxuICAgICAgICAgICAgICAgIGlmIChzb2Z0TWF0Y2gpIHtcbiAgICAgICAgICAgICAgICAgICAgaW5zZXJ0aW9uUG9pbnQgPSByZW1vdmVOb2Rlc0JldHdlZW4oaW5zZXJ0aW9uUG9pbnQsIHNvZnRNYXRjaCwgY3R4KTtcbiAgICAgICAgICAgICAgICAgICAgbW9ycGhPbGROb2RlVG8oc29mdE1hdGNoLCBuZXdDaGlsZCwgY3R4KTtcbiAgICAgICAgICAgICAgICAgICAgcmVtb3ZlSWRzRnJvbUNvbnNpZGVyYXRpb24oY3R4LCBuZXdDaGlsZCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC8vIGFiYW5kb24gYWxsIGhvcGUgb2YgbW9ycGhpbmcsIGp1c3QgaW5zZXJ0IHRoZSBuZXcgY2hpbGQgYmVmb3JlIHRoZSBpbnNlcnRpb24gcG9pbnRcbiAgICAgICAgICAgICAgICAvLyBhbmQgbW92ZSBvblxuICAgICAgICAgICAgICAgIGlmIChjdHguY2FsbGJhY2tzLmJlZm9yZU5vZGVBZGRlZChuZXdDaGlsZCkgPT09IGZhbHNlKSByZXR1cm47XG5cbiAgICAgICAgICAgICAgICBvbGRQYXJlbnQuaW5zZXJ0QmVmb3JlKG5ld0NoaWxkLCBpbnNlcnRpb25Qb2ludCk7XG4gICAgICAgICAgICAgICAgY3R4LmNhbGxiYWNrcy5hZnRlck5vZGVBZGRlZChuZXdDaGlsZCk7XG4gICAgICAgICAgICAgICAgcmVtb3ZlSWRzRnJvbUNvbnNpZGVyYXRpb24oY3R4LCBuZXdDaGlsZCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIHJlbW92ZSBhbnkgcmVtYWluaW5nIG9sZCBub2RlcyB0aGF0IGRpZG4ndCBtYXRjaCB1cCB3aXRoIG5ldyBjb250ZW50XG4gICAgICAgICAgICB3aGlsZSAoaW5zZXJ0aW9uUG9pbnQgIT09IG51bGwpIHtcblxuICAgICAgICAgICAgICAgIGxldCB0ZW1wTm9kZSA9IGluc2VydGlvblBvaW50O1xuICAgICAgICAgICAgICAgIGluc2VydGlvblBvaW50ID0gaW5zZXJ0aW9uUG9pbnQubmV4dFNpYmxpbmc7XG4gICAgICAgICAgICAgICAgcmVtb3ZlTm9kZSh0ZW1wTm9kZSwgY3R4KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgICAgICAgLy8gQXR0cmlidXRlIFN5bmNpbmcgQ29kZVxuICAgICAgICAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEBwYXJhbSBhdHRyIHtTdHJpbmd9IHRoZSBhdHRyaWJ1dGUgdG8gYmUgbXV0YXRlZFxuICAgICAgICAgKiBAcGFyYW0gdG8ge0VsZW1lbnR9IHRoZSBlbGVtZW50IHRoYXQgaXMgZ29pbmcgdG8gYmUgdXBkYXRlZFxuICAgICAgICAgKiBAcGFyYW0gdXBkYXRlVHlwZSB7KFwidXBkYXRlXCJ8XCJyZW1vdmVcIil9XG4gICAgICAgICAqIEBwYXJhbSBjdHggdGhlIG1lcmdlIGNvbnRleHRcbiAgICAgICAgICogQHJldHVybnMge2Jvb2xlYW59IHRydWUgaWYgdGhlIGF0dHJpYnV0ZSBzaG91bGQgYmUgaWdub3JlZCwgZmFsc2Ugb3RoZXJ3aXNlXG4gICAgICAgICAqL1xuICAgICAgICBmdW5jdGlvbiBpZ25vcmVBdHRyaWJ1dGUoYXR0ciwgdG8sIHVwZGF0ZVR5cGUsIGN0eCkge1xuICAgICAgICAgICAgaWYoYXR0ciA9PT0gJ3ZhbHVlJyAmJiBjdHguaWdub3JlQWN0aXZlVmFsdWUgJiYgdG8gPT09IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpe1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGN0eC5jYWxsYmFja3MuYmVmb3JlQXR0cmlidXRlVXBkYXRlZChhdHRyLCB0bywgdXBkYXRlVHlwZSkgPT09IGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIHN5bmNzIGEgZ2l2ZW4gbm9kZSB3aXRoIGFub3RoZXIgbm9kZSwgY29weWluZyBvdmVyIGFsbCBhdHRyaWJ1dGVzIGFuZFxuICAgICAgICAgKiBpbm5lciBlbGVtZW50IHN0YXRlIGZyb20gdGhlICdmcm9tJyBub2RlIHRvIHRoZSAndG8nIG5vZGVcbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtFbGVtZW50fSBmcm9tIHRoZSBlbGVtZW50IHRvIGNvcHkgYXR0cmlidXRlcyAmIHN0YXRlIGZyb21cbiAgICAgICAgICogQHBhcmFtIHtFbGVtZW50fSB0byB0aGUgZWxlbWVudCB0byBjb3B5IGF0dHJpYnV0ZXMgJiBzdGF0ZSB0b1xuICAgICAgICAgKiBAcGFyYW0gY3R4IHRoZSBtZXJnZSBjb250ZXh0XG4gICAgICAgICAqL1xuICAgICAgICBmdW5jdGlvbiBzeW5jTm9kZUZyb20oZnJvbSwgdG8sIGN0eCkge1xuICAgICAgICAgICAgbGV0IHR5cGUgPSBmcm9tLm5vZGVUeXBlO1xuXG4gICAgICAgICAgICAvLyBpZiBpcyBhbiBlbGVtZW50IHR5cGUsIHN5bmMgdGhlIGF0dHJpYnV0ZXMgZnJvbSB0aGVcbiAgICAgICAgICAgIC8vIG5ldyBub2RlIGludG8gdGhlIG5ldyBub2RlXG4gICAgICAgICAgICBpZiAodHlwZSA9PT0gMSAvKiBlbGVtZW50IHR5cGUgKi8pIHtcbiAgICAgICAgICAgICAgICBjb25zdCBmcm9tQXR0cmlidXRlcyA9IGZyb20uYXR0cmlidXRlcztcbiAgICAgICAgICAgICAgICBjb25zdCB0b0F0dHJpYnV0ZXMgPSB0by5hdHRyaWJ1dGVzO1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgZnJvbUF0dHJpYnV0ZSBvZiBmcm9tQXR0cmlidXRlcykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaWdub3JlQXR0cmlidXRlKGZyb21BdHRyaWJ1dGUubmFtZSwgdG8sICd1cGRhdGUnLCBjdHgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAodG8uZ2V0QXR0cmlidXRlKGZyb21BdHRyaWJ1dGUubmFtZSkgIT09IGZyb21BdHRyaWJ1dGUudmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRvLnNldEF0dHJpYnV0ZShmcm9tQXR0cmlidXRlLm5hbWUsIGZyb21BdHRyaWJ1dGUudmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIGl0ZXJhdGUgYmFja3dhcmRzIHRvIGF2b2lkIHNraXBwaW5nIG92ZXIgaXRlbXMgd2hlbiBhIGRlbGV0ZSBvY2N1cnNcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gdG9BdHRyaWJ1dGVzLmxlbmd0aCAtIDE7IDAgPD0gaTsgaS0tKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRvQXR0cmlidXRlID0gdG9BdHRyaWJ1dGVzW2ldO1xuICAgICAgICAgICAgICAgICAgICBpZiAoaWdub3JlQXR0cmlidXRlKHRvQXR0cmlidXRlLm5hbWUsIHRvLCAncmVtb3ZlJywgY3R4KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKCFmcm9tLmhhc0F0dHJpYnV0ZSh0b0F0dHJpYnV0ZS5uYW1lKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdG8ucmVtb3ZlQXR0cmlidXRlKHRvQXR0cmlidXRlLm5hbWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBzeW5jIHRleHQgbm9kZXNcbiAgICAgICAgICAgIGlmICh0eXBlID09PSA4IC8qIGNvbW1lbnQgKi8gfHwgdHlwZSA9PT0gMyAvKiB0ZXh0ICovKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRvLm5vZGVWYWx1ZSAhPT0gZnJvbS5ub2RlVmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgdG8ubm9kZVZhbHVlID0gZnJvbS5ub2RlVmFsdWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoIWlnbm9yZVZhbHVlT2ZBY3RpdmVFbGVtZW50KHRvLCBjdHgpKSB7XG4gICAgICAgICAgICAgICAgLy8gc3luYyBpbnB1dCB2YWx1ZXNcbiAgICAgICAgICAgICAgICBzeW5jSW5wdXRWYWx1ZShmcm9tLCB0bywgY3R4KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAcGFyYW0gZnJvbSB7RWxlbWVudH0gZWxlbWVudCB0byBzeW5jIHRoZSB2YWx1ZSBmcm9tXG4gICAgICAgICAqIEBwYXJhbSB0byB7RWxlbWVudH0gZWxlbWVudCB0byBzeW5jIHRoZSB2YWx1ZSB0b1xuICAgICAgICAgKiBAcGFyYW0gYXR0cmlidXRlTmFtZSB7U3RyaW5nfSB0aGUgYXR0cmlidXRlIG5hbWVcbiAgICAgICAgICogQHBhcmFtIGN0eCB0aGUgbWVyZ2UgY29udGV4dFxuICAgICAgICAgKi9cbiAgICAgICAgZnVuY3Rpb24gc3luY0Jvb2xlYW5BdHRyaWJ1dGUoZnJvbSwgdG8sIGF0dHJpYnV0ZU5hbWUsIGN0eCkge1xuICAgICAgICAgICAgaWYgKGZyb21bYXR0cmlidXRlTmFtZV0gIT09IHRvW2F0dHJpYnV0ZU5hbWVdKSB7XG4gICAgICAgICAgICAgICAgbGV0IGlnbm9yZVVwZGF0ZSA9IGlnbm9yZUF0dHJpYnV0ZShhdHRyaWJ1dGVOYW1lLCB0bywgJ3VwZGF0ZScsIGN0eCk7XG4gICAgICAgICAgICAgICAgaWYgKCFpZ25vcmVVcGRhdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgdG9bYXR0cmlidXRlTmFtZV0gPSBmcm9tW2F0dHJpYnV0ZU5hbWVdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoZnJvbVthdHRyaWJ1dGVOYW1lXSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWlnbm9yZVVwZGF0ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdG8uc2V0QXR0cmlidXRlKGF0dHJpYnV0ZU5hbWUsIGZyb21bYXR0cmlidXRlTmFtZV0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFpZ25vcmVBdHRyaWJ1dGUoYXR0cmlidXRlTmFtZSwgdG8sICdyZW1vdmUnLCBjdHgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0by5yZW1vdmVBdHRyaWJ1dGUoYXR0cmlidXRlTmFtZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvKipcbiAgICAgICAgICogTkI6IG1hbnkgYm90aGFucyBkaWVkIHRvIGJyaW5nIHVzIGluZm9ybWF0aW9uOlxuICAgICAgICAgKlxuICAgICAgICAgKiAgaHR0cHM6Ly9naXRodWIuY29tL3BhdHJpY2stc3RlZWxlLWlkZW0vbW9ycGhkb20vYmxvYi9tYXN0ZXIvc3JjL3NwZWNpYWxFbEhhbmRsZXJzLmpzXG4gICAgICAgICAqICBodHRwczovL2dpdGh1Yi5jb20vY2hvb2pzL25hbm9tb3JwaC9ibG9iL21hc3Rlci9saWIvbW9ycGguanNMMTEzXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSBmcm9tIHtFbGVtZW50fSB0aGUgZWxlbWVudCB0byBzeW5jIHRoZSBpbnB1dCB2YWx1ZSBmcm9tXG4gICAgICAgICAqIEBwYXJhbSB0byB7RWxlbWVudH0gdGhlIGVsZW1lbnQgdG8gc3luYyB0aGUgaW5wdXQgdmFsdWUgdG9cbiAgICAgICAgICogQHBhcmFtIGN0eCB0aGUgbWVyZ2UgY29udGV4dFxuICAgICAgICAgKi9cbiAgICAgICAgZnVuY3Rpb24gc3luY0lucHV0VmFsdWUoZnJvbSwgdG8sIGN0eCkge1xuICAgICAgICAgICAgaWYgKGZyb20gaW5zdGFuY2VvZiBIVE1MSW5wdXRFbGVtZW50ICYmXG4gICAgICAgICAgICAgICAgdG8gaW5zdGFuY2VvZiBIVE1MSW5wdXRFbGVtZW50ICYmXG4gICAgICAgICAgICAgICAgZnJvbS50eXBlICE9PSAnZmlsZScpIHtcblxuICAgICAgICAgICAgICAgIGxldCBmcm9tVmFsdWUgPSBmcm9tLnZhbHVlO1xuICAgICAgICAgICAgICAgIGxldCB0b1ZhbHVlID0gdG8udmFsdWU7XG5cbiAgICAgICAgICAgICAgICAvLyBzeW5jIGJvb2xlYW4gYXR0cmlidXRlc1xuICAgICAgICAgICAgICAgIHN5bmNCb29sZWFuQXR0cmlidXRlKGZyb20sIHRvLCAnY2hlY2tlZCcsIGN0eCk7XG4gICAgICAgICAgICAgICAgc3luY0Jvb2xlYW5BdHRyaWJ1dGUoZnJvbSwgdG8sICdkaXNhYmxlZCcsIGN0eCk7XG5cbiAgICAgICAgICAgICAgICBpZiAoIWZyb20uaGFzQXR0cmlidXRlKCd2YWx1ZScpKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghaWdub3JlQXR0cmlidXRlKCd2YWx1ZScsIHRvLCAncmVtb3ZlJywgY3R4KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdG8udmFsdWUgPSAnJztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRvLnJlbW92ZUF0dHJpYnV0ZSgndmFsdWUnKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZnJvbVZhbHVlICE9PSB0b1ZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghaWdub3JlQXR0cmlidXRlKCd2YWx1ZScsIHRvLCAndXBkYXRlJywgY3R4KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdG8uc2V0QXR0cmlidXRlKCd2YWx1ZScsIGZyb21WYWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0by52YWx1ZSA9IGZyb21WYWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZnJvbSBpbnN0YW5jZW9mIEhUTUxPcHRpb25FbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgc3luY0Jvb2xlYW5BdHRyaWJ1dGUoZnJvbSwgdG8sICdzZWxlY3RlZCcsIGN0eCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGZyb20gaW5zdGFuY2VvZiBIVE1MVGV4dEFyZWFFbGVtZW50ICYmIHRvIGluc3RhbmNlb2YgSFRNTFRleHRBcmVhRWxlbWVudCkge1xuICAgICAgICAgICAgICAgIGxldCBmcm9tVmFsdWUgPSBmcm9tLnZhbHVlO1xuICAgICAgICAgICAgICAgIGxldCB0b1ZhbHVlID0gdG8udmFsdWU7XG4gICAgICAgICAgICAgICAgaWYgKGlnbm9yZUF0dHJpYnV0ZSgndmFsdWUnLCB0bywgJ3VwZGF0ZScsIGN0eCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoZnJvbVZhbHVlICE9PSB0b1ZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRvLnZhbHVlID0gZnJvbVZhbHVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAodG8uZmlyc3RDaGlsZCAmJiB0by5maXJzdENoaWxkLm5vZGVWYWx1ZSAhPT0gZnJvbVZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRvLmZpcnN0Q2hpbGQubm9kZVZhbHVlID0gZnJvbVZhbHVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgICAgICAgLy8gdGhlIEhFQUQgdGFnIGNhbiBiZSBoYW5kbGVkIHNwZWNpYWxseSwgZWl0aGVyIHcvIGEgJ21lcmdlJyBvciAnYXBwZW5kJyBzdHlsZVxuICAgICAgICAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAgICAgIGZ1bmN0aW9uIGhhbmRsZUhlYWRFbGVtZW50KG5ld0hlYWRUYWcsIGN1cnJlbnRIZWFkLCBjdHgpIHtcblxuICAgICAgICAgICAgbGV0IGFkZGVkID0gW107XG4gICAgICAgICAgICBsZXQgcmVtb3ZlZCA9IFtdO1xuICAgICAgICAgICAgbGV0IHByZXNlcnZlZCA9IFtdO1xuICAgICAgICAgICAgbGV0IG5vZGVzVG9BcHBlbmQgPSBbXTtcblxuICAgICAgICAgICAgbGV0IGhlYWRNZXJnZVN0eWxlID0gY3R4LmhlYWQuc3R5bGU7XG5cbiAgICAgICAgICAgIC8vIHB1dCBhbGwgbmV3IGhlYWQgZWxlbWVudHMgaW50byBhIE1hcCwgYnkgdGhlaXIgb3V0ZXJIVE1MXG4gICAgICAgICAgICBsZXQgc3JjVG9OZXdIZWFkTm9kZXMgPSBuZXcgTWFwKCk7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IG5ld0hlYWRDaGlsZCBvZiBuZXdIZWFkVGFnLmNoaWxkcmVuKSB7XG4gICAgICAgICAgICAgICAgc3JjVG9OZXdIZWFkTm9kZXMuc2V0KG5ld0hlYWRDaGlsZC5vdXRlckhUTUwsIG5ld0hlYWRDaGlsZCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGZvciBlYWNoIGVsdCBpbiB0aGUgY3VycmVudCBoZWFkXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGN1cnJlbnRIZWFkRWx0IG9mIGN1cnJlbnRIZWFkLmNoaWxkcmVuKSB7XG5cbiAgICAgICAgICAgICAgICAvLyBJZiB0aGUgY3VycmVudCBoZWFkIGVsZW1lbnQgaXMgaW4gdGhlIG1hcFxuICAgICAgICAgICAgICAgIGxldCBpbk5ld0NvbnRlbnQgPSBzcmNUb05ld0hlYWROb2Rlcy5oYXMoY3VycmVudEhlYWRFbHQub3V0ZXJIVE1MKTtcbiAgICAgICAgICAgICAgICBsZXQgaXNSZUFwcGVuZGVkID0gY3R4LmhlYWQuc2hvdWxkUmVBcHBlbmQoY3VycmVudEhlYWRFbHQpO1xuICAgICAgICAgICAgICAgIGxldCBpc1ByZXNlcnZlZCA9IGN0eC5oZWFkLnNob3VsZFByZXNlcnZlKGN1cnJlbnRIZWFkRWx0KTtcbiAgICAgICAgICAgICAgICBpZiAoaW5OZXdDb250ZW50IHx8IGlzUHJlc2VydmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpc1JlQXBwZW5kZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlbW92ZSB0aGUgY3VycmVudCB2ZXJzaW9uIGFuZCBsZXQgdGhlIG5ldyB2ZXJzaW9uIHJlcGxhY2UgaXQgYW5kIHJlLWV4ZWN1dGVcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZWQucHVzaChjdXJyZW50SGVhZEVsdCk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGlzIGVsZW1lbnQgYWxyZWFkeSBleGlzdHMgYW5kIHNob3VsZCBub3QgYmUgcmUtYXBwZW5kZWQsIHNvIHJlbW92ZSBpdCBmcm9tXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGUgbmV3IGNvbnRlbnQgbWFwLCBwcmVzZXJ2aW5nIGl0IGluIHRoZSBET01cbiAgICAgICAgICAgICAgICAgICAgICAgIHNyY1RvTmV3SGVhZE5vZGVzLmRlbGV0ZShjdXJyZW50SGVhZEVsdC5vdXRlckhUTUwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcHJlc2VydmVkLnB1c2goY3VycmVudEhlYWRFbHQpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGhlYWRNZXJnZVN0eWxlID09PSBcImFwcGVuZFwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyB3ZSBhcmUgYXBwZW5kaW5nIGFuZCB0aGlzIGV4aXN0aW5nIGVsZW1lbnQgaXMgbm90IG5ldyBjb250ZW50XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBzbyBpZiBhbmQgb25seSBpZiBpdCBpcyBtYXJrZWQgZm9yIHJlLWFwcGVuZCBkbyB3ZSBkbyBhbnl0aGluZ1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzUmVBcHBlbmRlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZWQucHVzaChjdXJyZW50SGVhZEVsdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZXNUb0FwcGVuZC5wdXNoKGN1cnJlbnRIZWFkRWx0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlmIHRoaXMgaXMgYSBtZXJnZSwgd2UgcmVtb3ZlIHRoaXMgY29udGVudCBzaW5jZSBpdCBpcyBub3QgaW4gdGhlIG5ldyBoZWFkXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY3R4LmhlYWQuc2hvdWxkUmVtb3ZlKGN1cnJlbnRIZWFkRWx0KSAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVkLnB1c2goY3VycmVudEhlYWRFbHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBQdXNoIHRoZSByZW1haW5pbmcgbmV3IGhlYWQgZWxlbWVudHMgaW4gdGhlIE1hcCBpbnRvIHRoZVxuICAgICAgICAgICAgLy8gbm9kZXMgdG8gYXBwZW5kIHRvIHRoZSBoZWFkIHRhZ1xuICAgICAgICAgICAgbm9kZXNUb0FwcGVuZC5wdXNoKC4uLnNyY1RvTmV3SGVhZE5vZGVzLnZhbHVlcygpKTtcblxuICAgICAgICAgICAgbGV0IHByb21pc2VzID0gW107XG4gICAgICAgICAgICBmb3IgKGNvbnN0IG5ld05vZGUgb2Ygbm9kZXNUb0FwcGVuZCkge1xuICAgICAgICAgICAgICAgIGxldCBuZXdFbHQgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpLmNyZWF0ZUNvbnRleHR1YWxGcmFnbWVudChuZXdOb2RlLm91dGVySFRNTCkuZmlyc3RDaGlsZDtcbiAgICAgICAgICAgICAgICBpZiAoY3R4LmNhbGxiYWNrcy5iZWZvcmVOb2RlQWRkZWQobmV3RWx0KSAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG5ld0VsdC5ocmVmIHx8IG5ld0VsdC5zcmMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCByZXNvbHZlID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBwcm9taXNlID0gbmV3IFByb21pc2UoZnVuY3Rpb24gKF9yZXNvbHZlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSA9IF9yZXNvbHZlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBuZXdFbHQuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb21pc2VzLnB1c2gocHJvbWlzZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY3VycmVudEhlYWQuYXBwZW5kQ2hpbGQobmV3RWx0KTtcbiAgICAgICAgICAgICAgICAgICAgY3R4LmNhbGxiYWNrcy5hZnRlck5vZGVBZGRlZChuZXdFbHQpO1xuICAgICAgICAgICAgICAgICAgICBhZGRlZC5wdXNoKG5ld0VsdCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyByZW1vdmUgYWxsIHJlbW92ZWQgZWxlbWVudHMsIGFmdGVyIHdlIGhhdmUgYXBwZW5kZWQgdGhlIG5ldyBlbGVtZW50cyB0byBhdm9pZFxuICAgICAgICAgICAgLy8gYWRkaXRpb25hbCBuZXR3b3JrIHJlcXVlc3RzIGZvciB0aGluZ3MgbGlrZSBzdHlsZSBzaGVldHNcbiAgICAgICAgICAgIGZvciAoY29uc3QgcmVtb3ZlZEVsZW1lbnQgb2YgcmVtb3ZlZCkge1xuICAgICAgICAgICAgICAgIGlmIChjdHguY2FsbGJhY2tzLmJlZm9yZU5vZGVSZW1vdmVkKHJlbW92ZWRFbGVtZW50KSAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudEhlYWQucmVtb3ZlQ2hpbGQocmVtb3ZlZEVsZW1lbnQpO1xuICAgICAgICAgICAgICAgICAgICBjdHguY2FsbGJhY2tzLmFmdGVyTm9kZVJlbW92ZWQocmVtb3ZlZEVsZW1lbnQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY3R4LmhlYWQuYWZ0ZXJIZWFkTW9ycGhlZChjdXJyZW50SGVhZCwge2FkZGVkOiBhZGRlZCwga2VwdDogcHJlc2VydmVkLCByZW1vdmVkOiByZW1vdmVkfSk7XG4gICAgICAgICAgICByZXR1cm4gcHJvbWlzZXM7XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBub09wKCkge1xuICAgICAgICB9XG5cbiAgICAgICAgLypcbiAgICAgICAgICBEZWVwIG1lcmdlcyB0aGUgY29uZmlnIG9iamVjdCBhbmQgdGhlIElkaW9tb3JvcGguZGVmYXVsdHMgb2JqZWN0IHRvXG4gICAgICAgICAgcHJvZHVjZSBhIGZpbmFsIGNvbmZpZ3VyYXRpb24gb2JqZWN0XG4gICAgICAgICAqL1xuICAgICAgICBmdW5jdGlvbiBtZXJnZURlZmF1bHRzKGNvbmZpZykge1xuICAgICAgICAgICAgbGV0IGZpbmFsQ29uZmlnID0ge307XG4gICAgICAgICAgICAvLyBjb3B5IHRvcCBsZXZlbCBzdHVmZiBpbnRvIGZpbmFsIGNvbmZpZ1xuICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihmaW5hbENvbmZpZywgZGVmYXVsdHMpO1xuICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihmaW5hbENvbmZpZywgY29uZmlnKTtcblxuICAgICAgICAgICAgLy8gY29weSBjYWxsYmFja3MgaW50byBmaW5hbCBjb25maWcgKGRvIHRoaXMgdG8gZGVlcCBtZXJnZSB0aGUgY2FsbGJhY2tzKVxuICAgICAgICAgICAgZmluYWxDb25maWcuY2FsbGJhY2tzID0ge307XG4gICAgICAgICAgICBPYmplY3QuYXNzaWduKGZpbmFsQ29uZmlnLmNhbGxiYWNrcywgZGVmYXVsdHMuY2FsbGJhY2tzKTtcbiAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oZmluYWxDb25maWcuY2FsbGJhY2tzLCBjb25maWcuY2FsbGJhY2tzKTtcblxuICAgICAgICAgICAgLy8gY29weSBoZWFkIGNvbmZpZyBpbnRvIGZpbmFsIGNvbmZpZyAgKGRvIHRoaXMgdG8gZGVlcCBtZXJnZSB0aGUgaGVhZClcbiAgICAgICAgICAgIGZpbmFsQ29uZmlnLmhlYWQgPSB7fTtcbiAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oZmluYWxDb25maWcuaGVhZCwgZGVmYXVsdHMuaGVhZCk7XG4gICAgICAgICAgICBPYmplY3QuYXNzaWduKGZpbmFsQ29uZmlnLmhlYWQsIGNvbmZpZy5oZWFkKTtcbiAgICAgICAgICAgIHJldHVybiBmaW5hbENvbmZpZztcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIGNyZWF0ZU1vcnBoQ29udGV4dChvbGROb2RlLCBuZXdDb250ZW50LCBjb25maWcpIHtcbiAgICAgICAgICAgIGNvbmZpZyA9IG1lcmdlRGVmYXVsdHMoY29uZmlnKTtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgdGFyZ2V0OiBvbGROb2RlLFxuICAgICAgICAgICAgICAgIG5ld0NvbnRlbnQ6IG5ld0NvbnRlbnQsXG4gICAgICAgICAgICAgICAgY29uZmlnOiBjb25maWcsXG4gICAgICAgICAgICAgICAgbW9ycGhTdHlsZTogY29uZmlnLm1vcnBoU3R5bGUsXG4gICAgICAgICAgICAgICAgaWdub3JlQWN0aXZlOiBjb25maWcuaWdub3JlQWN0aXZlLFxuICAgICAgICAgICAgICAgIGlnbm9yZUFjdGl2ZVZhbHVlOiBjb25maWcuaWdub3JlQWN0aXZlVmFsdWUsXG4gICAgICAgICAgICAgICAgaWRNYXA6IGNyZWF0ZUlkTWFwKG9sZE5vZGUsIG5ld0NvbnRlbnQpLFxuICAgICAgICAgICAgICAgIGRlYWRJZHM6IG5ldyBTZXQoKSxcbiAgICAgICAgICAgICAgICBjYWxsYmFja3M6IGNvbmZpZy5jYWxsYmFja3MsXG4gICAgICAgICAgICAgICAgaGVhZDogY29uZmlnLmhlYWRcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIGlzSWRTZXRNYXRjaChub2RlMSwgbm9kZTIsIGN0eCkge1xuICAgICAgICAgICAgaWYgKG5vZGUxID09IG51bGwgfHwgbm9kZTIgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChub2RlMS5ub2RlVHlwZSA9PT0gbm9kZTIubm9kZVR5cGUgJiYgbm9kZTEudGFnTmFtZSA9PT0gbm9kZTIudGFnTmFtZSkge1xuICAgICAgICAgICAgICAgIGlmIChub2RlMS5pZCAhPT0gXCJcIiAmJiBub2RlMS5pZCA9PT0gbm9kZTIuaWQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdldElkSW50ZXJzZWN0aW9uQ291bnQoY3R4LCBub2RlMSwgbm9kZTIpID4gMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBpc1NvZnRNYXRjaChub2RlMSwgbm9kZTIpIHtcbiAgICAgICAgICAgIGlmIChub2RlMSA9PSBudWxsIHx8IG5vZGUyID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbm9kZTEubm9kZVR5cGUgPT09IG5vZGUyLm5vZGVUeXBlICYmIG5vZGUxLnRhZ05hbWUgPT09IG5vZGUyLnRhZ05hbWVcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIHJlbW92ZU5vZGVzQmV0d2VlbihzdGFydEluY2x1c2l2ZSwgZW5kRXhjbHVzaXZlLCBjdHgpIHtcbiAgICAgICAgICAgIHdoaWxlIChzdGFydEluY2x1c2l2ZSAhPT0gZW5kRXhjbHVzaXZlKSB7XG4gICAgICAgICAgICAgICAgbGV0IHRlbXBOb2RlID0gc3RhcnRJbmNsdXNpdmU7XG4gICAgICAgICAgICAgICAgc3RhcnRJbmNsdXNpdmUgPSBzdGFydEluY2x1c2l2ZS5uZXh0U2libGluZztcbiAgICAgICAgICAgICAgICByZW1vdmVOb2RlKHRlbXBOb2RlLCBjdHgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVtb3ZlSWRzRnJvbUNvbnNpZGVyYXRpb24oY3R4LCBlbmRFeGNsdXNpdmUpO1xuICAgICAgICAgICAgcmV0dXJuIGVuZEV4Y2x1c2l2ZS5uZXh0U2libGluZztcbiAgICAgICAgfVxuXG4gICAgICAgIC8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgICAgICAgLy8gU2NhbnMgZm9yd2FyZCBmcm9tIHRoZSBpbnNlcnRpb25Qb2ludCBpbiB0aGUgb2xkIHBhcmVudCBsb29raW5nIGZvciBhIHBvdGVudGlhbCBpZCBtYXRjaFxuICAgICAgICAvLyBmb3IgdGhlIG5ld0NoaWxkLiAgV2Ugc3RvcCBpZiB3ZSBmaW5kIGEgcG90ZW50aWFsIGlkIG1hdGNoIGZvciB0aGUgbmV3IGNoaWxkIE9SXG4gICAgICAgIC8vIGlmIHRoZSBudW1iZXIgb2YgcG90ZW50aWFsIGlkIG1hdGNoZXMgd2UgYXJlIGRpc2NhcmRpbmcgaXMgZ3JlYXRlciB0aGFuIHRoZVxuICAgICAgICAvLyBwb3RlbnRpYWwgaWQgbWF0Y2hlcyBmb3IgdGhlIG5ldyBjaGlsZFxuICAgICAgICAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAgICAgIGZ1bmN0aW9uIGZpbmRJZFNldE1hdGNoKG5ld0NvbnRlbnQsIG9sZFBhcmVudCwgbmV3Q2hpbGQsIGluc2VydGlvblBvaW50LCBjdHgpIHtcblxuICAgICAgICAgICAgLy8gbWF4IGlkIG1hdGNoZXMgd2UgYXJlIHdpbGxpbmcgdG8gZGlzY2FyZCBpbiBvdXIgc2VhcmNoXG4gICAgICAgICAgICBsZXQgbmV3Q2hpbGRQb3RlbnRpYWxJZENvdW50ID0gZ2V0SWRJbnRlcnNlY3Rpb25Db3VudChjdHgsIG5ld0NoaWxkLCBvbGRQYXJlbnQpO1xuXG4gICAgICAgICAgICBsZXQgcG90ZW50aWFsTWF0Y2ggPSBudWxsO1xuXG4gICAgICAgICAgICAvLyBvbmx5IHNlYXJjaCBmb3J3YXJkIGlmIHRoZXJlIGlzIGEgcG9zc2liaWxpdHkgb2YgYW4gaWQgbWF0Y2hcbiAgICAgICAgICAgIGlmIChuZXdDaGlsZFBvdGVudGlhbElkQ291bnQgPiAwKSB7XG4gICAgICAgICAgICAgICAgbGV0IHBvdGVudGlhbE1hdGNoID0gaW5zZXJ0aW9uUG9pbnQ7XG4gICAgICAgICAgICAgICAgLy8gaWYgdGhlcmUgaXMgYSBwb3NzaWJpbGl0eSBvZiBhbiBpZCBtYXRjaCwgc2NhbiBmb3J3YXJkXG4gICAgICAgICAgICAgICAgLy8ga2VlcCB0cmFjayBvZiB0aGUgcG90ZW50aWFsIGlkIG1hdGNoIGNvdW50IHdlIGFyZSBkaXNjYXJkaW5nICh0aGVcbiAgICAgICAgICAgICAgICAvLyBuZXdDaGlsZFBvdGVudGlhbElkQ291bnQgbXVzdCBiZSBncmVhdGVyIHRoYW4gdGhpcyB0byBtYWtlIGl0IGxpa2VseVxuICAgICAgICAgICAgICAgIC8vIHdvcnRoIGl0KVxuICAgICAgICAgICAgICAgIGxldCBvdGhlck1hdGNoQ291bnQgPSAwO1xuICAgICAgICAgICAgICAgIHdoaWxlIChwb3RlbnRpYWxNYXRjaCAhPSBudWxsKSB7XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gSWYgd2UgaGF2ZSBhbiBpZCBtYXRjaCwgcmV0dXJuIHRoZSBjdXJyZW50IHBvdGVudGlhbCBtYXRjaFxuICAgICAgICAgICAgICAgICAgICBpZiAoaXNJZFNldE1hdGNoKG5ld0NoaWxkLCBwb3RlbnRpYWxNYXRjaCwgY3R4KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBvdGVudGlhbE1hdGNoO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gY29tcHV0ZXIgdGhlIG90aGVyIHBvdGVudGlhbCBtYXRjaGVzIG9mIHRoaXMgbmV3IGNvbnRlbnRcbiAgICAgICAgICAgICAgICAgICAgb3RoZXJNYXRjaENvdW50ICs9IGdldElkSW50ZXJzZWN0aW9uQ291bnQoY3R4LCBwb3RlbnRpYWxNYXRjaCwgbmV3Q29udGVudCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChvdGhlck1hdGNoQ291bnQgPiBuZXdDaGlsZFBvdGVudGlhbElkQ291bnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlmIHdlIGhhdmUgbW9yZSBwb3RlbnRpYWwgaWQgbWF0Y2hlcyBpbiBfb3RoZXJfIGNvbnRlbnQsIHdlXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBkbyBub3QgaGF2ZSBhIGdvb2QgY2FuZGlkYXRlIGZvciBhbiBpZCBtYXRjaCwgc28gcmV0dXJuIG51bGxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gYWR2YW5jZWQgdG8gdGhlIG5leHQgb2xkIGNvbnRlbnQgY2hpbGRcbiAgICAgICAgICAgICAgICAgICAgcG90ZW50aWFsTWF0Y2ggPSBwb3RlbnRpYWxNYXRjaC5uZXh0U2libGluZztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcG90ZW50aWFsTWF0Y2g7XG4gICAgICAgIH1cblxuICAgICAgICAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAgICAgIC8vIFNjYW5zIGZvcndhcmQgZnJvbSB0aGUgaW5zZXJ0aW9uUG9pbnQgaW4gdGhlIG9sZCBwYXJlbnQgbG9va2luZyBmb3IgYSBwb3RlbnRpYWwgc29mdCBtYXRjaFxuICAgICAgICAvLyBmb3IgdGhlIG5ld0NoaWxkLiAgV2Ugc3RvcCBpZiB3ZSBmaW5kIGEgcG90ZW50aWFsIHNvZnQgbWF0Y2ggZm9yIHRoZSBuZXcgY2hpbGQgT1JcbiAgICAgICAgLy8gaWYgd2UgZmluZCBhIHBvdGVudGlhbCBpZCBtYXRjaCBpbiB0aGUgb2xkIHBhcmVudHMgY2hpbGRyZW4gT1IgaWYgd2UgZmluZCB0d29cbiAgICAgICAgLy8gcG90ZW50aWFsIHNvZnQgbWF0Y2hlcyBmb3IgdGhlIG5leHQgdHdvIHBpZWNlcyBvZiBuZXcgY29udGVudFxuICAgICAgICAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAgICAgIGZ1bmN0aW9uIGZpbmRTb2Z0TWF0Y2gobmV3Q29udGVudCwgb2xkUGFyZW50LCBuZXdDaGlsZCwgaW5zZXJ0aW9uUG9pbnQsIGN0eCkge1xuXG4gICAgICAgICAgICBsZXQgcG90ZW50aWFsU29mdE1hdGNoID0gaW5zZXJ0aW9uUG9pbnQ7XG4gICAgICAgICAgICBsZXQgbmV4dFNpYmxpbmcgPSBuZXdDaGlsZC5uZXh0U2libGluZztcbiAgICAgICAgICAgIGxldCBzaWJsaW5nU29mdE1hdGNoQ291bnQgPSAwO1xuXG4gICAgICAgICAgICB3aGlsZSAocG90ZW50aWFsU29mdE1hdGNoICE9IG51bGwpIHtcblxuICAgICAgICAgICAgICAgIGlmIChnZXRJZEludGVyc2VjdGlvbkNvdW50KGN0eCwgcG90ZW50aWFsU29mdE1hdGNoLCBuZXdDb250ZW50KSA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gdGhlIGN1cnJlbnQgcG90ZW50aWFsIHNvZnQgbWF0Y2ggaGFzIGEgcG90ZW50aWFsIGlkIHNldCBtYXRjaCB3aXRoIHRoZSByZW1haW5pbmcgbmV3XG4gICAgICAgICAgICAgICAgICAgIC8vIGNvbnRlbnQgc28gYmFpbCBvdXQgb2YgbG9va2luZ1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvLyBpZiB3ZSBoYXZlIGEgc29mdCBtYXRjaCB3aXRoIHRoZSBjdXJyZW50IG5vZGUsIHJldHVybiBpdFxuICAgICAgICAgICAgICAgIGlmIChpc1NvZnRNYXRjaChuZXdDaGlsZCwgcG90ZW50aWFsU29mdE1hdGNoKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcG90ZW50aWFsU29mdE1hdGNoO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChpc1NvZnRNYXRjaChuZXh0U2libGluZywgcG90ZW50aWFsU29mdE1hdGNoKSkge1xuICAgICAgICAgICAgICAgICAgICAvLyB0aGUgbmV4dCBuZXcgbm9kZSBoYXMgYSBzb2Z0IG1hdGNoIHdpdGggdGhpcyBub2RlLCBzb1xuICAgICAgICAgICAgICAgICAgICAvLyBpbmNyZW1lbnQgdGhlIGNvdW50IG9mIGZ1dHVyZSBzb2Z0IG1hdGNoZXNcbiAgICAgICAgICAgICAgICAgICAgc2libGluZ1NvZnRNYXRjaENvdW50Kys7XG4gICAgICAgICAgICAgICAgICAgIG5leHRTaWJsaW5nID0gbmV4dFNpYmxpbmcubmV4dFNpYmxpbmc7XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gSWYgdGhlcmUgYXJlIHR3byBmdXR1cmUgc29mdCBtYXRjaGVzLCBiYWlsIHRvIGFsbG93IHRoZSBzaWJsaW5ncyB0byBzb2Z0IG1hdGNoXG4gICAgICAgICAgICAgICAgICAgIC8vIHNvIHRoYXQgd2UgZG9uJ3QgY29uc3VtZSBmdXR1cmUgc29mdCBtYXRjaGVzIGZvciB0aGUgc2FrZSBvZiB0aGUgY3VycmVudCBub2RlXG4gICAgICAgICAgICAgICAgICAgIGlmIChzaWJsaW5nU29mdE1hdGNoQ291bnQgPj0gMikge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvLyBhZHZhbmNlZCB0byB0aGUgbmV4dCBvbGQgY29udGVudCBjaGlsZFxuICAgICAgICAgICAgICAgIHBvdGVudGlhbFNvZnRNYXRjaCA9IHBvdGVudGlhbFNvZnRNYXRjaC5uZXh0U2libGluZztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHBvdGVudGlhbFNvZnRNYXRjaDtcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIHBhcnNlQ29udGVudChuZXdDb250ZW50KSB7XG4gICAgICAgICAgICBsZXQgcGFyc2VyID0gbmV3IERPTVBhcnNlcigpO1xuXG4gICAgICAgICAgICAvLyByZW1vdmUgc3ZncyB0byBhdm9pZCBmYWxzZS1wb3NpdGl2ZSBtYXRjaGVzIG9uIGhlYWQsIGV0Yy5cbiAgICAgICAgICAgIGxldCBjb250ZW50V2l0aFN2Z3NSZW1vdmVkID0gbmV3Q29udGVudC5yZXBsYWNlKC88c3ZnKFxcc1tePl0qPnw+KShbXFxzXFxTXSo/KTxcXC9zdmc+L2dpbSwgJycpO1xuXG4gICAgICAgICAgICAvLyBpZiB0aGUgbmV3Q29udGVudCBjb250YWlucyBhIGh0bWwsIGhlYWQgb3IgYm9keSB0YWcsIHdlIGNhbiBzaW1wbHkgcGFyc2UgaXQgdy9vIHdyYXBwaW5nXG4gICAgICAgICAgICBpZiAoY29udGVudFdpdGhTdmdzUmVtb3ZlZC5tYXRjaCgvPFxcL2h0bWw+LykgfHwgY29udGVudFdpdGhTdmdzUmVtb3ZlZC5tYXRjaCgvPFxcL2hlYWQ+LykgfHwgY29udGVudFdpdGhTdmdzUmVtb3ZlZC5tYXRjaCgvPFxcL2JvZHk+LykpIHtcbiAgICAgICAgICAgICAgICBsZXQgY29udGVudCA9IHBhcnNlci5wYXJzZUZyb21TdHJpbmcobmV3Q29udGVudCwgXCJ0ZXh0L2h0bWxcIik7XG4gICAgICAgICAgICAgICAgLy8gaWYgaXQgaXMgYSBmdWxsIEhUTUwgZG9jdW1lbnQsIHJldHVybiB0aGUgZG9jdW1lbnQgaXRzZWxmIGFzIHRoZSBwYXJlbnQgY29udGFpbmVyXG4gICAgICAgICAgICAgICAgaWYgKGNvbnRlbnRXaXRoU3Znc1JlbW92ZWQubWF0Y2goLzxcXC9odG1sPi8pKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRlbnQuZ2VuZXJhdGVkQnlJZGlvbW9ycGggPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29udGVudDtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAvLyBvdGhlcndpc2UgcmV0dXJuIHRoZSBodG1sIGVsZW1lbnQgYXMgdGhlIHBhcmVudCBjb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGh0bWxFbGVtZW50ID0gY29udGVudC5maXJzdENoaWxkO1xuICAgICAgICAgICAgICAgICAgICBpZiAoaHRtbEVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGh0bWxFbGVtZW50LmdlbmVyYXRlZEJ5SWRpb21vcnBoID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBodG1sRWxlbWVudDtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBpZiBpdCBpcyBwYXJ0aWFsIEhUTUwsIHdyYXAgaXQgaW4gYSB0ZW1wbGF0ZSB0YWcgdG8gcHJvdmlkZSBhIHBhcmVudCBlbGVtZW50IGFuZCBhbHNvIHRvIGhlbHBcbiAgICAgICAgICAgICAgICAvLyBkZWFsIHdpdGggdG91Y2h5IHRhZ3MgbGlrZSB0ciwgdGJvZHksIGV0Yy5cbiAgICAgICAgICAgICAgICBsZXQgcmVzcG9uc2VEb2MgPSBwYXJzZXIucGFyc2VGcm9tU3RyaW5nKFwiPGJvZHk+PHRlbXBsYXRlPlwiICsgbmV3Q29udGVudCArIFwiPC90ZW1wbGF0ZT48L2JvZHk+XCIsIFwidGV4dC9odG1sXCIpO1xuICAgICAgICAgICAgICAgIGxldCBjb250ZW50ID0gcmVzcG9uc2VEb2MuYm9keS5xdWVyeVNlbGVjdG9yKCd0ZW1wbGF0ZScpLmNvbnRlbnQ7XG4gICAgICAgICAgICAgICAgY29udGVudC5nZW5lcmF0ZWRCeUlkaW9tb3JwaCA9IHRydWU7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRlbnRcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIG5vcm1hbGl6ZUNvbnRlbnQobmV3Q29udGVudCkge1xuICAgICAgICAgICAgaWYgKG5ld0NvbnRlbnQgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIC8vIG5vaW5zcGVjdGlvbiBVbm5lY2Vzc2FyeUxvY2FsVmFyaWFibGVKU1xuICAgICAgICAgICAgICAgIGNvbnN0IGR1bW15UGFyZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGR1bW15UGFyZW50O1xuICAgICAgICAgICAgfSBlbHNlIGlmIChuZXdDb250ZW50LmdlbmVyYXRlZEJ5SWRpb21vcnBoKSB7XG4gICAgICAgICAgICAgICAgLy8gdGhlIHRlbXBsYXRlIHRhZyBjcmVhdGVkIGJ5IGlkaW9tb3JwaCBwYXJzaW5nIGNhbiBzZXJ2ZSBhcyBhIGR1bW15IHBhcmVudFxuICAgICAgICAgICAgICAgIHJldHVybiBuZXdDb250ZW50O1xuICAgICAgICAgICAgfSBlbHNlIGlmIChuZXdDb250ZW50IGluc3RhbmNlb2YgTm9kZSkge1xuICAgICAgICAgICAgICAgIC8vIGEgc2luZ2xlIG5vZGUgaXMgYWRkZWQgYXMgYSBjaGlsZCB0byBhIGR1bW15IHBhcmVudFxuICAgICAgICAgICAgICAgIGNvbnN0IGR1bW15UGFyZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICAgICAgZHVtbXlQYXJlbnQuYXBwZW5kKG5ld0NvbnRlbnQpO1xuICAgICAgICAgICAgICAgIHJldHVybiBkdW1teVBhcmVudDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gYWxsIG5vZGVzIGluIHRoZSBhcnJheSBvciBIVE1MRWxlbWVudCBjb2xsZWN0aW9uIGFyZSBjb25zb2xpZGF0ZWQgdW5kZXJcbiAgICAgICAgICAgICAgICAvLyBhIHNpbmdsZSBkdW1teSBwYXJlbnQgZWxlbWVudFxuICAgICAgICAgICAgICAgIGNvbnN0IGR1bW15UGFyZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBlbHQgb2YgWy4uLm5ld0NvbnRlbnRdKSB7XG4gICAgICAgICAgICAgICAgICAgIGR1bW15UGFyZW50LmFwcGVuZChlbHQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gZHVtbXlQYXJlbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBpbnNlcnRTaWJsaW5ncyhwcmV2aW91c1NpYmxpbmcsIG1vcnBoZWROb2RlLCBuZXh0U2libGluZykge1xuICAgICAgICAgICAgbGV0IHN0YWNrID0gW107XG4gICAgICAgICAgICBsZXQgYWRkZWQgPSBbXTtcbiAgICAgICAgICAgIHdoaWxlIChwcmV2aW91c1NpYmxpbmcgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHN0YWNrLnB1c2gocHJldmlvdXNTaWJsaW5nKTtcbiAgICAgICAgICAgICAgICBwcmV2aW91c1NpYmxpbmcgPSBwcmV2aW91c1NpYmxpbmcucHJldmlvdXNTaWJsaW5nO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgd2hpbGUgKHN0YWNrLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBsZXQgbm9kZSA9IHN0YWNrLnBvcCgpO1xuICAgICAgICAgICAgICAgIGFkZGVkLnB1c2gobm9kZSk7IC8vIHB1c2ggYWRkZWQgcHJlY2VkaW5nIHNpYmxpbmdzIG9uIGluIG9yZGVyIGFuZCBpbnNlcnRcbiAgICAgICAgICAgICAgICBtb3JwaGVkTm9kZS5wYXJlbnRFbGVtZW50Lmluc2VydEJlZm9yZShub2RlLCBtb3JwaGVkTm9kZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBhZGRlZC5wdXNoKG1vcnBoZWROb2RlKTtcbiAgICAgICAgICAgIHdoaWxlIChuZXh0U2libGluZyAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgc3RhY2sucHVzaChuZXh0U2libGluZyk7XG4gICAgICAgICAgICAgICAgYWRkZWQucHVzaChuZXh0U2libGluZyk7IC8vIGhlcmUgd2UgYXJlIGdvaW5nIGluIG9yZGVyLCBzbyBwdXNoIG9uIGFzIHdlIHNjYW4sIHJhdGhlciB0aGFuIGFkZFxuICAgICAgICAgICAgICAgIG5leHRTaWJsaW5nID0gbmV4dFNpYmxpbmcubmV4dFNpYmxpbmc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB3aGlsZSAoc3RhY2subGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIG1vcnBoZWROb2RlLnBhcmVudEVsZW1lbnQuaW5zZXJ0QmVmb3JlKHN0YWNrLnBvcCgpLCBtb3JwaGVkTm9kZS5uZXh0U2libGluZyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gYWRkZWQ7XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBmaW5kQmVzdE5vZGVNYXRjaChuZXdDb250ZW50LCBvbGROb2RlLCBjdHgpIHtcbiAgICAgICAgICAgIGxldCBjdXJyZW50RWxlbWVudDtcbiAgICAgICAgICAgIGN1cnJlbnRFbGVtZW50ID0gbmV3Q29udGVudC5maXJzdENoaWxkO1xuICAgICAgICAgICAgbGV0IGJlc3RFbGVtZW50ID0gY3VycmVudEVsZW1lbnQ7XG4gICAgICAgICAgICBsZXQgc2NvcmUgPSAwO1xuICAgICAgICAgICAgd2hpbGUgKGN1cnJlbnRFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgbGV0IG5ld1Njb3JlID0gc2NvcmVFbGVtZW50KGN1cnJlbnRFbGVtZW50LCBvbGROb2RlLCBjdHgpO1xuICAgICAgICAgICAgICAgIGlmIChuZXdTY29yZSA+IHNjb3JlKSB7XG4gICAgICAgICAgICAgICAgICAgIGJlc3RFbGVtZW50ID0gY3VycmVudEVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgICAgIHNjb3JlID0gbmV3U2NvcmU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGN1cnJlbnRFbGVtZW50ID0gY3VycmVudEVsZW1lbnQubmV4dFNpYmxpbmc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gYmVzdEVsZW1lbnQ7XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBzY29yZUVsZW1lbnQobm9kZTEsIG5vZGUyLCBjdHgpIHtcbiAgICAgICAgICAgIGlmIChpc1NvZnRNYXRjaChub2RlMSwgbm9kZTIpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIC41ICsgZ2V0SWRJbnRlcnNlY3Rpb25Db3VudChjdHgsIG5vZGUxLCBub2RlMik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIHJlbW92ZU5vZGUodGVtcE5vZGUsIGN0eCkge1xuICAgICAgICAgICAgcmVtb3ZlSWRzRnJvbUNvbnNpZGVyYXRpb24oY3R4LCB0ZW1wTm9kZSk7XG4gICAgICAgICAgICBpZiAoY3R4LmNhbGxiYWNrcy5iZWZvcmVOb2RlUmVtb3ZlZCh0ZW1wTm9kZSkgPT09IGZhbHNlKSByZXR1cm47XG5cbiAgICAgICAgICAgIHRlbXBOb2RlLnJlbW92ZSgpO1xuICAgICAgICAgICAgY3R4LmNhbGxiYWNrcy5hZnRlck5vZGVSZW1vdmVkKHRlbXBOb2RlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgICAgICAgLy8gSUQgU2V0IEZ1bmN0aW9uc1xuICAgICAgICAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgICAgICAgZnVuY3Rpb24gaXNJZEluQ29uc2lkZXJhdGlvbihjdHgsIGlkKSB7XG4gICAgICAgICAgICByZXR1cm4gIWN0eC5kZWFkSWRzLmhhcyhpZCk7XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBpZElzV2l0aGluTm9kZShjdHgsIGlkLCB0YXJnZXROb2RlKSB7XG4gICAgICAgICAgICBsZXQgaWRTZXQgPSBjdHguaWRNYXAuZ2V0KHRhcmdldE5vZGUpIHx8IEVNUFRZX1NFVDtcbiAgICAgICAgICAgIHJldHVybiBpZFNldC5oYXMoaWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gcmVtb3ZlSWRzRnJvbUNvbnNpZGVyYXRpb24oY3R4LCBub2RlKSB7XG4gICAgICAgICAgICBsZXQgaWRTZXQgPSBjdHguaWRNYXAuZ2V0KG5vZGUpIHx8IEVNUFRZX1NFVDtcbiAgICAgICAgICAgIGZvciAoY29uc3QgaWQgb2YgaWRTZXQpIHtcbiAgICAgICAgICAgICAgICBjdHguZGVhZElkcy5hZGQoaWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gZ2V0SWRJbnRlcnNlY3Rpb25Db3VudChjdHgsIG5vZGUxLCBub2RlMikge1xuICAgICAgICAgICAgbGV0IHNvdXJjZVNldCA9IGN0eC5pZE1hcC5nZXQobm9kZTEpIHx8IEVNUFRZX1NFVDtcbiAgICAgICAgICAgIGxldCBtYXRjaENvdW50ID0gMDtcbiAgICAgICAgICAgIGZvciAoY29uc3QgaWQgb2Ygc291cmNlU2V0KSB7XG4gICAgICAgICAgICAgICAgLy8gYSBwb3RlbnRpYWwgbWF0Y2ggaXMgYW4gaWQgaW4gdGhlIHNvdXJjZSBhbmQgcG90ZW50aWFsSWRzU2V0LCBidXRcbiAgICAgICAgICAgICAgICAvLyB0aGF0IGhhcyBub3QgYWxyZWFkeSBiZWVuIG1lcmdlZCBpbnRvIHRoZSBET01cbiAgICAgICAgICAgICAgICBpZiAoaXNJZEluQ29uc2lkZXJhdGlvbihjdHgsIGlkKSAmJiBpZElzV2l0aGluTm9kZShjdHgsIGlkLCBub2RlMikpIHtcbiAgICAgICAgICAgICAgICAgICAgKyttYXRjaENvdW50O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBtYXRjaENvdW50O1xuICAgICAgICB9XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEEgYm90dG9tIHVwIGFsZ29yaXRobSB0aGF0IGZpbmRzIGFsbCBlbGVtZW50cyB3aXRoIGlkcyBpbnNpZGUgb2YgdGhlIG5vZGVcbiAgICAgICAgICogYXJndW1lbnQgYW5kIHBvcHVsYXRlcyBpZCBzZXRzIGZvciB0aG9zZSBub2RlcyBhbmQgYWxsIHRoZWlyIHBhcmVudHMsIGdlbmVyYXRpbmdcbiAgICAgICAgICogYSBzZXQgb2YgaWRzIGNvbnRhaW5lZCB3aXRoaW4gYWxsIG5vZGVzIGZvciB0aGUgZW50aXJlIGhpZXJhcmNoeSBpbiB0aGUgRE9NXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSBub2RlIHtFbGVtZW50fVxuICAgICAgICAgKiBAcGFyYW0ge01hcDxOb2RlLCBTZXQ8U3RyaW5nPj59IGlkTWFwXG4gICAgICAgICAqL1xuICAgICAgICBmdW5jdGlvbiBwb3B1bGF0ZUlkTWFwRm9yTm9kZShub2RlLCBpZE1hcCkge1xuICAgICAgICAgICAgbGV0IG5vZGVQYXJlbnQgPSBub2RlLnBhcmVudEVsZW1lbnQ7XG4gICAgICAgICAgICAvLyBmaW5kIGFsbCBlbGVtZW50cyB3aXRoIGFuIGlkIHByb3BlcnR5XG4gICAgICAgICAgICBsZXQgaWRFbGVtZW50cyA9IG5vZGUucXVlcnlTZWxlY3RvckFsbCgnW2lkXScpO1xuICAgICAgICAgICAgZm9yIChjb25zdCBlbHQgb2YgaWRFbGVtZW50cykge1xuICAgICAgICAgICAgICAgIGxldCBjdXJyZW50ID0gZWx0O1xuICAgICAgICAgICAgICAgIC8vIHdhbGsgdXAgdGhlIHBhcmVudCBoaWVyYXJjaHkgb2YgdGhhdCBlbGVtZW50LCBhZGRpbmcgdGhlIGlkXG4gICAgICAgICAgICAgICAgLy8gb2YgZWxlbWVudCB0byB0aGUgcGFyZW50J3MgaWQgc2V0XG4gICAgICAgICAgICAgICAgd2hpbGUgKGN1cnJlbnQgIT09IG5vZGVQYXJlbnQgJiYgY3VycmVudCAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBpZFNldCA9IGlkTWFwLmdldChjdXJyZW50KTtcbiAgICAgICAgICAgICAgICAgICAgLy8gaWYgdGhlIGlkIHNldCBkb2Vzbid0IGV4aXN0LCBjcmVhdGUgaXQgYW5kIGluc2VydCBpdCBpbiB0aGUgIG1hcFxuICAgICAgICAgICAgICAgICAgICBpZiAoaWRTZXQgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWRTZXQgPSBuZXcgU2V0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZE1hcC5zZXQoY3VycmVudCwgaWRTZXQpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlkU2V0LmFkZChlbHQuaWQpO1xuICAgICAgICAgICAgICAgICAgICBjdXJyZW50ID0gY3VycmVudC5wYXJlbnRFbGVtZW50O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBUaGlzIGZ1bmN0aW9uIGNvbXB1dGVzIGEgbWFwIG9mIG5vZGVzIHRvIGFsbCBpZHMgY29udGFpbmVkIHdpdGhpbiB0aGF0IG5vZGUgKGluY2x1c2l2ZSBvZiB0aGVcbiAgICAgICAgICogbm9kZSkuICBUaGlzIG1hcCBjYW4gYmUgdXNlZCB0byBhc2sgaWYgdHdvIG5vZGVzIGhhdmUgaW50ZXJzZWN0aW5nIHNldHMgb2YgaWRzLCB3aGljaCBhbGxvd3NcbiAgICAgICAgICogZm9yIGEgbG9vc2VyIGRlZmluaXRpb24gb2YgXCJtYXRjaGluZ1wiIHRoYW4gdHJhZGl0aW9uIGlkIG1hdGNoaW5nLCBhbmQgYWxsb3dzIGNoaWxkIG5vZGVzXG4gICAgICAgICAqIHRvIGNvbnRyaWJ1dGUgdG8gYSBwYXJlbnQgbm9kZXMgbWF0Y2hpbmcuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7RWxlbWVudH0gb2xkQ29udGVudCAgdGhlIG9sZCBjb250ZW50IHRoYXQgd2lsbCBiZSBtb3JwaGVkXG4gICAgICAgICAqIEBwYXJhbSB7RWxlbWVudH0gbmV3Q29udGVudCAgdGhlIG5ldyBjb250ZW50IHRvIG1vcnBoIHRvXG4gICAgICAgICAqIEByZXR1cm5zIHtNYXA8Tm9kZSwgU2V0PFN0cmluZz4+fSBhIG1hcCBvZiBub2RlcyB0byBpZCBzZXRzIGZvciB0aGVcbiAgICAgICAgICovXG4gICAgICAgIGZ1bmN0aW9uIGNyZWF0ZUlkTWFwKG9sZENvbnRlbnQsIG5ld0NvbnRlbnQpIHtcbiAgICAgICAgICAgIGxldCBpZE1hcCA9IG5ldyBNYXAoKTtcbiAgICAgICAgICAgIHBvcHVsYXRlSWRNYXBGb3JOb2RlKG9sZENvbnRlbnQsIGlkTWFwKTtcbiAgICAgICAgICAgIHBvcHVsYXRlSWRNYXBGb3JOb2RlKG5ld0NvbnRlbnQsIGlkTWFwKTtcbiAgICAgICAgICAgIHJldHVybiBpZE1hcDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgICAgICAgLy8gVGhpcyBpcyB3aGF0IGVuZHMgdXAgYmVjb21pbmcgdGhlIElkaW9tb3JwaCBnbG9iYWwgb2JqZWN0XG4gICAgICAgIC8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG1vcnBoLFxuICAgICAgICAgICAgZGVmYXVsdHNcbiAgICAgICAgfVxuICAgIH0pKCk7XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZUF0dHJpYnV0ZXNGb3JDb21wYXJpc29uKGVsZW1lbnQpIHtcbiAgICBjb25zdCBpc0ZpbGVJbnB1dCA9IGVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MSW5wdXRFbGVtZW50ICYmIGVsZW1lbnQudHlwZSA9PT0gJ2ZpbGUnO1xuICAgIGlmICghaXNGaWxlSW5wdXQpIHtcbiAgICAgICAgaWYgKCd2YWx1ZScgaW4gZWxlbWVudCkge1xuICAgICAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ3ZhbHVlJywgZWxlbWVudC52YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZWxlbWVudC5oYXNBdHRyaWJ1dGUoJ3ZhbHVlJykpIHtcbiAgICAgICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKCd2YWx1ZScsICcnKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBBcnJheS5mcm9tKGVsZW1lbnQuY2hpbGRyZW4pLmZvckVhY2goKGNoaWxkKSA9PiB7XG4gICAgICAgIG5vcm1hbGl6ZUF0dHJpYnV0ZXNGb3JDb21wYXJpc29uKGNoaWxkKTtcbiAgICB9KTtcbn1cblxuY29uc3Qgc3luY0F0dHJpYnV0ZXMgPSAoZnJvbUVsLCB0b0VsKSA9PiB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBmcm9tRWwuYXR0cmlidXRlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBhdHRyID0gZnJvbUVsLmF0dHJpYnV0ZXNbaV07XG4gICAgICAgIHRvRWwuc2V0QXR0cmlidXRlKGF0dHIubmFtZSwgYXR0ci52YWx1ZSk7XG4gICAgfVxufTtcbmZ1bmN0aW9uIGV4ZWN1dGVNb3JwaGRvbShyb290RnJvbUVsZW1lbnQsIHJvb3RUb0VsZW1lbnQsIG1vZGlmaWVkRmllbGRFbGVtZW50cywgZ2V0RWxlbWVudFZhbHVlLCBleHRlcm5hbE11dGF0aW9uVHJhY2tlcikge1xuICAgIGNvbnN0IG9yaWdpbmFsRWxlbWVudElkc1RvU3dhcEFmdGVyID0gW107XG4gICAgY29uc3Qgb3JpZ2luYWxFbGVtZW50c1RvUHJlc2VydmUgPSBuZXcgTWFwKCk7XG4gICAgY29uc3QgbWFya0VsZW1lbnRBc05lZWRpbmdQb3N0TW9ycGhTd2FwID0gKGlkLCByZXBsYWNlV2l0aENsb25lKSA9PiB7XG4gICAgICAgIGNvbnN0IG9sZEVsZW1lbnQgPSBvcmlnaW5hbEVsZW1lbnRzVG9QcmVzZXJ2ZS5nZXQoaWQpO1xuICAgICAgICBpZiAoIShvbGRFbGVtZW50IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE9yaWdpbmFsIGVsZW1lbnQgd2l0aCBpZCAke2lkfSBub3QgZm91bmRgKTtcbiAgICAgICAgfVxuICAgICAgICBvcmlnaW5hbEVsZW1lbnRJZHNUb1N3YXBBZnRlci5wdXNoKGlkKTtcbiAgICAgICAgaWYgKCFyZXBsYWNlV2l0aENsb25lKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjbG9uZWRPbGRFbGVtZW50ID0gY2xvbmVIVE1MRWxlbWVudChvbGRFbGVtZW50KTtcbiAgICAgICAgb2xkRWxlbWVudC5yZXBsYWNlV2l0aChjbG9uZWRPbGRFbGVtZW50KTtcbiAgICAgICAgcmV0dXJuIGNsb25lZE9sZEVsZW1lbnQ7XG4gICAgfTtcbiAgICByb290VG9FbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ1tkYXRhLWxpdmUtcHJlc2VydmVdJykuZm9yRWFjaCgobmV3RWxlbWVudCkgPT4ge1xuICAgICAgICBjb25zdCBpZCA9IG5ld0VsZW1lbnQuaWQ7XG4gICAgICAgIGlmICghaWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIGRhdGEtbGl2ZS1wcmVzZXJ2ZSBhdHRyaWJ1dGUgcmVxdWlyZXMgYW4gaWQgYXR0cmlidXRlIHRvIGJlIHNldCBvbiB0aGUgZWxlbWVudCcpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG9sZEVsZW1lbnQgPSByb290RnJvbUVsZW1lbnQucXVlcnlTZWxlY3RvcihgIyR7aWR9YCk7XG4gICAgICAgIGlmICghKG9sZEVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVGhlIGVsZW1lbnQgd2l0aCBpZCBcIiR7aWR9XCIgd2FzIG5vdCBmb3VuZCBpbiB0aGUgb3JpZ2luYWwgSFRNTGApO1xuICAgICAgICB9XG4gICAgICAgIG5ld0VsZW1lbnQucmVtb3ZlQXR0cmlidXRlKCdkYXRhLWxpdmUtcHJlc2VydmUnKTtcbiAgICAgICAgb3JpZ2luYWxFbGVtZW50c1RvUHJlc2VydmUuc2V0KGlkLCBvbGRFbGVtZW50KTtcbiAgICAgICAgc3luY0F0dHJpYnV0ZXMobmV3RWxlbWVudCwgb2xkRWxlbWVudCk7XG4gICAgfSk7XG4gICAgSWRpb21vcnBoLm1vcnBoKHJvb3RGcm9tRWxlbWVudCwgcm9vdFRvRWxlbWVudCwge1xuICAgICAgICBjYWxsYmFja3M6IHtcbiAgICAgICAgICAgIGJlZm9yZU5vZGVNb3JwaGVkOiAoZnJvbUVsLCB0b0VsKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCEoZnJvbUVsIGluc3RhbmNlb2YgRWxlbWVudCkgfHwgISh0b0VsIGluc3RhbmNlb2YgRWxlbWVudCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChmcm9tRWwgPT09IHJvb3RGcm9tRWxlbWVudCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGZyb21FbC5pZCAmJiBvcmlnaW5hbEVsZW1lbnRzVG9QcmVzZXJ2ZS5oYXMoZnJvbUVsLmlkKSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZnJvbUVsLmlkID09PSB0b0VsLmlkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2xvbmVkRnJvbUVsID0gbWFya0VsZW1lbnRBc05lZWRpbmdQb3N0TW9ycGhTd2FwKGZyb21FbC5pZCwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghY2xvbmVkRnJvbUVsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ21pc3NpbmcgY2xvbmUnKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBJZGlvbW9ycGgubW9ycGgoY2xvbmVkRnJvbUVsLCB0b0VsKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoZnJvbUVsIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQgJiYgdG9FbCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZnJvbUVsLl9feCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghd2luZG93LkFscGluZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVW5hYmxlIHRvIGFjY2VzcyBBbHBpbmUuanMgdGhvdWdoIHRoZSBnbG9iYWwgd2luZG93LkFscGluZSB2YXJpYWJsZS4gUGxlYXNlIG1ha2Ugc3VyZSBBbHBpbmUuanMgaXMgbG9hZGVkIGJlZm9yZSBTeW1mb255IFVYIExpdmVDb21wb25lbnQuJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHdpbmRvdy5BbHBpbmUubW9ycGggIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VuYWJsZSB0byBhY2Nlc3MgQWxwaW5lLmpzIG1vcnBoIGZ1bmN0aW9uLiBQbGVhc2UgbWFrZSBzdXJlIHRoZSBBbHBpbmUuanMgTW9ycGggcGx1Z2luIGlzIGluc3RhbGxlZCBhbmQgbG9hZGVkLCBzZWUgaHR0cHM6Ly9hbHBpbmVqcy5kZXYvcGx1Z2lucy9tb3JwaCBmb3IgbW9yZSBpbmZvcm1hdGlvbi4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5BbHBpbmUubW9ycGgoZnJvbUVsLl9feCwgdG9FbCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKGV4dGVybmFsTXV0YXRpb25UcmFja2VyLndhc0VsZW1lbnRBZGRlZChmcm9tRWwpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmcm9tRWwuaW5zZXJ0QWRqYWNlbnRFbGVtZW50KCdhZnRlcmVuZCcsIHRvRWwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChtb2RpZmllZEZpZWxkRWxlbWVudHMuaW5jbHVkZXMoZnJvbUVsKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0VmFsdWVPbkVsZW1lbnQodG9FbCwgZ2V0RWxlbWVudFZhbHVlKGZyb21FbCkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChmcm9tRWwgPT09IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIGZyb21FbCAhPT0gZG9jdW1lbnQuYm9keSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgbnVsbCAhPT0gZ2V0TW9kZWxEaXJlY3RpdmVGcm9tRWxlbWVudChmcm9tRWwsIGZhbHNlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0VmFsdWVPbkVsZW1lbnQodG9FbCwgZ2V0RWxlbWVudFZhbHVlKGZyb21FbCkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRDaGFuZ2VzID0gZXh0ZXJuYWxNdXRhdGlvblRyYWNrZXIuZ2V0Q2hhbmdlZEVsZW1lbnQoZnJvbUVsKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVsZW1lbnRDaGFuZ2VzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50Q2hhbmdlcy5hcHBseVRvRWxlbWVudCh0b0VsKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoZnJvbUVsLm5vZGVOYW1lLnRvVXBwZXJDYXNlKCkgIT09ICdPUFRJT04nICYmIGZyb21FbC5pc0VxdWFsTm9kZSh0b0VsKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgbm9ybWFsaXplZEZyb21FbCA9IGNsb25lSFRNTEVsZW1lbnQoZnJvbUVsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5vcm1hbGl6ZUF0dHJpYnV0ZXNGb3JDb21wYXJpc29uKG5vcm1hbGl6ZWRGcm9tRWwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgbm9ybWFsaXplZFRvRWwgPSBjbG9uZUhUTUxFbGVtZW50KHRvRWwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgbm9ybWFsaXplQXR0cmlidXRlc0ZvckNvbXBhcmlzb24obm9ybWFsaXplZFRvRWwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5vcm1hbGl6ZWRGcm9tRWwuaXNFcXVhbE5vZGUobm9ybWFsaXplZFRvRWwpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChmcm9tRWwuaGFzQXR0cmlidXRlKCdkYXRhLXNraXAtbW9ycGgnKSB8fCAoZnJvbUVsLmlkICYmIGZyb21FbC5pZCAhPT0gdG9FbC5pZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgZnJvbUVsLmlubmVySFRNTCA9IHRvRWwuaW5uZXJIVE1MO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGZyb21FbC5wYXJlbnRFbGVtZW50Py5oYXNBdHRyaWJ1dGUoJ2RhdGEtc2tpcC1tb3JwaCcpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuICFmcm9tRWwuaGFzQXR0cmlidXRlKCdkYXRhLWxpdmUtaWdub3JlJyk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYmVmb3JlTm9kZVJlbW92ZWQobm9kZSkge1xuICAgICAgICAgICAgICAgIGlmICghKG5vZGUgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChub2RlLmlkICYmIG9yaWdpbmFsRWxlbWVudHNUb1ByZXNlcnZlLmhhcyhub2RlLmlkKSkge1xuICAgICAgICAgICAgICAgICAgICBtYXJrRWxlbWVudEFzTmVlZGluZ1Bvc3RNb3JwaFN3YXAobm9kZS5pZCwgZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGV4dGVybmFsTXV0YXRpb25UcmFja2VyLndhc0VsZW1lbnRBZGRlZChub2RlKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiAhbm9kZS5oYXNBdHRyaWJ1dGUoJ2RhdGEtbGl2ZS1pZ25vcmUnKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSk7XG4gICAgb3JpZ2luYWxFbGVtZW50SWRzVG9Td2FwQWZ0ZXIuZm9yRWFjaCgoaWQpID0+IHtcbiAgICAgICAgY29uc3QgbmV3RWxlbWVudCA9IHJvb3RGcm9tRWxlbWVudC5xdWVyeVNlbGVjdG9yKGAjJHtpZH1gKTtcbiAgICAgICAgY29uc3Qgb3JpZ2luYWxFbGVtZW50ID0gb3JpZ2luYWxFbGVtZW50c1RvUHJlc2VydmUuZ2V0KGlkKTtcbiAgICAgICAgaWYgKCEobmV3RWxlbWVudCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSB8fCAhKG9yaWdpbmFsRWxlbWVudCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdNaXNzaW5nIGVsZW1lbnRzLicpO1xuICAgICAgICB9XG4gICAgICAgIG5ld0VsZW1lbnQucmVwbGFjZVdpdGgob3JpZ2luYWxFbGVtZW50KTtcbiAgICB9KTtcbn1cblxuY2xhc3MgVW5zeW5jZWRJbnB1dHNUcmFja2VyIHtcbiAgICBjb25zdHJ1Y3Rvcihjb21wb25lbnQsIG1vZGVsRWxlbWVudFJlc29sdmVyKSB7XG4gICAgICAgIHRoaXMuZWxlbWVudEV2ZW50TGlzdGVuZXJzID0gW1xuICAgICAgICAgICAgeyBldmVudDogJ2lucHV0JywgY2FsbGJhY2s6IChldmVudCkgPT4gdGhpcy5oYW5kbGVJbnB1dEV2ZW50KGV2ZW50KSB9LFxuICAgICAgICBdO1xuICAgICAgICB0aGlzLmNvbXBvbmVudCA9IGNvbXBvbmVudDtcbiAgICAgICAgdGhpcy5tb2RlbEVsZW1lbnRSZXNvbHZlciA9IG1vZGVsRWxlbWVudFJlc29sdmVyO1xuICAgICAgICB0aGlzLnVuc3luY2VkSW5wdXRzID0gbmV3IFVuc3luY2VkSW5wdXRDb250YWluZXIoKTtcbiAgICB9XG4gICAgYWN0aXZhdGUoKSB7XG4gICAgICAgIHRoaXMuZWxlbWVudEV2ZW50TGlzdGVuZXJzLmZvckVhY2goKHsgZXZlbnQsIGNhbGxiYWNrIH0pID0+IHtcbiAgICAgICAgICAgIHRoaXMuY29tcG9uZW50LmVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihldmVudCwgY2FsbGJhY2spO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgZGVhY3RpdmF0ZSgpIHtcbiAgICAgICAgdGhpcy5lbGVtZW50RXZlbnRMaXN0ZW5lcnMuZm9yRWFjaCgoeyBldmVudCwgY2FsbGJhY2sgfSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5jb21wb25lbnQuZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50LCBjYWxsYmFjayk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBtYXJrTW9kZWxBc1N5bmNlZChtb2RlbE5hbWUpIHtcbiAgICAgICAgdGhpcy51bnN5bmNlZElucHV0cy5tYXJrTW9kZWxBc1N5bmNlZChtb2RlbE5hbWUpO1xuICAgIH1cbiAgICBoYW5kbGVJbnB1dEV2ZW50KGV2ZW50KSB7XG4gICAgICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldDtcbiAgICAgICAgaWYgKCF0YXJnZXQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnVwZGF0ZU1vZGVsRnJvbUVsZW1lbnQodGFyZ2V0KTtcbiAgICB9XG4gICAgdXBkYXRlTW9kZWxGcm9tRWxlbWVudChlbGVtZW50KSB7XG4gICAgICAgIGlmICghZWxlbWVudEJlbG9uZ3NUb1RoaXNDb21wb25lbnQoZWxlbWVudCwgdGhpcy5jb21wb25lbnQpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCEoZWxlbWVudCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDb3VsZCBub3QgdXBkYXRlIG1vZGVsIGZvciBub24gSFRNTEVsZW1lbnQnKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBtb2RlbE5hbWUgPSB0aGlzLm1vZGVsRWxlbWVudFJlc29sdmVyLmdldE1vZGVsTmFtZShlbGVtZW50KTtcbiAgICAgICAgdGhpcy51bnN5bmNlZElucHV0cy5hZGQoZWxlbWVudCwgbW9kZWxOYW1lKTtcbiAgICB9XG4gICAgZ2V0VW5zeW5jZWRJbnB1dHMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnVuc3luY2VkSW5wdXRzLmFsbFVuc3luY2VkSW5wdXRzKCk7XG4gICAgfVxuICAgIGdldFVuc3luY2VkTW9kZWxzKCkge1xuICAgICAgICByZXR1cm4gQXJyYXkuZnJvbSh0aGlzLnVuc3luY2VkSW5wdXRzLmdldFVuc3luY2VkTW9kZWxOYW1lcygpKTtcbiAgICB9XG4gICAgcmVzZXRVbnN5bmNlZEZpZWxkcygpIHtcbiAgICAgICAgdGhpcy51bnN5bmNlZElucHV0cy5yZXNldFVuc3luY2VkRmllbGRzKCk7XG4gICAgfVxufVxuY2xhc3MgVW5zeW5jZWRJbnB1dENvbnRhaW5lciB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMudW5zeW5jZWROb25Nb2RlbEZpZWxkcyA9IFtdO1xuICAgICAgICB0aGlzLnVuc3luY2VkTW9kZWxOYW1lcyA9IFtdO1xuICAgICAgICB0aGlzLnVuc3luY2VkTW9kZWxGaWVsZHMgPSBuZXcgTWFwKCk7XG4gICAgfVxuICAgIGFkZChlbGVtZW50LCBtb2RlbE5hbWUgPSBudWxsKSB7XG4gICAgICAgIGlmIChtb2RlbE5hbWUpIHtcbiAgICAgICAgICAgIHRoaXMudW5zeW5jZWRNb2RlbEZpZWxkcy5zZXQobW9kZWxOYW1lLCBlbGVtZW50KTtcbiAgICAgICAgICAgIGlmICghdGhpcy51bnN5bmNlZE1vZGVsTmFtZXMuaW5jbHVkZXMobW9kZWxOYW1lKSkge1xuICAgICAgICAgICAgICAgIHRoaXMudW5zeW5jZWRNb2RlbE5hbWVzLnB1c2gobW9kZWxOYW1lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnVuc3luY2VkTm9uTW9kZWxGaWVsZHMucHVzaChlbGVtZW50KTtcbiAgICB9XG4gICAgcmVzZXRVbnN5bmNlZEZpZWxkcygpIHtcbiAgICAgICAgdGhpcy51bnN5bmNlZE1vZGVsRmllbGRzLmZvckVhY2goKHZhbHVlLCBrZXkpID0+IHtcbiAgICAgICAgICAgIGlmICghdGhpcy51bnN5bmNlZE1vZGVsTmFtZXMuaW5jbHVkZXMoa2V5KSkge1xuICAgICAgICAgICAgICAgIHRoaXMudW5zeW5jZWRNb2RlbEZpZWxkcy5kZWxldGUoa2V5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGFsbFVuc3luY2VkSW5wdXRzKCkge1xuICAgICAgICByZXR1cm4gWy4uLnRoaXMudW5zeW5jZWROb25Nb2RlbEZpZWxkcywgLi4udGhpcy51bnN5bmNlZE1vZGVsRmllbGRzLnZhbHVlcygpXTtcbiAgICB9XG4gICAgbWFya01vZGVsQXNTeW5jZWQobW9kZWxOYW1lKSB7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy51bnN5bmNlZE1vZGVsTmFtZXMuaW5kZXhPZihtb2RlbE5hbWUpO1xuICAgICAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICAgICAgICB0aGlzLnVuc3luY2VkTW9kZWxOYW1lcy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGdldFVuc3luY2VkTW9kZWxOYW1lcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudW5zeW5jZWRNb2RlbE5hbWVzO1xuICAgIH1cbn1cblxuY2xhc3MgSG9va01hbmFnZXIge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLmhvb2tzID0gbmV3IE1hcCgpO1xuICAgIH1cbiAgICByZWdpc3Rlcihob29rTmFtZSwgY2FsbGJhY2spIHtcbiAgICAgICAgY29uc3QgaG9va3MgPSB0aGlzLmhvb2tzLmdldChob29rTmFtZSkgfHwgW107XG4gICAgICAgIGhvb2tzLnB1c2goY2FsbGJhY2spO1xuICAgICAgICB0aGlzLmhvb2tzLnNldChob29rTmFtZSwgaG9va3MpO1xuICAgIH1cbiAgICB1bnJlZ2lzdGVyKGhvb2tOYW1lLCBjYWxsYmFjaykge1xuICAgICAgICBjb25zdCBob29rcyA9IHRoaXMuaG9va3MuZ2V0KGhvb2tOYW1lKSB8fCBbXTtcbiAgICAgICAgY29uc3QgaW5kZXggPSBob29rcy5pbmRleE9mKGNhbGxiYWNrKTtcbiAgICAgICAgaWYgKGluZGV4ID09PSAtMSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGhvb2tzLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgIHRoaXMuaG9va3Muc2V0KGhvb2tOYW1lLCBob29rcyk7XG4gICAgfVxuICAgIHRyaWdnZXJIb29rKGhvb2tOYW1lLCAuLi5hcmdzKSB7XG4gICAgICAgIGNvbnN0IGhvb2tzID0gdGhpcy5ob29rcy5nZXQoaG9va05hbWUpIHx8IFtdO1xuICAgICAgICBob29rcy5mb3JFYWNoKChjYWxsYmFjaykgPT4gY2FsbGJhY2soLi4uYXJncykpO1xuICAgIH1cbn1cblxuY2xhc3MgQmFja2VuZFJlc3BvbnNlIHtcbiAgICBjb25zdHJ1Y3RvcihyZXNwb25zZSkge1xuICAgICAgICB0aGlzLnJlc3BvbnNlID0gcmVzcG9uc2U7XG4gICAgfVxuICAgIGFzeW5jIGdldEJvZHkoKSB7XG4gICAgICAgIGlmICghdGhpcy5ib2R5KSB7XG4gICAgICAgICAgICB0aGlzLmJvZHkgPSBhd2FpdCB0aGlzLnJlc3BvbnNlLnRleHQoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5ib2R5O1xuICAgIH1cbn1cblxuY2xhc3MgQ2hhbmdpbmdJdGVtc1RyYWNrZXIge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLmNoYW5nZWRJdGVtcyA9IG5ldyBNYXAoKTtcbiAgICAgICAgdGhpcy5yZW1vdmVkSXRlbXMgPSBuZXcgTWFwKCk7XG4gICAgfVxuICAgIHNldEl0ZW0oaXRlbU5hbWUsIG5ld1ZhbHVlLCBwcmV2aW91c1ZhbHVlKSB7XG4gICAgICAgIGlmICh0aGlzLnJlbW92ZWRJdGVtcy5oYXMoaXRlbU5hbWUpKSB7XG4gICAgICAgICAgICBjb25zdCByZW1vdmVkUmVjb3JkID0gdGhpcy5yZW1vdmVkSXRlbXMuZ2V0KGl0ZW1OYW1lKTtcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlZEl0ZW1zLmRlbGV0ZShpdGVtTmFtZSk7XG4gICAgICAgICAgICBpZiAocmVtb3ZlZFJlY29yZC5vcmlnaW5hbCA9PT0gbmV3VmFsdWUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuY2hhbmdlZEl0ZW1zLmhhcyhpdGVtTmFtZSkpIHtcbiAgICAgICAgICAgIGNvbnN0IG9yaWdpbmFsUmVjb3JkID0gdGhpcy5jaGFuZ2VkSXRlbXMuZ2V0KGl0ZW1OYW1lKTtcbiAgICAgICAgICAgIGlmIChvcmlnaW5hbFJlY29yZC5vcmlnaW5hbCA9PT0gbmV3VmFsdWUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNoYW5nZWRJdGVtcy5kZWxldGUoaXRlbU5hbWUpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuY2hhbmdlZEl0ZW1zLnNldChpdGVtTmFtZSwgeyBvcmlnaW5hbDogb3JpZ2luYWxSZWNvcmQub3JpZ2luYWwsIG5ldzogbmV3VmFsdWUgfSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jaGFuZ2VkSXRlbXMuc2V0KGl0ZW1OYW1lLCB7IG9yaWdpbmFsOiBwcmV2aW91c1ZhbHVlLCBuZXc6IG5ld1ZhbHVlIH0pO1xuICAgIH1cbiAgICByZW1vdmVJdGVtKGl0ZW1OYW1lLCBjdXJyZW50VmFsdWUpIHtcbiAgICAgICAgbGV0IHRydWVPcmlnaW5hbFZhbHVlID0gY3VycmVudFZhbHVlO1xuICAgICAgICBpZiAodGhpcy5jaGFuZ2VkSXRlbXMuaGFzKGl0ZW1OYW1lKSkge1xuICAgICAgICAgICAgY29uc3Qgb3JpZ2luYWxSZWNvcmQgPSB0aGlzLmNoYW5nZWRJdGVtcy5nZXQoaXRlbU5hbWUpO1xuICAgICAgICAgICAgdHJ1ZU9yaWdpbmFsVmFsdWUgPSBvcmlnaW5hbFJlY29yZC5vcmlnaW5hbDtcbiAgICAgICAgICAgIHRoaXMuY2hhbmdlZEl0ZW1zLmRlbGV0ZShpdGVtTmFtZSk7XG4gICAgICAgICAgICBpZiAodHJ1ZU9yaWdpbmFsVmFsdWUgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLnJlbW92ZWRJdGVtcy5oYXMoaXRlbU5hbWUpKSB7XG4gICAgICAgICAgICB0aGlzLnJlbW92ZWRJdGVtcy5zZXQoaXRlbU5hbWUsIHsgb3JpZ2luYWw6IHRydWVPcmlnaW5hbFZhbHVlIH0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIGdldENoYW5nZWRJdGVtcygpIHtcbiAgICAgICAgcmV0dXJuIEFycmF5LmZyb20odGhpcy5jaGFuZ2VkSXRlbXMsIChbbmFtZSwgeyBuZXc6IHZhbHVlIH1dKSA9PiAoeyBuYW1lLCB2YWx1ZSB9KSk7XG4gICAgfVxuICAgIGdldFJlbW92ZWRJdGVtcygpIHtcbiAgICAgICAgcmV0dXJuIEFycmF5LmZyb20odGhpcy5yZW1vdmVkSXRlbXMua2V5cygpKTtcbiAgICB9XG4gICAgaXNFbXB0eSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2hhbmdlZEl0ZW1zLnNpemUgPT09IDAgJiYgdGhpcy5yZW1vdmVkSXRlbXMuc2l6ZSA9PT0gMDtcbiAgICB9XG59XG5cbmNsYXNzIEVsZW1lbnRDaGFuZ2VzIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5hZGRlZENsYXNzZXMgPSBuZXcgU2V0KCk7XG4gICAgICAgIHRoaXMucmVtb3ZlZENsYXNzZXMgPSBuZXcgU2V0KCk7XG4gICAgICAgIHRoaXMuc3R5bGVDaGFuZ2VzID0gbmV3IENoYW5naW5nSXRlbXNUcmFja2VyKCk7XG4gICAgICAgIHRoaXMuYXR0cmlidXRlQ2hhbmdlcyA9IG5ldyBDaGFuZ2luZ0l0ZW1zVHJhY2tlcigpO1xuICAgIH1cbiAgICBhZGRDbGFzcyhjbGFzc05hbWUpIHtcbiAgICAgICAgaWYgKCF0aGlzLnJlbW92ZWRDbGFzc2VzLmRlbGV0ZShjbGFzc05hbWUpKSB7XG4gICAgICAgICAgICB0aGlzLmFkZGVkQ2xhc3Nlcy5hZGQoY2xhc3NOYW1lKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZW1vdmVDbGFzcyhjbGFzc05hbWUpIHtcbiAgICAgICAgaWYgKCF0aGlzLmFkZGVkQ2xhc3Nlcy5kZWxldGUoY2xhc3NOYW1lKSkge1xuICAgICAgICAgICAgdGhpcy5yZW1vdmVkQ2xhc3Nlcy5hZGQoY2xhc3NOYW1lKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBhZGRTdHlsZShzdHlsZU5hbWUsIG5ld1ZhbHVlLCBvcmlnaW5hbFZhbHVlKSB7XG4gICAgICAgIHRoaXMuc3R5bGVDaGFuZ2VzLnNldEl0ZW0oc3R5bGVOYW1lLCBuZXdWYWx1ZSwgb3JpZ2luYWxWYWx1ZSk7XG4gICAgfVxuICAgIHJlbW92ZVN0eWxlKHN0eWxlTmFtZSwgb3JpZ2luYWxWYWx1ZSkge1xuICAgICAgICB0aGlzLnN0eWxlQ2hhbmdlcy5yZW1vdmVJdGVtKHN0eWxlTmFtZSwgb3JpZ2luYWxWYWx1ZSk7XG4gICAgfVxuICAgIGFkZEF0dHJpYnV0ZShhdHRyaWJ1dGVOYW1lLCBuZXdWYWx1ZSwgb3JpZ2luYWxWYWx1ZSkge1xuICAgICAgICB0aGlzLmF0dHJpYnV0ZUNoYW5nZXMuc2V0SXRlbShhdHRyaWJ1dGVOYW1lLCBuZXdWYWx1ZSwgb3JpZ2luYWxWYWx1ZSk7XG4gICAgfVxuICAgIHJlbW92ZUF0dHJpYnV0ZShhdHRyaWJ1dGVOYW1lLCBvcmlnaW5hbFZhbHVlKSB7XG4gICAgICAgIHRoaXMuYXR0cmlidXRlQ2hhbmdlcy5yZW1vdmVJdGVtKGF0dHJpYnV0ZU5hbWUsIG9yaWdpbmFsVmFsdWUpO1xuICAgIH1cbiAgICBnZXRBZGRlZENsYXNzZXMoKSB7XG4gICAgICAgIHJldHVybiBbLi4udGhpcy5hZGRlZENsYXNzZXNdO1xuICAgIH1cbiAgICBnZXRSZW1vdmVkQ2xhc3NlcygpIHtcbiAgICAgICAgcmV0dXJuIFsuLi50aGlzLnJlbW92ZWRDbGFzc2VzXTtcbiAgICB9XG4gICAgZ2V0Q2hhbmdlZFN0eWxlcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3R5bGVDaGFuZ2VzLmdldENoYW5nZWRJdGVtcygpO1xuICAgIH1cbiAgICBnZXRSZW1vdmVkU3R5bGVzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zdHlsZUNoYW5nZXMuZ2V0UmVtb3ZlZEl0ZW1zKCk7XG4gICAgfVxuICAgIGdldENoYW5nZWRBdHRyaWJ1dGVzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5hdHRyaWJ1dGVDaGFuZ2VzLmdldENoYW5nZWRJdGVtcygpO1xuICAgIH1cbiAgICBnZXRSZW1vdmVkQXR0cmlidXRlcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYXR0cmlidXRlQ2hhbmdlcy5nZXRSZW1vdmVkSXRlbXMoKTtcbiAgICB9XG4gICAgYXBwbHlUb0VsZW1lbnQoZWxlbWVudCkge1xuICAgICAgICBlbGVtZW50LmNsYXNzTGlzdC5hZGQoLi4udGhpcy5hZGRlZENsYXNzZXMpO1xuICAgICAgICBlbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoLi4udGhpcy5yZW1vdmVkQ2xhc3Nlcyk7XG4gICAgICAgIHRoaXMuc3R5bGVDaGFuZ2VzLmdldENoYW5nZWRJdGVtcygpLmZvckVhY2goKGNoYW5nZSkgPT4ge1xuICAgICAgICAgICAgZWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eShjaGFuZ2UubmFtZSwgY2hhbmdlLnZhbHVlKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuc3R5bGVDaGFuZ2VzLmdldFJlbW92ZWRJdGVtcygpLmZvckVhY2goKHN0eWxlTmFtZSkgPT4ge1xuICAgICAgICAgICAgZWxlbWVudC5zdHlsZS5yZW1vdmVQcm9wZXJ0eShzdHlsZU5hbWUpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5hdHRyaWJ1dGVDaGFuZ2VzLmdldENoYW5nZWRJdGVtcygpLmZvckVhY2goKGNoYW5nZSkgPT4ge1xuICAgICAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoY2hhbmdlLm5hbWUsIGNoYW5nZS52YWx1ZSk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmF0dHJpYnV0ZUNoYW5nZXMuZ2V0UmVtb3ZlZEl0ZW1zKCkuZm9yRWFjaCgoYXR0cmlidXRlTmFtZSkgPT4ge1xuICAgICAgICAgICAgZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoYXR0cmlidXRlTmFtZSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBpc0VtcHR5KCkge1xuICAgICAgICByZXR1cm4gKHRoaXMuYWRkZWRDbGFzc2VzLnNpemUgPT09IDAgJiZcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlZENsYXNzZXMuc2l6ZSA9PT0gMCAmJlxuICAgICAgICAgICAgdGhpcy5zdHlsZUNoYW5nZXMuaXNFbXB0eSgpICYmXG4gICAgICAgICAgICB0aGlzLmF0dHJpYnV0ZUNoYW5nZXMuaXNFbXB0eSgpKTtcbiAgICB9XG59XG5cbmNsYXNzIEV4dGVybmFsTXV0YXRpb25UcmFja2VyIHtcbiAgICBjb25zdHJ1Y3RvcihlbGVtZW50LCBzaG91bGRUcmFja0NoYW5nZUNhbGxiYWNrKSB7XG4gICAgICAgIHRoaXMuY2hhbmdlZEVsZW1lbnRzID0gbmV3IFdlYWtNYXAoKTtcbiAgICAgICAgdGhpcy5jaGFuZ2VkRWxlbWVudHNDb3VudCA9IDA7XG4gICAgICAgIHRoaXMuYWRkZWRFbGVtZW50cyA9IFtdO1xuICAgICAgICB0aGlzLnJlbW92ZWRFbGVtZW50cyA9IFtdO1xuICAgICAgICB0aGlzLmlzU3RhcnRlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLmVsZW1lbnQgPSBlbGVtZW50O1xuICAgICAgICB0aGlzLnNob3VsZFRyYWNrQ2hhbmdlQ2FsbGJhY2sgPSBzaG91bGRUcmFja0NoYW5nZUNhbGxiYWNrO1xuICAgICAgICB0aGlzLm11dGF0aW9uT2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcih0aGlzLm9uTXV0YXRpb25zLmJpbmQodGhpcykpO1xuICAgIH1cbiAgICBzdGFydCgpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNTdGFydGVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5tdXRhdGlvbk9ic2VydmVyLm9ic2VydmUodGhpcy5lbGVtZW50LCB7XG4gICAgICAgICAgICBjaGlsZExpc3Q6IHRydWUsXG4gICAgICAgICAgICBzdWJ0cmVlOiB0cnVlLFxuICAgICAgICAgICAgYXR0cmlidXRlczogdHJ1ZSxcbiAgICAgICAgICAgIGF0dHJpYnV0ZU9sZFZhbHVlOiB0cnVlLFxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5pc1N0YXJ0ZWQgPSB0cnVlO1xuICAgIH1cbiAgICBzdG9wKCkge1xuICAgICAgICBpZiAodGhpcy5pc1N0YXJ0ZWQpIHtcbiAgICAgICAgICAgIHRoaXMubXV0YXRpb25PYnNlcnZlci5kaXNjb25uZWN0KCk7XG4gICAgICAgICAgICB0aGlzLmlzU3RhcnRlZCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuICAgIGdldENoYW5nZWRFbGVtZW50KGVsZW1lbnQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2hhbmdlZEVsZW1lbnRzLmhhcyhlbGVtZW50KSA/IHRoaXMuY2hhbmdlZEVsZW1lbnRzLmdldChlbGVtZW50KSA6IG51bGw7XG4gICAgfVxuICAgIGdldEFkZGVkRWxlbWVudHMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmFkZGVkRWxlbWVudHM7XG4gICAgfVxuICAgIHdhc0VsZW1lbnRBZGRlZChlbGVtZW50KSB7XG4gICAgICAgIHJldHVybiB0aGlzLmFkZGVkRWxlbWVudHMuaW5jbHVkZXMoZWxlbWVudCk7XG4gICAgfVxuICAgIGhhbmRsZVBlbmRpbmdDaGFuZ2VzKCkge1xuICAgICAgICB0aGlzLm9uTXV0YXRpb25zKHRoaXMubXV0YXRpb25PYnNlcnZlci50YWtlUmVjb3JkcygpKTtcbiAgICB9XG4gICAgb25NdXRhdGlvbnMobXV0YXRpb25zKSB7XG4gICAgICAgIGNvbnN0IGhhbmRsZWRBdHRyaWJ1dGVNdXRhdGlvbnMgPSBuZXcgV2Vha01hcCgpO1xuICAgICAgICBmb3IgKGNvbnN0IG11dGF0aW9uIG9mIG11dGF0aW9ucykge1xuICAgICAgICAgICAgY29uc3QgZWxlbWVudCA9IG11dGF0aW9uLnRhcmdldDtcbiAgICAgICAgICAgIGlmICghdGhpcy5zaG91bGRUcmFja0NoYW5nZUNhbGxiYWNrKGVsZW1lbnQpKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5pc0VsZW1lbnRBZGRlZEJ5VHJhbnNsYXRpb24oZWxlbWVudCkpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxldCBpc0NoYW5nZUluQWRkZWRFbGVtZW50ID0gZmFsc2U7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGFkZGVkRWxlbWVudCBvZiB0aGlzLmFkZGVkRWxlbWVudHMpIHtcbiAgICAgICAgICAgICAgICBpZiAoYWRkZWRFbGVtZW50LmNvbnRhaW5zKGVsZW1lbnQpKSB7XG4gICAgICAgICAgICAgICAgICAgIGlzQ2hhbmdlSW5BZGRlZEVsZW1lbnQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXNDaGFuZ2VJbkFkZGVkRWxlbWVudCkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc3dpdGNoIChtdXRhdGlvbi50eXBlKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAnY2hpbGRMaXN0JzpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVDaGlsZExpc3RNdXRhdGlvbihtdXRhdGlvbik7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgJ2F0dHJpYnV0ZXMnOlxuICAgICAgICAgICAgICAgICAgICBpZiAoIWhhbmRsZWRBdHRyaWJ1dGVNdXRhdGlvbnMuaGFzKGVsZW1lbnQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVkQXR0cmlidXRlTXV0YXRpb25zLnNldChlbGVtZW50LCBbXSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKCFoYW5kbGVkQXR0cmlidXRlTXV0YXRpb25zLmdldChlbGVtZW50KS5pbmNsdWRlcyhtdXRhdGlvbi5hdHRyaWJ1dGVOYW1lKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVBdHRyaWJ1dGVNdXRhdGlvbihtdXRhdGlvbik7XG4gICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVkQXR0cmlidXRlTXV0YXRpb25zLnNldChlbGVtZW50LCBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uaGFuZGxlZEF0dHJpYnV0ZU11dGF0aW9ucy5nZXQoZWxlbWVudCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbXV0YXRpb24uYXR0cmlidXRlTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIF0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGhhbmRsZUNoaWxkTGlzdE11dGF0aW9uKG11dGF0aW9uKSB7XG4gICAgICAgIG11dGF0aW9uLmFkZGVkTm9kZXMuZm9yRWFjaCgobm9kZSkgPT4ge1xuICAgICAgICAgICAgaWYgKCEobm9kZSBpbnN0YW5jZW9mIEVsZW1lbnQpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMucmVtb3ZlZEVsZW1lbnRzLmluY2x1ZGVzKG5vZGUpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVkRWxlbWVudHMuc3BsaWNlKHRoaXMucmVtb3ZlZEVsZW1lbnRzLmluZGV4T2Yobm9kZSksIDEpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLmlzRWxlbWVudEFkZGVkQnlUcmFuc2xhdGlvbihub2RlKSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuYWRkZWRFbGVtZW50cy5wdXNoKG5vZGUpO1xuICAgICAgICB9KTtcbiAgICAgICAgbXV0YXRpb24ucmVtb3ZlZE5vZGVzLmZvckVhY2goKG5vZGUpID0+IHtcbiAgICAgICAgICAgIGlmICghKG5vZGUgaW5zdGFuY2VvZiBFbGVtZW50KSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLmFkZGVkRWxlbWVudHMuaW5jbHVkZXMobm9kZSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFkZGVkRWxlbWVudHMuc3BsaWNlKHRoaXMuYWRkZWRFbGVtZW50cy5pbmRleE9mKG5vZGUpLCAxKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnJlbW92ZWRFbGVtZW50cy5wdXNoKG5vZGUpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgaGFuZGxlQXR0cmlidXRlTXV0YXRpb24obXV0YXRpb24pIHtcbiAgICAgICAgY29uc3QgZWxlbWVudCA9IG11dGF0aW9uLnRhcmdldDtcbiAgICAgICAgaWYgKCF0aGlzLmNoYW5nZWRFbGVtZW50cy5oYXMoZWxlbWVudCkpIHtcbiAgICAgICAgICAgIHRoaXMuY2hhbmdlZEVsZW1lbnRzLnNldChlbGVtZW50LCBuZXcgRWxlbWVudENoYW5nZXMoKSk7XG4gICAgICAgICAgICB0aGlzLmNoYW5nZWRFbGVtZW50c0NvdW50Kys7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY2hhbmdlZEVsZW1lbnQgPSB0aGlzLmNoYW5nZWRFbGVtZW50cy5nZXQoZWxlbWVudCk7XG4gICAgICAgIHN3aXRjaCAobXV0YXRpb24uYXR0cmlidXRlTmFtZSkge1xuICAgICAgICAgICAgY2FzZSAnY2xhc3MnOlxuICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlQ2xhc3NBdHRyaWJ1dGVNdXRhdGlvbihtdXRhdGlvbiwgY2hhbmdlZEVsZW1lbnQpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnc3R5bGUnOlxuICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlU3R5bGVBdHRyaWJ1dGVNdXRhdGlvbihtdXRhdGlvbiwgY2hhbmdlZEVsZW1lbnQpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZUdlbmVyaWNBdHRyaWJ1dGVNdXRhdGlvbihtdXRhdGlvbiwgY2hhbmdlZEVsZW1lbnQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjaGFuZ2VkRWxlbWVudC5pc0VtcHR5KCkpIHtcbiAgICAgICAgICAgIHRoaXMuY2hhbmdlZEVsZW1lbnRzLmRlbGV0ZShlbGVtZW50KTtcbiAgICAgICAgICAgIHRoaXMuY2hhbmdlZEVsZW1lbnRzQ291bnQtLTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBoYW5kbGVDbGFzc0F0dHJpYnV0ZU11dGF0aW9uKG11dGF0aW9uLCBlbGVtZW50Q2hhbmdlcykge1xuICAgICAgICBjb25zdCBlbGVtZW50ID0gbXV0YXRpb24udGFyZ2V0O1xuICAgICAgICBjb25zdCBwcmV2aW91c1ZhbHVlID0gbXV0YXRpb24ub2xkVmFsdWUgfHwgJyc7XG4gICAgICAgIGNvbnN0IHByZXZpb3VzVmFsdWVzID0gcHJldmlvdXNWYWx1ZS5tYXRjaCgvKFxcUyspL2d1KSB8fCBbXTtcbiAgICAgICAgY29uc3QgbmV3VmFsdWVzID0gW10uc2xpY2UuY2FsbChlbGVtZW50LmNsYXNzTGlzdCk7XG4gICAgICAgIGNvbnN0IGFkZGVkVmFsdWVzID0gbmV3VmFsdWVzLmZpbHRlcigodmFsdWUpID0+ICFwcmV2aW91c1ZhbHVlcy5pbmNsdWRlcyh2YWx1ZSkpO1xuICAgICAgICBjb25zdCByZW1vdmVkVmFsdWVzID0gcHJldmlvdXNWYWx1ZXMuZmlsdGVyKCh2YWx1ZSkgPT4gIW5ld1ZhbHVlcy5pbmNsdWRlcyh2YWx1ZSkpO1xuICAgICAgICBhZGRlZFZhbHVlcy5mb3JFYWNoKCh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgZWxlbWVudENoYW5nZXMuYWRkQ2xhc3ModmFsdWUpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmVtb3ZlZFZhbHVlcy5mb3JFYWNoKCh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgZWxlbWVudENoYW5nZXMucmVtb3ZlQ2xhc3ModmFsdWUpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgaGFuZGxlU3R5bGVBdHRyaWJ1dGVNdXRhdGlvbihtdXRhdGlvbiwgZWxlbWVudENoYW5nZXMpIHtcbiAgICAgICAgY29uc3QgZWxlbWVudCA9IG11dGF0aW9uLnRhcmdldDtcbiAgICAgICAgY29uc3QgcHJldmlvdXNWYWx1ZSA9IG11dGF0aW9uLm9sZFZhbHVlIHx8ICcnO1xuICAgICAgICBjb25zdCBwcmV2aW91c1N0eWxlcyA9IHRoaXMuZXh0cmFjdFN0eWxlcyhwcmV2aW91c1ZhbHVlKTtcbiAgICAgICAgY29uc3QgbmV3VmFsdWUgPSBlbGVtZW50LmdldEF0dHJpYnV0ZSgnc3R5bGUnKSB8fCAnJztcbiAgICAgICAgY29uc3QgbmV3U3R5bGVzID0gdGhpcy5leHRyYWN0U3R5bGVzKG5ld1ZhbHVlKTtcbiAgICAgICAgY29uc3QgYWRkZWRPckNoYW5nZWRTdHlsZXMgPSBPYmplY3Qua2V5cyhuZXdTdHlsZXMpLmZpbHRlcigoa2V5KSA9PiBwcmV2aW91c1N0eWxlc1trZXldID09PSB1bmRlZmluZWQgfHwgcHJldmlvdXNTdHlsZXNba2V5XSAhPT0gbmV3U3R5bGVzW2tleV0pO1xuICAgICAgICBjb25zdCByZW1vdmVkU3R5bGVzID0gT2JqZWN0LmtleXMocHJldmlvdXNTdHlsZXMpLmZpbHRlcigoa2V5KSA9PiAhbmV3U3R5bGVzW2tleV0pO1xuICAgICAgICBhZGRlZE9yQ2hhbmdlZFN0eWxlcy5mb3JFYWNoKChzdHlsZSkgPT4ge1xuICAgICAgICAgICAgZWxlbWVudENoYW5nZXMuYWRkU3R5bGUoc3R5bGUsIG5ld1N0eWxlc1tzdHlsZV0sIHByZXZpb3VzU3R5bGVzW3N0eWxlXSA9PT0gdW5kZWZpbmVkID8gbnVsbCA6IHByZXZpb3VzU3R5bGVzW3N0eWxlXSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZW1vdmVkU3R5bGVzLmZvckVhY2goKHN0eWxlKSA9PiB7XG4gICAgICAgICAgICBlbGVtZW50Q2hhbmdlcy5yZW1vdmVTdHlsZShzdHlsZSwgcHJldmlvdXNTdHlsZXNbc3R5bGVdKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGhhbmRsZUdlbmVyaWNBdHRyaWJ1dGVNdXRhdGlvbihtdXRhdGlvbiwgZWxlbWVudENoYW5nZXMpIHtcbiAgICAgICAgY29uc3QgYXR0cmlidXRlTmFtZSA9IG11dGF0aW9uLmF0dHJpYnV0ZU5hbWU7XG4gICAgICAgIGNvbnN0IGVsZW1lbnQgPSBtdXRhdGlvbi50YXJnZXQ7XG4gICAgICAgIGxldCBvbGRWYWx1ZSA9IG11dGF0aW9uLm9sZFZhbHVlO1xuICAgICAgICBsZXQgbmV3VmFsdWUgPSBlbGVtZW50LmdldEF0dHJpYnV0ZShhdHRyaWJ1dGVOYW1lKTtcbiAgICAgICAgaWYgKG9sZFZhbHVlID09PSBhdHRyaWJ1dGVOYW1lKSB7XG4gICAgICAgICAgICBvbGRWYWx1ZSA9ICcnO1xuICAgICAgICB9XG4gICAgICAgIGlmIChuZXdWYWx1ZSA9PT0gYXR0cmlidXRlTmFtZSkge1xuICAgICAgICAgICAgbmV3VmFsdWUgPSAnJztcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWVsZW1lbnQuaGFzQXR0cmlidXRlKGF0dHJpYnV0ZU5hbWUpKSB7XG4gICAgICAgICAgICBpZiAob2xkVmFsdWUgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbGVtZW50Q2hhbmdlcy5yZW1vdmVBdHRyaWJ1dGUoYXR0cmlidXRlTmFtZSwgbXV0YXRpb24ub2xkVmFsdWUpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChuZXdWYWx1ZSA9PT0gb2xkVmFsdWUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBlbGVtZW50Q2hhbmdlcy5hZGRBdHRyaWJ1dGUoYXR0cmlidXRlTmFtZSwgZWxlbWVudC5nZXRBdHRyaWJ1dGUoYXR0cmlidXRlTmFtZSksIG11dGF0aW9uLm9sZFZhbHVlKTtcbiAgICB9XG4gICAgZXh0cmFjdFN0eWxlcyhzdHlsZXMpIHtcbiAgICAgICAgY29uc3Qgc3R5bGVPYmplY3QgPSB7fTtcbiAgICAgICAgc3R5bGVzLnNwbGl0KCc7JykuZm9yRWFjaCgoc3R5bGUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHBhcnRzID0gc3R5bGUuc3BsaXQoJzonKTtcbiAgICAgICAgICAgIGlmIChwYXJ0cy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBwcm9wZXJ0eSA9IHBhcnRzWzBdLnRyaW0oKTtcbiAgICAgICAgICAgIHN0eWxlT2JqZWN0W3Byb3BlcnR5XSA9IHBhcnRzLnNsaWNlKDEpLmpvaW4oJzonKS50cmltKCk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gc3R5bGVPYmplY3Q7XG4gICAgfVxuICAgIGlzRWxlbWVudEFkZGVkQnlUcmFuc2xhdGlvbihlbGVtZW50KSB7XG4gICAgICAgIHJldHVybiBlbGVtZW50LnRhZ05hbWUgPT09ICdGT05UJyAmJiBlbGVtZW50LmdldEF0dHJpYnV0ZSgnc3R5bGUnKSA9PT0gJ3ZlcnRpY2FsLWFsaWduOiBpbmhlcml0Oyc7XG4gICAgfVxufVxuXG5jbGFzcyBDb21wb25lbnQge1xuICAgIGNvbnN0cnVjdG9yKGVsZW1lbnQsIG5hbWUsIHByb3BzLCBsaXN0ZW5lcnMsIGlkLCBiYWNrZW5kLCBlbGVtZW50RHJpdmVyKSB7XG4gICAgICAgIHRoaXMuZmluZ2VycHJpbnQgPSAnJztcbiAgICAgICAgdGhpcy5kZWZhdWx0RGVib3VuY2UgPSAxNTA7XG4gICAgICAgIHRoaXMuYmFja2VuZFJlcXVlc3QgPSBudWxsO1xuICAgICAgICB0aGlzLnBlbmRpbmdBY3Rpb25zID0gW107XG4gICAgICAgIHRoaXMucGVuZGluZ0ZpbGVzID0ge307XG4gICAgICAgIHRoaXMuaXNSZXF1ZXN0UGVuZGluZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLnJlcXVlc3REZWJvdW5jZVRpbWVvdXQgPSBudWxsO1xuICAgICAgICB0aGlzLmVsZW1lbnQgPSBlbGVtZW50O1xuICAgICAgICB0aGlzLm5hbWUgPSBuYW1lO1xuICAgICAgICB0aGlzLmJhY2tlbmQgPSBiYWNrZW5kO1xuICAgICAgICB0aGlzLmVsZW1lbnREcml2ZXIgPSBlbGVtZW50RHJpdmVyO1xuICAgICAgICB0aGlzLmlkID0gaWQ7XG4gICAgICAgIHRoaXMubGlzdGVuZXJzID0gbmV3IE1hcCgpO1xuICAgICAgICBsaXN0ZW5lcnMuZm9yRWFjaCgobGlzdGVuZXIpID0+IHtcbiAgICAgICAgICAgIGlmICghdGhpcy5saXN0ZW5lcnMuaGFzKGxpc3RlbmVyLmV2ZW50KSkge1xuICAgICAgICAgICAgICAgIHRoaXMubGlzdGVuZXJzLnNldChsaXN0ZW5lci5ldmVudCwgW10pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5saXN0ZW5lcnMuZ2V0KGxpc3RlbmVyLmV2ZW50KT8ucHVzaChsaXN0ZW5lci5hY3Rpb24pO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy52YWx1ZVN0b3JlID0gbmV3IFZhbHVlU3RvcmUocHJvcHMpO1xuICAgICAgICB0aGlzLnVuc3luY2VkSW5wdXRzVHJhY2tlciA9IG5ldyBVbnN5bmNlZElucHV0c1RyYWNrZXIodGhpcywgZWxlbWVudERyaXZlcik7XG4gICAgICAgIHRoaXMuaG9va3MgPSBuZXcgSG9va01hbmFnZXIoKTtcbiAgICAgICAgdGhpcy5yZXNldFByb21pc2UoKTtcbiAgICAgICAgdGhpcy5leHRlcm5hbE11dGF0aW9uVHJhY2tlciA9IG5ldyBFeHRlcm5hbE11dGF0aW9uVHJhY2tlcih0aGlzLmVsZW1lbnQsIChlbGVtZW50KSA9PiBlbGVtZW50QmVsb25nc1RvVGhpc0NvbXBvbmVudChlbGVtZW50LCB0aGlzKSk7XG4gICAgICAgIHRoaXMuZXh0ZXJuYWxNdXRhdGlvblRyYWNrZXIuc3RhcnQoKTtcbiAgICB9XG4gICAgYWRkUGx1Z2luKHBsdWdpbikge1xuICAgICAgICBwbHVnaW4uYXR0YWNoVG9Db21wb25lbnQodGhpcyk7XG4gICAgfVxuICAgIGNvbm5lY3QoKSB7XG4gICAgICAgIHJlZ2lzdGVyQ29tcG9uZW50KHRoaXMpO1xuICAgICAgICB0aGlzLmhvb2tzLnRyaWdnZXJIb29rKCdjb25uZWN0JywgdGhpcyk7XG4gICAgICAgIHRoaXMudW5zeW5jZWRJbnB1dHNUcmFja2VyLmFjdGl2YXRlKCk7XG4gICAgICAgIHRoaXMuZXh0ZXJuYWxNdXRhdGlvblRyYWNrZXIuc3RhcnQoKTtcbiAgICB9XG4gICAgZGlzY29ubmVjdCgpIHtcbiAgICAgICAgdW5yZWdpc3RlckNvbXBvbmVudCh0aGlzKTtcbiAgICAgICAgdGhpcy5ob29rcy50cmlnZ2VySG9vaygnZGlzY29ubmVjdCcsIHRoaXMpO1xuICAgICAgICB0aGlzLmNsZWFyUmVxdWVzdERlYm91bmNlVGltZW91dCgpO1xuICAgICAgICB0aGlzLnVuc3luY2VkSW5wdXRzVHJhY2tlci5kZWFjdGl2YXRlKCk7XG4gICAgICAgIHRoaXMuZXh0ZXJuYWxNdXRhdGlvblRyYWNrZXIuc3RvcCgpO1xuICAgIH1cbiAgICBvbihob29rTmFtZSwgY2FsbGJhY2spIHtcbiAgICAgICAgdGhpcy5ob29rcy5yZWdpc3Rlcihob29rTmFtZSwgY2FsbGJhY2spO1xuICAgIH1cbiAgICBvZmYoaG9va05hbWUsIGNhbGxiYWNrKSB7XG4gICAgICAgIHRoaXMuaG9va3MudW5yZWdpc3Rlcihob29rTmFtZSwgY2FsbGJhY2spO1xuICAgIH1cbiAgICBzZXQobW9kZWwsIHZhbHVlLCByZVJlbmRlciA9IGZhbHNlLCBkZWJvdW5jZSA9IGZhbHNlKSB7XG4gICAgICAgIGNvbnN0IHByb21pc2UgPSB0aGlzLm5leHRSZXF1ZXN0UHJvbWlzZTtcbiAgICAgICAgY29uc3QgbW9kZWxOYW1lID0gbm9ybWFsaXplTW9kZWxOYW1lKG1vZGVsKTtcbiAgICAgICAgaWYgKCF0aGlzLnZhbHVlU3RvcmUuaGFzKG1vZGVsTmFtZSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBtb2RlbCBuYW1lIFwiJHttb2RlbH1cIi5gKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpc0NoYW5nZWQgPSB0aGlzLnZhbHVlU3RvcmUuc2V0KG1vZGVsTmFtZSwgdmFsdWUpO1xuICAgICAgICB0aGlzLmhvb2tzLnRyaWdnZXJIb29rKCdtb2RlbDpzZXQnLCBtb2RlbCwgdmFsdWUsIHRoaXMpO1xuICAgICAgICB0aGlzLnVuc3luY2VkSW5wdXRzVHJhY2tlci5tYXJrTW9kZWxBc1N5bmNlZChtb2RlbE5hbWUpO1xuICAgICAgICBpZiAocmVSZW5kZXIgJiYgaXNDaGFuZ2VkKSB7XG4gICAgICAgICAgICB0aGlzLmRlYm91bmNlZFN0YXJ0UmVxdWVzdChkZWJvdW5jZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHByb21pc2U7XG4gICAgfVxuICAgIGdldERhdGEobW9kZWwpIHtcbiAgICAgICAgY29uc3QgbW9kZWxOYW1lID0gbm9ybWFsaXplTW9kZWxOYW1lKG1vZGVsKTtcbiAgICAgICAgaWYgKCF0aGlzLnZhbHVlU3RvcmUuaGFzKG1vZGVsTmFtZSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBtb2RlbCBcIiR7bW9kZWx9XCIuYCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVTdG9yZS5nZXQobW9kZWxOYW1lKTtcbiAgICB9XG4gICAgYWN0aW9uKG5hbWUsIGFyZ3MgPSB7fSwgZGVib3VuY2UgPSBmYWxzZSkge1xuICAgICAgICBjb25zdCBwcm9taXNlID0gdGhpcy5uZXh0UmVxdWVzdFByb21pc2U7XG4gICAgICAgIHRoaXMucGVuZGluZ0FjdGlvbnMucHVzaCh7XG4gICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgYXJncyxcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuZGVib3VuY2VkU3RhcnRSZXF1ZXN0KGRlYm91bmNlKTtcbiAgICAgICAgcmV0dXJuIHByb21pc2U7XG4gICAgfVxuICAgIGZpbGVzKGtleSwgaW5wdXQpIHtcbiAgICAgICAgdGhpcy5wZW5kaW5nRmlsZXNba2V5XSA9IGlucHV0O1xuICAgIH1cbiAgICByZW5kZXIoKSB7XG4gICAgICAgIGNvbnN0IHByb21pc2UgPSB0aGlzLm5leHRSZXF1ZXN0UHJvbWlzZTtcbiAgICAgICAgdGhpcy50cnlTdGFydGluZ1JlcXVlc3QoKTtcbiAgICAgICAgcmV0dXJuIHByb21pc2U7XG4gICAgfVxuICAgIGdldFVuc3luY2VkTW9kZWxzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy51bnN5bmNlZElucHV0c1RyYWNrZXIuZ2V0VW5zeW5jZWRNb2RlbHMoKTtcbiAgICB9XG4gICAgZW1pdChuYW1lLCBkYXRhLCBvbmx5TWF0Y2hpbmdDb21wb25lbnRzTmFtZWQgPSBudWxsKSB7XG4gICAgICAgIHRoaXMucGVyZm9ybUVtaXQobmFtZSwgZGF0YSwgZmFsc2UsIG9ubHlNYXRjaGluZ0NvbXBvbmVudHNOYW1lZCk7XG4gICAgfVxuICAgIGVtaXRVcChuYW1lLCBkYXRhLCBvbmx5TWF0Y2hpbmdDb21wb25lbnRzTmFtZWQgPSBudWxsKSB7XG4gICAgICAgIHRoaXMucGVyZm9ybUVtaXQobmFtZSwgZGF0YSwgdHJ1ZSwgb25seU1hdGNoaW5nQ29tcG9uZW50c05hbWVkKTtcbiAgICB9XG4gICAgZW1pdFNlbGYobmFtZSwgZGF0YSkge1xuICAgICAgICB0aGlzLmRvRW1pdChuYW1lLCBkYXRhKTtcbiAgICB9XG4gICAgcGVyZm9ybUVtaXQobmFtZSwgZGF0YSwgZW1pdFVwLCBtYXRjaGluZ05hbWUpIHtcbiAgICAgICAgY29uc3QgY29tcG9uZW50cyA9IGZpbmRDb21wb25lbnRzKHRoaXMsIGVtaXRVcCwgbWF0Y2hpbmdOYW1lKTtcbiAgICAgICAgY29tcG9uZW50cy5mb3JFYWNoKChjb21wb25lbnQpID0+IHtcbiAgICAgICAgICAgIGNvbXBvbmVudC5kb0VtaXQobmFtZSwgZGF0YSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBkb0VtaXQobmFtZSwgZGF0YSkge1xuICAgICAgICBpZiAoIXRoaXMubGlzdGVuZXJzLmhhcyhuYW1lKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGFjdGlvbnMgPSB0aGlzLmxpc3RlbmVycy5nZXQobmFtZSkgfHwgW107XG4gICAgICAgIGFjdGlvbnMuZm9yRWFjaCgoYWN0aW9uKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmFjdGlvbihhY3Rpb24sIGRhdGEsIDEpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgaXNUdXJib0VuYWJsZWQoKSB7XG4gICAgICAgIHJldHVybiB0eXBlb2YgVHVyYm8gIT09ICd1bmRlZmluZWQnICYmICF0aGlzLmVsZW1lbnQuY2xvc2VzdCgnW2RhdGEtdHVyYm89XCJmYWxzZVwiXScpO1xuICAgIH1cbiAgICB0cnlTdGFydGluZ1JlcXVlc3QoKSB7XG4gICAgICAgIGlmICghdGhpcy5iYWNrZW5kUmVxdWVzdCkge1xuICAgICAgICAgICAgdGhpcy5wZXJmb3JtUmVxdWVzdCgpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuaXNSZXF1ZXN0UGVuZGluZyA9IHRydWU7XG4gICAgfVxuICAgIHBlcmZvcm1SZXF1ZXN0KCkge1xuICAgICAgICBjb25zdCB0aGlzUHJvbWlzZVJlc29sdmUgPSB0aGlzLm5leHRSZXF1ZXN0UHJvbWlzZVJlc29sdmU7XG4gICAgICAgIHRoaXMucmVzZXRQcm9taXNlKCk7XG4gICAgICAgIHRoaXMudW5zeW5jZWRJbnB1dHNUcmFja2VyLnJlc2V0VW5zeW5jZWRGaWVsZHMoKTtcbiAgICAgICAgY29uc3QgZmlsZXNUb1NlbmQgPSB7fTtcbiAgICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXModGhpcy5wZW5kaW5nRmlsZXMpKSB7XG4gICAgICAgICAgICBpZiAodmFsdWUuZmlsZXMpIHtcbiAgICAgICAgICAgICAgICBmaWxlc1RvU2VuZFtrZXldID0gdmFsdWUuZmlsZXM7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmVxdWVzdENvbmZpZyA9IHtcbiAgICAgICAgICAgIHByb3BzOiB0aGlzLnZhbHVlU3RvcmUuZ2V0T3JpZ2luYWxQcm9wcygpLFxuICAgICAgICAgICAgYWN0aW9uczogdGhpcy5wZW5kaW5nQWN0aW9ucyxcbiAgICAgICAgICAgIHVwZGF0ZWQ6IHRoaXMudmFsdWVTdG9yZS5nZXREaXJ0eVByb3BzKCksXG4gICAgICAgICAgICBjaGlsZHJlbjoge30sXG4gICAgICAgICAgICB1cGRhdGVkUHJvcHNGcm9tUGFyZW50OiB0aGlzLnZhbHVlU3RvcmUuZ2V0VXBkYXRlZFByb3BzRnJvbVBhcmVudCgpLFxuICAgICAgICAgICAgZmlsZXM6IGZpbGVzVG9TZW5kLFxuICAgICAgICB9O1xuICAgICAgICB0aGlzLmhvb2tzLnRyaWdnZXJIb29rKCdyZXF1ZXN0OnN0YXJ0ZWQnLCByZXF1ZXN0Q29uZmlnKTtcbiAgICAgICAgdGhpcy5iYWNrZW5kUmVxdWVzdCA9IHRoaXMuYmFja2VuZC5tYWtlUmVxdWVzdChyZXF1ZXN0Q29uZmlnLnByb3BzLCByZXF1ZXN0Q29uZmlnLmFjdGlvbnMsIHJlcXVlc3RDb25maWcudXBkYXRlZCwgcmVxdWVzdENvbmZpZy5jaGlsZHJlbiwgcmVxdWVzdENvbmZpZy51cGRhdGVkUHJvcHNGcm9tUGFyZW50LCByZXF1ZXN0Q29uZmlnLmZpbGVzKTtcbiAgICAgICAgdGhpcy5ob29rcy50cmlnZ2VySG9vaygnbG9hZGluZy5zdGF0ZTpzdGFydGVkJywgdGhpcy5lbGVtZW50LCB0aGlzLmJhY2tlbmRSZXF1ZXN0KTtcbiAgICAgICAgdGhpcy5wZW5kaW5nQWN0aW9ucyA9IFtdO1xuICAgICAgICB0aGlzLnZhbHVlU3RvcmUuZmx1c2hEaXJ0eVByb3BzVG9QZW5kaW5nKCk7XG4gICAgICAgIHRoaXMuaXNSZXF1ZXN0UGVuZGluZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLmJhY2tlbmRSZXF1ZXN0LnByb21pc2UudGhlbihhc3luYyAocmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGJhY2tlbmRSZXNwb25zZSA9IG5ldyBCYWNrZW5kUmVzcG9uc2UocmVzcG9uc2UpO1xuICAgICAgICAgICAgY29uc3QgaHRtbCA9IGF3YWl0IGJhY2tlbmRSZXNwb25zZS5nZXRCb2R5KCk7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGlucHV0IG9mIE9iamVjdC52YWx1ZXModGhpcy5wZW5kaW5nRmlsZXMpKSB7XG4gICAgICAgICAgICAgICAgaW5wdXQudmFsdWUgPSAnJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGhlYWRlcnMgPSBiYWNrZW5kUmVzcG9uc2UucmVzcG9uc2UuaGVhZGVycztcbiAgICAgICAgICAgIGlmICghaGVhZGVycy5nZXQoJ0NvbnRlbnQtVHlwZScpPy5pbmNsdWRlcygnYXBwbGljYXRpb24vdm5kLmxpdmUtY29tcG9uZW50K2h0bWwnKSAmJlxuICAgICAgICAgICAgICAgICFoZWFkZXJzLmdldCgnWC1MaXZlLVJlZGlyZWN0JykpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjb250cm9scyA9IHsgZGlzcGxheUVycm9yOiB0cnVlIH07XG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZVN0b3JlLnB1c2hQZW5kaW5nUHJvcHNCYWNrVG9EaXJ0eSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuaG9va3MudHJpZ2dlckhvb2soJ3Jlc3BvbnNlOmVycm9yJywgYmFja2VuZFJlc3BvbnNlLCBjb250cm9scyk7XG4gICAgICAgICAgICAgICAgaWYgKGNvbnRyb2xzLmRpc3BsYXlFcnJvcikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbmRlckVycm9yKGh0bWwpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLmJhY2tlbmRSZXF1ZXN0ID0gbnVsbDtcbiAgICAgICAgICAgICAgICB0aGlzUHJvbWlzZVJlc29sdmUoYmFja2VuZFJlc3BvbnNlKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnByb2Nlc3NSZXJlbmRlcihodG1sLCBiYWNrZW5kUmVzcG9uc2UpO1xuICAgICAgICAgICAgdGhpcy5iYWNrZW5kUmVxdWVzdCA9IG51bGw7XG4gICAgICAgICAgICB0aGlzUHJvbWlzZVJlc29sdmUoYmFja2VuZFJlc3BvbnNlKTtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzUmVxdWVzdFBlbmRpbmcpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmlzUmVxdWVzdFBlbmRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLnBlcmZvcm1SZXF1ZXN0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBwcm9jZXNzUmVyZW5kZXIoaHRtbCwgYmFja2VuZFJlc3BvbnNlKSB7XG4gICAgICAgIGNvbnN0IGNvbnRyb2xzID0geyBzaG91bGRSZW5kZXI6IHRydWUgfTtcbiAgICAgICAgdGhpcy5ob29rcy50cmlnZ2VySG9vaygncmVuZGVyOnN0YXJ0ZWQnLCBodG1sLCBiYWNrZW5kUmVzcG9uc2UsIGNvbnRyb2xzKTtcbiAgICAgICAgaWYgKCFjb250cm9scy5zaG91bGRSZW5kZXIpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYmFja2VuZFJlc3BvbnNlLnJlc3BvbnNlLmhlYWRlcnMuZ2V0KCdMb2NhdGlvbicpKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5pc1R1cmJvRW5hYmxlZCgpKSB7XG4gICAgICAgICAgICAgICAgVHVyYm8udmlzaXQoYmFja2VuZFJlc3BvbnNlLnJlc3BvbnNlLmhlYWRlcnMuZ2V0KCdMb2NhdGlvbicpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gYmFja2VuZFJlc3BvbnNlLnJlc3BvbnNlLmhlYWRlcnMuZ2V0KCdMb2NhdGlvbicpIHx8ICcnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuaG9va3MudHJpZ2dlckhvb2soJ2xvYWRpbmcuc3RhdGU6ZmluaXNoZWQnLCB0aGlzLmVsZW1lbnQpO1xuICAgICAgICBjb25zdCBtb2RpZmllZE1vZGVsVmFsdWVzID0ge307XG4gICAgICAgIE9iamVjdC5rZXlzKHRoaXMudmFsdWVTdG9yZS5nZXREaXJ0eVByb3BzKCkpLmZvckVhY2goKG1vZGVsTmFtZSkgPT4ge1xuICAgICAgICAgICAgbW9kaWZpZWRNb2RlbFZhbHVlc1ttb2RlbE5hbWVdID0gdGhpcy52YWx1ZVN0b3JlLmdldChtb2RlbE5hbWUpO1xuICAgICAgICB9KTtcbiAgICAgICAgbGV0IG5ld0VsZW1lbnQ7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBuZXdFbGVtZW50ID0gaHRtbFRvRWxlbWVudChodG1sKTtcbiAgICAgICAgICAgIGlmICghbmV3RWxlbWVudC5tYXRjaGVzKCdbZGF0YS1jb250cm9sbGVyfj1saXZlXScpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdBIGxpdmUgY29tcG9uZW50IHRlbXBsYXRlIG11c3QgY29udGFpbiBhIHNpbmdsZSByb290IGNvbnRyb2xsZXIgZWxlbWVudC4nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYFRoZXJlIHdhcyBhIHByb2JsZW0gd2l0aCB0aGUgJyR7dGhpcy5uYW1lfScgY29tcG9uZW50IEhUTUwgcmV0dXJuZWQ6YCwge1xuICAgICAgICAgICAgICAgIGlkOiB0aGlzLmlkLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmV4dGVybmFsTXV0YXRpb25UcmFja2VyLmhhbmRsZVBlbmRpbmdDaGFuZ2VzKCk7XG4gICAgICAgIHRoaXMuZXh0ZXJuYWxNdXRhdGlvblRyYWNrZXIuc3RvcCgpO1xuICAgICAgICBleGVjdXRlTW9ycGhkb20odGhpcy5lbGVtZW50LCBuZXdFbGVtZW50LCB0aGlzLnVuc3luY2VkSW5wdXRzVHJhY2tlci5nZXRVbnN5bmNlZElucHV0cygpLCAoZWxlbWVudCkgPT4gZ2V0VmFsdWVGcm9tRWxlbWVudChlbGVtZW50LCB0aGlzLnZhbHVlU3RvcmUpLCB0aGlzLmV4dGVybmFsTXV0YXRpb25UcmFja2VyKTtcbiAgICAgICAgdGhpcy5leHRlcm5hbE11dGF0aW9uVHJhY2tlci5zdGFydCgpO1xuICAgICAgICBjb25zdCBuZXdQcm9wcyA9IHRoaXMuZWxlbWVudERyaXZlci5nZXRDb21wb25lbnRQcm9wcygpO1xuICAgICAgICB0aGlzLnZhbHVlU3RvcmUucmVpbml0aWFsaXplQWxsUHJvcHMobmV3UHJvcHMpO1xuICAgICAgICBjb25zdCBldmVudHNUb0VtaXQgPSB0aGlzLmVsZW1lbnREcml2ZXIuZ2V0RXZlbnRzVG9FbWl0KCk7XG4gICAgICAgIGNvbnN0IGJyb3dzZXJFdmVudHNUb0Rpc3BhdGNoID0gdGhpcy5lbGVtZW50RHJpdmVyLmdldEJyb3dzZXJFdmVudHNUb0Rpc3BhdGNoKCk7XG4gICAgICAgIE9iamVjdC5rZXlzKG1vZGlmaWVkTW9kZWxWYWx1ZXMpLmZvckVhY2goKG1vZGVsTmFtZSkgPT4ge1xuICAgICAgICAgICAgdGhpcy52YWx1ZVN0b3JlLnNldChtb2RlbE5hbWUsIG1vZGlmaWVkTW9kZWxWYWx1ZXNbbW9kZWxOYW1lXSk7XG4gICAgICAgIH0pO1xuICAgICAgICBldmVudHNUb0VtaXQuZm9yRWFjaCgoeyBldmVudCwgZGF0YSwgdGFyZ2V0LCBjb21wb25lbnROYW1lIH0pID0+IHtcbiAgICAgICAgICAgIGlmICh0YXJnZXQgPT09ICd1cCcpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmVtaXRVcChldmVudCwgZGF0YSwgY29tcG9uZW50TmFtZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRhcmdldCA9PT0gJ3NlbGYnKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5lbWl0U2VsZihldmVudCwgZGF0YSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5lbWl0KGV2ZW50LCBkYXRhLCBjb21wb25lbnROYW1lKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGJyb3dzZXJFdmVudHNUb0Rpc3BhdGNoLmZvckVhY2goKHsgZXZlbnQsIHBheWxvYWQgfSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50LmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KGV2ZW50LCB7XG4gICAgICAgICAgICAgICAgZGV0YWlsOiBwYXlsb2FkLFxuICAgICAgICAgICAgICAgIGJ1YmJsZXM6IHRydWUsXG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmhvb2tzLnRyaWdnZXJIb29rKCdyZW5kZXI6ZmluaXNoZWQnLCB0aGlzKTtcbiAgICB9XG4gICAgY2FsY3VsYXRlRGVib3VuY2UoZGVib3VuY2UpIHtcbiAgICAgICAgaWYgKGRlYm91bmNlID09PSB0cnVlKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0RGVib3VuY2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGRlYm91bmNlID09PSBmYWxzZSkge1xuICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRlYm91bmNlO1xuICAgIH1cbiAgICBjbGVhclJlcXVlc3REZWJvdW5jZVRpbWVvdXQoKSB7XG4gICAgICAgIGlmICh0aGlzLnJlcXVlc3REZWJvdW5jZVRpbWVvdXQpIHtcbiAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLnJlcXVlc3REZWJvdW5jZVRpbWVvdXQpO1xuICAgICAgICAgICAgdGhpcy5yZXF1ZXN0RGVib3VuY2VUaW1lb3V0ID0gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBkZWJvdW5jZWRTdGFydFJlcXVlc3QoZGVib3VuY2UpIHtcbiAgICAgICAgdGhpcy5jbGVhclJlcXVlc3REZWJvdW5jZVRpbWVvdXQoKTtcbiAgICAgICAgdGhpcy5yZXF1ZXN0RGVib3VuY2VUaW1lb3V0ID0gd2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5yZW5kZXIoKTtcbiAgICAgICAgfSwgdGhpcy5jYWxjdWxhdGVEZWJvdW5jZShkZWJvdW5jZSkpO1xuICAgIH1cbiAgICByZW5kZXJFcnJvcihodG1sKSB7XG4gICAgICAgIGxldCBtb2RhbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsaXZlLWNvbXBvbmVudC1lcnJvcicpO1xuICAgICAgICBpZiAobW9kYWwpIHtcbiAgICAgICAgICAgIG1vZGFsLmlubmVySFRNTCA9ICcnO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgbW9kYWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIG1vZGFsLmlkID0gJ2xpdmUtY29tcG9uZW50LWVycm9yJztcbiAgICAgICAgICAgIG1vZGFsLnN0eWxlLnBhZGRpbmcgPSAnNTBweCc7XG4gICAgICAgICAgICBtb2RhbC5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSAncmdiYSgwLCAwLCAwLCAuNSknO1xuICAgICAgICAgICAgbW9kYWwuc3R5bGUuekluZGV4ID0gJzEwMDAwMCc7XG4gICAgICAgICAgICBtb2RhbC5zdHlsZS5wb3NpdGlvbiA9ICdmaXhlZCc7XG4gICAgICAgICAgICBtb2RhbC5zdHlsZS50b3AgPSAnMHB4JztcbiAgICAgICAgICAgIG1vZGFsLnN0eWxlLmJvdHRvbSA9ICcwcHgnO1xuICAgICAgICAgICAgbW9kYWwuc3R5bGUubGVmdCA9ICcwcHgnO1xuICAgICAgICAgICAgbW9kYWwuc3R5bGUucmlnaHQgPSAnMHB4JztcbiAgICAgICAgICAgIG1vZGFsLnN0eWxlLmRpc3BsYXkgPSAnZmxleCc7XG4gICAgICAgICAgICBtb2RhbC5zdHlsZS5mbGV4RGlyZWN0aW9uID0gJ2NvbHVtbic7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaWZyYW1lID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaWZyYW1lJyk7XG4gICAgICAgIGlmcmFtZS5zdHlsZS5ib3JkZXJSYWRpdXMgPSAnNXB4JztcbiAgICAgICAgaWZyYW1lLnN0eWxlLmZsZXhHcm93ID0gJzEnO1xuICAgICAgICBtb2RhbC5hcHBlbmRDaGlsZChpZnJhbWUpO1xuICAgICAgICBkb2N1bWVudC5ib2R5LnByZXBlbmQobW9kYWwpO1xuICAgICAgICBkb2N1bWVudC5ib2R5LnN0eWxlLm92ZXJmbG93ID0gJ2hpZGRlbic7XG4gICAgICAgIGlmIChpZnJhbWUuY29udGVudFdpbmRvdykge1xuICAgICAgICAgICAgaWZyYW1lLmNvbnRlbnRXaW5kb3cuZG9jdW1lbnQub3BlbigpO1xuICAgICAgICAgICAgaWZyYW1lLmNvbnRlbnRXaW5kb3cuZG9jdW1lbnQud3JpdGUoaHRtbCk7XG4gICAgICAgICAgICBpZnJhbWUuY29udGVudFdpbmRvdy5kb2N1bWVudC5jbG9zZSgpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNsb3NlTW9kYWwgPSAobW9kYWwpID0+IHtcbiAgICAgICAgICAgIGlmIChtb2RhbCkge1xuICAgICAgICAgICAgICAgIG1vZGFsLm91dGVySFRNTCA9ICcnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5zdHlsZS5vdmVyZmxvdyA9ICd2aXNpYmxlJztcbiAgICAgICAgfTtcbiAgICAgICAgbW9kYWwuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiBjbG9zZU1vZGFsKG1vZGFsKSk7XG4gICAgICAgIG1vZGFsLnNldEF0dHJpYnV0ZSgndGFiaW5kZXgnLCAnMCcpO1xuICAgICAgICBtb2RhbC5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgKGUpID0+IHtcbiAgICAgICAgICAgIGlmIChlLmtleSA9PT0gJ0VzY2FwZScpIHtcbiAgICAgICAgICAgICAgICBjbG9zZU1vZGFsKG1vZGFsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIG1vZGFsLmZvY3VzKCk7XG4gICAgfVxuICAgIHJlc2V0UHJvbWlzZSgpIHtcbiAgICAgICAgdGhpcy5uZXh0UmVxdWVzdFByb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5uZXh0UmVxdWVzdFByb21pc2VSZXNvbHZlID0gcmVzb2x2ZTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIF91cGRhdGVGcm9tUGFyZW50UHJvcHMocHJvcHMpIHtcbiAgICAgICAgY29uc3QgaXNDaGFuZ2VkID0gdGhpcy52YWx1ZVN0b3JlLnN0b3JlTmV3UHJvcHNGcm9tUGFyZW50KHByb3BzKTtcbiAgICAgICAgaWYgKGlzQ2hhbmdlZCkge1xuICAgICAgICAgICAgdGhpcy5yZW5kZXIoKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbmZ1bmN0aW9uIHByb3hpZnlDb21wb25lbnQoY29tcG9uZW50KSB7XG4gICAgcmV0dXJuIG5ldyBQcm94eShjb21wb25lbnQsIHtcbiAgICAgICAgZ2V0KGNvbXBvbmVudCwgcHJvcCkge1xuICAgICAgICAgICAgaWYgKHByb3AgaW4gY29tcG9uZW50IHx8IHR5cGVvZiBwcm9wICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgY29tcG9uZW50W3Byb3BdID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNhbGxhYmxlID0gY29tcG9uZW50W3Byb3BdO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKC4uLmFyZ3MpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYWJsZS5hcHBseShjb21wb25lbnQsIGFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gUmVmbGVjdC5nZXQoY29tcG9uZW50LCBwcm9wKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChjb21wb25lbnQudmFsdWVTdG9yZS5oYXMocHJvcCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY29tcG9uZW50LmdldERhdGEocHJvcCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gKGFyZ3MpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY29tcG9uZW50LmFjdGlvbi5hcHBseShjb21wb25lbnQsIFtwcm9wLCBhcmdzXSk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9LFxuICAgICAgICBzZXQodGFyZ2V0LCBwcm9wZXJ0eSwgdmFsdWUpIHtcbiAgICAgICAgICAgIGlmIChwcm9wZXJ0eSBpbiB0YXJnZXQpIHtcbiAgICAgICAgICAgICAgICB0YXJnZXRbcHJvcGVydHldID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0YXJnZXQuc2V0KHByb3BlcnR5LCB2YWx1ZSk7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSxcbiAgICB9KTtcbn1cblxuY2xhc3MgQmFja2VuZFJlcXVlc3Qge1xuICAgIGNvbnN0cnVjdG9yKHByb21pc2UsIGFjdGlvbnMsIHVwZGF0ZU1vZGVscykge1xuICAgICAgICB0aGlzLmlzUmVzb2x2ZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5wcm9taXNlID0gcHJvbWlzZTtcbiAgICAgICAgdGhpcy5wcm9taXNlLnRoZW4oKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmlzUmVzb2x2ZWQgPSB0cnVlO1xuICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5hY3Rpb25zID0gYWN0aW9ucztcbiAgICAgICAgdGhpcy51cGRhdGVkTW9kZWxzID0gdXBkYXRlTW9kZWxzO1xuICAgIH1cbiAgICBjb250YWluc09uZU9mQWN0aW9ucyh0YXJnZXRlZEFjdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYWN0aW9ucy5maWx0ZXIoKGFjdGlvbikgPT4gdGFyZ2V0ZWRBY3Rpb25zLmluY2x1ZGVzKGFjdGlvbikpLmxlbmd0aCA+IDA7XG4gICAgfVxuICAgIGFyZUFueU1vZGVsc1VwZGF0ZWQodGFyZ2V0ZWRNb2RlbHMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudXBkYXRlZE1vZGVscy5maWx0ZXIoKG1vZGVsKSA9PiB0YXJnZXRlZE1vZGVscy5pbmNsdWRlcyhtb2RlbCkpLmxlbmd0aCA+IDA7XG4gICAgfVxufVxuXG5jbGFzcyBSZXF1ZXN0QnVpbGRlciB7XG4gICAgY29uc3RydWN0b3IodXJsLCBtZXRob2QgPSAncG9zdCcsIGNzcmZUb2tlbiA9IG51bGwpIHtcbiAgICAgICAgdGhpcy51cmwgPSB1cmw7XG4gICAgICAgIHRoaXMubWV0aG9kID0gbWV0aG9kO1xuICAgICAgICB0aGlzLmNzcmZUb2tlbiA9IGNzcmZUb2tlbjtcbiAgICB9XG4gICAgYnVpbGRSZXF1ZXN0KHByb3BzLCBhY3Rpb25zLCB1cGRhdGVkLCBjaGlsZHJlbiwgdXBkYXRlZFByb3BzRnJvbVBhcmVudCwgZmlsZXMpIHtcbiAgICAgICAgY29uc3Qgc3BsaXRVcmwgPSB0aGlzLnVybC5zcGxpdCgnPycpO1xuICAgICAgICBsZXQgW3VybF0gPSBzcGxpdFVybDtcbiAgICAgICAgY29uc3QgWywgcXVlcnlTdHJpbmddID0gc3BsaXRVcmw7XG4gICAgICAgIGNvbnN0IHBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMocXVlcnlTdHJpbmcgfHwgJycpO1xuICAgICAgICBjb25zdCBmZXRjaE9wdGlvbnMgPSB7fTtcbiAgICAgICAgZmV0Y2hPcHRpb25zLmhlYWRlcnMgPSB7XG4gICAgICAgICAgICBBY2NlcHQ6ICdhcHBsaWNhdGlvbi92bmQubGl2ZS1jb21wb25lbnQraHRtbCcsXG4gICAgICAgICAgICAnWC1SZXF1ZXN0ZWQtV2l0aCc6ICdYTUxIdHRwUmVxdWVzdCcsXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHRvdGFsRmlsZXMgPSBPYmplY3QuZW50cmllcyhmaWxlcykucmVkdWNlKCh0b3RhbCwgY3VycmVudCkgPT4gdG90YWwgKyBjdXJyZW50Lmxlbmd0aCwgMCk7XG4gICAgICAgIGNvbnN0IGhhc0ZpbmdlcnByaW50cyA9IE9iamVjdC5rZXlzKGNoaWxkcmVuKS5sZW5ndGggPiAwO1xuICAgICAgICBpZiAoYWN0aW9ucy5sZW5ndGggPT09IDAgJiZcbiAgICAgICAgICAgIHRvdGFsRmlsZXMgPT09IDAgJiZcbiAgICAgICAgICAgIHRoaXMubWV0aG9kID09PSAnZ2V0JyAmJlxuICAgICAgICAgICAgdGhpcy53aWxsRGF0YUZpdEluVXJsKEpTT04uc3RyaW5naWZ5KHByb3BzKSwgSlNPTi5zdHJpbmdpZnkodXBkYXRlZCksIHBhcmFtcywgSlNPTi5zdHJpbmdpZnkoY2hpbGRyZW4pLCBKU09OLnN0cmluZ2lmeSh1cGRhdGVkUHJvcHNGcm9tUGFyZW50KSkpIHtcbiAgICAgICAgICAgIHBhcmFtcy5zZXQoJ3Byb3BzJywgSlNPTi5zdHJpbmdpZnkocHJvcHMpKTtcbiAgICAgICAgICAgIHBhcmFtcy5zZXQoJ3VwZGF0ZWQnLCBKU09OLnN0cmluZ2lmeSh1cGRhdGVkKSk7XG4gICAgICAgICAgICBpZiAoT2JqZWN0LmtleXModXBkYXRlZFByb3BzRnJvbVBhcmVudCkubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIHBhcmFtcy5zZXQoJ3Byb3BzRnJvbVBhcmVudCcsIEpTT04uc3RyaW5naWZ5KHVwZGF0ZWRQcm9wc0Zyb21QYXJlbnQpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChoYXNGaW5nZXJwcmludHMpIHtcbiAgICAgICAgICAgICAgICBwYXJhbXMuc2V0KCdjaGlsZHJlbicsIEpTT04uc3RyaW5naWZ5KGNoaWxkcmVuKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmZXRjaE9wdGlvbnMubWV0aG9kID0gJ0dFVCc7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBmZXRjaE9wdGlvbnMubWV0aG9kID0gJ1BPU1QnO1xuICAgICAgICAgICAgY29uc3QgcmVxdWVzdERhdGEgPSB7IHByb3BzLCB1cGRhdGVkIH07XG4gICAgICAgICAgICBpZiAoT2JqZWN0LmtleXModXBkYXRlZFByb3BzRnJvbVBhcmVudCkubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIHJlcXVlc3REYXRhLnByb3BzRnJvbVBhcmVudCA9IHVwZGF0ZWRQcm9wc0Zyb21QYXJlbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaGFzRmluZ2VycHJpbnRzKSB7XG4gICAgICAgICAgICAgICAgcmVxdWVzdERhdGEuY2hpbGRyZW4gPSBjaGlsZHJlbjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLmNzcmZUb2tlbiAmJiAoYWN0aW9ucy5sZW5ndGggfHwgdG90YWxGaWxlcykpIHtcbiAgICAgICAgICAgICAgICBmZXRjaE9wdGlvbnMuaGVhZGVyc1snWC1DU1JGLVRPS0VOJ10gPSB0aGlzLmNzcmZUb2tlbjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChhY3Rpb25zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBpZiAoYWN0aW9ucy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVxdWVzdERhdGEuYXJncyA9IGFjdGlvbnNbMF0uYXJncztcbiAgICAgICAgICAgICAgICAgICAgdXJsICs9IGAvJHtlbmNvZGVVUklDb21wb25lbnQoYWN0aW9uc1swXS5uYW1lKX1gO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdXJsICs9ICcvX2JhdGNoJztcbiAgICAgICAgICAgICAgICAgICAgcmVxdWVzdERhdGEuYWN0aW9ucyA9IGFjdGlvbnM7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcbiAgICAgICAgICAgIGZvcm1EYXRhLmFwcGVuZCgnZGF0YScsIEpTT04uc3RyaW5naWZ5KHJlcXVlc3REYXRhKSk7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhmaWxlcykpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBsZW5ndGggPSB2YWx1ZS5sZW5ndGg7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgICAgICAgICBmb3JtRGF0YS5hcHBlbmQoa2V5LCB2YWx1ZVtpXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZmV0Y2hPcHRpb25zLmJvZHkgPSBmb3JtRGF0YTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwYXJhbXNTdHJpbmcgPSBwYXJhbXMudG9TdHJpbmcoKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHVybDogYCR7dXJsfSR7cGFyYW1zU3RyaW5nLmxlbmd0aCA+IDAgPyBgPyR7cGFyYW1zU3RyaW5nfWAgOiAnJ31gLFxuICAgICAgICAgICAgZmV0Y2hPcHRpb25zLFxuICAgICAgICB9O1xuICAgIH1cbiAgICB3aWxsRGF0YUZpdEluVXJsKHByb3BzSnNvbiwgdXBkYXRlZEpzb24sIHBhcmFtcywgY2hpbGRyZW5Kc29uLCBwcm9wc0Zyb21QYXJlbnRKc29uKSB7XG4gICAgICAgIGNvbnN0IHVybEVuY29kZWRKc29uRGF0YSA9IG5ldyBVUkxTZWFyY2hQYXJhbXMocHJvcHNKc29uICsgdXBkYXRlZEpzb24gKyBjaGlsZHJlbkpzb24gKyBwcm9wc0Zyb21QYXJlbnRKc29uKS50b1N0cmluZygpO1xuICAgICAgICByZXR1cm4gKHVybEVuY29kZWRKc29uRGF0YSArIHBhcmFtcy50b1N0cmluZygpKS5sZW5ndGggPCAxNTAwO1xuICAgIH1cbn1cblxuY2xhc3MgQmFja2VuZCB7XG4gICAgY29uc3RydWN0b3IodXJsLCBtZXRob2QgPSAncG9zdCcsIGNzcmZUb2tlbiA9IG51bGwpIHtcbiAgICAgICAgdGhpcy5yZXF1ZXN0QnVpbGRlciA9IG5ldyBSZXF1ZXN0QnVpbGRlcih1cmwsIG1ldGhvZCwgY3NyZlRva2VuKTtcbiAgICB9XG4gICAgbWFrZVJlcXVlc3QocHJvcHMsIGFjdGlvbnMsIHVwZGF0ZWQsIGNoaWxkcmVuLCB1cGRhdGVkUHJvcHNGcm9tUGFyZW50LCBmaWxlcykge1xuICAgICAgICBjb25zdCB7IHVybCwgZmV0Y2hPcHRpb25zIH0gPSB0aGlzLnJlcXVlc3RCdWlsZGVyLmJ1aWxkUmVxdWVzdChwcm9wcywgYWN0aW9ucywgdXBkYXRlZCwgY2hpbGRyZW4sIHVwZGF0ZWRQcm9wc0Zyb21QYXJlbnQsIGZpbGVzKTtcbiAgICAgICAgcmV0dXJuIG5ldyBCYWNrZW5kUmVxdWVzdChmZXRjaCh1cmwsIGZldGNoT3B0aW9ucyksIGFjdGlvbnMubWFwKChiYWNrZW5kQWN0aW9uKSA9PiBiYWNrZW5kQWN0aW9uLm5hbWUpLCBPYmplY3Qua2V5cyh1cGRhdGVkKSk7XG4gICAgfVxufVxuXG5jbGFzcyBTdGltdWx1c0VsZW1lbnREcml2ZXIge1xuICAgIGNvbnN0cnVjdG9yKGNvbnRyb2xsZXIpIHtcbiAgICAgICAgdGhpcy5jb250cm9sbGVyID0gY29udHJvbGxlcjtcbiAgICB9XG4gICAgZ2V0TW9kZWxOYW1lKGVsZW1lbnQpIHtcbiAgICAgICAgY29uc3QgbW9kZWxEaXJlY3RpdmUgPSBnZXRNb2RlbERpcmVjdGl2ZUZyb21FbGVtZW50KGVsZW1lbnQsIGZhbHNlKTtcbiAgICAgICAgaWYgKCFtb2RlbERpcmVjdGl2ZSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1vZGVsRGlyZWN0aXZlLmFjdGlvbjtcbiAgICB9XG4gICAgZ2V0Q29tcG9uZW50UHJvcHMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbnRyb2xsZXIucHJvcHNWYWx1ZTtcbiAgICB9XG4gICAgZ2V0RXZlbnRzVG9FbWl0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jb250cm9sbGVyLmV2ZW50c1RvRW1pdFZhbHVlO1xuICAgIH1cbiAgICBnZXRCcm93c2VyRXZlbnRzVG9EaXNwYXRjaCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29udHJvbGxlci5ldmVudHNUb0Rpc3BhdGNoVmFsdWU7XG4gICAgfVxufVxuXG5jbGFzcyBMb2FkaW5nUGx1Z2luIHtcbiAgICBhdHRhY2hUb0NvbXBvbmVudChjb21wb25lbnQpIHtcbiAgICAgICAgY29tcG9uZW50Lm9uKCdsb2FkaW5nLnN0YXRlOnN0YXJ0ZWQnLCAoZWxlbWVudCwgcmVxdWVzdCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zdGFydExvYWRpbmcoY29tcG9uZW50LCBlbGVtZW50LCByZXF1ZXN0KTtcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbXBvbmVudC5vbignbG9hZGluZy5zdGF0ZTpmaW5pc2hlZCcsIChlbGVtZW50KSA9PiB7XG4gICAgICAgICAgICB0aGlzLmZpbmlzaExvYWRpbmcoY29tcG9uZW50LCBlbGVtZW50KTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuZmluaXNoTG9hZGluZyhjb21wb25lbnQsIGNvbXBvbmVudC5lbGVtZW50KTtcbiAgICB9XG4gICAgc3RhcnRMb2FkaW5nKGNvbXBvbmVudCwgdGFyZ2V0RWxlbWVudCwgYmFja2VuZFJlcXVlc3QpIHtcbiAgICAgICAgdGhpcy5oYW5kbGVMb2FkaW5nVG9nZ2xlKGNvbXBvbmVudCwgdHJ1ZSwgdGFyZ2V0RWxlbWVudCwgYmFja2VuZFJlcXVlc3QpO1xuICAgIH1cbiAgICBmaW5pc2hMb2FkaW5nKGNvbXBvbmVudCwgdGFyZ2V0RWxlbWVudCkge1xuICAgICAgICB0aGlzLmhhbmRsZUxvYWRpbmdUb2dnbGUoY29tcG9uZW50LCBmYWxzZSwgdGFyZ2V0RWxlbWVudCwgbnVsbCk7XG4gICAgfVxuICAgIGhhbmRsZUxvYWRpbmdUb2dnbGUoY29tcG9uZW50LCBpc0xvYWRpbmcsIHRhcmdldEVsZW1lbnQsIGJhY2tlbmRSZXF1ZXN0KSB7XG4gICAgICAgIGlmIChpc0xvYWRpbmcpIHtcbiAgICAgICAgICAgIHRoaXMuYWRkQXR0cmlidXRlcyh0YXJnZXRFbGVtZW50LCBbJ2J1c3knXSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnJlbW92ZUF0dHJpYnV0ZXModGFyZ2V0RWxlbWVudCwgWydidXN5J10pO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZ2V0TG9hZGluZ0RpcmVjdGl2ZXMoY29tcG9uZW50LCB0YXJnZXRFbGVtZW50KS5mb3JFYWNoKCh7IGVsZW1lbnQsIGRpcmVjdGl2ZXMgfSkgPT4ge1xuICAgICAgICAgICAgaWYgKGlzTG9hZGluZykge1xuICAgICAgICAgICAgICAgIHRoaXMuYWRkQXR0cmlidXRlcyhlbGVtZW50LCBbJ2RhdGEtbGl2ZS1pcy1sb2FkaW5nJ10pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVBdHRyaWJ1dGVzKGVsZW1lbnQsIFsnZGF0YS1saXZlLWlzLWxvYWRpbmcnXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkaXJlY3RpdmVzLmZvckVhY2goKGRpcmVjdGl2ZSkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlTG9hZGluZ0RpcmVjdGl2ZShlbGVtZW50LCBpc0xvYWRpbmcsIGRpcmVjdGl2ZSwgYmFja2VuZFJlcXVlc3QpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBoYW5kbGVMb2FkaW5nRGlyZWN0aXZlKGVsZW1lbnQsIGlzTG9hZGluZywgZGlyZWN0aXZlLCBiYWNrZW5kUmVxdWVzdCkge1xuICAgICAgICBjb25zdCBmaW5hbEFjdGlvbiA9IHBhcnNlTG9hZGluZ0FjdGlvbihkaXJlY3RpdmUuYWN0aW9uLCBpc0xvYWRpbmcpO1xuICAgICAgICBjb25zdCB0YXJnZXRlZEFjdGlvbnMgPSBbXTtcbiAgICAgICAgY29uc3QgdGFyZ2V0ZWRNb2RlbHMgPSBbXTtcbiAgICAgICAgbGV0IGRlbGF5ID0gMDtcbiAgICAgICAgY29uc3QgdmFsaWRNb2RpZmllcnMgPSBuZXcgTWFwKCk7XG4gICAgICAgIHZhbGlkTW9kaWZpZXJzLnNldCgnZGVsYXknLCAobW9kaWZpZXIpID0+IHtcbiAgICAgICAgICAgIGlmICghaXNMb2FkaW5nKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGVsYXkgPSBtb2RpZmllci52YWx1ZSA/IE51bWJlci5wYXJzZUludChtb2RpZmllci52YWx1ZSkgOiAyMDA7XG4gICAgICAgIH0pO1xuICAgICAgICB2YWxpZE1vZGlmaWVycy5zZXQoJ2FjdGlvbicsIChtb2RpZmllcikgPT4ge1xuICAgICAgICAgICAgaWYgKCFtb2RpZmllci52YWx1ZSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVGhlIFwiYWN0aW9uXCIgaW4gZGF0YS1sb2FkaW5nIG11c3QgaGF2ZSBhbiBhY3Rpb24gbmFtZSAtIGUuZy4gYWN0aW9uKGZvbykuIEl0J3MgbWlzc2luZyBmb3IgXCIke2RpcmVjdGl2ZS5nZXRTdHJpbmcoKX1cImApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGFyZ2V0ZWRBY3Rpb25zLnB1c2gobW9kaWZpZXIudmFsdWUpO1xuICAgICAgICB9KTtcbiAgICAgICAgdmFsaWRNb2RpZmllcnMuc2V0KCdtb2RlbCcsIChtb2RpZmllcikgPT4ge1xuICAgICAgICAgICAgaWYgKCFtb2RpZmllci52YWx1ZSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVGhlIFwibW9kZWxcIiBpbiBkYXRhLWxvYWRpbmcgbXVzdCBoYXZlIGFuIGFjdGlvbiBuYW1lIC0gZS5nLiBtb2RlbChmb28pLiBJdCdzIG1pc3NpbmcgZm9yIFwiJHtkaXJlY3RpdmUuZ2V0U3RyaW5nKCl9XCJgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRhcmdldGVkTW9kZWxzLnB1c2gobW9kaWZpZXIudmFsdWUpO1xuICAgICAgICB9KTtcbiAgICAgICAgZGlyZWN0aXZlLm1vZGlmaWVycy5mb3JFYWNoKChtb2RpZmllcikgPT4ge1xuICAgICAgICAgICAgaWYgKHZhbGlkTW9kaWZpZXJzLmhhcyhtb2RpZmllci5uYW1lKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNhbGxhYmxlID0gdmFsaWRNb2RpZmllcnMuZ2V0KG1vZGlmaWVyLm5hbWUpID8/ICgoKSA9PiB7IH0pO1xuICAgICAgICAgICAgICAgIGNhbGxhYmxlKG1vZGlmaWVyKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gbW9kaWZpZXIgXCIke21vZGlmaWVyLm5hbWV9XCIgdXNlZCBpbiBkYXRhLWxvYWRpbmc9XCIke2RpcmVjdGl2ZS5nZXRTdHJpbmcoKX1cIi4gQXZhaWxhYmxlIG1vZGlmaWVycyBhcmU6ICR7QXJyYXkuZnJvbSh2YWxpZE1vZGlmaWVycy5rZXlzKCkpLmpvaW4oJywgJyl9LmApO1xuICAgICAgICB9KTtcbiAgICAgICAgaWYgKGlzTG9hZGluZyAmJlxuICAgICAgICAgICAgdGFyZ2V0ZWRBY3Rpb25zLmxlbmd0aCA+IDAgJiZcbiAgICAgICAgICAgIGJhY2tlbmRSZXF1ZXN0ICYmXG4gICAgICAgICAgICAhYmFja2VuZFJlcXVlc3QuY29udGFpbnNPbmVPZkFjdGlvbnModGFyZ2V0ZWRBY3Rpb25zKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc0xvYWRpbmcgJiZcbiAgICAgICAgICAgIHRhcmdldGVkTW9kZWxzLmxlbmd0aCA+IDAgJiZcbiAgICAgICAgICAgIGJhY2tlbmRSZXF1ZXN0ICYmXG4gICAgICAgICAgICAhYmFja2VuZFJlcXVlc3QuYXJlQW55TW9kZWxzVXBkYXRlZCh0YXJnZXRlZE1vZGVscykpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBsZXQgbG9hZGluZ0RpcmVjdGl2ZTtcbiAgICAgICAgc3dpdGNoIChmaW5hbEFjdGlvbikge1xuICAgICAgICAgICAgY2FzZSAnc2hvdyc6XG4gICAgICAgICAgICAgICAgbG9hZGluZ0RpcmVjdGl2ZSA9ICgpID0+IHRoaXMuc2hvd0VsZW1lbnQoZWxlbWVudCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdoaWRlJzpcbiAgICAgICAgICAgICAgICBsb2FkaW5nRGlyZWN0aXZlID0gKCkgPT4gdGhpcy5oaWRlRWxlbWVudChlbGVtZW50KTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2FkZENsYXNzJzpcbiAgICAgICAgICAgICAgICBsb2FkaW5nRGlyZWN0aXZlID0gKCkgPT4gdGhpcy5hZGRDbGFzcyhlbGVtZW50LCBkaXJlY3RpdmUuYXJncyk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdyZW1vdmVDbGFzcyc6XG4gICAgICAgICAgICAgICAgbG9hZGluZ0RpcmVjdGl2ZSA9ICgpID0+IHRoaXMucmVtb3ZlQ2xhc3MoZWxlbWVudCwgZGlyZWN0aXZlLmFyZ3MpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnYWRkQXR0cmlidXRlJzpcbiAgICAgICAgICAgICAgICBsb2FkaW5nRGlyZWN0aXZlID0gKCkgPT4gdGhpcy5hZGRBdHRyaWJ1dGVzKGVsZW1lbnQsIGRpcmVjdGl2ZS5hcmdzKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3JlbW92ZUF0dHJpYnV0ZSc6XG4gICAgICAgICAgICAgICAgbG9hZGluZ0RpcmVjdGl2ZSA9ICgpID0+IHRoaXMucmVtb3ZlQXR0cmlidXRlcyhlbGVtZW50LCBkaXJlY3RpdmUuYXJncyk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biBkYXRhLWxvYWRpbmcgYWN0aW9uIFwiJHtmaW5hbEFjdGlvbn1cImApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChkZWxheSkge1xuICAgICAgICAgICAgd2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChiYWNrZW5kUmVxdWVzdCAmJiAhYmFja2VuZFJlcXVlc3QuaXNSZXNvbHZlZCkge1xuICAgICAgICAgICAgICAgICAgICBsb2FkaW5nRGlyZWN0aXZlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgZGVsYXkpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGxvYWRpbmdEaXJlY3RpdmUoKTtcbiAgICB9XG4gICAgZ2V0TG9hZGluZ0RpcmVjdGl2ZXMoY29tcG9uZW50LCBlbGVtZW50KSB7XG4gICAgICAgIGNvbnN0IGxvYWRpbmdEaXJlY3RpdmVzID0gW107XG4gICAgICAgIGxldCBtYXRjaGluZ0VsZW1lbnRzID0gWy4uLkFycmF5LmZyb20oZWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKCdbZGF0YS1sb2FkaW5nXScpKV07XG4gICAgICAgIG1hdGNoaW5nRWxlbWVudHMgPSBtYXRjaGluZ0VsZW1lbnRzLmZpbHRlcigoZWx0KSA9PiBlbGVtZW50QmVsb25nc1RvVGhpc0NvbXBvbmVudChlbHQsIGNvbXBvbmVudCkpO1xuICAgICAgICBpZiAoZWxlbWVudC5oYXNBdHRyaWJ1dGUoJ2RhdGEtbG9hZGluZycpKSB7XG4gICAgICAgICAgICBtYXRjaGluZ0VsZW1lbnRzID0gW2VsZW1lbnQsIC4uLm1hdGNoaW5nRWxlbWVudHNdO1xuICAgICAgICB9XG4gICAgICAgIG1hdGNoaW5nRWxlbWVudHMuZm9yRWFjaCgoZWxlbWVudCkgPT4ge1xuICAgICAgICAgICAgaWYgKCEoZWxlbWVudCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSAmJiAhKGVsZW1lbnQgaW5zdGFuY2VvZiBTVkdFbGVtZW50KSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBFbGVtZW50IFR5cGUnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGRpcmVjdGl2ZXMgPSBwYXJzZURpcmVjdGl2ZXMoZWxlbWVudC5kYXRhc2V0LmxvYWRpbmcgfHwgJ3Nob3cnKTtcbiAgICAgICAgICAgIGxvYWRpbmdEaXJlY3RpdmVzLnB1c2goe1xuICAgICAgICAgICAgICAgIGVsZW1lbnQsXG4gICAgICAgICAgICAgICAgZGlyZWN0aXZlcyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGxvYWRpbmdEaXJlY3RpdmVzO1xuICAgIH1cbiAgICBzaG93RWxlbWVudChlbGVtZW50KSB7XG4gICAgICAgIGVsZW1lbnQuc3R5bGUuZGlzcGxheSA9ICdyZXZlcnQnO1xuICAgIH1cbiAgICBoaWRlRWxlbWVudChlbGVtZW50KSB7XG4gICAgICAgIGVsZW1lbnQuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICB9XG4gICAgYWRkQ2xhc3MoZWxlbWVudCwgY2xhc3Nlcykge1xuICAgICAgICBlbGVtZW50LmNsYXNzTGlzdC5hZGQoLi4uY29tYmluZVNwYWNlZEFycmF5KGNsYXNzZXMpKTtcbiAgICB9XG4gICAgcmVtb3ZlQ2xhc3MoZWxlbWVudCwgY2xhc3Nlcykge1xuICAgICAgICBlbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoLi4uY29tYmluZVNwYWNlZEFycmF5KGNsYXNzZXMpKTtcbiAgICAgICAgaWYgKGVsZW1lbnQuY2xhc3NMaXN0Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoJ2NsYXNzJyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgYWRkQXR0cmlidXRlcyhlbGVtZW50LCBhdHRyaWJ1dGVzKSB7XG4gICAgICAgIGF0dHJpYnV0ZXMuZm9yRWFjaCgoYXR0cmlidXRlKSA9PiB7XG4gICAgICAgICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZShhdHRyaWJ1dGUsICcnKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHJlbW92ZUF0dHJpYnV0ZXMoZWxlbWVudCwgYXR0cmlidXRlcykge1xuICAgICAgICBhdHRyaWJ1dGVzLmZvckVhY2goKGF0dHJpYnV0ZSkgPT4ge1xuICAgICAgICAgICAgZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoYXR0cmlidXRlKTtcbiAgICAgICAgfSk7XG4gICAgfVxufVxuY29uc3QgcGFyc2VMb2FkaW5nQWN0aW9uID0gKGFjdGlvbiwgaXNMb2FkaW5nKSA9PiB7XG4gICAgc3dpdGNoIChhY3Rpb24pIHtcbiAgICAgICAgY2FzZSAnc2hvdyc6XG4gICAgICAgICAgICByZXR1cm4gaXNMb2FkaW5nID8gJ3Nob3cnIDogJ2hpZGUnO1xuICAgICAgICBjYXNlICdoaWRlJzpcbiAgICAgICAgICAgIHJldHVybiBpc0xvYWRpbmcgPyAnaGlkZScgOiAnc2hvdyc7XG4gICAgICAgIGNhc2UgJ2FkZENsYXNzJzpcbiAgICAgICAgICAgIHJldHVybiBpc0xvYWRpbmcgPyAnYWRkQ2xhc3MnIDogJ3JlbW92ZUNsYXNzJztcbiAgICAgICAgY2FzZSAncmVtb3ZlQ2xhc3MnOlxuICAgICAgICAgICAgcmV0dXJuIGlzTG9hZGluZyA/ICdyZW1vdmVDbGFzcycgOiAnYWRkQ2xhc3MnO1xuICAgICAgICBjYXNlICdhZGRBdHRyaWJ1dGUnOlxuICAgICAgICAgICAgcmV0dXJuIGlzTG9hZGluZyA/ICdhZGRBdHRyaWJ1dGUnIDogJ3JlbW92ZUF0dHJpYnV0ZSc7XG4gICAgICAgIGNhc2UgJ3JlbW92ZUF0dHJpYnV0ZSc6XG4gICAgICAgICAgICByZXR1cm4gaXNMb2FkaW5nID8gJ3JlbW92ZUF0dHJpYnV0ZScgOiAnYWRkQXR0cmlidXRlJztcbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIGRhdGEtbG9hZGluZyBhY3Rpb24gXCIke2FjdGlvbn1cImApO1xufTtcblxuY2xhc3MgVmFsaWRhdGVkRmllbGRzUGx1Z2luIHtcbiAgICBhdHRhY2hUb0NvbXBvbmVudChjb21wb25lbnQpIHtcbiAgICAgICAgY29tcG9uZW50Lm9uKCdtb2RlbDpzZXQnLCAobW9kZWxOYW1lKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmhhbmRsZU1vZGVsU2V0KG1vZGVsTmFtZSwgY29tcG9uZW50LnZhbHVlU3RvcmUpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgaGFuZGxlTW9kZWxTZXQobW9kZWxOYW1lLCB2YWx1ZVN0b3JlKSB7XG4gICAgICAgIGlmICh2YWx1ZVN0b3JlLmhhcygndmFsaWRhdGVkRmllbGRzJykpIHtcbiAgICAgICAgICAgIGNvbnN0IHZhbGlkYXRlZEZpZWxkcyA9IFsuLi52YWx1ZVN0b3JlLmdldCgndmFsaWRhdGVkRmllbGRzJyldO1xuICAgICAgICAgICAgaWYgKCF2YWxpZGF0ZWRGaWVsZHMuaW5jbHVkZXMobW9kZWxOYW1lKSkge1xuICAgICAgICAgICAgICAgIHZhbGlkYXRlZEZpZWxkcy5wdXNoKG1vZGVsTmFtZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YWx1ZVN0b3JlLnNldCgndmFsaWRhdGVkRmllbGRzJywgdmFsaWRhdGVkRmllbGRzKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuY2xhc3MgUGFnZVVubG9hZGluZ1BsdWdpbiB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMuaXNDb25uZWN0ZWQgPSBmYWxzZTtcbiAgICB9XG4gICAgYXR0YWNoVG9Db21wb25lbnQoY29tcG9uZW50KSB7XG4gICAgICAgIGNvbXBvbmVudC5vbigncmVuZGVyOnN0YXJ0ZWQnLCAoaHRtbCwgcmVzcG9uc2UsIGNvbnRyb2xzKSA9PiB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuaXNDb25uZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICBjb250cm9scy5zaG91bGRSZW5kZXIgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGNvbXBvbmVudC5vbignY29ubmVjdCcsICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuaXNDb25uZWN0ZWQgPSB0cnVlO1xuICAgICAgICB9KTtcbiAgICAgICAgY29tcG9uZW50Lm9uKCdkaXNjb25uZWN0JywgKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5pc0Nvbm5lY3RlZCA9IGZhbHNlO1xuICAgICAgICB9KTtcbiAgICB9XG59XG5cbmNsYXNzIFBvbGxpbmdEaXJlY3RvciB7XG4gICAgY29uc3RydWN0b3IoY29tcG9uZW50KSB7XG4gICAgICAgIHRoaXMuaXNQb2xsaW5nQWN0aXZlID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5wb2xsaW5nSW50ZXJ2YWxzID0gW107XG4gICAgICAgIHRoaXMuY29tcG9uZW50ID0gY29tcG9uZW50O1xuICAgIH1cbiAgICBhZGRQb2xsKGFjdGlvbk5hbWUsIGR1cmF0aW9uKSB7XG4gICAgICAgIHRoaXMucG9sbHMucHVzaCh7IGFjdGlvbk5hbWUsIGR1cmF0aW9uIH0pO1xuICAgICAgICBpZiAodGhpcy5pc1BvbGxpbmdBY3RpdmUpIHtcbiAgICAgICAgICAgIHRoaXMuaW5pdGlhdGVQb2xsKGFjdGlvbk5hbWUsIGR1cmF0aW9uKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzdGFydEFsbFBvbGxpbmcoKSB7XG4gICAgICAgIGlmICh0aGlzLmlzUG9sbGluZ0FjdGl2ZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuaXNQb2xsaW5nQWN0aXZlID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5wb2xscy5mb3JFYWNoKCh7IGFjdGlvbk5hbWUsIGR1cmF0aW9uIH0pID0+IHtcbiAgICAgICAgICAgIHRoaXMuaW5pdGlhdGVQb2xsKGFjdGlvbk5hbWUsIGR1cmF0aW9uKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHN0b3BBbGxQb2xsaW5nKCkge1xuICAgICAgICB0aGlzLmlzUG9sbGluZ0FjdGl2ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLnBvbGxpbmdJbnRlcnZhbHMuZm9yRWFjaCgoaW50ZXJ2YWwpID0+IHtcbiAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwoaW50ZXJ2YWwpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgY2xlYXJQb2xsaW5nKCkge1xuICAgICAgICB0aGlzLnN0b3BBbGxQb2xsaW5nKCk7XG4gICAgICAgIHRoaXMucG9sbHMgPSBbXTtcbiAgICAgICAgdGhpcy5zdGFydEFsbFBvbGxpbmcoKTtcbiAgICB9XG4gICAgaW5pdGlhdGVQb2xsKGFjdGlvbk5hbWUsIGR1cmF0aW9uKSB7XG4gICAgICAgIGxldCBjYWxsYmFjaztcbiAgICAgICAgaWYgKGFjdGlvbk5hbWUgPT09ICckcmVuZGVyJykge1xuICAgICAgICAgICAgY2FsbGJhY2sgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5jb21wb25lbnQucmVuZGVyKCk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY2FsbGJhY2sgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5jb21wb25lbnQuYWN0aW9uKGFjdGlvbk5hbWUsIHt9LCAwKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdGltZXIgPSB3aW5kb3cuc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgfSwgZHVyYXRpb24pO1xuICAgICAgICB0aGlzLnBvbGxpbmdJbnRlcnZhbHMucHVzaCh0aW1lcik7XG4gICAgfVxufVxuXG5jbGFzcyBQb2xsaW5nUGx1Z2luIHtcbiAgICBhdHRhY2hUb0NvbXBvbmVudChjb21wb25lbnQpIHtcbiAgICAgICAgdGhpcy5lbGVtZW50ID0gY29tcG9uZW50LmVsZW1lbnQ7XG4gICAgICAgIHRoaXMucG9sbGluZ0RpcmVjdG9yID0gbmV3IFBvbGxpbmdEaXJlY3Rvcihjb21wb25lbnQpO1xuICAgICAgICB0aGlzLmluaXRpYWxpemVQb2xsaW5nKCk7XG4gICAgICAgIGNvbXBvbmVudC5vbignY29ubmVjdCcsICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMucG9sbGluZ0RpcmVjdG9yLnN0YXJ0QWxsUG9sbGluZygpO1xuICAgICAgICB9KTtcbiAgICAgICAgY29tcG9uZW50Lm9uKCdkaXNjb25uZWN0JywgKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5wb2xsaW5nRGlyZWN0b3Iuc3RvcEFsbFBvbGxpbmcoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbXBvbmVudC5vbigncmVuZGVyOmZpbmlzaGVkJywgKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5pbml0aWFsaXplUG9sbGluZygpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgYWRkUG9sbChhY3Rpb25OYW1lLCBkdXJhdGlvbikge1xuICAgICAgICB0aGlzLnBvbGxpbmdEaXJlY3Rvci5hZGRQb2xsKGFjdGlvbk5hbWUsIGR1cmF0aW9uKTtcbiAgICB9XG4gICAgY2xlYXJQb2xsaW5nKCkge1xuICAgICAgICB0aGlzLnBvbGxpbmdEaXJlY3Rvci5jbGVhclBvbGxpbmcoKTtcbiAgICB9XG4gICAgaW5pdGlhbGl6ZVBvbGxpbmcoKSB7XG4gICAgICAgIHRoaXMuY2xlYXJQb2xsaW5nKCk7XG4gICAgICAgIGlmICh0aGlzLmVsZW1lbnQuZGF0YXNldC5wb2xsID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByYXdQb2xsQ29uZmlnID0gdGhpcy5lbGVtZW50LmRhdGFzZXQucG9sbDtcbiAgICAgICAgY29uc3QgZGlyZWN0aXZlcyA9IHBhcnNlRGlyZWN0aXZlcyhyYXdQb2xsQ29uZmlnIHx8ICckcmVuZGVyJyk7XG4gICAgICAgIGRpcmVjdGl2ZXMuZm9yRWFjaCgoZGlyZWN0aXZlKSA9PiB7XG4gICAgICAgICAgICBsZXQgZHVyYXRpb24gPSAyMDAwO1xuICAgICAgICAgICAgZGlyZWN0aXZlLm1vZGlmaWVycy5mb3JFYWNoKChtb2RpZmllcikgPT4ge1xuICAgICAgICAgICAgICAgIHN3aXRjaCAobW9kaWZpZXIubmFtZSkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlICdkZWxheSc6XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobW9kaWZpZXIudmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkdXJhdGlvbiA9IE51bWJlci5wYXJzZUludChtb2RpZmllci52YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybihgVW5rbm93biBtb2RpZmllciBcIiR7bW9kaWZpZXIubmFtZX1cIiBpbiBkYXRhLXBvbGwgXCIke3Jhd1BvbGxDb25maWd9XCIuYCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLmFkZFBvbGwoZGlyZWN0aXZlLmFjdGlvbiwgZHVyYXRpb24pO1xuICAgICAgICB9KTtcbiAgICB9XG59XG5cbmNsYXNzIFNldFZhbHVlT250b01vZGVsRmllbGRzUGx1Z2luIHtcbiAgICBhdHRhY2hUb0NvbXBvbmVudChjb21wb25lbnQpIHtcbiAgICAgICAgdGhpcy5zeW5jaHJvbml6ZVZhbHVlT2ZNb2RlbEZpZWxkcyhjb21wb25lbnQpO1xuICAgICAgICBjb21wb25lbnQub24oJ3JlbmRlcjpmaW5pc2hlZCcsICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc3luY2hyb25pemVWYWx1ZU9mTW9kZWxGaWVsZHMoY29tcG9uZW50KTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHN5bmNocm9uaXplVmFsdWVPZk1vZGVsRmllbGRzKGNvbXBvbmVudCkge1xuICAgICAgICBjb21wb25lbnQuZWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKCdbZGF0YS1tb2RlbF0nKS5mb3JFYWNoKChlbGVtZW50KSA9PiB7XG4gICAgICAgICAgICBpZiAoIShlbGVtZW50IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGVsZW1lbnQgdXNpbmcgZGF0YS1tb2RlbC4nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlbGVtZW50IGluc3RhbmNlb2YgSFRNTEZvcm1FbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFlbGVtZW50QmVsb25nc1RvVGhpc0NvbXBvbmVudChlbGVtZW50LCBjb21wb25lbnQpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgbW9kZWxEaXJlY3RpdmUgPSBnZXRNb2RlbERpcmVjdGl2ZUZyb21FbGVtZW50KGVsZW1lbnQpO1xuICAgICAgICAgICAgaWYgKCFtb2RlbERpcmVjdGl2ZSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IG1vZGVsTmFtZSA9IG1vZGVsRGlyZWN0aXZlLmFjdGlvbjtcbiAgICAgICAgICAgIGlmIChjb21wb25lbnQuZ2V0VW5zeW5jZWRNb2RlbHMoKS5pbmNsdWRlcyhtb2RlbE5hbWUpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGNvbXBvbmVudC52YWx1ZVN0b3JlLmhhcyhtb2RlbE5hbWUpKSB7XG4gICAgICAgICAgICAgICAgc2V0VmFsdWVPbkVsZW1lbnQoZWxlbWVudCwgY29tcG9uZW50LnZhbHVlU3RvcmUuZ2V0KG1vZGVsTmFtZSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MU2VsZWN0RWxlbWVudCAmJiAhZWxlbWVudC5tdWx0aXBsZSkge1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC52YWx1ZVN0b3JlLnNldChtb2RlbE5hbWUsIGdldFZhbHVlRnJvbUVsZW1lbnQoZWxlbWVudCwgY29tcG9uZW50LnZhbHVlU3RvcmUpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBnZXRNb2RlbEJpbmRpbmcgKG1vZGVsRGlyZWN0aXZlKSB7XG4gICAgbGV0IHNob3VsZFJlbmRlciA9IHRydWU7XG4gICAgbGV0IHRhcmdldEV2ZW50TmFtZSA9IG51bGw7XG4gICAgbGV0IGRlYm91bmNlID0gZmFsc2U7XG4gICAgbW9kZWxEaXJlY3RpdmUubW9kaWZpZXJzLmZvckVhY2goKG1vZGlmaWVyKSA9PiB7XG4gICAgICAgIHN3aXRjaCAobW9kaWZpZXIubmFtZSkge1xuICAgICAgICAgICAgY2FzZSAnb24nOlxuICAgICAgICAgICAgICAgIGlmICghbW9kaWZpZXIudmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBUaGUgXCJvblwiIG1vZGlmaWVyIGluICR7bW9kZWxEaXJlY3RpdmUuZ2V0U3RyaW5nKCl9IHJlcXVpcmVzIGEgdmFsdWUgLSBlLmcuIG9uKGNoYW5nZSkuYCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICghWydpbnB1dCcsICdjaGFuZ2UnXS5pbmNsdWRlcyhtb2RpZmllci52YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBUaGUgXCJvblwiIG1vZGlmaWVyIGluICR7bW9kZWxEaXJlY3RpdmUuZ2V0U3RyaW5nKCl9IG9ubHkgYWNjZXB0cyB0aGUgYXJndW1lbnRzIFwiaW5wdXRcIiBvciBcImNoYW5nZVwiLmApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0YXJnZXRFdmVudE5hbWUgPSBtb2RpZmllci52YWx1ZTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ25vcmVuZGVyJzpcbiAgICAgICAgICAgICAgICBzaG91bGRSZW5kZXIgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2RlYm91bmNlJzpcbiAgICAgICAgICAgICAgICBkZWJvdW5jZSA9IG1vZGlmaWVyLnZhbHVlID8gTnVtYmVyLnBhcnNlSW50KG1vZGlmaWVyLnZhbHVlKSA6IHRydWU7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biBtb2RpZmllciBcIiR7bW9kaWZpZXIubmFtZX1cIiBpbiBkYXRhLW1vZGVsPVwiJHttb2RlbERpcmVjdGl2ZS5nZXRTdHJpbmcoKX1cIi5gKTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IFttb2RlbE5hbWUsIGlubmVyTW9kZWxOYW1lXSA9IG1vZGVsRGlyZWN0aXZlLmFjdGlvbi5zcGxpdCgnOicpO1xuICAgIHJldHVybiB7XG4gICAgICAgIG1vZGVsTmFtZSxcbiAgICAgICAgaW5uZXJNb2RlbE5hbWU6IGlubmVyTW9kZWxOYW1lIHx8IG51bGwsXG4gICAgICAgIHNob3VsZFJlbmRlcixcbiAgICAgICAgZGVib3VuY2UsXG4gICAgICAgIHRhcmdldEV2ZW50TmFtZSxcbiAgICB9O1xufVxuXG5mdW5jdGlvbiBpc1ZhbHVlRW1wdHkodmFsdWUpIHtcbiAgICBpZiAobnVsbCA9PT0gdmFsdWUgfHwgdmFsdWUgPT09ICcnIHx8IHVuZGVmaW5lZCA9PT0gdmFsdWUgfHwgKEFycmF5LmlzQXJyYXkodmFsdWUpICYmIHZhbHVlLmxlbmd0aCA9PT0gMCkpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXModmFsdWUpKSB7XG4gICAgICAgIGlmICghaXNWYWx1ZUVtcHR5KHZhbHVlW2tleV0pKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG59XG5mdW5jdGlvbiB0b1F1ZXJ5U3RyaW5nKGRhdGEpIHtcbiAgICBjb25zdCBidWlsZFF1ZXJ5U3RyaW5nRW50cmllcyA9IChkYXRhLCBlbnRyaWVzID0ge30sIGJhc2VLZXkgPSAnJykgPT4ge1xuICAgICAgICBPYmplY3QuZW50cmllcyhkYXRhKS5mb3JFYWNoKChbaUtleSwgaVZhbHVlXSkgPT4ge1xuICAgICAgICAgICAgY29uc3Qga2V5ID0gYmFzZUtleSA9PT0gJycgPyBpS2V5IDogYCR7YmFzZUtleX1bJHtpS2V5fV1gO1xuICAgICAgICAgICAgaWYgKCcnID09PSBiYXNlS2V5ICYmIGlzVmFsdWVFbXB0eShpVmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgZW50cmllc1trZXldID0gJyc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChudWxsICE9PSBpVmFsdWUpIHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGlWYWx1ZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgICAgICAgICAgZW50cmllcyA9IHsgLi4uZW50cmllcywgLi4uYnVpbGRRdWVyeVN0cmluZ0VudHJpZXMoaVZhbHVlLCBlbnRyaWVzLCBrZXkpIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBlbnRyaWVzW2tleV0gPSBlbmNvZGVVUklDb21wb25lbnQoaVZhbHVlKVxuICAgICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoLyUyMC9nLCAnKycpXG4gICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgvJTJDL2csICcsJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGVudHJpZXM7XG4gICAgfTtcbiAgICBjb25zdCBlbnRyaWVzID0gYnVpbGRRdWVyeVN0cmluZ0VudHJpZXMoZGF0YSk7XG4gICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKGVudHJpZXMpXG4gICAgICAgIC5tYXAoKFtrZXksIHZhbHVlXSkgPT4gYCR7a2V5fT0ke3ZhbHVlfWApXG4gICAgICAgIC5qb2luKCcmJyk7XG59XG5mdW5jdGlvbiBmcm9tUXVlcnlTdHJpbmcoc2VhcmNoKSB7XG4gICAgc2VhcmNoID0gc2VhcmNoLnJlcGxhY2UoJz8nLCAnJyk7XG4gICAgaWYgKHNlYXJjaCA9PT0gJycpXG4gICAgICAgIHJldHVybiB7fTtcbiAgICBjb25zdCBpbnNlcnREb3ROb3RhdGVkVmFsdWVJbnRvRGF0YSA9IChrZXksIHZhbHVlLCBkYXRhKSA9PiB7XG4gICAgICAgIGNvbnN0IFtmaXJzdCwgc2Vjb25kLCAuLi5yZXN0XSA9IGtleS5zcGxpdCgnLicpO1xuICAgICAgICBpZiAoIXNlY29uZCkge1xuICAgICAgICAgICAgZGF0YVtrZXldID0gdmFsdWU7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGRhdGFbZmlyc3RdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGRhdGFbZmlyc3RdID0gTnVtYmVyLmlzTmFOKE51bWJlci5wYXJzZUludChzZWNvbmQpKSA/IHt9IDogW107XG4gICAgICAgIH1cbiAgICAgICAgaW5zZXJ0RG90Tm90YXRlZFZhbHVlSW50b0RhdGEoW3NlY29uZCwgLi4ucmVzdF0uam9pbignLicpLCB2YWx1ZSwgZGF0YVtmaXJzdF0pO1xuICAgIH07XG4gICAgY29uc3QgZW50cmllcyA9IHNlYXJjaC5zcGxpdCgnJicpLm1hcCgoaSkgPT4gaS5zcGxpdCgnPScpKTtcbiAgICBjb25zdCBkYXRhID0ge307XG4gICAgZW50cmllcy5mb3JFYWNoKChba2V5LCB2YWx1ZV0pID0+IHtcbiAgICAgICAgdmFsdWUgPSBkZWNvZGVVUklDb21wb25lbnQodmFsdWUucmVwbGFjZSgvXFwrL2csICclMjAnKSk7XG4gICAgICAgIGlmICgha2V5LmluY2x1ZGVzKCdbJykpIHtcbiAgICAgICAgICAgIGRhdGFba2V5XSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaWYgKCcnID09PSB2YWx1ZSlcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICBjb25zdCBkb3ROb3RhdGVkS2V5ID0ga2V5LnJlcGxhY2UoL1xcWy9nLCAnLicpLnJlcGxhY2UoL10vZywgJycpO1xuICAgICAgICAgICAgaW5zZXJ0RG90Tm90YXRlZFZhbHVlSW50b0RhdGEoZG90Tm90YXRlZEtleSwgdmFsdWUsIGRhdGEpO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIGRhdGE7XG59XG5jbGFzcyBVcmxVdGlscyBleHRlbmRzIFVSTCB7XG4gICAgaGFzKGtleSkge1xuICAgICAgICBjb25zdCBkYXRhID0gdGhpcy5nZXREYXRhKCk7XG4gICAgICAgIHJldHVybiBPYmplY3Qua2V5cyhkYXRhKS5pbmNsdWRlcyhrZXkpO1xuICAgIH1cbiAgICBzZXQoa2V5LCB2YWx1ZSkge1xuICAgICAgICBjb25zdCBkYXRhID0gdGhpcy5nZXREYXRhKCk7XG4gICAgICAgIGRhdGFba2V5XSA9IHZhbHVlO1xuICAgICAgICB0aGlzLnNldERhdGEoZGF0YSk7XG4gICAgfVxuICAgIGdldChrZXkpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0RGF0YSgpW2tleV07XG4gICAgfVxuICAgIHJlbW92ZShrZXkpIHtcbiAgICAgICAgY29uc3QgZGF0YSA9IHRoaXMuZ2V0RGF0YSgpO1xuICAgICAgICBkZWxldGUgZGF0YVtrZXldO1xuICAgICAgICB0aGlzLnNldERhdGEoZGF0YSk7XG4gICAgfVxuICAgIGdldERhdGEoKSB7XG4gICAgICAgIGlmICghdGhpcy5zZWFyY2gpIHtcbiAgICAgICAgICAgIHJldHVybiB7fTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZnJvbVF1ZXJ5U3RyaW5nKHRoaXMuc2VhcmNoKTtcbiAgICB9XG4gICAgc2V0RGF0YShkYXRhKSB7XG4gICAgICAgIHRoaXMuc2VhcmNoID0gdG9RdWVyeVN0cmluZyhkYXRhKTtcbiAgICB9XG59XG5jbGFzcyBIaXN0b3J5U3RyYXRlZ3kge1xuICAgIHN0YXRpYyByZXBsYWNlKHVybCkge1xuICAgICAgICBoaXN0b3J5LnJlcGxhY2VTdGF0ZShoaXN0b3J5LnN0YXRlLCAnJywgdXJsKTtcbiAgICB9XG59XG5cbmNsYXNzIFF1ZXJ5U3RyaW5nUGx1Z2luIHtcbiAgICBjb25zdHJ1Y3RvcihtYXBwaW5nKSB7XG4gICAgICAgIHRoaXMubWFwcGluZyA9IG1hcHBpbmc7XG4gICAgfVxuICAgIGF0dGFjaFRvQ29tcG9uZW50KGNvbXBvbmVudCkge1xuICAgICAgICBjb21wb25lbnQub24oJ3JlbmRlcjpmaW5pc2hlZCcsIChjb21wb25lbnQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHVybFV0aWxzID0gbmV3IFVybFV0aWxzKHdpbmRvdy5sb2NhdGlvbi5ocmVmKTtcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRVcmwgPSB1cmxVdGlscy50b1N0cmluZygpO1xuICAgICAgICAgICAgT2JqZWN0LmVudHJpZXModGhpcy5tYXBwaW5nKS5mb3JFYWNoKChbcHJvcCwgbWFwcGluZ10pID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGNvbXBvbmVudC52YWx1ZVN0b3JlLmdldChwcm9wKTtcbiAgICAgICAgICAgICAgICB1cmxVdGlscy5zZXQobWFwcGluZy5uYW1lLCB2YWx1ZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlmIChjdXJyZW50VXJsICE9PSB1cmxVdGlscy50b1N0cmluZygpKSB7XG4gICAgICAgICAgICAgICAgSGlzdG9yeVN0cmF0ZWd5LnJlcGxhY2UodXJsVXRpbHMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG59XG5cbmNsYXNzIENoaWxkQ29tcG9uZW50UGx1Z2luIHtcbiAgICBjb25zdHJ1Y3Rvcihjb21wb25lbnQpIHtcbiAgICAgICAgdGhpcy5wYXJlbnRNb2RlbEJpbmRpbmdzID0gW107XG4gICAgICAgIHRoaXMuY29tcG9uZW50ID0gY29tcG9uZW50O1xuICAgICAgICBjb25zdCBtb2RlbERpcmVjdGl2ZXMgPSBnZXRBbGxNb2RlbERpcmVjdGl2ZUZyb21FbGVtZW50cyh0aGlzLmNvbXBvbmVudC5lbGVtZW50KTtcbiAgICAgICAgdGhpcy5wYXJlbnRNb2RlbEJpbmRpbmdzID0gbW9kZWxEaXJlY3RpdmVzLm1hcChnZXRNb2RlbEJpbmRpbmcpO1xuICAgIH1cbiAgICBhdHRhY2hUb0NvbXBvbmVudChjb21wb25lbnQpIHtcbiAgICAgICAgY29tcG9uZW50Lm9uKCdyZXF1ZXN0OnN0YXJ0ZWQnLCAocmVxdWVzdERhdGEpID0+IHtcbiAgICAgICAgICAgIHJlcXVlc3REYXRhLmNoaWxkcmVuID0gdGhpcy5nZXRDaGlsZHJlbkZpbmdlcnByaW50cygpO1xuICAgICAgICB9KTtcbiAgICAgICAgY29tcG9uZW50Lm9uKCdtb2RlbDpzZXQnLCAobW9kZWwsIHZhbHVlKSA9PiB7XG4gICAgICAgICAgICB0aGlzLm5vdGlmeVBhcmVudE1vZGVsQ2hhbmdlKG1vZGVsLCB2YWx1ZSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBnZXRDaGlsZHJlbkZpbmdlcnByaW50cygpIHtcbiAgICAgICAgY29uc3QgZmluZ2VycHJpbnRzID0ge307XG4gICAgICAgIHRoaXMuZ2V0Q2hpbGRyZW4oKS5mb3JFYWNoKChjaGlsZCkgPT4ge1xuICAgICAgICAgICAgaWYgKCFjaGlsZC5pZCkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignbWlzc2luZyBpZCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZmluZ2VycHJpbnRzW2NoaWxkLmlkXSA9IHtcbiAgICAgICAgICAgICAgICBmaW5nZXJwcmludDogY2hpbGQuZmluZ2VycHJpbnQsXG4gICAgICAgICAgICAgICAgdGFnOiBjaGlsZC5lbGVtZW50LnRhZ05hbWUudG9Mb3dlckNhc2UoKSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gZmluZ2VycHJpbnRzO1xuICAgIH1cbiAgICBub3RpZnlQYXJlbnRNb2RlbENoYW5nZShtb2RlbE5hbWUsIHZhbHVlKSB7XG4gICAgICAgIGNvbnN0IHBhcmVudENvbXBvbmVudCA9IGZpbmRQYXJlbnQodGhpcy5jb21wb25lbnQpO1xuICAgICAgICBpZiAoIXBhcmVudENvbXBvbmVudCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucGFyZW50TW9kZWxCaW5kaW5ncy5mb3JFYWNoKChtb2RlbEJpbmRpbmcpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGNoaWxkTW9kZWxOYW1lID0gbW9kZWxCaW5kaW5nLmlubmVyTW9kZWxOYW1lIHx8ICd2YWx1ZSc7XG4gICAgICAgICAgICBpZiAoY2hpbGRNb2RlbE5hbWUgIT09IG1vZGVsTmFtZSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHBhcmVudENvbXBvbmVudC5zZXQobW9kZWxCaW5kaW5nLm1vZGVsTmFtZSwgdmFsdWUsIG1vZGVsQmluZGluZy5zaG91bGRSZW5kZXIsIG1vZGVsQmluZGluZy5kZWJvdW5jZSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBnZXRDaGlsZHJlbigpIHtcbiAgICAgICAgcmV0dXJuIGZpbmRDaGlsZHJlbih0aGlzLmNvbXBvbmVudCk7XG4gICAgfVxufVxuXG5jbGFzcyBMYXp5UGx1Z2luIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5pbnRlcnNlY3Rpb25PYnNlcnZlciA9IG51bGw7XG4gICAgfVxuICAgIGF0dGFjaFRvQ29tcG9uZW50KGNvbXBvbmVudCkge1xuICAgICAgICBpZiAoJ2xhenknICE9PSBjb21wb25lbnQuZWxlbWVudC5hdHRyaWJ1dGVzLmdldE5hbWVkSXRlbSgnbG9hZGluZycpPy52YWx1ZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbXBvbmVudC5vbignY29ubmVjdCcsICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuZ2V0T2JzZXJ2ZXIoKS5vYnNlcnZlKGNvbXBvbmVudC5lbGVtZW50KTtcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbXBvbmVudC5vbignZGlzY29ubmVjdCcsICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuaW50ZXJzZWN0aW9uT2JzZXJ2ZXI/LnVub2JzZXJ2ZShjb21wb25lbnQuZWxlbWVudCk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBnZXRPYnNlcnZlcigpIHtcbiAgICAgICAgaWYgKCF0aGlzLmludGVyc2VjdGlvbk9ic2VydmVyKSB7XG4gICAgICAgICAgICB0aGlzLmludGVyc2VjdGlvbk9ic2VydmVyID0gbmV3IEludGVyc2VjdGlvbk9ic2VydmVyKChlbnRyaWVzLCBvYnNlcnZlcikgPT4ge1xuICAgICAgICAgICAgICAgIGVudHJpZXMuZm9yRWFjaCgoZW50cnkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVudHJ5LmlzSW50ZXJzZWN0aW5nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbnRyeS50YXJnZXQuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoJ2xpdmU6YXBwZWFyJykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZXIudW5vYnNlcnZlKGVudHJ5LnRhcmdldCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmludGVyc2VjdGlvbk9ic2VydmVyO1xuICAgIH1cbn1cblxuY2xhc3MgTGl2ZUNvbnRyb2xsZXJEZWZhdWx0IGV4dGVuZHMgQ29udHJvbGxlciB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMucGVuZGluZ0FjdGlvblRyaWdnZXJNb2RlbEVsZW1lbnQgPSBudWxsO1xuICAgICAgICB0aGlzLmVsZW1lbnRFdmVudExpc3RlbmVycyA9IFtcbiAgICAgICAgICAgIHsgZXZlbnQ6ICdpbnB1dCcsIGNhbGxiYWNrOiAoZXZlbnQpID0+IHRoaXMuaGFuZGxlSW5wdXRFdmVudChldmVudCkgfSxcbiAgICAgICAgICAgIHsgZXZlbnQ6ICdjaGFuZ2UnLCBjYWxsYmFjazogKGV2ZW50KSA9PiB0aGlzLmhhbmRsZUNoYW5nZUV2ZW50KGV2ZW50KSB9LFxuICAgICAgICBdO1xuICAgICAgICB0aGlzLnBlbmRpbmdGaWxlcyA9IHt9O1xuICAgIH1cbiAgICBpbml0aWFsaXplKCkge1xuICAgICAgICB0aGlzLm11dGF0aW9uT2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcih0aGlzLm9uTXV0YXRpb25zLmJpbmQodGhpcykpO1xuICAgICAgICB0aGlzLmNyZWF0ZUNvbXBvbmVudCgpO1xuICAgIH1cbiAgICBjb25uZWN0KCkge1xuICAgICAgICB0aGlzLmNvbm5lY3RDb21wb25lbnQoKTtcbiAgICAgICAgdGhpcy5tdXRhdGlvbk9ic2VydmVyLm9ic2VydmUodGhpcy5lbGVtZW50LCB7XG4gICAgICAgICAgICBhdHRyaWJ1dGVzOiB0cnVlLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgZGlzY29ubmVjdCgpIHtcbiAgICAgICAgdGhpcy5kaXNjb25uZWN0Q29tcG9uZW50KCk7XG4gICAgICAgIHRoaXMubXV0YXRpb25PYnNlcnZlci5kaXNjb25uZWN0KCk7XG4gICAgfVxuICAgIHVwZGF0ZShldmVudCkge1xuICAgICAgICBpZiAoZXZlbnQudHlwZSA9PT0gJ2lucHV0JyB8fCBldmVudC50eXBlID09PSAnY2hhbmdlJykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBTaW5jZSBMaXZlQ29tcG9uZW50cyAyLjMsIHlvdSBubyBsb25nZXIgbmVlZCBkYXRhLWFjdGlvbj1cImxpdmUjdXBkYXRlXCIgb24gZm9ybSBlbGVtZW50cy4gRm91bmQgb24gZWxlbWVudDogJHtnZXRFbGVtZW50QXNUYWdUZXh0KGV2ZW50LmN1cnJlbnRUYXJnZXQpfWApO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudXBkYXRlTW9kZWxGcm9tRWxlbWVudEV2ZW50KGV2ZW50LmN1cnJlbnRUYXJnZXQsIG51bGwpO1xuICAgIH1cbiAgICBhY3Rpb24oZXZlbnQpIHtcbiAgICAgICAgY29uc3QgcGFyYW1zID0gZXZlbnQucGFyYW1zO1xuICAgICAgICBpZiAoIXBhcmFtcy5hY3Rpb24pIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgTm8gYWN0aW9uIG5hbWUgcHJvdmlkZWQgb24gZWxlbWVudDogJHtnZXRFbGVtZW50QXNUYWdUZXh0KGV2ZW50LmN1cnJlbnRUYXJnZXQpfS4gRGlkIHlvdSBmb3JnZXQgdG8gYWRkIHRoZSBcImRhdGEtbGl2ZS1hY3Rpb24tcGFyYW1cIiBhdHRyaWJ1dGU/YCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmF3QWN0aW9uID0gcGFyYW1zLmFjdGlvbjtcbiAgICAgICAgY29uc3QgYWN0aW9uQXJncyA9IHsgLi4ucGFyYW1zIH07XG4gICAgICAgIGRlbGV0ZSBhY3Rpb25BcmdzLmFjdGlvbjtcbiAgICAgICAgY29uc3QgZGlyZWN0aXZlcyA9IHBhcnNlRGlyZWN0aXZlcyhyYXdBY3Rpb24pO1xuICAgICAgICBsZXQgZGVib3VuY2UgPSBmYWxzZTtcbiAgICAgICAgZGlyZWN0aXZlcy5mb3JFYWNoKChkaXJlY3RpdmUpID0+IHtcbiAgICAgICAgICAgIGxldCBwZW5kaW5nRmlsZXMgPSB7fTtcbiAgICAgICAgICAgIGNvbnN0IHZhbGlkTW9kaWZpZXJzID0gbmV3IE1hcCgpO1xuICAgICAgICAgICAgdmFsaWRNb2RpZmllcnMuc2V0KCdzdG9wJywgKCkgPT4ge1xuICAgICAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB2YWxpZE1vZGlmaWVycy5zZXQoJ3NlbGYnLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGV2ZW50LnRhcmdldCAhPT0gZXZlbnQuY3VycmVudFRhcmdldCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB2YWxpZE1vZGlmaWVycy5zZXQoJ2RlYm91bmNlJywgKG1vZGlmaWVyKSA9PiB7XG4gICAgICAgICAgICAgICAgZGVib3VuY2UgPSBtb2RpZmllci52YWx1ZSA/IE51bWJlci5wYXJzZUludChtb2RpZmllci52YWx1ZSkgOiB0cnVlO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB2YWxpZE1vZGlmaWVycy5zZXQoJ2ZpbGVzJywgKG1vZGlmaWVyKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCFtb2RpZmllci52YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICBwZW5kaW5nRmlsZXMgPSB0aGlzLnBlbmRpbmdGaWxlcztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5wZW5kaW5nRmlsZXNbbW9kaWZpZXIudmFsdWVdKSB7XG4gICAgICAgICAgICAgICAgICAgIHBlbmRpbmdGaWxlc1ttb2RpZmllci52YWx1ZV0gPSB0aGlzLnBlbmRpbmdGaWxlc1ttb2RpZmllci52YWx1ZV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBkaXJlY3RpdmUubW9kaWZpZXJzLmZvckVhY2goKG1vZGlmaWVyKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHZhbGlkTW9kaWZpZXJzLmhhcyhtb2RpZmllci5uYW1lKSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjYWxsYWJsZSA9IHZhbGlkTW9kaWZpZXJzLmdldChtb2RpZmllci5uYW1lKSA/PyAoKCkgPT4geyB9KTtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGFibGUobW9kaWZpZXIpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybihgVW5rbm93biBtb2RpZmllciAke21vZGlmaWVyLm5hbWV9IGluIGFjdGlvbiBcIiR7cmF3QWN0aW9ufVwiLiBBdmFpbGFibGUgbW9kaWZpZXJzIGFyZTogJHtBcnJheS5mcm9tKHZhbGlkTW9kaWZpZXJzLmtleXMoKSkuam9pbignLCAnKX0uYCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgW2tleSwgaW5wdXRdIG9mIE9iamVjdC5lbnRyaWVzKHBlbmRpbmdGaWxlcykpIHtcbiAgICAgICAgICAgICAgICBpZiAoaW5wdXQuZmlsZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb21wb25lbnQuZmlsZXMoa2V5LCBpbnB1dCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLnBlbmRpbmdGaWxlc1trZXldO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5jb21wb25lbnQuYWN0aW9uKGRpcmVjdGl2ZS5hY3Rpb24sIGFjdGlvbkFyZ3MsIGRlYm91bmNlKTtcbiAgICAgICAgICAgIGlmIChnZXRNb2RlbERpcmVjdGl2ZUZyb21FbGVtZW50KGV2ZW50LmN1cnJlbnRUYXJnZXQsIGZhbHNlKSkge1xuICAgICAgICAgICAgICAgIHRoaXMucGVuZGluZ0FjdGlvblRyaWdnZXJNb2RlbEVsZW1lbnQgPSBldmVudC5jdXJyZW50VGFyZ2V0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgJHJlbmRlcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29tcG9uZW50LnJlbmRlcigpO1xuICAgIH1cbiAgICBlbWl0KGV2ZW50KSB7XG4gICAgICAgIHRoaXMuZ2V0RW1pdERpcmVjdGl2ZXMoZXZlbnQpLmZvckVhY2goKHsgbmFtZSwgZGF0YSwgbmFtZU1hdGNoIH0pID0+IHtcbiAgICAgICAgICAgIHRoaXMuY29tcG9uZW50LmVtaXQobmFtZSwgZGF0YSwgbmFtZU1hdGNoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGVtaXRVcChldmVudCkge1xuICAgICAgICB0aGlzLmdldEVtaXREaXJlY3RpdmVzKGV2ZW50KS5mb3JFYWNoKCh7IG5hbWUsIGRhdGEsIG5hbWVNYXRjaCB9KSA9PiB7XG4gICAgICAgICAgICB0aGlzLmNvbXBvbmVudC5lbWl0VXAobmFtZSwgZGF0YSwgbmFtZU1hdGNoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGVtaXRTZWxmKGV2ZW50KSB7XG4gICAgICAgIHRoaXMuZ2V0RW1pdERpcmVjdGl2ZXMoZXZlbnQpLmZvckVhY2goKHsgbmFtZSwgZGF0YSB9KSA9PiB7XG4gICAgICAgICAgICB0aGlzLmNvbXBvbmVudC5lbWl0U2VsZihuYW1lLCBkYXRhKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgICR1cGRhdGVNb2RlbChtb2RlbCwgdmFsdWUsIHNob3VsZFJlbmRlciA9IHRydWUsIGRlYm91bmNlID0gdHJ1ZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5jb21wb25lbnQuc2V0KG1vZGVsLCB2YWx1ZSwgc2hvdWxkUmVuZGVyLCBkZWJvdW5jZSk7XG4gICAgfVxuICAgIHByb3BzVXBkYXRlZEZyb21QYXJlbnRWYWx1ZUNoYW5nZWQoKSB7XG4gICAgICAgIHRoaXMuY29tcG9uZW50Ll91cGRhdGVGcm9tUGFyZW50UHJvcHModGhpcy5wcm9wc1VwZGF0ZWRGcm9tUGFyZW50VmFsdWUpO1xuICAgIH1cbiAgICBmaW5nZXJwcmludFZhbHVlQ2hhbmdlZCgpIHtcbiAgICAgICAgdGhpcy5jb21wb25lbnQuZmluZ2VycHJpbnQgPSB0aGlzLmZpbmdlcnByaW50VmFsdWU7XG4gICAgfVxuICAgIGdldEVtaXREaXJlY3RpdmVzKGV2ZW50KSB7XG4gICAgICAgIGNvbnN0IHBhcmFtcyA9IGV2ZW50LnBhcmFtcztcbiAgICAgICAgaWYgKCFwYXJhbXMuZXZlbnQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgTm8gZXZlbnQgbmFtZSBwcm92aWRlZCBvbiBlbGVtZW50OiAke2dldEVsZW1lbnRBc1RhZ1RleHQoZXZlbnQuY3VycmVudFRhcmdldCl9LiBEaWQgeW91IGZvcmdldCB0byBhZGQgdGhlIFwiZGF0YS1saXZlLWV2ZW50LXBhcmFtXCIgYXR0cmlidXRlP2ApO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGV2ZW50SW5mbyA9IHBhcmFtcy5ldmVudDtcbiAgICAgICAgY29uc3QgZXZlbnRBcmdzID0geyAuLi5wYXJhbXMgfTtcbiAgICAgICAgZGVsZXRlIGV2ZW50QXJncy5ldmVudDtcbiAgICAgICAgY29uc3QgZGlyZWN0aXZlcyA9IHBhcnNlRGlyZWN0aXZlcyhldmVudEluZm8pO1xuICAgICAgICBjb25zdCBlbWl0cyA9IFtdO1xuICAgICAgICBkaXJlY3RpdmVzLmZvckVhY2goKGRpcmVjdGl2ZSkgPT4ge1xuICAgICAgICAgICAgbGV0IG5hbWVNYXRjaCA9IG51bGw7XG4gICAgICAgICAgICBkaXJlY3RpdmUubW9kaWZpZXJzLmZvckVhY2goKG1vZGlmaWVyKSA9PiB7XG4gICAgICAgICAgICAgICAgc3dpdGNoIChtb2RpZmllci5uYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ25hbWUnOlxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZU1hdGNoID0gbW9kaWZpZXIudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biBtb2RpZmllciAke21vZGlmaWVyLm5hbWV9IGluIGV2ZW50IFwiJHtldmVudEluZm99XCIuYCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBlbWl0cy5wdXNoKHtcbiAgICAgICAgICAgICAgICBuYW1lOiBkaXJlY3RpdmUuYWN0aW9uLFxuICAgICAgICAgICAgICAgIGRhdGE6IGV2ZW50QXJncyxcbiAgICAgICAgICAgICAgICBuYW1lTWF0Y2gsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBlbWl0cztcbiAgICB9XG4gICAgY3JlYXRlQ29tcG9uZW50KCkge1xuICAgICAgICBjb25zdCBpZCA9IHRoaXMuZWxlbWVudC5pZCB8fCBudWxsO1xuICAgICAgICB0aGlzLmNvbXBvbmVudCA9IG5ldyBDb21wb25lbnQodGhpcy5lbGVtZW50LCB0aGlzLm5hbWVWYWx1ZSwgdGhpcy5wcm9wc1ZhbHVlLCB0aGlzLmxpc3RlbmVyc1ZhbHVlLCBpZCwgTGl2ZUNvbnRyb2xsZXJEZWZhdWx0LmJhY2tlbmRGYWN0b3J5KHRoaXMpLCBuZXcgU3RpbXVsdXNFbGVtZW50RHJpdmVyKHRoaXMpKTtcbiAgICAgICAgdGhpcy5wcm94aWVkQ29tcG9uZW50ID0gcHJveGlmeUNvbXBvbmVudCh0aGlzLmNvbXBvbmVudCk7XG4gICAgICAgIHRoaXMuZWxlbWVudC5fX2NvbXBvbmVudCA9IHRoaXMucHJveGllZENvbXBvbmVudDtcbiAgICAgICAgaWYgKHRoaXMuaGFzRGVib3VuY2VWYWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5jb21wb25lbnQuZGVmYXVsdERlYm91bmNlID0gdGhpcy5kZWJvdW5jZVZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHBsdWdpbnMgPSBbXG4gICAgICAgICAgICBuZXcgTG9hZGluZ1BsdWdpbigpLFxuICAgICAgICAgICAgbmV3IExhenlQbHVnaW4oKSxcbiAgICAgICAgICAgIG5ldyBWYWxpZGF0ZWRGaWVsZHNQbHVnaW4oKSxcbiAgICAgICAgICAgIG5ldyBQYWdlVW5sb2FkaW5nUGx1Z2luKCksXG4gICAgICAgICAgICBuZXcgUG9sbGluZ1BsdWdpbigpLFxuICAgICAgICAgICAgbmV3IFNldFZhbHVlT250b01vZGVsRmllbGRzUGx1Z2luKCksXG4gICAgICAgICAgICBuZXcgUXVlcnlTdHJpbmdQbHVnaW4odGhpcy5xdWVyeU1hcHBpbmdWYWx1ZSksXG4gICAgICAgICAgICBuZXcgQ2hpbGRDb21wb25lbnRQbHVnaW4odGhpcy5jb21wb25lbnQpLFxuICAgICAgICBdO1xuICAgICAgICBwbHVnaW5zLmZvckVhY2goKHBsdWdpbikgPT4ge1xuICAgICAgICAgICAgdGhpcy5jb21wb25lbnQuYWRkUGx1Z2luKHBsdWdpbik7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBjb25uZWN0Q29tcG9uZW50KCkge1xuICAgICAgICB0aGlzLmNvbXBvbmVudC5jb25uZWN0KCk7XG4gICAgICAgIHRoaXMubXV0YXRpb25PYnNlcnZlci5vYnNlcnZlKHRoaXMuZWxlbWVudCwge1xuICAgICAgICAgICAgYXR0cmlidXRlczogdHJ1ZSxcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuZWxlbWVudEV2ZW50TGlzdGVuZXJzLmZvckVhY2goKHsgZXZlbnQsIGNhbGxiYWNrIH0pID0+IHtcbiAgICAgICAgICAgIHRoaXMuY29tcG9uZW50LmVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihldmVudCwgY2FsbGJhY2spO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KCdjb25uZWN0Jyk7XG4gICAgfVxuICAgIGRpc2Nvbm5lY3RDb21wb25lbnQoKSB7XG4gICAgICAgIHRoaXMuY29tcG9uZW50LmRpc2Nvbm5lY3QoKTtcbiAgICAgICAgdGhpcy5lbGVtZW50RXZlbnRMaXN0ZW5lcnMuZm9yRWFjaCgoeyBldmVudCwgY2FsbGJhY2sgfSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5jb21wb25lbnQuZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50LCBjYWxsYmFjayk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoJ2Rpc2Nvbm5lY3QnKTtcbiAgICB9XG4gICAgaGFuZGxlSW5wdXRFdmVudChldmVudCkge1xuICAgICAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQ7XG4gICAgICAgIGlmICghdGFyZ2V0KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy51cGRhdGVNb2RlbEZyb21FbGVtZW50RXZlbnQodGFyZ2V0LCAnaW5wdXQnKTtcbiAgICB9XG4gICAgaGFuZGxlQ2hhbmdlRXZlbnQoZXZlbnQpIHtcbiAgICAgICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0O1xuICAgICAgICBpZiAoIXRhcmdldCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudXBkYXRlTW9kZWxGcm9tRWxlbWVudEV2ZW50KHRhcmdldCwgJ2NoYW5nZScpO1xuICAgIH1cbiAgICB1cGRhdGVNb2RlbEZyb21FbGVtZW50RXZlbnQoZWxlbWVudCwgZXZlbnROYW1lKSB7XG4gICAgICAgIGlmICghZWxlbWVudEJlbG9uZ3NUb1RoaXNDb21wb25lbnQoZWxlbWVudCwgdGhpcy5jb21wb25lbnQpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCEoZWxlbWVudCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDb3VsZCBub3QgdXBkYXRlIG1vZGVsIGZvciBub24gSFRNTEVsZW1lbnQnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZWxlbWVudCBpbnN0YW5jZW9mIEhUTUxJbnB1dEVsZW1lbnQgJiYgZWxlbWVudC50eXBlID09PSAnZmlsZScpIHtcbiAgICAgICAgICAgIGNvbnN0IGtleSA9IGVsZW1lbnQubmFtZTtcbiAgICAgICAgICAgIGlmIChlbGVtZW50LmZpbGVzPy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnBlbmRpbmdGaWxlc1trZXldID0gZWxlbWVudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMucGVuZGluZ0ZpbGVzW2tleV0pIHtcbiAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy5wZW5kaW5nRmlsZXNba2V5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCBtb2RlbERpcmVjdGl2ZSA9IGdldE1vZGVsRGlyZWN0aXZlRnJvbUVsZW1lbnQoZWxlbWVudCwgZmFsc2UpO1xuICAgICAgICBpZiAoIW1vZGVsRGlyZWN0aXZlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbW9kZWxCaW5kaW5nID0gZ2V0TW9kZWxCaW5kaW5nKG1vZGVsRGlyZWN0aXZlKTtcbiAgICAgICAgaWYgKCFtb2RlbEJpbmRpbmcudGFyZ2V0RXZlbnROYW1lKSB7XG4gICAgICAgICAgICBtb2RlbEJpbmRpbmcudGFyZ2V0RXZlbnROYW1lID0gJ2lucHV0JztcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5wZW5kaW5nQWN0aW9uVHJpZ2dlck1vZGVsRWxlbWVudCA9PT0gZWxlbWVudCkge1xuICAgICAgICAgICAgbW9kZWxCaW5kaW5nLnNob3VsZFJlbmRlciA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChldmVudE5hbWUgPT09ICdjaGFuZ2UnICYmIG1vZGVsQmluZGluZy50YXJnZXRFdmVudE5hbWUgPT09ICdpbnB1dCcpIHtcbiAgICAgICAgICAgIG1vZGVsQmluZGluZy50YXJnZXRFdmVudE5hbWUgPSAnY2hhbmdlJztcbiAgICAgICAgfVxuICAgICAgICBpZiAoZXZlbnROYW1lICYmIG1vZGVsQmluZGluZy50YXJnZXRFdmVudE5hbWUgIT09IGV2ZW50TmFtZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChmYWxzZSA9PT0gbW9kZWxCaW5kaW5nLmRlYm91bmNlKSB7XG4gICAgICAgICAgICBpZiAobW9kZWxCaW5kaW5nLnRhcmdldEV2ZW50TmFtZSA9PT0gJ2lucHV0Jykge1xuICAgICAgICAgICAgICAgIG1vZGVsQmluZGluZy5kZWJvdW5jZSA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBtb2RlbEJpbmRpbmcuZGVib3VuY2UgPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGZpbmFsVmFsdWUgPSBnZXRWYWx1ZUZyb21FbGVtZW50KGVsZW1lbnQsIHRoaXMuY29tcG9uZW50LnZhbHVlU3RvcmUpO1xuICAgICAgICB0aGlzLmNvbXBvbmVudC5zZXQobW9kZWxCaW5kaW5nLm1vZGVsTmFtZSwgZmluYWxWYWx1ZSwgbW9kZWxCaW5kaW5nLnNob3VsZFJlbmRlciwgbW9kZWxCaW5kaW5nLmRlYm91bmNlKTtcbiAgICB9XG4gICAgZGlzcGF0Y2hFdmVudChuYW1lLCBkZXRhaWwgPSB7fSwgY2FuQnViYmxlID0gdHJ1ZSwgY2FuY2VsYWJsZSA9IGZhbHNlKSB7XG4gICAgICAgIGRldGFpbC5jb250cm9sbGVyID0gdGhpcztcbiAgICAgICAgZGV0YWlsLmNvbXBvbmVudCA9IHRoaXMucHJveGllZENvbXBvbmVudDtcbiAgICAgICAgdGhpcy5kaXNwYXRjaChuYW1lLCB7IGRldGFpbCwgcHJlZml4OiAnbGl2ZScsIGNhbmNlbGFibGUsIGJ1YmJsZXM6IGNhbkJ1YmJsZSB9KTtcbiAgICB9XG4gICAgb25NdXRhdGlvbnMobXV0YXRpb25zKSB7XG4gICAgICAgIG11dGF0aW9ucy5mb3JFYWNoKChtdXRhdGlvbikgPT4ge1xuICAgICAgICAgICAgaWYgKG11dGF0aW9uLnR5cGUgPT09ICdhdHRyaWJ1dGVzJyAmJlxuICAgICAgICAgICAgICAgIG11dGF0aW9uLmF0dHJpYnV0ZU5hbWUgPT09ICdpZCcgJiZcbiAgICAgICAgICAgICAgICB0aGlzLmVsZW1lbnQuaWQgIT09IHRoaXMuY29tcG9uZW50LmlkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kaXNjb25uZWN0Q29tcG9uZW50KCk7XG4gICAgICAgICAgICAgICAgdGhpcy5jcmVhdGVDb21wb25lbnQoKTtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbm5lY3RDb21wb25lbnQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxufVxuTGl2ZUNvbnRyb2xsZXJEZWZhdWx0LnZhbHVlcyA9IHtcbiAgICBuYW1lOiBTdHJpbmcsXG4gICAgdXJsOiBTdHJpbmcsXG4gICAgcHJvcHM6IHsgdHlwZTogT2JqZWN0LCBkZWZhdWx0OiB7fSB9LFxuICAgIHByb3BzVXBkYXRlZEZyb21QYXJlbnQ6IHsgdHlwZTogT2JqZWN0LCBkZWZhdWx0OiB7fSB9LFxuICAgIGNzcmY6IFN0cmluZyxcbiAgICBsaXN0ZW5lcnM6IHsgdHlwZTogQXJyYXksIGRlZmF1bHQ6IFtdIH0sXG4gICAgZXZlbnRzVG9FbWl0OiB7IHR5cGU6IEFycmF5LCBkZWZhdWx0OiBbXSB9LFxuICAgIGV2ZW50c1RvRGlzcGF0Y2g6IHsgdHlwZTogQXJyYXksIGRlZmF1bHQ6IFtdIH0sXG4gICAgZGVib3VuY2U6IHsgdHlwZTogTnVtYmVyLCBkZWZhdWx0OiAxNTAgfSxcbiAgICBmaW5nZXJwcmludDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICcnIH0sXG4gICAgcmVxdWVzdE1ldGhvZDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICdwb3N0JyB9LFxuICAgIHF1ZXJ5TWFwcGluZzogeyB0eXBlOiBPYmplY3QsIGRlZmF1bHQ6IHt9IH0sXG59O1xuTGl2ZUNvbnRyb2xsZXJEZWZhdWx0LmJhY2tlbmRGYWN0b3J5ID0gKGNvbnRyb2xsZXIpID0+IG5ldyBCYWNrZW5kKGNvbnRyb2xsZXIudXJsVmFsdWUsIGNvbnRyb2xsZXIucmVxdWVzdE1ldGhvZFZhbHVlLCBjb250cm9sbGVyLmNzcmZWYWx1ZSk7XG5cbmV4cG9ydCB7IENvbXBvbmVudCwgTGl2ZUNvbnRyb2xsZXJEZWZhdWx0IGFzIGRlZmF1bHQsIGdldENvbXBvbmVudCB9O1xuIiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQge307IiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQge307IiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQge307IiwiaW1wb3J0IHsgQ29udHJvbGxlciB9IGZyb20gJ0Bob3R3aXJlZC9zdGltdWx1cyc7XG5pbXBvcnQgeyByZWdpc3RlcmFibGVzLCBDaGFydCB9IGZyb20gJ2NoYXJ0LmpzJztcblxuaWYgKHJlZ2lzdGVyYWJsZXMpIHtcbiAgICBDaGFydC5yZWdpc3RlciguLi5yZWdpc3RlcmFibGVzKTtcbn1cbmxldCBpc0NoYXJ0SW5pdGlhbGl6ZWQgPSBmYWxzZTtcbmNsYXNzIGRlZmF1bHRfMSBleHRlbmRzIENvbnRyb2xsZXIge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICB0aGlzLmNoYXJ0ID0gbnVsbDtcbiAgICB9XG4gICAgY29ubmVjdCgpIHtcbiAgICAgICAgaWYgKCFpc0NoYXJ0SW5pdGlhbGl6ZWQpIHtcbiAgICAgICAgICAgIGlzQ2hhcnRJbml0aWFsaXplZCA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoJ2luaXQnLCB7XG4gICAgICAgICAgICAgICAgQ2hhcnQsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoISh0aGlzLmVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MQ2FudmFzRWxlbWVudCkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBlbGVtZW50Jyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcGF5bG9hZCA9IHRoaXMudmlld1ZhbHVlO1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShwYXlsb2FkLm9wdGlvbnMpICYmIDAgPT09IHBheWxvYWQub3B0aW9ucy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHBheWxvYWQub3B0aW9ucyA9IHt9O1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudCgncHJlLWNvbm5lY3QnLCB7XG4gICAgICAgICAgICBvcHRpb25zOiBwYXlsb2FkLm9wdGlvbnMsXG4gICAgICAgICAgICBjb25maWc6IHBheWxvYWQsXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBjYW52YXNDb250ZXh0ID0gdGhpcy5lbGVtZW50LmdldENvbnRleHQoJzJkJyk7XG4gICAgICAgIGlmICghY2FudmFzQ29udGV4dCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDb3VsZCBub3QgZ2V0Q29udGV4dCgpIGZyb20gRWxlbWVudCcpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2hhcnQgPSBuZXcgQ2hhcnQoY2FudmFzQ29udGV4dCwgcGF5bG9hZCk7XG4gICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudCgnY29ubmVjdCcsIHsgY2hhcnQ6IHRoaXMuY2hhcnQgfSk7XG4gICAgfVxuICAgIHZpZXdWYWx1ZUNoYW5nZWQoKSB7XG4gICAgICAgIGlmICh0aGlzLmNoYXJ0KSB7XG4gICAgICAgICAgICBjb25zdCB2aWV3VmFsdWUgPSB7IGRhdGE6IHRoaXMudmlld1ZhbHVlLmRhdGEsIG9wdGlvbnM6IHRoaXMudmlld1ZhbHVlLm9wdGlvbnMgfTtcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZpZXdWYWx1ZS5vcHRpb25zKSAmJiAwID09PSB2aWV3VmFsdWUub3B0aW9ucy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICB2aWV3VmFsdWUub3B0aW9ucyA9IHt9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KCd2aWV3LXZhbHVlLWNoYW5nZScsIHZpZXdWYWx1ZSk7XG4gICAgICAgICAgICB0aGlzLmNoYXJ0LmRhdGEgPSB2aWV3VmFsdWUuZGF0YTtcbiAgICAgICAgICAgIHRoaXMuY2hhcnQub3B0aW9ucyA9IHZpZXdWYWx1ZS5vcHRpb25zO1xuICAgICAgICAgICAgdGhpcy5jaGFydC51cGRhdGUoKTtcbiAgICAgICAgICAgIGNvbnN0IHBhcmVudEVsZW1lbnQgPSB0aGlzLmVsZW1lbnQucGFyZW50RWxlbWVudDtcbiAgICAgICAgICAgIGlmIChwYXJlbnRFbGVtZW50ICYmIHRoaXMuY2hhcnQub3B0aW9ucy5yZXNwb25zaXZlKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgb3JpZ2luYWxXaWR0aCA9IHBhcmVudEVsZW1lbnQuc3R5bGUud2lkdGg7XG4gICAgICAgICAgICAgICAgcGFyZW50RWxlbWVudC5zdHlsZS53aWR0aCA9IGAke3BhcmVudEVsZW1lbnQub2Zmc2V0V2lkdGggKyAxfXB4YDtcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50RWxlbWVudC5zdHlsZS53aWR0aCA9IG9yaWdpbmFsV2lkdGg7XG4gICAgICAgICAgICAgICAgfSwgMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgZGlzcGF0Y2hFdmVudChuYW1lLCBwYXlsb2FkKSB7XG4gICAgICAgIHRoaXMuZGlzcGF0Y2gobmFtZSwgeyBkZXRhaWw6IHBheWxvYWQsIHByZWZpeDogJ2NoYXJ0anMnIH0pO1xuICAgIH1cbn1cbmRlZmF1bHRfMS52YWx1ZXMgPSB7XG4gICAgdmlldzogT2JqZWN0LFxufTtcblxuZXhwb3J0IHsgZGVmYXVsdF8xIGFzIGRlZmF1bHQgfTtcbiJdLCJuYW1lcyI6WyJCczVVdGlscyIsInN0YXJ0U3RpbXVsdXNBcHAiLCJhcHAiLCJnbG9iYWwiLCIkIiwialF1ZXJ5Iiwid2luZG93IiwicmVxdWlyZSIsImJvb3RzdHJhcCIsImJzNVV0aWxzIiwiUmFwaGFlbCIsImFjZSIsIkRyb3B6b25lIiwiY2FyZ29iYXkiLCJnZW5lcmFsIiwidG9nZ2xlIiwicHNjIiwiYWpheE1vZGFsIiwibWVkaWFDaG9vc2VyIiwib3JkZXIiLCJwcm9kdWN0IiwiaW5pdCIsImRlZmluZSIsImJvb3RzdHJhcEFwcCIsImNsaWNrIiwiZWwiLCJUb2FzdCIsInNob3ciLCJ0eXBlIiwiaWNvbiIsInRpdGxlIiwiaHRtbCIsImNvbnRlbnQiLCJkYXRhIiwiYnV0dG9ucyIsInRleHQiLCJoYW5kbGVyIiwibmF2aWdhdG9yIiwiY2xpcGJvYXJkIiwid3JpdGVUZXh0IiwiZGVsYXkiLCJkaXNtaXNzaWJsZSIsImNvbnNvbGUiLCJsb2ciLCJvbiIsImUiLCJ0YXJnZXQiLCJwYXJlbnQiLCJhdHRyIiwibG9jYWxTdG9yYWdlIiwic2V0SXRlbSIsImxhc3RUYWIiLCJnZXRJdGVtIiwidGFiIiwibGFzdFRhYkRvYyIsImZpbmQiLCJjaGFuZ2UiLCJnZXRKU09OIiwibXVsdGlzZWxlY3QiLCJzdWJtaXRBbGxMZWZ0Iiwic3VibWl0QWxsUmlnaHQiLCJzZWFyY2giLCJsZWZ0IiwicmlnaHQiLCJmaXJlU2VhcmNoIiwidmFsdWUiLCJsZW5ndGgiLCJzdW1tZXJub3RlIiwiaGVpZ2h0IiwidG9vbGJhciIsIkVtaXR0ZXIiLCJjYW1lbGl6ZSIsImNvbnRlbnRMb2FkZWQiLCJkZXRlY3RWZXJ0aWNhbFNxdWFzaCIsImRyYXdJbWFnZUlPU0ZpeCIsIm5vb3AiLCJ3aXRob3V0IiwiX19zbGljZSIsInNsaWNlIiwiX19oYXNQcm9wIiwiaGFzT3duUHJvcGVydHkiLCJfX2V4dGVuZHMiLCJjaGlsZCIsImtleSIsImNhbGwiLCJjdG9yIiwiY29uc3RydWN0b3IiLCJwcm90b3R5cGUiLCJfX3N1cGVyX18iLCJhZGRFdmVudExpc3RlbmVyIiwiZXZlbnQiLCJmbiIsIl9jYWxsYmFja3MiLCJwdXNoIiwiZW1pdCIsImFyZ3MiLCJjYWxsYmFjayIsImNhbGxiYWNrcyIsIl9pIiwiX2xlbiIsImFyZ3VtZW50cyIsImFwcGx5IiwicmVtb3ZlTGlzdGVuZXIiLCJvZmYiLCJyZW1vdmVBbGxMaXN0ZW5lcnMiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwiaSIsInNwbGljZSIsIl9zdXBlciIsImV4dGVuZCIsInJlc29sdmVPcHRpb24iLCJldmVudHMiLCJkZWZhdWx0T3B0aW9ucyIsInVybCIsIm1ldGhvZCIsIndpdGhDcmVkZW50aWFscyIsInBhcmFsbGVsVXBsb2FkcyIsInVwbG9hZE11bHRpcGxlIiwibWF4RmlsZXNpemUiLCJwYXJhbU5hbWUiLCJjcmVhdGVJbWFnZVRodW1ibmFpbHMiLCJtYXhUaHVtYm5haWxGaWxlc2l6ZSIsInRodW1ibmFpbFdpZHRoIiwidGh1bWJuYWlsSGVpZ2h0IiwiZmlsZXNpemVCYXNlIiwibWF4RmlsZXMiLCJwYXJhbXMiLCJjbGlja2FibGUiLCJpZ25vcmVIaWRkZW5GaWxlcyIsImFjY2VwdGVkRmlsZXMiLCJhY2NlcHRlZE1pbWVUeXBlcyIsImF1dG9Qcm9jZXNzUXVldWUiLCJhdXRvUXVldWUiLCJhZGRSZW1vdmVMaW5rcyIsInByZXZpZXdzQ29udGFpbmVyIiwiaGlkZGVuSW5wdXRDb250YWluZXIiLCJjYXB0dXJlIiwiZGljdERlZmF1bHRNZXNzYWdlIiwiZGljdEZhbGxiYWNrTWVzc2FnZSIsImRpY3RGYWxsYmFja1RleHQiLCJkaWN0RmlsZVRvb0JpZyIsImRpY3RJbnZhbGlkRmlsZVR5cGUiLCJkaWN0UmVzcG9uc2VFcnJvciIsImRpY3RDYW5jZWxVcGxvYWQiLCJkaWN0Q2FuY2VsVXBsb2FkQ29uZmlybWF0aW9uIiwiZGljdFJlbW92ZUZpbGUiLCJkaWN0UmVtb3ZlRmlsZUNvbmZpcm1hdGlvbiIsImRpY3RNYXhGaWxlc0V4Y2VlZGVkIiwiYWNjZXB0IiwiZmlsZSIsImRvbmUiLCJmb3JjZUZhbGxiYWNrIiwiZmFsbGJhY2siLCJtZXNzYWdlRWxlbWVudCIsInNwYW4iLCJfcmVmIiwiZWxlbWVudCIsImNsYXNzTmFtZSIsImdldEVsZW1lbnRzQnlUYWdOYW1lIiwidGVzdCIsImNyZWF0ZUVsZW1lbnQiLCJhcHBlbmRDaGlsZCIsInRleHRDb250ZW50Iiwib3B0aW9ucyIsImlubmVyVGV4dCIsImdldEZhbGxiYWNrRm9ybSIsInJlc2l6ZSIsImluZm8iLCJzcmNSYXRpbyIsInRyZ1JhdGlvIiwic3JjWCIsInNyY1kiLCJzcmNXaWR0aCIsIndpZHRoIiwic3JjSGVpZ2h0Iiwib3B0V2lkdGgiLCJvcHRIZWlnaHQiLCJ0cmdIZWlnaHQiLCJ0cmdXaWR0aCIsImRyb3AiLCJjbGFzc0xpc3QiLCJyZW1vdmUiLCJkcmFnc3RhcnQiLCJkcmFnZW5kIiwiZHJhZ2VudGVyIiwiYWRkIiwiZHJhZ292ZXIiLCJkcmFnbGVhdmUiLCJwYXN0ZSIsInJlc2V0IiwiYWRkZWRmaWxlIiwibm9kZSIsInJlbW92ZUZpbGVFdmVudCIsInJlbW92ZUxpbmsiLCJfaiIsIl9rIiwiX2xlbjEiLCJfbGVuMiIsIl9yZWYxIiwiX3JlZjIiLCJfcmVzdWx0cyIsInByZXZpZXdFbGVtZW50IiwicHJldmlld1RlbXBsYXRlIiwidHJpbSIsInF1ZXJ5U2VsZWN0b3JBbGwiLCJuYW1lIiwiaW5uZXJIVE1MIiwiZmlsZXNpemUiLCJzaXplIiwiX3JlbW92ZUxpbmsiLCJfdGhpcyIsInByZXZlbnREZWZhdWx0Iiwic3RvcFByb3BhZ2F0aW9uIiwic3RhdHVzIiwiVVBMT0FESU5HIiwiY29uZmlybSIsInJlbW92ZUZpbGUiLCJyZW1vdmVkZmlsZSIsInBhcmVudE5vZGUiLCJyZW1vdmVDaGlsZCIsIl91cGRhdGVNYXhGaWxlc1JlYWNoZWRDbGFzcyIsInRodW1ibmFpbCIsImRhdGFVcmwiLCJ0aHVtYm5haWxFbGVtZW50IiwiYWx0Iiwic3JjIiwic2V0VGltZW91dCIsImVycm9yIiwibWVzc2FnZSIsImVycm9ybXVsdGlwbGUiLCJwcm9jZXNzaW5nIiwicHJvY2Vzc2luZ211bHRpcGxlIiwidXBsb2FkcHJvZ3Jlc3MiLCJwcm9ncmVzcyIsImJ5dGVzU2VudCIsIm5vZGVOYW1lIiwic3R5bGUiLCJ0b3RhbHVwbG9hZHByb2dyZXNzIiwic2VuZGluZyIsInNlbmRpbmdtdWx0aXBsZSIsInN1Y2Nlc3MiLCJzdWNjZXNzbXVsdGlwbGUiLCJjYW5jZWxlZCIsImNhbmNlbGVkbXVsdGlwbGUiLCJjb21wbGV0ZSIsImNvbXBsZXRlbXVsdGlwbGUiLCJtYXhmaWxlc2V4Y2VlZGVkIiwibWF4ZmlsZXNyZWFjaGVkIiwicXVldWVjb21wbGV0ZSIsImFkZGVkZmlsZXMiLCJvYmplY3QiLCJvYmplY3RzIiwidmFsIiwiZWxlbWVudE9wdGlvbnMiLCJ2ZXJzaW9uIiwicmVwbGFjZSIsImNsaWNrYWJsZUVsZW1lbnRzIiwibGlzdGVuZXJzIiwiZmlsZXMiLCJkb2N1bWVudCIsInF1ZXJ5U2VsZWN0b3IiLCJub2RlVHlwZSIsIkVycm9yIiwiZHJvcHpvbmUiLCJpbnN0YW5jZXMiLCJvcHRpb25zRm9yRWxlbWVudCIsImlzQnJvd3NlclN1cHBvcnRlZCIsImdldEF0dHJpYnV0ZSIsInRvVXBwZXJDYXNlIiwiZ2V0RXhpc3RpbmdGYWxsYmFjayIsImdldEVsZW1lbnQiLCJnZXRFbGVtZW50cyIsImdldEFjY2VwdGVkRmlsZXMiLCJhY2NlcHRlZCIsImdldFJlamVjdGVkRmlsZXMiLCJnZXRGaWxlc1dpdGhTdGF0dXMiLCJnZXRRdWV1ZWRGaWxlcyIsIlFVRVVFRCIsImdldFVwbG9hZGluZ0ZpbGVzIiwiZ2V0QWRkZWRGaWxlcyIsIkFEREVEIiwiZ2V0QWN0aXZlRmlsZXMiLCJldmVudE5hbWUiLCJub1Byb3BhZ2F0aW9uIiwic2V0dXBIaWRkZW5GaWxlSW5wdXQiLCJ0YWdOYW1lIiwic2V0QXR0cmlidXRlIiwiY29udGFpbnMiLCJoaWRkZW5GaWxlSW5wdXQiLCJ2aXNpYmlsaXR5IiwicG9zaXRpb24iLCJ0b3AiLCJpZCIsImFkZEZpbGUiLCJVUkwiLCJ3ZWJraXRVUkwiLCJ1cGRhdGVUb3RhbFVwbG9hZFByb2dyZXNzIiwicmV0dXJuVmFsdWUiLCJlZmN0IiwiZGF0YVRyYW5zZmVyIiwiZWZmZWN0QWxsb3dlZCIsIl9lcnJvciIsImRyb3BFZmZlY3QiLCJmb3JFYWNoIiwiY2xpY2thYmxlRWxlbWVudCIsImV2dCIsImVsZW1lbnRJbnNpZGUiLCJlbmFibGUiLCJkZXN0cm95IiwiZGlzYWJsZSIsInJlbW92ZUFsbEZpbGVzIiwiaW5kZXhPZiIsImFjdGl2ZUZpbGVzIiwidG90YWxCeXRlcyIsInRvdGFsQnl0ZXNTZW50IiwidG90YWxVcGxvYWRQcm9ncmVzcyIsInVwbG9hZCIsInRvdGFsIiwiX2dldFBhcmFtTmFtZSIsIm4iLCJleGlzdGluZ0ZhbGxiYWNrIiwiZmllbGRzIiwiZmllbGRzU3RyaW5nIiwiZm9ybSIsImdldEZhbGxiYWNrIiwiZWxlbWVudHMiLCJzZXR1cEV2ZW50TGlzdGVuZXJzIiwiZWxlbWVudExpc3RlbmVycyIsImxpc3RlbmVyIiwiX3Jlc3VsdHMxIiwicmVtb3ZlRXZlbnRMaXN0ZW5lcnMiLCJjYW5jZWxVcGxvYWQiLCJjdXRvZmYiLCJzZWxlY3RlZFNpemUiLCJzZWxlY3RlZFVuaXQiLCJ1bml0IiwidW5pdHMiLCJNYXRoIiwicG93Iiwicm91bmQiLCJpdGVtcyIsIndlYmtpdEdldEFzRW50cnkiLCJfYWRkRmlsZXNGcm9tSXRlbXMiLCJoYW5kbGVGaWxlcyIsImNsaXBib2FyZERhdGEiLCJlbnRyeSIsIml0ZW0iLCJpc0ZpbGUiLCJnZXRBc0ZpbGUiLCJpc0RpcmVjdG9yeSIsIl9hZGRGaWxlc0Zyb21EaXJlY3RvcnkiLCJraW5kIiwiZGlyZWN0b3J5IiwicGF0aCIsImRpclJlYWRlciIsImVudHJpZXNSZWFkZXIiLCJjcmVhdGVSZWFkZXIiLCJlbnRyaWVzIiwic3Vic3RyaW5nIiwiZnVsbFBhdGgiLCJyZWFkRW50cmllcyIsImlzVmFsaWRGaWxlIiwiX2VucXVldWVUaHVtYm5haWwiLCJfZXJyb3JQcm9jZXNzaW5nIiwiZW5xdWV1ZUZpbGUiLCJlbnF1ZXVlRmlsZXMiLCJwcm9jZXNzUXVldWUiLCJfdGh1bWJuYWlsUXVldWUiLCJfcHJvY2Vzc2luZ1RodW1ibmFpbCIsIm1hdGNoIiwiX3Byb2Nlc3NUaHVtYm5haWxRdWV1ZSIsImNyZWF0ZVRodW1ibmFpbCIsInNoaWZ0IiwiY2FuY2VsSWZOZWNlc3NhcnkiLCJmaWxlUmVhZGVyIiwiRmlsZVJlYWRlciIsIm9ubG9hZCIsInJlc3VsdCIsImNyZWF0ZVRodW1ibmFpbEZyb21VcmwiLCJyZWFkQXNEYXRhVVJMIiwiaW1hZ2VVcmwiLCJjcm9zc09yaWdpbiIsImltZyIsImNhbnZhcyIsImN0eCIsInJlc2l6ZUluZm8iLCJfcmVmMyIsImdldENvbnRleHQiLCJ0cmdYIiwidHJnWSIsInRvRGF0YVVSTCIsIm9uZXJyb3IiLCJwcm9jZXNzaW5nTGVuZ3RoIiwicXVldWVkRmlsZXMiLCJwcm9jZXNzRmlsZXMiLCJwcm9jZXNzRmlsZSIsInVwbG9hZEZpbGVzIiwiX2dldEZpbGVzV2l0aFhociIsInhociIsImdyb3VwZWRGaWxlIiwiZ3JvdXBlZEZpbGVzIiwiQ0FOQ0VMRUQiLCJhYm9ydCIsIm9wdGlvbiIsInVwbG9hZEZpbGUiLCJmb3JtRGF0YSIsImhhbmRsZUVycm9yIiwiaGVhZGVyTmFtZSIsImhlYWRlclZhbHVlIiwiaGVhZGVycyIsImlucHV0IiwiaW5wdXROYW1lIiwiaW5wdXRUeXBlIiwicHJvZ3Jlc3NPYmoiLCJyZXNwb25zZSIsInVwZGF0ZVByb2dyZXNzIiwiX2wiLCJfbGVuMyIsIl9tIiwiX3JlZjQiLCJfcmVmNSIsIlhNTEh0dHBSZXF1ZXN0Iiwib3BlbiIsImFsbEZpbGVzRmluaXNoZWQiLCJsb2FkZWQiLCJyZWFkeVN0YXRlIiwicmVzcG9uc2VUZXh0IiwiZ2V0UmVzcG9uc2VIZWFkZXIiLCJKU09OIiwicGFyc2UiLCJfZmluaXNoZWQiLCJvbnByb2dyZXNzIiwic2V0UmVxdWVzdEhlYWRlciIsIkZvcm1EYXRhIiwiYXBwZW5kIiwiaGFzQXR0cmlidXRlIiwic2VsZWN0ZWQiLCJ0b0xvd2VyQ2FzZSIsImNoZWNrZWQiLCJzdWJtaXRSZXF1ZXN0Iiwic2VuZCIsIlNVQ0NFU1MiLCJFUlJPUiIsImZvckVsZW1lbnQiLCJhdXRvRGlzY292ZXIiLCJkaXNjb3ZlciIsImNoZWNrRWxlbWVudHMiLCJkcm9wem9uZXMiLCJibGFja2xpc3RlZEJyb3dzZXJzIiwiY2FwYWJsZUJyb3dzZXIiLCJyZWdleCIsIkZpbGUiLCJGaWxlTGlzdCIsIkJsb2IiLCJ1c2VyQWdlbnQiLCJsaXN0IiwicmVqZWN0ZWRJdGVtIiwic3RyIiwiY2hhckF0Iiwic3RyaW5nIiwiZGl2IiwiY2hpbGROb2RlcyIsImNvbnRhaW5lciIsImVscyIsIkFycmF5IiwicXVlc3Rpb24iLCJyZWplY3RlZCIsImJhc2VNaW1lVHlwZSIsIm1pbWVUeXBlIiwidmFsaWRUeXBlIiwic3BsaXQiLCJlYWNoIiwibW9kdWxlIiwiZXhwb3J0cyIsIkFDQ0VQVEVEIiwiUFJPQ0VTU0lORyIsImFscGhhIiwiZXkiLCJpaCIsIml3IiwicHkiLCJyYXRpbyIsInN5IiwibmF0dXJhbFdpZHRoIiwibmF0dXJhbEhlaWdodCIsImRyYXdJbWFnZSIsImdldEltYWdlRGF0YSIsInN4Iiwic3ciLCJzaCIsImR4IiwiZHkiLCJkdyIsImRoIiwidmVydFNxdWFzaFJhdGlvIiwid2luIiwiZG9jIiwicG9sbCIsInByZSIsInJlbSIsInJvb3QiLCJkb2N1bWVudEVsZW1lbnQiLCJkb1Njcm9sbCIsImNyZWF0ZUV2ZW50T2JqZWN0IiwiZnJhbWVFbGVtZW50IiwiX2F1dG9EaXNjb3ZlckZ1bmN0aW9uIiwiT3JkZXJfTGlzdF9EZXRhaWwiLCJvcmRlclV1aWQiLCJ1dWlkIiwiYmFza2V0RmllbGQxIiwiY3VzdG9tZXJJbmZvIiwiYmFza2V0RmllbGQyIiwicG9zIiwicHJpY2UiLCJhbGxOZXQiLCJyZU9yZGVyIiwicmVPcmRlck9yZGVyIiwicmVPcmRlclBvcyIsImNvbmNhdCIsImdldF9wb3NfYmdfY29sb3IiLCJnZXRfcG9zX2JnX2NvbG9yX2NsYXNzIiwib3JpZ2luYWxQcm9kdWN0IiwibnJJbnRlcm4iLCJnZXRfc3BlY2lhbF9wcm9kdWN0X29wdGlvbnMiLCJzcGVjaWFsUHJvZHVjdFR5cGVPYmplY3QiLCJjb3VudCIsIkludGwiLCJOdW1iZXJGb3JtYXQiLCJjdXJyZW5jeSIsImZvcm1hdCIsImFsbEdyb3NzIiwiZ2V0X3Bvc19zdGF0dXMiLCJpbnRlcm5hbE5hbWUiLCJnZXRfcG9zX3N0YXR1c19sb29wIiwiT3JkZXJfTGlzdF9EZXRhaWxfU2ltcGxlIiwiT3JkZXJfTGlzdF9Qb3NfU3RhdHVzIiwicG9zVXVpZCIsImNvZGUiLCJPcmRlcl9MaXN0X1Bvc19DYWxjX09wdGlvbiIsImVsbSIsImxvYWRfc3RhdHVzIiwiYmluZF9idXR0b25zIiwidHlwIiwibWFwIiwiam9pbiIsImp3dF90b2tlbiIsImFqYXgiLCJjb250ZW50VHlwZSIsInN0YXR1c19vcmRlciIsInN0YXR1c19wb3MiLCJsb2FkX2RldGFpbCIsInNpbXBsZSIsInVuZGVmaW5lZCIsInN0cmluZ2lmeSIsImJ1aWxkX2RldGFpbHMiLCJwb3NpdGlvbnMiLCJ4IiwibG9hZFBsdWdpbkRldGFpbHMiLCJiaW5kX3N0YXR1c19idXR0b25zIiwiZm91bmQiLCJzdGF0IiwiY29sb3IiLCJzZXQiLCJidWlsZFRhYmxlIiwiZW1wdHkiLCJwcm9kdWN0cyIsImluZGV4IiwiYmluZERlbGV0ZUJ1dHRvbnMiLCJmYWRlSW4iLCJwcm9kdWN0VXVpZCIsImZhZGVPdXQiLCJpbml0QWRkQnV0dG9uIiwibG9hZFRhYmxlIiwiZmFjdG9yeSIsImFtZCIsInBsdWdpbnMiLCJjb250ZXh0Iiwic2VsZiIsInVpIiwibWVtbyIsImJ1dHRvbiIsImNvbnRlbnRzIiwidG9vbHRpcCIsIm1lZGlhQnVuZGxlQnJvd3NlciIsIiRub3RlIiwiJG1lZGlhIiwicmVuZGVyIiwidCIsIlRldGhlciIsIm8iLCJUeXBlRXJyb3IiLCJnZXRCb3VuZGluZ0NsaWVudFJlY3QiLCJvd25lckRvY3VtZW50IiwiciIsImRlZmF1bHRWaWV3IiwicyIsImJvdHRvbSIsImdldENvbXB1dGVkU3R5bGUiLCJhIiwiZiIsIm92ZXJmbG93IiwibCIsIm92ZXJmbG93WCIsImgiLCJvdmVyZmxvd1kiLCJib2R5IiwiQSIsIlAiLCJzY3JvbGxXaWR0aCIsInNjcm9sbEhlaWdodCIsImNsaWVudFRvcCIsImNsaWVudExlZnQiLCJjbGllbnRXaWR0aCIsImNsaWVudEhlaWdodCIsIm9mZnNldFBhcmVudCIsInBvaW50ZXJFdmVudHMiLCJvZmZzZXRXaWR0aCIsInUiLCJSZWdFeHAiLCJjIiwiZyIsImQiLCJwIiwiU1ZHQW5pbWF0ZWRTdHJpbmciLCJiYXNlVmFsIiwibSIsInYiLCJPYmplY3QiLCJjcmVhdGUiLCJlbnVtZXJhYmxlIiwid3JpdGFibGUiLCJjb25maWd1cmFibGUiLCJzZXRQcm90b3R5cGVPZiIsIl9fcHJvdG9fXyIsInkiLCJiIiwicGVyZm9ybWFuY2UiLCJub3ciLCJEYXRlIiwidyIsInBhcnNlRmxvYXQiLCJDIiwiTyIsInNjcm9sbFBhcmVudHMiLCJwYWdlWE9mZnNldCIsInBhZ2VZT2Zmc2V0IiwiaW5uZXJXaWR0aCIsImlubmVySGVpZ2h0Iiwic3Vic3RyIiwiRSIsImRlZmluZVByb3BlcnR5IiwibW9kdWxlcyIsIlQiLCJTIiwiTSIsIlciLCJfIiwicG9wIiwiayIsImJpbmRpbmdzIiwib25jZSIsIlV0aWxzIiwiZ2V0QWN0dWFsQm91bmRpbmdDbGllbnRSZWN0IiwiZ2V0U2Nyb2xsUGFyZW50cyIsImdldEJvdW5kcyIsImdldE9mZnNldFBhcmVudCIsImFkZENsYXNzIiwicmVtb3ZlQ2xhc3MiLCJoYXNDbGFzcyIsInVwZGF0ZUNsYXNzZXMiLCJkZWZlciIsImZsdXNoIiwidW5pcXVlSWQiLCJFdmVudGVkIiwiZ2V0U2Nyb2xsQmFyU2l6ZSIsInJlbW92ZVV0aWxFbGVtZW50cyIsIkIiLCJTeW1ib2wiLCJpdGVyYXRvciIsIm5leHQiLCJpc0FycmF5IiwieiIsIkZ1bmN0aW9uIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwiZ2V0IiwiZ2V0UHJvdG90eXBlT2YiLCJqIiwiWSIsIkwiLCJEIiwibWluIiwiY2xlYXJUaW1lb3V0IiwiWCIsImNlbnRlciIsIkYiLCJtaWRkbGUiLCJIIiwiTiIsIlUiLCJWIiwiUiIsInEiLCJiaW5kIiwiaGlzdG9yeSIsInNldE9wdGlvbnMiLCJpbml0aWFsaXplIiwiY2xhc3NlcyIsImNsYXNzUHJlZml4Iiwib2Zmc2V0IiwidGFyZ2V0T2Zmc2V0IiwidGFyZ2V0QXR0YWNobWVudCIsInRhcmdldE1vZGlmaWVyIiwianF1ZXJ5IiwiZ2V0Q2xhc3MiLCJhZGRUYXJnZXRDbGFzc2VzIiwiYXR0YWNobWVudCIsImVuYWJsZWQiLCJib3JkZXJUb3BXaWR0aCIsImJvcmRlckJvdHRvbVdpZHRoIiwiYm9yZGVyTGVmdFdpZHRoIiwibWF4Iiwic2Nyb2xsVG9wIiwiX2NhY2hlIiwiX2FkZEF0dGFjaENsYXNzZXMiLCJjbGVhckNhY2hlIiwidXBkYXRlQXR0YWNoQ2xhc3NlcyIsImNhY2hlIiwibGFzdFNpemUiLCJnZXRUYXJnZXRCb3VuZHMiLCJ0YXJnZXRQb3MiLCJlbGVtZW50UG9zIiwibWFudWFsT2Zmc2V0IiwibWFudWFsVGFyZ2V0T2Zmc2V0Iiwic2Nyb2xsYmFyU2l6ZSIsInBhZ2UiLCJ2aWV3cG9ydCIsInBhcmVudEVsZW1lbnQiLCJvcHRpbWl6YXRpb25zIiwibW92ZUVsZW1lbnQiLCJzY3JvbGxMZWZ0IiwibW92ZSIsInVuc2hpZnQiLCJncHUiLCJJIiwiY29uc3RyYWludHMiLCJvdXRPZkJvdW5kc0NsYXNzIiwicGlubmVkQ2xhc3MiLCJ0byIsInBpbiIsInRyaWdnZXIiLCJpbml0TW9kYWxzIiwiJG1vZGFsIiwiJGJ0biIsInJlbGF0ZWRUYXJnZXQiLCJsaW5rIiwicmVzZXRBamF4TW9kYWxzIiwiZGVib3VuY2UiLCJlYXNlSW5PdXRRdWFkIiwiYW5pbWF0ZSIsInJlcXVlc3RBbmltYXRpb25GcmFtZSIsIm9mZnNldEhlaWdodCIsInVybENob29zZXIiLCJpbml0RGVsQnRuIiwiJHRoaXMiLCJsaW5rZWRJRCIsIiR3aWRnZXQiLCIkaW5wdXQiLCJzbHVnIiwicmVwbGFjZVVybCIsImNsb3Nlc3QiLCJpdGVtVXJsIiwiaXRlbUlkIiwicmVwbGFjZWRVcmwiLCJ0aHVtYlBhdGgiLCJja2UiLCJpdGVtVGl0bGUiLCJpdGVtVGh1bWJQYXRoIiwiaXNNZWRpYUNob29zZXIiLCJzYXZlTWVkaWFDaG9vc2VyTW9kYWwiLCJzYXZlVXJsQ2hvb3Nlck1vZGFsIiwiJHBhcmVudE1vZGFsIiwicGFyZW50TW9kYWxJZCIsIm1vZGFsIiwiY2xvc2UiLCJsaW5rZWRJbnB1dElkIiwiZnVuY051bSIsImdldFVybFBhcmFtIiwib3BlbmVyIiwiQ0tFRElUT1IiLCJ0b29scyIsImNhbGxGdW5jdGlvbiIsIiRtZWRpYUNob29zZXIiLCIkcHJldmlld0ltZyIsIiRwcmV2aWV3VGl0bGUiLCIkcGFyZW50IiwicHJlcGVuZCIsInJlUGFyYW0iLCJsb2NhdGlvbiIsIkNvbnRyb2xsZXIiLCJUb21TZWxlY3QiLCJfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0IiwicmVjZWl2ZXIiLCJzdGF0ZSIsImhhcyIsIl9kZWZhdWx0XzFfaW5zdGFuY2VzIiwiX2RlZmF1bHRfMV9nZXRDb21tb25Db25maWciLCJfZGVmYXVsdF8xX2NyZWF0ZUF1dG9jb21wbGV0ZSIsIl9kZWZhdWx0XzFfY3JlYXRlQXV0b2NvbXBsZXRlV2l0aEh0bWxDb250ZW50cyIsIl9kZWZhdWx0XzFfY3JlYXRlQXV0b2NvbXBsZXRlV2l0aFJlbW90ZURhdGEiLCJfZGVmYXVsdF8xX3N0cmlwVGFncyIsIl9kZWZhdWx0XzFfbWVyZ2VPYmplY3RzIiwiX2RlZmF1bHRfMV9jcmVhdGVUb21TZWxlY3QiLCJkZWZhdWx0XzEiLCJpc09ic2VydmluZyIsImhhc0xvYWRlZENob2ljZXNQcmV2aW91c2x5Iiwib3JpZ2luYWxPcHRpb25zIiwibXV0YXRpb25PYnNlcnZlciIsIk11dGF0aW9uT2JzZXJ2ZXIiLCJtdXRhdGlvbnMiLCJvbk11dGF0aW9ucyIsInNlbGVjdEVsZW1lbnQiLCJjcmVhdGVPcHRpb25zRGF0YVN0cnVjdHVyZSIsImluaXRpYWxpemVUb21TZWxlY3QiLCJ1cmxWYWx1ZSIsInRvbVNlbGVjdCIsImhhc01pbkNoYXJhY3RlcnNWYWx1ZSIsIm1pbkNoYXJhY3RlcnNWYWx1ZSIsIm9wdGlvbnNBc0h0bWxWYWx1ZSIsInN0YXJ0TXV0YXRpb25PYnNlcnZlciIsInN0b3BNdXRhdGlvbk9ic2VydmVyIiwiY3VycmVudFNlbGVjdGVkVmFsdWVzIiwibXVsdGlwbGUiLCJmcm9tIiwiZmlsdGVyIiwiaW5jbHVkZXMiLCJIVE1MU2VsZWN0RWxlbWVudCIsIkhUTUxJbnB1dEVsZW1lbnQiLCJwYXlsb2FkIiwiZGlzcGF0Y2giLCJkZXRhaWwiLCJwcmVmaXgiLCJoYXNQcmVsb2FkVmFsdWUiLCJwcmVsb2FkVmFsdWUiLCJkaXNwYXRjaEV2ZW50IiwiY3VycmVudEh0bWwiLCJjdXJyZW50VmFsdWUiLCJnZXRWYWx1ZSIsInNldFZhbHVlIiwiaXNEaXNhYmxlZCIsIm9ic2VydmUiLCJjaGlsZExpc3QiLCJzdWJ0cmVlIiwiYXR0cmlidXRlcyIsImNoYXJhY3RlckRhdGEiLCJhdHRyaWJ1dGVPbGRWYWx1ZSIsImRpc2Nvbm5lY3QiLCJjaGFuZ2VEaXNhYmxlZFN0YXRlIiwicmVxdWlyZVJlc2V0IiwibXV0YXRpb24iLCJhdHRyaWJ1dGVOYW1lIiwiaXNOb3dNdWx0aXBsZSIsIndhc011bHRpcGxlIiwib2xkVmFsdWUiLCJuZXdPcHRpb25zIiwiYXJlT3B0aW9uc0VxdWl2YWxlbnQiLCJyZXNldFRvbVNlbGVjdCIsImNoYW5nZVRvbVNlbGVjdERpc2FibGVkU3RhdGUiLCJmb3JtRWxlbWVudCIsImRpc2FibGVkIiwib3B0Z3JvdXAiLCJncm91cCIsImxhYmVsIiwiZmlsdGVyZWRPcmlnaW5hbE9wdGlvbnMiLCJmaWx0ZXJlZE5ld09wdGlvbnMiLCJvcmlnaW5hbFBsYWNlaG9sZGVyT3B0aW9uIiwibmV3UGxhY2Vob2xkZXJPcHRpb24iLCJub3JtYWxpemVPcHRpb24iLCJvcmlnaW5hbE9wdGlvbnNTZXQiLCJTZXQiLCJuZXdPcHRpb25zU2V0IiwiZXZlcnkiLCJXZWFrU2V0IiwiaXNNdWx0aXBsZSIsImNsZWFyX2J1dHRvbiIsInJlbW92ZV9idXR0b24iLCJ2aXJ0dWFsX3Njcm9sbCIsIm5vX3Jlc3VsdHMiLCJub1Jlc3VsdHNGb3VuZFRleHRWYWx1ZSIsImNvbmZpZyIsIm9uSXRlbUFkZCIsInNldFRleHRib3hWYWx1ZSIsImNsb3NlQWZ0ZXJTZWxlY3QiLCJzaG91bGRMb2FkIiwidG9tU2VsZWN0T3B0aW9uc1ZhbHVlIiwibWF4T3B0aW9ucyIsImdldE1heE9wdGlvbnMiLCJzY29yZSIsInNjb3JpbmdGdW5jdGlvbiIsImdldFNjb3JlRnVuY3Rpb24iLCJhdXRvY29tcGxldGVFbmRwb2ludFVybCIsIm1pbkNoYXJhY3Rlckxlbmd0aCIsImZpcnN0VXJsIiwicXVlcnkiLCJzZXBhcmF0b3IiLCJlbmNvZGVVUklDb21wb25lbnQiLCJsb2FkIiwiZ2V0VXJsIiwiZmV0Y2giLCJ0aGVuIiwianNvbiIsInNldE5leHRVcmwiLCJuZXh0X3BhZ2UiLCJyZXN1bHRzIiwib3B0Z3JvdXBzIiwib3B0Z3JvdXBGaWVsZCIsImxvYWRpbmdfbW9yZSIsImxvYWRpbmdNb3JlVGV4dFZhbHVlIiwibm9fbW9yZV9yZXN1bHRzIiwibm9Nb3JlUmVzdWx0c1RleHRWYWx1ZSIsInByZWxvYWQiLCJvYmplY3QxIiwib2JqZWN0MiIsInByZUNvbm5lY3RQYXlsb2FkIiwiY29ubmVjdFBheWxvYWQiLCJ2YWx1ZXMiLCJTdHJpbmciLCJvcHRpb25zQXNIdG1sIiwiQm9vbGVhbiIsImxvYWRpbmdNb3JlVGV4dCIsIm5vUmVzdWx0c0ZvdW5kVGV4dCIsIm5vTW9yZVJlc3VsdHNUZXh0IiwibWluQ2hhcmFjdGVycyIsIk51bWJlciIsInRvbVNlbGVjdE9wdGlvbnMiLCJkZWZhdWx0IiwicGFyc2VEaXJlY3RpdmVzIiwiZGlyZWN0aXZlcyIsImN1cnJlbnRBY3Rpb25OYW1lIiwiY3VycmVudEFyZ3VtZW50VmFsdWUiLCJjdXJyZW50QXJndW1lbnRzIiwiY3VycmVudE1vZGlmaWVycyIsImdldExhc3RBY3Rpb25OYW1lIiwiYWN0aW9uIiwicHVzaEluc3RydWN0aW9uIiwibW9kaWZpZXJzIiwiZ2V0U3RyaW5nIiwicHVzaEFyZ3VtZW50IiwicHVzaE1vZGlmaWVyIiwiY2hhciIsImNvbWJpbmVTcGFjZWRBcnJheSIsInBhcnRzIiwiZmluYWxQYXJ0cyIsInBhcnQiLCJ0cmltQWxsIiwibm9ybWFsaXplTW9kZWxOYW1lIiwibW9kZWwiLCJnZXRFbGVtZW50QXNUYWdUZXh0Iiwib3V0ZXJIVE1MIiwiY29tcG9uZW50TWFwQnlFbGVtZW50IiwiV2Vha01hcCIsImNvbXBvbmVudE1hcEJ5Q29tcG9uZW50IiwiTWFwIiwicmVnaXN0ZXJDb21wb25lbnQiLCJjb21wb25lbnQiLCJ1bnJlZ2lzdGVyQ29tcG9uZW50IiwiZ2V0Q29tcG9uZW50IiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZWplY3QiLCJtYXhDb3VudCIsImludGVydmFsIiwic2V0SW50ZXJ2YWwiLCJjbGVhckludGVydmFsIiwiZmluZENvbXBvbmVudHMiLCJjdXJyZW50Q29tcG9uZW50Iiwib25seVBhcmVudHMiLCJvbmx5TWF0Y2hOYW1lIiwiY29tcG9uZW50cyIsImNvbXBvbmVudE5hbWUiLCJmaW5kQ2hpbGRyZW4iLCJjaGlsZHJlbiIsImZvdW5kQ2hpbGRDb21wb25lbnQiLCJjaGlsZENvbXBvbmVudE5hbWUiLCJjaGlsZENvbXBvbmVudCIsImZpbmRQYXJlbnQiLCJnZXRWYWx1ZUZyb21FbGVtZW50IiwidmFsdWVTdG9yZSIsIm1vZGVsTmFtZURhdGEiLCJnZXRNb2RlbERpcmVjdGl2ZUZyb21FbGVtZW50IiwibW9kZWxWYWx1ZSIsImdldE11bHRpcGxlQ2hlY2tib3hWYWx1ZSIsImlucHV0VmFsdWUiLCJzZWxlY3RlZE9wdGlvbnMiLCJkYXRhc2V0Iiwic2V0VmFsdWVPbkVsZW1lbnQiLCJ2YWx1ZUZvdW5kIiwiYXJyYXlXcmFwcGVkVmFsdWUiLCJnZXRBbGxNb2RlbERpcmVjdGl2ZUZyb21FbGVtZW50cyIsImRpcmVjdGl2ZSIsInRocm93T25NaXNzaW5nIiwiZGF0YU1vZGVsRGlyZWN0aXZlcyIsImVsZW1lbnRCZWxvbmdzVG9UaGlzQ29tcG9uZW50IiwiY2xvbmVIVE1MRWxlbWVudCIsIm5ld0VsZW1lbnQiLCJjbG9uZU5vZGUiLCJIVE1MRWxlbWVudCIsImh0bWxUb0VsZW1lbnQiLCJ0ZW1wbGF0ZSIsImNoaWxkRWxlbWVudENvdW50IiwiZmlyc3RFbGVtZW50Q2hpbGQiLCJjdXJyZW50VmFsdWVzIiwiZmluYWxWYWx1ZXMiLCJnZXREZWVwRGF0YSIsInByb3BlcnR5UGF0aCIsInBhcnNlRGVlcERhdGEiLCJjdXJyZW50TGV2ZWxEYXRhIiwiZmluYWxLZXkiLCJmaW5hbERhdGEiLCJWYWx1ZVN0b3JlIiwicHJvcHMiLCJkaXJ0eVByb3BzIiwicGVuZGluZ1Byb3BzIiwidXBkYXRlZFByb3BzRnJvbVBhcmVudCIsIm5vcm1hbGl6ZWROYW1lIiwiY2hhbmdlZCIsIklkaW9tb3JwaCIsIkVNUFRZX1NFVCIsImRlZmF1bHRzIiwibW9ycGhTdHlsZSIsImJlZm9yZU5vZGVBZGRlZCIsIm5vT3AiLCJhZnRlck5vZGVBZGRlZCIsImJlZm9yZU5vZGVNb3JwaGVkIiwiYWZ0ZXJOb2RlTW9ycGhlZCIsImJlZm9yZU5vZGVSZW1vdmVkIiwiYWZ0ZXJOb2RlUmVtb3ZlZCIsImJlZm9yZUF0dHJpYnV0ZVVwZGF0ZWQiLCJoZWFkIiwic2hvdWxkUHJlc2VydmUiLCJlbHQiLCJzaG91bGRSZUFwcGVuZCIsInNob3VsZFJlbW92ZSIsImFmdGVySGVhZE1vcnBoZWQiLCJtb3JwaCIsIm9sZE5vZGUiLCJuZXdDb250ZW50IiwiRG9jdW1lbnQiLCJwYXJzZUNvbnRlbnQiLCJub3JtYWxpemVkQ29udGVudCIsIm5vcm1hbGl6ZUNvbnRlbnQiLCJjcmVhdGVNb3JwaENvbnRleHQiLCJtb3JwaE5vcm1hbGl6ZWRDb250ZW50Iiwibm9ybWFsaXplZE5ld0NvbnRlbnQiLCJibG9jayIsIm9sZEhlYWQiLCJuZXdIZWFkIiwicHJvbWlzZXMiLCJoYW5kbGVIZWFkRWxlbWVudCIsImFsbCIsImFzc2lnbiIsImlnbm9yZSIsIm1vcnBoQ2hpbGRyZW4iLCJiZXN0TWF0Y2giLCJmaW5kQmVzdE5vZGVNYXRjaCIsInByZXZpb3VzU2libGluZyIsIm5leHRTaWJsaW5nIiwibW9ycGhlZE5vZGUiLCJtb3JwaE9sZE5vZGVUbyIsImluc2VydFNpYmxpbmdzIiwiaWdub3JlVmFsdWVPZkFjdGl2ZUVsZW1lbnQiLCJwb3NzaWJsZUFjdGl2ZUVsZW1lbnQiLCJpZ25vcmVBY3RpdmVWYWx1ZSIsImFjdGl2ZUVsZW1lbnQiLCJpZ25vcmVBY3RpdmUiLCJpc1NvZnRNYXRjaCIsInJlcGxhY2VDaGlsZCIsIkhUTUxIZWFkRWxlbWVudCIsInN5bmNOb2RlRnJvbSIsIm5ld1BhcmVudCIsIm9sZFBhcmVudCIsIm5leHROZXdDaGlsZCIsImZpcnN0Q2hpbGQiLCJpbnNlcnRpb25Qb2ludCIsIm5ld0NoaWxkIiwicmVtb3ZlSWRzRnJvbUNvbnNpZGVyYXRpb24iLCJpc0lkU2V0TWF0Y2giLCJpZFNldE1hdGNoIiwiZmluZElkU2V0TWF0Y2giLCJyZW1vdmVOb2Rlc0JldHdlZW4iLCJzb2Z0TWF0Y2giLCJmaW5kU29mdE1hdGNoIiwiaW5zZXJ0QmVmb3JlIiwidGVtcE5vZGUiLCJyZW1vdmVOb2RlIiwiaWdub3JlQXR0cmlidXRlIiwidXBkYXRlVHlwZSIsImZyb21BdHRyaWJ1dGVzIiwidG9BdHRyaWJ1dGVzIiwiZnJvbUF0dHJpYnV0ZSIsInRvQXR0cmlidXRlIiwicmVtb3ZlQXR0cmlidXRlIiwibm9kZVZhbHVlIiwic3luY0lucHV0VmFsdWUiLCJzeW5jQm9vbGVhbkF0dHJpYnV0ZSIsImlnbm9yZVVwZGF0ZSIsImZyb21WYWx1ZSIsInRvVmFsdWUiLCJIVE1MT3B0aW9uRWxlbWVudCIsIkhUTUxUZXh0QXJlYUVsZW1lbnQiLCJuZXdIZWFkVGFnIiwiY3VycmVudEhlYWQiLCJhZGRlZCIsInJlbW92ZWQiLCJwcmVzZXJ2ZWQiLCJub2Rlc1RvQXBwZW5kIiwiaGVhZE1lcmdlU3R5bGUiLCJzcmNUb05ld0hlYWROb2RlcyIsIm5ld0hlYWRDaGlsZCIsImN1cnJlbnRIZWFkRWx0IiwiaW5OZXdDb250ZW50IiwiaXNSZUFwcGVuZGVkIiwiaXNQcmVzZXJ2ZWQiLCJuZXdOb2RlIiwibmV3RWx0IiwiY3JlYXRlUmFuZ2UiLCJjcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQiLCJocmVmIiwicHJvbWlzZSIsIl9yZXNvbHZlIiwicmVtb3ZlZEVsZW1lbnQiLCJrZXB0IiwibWVyZ2VEZWZhdWx0cyIsImZpbmFsQ29uZmlnIiwiaWRNYXAiLCJjcmVhdGVJZE1hcCIsImRlYWRJZHMiLCJub2RlMSIsIm5vZGUyIiwiZ2V0SWRJbnRlcnNlY3Rpb25Db3VudCIsInN0YXJ0SW5jbHVzaXZlIiwiZW5kRXhjbHVzaXZlIiwibmV3Q2hpbGRQb3RlbnRpYWxJZENvdW50IiwicG90ZW50aWFsTWF0Y2giLCJvdGhlck1hdGNoQ291bnQiLCJwb3RlbnRpYWxTb2Z0TWF0Y2giLCJzaWJsaW5nU29mdE1hdGNoQ291bnQiLCJwYXJzZXIiLCJET01QYXJzZXIiLCJjb250ZW50V2l0aFN2Z3NSZW1vdmVkIiwicGFyc2VGcm9tU3RyaW5nIiwiZ2VuZXJhdGVkQnlJZGlvbW9ycGgiLCJodG1sRWxlbWVudCIsInJlc3BvbnNlRG9jIiwiZHVtbXlQYXJlbnQiLCJOb2RlIiwic3RhY2siLCJjdXJyZW50RWxlbWVudCIsImJlc3RFbGVtZW50IiwibmV3U2NvcmUiLCJzY29yZUVsZW1lbnQiLCJpc0lkSW5Db25zaWRlcmF0aW9uIiwiaWRJc1dpdGhpbk5vZGUiLCJ0YXJnZXROb2RlIiwiaWRTZXQiLCJzb3VyY2VTZXQiLCJtYXRjaENvdW50IiwicG9wdWxhdGVJZE1hcEZvck5vZGUiLCJub2RlUGFyZW50IiwiaWRFbGVtZW50cyIsImN1cnJlbnQiLCJvbGRDb250ZW50Iiwibm9ybWFsaXplQXR0cmlidXRlc0ZvckNvbXBhcmlzb24iLCJpc0ZpbGVJbnB1dCIsInN5bmNBdHRyaWJ1dGVzIiwiZnJvbUVsIiwidG9FbCIsImV4ZWN1dGVNb3JwaGRvbSIsInJvb3RGcm9tRWxlbWVudCIsInJvb3RUb0VsZW1lbnQiLCJtb2RpZmllZEZpZWxkRWxlbWVudHMiLCJnZXRFbGVtZW50VmFsdWUiLCJleHRlcm5hbE11dGF0aW9uVHJhY2tlciIsIm9yaWdpbmFsRWxlbWVudElkc1RvU3dhcEFmdGVyIiwib3JpZ2luYWxFbGVtZW50c1RvUHJlc2VydmUiLCJtYXJrRWxlbWVudEFzTmVlZGluZ1Bvc3RNb3JwaFN3YXAiLCJyZXBsYWNlV2l0aENsb25lIiwib2xkRWxlbWVudCIsImNsb25lZE9sZEVsZW1lbnQiLCJyZXBsYWNlV2l0aCIsIkVsZW1lbnQiLCJjbG9uZWRGcm9tRWwiLCJfX3giLCJBbHBpbmUiLCJ3YXNFbGVtZW50QWRkZWQiLCJpbnNlcnRBZGphY2VudEVsZW1lbnQiLCJlbGVtZW50Q2hhbmdlcyIsImdldENoYW5nZWRFbGVtZW50IiwiYXBwbHlUb0VsZW1lbnQiLCJpc0VxdWFsTm9kZSIsIm5vcm1hbGl6ZWRGcm9tRWwiLCJub3JtYWxpemVkVG9FbCIsIm9yaWdpbmFsRWxlbWVudCIsIlVuc3luY2VkSW5wdXRzVHJhY2tlciIsIm1vZGVsRWxlbWVudFJlc29sdmVyIiwiZWxlbWVudEV2ZW50TGlzdGVuZXJzIiwiaGFuZGxlSW5wdXRFdmVudCIsInVuc3luY2VkSW5wdXRzIiwiVW5zeW5jZWRJbnB1dENvbnRhaW5lciIsIm1vZGVsTmFtZSIsIm1hcmtNb2RlbEFzU3luY2VkIiwidXBkYXRlTW9kZWxGcm9tRWxlbWVudCIsImdldE1vZGVsTmFtZSIsImFsbFVuc3luY2VkSW5wdXRzIiwiZ2V0VW5zeW5jZWRNb2RlbE5hbWVzIiwicmVzZXRVbnN5bmNlZEZpZWxkcyIsInVuc3luY2VkTm9uTW9kZWxGaWVsZHMiLCJ1bnN5bmNlZE1vZGVsTmFtZXMiLCJ1bnN5bmNlZE1vZGVsRmllbGRzIiwiSG9va01hbmFnZXIiLCJob29rcyIsImhvb2tOYW1lIiwiQmFja2VuZFJlc3BvbnNlIiwiQ2hhbmdpbmdJdGVtc1RyYWNrZXIiLCJjaGFuZ2VkSXRlbXMiLCJyZW1vdmVkSXRlbXMiLCJpdGVtTmFtZSIsIm5ld1ZhbHVlIiwicHJldmlvdXNWYWx1ZSIsInJlbW92ZWRSZWNvcmQiLCJvcmlnaW5hbCIsIm9yaWdpbmFsUmVjb3JkIiwidHJ1ZU9yaWdpbmFsVmFsdWUiLCJrZXlzIiwiRWxlbWVudENoYW5nZXMiLCJhZGRlZENsYXNzZXMiLCJyZW1vdmVkQ2xhc3NlcyIsInN0eWxlQ2hhbmdlcyIsImF0dHJpYnV0ZUNoYW5nZXMiLCJzdHlsZU5hbWUiLCJvcmlnaW5hbFZhbHVlIiwicmVtb3ZlSXRlbSIsImdldENoYW5nZWRJdGVtcyIsImdldFJlbW92ZWRJdGVtcyIsInNldFByb3BlcnR5IiwicmVtb3ZlUHJvcGVydHkiLCJpc0VtcHR5IiwiRXh0ZXJuYWxNdXRhdGlvblRyYWNrZXIiLCJzaG91bGRUcmFja0NoYW5nZUNhbGxiYWNrIiwiY2hhbmdlZEVsZW1lbnRzIiwiY2hhbmdlZEVsZW1lbnRzQ291bnQiLCJhZGRlZEVsZW1lbnRzIiwicmVtb3ZlZEVsZW1lbnRzIiwiaXNTdGFydGVkIiwidGFrZVJlY29yZHMiLCJoYW5kbGVkQXR0cmlidXRlTXV0YXRpb25zIiwiaXNFbGVtZW50QWRkZWRCeVRyYW5zbGF0aW9uIiwiaXNDaGFuZ2VJbkFkZGVkRWxlbWVudCIsImFkZGVkRWxlbWVudCIsImhhbmRsZUNoaWxkTGlzdE11dGF0aW9uIiwiaGFuZGxlQXR0cmlidXRlTXV0YXRpb24iLCJhZGRlZE5vZGVzIiwicmVtb3ZlZE5vZGVzIiwiY2hhbmdlZEVsZW1lbnQiLCJoYW5kbGVDbGFzc0F0dHJpYnV0ZU11dGF0aW9uIiwiaGFuZGxlU3R5bGVBdHRyaWJ1dGVNdXRhdGlvbiIsImhhbmRsZUdlbmVyaWNBdHRyaWJ1dGVNdXRhdGlvbiIsInByZXZpb3VzVmFsdWVzIiwibmV3VmFsdWVzIiwiYWRkZWRWYWx1ZXMiLCJyZW1vdmVkVmFsdWVzIiwicHJldmlvdXNTdHlsZXMiLCJleHRyYWN0U3R5bGVzIiwibmV3U3R5bGVzIiwiYWRkZWRPckNoYW5nZWRTdHlsZXMiLCJyZW1vdmVkU3R5bGVzIiwiYWRkU3R5bGUiLCJyZW1vdmVTdHlsZSIsImFkZEF0dHJpYnV0ZSIsInN0eWxlcyIsInN0eWxlT2JqZWN0IiwicHJvcGVydHkiLCJDb21wb25lbnQiLCJiYWNrZW5kIiwiZWxlbWVudERyaXZlciIsImZpbmdlcnByaW50IiwiZGVmYXVsdERlYm91bmNlIiwiYmFja2VuZFJlcXVlc3QiLCJwZW5kaW5nQWN0aW9ucyIsInBlbmRpbmdGaWxlcyIsImlzUmVxdWVzdFBlbmRpbmciLCJyZXF1ZXN0RGVib3VuY2VUaW1lb3V0IiwidW5zeW5jZWRJbnB1dHNUcmFja2VyIiwicmVzZXRQcm9taXNlIiwic3RhcnQiLCJwbHVnaW4iLCJhdHRhY2hUb0NvbXBvbmVudCIsInRyaWdnZXJIb29rIiwiYWN0aXZhdGUiLCJjbGVhclJlcXVlc3REZWJvdW5jZVRpbWVvdXQiLCJkZWFjdGl2YXRlIiwic3RvcCIsInJlZ2lzdGVyIiwidW5yZWdpc3RlciIsInJlUmVuZGVyIiwibmV4dFJlcXVlc3RQcm9taXNlIiwiaXNDaGFuZ2VkIiwiZGVib3VuY2VkU3RhcnRSZXF1ZXN0IiwidHJ5U3RhcnRpbmdSZXF1ZXN0IiwiZ2V0VW5zeW5jZWRNb2RlbHMiLCJvbmx5TWF0Y2hpbmdDb21wb25lbnRzTmFtZWQiLCJwZXJmb3JtRW1pdCIsImRvRW1pdCIsImVtaXRVcCIsIm1hdGNoaW5nTmFtZSIsImFjdGlvbnMiLCJUdXJibyIsInBlcmZvcm1SZXF1ZXN0IiwidGhpc1Byb21pc2VSZXNvbHZlIiwibmV4dFJlcXVlc3RQcm9taXNlUmVzb2x2ZSIsImZpbGVzVG9TZW5kIiwicmVxdWVzdENvbmZpZyIsImdldE9yaWdpbmFsUHJvcHMiLCJ1cGRhdGVkIiwiZ2V0RGlydHlQcm9wcyIsImdldFVwZGF0ZWRQcm9wc0Zyb21QYXJlbnQiLCJtYWtlUmVxdWVzdCIsImZsdXNoRGlydHlQcm9wc1RvUGVuZGluZyIsImJhY2tlbmRSZXNwb25zZSIsImdldEJvZHkiLCJjb250cm9scyIsImRpc3BsYXlFcnJvciIsInB1c2hQZW5kaW5nUHJvcHNCYWNrVG9EaXJ0eSIsInJlbmRlckVycm9yIiwicHJvY2Vzc1JlcmVuZGVyIiwic2hvdWxkUmVuZGVyIiwiaXNUdXJib0VuYWJsZWQiLCJ2aXNpdCIsIm1vZGlmaWVkTW9kZWxWYWx1ZXMiLCJtYXRjaGVzIiwiaGFuZGxlUGVuZGluZ0NoYW5nZXMiLCJnZXRVbnN5bmNlZElucHV0cyIsIm5ld1Byb3BzIiwiZ2V0Q29tcG9uZW50UHJvcHMiLCJyZWluaXRpYWxpemVBbGxQcm9wcyIsImV2ZW50c1RvRW1pdCIsImdldEV2ZW50c1RvRW1pdCIsImJyb3dzZXJFdmVudHNUb0Rpc3BhdGNoIiwiZ2V0QnJvd3NlckV2ZW50c1RvRGlzcGF0Y2giLCJlbWl0U2VsZiIsIkN1c3RvbUV2ZW50IiwiYnViYmxlcyIsImNhbGN1bGF0ZURlYm91bmNlIiwiZ2V0RWxlbWVudEJ5SWQiLCJwYWRkaW5nIiwiYmFja2dyb3VuZENvbG9yIiwiekluZGV4IiwiZGlzcGxheSIsImZsZXhEaXJlY3Rpb24iLCJpZnJhbWUiLCJib3JkZXJSYWRpdXMiLCJmbGV4R3JvdyIsImNvbnRlbnRXaW5kb3ciLCJ3cml0ZSIsImNsb3NlTW9kYWwiLCJmb2N1cyIsInN0b3JlTmV3UHJvcHNGcm9tUGFyZW50IiwicHJveGlmeUNvbXBvbmVudCIsIlByb3h5IiwicHJvcCIsImNhbGxhYmxlIiwiUmVmbGVjdCIsImdldERhdGEiLCJCYWNrZW5kUmVxdWVzdCIsInVwZGF0ZU1vZGVscyIsImlzUmVzb2x2ZWQiLCJ1cGRhdGVkTW9kZWxzIiwidGFyZ2V0ZWRBY3Rpb25zIiwidGFyZ2V0ZWRNb2RlbHMiLCJSZXF1ZXN0QnVpbGRlciIsImNzcmZUb2tlbiIsInNwbGl0VXJsIiwicXVlcnlTdHJpbmciLCJVUkxTZWFyY2hQYXJhbXMiLCJmZXRjaE9wdGlvbnMiLCJBY2NlcHQiLCJ0b3RhbEZpbGVzIiwicmVkdWNlIiwiaGFzRmluZ2VycHJpbnRzIiwid2lsbERhdGFGaXRJblVybCIsInJlcXVlc3REYXRhIiwicHJvcHNGcm9tUGFyZW50IiwicGFyYW1zU3RyaW5nIiwidG9TdHJpbmciLCJwcm9wc0pzb24iLCJ1cGRhdGVkSnNvbiIsImNoaWxkcmVuSnNvbiIsInByb3BzRnJvbVBhcmVudEpzb24iLCJ1cmxFbmNvZGVkSnNvbkRhdGEiLCJCYWNrZW5kIiwicmVxdWVzdEJ1aWxkZXIiLCJidWlsZFJlcXVlc3QiLCJiYWNrZW5kQWN0aW9uIiwiU3RpbXVsdXNFbGVtZW50RHJpdmVyIiwiY29udHJvbGxlciIsIm1vZGVsRGlyZWN0aXZlIiwicHJvcHNWYWx1ZSIsImV2ZW50c1RvRW1pdFZhbHVlIiwiZXZlbnRzVG9EaXNwYXRjaFZhbHVlIiwiTG9hZGluZ1BsdWdpbiIsInJlcXVlc3QiLCJzdGFydExvYWRpbmciLCJmaW5pc2hMb2FkaW5nIiwidGFyZ2V0RWxlbWVudCIsImhhbmRsZUxvYWRpbmdUb2dnbGUiLCJpc0xvYWRpbmciLCJhZGRBdHRyaWJ1dGVzIiwicmVtb3ZlQXR0cmlidXRlcyIsImdldExvYWRpbmdEaXJlY3RpdmVzIiwiaGFuZGxlTG9hZGluZ0RpcmVjdGl2ZSIsImZpbmFsQWN0aW9uIiwicGFyc2VMb2FkaW5nQWN0aW9uIiwidmFsaWRNb2RpZmllcnMiLCJtb2RpZmllciIsInBhcnNlSW50IiwiY29udGFpbnNPbmVPZkFjdGlvbnMiLCJhcmVBbnlNb2RlbHNVcGRhdGVkIiwibG9hZGluZ0RpcmVjdGl2ZSIsInNob3dFbGVtZW50IiwiaGlkZUVsZW1lbnQiLCJsb2FkaW5nRGlyZWN0aXZlcyIsIm1hdGNoaW5nRWxlbWVudHMiLCJTVkdFbGVtZW50IiwibG9hZGluZyIsImF0dHJpYnV0ZSIsIlZhbGlkYXRlZEZpZWxkc1BsdWdpbiIsImhhbmRsZU1vZGVsU2V0IiwidmFsaWRhdGVkRmllbGRzIiwiUGFnZVVubG9hZGluZ1BsdWdpbiIsImlzQ29ubmVjdGVkIiwiUG9sbGluZ0RpcmVjdG9yIiwiaXNQb2xsaW5nQWN0aXZlIiwicG9sbGluZ0ludGVydmFscyIsImFjdGlvbk5hbWUiLCJkdXJhdGlvbiIsInBvbGxzIiwiaW5pdGlhdGVQb2xsIiwic3RvcEFsbFBvbGxpbmciLCJzdGFydEFsbFBvbGxpbmciLCJ0aW1lciIsIlBvbGxpbmdQbHVnaW4iLCJwb2xsaW5nRGlyZWN0b3IiLCJpbml0aWFsaXplUG9sbGluZyIsImFkZFBvbGwiLCJjbGVhclBvbGxpbmciLCJyYXdQb2xsQ29uZmlnIiwid2FybiIsIlNldFZhbHVlT250b01vZGVsRmllbGRzUGx1Z2luIiwic3luY2hyb25pemVWYWx1ZU9mTW9kZWxGaWVsZHMiLCJIVE1MRm9ybUVsZW1lbnQiLCJnZXRNb2RlbEJpbmRpbmciLCJ0YXJnZXRFdmVudE5hbWUiLCJpbm5lck1vZGVsTmFtZSIsImlzVmFsdWVFbXB0eSIsInRvUXVlcnlTdHJpbmciLCJidWlsZFF1ZXJ5U3RyaW5nRW50cmllcyIsImJhc2VLZXkiLCJpS2V5IiwiaVZhbHVlIiwiZnJvbVF1ZXJ5U3RyaW5nIiwiaW5zZXJ0RG90Tm90YXRlZFZhbHVlSW50b0RhdGEiLCJmaXJzdCIsInNlY29uZCIsInJlc3QiLCJpc05hTiIsImRlY29kZVVSSUNvbXBvbmVudCIsImRvdE5vdGF0ZWRLZXkiLCJVcmxVdGlscyIsInNldERhdGEiLCJIaXN0b3J5U3RyYXRlZ3kiLCJyZXBsYWNlU3RhdGUiLCJRdWVyeVN0cmluZ1BsdWdpbiIsIm1hcHBpbmciLCJ1cmxVdGlscyIsImN1cnJlbnRVcmwiLCJDaGlsZENvbXBvbmVudFBsdWdpbiIsInBhcmVudE1vZGVsQmluZGluZ3MiLCJtb2RlbERpcmVjdGl2ZXMiLCJnZXRDaGlsZHJlbkZpbmdlcnByaW50cyIsIm5vdGlmeVBhcmVudE1vZGVsQ2hhbmdlIiwiZmluZ2VycHJpbnRzIiwiZ2V0Q2hpbGRyZW4iLCJ0YWciLCJwYXJlbnRDb21wb25lbnQiLCJtb2RlbEJpbmRpbmciLCJjaGlsZE1vZGVsTmFtZSIsIkxhenlQbHVnaW4iLCJpbnRlcnNlY3Rpb25PYnNlcnZlciIsImdldE5hbWVkSXRlbSIsImdldE9ic2VydmVyIiwidW5vYnNlcnZlIiwiSW50ZXJzZWN0aW9uT2JzZXJ2ZXIiLCJvYnNlcnZlciIsImlzSW50ZXJzZWN0aW5nIiwiTGl2ZUNvbnRyb2xsZXJEZWZhdWx0IiwicGVuZGluZ0FjdGlvblRyaWdnZXJNb2RlbEVsZW1lbnQiLCJoYW5kbGVDaGFuZ2VFdmVudCIsImNyZWF0ZUNvbXBvbmVudCIsImNvbm5lY3RDb21wb25lbnQiLCJkaXNjb25uZWN0Q29tcG9uZW50IiwiY3VycmVudFRhcmdldCIsInVwZGF0ZU1vZGVsRnJvbUVsZW1lbnRFdmVudCIsInJhd0FjdGlvbiIsImFjdGlvbkFyZ3MiLCJnZXRFbWl0RGlyZWN0aXZlcyIsIm5hbWVNYXRjaCIsIl91cGRhdGVGcm9tUGFyZW50UHJvcHMiLCJwcm9wc1VwZGF0ZWRGcm9tUGFyZW50VmFsdWUiLCJmaW5nZXJwcmludFZhbHVlIiwiZXZlbnRJbmZvIiwiZXZlbnRBcmdzIiwiZW1pdHMiLCJuYW1lVmFsdWUiLCJsaXN0ZW5lcnNWYWx1ZSIsImJhY2tlbmRGYWN0b3J5IiwicHJveGllZENvbXBvbmVudCIsIl9fY29tcG9uZW50IiwiaGFzRGVib3VuY2VWYWx1ZSIsImRlYm91bmNlVmFsdWUiLCJxdWVyeU1hcHBpbmdWYWx1ZSIsImFkZFBsdWdpbiIsImNvbm5lY3QiLCJmaW5hbFZhbHVlIiwiY2FuQnViYmxlIiwiY2FuY2VsYWJsZSIsInByb3BzVXBkYXRlZEZyb21QYXJlbnQiLCJjc3JmIiwiZXZlbnRzVG9EaXNwYXRjaCIsInJlcXVlc3RNZXRob2QiLCJxdWVyeU1hcHBpbmciLCJyZXF1ZXN0TWV0aG9kVmFsdWUiLCJjc3JmVmFsdWUiLCJyZWdpc3RlcmFibGVzIiwiQ2hhcnQiLCJpc0NoYXJ0SW5pdGlhbGl6ZWQiLCJjaGFydCIsIkhUTUxDYW52YXNFbGVtZW50Iiwidmlld1ZhbHVlIiwiY2FudmFzQ29udGV4dCIsInVwZGF0ZSIsInJlc3BvbnNpdmUiLCJvcmlnaW5hbFdpZHRoIiwidmlldyJdLCJzb3VyY2VSb290IjoiIn0= \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QUMsRUFBQyxRQUFRLEtBQUc2VSxDQUFDLENBQUM3VSxHQUFHLEtBQUcsS0FBSyxLQUFHcVYsQ0FBQyxDQUFDclYsR0FBRyxJQUFFd1MsQ0FBQyxHQUFDTSxDQUFDLEdBQUN3QyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUU5QyxDQUFDLElBQUVnQyxDQUFDLEVBQUNLLENBQUMsQ0FBQzdVLEdBQUcsR0FBQyxLQUFLLEVBQUN3UyxDQUFDLElBQUVNLENBQUMsRUFBQ3VDLENBQUMsQ0FBQ3JWLEdBQUcsR0FBQyxRQUFRLElBQUUsUUFBUSxLQUFHcVYsQ0FBQyxDQUFDclYsR0FBRyxJQUFFd1MsQ0FBQyxHQUFDOEMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFFOUMsQ0FBQyxJQUFFLENBQUMsR0FBQ00sQ0FBQyxHQUFDMEIsQ0FBQyxDQUFDLElBQUVjLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBRzlDLENBQUMsSUFBRU0sQ0FBQyxHQUFDMEIsQ0FBQyxFQUFDSyxDQUFDLENBQUM3VSxHQUFHLEdBQUMsS0FBSyxFQUFDcVYsQ0FBQyxDQUFDclYsR0FBRyxHQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUMsUUFBUSxLQUFHNlUsQ0FBQyxDQUFDN1UsR0FBRyxLQUFHd1MsQ0FBQyxHQUFDTSxDQUFDLEdBQUN3QyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUUsS0FBSyxLQUFHRCxDQUFDLENBQUNyVixHQUFHLElBQUV3UyxDQUFDLElBQUVNLENBQUMsRUFBQ3VDLENBQUMsQ0FBQ3JWLEdBQUcsR0FBQyxRQUFRLElBQUV3UyxDQUFDLEdBQUM4QyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUUsUUFBUSxLQUFHRCxDQUFDLENBQUNyVixHQUFHLEtBQUd3UyxDQUFDLElBQUVNLENBQUMsRUFBQ3VDLENBQUMsQ0FBQ3JWLEdBQUcsR0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxRQUFRLEtBQUdzVCxDQUFDLElBQUUsTUFBTSxLQUFHQSxDQUFDLE1BQUkxUixDQUFDLEdBQUMwVCxDQUFDLENBQUMsQ0FBQyxDQUFD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SSxDQUFDMHlCLEtBQUssQ0FBQ3IyQyxPQUFPLENBQUMwMkMsVUFBVSxFQUFFO1VBQ2hELElBQU1DLGFBQWEsR0FBR2h6QixhQUFhLENBQUNsZixLQUFLLENBQUMvRCxLQUFLO1VBQy9DaWpCLGFBQWEsQ0FBQ2xmLEtBQUssQ0FBQy9ELEtBQUssYUFBTWlqQixhQUFhLENBQUN4SCxXQUFXLEdBQUcsQ0FBQyxPQUFJO1VBQ2hFcFksVUFBVSxDQUFDLFlBQU07WUFDYjRmLGFBQWEsQ0FBQ2xmLEtBQUssQ0FBQy9ELEtBQUssR0FBR2kyQyxhQUFhO1VBQzdDLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDVDtNQUNKO0lBQ0o7RUFBQztJQUFBO0lBQUEsT0FDRCx1QkFBY2owQyxJQUFJLEVBQUVzbkIsT0FBTyxFQUFFO01BQ3pCLElBQUksQ0FBQ0MsUUFBUSxDQUFDdm5CLElBQUksRUFBRTtRQUFFd25CLE1BQU0sRUFBRUYsT0FBTztRQUFFRyxNQUFNLEVBQUU7TUFBVSxDQUFDLENBQUM7SUFDL0Q7RUFBQztFQUFBO0FBQUEsRUFwRG1CMUMsMkRBQVU7QUFzRGxDYyxTQUFTLENBQUNnSCxNQUFNLEdBQUc7RUFDZnFuQixJQUFJLEVBQUU5NUI7QUFDVixDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vYXNzZXRzL2NvbnRyb2xsZXJzLmpzb24iLCJ3ZWJwYWNrOi8vLy4vYXNzZXRzL2JhY2tlbmQvZGFzaGJvYXJkL2Rhc2hib2FyZC5qcyIsIndlYnBhY2s6Ly8vLi9hc3NldHMvYmFja2VuZC9kYXNoYm9hcmQvanMvYXBwLmpzIiwid2VicGFjazovLy8uL2Fzc2V0cy9iYWNrZW5kL2Rhc2hib2FyZC9qcy9kcm9wem9uZS5qcyIsIndlYnBhY2s6Ly8vLi9hc3NldHMvYmFja2VuZC9kYXNoYm9hcmQvanMvb3JkZXIuanMiLCJ3ZWJwYWNrOi8vLy4vYXNzZXRzL2JhY2tlbmQvZGFzaGJvYXJkL2pzL3Byb2R1Y3QuanMiLCJ3ZWJwYWNrOi8vLy4vYXNzZXRzL2JhY2tlbmQvZGFzaGJvYXJkL2pzL3Byb2R1Y3Qvc2V0LmpzIiwid2VicGFjazovLy8uL2Fzc2V0cy9iYWNrZW5kL2Rhc2hib2FyZC9qcy9zdW1tZXJub3RlL21lZGlhYnVuZGxlLnBsdWdpbi5qcyIsIndlYnBhY2s6Ly8vLi9hc3NldHMvYmFja2VuZC9kYXNoYm9hcmQvanMvdGV0aGVyLm1pbi5qcyIsIndlYnBhY2s6Ly8vLi9hc3NldHMvYmFja2VuZC9kYXNoYm9hcmQvanMvdG9vbHMvYWpheE1vZGFsLmpzIiwid2VicGFjazovLy8uL2Fzc2V0cy9iYWNrZW5kL2Rhc2hib2FyZC9qcy90b29scy9jYXJnb2JheS5nZW5lcmFsLm1pbi5qcyIsIndlYnBhY2s6Ly8vLi9hc3NldHMvYmFja2VuZC9kYXNoYm9hcmQvanMvdG9vbHMvY2FyZ29iYXkudG9vZ2xlLm1pbi5qcyIsIndlYnBhY2s6Ly8vLi9hc3NldHMvYmFja2VuZC9kYXNoYm9hcmQvanMvdG9vbHMvbWVkaWFDaG9vc2VyLmpzIiwid2VicGFjazovLy8uL3ZlbmRvci9zeW1mb255L3V4LWF1dG9jb21wbGV0ZS9hc3NldHMvZGlzdC9jb250cm9sbGVyLmpzIiwid2VicGFjazovLy8uL3ZlbmRvci9zeW1mb255L3V4LWxpdmUtY29tcG9uZW50L2Fzc2V0cy9kaXN0L2xpdmVfY29udHJvbGxlci5qcyIsIndlYnBhY2s6Ly8vLi9hc3NldHMvYmFja2VuZC9kYXNoYm9hcmQvY3NzL3Rvb2xzL2NhcmdvYmF5LnRvb2dsZS5taW4uY3NzPzg1NmEiLCJ3ZWJwYWNrOi8vLy4vdmVuZG9yL3N5bWZvbnkvdXgtbGl2ZS1jb21wb25lbnQvYXNzZXRzL2Rpc3QvbGl2ZS5taW4uY3NzP2RlOWEiLCJ3ZWJwYWNrOi8vLy4vYXNzZXRzL2JhY2tlbmQvZGFzaGJvYXJkL2xlc3MvYmFzZS5sZXNzP2VhNDQiLCJ3ZWJwYWNrOi8vLy4vdmVuZG9yL3N5bWZvbnkvdXgtY2hhcnRqcy9hc3NldHMvZGlzdC9jb250cm9sbGVyLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBjb250cm9sbGVyXzAgZnJvbSAnQHN5bWZvbnkvdXgtYXV0b2NvbXBsZXRlL2Rpc3QvY29udHJvbGxlci5qcyc7XG5pbXBvcnQgJ3RvbS1zZWxlY3QvZGlzdC9jc3MvdG9tLXNlbGVjdC5ib290c3RyYXA1LmNzcyc7XG5pbXBvcnQgY29udHJvbGxlcl8xIGZyb20gJ0BzeW1mb255L3V4LWNoYXJ0anMvZGlzdC9jb250cm9sbGVyLmpzJztcbmltcG9ydCBjb250cm9sbGVyXzIgZnJvbSAnQHN5bWZvbnkvdXgtbGl2ZS1jb21wb25lbnQvZGlzdC9saXZlX2NvbnRyb2xsZXIuanMnO1xuaW1wb3J0ICdAc3ltZm9ueS91eC1saXZlLWNvbXBvbmVudC9kaXN0L2xpdmUubWluLmNzcyc7XG5leHBvcnQgZGVmYXVsdCB7XG4gICdzeW1mb255LS11eC1hdXRvY29tcGxldGUtLWF1dG9jb21wbGV0ZSc6IGNvbnRyb2xsZXJfMCxcbiAgJ3N5bWZvbnktLXV4LWNoYXJ0anMtLWNoYXJ0JzogY29udHJvbGxlcl8xLFxuICAnbGl2ZSc6IGNvbnRyb2xsZXJfMixcbn07IiwiaW1wb3J0IEJzNVV0aWxzIGZyb20gXCJiczUtdXRpbHNcIjtcbmltcG9ydCB7IHN0YXJ0U3RpbXVsdXNBcHAgfSBmcm9tICdAc3ltZm9ueS9zdGltdWx1cy1icmlkZ2UnO1xuY29uc3QgYXBwID0gc3RhcnRTdGltdWx1c0FwcCgpO1xuZ2xvYmFsLiQgPSBnbG9iYWwualF1ZXJ5ID0gd2luZG93LmpRdWVyeSA9IHJlcXVpcmUoJ2pxdWVyeScpO1xucmVxdWlyZSgnQHBvcHBlcmpzL2NvcmUvZGlzdC9janMvcG9wcGVyJyk7XG5nbG9iYWwuYm9vdHN0cmFwID0gcmVxdWlyZSgnYm9vdHN0cmFwL2Rpc3QvanMvYm9vdHN0cmFwJyk7XG5nbG9iYWwuYnM1VXRpbHMgPSBuZXcgQnM1VXRpbHMoKTtcbnJlcXVpcmUoJy4vanMvdGV0aGVyLm1pbicpO1xucmVxdWlyZSgnLi9qcy9kcm9wem9uZScpO1xuZ2xvYmFsLlJhcGhhZWwgPSByZXF1aXJlKCdyYXBoYWVsL3JhcGhhZWwubWluJyk7XG5yZXF1aXJlKCdtb3JyaXMuanMvbW9ycmlzLm1pbicpO1xucmVxdWlyZSgnc3VtbWVybm90ZS9kaXN0L3N1bW1lcm5vdGUtbGl0ZScpO1xucmVxdWlyZSgnLi9qcy9zdW1tZXJub3RlL21lZGlhYnVuZGxlLnBsdWdpbicpO1xucmVxdWlyZSgnbXVsdGlzZWxlY3QtdHdvLXNpZGVzL2Rpc3QvanMvbXVsdGlzZWxlY3QnKTtcbnJlcXVpcmUoJ2Jvb3RzdHJhcC10b2dnbGUvanMvYm9vdHN0cmFwLXRvZ2dsZS5taW4nKTtcbmltcG9ydCBhY2UgZnJvbSAnYnJhY2UnXG5pbXBvcnQgJ2JyYWNlL21vZGUvaHRtbCdcbmltcG9ydCAnYnJhY2UvbW9kZS9waHAnXG5pbXBvcnQgJ2JyYWNlL21vZGUveG1sJ1xuaW1wb3J0ICdicmFjZS90aGVtZS9tb25va2FpJ1xuaW1wb3J0ICdicmFjZS9leHQvc2VhcmNoYm94J1xuXG5nbG9iYWwuRHJvcHpvbmUgPSByZXF1aXJlKCcuL2pzL2Ryb3B6b25lJyk7XG5cbmdsb2JhbC5jYXJnb2JheSA9IHt9O1xuZ2xvYmFsLmNhcmdvYmF5LmdlbmVyYWwgPSByZXF1aXJlKCcuL2pzL3Rvb2xzL2NhcmdvYmF5LmdlbmVyYWwubWluJyk7XG5nbG9iYWwuY2FyZ29iYXkudG9nZ2xlID0gIHJlcXVpcmUoJy4vanMvdG9vbHMvY2FyZ29iYXkudG9vZ2xlLm1pbicpO1xuXG5nbG9iYWwucHNjID0ge307XG5nbG9iYWwucHNjLmFqYXhNb2RhbCA9IHJlcXVpcmUoJy4vanMvdG9vbHMvYWpheE1vZGFsJyk7XG5nbG9iYWwucHNjLm1lZGlhQ2hvb3NlciA9IHJlcXVpcmUoJy4vanMvdG9vbHMvbWVkaWFDaG9vc2VyJyk7XG5nbG9iYWwucHNjLmFwcCA9IHJlcXVpcmUoJy4vanMvYXBwJyk7XG5nbG9iYWwucHNjLm9yZGVyID0gcmVxdWlyZSgnLi9qcy9vcmRlci5qcycpO1xuZ2xvYmFsLnBzYy5wcm9kdWN0ID0gcmVxdWlyZSgnLi9qcy9wcm9kdWN0LmpzJyk7XG5cbmdsb2JhbC5wc2MuYXBwLmluaXQoKTtcblxuaW1wb3J0ICcuL2pzL3Rvb2xzL21lZGlhQ2hvb3Nlcic7XG5pbXBvcnQgJ2Jvb3RzdHJhcC9zY3NzL2Jvb3RzdHJhcC5zY3NzJztcbmltcG9ydCAnLi9jc3MvdG9vbHMvY2FyZ29iYXkudG9vZ2xlLm1pbi5jc3MnO1xuaW1wb3J0ICcuL2xlc3MvYmFzZS5sZXNzJztcbmltcG9ydCAnc3VtbWVybm90ZS9kaXN0L3N1bW1lcm5vdGUtbGl0ZS5taW4uY3NzJztcbi8vaW1wb3J0ICdtdWx0aXNlbGVjdC9jc3MvbXVsdGktc2VsZWN0LmNzcyc7XG5pbXBvcnQgJ2Jvb3RzdHJhcC10b2dnbGUvY3NzL2Jvb3RzdHJhcC10b2dnbGUubWluLmNzcyc7XG4iLCJcblxuZGVmaW5lKGZ1bmN0aW9uKCkge1xuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgLy8gR2VuZXJhbCBBcHAgaW5pdFxuICAgICAgICBpbml0KCkge1xuXG4gICAgICAgICAgICBwc2MuYWpheE1vZGFsLmluaXQoKTtcbiAgICAgICAgICAgIHBzYy5tZWRpYUNob29zZXIuaW5pdCgpO1xuICAgICAgICAgICAgcHNjLm9yZGVyLmluaXQoKTtcbiAgICAgICAgICAgIHBzYy5wcm9kdWN0LmluaXQoKTtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgYm9vdHN0cmFwQXBwID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgYm9vdHN0cmFwQXBwKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuXG5cbiQoZnVuY3Rpb24oKSB7XG5cbiAgICAkKCdbZGF0YS1icy10b2dnbGU9XCJ0b29sdGlwXCJdJykuY2xpY2soZnVuY3Rpb24oZWwpIHtcbiAgICAgICAgYnM1VXRpbHMuVG9hc3Quc2hvdyh7XG4gICAgICAgICAgICB0eXBlOiAncHJpbWFyeScsXG4gICAgICAgICAgICBpY29uOiAnPGkgY2xhc3M9XCJmYXIgZmEtY2hlY2stY2lyY2xlIGZhLWxnIG1lLTJcIj48L2k+JyxcbiAgICAgICAgICAgIHRpdGxlOiAkKHRoaXMpLmh0bWwoKSxcbiAgICAgICAgICAgIGNvbnRlbnQ6ICQodGhpcykuZGF0YSgnYnMtaHRtbCcpLFxuICAgICAgICAgICAgYnV0dG9uczogW1xuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgdGV4dDogJ0NvcHkgdG8gY2xpcGJvYXJkJyxcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M6ICdidG4gYnRuLXNtIGJ0bi13YXJuaW5nJyxcbiAgICAgICAgICAgICAgICAgICAgaGFuZGxlcjogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgbmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQoJCh0aGlzKS5kYXRhKCdicy1odG1sJykpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIGRlbGF5OiAwLFxuICAgICAgICAgICAgZGlzbWlzc2libGU6IHRydWVcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnNvbGUubG9nKHRoaXMpO1xuXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH0pO1xuXG4gICAgJCgnYVtkYXRhLWJzLXRvZ2dsZT1cInRhYlwiXScpLm9uKCdzaG93bi5icy50YWInLCBmdW5jdGlvbiAoZSkge1xuICAgICAgICBpZigkKGUudGFyZ2V0KS5wYXJlbnQoKS5wYXJlbnQoKS5wYXJlbnQoKS5hdHRyKCdpZCcpICYmICQoZS50YXJnZXQpLnBhcmVudCgpLnBhcmVudCgpLnBhcmVudCgpLmF0dHIoJ2lkJykgPT0gJ2RvYycpIHtcbiAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdsYXN0VGFiRG9jJywgJCh0aGlzKS5hdHRyKCdocmVmJykpO1xuICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdsYXN0VGFiJywgJCh0aGlzKS5hdHRyKCdocmVmJykpO1xuICAgICAgICB9O1xuXG4gICAgfSk7XG5cbiAgICAvLyBnbyB0byB0aGUgbGF0ZXN0IHRhYiwgaWYgaXQgZXhpc3RzOlxuICAgIHZhciBsYXN0VGFiID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2xhc3RUYWInKTtcbiAgICBpZiAobGFzdFRhYikge1xuICAgICAgICAkKCdbaHJlZj1cIicgKyBsYXN0VGFiICsgJ1wiXScpLnRhYignc2hvdycpO1xuICAgIH1cblxuICAgIHZhciBsYXN0VGFiRG9jID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2xhc3RUYWJEb2MnKTtcbiAgICBpZiAobGFzdFRhYkRvYykge1xuICAgICAgICAkKCdbaHJlZj1cIicgKyBsYXN0VGFiRG9jICsgJ1wiXScpLnRhYignc2hvdycpO1xuICAgIH1cblxuICAgICQoJy5uYXYgbGkgdWwnKS5wYXJlbnQoKS5maW5kKCdhJykuY2xpY2soZnVuY3Rpb24oKSB7XG4gICAgICAgICQodGhpcykucGFyZW50KCkuZmluZChcInVsXCIpLnRvZ2dsZSgpO1xuICAgIH0pO1xuXG4gICAgJCgnaW5wdXRbZGF0YS1icy10b2dnbGU9XCJ0b2dnbGVcIl0sIGlucHV0LmFqYXhUb29nbGUnKS5jaGFuZ2UoZnVuY3Rpb24oKSB7XG4gICAgICAgICQuZ2V0SlNPTigkKHRoaXMpLmRhdGEoJ3VybCcpKTtcbiAgICB9KTtcblxuICAgICQoJ3NlbGVjdC5tdWx0aXBsZScpLm11bHRpc2VsZWN0KHtcbiAgICAgICAgc3VibWl0QWxsTGVmdDogZmFsc2UsXG4gICAgICAgIHN1Ym1pdEFsbFJpZ2h0OiB0cnVlLFxuICAgICAgICBzZWFyY2g6IHtcbiAgICAgICAgICAgIGxlZnQ6ICc8aW5wdXQgdHlwZT1cInRleHRcIiBuYW1lPVwicVwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgcGxhY2Vob2xkZXI9XCJTZWFyY2guLi5cIiAvPicsXG4gICAgICAgICAgICByaWdodDogJzxpbnB1dCB0eXBlPVwidGV4dFwiIG5hbWU9XCJxXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBwbGFjZWhvbGRlcj1cIlNlYXJjaC4uLlwiIC8+JyxcbiAgICAgICAgfSxcbiAgICAgICAgZmlyZVNlYXJjaDogZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZS5sZW5ndGggPiAxO1xuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICAkKCcuc3VtbWVybm90ZScpLnN1bW1lcm5vdGUoe1xuICAgICAgICBoZWlnaHQ6IDQwMCxcbiAgICAgICAgdG9vbGJhcjogW1xuICAgICAgICAgICAgICAgIFsnc3R5bGUnLCBbJ3N0eWxlJ11dLFxuICAgICAgICAgICAgICAgIFsnZm9udCcsIFsnYm9sZCcsICdpdGFsaWMnLCAndW5kZXJsaW5lJywgJ2NsZWFyJ11dLFxuICAgICAgICAgICAgICAgIFsnZm9udHNpemUnLCBbJ2ZvbnRzaXplJ11dLFxuICAgICAgICAgICAgICAgIFsnY29sb3InLCBbJ2NvbG9yJ11dLFxuICAgICAgICAgICAgICAgIFsncGFyYScsIFsndWwnLCAnb2wnLCAncGFyYWdyYXBoJ11dLFxuICAgICAgICAgICAgICAgIFsnaGVpZ2h0JywgWydoZWlnaHQnXV0sXG4gICAgICAgICAgICAgICAgWyd0YWJsZScsIFsndGFibGUnXV0sXG4gICAgICAgICAgICAgICAgWydpbnNlcnQnLCBbJ2xpbmsnLCAnaHInXV0sXG4gICAgICAgICAgICAgICAgWyd2aWV3JywgWydmdWxsc2NyZWVuJywgJ2NvZGV2aWV3J11dLFxuICAgICAgICAgICAgICAgIFsnaGVscCcsIFsnaGVscCddXSxcbiAgICAgICAgICAgICAgICBbJ21lZGlhJywgWydtZWRpYSddXVxuICAgICAgICBdXG4gICAgfSk7XG59KTtcbiIsIlxuLypcbiAqXG4gKiBNb3JlIGluZm8gYXQgW3d3dy5kcm9wem9uZWpzLmNvbV0oaHR0cDovL3d3dy5kcm9wem9uZWpzLmNvbSlcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTIsIE1hdGlhcyBNZW5vXG4gKlxuICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weVxuICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbFxuICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0c1xuICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbFxuICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzXG4gKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuICpcbiAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluXG4gKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbiAqXG4gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbiAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbiAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU5cbiAqIFRIRSBTT0ZUV0FSRS5cbiAqXG4gKi9cblxuKGZ1bmN0aW9uKCkge1xuICB2YXIgRHJvcHpvbmUsIEVtaXR0ZXIsIGNhbWVsaXplLCBjb250ZW50TG9hZGVkLCBkZXRlY3RWZXJ0aWNhbFNxdWFzaCwgZHJhd0ltYWdlSU9TRml4LCBub29wLCB3aXRob3V0LFxuICAgIF9fc2xpY2UgPSBbXS5zbGljZSxcbiAgICBfX2hhc1Byb3AgPSB7fS5oYXNPd25Qcm9wZXJ0eSxcbiAgICBfX2V4dGVuZHMgPSBmdW5jdGlvbihjaGlsZCwgcGFyZW50KSB7IGZvciAodmFyIGtleSBpbiBwYXJlbnQpIHsgaWYgKF9faGFzUHJvcC5jYWxsKHBhcmVudCwga2V5KSkgY2hpbGRba2V5XSA9IHBhcmVudFtrZXldOyB9IGZ1bmN0aW9uIGN0b3IoKSB7IHRoaXMuY29uc3RydWN0b3IgPSBjaGlsZDsgfSBjdG9yLnByb3RvdHlwZSA9IHBhcmVudC5wcm90b3R5cGU7IGNoaWxkLnByb3RvdHlwZSA9IG5ldyBjdG9yKCk7IGNoaWxkLl9fc3VwZXJfXyA9IHBhcmVudC5wcm90b3R5cGU7IHJldHVybiBjaGlsZDsgfTtcblxuICBub29wID0gZnVuY3Rpb24oKSB7fTtcblxuICBFbWl0dGVyID0gKGZ1bmN0aW9uKCkge1xuICAgIGZ1bmN0aW9uIEVtaXR0ZXIoKSB7fVxuXG4gICAgRW1pdHRlci5wcm90b3R5cGUuYWRkRXZlbnRMaXN0ZW5lciA9IEVtaXR0ZXIucHJvdG90eXBlLm9uO1xuXG4gICAgRW1pdHRlci5wcm90b3R5cGUub24gPSBmdW5jdGlvbihldmVudCwgZm4pIHtcbiAgICAgIHRoaXMuX2NhbGxiYWNrcyA9IHRoaXMuX2NhbGxiYWNrcyB8fCB7fTtcbiAgICAgIGlmICghdGhpcy5fY2FsbGJhY2tzW2V2ZW50XSkge1xuICAgICAgICB0aGlzLl9jYWxsYmFja3NbZXZlbnRdID0gW107XG4gICAgICB9XG4gICAgICB0aGlzLl9jYWxsYmFja3NbZXZlbnRdLnB1c2goZm4pO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcblxuICAgIEVtaXR0ZXIucHJvdG90eXBlLmVtaXQgPSBmdW5jdGlvbigpIHtcbiAgICAgIHZhciBhcmdzLCBjYWxsYmFjaywgY2FsbGJhY2tzLCBldmVudCwgX2ksIF9sZW47XG4gICAgICBldmVudCA9IGFyZ3VtZW50c1swXSwgYXJncyA9IDIgPD0gYXJndW1lbnRzLmxlbmd0aCA/IF9fc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpIDogW107XG4gICAgICB0aGlzLl9jYWxsYmFja3MgPSB0aGlzLl9jYWxsYmFja3MgfHwge307XG4gICAgICBjYWxsYmFja3MgPSB0aGlzLl9jYWxsYmFja3NbZXZlbnRdO1xuICAgICAgaWYgKGNhbGxiYWNrcykge1xuICAgICAgICBmb3IgKF9pID0gMCwgX2xlbiA9IGNhbGxiYWNrcy5sZW5ndGg7IF9pIDwgX2xlbjsgX2krKykge1xuICAgICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2tzW19pXTtcbiAgICAgICAgICBjYWxsYmFjay5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcblxuICAgIEVtaXR0ZXIucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyID0gRW1pdHRlci5wcm90b3R5cGUub2ZmO1xuXG4gICAgRW1pdHRlci5wcm90b3R5cGUucmVtb3ZlQWxsTGlzdGVuZXJzID0gRW1pdHRlci5wcm90b3R5cGUub2ZmO1xuXG4gICAgRW1pdHRlci5wcm90b3R5cGUucmVtb3ZlRXZlbnRMaXN0ZW5lciA9IEVtaXR0ZXIucHJvdG90eXBlLm9mZjtcblxuICAgIEVtaXR0ZXIucHJvdG90eXBlLm9mZiA9IGZ1bmN0aW9uKGV2ZW50LCBmbikge1xuICAgICAgdmFyIGNhbGxiYWNrLCBjYWxsYmFja3MsIGksIF9pLCBfbGVuO1xuICAgICAgaWYgKCF0aGlzLl9jYWxsYmFja3MgfHwgYXJndW1lbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICB0aGlzLl9jYWxsYmFja3MgPSB7fTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9XG4gICAgICBjYWxsYmFja3MgPSB0aGlzLl9jYWxsYmFja3NbZXZlbnRdO1xuICAgICAgaWYgKCFjYWxsYmFja3MpIHtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9XG4gICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICBkZWxldGUgdGhpcy5fY2FsbGJhY2tzW2V2ZW50XTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9XG4gICAgICBmb3IgKGkgPSBfaSA9IDAsIF9sZW4gPSBjYWxsYmFja3MubGVuZ3RoOyBfaSA8IF9sZW47IGkgPSArK19pKSB7XG4gICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2tzW2ldO1xuICAgICAgICBpZiAoY2FsbGJhY2sgPT09IGZuKSB7XG4gICAgICAgICAgY2FsbGJhY2tzLnNwbGljZShpLCAxKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcblxuICAgIHJldHVybiBFbWl0dGVyO1xuXG4gIH0pKCk7XG5cbiAgRHJvcHpvbmUgPSAoZnVuY3Rpb24oX3N1cGVyKSB7XG4gICAgdmFyIGV4dGVuZCwgcmVzb2x2ZU9wdGlvbjtcblxuICAgIF9fZXh0ZW5kcyhEcm9wem9uZSwgX3N1cGVyKTtcblxuICAgIERyb3B6b25lLnByb3RvdHlwZS5FbWl0dGVyID0gRW1pdHRlcjtcblxuXG4gICAgLypcbiAgICBUaGlzIGlzIGEgbGlzdCBvZiBhbGwgYXZhaWxhYmxlIGV2ZW50cyB5b3UgY2FuIHJlZ2lzdGVyIG9uIGEgZHJvcHpvbmUgb2JqZWN0LlxuICAgIFxuICAgIFlvdSBjYW4gcmVnaXN0ZXIgYW4gZXZlbnQgaGFuZGxlciBsaWtlIHRoaXM6XG4gICAgXG4gICAgICAgIGRyb3B6b25lLm9uKFwiZHJhZ0VudGVyXCIsIGZ1bmN0aW9uKCkgeyB9KTtcbiAgICAgKi9cblxuICAgIERyb3B6b25lLnByb3RvdHlwZS5ldmVudHMgPSBbXCJkcm9wXCIsIFwiZHJhZ3N0YXJ0XCIsIFwiZHJhZ2VuZFwiLCBcImRyYWdlbnRlclwiLCBcImRyYWdvdmVyXCIsIFwiZHJhZ2xlYXZlXCIsIFwiYWRkZWRmaWxlXCIsIFwiYWRkZWRmaWxlc1wiLCBcInJlbW92ZWRmaWxlXCIsIFwidGh1bWJuYWlsXCIsIFwiZXJyb3JcIiwgXCJlcnJvcm11bHRpcGxlXCIsIFwicHJvY2Vzc2luZ1wiLCBcInByb2Nlc3NpbmdtdWx0aXBsZVwiLCBcInVwbG9hZHByb2dyZXNzXCIsIFwidG90YWx1cGxvYWRwcm9ncmVzc1wiLCBcInNlbmRpbmdcIiwgXCJzZW5kaW5nbXVsdGlwbGVcIiwgXCJzdWNjZXNzXCIsIFwic3VjY2Vzc211bHRpcGxlXCIsIFwiY2FuY2VsZWRcIiwgXCJjYW5jZWxlZG11bHRpcGxlXCIsIFwiY29tcGxldGVcIiwgXCJjb21wbGV0ZW11bHRpcGxlXCIsIFwicmVzZXRcIiwgXCJtYXhmaWxlc2V4Y2VlZGVkXCIsIFwibWF4ZmlsZXNyZWFjaGVkXCIsIFwicXVldWVjb21wbGV0ZVwiXTtcblxuICAgIERyb3B6b25lLnByb3RvdHlwZS5kZWZhdWx0T3B0aW9ucyA9IHtcbiAgICAgIHVybDogbnVsbCxcbiAgICAgIG1ldGhvZDogXCJwb3N0XCIsXG4gICAgICB3aXRoQ3JlZGVudGlhbHM6IGZhbHNlLFxuICAgICAgcGFyYWxsZWxVcGxvYWRzOiAyLFxuICAgICAgdXBsb2FkTXVsdGlwbGU6IGZhbHNlLFxuICAgICAgbWF4RmlsZXNpemU6IDI1NixcbiAgICAgIHBhcmFtTmFtZTogXCJmaWxlXCIsXG4gICAgICBjcmVhdGVJbWFnZVRodW1ibmFpbHM6IHRydWUsXG4gICAgICBtYXhUaHVtYm5haWxGaWxlc2l6ZTogMTAsXG4gICAgICB0aHVtYm5haWxXaWR0aDogMTIwLFxuICAgICAgdGh1bWJuYWlsSGVpZ2h0OiAxMjAsXG4gICAgICBmaWxlc2l6ZUJhc2U6IDEwMDAsXG4gICAgICBtYXhGaWxlczogbnVsbCxcbiAgICAgIHBhcmFtczoge30sXG4gICAgICBjbGlja2FibGU6IHRydWUsXG4gICAgICBpZ25vcmVIaWRkZW5GaWxlczogdHJ1ZSxcbiAgICAgIGFjY2VwdGVkRmlsZXM6IG51bGwsXG4gICAgICBhY2NlcHRlZE1pbWVUeXBlczogbnVsbCxcbiAgICAgIGF1dG9Qcm9jZXNzUXVldWU6IHRydWUsXG4gICAgICBhdXRvUXVldWU6IHRydWUsXG4gICAgICBhZGRSZW1vdmVMaW5rczogZmFsc2UsXG4gICAgICBwcmV2aWV3c0NvbnRhaW5lcjogbnVsbCxcbiAgICAgIGhpZGRlbklucHV0Q29udGFpbmVyOiBcImJvZHlcIixcbiAgICAgIGNhcHR1cmU6IG51bGwsXG4gICAgICBkaWN0RGVmYXVsdE1lc3NhZ2U6IFwiRHJvcCBmaWxlcyBoZXJlIHRvIHVwbG9hZFwiLFxuICAgICAgZGljdEZhbGxiYWNrTWVzc2FnZTogXCJZb3VyIGJyb3dzZXIgZG9lcyBub3Qgc3VwcG9ydCBkcmFnJ24nZHJvcCBmaWxlIHVwbG9hZHMuXCIsXG4gICAgICBkaWN0RmFsbGJhY2tUZXh0OiBcIlBsZWFzZSB1c2UgdGhlIGZhbGxiYWNrIGZvcm0gYmVsb3cgdG8gdXBsb2FkIHlvdXIgZmlsZXMgbGlrZSBpbiB0aGUgb2xkZW4gZGF5cy5cIixcbiAgICAgIGRpY3RGaWxlVG9vQmlnOiBcIkZpbGUgaXMgdG9vIGJpZyAoe3tmaWxlc2l6ZX19TWlCKS4gTWF4IGZpbGVzaXplOiB7e21heEZpbGVzaXplfX1NaUIuXCIsXG4gICAgICBkaWN0SW52YWxpZEZpbGVUeXBlOiBcIllvdSBjYW4ndCB1cGxvYWQgZmlsZXMgb2YgdGhpcyB0eXBlLlwiLFxuICAgICAgZGljdFJlc3BvbnNlRXJyb3I6IFwiU2VydmVyIHJlc3BvbmRlZCB3aXRoIHt7c3RhdHVzQ29kZX19IGNvZGUuXCIsXG4gICAgICBkaWN0Q2FuY2VsVXBsb2FkOiBcIkNhbmNlbCB1cGxvYWRcIixcbiAgICAgIGRpY3RDYW5jZWxVcGxvYWRDb25maXJtYXRpb246IFwiQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGNhbmNlbCB0aGlzIHVwbG9hZD9cIixcbiAgICAgIGRpY3RSZW1vdmVGaWxlOiBcIlJlbW92ZSBmaWxlXCIsXG4gICAgICBkaWN0UmVtb3ZlRmlsZUNvbmZpcm1hdGlvbjogbnVsbCxcbiAgICAgIGRpY3RNYXhGaWxlc0V4Y2VlZGVkOiBcIllvdSBjYW4gbm90IHVwbG9hZCBhbnkgbW9yZSBmaWxlcy5cIixcbiAgICAgIGFjY2VwdDogZnVuY3Rpb24oZmlsZSwgZG9uZSkge1xuICAgICAgICByZXR1cm4gZG9uZSgpO1xuICAgICAgfSxcbiAgICAgIGluaXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gbm9vcDtcbiAgICAgIH0sXG4gICAgICBmb3JjZUZhbGxiYWNrOiBmYWxzZSxcbiAgICAgIGZhbGxiYWNrOiBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIGNoaWxkLCBtZXNzYWdlRWxlbWVudCwgc3BhbiwgX2ksIF9sZW4sIF9yZWY7XG4gICAgICAgIHRoaXMuZWxlbWVudC5jbGFzc05hbWUgPSBcIlwiICsgdGhpcy5lbGVtZW50LmNsYXNzTmFtZSArIFwiIGR6LWJyb3dzZXItbm90LXN1cHBvcnRlZFwiO1xuICAgICAgICBfcmVmID0gdGhpcy5lbGVtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKFwiZGl2XCIpO1xuICAgICAgICBmb3IgKF9pID0gMCwgX2xlbiA9IF9yZWYubGVuZ3RoOyBfaSA8IF9sZW47IF9pKyspIHtcbiAgICAgICAgICBjaGlsZCA9IF9yZWZbX2ldO1xuICAgICAgICAgIGlmICgvKF58IClkei1tZXNzYWdlKCR8ICkvLnRlc3QoY2hpbGQuY2xhc3NOYW1lKSkge1xuICAgICAgICAgICAgbWVzc2FnZUVsZW1lbnQgPSBjaGlsZDtcbiAgICAgICAgICAgIGNoaWxkLmNsYXNzTmFtZSA9IFwiZHotbWVzc2FnZVwiO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICghbWVzc2FnZUVsZW1lbnQpIHtcbiAgICAgICAgICBtZXNzYWdlRWxlbWVudCA9IERyb3B6b25lLmNyZWF0ZUVsZW1lbnQoXCI8ZGl2IGNsYXNzPVxcXCJkei1tZXNzYWdlXFxcIj48c3Bhbj48L3NwYW4+PC9kaXY+XCIpO1xuICAgICAgICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZChtZXNzYWdlRWxlbWVudCk7XG4gICAgICAgIH1cbiAgICAgICAgc3BhbiA9IG1lc3NhZ2VFbGVtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKFwic3BhblwiKVswXTtcbiAgICAgICAgaWYgKHNwYW4pIHtcbiAgICAgICAgICBpZiAoc3Bhbi50ZXh0Q29udGVudCAhPSBudWxsKSB7XG4gICAgICAgICAgICBzcGFuLnRleHRDb250ZW50ID0gdGhpcy5vcHRpb25zLmRpY3RGYWxsYmFja01lc3NhZ2U7XG4gICAgICAgICAgfSBlbHNlIGlmIChzcGFuLmlubmVyVGV4dCAhPSBudWxsKSB7XG4gICAgICAgICAgICBzcGFuLmlubmVyVGV4dCA9IHRoaXMub3B0aW9ucy5kaWN0RmFsbGJhY2tNZXNzYWdlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKHRoaXMuZ2V0RmFsbGJhY2tGb3JtKCkpO1xuICAgICAgfSxcbiAgICAgIHJlc2l6ZTogZnVuY3Rpb24oZmlsZSkge1xuICAgICAgICB2YXIgaW5mbywgc3JjUmF0aW8sIHRyZ1JhdGlvO1xuICAgICAgICBpbmZvID0ge1xuICAgICAgICAgIHNyY1g6IDAsXG4gICAgICAgICAgc3JjWTogMCxcbiAgICAgICAgICBzcmNXaWR0aDogZmlsZS53aWR0aCxcbiAgICAgICAgICBzcmNIZWlnaHQ6IGZpbGUuaGVpZ2h0XG4gICAgICAgIH07XG4gICAgICAgIHNyY1JhdGlvID0gZmlsZS53aWR0aCAvIGZpbGUuaGVpZ2h0O1xuICAgICAgICBpbmZvLm9wdFdpZHRoID0gdGhpcy5vcHRpb25zLnRodW1ibmFpbFdpZHRoO1xuICAgICAgICBpbmZvLm9wdEhlaWdodCA9IHRoaXMub3B0aW9ucy50aHVtYm5haWxIZWlnaHQ7XG4gICAgICAgIGlmICgoaW5mby5vcHRXaWR0aCA9PSBudWxsKSAmJiAoaW5mby5vcHRIZWlnaHQgPT0gbnVsbCkpIHtcbiAgICAgICAgICBpbmZvLm9wdFdpZHRoID0gaW5mby5zcmNXaWR0aDtcbiAgICAgICAgICBpbmZvLm9wdEhlaWdodCA9IGluZm8uc3JjSGVpZ2h0O1xuICAgICAgICB9IGVsc2UgaWYgKGluZm8ub3B0V2lkdGggPT0gbnVsbCkge1xuICAgICAgICAgIGluZm8ub3B0V2lkdGggPSBzcmNSYXRpbyAqIGluZm8ub3B0SGVpZ2h0O1xuICAgICAgICB9IGVsc2UgaWYgKGluZm8ub3B0SGVpZ2h0ID09IG51bGwpIHtcbiAgICAgICAgICBpbmZvLm9wdEhlaWdodCA9ICgxIC8gc3JjUmF0aW8pICogaW5mby5vcHRXaWR0aDtcbiAgICAgICAgfVxuICAgICAgICB0cmdSYXRpbyA9IGluZm8ub3B0V2lkdGggLyBpbmZvLm9wdEhlaWdodDtcbiAgICAgICAgaWYgKGZpbGUuaGVpZ2h0IDwgaW5mby5vcHRIZWlnaHQgfHwgZmlsZS53aWR0aCA8IGluZm8ub3B0V2lkdGgpIHtcbiAgICAgICAgICBpbmZvLnRyZ0hlaWdodCA9IGluZm8uc3JjSGVpZ2h0O1xuICAgICAgICAgIGluZm8udHJnV2lkdGggPSBpbmZvLnNyY1dpZHRoO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmIChzcmNSYXRpbyA+IHRyZ1JhdGlvKSB7XG4gICAgICAgICAgICBpbmZvLnNyY0hlaWdodCA9IGZpbGUuaGVpZ2h0O1xuICAgICAgICAgICAgaW5mby5zcmNXaWR0aCA9IGluZm8uc3JjSGVpZ2h0ICogdHJnUmF0aW87XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGluZm8uc3JjV2lkdGggPSBmaWxlLndpZHRoO1xuICAgICAgICAgICAgaW5mby5zcmNIZWlnaHQgPSBpbmZvLnNyY1dpZHRoIC8gdHJnUmF0aW87XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGluZm8uc3JjWCA9IChmaWxlLndpZHRoIC0gaW5mby5zcmNXaWR0aCkgLyAyO1xuICAgICAgICBpbmZvLnNyY1kgPSAoZmlsZS5oZWlnaHQgLSBpbmZvLnNyY0hlaWdodCkgLyAyO1xuICAgICAgICByZXR1cm4gaW5mbztcbiAgICAgIH0sXG5cbiAgICAgIC8qXG4gICAgICBUaG9zZSBmdW5jdGlvbnMgcmVnaXN0ZXIgdGhlbXNlbHZlcyB0byB0aGUgZXZlbnRzIG9uIGluaXQgYW5kIGhhbmRsZSBhbGxcbiAgICAgIHRoZSB1c2VyIGludGVyZmFjZSBzcGVjaWZpYyBzdHVmZi4gT3ZlcndyaXRpbmcgdGhlbSB3b24ndCBicmVhayB0aGUgdXBsb2FkXG4gICAgICBidXQgY2FuIGJyZWFrIHRoZSB3YXkgaXQncyBkaXNwbGF5ZWQuXG4gICAgICBZb3UgY2FuIG92ZXJ3cml0ZSB0aGVtIGlmIHlvdSBkb24ndCBsaWtlIHRoZSBkZWZhdWx0IGJlaGF2aW9yLiBJZiB5b3UganVzdFxuICAgICAgd2FudCB0byBhZGQgYW4gYWRkaXRpb25hbCBldmVudCBoYW5kbGVyLCByZWdpc3RlciBpdCBvbiB0aGUgZHJvcHpvbmUgb2JqZWN0XG4gICAgICBhbmQgZG9uJ3Qgb3ZlcndyaXRlIHRob3NlIG9wdGlvbnMuXG4gICAgICAgKi9cbiAgICAgIGRyb3A6IGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKFwiZHotZHJhZy1ob3ZlclwiKTtcbiAgICAgIH0sXG4gICAgICBkcmFnc3RhcnQ6IG5vb3AsXG4gICAgICBkcmFnZW5kOiBmdW5jdGlvbihlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShcImR6LWRyYWctaG92ZXJcIik7XG4gICAgICB9LFxuICAgICAgZHJhZ2VudGVyOiBmdW5jdGlvbihlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmVsZW1lbnQuY2xhc3NMaXN0LmFkZChcImR6LWRyYWctaG92ZXJcIik7XG4gICAgICB9LFxuICAgICAgZHJhZ292ZXI6IGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWxlbWVudC5jbGFzc0xpc3QuYWRkKFwiZHotZHJhZy1ob3ZlclwiKTtcbiAgICAgIH0sXG4gICAgICBkcmFnbGVhdmU6IGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKFwiZHotZHJhZy1ob3ZlclwiKTtcbiAgICAgIH0sXG4gICAgICBwYXN0ZTogbm9vcCxcbiAgICAgIHJlc2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKFwiZHotc3RhcnRlZFwiKTtcbiAgICAgIH0sXG4gICAgICBhZGRlZGZpbGU6IGZ1bmN0aW9uKGZpbGUpIHtcbiAgICAgICAgdmFyIG5vZGUsIHJlbW92ZUZpbGVFdmVudCwgcmVtb3ZlTGluaywgX2ksIF9qLCBfaywgX2xlbiwgX2xlbjEsIF9sZW4yLCBfcmVmLCBfcmVmMSwgX3JlZjIsIF9yZXN1bHRzO1xuICAgICAgICBpZiAodGhpcy5lbGVtZW50ID09PSB0aGlzLnByZXZpZXdzQ29udGFpbmVyKSB7XG4gICAgICAgICAgdGhpcy5lbGVtZW50LmNsYXNzTGlzdC5hZGQoXCJkei1zdGFydGVkXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnByZXZpZXdzQ29udGFpbmVyKSB7XG4gICAgICAgICAgZmlsZS5wcmV2aWV3RWxlbWVudCA9IERyb3B6b25lLmNyZWF0ZUVsZW1lbnQodGhpcy5vcHRpb25zLnByZXZpZXdUZW1wbGF0ZS50cmltKCkpO1xuICAgICAgICAgIGZpbGUucHJldmlld1RlbXBsYXRlID0gZmlsZS5wcmV2aWV3RWxlbWVudDtcbiAgICAgICAgICB0aGlzLnByZXZpZXdzQ29udGFpbmVyLmFwcGVuZENoaWxkKGZpbGUucHJldmlld0VsZW1lbnQpO1xuICAgICAgICAgIF9yZWYgPSBmaWxlLnByZXZpZXdFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCJbZGF0YS1kei1uYW1lXVwiKTtcbiAgICAgICAgICBmb3IgKF9pID0gMCwgX2xlbiA9IF9yZWYubGVuZ3RoOyBfaSA8IF9sZW47IF9pKyspIHtcbiAgICAgICAgICAgIG5vZGUgPSBfcmVmW19pXTtcbiAgICAgICAgICAgIG5vZGUudGV4dENvbnRlbnQgPSBmaWxlLm5hbWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIF9yZWYxID0gZmlsZS5wcmV2aWV3RWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKFwiW2RhdGEtZHotc2l6ZV1cIik7XG4gICAgICAgICAgZm9yIChfaiA9IDAsIF9sZW4xID0gX3JlZjEubGVuZ3RoOyBfaiA8IF9sZW4xOyBfaisrKSB7XG4gICAgICAgICAgICBub2RlID0gX3JlZjFbX2pdO1xuICAgICAgICAgICAgbm9kZS5pbm5lckhUTUwgPSB0aGlzLmZpbGVzaXplKGZpbGUuc2l6ZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMuYWRkUmVtb3ZlTGlua3MpIHtcbiAgICAgICAgICAgIGZpbGUuX3JlbW92ZUxpbmsgPSBEcm9wem9uZS5jcmVhdGVFbGVtZW50KFwiPGEgY2xhc3M9XFxcImR6LXJlbW92ZVxcXCIgaHJlZj1cXFwiamF2YXNjcmlwdDp1bmRlZmluZWQ7XFxcIiBkYXRhLWR6LXJlbW92ZT5cIiArIHRoaXMub3B0aW9ucy5kaWN0UmVtb3ZlRmlsZSArIFwiPC9hPlwiKTtcbiAgICAgICAgICAgIGZpbGUucHJldmlld0VsZW1lbnQuYXBwZW5kQ2hpbGQoZmlsZS5fcmVtb3ZlTGluayk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJlbW92ZUZpbGVFdmVudCA9IChmdW5jdGlvbihfdGhpcykge1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgICBpZiAoZmlsZS5zdGF0dXMgPT09IERyb3B6b25lLlVQTE9BRElORykge1xuICAgICAgICAgICAgICAgIHJldHVybiBEcm9wem9uZS5jb25maXJtKF90aGlzLm9wdGlvbnMuZGljdENhbmNlbFVwbG9hZENvbmZpcm1hdGlvbiwgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gX3RoaXMucmVtb3ZlRmlsZShmaWxlKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoX3RoaXMub3B0aW9ucy5kaWN0UmVtb3ZlRmlsZUNvbmZpcm1hdGlvbikge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIERyb3B6b25lLmNvbmZpcm0oX3RoaXMub3B0aW9ucy5kaWN0UmVtb3ZlRmlsZUNvbmZpcm1hdGlvbiwgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBfdGhpcy5yZW1vdmVGaWxlKGZpbGUpO1xuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBfdGhpcy5yZW1vdmVGaWxlKGZpbGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9KSh0aGlzKTtcbiAgICAgICAgICBfcmVmMiA9IGZpbGUucHJldmlld0VsZW1lbnQucXVlcnlTZWxlY3RvckFsbChcIltkYXRhLWR6LXJlbW92ZV1cIik7XG4gICAgICAgICAgX3Jlc3VsdHMgPSBbXTtcbiAgICAgICAgICBmb3IgKF9rID0gMCwgX2xlbjIgPSBfcmVmMi5sZW5ndGg7IF9rIDwgX2xlbjI7IF9rKyspIHtcbiAgICAgICAgICAgIHJlbW92ZUxpbmsgPSBfcmVmMltfa107XG4gICAgICAgICAgICBfcmVzdWx0cy5wdXNoKHJlbW92ZUxpbmsuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIHJlbW92ZUZpbGVFdmVudCkpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gX3Jlc3VsdHM7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICByZW1vdmVkZmlsZTogZnVuY3Rpb24oZmlsZSkge1xuICAgICAgICB2YXIgX3JlZjtcbiAgICAgICAgaWYgKGZpbGUucHJldmlld0VsZW1lbnQpIHtcbiAgICAgICAgICBpZiAoKF9yZWYgPSBmaWxlLnByZXZpZXdFbGVtZW50KSAhPSBudWxsKSB7XG4gICAgICAgICAgICBfcmVmLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoZmlsZS5wcmV2aWV3RWxlbWVudCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl91cGRhdGVNYXhGaWxlc1JlYWNoZWRDbGFzcygpO1xuICAgICAgfSxcbiAgICAgIHRodW1ibmFpbDogZnVuY3Rpb24oZmlsZSwgZGF0YVVybCkge1xuICAgICAgICB2YXIgdGh1bWJuYWlsRWxlbWVudCwgX2ksIF9sZW4sIF9yZWY7XG4gICAgICAgIGlmIChmaWxlLnByZXZpZXdFbGVtZW50KSB7XG4gICAgICAgICAgZmlsZS5wcmV2aWV3RWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKFwiZHotZmlsZS1wcmV2aWV3XCIpO1xuICAgICAgICAgIF9yZWYgPSBmaWxlLnByZXZpZXdFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCJbZGF0YS1kei10aHVtYm5haWxdXCIpO1xuICAgICAgICAgIGZvciAoX2kgPSAwLCBfbGVuID0gX3JlZi5sZW5ndGg7IF9pIDwgX2xlbjsgX2krKykge1xuICAgICAgICAgICAgdGh1bWJuYWlsRWxlbWVudCA9IF9yZWZbX2ldO1xuICAgICAgICAgICAgdGh1bWJuYWlsRWxlbWVudC5hbHQgPSBmaWxlLm5hbWU7XG4gICAgICAgICAgICB0aHVtYm5haWxFbGVtZW50LnNyYyA9IGRhdGFVcmw7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBzZXRUaW1lb3V0KCgoZnVuY3Rpb24oX3RoaXMpIHtcbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGZpbGUucHJldmlld0VsZW1lbnQuY2xhc3NMaXN0LmFkZChcImR6LWltYWdlLXByZXZpZXdcIik7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH0pKHRoaXMpKSwgMSk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBlcnJvcjogZnVuY3Rpb24oZmlsZSwgbWVzc2FnZSkge1xuICAgICAgICB2YXIgbm9kZSwgX2ksIF9sZW4sIF9yZWYsIF9yZXN1bHRzO1xuICAgICAgICBpZiAoZmlsZS5wcmV2aWV3RWxlbWVudCkge1xuICAgICAgICAgIGZpbGUucHJldmlld0VsZW1lbnQuY2xhc3NMaXN0LmFkZChcImR6LWVycm9yXCIpO1xuICAgICAgICAgIGlmICh0eXBlb2YgbWVzc2FnZSAhPT0gXCJTdHJpbmdcIiAmJiBtZXNzYWdlLmVycm9yKSB7XG4gICAgICAgICAgICBtZXNzYWdlID0gbWVzc2FnZS5lcnJvcjtcbiAgICAgICAgICB9XG4gICAgICAgICAgX3JlZiA9IGZpbGUucHJldmlld0VsZW1lbnQucXVlcnlTZWxlY3RvckFsbChcIltkYXRhLWR6LWVycm9ybWVzc2FnZV1cIik7XG4gICAgICAgICAgX3Jlc3VsdHMgPSBbXTtcbiAgICAgICAgICBmb3IgKF9pID0gMCwgX2xlbiA9IF9yZWYubGVuZ3RoOyBfaSA8IF9sZW47IF9pKyspIHtcbiAgICAgICAgICAgIG5vZGUgPSBfcmVmW19pXTtcbiAgICAgICAgICAgIF9yZXN1bHRzLnB1c2gobm9kZS50ZXh0Q29udGVudCA9IG1lc3NhZ2UpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gX3Jlc3VsdHM7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBlcnJvcm11bHRpcGxlOiBub29wLFxuICAgICAgcHJvY2Vzc2luZzogZnVuY3Rpb24oZmlsZSkge1xuICAgICAgICBpZiAoZmlsZS5wcmV2aWV3RWxlbWVudCkge1xuICAgICAgICAgIGZpbGUucHJldmlld0VsZW1lbnQuY2xhc3NMaXN0LmFkZChcImR6LXByb2Nlc3NpbmdcIik7XG4gICAgICAgICAgaWYgKGZpbGUuX3JlbW92ZUxpbmspIHtcbiAgICAgICAgICAgIHJldHVybiBmaWxlLl9yZW1vdmVMaW5rLnRleHRDb250ZW50ID0gdGhpcy5vcHRpb25zLmRpY3RDYW5jZWxVcGxvYWQ7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgcHJvY2Vzc2luZ211bHRpcGxlOiBub29wLFxuICAgICAgdXBsb2FkcHJvZ3Jlc3M6IGZ1bmN0aW9uKGZpbGUsIHByb2dyZXNzLCBieXRlc1NlbnQpIHtcbiAgICAgICAgdmFyIG5vZGUsIF9pLCBfbGVuLCBfcmVmLCBfcmVzdWx0cztcbiAgICAgICAgaWYgKGZpbGUucHJldmlld0VsZW1lbnQpIHtcbiAgICAgICAgICBfcmVmID0gZmlsZS5wcmV2aWV3RWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKFwiW2RhdGEtZHotdXBsb2FkcHJvZ3Jlc3NdXCIpO1xuICAgICAgICAgIF9yZXN1bHRzID0gW107XG4gICAgICAgICAgZm9yIChfaSA9IDAsIF9sZW4gPSBfcmVmLmxlbmd0aDsgX2kgPCBfbGVuOyBfaSsrKSB7XG4gICAgICAgICAgICBub2RlID0gX3JlZltfaV07XG4gICAgICAgICAgICBpZiAobm9kZS5ub2RlTmFtZSA9PT0gJ1BST0dSRVNTJykge1xuICAgICAgICAgICAgICBfcmVzdWx0cy5wdXNoKG5vZGUudmFsdWUgPSBwcm9ncmVzcyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBfcmVzdWx0cy5wdXNoKG5vZGUuc3R5bGUud2lkdGggPSBcIlwiICsgcHJvZ3Jlc3MgKyBcIiVcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBfcmVzdWx0cztcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHRvdGFsdXBsb2FkcHJvZ3Jlc3M6IG5vb3AsXG4gICAgICBzZW5kaW5nOiBub29wLFxuICAgICAgc2VuZGluZ211bHRpcGxlOiBub29wLFxuICAgICAgc3VjY2VzczogZnVuY3Rpb24oZmlsZSkge1xuICAgICAgICBpZiAoZmlsZS5wcmV2aWV3RWxlbWVudCkge1xuICAgICAgICAgIHJldHVybiBmaWxlLnByZXZpZXdFbGVtZW50LmNsYXNzTGlzdC5hZGQoXCJkei1zdWNjZXNzXCIpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgc3VjY2Vzc211bHRpcGxlOiBub29wLFxuICAgICAgY2FuY2VsZWQ6IGZ1bmN0aW9uKGZpbGUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZW1pdChcImVycm9yXCIsIGZpbGUsIFwiVXBsb2FkIGNhbmNlbGVkLlwiKTtcbiAgICAgIH0sXG4gICAgICBjYW5jZWxlZG11bHRpcGxlOiBub29wLFxuICAgICAgY29tcGxldGU6IGZ1bmN0aW9uKGZpbGUpIHtcbiAgICAgICAgaWYgKGZpbGUuX3JlbW92ZUxpbmspIHtcbiAgICAgICAgICBmaWxlLl9yZW1vdmVMaW5rLnRleHRDb250ZW50ID0gdGhpcy5vcHRpb25zLmRpY3RSZW1vdmVGaWxlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChmaWxlLnByZXZpZXdFbGVtZW50KSB7XG4gICAgICAgICAgcmV0dXJuIGZpbGUucHJldmlld0VsZW1lbnQuY2xhc3NMaXN0LmFkZChcImR6LWNvbXBsZXRlXCIpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgY29tcGxldGVtdWx0aXBsZTogbm9vcCxcbiAgICAgIG1heGZpbGVzZXhjZWVkZWQ6IG5vb3AsXG4gICAgICBtYXhmaWxlc3JlYWNoZWQ6IG5vb3AsXG4gICAgICBxdWV1ZWNvbXBsZXRlOiBub29wLFxuICAgICAgYWRkZWRmaWxlczogbm9vcCxcbiAgICAgIHByZXZpZXdUZW1wbGF0ZTogXCI8ZGl2IGNsYXNzPVxcXCJkei1wcmV2aWV3IGR6LWZpbGUtcHJldmlld1xcXCI+XFxuICA8ZGl2IGNsYXNzPVxcXCJkei1pbWFnZVxcXCI+PGltZyBkYXRhLWR6LXRodW1ibmFpbCAvPjwvZGl2PlxcbiAgPGRpdiBjbGFzcz1cXFwiZHotZGV0YWlsc1xcXCI+XFxuICAgIDxkaXYgY2xhc3M9XFxcImR6LXNpemVcXFwiPjxzcGFuIGRhdGEtZHotc2l6ZT48L3NwYW4+PC9kaXY+XFxuICAgIDxkaXYgY2xhc3M9XFxcImR6LWZpbGVuYW1lXFxcIj48c3BhbiBkYXRhLWR6LW5hbWU+PC9zcGFuPjwvZGl2PlxcbiAgPC9kaXY+XFxuICA8ZGl2IGNsYXNzPVxcXCJkei1wcm9ncmVzc1xcXCI+PHNwYW4gY2xhc3M9XFxcImR6LXVwbG9hZFxcXCIgZGF0YS1kei11cGxvYWRwcm9ncmVzcz48L3NwYW4+PC9kaXY+XFxuICA8ZGl2IGNsYXNzPVxcXCJkei1lcnJvci1tZXNzYWdlXFxcIj48c3BhbiBkYXRhLWR6LWVycm9ybWVzc2FnZT48L3NwYW4+PC9kaXY+XFxuICA8ZGl2IGNsYXNzPVxcXCJkei1zdWNjZXNzLW1hcmtcXFwiPlxcbiAgICA8c3ZnIHdpZHRoPVxcXCI1NHB4XFxcIiBoZWlnaHQ9XFxcIjU0cHhcXFwiIHZpZXdCb3g9XFxcIjAgMCA1NCA1NFxcXCIgdmVyc2lvbj1cXFwiMS4xXFxcIiB4bWxucz1cXFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcXFwiIHhtbG5zOnhsaW5rPVxcXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rXFxcIiB4bWxuczpza2V0Y2g9XFxcImh0dHA6Ly93d3cuYm9oZW1pYW5jb2RpbmcuY29tL3NrZXRjaC9uc1xcXCI+XFxuICAgICAgPHRpdGxlPkNoZWNrPC90aXRsZT5cXG4gICAgICA8ZGVmcz48L2RlZnM+XFxuICAgICAgPGcgaWQ9XFxcIlBhZ2UtMVxcXCIgc3Ryb2tlPVxcXCJub25lXFxcIiBzdHJva2Utd2lkdGg9XFxcIjFcXFwiIGZpbGw9XFxcIm5vbmVcXFwiIGZpbGwtcnVsZT1cXFwiZXZlbm9kZFxcXCIgc2tldGNoOnR5cGU9XFxcIk1TUGFnZVxcXCI+XFxuICAgICAgICA8cGF0aCBkPVxcXCJNMjMuNSwzMS44NDMxNDU4IEwxNy41ODUyNDE5LDI1LjkyODM4NzcgQzE2LjAyNDgyNTMsMjQuMzY3OTcxMSAxMy40OTEwMjk0LDI0LjM2NjgzNSAxMS45Mjg5MzIyLDI1LjkyODkzMjIgQzEwLjM3MDAxMzYsMjcuNDg3ODUwOCAxMC4zNjY1OTEyLDMwLjAyMzQ0NTUgMTEuOTI4Mzg3NywzMS41ODUyNDE5IEwyMC40MTQ3NTgxLDQwLjA3MTYxMjMgQzIwLjUxMzM5OTksNDAuMTcwMjU0MSAyMC42MTU5MzE1LDQwLjI2MjY2NDkgMjAuNzIxODYxNSw0MC4zNDg4NDM1IEMyMi4yODM1NjY5LDQxLjg3MjU2NTEgMjQuNzk0MjM0LDQxLjg2MjYyMDIgMjYuMzQ2MTU2NCw0MC4zMTA2OTc4IEw0My4zMTA2OTc4LDIzLjM0NjE1NjQgQzQ0Ljg3NzEwMjEsMjEuNzc5NzUyMSA0NC44NzU4MDU3LDE5LjI0ODM4ODcgNDMuMzEzNzA4NSwxNy42ODYyOTE1IEM0MS43NTQ3ODk5LDE2LjEyNzM3MjkgMzkuMjE3NjAzNSwxNi4xMjU1NDIyIDM3LjY1Mzg0MzYsMTcuNjg5MzAyMiBMMjMuNSwzMS44NDMxNDU4IFogTTI3LDUzIEM0MS4zNTk0MDM1LDUzIDUzLDQxLjM1OTQwMzUgNTMsMjcgQzUzLDEyLjY0MDU5NjUgNDEuMzU5NDAzNSwxIDI3LDEgQzEyLjY0MDU5NjUsMSAxLDEyLjY0MDU5NjUgMSwyNyBDMSw0MS4zNTk0MDM1IDEyLjY0MDU5NjUsNTMgMjcsNTMgWlxcXCIgaWQ9XFxcIk92YWwtMlxcXCIgc3Ryb2tlLW9wYWNpdHk9XFxcIjAuMTk4Nzk0MTU4XFxcIiBzdHJva2U9XFxcIiM3NDc0NzRcXFwiIGZpbGwtb3BhY2l0eT1cXFwiMC44MTY1MTk0NzVcXFwiIGZpbGw9XFxcIiNGRkZGRkZcXFwiIHNrZXRjaDp0eXBlPVxcXCJNU1NoYXBlR3JvdXBcXFwiPjwvcGF0aD5cXG4gICAgICA8L2c+XFxuICAgIDwvc3ZnPlxcbiAgPC9kaXY+XFxuICA8ZGl2IGNsYXNzPVxcXCJkei1lcnJvci1tYXJrXFxcIj5cXG4gICAgPHN2ZyB3aWR0aD1cXFwiNTRweFxcXCIgaGVpZ2h0PVxcXCI1NHB4XFxcIiB2aWV3Qm94PVxcXCIwIDAgNTQgNTRcXFwiIHZlcnNpb249XFxcIjEuMVxcXCIgeG1sbnM9XFxcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXFxcIiB4bWxuczp4bGluaz1cXFwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGlua1xcXCIgeG1sbnM6c2tldGNoPVxcXCJodHRwOi8vd3d3LmJvaGVtaWFuY29kaW5nLmNvbS9za2V0Y2gvbnNcXFwiPlxcbiAgICAgIDx0aXRsZT5FcnJvcjwvdGl0bGU+XFxuICAgICAgPGRlZnM+PC9kZWZzPlxcbiAgICAgIDxnIGlkPVxcXCJQYWdlLTFcXFwiIHN0cm9rZT1cXFwibm9uZVxcXCIgc3Ryb2tlLXdpZHRoPVxcXCIxXFxcIiBmaWxsPVxcXCJub25lXFxcIiBmaWxsLXJ1bGU9XFxcImV2ZW5vZGRcXFwiIHNrZXRjaDp0eXBlPVxcXCJNU1BhZ2VcXFwiPlxcbiAgICAgICAgPGcgaWQ9XFxcIkNoZWNrLSstT3ZhbC0yXFxcIiBza2V0Y2g6dHlwZT1cXFwiTVNMYXllckdyb3VwXFxcIiBzdHJva2U9XFxcIiM3NDc0NzRcXFwiIHN0cm9rZS1vcGFjaXR5PVxcXCIwLjE5ODc5NDE1OFxcXCIgZmlsbD1cXFwiI0ZGRkZGRlxcXCIgZmlsbC1vcGFjaXR5PVxcXCIwLjgxNjUxOTQ3NVxcXCI+XFxuICAgICAgICAgIDxwYXRoIGQ9XFxcIk0zMi42NTY4NTQyLDI5IEwzOC4zMTA2OTc4LDIzLjM0NjE1NjQgQzM5Ljg3NzEwMjEsMjEuNzc5NzUyMSAzOS44NzU4MDU3LDE5LjI0ODM4ODcgMzguMzEzNzA4NSwxNy42ODYyOTE1IEMzNi43NTQ3ODk5LDE2LjEyNzM3MjkgMzQuMjE3NjAzNSwxNi4xMjU1NDIyIDMyLjY1Mzg0MzYsMTcuNjg5MzAyMiBMMjcsMjMuMzQzMTQ1OCBMMjEuMzQ2MTU2NCwxNy42ODkzMDIyIEMxOS43ODIzOTY1LDE2LjEyNTU0MjIgMTcuMjQ1MjEwMSwxNi4xMjczNzI5IDE1LjY4NjI5MTUsMTcuNjg2MjkxNSBDMTQuMTI0MTk0MywxOS4yNDgzODg3IDE0LjEyMjg5NzksMjEuNzc5NzUyMSAxNS42ODkzMDIyLDIzLjM0NjE1NjQgTDIxLjM0MzE0NTgsMjkgTDE1LjY4OTMwMjIsMzQuNjUzODQzNiBDMTQuMTIyODk3OSwzNi4yMjAyNDc5IDE0LjEyNDE5NDMsMzguNzUxNjExMyAxNS42ODYyOTE1LDQwLjMxMzcwODUgQzE3LjI0NTIxMDEsNDEuODcyNjI3MSAxOS43ODIzOTY1LDQxLjg3NDQ1NzggMjEuMzQ2MTU2NCw0MC4zMTA2OTc4IEwyNywzNC42NTY4NTQyIEwzMi42NTM4NDM2LDQwLjMxMDY5NzggQzM0LjIxNzYwMzUsNDEuODc0NDU3OCAzNi43NTQ3ODk5LDQxLjg3MjYyNzEgMzguMzEzNzA4NSw0MC4zMTM3MDg1IEMzOS44NzU4MDU3LDM4Ljc1MTYxMTMgMzkuODc3MTAyMSwzNi4yMjAyNDc5IDM4LjMxMDY5NzgsMzQuNjUzODQzNiBMMzIuNjU2ODU0MiwyOSBaIE0yNyw1MyBDNDEuMzU5NDAzNSw1MyA1Myw0MS4zNTk0MDM1IDUzLDI3IEM1MywxMi42NDA1OTY1IDQxLjM1OTQwMzUsMSAyNywxIEMxMi42NDA1OTY1LDEgMSwxMi42NDA1OTY1IDEsMjcgQzEsNDEuMzU5NDAzNSAxMi42NDA1OTY1LDUzIDI3LDUzIFpcXFwiIGlkPVxcXCJPdmFsLTJcXFwiIHNrZXRjaDp0eXBlPVxcXCJNU1NoYXBlR3JvdXBcXFwiPjwvcGF0aD5cXG4gICAgICAgIDwvZz5cXG4gICAgICA8L2c+XFxuICAgIDwvc3ZnPlxcbiAgPC9kaXY+XFxuPC9kaXY+XCJcbiAgICB9O1xuXG4gICAgZXh0ZW5kID0gZnVuY3Rpb24oKSB7XG4gICAgICB2YXIga2V5LCBvYmplY3QsIG9iamVjdHMsIHRhcmdldCwgdmFsLCBfaSwgX2xlbjtcbiAgICAgIHRhcmdldCA9IGFyZ3VtZW50c1swXSwgb2JqZWN0cyA9IDIgPD0gYXJndW1lbnRzLmxlbmd0aCA/IF9fc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpIDogW107XG4gICAgICBmb3IgKF9pID0gMCwgX2xlbiA9IG9iamVjdHMubGVuZ3RoOyBfaSA8IF9sZW47IF9pKyspIHtcbiAgICAgICAgb2JqZWN0ID0gb2JqZWN0c1tfaV07XG4gICAgICAgIGZvciAoa2V5IGluIG9iamVjdCkge1xuICAgICAgICAgIHZhbCA9IG9iamVjdFtrZXldO1xuICAgICAgICAgIHRhcmdldFtrZXldID0gdmFsO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdGFyZ2V0O1xuICAgIH07XG5cbiAgICBmdW5jdGlvbiBEcm9wem9uZShlbGVtZW50LCBvcHRpb25zKSB7XG4gICAgICB2YXIgZWxlbWVudE9wdGlvbnMsIGZhbGxiYWNrLCBfcmVmO1xuICAgICAgdGhpcy5lbGVtZW50ID0gZWxlbWVudDtcbiAgICAgIHRoaXMudmVyc2lvbiA9IERyb3B6b25lLnZlcnNpb247XG4gICAgICB0aGlzLmRlZmF1bHRPcHRpb25zLnByZXZpZXdUZW1wbGF0ZSA9IHRoaXMuZGVmYXVsdE9wdGlvbnMucHJldmlld1RlbXBsYXRlLnJlcGxhY2UoL1xcbiovZywgXCJcIik7XG4gICAgICB0aGlzLmNsaWNrYWJsZUVsZW1lbnRzID0gW107XG4gICAgICB0aGlzLmxpc3RlbmVycyA9IFtdO1xuICAgICAgdGhpcy5maWxlcyA9IFtdO1xuICAgICAgaWYgKHR5cGVvZiB0aGlzLmVsZW1lbnQgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgdGhpcy5lbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3Rvcih0aGlzLmVsZW1lbnQpO1xuICAgICAgfVxuICAgICAgaWYgKCEodGhpcy5lbGVtZW50ICYmICh0aGlzLmVsZW1lbnQubm9kZVR5cGUgIT0gbnVsbCkpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgZHJvcHpvbmUgZWxlbWVudC5cIik7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5lbGVtZW50LmRyb3B6b25lKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkRyb3B6b25lIGFscmVhZHkgYXR0YWNoZWQuXCIpO1xuICAgICAgfVxuICAgICAgRHJvcHpvbmUuaW5zdGFuY2VzLnB1c2godGhpcyk7XG4gICAgICB0aGlzLmVsZW1lbnQuZHJvcHpvbmUgPSB0aGlzO1xuICAgICAgZWxlbWVudE9wdGlvbnMgPSAoX3JlZiA9IERyb3B6b25lLm9wdGlvbnNGb3JFbGVtZW50KHRoaXMuZWxlbWVudCkpICE9IG51bGwgPyBfcmVmIDoge307XG4gICAgICB0aGlzLm9wdGlvbnMgPSBleHRlbmQoe30sIHRoaXMuZGVmYXVsdE9wdGlvbnMsIGVsZW1lbnRPcHRpb25zLCBvcHRpb25zICE9IG51bGwgPyBvcHRpb25zIDoge30pO1xuICAgICAgaWYgKHRoaXMub3B0aW9ucy5mb3JjZUZhbGxiYWNrIHx8ICFEcm9wem9uZS5pc0Jyb3dzZXJTdXBwb3J0ZWQoKSkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcHRpb25zLmZhbGxiYWNrLmNhbGwodGhpcyk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5vcHRpb25zLnVybCA9PSBudWxsKSB7XG4gICAgICAgIHRoaXMub3B0aW9ucy51cmwgPSB0aGlzLmVsZW1lbnQuZ2V0QXR0cmlidXRlKFwiYWN0aW9uXCIpO1xuICAgICAgfVxuICAgICAgaWYgKCF0aGlzLm9wdGlvbnMudXJsKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIFVSTCBwcm92aWRlZC5cIik7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5vcHRpb25zLmFjY2VwdGVkRmlsZXMgJiYgdGhpcy5vcHRpb25zLmFjY2VwdGVkTWltZVR5cGVzKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIllvdSBjYW4ndCBwcm92aWRlIGJvdGggJ2FjY2VwdGVkRmlsZXMnIGFuZCAnYWNjZXB0ZWRNaW1lVHlwZXMnLiAnYWNjZXB0ZWRNaW1lVHlwZXMnIGlzIGRlcHJlY2F0ZWQuXCIpO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMub3B0aW9ucy5hY2NlcHRlZE1pbWVUeXBlcykge1xuICAgICAgICB0aGlzLm9wdGlvbnMuYWNjZXB0ZWRGaWxlcyA9IHRoaXMub3B0aW9ucy5hY2NlcHRlZE1pbWVUeXBlcztcbiAgICAgICAgZGVsZXRlIHRoaXMub3B0aW9ucy5hY2NlcHRlZE1pbWVUeXBlcztcbiAgICAgIH1cbiAgICAgIHRoaXMub3B0aW9ucy5tZXRob2QgPSB0aGlzLm9wdGlvbnMubWV0aG9kLnRvVXBwZXJDYXNlKCk7XG4gICAgICBpZiAoKGZhbGxiYWNrID0gdGhpcy5nZXRFeGlzdGluZ0ZhbGxiYWNrKCkpICYmIGZhbGxiYWNrLnBhcmVudE5vZGUpIHtcbiAgICAgICAgZmFsbGJhY2sucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChmYWxsYmFjayk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5vcHRpb25zLnByZXZpZXdzQ29udGFpbmVyICE9PSBmYWxzZSkge1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zLnByZXZpZXdzQ29udGFpbmVyKSB7XG4gICAgICAgICAgdGhpcy5wcmV2aWV3c0NvbnRhaW5lciA9IERyb3B6b25lLmdldEVsZW1lbnQodGhpcy5vcHRpb25zLnByZXZpZXdzQ29udGFpbmVyLCBcInByZXZpZXdzQ29udGFpbmVyXCIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMucHJldmlld3NDb250YWluZXIgPSB0aGlzLmVsZW1lbnQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLm9wdGlvbnMuY2xpY2thYmxlKSB7XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuY2xpY2thYmxlID09PSB0cnVlKSB7XG4gICAgICAgICAgdGhpcy5jbGlja2FibGVFbGVtZW50cyA9IFt0aGlzLmVsZW1lbnRdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuY2xpY2thYmxlRWxlbWVudHMgPSBEcm9wem9uZS5nZXRFbGVtZW50cyh0aGlzLm9wdGlvbnMuY2xpY2thYmxlLCBcImNsaWNrYWJsZVwiKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhpcy5pbml0KCk7XG4gICAgfVxuXG4gICAgRHJvcHpvbmUucHJvdG90eXBlLmdldEFjY2VwdGVkRmlsZXMgPSBmdW5jdGlvbigpIHtcbiAgICAgIHZhciBmaWxlLCBfaSwgX2xlbiwgX3JlZiwgX3Jlc3VsdHM7XG4gICAgICBfcmVmID0gdGhpcy5maWxlcztcbiAgICAgIF9yZXN1bHRzID0gW107XG4gICAgICBmb3IgKF9pID0gMCwgX2xlbiA9IF9yZWYubGVuZ3RoOyBfaSA8IF9sZW47IF9pKyspIHtcbiAgICAgICAgZmlsZSA9IF9yZWZbX2ldO1xuICAgICAgICBpZiAoZmlsZS5hY2NlcHRlZCkge1xuICAgICAgICAgIF9yZXN1bHRzLnB1c2goZmlsZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBfcmVzdWx0cztcbiAgICB9O1xuXG4gICAgRHJvcHpvbmUucHJvdG90eXBlLmdldFJlamVjdGVkRmlsZXMgPSBmdW5jdGlvbigpIHtcbiAgICAgIHZhciBmaWxlLCBfaSwgX2xlbiwgX3JlZiwgX3Jlc3VsdHM7XG4gICAgICBfcmVmID0gdGhpcy5maWxlcztcbiAgICAgIF9yZXN1bHRzID0gW107XG4gICAgICBmb3IgKF9pID0gMCwgX2xlbiA9IF9yZWYubGVuZ3RoOyBfaSA8IF9sZW47IF9pKyspIHtcbiAgICAgICAgZmlsZSA9IF9yZWZbX2ldO1xuICAgICAgICBpZiAoIWZpbGUuYWNjZXB0ZWQpIHtcbiAgICAgICAgICBfcmVzdWx0cy5wdXNoKGZpbGUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gX3Jlc3VsdHM7XG4gICAgfTtcblxuICAgIERyb3B6b25lLnByb3RvdHlwZS5nZXRGaWxlc1dpdGhTdGF0dXMgPSBmdW5jdGlvbihzdGF0dXMpIHtcbiAgICAgIHZhciBmaWxlLCBfaSwgX2xlbiwgX3JlZiwgX3Jlc3VsdHM7XG4gICAgICBfcmVmID0gdGhpcy5maWxlcztcbiAgICAgIF9yZXN1bHRzID0gW107XG4gICAgICBmb3IgKF9pID0gMCwgX2xlbiA9IF9yZWYubGVuZ3RoOyBfaSA8IF9sZW47IF9pKyspIHtcbiAgICAgICAgZmlsZSA9IF9yZWZbX2ldO1xuICAgICAgICBpZiAoZmlsZS5zdGF0dXMgPT09IHN0YXR1cykge1xuICAgICAgICAgIF9yZXN1bHRzLnB1c2goZmlsZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBfcmVzdWx0cztcbiAgICB9O1xuXG4gICAgRHJvcHpvbmUucHJvdG90eXBlLmdldFF1ZXVlZEZpbGVzID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRGaWxlc1dpdGhTdGF0dXMoRHJvcHpvbmUuUVVFVUVEKTtcbiAgICB9O1xuXG4gICAgRHJvcHpvbmUucHJvdG90eXBlLmdldFVwbG9hZGluZ0ZpbGVzID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRGaWxlc1dpdGhTdGF0dXMoRHJvcHpvbmUuVVBMT0FESU5HKTtcbiAgICB9O1xuXG4gICAgRHJvcHpvbmUucHJvdG90eXBlLmdldEFkZGVkRmlsZXMgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldEZpbGVzV2l0aFN0YXR1cyhEcm9wem9uZS5BRERFRCk7XG4gICAgfTtcblxuICAgIERyb3B6b25lLnByb3RvdHlwZS5nZXRBY3RpdmVGaWxlcyA9IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIGZpbGUsIF9pLCBfbGVuLCBfcmVmLCBfcmVzdWx0cztcbiAgICAgIF9yZWYgPSB0aGlzLmZpbGVzO1xuICAgICAgX3Jlc3VsdHMgPSBbXTtcbiAgICAgIGZvciAoX2kgPSAwLCBfbGVuID0gX3JlZi5sZW5ndGg7IF9pIDwgX2xlbjsgX2krKykge1xuICAgICAgICBmaWxlID0gX3JlZltfaV07XG4gICAgICAgIGlmIChmaWxlLnN0YXR1cyA9PT0gRHJvcHpvbmUuVVBMT0FESU5HIHx8IGZpbGUuc3RhdHVzID09PSBEcm9wem9uZS5RVUVVRUQpIHtcbiAgICAgICAgICBfcmVzdWx0cy5wdXNoKGZpbGUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gX3Jlc3VsdHM7XG4gICAgfTtcblxuICAgIERyb3B6b25lLnByb3RvdHlwZS5pbml0ID0gZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgZXZlbnROYW1lLCBub1Byb3BhZ2F0aW9uLCBzZXR1cEhpZGRlbkZpbGVJbnB1dCwgX2ksIF9sZW4sIF9yZWYsIF9yZWYxO1xuICAgICAgaWYgKHRoaXMuZWxlbWVudC50YWdOYW1lID09PSBcImZvcm1cIikge1xuICAgICAgICB0aGlzLmVsZW1lbnQuc2V0QXR0cmlidXRlKFwiZW5jdHlwZVwiLCBcIm11bHRpcGFydC9mb3JtLWRhdGFcIik7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5lbGVtZW50LmNsYXNzTGlzdC5jb250YWlucyhcImRyb3B6b25lXCIpICYmICF0aGlzLmVsZW1lbnQucXVlcnlTZWxlY3RvcihcIi5kei1tZXNzYWdlXCIpKSB7XG4gICAgICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZChEcm9wem9uZS5jcmVhdGVFbGVtZW50KFwiPGRpdiBjbGFzcz1cXFwiZHotZGVmYXVsdCBkei1tZXNzYWdlXFxcIj48c3Bhbj5cIiArIHRoaXMub3B0aW9ucy5kaWN0RGVmYXVsdE1lc3NhZ2UgKyBcIjwvc3Bhbj48L2Rpdj5cIikpO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuY2xpY2thYmxlRWxlbWVudHMubGVuZ3RoKSB7XG4gICAgICAgIHNldHVwSGlkZGVuRmlsZUlucHV0ID0gKGZ1bmN0aW9uKF90aGlzKSB7XG4gICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgaWYgKF90aGlzLmhpZGRlbkZpbGVJbnB1dCkge1xuICAgICAgICAgICAgICBfdGhpcy5oaWRkZW5GaWxlSW5wdXQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChfdGhpcy5oaWRkZW5GaWxlSW5wdXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgX3RoaXMuaGlkZGVuRmlsZUlucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImlucHV0XCIpO1xuICAgICAgICAgICAgX3RoaXMuaGlkZGVuRmlsZUlucHV0LnNldEF0dHJpYnV0ZShcInR5cGVcIiwgXCJmaWxlXCIpO1xuICAgICAgICAgICAgaWYgKChfdGhpcy5vcHRpb25zLm1heEZpbGVzID09IG51bGwpIHx8IF90aGlzLm9wdGlvbnMubWF4RmlsZXMgPiAxKSB7XG4gICAgICAgICAgICAgIF90aGlzLmhpZGRlbkZpbGVJbnB1dC5zZXRBdHRyaWJ1dGUoXCJtdWx0aXBsZVwiLCBcIm11bHRpcGxlXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgX3RoaXMuaGlkZGVuRmlsZUlucHV0LmNsYXNzTmFtZSA9IFwiZHotaGlkZGVuLWlucHV0XCI7XG4gICAgICAgICAgICBpZiAoX3RoaXMub3B0aW9ucy5hY2NlcHRlZEZpbGVzICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgX3RoaXMuaGlkZGVuRmlsZUlucHV0LnNldEF0dHJpYnV0ZShcImFjY2VwdFwiLCBfdGhpcy5vcHRpb25zLmFjY2VwdGVkRmlsZXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKF90aGlzLm9wdGlvbnMuY2FwdHVyZSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgIF90aGlzLmhpZGRlbkZpbGVJbnB1dC5zZXRBdHRyaWJ1dGUoXCJjYXB0dXJlXCIsIF90aGlzLm9wdGlvbnMuY2FwdHVyZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBfdGhpcy5oaWRkZW5GaWxlSW5wdXQuc3R5bGUudmlzaWJpbGl0eSA9IFwiaGlkZGVuXCI7XG4gICAgICAgICAgICBfdGhpcy5oaWRkZW5GaWxlSW5wdXQuc3R5bGUucG9zaXRpb24gPSBcImFic29sdXRlXCI7XG4gICAgICAgICAgICBfdGhpcy5oaWRkZW5GaWxlSW5wdXQuc3R5bGUudG9wID0gXCIwXCI7XG4gICAgICAgICAgICAgIF90aGlzLmhpZGRlbkZpbGVJbnB1dC5pZCA9IFwidXBsb2FkXCI7XG4gICAgICAgICAgICAgIF90aGlzLmhpZGRlbkZpbGVJbnB1dC5zdHlsZS5sZWZ0ID0gXCIwXCI7XG4gICAgICAgICAgICBfdGhpcy5oaWRkZW5GaWxlSW5wdXQuc3R5bGUuaGVpZ2h0ID0gXCIwXCI7XG4gICAgICAgICAgICBfdGhpcy5oaWRkZW5GaWxlSW5wdXQuc3R5bGUud2lkdGggPSBcIjBcIjtcbiAgICAgICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoX3RoaXMub3B0aW9ucy5oaWRkZW5JbnB1dENvbnRhaW5lcikuYXBwZW5kQ2hpbGQoX3RoaXMuaGlkZGVuRmlsZUlucHV0KTtcbiAgICAgICAgICAgIHJldHVybiBfdGhpcy5oaWRkZW5GaWxlSW5wdXQuYWRkRXZlbnRMaXN0ZW5lcihcImNoYW5nZVwiLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgdmFyIGZpbGUsIGZpbGVzLCBfaSwgX2xlbjtcbiAgICAgICAgICAgICAgZmlsZXMgPSBfdGhpcy5oaWRkZW5GaWxlSW5wdXQuZmlsZXM7XG4gICAgICAgICAgICAgIGlmIChmaWxlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBmb3IgKF9pID0gMCwgX2xlbiA9IGZpbGVzLmxlbmd0aDsgX2kgPCBfbGVuOyBfaSsrKSB7XG4gICAgICAgICAgICAgICAgICBmaWxlID0gZmlsZXNbX2ldO1xuICAgICAgICAgICAgICAgICAgX3RoaXMuYWRkRmlsZShmaWxlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgX3RoaXMuZW1pdChcImFkZGVkZmlsZXNcIiwgZmlsZXMpO1xuICAgICAgICAgICAgICByZXR1cm4gc2V0dXBIaWRkZW5GaWxlSW5wdXQoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH07XG4gICAgICAgIH0pKHRoaXMpO1xuICAgICAgICBzZXR1cEhpZGRlbkZpbGVJbnB1dCgpO1xuICAgICAgfVxuICAgICAgdGhpcy5VUkwgPSAoX3JlZiA9IHdpbmRvdy5VUkwpICE9IG51bGwgPyBfcmVmIDogd2luZG93LndlYmtpdFVSTDtcbiAgICAgIF9yZWYxID0gdGhpcy5ldmVudHM7XG4gICAgICBmb3IgKF9pID0gMCwgX2xlbiA9IF9yZWYxLmxlbmd0aDsgX2kgPCBfbGVuOyBfaSsrKSB7XG4gICAgICAgIGV2ZW50TmFtZSA9IF9yZWYxW19pXTtcbiAgICAgICAgdGhpcy5vbihldmVudE5hbWUsIHRoaXMub3B0aW9uc1tldmVudE5hbWVdKTtcbiAgICAgIH1cbiAgICAgIHRoaXMub24oXCJ1cGxvYWRwcm9ncmVzc1wiLCAoZnVuY3Rpb24oX3RoaXMpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgICAgIHJldHVybiBfdGhpcy51cGRhdGVUb3RhbFVwbG9hZFByb2dyZXNzKCk7XG4gICAgICAgIH07XG4gICAgICB9KSh0aGlzKSk7XG4gICAgICB0aGlzLm9uKFwicmVtb3ZlZGZpbGVcIiwgKGZ1bmN0aW9uKF90aGlzKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgICByZXR1cm4gX3RoaXMudXBkYXRlVG90YWxVcGxvYWRQcm9ncmVzcygpO1xuICAgICAgICB9O1xuICAgICAgfSkodGhpcykpO1xuICAgICAgdGhpcy5vbihcImNhbmNlbGVkXCIsIChmdW5jdGlvbihfdGhpcykge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24oZmlsZSkge1xuICAgICAgICAgIHJldHVybiBfdGhpcy5lbWl0KFwiY29tcGxldGVcIiwgZmlsZSk7XG4gICAgICAgIH07XG4gICAgICB9KSh0aGlzKSk7XG4gICAgICB0aGlzLm9uKFwiY29tcGxldGVcIiwgKGZ1bmN0aW9uKF90aGlzKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbihmaWxlKSB7XG4gICAgICAgICAgaWYgKF90aGlzLmdldEFkZGVkRmlsZXMoKS5sZW5ndGggPT09IDAgJiYgX3RoaXMuZ2V0VXBsb2FkaW5nRmlsZXMoKS5sZW5ndGggPT09IDAgJiYgX3RoaXMuZ2V0UXVldWVkRmlsZXMoKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiBzZXRUaW1lb3V0KChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIF90aGlzLmVtaXQoXCJxdWV1ZWNvbXBsZXRlXCIpO1xuICAgICAgICAgICAgfSksIDApO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgIH0pKHRoaXMpKTtcbiAgICAgIG5vUHJvcGFnYXRpb24gPSBmdW5jdGlvbihlKSB7XG4gICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIGlmIChlLnByZXZlbnREZWZhdWx0KSB7XG4gICAgICAgICAgcmV0dXJuIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gZS5yZXR1cm5WYWx1ZSA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgdGhpcy5saXN0ZW5lcnMgPSBbXG4gICAgICAgIHtcbiAgICAgICAgICBlbGVtZW50OiB0aGlzLmVsZW1lbnQsXG4gICAgICAgICAgZXZlbnRzOiB7XG4gICAgICAgICAgICBcImRyYWdzdGFydFwiOiAoZnVuY3Rpb24oX3RoaXMpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gX3RoaXMuZW1pdChcImRyYWdzdGFydFwiLCBlKTtcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0pKHRoaXMpLFxuICAgICAgICAgICAgXCJkcmFnZW50ZXJcIjogKGZ1bmN0aW9uKF90aGlzKSB7XG4gICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICAgICAgbm9Qcm9wYWdhdGlvbihlKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gX3RoaXMuZW1pdChcImRyYWdlbnRlclwiLCBlKTtcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0pKHRoaXMpLFxuICAgICAgICAgICAgXCJkcmFnb3ZlclwiOiAoZnVuY3Rpb24oX3RoaXMpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgICAgICB2YXIgZWZjdDtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgZWZjdCA9IGUuZGF0YVRyYW5zZmVyLmVmZmVjdEFsbG93ZWQ7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoX2Vycm9yKSB7fVxuICAgICAgICAgICAgICAgIGUuZGF0YVRyYW5zZmVyLmRyb3BFZmZlY3QgPSAnbW92ZScgPT09IGVmY3QgfHwgJ2xpbmtNb3ZlJyA9PT0gZWZjdCA/ICdtb3ZlJyA6ICdjb3B5JztcbiAgICAgICAgICAgICAgICBub1Byb3BhZ2F0aW9uKGUpO1xuICAgICAgICAgICAgICAgIHJldHVybiBfdGhpcy5lbWl0KFwiZHJhZ292ZXJcIiwgZSk7XG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9KSh0aGlzKSxcbiAgICAgICAgICAgIFwiZHJhZ2xlYXZlXCI6IChmdW5jdGlvbihfdGhpcykge1xuICAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24oZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBfdGhpcy5lbWl0KFwiZHJhZ2xlYXZlXCIsIGUpO1xuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSkodGhpcyksXG4gICAgICAgICAgICBcImRyb3BcIjogKGZ1bmN0aW9uKF90aGlzKSB7XG4gICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICAgICAgbm9Qcm9wYWdhdGlvbihlKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gX3RoaXMuZHJvcChlKTtcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0pKHRoaXMpLFxuICAgICAgICAgICAgXCJkcmFnZW5kXCI6IChmdW5jdGlvbihfdGhpcykge1xuICAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24oZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBfdGhpcy5lbWl0KFwiZHJhZ2VuZFwiLCBlKTtcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0pKHRoaXMpXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBdO1xuICAgICAgdGhpcy5jbGlja2FibGVFbGVtZW50cy5mb3JFYWNoKChmdW5jdGlvbihfdGhpcykge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24oY2xpY2thYmxlRWxlbWVudCkge1xuICAgICAgICAgIHJldHVybiBfdGhpcy5saXN0ZW5lcnMucHVzaCh7XG4gICAgICAgICAgICBlbGVtZW50OiBjbGlja2FibGVFbGVtZW50LFxuICAgICAgICAgICAgZXZlbnRzOiB7XG4gICAgICAgICAgICAgIFwiY2xpY2tcIjogZnVuY3Rpb24oZXZ0KSB7XG4gICAgICAgICAgICAgICAgaWYgKChjbGlja2FibGVFbGVtZW50ICE9PSBfdGhpcy5lbGVtZW50KSB8fCAoZXZ0LnRhcmdldCA9PT0gX3RoaXMuZWxlbWVudCB8fCBEcm9wem9uZS5lbGVtZW50SW5zaWRlKGV2dC50YXJnZXQsIF90aGlzLmVsZW1lbnQucXVlcnlTZWxlY3RvcihcIi5kei1tZXNzYWdlXCIpKSkpIHtcbiAgICAgICAgICAgICAgICAgIF90aGlzLmhpZGRlbkZpbGVJbnB1dC5jbGljaygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuICAgICAgfSkodGhpcykpO1xuICAgICAgdGhpcy5lbmFibGUoKTtcbiAgICAgIHJldHVybiB0aGlzLm9wdGlvbnMuaW5pdC5jYWxsKHRoaXMpO1xuICAgIH07XG5cbiAgICBEcm9wem9uZS5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIF9yZWY7XG4gICAgICB0aGlzLmRpc2FibGUoKTtcbiAgICAgIHRoaXMucmVtb3ZlQWxsRmlsZXModHJ1ZSk7XG4gICAgICBpZiAoKF9yZWYgPSB0aGlzLmhpZGRlbkZpbGVJbnB1dCkgIT0gbnVsbCA/IF9yZWYucGFyZW50Tm9kZSA6IHZvaWQgMCkge1xuICAgICAgICB0aGlzLmhpZGRlbkZpbGVJbnB1dC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuaGlkZGVuRmlsZUlucHV0KTtcbiAgICAgICAgdGhpcy5oaWRkZW5GaWxlSW5wdXQgPSBudWxsO1xuICAgICAgfVxuICAgICAgZGVsZXRlIHRoaXMuZWxlbWVudC5kcm9wem9uZTtcbiAgICAgIHJldHVybiBEcm9wem9uZS5pbnN0YW5jZXMuc3BsaWNlKERyb3B6b25lLmluc3RhbmNlcy5pbmRleE9mKHRoaXMpLCAxKTtcbiAgICB9O1xuXG4gICAgRHJvcHpvbmUucHJvdG90eXBlLnVwZGF0ZVRvdGFsVXBsb2FkUHJvZ3Jlc3MgPSBmdW5jdGlvbigpIHtcbiAgICAgIHZhciBhY3RpdmVGaWxlcywgZmlsZSwgdG90YWxCeXRlcywgdG90YWxCeXRlc1NlbnQsIHRvdGFsVXBsb2FkUHJvZ3Jlc3MsIF9pLCBfbGVuLCBfcmVmO1xuICAgICAgdG90YWxCeXRlc1NlbnQgPSAwO1xuICAgICAgdG90YWxCeXRlcyA9IDA7XG4gICAgICBhY3RpdmVGaWxlcyA9IHRoaXMuZ2V0QWN0aXZlRmlsZXMoKTtcbiAgICAgIGlmIChhY3RpdmVGaWxlcy5sZW5ndGgpIHtcbiAgICAgICAgX3JlZiA9IHRoaXMuZ2V0QWN0aXZlRmlsZXMoKTtcbiAgICAgICAgZm9yIChfaSA9IDAsIF9sZW4gPSBfcmVmLmxlbmd0aDsgX2kgPCBfbGVuOyBfaSsrKSB7XG4gICAgICAgICAgZmlsZSA9IF9yZWZbX2ldO1xuICAgICAgICAgIHRvdGFsQnl0ZXNTZW50ICs9IGZpbGUudXBsb2FkLmJ5dGVzU2VudDtcbiAgICAgICAgICB0b3RhbEJ5dGVzICs9IGZpbGUudXBsb2FkLnRvdGFsO1xuICAgICAgICB9XG4gICAgICAgIHRvdGFsVXBsb2FkUHJvZ3Jlc3MgPSAxMDAgKiB0b3RhbEJ5dGVzU2VudCAvIHRvdGFsQnl0ZXM7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0b3RhbFVwbG9hZFByb2dyZXNzID0gMTAwO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMuZW1pdChcInRvdGFsdXBsb2FkcHJvZ3Jlc3NcIiwgdG90YWxVcGxvYWRQcm9ncmVzcywgdG90YWxCeXRlcywgdG90YWxCeXRlc1NlbnQpO1xuICAgIH07XG5cbiAgICBEcm9wem9uZS5wcm90b3R5cGUuX2dldFBhcmFtTmFtZSA9IGZ1bmN0aW9uKG4pIHtcbiAgICAgIGlmICh0eXBlb2YgdGhpcy5vcHRpb25zLnBhcmFtTmFtZSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9wdGlvbnMucGFyYW1OYW1lKG4pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIFwiXCIgKyB0aGlzLm9wdGlvbnMucGFyYW1OYW1lICsgKHRoaXMub3B0aW9ucy51cGxvYWRNdWx0aXBsZSA/IFwiW1wiICsgbiArIFwiXVwiIDogXCJcIik7XG4gICAgICB9XG4gICAgfTtcblxuICAgIERyb3B6b25lLnByb3RvdHlwZS5nZXRGYWxsYmFja0Zvcm0gPSBmdW5jdGlvbigpIHtcbiAgICAgIHZhciBleGlzdGluZ0ZhbGxiYWNrLCBmaWVsZHMsIGZpZWxkc1N0cmluZywgZm9ybTtcbiAgICAgIGlmIChleGlzdGluZ0ZhbGxiYWNrID0gdGhpcy5nZXRFeGlzdGluZ0ZhbGxiYWNrKCkpIHtcbiAgICAgICAgcmV0dXJuIGV4aXN0aW5nRmFsbGJhY2s7XG4gICAgICB9XG4gICAgICBmaWVsZHNTdHJpbmcgPSBcIjxkaXYgY2xhc3M9XFxcImR6LWZhbGxiYWNrXFxcIj5cIjtcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMuZGljdEZhbGxiYWNrVGV4dCkge1xuICAgICAgICBmaWVsZHNTdHJpbmcgKz0gXCI8cD5cIiArIHRoaXMub3B0aW9ucy5kaWN0RmFsbGJhY2tUZXh0ICsgXCI8L3A+XCI7XG4gICAgICB9XG4gICAgICBmaWVsZHNTdHJpbmcgKz0gXCI8aW5wdXQgdHlwZT1cXFwiZmlsZVxcXCIgbmFtZT1cXFwiXCIgKyAodGhpcy5fZ2V0UGFyYW1OYW1lKDApKSArIFwiXFxcIiBcIiArICh0aGlzLm9wdGlvbnMudXBsb2FkTXVsdGlwbGUgPyAnbXVsdGlwbGU9XCJtdWx0aXBsZVwiJyA6IHZvaWQgMCkgKyBcIiAvPjxpbnB1dCB0eXBlPVxcXCJzdWJtaXRcXFwiIHZhbHVlPVxcXCJVcGxvYWQhXFxcIj48L2Rpdj5cIjtcbiAgICAgIGZpZWxkcyA9IERyb3B6b25lLmNyZWF0ZUVsZW1lbnQoZmllbGRzU3RyaW5nKTtcbiAgICAgIGlmICh0aGlzLmVsZW1lbnQudGFnTmFtZSAhPT0gXCJGT1JNXCIpIHtcbiAgICAgICAgZm9ybSA9IERyb3B6b25lLmNyZWF0ZUVsZW1lbnQoXCI8Zm9ybSBhY3Rpb249XFxcIlwiICsgdGhpcy5vcHRpb25zLnVybCArIFwiXFxcIiBlbmN0eXBlPVxcXCJtdWx0aXBhcnQvZm9ybS1kYXRhXFxcIiBtZXRob2Q9XFxcIlwiICsgdGhpcy5vcHRpb25zLm1ldGhvZCArIFwiXFxcIj48L2Zvcm0+XCIpO1xuICAgICAgICBmb3JtLmFwcGVuZENoaWxkKGZpZWxkcyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmVsZW1lbnQuc2V0QXR0cmlidXRlKFwiZW5jdHlwZVwiLCBcIm11bHRpcGFydC9mb3JtLWRhdGFcIik7XG4gICAgICAgIHRoaXMuZWxlbWVudC5zZXRBdHRyaWJ1dGUoXCJtZXRob2RcIiwgdGhpcy5vcHRpb25zLm1ldGhvZCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZm9ybSAhPSBudWxsID8gZm9ybSA6IGZpZWxkcztcbiAgICB9O1xuXG4gICAgRHJvcHpvbmUucHJvdG90eXBlLmdldEV4aXN0aW5nRmFsbGJhY2sgPSBmdW5jdGlvbigpIHtcbiAgICAgIHZhciBmYWxsYmFjaywgZ2V0RmFsbGJhY2ssIHRhZ05hbWUsIF9pLCBfbGVuLCBfcmVmO1xuICAgICAgZ2V0RmFsbGJhY2sgPSBmdW5jdGlvbihlbGVtZW50cykge1xuICAgICAgICB2YXIgZWwsIF9pLCBfbGVuO1xuICAgICAgICBmb3IgKF9pID0gMCwgX2xlbiA9IGVsZW1lbnRzLmxlbmd0aDsgX2kgPCBfbGVuOyBfaSsrKSB7XG4gICAgICAgICAgZWwgPSBlbGVtZW50c1tfaV07XG4gICAgICAgICAgaWYgKC8oXnwgKWZhbGxiYWNrKCR8ICkvLnRlc3QoZWwuY2xhc3NOYW1lKSkge1xuICAgICAgICAgICAgcmV0dXJuIGVsO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIF9yZWYgPSBbXCJkaXZcIiwgXCJmb3JtXCJdO1xuICAgICAgZm9yIChfaSA9IDAsIF9sZW4gPSBfcmVmLmxlbmd0aDsgX2kgPCBfbGVuOyBfaSsrKSB7XG4gICAgICAgIHRhZ05hbWUgPSBfcmVmW19pXTtcbiAgICAgICAgaWYgKGZhbGxiYWNrID0gZ2V0RmFsbGJhY2sodGhpcy5lbGVtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKHRhZ05hbWUpKSkge1xuICAgICAgICAgIHJldHVybiBmYWxsYmFjaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG5cbiAgICBEcm9wem9uZS5wcm90b3R5cGUuc2V0dXBFdmVudExpc3RlbmVycyA9IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIGVsZW1lbnRMaXN0ZW5lcnMsIGV2ZW50LCBsaXN0ZW5lciwgX2ksIF9sZW4sIF9yZWYsIF9yZXN1bHRzO1xuICAgICAgX3JlZiA9IHRoaXMubGlzdGVuZXJzO1xuICAgICAgX3Jlc3VsdHMgPSBbXTtcbiAgICAgIGZvciAoX2kgPSAwLCBfbGVuID0gX3JlZi5sZW5ndGg7IF9pIDwgX2xlbjsgX2krKykge1xuICAgICAgICBlbGVtZW50TGlzdGVuZXJzID0gX3JlZltfaV07XG4gICAgICAgIF9yZXN1bHRzLnB1c2goKGZ1bmN0aW9uKCkge1xuICAgICAgICAgIHZhciBfcmVmMSwgX3Jlc3VsdHMxO1xuICAgICAgICAgIF9yZWYxID0gZWxlbWVudExpc3RlbmVycy5ldmVudHM7XG4gICAgICAgICAgX3Jlc3VsdHMxID0gW107XG4gICAgICAgICAgZm9yIChldmVudCBpbiBfcmVmMSkge1xuICAgICAgICAgICAgbGlzdGVuZXIgPSBfcmVmMVtldmVudF07XG4gICAgICAgICAgICBfcmVzdWx0czEucHVzaChlbGVtZW50TGlzdGVuZXJzLmVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihldmVudCwgbGlzdGVuZXIsIGZhbHNlKSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBfcmVzdWx0czE7XG4gICAgICAgIH0pKCkpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIF9yZXN1bHRzO1xuICAgIH07XG5cbiAgICBEcm9wem9uZS5wcm90b3R5cGUucmVtb3ZlRXZlbnRMaXN0ZW5lcnMgPSBmdW5jdGlvbigpIHtcbiAgICAgIHZhciBlbGVtZW50TGlzdGVuZXJzLCBldmVudCwgbGlzdGVuZXIsIF9pLCBfbGVuLCBfcmVmLCBfcmVzdWx0cztcbiAgICAgIF9yZWYgPSB0aGlzLmxpc3RlbmVycztcbiAgICAgIF9yZXN1bHRzID0gW107XG4gICAgICBmb3IgKF9pID0gMCwgX2xlbiA9IF9yZWYubGVuZ3RoOyBfaSA8IF9sZW47IF9pKyspIHtcbiAgICAgICAgZWxlbWVudExpc3RlbmVycyA9IF9yZWZbX2ldO1xuICAgICAgICBfcmVzdWx0cy5wdXNoKChmdW5jdGlvbigpIHtcbiAgICAgICAgICB2YXIgX3JlZjEsIF9yZXN1bHRzMTtcbiAgICAgICAgICBfcmVmMSA9IGVsZW1lbnRMaXN0ZW5lcnMuZXZlbnRzO1xuICAgICAgICAgIF9yZXN1bHRzMSA9IFtdO1xuICAgICAgICAgIGZvciAoZXZlbnQgaW4gX3JlZjEpIHtcbiAgICAgICAgICAgIGxpc3RlbmVyID0gX3JlZjFbZXZlbnRdO1xuICAgICAgICAgICAgX3Jlc3VsdHMxLnB1c2goZWxlbWVudExpc3RlbmVycy5lbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnQsIGxpc3RlbmVyLCBmYWxzZSkpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gX3Jlc3VsdHMxO1xuICAgICAgICB9KSgpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBfcmVzdWx0cztcbiAgICB9O1xuXG4gICAgRHJvcHpvbmUucHJvdG90eXBlLmRpc2FibGUgPSBmdW5jdGlvbigpIHtcbiAgICAgIHZhciBmaWxlLCBfaSwgX2xlbiwgX3JlZiwgX3Jlc3VsdHM7XG4gICAgICB0aGlzLmNsaWNrYWJsZUVsZW1lbnRzLmZvckVhY2goZnVuY3Rpb24oZWxlbWVudCkge1xuICAgICAgICByZXR1cm4gZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKFwiZHotY2xpY2thYmxlXCIpO1xuICAgICAgfSk7XG4gICAgICB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXJzKCk7XG4gICAgICBfcmVmID0gdGhpcy5maWxlcztcbiAgICAgIF9yZXN1bHRzID0gW107XG4gICAgICBmb3IgKF9pID0gMCwgX2xlbiA9IF9yZWYubGVuZ3RoOyBfaSA8IF9sZW47IF9pKyspIHtcbiAgICAgICAgZmlsZSA9IF9yZWZbX2ldO1xuICAgICAgICBfcmVzdWx0cy5wdXNoKHRoaXMuY2FuY2VsVXBsb2FkKGZpbGUpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBfcmVzdWx0cztcbiAgICB9O1xuXG4gICAgRHJvcHpvbmUucHJvdG90eXBlLmVuYWJsZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgdGhpcy5jbGlja2FibGVFbGVtZW50cy5mb3JFYWNoKGZ1bmN0aW9uKGVsZW1lbnQpIHtcbiAgICAgICAgcmV0dXJuIGVsZW1lbnQuY2xhc3NMaXN0LmFkZChcImR6LWNsaWNrYWJsZVwiKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHRoaXMuc2V0dXBFdmVudExpc3RlbmVycygpO1xuICAgIH07XG5cbiAgICBEcm9wem9uZS5wcm90b3R5cGUuZmlsZXNpemUgPSBmdW5jdGlvbihzaXplKSB7XG4gICAgICB2YXIgY3V0b2ZmLCBpLCBzZWxlY3RlZFNpemUsIHNlbGVjdGVkVW5pdCwgdW5pdCwgdW5pdHMsIF9pLCBfbGVuO1xuICAgICAgc2VsZWN0ZWRTaXplID0gMDtcbiAgICAgIHNlbGVjdGVkVW5pdCA9IFwiYlwiO1xuICAgICAgaWYgKHNpemUgPiAwKSB7XG4gICAgICAgIHVuaXRzID0gWydUQicsICdHQicsICdNQicsICdLQicsICdiJ107XG4gICAgICAgIGZvciAoaSA9IF9pID0gMCwgX2xlbiA9IHVuaXRzLmxlbmd0aDsgX2kgPCBfbGVuOyBpID0gKytfaSkge1xuICAgICAgICAgIHVuaXQgPSB1bml0c1tpXTtcbiAgICAgICAgICBjdXRvZmYgPSBNYXRoLnBvdyh0aGlzLm9wdGlvbnMuZmlsZXNpemVCYXNlLCA0IC0gaSkgLyAxMDtcbiAgICAgICAgICBpZiAoc2l6ZSA+PSBjdXRvZmYpIHtcbiAgICAgICAgICAgIHNlbGVjdGVkU2l6ZSA9IHNpemUgLyBNYXRoLnBvdyh0aGlzLm9wdGlvbnMuZmlsZXNpemVCYXNlLCA0IC0gaSk7XG4gICAgICAgICAgICBzZWxlY3RlZFVuaXQgPSB1bml0O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHNlbGVjdGVkU2l6ZSA9IE1hdGgucm91bmQoMTAgKiBzZWxlY3RlZFNpemUpIC8gMTA7XG4gICAgICB9XG4gICAgICByZXR1cm4gXCI8c3Ryb25nPlwiICsgc2VsZWN0ZWRTaXplICsgXCI8L3N0cm9uZz4gXCIgKyBzZWxlY3RlZFVuaXQ7XG4gICAgfTtcblxuICAgIERyb3B6b25lLnByb3RvdHlwZS5fdXBkYXRlTWF4RmlsZXNSZWFjaGVkQ2xhc3MgPSBmdW5jdGlvbigpIHtcbiAgICAgIGlmICgodGhpcy5vcHRpb25zLm1heEZpbGVzICE9IG51bGwpICYmIHRoaXMuZ2V0QWNjZXB0ZWRGaWxlcygpLmxlbmd0aCA+PSB0aGlzLm9wdGlvbnMubWF4RmlsZXMpIHtcbiAgICAgICAgaWYgKHRoaXMuZ2V0QWNjZXB0ZWRGaWxlcygpLmxlbmd0aCA9PT0gdGhpcy5vcHRpb25zLm1heEZpbGVzKSB7XG4gICAgICAgICAgdGhpcy5lbWl0KCdtYXhmaWxlc3JlYWNoZWQnLCB0aGlzLmZpbGVzKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5lbGVtZW50LmNsYXNzTGlzdC5hZGQoXCJkei1tYXgtZmlsZXMtcmVhY2hlZFwiKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0aGlzLmVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShcImR6LW1heC1maWxlcy1yZWFjaGVkXCIpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBEcm9wem9uZS5wcm90b3R5cGUuZHJvcCA9IGZ1bmN0aW9uKGUpIHtcbiAgICAgIHZhciBmaWxlcywgaXRlbXM7XG4gICAgICBpZiAoIWUuZGF0YVRyYW5zZmVyKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMuZW1pdChcImRyb3BcIiwgZSk7XG4gICAgICBmaWxlcyA9IGUuZGF0YVRyYW5zZmVyLmZpbGVzO1xuICAgICAgdGhpcy5lbWl0KFwiYWRkZWRmaWxlc1wiLCBmaWxlcyk7XG4gICAgICBpZiAoZmlsZXMubGVuZ3RoKSB7XG4gICAgICAgIGl0ZW1zID0gZS5kYXRhVHJhbnNmZXIuaXRlbXM7XG4gICAgICAgIGlmIChpdGVtcyAmJiBpdGVtcy5sZW5ndGggJiYgKGl0ZW1zWzBdLndlYmtpdEdldEFzRW50cnkgIT0gbnVsbCkpIHtcbiAgICAgICAgICB0aGlzLl9hZGRGaWxlc0Zyb21JdGVtcyhpdGVtcyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5oYW5kbGVGaWxlcyhmaWxlcyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuXG4gICAgRHJvcHpvbmUucHJvdG90eXBlLnBhc3RlID0gZnVuY3Rpb24oZSkge1xuICAgICAgdmFyIGl0ZW1zLCBfcmVmO1xuICAgICAgaWYgKChlICE9IG51bGwgPyAoX3JlZiA9IGUuY2xpcGJvYXJkRGF0YSkgIT0gbnVsbCA/IF9yZWYuaXRlbXMgOiB2b2lkIDAgOiB2b2lkIDApID09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5lbWl0KFwicGFzdGVcIiwgZSk7XG4gICAgICBpdGVtcyA9IGUuY2xpcGJvYXJkRGF0YS5pdGVtcztcbiAgICAgIGlmIChpdGVtcy5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FkZEZpbGVzRnJvbUl0ZW1zKGl0ZW1zKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgRHJvcHpvbmUucHJvdG90eXBlLmhhbmRsZUZpbGVzID0gZnVuY3Rpb24oZmlsZXMpIHtcbiAgICAgIHZhciBmaWxlLCBfaSwgX2xlbiwgX3Jlc3VsdHM7XG4gICAgICBfcmVzdWx0cyA9IFtdO1xuICAgICAgZm9yIChfaSA9IDAsIF9sZW4gPSBmaWxlcy5sZW5ndGg7IF9pIDwgX2xlbjsgX2krKykge1xuICAgICAgICBmaWxlID0gZmlsZXNbX2ldO1xuICAgICAgICBfcmVzdWx0cy5wdXNoKHRoaXMuYWRkRmlsZShmaWxlKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gX3Jlc3VsdHM7XG4gICAgfTtcblxuICAgIERyb3B6b25lLnByb3RvdHlwZS5fYWRkRmlsZXNGcm9tSXRlbXMgPSBmdW5jdGlvbihpdGVtcykge1xuICAgICAgdmFyIGVudHJ5LCBpdGVtLCBfaSwgX2xlbiwgX3Jlc3VsdHM7XG4gICAgICBfcmVzdWx0cyA9IFtdO1xuICAgICAgZm9yIChfaSA9IDAsIF9sZW4gPSBpdGVtcy5sZW5ndGg7IF9pIDwgX2xlbjsgX2krKykge1xuICAgICAgICBpdGVtID0gaXRlbXNbX2ldO1xuICAgICAgICBpZiAoKGl0ZW0ud2Via2l0R2V0QXNFbnRyeSAhPSBudWxsKSAmJiAoZW50cnkgPSBpdGVtLndlYmtpdEdldEFzRW50cnkoKSkpIHtcbiAgICAgICAgICBpZiAoZW50cnkuaXNGaWxlKSB7XG4gICAgICAgICAgICBfcmVzdWx0cy5wdXNoKHRoaXMuYWRkRmlsZShpdGVtLmdldEFzRmlsZSgpKSk7XG4gICAgICAgICAgfSBlbHNlIGlmIChlbnRyeS5pc0RpcmVjdG9yeSkge1xuICAgICAgICAgICAgX3Jlc3VsdHMucHVzaCh0aGlzLl9hZGRGaWxlc0Zyb21EaXJlY3RvcnkoZW50cnksIGVudHJ5Lm5hbWUpKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgX3Jlc3VsdHMucHVzaCh2b2lkIDApO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChpdGVtLmdldEFzRmlsZSAhPSBudWxsKSB7XG4gICAgICAgICAgaWYgKChpdGVtLmtpbmQgPT0gbnVsbCkgfHwgaXRlbS5raW5kID09PSBcImZpbGVcIikge1xuICAgICAgICAgICAgX3Jlc3VsdHMucHVzaCh0aGlzLmFkZEZpbGUoaXRlbS5nZXRBc0ZpbGUoKSkpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBfcmVzdWx0cy5wdXNoKHZvaWQgMCk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIF9yZXN1bHRzLnB1c2godm9pZCAwKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIF9yZXN1bHRzO1xuICAgIH07XG5cbiAgICBEcm9wem9uZS5wcm90b3R5cGUuX2FkZEZpbGVzRnJvbURpcmVjdG9yeSA9IGZ1bmN0aW9uKGRpcmVjdG9yeSwgcGF0aCkge1xuICAgICAgdmFyIGRpclJlYWRlciwgZW50cmllc1JlYWRlcjtcbiAgICAgIGRpclJlYWRlciA9IGRpcmVjdG9yeS5jcmVhdGVSZWFkZXIoKTtcbiAgICAgIGVudHJpZXNSZWFkZXIgPSAoZnVuY3Rpb24oX3RoaXMpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKGVudHJpZXMpIHtcbiAgICAgICAgICB2YXIgZW50cnksIF9pLCBfbGVuO1xuICAgICAgICAgIGZvciAoX2kgPSAwLCBfbGVuID0gZW50cmllcy5sZW5ndGg7IF9pIDwgX2xlbjsgX2krKykge1xuICAgICAgICAgICAgZW50cnkgPSBlbnRyaWVzW19pXTtcbiAgICAgICAgICAgIGlmIChlbnRyeS5pc0ZpbGUpIHtcbiAgICAgICAgICAgICAgZW50cnkuZmlsZShmdW5jdGlvbihmaWxlKSB7XG4gICAgICAgICAgICAgICAgaWYgKF90aGlzLm9wdGlvbnMuaWdub3JlSGlkZGVuRmlsZXMgJiYgZmlsZS5uYW1lLnN1YnN0cmluZygwLCAxKSA9PT0gJy4nKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGZpbGUuZnVsbFBhdGggPSBcIlwiICsgcGF0aCArIFwiL1wiICsgZmlsZS5uYW1lO1xuICAgICAgICAgICAgICAgIHJldHVybiBfdGhpcy5hZGRGaWxlKGZpbGUpO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZW50cnkuaXNEaXJlY3RvcnkpIHtcbiAgICAgICAgICAgICAgX3RoaXMuX2FkZEZpbGVzRnJvbURpcmVjdG9yeShlbnRyeSwgXCJcIiArIHBhdGggKyBcIi9cIiArIGVudHJ5Lm5hbWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgIH0pKHRoaXMpO1xuICAgICAgcmV0dXJuIGRpclJlYWRlci5yZWFkRW50cmllcyhlbnRyaWVzUmVhZGVyLCBmdW5jdGlvbihlcnJvcikge1xuICAgICAgICByZXR1cm4gdHlwZW9mIGNvbnNvbGUgIT09IFwidW5kZWZpbmVkXCIgJiYgY29uc29sZSAhPT0gbnVsbCA/IHR5cGVvZiBjb25zb2xlLmxvZyA9PT0gXCJmdW5jdGlvblwiID8gY29uc29sZS5sb2coZXJyb3IpIDogdm9pZCAwIDogdm9pZCAwO1xuICAgICAgfSk7XG4gICAgfTtcblxuICAgIERyb3B6b25lLnByb3RvdHlwZS5hY2NlcHQgPSBmdW5jdGlvbihmaWxlLCBkb25lKSB7XG4gICAgICBpZiAoZmlsZS5zaXplID4gdGhpcy5vcHRpb25zLm1heEZpbGVzaXplICogMTAyNCAqIDEwMjQpIHtcbiAgICAgICAgcmV0dXJuIGRvbmUodGhpcy5vcHRpb25zLmRpY3RGaWxlVG9vQmlnLnJlcGxhY2UoXCJ7e2ZpbGVzaXplfX1cIiwgTWF0aC5yb3VuZChmaWxlLnNpemUgLyAxMDI0IC8gMTAuMjQpIC8gMTAwKS5yZXBsYWNlKFwie3ttYXhGaWxlc2l6ZX19XCIsIHRoaXMub3B0aW9ucy5tYXhGaWxlc2l6ZSkpO1xuICAgICAgfSBlbHNlIGlmICghRHJvcHpvbmUuaXNWYWxpZEZpbGUoZmlsZSwgdGhpcy5vcHRpb25zLmFjY2VwdGVkRmlsZXMpKSB7XG4gICAgICAgIHJldHVybiBkb25lKHRoaXMub3B0aW9ucy5kaWN0SW52YWxpZEZpbGVUeXBlKTtcbiAgICAgIH0gZWxzZSBpZiAoKHRoaXMub3B0aW9ucy5tYXhGaWxlcyAhPSBudWxsKSAmJiB0aGlzLmdldEFjY2VwdGVkRmlsZXMoKS5sZW5ndGggPj0gdGhpcy5vcHRpb25zLm1heEZpbGVzKSB7XG4gICAgICAgIGRvbmUodGhpcy5vcHRpb25zLmRpY3RNYXhGaWxlc0V4Y2VlZGVkLnJlcGxhY2UoXCJ7e21heEZpbGVzfX1cIiwgdGhpcy5vcHRpb25zLm1heEZpbGVzKSk7XG4gICAgICAgIHJldHVybiB0aGlzLmVtaXQoXCJtYXhmaWxlc2V4Y2VlZGVkXCIsIGZpbGUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3B0aW9ucy5hY2NlcHQuY2FsbCh0aGlzLCBmaWxlLCBkb25lKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgRHJvcHpvbmUucHJvdG90eXBlLmFkZEZpbGUgPSBmdW5jdGlvbihmaWxlKSB7XG4gICAgICBmaWxlLnVwbG9hZCA9IHtcbiAgICAgICAgcHJvZ3Jlc3M6IDAsXG4gICAgICAgIHRvdGFsOiBmaWxlLnNpemUsXG4gICAgICAgIGJ5dGVzU2VudDogMFxuICAgICAgfTtcbiAgICAgIHRoaXMuZmlsZXMucHVzaChmaWxlKTtcbiAgICAgIGZpbGUuc3RhdHVzID0gRHJvcHpvbmUuQURERUQ7XG4gICAgICB0aGlzLmVtaXQoXCJhZGRlZGZpbGVcIiwgZmlsZSk7XG4gICAgICB0aGlzLl9lbnF1ZXVlVGh1bWJuYWlsKGZpbGUpO1xuICAgICAgcmV0dXJuIHRoaXMuYWNjZXB0KGZpbGUsIChmdW5jdGlvbihfdGhpcykge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24oZXJyb3IpIHtcbiAgICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICAgIGZpbGUuYWNjZXB0ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIF90aGlzLl9lcnJvclByb2Nlc3NpbmcoW2ZpbGVdLCBlcnJvcik7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZpbGUuYWNjZXB0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgaWYgKF90aGlzLm9wdGlvbnMuYXV0b1F1ZXVlKSB7XG4gICAgICAgICAgICAgIF90aGlzLmVucXVldWVGaWxlKGZpbGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gX3RoaXMuX3VwZGF0ZU1heEZpbGVzUmVhY2hlZENsYXNzKCk7XG4gICAgICAgIH07XG4gICAgICB9KSh0aGlzKSk7XG4gICAgfTtcblxuICAgIERyb3B6b25lLnByb3RvdHlwZS5lbnF1ZXVlRmlsZXMgPSBmdW5jdGlvbihmaWxlcykge1xuICAgICAgdmFyIGZpbGUsIF9pLCBfbGVuO1xuICAgICAgZm9yIChfaSA9IDAsIF9sZW4gPSBmaWxlcy5sZW5ndGg7IF9pIDwgX2xlbjsgX2krKykge1xuICAgICAgICBmaWxlID0gZmlsZXNbX2ldO1xuICAgICAgICB0aGlzLmVucXVldWVGaWxlKGZpbGUpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfTtcblxuICAgIERyb3B6b25lLnByb3RvdHlwZS5lbnF1ZXVlRmlsZSA9IGZ1bmN0aW9uKGZpbGUpIHtcbiAgICAgIGlmIChmaWxlLnN0YXR1cyA9PT0gRHJvcHpvbmUuQURERUQgJiYgZmlsZS5hY2NlcHRlZCA9PT0gdHJ1ZSkge1xuICAgICAgICBmaWxlLnN0YXR1cyA9IERyb3B6b25lLlFVRVVFRDtcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5hdXRvUHJvY2Vzc1F1ZXVlKSB7XG4gICAgICAgICAgcmV0dXJuIHNldFRpbWVvdXQoKChmdW5jdGlvbihfdGhpcykge1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICByZXR1cm4gX3RoaXMucHJvY2Vzc1F1ZXVlKCk7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH0pKHRoaXMpKSwgMCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIlRoaXMgZmlsZSBjYW4ndCBiZSBxdWV1ZWQgYmVjYXVzZSBpdCBoYXMgYWxyZWFkeSBiZWVuIHByb2Nlc3NlZCBvciB3YXMgcmVqZWN0ZWQuXCIpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBEcm9wem9uZS5wcm90b3R5cGUuX3RodW1ibmFpbFF1ZXVlID0gW107XG5cbiAgICBEcm9wem9uZS5wcm90b3R5cGUuX3Byb2Nlc3NpbmdUaHVtYm5haWwgPSBmYWxzZTtcblxuICAgIERyb3B6b25lLnByb3RvdHlwZS5fZW5xdWV1ZVRodW1ibmFpbCA9IGZ1bmN0aW9uKGZpbGUpIHtcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMuY3JlYXRlSW1hZ2VUaHVtYm5haWxzICYmIGZpbGUudHlwZS5tYXRjaCgvaW1hZ2UuKi8pICYmIGZpbGUuc2l6ZSA8PSB0aGlzLm9wdGlvbnMubWF4VGh1bWJuYWlsRmlsZXNpemUgKiAxMDI0ICogMTAyNCkge1xuICAgICAgICB0aGlzLl90aHVtYm5haWxRdWV1ZS5wdXNoKGZpbGUpO1xuICAgICAgICByZXR1cm4gc2V0VGltZW91dCgoKGZ1bmN0aW9uKF90aGlzKSB7XG4gICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuIF90aGlzLl9wcm9jZXNzVGh1bWJuYWlsUXVldWUoKTtcbiAgICAgICAgICB9O1xuICAgICAgICB9KSh0aGlzKSksIDApO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBEcm9wem9uZS5wcm90b3R5cGUuX3Byb2Nlc3NUaHVtYm5haWxRdWV1ZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgaWYgKHRoaXMuX3Byb2Nlc3NpbmdUaHVtYm5haWwgfHwgdGhpcy5fdGh1bWJuYWlsUXVldWUubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMuX3Byb2Nlc3NpbmdUaHVtYm5haWwgPSB0cnVlO1xuICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlVGh1bWJuYWlsKHRoaXMuX3RodW1ibmFpbFF1ZXVlLnNoaWZ0KCksIChmdW5jdGlvbihfdGhpcykge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgX3RoaXMuX3Byb2Nlc3NpbmdUaHVtYm5haWwgPSBmYWxzZTtcbiAgICAgICAgICByZXR1cm4gX3RoaXMuX3Byb2Nlc3NUaHVtYm5haWxRdWV1ZSgpO1xuICAgICAgICB9O1xuICAgICAgfSkodGhpcykpO1xuICAgIH07XG5cbiAgICBEcm9wem9uZS5wcm90b3R5cGUucmVtb3ZlRmlsZSA9IGZ1bmN0aW9uKGZpbGUpIHtcbiAgICAgIGlmIChmaWxlLnN0YXR1cyA9PT0gRHJvcHpvbmUuVVBMT0FESU5HKSB7XG4gICAgICAgIHRoaXMuY2FuY2VsVXBsb2FkKGZpbGUpO1xuICAgICAgfVxuICAgICAgdGhpcy5maWxlcyA9IHdpdGhvdXQodGhpcy5maWxlcywgZmlsZSk7XG4gICAgICB0aGlzLmVtaXQoXCJyZW1vdmVkZmlsZVwiLCBmaWxlKTtcbiAgICAgIGlmICh0aGlzLmZpbGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gdGhpcy5lbWl0KFwicmVzZXRcIik7XG4gICAgICB9XG4gICAgfTtcblxuICAgIERyb3B6b25lLnByb3RvdHlwZS5yZW1vdmVBbGxGaWxlcyA9IGZ1bmN0aW9uKGNhbmNlbElmTmVjZXNzYXJ5KSB7XG4gICAgICB2YXIgZmlsZSwgX2ksIF9sZW4sIF9yZWY7XG4gICAgICBpZiAoY2FuY2VsSWZOZWNlc3NhcnkgPT0gbnVsbCkge1xuICAgICAgICBjYW5jZWxJZk5lY2Vzc2FyeSA9IGZhbHNlO1xuICAgICAgfVxuICAgICAgX3JlZiA9IHRoaXMuZmlsZXMuc2xpY2UoKTtcbiAgICAgIGZvciAoX2kgPSAwLCBfbGVuID0gX3JlZi5sZW5ndGg7IF9pIDwgX2xlbjsgX2krKykge1xuICAgICAgICBmaWxlID0gX3JlZltfaV07XG4gICAgICAgIGlmIChmaWxlLnN0YXR1cyAhPT0gRHJvcHpvbmUuVVBMT0FESU5HIHx8IGNhbmNlbElmTmVjZXNzYXJ5KSB7XG4gICAgICAgICAgdGhpcy5yZW1vdmVGaWxlKGZpbGUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9O1xuXG4gICAgRHJvcHpvbmUucHJvdG90eXBlLmNyZWF0ZVRodW1ibmFpbCA9IGZ1bmN0aW9uKGZpbGUsIGNhbGxiYWNrKSB7XG4gICAgICB2YXIgZmlsZVJlYWRlcjtcbiAgICAgIGZpbGVSZWFkZXIgPSBuZXcgRmlsZVJlYWRlcjtcbiAgICAgIGZpbGVSZWFkZXIub25sb2FkID0gKGZ1bmN0aW9uKF90aGlzKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgICBpZiAoZmlsZS50eXBlID09PSBcImltYWdlL3N2Zyt4bWxcIikge1xuICAgICAgICAgICAgX3RoaXMuZW1pdChcInRodW1ibmFpbFwiLCBmaWxlLCBmaWxlUmVhZGVyLnJlc3VsdCk7XG4gICAgICAgICAgICBpZiAoY2FsbGJhY2sgIT0gbnVsbCkge1xuICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gX3RoaXMuY3JlYXRlVGh1bWJuYWlsRnJvbVVybChmaWxlLCBmaWxlUmVhZGVyLnJlc3VsdCwgY2FsbGJhY2spO1xuICAgICAgICB9O1xuICAgICAgfSkodGhpcyk7XG4gICAgICByZXR1cm4gZmlsZVJlYWRlci5yZWFkQXNEYXRhVVJMKGZpbGUpO1xuICAgIH07XG5cbiAgICBEcm9wem9uZS5wcm90b3R5cGUuY3JlYXRlVGh1bWJuYWlsRnJvbVVybCA9IGZ1bmN0aW9uKGZpbGUsIGltYWdlVXJsLCBjYWxsYmFjaywgY3Jvc3NPcmlnaW4pIHtcbiAgICAgIHZhciBpbWc7XG4gICAgICBpbWcgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaW1nXCIpO1xuICAgICAgaWYgKGNyb3NzT3JpZ2luKSB7XG4gICAgICAgIGltZy5jcm9zc09yaWdpbiA9IGNyb3NzT3JpZ2luO1xuICAgICAgfVxuICAgICAgaW1nLm9ubG9hZCA9IChmdW5jdGlvbihfdGhpcykge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgdmFyIGNhbnZhcywgY3R4LCByZXNpemVJbmZvLCB0aHVtYm5haWwsIF9yZWYsIF9yZWYxLCBfcmVmMiwgX3JlZjM7XG4gICAgICAgICAgZmlsZS53aWR0aCA9IGltZy53aWR0aDtcbiAgICAgICAgICBmaWxlLmhlaWdodCA9IGltZy5oZWlnaHQ7XG4gICAgICAgICAgcmVzaXplSW5mbyA9IF90aGlzLm9wdGlvbnMucmVzaXplLmNhbGwoX3RoaXMsIGZpbGUpO1xuICAgICAgICAgIGlmIChyZXNpemVJbmZvLnRyZ1dpZHRoID09IG51bGwpIHtcbiAgICAgICAgICAgIHJlc2l6ZUluZm8udHJnV2lkdGggPSByZXNpemVJbmZvLm9wdFdpZHRoO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAocmVzaXplSW5mby50cmdIZWlnaHQgPT0gbnVsbCkge1xuICAgICAgICAgICAgcmVzaXplSW5mby50cmdIZWlnaHQgPSByZXNpemVJbmZvLm9wdEhlaWdodDtcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImNhbnZhc1wiKTtcbiAgICAgICAgICBjdHggPSBjYW52YXMuZ2V0Q29udGV4dChcIjJkXCIpO1xuICAgICAgICAgIGNhbnZhcy53aWR0aCA9IHJlc2l6ZUluZm8udHJnV2lkdGg7XG4gICAgICAgICAgY2FudmFzLmhlaWdodCA9IHJlc2l6ZUluZm8udHJnSGVpZ2h0O1xuICAgICAgICAgIGRyYXdJbWFnZUlPU0ZpeChjdHgsIGltZywgKF9yZWYgPSByZXNpemVJbmZvLnNyY1gpICE9IG51bGwgPyBfcmVmIDogMCwgKF9yZWYxID0gcmVzaXplSW5mby5zcmNZKSAhPSBudWxsID8gX3JlZjEgOiAwLCByZXNpemVJbmZvLnNyY1dpZHRoLCByZXNpemVJbmZvLnNyY0hlaWdodCwgKF9yZWYyID0gcmVzaXplSW5mby50cmdYKSAhPSBudWxsID8gX3JlZjIgOiAwLCAoX3JlZjMgPSByZXNpemVJbmZvLnRyZ1kpICE9IG51bGwgPyBfcmVmMyA6IDAsIHJlc2l6ZUluZm8udHJnV2lkdGgsIHJlc2l6ZUluZm8udHJnSGVpZ2h0KTtcbiAgICAgICAgICB0aHVtYm5haWwgPSBjYW52YXMudG9EYXRhVVJMKFwiaW1hZ2UvcG5nXCIpO1xuICAgICAgICAgIF90aGlzLmVtaXQoXCJ0aHVtYm5haWxcIiwgZmlsZSwgdGh1bWJuYWlsKTtcbiAgICAgICAgICBpZiAoY2FsbGJhY2sgIT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgfSkodGhpcyk7XG4gICAgICBpZiAoY2FsbGJhY2sgIT0gbnVsbCkge1xuICAgICAgICBpbWcub25lcnJvciA9IGNhbGxiYWNrO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGltZy5zcmMgPSBpbWFnZVVybDtcbiAgICB9O1xuXG4gICAgRHJvcHpvbmUucHJvdG90eXBlLnByb2Nlc3NRdWV1ZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIGksIHBhcmFsbGVsVXBsb2FkcywgcHJvY2Vzc2luZ0xlbmd0aCwgcXVldWVkRmlsZXM7XG4gICAgICBwYXJhbGxlbFVwbG9hZHMgPSB0aGlzLm9wdGlvbnMucGFyYWxsZWxVcGxvYWRzO1xuICAgICAgcHJvY2Vzc2luZ0xlbmd0aCA9IHRoaXMuZ2V0VXBsb2FkaW5nRmlsZXMoKS5sZW5ndGg7XG4gICAgICBpID0gcHJvY2Vzc2luZ0xlbmd0aDtcbiAgICAgIGlmIChwcm9jZXNzaW5nTGVuZ3RoID49IHBhcmFsbGVsVXBsb2Fkcykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBxdWV1ZWRGaWxlcyA9IHRoaXMuZ2V0UXVldWVkRmlsZXMoKTtcbiAgICAgIGlmICghKHF1ZXVlZEZpbGVzLmxlbmd0aCA+IDApKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLm9wdGlvbnMudXBsb2FkTXVsdGlwbGUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc0ZpbGVzKHF1ZXVlZEZpbGVzLnNsaWNlKDAsIHBhcmFsbGVsVXBsb2FkcyAtIHByb2Nlc3NpbmdMZW5ndGgpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHdoaWxlIChpIDwgcGFyYWxsZWxVcGxvYWRzKSB7XG4gICAgICAgICAgaWYgKCFxdWV1ZWRGaWxlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5wcm9jZXNzRmlsZShxdWV1ZWRGaWxlcy5zaGlmdCgpKTtcbiAgICAgICAgICBpKys7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuXG4gICAgRHJvcHpvbmUucHJvdG90eXBlLnByb2Nlc3NGaWxlID0gZnVuY3Rpb24oZmlsZSkge1xuICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc0ZpbGVzKFtmaWxlXSk7XG4gICAgfTtcblxuICAgIERyb3B6b25lLnByb3RvdHlwZS5wcm9jZXNzRmlsZXMgPSBmdW5jdGlvbihmaWxlcykge1xuICAgICAgdmFyIGZpbGUsIF9pLCBfbGVuO1xuICAgICAgZm9yIChfaSA9IDAsIF9sZW4gPSBmaWxlcy5sZW5ndGg7IF9pIDwgX2xlbjsgX2krKykge1xuICAgICAgICBmaWxlID0gZmlsZXNbX2ldO1xuICAgICAgICBmaWxlLnByb2Nlc3NpbmcgPSB0cnVlO1xuICAgICAgICBmaWxlLnN0YXR1cyA9IERyb3B6b25lLlVQTE9BRElORztcbiAgICAgICAgdGhpcy5lbWl0KFwicHJvY2Vzc2luZ1wiLCBmaWxlKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLm9wdGlvbnMudXBsb2FkTXVsdGlwbGUpIHtcbiAgICAgICAgdGhpcy5lbWl0KFwicHJvY2Vzc2luZ211bHRpcGxlXCIsIGZpbGVzKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLnVwbG9hZEZpbGVzKGZpbGVzKTtcbiAgICB9O1xuXG4gICAgRHJvcHpvbmUucHJvdG90eXBlLl9nZXRGaWxlc1dpdGhYaHIgPSBmdW5jdGlvbih4aHIpIHtcbiAgICAgIHZhciBmaWxlLCBmaWxlcztcbiAgICAgIHJldHVybiBmaWxlcyA9IChmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIF9pLCBfbGVuLCBfcmVmLCBfcmVzdWx0cztcbiAgICAgICAgX3JlZiA9IHRoaXMuZmlsZXM7XG4gICAgICAgIF9yZXN1bHRzID0gW107XG4gICAgICAgIGZvciAoX2kgPSAwLCBfbGVuID0gX3JlZi5sZW5ndGg7IF9pIDwgX2xlbjsgX2krKykge1xuICAgICAgICAgIGZpbGUgPSBfcmVmW19pXTtcbiAgICAgICAgICBpZiAoZmlsZS54aHIgPT09IHhocikge1xuICAgICAgICAgICAgX3Jlc3VsdHMucHVzaChmaWxlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIF9yZXN1bHRzO1xuICAgICAgfSkuY2FsbCh0aGlzKTtcbiAgICB9O1xuXG4gICAgRHJvcHpvbmUucHJvdG90eXBlLmNhbmNlbFVwbG9hZCA9IGZ1bmN0aW9uKGZpbGUpIHtcbiAgICAgIHZhciBncm91cGVkRmlsZSwgZ3JvdXBlZEZpbGVzLCBfaSwgX2osIF9sZW4sIF9sZW4xLCBfcmVmO1xuICAgICAgaWYgKGZpbGUuc3RhdHVzID09PSBEcm9wem9uZS5VUExPQURJTkcpIHtcbiAgICAgICAgZ3JvdXBlZEZpbGVzID0gdGhpcy5fZ2V0RmlsZXNXaXRoWGhyKGZpbGUueGhyKTtcbiAgICAgICAgZm9yIChfaSA9IDAsIF9sZW4gPSBncm91cGVkRmlsZXMubGVuZ3RoOyBfaSA8IF9sZW47IF9pKyspIHtcbiAgICAgICAgICBncm91cGVkRmlsZSA9IGdyb3VwZWRGaWxlc1tfaV07XG4gICAgICAgICAgZ3JvdXBlZEZpbGUuc3RhdHVzID0gRHJvcHpvbmUuQ0FOQ0VMRUQ7XG4gICAgICAgIH1cbiAgICAgICAgZmlsZS54aHIuYWJvcnQoKTtcbiAgICAgICAgZm9yIChfaiA9IDAsIF9sZW4xID0gZ3JvdXBlZEZpbGVzLmxlbmd0aDsgX2ogPCBfbGVuMTsgX2orKykge1xuICAgICAgICAgIGdyb3VwZWRGaWxlID0gZ3JvdXBlZEZpbGVzW19qXTtcbiAgICAgICAgICB0aGlzLmVtaXQoXCJjYW5jZWxlZFwiLCBncm91cGVkRmlsZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy51cGxvYWRNdWx0aXBsZSkge1xuICAgICAgICAgIHRoaXMuZW1pdChcImNhbmNlbGVkbXVsdGlwbGVcIiwgZ3JvdXBlZEZpbGVzKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICgoX3JlZiA9IGZpbGUuc3RhdHVzKSA9PT0gRHJvcHpvbmUuQURERUQgfHwgX3JlZiA9PT0gRHJvcHpvbmUuUVVFVUVEKSB7XG4gICAgICAgIGZpbGUuc3RhdHVzID0gRHJvcHpvbmUuQ0FOQ0VMRUQ7XG4gICAgICAgIHRoaXMuZW1pdChcImNhbmNlbGVkXCIsIGZpbGUpO1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zLnVwbG9hZE11bHRpcGxlKSB7XG4gICAgICAgICAgdGhpcy5lbWl0KFwiY2FuY2VsZWRtdWx0aXBsZVwiLCBbZmlsZV0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5vcHRpb25zLmF1dG9Qcm9jZXNzUXVldWUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc1F1ZXVlKCk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIHJlc29sdmVPcHRpb24gPSBmdW5jdGlvbigpIHtcbiAgICAgIHZhciBhcmdzLCBvcHRpb247XG4gICAgICBvcHRpb24gPSBhcmd1bWVudHNbMF0sIGFyZ3MgPSAyIDw9IGFyZ3VtZW50cy5sZW5ndGggPyBfX3NsaWNlLmNhbGwoYXJndW1lbnRzLCAxKSA6IFtdO1xuICAgICAgaWYgKHR5cGVvZiBvcHRpb24gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcmV0dXJuIG9wdGlvbi5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBvcHRpb247XG4gICAgfTtcblxuICAgIERyb3B6b25lLnByb3RvdHlwZS51cGxvYWRGaWxlID0gZnVuY3Rpb24oZmlsZSkge1xuICAgICAgcmV0dXJuIHRoaXMudXBsb2FkRmlsZXMoW2ZpbGVdKTtcbiAgICB9O1xuXG4gICAgRHJvcHpvbmUucHJvdG90eXBlLnVwbG9hZEZpbGVzID0gZnVuY3Rpb24oZmlsZXMpIHtcbiAgICAgIHZhciBmaWxlLCBmb3JtRGF0YSwgaGFuZGxlRXJyb3IsIGhlYWRlck5hbWUsIGhlYWRlclZhbHVlLCBoZWFkZXJzLCBpLCBpbnB1dCwgaW5wdXROYW1lLCBpbnB1dFR5cGUsIGtleSwgbWV0aG9kLCBvcHRpb24sIHByb2dyZXNzT2JqLCByZXNwb25zZSwgdXBkYXRlUHJvZ3Jlc3MsIHVybCwgdmFsdWUsIHhociwgX2ksIF9qLCBfaywgX2wsIF9sZW4sIF9sZW4xLCBfbGVuMiwgX2xlbjMsIF9tLCBfcmVmLCBfcmVmMSwgX3JlZjIsIF9yZWYzLCBfcmVmNCwgX3JlZjU7XG4gICAgICB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcbiAgICAgIGZvciAoX2kgPSAwLCBfbGVuID0gZmlsZXMubGVuZ3RoOyBfaSA8IF9sZW47IF9pKyspIHtcbiAgICAgICAgZmlsZSA9IGZpbGVzW19pXTtcbiAgICAgICAgZmlsZS54aHIgPSB4aHI7XG4gICAgICB9XG4gICAgICBtZXRob2QgPSByZXNvbHZlT3B0aW9uKHRoaXMub3B0aW9ucy5tZXRob2QsIGZpbGVzKTtcbiAgICAgIHVybCA9IHJlc29sdmVPcHRpb24odGhpcy5vcHRpb25zLnVybCwgZmlsZXMpO1xuICAgICAgeGhyLm9wZW4obWV0aG9kLCB1cmwsIHRydWUpO1xuICAgICAgeGhyLndpdGhDcmVkZW50aWFscyA9ICEhdGhpcy5vcHRpb25zLndpdGhDcmVkZW50aWFscztcbiAgICAgIHJlc3BvbnNlID0gbnVsbDtcbiAgICAgIGhhbmRsZUVycm9yID0gKGZ1bmN0aW9uKF90aGlzKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgICB2YXIgX2osIF9sZW4xLCBfcmVzdWx0cztcbiAgICAgICAgICBfcmVzdWx0cyA9IFtdO1xuICAgICAgICAgIGZvciAoX2ogPSAwLCBfbGVuMSA9IGZpbGVzLmxlbmd0aDsgX2ogPCBfbGVuMTsgX2orKykge1xuICAgICAgICAgICAgZmlsZSA9IGZpbGVzW19qXTtcbiAgICAgICAgICAgIF9yZXN1bHRzLnB1c2goX3RoaXMuX2Vycm9yUHJvY2Vzc2luZyhmaWxlcywgcmVzcG9uc2UgfHwgX3RoaXMub3B0aW9ucy5kaWN0UmVzcG9uc2VFcnJvci5yZXBsYWNlKFwie3tzdGF0dXNDb2RlfX1cIiwgeGhyLnN0YXR1cyksIHhocikpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gX3Jlc3VsdHM7XG4gICAgICAgIH07XG4gICAgICB9KSh0aGlzKTtcbiAgICAgIHVwZGF0ZVByb2dyZXNzID0gKGZ1bmN0aW9uKF90aGlzKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgdmFyIGFsbEZpbGVzRmluaXNoZWQsIHByb2dyZXNzLCBfaiwgX2ssIF9sLCBfbGVuMSwgX2xlbjIsIF9sZW4zLCBfcmVzdWx0cztcbiAgICAgICAgICBpZiAoZSAhPSBudWxsKSB7XG4gICAgICAgICAgICBwcm9ncmVzcyA9IDEwMCAqIGUubG9hZGVkIC8gZS50b3RhbDtcbiAgICAgICAgICAgIGZvciAoX2ogPSAwLCBfbGVuMSA9IGZpbGVzLmxlbmd0aDsgX2ogPCBfbGVuMTsgX2orKykge1xuICAgICAgICAgICAgICBmaWxlID0gZmlsZXNbX2pdO1xuICAgICAgICAgICAgICBmaWxlLnVwbG9hZCA9IHtcbiAgICAgICAgICAgICAgICBwcm9ncmVzczogcHJvZ3Jlc3MsXG4gICAgICAgICAgICAgICAgdG90YWw6IGUudG90YWwsXG4gICAgICAgICAgICAgICAgYnl0ZXNTZW50OiBlLmxvYWRlZFxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBhbGxGaWxlc0ZpbmlzaGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIHByb2dyZXNzID0gMTAwO1xuICAgICAgICAgICAgZm9yIChfayA9IDAsIF9sZW4yID0gZmlsZXMubGVuZ3RoOyBfayA8IF9sZW4yOyBfaysrKSB7XG4gICAgICAgICAgICAgIGZpbGUgPSBmaWxlc1tfa107XG4gICAgICAgICAgICAgIGlmICghKGZpbGUudXBsb2FkLnByb2dyZXNzID09PSAxMDAgJiYgZmlsZS51cGxvYWQuYnl0ZXNTZW50ID09PSBmaWxlLnVwbG9hZC50b3RhbCkpIHtcbiAgICAgICAgICAgICAgICBhbGxGaWxlc0ZpbmlzaGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgZmlsZS51cGxvYWQucHJvZ3Jlc3MgPSBwcm9ncmVzcztcbiAgICAgICAgICAgICAgZmlsZS51cGxvYWQuYnl0ZXNTZW50ID0gZmlsZS51cGxvYWQudG90YWw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoYWxsRmlsZXNGaW5pc2hlZCkge1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIF9yZXN1bHRzID0gW107XG4gICAgICAgICAgZm9yIChfbCA9IDAsIF9sZW4zID0gZmlsZXMubGVuZ3RoOyBfbCA8IF9sZW4zOyBfbCsrKSB7XG4gICAgICAgICAgICBmaWxlID0gZmlsZXNbX2xdO1xuICAgICAgICAgICAgX3Jlc3VsdHMucHVzaChfdGhpcy5lbWl0KFwidXBsb2FkcHJvZ3Jlc3NcIiwgZmlsZSwgcHJvZ3Jlc3MsIGZpbGUudXBsb2FkLmJ5dGVzU2VudCkpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gX3Jlc3VsdHM7XG4gICAgICAgIH07XG4gICAgICB9KSh0aGlzKTtcbiAgICAgIHhoci5vbmxvYWQgPSAoZnVuY3Rpb24oX3RoaXMpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICB2YXIgX3JlZjtcbiAgICAgICAgICBpZiAoZmlsZXNbMF0uc3RhdHVzID09PSBEcm9wem9uZS5DQU5DRUxFRCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoeGhyLnJlYWR5U3RhdGUgIT09IDQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmVzcG9uc2UgPSB4aHIucmVzcG9uc2VUZXh0O1xuICAgICAgICAgIGlmICh4aHIuZ2V0UmVzcG9uc2VIZWFkZXIoXCJjb250ZW50LXR5cGVcIikgJiYgfnhoci5nZXRSZXNwb25zZUhlYWRlcihcImNvbnRlbnQtdHlwZVwiKS5pbmRleE9mKFwiYXBwbGljYXRpb24vanNvblwiKSkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgcmVzcG9uc2UgPSBKU09OLnBhcnNlKHJlc3BvbnNlKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKF9lcnJvcikge1xuICAgICAgICAgICAgICBlID0gX2Vycm9yO1xuICAgICAgICAgICAgICByZXNwb25zZSA9IFwiSW52YWxpZCBKU09OIHJlc3BvbnNlIGZyb20gc2VydmVyLlwiO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICB1cGRhdGVQcm9ncmVzcygpO1xuICAgICAgICAgIGlmICghKCgyMDAgPD0gKF9yZWYgPSB4aHIuc3RhdHVzKSAmJiBfcmVmIDwgMzAwKSkpIHtcbiAgICAgICAgICAgIHJldHVybiBoYW5kbGVFcnJvcigpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gX3RoaXMuX2ZpbmlzaGVkKGZpbGVzLCByZXNwb25zZSwgZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgfSkodGhpcyk7XG4gICAgICB4aHIub25lcnJvciA9IChmdW5jdGlvbihfdGhpcykge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgaWYgKGZpbGVzWzBdLnN0YXR1cyA9PT0gRHJvcHpvbmUuQ0FOQ0VMRUQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGhhbmRsZUVycm9yKCk7XG4gICAgICAgIH07XG4gICAgICB9KSh0aGlzKTtcbiAgICAgIHByb2dyZXNzT2JqID0gKF9yZWYgPSB4aHIudXBsb2FkKSAhPSBudWxsID8gX3JlZiA6IHhocjtcbiAgICAgIHByb2dyZXNzT2JqLm9ucHJvZ3Jlc3MgPSB1cGRhdGVQcm9ncmVzcztcbiAgICAgIGhlYWRlcnMgPSB7XG4gICAgICAgIFwiQWNjZXB0XCI6IFwiYXBwbGljYXRpb24vanNvblwiLFxuICAgICAgICBcIkNhY2hlLUNvbnRyb2xcIjogXCJuby1jYWNoZVwiLFxuICAgICAgICBcIlgtUmVxdWVzdGVkLVdpdGhcIjogXCJYTUxIdHRwUmVxdWVzdFwiXG4gICAgICB9O1xuICAgICAgaWYgKHRoaXMub3B0aW9ucy5oZWFkZXJzKSB7XG4gICAgICAgIGV4dGVuZChoZWFkZXJzLCB0aGlzLm9wdGlvbnMuaGVhZGVycyk7XG4gICAgICB9XG4gICAgICBmb3IgKGhlYWRlck5hbWUgaW4gaGVhZGVycykge1xuICAgICAgICBoZWFkZXJWYWx1ZSA9IGhlYWRlcnNbaGVhZGVyTmFtZV07XG4gICAgICAgIGlmIChoZWFkZXJWYWx1ZSkge1xuICAgICAgICAgIHhoci5zZXRSZXF1ZXN0SGVhZGVyKGhlYWRlck5hbWUsIGhlYWRlclZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMucGFyYW1zKSB7XG4gICAgICAgIF9yZWYxID0gdGhpcy5vcHRpb25zLnBhcmFtcztcbiAgICAgICAgZm9yIChrZXkgaW4gX3JlZjEpIHtcbiAgICAgICAgICB2YWx1ZSA9IF9yZWYxW2tleV07XG4gICAgICAgICAgZm9ybURhdGEuYXBwZW5kKGtleSwgdmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBmb3IgKF9qID0gMCwgX2xlbjEgPSBmaWxlcy5sZW5ndGg7IF9qIDwgX2xlbjE7IF9qKyspIHtcbiAgICAgICAgZmlsZSA9IGZpbGVzW19qXTtcbiAgICAgICAgdGhpcy5lbWl0KFwic2VuZGluZ1wiLCBmaWxlLCB4aHIsIGZvcm1EYXRhKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLm9wdGlvbnMudXBsb2FkTXVsdGlwbGUpIHtcbiAgICAgICAgdGhpcy5lbWl0KFwic2VuZGluZ211bHRpcGxlXCIsIGZpbGVzLCB4aHIsIGZvcm1EYXRhKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmVsZW1lbnQudGFnTmFtZSA9PT0gXCJGT1JNXCIpIHtcbiAgICAgICAgX3JlZjIgPSB0aGlzLmVsZW1lbnQucXVlcnlTZWxlY3RvckFsbChcImlucHV0LCB0ZXh0YXJlYSwgc2VsZWN0LCBidXR0b25cIik7XG4gICAgICAgIGZvciAoX2sgPSAwLCBfbGVuMiA9IF9yZWYyLmxlbmd0aDsgX2sgPCBfbGVuMjsgX2srKykge1xuICAgICAgICAgIGlucHV0ID0gX3JlZjJbX2tdO1xuICAgICAgICAgIGlucHV0TmFtZSA9IGlucHV0LmdldEF0dHJpYnV0ZShcIm5hbWVcIik7XG4gICAgICAgICAgaW5wdXRUeXBlID0gaW5wdXQuZ2V0QXR0cmlidXRlKFwidHlwZVwiKTtcbiAgICAgICAgICBpZiAoaW5wdXQudGFnTmFtZSA9PT0gXCJTRUxFQ1RcIiAmJiBpbnB1dC5oYXNBdHRyaWJ1dGUoXCJtdWx0aXBsZVwiKSkge1xuICAgICAgICAgICAgX3JlZjMgPSBpbnB1dC5vcHRpb25zO1xuICAgICAgICAgICAgZm9yIChfbCA9IDAsIF9sZW4zID0gX3JlZjMubGVuZ3RoOyBfbCA8IF9sZW4zOyBfbCsrKSB7XG4gICAgICAgICAgICAgIG9wdGlvbiA9IF9yZWYzW19sXTtcbiAgICAgICAgICAgICAgaWYgKG9wdGlvbi5zZWxlY3RlZCkge1xuICAgICAgICAgICAgICAgIGZvcm1EYXRhLmFwcGVuZChpbnB1dE5hbWUsIG9wdGlvbi52YWx1ZSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2UgaWYgKCFpbnB1dFR5cGUgfHwgKChfcmVmNCA9IGlucHV0VHlwZS50b0xvd2VyQ2FzZSgpKSAhPT0gXCJjaGVja2JveFwiICYmIF9yZWY0ICE9PSBcInJhZGlvXCIpIHx8IGlucHV0LmNoZWNrZWQpIHtcbiAgICAgICAgICAgIGZvcm1EYXRhLmFwcGVuZChpbnB1dE5hbWUsIGlucHV0LnZhbHVlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGZvciAoaSA9IF9tID0gMCwgX3JlZjUgPSBmaWxlcy5sZW5ndGggLSAxOyAwIDw9IF9yZWY1ID8gX20gPD0gX3JlZjUgOiBfbSA+PSBfcmVmNTsgaSA9IDAgPD0gX3JlZjUgPyArK19tIDogLS1fbSkge1xuICAgICAgICBmb3JtRGF0YS5hcHBlbmQodGhpcy5fZ2V0UGFyYW1OYW1lKGkpLCBmaWxlc1tpXSwgZmlsZXNbaV0ubmFtZSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5zdWJtaXRSZXF1ZXN0KHhociwgZm9ybURhdGEsIGZpbGVzKTtcbiAgICB9O1xuXG4gICAgRHJvcHpvbmUucHJvdG90eXBlLnN1Ym1pdFJlcXVlc3QgPSBmdW5jdGlvbih4aHIsIGZvcm1EYXRhLCBmaWxlcykge1xuICAgICAgcmV0dXJuIHhoci5zZW5kKGZvcm1EYXRhKTtcbiAgICB9O1xuXG4gICAgRHJvcHpvbmUucHJvdG90eXBlLl9maW5pc2hlZCA9IGZ1bmN0aW9uKGZpbGVzLCByZXNwb25zZVRleHQsIGUpIHtcbiAgICAgIHZhciBmaWxlLCBfaSwgX2xlbjtcbiAgICAgIGZvciAoX2kgPSAwLCBfbGVuID0gZmlsZXMubGVuZ3RoOyBfaSA8IF9sZW47IF9pKyspIHtcbiAgICAgICAgZmlsZSA9IGZpbGVzW19pXTtcbiAgICAgICAgZmlsZS5zdGF0dXMgPSBEcm9wem9uZS5TVUNDRVNTO1xuICAgICAgICB0aGlzLmVtaXQoXCJzdWNjZXNzXCIsIGZpbGUsIHJlc3BvbnNlVGV4dCwgZSk7XG4gICAgICAgIHRoaXMuZW1pdChcImNvbXBsZXRlXCIsIGZpbGUpO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMub3B0aW9ucy51cGxvYWRNdWx0aXBsZSkge1xuICAgICAgICB0aGlzLmVtaXQoXCJzdWNjZXNzbXVsdGlwbGVcIiwgZmlsZXMsIHJlc3BvbnNlVGV4dCwgZSk7XG4gICAgICAgIHRoaXMuZW1pdChcImNvbXBsZXRlbXVsdGlwbGVcIiwgZmlsZXMpO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMub3B0aW9ucy5hdXRvUHJvY2Vzc1F1ZXVlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NRdWV1ZSgpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBEcm9wem9uZS5wcm90b3R5cGUuX2Vycm9yUHJvY2Vzc2luZyA9IGZ1bmN0aW9uKGZpbGVzLCBtZXNzYWdlLCB4aHIpIHtcbiAgICAgIHZhciBmaWxlLCBfaSwgX2xlbjtcbiAgICAgIGZvciAoX2kgPSAwLCBfbGVuID0gZmlsZXMubGVuZ3RoOyBfaSA8IF9sZW47IF9pKyspIHtcbiAgICAgICAgZmlsZSA9IGZpbGVzW19pXTtcbiAgICAgICAgZmlsZS5zdGF0dXMgPSBEcm9wem9uZS5FUlJPUjtcbiAgICAgICAgdGhpcy5lbWl0KFwiZXJyb3JcIiwgZmlsZSwgbWVzc2FnZSwgeGhyKTtcbiAgICAgICAgdGhpcy5lbWl0KFwiY29tcGxldGVcIiwgZmlsZSk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5vcHRpb25zLnVwbG9hZE11bHRpcGxlKSB7XG4gICAgICAgIHRoaXMuZW1pdChcImVycm9ybXVsdGlwbGVcIiwgZmlsZXMsIG1lc3NhZ2UsIHhocik7XG4gICAgICAgIHRoaXMuZW1pdChcImNvbXBsZXRlbXVsdGlwbGVcIiwgZmlsZXMpO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMub3B0aW9ucy5hdXRvUHJvY2Vzc1F1ZXVlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NRdWV1ZSgpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICByZXR1cm4gRHJvcHpvbmU7XG5cbiAgfSkoRW1pdHRlcik7XG5cbiAgRHJvcHpvbmUudmVyc2lvbiA9IFwiNC4yLjBcIjtcblxuICBEcm9wem9uZS5vcHRpb25zID0ge307XG5cbiAgRHJvcHpvbmUub3B0aW9uc0ZvckVsZW1lbnQgPSBmdW5jdGlvbihlbGVtZW50KSB7XG4gICAgaWYgKGVsZW1lbnQuZ2V0QXR0cmlidXRlKFwiaWRcIikpIHtcbiAgICAgIHJldHVybiBEcm9wem9uZS5vcHRpb25zW2NhbWVsaXplKGVsZW1lbnQuZ2V0QXR0cmlidXRlKFwiaWRcIikpXTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHZvaWQgMDtcbiAgICB9XG4gIH07XG5cbiAgRHJvcHpvbmUuaW5zdGFuY2VzID0gW107XG5cbiAgRHJvcHpvbmUuZm9yRWxlbWVudCA9IGZ1bmN0aW9uKGVsZW1lbnQpIHtcbiAgICBpZiAodHlwZW9mIGVsZW1lbnQgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIGVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGVsZW1lbnQpO1xuICAgIH1cbiAgICBpZiAoKGVsZW1lbnQgIT0gbnVsbCA/IGVsZW1lbnQuZHJvcHpvbmUgOiB2b2lkIDApID09IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIERyb3B6b25lIGZvdW5kIGZvciBnaXZlbiBlbGVtZW50LiBUaGlzIGlzIHByb2JhYmx5IGJlY2F1c2UgeW91J3JlIHRyeWluZyB0byBhY2Nlc3MgaXQgYmVmb3JlIERyb3B6b25lIGhhZCB0aGUgdGltZSB0byBpbml0aWFsaXplLiBVc2UgdGhlIGBpbml0YCBvcHRpb24gdG8gc2V0dXAgYW55IGFkZGl0aW9uYWwgb2JzZXJ2ZXJzIG9uIHlvdXIgRHJvcHpvbmUuXCIpO1xuICAgIH1cbiAgICByZXR1cm4gZWxlbWVudC5kcm9wem9uZTtcbiAgfTtcblxuICBEcm9wem9uZS5hdXRvRGlzY292ZXIgPSB0cnVlO1xuXG4gIERyb3B6b25lLmRpc2NvdmVyID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIGNoZWNrRWxlbWVudHMsIGRyb3B6b25lLCBkcm9wem9uZXMsIF9pLCBfbGVuLCBfcmVzdWx0cztcbiAgICBpZiAoZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCkge1xuICAgICAgZHJvcHpvbmVzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcIi5kcm9wem9uZVwiKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZHJvcHpvbmVzID0gW107XG4gICAgICBjaGVja0VsZW1lbnRzID0gZnVuY3Rpb24oZWxlbWVudHMpIHtcbiAgICAgICAgdmFyIGVsLCBfaSwgX2xlbiwgX3Jlc3VsdHM7XG4gICAgICAgIF9yZXN1bHRzID0gW107XG4gICAgICAgIGZvciAoX2kgPSAwLCBfbGVuID0gZWxlbWVudHMubGVuZ3RoOyBfaSA8IF9sZW47IF9pKyspIHtcbiAgICAgICAgICBlbCA9IGVsZW1lbnRzW19pXTtcbiAgICAgICAgICBpZiAoLyhefCApZHJvcHpvbmUoJHwgKS8udGVzdChlbC5jbGFzc05hbWUpKSB7XG4gICAgICAgICAgICBfcmVzdWx0cy5wdXNoKGRyb3B6b25lcy5wdXNoKGVsKSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIF9yZXN1bHRzLnB1c2godm9pZCAwKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIF9yZXN1bHRzO1xuICAgICAgfTtcbiAgICAgIGNoZWNrRWxlbWVudHMoZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJkaXZcIikpO1xuICAgICAgY2hlY2tFbGVtZW50cyhkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZShcImZvcm1cIikpO1xuICAgIH1cbiAgICBfcmVzdWx0cyA9IFtdO1xuICAgIGZvciAoX2kgPSAwLCBfbGVuID0gZHJvcHpvbmVzLmxlbmd0aDsgX2kgPCBfbGVuOyBfaSsrKSB7XG4gICAgICBkcm9wem9uZSA9IGRyb3B6b25lc1tfaV07XG4gICAgICBpZiAoRHJvcHpvbmUub3B0aW9uc0ZvckVsZW1lbnQoZHJvcHpvbmUpICE9PSBmYWxzZSkge1xuICAgICAgICBfcmVzdWx0cy5wdXNoKG5ldyBEcm9wem9uZShkcm9wem9uZSkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgX3Jlc3VsdHMucHVzaCh2b2lkIDApO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gX3Jlc3VsdHM7XG4gIH07XG5cbiAgRHJvcHpvbmUuYmxhY2tsaXN0ZWRCcm93c2VycyA9IFsvb3BlcmEuKk1hY2ludG9zaC4qdmVyc2lvblxcLzEyL2ldO1xuXG4gIERyb3B6b25lLmlzQnJvd3NlclN1cHBvcnRlZCA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBjYXBhYmxlQnJvd3NlciwgcmVnZXgsIF9pLCBfbGVuLCBfcmVmO1xuICAgIGNhcGFibGVCcm93c2VyID0gdHJ1ZTtcbiAgICBpZiAod2luZG93LkZpbGUgJiYgd2luZG93LkZpbGVSZWFkZXIgJiYgd2luZG93LkZpbGVMaXN0ICYmIHdpbmRvdy5CbG9iICYmIHdpbmRvdy5Gb3JtRGF0YSAmJiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKSB7XG4gICAgICBpZiAoIShcImNsYXNzTGlzdFwiIGluIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJhXCIpKSkge1xuICAgICAgICBjYXBhYmxlQnJvd3NlciA9IGZhbHNlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgX3JlZiA9IERyb3B6b25lLmJsYWNrbGlzdGVkQnJvd3NlcnM7XG4gICAgICAgIGZvciAoX2kgPSAwLCBfbGVuID0gX3JlZi5sZW5ndGg7IF9pIDwgX2xlbjsgX2krKykge1xuICAgICAgICAgIHJlZ2V4ID0gX3JlZltfaV07XG4gICAgICAgICAgaWYgKHJlZ2V4LnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkpIHtcbiAgICAgICAgICAgIGNhcGFibGVCcm93c2VyID0gZmFsc2U7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY2FwYWJsZUJyb3dzZXIgPSBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIGNhcGFibGVCcm93c2VyO1xuICB9O1xuXG4gIHdpdGhvdXQgPSBmdW5jdGlvbihsaXN0LCByZWplY3RlZEl0ZW0pIHtcbiAgICB2YXIgaXRlbSwgX2ksIF9sZW4sIF9yZXN1bHRzO1xuICAgIF9yZXN1bHRzID0gW107XG4gICAgZm9yIChfaSA9IDAsIF9sZW4gPSBsaXN0Lmxlbmd0aDsgX2kgPCBfbGVuOyBfaSsrKSB7XG4gICAgICBpdGVtID0gbGlzdFtfaV07XG4gICAgICBpZiAoaXRlbSAhPT0gcmVqZWN0ZWRJdGVtKSB7XG4gICAgICAgIF9yZXN1bHRzLnB1c2goaXRlbSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBfcmVzdWx0cztcbiAgfTtcblxuICBjYW1lbGl6ZSA9IGZ1bmN0aW9uKHN0cikge1xuICAgIHJldHVybiBzdHIucmVwbGFjZSgvW1xcLV9dKFxcdykvZywgZnVuY3Rpb24obWF0Y2gpIHtcbiAgICAgIHJldHVybiBtYXRjaC5jaGFyQXQoMSkudG9VcHBlckNhc2UoKTtcbiAgICB9KTtcbiAgfTtcblxuICBEcm9wem9uZS5jcmVhdGVFbGVtZW50ID0gZnVuY3Rpb24oc3RyaW5nKSB7XG4gICAgdmFyIGRpdjtcbiAgICBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIGRpdi5pbm5lckhUTUwgPSBzdHJpbmc7XG4gICAgcmV0dXJuIGRpdi5jaGlsZE5vZGVzWzBdO1xuICB9O1xuXG4gIERyb3B6b25lLmVsZW1lbnRJbnNpZGUgPSBmdW5jdGlvbihlbGVtZW50LCBjb250YWluZXIpIHtcbiAgICBpZiAoZWxlbWVudCA9PT0gY29udGFpbmVyKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgd2hpbGUgKGVsZW1lbnQgPSBlbGVtZW50LnBhcmVudE5vZGUpIHtcbiAgICAgIGlmIChlbGVtZW50ID09PSBjb250YWluZXIpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfTtcblxuICBEcm9wem9uZS5nZXRFbGVtZW50ID0gZnVuY3Rpb24oZWwsIG5hbWUpIHtcbiAgICB2YXIgZWxlbWVudDtcbiAgICBpZiAodHlwZW9mIGVsID09PSBcInN0cmluZ1wiKSB7XG4gICAgICBlbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihlbCk7XG4gICAgfSBlbHNlIGlmIChlbC5ub2RlVHlwZSAhPSBudWxsKSB7XG4gICAgICBlbGVtZW50ID0gZWw7XG4gICAgfVxuICAgIGlmIChlbGVtZW50ID09IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgYFwiICsgbmFtZSArIFwiYCBvcHRpb24gcHJvdmlkZWQuIFBsZWFzZSBwcm92aWRlIGEgQ1NTIHNlbGVjdG9yIG9yIGEgcGxhaW4gSFRNTCBlbGVtZW50LlwiKTtcbiAgICB9XG4gICAgcmV0dXJuIGVsZW1lbnQ7XG4gIH07XG5cbiAgRHJvcHpvbmUuZ2V0RWxlbWVudHMgPSBmdW5jdGlvbihlbHMsIG5hbWUpIHtcbiAgICB2YXIgZSwgZWwsIGVsZW1lbnRzLCBfaSwgX2osIF9sZW4sIF9sZW4xLCBfcmVmO1xuICAgIGlmIChlbHMgaW5zdGFuY2VvZiBBcnJheSkge1xuICAgICAgZWxlbWVudHMgPSBbXTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGZvciAoX2kgPSAwLCBfbGVuID0gZWxzLmxlbmd0aDsgX2kgPCBfbGVuOyBfaSsrKSB7XG4gICAgICAgICAgZWwgPSBlbHNbX2ldO1xuICAgICAgICAgIGVsZW1lbnRzLnB1c2godGhpcy5nZXRFbGVtZW50KGVsLCBuYW1lKSk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKF9lcnJvcikge1xuICAgICAgICBlID0gX2Vycm9yO1xuICAgICAgICBlbGVtZW50cyA9IG51bGw7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgZWxzID09PSBcInN0cmluZ1wiKSB7XG4gICAgICBlbGVtZW50cyA9IFtdO1xuICAgICAgX3JlZiA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoZWxzKTtcbiAgICAgIGZvciAoX2ogPSAwLCBfbGVuMSA9IF9yZWYubGVuZ3RoOyBfaiA8IF9sZW4xOyBfaisrKSB7XG4gICAgICAgIGVsID0gX3JlZltfal07XG4gICAgICAgIGVsZW1lbnRzLnB1c2goZWwpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoZWxzLm5vZGVUeXBlICE9IG51bGwpIHtcbiAgICAgIGVsZW1lbnRzID0gW2Vsc107XG4gICAgfVxuICAgIGlmICghKChlbGVtZW50cyAhPSBudWxsKSAmJiBlbGVtZW50cy5sZW5ndGgpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIGBcIiArIG5hbWUgKyBcImAgb3B0aW9uIHByb3ZpZGVkLiBQbGVhc2UgcHJvdmlkZSBhIENTUyBzZWxlY3RvciwgYSBwbGFpbiBIVE1MIGVsZW1lbnQgb3IgYSBsaXN0IG9mIHRob3NlLlwiKTtcbiAgICB9XG4gICAgcmV0dXJuIGVsZW1lbnRzO1xuICB9O1xuXG4gIERyb3B6b25lLmNvbmZpcm0gPSBmdW5jdGlvbihxdWVzdGlvbiwgYWNjZXB0ZWQsIHJlamVjdGVkKSB7XG4gICAgaWYgKHdpbmRvdy5jb25maXJtKHF1ZXN0aW9uKSkge1xuICAgICAgcmV0dXJuIGFjY2VwdGVkKCk7XG4gICAgfSBlbHNlIGlmIChyZWplY3RlZCAhPSBudWxsKSB7XG4gICAgICByZXR1cm4gcmVqZWN0ZWQoKTtcbiAgICB9XG4gIH07XG5cbiAgRHJvcHpvbmUuaXNWYWxpZEZpbGUgPSBmdW5jdGlvbihmaWxlLCBhY2NlcHRlZEZpbGVzKSB7XG4gICAgdmFyIGJhc2VNaW1lVHlwZSwgbWltZVR5cGUsIHZhbGlkVHlwZSwgX2ksIF9sZW47XG4gICAgaWYgKCFhY2NlcHRlZEZpbGVzKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgYWNjZXB0ZWRGaWxlcyA9IGFjY2VwdGVkRmlsZXMuc3BsaXQoXCIsXCIpO1xuICAgIG1pbWVUeXBlID0gZmlsZS50eXBlO1xuICAgIGJhc2VNaW1lVHlwZSA9IG1pbWVUeXBlLnJlcGxhY2UoL1xcLy4qJC8sIFwiXCIpO1xuICAgIGZvciAoX2kgPSAwLCBfbGVuID0gYWNjZXB0ZWRGaWxlcy5sZW5ndGg7IF9pIDwgX2xlbjsgX2krKykge1xuICAgICAgdmFsaWRUeXBlID0gYWNjZXB0ZWRGaWxlc1tfaV07XG4gICAgICB2YWxpZFR5cGUgPSB2YWxpZFR5cGUudHJpbSgpO1xuICAgICAgaWYgKHZhbGlkVHlwZS5jaGFyQXQoMCkgPT09IFwiLlwiKSB7XG4gICAgICAgIGlmIChmaWxlLm5hbWUudG9Mb3dlckNhc2UoKS5pbmRleE9mKHZhbGlkVHlwZS50b0xvd2VyQ2FzZSgpLCBmaWxlLm5hbWUubGVuZ3RoIC0gdmFsaWRUeXBlLmxlbmd0aCkgIT09IC0xKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoL1xcL1xcKiQvLnRlc3QodmFsaWRUeXBlKSkge1xuICAgICAgICBpZiAoYmFzZU1pbWVUeXBlID09PSB2YWxpZFR5cGUucmVwbGFjZSgvXFwvLiokLywgXCJcIikpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKG1pbWVUeXBlID09PSB2YWxpZFR5cGUpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH07XG5cbiAgaWYgKHR5cGVvZiBqUXVlcnkgIT09IFwidW5kZWZpbmVkXCIgJiYgalF1ZXJ5ICE9PSBudWxsKSB7XG4gICAgalF1ZXJ5LmZuLmRyb3B6b25lID0gZnVuY3Rpb24ob3B0aW9ucykge1xuICAgICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBEcm9wem9uZSh0aGlzLCBvcHRpb25zKTtcbiAgICAgIH0pO1xuICAgIH07XG4gIH1cblxuICBpZiAodHlwZW9mIG1vZHVsZSAhPT0gXCJ1bmRlZmluZWRcIiAmJiBtb2R1bGUgIT09IG51bGwpIHtcbiAgICBtb2R1bGUuZXhwb3J0cyA9IERyb3B6b25lO1xuICB9IGVsc2Uge1xuICAgIHdpbmRvdy5Ecm9wem9uZSA9IERyb3B6b25lO1xuICB9XG5cbiAgRHJvcHpvbmUuQURERUQgPSBcImFkZGVkXCI7XG5cbiAgRHJvcHpvbmUuUVVFVUVEID0gXCJxdWV1ZWRcIjtcblxuICBEcm9wem9uZS5BQ0NFUFRFRCA9IERyb3B6b25lLlFVRVVFRDtcblxuICBEcm9wem9uZS5VUExPQURJTkcgPSBcInVwbG9hZGluZ1wiO1xuXG4gIERyb3B6b25lLlBST0NFU1NJTkcgPSBEcm9wem9uZS5VUExPQURJTkc7XG5cbiAgRHJvcHpvbmUuQ0FOQ0VMRUQgPSBcImNhbmNlbGVkXCI7XG5cbiAgRHJvcHpvbmUuRVJST1IgPSBcImVycm9yXCI7XG5cbiAgRHJvcHpvbmUuU1VDQ0VTUyA9IFwic3VjY2Vzc1wiO1xuXG5cbiAgLypcbiAgXG4gIEJ1Z2ZpeCBmb3IgaU9TIDYgYW5kIDdcbiAgU291cmNlOiBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzExOTI5MDk5L2h0bWw1LWNhbnZhcy1kcmF3aW1hZ2UtcmF0aW8tYnVnLWlvc1xuICBiYXNlZCBvbiB0aGUgd29yayBvZiBodHRwczovL2dpdGh1Yi5jb20vc3RvbWl0YS9pb3MtaW1hZ2VmaWxlLW1lZ2FwaXhlbFxuICAgKi9cblxuICBkZXRlY3RWZXJ0aWNhbFNxdWFzaCA9IGZ1bmN0aW9uKGltZykge1xuICAgIHZhciBhbHBoYSwgY2FudmFzLCBjdHgsIGRhdGEsIGV5LCBpaCwgaXcsIHB5LCByYXRpbywgc3k7XG4gICAgaXcgPSBpbWcubmF0dXJhbFdpZHRoO1xuICAgIGloID0gaW1nLm5hdHVyYWxIZWlnaHQ7XG4gICAgY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImNhbnZhc1wiKTtcbiAgICBjYW52YXMud2lkdGggPSAxO1xuICAgIGNhbnZhcy5oZWlnaHQgPSBpaDtcbiAgICBjdHggPSBjYW52YXMuZ2V0Q29udGV4dChcIjJkXCIpO1xuICAgIGN0eC5kcmF3SW1hZ2UoaW1nLCAwLCAwKTtcbiAgICBkYXRhID0gY3R4LmdldEltYWdlRGF0YSgwLCAwLCAxLCBpaCkuZGF0YTtcbiAgICBzeSA9IDA7XG4gICAgZXkgPSBpaDtcbiAgICBweSA9IGloO1xuICAgIHdoaWxlIChweSA+IHN5KSB7XG4gICAgICBhbHBoYSA9IGRhdGFbKHB5IC0gMSkgKiA0ICsgM107XG4gICAgICBpZiAoYWxwaGEgPT09IDApIHtcbiAgICAgICAgZXkgPSBweTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN5ID0gcHk7XG4gICAgICB9XG4gICAgICBweSA9IChleSArIHN5KSA+PiAxO1xuICAgIH1cbiAgICByYXRpbyA9IHB5IC8gaWg7XG4gICAgaWYgKHJhdGlvID09PSAwKSB7XG4gICAgICByZXR1cm4gMTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHJhdGlvO1xuICAgIH1cbiAgfTtcblxuICBkcmF3SW1hZ2VJT1NGaXggPSBmdW5jdGlvbihjdHgsIGltZywgc3gsIHN5LCBzdywgc2gsIGR4LCBkeSwgZHcsIGRoKSB7XG4gICAgdmFyIHZlcnRTcXVhc2hSYXRpbztcbiAgICB2ZXJ0U3F1YXNoUmF0aW8gPSBkZXRlY3RWZXJ0aWNhbFNxdWFzaChpbWcpO1xuICAgIHJldHVybiBjdHguZHJhd0ltYWdlKGltZywgc3gsIHN5LCBzdywgc2gsIGR4LCBkeSwgZHcsIGRoIC8gdmVydFNxdWFzaFJhdGlvKTtcbiAgfTtcblxuXG4gIC8qXG4gICAqIGNvbnRlbnRsb2FkZWQuanNcbiAgICpcbiAgICogQXV0aG9yOiBEaWVnbyBQZXJpbmkgKGRpZWdvLnBlcmluaSBhdCBnbWFpbC5jb20pXG4gICAqIFN1bW1hcnk6IGNyb3NzLWJyb3dzZXIgd3JhcHBlciBmb3IgRE9NQ29udGVudExvYWRlZFxuICAgKiBVcGRhdGVkOiAyMDEwMTAyMFxuICAgKiBMaWNlbnNlOiBNSVRcbiAgICogVmVyc2lvbjogMS4yXG4gICAqXG4gICAqIFVSTDpcbiAgICogaHR0cDovL2phdmFzY3JpcHQubndib3guY29tL0NvbnRlbnRMb2FkZWQvXG4gICAqIGh0dHA6Ly9qYXZhc2NyaXB0Lm53Ym94LmNvbS9Db250ZW50TG9hZGVkL01JVC1MSUNFTlNFXG4gICAqL1xuXG4gIGNvbnRlbnRMb2FkZWQgPSBmdW5jdGlvbih3aW4sIGZuKSB7XG4gICAgdmFyIGFkZCwgZG9jLCBkb25lLCBpbml0LCBwb2xsLCBwcmUsIHJlbSwgcm9vdCwgdG9wO1xuICAgIGRvbmUgPSBmYWxzZTtcbiAgICB0b3AgPSB0cnVlO1xuICAgIGRvYyA9IHdpbi5kb2N1bWVudDtcbiAgICByb290ID0gZG9jLmRvY3VtZW50RWxlbWVudDtcbiAgICBhZGQgPSAoZG9jLmFkZEV2ZW50TGlzdGVuZXIgPyBcImFkZEV2ZW50TGlzdGVuZXJcIiA6IFwiYXR0YWNoRXZlbnRcIik7XG4gICAgcmVtID0gKGRvYy5hZGRFdmVudExpc3RlbmVyID8gXCJyZW1vdmVFdmVudExpc3RlbmVyXCIgOiBcImRldGFjaEV2ZW50XCIpO1xuICAgIHByZSA9IChkb2MuYWRkRXZlbnRMaXN0ZW5lciA/IFwiXCIgOiBcIm9uXCIpO1xuICAgIGluaXQgPSBmdW5jdGlvbihlKSB7XG4gICAgICBpZiAoZS50eXBlID09PSBcInJlYWR5c3RhdGVjaGFuZ2VcIiAmJiBkb2MucmVhZHlTdGF0ZSAhPT0gXCJjb21wbGV0ZVwiKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIChlLnR5cGUgPT09IFwibG9hZFwiID8gd2luIDogZG9jKVtyZW1dKHByZSArIGUudHlwZSwgaW5pdCwgZmFsc2UpO1xuICAgICAgaWYgKCFkb25lICYmIChkb25lID0gdHJ1ZSkpIHtcbiAgICAgICAgcmV0dXJuIGZuLmNhbGwod2luLCBlLnR5cGUgfHwgZSk7XG4gICAgICB9XG4gICAgfTtcbiAgICBwb2xsID0gZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgZTtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJvb3QuZG9TY3JvbGwoXCJsZWZ0XCIpO1xuICAgICAgfSBjYXRjaCAoX2Vycm9yKSB7XG4gICAgICAgIGUgPSBfZXJyb3I7XG4gICAgICAgIHNldFRpbWVvdXQocG9sbCwgNTApO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICByZXR1cm4gaW5pdChcInBvbGxcIik7XG4gICAgfTtcbiAgICBpZiAoZG9jLnJlYWR5U3RhdGUgIT09IFwiY29tcGxldGVcIikge1xuICAgICAgaWYgKGRvYy5jcmVhdGVFdmVudE9iamVjdCAmJiByb290LmRvU2Nyb2xsKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgdG9wID0gIXdpbi5mcmFtZUVsZW1lbnQ7XG4gICAgICAgIH0gY2F0Y2ggKF9lcnJvcikge31cbiAgICAgICAgaWYgKHRvcCkge1xuICAgICAgICAgIHBvbGwoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZG9jW2FkZF0ocHJlICsgXCJET01Db250ZW50TG9hZGVkXCIsIGluaXQsIGZhbHNlKTtcbiAgICAgIGRvY1thZGRdKHByZSArIFwicmVhZHlzdGF0ZWNoYW5nZVwiLCBpbml0LCBmYWxzZSk7XG4gICAgICByZXR1cm4gd2luW2FkZF0ocHJlICsgXCJsb2FkXCIsIGluaXQsIGZhbHNlKTtcbiAgICB9XG4gIH07XG5cbiAgRHJvcHpvbmUuX2F1dG9EaXNjb3ZlckZ1bmN0aW9uID0gZnVuY3Rpb24oKSB7XG4gICAgaWYgKERyb3B6b25lLmF1dG9EaXNjb3Zlcikge1xuICAgICAgcmV0dXJuIERyb3B6b25lLmRpc2NvdmVyKCk7XG4gICAgfVxuICB9O1xuXG4gIGNvbnRlbnRMb2FkZWQod2luZG93LCBEcm9wem9uZS5fYXV0b0Rpc2NvdmVyRnVuY3Rpb24pO1xuXG59KS5jYWxsKHRoaXMpO1xuIiwiZGVmaW5lKGZ1bmN0aW9uKCkge1xuICAgIGNvbnN0IE9yZGVyX0xpc3RfRGV0YWlsID0gKHsgdXVpZCwgYmFza2V0RmllbGQxLCBjdXN0b21lckluZm8sIGJhc2tldEZpZWxkMiwgcG9zLCBwcmljZSwgcHJvZHVjdCwgc3RhdHVzLCBhbGxOZXQsIHJlT3JkZXIsIHJlT3JkZXJPcmRlciwgcmVPcmRlclBvcyB9LCBvcmRlclV1aWQpID0+IGBcbiAgICAgICAgPGRpdiBzdHlsZT1cIiR7cHNjLm9yZGVyLmdldF9wb3NfYmdfY29sb3Ioc3RhdHVzKX1cIiBjbGFzcz1cInJvdyAke3BzYy5vcmRlci5nZXRfcG9zX2JnX2NvbG9yX2NsYXNzKHN0YXR1cyl9XCIgaWQ9XCJyb3ctJHt1dWlkfVwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xIHAtMVwiPiR7cG9zfTwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC00IHAtMVwiPlxuICAgICAgICAgICAgJHtcbiAgICAgICAgICAgICAgICAocHJvZHVjdCA9PiBwcm9kdWN0Lm9yaWdpbmFsUHJvZHVjdCA/IGA8YSBocmVmPVwiL2FwcHMvYmFja2VuZC9wcm9kdWN0L2VkaXQvaW5kZXgvJHtwcm9kdWN0Lm9yaWdpbmFsUHJvZHVjdC51dWlkfVwiPiR7cHJvZHVjdC5vcmlnaW5hbFByb2R1Y3QudGl0bGV9PC9hPmAgOiBgPGEgaHJlZj1cIi9hcHBzL2JhY2tlbmQvcHJvZHVjdC9lZGl0L2luZGV4LyR7cHJvZHVjdC51dWlkfVwiPiR7cHJvZHVjdC50aXRsZX08L2E+YCApKHByb2R1Y3QpIC8vY2FsbCB0aGUgYW5vbnltb3VzIGlubGluZSB3aXRoIHRoZSBkYXRhIHdlIGNhcmUgYWJvdXRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDxici8+QXJ0TnIgaW50ZXJuOiAke3Byb2R1Y3QubnJJbnRlcm59PGJyLz5cbiAgICAgICAgICAgICR7cHNjLm9yZGVyLmdldF9zcGVjaWFsX3Byb2R1Y3Rfb3B0aW9ucyhwcm9kdWN0LnNwZWNpYWxQcm9kdWN0VHlwZU9iamVjdCl9PC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEgcC0xXCI+QXVmbGFnZTogJHtwcmljZS5jb3VudH08L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMSBwLTFcIj5LdW5kZW4gSW5mbzogJHtjdXN0b21lckluZm99JHsocmVPcmRlcj8gYDxici8+PHN0cm9uZz5Jc3QgZWluZSBOYWNoYmVzdGVsbHVuZzwvc3Ryb25nPmA6YGApfTwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xIHAtMVwiPiR7YmFza2V0RmllbGQxfTwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xIHAtMVwiPiR7YmFza2V0RmllbGQyfTwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xIHAtMSB0ZXh0LWVuZFwiPiR7bmV3IEludGwuTnVtYmVyRm9ybWF0KCdkZS1ERScsIHsgc3R5bGU6ICdjdXJyZW5jeScsIGN1cnJlbmN5OiAnRVVSJyB9KS5mb3JtYXQocHJpY2UuYWxsTmV0LzEwMCl9IDxzdHJvbmc+KCR7bmV3IEludGwuTnVtYmVyRm9ybWF0KCdkZS1ERScsIHsgc3R5bGU6ICdjdXJyZW5jeScsIGN1cnJlbmN5OiAnRVVSJyB9KS5mb3JtYXQocHJpY2UuYWxsR3Jvc3MvMTAwKX0pPC9zdHJvbmc+PC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTIgcC0yIHRleHQtZW5kXCI+PGRpdiBjbGFzcz1cImJ0bi1ncm91cCBidG4tZ3JvdXAtc20gdy0xMDBcIj5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgZHJvcGRvd24tdG9nZ2xlXCIgZGF0YS1icy10b2dnbGU9XCJkcm9wZG93blwiIGFyaWEtaGFzcG9wdXA9XCJ0cnVlXCIgYXJpYS1leHBhbmRlZD1cImZhbHNlXCI+XG4gICAgICAgICAgICAgICAgICAgICR7cHNjLm9yZGVyLmdldF9wb3Nfc3RhdHVzKHN0YXR1cykuaW50ZXJuYWxOYW1lfVxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRyb3Bkb3duLW1lbnVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICR7cHNjLm9yZGVyLmdldF9wb3Nfc3RhdHVzX2xvb3Aob3JkZXJVdWlkLCB1dWlkKX1cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+PC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEgcC0xXCI+PC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgIGA7XG5cbiAgICBjb25zdCBPcmRlcl9MaXN0X0RldGFpbF9TaW1wbGUgPSAoeyB1dWlkLCBiYXNrZXRGaWVsZDEsIGN1c3RvbWVySW5mbywgYmFza2V0RmllbGQyLCBwb3MsIHByaWNlLCBwcm9kdWN0LCBzdGF0dXMsIGFsbE5ldCB9LCBvcmRlclV1aWQpID0+IGBcbiAgICAgICAgPHRyIHN0eWxlPVwiJHtwc2Mub3JkZXIuZ2V0X3Bvc19iZ19jb2xvcihzdGF0dXMpfVwiIGNsYXNzPVwiJHtwc2Mub3JkZXIuZ2V0X3Bvc19iZ19jb2xvcl9jbGFzcyhzdGF0dXMpfVwiPlxuICAgICAgICA8dGQ+LTwvdGQ+XG4gICAgICAgIDx0ZD48L3RkPlxuICAgICAgICA8dGQ+JHtwb3N9PC90ZD5cbiAgICAgICAgPHRkIGNvbHNwYW49XCI0XCI+JHtcbiAgICAgICAgKHByb2R1Y3QgPT4gcHJvZHVjdC5vcmlnaW5hbFByb2R1Y3QgPyBgPGEgaHJlZj1cIi9hcHBzL2JhY2tlbmQvcHJvZHVjdC9lZGl0L2luZGV4LyR7cHJvZHVjdC5vcmlnaW5hbFByb2R1Y3QudXVpZH1cIj4ke3Byb2R1Y3Qub3JpZ2luYWxQcm9kdWN0LnRpdGxlfTwvYT5gIDogYDxhIGhyZWY9XCIvYXBwcy9iYWNrZW5kL3Byb2R1Y3QvZWRpdC9pbmRleC8ke3Byb2R1Y3QudXVpZH1cIj4ke3Byb2R1Y3QudGl0bGV9PC9hPmAgKShwcm9kdWN0KSAvL2NhbGwgdGhlIGFub255bW91cyBpbmxpbmUgd2l0aCB0aGUgZGF0YSB3ZSBjYXJlIGFib3V0XG4gICAgfTxici8+QXJ0TnIgaW50ZXJuOiAke3Byb2R1Y3QubnJJbnRlcm59PGJyLz5cbiAgICAgICAgJHtwc2Mub3JkZXIuZ2V0X3NwZWNpYWxfcHJvZHVjdF9vcHRpb25zKHByb2R1Y3Quc3BlY2lhbFByb2R1Y3RUeXBlT2JqZWN0KX08L3RkPlxuICAgICAgICA8dGQ+QXVmbGFnZTogJHtwcmljZS5jb3VudH08L3RkPlxuICAgICAgICA8dGQ+S3VuZGVuIEluZm86ICR7Y3VzdG9tZXJJbmZvfTwvdGQ+XG4gICAgICAgIDx0ZD4ke2Jhc2tldEZpZWxkMX08L3RkPlxuICAgICAgICA8dGQ+JHtiYXNrZXRGaWVsZDJ9PC90ZD5cbiAgICAgICAgPHRkPjwvdGQ+XG4gICAgICAgIDx0ZCBjbGFzcz1cInRleHQtZW5kXCI+JHtuZXcgSW50bC5OdW1iZXJGb3JtYXQoJ2RlLURFJywgeyBzdHlsZTogJ2N1cnJlbmN5JywgY3VycmVuY3k6ICdFVVInIH0pLmZvcm1hdChwcmljZS5hbGxOZXQvMTAwKX0gPHN0cm9uZz4oJHtuZXcgSW50bC5OdW1iZXJGb3JtYXQoJ2RlLURFJywgeyBzdHlsZTogJ2N1cnJlbmN5JywgY3VycmVuY3k6ICdFVVInIH0pLmZvcm1hdChwcmljZS5hbGxHcm9zcy8xMDApfSk8L3N0cm9uZz48L3RkPlxuICAgICAgICA8dGQ+JHtwc2Mub3JkZXIuZ2V0X3Bvc19zdGF0dXMoc3RhdHVzKS5pbnRlcm5hbE5hbWV9PC90ZD5cbiAgICAgICAgPHRkPjwvdGQ+XG4gICAgPC90cj5cbiAgICBgO1xuXG4gICAgY29uc3QgT3JkZXJfTGlzdF9Qb3NfU3RhdHVzID0gKHN0YXR1cywgb3JkZXJVdWlkLCBwb3NVdWlkKSA9PiBgXG4gICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiZHJvcGRvd24taXRlbSBzd2l0Y2hfcG9zXCIgZGF0YS1vcmRlci11dWlkPVwiJHtvcmRlclV1aWR9XCIgZGF0YS1wb3MtdXVpZD1cIiR7cG9zVXVpZH1cIiBkYXRhLXN0YXR1cz1cIiR7c3RhdHVzLmNvZGV9XCI+JHtzdGF0dXMuaW50ZXJuYWxOYW1lfTwvYnV0dG9uPlxuICAgIGA7XG5cbiAgICBjb25zdCBPcmRlcl9MaXN0X1Bvc19DYWxjX09wdGlvbiA9IChlbG0pID0+IGBcbiAgICAgICAgPHRyPjx0ZD4ke2VsbS5uYW1lfTwvdGQ+PHRkPiR7ZWxtLnZhbHVlfTwvdGQ+PC90cj5cbiAgICBgO1xuICAgIFxuICAgIHJldHVybiB7XG4gICAgICAgIFxuICAgICAgICBpbml0KCkge1xuXG4gICAgICAgICAgICB0aGlzLmxvYWRfc3RhdHVzKCk7XG4gICAgICAgICAgICB0aGlzLmJpbmRfYnV0dG9ucygpO1xuICAgICAgICB9LFxuXG4gICAgICAgIGdldF9zcGVjaWFsX3Byb2R1Y3Rfb3B0aW9ucyhzcGVjaWFsUHJvZHVjdFR5cGVPYmplY3QpIHtcbiAgICAgICAgICAgIGlmKHNwZWNpYWxQcm9kdWN0VHlwZU9iamVjdC50eXAgIT0gNikge1xuICAgICAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuICc8dGFibGU+JyArIHNwZWNpYWxQcm9kdWN0VHlwZU9iamVjdC5vcHRpb25zLm1hcChlbG0gPT4ge1xuICAgICAgICAgICAgICAgIGlmKGVsbS50eXBlICE9ICdoaWRkZW4nKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBPcmRlcl9MaXN0X1Bvc19DYWxjX09wdGlvbihlbG0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pLmpvaW4oJycpICsgJzwvdGFibGU+JztcbiAgICAgICAgfSxcblxuICAgICAgICBsb2FkX3N0YXR1cygpIHtcbiAgICAgICAgICAgIGlmKGp3dF90b2tlbiAhPSBcIlwiKSB7XG4gICAgICAgICAgICAgICAgJC5hamF4KHtcbiAgICAgICAgICAgICAgICAgICAgdXJsOiBcIi9hcHBzL2FwaS9zeXN0ZW0vc3RhdHVzXCIsXG4gICAgICAgICAgICAgICAgICAgIGNvbnRlbnRUeXBlOiBcImFwcGxpY2F0aW9uL2pzb25cIixcbiAgICAgICAgICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgXCJBdXRob3JpemF0aW9uXCI6IFwiQmVhcmVyIFwiICsgand0X3Rva2VuXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIG1ldGhvZDogJ0dFVCcsXG4gICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uIChyZXN1bHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBzYy5vcmRlci5zdGF0dXNfb3JkZXIgPSByZXN1bHQub3JkZXI7XG4gICAgICAgICAgICAgICAgICAgICAgICBwc2Mub3JkZXIuc3RhdHVzX3BvcyA9IHJlc3VsdC5wb3NpdGlvbjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuXG4gICAgICAgIGJpbmRfYnV0dG9ucygpIHtcbiAgICAgICAgICAgICQoJy50b29nbGVfbGlzdF9kZXRhaWxfdmlldycpLm9mZigpO1xuICAgICAgICAgICAgJCgnLnRvb2dsZV9saXN0X2RldGFpbF92aWV3Jykub24oJ2NsaWNrJywgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgdmFyIHV1aWQgPSAkKHRoaXMpLmRhdGEoKS51dWlkOyBcbiAgICAgICAgICAgICAgICBpZigkKCcjcm93cy0nICsgdXVpZCArICcgPiBkaXYnKS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICQoJyNyb3dzLScgKyB1dWlkKS5odG1sKCcnKTtcbiAgICAgICAgICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgICAgICAgICAgcHNjLm9yZGVyLmxvYWRfZGV0YWlsKHV1aWQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAkKCcudG9vZ2xlX2xpc3Rfc2ltcGxlX2RldGFpbF92aWV3Jykub2ZmKCk7XG4gICAgICAgICAgICAkKCcudG9vZ2xlX2xpc3Rfc2ltcGxlX2RldGFpbF92aWV3Jykub24oJ2NsaWNrJywgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgdmFyIHV1aWQgPSAkKHRoaXMpLmRhdGEoKS51dWlkOyBcbiAgICAgICAgICAgICAgICBpZigkKCcjcm93cy0nICsgdXVpZCArICcgPiB0cicpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgJCgnI3Jvd3MtJyArIHV1aWQpLmh0bWwoJycpO1xuICAgICAgICAgICAgICAgIH1lbHNle1xuICAgICAgICAgICAgICAgICAgICBwc2Mub3JkZXIubG9hZF9kZXRhaWwodXVpZCwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIFxuICAgICAgICB9LFxuXG4gICAgICAgIGxvYWRfZGV0YWlsKG9yZGVyVXVpZCwgc2ltcGxlID0gZmFsc2UpIHtcbiAgICAgICAgICAgICQuYWpheCh7XG4gICAgICAgICAgICAgICAgdXJsOiBcIi9hcHBzL2FwaS9vcmRlci9nZXRvbmVieXV1aWRcIixcbiAgICAgICAgICAgICAgICBjb250ZW50VHlwZTogXCJhcHBsaWNhdGlvbi9qc29uXCIsXG4gICAgICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICAgICAgICBcIkF1dGhvcml6YXRpb25cIjogXCJCZWFyZXIgXCIgKyBqd3RfdG9rZW5cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICAgICAgICAgIGRhdGE6IEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICAgICAgICAgICAgdXVpZDogb3JkZXJVdWlkXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24ocmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgICAgIHBzYy5vcmRlci5idWlsZF9kZXRhaWxzKG9yZGVyVXVpZCwgcmVzdWx0LCBzaW1wbGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgIH0sXG5cbiAgICAgICAgYnVpbGRfZGV0YWlscyhvcmRlclV1aWQsIHJlc3VsdCwgc2ltcGxlID0gZmFsc2UpIHtcbiAgICAgICAgICAgIGlmKHNpbXBsZSkge1xuICAgICAgICAgICAgICAgICQoJyNyb3dzLScgKyByZXN1bHQudXVpZCkuaHRtbChyZXN1bHQucG9zaXRpb25zLm1hcCh4ID0+IE9yZGVyX0xpc3RfRGV0YWlsX1NpbXBsZSh4LCBvcmRlclV1aWQpKS5qb2luKCcnKSk7XG4gICAgICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgICAgICAkKCcjcm93cy0nICsgcmVzdWx0LnV1aWQpLmh0bWwocmVzdWx0LnBvc2l0aW9ucy5tYXAoeCA9PiBPcmRlcl9MaXN0X0RldGFpbCh4LCBvcmRlclV1aWQpKS5qb2luKCcnKSk7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnBvc2l0aW9ucy5tYXAoeCA9PiB0aGlzLmxvYWRQbHVnaW5EZXRhaWxzKHgpKTtcblxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgXG4gICAgICAgICAgICB0aGlzLmJpbmRfc3RhdHVzX2J1dHRvbnMoKTtcbiAgICAgICAgfSxcblxuICAgICAgICBsb2FkUGx1Z2luRGV0YWlscyhwb3MpIHtcbiAgICAgICAgICAgICQuYWpheCh7XG4gICAgICAgICAgICAgICAgdXJsOiBcIi9hcHBzL2FwaS9wb3NpdGlvbi9nZXRwbHVnaW5saXN0ZGV0YWlscy9cIiArIHBvcy51dWlkLFxuICAgICAgICAgICAgICAgIGNvbnRlbnRUeXBlOiBcImFwcGxpY2F0aW9uL2pzb25cIixcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAgICAgICAgIFwiQXV0aG9yaXphdGlvblwiOiBcIkJlYXJlciBcIiArIGp3dF90b2tlblxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgbWV0aG9kOiAnR0VUJyxcbiAgICAgICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbihyZXN1bHQpIHtcbiAgICAgICAgICAgICAgICAgICAgJCgnI3Jvdy0nICsgcG9zLnV1aWQpLmFwcGVuZChyZXN1bHQuaHRtbCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgfSxcblxuICAgICAgICBiaW5kX3N0YXR1c19idXR0b25zKCkge1xuICAgICAgICAgICAgJCgnLnN3aXRjaF9wb3MnKS5vZmYoKTtcbiAgICAgICAgICAgICQoJy5zd2l0Y2hfcG9zJykub24oJ2NsaWNrJywgZnVuY3Rpb24oKSB7XG5cbiAgICAgICAgICAgICAgICB2YXIgb3JkZXJVdWlkID0gJCh0aGlzKS5kYXRhKCkub3JkZXJVdWlkO1xuICAgICAgICAgICAgICAgIHZhciBwb3NVdWlkID0gJCh0aGlzKS5kYXRhKCkucG9zVXVpZDtcbiAgICAgICAgICAgICAgICB2YXIgc3RhdHVzID0gJCh0aGlzKS5kYXRhKCkuc3RhdHVzO1xuXG4gICAgICAgICAgICAgICAgJC5hamF4KHtcbiAgICAgICAgICAgICAgICAgICAgdXJsOiBcIi9hcHBzL2FwaS9wb3NpdGlvbi9zdGF0dXMvY2hhbmdlXCIsXG4gICAgICAgICAgICAgICAgICAgIGNvbnRlbnRUeXBlOiBcImFwcGxpY2F0aW9uL2pzb25cIixcbiAgICAgICAgICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgXCJBdXRob3JpemF0aW9uXCI6IFwiQmVhcmVyIFwiICsgand0X3Rva2VuXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIGRhdGE6IEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uOiBwb3NVdWlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzOiBzdGF0dXMsXG4gICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24ocmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAkKCcjcm93cy0nICsgb3JkZXJVdWlkKS5odG1sKCcnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBzYy5vcmRlci5sb2FkX2RldGFpbChvcmRlclV1aWQpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcblxuICAgICAgICBnZXRfcG9zX2JnX2NvbG9yKHN0YXR1cykge1xuXG4gICAgICAgICAgICAvKlxuICAgICAgICAgICAgeyUgaWYgb3JkZXJTdGF0dXNlLmdldFBvc1N0YXR1c0NvbG9yKHBvcy5zdGF0dXMpICE9ICcnICV9YmFja2dyb3VuZC1jb2xvcjoge3sgb3JkZXJTdGF0dXNlLmdldFBvc1N0YXR1c0NvbG9yKHBvcy5zdGF0dXMpIH19eyUgZW5kaWYgJX1cIlxuICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIGNvbnN0IGZvdW5kID0gcHNjLm9yZGVyLnN0YXR1c19wb3MuZmluZChzdGF0ID0+IHN0YXQuY29kZSA9PSBzdGF0dXMpO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICBpZihmb3VuZCAmJiBmb3VuZC5jb2xvciAhPSBcIlwiKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICdiYWNrZ3JvdW5kLWNvbG9yOiAnICsgZm91bmQuY29sb3I7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBcbiAgICAgICAgfSxcblxuICAgICAgICBnZXRfcG9zX3N0YXR1cyhzdGF0dXMpIHtcblxuICAgICAgICAgICAgLypcbiAgICAgICAgICAgIHslIGlmIG9yZGVyU3RhdHVzZS5nZXRQb3NTdGF0dXNDb2xvcihwb3Muc3RhdHVzKSAhPSAnJyAlfWJhY2tncm91bmQtY29sb3I6IHt7IG9yZGVyU3RhdHVzZS5nZXRQb3NTdGF0dXNDb2xvcihwb3Muc3RhdHVzKSB9fXslIGVuZGlmICV9XCJcbiAgICAgICAgICAgICovXG4gICAgICAgICAgICBjb25zdCBmb3VuZCA9IHBzYy5vcmRlci5zdGF0dXNfcG9zLmZpbmQoc3RhdCA9PiBzdGF0LmNvZGUgPT0gc3RhdHVzKTtcbiAgICAgICAgICAgIGlmKGZvdW5kKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZvdW5kO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4ge2ludGVybmFsTmFtZTogJ25vdEZvdW5kJ307XG5cbiAgICAgICAgfSxcblxuICAgICAgICBnZXRfcG9zX2JnX2NvbG9yX2NsYXNzKHN0YXR1cykge1xuXG4gICAgICAgICAgICAvKlxuICAgICAgICAgICAgY2xhc3M9XCJ7JSBpZiBwb3Muc3RhdHVzID09IDE3MCAlfWJnLWxpZ2h0ZGFya3slIGVsc2VpZiBwb3Muc3RhdHVzID09IDIwMCBvciBwb3Muc3RhdHVzID09IDIxMCAlfWJnLWxpZ2h0c3VjY2Vzc3slIGVsc2UgJX1iZy1saWdodGRhbmdlcnslIGVuZGlmICV9XG4gICAgICAgICAgICAqL1xuXG4gICAgICAgICAgICBpZihzdGF0dXMgPT0gMTcwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICdiZy1saWdodGRhcmsnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYoc3RhdHVzID09IDIwMCB8fCBzdGF0dXMgPT0gMjEwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICdiZy1saWdodHN1Y2Nlc3MnO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gJ2JnLWxpZ2h0ZGFuZ2VyJztcbiAgICAgICAgfSxcblxuICAgICAgICBnZXRfcG9zX3N0YXR1c19sb29wKG9yZGVyVXVpZCwgcG9zVXVpZCkge1xuICAgICAgICAgICAgcmV0dXJuIHBzYy5vcmRlci5zdGF0dXNfcG9zLm1hcCh4ID0+IE9yZGVyX0xpc3RfUG9zX1N0YXR1cyh4LCBvcmRlclV1aWQsIHBvc1V1aWQpKS5qb2luKCcnKTtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICB9XG59KTtcbiIsImRlZmluZShmdW5jdGlvbigpIHtcbiAgICByZXR1cm4ge1xuXG4gICAgICAgIGluaXQoKSB7XG4gICAgICAgICAgICBzZXQgPSByZXF1aXJlKCcuL3Byb2R1Y3Qvc2V0Jyk7XG4gICAgICAgICAgICBzZXQuaW5pdCgpO1xuICAgICAgICB9XG4gICAgfVxufSk7IiwiZGVmaW5lKGZ1bmN0aW9uKCkge1xuICAgIGZ1bmN0aW9uIGJ1aWxkVGFibGUocmVzdWx0KSB7XG4gICAgICAgICQoJy5wcm9kdWN0X3NldF90YWJsZSA+IHRib2R5JykuZW1wdHkoKTtcblxuICAgICAgICAkLmVhY2gocmVzdWx0LnByb2R1Y3RzLCBmdW5jdGlvbihpbmRleCwgaXRlbSkge1xuICAgICAgICAgICAgJCgnLnByb2R1Y3Rfc2V0X3RhYmxlID4gdGJvZHknKS5hcHBlbmQoJzx0cj48dGQ+JyArIGl0ZW0udGl0bGUgKyAnPC90ZD48dGQ+PGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgZGF0YS11dWlkPScgKyBpdGVtLnV1aWQgKyAnIGNsYXNzPVwiYnRuIGJ0bi1kYW5nZXIgYnRuLXNtIHByb2R1Y3Rfc2V0X2RlbGV0ZV9idXR0b25cIj48c3BhbiBjbGFzcz1cImZhIGZhLXRyYXNoXCI+PC9zcGFuPjwvYnV0dG9uPjwvdGQ+PC90cj4nKTtcbiAgICAgICAgfSlcblxuICAgICAgICBiaW5kRGVsZXRlQnV0dG9ucygpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGJpbmREZWxldGVCdXR0b25zKCkge1xuICAgICAgICAkKCcucHJvZHVjdF9zZXRfZGVsZXRlX2J1dHRvbicpLmNsaWNrKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgJCgnI292ZXJsYXlfbG9hZGluZycpLmZhZGVJbigpO1xuICAgICAgICAgICAgJC5hamF4KHtcbiAgICAgICAgICAgICAgICB1cmw6IFwiL2FwcHMvYXBpL3Byb2R1Y3QvXCIgKyBwcm9kdWN0VXVpZCArIFwiL3NldFwiLFxuICAgICAgICAgICAgICAgIGNvbnRlbnRUeXBlOiBcImFwcGxpY2F0aW9uL2pzb25cIixcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAgICAgICAgIFwiQXV0aG9yaXphdGlvblwiOiBcIkJlYXJlciBcIiArIGp3dF90b2tlblxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgbWV0aG9kOiAnREVMRVRFJyxcbiAgICAgICAgICAgICAgICBkYXRhOiBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgICAgICAgICAgIHByb2R1Y3Q6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHV1aWQ6ICQodGhpcykuZGF0YSgndXVpZCcpXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAocmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgICAgIGJ1aWxkVGFibGUocmVzdWx0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgJCgnI292ZXJsYXlfbG9hZGluZycpLmZhZGVPdXQoKTtcbiAgICB9XG4gICAgcmV0dXJuIHtcblxuICAgICAgICBpbml0KCkge1xuICAgICAgICAgICAgaWYoJCgnLnByb2R1Y3Rfc2V0X2FkZF9idXR0b24nKS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pbml0QWRkQnV0dG9uKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5sb2FkVGFibGUoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9LFxuXG4gICAgICAgIGluaXRBZGRCdXR0b24oKSB7XG4gICAgICAgICAgICAkKCcucHJvZHVjdF9zZXRfYWRkX2J1dHRvbicpLmNsaWNrKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICQoJyNvdmVybGF5X2xvYWRpbmcnKS5mYWRlSW4oKTtcbiAgICAgICAgICAgICAgICAkLmFqYXgoe1xuICAgICAgICAgICAgICAgICAgICB1cmw6IFwiL2FwcHMvYXBpL3Byb2R1Y3QvXCIgKyBwcm9kdWN0VXVpZCArIFwiL3NldFwiLFxuICAgICAgICAgICAgICAgICAgICBjb250ZW50VHlwZTogXCJhcHBsaWNhdGlvbi9qc29uXCIsXG4gICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiQXV0aG9yaXphdGlvblwiOiBcIkJlYXJlciBcIiArIGp3dF90b2tlblxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBtZXRob2Q6ICdQVVQnLFxuICAgICAgICAgICAgICAgICAgICBkYXRhOiBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgICAgICAgICAgICAgICBwcm9kdWN0OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXVpZDogJCh0aGlzKS5kYXRhKCd1dWlkJylcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uIChyZXN1bHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkVGFibGUocmVzdWx0KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgfSxcblxuICAgICAgICBsb2FkVGFibGUoKSB7XG4gICAgICAgICAgICAkKCcjb3ZlcmxheV9sb2FkaW5nJykuZmFkZUluKCk7XG4gICAgICAgICAgICAkLmFqYXgoe1xuICAgICAgICAgICAgICAgIHVybDogXCIvYXBwcy9hcGkvcHJvZHVjdC9cIiArIHByb2R1Y3RVdWlkICsgXCIvc2V0XCIsXG4gICAgICAgICAgICAgICAgY29udGVudFR5cGU6IFwiYXBwbGljYXRpb24vanNvblwiLFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgICAgICAgXCJBdXRob3JpemF0aW9uXCI6IFwiQmVhcmVyIFwiICsgand0X3Rva2VuXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBtZXRob2Q6ICdHRVQnLFxuICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uIChyZXN1bHQpIHtcbiAgICAgICAgICAgICAgICAgICAgYnVpbGRUYWJsZShyZXN1bHQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuXG5cbiAgICB9XG59KTsiLCIoZnVuY3Rpb24gKGZhY3RvcnkpIHtcbiAgICAvKiBnbG9iYWwgZGVmaW5lICovXG4gICAgaWYgKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCkge1xuICAgICAgICAvLyBBTUQuIFJlZ2lzdGVyIGFzIGFuIGFub255bW91cyBtb2R1bGUuXG4gICAgICAgIGRlZmluZShbJ2pxdWVyeSddLCBmYWN0b3J5KTtcbiAgICB9IGVsc2Uge1xuICAgICAgICAvLyBCcm93c2VyIGdsb2JhbHM6IGpRdWVyeVxuICAgICAgICBmYWN0b3J5KHdpbmRvdy5qUXVlcnkpO1xuICAgIH1cbn0oZnVuY3Rpb24gKCQpe1xuICAgICQuZXh0ZW5kKCQuc3VtbWVybm90ZS5wbHVnaW5zLCB7XG4gICAgICAgICdtZWRpYSc6IGZ1bmN0aW9uKGNvbnRleHQpIHtcbiAgICAgICAgICAgIHZhciBzZWxmID0gdGhpcztcblxuICAgICAgICAgICAgLy8gdWkgaGFzIHJlbmRlcnMgdG8gYnVpbGQgdWkgZWxlbWVudHMuXG4gICAgICAgICAgICAvLyAgLSB5b3UgY2FuIGNyZWF0ZSBhIGJ1dHRvbiB3aXRoIGB1aS5idXR0b25gXG4gICAgICAgICAgICB2YXIgdWkgPSAkLnN1bW1lcm5vdGUudWk7XG5cbiAgICAgICAgICAgIC8vIGFkZCBoZWxsbyBidXR0b25cbiAgICAgICAgICAgIGNvbnRleHQubWVtbygnYnV0dG9uLm1lZGlhJywgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgLy8gY3JlYXRlIGJ1dHRvblxuICAgICAgICAgICAgICAgIHZhciBidXR0b24gPSB1aS5idXR0b24oe1xuICAgICAgICAgICAgICAgICAgICBjb250ZW50czogJzxpIGNsYXNzPVwiZmEgZmEtaW1hZ2VzXCIvPiBNZWRpYScsXG4gICAgICAgICAgICAgICAgICAgIHRvb2x0aXA6ICdNZWRpYScsXG4gICAgICAgICAgICAgICAgICAgIGNsaWNrOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lZGlhQnVuZGxlQnJvd3Nlcihjb250ZXh0LiRub3RlLmF0dHIoJ2lkJykpO1xuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgLy8gY3JlYXRlIGpRdWVyeSBvYmplY3QgZnJvbSBidXR0b24gaW5zdGFuY2UuXG4gICAgICAgICAgICAgICAgdmFyICRtZWRpYSA9IGJ1dHRvbi5yZW5kZXIoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gJG1lZGlhO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9KTtcblxufSkpOyIsIiFmdW5jdGlvbih0LGUpe1wiZnVuY3Rpb25cIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZD9kZWZpbmUoZSk6XCJvYmplY3RcIj09dHlwZW9mIGV4cG9ydHM/bW9kdWxlLmV4cG9ydHM9ZShyZXF1aXJlLGV4cG9ydHMsbW9kdWxlKTp0LlRldGhlcj1lKCl9KHRoaXMsZnVuY3Rpb24odCxlLG8pe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIG4odCxlKXtpZighKHQgaW5zdGFuY2VvZiBlKSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpfWZ1bmN0aW9uIGkodCl7dmFyIGU9dC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxvPXt9O2Zvcih2YXIgbiBpbiBlKW9bbl09ZVtuXTtpZih0Lm93bmVyRG9jdW1lbnQhPT1kb2N1bWVudCl7dmFyIHI9dC5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3LmZyYW1lRWxlbWVudDtpZihyKXt2YXIgcz1pKHIpO28udG9wKz1zLnRvcCxvLmJvdHRvbSs9cy50b3Asby5sZWZ0Kz1zLmxlZnQsby5yaWdodCs9cy5sZWZ0fX1yZXR1cm4gb31mdW5jdGlvbiByKHQpe3ZhciBlPWdldENvbXB1dGVkU3R5bGUodCl8fHt9LG89ZS5wb3NpdGlvbixuPVtdO2lmKFwiZml4ZWRcIj09PW8pcmV0dXJuW3RdO2Zvcih2YXIgaT10OyhpPWkucGFyZW50Tm9kZSkmJmkmJjE9PT1pLm5vZGVUeXBlOyl7dmFyIHI9dm9pZCAwO3RyeXtyPWdldENvbXB1dGVkU3R5bGUoaSl9Y2F0Y2gocyl7fWlmKFwidW5kZWZpbmVkXCI9PXR5cGVvZiByfHxudWxsPT09cilyZXR1cm4gbi5wdXNoKGkpLG47dmFyIGE9cixmPWEub3ZlcmZsb3csbD1hLm92ZXJmbG93WCxoPWEub3ZlcmZsb3dZOy8oYXV0b3xzY3JvbGwpLy50ZXN0KGYraCtsKSYmKFwiYWJzb2x1dGVcIiE9PW98fFtcInJlbGF0aXZlXCIsXCJhYnNvbHV0ZVwiLFwiZml4ZWRcIl0uaW5kZXhPZihyLnBvc2l0aW9uKT49MCkmJm4ucHVzaChpKX1yZXR1cm4gbi5wdXNoKHQub3duZXJEb2N1bWVudC5ib2R5KSx0Lm93bmVyRG9jdW1lbnQhPT1kb2N1bWVudCYmbi5wdXNoKHQub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlldyksbn1mdW5jdGlvbiBzKCl7QSYmZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChBKSxBPW51bGx9ZnVuY3Rpb24gYSh0KXt2YXIgZT12b2lkIDA7dD09PWRvY3VtZW50PyhlPWRvY3VtZW50LHQ9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KTplPXQub3duZXJEb2N1bWVudDt2YXIgbz1lLmRvY3VtZW50RWxlbWVudCxuPWkodCkscj1QKCk7cmV0dXJuIG4udG9wLT1yLnRvcCxuLmxlZnQtPXIubGVmdCxcInVuZGVmaW5lZFwiPT10eXBlb2Ygbi53aWR0aCYmKG4ud2lkdGg9ZG9jdW1lbnQuYm9keS5zY3JvbGxXaWR0aC1uLmxlZnQtbi5yaWdodCksXCJ1bmRlZmluZWRcIj09dHlwZW9mIG4uaGVpZ2h0JiYobi5oZWlnaHQ9ZG9jdW1lbnQuYm9keS5zY3JvbGxIZWlnaHQtbi50b3Atbi5ib3R0b20pLG4udG9wPW4udG9wLW8uY2xpZW50VG9wLG4ubGVmdD1uLmxlZnQtby5jbGllbnRMZWZ0LG4ucmlnaHQ9ZS5ib2R5LmNsaWVudFdpZHRoLW4ud2lkdGgtbi5sZWZ0LG4uYm90dG9tPWUuYm9keS5jbGllbnRIZWlnaHQtbi5oZWlnaHQtbi50b3Asbn1mdW5jdGlvbiBmKHQpe3JldHVybiB0Lm9mZnNldFBhcmVudHx8ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50fWZ1bmN0aW9uIGwoKXt2YXIgdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO3Quc3R5bGUud2lkdGg9XCIxMDAlXCIsdC5zdHlsZS5oZWlnaHQ9XCIyMDBweFwiO3ZhciBlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7aChlLnN0eWxlLHtwb3NpdGlvbjpcImFic29sdXRlXCIsdG9wOjAsbGVmdDowLHBvaW50ZXJFdmVudHM6XCJub25lXCIsdmlzaWJpbGl0eTpcImhpZGRlblwiLHdpZHRoOlwiMjAwcHhcIixoZWlnaHQ6XCIxNTBweFwiLG92ZXJmbG93OlwiaGlkZGVuXCJ9KSxlLmFwcGVuZENoaWxkKHQpLGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZSk7dmFyIG89dC5vZmZzZXRXaWR0aDtlLnN0eWxlLm92ZXJmbG93PVwic2Nyb2xsXCI7dmFyIG49dC5vZmZzZXRXaWR0aDtvPT09biYmKG49ZS5jbGllbnRXaWR0aCksZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChlKTt2YXIgaT1vLW47cmV0dXJue3dpZHRoOmksaGVpZ2h0Oml9fWZ1bmN0aW9uIGgoKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPD0wfHx2b2lkIDA9PT1hcmd1bWVudHNbMF0/e306YXJndW1lbnRzWzBdLGU9W107cmV0dXJuIEFycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KGUsYXJndW1lbnRzKSxlLnNsaWNlKDEpLmZvckVhY2goZnVuY3Rpb24oZSl7aWYoZSlmb3IodmFyIG8gaW4gZSkoe30pLmhhc093blByb3BlcnR5LmNhbGwoZSxvKSYmKHRbb109ZVtvXSl9KSx0fWZ1bmN0aW9uIHUodCxlKXtpZihcInVuZGVmaW5lZFwiIT10eXBlb2YgdC5jbGFzc0xpc3QpZS5zcGxpdChcIiBcIikuZm9yRWFjaChmdW5jdGlvbihlKXtlLnRyaW0oKSYmdC5jbGFzc0xpc3QucmVtb3ZlKGUpfSk7ZWxzZXt2YXIgbz1uZXcgUmVnRXhwKFwiKF58IClcIitlLnNwbGl0KFwiIFwiKS5qb2luKFwifFwiKStcIiggfCQpXCIsXCJnaVwiKSxuPWModCkucmVwbGFjZShvLFwiIFwiKTtnKHQsbil9fWZ1bmN0aW9uIGQodCxlKXtpZihcInVuZGVmaW5lZFwiIT10eXBlb2YgdC5jbGFzc0xpc3QpZS5zcGxpdChcIiBcIikuZm9yRWFjaChmdW5jdGlvbihlKXtlLnRyaW0oKSYmdC5jbGFzc0xpc3QuYWRkKGUpfSk7ZWxzZXt1KHQsZSk7dmFyIG89Yyh0KSsoXCIgXCIrZSk7Zyh0LG8pfX1mdW5jdGlvbiBwKHQsZSl7aWYoXCJ1bmRlZmluZWRcIiE9dHlwZW9mIHQuY2xhc3NMaXN0KXJldHVybiB0LmNsYXNzTGlzdC5jb250YWlucyhlKTt2YXIgbz1jKHQpO3JldHVybiBuZXcgUmVnRXhwKFwiKF58IClcIitlK1wiKCB8JClcIixcImdpXCIpLnRlc3Qobyl9ZnVuY3Rpb24gYyh0KXtyZXR1cm4gdC5jbGFzc05hbWUgaW5zdGFuY2VvZiB0Lm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcuU1ZHQW5pbWF0ZWRTdHJpbmc/dC5jbGFzc05hbWUuYmFzZVZhbDp0LmNsYXNzTmFtZX1mdW5jdGlvbiBnKHQsZSl7dC5zZXRBdHRyaWJ1dGUoXCJjbGFzc1wiLGUpfWZ1bmN0aW9uIG0odCxlLG8pe28uZm9yRWFjaChmdW5jdGlvbihvKXstMT09PWUuaW5kZXhPZihvKSYmcCh0LG8pJiZ1KHQsbyl9KSxlLmZvckVhY2goZnVuY3Rpb24oZSl7cCh0LGUpfHxkKHQsZSl9KX1mdW5jdGlvbiBuKHQsZSl7aWYoISh0IGluc3RhbmNlb2YgZSkpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKX1mdW5jdGlvbiB2KHQsZSl7aWYoXCJmdW5jdGlvblwiIT10eXBlb2YgZSYmbnVsbCE9PWUpdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uLCBub3QgXCIrdHlwZW9mIGUpO3QucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZSYmZS5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTp0LGVudW1lcmFibGU6ITEsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLGUmJihPYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mKHQsZSk6dC5fX3Byb3RvX189ZSl9ZnVuY3Rpb24geSh0LGUpe3ZhciBvPWFyZ3VtZW50cy5sZW5ndGg8PTJ8fHZvaWQgMD09PWFyZ3VtZW50c1syXT8xOmFyZ3VtZW50c1syXTtyZXR1cm4gdCtvPj1lJiZlPj10LW99ZnVuY3Rpb24gYigpe3JldHVyblwidW5kZWZpbmVkXCIhPXR5cGVvZiBwZXJmb3JtYW5jZSYmXCJ1bmRlZmluZWRcIiE9dHlwZW9mIHBlcmZvcm1hbmNlLm5vdz9wZXJmb3JtYW5jZS5ub3coKTorbmV3IERhdGV9ZnVuY3Rpb24gdygpe2Zvcih2YXIgdD17dG9wOjAsbGVmdDowfSxlPWFyZ3VtZW50cy5sZW5ndGgsbz1BcnJheShlKSxuPTA7ZT5uO24rKylvW25dPWFyZ3VtZW50c1tuXTtyZXR1cm4gby5mb3JFYWNoKGZ1bmN0aW9uKGUpe3ZhciBvPWUudG9wLG49ZS5sZWZ0O1wic3RyaW5nXCI9PXR5cGVvZiBvJiYobz1wYXJzZUZsb2F0KG8sMTApKSxcInN0cmluZ1wiPT10eXBlb2YgbiYmKG49cGFyc2VGbG9hdChuLDEwKSksdC50b3ArPW8sdC5sZWZ0Kz1ufSksdH1mdW5jdGlvbiBDKHQsZSl7cmV0dXJuXCJzdHJpbmdcIj09dHlwZW9mIHQubGVmdCYmLTEhPT10LmxlZnQuaW5kZXhPZihcIiVcIikmJih0LmxlZnQ9cGFyc2VGbG9hdCh0LmxlZnQsMTApLzEwMCplLndpZHRoKSxcInN0cmluZ1wiPT10eXBlb2YgdC50b3AmJi0xIT09dC50b3AuaW5kZXhPZihcIiVcIikmJih0LnRvcD1wYXJzZUZsb2F0KHQudG9wLDEwKS8xMDAqZS5oZWlnaHQpLHR9ZnVuY3Rpb24gTyh0LGUpe3JldHVyblwic2Nyb2xsUGFyZW50XCI9PT1lP2U9dC5zY3JvbGxQYXJlbnRzWzBdOlwid2luZG93XCI9PT1lJiYoZT1bcGFnZVhPZmZzZXQscGFnZVlPZmZzZXQsaW5uZXJXaWR0aCtwYWdlWE9mZnNldCxpbm5lckhlaWdodCtwYWdlWU9mZnNldF0pLGU9PT1kb2N1bWVudCYmKGU9ZS5kb2N1bWVudEVsZW1lbnQpLFwidW5kZWZpbmVkXCIhPXR5cGVvZiBlLm5vZGVUeXBlJiYhZnVuY3Rpb24oKXt2YXIgdD1lLG89YShlKSxuPW8saT1nZXRDb21wdXRlZFN0eWxlKGUpO2lmKGU9W24ubGVmdCxuLnRvcCxvLndpZHRoK24ubGVmdCxvLmhlaWdodCtuLnRvcF0sdC5vd25lckRvY3VtZW50IT09ZG9jdW1lbnQpe3ZhciByPXQub3duZXJEb2N1bWVudC5kZWZhdWx0VmlldztlWzBdKz1yLnBhZ2VYT2Zmc2V0LGVbMV0rPXIucGFnZVlPZmZzZXQsZVsyXSs9ci5wYWdlWE9mZnNldCxlWzNdKz1yLnBhZ2VZT2Zmc2V0fSQuZm9yRWFjaChmdW5jdGlvbih0LG8pe3Q9dFswXS50b1VwcGVyQ2FzZSgpK3Quc3Vic3RyKDEpLFwiVG9wXCI9PT10fHxcIkxlZnRcIj09PXQ/ZVtvXSs9cGFyc2VGbG9hdChpW1wiYm9yZGVyXCIrdCtcIldpZHRoXCJdKTplW29dLT1wYXJzZUZsb2F0KGlbXCJib3JkZXJcIit0K1wiV2lkdGhcIl0pfSl9KCksZX12YXIgRT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlKXtmb3IodmFyIG89MDtvPGUubGVuZ3RoO28rKyl7dmFyIG49ZVtvXTtuLmVudW1lcmFibGU9bi5lbnVtZXJhYmxlfHwhMSxuLmNvbmZpZ3VyYWJsZT0hMCxcInZhbHVlXCJpbiBuJiYobi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsbi5rZXksbil9fXJldHVybiBmdW5jdGlvbihlLG8sbil7cmV0dXJuIG8mJnQoZS5wcm90b3R5cGUsbyksbiYmdChlLG4pLGV9fSgpLHg9dm9pZCAwO1widW5kZWZpbmVkXCI9PXR5cGVvZiB4JiYoeD17bW9kdWxlczpbXX0pO3ZhciBBPW51bGwsVD1mdW5jdGlvbigpe3ZhciB0PTA7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuKyt0fX0oKSxTPXt9LFA9ZnVuY3Rpb24oKXt2YXIgdD1BO3R8fCh0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiksdC5zZXRBdHRyaWJ1dGUoXCJkYXRhLXRldGhlci1pZFwiLFQoKSksaCh0LnN0eWxlLHt0b3A6MCxsZWZ0OjAscG9zaXRpb246XCJhYnNvbHV0ZVwifSksZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0KSxBPXQpO3ZhciBlPXQuZ2V0QXR0cmlidXRlKFwiZGF0YS10ZXRoZXItaWRcIik7cmV0dXJuXCJ1bmRlZmluZWRcIj09dHlwZW9mIFNbZV0mJihTW2VdPWkodCksTShmdW5jdGlvbigpe2RlbGV0ZSBTW2VdfSkpLFNbZV19LFc9W10sTT1mdW5jdGlvbih0KXtXLnB1c2godCl9LF89ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dm9pZCAwO3Q9Vy5wb3AoKTspdCgpfSxrPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe24odGhpcyx0KX1yZXR1cm4gRSh0LFt7a2V5Olwib25cIix2YWx1ZTpmdW5jdGlvbih0LGUsbyl7dmFyIG49YXJndW1lbnRzLmxlbmd0aDw9M3x8dm9pZCAwPT09YXJndW1lbnRzWzNdPyExOmFyZ3VtZW50c1szXTtcInVuZGVmaW5lZFwiPT10eXBlb2YgdGhpcy5iaW5kaW5ncyYmKHRoaXMuYmluZGluZ3M9e30pLFwidW5kZWZpbmVkXCI9PXR5cGVvZiB0aGlzLmJpbmRpbmdzW3RdJiYodGhpcy5iaW5kaW5nc1t0XT1bXSksdGhpcy5iaW5kaW5nc1t0XS5wdXNoKHtoYW5kbGVyOmUsY3R4Om8sb25jZTpufSl9fSx7a2V5Olwib25jZVwiLHZhbHVlOmZ1bmN0aW9uKHQsZSxvKXt0aGlzLm9uKHQsZSxvLCEwKX19LHtrZXk6XCJvZmZcIix2YWx1ZTpmdW5jdGlvbih0LGUpe2lmKFwidW5kZWZpbmVkXCIhPXR5cGVvZiB0aGlzLmJpbmRpbmdzJiZcInVuZGVmaW5lZFwiIT10eXBlb2YgdGhpcy5iaW5kaW5nc1t0XSlpZihcInVuZGVmaW5lZFwiPT10eXBlb2YgZSlkZWxldGUgdGhpcy5iaW5kaW5nc1t0XTtlbHNlIGZvcih2YXIgbz0wO288dGhpcy5iaW5kaW5nc1t0XS5sZW5ndGg7KXRoaXMuYmluZGluZ3NbdF1bb10uaGFuZGxlcj09PWU/dGhpcy5iaW5kaW5nc1t0XS5zcGxpY2UobywxKTorK299fSx7a2V5OlwidHJpZ2dlclwiLHZhbHVlOmZ1bmN0aW9uKHQpe2lmKFwidW5kZWZpbmVkXCIhPXR5cGVvZiB0aGlzLmJpbmRpbmdzJiZ0aGlzLmJpbmRpbmdzW3RdKXtmb3IodmFyIGU9MCxvPWFyZ3VtZW50cy5sZW5ndGgsbj1BcnJheShvPjE/by0xOjApLGk9MTtvPmk7aSsrKW5baS0xXT1hcmd1bWVudHNbaV07Zm9yKDtlPHRoaXMuYmluZGluZ3NbdF0ubGVuZ3RoOyl7dmFyIHI9dGhpcy5iaW5kaW5nc1t0XVtlXSxzPXIuaGFuZGxlcixhPXIuY3R4LGY9ci5vbmNlLGw9YTtcInVuZGVmaW5lZFwiPT10eXBlb2YgbCYmKGw9dGhpcykscy5hcHBseShsLG4pLGY/dGhpcy5iaW5kaW5nc1t0XS5zcGxpY2UoZSwxKTorK2V9fX19XSksdH0oKTt4LlV0aWxzPXtnZXRBY3R1YWxCb3VuZGluZ0NsaWVudFJlY3Q6aSxnZXRTY3JvbGxQYXJlbnRzOnIsZ2V0Qm91bmRzOmEsZ2V0T2Zmc2V0UGFyZW50OmYsZXh0ZW5kOmgsYWRkQ2xhc3M6ZCxyZW1vdmVDbGFzczp1LGhhc0NsYXNzOnAsdXBkYXRlQ2xhc3NlczptLGRlZmVyOk0sZmx1c2g6Xyx1bmlxdWVJZDpULEV2ZW50ZWQ6ayxnZXRTY3JvbGxCYXJTaXplOmwscmVtb3ZlVXRpbEVsZW1lbnRzOnN9O3ZhciBCPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUpe3ZhciBvPVtdLG49ITAsaT0hMSxyPXZvaWQgMDt0cnl7Zm9yKHZhciBzLGE9dFtTeW1ib2wuaXRlcmF0b3JdKCk7IShuPShzPWEubmV4dCgpKS5kb25lKSYmKG8ucHVzaChzLnZhbHVlKSwhZXx8by5sZW5ndGghPT1lKTtuPSEwKTt9Y2F0Y2goZil7aT0hMCxyPWZ9ZmluYWxseXt0cnl7IW4mJmFbXCJyZXR1cm5cIl0mJmFbXCJyZXR1cm5cIl0oKX1maW5hbGx5e2lmKGkpdGhyb3cgcn19cmV0dXJuIG99cmV0dXJuIGZ1bmN0aW9uKGUsbyl7aWYoQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gZTtpZihTeW1ib2wuaXRlcmF0b3IgaW4gT2JqZWN0KGUpKXJldHVybiB0KGUsbyk7dGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2VcIil9fSgpLEU9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7Zm9yKHZhciBvPTA7bzxlLmxlbmd0aDtvKyspe3ZhciBuPWVbb107bi5lbnVtZXJhYmxlPW4uZW51bWVyYWJsZXx8ITEsbi5jb25maWd1cmFibGU9ITAsXCJ2YWx1ZVwiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LG4ua2V5LG4pfX1yZXR1cm4gZnVuY3Rpb24oZSxvLG4pe3JldHVybiBvJiZ0KGUucHJvdG90eXBlLG8pLG4mJnQoZSxuKSxlfX0oKSx6PWZ1bmN0aW9uKHQsZSxvKXtmb3IodmFyIG49ITA7bjspe3ZhciBpPXQscj1lLHM9bztuPSExLG51bGw9PT1pJiYoaT1GdW5jdGlvbi5wcm90b3R5cGUpO3ZhciBhPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoaSxyKTtpZih2b2lkIDAhPT1hKXtpZihcInZhbHVlXCJpbiBhKXJldHVybiBhLnZhbHVlO3ZhciBmPWEuZ2V0O2lmKHZvaWQgMD09PWYpcmV0dXJuO3JldHVybiBmLmNhbGwocyl9dmFyIGw9T2JqZWN0LmdldFByb3RvdHlwZU9mKGkpO2lmKG51bGw9PT1sKXJldHVybjt0PWwsZT1yLG89cyxuPSEwLGE9bD12b2lkIDB9fTtpZihcInVuZGVmaW5lZFwiPT10eXBlb2YgeCl0aHJvdyBuZXcgRXJyb3IoXCJZb3UgbXVzdCBpbmNsdWRlIHRoZSB1dGlscy5qcyBmaWxlIGJlZm9yZSB0ZXRoZXIuanNcIik7dmFyIGo9eC5VdGlscyxyPWouZ2V0U2Nyb2xsUGFyZW50cyxhPWouZ2V0Qm91bmRzLGY9ai5nZXRPZmZzZXRQYXJlbnQsaD1qLmV4dGVuZCxkPWouYWRkQ2xhc3MsdT1qLnJlbW92ZUNsYXNzLG09ai51cGRhdGVDbGFzc2VzLE09ai5kZWZlcixfPWouZmx1c2gsbD1qLmdldFNjcm9sbEJhclNpemUscz1qLnJlbW92ZVV0aWxFbGVtZW50cyxZPWZ1bmN0aW9uKCl7aWYoXCJ1bmRlZmluZWRcIj09dHlwZW9mIGRvY3VtZW50KXJldHVyblwiXCI7Zm9yKHZhciB0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiksZT1bXCJ0cmFuc2Zvcm1cIixcIldlYmtpdFRyYW5zZm9ybVwiLFwiT1RyYW5zZm9ybVwiLFwiTW96VHJhbnNmb3JtXCIsXCJtc1RyYW5zZm9ybVwiXSxvPTA7bzxlLmxlbmd0aDsrK28pe3ZhciBuPWVbb107aWYodm9pZCAwIT09dC5zdHlsZVtuXSlyZXR1cm4gbn19KCksTD1bXSxEPWZ1bmN0aW9uKCl7TC5mb3JFYWNoKGZ1bmN0aW9uKHQpe3QucG9zaXRpb24oITEpfSksXygpfTshZnVuY3Rpb24oKXt2YXIgdD1udWxsLGU9bnVsbCxvPW51bGwsbj1mdW5jdGlvbiBpKCl7cmV0dXJuXCJ1bmRlZmluZWRcIiE9dHlwZW9mIGUmJmU+MTY/KGU9TWF0aC5taW4oZS0xNiwyNTApLHZvaWQobz1zZXRUaW1lb3V0KGksMjUwKSkpOnZvaWQoXCJ1bmRlZmluZWRcIiE9dHlwZW9mIHQmJmIoKS10PDEwfHwobnVsbCE9byYmKGNsZWFyVGltZW91dChvKSxvPW51bGwpLHQ9YigpLEQoKSxlPWIoKS10KSl9O1widW5kZWZpbmVkXCIhPXR5cGVvZiB3aW5kb3cmJlwidW5kZWZpbmVkXCIhPXR5cGVvZiB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lciYmW1wicmVzaXplXCIsXCJzY3JvbGxcIixcInRvdWNobW92ZVwiXS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKHQsbil9KX0oKTt2YXIgWD17Y2VudGVyOlwiY2VudGVyXCIsbGVmdDpcInJpZ2h0XCIscmlnaHQ6XCJsZWZ0XCJ9LEY9e21pZGRsZTpcIm1pZGRsZVwiLHRvcDpcImJvdHRvbVwiLGJvdHRvbTpcInRvcFwifSxIPXt0b3A6MCxsZWZ0OjAsbWlkZGxlOlwiNTAlXCIsY2VudGVyOlwiNTAlXCIsYm90dG9tOlwiMTAwJVwiLHJpZ2h0OlwiMTAwJVwifSxOPWZ1bmN0aW9uKHQsZSl7dmFyIG89dC5sZWZ0LG49dC50b3A7cmV0dXJuXCJhdXRvXCI9PT1vJiYobz1YW2UubGVmdF0pLFwiYXV0b1wiPT09biYmKG49RltlLnRvcF0pLHtsZWZ0Om8sdG9wOm59fSxVPWZ1bmN0aW9uKHQpe3ZhciBlPXQubGVmdCxvPXQudG9wO3JldHVyblwidW5kZWZpbmVkXCIhPXR5cGVvZiBIW3QubGVmdF0mJihlPUhbdC5sZWZ0XSksXCJ1bmRlZmluZWRcIiE9dHlwZW9mIEhbdC50b3BdJiYobz1IW3QudG9wXSkse2xlZnQ6ZSx0b3A6b319LFY9ZnVuY3Rpb24odCl7dmFyIGU9dC5zcGxpdChcIiBcIiksbz1CKGUsMiksbj1vWzBdLGk9b1sxXTtyZXR1cm57dG9wOm4sbGVmdDppfX0sUj1WLHE9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSh0KXt2YXIgbz10aGlzO24odGhpcyxlKSx6KE9iamVjdC5nZXRQcm90b3R5cGVPZihlLnByb3RvdHlwZSksXCJjb25zdHJ1Y3RvclwiLHRoaXMpLmNhbGwodGhpcyksdGhpcy5wb3NpdGlvbj10aGlzLnBvc2l0aW9uLmJpbmQodGhpcyksTC5wdXNoKHRoaXMpLHRoaXMuaGlzdG9yeT1bXSx0aGlzLnNldE9wdGlvbnModCwhMSkseC5tb2R1bGVzLmZvckVhY2goZnVuY3Rpb24odCl7XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHQuaW5pdGlhbGl6ZSYmdC5pbml0aWFsaXplLmNhbGwobyl9KSx0aGlzLnBvc2l0aW9uKCl9cmV0dXJuIHYoZSx0KSxFKGUsW3trZXk6XCJnZXRDbGFzc1wiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aDw9MHx8dm9pZCAwPT09YXJndW1lbnRzWzBdP1wiXCI6YXJndW1lbnRzWzBdLGU9dGhpcy5vcHRpb25zLmNsYXNzZXM7cmV0dXJuXCJ1bmRlZmluZWRcIiE9dHlwZW9mIGUmJmVbdF0/dGhpcy5vcHRpb25zLmNsYXNzZXNbdF06dGhpcy5vcHRpb25zLmNsYXNzUHJlZml4P3RoaXMub3B0aW9ucy5jbGFzc1ByZWZpeCtcIi1cIit0OnR9fSx7a2V5Olwic2V0T3B0aW9uc1wiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMsbz1hcmd1bWVudHMubGVuZ3RoPD0xfHx2b2lkIDA9PT1hcmd1bWVudHNbMV0/ITA6YXJndW1lbnRzWzFdLG49e29mZnNldDpcIjAgMFwiLHRhcmdldE9mZnNldDpcIjAgMFwiLHRhcmdldEF0dGFjaG1lbnQ6XCJhdXRvIGF1dG9cIixjbGFzc1ByZWZpeDpcInRldGhlclwifTt0aGlzLm9wdGlvbnM9aChuLHQpO3ZhciBpPXRoaXMub3B0aW9ucyxzPWkuZWxlbWVudCxhPWkudGFyZ2V0LGY9aS50YXJnZXRNb2RpZmllcjtpZih0aGlzLmVsZW1lbnQ9cyx0aGlzLnRhcmdldD1hLHRoaXMudGFyZ2V0TW9kaWZpZXI9ZixcInZpZXdwb3J0XCI9PT10aGlzLnRhcmdldD8odGhpcy50YXJnZXQ9ZG9jdW1lbnQuYm9keSx0aGlzLnRhcmdldE1vZGlmaWVyPVwidmlzaWJsZVwiKTpcInNjcm9sbC1oYW5kbGVcIj09PXRoaXMudGFyZ2V0JiYodGhpcy50YXJnZXQ9ZG9jdW1lbnQuYm9keSx0aGlzLnRhcmdldE1vZGlmaWVyPVwic2Nyb2xsLWhhbmRsZVwiKSxbXCJlbGVtZW50XCIsXCJ0YXJnZXRcIl0uZm9yRWFjaChmdW5jdGlvbih0KXtpZihcInVuZGVmaW5lZFwiPT10eXBlb2YgZVt0XSl0aHJvdyBuZXcgRXJyb3IoXCJUZXRoZXIgRXJyb3I6IEJvdGggZWxlbWVudCBhbmQgdGFyZ2V0IG11c3QgYmUgZGVmaW5lZFwiKTtcInVuZGVmaW5lZFwiIT10eXBlb2YgZVt0XS5qcXVlcnk/ZVt0XT1lW3RdWzBdOlwic3RyaW5nXCI9PXR5cGVvZiBlW3RdJiYoZVt0XT1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKGVbdF0pKX0pLGQodGhpcy5lbGVtZW50LHRoaXMuZ2V0Q2xhc3MoXCJlbGVtZW50XCIpKSx0aGlzLm9wdGlvbnMuYWRkVGFyZ2V0Q2xhc3NlcyE9PSExJiZkKHRoaXMudGFyZ2V0LHRoaXMuZ2V0Q2xhc3MoXCJ0YXJnZXRcIikpLCF0aGlzLm9wdGlvbnMuYXR0YWNobWVudCl0aHJvdyBuZXcgRXJyb3IoXCJUZXRoZXIgRXJyb3I6IFlvdSBtdXN0IHByb3ZpZGUgYW4gYXR0YWNobWVudFwiKTt0aGlzLnRhcmdldEF0dGFjaG1lbnQ9Uih0aGlzLm9wdGlvbnMudGFyZ2V0QXR0YWNobWVudCksdGhpcy5hdHRhY2htZW50PVIodGhpcy5vcHRpb25zLmF0dGFjaG1lbnQpLHRoaXMub2Zmc2V0PVYodGhpcy5vcHRpb25zLm9mZnNldCksdGhpcy50YXJnZXRPZmZzZXQ9Vih0aGlzLm9wdGlvbnMudGFyZ2V0T2Zmc2V0KSxcInVuZGVmaW5lZFwiIT10eXBlb2YgdGhpcy5zY3JvbGxQYXJlbnRzJiZ0aGlzLmRpc2FibGUoKSxcInNjcm9sbC1oYW5kbGVcIj09PXRoaXMudGFyZ2V0TW9kaWZpZXI/dGhpcy5zY3JvbGxQYXJlbnRzPVt0aGlzLnRhcmdldF06dGhpcy5zY3JvbGxQYXJlbnRzPXIodGhpcy50YXJnZXQpLHRoaXMub3B0aW9ucy5lbmFibGVkIT09ITEmJnRoaXMuZW5hYmxlKG8pfX0se2tleTpcImdldFRhcmdldEJvdW5kc1wiLHZhbHVlOmZ1bmN0aW9uKCl7aWYoXCJ1bmRlZmluZWRcIj09dHlwZW9mIHRoaXMudGFyZ2V0TW9kaWZpZXIpcmV0dXJuIGEodGhpcy50YXJnZXQpO2lmKFwidmlzaWJsZVwiPT09dGhpcy50YXJnZXRNb2RpZmllcil7aWYodGhpcy50YXJnZXQ9PT1kb2N1bWVudC5ib2R5KXJldHVybnt0b3A6cGFnZVlPZmZzZXQsbGVmdDpwYWdlWE9mZnNldCxoZWlnaHQ6aW5uZXJIZWlnaHQsd2lkdGg6aW5uZXJXaWR0aH07dmFyIHQ9YSh0aGlzLnRhcmdldCksZT17aGVpZ2h0OnQuaGVpZ2h0LHdpZHRoOnQud2lkdGgsdG9wOnQudG9wLGxlZnQ6dC5sZWZ0fTtyZXR1cm4gZS5oZWlnaHQ9TWF0aC5taW4oZS5oZWlnaHQsdC5oZWlnaHQtKHBhZ2VZT2Zmc2V0LXQudG9wKSksZS5oZWlnaHQ9TWF0aC5taW4oZS5oZWlnaHQsdC5oZWlnaHQtKHQudG9wK3QuaGVpZ2h0LShwYWdlWU9mZnNldCtpbm5lckhlaWdodCkpKSxlLmhlaWdodD1NYXRoLm1pbihpbm5lckhlaWdodCxlLmhlaWdodCksZS5oZWlnaHQtPTIsZS53aWR0aD1NYXRoLm1pbihlLndpZHRoLHQud2lkdGgtKHBhZ2VYT2Zmc2V0LXQubGVmdCkpLGUud2lkdGg9TWF0aC5taW4oZS53aWR0aCx0LndpZHRoLSh0LmxlZnQrdC53aWR0aC0ocGFnZVhPZmZzZXQraW5uZXJXaWR0aCkpKSxlLndpZHRoPU1hdGgubWluKGlubmVyV2lkdGgsZS53aWR0aCksZS53aWR0aC09MixlLnRvcDxwYWdlWU9mZnNldCYmKGUudG9wPXBhZ2VZT2Zmc2V0KSxlLmxlZnQ8cGFnZVhPZmZzZXQmJihlLmxlZnQ9cGFnZVhPZmZzZXQpLGV9aWYoXCJzY3JvbGwtaGFuZGxlXCI9PT10aGlzLnRhcmdldE1vZGlmaWVyKXt2YXIgdD12b2lkIDAsbz10aGlzLnRhcmdldDtvPT09ZG9jdW1lbnQuYm9keT8obz1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsdD17bGVmdDpwYWdlWE9mZnNldCx0b3A6cGFnZVlPZmZzZXQsaGVpZ2h0OmlubmVySGVpZ2h0LHdpZHRoOmlubmVyV2lkdGh9KTp0PWEobyk7dmFyIG49Z2V0Q29tcHV0ZWRTdHlsZShvKSxpPW8uc2Nyb2xsV2lkdGg+by5jbGllbnRXaWR0aHx8W24ub3ZlcmZsb3csbi5vdmVyZmxvd1hdLmluZGV4T2YoXCJzY3JvbGxcIik+PTB8fHRoaXMudGFyZ2V0IT09ZG9jdW1lbnQuYm9keSxyPTA7aSYmKHI9MTUpO3ZhciBzPXQuaGVpZ2h0LXBhcnNlRmxvYXQobi5ib3JkZXJUb3BXaWR0aCktcGFyc2VGbG9hdChuLmJvcmRlckJvdHRvbVdpZHRoKS1yLGU9e3dpZHRoOjE1LGhlaWdodDouOTc1KnMqKHMvby5zY3JvbGxIZWlnaHQpLGxlZnQ6dC5sZWZ0K3Qud2lkdGgtcGFyc2VGbG9hdChuLmJvcmRlckxlZnRXaWR0aCktMTV9LGY9MDs0MDg+cyYmdGhpcy50YXJnZXQ9PT1kb2N1bWVudC5ib2R5JiYoZj0tMTFlLTUqTWF0aC5wb3cocywyKS0uMDA3MjcqcysyMi41OCksdGhpcy50YXJnZXQhPT1kb2N1bWVudC5ib2R5JiYoZS5oZWlnaHQ9TWF0aC5tYXgoZS5oZWlnaHQsMjQpKTt2YXIgbD10aGlzLnRhcmdldC5zY3JvbGxUb3AvKG8uc2Nyb2xsSGVpZ2h0LXMpO3JldHVybiBlLnRvcD1sKihzLWUuaGVpZ2h0LWYpK3QudG9wK3BhcnNlRmxvYXQobi5ib3JkZXJUb3BXaWR0aCksdGhpcy50YXJnZXQ9PT1kb2N1bWVudC5ib2R5JiYoZS5oZWlnaHQ9TWF0aC5tYXgoZS5oZWlnaHQsMjQpKSxlfX19LHtrZXk6XCJjbGVhckNhY2hlXCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLl9jYWNoZT17fX19LHtrZXk6XCJjYWNoZVwiLHZhbHVlOmZ1bmN0aW9uKHQsZSl7cmV0dXJuXCJ1bmRlZmluZWRcIj09dHlwZW9mIHRoaXMuX2NhY2hlJiYodGhpcy5fY2FjaGU9e30pLFwidW5kZWZpbmVkXCI9PXR5cGVvZiB0aGlzLl9jYWNoZVt0XSYmKHRoaXMuX2NhY2hlW3RdPWUuY2FsbCh0aGlzKSksdGhpcy5fY2FjaGVbdF19fSx7a2V5OlwiZW5hYmxlXCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLGU9YXJndW1lbnRzLmxlbmd0aDw9MHx8dm9pZCAwPT09YXJndW1lbnRzWzBdPyEwOmFyZ3VtZW50c1swXTt0aGlzLm9wdGlvbnMuYWRkVGFyZ2V0Q2xhc3NlcyE9PSExJiZkKHRoaXMudGFyZ2V0LHRoaXMuZ2V0Q2xhc3MoXCJlbmFibGVkXCIpKSxkKHRoaXMuZWxlbWVudCx0aGlzLmdldENsYXNzKFwiZW5hYmxlZFwiKSksdGhpcy5lbmFibGVkPSEwLHRoaXMuc2Nyb2xsUGFyZW50cy5mb3JFYWNoKGZ1bmN0aW9uKGUpe2UhPT10LnRhcmdldC5vd25lckRvY3VtZW50JiZlLmFkZEV2ZW50TGlzdGVuZXIoXCJzY3JvbGxcIix0LnBvc2l0aW9uKX0pLGUmJnRoaXMucG9zaXRpb24oKX19LHtrZXk6XCJkaXNhYmxlXCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3UodGhpcy50YXJnZXQsdGhpcy5nZXRDbGFzcyhcImVuYWJsZWRcIikpLHUodGhpcy5lbGVtZW50LHRoaXMuZ2V0Q2xhc3MoXCJlbmFibGVkXCIpKSx0aGlzLmVuYWJsZWQ9ITEsXCJ1bmRlZmluZWRcIiE9dHlwZW9mIHRoaXMuc2Nyb2xsUGFyZW50cyYmdGhpcy5zY3JvbGxQYXJlbnRzLmZvckVhY2goZnVuY3Rpb24oZSl7ZS5yZW1vdmVFdmVudExpc3RlbmVyKFwic2Nyb2xsXCIsdC5wb3NpdGlvbil9KX19LHtrZXk6XCJkZXN0cm95XCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3RoaXMuZGlzYWJsZSgpLEwuZm9yRWFjaChmdW5jdGlvbihlLG8pe2U9PT10JiZMLnNwbGljZShvLDEpfSksMD09PUwubGVuZ3RoJiZzKCl9fSx7a2V5OlwidXBkYXRlQXR0YWNoQ2xhc3Nlc1wiLHZhbHVlOmZ1bmN0aW9uKHQsZSl7dmFyIG89dGhpczt0PXR8fHRoaXMuYXR0YWNobWVudCxlPWV8fHRoaXMudGFyZ2V0QXR0YWNobWVudDt2YXIgbj1bXCJsZWZ0XCIsXCJ0b3BcIixcImJvdHRvbVwiLFwicmlnaHRcIixcIm1pZGRsZVwiLFwiY2VudGVyXCJdO1widW5kZWZpbmVkXCIhPXR5cGVvZiB0aGlzLl9hZGRBdHRhY2hDbGFzc2VzJiZ0aGlzLl9hZGRBdHRhY2hDbGFzc2VzLmxlbmd0aCYmdGhpcy5fYWRkQXR0YWNoQ2xhc3Nlcy5zcGxpY2UoMCx0aGlzLl9hZGRBdHRhY2hDbGFzc2VzLmxlbmd0aCksXCJ1bmRlZmluZWRcIj09dHlwZW9mIHRoaXMuX2FkZEF0dGFjaENsYXNzZXMmJih0aGlzLl9hZGRBdHRhY2hDbGFzc2VzPVtdKTt2YXIgaT10aGlzLl9hZGRBdHRhY2hDbGFzc2VzO3QudG9wJiZpLnB1c2godGhpcy5nZXRDbGFzcyhcImVsZW1lbnQtYXR0YWNoZWRcIikrXCItXCIrdC50b3ApLHQubGVmdCYmaS5wdXNoKHRoaXMuZ2V0Q2xhc3MoXCJlbGVtZW50LWF0dGFjaGVkXCIpK1wiLVwiK3QubGVmdCksZS50b3AmJmkucHVzaCh0aGlzLmdldENsYXNzKFwidGFyZ2V0LWF0dGFjaGVkXCIpK1wiLVwiK2UudG9wKSxlLmxlZnQmJmkucHVzaCh0aGlzLmdldENsYXNzKFwidGFyZ2V0LWF0dGFjaGVkXCIpK1wiLVwiK2UubGVmdCk7dmFyIHI9W107bi5mb3JFYWNoKGZ1bmN0aW9uKHQpe3IucHVzaChvLmdldENsYXNzKFwiZWxlbWVudC1hdHRhY2hlZFwiKStcIi1cIit0KSxyLnB1c2goby5nZXRDbGFzcyhcInRhcmdldC1hdHRhY2hlZFwiKStcIi1cIit0KX0pLE0oZnVuY3Rpb24oKXtcInVuZGVmaW5lZFwiIT10eXBlb2Ygby5fYWRkQXR0YWNoQ2xhc3NlcyYmKG0oby5lbGVtZW50LG8uX2FkZEF0dGFjaENsYXNzZXMsciksby5vcHRpb25zLmFkZFRhcmdldENsYXNzZXMhPT0hMSYmbShvLnRhcmdldCxvLl9hZGRBdHRhY2hDbGFzc2VzLHIpLGRlbGV0ZSBvLl9hZGRBdHRhY2hDbGFzc2VzKX0pfX0se2tleTpcInBvc2l0aW9uXCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLGU9YXJndW1lbnRzLmxlbmd0aDw9MHx8dm9pZCAwPT09YXJndW1lbnRzWzBdPyEwOmFyZ3VtZW50c1swXTtpZih0aGlzLmVuYWJsZWQpe3RoaXMuY2xlYXJDYWNoZSgpO3ZhciBvPU4odGhpcy50YXJnZXRBdHRhY2htZW50LHRoaXMuYXR0YWNobWVudCk7dGhpcy51cGRhdGVBdHRhY2hDbGFzc2VzKHRoaXMuYXR0YWNobWVudCxvKTt2YXIgbj10aGlzLmNhY2hlKFwiZWxlbWVudC1ib3VuZHNcIixmdW5jdGlvbigpe3JldHVybiBhKHQuZWxlbWVudCl9KSxpPW4ud2lkdGgscj1uLmhlaWdodDtpZigwPT09aSYmMD09PXImJlwidW5kZWZpbmVkXCIhPXR5cGVvZiB0aGlzLmxhc3RTaXplKXt2YXIgcz10aGlzLmxhc3RTaXplO2k9cy53aWR0aCxyPXMuaGVpZ2h0fWVsc2UgdGhpcy5sYXN0U2l6ZT17d2lkdGg6aSxoZWlnaHQ6cn07dmFyIGg9dGhpcy5jYWNoZShcInRhcmdldC1ib3VuZHNcIixmdW5jdGlvbigpe3JldHVybiB0LmdldFRhcmdldEJvdW5kcygpfSksdT1oLGQ9QyhVKHRoaXMuYXR0YWNobWVudCkse3dpZHRoOmksaGVpZ2h0OnJ9KSxwPUMoVShvKSx1KSxjPUModGhpcy5vZmZzZXQse3dpZHRoOmksaGVpZ2h0OnJ9KSxnPUModGhpcy50YXJnZXRPZmZzZXQsdSk7ZD13KGQsYykscD13KHAsZyk7Zm9yKHZhciBtPWgubGVmdCtwLmxlZnQtZC5sZWZ0LHY9aC50b3ArcC50b3AtZC50b3AseT0wO3k8eC5tb2R1bGVzLmxlbmd0aDsrK3kpe3ZhciBiPXgubW9kdWxlc1t5XSxPPWIucG9zaXRpb24uY2FsbCh0aGlzLHtsZWZ0Om0sdG9wOnYsdGFyZ2V0QXR0YWNobWVudDpvLHRhcmdldFBvczpoLGVsZW1lbnRQb3M6bixvZmZzZXQ6ZCx0YXJnZXRPZmZzZXQ6cCxtYW51YWxPZmZzZXQ6YyxtYW51YWxUYXJnZXRPZmZzZXQ6ZyxzY3JvbGxiYXJTaXplOlMsYXR0YWNobWVudDp0aGlzLmF0dGFjaG1lbnR9KTtpZihPPT09ITEpcmV0dXJuITE7XCJ1bmRlZmluZWRcIiE9dHlwZW9mIE8mJlwib2JqZWN0XCI9PXR5cGVvZiBPJiYodj1PLnRvcCxtPU8ubGVmdCl9dmFyIEU9e3BhZ2U6e3RvcDp2LGxlZnQ6bX0sdmlld3BvcnQ6e3RvcDp2LXBhZ2VZT2Zmc2V0LGJvdHRvbTpwYWdlWU9mZnNldC12LXIraW5uZXJIZWlnaHQsbGVmdDptLXBhZ2VYT2Zmc2V0LHJpZ2h0OnBhZ2VYT2Zmc2V0LW0taStpbm5lcldpZHRofX0sQT10aGlzLnRhcmdldC5vd25lckRvY3VtZW50LFQ9QS5kZWZhdWx0VmlldyxTPXZvaWQgMDtyZXR1cm4gQS5ib2R5LnNjcm9sbFdpZHRoPlQuaW5uZXJXaWR0aCYmKFM9dGhpcy5jYWNoZShcInNjcm9sbGJhci1zaXplXCIsbCksRS52aWV3cG9ydC5ib3R0b20tPVMuaGVpZ2h0KSxBLmJvZHkuc2Nyb2xsSGVpZ2h0PlQuaW5uZXJIZWlnaHQmJihTPXRoaXMuY2FjaGUoXCJzY3JvbGxiYXItc2l6ZVwiLGwpLEUudmlld3BvcnQucmlnaHQtPVMud2lkdGgpLCgtMT09PVtcIlwiLFwic3RhdGljXCJdLmluZGV4T2YoQS5ib2R5LnN0eWxlLnBvc2l0aW9uKXx8LTE9PT1bXCJcIixcInN0YXRpY1wiXS5pbmRleE9mKEEuYm9keS5wYXJlbnRFbGVtZW50LnN0eWxlLnBvc2l0aW9uKSkmJihFLnBhZ2UuYm90dG9tPUEuYm9keS5zY3JvbGxIZWlnaHQtdi1yLEUucGFnZS5yaWdodD1BLmJvZHkuc2Nyb2xsV2lkdGgtbS1pKSxcInVuZGVmaW5lZFwiIT10eXBlb2YgdGhpcy5vcHRpb25zLm9wdGltaXphdGlvbnMmJnRoaXMub3B0aW9ucy5vcHRpbWl6YXRpb25zLm1vdmVFbGVtZW50IT09ITEmJlwidW5kZWZpbmVkXCI9PXR5cGVvZiB0aGlzLnRhcmdldE1vZGlmaWVyJiYhZnVuY3Rpb24oKXt2YXIgZT10LmNhY2hlKFwidGFyZ2V0LW9mZnNldHBhcmVudFwiLGZ1bmN0aW9uKCl7cmV0dXJuIGYodC50YXJnZXQpfSksbz10LmNhY2hlKFwidGFyZ2V0LW9mZnNldHBhcmVudC1ib3VuZHNcIixmdW5jdGlvbigpe3JldHVybiBhKGUpfSksbj1nZXRDb21wdXRlZFN0eWxlKGUpLGk9byxyPXt9O2lmKFtcIlRvcFwiLFwiTGVmdFwiLFwiQm90dG9tXCIsXCJSaWdodFwiXS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JbdC50b0xvd2VyQ2FzZSgpXT1wYXJzZUZsb2F0KG5bXCJib3JkZXJcIit0K1wiV2lkdGhcIl0pfSksby5yaWdodD1BLmJvZHkuc2Nyb2xsV2lkdGgtby5sZWZ0LWkud2lkdGgrci5yaWdodCxvLmJvdHRvbT1BLmJvZHkuc2Nyb2xsSGVpZ2h0LW8udG9wLWkuaGVpZ2h0K3IuYm90dG9tLEUucGFnZS50b3A+PW8udG9wK3IudG9wJiZFLnBhZ2UuYm90dG9tPj1vLmJvdHRvbSYmRS5wYWdlLmxlZnQ+PW8ubGVmdCtyLmxlZnQmJkUucGFnZS5yaWdodD49by5yaWdodCl7dmFyIHM9ZS5zY3JvbGxUb3AsbD1lLnNjcm9sbExlZnQ7RS5vZmZzZXQ9e3RvcDpFLnBhZ2UudG9wLW8udG9wK3Mtci50b3AsbGVmdDpFLnBhZ2UubGVmdC1vLmxlZnQrbC1yLmxlZnR9fX0oKSx0aGlzLm1vdmUoRSksdGhpcy5oaXN0b3J5LnVuc2hpZnQoRSksdGhpcy5oaXN0b3J5Lmxlbmd0aD4zJiZ0aGlzLmhpc3RvcnkucG9wKCksZSYmXygpLCEwfX19LHtrZXk6XCJtb3ZlXCIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztpZihcInVuZGVmaW5lZFwiIT10eXBlb2YgdGhpcy5lbGVtZW50LnBhcmVudE5vZGUpe3ZhciBvPXt9O2Zvcih2YXIgbiBpbiB0KXtvW25dPXt9O2Zvcih2YXIgaSBpbiB0W25dKXtmb3IodmFyIHI9ITEscz0wO3M8dGhpcy5oaXN0b3J5Lmxlbmd0aDsrK3Mpe3ZhciBhPXRoaXMuaGlzdG9yeVtzXTtpZihcInVuZGVmaW5lZFwiIT10eXBlb2YgYVtuXSYmIXkoYVtuXVtpXSx0W25dW2ldKSl7cj0hMDticmVha319cnx8KG9bbl1baV09ITApfX12YXIgbD17dG9wOlwiXCIsbGVmdDpcIlwiLHJpZ2h0OlwiXCIsYm90dG9tOlwiXCJ9LHU9ZnVuY3Rpb24odCxvKXt2YXIgbj1cInVuZGVmaW5lZFwiIT10eXBlb2YgZS5vcHRpb25zLm9wdGltaXphdGlvbnMsaT1uP2Uub3B0aW9ucy5vcHRpbWl6YXRpb25zLmdwdTpudWxsO2lmKGkhPT0hMSl7dmFyIHI9dm9pZCAwLHM9dm9pZCAwO3QudG9wPyhsLnRvcD0wLHI9by50b3ApOihsLmJvdHRvbT0wLHI9LW8uYm90dG9tKSx0LmxlZnQ/KGwubGVmdD0wLHM9by5sZWZ0KToobC5yaWdodD0wLHM9LW8ucmlnaHQpLGxbWV09XCJ0cmFuc2xhdGVYKFwiK01hdGgucm91bmQocykrXCJweCkgdHJhbnNsYXRlWShcIitNYXRoLnJvdW5kKHIpK1wicHgpXCIsXCJtc1RyYW5zZm9ybVwiIT09WSYmKGxbWV0rPVwiIHRyYW5zbGF0ZVooMClcIil9ZWxzZSB0LnRvcD9sLnRvcD1vLnRvcCtcInB4XCI6bC5ib3R0b209by5ib3R0b20rXCJweFwiLHQubGVmdD9sLmxlZnQ9by5sZWZ0K1wicHhcIjpsLnJpZ2h0PW8ucmlnaHQrXCJweFwifSxkPSExO2lmKChvLnBhZ2UudG9wfHxvLnBhZ2UuYm90dG9tKSYmKG8ucGFnZS5sZWZ0fHxvLnBhZ2UucmlnaHQpPyhsLnBvc2l0aW9uPVwiYWJzb2x1dGVcIix1KG8ucGFnZSx0LnBhZ2UpKTooby52aWV3cG9ydC50b3B8fG8udmlld3BvcnQuYm90dG9tKSYmKG8udmlld3BvcnQubGVmdHx8by52aWV3cG9ydC5yaWdodCk/KGwucG9zaXRpb249XCJmaXhlZFwiLHUoby52aWV3cG9ydCx0LnZpZXdwb3J0KSk6XCJ1bmRlZmluZWRcIiE9dHlwZW9mIG8ub2Zmc2V0JiZvLm9mZnNldC50b3AmJm8ub2Zmc2V0LmxlZnQ/IWZ1bmN0aW9uKCl7bC5wb3NpdGlvbj1cImFic29sdXRlXCI7dmFyIG49ZS5jYWNoZShcInRhcmdldC1vZmZzZXRwYXJlbnRcIixmdW5jdGlvbigpe3JldHVybiBmKGUudGFyZ2V0KX0pO2YoZS5lbGVtZW50KSE9PW4mJk0oZnVuY3Rpb24oKXtlLmVsZW1lbnQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChlLmVsZW1lbnQpLG4uYXBwZW5kQ2hpbGQoZS5lbGVtZW50KX0pLHUoby5vZmZzZXQsdC5vZmZzZXQpLGQ9ITB9KCk6KGwucG9zaXRpb249XCJhYnNvbHV0ZVwiLHUoe3RvcDohMCxsZWZ0OiEwfSx0LnBhZ2UpKSwhZCl7Zm9yKHZhciBwPSEwLGM9dGhpcy5lbGVtZW50LnBhcmVudE5vZGU7YyYmMT09PWMubm9kZVR5cGUmJlwiQk9EWVwiIT09Yy50YWdOYW1lOyl7aWYoXCJzdGF0aWNcIiE9PWdldENvbXB1dGVkU3R5bGUoYykucG9zaXRpb24pe3A9ITE7YnJlYWt9Yz1jLnBhcmVudE5vZGV9cHx8KHRoaXMuZWxlbWVudC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuZWxlbWVudCksdGhpcy5lbGVtZW50Lm93bmVyRG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0aGlzLmVsZW1lbnQpKX12YXIgZz17fSxtPSExO2Zvcih2YXIgaSBpbiBsKXt2YXIgdj1sW2ldLGI9dGhpcy5lbGVtZW50LnN0eWxlW2ldO2IhPT12JiYobT0hMCxnW2ldPXYpfW0mJk0oZnVuY3Rpb24oKXtoKGUuZWxlbWVudC5zdHlsZSxnKX0pfX19XSksZX0oayk7cS5tb2R1bGVzPVtdLHgucG9zaXRpb249RDt2YXIgST1oKHEseCksQj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlKXt2YXIgbz1bXSxuPSEwLGk9ITEscj12b2lkIDA7dHJ5e2Zvcih2YXIgcyxhPXRbU3ltYm9sLml0ZXJhdG9yXSgpOyEobj0ocz1hLm5leHQoKSkuZG9uZSkmJihvLnB1c2gocy52YWx1ZSksIWV8fG8ubGVuZ3RoIT09ZSk7bj0hMCk7fWNhdGNoKGYpe2k9ITAscj1mfWZpbmFsbHl7dHJ5eyFuJiZhW1wicmV0dXJuXCJdJiZhW1wicmV0dXJuXCJdKCl9ZmluYWxseXtpZihpKXRocm93IHJ9fXJldHVybiBvfXJldHVybiBmdW5jdGlvbihlLG8pe2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIGU7aWYoU3ltYm9sLml0ZXJhdG9yIGluIE9iamVjdChlKSlyZXR1cm4gdChlLG8pO3Rocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlXCIpfX0oKSxqPXguVXRpbHMsYT1qLmdldEJvdW5kcyxoPWouZXh0ZW5kLG09ai51cGRhdGVDbGFzc2VzLE09ai5kZWZlciwkPVtcImxlZnRcIixcInRvcFwiLFwicmlnaHRcIixcImJvdHRvbVwiXTt4Lm1vZHVsZXMucHVzaCh7cG9zaXRpb246ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxvPXQudG9wLG49dC5sZWZ0LGk9dC50YXJnZXRBdHRhY2htZW50O2lmKCF0aGlzLm9wdGlvbnMuY29uc3RyYWludHMpcmV0dXJuITA7dmFyIHI9dGhpcy5jYWNoZShcImVsZW1lbnQtYm91bmRzXCIsZnVuY3Rpb24oKXtyZXR1cm4gYShlLmVsZW1lbnQpfSkscz1yLmhlaWdodCxmPXIud2lkdGg7aWYoMD09PWYmJjA9PT1zJiZcInVuZGVmaW5lZFwiIT10eXBlb2YgdGhpcy5sYXN0U2l6ZSl7dmFyIGw9dGhpcy5sYXN0U2l6ZTtmPWwud2lkdGgscz1sLmhlaWdodH12YXIgdT10aGlzLmNhY2hlKFwidGFyZ2V0LWJvdW5kc1wiLGZ1bmN0aW9uKCl7cmV0dXJuIGUuZ2V0VGFyZ2V0Qm91bmRzKCl9KSxkPXUuaGVpZ2h0LHA9dS53aWR0aCxjPVt0aGlzLmdldENsYXNzKFwicGlubmVkXCIpLHRoaXMuZ2V0Q2xhc3MoXCJvdXQtb2YtYm91bmRzXCIpXTt0aGlzLm9wdGlvbnMuY29uc3RyYWludHMuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgZT10Lm91dE9mQm91bmRzQ2xhc3Msbz10LnBpbm5lZENsYXNzO2UmJmMucHVzaChlKSxvJiZjLnB1c2gobyl9KSxjLmZvckVhY2goZnVuY3Rpb24odCl7W1wibGVmdFwiLFwidG9wXCIsXCJyaWdodFwiLFwiYm90dG9tXCJdLmZvckVhY2goZnVuY3Rpb24oZSl7Yy5wdXNoKHQrXCItXCIrZSl9KX0pO3ZhciBnPVtdLHY9aCh7fSxpKSx5PWgoe30sdGhpcy5hdHRhY2htZW50KTtyZXR1cm4gdGhpcy5vcHRpb25zLmNvbnN0cmFpbnRzLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIHI9dC50byxhPXQuYXR0YWNobWVudCxsPXQucGluO1widW5kZWZpbmVkXCI9PXR5cGVvZiBhJiYoYT1cIlwiKTt2YXIgaD12b2lkIDAsdT12b2lkIDA7aWYoYS5pbmRleE9mKFwiIFwiKT49MCl7dmFyIGM9YS5zcGxpdChcIiBcIiksbT1CKGMsMik7dT1tWzBdLGg9bVsxXX1lbHNlIGg9dT1hO3ZhciBiPU8oZSxyKTsoXCJ0YXJnZXRcIj09PXV8fFwiYm90aFwiPT09dSkmJihvPGJbMV0mJlwidG9wXCI9PT12LnRvcCYmKG8rPWQsdi50b3A9XCJib3R0b21cIiksbytzPmJbM10mJlwiYm90dG9tXCI9PT12LnRvcCYmKG8tPWQsdi50b3A9XCJ0b3BcIikpLFwidG9nZXRoZXJcIj09PXUmJihcInRvcFwiPT09di50b3AmJihcImJvdHRvbVwiPT09eS50b3AmJm88YlsxXT8obys9ZCx2LnRvcD1cImJvdHRvbVwiLG8rPXMseS50b3A9XCJ0b3BcIik6XCJ0b3BcIj09PXkudG9wJiZvK3M+YlszXSYmby0ocy1kKT49YlsxXSYmKG8tPXMtZCx2LnRvcD1cImJvdHRvbVwiLHkudG9wPVwiYm90dG9tXCIpKSxcImJvdHRvbVwiPT09di50b3AmJihcInRvcFwiPT09eS50b3AmJm8rcz5iWzNdPyhvLT1kLHYudG9wPVwidG9wXCIsby09cyx5LnRvcD1cImJvdHRvbVwiKTpcImJvdHRvbVwiPT09eS50b3AmJm88YlsxXSYmbysoMipzLWQpPD1iWzNdJiYobys9cy1kLHYudG9wPVwidG9wXCIseS50b3A9XCJ0b3BcIikpLFwibWlkZGxlXCI9PT12LnRvcCYmKG8rcz5iWzNdJiZcInRvcFwiPT09eS50b3A/KG8tPXMseS50b3A9XCJib3R0b21cIik6bzxiWzFdJiZcImJvdHRvbVwiPT09eS50b3AmJihvKz1zLHkudG9wPVwidG9wXCIpKSksKFwidGFyZ2V0XCI9PT1ofHxcImJvdGhcIj09PWgpJiYobjxiWzBdJiZcImxlZnRcIj09PXYubGVmdCYmKG4rPXAsdi5sZWZ0PVwicmlnaHRcIiksbitmPmJbMl0mJlwicmlnaHRcIj09PXYubGVmdCYmKG4tPXAsdi5sZWZ0PVwibGVmdFwiKSksXCJ0b2dldGhlclwiPT09aCYmKG48YlswXSYmXCJsZWZ0XCI9PT12LmxlZnQ/XCJyaWdodFwiPT09eS5sZWZ0PyhuKz1wLHYubGVmdD1cInJpZ2h0XCIsbis9Zix5LmxlZnQ9XCJsZWZ0XCIpOlwibGVmdFwiPT09eS5sZWZ0JiYobis9cCx2LmxlZnQ9XCJyaWdodFwiLG4tPWYseS5sZWZ0PVwicmlnaHRcIik6bitmPmJbMl0mJlwicmlnaHRcIj09PXYubGVmdD9cImxlZnRcIj09PXkubGVmdD8obi09cCx2LmxlZnQ9XCJsZWZ0XCIsbi09Zix5LmxlZnQ9XCJyaWdodFwiKTpcInJpZ2h0XCI9PT15LmxlZnQmJihuLT1wLHYubGVmdD1cImxlZnRcIixuKz1mLHkubGVmdD1cImxlZnRcIik6XCJjZW50ZXJcIj09PXYubGVmdCYmKG4rZj5iWzJdJiZcImxlZnRcIj09PXkubGVmdD8obi09Zix5LmxlZnQ9XCJyaWdodFwiKTpuPGJbMF0mJlwicmlnaHRcIj09PXkubGVmdCYmKG4rPWYseS5sZWZ0PVwibGVmdFwiKSkpLChcImVsZW1lbnRcIj09PXV8fFwiYm90aFwiPT09dSkmJihvPGJbMV0mJlwiYm90dG9tXCI9PT15LnRvcCYmKG8rPXMseS50b3A9XCJ0b3BcIiksbytzPmJbM10mJlwidG9wXCI9PT15LnRvcCYmKG8tPXMseS50b3A9XCJib3R0b21cIikpLChcImVsZW1lbnRcIj09PWh8fFwiYm90aFwiPT09aCkmJihuPGJbMF0mJihcInJpZ2h0XCI9PT15LmxlZnQ/KG4rPWYseS5sZWZ0PVwibGVmdFwiKTpcImNlbnRlclwiPT09eS5sZWZ0JiYobis9Zi8yLHkubGVmdD1cImxlZnRcIikpLG4rZj5iWzJdJiYoXCJsZWZ0XCI9PT15LmxlZnQ/KG4tPWYseS5sZWZ0PVwicmlnaHRcIik6XCJjZW50ZXJcIj09PXkubGVmdCYmKG4tPWYvMix5LmxlZnQ9XCJyaWdodFwiKSkpLFwic3RyaW5nXCI9PXR5cGVvZiBsP2w9bC5zcGxpdChcIixcIikubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LnRyaW0oKX0pOmw9PT0hMCYmKGw9W1widG9wXCIsXCJsZWZ0XCIsXCJyaWdodFwiLFwiYm90dG9tXCJdKSxsPWx8fFtdO3ZhciB3PVtdLEM9W107bzxiWzFdJiYobC5pbmRleE9mKFwidG9wXCIpPj0wPyhvPWJbMV0sdy5wdXNoKFwidG9wXCIpKTpDLnB1c2goXCJ0b3BcIikpLG8rcz5iWzNdJiYobC5pbmRleE9mKFwiYm90dG9tXCIpPj0wPyhvPWJbM10tcyx3LnB1c2goXCJib3R0b21cIikpOkMucHVzaChcImJvdHRvbVwiKSksbjxiWzBdJiYobC5pbmRleE9mKFwibGVmdFwiKT49MD8obj1iWzBdLHcucHVzaChcImxlZnRcIikpOkMucHVzaChcImxlZnRcIikpLG4rZj5iWzJdJiYobC5pbmRleE9mKFwicmlnaHRcIik+PTA/KG49YlsyXS1mLHcucHVzaChcInJpZ2h0XCIpKTpDLnB1c2goXCJyaWdodFwiKSksdy5sZW5ndGgmJiFmdW5jdGlvbigpe3ZhciB0PXZvaWQgMDt0PVwidW5kZWZpbmVkXCIhPXR5cGVvZiBlLm9wdGlvbnMucGlubmVkQ2xhc3M/ZS5vcHRpb25zLnBpbm5lZENsYXNzOmUuZ2V0Q2xhc3MoXCJwaW5uZWRcIiksZy5wdXNoKHQpLHcuZm9yRWFjaChmdW5jdGlvbihlKXtnLnB1c2godCtcIi1cIitlKX0pfSgpLEMubGVuZ3RoJiYhZnVuY3Rpb24oKXt2YXIgdD12b2lkIDA7dD1cInVuZGVmaW5lZFwiIT10eXBlb2YgZS5vcHRpb25zLm91dE9mQm91bmRzQ2xhc3M/ZS5vcHRpb25zLm91dE9mQm91bmRzQ2xhc3M6ZS5nZXRDbGFzcyhcIm91dC1vZi1ib3VuZHNcIiksZy5wdXNoKHQpLEMuZm9yRWFjaChmdW5jdGlvbihlKXtnLnB1c2godCtcIi1cIitlKX0pfSgpLCh3LmluZGV4T2YoXCJsZWZ0XCIpPj0wfHx3LmluZGV4T2YoXCJyaWdodFwiKT49MCkmJih5LmxlZnQ9di5sZWZ0PSExKSwody5pbmRleE9mKFwidG9wXCIpPj0wfHx3LmluZGV4T2YoXCJib3R0b21cIik+PTApJiYoeS50b3A9di50b3A9ITEpLCh2LnRvcCE9PWkudG9wfHx2LmxlZnQhPT1pLmxlZnR8fHkudG9wIT09ZS5hdHRhY2htZW50LnRvcHx8eS5sZWZ0IT09ZS5hdHRhY2htZW50LmxlZnQpJiYoZS51cGRhdGVBdHRhY2hDbGFzc2VzKHksdiksZS50cmlnZ2VyKFwidXBkYXRlXCIse2F0dGFjaG1lbnQ6eSx0YXJnZXRBdHRhY2htZW50OnZ9KSl9KSxNKGZ1bmN0aW9uKCl7ZS5vcHRpb25zLmFkZFRhcmdldENsYXNzZXMhPT0hMSYmbShlLnRhcmdldCxnLGMpLG0oZS5lbGVtZW50LGcsYyl9KSx7dG9wOm8sbGVmdDpufX19KTt2YXIgaj14LlV0aWxzLGE9ai5nZXRCb3VuZHMsbT1qLnVwZGF0ZUNsYXNzZXMsTT1qLmRlZmVyO3gubW9kdWxlcy5wdXNoKHtwb3NpdGlvbjpmdW5jdGlvbih0KXt2YXIgZT10aGlzLG89dC50b3Asbj10LmxlZnQsaT10aGlzLmNhY2hlKFwiZWxlbWVudC1ib3VuZHNcIixmdW5jdGlvbigpe3JldHVybiBhKGUuZWxlbWVudCl9KSxyPWkuaGVpZ2h0LHM9aS53aWR0aCxmPXRoaXMuZ2V0VGFyZ2V0Qm91bmRzKCksbD1vK3IsaD1uK3MsdT1bXTtvPD1mLmJvdHRvbSYmbD49Zi50b3AmJltcImxlZnRcIixcInJpZ2h0XCJdLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIGU9Zlt0XTsoZT09PW58fGU9PT1oKSYmdS5wdXNoKHQpfSksbjw9Zi5yaWdodCYmaD49Zi5sZWZ0JiZbXCJ0b3BcIixcImJvdHRvbVwiXS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPWZbdF07KGU9PT1vfHxlPT09bCkmJnUucHVzaCh0KX0pO3ZhciBkPVtdLHA9W10sYz1bXCJsZWZ0XCIsXCJ0b3BcIixcInJpZ2h0XCIsXCJib3R0b21cIl07cmV0dXJuIGQucHVzaCh0aGlzLmdldENsYXNzKFwiYWJ1dHRlZFwiKSksYy5mb3JFYWNoKGZ1bmN0aW9uKHQpe2QucHVzaChlLmdldENsYXNzKFwiYWJ1dHRlZFwiKStcIi1cIit0KX0pLHUubGVuZ3RoJiZwLnB1c2godGhpcy5nZXRDbGFzcyhcImFidXR0ZWRcIikpLHUuZm9yRWFjaChmdW5jdGlvbih0KXtwLnB1c2goZS5nZXRDbGFzcyhcImFidXR0ZWRcIikrXCItXCIrdCl9KSxNKGZ1bmN0aW9uKCl7ZS5vcHRpb25zLmFkZFRhcmdldENsYXNzZXMhPT0hMSYmbShlLnRhcmdldCxwLGQpLG0oZS5lbGVtZW50LHAsZCl9KSwhMH19KTt2YXIgQj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlKXt2YXIgbz1bXSxuPSEwLGk9ITEscj12b2lkIDA7dHJ5e2Zvcih2YXIgcyxhPXRbU3ltYm9sLml0ZXJhdG9yXSgpOyEobj0ocz1hLm5leHQoKSkuZG9uZSkmJihvLnB1c2gocy52YWx1ZSksIWV8fG8ubGVuZ3RoIT09ZSk7bj0hMCk7fWNhdGNoKGYpe2k9ITAscj1mfWZpbmFsbHl7dHJ5eyFuJiZhW1wicmV0dXJuXCJdJiZhW1wicmV0dXJuXCJdKCl9ZmluYWxseXtpZihpKXRocm93IHJ9fXJldHVybiBvfXJldHVybiBmdW5jdGlvbihlLG8pe2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIGU7aWYoU3ltYm9sLml0ZXJhdG9yIGluIE9iamVjdChlKSlyZXR1cm4gdChlLG8pO3Rocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlXCIpfX0oKTtyZXR1cm4geC5tb2R1bGVzLnB1c2goe3Bvc2l0aW9uOmZ1bmN0aW9uKHQpe3ZhciBlPXQudG9wLG89dC5sZWZ0O2lmKHRoaXMub3B0aW9ucy5zaGlmdCl7dmFyIG49dGhpcy5vcHRpb25zLnNoaWZ0O1wiZnVuY3Rpb25cIj09dHlwZW9mIHRoaXMub3B0aW9ucy5zaGlmdCYmKG49dGhpcy5vcHRpb25zLnNoaWZ0LmNhbGwodGhpcyx7dG9wOmUsbGVmdDpvfSkpO3ZhciBpPXZvaWQgMCxyPXZvaWQgMDtpZihcInN0cmluZ1wiPT10eXBlb2Ygbil7bj1uLnNwbGl0KFwiIFwiKSxuWzFdPW5bMV18fG5bMF07dmFyIHM9bixhPUIocywyKTtpPWFbMF0scj1hWzFdLGk9cGFyc2VGbG9hdChpLDEwKSxyPXBhcnNlRmxvYXQociwxMCl9ZWxzZSBpPW4udG9wLHI9bi5sZWZ0O3JldHVybiBlKz1pLG8rPXIse3RvcDplLGxlZnQ6b319fX0pLEl9KTsiLCJkZWZpbmUoZnVuY3Rpb24oKSB7XG5cbiAgICByZXR1cm4ge1xuXG4gICAgICAgIGluaXQoKSB7XG4gICAgICAgICAgICAkKGRvY3VtZW50KS5vbignc2hvdy5icy5tb2RhbCcsICcuanMtYWpheC1tb2RhbCcsIHRoaXMuaW5pdE1vZGFscyk7XG4gICAgICAgIH0sXG5cblxuICAgICAgICBpbml0TW9kYWxzKGUpIHtcbiAgICAgICAgICAgIHZhciAkbW9kYWwgPSAkKHRoaXMpO1xuXG5cbiAgICAgICAgICAgIGlmICghJG1vZGFsLmRhdGEoJ2xvYWRlZCcpKSB7XG4gICAgICAgICAgICAgICAgdmFyICRidG4gPSAkKGUucmVsYXRlZFRhcmdldCksXG4gICAgICAgICAgICAgICAgICAgIGxpbmsgPSAkYnRuLmRhdGEoJ2xpbmsnKTtcblxuICAgICAgICAgICAgICAgICRtb2RhbC5kYXRhKCdsb2FkZWQnLCB0cnVlKTtcbiAgICAgICAgICAgICAgICAkbW9kYWwuZmluZCgnLmpzLWFqYXgtbW9kYWwtYm9keScpLmFwcGVuZCgnPGlmcmFtZSBjbGFzcz1cImFqYXgtbW9kYWxfX2JvZHlfX2lmcmFtZVwiIGZyYW1lYm9yZGVyPVwiMFwiIHNyYz1cIicgKyBsaW5rICsgJ1wiIHdpZHRoPVwiMTAwJVwiIGhlaWdodD1cIjEwMCVcIiBzY3JvbGxpbmc9XCJhdXRvXCI+PC9pZnJhbWU+Jyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG5cblxuICAgICAgICByZXNldEFqYXhNb2RhbHMoKSB7XG4gICAgICAgICAgICAkKCcuanMtYWpheC1tb2RhbCcpLm9mZignc2hvdy5icy5tb2RhbCcsIHRoaXMuaW5pdE1vZGFscyk7XG4gICAgICAgICAgICAkKCcuanMtYWpheC1tb2RhbCcpLm9uKCdzaG93LmJzLm1vZGFsJywgdGhpcy5pbml0TW9kYWxzKTtcbiAgICAgICAgfSxcbiAgICB9XG59KTtcbiIsImRlZmluZShmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChuKSB7XG4gICAgICAgIHZhciBhID0gdGhpcy5nZW5lcmFsO1xuICAgICAgICBhLmRlYm91bmNlID0gZnVuY3Rpb24gKG4sIGEsIGUpIHtcbiAgICAgICAgICAgIHZhciB0O1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICB2YXIgciA9IHRoaXMsIHUgPSBhcmd1bWVudHMsIGkgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIHQgPSBudWxsLCBlIHx8IG4uYXBwbHkociwgdSlcbiAgICAgICAgICAgICAgICB9LCBvID0gZSAmJiAhdDtcbiAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQodCksIHQgPSBzZXRUaW1lb3V0KGksIGEpLCBvICYmIG4uYXBwbHkociwgdSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgYS5lYXNlSW5PdXRRdWFkID0gZnVuY3Rpb24gKG4sIGEsIGUsIHQpIHtcbiAgICAgICAgICAgIHJldHVybiBuIC89IHQgLyAyLCAxID4gbiA/IGUgLyAyICogbiAqIG4gKyBhIDogKG4tLSwgLWUgLyAyICogKG4gKiAobiAtIDIpIC0gMSkgKyBhKVxuICAgICAgICB9LCBhLmFuaW1hdGUgPSBmdW5jdGlvbiAobiwgYSwgZSwgdCwgciwgdSkge1xuICAgICAgICAgICAgbiAmJiAod2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZShmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgbi5zdHlsZVthXSA9IHJcbiAgICAgICAgICAgIH0sIHUpLCBuLnN0eWxlW2FdID0gdClcbiAgICAgICAgfVxuICAgIH1cbn0pOyIsImRlZmluZShmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICh0LCBlKSB7XG4gICAgICAgIHZhciBhLCBvLCBuLCBjLCBpLCBsLCByID0gMTUwLCB1ID0gMCwgcyA9IFwianMtdG9nZ2xlLWJ0blwiLCBnID0gXCJ0b2dnbGUtYnRuLS1hY3RpdmVcIiwgZCA9IFwidG9nZ2xlLWl0ZW0tLWFjdGl2ZVwiLFxuICAgICAgICAgICAgZiA9IFwidG9nZ2xlLWl0ZW1fX2NvbnRlbnRcIjtcbiAgICAgICAgbyA9IGZ1bmN0aW9uICh0LCBlLCBhKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBvID0gZS5zcGxpdChcIiBcIiksIG4gPSAwLCBjID0gby5sZW5ndGg7IGMgPiBuOyBuKyspIHQuYWRkRXZlbnRMaXN0ZW5lcihvW25dLCBhLCAhMSlcbiAgICAgICAgfSwgbiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIFtdLmZvckVhY2guY2FsbChkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFwiLlwiICsgcyksIGZ1bmN0aW9uICh0KSB7XG4gICAgICAgICAgICAgICAgbyh0LCBcImNsaWNrIHRvdWNoc3RhcnQgbW91c2Vkb3duXCIsIGZ1bmN0aW9uICh0KSB7XG4gICAgICAgICAgICAgICAgICAgIHQucHJldmVudERlZmF1bHQoKVxuICAgICAgICAgICAgICAgIH0pLCBvKHQsIFwidG91Y2hlbmQgbW91c2V1cFwiLCBmdW5jdGlvbiAoZSkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgYSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwodC5nZXRBdHRyaWJ1dGUoXCJkYXRhLXRhcmdldFwiKSlbMF0sXG4gICAgICAgICAgICAgICAgICAgICAgICBvID0gYS5xdWVyeVNlbGVjdG9yQWxsKFwiLlwiICsgZilbMF0sXG4gICAgICAgICAgICAgICAgICAgICAgICBuID0gby5vZmZzZXRIZWlnaHQsIHYgPSBhLmNsYXNzTGlzdC5jb250YWlucyhkKSwgYiA9IHQuZ2V0QXR0cmlidXRlKFwiZGF0YS1oaWRlLW90aGVyc1wiKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHUgPSBudWxsICE9PSB0LmdldEF0dHJpYnV0ZShcImRhdGEtZHVyYXRpb25cIikgPyB0LmdldEF0dHJpYnV0ZShcImRhdGEtZHVyYXRpb25cIikgOiByLCB2KSBpKHQsIGEpOyBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGggPSB0LmdldEF0dHJpYnV0ZShcImRhdGEtdGFyZ2V0XCIpLCBtID0gdC5nZXRBdHRyaWJ1dGUoXCJkYXRhLWxldmVsXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdLmZvckVhY2guY2FsbChkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFwiLlwiICsgcyArICdbZGF0YS1sZXZlbD1cIicgKyBtICsgJ1wiXScpLCBmdW5jdGlvbiAodCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZSA9IHQuZ2V0QXR0cmlidXRlKFwiZGF0YS10YXJnZXRcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGggIT09IGUgJiYgdC5jbGFzc0xpc3QuY29udGFpbnMoZykgJiYgbCh0LCBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKGUpWzBdKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBjKHQsIGEsIG8sIG4pXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgfSlcbiAgICAgICAgfSwgYyA9IGZ1bmN0aW9uICh0LCBlLCBhLCBvKSB7XG4gICAgICAgICAgICBjYXJnb2JheS5nZW5lcmFsLmFuaW1hdGUoZSwgXCJoZWlnaHRcIiwgXCJweFwiLCBvLCBcImF1dG9cIiwgdSksIHQuY2xhc3NMaXN0LmFkZChnKSwgZS5jbGFzc0xpc3QuYWRkKGQpXG4gICAgICAgIH0sIGkgPSBmdW5jdGlvbiAodCwgZSwgYSwgbykge1xuICAgICAgICAgICAgY2FyZ29iYXkuZ2VuZXJhbC5hbmltYXRlKGUsIFwiaGVpZ2h0XCIsIFwicHhcIiwgMCwgbywgdSksIHQuY2xhc3NMaXN0LnJlbW92ZShnKSwgZS5jbGFzc0xpc3QucmVtb3ZlKGQpXG4gICAgICAgIH0sIGwgPSBmdW5jdGlvbiAodCwgZSkge1xuICAgICAgICAgICAgdC5jbGFzc0xpc3QucmVtb3ZlKGcpLCBlLnN0eWxlLmhlaWdodCA9IDAsIGUuY2xhc3NMaXN0LnJlbW92ZShkKVxuICAgICAgICB9LCBhID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbigpXG4gICAgICAgIH0oKVxuICAgIH1cbn0pOyIsImRlZmluZShmdW5jdGlvbigpIHtcblxuICAgIHJldHVybiB7XG5cbiAgICAgICAgaW5pdCgpIHtcbiAgICAgICAgICAgIHRoaXMudXJsQ2hvb3NlcigpO1xuICAgICAgICAgICAgdGhpcy5pbml0RGVsQnRuKCk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLy8gRGVsIGJ0blxuICAgICAgICBpbml0RGVsQnRuKCkge1xuICAgICAgICAgICAgJCgnYm9keScpLm9uKCdjbGljaycsICcuanMtbWVkaWEtY2hvb3Nlci1kZWwtcHJldmlldy1idG4nLCBmdW5jdGlvbiAoZSkge1xuICAgICAgICAgICAgICAgIHZhciAkdGhpcyA9ICQodGhpcyksXG4gICAgICAgICAgICAgICAgICAgIGxpbmtlZElEID0gJHRoaXMuZGF0YSgnbGlua2VkLWlkJyksXG4gICAgICAgICAgICAgICAgICAgICR3aWRnZXQgPSAkKCcjJyArIGxpbmtlZElEICsgJy13aWRnZXQnKSxcbiAgICAgICAgICAgICAgICAgICAgJGlucHV0ID0gJCgnIycgKyBsaW5rZWRJRCk7XG5cbiAgICAgICAgICAgICAgICAkdGhpcy5wYXJlbnQoKS5maW5kKCcubWVkaWEtY2hvb3Nlcl9fcHJldmlldycpLnJlbW92ZSgpO1xuXG4gICAgICAgICAgICAgICAgJChcIi5tZWRpYS10aHVtYm5haWxfX2ljb25cIikucmVtb3ZlKCk7XG5cbiAgICAgICAgICAgICAgICAkd2lkZ2V0LnJlbW92ZUNsYXNzKCdtZWRpYS1jaG9vc2VyLS1jaG9vc2VuJyk7XG4gICAgICAgICAgICAgICAgJGlucHV0LnZhbCgnJyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcblxuICAgICAgICAvLyBVUkwtQ2hvb3NlclxuICAgICAgICB1cmxDaG9vc2VyKCkge1xuXG4gICAgICAgICAgICAvLyBMaW5rIENob29zZXIgc2VsZWN0XG4gICAgICAgICAgICAkKCdib2R5Jykub24oJ2NsaWNrJywgJy5qcy11cmwtY2hvb3Nlci1saW5rLXNlbGVjdCcsIGZ1bmN0aW9uIChlKSB7XG4gICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICAgICAgICAgICAgdmFyICR0aGlzID0gJCh0aGlzKSxcbiAgICAgICAgICAgICAgICAgICAgc2x1ZyA9ICR0aGlzLmRhdGEoJ3NsdWcnKSxcbiAgICAgICAgICAgICAgICAgICAgaWQgPSAkdGhpcy5kYXRhKCdpZCcpLFxuICAgICAgICAgICAgICAgICAgICByZXBsYWNlVXJsID0gJHRoaXMuY2xvc2VzdCgnbmF2JykuZGF0YSgncmVwbGFjZS11cmwnKTtcblxuICAgICAgICAgICAgICAgIC8vIFN0b3JlIHZhbHVlc1xuICAgICAgICAgICAgICAgIGl0ZW1VcmwgPSAoc2x1ZyA/IHNsdWcgOiAnJyk7XG4gICAgICAgICAgICAgICAgaXRlbUlkID0gaWQ7XG5cbiAgICAgICAgICAgICAgICAvLyBSZXBsYWNlIFVSTFxuICAgICAgICAgICAgICAgICQuYWpheCh7XG4gICAgICAgICAgICAgICAgICAgIHVybDogcmVwbGFjZVVybCxcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ0dFVCcsXG4gICAgICAgICAgICAgICAgICAgIGRhdGE6IHsndGV4dCc6IGl0ZW1Vcmx9LFxuICAgICAgICAgICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAocmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlcGxhY2VkVXJsID0gcmVzcG9uc2UudGV4dDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gVXBkYXRlIHByZXZpZXdcbiAgICAgICAgICAgICAgICAgICAgICAgICQoJyN1cmwtY2hvb3Nlcl9fc2VsZWN0aW9uLXByZXZpZXcnKS50ZXh0KCdTZWxlY3Rpb246ICcgKyByZXBsYWNlZFVybCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAvLyBNZWRpYSBDaG9vc2VyIHNlbGVjdFxuICAgICAgICAgICAgJCgnYm9keScpLm9uKCdjbGljaycsICcuanMtdXJsLWNob29zZXItbWVkaWEtc2VsZWN0JywgZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgICAgICAgICAgICB2YXIgJHRoaXMgPSAkKHRoaXMpLFxuICAgICAgICAgICAgICAgICAgICBwYXRoID0gJHRoaXMuZGF0YSgncGF0aCcpLFxuICAgICAgICAgICAgICAgICAgICB0aHVtYlBhdGggPSAkdGhpcy5kYXRhKCd0aHVtYi1wYXRoJyksXG4gICAgICAgICAgICAgICAgICAgIGlkID0gJHRoaXMuZGF0YSgnaWQnKSxcbiAgICAgICAgICAgICAgICAgICAgdGl0bGUgPSAkdGhpcy5kYXRhKCd0aXRsZScpLFxuICAgICAgICAgICAgICAgICAgICBja2UgPSAkdGhpcy5kYXRhKCdja2UnKSxcbiAgICAgICAgICAgICAgICAgICAgcmVwbGFjZVVybCA9ICR0aGlzLmNsb3Nlc3QoJy50aHVtYm5haWwtd3JhcHBlcicpLmRhdGEoJ3JlcGxhY2UtdXJsJyk7XG5cbiAgICAgICAgICAgICAgICAvLyBTdG9yZSB2YWx1ZXNcbiAgICAgICAgICAgICAgICBpdGVtVXJsID0gcGF0aDtcbiAgICAgICAgICAgICAgICBpdGVtSWQgPSBpZDtcbiAgICAgICAgICAgICAgICBpdGVtVGl0bGUgPSB0aXRsZTtcbiAgICAgICAgICAgICAgICBpdGVtVGh1bWJQYXRoID0gdGh1bWJQYXRoO1xuXG4gICAgICAgICAgICAgICAgLy8gU2F2ZVxuICAgICAgICAgICAgICAgIGlmICghY2tlKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBpc01lZGlhQ2hvb3NlciA9ICQod2luZG93LmZyYW1lRWxlbWVudCkuY2xvc2VzdCgnLmpzLWFqYXgtbW9kYWwnKS5kYXRhKCdtZWRpYS1jaG9vc2VyJyk7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzTWVkaWFDaG9vc2VyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwc2MubWVkaWFDaG9vc2VyLnNhdmVNZWRpYUNob29zZXJNb2RhbChmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBSZXBsYWNlIFVSTFxuICAgICAgICAgICAgICAgICAgICAgICAgJC5hamF4KHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmw6IHJlcGxhY2VVcmwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ0dFVCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YTogeyd0ZXh0JzogaXRlbVVybH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24gKHJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcGxhY2VkVXJsID0gcmVzcG9uc2UudGV4dDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9KS5kb25lKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwc2MubWVkaWFDaG9vc2VyLnNhdmVVcmxDaG9vc2VyTW9kYWwoZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHBzYy5tZWRpYUNob29zZXIuc2F2ZU1lZGlhQ2hvb3Nlck1vZGFsKHRydWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuXG5cbiAgICAgICAgICAgIC8vIENhbmNlbFxuICAgICAgICAgICAgJCgnI2NhbmNlbC11cmwtY2hvb3Nlci1tb2RhbCcpLm9uKCdjbGljaycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICB2YXIgY2tlID0gJCh0aGlzKS5kYXRhKCdja2UnKTtcblxuICAgICAgICAgICAgICAgIGlmICghY2tlKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciAkcGFyZW50TW9kYWwgPSAkKHdpbmRvdy5mcmFtZUVsZW1lbnQpLmNsb3Nlc3QoJy5qcy1hamF4LW1vZGFsJyksXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRNb2RhbElkID0gJHBhcmVudE1vZGFsLmF0dHIoJ2lkJyk7XG5cbiAgICAgICAgICAgICAgICAgICAgcGFyZW50LiQoJyMnICsgcGFyZW50TW9kYWxJZCkubW9kYWwoJ2hpZGUnKTtcblxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHdpbmRvdy5jbG9zZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuXG5cbiAgICAgICAgICAgIC8vIE9LXG4gICAgICAgICAgICAkKGRvY3VtZW50KS5vbignY2xpY2snLCAnI3NhdmUtdXJsLWNob29zZXItbW9kYWwnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdmFyIGNrZSA9ICQodGhpcykuZGF0YSgnY2tlJyk7XG5cbiAgICAgICAgICAgICAgICBwc2MubWVkaWFDaG9vc2VyLnNhdmVVcmxDaG9vc2VyTW9kYWwoY2tlKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuXG4gICAgICAgIC8vIFNhdmUgZm9yIFVSTC1jaG9vc2VyXG4gICAgICAgIHNhdmVVcmxDaG9vc2VyTW9kYWwoY2tlKSB7XG4gICAgICAgICAgICBpZiAoIWNrZSkge1xuICAgICAgICAgICAgICAgIHZhciAkcGFyZW50TW9kYWwgPSAkKHdpbmRvdy5mcmFtZUVsZW1lbnQpLmNsb3Nlc3QoJy5qcy1hamF4LW1vZGFsJyksXG4gICAgICAgICAgICAgICAgICAgIGxpbmtlZElucHV0SWQgPSAkcGFyZW50TW9kYWwuZGF0YSgnbGlua2VkLWlucHV0LWlkJyksXG4gICAgICAgICAgICAgICAgICAgIHBhcmVudE1vZGFsSWQgPSAkcGFyZW50TW9kYWwuYXR0cignaWQnKTtcblxuICAgICAgICAgICAgICAgIC8vIFNldCB2YWxcbiAgICAgICAgICAgICAgICBwYXJlbnQuJCgnIycgKyBsaW5rZWRJbnB1dElkKS52YWwoaXRlbVVybCkuY2hhbmdlKCk7XG5cbiAgICAgICAgICAgICAgICAvLyBTZXQgcHJvcGVyIFVSTFxuICAgICAgICAgICAgICAgIHBhcmVudC4kKCcjJyArIGxpbmtlZElucHV0SWQpLnBhcmVudCgpLmZpbmQoJy5qcy11cmxjaG9vc2VyLXZhbHVlJykudmFsKHJlcGxhY2VkVXJsKTtcblxuICAgICAgICAgICAgICAgIC8vIENsb3NlIG1vZGFsXG4gICAgICAgICAgICAgICAgcGFyZW50LiQoJyMnICsgcGFyZW50TW9kYWxJZCkubW9kYWwoJ2hpZGUnKTtcblxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB2YXIgZnVuY051bSA9IGdldFVybFBhcmFtKCdDS0VkaXRvckZ1bmNOdW0nKTtcblxuICAgICAgICAgICAgICAgIC8vIFNldCB2YWxcbiAgICAgICAgICAgICAgICB3aW5kb3cub3BlbmVyLkNLRURJVE9SLnRvb2xzLmNhbGxGdW5jdGlvbihmdW5jTnVtLCBpdGVtVXJsKTtcblxuICAgICAgICAgICAgICAgIC8vIENsb3NlIHdpbmRvd1xuICAgICAgICAgICAgICAgIHdpbmRvdy5jbG9zZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuXG5cbiAgICAgICAgLy8gU2F2ZSBmb3IgTWVkaWEtY2hvb3NlclxuICAgICAgICBzYXZlTWVkaWFDaG9vc2VyTW9kYWwoY2tlKSB7XG4gICAgICAgICAgICBpZiAoIWNrZSkge1xuICAgICAgICAgICAgICAgIHZhciAkcGFyZW50TW9kYWwgPSAkKHdpbmRvdy5mcmFtZUVsZW1lbnQpLmNsb3Nlc3QoJy5qcy1hamF4LW1vZGFsJyksXG4gICAgICAgICAgICAgICAgICAgIGxpbmtlZElucHV0SWQgPSAkcGFyZW50TW9kYWwuZGF0YSgnbGlua2VkLWlucHV0LWlkJyksXG4gICAgICAgICAgICAgICAgICAgIHBhcmVudE1vZGFsSWQgPSAkcGFyZW50TW9kYWwuYXR0cignaWQnKTtcblxuICAgICAgICAgICAgICAgIC8vIFNldCB2YWxcbiAgICAgICAgICAgICAgICBwYXJlbnQuJCgnIycgKyBsaW5rZWRJbnB1dElkKS52YWwoaXRlbUlkKS5jaGFuZ2UoKTtcblxuICAgICAgICAgICAgICAgIC8vIFVwZGF0ZSBwcmV2aWV3XG4gICAgICAgICAgICAgICAgdmFyICRtZWRpYUNob29zZXIgPSBwYXJlbnQuJCgnIycgKyBsaW5rZWRJbnB1dElkICsgJy13aWRnZXQnKSxcbiAgICAgICAgICAgICAgICAgICAgJHByZXZpZXdJbWcgPSBwYXJlbnQuJCgnIycgKyBsaW5rZWRJbnB1dElkICsgJ19fcHJldmlld19faW1nJyksXG4gICAgICAgICAgICAgICAgICAgICRwcmV2aWV3VGl0bGUgPSBwYXJlbnQuJCgnIycgKyBsaW5rZWRJbnB1dElkICsgJ19fcHJldmlld19fdGl0bGUnKTtcblxuICAgICAgICAgICAgICAgICRtZWRpYUNob29zZXIuYWRkQ2xhc3MoJ21lZGlhLWNob29zZXItLWNob29zZW4nKTtcbiAgICAgICAgICAgICAgICAkcHJldmlld1RpdGxlLmh0bWwoaXRlbVRpdGxlKTtcblxuICAgICAgICAgICAgICAgIGlmIChpdGVtVGh1bWJQYXRoID09PSBcIlwiKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciAkcGFyZW50ID0gJHByZXZpZXdUaXRsZS5wYXJlbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgJHBhcmVudC5wcmVwZW5kKCc8aSBjbGFzcz1cImZhIGZhLWZpbGUtbyBtZWRpYS10aHVtYm5haWxfX2ljb25cIj48L2k+Jyk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgJHByZXZpZXdJbWcuYXR0cignc3JjJywgaXRlbVRodW1iUGF0aCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLy8gQ2xvc2UgbW9kYWxcbiAgICAgICAgICAgICAgICBwYXJlbnQuJCgnIycgKyBwYXJlbnRNb2RhbElkKS5tb2RhbCgnaGlkZScpO1xuXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHZhciBmdW5jTnVtID0gZ2V0VXJsUGFyYW0oJ0NLRWRpdG9yRnVuY051bScpO1xuXG4gICAgICAgICAgICAgICAgLy8gU2V0IHZhbFxuICAgICAgICAgICAgICAgIHdpbmRvdy5vcGVuZXIuQ0tFRElUT1IudG9vbHMuY2FsbEZ1bmN0aW9uKGZ1bmNOdW0sIGl0ZW1VcmwpO1xuXG4gICAgICAgICAgICAgICAgLy8gQ2xvc2Ugd2luZG93XG4gICAgICAgICAgICAgICAgd2luZG93LmNsb3NlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG5cblxuICAgICAgICAvLyBHZXQgVXJsIFBhcmFtZXRlcnNcbiAgICAgICAgZ2V0VXJsUGFyYW0ocGFyYW1OYW1lKSB7XG4gICAgICAgICAgICB2YXIgcmVQYXJhbSA9IG5ldyBSZWdFeHAoJyg/OltcXD8mXXwmYW1wOyknICsgcGFyYW1OYW1lICsgJz0oW14mXSspJywgJ2knKSxcbiAgICAgICAgICAgICAgICBtYXRjaCA9IHdpbmRvdy5sb2NhdGlvbi5zZWFyY2gubWF0Y2gocmVQYXJhbSk7XG5cbiAgICAgICAgICAgIHJldHVybiAobWF0Y2ggJiYgbWF0Y2gubGVuZ3RoID4gMSkgPyBtYXRjaFsxXSA6ICcnO1xuICAgICAgICB9XG5cbiAgICB9XG59KTtcbiIsImltcG9ydCB7IENvbnRyb2xsZXIgfSBmcm9tICdAaG90d2lyZWQvc3RpbXVsdXMnO1xuaW1wb3J0IFRvbVNlbGVjdCBmcm9tICd0b20tc2VsZWN0JztcblxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxyXG5Db3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cclxuXHJcblBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueVxyXG5wdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQuXHJcblxyXG5USEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUyBXSVRIXHJcblJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWVxyXG5BTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBESVJFQ1QsXHJcbklORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTVxyXG5MT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUlxyXG5PVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SXHJcblBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuXHJcbioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovXHJcblxyXG5mdW5jdGlvbiBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHJlY2VpdmVyLCBzdGF0ZSwga2luZCwgZikge1xyXG4gICAgaWYgKGtpbmQgPT09IFwiYVwiICYmICFmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJpdmF0ZSBhY2Nlc3NvciB3YXMgZGVmaW5lZCB3aXRob3V0IGEgZ2V0dGVyXCIpO1xyXG4gICAgaWYgKHR5cGVvZiBzdGF0ZSA9PT0gXCJmdW5jdGlvblwiID8gcmVjZWl2ZXIgIT09IHN0YXRlIHx8ICFmIDogIXN0YXRlLmhhcyhyZWNlaXZlcikpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgcmVhZCBwcml2YXRlIG1lbWJlciBmcm9tIGFuIG9iamVjdCB3aG9zZSBjbGFzcyBkaWQgbm90IGRlY2xhcmUgaXRcIik7XHJcbiAgICByZXR1cm4ga2luZCA9PT0gXCJtXCIgPyBmIDoga2luZCA9PT0gXCJhXCIgPyBmLmNhbGwocmVjZWl2ZXIpIDogZiA/IGYudmFsdWUgOiBzdGF0ZS5nZXQocmVjZWl2ZXIpO1xyXG59XG5cbnZhciBfZGVmYXVsdF8xX2luc3RhbmNlcywgX2RlZmF1bHRfMV9nZXRDb21tb25Db25maWcsIF9kZWZhdWx0XzFfY3JlYXRlQXV0b2NvbXBsZXRlLCBfZGVmYXVsdF8xX2NyZWF0ZUF1dG9jb21wbGV0ZVdpdGhIdG1sQ29udGVudHMsIF9kZWZhdWx0XzFfY3JlYXRlQXV0b2NvbXBsZXRlV2l0aFJlbW90ZURhdGEsIF9kZWZhdWx0XzFfc3RyaXBUYWdzLCBfZGVmYXVsdF8xX21lcmdlT2JqZWN0cywgX2RlZmF1bHRfMV9jcmVhdGVUb21TZWxlY3Q7XG5jbGFzcyBkZWZhdWx0XzEgZXh0ZW5kcyBDb250cm9sbGVyIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgX2RlZmF1bHRfMV9pbnN0YW5jZXMuYWRkKHRoaXMpO1xuICAgICAgICB0aGlzLmlzT2JzZXJ2aW5nID0gZmFsc2U7XG4gICAgICAgIHRoaXMuaGFzTG9hZGVkQ2hvaWNlc1ByZXZpb3VzbHkgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5vcmlnaW5hbE9wdGlvbnMgPSBbXTtcbiAgICB9XG4gICAgaW5pdGlhbGl6ZSgpIHtcbiAgICAgICAgaWYgKCF0aGlzLm11dGF0aW9uT2JzZXJ2ZXIpIHtcbiAgICAgICAgICAgIHRoaXMubXV0YXRpb25PYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKChtdXRhdGlvbnMpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLm9uTXV0YXRpb25zKG11dGF0aW9ucyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjb25uZWN0KCkge1xuICAgICAgICBpZiAodGhpcy5zZWxlY3RFbGVtZW50KSB7XG4gICAgICAgICAgICB0aGlzLm9yaWdpbmFsT3B0aW9ucyA9IHRoaXMuY3JlYXRlT3B0aW9uc0RhdGFTdHJ1Y3R1cmUodGhpcy5zZWxlY3RFbGVtZW50KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmluaXRpYWxpemVUb21TZWxlY3QoKTtcbiAgICB9XG4gICAgaW5pdGlhbGl6ZVRvbVNlbGVjdCgpIHtcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0RWxlbWVudCkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RFbGVtZW50LnNldEF0dHJpYnV0ZSgnZGF0YS1za2lwLW1vcnBoJywgJycpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnVybFZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLnRvbVNlbGVjdCA9IF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX2RlZmF1bHRfMV9pbnN0YW5jZXMsIFwibVwiLCBfZGVmYXVsdF8xX2NyZWF0ZUF1dG9jb21wbGV0ZVdpdGhSZW1vdGVEYXRhKS5jYWxsKHRoaXMsIHRoaXMudXJsVmFsdWUsIHRoaXMuaGFzTWluQ2hhcmFjdGVyc1ZhbHVlID8gdGhpcy5taW5DaGFyYWN0ZXJzVmFsdWUgOiBudWxsKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5vcHRpb25zQXNIdG1sVmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMudG9tU2VsZWN0ID0gX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfZGVmYXVsdF8xX2luc3RhbmNlcywgXCJtXCIsIF9kZWZhdWx0XzFfY3JlYXRlQXV0b2NvbXBsZXRlV2l0aEh0bWxDb250ZW50cykuY2FsbCh0aGlzKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnRvbVNlbGVjdCA9IF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX2RlZmF1bHRfMV9pbnN0YW5jZXMsIFwibVwiLCBfZGVmYXVsdF8xX2NyZWF0ZUF1dG9jb21wbGV0ZSkuY2FsbCh0aGlzKTtcbiAgICAgICAgdGhpcy5zdGFydE11dGF0aW9uT2JzZXJ2ZXIoKTtcbiAgICB9XG4gICAgZGlzY29ubmVjdCgpIHtcbiAgICAgICAgdGhpcy5zdG9wTXV0YXRpb25PYnNlcnZlcigpO1xuICAgICAgICBsZXQgY3VycmVudFNlbGVjdGVkVmFsdWVzID0gW107XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdEVsZW1lbnQpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdEVsZW1lbnQubXVsdGlwbGUpIHtcbiAgICAgICAgICAgICAgICBjdXJyZW50U2VsZWN0ZWRWYWx1ZXMgPSBBcnJheS5mcm9tKHRoaXMuc2VsZWN0RWxlbWVudC5vcHRpb25zKVxuICAgICAgICAgICAgICAgICAgICAuZmlsdGVyKChvcHRpb24pID0+IG9wdGlvbi5zZWxlY3RlZClcbiAgICAgICAgICAgICAgICAgICAgLm1hcCgob3B0aW9uKSA9PiBvcHRpb24udmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgY3VycmVudFNlbGVjdGVkVmFsdWVzID0gW3RoaXMuc2VsZWN0RWxlbWVudC52YWx1ZV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy50b21TZWxlY3QuZGVzdHJveSgpO1xuICAgICAgICBpZiAodGhpcy5zZWxlY3RFbGVtZW50KSB7XG4gICAgICAgICAgICBpZiAodGhpcy5zZWxlY3RFbGVtZW50Lm11bHRpcGxlKSB7XG4gICAgICAgICAgICAgICAgQXJyYXkuZnJvbSh0aGlzLnNlbGVjdEVsZW1lbnQub3B0aW9ucykuZm9yRWFjaCgob3B0aW9uKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbi5zZWxlY3RlZCA9IGN1cnJlbnRTZWxlY3RlZFZhbHVlcy5pbmNsdWRlcyhvcHRpb24udmFsdWUpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RFbGVtZW50LnZhbHVlID0gY3VycmVudFNlbGVjdGVkVmFsdWVzWzBdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGdldE1heE9wdGlvbnMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNlbGVjdEVsZW1lbnQgPyB0aGlzLnNlbGVjdEVsZW1lbnQub3B0aW9ucy5sZW5ndGggOiA1MDtcbiAgICB9XG4gICAgZ2V0IHNlbGVjdEVsZW1lbnQoKSB7XG4gICAgICAgIGlmICghKHRoaXMuZWxlbWVudCBpbnN0YW5jZW9mIEhUTUxTZWxlY3RFbGVtZW50KSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuZWxlbWVudDtcbiAgICB9XG4gICAgZ2V0IGZvcm1FbGVtZW50KCkge1xuICAgICAgICBpZiAoISh0aGlzLmVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MSW5wdXRFbGVtZW50KSAmJiAhKHRoaXMuZWxlbWVudCBpbnN0YW5jZW9mIEhUTUxTZWxlY3RFbGVtZW50KSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdBdXRvY29tcGxldGUgU3RpbXVsdXMgY29udHJvbGxlciBjYW4gb25seSBiZSB1c2VkIG9uIGFuIDxpbnB1dD4gb3IgPHNlbGVjdD4uJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuZWxlbWVudDtcbiAgICB9XG4gICAgZGlzcGF0Y2hFdmVudChuYW1lLCBwYXlsb2FkKSB7XG4gICAgICAgIHRoaXMuZGlzcGF0Y2gobmFtZSwgeyBkZXRhaWw6IHBheWxvYWQsIHByZWZpeDogJ2F1dG9jb21wbGV0ZScgfSk7XG4gICAgfVxuICAgIGdldCBwcmVsb2FkKCkge1xuICAgICAgICBpZiAoIXRoaXMuaGFzUHJlbG9hZFZhbHVlKSB7XG4gICAgICAgICAgICByZXR1cm4gJ2ZvY3VzJztcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5wcmVsb2FkVmFsdWUgPT09ICdmYWxzZScpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5wcmVsb2FkVmFsdWUgPT09ICd0cnVlJykge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMucHJlbG9hZFZhbHVlO1xuICAgIH1cbiAgICByZXNldFRvbVNlbGVjdCgpIHtcbiAgICAgICAgaWYgKHRoaXMudG9tU2VsZWN0KSB7XG4gICAgICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoJ2JlZm9yZS1yZXNldCcsIHsgdG9tU2VsZWN0OiB0aGlzLnRvbVNlbGVjdCB9KTtcbiAgICAgICAgICAgIHRoaXMuc3RvcE11dGF0aW9uT2JzZXJ2ZXIoKTtcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRIdG1sID0gdGhpcy5lbGVtZW50LmlubmVySFRNTDtcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRWYWx1ZSA9IHRoaXMudG9tU2VsZWN0LmdldFZhbHVlKCk7XG4gICAgICAgICAgICB0aGlzLnRvbVNlbGVjdC5kZXN0cm95KCk7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQuaW5uZXJIVE1MID0gY3VycmVudEh0bWw7XG4gICAgICAgICAgICB0aGlzLmluaXRpYWxpemVUb21TZWxlY3QoKTtcbiAgICAgICAgICAgIHRoaXMudG9tU2VsZWN0LnNldFZhbHVlKGN1cnJlbnRWYWx1ZSk7XG4gICAgICAgICAgICB0aGlzLnN0YXJ0TXV0YXRpb25PYnNlcnZlcigpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNoYW5nZVRvbVNlbGVjdERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZCkge1xuICAgICAgICB0aGlzLnN0b3BNdXRhdGlvbk9ic2VydmVyKCk7XG4gICAgICAgIGlmIChpc0Rpc2FibGVkKSB7XG4gICAgICAgICAgICB0aGlzLnRvbVNlbGVjdC5kaXNhYmxlKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnRvbVNlbGVjdC5lbmFibGUoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnN0YXJ0TXV0YXRpb25PYnNlcnZlcigpO1xuICAgIH1cbiAgICBzdGFydE11dGF0aW9uT2JzZXJ2ZXIoKSB7XG4gICAgICAgIGlmICghdGhpcy5pc09ic2VydmluZyAmJiB0aGlzLm11dGF0aW9uT2JzZXJ2ZXIpIHtcbiAgICAgICAgICAgIHRoaXMubXV0YXRpb25PYnNlcnZlci5vYnNlcnZlKHRoaXMuZWxlbWVudCwge1xuICAgICAgICAgICAgICAgIGNoaWxkTGlzdDogdHJ1ZSxcbiAgICAgICAgICAgICAgICBzdWJ0cmVlOiB0cnVlLFxuICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXM6IHRydWUsXG4gICAgICAgICAgICAgICAgY2hhcmFjdGVyRGF0YTogdHJ1ZSxcbiAgICAgICAgICAgICAgICBhdHRyaWJ1dGVPbGRWYWx1ZTogdHJ1ZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5pc09ic2VydmluZyA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc3RvcE11dGF0aW9uT2JzZXJ2ZXIoKSB7XG4gICAgICAgIGlmICh0aGlzLmlzT2JzZXJ2aW5nICYmIHRoaXMubXV0YXRpb25PYnNlcnZlcikge1xuICAgICAgICAgICAgdGhpcy5tdXRhdGlvbk9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcbiAgICAgICAgICAgIHRoaXMuaXNPYnNlcnZpbmcgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBvbk11dGF0aW9ucyhtdXRhdGlvbnMpIHtcbiAgICAgICAgbGV0IGNoYW5nZURpc2FibGVkU3RhdGUgPSBmYWxzZTtcbiAgICAgICAgbGV0IHJlcXVpcmVSZXNldCA9IGZhbHNlO1xuICAgICAgICBtdXRhdGlvbnMuZm9yRWFjaCgobXV0YXRpb24pID0+IHtcbiAgICAgICAgICAgIHN3aXRjaCAobXV0YXRpb24udHlwZSkge1xuICAgICAgICAgICAgICAgIGNhc2UgJ2F0dHJpYnV0ZXMnOlxuICAgICAgICAgICAgICAgICAgICBpZiAobXV0YXRpb24udGFyZ2V0ID09PSB0aGlzLmVsZW1lbnQgJiYgbXV0YXRpb24uYXR0cmlidXRlTmFtZSA9PT0gJ2Rpc2FibGVkJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlRGlzYWJsZWRTdGF0ZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAobXV0YXRpb24udGFyZ2V0ID09PSB0aGlzLmVsZW1lbnQgJiYgbXV0YXRpb24uYXR0cmlidXRlTmFtZSA9PT0gJ211bHRpcGxlJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaXNOb3dNdWx0aXBsZSA9IHRoaXMuZWxlbWVudC5oYXNBdHRyaWJ1dGUoJ211bHRpcGxlJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB3YXNNdWx0aXBsZSA9IG11dGF0aW9uLm9sZFZhbHVlID09PSAnbXVsdGlwbGUnO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzTm93TXVsdGlwbGUgIT09IHdhc011bHRpcGxlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWlyZVJlc2V0ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgbmV3T3B0aW9ucyA9IHRoaXMuc2VsZWN0RWxlbWVudCA/IHRoaXMuY3JlYXRlT3B0aW9uc0RhdGFTdHJ1Y3R1cmUodGhpcy5zZWxlY3RFbGVtZW50KSA6IFtdO1xuICAgICAgICBjb25zdCBhcmVPcHRpb25zRXF1aXZhbGVudCA9IHRoaXMuYXJlT3B0aW9uc0VxdWl2YWxlbnQobmV3T3B0aW9ucyk7XG4gICAgICAgIGlmICghYXJlT3B0aW9uc0VxdWl2YWxlbnQgfHwgcmVxdWlyZVJlc2V0KSB7XG4gICAgICAgICAgICB0aGlzLm9yaWdpbmFsT3B0aW9ucyA9IG5ld09wdGlvbnM7XG4gICAgICAgICAgICB0aGlzLnJlc2V0VG9tU2VsZWN0KCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNoYW5nZURpc2FibGVkU3RhdGUpIHtcbiAgICAgICAgICAgIHRoaXMuY2hhbmdlVG9tU2VsZWN0RGlzYWJsZWRTdGF0ZSh0aGlzLmZvcm1FbGVtZW50LmRpc2FibGVkKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjcmVhdGVPcHRpb25zRGF0YVN0cnVjdHVyZShzZWxlY3RFbGVtZW50KSB7XG4gICAgICAgIHJldHVybiBBcnJheS5mcm9tKHNlbGVjdEVsZW1lbnQub3B0aW9ucykubWFwKChvcHRpb24pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG9wdGdyb3VwID0gb3B0aW9uLmNsb3Nlc3QoJ29wdGdyb3VwJyk7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHZhbHVlOiBvcHRpb24udmFsdWUsXG4gICAgICAgICAgICAgICAgdGV4dDogb3B0aW9uLnRleHQsXG4gICAgICAgICAgICAgICAgZ3JvdXA6IG9wdGdyb3VwID8gb3B0Z3JvdXAubGFiZWwgOiBudWxsLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGFyZU9wdGlvbnNFcXVpdmFsZW50KG5ld09wdGlvbnMpIHtcbiAgICAgICAgY29uc3QgZmlsdGVyZWRPcmlnaW5hbE9wdGlvbnMgPSB0aGlzLm9yaWdpbmFsT3B0aW9ucy5maWx0ZXIoKG9wdGlvbikgPT4gb3B0aW9uLnZhbHVlICE9PSAnJyk7XG4gICAgICAgIGNvbnN0IGZpbHRlcmVkTmV3T3B0aW9ucyA9IG5ld09wdGlvbnMuZmlsdGVyKChvcHRpb24pID0+IG9wdGlvbi52YWx1ZSAhPT0gJycpO1xuICAgICAgICBjb25zdCBvcmlnaW5hbFBsYWNlaG9sZGVyT3B0aW9uID0gdGhpcy5vcmlnaW5hbE9wdGlvbnMuZmluZCgob3B0aW9uKSA9PiBvcHRpb24udmFsdWUgPT09ICcnKTtcbiAgICAgICAgY29uc3QgbmV3UGxhY2Vob2xkZXJPcHRpb24gPSBuZXdPcHRpb25zLmZpbmQoKG9wdGlvbikgPT4gb3B0aW9uLnZhbHVlID09PSAnJyk7XG4gICAgICAgIGlmIChvcmlnaW5hbFBsYWNlaG9sZGVyT3B0aW9uICYmXG4gICAgICAgICAgICBuZXdQbGFjZWhvbGRlck9wdGlvbiAmJlxuICAgICAgICAgICAgb3JpZ2luYWxQbGFjZWhvbGRlck9wdGlvbi50ZXh0ICE9PSBuZXdQbGFjZWhvbGRlck9wdGlvbi50ZXh0KSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZpbHRlcmVkT3JpZ2luYWxPcHRpb25zLmxlbmd0aCAhPT0gZmlsdGVyZWROZXdPcHRpb25zLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG5vcm1hbGl6ZU9wdGlvbiA9IChvcHRpb24pID0+IGAke29wdGlvbi52YWx1ZX0tJHtvcHRpb24udGV4dH0tJHtvcHRpb24uZ3JvdXB9YDtcbiAgICAgICAgY29uc3Qgb3JpZ2luYWxPcHRpb25zU2V0ID0gbmV3IFNldChmaWx0ZXJlZE9yaWdpbmFsT3B0aW9ucy5tYXAobm9ybWFsaXplT3B0aW9uKSk7XG4gICAgICAgIGNvbnN0IG5ld09wdGlvbnNTZXQgPSBuZXcgU2V0KGZpbHRlcmVkTmV3T3B0aW9ucy5tYXAobm9ybWFsaXplT3B0aW9uKSk7XG4gICAgICAgIHJldHVybiAob3JpZ2luYWxPcHRpb25zU2V0LnNpemUgPT09IG5ld09wdGlvbnNTZXQuc2l6ZSAmJlxuICAgICAgICAgICAgWy4uLm9yaWdpbmFsT3B0aW9uc1NldF0uZXZlcnkoKG9wdGlvbikgPT4gbmV3T3B0aW9uc1NldC5oYXMob3B0aW9uKSkpO1xuICAgIH1cbn1cbl9kZWZhdWx0XzFfaW5zdGFuY2VzID0gbmV3IFdlYWtTZXQoKSwgX2RlZmF1bHRfMV9nZXRDb21tb25Db25maWcgPSBmdW5jdGlvbiBfZGVmYXVsdF8xX2dldENvbW1vbkNvbmZpZygpIHtcbiAgICBjb25zdCBwbHVnaW5zID0ge307XG4gICAgY29uc3QgaXNNdWx0aXBsZSA9ICF0aGlzLnNlbGVjdEVsZW1lbnQgfHwgdGhpcy5zZWxlY3RFbGVtZW50Lm11bHRpcGxlO1xuICAgIGlmICghdGhpcy5mb3JtRWxlbWVudC5kaXNhYmxlZCAmJiAhaXNNdWx0aXBsZSkge1xuICAgICAgICBwbHVnaW5zLmNsZWFyX2J1dHRvbiA9IHsgdGl0bGU6ICcnIH07XG4gICAgfVxuICAgIGlmIChpc011bHRpcGxlKSB7XG4gICAgICAgIHBsdWdpbnMucmVtb3ZlX2J1dHRvbiA9IHsgdGl0bGU6ICcnIH07XG4gICAgfVxuICAgIGlmICh0aGlzLnVybFZhbHVlKSB7XG4gICAgICAgIHBsdWdpbnMudmlydHVhbF9zY3JvbGwgPSB7fTtcbiAgICB9XG4gICAgY29uc3QgcmVuZGVyID0ge1xuICAgICAgICBub19yZXN1bHRzOiAoKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gYDxkaXYgY2xhc3M9XCJuby1yZXN1bHRzXCI+JHt0aGlzLm5vUmVzdWx0c0ZvdW5kVGV4dFZhbHVlfTwvZGl2PmA7XG4gICAgICAgIH0sXG4gICAgfTtcbiAgICBjb25zdCBjb25maWcgPSB7XG4gICAgICAgIHJlbmRlcixcbiAgICAgICAgcGx1Z2lucyxcbiAgICAgICAgb25JdGVtQWRkOiAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnRvbVNlbGVjdC5zZXRUZXh0Ym94VmFsdWUoJycpO1xuICAgICAgICB9LFxuICAgICAgICBjbG9zZUFmdGVyU2VsZWN0OiB0cnVlLFxuICAgIH07XG4gICAgaWYgKCF0aGlzLnNlbGVjdEVsZW1lbnQgJiYgIXRoaXMudXJsVmFsdWUpIHtcbiAgICAgICAgY29uZmlnLnNob3VsZExvYWQgPSAoKSA9PiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX2RlZmF1bHRfMV9pbnN0YW5jZXMsIFwibVwiLCBfZGVmYXVsdF8xX21lcmdlT2JqZWN0cykuY2FsbCh0aGlzLCBjb25maWcsIHRoaXMudG9tU2VsZWN0T3B0aW9uc1ZhbHVlKTtcbn0sIF9kZWZhdWx0XzFfY3JlYXRlQXV0b2NvbXBsZXRlID0gZnVuY3Rpb24gX2RlZmF1bHRfMV9jcmVhdGVBdXRvY29tcGxldGUoKSB7XG4gICAgY29uc3QgY29uZmlnID0gX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfZGVmYXVsdF8xX2luc3RhbmNlcywgXCJtXCIsIF9kZWZhdWx0XzFfbWVyZ2VPYmplY3RzKS5jYWxsKHRoaXMsIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX2RlZmF1bHRfMV9pbnN0YW5jZXMsIFwibVwiLCBfZGVmYXVsdF8xX2dldENvbW1vbkNvbmZpZykuY2FsbCh0aGlzKSwge1xuICAgICAgICBtYXhPcHRpb25zOiB0aGlzLmdldE1heE9wdGlvbnMoKSxcbiAgICB9KTtcbiAgICByZXR1cm4gX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfZGVmYXVsdF8xX2luc3RhbmNlcywgXCJtXCIsIF9kZWZhdWx0XzFfY3JlYXRlVG9tU2VsZWN0KS5jYWxsKHRoaXMsIGNvbmZpZyk7XG59LCBfZGVmYXVsdF8xX2NyZWF0ZUF1dG9jb21wbGV0ZVdpdGhIdG1sQ29udGVudHMgPSBmdW5jdGlvbiBfZGVmYXVsdF8xX2NyZWF0ZUF1dG9jb21wbGV0ZVdpdGhIdG1sQ29udGVudHMoKSB7XG4gICAgY29uc3QgY29uZmlnID0gX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfZGVmYXVsdF8xX2luc3RhbmNlcywgXCJtXCIsIF9kZWZhdWx0XzFfbWVyZ2VPYmplY3RzKS5jYWxsKHRoaXMsIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX2RlZmF1bHRfMV9pbnN0YW5jZXMsIFwibVwiLCBfZGVmYXVsdF8xX2dldENvbW1vbkNvbmZpZykuY2FsbCh0aGlzKSwge1xuICAgICAgICBtYXhPcHRpb25zOiB0aGlzLmdldE1heE9wdGlvbnMoKSxcbiAgICAgICAgc2NvcmU6IChzZWFyY2gpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHNjb3JpbmdGdW5jdGlvbiA9IHRoaXMudG9tU2VsZWN0LmdldFNjb3JlRnVuY3Rpb24oc2VhcmNoKTtcbiAgICAgICAgICAgIHJldHVybiAoaXRlbSkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBzY29yaW5nRnVuY3Rpb24oeyAuLi5pdGVtLCB0ZXh0OiBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9kZWZhdWx0XzFfaW5zdGFuY2VzLCBcIm1cIiwgX2RlZmF1bHRfMV9zdHJpcFRhZ3MpLmNhbGwodGhpcywgaXRlbS50ZXh0KSB9KTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0sXG4gICAgICAgIHJlbmRlcjoge1xuICAgICAgICAgICAgaXRlbTogKGl0ZW0pID0+IGA8ZGl2PiR7aXRlbS50ZXh0fTwvZGl2PmAsXG4gICAgICAgICAgICBvcHRpb246IChpdGVtKSA9PiBgPGRpdj4ke2l0ZW0udGV4dH08L2Rpdj5gLFxuICAgICAgICB9LFxuICAgIH0pO1xuICAgIHJldHVybiBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9kZWZhdWx0XzFfaW5zdGFuY2VzLCBcIm1cIiwgX2RlZmF1bHRfMV9jcmVhdGVUb21TZWxlY3QpLmNhbGwodGhpcywgY29uZmlnKTtcbn0sIF9kZWZhdWx0XzFfY3JlYXRlQXV0b2NvbXBsZXRlV2l0aFJlbW90ZURhdGEgPSBmdW5jdGlvbiBfZGVmYXVsdF8xX2NyZWF0ZUF1dG9jb21wbGV0ZVdpdGhSZW1vdGVEYXRhKGF1dG9jb21wbGV0ZUVuZHBvaW50VXJsLCBtaW5DaGFyYWN0ZXJMZW5ndGgpIHtcbiAgICBjb25zdCBjb25maWcgPSBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9kZWZhdWx0XzFfaW5zdGFuY2VzLCBcIm1cIiwgX2RlZmF1bHRfMV9tZXJnZU9iamVjdHMpLmNhbGwodGhpcywgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfZGVmYXVsdF8xX2luc3RhbmNlcywgXCJtXCIsIF9kZWZhdWx0XzFfZ2V0Q29tbW9uQ29uZmlnKS5jYWxsKHRoaXMpLCB7XG4gICAgICAgIGZpcnN0VXJsOiAocXVlcnkpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHNlcGFyYXRvciA9IGF1dG9jb21wbGV0ZUVuZHBvaW50VXJsLmluY2x1ZGVzKCc/JykgPyAnJicgOiAnPyc7XG4gICAgICAgICAgICByZXR1cm4gYCR7YXV0b2NvbXBsZXRlRW5kcG9pbnRVcmx9JHtzZXBhcmF0b3J9cXVlcnk9JHtlbmNvZGVVUklDb21wb25lbnQocXVlcnkpfWA7XG4gICAgICAgIH0sXG4gICAgICAgIGxvYWQ6IGZ1bmN0aW9uIChxdWVyeSwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGNvbnN0IHVybCA9IHRoaXMuZ2V0VXJsKHF1ZXJ5KTtcbiAgICAgICAgICAgIGZldGNoKHVybClcbiAgICAgICAgICAgICAgICAudGhlbigocmVzcG9uc2UpID0+IHJlc3BvbnNlLmpzb24oKSlcbiAgICAgICAgICAgICAgICAudGhlbigoanNvbikgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0TmV4dFVybChxdWVyeSwganNvbi5uZXh0X3BhZ2UpO1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGpzb24ucmVzdWx0cy5vcHRpb25zIHx8IGpzb24ucmVzdWx0cywganNvbi5yZXN1bHRzLm9wdGdyb3VwcyB8fCBbXSk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC5jYXRjaCgoKSA9PiBjYWxsYmFjayhbXSwgW10pKTtcbiAgICAgICAgfSxcbiAgICAgICAgc2hvdWxkTG9hZDogKHF1ZXJ5KSA9PiB7XG4gICAgICAgICAgICBpZiAobnVsbCAhPT0gbWluQ2hhcmFjdGVyTGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHF1ZXJ5Lmxlbmd0aCA+PSBtaW5DaGFyYWN0ZXJMZW5ndGg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5oYXNMb2FkZWRDaG9pY2VzUHJldmlvdXNseSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHF1ZXJ5Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLmhhc0xvYWRlZENob2ljZXNQcmV2aW91c2x5ID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBxdWVyeS5sZW5ndGggPj0gMztcbiAgICAgICAgfSxcbiAgICAgICAgb3B0Z3JvdXBGaWVsZDogJ2dyb3VwX2J5JyxcbiAgICAgICAgc2NvcmU6IChzZWFyY2gpID0+IChpdGVtKSA9PiAxLFxuICAgICAgICByZW5kZXI6IHtcbiAgICAgICAgICAgIG9wdGlvbjogKGl0ZW0pID0+IGA8ZGl2PiR7aXRlbS50ZXh0fTwvZGl2PmAsXG4gICAgICAgICAgICBpdGVtOiAoaXRlbSkgPT4gYDxkaXY+JHtpdGVtLnRleHR9PC9kaXY+YCxcbiAgICAgICAgICAgIGxvYWRpbmdfbW9yZTogKCkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBgPGRpdiBjbGFzcz1cImxvYWRpbmctbW9yZS1yZXN1bHRzXCI+JHt0aGlzLmxvYWRpbmdNb3JlVGV4dFZhbHVlfTwvZGl2PmA7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbm9fbW9yZV9yZXN1bHRzOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGA8ZGl2IGNsYXNzPVwibm8tbW9yZS1yZXN1bHRzXCI+JHt0aGlzLm5vTW9yZVJlc3VsdHNUZXh0VmFsdWV9PC9kaXY+YDtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBub19yZXN1bHRzOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGA8ZGl2IGNsYXNzPVwibm8tcmVzdWx0c1wiPiR7dGhpcy5ub1Jlc3VsdHNGb3VuZFRleHRWYWx1ZX08L2Rpdj5gO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgcHJlbG9hZDogdGhpcy5wcmVsb2FkLFxuICAgIH0pO1xuICAgIHJldHVybiBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9kZWZhdWx0XzFfaW5zdGFuY2VzLCBcIm1cIiwgX2RlZmF1bHRfMV9jcmVhdGVUb21TZWxlY3QpLmNhbGwodGhpcywgY29uZmlnKTtcbn0sIF9kZWZhdWx0XzFfc3RyaXBUYWdzID0gZnVuY3Rpb24gX2RlZmF1bHRfMV9zdHJpcFRhZ3Moc3RyaW5nKSB7XG4gICAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKC8oPChbXj5dKyk+KS9naSwgJycpO1xufSwgX2RlZmF1bHRfMV9tZXJnZU9iamVjdHMgPSBmdW5jdGlvbiBfZGVmYXVsdF8xX21lcmdlT2JqZWN0cyhvYmplY3QxLCBvYmplY3QyKSB7XG4gICAgcmV0dXJuIHsgLi4ub2JqZWN0MSwgLi4ub2JqZWN0MiB9O1xufSwgX2RlZmF1bHRfMV9jcmVhdGVUb21TZWxlY3QgPSBmdW5jdGlvbiBfZGVmYXVsdF8xX2NyZWF0ZVRvbVNlbGVjdChvcHRpb25zKSB7XG4gICAgY29uc3QgcHJlQ29ubmVjdFBheWxvYWQgPSB7IG9wdGlvbnMgfTtcbiAgICB0aGlzLmRpc3BhdGNoRXZlbnQoJ3ByZS1jb25uZWN0JywgcHJlQ29ubmVjdFBheWxvYWQpO1xuICAgIGNvbnN0IHRvbVNlbGVjdCA9IG5ldyBUb21TZWxlY3QodGhpcy5mb3JtRWxlbWVudCwgb3B0aW9ucyk7XG4gICAgY29uc3QgY29ubmVjdFBheWxvYWQgPSB7IHRvbVNlbGVjdCwgb3B0aW9ucyB9O1xuICAgIHRoaXMuZGlzcGF0Y2hFdmVudCgnY29ubmVjdCcsIGNvbm5lY3RQYXlsb2FkKTtcbiAgICByZXR1cm4gdG9tU2VsZWN0O1xufTtcbmRlZmF1bHRfMS52YWx1ZXMgPSB7XG4gICAgdXJsOiBTdHJpbmcsXG4gICAgb3B0aW9uc0FzSHRtbDogQm9vbGVhbixcbiAgICBsb2FkaW5nTW9yZVRleHQ6IFN0cmluZyxcbiAgICBub1Jlc3VsdHNGb3VuZFRleHQ6IFN0cmluZyxcbiAgICBub01vcmVSZXN1bHRzVGV4dDogU3RyaW5nLFxuICAgIG1pbkNoYXJhY3RlcnM6IE51bWJlcixcbiAgICB0b21TZWxlY3RPcHRpb25zOiBPYmplY3QsXG4gICAgcHJlbG9hZDogU3RyaW5nLFxufTtcblxuZXhwb3J0IHsgZGVmYXVsdF8xIGFzIGRlZmF1bHQgfTtcbiIsImltcG9ydCB7IENvbnRyb2xsZXIgfSBmcm9tICdAaG90d2lyZWQvc3RpbXVsdXMnO1xuXG5mdW5jdGlvbiBwYXJzZURpcmVjdGl2ZXMoY29udGVudCkge1xuICAgIGNvbnN0IGRpcmVjdGl2ZXMgPSBbXTtcbiAgICBpZiAoIWNvbnRlbnQpIHtcbiAgICAgICAgcmV0dXJuIGRpcmVjdGl2ZXM7XG4gICAgfVxuICAgIGxldCBjdXJyZW50QWN0aW9uTmFtZSA9ICcnO1xuICAgIGxldCBjdXJyZW50QXJndW1lbnRWYWx1ZSA9ICcnO1xuICAgIGxldCBjdXJyZW50QXJndW1lbnRzID0gW107XG4gICAgbGV0IGN1cnJlbnRNb2RpZmllcnMgPSBbXTtcbiAgICBsZXQgc3RhdGUgPSAnYWN0aW9uJztcbiAgICBjb25zdCBnZXRMYXN0QWN0aW9uTmFtZSA9ICgpID0+IHtcbiAgICAgICAgaWYgKGN1cnJlbnRBY3Rpb25OYW1lKSB7XG4gICAgICAgICAgICByZXR1cm4gY3VycmVudEFjdGlvbk5hbWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGRpcmVjdGl2ZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NvdWxkIG5vdCBmaW5kIGFueSBkaXJlY3RpdmVzJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRpcmVjdGl2ZXNbZGlyZWN0aXZlcy5sZW5ndGggLSAxXS5hY3Rpb247XG4gICAgfTtcbiAgICBjb25zdCBwdXNoSW5zdHJ1Y3Rpb24gPSAoKSA9PiB7XG4gICAgICAgIGRpcmVjdGl2ZXMucHVzaCh7XG4gICAgICAgICAgICBhY3Rpb246IGN1cnJlbnRBY3Rpb25OYW1lLFxuICAgICAgICAgICAgYXJnczogY3VycmVudEFyZ3VtZW50cyxcbiAgICAgICAgICAgIG1vZGlmaWVyczogY3VycmVudE1vZGlmaWVycyxcbiAgICAgICAgICAgIGdldFN0cmluZzogKCkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBjb250ZW50O1xuICAgICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICAgIGN1cnJlbnRBY3Rpb25OYW1lID0gJyc7XG4gICAgICAgIGN1cnJlbnRBcmd1bWVudFZhbHVlID0gJyc7XG4gICAgICAgIGN1cnJlbnRBcmd1bWVudHMgPSBbXTtcbiAgICAgICAgY3VycmVudE1vZGlmaWVycyA9IFtdO1xuICAgICAgICBzdGF0ZSA9ICdhY3Rpb24nO1xuICAgIH07XG4gICAgY29uc3QgcHVzaEFyZ3VtZW50ID0gKCkgPT4ge1xuICAgICAgICBjdXJyZW50QXJndW1lbnRzLnB1c2goY3VycmVudEFyZ3VtZW50VmFsdWUudHJpbSgpKTtcbiAgICAgICAgY3VycmVudEFyZ3VtZW50VmFsdWUgPSAnJztcbiAgICB9O1xuICAgIGNvbnN0IHB1c2hNb2RpZmllciA9ICgpID0+IHtcbiAgICAgICAgaWYgKGN1cnJlbnRBcmd1bWVudHMubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBUaGUgbW9kaWZpZXIgXCIke2N1cnJlbnRBY3Rpb25OYW1lfSgpXCIgZG9lcyBub3Qgc3VwcG9ydCBtdWx0aXBsZSBhcmd1bWVudHMuYCk7XG4gICAgICAgIH1cbiAgICAgICAgY3VycmVudE1vZGlmaWVycy5wdXNoKHtcbiAgICAgICAgICAgIG5hbWU6IGN1cnJlbnRBY3Rpb25OYW1lLFxuICAgICAgICAgICAgdmFsdWU6IGN1cnJlbnRBcmd1bWVudHMubGVuZ3RoID4gMCA/IGN1cnJlbnRBcmd1bWVudHNbMF0gOiBudWxsLFxuICAgICAgICB9KTtcbiAgICAgICAgY3VycmVudEFjdGlvbk5hbWUgPSAnJztcbiAgICAgICAgY3VycmVudEFyZ3VtZW50cyA9IFtdO1xuICAgICAgICBzdGF0ZSA9ICdhY3Rpb24nO1xuICAgIH07XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb250ZW50Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGNoYXIgPSBjb250ZW50W2ldO1xuICAgICAgICBzd2l0Y2ggKHN0YXRlKSB7XG4gICAgICAgICAgICBjYXNlICdhY3Rpb24nOlxuICAgICAgICAgICAgICAgIGlmIChjaGFyID09PSAnKCcpIHtcbiAgICAgICAgICAgICAgICAgICAgc3RhdGUgPSAnYXJndW1lbnRzJztcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChjaGFyID09PSAnICcpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRBY3Rpb25OYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwdXNoSW5zdHJ1Y3Rpb24oKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGNoYXIgPT09ICd8Jykge1xuICAgICAgICAgICAgICAgICAgICBwdXNoTW9kaWZpZXIoKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGN1cnJlbnRBY3Rpb25OYW1lICs9IGNoYXI7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdhcmd1bWVudHMnOlxuICAgICAgICAgICAgICAgIGlmIChjaGFyID09PSAnKScpIHtcbiAgICAgICAgICAgICAgICAgICAgcHVzaEFyZ3VtZW50KCk7XG4gICAgICAgICAgICAgICAgICAgIHN0YXRlID0gJ2FmdGVyX2FyZ3VtZW50cyc7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoY2hhciA9PT0gJywnKSB7XG4gICAgICAgICAgICAgICAgICAgIHB1c2hBcmd1bWVudCgpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY3VycmVudEFyZ3VtZW50VmFsdWUgKz0gY2hhcjtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2FmdGVyX2FyZ3VtZW50cyc6XG4gICAgICAgICAgICAgICAgaWYgKGNoYXIgPT09ICd8Jykge1xuICAgICAgICAgICAgICAgICAgICBwdXNoTW9kaWZpZXIoKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChjaGFyICE9PSAnICcpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBNaXNzaW5nIHNwYWNlIGFmdGVyICR7Z2V0TGFzdEFjdGlvbk5hbWUoKX0oKWApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBwdXNoSW5zdHJ1Y3Rpb24oKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cbiAgICBzd2l0Y2ggKHN0YXRlKSB7XG4gICAgICAgIGNhc2UgJ2FjdGlvbic6XG4gICAgICAgIGNhc2UgJ2FmdGVyX2FyZ3VtZW50cyc6XG4gICAgICAgICAgICBpZiAoY3VycmVudEFjdGlvbk5hbWUpIHtcbiAgICAgICAgICAgICAgICBwdXNoSW5zdHJ1Y3Rpb24oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBEaWQgeW91IGZvcmdldCB0byBhZGQgYSBjbG9zaW5nIFwiKVwiIGFmdGVyIFwiJHtjdXJyZW50QWN0aW9uTmFtZX1cIj9gKTtcbiAgICB9XG4gICAgcmV0dXJuIGRpcmVjdGl2ZXM7XG59XG5cbmZ1bmN0aW9uIGNvbWJpbmVTcGFjZWRBcnJheShwYXJ0cykge1xuICAgIGNvbnN0IGZpbmFsUGFydHMgPSBbXTtcbiAgICBwYXJ0cy5mb3JFYWNoKChwYXJ0KSA9PiB7XG4gICAgICAgIGZpbmFsUGFydHMucHVzaCguLi50cmltQWxsKHBhcnQpLnNwbGl0KCcgJykpO1xuICAgIH0pO1xuICAgIHJldHVybiBmaW5hbFBhcnRzO1xufVxuZnVuY3Rpb24gdHJpbUFsbChzdHIpIHtcbiAgICByZXR1cm4gc3RyLnJlcGxhY2UoL1tcXHNdKy9nLCAnICcpLnRyaW0oKTtcbn1cbmZ1bmN0aW9uIG5vcm1hbGl6ZU1vZGVsTmFtZShtb2RlbCkge1xuICAgIHJldHVybiAobW9kZWxcbiAgICAgICAgLnJlcGxhY2UoL1xcW10kLywgJycpXG4gICAgICAgIC5zcGxpdCgnWycpXG4gICAgICAgIC5tYXAoKHMpID0+IHMucmVwbGFjZSgnXScsICcnKSlcbiAgICAgICAgLmpvaW4oJy4nKSk7XG59XG5cbmZ1bmN0aW9uIGdldEVsZW1lbnRBc1RhZ1RleHQoZWxlbWVudCkge1xuICAgIHJldHVybiBlbGVtZW50LmlubmVySFRNTFxuICAgICAgICA/IGVsZW1lbnQub3V0ZXJIVE1MLnNsaWNlKDAsIGVsZW1lbnQub3V0ZXJIVE1MLmluZGV4T2YoZWxlbWVudC5pbm5lckhUTUwpKVxuICAgICAgICA6IGVsZW1lbnQub3V0ZXJIVE1MO1xufVxuXG5sZXQgY29tcG9uZW50TWFwQnlFbGVtZW50ID0gbmV3IFdlYWtNYXAoKTtcbmxldCBjb21wb25lbnRNYXBCeUNvbXBvbmVudCA9IG5ldyBNYXAoKTtcbmNvbnN0IHJlZ2lzdGVyQ29tcG9uZW50ID0gKGNvbXBvbmVudCkgPT4ge1xuICAgIGNvbXBvbmVudE1hcEJ5RWxlbWVudC5zZXQoY29tcG9uZW50LmVsZW1lbnQsIGNvbXBvbmVudCk7XG4gICAgY29tcG9uZW50TWFwQnlDb21wb25lbnQuc2V0KGNvbXBvbmVudCwgY29tcG9uZW50Lm5hbWUpO1xufTtcbmNvbnN0IHVucmVnaXN0ZXJDb21wb25lbnQgPSAoY29tcG9uZW50KSA9PiB7XG4gICAgY29tcG9uZW50TWFwQnlFbGVtZW50LmRlbGV0ZShjb21wb25lbnQuZWxlbWVudCk7XG4gICAgY29tcG9uZW50TWFwQnlDb21wb25lbnQuZGVsZXRlKGNvbXBvbmVudCk7XG59O1xuY29uc3QgZ2V0Q29tcG9uZW50ID0gKGVsZW1lbnQpID0+IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBsZXQgY291bnQgPSAwO1xuICAgIGNvbnN0IG1heENvdW50ID0gMTA7XG4gICAgY29uc3QgaW50ZXJ2YWwgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudCA9IGNvbXBvbmVudE1hcEJ5RWxlbWVudC5nZXQoZWxlbWVudCk7XG4gICAgICAgIGlmIChjb21wb25lbnQpIHtcbiAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwoaW50ZXJ2YWwpO1xuICAgICAgICAgICAgcmVzb2x2ZShjb21wb25lbnQpO1xuICAgICAgICB9XG4gICAgICAgIGNvdW50Kys7XG4gICAgICAgIGlmIChjb3VudCA+IG1heENvdW50KSB7XG4gICAgICAgICAgICBjbGVhckludGVydmFsKGludGVydmFsKTtcbiAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoYENvbXBvbmVudCBub3QgZm91bmQgZm9yIGVsZW1lbnQgJHtnZXRFbGVtZW50QXNUYWdUZXh0KGVsZW1lbnQpfWApKTtcbiAgICAgICAgfVxuICAgIH0sIDUpO1xufSk7XG5jb25zdCBmaW5kQ29tcG9uZW50cyA9IChjdXJyZW50Q29tcG9uZW50LCBvbmx5UGFyZW50cywgb25seU1hdGNoTmFtZSkgPT4ge1xuICAgIGNvbnN0IGNvbXBvbmVudHMgPSBbXTtcbiAgICBjb21wb25lbnRNYXBCeUNvbXBvbmVudC5mb3JFYWNoKChjb21wb25lbnROYW1lLCBjb21wb25lbnQpID0+IHtcbiAgICAgICAgaWYgKG9ubHlQYXJlbnRzICYmIChjdXJyZW50Q29tcG9uZW50ID09PSBjb21wb25lbnQgfHwgIWNvbXBvbmVudC5lbGVtZW50LmNvbnRhaW5zKGN1cnJlbnRDb21wb25lbnQuZWxlbWVudCkpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9ubHlNYXRjaE5hbWUgJiYgY29tcG9uZW50TmFtZSAhPT0gb25seU1hdGNoTmFtZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbXBvbmVudHMucHVzaChjb21wb25lbnQpO1xuICAgIH0pO1xuICAgIHJldHVybiBjb21wb25lbnRzO1xufTtcbmNvbnN0IGZpbmRDaGlsZHJlbiA9IChjdXJyZW50Q29tcG9uZW50KSA9PiB7XG4gICAgY29uc3QgY2hpbGRyZW4gPSBbXTtcbiAgICBjb21wb25lbnRNYXBCeUNvbXBvbmVudC5mb3JFYWNoKChjb21wb25lbnROYW1lLCBjb21wb25lbnQpID0+IHtcbiAgICAgICAgaWYgKGN1cnJlbnRDb21wb25lbnQgPT09IGNvbXBvbmVudCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICghY3VycmVudENvbXBvbmVudC5lbGVtZW50LmNvbnRhaW5zKGNvbXBvbmVudC5lbGVtZW50KSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGxldCBmb3VuZENoaWxkQ29tcG9uZW50ID0gZmFsc2U7XG4gICAgICAgIGNvbXBvbmVudE1hcEJ5Q29tcG9uZW50LmZvckVhY2goKGNoaWxkQ29tcG9uZW50TmFtZSwgY2hpbGRDb21wb25lbnQpID0+IHtcbiAgICAgICAgICAgIGlmIChmb3VuZENoaWxkQ29tcG9uZW50KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGNoaWxkQ29tcG9uZW50ID09PSBjb21wb25lbnQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoY2hpbGRDb21wb25lbnQuZWxlbWVudC5jb250YWlucyhjb21wb25lbnQuZWxlbWVudCkpIHtcbiAgICAgICAgICAgICAgICBmb3VuZENoaWxkQ29tcG9uZW50ID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGNoaWxkcmVuLnB1c2goY29tcG9uZW50KTtcbiAgICB9KTtcbiAgICByZXR1cm4gY2hpbGRyZW47XG59O1xuY29uc3QgZmluZFBhcmVudCA9IChjdXJyZW50Q29tcG9uZW50KSA9PiB7XG4gICAgbGV0IHBhcmVudEVsZW1lbnQgPSBjdXJyZW50Q29tcG9uZW50LmVsZW1lbnQucGFyZW50RWxlbWVudDtcbiAgICB3aGlsZSAocGFyZW50RWxlbWVudCkge1xuICAgICAgICBjb25zdCBjb21wb25lbnQgPSBjb21wb25lbnRNYXBCeUVsZW1lbnQuZ2V0KHBhcmVudEVsZW1lbnQpO1xuICAgICAgICBpZiAoY29tcG9uZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gY29tcG9uZW50O1xuICAgICAgICB9XG4gICAgICAgIHBhcmVudEVsZW1lbnQgPSBwYXJlbnRFbGVtZW50LnBhcmVudEVsZW1lbnQ7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xufTtcblxuZnVuY3Rpb24gZ2V0VmFsdWVGcm9tRWxlbWVudChlbGVtZW50LCB2YWx1ZVN0b3JlKSB7XG4gICAgaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MSW5wdXRFbGVtZW50KSB7XG4gICAgICAgIGlmIChlbGVtZW50LnR5cGUgPT09ICdjaGVja2JveCcpIHtcbiAgICAgICAgICAgIGNvbnN0IG1vZGVsTmFtZURhdGEgPSBnZXRNb2RlbERpcmVjdGl2ZUZyb21FbGVtZW50KGVsZW1lbnQsIGZhbHNlKTtcbiAgICAgICAgICAgIGlmIChtb2RlbE5hbWVEYXRhICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbW9kZWxWYWx1ZSA9IHZhbHVlU3RvcmUuZ2V0KG1vZGVsTmFtZURhdGEuYWN0aW9uKTtcbiAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShtb2RlbFZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2V0TXVsdGlwbGVDaGVja2JveFZhbHVlKGVsZW1lbnQsIG1vZGVsVmFsdWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoT2JqZWN0KG1vZGVsVmFsdWUpID09PSBtb2RlbFZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBnZXRNdWx0aXBsZUNoZWNrYm94VmFsdWUoZWxlbWVudCwgT2JqZWN0LnZhbHVlcyhtb2RlbFZhbHVlKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGVsZW1lbnQuaGFzQXR0cmlidXRlKCd2YWx1ZScpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQuY2hlY2tlZCA/IGVsZW1lbnQuZ2V0QXR0cmlidXRlKCd2YWx1ZScpIDogbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBlbGVtZW50LmNoZWNrZWQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGlucHV0VmFsdWUoZWxlbWVudCk7XG4gICAgfVxuICAgIGlmIChlbGVtZW50IGluc3RhbmNlb2YgSFRNTFNlbGVjdEVsZW1lbnQpIHtcbiAgICAgICAgaWYgKGVsZW1lbnQubXVsdGlwbGUpIHtcbiAgICAgICAgICAgIHJldHVybiBBcnJheS5mcm9tKGVsZW1lbnQuc2VsZWN0ZWRPcHRpb25zKS5tYXAoKGVsKSA9PiBlbC52YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGVsZW1lbnQudmFsdWU7XG4gICAgfVxuICAgIGlmIChlbGVtZW50LmRhdGFzZXQudmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIGVsZW1lbnQuZGF0YXNldC52YWx1ZTtcbiAgICB9XG4gICAgaWYgKCd2YWx1ZScgaW4gZWxlbWVudCkge1xuICAgICAgICByZXR1cm4gZWxlbWVudC52YWx1ZTtcbiAgICB9XG4gICAgaWYgKGVsZW1lbnQuaGFzQXR0cmlidXRlKCd2YWx1ZScpKSB7XG4gICAgICAgIHJldHVybiBlbGVtZW50LmdldEF0dHJpYnV0ZSgndmFsdWUnKTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG59XG5mdW5jdGlvbiBzZXRWYWx1ZU9uRWxlbWVudChlbGVtZW50LCB2YWx1ZSkge1xuICAgIGlmIChlbGVtZW50IGluc3RhbmNlb2YgSFRNTElucHV0RWxlbWVudCkge1xuICAgICAgICBpZiAoZWxlbWVudC50eXBlID09PSAnZmlsZScpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZWxlbWVudC50eXBlID09PSAncmFkaW8nKSB7XG4gICAgICAgICAgICBlbGVtZW50LmNoZWNrZWQgPSBlbGVtZW50LnZhbHVlID09PSB2YWx1ZTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZWxlbWVudC50eXBlID09PSAnY2hlY2tib3gnKSB7XG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICBsZXQgdmFsdWVGb3VuZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHZhbHVlLmZvckVhY2goKHZhbCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAodmFsID09PSBlbGVtZW50LnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZUZvdW5kID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGVsZW1lbnQuY2hlY2tlZCA9IHZhbHVlRm91bmQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoZWxlbWVudC5oYXNBdHRyaWJ1dGUoJ3ZhbHVlJykpIHtcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5jaGVja2VkID0gZWxlbWVudC52YWx1ZSA9PT0gdmFsdWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBlbGVtZW50LmNoZWNrZWQgPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MU2VsZWN0RWxlbWVudCkge1xuICAgICAgICBjb25zdCBhcnJheVdyYXBwZWRWYWx1ZSA9IFtdLmNvbmNhdCh2YWx1ZSkubWFwKCh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGAke3ZhbHVlfWA7XG4gICAgICAgIH0pO1xuICAgICAgICBBcnJheS5mcm9tKGVsZW1lbnQub3B0aW9ucykuZm9yRWFjaCgob3B0aW9uKSA9PiB7XG4gICAgICAgICAgICBvcHRpb24uc2VsZWN0ZWQgPSBhcnJheVdyYXBwZWRWYWx1ZS5pbmNsdWRlcyhvcHRpb24udmFsdWUpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YWx1ZSA9IHZhbHVlID09PSB1bmRlZmluZWQgPyAnJyA6IHZhbHVlO1xuICAgIGVsZW1lbnQudmFsdWUgPSB2YWx1ZTtcbn1cbmZ1bmN0aW9uIGdldEFsbE1vZGVsRGlyZWN0aXZlRnJvbUVsZW1lbnRzKGVsZW1lbnQpIHtcbiAgICBpZiAoIWVsZW1lbnQuZGF0YXNldC5tb2RlbCkge1xuICAgICAgICByZXR1cm4gW107XG4gICAgfVxuICAgIGNvbnN0IGRpcmVjdGl2ZXMgPSBwYXJzZURpcmVjdGl2ZXMoZWxlbWVudC5kYXRhc2V0Lm1vZGVsKTtcbiAgICBkaXJlY3RpdmVzLmZvckVhY2goKGRpcmVjdGl2ZSkgPT4ge1xuICAgICAgICBpZiAoZGlyZWN0aXZlLmFyZ3MubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBUaGUgZGF0YS1tb2RlbD1cIiR7ZWxlbWVudC5kYXRhc2V0Lm1vZGVsfVwiIGZvcm1hdCBpcyBpbnZhbGlkOiBpdCBkb2VzIG5vdCBzdXBwb3J0IHBhc3NpbmcgYXJndW1lbnRzIHRvIHRoZSBtb2RlbC5gKTtcbiAgICAgICAgfVxuICAgICAgICBkaXJlY3RpdmUuYWN0aW9uID0gbm9ybWFsaXplTW9kZWxOYW1lKGRpcmVjdGl2ZS5hY3Rpb24pO1xuICAgIH0pO1xuICAgIHJldHVybiBkaXJlY3RpdmVzO1xufVxuZnVuY3Rpb24gZ2V0TW9kZWxEaXJlY3RpdmVGcm9tRWxlbWVudChlbGVtZW50LCB0aHJvd09uTWlzc2luZyA9IHRydWUpIHtcbiAgICBjb25zdCBkYXRhTW9kZWxEaXJlY3RpdmVzID0gZ2V0QWxsTW9kZWxEaXJlY3RpdmVGcm9tRWxlbWVudHMoZWxlbWVudCk7XG4gICAgaWYgKGRhdGFNb2RlbERpcmVjdGl2ZXMubGVuZ3RoID4gMCkge1xuICAgICAgICByZXR1cm4gZGF0YU1vZGVsRGlyZWN0aXZlc1swXTtcbiAgICB9XG4gICAgaWYgKGVsZW1lbnQuZ2V0QXR0cmlidXRlKCduYW1lJykpIHtcbiAgICAgICAgY29uc3QgZm9ybUVsZW1lbnQgPSBlbGVtZW50LmNsb3Nlc3QoJ2Zvcm0nKTtcbiAgICAgICAgaWYgKGZvcm1FbGVtZW50ICYmICdtb2RlbCcgaW4gZm9ybUVsZW1lbnQuZGF0YXNldCkge1xuICAgICAgICAgICAgY29uc3QgZGlyZWN0aXZlcyA9IHBhcnNlRGlyZWN0aXZlcyhmb3JtRWxlbWVudC5kYXRhc2V0Lm1vZGVsIHx8ICcqJyk7XG4gICAgICAgICAgICBjb25zdCBkaXJlY3RpdmUgPSBkaXJlY3RpdmVzWzBdO1xuICAgICAgICAgICAgaWYgKGRpcmVjdGl2ZS5hcmdzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZSBkYXRhLW1vZGVsPVwiJHtmb3JtRWxlbWVudC5kYXRhc2V0Lm1vZGVsfVwiIGZvcm1hdCBpcyBpbnZhbGlkOiBpdCBkb2VzIG5vdCBzdXBwb3J0IHBhc3NpbmcgYXJndW1lbnRzIHRvIHRoZSBtb2RlbC5gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRpcmVjdGl2ZS5hY3Rpb24gPSBub3JtYWxpemVNb2RlbE5hbWUoZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ25hbWUnKSk7XG4gICAgICAgICAgICByZXR1cm4gZGlyZWN0aXZlO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmICghdGhyb3dPbk1pc3NpbmcpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IGRldGVybWluZSB0aGUgbW9kZWwgbmFtZSBmb3IgXCIke2dldEVsZW1lbnRBc1RhZ1RleHQoZWxlbWVudCl9XCI6IHRoZSBlbGVtZW50IG11c3QgZWl0aGVyIGhhdmUgYSBcImRhdGEtbW9kZWxcIiAob3IgXCJuYW1lXCIgYXR0cmlidXRlIGxpdmluZyBpbnNpZGUgYSA8Zm9ybSBkYXRhLW1vZGVsPVwiKlwiPikuYCk7XG59XG5mdW5jdGlvbiBlbGVtZW50QmVsb25nc1RvVGhpc0NvbXBvbmVudChlbGVtZW50LCBjb21wb25lbnQpIHtcbiAgICBpZiAoY29tcG9uZW50LmVsZW1lbnQgPT09IGVsZW1lbnQpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGlmICghY29tcG9uZW50LmVsZW1lbnQuY29udGFpbnMoZWxlbWVudCkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBsZXQgZm91bmRDaGlsZENvbXBvbmVudCA9IGZhbHNlO1xuICAgIGZpbmRDaGlsZHJlbihjb21wb25lbnQpLmZvckVhY2goKGNoaWxkQ29tcG9uZW50KSA9PiB7XG4gICAgICAgIGlmIChmb3VuZENoaWxkQ29tcG9uZW50KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNoaWxkQ29tcG9uZW50LmVsZW1lbnQgPT09IGVsZW1lbnQgfHwgY2hpbGRDb21wb25lbnQuZWxlbWVudC5jb250YWlucyhlbGVtZW50KSkge1xuICAgICAgICAgICAgZm91bmRDaGlsZENvbXBvbmVudCA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gIWZvdW5kQ2hpbGRDb21wb25lbnQ7XG59XG5mdW5jdGlvbiBjbG9uZUhUTUxFbGVtZW50KGVsZW1lbnQpIHtcbiAgICBjb25zdCBuZXdFbGVtZW50ID0gZWxlbWVudC5jbG9uZU5vZGUodHJ1ZSk7XG4gICAgaWYgKCEobmV3RWxlbWVudCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NvdWxkIG5vdCBjbG9uZSBlbGVtZW50Jyk7XG4gICAgfVxuICAgIHJldHVybiBuZXdFbGVtZW50O1xufVxuZnVuY3Rpb24gaHRtbFRvRWxlbWVudChodG1sKSB7XG4gICAgY29uc3QgdGVtcGxhdGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZW1wbGF0ZScpO1xuICAgIGh0bWwgPSBodG1sLnRyaW0oKTtcbiAgICB0ZW1wbGF0ZS5pbm5lckhUTUwgPSBodG1sO1xuICAgIGlmICh0ZW1wbGF0ZS5jb250ZW50LmNoaWxkRWxlbWVudENvdW50ID4gMSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENvbXBvbmVudCBIVE1MIGNvbnRhaW5zICR7dGVtcGxhdGUuY29udGVudC5jaGlsZEVsZW1lbnRDb3VudH0gZWxlbWVudHMsIGJ1dCBvbmx5IDEgcm9vdCBlbGVtZW50IGlzIGFsbG93ZWQuYCk7XG4gICAgfVxuICAgIGNvbnN0IGNoaWxkID0gdGVtcGxhdGUuY29udGVudC5maXJzdEVsZW1lbnRDaGlsZDtcbiAgICBpZiAoIWNoaWxkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignQ2hpbGQgbm90IGZvdW5kJyk7XG4gICAgfVxuICAgIGlmICghKGNoaWxkIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgQ3JlYXRlZCBlbGVtZW50IGlzIG5vdCBhbiBIVE1MRWxlbWVudDogJHtodG1sLnRyaW0oKX1gKTtcbiAgICB9XG4gICAgcmV0dXJuIGNoaWxkO1xufVxuY29uc3QgZ2V0TXVsdGlwbGVDaGVja2JveFZhbHVlID0gKGVsZW1lbnQsIGN1cnJlbnRWYWx1ZXMpID0+IHtcbiAgICBjb25zdCBmaW5hbFZhbHVlcyA9IFsuLi5jdXJyZW50VmFsdWVzXTtcbiAgICBjb25zdCB2YWx1ZSA9IGlucHV0VmFsdWUoZWxlbWVudCk7XG4gICAgY29uc3QgaW5kZXggPSBjdXJyZW50VmFsdWVzLmluZGV4T2YodmFsdWUpO1xuICAgIGlmIChlbGVtZW50LmNoZWNrZWQpIHtcbiAgICAgICAgaWYgKGluZGV4ID09PSAtMSkge1xuICAgICAgICAgICAgZmluYWxWYWx1ZXMucHVzaCh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZpbmFsVmFsdWVzO1xuICAgIH1cbiAgICBpZiAoaW5kZXggPiAtMSkge1xuICAgICAgICBmaW5hbFZhbHVlcy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIH1cbiAgICByZXR1cm4gZmluYWxWYWx1ZXM7XG59O1xuY29uc3QgaW5wdXRWYWx1ZSA9IChlbGVtZW50KSA9PiBlbGVtZW50LmRhdGFzZXQudmFsdWUgPyBlbGVtZW50LmRhdGFzZXQudmFsdWUgOiBlbGVtZW50LnZhbHVlO1xuXG5mdW5jdGlvbiBnZXREZWVwRGF0YShkYXRhLCBwcm9wZXJ0eVBhdGgpIHtcbiAgICBjb25zdCB7IGN1cnJlbnRMZXZlbERhdGEsIGZpbmFsS2V5IH0gPSBwYXJzZURlZXBEYXRhKGRhdGEsIHByb3BlcnR5UGF0aCk7XG4gICAgaWYgKGN1cnJlbnRMZXZlbERhdGEgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICByZXR1cm4gY3VycmVudExldmVsRGF0YVtmaW5hbEtleV07XG59XG5jb25zdCBwYXJzZURlZXBEYXRhID0gKGRhdGEsIHByb3BlcnR5UGF0aCkgPT4ge1xuICAgIGNvbnN0IGZpbmFsRGF0YSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoZGF0YSkpO1xuICAgIGxldCBjdXJyZW50TGV2ZWxEYXRhID0gZmluYWxEYXRhO1xuICAgIGNvbnN0IHBhcnRzID0gcHJvcGVydHlQYXRoLnNwbGl0KCcuJyk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwYXJ0cy5sZW5ndGggLSAxOyBpKyspIHtcbiAgICAgICAgY3VycmVudExldmVsRGF0YSA9IGN1cnJlbnRMZXZlbERhdGFbcGFydHNbaV1dO1xuICAgIH1cbiAgICBjb25zdCBmaW5hbEtleSA9IHBhcnRzW3BhcnRzLmxlbmd0aCAtIDFdO1xuICAgIHJldHVybiB7XG4gICAgICAgIGN1cnJlbnRMZXZlbERhdGEsXG4gICAgICAgIGZpbmFsRGF0YSxcbiAgICAgICAgZmluYWxLZXksXG4gICAgICAgIHBhcnRzLFxuICAgIH07XG59O1xuXG5jbGFzcyBWYWx1ZVN0b3JlIHtcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgICAgICB0aGlzLnByb3BzID0ge307XG4gICAgICAgIHRoaXMuZGlydHlQcm9wcyA9IHt9O1xuICAgICAgICB0aGlzLnBlbmRpbmdQcm9wcyA9IHt9O1xuICAgICAgICB0aGlzLnVwZGF0ZWRQcm9wc0Zyb21QYXJlbnQgPSB7fTtcbiAgICAgICAgdGhpcy5wcm9wcyA9IHByb3BzO1xuICAgIH1cbiAgICBnZXQobmFtZSkge1xuICAgICAgICBjb25zdCBub3JtYWxpemVkTmFtZSA9IG5vcm1hbGl6ZU1vZGVsTmFtZShuYW1lKTtcbiAgICAgICAgaWYgKHRoaXMuZGlydHlQcm9wc1tub3JtYWxpemVkTmFtZV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGlydHlQcm9wc1tub3JtYWxpemVkTmFtZV07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMucGVuZGluZ1Byb3BzW25vcm1hbGl6ZWROYW1lXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wZW5kaW5nUHJvcHNbbm9ybWFsaXplZE5hbWVdO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnByb3BzW25vcm1hbGl6ZWROYW1lXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9wc1tub3JtYWxpemVkTmFtZV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGdldERlZXBEYXRhKHRoaXMucHJvcHMsIG5vcm1hbGl6ZWROYW1lKTtcbiAgICB9XG4gICAgaGFzKG5hbWUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0KG5hbWUpICE9PSB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHNldChuYW1lLCB2YWx1ZSkge1xuICAgICAgICBjb25zdCBub3JtYWxpemVkTmFtZSA9IG5vcm1hbGl6ZU1vZGVsTmFtZShuYW1lKTtcbiAgICAgICAgaWYgKHRoaXMuZ2V0KG5vcm1hbGl6ZWROYW1lKSA9PT0gdmFsdWUpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmRpcnR5UHJvcHNbbm9ybWFsaXplZE5hbWVdID0gdmFsdWU7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBnZXRPcmlnaW5hbFByb3BzKCkge1xuICAgICAgICByZXR1cm4geyAuLi50aGlzLnByb3BzIH07XG4gICAgfVxuICAgIGdldERpcnR5UHJvcHMoKSB7XG4gICAgICAgIHJldHVybiB7IC4uLnRoaXMuZGlydHlQcm9wcyB9O1xuICAgIH1cbiAgICBnZXRVcGRhdGVkUHJvcHNGcm9tUGFyZW50KCkge1xuICAgICAgICByZXR1cm4geyAuLi50aGlzLnVwZGF0ZWRQcm9wc0Zyb21QYXJlbnQgfTtcbiAgICB9XG4gICAgZmx1c2hEaXJ0eVByb3BzVG9QZW5kaW5nKCkge1xuICAgICAgICB0aGlzLnBlbmRpbmdQcm9wcyA9IHsgLi4udGhpcy5kaXJ0eVByb3BzIH07XG4gICAgICAgIHRoaXMuZGlydHlQcm9wcyA9IHt9O1xuICAgIH1cbiAgICByZWluaXRpYWxpemVBbGxQcm9wcyhwcm9wcykge1xuICAgICAgICB0aGlzLnByb3BzID0gcHJvcHM7XG4gICAgICAgIHRoaXMudXBkYXRlZFByb3BzRnJvbVBhcmVudCA9IHt9O1xuICAgICAgICB0aGlzLnBlbmRpbmdQcm9wcyA9IHt9O1xuICAgIH1cbiAgICBwdXNoUGVuZGluZ1Byb3BzQmFja1RvRGlydHkoKSB7XG4gICAgICAgIHRoaXMuZGlydHlQcm9wcyA9IHsgLi4udGhpcy5wZW5kaW5nUHJvcHMsIC4uLnRoaXMuZGlydHlQcm9wcyB9O1xuICAgICAgICB0aGlzLnBlbmRpbmdQcm9wcyA9IHt9O1xuICAgIH1cbiAgICBzdG9yZU5ld1Byb3BzRnJvbVBhcmVudChwcm9wcykge1xuICAgICAgICBsZXQgY2hhbmdlZCA9IGZhbHNlO1xuICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhwcm9wcykpIHtcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRWYWx1ZSA9IHRoaXMuZ2V0KGtleSk7XG4gICAgICAgICAgICBpZiAoY3VycmVudFZhbHVlICE9PSB2YWx1ZSkge1xuICAgICAgICAgICAgICAgIGNoYW5nZWQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChjaGFuZ2VkKSB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZWRQcm9wc0Zyb21QYXJlbnQgPSBwcm9wcztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY2hhbmdlZDtcbiAgICB9XG59XG5cbi8vIGJhc2UgSUlGRSB0byBkZWZpbmUgaWRpb21vcnBoXG52YXIgSWRpb21vcnBoID0gKGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAgICAgIC8vIEFORCBOT1cgSVQgQkVHSU5TLi4uXG4gICAgICAgIC8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgICAgICAgbGV0IEVNUFRZX1NFVCA9IG5ldyBTZXQoKTtcblxuICAgICAgICAvLyBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gdmFsdWVzLCB1cGRhdGFibGUgYnkgdXNlcnMgbm93XG4gICAgICAgIGxldCBkZWZhdWx0cyA9IHtcbiAgICAgICAgICAgIG1vcnBoU3R5bGU6IFwib3V0ZXJIVE1MXCIsXG4gICAgICAgICAgICBjYWxsYmFja3MgOiB7XG4gICAgICAgICAgICAgICAgYmVmb3JlTm9kZUFkZGVkOiBub09wLFxuICAgICAgICAgICAgICAgIGFmdGVyTm9kZUFkZGVkOiBub09wLFxuICAgICAgICAgICAgICAgIGJlZm9yZU5vZGVNb3JwaGVkOiBub09wLFxuICAgICAgICAgICAgICAgIGFmdGVyTm9kZU1vcnBoZWQ6IG5vT3AsXG4gICAgICAgICAgICAgICAgYmVmb3JlTm9kZVJlbW92ZWQ6IG5vT3AsXG4gICAgICAgICAgICAgICAgYWZ0ZXJOb2RlUmVtb3ZlZDogbm9PcCxcbiAgICAgICAgICAgICAgICBiZWZvcmVBdHRyaWJ1dGVVcGRhdGVkOiBub09wLFxuXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaGVhZDoge1xuICAgICAgICAgICAgICAgIHN0eWxlOiAnbWVyZ2UnLFxuICAgICAgICAgICAgICAgIHNob3VsZFByZXNlcnZlOiBmdW5jdGlvbiAoZWx0KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBlbHQuZ2V0QXR0cmlidXRlKFwiaW0tcHJlc2VydmVcIikgPT09IFwidHJ1ZVwiO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgc2hvdWxkUmVBcHBlbmQ6IGZ1bmN0aW9uIChlbHQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVsdC5nZXRBdHRyaWJ1dGUoXCJpbS1yZS1hcHBlbmRcIikgPT09IFwidHJ1ZVwiO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgc2hvdWxkUmVtb3ZlOiBub09wLFxuICAgICAgICAgICAgICAgIGFmdGVySGVhZE1vcnBoZWQ6IG5vT3AsXG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgICAgICAvLyBDb3JlIE1vcnBoaW5nIEFsZ29yaXRobSAtIG1vcnBoLCBtb3JwaE5vcm1hbGl6ZWRDb250ZW50LCBtb3JwaE9sZE5vZGVUbywgbW9ycGhDaGlsZHJlblxuICAgICAgICAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAgICAgIGZ1bmN0aW9uIG1vcnBoKG9sZE5vZGUsIG5ld0NvbnRlbnQsIGNvbmZpZyA9IHt9KSB7XG5cbiAgICAgICAgICAgIGlmIChvbGROb2RlIGluc3RhbmNlb2YgRG9jdW1lbnQpIHtcbiAgICAgICAgICAgICAgICBvbGROb2RlID0gb2xkTm9kZS5kb2N1bWVudEVsZW1lbnQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0eXBlb2YgbmV3Q29udGVudCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICBuZXdDb250ZW50ID0gcGFyc2VDb250ZW50KG5ld0NvbnRlbnQpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBsZXQgbm9ybWFsaXplZENvbnRlbnQgPSBub3JtYWxpemVDb250ZW50KG5ld0NvbnRlbnQpO1xuXG4gICAgICAgICAgICBsZXQgY3R4ID0gY3JlYXRlTW9ycGhDb250ZXh0KG9sZE5vZGUsIG5vcm1hbGl6ZWRDb250ZW50LCBjb25maWcpO1xuXG4gICAgICAgICAgICByZXR1cm4gbW9ycGhOb3JtYWxpemVkQ29udGVudChvbGROb2RlLCBub3JtYWxpemVkQ29udGVudCwgY3R4KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIG1vcnBoTm9ybWFsaXplZENvbnRlbnQob2xkTm9kZSwgbm9ybWFsaXplZE5ld0NvbnRlbnQsIGN0eCkge1xuICAgICAgICAgICAgaWYgKGN0eC5oZWFkLmJsb2NrKSB7XG4gICAgICAgICAgICAgICAgbGV0IG9sZEhlYWQgPSBvbGROb2RlLnF1ZXJ5U2VsZWN0b3IoJ2hlYWQnKTtcbiAgICAgICAgICAgICAgICBsZXQgbmV3SGVhZCA9IG5vcm1hbGl6ZWROZXdDb250ZW50LnF1ZXJ5U2VsZWN0b3IoJ2hlYWQnKTtcbiAgICAgICAgICAgICAgICBpZiAob2xkSGVhZCAmJiBuZXdIZWFkKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBwcm9taXNlcyA9IGhhbmRsZUhlYWRFbGVtZW50KG5ld0hlYWQsIG9sZEhlYWQsIGN0eCk7XG4gICAgICAgICAgICAgICAgICAgIC8vIHdoZW4gaGVhZCBwcm9taXNlcyByZXNvbHZlLCBjYWxsIG1vcnBoIGFnYWluLCBpZ25vcmluZyB0aGUgaGVhZCB0YWdcbiAgICAgICAgICAgICAgICAgICAgUHJvbWlzZS5hbGwocHJvbWlzZXMpLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbW9ycGhOb3JtYWxpemVkQ29udGVudChvbGROb2RlLCBub3JtYWxpemVkTmV3Q29udGVudCwgT2JqZWN0LmFzc2lnbihjdHgsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWdub3JlOiB0cnVlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGN0eC5tb3JwaFN0eWxlID09PSBcImlubmVySFRNTFwiKSB7XG5cbiAgICAgICAgICAgICAgICAvLyBpbm5lckhUTUwsIHNvIHdlIGFyZSBvbmx5IHVwZGF0aW5nIHRoZSBjaGlsZHJlblxuICAgICAgICAgICAgICAgIG1vcnBoQ2hpbGRyZW4obm9ybWFsaXplZE5ld0NvbnRlbnQsIG9sZE5vZGUsIGN0eCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9sZE5vZGUuY2hpbGRyZW47XG5cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY3R4Lm1vcnBoU3R5bGUgPT09IFwib3V0ZXJIVE1MXCIgfHwgY3R4Lm1vcnBoU3R5bGUgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIC8vIG90aGVyd2lzZSBmaW5kIHRoZSBiZXN0IGVsZW1lbnQgbWF0Y2ggaW4gdGhlIG5ldyBjb250ZW50LCBtb3JwaCB0aGF0LCBhbmQgbWVyZ2UgaXRzIHNpYmxpbmdzXG4gICAgICAgICAgICAgICAgLy8gaW50byBlaXRoZXIgc2lkZSBvZiB0aGUgYmVzdCBtYXRjaFxuICAgICAgICAgICAgICAgIGxldCBiZXN0TWF0Y2ggPSBmaW5kQmVzdE5vZGVNYXRjaChub3JtYWxpemVkTmV3Q29udGVudCwgb2xkTm9kZSwgY3R4KTtcblxuICAgICAgICAgICAgICAgIC8vIHN0YXNoIHRoZSBzaWJsaW5ncyB0aGF0IHdpbGwgbmVlZCB0byBiZSBpbnNlcnRlZCBvbiBlaXRoZXIgc2lkZSBvZiB0aGUgYmVzdCBtYXRjaFxuICAgICAgICAgICAgICAgIGxldCBwcmV2aW91c1NpYmxpbmcgPSBiZXN0TWF0Y2g/LnByZXZpb3VzU2libGluZztcbiAgICAgICAgICAgICAgICBsZXQgbmV4dFNpYmxpbmcgPSBiZXN0TWF0Y2g/Lm5leHRTaWJsaW5nO1xuXG4gICAgICAgICAgICAgICAgLy8gbW9ycGggaXRcbiAgICAgICAgICAgICAgICBsZXQgbW9ycGhlZE5vZGUgPSBtb3JwaE9sZE5vZGVUbyhvbGROb2RlLCBiZXN0TWF0Y2gsIGN0eCk7XG5cbiAgICAgICAgICAgICAgICBpZiAoYmVzdE1hdGNoKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGlmIHRoZXJlIHdhcyBhIGJlc3QgbWF0Y2gsIG1lcmdlIHRoZSBzaWJsaW5ncyBpbiB0b28gYW5kIHJldHVybiB0aGVcbiAgICAgICAgICAgICAgICAgICAgLy8gd2hvbGUgYnVuY2hcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGluc2VydFNpYmxpbmdzKHByZXZpb3VzU2libGluZywgbW9ycGhlZE5vZGUsIG5leHRTaWJsaW5nKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAvLyBvdGhlcndpc2Ugbm90aGluZyB3YXMgYWRkZWQgdG8gdGhlIERPTVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gW11cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRocm93IFwiRG8gbm90IHVuZGVyc3RhbmQgaG93IHRvIG1vcnBoIHN0eWxlIFwiICsgY3R4Lm1vcnBoU3R5bGU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAcGFyYW0gcG9zc2libGVBY3RpdmVFbGVtZW50XG4gICAgICAgICAqIEBwYXJhbSBjdHhcbiAgICAgICAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAgICAgICAqL1xuICAgICAgICBmdW5jdGlvbiBpZ25vcmVWYWx1ZU9mQWN0aXZlRWxlbWVudChwb3NzaWJsZUFjdGl2ZUVsZW1lbnQsIGN0eCkge1xuICAgICAgICAgICAgcmV0dXJuIGN0eC5pZ25vcmVBY3RpdmVWYWx1ZSAmJiBwb3NzaWJsZUFjdGl2ZUVsZW1lbnQgPT09IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7XG4gICAgICAgIH1cblxuICAgICAgICAvKipcbiAgICAgICAgICogQHBhcmFtIG9sZE5vZGUgcm9vdCBub2RlIHRvIG1lcmdlIGNvbnRlbnQgaW50b1xuICAgICAgICAgKiBAcGFyYW0gbmV3Q29udGVudCBuZXcgY29udGVudCB0byBtZXJnZVxuICAgICAgICAgKiBAcGFyYW0gY3R4IHRoZSBtZXJnZSBjb250ZXh0XG4gICAgICAgICAqIEByZXR1cm5zIHtFbGVtZW50fSB0aGUgZWxlbWVudCB0aGF0IGVuZGVkIHVwIGluIHRoZSBET01cbiAgICAgICAgICovXG4gICAgICAgIGZ1bmN0aW9uIG1vcnBoT2xkTm9kZVRvKG9sZE5vZGUsIG5ld0NvbnRlbnQsIGN0eCkge1xuICAgICAgICAgICAgaWYgKGN0eC5pZ25vcmVBY3RpdmUgJiYgb2xkTm9kZSA9PT0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudCkgOyBlbHNlIGlmIChuZXdDb250ZW50ID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBpZiAoY3R4LmNhbGxiYWNrcy5iZWZvcmVOb2RlUmVtb3ZlZChvbGROb2RlKSA9PT0gZmFsc2UpIHJldHVybiBvbGROb2RlO1xuXG4gICAgICAgICAgICAgICAgb2xkTm9kZS5yZW1vdmUoKTtcbiAgICAgICAgICAgICAgICBjdHguY2FsbGJhY2tzLmFmdGVyTm9kZVJlbW92ZWQob2xkTm9kZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCFpc1NvZnRNYXRjaChvbGROb2RlLCBuZXdDb250ZW50KSkge1xuICAgICAgICAgICAgICAgIGlmIChjdHguY2FsbGJhY2tzLmJlZm9yZU5vZGVSZW1vdmVkKG9sZE5vZGUpID09PSBmYWxzZSkgcmV0dXJuIG9sZE5vZGU7XG4gICAgICAgICAgICAgICAgaWYgKGN0eC5jYWxsYmFja3MuYmVmb3JlTm9kZUFkZGVkKG5ld0NvbnRlbnQpID09PSBmYWxzZSkgcmV0dXJuIG9sZE5vZGU7XG5cbiAgICAgICAgICAgICAgICBvbGROb2RlLnBhcmVudEVsZW1lbnQucmVwbGFjZUNoaWxkKG5ld0NvbnRlbnQsIG9sZE5vZGUpO1xuICAgICAgICAgICAgICAgIGN0eC5jYWxsYmFja3MuYWZ0ZXJOb2RlQWRkZWQobmV3Q29udGVudCk7XG4gICAgICAgICAgICAgICAgY3R4LmNhbGxiYWNrcy5hZnRlck5vZGVSZW1vdmVkKG9sZE5vZGUpO1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXdDb250ZW50O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoY3R4LmNhbGxiYWNrcy5iZWZvcmVOb2RlTW9ycGhlZChvbGROb2RlLCBuZXdDb250ZW50KSA9PT0gZmFsc2UpIHJldHVybiBvbGROb2RlO1xuXG4gICAgICAgICAgICAgICAgaWYgKG9sZE5vZGUgaW5zdGFuY2VvZiBIVE1MSGVhZEVsZW1lbnQgJiYgY3R4LmhlYWQuaWdub3JlKSA7IGVsc2UgaWYgKG9sZE5vZGUgaW5zdGFuY2VvZiBIVE1MSGVhZEVsZW1lbnQgJiYgY3R4LmhlYWQuc3R5bGUgIT09IFwibW9ycGhcIikge1xuICAgICAgICAgICAgICAgICAgICBoYW5kbGVIZWFkRWxlbWVudChuZXdDb250ZW50LCBvbGROb2RlLCBjdHgpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHN5bmNOb2RlRnJvbShuZXdDb250ZW50LCBvbGROb2RlLCBjdHgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWlnbm9yZVZhbHVlT2ZBY3RpdmVFbGVtZW50KG9sZE5vZGUsIGN0eCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1vcnBoQ2hpbGRyZW4obmV3Q29udGVudCwgb2xkTm9kZSwgY3R4KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjdHguY2FsbGJhY2tzLmFmdGVyTm9kZU1vcnBoZWQob2xkTm9kZSwgbmV3Q29udGVudCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9sZE5vZGU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvKipcbiAgICAgICAgICogVGhpcyBpcyB0aGUgY29yZSBhbGdvcml0aG0gZm9yIG1hdGNoaW5nIHVwIGNoaWxkcmVuLiAgVGhlIGlkZWEgaXMgdG8gdXNlIGlkIHNldHMgdG8gdHJ5IHRvIG1hdGNoIHVwXG4gICAgICAgICAqIG5vZGVzIGFzIGZhaXRoZnVsbHkgYXMgcG9zc2libGUuICBXZSBncmVlZGlseSBtYXRjaCwgd2hpY2ggYWxsb3dzIHVzIHRvIGtlZXAgdGhlIGFsZ29yaXRobSBmYXN0LCBidXRcbiAgICAgICAgICogYnkgdXNpbmcgaWQgc2V0cywgd2UgYXJlIGFibGUgdG8gYmV0dGVyIG1hdGNoIHVwIHdpdGggY29udGVudCBkZWVwZXIgaW4gdGhlIERPTS5cbiAgICAgICAgICpcbiAgICAgICAgICogQmFzaWMgYWxnb3JpdGhtIGlzLCBmb3IgZWFjaCBub2RlIGluIHRoZSBuZXcgY29udGVudDpcbiAgICAgICAgICpcbiAgICAgICAgICogLSBpZiB3ZSBoYXZlIHJlYWNoZWQgdGhlIGVuZCBvZiB0aGUgb2xkIHBhcmVudCwgYXBwZW5kIHRoZSBuZXcgY29udGVudFxuICAgICAgICAgKiAtIGlmIHRoZSBuZXcgY29udGVudCBoYXMgYW4gaWQgc2V0IG1hdGNoIHdpdGggdGhlIGN1cnJlbnQgaW5zZXJ0aW9uIHBvaW50LCBtb3JwaFxuICAgICAgICAgKiAtIHNlYXJjaCBmb3IgYW4gaWQgc2V0IG1hdGNoXG4gICAgICAgICAqIC0gaWYgaWQgc2V0IG1hdGNoIGZvdW5kLCBtb3JwaFxuICAgICAgICAgKiAtIG90aGVyd2lzZSBzZWFyY2ggZm9yIGEgXCJzb2Z0XCIgbWF0Y2hcbiAgICAgICAgICogLSBpZiBhIHNvZnQgbWF0Y2ggaXMgZm91bmQsIG1vcnBoXG4gICAgICAgICAqIC0gb3RoZXJ3aXNlLCBwcmVwZW5kIHRoZSBuZXcgbm9kZSBiZWZvcmUgdGhlIGN1cnJlbnQgaW5zZXJ0aW9uIHBvaW50XG4gICAgICAgICAqXG4gICAgICAgICAqIFRoZSB0d28gc2VhcmNoIGFsZ29yaXRobXMgdGVybWluYXRlIGlmIGNvbXBldGluZyBub2RlIG1hdGNoZXMgYXBwZWFyIHRvIG91dHdlaWdoIHdoYXQgY2FuIGJlIGFjaGlldmVkXG4gICAgICAgICAqIHdpdGggdGhlIGN1cnJlbnQgbm9kZS4gIFNlZSBmaW5kSWRTZXRNYXRjaCgpIGFuZCBmaW5kU29mdE1hdGNoKCkgZm9yIGRldGFpbHMuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7RWxlbWVudH0gbmV3UGFyZW50IHRoZSBwYXJlbnQgZWxlbWVudCBvZiB0aGUgbmV3IGNvbnRlbnRcbiAgICAgICAgICogQHBhcmFtIHtFbGVtZW50IH0gb2xkUGFyZW50IHRoZSBvbGQgY29udGVudCB0aGF0IHdlIGFyZSBtZXJnaW5nIHRoZSBuZXcgY29udGVudCBpbnRvXG4gICAgICAgICAqIEBwYXJhbSBjdHggdGhlIG1lcmdlIGNvbnRleHRcbiAgICAgICAgICovXG4gICAgICAgIGZ1bmN0aW9uIG1vcnBoQ2hpbGRyZW4obmV3UGFyZW50LCBvbGRQYXJlbnQsIGN0eCkge1xuXG4gICAgICAgICAgICBsZXQgbmV4dE5ld0NoaWxkID0gbmV3UGFyZW50LmZpcnN0Q2hpbGQ7XG4gICAgICAgICAgICBsZXQgaW5zZXJ0aW9uUG9pbnQgPSBvbGRQYXJlbnQuZmlyc3RDaGlsZDtcbiAgICAgICAgICAgIGxldCBuZXdDaGlsZDtcblxuICAgICAgICAgICAgLy8gcnVuIHRocm91Z2ggYWxsIHRoZSBuZXcgY29udGVudFxuICAgICAgICAgICAgd2hpbGUgKG5leHROZXdDaGlsZCkge1xuXG4gICAgICAgICAgICAgICAgbmV3Q2hpbGQgPSBuZXh0TmV3Q2hpbGQ7XG4gICAgICAgICAgICAgICAgbmV4dE5ld0NoaWxkID0gbmV3Q2hpbGQubmV4dFNpYmxpbmc7XG5cbiAgICAgICAgICAgICAgICAvLyBpZiB3ZSBhcmUgYXQgdGhlIGVuZCBvZiB0aGUgZXhpdGluZyBwYXJlbnQncyBjaGlsZHJlbiwganVzdCBhcHBlbmRcbiAgICAgICAgICAgICAgICBpZiAoaW5zZXJ0aW9uUG9pbnQgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoY3R4LmNhbGxiYWNrcy5iZWZvcmVOb2RlQWRkZWQobmV3Q2hpbGQpID09PSBmYWxzZSkgcmV0dXJuO1xuXG4gICAgICAgICAgICAgICAgICAgIG9sZFBhcmVudC5hcHBlbmRDaGlsZChuZXdDaGlsZCk7XG4gICAgICAgICAgICAgICAgICAgIGN0eC5jYWxsYmFja3MuYWZ0ZXJOb2RlQWRkZWQobmV3Q2hpbGQpO1xuICAgICAgICAgICAgICAgICAgICByZW1vdmVJZHNGcm9tQ29uc2lkZXJhdGlvbihjdHgsIG5ld0NoaWxkKTtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLy8gaWYgdGhlIGN1cnJlbnQgbm9kZSBoYXMgYW4gaWQgc2V0IG1hdGNoIHRoZW4gbW9ycGhcbiAgICAgICAgICAgICAgICBpZiAoaXNJZFNldE1hdGNoKG5ld0NoaWxkLCBpbnNlcnRpb25Qb2ludCwgY3R4KSkge1xuICAgICAgICAgICAgICAgICAgICBtb3JwaE9sZE5vZGVUbyhpbnNlcnRpb25Qb2ludCwgbmV3Q2hpbGQsIGN0eCk7XG4gICAgICAgICAgICAgICAgICAgIGluc2VydGlvblBvaW50ID0gaW5zZXJ0aW9uUG9pbnQubmV4dFNpYmxpbmc7XG4gICAgICAgICAgICAgICAgICAgIHJlbW92ZUlkc0Zyb21Db25zaWRlcmF0aW9uKGN0eCwgbmV3Q2hpbGQpO1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvLyBvdGhlcndpc2Ugc2VhcmNoIGZvcndhcmQgaW4gdGhlIGV4aXN0aW5nIG9sZCBjaGlsZHJlbiBmb3IgYW4gaWQgc2V0IG1hdGNoXG4gICAgICAgICAgICAgICAgbGV0IGlkU2V0TWF0Y2ggPSBmaW5kSWRTZXRNYXRjaChuZXdQYXJlbnQsIG9sZFBhcmVudCwgbmV3Q2hpbGQsIGluc2VydGlvblBvaW50LCBjdHgpO1xuXG4gICAgICAgICAgICAgICAgLy8gaWYgd2UgZm91bmQgYSBwb3RlbnRpYWwgbWF0Y2gsIHJlbW92ZSB0aGUgbm9kZXMgdW50aWwgdGhhdCBwb2ludCBhbmQgbW9ycGhcbiAgICAgICAgICAgICAgICBpZiAoaWRTZXRNYXRjaCkge1xuICAgICAgICAgICAgICAgICAgICBpbnNlcnRpb25Qb2ludCA9IHJlbW92ZU5vZGVzQmV0d2VlbihpbnNlcnRpb25Qb2ludCwgaWRTZXRNYXRjaCwgY3R4KTtcbiAgICAgICAgICAgICAgICAgICAgbW9ycGhPbGROb2RlVG8oaWRTZXRNYXRjaCwgbmV3Q2hpbGQsIGN0eCk7XG4gICAgICAgICAgICAgICAgICAgIHJlbW92ZUlkc0Zyb21Db25zaWRlcmF0aW9uKGN0eCwgbmV3Q2hpbGQpO1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvLyBubyBpZCBzZXQgbWF0Y2ggZm91bmQsIHNvIHNjYW4gZm9yd2FyZCBmb3IgYSBzb2Z0IG1hdGNoIGZvciB0aGUgY3VycmVudCBub2RlXG4gICAgICAgICAgICAgICAgbGV0IHNvZnRNYXRjaCA9IGZpbmRTb2Z0TWF0Y2gobmV3UGFyZW50LCBvbGRQYXJlbnQsIG5ld0NoaWxkLCBpbnNlcnRpb25Qb2ludCwgY3R4KTtcblxuICAgICAgICAgICAgICAgIC8vIGlmIHdlIGZvdW5kIGEgc29mdCBtYXRjaCBmb3IgdGhlIGN1cnJlbnQgbm9kZSwgbW9ycGhcbiAgICAgICAgICAgICAgICBpZiAoc29mdE1hdGNoKSB7XG4gICAgICAgICAgICAgICAgICAgIGluc2VydGlvblBvaW50ID0gcmVtb3ZlTm9kZXNCZXR3ZWVuKGluc2VydGlvblBvaW50LCBzb2Z0TWF0Y2gsIGN0eCk7XG4gICAgICAgICAgICAgICAgICAgIG1vcnBoT2xkTm9kZVRvKHNvZnRNYXRjaCwgbmV3Q2hpbGQsIGN0eCk7XG4gICAgICAgICAgICAgICAgICAgIHJlbW92ZUlkc0Zyb21Db25zaWRlcmF0aW9uKGN0eCwgbmV3Q2hpbGQpO1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvLyBhYmFuZG9uIGFsbCBob3BlIG9mIG1vcnBoaW5nLCBqdXN0IGluc2VydCB0aGUgbmV3IGNoaWxkIGJlZm9yZSB0aGUgaW5zZXJ0aW9uIHBvaW50XG4gICAgICAgICAgICAgICAgLy8gYW5kIG1vdmUgb25cbiAgICAgICAgICAgICAgICBpZiAoY3R4LmNhbGxiYWNrcy5iZWZvcmVOb2RlQWRkZWQobmV3Q2hpbGQpID09PSBmYWxzZSkgcmV0dXJuO1xuXG4gICAgICAgICAgICAgICAgb2xkUGFyZW50Lmluc2VydEJlZm9yZShuZXdDaGlsZCwgaW5zZXJ0aW9uUG9pbnQpO1xuICAgICAgICAgICAgICAgIGN0eC5jYWxsYmFja3MuYWZ0ZXJOb2RlQWRkZWQobmV3Q2hpbGQpO1xuICAgICAgICAgICAgICAgIHJlbW92ZUlkc0Zyb21Db25zaWRlcmF0aW9uKGN0eCwgbmV3Q2hpbGQpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyByZW1vdmUgYW55IHJlbWFpbmluZyBvbGQgbm9kZXMgdGhhdCBkaWRuJ3QgbWF0Y2ggdXAgd2l0aCBuZXcgY29udGVudFxuICAgICAgICAgICAgd2hpbGUgKGluc2VydGlvblBvaW50ICE9PSBudWxsKSB7XG5cbiAgICAgICAgICAgICAgICBsZXQgdGVtcE5vZGUgPSBpbnNlcnRpb25Qb2ludDtcbiAgICAgICAgICAgICAgICBpbnNlcnRpb25Qb2ludCA9IGluc2VydGlvblBvaW50Lm5leHRTaWJsaW5nO1xuICAgICAgICAgICAgICAgIHJlbW92ZU5vZGUodGVtcE5vZGUsIGN0eCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAgICAgIC8vIEF0dHJpYnV0ZSBTeW5jaW5nIENvZGVcbiAgICAgICAgLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAcGFyYW0gYXR0ciB7U3RyaW5nfSB0aGUgYXR0cmlidXRlIHRvIGJlIG11dGF0ZWRcbiAgICAgICAgICogQHBhcmFtIHRvIHtFbGVtZW50fSB0aGUgZWxlbWVudCB0aGF0IGlzIGdvaW5nIHRvIGJlIHVwZGF0ZWRcbiAgICAgICAgICogQHBhcmFtIHVwZGF0ZVR5cGUgeyhcInVwZGF0ZVwifFwicmVtb3ZlXCIpfVxuICAgICAgICAgKiBAcGFyYW0gY3R4IHRoZSBtZXJnZSBjb250ZXh0XG4gICAgICAgICAqIEByZXR1cm5zIHtib29sZWFufSB0cnVlIGlmIHRoZSBhdHRyaWJ1dGUgc2hvdWxkIGJlIGlnbm9yZWQsIGZhbHNlIG90aGVyd2lzZVxuICAgICAgICAgKi9cbiAgICAgICAgZnVuY3Rpb24gaWdub3JlQXR0cmlidXRlKGF0dHIsIHRvLCB1cGRhdGVUeXBlLCBjdHgpIHtcbiAgICAgICAgICAgIGlmKGF0dHIgPT09ICd2YWx1ZScgJiYgY3R4Lmlnbm9yZUFjdGl2ZVZhbHVlICYmIHRvID09PSBkb2N1bWVudC5hY3RpdmVFbGVtZW50KXtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBjdHguY2FsbGJhY2tzLmJlZm9yZUF0dHJpYnV0ZVVwZGF0ZWQoYXR0ciwgdG8sIHVwZGF0ZVR5cGUpID09PSBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBzeW5jcyBhIGdpdmVuIG5vZGUgd2l0aCBhbm90aGVyIG5vZGUsIGNvcHlpbmcgb3ZlciBhbGwgYXR0cmlidXRlcyBhbmRcbiAgICAgICAgICogaW5uZXIgZWxlbWVudCBzdGF0ZSBmcm9tIHRoZSAnZnJvbScgbm9kZSB0byB0aGUgJ3RvJyBub2RlXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7RWxlbWVudH0gZnJvbSB0aGUgZWxlbWVudCB0byBjb3B5IGF0dHJpYnV0ZXMgJiBzdGF0ZSBmcm9tXG4gICAgICAgICAqIEBwYXJhbSB7RWxlbWVudH0gdG8gdGhlIGVsZW1lbnQgdG8gY29weSBhdHRyaWJ1dGVzICYgc3RhdGUgdG9cbiAgICAgICAgICogQHBhcmFtIGN0eCB0aGUgbWVyZ2UgY29udGV4dFxuICAgICAgICAgKi9cbiAgICAgICAgZnVuY3Rpb24gc3luY05vZGVGcm9tKGZyb20sIHRvLCBjdHgpIHtcbiAgICAgICAgICAgIGxldCB0eXBlID0gZnJvbS5ub2RlVHlwZTtcblxuICAgICAgICAgICAgLy8gaWYgaXMgYW4gZWxlbWVudCB0eXBlLCBzeW5jIHRoZSBhdHRyaWJ1dGVzIGZyb20gdGhlXG4gICAgICAgICAgICAvLyBuZXcgbm9kZSBpbnRvIHRoZSBuZXcgbm9kZVxuICAgICAgICAgICAgaWYgKHR5cGUgPT09IDEgLyogZWxlbWVudCB0eXBlICovKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZnJvbUF0dHJpYnV0ZXMgPSBmcm9tLmF0dHJpYnV0ZXM7XG4gICAgICAgICAgICAgICAgY29uc3QgdG9BdHRyaWJ1dGVzID0gdG8uYXR0cmlidXRlcztcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGZyb21BdHRyaWJ1dGUgb2YgZnJvbUF0dHJpYnV0ZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlnbm9yZUF0dHJpYnV0ZShmcm9tQXR0cmlidXRlLm5hbWUsIHRvLCAndXBkYXRlJywgY3R4KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHRvLmdldEF0dHJpYnV0ZShmcm9tQXR0cmlidXRlLm5hbWUpICE9PSBmcm9tQXR0cmlidXRlLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0by5zZXRBdHRyaWJ1dGUoZnJvbUF0dHJpYnV0ZS5uYW1lLCBmcm9tQXR0cmlidXRlLnZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBpdGVyYXRlIGJhY2t3YXJkcyB0byBhdm9pZCBza2lwcGluZyBvdmVyIGl0ZW1zIHdoZW4gYSBkZWxldGUgb2NjdXJzXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IHRvQXR0cmlidXRlcy5sZW5ndGggLSAxOyAwIDw9IGk7IGktLSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB0b0F0dHJpYnV0ZSA9IHRvQXR0cmlidXRlc1tpXTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlnbm9yZUF0dHJpYnV0ZSh0b0F0dHJpYnV0ZS5uYW1lLCB0bywgJ3JlbW92ZScsIGN0eCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmICghZnJvbS5oYXNBdHRyaWJ1dGUodG9BdHRyaWJ1dGUubmFtZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRvLnJlbW92ZUF0dHJpYnV0ZSh0b0F0dHJpYnV0ZS5uYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gc3luYyB0ZXh0IG5vZGVzXG4gICAgICAgICAgICBpZiAodHlwZSA9PT0gOCAvKiBjb21tZW50ICovIHx8IHR5cGUgPT09IDMgLyogdGV4dCAqLykge1xuICAgICAgICAgICAgICAgIGlmICh0by5ub2RlVmFsdWUgIT09IGZyb20ubm9kZVZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRvLm5vZGVWYWx1ZSA9IGZyb20ubm9kZVZhbHVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKCFpZ25vcmVWYWx1ZU9mQWN0aXZlRWxlbWVudCh0bywgY3R4KSkge1xuICAgICAgICAgICAgICAgIC8vIHN5bmMgaW5wdXQgdmFsdWVzXG4gICAgICAgICAgICAgICAgc3luY0lucHV0VmFsdWUoZnJvbSwgdG8sIGN0eCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvKipcbiAgICAgICAgICogQHBhcmFtIGZyb20ge0VsZW1lbnR9IGVsZW1lbnQgdG8gc3luYyB0aGUgdmFsdWUgZnJvbVxuICAgICAgICAgKiBAcGFyYW0gdG8ge0VsZW1lbnR9IGVsZW1lbnQgdG8gc3luYyB0aGUgdmFsdWUgdG9cbiAgICAgICAgICogQHBhcmFtIGF0dHJpYnV0ZU5hbWUge1N0cmluZ30gdGhlIGF0dHJpYnV0ZSBuYW1lXG4gICAgICAgICAqIEBwYXJhbSBjdHggdGhlIG1lcmdlIGNvbnRleHRcbiAgICAgICAgICovXG4gICAgICAgIGZ1bmN0aW9uIHN5bmNCb29sZWFuQXR0cmlidXRlKGZyb20sIHRvLCBhdHRyaWJ1dGVOYW1lLCBjdHgpIHtcbiAgICAgICAgICAgIGlmIChmcm9tW2F0dHJpYnV0ZU5hbWVdICE9PSB0b1thdHRyaWJ1dGVOYW1lXSkge1xuICAgICAgICAgICAgICAgIGxldCBpZ25vcmVVcGRhdGUgPSBpZ25vcmVBdHRyaWJ1dGUoYXR0cmlidXRlTmFtZSwgdG8sICd1cGRhdGUnLCBjdHgpO1xuICAgICAgICAgICAgICAgIGlmICghaWdub3JlVXBkYXRlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRvW2F0dHJpYnV0ZU5hbWVdID0gZnJvbVthdHRyaWJ1dGVOYW1lXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGZyb21bYXR0cmlidXRlTmFtZV0pIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFpZ25vcmVVcGRhdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRvLnNldEF0dHJpYnV0ZShhdHRyaWJ1dGVOYW1lLCBmcm9tW2F0dHJpYnV0ZU5hbWVdKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghaWdub3JlQXR0cmlidXRlKGF0dHJpYnV0ZU5hbWUsIHRvLCAncmVtb3ZlJywgY3R4KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdG8ucmVtb3ZlQXR0cmlidXRlKGF0dHJpYnV0ZU5hbWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIE5COiBtYW55IGJvdGhhbnMgZGllZCB0byBicmluZyB1cyBpbmZvcm1hdGlvbjpcbiAgICAgICAgICpcbiAgICAgICAgICogIGh0dHBzOi8vZ2l0aHViLmNvbS9wYXRyaWNrLXN0ZWVsZS1pZGVtL21vcnBoZG9tL2Jsb2IvbWFzdGVyL3NyYy9zcGVjaWFsRWxIYW5kbGVycy5qc1xuICAgICAgICAgKiAgaHR0cHM6Ly9naXRodWIuY29tL2Nob29qcy9uYW5vbW9ycGgvYmxvYi9tYXN0ZXIvbGliL21vcnBoLmpzTDExM1xuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0gZnJvbSB7RWxlbWVudH0gdGhlIGVsZW1lbnQgdG8gc3luYyB0aGUgaW5wdXQgdmFsdWUgZnJvbVxuICAgICAgICAgKiBAcGFyYW0gdG8ge0VsZW1lbnR9IHRoZSBlbGVtZW50IHRvIHN5bmMgdGhlIGlucHV0IHZhbHVlIHRvXG4gICAgICAgICAqIEBwYXJhbSBjdHggdGhlIG1lcmdlIGNvbnRleHRcbiAgICAgICAgICovXG4gICAgICAgIGZ1bmN0aW9uIHN5bmNJbnB1dFZhbHVlKGZyb20sIHRvLCBjdHgpIHtcbiAgICAgICAgICAgIGlmIChmcm9tIGluc3RhbmNlb2YgSFRNTElucHV0RWxlbWVudCAmJlxuICAgICAgICAgICAgICAgIHRvIGluc3RhbmNlb2YgSFRNTElucHV0RWxlbWVudCAmJlxuICAgICAgICAgICAgICAgIGZyb20udHlwZSAhPT0gJ2ZpbGUnKSB7XG5cbiAgICAgICAgICAgICAgICBsZXQgZnJvbVZhbHVlID0gZnJvbS52YWx1ZTtcbiAgICAgICAgICAgICAgICBsZXQgdG9WYWx1ZSA9IHRvLnZhbHVlO1xuXG4gICAgICAgICAgICAgICAgLy8gc3luYyBib29sZWFuIGF0dHJpYnV0ZXNcbiAgICAgICAgICAgICAgICBzeW5jQm9vbGVhbkF0dHJpYnV0ZShmcm9tLCB0bywgJ2NoZWNrZWQnLCBjdHgpO1xuICAgICAgICAgICAgICAgIHN5bmNCb29sZWFuQXR0cmlidXRlKGZyb20sIHRvLCAnZGlzYWJsZWQnLCBjdHgpO1xuXG4gICAgICAgICAgICAgICAgaWYgKCFmcm9tLmhhc0F0dHJpYnV0ZSgndmFsdWUnKSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWlnbm9yZUF0dHJpYnV0ZSgndmFsdWUnLCB0bywgJ3JlbW92ZScsIGN0eCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRvLnZhbHVlID0gJyc7XG4gICAgICAgICAgICAgICAgICAgICAgICB0by5yZW1vdmVBdHRyaWJ1dGUoJ3ZhbHVlJyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGZyb21WYWx1ZSAhPT0gdG9WYWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWlnbm9yZUF0dHJpYnV0ZSgndmFsdWUnLCB0bywgJ3VwZGF0ZScsIGN0eCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRvLnNldEF0dHJpYnV0ZSgndmFsdWUnLCBmcm9tVmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdG8udmFsdWUgPSBmcm9tVmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGZyb20gaW5zdGFuY2VvZiBIVE1MT3B0aW9uRWxlbWVudCkge1xuICAgICAgICAgICAgICAgIHN5bmNCb29sZWFuQXR0cmlidXRlKGZyb20sIHRvLCAnc2VsZWN0ZWQnLCBjdHgpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChmcm9tIGluc3RhbmNlb2YgSFRNTFRleHRBcmVhRWxlbWVudCAmJiB0byBpbnN0YW5jZW9mIEhUTUxUZXh0QXJlYUVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICBsZXQgZnJvbVZhbHVlID0gZnJvbS52YWx1ZTtcbiAgICAgICAgICAgICAgICBsZXQgdG9WYWx1ZSA9IHRvLnZhbHVlO1xuICAgICAgICAgICAgICAgIGlmIChpZ25vcmVBdHRyaWJ1dGUoJ3ZhbHVlJywgdG8sICd1cGRhdGUnLCBjdHgpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGZyb21WYWx1ZSAhPT0gdG9WYWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICB0by52YWx1ZSA9IGZyb21WYWx1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHRvLmZpcnN0Q2hpbGQgJiYgdG8uZmlyc3RDaGlsZC5ub2RlVmFsdWUgIT09IGZyb21WYWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICB0by5maXJzdENoaWxkLm5vZGVWYWx1ZSA9IGZyb21WYWx1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAgICAgIC8vIHRoZSBIRUFEIHRhZyBjYW4gYmUgaGFuZGxlZCBzcGVjaWFsbHksIGVpdGhlciB3LyBhICdtZXJnZScgb3IgJ2FwcGVuZCcgc3R5bGVcbiAgICAgICAgLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgICAgICBmdW5jdGlvbiBoYW5kbGVIZWFkRWxlbWVudChuZXdIZWFkVGFnLCBjdXJyZW50SGVhZCwgY3R4KSB7XG5cbiAgICAgICAgICAgIGxldCBhZGRlZCA9IFtdO1xuICAgICAgICAgICAgbGV0IHJlbW92ZWQgPSBbXTtcbiAgICAgICAgICAgIGxldCBwcmVzZXJ2ZWQgPSBbXTtcbiAgICAgICAgICAgIGxldCBub2Rlc1RvQXBwZW5kID0gW107XG5cbiAgICAgICAgICAgIGxldCBoZWFkTWVyZ2VTdHlsZSA9IGN0eC5oZWFkLnN0eWxlO1xuXG4gICAgICAgICAgICAvLyBwdXQgYWxsIG5ldyBoZWFkIGVsZW1lbnRzIGludG8gYSBNYXAsIGJ5IHRoZWlyIG91dGVySFRNTFxuICAgICAgICAgICAgbGV0IHNyY1RvTmV3SGVhZE5vZGVzID0gbmV3IE1hcCgpO1xuICAgICAgICAgICAgZm9yIChjb25zdCBuZXdIZWFkQ2hpbGQgb2YgbmV3SGVhZFRhZy5jaGlsZHJlbikge1xuICAgICAgICAgICAgICAgIHNyY1RvTmV3SGVhZE5vZGVzLnNldChuZXdIZWFkQ2hpbGQub3V0ZXJIVE1MLCBuZXdIZWFkQ2hpbGQpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBmb3IgZWFjaCBlbHQgaW4gdGhlIGN1cnJlbnQgaGVhZFxuICAgICAgICAgICAgZm9yIChjb25zdCBjdXJyZW50SGVhZEVsdCBvZiBjdXJyZW50SGVhZC5jaGlsZHJlbikge1xuXG4gICAgICAgICAgICAgICAgLy8gSWYgdGhlIGN1cnJlbnQgaGVhZCBlbGVtZW50IGlzIGluIHRoZSBtYXBcbiAgICAgICAgICAgICAgICBsZXQgaW5OZXdDb250ZW50ID0gc3JjVG9OZXdIZWFkTm9kZXMuaGFzKGN1cnJlbnRIZWFkRWx0Lm91dGVySFRNTCk7XG4gICAgICAgICAgICAgICAgbGV0IGlzUmVBcHBlbmRlZCA9IGN0eC5oZWFkLnNob3VsZFJlQXBwZW5kKGN1cnJlbnRIZWFkRWx0KTtcbiAgICAgICAgICAgICAgICBsZXQgaXNQcmVzZXJ2ZWQgPSBjdHguaGVhZC5zaG91bGRQcmVzZXJ2ZShjdXJyZW50SGVhZEVsdCk7XG4gICAgICAgICAgICAgICAgaWYgKGluTmV3Q29udGVudCB8fCBpc1ByZXNlcnZlZCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXNSZUFwcGVuZGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyByZW1vdmUgdGhlIGN1cnJlbnQgdmVyc2lvbiBhbmQgbGV0IHRoZSBuZXcgdmVyc2lvbiByZXBsYWNlIGl0IGFuZCByZS1leGVjdXRlXG4gICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVkLnB1c2goY3VycmVudEhlYWRFbHQpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhpcyBlbGVtZW50IGFscmVhZHkgZXhpc3RzIGFuZCBzaG91bGQgbm90IGJlIHJlLWFwcGVuZGVkLCBzbyByZW1vdmUgaXQgZnJvbVxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhlIG5ldyBjb250ZW50IG1hcCwgcHJlc2VydmluZyBpdCBpbiB0aGUgRE9NXG4gICAgICAgICAgICAgICAgICAgICAgICBzcmNUb05ld0hlYWROb2Rlcy5kZWxldGUoY3VycmVudEhlYWRFbHQub3V0ZXJIVE1MKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHByZXNlcnZlZC5wdXNoKGN1cnJlbnRIZWFkRWx0KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChoZWFkTWVyZ2VTdHlsZSA9PT0gXCJhcHBlbmRcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2UgYXJlIGFwcGVuZGluZyBhbmQgdGhpcyBleGlzdGluZyBlbGVtZW50IGlzIG5vdCBuZXcgY29udGVudFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gc28gaWYgYW5kIG9ubHkgaWYgaXQgaXMgbWFya2VkIGZvciByZS1hcHBlbmQgZG8gd2UgZG8gYW55dGhpbmdcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc1JlQXBwZW5kZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVkLnB1c2goY3VycmVudEhlYWRFbHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVzVG9BcHBlbmQucHVzaChjdXJyZW50SGVhZEVsdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBpZiB0aGlzIGlzIGEgbWVyZ2UsIHdlIHJlbW92ZSB0aGlzIGNvbnRlbnQgc2luY2UgaXQgaXMgbm90IGluIHRoZSBuZXcgaGVhZFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGN0eC5oZWFkLnNob3VsZFJlbW92ZShjdXJyZW50SGVhZEVsdCkgIT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlZC5wdXNoKGN1cnJlbnRIZWFkRWx0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gUHVzaCB0aGUgcmVtYWluaW5nIG5ldyBoZWFkIGVsZW1lbnRzIGluIHRoZSBNYXAgaW50byB0aGVcbiAgICAgICAgICAgIC8vIG5vZGVzIHRvIGFwcGVuZCB0byB0aGUgaGVhZCB0YWdcbiAgICAgICAgICAgIG5vZGVzVG9BcHBlbmQucHVzaCguLi5zcmNUb05ld0hlYWROb2Rlcy52YWx1ZXMoKSk7XG5cbiAgICAgICAgICAgIGxldCBwcm9taXNlcyA9IFtdO1xuICAgICAgICAgICAgZm9yIChjb25zdCBuZXdOb2RlIG9mIG5vZGVzVG9BcHBlbmQpIHtcbiAgICAgICAgICAgICAgICBsZXQgbmV3RWx0ID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKS5jcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQobmV3Tm9kZS5vdXRlckhUTUwpLmZpcnN0Q2hpbGQ7XG4gICAgICAgICAgICAgICAgaWYgKGN0eC5jYWxsYmFja3MuYmVmb3JlTm9kZUFkZGVkKG5ld0VsdCkgIT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChuZXdFbHQuaHJlZiB8fCBuZXdFbHQuc3JjKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgcmVzb2x2ZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgcHJvbWlzZSA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uIChfcmVzb2x2ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUgPSBfcmVzb2x2ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgbmV3RWx0LmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBwcm9taXNlcy5wdXNoKHByb21pc2UpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRIZWFkLmFwcGVuZENoaWxkKG5ld0VsdCk7XG4gICAgICAgICAgICAgICAgICAgIGN0eC5jYWxsYmFja3MuYWZ0ZXJOb2RlQWRkZWQobmV3RWx0KTtcbiAgICAgICAgICAgICAgICAgICAgYWRkZWQucHVzaChuZXdFbHQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gcmVtb3ZlIGFsbCByZW1vdmVkIGVsZW1lbnRzLCBhZnRlciB3ZSBoYXZlIGFwcGVuZGVkIHRoZSBuZXcgZWxlbWVudHMgdG8gYXZvaWRcbiAgICAgICAgICAgIC8vIGFkZGl0aW9uYWwgbmV0d29yayByZXF1ZXN0cyBmb3IgdGhpbmdzIGxpa2Ugc3R5bGUgc2hlZXRzXG4gICAgICAgICAgICBmb3IgKGNvbnN0IHJlbW92ZWRFbGVtZW50IG9mIHJlbW92ZWQpIHtcbiAgICAgICAgICAgICAgICBpZiAoY3R4LmNhbGxiYWNrcy5iZWZvcmVOb2RlUmVtb3ZlZChyZW1vdmVkRWxlbWVudCkgIT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRIZWFkLnJlbW92ZUNoaWxkKHJlbW92ZWRFbGVtZW50KTtcbiAgICAgICAgICAgICAgICAgICAgY3R4LmNhbGxiYWNrcy5hZnRlck5vZGVSZW1vdmVkKHJlbW92ZWRFbGVtZW50KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGN0eC5oZWFkLmFmdGVySGVhZE1vcnBoZWQoY3VycmVudEhlYWQsIHthZGRlZDogYWRkZWQsIGtlcHQ6IHByZXNlcnZlZCwgcmVtb3ZlZDogcmVtb3ZlZH0pO1xuICAgICAgICAgICAgcmV0dXJuIHByb21pc2VzO1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gbm9PcCgpIHtcbiAgICAgICAgfVxuXG4gICAgICAgIC8qXG4gICAgICAgICAgRGVlcCBtZXJnZXMgdGhlIGNvbmZpZyBvYmplY3QgYW5kIHRoZSBJZGlvbW9yb3BoLmRlZmF1bHRzIG9iamVjdCB0b1xuICAgICAgICAgIHByb2R1Y2UgYSBmaW5hbCBjb25maWd1cmF0aW9uIG9iamVjdFxuICAgICAgICAgKi9cbiAgICAgICAgZnVuY3Rpb24gbWVyZ2VEZWZhdWx0cyhjb25maWcpIHtcbiAgICAgICAgICAgIGxldCBmaW5hbENvbmZpZyA9IHt9O1xuICAgICAgICAgICAgLy8gY29weSB0b3AgbGV2ZWwgc3R1ZmYgaW50byBmaW5hbCBjb25maWdcbiAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oZmluYWxDb25maWcsIGRlZmF1bHRzKTtcbiAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oZmluYWxDb25maWcsIGNvbmZpZyk7XG5cbiAgICAgICAgICAgIC8vIGNvcHkgY2FsbGJhY2tzIGludG8gZmluYWwgY29uZmlnIChkbyB0aGlzIHRvIGRlZXAgbWVyZ2UgdGhlIGNhbGxiYWNrcylcbiAgICAgICAgICAgIGZpbmFsQ29uZmlnLmNhbGxiYWNrcyA9IHt9O1xuICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihmaW5hbENvbmZpZy5jYWxsYmFja3MsIGRlZmF1bHRzLmNhbGxiYWNrcyk7XG4gICAgICAgICAgICBPYmplY3QuYXNzaWduKGZpbmFsQ29uZmlnLmNhbGxiYWNrcywgY29uZmlnLmNhbGxiYWNrcyk7XG5cbiAgICAgICAgICAgIC8vIGNvcHkgaGVhZCBjb25maWcgaW50byBmaW5hbCBjb25maWcgIChkbyB0aGlzIHRvIGRlZXAgbWVyZ2UgdGhlIGhlYWQpXG4gICAgICAgICAgICBmaW5hbENvbmZpZy5oZWFkID0ge307XG4gICAgICAgICAgICBPYmplY3QuYXNzaWduKGZpbmFsQ29uZmlnLmhlYWQsIGRlZmF1bHRzLmhlYWQpO1xuICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihmaW5hbENvbmZpZy5oZWFkLCBjb25maWcuaGVhZCk7XG4gICAgICAgICAgICByZXR1cm4gZmluYWxDb25maWc7XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBjcmVhdGVNb3JwaENvbnRleHQob2xkTm9kZSwgbmV3Q29udGVudCwgY29uZmlnKSB7XG4gICAgICAgICAgICBjb25maWcgPSBtZXJnZURlZmF1bHRzKGNvbmZpZyk7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHRhcmdldDogb2xkTm9kZSxcbiAgICAgICAgICAgICAgICBuZXdDb250ZW50OiBuZXdDb250ZW50LFxuICAgICAgICAgICAgICAgIGNvbmZpZzogY29uZmlnLFxuICAgICAgICAgICAgICAgIG1vcnBoU3R5bGU6IGNvbmZpZy5tb3JwaFN0eWxlLFxuICAgICAgICAgICAgICAgIGlnbm9yZUFjdGl2ZTogY29uZmlnLmlnbm9yZUFjdGl2ZSxcbiAgICAgICAgICAgICAgICBpZ25vcmVBY3RpdmVWYWx1ZTogY29uZmlnLmlnbm9yZUFjdGl2ZVZhbHVlLFxuICAgICAgICAgICAgICAgIGlkTWFwOiBjcmVhdGVJZE1hcChvbGROb2RlLCBuZXdDb250ZW50KSxcbiAgICAgICAgICAgICAgICBkZWFkSWRzOiBuZXcgU2V0KCksXG4gICAgICAgICAgICAgICAgY2FsbGJhY2tzOiBjb25maWcuY2FsbGJhY2tzLFxuICAgICAgICAgICAgICAgIGhlYWQ6IGNvbmZpZy5oZWFkXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBpc0lkU2V0TWF0Y2gobm9kZTEsIG5vZGUyLCBjdHgpIHtcbiAgICAgICAgICAgIGlmIChub2RlMSA9PSBudWxsIHx8IG5vZGUyID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobm9kZTEubm9kZVR5cGUgPT09IG5vZGUyLm5vZGVUeXBlICYmIG5vZGUxLnRhZ05hbWUgPT09IG5vZGUyLnRhZ05hbWUpIHtcbiAgICAgICAgICAgICAgICBpZiAobm9kZTEuaWQgIT09IFwiXCIgJiYgbm9kZTEuaWQgPT09IG5vZGUyLmlkKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBnZXRJZEludGVyc2VjdGlvbkNvdW50KGN0eCwgbm9kZTEsIG5vZGUyKSA+IDA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gaXNTb2Z0TWF0Y2gobm9kZTEsIG5vZGUyKSB7XG4gICAgICAgICAgICBpZiAobm9kZTEgPT0gbnVsbCB8fCBub2RlMiA9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG5vZGUxLm5vZGVUeXBlID09PSBub2RlMi5ub2RlVHlwZSAmJiBub2RlMS50YWdOYW1lID09PSBub2RlMi50YWdOYW1lXG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiByZW1vdmVOb2Rlc0JldHdlZW4oc3RhcnRJbmNsdXNpdmUsIGVuZEV4Y2x1c2l2ZSwgY3R4KSB7XG4gICAgICAgICAgICB3aGlsZSAoc3RhcnRJbmNsdXNpdmUgIT09IGVuZEV4Y2x1c2l2ZSkge1xuICAgICAgICAgICAgICAgIGxldCB0ZW1wTm9kZSA9IHN0YXJ0SW5jbHVzaXZlO1xuICAgICAgICAgICAgICAgIHN0YXJ0SW5jbHVzaXZlID0gc3RhcnRJbmNsdXNpdmUubmV4dFNpYmxpbmc7XG4gICAgICAgICAgICAgICAgcmVtb3ZlTm9kZSh0ZW1wTm9kZSwgY3R4KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlbW92ZUlkc0Zyb21Db25zaWRlcmF0aW9uKGN0eCwgZW5kRXhjbHVzaXZlKTtcbiAgICAgICAgICAgIHJldHVybiBlbmRFeGNsdXNpdmUubmV4dFNpYmxpbmc7XG4gICAgICAgIH1cblxuICAgICAgICAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAgICAgIC8vIFNjYW5zIGZvcndhcmQgZnJvbSB0aGUgaW5zZXJ0aW9uUG9pbnQgaW4gdGhlIG9sZCBwYXJlbnQgbG9va2luZyBmb3IgYSBwb3RlbnRpYWwgaWQgbWF0Y2hcbiAgICAgICAgLy8gZm9yIHRoZSBuZXdDaGlsZC4gIFdlIHN0b3AgaWYgd2UgZmluZCBhIHBvdGVudGlhbCBpZCBtYXRjaCBmb3IgdGhlIG5ldyBjaGlsZCBPUlxuICAgICAgICAvLyBpZiB0aGUgbnVtYmVyIG9mIHBvdGVudGlhbCBpZCBtYXRjaGVzIHdlIGFyZSBkaXNjYXJkaW5nIGlzIGdyZWF0ZXIgdGhhbiB0aGVcbiAgICAgICAgLy8gcG90ZW50aWFsIGlkIG1hdGNoZXMgZm9yIHRoZSBuZXcgY2hpbGRcbiAgICAgICAgLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgICAgICBmdW5jdGlvbiBmaW5kSWRTZXRNYXRjaChuZXdDb250ZW50LCBvbGRQYXJlbnQsIG5ld0NoaWxkLCBpbnNlcnRpb25Qb2ludCwgY3R4KSB7XG5cbiAgICAgICAgICAgIC8vIG1heCBpZCBtYXRjaGVzIHdlIGFyZSB3aWxsaW5nIHRvIGRpc2NhcmQgaW4gb3VyIHNlYXJjaFxuICAgICAgICAgICAgbGV0IG5ld0NoaWxkUG90ZW50aWFsSWRDb3VudCA9IGdldElkSW50ZXJzZWN0aW9uQ291bnQoY3R4LCBuZXdDaGlsZCwgb2xkUGFyZW50KTtcblxuICAgICAgICAgICAgbGV0IHBvdGVudGlhbE1hdGNoID0gbnVsbDtcblxuICAgICAgICAgICAgLy8gb25seSBzZWFyY2ggZm9yd2FyZCBpZiB0aGVyZSBpcyBhIHBvc3NpYmlsaXR5IG9mIGFuIGlkIG1hdGNoXG4gICAgICAgICAgICBpZiAobmV3Q2hpbGRQb3RlbnRpYWxJZENvdW50ID4gMCkge1xuICAgICAgICAgICAgICAgIGxldCBwb3RlbnRpYWxNYXRjaCA9IGluc2VydGlvblBvaW50O1xuICAgICAgICAgICAgICAgIC8vIGlmIHRoZXJlIGlzIGEgcG9zc2liaWxpdHkgb2YgYW4gaWQgbWF0Y2gsIHNjYW4gZm9yd2FyZFxuICAgICAgICAgICAgICAgIC8vIGtlZXAgdHJhY2sgb2YgdGhlIHBvdGVudGlhbCBpZCBtYXRjaCBjb3VudCB3ZSBhcmUgZGlzY2FyZGluZyAodGhlXG4gICAgICAgICAgICAgICAgLy8gbmV3Q2hpbGRQb3RlbnRpYWxJZENvdW50IG11c3QgYmUgZ3JlYXRlciB0aGFuIHRoaXMgdG8gbWFrZSBpdCBsaWtlbHlcbiAgICAgICAgICAgICAgICAvLyB3b3J0aCBpdClcbiAgICAgICAgICAgICAgICBsZXQgb3RoZXJNYXRjaENvdW50ID0gMDtcbiAgICAgICAgICAgICAgICB3aGlsZSAocG90ZW50aWFsTWF0Y2ggIT0gbnVsbCkge1xuXG4gICAgICAgICAgICAgICAgICAgIC8vIElmIHdlIGhhdmUgYW4gaWQgbWF0Y2gsIHJldHVybiB0aGUgY3VycmVudCBwb3RlbnRpYWwgbWF0Y2hcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzSWRTZXRNYXRjaChuZXdDaGlsZCwgcG90ZW50aWFsTWF0Y2gsIGN0eCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwb3RlbnRpYWxNYXRjaDtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIC8vIGNvbXB1dGVyIHRoZSBvdGhlciBwb3RlbnRpYWwgbWF0Y2hlcyBvZiB0aGlzIG5ldyBjb250ZW50XG4gICAgICAgICAgICAgICAgICAgIG90aGVyTWF0Y2hDb3VudCArPSBnZXRJZEludGVyc2VjdGlvbkNvdW50KGN0eCwgcG90ZW50aWFsTWF0Y2gsIG5ld0NvbnRlbnQpO1xuICAgICAgICAgICAgICAgICAgICBpZiAob3RoZXJNYXRjaENvdW50ID4gbmV3Q2hpbGRQb3RlbnRpYWxJZENvdW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBpZiB3ZSBoYXZlIG1vcmUgcG90ZW50aWFsIGlkIG1hdGNoZXMgaW4gX290aGVyXyBjb250ZW50LCB3ZVxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gZG8gbm90IGhhdmUgYSBnb29kIGNhbmRpZGF0ZSBmb3IgYW4gaWQgbWF0Y2gsIHNvIHJldHVybiBudWxsXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIC8vIGFkdmFuY2VkIHRvIHRoZSBuZXh0IG9sZCBjb250ZW50IGNoaWxkXG4gICAgICAgICAgICAgICAgICAgIHBvdGVudGlhbE1hdGNoID0gcG90ZW50aWFsTWF0Y2gubmV4dFNpYmxpbmc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHBvdGVudGlhbE1hdGNoO1xuICAgICAgICB9XG5cbiAgICAgICAgLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgICAgICAvLyBTY2FucyBmb3J3YXJkIGZyb20gdGhlIGluc2VydGlvblBvaW50IGluIHRoZSBvbGQgcGFyZW50IGxvb2tpbmcgZm9yIGEgcG90ZW50aWFsIHNvZnQgbWF0Y2hcbiAgICAgICAgLy8gZm9yIHRoZSBuZXdDaGlsZC4gIFdlIHN0b3AgaWYgd2UgZmluZCBhIHBvdGVudGlhbCBzb2Z0IG1hdGNoIGZvciB0aGUgbmV3IGNoaWxkIE9SXG4gICAgICAgIC8vIGlmIHdlIGZpbmQgYSBwb3RlbnRpYWwgaWQgbWF0Y2ggaW4gdGhlIG9sZCBwYXJlbnRzIGNoaWxkcmVuIE9SIGlmIHdlIGZpbmQgdHdvXG4gICAgICAgIC8vIHBvdGVudGlhbCBzb2Z0IG1hdGNoZXMgZm9yIHRoZSBuZXh0IHR3byBwaWVjZXMgb2YgbmV3IGNvbnRlbnRcbiAgICAgICAgLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgICAgICBmdW5jdGlvbiBmaW5kU29mdE1hdGNoKG5ld0NvbnRlbnQsIG9sZFBhcmVudCwgbmV3Q2hpbGQsIGluc2VydGlvblBvaW50LCBjdHgpIHtcblxuICAgICAgICAgICAgbGV0IHBvdGVudGlhbFNvZnRNYXRjaCA9IGluc2VydGlvblBvaW50O1xuICAgICAgICAgICAgbGV0IG5leHRTaWJsaW5nID0gbmV3Q2hpbGQubmV4dFNpYmxpbmc7XG4gICAgICAgICAgICBsZXQgc2libGluZ1NvZnRNYXRjaENvdW50ID0gMDtcblxuICAgICAgICAgICAgd2hpbGUgKHBvdGVudGlhbFNvZnRNYXRjaCAhPSBudWxsKSB7XG5cbiAgICAgICAgICAgICAgICBpZiAoZ2V0SWRJbnRlcnNlY3Rpb25Db3VudChjdHgsIHBvdGVudGlhbFNvZnRNYXRjaCwgbmV3Q29udGVudCkgPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIHRoZSBjdXJyZW50IHBvdGVudGlhbCBzb2Z0IG1hdGNoIGhhcyBhIHBvdGVudGlhbCBpZCBzZXQgbWF0Y2ggd2l0aCB0aGUgcmVtYWluaW5nIG5ld1xuICAgICAgICAgICAgICAgICAgICAvLyBjb250ZW50IHNvIGJhaWwgb3V0IG9mIGxvb2tpbmdcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLy8gaWYgd2UgaGF2ZSBhIHNvZnQgbWF0Y2ggd2l0aCB0aGUgY3VycmVudCBub2RlLCByZXR1cm4gaXRcbiAgICAgICAgICAgICAgICBpZiAoaXNTb2Z0TWF0Y2gobmV3Q2hpbGQsIHBvdGVudGlhbFNvZnRNYXRjaCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBvdGVudGlhbFNvZnRNYXRjaDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoaXNTb2Z0TWF0Y2gobmV4dFNpYmxpbmcsIHBvdGVudGlhbFNvZnRNYXRjaCkpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gdGhlIG5leHQgbmV3IG5vZGUgaGFzIGEgc29mdCBtYXRjaCB3aXRoIHRoaXMgbm9kZSwgc29cbiAgICAgICAgICAgICAgICAgICAgLy8gaW5jcmVtZW50IHRoZSBjb3VudCBvZiBmdXR1cmUgc29mdCBtYXRjaGVzXG4gICAgICAgICAgICAgICAgICAgIHNpYmxpbmdTb2Z0TWF0Y2hDb3VudCsrO1xuICAgICAgICAgICAgICAgICAgICBuZXh0U2libGluZyA9IG5leHRTaWJsaW5nLm5leHRTaWJsaW5nO1xuXG4gICAgICAgICAgICAgICAgICAgIC8vIElmIHRoZXJlIGFyZSB0d28gZnV0dXJlIHNvZnQgbWF0Y2hlcywgYmFpbCB0byBhbGxvdyB0aGUgc2libGluZ3MgdG8gc29mdCBtYXRjaFxuICAgICAgICAgICAgICAgICAgICAvLyBzbyB0aGF0IHdlIGRvbid0IGNvbnN1bWUgZnV0dXJlIHNvZnQgbWF0Y2hlcyBmb3IgdGhlIHNha2Ugb2YgdGhlIGN1cnJlbnQgbm9kZVxuICAgICAgICAgICAgICAgICAgICBpZiAoc2libGluZ1NvZnRNYXRjaENvdW50ID49IDIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLy8gYWR2YW5jZWQgdG8gdGhlIG5leHQgb2xkIGNvbnRlbnQgY2hpbGRcbiAgICAgICAgICAgICAgICBwb3RlbnRpYWxTb2Z0TWF0Y2ggPSBwb3RlbnRpYWxTb2Z0TWF0Y2gubmV4dFNpYmxpbmc7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBwb3RlbnRpYWxTb2Z0TWF0Y2g7XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBwYXJzZUNvbnRlbnQobmV3Q29udGVudCkge1xuICAgICAgICAgICAgbGV0IHBhcnNlciA9IG5ldyBET01QYXJzZXIoKTtcblxuICAgICAgICAgICAgLy8gcmVtb3ZlIHN2Z3MgdG8gYXZvaWQgZmFsc2UtcG9zaXRpdmUgbWF0Y2hlcyBvbiBoZWFkLCBldGMuXG4gICAgICAgICAgICBsZXQgY29udGVudFdpdGhTdmdzUmVtb3ZlZCA9IG5ld0NvbnRlbnQucmVwbGFjZSgvPHN2ZyhcXHNbXj5dKj58PikoW1xcc1xcU10qPyk8XFwvc3ZnPi9naW0sICcnKTtcblxuICAgICAgICAgICAgLy8gaWYgdGhlIG5ld0NvbnRlbnQgY29udGFpbnMgYSBodG1sLCBoZWFkIG9yIGJvZHkgdGFnLCB3ZSBjYW4gc2ltcGx5IHBhcnNlIGl0IHcvbyB3cmFwcGluZ1xuICAgICAgICAgICAgaWYgKGNvbnRlbnRXaXRoU3Znc1JlbW92ZWQubWF0Y2goLzxcXC9odG1sPi8pIHx8IGNvbnRlbnRXaXRoU3Znc1JlbW92ZWQubWF0Y2goLzxcXC9oZWFkPi8pIHx8IGNvbnRlbnRXaXRoU3Znc1JlbW92ZWQubWF0Y2goLzxcXC9ib2R5Pi8pKSB7XG4gICAgICAgICAgICAgICAgbGV0IGNvbnRlbnQgPSBwYXJzZXIucGFyc2VGcm9tU3RyaW5nKG5ld0NvbnRlbnQsIFwidGV4dC9odG1sXCIpO1xuICAgICAgICAgICAgICAgIC8vIGlmIGl0IGlzIGEgZnVsbCBIVE1MIGRvY3VtZW50LCByZXR1cm4gdGhlIGRvY3VtZW50IGl0c2VsZiBhcyB0aGUgcGFyZW50IGNvbnRhaW5lclxuICAgICAgICAgICAgICAgIGlmIChjb250ZW50V2l0aFN2Z3NSZW1vdmVkLm1hdGNoKC88XFwvaHRtbD4vKSkge1xuICAgICAgICAgICAgICAgICAgICBjb250ZW50LmdlbmVyYXRlZEJ5SWRpb21vcnBoID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRlbnQ7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gb3RoZXJ3aXNlIHJldHVybiB0aGUgaHRtbCBlbGVtZW50IGFzIHRoZSBwYXJlbnQgY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgIGxldCBodG1sRWxlbWVudCA9IGNvbnRlbnQuZmlyc3RDaGlsZDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGh0bWxFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBodG1sRWxlbWVudC5nZW5lcmF0ZWRCeUlkaW9tb3JwaCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaHRtbEVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gaWYgaXQgaXMgcGFydGlhbCBIVE1MLCB3cmFwIGl0IGluIGEgdGVtcGxhdGUgdGFnIHRvIHByb3ZpZGUgYSBwYXJlbnQgZWxlbWVudCBhbmQgYWxzbyB0byBoZWxwXG4gICAgICAgICAgICAgICAgLy8gZGVhbCB3aXRoIHRvdWNoeSB0YWdzIGxpa2UgdHIsIHRib2R5LCBldGMuXG4gICAgICAgICAgICAgICAgbGV0IHJlc3BvbnNlRG9jID0gcGFyc2VyLnBhcnNlRnJvbVN0cmluZyhcIjxib2R5Pjx0ZW1wbGF0ZT5cIiArIG5ld0NvbnRlbnQgKyBcIjwvdGVtcGxhdGU+PC9ib2R5PlwiLCBcInRleHQvaHRtbFwiKTtcbiAgICAgICAgICAgICAgICBsZXQgY29udGVudCA9IHJlc3BvbnNlRG9jLmJvZHkucXVlcnlTZWxlY3RvcigndGVtcGxhdGUnKS5jb250ZW50O1xuICAgICAgICAgICAgICAgIGNvbnRlbnQuZ2VuZXJhdGVkQnlJZGlvbW9ycGggPSB0cnVlO1xuICAgICAgICAgICAgICAgIHJldHVybiBjb250ZW50XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBub3JtYWxpemVDb250ZW50KG5ld0NvbnRlbnQpIHtcbiAgICAgICAgICAgIGlmIChuZXdDb250ZW50ID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAvLyBub2luc3BlY3Rpb24gVW5uZWNlc3NhcnlMb2NhbFZhcmlhYmxlSlNcbiAgICAgICAgICAgICAgICBjb25zdCBkdW1teVBhcmVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgICAgIHJldHVybiBkdW1teVBhcmVudDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobmV3Q29udGVudC5nZW5lcmF0ZWRCeUlkaW9tb3JwaCkge1xuICAgICAgICAgICAgICAgIC8vIHRoZSB0ZW1wbGF0ZSB0YWcgY3JlYXRlZCBieSBpZGlvbW9ycGggcGFyc2luZyBjYW4gc2VydmUgYXMgYSBkdW1teSBwYXJlbnRcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3Q29udGVudDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobmV3Q29udGVudCBpbnN0YW5jZW9mIE5vZGUpIHtcbiAgICAgICAgICAgICAgICAvLyBhIHNpbmdsZSBub2RlIGlzIGFkZGVkIGFzIGEgY2hpbGQgdG8gYSBkdW1teSBwYXJlbnRcbiAgICAgICAgICAgICAgICBjb25zdCBkdW1teVBhcmVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgICAgIGR1bW15UGFyZW50LmFwcGVuZChuZXdDb250ZW50KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZHVtbXlQYXJlbnQ7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIGFsbCBub2RlcyBpbiB0aGUgYXJyYXkgb3IgSFRNTEVsZW1lbnQgY29sbGVjdGlvbiBhcmUgY29uc29saWRhdGVkIHVuZGVyXG4gICAgICAgICAgICAgICAgLy8gYSBzaW5nbGUgZHVtbXkgcGFyZW50IGVsZW1lbnRcbiAgICAgICAgICAgICAgICBjb25zdCBkdW1teVBhcmVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgZWx0IG9mIFsuLi5uZXdDb250ZW50XSkge1xuICAgICAgICAgICAgICAgICAgICBkdW1teVBhcmVudC5hcHBlbmQoZWx0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGR1bW15UGFyZW50O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gaW5zZXJ0U2libGluZ3MocHJldmlvdXNTaWJsaW5nLCBtb3JwaGVkTm9kZSwgbmV4dFNpYmxpbmcpIHtcbiAgICAgICAgICAgIGxldCBzdGFjayA9IFtdO1xuICAgICAgICAgICAgbGV0IGFkZGVkID0gW107XG4gICAgICAgICAgICB3aGlsZSAocHJldmlvdXNTaWJsaW5nICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICBzdGFjay5wdXNoKHByZXZpb3VzU2libGluZyk7XG4gICAgICAgICAgICAgICAgcHJldmlvdXNTaWJsaW5nID0gcHJldmlvdXNTaWJsaW5nLnByZXZpb3VzU2libGluZztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHdoaWxlIChzdGFjay5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgbGV0IG5vZGUgPSBzdGFjay5wb3AoKTtcbiAgICAgICAgICAgICAgICBhZGRlZC5wdXNoKG5vZGUpOyAvLyBwdXNoIGFkZGVkIHByZWNlZGluZyBzaWJsaW5ncyBvbiBpbiBvcmRlciBhbmQgaW5zZXJ0XG4gICAgICAgICAgICAgICAgbW9ycGhlZE5vZGUucGFyZW50RWxlbWVudC5pbnNlcnRCZWZvcmUobm9kZSwgbW9ycGhlZE5vZGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYWRkZWQucHVzaChtb3JwaGVkTm9kZSk7XG4gICAgICAgICAgICB3aGlsZSAobmV4dFNpYmxpbmcgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHN0YWNrLnB1c2gobmV4dFNpYmxpbmcpO1xuICAgICAgICAgICAgICAgIGFkZGVkLnB1c2gobmV4dFNpYmxpbmcpOyAvLyBoZXJlIHdlIGFyZSBnb2luZyBpbiBvcmRlciwgc28gcHVzaCBvbiBhcyB3ZSBzY2FuLCByYXRoZXIgdGhhbiBhZGRcbiAgICAgICAgICAgICAgICBuZXh0U2libGluZyA9IG5leHRTaWJsaW5nLm5leHRTaWJsaW5nO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgd2hpbGUgKHN0YWNrLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBtb3JwaGVkTm9kZS5wYXJlbnRFbGVtZW50Lmluc2VydEJlZm9yZShzdGFjay5wb3AoKSwgbW9ycGhlZE5vZGUubmV4dFNpYmxpbmcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGFkZGVkO1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gZmluZEJlc3ROb2RlTWF0Y2gobmV3Q29udGVudCwgb2xkTm9kZSwgY3R4KSB7XG4gICAgICAgICAgICBsZXQgY3VycmVudEVsZW1lbnQ7XG4gICAgICAgICAgICBjdXJyZW50RWxlbWVudCA9IG5ld0NvbnRlbnQuZmlyc3RDaGlsZDtcbiAgICAgICAgICAgIGxldCBiZXN0RWxlbWVudCA9IGN1cnJlbnRFbGVtZW50O1xuICAgICAgICAgICAgbGV0IHNjb3JlID0gMDtcbiAgICAgICAgICAgIHdoaWxlIChjdXJyZW50RWxlbWVudCkge1xuICAgICAgICAgICAgICAgIGxldCBuZXdTY29yZSA9IHNjb3JlRWxlbWVudChjdXJyZW50RWxlbWVudCwgb2xkTm9kZSwgY3R4KTtcbiAgICAgICAgICAgICAgICBpZiAobmV3U2NvcmUgPiBzY29yZSkge1xuICAgICAgICAgICAgICAgICAgICBiZXN0RWxlbWVudCA9IGN1cnJlbnRFbGVtZW50O1xuICAgICAgICAgICAgICAgICAgICBzY29yZSA9IG5ld1Njb3JlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjdXJyZW50RWxlbWVudCA9IGN1cnJlbnRFbGVtZW50Lm5leHRTaWJsaW5nO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGJlc3RFbGVtZW50O1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gc2NvcmVFbGVtZW50KG5vZGUxLCBub2RlMiwgY3R4KSB7XG4gICAgICAgICAgICBpZiAoaXNTb2Z0TWF0Y2gobm9kZTEsIG5vZGUyKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiAuNSArIGdldElkSW50ZXJzZWN0aW9uQ291bnQoY3R4LCBub2RlMSwgbm9kZTIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiByZW1vdmVOb2RlKHRlbXBOb2RlLCBjdHgpIHtcbiAgICAgICAgICAgIHJlbW92ZUlkc0Zyb21Db25zaWRlcmF0aW9uKGN0eCwgdGVtcE5vZGUpO1xuICAgICAgICAgICAgaWYgKGN0eC5jYWxsYmFja3MuYmVmb3JlTm9kZVJlbW92ZWQodGVtcE5vZGUpID09PSBmYWxzZSkgcmV0dXJuO1xuXG4gICAgICAgICAgICB0ZW1wTm9kZS5yZW1vdmUoKTtcbiAgICAgICAgICAgIGN0eC5jYWxsYmFja3MuYWZ0ZXJOb2RlUmVtb3ZlZCh0ZW1wTm9kZSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAgICAgIC8vIElEIFNldCBGdW5jdGlvbnNcbiAgICAgICAgLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gICAgICAgIGZ1bmN0aW9uIGlzSWRJbkNvbnNpZGVyYXRpb24oY3R4LCBpZCkge1xuICAgICAgICAgICAgcmV0dXJuICFjdHguZGVhZElkcy5oYXMoaWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gaWRJc1dpdGhpbk5vZGUoY3R4LCBpZCwgdGFyZ2V0Tm9kZSkge1xuICAgICAgICAgICAgbGV0IGlkU2V0ID0gY3R4LmlkTWFwLmdldCh0YXJnZXROb2RlKSB8fCBFTVBUWV9TRVQ7XG4gICAgICAgICAgICByZXR1cm4gaWRTZXQuaGFzKGlkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIHJlbW92ZUlkc0Zyb21Db25zaWRlcmF0aW9uKGN0eCwgbm9kZSkge1xuICAgICAgICAgICAgbGV0IGlkU2V0ID0gY3R4LmlkTWFwLmdldChub2RlKSB8fCBFTVBUWV9TRVQ7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGlkIG9mIGlkU2V0KSB7XG4gICAgICAgICAgICAgICAgY3R4LmRlYWRJZHMuYWRkKGlkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIGdldElkSW50ZXJzZWN0aW9uQ291bnQoY3R4LCBub2RlMSwgbm9kZTIpIHtcbiAgICAgICAgICAgIGxldCBzb3VyY2VTZXQgPSBjdHguaWRNYXAuZ2V0KG5vZGUxKSB8fCBFTVBUWV9TRVQ7XG4gICAgICAgICAgICBsZXQgbWF0Y2hDb3VudCA9IDA7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGlkIG9mIHNvdXJjZVNldCkge1xuICAgICAgICAgICAgICAgIC8vIGEgcG90ZW50aWFsIG1hdGNoIGlzIGFuIGlkIGluIHRoZSBzb3VyY2UgYW5kIHBvdGVudGlhbElkc1NldCwgYnV0XG4gICAgICAgICAgICAgICAgLy8gdGhhdCBoYXMgbm90IGFscmVhZHkgYmVlbiBtZXJnZWQgaW50byB0aGUgRE9NXG4gICAgICAgICAgICAgICAgaWYgKGlzSWRJbkNvbnNpZGVyYXRpb24oY3R4LCBpZCkgJiYgaWRJc1dpdGhpbk5vZGUoY3R4LCBpZCwgbm9kZTIpKSB7XG4gICAgICAgICAgICAgICAgICAgICsrbWF0Y2hDb3VudDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbWF0Y2hDb3VudDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBBIGJvdHRvbSB1cCBhbGdvcml0aG0gdGhhdCBmaW5kcyBhbGwgZWxlbWVudHMgd2l0aCBpZHMgaW5zaWRlIG9mIHRoZSBub2RlXG4gICAgICAgICAqIGFyZ3VtZW50IGFuZCBwb3B1bGF0ZXMgaWQgc2V0cyBmb3IgdGhvc2Ugbm9kZXMgYW5kIGFsbCB0aGVpciBwYXJlbnRzLCBnZW5lcmF0aW5nXG4gICAgICAgICAqIGEgc2V0IG9mIGlkcyBjb250YWluZWQgd2l0aGluIGFsbCBub2RlcyBmb3IgdGhlIGVudGlyZSBoaWVyYXJjaHkgaW4gdGhlIERPTVxuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0gbm9kZSB7RWxlbWVudH1cbiAgICAgICAgICogQHBhcmFtIHtNYXA8Tm9kZSwgU2V0PFN0cmluZz4+fSBpZE1hcFxuICAgICAgICAgKi9cbiAgICAgICAgZnVuY3Rpb24gcG9wdWxhdGVJZE1hcEZvck5vZGUobm9kZSwgaWRNYXApIHtcbiAgICAgICAgICAgIGxldCBub2RlUGFyZW50ID0gbm9kZS5wYXJlbnRFbGVtZW50O1xuICAgICAgICAgICAgLy8gZmluZCBhbGwgZWxlbWVudHMgd2l0aCBhbiBpZCBwcm9wZXJ0eVxuICAgICAgICAgICAgbGV0IGlkRWxlbWVudHMgPSBub2RlLnF1ZXJ5U2VsZWN0b3JBbGwoJ1tpZF0nKTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgZWx0IG9mIGlkRWxlbWVudHMpIHtcbiAgICAgICAgICAgICAgICBsZXQgY3VycmVudCA9IGVsdDtcbiAgICAgICAgICAgICAgICAvLyB3YWxrIHVwIHRoZSBwYXJlbnQgaGllcmFyY2h5IG9mIHRoYXQgZWxlbWVudCwgYWRkaW5nIHRoZSBpZFxuICAgICAgICAgICAgICAgIC8vIG9mIGVsZW1lbnQgdG8gdGhlIHBhcmVudCdzIGlkIHNldFxuICAgICAgICAgICAgICAgIHdoaWxlIChjdXJyZW50ICE9PSBub2RlUGFyZW50ICYmIGN1cnJlbnQgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBsZXQgaWRTZXQgPSBpZE1hcC5nZXQoY3VycmVudCk7XG4gICAgICAgICAgICAgICAgICAgIC8vIGlmIHRoZSBpZCBzZXQgZG9lc24ndCBleGlzdCwgY3JlYXRlIGl0IGFuZCBpbnNlcnQgaXQgaW4gdGhlICBtYXBcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlkU2V0ID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkU2V0ID0gbmV3IFNldCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWRNYXAuc2V0KGN1cnJlbnQsIGlkU2V0KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZFNldC5hZGQoZWx0LmlkKTtcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudCA9IGN1cnJlbnQucGFyZW50RWxlbWVudDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvKipcbiAgICAgICAgICogVGhpcyBmdW5jdGlvbiBjb21wdXRlcyBhIG1hcCBvZiBub2RlcyB0byBhbGwgaWRzIGNvbnRhaW5lZCB3aXRoaW4gdGhhdCBub2RlIChpbmNsdXNpdmUgb2YgdGhlXG4gICAgICAgICAqIG5vZGUpLiAgVGhpcyBtYXAgY2FuIGJlIHVzZWQgdG8gYXNrIGlmIHR3byBub2RlcyBoYXZlIGludGVyc2VjdGluZyBzZXRzIG9mIGlkcywgd2hpY2ggYWxsb3dzXG4gICAgICAgICAqIGZvciBhIGxvb3NlciBkZWZpbml0aW9uIG9mIFwibWF0Y2hpbmdcIiB0aGFuIHRyYWRpdGlvbiBpZCBtYXRjaGluZywgYW5kIGFsbG93cyBjaGlsZCBub2Rlc1xuICAgICAgICAgKiB0byBjb250cmlidXRlIHRvIGEgcGFyZW50IG5vZGVzIG1hdGNoaW5nLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IG9sZENvbnRlbnQgIHRoZSBvbGQgY29udGVudCB0aGF0IHdpbGwgYmUgbW9ycGhlZFxuICAgICAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IG5ld0NvbnRlbnQgIHRoZSBuZXcgY29udGVudCB0byBtb3JwaCB0b1xuICAgICAgICAgKiBAcmV0dXJucyB7TWFwPE5vZGUsIFNldDxTdHJpbmc+Pn0gYSBtYXAgb2Ygbm9kZXMgdG8gaWQgc2V0cyBmb3IgdGhlXG4gICAgICAgICAqL1xuICAgICAgICBmdW5jdGlvbiBjcmVhdGVJZE1hcChvbGRDb250ZW50LCBuZXdDb250ZW50KSB7XG4gICAgICAgICAgICBsZXQgaWRNYXAgPSBuZXcgTWFwKCk7XG4gICAgICAgICAgICBwb3B1bGF0ZUlkTWFwRm9yTm9kZShvbGRDb250ZW50LCBpZE1hcCk7XG4gICAgICAgICAgICBwb3B1bGF0ZUlkTWFwRm9yTm9kZShuZXdDb250ZW50LCBpZE1hcCk7XG4gICAgICAgICAgICByZXR1cm4gaWRNYXA7XG4gICAgICAgIH1cblxuICAgICAgICAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAgICAgIC8vIFRoaXMgaXMgd2hhdCBlbmRzIHVwIGJlY29taW5nIHRoZSBJZGlvbW9ycGggZ2xvYmFsIG9iamVjdFxuICAgICAgICAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBtb3JwaCxcbiAgICAgICAgICAgIGRlZmF1bHRzXG4gICAgICAgIH1cbiAgICB9KSgpO1xuXG5mdW5jdGlvbiBub3JtYWxpemVBdHRyaWJ1dGVzRm9yQ29tcGFyaXNvbihlbGVtZW50KSB7XG4gICAgY29uc3QgaXNGaWxlSW5wdXQgPSBlbGVtZW50IGluc3RhbmNlb2YgSFRNTElucHV0RWxlbWVudCAmJiBlbGVtZW50LnR5cGUgPT09ICdmaWxlJztcbiAgICBpZiAoIWlzRmlsZUlucHV0KSB7XG4gICAgICAgIGlmICgndmFsdWUnIGluIGVsZW1lbnQpIHtcbiAgICAgICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKCd2YWx1ZScsIGVsZW1lbnQudmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGVsZW1lbnQuaGFzQXR0cmlidXRlKCd2YWx1ZScpKSB7XG4gICAgICAgICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZSgndmFsdWUnLCAnJyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgQXJyYXkuZnJvbShlbGVtZW50LmNoaWxkcmVuKS5mb3JFYWNoKChjaGlsZCkgPT4ge1xuICAgICAgICBub3JtYWxpemVBdHRyaWJ1dGVzRm9yQ29tcGFyaXNvbihjaGlsZCk7XG4gICAgfSk7XG59XG5cbmNvbnN0IHN5bmNBdHRyaWJ1dGVzID0gKGZyb21FbCwgdG9FbCkgPT4ge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZnJvbUVsLmF0dHJpYnV0ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgYXR0ciA9IGZyb21FbC5hdHRyaWJ1dGVzW2ldO1xuICAgICAgICB0b0VsLnNldEF0dHJpYnV0ZShhdHRyLm5hbWUsIGF0dHIudmFsdWUpO1xuICAgIH1cbn07XG5mdW5jdGlvbiBleGVjdXRlTW9ycGhkb20ocm9vdEZyb21FbGVtZW50LCByb290VG9FbGVtZW50LCBtb2RpZmllZEZpZWxkRWxlbWVudHMsIGdldEVsZW1lbnRWYWx1ZSwgZXh0ZXJuYWxNdXRhdGlvblRyYWNrZXIpIHtcbiAgICBjb25zdCBvcmlnaW5hbEVsZW1lbnRJZHNUb1N3YXBBZnRlciA9IFtdO1xuICAgIGNvbnN0IG9yaWdpbmFsRWxlbWVudHNUb1ByZXNlcnZlID0gbmV3IE1hcCgpO1xuICAgIGNvbnN0IG1hcmtFbGVtZW50QXNOZWVkaW5nUG9zdE1vcnBoU3dhcCA9IChpZCwgcmVwbGFjZVdpdGhDbG9uZSkgPT4ge1xuICAgICAgICBjb25zdCBvbGRFbGVtZW50ID0gb3JpZ2luYWxFbGVtZW50c1RvUHJlc2VydmUuZ2V0KGlkKTtcbiAgICAgICAgaWYgKCEob2xkRWxlbWVudCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBPcmlnaW5hbCBlbGVtZW50IHdpdGggaWQgJHtpZH0gbm90IGZvdW5kYCk7XG4gICAgICAgIH1cbiAgICAgICAgb3JpZ2luYWxFbGVtZW50SWRzVG9Td2FwQWZ0ZXIucHVzaChpZCk7XG4gICAgICAgIGlmICghcmVwbGFjZVdpdGhDbG9uZSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY2xvbmVkT2xkRWxlbWVudCA9IGNsb25lSFRNTEVsZW1lbnQob2xkRWxlbWVudCk7XG4gICAgICAgIG9sZEVsZW1lbnQucmVwbGFjZVdpdGgoY2xvbmVkT2xkRWxlbWVudCk7XG4gICAgICAgIHJldHVybiBjbG9uZWRPbGRFbGVtZW50O1xuICAgIH07XG4gICAgcm9vdFRvRWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKCdbZGF0YS1saXZlLXByZXNlcnZlXScpLmZvckVhY2goKG5ld0VsZW1lbnQpID0+IHtcbiAgICAgICAgY29uc3QgaWQgPSBuZXdFbGVtZW50LmlkO1xuICAgICAgICBpZiAoIWlkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBkYXRhLWxpdmUtcHJlc2VydmUgYXR0cmlidXRlIHJlcXVpcmVzIGFuIGlkIGF0dHJpYnV0ZSB0byBiZSBzZXQgb24gdGhlIGVsZW1lbnQnKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBvbGRFbGVtZW50ID0gcm9vdEZyb21FbGVtZW50LnF1ZXJ5U2VsZWN0b3IoYCMke2lkfWApO1xuICAgICAgICBpZiAoIShvbGRFbGVtZW50IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZSBlbGVtZW50IHdpdGggaWQgXCIke2lkfVwiIHdhcyBub3QgZm91bmQgaW4gdGhlIG9yaWdpbmFsIEhUTUxgKTtcbiAgICAgICAgfVxuICAgICAgICBuZXdFbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSgnZGF0YS1saXZlLXByZXNlcnZlJyk7XG4gICAgICAgIG9yaWdpbmFsRWxlbWVudHNUb1ByZXNlcnZlLnNldChpZCwgb2xkRWxlbWVudCk7XG4gICAgICAgIHN5bmNBdHRyaWJ1dGVzKG5ld0VsZW1lbnQsIG9sZEVsZW1lbnQpO1xuICAgIH0pO1xuICAgIElkaW9tb3JwaC5tb3JwaChyb290RnJvbUVsZW1lbnQsIHJvb3RUb0VsZW1lbnQsIHtcbiAgICAgICAgY2FsbGJhY2tzOiB7XG4gICAgICAgICAgICBiZWZvcmVOb2RlTW9ycGhlZDogKGZyb21FbCwgdG9FbCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghKGZyb21FbCBpbnN0YW5jZW9mIEVsZW1lbnQpIHx8ICEodG9FbCBpbnN0YW5jZW9mIEVsZW1lbnQpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoZnJvbUVsID09PSByb290RnJvbUVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChmcm9tRWwuaWQgJiYgb3JpZ2luYWxFbGVtZW50c1RvUHJlc2VydmUuaGFzKGZyb21FbC5pZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZyb21FbC5pZCA9PT0gdG9FbC5pZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNsb25lZEZyb21FbCA9IG1hcmtFbGVtZW50QXNOZWVkaW5nUG9zdE1vcnBoU3dhcChmcm9tRWwuaWQsIHRydWUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWNsb25lZEZyb21FbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdtaXNzaW5nIGNsb25lJyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgSWRpb21vcnBoLm1vcnBoKGNsb25lZEZyb21FbCwgdG9FbCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGZyb21FbCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50ICYmIHRvRWwgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGZyb21FbC5fX3ggIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXdpbmRvdy5BbHBpbmUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VuYWJsZSB0byBhY2Nlc3MgQWxwaW5lLmpzIHRob3VnaCB0aGUgZ2xvYmFsIHdpbmRvdy5BbHBpbmUgdmFyaWFibGUuIFBsZWFzZSBtYWtlIHN1cmUgQWxwaW5lLmpzIGlzIGxvYWRlZCBiZWZvcmUgU3ltZm9ueSBVWCBMaXZlQ29tcG9uZW50LicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cuQWxwaW5lLm1vcnBoICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmFibGUgdG8gYWNjZXNzIEFscGluZS5qcyBtb3JwaCBmdW5jdGlvbi4gUGxlYXNlIG1ha2Ugc3VyZSB0aGUgQWxwaW5lLmpzIE1vcnBoIHBsdWdpbiBpcyBpbnN0YWxsZWQgYW5kIGxvYWRlZCwgc2VlIGh0dHBzOi8vYWxwaW5lanMuZGV2L3BsdWdpbnMvbW9ycGggZm9yIG1vcmUgaW5mb3JtYXRpb24uJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cuQWxwaW5lLm1vcnBoKGZyb21FbC5fX3gsIHRvRWwpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChleHRlcm5hbE11dGF0aW9uVHJhY2tlci53YXNFbGVtZW50QWRkZWQoZnJvbUVsKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZnJvbUVsLmluc2VydEFkamFjZW50RWxlbWVudCgnYWZ0ZXJlbmQnLCB0b0VsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAobW9kaWZpZWRGaWVsZEVsZW1lbnRzLmluY2x1ZGVzKGZyb21FbCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldFZhbHVlT25FbGVtZW50KHRvRWwsIGdldEVsZW1lbnRWYWx1ZShmcm9tRWwpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoZnJvbUVsID09PSBkb2N1bWVudC5hY3RpdmVFbGVtZW50ICYmXG4gICAgICAgICAgICAgICAgICAgICAgICBmcm9tRWwgIT09IGRvY3VtZW50LmJvZHkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIG51bGwgIT09IGdldE1vZGVsRGlyZWN0aXZlRnJvbUVsZW1lbnQoZnJvbUVsLCBmYWxzZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldFZhbHVlT25FbGVtZW50KHRvRWwsIGdldEVsZW1lbnRWYWx1ZShmcm9tRWwpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjb25zdCBlbGVtZW50Q2hhbmdlcyA9IGV4dGVybmFsTXV0YXRpb25UcmFja2VyLmdldENoYW5nZWRFbGVtZW50KGZyb21FbCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlbGVtZW50Q2hhbmdlcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudENoYW5nZXMuYXBwbHlUb0VsZW1lbnQodG9FbCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKGZyb21FbC5ub2RlTmFtZS50b1VwcGVyQ2FzZSgpICE9PSAnT1BUSU9OJyAmJiBmcm9tRWwuaXNFcXVhbE5vZGUodG9FbCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5vcm1hbGl6ZWRGcm9tRWwgPSBjbG9uZUhUTUxFbGVtZW50KGZyb21FbCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBub3JtYWxpemVBdHRyaWJ1dGVzRm9yQ29tcGFyaXNvbihub3JtYWxpemVkRnJvbUVsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5vcm1hbGl6ZWRUb0VsID0gY2xvbmVIVE1MRWxlbWVudCh0b0VsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5vcm1hbGl6ZUF0dHJpYnV0ZXNGb3JDb21wYXJpc29uKG5vcm1hbGl6ZWRUb0VsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChub3JtYWxpemVkRnJvbUVsLmlzRXF1YWxOb2RlKG5vcm1hbGl6ZWRUb0VsKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoZnJvbUVsLmhhc0F0dHJpYnV0ZSgnZGF0YS1za2lwLW1vcnBoJykgfHwgKGZyb21FbC5pZCAmJiBmcm9tRWwuaWQgIT09IHRvRWwuaWQpKSB7XG4gICAgICAgICAgICAgICAgICAgIGZyb21FbC5pbm5lckhUTUwgPSB0b0VsLmlubmVySFRNTDtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChmcm9tRWwucGFyZW50RWxlbWVudD8uaGFzQXR0cmlidXRlKCdkYXRhLXNraXAtbW9ycGgnKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiAhZnJvbUVsLmhhc0F0dHJpYnV0ZSgnZGF0YS1saXZlLWlnbm9yZScpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGJlZm9yZU5vZGVSZW1vdmVkKG5vZGUpIHtcbiAgICAgICAgICAgICAgICBpZiAoIShub2RlIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAobm9kZS5pZCAmJiBvcmlnaW5hbEVsZW1lbnRzVG9QcmVzZXJ2ZS5oYXMobm9kZS5pZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgbWFya0VsZW1lbnRBc05lZWRpbmdQb3N0TW9ycGhTd2FwKG5vZGUuaWQsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChleHRlcm5hbE11dGF0aW9uVHJhY2tlci53YXNFbGVtZW50QWRkZWQobm9kZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gIW5vZGUuaGFzQXR0cmlidXRlKCdkYXRhLWxpdmUtaWdub3JlJyk7XG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0pO1xuICAgIG9yaWdpbmFsRWxlbWVudElkc1RvU3dhcEFmdGVyLmZvckVhY2goKGlkKSA9PiB7XG4gICAgICAgIGNvbnN0IG5ld0VsZW1lbnQgPSByb290RnJvbUVsZW1lbnQucXVlcnlTZWxlY3RvcihgIyR7aWR9YCk7XG4gICAgICAgIGNvbnN0IG9yaWdpbmFsRWxlbWVudCA9IG9yaWdpbmFsRWxlbWVudHNUb1ByZXNlcnZlLmdldChpZCk7XG4gICAgICAgIGlmICghKG5ld0VsZW1lbnQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkgfHwgIShvcmlnaW5hbEVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignTWlzc2luZyBlbGVtZW50cy4nKTtcbiAgICAgICAgfVxuICAgICAgICBuZXdFbGVtZW50LnJlcGxhY2VXaXRoKG9yaWdpbmFsRWxlbWVudCk7XG4gICAgfSk7XG59XG5cbmNsYXNzIFVuc3luY2VkSW5wdXRzVHJhY2tlciB7XG4gICAgY29uc3RydWN0b3IoY29tcG9uZW50LCBtb2RlbEVsZW1lbnRSZXNvbHZlcikge1xuICAgICAgICB0aGlzLmVsZW1lbnRFdmVudExpc3RlbmVycyA9IFtcbiAgICAgICAgICAgIHsgZXZlbnQ6ICdpbnB1dCcsIGNhbGxiYWNrOiAoZXZlbnQpID0+IHRoaXMuaGFuZGxlSW5wdXRFdmVudChldmVudCkgfSxcbiAgICAgICAgXTtcbiAgICAgICAgdGhpcy5jb21wb25lbnQgPSBjb21wb25lbnQ7XG4gICAgICAgIHRoaXMubW9kZWxFbGVtZW50UmVzb2x2ZXIgPSBtb2RlbEVsZW1lbnRSZXNvbHZlcjtcbiAgICAgICAgdGhpcy51bnN5bmNlZElucHV0cyA9IG5ldyBVbnN5bmNlZElucHV0Q29udGFpbmVyKCk7XG4gICAgfVxuICAgIGFjdGl2YXRlKCkge1xuICAgICAgICB0aGlzLmVsZW1lbnRFdmVudExpc3RlbmVycy5mb3JFYWNoKCh7IGV2ZW50LCBjYWxsYmFjayB9KSA9PiB7XG4gICAgICAgICAgICB0aGlzLmNvbXBvbmVudC5lbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoZXZlbnQsIGNhbGxiYWNrKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGRlYWN0aXZhdGUoKSB7XG4gICAgICAgIHRoaXMuZWxlbWVudEV2ZW50TGlzdGVuZXJzLmZvckVhY2goKHsgZXZlbnQsIGNhbGxiYWNrIH0pID0+IHtcbiAgICAgICAgICAgIHRoaXMuY29tcG9uZW50LmVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudCwgY2FsbGJhY2spO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgbWFya01vZGVsQXNTeW5jZWQobW9kZWxOYW1lKSB7XG4gICAgICAgIHRoaXMudW5zeW5jZWRJbnB1dHMubWFya01vZGVsQXNTeW5jZWQobW9kZWxOYW1lKTtcbiAgICB9XG4gICAgaGFuZGxlSW5wdXRFdmVudChldmVudCkge1xuICAgICAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQ7XG4gICAgICAgIGlmICghdGFyZ2V0KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy51cGRhdGVNb2RlbEZyb21FbGVtZW50KHRhcmdldCk7XG4gICAgfVxuICAgIHVwZGF0ZU1vZGVsRnJvbUVsZW1lbnQoZWxlbWVudCkge1xuICAgICAgICBpZiAoIWVsZW1lbnRCZWxvbmdzVG9UaGlzQ29tcG9uZW50KGVsZW1lbnQsIHRoaXMuY29tcG9uZW50KSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICghKGVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQ291bGQgbm90IHVwZGF0ZSBtb2RlbCBmb3Igbm9uIEhUTUxFbGVtZW50Jyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbW9kZWxOYW1lID0gdGhpcy5tb2RlbEVsZW1lbnRSZXNvbHZlci5nZXRNb2RlbE5hbWUoZWxlbWVudCk7XG4gICAgICAgIHRoaXMudW5zeW5jZWRJbnB1dHMuYWRkKGVsZW1lbnQsIG1vZGVsTmFtZSk7XG4gICAgfVxuICAgIGdldFVuc3luY2VkSW5wdXRzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy51bnN5bmNlZElucHV0cy5hbGxVbnN5bmNlZElucHV0cygpO1xuICAgIH1cbiAgICBnZXRVbnN5bmNlZE1vZGVscygpIHtcbiAgICAgICAgcmV0dXJuIEFycmF5LmZyb20odGhpcy51bnN5bmNlZElucHV0cy5nZXRVbnN5bmNlZE1vZGVsTmFtZXMoKSk7XG4gICAgfVxuICAgIHJlc2V0VW5zeW5jZWRGaWVsZHMoKSB7XG4gICAgICAgIHRoaXMudW5zeW5jZWRJbnB1dHMucmVzZXRVbnN5bmNlZEZpZWxkcygpO1xuICAgIH1cbn1cbmNsYXNzIFVuc3luY2VkSW5wdXRDb250YWluZXIge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLnVuc3luY2VkTm9uTW9kZWxGaWVsZHMgPSBbXTtcbiAgICAgICAgdGhpcy51bnN5bmNlZE1vZGVsTmFtZXMgPSBbXTtcbiAgICAgICAgdGhpcy51bnN5bmNlZE1vZGVsRmllbGRzID0gbmV3IE1hcCgpO1xuICAgIH1cbiAgICBhZGQoZWxlbWVudCwgbW9kZWxOYW1lID0gbnVsbCkge1xuICAgICAgICBpZiAobW9kZWxOYW1lKSB7XG4gICAgICAgICAgICB0aGlzLnVuc3luY2VkTW9kZWxGaWVsZHMuc2V0KG1vZGVsTmFtZSwgZWxlbWVudCk7XG4gICAgICAgICAgICBpZiAoIXRoaXMudW5zeW5jZWRNb2RlbE5hbWVzLmluY2x1ZGVzKG1vZGVsTmFtZSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnVuc3luY2VkTW9kZWxOYW1lcy5wdXNoKG1vZGVsTmFtZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy51bnN5bmNlZE5vbk1vZGVsRmllbGRzLnB1c2goZWxlbWVudCk7XG4gICAgfVxuICAgIHJlc2V0VW5zeW5jZWRGaWVsZHMoKSB7XG4gICAgICAgIHRoaXMudW5zeW5jZWRNb2RlbEZpZWxkcy5mb3JFYWNoKCh2YWx1ZSwga2V5KSA9PiB7XG4gICAgICAgICAgICBpZiAoIXRoaXMudW5zeW5jZWRNb2RlbE5hbWVzLmluY2x1ZGVzKGtleSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnVuc3luY2VkTW9kZWxGaWVsZHMuZGVsZXRlKGtleSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBhbGxVbnN5bmNlZElucHV0cygpIHtcbiAgICAgICAgcmV0dXJuIFsuLi50aGlzLnVuc3luY2VkTm9uTW9kZWxGaWVsZHMsIC4uLnRoaXMudW5zeW5jZWRNb2RlbEZpZWxkcy52YWx1ZXMoKV07XG4gICAgfVxuICAgIG1hcmtNb2RlbEFzU3luY2VkKG1vZGVsTmFtZSkge1xuICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMudW5zeW5jZWRNb2RlbE5hbWVzLmluZGV4T2YobW9kZWxOYW1lKTtcbiAgICAgICAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgICAgICAgICAgdGhpcy51bnN5bmNlZE1vZGVsTmFtZXMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBnZXRVbnN5bmNlZE1vZGVsTmFtZXMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnVuc3luY2VkTW9kZWxOYW1lcztcbiAgICB9XG59XG5cbmNsYXNzIEhvb2tNYW5hZ2VyIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5ob29rcyA9IG5ldyBNYXAoKTtcbiAgICB9XG4gICAgcmVnaXN0ZXIoaG9va05hbWUsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNvbnN0IGhvb2tzID0gdGhpcy5ob29rcy5nZXQoaG9va05hbWUpIHx8IFtdO1xuICAgICAgICBob29rcy5wdXNoKGNhbGxiYWNrKTtcbiAgICAgICAgdGhpcy5ob29rcy5zZXQoaG9va05hbWUsIGhvb2tzKTtcbiAgICB9XG4gICAgdW5yZWdpc3Rlcihob29rTmFtZSwgY2FsbGJhY2spIHtcbiAgICAgICAgY29uc3QgaG9va3MgPSB0aGlzLmhvb2tzLmdldChob29rTmFtZSkgfHwgW107XG4gICAgICAgIGNvbnN0IGluZGV4ID0gaG9va3MuaW5kZXhPZihjYWxsYmFjayk7XG4gICAgICAgIGlmIChpbmRleCA9PT0gLTEpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBob29rcy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICB0aGlzLmhvb2tzLnNldChob29rTmFtZSwgaG9va3MpO1xuICAgIH1cbiAgICB0cmlnZ2VySG9vayhob29rTmFtZSwgLi4uYXJncykge1xuICAgICAgICBjb25zdCBob29rcyA9IHRoaXMuaG9va3MuZ2V0KGhvb2tOYW1lKSB8fCBbXTtcbiAgICAgICAgaG9va3MuZm9yRWFjaCgoY2FsbGJhY2spID0+IGNhbGxiYWNrKC4uLmFyZ3MpKTtcbiAgICB9XG59XG5cbmNsYXNzIEJhY2tlbmRSZXNwb25zZSB7XG4gICAgY29uc3RydWN0b3IocmVzcG9uc2UpIHtcbiAgICAgICAgdGhpcy5yZXNwb25zZSA9IHJlc3BvbnNlO1xuICAgIH1cbiAgICBhc3luYyBnZXRCb2R5KCkge1xuICAgICAgICBpZiAoIXRoaXMuYm9keSkge1xuICAgICAgICAgICAgdGhpcy5ib2R5ID0gYXdhaXQgdGhpcy5yZXNwb25zZS50ZXh0KCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuYm9keTtcbiAgICB9XG59XG5cbmNsYXNzIENoYW5naW5nSXRlbXNUcmFja2VyIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5jaGFuZ2VkSXRlbXMgPSBuZXcgTWFwKCk7XG4gICAgICAgIHRoaXMucmVtb3ZlZEl0ZW1zID0gbmV3IE1hcCgpO1xuICAgIH1cbiAgICBzZXRJdGVtKGl0ZW1OYW1lLCBuZXdWYWx1ZSwgcHJldmlvdXNWYWx1ZSkge1xuICAgICAgICBpZiAodGhpcy5yZW1vdmVkSXRlbXMuaGFzKGl0ZW1OYW1lKSkge1xuICAgICAgICAgICAgY29uc3QgcmVtb3ZlZFJlY29yZCA9IHRoaXMucmVtb3ZlZEl0ZW1zLmdldChpdGVtTmFtZSk7XG4gICAgICAgICAgICB0aGlzLnJlbW92ZWRJdGVtcy5kZWxldGUoaXRlbU5hbWUpO1xuICAgICAgICAgICAgaWYgKHJlbW92ZWRSZWNvcmQub3JpZ2luYWwgPT09IG5ld1ZhbHVlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmNoYW5nZWRJdGVtcy5oYXMoaXRlbU5hbWUpKSB7XG4gICAgICAgICAgICBjb25zdCBvcmlnaW5hbFJlY29yZCA9IHRoaXMuY2hhbmdlZEl0ZW1zLmdldChpdGVtTmFtZSk7XG4gICAgICAgICAgICBpZiAob3JpZ2luYWxSZWNvcmQub3JpZ2luYWwgPT09IG5ld1ZhbHVlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jaGFuZ2VkSXRlbXMuZGVsZXRlKGl0ZW1OYW1lKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmNoYW5nZWRJdGVtcy5zZXQoaXRlbU5hbWUsIHsgb3JpZ2luYWw6IG9yaWdpbmFsUmVjb3JkLm9yaWdpbmFsLCBuZXc6IG5ld1ZhbHVlIH0pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2hhbmdlZEl0ZW1zLnNldChpdGVtTmFtZSwgeyBvcmlnaW5hbDogcHJldmlvdXNWYWx1ZSwgbmV3OiBuZXdWYWx1ZSB9KTtcbiAgICB9XG4gICAgcmVtb3ZlSXRlbShpdGVtTmFtZSwgY3VycmVudFZhbHVlKSB7XG4gICAgICAgIGxldCB0cnVlT3JpZ2luYWxWYWx1ZSA9IGN1cnJlbnRWYWx1ZTtcbiAgICAgICAgaWYgKHRoaXMuY2hhbmdlZEl0ZW1zLmhhcyhpdGVtTmFtZSkpIHtcbiAgICAgICAgICAgIGNvbnN0IG9yaWdpbmFsUmVjb3JkID0gdGhpcy5jaGFuZ2VkSXRlbXMuZ2V0KGl0ZW1OYW1lKTtcbiAgICAgICAgICAgIHRydWVPcmlnaW5hbFZhbHVlID0gb3JpZ2luYWxSZWNvcmQub3JpZ2luYWw7XG4gICAgICAgICAgICB0aGlzLmNoYW5nZWRJdGVtcy5kZWxldGUoaXRlbU5hbWUpO1xuICAgICAgICAgICAgaWYgKHRydWVPcmlnaW5hbFZhbHVlID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5yZW1vdmVkSXRlbXMuaGFzKGl0ZW1OYW1lKSkge1xuICAgICAgICAgICAgdGhpcy5yZW1vdmVkSXRlbXMuc2V0KGl0ZW1OYW1lLCB7IG9yaWdpbmFsOiB0cnVlT3JpZ2luYWxWYWx1ZSB9KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBnZXRDaGFuZ2VkSXRlbXMoKSB7XG4gICAgICAgIHJldHVybiBBcnJheS5mcm9tKHRoaXMuY2hhbmdlZEl0ZW1zLCAoW25hbWUsIHsgbmV3OiB2YWx1ZSB9XSkgPT4gKHsgbmFtZSwgdmFsdWUgfSkpO1xuICAgIH1cbiAgICBnZXRSZW1vdmVkSXRlbXMoKSB7XG4gICAgICAgIHJldHVybiBBcnJheS5mcm9tKHRoaXMucmVtb3ZlZEl0ZW1zLmtleXMoKSk7XG4gICAgfVxuICAgIGlzRW1wdHkoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNoYW5nZWRJdGVtcy5zaXplID09PSAwICYmIHRoaXMucmVtb3ZlZEl0ZW1zLnNpemUgPT09IDA7XG4gICAgfVxufVxuXG5jbGFzcyBFbGVtZW50Q2hhbmdlcyB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMuYWRkZWRDbGFzc2VzID0gbmV3IFNldCgpO1xuICAgICAgICB0aGlzLnJlbW92ZWRDbGFzc2VzID0gbmV3IFNldCgpO1xuICAgICAgICB0aGlzLnN0eWxlQ2hhbmdlcyA9IG5ldyBDaGFuZ2luZ0l0ZW1zVHJhY2tlcigpO1xuICAgICAgICB0aGlzLmF0dHJpYnV0ZUNoYW5nZXMgPSBuZXcgQ2hhbmdpbmdJdGVtc1RyYWNrZXIoKTtcbiAgICB9XG4gICAgYWRkQ2xhc3MoY2xhc3NOYW1lKSB7XG4gICAgICAgIGlmICghdGhpcy5yZW1vdmVkQ2xhc3Nlcy5kZWxldGUoY2xhc3NOYW1lKSkge1xuICAgICAgICAgICAgdGhpcy5hZGRlZENsYXNzZXMuYWRkKGNsYXNzTmFtZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmVtb3ZlQ2xhc3MoY2xhc3NOYW1lKSB7XG4gICAgICAgIGlmICghdGhpcy5hZGRlZENsYXNzZXMuZGVsZXRlKGNsYXNzTmFtZSkpIHtcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlZENsYXNzZXMuYWRkKGNsYXNzTmFtZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgYWRkU3R5bGUoc3R5bGVOYW1lLCBuZXdWYWx1ZSwgb3JpZ2luYWxWYWx1ZSkge1xuICAgICAgICB0aGlzLnN0eWxlQ2hhbmdlcy5zZXRJdGVtKHN0eWxlTmFtZSwgbmV3VmFsdWUsIG9yaWdpbmFsVmFsdWUpO1xuICAgIH1cbiAgICByZW1vdmVTdHlsZShzdHlsZU5hbWUsIG9yaWdpbmFsVmFsdWUpIHtcbiAgICAgICAgdGhpcy5zdHlsZUNoYW5nZXMucmVtb3ZlSXRlbShzdHlsZU5hbWUsIG9yaWdpbmFsVmFsdWUpO1xuICAgIH1cbiAgICBhZGRBdHRyaWJ1dGUoYXR0cmlidXRlTmFtZSwgbmV3VmFsdWUsIG9yaWdpbmFsVmFsdWUpIHtcbiAgICAgICAgdGhpcy5hdHRyaWJ1dGVDaGFuZ2VzLnNldEl0ZW0oYXR0cmlidXRlTmFtZSwgbmV3VmFsdWUsIG9yaWdpbmFsVmFsdWUpO1xuICAgIH1cbiAgICByZW1vdmVBdHRyaWJ1dGUoYXR0cmlidXRlTmFtZSwgb3JpZ2luYWxWYWx1ZSkge1xuICAgICAgICB0aGlzLmF0dHJpYnV0ZUNoYW5nZXMucmVtb3ZlSXRlbShhdHRyaWJ1dGVOYW1lLCBvcmlnaW5hbFZhbHVlKTtcbiAgICB9XG4gICAgZ2V0QWRkZWRDbGFzc2VzKCkge1xuICAgICAgICByZXR1cm4gWy4uLnRoaXMuYWRkZWRDbGFzc2VzXTtcbiAgICB9XG4gICAgZ2V0UmVtb3ZlZENsYXNzZXMoKSB7XG4gICAgICAgIHJldHVybiBbLi4udGhpcy5yZW1vdmVkQ2xhc3Nlc107XG4gICAgfVxuICAgIGdldENoYW5nZWRTdHlsZXMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnN0eWxlQ2hhbmdlcy5nZXRDaGFuZ2VkSXRlbXMoKTtcbiAgICB9XG4gICAgZ2V0UmVtb3ZlZFN0eWxlcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3R5bGVDaGFuZ2VzLmdldFJlbW92ZWRJdGVtcygpO1xuICAgIH1cbiAgICBnZXRDaGFuZ2VkQXR0cmlidXRlcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYXR0cmlidXRlQ2hhbmdlcy5nZXRDaGFuZ2VkSXRlbXMoKTtcbiAgICB9XG4gICAgZ2V0UmVtb3ZlZEF0dHJpYnV0ZXMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmF0dHJpYnV0ZUNoYW5nZXMuZ2V0UmVtb3ZlZEl0ZW1zKCk7XG4gICAgfVxuICAgIGFwcGx5VG9FbGVtZW50KGVsZW1lbnQpIHtcbiAgICAgICAgZWxlbWVudC5jbGFzc0xpc3QuYWRkKC4uLnRoaXMuYWRkZWRDbGFzc2VzKTtcbiAgICAgICAgZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKC4uLnRoaXMucmVtb3ZlZENsYXNzZXMpO1xuICAgICAgICB0aGlzLnN0eWxlQ2hhbmdlcy5nZXRDaGFuZ2VkSXRlbXMoKS5mb3JFYWNoKChjaGFuZ2UpID0+IHtcbiAgICAgICAgICAgIGVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoY2hhbmdlLm5hbWUsIGNoYW5nZS52YWx1ZSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnN0eWxlQ2hhbmdlcy5nZXRSZW1vdmVkSXRlbXMoKS5mb3JFYWNoKChzdHlsZU5hbWUpID0+IHtcbiAgICAgICAgICAgIGVsZW1lbnQuc3R5bGUucmVtb3ZlUHJvcGVydHkoc3R5bGVOYW1lKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuYXR0cmlidXRlQ2hhbmdlcy5nZXRDaGFuZ2VkSXRlbXMoKS5mb3JFYWNoKChjaGFuZ2UpID0+IHtcbiAgICAgICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKGNoYW5nZS5uYW1lLCBjaGFuZ2UudmFsdWUpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5hdHRyaWJ1dGVDaGFuZ2VzLmdldFJlbW92ZWRJdGVtcygpLmZvckVhY2goKGF0dHJpYnV0ZU5hbWUpID0+IHtcbiAgICAgICAgICAgIGVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKGF0dHJpYnV0ZU5hbWUpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgaXNFbXB0eSgpIHtcbiAgICAgICAgcmV0dXJuICh0aGlzLmFkZGVkQ2xhc3Nlcy5zaXplID09PSAwICYmXG4gICAgICAgICAgICB0aGlzLnJlbW92ZWRDbGFzc2VzLnNpemUgPT09IDAgJiZcbiAgICAgICAgICAgIHRoaXMuc3R5bGVDaGFuZ2VzLmlzRW1wdHkoKSAmJlxuICAgICAgICAgICAgdGhpcy5hdHRyaWJ1dGVDaGFuZ2VzLmlzRW1wdHkoKSk7XG4gICAgfVxufVxuXG5jbGFzcyBFeHRlcm5hbE11dGF0aW9uVHJhY2tlciB7XG4gICAgY29uc3RydWN0b3IoZWxlbWVudCwgc2hvdWxkVHJhY2tDaGFuZ2VDYWxsYmFjaykge1xuICAgICAgICB0aGlzLmNoYW5nZWRFbGVtZW50cyA9IG5ldyBXZWFrTWFwKCk7XG4gICAgICAgIHRoaXMuY2hhbmdlZEVsZW1lbnRzQ291bnQgPSAwO1xuICAgICAgICB0aGlzLmFkZGVkRWxlbWVudHMgPSBbXTtcbiAgICAgICAgdGhpcy5yZW1vdmVkRWxlbWVudHMgPSBbXTtcbiAgICAgICAgdGhpcy5pc1N0YXJ0ZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5lbGVtZW50ID0gZWxlbWVudDtcbiAgICAgICAgdGhpcy5zaG91bGRUcmFja0NoYW5nZUNhbGxiYWNrID0gc2hvdWxkVHJhY2tDaGFuZ2VDYWxsYmFjaztcbiAgICAgICAgdGhpcy5tdXRhdGlvbk9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIodGhpcy5vbk11dGF0aW9ucy5iaW5kKHRoaXMpKTtcbiAgICB9XG4gICAgc3RhcnQoKSB7XG4gICAgICAgIGlmICh0aGlzLmlzU3RhcnRlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubXV0YXRpb25PYnNlcnZlci5vYnNlcnZlKHRoaXMuZWxlbWVudCwge1xuICAgICAgICAgICAgY2hpbGRMaXN0OiB0cnVlLFxuICAgICAgICAgICAgc3VidHJlZTogdHJ1ZSxcbiAgICAgICAgICAgIGF0dHJpYnV0ZXM6IHRydWUsXG4gICAgICAgICAgICBhdHRyaWJ1dGVPbGRWYWx1ZTogdHJ1ZSxcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuaXNTdGFydGVkID0gdHJ1ZTtcbiAgICB9XG4gICAgc3RvcCgpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNTdGFydGVkKSB7XG4gICAgICAgICAgICB0aGlzLm11dGF0aW9uT2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xuICAgICAgICAgICAgdGhpcy5pc1N0YXJ0ZWQgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBnZXRDaGFuZ2VkRWxlbWVudChlbGVtZW50KSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNoYW5nZWRFbGVtZW50cy5oYXMoZWxlbWVudCkgPyB0aGlzLmNoYW5nZWRFbGVtZW50cy5nZXQoZWxlbWVudCkgOiBudWxsO1xuICAgIH1cbiAgICBnZXRBZGRlZEVsZW1lbnRzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5hZGRlZEVsZW1lbnRzO1xuICAgIH1cbiAgICB3YXNFbGVtZW50QWRkZWQoZWxlbWVudCkge1xuICAgICAgICByZXR1cm4gdGhpcy5hZGRlZEVsZW1lbnRzLmluY2x1ZGVzKGVsZW1lbnQpO1xuICAgIH1cbiAgICBoYW5kbGVQZW5kaW5nQ2hhbmdlcygpIHtcbiAgICAgICAgdGhpcy5vbk11dGF0aW9ucyh0aGlzLm11dGF0aW9uT2JzZXJ2ZXIudGFrZVJlY29yZHMoKSk7XG4gICAgfVxuICAgIG9uTXV0YXRpb25zKG11dGF0aW9ucykge1xuICAgICAgICBjb25zdCBoYW5kbGVkQXR0cmlidXRlTXV0YXRpb25zID0gbmV3IFdlYWtNYXAoKTtcbiAgICAgICAgZm9yIChjb25zdCBtdXRhdGlvbiBvZiBtdXRhdGlvbnMpIHtcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnQgPSBtdXRhdGlvbi50YXJnZXQ7XG4gICAgICAgICAgICBpZiAoIXRoaXMuc2hvdWxkVHJhY2tDaGFuZ2VDYWxsYmFjayhlbGVtZW50KSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuaXNFbGVtZW50QWRkZWRCeVRyYW5zbGF0aW9uKGVsZW1lbnQpKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsZXQgaXNDaGFuZ2VJbkFkZGVkRWxlbWVudCA9IGZhbHNlO1xuICAgICAgICAgICAgZm9yIChjb25zdCBhZGRlZEVsZW1lbnQgb2YgdGhpcy5hZGRlZEVsZW1lbnRzKSB7XG4gICAgICAgICAgICAgICAgaWYgKGFkZGVkRWxlbWVudC5jb250YWlucyhlbGVtZW50KSkge1xuICAgICAgICAgICAgICAgICAgICBpc0NoYW5nZUluQWRkZWRFbGVtZW50ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGlzQ2hhbmdlSW5BZGRlZEVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHN3aXRjaCAobXV0YXRpb24udHlwZSkge1xuICAgICAgICAgICAgICAgIGNhc2UgJ2NoaWxkTGlzdCc6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlQ2hpbGRMaXN0TXV0YXRpb24obXV0YXRpb24pO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlICdhdHRyaWJ1dGVzJzpcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFoYW5kbGVkQXR0cmlidXRlTXV0YXRpb25zLmhhcyhlbGVtZW50KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlZEF0dHJpYnV0ZU11dGF0aW9ucy5zZXQoZWxlbWVudCwgW10pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmICghaGFuZGxlZEF0dHJpYnV0ZU11dGF0aW9ucy5nZXQoZWxlbWVudCkuaW5jbHVkZXMobXV0YXRpb24uYXR0cmlidXRlTmFtZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlQXR0cmlidXRlTXV0YXRpb24obXV0YXRpb24pO1xuICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlZEF0dHJpYnV0ZU11dGF0aW9ucy5zZXQoZWxlbWVudCwgW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLmhhbmRsZWRBdHRyaWJ1dGVNdXRhdGlvbnMuZ2V0KGVsZW1lbnQpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG11dGF0aW9uLmF0dHJpYnV0ZU5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBdKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBoYW5kbGVDaGlsZExpc3RNdXRhdGlvbihtdXRhdGlvbikge1xuICAgICAgICBtdXRhdGlvbi5hZGRlZE5vZGVzLmZvckVhY2goKG5vZGUpID0+IHtcbiAgICAgICAgICAgIGlmICghKG5vZGUgaW5zdGFuY2VvZiBFbGVtZW50KSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLnJlbW92ZWRFbGVtZW50cy5pbmNsdWRlcyhub2RlKSkge1xuICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlZEVsZW1lbnRzLnNwbGljZSh0aGlzLnJlbW92ZWRFbGVtZW50cy5pbmRleE9mKG5vZGUpLCAxKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5pc0VsZW1lbnRBZGRlZEJ5VHJhbnNsYXRpb24obm9kZSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmFkZGVkRWxlbWVudHMucHVzaChub2RlKTtcbiAgICAgICAgfSk7XG4gICAgICAgIG11dGF0aW9uLnJlbW92ZWROb2Rlcy5mb3JFYWNoKChub2RlKSA9PiB7XG4gICAgICAgICAgICBpZiAoIShub2RlIGluc3RhbmNlb2YgRWxlbWVudCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5hZGRlZEVsZW1lbnRzLmluY2x1ZGVzKG5vZGUpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hZGRlZEVsZW1lbnRzLnNwbGljZSh0aGlzLmFkZGVkRWxlbWVudHMuaW5kZXhPZihub2RlKSwgMSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5yZW1vdmVkRWxlbWVudHMucHVzaChub2RlKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGhhbmRsZUF0dHJpYnV0ZU11dGF0aW9uKG11dGF0aW9uKSB7XG4gICAgICAgIGNvbnN0IGVsZW1lbnQgPSBtdXRhdGlvbi50YXJnZXQ7XG4gICAgICAgIGlmICghdGhpcy5jaGFuZ2VkRWxlbWVudHMuaGFzKGVsZW1lbnQpKSB7XG4gICAgICAgICAgICB0aGlzLmNoYW5nZWRFbGVtZW50cy5zZXQoZWxlbWVudCwgbmV3IEVsZW1lbnRDaGFuZ2VzKCkpO1xuICAgICAgICAgICAgdGhpcy5jaGFuZ2VkRWxlbWVudHNDb3VudCsrO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNoYW5nZWRFbGVtZW50ID0gdGhpcy5jaGFuZ2VkRWxlbWVudHMuZ2V0KGVsZW1lbnQpO1xuICAgICAgICBzd2l0Y2ggKG11dGF0aW9uLmF0dHJpYnV0ZU5hbWUpIHtcbiAgICAgICAgICAgIGNhc2UgJ2NsYXNzJzpcbiAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZUNsYXNzQXR0cmlidXRlTXV0YXRpb24obXV0YXRpb24sIGNoYW5nZWRFbGVtZW50KTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3N0eWxlJzpcbiAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZVN0eWxlQXR0cmlidXRlTXV0YXRpb24obXV0YXRpb24sIGNoYW5nZWRFbGVtZW50KTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVHZW5lcmljQXR0cmlidXRlTXV0YXRpb24obXV0YXRpb24sIGNoYW5nZWRFbGVtZW50KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2hhbmdlZEVsZW1lbnQuaXNFbXB0eSgpKSB7XG4gICAgICAgICAgICB0aGlzLmNoYW5nZWRFbGVtZW50cy5kZWxldGUoZWxlbWVudCk7XG4gICAgICAgICAgICB0aGlzLmNoYW5nZWRFbGVtZW50c0NvdW50LS07XG4gICAgICAgIH1cbiAgICB9XG4gICAgaGFuZGxlQ2xhc3NBdHRyaWJ1dGVNdXRhdGlvbihtdXRhdGlvbiwgZWxlbWVudENoYW5nZXMpIHtcbiAgICAgICAgY29uc3QgZWxlbWVudCA9IG11dGF0aW9uLnRhcmdldDtcbiAgICAgICAgY29uc3QgcHJldmlvdXNWYWx1ZSA9IG11dGF0aW9uLm9sZFZhbHVlIHx8ICcnO1xuICAgICAgICBjb25zdCBwcmV2aW91c1ZhbHVlcyA9IHByZXZpb3VzVmFsdWUubWF0Y2goLyhcXFMrKS9ndSkgfHwgW107XG4gICAgICAgIGNvbnN0IG5ld1ZhbHVlcyA9IFtdLnNsaWNlLmNhbGwoZWxlbWVudC5jbGFzc0xpc3QpO1xuICAgICAgICBjb25zdCBhZGRlZFZhbHVlcyA9IG5ld1ZhbHVlcy5maWx0ZXIoKHZhbHVlKSA9PiAhcHJldmlvdXNWYWx1ZXMuaW5jbHVkZXModmFsdWUpKTtcbiAgICAgICAgY29uc3QgcmVtb3ZlZFZhbHVlcyA9IHByZXZpb3VzVmFsdWVzLmZpbHRlcigodmFsdWUpID0+ICFuZXdWYWx1ZXMuaW5jbHVkZXModmFsdWUpKTtcbiAgICAgICAgYWRkZWRWYWx1ZXMuZm9yRWFjaCgodmFsdWUpID0+IHtcbiAgICAgICAgICAgIGVsZW1lbnRDaGFuZ2VzLmFkZENsYXNzKHZhbHVlKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJlbW92ZWRWYWx1ZXMuZm9yRWFjaCgodmFsdWUpID0+IHtcbiAgICAgICAgICAgIGVsZW1lbnRDaGFuZ2VzLnJlbW92ZUNsYXNzKHZhbHVlKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGhhbmRsZVN0eWxlQXR0cmlidXRlTXV0YXRpb24obXV0YXRpb24sIGVsZW1lbnRDaGFuZ2VzKSB7XG4gICAgICAgIGNvbnN0IGVsZW1lbnQgPSBtdXRhdGlvbi50YXJnZXQ7XG4gICAgICAgIGNvbnN0IHByZXZpb3VzVmFsdWUgPSBtdXRhdGlvbi5vbGRWYWx1ZSB8fCAnJztcbiAgICAgICAgY29uc3QgcHJldmlvdXNTdHlsZXMgPSB0aGlzLmV4dHJhY3RTdHlsZXMocHJldmlvdXNWYWx1ZSk7XG4gICAgICAgIGNvbnN0IG5ld1ZhbHVlID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ3N0eWxlJykgfHwgJyc7XG4gICAgICAgIGNvbnN0IG5ld1N0eWxlcyA9IHRoaXMuZXh0cmFjdFN0eWxlcyhuZXdWYWx1ZSk7XG4gICAgICAgIGNvbnN0IGFkZGVkT3JDaGFuZ2VkU3R5bGVzID0gT2JqZWN0LmtleXMobmV3U3R5bGVzKS5maWx0ZXIoKGtleSkgPT4gcHJldmlvdXNTdHlsZXNba2V5XSA9PT0gdW5kZWZpbmVkIHx8IHByZXZpb3VzU3R5bGVzW2tleV0gIT09IG5ld1N0eWxlc1trZXldKTtcbiAgICAgICAgY29uc3QgcmVtb3ZlZFN0eWxlcyA9IE9iamVjdC5rZXlzKHByZXZpb3VzU3R5bGVzKS5maWx0ZXIoKGtleSkgPT4gIW5ld1N0eWxlc1trZXldKTtcbiAgICAgICAgYWRkZWRPckNoYW5nZWRTdHlsZXMuZm9yRWFjaCgoc3R5bGUpID0+IHtcbiAgICAgICAgICAgIGVsZW1lbnRDaGFuZ2VzLmFkZFN0eWxlKHN0eWxlLCBuZXdTdHlsZXNbc3R5bGVdLCBwcmV2aW91c1N0eWxlc1tzdHlsZV0gPT09IHVuZGVmaW5lZCA/IG51bGwgOiBwcmV2aW91c1N0eWxlc1tzdHlsZV0pO1xuICAgICAgICB9KTtcbiAgICAgICAgcmVtb3ZlZFN0eWxlcy5mb3JFYWNoKChzdHlsZSkgPT4ge1xuICAgICAgICAgICAgZWxlbWVudENoYW5nZXMucmVtb3ZlU3R5bGUoc3R5bGUsIHByZXZpb3VzU3R5bGVzW3N0eWxlXSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBoYW5kbGVHZW5lcmljQXR0cmlidXRlTXV0YXRpb24obXV0YXRpb24sIGVsZW1lbnRDaGFuZ2VzKSB7XG4gICAgICAgIGNvbnN0IGF0dHJpYnV0ZU5hbWUgPSBtdXRhdGlvbi5hdHRyaWJ1dGVOYW1lO1xuICAgICAgICBjb25zdCBlbGVtZW50ID0gbXV0YXRpb24udGFyZ2V0O1xuICAgICAgICBsZXQgb2xkVmFsdWUgPSBtdXRhdGlvbi5vbGRWYWx1ZTtcbiAgICAgICAgbGV0IG5ld1ZhbHVlID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoYXR0cmlidXRlTmFtZSk7XG4gICAgICAgIGlmIChvbGRWYWx1ZSA9PT0gYXR0cmlidXRlTmFtZSkge1xuICAgICAgICAgICAgb2xkVmFsdWUgPSAnJztcbiAgICAgICAgfVxuICAgICAgICBpZiAobmV3VmFsdWUgPT09IGF0dHJpYnV0ZU5hbWUpIHtcbiAgICAgICAgICAgIG5ld1ZhbHVlID0gJyc7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFlbGVtZW50Lmhhc0F0dHJpYnV0ZShhdHRyaWJ1dGVOYW1lKSkge1xuICAgICAgICAgICAgaWYgKG9sZFZhbHVlID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxlbWVudENoYW5nZXMucmVtb3ZlQXR0cmlidXRlKGF0dHJpYnV0ZU5hbWUsIG11dGF0aW9uLm9sZFZhbHVlKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAobmV3VmFsdWUgPT09IG9sZFZhbHVlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgZWxlbWVudENoYW5nZXMuYWRkQXR0cmlidXRlKGF0dHJpYnV0ZU5hbWUsIGVsZW1lbnQuZ2V0QXR0cmlidXRlKGF0dHJpYnV0ZU5hbWUpLCBtdXRhdGlvbi5vbGRWYWx1ZSk7XG4gICAgfVxuICAgIGV4dHJhY3RTdHlsZXMoc3R5bGVzKSB7XG4gICAgICAgIGNvbnN0IHN0eWxlT2JqZWN0ID0ge307XG4gICAgICAgIHN0eWxlcy5zcGxpdCgnOycpLmZvckVhY2goKHN0eWxlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBwYXJ0cyA9IHN0eWxlLnNwbGl0KCc6Jyk7XG4gICAgICAgICAgICBpZiAocGFydHMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgcHJvcGVydHkgPSBwYXJ0c1swXS50cmltKCk7XG4gICAgICAgICAgICBzdHlsZU9iamVjdFtwcm9wZXJ0eV0gPSBwYXJ0cy5zbGljZSgxKS5qb2luKCc6JykudHJpbSgpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHN0eWxlT2JqZWN0O1xuICAgIH1cbiAgICBpc0VsZW1lbnRBZGRlZEJ5VHJhbnNsYXRpb24oZWxlbWVudCkge1xuICAgICAgICByZXR1cm4gZWxlbWVudC50YWdOYW1lID09PSAnRk9OVCcgJiYgZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ3N0eWxlJykgPT09ICd2ZXJ0aWNhbC1hbGlnbjogaW5oZXJpdDsnO1xuICAgIH1cbn1cblxuY2xhc3MgQ29tcG9uZW50IHtcbiAgICBjb25zdHJ1Y3RvcihlbGVtZW50LCBuYW1lLCBwcm9wcywgbGlzdGVuZXJzLCBpZCwgYmFja2VuZCwgZWxlbWVudERyaXZlcikge1xuICAgICAgICB0aGlzLmZpbmdlcnByaW50ID0gJyc7XG4gICAgICAgIHRoaXMuZGVmYXVsdERlYm91bmNlID0gMTUwO1xuICAgICAgICB0aGlzLmJhY2tlbmRSZXF1ZXN0ID0gbnVsbDtcbiAgICAgICAgdGhpcy5wZW5kaW5nQWN0aW9ucyA9IFtdO1xuICAgICAgICB0aGlzLnBlbmRpbmdGaWxlcyA9IHt9O1xuICAgICAgICB0aGlzLmlzUmVxdWVzdFBlbmRpbmcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5yZXF1ZXN0RGVib3VuY2VUaW1lb3V0ID0gbnVsbDtcbiAgICAgICAgdGhpcy5lbGVtZW50ID0gZWxlbWVudDtcbiAgICAgICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgICAgICAgdGhpcy5iYWNrZW5kID0gYmFja2VuZDtcbiAgICAgICAgdGhpcy5lbGVtZW50RHJpdmVyID0gZWxlbWVudERyaXZlcjtcbiAgICAgICAgdGhpcy5pZCA9IGlkO1xuICAgICAgICB0aGlzLmxpc3RlbmVycyA9IG5ldyBNYXAoKTtcbiAgICAgICAgbGlzdGVuZXJzLmZvckVhY2goKGxpc3RlbmVyKSA9PiB7XG4gICAgICAgICAgICBpZiAoIXRoaXMubGlzdGVuZXJzLmhhcyhsaXN0ZW5lci5ldmVudCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmxpc3RlbmVycy5zZXQobGlzdGVuZXIuZXZlbnQsIFtdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMubGlzdGVuZXJzLmdldChsaXN0ZW5lci5ldmVudCk/LnB1c2gobGlzdGVuZXIuYWN0aW9uKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMudmFsdWVTdG9yZSA9IG5ldyBWYWx1ZVN0b3JlKHByb3BzKTtcbiAgICAgICAgdGhpcy51bnN5bmNlZElucHV0c1RyYWNrZXIgPSBuZXcgVW5zeW5jZWRJbnB1dHNUcmFja2VyKHRoaXMsIGVsZW1lbnREcml2ZXIpO1xuICAgICAgICB0aGlzLmhvb2tzID0gbmV3IEhvb2tNYW5hZ2VyKCk7XG4gICAgICAgIHRoaXMucmVzZXRQcm9taXNlKCk7XG4gICAgICAgIHRoaXMuZXh0ZXJuYWxNdXRhdGlvblRyYWNrZXIgPSBuZXcgRXh0ZXJuYWxNdXRhdGlvblRyYWNrZXIodGhpcy5lbGVtZW50LCAoZWxlbWVudCkgPT4gZWxlbWVudEJlbG9uZ3NUb1RoaXNDb21wb25lbnQoZWxlbWVudCwgdGhpcykpO1xuICAgICAgICB0aGlzLmV4dGVybmFsTXV0YXRpb25UcmFja2VyLnN0YXJ0KCk7XG4gICAgfVxuICAgIGFkZFBsdWdpbihwbHVnaW4pIHtcbiAgICAgICAgcGx1Z2luLmF0dGFjaFRvQ29tcG9uZW50KHRoaXMpO1xuICAgIH1cbiAgICBjb25uZWN0KCkge1xuICAgICAgICByZWdpc3RlckNvbXBvbmVudCh0aGlzKTtcbiAgICAgICAgdGhpcy5ob29rcy50cmlnZ2VySG9vaygnY29ubmVjdCcsIHRoaXMpO1xuICAgICAgICB0aGlzLnVuc3luY2VkSW5wdXRzVHJhY2tlci5hY3RpdmF0ZSgpO1xuICAgICAgICB0aGlzLmV4dGVybmFsTXV0YXRpb25UcmFja2VyLnN0YXJ0KCk7XG4gICAgfVxuICAgIGRpc2Nvbm5lY3QoKSB7XG4gICAgICAgIHVucmVnaXN0ZXJDb21wb25lbnQodGhpcyk7XG4gICAgICAgIHRoaXMuaG9va3MudHJpZ2dlckhvb2soJ2Rpc2Nvbm5lY3QnLCB0aGlzKTtcbiAgICAgICAgdGhpcy5jbGVhclJlcXVlc3REZWJvdW5jZVRpbWVvdXQoKTtcbiAgICAgICAgdGhpcy51bnN5bmNlZElucHV0c1RyYWNrZXIuZGVhY3RpdmF0ZSgpO1xuICAgICAgICB0aGlzLmV4dGVybmFsTXV0YXRpb25UcmFja2VyLnN0b3AoKTtcbiAgICB9XG4gICAgb24oaG9va05hbWUsIGNhbGxiYWNrKSB7XG4gICAgICAgIHRoaXMuaG9va3MucmVnaXN0ZXIoaG9va05hbWUsIGNhbGxiYWNrKTtcbiAgICB9XG4gICAgb2ZmKGhvb2tOYW1lLCBjYWxsYmFjaykge1xuICAgICAgICB0aGlzLmhvb2tzLnVucmVnaXN0ZXIoaG9va05hbWUsIGNhbGxiYWNrKTtcbiAgICB9XG4gICAgc2V0KG1vZGVsLCB2YWx1ZSwgcmVSZW5kZXIgPSBmYWxzZSwgZGVib3VuY2UgPSBmYWxzZSkge1xuICAgICAgICBjb25zdCBwcm9taXNlID0gdGhpcy5uZXh0UmVxdWVzdFByb21pc2U7XG4gICAgICAgIGNvbnN0IG1vZGVsTmFtZSA9IG5vcm1hbGl6ZU1vZGVsTmFtZShtb2RlbCk7XG4gICAgICAgIGlmICghdGhpcy52YWx1ZVN0b3JlLmhhcyhtb2RlbE5hbWUpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgbW9kZWwgbmFtZSBcIiR7bW9kZWx9XCIuYCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaXNDaGFuZ2VkID0gdGhpcy52YWx1ZVN0b3JlLnNldChtb2RlbE5hbWUsIHZhbHVlKTtcbiAgICAgICAgdGhpcy5ob29rcy50cmlnZ2VySG9vaygnbW9kZWw6c2V0JywgbW9kZWwsIHZhbHVlLCB0aGlzKTtcbiAgICAgICAgdGhpcy51bnN5bmNlZElucHV0c1RyYWNrZXIubWFya01vZGVsQXNTeW5jZWQobW9kZWxOYW1lKTtcbiAgICAgICAgaWYgKHJlUmVuZGVyICYmIGlzQ2hhbmdlZCkge1xuICAgICAgICAgICAgdGhpcy5kZWJvdW5jZWRTdGFydFJlcXVlc3QoZGVib3VuY2UpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwcm9taXNlO1xuICAgIH1cbiAgICBnZXREYXRhKG1vZGVsKSB7XG4gICAgICAgIGNvbnN0IG1vZGVsTmFtZSA9IG5vcm1hbGl6ZU1vZGVsTmFtZShtb2RlbCk7XG4gICAgICAgIGlmICghdGhpcy52YWx1ZVN0b3JlLmhhcyhtb2RlbE5hbWUpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgbW9kZWwgXCIke21vZGVsfVwiLmApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlU3RvcmUuZ2V0KG1vZGVsTmFtZSk7XG4gICAgfVxuICAgIGFjdGlvbihuYW1lLCBhcmdzID0ge30sIGRlYm91bmNlID0gZmFsc2UpIHtcbiAgICAgICAgY29uc3QgcHJvbWlzZSA9IHRoaXMubmV4dFJlcXVlc3RQcm9taXNlO1xuICAgICAgICB0aGlzLnBlbmRpbmdBY3Rpb25zLnB1c2goe1xuICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgIGFyZ3MsXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmRlYm91bmNlZFN0YXJ0UmVxdWVzdChkZWJvdW5jZSk7XG4gICAgICAgIHJldHVybiBwcm9taXNlO1xuICAgIH1cbiAgICBmaWxlcyhrZXksIGlucHV0KSB7XG4gICAgICAgIHRoaXMucGVuZGluZ0ZpbGVzW2tleV0gPSBpbnB1dDtcbiAgICB9XG4gICAgcmVuZGVyKCkge1xuICAgICAgICBjb25zdCBwcm9taXNlID0gdGhpcy5uZXh0UmVxdWVzdFByb21pc2U7XG4gICAgICAgIHRoaXMudHJ5U3RhcnRpbmdSZXF1ZXN0KCk7XG4gICAgICAgIHJldHVybiBwcm9taXNlO1xuICAgIH1cbiAgICBnZXRVbnN5bmNlZE1vZGVscygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudW5zeW5jZWRJbnB1dHNUcmFja2VyLmdldFVuc3luY2VkTW9kZWxzKCk7XG4gICAgfVxuICAgIGVtaXQobmFtZSwgZGF0YSwgb25seU1hdGNoaW5nQ29tcG9uZW50c05hbWVkID0gbnVsbCkge1xuICAgICAgICB0aGlzLnBlcmZvcm1FbWl0KG5hbWUsIGRhdGEsIGZhbHNlLCBvbmx5TWF0Y2hpbmdDb21wb25lbnRzTmFtZWQpO1xuICAgIH1cbiAgICBlbWl0VXAobmFtZSwgZGF0YSwgb25seU1hdGNoaW5nQ29tcG9uZW50c05hbWVkID0gbnVsbCkge1xuICAgICAgICB0aGlzLnBlcmZvcm1FbWl0KG5hbWUsIGRhdGEsIHRydWUsIG9ubHlNYXRjaGluZ0NvbXBvbmVudHNOYW1lZCk7XG4gICAgfVxuICAgIGVtaXRTZWxmKG5hbWUsIGRhdGEpIHtcbiAgICAgICAgdGhpcy5kb0VtaXQobmFtZSwgZGF0YSk7XG4gICAgfVxuICAgIHBlcmZvcm1FbWl0KG5hbWUsIGRhdGEsIGVtaXRVcCwgbWF0Y2hpbmdOYW1lKSB7XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudHMgPSBmaW5kQ29tcG9uZW50cyh0aGlzLCBlbWl0VXAsIG1hdGNoaW5nTmFtZSk7XG4gICAgICAgIGNvbXBvbmVudHMuZm9yRWFjaCgoY29tcG9uZW50KSA9PiB7XG4gICAgICAgICAgICBjb21wb25lbnQuZG9FbWl0KG5hbWUsIGRhdGEpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgZG9FbWl0KG5hbWUsIGRhdGEpIHtcbiAgICAgICAgaWYgKCF0aGlzLmxpc3RlbmVycy5oYXMobmFtZSkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBhY3Rpb25zID0gdGhpcy5saXN0ZW5lcnMuZ2V0KG5hbWUpIHx8IFtdO1xuICAgICAgICBhY3Rpb25zLmZvckVhY2goKGFjdGlvbikgPT4ge1xuICAgICAgICAgICAgdGhpcy5hY3Rpb24oYWN0aW9uLCBkYXRhLCAxKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGlzVHVyYm9FbmFibGVkKCkge1xuICAgICAgICByZXR1cm4gdHlwZW9mIFR1cmJvICE9PSAndW5kZWZpbmVkJyAmJiAhdGhpcy5lbGVtZW50LmNsb3Nlc3QoJ1tkYXRhLXR1cmJvPVwiZmFsc2VcIl0nKTtcbiAgICB9XG4gICAgdHJ5U3RhcnRpbmdSZXF1ZXN0KCkge1xuICAgICAgICBpZiAoIXRoaXMuYmFja2VuZFJlcXVlc3QpIHtcbiAgICAgICAgICAgIHRoaXMucGVyZm9ybVJlcXVlc3QoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmlzUmVxdWVzdFBlbmRpbmcgPSB0cnVlO1xuICAgIH1cbiAgICBwZXJmb3JtUmVxdWVzdCgpIHtcbiAgICAgICAgY29uc3QgdGhpc1Byb21pc2VSZXNvbHZlID0gdGhpcy5uZXh0UmVxdWVzdFByb21pc2VSZXNvbHZlO1xuICAgICAgICB0aGlzLnJlc2V0UHJvbWlzZSgpO1xuICAgICAgICB0aGlzLnVuc3luY2VkSW5wdXRzVHJhY2tlci5yZXNldFVuc3luY2VkRmllbGRzKCk7XG4gICAgICAgIGNvbnN0IGZpbGVzVG9TZW5kID0ge307XG4gICAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHRoaXMucGVuZGluZ0ZpbGVzKSkge1xuICAgICAgICAgICAgaWYgKHZhbHVlLmZpbGVzKSB7XG4gICAgICAgICAgICAgICAgZmlsZXNUb1NlbmRba2V5XSA9IHZhbHVlLmZpbGVzO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJlcXVlc3RDb25maWcgPSB7XG4gICAgICAgICAgICBwcm9wczogdGhpcy52YWx1ZVN0b3JlLmdldE9yaWdpbmFsUHJvcHMoKSxcbiAgICAgICAgICAgIGFjdGlvbnM6IHRoaXMucGVuZGluZ0FjdGlvbnMsXG4gICAgICAgICAgICB1cGRhdGVkOiB0aGlzLnZhbHVlU3RvcmUuZ2V0RGlydHlQcm9wcygpLFxuICAgICAgICAgICAgY2hpbGRyZW46IHt9LFxuICAgICAgICAgICAgdXBkYXRlZFByb3BzRnJvbVBhcmVudDogdGhpcy52YWx1ZVN0b3JlLmdldFVwZGF0ZWRQcm9wc0Zyb21QYXJlbnQoKSxcbiAgICAgICAgICAgIGZpbGVzOiBmaWxlc1RvU2VuZCxcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5ob29rcy50cmlnZ2VySG9vaygncmVxdWVzdDpzdGFydGVkJywgcmVxdWVzdENvbmZpZyk7XG4gICAgICAgIHRoaXMuYmFja2VuZFJlcXVlc3QgPSB0aGlzLmJhY2tlbmQubWFrZVJlcXVlc3QocmVxdWVzdENvbmZpZy5wcm9wcywgcmVxdWVzdENvbmZpZy5hY3Rpb25zLCByZXF1ZXN0Q29uZmlnLnVwZGF0ZWQsIHJlcXVlc3RDb25maWcuY2hpbGRyZW4sIHJlcXVlc3RDb25maWcudXBkYXRlZFByb3BzRnJvbVBhcmVudCwgcmVxdWVzdENvbmZpZy5maWxlcyk7XG4gICAgICAgIHRoaXMuaG9va3MudHJpZ2dlckhvb2soJ2xvYWRpbmcuc3RhdGU6c3RhcnRlZCcsIHRoaXMuZWxlbWVudCwgdGhpcy5iYWNrZW5kUmVxdWVzdCk7XG4gICAgICAgIHRoaXMucGVuZGluZ0FjdGlvbnMgPSBbXTtcbiAgICAgICAgdGhpcy52YWx1ZVN0b3JlLmZsdXNoRGlydHlQcm9wc1RvUGVuZGluZygpO1xuICAgICAgICB0aGlzLmlzUmVxdWVzdFBlbmRpbmcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5iYWNrZW5kUmVxdWVzdC5wcm9taXNlLnRoZW4oYXN5bmMgKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBiYWNrZW5kUmVzcG9uc2UgPSBuZXcgQmFja2VuZFJlc3BvbnNlKHJlc3BvbnNlKTtcbiAgICAgICAgICAgIGNvbnN0IGh0bWwgPSBhd2FpdCBiYWNrZW5kUmVzcG9uc2UuZ2V0Qm9keSgpO1xuICAgICAgICAgICAgZm9yIChjb25zdCBpbnB1dCBvZiBPYmplY3QudmFsdWVzKHRoaXMucGVuZGluZ0ZpbGVzKSkge1xuICAgICAgICAgICAgICAgIGlucHV0LnZhbHVlID0gJyc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBoZWFkZXJzID0gYmFja2VuZFJlc3BvbnNlLnJlc3BvbnNlLmhlYWRlcnM7XG4gICAgICAgICAgICBpZiAoIWhlYWRlcnMuZ2V0KCdDb250ZW50LVR5cGUnKT8uaW5jbHVkZXMoJ2FwcGxpY2F0aW9uL3ZuZC5saXZlLWNvbXBvbmVudCtodG1sJykgJiZcbiAgICAgICAgICAgICAgICAhaGVhZGVycy5nZXQoJ1gtTGl2ZS1SZWRpcmVjdCcpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY29udHJvbHMgPSB7IGRpc3BsYXlFcnJvcjogdHJ1ZSB9O1xuICAgICAgICAgICAgICAgIHRoaXMudmFsdWVTdG9yZS5wdXNoUGVuZGluZ1Byb3BzQmFja1RvRGlydHkoKTtcbiAgICAgICAgICAgICAgICB0aGlzLmhvb2tzLnRyaWdnZXJIb29rKCdyZXNwb25zZTplcnJvcicsIGJhY2tlbmRSZXNwb25zZSwgY29udHJvbHMpO1xuICAgICAgICAgICAgICAgIGlmIChjb250cm9scy5kaXNwbGF5RXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJFcnJvcihodG1sKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5iYWNrZW5kUmVxdWVzdCA9IG51bGw7XG4gICAgICAgICAgICAgICAgdGhpc1Byb21pc2VSZXNvbHZlKGJhY2tlbmRSZXNwb25zZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5wcm9jZXNzUmVyZW5kZXIoaHRtbCwgYmFja2VuZFJlc3BvbnNlKTtcbiAgICAgICAgICAgIHRoaXMuYmFja2VuZFJlcXVlc3QgPSBudWxsO1xuICAgICAgICAgICAgdGhpc1Byb21pc2VSZXNvbHZlKGJhY2tlbmRSZXNwb25zZSk7XG4gICAgICAgICAgICBpZiAodGhpcy5pc1JlcXVlc3RQZW5kaW5nKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pc1JlcXVlc3RQZW5kaW5nID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5wZXJmb3JtUmVxdWVzdCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgcHJvY2Vzc1JlcmVuZGVyKGh0bWwsIGJhY2tlbmRSZXNwb25zZSkge1xuICAgICAgICBjb25zdCBjb250cm9scyA9IHsgc2hvdWxkUmVuZGVyOiB0cnVlIH07XG4gICAgICAgIHRoaXMuaG9va3MudHJpZ2dlckhvb2soJ3JlbmRlcjpzdGFydGVkJywgaHRtbCwgYmFja2VuZFJlc3BvbnNlLCBjb250cm9scyk7XG4gICAgICAgIGlmICghY29udHJvbHMuc2hvdWxkUmVuZGVyKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGJhY2tlbmRSZXNwb25zZS5yZXNwb25zZS5oZWFkZXJzLmdldCgnTG9jYXRpb24nKSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuaXNUdXJib0VuYWJsZWQoKSkge1xuICAgICAgICAgICAgICAgIFR1cmJvLnZpc2l0KGJhY2tlbmRSZXNwb25zZS5yZXNwb25zZS5oZWFkZXJzLmdldCgnTG9jYXRpb24nKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9IGJhY2tlbmRSZXNwb25zZS5yZXNwb25zZS5oZWFkZXJzLmdldCgnTG9jYXRpb24nKSB8fCAnJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmhvb2tzLnRyaWdnZXJIb29rKCdsb2FkaW5nLnN0YXRlOmZpbmlzaGVkJywgdGhpcy5lbGVtZW50KTtcbiAgICAgICAgY29uc3QgbW9kaWZpZWRNb2RlbFZhbHVlcyA9IHt9O1xuICAgICAgICBPYmplY3Qua2V5cyh0aGlzLnZhbHVlU3RvcmUuZ2V0RGlydHlQcm9wcygpKS5mb3JFYWNoKChtb2RlbE5hbWUpID0+IHtcbiAgICAgICAgICAgIG1vZGlmaWVkTW9kZWxWYWx1ZXNbbW9kZWxOYW1lXSA9IHRoaXMudmFsdWVTdG9yZS5nZXQobW9kZWxOYW1lKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGxldCBuZXdFbGVtZW50O1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgbmV3RWxlbWVudCA9IGh0bWxUb0VsZW1lbnQoaHRtbCk7XG4gICAgICAgICAgICBpZiAoIW5ld0VsZW1lbnQubWF0Y2hlcygnW2RhdGEtY29udHJvbGxlcn49bGl2ZV0nKSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQSBsaXZlIGNvbXBvbmVudCB0ZW1wbGF0ZSBtdXN0IGNvbnRhaW4gYSBzaW5nbGUgcm9vdCBjb250cm9sbGVyIGVsZW1lbnQuJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGBUaGVyZSB3YXMgYSBwcm9ibGVtIHdpdGggdGhlICcke3RoaXMubmFtZX0nIGNvbXBvbmVudCBIVE1MIHJldHVybmVkOmAsIHtcbiAgICAgICAgICAgICAgICBpZDogdGhpcy5pZCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5leHRlcm5hbE11dGF0aW9uVHJhY2tlci5oYW5kbGVQZW5kaW5nQ2hhbmdlcygpO1xuICAgICAgICB0aGlzLmV4dGVybmFsTXV0YXRpb25UcmFja2VyLnN0b3AoKTtcbiAgICAgICAgZXhlY3V0ZU1vcnBoZG9tKHRoaXMuZWxlbWVudCwgbmV3RWxlbWVudCwgdGhpcy51bnN5bmNlZElucHV0c1RyYWNrZXIuZ2V0VW5zeW5jZWRJbnB1dHMoKSwgKGVsZW1lbnQpID0+IGdldFZhbHVlRnJvbUVsZW1lbnQoZWxlbWVudCwgdGhpcy52YWx1ZVN0b3JlKSwgdGhpcy5leHRlcm5hbE11dGF0aW9uVHJhY2tlcik7XG4gICAgICAgIHRoaXMuZXh0ZXJuYWxNdXRhdGlvblRyYWNrZXIuc3RhcnQoKTtcbiAgICAgICAgY29uc3QgbmV3UHJvcHMgPSB0aGlzLmVsZW1lbnREcml2ZXIuZ2V0Q29tcG9uZW50UHJvcHMoKTtcbiAgICAgICAgdGhpcy52YWx1ZVN0b3JlLnJlaW5pdGlhbGl6ZUFsbFByb3BzKG5ld1Byb3BzKTtcbiAgICAgICAgY29uc3QgZXZlbnRzVG9FbWl0ID0gdGhpcy5lbGVtZW50RHJpdmVyLmdldEV2ZW50c1RvRW1pdCgpO1xuICAgICAgICBjb25zdCBicm93c2VyRXZlbnRzVG9EaXNwYXRjaCA9IHRoaXMuZWxlbWVudERyaXZlci5nZXRCcm93c2VyRXZlbnRzVG9EaXNwYXRjaCgpO1xuICAgICAgICBPYmplY3Qua2V5cyhtb2RpZmllZE1vZGVsVmFsdWVzKS5mb3JFYWNoKChtb2RlbE5hbWUpID0+IHtcbiAgICAgICAgICAgIHRoaXMudmFsdWVTdG9yZS5zZXQobW9kZWxOYW1lLCBtb2RpZmllZE1vZGVsVmFsdWVzW21vZGVsTmFtZV0pO1xuICAgICAgICB9KTtcbiAgICAgICAgZXZlbnRzVG9FbWl0LmZvckVhY2goKHsgZXZlbnQsIGRhdGEsIHRhcmdldCwgY29tcG9uZW50TmFtZSB9KSA9PiB7XG4gICAgICAgICAgICBpZiAodGFyZ2V0ID09PSAndXAnKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5lbWl0VXAoZXZlbnQsIGRhdGEsIGNvbXBvbmVudE5hbWUpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0YXJnZXQgPT09ICdzZWxmJykge1xuICAgICAgICAgICAgICAgIHRoaXMuZW1pdFNlbGYoZXZlbnQsIGRhdGEpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuZW1pdChldmVudCwgZGF0YSwgY29tcG9uZW50TmFtZSk7XG4gICAgICAgIH0pO1xuICAgICAgICBicm93c2VyRXZlbnRzVG9EaXNwYXRjaC5mb3JFYWNoKCh7IGV2ZW50LCBwYXlsb2FkIH0pID0+IHtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudChldmVudCwge1xuICAgICAgICAgICAgICAgIGRldGFpbDogcGF5bG9hZCxcbiAgICAgICAgICAgICAgICBidWJibGVzOiB0cnVlLFxuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5ob29rcy50cmlnZ2VySG9vaygncmVuZGVyOmZpbmlzaGVkJywgdGhpcyk7XG4gICAgfVxuICAgIGNhbGN1bGF0ZURlYm91bmNlKGRlYm91bmNlKSB7XG4gICAgICAgIGlmIChkZWJvdW5jZSA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdERlYm91bmNlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChkZWJvdW5jZSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkZWJvdW5jZTtcbiAgICB9XG4gICAgY2xlYXJSZXF1ZXN0RGVib3VuY2VUaW1lb3V0KCkge1xuICAgICAgICBpZiAodGhpcy5yZXF1ZXN0RGVib3VuY2VUaW1lb3V0KSB7XG4gICAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5yZXF1ZXN0RGVib3VuY2VUaW1lb3V0KTtcbiAgICAgICAgICAgIHRoaXMucmVxdWVzdERlYm91bmNlVGltZW91dCA9IG51bGw7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZGVib3VuY2VkU3RhcnRSZXF1ZXN0KGRlYm91bmNlKSB7XG4gICAgICAgIHRoaXMuY2xlYXJSZXF1ZXN0RGVib3VuY2VUaW1lb3V0KCk7XG4gICAgICAgIHRoaXMucmVxdWVzdERlYm91bmNlVGltZW91dCA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyKCk7XG4gICAgICAgIH0sIHRoaXMuY2FsY3VsYXRlRGVib3VuY2UoZGVib3VuY2UpKTtcbiAgICB9XG4gICAgcmVuZGVyRXJyb3IoaHRtbCkge1xuICAgICAgICBsZXQgbW9kYWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGl2ZS1jb21wb25lbnQtZXJyb3InKTtcbiAgICAgICAgaWYgKG1vZGFsKSB7XG4gICAgICAgICAgICBtb2RhbC5pbm5lckhUTUwgPSAnJztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIG1vZGFsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICBtb2RhbC5pZCA9ICdsaXZlLWNvbXBvbmVudC1lcnJvcic7XG4gICAgICAgICAgICBtb2RhbC5zdHlsZS5wYWRkaW5nID0gJzUwcHgnO1xuICAgICAgICAgICAgbW9kYWwuc3R5bGUuYmFja2dyb3VuZENvbG9yID0gJ3JnYmEoMCwgMCwgMCwgLjUpJztcbiAgICAgICAgICAgIG1vZGFsLnN0eWxlLnpJbmRleCA9ICcxMDAwMDAnO1xuICAgICAgICAgICAgbW9kYWwuc3R5bGUucG9zaXRpb24gPSAnZml4ZWQnO1xuICAgICAgICAgICAgbW9kYWwuc3R5bGUudG9wID0gJzBweCc7XG4gICAgICAgICAgICBtb2RhbC5zdHlsZS5ib3R0b20gPSAnMHB4JztcbiAgICAgICAgICAgIG1vZGFsLnN0eWxlLmxlZnQgPSAnMHB4JztcbiAgICAgICAgICAgIG1vZGFsLnN0eWxlLnJpZ2h0ID0gJzBweCc7XG4gICAgICAgICAgICBtb2RhbC5zdHlsZS5kaXNwbGF5ID0gJ2ZsZXgnO1xuICAgICAgICAgICAgbW9kYWwuc3R5bGUuZmxleERpcmVjdGlvbiA9ICdjb2x1bW4nO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGlmcmFtZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lmcmFtZScpO1xuICAgICAgICBpZnJhbWUuc3R5bGUuYm9yZGVyUmFkaXVzID0gJzVweCc7XG4gICAgICAgIGlmcmFtZS5zdHlsZS5mbGV4R3JvdyA9ICcxJztcbiAgICAgICAgbW9kYWwuYXBwZW5kQ2hpbGQoaWZyYW1lKTtcbiAgICAgICAgZG9jdW1lbnQuYm9keS5wcmVwZW5kKG1vZGFsKTtcbiAgICAgICAgZG9jdW1lbnQuYm9keS5zdHlsZS5vdmVyZmxvdyA9ICdoaWRkZW4nO1xuICAgICAgICBpZiAoaWZyYW1lLmNvbnRlbnRXaW5kb3cpIHtcbiAgICAgICAgICAgIGlmcmFtZS5jb250ZW50V2luZG93LmRvY3VtZW50Lm9wZW4oKTtcbiAgICAgICAgICAgIGlmcmFtZS5jb250ZW50V2luZG93LmRvY3VtZW50LndyaXRlKGh0bWwpO1xuICAgICAgICAgICAgaWZyYW1lLmNvbnRlbnRXaW5kb3cuZG9jdW1lbnQuY2xvc2UoKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjbG9zZU1vZGFsID0gKG1vZGFsKSA9PiB7XG4gICAgICAgICAgICBpZiAobW9kYWwpIHtcbiAgICAgICAgICAgICAgICBtb2RhbC5vdXRlckhUTUwgPSAnJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUub3ZlcmZsb3cgPSAndmlzaWJsZSc7XG4gICAgICAgIH07XG4gICAgICAgIG1vZGFsLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4gY2xvc2VNb2RhbChtb2RhbCkpO1xuICAgICAgICBtb2RhbC5zZXRBdHRyaWJ1dGUoJ3RhYmluZGV4JywgJzAnKTtcbiAgICAgICAgbW9kYWwuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIChlKSA9PiB7XG4gICAgICAgICAgICBpZiAoZS5rZXkgPT09ICdFc2NhcGUnKSB7XG4gICAgICAgICAgICAgICAgY2xvc2VNb2RhbChtb2RhbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBtb2RhbC5mb2N1cygpO1xuICAgIH1cbiAgICByZXNldFByb21pc2UoKSB7XG4gICAgICAgIHRoaXMubmV4dFJlcXVlc3RQcm9taXNlID0gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgICAgICAgIHRoaXMubmV4dFJlcXVlc3RQcm9taXNlUmVzb2x2ZSA9IHJlc29sdmU7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBfdXBkYXRlRnJvbVBhcmVudFByb3BzKHByb3BzKSB7XG4gICAgICAgIGNvbnN0IGlzQ2hhbmdlZCA9IHRoaXMudmFsdWVTdG9yZS5zdG9yZU5ld1Byb3BzRnJvbVBhcmVudChwcm9wcyk7XG4gICAgICAgIGlmIChpc0NoYW5nZWQpIHtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyKCk7XG4gICAgICAgIH1cbiAgICB9XG59XG5mdW5jdGlvbiBwcm94aWZ5Q29tcG9uZW50KGNvbXBvbmVudCkge1xuICAgIHJldHVybiBuZXcgUHJveHkoY29tcG9uZW50LCB7XG4gICAgICAgIGdldChjb21wb25lbnQsIHByb3ApIHtcbiAgICAgICAgICAgIGlmIChwcm9wIGluIGNvbXBvbmVudCB8fCB0eXBlb2YgcHJvcCAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGNvbXBvbmVudFtwcm9wXSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjYWxsYWJsZSA9IGNvbXBvbmVudFtwcm9wXTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICguLi5hcmdzKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGFibGUuYXBwbHkoY29tcG9uZW50LCBhcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIFJlZmxlY3QuZ2V0KGNvbXBvbmVudCwgcHJvcCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoY29tcG9uZW50LnZhbHVlU3RvcmUuaGFzKHByb3ApKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvbXBvbmVudC5nZXREYXRhKHByb3ApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIChhcmdzKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvbXBvbmVudC5hY3Rpb24uYXBwbHkoY29tcG9uZW50LCBbcHJvcCwgYXJnc10pO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0KHRhcmdldCwgcHJvcGVydHksIHZhbHVlKSB7XG4gICAgICAgICAgICBpZiAocHJvcGVydHkgaW4gdGFyZ2V0KSB7XG4gICAgICAgICAgICAgICAgdGFyZ2V0W3Byb3BlcnR5XSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGFyZ2V0LnNldChwcm9wZXJ0eSwgdmFsdWUpO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0sXG4gICAgfSk7XG59XG5cbmNsYXNzIEJhY2tlbmRSZXF1ZXN0IHtcbiAgICBjb25zdHJ1Y3Rvcihwcm9taXNlLCBhY3Rpb25zLCB1cGRhdGVNb2RlbHMpIHtcbiAgICAgICAgdGhpcy5pc1Jlc29sdmVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMucHJvbWlzZSA9IHByb21pc2U7XG4gICAgICAgIHRoaXMucHJvbWlzZS50aGVuKChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5pc1Jlc29sdmVkID0gdHJ1ZTtcbiAgICAgICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuYWN0aW9ucyA9IGFjdGlvbnM7XG4gICAgICAgIHRoaXMudXBkYXRlZE1vZGVscyA9IHVwZGF0ZU1vZGVscztcbiAgICB9XG4gICAgY29udGFpbnNPbmVPZkFjdGlvbnModGFyZ2V0ZWRBY3Rpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmFjdGlvbnMuZmlsdGVyKChhY3Rpb24pID0+IHRhcmdldGVkQWN0aW9ucy5pbmNsdWRlcyhhY3Rpb24pKS5sZW5ndGggPiAwO1xuICAgIH1cbiAgICBhcmVBbnlNb2RlbHNVcGRhdGVkKHRhcmdldGVkTW9kZWxzKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnVwZGF0ZWRNb2RlbHMuZmlsdGVyKChtb2RlbCkgPT4gdGFyZ2V0ZWRNb2RlbHMuaW5jbHVkZXMobW9kZWwpKS5sZW5ndGggPiAwO1xuICAgIH1cbn1cblxuY2xhc3MgUmVxdWVzdEJ1aWxkZXIge1xuICAgIGNvbnN0cnVjdG9yKHVybCwgbWV0aG9kID0gJ3Bvc3QnLCBjc3JmVG9rZW4gPSBudWxsKSB7XG4gICAgICAgIHRoaXMudXJsID0gdXJsO1xuICAgICAgICB0aGlzLm1ldGhvZCA9IG1ldGhvZDtcbiAgICAgICAgdGhpcy5jc3JmVG9rZW4gPSBjc3JmVG9rZW47XG4gICAgfVxuICAgIGJ1aWxkUmVxdWVzdChwcm9wcywgYWN0aW9ucywgdXBkYXRlZCwgY2hpbGRyZW4sIHVwZGF0ZWRQcm9wc0Zyb21QYXJlbnQsIGZpbGVzKSB7XG4gICAgICAgIGNvbnN0IHNwbGl0VXJsID0gdGhpcy51cmwuc3BsaXQoJz8nKTtcbiAgICAgICAgbGV0IFt1cmxdID0gc3BsaXRVcmw7XG4gICAgICAgIGNvbnN0IFssIHF1ZXJ5U3RyaW5nXSA9IHNwbGl0VXJsO1xuICAgICAgICBjb25zdCBwYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHF1ZXJ5U3RyaW5nIHx8ICcnKTtcbiAgICAgICAgY29uc3QgZmV0Y2hPcHRpb25zID0ge307XG4gICAgICAgIGZldGNoT3B0aW9ucy5oZWFkZXJzID0ge1xuICAgICAgICAgICAgQWNjZXB0OiAnYXBwbGljYXRpb24vdm5kLmxpdmUtY29tcG9uZW50K2h0bWwnLFxuICAgICAgICAgICAgJ1gtUmVxdWVzdGVkLVdpdGgnOiAnWE1MSHR0cFJlcXVlc3QnLFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCB0b3RhbEZpbGVzID0gT2JqZWN0LmVudHJpZXMoZmlsZXMpLnJlZHVjZSgodG90YWwsIGN1cnJlbnQpID0+IHRvdGFsICsgY3VycmVudC5sZW5ndGgsIDApO1xuICAgICAgICBjb25zdCBoYXNGaW5nZXJwcmludHMgPSBPYmplY3Qua2V5cyhjaGlsZHJlbikubGVuZ3RoID4gMDtcbiAgICAgICAgaWYgKGFjdGlvbnMubGVuZ3RoID09PSAwICYmXG4gICAgICAgICAgICB0b3RhbEZpbGVzID09PSAwICYmXG4gICAgICAgICAgICB0aGlzLm1ldGhvZCA9PT0gJ2dldCcgJiZcbiAgICAgICAgICAgIHRoaXMud2lsbERhdGFGaXRJblVybChKU09OLnN0cmluZ2lmeShwcm9wcyksIEpTT04uc3RyaW5naWZ5KHVwZGF0ZWQpLCBwYXJhbXMsIEpTT04uc3RyaW5naWZ5KGNoaWxkcmVuKSwgSlNPTi5zdHJpbmdpZnkodXBkYXRlZFByb3BzRnJvbVBhcmVudCkpKSB7XG4gICAgICAgICAgICBwYXJhbXMuc2V0KCdwcm9wcycsIEpTT04uc3RyaW5naWZ5KHByb3BzKSk7XG4gICAgICAgICAgICBwYXJhbXMuc2V0KCd1cGRhdGVkJywgSlNPTi5zdHJpbmdpZnkodXBkYXRlZCkpO1xuICAgICAgICAgICAgaWYgKE9iamVjdC5rZXlzKHVwZGF0ZWRQcm9wc0Zyb21QYXJlbnQpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBwYXJhbXMuc2V0KCdwcm9wc0Zyb21QYXJlbnQnLCBKU09OLnN0cmluZ2lmeSh1cGRhdGVkUHJvcHNGcm9tUGFyZW50KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaGFzRmluZ2VycHJpbnRzKSB7XG4gICAgICAgICAgICAgICAgcGFyYW1zLnNldCgnY2hpbGRyZW4nLCBKU09OLnN0cmluZ2lmeShjaGlsZHJlbikpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZmV0Y2hPcHRpb25zLm1ldGhvZCA9ICdHRVQnO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgZmV0Y2hPcHRpb25zLm1ldGhvZCA9ICdQT1NUJztcbiAgICAgICAgICAgIGNvbnN0IHJlcXVlc3REYXRhID0geyBwcm9wcywgdXBkYXRlZCB9O1xuICAgICAgICAgICAgaWYgKE9iamVjdC5rZXlzKHVwZGF0ZWRQcm9wc0Zyb21QYXJlbnQpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICByZXF1ZXN0RGF0YS5wcm9wc0Zyb21QYXJlbnQgPSB1cGRhdGVkUHJvcHNGcm9tUGFyZW50O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGhhc0ZpbmdlcnByaW50cykge1xuICAgICAgICAgICAgICAgIHJlcXVlc3REYXRhLmNoaWxkcmVuID0gY2hpbGRyZW47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5jc3JmVG9rZW4gJiYgKGFjdGlvbnMubGVuZ3RoIHx8IHRvdGFsRmlsZXMpKSB7XG4gICAgICAgICAgICAgICAgZmV0Y2hPcHRpb25zLmhlYWRlcnNbJ1gtQ1NSRi1UT0tFTiddID0gdGhpcy5jc3JmVG9rZW47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoYWN0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgaWYgKGFjdGlvbnMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlcXVlc3REYXRhLmFyZ3MgPSBhY3Rpb25zWzBdLmFyZ3M7XG4gICAgICAgICAgICAgICAgICAgIHVybCArPSBgLyR7ZW5jb2RlVVJJQ29tcG9uZW50KGFjdGlvbnNbMF0ubmFtZSl9YDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHVybCArPSAnL19iYXRjaCc7XG4gICAgICAgICAgICAgICAgICAgIHJlcXVlc3REYXRhLmFjdGlvbnMgPSBhY3Rpb25zO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XG4gICAgICAgICAgICBmb3JtRGF0YS5hcHBlbmQoJ2RhdGEnLCBKU09OLnN0cmluZ2lmeShyZXF1ZXN0RGF0YSkpO1xuICAgICAgICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoZmlsZXMpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbGVuZ3RoID0gdmFsdWUubGVuZ3RoO1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgICAgICAgICAgZm9ybURhdGEuYXBwZW5kKGtleSwgdmFsdWVbaV0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZldGNoT3B0aW9ucy5ib2R5ID0gZm9ybURhdGE7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcGFyYW1zU3RyaW5nID0gcGFyYW1zLnRvU3RyaW5nKCk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB1cmw6IGAke3VybH0ke3BhcmFtc1N0cmluZy5sZW5ndGggPiAwID8gYD8ke3BhcmFtc1N0cmluZ31gIDogJyd9YCxcbiAgICAgICAgICAgIGZldGNoT3B0aW9ucyxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgd2lsbERhdGFGaXRJblVybChwcm9wc0pzb24sIHVwZGF0ZWRKc29uLCBwYXJhbXMsIGNoaWxkcmVuSnNvbiwgcHJvcHNGcm9tUGFyZW50SnNvbikge1xuICAgICAgICBjb25zdCB1cmxFbmNvZGVkSnNvbkRhdGEgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHByb3BzSnNvbiArIHVwZGF0ZWRKc29uICsgY2hpbGRyZW5Kc29uICsgcHJvcHNGcm9tUGFyZW50SnNvbikudG9TdHJpbmcoKTtcbiAgICAgICAgcmV0dXJuICh1cmxFbmNvZGVkSnNvbkRhdGEgKyBwYXJhbXMudG9TdHJpbmcoKSkubGVuZ3RoIDwgMTUwMDtcbiAgICB9XG59XG5cbmNsYXNzIEJhY2tlbmQge1xuICAgIGNvbnN0cnVjdG9yKHVybCwgbWV0aG9kID0gJ3Bvc3QnLCBjc3JmVG9rZW4gPSBudWxsKSB7XG4gICAgICAgIHRoaXMucmVxdWVzdEJ1aWxkZXIgPSBuZXcgUmVxdWVzdEJ1aWxkZXIodXJsLCBtZXRob2QsIGNzcmZUb2tlbik7XG4gICAgfVxuICAgIG1ha2VSZXF1ZXN0KHByb3BzLCBhY3Rpb25zLCB1cGRhdGVkLCBjaGlsZHJlbiwgdXBkYXRlZFByb3BzRnJvbVBhcmVudCwgZmlsZXMpIHtcbiAgICAgICAgY29uc3QgeyB1cmwsIGZldGNoT3B0aW9ucyB9ID0gdGhpcy5yZXF1ZXN0QnVpbGRlci5idWlsZFJlcXVlc3QocHJvcHMsIGFjdGlvbnMsIHVwZGF0ZWQsIGNoaWxkcmVuLCB1cGRhdGVkUHJvcHNGcm9tUGFyZW50LCBmaWxlcyk7XG4gICAgICAgIHJldHVybiBuZXcgQmFja2VuZFJlcXVlc3QoZmV0Y2godXJsLCBmZXRjaE9wdGlvbnMpLCBhY3Rpb25zLm1hcCgoYmFja2VuZEFjdGlvbikgPT4gYmFja2VuZEFjdGlvbi5uYW1lKSwgT2JqZWN0LmtleXModXBkYXRlZCkpO1xuICAgIH1cbn1cblxuY2xhc3MgU3RpbXVsdXNFbGVtZW50RHJpdmVyIHtcbiAgICBjb25zdHJ1Y3Rvcihjb250cm9sbGVyKSB7XG4gICAgICAgIHRoaXMuY29udHJvbGxlciA9IGNvbnRyb2xsZXI7XG4gICAgfVxuICAgIGdldE1vZGVsTmFtZShlbGVtZW50KSB7XG4gICAgICAgIGNvbnN0IG1vZGVsRGlyZWN0aXZlID0gZ2V0TW9kZWxEaXJlY3RpdmVGcm9tRWxlbWVudChlbGVtZW50LCBmYWxzZSk7XG4gICAgICAgIGlmICghbW9kZWxEaXJlY3RpdmUpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtb2RlbERpcmVjdGl2ZS5hY3Rpb247XG4gICAgfVxuICAgIGdldENvbXBvbmVudFByb3BzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jb250cm9sbGVyLnByb3BzVmFsdWU7XG4gICAgfVxuICAgIGdldEV2ZW50c1RvRW1pdCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29udHJvbGxlci5ldmVudHNUb0VtaXRWYWx1ZTtcbiAgICB9XG4gICAgZ2V0QnJvd3NlckV2ZW50c1RvRGlzcGF0Y2goKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbnRyb2xsZXIuZXZlbnRzVG9EaXNwYXRjaFZhbHVlO1xuICAgIH1cbn1cblxuY2xhc3MgTG9hZGluZ1BsdWdpbiB7XG4gICAgYXR0YWNoVG9Db21wb25lbnQoY29tcG9uZW50KSB7XG4gICAgICAgIGNvbXBvbmVudC5vbignbG9hZGluZy5zdGF0ZTpzdGFydGVkJywgKGVsZW1lbnQsIHJlcXVlc3QpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc3RhcnRMb2FkaW5nKGNvbXBvbmVudCwgZWxlbWVudCwgcmVxdWVzdCk7XG4gICAgICAgIH0pO1xuICAgICAgICBjb21wb25lbnQub24oJ2xvYWRpbmcuc3RhdGU6ZmluaXNoZWQnLCAoZWxlbWVudCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5maW5pc2hMb2FkaW5nKGNvbXBvbmVudCwgZWxlbWVudCk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmZpbmlzaExvYWRpbmcoY29tcG9uZW50LCBjb21wb25lbnQuZWxlbWVudCk7XG4gICAgfVxuICAgIHN0YXJ0TG9hZGluZyhjb21wb25lbnQsIHRhcmdldEVsZW1lbnQsIGJhY2tlbmRSZXF1ZXN0KSB7XG4gICAgICAgIHRoaXMuaGFuZGxlTG9hZGluZ1RvZ2dsZShjb21wb25lbnQsIHRydWUsIHRhcmdldEVsZW1lbnQsIGJhY2tlbmRSZXF1ZXN0KTtcbiAgICB9XG4gICAgZmluaXNoTG9hZGluZyhjb21wb25lbnQsIHRhcmdldEVsZW1lbnQpIHtcbiAgICAgICAgdGhpcy5oYW5kbGVMb2FkaW5nVG9nZ2xlKGNvbXBvbmVudCwgZmFsc2UsIHRhcmdldEVsZW1lbnQsIG51bGwpO1xuICAgIH1cbiAgICBoYW5kbGVMb2FkaW5nVG9nZ2xlKGNvbXBvbmVudCwgaXNMb2FkaW5nLCB0YXJnZXRFbGVtZW50LCBiYWNrZW5kUmVxdWVzdCkge1xuICAgICAgICBpZiAoaXNMb2FkaW5nKSB7XG4gICAgICAgICAgICB0aGlzLmFkZEF0dHJpYnV0ZXModGFyZ2V0RWxlbWVudCwgWydidXN5J10pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5yZW1vdmVBdHRyaWJ1dGVzKHRhcmdldEVsZW1lbnQsIFsnYnVzeSddKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmdldExvYWRpbmdEaXJlY3RpdmVzKGNvbXBvbmVudCwgdGFyZ2V0RWxlbWVudCkuZm9yRWFjaCgoeyBlbGVtZW50LCBkaXJlY3RpdmVzIH0pID0+IHtcbiAgICAgICAgICAgIGlmIChpc0xvYWRpbmcpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFkZEF0dHJpYnV0ZXMoZWxlbWVudCwgWydkYXRhLWxpdmUtaXMtbG9hZGluZyddKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlQXR0cmlidXRlcyhlbGVtZW50LCBbJ2RhdGEtbGl2ZS1pcy1sb2FkaW5nJ10pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGlyZWN0aXZlcy5mb3JFYWNoKChkaXJlY3RpdmUpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZUxvYWRpbmdEaXJlY3RpdmUoZWxlbWVudCwgaXNMb2FkaW5nLCBkaXJlY3RpdmUsIGJhY2tlbmRSZXF1ZXN0KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgaGFuZGxlTG9hZGluZ0RpcmVjdGl2ZShlbGVtZW50LCBpc0xvYWRpbmcsIGRpcmVjdGl2ZSwgYmFja2VuZFJlcXVlc3QpIHtcbiAgICAgICAgY29uc3QgZmluYWxBY3Rpb24gPSBwYXJzZUxvYWRpbmdBY3Rpb24oZGlyZWN0aXZlLmFjdGlvbiwgaXNMb2FkaW5nKTtcbiAgICAgICAgY29uc3QgdGFyZ2V0ZWRBY3Rpb25zID0gW107XG4gICAgICAgIGNvbnN0IHRhcmdldGVkTW9kZWxzID0gW107XG4gICAgICAgIGxldCBkZWxheSA9IDA7XG4gICAgICAgIGNvbnN0IHZhbGlkTW9kaWZpZXJzID0gbmV3IE1hcCgpO1xuICAgICAgICB2YWxpZE1vZGlmaWVycy5zZXQoJ2RlbGF5JywgKG1vZGlmaWVyKSA9PiB7XG4gICAgICAgICAgICBpZiAoIWlzTG9hZGluZykge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRlbGF5ID0gbW9kaWZpZXIudmFsdWUgPyBOdW1iZXIucGFyc2VJbnQobW9kaWZpZXIudmFsdWUpIDogMjAwO1xuICAgICAgICB9KTtcbiAgICAgICAgdmFsaWRNb2RpZmllcnMuc2V0KCdhY3Rpb24nLCAobW9kaWZpZXIpID0+IHtcbiAgICAgICAgICAgIGlmICghbW9kaWZpZXIudmFsdWUpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZSBcImFjdGlvblwiIGluIGRhdGEtbG9hZGluZyBtdXN0IGhhdmUgYW4gYWN0aW9uIG5hbWUgLSBlLmcuIGFjdGlvbihmb28pLiBJdCdzIG1pc3NpbmcgZm9yIFwiJHtkaXJlY3RpdmUuZ2V0U3RyaW5nKCl9XCJgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRhcmdldGVkQWN0aW9ucy5wdXNoKG1vZGlmaWVyLnZhbHVlKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHZhbGlkTW9kaWZpZXJzLnNldCgnbW9kZWwnLCAobW9kaWZpZXIpID0+IHtcbiAgICAgICAgICAgIGlmICghbW9kaWZpZXIudmFsdWUpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZSBcIm1vZGVsXCIgaW4gZGF0YS1sb2FkaW5nIG11c3QgaGF2ZSBhbiBhY3Rpb24gbmFtZSAtIGUuZy4gbW9kZWwoZm9vKS4gSXQncyBtaXNzaW5nIGZvciBcIiR7ZGlyZWN0aXZlLmdldFN0cmluZygpfVwiYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0YXJnZXRlZE1vZGVscy5wdXNoKG1vZGlmaWVyLnZhbHVlKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGRpcmVjdGl2ZS5tb2RpZmllcnMuZm9yRWFjaCgobW9kaWZpZXIpID0+IHtcbiAgICAgICAgICAgIGlmICh2YWxpZE1vZGlmaWVycy5oYXMobW9kaWZpZXIubmFtZSkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjYWxsYWJsZSA9IHZhbGlkTW9kaWZpZXJzLmdldChtb2RpZmllci5uYW1lKSA/PyAoKCkgPT4geyB9KTtcbiAgICAgICAgICAgICAgICBjYWxsYWJsZShtb2RpZmllcik7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIG1vZGlmaWVyIFwiJHttb2RpZmllci5uYW1lfVwiIHVzZWQgaW4gZGF0YS1sb2FkaW5nPVwiJHtkaXJlY3RpdmUuZ2V0U3RyaW5nKCl9XCIuIEF2YWlsYWJsZSBtb2RpZmllcnMgYXJlOiAke0FycmF5LmZyb20odmFsaWRNb2RpZmllcnMua2V5cygpKS5qb2luKCcsICcpfS5gKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChpc0xvYWRpbmcgJiZcbiAgICAgICAgICAgIHRhcmdldGVkQWN0aW9ucy5sZW5ndGggPiAwICYmXG4gICAgICAgICAgICBiYWNrZW5kUmVxdWVzdCAmJlxuICAgICAgICAgICAgIWJhY2tlbmRSZXF1ZXN0LmNvbnRhaW5zT25lT2ZBY3Rpb25zKHRhcmdldGVkQWN0aW9ucykpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNMb2FkaW5nICYmXG4gICAgICAgICAgICB0YXJnZXRlZE1vZGVscy5sZW5ndGggPiAwICYmXG4gICAgICAgICAgICBiYWNrZW5kUmVxdWVzdCAmJlxuICAgICAgICAgICAgIWJhY2tlbmRSZXF1ZXN0LmFyZUFueU1vZGVsc1VwZGF0ZWQodGFyZ2V0ZWRNb2RlbHMpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGxvYWRpbmdEaXJlY3RpdmU7XG4gICAgICAgIHN3aXRjaCAoZmluYWxBY3Rpb24pIHtcbiAgICAgICAgICAgIGNhc2UgJ3Nob3cnOlxuICAgICAgICAgICAgICAgIGxvYWRpbmdEaXJlY3RpdmUgPSAoKSA9PiB0aGlzLnNob3dFbGVtZW50KGVsZW1lbnQpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnaGlkZSc6XG4gICAgICAgICAgICAgICAgbG9hZGluZ0RpcmVjdGl2ZSA9ICgpID0+IHRoaXMuaGlkZUVsZW1lbnQoZWxlbWVudCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdhZGRDbGFzcyc6XG4gICAgICAgICAgICAgICAgbG9hZGluZ0RpcmVjdGl2ZSA9ICgpID0+IHRoaXMuYWRkQ2xhc3MoZWxlbWVudCwgZGlyZWN0aXZlLmFyZ3MpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAncmVtb3ZlQ2xhc3MnOlxuICAgICAgICAgICAgICAgIGxvYWRpbmdEaXJlY3RpdmUgPSAoKSA9PiB0aGlzLnJlbW92ZUNsYXNzKGVsZW1lbnQsIGRpcmVjdGl2ZS5hcmdzKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2FkZEF0dHJpYnV0ZSc6XG4gICAgICAgICAgICAgICAgbG9hZGluZ0RpcmVjdGl2ZSA9ICgpID0+IHRoaXMuYWRkQXR0cmlidXRlcyhlbGVtZW50LCBkaXJlY3RpdmUuYXJncyk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdyZW1vdmVBdHRyaWJ1dGUnOlxuICAgICAgICAgICAgICAgIGxvYWRpbmdEaXJlY3RpdmUgPSAoKSA9PiB0aGlzLnJlbW92ZUF0dHJpYnV0ZXMoZWxlbWVudCwgZGlyZWN0aXZlLmFyZ3MpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gZGF0YS1sb2FkaW5nIGFjdGlvbiBcIiR7ZmluYWxBY3Rpb259XCJgKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZGVsYXkpIHtcbiAgICAgICAgICAgIHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoYmFja2VuZFJlcXVlc3QgJiYgIWJhY2tlbmRSZXF1ZXN0LmlzUmVzb2x2ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgbG9hZGluZ0RpcmVjdGl2ZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIGRlbGF5KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBsb2FkaW5nRGlyZWN0aXZlKCk7XG4gICAgfVxuICAgIGdldExvYWRpbmdEaXJlY3RpdmVzKGNvbXBvbmVudCwgZWxlbWVudCkge1xuICAgICAgICBjb25zdCBsb2FkaW5nRGlyZWN0aXZlcyA9IFtdO1xuICAgICAgICBsZXQgbWF0Y2hpbmdFbGVtZW50cyA9IFsuLi5BcnJheS5mcm9tKGVsZW1lbnQucXVlcnlTZWxlY3RvckFsbCgnW2RhdGEtbG9hZGluZ10nKSldO1xuICAgICAgICBtYXRjaGluZ0VsZW1lbnRzID0gbWF0Y2hpbmdFbGVtZW50cy5maWx0ZXIoKGVsdCkgPT4gZWxlbWVudEJlbG9uZ3NUb1RoaXNDb21wb25lbnQoZWx0LCBjb21wb25lbnQpKTtcbiAgICAgICAgaWYgKGVsZW1lbnQuaGFzQXR0cmlidXRlKCdkYXRhLWxvYWRpbmcnKSkge1xuICAgICAgICAgICAgbWF0Y2hpbmdFbGVtZW50cyA9IFtlbGVtZW50LCAuLi5tYXRjaGluZ0VsZW1lbnRzXTtcbiAgICAgICAgfVxuICAgICAgICBtYXRjaGluZ0VsZW1lbnRzLmZvckVhY2goKGVsZW1lbnQpID0+IHtcbiAgICAgICAgICAgIGlmICghKGVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkgJiYgIShlbGVtZW50IGluc3RhbmNlb2YgU1ZHRWxlbWVudCkpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgRWxlbWVudCBUeXBlJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBkaXJlY3RpdmVzID0gcGFyc2VEaXJlY3RpdmVzKGVsZW1lbnQuZGF0YXNldC5sb2FkaW5nIHx8ICdzaG93Jyk7XG4gICAgICAgICAgICBsb2FkaW5nRGlyZWN0aXZlcy5wdXNoKHtcbiAgICAgICAgICAgICAgICBlbGVtZW50LFxuICAgICAgICAgICAgICAgIGRpcmVjdGl2ZXMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBsb2FkaW5nRGlyZWN0aXZlcztcbiAgICB9XG4gICAgc2hvd0VsZW1lbnQoZWxlbWVudCkge1xuICAgICAgICBlbGVtZW50LnN0eWxlLmRpc3BsYXkgPSAncmV2ZXJ0JztcbiAgICB9XG4gICAgaGlkZUVsZW1lbnQoZWxlbWVudCkge1xuICAgICAgICBlbGVtZW50LnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gICAgfVxuICAgIGFkZENsYXNzKGVsZW1lbnQsIGNsYXNzZXMpIHtcbiAgICAgICAgZWxlbWVudC5jbGFzc0xpc3QuYWRkKC4uLmNvbWJpbmVTcGFjZWRBcnJheShjbGFzc2VzKSk7XG4gICAgfVxuICAgIHJlbW92ZUNsYXNzKGVsZW1lbnQsIGNsYXNzZXMpIHtcbiAgICAgICAgZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKC4uLmNvbWJpbmVTcGFjZWRBcnJheShjbGFzc2VzKSk7XG4gICAgICAgIGlmIChlbGVtZW50LmNsYXNzTGlzdC5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIGVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKCdjbGFzcycpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGFkZEF0dHJpYnV0ZXMoZWxlbWVudCwgYXR0cmlidXRlcykge1xuICAgICAgICBhdHRyaWJ1dGVzLmZvckVhY2goKGF0dHJpYnV0ZSkgPT4ge1xuICAgICAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoYXR0cmlidXRlLCAnJyk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICByZW1vdmVBdHRyaWJ1dGVzKGVsZW1lbnQsIGF0dHJpYnV0ZXMpIHtcbiAgICAgICAgYXR0cmlidXRlcy5mb3JFYWNoKChhdHRyaWJ1dGUpID0+IHtcbiAgICAgICAgICAgIGVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKGF0dHJpYnV0ZSk7XG4gICAgICAgIH0pO1xuICAgIH1cbn1cbmNvbnN0IHBhcnNlTG9hZGluZ0FjdGlvbiA9IChhY3Rpb24sIGlzTG9hZGluZykgPT4ge1xuICAgIHN3aXRjaCAoYWN0aW9uKSB7XG4gICAgICAgIGNhc2UgJ3Nob3cnOlxuICAgICAgICAgICAgcmV0dXJuIGlzTG9hZGluZyA/ICdzaG93JyA6ICdoaWRlJztcbiAgICAgICAgY2FzZSAnaGlkZSc6XG4gICAgICAgICAgICByZXR1cm4gaXNMb2FkaW5nID8gJ2hpZGUnIDogJ3Nob3cnO1xuICAgICAgICBjYXNlICdhZGRDbGFzcyc6XG4gICAgICAgICAgICByZXR1cm4gaXNMb2FkaW5nID8gJ2FkZENsYXNzJyA6ICdyZW1vdmVDbGFzcyc7XG4gICAgICAgIGNhc2UgJ3JlbW92ZUNsYXNzJzpcbiAgICAgICAgICAgIHJldHVybiBpc0xvYWRpbmcgPyAncmVtb3ZlQ2xhc3MnIDogJ2FkZENsYXNzJztcbiAgICAgICAgY2FzZSAnYWRkQXR0cmlidXRlJzpcbiAgICAgICAgICAgIHJldHVybiBpc0xvYWRpbmcgPyAnYWRkQXR0cmlidXRlJyA6ICdyZW1vdmVBdHRyaWJ1dGUnO1xuICAgICAgICBjYXNlICdyZW1vdmVBdHRyaWJ1dGUnOlxuICAgICAgICAgICAgcmV0dXJuIGlzTG9hZGluZyA/ICdyZW1vdmVBdHRyaWJ1dGUnIDogJ2FkZEF0dHJpYnV0ZSc7XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biBkYXRhLWxvYWRpbmcgYWN0aW9uIFwiJHthY3Rpb259XCJgKTtcbn07XG5cbmNsYXNzIFZhbGlkYXRlZEZpZWxkc1BsdWdpbiB7XG4gICAgYXR0YWNoVG9Db21wb25lbnQoY29tcG9uZW50KSB7XG4gICAgICAgIGNvbXBvbmVudC5vbignbW9kZWw6c2V0JywgKG1vZGVsTmFtZSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVNb2RlbFNldChtb2RlbE5hbWUsIGNvbXBvbmVudC52YWx1ZVN0b3JlKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGhhbmRsZU1vZGVsU2V0KG1vZGVsTmFtZSwgdmFsdWVTdG9yZSkge1xuICAgICAgICBpZiAodmFsdWVTdG9yZS5oYXMoJ3ZhbGlkYXRlZEZpZWxkcycpKSB7XG4gICAgICAgICAgICBjb25zdCB2YWxpZGF0ZWRGaWVsZHMgPSBbLi4udmFsdWVTdG9yZS5nZXQoJ3ZhbGlkYXRlZEZpZWxkcycpXTtcbiAgICAgICAgICAgIGlmICghdmFsaWRhdGVkRmllbGRzLmluY2x1ZGVzKG1vZGVsTmFtZSkpIHtcbiAgICAgICAgICAgICAgICB2YWxpZGF0ZWRGaWVsZHMucHVzaChtb2RlbE5hbWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFsdWVTdG9yZS5zZXQoJ3ZhbGlkYXRlZEZpZWxkcycsIHZhbGlkYXRlZEZpZWxkcyk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmNsYXNzIFBhZ2VVbmxvYWRpbmdQbHVnaW4ge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLmlzQ29ubmVjdGVkID0gZmFsc2U7XG4gICAgfVxuICAgIGF0dGFjaFRvQ29tcG9uZW50KGNvbXBvbmVudCkge1xuICAgICAgICBjb21wb25lbnQub24oJ3JlbmRlcjpzdGFydGVkJywgKGh0bWwsIHJlc3BvbnNlLCBjb250cm9scykgPT4ge1xuICAgICAgICAgICAgaWYgKCF0aGlzLmlzQ29ubmVjdGVkKSB7XG4gICAgICAgICAgICAgICAgY29udHJvbHMuc2hvdWxkUmVuZGVyID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBjb21wb25lbnQub24oJ2Nvbm5lY3QnLCAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmlzQ29ubmVjdGVkID0gdHJ1ZTtcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbXBvbmVudC5vbignZGlzY29ubmVjdCcsICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuaXNDb25uZWN0ZWQgPSBmYWxzZTtcbiAgICAgICAgfSk7XG4gICAgfVxufVxuXG5jbGFzcyBQb2xsaW5nRGlyZWN0b3Ige1xuICAgIGNvbnN0cnVjdG9yKGNvbXBvbmVudCkge1xuICAgICAgICB0aGlzLmlzUG9sbGluZ0FjdGl2ZSA9IHRydWU7XG4gICAgICAgIHRoaXMucG9sbGluZ0ludGVydmFscyA9IFtdO1xuICAgICAgICB0aGlzLmNvbXBvbmVudCA9IGNvbXBvbmVudDtcbiAgICB9XG4gICAgYWRkUG9sbChhY3Rpb25OYW1lLCBkdXJhdGlvbikge1xuICAgICAgICB0aGlzLnBvbGxzLnB1c2goeyBhY3Rpb25OYW1lLCBkdXJhdGlvbiB9KTtcbiAgICAgICAgaWYgKHRoaXMuaXNQb2xsaW5nQWN0aXZlKSB7XG4gICAgICAgICAgICB0aGlzLmluaXRpYXRlUG9sbChhY3Rpb25OYW1lLCBkdXJhdGlvbik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc3RhcnRBbGxQb2xsaW5nKCkge1xuICAgICAgICBpZiAodGhpcy5pc1BvbGxpbmdBY3RpdmUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmlzUG9sbGluZ0FjdGl2ZSA9IHRydWU7XG4gICAgICAgIHRoaXMucG9sbHMuZm9yRWFjaCgoeyBhY3Rpb25OYW1lLCBkdXJhdGlvbiB9KSA9PiB7XG4gICAgICAgICAgICB0aGlzLmluaXRpYXRlUG9sbChhY3Rpb25OYW1lLCBkdXJhdGlvbik7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBzdG9wQWxsUG9sbGluZygpIHtcbiAgICAgICAgdGhpcy5pc1BvbGxpbmdBY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5wb2xsaW5nSW50ZXJ2YWxzLmZvckVhY2goKGludGVydmFsKSA9PiB7XG4gICAgICAgICAgICBjbGVhckludGVydmFsKGludGVydmFsKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGNsZWFyUG9sbGluZygpIHtcbiAgICAgICAgdGhpcy5zdG9wQWxsUG9sbGluZygpO1xuICAgICAgICB0aGlzLnBvbGxzID0gW107XG4gICAgICAgIHRoaXMuc3RhcnRBbGxQb2xsaW5nKCk7XG4gICAgfVxuICAgIGluaXRpYXRlUG9sbChhY3Rpb25OYW1lLCBkdXJhdGlvbikge1xuICAgICAgICBsZXQgY2FsbGJhY2s7XG4gICAgICAgIGlmIChhY3Rpb25OYW1lID09PSAnJHJlbmRlcicpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuY29tcG9uZW50LnJlbmRlcigpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNhbGxiYWNrID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuY29tcG9uZW50LmFjdGlvbihhY3Rpb25OYW1lLCB7fSwgMCk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHRpbWVyID0gd2luZG93LnNldEludGVydmFsKCgpID0+IHtcbiAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgIH0sIGR1cmF0aW9uKTtcbiAgICAgICAgdGhpcy5wb2xsaW5nSW50ZXJ2YWxzLnB1c2godGltZXIpO1xuICAgIH1cbn1cblxuY2xhc3MgUG9sbGluZ1BsdWdpbiB7XG4gICAgYXR0YWNoVG9Db21wb25lbnQoY29tcG9uZW50KSB7XG4gICAgICAgIHRoaXMuZWxlbWVudCA9IGNvbXBvbmVudC5lbGVtZW50O1xuICAgICAgICB0aGlzLnBvbGxpbmdEaXJlY3RvciA9IG5ldyBQb2xsaW5nRGlyZWN0b3IoY29tcG9uZW50KTtcbiAgICAgICAgdGhpcy5pbml0aWFsaXplUG9sbGluZygpO1xuICAgICAgICBjb21wb25lbnQub24oJ2Nvbm5lY3QnLCAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnBvbGxpbmdEaXJlY3Rvci5zdGFydEFsbFBvbGxpbmcoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbXBvbmVudC5vbignZGlzY29ubmVjdCcsICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMucG9sbGluZ0RpcmVjdG9yLnN0b3BBbGxQb2xsaW5nKCk7XG4gICAgICAgIH0pO1xuICAgICAgICBjb21wb25lbnQub24oJ3JlbmRlcjpmaW5pc2hlZCcsICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuaW5pdGlhbGl6ZVBvbGxpbmcoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGFkZFBvbGwoYWN0aW9uTmFtZSwgZHVyYXRpb24pIHtcbiAgICAgICAgdGhpcy5wb2xsaW5nRGlyZWN0b3IuYWRkUG9sbChhY3Rpb25OYW1lLCBkdXJhdGlvbik7XG4gICAgfVxuICAgIGNsZWFyUG9sbGluZygpIHtcbiAgICAgICAgdGhpcy5wb2xsaW5nRGlyZWN0b3IuY2xlYXJQb2xsaW5nKCk7XG4gICAgfVxuICAgIGluaXRpYWxpemVQb2xsaW5nKCkge1xuICAgICAgICB0aGlzLmNsZWFyUG9sbGluZygpO1xuICAgICAgICBpZiAodGhpcy5lbGVtZW50LmRhdGFzZXQucG9sbCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmF3UG9sbENvbmZpZyA9IHRoaXMuZWxlbWVudC5kYXRhc2V0LnBvbGw7XG4gICAgICAgIGNvbnN0IGRpcmVjdGl2ZXMgPSBwYXJzZURpcmVjdGl2ZXMocmF3UG9sbENvbmZpZyB8fCAnJHJlbmRlcicpO1xuICAgICAgICBkaXJlY3RpdmVzLmZvckVhY2goKGRpcmVjdGl2ZSkgPT4ge1xuICAgICAgICAgICAgbGV0IGR1cmF0aW9uID0gMjAwMDtcbiAgICAgICAgICAgIGRpcmVjdGl2ZS5tb2RpZmllcnMuZm9yRWFjaCgobW9kaWZpZXIpID0+IHtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKG1vZGlmaWVyLm5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnZGVsYXknOlxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1vZGlmaWVyLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZHVyYXRpb24gPSBOdW1iZXIucGFyc2VJbnQobW9kaWZpZXIudmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oYFVua25vd24gbW9kaWZpZXIgXCIke21vZGlmaWVyLm5hbWV9XCIgaW4gZGF0YS1wb2xsIFwiJHtyYXdQb2xsQ29uZmlnfVwiLmApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5hZGRQb2xsKGRpcmVjdGl2ZS5hY3Rpb24sIGR1cmF0aW9uKTtcbiAgICAgICAgfSk7XG4gICAgfVxufVxuXG5jbGFzcyBTZXRWYWx1ZU9udG9Nb2RlbEZpZWxkc1BsdWdpbiB7XG4gICAgYXR0YWNoVG9Db21wb25lbnQoY29tcG9uZW50KSB7XG4gICAgICAgIHRoaXMuc3luY2hyb25pemVWYWx1ZU9mTW9kZWxGaWVsZHMoY29tcG9uZW50KTtcbiAgICAgICAgY29tcG9uZW50Lm9uKCdyZW5kZXI6ZmluaXNoZWQnLCAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnN5bmNocm9uaXplVmFsdWVPZk1vZGVsRmllbGRzKGNvbXBvbmVudCk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBzeW5jaHJvbml6ZVZhbHVlT2ZNb2RlbEZpZWxkcyhjb21wb25lbnQpIHtcbiAgICAgICAgY29tcG9uZW50LmVsZW1lbnQucXVlcnlTZWxlY3RvckFsbCgnW2RhdGEtbW9kZWxdJykuZm9yRWFjaCgoZWxlbWVudCkgPT4ge1xuICAgICAgICAgICAgaWYgKCEoZWxlbWVudCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBlbGVtZW50IHVzaW5nIGRhdGEtbW9kZWwuJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZWxlbWVudCBpbnN0YW5jZW9mIEhUTUxGb3JtRWxlbWVudCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghZWxlbWVudEJlbG9uZ3NUb1RoaXNDb21wb25lbnQoZWxlbWVudCwgY29tcG9uZW50KSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IG1vZGVsRGlyZWN0aXZlID0gZ2V0TW9kZWxEaXJlY3RpdmVGcm9tRWxlbWVudChlbGVtZW50KTtcbiAgICAgICAgICAgIGlmICghbW9kZWxEaXJlY3RpdmUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBtb2RlbE5hbWUgPSBtb2RlbERpcmVjdGl2ZS5hY3Rpb247XG4gICAgICAgICAgICBpZiAoY29tcG9uZW50LmdldFVuc3luY2VkTW9kZWxzKCkuaW5jbHVkZXMobW9kZWxOYW1lKSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChjb21wb25lbnQudmFsdWVTdG9yZS5oYXMobW9kZWxOYW1lKSkge1xuICAgICAgICAgICAgICAgIHNldFZhbHVlT25FbGVtZW50KGVsZW1lbnQsIGNvbXBvbmVudC52YWx1ZVN0b3JlLmdldChtb2RlbE5hbWUpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlbGVtZW50IGluc3RhbmNlb2YgSFRNTFNlbGVjdEVsZW1lbnQgJiYgIWVsZW1lbnQubXVsdGlwbGUpIHtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQudmFsdWVTdG9yZS5zZXQobW9kZWxOYW1lLCBnZXRWYWx1ZUZyb21FbGVtZW50KGVsZW1lbnQsIGNvbXBvbmVudC52YWx1ZVN0b3JlKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gZ2V0TW9kZWxCaW5kaW5nIChtb2RlbERpcmVjdGl2ZSkge1xuICAgIGxldCBzaG91bGRSZW5kZXIgPSB0cnVlO1xuICAgIGxldCB0YXJnZXRFdmVudE5hbWUgPSBudWxsO1xuICAgIGxldCBkZWJvdW5jZSA9IGZhbHNlO1xuICAgIG1vZGVsRGlyZWN0aXZlLm1vZGlmaWVycy5mb3JFYWNoKChtb2RpZmllcikgPT4ge1xuICAgICAgICBzd2l0Y2ggKG1vZGlmaWVyLm5hbWUpIHtcbiAgICAgICAgICAgIGNhc2UgJ29uJzpcbiAgICAgICAgICAgICAgICBpZiAoIW1vZGlmaWVyLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVGhlIFwib25cIiBtb2RpZmllciBpbiAke21vZGVsRGlyZWN0aXZlLmdldFN0cmluZygpfSByZXF1aXJlcyBhIHZhbHVlIC0gZS5nLiBvbihjaGFuZ2UpLmApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoIVsnaW5wdXQnLCAnY2hhbmdlJ10uaW5jbHVkZXMobW9kaWZpZXIudmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVGhlIFwib25cIiBtb2RpZmllciBpbiAke21vZGVsRGlyZWN0aXZlLmdldFN0cmluZygpfSBvbmx5IGFjY2VwdHMgdGhlIGFyZ3VtZW50cyBcImlucHV0XCIgb3IgXCJjaGFuZ2VcIi5gKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGFyZ2V0RXZlbnROYW1lID0gbW9kaWZpZXIudmFsdWU7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdub3JlbmRlcic6XG4gICAgICAgICAgICAgICAgc2hvdWxkUmVuZGVyID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdkZWJvdW5jZSc6XG4gICAgICAgICAgICAgICAgZGVib3VuY2UgPSBtb2RpZmllci52YWx1ZSA/IE51bWJlci5wYXJzZUludChtb2RpZmllci52YWx1ZSkgOiB0cnVlO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gbW9kaWZpZXIgXCIke21vZGlmaWVyLm5hbWV9XCIgaW4gZGF0YS1tb2RlbD1cIiR7bW9kZWxEaXJlY3RpdmUuZ2V0U3RyaW5nKCl9XCIuYCk7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICBjb25zdCBbbW9kZWxOYW1lLCBpbm5lck1vZGVsTmFtZV0gPSBtb2RlbERpcmVjdGl2ZS5hY3Rpb24uc3BsaXQoJzonKTtcbiAgICByZXR1cm4ge1xuICAgICAgICBtb2RlbE5hbWUsXG4gICAgICAgIGlubmVyTW9kZWxOYW1lOiBpbm5lck1vZGVsTmFtZSB8fCBudWxsLFxuICAgICAgICBzaG91bGRSZW5kZXIsXG4gICAgICAgIGRlYm91bmNlLFxuICAgICAgICB0YXJnZXRFdmVudE5hbWUsXG4gICAgfTtcbn1cblxuZnVuY3Rpb24gaXNWYWx1ZUVtcHR5KHZhbHVlKSB7XG4gICAgaWYgKG51bGwgPT09IHZhbHVlIHx8IHZhbHVlID09PSAnJyB8fCB1bmRlZmluZWQgPT09IHZhbHVlIHx8IChBcnJheS5pc0FycmF5KHZhbHVlKSAmJiB2YWx1ZS5sZW5ndGggPT09IDApKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0Jykge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKHZhbHVlKSkge1xuICAgICAgICBpZiAoIWlzVmFsdWVFbXB0eSh2YWx1ZVtrZXldKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xufVxuZnVuY3Rpb24gdG9RdWVyeVN0cmluZyhkYXRhKSB7XG4gICAgY29uc3QgYnVpbGRRdWVyeVN0cmluZ0VudHJpZXMgPSAoZGF0YSwgZW50cmllcyA9IHt9LCBiYXNlS2V5ID0gJycpID0+IHtcbiAgICAgICAgT2JqZWN0LmVudHJpZXMoZGF0YSkuZm9yRWFjaCgoW2lLZXksIGlWYWx1ZV0pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGtleSA9IGJhc2VLZXkgPT09ICcnID8gaUtleSA6IGAke2Jhc2VLZXl9WyR7aUtleX1dYDtcbiAgICAgICAgICAgIGlmICgnJyA9PT0gYmFzZUtleSAmJiBpc1ZhbHVlRW1wdHkoaVZhbHVlKSkge1xuICAgICAgICAgICAgICAgIGVudHJpZXNba2V5XSA9ICcnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAobnVsbCAhPT0gaVZhbHVlKSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBpVmFsdWUgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICAgICAgICAgIGVudHJpZXMgPSB7IC4uLmVudHJpZXMsIC4uLmJ1aWxkUXVlcnlTdHJpbmdFbnRyaWVzKGlWYWx1ZSwgZW50cmllcywga2V5KSB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZW50cmllc1trZXldID0gZW5jb2RlVVJJQ29tcG9uZW50KGlWYWx1ZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKC8lMjAvZywgJysnKVxuICAgICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoLyUyQy9nLCAnLCcpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBlbnRyaWVzO1xuICAgIH07XG4gICAgY29uc3QgZW50cmllcyA9IGJ1aWxkUXVlcnlTdHJpbmdFbnRyaWVzKGRhdGEpO1xuICAgIHJldHVybiBPYmplY3QuZW50cmllcyhlbnRyaWVzKVxuICAgICAgICAubWFwKChba2V5LCB2YWx1ZV0pID0+IGAke2tleX09JHt2YWx1ZX1gKVxuICAgICAgICAuam9pbignJicpO1xufVxuZnVuY3Rpb24gZnJvbVF1ZXJ5U3RyaW5nKHNlYXJjaCkge1xuICAgIHNlYXJjaCA9IHNlYXJjaC5yZXBsYWNlKCc/JywgJycpO1xuICAgIGlmIChzZWFyY2ggPT09ICcnKVxuICAgICAgICByZXR1cm4ge307XG4gICAgY29uc3QgaW5zZXJ0RG90Tm90YXRlZFZhbHVlSW50b0RhdGEgPSAoa2V5LCB2YWx1ZSwgZGF0YSkgPT4ge1xuICAgICAgICBjb25zdCBbZmlyc3QsIHNlY29uZCwgLi4ucmVzdF0gPSBrZXkuc3BsaXQoJy4nKTtcbiAgICAgICAgaWYgKCFzZWNvbmQpIHtcbiAgICAgICAgICAgIGRhdGFba2V5XSA9IHZhbHVlO1xuICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChkYXRhW2ZpcnN0XSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBkYXRhW2ZpcnN0XSA9IE51bWJlci5pc05hTihOdW1iZXIucGFyc2VJbnQoc2Vjb25kKSkgPyB7fSA6IFtdO1xuICAgICAgICB9XG4gICAgICAgIGluc2VydERvdE5vdGF0ZWRWYWx1ZUludG9EYXRhKFtzZWNvbmQsIC4uLnJlc3RdLmpvaW4oJy4nKSwgdmFsdWUsIGRhdGFbZmlyc3RdKTtcbiAgICB9O1xuICAgIGNvbnN0IGVudHJpZXMgPSBzZWFyY2guc3BsaXQoJyYnKS5tYXAoKGkpID0+IGkuc3BsaXQoJz0nKSk7XG4gICAgY29uc3QgZGF0YSA9IHt9O1xuICAgIGVudHJpZXMuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgICAgIHZhbHVlID0gZGVjb2RlVVJJQ29tcG9uZW50KHZhbHVlLnJlcGxhY2UoL1xcKy9nLCAnJTIwJykpO1xuICAgICAgICBpZiAoIWtleS5pbmNsdWRlcygnWycpKSB7XG4gICAgICAgICAgICBkYXRhW2tleV0gPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmICgnJyA9PT0gdmFsdWUpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgY29uc3QgZG90Tm90YXRlZEtleSA9IGtleS5yZXBsYWNlKC9cXFsvZywgJy4nKS5yZXBsYWNlKC9dL2csICcnKTtcbiAgICAgICAgICAgIGluc2VydERvdE5vdGF0ZWRWYWx1ZUludG9EYXRhKGRvdE5vdGF0ZWRLZXksIHZhbHVlLCBkYXRhKTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBkYXRhO1xufVxuY2xhc3MgVXJsVXRpbHMgZXh0ZW5kcyBVUkwge1xuICAgIGhhcyhrZXkpIHtcbiAgICAgICAgY29uc3QgZGF0YSA9IHRoaXMuZ2V0RGF0YSgpO1xuICAgICAgICByZXR1cm4gT2JqZWN0LmtleXMoZGF0YSkuaW5jbHVkZXMoa2V5KTtcbiAgICB9XG4gICAgc2V0KGtleSwgdmFsdWUpIHtcbiAgICAgICAgY29uc3QgZGF0YSA9IHRoaXMuZ2V0RGF0YSgpO1xuICAgICAgICBkYXRhW2tleV0gPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5zZXREYXRhKGRhdGEpO1xuICAgIH1cbiAgICBnZXQoa2V5KSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldERhdGEoKVtrZXldO1xuICAgIH1cbiAgICByZW1vdmUoa2V5KSB7XG4gICAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLmdldERhdGEoKTtcbiAgICAgICAgZGVsZXRlIGRhdGFba2V5XTtcbiAgICAgICAgdGhpcy5zZXREYXRhKGRhdGEpO1xuICAgIH1cbiAgICBnZXREYXRhKCkge1xuICAgICAgICBpZiAoIXRoaXMuc2VhcmNoKSB7XG4gICAgICAgICAgICByZXR1cm4ge307XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZyb21RdWVyeVN0cmluZyh0aGlzLnNlYXJjaCk7XG4gICAgfVxuICAgIHNldERhdGEoZGF0YSkge1xuICAgICAgICB0aGlzLnNlYXJjaCA9IHRvUXVlcnlTdHJpbmcoZGF0YSk7XG4gICAgfVxufVxuY2xhc3MgSGlzdG9yeVN0cmF0ZWd5IHtcbiAgICBzdGF0aWMgcmVwbGFjZSh1cmwpIHtcbiAgICAgICAgaGlzdG9yeS5yZXBsYWNlU3RhdGUoaGlzdG9yeS5zdGF0ZSwgJycsIHVybCk7XG4gICAgfVxufVxuXG5jbGFzcyBRdWVyeVN0cmluZ1BsdWdpbiB7XG4gICAgY29uc3RydWN0b3IobWFwcGluZykge1xuICAgICAgICB0aGlzLm1hcHBpbmcgPSBtYXBwaW5nO1xuICAgIH1cbiAgICBhdHRhY2hUb0NvbXBvbmVudChjb21wb25lbnQpIHtcbiAgICAgICAgY29tcG9uZW50Lm9uKCdyZW5kZXI6ZmluaXNoZWQnLCAoY29tcG9uZW50KSA9PiB7XG4gICAgICAgICAgICBjb25zdCB1cmxVdGlscyA9IG5ldyBVcmxVdGlscyh3aW5kb3cubG9jYXRpb24uaHJlZik7XG4gICAgICAgICAgICBjb25zdCBjdXJyZW50VXJsID0gdXJsVXRpbHMudG9TdHJpbmcoKTtcbiAgICAgICAgICAgIE9iamVjdC5lbnRyaWVzKHRoaXMubWFwcGluZykuZm9yRWFjaCgoW3Byb3AsIG1hcHBpbmddKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBjb21wb25lbnQudmFsdWVTdG9yZS5nZXQocHJvcCk7XG4gICAgICAgICAgICAgICAgdXJsVXRpbHMuc2V0KG1hcHBpbmcubmFtZSwgdmFsdWUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAoY3VycmVudFVybCAhPT0gdXJsVXRpbHMudG9TdHJpbmcoKSkge1xuICAgICAgICAgICAgICAgIEhpc3RvcnlTdHJhdGVneS5yZXBsYWNlKHVybFV0aWxzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxufVxuXG5jbGFzcyBDaGlsZENvbXBvbmVudFBsdWdpbiB7XG4gICAgY29uc3RydWN0b3IoY29tcG9uZW50KSB7XG4gICAgICAgIHRoaXMucGFyZW50TW9kZWxCaW5kaW5ncyA9IFtdO1xuICAgICAgICB0aGlzLmNvbXBvbmVudCA9IGNvbXBvbmVudDtcbiAgICAgICAgY29uc3QgbW9kZWxEaXJlY3RpdmVzID0gZ2V0QWxsTW9kZWxEaXJlY3RpdmVGcm9tRWxlbWVudHModGhpcy5jb21wb25lbnQuZWxlbWVudCk7XG4gICAgICAgIHRoaXMucGFyZW50TW9kZWxCaW5kaW5ncyA9IG1vZGVsRGlyZWN0aXZlcy5tYXAoZ2V0TW9kZWxCaW5kaW5nKTtcbiAgICB9XG4gICAgYXR0YWNoVG9Db21wb25lbnQoY29tcG9uZW50KSB7XG4gICAgICAgIGNvbXBvbmVudC5vbigncmVxdWVzdDpzdGFydGVkJywgKHJlcXVlc3REYXRhKSA9PiB7XG4gICAgICAgICAgICByZXF1ZXN0RGF0YS5jaGlsZHJlbiA9IHRoaXMuZ2V0Q2hpbGRyZW5GaW5nZXJwcmludHMoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbXBvbmVudC5vbignbW9kZWw6c2V0JywgKG1vZGVsLCB2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5ub3RpZnlQYXJlbnRNb2RlbENoYW5nZShtb2RlbCwgdmFsdWUpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgZ2V0Q2hpbGRyZW5GaW5nZXJwcmludHMoKSB7XG4gICAgICAgIGNvbnN0IGZpbmdlcnByaW50cyA9IHt9O1xuICAgICAgICB0aGlzLmdldENoaWxkcmVuKCkuZm9yRWFjaCgoY2hpbGQpID0+IHtcbiAgICAgICAgICAgIGlmICghY2hpbGQuaWQpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ21pc3NpbmcgaWQnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZpbmdlcnByaW50c1tjaGlsZC5pZF0gPSB7XG4gICAgICAgICAgICAgICAgZmluZ2VycHJpbnQ6IGNoaWxkLmZpbmdlcnByaW50LFxuICAgICAgICAgICAgICAgIHRhZzogY2hpbGQuZWxlbWVudC50YWdOYW1lLnRvTG93ZXJDYXNlKCksXG4gICAgICAgICAgICB9O1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGZpbmdlcnByaW50cztcbiAgICB9XG4gICAgbm90aWZ5UGFyZW50TW9kZWxDaGFuZ2UobW9kZWxOYW1lLCB2YWx1ZSkge1xuICAgICAgICBjb25zdCBwYXJlbnRDb21wb25lbnQgPSBmaW5kUGFyZW50KHRoaXMuY29tcG9uZW50KTtcbiAgICAgICAgaWYgKCFwYXJlbnRDb21wb25lbnQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnBhcmVudE1vZGVsQmluZGluZ3MuZm9yRWFjaCgobW9kZWxCaW5kaW5nKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBjaGlsZE1vZGVsTmFtZSA9IG1vZGVsQmluZGluZy5pbm5lck1vZGVsTmFtZSB8fCAndmFsdWUnO1xuICAgICAgICAgICAgaWYgKGNoaWxkTW9kZWxOYW1lICE9PSBtb2RlbE5hbWUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBwYXJlbnRDb21wb25lbnQuc2V0KG1vZGVsQmluZGluZy5tb2RlbE5hbWUsIHZhbHVlLCBtb2RlbEJpbmRpbmcuc2hvdWxkUmVuZGVyLCBtb2RlbEJpbmRpbmcuZGVib3VuY2UpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgZ2V0Q2hpbGRyZW4oKSB7XG4gICAgICAgIHJldHVybiBmaW5kQ2hpbGRyZW4odGhpcy5jb21wb25lbnQpO1xuICAgIH1cbn1cblxuY2xhc3MgTGF6eVBsdWdpbiB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMuaW50ZXJzZWN0aW9uT2JzZXJ2ZXIgPSBudWxsO1xuICAgIH1cbiAgICBhdHRhY2hUb0NvbXBvbmVudChjb21wb25lbnQpIHtcbiAgICAgICAgaWYgKCdsYXp5JyAhPT0gY29tcG9uZW50LmVsZW1lbnQuYXR0cmlidXRlcy5nZXROYW1lZEl0ZW0oJ2xvYWRpbmcnKT8udmFsdWUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb21wb25lbnQub24oJ2Nvbm5lY3QnLCAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmdldE9ic2VydmVyKCkub2JzZXJ2ZShjb21wb25lbnQuZWxlbWVudCk7XG4gICAgICAgIH0pO1xuICAgICAgICBjb21wb25lbnQub24oJ2Rpc2Nvbm5lY3QnLCAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmludGVyc2VjdGlvbk9ic2VydmVyPy51bm9ic2VydmUoY29tcG9uZW50LmVsZW1lbnQpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgZ2V0T2JzZXJ2ZXIoKSB7XG4gICAgICAgIGlmICghdGhpcy5pbnRlcnNlY3Rpb25PYnNlcnZlcikge1xuICAgICAgICAgICAgdGhpcy5pbnRlcnNlY3Rpb25PYnNlcnZlciA9IG5ldyBJbnRlcnNlY3Rpb25PYnNlcnZlcigoZW50cmllcywgb2JzZXJ2ZXIpID0+IHtcbiAgICAgICAgICAgICAgICBlbnRyaWVzLmZvckVhY2goKGVudHJ5KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlbnRyeS5pc0ludGVyc2VjdGluZykge1xuICAgICAgICAgICAgICAgICAgICAgICAgZW50cnkudGFyZ2V0LmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCdsaXZlOmFwcGVhcicpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9ic2VydmVyLnVub2JzZXJ2ZShlbnRyeS50YXJnZXQpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5pbnRlcnNlY3Rpb25PYnNlcnZlcjtcbiAgICB9XG59XG5cbmNsYXNzIExpdmVDb250cm9sbGVyRGVmYXVsdCBleHRlbmRzIENvbnRyb2xsZXIge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICB0aGlzLnBlbmRpbmdBY3Rpb25UcmlnZ2VyTW9kZWxFbGVtZW50ID0gbnVsbDtcbiAgICAgICAgdGhpcy5lbGVtZW50RXZlbnRMaXN0ZW5lcnMgPSBbXG4gICAgICAgICAgICB7IGV2ZW50OiAnaW5wdXQnLCBjYWxsYmFjazogKGV2ZW50KSA9PiB0aGlzLmhhbmRsZUlucHV0RXZlbnQoZXZlbnQpIH0sXG4gICAgICAgICAgICB7IGV2ZW50OiAnY2hhbmdlJywgY2FsbGJhY2s6IChldmVudCkgPT4gdGhpcy5oYW5kbGVDaGFuZ2VFdmVudChldmVudCkgfSxcbiAgICAgICAgXTtcbiAgICAgICAgdGhpcy5wZW5kaW5nRmlsZXMgPSB7fTtcbiAgICB9XG4gICAgaW5pdGlhbGl6ZSgpIHtcbiAgICAgICAgdGhpcy5tdXRhdGlvbk9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIodGhpcy5vbk11dGF0aW9ucy5iaW5kKHRoaXMpKTtcbiAgICAgICAgdGhpcy5jcmVhdGVDb21wb25lbnQoKTtcbiAgICB9XG4gICAgY29ubmVjdCgpIHtcbiAgICAgICAgdGhpcy5jb25uZWN0Q29tcG9uZW50KCk7XG4gICAgICAgIHRoaXMubXV0YXRpb25PYnNlcnZlci5vYnNlcnZlKHRoaXMuZWxlbWVudCwge1xuICAgICAgICAgICAgYXR0cmlidXRlczogdHJ1ZSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGRpc2Nvbm5lY3QoKSB7XG4gICAgICAgIHRoaXMuZGlzY29ubmVjdENvbXBvbmVudCgpO1xuICAgICAgICB0aGlzLm11dGF0aW9uT2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xuICAgIH1cbiAgICB1cGRhdGUoZXZlbnQpIHtcbiAgICAgICAgaWYgKGV2ZW50LnR5cGUgPT09ICdpbnB1dCcgfHwgZXZlbnQudHlwZSA9PT0gJ2NoYW5nZScpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgU2luY2UgTGl2ZUNvbXBvbmVudHMgMi4zLCB5b3Ugbm8gbG9uZ2VyIG5lZWQgZGF0YS1hY3Rpb249XCJsaXZlI3VwZGF0ZVwiIG9uIGZvcm0gZWxlbWVudHMuIEZvdW5kIG9uIGVsZW1lbnQ6ICR7Z2V0RWxlbWVudEFzVGFnVGV4dChldmVudC5jdXJyZW50VGFyZ2V0KX1gKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnVwZGF0ZU1vZGVsRnJvbUVsZW1lbnRFdmVudChldmVudC5jdXJyZW50VGFyZ2V0LCBudWxsKTtcbiAgICB9XG4gICAgYWN0aW9uKGV2ZW50KSB7XG4gICAgICAgIGNvbnN0IHBhcmFtcyA9IGV2ZW50LnBhcmFtcztcbiAgICAgICAgaWYgKCFwYXJhbXMuYWN0aW9uKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIGFjdGlvbiBuYW1lIHByb3ZpZGVkIG9uIGVsZW1lbnQ6ICR7Z2V0RWxlbWVudEFzVGFnVGV4dChldmVudC5jdXJyZW50VGFyZ2V0KX0uIERpZCB5b3UgZm9yZ2V0IHRvIGFkZCB0aGUgXCJkYXRhLWxpdmUtYWN0aW9uLXBhcmFtXCIgYXR0cmlidXRlP2ApO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJhd0FjdGlvbiA9IHBhcmFtcy5hY3Rpb247XG4gICAgICAgIGNvbnN0IGFjdGlvbkFyZ3MgPSB7IC4uLnBhcmFtcyB9O1xuICAgICAgICBkZWxldGUgYWN0aW9uQXJncy5hY3Rpb247XG4gICAgICAgIGNvbnN0IGRpcmVjdGl2ZXMgPSBwYXJzZURpcmVjdGl2ZXMocmF3QWN0aW9uKTtcbiAgICAgICAgbGV0IGRlYm91bmNlID0gZmFsc2U7XG4gICAgICAgIGRpcmVjdGl2ZXMuZm9yRWFjaCgoZGlyZWN0aXZlKSA9PiB7XG4gICAgICAgICAgICBsZXQgcGVuZGluZ0ZpbGVzID0ge307XG4gICAgICAgICAgICBjb25zdCB2YWxpZE1vZGlmaWVycyA9IG5ldyBNYXAoKTtcbiAgICAgICAgICAgIHZhbGlkTW9kaWZpZXJzLnNldCgnc3RvcCcsICgpID0+IHtcbiAgICAgICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdmFsaWRNb2RpZmllcnMuc2V0KCdzZWxmJywgKCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChldmVudC50YXJnZXQgIT09IGV2ZW50LmN1cnJlbnRUYXJnZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdmFsaWRNb2RpZmllcnMuc2V0KCdkZWJvdW5jZScsIChtb2RpZmllcikgPT4ge1xuICAgICAgICAgICAgICAgIGRlYm91bmNlID0gbW9kaWZpZXIudmFsdWUgPyBOdW1iZXIucGFyc2VJbnQobW9kaWZpZXIudmFsdWUpIDogdHJ1ZTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdmFsaWRNb2RpZmllcnMuc2V0KCdmaWxlcycsIChtb2RpZmllcikgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghbW9kaWZpZXIudmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgcGVuZGluZ0ZpbGVzID0gdGhpcy5wZW5kaW5nRmlsZXM7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMucGVuZGluZ0ZpbGVzW21vZGlmaWVyLnZhbHVlXSkge1xuICAgICAgICAgICAgICAgICAgICBwZW5kaW5nRmlsZXNbbW9kaWZpZXIudmFsdWVdID0gdGhpcy5wZW5kaW5nRmlsZXNbbW9kaWZpZXIudmFsdWVdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgZGlyZWN0aXZlLm1vZGlmaWVycy5mb3JFYWNoKChtb2RpZmllcikgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh2YWxpZE1vZGlmaWVycy5oYXMobW9kaWZpZXIubmFtZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2FsbGFibGUgPSB2YWxpZE1vZGlmaWVycy5nZXQobW9kaWZpZXIubmFtZSkgPz8gKCgpID0+IHsgfSk7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxhYmxlKG1vZGlmaWVyKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oYFVua25vd24gbW9kaWZpZXIgJHttb2RpZmllci5uYW1lfSBpbiBhY3Rpb24gXCIke3Jhd0FjdGlvbn1cIi4gQXZhaWxhYmxlIG1vZGlmaWVycyBhcmU6ICR7QXJyYXkuZnJvbSh2YWxpZE1vZGlmaWVycy5rZXlzKCkpLmpvaW4oJywgJyl9LmApO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IFtrZXksIGlucHV0XSBvZiBPYmplY3QuZW50cmllcyhwZW5kaW5nRmlsZXMpKSB7XG4gICAgICAgICAgICAgICAgaWYgKGlucHV0LmZpbGVzKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY29tcG9uZW50LmZpbGVzKGtleSwgaW5wdXQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy5wZW5kaW5nRmlsZXNba2V5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuY29tcG9uZW50LmFjdGlvbihkaXJlY3RpdmUuYWN0aW9uLCBhY3Rpb25BcmdzLCBkZWJvdW5jZSk7XG4gICAgICAgICAgICBpZiAoZ2V0TW9kZWxEaXJlY3RpdmVGcm9tRWxlbWVudChldmVudC5jdXJyZW50VGFyZ2V0LCBmYWxzZSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnBlbmRpbmdBY3Rpb25UcmlnZ2VyTW9kZWxFbGVtZW50ID0gZXZlbnQuY3VycmVudFRhcmdldDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgICRyZW5kZXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbXBvbmVudC5yZW5kZXIoKTtcbiAgICB9XG4gICAgZW1pdChldmVudCkge1xuICAgICAgICB0aGlzLmdldEVtaXREaXJlY3RpdmVzKGV2ZW50KS5mb3JFYWNoKCh7IG5hbWUsIGRhdGEsIG5hbWVNYXRjaCB9KSA9PiB7XG4gICAgICAgICAgICB0aGlzLmNvbXBvbmVudC5lbWl0KG5hbWUsIGRhdGEsIG5hbWVNYXRjaCk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBlbWl0VXAoZXZlbnQpIHtcbiAgICAgICAgdGhpcy5nZXRFbWl0RGlyZWN0aXZlcyhldmVudCkuZm9yRWFjaCgoeyBuYW1lLCBkYXRhLCBuYW1lTWF0Y2ggfSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5jb21wb25lbnQuZW1pdFVwKG5hbWUsIGRhdGEsIG5hbWVNYXRjaCk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBlbWl0U2VsZihldmVudCkge1xuICAgICAgICB0aGlzLmdldEVtaXREaXJlY3RpdmVzKGV2ZW50KS5mb3JFYWNoKCh7IG5hbWUsIGRhdGEgfSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5jb21wb25lbnQuZW1pdFNlbGYobmFtZSwgZGF0YSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAkdXBkYXRlTW9kZWwobW9kZWwsIHZhbHVlLCBzaG91bGRSZW5kZXIgPSB0cnVlLCBkZWJvdW5jZSA9IHRydWUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29tcG9uZW50LnNldChtb2RlbCwgdmFsdWUsIHNob3VsZFJlbmRlciwgZGVib3VuY2UpO1xuICAgIH1cbiAgICBwcm9wc1VwZGF0ZWRGcm9tUGFyZW50VmFsdWVDaGFuZ2VkKCkge1xuICAgICAgICB0aGlzLmNvbXBvbmVudC5fdXBkYXRlRnJvbVBhcmVudFByb3BzKHRoaXMucHJvcHNVcGRhdGVkRnJvbVBhcmVudFZhbHVlKTtcbiAgICB9XG4gICAgZmluZ2VycHJpbnRWYWx1ZUNoYW5nZWQoKSB7XG4gICAgICAgIHRoaXMuY29tcG9uZW50LmZpbmdlcnByaW50ID0gdGhpcy5maW5nZXJwcmludFZhbHVlO1xuICAgIH1cbiAgICBnZXRFbWl0RGlyZWN0aXZlcyhldmVudCkge1xuICAgICAgICBjb25zdCBwYXJhbXMgPSBldmVudC5wYXJhbXM7XG4gICAgICAgIGlmICghcGFyYW1zLmV2ZW50KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIGV2ZW50IG5hbWUgcHJvdmlkZWQgb24gZWxlbWVudDogJHtnZXRFbGVtZW50QXNUYWdUZXh0KGV2ZW50LmN1cnJlbnRUYXJnZXQpfS4gRGlkIHlvdSBmb3JnZXQgdG8gYWRkIHRoZSBcImRhdGEtbGl2ZS1ldmVudC1wYXJhbVwiIGF0dHJpYnV0ZT9gKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBldmVudEluZm8gPSBwYXJhbXMuZXZlbnQ7XG4gICAgICAgIGNvbnN0IGV2ZW50QXJncyA9IHsgLi4ucGFyYW1zIH07XG4gICAgICAgIGRlbGV0ZSBldmVudEFyZ3MuZXZlbnQ7XG4gICAgICAgIGNvbnN0IGRpcmVjdGl2ZXMgPSBwYXJzZURpcmVjdGl2ZXMoZXZlbnRJbmZvKTtcbiAgICAgICAgY29uc3QgZW1pdHMgPSBbXTtcbiAgICAgICAgZGlyZWN0aXZlcy5mb3JFYWNoKChkaXJlY3RpdmUpID0+IHtcbiAgICAgICAgICAgIGxldCBuYW1lTWF0Y2ggPSBudWxsO1xuICAgICAgICAgICAgZGlyZWN0aXZlLm1vZGlmaWVycy5mb3JFYWNoKChtb2RpZmllcikgPT4ge1xuICAgICAgICAgICAgICAgIHN3aXRjaCAobW9kaWZpZXIubmFtZSkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlICduYW1lJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWVNYXRjaCA9IG1vZGlmaWVyLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gbW9kaWZpZXIgJHttb2RpZmllci5uYW1lfSBpbiBldmVudCBcIiR7ZXZlbnRJbmZvfVwiLmApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgZW1pdHMucHVzaCh7XG4gICAgICAgICAgICAgICAgbmFtZTogZGlyZWN0aXZlLmFjdGlvbixcbiAgICAgICAgICAgICAgICBkYXRhOiBldmVudEFyZ3MsXG4gICAgICAgICAgICAgICAgbmFtZU1hdGNoLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gZW1pdHM7XG4gICAgfVxuICAgIGNyZWF0ZUNvbXBvbmVudCgpIHtcbiAgICAgICAgY29uc3QgaWQgPSB0aGlzLmVsZW1lbnQuaWQgfHwgbnVsbDtcbiAgICAgICAgdGhpcy5jb21wb25lbnQgPSBuZXcgQ29tcG9uZW50KHRoaXMuZWxlbWVudCwgdGhpcy5uYW1lVmFsdWUsIHRoaXMucHJvcHNWYWx1ZSwgdGhpcy5saXN0ZW5lcnNWYWx1ZSwgaWQsIExpdmVDb250cm9sbGVyRGVmYXVsdC5iYWNrZW5kRmFjdG9yeSh0aGlzKSwgbmV3IFN0aW11bHVzRWxlbWVudERyaXZlcih0aGlzKSk7XG4gICAgICAgIHRoaXMucHJveGllZENvbXBvbmVudCA9IHByb3hpZnlDb21wb25lbnQodGhpcy5jb21wb25lbnQpO1xuICAgICAgICB0aGlzLmVsZW1lbnQuX19jb21wb25lbnQgPSB0aGlzLnByb3hpZWRDb21wb25lbnQ7XG4gICAgICAgIGlmICh0aGlzLmhhc0RlYm91bmNlVmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMuY29tcG9uZW50LmRlZmF1bHREZWJvdW5jZSA9IHRoaXMuZGVib3VuY2VWYWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwbHVnaW5zID0gW1xuICAgICAgICAgICAgbmV3IExvYWRpbmdQbHVnaW4oKSxcbiAgICAgICAgICAgIG5ldyBMYXp5UGx1Z2luKCksXG4gICAgICAgICAgICBuZXcgVmFsaWRhdGVkRmllbGRzUGx1Z2luKCksXG4gICAgICAgICAgICBuZXcgUGFnZVVubG9hZGluZ1BsdWdpbigpLFxuICAgICAgICAgICAgbmV3IFBvbGxpbmdQbHVnaW4oKSxcbiAgICAgICAgICAgIG5ldyBTZXRWYWx1ZU9udG9Nb2RlbEZpZWxkc1BsdWdpbigpLFxuICAgICAgICAgICAgbmV3IFF1ZXJ5U3RyaW5nUGx1Z2luKHRoaXMucXVlcnlNYXBwaW5nVmFsdWUpLFxuICAgICAgICAgICAgbmV3IENoaWxkQ29tcG9uZW50UGx1Z2luKHRoaXMuY29tcG9uZW50KSxcbiAgICAgICAgXTtcbiAgICAgICAgcGx1Z2lucy5mb3JFYWNoKChwbHVnaW4pID0+IHtcbiAgICAgICAgICAgIHRoaXMuY29tcG9uZW50LmFkZFBsdWdpbihwbHVnaW4pO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgY29ubmVjdENvbXBvbmVudCgpIHtcbiAgICAgICAgdGhpcy5jb21wb25lbnQuY29ubmVjdCgpO1xuICAgICAgICB0aGlzLm11dGF0aW9uT2JzZXJ2ZXIub2JzZXJ2ZSh0aGlzLmVsZW1lbnQsIHtcbiAgICAgICAgICAgIGF0dHJpYnV0ZXM6IHRydWUsXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmVsZW1lbnRFdmVudExpc3RlbmVycy5mb3JFYWNoKCh7IGV2ZW50LCBjYWxsYmFjayB9KSA9PiB7XG4gICAgICAgICAgICB0aGlzLmNvbXBvbmVudC5lbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoZXZlbnQsIGNhbGxiYWNrKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudCgnY29ubmVjdCcpO1xuICAgIH1cbiAgICBkaXNjb25uZWN0Q29tcG9uZW50KCkge1xuICAgICAgICB0aGlzLmNvbXBvbmVudC5kaXNjb25uZWN0KCk7XG4gICAgICAgIHRoaXMuZWxlbWVudEV2ZW50TGlzdGVuZXJzLmZvckVhY2goKHsgZXZlbnQsIGNhbGxiYWNrIH0pID0+IHtcbiAgICAgICAgICAgIHRoaXMuY29tcG9uZW50LmVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudCwgY2FsbGJhY2spO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KCdkaXNjb25uZWN0Jyk7XG4gICAgfVxuICAgIGhhbmRsZUlucHV0RXZlbnQoZXZlbnQpIHtcbiAgICAgICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0O1xuICAgICAgICBpZiAoIXRhcmdldCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudXBkYXRlTW9kZWxGcm9tRWxlbWVudEV2ZW50KHRhcmdldCwgJ2lucHV0Jyk7XG4gICAgfVxuICAgIGhhbmRsZUNoYW5nZUV2ZW50KGV2ZW50KSB7XG4gICAgICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldDtcbiAgICAgICAgaWYgKCF0YXJnZXQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnVwZGF0ZU1vZGVsRnJvbUVsZW1lbnRFdmVudCh0YXJnZXQsICdjaGFuZ2UnKTtcbiAgICB9XG4gICAgdXBkYXRlTW9kZWxGcm9tRWxlbWVudEV2ZW50KGVsZW1lbnQsIGV2ZW50TmFtZSkge1xuICAgICAgICBpZiAoIWVsZW1lbnRCZWxvbmdzVG9UaGlzQ29tcG9uZW50KGVsZW1lbnQsIHRoaXMuY29tcG9uZW50KSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICghKGVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQ291bGQgbm90IHVwZGF0ZSBtb2RlbCBmb3Igbm9uIEhUTUxFbGVtZW50Jyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MSW5wdXRFbGVtZW50ICYmIGVsZW1lbnQudHlwZSA9PT0gJ2ZpbGUnKSB7XG4gICAgICAgICAgICBjb25zdCBrZXkgPSBlbGVtZW50Lm5hbWU7XG4gICAgICAgICAgICBpZiAoZWxlbWVudC5maWxlcz8ubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wZW5kaW5nRmlsZXNba2V5XSA9IGVsZW1lbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh0aGlzLnBlbmRpbmdGaWxlc1trZXldKSB7XG4gICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMucGVuZGluZ0ZpbGVzW2tleV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbW9kZWxEaXJlY3RpdmUgPSBnZXRNb2RlbERpcmVjdGl2ZUZyb21FbGVtZW50KGVsZW1lbnQsIGZhbHNlKTtcbiAgICAgICAgaWYgKCFtb2RlbERpcmVjdGl2ZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG1vZGVsQmluZGluZyA9IGdldE1vZGVsQmluZGluZyhtb2RlbERpcmVjdGl2ZSk7XG4gICAgICAgIGlmICghbW9kZWxCaW5kaW5nLnRhcmdldEV2ZW50TmFtZSkge1xuICAgICAgICAgICAgbW9kZWxCaW5kaW5nLnRhcmdldEV2ZW50TmFtZSA9ICdpbnB1dCc7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMucGVuZGluZ0FjdGlvblRyaWdnZXJNb2RlbEVsZW1lbnQgPT09IGVsZW1lbnQpIHtcbiAgICAgICAgICAgIG1vZGVsQmluZGluZy5zaG91bGRSZW5kZXIgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZXZlbnROYW1lID09PSAnY2hhbmdlJyAmJiBtb2RlbEJpbmRpbmcudGFyZ2V0RXZlbnROYW1lID09PSAnaW5wdXQnKSB7XG4gICAgICAgICAgICBtb2RlbEJpbmRpbmcudGFyZ2V0RXZlbnROYW1lID0gJ2NoYW5nZSc7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGV2ZW50TmFtZSAmJiBtb2RlbEJpbmRpbmcudGFyZ2V0RXZlbnROYW1lICE9PSBldmVudE5hbWUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZmFsc2UgPT09IG1vZGVsQmluZGluZy5kZWJvdW5jZSkge1xuICAgICAgICAgICAgaWYgKG1vZGVsQmluZGluZy50YXJnZXRFdmVudE5hbWUgPT09ICdpbnB1dCcpIHtcbiAgICAgICAgICAgICAgICBtb2RlbEJpbmRpbmcuZGVib3VuY2UgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgbW9kZWxCaW5kaW5nLmRlYm91bmNlID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCBmaW5hbFZhbHVlID0gZ2V0VmFsdWVGcm9tRWxlbWVudChlbGVtZW50LCB0aGlzLmNvbXBvbmVudC52YWx1ZVN0b3JlKTtcbiAgICAgICAgdGhpcy5jb21wb25lbnQuc2V0KG1vZGVsQmluZGluZy5tb2RlbE5hbWUsIGZpbmFsVmFsdWUsIG1vZGVsQmluZGluZy5zaG91bGRSZW5kZXIsIG1vZGVsQmluZGluZy5kZWJvdW5jZSk7XG4gICAgfVxuICAgIGRpc3BhdGNoRXZlbnQobmFtZSwgZGV0YWlsID0ge30sIGNhbkJ1YmJsZSA9IHRydWUsIGNhbmNlbGFibGUgPSBmYWxzZSkge1xuICAgICAgICBkZXRhaWwuY29udHJvbGxlciA9IHRoaXM7XG4gICAgICAgIGRldGFpbC5jb21wb25lbnQgPSB0aGlzLnByb3hpZWRDb21wb25lbnQ7XG4gICAgICAgIHRoaXMuZGlzcGF0Y2gobmFtZSwgeyBkZXRhaWwsIHByZWZpeDogJ2xpdmUnLCBjYW5jZWxhYmxlLCBidWJibGVzOiBjYW5CdWJibGUgfSk7XG4gICAgfVxuICAgIG9uTXV0YXRpb25zKG11dGF0aW9ucykge1xuICAgICAgICBtdXRhdGlvbnMuZm9yRWFjaCgobXV0YXRpb24pID0+IHtcbiAgICAgICAgICAgIGlmIChtdXRhdGlvbi50eXBlID09PSAnYXR0cmlidXRlcycgJiZcbiAgICAgICAgICAgICAgICBtdXRhdGlvbi5hdHRyaWJ1dGVOYW1lID09PSAnaWQnICYmXG4gICAgICAgICAgICAgICAgdGhpcy5lbGVtZW50LmlkICE9PSB0aGlzLmNvbXBvbmVudC5pZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZGlzY29ubmVjdENvbXBvbmVudCgpO1xuICAgICAgICAgICAgICAgIHRoaXMuY3JlYXRlQ29tcG9uZW50KCk7XG4gICAgICAgICAgICAgICAgdGhpcy5jb25uZWN0Q29tcG9uZW50KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbn1cbkxpdmVDb250cm9sbGVyRGVmYXVsdC52YWx1ZXMgPSB7XG4gICAgbmFtZTogU3RyaW5nLFxuICAgIHVybDogU3RyaW5nLFxuICAgIHByb3BzOiB7IHR5cGU6IE9iamVjdCwgZGVmYXVsdDoge30gfSxcbiAgICBwcm9wc1VwZGF0ZWRGcm9tUGFyZW50OiB7IHR5cGU6IE9iamVjdCwgZGVmYXVsdDoge30gfSxcbiAgICBjc3JmOiBTdHJpbmcsXG4gICAgbGlzdGVuZXJzOiB7IHR5cGU6IEFycmF5LCBkZWZhdWx0OiBbXSB9LFxuICAgIGV2ZW50c1RvRW1pdDogeyB0eXBlOiBBcnJheSwgZGVmYXVsdDogW10gfSxcbiAgICBldmVudHNUb0Rpc3BhdGNoOiB7IHR5cGU6IEFycmF5LCBkZWZhdWx0OiBbXSB9LFxuICAgIGRlYm91bmNlOiB7IHR5cGU6IE51bWJlciwgZGVmYXVsdDogMTUwIH0sXG4gICAgZmluZ2VycHJpbnQ6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnJyB9LFxuICAgIHJlcXVlc3RNZXRob2Q6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAncG9zdCcgfSxcbiAgICBxdWVyeU1hcHBpbmc6IHsgdHlwZTogT2JqZWN0LCBkZWZhdWx0OiB7fSB9LFxufTtcbkxpdmVDb250cm9sbGVyRGVmYXVsdC5iYWNrZW5kRmFjdG9yeSA9IChjb250cm9sbGVyKSA9PiBuZXcgQmFja2VuZChjb250cm9sbGVyLnVybFZhbHVlLCBjb250cm9sbGVyLnJlcXVlc3RNZXRob2RWYWx1ZSwgY29udHJvbGxlci5jc3JmVmFsdWUpO1xuXG5leHBvcnQgeyBDb21wb25lbnQsIExpdmVDb250cm9sbGVyRGVmYXVsdCBhcyBkZWZhdWx0LCBnZXRDb21wb25lbnQgfTtcbiIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IHt9OyIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IHt9OyIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IHt9OyIsImltcG9ydCB7IENvbnRyb2xsZXIgfSBmcm9tICdAaG90d2lyZWQvc3RpbXVsdXMnO1xuaW1wb3J0IHsgcmVnaXN0ZXJhYmxlcywgQ2hhcnQgfSBmcm9tICdjaGFydC5qcyc7XG5cbmlmIChyZWdpc3RlcmFibGVzKSB7XG4gICAgQ2hhcnQucmVnaXN0ZXIoLi4ucmVnaXN0ZXJhYmxlcyk7XG59XG5sZXQgaXNDaGFydEluaXRpYWxpemVkID0gZmFsc2U7XG5jbGFzcyBkZWZhdWx0XzEgZXh0ZW5kcyBDb250cm9sbGVyIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy5jaGFydCA9IG51bGw7XG4gICAgfVxuICAgIGNvbm5lY3QoKSB7XG4gICAgICAgIGlmICghaXNDaGFydEluaXRpYWxpemVkKSB7XG4gICAgICAgICAgICBpc0NoYXJ0SW5pdGlhbGl6ZWQgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KCdpbml0Jywge1xuICAgICAgICAgICAgICAgIENoYXJ0LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCEodGhpcy5lbGVtZW50IGluc3RhbmNlb2YgSFRNTENhbnZhc0VsZW1lbnQpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgZWxlbWVudCcpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHBheWxvYWQgPSB0aGlzLnZpZXdWYWx1ZTtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkocGF5bG9hZC5vcHRpb25zKSAmJiAwID09PSBwYXlsb2FkLm9wdGlvbnMubGVuZ3RoKSB7XG4gICAgICAgICAgICBwYXlsb2FkLm9wdGlvbnMgPSB7fTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoJ3ByZS1jb25uZWN0Jywge1xuICAgICAgICAgICAgb3B0aW9uczogcGF5bG9hZC5vcHRpb25zLFxuICAgICAgICAgICAgY29uZmlnOiBwYXlsb2FkLFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgY2FudmFzQ29udGV4dCA9IHRoaXMuZWxlbWVudC5nZXRDb250ZXh0KCcyZCcpO1xuICAgICAgICBpZiAoIWNhbnZhc0NvbnRleHQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQ291bGQgbm90IGdldENvbnRleHQoKSBmcm9tIEVsZW1lbnQnKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNoYXJ0ID0gbmV3IENoYXJ0KGNhbnZhc0NvbnRleHQsIHBheWxvYWQpO1xuICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoJ2Nvbm5lY3QnLCB7IGNoYXJ0OiB0aGlzLmNoYXJ0IH0pO1xuICAgIH1cbiAgICB2aWV3VmFsdWVDaGFuZ2VkKCkge1xuICAgICAgICBpZiAodGhpcy5jaGFydCkge1xuICAgICAgICAgICAgY29uc3Qgdmlld1ZhbHVlID0geyBkYXRhOiB0aGlzLnZpZXdWYWx1ZS5kYXRhLCBvcHRpb25zOiB0aGlzLnZpZXdWYWx1ZS5vcHRpb25zIH07XG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2aWV3VmFsdWUub3B0aW9ucykgJiYgMCA9PT0gdmlld1ZhbHVlLm9wdGlvbnMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgdmlld1ZhbHVlLm9wdGlvbnMgPSB7fTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudCgndmlldy12YWx1ZS1jaGFuZ2UnLCB2aWV3VmFsdWUpO1xuICAgICAgICAgICAgdGhpcy5jaGFydC5kYXRhID0gdmlld1ZhbHVlLmRhdGE7XG4gICAgICAgICAgICB0aGlzLmNoYXJ0Lm9wdGlvbnMgPSB2aWV3VmFsdWUub3B0aW9ucztcbiAgICAgICAgICAgIHRoaXMuY2hhcnQudXBkYXRlKCk7XG4gICAgICAgICAgICBjb25zdCBwYXJlbnRFbGVtZW50ID0gdGhpcy5lbGVtZW50LnBhcmVudEVsZW1lbnQ7XG4gICAgICAgICAgICBpZiAocGFyZW50RWxlbWVudCAmJiB0aGlzLmNoYXJ0Lm9wdGlvbnMucmVzcG9uc2l2ZSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG9yaWdpbmFsV2lkdGggPSBwYXJlbnRFbGVtZW50LnN0eWxlLndpZHRoO1xuICAgICAgICAgICAgICAgIHBhcmVudEVsZW1lbnQuc3R5bGUud2lkdGggPSBgJHtwYXJlbnRFbGVtZW50Lm9mZnNldFdpZHRoICsgMX1weGA7XG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHBhcmVudEVsZW1lbnQuc3R5bGUud2lkdGggPSBvcmlnaW5hbFdpZHRoO1xuICAgICAgICAgICAgICAgIH0sIDApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGRpc3BhdGNoRXZlbnQobmFtZSwgcGF5bG9hZCkge1xuICAgICAgICB0aGlzLmRpc3BhdGNoKG5hbWUsIHsgZGV0YWlsOiBwYXlsb2FkLCBwcmVmaXg6ICdjaGFydGpzJyB9KTtcbiAgICB9XG59XG5kZWZhdWx0XzEudmFsdWVzID0ge1xuICAgIHZpZXc6IE9iamVjdCxcbn07XG5cbmV4cG9ydCB7IGRlZmF1bHRfMSBhcyBkZWZhdWx0IH07XG4iXSwibmFtZXMiOlsiQnM1VXRpbHMiLCJzdGFydFN0aW11bHVzQXBwIiwiYXBwIiwiZ2xvYmFsIiwiJCIsImpRdWVyeSIsIndpbmRvdyIsInJlcXVpcmUiLCJib290c3RyYXAiLCJiczVVdGlscyIsIlJhcGhhZWwiLCJhY2UiLCJEcm9wem9uZSIsImNhcmdvYmF5IiwiZ2VuZXJhbCIsInRvZ2dsZSIsInBzYyIsImFqYXhNb2RhbCIsIm1lZGlhQ2hvb3NlciIsIm9yZGVyIiwicHJvZHVjdCIsImluaXQiLCJkZWZpbmUiLCJib290c3RyYXBBcHAiLCJjbGljayIsImVsIiwiVG9hc3QiLCJzaG93IiwidHlwZSIsImljb24iLCJ0aXRsZSIsImh0bWwiLCJjb250ZW50IiwiZGF0YSIsImJ1dHRvbnMiLCJ0ZXh0IiwiaGFuZGxlciIsIm5hdmlnYXRvciIsImNsaXBib2FyZCIsIndyaXRlVGV4dCIsImRlbGF5IiwiZGlzbWlzc2libGUiLCJjb25zb2xlIiwibG9nIiwib24iLCJlIiwidGFyZ2V0IiwicGFyZW50IiwiYXR0ciIsImxvY2FsU3RvcmFnZSIsInNldEl0ZW0iLCJsYXN0VGFiIiwiZ2V0SXRlbSIsInRhYiIsImxhc3RUYWJEb2MiLCJmaW5kIiwiY2hhbmdlIiwiZ2V0SlNPTiIsIm11bHRpc2VsZWN0Iiwic3VibWl0QWxsTGVmdCIsInN1Ym1pdEFsbFJpZ2h0Iiwic2VhcmNoIiwibGVmdCIsInJpZ2h0IiwiZmlyZVNlYXJjaCIsInZhbHVlIiwibGVuZ3RoIiwic3VtbWVybm90ZSIsImhlaWdodCIsInRvb2xiYXIiLCJFbWl0dGVyIiwiY2FtZWxpemUiLCJjb250ZW50TG9hZGVkIiwiZGV0ZWN0VmVydGljYWxTcXVhc2giLCJkcmF3SW1hZ2VJT1NGaXgiLCJub29wIiwid2l0aG91dCIsIl9fc2xpY2UiLCJzbGljZSIsIl9faGFzUHJvcCIsImhhc093blByb3BlcnR5IiwiX19leHRlbmRzIiwiY2hpbGQiLCJrZXkiLCJjYWxsIiwiY3RvciIsImNvbnN0cnVjdG9yIiwicHJvdG90eXBlIiwiX19zdXBlcl9fIiwiYWRkRXZlbnRMaXN0ZW5lciIsImV2ZW50IiwiZm4iLCJfY2FsbGJhY2tzIiwicHVzaCIsImVtaXQiLCJhcmdzIiwiY2FsbGJhY2siLCJjYWxsYmFja3MiLCJfaSIsIl9sZW4iLCJhcmd1bWVudHMiLCJhcHBseSIsInJlbW92ZUxpc3RlbmVyIiwib2ZmIiwicmVtb3ZlQWxsTGlzdGVuZXJzIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsImkiLCJzcGxpY2UiLCJfc3VwZXIiLCJleHRlbmQiLCJyZXNvbHZlT3B0aW9uIiwiZXZlbnRzIiwiZGVmYXVsdE9wdGlvbnMiLCJ1cmwiLCJtZXRob2QiLCJ3aXRoQ3JlZGVudGlhbHMiLCJwYXJhbGxlbFVwbG9hZHMiLCJ1cGxvYWRNdWx0aXBsZSIsIm1heEZpbGVzaXplIiwicGFyYW1OYW1lIiwiY3JlYXRlSW1hZ2VUaHVtYm5haWxzIiwibWF4VGh1bWJuYWlsRmlsZXNpemUiLCJ0aHVtYm5haWxXaWR0aCIsInRodW1ibmFpbEhlaWdodCIsImZpbGVzaXplQmFzZSIsIm1heEZpbGVzIiwicGFyYW1zIiwiY2xpY2thYmxlIiwiaWdub3JlSGlkZGVuRmlsZXMiLCJhY2NlcHRlZEZpbGVzIiwiYWNjZXB0ZWRNaW1lVHlwZXMiLCJhdXRvUHJvY2Vzc1F1ZXVlIiwiYXV0b1F1ZXVlIiwiYWRkUmVtb3ZlTGlua3MiLCJwcmV2aWV3c0NvbnRhaW5lciIsImhpZGRlbklucHV0Q29udGFpbmVyIiwiY2FwdHVyZSIsImRpY3REZWZhdWx0TWVzc2FnZSIsImRpY3RGYWxsYmFja01lc3NhZ2UiLCJkaWN0RmFsbGJhY2tUZXh0IiwiZGljdEZpbGVUb29CaWciLCJkaWN0SW52YWxpZEZpbGVUeXBlIiwiZGljdFJlc3BvbnNlRXJyb3IiLCJkaWN0Q2FuY2VsVXBsb2FkIiwiZGljdENhbmNlbFVwbG9hZENvbmZpcm1hdGlvbiIsImRpY3RSZW1vdmVGaWxlIiwiZGljdFJlbW92ZUZpbGVDb25maXJtYXRpb24iLCJkaWN0TWF4RmlsZXNFeGNlZWRlZCIsImFjY2VwdCIsImZpbGUiLCJkb25lIiwiZm9yY2VGYWxsYmFjayIsImZhbGxiYWNrIiwibWVzc2FnZUVsZW1lbnQiLCJzcGFuIiwiX3JlZiIsImVsZW1lbnQiLCJjbGFzc05hbWUiLCJnZXRFbGVtZW50c0J5VGFnTmFtZSIsInRlc3QiLCJjcmVhdGVFbGVtZW50IiwiYXBwZW5kQ2hpbGQiLCJ0ZXh0Q29udGVudCIsIm9wdGlvbnMiLCJpbm5lclRleHQiLCJnZXRGYWxsYmFja0Zvcm0iLCJyZXNpemUiLCJpbmZvIiwic3JjUmF0aW8iLCJ0cmdSYXRpbyIsInNyY1giLCJzcmNZIiwic3JjV2lkdGgiLCJ3aWR0aCIsInNyY0hlaWdodCIsIm9wdFdpZHRoIiwib3B0SGVpZ2h0IiwidHJnSGVpZ2h0IiwidHJnV2lkdGgiLCJkcm9wIiwiY2xhc3NMaXN0IiwicmVtb3ZlIiwiZHJhZ3N0YXJ0IiwiZHJhZ2VuZCIsImRyYWdlbnRlciIsImFkZCIsImRyYWdvdmVyIiwiZHJhZ2xlYXZlIiwicGFzdGUiLCJyZXNldCIsImFkZGVkZmlsZSIsIm5vZGUiLCJyZW1vdmVGaWxlRXZlbnQiLCJyZW1vdmVMaW5rIiwiX2oiLCJfayIsIl9sZW4xIiwiX2xlbjIiLCJfcmVmMSIsIl9yZWYyIiwiX3Jlc3VsdHMiLCJwcmV2aWV3RWxlbWVudCIsInByZXZpZXdUZW1wbGF0ZSIsInRyaW0iLCJxdWVyeVNlbGVjdG9yQWxsIiwibmFtZSIsImlubmVySFRNTCIsImZpbGVzaXplIiwic2l6ZSIsIl9yZW1vdmVMaW5rIiwiX3RoaXMiLCJwcmV2ZW50RGVmYXVsdCIsInN0b3BQcm9wYWdhdGlvbiIsInN0YXR1cyIsIlVQTE9BRElORyIsImNvbmZpcm0iLCJyZW1vdmVGaWxlIiwicmVtb3ZlZGZpbGUiLCJwYXJlbnROb2RlIiwicmVtb3ZlQ2hpbGQiLCJfdXBkYXRlTWF4RmlsZXNSZWFjaGVkQ2xhc3MiLCJ0aHVtYm5haWwiLCJkYXRhVXJsIiwidGh1bWJuYWlsRWxlbWVudCIsImFsdCIsInNyYyIsInNldFRpbWVvdXQiLCJlcnJvciIsIm1lc3NhZ2UiLCJlcnJvcm11bHRpcGxlIiwicHJvY2Vzc2luZyIsInByb2Nlc3NpbmdtdWx0aXBsZSIsInVwbG9hZHByb2dyZXNzIiwicHJvZ3Jlc3MiLCJieXRlc1NlbnQiLCJub2RlTmFtZSIsInN0eWxlIiwidG90YWx1cGxvYWRwcm9ncmVzcyIsInNlbmRpbmciLCJzZW5kaW5nbXVsdGlwbGUiLCJzdWNjZXNzIiwic3VjY2Vzc211bHRpcGxlIiwiY2FuY2VsZWQiLCJjYW5jZWxlZG11bHRpcGxlIiwiY29tcGxldGUiLCJjb21wbGV0ZW11bHRpcGxlIiwibWF4ZmlsZXNleGNlZWRlZCIsIm1heGZpbGVzcmVhY2hlZCIsInF1ZXVlY29tcGxldGUiLCJhZGRlZGZpbGVzIiwib2JqZWN0Iiwib2JqZWN0cyIsInZhbCIsImVsZW1lbnRPcHRpb25zIiwidmVyc2lvbiIsInJlcGxhY2UiLCJjbGlja2FibGVFbGVtZW50cyIsImxpc3RlbmVycyIsImZpbGVzIiwiZG9jdW1lbnQiLCJxdWVyeVNlbGVjdG9yIiwibm9kZVR5cGUiLCJFcnJvciIsImRyb3B6b25lIiwiaW5zdGFuY2VzIiwib3B0aW9uc0ZvckVsZW1lbnQiLCJpc0Jyb3dzZXJTdXBwb3J0ZWQiLCJnZXRBdHRyaWJ1dGUiLCJ0b1VwcGVyQ2FzZSIsImdldEV4aXN0aW5nRmFsbGJhY2siLCJnZXRFbGVtZW50IiwiZ2V0RWxlbWVudHMiLCJnZXRBY2NlcHRlZEZpbGVzIiwiYWNjZXB0ZWQiLCJnZXRSZWplY3RlZEZpbGVzIiwiZ2V0RmlsZXNXaXRoU3RhdHVzIiwiZ2V0UXVldWVkRmlsZXMiLCJRVUVVRUQiLCJnZXRVcGxvYWRpbmdGaWxlcyIsImdldEFkZGVkRmlsZXMiLCJBRERFRCIsImdldEFjdGl2ZUZpbGVzIiwiZXZlbnROYW1lIiwibm9Qcm9wYWdhdGlvbiIsInNldHVwSGlkZGVuRmlsZUlucHV0IiwidGFnTmFtZSIsInNldEF0dHJpYnV0ZSIsImNvbnRhaW5zIiwiaGlkZGVuRmlsZUlucHV0IiwidmlzaWJpbGl0eSIsInBvc2l0aW9uIiwidG9wIiwiaWQiLCJhZGRGaWxlIiwiVVJMIiwid2Via2l0VVJMIiwidXBkYXRlVG90YWxVcGxvYWRQcm9ncmVzcyIsInJldHVyblZhbHVlIiwiZWZjdCIsImRhdGFUcmFuc2ZlciIsImVmZmVjdEFsbG93ZWQiLCJfZXJyb3IiLCJkcm9wRWZmZWN0IiwiZm9yRWFjaCIsImNsaWNrYWJsZUVsZW1lbnQiLCJldnQiLCJlbGVtZW50SW5zaWRlIiwiZW5hYmxlIiwiZGVzdHJveSIsImRpc2FibGUiLCJyZW1vdmVBbGxGaWxlcyIsImluZGV4T2YiLCJhY3RpdmVGaWxlcyIsInRvdGFsQnl0ZXMiLCJ0b3RhbEJ5dGVzU2VudCIsInRvdGFsVXBsb2FkUHJvZ3Jlc3MiLCJ1cGxvYWQiLCJ0b3RhbCIsIl9nZXRQYXJhbU5hbWUiLCJuIiwiZXhpc3RpbmdGYWxsYmFjayIsImZpZWxkcyIsImZpZWxkc1N0cmluZyIsImZvcm0iLCJnZXRGYWxsYmFjayIsImVsZW1lbnRzIiwic2V0dXBFdmVudExpc3RlbmVycyIsImVsZW1lbnRMaXN0ZW5lcnMiLCJsaXN0ZW5lciIsIl9yZXN1bHRzMSIsInJlbW92ZUV2ZW50TGlzdGVuZXJzIiwiY2FuY2VsVXBsb2FkIiwiY3V0b2ZmIiwic2VsZWN0ZWRTaXplIiwic2VsZWN0ZWRVbml0IiwidW5pdCIsInVuaXRzIiwiTWF0aCIsInBvdyIsInJvdW5kIiwiaXRlbXMiLCJ3ZWJraXRHZXRBc0VudHJ5IiwiX2FkZEZpbGVzRnJvbUl0ZW1zIiwiaGFuZGxlRmlsZXMiLCJjbGlwYm9hcmREYXRhIiwiZW50cnkiLCJpdGVtIiwiaXNGaWxlIiwiZ2V0QXNGaWxlIiwiaXNEaXJlY3RvcnkiLCJfYWRkRmlsZXNGcm9tRGlyZWN0b3J5Iiwia2luZCIsImRpcmVjdG9yeSIsInBhdGgiLCJkaXJSZWFkZXIiLCJlbnRyaWVzUmVhZGVyIiwiY3JlYXRlUmVhZGVyIiwiZW50cmllcyIsInN1YnN0cmluZyIsImZ1bGxQYXRoIiwicmVhZEVudHJpZXMiLCJpc1ZhbGlkRmlsZSIsIl9lbnF1ZXVlVGh1bWJuYWlsIiwiX2Vycm9yUHJvY2Vzc2luZyIsImVucXVldWVGaWxlIiwiZW5xdWV1ZUZpbGVzIiwicHJvY2Vzc1F1ZXVlIiwiX3RodW1ibmFpbFF1ZXVlIiwiX3Byb2Nlc3NpbmdUaHVtYm5haWwiLCJtYXRjaCIsIl9wcm9jZXNzVGh1bWJuYWlsUXVldWUiLCJjcmVhdGVUaHVtYm5haWwiLCJzaGlmdCIsImNhbmNlbElmTmVjZXNzYXJ5IiwiZmlsZVJlYWRlciIsIkZpbGVSZWFkZXIiLCJvbmxvYWQiLCJyZXN1bHQiLCJjcmVhdGVUaHVtYm5haWxGcm9tVXJsIiwicmVhZEFzRGF0YVVSTCIsImltYWdlVXJsIiwiY3Jvc3NPcmlnaW4iLCJpbWciLCJjYW52YXMiLCJjdHgiLCJyZXNpemVJbmZvIiwiX3JlZjMiLCJnZXRDb250ZXh0IiwidHJnWCIsInRyZ1kiLCJ0b0RhdGFVUkwiLCJvbmVycm9yIiwicHJvY2Vzc2luZ0xlbmd0aCIsInF1ZXVlZEZpbGVzIiwicHJvY2Vzc0ZpbGVzIiwicHJvY2Vzc0ZpbGUiLCJ1cGxvYWRGaWxlcyIsIl9nZXRGaWxlc1dpdGhYaHIiLCJ4aHIiLCJncm91cGVkRmlsZSIsImdyb3VwZWRGaWxlcyIsIkNBTkNFTEVEIiwiYWJvcnQiLCJvcHRpb24iLCJ1cGxvYWRGaWxlIiwiZm9ybURhdGEiLCJoYW5kbGVFcnJvciIsImhlYWRlck5hbWUiLCJoZWFkZXJWYWx1ZSIsImhlYWRlcnMiLCJpbnB1dCIsImlucHV0TmFtZSIsImlucHV0VHlwZSIsInByb2dyZXNzT2JqIiwicmVzcG9uc2UiLCJ1cGRhdGVQcm9ncmVzcyIsIl9sIiwiX2xlbjMiLCJfbSIsIl9yZWY0IiwiX3JlZjUiLCJYTUxIdHRwUmVxdWVzdCIsIm9wZW4iLCJhbGxGaWxlc0ZpbmlzaGVkIiwibG9hZGVkIiwicmVhZHlTdGF0ZSIsInJlc3BvbnNlVGV4dCIsImdldFJlc3BvbnNlSGVhZGVyIiwiSlNPTiIsInBhcnNlIiwiX2ZpbmlzaGVkIiwib25wcm9ncmVzcyIsInNldFJlcXVlc3RIZWFkZXIiLCJGb3JtRGF0YSIsImFwcGVuZCIsImhhc0F0dHJpYnV0ZSIsInNlbGVjdGVkIiwidG9Mb3dlckNhc2UiLCJjaGVja2VkIiwic3VibWl0UmVxdWVzdCIsInNlbmQiLCJTVUNDRVNTIiwiRVJST1IiLCJmb3JFbGVtZW50IiwiYXV0b0Rpc2NvdmVyIiwiZGlzY292ZXIiLCJjaGVja0VsZW1lbnRzIiwiZHJvcHpvbmVzIiwiYmxhY2tsaXN0ZWRCcm93c2VycyIsImNhcGFibGVCcm93c2VyIiwicmVnZXgiLCJGaWxlIiwiRmlsZUxpc3QiLCJCbG9iIiwidXNlckFnZW50IiwibGlzdCIsInJlamVjdGVkSXRlbSIsInN0ciIsImNoYXJBdCIsInN0cmluZyIsImRpdiIsImNoaWxkTm9kZXMiLCJjb250YWluZXIiLCJlbHMiLCJBcnJheSIsInF1ZXN0aW9uIiwicmVqZWN0ZWQiLCJiYXNlTWltZVR5cGUiLCJtaW1lVHlwZSIsInZhbGlkVHlwZSIsInNwbGl0IiwiZWFjaCIsIm1vZHVsZSIsImV4cG9ydHMiLCJBQ0NFUFRFRCIsIlBST0NFU1NJTkciLCJhbHBoYSIsImV5IiwiaWgiLCJpdyIsInB5IiwicmF0aW8iLCJzeSIsIm5hdHVyYWxXaWR0aCIsIm5hdHVyYWxIZWlnaHQiLCJkcmF3SW1hZ2UiLCJnZXRJbWFnZURhdGEiLCJzeCIsInN3Iiwic2giLCJkeCIsImR5IiwiZHciLCJkaCIsInZlcnRTcXVhc2hSYXRpbyIsIndpbiIsImRvYyIsInBvbGwiLCJwcmUiLCJyZW0iLCJyb290IiwiZG9jdW1lbnRFbGVtZW50IiwiZG9TY3JvbGwiLCJjcmVhdGVFdmVudE9iamVjdCIsImZyYW1lRWxlbWVudCIsIl9hdXRvRGlzY292ZXJGdW5jdGlvbiIsIk9yZGVyX0xpc3RfRGV0YWlsIiwib3JkZXJVdWlkIiwidXVpZCIsImJhc2tldEZpZWxkMSIsImN1c3RvbWVySW5mbyIsImJhc2tldEZpZWxkMiIsInBvcyIsInByaWNlIiwiYWxsTmV0IiwicmVPcmRlciIsInJlT3JkZXJPcmRlciIsInJlT3JkZXJQb3MiLCJnZXRfcG9zX2JnX2NvbG9yIiwiZ2V0X3Bvc19iZ19jb2xvcl9jbGFzcyIsIm9yaWdpbmFsUHJvZHVjdCIsIm5ySW50ZXJuIiwiZ2V0X3NwZWNpYWxfcHJvZHVjdF9vcHRpb25zIiwic3BlY2lhbFByb2R1Y3RUeXBlT2JqZWN0IiwiY291bnQiLCJJbnRsIiwiTnVtYmVyRm9ybWF0IiwiY3VycmVuY3kiLCJmb3JtYXQiLCJhbGxHcm9zcyIsImdldF9wb3Nfc3RhdHVzIiwiaW50ZXJuYWxOYW1lIiwiZ2V0X3Bvc19zdGF0dXNfbG9vcCIsIk9yZGVyX0xpc3RfRGV0YWlsX1NpbXBsZSIsIk9yZGVyX0xpc3RfUG9zX1N0YXR1cyIsInBvc1V1aWQiLCJjb2RlIiwiT3JkZXJfTGlzdF9Qb3NfQ2FsY19PcHRpb24iLCJlbG0iLCJsb2FkX3N0YXR1cyIsImJpbmRfYnV0dG9ucyIsInR5cCIsIm1hcCIsImpvaW4iLCJqd3RfdG9rZW4iLCJhamF4IiwiY29udGVudFR5cGUiLCJzdGF0dXNfb3JkZXIiLCJzdGF0dXNfcG9zIiwibG9hZF9kZXRhaWwiLCJzaW1wbGUiLCJzdHJpbmdpZnkiLCJidWlsZF9kZXRhaWxzIiwicG9zaXRpb25zIiwieCIsImxvYWRQbHVnaW5EZXRhaWxzIiwiYmluZF9zdGF0dXNfYnV0dG9ucyIsImZvdW5kIiwic3RhdCIsImNvbG9yIiwic2V0IiwiYnVpbGRUYWJsZSIsImVtcHR5IiwicHJvZHVjdHMiLCJpbmRleCIsImJpbmREZWxldGVCdXR0b25zIiwiZmFkZUluIiwicHJvZHVjdFV1aWQiLCJmYWRlT3V0IiwiaW5pdEFkZEJ1dHRvbiIsImxvYWRUYWJsZSIsImZhY3RvcnkiLCJhbWQiLCJwbHVnaW5zIiwiY29udGV4dCIsInNlbGYiLCJ1aSIsIm1lbW8iLCJidXR0b24iLCJjb250ZW50cyIsInRvb2x0aXAiLCJtZWRpYUJ1bmRsZUJyb3dzZXIiLCIkbm90ZSIsIiRtZWRpYSIsInJlbmRlciIsInQiLCJUZXRoZXIiLCJvIiwiVHlwZUVycm9yIiwiZ2V0Qm91bmRpbmdDbGllbnRSZWN0Iiwib3duZXJEb2N1bWVudCIsInIiLCJkZWZhdWx0VmlldyIsInMiLCJib3R0b20iLCJnZXRDb21wdXRlZFN0eWxlIiwiYSIsImYiLCJvdmVyZmxvdyIsImwiLCJvdmVyZmxvd1giLCJoIiwib3ZlcmZsb3dZIiwiYm9keSIsIkEiLCJQIiwic2Nyb2xsV2lkdGgiLCJzY3JvbGxIZWlnaHQiLCJjbGllbnRUb3AiLCJjbGllbnRMZWZ0IiwiY2xpZW50V2lkdGgiLCJjbGllbnRIZWlnaHQiLCJvZmZzZXRQYXJlbnQiLCJwb2ludGVyRXZlbnRzIiwib2Zmc2V0V2lkdGgiLCJ1IiwiUmVnRXhwIiwiYyIsImciLCJkIiwicCIsIlNWR0FuaW1hdGVkU3RyaW5nIiwiYmFzZVZhbCIsIm0iLCJ2IiwiT2JqZWN0IiwiY3JlYXRlIiwiZW51bWVyYWJsZSIsIndyaXRhYmxlIiwiY29uZmlndXJhYmxlIiwic2V0UHJvdG90eXBlT2YiLCJfX3Byb3RvX18iLCJ5IiwiYiIsInBlcmZvcm1hbmNlIiwibm93IiwiRGF0ZSIsInciLCJwYXJzZUZsb2F0IiwiQyIsIk8iLCJzY3JvbGxQYXJlbnRzIiwicGFnZVhPZmZzZXQiLCJwYWdlWU9mZnNldCIsImlubmVyV2lkdGgiLCJpbm5lckhlaWdodCIsInN1YnN0ciIsIkUiLCJkZWZpbmVQcm9wZXJ0eSIsIm1vZHVsZXMiLCJUIiwiUyIsIk0iLCJXIiwiXyIsInBvcCIsImsiLCJiaW5kaW5ncyIsIm9uY2UiLCJVdGlscyIsImdldEFjdHVhbEJvdW5kaW5nQ2xpZW50UmVjdCIsImdldFNjcm9sbFBhcmVudHMiLCJnZXRCb3VuZHMiLCJnZXRPZmZzZXRQYXJlbnQiLCJhZGRDbGFzcyIsInJlbW92ZUNsYXNzIiwiaGFzQ2xhc3MiLCJ1cGRhdGVDbGFzc2VzIiwiZGVmZXIiLCJmbHVzaCIsInVuaXF1ZUlkIiwiRXZlbnRlZCIsImdldFNjcm9sbEJhclNpemUiLCJyZW1vdmVVdGlsRWxlbWVudHMiLCJCIiwiU3ltYm9sIiwiaXRlcmF0b3IiLCJuZXh0IiwiaXNBcnJheSIsInoiLCJGdW5jdGlvbiIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsImdldCIsImdldFByb3RvdHlwZU9mIiwiaiIsIlkiLCJMIiwiRCIsIm1pbiIsImNsZWFyVGltZW91dCIsIlgiLCJjZW50ZXIiLCJGIiwibWlkZGxlIiwiSCIsIk4iLCJVIiwiViIsIlIiLCJxIiwiYmluZCIsImhpc3RvcnkiLCJzZXRPcHRpb25zIiwiaW5pdGlhbGl6ZSIsImNsYXNzZXMiLCJjbGFzc1ByZWZpeCIsIm9mZnNldCIsInRhcmdldE9mZnNldCIsInRhcmdldEF0dGFjaG1lbnQiLCJ0YXJnZXRNb2RpZmllciIsImpxdWVyeSIsImdldENsYXNzIiwiYWRkVGFyZ2V0Q2xhc3NlcyIsImF0dGFjaG1lbnQiLCJlbmFibGVkIiwiYm9yZGVyVG9wV2lkdGgiLCJib3JkZXJCb3R0b21XaWR0aCIsImJvcmRlckxlZnRXaWR0aCIsIm1heCIsInNjcm9sbFRvcCIsIl9jYWNoZSIsIl9hZGRBdHRhY2hDbGFzc2VzIiwiY2xlYXJDYWNoZSIsInVwZGF0ZUF0dGFjaENsYXNzZXMiLCJjYWNoZSIsImxhc3RTaXplIiwiZ2V0VGFyZ2V0Qm91bmRzIiwidGFyZ2V0UG9zIiwiZWxlbWVudFBvcyIsIm1hbnVhbE9mZnNldCIsIm1hbnVhbFRhcmdldE9mZnNldCIsInNjcm9sbGJhclNpemUiLCJwYWdlIiwidmlld3BvcnQiLCJwYXJlbnRFbGVtZW50Iiwib3B0aW1pemF0aW9ucyIsIm1vdmVFbGVtZW50Iiwic2Nyb2xsTGVmdCIsIm1vdmUiLCJ1bnNoaWZ0IiwiZ3B1IiwiSSIsImNvbnN0cmFpbnRzIiwib3V0T2ZCb3VuZHNDbGFzcyIsInBpbm5lZENsYXNzIiwidG8iLCJwaW4iLCJ0cmlnZ2VyIiwiaW5pdE1vZGFscyIsIiRtb2RhbCIsIiRidG4iLCJyZWxhdGVkVGFyZ2V0IiwibGluayIsInJlc2V0QWpheE1vZGFscyIsImRlYm91bmNlIiwiZWFzZUluT3V0UXVhZCIsImFuaW1hdGUiLCJyZXF1ZXN0QW5pbWF0aW9uRnJhbWUiLCJvZmZzZXRIZWlnaHQiLCJ1cmxDaG9vc2VyIiwiaW5pdERlbEJ0biIsIiR0aGlzIiwibGlua2VkSUQiLCIkd2lkZ2V0IiwiJGlucHV0Iiwic2x1ZyIsInJlcGxhY2VVcmwiLCJjbG9zZXN0IiwiaXRlbVVybCIsIml0ZW1JZCIsInJlcGxhY2VkVXJsIiwidGh1bWJQYXRoIiwiY2tlIiwiaXRlbVRpdGxlIiwiaXRlbVRodW1iUGF0aCIsImlzTWVkaWFDaG9vc2VyIiwic2F2ZU1lZGlhQ2hvb3Nlck1vZGFsIiwic2F2ZVVybENob29zZXJNb2RhbCIsIiRwYXJlbnRNb2RhbCIsInBhcmVudE1vZGFsSWQiLCJtb2RhbCIsImNsb3NlIiwibGlua2VkSW5wdXRJZCIsImZ1bmNOdW0iLCJnZXRVcmxQYXJhbSIsIm9wZW5lciIsIkNLRURJVE9SIiwidG9vbHMiLCJjYWxsRnVuY3Rpb24iLCIkbWVkaWFDaG9vc2VyIiwiJHByZXZpZXdJbWciLCIkcHJldmlld1RpdGxlIiwiJHBhcmVudCIsInByZXBlbmQiLCJyZVBhcmFtIiwibG9jYXRpb24iLCJDb250cm9sbGVyIiwiVG9tU2VsZWN0IiwiX19jbGFzc1ByaXZhdGVGaWVsZEdldCIsInJlY2VpdmVyIiwic3RhdGUiLCJoYXMiLCJfZGVmYXVsdF8xX2luc3RhbmNlcyIsIl9kZWZhdWx0XzFfZ2V0Q29tbW9uQ29uZmlnIiwiX2RlZmF1bHRfMV9jcmVhdGVBdXRvY29tcGxldGUiLCJfZGVmYXVsdF8xX2NyZWF0ZUF1dG9jb21wbGV0ZVdpdGhIdG1sQ29udGVudHMiLCJfZGVmYXVsdF8xX2NyZWF0ZUF1dG9jb21wbGV0ZVdpdGhSZW1vdGVEYXRhIiwiX2RlZmF1bHRfMV9zdHJpcFRhZ3MiLCJfZGVmYXVsdF8xX21lcmdlT2JqZWN0cyIsIl9kZWZhdWx0XzFfY3JlYXRlVG9tU2VsZWN0IiwiZGVmYXVsdF8xIiwiaXNPYnNlcnZpbmciLCJoYXNMb2FkZWRDaG9pY2VzUHJldmlvdXNseSIsIm9yaWdpbmFsT3B0aW9ucyIsIm11dGF0aW9uT2JzZXJ2ZXIiLCJNdXRhdGlvbk9ic2VydmVyIiwibXV0YXRpb25zIiwib25NdXRhdGlvbnMiLCJzZWxlY3RFbGVtZW50IiwiY3JlYXRlT3B0aW9uc0RhdGFTdHJ1Y3R1cmUiLCJpbml0aWFsaXplVG9tU2VsZWN0IiwidXJsVmFsdWUiLCJ0b21TZWxlY3QiLCJoYXNNaW5DaGFyYWN0ZXJzVmFsdWUiLCJtaW5DaGFyYWN0ZXJzVmFsdWUiLCJvcHRpb25zQXNIdG1sVmFsdWUiLCJzdGFydE11dGF0aW9uT2JzZXJ2ZXIiLCJzdG9wTXV0YXRpb25PYnNlcnZlciIsImN1cnJlbnRTZWxlY3RlZFZhbHVlcyIsIm11bHRpcGxlIiwiZnJvbSIsImZpbHRlciIsImluY2x1ZGVzIiwiSFRNTFNlbGVjdEVsZW1lbnQiLCJIVE1MSW5wdXRFbGVtZW50IiwicGF5bG9hZCIsImRpc3BhdGNoIiwiZGV0YWlsIiwicHJlZml4IiwiaGFzUHJlbG9hZFZhbHVlIiwicHJlbG9hZFZhbHVlIiwiZGlzcGF0Y2hFdmVudCIsImN1cnJlbnRIdG1sIiwiY3VycmVudFZhbHVlIiwiZ2V0VmFsdWUiLCJzZXRWYWx1ZSIsImlzRGlzYWJsZWQiLCJvYnNlcnZlIiwiY2hpbGRMaXN0Iiwic3VidHJlZSIsImF0dHJpYnV0ZXMiLCJjaGFyYWN0ZXJEYXRhIiwiYXR0cmlidXRlT2xkVmFsdWUiLCJkaXNjb25uZWN0IiwiY2hhbmdlRGlzYWJsZWRTdGF0ZSIsInJlcXVpcmVSZXNldCIsIm11dGF0aW9uIiwiYXR0cmlidXRlTmFtZSIsImlzTm93TXVsdGlwbGUiLCJ3YXNNdWx0aXBsZSIsIm9sZFZhbHVlIiwibmV3T3B0aW9ucyIsImFyZU9wdGlvbnNFcXVpdmFsZW50IiwicmVzZXRUb21TZWxlY3QiLCJjaGFuZ2VUb21TZWxlY3REaXNhYmxlZFN0YXRlIiwiZm9ybUVsZW1lbnQiLCJkaXNhYmxlZCIsIm9wdGdyb3VwIiwiZ3JvdXAiLCJsYWJlbCIsImZpbHRlcmVkT3JpZ2luYWxPcHRpb25zIiwiZmlsdGVyZWROZXdPcHRpb25zIiwib3JpZ2luYWxQbGFjZWhvbGRlck9wdGlvbiIsIm5ld1BsYWNlaG9sZGVyT3B0aW9uIiwibm9ybWFsaXplT3B0aW9uIiwib3JpZ2luYWxPcHRpb25zU2V0IiwiU2V0IiwibmV3T3B0aW9uc1NldCIsImV2ZXJ5IiwiV2Vha1NldCIsImlzTXVsdGlwbGUiLCJjbGVhcl9idXR0b24iLCJyZW1vdmVfYnV0dG9uIiwidmlydHVhbF9zY3JvbGwiLCJub19yZXN1bHRzIiwibm9SZXN1bHRzRm91bmRUZXh0VmFsdWUiLCJjb25maWciLCJvbkl0ZW1BZGQiLCJzZXRUZXh0Ym94VmFsdWUiLCJjbG9zZUFmdGVyU2VsZWN0Iiwic2hvdWxkTG9hZCIsInRvbVNlbGVjdE9wdGlvbnNWYWx1ZSIsIm1heE9wdGlvbnMiLCJnZXRNYXhPcHRpb25zIiwic2NvcmUiLCJzY29yaW5nRnVuY3Rpb24iLCJnZXRTY29yZUZ1bmN0aW9uIiwiYXV0b2NvbXBsZXRlRW5kcG9pbnRVcmwiLCJtaW5DaGFyYWN0ZXJMZW5ndGgiLCJmaXJzdFVybCIsInF1ZXJ5Iiwic2VwYXJhdG9yIiwiZW5jb2RlVVJJQ29tcG9uZW50IiwibG9hZCIsImdldFVybCIsImZldGNoIiwidGhlbiIsImpzb24iLCJzZXROZXh0VXJsIiwibmV4dF9wYWdlIiwicmVzdWx0cyIsIm9wdGdyb3VwcyIsIm9wdGdyb3VwRmllbGQiLCJsb2FkaW5nX21vcmUiLCJsb2FkaW5nTW9yZVRleHRWYWx1ZSIsIm5vX21vcmVfcmVzdWx0cyIsIm5vTW9yZVJlc3VsdHNUZXh0VmFsdWUiLCJwcmVsb2FkIiwib2JqZWN0MSIsIm9iamVjdDIiLCJwcmVDb25uZWN0UGF5bG9hZCIsImNvbm5lY3RQYXlsb2FkIiwidmFsdWVzIiwiU3RyaW5nIiwib3B0aW9uc0FzSHRtbCIsIkJvb2xlYW4iLCJsb2FkaW5nTW9yZVRleHQiLCJub1Jlc3VsdHNGb3VuZFRleHQiLCJub01vcmVSZXN1bHRzVGV4dCIsIm1pbkNoYXJhY3RlcnMiLCJOdW1iZXIiLCJ0b21TZWxlY3RPcHRpb25zIiwiZGVmYXVsdCIsInBhcnNlRGlyZWN0aXZlcyIsImRpcmVjdGl2ZXMiLCJjdXJyZW50QWN0aW9uTmFtZSIsImN1cnJlbnRBcmd1bWVudFZhbHVlIiwiY3VycmVudEFyZ3VtZW50cyIsImN1cnJlbnRNb2RpZmllcnMiLCJnZXRMYXN0QWN0aW9uTmFtZSIsImFjdGlvbiIsInB1c2hJbnN0cnVjdGlvbiIsIm1vZGlmaWVycyIsImdldFN0cmluZyIsInB1c2hBcmd1bWVudCIsInB1c2hNb2RpZmllciIsImNoYXIiLCJjb21iaW5lU3BhY2VkQXJyYXkiLCJwYXJ0cyIsImZpbmFsUGFydHMiLCJwYXJ0IiwidHJpbUFsbCIsIm5vcm1hbGl6ZU1vZGVsTmFtZSIsIm1vZGVsIiwiZ2V0RWxlbWVudEFzVGFnVGV4dCIsIm91dGVySFRNTCIsImNvbXBvbmVudE1hcEJ5RWxlbWVudCIsIldlYWtNYXAiLCJjb21wb25lbnRNYXBCeUNvbXBvbmVudCIsIk1hcCIsInJlZ2lzdGVyQ29tcG9uZW50IiwiY29tcG9uZW50IiwidW5yZWdpc3RlckNvbXBvbmVudCIsImdldENvbXBvbmVudCIsIlByb21pc2UiLCJyZXNvbHZlIiwicmVqZWN0IiwibWF4Q291bnQiLCJpbnRlcnZhbCIsInNldEludGVydmFsIiwiY2xlYXJJbnRlcnZhbCIsImZpbmRDb21wb25lbnRzIiwiY3VycmVudENvbXBvbmVudCIsIm9ubHlQYXJlbnRzIiwib25seU1hdGNoTmFtZSIsImNvbXBvbmVudHMiLCJjb21wb25lbnROYW1lIiwiZmluZENoaWxkcmVuIiwiY2hpbGRyZW4iLCJmb3VuZENoaWxkQ29tcG9uZW50IiwiY2hpbGRDb21wb25lbnROYW1lIiwiY2hpbGRDb21wb25lbnQiLCJmaW5kUGFyZW50IiwiZ2V0VmFsdWVGcm9tRWxlbWVudCIsInZhbHVlU3RvcmUiLCJtb2RlbE5hbWVEYXRhIiwiZ2V0TW9kZWxEaXJlY3RpdmVGcm9tRWxlbWVudCIsIm1vZGVsVmFsdWUiLCJnZXRNdWx0aXBsZUNoZWNrYm94VmFsdWUiLCJpbnB1dFZhbHVlIiwic2VsZWN0ZWRPcHRpb25zIiwiZGF0YXNldCIsInNldFZhbHVlT25FbGVtZW50IiwidmFsdWVGb3VuZCIsImFycmF5V3JhcHBlZFZhbHVlIiwiY29uY2F0IiwidW5kZWZpbmVkIiwiZ2V0QWxsTW9kZWxEaXJlY3RpdmVGcm9tRWxlbWVudHMiLCJkaXJlY3RpdmUiLCJ0aHJvd09uTWlzc2luZyIsImRhdGFNb2RlbERpcmVjdGl2ZXMiLCJlbGVtZW50QmVsb25nc1RvVGhpc0NvbXBvbmVudCIsImNsb25lSFRNTEVsZW1lbnQiLCJuZXdFbGVtZW50IiwiY2xvbmVOb2RlIiwiSFRNTEVsZW1lbnQiLCJodG1sVG9FbGVtZW50IiwidGVtcGxhdGUiLCJjaGlsZEVsZW1lbnRDb3VudCIsImZpcnN0RWxlbWVudENoaWxkIiwiY3VycmVudFZhbHVlcyIsImZpbmFsVmFsdWVzIiwiZ2V0RGVlcERhdGEiLCJwcm9wZXJ0eVBhdGgiLCJwYXJzZURlZXBEYXRhIiwiY3VycmVudExldmVsRGF0YSIsImZpbmFsS2V5IiwiZmluYWxEYXRhIiwiVmFsdWVTdG9yZSIsInByb3BzIiwiZGlydHlQcm9wcyIsInBlbmRpbmdQcm9wcyIsInVwZGF0ZWRQcm9wc0Zyb21QYXJlbnQiLCJub3JtYWxpemVkTmFtZSIsImNoYW5nZWQiLCJJZGlvbW9ycGgiLCJFTVBUWV9TRVQiLCJkZWZhdWx0cyIsIm1vcnBoU3R5bGUiLCJiZWZvcmVOb2RlQWRkZWQiLCJub09wIiwiYWZ0ZXJOb2RlQWRkZWQiLCJiZWZvcmVOb2RlTW9ycGhlZCIsImFmdGVyTm9kZU1vcnBoZWQiLCJiZWZvcmVOb2RlUmVtb3ZlZCIsImFmdGVyTm9kZVJlbW92ZWQiLCJiZWZvcmVBdHRyaWJ1dGVVcGRhdGVkIiwiaGVhZCIsInNob3VsZFByZXNlcnZlIiwiZWx0Iiwic2hvdWxkUmVBcHBlbmQiLCJzaG91bGRSZW1vdmUiLCJhZnRlckhlYWRNb3JwaGVkIiwibW9ycGgiLCJvbGROb2RlIiwibmV3Q29udGVudCIsIkRvY3VtZW50IiwicGFyc2VDb250ZW50Iiwibm9ybWFsaXplZENvbnRlbnQiLCJub3JtYWxpemVDb250ZW50IiwiY3JlYXRlTW9ycGhDb250ZXh0IiwibW9ycGhOb3JtYWxpemVkQ29udGVudCIsIm5vcm1hbGl6ZWROZXdDb250ZW50IiwiYmxvY2siLCJvbGRIZWFkIiwibmV3SGVhZCIsInByb21pc2VzIiwiaGFuZGxlSGVhZEVsZW1lbnQiLCJhbGwiLCJhc3NpZ24iLCJpZ25vcmUiLCJtb3JwaENoaWxkcmVuIiwiYmVzdE1hdGNoIiwiZmluZEJlc3ROb2RlTWF0Y2giLCJwcmV2aW91c1NpYmxpbmciLCJuZXh0U2libGluZyIsIm1vcnBoZWROb2RlIiwibW9ycGhPbGROb2RlVG8iLCJpbnNlcnRTaWJsaW5ncyIsImlnbm9yZVZhbHVlT2ZBY3RpdmVFbGVtZW50IiwicG9zc2libGVBY3RpdmVFbGVtZW50IiwiaWdub3JlQWN0aXZlVmFsdWUiLCJhY3RpdmVFbGVtZW50IiwiaWdub3JlQWN0aXZlIiwiaXNTb2Z0TWF0Y2giLCJyZXBsYWNlQ2hpbGQiLCJIVE1MSGVhZEVsZW1lbnQiLCJzeW5jTm9kZUZyb20iLCJuZXdQYXJlbnQiLCJvbGRQYXJlbnQiLCJuZXh0TmV3Q2hpbGQiLCJmaXJzdENoaWxkIiwiaW5zZXJ0aW9uUG9pbnQiLCJuZXdDaGlsZCIsInJlbW92ZUlkc0Zyb21Db25zaWRlcmF0aW9uIiwiaXNJZFNldE1hdGNoIiwiaWRTZXRNYXRjaCIsImZpbmRJZFNldE1hdGNoIiwicmVtb3ZlTm9kZXNCZXR3ZWVuIiwic29mdE1hdGNoIiwiZmluZFNvZnRNYXRjaCIsImluc2VydEJlZm9yZSIsInRlbXBOb2RlIiwicmVtb3ZlTm9kZSIsImlnbm9yZUF0dHJpYnV0ZSIsInVwZGF0ZVR5cGUiLCJmcm9tQXR0cmlidXRlcyIsInRvQXR0cmlidXRlcyIsImZyb21BdHRyaWJ1dGUiLCJ0b0F0dHJpYnV0ZSIsInJlbW92ZUF0dHJpYnV0ZSIsIm5vZGVWYWx1ZSIsInN5bmNJbnB1dFZhbHVlIiwic3luY0Jvb2xlYW5BdHRyaWJ1dGUiLCJpZ25vcmVVcGRhdGUiLCJmcm9tVmFsdWUiLCJ0b1ZhbHVlIiwiSFRNTE9wdGlvbkVsZW1lbnQiLCJIVE1MVGV4dEFyZWFFbGVtZW50IiwibmV3SGVhZFRhZyIsImN1cnJlbnRIZWFkIiwiYWRkZWQiLCJyZW1vdmVkIiwicHJlc2VydmVkIiwibm9kZXNUb0FwcGVuZCIsImhlYWRNZXJnZVN0eWxlIiwic3JjVG9OZXdIZWFkTm9kZXMiLCJuZXdIZWFkQ2hpbGQiLCJjdXJyZW50SGVhZEVsdCIsImluTmV3Q29udGVudCIsImlzUmVBcHBlbmRlZCIsImlzUHJlc2VydmVkIiwibmV3Tm9kZSIsIm5ld0VsdCIsImNyZWF0ZVJhbmdlIiwiY3JlYXRlQ29udGV4dHVhbEZyYWdtZW50IiwiaHJlZiIsInByb21pc2UiLCJfcmVzb2x2ZSIsInJlbW92ZWRFbGVtZW50Iiwia2VwdCIsIm1lcmdlRGVmYXVsdHMiLCJmaW5hbENvbmZpZyIsImlkTWFwIiwiY3JlYXRlSWRNYXAiLCJkZWFkSWRzIiwibm9kZTEiLCJub2RlMiIsImdldElkSW50ZXJzZWN0aW9uQ291bnQiLCJzdGFydEluY2x1c2l2ZSIsImVuZEV4Y2x1c2l2ZSIsIm5ld0NoaWxkUG90ZW50aWFsSWRDb3VudCIsInBvdGVudGlhbE1hdGNoIiwib3RoZXJNYXRjaENvdW50IiwicG90ZW50aWFsU29mdE1hdGNoIiwic2libGluZ1NvZnRNYXRjaENvdW50IiwicGFyc2VyIiwiRE9NUGFyc2VyIiwiY29udGVudFdpdGhTdmdzUmVtb3ZlZCIsInBhcnNlRnJvbVN0cmluZyIsImdlbmVyYXRlZEJ5SWRpb21vcnBoIiwiaHRtbEVsZW1lbnQiLCJyZXNwb25zZURvYyIsImR1bW15UGFyZW50IiwiTm9kZSIsInN0YWNrIiwiY3VycmVudEVsZW1lbnQiLCJiZXN0RWxlbWVudCIsIm5ld1Njb3JlIiwic2NvcmVFbGVtZW50IiwiaXNJZEluQ29uc2lkZXJhdGlvbiIsImlkSXNXaXRoaW5Ob2RlIiwidGFyZ2V0Tm9kZSIsImlkU2V0Iiwic291cmNlU2V0IiwibWF0Y2hDb3VudCIsInBvcHVsYXRlSWRNYXBGb3JOb2RlIiwibm9kZVBhcmVudCIsImlkRWxlbWVudHMiLCJjdXJyZW50Iiwib2xkQ29udGVudCIsIm5vcm1hbGl6ZUF0dHJpYnV0ZXNGb3JDb21wYXJpc29uIiwiaXNGaWxlSW5wdXQiLCJzeW5jQXR0cmlidXRlcyIsImZyb21FbCIsInRvRWwiLCJleGVjdXRlTW9ycGhkb20iLCJyb290RnJvbUVsZW1lbnQiLCJyb290VG9FbGVtZW50IiwibW9kaWZpZWRGaWVsZEVsZW1lbnRzIiwiZ2V0RWxlbWVudFZhbHVlIiwiZXh0ZXJuYWxNdXRhdGlvblRyYWNrZXIiLCJvcmlnaW5hbEVsZW1lbnRJZHNUb1N3YXBBZnRlciIsIm9yaWdpbmFsRWxlbWVudHNUb1ByZXNlcnZlIiwibWFya0VsZW1lbnRBc05lZWRpbmdQb3N0TW9ycGhTd2FwIiwicmVwbGFjZVdpdGhDbG9uZSIsIm9sZEVsZW1lbnQiLCJjbG9uZWRPbGRFbGVtZW50IiwicmVwbGFjZVdpdGgiLCJFbGVtZW50IiwiY2xvbmVkRnJvbUVsIiwiX194IiwiQWxwaW5lIiwid2FzRWxlbWVudEFkZGVkIiwiaW5zZXJ0QWRqYWNlbnRFbGVtZW50IiwiZWxlbWVudENoYW5nZXMiLCJnZXRDaGFuZ2VkRWxlbWVudCIsImFwcGx5VG9FbGVtZW50IiwiaXNFcXVhbE5vZGUiLCJub3JtYWxpemVkRnJvbUVsIiwibm9ybWFsaXplZFRvRWwiLCJvcmlnaW5hbEVsZW1lbnQiLCJVbnN5bmNlZElucHV0c1RyYWNrZXIiLCJtb2RlbEVsZW1lbnRSZXNvbHZlciIsImVsZW1lbnRFdmVudExpc3RlbmVycyIsImhhbmRsZUlucHV0RXZlbnQiLCJ1bnN5bmNlZElucHV0cyIsIlVuc3luY2VkSW5wdXRDb250YWluZXIiLCJtb2RlbE5hbWUiLCJtYXJrTW9kZWxBc1N5bmNlZCIsInVwZGF0ZU1vZGVsRnJvbUVsZW1lbnQiLCJnZXRNb2RlbE5hbWUiLCJhbGxVbnN5bmNlZElucHV0cyIsImdldFVuc3luY2VkTW9kZWxOYW1lcyIsInJlc2V0VW5zeW5jZWRGaWVsZHMiLCJ1bnN5bmNlZE5vbk1vZGVsRmllbGRzIiwidW5zeW5jZWRNb2RlbE5hbWVzIiwidW5zeW5jZWRNb2RlbEZpZWxkcyIsIkhvb2tNYW5hZ2VyIiwiaG9va3MiLCJob29rTmFtZSIsIkJhY2tlbmRSZXNwb25zZSIsIkNoYW5naW5nSXRlbXNUcmFja2VyIiwiY2hhbmdlZEl0ZW1zIiwicmVtb3ZlZEl0ZW1zIiwiaXRlbU5hbWUiLCJuZXdWYWx1ZSIsInByZXZpb3VzVmFsdWUiLCJyZW1vdmVkUmVjb3JkIiwib3JpZ2luYWwiLCJvcmlnaW5hbFJlY29yZCIsInRydWVPcmlnaW5hbFZhbHVlIiwia2V5cyIsIkVsZW1lbnRDaGFuZ2VzIiwiYWRkZWRDbGFzc2VzIiwicmVtb3ZlZENsYXNzZXMiLCJzdHlsZUNoYW5nZXMiLCJhdHRyaWJ1dGVDaGFuZ2VzIiwic3R5bGVOYW1lIiwib3JpZ2luYWxWYWx1ZSIsInJlbW92ZUl0ZW0iLCJnZXRDaGFuZ2VkSXRlbXMiLCJnZXRSZW1vdmVkSXRlbXMiLCJzZXRQcm9wZXJ0eSIsInJlbW92ZVByb3BlcnR5IiwiaXNFbXB0eSIsIkV4dGVybmFsTXV0YXRpb25UcmFja2VyIiwic2hvdWxkVHJhY2tDaGFuZ2VDYWxsYmFjayIsImNoYW5nZWRFbGVtZW50cyIsImNoYW5nZWRFbGVtZW50c0NvdW50IiwiYWRkZWRFbGVtZW50cyIsInJlbW92ZWRFbGVtZW50cyIsImlzU3RhcnRlZCIsInRha2VSZWNvcmRzIiwiaGFuZGxlZEF0dHJpYnV0ZU11dGF0aW9ucyIsImlzRWxlbWVudEFkZGVkQnlUcmFuc2xhdGlvbiIsImlzQ2hhbmdlSW5BZGRlZEVsZW1lbnQiLCJhZGRlZEVsZW1lbnQiLCJoYW5kbGVDaGlsZExpc3RNdXRhdGlvbiIsImhhbmRsZUF0dHJpYnV0ZU11dGF0aW9uIiwiYWRkZWROb2RlcyIsInJlbW92ZWROb2RlcyIsImNoYW5nZWRFbGVtZW50IiwiaGFuZGxlQ2xhc3NBdHRyaWJ1dGVNdXRhdGlvbiIsImhhbmRsZVN0eWxlQXR0cmlidXRlTXV0YXRpb24iLCJoYW5kbGVHZW5lcmljQXR0cmlidXRlTXV0YXRpb24iLCJwcmV2aW91c1ZhbHVlcyIsIm5ld1ZhbHVlcyIsImFkZGVkVmFsdWVzIiwicmVtb3ZlZFZhbHVlcyIsInByZXZpb3VzU3R5bGVzIiwiZXh0cmFjdFN0eWxlcyIsIm5ld1N0eWxlcyIsImFkZGVkT3JDaGFuZ2VkU3R5bGVzIiwicmVtb3ZlZFN0eWxlcyIsImFkZFN0eWxlIiwicmVtb3ZlU3R5bGUiLCJhZGRBdHRyaWJ1dGUiLCJzdHlsZXMiLCJzdHlsZU9iamVjdCIsInByb3BlcnR5IiwiQ29tcG9uZW50IiwiYmFja2VuZCIsImVsZW1lbnREcml2ZXIiLCJmaW5nZXJwcmludCIsImRlZmF1bHREZWJvdW5jZSIsImJhY2tlbmRSZXF1ZXN0IiwicGVuZGluZ0FjdGlvbnMiLCJwZW5kaW5nRmlsZXMiLCJpc1JlcXVlc3RQZW5kaW5nIiwicmVxdWVzdERlYm91bmNlVGltZW91dCIsInVuc3luY2VkSW5wdXRzVHJhY2tlciIsInJlc2V0UHJvbWlzZSIsInN0YXJ0IiwicGx1Z2luIiwiYXR0YWNoVG9Db21wb25lbnQiLCJ0cmlnZ2VySG9vayIsImFjdGl2YXRlIiwiY2xlYXJSZXF1ZXN0RGVib3VuY2VUaW1lb3V0IiwiZGVhY3RpdmF0ZSIsInN0b3AiLCJyZWdpc3RlciIsInVucmVnaXN0ZXIiLCJyZVJlbmRlciIsIm5leHRSZXF1ZXN0UHJvbWlzZSIsImlzQ2hhbmdlZCIsImRlYm91bmNlZFN0YXJ0UmVxdWVzdCIsInRyeVN0YXJ0aW5nUmVxdWVzdCIsImdldFVuc3luY2VkTW9kZWxzIiwib25seU1hdGNoaW5nQ29tcG9uZW50c05hbWVkIiwicGVyZm9ybUVtaXQiLCJkb0VtaXQiLCJlbWl0VXAiLCJtYXRjaGluZ05hbWUiLCJhY3Rpb25zIiwiVHVyYm8iLCJwZXJmb3JtUmVxdWVzdCIsInRoaXNQcm9taXNlUmVzb2x2ZSIsIm5leHRSZXF1ZXN0UHJvbWlzZVJlc29sdmUiLCJmaWxlc1RvU2VuZCIsInJlcXVlc3RDb25maWciLCJnZXRPcmlnaW5hbFByb3BzIiwidXBkYXRlZCIsImdldERpcnR5UHJvcHMiLCJnZXRVcGRhdGVkUHJvcHNGcm9tUGFyZW50IiwibWFrZVJlcXVlc3QiLCJmbHVzaERpcnR5UHJvcHNUb1BlbmRpbmciLCJiYWNrZW5kUmVzcG9uc2UiLCJnZXRCb2R5IiwiY29udHJvbHMiLCJkaXNwbGF5RXJyb3IiLCJwdXNoUGVuZGluZ1Byb3BzQmFja1RvRGlydHkiLCJyZW5kZXJFcnJvciIsInByb2Nlc3NSZXJlbmRlciIsInNob3VsZFJlbmRlciIsImlzVHVyYm9FbmFibGVkIiwidmlzaXQiLCJtb2RpZmllZE1vZGVsVmFsdWVzIiwibWF0Y2hlcyIsImhhbmRsZVBlbmRpbmdDaGFuZ2VzIiwiZ2V0VW5zeW5jZWRJbnB1dHMiLCJuZXdQcm9wcyIsImdldENvbXBvbmVudFByb3BzIiwicmVpbml0aWFsaXplQWxsUHJvcHMiLCJldmVudHNUb0VtaXQiLCJnZXRFdmVudHNUb0VtaXQiLCJicm93c2VyRXZlbnRzVG9EaXNwYXRjaCIsImdldEJyb3dzZXJFdmVudHNUb0Rpc3BhdGNoIiwiZW1pdFNlbGYiLCJDdXN0b21FdmVudCIsImJ1YmJsZXMiLCJjYWxjdWxhdGVEZWJvdW5jZSIsImdldEVsZW1lbnRCeUlkIiwicGFkZGluZyIsImJhY2tncm91bmRDb2xvciIsInpJbmRleCIsImRpc3BsYXkiLCJmbGV4RGlyZWN0aW9uIiwiaWZyYW1lIiwiYm9yZGVyUmFkaXVzIiwiZmxleEdyb3ciLCJjb250ZW50V2luZG93Iiwid3JpdGUiLCJjbG9zZU1vZGFsIiwiZm9jdXMiLCJzdG9yZU5ld1Byb3BzRnJvbVBhcmVudCIsInByb3hpZnlDb21wb25lbnQiLCJQcm94eSIsInByb3AiLCJjYWxsYWJsZSIsIlJlZmxlY3QiLCJnZXREYXRhIiwiQmFja2VuZFJlcXVlc3QiLCJ1cGRhdGVNb2RlbHMiLCJpc1Jlc29sdmVkIiwidXBkYXRlZE1vZGVscyIsInRhcmdldGVkQWN0aW9ucyIsInRhcmdldGVkTW9kZWxzIiwiUmVxdWVzdEJ1aWxkZXIiLCJjc3JmVG9rZW4iLCJzcGxpdFVybCIsInF1ZXJ5U3RyaW5nIiwiVVJMU2VhcmNoUGFyYW1zIiwiZmV0Y2hPcHRpb25zIiwiQWNjZXB0IiwidG90YWxGaWxlcyIsInJlZHVjZSIsImhhc0ZpbmdlcnByaW50cyIsIndpbGxEYXRhRml0SW5VcmwiLCJyZXF1ZXN0RGF0YSIsInByb3BzRnJvbVBhcmVudCIsInBhcmFtc1N0cmluZyIsInRvU3RyaW5nIiwicHJvcHNKc29uIiwidXBkYXRlZEpzb24iLCJjaGlsZHJlbkpzb24iLCJwcm9wc0Zyb21QYXJlbnRKc29uIiwidXJsRW5jb2RlZEpzb25EYXRhIiwiQmFja2VuZCIsInJlcXVlc3RCdWlsZGVyIiwiYnVpbGRSZXF1ZXN0IiwiYmFja2VuZEFjdGlvbiIsIlN0aW11bHVzRWxlbWVudERyaXZlciIsImNvbnRyb2xsZXIiLCJtb2RlbERpcmVjdGl2ZSIsInByb3BzVmFsdWUiLCJldmVudHNUb0VtaXRWYWx1ZSIsImV2ZW50c1RvRGlzcGF0Y2hWYWx1ZSIsIkxvYWRpbmdQbHVnaW4iLCJyZXF1ZXN0Iiwic3RhcnRMb2FkaW5nIiwiZmluaXNoTG9hZGluZyIsInRhcmdldEVsZW1lbnQiLCJoYW5kbGVMb2FkaW5nVG9nZ2xlIiwiaXNMb2FkaW5nIiwiYWRkQXR0cmlidXRlcyIsInJlbW92ZUF0dHJpYnV0ZXMiLCJnZXRMb2FkaW5nRGlyZWN0aXZlcyIsImhhbmRsZUxvYWRpbmdEaXJlY3RpdmUiLCJmaW5hbEFjdGlvbiIsInBhcnNlTG9hZGluZ0FjdGlvbiIsInZhbGlkTW9kaWZpZXJzIiwibW9kaWZpZXIiLCJwYXJzZUludCIsImNvbnRhaW5zT25lT2ZBY3Rpb25zIiwiYXJlQW55TW9kZWxzVXBkYXRlZCIsImxvYWRpbmdEaXJlY3RpdmUiLCJzaG93RWxlbWVudCIsImhpZGVFbGVtZW50IiwibG9hZGluZ0RpcmVjdGl2ZXMiLCJtYXRjaGluZ0VsZW1lbnRzIiwiU1ZHRWxlbWVudCIsImxvYWRpbmciLCJhdHRyaWJ1dGUiLCJWYWxpZGF0ZWRGaWVsZHNQbHVnaW4iLCJoYW5kbGVNb2RlbFNldCIsInZhbGlkYXRlZEZpZWxkcyIsIlBhZ2VVbmxvYWRpbmdQbHVnaW4iLCJpc0Nvbm5lY3RlZCIsIlBvbGxpbmdEaXJlY3RvciIsImlzUG9sbGluZ0FjdGl2ZSIsInBvbGxpbmdJbnRlcnZhbHMiLCJhY3Rpb25OYW1lIiwiZHVyYXRpb24iLCJwb2xscyIsImluaXRpYXRlUG9sbCIsInN0b3BBbGxQb2xsaW5nIiwic3RhcnRBbGxQb2xsaW5nIiwidGltZXIiLCJQb2xsaW5nUGx1Z2luIiwicG9sbGluZ0RpcmVjdG9yIiwiaW5pdGlhbGl6ZVBvbGxpbmciLCJhZGRQb2xsIiwiY2xlYXJQb2xsaW5nIiwicmF3UG9sbENvbmZpZyIsIndhcm4iLCJTZXRWYWx1ZU9udG9Nb2RlbEZpZWxkc1BsdWdpbiIsInN5bmNocm9uaXplVmFsdWVPZk1vZGVsRmllbGRzIiwiSFRNTEZvcm1FbGVtZW50IiwiZ2V0TW9kZWxCaW5kaW5nIiwidGFyZ2V0RXZlbnROYW1lIiwiaW5uZXJNb2RlbE5hbWUiLCJpc1ZhbHVlRW1wdHkiLCJ0b1F1ZXJ5U3RyaW5nIiwiYnVpbGRRdWVyeVN0cmluZ0VudHJpZXMiLCJiYXNlS2V5IiwiaUtleSIsImlWYWx1ZSIsImZyb21RdWVyeVN0cmluZyIsImluc2VydERvdE5vdGF0ZWRWYWx1ZUludG9EYXRhIiwiZmlyc3QiLCJzZWNvbmQiLCJyZXN0IiwiaXNOYU4iLCJkZWNvZGVVUklDb21wb25lbnQiLCJkb3ROb3RhdGVkS2V5IiwiVXJsVXRpbHMiLCJzZXREYXRhIiwiSGlzdG9yeVN0cmF0ZWd5IiwicmVwbGFjZVN0YXRlIiwiUXVlcnlTdHJpbmdQbHVnaW4iLCJtYXBwaW5nIiwidXJsVXRpbHMiLCJjdXJyZW50VXJsIiwiQ2hpbGRDb21wb25lbnRQbHVnaW4iLCJwYXJlbnRNb2RlbEJpbmRpbmdzIiwibW9kZWxEaXJlY3RpdmVzIiwiZ2V0Q2hpbGRyZW5GaW5nZXJwcmludHMiLCJub3RpZnlQYXJlbnRNb2RlbENoYW5nZSIsImZpbmdlcnByaW50cyIsImdldENoaWxkcmVuIiwidGFnIiwicGFyZW50Q29tcG9uZW50IiwibW9kZWxCaW5kaW5nIiwiY2hpbGRNb2RlbE5hbWUiLCJMYXp5UGx1Z2luIiwiaW50ZXJzZWN0aW9uT2JzZXJ2ZXIiLCJnZXROYW1lZEl0ZW0iLCJnZXRPYnNlcnZlciIsInVub2JzZXJ2ZSIsIkludGVyc2VjdGlvbk9ic2VydmVyIiwib2JzZXJ2ZXIiLCJpc0ludGVyc2VjdGluZyIsIkxpdmVDb250cm9sbGVyRGVmYXVsdCIsInBlbmRpbmdBY3Rpb25UcmlnZ2VyTW9kZWxFbGVtZW50IiwiaGFuZGxlQ2hhbmdlRXZlbnQiLCJjcmVhdGVDb21wb25lbnQiLCJjb25uZWN0Q29tcG9uZW50IiwiZGlzY29ubmVjdENvbXBvbmVudCIsImN1cnJlbnRUYXJnZXQiLCJ1cGRhdGVNb2RlbEZyb21FbGVtZW50RXZlbnQiLCJyYXdBY3Rpb24iLCJhY3Rpb25BcmdzIiwiZ2V0RW1pdERpcmVjdGl2ZXMiLCJuYW1lTWF0Y2giLCJfdXBkYXRlRnJvbVBhcmVudFByb3BzIiwicHJvcHNVcGRhdGVkRnJvbVBhcmVudFZhbHVlIiwiZmluZ2VycHJpbnRWYWx1ZSIsImV2ZW50SW5mbyIsImV2ZW50QXJncyIsImVtaXRzIiwibmFtZVZhbHVlIiwibGlzdGVuZXJzVmFsdWUiLCJiYWNrZW5kRmFjdG9yeSIsInByb3hpZWRDb21wb25lbnQiLCJfX2NvbXBvbmVudCIsImhhc0RlYm91bmNlVmFsdWUiLCJkZWJvdW5jZVZhbHVlIiwicXVlcnlNYXBwaW5nVmFsdWUiLCJhZGRQbHVnaW4iLCJjb25uZWN0IiwiZmluYWxWYWx1ZSIsImNhbkJ1YmJsZSIsImNhbmNlbGFibGUiLCJwcm9wc1VwZGF0ZWRGcm9tUGFyZW50IiwiY3NyZiIsImV2ZW50c1RvRGlzcGF0Y2giLCJyZXF1ZXN0TWV0aG9kIiwicXVlcnlNYXBwaW5nIiwicmVxdWVzdE1ldGhvZFZhbHVlIiwiY3NyZlZhbHVlIiwicmVnaXN0ZXJhYmxlcyIsIkNoYXJ0IiwiaXNDaGFydEluaXRpYWxpemVkIiwiY2hhcnQiLCJIVE1MQ2FudmFzRWxlbWVudCIsInZpZXdWYWx1ZSIsImNhbnZhc0NvbnRleHQiLCJ1cGRhdGUiLCJyZXNwb25zaXZlIiwib3JpZ2luYWxXaWR0aCIsInZpZXciXSwic291cmNlUm9vdCI6IiJ9 \ No newline at end of file diff --git a/src/new/web/build/backend/login.css b/src/new/web/build/backend/login.css index 78eafca48..2f95f9970 100644 --- a/src/new/web/build/backend/login.css +++ b/src/new/web/build/backend/login.css @@ -850,6 +850,9 @@ select { .float-right { float: right; } +.m-2 { + margin: 0.5rem; +} .mx-auto { margin-left: auto; margin-right: auto; @@ -1095,4 +1098,4 @@ select { } -/*# sourceMappingURL=data:application/json;charset=utf-8;base64,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O0FBQW1CO0FBQW5CO0VBQUE7QUFBbUI7QUFBbkI7RUFBQTtBQUFtQjtBQUFuQjtFQUFBO0FBQW1CO0FBQW5CO0VBQUE7QUFBbUI7QUFBbkI7RUFBQTtBQUFtQjtBQUFuQjtFQUFBO0FBQW1CO0FBQW5CO0VBQUE7QUFBbUI7QUFBbkI7RUFBQTtBQUFtQjtBQUFuQjtFQUFBO0FBQW1CO0FBQW5CO0VBQUE7QUFBbUI7QUFBbkI7RUFBQTtBQUFtQjtBQUFuQjtFQUFBO0FBQW1CO0FBQW5CO0VBQUEsdUJBQW1CO0VBQW5CLDREQUFtQjtFQUFuQjtBQUFtQjtBQUFuQjtFQUFBO0FBQW1CO0FBQW5CO0VBQUE7QUFBbUI7QUFBbkI7RUFBQTtBQUFtQjtBQUFuQjtFQUFBO0FBQW1CO0FBQW5CO0VBQUE7QUFBbUI7QUFBbkI7RUFBQSxzQkFBbUI7RUFBbkI7QUFBbUI7QUFBbkI7RUFBQSxzQkFBbUI7RUFBbkI7QUFBbUI7QUFBbkI7RUFBQSxrQkFBbUI7RUFBbkI7QUFBbUI7QUFBbkI7RUFBQSxrQkFBbUI7RUFBbkI7QUFBbUI7QUFBbkI7RUFBQTtBQUFtQjtBQUFuQjtFQUFBO0FBQW1CO0FBQW5CO0VBQUE7QUFBbUI7QUFBbkI7RUFBQTtBQUFtQjtBQUFuQjtFQUFBO0FBQW1CO0FBQW5CO0VBQUEsb0JBQW1CO0VBQW5CO0FBQW1CO0FBQW5CO0VBQUEsa0JBQW1CO0VBQW5CO0FBQW1CO0FBQW5CO0VBQUEsaUJBQW1CO0VBQW5CO0FBQW1CO0FBQW5CO0VBQUE7QUFBbUI7QUFBbkI7RUFBQTtBQUFtQjtBQUFuQjtFQUFBLG1CQUFtQjtFQUFuQjtBQUFtQjtBQUFuQjtFQUFBO0FBQW1CO0FBQW5CO0VBQUE7QUFBbUI7QUFBbkI7RUFBQTtBQUFtQjtBQUFuQjtFQUFBLG9CQUFtQjtFQUFuQjtBQUFtQjtBQUFuQjtFQUFBLG9CQUFtQjtFQUFuQjtBQUFtQjtBQUFuQjtFQUFBLG9CQUFtQjtFQUFuQjtBQUFtQjtBQUFuQjtFQUFBO0FBQW1CO0FBQW5CO0VBQUEsMEVBQW1CO0VBQW5CLDhGQUFtQjtFQUFuQjtBQUFtQjtBQUFuQjtFQUFBLGdEQUFtQjtFQUFuQiw2REFBbUI7RUFBbkI7QUFBbUI7QUFBbkI7RUFBQSwwQ0FBbUI7RUFBbkIsdURBQW1CO0VBQW5CO0FBQW1CO0FBQW5CO0VBQUEsOEJBQW1CO0VBQW5CO0FBQW1CO0FBQW5CO0VBQUEsb0JBQW1CO0VBQW5CO0FBQW1CO0FBQW5CO0VBQUEseUJBQW1CO0VBQW5CO0FBQW1CO0FBQW5CO0VBQUE7QUFBbUI7QUFBbkI7RUFBQSw4QkFBbUI7RUFBbkIsK1FBQW1CO0VBQW5CO0FBQW1CO0FBQW5CO0VBQUEsZ0tBQW1CO0VBQW5CLHdKQUFtQjtFQUFuQixpTEFBbUI7RUFBbkIsd0RBQW1CO0VBQW5CO0FBQW1CO0FBQW5CO0VBQUEsK0ZBQW1CO0VBQW5CLHdEQUFtQjtFQUFuQjtBQUFtQjs7QUFGbkI7RUFBQSxzQkFxQkE7RUFyQkE7QUFxQkE7O0FBckJBO0VBQUEsMkdBcUJBO0VBckJBLHlHQXFCQTtFQXJCQTtBQXFCQTs7QUFyQkE7RUFBQTtBQXFCQTs7QUFyQkE7RUFBQSxvQkFxQkE7RUFyQkE7QUFxQkEiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9hc3NldHMvYmFja2VuZC9sb2dpbi9sb2dpbi5jc3MiXSwic291cmNlc0NvbnRlbnQiOlsiQHRhaWx3aW5kIGJhc2U7XG5AdGFpbHdpbmQgY29tcG9uZW50cztcbkB0YWlsd2luZCB1dGlsaXRpZXM7XG5cbkBsYXllciBjb21wb25lbnRzIHtcbiAgICAucHNjLWxvZ2luLXBhZ2Uge1xuICAgICAgICBAYXBwbHkgcmVsYXRpdmUgYmctbm8tcmVwZWF0O1xuICAgICAgICBiYWNrZ3JvdW5kLWltYWdlOiByYWRpYWwtZ3JhZGllbnQoXG4gICAgICAgICAgICAgICAgY2lyY2xlIGF0IHRvcCxcbiAgICAgICAgICAgICAgICB0aGVtZSgnY29sb3JzLnBzYy41MCcpLFxuICAgICAgICAgICAgICAgIHRoZW1lKCdjb2xvcnMud2hpdGUnKSA1MCVcbiAgICAgICAgKTtcbiAgICB9XG4gICAgLnBzYy1sb2dpbi1wYWdlIGZvcm06OmJlZm9yZSB7XG4gICAgICAgIEBhcHBseSBhYnNvbHV0ZSBpbnNldC14LTAgbXgtYXV0byBoLXB4IHctMi8zIGJnLWdyYWRpZW50LXRvLXIgZnJvbS1ncmF5LTIwMCB2aWEtcHNjLTMwMCB0by1ncmF5LTIwMDtcbiAgICAgICAgY29udGVudDogJyc7XG4gICAgICAgIHotaW5kZXg6IDE7XG4gICAgICAgIHRvcDogLTFweDtcbiAgICB9XG5cbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==*/ \ No newline at end of file +/*# sourceMappingURL=data:application/json;charset=utf-8;base64,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O0FBQW1CO0FBQW5CO0VBQUE7QUFBbUI7QUFBbkI7RUFBQTtBQUFtQjtBQUFuQjtFQUFBO0FBQW1CO0FBQW5CO0VBQUE7QUFBbUI7QUFBbkI7RUFBQTtBQUFtQjtBQUFuQjtFQUFBO0FBQW1CO0FBQW5CO0VBQUE7QUFBbUI7QUFBbkI7RUFBQTtBQUFtQjtBQUFuQjtFQUFBO0FBQW1CO0FBQW5CO0VBQUE7QUFBbUI7QUFBbkI7RUFBQTtBQUFtQjtBQUFuQjtFQUFBO0FBQW1CO0FBQW5CO0VBQUE7QUFBbUI7QUFBbkI7RUFBQSx1QkFBbUI7RUFBbkIsNERBQW1CO0VBQW5CO0FBQW1CO0FBQW5CO0VBQUE7QUFBbUI7QUFBbkI7RUFBQTtBQUFtQjtBQUFuQjtFQUFBO0FBQW1CO0FBQW5CO0VBQUE7QUFBbUI7QUFBbkI7RUFBQTtBQUFtQjtBQUFuQjtFQUFBLHNCQUFtQjtFQUFuQjtBQUFtQjtBQUFuQjtFQUFBLHNCQUFtQjtFQUFuQjtBQUFtQjtBQUFuQjtFQUFBLGtCQUFtQjtFQUFuQjtBQUFtQjtBQUFuQjtFQUFBLGtCQUFtQjtFQUFuQjtBQUFtQjtBQUFuQjtFQUFBO0FBQW1CO0FBQW5CO0VBQUE7QUFBbUI7QUFBbkI7RUFBQTtBQUFtQjtBQUFuQjtFQUFBO0FBQW1CO0FBQW5CO0VBQUE7QUFBbUI7QUFBbkI7RUFBQSxvQkFBbUI7RUFBbkI7QUFBbUI7QUFBbkI7RUFBQSxrQkFBbUI7RUFBbkI7QUFBbUI7QUFBbkI7RUFBQSxpQkFBbUI7RUFBbkI7QUFBbUI7QUFBbkI7RUFBQTtBQUFtQjtBQUFuQjtFQUFBO0FBQW1CO0FBQW5CO0VBQUEsbUJBQW1CO0VBQW5CO0FBQW1CO0FBQW5CO0VBQUE7QUFBbUI7QUFBbkI7RUFBQTtBQUFtQjtBQUFuQjtFQUFBO0FBQW1CO0FBQW5CO0VBQUEsb0JBQW1CO0VBQW5CO0FBQW1CO0FBQW5CO0VBQUEsb0JBQW1CO0VBQW5CO0FBQW1CO0FBQW5CO0VBQUEsb0JBQW1CO0VBQW5CO0FBQW1CO0FBQW5CO0VBQUE7QUFBbUI7QUFBbkI7RUFBQSwwRUFBbUI7RUFBbkIsOEZBQW1CO0VBQW5CO0FBQW1CO0FBQW5CO0VBQUEsZ0RBQW1CO0VBQW5CLDZEQUFtQjtFQUFuQjtBQUFtQjtBQUFuQjtFQUFBLDBDQUFtQjtFQUFuQix1REFBbUI7RUFBbkI7QUFBbUI7QUFBbkI7RUFBQSw4QkFBbUI7RUFBbkI7QUFBbUI7QUFBbkI7RUFBQSxvQkFBbUI7RUFBbkI7QUFBbUI7QUFBbkI7RUFBQSx5QkFBbUI7RUFBbkI7QUFBbUI7QUFBbkI7RUFBQTtBQUFtQjtBQUFuQjtFQUFBLDhCQUFtQjtFQUFuQiwrUUFBbUI7RUFBbkI7QUFBbUI7QUFBbkI7RUFBQSxnS0FBbUI7RUFBbkIsd0pBQW1CO0VBQW5CLGlMQUFtQjtFQUFuQix3REFBbUI7RUFBbkI7QUFBbUI7QUFBbkI7RUFBQSwrRkFBbUI7RUFBbkIsd0RBQW1CO0VBQW5CO0FBQW1COztBQUZuQjtFQUFBLHNCQXFCQTtFQXJCQTtBQXFCQTs7QUFyQkE7RUFBQSwyR0FxQkE7RUFyQkEseUdBcUJBO0VBckJBO0FBcUJBOztBQXJCQTtFQUFBO0FBcUJBOztBQXJCQTtFQUFBLG9CQXFCQTtFQXJCQTtBQXFCQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL2Fzc2V0cy9iYWNrZW5kL2xvZ2luL2xvZ2luLmNzcyJdLCJzb3VyY2VzQ29udGVudCI6WyJAdGFpbHdpbmQgYmFzZTtcbkB0YWlsd2luZCBjb21wb25lbnRzO1xuQHRhaWx3aW5kIHV0aWxpdGllcztcblxuQGxheWVyIGNvbXBvbmVudHMge1xuICAgIC5wc2MtbG9naW4tcGFnZSB7XG4gICAgICAgIEBhcHBseSByZWxhdGl2ZSBiZy1uby1yZXBlYXQ7XG4gICAgICAgIGJhY2tncm91bmQtaW1hZ2U6IHJhZGlhbC1ncmFkaWVudChcbiAgICAgICAgICAgICAgICBjaXJjbGUgYXQgdG9wLFxuICAgICAgICAgICAgICAgIHRoZW1lKCdjb2xvcnMucHNjLjUwJyksXG4gICAgICAgICAgICAgICAgdGhlbWUoJ2NvbG9ycy53aGl0ZScpIDUwJVxuICAgICAgICApO1xuICAgIH1cbiAgICAucHNjLWxvZ2luLXBhZ2UgZm9ybTo6YmVmb3JlIHtcbiAgICAgICAgQGFwcGx5IGFic29sdXRlIGluc2V0LXgtMCBteC1hdXRvIGgtcHggdy0yLzMgYmctZ3JhZGllbnQtdG8tciBmcm9tLWdyYXktMjAwIHZpYS1wc2MtMzAwIHRvLWdyYXktMjAwO1xuICAgICAgICBjb250ZW50OiAnJztcbiAgICAgICAgei1pbmRleDogMTtcbiAgICAgICAgdG9wOiAtMXB4O1xuICAgIH1cblxufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9*/ \ No newline at end of file diff --git a/src/new/web/build/backend/login.js b/src/new/web/build/backend/login.js index cd13fe4d0..4033fb5a1 100644 --- a/src/new/web/build/backend/login.js +++ b/src/new/web/build/backend/login.js @@ -5,12 +5,13 @@ /*!*********************************!*\ !*** ./assets/backend/login.ts ***! \*********************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { -__webpack_require__.r(__webpack_exports__); -/* harmony import */ var _login_login_css__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./login/login.css */ "./assets/backend/login/login.css"); +exports.__esModule = true; +__webpack_require__(/*! ./login/login.css */ "./assets/backend/login/login.css"); + /***/ }), /***/ "./assets/backend/login/login.css": @@ -31,4 +32,4 @@ __webpack_require__.r(__webpack_exports__); /******/ var __webpack_exports__ = (__webpack_exec__("./assets/backend/login.ts")); /******/ } ]); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFja2VuZC9sb2dpbi5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDQUEiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9hc3NldHMvYmFja2VuZC9sb2dpbi50cyIsIndlYnBhY2s6Ly8vLi9hc3NldHMvYmFja2VuZC9sb2dpbi9sb2dpbi5jc3M/MDZmMSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXCIuL2xvZ2luL2xvZ2luLmNzc1wiO1xuIiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQge307Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9 \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFja2VuZC9sb2dpbi5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBYTs7QUFDYkEsa0JBQWtCLEdBQUcsSUFBSTtBQUN6QkUsbUJBQU8sQ0FBQywyREFBbUIsQ0FBQzs7Ozs7Ozs7Ozs7QUNGNUIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9hc3NldHMvYmFja2VuZC9sb2dpbi50cyIsIndlYnBhY2s6Ly8vLi9hc3NldHMvYmFja2VuZC9sb2dpbi9sb2dpbi5jc3M/MDZmMSJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5yZXF1aXJlKFwiLi9sb2dpbi9sb2dpbi5jc3NcIik7XG4iLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCB7fTsiXSwibmFtZXMiOlsiZXhwb3J0cyIsIl9fZXNNb2R1bGUiLCJyZXF1aXJlIl0sInNvdXJjZVJvb3QiOiIifQ== \ No newline at end of file diff --git a/src/new/web/build/entrypoints.json b/src/new/web/build/entrypoints.json index 327eebd76..f261507ae 100644 --- a/src/new/web/build/entrypoints.json +++ b/src/new/web/build/entrypoints.json @@ -25,7 +25,7 @@ "js": [ "/apps/build/runtime.js", "/apps/build/vendors-node_modules_core-js_modules_es_array_concat_js-node_modules_core-js_modules_es_array-fb37e9.js", - "/apps/build/vendors-var_plugins_System_PSC_Invoice_Webpack_node_modules_ebay_nice-modal-react_lib_esm_ind-ced46e.js", + "/apps/build/vendors-var_plugins_System_PSC_Invoice_Webpack_node_modules_ebay_nice-modal-react_lib_esm_ind-73e7df.js", "/apps/build/plugins/system/psc/invoice.js" ], "css": [ diff --git a/src/new/web/build/manifest.json b/src/new/web/build/manifest.json index d83a6fa51..7a7dd4232 100755 --- a/src/new/web/build/manifest.json +++ b/src/new/web/build/manifest.json @@ -1,15 +1,15 @@ { - "/apps/backend/login.css": "/apps/build/backend/login.3c16c469.css", - "/apps/backend/login.js": "/apps/build/backend/login.13bc26d7.js", - "/apps/backend/dashboard.css": "/apps/build/backend/dashboard.1bdabc5b.css", - "/apps/backend/dashboard.js": "/apps/build/backend/dashboard.ac36556b.js", - "/apps/plugins/system/psc/invoice.css": "/apps/build/plugins/system/psc/invoice.19592370.css", - "/apps/plugins/system/psc/invoice.js": "/apps/build/plugins/system/psc/invoice.ee8e44d3.js", - "/apps/runtime.js": "/apps/build/runtime.18918ec8.js", - "/apps/560.268023de.js": "/apps/build/560.268023de.js", - "/apps/892.0a894e2a.js": "/apps/build/892.0a894e2a.js", - "/apps/72.e053f864.css": "/apps/build/72.e053f864.css", - "/apps/72.7a11b953.js": "/apps/build/72.7a11b953.js", + "/apps/backend/login.css": "/apps/build/backend/login.css", + "/apps/backend/login.js": "/apps/build/backend/login.js", + "/apps/backend/dashboard.css": "/apps/build/backend/dashboard.css", + "/apps/backend/dashboard.js": "/apps/build/backend/dashboard.js", + "/apps/plugins/system/psc/invoice.css": "/apps/build/plugins/system/psc/invoice.css", + "/apps/plugins/system/psc/invoice.js": "/apps/build/plugins/system/psc/invoice.js", + "/apps/runtime.js": "/apps/build/runtime.js", + "/apps/vendors-node_modules_core-js_modules_es_array_concat_js-node_modules_core-js_modules_es_array-fb37e9.js": "/apps/build/vendors-node_modules_core-js_modules_es_array_concat_js-node_modules_core-js_modules_es_array-fb37e9.js", + "/apps/vendors-var_plugins_System_PSC_Invoice_Webpack_node_modules_ebay_nice-modal-react_lib_esm_ind-73e7df.js": "/apps/build/vendors-var_plugins_System_PSC_Invoice_Webpack_node_modules_ebay_nice-modal-react_lib_esm_ind-73e7df.js", + "/apps/vendors-node_modules_popperjs_core_dist_cjs_popper_js-node_modules_symfony_stimulus-bridge_di-f31401.css": "/apps/build/vendors-node_modules_popperjs_core_dist_cjs_popper_js-node_modules_symfony_stimulus-bridge_di-f31401.css", + "/apps/vendors-node_modules_popperjs_core_dist_cjs_popper_js-node_modules_symfony_stimulus-bridge_di-f31401.js": "/apps/build/vendors-node_modules_popperjs_core_dist_cjs_popper_js-node_modules_symfony_stimulus-bridge_di-f31401.js", "/apps/fonts/summernote.eot": "/apps/build/fonts/summernote.7a3f9776.eot", "/apps/fonts/summernote.ttf": "/apps/build/fonts/summernote.eb23b6b7.ttf", "/apps/fonts/summernote.woff": "/apps/build/fonts/summernote.f2bec4f2.woff", diff --git a/src/new/web/build/plugins/system/psc/invoice.js b/src/new/web/build/plugins/system/psc/invoice.js index c98e5abfa..fbdce3a06 100644 --- a/src/new/web/build/plugins/system/psc/invoice.js +++ b/src/new/web/build/plugins/system/psc/invoice.js @@ -5,18 +5,16 @@ /*!*********************************************************!*\ !*** ./var/plugins/System/PSC/Invoice/Webpack/index.ts ***! \*********************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { -__webpack_require__.r(__webpack_exports__); -/* harmony import */ var reflect_metadata__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! reflect-metadata */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/reflect-metadata/Reflect.js"); -/* harmony import */ var reflect_metadata__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(reflect_metadata__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var _src_css_output_css__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./src/css/output.css */ "./var/plugins/System/PSC/Invoice/Webpack/src/css/output.css"); -/* harmony import */ var _src_app_app__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./src/app/app */ "./var/plugins/System/PSC/Invoice/Webpack/src/app/app.tsx"); + +exports.__esModule = true; +__webpack_require__(/*! reflect-metadata */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/reflect-metadata/Reflect.js"); //import './src/css/style.scss' - - -var app = new _src_app_app__WEBPACK_IMPORTED_MODULE_2__.App(jwt_token); +__webpack_require__(/*! ./src/css/output.css */ "./var/plugins/System/PSC/Invoice/Webpack/src/css/output.css"); +var app_1 = __webpack_require__(/*! ./src/app/app */ "./var/plugins/System/PSC/Invoice/Webpack/src/app/app.tsx"); +var app = new app_1.App(jwt_token); app.init(); app.run(); @@ -26,31 +24,27 @@ app.run(); /*!****************************************************************!*\ !*** ./var/plugins/System/PSC/Invoice/Webpack/src/app/app.tsx ***! \****************************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "App": () => (/* binding */ App) -/* harmony export */ }); -/* harmony import */ var _services_token__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../services/token */ "./var/plugins/System/PSC/Invoice/Webpack/src/services/token.ts"); -/* harmony import */ var tsyringe__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! tsyringe */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/tsyringe/dist/esm5/index.js"); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/react/index.js"); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__); -/* harmony import */ var react_dom_client__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react-dom/client */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/react-dom/client.js"); -/* harmony import */ var _ebay_nice_modal_react__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @ebay/nice-modal-react */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/@ebay/nice-modal-react/lib/esm/index.js"); -/* harmony import */ var _modules_base_BaseComponent__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../modules/base/BaseComponent */ "./var/plugins/System/PSC/Invoice/Webpack/src/modules/base/BaseComponent.tsx"); -/* harmony import */ var react_router_dom__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! react-router-dom */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/react-router-dom/dist/index.js"); -/* harmony import */ var react_router_dom__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! react-router-dom */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/react-router/dist/index.js"); - - - - +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { +var __importDefault = this && this.__importDefault || function (mod) { + return mod && mod.__esModule ? mod : { + "default": mod + }; +}; +exports.__esModule = true; +exports.App = void 0; +var jsx_runtime_1 = __webpack_require__(/*! react/jsx-runtime */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/react/jsx-runtime.js"); +var token_1 = __webpack_require__(/*! ../services/token */ "./var/plugins/System/PSC/Invoice/Webpack/src/services/token.ts"); +var tsyringe_1 = __webpack_require__(/*! tsyringe */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/tsyringe/dist/esm5/index.js"); +var client_1 = __importDefault(__webpack_require__(/*! react-dom/client */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/react-dom/client.js")); +var nice_modal_react_1 = __importDefault(__webpack_require__(/*! @ebay/nice-modal-react */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/@ebay/nice-modal-react/lib/esm/index.js")); +var BaseComponent_1 = __importDefault(__webpack_require__(/*! ../modules/base/BaseComponent */ "./var/plugins/System/PSC/Invoice/Webpack/src/modules/base/BaseComponent.tsx")); +var react_router_dom_1 = __webpack_require__(/*! react-router-dom */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/react-router-dom/dist/index.js"); var App = /** @class */function () { function App(jwt) { - var token = tsyringe__WEBPACK_IMPORTED_MODULE_1__.container.resolve(_services_token__WEBPACK_IMPORTED_MODULE_0__.Token); + var token = tsyringe_1.container.resolve(token_1.Token); console.log(jwt); token.currentToken = jwt; token.init(); @@ -59,19 +53,25 @@ var App = /** @class */function () { this.buildUi(); }; App.prototype.buildUi = function () { - var root = react_dom_client__WEBPACK_IMPORTED_MODULE_3__.createRoot(document.getElementById('root')); - root.render(react__WEBPACK_IMPORTED_MODULE_2___default().createElement(_ebay_nice_modal_react__WEBPACK_IMPORTED_MODULE_4__["default"].Provider, null, react__WEBPACK_IMPORTED_MODULE_2___default().createElement(react_router_dom__WEBPACK_IMPORTED_MODULE_6__.HashRouter, null, react__WEBPACK_IMPORTED_MODULE_2___default().createElement(react_router_dom__WEBPACK_IMPORTED_MODULE_7__.Routes, null, react__WEBPACK_IMPORTED_MODULE_2___default().createElement(react_router_dom__WEBPACK_IMPORTED_MODULE_7__.Route, { - path: "/", - element: react__WEBPACK_IMPORTED_MODULE_2___default().createElement(_modules_base_BaseComponent__WEBPACK_IMPORTED_MODULE_5__["default"], null) - }), react__WEBPACK_IMPORTED_MODULE_2___default().createElement(react_router_dom__WEBPACK_IMPORTED_MODULE_7__.Route, { - path: "/:uuid", - element: react__WEBPACK_IMPORTED_MODULE_2___default().createElement(_modules_base_BaseComponent__WEBPACK_IMPORTED_MODULE_5__["default"], null) - }))))); + var root = client_1["default"].createRoot(document.getElementById('root')); + root.render((0, jsx_runtime_1.jsx)(nice_modal_react_1["default"].Provider, { + children: (0, jsx_runtime_1.jsx)(react_router_dom_1.HashRouter, { + children: (0, jsx_runtime_1.jsxs)(react_router_dom_1.Routes, { + children: [(0, jsx_runtime_1.jsx)(react_router_dom_1.Route, { + path: "/", + element: (0, jsx_runtime_1.jsx)(BaseComponent_1["default"], {}) + }), (0, jsx_runtime_1.jsx)(react_router_dom_1.Route, { + path: "/:uuid", + element: (0, jsx_runtime_1.jsx)(BaseComponent_1["default"], {}) + })] + }) + }) + })); }; App.prototype.run = function () {}; return App; }(); - +exports.App = App; /***/ }), @@ -79,12 +79,12 @@ var App = /** @class */function () { /*!*********************************************************************!*\ !*** ./var/plugins/System/PSC/Invoice/Webpack/src/model/account.ts ***! \*********************************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { +/***/ ((__unused_webpack_module, exports) => { -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "Account": () => (/* binding */ Account) -/* harmony export */ }); + + +exports.__esModule = true; +exports.Account = void 0; var Account = /** @class */function () { function Account() { this.uid = 0; @@ -100,7 +100,7 @@ var Account = /** @class */function () { }; return Account; }(); - +exports.Account = Account; /***/ }), @@ -108,14 +108,13 @@ var Account = /** @class */function () { /*!*********************************************************************!*\ !*** ./var/plugins/System/PSC/Invoice/Webpack/src/model/address.ts ***! \*********************************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "Address": () => (/* binding */ Address) -/* harmony export */ }); -/* harmony import */ var _contact__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./contact */ "./var/plugins/System/PSC/Invoice/Webpack/src/model/contact.ts"); + +exports.__esModule = true; +exports.Address = void 0; +var contact_1 = __webpack_require__(/*! ./contact */ "./var/plugins/System/PSC/Invoice/Webpack/src/model/contact.ts"); var Address = /** @class */function () { function Address() { this.uid = 0; @@ -131,7 +130,7 @@ var Address = /** @class */function () { this.email = ""; this.country = ""; this.ustid = ""; - this.contact = new _contact__WEBPACK_IMPORTED_MODULE_0__.Contact(); + this.contact = new contact_1.Contact(); this.type = 0; } Address.prototype.parseFromJson = function (item) { @@ -166,7 +165,7 @@ var Address = /** @class */function () { }; return Address; }(); - +exports.Address = Address; /***/ }), @@ -174,13 +173,12 @@ var Address = /** @class */function () { /*!*********************************************************************!*\ !*** ./var/plugins/System/PSC/Invoice/Webpack/src/model/contact.ts ***! \*********************************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { +/***/ ((__unused_webpack_module, exports) => { -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "Contact": () => (/* binding */ Contact), -/* harmony export */ "LayouterData": () => (/* binding */ LayouterData) -/* harmony export */ }); + + +exports.__esModule = true; +exports.Contact = exports.LayouterData = void 0; var LayouterData = /** @class */function () { function LayouterData() { this.firstname = ""; @@ -196,7 +194,7 @@ var LayouterData = /** @class */function () { } return LayouterData; }(); - +exports.LayouterData = LayouterData; var Contact = /** @class */function () { function Contact() { this.uid = 0; @@ -244,7 +242,7 @@ var Contact = /** @class */function () { }; return Contact; }(); - +exports.Contact = Contact; /***/ }), @@ -252,12 +250,12 @@ var Contact = /** @class */function () { /*!*********************************************************************!*\ !*** ./var/plugins/System/PSC/Invoice/Webpack/src/model/country.ts ***! \*********************************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { +/***/ ((__unused_webpack_module, exports) => { -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "Country": () => (/* binding */ Country) -/* harmony export */ }); + + +exports.__esModule = true; +exports.Country = void 0; var Country = /** @class */function () { function Country() { this.uuid = ""; @@ -275,7 +273,7 @@ var Country = /** @class */function () { }; return Country; }(); - +exports.Country = Country; /***/ }), @@ -283,43 +281,33 @@ var Country = /** @class */function () { /*!*******************************************************************!*\ !*** ./var/plugins/System/PSC/Invoice/Webpack/src/model/order.ts ***! \*******************************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "Order": () => (/* binding */ Order) -/* harmony export */ }); -/* harmony import */ var core_js_modules_es_array_map_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.array.map.js */ "./node_modules/core-js/modules/es.array.map.js"); -/* harmony import */ var core_js_modules_es_array_map_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_map_js__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var uuid__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! uuid */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/uuid/dist/esm-browser/v4.js"); -/* harmony import */ var _contact__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./contact */ "./var/plugins/System/PSC/Invoice/Webpack/src/model/contact.ts"); -/* harmony import */ var _account__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./account */ "./var/plugins/System/PSC/Invoice/Webpack/src/model/account.ts"); -/* harmony import */ var _address__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./address */ "./var/plugins/System/PSC/Invoice/Webpack/src/model/address.ts"); -/* harmony import */ var _pos__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./pos */ "./var/plugins/System/PSC/Invoice/Webpack/src/model/pos.ts"); -/* harmony import */ var _payment__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./payment */ "./var/plugins/System/PSC/Invoice/Webpack/src/model/payment.ts"); -/* harmony import */ var _shipping__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./shipping */ "./var/plugins/System/PSC/Invoice/Webpack/src/model/shipping.ts"); -/* harmony import */ var _shop__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./shop */ "./var/plugins/System/PSC/Invoice/Webpack/src/model/shop.ts"); - - - - - - +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { +__webpack_require__(/*! core-js/modules/es.array.map.js */ "./node_modules/core-js/modules/es.array.map.js"); +exports.__esModule = true; +exports.Order = void 0; +var uuid_1 = __webpack_require__(/*! uuid */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/uuid/dist/commonjs-browser/index.js"); +var contact_1 = __webpack_require__(/*! ./contact */ "./var/plugins/System/PSC/Invoice/Webpack/src/model/contact.ts"); +var account_1 = __webpack_require__(/*! ./account */ "./var/plugins/System/PSC/Invoice/Webpack/src/model/account.ts"); +var address_1 = __webpack_require__(/*! ./address */ "./var/plugins/System/PSC/Invoice/Webpack/src/model/address.ts"); +var pos_1 = __webpack_require__(/*! ./pos */ "./var/plugins/System/PSC/Invoice/Webpack/src/model/pos.ts"); +var payment_1 = __webpack_require__(/*! ./payment */ "./var/plugins/System/PSC/Invoice/Webpack/src/model/payment.ts"); +var shipping_1 = __webpack_require__(/*! ./shipping */ "./var/plugins/System/PSC/Invoice/Webpack/src/model/shipping.ts"); +var shop_1 = __webpack_require__(/*! ./shop */ "./var/plugins/System/PSC/Invoice/Webpack/src/model/shop.ts"); var Order = /** @class */function () { function Order() { - this.contact = new _contact__WEBPACK_IMPORTED_MODULE_1__.Contact(); - this.account = new _account__WEBPACK_IMPORTED_MODULE_2__.Account(); - this.deliveryAddress = new _address__WEBPACK_IMPORTED_MODULE_3__.Address(); - this.senderAddress = new _address__WEBPACK_IMPORTED_MODULE_3__.Address(); - this.invoiceAddress = new _address__WEBPACK_IMPORTED_MODULE_3__.Address(); + this.contact = new contact_1.Contact(); + this.account = new account_1.Account(); + this.deliveryAddress = new address_1.Address(); + this.senderAddress = new address_1.Address(); + this.invoiceAddress = new address_1.Address(); this.positions = []; - this.payment = new _payment__WEBPACK_IMPORTED_MODULE_5__.Payment(); - this.shipping = new _shipping__WEBPACK_IMPORTED_MODULE_6__.Shipping(); - this.shop = new _shop__WEBPACK_IMPORTED_MODULE_7__.Shop(); - this.uuid = (0,uuid__WEBPACK_IMPORTED_MODULE_8__["default"])(); + this.payment = new payment_1.Payment(); + this.shipping = new shipping_1.Shipping(); + this.shop = new shop_1.Shop(); + this.uuid = (0, uuid_1.v4)(); this.basketField1 = ""; this.basketField2 = ""; this.draft = true; @@ -346,14 +334,14 @@ var Order = /** @class */function () { this.basketField1 = item.basketField1; this.basketField2 = item.basketField2; item.positions.map(function (e) { - var pos = new _pos__WEBPACK_IMPORTED_MODULE_4__.Pos(); + var pos = new pos_1.Pos(); pos.parseFromJson(e); _this.positions.push(pos); }); }; return Order; }(); - +exports.Order = Order; /***/ }), @@ -361,12 +349,12 @@ var Order = /** @class */function () { /*!*********************************************************************!*\ !*** ./var/plugins/System/PSC/Invoice/Webpack/src/model/payment.ts ***! \*********************************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { +/***/ ((__unused_webpack_module, exports) => { -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "Payment": () => (/* binding */ Payment) -/* harmony export */ }); + + +exports.__esModule = true; +exports.Payment = void 0; var Payment = /** @class */function () { function Payment() { this.uid = 0; @@ -380,7 +368,7 @@ var Payment = /** @class */function () { }; return Payment; }(); - +exports.Payment = Payment; /***/ }), @@ -388,26 +376,23 @@ var Payment = /** @class */function () { /*!*****************************************************************!*\ !*** ./var/plugins/System/PSC/Invoice/Webpack/src/model/pos.ts ***! \*****************************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "Pos": () => (/* binding */ Pos) -/* harmony export */ }); -/* harmony import */ var uuid__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! uuid */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/uuid/dist/esm-browser/v4.js"); -/* harmony import */ var _product__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./product */ "./var/plugins/System/PSC/Invoice/Webpack/src/model/product.ts"); -/* harmony import */ var _price__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./price */ "./var/plugins/System/PSC/Invoice/Webpack/src/model/price.ts"); +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { +exports.__esModule = true; +exports.Pos = void 0; +var uuid_1 = __webpack_require__(/*! uuid */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/uuid/dist/commonjs-browser/index.js"); +var product_1 = __webpack_require__(/*! ./product */ "./var/plugins/System/PSC/Invoice/Webpack/src/model/product.ts"); +var price_1 = __webpack_require__(/*! ./price */ "./var/plugins/System/PSC/Invoice/Webpack/src/model/price.ts"); var Pos = /** @class */function () { function Pos() { this.uuid = ""; - this.product = new _product__WEBPACK_IMPORTED_MODULE_0__.Product(); + this.product = new product_1.Product(); this.status = 10; this.count = 1; - this.price = new _price__WEBPACK_IMPORTED_MODULE_1__.Price(); - this.uuid = (0,uuid__WEBPACK_IMPORTED_MODULE_2__["default"])(); + this.price = new price_1.Price(); + this.uuid = (0, uuid_1.v4)(); } Pos.prototype.parseFromJson = function (item) { this.count = item.price.count; @@ -418,7 +403,7 @@ var Pos = /** @class */function () { }; return Pos; }(); - +exports.Pos = Pos; /***/ }), @@ -426,12 +411,12 @@ var Pos = /** @class */function () { /*!*******************************************************************!*\ !*** ./var/plugins/System/PSC/Invoice/Webpack/src/model/price.ts ***! \*******************************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { +/***/ ((__unused_webpack_module, exports) => { -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "Price": () => (/* binding */ Price) -/* harmony export */ }); + + +exports.__esModule = true; +exports.Price = void 0; var Price = /** @class */function () { function Price() { this.net = 0; @@ -451,7 +436,7 @@ var Price = /** @class */function () { }; return Price; }(); - +exports.Price = Price; /***/ }), @@ -459,13 +444,12 @@ var Price = /** @class */function () { /*!*********************************************************************!*\ !*** ./var/plugins/System/PSC/Invoice/Webpack/src/model/product.ts ***! \*********************************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { +/***/ ((__unused_webpack_module, exports) => { -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "Product": () => (/* binding */ Product), -/* harmony export */ "SpecialProductTypeObject": () => (/* binding */ SpecialProductTypeObject) -/* harmony export */ }); + + +exports.__esModule = true; +exports.Product = exports.SpecialProductTypeObject = void 0; var SpecialProductTypeObject = /** @class */function () { function SpecialProductTypeObject() { this.params = []; @@ -477,7 +461,7 @@ var SpecialProductTypeObject = /** @class */function () { }; return SpecialProductTypeObject; }(); - +exports.SpecialProductTypeObject = SpecialProductTypeObject; var Product = /** @class */function () { function Product() { this.id = 0; @@ -493,7 +477,7 @@ var Product = /** @class */function () { }; return Product; }(); - +exports.Product = Product; /***/ }), @@ -501,12 +485,12 @@ var Product = /** @class */function () { /*!**************************************************************************!*\ !*** ./var/plugins/System/PSC/Invoice/Webpack/src/model/productGroup.ts ***! \**************************************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { +/***/ ((__unused_webpack_module, exports) => { -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "ProductGroup": () => (/* binding */ ProductGroup) -/* harmony export */ }); + + +exports.__esModule = true; +exports.ProductGroup = void 0; var ProductGroup = /** @class */function () { function ProductGroup() { this.id = 0; @@ -514,9 +498,10 @@ var ProductGroup = /** @class */function () { this.uuid = ""; //options: ProductGroup[] = [] } + return ProductGroup; }(); - +exports.ProductGroup = ProductGroup; /***/ }), @@ -524,12 +509,12 @@ var ProductGroup = /** @class */function () { /*!**********************************************************************!*\ !*** ./var/plugins/System/PSC/Invoice/Webpack/src/model/shipping.ts ***! \**********************************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { +/***/ ((__unused_webpack_module, exports) => { -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "Shipping": () => (/* binding */ Shipping) -/* harmony export */ }); + + +exports.__esModule = true; +exports.Shipping = void 0; var Shipping = /** @class */function () { function Shipping() { this.uid = 0; @@ -543,7 +528,7 @@ var Shipping = /** @class */function () { }; return Shipping; }(); - +exports.Shipping = Shipping; /***/ }), @@ -551,15 +536,13 @@ var Shipping = /** @class */function () { /*!******************************************************************!*\ !*** ./var/plugins/System/PSC/Invoice/Webpack/src/model/shop.ts ***! \******************************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "Shop": () => (/* binding */ Shop) -/* harmony export */ }); -/* harmony import */ var core_js_modules_es_function_name_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.function.name.js */ "./node_modules/core-js/modules/es.function.name.js"); -/* harmony import */ var core_js_modules_es_function_name_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_function_name_js__WEBPACK_IMPORTED_MODULE_0__); + +__webpack_require__(/*! core-js/modules/es.function.name.js */ "./node_modules/core-js/modules/es.function.name.js"); +exports.__esModule = true; +exports.Shop = void 0; var Shop = /** @class */function () { function Shop() { this.id = 0; @@ -581,7 +564,7 @@ var Shop = /** @class */function () { }; return Shop; }(); - +exports.Shop = Shop; /***/ }), @@ -589,48 +572,53 @@ var Shop = /** @class */function () { /*!***********************************************************************************************!*\ !*** ./var/plugins/System/PSC/Invoice/Webpack/src/modules/account/AccountSelectComponent.tsx ***! \***********************************************************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var core_js_modules_es_object_to_string_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.object.to-string.js */ "./node_modules/core-js/modules/es.object.to-string.js"); -/* harmony import */ var core_js_modules_es_object_to_string_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_object_to_string_js__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var core_js_modules_es_promise_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es.promise.js */ "./node_modules/core-js/modules/es.promise.js"); -/* harmony import */ var core_js_modules_es_promise_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_promise_js__WEBPACK_IMPORTED_MODULE_1__); -/* harmony import */ var core_js_modules_es_symbol_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! core-js/modules/es.symbol.js */ "./node_modules/core-js/modules/es.symbol.js"); -/* harmony import */ var core_js_modules_es_symbol_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_symbol_js__WEBPACK_IMPORTED_MODULE_2__); -/* harmony import */ var core_js_modules_es_symbol_description_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! core-js/modules/es.symbol.description.js */ "./node_modules/core-js/modules/es.symbol.description.js"); -/* harmony import */ var core_js_modules_es_symbol_description_js__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_symbol_description_js__WEBPACK_IMPORTED_MODULE_3__); -/* harmony import */ var core_js_modules_es_symbol_iterator_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! core-js/modules/es.symbol.iterator.js */ "./node_modules/core-js/modules/es.symbol.iterator.js"); -/* harmony import */ var core_js_modules_es_symbol_iterator_js__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_symbol_iterator_js__WEBPACK_IMPORTED_MODULE_4__); -/* harmony import */ var core_js_modules_es_array_iterator_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! core-js/modules/es.array.iterator.js */ "./node_modules/core-js/modules/es.array.iterator.js"); -/* harmony import */ var core_js_modules_es_array_iterator_js__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_iterator_js__WEBPACK_IMPORTED_MODULE_5__); -/* harmony import */ var core_js_modules_es_string_iterator_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! core-js/modules/es.string.iterator.js */ "./node_modules/core-js/modules/es.string.iterator.js"); -/* harmony import */ var core_js_modules_es_string_iterator_js__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_iterator_js__WEBPACK_IMPORTED_MODULE_6__); -/* harmony import */ var core_js_modules_web_dom_collections_iterator_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! core-js/modules/web.dom-collections.iterator.js */ "./node_modules/core-js/modules/web.dom-collections.iterator.js"); -/* harmony import */ var core_js_modules_web_dom_collections_iterator_js__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_web_dom_collections_iterator_js__WEBPACK_IMPORTED_MODULE_7__); -/* harmony import */ var react_select_async_paginate__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! react-select-async-paginate */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/react-select-async-paginate/dist/esm/index.js"); -/* harmony import */ var _services_account__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../../services/account */ "./var/plugins/System/PSC/Invoice/Webpack/src/services/account.ts"); -/* harmony import */ var tsyringe__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! tsyringe */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/tsyringe/dist/esm5/index.js"); -/* harmony import */ var _state_order__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../../state/order */ "./var/plugins/System/PSC/Invoice/Webpack/src/state/order.ts"); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! react */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/react/index.js"); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_12___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_12__); -/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! prop-types */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/prop-types/index.js"); -/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_16___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_16__); -/* harmony import */ var _model_shop__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../../model/shop */ "./var/plugins/System/PSC/Invoice/Webpack/src/model/shop.ts"); -/* harmony import */ var _model_order__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ../../model/order */ "./var/plugins/System/PSC/Invoice/Webpack/src/model/order.ts"); -/* harmony import */ var _base_SelectLabel__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ../base/SelectLabel */ "./var/plugins/System/PSC/Invoice/Webpack/src/modules/base/SelectLabel.tsx"); +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - - - - -var __awaiter = undefined && undefined.__awaiter || function (thisArg, _arguments, P, generator) { +__webpack_require__(/*! core-js/modules/es.object.create.js */ "./node_modules/core-js/modules/es.object.create.js"); +__webpack_require__(/*! core-js/modules/es.object.get-own-property-descriptor.js */ "./node_modules/core-js/modules/es.object.get-own-property-descriptor.js"); +__webpack_require__(/*! core-js/modules/es.object.define-property.js */ "./node_modules/core-js/modules/es.object.define-property.js"); +__webpack_require__(/*! core-js/modules/es.object.to-string.js */ "./node_modules/core-js/modules/es.object.to-string.js"); +__webpack_require__(/*! core-js/modules/es.promise.js */ "./node_modules/core-js/modules/es.promise.js"); +__webpack_require__(/*! core-js/modules/es.symbol.js */ "./node_modules/core-js/modules/es.symbol.js"); +__webpack_require__(/*! core-js/modules/es.symbol.description.js */ "./node_modules/core-js/modules/es.symbol.description.js"); +__webpack_require__(/*! core-js/modules/es.symbol.iterator.js */ "./node_modules/core-js/modules/es.symbol.iterator.js"); +__webpack_require__(/*! core-js/modules/es.array.iterator.js */ "./node_modules/core-js/modules/es.array.iterator.js"); +__webpack_require__(/*! core-js/modules/es.string.iterator.js */ "./node_modules/core-js/modules/es.string.iterator.js"); +__webpack_require__(/*! core-js/modules/web.dom-collections.iterator.js */ "./node_modules/core-js/modules/web.dom-collections.iterator.js"); +var __createBinding = this && this.__createBinding || (Object.create ? function (o, m, k, k2) { + if (k2 === undefined) k2 = k; + var desc = Object.getOwnPropertyDescriptor(m, k); + if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { + desc = { + enumerable: true, + get: function get() { + return m[k]; + } + }; + } + Object.defineProperty(o, k2, desc); +} : function (o, m, k, k2) { + if (k2 === undefined) k2 = k; + o[k2] = m[k]; +}); +var __setModuleDefault = this && this.__setModuleDefault || (Object.create ? function (o, v) { + Object.defineProperty(o, "default", { + enumerable: true, + value: v + }); +} : function (o, v) { + o["default"] = v; +}); +var __importStar = this && this.__importStar || function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); + __setModuleDefault(result, mod); + return result; +}; +var __awaiter = this && this.__awaiter || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); @@ -657,7 +645,7 @@ var __awaiter = undefined && undefined.__awaiter || function (thisArg, _argument step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; -var __generator = undefined && undefined.__generator || function (thisArg, body) { +var __generator = this && this.__generator || function (thisArg, body) { var _ = { label: 0, sent: function sent() { @@ -745,36 +733,37 @@ var __generator = undefined && undefined.__generator || function (thisArg, body) }; } }; - - - - - - - - - - +exports.__esModule = true; +var jsx_runtime_1 = __webpack_require__(/*! react/jsx-runtime */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/react/jsx-runtime.js"); +var react_select_async_paginate_1 = __webpack_require__(/*! react-select-async-paginate */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/react-select-async-paginate/dist/index.js"); +var account_1 = __webpack_require__(/*! ../../services/account */ "./var/plugins/System/PSC/Invoice/Webpack/src/services/account.ts"); +var tsyringe_1 = __webpack_require__(/*! tsyringe */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/tsyringe/dist/esm5/index.js"); +var order_1 = __webpack_require__(/*! ../../state/order */ "./var/plugins/System/PSC/Invoice/Webpack/src/state/order.ts"); +var react_1 = __webpack_require__(/*! react */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/react/index.js"); +var PropTypes = __importStar(__webpack_require__(/*! prop-types */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/prop-types/index.js")); +var shop_1 = __webpack_require__(/*! ../../model/shop */ "./var/plugins/System/PSC/Invoice/Webpack/src/model/shop.ts"); +var order_2 = __webpack_require__(/*! ../../model/order */ "./var/plugins/System/PSC/Invoice/Webpack/src/model/order.ts"); +var SelectLabel_1 = __webpack_require__(/*! ../base/SelectLabel */ "./var/plugins/System/PSC/Invoice/Webpack/src/modules/base/SelectLabel.tsx"); var AccountSelectComponent = function AccountSelectComponent(_a) { var shop = _a.shop, order = _a.order; - var _b = (0,react__WEBPACK_IMPORTED_MODULE_12__.useState)(null), + var _b = (0, react_1.useState)(null), shopUuid = _b[0], setShopUuid = _b[1]; - var _c = (0,react__WEBPACK_IMPORTED_MODULE_12__.useState)(0), + var _c = (0, react_1.useState)(0), account = _c[0], setAccount = _c[1]; - (0,react__WEBPACK_IMPORTED_MODULE_12__.useEffect)(function () { + (0, react_1.useEffect)(function () { setShopUuid(shop.uuid); }, [shop.uuid]); - var orderState = tsyringe__WEBPACK_IMPORTED_MODULE_10__.container.resolve(_state_order__WEBPACK_IMPORTED_MODULE_11__.OrderState); + var orderState = tsyringe_1.container.resolve(order_1.OrderState); var loadOptions = function loadOptions(searchQuery, loadedOptions) { return __awaiter(void 0, void 0, void 0, function () { var account_service, data; return __generator(this, function (_a) { switch (_a.label) { case 0: - account_service = new _services_account__WEBPACK_IMPORTED_MODULE_9__.AccountService(); + account_service = new account_1.AccountService(); return [4 /*yield*/, account_service.getAccounts(shop)]; case 1: data = _a.sent(); @@ -786,7 +775,7 @@ var AccountSelectComponent = function AccountSelectComponent(_a) { }); }); }; - (0,react__WEBPACK_IMPORTED_MODULE_12__.useEffect)(function () { + (0, react_1.useEffect)(function () { setAccount(order.account.uuid); }, [order.account]); var onChange = function onChange(option) { @@ -796,13 +785,12 @@ var AccountSelectComponent = function AccountSelectComponent(_a) { orderState.setCurrentOrder(orderObj); setAccount(option.uid); }; - return react__WEBPACK_IMPORTED_MODULE_12___default().createElement(react_select_async_paginate__WEBPACK_IMPORTED_MODULE_8__.AsyncPaginate, { + return (0, jsx_runtime_1.jsx)(react_select_async_paginate_1.AsyncPaginate, { defaultOptions: true, className: "".concat(account == 0 ? "border border-danger" : ""), - key: JSON.stringify(shopUuid), defaultValue: order.account, components: { - Control: _base_SelectLabel__WEBPACK_IMPORTED_MODULE_15__.SelectLabel + Control: SelectLabel_1.SelectLabel }, name: 'Firma', loadOptions: loadOptions, @@ -815,13 +803,13 @@ var AccountSelectComponent = function AccountSelectComponent(_a) { }, onChange: onChange, isSearchable: true - }); + }, JSON.stringify(shopUuid)); }; AccountSelectComponent.propTypes = { - shop: prop_types__WEBPACK_IMPORTED_MODULE_16__.instanceOf(_model_shop__WEBPACK_IMPORTED_MODULE_13__.Shop), - order: prop_types__WEBPACK_IMPORTED_MODULE_16__.instanceOf(_model_order__WEBPACK_IMPORTED_MODULE_14__.Order) + shop: PropTypes.instanceOf(shop_1.Shop), + order: PropTypes.instanceOf(order_2.Order) }; -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (AccountSelectComponent); +exports["default"] = AccountSelectComponent; /***/ }), @@ -829,53 +817,30 @@ AccountSelectComponent.propTypes = { /*!***********************************************************************************!*\ !*** ./var/plugins/System/PSC/Invoice/Webpack/src/modules/base/BaseComponent.tsx ***! \***********************************************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var core_js_modules_es_object_to_string_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.object.to-string.js */ "./node_modules/core-js/modules/es.object.to-string.js"); -/* harmony import */ var core_js_modules_es_object_to_string_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_object_to_string_js__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var core_js_modules_es_promise_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es.promise.js */ "./node_modules/core-js/modules/es.promise.js"); -/* harmony import */ var core_js_modules_es_promise_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_promise_js__WEBPACK_IMPORTED_MODULE_1__); -/* harmony import */ var core_js_modules_es_symbol_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! core-js/modules/es.symbol.js */ "./node_modules/core-js/modules/es.symbol.js"); -/* harmony import */ var core_js_modules_es_symbol_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_symbol_js__WEBPACK_IMPORTED_MODULE_2__); -/* harmony import */ var core_js_modules_es_symbol_description_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! core-js/modules/es.symbol.description.js */ "./node_modules/core-js/modules/es.symbol.description.js"); -/* harmony import */ var core_js_modules_es_symbol_description_js__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_symbol_description_js__WEBPACK_IMPORTED_MODULE_3__); -/* harmony import */ var core_js_modules_es_symbol_iterator_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! core-js/modules/es.symbol.iterator.js */ "./node_modules/core-js/modules/es.symbol.iterator.js"); -/* harmony import */ var core_js_modules_es_symbol_iterator_js__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_symbol_iterator_js__WEBPACK_IMPORTED_MODULE_4__); -/* harmony import */ var core_js_modules_es_array_iterator_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! core-js/modules/es.array.iterator.js */ "./node_modules/core-js/modules/es.array.iterator.js"); -/* harmony import */ var core_js_modules_es_array_iterator_js__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_iterator_js__WEBPACK_IMPORTED_MODULE_5__); -/* harmony import */ var core_js_modules_es_string_iterator_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! core-js/modules/es.string.iterator.js */ "./node_modules/core-js/modules/es.string.iterator.js"); -/* harmony import */ var core_js_modules_es_string_iterator_js__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_iterator_js__WEBPACK_IMPORTED_MODULE_6__); -/* harmony import */ var core_js_modules_web_dom_collections_iterator_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! core-js/modules/web.dom-collections.iterator.js */ "./node_modules/core-js/modules/web.dom-collections.iterator.js"); -/* harmony import */ var core_js_modules_web_dom_collections_iterator_js__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_web_dom_collections_iterator_js__WEBPACK_IMPORTED_MODULE_7__); -/* harmony import */ var _model_shop__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../../model/shop */ "./var/plugins/System/PSC/Invoice/Webpack/src/model/shop.ts"); -/* harmony import */ var _contact_ContactComponent__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../contact/ContactComponent */ "./var/plugins/System/PSC/Invoice/Webpack/src/modules/contact/ContactComponent.tsx"); -/* harmony import */ var _topbar_TopBarComponent__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../topbar/TopBarComponent */ "./var/plugins/System/PSC/Invoice/Webpack/src/modules/topbar/TopBarComponent.tsx"); -/* harmony import */ var _positions_PositionsComponent__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../positions/PositionsComponent */ "./var/plugins/System/PSC/Invoice/Webpack/src/modules/positions/PositionsComponent.tsx"); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! react */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/react/index.js"); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_12___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_12__); -/* harmony import */ var _model_order__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../../model/order */ "./var/plugins/System/PSC/Invoice/Webpack/src/model/order.ts"); -/* harmony import */ var _payment_PaymentComponent__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ../payment/PaymentComponent */ "./var/plugins/System/PSC/Invoice/Webpack/src/modules/payment/PaymentComponent.tsx"); -/* harmony import */ var _shipping_ShippingComponent__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ../shipping/ShippingComponent */ "./var/plugins/System/PSC/Invoice/Webpack/src/modules/shipping/ShippingComponent.tsx"); -/* harmony import */ var _button_ButtonComponent__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ../button/ButtonComponent */ "./var/plugins/System/PSC/Invoice/Webpack/src/modules/button/ButtonComponent.tsx"); -/* harmony import */ var react_router_dom__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! react-router-dom */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/react-router/dist/index.js"); -/* harmony import */ var tsyringe__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! tsyringe */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/tsyringe/dist/esm5/index.js"); -/* harmony import */ var _state_order__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ../../state/order */ "./var/plugins/System/PSC/Invoice/Webpack/src/state/order.ts"); -/* harmony import */ var _services_order__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ../../services/order */ "./var/plugins/System/PSC/Invoice/Webpack/src/services/order.ts"); -/* harmony import */ var _info_InfoFieldComponent__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ../info/InfoFieldComponent */ "./var/plugins/System/PSC/Invoice/Webpack/src/modules/info/InfoFieldComponent.tsx"); -/* harmony import */ var _order_OrderAliasComponent__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ../order/OrderAliasComponent */ "./var/plugins/System/PSC/Invoice/Webpack/src/modules/order/OrderAliasComponent.tsx"); +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - - - - -var __awaiter = undefined && undefined.__awaiter || function (thisArg, _arguments, P, generator) { +__webpack_require__(/*! core-js/modules/es.object.assign.js */ "./node_modules/core-js/modules/es.object.assign.js"); +__webpack_require__(/*! core-js/modules/es.object.to-string.js */ "./node_modules/core-js/modules/es.object.to-string.js"); +__webpack_require__(/*! core-js/modules/es.promise.js */ "./node_modules/core-js/modules/es.promise.js"); +__webpack_require__(/*! core-js/modules/es.symbol.js */ "./node_modules/core-js/modules/es.symbol.js"); +__webpack_require__(/*! core-js/modules/es.symbol.description.js */ "./node_modules/core-js/modules/es.symbol.description.js"); +__webpack_require__(/*! core-js/modules/es.symbol.iterator.js */ "./node_modules/core-js/modules/es.symbol.iterator.js"); +__webpack_require__(/*! core-js/modules/es.array.iterator.js */ "./node_modules/core-js/modules/es.array.iterator.js"); +__webpack_require__(/*! core-js/modules/es.string.iterator.js */ "./node_modules/core-js/modules/es.string.iterator.js"); +__webpack_require__(/*! core-js/modules/web.dom-collections.iterator.js */ "./node_modules/core-js/modules/web.dom-collections.iterator.js"); +var __assign = this && this.__assign || function () { + __assign = Object.assign || function (t) { + for (var s, i = 1, n = arguments.length; i < n; i++) { + s = arguments[i]; + for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; + } + return t; + }; + return __assign.apply(this, arguments); +}; +var __awaiter = this && this.__awaiter || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); @@ -902,7 +867,7 @@ var __awaiter = undefined && undefined.__awaiter || function (thisArg, _argument step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; -var __generator = undefined && undefined.__generator || function (thisArg, body) { +var __generator = this && this.__generator || function (thisArg, body) { var _ = { label: 0, sent: function sent() { @@ -990,31 +955,38 @@ var __generator = undefined && undefined.__generator || function (thisArg, body) }; } }; - - - - - - - - - - - - - - - - +var __importDefault = this && this.__importDefault || function (mod) { + return mod && mod.__esModule ? mod : { + "default": mod + }; +}; +exports.__esModule = true; +var jsx_runtime_1 = __webpack_require__(/*! react/jsx-runtime */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/react/jsx-runtime.js"); +var shop_1 = __webpack_require__(/*! ../../model/shop */ "./var/plugins/System/PSC/Invoice/Webpack/src/model/shop.ts"); +var ContactComponent_1 = __importDefault(__webpack_require__(/*! ../contact/ContactComponent */ "./var/plugins/System/PSC/Invoice/Webpack/src/modules/contact/ContactComponent.tsx")); +var TopBarComponent_1 = __importDefault(__webpack_require__(/*! ../topbar/TopBarComponent */ "./var/plugins/System/PSC/Invoice/Webpack/src/modules/topbar/TopBarComponent.tsx")); +var PositionsComponent_1 = __importDefault(__webpack_require__(/*! ../positions/PositionsComponent */ "./var/plugins/System/PSC/Invoice/Webpack/src/modules/positions/PositionsComponent.tsx")); +var react_1 = __webpack_require__(/*! react */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/react/index.js"); +var order_1 = __webpack_require__(/*! ../../model/order */ "./var/plugins/System/PSC/Invoice/Webpack/src/model/order.ts"); +var PaymentComponent_1 = __importDefault(__webpack_require__(/*! ../payment/PaymentComponent */ "./var/plugins/System/PSC/Invoice/Webpack/src/modules/payment/PaymentComponent.tsx")); +var ShippingComponent_1 = __importDefault(__webpack_require__(/*! ../shipping/ShippingComponent */ "./var/plugins/System/PSC/Invoice/Webpack/src/modules/shipping/ShippingComponent.tsx")); +var ButtonComponent_1 = __importDefault(__webpack_require__(/*! ../button/ButtonComponent */ "./var/plugins/System/PSC/Invoice/Webpack/src/modules/button/ButtonComponent.tsx")); +var react_router_dom_1 = __webpack_require__(/*! react-router-dom */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/react-router-dom/dist/index.js"); +var tsyringe_1 = __webpack_require__(/*! tsyringe */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/tsyringe/dist/esm5/index.js"); +var order_2 = __webpack_require__(/*! ../../state/order */ "./var/plugins/System/PSC/Invoice/Webpack/src/state/order.ts"); +var order_3 = __webpack_require__(/*! ../../services/order */ "./var/plugins/System/PSC/Invoice/Webpack/src/services/order.ts"); +var InfoFieldComponent_1 = __importDefault(__webpack_require__(/*! ../info/InfoFieldComponent */ "./var/plugins/System/PSC/Invoice/Webpack/src/modules/info/InfoFieldComponent.tsx")); +var react_2 = __importDefault(__webpack_require__(/*! react */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/react/index.js")); +var OrderAliasComponent_1 = __importDefault(__webpack_require__(/*! ../order/OrderAliasComponent */ "./var/plugins/System/PSC/Invoice/Webpack/src/modules/order/OrderAliasComponent.tsx")); var BaseComponent = function BaseComponent(props) { - var _a = (0,react__WEBPACK_IMPORTED_MODULE_12__.useState)(new _model_shop__WEBPACK_IMPORTED_MODULE_8__.Shop()), + var _a = (0, react_1.useState)(new shop_1.Shop()), shop = _a[0], setShop = _a[1]; - var _b = (0,react__WEBPACK_IMPORTED_MODULE_12__.useState)(new _model_order__WEBPACK_IMPORTED_MODULE_13__.Order()), + var _b = (0, react_1.useState)(new order_1.Order()), order = _b[0], setOrder = _b[1]; - var order_state = tsyringe__WEBPACK_IMPORTED_MODULE_17__.container.resolve(_state_order__WEBPACK_IMPORTED_MODULE_18__.OrderState); - var orderService = tsyringe__WEBPACK_IMPORTED_MODULE_17__.container.resolve(_services_order__WEBPACK_IMPORTED_MODULE_19__.OrderService); + var order_state = tsyringe_1.container.resolve(order_2.OrderState); + var orderService = tsyringe_1.container.resolve(order_3.OrderService); var loadOrder = function loadOrder(uuid) { return __awaiter(void 0, void 0, void 0, function () { return __generator(this, function (_a) { @@ -1027,54 +999,74 @@ var BaseComponent = function BaseComponent(props) { }); }); }; - var params = (0,react_router_dom__WEBPACK_IMPORTED_MODULE_22__.useParams)(); - (0,react__WEBPACK_IMPORTED_MODULE_12__.useEffect)(function () { + var params = (0, react_router_dom_1.useParams)(); + (0, react_1.useEffect)(function () { if (params.uuid) { loadOrder(params.uuid); } }, []); - return react__WEBPACK_IMPORTED_MODULE_12___default().createElement((react__WEBPACK_IMPORTED_MODULE_12___default().StrictMode), null, react__WEBPACK_IMPORTED_MODULE_12___default().createElement("div", { - className: 'ml-1 mt-1 mr-1' - }, react__WEBPACK_IMPORTED_MODULE_12___default().createElement("div", { - className: "flex gap-1 mt-1 mb-1" - }, react__WEBPACK_IMPORTED_MODULE_12___default().createElement("div", { - className: "flex-1" - }, react__WEBPACK_IMPORTED_MODULE_12___default().createElement(_order_OrderAliasComponent__WEBPACK_IMPORTED_MODULE_21__["default"], { - order: order - })), react__WEBPACK_IMPORTED_MODULE_12___default().createElement("div", { - className: "" - }, react__WEBPACK_IMPORTED_MODULE_12___default().createElement(_button_ButtonComponent__WEBPACK_IMPORTED_MODULE_16__["default"], { - loadOrder: loadOrder - }))), react__WEBPACK_IMPORTED_MODULE_12___default().createElement(_topbar_TopBarComponent__WEBPACK_IMPORTED_MODULE_10__["default"], { - shop: shop, - order: order, - change: setShop - }), react__WEBPACK_IMPORTED_MODULE_12___default().createElement("div", { - className: "mt-1 mb-1" - }, shop.id != 0 && react__WEBPACK_IMPORTED_MODULE_12___default().createElement(_contact_ContactComponent__WEBPACK_IMPORTED_MODULE_9__["default"], { - shop: shop, - order: order - })), react__WEBPACK_IMPORTED_MODULE_12___default().createElement("div", null, shop.id != 0 && react__WEBPACK_IMPORTED_MODULE_12___default().createElement(_positions_PositionsComponent__WEBPACK_IMPORTED_MODULE_11__["default"], { - shop: shop, - order: order - })), react__WEBPACK_IMPORTED_MODULE_12___default().createElement("div", { - className: "mt-1 mb-1 flex gap-1" - }, react__WEBPACK_IMPORTED_MODULE_12___default().createElement("div", { - className: "flex-1" - }, shop.id != 0 && react__WEBPACK_IMPORTED_MODULE_12___default().createElement(_payment_PaymentComponent__WEBPACK_IMPORTED_MODULE_14__["default"], { - shop: shop, - order: order - })), react__WEBPACK_IMPORTED_MODULE_12___default().createElement("div", { - className: "flex-1" - }, shop.id != 0 && react__WEBPACK_IMPORTED_MODULE_12___default().createElement(_shipping_ShippingComponent__WEBPACK_IMPORTED_MODULE_15__["default"], { - shop: shop, - order: order - }))), shop.id != 0 && react__WEBPACK_IMPORTED_MODULE_12___default().createElement(_info_InfoFieldComponent__WEBPACK_IMPORTED_MODULE_20__["default"], { - shop: shop, - order: order - }))); + return (0, jsx_runtime_1.jsx)(react_2["default"].StrictMode, { + children: (0, jsx_runtime_1.jsxs)("div", __assign({ + className: 'ml-1 mt-1 mr-1' + }, { + children: [(0, jsx_runtime_1.jsxs)("div", __assign({ + className: "flex gap-1 mt-1 mb-1" + }, { + children: [(0, jsx_runtime_1.jsx)("div", __assign({ + className: "flex-1" + }, { + children: (0, jsx_runtime_1.jsx)(OrderAliasComponent_1["default"], { + order: order + }) + })), (0, jsx_runtime_1.jsx)("div", __assign({ + className: "" + }, { + children: (0, jsx_runtime_1.jsx)(ButtonComponent_1["default"], { + loadOrder: loadOrder + }) + }))] + })), (0, jsx_runtime_1.jsx)(TopBarComponent_1["default"], { + shop: shop, + order: order, + change: setShop + }), (0, jsx_runtime_1.jsx)("div", __assign({ + className: "mt-1 mb-1" + }, { + children: shop.id != 0 && (0, jsx_runtime_1.jsx)(ContactComponent_1["default"], { + shop: shop, + order: order + }) + })), (0, jsx_runtime_1.jsx)("div", { + children: shop.id != 0 && (0, jsx_runtime_1.jsx)(PositionsComponent_1["default"], { + shop: shop, + order: order + }) + }), (0, jsx_runtime_1.jsxs)("div", __assign({ + className: "mt-1 mb-1 flex gap-1" + }, { + children: [(0, jsx_runtime_1.jsx)("div", __assign({ + className: "flex-1" + }, { + children: shop.id != 0 && (0, jsx_runtime_1.jsx)(PaymentComponent_1["default"], { + shop: shop, + order: order + }) + })), (0, jsx_runtime_1.jsx)("div", __assign({ + className: "flex-1" + }, { + children: shop.id != 0 && (0, jsx_runtime_1.jsx)(ShippingComponent_1["default"], { + shop: shop, + order: order + }) + }))] + })), shop.id != 0 && (0, jsx_runtime_1.jsx)(InfoFieldComponent_1["default"], { + shop: shop, + order: order + })] + })) + }); }; -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (BaseComponent); +exports["default"] = BaseComponent; /***/ }), @@ -1082,99 +1074,12 @@ var BaseComponent = function BaseComponent(props) { /*!****************************************************************************!*\ !*** ./var/plugins/System/PSC/Invoice/Webpack/src/modules/base/Button.tsx ***! \****************************************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _react_icons_all_files_bs_BsPlus__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @react-icons/all-files/bs/BsPlus */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/@react-icons/all-files/bs/BsPlus.js"); -/* harmony import */ var _react_icons_all_files_bs_BsPencil__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @react-icons/all-files/bs/BsPencil */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/@react-icons/all-files/bs/BsPencil.js"); -/* harmony import */ var _react_icons_all_files_ri_RiSaveFill__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @react-icons/all-files/ri/RiSaveFill */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/@react-icons/all-files/ri/RiSaveFill.js"); -/* harmony import */ var _react_icons_all_files_ri_RiDeleteBin2Line__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @react-icons/all-files/ri/RiDeleteBin2Line */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/@react-icons/all-files/ri/RiDeleteBin2Line.js"); -/* harmony import */ var _react_icons_all_files_bs_BsXCircle__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @react-icons/all-files/bs/BsXCircle */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/@react-icons/all-files/bs/BsXCircle.js"); -/* harmony import */ var flowbite_react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! flowbite-react */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/flowbite-react/dist/esm/index.mjs"); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/react/index.js"); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__); +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - - - -var Button = function Button(_a) { - var type = _a.type, - variant = _a.variant, - onClick = _a.onClick; - return react__WEBPACK_IMPORTED_MODULE_1___default().createElement(flowbite_react__WEBPACK_IMPORTED_MODULE_0__.Button, { - color: variant, - pill: true, - onClick: onClick - }, type == 1 && react__WEBPACK_IMPORTED_MODULE_1___default().createElement(_react_icons_all_files_bs_BsPlus__WEBPACK_IMPORTED_MODULE_2__.BsPlus, null), type == 2 && react__WEBPACK_IMPORTED_MODULE_1___default().createElement(_react_icons_all_files_bs_BsPencil__WEBPACK_IMPORTED_MODULE_3__.BsPencil, null), type == 3 && react__WEBPACK_IMPORTED_MODULE_1___default().createElement(_react_icons_all_files_ri_RiSaveFill__WEBPACK_IMPORTED_MODULE_4__.RiSaveFill, null), type == 4 && react__WEBPACK_IMPORTED_MODULE_1___default().createElement(_react_icons_all_files_bs_BsXCircle__WEBPACK_IMPORTED_MODULE_5__.BsXCircle, null), type == 5 && react__WEBPACK_IMPORTED_MODULE_1___default().createElement(_react_icons_all_files_ri_RiDeleteBin2Line__WEBPACK_IMPORTED_MODULE_6__.RiDeleteBin2Line, null)); -}; -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Button); - -/***/ }), - -/***/ "./var/plugins/System/PSC/Invoice/Webpack/src/modules/base/Currency.tsx": -/*!******************************************************************************!*\ - !*** ./var/plugins/System/PSC/Invoice/Webpack/src/modules/base/Currency.tsx ***! - \******************************************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/react/index.js"); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); - -var Currency = function Currency(_a) { - var price = _a.price; - return react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, Intl.NumberFormat('de-DE', { - style: 'currency', - currency: 'EUR' - }).format(price / 100)); -}; -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Currency); - -/***/ }), - -/***/ "./var/plugins/System/PSC/Invoice/Webpack/src/modules/base/SelectLabel.tsx": -/*!*********************************************************************************!*\ - !*** ./var/plugins/System/PSC/Invoice/Webpack/src/modules/base/SelectLabel.tsx ***! - \*********************************************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "SelectLabel": () => (/* binding */ SelectLabel) -/* harmony export */ }); -/* harmony import */ var core_js_modules_es_object_define_property_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.object.define-property.js */ "./node_modules/core-js/modules/es.object.define-property.js"); -/* harmony import */ var core_js_modules_es_object_define_property_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_object_define_property_js__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var core_js_modules_es_object_assign_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es.object.assign.js */ "./node_modules/core-js/modules/es.object.assign.js"); -/* harmony import */ var core_js_modules_es_object_assign_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_object_assign_js__WEBPACK_IMPORTED_MODULE_1__); -/* harmony import */ var core_js_modules_es_function_name_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! core-js/modules/es.function.name.js */ "./node_modules/core-js/modules/es.function.name.js"); -/* harmony import */ var core_js_modules_es_function_name_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_function_name_js__WEBPACK_IMPORTED_MODULE_2__); -/* harmony import */ var styled_components__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! styled-components */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/styled-components/dist/styled-components.browser.esm.js"); -/* harmony import */ var react_select__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! react-select */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/react-select/dist/index-a301f526.esm.js"); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/react/index.js"); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_3__); - - - -var __makeTemplateObject = undefined && undefined.__makeTemplateObject || function (cooked, raw) { - if (Object.defineProperty) { - Object.defineProperty(cooked, "raw", { - value: raw - }); - } else { - cooked.raw = raw; - } - return cooked; -}; -var __assign = undefined && undefined.__assign || function () { +__webpack_require__(/*! core-js/modules/es.object.assign.js */ "./node_modules/core-js/modules/es.object.assign.js"); +var __assign = this && this.__assign || function () { __assign = Object.assign || function (t) { for (var s, i = 1, n = arguments.length; i < n; i++) { s = arguments[i]; @@ -1184,15 +1089,105 @@ var __assign = undefined && undefined.__assign || function () { }; return __assign.apply(this, arguments); }; - - - -var SelectLabel = function SelectLabel(props) { - return react__WEBPACK_IMPORTED_MODULE_3___default().createElement((react__WEBPACK_IMPORTED_MODULE_3___default().Fragment), null, react__WEBPACK_IMPORTED_MODULE_3___default().createElement(react_select__WEBPACK_IMPORTED_MODULE_4__.c.Control, __assign({}, props)), react__WEBPACK_IMPORTED_MODULE_3___default().createElement(Label, { - "$isFloating": props.getValue().length == 0 || props.getValue()[0].uuid == "" - }, props.selectProps.name)); +exports.__esModule = true; +var jsx_runtime_1 = __webpack_require__(/*! react/jsx-runtime */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/react/jsx-runtime.js"); +var BsPlus_1 = __webpack_require__(/*! @react-icons/all-files/bs/BsPlus */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/@react-icons/all-files/bs/BsPlus.js"); +var BsPencil_1 = __webpack_require__(/*! @react-icons/all-files/bs/BsPencil */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/@react-icons/all-files/bs/BsPencil.js"); +var RiSaveFill_1 = __webpack_require__(/*! @react-icons/all-files/ri/RiSaveFill */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/@react-icons/all-files/ri/RiSaveFill.js"); +var RiDeleteBin2Line_1 = __webpack_require__(/*! @react-icons/all-files/ri/RiDeleteBin2Line */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/@react-icons/all-files/ri/RiDeleteBin2Line.js"); +var BsXCircle_1 = __webpack_require__(/*! @react-icons/all-files/bs/BsXCircle */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/@react-icons/all-files/bs/BsXCircle.js"); +var flowbite_react_1 = __webpack_require__(/*! flowbite-react */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/flowbite-react/dist/cjs/index.cjs"); +var Button = function Button(_a) { + var type = _a.type, + variant = _a.variant, + onClick = _a.onClick; + return (0, jsx_runtime_1.jsxs)(flowbite_react_1.Button, __assign({ + color: variant, + pill: true, + onClick: onClick + }, { + children: [type == 1 && (0, jsx_runtime_1.jsx)(BsPlus_1.BsPlus, {}), type == 2 && (0, jsx_runtime_1.jsx)(BsPencil_1.BsPencil, {}), type == 3 && (0, jsx_runtime_1.jsx)(RiSaveFill_1.RiSaveFill, {}), type == 4 && (0, jsx_runtime_1.jsx)(BsXCircle_1.BsXCircle, {}), type == 5 && (0, jsx_runtime_1.jsx)(RiDeleteBin2Line_1.RiDeleteBin2Line, {})] + })); }; -var Label = styled_components__WEBPACK_IMPORTED_MODULE_5__["default"].label(templateObject_1 || (templateObject_1 = __makeTemplateObject(["\n left: 10px;\n pointer-events: none;\n position: absolute;\n transition: 0.2s ease all;\n -moz-transition: 0.2s ease all;\n -webkit-transition: 0.2s ease all;\n top: ", ";\n font-size: ", ";\n"], ["\n left: 10px;\n pointer-events: none;\n position: absolute;\n transition: 0.2s ease all;\n -moz-transition: 0.2s ease all;\n -webkit-transition: 0.2s ease all;\n top: ", ";\n font-size: ", ";\n"])), function (props) { +exports["default"] = Button; + +/***/ }), + +/***/ "./var/plugins/System/PSC/Invoice/Webpack/src/modules/base/Currency.tsx": +/*!******************************************************************************!*\ + !*** ./var/plugins/System/PSC/Invoice/Webpack/src/modules/base/Currency.tsx ***! + \******************************************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + + + +exports.__esModule = true; +var jsx_runtime_1 = __webpack_require__(/*! react/jsx-runtime */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/react/jsx-runtime.js"); +var Currency = function Currency(_a) { + var price = _a.price; + return (0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, { + children: Intl.NumberFormat('de-DE', { + style: 'currency', + currency: 'EUR' + }).format(price / 100) + }); +}; +exports["default"] = Currency; + +/***/ }), + +/***/ "./var/plugins/System/PSC/Invoice/Webpack/src/modules/base/SelectLabel.tsx": +/*!*********************************************************************************!*\ + !*** ./var/plugins/System/PSC/Invoice/Webpack/src/modules/base/SelectLabel.tsx ***! + \*********************************************************************************/ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + + + +__webpack_require__(/*! core-js/modules/es.object.define-property.js */ "./node_modules/core-js/modules/es.object.define-property.js"); +__webpack_require__(/*! core-js/modules/es.object.assign.js */ "./node_modules/core-js/modules/es.object.assign.js"); +__webpack_require__(/*! core-js/modules/es.function.name.js */ "./node_modules/core-js/modules/es.function.name.js"); +var __makeTemplateObject = this && this.__makeTemplateObject || function (cooked, raw) { + if (Object.defineProperty) { + Object.defineProperty(cooked, "raw", { + value: raw + }); + } else { + cooked.raw = raw; + } + return cooked; +}; +var __assign = this && this.__assign || function () { + __assign = Object.assign || function (t) { + for (var s, i = 1, n = arguments.length; i < n; i++) { + s = arguments[i]; + for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; + } + return t; + }; + return __assign.apply(this, arguments); +}; +var __importDefault = this && this.__importDefault || function (mod) { + return mod && mod.__esModule ? mod : { + "default": mod + }; +}; +exports.__esModule = true; +exports.SelectLabel = void 0; +var jsx_runtime_1 = __webpack_require__(/*! react/jsx-runtime */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/react/jsx-runtime.js"); +var styled_components_1 = __importDefault(__webpack_require__(/*! styled-components */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/styled-components/dist/styled-components.browser.esm.js")); +var react_select_1 = __webpack_require__(/*! react-select */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/react-select/dist/react-select.esm.js"); +var SelectLabel = function SelectLabel(props) { + return (0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { + children: [(0, jsx_runtime_1.jsx)(react_select_1.components.Control, __assign({}, props)), (0, jsx_runtime_1.jsx)(Label, __assign({ + "$isFloating": props.getValue().length == 0 || props.getValue()[0].uuid == "" + }, { + children: props.selectProps.name + }))] + }); +}; +exports.SelectLabel = SelectLabel; +var Label = styled_components_1["default"].label(templateObject_1 || (templateObject_1 = __makeTemplateObject(["\n left: 10px;\n pointer-events: none;\n position: absolute;\n transition: 0.2s ease all;\n -moz-transition: 0.2s ease all;\n -webkit-transition: 0.2s ease all;\n top: ", ";\n font-size: ", ";\n"], ["\n left: 10px;\n pointer-events: none;\n position: absolute;\n transition: 0.2s ease all;\n -moz-transition: 0.2s ease all;\n -webkit-transition: 0.2s ease all;\n top: ", ";\n font-size: ", ";\n"])), function (props) { return props.$isFloating ? "20%" : "0px"; }, function (props) { return props.$isFloating ? "1rem" : "0.6rem"; @@ -1205,55 +1200,23 @@ var templateObject_1; /*!***************************************************************************************!*\ !*** ./var/plugins/System/PSC/Invoice/Webpack/src/modules/button/ButtonComponent.tsx ***! \***************************************************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var core_js_modules_es_object_set_prototype_of_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.object.set-prototype-of.js */ "./node_modules/core-js/modules/es.object.set-prototype-of.js"); -/* harmony import */ var core_js_modules_es_object_set_prototype_of_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_object_set_prototype_of_js__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var core_js_modules_es_object_create_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es.object.create.js */ "./node_modules/core-js/modules/es.object.create.js"); -/* harmony import */ var core_js_modules_es_object_create_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_object_create_js__WEBPACK_IMPORTED_MODULE_1__); -/* harmony import */ var core_js_modules_es_object_to_string_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! core-js/modules/es.object.to-string.js */ "./node_modules/core-js/modules/es.object.to-string.js"); -/* harmony import */ var core_js_modules_es_object_to_string_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_object_to_string_js__WEBPACK_IMPORTED_MODULE_2__); -/* harmony import */ var core_js_modules_es_promise_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! core-js/modules/es.promise.js */ "./node_modules/core-js/modules/es.promise.js"); -/* harmony import */ var core_js_modules_es_promise_js__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_promise_js__WEBPACK_IMPORTED_MODULE_3__); -/* harmony import */ var core_js_modules_es_symbol_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! core-js/modules/es.symbol.js */ "./node_modules/core-js/modules/es.symbol.js"); -/* harmony import */ var core_js_modules_es_symbol_js__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_symbol_js__WEBPACK_IMPORTED_MODULE_4__); -/* harmony import */ var core_js_modules_es_symbol_description_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! core-js/modules/es.symbol.description.js */ "./node_modules/core-js/modules/es.symbol.description.js"); -/* harmony import */ var core_js_modules_es_symbol_description_js__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_symbol_description_js__WEBPACK_IMPORTED_MODULE_5__); -/* harmony import */ var core_js_modules_es_symbol_iterator_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! core-js/modules/es.symbol.iterator.js */ "./node_modules/core-js/modules/es.symbol.iterator.js"); -/* harmony import */ var core_js_modules_es_symbol_iterator_js__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_symbol_iterator_js__WEBPACK_IMPORTED_MODULE_6__); -/* harmony import */ var core_js_modules_es_array_iterator_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! core-js/modules/es.array.iterator.js */ "./node_modules/core-js/modules/es.array.iterator.js"); -/* harmony import */ var core_js_modules_es_array_iterator_js__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_iterator_js__WEBPACK_IMPORTED_MODULE_7__); -/* harmony import */ var core_js_modules_es_string_iterator_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! core-js/modules/es.string.iterator.js */ "./node_modules/core-js/modules/es.string.iterator.js"); -/* harmony import */ var core_js_modules_es_string_iterator_js__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_iterator_js__WEBPACK_IMPORTED_MODULE_8__); -/* harmony import */ var core_js_modules_web_dom_collections_iterator_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! core-js/modules/web.dom-collections.iterator.js */ "./node_modules/core-js/modules/web.dom-collections.iterator.js"); -/* harmony import */ var core_js_modules_web_dom_collections_iterator_js__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_web_dom_collections_iterator_js__WEBPACK_IMPORTED_MODULE_9__); -/* harmony import */ var core_js_modules_es_function_name_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! core-js/modules/es.function.name.js */ "./node_modules/core-js/modules/es.function.name.js"); -/* harmony import */ var core_js_modules_es_function_name_js__WEBPACK_IMPORTED_MODULE_10___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_function_name_js__WEBPACK_IMPORTED_MODULE_10__); -/* harmony import */ var _state_order__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../../state/order */ "./var/plugins/System/PSC/Invoice/Webpack/src/state/order.ts"); -/* harmony import */ var tsyringe__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! tsyringe */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/tsyringe/dist/esm5/index.js"); -/* harmony import */ var _services_order__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../../services/order */ "./var/plugins/System/PSC/Invoice/Webpack/src/services/order.ts"); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! react */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/react/index.js"); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_14___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_14__); -/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! rxjs */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/rxjs/dist/esm5/internal/operators/debounceTime.js"); -/* harmony import */ var _react_icons_all_files_ri_RiSaveFill__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! @react-icons/all-files/ri/RiSaveFill */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/@react-icons/all-files/ri/RiSaveFill.js"); -/* harmony import */ var _react_icons_all_files_ri_RiPrinterFill__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! @react-icons/all-files/ri/RiPrinterFill */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/@react-icons/all-files/ri/RiPrinterFill.js"); -/* harmony import */ var flowbite_react__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! flowbite-react */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/flowbite-react/dist/esm/index.mjs"); +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - - - - - - - -var __extends = undefined && undefined.__extends || function () { +__webpack_require__(/*! core-js/modules/es.object.set-prototype-of.js */ "./node_modules/core-js/modules/es.object.set-prototype-of.js"); +__webpack_require__(/*! core-js/modules/es.object.create.js */ "./node_modules/core-js/modules/es.object.create.js"); +__webpack_require__(/*! core-js/modules/es.object.assign.js */ "./node_modules/core-js/modules/es.object.assign.js"); +__webpack_require__(/*! core-js/modules/es.object.to-string.js */ "./node_modules/core-js/modules/es.object.to-string.js"); +__webpack_require__(/*! core-js/modules/es.promise.js */ "./node_modules/core-js/modules/es.promise.js"); +__webpack_require__(/*! core-js/modules/es.symbol.js */ "./node_modules/core-js/modules/es.symbol.js"); +__webpack_require__(/*! core-js/modules/es.symbol.description.js */ "./node_modules/core-js/modules/es.symbol.description.js"); +__webpack_require__(/*! core-js/modules/es.symbol.iterator.js */ "./node_modules/core-js/modules/es.symbol.iterator.js"); +__webpack_require__(/*! core-js/modules/es.array.iterator.js */ "./node_modules/core-js/modules/es.array.iterator.js"); +__webpack_require__(/*! core-js/modules/es.string.iterator.js */ "./node_modules/core-js/modules/es.string.iterator.js"); +__webpack_require__(/*! core-js/modules/web.dom-collections.iterator.js */ "./node_modules/core-js/modules/web.dom-collections.iterator.js"); +__webpack_require__(/*! core-js/modules/es.function.name.js */ "./node_modules/core-js/modules/es.function.name.js"); +var __extends = this && this.__extends || function () { var _extendStatics = function extendStatics(d, b) { _extendStatics = Object.setPrototypeOf || { __proto__: [] @@ -1273,7 +1236,17 @@ var __extends = undefined && undefined.__extends || function () { d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); }; }(); -var __awaiter = undefined && undefined.__awaiter || function (thisArg, _arguments, P, generator) { +var __assign = this && this.__assign || function () { + __assign = Object.assign || function (t) { + for (var s, i = 1, n = arguments.length; i < n; i++) { + s = arguments[i]; + for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; + } + return t; + }; + return __assign.apply(this, arguments); +}; +var __awaiter = this && this.__awaiter || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); @@ -1300,7 +1273,7 @@ var __awaiter = undefined && undefined.__awaiter || function (thisArg, _argument step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; -var __generator = undefined && undefined.__generator || function (thisArg, body) { +var __generator = this && this.__generator || function (thisArg, body) { var _ = { label: 0, sent: function sent() { @@ -1388,21 +1361,22 @@ var __generator = undefined && undefined.__generator || function (thisArg, body) }; } }; - - - - - - - - - +exports.__esModule = true; +var jsx_runtime_1 = __webpack_require__(/*! react/jsx-runtime */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/react/jsx-runtime.js"); +var order_1 = __webpack_require__(/*! ../../state/order */ "./var/plugins/System/PSC/Invoice/Webpack/src/state/order.ts"); +var tsyringe_1 = __webpack_require__(/*! tsyringe */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/tsyringe/dist/esm5/index.js"); +var order_2 = __webpack_require__(/*! ../../services/order */ "./var/plugins/System/PSC/Invoice/Webpack/src/services/order.ts"); +var react_1 = __webpack_require__(/*! react */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/react/index.js"); +var rxjs_1 = __webpack_require__(/*! rxjs */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/rxjs/dist/cjs/index.js"); +var RiSaveFill_1 = __webpack_require__(/*! @react-icons/all-files/ri/RiSaveFill */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/@react-icons/all-files/ri/RiSaveFill.js"); +var RiPrinterFill_1 = __webpack_require__(/*! @react-icons/all-files/ri/RiPrinterFill */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/@react-icons/all-files/ri/RiPrinterFill.js"); +var flowbite_react_1 = __webpack_require__(/*! flowbite-react */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/flowbite-react/dist/cjs/index.cjs"); var ButtonComponent = /** @class */function (_super) { __extends(ButtonComponent, _super); function ButtonComponent(props) { var _this = _super.call(this, props) || this; - _this.orderState = tsyringe__WEBPACK_IMPORTED_MODULE_12__.container.resolve(_state_order__WEBPACK_IMPORTED_MODULE_11__.OrderState); - _this.orderService = tsyringe__WEBPACK_IMPORTED_MODULE_12__.container.resolve(_services_order__WEBPACK_IMPORTED_MODULE_13__.OrderService); + _this.orderState = tsyringe_1.container.resolve(order_1.OrderState); + _this.orderService = tsyringe_1.container.resolve(order_2.OrderService); _this.state = { disabled: true }; @@ -1410,7 +1384,7 @@ var ButtonComponent = /** @class */function (_super) { } ButtonComponent.prototype.componentDidMount = function () { var _this = this; - this.orderState.getCurrentOrder().pipe((0,rxjs__WEBPACK_IMPORTED_MODULE_16__.debounceTime)(2000)).subscribe(function (e) { + this.orderState.getCurrentOrder().pipe((0, rxjs_1.debounceTime)(2000)).subscribe(function (e) { return _this.saveButton(e); }); }; @@ -1450,31 +1424,37 @@ var ButtonComponent = /** @class */function (_super) { }; ButtonComponent.prototype.render = function () { var _this = this; - return react__WEBPACK_IMPORTED_MODULE_14___default().createElement("div", { + return (0, jsx_runtime_1.jsxs)("div", __assign({ className: "flex gap-3" - }, react__WEBPACK_IMPORTED_MODULE_14___default().createElement(flowbite_react__WEBPACK_IMPORTED_MODULE_15__.Button, { - size: "xs", - color: "info", - disabled: this.state.disabled, - onClick: function onClick(e) { - return _this.handleSave(e); - } - }, react__WEBPACK_IMPORTED_MODULE_14___default().createElement(_react_icons_all_files_ri_RiSaveFill__WEBPACK_IMPORTED_MODULE_17__.RiSaveFill, { - className: "mr-2 h-5 w-5" - }), " Speichern"), react__WEBPACK_IMPORTED_MODULE_14___default().createElement(flowbite_react__WEBPACK_IMPORTED_MODULE_15__.Button, { - size: "xs", - color: "success", - disabled: !this.orderState.getCurrentOrder().value.saved, - onClick: function onClick(e) { - return _this.handlePrint(e); - } - }, react__WEBPACK_IMPORTED_MODULE_14___default().createElement(_react_icons_all_files_ri_RiPrinterFill__WEBPACK_IMPORTED_MODULE_18__.RiPrinterFill, { - className: "mr-2 h-5 w-5" - }), " Drucken")); + }, { + children: [(0, jsx_runtime_1.jsxs)(flowbite_react_1.Button, __assign({ + size: "xs", + color: "info", + disabled: this.state.disabled, + onClick: function onClick(e) { + return _this.handleSave(e); + } + }, { + children: [(0, jsx_runtime_1.jsx)(RiSaveFill_1.RiSaveFill, { + className: "mr-2 h-5 w-5" + }), " Speichern"] + })), (0, jsx_runtime_1.jsxs)(flowbite_react_1.Button, __assign({ + size: "xs", + color: "success", + disabled: !this.orderState.getCurrentOrder().value.saved, + onClick: function onClick(e) { + return _this.handlePrint(e); + } + }, { + children: [(0, jsx_runtime_1.jsx)(RiPrinterFill_1.RiPrinterFill, { + className: "mr-2 h-5 w-5" + }), " Drucken"] + }))] + })); }; return ButtonComponent; -}(react__WEBPACK_IMPORTED_MODULE_14__.Component); -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (ButtonComponent); +}(react_1.Component); +exports["default"] = ButtonComponent; /***/ }), @@ -1482,51 +1462,22 @@ var ButtonComponent = /** @class */function (_super) { /*!***********************************************************************************!*\ !*** ./var/plugins/System/PSC/Invoice/Webpack/src/modules/calc/CalcComponent.tsx ***! \***********************************************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var core_js_modules_es_object_set_prototype_of_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.object.set-prototype-of.js */ "./node_modules/core-js/modules/es.object.set-prototype-of.js"); -/* harmony import */ var core_js_modules_es_object_set_prototype_of_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_object_set_prototype_of_js__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var core_js_modules_es_object_create_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es.object.create.js */ "./node_modules/core-js/modules/es.object.create.js"); -/* harmony import */ var core_js_modules_es_object_create_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_object_create_js__WEBPACK_IMPORTED_MODULE_1__); -/* harmony import */ var core_js_modules_es_object_to_string_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! core-js/modules/es.object.to-string.js */ "./node_modules/core-js/modules/es.object.to-string.js"); -/* harmony import */ var core_js_modules_es_object_to_string_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_object_to_string_js__WEBPACK_IMPORTED_MODULE_2__); -/* harmony import */ var core_js_modules_es_promise_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! core-js/modules/es.promise.js */ "./node_modules/core-js/modules/es.promise.js"); -/* harmony import */ var core_js_modules_es_promise_js__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_promise_js__WEBPACK_IMPORTED_MODULE_3__); -/* harmony import */ var core_js_modules_es_symbol_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! core-js/modules/es.symbol.js */ "./node_modules/core-js/modules/es.symbol.js"); -/* harmony import */ var core_js_modules_es_symbol_js__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_symbol_js__WEBPACK_IMPORTED_MODULE_4__); -/* harmony import */ var core_js_modules_es_symbol_description_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! core-js/modules/es.symbol.description.js */ "./node_modules/core-js/modules/es.symbol.description.js"); -/* harmony import */ var core_js_modules_es_symbol_description_js__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_symbol_description_js__WEBPACK_IMPORTED_MODULE_5__); -/* harmony import */ var core_js_modules_es_symbol_iterator_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! core-js/modules/es.symbol.iterator.js */ "./node_modules/core-js/modules/es.symbol.iterator.js"); -/* harmony import */ var core_js_modules_es_symbol_iterator_js__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_symbol_iterator_js__WEBPACK_IMPORTED_MODULE_6__); -/* harmony import */ var core_js_modules_es_array_iterator_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! core-js/modules/es.array.iterator.js */ "./node_modules/core-js/modules/es.array.iterator.js"); -/* harmony import */ var core_js_modules_es_array_iterator_js__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_iterator_js__WEBPACK_IMPORTED_MODULE_7__); -/* harmony import */ var core_js_modules_es_string_iterator_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! core-js/modules/es.string.iterator.js */ "./node_modules/core-js/modules/es.string.iterator.js"); -/* harmony import */ var core_js_modules_es_string_iterator_js__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_iterator_js__WEBPACK_IMPORTED_MODULE_8__); -/* harmony import */ var core_js_modules_web_dom_collections_iterator_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! core-js/modules/web.dom-collections.iterator.js */ "./node_modules/core-js/modules/web.dom-collections.iterator.js"); -/* harmony import */ var core_js_modules_web_dom_collections_iterator_js__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_web_dom_collections_iterator_js__WEBPACK_IMPORTED_MODULE_9__); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! react */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/react/index.js"); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_10___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_10__); -/* harmony import */ var _model_order__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../../model/order */ "./var/plugins/System/PSC/Invoice/Webpack/src/model/order.ts"); -/* harmony import */ var tsyringe__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! tsyringe */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/tsyringe/dist/esm5/index.js"); -/* harmony import */ var _state_order__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../../state/order */ "./var/plugins/System/PSC/Invoice/Webpack/src/state/order.ts"); -/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! rxjs */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/rxjs/dist/esm5/internal/operators/debounceTime.js"); -/* harmony import */ var _services_order__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ../../services/order */ "./var/plugins/System/PSC/Invoice/Webpack/src/services/order.ts"); -/* harmony import */ var _base_Currency__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ../base/Currency */ "./var/plugins/System/PSC/Invoice/Webpack/src/modules/base/Currency.tsx"); +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - - - - - - -var __extends = undefined && undefined.__extends || function () { +__webpack_require__(/*! core-js/modules/es.object.set-prototype-of.js */ "./node_modules/core-js/modules/es.object.set-prototype-of.js"); +__webpack_require__(/*! core-js/modules/es.object.create.js */ "./node_modules/core-js/modules/es.object.create.js"); +__webpack_require__(/*! core-js/modules/es.object.assign.js */ "./node_modules/core-js/modules/es.object.assign.js"); +__webpack_require__(/*! core-js/modules/es.object.to-string.js */ "./node_modules/core-js/modules/es.object.to-string.js"); +__webpack_require__(/*! core-js/modules/es.promise.js */ "./node_modules/core-js/modules/es.promise.js"); +__webpack_require__(/*! core-js/modules/es.symbol.js */ "./node_modules/core-js/modules/es.symbol.js"); +__webpack_require__(/*! core-js/modules/es.symbol.description.js */ "./node_modules/core-js/modules/es.symbol.description.js"); +__webpack_require__(/*! core-js/modules/es.symbol.iterator.js */ "./node_modules/core-js/modules/es.symbol.iterator.js"); +__webpack_require__(/*! core-js/modules/es.array.iterator.js */ "./node_modules/core-js/modules/es.array.iterator.js"); +__webpack_require__(/*! core-js/modules/es.string.iterator.js */ "./node_modules/core-js/modules/es.string.iterator.js"); +__webpack_require__(/*! core-js/modules/web.dom-collections.iterator.js */ "./node_modules/core-js/modules/web.dom-collections.iterator.js"); +var __extends = this && this.__extends || function () { var _extendStatics = function extendStatics(d, b) { _extendStatics = Object.setPrototypeOf || { __proto__: [] @@ -1546,7 +1497,17 @@ var __extends = undefined && undefined.__extends || function () { d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); }; }(); -var __awaiter = undefined && undefined.__awaiter || function (thisArg, _arguments, P, generator) { +var __assign = this && this.__assign || function () { + __assign = Object.assign || function (t) { + for (var s, i = 1, n = arguments.length; i < n; i++) { + s = arguments[i]; + for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; + } + return t; + }; + return __assign.apply(this, arguments); +}; +var __awaiter = this && this.__awaiter || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); @@ -1573,7 +1534,7 @@ var __awaiter = undefined && undefined.__awaiter || function (thisArg, _argument step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; -var __generator = undefined && undefined.__generator || function (thisArg, body) { +var __generator = this && this.__generator || function (thisArg, body) { var _ = { label: 0, sent: function sent() { @@ -1661,27 +1622,34 @@ var __generator = undefined && undefined.__generator || function (thisArg, body) }; } }; - - - - - - - +var __importDefault = this && this.__importDefault || function (mod) { + return mod && mod.__esModule ? mod : { + "default": mod + }; +}; +exports.__esModule = true; +var jsx_runtime_1 = __webpack_require__(/*! react/jsx-runtime */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/react/jsx-runtime.js"); +var react_1 = __importDefault(__webpack_require__(/*! react */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/react/index.js")); +var order_1 = __webpack_require__(/*! ../../model/order */ "./var/plugins/System/PSC/Invoice/Webpack/src/model/order.ts"); +var tsyringe_1 = __webpack_require__(/*! tsyringe */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/tsyringe/dist/esm5/index.js"); +var order_2 = __webpack_require__(/*! ../../state/order */ "./var/plugins/System/PSC/Invoice/Webpack/src/state/order.ts"); +var rxjs_1 = __webpack_require__(/*! rxjs */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/rxjs/dist/cjs/index.js"); +var order_3 = __webpack_require__(/*! ../../services/order */ "./var/plugins/System/PSC/Invoice/Webpack/src/services/order.ts"); +var Currency_1 = __importDefault(__webpack_require__(/*! ../base/Currency */ "./var/plugins/System/PSC/Invoice/Webpack/src/modules/base/Currency.tsx")); var CalcComponent = /** @class */function (_super) { __extends(CalcComponent, _super); function CalcComponent(props) { var _this = _super.call(this, props) || this; _this.state = { - order: new _model_order__WEBPACK_IMPORTED_MODULE_11__.Order() + order: new order_1.Order() }; - _this.orderState = tsyringe__WEBPACK_IMPORTED_MODULE_12__.container.resolve(_state_order__WEBPACK_IMPORTED_MODULE_13__.OrderState); - _this.orderService = tsyringe__WEBPACK_IMPORTED_MODULE_12__.container.resolve(_services_order__WEBPACK_IMPORTED_MODULE_14__.OrderService); + _this.orderState = tsyringe_1.container.resolve(order_2.OrderState); + _this.orderService = tsyringe_1.container.resolve(order_3.OrderService); return _this; } CalcComponent.prototype.componentDidMount = function () { var _this = this; - this.orderState.getCurrentOrder().pipe((0,rxjs__WEBPACK_IMPORTED_MODULE_16__.debounceTime)(2000)).subscribe(function (e) { + this.orderState.getCurrentOrder().pipe((0, rxjs_1.debounceTime)(2000)).subscribe(function (e) { return _this.calc(e); }); }; @@ -1705,19 +1673,23 @@ var CalcComponent = /** @class */function (_super) { }); }; CalcComponent.prototype.render = function () { - return react__WEBPACK_IMPORTED_MODULE_10___default().createElement("h3", null, react__WEBPACK_IMPORTED_MODULE_10___default().createElement("small", { - className: "text-body-secondary" - }, " Netto: ", react__WEBPACK_IMPORTED_MODULE_10___default().createElement(_base_Currency__WEBPACK_IMPORTED_MODULE_15__["default"], { - price: this.state.order.net - }), " + MwSt.: ", react__WEBPACK_IMPORTED_MODULE_10___default().createElement(_base_Currency__WEBPACK_IMPORTED_MODULE_15__["default"], { - price: this.state.order.vat - }), " ="), " Brutto: ", react__WEBPACK_IMPORTED_MODULE_10___default().createElement(_base_Currency__WEBPACK_IMPORTED_MODULE_15__["default"], { - price: this.state.order.gross - })); + return (0, jsx_runtime_1.jsxs)("h3", { + children: [(0, jsx_runtime_1.jsxs)("small", __assign({ + className: "text-body-secondary" + }, { + children: [" Netto: ", (0, jsx_runtime_1.jsx)(Currency_1["default"], { + price: this.state.order.net + }), " + MwSt.: ", (0, jsx_runtime_1.jsx)(Currency_1["default"], { + price: this.state.order.vat + }), " ="] + })), " Brutto: ", (0, jsx_runtime_1.jsx)(Currency_1["default"], { + price: this.state.order.gross + })] + }); }; return CalcComponent; -}((react__WEBPACK_IMPORTED_MODULE_10___default().Component)); -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (CalcComponent); +}(react_1["default"].Component); +exports["default"] = CalcComponent; /***/ }), @@ -1725,28 +1697,58 @@ var CalcComponent = /** @class */function (_super) { /*!**************************************************************************************!*\ !*** ./var/plugins/System/PSC/Invoice/Webpack/src/modules/contact/AddressDetail.tsx ***! \**************************************************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! prop-types */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/prop-types/index.js"); -/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_2__); -/* harmony import */ var _model_address__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../model/address */ "./var/plugins/System/PSC/Invoice/Webpack/src/model/address.ts"); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/react/index.js"); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__); +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { +__webpack_require__(/*! core-js/modules/es.object.create.js */ "./node_modules/core-js/modules/es.object.create.js"); +__webpack_require__(/*! core-js/modules/es.object.get-own-property-descriptor.js */ "./node_modules/core-js/modules/es.object.get-own-property-descriptor.js"); +__webpack_require__(/*! core-js/modules/es.object.define-property.js */ "./node_modules/core-js/modules/es.object.define-property.js"); +var __createBinding = this && this.__createBinding || (Object.create ? function (o, m, k, k2) { + if (k2 === undefined) k2 = k; + var desc = Object.getOwnPropertyDescriptor(m, k); + if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { + desc = { + enumerable: true, + get: function get() { + return m[k]; + } + }; + } + Object.defineProperty(o, k2, desc); +} : function (o, m, k, k2) { + if (k2 === undefined) k2 = k; + o[k2] = m[k]; +}); +var __setModuleDefault = this && this.__setModuleDefault || (Object.create ? function (o, v) { + Object.defineProperty(o, "default", { + enumerable: true, + value: v + }); +} : function (o, v) { + o["default"] = v; +}); +var __importStar = this && this.__importStar || function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); + __setModuleDefault(result, mod); + return result; +}; +exports.__esModule = true; +var jsx_runtime_1 = __webpack_require__(/*! react/jsx-runtime */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/react/jsx-runtime.js"); +var PropTypes = __importStar(__webpack_require__(/*! prop-types */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/prop-types/index.js")); +var address_1 = __webpack_require__(/*! ../../model/address */ "./var/plugins/System/PSC/Invoice/Webpack/src/model/address.ts"); var AddressDetail = function AddressDetail(_a) { var address = _a.address; - return react__WEBPACK_IMPORTED_MODULE_1___default().createElement("small", null, address.company, " ", address.firstname, " ", address.lastname, " ", address.street, " ", address.houseNumber, " ", address.country, " ", address.zip, " ", address.city); + return (0, jsx_runtime_1.jsxs)("small", { + children: [address.company, " ", address.firstname, " ", address.lastname, " ", address.street, " ", address.houseNumber, " ", address.country, " ", address.zip, " ", address.city] + }); }; AddressDetail.propTypes = { - address: prop_types__WEBPACK_IMPORTED_MODULE_2__.instanceOf(_model_address__WEBPACK_IMPORTED_MODULE_0__.Address) + address: PropTypes.instanceOf(address_1.Address) }; -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (AddressDetail); +exports["default"] = AddressDetail; /***/ }), @@ -1754,51 +1756,86 @@ AddressDetail.propTypes = { /*!*************************************************************************************!*\ !*** ./var/plugins/System/PSC/Invoice/Webpack/src/modules/contact/AddressModal.tsx ***! \*************************************************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var core_js_modules_es_array_for_each_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.array.for-each.js */ "./node_modules/core-js/modules/es.array.for-each.js"); -/* harmony import */ var core_js_modules_es_array_for_each_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_for_each_js__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var core_js_modules_es_object_to_string_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es.object.to-string.js */ "./node_modules/core-js/modules/es.object.to-string.js"); -/* harmony import */ var core_js_modules_es_object_to_string_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_object_to_string_js__WEBPACK_IMPORTED_MODULE_1__); -/* harmony import */ var core_js_modules_web_dom_collections_for_each_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! core-js/modules/web.dom-collections.for-each.js */ "./node_modules/core-js/modules/web.dom-collections.for-each.js"); -/* harmony import */ var core_js_modules_web_dom_collections_for_each_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_web_dom_collections_for_each_js__WEBPACK_IMPORTED_MODULE_2__); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/react/index.js"); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_3__); -/* harmony import */ var _ebay_nice_modal_react__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @ebay/nice-modal-react */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/@ebay/nice-modal-react/lib/esm/index.js"); -/* harmony import */ var _base_Button__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../base/Button */ "./var/plugins/System/PSC/Invoice/Webpack/src/modules/base/Button.tsx"); -/* harmony import */ var _rjsf_validator_ajv6__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @rjsf/validator-ajv6 */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/@rjsf/validator-ajv6/lib/index.js"); -/* harmony import */ var _rjsf_core__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @rjsf/core */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/@rjsf/core/lib/index.js"); -/* harmony import */ var _services_country__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../../services/country */ "./var/plugins/System/PSC/Invoice/Webpack/src/services/country.ts"); -/* harmony import */ var flowbite_react__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! flowbite-react */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/flowbite-react/dist/esm/index.mjs"); +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - - - - - - - -var Addressdiv = _ebay_nice_modal_react__WEBPACK_IMPORTED_MODULE_4__["default"].create(function (_a) { +__webpack_require__(/*! core-js/modules/es.object.assign.js */ "./node_modules/core-js/modules/es.object.assign.js"); +__webpack_require__(/*! core-js/modules/es.object.create.js */ "./node_modules/core-js/modules/es.object.create.js"); +__webpack_require__(/*! core-js/modules/es.object.get-own-property-descriptor.js */ "./node_modules/core-js/modules/es.object.get-own-property-descriptor.js"); +__webpack_require__(/*! core-js/modules/es.object.define-property.js */ "./node_modules/core-js/modules/es.object.define-property.js"); +__webpack_require__(/*! core-js/modules/es.array.for-each.js */ "./node_modules/core-js/modules/es.array.for-each.js"); +__webpack_require__(/*! core-js/modules/es.object.to-string.js */ "./node_modules/core-js/modules/es.object.to-string.js"); +__webpack_require__(/*! core-js/modules/web.dom-collections.for-each.js */ "./node_modules/core-js/modules/web.dom-collections.for-each.js"); +var __assign = this && this.__assign || function () { + __assign = Object.assign || function (t) { + for (var s, i = 1, n = arguments.length; i < n; i++) { + s = arguments[i]; + for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; + } + return t; + }; + return __assign.apply(this, arguments); +}; +var __createBinding = this && this.__createBinding || (Object.create ? function (o, m, k, k2) { + if (k2 === undefined) k2 = k; + var desc = Object.getOwnPropertyDescriptor(m, k); + if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { + desc = { + enumerable: true, + get: function get() { + return m[k]; + } + }; + } + Object.defineProperty(o, k2, desc); +} : function (o, m, k, k2) { + if (k2 === undefined) k2 = k; + o[k2] = m[k]; +}); +var __setModuleDefault = this && this.__setModuleDefault || (Object.create ? function (o, v) { + Object.defineProperty(o, "default", { + enumerable: true, + value: v + }); +} : function (o, v) { + o["default"] = v; +}); +var __importStar = this && this.__importStar || function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); + __setModuleDefault(result, mod); + return result; +}; +var __importDefault = this && this.__importDefault || function (mod) { + return mod && mod.__esModule ? mod : { + "default": mod + }; +}; +exports.__esModule = true; +var jsx_runtime_1 = __webpack_require__(/*! react/jsx-runtime */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/react/jsx-runtime.js"); +var react_1 = __webpack_require__(/*! react */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/react/index.js"); +var nice_modal_react_1 = __importStar(__webpack_require__(/*! @ebay/nice-modal-react */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/@ebay/nice-modal-react/lib/esm/index.js")); +var Button_1 = __importDefault(__webpack_require__(/*! ../base/Button */ "./var/plugins/System/PSC/Invoice/Webpack/src/modules/base/Button.tsx")); +var validator_ajv6_1 = __importDefault(__webpack_require__(/*! @rjsf/validator-ajv6 */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/@rjsf/validator-ajv6/lib/index.js")); +var core_1 = __importDefault(__webpack_require__(/*! @rjsf/core */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/@rjsf/core/lib/index.js")); +var country_1 = __webpack_require__(/*! ../../services/country */ "./var/plugins/System/PSC/Invoice/Webpack/src/services/country.ts"); +var flowbite_react_1 = __webpack_require__(/*! flowbite-react */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/flowbite-react/dist/cjs/index.cjs"); +var Addressdiv = nice_modal_react_1["default"].create(function (_a) { var title = _a.title, action = _a.action, address = _a.address, shop = _a.shop; - var country_api = new _services_country__WEBPACK_IMPORTED_MODULE_8__.CountryService(); - var modal = (0,_ebay_nice_modal_react__WEBPACK_IMPORTED_MODULE_4__.useModal)(); - var _b = (0,react__WEBPACK_IMPORTED_MODULE_3__.useState)({}), + var country_api = new country_1.CountryService(); + var modal = (0, nice_modal_react_1.useModal)(); + var _b = (0, react_1.useState)({}), formData = _b[0], setFormData = _b[1]; - var _c = (0,react__WEBPACK_IMPORTED_MODULE_3__.useState)({}), + var _c = (0, react_1.useState)({}), schema = _c[0], setSchema = _c[1]; - (0,react__WEBPACK_IMPORTED_MODULE_3__.useEffect)(function () { + (0, react_1.useEffect)(function () { if (address) { setFormData({ email: address.email, @@ -1815,7 +1852,7 @@ var Addressdiv = _ebay_nice_modal_react__WEBPACK_IMPORTED_MODULE_4__["default"]. }); } }, [address]); - (0,react__WEBPACK_IMPORTED_MODULE_3__.useEffect)(function () { + (0, react_1.useEffect)(function () { country_api.getCountry(shop).then(function (data) { var countrys = []; data.forEach(function (item) { @@ -1890,42 +1927,52 @@ var Addressdiv = _ebay_nice_modal_react__WEBPACK_IMPORTED_MODULE_4__["default"]. } } }; - return react__WEBPACK_IMPORTED_MODULE_3___default().createElement(flowbite_react__WEBPACK_IMPORTED_MODULE_9__.Modal, { + return (0, jsx_runtime_1.jsxs)(flowbite_react_1.Modal, __assign({ show: modal.visible, onClose: function onClose() { return modal.remove(); } - }, react__WEBPACK_IMPORTED_MODULE_3___default().createElement(flowbite_react__WEBPACK_IMPORTED_MODULE_9__.Modal.Header, null, react__WEBPACK_IMPORTED_MODULE_3___default().createElement("div", null, title)), react__WEBPACK_IMPORTED_MODULE_3___default().createElement(flowbite_react__WEBPACK_IMPORTED_MODULE_9__.Modal.Body, null, action === "Save" && react__WEBPACK_IMPORTED_MODULE_3___default().createElement(_rjsf_core__WEBPACK_IMPORTED_MODULE_7__["default"], { - schema: schema, - formData: formData, - uiSchema: uiSchema, - validator: _rjsf_validator_ajv6__WEBPACK_IMPORTED_MODULE_6__["default"], - onChange: function onChange(e) { - return setFormData(e.formData); - } - })), react__WEBPACK_IMPORTED_MODULE_3___default().createElement(flowbite_react__WEBPACK_IMPORTED_MODULE_9__.Modal.Footer, null, react__WEBPACK_IMPORTED_MODULE_3___default().createElement(_base_Button__WEBPACK_IMPORTED_MODULE_5__["default"], { - type: 3, - variant: "success", - onClick: function onClick() { - if (action === "Save") { - if (formData) { - modal.resolve(formData); + }, { + children: [(0, jsx_runtime_1.jsx)(flowbite_react_1.Modal.Header, { + children: (0, jsx_runtime_1.jsx)("div", { + children: title + }) + }), (0, jsx_runtime_1.jsx)(flowbite_react_1.Modal.Body, { + children: action === "Save" && (0, jsx_runtime_1.jsx)(core_1["default"], { + schema: schema, + formData: formData, + uiSchema: uiSchema, + validator: validator_ajv6_1["default"], + onChange: function onChange(e) { + return setFormData(e.formData); + } + }) + }), (0, jsx_runtime_1.jsxs)(flowbite_react_1.Modal.Footer, { + children: [(0, jsx_runtime_1.jsx)(Button_1["default"], { + type: 3, + variant: "success", + onClick: function onClick() { + if (action === "Save") { + if (formData) { + modal.resolve(formData); + modal.remove(); + } + } else { + modal.resolve(); + modal.remove(); + } + } + }), (0, jsx_runtime_1.jsx)(Button_1["default"], { + type: 4, + variant: "warning", + onClick: function onClick() { modal.remove(); } - } else { - modal.resolve(); - modal.remove(); - } - } - }), react__WEBPACK_IMPORTED_MODULE_3___default().createElement(_base_Button__WEBPACK_IMPORTED_MODULE_5__["default"], { - type: 4, - variant: "warning", - onClick: function onClick() { - modal.remove(); - } - }))); + })] + })] + })); }); -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Addressdiv); +exports["default"] = Addressdiv; /***/ }), @@ -1933,36 +1980,76 @@ var Addressdiv = _ebay_nice_modal_react__WEBPACK_IMPORTED_MODULE_4__["default"]. /*!**********************************************************************************************!*\ !*** ./var/plugins/System/PSC/Invoice/Webpack/src/modules/contact/AddressModalComponent.tsx ***! \**********************************************************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! prop-types */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/prop-types/index.js"); -/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_6__); -/* harmony import */ var _base_Button__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../base/Button */ "./var/plugins/System/PSC/Invoice/Webpack/src/modules/base/Button.tsx"); -/* harmony import */ var _AddressModal__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./AddressModal */ "./var/plugins/System/PSC/Invoice/Webpack/src/modules/contact/AddressModal.tsx"); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/react/index.js"); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__); -/* harmony import */ var _ebay_nice_modal_react__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @ebay/nice-modal-react */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/@ebay/nice-modal-react/lib/esm/index.js"); -/* harmony import */ var _model_address__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../model/address */ "./var/plugins/System/PSC/Invoice/Webpack/src/model/address.ts"); -/* harmony import */ var _model_shop__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../model/shop */ "./var/plugins/System/PSC/Invoice/Webpack/src/model/shop.ts"); - - - - - +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { +__webpack_require__(/*! core-js/modules/es.object.assign.js */ "./node_modules/core-js/modules/es.object.assign.js"); +__webpack_require__(/*! core-js/modules/es.object.create.js */ "./node_modules/core-js/modules/es.object.create.js"); +__webpack_require__(/*! core-js/modules/es.object.get-own-property-descriptor.js */ "./node_modules/core-js/modules/es.object.get-own-property-descriptor.js"); +__webpack_require__(/*! core-js/modules/es.object.define-property.js */ "./node_modules/core-js/modules/es.object.define-property.js"); +var __assign = this && this.__assign || function () { + __assign = Object.assign || function (t) { + for (var s, i = 1, n = arguments.length; i < n; i++) { + s = arguments[i]; + for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; + } + return t; + }; + return __assign.apply(this, arguments); +}; +var __createBinding = this && this.__createBinding || (Object.create ? function (o, m, k, k2) { + if (k2 === undefined) k2 = k; + var desc = Object.getOwnPropertyDescriptor(m, k); + if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { + desc = { + enumerable: true, + get: function get() { + return m[k]; + } + }; + } + Object.defineProperty(o, k2, desc); +} : function (o, m, k, k2) { + if (k2 === undefined) k2 = k; + o[k2] = m[k]; +}); +var __setModuleDefault = this && this.__setModuleDefault || (Object.create ? function (o, v) { + Object.defineProperty(o, "default", { + enumerable: true, + value: v + }); +} : function (o, v) { + o["default"] = v; +}); +var __importStar = this && this.__importStar || function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); + __setModuleDefault(result, mod); + return result; +}; +var __importDefault = this && this.__importDefault || function (mod) { + return mod && mod.__esModule ? mod : { + "default": mod + }; +}; +exports.__esModule = true; +var jsx_runtime_1 = __webpack_require__(/*! react/jsx-runtime */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/react/jsx-runtime.js"); +var PropTypes = __importStar(__webpack_require__(/*! prop-types */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/prop-types/index.js")); +var Button_1 = __importDefault(__webpack_require__(/*! ../base/Button */ "./var/plugins/System/PSC/Invoice/Webpack/src/modules/base/Button.tsx")); +var AddressModal_1 = __importDefault(__webpack_require__(/*! ./AddressModal */ "./var/plugins/System/PSC/Invoice/Webpack/src/modules/contact/AddressModal.tsx")); +var react_1 = __webpack_require__(/*! react */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/react/index.js"); +var nice_modal_react_1 = __webpack_require__(/*! @ebay/nice-modal-react */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/@ebay/nice-modal-react/lib/esm/index.js"); +var address_1 = __webpack_require__(/*! ../../model/address */ "./var/plugins/System/PSC/Invoice/Webpack/src/model/address.ts"); +var shop_1 = __webpack_require__(/*! ../../model/shop */ "./var/plugins/System/PSC/Invoice/Webpack/src/model/shop.ts"); var AddressModalComponent = function AddressModalComponent(_a) { var handleAdd = _a.handleAdd, handleEdit = _a.handleEdit, address = _a.address, shop = _a.shop; - var addressModal = (0,_ebay_nice_modal_react__WEBPACK_IMPORTED_MODULE_3__.useModal)(_AddressModal__WEBPACK_IMPORTED_MODULE_1__["default"]); - var showAddModal = (0,react__WEBPACK_IMPORTED_MODULE_2__.useCallback)(function () { + var addressModal = (0, nice_modal_react_1.useModal)(AddressModal_1["default"]); + var showAddModal = (0, react_1.useCallback)(function () { addressModal.show({ title: 'Add Address', action: 'Save', @@ -1971,7 +2058,7 @@ var AddressModalComponent = function AddressModalComponent(_a) { addAddress(formData); }); }, [addressModal]); - var showEditModal = (0,react__WEBPACK_IMPORTED_MODULE_2__.useCallback)(function (address) { + var showEditModal = (0, react_1.useCallback)(function (address) { addressModal.show({ title: 'Edit Address', action: 'Save', @@ -1986,31 +2073,33 @@ var AddressModalComponent = function AddressModalComponent(_a) { handleEdit(address); }; var addAddress = function addAddress(formData) { - address = new _model_address__WEBPACK_IMPORTED_MODULE_4__.Address(); + address = new address_1.Address(); address.parseFromFormData(formData); handleAdd(address); }; - return react__WEBPACK_IMPORTED_MODULE_2___default().createElement("div", { + return (0, jsx_runtime_1.jsxs)("div", __assign({ className: 'flex gap-1' - }, react__WEBPACK_IMPORTED_MODULE_2___default().createElement(_base_Button__WEBPACK_IMPORTED_MODULE_0__["default"], { - type: 1, - variant: "success", - onClick: showAddModal - }), react__WEBPACK_IMPORTED_MODULE_2___default().createElement(_base_Button__WEBPACK_IMPORTED_MODULE_0__["default"], { - type: 2, - variant: "info", - onClick: function onClick() { - showEditModal(address); - } + }, { + children: [(0, jsx_runtime_1.jsx)(Button_1["default"], { + type: 1, + variant: "success", + onClick: showAddModal + }), (0, jsx_runtime_1.jsx)(Button_1["default"], { + type: 2, + variant: "info", + onClick: function onClick() { + showEditModal(address); + } + })] })); }; AddressModalComponent.propTypes = { - handleAdd: prop_types__WEBPACK_IMPORTED_MODULE_6__.func, - handleEdit: prop_types__WEBPACK_IMPORTED_MODULE_6__.func, - address: prop_types__WEBPACK_IMPORTED_MODULE_6__.instanceOf(_model_address__WEBPACK_IMPORTED_MODULE_4__.Address), - shop: prop_types__WEBPACK_IMPORTED_MODULE_6__.instanceOf(_model_shop__WEBPACK_IMPORTED_MODULE_5__.Shop) + handleAdd: PropTypes.func, + handleEdit: PropTypes.func, + address: PropTypes.instanceOf(address_1.Address), + shop: PropTypes.instanceOf(shop_1.Shop) }; -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (AddressModalComponent); +exports["default"] = AddressModalComponent; /***/ }), @@ -2018,54 +2107,65 @@ AddressModalComponent.propTypes = { /*!**************************************************************************************!*\ !*** ./var/plugins/System/PSC/Invoice/Webpack/src/modules/contact/AddressSelect.tsx ***! \**************************************************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var core_js_modules_es_object_to_string_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.object.to-string.js */ "./node_modules/core-js/modules/es.object.to-string.js"); -/* harmony import */ var core_js_modules_es_object_to_string_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_object_to_string_js__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var core_js_modules_es_promise_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es.promise.js */ "./node_modules/core-js/modules/es.promise.js"); -/* harmony import */ var core_js_modules_es_promise_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_promise_js__WEBPACK_IMPORTED_MODULE_1__); -/* harmony import */ var core_js_modules_es_symbol_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! core-js/modules/es.symbol.js */ "./node_modules/core-js/modules/es.symbol.js"); -/* harmony import */ var core_js_modules_es_symbol_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_symbol_js__WEBPACK_IMPORTED_MODULE_2__); -/* harmony import */ var core_js_modules_es_symbol_description_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! core-js/modules/es.symbol.description.js */ "./node_modules/core-js/modules/es.symbol.description.js"); -/* harmony import */ var core_js_modules_es_symbol_description_js__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_symbol_description_js__WEBPACK_IMPORTED_MODULE_3__); -/* harmony import */ var core_js_modules_es_symbol_iterator_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! core-js/modules/es.symbol.iterator.js */ "./node_modules/core-js/modules/es.symbol.iterator.js"); -/* harmony import */ var core_js_modules_es_symbol_iterator_js__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_symbol_iterator_js__WEBPACK_IMPORTED_MODULE_4__); -/* harmony import */ var core_js_modules_es_array_iterator_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! core-js/modules/es.array.iterator.js */ "./node_modules/core-js/modules/es.array.iterator.js"); -/* harmony import */ var core_js_modules_es_array_iterator_js__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_iterator_js__WEBPACK_IMPORTED_MODULE_5__); -/* harmony import */ var core_js_modules_es_string_iterator_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! core-js/modules/es.string.iterator.js */ "./node_modules/core-js/modules/es.string.iterator.js"); -/* harmony import */ var core_js_modules_es_string_iterator_js__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_iterator_js__WEBPACK_IMPORTED_MODULE_6__); -/* harmony import */ var core_js_modules_web_dom_collections_iterator_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! core-js/modules/web.dom-collections.iterator.js */ "./node_modules/core-js/modules/web.dom-collections.iterator.js"); -/* harmony import */ var core_js_modules_web_dom_collections_iterator_js__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_web_dom_collections_iterator_js__WEBPACK_IMPORTED_MODULE_7__); -/* harmony import */ var core_js_modules_es_function_name_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! core-js/modules/es.function.name.js */ "./node_modules/core-js/modules/es.function.name.js"); -/* harmony import */ var core_js_modules_es_function_name_js__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_function_name_js__WEBPACK_IMPORTED_MODULE_8__); -/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! prop-types */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/prop-types/index.js"); -/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_20___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_20__); -/* harmony import */ var react_select_async_paginate__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! react-select-async-paginate */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/react-select-async-paginate/dist/esm/index.js"); -/* harmony import */ var _model_contact__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../../model/contact */ "./var/plugins/System/PSC/Invoice/Webpack/src/model/contact.ts"); -/* harmony import */ var _model_address__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../../model/address */ "./var/plugins/System/PSC/Invoice/Webpack/src/model/address.ts"); -/* harmony import */ var tsyringe__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! tsyringe */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/tsyringe/dist/esm5/index.js"); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! react */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/react/index.js"); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_13___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_13__); -/* harmony import */ var _state_order__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ../../state/order */ "./var/plugins/System/PSC/Invoice/Webpack/src/state/order.ts"); -/* harmony import */ var _services_address__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ../../services/address */ "./var/plugins/System/PSC/Invoice/Webpack/src/services/address.ts"); -/* harmony import */ var _AddressModalComponent__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./AddressModalComponent */ "./var/plugins/System/PSC/Invoice/Webpack/src/modules/contact/AddressModalComponent.tsx"); -/* harmony import */ var _base_SelectLabel__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ../base/SelectLabel */ "./var/plugins/System/PSC/Invoice/Webpack/src/modules/base/SelectLabel.tsx"); -/* harmony import */ var _AddressDetail__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ./AddressDetail */ "./var/plugins/System/PSC/Invoice/Webpack/src/modules/contact/AddressDetail.tsx"); -/* harmony import */ var _model_shop__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ../../model/shop */ "./var/plugins/System/PSC/Invoice/Webpack/src/model/shop.ts"); +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - - - - - -var __awaiter = undefined && undefined.__awaiter || function (thisArg, _arguments, P, generator) { +__webpack_require__(/*! core-js/modules/es.object.assign.js */ "./node_modules/core-js/modules/es.object.assign.js"); +__webpack_require__(/*! core-js/modules/es.object.create.js */ "./node_modules/core-js/modules/es.object.create.js"); +__webpack_require__(/*! core-js/modules/es.object.get-own-property-descriptor.js */ "./node_modules/core-js/modules/es.object.get-own-property-descriptor.js"); +__webpack_require__(/*! core-js/modules/es.object.define-property.js */ "./node_modules/core-js/modules/es.object.define-property.js"); +__webpack_require__(/*! core-js/modules/es.object.to-string.js */ "./node_modules/core-js/modules/es.object.to-string.js"); +__webpack_require__(/*! core-js/modules/es.promise.js */ "./node_modules/core-js/modules/es.promise.js"); +__webpack_require__(/*! core-js/modules/es.symbol.js */ "./node_modules/core-js/modules/es.symbol.js"); +__webpack_require__(/*! core-js/modules/es.symbol.description.js */ "./node_modules/core-js/modules/es.symbol.description.js"); +__webpack_require__(/*! core-js/modules/es.symbol.iterator.js */ "./node_modules/core-js/modules/es.symbol.iterator.js"); +__webpack_require__(/*! core-js/modules/es.array.iterator.js */ "./node_modules/core-js/modules/es.array.iterator.js"); +__webpack_require__(/*! core-js/modules/es.string.iterator.js */ "./node_modules/core-js/modules/es.string.iterator.js"); +__webpack_require__(/*! core-js/modules/web.dom-collections.iterator.js */ "./node_modules/core-js/modules/web.dom-collections.iterator.js"); +__webpack_require__(/*! core-js/modules/es.function.name.js */ "./node_modules/core-js/modules/es.function.name.js"); +var __assign = this && this.__assign || function () { + __assign = Object.assign || function (t) { + for (var s, i = 1, n = arguments.length; i < n; i++) { + s = arguments[i]; + for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; + } + return t; + }; + return __assign.apply(this, arguments); +}; +var __createBinding = this && this.__createBinding || (Object.create ? function (o, m, k, k2) { + if (k2 === undefined) k2 = k; + var desc = Object.getOwnPropertyDescriptor(m, k); + if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { + desc = { + enumerable: true, + get: function get() { + return m[k]; + } + }; + } + Object.defineProperty(o, k2, desc); +} : function (o, m, k, k2) { + if (k2 === undefined) k2 = k; + o[k2] = m[k]; +}); +var __setModuleDefault = this && this.__setModuleDefault || (Object.create ? function (o, v) { + Object.defineProperty(o, "default", { + enumerable: true, + value: v + }); +} : function (o, v) { + o["default"] = v; +}); +var __importStar = this && this.__importStar || function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); + __setModuleDefault(result, mod); + return result; +}; +var __awaiter = this && this.__awaiter || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); @@ -2092,7 +2192,7 @@ var __awaiter = undefined && undefined.__awaiter || function (thisArg, _argument step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; -var __generator = undefined && undefined.__generator || function (thisArg, body) { +var __generator = this && this.__generator || function (thisArg, body) { var _ = { label: 0, sent: function sent() { @@ -2180,19 +2280,25 @@ var __generator = undefined && undefined.__generator || function (thisArg, body) }; } }; - - - - - - - - - - - - - +var __importDefault = this && this.__importDefault || function (mod) { + return mod && mod.__esModule ? mod : { + "default": mod + }; +}; +exports.__esModule = true; +var jsx_runtime_1 = __webpack_require__(/*! react/jsx-runtime */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/react/jsx-runtime.js"); +var PropTypes = __importStar(__webpack_require__(/*! prop-types */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/prop-types/index.js")); +var react_select_async_paginate_1 = __webpack_require__(/*! react-select-async-paginate */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/react-select-async-paginate/dist/index.js"); +var contact_1 = __webpack_require__(/*! ../../model/contact */ "./var/plugins/System/PSC/Invoice/Webpack/src/model/contact.ts"); +var address_1 = __webpack_require__(/*! ../../model/address */ "./var/plugins/System/PSC/Invoice/Webpack/src/model/address.ts"); +var tsyringe_1 = __webpack_require__(/*! tsyringe */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/tsyringe/dist/esm5/index.js"); +var react_1 = __webpack_require__(/*! react */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/react/index.js"); +var order_1 = __webpack_require__(/*! ../../state/order */ "./var/plugins/System/PSC/Invoice/Webpack/src/state/order.ts"); +var address_2 = __webpack_require__(/*! ../../services/address */ "./var/plugins/System/PSC/Invoice/Webpack/src/services/address.ts"); +var AddressModalComponent_1 = __importDefault(__webpack_require__(/*! ./AddressModalComponent */ "./var/plugins/System/PSC/Invoice/Webpack/src/modules/contact/AddressModalComponent.tsx")); +var SelectLabel_1 = __webpack_require__(/*! ../base/SelectLabel */ "./var/plugins/System/PSC/Invoice/Webpack/src/modules/base/SelectLabel.tsx"); +var AddressDetail_1 = __importDefault(__webpack_require__(/*! ./AddressDetail */ "./var/plugins/System/PSC/Invoice/Webpack/src/modules/contact/AddressDetail.tsx")); +var shop_1 = __webpack_require__(/*! ../../model/shop */ "./var/plugins/System/PSC/Invoice/Webpack/src/model/shop.ts"); var AddressSelect = function AddressSelect(_a) { var address = _a.address, contact = _a.contact, @@ -2200,23 +2306,23 @@ var AddressSelect = function AddressSelect(_a) { changeAddress = _a.changeAddress, name = _a.name, shop = _a.shop; - var _b = (0,react__WEBPACK_IMPORTED_MODULE_13__.useState)(null), + var _b = (0, react_1.useState)(null), contactUuid = _b[0], setContactUuid = _b[1]; - var _c = (0,react__WEBPACK_IMPORTED_MODULE_13__.useState)(null), + var _c = (0, react_1.useState)(null), localAddress = _c[0], setLocalAddress = _c[1]; - var address_service = new _services_address__WEBPACK_IMPORTED_MODULE_15__.AddressService(); - var orderState = tsyringe__WEBPACK_IMPORTED_MODULE_12__.container.resolve(_state_order__WEBPACK_IMPORTED_MODULE_14__.OrderState); - (0,react__WEBPACK_IMPORTED_MODULE_13__.useEffect)(function () { + var address_service = new address_2.AddressService(); + var orderState = tsyringe_1.container.resolve(order_1.OrderState); + (0, react_1.useEffect)(function () { if (contact.uuid != "") { setContactUuid(contact.uuid); } }, [contact.uuid]); - (0,react__WEBPACK_IMPORTED_MODULE_13__.useEffect)(function () { + (0, react_1.useEffect)(function () { setLocalAddress(address); }, [address]); - var order = tsyringe__WEBPACK_IMPORTED_MODULE_12__.container.resolve(_state_order__WEBPACK_IMPORTED_MODULE_14__.OrderState); + var order = tsyringe_1.container.resolve(order_1.OrderState); var loadOptions = function loadOptions(searchQuery, loadedOptions) { return __awaiter(void 0, void 0, void 0, function () { var data; @@ -2256,46 +2362,51 @@ var AddressSelect = function AddressSelect(_a) { setLocalAddress(option); changeAddress(option, type); }; - return react__WEBPACK_IMPORTED_MODULE_13___default().createElement("div", { + return (0, jsx_runtime_1.jsxs)("div", __assign({ className: 'flex gap-1' - }, react__WEBPACK_IMPORTED_MODULE_13___default().createElement("div", { - className: 'flex-1' - }, react__WEBPACK_IMPORTED_MODULE_13___default().createElement(react_select_async_paginate__WEBPACK_IMPORTED_MODULE_9__.AsyncPaginate, { - defaultOptions: true, - defaultValue: address, - key: JSON.stringify(contactUuid), - loadOptions: loadOptions, - getOptionValue: function getOptionValue(option) { - return option.uuid; - }, - getOptionLabel: function getOptionLabel(option) { - return option.firstname + ' ' + option.lastname; - }, - onChange: setAddressInOrder, - isSearchable: false, - name: name, - placeholder: '', - components: { - Control: _base_SelectLabel__WEBPACK_IMPORTED_MODULE_17__.SelectLabel - } - }), localAddress && react__WEBPACK_IMPORTED_MODULE_13___default().createElement(_AddressDetail__WEBPACK_IMPORTED_MODULE_18__["default"], { - address: localAddress - })), react__WEBPACK_IMPORTED_MODULE_13___default().createElement("div", null, react__WEBPACK_IMPORTED_MODULE_13___default().createElement(_AddressModalComponent__WEBPACK_IMPORTED_MODULE_16__["default"], { - address: localAddress, - handleAdd: handleAdd, - handleEdit: handleEdit, - shop: shop - }))); + }, { + children: [(0, jsx_runtime_1.jsxs)("div", __assign({ + className: 'flex-1' + }, { + children: [(0, jsx_runtime_1.jsx)(react_select_async_paginate_1.AsyncPaginate, { + defaultOptions: true, + defaultValue: address, + loadOptions: loadOptions, + getOptionValue: function getOptionValue(option) { + return option.uuid; + }, + getOptionLabel: function getOptionLabel(option) { + return option.firstname + ' ' + option.lastname; + }, + onChange: setAddressInOrder, + isSearchable: false, + name: name, + placeholder: '', + components: { + Control: SelectLabel_1.SelectLabel + } + }, JSON.stringify(contactUuid)), localAddress && (0, jsx_runtime_1.jsx)(AddressDetail_1["default"], { + address: localAddress + })] + })), (0, jsx_runtime_1.jsx)("div", { + children: (0, jsx_runtime_1.jsx)(AddressModalComponent_1["default"], { + address: localAddress, + handleAdd: handleAdd, + handleEdit: handleEdit, + shop: shop + }) + })] + })); }; AddressSelect.propTypes = { - address: prop_types__WEBPACK_IMPORTED_MODULE_20__.instanceOf(_model_address__WEBPACK_IMPORTED_MODULE_11__.Address), - contact: prop_types__WEBPACK_IMPORTED_MODULE_20__.instanceOf(_model_contact__WEBPACK_IMPORTED_MODULE_10__.Contact), - shop: prop_types__WEBPACK_IMPORTED_MODULE_20__.instanceOf(_model_shop__WEBPACK_IMPORTED_MODULE_19__.Shop), - type: prop_types__WEBPACK_IMPORTED_MODULE_20__.number, - changeAddress: prop_types__WEBPACK_IMPORTED_MODULE_20__.func, - name: prop_types__WEBPACK_IMPORTED_MODULE_20__.string + address: PropTypes.instanceOf(address_1.Address), + contact: PropTypes.instanceOf(contact_1.Contact), + shop: PropTypes.instanceOf(shop_1.Shop), + type: PropTypes.number, + changeAddress: PropTypes.func, + name: PropTypes.string }; -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (AddressSelect); +exports["default"] = AddressSelect; /***/ }), @@ -2303,40 +2414,77 @@ AddressSelect.propTypes = { /*!*****************************************************************************************!*\ !*** ./var/plugins/System/PSC/Invoice/Webpack/src/modules/contact/ContactComponent.tsx ***! \*****************************************************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/react/index.js"); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! prop-types */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/prop-types/index.js"); -/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_9__); -/* harmony import */ var _ContactSelect__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./ContactSelect */ "./var/plugins/System/PSC/Invoice/Webpack/src/modules/contact/ContactSelect.tsx"); -/* harmony import */ var _AddressSelect__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./AddressSelect */ "./var/plugins/System/PSC/Invoice/Webpack/src/modules/contact/AddressSelect.tsx"); -/* harmony import */ var _model_contact__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../model/contact */ "./var/plugins/System/PSC/Invoice/Webpack/src/model/contact.ts"); -/* harmony import */ var _state_order__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../state/order */ "./var/plugins/System/PSC/Invoice/Webpack/src/state/order.ts"); -/* harmony import */ var tsyringe__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! tsyringe */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/tsyringe/dist/esm5/index.js"); -/* harmony import */ var _account_AccountSelectComponent__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../account/AccountSelectComponent */ "./var/plugins/System/PSC/Invoice/Webpack/src/modules/account/AccountSelectComponent.tsx"); -/* harmony import */ var _model_order__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../model/order */ "./var/plugins/System/PSC/Invoice/Webpack/src/model/order.ts"); -/* harmony import */ var _model_shop__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../../model/shop */ "./var/plugins/System/PSC/Invoice/Webpack/src/model/shop.ts"); - - - - - - - - +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { +__webpack_require__(/*! core-js/modules/es.object.assign.js */ "./node_modules/core-js/modules/es.object.assign.js"); +__webpack_require__(/*! core-js/modules/es.object.create.js */ "./node_modules/core-js/modules/es.object.create.js"); +__webpack_require__(/*! core-js/modules/es.object.get-own-property-descriptor.js */ "./node_modules/core-js/modules/es.object.get-own-property-descriptor.js"); +__webpack_require__(/*! core-js/modules/es.object.define-property.js */ "./node_modules/core-js/modules/es.object.define-property.js"); +var __assign = this && this.__assign || function () { + __assign = Object.assign || function (t) { + for (var s, i = 1, n = arguments.length; i < n; i++) { + s = arguments[i]; + for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; + } + return t; + }; + return __assign.apply(this, arguments); +}; +var __createBinding = this && this.__createBinding || (Object.create ? function (o, m, k, k2) { + if (k2 === undefined) k2 = k; + var desc = Object.getOwnPropertyDescriptor(m, k); + if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { + desc = { + enumerable: true, + get: function get() { + return m[k]; + } + }; + } + Object.defineProperty(o, k2, desc); +} : function (o, m, k, k2) { + if (k2 === undefined) k2 = k; + o[k2] = m[k]; +}); +var __setModuleDefault = this && this.__setModuleDefault || (Object.create ? function (o, v) { + Object.defineProperty(o, "default", { + enumerable: true, + value: v + }); +} : function (o, v) { + o["default"] = v; +}); +var __importStar = this && this.__importStar || function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); + __setModuleDefault(result, mod); + return result; +}; +var __importDefault = this && this.__importDefault || function (mod) { + return mod && mod.__esModule ? mod : { + "default": mod + }; +}; +exports.__esModule = true; +var jsx_runtime_1 = __webpack_require__(/*! react/jsx-runtime */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/react/jsx-runtime.js"); +var PropTypes = __importStar(__webpack_require__(/*! prop-types */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/prop-types/index.js")); +var ContactSelect_1 = __importDefault(__webpack_require__(/*! ./ContactSelect */ "./var/plugins/System/PSC/Invoice/Webpack/src/modules/contact/ContactSelect.tsx")); +var AddressSelect_1 = __importDefault(__webpack_require__(/*! ./AddressSelect */ "./var/plugins/System/PSC/Invoice/Webpack/src/modules/contact/AddressSelect.tsx")); +var contact_1 = __webpack_require__(/*! ../../model/contact */ "./var/plugins/System/PSC/Invoice/Webpack/src/model/contact.ts"); +var react_1 = __webpack_require__(/*! react */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/react/index.js"); +var order_1 = __webpack_require__(/*! ../../state/order */ "./var/plugins/System/PSC/Invoice/Webpack/src/state/order.ts"); +var tsyringe_1 = __webpack_require__(/*! tsyringe */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/tsyringe/dist/esm5/index.js"); +var AccountSelectComponent_1 = __importDefault(__webpack_require__(/*! ../account/AccountSelectComponent */ "./var/plugins/System/PSC/Invoice/Webpack/src/modules/account/AccountSelectComponent.tsx")); +var order_2 = __webpack_require__(/*! ../../model/order */ "./var/plugins/System/PSC/Invoice/Webpack/src/model/order.ts"); +var shop_1 = __webpack_require__(/*! ../../model/shop */ "./var/plugins/System/PSC/Invoice/Webpack/src/model/shop.ts"); var ContactComponent = function ContactComponent(_a) { var order = _a.order, shop = _a.shop; - var orderState = tsyringe__WEBPACK_IMPORTED_MODULE_5__.container.resolve(_state_order__WEBPACK_IMPORTED_MODULE_4__.OrderState); - var _b = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(new _model_contact__WEBPACK_IMPORTED_MODULE_3__.Contact()), + var orderState = tsyringe_1.container.resolve(order_1.OrderState); + var _b = (0, react_1.useState)(new contact_1.Contact()), contact = _b[0], setContact = _b[1]; var changeAddress = function changeAddress(address, type) { @@ -2353,55 +2501,71 @@ var ContactComponent = function ContactComponent(_a) { order.senderAddress = address; } }; - return react__WEBPACK_IMPORTED_MODULE_0__.createElement(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, null, react__WEBPACK_IMPORTED_MODULE_0__.createElement("div", { - className: "flex" - }, react__WEBPACK_IMPORTED_MODULE_0__.createElement("div", { - className: "flex-1" - }, react__WEBPACK_IMPORTED_MODULE_0__.createElement(_ContactSelect__WEBPACK_IMPORTED_MODULE_1__["default"], { - order: order, - shop: shop, - onChange: setContact - })), react__WEBPACK_IMPORTED_MODULE_0__.createElement("div", { - className: "flex-1" - }, react__WEBPACK_IMPORTED_MODULE_0__.createElement(_account_AccountSelectComponent__WEBPACK_IMPORTED_MODULE_6__["default"], { - shop: shop, - order: order - }))), react__WEBPACK_IMPORTED_MODULE_0__.createElement("div", { - className: "flex gap-1" - }, react__WEBPACK_IMPORTED_MODULE_0__.createElement("div", { - className: "flex-1" - }, order.contact.uuid != "" && react__WEBPACK_IMPORTED_MODULE_0__.createElement(_AddressSelect__WEBPACK_IMPORTED_MODULE_2__["default"], { - address: order.invoiceAddress, - contact: order.contact, - changeAddress: changeAddress, - name: 'Rechnungsadresse', - type: 1, - shop: shop - })), react__WEBPACK_IMPORTED_MODULE_0__.createElement("div", { - className: "flex-1" - }, order.contact.uuid != "" && react__WEBPACK_IMPORTED_MODULE_0__.createElement(_AddressSelect__WEBPACK_IMPORTED_MODULE_2__["default"], { - address: order.deliveryAddress, - contact: order.contact, - changeAddress: changeAddress, - name: 'Lieferadresse', - type: 2, - shop: shop - })), react__WEBPACK_IMPORTED_MODULE_0__.createElement("div", { - className: "flex-1" - }, order.contact.uuid != "" && react__WEBPACK_IMPORTED_MODULE_0__.createElement(_AddressSelect__WEBPACK_IMPORTED_MODULE_2__["default"], { - address: order.senderAddress, - changeAddress: changeAddress, - contact: order.contact, - name: 'Absenderadresse', - type: 3, - shop: shop - })))); + return (0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { + children: [(0, jsx_runtime_1.jsxs)("div", __assign({ + className: "flex" + }, { + children: [(0, jsx_runtime_1.jsx)("div", __assign({ + className: "flex-1" + }, { + children: (0, jsx_runtime_1.jsx)(ContactSelect_1["default"], { + order: order, + shop: shop, + onChange: setContact + }) + })), (0, jsx_runtime_1.jsx)("div", __assign({ + className: "flex-1" + }, { + children: (0, jsx_runtime_1.jsx)(AccountSelectComponent_1["default"], { + shop: shop, + order: order + }) + }))] + })), (0, jsx_runtime_1.jsxs)("div", __assign({ + className: "flex gap-1" + }, { + children: [(0, jsx_runtime_1.jsx)("div", __assign({ + className: "flex-1" + }, { + children: order.contact.uuid != "" && (0, jsx_runtime_1.jsx)(AddressSelect_1["default"], { + address: order.invoiceAddress, + contact: order.contact, + changeAddress: changeAddress, + name: 'Rechnungsadresse', + type: 1, + shop: shop + }) + })), (0, jsx_runtime_1.jsx)("div", __assign({ + className: "flex-1" + }, { + children: order.contact.uuid != "" && (0, jsx_runtime_1.jsx)(AddressSelect_1["default"], { + address: order.deliveryAddress, + contact: order.contact, + changeAddress: changeAddress, + name: 'Lieferadresse', + type: 2, + shop: shop + }) + })), (0, jsx_runtime_1.jsx)("div", __assign({ + className: "flex-1" + }, { + children: order.contact.uuid != "" && (0, jsx_runtime_1.jsx)(AddressSelect_1["default"], { + address: order.senderAddress, + changeAddress: changeAddress, + contact: order.contact, + name: 'Absenderadresse', + type: 3, + shop: shop + }) + }))] + }))] + }); }; ContactComponent.propTypes = { - order: prop_types__WEBPACK_IMPORTED_MODULE_9__.instanceOf(_model_order__WEBPACK_IMPORTED_MODULE_7__.Order), - shop: prop_types__WEBPACK_IMPORTED_MODULE_9__.instanceOf(_model_shop__WEBPACK_IMPORTED_MODULE_8__.Shop) + order: PropTypes.instanceOf(order_2.Order), + shop: PropTypes.instanceOf(shop_1.Shop) }; -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (ContactComponent); +exports["default"] = ContactComponent; /***/ }), @@ -2409,51 +2573,86 @@ ContactComponent.propTypes = { /*!*************************************************************************************!*\ !*** ./var/plugins/System/PSC/Invoice/Webpack/src/modules/contact/ContactModal.tsx ***! \*************************************************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var core_js_modules_es_array_for_each_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.array.for-each.js */ "./node_modules/core-js/modules/es.array.for-each.js"); -/* harmony import */ var core_js_modules_es_array_for_each_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_for_each_js__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var core_js_modules_es_object_to_string_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es.object.to-string.js */ "./node_modules/core-js/modules/es.object.to-string.js"); -/* harmony import */ var core_js_modules_es_object_to_string_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_object_to_string_js__WEBPACK_IMPORTED_MODULE_1__); -/* harmony import */ var core_js_modules_web_dom_collections_for_each_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! core-js/modules/web.dom-collections.for-each.js */ "./node_modules/core-js/modules/web.dom-collections.for-each.js"); -/* harmony import */ var core_js_modules_web_dom_collections_for_each_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_web_dom_collections_for_each_js__WEBPACK_IMPORTED_MODULE_2__); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/react/index.js"); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_3__); -/* harmony import */ var _ebay_nice_modal_react__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @ebay/nice-modal-react */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/@ebay/nice-modal-react/lib/esm/index.js"); -/* harmony import */ var _base_Button__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../base/Button */ "./var/plugins/System/PSC/Invoice/Webpack/src/modules/base/Button.tsx"); -/* harmony import */ var _rjsf_validator_ajv6__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @rjsf/validator-ajv6 */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/@rjsf/validator-ajv6/lib/index.js"); -/* harmony import */ var _rjsf_core__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @rjsf/core */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/@rjsf/core/lib/index.js"); -/* harmony import */ var _services_country__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../../services/country */ "./var/plugins/System/PSC/Invoice/Webpack/src/services/country.ts"); -/* harmony import */ var flowbite_react__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! flowbite-react */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/flowbite-react/dist/esm/index.mjs"); +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - - - - - - - -var ContactModal = _ebay_nice_modal_react__WEBPACK_IMPORTED_MODULE_4__["default"].create(function (_a) { +__webpack_require__(/*! core-js/modules/es.object.assign.js */ "./node_modules/core-js/modules/es.object.assign.js"); +__webpack_require__(/*! core-js/modules/es.object.create.js */ "./node_modules/core-js/modules/es.object.create.js"); +__webpack_require__(/*! core-js/modules/es.object.get-own-property-descriptor.js */ "./node_modules/core-js/modules/es.object.get-own-property-descriptor.js"); +__webpack_require__(/*! core-js/modules/es.object.define-property.js */ "./node_modules/core-js/modules/es.object.define-property.js"); +__webpack_require__(/*! core-js/modules/es.array.for-each.js */ "./node_modules/core-js/modules/es.array.for-each.js"); +__webpack_require__(/*! core-js/modules/es.object.to-string.js */ "./node_modules/core-js/modules/es.object.to-string.js"); +__webpack_require__(/*! core-js/modules/web.dom-collections.for-each.js */ "./node_modules/core-js/modules/web.dom-collections.for-each.js"); +var __assign = this && this.__assign || function () { + __assign = Object.assign || function (t) { + for (var s, i = 1, n = arguments.length; i < n; i++) { + s = arguments[i]; + for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; + } + return t; + }; + return __assign.apply(this, arguments); +}; +var __createBinding = this && this.__createBinding || (Object.create ? function (o, m, k, k2) { + if (k2 === undefined) k2 = k; + var desc = Object.getOwnPropertyDescriptor(m, k); + if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { + desc = { + enumerable: true, + get: function get() { + return m[k]; + } + }; + } + Object.defineProperty(o, k2, desc); +} : function (o, m, k, k2) { + if (k2 === undefined) k2 = k; + o[k2] = m[k]; +}); +var __setModuleDefault = this && this.__setModuleDefault || (Object.create ? function (o, v) { + Object.defineProperty(o, "default", { + enumerable: true, + value: v + }); +} : function (o, v) { + o["default"] = v; +}); +var __importStar = this && this.__importStar || function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); + __setModuleDefault(result, mod); + return result; +}; +var __importDefault = this && this.__importDefault || function (mod) { + return mod && mod.__esModule ? mod : { + "default": mod + }; +}; +exports.__esModule = true; +var jsx_runtime_1 = __webpack_require__(/*! react/jsx-runtime */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/react/jsx-runtime.js"); +var react_1 = __webpack_require__(/*! react */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/react/index.js"); +var nice_modal_react_1 = __importStar(__webpack_require__(/*! @ebay/nice-modal-react */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/@ebay/nice-modal-react/lib/esm/index.js")); +var Button_1 = __importDefault(__webpack_require__(/*! ../base/Button */ "./var/plugins/System/PSC/Invoice/Webpack/src/modules/base/Button.tsx")); +var validator_ajv6_1 = __importDefault(__webpack_require__(/*! @rjsf/validator-ajv6 */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/@rjsf/validator-ajv6/lib/index.js")); +var core_1 = __importDefault(__webpack_require__(/*! @rjsf/core */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/@rjsf/core/lib/index.js")); +var country_1 = __webpack_require__(/*! ../../services/country */ "./var/plugins/System/PSC/Invoice/Webpack/src/services/country.ts"); +var flowbite_react_1 = __webpack_require__(/*! flowbite-react */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/flowbite-react/dist/cjs/index.cjs"); +var ContactModal = nice_modal_react_1["default"].create(function (_a) { var title = _a.title, action = _a.action, contact = _a.contact, shop = _a.shop; - var country_api = new _services_country__WEBPACK_IMPORTED_MODULE_8__.CountryService(); - var modal = (0,_ebay_nice_modal_react__WEBPACK_IMPORTED_MODULE_4__.useModal)(); - var _b = (0,react__WEBPACK_IMPORTED_MODULE_3__.useState)({}), + var country_api = new country_1.CountryService(); + var modal = (0, nice_modal_react_1.useModal)(); + var _b = (0, react_1.useState)({}), formData = _b[0], setFormData = _b[1]; - var _c = (0,react__WEBPACK_IMPORTED_MODULE_3__.useState)({}), + var _c = (0, react_1.useState)({}), schema = _c[0], setSchema = _c[1]; - (0,react__WEBPACK_IMPORTED_MODULE_3__.useEffect)(function () { + (0, react_1.useEffect)(function () { if (contact.uid != "") { setFormData({ email: contact.username, @@ -2480,7 +2679,7 @@ var ContactModal = _ebay_nice_modal_react__WEBPACK_IMPORTED_MODULE_4__["default" } } }; - (0,react__WEBPACK_IMPORTED_MODULE_3__.useEffect)(function () { + (0, react_1.useEffect)(function () { country_api.getCountry(shop).then(function (data) { var countrys = []; data.forEach(function (item) { @@ -2545,42 +2744,50 @@ var ContactModal = _ebay_nice_modal_react__WEBPACK_IMPORTED_MODULE_4__["default" setSchema(schema); }); }, []); - return react__WEBPACK_IMPORTED_MODULE_3___default().createElement(flowbite_react__WEBPACK_IMPORTED_MODULE_9__.Modal, { + return (0, jsx_runtime_1.jsxs)(flowbite_react_1.Modal, __assign({ show: modal.visible, onClose: function onClose() { return modal.remove(); } - }, react__WEBPACK_IMPORTED_MODULE_3___default().createElement(flowbite_react__WEBPACK_IMPORTED_MODULE_9__.Modal.Header, null, title), react__WEBPACK_IMPORTED_MODULE_3___default().createElement(flowbite_react__WEBPACK_IMPORTED_MODULE_9__.Modal.Body, null, action === "Save" && react__WEBPACK_IMPORTED_MODULE_3___default().createElement(_rjsf_core__WEBPACK_IMPORTED_MODULE_7__["default"], { - schema: schema, - formData: formData, - uiSchema: uiSchema, - validator: _rjsf_validator_ajv6__WEBPACK_IMPORTED_MODULE_6__["default"], - onChange: function onChange(e) { - return setFormData(e.formData); - } - })), react__WEBPACK_IMPORTED_MODULE_3___default().createElement(flowbite_react__WEBPACK_IMPORTED_MODULE_9__.Modal.Footer, null, react__WEBPACK_IMPORTED_MODULE_3___default().createElement(_base_Button__WEBPACK_IMPORTED_MODULE_5__["default"], { - type: 3, - variant: "success", - onClick: function onClick() { - if (action === "Save") { - if (formData) { - modal.resolve(formData); + }, { + children: [(0, jsx_runtime_1.jsx)(flowbite_react_1.Modal.Header, { + children: title + }), (0, jsx_runtime_1.jsx)(flowbite_react_1.Modal.Body, { + children: action === "Save" && (0, jsx_runtime_1.jsx)(core_1["default"], { + schema: schema, + formData: formData, + uiSchema: uiSchema, + validator: validator_ajv6_1["default"], + onChange: function onChange(e) { + return setFormData(e.formData); + } + }) + }), (0, jsx_runtime_1.jsxs)(flowbite_react_1.Modal.Footer, { + children: [(0, jsx_runtime_1.jsx)(Button_1["default"], { + type: 3, + variant: "success", + onClick: function onClick() { + if (action === "Save") { + if (formData) { + modal.resolve(formData); + modal.remove(); + } + } else { + modal.resolve(); + modal.remove(); + } + } + }), (0, jsx_runtime_1.jsx)(Button_1["default"], { + type: 4, + variant: "warning", + onClick: function onClick() { modal.remove(); } - } else { - modal.resolve(); - modal.remove(); - } - } - }), react__WEBPACK_IMPORTED_MODULE_3___default().createElement(_base_Button__WEBPACK_IMPORTED_MODULE_5__["default"], { - type: 4, - variant: "warning", - onClick: function onClick() { - modal.remove(); - } - }))); + })] + })] + })); }); -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (ContactModal); +exports["default"] = ContactModal; /***/ }), @@ -2588,52 +2795,89 @@ var ContactModal = _ebay_nice_modal_react__WEBPACK_IMPORTED_MODULE_4__["default" /*!**********************************************************************************************!*\ !*** ./var/plugins/System/PSC/Invoice/Webpack/src/modules/contact/ContactModalComponent.tsx ***! \**********************************************************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _model_contact__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../model/contact */ "./var/plugins/System/PSC/Invoice/Webpack/src/model/contact.ts"); -/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! prop-types */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/prop-types/index.js"); -/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_9__); -/* harmony import */ var _model_shop__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../model/shop */ "./var/plugins/System/PSC/Invoice/Webpack/src/model/shop.ts"); -/* harmony import */ var _base_Button__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../base/Button */ "./var/plugins/System/PSC/Invoice/Webpack/src/modules/base/Button.tsx"); -/* harmony import */ var _ContactModal__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./ContactModal */ "./var/plugins/System/PSC/Invoice/Webpack/src/modules/contact/ContactModal.tsx"); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! react */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/react/index.js"); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_4__); -/* harmony import */ var _ebay_nice_modal_react__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @ebay/nice-modal-react */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/@ebay/nice-modal-react/lib/esm/index.js"); -/* harmony import */ var _services_contact__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../services/contact */ "./var/plugins/System/PSC/Invoice/Webpack/src/services/contact.ts"); -/* harmony import */ var _model_address__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../model/address */ "./var/plugins/System/PSC/Invoice/Webpack/src/model/address.ts"); -/* harmony import */ var _services_address__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../../services/address */ "./var/plugins/System/PSC/Invoice/Webpack/src/services/address.ts"); - - - - - - - - +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { +__webpack_require__(/*! core-js/modules/es.object.assign.js */ "./node_modules/core-js/modules/es.object.assign.js"); +__webpack_require__(/*! core-js/modules/es.object.create.js */ "./node_modules/core-js/modules/es.object.create.js"); +__webpack_require__(/*! core-js/modules/es.object.get-own-property-descriptor.js */ "./node_modules/core-js/modules/es.object.get-own-property-descriptor.js"); +__webpack_require__(/*! core-js/modules/es.object.define-property.js */ "./node_modules/core-js/modules/es.object.define-property.js"); +var __assign = this && this.__assign || function () { + __assign = Object.assign || function (t) { + for (var s, i = 1, n = arguments.length; i < n; i++) { + s = arguments[i]; + for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; + } + return t; + }; + return __assign.apply(this, arguments); +}; +var __createBinding = this && this.__createBinding || (Object.create ? function (o, m, k, k2) { + if (k2 === undefined) k2 = k; + var desc = Object.getOwnPropertyDescriptor(m, k); + if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { + desc = { + enumerable: true, + get: function get() { + return m[k]; + } + }; + } + Object.defineProperty(o, k2, desc); +} : function (o, m, k, k2) { + if (k2 === undefined) k2 = k; + o[k2] = m[k]; +}); +var __setModuleDefault = this && this.__setModuleDefault || (Object.create ? function (o, v) { + Object.defineProperty(o, "default", { + enumerable: true, + value: v + }); +} : function (o, v) { + o["default"] = v; +}); +var __importStar = this && this.__importStar || function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); + __setModuleDefault(result, mod); + return result; +}; +var __importDefault = this && this.__importDefault || function (mod) { + return mod && mod.__esModule ? mod : { + "default": mod + }; +}; +exports.__esModule = true; +var jsx_runtime_1 = __webpack_require__(/*! react/jsx-runtime */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/react/jsx-runtime.js"); +var contact_1 = __webpack_require__(/*! ../../model/contact */ "./var/plugins/System/PSC/Invoice/Webpack/src/model/contact.ts"); +var PropTypes = __importStar(__webpack_require__(/*! prop-types */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/prop-types/index.js")); +var shop_1 = __webpack_require__(/*! ../../model/shop */ "./var/plugins/System/PSC/Invoice/Webpack/src/model/shop.ts"); +var Button_1 = __importDefault(__webpack_require__(/*! ../base/Button */ "./var/plugins/System/PSC/Invoice/Webpack/src/modules/base/Button.tsx")); +var ContactModal_1 = __importDefault(__webpack_require__(/*! ./ContactModal */ "./var/plugins/System/PSC/Invoice/Webpack/src/modules/contact/ContactModal.tsx")); +var react_1 = __webpack_require__(/*! react */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/react/index.js"); +var nice_modal_react_1 = __webpack_require__(/*! @ebay/nice-modal-react */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/@ebay/nice-modal-react/lib/esm/index.js"); +var contact_2 = __webpack_require__(/*! ../../services/contact */ "./var/plugins/System/PSC/Invoice/Webpack/src/services/contact.ts"); +var address_1 = __webpack_require__(/*! ../../model/address */ "./var/plugins/System/PSC/Invoice/Webpack/src/model/address.ts"); +var address_2 = __webpack_require__(/*! ../../services/address */ "./var/plugins/System/PSC/Invoice/Webpack/src/services/address.ts"); var ContactModalComponent = function ContactModalComponent(_a) { var shop = _a.shop, handleAdd = _a.handleAdd, handleEdit = _a.handleEdit, contact = _a.contact; - var contactModal = (0,_ebay_nice_modal_react__WEBPACK_IMPORTED_MODULE_5__.useModal)(_ContactModal__WEBPACK_IMPORTED_MODULE_3__["default"]); - var showAddModal = (0,react__WEBPACK_IMPORTED_MODULE_4__.useCallback)(function () { + var contactModal = (0, nice_modal_react_1.useModal)(ContactModal_1["default"]); + var showAddModal = (0, react_1.useCallback)(function () { contactModal.show({ title: 'Add Contact', action: 'Save', shop: shop, - contact: new _model_contact__WEBPACK_IMPORTED_MODULE_0__.Contact() + contact: new contact_1.Contact() }).then(function (formData) { addContact(formData); }); }, [contactModal]); - var showEditModal = (0,react__WEBPACK_IMPORTED_MODULE_4__.useCallback)(function (contact) { + var showEditModal = (0, react_1.useCallback)(function (contact) { contact = contact; contactModal.show({ title: 'Edit Contact', @@ -2646,49 +2890,51 @@ var ContactModalComponent = function ContactModalComponent(_a) { }); }, [contactModal]); var updateContact = function updateContact(contact) { - var contact_api = new _services_contact__WEBPACK_IMPORTED_MODULE_6__.ContactService(); + var contact_api = new contact_2.ContactService(); contact_api.updateContact(contact).then(function (e) { handleEdit(contact); }); }; var addContact = function addContact(formData) { - var contact = new _model_contact__WEBPACK_IMPORTED_MODULE_0__.Contact(); + var contact = new contact_1.Contact(); contact.parseFromFormData(formData, shop); - var contact_api = new _services_contact__WEBPACK_IMPORTED_MODULE_6__.ContactService(); + var contact_api = new contact_2.ContactService(); contact_api.createContact(contact).then(function (e) { contact.parseFromJson(e); - var address = new _model_address__WEBPACK_IMPORTED_MODULE_7__.Address(); + var address = new address_1.Address(); address.parseFromFormData(formData); address.contact.uuid = contact.uuid; address.type = 1; - var address_api = new _services_address__WEBPACK_IMPORTED_MODULE_8__.AddressService(); + var address_api = new address_2.AddressService(); address_api.create(address); address.type = 2; address_api.create(address); handleAdd(contact); }); }; - return react__WEBPACK_IMPORTED_MODULE_4___default().createElement("div", { + return (0, jsx_runtime_1.jsxs)("div", __assign({ className: 'flex gap-1' - }, react__WEBPACK_IMPORTED_MODULE_4___default().createElement(_base_Button__WEBPACK_IMPORTED_MODULE_2__["default"], { - type: 1, - variant: "success", - onClick: showAddModal - }), react__WEBPACK_IMPORTED_MODULE_4___default().createElement(_base_Button__WEBPACK_IMPORTED_MODULE_2__["default"], { - type: 2, - variant: "info", - onClick: function onClick() { - showEditModal(contact); - } + }, { + children: [(0, jsx_runtime_1.jsx)(Button_1["default"], { + type: 1, + variant: "success", + onClick: showAddModal + }), (0, jsx_runtime_1.jsx)(Button_1["default"], { + type: 2, + variant: "info", + onClick: function onClick() { + showEditModal(contact); + } + })] })); }; ContactModalComponent.propTypes = { - shop: prop_types__WEBPACK_IMPORTED_MODULE_9__.instanceOf(_model_shop__WEBPACK_IMPORTED_MODULE_1__.Shop), - handleAdd: prop_types__WEBPACK_IMPORTED_MODULE_9__.func, - handleEdit: prop_types__WEBPACK_IMPORTED_MODULE_9__.func, - contact: prop_types__WEBPACK_IMPORTED_MODULE_9__.instanceOf(_model_contact__WEBPACK_IMPORTED_MODULE_0__.Contact) + shop: PropTypes.instanceOf(shop_1.Shop), + handleAdd: PropTypes.func, + handleEdit: PropTypes.func, + contact: PropTypes.instanceOf(contact_1.Contact) }; -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (ContactModalComponent); +exports["default"] = ContactModalComponent; /***/ }), @@ -2696,49 +2942,64 @@ ContactModalComponent.propTypes = { /*!**************************************************************************************!*\ !*** ./var/plugins/System/PSC/Invoice/Webpack/src/modules/contact/ContactSelect.tsx ***! \**************************************************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var core_js_modules_es_object_to_string_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.object.to-string.js */ "./node_modules/core-js/modules/es.object.to-string.js"); -/* harmony import */ var core_js_modules_es_object_to_string_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_object_to_string_js__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var core_js_modules_es_promise_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es.promise.js */ "./node_modules/core-js/modules/es.promise.js"); -/* harmony import */ var core_js_modules_es_promise_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_promise_js__WEBPACK_IMPORTED_MODULE_1__); -/* harmony import */ var core_js_modules_es_symbol_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! core-js/modules/es.symbol.js */ "./node_modules/core-js/modules/es.symbol.js"); -/* harmony import */ var core_js_modules_es_symbol_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_symbol_js__WEBPACK_IMPORTED_MODULE_2__); -/* harmony import */ var core_js_modules_es_symbol_description_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! core-js/modules/es.symbol.description.js */ "./node_modules/core-js/modules/es.symbol.description.js"); -/* harmony import */ var core_js_modules_es_symbol_description_js__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_symbol_description_js__WEBPACK_IMPORTED_MODULE_3__); -/* harmony import */ var core_js_modules_es_symbol_iterator_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! core-js/modules/es.symbol.iterator.js */ "./node_modules/core-js/modules/es.symbol.iterator.js"); -/* harmony import */ var core_js_modules_es_symbol_iterator_js__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_symbol_iterator_js__WEBPACK_IMPORTED_MODULE_4__); -/* harmony import */ var core_js_modules_es_array_iterator_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! core-js/modules/es.array.iterator.js */ "./node_modules/core-js/modules/es.array.iterator.js"); -/* harmony import */ var core_js_modules_es_array_iterator_js__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_iterator_js__WEBPACK_IMPORTED_MODULE_5__); -/* harmony import */ var core_js_modules_es_string_iterator_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! core-js/modules/es.string.iterator.js */ "./node_modules/core-js/modules/es.string.iterator.js"); -/* harmony import */ var core_js_modules_es_string_iterator_js__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_iterator_js__WEBPACK_IMPORTED_MODULE_6__); -/* harmony import */ var core_js_modules_web_dom_collections_iterator_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! core-js/modules/web.dom-collections.iterator.js */ "./node_modules/core-js/modules/web.dom-collections.iterator.js"); -/* harmony import */ var core_js_modules_web_dom_collections_iterator_js__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_web_dom_collections_iterator_js__WEBPACK_IMPORTED_MODULE_7__); -/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! prop-types */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/prop-types/index.js"); -/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_17___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_17__); -/* harmony import */ var react_select_async_paginate__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! react-select-async-paginate */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/react-select-async-paginate/dist/esm/index.js"); -/* harmony import */ var _services_contact__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../../services/contact */ "./var/plugins/System/PSC/Invoice/Webpack/src/services/contact.ts"); -/* harmony import */ var _model_shop__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../../model/shop */ "./var/plugins/System/PSC/Invoice/Webpack/src/model/shop.ts"); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! react */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/react/index.js"); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_11___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_11__); -/* harmony import */ var tsyringe__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! tsyringe */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/tsyringe/dist/esm5/index.js"); -/* harmony import */ var _state_order__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../../state/order */ "./var/plugins/System/PSC/Invoice/Webpack/src/state/order.ts"); -/* harmony import */ var _ContactModalComponent__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./ContactModalComponent */ "./var/plugins/System/PSC/Invoice/Webpack/src/modules/contact/ContactModalComponent.tsx"); -/* harmony import */ var _model_order__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ../../model/order */ "./var/plugins/System/PSC/Invoice/Webpack/src/model/order.ts"); -/* harmony import */ var _base_SelectLabel__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ../base/SelectLabel */ "./var/plugins/System/PSC/Invoice/Webpack/src/modules/base/SelectLabel.tsx"); +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - - - - -var __awaiter = undefined && undefined.__awaiter || function (thisArg, _arguments, P, generator) { +__webpack_require__(/*! core-js/modules/es.object.assign.js */ "./node_modules/core-js/modules/es.object.assign.js"); +__webpack_require__(/*! core-js/modules/es.object.create.js */ "./node_modules/core-js/modules/es.object.create.js"); +__webpack_require__(/*! core-js/modules/es.object.get-own-property-descriptor.js */ "./node_modules/core-js/modules/es.object.get-own-property-descriptor.js"); +__webpack_require__(/*! core-js/modules/es.object.define-property.js */ "./node_modules/core-js/modules/es.object.define-property.js"); +__webpack_require__(/*! core-js/modules/es.object.to-string.js */ "./node_modules/core-js/modules/es.object.to-string.js"); +__webpack_require__(/*! core-js/modules/es.promise.js */ "./node_modules/core-js/modules/es.promise.js"); +__webpack_require__(/*! core-js/modules/es.symbol.js */ "./node_modules/core-js/modules/es.symbol.js"); +__webpack_require__(/*! core-js/modules/es.symbol.description.js */ "./node_modules/core-js/modules/es.symbol.description.js"); +__webpack_require__(/*! core-js/modules/es.symbol.iterator.js */ "./node_modules/core-js/modules/es.symbol.iterator.js"); +__webpack_require__(/*! core-js/modules/es.array.iterator.js */ "./node_modules/core-js/modules/es.array.iterator.js"); +__webpack_require__(/*! core-js/modules/es.string.iterator.js */ "./node_modules/core-js/modules/es.string.iterator.js"); +__webpack_require__(/*! core-js/modules/web.dom-collections.iterator.js */ "./node_modules/core-js/modules/web.dom-collections.iterator.js"); +var __assign = this && this.__assign || function () { + __assign = Object.assign || function (t) { + for (var s, i = 1, n = arguments.length; i < n; i++) { + s = arguments[i]; + for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; + } + return t; + }; + return __assign.apply(this, arguments); +}; +var __createBinding = this && this.__createBinding || (Object.create ? function (o, m, k, k2) { + if (k2 === undefined) k2 = k; + var desc = Object.getOwnPropertyDescriptor(m, k); + if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { + desc = { + enumerable: true, + get: function get() { + return m[k]; + } + }; + } + Object.defineProperty(o, k2, desc); +} : function (o, m, k, k2) { + if (k2 === undefined) k2 = k; + o[k2] = m[k]; +}); +var __setModuleDefault = this && this.__setModuleDefault || (Object.create ? function (o, v) { + Object.defineProperty(o, "default", { + enumerable: true, + value: v + }); +} : function (o, v) { + o["default"] = v; +}); +var __importStar = this && this.__importStar || function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); + __setModuleDefault(result, mod); + return result; +}; +var __awaiter = this && this.__awaiter || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); @@ -2765,7 +3026,7 @@ var __awaiter = undefined && undefined.__awaiter || function (thisArg, _argument step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; -var __generator = undefined && undefined.__generator || function (thisArg, body) { +var __generator = this && this.__generator || function (thisArg, body) { var _ = { label: 0, sent: function sent() { @@ -2853,27 +3114,33 @@ var __generator = undefined && undefined.__generator || function (thisArg, body) }; } }; - - - - - - - - - - - +var __importDefault = this && this.__importDefault || function (mod) { + return mod && mod.__esModule ? mod : { + "default": mod + }; +}; +exports.__esModule = true; +var jsx_runtime_1 = __webpack_require__(/*! react/jsx-runtime */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/react/jsx-runtime.js"); +var PropTypes = __importStar(__webpack_require__(/*! prop-types */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/prop-types/index.js")); +var react_select_async_paginate_1 = __webpack_require__(/*! react-select-async-paginate */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/react-select-async-paginate/dist/index.js"); +var contact_1 = __webpack_require__(/*! ../../services/contact */ "./var/plugins/System/PSC/Invoice/Webpack/src/services/contact.ts"); +var shop_1 = __webpack_require__(/*! ../../model/shop */ "./var/plugins/System/PSC/Invoice/Webpack/src/model/shop.ts"); +var react_1 = __webpack_require__(/*! react */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/react/index.js"); +var tsyringe_1 = __webpack_require__(/*! tsyringe */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/tsyringe/dist/esm5/index.js"); +var order_1 = __webpack_require__(/*! ../../state/order */ "./var/plugins/System/PSC/Invoice/Webpack/src/state/order.ts"); +var ContactModalComponent_1 = __importDefault(__webpack_require__(/*! ./ContactModalComponent */ "./var/plugins/System/PSC/Invoice/Webpack/src/modules/contact/ContactModalComponent.tsx")); +var order_2 = __webpack_require__(/*! ../../model/order */ "./var/plugins/System/PSC/Invoice/Webpack/src/model/order.ts"); +var SelectLabel_1 = __webpack_require__(/*! ../base/SelectLabel */ "./var/plugins/System/PSC/Invoice/Webpack/src/modules/base/SelectLabel.tsx"); var ContactSelect = function ContactSelect(_a) { var order = _a.order, shop = _a.shop, onChange = _a.onChange; - var _b = (0,react__WEBPACK_IMPORTED_MODULE_11__.useState)(null), + var _b = (0, react_1.useState)(null), shopUuid = _b[0], setShopUuid = _b[1]; - var orderState = tsyringe__WEBPACK_IMPORTED_MODULE_12__.container.resolve(_state_order__WEBPACK_IMPORTED_MODULE_13__.OrderState); - var contact_api = new _services_contact__WEBPACK_IMPORTED_MODULE_9__.ContactService(); - (0,react__WEBPACK_IMPORTED_MODULE_11__.useEffect)(function () { + var orderState = tsyringe_1.container.resolve(order_1.OrderState); + var contact_api = new contact_1.ContactService(); + (0, react_1.useEffect)(function () { setShopUuid(shop.uuid); }, [shop]); var loadOptions = function loadOptions(searchQuery, loadedOptions, _a) { @@ -2910,46 +3177,51 @@ var ContactSelect = function ContactSelect(_a) { setShopUuid(Math.random()); setContactInOrder(contact); }; - return react__WEBPACK_IMPORTED_MODULE_11___default().createElement("div", { + return (0, jsx_runtime_1.jsxs)("div", __assign({ className: "flex gap-1" - }, react__WEBPACK_IMPORTED_MODULE_11___default().createElement("div", { - className: "flex-1" - }, react__WEBPACK_IMPORTED_MODULE_11___default().createElement(react_select_async_paginate__WEBPACK_IMPORTED_MODULE_8__.AsyncPaginate, { - defaultOptions: true, - className: "".concat(orderState.getCurrentOrder().value.contact.username == "" ? "border border-danger" : ""), - key: JSON.stringify(shopUuid), - defaultValue: order.contact, - components: { - Control: _base_SelectLabel__WEBPACK_IMPORTED_MODULE_16__.SelectLabel - }, - placeholder: '', - name: 'Kunde', - value: order.contact, - loadOptions: loadOptions, - getOptionValue: function getOptionValue(option) { - return option.uuid; - }, - getOptionLabel: function getOptionLabel(option) { - return option.username; - }, - onChange: setContactInOrder, - isSearchable: true, - additional: { - page: 1 - } - })), react__WEBPACK_IMPORTED_MODULE_11___default().createElement("div", null, react__WEBPACK_IMPORTED_MODULE_11___default().createElement(_ContactModalComponent__WEBPACK_IMPORTED_MODULE_14__["default"], { - shop: shop, - contact: order.contact, - handleAdd: handleAdd, - handleEdit: handleEdit - }))); + }, { + children: [(0, jsx_runtime_1.jsx)("div", __assign({ + className: "flex-1" + }, { + children: (0, jsx_runtime_1.jsx)(react_select_async_paginate_1.AsyncPaginate, { + defaultOptions: true, + className: "".concat(orderState.getCurrentOrder().value.contact.username == "" ? "border border-danger" : ""), + defaultValue: order.contact, + components: { + Control: SelectLabel_1.SelectLabel + }, + placeholder: '', + name: 'Kunde', + value: order.contact, + loadOptions: loadOptions, + getOptionValue: function getOptionValue(option) { + return option.uuid; + }, + getOptionLabel: function getOptionLabel(option) { + return option.username; + }, + onChange: setContactInOrder, + isSearchable: true, + additional: { + page: 1 + } + }, JSON.stringify(shopUuid)) + })), (0, jsx_runtime_1.jsx)("div", { + children: (0, jsx_runtime_1.jsx)(ContactModalComponent_1["default"], { + shop: shop, + contact: order.contact, + handleAdd: handleAdd, + handleEdit: handleEdit + }) + })] + })); }; ContactSelect.propTypes = { - order: prop_types__WEBPACK_IMPORTED_MODULE_17__.instanceOf(_model_order__WEBPACK_IMPORTED_MODULE_15__.Order), - onChange: prop_types__WEBPACK_IMPORTED_MODULE_17__.func, - shop: prop_types__WEBPACK_IMPORTED_MODULE_17__.instanceOf(_model_shop__WEBPACK_IMPORTED_MODULE_10__.Shop) + order: PropTypes.instanceOf(order_2.Order), + onChange: PropTypes.func, + shop: PropTypes.instanceOf(shop_1.Shop) }; -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (ContactSelect); +exports["default"] = ContactSelect; /***/ }), @@ -2957,54 +3229,66 @@ ContactSelect.propTypes = { /*!*************************************************************************************!*\ !*** ./var/plugins/System/PSC/Invoice/Webpack/src/modules/draft/DraftComponent.tsx ***! \*************************************************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/react/index.js"); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var tsyringe__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! tsyringe */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/tsyringe/dist/esm5/index.js"); -/* harmony import */ var _state_order__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../state/order */ "./var/plugins/System/PSC/Invoice/Webpack/src/state/order.ts"); - +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { +__webpack_require__(/*! core-js/modules/es.object.assign.js */ "./node_modules/core-js/modules/es.object.assign.js"); +var __assign = this && this.__assign || function () { + __assign = Object.assign || function (t) { + for (var s, i = 1, n = arguments.length; i < n; i++) { + s = arguments[i]; + for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; + } + return t; + }; + return __assign.apply(this, arguments); +}; +exports.__esModule = true; +var jsx_runtime_1 = __webpack_require__(/*! react/jsx-runtime */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/react/jsx-runtime.js"); +var react_1 = __webpack_require__(/*! react */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/react/index.js"); +var tsyringe_1 = __webpack_require__(/*! tsyringe */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/tsyringe/dist/esm5/index.js"); +var order_1 = __webpack_require__(/*! ../../state/order */ "./var/plugins/System/PSC/Invoice/Webpack/src/state/order.ts"); var DraftComponent = function DraftComponent(_a) { var order = _a.order; - var _b = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(true), + var _b = (0, react_1.useState)(true), draft = _b[0], setDraft = _b[1]; - var orderState = tsyringe__WEBPACK_IMPORTED_MODULE_1__.container.resolve(_state_order__WEBPACK_IMPORTED_MODULE_2__.OrderState); + var orderState = tsyringe_1.container.resolve(order_1.OrderState); var _onChange = function onChange(option) { var orderObj = orderState.getCurrentOrder().value; orderObj.draft = !draft; orderState.setCurrentOrder(orderObj); setDraft(!draft); }; - (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(function () { + (0, react_1.useEffect)(function () { setDraft(order.draft); }, [order.draft]); - return react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { + return (0, jsx_runtime_1.jsx)("div", __assign({ className: "gap-2" - }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("label", { - className: "inline-flex items-center cursor-pointer" - }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("input", { - type: "checkbox", - value: "1", - className: "sr-only peer", - defaultChecked: draft, - onChange: function onChange(e) { - return _onChange(e); - } - }), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { - className: "relative w-11 h-6 bg-gray-200 rounded-full peer peer-focus:ring-4 peer-focus:ring-blue-300 dark:peer-focus:ring-blue-800 dark:bg-gray-700 peer-checked:after:translate-x-full rtl:peer-checked:after:-translate-x-full peer-checked:after:border-white after:content-[''] after:absolute after:top-0.5 after:start-[2px] after:bg-white after:border-gray-300 after:border after:rounded-full after:h-5 after:w-5 after:transition-all dark:border-gray-600 peer-checked:bg-blue-600" - }), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("span", { - className: "ms-3 text-sm font-medium text-gray-900 dark:text-gray-300" - }, "Entwurf"))); + }, { + children: (0, jsx_runtime_1.jsxs)("label", __assign({ + className: "inline-flex items-center cursor-pointer" + }, { + children: [(0, jsx_runtime_1.jsx)("input", { + type: "checkbox", + value: "1", + className: "sr-only peer", + defaultChecked: draft, + onChange: function onChange(e) { + return _onChange(e); + } + }), (0, jsx_runtime_1.jsx)("div", { + className: "relative w-11 h-6 bg-gray-200 rounded-full peer peer-focus:ring-4 peer-focus:ring-blue-300 dark:peer-focus:ring-blue-800 dark:bg-gray-700 peer-checked:after:translate-x-full rtl:peer-checked:after:-translate-x-full peer-checked:after:border-white after:content-[''] after:absolute after:top-0.5 after:start-[2px] after:bg-white after:border-gray-300 after:border after:rounded-full after:h-5 after:w-5 after:transition-all dark:border-gray-600 peer-checked:bg-blue-600" + }), (0, jsx_runtime_1.jsx)("span", __assign({ + className: "ms-3 text-sm font-medium text-gray-900 dark:text-gray-300" + }, { + children: "Entwurf" + }))] + })) + })); }; -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (DraftComponent); +exports["default"] = DraftComponent; /***/ }), @@ -3012,38 +3296,74 @@ var DraftComponent = function DraftComponent(_a) { /*!****************************************************************************************!*\ !*** ./var/plugins/System/PSC/Invoice/Webpack/src/modules/info/InfoFieldComponent.tsx ***! \****************************************************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! prop-types */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/prop-types/index.js"); -/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_5__); -/* harmony import */ var _model_shop__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../model/shop */ "./var/plugins/System/PSC/Invoice/Webpack/src/model/shop.ts"); -/* harmony import */ var tsyringe__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! tsyringe */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/tsyringe/dist/esm5/index.js"); -/* harmony import */ var _state_order__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../state/order */ "./var/plugins/System/PSC/Invoice/Webpack/src/state/order.ts"); -/* harmony import */ var _model_order__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../model/order */ "./var/plugins/System/PSC/Invoice/Webpack/src/model/order.ts"); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! react */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/react/index.js"); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_4__); - - - - +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { +__webpack_require__(/*! core-js/modules/es.object.assign.js */ "./node_modules/core-js/modules/es.object.assign.js"); +__webpack_require__(/*! core-js/modules/es.object.create.js */ "./node_modules/core-js/modules/es.object.create.js"); +__webpack_require__(/*! core-js/modules/es.object.get-own-property-descriptor.js */ "./node_modules/core-js/modules/es.object.get-own-property-descriptor.js"); +__webpack_require__(/*! core-js/modules/es.object.define-property.js */ "./node_modules/core-js/modules/es.object.define-property.js"); +var __assign = this && this.__assign || function () { + __assign = Object.assign || function (t) { + for (var s, i = 1, n = arguments.length; i < n; i++) { + s = arguments[i]; + for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; + } + return t; + }; + return __assign.apply(this, arguments); +}; +var __createBinding = this && this.__createBinding || (Object.create ? function (o, m, k, k2) { + if (k2 === undefined) k2 = k; + var desc = Object.getOwnPropertyDescriptor(m, k); + if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { + desc = { + enumerable: true, + get: function get() { + return m[k]; + } + }; + } + Object.defineProperty(o, k2, desc); +} : function (o, m, k, k2) { + if (k2 === undefined) k2 = k; + o[k2] = m[k]; +}); +var __setModuleDefault = this && this.__setModuleDefault || (Object.create ? function (o, v) { + Object.defineProperty(o, "default", { + enumerable: true, + value: v + }); +} : function (o, v) { + o["default"] = v; +}); +var __importStar = this && this.__importStar || function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); + __setModuleDefault(result, mod); + return result; +}; +exports.__esModule = true; +var jsx_runtime_1 = __webpack_require__(/*! react/jsx-runtime */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/react/jsx-runtime.js"); +var PropTypes = __importStar(__webpack_require__(/*! prop-types */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/prop-types/index.js")); +var shop_1 = __webpack_require__(/*! ../../model/shop */ "./var/plugins/System/PSC/Invoice/Webpack/src/model/shop.ts"); +var tsyringe_1 = __webpack_require__(/*! tsyringe */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/tsyringe/dist/esm5/index.js"); +var order_1 = __webpack_require__(/*! ../../state/order */ "./var/plugins/System/PSC/Invoice/Webpack/src/state/order.ts"); +var order_2 = __webpack_require__(/*! ../../model/order */ "./var/plugins/System/PSC/Invoice/Webpack/src/model/order.ts"); +var react_1 = __webpack_require__(/*! react */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/react/index.js"); var InfoFieldComponent = function InfoFieldComponent(_a) { var shop = _a.shop, order = _a.order; - var _b = (0,react__WEBPACK_IMPORTED_MODULE_4__.useState)(""), + var _b = (0, react_1.useState)(""), basketField1 = _b[0], setBasketField1 = _b[1]; - var _c = (0,react__WEBPACK_IMPORTED_MODULE_4__.useState)(""), + var _c = (0, react_1.useState)(""), basketField2 = _c[0], setBasketField2 = _c[1]; - var orderState = tsyringe__WEBPACK_IMPORTED_MODULE_1__.container.resolve(_state_order__WEBPACK_IMPORTED_MODULE_2__.OrderState); - (0,react__WEBPACK_IMPORTED_MODULE_4__.useEffect)(function () { + var orderState = tsyringe_1.container.resolve(order_1.OrderState); + (0, react_1.useEffect)(function () { setBasketField1(order.basketField1); setBasketField2(order.basketField1); }, [order.basketField1, order.basketField2]); @@ -3059,43 +3379,59 @@ var InfoFieldComponent = function InfoFieldComponent(_a) { orderState.setCurrentOrder(orderObj); setBasketField2(value); }; - return react__WEBPACK_IMPORTED_MODULE_4___default().createElement("div", { + return (0, jsx_runtime_1.jsx)("div", __assign({ className: "" - }, react__WEBPACK_IMPORTED_MODULE_4___default().createElement("div", { - className: "flex" - }, react__WEBPACK_IMPORTED_MODULE_4___default().createElement("div", { - className: "flex-1" - }, react__WEBPACK_IMPORTED_MODULE_4___default().createElement("div", { - className: 'flex gap-1' - }, react__WEBPACK_IMPORTED_MODULE_4___default().createElement("input", { - type: "text", - name: "basketField1", - value: basketField1, - onChange: function onChange(e) { - return changeBasketField1(e.target.value); - }, - className: "bg-gray-50 border border-gray-300 text-gray-900 text-sm rounded-lg focus:ring-blue-500 focus:border-blue-500 block w-full p-2.5 dark:bg-gray-700 dark:border-gray-600 dark:placeholder-gray-400 dark:text-white dark:focus:ring-blue-500 dark:focus:border-blue-500", - placeholder: "Info 1" - }), react__WEBPACK_IMPORTED_MODULE_4___default().createElement("label", null, shop.basketField1))), react__WEBPACK_IMPORTED_MODULE_4___default().createElement("div", { - className: "flex-1" - }, react__WEBPACK_IMPORTED_MODULE_4___default().createElement("div", { - className: 'flex gap-1' - }, react__WEBPACK_IMPORTED_MODULE_4___default().createElement("input", { - type: "text", - name: "basketField2", - value: basketField2, - onChange: function onChange(e) { - return changeBasketField2(e.target.value); - }, - className: "bg-gray-50 border border-gray-300 text-gray-900 text-sm rounded-lg focus:ring-blue-500 focus:border-blue-500 block w-full p-2.5 dark:bg-gray-700 dark:border-gray-600 dark:placeholder-gray-400 dark:text-white dark:focus:ring-blue-500 dark:focus:border-blue-500", - placeholder: "Info 2" - }), react__WEBPACK_IMPORTED_MODULE_4___default().createElement("label", null, shop.basketField2))))); + }, { + children: (0, jsx_runtime_1.jsxs)("div", __assign({ + className: "flex" + }, { + children: [(0, jsx_runtime_1.jsx)("div", __assign({ + className: "flex-1" + }, { + children: (0, jsx_runtime_1.jsxs)("div", __assign({ + className: 'flex gap-1' + }, { + children: [(0, jsx_runtime_1.jsx)("input", { + type: "text", + name: "basketField1", + value: basketField1, + onChange: function onChange(e) { + return changeBasketField1(e.target.value); + }, + className: "bg-gray-50 border border-gray-300 text-gray-900 text-sm rounded-lg focus:ring-blue-500 focus:border-blue-500 block w-full p-2.5 dark:bg-gray-700 dark:border-gray-600 dark:placeholder-gray-400 dark:text-white dark:focus:ring-blue-500 dark:focus:border-blue-500", + placeholder: "Info 1" + }), (0, jsx_runtime_1.jsx)("label", { + children: shop.basketField1 + })] + })) + })), (0, jsx_runtime_1.jsx)("div", __assign({ + className: "flex-1" + }, { + children: (0, jsx_runtime_1.jsxs)("div", __assign({ + className: 'flex gap-1' + }, { + children: [(0, jsx_runtime_1.jsx)("input", { + type: "text", + name: "basketField2", + value: basketField2, + onChange: function onChange(e) { + return changeBasketField2(e.target.value); + }, + className: "bg-gray-50 border border-gray-300 text-gray-900 text-sm rounded-lg focus:ring-blue-500 focus:border-blue-500 block w-full p-2.5 dark:bg-gray-700 dark:border-gray-600 dark:placeholder-gray-400 dark:text-white dark:focus:ring-blue-500 dark:focus:border-blue-500", + placeholder: "Info 2" + }), (0, jsx_runtime_1.jsx)("label", { + children: shop.basketField2 + })] + })) + }))] + })) + })); }; InfoFieldComponent.propTypes = { - order: prop_types__WEBPACK_IMPORTED_MODULE_5__.instanceOf(_model_order__WEBPACK_IMPORTED_MODULE_3__.Order), - shop: prop_types__WEBPACK_IMPORTED_MODULE_5__.instanceOf(_model_shop__WEBPACK_IMPORTED_MODULE_0__.Shop) + order: PropTypes.instanceOf(order_2.Order), + shop: PropTypes.instanceOf(shop_1.Shop) }; -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (InfoFieldComponent); +exports["default"] = InfoFieldComponent; /***/ }), @@ -3103,30 +3439,73 @@ InfoFieldComponent.propTypes = { /*!******************************************************************************************!*\ !*** ./var/plugins/System/PSC/Invoice/Webpack/src/modules/order/OrderAliasComponent.tsx ***! \******************************************************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/react/index.js"); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! prop-types */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/prop-types/index.js"); -/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_2__); -/* harmony import */ var _model_order__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../model/order */ "./var/plugins/System/PSC/Invoice/Webpack/src/model/order.ts"); +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { +__webpack_require__(/*! core-js/modules/es.object.assign.js */ "./node_modules/core-js/modules/es.object.assign.js"); +__webpack_require__(/*! core-js/modules/es.object.create.js */ "./node_modules/core-js/modules/es.object.create.js"); +__webpack_require__(/*! core-js/modules/es.object.get-own-property-descriptor.js */ "./node_modules/core-js/modules/es.object.get-own-property-descriptor.js"); +__webpack_require__(/*! core-js/modules/es.object.define-property.js */ "./node_modules/core-js/modules/es.object.define-property.js"); +var __assign = this && this.__assign || function () { + __assign = Object.assign || function (t) { + for (var s, i = 1, n = arguments.length; i < n; i++) { + s = arguments[i]; + for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; + } + return t; + }; + return __assign.apply(this, arguments); +}; +var __createBinding = this && this.__createBinding || (Object.create ? function (o, m, k, k2) { + if (k2 === undefined) k2 = k; + var desc = Object.getOwnPropertyDescriptor(m, k); + if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { + desc = { + enumerable: true, + get: function get() { + return m[k]; + } + }; + } + Object.defineProperty(o, k2, desc); +} : function (o, m, k, k2) { + if (k2 === undefined) k2 = k; + o[k2] = m[k]; +}); +var __setModuleDefault = this && this.__setModuleDefault || (Object.create ? function (o, v) { + Object.defineProperty(o, "default", { + enumerable: true, + value: v + }); +} : function (o, v) { + o["default"] = v; +}); +var __importStar = this && this.__importStar || function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); + __setModuleDefault(result, mod); + return result; +}; +exports.__esModule = true; +var jsx_runtime_1 = __webpack_require__(/*! react/jsx-runtime */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/react/jsx-runtime.js"); +var PropTypes = __importStar(__webpack_require__(/*! prop-types */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/prop-types/index.js")); +var order_1 = __webpack_require__(/*! ../../model/order */ "./var/plugins/System/PSC/Invoice/Webpack/src/model/order.ts"); var OrderAliasComponent = function OrderAliasComponent(_a) { var order = _a.order; - return react__WEBPACK_IMPORTED_MODULE_0__.createElement("div", { + return (0, jsx_runtime_1.jsx)("div", __assign({ className: "m-1 p-2" - }, react__WEBPACK_IMPORTED_MODULE_0__.createElement("h4", null, "NR: ", order.alias)); + }, { + children: (0, jsx_runtime_1.jsxs)("h4", { + children: ["NR: ", order.alias] + }) + })); }; OrderAliasComponent.propTypes = { - order: prop_types__WEBPACK_IMPORTED_MODULE_2__.instanceOf(_model_order__WEBPACK_IMPORTED_MODULE_1__.Order) + order: PropTypes.instanceOf(order_1.Order) }; -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (OrderAliasComponent); +exports["default"] = OrderAliasComponent; /***/ }), @@ -3134,48 +3513,64 @@ OrderAliasComponent.propTypes = { /*!*****************************************************************************************!*\ !*** ./var/plugins/System/PSC/Invoice/Webpack/src/modules/payment/PaymentComponent.tsx ***! \*****************************************************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var core_js_modules_es_object_to_string_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.object.to-string.js */ "./node_modules/core-js/modules/es.object.to-string.js"); -/* harmony import */ var core_js_modules_es_object_to_string_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_object_to_string_js__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var core_js_modules_es_promise_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es.promise.js */ "./node_modules/core-js/modules/es.promise.js"); -/* harmony import */ var core_js_modules_es_promise_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_promise_js__WEBPACK_IMPORTED_MODULE_1__); -/* harmony import */ var core_js_modules_es_symbol_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! core-js/modules/es.symbol.js */ "./node_modules/core-js/modules/es.symbol.js"); -/* harmony import */ var core_js_modules_es_symbol_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_symbol_js__WEBPACK_IMPORTED_MODULE_2__); -/* harmony import */ var core_js_modules_es_symbol_description_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! core-js/modules/es.symbol.description.js */ "./node_modules/core-js/modules/es.symbol.description.js"); -/* harmony import */ var core_js_modules_es_symbol_description_js__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_symbol_description_js__WEBPACK_IMPORTED_MODULE_3__); -/* harmony import */ var core_js_modules_es_symbol_iterator_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! core-js/modules/es.symbol.iterator.js */ "./node_modules/core-js/modules/es.symbol.iterator.js"); -/* harmony import */ var core_js_modules_es_symbol_iterator_js__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_symbol_iterator_js__WEBPACK_IMPORTED_MODULE_4__); -/* harmony import */ var core_js_modules_es_array_iterator_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! core-js/modules/es.array.iterator.js */ "./node_modules/core-js/modules/es.array.iterator.js"); -/* harmony import */ var core_js_modules_es_array_iterator_js__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_iterator_js__WEBPACK_IMPORTED_MODULE_5__); -/* harmony import */ var core_js_modules_es_string_iterator_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! core-js/modules/es.string.iterator.js */ "./node_modules/core-js/modules/es.string.iterator.js"); -/* harmony import */ var core_js_modules_es_string_iterator_js__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_iterator_js__WEBPACK_IMPORTED_MODULE_6__); -/* harmony import */ var core_js_modules_web_dom_collections_iterator_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! core-js/modules/web.dom-collections.iterator.js */ "./node_modules/core-js/modules/web.dom-collections.iterator.js"); -/* harmony import */ var core_js_modules_web_dom_collections_iterator_js__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_web_dom_collections_iterator_js__WEBPACK_IMPORTED_MODULE_7__); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! react */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/react/index.js"); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_8__); -/* harmony import */ var react_select_async_paginate__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! react-select-async-paginate */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/react-select-async-paginate/dist/esm/index.js"); -/* harmony import */ var _services_payment__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../../services/payment */ "./var/plugins/System/PSC/Invoice/Webpack/src/services/payment.ts"); -/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! prop-types */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/prop-types/index.js"); -/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_16___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_16__); -/* harmony import */ var _model_shop__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../../model/shop */ "./var/plugins/System/PSC/Invoice/Webpack/src/model/shop.ts"); -/* harmony import */ var tsyringe__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! tsyringe */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/tsyringe/dist/esm5/index.js"); -/* harmony import */ var _state_order__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../../state/order */ "./var/plugins/System/PSC/Invoice/Webpack/src/state/order.ts"); -/* harmony import */ var _model_order__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ../../model/order */ "./var/plugins/System/PSC/Invoice/Webpack/src/model/order.ts"); -/* harmony import */ var _base_SelectLabel__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ../base/SelectLabel */ "./var/plugins/System/PSC/Invoice/Webpack/src/modules/base/SelectLabel.tsx"); +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - - - - -var __awaiter = undefined && undefined.__awaiter || function (thisArg, _arguments, P, generator) { +__webpack_require__(/*! core-js/modules/es.object.assign.js */ "./node_modules/core-js/modules/es.object.assign.js"); +__webpack_require__(/*! core-js/modules/es.object.create.js */ "./node_modules/core-js/modules/es.object.create.js"); +__webpack_require__(/*! core-js/modules/es.object.get-own-property-descriptor.js */ "./node_modules/core-js/modules/es.object.get-own-property-descriptor.js"); +__webpack_require__(/*! core-js/modules/es.object.define-property.js */ "./node_modules/core-js/modules/es.object.define-property.js"); +__webpack_require__(/*! core-js/modules/es.object.to-string.js */ "./node_modules/core-js/modules/es.object.to-string.js"); +__webpack_require__(/*! core-js/modules/es.promise.js */ "./node_modules/core-js/modules/es.promise.js"); +__webpack_require__(/*! core-js/modules/es.symbol.js */ "./node_modules/core-js/modules/es.symbol.js"); +__webpack_require__(/*! core-js/modules/es.symbol.description.js */ "./node_modules/core-js/modules/es.symbol.description.js"); +__webpack_require__(/*! core-js/modules/es.symbol.iterator.js */ "./node_modules/core-js/modules/es.symbol.iterator.js"); +__webpack_require__(/*! core-js/modules/es.array.iterator.js */ "./node_modules/core-js/modules/es.array.iterator.js"); +__webpack_require__(/*! core-js/modules/es.string.iterator.js */ "./node_modules/core-js/modules/es.string.iterator.js"); +__webpack_require__(/*! core-js/modules/web.dom-collections.iterator.js */ "./node_modules/core-js/modules/web.dom-collections.iterator.js"); +var __assign = this && this.__assign || function () { + __assign = Object.assign || function (t) { + for (var s, i = 1, n = arguments.length; i < n; i++) { + s = arguments[i]; + for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; + } + return t; + }; + return __assign.apply(this, arguments); +}; +var __createBinding = this && this.__createBinding || (Object.create ? function (o, m, k, k2) { + if (k2 === undefined) k2 = k; + var desc = Object.getOwnPropertyDescriptor(m, k); + if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { + desc = { + enumerable: true, + get: function get() { + return m[k]; + } + }; + } + Object.defineProperty(o, k2, desc); +} : function (o, m, k, k2) { + if (k2 === undefined) k2 = k; + o[k2] = m[k]; +}); +var __setModuleDefault = this && this.__setModuleDefault || (Object.create ? function (o, v) { + Object.defineProperty(o, "default", { + enumerable: true, + value: v + }); +} : function (o, v) { + o["default"] = v; +}); +var __importStar = this && this.__importStar || function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); + __setModuleDefault(result, mod); + return result; +}; +var __awaiter = this && this.__awaiter || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); @@ -3202,7 +3597,7 @@ var __awaiter = undefined && undefined.__awaiter || function (thisArg, _argument step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; -var __generator = undefined && undefined.__generator || function (thisArg, body) { +var __generator = this && this.__generator || function (thisArg, body) { var _ = { label: 0, sent: function sent() { @@ -3290,27 +3685,28 @@ var __generator = undefined && undefined.__generator || function (thisArg, body) }; } }; - - - - - - - - - - +exports.__esModule = true; +var jsx_runtime_1 = __webpack_require__(/*! react/jsx-runtime */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/react/jsx-runtime.js"); +var react_select_async_paginate_1 = __webpack_require__(/*! react-select-async-paginate */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/react-select-async-paginate/dist/index.js"); +var payment_1 = __webpack_require__(/*! ../../services/payment */ "./var/plugins/System/PSC/Invoice/Webpack/src/services/payment.ts"); +var PropTypes = __importStar(__webpack_require__(/*! prop-types */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/prop-types/index.js")); +var shop_1 = __webpack_require__(/*! ../../model/shop */ "./var/plugins/System/PSC/Invoice/Webpack/src/model/shop.ts"); +var tsyringe_1 = __webpack_require__(/*! tsyringe */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/tsyringe/dist/esm5/index.js"); +var order_1 = __webpack_require__(/*! ../../state/order */ "./var/plugins/System/PSC/Invoice/Webpack/src/state/order.ts"); +var order_2 = __webpack_require__(/*! ../../model/order */ "./var/plugins/System/PSC/Invoice/Webpack/src/model/order.ts"); +var react_1 = __webpack_require__(/*! react */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/react/index.js"); +var SelectLabel_1 = __webpack_require__(/*! ../base/SelectLabel */ "./var/plugins/System/PSC/Invoice/Webpack/src/modules/base/SelectLabel.tsx"); var PaymentComponent = function PaymentComponent(_a) { var shop = _a.shop, order = _a.order; - var _b = (0,react__WEBPACK_IMPORTED_MODULE_8__.useState)(null), + var _b = (0, react_1.useState)(null), shopUuid = _b[0], setShopUuid = _b[1]; - var orderState = tsyringe__WEBPACK_IMPORTED_MODULE_12__.container.resolve(_state_order__WEBPACK_IMPORTED_MODULE_13__.OrderState); - var _c = (0,react__WEBPACK_IMPORTED_MODULE_8__.useState)(0), + var orderState = tsyringe_1.container.resolve(order_1.OrderState); + var _c = (0, react_1.useState)(0), payment = _c[0], setPayment = _c[1]; - var payment_service = new _services_payment__WEBPACK_IMPORTED_MODULE_10__.PaymentService(); + var payment_service = new payment_1.PaymentService(); var loadOptions = function loadOptions(searchQuery, loadedOptions) { return __awaiter(void 0, void 0, void 0, function () { var data; @@ -3328,10 +3724,10 @@ var PaymentComponent = function PaymentComponent(_a) { }); }); }; - (0,react__WEBPACK_IMPORTED_MODULE_8__.useEffect)(function () { + (0, react_1.useEffect)(function () { setShopUuid(shop.uuid); }, [shop.uuid]); - (0,react__WEBPACK_IMPORTED_MODULE_8__.useEffect)(function () { + (0, react_1.useEffect)(function () { setPayment(order.payment.uid); }, [order.payment]); var onChange = function onChange(option) { @@ -3341,34 +3737,35 @@ var PaymentComponent = function PaymentComponent(_a) { orderState.setCurrentOrder(orderObj); setPayment(option.uid); }; - return react__WEBPACK_IMPORTED_MODULE_8__.createElement("div", { + return (0, jsx_runtime_1.jsx)("div", __assign({ className: "p-2" - }, react__WEBPACK_IMPORTED_MODULE_8__.createElement(react_select_async_paginate__WEBPACK_IMPORTED_MODULE_9__.AsyncPaginate, { - defaultOptions: true, - key: JSON.stringify(shopUuid), - components: { - Control: _base_SelectLabel__WEBPACK_IMPORTED_MODULE_15__.SelectLabel - }, - defaultValue: order.payment, - loadOptions: loadOptions, - placeholder: '', - name: 'Zahlart', - getOptionValue: function getOptionValue(option) { - return option.uid; - }, - getOptionLabel: function getOptionLabel(option) { - return option.title; - }, - onChange: onChange, - isSearchable: false, - className: "".concat(payment == 0 ? "border border-red-500" : "") + }, { + children: (0, jsx_runtime_1.jsx)(react_select_async_paginate_1.AsyncPaginate, { + defaultOptions: true, + components: { + Control: SelectLabel_1.SelectLabel + }, + defaultValue: order.payment, + loadOptions: loadOptions, + placeholder: '', + name: 'Zahlart', + getOptionValue: function getOptionValue(option) { + return option.uid; + }, + getOptionLabel: function getOptionLabel(option) { + return option.title; + }, + onChange: onChange, + isSearchable: false, + className: "".concat(payment == 0 ? "border border-red-500" : "") + }, JSON.stringify(shopUuid)) })); }; PaymentComponent.propTypes = { - shop: prop_types__WEBPACK_IMPORTED_MODULE_16__.instanceOf(_model_shop__WEBPACK_IMPORTED_MODULE_11__.Shop), - order: prop_types__WEBPACK_IMPORTED_MODULE_16__.instanceOf(_model_order__WEBPACK_IMPORTED_MODULE_14__.Order) + shop: PropTypes.instanceOf(shop_1.Shop), + order: PropTypes.instanceOf(order_2.Order) }; -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (PaymentComponent); +exports["default"] = PaymentComponent; /***/ }), @@ -3376,101 +3773,155 @@ PaymentComponent.propTypes = { /*!***********************************************************************************************!*\ !*** ./var/plugins/System/PSC/Invoice/Webpack/src/modules/positions/AddPositionComponent.tsx ***! \***********************************************************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/react/index.js"); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! prop-types */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/prop-types/index.js"); -/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_10___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_10__); -/* harmony import */ var _model_shop__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../model/shop */ "./var/plugins/System/PSC/Invoice/Webpack/src/model/shop.ts"); -/* harmony import */ var _model_product__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../model/product */ "./var/plugins/System/PSC/Invoice/Webpack/src/model/product.ts"); -/* harmony import */ var _model_productGroup__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../model/productGroup */ "./var/plugins/System/PSC/Invoice/Webpack/src/model/productGroup.ts"); -/* harmony import */ var _product_ProductGroupSelect__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../product/ProductGroupSelect */ "./var/plugins/System/PSC/Invoice/Webpack/src/modules/product/ProductGroupSelect.tsx"); -/* harmony import */ var _product_ProductSelect__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../product/ProductSelect */ "./var/plugins/System/PSC/Invoice/Webpack/src/modules/product/ProductSelect.tsx"); -/* harmony import */ var _product_ProductForm__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../product/ProductForm */ "./var/plugins/System/PSC/Invoice/Webpack/src/modules/product/ProductForm.tsx"); -/* harmony import */ var _model_pos__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../model/pos */ "./var/plugins/System/PSC/Invoice/Webpack/src/model/pos.ts"); -/* harmony import */ var _base_Button__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../base/Button */ "./var/plugins/System/PSC/Invoice/Webpack/src/modules/base/Button.tsx"); -/* harmony import */ var flowbite_react__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! flowbite-react */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/flowbite-react/dist/esm/index.mjs"); - - - - - - - - - +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { +__webpack_require__(/*! core-js/modules/es.object.assign.js */ "./node_modules/core-js/modules/es.object.assign.js"); +__webpack_require__(/*! core-js/modules/es.object.create.js */ "./node_modules/core-js/modules/es.object.create.js"); +__webpack_require__(/*! core-js/modules/es.object.get-own-property-descriptor.js */ "./node_modules/core-js/modules/es.object.get-own-property-descriptor.js"); +__webpack_require__(/*! core-js/modules/es.object.define-property.js */ "./node_modules/core-js/modules/es.object.define-property.js"); +var __assign = this && this.__assign || function () { + __assign = Object.assign || function (t) { + for (var s, i = 1, n = arguments.length; i < n; i++) { + s = arguments[i]; + for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; + } + return t; + }; + return __assign.apply(this, arguments); +}; +var __createBinding = this && this.__createBinding || (Object.create ? function (o, m, k, k2) { + if (k2 === undefined) k2 = k; + var desc = Object.getOwnPropertyDescriptor(m, k); + if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { + desc = { + enumerable: true, + get: function get() { + return m[k]; + } + }; + } + Object.defineProperty(o, k2, desc); +} : function (o, m, k, k2) { + if (k2 === undefined) k2 = k; + o[k2] = m[k]; +}); +var __setModuleDefault = this && this.__setModuleDefault || (Object.create ? function (o, v) { + Object.defineProperty(o, "default", { + enumerable: true, + value: v + }); +} : function (o, v) { + o["default"] = v; +}); +var __importStar = this && this.__importStar || function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); + __setModuleDefault(result, mod); + return result; +}; +var __importDefault = this && this.__importDefault || function (mod) { + return mod && mod.__esModule ? mod : { + "default": mod + }; +}; +exports.__esModule = true; +var jsx_runtime_1 = __webpack_require__(/*! react/jsx-runtime */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/react/jsx-runtime.js"); +var react_1 = __webpack_require__(/*! react */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/react/index.js"); +var PropTypes = __importStar(__webpack_require__(/*! prop-types */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/prop-types/index.js")); +var shop_1 = __webpack_require__(/*! ../../model/shop */ "./var/plugins/System/PSC/Invoice/Webpack/src/model/shop.ts"); +var product_1 = __webpack_require__(/*! ../../model/product */ "./var/plugins/System/PSC/Invoice/Webpack/src/model/product.ts"); +var productGroup_1 = __webpack_require__(/*! ../../model/productGroup */ "./var/plugins/System/PSC/Invoice/Webpack/src/model/productGroup.ts"); +var ProductGroupSelect_1 = __importDefault(__webpack_require__(/*! ../product/ProductGroupSelect */ "./var/plugins/System/PSC/Invoice/Webpack/src/modules/product/ProductGroupSelect.tsx")); +var ProductSelect_1 = __importDefault(__webpack_require__(/*! ../product/ProductSelect */ "./var/plugins/System/PSC/Invoice/Webpack/src/modules/product/ProductSelect.tsx")); +var ProductForm_1 = __importDefault(__webpack_require__(/*! ../product/ProductForm */ "./var/plugins/System/PSC/Invoice/Webpack/src/modules/product/ProductForm.tsx")); +var pos_1 = __webpack_require__(/*! ../../model/pos */ "./var/plugins/System/PSC/Invoice/Webpack/src/model/pos.ts"); +var Button_1 = __importDefault(__webpack_require__(/*! ../base/Button */ "./var/plugins/System/PSC/Invoice/Webpack/src/modules/base/Button.tsx")); +var flowbite_react_1 = __webpack_require__(/*! flowbite-react */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/flowbite-react/dist/cjs/index.cjs"); var AddPositionComponent = function AddPositionComponent(props) { - var _a = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(null), + var _a = (0, react_1.useState)(null), shop = _a[0], setShop = _a[1]; - (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(function () { + (0, react_1.useEffect)(function () { setShop(props.shop); }, [props.shop]); - var _b = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false), + var _b = (0, react_1.useState)(false), show = _b[0], setShow = _b[1]; - var pos = new _model_pos__WEBPACK_IMPORTED_MODULE_7__.Pos(); + var pos = new pos_1.Pos(); var handleClose = function handleClose() { return setShow(false); }; var handleShow = function handleShow() { return setShow(true); }; - var _c = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(new _model_product__WEBPACK_IMPORTED_MODULE_2__.Product()), + var _c = (0, react_1.useState)(new product_1.Product()), product = _c[0], setProduct = _c[1]; - var _d = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(new _model_productGroup__WEBPACK_IMPORTED_MODULE_3__.ProductGroup()), + var _d = (0, react_1.useState)(new productGroup_1.ProductGroup()), productGroup = _d[0], setProductGroup = _d[1]; pos.product = product; - return react__WEBPACK_IMPORTED_MODULE_0__.createElement("div", { + return (0, jsx_runtime_1.jsxs)("div", __assign({ className: 'text-center' - }, react__WEBPACK_IMPORTED_MODULE_0__.createElement(_base_Button__WEBPACK_IMPORTED_MODULE_8__["default"], { - type: 1, - onClick: handleShow, - variant: "success" - }), react__WEBPACK_IMPORTED_MODULE_0__.createElement(flowbite_react__WEBPACK_IMPORTED_MODULE_9__.Modal, { - size: "7xl", - show: show, - onClose: function onClose() { - return handleClose(); - } - }, react__WEBPACK_IMPORTED_MODULE_0__.createElement(flowbite_react__WEBPACK_IMPORTED_MODULE_9__.Modal.Header, null, "add position"), react__WEBPACK_IMPORTED_MODULE_0__.createElement(flowbite_react__WEBPACK_IMPORTED_MODULE_9__.Modal.Body, { - className: "min-h-96" - }, react__WEBPACK_IMPORTED_MODULE_0__.createElement("div", { - className: 'flex' - }, react__WEBPACK_IMPORTED_MODULE_0__.createElement("div", { - className: 'flex-1' - }, react__WEBPACK_IMPORTED_MODULE_0__.createElement("h4", null, "ProductGroup"), react__WEBPACK_IMPORTED_MODULE_0__.createElement(_product_ProductGroupSelect__WEBPACK_IMPORTED_MODULE_4__["default"], { - value: productGroup, - shop: props.shop, - onChange: setProductGroup - })), react__WEBPACK_IMPORTED_MODULE_0__.createElement("div", { - className: 'flex-1' - }, react__WEBPACK_IMPORTED_MODULE_0__.createElement("h4", null, "Product"), react__WEBPACK_IMPORTED_MODULE_0__.createElement(_product_ProductSelect__WEBPACK_IMPORTED_MODULE_5__["default"], { - value: product, - shop: props.shop, - productGroup: productGroup, - onChange: setProduct - }))), react__WEBPACK_IMPORTED_MODULE_0__.createElement(_product_ProductForm__WEBPACK_IMPORTED_MODULE_6__["default"], { - pos: pos, - handleChange: props.addPos, - handleClose: handleClose - })))); + }, { + children: [(0, jsx_runtime_1.jsx)(Button_1["default"], { + type: 1, + onClick: handleShow, + variant: "success" + }), (0, jsx_runtime_1.jsxs)(flowbite_react_1.Modal, __assign({ + size: "7xl", + show: show, + onClose: function onClose() { + return handleClose(); + } + }, { + children: [(0, jsx_runtime_1.jsx)(flowbite_react_1.Modal.Header, { + children: "add position" + }), (0, jsx_runtime_1.jsxs)(flowbite_react_1.Modal.Body, __assign({ + className: "min-h-96" + }, { + children: [(0, jsx_runtime_1.jsxs)("div", __assign({ + className: 'flex' + }, { + children: [(0, jsx_runtime_1.jsxs)("div", __assign({ + className: 'flex-1' + }, { + children: [(0, jsx_runtime_1.jsx)("h4", { + children: "ProductGroup" + }), (0, jsx_runtime_1.jsx)(ProductGroupSelect_1["default"], { + value: productGroup, + shop: props.shop, + onChange: setProductGroup + })] + })), (0, jsx_runtime_1.jsxs)("div", __assign({ + className: 'flex-1' + }, { + children: [(0, jsx_runtime_1.jsx)("h4", { + children: "Product" + }), (0, jsx_runtime_1.jsx)(ProductSelect_1["default"], { + value: product, + shop: props.shop, + productGroup: productGroup, + onChange: setProduct + })] + }))] + })), (0, jsx_runtime_1.jsx)(ProductForm_1["default"], { + pos: pos, + handleChange: props.addPos, + handleClose: handleClose + })] + }))] + }))] + })); }; AddPositionComponent.propTypes = { - shop: prop_types__WEBPACK_IMPORTED_MODULE_10__.instanceOf(_model_shop__WEBPACK_IMPORTED_MODULE_1__.Shop), - addPos: prop_types__WEBPACK_IMPORTED_MODULE_10__.func + shop: PropTypes.instanceOf(shop_1.Shop), + addPos: PropTypes.func }; -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (AddPositionComponent); +exports["default"] = AddPositionComponent; /***/ }), @@ -3478,34 +3929,74 @@ AddPositionComponent.propTypes = { /*!************************************************************************************************!*\ !*** ./var/plugins/System/PSC/Invoice/Webpack/src/modules/positions/EditPositionComponent.tsx ***! \************************************************************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/react/index.js"); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! prop-types */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/prop-types/index.js"); -/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_6__); -/* harmony import */ var _model_shop__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../model/shop */ "./var/plugins/System/PSC/Invoice/Webpack/src/model/shop.ts"); -/* harmony import */ var _model_pos__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../model/pos */ "./var/plugins/System/PSC/Invoice/Webpack/src/model/pos.ts"); -/* harmony import */ var _base_Button__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../base/Button */ "./var/plugins/System/PSC/Invoice/Webpack/src/modules/base/Button.tsx"); -/* harmony import */ var _product_ProductForm__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../product/ProductForm */ "./var/plugins/System/PSC/Invoice/Webpack/src/modules/product/ProductForm.tsx"); -/* harmony import */ var flowbite_react__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! flowbite-react */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/flowbite-react/dist/esm/index.mjs"); - - - - - +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { +__webpack_require__(/*! core-js/modules/es.object.assign.js */ "./node_modules/core-js/modules/es.object.assign.js"); +__webpack_require__(/*! core-js/modules/es.object.create.js */ "./node_modules/core-js/modules/es.object.create.js"); +__webpack_require__(/*! core-js/modules/es.object.get-own-property-descriptor.js */ "./node_modules/core-js/modules/es.object.get-own-property-descriptor.js"); +__webpack_require__(/*! core-js/modules/es.object.define-property.js */ "./node_modules/core-js/modules/es.object.define-property.js"); +var __assign = this && this.__assign || function () { + __assign = Object.assign || function (t) { + for (var s, i = 1, n = arguments.length; i < n; i++) { + s = arguments[i]; + for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; + } + return t; + }; + return __assign.apply(this, arguments); +}; +var __createBinding = this && this.__createBinding || (Object.create ? function (o, m, k, k2) { + if (k2 === undefined) k2 = k; + var desc = Object.getOwnPropertyDescriptor(m, k); + if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { + desc = { + enumerable: true, + get: function get() { + return m[k]; + } + }; + } + Object.defineProperty(o, k2, desc); +} : function (o, m, k, k2) { + if (k2 === undefined) k2 = k; + o[k2] = m[k]; +}); +var __setModuleDefault = this && this.__setModuleDefault || (Object.create ? function (o, v) { + Object.defineProperty(o, "default", { + enumerable: true, + value: v + }); +} : function (o, v) { + o["default"] = v; +}); +var __importStar = this && this.__importStar || function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); + __setModuleDefault(result, mod); + return result; +}; +var __importDefault = this && this.__importDefault || function (mod) { + return mod && mod.__esModule ? mod : { + "default": mod + }; +}; +exports.__esModule = true; +var jsx_runtime_1 = __webpack_require__(/*! react/jsx-runtime */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/react/jsx-runtime.js"); +var react_1 = __webpack_require__(/*! react */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/react/index.js"); +var PropTypes = __importStar(__webpack_require__(/*! prop-types */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/prop-types/index.js")); +var shop_1 = __webpack_require__(/*! ../../model/shop */ "./var/plugins/System/PSC/Invoice/Webpack/src/model/shop.ts"); +var pos_1 = __webpack_require__(/*! ../../model/pos */ "./var/plugins/System/PSC/Invoice/Webpack/src/model/pos.ts"); +var Button_1 = __importDefault(__webpack_require__(/*! ../base/Button */ "./var/plugins/System/PSC/Invoice/Webpack/src/modules/base/Button.tsx")); +var ProductForm_1 = __importDefault(__webpack_require__(/*! ../product/ProductForm */ "./var/plugins/System/PSC/Invoice/Webpack/src/modules/product/ProductForm.tsx")); +var flowbite_react_1 = __webpack_require__(/*! flowbite-react */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/flowbite-react/dist/cjs/index.cjs"); var EditPositionComponent = function EditPositionComponent(_a) { var position = _a.position, shop = _a.shop, changePos = _a.changePos; - var _b = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false), + var _b = (0, react_1.useState)(false), show = _b[0], setShow = _b[1]; var handleClose = function handleClose() { @@ -3514,30 +4005,40 @@ var EditPositionComponent = function EditPositionComponent(_a) { var handleShow = function handleShow() { return setShow(true); }; - return react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_base_Button__WEBPACK_IMPORTED_MODULE_3__["default"], { - type: 2, - variant: "gray", - onClick: handleShow - })), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(flowbite_react__WEBPACK_IMPORTED_MODULE_5__.Modal, { - size: "7xl", - show: show, - onClose: function onClose() { - return handleClose(); - } - }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(flowbite_react__WEBPACK_IMPORTED_MODULE_5__.Modal.Header, { - className: "text-mauve12 m-0 text-[17px] font-medium" - }, "edit position"), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(flowbite_react__WEBPACK_IMPORTED_MODULE_5__.Modal.Body, null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_product_ProductForm__WEBPACK_IMPORTED_MODULE_4__["default"], { - pos: position, - handleChange: changePos, - handleClose: handleClose - })))); + return (0, jsx_runtime_1.jsxs)("div", { + children: [(0, jsx_runtime_1.jsx)("div", { + children: (0, jsx_runtime_1.jsx)(Button_1["default"], { + type: 2, + variant: "gray", + onClick: handleShow + }) + }), (0, jsx_runtime_1.jsxs)(flowbite_react_1.Modal, __assign({ + size: "7xl", + show: show, + onClose: function onClose() { + return handleClose(); + } + }, { + children: [(0, jsx_runtime_1.jsx)(flowbite_react_1.Modal.Header, __assign({ + className: "text-mauve12 m-0 text-[17px] font-medium" + }, { + children: "edit position" + })), (0, jsx_runtime_1.jsx)(flowbite_react_1.Modal.Body, { + children: (0, jsx_runtime_1.jsx)(ProductForm_1["default"], { + pos: position, + handleChange: changePos, + handleClose: handleClose + }) + })] + }))] + }); }; EditPositionComponent.propTypes = { - shop: prop_types__WEBPACK_IMPORTED_MODULE_6__.instanceOf(_model_shop__WEBPACK_IMPORTED_MODULE_1__.Shop), - position: prop_types__WEBPACK_IMPORTED_MODULE_6__.instanceOf(_model_pos__WEBPACK_IMPORTED_MODULE_2__.Pos), - changePos: prop_types__WEBPACK_IMPORTED_MODULE_6__.func + shop: PropTypes.instanceOf(shop_1.Shop), + position: PropTypes.instanceOf(pos_1.Pos), + changePos: PropTypes.func }; -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (EditPositionComponent); +exports["default"] = EditPositionComponent; /***/ }), @@ -3545,66 +4046,138 @@ EditPositionComponent.propTypes = { /*!*****************************************************************************************!*\ !*** ./var/plugins/System/PSC/Invoice/Webpack/src/modules/positions/ItemsComponent.tsx ***! \*****************************************************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var core_js_modules_es_array_map_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.array.map.js */ "./node_modules/core-js/modules/es.array.map.js"); -/* harmony import */ var core_js_modules_es_array_map_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_map_js__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! prop-types */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/prop-types/index.js"); -/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_4__); -/* harmony import */ var _PosComponent__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./PosComponent */ "./var/plugins/System/PSC/Invoice/Webpack/src/modules/positions/PosComponent.tsx"); -/* harmony import */ var _model_shop__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../model/shop */ "./var/plugins/System/PSC/Invoice/Webpack/src/model/shop.ts"); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/react/index.js"); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_3__); - - +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { +__webpack_require__(/*! core-js/modules/es.object.assign.js */ "./node_modules/core-js/modules/es.object.assign.js"); +__webpack_require__(/*! core-js/modules/es.object.create.js */ "./node_modules/core-js/modules/es.object.create.js"); +__webpack_require__(/*! core-js/modules/es.object.get-own-property-descriptor.js */ "./node_modules/core-js/modules/es.object.get-own-property-descriptor.js"); +__webpack_require__(/*! core-js/modules/es.object.define-property.js */ "./node_modules/core-js/modules/es.object.define-property.js"); +__webpack_require__(/*! core-js/modules/es.array.map.js */ "./node_modules/core-js/modules/es.array.map.js"); +var __assign = this && this.__assign || function () { + __assign = Object.assign || function (t) { + for (var s, i = 1, n = arguments.length; i < n; i++) { + s = arguments[i]; + for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; + } + return t; + }; + return __assign.apply(this, arguments); +}; +var __createBinding = this && this.__createBinding || (Object.create ? function (o, m, k, k2) { + if (k2 === undefined) k2 = k; + var desc = Object.getOwnPropertyDescriptor(m, k); + if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { + desc = { + enumerable: true, + get: function get() { + return m[k]; + } + }; + } + Object.defineProperty(o, k2, desc); +} : function (o, m, k, k2) { + if (k2 === undefined) k2 = k; + o[k2] = m[k]; +}); +var __setModuleDefault = this && this.__setModuleDefault || (Object.create ? function (o, v) { + Object.defineProperty(o, "default", { + enumerable: true, + value: v + }); +} : function (o, v) { + o["default"] = v; +}); +var __importStar = this && this.__importStar || function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); + __setModuleDefault(result, mod); + return result; +}; +var __importDefault = this && this.__importDefault || function (mod) { + return mod && mod.__esModule ? mod : { + "default": mod + }; +}; +exports.__esModule = true; +var jsx_runtime_1 = __webpack_require__(/*! react/jsx-runtime */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/react/jsx-runtime.js"); +var PropTypes = __importStar(__webpack_require__(/*! prop-types */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/prop-types/index.js")); +var PosComponent_1 = __importDefault(__webpack_require__(/*! ./PosComponent */ "./var/plugins/System/PSC/Invoice/Webpack/src/modules/positions/PosComponent.tsx")); +var shop_1 = __webpack_require__(/*! ../../model/shop */ "./var/plugins/System/PSC/Invoice/Webpack/src/model/shop.ts"); var ItemsComponent = function ItemsComponent(_a) { var positions = _a.positions, delPos = _a.delPos, shop = _a.shop, changePos = _a.changePos; - return react__WEBPACK_IMPORTED_MODULE_3___default().createElement("div", null, react__WEBPACK_IMPORTED_MODULE_3___default().createElement("div", { - className: 'flex' - }, react__WEBPACK_IMPORTED_MODULE_3___default().createElement("div", { - className: 'flex-1' - }, react__WEBPACK_IMPORTED_MODULE_3___default().createElement("h5", null, "Pos")), react__WEBPACK_IMPORTED_MODULE_3___default().createElement("div", { - className: 'flex-1' - }, react__WEBPACK_IMPORTED_MODULE_3___default().createElement("h5", null, "Title")), react__WEBPACK_IMPORTED_MODULE_3___default().createElement("div", { - className: 'flex-1' - }, react__WEBPACK_IMPORTED_MODULE_3___default().createElement("h5", null, "Anzahl")), react__WEBPACK_IMPORTED_MODULE_3___default().createElement("div", { - className: 'flex-1 text-end' - }, react__WEBPACK_IMPORTED_MODULE_3___default().createElement("h5", null, "Netto")), react__WEBPACK_IMPORTED_MODULE_3___default().createElement("div", { - className: 'flex-1 text-end' - }, react__WEBPACK_IMPORTED_MODULE_3___default().createElement("h5", null, "Tax")), react__WEBPACK_IMPORTED_MODULE_3___default().createElement("div", { - className: 'flex-1 text-end' - }, react__WEBPACK_IMPORTED_MODULE_3___default().createElement("h5", null, "Gross")), react__WEBPACK_IMPORTED_MODULE_3___default().createElement("div", { - className: 'flex-1 text-end' - }, react__WEBPACK_IMPORTED_MODULE_3___default().createElement("h5", null, "Status")), react__WEBPACK_IMPORTED_MODULE_3___default().createElement("div", { - className: 'flex-1' - })), react__WEBPACK_IMPORTED_MODULE_3___default().createElement("hr", null), positions.map(function (object, i) { - return react__WEBPACK_IMPORTED_MODULE_3___default().createElement(_PosComponent__WEBPACK_IMPORTED_MODULE_1__["default"], { - pos: object, - shop: shop, - delPos: delPos, - changePos: changePos, - key: i, - index: i - }); - })); + return (0, jsx_runtime_1.jsxs)("div", { + children: [(0, jsx_runtime_1.jsxs)("div", __assign({ + className: 'flex' + }, { + children: [(0, jsx_runtime_1.jsx)("div", __assign({ + className: 'flex-1' + }, { + children: (0, jsx_runtime_1.jsx)("h5", { + children: "Pos" + }) + })), (0, jsx_runtime_1.jsx)("div", __assign({ + className: 'flex-1' + }, { + children: (0, jsx_runtime_1.jsx)("h5", { + children: "Title" + }) + })), (0, jsx_runtime_1.jsx)("div", __assign({ + className: 'flex-1' + }, { + children: (0, jsx_runtime_1.jsx)("h5", { + children: "Anzahl" + }) + })), (0, jsx_runtime_1.jsx)("div", __assign({ + className: 'flex-1 text-end' + }, { + children: (0, jsx_runtime_1.jsx)("h5", { + children: "Netto" + }) + })), (0, jsx_runtime_1.jsx)("div", __assign({ + className: 'flex-1 text-end' + }, { + children: (0, jsx_runtime_1.jsx)("h5", { + children: "Tax" + }) + })), (0, jsx_runtime_1.jsx)("div", __assign({ + className: 'flex-1 text-end' + }, { + children: (0, jsx_runtime_1.jsx)("h5", { + children: "Gross" + }) + })), (0, jsx_runtime_1.jsx)("div", __assign({ + className: 'flex-1 text-end' + }, { + children: (0, jsx_runtime_1.jsx)("h5", { + children: "Status" + }) + })), (0, jsx_runtime_1.jsx)("div", { + className: 'flex-1' + })] + })), (0, jsx_runtime_1.jsx)("hr", {}), positions.map(function (object, i) { + return (0, jsx_runtime_1.jsx)(PosComponent_1["default"], { + pos: object, + shop: shop, + delPos: delPos, + changePos: changePos, + index: i + }, i); + })] + }); }; ItemsComponent.propTypes = { - positions: prop_types__WEBPACK_IMPORTED_MODULE_4__.array, - delPos: prop_types__WEBPACK_IMPORTED_MODULE_4__.func, - changePos: prop_types__WEBPACK_IMPORTED_MODULE_4__.func, - shop: prop_types__WEBPACK_IMPORTED_MODULE_4__.instanceOf(_model_shop__WEBPACK_IMPORTED_MODULE_2__.Shop) + positions: PropTypes.array, + delPos: PropTypes.func, + changePos: PropTypes.func, + shop: PropTypes.instanceOf(shop_1.Shop) }; -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (ItemsComponent); +exports["default"] = ItemsComponent; /***/ }), @@ -3612,28 +4185,68 @@ ItemsComponent.propTypes = { /*!***************************************************************************************!*\ !*** ./var/plugins/System/PSC/Invoice/Webpack/src/modules/positions/PosComponent.tsx ***! \***************************************************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/react/index.js"); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! prop-types */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/prop-types/index.js"); -/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_6__); -/* harmony import */ var _model_pos__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../model/pos */ "./var/plugins/System/PSC/Invoice/Webpack/src/model/pos.ts"); -/* harmony import */ var _base_Button__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../base/Button */ "./var/plugins/System/PSC/Invoice/Webpack/src/modules/base/Button.tsx"); -/* harmony import */ var _EditPositionComponent__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./EditPositionComponent */ "./var/plugins/System/PSC/Invoice/Webpack/src/modules/positions/EditPositionComponent.tsx"); -/* harmony import */ var _model_shop__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../model/shop */ "./var/plugins/System/PSC/Invoice/Webpack/src/model/shop.ts"); -/* harmony import */ var _base_Currency__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../base/Currency */ "./var/plugins/System/PSC/Invoice/Webpack/src/modules/base/Currency.tsx"); - - - - +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { +__webpack_require__(/*! core-js/modules/es.object.assign.js */ "./node_modules/core-js/modules/es.object.assign.js"); +__webpack_require__(/*! core-js/modules/es.object.create.js */ "./node_modules/core-js/modules/es.object.create.js"); +__webpack_require__(/*! core-js/modules/es.object.get-own-property-descriptor.js */ "./node_modules/core-js/modules/es.object.get-own-property-descriptor.js"); +__webpack_require__(/*! core-js/modules/es.object.define-property.js */ "./node_modules/core-js/modules/es.object.define-property.js"); +var __assign = this && this.__assign || function () { + __assign = Object.assign || function (t) { + for (var s, i = 1, n = arguments.length; i < n; i++) { + s = arguments[i]; + for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; + } + return t; + }; + return __assign.apply(this, arguments); +}; +var __createBinding = this && this.__createBinding || (Object.create ? function (o, m, k, k2) { + if (k2 === undefined) k2 = k; + var desc = Object.getOwnPropertyDescriptor(m, k); + if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { + desc = { + enumerable: true, + get: function get() { + return m[k]; + } + }; + } + Object.defineProperty(o, k2, desc); +} : function (o, m, k, k2) { + if (k2 === undefined) k2 = k; + o[k2] = m[k]; +}); +var __setModuleDefault = this && this.__setModuleDefault || (Object.create ? function (o, v) { + Object.defineProperty(o, "default", { + enumerable: true, + value: v + }); +} : function (o, v) { + o["default"] = v; +}); +var __importStar = this && this.__importStar || function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); + __setModuleDefault(result, mod); + return result; +}; +var __importDefault = this && this.__importDefault || function (mod) { + return mod && mod.__esModule ? mod : { + "default": mod + }; +}; +exports.__esModule = true; +var jsx_runtime_1 = __webpack_require__(/*! react/jsx-runtime */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/react/jsx-runtime.js"); +var PropTypes = __importStar(__webpack_require__(/*! prop-types */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/prop-types/index.js")); +var pos_1 = __webpack_require__(/*! ../../model/pos */ "./var/plugins/System/PSC/Invoice/Webpack/src/model/pos.ts"); +var Button_1 = __importDefault(__webpack_require__(/*! ../base/Button */ "./var/plugins/System/PSC/Invoice/Webpack/src/modules/base/Button.tsx")); +var EditPositionComponent_1 = __importDefault(__webpack_require__(/*! ./EditPositionComponent */ "./var/plugins/System/PSC/Invoice/Webpack/src/modules/positions/EditPositionComponent.tsx")); +var shop_1 = __webpack_require__(/*! ../../model/shop */ "./var/plugins/System/PSC/Invoice/Webpack/src/model/shop.ts"); +var Currency_1 = __importDefault(__webpack_require__(/*! ../base/Currency */ "./var/plugins/System/PSC/Invoice/Webpack/src/modules/base/Currency.tsx")); var PosComponent = function PosComponent(_a) { var index = _a.index, pos = _a.pos, @@ -3643,52 +4256,72 @@ var PosComponent = function PosComponent(_a) { var deletePos = function deletePos(uuid) { delPos(uuid); }; - return react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { - className: 'flex' - }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { - className: 'flex-1' - }, index + 1), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { - className: 'flex-1' - }, pos.product.title), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { - className: 'flex-1' - }, pos.count), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { - className: 'flex-1 text-end' - }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_base_Currency__WEBPACK_IMPORTED_MODULE_5__["default"], { - price: pos.price.allNet - })), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { - className: 'flex-1 text-end' - }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_base_Currency__WEBPACK_IMPORTED_MODULE_5__["default"], { - price: pos.price.allVat - })), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { - className: 'flex-1 text-end' - }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_base_Currency__WEBPACK_IMPORTED_MODULE_5__["default"], { - price: pos.price.allGross - })), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { - className: 'flex-1 text-end' - }), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { - className: 'flex-1 text-end' - }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { - className: "flex gap-1" - }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_EditPositionComponent__WEBPACK_IMPORTED_MODULE_3__["default"], { - shop: shop, - position: pos, - changePos: changePos - }), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_base_Button__WEBPACK_IMPORTED_MODULE_2__["default"], { - type: 5, - variant: 'failure', - onClick: function onClick() { - return deletePos(pos.uuid); - } - })))), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("hr", null)); + return (0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { + children: [(0, jsx_runtime_1.jsxs)("div", __assign({ + className: 'flex' + }, { + children: [(0, jsx_runtime_1.jsx)("div", __assign({ + className: 'flex-1' + }, { + children: index + 1 + })), (0, jsx_runtime_1.jsx)("div", __assign({ + className: 'flex-1' + }, { + children: pos.product.title + })), (0, jsx_runtime_1.jsx)("div", __assign({ + className: 'flex-1' + }, { + children: pos.count + })), (0, jsx_runtime_1.jsx)("div", __assign({ + className: 'flex-1 text-end' + }, { + children: (0, jsx_runtime_1.jsx)(Currency_1["default"], { + price: pos.price.allNet + }) + })), (0, jsx_runtime_1.jsx)("div", __assign({ + className: 'flex-1 text-end' + }, { + children: (0, jsx_runtime_1.jsx)(Currency_1["default"], { + price: pos.price.allVat + }) + })), (0, jsx_runtime_1.jsx)("div", __assign({ + className: 'flex-1 text-end' + }, { + children: (0, jsx_runtime_1.jsx)(Currency_1["default"], { + price: pos.price.allGross + }) + })), (0, jsx_runtime_1.jsx)("div", { + className: 'flex-1 text-end' + }), (0, jsx_runtime_1.jsx)("div", __assign({ + className: 'flex-1 text-end' + }, { + children: (0, jsx_runtime_1.jsxs)("div", __assign({ + className: "flex gap-1" + }, { + children: [(0, jsx_runtime_1.jsx)(EditPositionComponent_1["default"], { + shop: shop, + position: pos, + changePos: changePos + }), (0, jsx_runtime_1.jsx)(Button_1["default"], { + type: 5, + variant: 'failure', + onClick: function onClick() { + return deletePos(pos.uuid); + } + })] + })) + }))] + })), (0, jsx_runtime_1.jsx)("hr", {})] + }); }; PosComponent.propTypes = { - index: prop_types__WEBPACK_IMPORTED_MODULE_6__.number, - pos: prop_types__WEBPACK_IMPORTED_MODULE_6__.instanceOf(_model_pos__WEBPACK_IMPORTED_MODULE_1__.Pos), - shop: prop_types__WEBPACK_IMPORTED_MODULE_6__.instanceOf(_model_shop__WEBPACK_IMPORTED_MODULE_4__.Shop), - delPos: prop_types__WEBPACK_IMPORTED_MODULE_6__.func, - changePos: prop_types__WEBPACK_IMPORTED_MODULE_6__.func + index: PropTypes.number, + pos: PropTypes.instanceOf(pos_1.Pos), + shop: PropTypes.instanceOf(shop_1.Shop), + delPos: PropTypes.func, + changePos: PropTypes.func }; -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (PosComponent); +exports["default"] = PosComponent; /***/ }), @@ -3696,38 +4329,61 @@ PosComponent.propTypes = { /*!*********************************************************************************************!*\ !*** ./var/plugins/System/PSC/Invoice/Webpack/src/modules/positions/PositionsComponent.tsx ***! \*********************************************************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var core_js_modules_es_array_slice_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.array.slice.js */ "./node_modules/core-js/modules/es.array.slice.js"); -/* harmony import */ var core_js_modules_es_array_slice_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_slice_js__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var core_js_modules_es_array_concat_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es.array.concat.js */ "./node_modules/core-js/modules/es.array.concat.js"); -/* harmony import */ var core_js_modules_es_array_concat_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_concat_js__WEBPACK_IMPORTED_MODULE_1__); -/* harmony import */ var core_js_modules_es_array_map_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! core-js/modules/es.array.map.js */ "./node_modules/core-js/modules/es.array.map.js"); -/* harmony import */ var core_js_modules_es_array_map_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_map_js__WEBPACK_IMPORTED_MODULE_2__); -/* harmony import */ var core_js_modules_es_array_filter_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! core-js/modules/es.array.filter.js */ "./node_modules/core-js/modules/es.array.filter.js"); -/* harmony import */ var core_js_modules_es_array_filter_js__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_filter_js__WEBPACK_IMPORTED_MODULE_3__); -/* harmony import */ var core_js_modules_es_object_to_string_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! core-js/modules/es.object.to-string.js */ "./node_modules/core-js/modules/es.object.to-string.js"); -/* harmony import */ var core_js_modules_es_object_to_string_js__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_object_to_string_js__WEBPACK_IMPORTED_MODULE_4__); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! react */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/react/index.js"); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_5__); -/* harmony import */ var _AddPositionComponent__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./AddPositionComponent */ "./var/plugins/System/PSC/Invoice/Webpack/src/modules/positions/AddPositionComponent.tsx"); -/* harmony import */ var _ItemsComponent__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./ItemsComponent */ "./var/plugins/System/PSC/Invoice/Webpack/src/modules/positions/ItemsComponent.tsx"); -/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! prop-types */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/prop-types/index.js"); -/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_12___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_12__); -/* harmony import */ var _model_shop__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../../model/shop */ "./var/plugins/System/PSC/Invoice/Webpack/src/model/shop.ts"); -/* harmony import */ var _model_order__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../../model/order */ "./var/plugins/System/PSC/Invoice/Webpack/src/model/order.ts"); -/* harmony import */ var tsyringe__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! tsyringe */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/tsyringe/dist/esm5/index.js"); -/* harmony import */ var _state_order__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../../state/order */ "./var/plugins/System/PSC/Invoice/Webpack/src/state/order.ts"); +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - -var __spreadArray = undefined && undefined.__spreadArray || function (to, from, pack) { +__webpack_require__(/*! core-js/modules/es.object.assign.js */ "./node_modules/core-js/modules/es.object.assign.js"); +__webpack_require__(/*! core-js/modules/es.object.create.js */ "./node_modules/core-js/modules/es.object.create.js"); +__webpack_require__(/*! core-js/modules/es.object.get-own-property-descriptor.js */ "./node_modules/core-js/modules/es.object.get-own-property-descriptor.js"); +__webpack_require__(/*! core-js/modules/es.object.define-property.js */ "./node_modules/core-js/modules/es.object.define-property.js"); +__webpack_require__(/*! core-js/modules/es.array.slice.js */ "./node_modules/core-js/modules/es.array.slice.js"); +__webpack_require__(/*! core-js/modules/es.array.concat.js */ "./node_modules/core-js/modules/es.array.concat.js"); +__webpack_require__(/*! core-js/modules/es.array.map.js */ "./node_modules/core-js/modules/es.array.map.js"); +__webpack_require__(/*! core-js/modules/es.array.filter.js */ "./node_modules/core-js/modules/es.array.filter.js"); +__webpack_require__(/*! core-js/modules/es.object.to-string.js */ "./node_modules/core-js/modules/es.object.to-string.js"); +var __assign = this && this.__assign || function () { + __assign = Object.assign || function (t) { + for (var s, i = 1, n = arguments.length; i < n; i++) { + s = arguments[i]; + for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; + } + return t; + }; + return __assign.apply(this, arguments); +}; +var __createBinding = this && this.__createBinding || (Object.create ? function (o, m, k, k2) { + if (k2 === undefined) k2 = k; + var desc = Object.getOwnPropertyDescriptor(m, k); + if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { + desc = { + enumerable: true, + get: function get() { + return m[k]; + } + }; + } + Object.defineProperty(o, k2, desc); +} : function (o, m, k, k2) { + if (k2 === undefined) k2 = k; + o[k2] = m[k]; +}); +var __setModuleDefault = this && this.__setModuleDefault || (Object.create ? function (o, v) { + Object.defineProperty(o, "default", { + enumerable: true, + value: v + }); +} : function (o, v) { + o["default"] = v; +}); +var __importStar = this && this.__importStar || function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); + __setModuleDefault(result, mod); + return result; +}; +var __spreadArray = this && this.__spreadArray || function (to, from, pack) { if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) { if (ar || !(i in from)) { if (!ar) ar = Array.prototype.slice.call(from, 0, i); @@ -3736,21 +4392,27 @@ var __spreadArray = undefined && undefined.__spreadArray || function (to, from, } return to.concat(ar || Array.prototype.slice.call(from)); }; - - - - - - - - - +var __importDefault = this && this.__importDefault || function (mod) { + return mod && mod.__esModule ? mod : { + "default": mod + }; +}; +exports.__esModule = true; +var jsx_runtime_1 = __webpack_require__(/*! react/jsx-runtime */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/react/jsx-runtime.js"); +var AddPositionComponent_1 = __importDefault(__webpack_require__(/*! ./AddPositionComponent */ "./var/plugins/System/PSC/Invoice/Webpack/src/modules/positions/AddPositionComponent.tsx")); +var ItemsComponent_1 = __importDefault(__webpack_require__(/*! ./ItemsComponent */ "./var/plugins/System/PSC/Invoice/Webpack/src/modules/positions/ItemsComponent.tsx")); +var PropTypes = __importStar(__webpack_require__(/*! prop-types */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/prop-types/index.js")); +var shop_1 = __webpack_require__(/*! ../../model/shop */ "./var/plugins/System/PSC/Invoice/Webpack/src/model/shop.ts"); +var react_1 = __webpack_require__(/*! react */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/react/index.js"); +var order_1 = __webpack_require__(/*! ../../model/order */ "./var/plugins/System/PSC/Invoice/Webpack/src/model/order.ts"); +var tsyringe_1 = __webpack_require__(/*! tsyringe */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/tsyringe/dist/esm5/index.js"); +var order_2 = __webpack_require__(/*! ../../state/order */ "./var/plugins/System/PSC/Invoice/Webpack/src/state/order.ts"); var PositionsComponent = function PositionsComponent(_a) { var order = _a.order, shop = _a.shop, updateOrder = _a.updateOrder; - var orderState = tsyringe__WEBPACK_IMPORTED_MODULE_10__.container.resolve(_state_order__WEBPACK_IMPORTED_MODULE_11__.OrderState); - var _b = (0,react__WEBPACK_IMPORTED_MODULE_5__.useState)(order.positions), + var orderState = tsyringe_1.container.resolve(order_2.OrderState); + var _b = (0, react_1.useState)(order.positions), positions = _b[0], setPositions = _b[1]; var addPos = function addPos(posObj) { @@ -3772,29 +4434,31 @@ var PositionsComponent = function PositionsComponent(_a) { }); setPositions(pos); }; - (0,react__WEBPACK_IMPORTED_MODULE_5__.useEffect)(function () { + (0, react_1.useEffect)(function () { var orderObj = orderState.getCurrentOrder().value; orderObj.positions = positions; orderState.setCurrentOrder(orderObj); }, [positions]); - return react__WEBPACK_IMPORTED_MODULE_5___default().createElement("div", { + return (0, jsx_runtime_1.jsxs)("div", __assign({ className: "p-2" - }, react__WEBPACK_IMPORTED_MODULE_5___default().createElement(_ItemsComponent__WEBPACK_IMPORTED_MODULE_7__["default"], { - positions: positions, - shop: shop, - delPos: delPos, - changePos: changePos - }), react__WEBPACK_IMPORTED_MODULE_5___default().createElement(_AddPositionComponent__WEBPACK_IMPORTED_MODULE_6__["default"], { - shop: shop, - addPos: addPos + }, { + children: [(0, jsx_runtime_1.jsx)(ItemsComponent_1["default"], { + positions: positions, + shop: shop, + delPos: delPos, + changePos: changePos + }), (0, jsx_runtime_1.jsx)(AddPositionComponent_1["default"], { + shop: shop, + addPos: addPos + })] })); }; PositionsComponent.propTypes = { - shop: prop_types__WEBPACK_IMPORTED_MODULE_12__.instanceOf(_model_shop__WEBPACK_IMPORTED_MODULE_8__.Shop), - order: prop_types__WEBPACK_IMPORTED_MODULE_12__.instanceOf(_model_order__WEBPACK_IMPORTED_MODULE_9__.Order), - updateOrder: prop_types__WEBPACK_IMPORTED_MODULE_12__.func + shop: PropTypes.instanceOf(shop_1.Shop), + order: PropTypes.instanceOf(order_1.Order), + updateOrder: PropTypes.func }; -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (PositionsComponent); +exports["default"] = PositionsComponent; /***/ }), @@ -3802,56 +4466,92 @@ PositionsComponent.propTypes = { /*!************************************************************************************!*\ !*** ./var/plugins/System/PSC/Invoice/Webpack/src/modules/product/ProductForm.tsx ***! \************************************************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! prop-types */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/prop-types/index.js"); -/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_10___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_10__); -/* harmony import */ var _model_shop__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../model/shop */ "./var/plugins/System/PSC/Invoice/Webpack/src/model/shop.ts"); -/* harmony import */ var _rjsf_validator_ajv6__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @rjsf/validator-ajv6 */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/@rjsf/validator-ajv6/lib/index.js"); -/* harmony import */ var _rjsf_core__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @rjsf/core */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/@rjsf/core/lib/index.js"); -/* harmony import */ var _services_product__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../services/product */ "./var/plugins/System/PSC/Invoice/Webpack/src/services/product.ts"); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! react */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/react/index.js"); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_4__); -/* harmony import */ var _model_price__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../model/price */ "./var/plugins/System/PSC/Invoice/Webpack/src/model/price.ts"); -/* harmony import */ var _model_pos__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../model/pos */ "./var/plugins/System/PSC/Invoice/Webpack/src/model/pos.ts"); -/* harmony import */ var use_debounce__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! use-debounce */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/use-debounce/dist/index.module.js"); -/* harmony import */ var _base_Button__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../base/Button */ "./var/plugins/System/PSC/Invoice/Webpack/src/modules/base/Button.tsx"); -/* harmony import */ var _base_Currency__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../base/Currency */ "./var/plugins/System/PSC/Invoice/Webpack/src/modules/base/Currency.tsx"); - - - - - - - - - +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { +__webpack_require__(/*! core-js/modules/es.object.assign.js */ "./node_modules/core-js/modules/es.object.assign.js"); +__webpack_require__(/*! core-js/modules/es.object.create.js */ "./node_modules/core-js/modules/es.object.create.js"); +__webpack_require__(/*! core-js/modules/es.object.get-own-property-descriptor.js */ "./node_modules/core-js/modules/es.object.get-own-property-descriptor.js"); +__webpack_require__(/*! core-js/modules/es.object.define-property.js */ "./node_modules/core-js/modules/es.object.define-property.js"); +var __assign = this && this.__assign || function () { + __assign = Object.assign || function (t) { + for (var s, i = 1, n = arguments.length; i < n; i++) { + s = arguments[i]; + for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; + } + return t; + }; + return __assign.apply(this, arguments); +}; +var __createBinding = this && this.__createBinding || (Object.create ? function (o, m, k, k2) { + if (k2 === undefined) k2 = k; + var desc = Object.getOwnPropertyDescriptor(m, k); + if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { + desc = { + enumerable: true, + get: function get() { + return m[k]; + } + }; + } + Object.defineProperty(o, k2, desc); +} : function (o, m, k, k2) { + if (k2 === undefined) k2 = k; + o[k2] = m[k]; +}); +var __setModuleDefault = this && this.__setModuleDefault || (Object.create ? function (o, v) { + Object.defineProperty(o, "default", { + enumerable: true, + value: v + }); +} : function (o, v) { + o["default"] = v; +}); +var __importStar = this && this.__importStar || function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); + __setModuleDefault(result, mod); + return result; +}; +var __importDefault = this && this.__importDefault || function (mod) { + return mod && mod.__esModule ? mod : { + "default": mod + }; +}; +exports.__esModule = true; +var jsx_runtime_1 = __webpack_require__(/*! react/jsx-runtime */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/react/jsx-runtime.js"); +var PropTypes = __importStar(__webpack_require__(/*! prop-types */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/prop-types/index.js")); +var shop_1 = __webpack_require__(/*! ../../model/shop */ "./var/plugins/System/PSC/Invoice/Webpack/src/model/shop.ts"); +var validator_ajv6_1 = __importDefault(__webpack_require__(/*! @rjsf/validator-ajv6 */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/@rjsf/validator-ajv6/lib/index.js")); +var core_1 = __importDefault(__webpack_require__(/*! @rjsf/core */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/@rjsf/core/lib/index.js")); +var product_1 = __webpack_require__(/*! ../../services/product */ "./var/plugins/System/PSC/Invoice/Webpack/src/services/product.ts"); +var react_1 = __webpack_require__(/*! react */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/react/index.js"); +var price_1 = __webpack_require__(/*! ../../model/price */ "./var/plugins/System/PSC/Invoice/Webpack/src/model/price.ts"); +var pos_1 = __webpack_require__(/*! ../../model/pos */ "./var/plugins/System/PSC/Invoice/Webpack/src/model/pos.ts"); +var use_debounce_1 = __webpack_require__(/*! use-debounce */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/use-debounce/dist/index.module.js"); +var Button_1 = __importDefault(__webpack_require__(/*! ../base/Button */ "./var/plugins/System/PSC/Invoice/Webpack/src/modules/base/Button.tsx")); +var Currency_1 = __importDefault(__webpack_require__(/*! ../base/Currency */ "./var/plugins/System/PSC/Invoice/Webpack/src/modules/base/Currency.tsx")); var ProductForm = function ProductForm(_a) { var shop = _a.shop, pos = _a.pos, handleClose = _a.handleClose, handleChange = _a.handleChange; - var product_api = new _services_product__WEBPACK_IMPORTED_MODULE_3__.ProductService(); - var _b = (0,react__WEBPACK_IMPORTED_MODULE_4__.useState)({}), + var product_api = new product_1.ProductService(); + var _b = (0, react_1.useState)({}), schema = _b[0], setSchema = _b[1]; - var _c = (0,react__WEBPACK_IMPORTED_MODULE_4__.useState)({}), + var _c = (0, react_1.useState)({}), uiSchema = _c[0], setUiSchema = _c[1]; - var _d = (0,react__WEBPACK_IMPORTED_MODULE_4__.useState)({}), + var _d = (0, react_1.useState)({}), formData = _d[0], setFormData = _d[1]; - var _e = (0,react__WEBPACK_IMPORTED_MODULE_4__.useState)(0), + var _e = (0, react_1.useState)(0), type = _e[0], setType = _e[1]; - var _f = (0,react__WEBPACK_IMPORTED_MODULE_4__.useState)(new _model_price__WEBPACK_IMPORTED_MODULE_5__.Price()), + var _f = (0, react_1.useState)(new price_1.Price()), price = _f[0], setPrice = _f[1]; var loadSchema = function loadSchema(loadData) { @@ -3874,7 +4574,7 @@ var ProductForm = function ProductForm(_a) { setFormData(formData); debounceReCalc(); }; - var debounceReCalc = (0,use_debounce__WEBPACK_IMPORTED_MODULE_9__.useDebouncedCallback)(function () { + var debounceReCalc = (0, use_debounce_1.useDebouncedCallback)(function () { var data = {}; product_api.calcProduct(pos.product, formData).then(function (value) { for (var obj in value['jsonForm']['properties']) { @@ -3897,7 +4597,7 @@ var ProductForm = function ProductForm(_a) { handleChange(pos); handleClose(); }; - (0,react__WEBPACK_IMPORTED_MODULE_4__.useEffect)(function () { + (0, react_1.useEffect)(function () { if (pos.product.specialProductTypeObject.params) { setFormData(pos.product.specialProductTypeObject.params); loadSchema(pos.product.specialProductTypeObject.params); @@ -3906,39 +4606,55 @@ var ProductForm = function ProductForm(_a) { loadSchema({}); } }, [pos.product]); - return react__WEBPACK_IMPORTED_MODULE_4___default().createElement((react__WEBPACK_IMPORTED_MODULE_4___default().Fragment), null, react__WEBPACK_IMPORTED_MODULE_4___default().createElement("div", { - className: 'flex' - }, react__WEBPACK_IMPORTED_MODULE_4___default().createElement("div", { - className: 'flex-1' - }, react__WEBPACK_IMPORTED_MODULE_4___default().createElement(_rjsf_core__WEBPACK_IMPORTED_MODULE_2__["default"], { - schema: schema, - uiSchema: uiSchema, - formData: formData, - onChange: function onChange(e) { - return changeCalc(e.formData); - }, - validator: _rjsf_validator_ajv6__WEBPACK_IMPORTED_MODULE_1__["default"] - })), react__WEBPACK_IMPORTED_MODULE_4___default().createElement("div", { - className: '' - }, react__WEBPACK_IMPORTED_MODULE_4___default().createElement((react__WEBPACK_IMPORTED_MODULE_4___default().Fragment), null, react__WEBPACK_IMPORTED_MODULE_4___default().createElement("h5", null, "Netto: ", react__WEBPACK_IMPORTED_MODULE_4___default().createElement(_base_Currency__WEBPACK_IMPORTED_MODULE_8__["default"], { - price: price.allNet - })), react__WEBPACK_IMPORTED_MODULE_4___default().createElement("h5", null, "Mwert: ", react__WEBPACK_IMPORTED_MODULE_4___default().createElement(_base_Currency__WEBPACK_IMPORTED_MODULE_8__["default"], { - price: price.allVat - })), react__WEBPACK_IMPORTED_MODULE_4___default().createElement("h4", null, "Brutto: ", react__WEBPACK_IMPORTED_MODULE_4___default().createElement(_base_Currency__WEBPACK_IMPORTED_MODULE_8__["default"], { - price: price.allGross - })), react__WEBPACK_IMPORTED_MODULE_4___default().createElement(_base_Button__WEBPACK_IMPORTED_MODULE_7__["default"], { - onClick: addProduct, - type: 3, - variant: "success" - }))))); + return (0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, { + children: (0, jsx_runtime_1.jsxs)("div", __assign({ + className: 'flex' + }, { + children: [(0, jsx_runtime_1.jsx)("div", __assign({ + className: 'flex-1' + }, { + children: (0, jsx_runtime_1.jsx)(core_1["default"], { + schema: schema, + uiSchema: uiSchema, + formData: formData, + onChange: function onChange(e) { + return changeCalc(e.formData); + }, + validator: validator_ajv6_1["default"] + }) + })), (0, jsx_runtime_1.jsx)("div", __assign({ + className: '' + }, { + children: (0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { + children: [(0, jsx_runtime_1.jsxs)("h5", { + children: ["Netto: ", (0, jsx_runtime_1.jsx)(Currency_1["default"], { + price: price.allNet + })] + }), (0, jsx_runtime_1.jsxs)("h5", { + children: ["Mwert: ", (0, jsx_runtime_1.jsx)(Currency_1["default"], { + price: price.allVat + })] + }), (0, jsx_runtime_1.jsxs)("h4", { + children: ["Brutto: ", (0, jsx_runtime_1.jsx)(Currency_1["default"], { + price: price.allGross + })] + }), (0, jsx_runtime_1.jsx)(Button_1["default"], { + onClick: addProduct, + type: 3, + variant: "success" + })] + }) + }))] + })) + }); }; ProductForm.propTypes = { - shop: prop_types__WEBPACK_IMPORTED_MODULE_10__.instanceOf(_model_shop__WEBPACK_IMPORTED_MODULE_0__.Shop), - pos: prop_types__WEBPACK_IMPORTED_MODULE_10__.instanceOf(_model_pos__WEBPACK_IMPORTED_MODULE_6__.Pos), - handleClose: prop_types__WEBPACK_IMPORTED_MODULE_10__.func, - handleChange: prop_types__WEBPACK_IMPORTED_MODULE_10__.func + shop: PropTypes.instanceOf(shop_1.Shop), + pos: PropTypes.instanceOf(pos_1.Pos), + handleClose: PropTypes.func, + handleChange: PropTypes.func }; -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (ProductForm); +exports["default"] = ProductForm; /***/ }), @@ -3946,47 +4662,53 @@ ProductForm.propTypes = { /*!*******************************************************************************************!*\ !*** ./var/plugins/System/PSC/Invoice/Webpack/src/modules/product/ProductGroupSelect.tsx ***! \*******************************************************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var core_js_modules_es_object_to_string_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.object.to-string.js */ "./node_modules/core-js/modules/es.object.to-string.js"); -/* harmony import */ var core_js_modules_es_object_to_string_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_object_to_string_js__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var core_js_modules_es_promise_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es.promise.js */ "./node_modules/core-js/modules/es.promise.js"); -/* harmony import */ var core_js_modules_es_promise_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_promise_js__WEBPACK_IMPORTED_MODULE_1__); -/* harmony import */ var core_js_modules_es_symbol_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! core-js/modules/es.symbol.js */ "./node_modules/core-js/modules/es.symbol.js"); -/* harmony import */ var core_js_modules_es_symbol_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_symbol_js__WEBPACK_IMPORTED_MODULE_2__); -/* harmony import */ var core_js_modules_es_symbol_description_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! core-js/modules/es.symbol.description.js */ "./node_modules/core-js/modules/es.symbol.description.js"); -/* harmony import */ var core_js_modules_es_symbol_description_js__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_symbol_description_js__WEBPACK_IMPORTED_MODULE_3__); -/* harmony import */ var core_js_modules_es_symbol_iterator_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! core-js/modules/es.symbol.iterator.js */ "./node_modules/core-js/modules/es.symbol.iterator.js"); -/* harmony import */ var core_js_modules_es_symbol_iterator_js__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_symbol_iterator_js__WEBPACK_IMPORTED_MODULE_4__); -/* harmony import */ var core_js_modules_es_array_iterator_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! core-js/modules/es.array.iterator.js */ "./node_modules/core-js/modules/es.array.iterator.js"); -/* harmony import */ var core_js_modules_es_array_iterator_js__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_iterator_js__WEBPACK_IMPORTED_MODULE_5__); -/* harmony import */ var core_js_modules_es_string_iterator_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! core-js/modules/es.string.iterator.js */ "./node_modules/core-js/modules/es.string.iterator.js"); -/* harmony import */ var core_js_modules_es_string_iterator_js__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_iterator_js__WEBPACK_IMPORTED_MODULE_6__); -/* harmony import */ var core_js_modules_web_dom_collections_iterator_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! core-js/modules/web.dom-collections.iterator.js */ "./node_modules/core-js/modules/web.dom-collections.iterator.js"); -/* harmony import */ var core_js_modules_web_dom_collections_iterator_js__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_web_dom_collections_iterator_js__WEBPACK_IMPORTED_MODULE_7__); -/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! prop-types */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/prop-types/index.js"); -/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_15___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_15__); -/* harmony import */ var _model_shop__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../../model/shop */ "./var/plugins/System/PSC/Invoice/Webpack/src/model/shop.ts"); -/* harmony import */ var tsyringe__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! tsyringe */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/tsyringe/dist/esm5/index.js"); -/* harmony import */ var _state_order__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../../state/order */ "./var/plugins/System/PSC/Invoice/Webpack/src/state/order.ts"); -/* harmony import */ var _model_productGroup__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../../model/productGroup */ "./var/plugins/System/PSC/Invoice/Webpack/src/model/productGroup.ts"); -/* harmony import */ var _services_productgroup__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../../services/productgroup */ "./var/plugins/System/PSC/Invoice/Webpack/src/services/productgroup.ts"); -/* harmony import */ var react_select_async__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! react-select/async */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/react-select/async/dist/react-select-async.esm.js"); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! react */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/react/index.js"); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_14___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_14__); +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - - - - -var __awaiter = undefined && undefined.__awaiter || function (thisArg, _arguments, P, generator) { +__webpack_require__(/*! core-js/modules/es.object.create.js */ "./node_modules/core-js/modules/es.object.create.js"); +__webpack_require__(/*! core-js/modules/es.object.get-own-property-descriptor.js */ "./node_modules/core-js/modules/es.object.get-own-property-descriptor.js"); +__webpack_require__(/*! core-js/modules/es.object.define-property.js */ "./node_modules/core-js/modules/es.object.define-property.js"); +__webpack_require__(/*! core-js/modules/es.object.to-string.js */ "./node_modules/core-js/modules/es.object.to-string.js"); +__webpack_require__(/*! core-js/modules/es.promise.js */ "./node_modules/core-js/modules/es.promise.js"); +__webpack_require__(/*! core-js/modules/es.symbol.js */ "./node_modules/core-js/modules/es.symbol.js"); +__webpack_require__(/*! core-js/modules/es.symbol.description.js */ "./node_modules/core-js/modules/es.symbol.description.js"); +__webpack_require__(/*! core-js/modules/es.symbol.iterator.js */ "./node_modules/core-js/modules/es.symbol.iterator.js"); +__webpack_require__(/*! core-js/modules/es.array.iterator.js */ "./node_modules/core-js/modules/es.array.iterator.js"); +__webpack_require__(/*! core-js/modules/es.string.iterator.js */ "./node_modules/core-js/modules/es.string.iterator.js"); +__webpack_require__(/*! core-js/modules/web.dom-collections.iterator.js */ "./node_modules/core-js/modules/web.dom-collections.iterator.js"); +var __createBinding = this && this.__createBinding || (Object.create ? function (o, m, k, k2) { + if (k2 === undefined) k2 = k; + var desc = Object.getOwnPropertyDescriptor(m, k); + if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { + desc = { + enumerable: true, + get: function get() { + return m[k]; + } + }; + } + Object.defineProperty(o, k2, desc); +} : function (o, m, k, k2) { + if (k2 === undefined) k2 = k; + o[k2] = m[k]; +}); +var __setModuleDefault = this && this.__setModuleDefault || (Object.create ? function (o, v) { + Object.defineProperty(o, "default", { + enumerable: true, + value: v + }); +} : function (o, v) { + o["default"] = v; +}); +var __importStar = this && this.__importStar || function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); + __setModuleDefault(result, mod); + return result; +}; +var __awaiter = this && this.__awaiter || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); @@ -4013,7 +4735,7 @@ var __awaiter = undefined && undefined.__awaiter || function (thisArg, _argument step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; -var __generator = undefined && undefined.__generator || function (thisArg, body) { +var __generator = this && this.__generator || function (thisArg, body) { var _ = { label: 0, sent: function sent() { @@ -4101,23 +4823,29 @@ var __generator = undefined && undefined.__generator || function (thisArg, body) }; } }; - - - - - - - - +var __importDefault = this && this.__importDefault || function (mod) { + return mod && mod.__esModule ? mod : { + "default": mod + }; +}; +exports.__esModule = true; +var jsx_runtime_1 = __webpack_require__(/*! react/jsx-runtime */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/react/jsx-runtime.js"); +var PropTypes = __importStar(__webpack_require__(/*! prop-types */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/prop-types/index.js")); +var shop_1 = __webpack_require__(/*! ../../model/shop */ "./var/plugins/System/PSC/Invoice/Webpack/src/model/shop.ts"); +var tsyringe_1 = __webpack_require__(/*! tsyringe */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/tsyringe/dist/esm5/index.js"); +var order_1 = __webpack_require__(/*! ../../state/order */ "./var/plugins/System/PSC/Invoice/Webpack/src/state/order.ts"); +var productGroup_1 = __webpack_require__(/*! ../../model/productGroup */ "./var/plugins/System/PSC/Invoice/Webpack/src/model/productGroup.ts"); +var productgroup_1 = __webpack_require__(/*! ../../services/productgroup */ "./var/plugins/System/PSC/Invoice/Webpack/src/services/productgroup.ts"); +var async_1 = __importDefault(__webpack_require__(/*! react-select/async */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/react-select/async/dist/react-select-async.esm.js")); var ProductGroupSelect = function ProductGroupSelect(props) { - var orderState = tsyringe__WEBPACK_IMPORTED_MODULE_9__.container.resolve(_state_order__WEBPACK_IMPORTED_MODULE_10__.OrderState); + var orderState = tsyringe_1.container.resolve(order_1.OrderState); var loadOptions = function loadOptions(searchQuery) { return __awaiter(void 0, void 0, void 0, function () { var productgroup_api; return __generator(this, function (_a) { switch (_a.label) { case 0: - productgroup_api = new _services_productgroup__WEBPACK_IMPORTED_MODULE_12__.ProductGroupService(); + productgroup_api = new productgroup_1.ProductGroupService(); return [4 /*yield*/, productgroup_api.getProductGroups(searchQuery, props.shop)]; case 1: return [2 /*return*/, _a.sent()]; @@ -4130,9 +4858,8 @@ var ProductGroupSelect = function ProductGroupSelect(props) { props.onChange(option); } }; - return react__WEBPACK_IMPORTED_MODULE_14___default().createElement(react_select_async__WEBPACK_IMPORTED_MODULE_13__["default"], { + return (0, jsx_runtime_1.jsx)(async_1["default"], { defaultOptions: true, - key: JSON.stringify(props.shop.uuid), value: props.value, loadOptions: loadOptions, getOptionValue: function getOptionValue(option) { @@ -4140,14 +4867,14 @@ var ProductGroupSelect = function ProductGroupSelect(props) { }, onChange: onChange, isSearchable: true - }); + }, JSON.stringify(props.shop.uuid)); }; ProductGroupSelect.propTypes = { - shop: prop_types__WEBPACK_IMPORTED_MODULE_15__.instanceOf(_model_shop__WEBPACK_IMPORTED_MODULE_8__.Shop), - value: prop_types__WEBPACK_IMPORTED_MODULE_15__.instanceOf(_model_productGroup__WEBPACK_IMPORTED_MODULE_11__.ProductGroup), - onChange: prop_types__WEBPACK_IMPORTED_MODULE_15__.func + shop: PropTypes.instanceOf(shop_1.Shop), + value: PropTypes.instanceOf(productGroup_1.ProductGroup), + onChange: PropTypes.func }; -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (ProductGroupSelect); +exports["default"] = ProductGroupSelect; /***/ }), @@ -4155,49 +4882,53 @@ ProductGroupSelect.propTypes = { /*!**************************************************************************************!*\ !*** ./var/plugins/System/PSC/Invoice/Webpack/src/modules/product/ProductSelect.tsx ***! \**************************************************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var core_js_modules_es_object_to_string_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.object.to-string.js */ "./node_modules/core-js/modules/es.object.to-string.js"); -/* harmony import */ var core_js_modules_es_object_to_string_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_object_to_string_js__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var core_js_modules_es_promise_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es.promise.js */ "./node_modules/core-js/modules/es.promise.js"); -/* harmony import */ var core_js_modules_es_promise_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_promise_js__WEBPACK_IMPORTED_MODULE_1__); -/* harmony import */ var core_js_modules_es_symbol_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! core-js/modules/es.symbol.js */ "./node_modules/core-js/modules/es.symbol.js"); -/* harmony import */ var core_js_modules_es_symbol_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_symbol_js__WEBPACK_IMPORTED_MODULE_2__); -/* harmony import */ var core_js_modules_es_symbol_description_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! core-js/modules/es.symbol.description.js */ "./node_modules/core-js/modules/es.symbol.description.js"); -/* harmony import */ var core_js_modules_es_symbol_description_js__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_symbol_description_js__WEBPACK_IMPORTED_MODULE_3__); -/* harmony import */ var core_js_modules_es_symbol_iterator_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! core-js/modules/es.symbol.iterator.js */ "./node_modules/core-js/modules/es.symbol.iterator.js"); -/* harmony import */ var core_js_modules_es_symbol_iterator_js__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_symbol_iterator_js__WEBPACK_IMPORTED_MODULE_4__); -/* harmony import */ var core_js_modules_es_array_iterator_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! core-js/modules/es.array.iterator.js */ "./node_modules/core-js/modules/es.array.iterator.js"); -/* harmony import */ var core_js_modules_es_array_iterator_js__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_iterator_js__WEBPACK_IMPORTED_MODULE_5__); -/* harmony import */ var core_js_modules_es_string_iterator_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! core-js/modules/es.string.iterator.js */ "./node_modules/core-js/modules/es.string.iterator.js"); -/* harmony import */ var core_js_modules_es_string_iterator_js__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_iterator_js__WEBPACK_IMPORTED_MODULE_6__); -/* harmony import */ var core_js_modules_web_dom_collections_iterator_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! core-js/modules/web.dom-collections.iterator.js */ "./node_modules/core-js/modules/web.dom-collections.iterator.js"); -/* harmony import */ var core_js_modules_web_dom_collections_iterator_js__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_web_dom_collections_iterator_js__WEBPACK_IMPORTED_MODULE_7__); -/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! prop-types */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/prop-types/index.js"); -/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_17___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_17__); -/* harmony import */ var _model_shop__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../../model/shop */ "./var/plugins/System/PSC/Invoice/Webpack/src/model/shop.ts"); -/* harmony import */ var tsyringe__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! tsyringe */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/tsyringe/dist/esm5/index.js"); -/* harmony import */ var _state_order__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../../state/order */ "./var/plugins/System/PSC/Invoice/Webpack/src/state/order.ts"); -/* harmony import */ var _model_product__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../../model/product */ "./var/plugins/System/PSC/Invoice/Webpack/src/model/product.ts"); -/* harmony import */ var _model_productGroup__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../../model/productGroup */ "./var/plugins/System/PSC/Invoice/Webpack/src/model/productGroup.ts"); -/* harmony import */ var react_select_async__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! react-select/async */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/react-select/async/dist/react-select-async.esm.js"); -/* harmony import */ var _services_product__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ../../services/product */ "./var/plugins/System/PSC/Invoice/Webpack/src/services/product.ts"); -/* harmony import */ var use_debounce__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! use-debounce */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/use-debounce/dist/index.module.js"); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! react */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/react/index.js"); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_15___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_15__); +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - - - - -var __awaiter = undefined && undefined.__awaiter || function (thisArg, _arguments, P, generator) { +__webpack_require__(/*! core-js/modules/es.object.create.js */ "./node_modules/core-js/modules/es.object.create.js"); +__webpack_require__(/*! core-js/modules/es.object.get-own-property-descriptor.js */ "./node_modules/core-js/modules/es.object.get-own-property-descriptor.js"); +__webpack_require__(/*! core-js/modules/es.object.define-property.js */ "./node_modules/core-js/modules/es.object.define-property.js"); +__webpack_require__(/*! core-js/modules/es.object.to-string.js */ "./node_modules/core-js/modules/es.object.to-string.js"); +__webpack_require__(/*! core-js/modules/es.promise.js */ "./node_modules/core-js/modules/es.promise.js"); +__webpack_require__(/*! core-js/modules/es.symbol.js */ "./node_modules/core-js/modules/es.symbol.js"); +__webpack_require__(/*! core-js/modules/es.symbol.description.js */ "./node_modules/core-js/modules/es.symbol.description.js"); +__webpack_require__(/*! core-js/modules/es.symbol.iterator.js */ "./node_modules/core-js/modules/es.symbol.iterator.js"); +__webpack_require__(/*! core-js/modules/es.array.iterator.js */ "./node_modules/core-js/modules/es.array.iterator.js"); +__webpack_require__(/*! core-js/modules/es.string.iterator.js */ "./node_modules/core-js/modules/es.string.iterator.js"); +__webpack_require__(/*! core-js/modules/web.dom-collections.iterator.js */ "./node_modules/core-js/modules/web.dom-collections.iterator.js"); +var __createBinding = this && this.__createBinding || (Object.create ? function (o, m, k, k2) { + if (k2 === undefined) k2 = k; + var desc = Object.getOwnPropertyDescriptor(m, k); + if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { + desc = { + enumerable: true, + get: function get() { + return m[k]; + } + }; + } + Object.defineProperty(o, k2, desc); +} : function (o, m, k, k2) { + if (k2 === undefined) k2 = k; + o[k2] = m[k]; +}); +var __setModuleDefault = this && this.__setModuleDefault || (Object.create ? function (o, v) { + Object.defineProperty(o, "default", { + enumerable: true, + value: v + }); +} : function (o, v) { + o["default"] = v; +}); +var __importStar = this && this.__importStar || function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); + __setModuleDefault(result, mod); + return result; +}; +var __awaiter = this && this.__awaiter || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); @@ -4224,7 +4955,7 @@ var __awaiter = undefined && undefined.__awaiter || function (thisArg, _argument step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; -var __generator = undefined && undefined.__generator || function (thisArg, body) { +var __generator = this && this.__generator || function (thisArg, body) { var _ = { label: 0, sent: function sent() { @@ -4312,18 +5043,24 @@ var __generator = undefined && undefined.__generator || function (thisArg, body) }; } }; - - - - - - - - - - +var __importDefault = this && this.__importDefault || function (mod) { + return mod && mod.__esModule ? mod : { + "default": mod + }; +}; +exports.__esModule = true; +var jsx_runtime_1 = __webpack_require__(/*! react/jsx-runtime */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/react/jsx-runtime.js"); +var PropTypes = __importStar(__webpack_require__(/*! prop-types */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/prop-types/index.js")); +var shop_1 = __webpack_require__(/*! ../../model/shop */ "./var/plugins/System/PSC/Invoice/Webpack/src/model/shop.ts"); +var tsyringe_1 = __webpack_require__(/*! tsyringe */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/tsyringe/dist/esm5/index.js"); +var order_1 = __webpack_require__(/*! ../../state/order */ "./var/plugins/System/PSC/Invoice/Webpack/src/state/order.ts"); +var product_1 = __webpack_require__(/*! ../../model/product */ "./var/plugins/System/PSC/Invoice/Webpack/src/model/product.ts"); +var productGroup_1 = __webpack_require__(/*! ../../model/productGroup */ "./var/plugins/System/PSC/Invoice/Webpack/src/model/productGroup.ts"); +var async_1 = __importDefault(__webpack_require__(/*! react-select/async */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/react-select/async/dist/react-select-async.esm.js")); +var product_2 = __webpack_require__(/*! ../../services/product */ "./var/plugins/System/PSC/Invoice/Webpack/src/services/product.ts"); +var use_debounce_1 = __webpack_require__(/*! use-debounce */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/use-debounce/dist/index.module.js"); var ProductSelect = function ProductSelect(props) { - var orderState = tsyringe__WEBPACK_IMPORTED_MODULE_9__.container.resolve(_state_order__WEBPACK_IMPORTED_MODULE_10__.OrderState); + var orderState = tsyringe_1.container.resolve(order_1.OrderState); var loadOptions = function loadOptions(searchQuery) { return __awaiter(void 0, void 0, void 0, function () { var product_api; @@ -4333,7 +5070,7 @@ var ProductSelect = function ProductSelect(props) { if (searchQuery == "" && props.productGroup.uuid == "") { return [2 /*return*/, []]; } - product_api = new _services_product__WEBPACK_IMPORTED_MODULE_14__.ProductService(); + product_api = new product_2.ProductService(); if (!(searchQuery != "")) return [3 /*break*/, 2]; return [4 /*yield*/, product_api.getProductsByTerm(searchQuery, props.shop)]; case 1: @@ -4346,15 +5083,14 @@ var ProductSelect = function ProductSelect(props) { }); }); }; - var debouncedSearchTerm = (0,use_debounce__WEBPACK_IMPORTED_MODULE_16__.useDebounce)(loadOptions, 500); + var debouncedSearchTerm = (0, use_debounce_1.useDebounce)(loadOptions, 500); var onChange = function onChange(option) { if (typeof props.onChange === "function") { props.onChange(option); } }; - return react__WEBPACK_IMPORTED_MODULE_15___default().createElement(react_select_async__WEBPACK_IMPORTED_MODULE_13__["default"], { + return (0, jsx_runtime_1.jsx)(async_1["default"], { defaultOptions: true, - key: JSON.stringify(props.productGroup.uuid), value: props.value, loadOptions: loadOptions, getOptionValue: function getOptionValue(option) { @@ -4365,15 +5101,15 @@ var ProductSelect = function ProductSelect(props) { }, onChange: onChange, isSearchable: true - }); + }, JSON.stringify(props.productGroup.uuid)); }; ProductSelect.propTypes = { - shop: prop_types__WEBPACK_IMPORTED_MODULE_17__.instanceOf(_model_shop__WEBPACK_IMPORTED_MODULE_8__.Shop), - value: prop_types__WEBPACK_IMPORTED_MODULE_17__.instanceOf(_model_product__WEBPACK_IMPORTED_MODULE_11__.Product), - productGroup: prop_types__WEBPACK_IMPORTED_MODULE_17__.instanceOf(_model_productGroup__WEBPACK_IMPORTED_MODULE_12__.ProductGroup), - onChange: prop_types__WEBPACK_IMPORTED_MODULE_17__.func + shop: PropTypes.instanceOf(shop_1.Shop), + value: PropTypes.instanceOf(product_1.Product), + productGroup: PropTypes.instanceOf(productGroup_1.ProductGroup), + onChange: PropTypes.func }; -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (ProductSelect); +exports["default"] = ProductSelect; /***/ }), @@ -4381,48 +5117,64 @@ ProductSelect.propTypes = { /*!*******************************************************************************************!*\ !*** ./var/plugins/System/PSC/Invoice/Webpack/src/modules/shipping/ShippingComponent.tsx ***! \*******************************************************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var core_js_modules_es_object_to_string_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.object.to-string.js */ "./node_modules/core-js/modules/es.object.to-string.js"); -/* harmony import */ var core_js_modules_es_object_to_string_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_object_to_string_js__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var core_js_modules_es_promise_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es.promise.js */ "./node_modules/core-js/modules/es.promise.js"); -/* harmony import */ var core_js_modules_es_promise_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_promise_js__WEBPACK_IMPORTED_MODULE_1__); -/* harmony import */ var core_js_modules_es_symbol_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! core-js/modules/es.symbol.js */ "./node_modules/core-js/modules/es.symbol.js"); -/* harmony import */ var core_js_modules_es_symbol_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_symbol_js__WEBPACK_IMPORTED_MODULE_2__); -/* harmony import */ var core_js_modules_es_symbol_description_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! core-js/modules/es.symbol.description.js */ "./node_modules/core-js/modules/es.symbol.description.js"); -/* harmony import */ var core_js_modules_es_symbol_description_js__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_symbol_description_js__WEBPACK_IMPORTED_MODULE_3__); -/* harmony import */ var core_js_modules_es_symbol_iterator_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! core-js/modules/es.symbol.iterator.js */ "./node_modules/core-js/modules/es.symbol.iterator.js"); -/* harmony import */ var core_js_modules_es_symbol_iterator_js__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_symbol_iterator_js__WEBPACK_IMPORTED_MODULE_4__); -/* harmony import */ var core_js_modules_es_array_iterator_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! core-js/modules/es.array.iterator.js */ "./node_modules/core-js/modules/es.array.iterator.js"); -/* harmony import */ var core_js_modules_es_array_iterator_js__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_iterator_js__WEBPACK_IMPORTED_MODULE_5__); -/* harmony import */ var core_js_modules_es_string_iterator_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! core-js/modules/es.string.iterator.js */ "./node_modules/core-js/modules/es.string.iterator.js"); -/* harmony import */ var core_js_modules_es_string_iterator_js__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_iterator_js__WEBPACK_IMPORTED_MODULE_6__); -/* harmony import */ var core_js_modules_web_dom_collections_iterator_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! core-js/modules/web.dom-collections.iterator.js */ "./node_modules/core-js/modules/web.dom-collections.iterator.js"); -/* harmony import */ var core_js_modules_web_dom_collections_iterator_js__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_web_dom_collections_iterator_js__WEBPACK_IMPORTED_MODULE_7__); -/* harmony import */ var react_select_async_paginate__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! react-select-async-paginate */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/react-select-async-paginate/dist/esm/index.js"); -/* harmony import */ var _services_shipping__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../../services/shipping */ "./var/plugins/System/PSC/Invoice/Webpack/src/services/shipping.ts"); -/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! prop-types */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/prop-types/index.js"); -/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_16___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_16__); -/* harmony import */ var _model_shop__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../../model/shop */ "./var/plugins/System/PSC/Invoice/Webpack/src/model/shop.ts"); -/* harmony import */ var tsyringe__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! tsyringe */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/tsyringe/dist/esm5/index.js"); -/* harmony import */ var _state_order__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../../state/order */ "./var/plugins/System/PSC/Invoice/Webpack/src/state/order.ts"); -/* harmony import */ var _model_order__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../../model/order */ "./var/plugins/System/PSC/Invoice/Webpack/src/model/order.ts"); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! react */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/react/index.js"); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_14___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_14__); -/* harmony import */ var _base_SelectLabel__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ../base/SelectLabel */ "./var/plugins/System/PSC/Invoice/Webpack/src/modules/base/SelectLabel.tsx"); +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - - - - -var __awaiter = undefined && undefined.__awaiter || function (thisArg, _arguments, P, generator) { +__webpack_require__(/*! core-js/modules/es.object.assign.js */ "./node_modules/core-js/modules/es.object.assign.js"); +__webpack_require__(/*! core-js/modules/es.object.create.js */ "./node_modules/core-js/modules/es.object.create.js"); +__webpack_require__(/*! core-js/modules/es.object.get-own-property-descriptor.js */ "./node_modules/core-js/modules/es.object.get-own-property-descriptor.js"); +__webpack_require__(/*! core-js/modules/es.object.define-property.js */ "./node_modules/core-js/modules/es.object.define-property.js"); +__webpack_require__(/*! core-js/modules/es.object.to-string.js */ "./node_modules/core-js/modules/es.object.to-string.js"); +__webpack_require__(/*! core-js/modules/es.promise.js */ "./node_modules/core-js/modules/es.promise.js"); +__webpack_require__(/*! core-js/modules/es.symbol.js */ "./node_modules/core-js/modules/es.symbol.js"); +__webpack_require__(/*! core-js/modules/es.symbol.description.js */ "./node_modules/core-js/modules/es.symbol.description.js"); +__webpack_require__(/*! core-js/modules/es.symbol.iterator.js */ "./node_modules/core-js/modules/es.symbol.iterator.js"); +__webpack_require__(/*! core-js/modules/es.array.iterator.js */ "./node_modules/core-js/modules/es.array.iterator.js"); +__webpack_require__(/*! core-js/modules/es.string.iterator.js */ "./node_modules/core-js/modules/es.string.iterator.js"); +__webpack_require__(/*! core-js/modules/web.dom-collections.iterator.js */ "./node_modules/core-js/modules/web.dom-collections.iterator.js"); +var __assign = this && this.__assign || function () { + __assign = Object.assign || function (t) { + for (var s, i = 1, n = arguments.length; i < n; i++) { + s = arguments[i]; + for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; + } + return t; + }; + return __assign.apply(this, arguments); +}; +var __createBinding = this && this.__createBinding || (Object.create ? function (o, m, k, k2) { + if (k2 === undefined) k2 = k; + var desc = Object.getOwnPropertyDescriptor(m, k); + if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { + desc = { + enumerable: true, + get: function get() { + return m[k]; + } + }; + } + Object.defineProperty(o, k2, desc); +} : function (o, m, k, k2) { + if (k2 === undefined) k2 = k; + o[k2] = m[k]; +}); +var __setModuleDefault = this && this.__setModuleDefault || (Object.create ? function (o, v) { + Object.defineProperty(o, "default", { + enumerable: true, + value: v + }); +} : function (o, v) { + o["default"] = v; +}); +var __importStar = this && this.__importStar || function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); + __setModuleDefault(result, mod); + return result; +}; +var __awaiter = this && this.__awaiter || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); @@ -4449,7 +5201,7 @@ var __awaiter = undefined && undefined.__awaiter || function (thisArg, _argument step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; -var __generator = undefined && undefined.__generator || function (thisArg, body) { +var __generator = this && this.__generator || function (thisArg, body) { var _ = { label: 0, sent: function sent() { @@ -4537,27 +5289,28 @@ var __generator = undefined && undefined.__generator || function (thisArg, body) }; } }; - - - - - - - - - - +exports.__esModule = true; +var jsx_runtime_1 = __webpack_require__(/*! react/jsx-runtime */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/react/jsx-runtime.js"); +var react_select_async_paginate_1 = __webpack_require__(/*! react-select-async-paginate */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/react-select-async-paginate/dist/index.js"); +var shipping_1 = __webpack_require__(/*! ../../services/shipping */ "./var/plugins/System/PSC/Invoice/Webpack/src/services/shipping.ts"); +var PropTypes = __importStar(__webpack_require__(/*! prop-types */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/prop-types/index.js")); +var shop_1 = __webpack_require__(/*! ../../model/shop */ "./var/plugins/System/PSC/Invoice/Webpack/src/model/shop.ts"); +var tsyringe_1 = __webpack_require__(/*! tsyringe */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/tsyringe/dist/esm5/index.js"); +var order_1 = __webpack_require__(/*! ../../state/order */ "./var/plugins/System/PSC/Invoice/Webpack/src/state/order.ts"); +var order_2 = __webpack_require__(/*! ../../model/order */ "./var/plugins/System/PSC/Invoice/Webpack/src/model/order.ts"); +var react_1 = __webpack_require__(/*! react */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/react/index.js"); +var SelectLabel_1 = __webpack_require__(/*! ../base/SelectLabel */ "./var/plugins/System/PSC/Invoice/Webpack/src/modules/base/SelectLabel.tsx"); var ShippingComponent = function ShippingComponent(_a) { var shop = _a.shop, order = _a.order; - var _b = (0,react__WEBPACK_IMPORTED_MODULE_14__.useState)(null), + var _b = (0, react_1.useState)(null), shopUuid = _b[0], setShopUuid = _b[1]; - var orderState = tsyringe__WEBPACK_IMPORTED_MODULE_11__.container.resolve(_state_order__WEBPACK_IMPORTED_MODULE_12__.OrderState); - var _c = (0,react__WEBPACK_IMPORTED_MODULE_14__.useState)(0), + var orderState = tsyringe_1.container.resolve(order_1.OrderState); + var _c = (0, react_1.useState)(0), shipping = _c[0], setShipping = _c[1]; - var shipping_service = new _services_shipping__WEBPACK_IMPORTED_MODULE_9__.ShippingService(); + var shipping_service = new shipping_1.ShippingService(); var loadOptions = function loadOptions(searchQuery, loadedOptions) { return __awaiter(void 0, void 0, void 0, function () { var data; @@ -4575,10 +5328,10 @@ var ShippingComponent = function ShippingComponent(_a) { }); }); }; - (0,react__WEBPACK_IMPORTED_MODULE_14__.useEffect)(function () { + (0, react_1.useEffect)(function () { setShopUuid(shop.uuid); }, [shop.uuid]); - (0,react__WEBPACK_IMPORTED_MODULE_14__.useEffect)(function () { + (0, react_1.useEffect)(function () { setShipping(order.shipping.uid); }, [order.shipping]); var onChange = function onChange(option) { @@ -4588,34 +5341,35 @@ var ShippingComponent = function ShippingComponent(_a) { orderState.setCurrentOrder(orderObj); setShipping(option.uid); }; - return react__WEBPACK_IMPORTED_MODULE_14___default().createElement("div", { + return (0, jsx_runtime_1.jsx)("div", __assign({ className: "p-2" - }, react__WEBPACK_IMPORTED_MODULE_14___default().createElement(react_select_async_paginate__WEBPACK_IMPORTED_MODULE_8__.AsyncPaginate, { - defaultOptions: true, - key: JSON.stringify(shopUuid), - components: { - Control: _base_SelectLabel__WEBPACK_IMPORTED_MODULE_15__.SelectLabel - }, - defaultValue: order.shipping, - placeholder: '', - name: 'Versandart', - loadOptions: loadOptions, - getOptionValue: function getOptionValue(option) { - return option.uid; - }, - getOptionLabel: function getOptionLabel(option) { - return option.title; - }, - onChange: onChange, - isSearchable: false, - className: "".concat(shipping == 0 ? "border border-red-500" : "") + }, { + children: (0, jsx_runtime_1.jsx)(react_select_async_paginate_1.AsyncPaginate, { + defaultOptions: true, + components: { + Control: SelectLabel_1.SelectLabel + }, + defaultValue: order.shipping, + placeholder: '', + name: 'Versandart', + loadOptions: loadOptions, + getOptionValue: function getOptionValue(option) { + return option.uid; + }, + getOptionLabel: function getOptionLabel(option) { + return option.title; + }, + onChange: onChange, + isSearchable: false, + className: "".concat(shipping == 0 ? "border border-red-500" : "") + }, JSON.stringify(shopUuid)) })); }; ShippingComponent.propTypes = { - shop: prop_types__WEBPACK_IMPORTED_MODULE_16__.instanceOf(_model_shop__WEBPACK_IMPORTED_MODULE_10__.Shop), - order: prop_types__WEBPACK_IMPORTED_MODULE_16__.instanceOf(_model_order__WEBPACK_IMPORTED_MODULE_13__.Order) + shop: PropTypes.instanceOf(shop_1.Shop), + order: PropTypes.instanceOf(order_2.Order) }; -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (ShippingComponent); +exports["default"] = ShippingComponent; /***/ }), @@ -4623,47 +5377,20 @@ ShippingComponent.propTypes = { /*!*****************************************************************************************!*\ !*** ./var/plugins/System/PSC/Invoice/Webpack/src/modules/shop/ShopSelectComponent.tsx ***! \*****************************************************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var core_js_modules_es_object_to_string_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.object.to-string.js */ "./node_modules/core-js/modules/es.object.to-string.js"); -/* harmony import */ var core_js_modules_es_object_to_string_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_object_to_string_js__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var core_js_modules_es_promise_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es.promise.js */ "./node_modules/core-js/modules/es.promise.js"); -/* harmony import */ var core_js_modules_es_promise_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_promise_js__WEBPACK_IMPORTED_MODULE_1__); -/* harmony import */ var core_js_modules_es_symbol_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! core-js/modules/es.symbol.js */ "./node_modules/core-js/modules/es.symbol.js"); -/* harmony import */ var core_js_modules_es_symbol_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_symbol_js__WEBPACK_IMPORTED_MODULE_2__); -/* harmony import */ var core_js_modules_es_symbol_description_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! core-js/modules/es.symbol.description.js */ "./node_modules/core-js/modules/es.symbol.description.js"); -/* harmony import */ var core_js_modules_es_symbol_description_js__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_symbol_description_js__WEBPACK_IMPORTED_MODULE_3__); -/* harmony import */ var core_js_modules_es_symbol_iterator_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! core-js/modules/es.symbol.iterator.js */ "./node_modules/core-js/modules/es.symbol.iterator.js"); -/* harmony import */ var core_js_modules_es_symbol_iterator_js__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_symbol_iterator_js__WEBPACK_IMPORTED_MODULE_4__); -/* harmony import */ var core_js_modules_es_array_iterator_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! core-js/modules/es.array.iterator.js */ "./node_modules/core-js/modules/es.array.iterator.js"); -/* harmony import */ var core_js_modules_es_array_iterator_js__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_iterator_js__WEBPACK_IMPORTED_MODULE_5__); -/* harmony import */ var core_js_modules_es_string_iterator_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! core-js/modules/es.string.iterator.js */ "./node_modules/core-js/modules/es.string.iterator.js"); -/* harmony import */ var core_js_modules_es_string_iterator_js__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_iterator_js__WEBPACK_IMPORTED_MODULE_6__); -/* harmony import */ var core_js_modules_web_dom_collections_iterator_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! core-js/modules/web.dom-collections.iterator.js */ "./node_modules/core-js/modules/web.dom-collections.iterator.js"); -/* harmony import */ var core_js_modules_web_dom_collections_iterator_js__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_web_dom_collections_iterator_js__WEBPACK_IMPORTED_MODULE_7__); -/* harmony import */ var core_js_modules_es_function_name_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! core-js/modules/es.function.name.js */ "./node_modules/core-js/modules/es.function.name.js"); -/* harmony import */ var core_js_modules_es_function_name_js__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_function_name_js__WEBPACK_IMPORTED_MODULE_8__); -/* harmony import */ var react_select_async_paginate__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! react-select-async-paginate */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/react-select-async-paginate/dist/esm/index.js"); -/* harmony import */ var _services_shop__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../../services/shop */ "./var/plugins/System/PSC/Invoice/Webpack/src/services/shop.ts"); -/* harmony import */ var tsyringe__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! tsyringe */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/tsyringe/dist/esm5/index.js"); -/* harmony import */ var _state_order__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../../state/order */ "./var/plugins/System/PSC/Invoice/Webpack/src/state/order.ts"); -/* harmony import */ var _base_SelectLabel__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../base/SelectLabel */ "./var/plugins/System/PSC/Invoice/Webpack/src/modules/base/SelectLabel.tsx"); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! react */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/react/index.js"); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_14___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_14__); +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - - - - - -var __awaiter = undefined && undefined.__awaiter || function (thisArg, _arguments, P, generator) { +__webpack_require__(/*! core-js/modules/es.object.to-string.js */ "./node_modules/core-js/modules/es.object.to-string.js"); +__webpack_require__(/*! core-js/modules/es.promise.js */ "./node_modules/core-js/modules/es.promise.js"); +__webpack_require__(/*! core-js/modules/es.symbol.js */ "./node_modules/core-js/modules/es.symbol.js"); +__webpack_require__(/*! core-js/modules/es.symbol.description.js */ "./node_modules/core-js/modules/es.symbol.description.js"); +__webpack_require__(/*! core-js/modules/es.symbol.iterator.js */ "./node_modules/core-js/modules/es.symbol.iterator.js"); +__webpack_require__(/*! core-js/modules/es.array.iterator.js */ "./node_modules/core-js/modules/es.array.iterator.js"); +__webpack_require__(/*! core-js/modules/es.string.iterator.js */ "./node_modules/core-js/modules/es.string.iterator.js"); +__webpack_require__(/*! core-js/modules/web.dom-collections.iterator.js */ "./node_modules/core-js/modules/web.dom-collections.iterator.js"); +__webpack_require__(/*! core-js/modules/es.function.name.js */ "./node_modules/core-js/modules/es.function.name.js"); +var __awaiter = this && this.__awaiter || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); @@ -4690,7 +5417,7 @@ var __awaiter = undefined && undefined.__awaiter || function (thisArg, _argument step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; -var __generator = undefined && undefined.__generator || function (thisArg, body) { +var __generator = this && this.__generator || function (thisArg, body) { var _ = { label: 0, sent: function sent() { @@ -4778,15 +5505,16 @@ var __generator = undefined && undefined.__generator || function (thisArg, body) }; } }; - - - - - - +exports.__esModule = true; +var jsx_runtime_1 = __webpack_require__(/*! react/jsx-runtime */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/react/jsx-runtime.js"); +var react_select_async_paginate_1 = __webpack_require__(/*! react-select-async-paginate */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/react-select-async-paginate/dist/index.js"); +var shop_1 = __webpack_require__(/*! ../../services/shop */ "./var/plugins/System/PSC/Invoice/Webpack/src/services/shop.ts"); +var tsyringe_1 = __webpack_require__(/*! tsyringe */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/tsyringe/dist/esm5/index.js"); +var order_1 = __webpack_require__(/*! ../../state/order */ "./var/plugins/System/PSC/Invoice/Webpack/src/state/order.ts"); +var SelectLabel_1 = __webpack_require__(/*! ../base/SelectLabel */ "./var/plugins/System/PSC/Invoice/Webpack/src/modules/base/SelectLabel.tsx"); var ShopSelectComponent = function ShopSelectComponent(props) { - var orderState = tsyringe__WEBPACK_IMPORTED_MODULE_11__.container.resolve(_state_order__WEBPACK_IMPORTED_MODULE_12__.OrderState); - var shop_service = tsyringe__WEBPACK_IMPORTED_MODULE_11__.container.resolve(_services_shop__WEBPACK_IMPORTED_MODULE_10__.ShopService); + var orderState = tsyringe_1.container.resolve(order_1.OrderState); + var shop_service = tsyringe_1.container.resolve(shop_1.ShopService); var loadOptions = function loadOptions(searchQuery, loadedOptions) { return __awaiter(void 0, void 0, void 0, function () { var data; @@ -4808,26 +5536,28 @@ var ShopSelectComponent = function ShopSelectComponent(props) { orderState.getCurrentOrder().value.shop = option; props.change(option); }; - return react__WEBPACK_IMPORTED_MODULE_14___default().createElement("div", null, react__WEBPACK_IMPORTED_MODULE_14___default().createElement(react_select_async_paginate__WEBPACK_IMPORTED_MODULE_9__.AsyncPaginate, { - defaultOptions: true, - value: props.shop, - components: { - Control: _base_SelectLabel__WEBPACK_IMPORTED_MODULE_13__.SelectLabel - }, - loadOptions: loadOptions, - getOptionValue: function getOptionValue(option) { - return option.id; - }, - getOptionLabel: function getOptionLabel(option) { - return option.name; - }, - onChange: onChange, - isSearchable: false, - className: "".concat(props.shop.uuid == "" ? "border border-danger" : "border border-slate-200"), - name: 'Shop' - })); + return (0, jsx_runtime_1.jsx)("div", { + children: (0, jsx_runtime_1.jsx)(react_select_async_paginate_1.AsyncPaginate, { + defaultOptions: true, + value: props.shop, + components: { + Control: SelectLabel_1.SelectLabel + }, + loadOptions: loadOptions, + getOptionValue: function getOptionValue(option) { + return option.id; + }, + getOptionLabel: function getOptionLabel(option) { + return option.name; + }, + onChange: onChange, + isSearchable: false, + className: "".concat(props.shop.uuid == "" ? "border border-danger" : "border border-slate-200"), + name: 'Shop' + }) + }); }; -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (ShopSelectComponent); +exports["default"] = ShopSelectComponent; /***/ }), @@ -4835,55 +5565,104 @@ var ShopSelectComponent = function ShopSelectComponent(props) { /*!***************************************************************************************!*\ !*** ./var/plugins/System/PSC/Invoice/Webpack/src/modules/topbar/TopBarComponent.tsx ***! \***************************************************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _type_TypeSelectComponent__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../type/TypeSelectComponent */ "./var/plugins/System/PSC/Invoice/Webpack/src/modules/type/TypeSelectComponent.tsx"); -/* harmony import */ var _shop_ShopSelectComponent__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../shop/ShopSelectComponent */ "./var/plugins/System/PSC/Invoice/Webpack/src/modules/shop/ShopSelectComponent.tsx"); -/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! prop-types */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/prop-types/index.js"); -/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_7__); -/* harmony import */ var _model_shop__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../model/shop */ "./var/plugins/System/PSC/Invoice/Webpack/src/model/shop.ts"); -/* harmony import */ var _draft_DraftComponent__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../draft/DraftComponent */ "./var/plugins/System/PSC/Invoice/Webpack/src/modules/draft/DraftComponent.tsx"); -/* harmony import */ var _model_order__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../model/order */ "./var/plugins/System/PSC/Invoice/Webpack/src/model/order.ts"); -/* harmony import */ var _calc_CalcComponent__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../calc/CalcComponent */ "./var/plugins/System/PSC/Invoice/Webpack/src/modules/calc/CalcComponent.tsx"); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! react */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/react/index.js"); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_6__); - - - - - +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { +__webpack_require__(/*! core-js/modules/es.object.assign.js */ "./node_modules/core-js/modules/es.object.assign.js"); +__webpack_require__(/*! core-js/modules/es.object.create.js */ "./node_modules/core-js/modules/es.object.create.js"); +__webpack_require__(/*! core-js/modules/es.object.get-own-property-descriptor.js */ "./node_modules/core-js/modules/es.object.get-own-property-descriptor.js"); +__webpack_require__(/*! core-js/modules/es.object.define-property.js */ "./node_modules/core-js/modules/es.object.define-property.js"); +var __assign = this && this.__assign || function () { + __assign = Object.assign || function (t) { + for (var s, i = 1, n = arguments.length; i < n; i++) { + s = arguments[i]; + for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; + } + return t; + }; + return __assign.apply(this, arguments); +}; +var __createBinding = this && this.__createBinding || (Object.create ? function (o, m, k, k2) { + if (k2 === undefined) k2 = k; + var desc = Object.getOwnPropertyDescriptor(m, k); + if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { + desc = { + enumerable: true, + get: function get() { + return m[k]; + } + }; + } + Object.defineProperty(o, k2, desc); +} : function (o, m, k, k2) { + if (k2 === undefined) k2 = k; + o[k2] = m[k]; +}); +var __setModuleDefault = this && this.__setModuleDefault || (Object.create ? function (o, v) { + Object.defineProperty(o, "default", { + enumerable: true, + value: v + }); +} : function (o, v) { + o["default"] = v; +}); +var __importStar = this && this.__importStar || function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); + __setModuleDefault(result, mod); + return result; +}; +var __importDefault = this && this.__importDefault || function (mod) { + return mod && mod.__esModule ? mod : { + "default": mod + }; +}; +exports.__esModule = true; +var jsx_runtime_1 = __webpack_require__(/*! react/jsx-runtime */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/react/jsx-runtime.js"); +var TypeSelectComponent_1 = __importDefault(__webpack_require__(/*! ../type/TypeSelectComponent */ "./var/plugins/System/PSC/Invoice/Webpack/src/modules/type/TypeSelectComponent.tsx")); +var ShopSelectComponent_1 = __importDefault(__webpack_require__(/*! ../shop/ShopSelectComponent */ "./var/plugins/System/PSC/Invoice/Webpack/src/modules/shop/ShopSelectComponent.tsx")); +var PropTypes = __importStar(__webpack_require__(/*! prop-types */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/prop-types/index.js")); +var shop_1 = __webpack_require__(/*! ../../model/shop */ "./var/plugins/System/PSC/Invoice/Webpack/src/model/shop.ts"); +var DraftComponent_1 = __importDefault(__webpack_require__(/*! ../draft/DraftComponent */ "./var/plugins/System/PSC/Invoice/Webpack/src/modules/draft/DraftComponent.tsx")); +var order_1 = __webpack_require__(/*! ../../model/order */ "./var/plugins/System/PSC/Invoice/Webpack/src/model/order.ts"); +var CalcComponent_1 = __importDefault(__webpack_require__(/*! ../calc/CalcComponent */ "./var/plugins/System/PSC/Invoice/Webpack/src/modules/calc/CalcComponent.tsx")); var TopBarComponent = function TopBarComponent(_a) { var shop = _a.shop, order = _a.order, change = _a.change; - return react__WEBPACK_IMPORTED_MODULE_6___default().createElement("div", { + return (0, jsx_runtime_1.jsxs)("div", __assign({ className: "flex gap-3" - }, react__WEBPACK_IMPORTED_MODULE_6___default().createElement("div", null, react__WEBPACK_IMPORTED_MODULE_6___default().createElement(_draft_DraftComponent__WEBPACK_IMPORTED_MODULE_3__["default"], { - order: order - })), react__WEBPACK_IMPORTED_MODULE_6___default().createElement("div", { - className: "flex-auto" - }, react__WEBPACK_IMPORTED_MODULE_6___default().createElement(_type_TypeSelectComponent__WEBPACK_IMPORTED_MODULE_0__["default"], { - order: order - })), react__WEBPACK_IMPORTED_MODULE_6___default().createElement("div", { - className: "flex-auto" - }, react__WEBPACK_IMPORTED_MODULE_6___default().createElement(_shop_ShopSelectComponent__WEBPACK_IMPORTED_MODULE_1__["default"], { - shop: shop, - change: change - })), react__WEBPACK_IMPORTED_MODULE_6___default().createElement("div", null, react__WEBPACK_IMPORTED_MODULE_6___default().createElement(_calc_CalcComponent__WEBPACK_IMPORTED_MODULE_5__["default"], null))); + }, { + children: [(0, jsx_runtime_1.jsx)("div", { + children: (0, jsx_runtime_1.jsx)(DraftComponent_1["default"], { + order: order + }) + }), (0, jsx_runtime_1.jsx)("div", __assign({ + className: "flex-auto" + }, { + children: (0, jsx_runtime_1.jsx)(TypeSelectComponent_1["default"], { + order: order + }) + })), (0, jsx_runtime_1.jsx)("div", __assign({ + className: "flex-auto" + }, { + children: (0, jsx_runtime_1.jsx)(ShopSelectComponent_1["default"], { + shop: shop, + change: change + }) + })), (0, jsx_runtime_1.jsx)("div", { + children: (0, jsx_runtime_1.jsx)(CalcComponent_1["default"], {}) + })] + })); }; TopBarComponent.propTypes = { - shop: prop_types__WEBPACK_IMPORTED_MODULE_7__.instanceOf(_model_shop__WEBPACK_IMPORTED_MODULE_2__.Shop), - order: prop_types__WEBPACK_IMPORTED_MODULE_7__.instanceOf(_model_order__WEBPACK_IMPORTED_MODULE_4__.Order), - change: prop_types__WEBPACK_IMPORTED_MODULE_7__.func + shop: PropTypes.instanceOf(shop_1.Shop), + order: PropTypes.instanceOf(order_1.Order), + change: PropTypes.func }; -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (TopBarComponent); +exports["default"] = TopBarComponent; /***/ }), @@ -4891,36 +5670,30 @@ TopBarComponent.propTypes = { /*!*****************************************************************************************!*\ !*** ./var/plugins/System/PSC/Invoice/Webpack/src/modules/type/TypeSelectComponent.tsx ***! \*****************************************************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var core_js_modules_es_array_filter_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.array.filter.js */ "./node_modules/core-js/modules/es.array.filter.js"); -/* harmony import */ var core_js_modules_es_array_filter_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_filter_js__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var core_js_modules_es_object_to_string_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es.object.to-string.js */ "./node_modules/core-js/modules/es.object.to-string.js"); -/* harmony import */ var core_js_modules_es_object_to_string_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_object_to_string_js__WEBPACK_IMPORTED_MODULE_1__); -/* harmony import */ var react_select__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! react-select */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/react-select/dist/react-select.esm.js"); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/react/index.js"); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__); -/* harmony import */ var tsyringe__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! tsyringe */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/tsyringe/dist/esm5/index.js"); -/* harmony import */ var _state_order__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../state/order */ "./var/plugins/System/PSC/Invoice/Webpack/src/state/order.ts"); -/* harmony import */ var _base_SelectLabel__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../base/SelectLabel */ "./var/plugins/System/PSC/Invoice/Webpack/src/modules/base/SelectLabel.tsx"); - - - - - +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { +__webpack_require__(/*! core-js/modules/es.array.filter.js */ "./node_modules/core-js/modules/es.array.filter.js"); +__webpack_require__(/*! core-js/modules/es.object.to-string.js */ "./node_modules/core-js/modules/es.object.to-string.js"); +var __importDefault = this && this.__importDefault || function (mod) { + return mod && mod.__esModule ? mod : { + "default": mod + }; +}; +exports.__esModule = true; +var jsx_runtime_1 = __webpack_require__(/*! react/jsx-runtime */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/react/jsx-runtime.js"); +var react_select_1 = __importDefault(__webpack_require__(/*! react-select */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/react-select/dist/react-select.esm.js")); +var react_1 = __webpack_require__(/*! react */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/react/index.js"); +var tsyringe_1 = __webpack_require__(/*! tsyringe */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/tsyringe/dist/esm5/index.js"); +var order_1 = __webpack_require__(/*! ../../state/order */ "./var/plugins/System/PSC/Invoice/Webpack/src/state/order.ts"); +var SelectLabel_1 = __webpack_require__(/*! ../base/SelectLabel */ "./var/plugins/System/PSC/Invoice/Webpack/src/modules/base/SelectLabel.tsx"); var TypeSelectComponent = function TypeSelectComponent(_a) { var order = _a.order; - var _b = (0,react__WEBPACK_IMPORTED_MODULE_2__.useState)(0), + var _b = (0, react_1.useState)(0), type = _b[0], setType = _b[1]; - var orderState = tsyringe__WEBPACK_IMPORTED_MODULE_3__.container.resolve(_state_order__WEBPACK_IMPORTED_MODULE_4__.OrderState); + var orderState = tsyringe_1.container.resolve(order_1.OrderState); var options = [{ value: 1, label: 'Auftrag' @@ -4949,27 +5722,29 @@ var TypeSelectComponent = function TypeSelectComponent(_a) { orderState.setCurrentOrder(order); setType(option); }; - (0,react__WEBPACK_IMPORTED_MODULE_2__.useEffect)(function () { + (0, react_1.useEffect)(function () { setType(order.type); }, [order.type]); - return react__WEBPACK_IMPORTED_MODULE_2___default().createElement("div", null, react__WEBPACK_IMPORTED_MODULE_2___default().createElement(react_select__WEBPACK_IMPORTED_MODULE_6__["default"], { - className: "".concat(type == 0 ? "border border-danger" : ""), - options: options, - defaultValue: options.filter(function (e) { - return e.value == type; - }).pop(), - value: options.filter(function (e) { - return e.value == type; - }).pop(), - onChange: onChange, - components: { - Control: _base_SelectLabel__WEBPACK_IMPORTED_MODULE_5__.SelectLabel - }, - placeholder: "", - name: "Typ" - })); + return (0, jsx_runtime_1.jsx)("div", { + children: (0, jsx_runtime_1.jsx)(react_select_1["default"], { + className: "".concat(type == 0 ? "border border-danger" : ""), + options: options, + defaultValue: options.filter(function (e) { + return e.value == type; + }).pop(), + value: options.filter(function (e) { + return e.value == type; + }).pop(), + onChange: onChange, + components: { + Control: SelectLabel_1.SelectLabel + }, + placeholder: "", + name: "Typ" + }) + }); }; -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (TypeSelectComponent); +exports["default"] = TypeSelectComponent; /***/ }), @@ -4977,61 +5752,33 @@ var TypeSelectComponent = function TypeSelectComponent(_a) { /*!************************************************************************!*\ !*** ./var/plugins/System/PSC/Invoice/Webpack/src/services/account.ts ***! \************************************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + + -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "AccountService": () => (/* binding */ AccountService) -/* harmony export */ }); -/* harmony import */ var core_js_modules_es_object_get_own_property_descriptor_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.object.get-own-property-descriptor.js */ "./node_modules/core-js/modules/es.object.get-own-property-descriptor.js"); -/* harmony import */ var core_js_modules_es_object_get_own_property_descriptor_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_object_get_own_property_descriptor_js__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var core_js_modules_es_object_to_string_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es.object.to-string.js */ "./node_modules/core-js/modules/es.object.to-string.js"); -/* harmony import */ var core_js_modules_es_object_to_string_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_object_to_string_js__WEBPACK_IMPORTED_MODULE_1__); -/* harmony import */ var core_js_modules_es_object_define_property_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! core-js/modules/es.object.define-property.js */ "./node_modules/core-js/modules/es.object.define-property.js"); -/* harmony import */ var core_js_modules_es_object_define_property_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_object_define_property_js__WEBPACK_IMPORTED_MODULE_2__); -/* harmony import */ var core_js_modules_es_promise_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! core-js/modules/es.promise.js */ "./node_modules/core-js/modules/es.promise.js"); -/* harmony import */ var core_js_modules_es_promise_js__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_promise_js__WEBPACK_IMPORTED_MODULE_3__); -/* harmony import */ var core_js_modules_es_symbol_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! core-js/modules/es.symbol.js */ "./node_modules/core-js/modules/es.symbol.js"); -/* harmony import */ var core_js_modules_es_symbol_js__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_symbol_js__WEBPACK_IMPORTED_MODULE_4__); -/* harmony import */ var core_js_modules_es_symbol_description_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! core-js/modules/es.symbol.description.js */ "./node_modules/core-js/modules/es.symbol.description.js"); -/* harmony import */ var core_js_modules_es_symbol_description_js__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_symbol_description_js__WEBPACK_IMPORTED_MODULE_5__); -/* harmony import */ var core_js_modules_es_symbol_iterator_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! core-js/modules/es.symbol.iterator.js */ "./node_modules/core-js/modules/es.symbol.iterator.js"); -/* harmony import */ var core_js_modules_es_symbol_iterator_js__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_symbol_iterator_js__WEBPACK_IMPORTED_MODULE_6__); -/* harmony import */ var core_js_modules_es_array_iterator_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! core-js/modules/es.array.iterator.js */ "./node_modules/core-js/modules/es.array.iterator.js"); -/* harmony import */ var core_js_modules_es_array_iterator_js__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_iterator_js__WEBPACK_IMPORTED_MODULE_7__); -/* harmony import */ var core_js_modules_es_string_iterator_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! core-js/modules/es.string.iterator.js */ "./node_modules/core-js/modules/es.string.iterator.js"); -/* harmony import */ var core_js_modules_es_string_iterator_js__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_iterator_js__WEBPACK_IMPORTED_MODULE_8__); -/* harmony import */ var core_js_modules_web_dom_collections_iterator_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! core-js/modules/web.dom-collections.iterator.js */ "./node_modules/core-js/modules/web.dom-collections.iterator.js"); -/* harmony import */ var core_js_modules_web_dom_collections_iterator_js__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_web_dom_collections_iterator_js__WEBPACK_IMPORTED_MODULE_9__); -/* harmony import */ var core_js_modules_es_array_map_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! core-js/modules/es.array.map.js */ "./node_modules/core-js/modules/es.array.map.js"); -/* harmony import */ var core_js_modules_es_array_map_js__WEBPACK_IMPORTED_MODULE_10___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_map_js__WEBPACK_IMPORTED_MODULE_10__); -/* harmony import */ var tsyringe__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! tsyringe */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/tsyringe/dist/esm5/index.js"); -/* harmony import */ var _token__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./token */ "./var/plugins/System/PSC/Invoice/Webpack/src/services/token.ts"); -/* harmony import */ var axios__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! axios */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/axios/lib/axios.js"); -/* harmony import */ var _model_account__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../model/account */ "./var/plugins/System/PSC/Invoice/Webpack/src/model/account.ts"); function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); } - - - - - - - - - - - -var __decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) { +__webpack_require__(/*! core-js/modules/es.object.get-own-property-descriptor.js */ "./node_modules/core-js/modules/es.object.get-own-property-descriptor.js"); +__webpack_require__(/*! core-js/modules/es.object.to-string.js */ "./node_modules/core-js/modules/es.object.to-string.js"); +__webpack_require__(/*! core-js/modules/es.object.define-property.js */ "./node_modules/core-js/modules/es.object.define-property.js"); +__webpack_require__(/*! core-js/modules/es.promise.js */ "./node_modules/core-js/modules/es.promise.js"); +__webpack_require__(/*! core-js/modules/es.symbol.js */ "./node_modules/core-js/modules/es.symbol.js"); +__webpack_require__(/*! core-js/modules/es.symbol.description.js */ "./node_modules/core-js/modules/es.symbol.description.js"); +__webpack_require__(/*! core-js/modules/es.symbol.iterator.js */ "./node_modules/core-js/modules/es.symbol.iterator.js"); +__webpack_require__(/*! core-js/modules/es.array.iterator.js */ "./node_modules/core-js/modules/es.array.iterator.js"); +__webpack_require__(/*! core-js/modules/es.string.iterator.js */ "./node_modules/core-js/modules/es.string.iterator.js"); +__webpack_require__(/*! core-js/modules/web.dom-collections.iterator.js */ "./node_modules/core-js/modules/web.dom-collections.iterator.js"); +__webpack_require__(/*! core-js/modules/es.array.map.js */ "./node_modules/core-js/modules/es.array.map.js"); +var __decorate = this && this.__decorate || function (decorators, target, key, desc) { var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; if ((typeof Reflect === "undefined" ? "undefined" : _typeof(Reflect)) === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; return c > 3 && r && Object.defineProperty(target, key, r), r; }; -var __metadata = undefined && undefined.__metadata || function (k, v) { +var __metadata = this && this.__metadata || function (k, v) { if ((typeof Reflect === "undefined" ? "undefined" : _typeof(Reflect)) === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); }; -var __awaiter = undefined && undefined.__awaiter || function (thisArg, _arguments, P, generator) { +var __awaiter = this && this.__awaiter || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); @@ -5058,7 +5805,7 @@ var __awaiter = undefined && undefined.__awaiter || function (thisArg, _argument step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; -var __generator = undefined && undefined.__generator || function (thisArg, body) { +var __generator = this && this.__generator || function (thisArg, body) { var _ = { label: 0, sent: function sent() { @@ -5146,10 +5893,17 @@ var __generator = undefined && undefined.__generator || function (thisArg, body) }; } }; - - - - +var __importDefault = this && this.__importDefault || function (mod) { + return mod && mod.__esModule ? mod : { + "default": mod + }; +}; +exports.__esModule = true; +exports.AccountService = void 0; +var tsyringe_1 = __webpack_require__(/*! tsyringe */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/tsyringe/dist/esm5/index.js"); +var token_1 = __webpack_require__(/*! ./token */ "./var/plugins/System/PSC/Invoice/Webpack/src/services/token.ts"); +var axios_1 = __importDefault(__webpack_require__(/*! axios */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/axios/dist/browser/axios.cjs")); +var account_1 = __webpack_require__(/*! ../model/account */ "./var/plugins/System/PSC/Invoice/Webpack/src/model/account.ts"); var AccountService = /** @class */function () { function AccountService(token) { this.token = token; @@ -5160,13 +5914,13 @@ var AccountService = /** @class */function () { return __generator(this, function (_b) { switch (_b.label) { case 0: - return [4 /*yield*/, axios__WEBPACK_IMPORTED_MODULE_14__["default"].get('/apps/api/account/allbyshop/' + shop.uuid, { + return [4 /*yield*/, axios_1["default"].get('/apps/api/account/allbyshop/' + shop.uuid, { headers: { 'Authorization': 'Bearer ' + ((_a = this.token) === null || _a === void 0 ? void 0 : _a.currentToken) } }).then(function (response) { return response.data.data.map(function (item) { - var account = new _model_account__WEBPACK_IMPORTED_MODULE_13__.Account(); + var account = new account_1.Account(); account.uid = item.uid; account.title = item.title; account.appendix = item.appendix; @@ -5180,10 +5934,10 @@ var AccountService = /** @class */function () { }); }); }; - AccountService = __decorate([(0,tsyringe__WEBPACK_IMPORTED_MODULE_11__.singleton)(), (0,tsyringe__WEBPACK_IMPORTED_MODULE_11__.autoInjectable)(), __metadata("design:paramtypes", [_token__WEBPACK_IMPORTED_MODULE_12__.Token])], AccountService); + AccountService = __decorate([(0, tsyringe_1.singleton)(), (0, tsyringe_1.autoInjectable)(), __metadata("design:paramtypes", [token_1.Token])], AccountService); return AccountService; }(); - +exports.AccountService = AccountService; /***/ }), @@ -5191,61 +5945,33 @@ var AccountService = /** @class */function () { /*!************************************************************************!*\ !*** ./var/plugins/System/PSC/Invoice/Webpack/src/services/address.ts ***! \************************************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + + -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "AddressService": () => (/* binding */ AddressService) -/* harmony export */ }); -/* harmony import */ var core_js_modules_es_object_get_own_property_descriptor_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.object.get-own-property-descriptor.js */ "./node_modules/core-js/modules/es.object.get-own-property-descriptor.js"); -/* harmony import */ var core_js_modules_es_object_get_own_property_descriptor_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_object_get_own_property_descriptor_js__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var core_js_modules_es_object_to_string_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es.object.to-string.js */ "./node_modules/core-js/modules/es.object.to-string.js"); -/* harmony import */ var core_js_modules_es_object_to_string_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_object_to_string_js__WEBPACK_IMPORTED_MODULE_1__); -/* harmony import */ var core_js_modules_es_object_define_property_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! core-js/modules/es.object.define-property.js */ "./node_modules/core-js/modules/es.object.define-property.js"); -/* harmony import */ var core_js_modules_es_object_define_property_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_object_define_property_js__WEBPACK_IMPORTED_MODULE_2__); -/* harmony import */ var core_js_modules_es_promise_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! core-js/modules/es.promise.js */ "./node_modules/core-js/modules/es.promise.js"); -/* harmony import */ var core_js_modules_es_promise_js__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_promise_js__WEBPACK_IMPORTED_MODULE_3__); -/* harmony import */ var core_js_modules_es_symbol_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! core-js/modules/es.symbol.js */ "./node_modules/core-js/modules/es.symbol.js"); -/* harmony import */ var core_js_modules_es_symbol_js__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_symbol_js__WEBPACK_IMPORTED_MODULE_4__); -/* harmony import */ var core_js_modules_es_symbol_description_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! core-js/modules/es.symbol.description.js */ "./node_modules/core-js/modules/es.symbol.description.js"); -/* harmony import */ var core_js_modules_es_symbol_description_js__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_symbol_description_js__WEBPACK_IMPORTED_MODULE_5__); -/* harmony import */ var core_js_modules_es_symbol_iterator_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! core-js/modules/es.symbol.iterator.js */ "./node_modules/core-js/modules/es.symbol.iterator.js"); -/* harmony import */ var core_js_modules_es_symbol_iterator_js__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_symbol_iterator_js__WEBPACK_IMPORTED_MODULE_6__); -/* harmony import */ var core_js_modules_es_array_iterator_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! core-js/modules/es.array.iterator.js */ "./node_modules/core-js/modules/es.array.iterator.js"); -/* harmony import */ var core_js_modules_es_array_iterator_js__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_iterator_js__WEBPACK_IMPORTED_MODULE_7__); -/* harmony import */ var core_js_modules_es_string_iterator_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! core-js/modules/es.string.iterator.js */ "./node_modules/core-js/modules/es.string.iterator.js"); -/* harmony import */ var core_js_modules_es_string_iterator_js__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_iterator_js__WEBPACK_IMPORTED_MODULE_8__); -/* harmony import */ var core_js_modules_web_dom_collections_iterator_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! core-js/modules/web.dom-collections.iterator.js */ "./node_modules/core-js/modules/web.dom-collections.iterator.js"); -/* harmony import */ var core_js_modules_web_dom_collections_iterator_js__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_web_dom_collections_iterator_js__WEBPACK_IMPORTED_MODULE_9__); -/* harmony import */ var core_js_modules_es_array_map_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! core-js/modules/es.array.map.js */ "./node_modules/core-js/modules/es.array.map.js"); -/* harmony import */ var core_js_modules_es_array_map_js__WEBPACK_IMPORTED_MODULE_10___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_map_js__WEBPACK_IMPORTED_MODULE_10__); -/* harmony import */ var tsyringe__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! tsyringe */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/tsyringe/dist/esm5/index.js"); -/* harmony import */ var _token__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./token */ "./var/plugins/System/PSC/Invoice/Webpack/src/services/token.ts"); -/* harmony import */ var axios__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! axios */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/axios/lib/axios.js"); -/* harmony import */ var _model_address__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../model/address */ "./var/plugins/System/PSC/Invoice/Webpack/src/model/address.ts"); function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); } - - - - - - - - - - - -var __decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) { +__webpack_require__(/*! core-js/modules/es.object.get-own-property-descriptor.js */ "./node_modules/core-js/modules/es.object.get-own-property-descriptor.js"); +__webpack_require__(/*! core-js/modules/es.object.to-string.js */ "./node_modules/core-js/modules/es.object.to-string.js"); +__webpack_require__(/*! core-js/modules/es.object.define-property.js */ "./node_modules/core-js/modules/es.object.define-property.js"); +__webpack_require__(/*! core-js/modules/es.promise.js */ "./node_modules/core-js/modules/es.promise.js"); +__webpack_require__(/*! core-js/modules/es.symbol.js */ "./node_modules/core-js/modules/es.symbol.js"); +__webpack_require__(/*! core-js/modules/es.symbol.description.js */ "./node_modules/core-js/modules/es.symbol.description.js"); +__webpack_require__(/*! core-js/modules/es.symbol.iterator.js */ "./node_modules/core-js/modules/es.symbol.iterator.js"); +__webpack_require__(/*! core-js/modules/es.array.iterator.js */ "./node_modules/core-js/modules/es.array.iterator.js"); +__webpack_require__(/*! core-js/modules/es.string.iterator.js */ "./node_modules/core-js/modules/es.string.iterator.js"); +__webpack_require__(/*! core-js/modules/web.dom-collections.iterator.js */ "./node_modules/core-js/modules/web.dom-collections.iterator.js"); +__webpack_require__(/*! core-js/modules/es.array.map.js */ "./node_modules/core-js/modules/es.array.map.js"); +var __decorate = this && this.__decorate || function (decorators, target, key, desc) { var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; if ((typeof Reflect === "undefined" ? "undefined" : _typeof(Reflect)) === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; return c > 3 && r && Object.defineProperty(target, key, r), r; }; -var __metadata = undefined && undefined.__metadata || function (k, v) { +var __metadata = this && this.__metadata || function (k, v) { if ((typeof Reflect === "undefined" ? "undefined" : _typeof(Reflect)) === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); }; -var __awaiter = undefined && undefined.__awaiter || function (thisArg, _arguments, P, generator) { +var __awaiter = this && this.__awaiter || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); @@ -5272,7 +5998,7 @@ var __awaiter = undefined && undefined.__awaiter || function (thisArg, _argument step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; -var __generator = undefined && undefined.__generator || function (thisArg, body) { +var __generator = this && this.__generator || function (thisArg, body) { var _ = { label: 0, sent: function sent() { @@ -5360,10 +6086,17 @@ var __generator = undefined && undefined.__generator || function (thisArg, body) }; } }; - - - - +var __importDefault = this && this.__importDefault || function (mod) { + return mod && mod.__esModule ? mod : { + "default": mod + }; +}; +exports.__esModule = true; +exports.AddressService = void 0; +var tsyringe_1 = __webpack_require__(/*! tsyringe */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/tsyringe/dist/esm5/index.js"); +var token_1 = __webpack_require__(/*! ./token */ "./var/plugins/System/PSC/Invoice/Webpack/src/services/token.ts"); +var axios_1 = __importDefault(__webpack_require__(/*! axios */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/axios/dist/browser/axios.cjs")); +var address_1 = __webpack_require__(/*! ../model/address */ "./var/plugins/System/PSC/Invoice/Webpack/src/model/address.ts"); var AddressService = /** @class */function () { function AddressService(token) { this.token = token; @@ -5374,7 +6107,7 @@ var AddressService = /** @class */function () { return __generator(this, function (_b) { switch (_b.label) { case 0: - return [4 /*yield*/, axios__WEBPACK_IMPORTED_MODULE_14__["default"].post('/apps/api/contact/address/create', { + return [4 /*yield*/, axios_1["default"].post('/apps/api/contact/address/create', { 'address': address }, { headers: { @@ -5395,7 +6128,7 @@ var AddressService = /** @class */function () { return __generator(this, function (_b) { switch (_b.label) { case 0: - return [4 /*yield*/, axios__WEBPACK_IMPORTED_MODULE_14__["default"].put('/apps/api/contact/address/update/' + address.uuid, { + return [4 /*yield*/, axios_1["default"].put('/apps/api/contact/address/update/' + address.uuid, { 'address': address }, { headers: { @@ -5416,13 +6149,13 @@ var AddressService = /** @class */function () { return __generator(this, function (_b) { switch (_b.label) { case 0: - return [4 /*yield*/, axios__WEBPACK_IMPORTED_MODULE_14__["default"].get('/apps/api/contact/address/getallfortype/' + contact + '/' + type, { + return [4 /*yield*/, axios_1["default"].get('/apps/api/contact/address/getallfortype/' + contact + '/' + type, { headers: { 'Authorization': 'Bearer ' + ((_a = this.token) === null || _a === void 0 ? void 0 : _a.currentToken) } }).then(function (response) { return response.data.data.map(function (item) { - var address = new _model_address__WEBPACK_IMPORTED_MODULE_13__.Address(); + var address = new address_1.Address(); address.uid = item.uid; address.firstname = item.firstname; address.lastname = item.lastname; @@ -5444,10 +6177,10 @@ var AddressService = /** @class */function () { }); }); }; - AddressService = __decorate([(0,tsyringe__WEBPACK_IMPORTED_MODULE_11__.singleton)(), (0,tsyringe__WEBPACK_IMPORTED_MODULE_11__.autoInjectable)(), __metadata("design:paramtypes", [_token__WEBPACK_IMPORTED_MODULE_12__.Token])], AddressService); + AddressService = __decorate([(0, tsyringe_1.singleton)(), (0, tsyringe_1.autoInjectable)(), __metadata("design:paramtypes", [token_1.Token])], AddressService); return AddressService; }(); - +exports.AddressService = AddressService; /***/ }), @@ -5455,61 +6188,33 @@ var AddressService = /** @class */function () { /*!************************************************************************!*\ !*** ./var/plugins/System/PSC/Invoice/Webpack/src/services/contact.ts ***! \************************************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + + -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "ContactService": () => (/* binding */ ContactService) -/* harmony export */ }); -/* harmony import */ var core_js_modules_es_object_get_own_property_descriptor_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.object.get-own-property-descriptor.js */ "./node_modules/core-js/modules/es.object.get-own-property-descriptor.js"); -/* harmony import */ var core_js_modules_es_object_get_own_property_descriptor_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_object_get_own_property_descriptor_js__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var core_js_modules_es_object_to_string_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es.object.to-string.js */ "./node_modules/core-js/modules/es.object.to-string.js"); -/* harmony import */ var core_js_modules_es_object_to_string_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_object_to_string_js__WEBPACK_IMPORTED_MODULE_1__); -/* harmony import */ var core_js_modules_es_object_define_property_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! core-js/modules/es.object.define-property.js */ "./node_modules/core-js/modules/es.object.define-property.js"); -/* harmony import */ var core_js_modules_es_object_define_property_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_object_define_property_js__WEBPACK_IMPORTED_MODULE_2__); -/* harmony import */ var core_js_modules_es_promise_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! core-js/modules/es.promise.js */ "./node_modules/core-js/modules/es.promise.js"); -/* harmony import */ var core_js_modules_es_promise_js__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_promise_js__WEBPACK_IMPORTED_MODULE_3__); -/* harmony import */ var core_js_modules_es_symbol_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! core-js/modules/es.symbol.js */ "./node_modules/core-js/modules/es.symbol.js"); -/* harmony import */ var core_js_modules_es_symbol_js__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_symbol_js__WEBPACK_IMPORTED_MODULE_4__); -/* harmony import */ var core_js_modules_es_symbol_description_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! core-js/modules/es.symbol.description.js */ "./node_modules/core-js/modules/es.symbol.description.js"); -/* harmony import */ var core_js_modules_es_symbol_description_js__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_symbol_description_js__WEBPACK_IMPORTED_MODULE_5__); -/* harmony import */ var core_js_modules_es_symbol_iterator_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! core-js/modules/es.symbol.iterator.js */ "./node_modules/core-js/modules/es.symbol.iterator.js"); -/* harmony import */ var core_js_modules_es_symbol_iterator_js__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_symbol_iterator_js__WEBPACK_IMPORTED_MODULE_6__); -/* harmony import */ var core_js_modules_es_array_iterator_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! core-js/modules/es.array.iterator.js */ "./node_modules/core-js/modules/es.array.iterator.js"); -/* harmony import */ var core_js_modules_es_array_iterator_js__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_iterator_js__WEBPACK_IMPORTED_MODULE_7__); -/* harmony import */ var core_js_modules_es_string_iterator_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! core-js/modules/es.string.iterator.js */ "./node_modules/core-js/modules/es.string.iterator.js"); -/* harmony import */ var core_js_modules_es_string_iterator_js__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_iterator_js__WEBPACK_IMPORTED_MODULE_8__); -/* harmony import */ var core_js_modules_web_dom_collections_iterator_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! core-js/modules/web.dom-collections.iterator.js */ "./node_modules/core-js/modules/web.dom-collections.iterator.js"); -/* harmony import */ var core_js_modules_web_dom_collections_iterator_js__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_web_dom_collections_iterator_js__WEBPACK_IMPORTED_MODULE_9__); -/* harmony import */ var core_js_modules_es_array_map_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! core-js/modules/es.array.map.js */ "./node_modules/core-js/modules/es.array.map.js"); -/* harmony import */ var core_js_modules_es_array_map_js__WEBPACK_IMPORTED_MODULE_10___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_map_js__WEBPACK_IMPORTED_MODULE_10__); -/* harmony import */ var tsyringe__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! tsyringe */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/tsyringe/dist/esm5/index.js"); -/* harmony import */ var _token__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./token */ "./var/plugins/System/PSC/Invoice/Webpack/src/services/token.ts"); -/* harmony import */ var axios__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! axios */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/axios/lib/axios.js"); -/* harmony import */ var _model_contact__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../model/contact */ "./var/plugins/System/PSC/Invoice/Webpack/src/model/contact.ts"); function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); } - - - - - - - - - - - -var __decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) { +__webpack_require__(/*! core-js/modules/es.object.get-own-property-descriptor.js */ "./node_modules/core-js/modules/es.object.get-own-property-descriptor.js"); +__webpack_require__(/*! core-js/modules/es.object.to-string.js */ "./node_modules/core-js/modules/es.object.to-string.js"); +__webpack_require__(/*! core-js/modules/es.object.define-property.js */ "./node_modules/core-js/modules/es.object.define-property.js"); +__webpack_require__(/*! core-js/modules/es.promise.js */ "./node_modules/core-js/modules/es.promise.js"); +__webpack_require__(/*! core-js/modules/es.symbol.js */ "./node_modules/core-js/modules/es.symbol.js"); +__webpack_require__(/*! core-js/modules/es.symbol.description.js */ "./node_modules/core-js/modules/es.symbol.description.js"); +__webpack_require__(/*! core-js/modules/es.symbol.iterator.js */ "./node_modules/core-js/modules/es.symbol.iterator.js"); +__webpack_require__(/*! core-js/modules/es.array.iterator.js */ "./node_modules/core-js/modules/es.array.iterator.js"); +__webpack_require__(/*! core-js/modules/es.string.iterator.js */ "./node_modules/core-js/modules/es.string.iterator.js"); +__webpack_require__(/*! core-js/modules/web.dom-collections.iterator.js */ "./node_modules/core-js/modules/web.dom-collections.iterator.js"); +__webpack_require__(/*! core-js/modules/es.array.map.js */ "./node_modules/core-js/modules/es.array.map.js"); +var __decorate = this && this.__decorate || function (decorators, target, key, desc) { var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; if ((typeof Reflect === "undefined" ? "undefined" : _typeof(Reflect)) === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; return c > 3 && r && Object.defineProperty(target, key, r), r; }; -var __metadata = undefined && undefined.__metadata || function (k, v) { +var __metadata = this && this.__metadata || function (k, v) { if ((typeof Reflect === "undefined" ? "undefined" : _typeof(Reflect)) === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); }; -var __awaiter = undefined && undefined.__awaiter || function (thisArg, _arguments, P, generator) { +var __awaiter = this && this.__awaiter || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); @@ -5536,7 +6241,7 @@ var __awaiter = undefined && undefined.__awaiter || function (thisArg, _argument step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; -var __generator = undefined && undefined.__generator || function (thisArg, body) { +var __generator = this && this.__generator || function (thisArg, body) { var _ = { label: 0, sent: function sent() { @@ -5624,10 +6329,17 @@ var __generator = undefined && undefined.__generator || function (thisArg, body) }; } }; - - - - +var __importDefault = this && this.__importDefault || function (mod) { + return mod && mod.__esModule ? mod : { + "default": mod + }; +}; +exports.__esModule = true; +exports.ContactService = void 0; +var tsyringe_1 = __webpack_require__(/*! tsyringe */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/tsyringe/dist/esm5/index.js"); +var token_1 = __webpack_require__(/*! ./token */ "./var/plugins/System/PSC/Invoice/Webpack/src/services/token.ts"); +var axios_1 = __importDefault(__webpack_require__(/*! axios */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/axios/dist/browser/axios.cjs")); +var contact_1 = __webpack_require__(/*! ../model/contact */ "./var/plugins/System/PSC/Invoice/Webpack/src/model/contact.ts"); var ContactService = /** @class */function () { function ContactService(token) { this.token = token; @@ -5638,7 +6350,7 @@ var ContactService = /** @class */function () { return __generator(this, function (_b) { switch (_b.label) { case 0: - return [4 /*yield*/, axios__WEBPACK_IMPORTED_MODULE_14__["default"].post('/apps/api/contact/create', { + return [4 /*yield*/, axios_1["default"].post('/apps/api/contact/create', { 'contact': contact }, { headers: { @@ -5659,7 +6371,7 @@ var ContactService = /** @class */function () { return __generator(this, function (_b) { switch (_b.label) { case 0: - return [4 /*yield*/, axios__WEBPACK_IMPORTED_MODULE_14__["default"].put('/apps/api/contact/update/' + contact.uuid, { + return [4 /*yield*/, axios_1["default"].put('/apps/api/contact/update/' + contact.uuid, { 'contact': contact }, { headers: { @@ -5680,13 +6392,13 @@ var ContactService = /** @class */function () { return __generator(this, function (_b) { switch (_b.label) { case 0: - return [4 /*yield*/, axios__WEBPACK_IMPORTED_MODULE_14__["default"].get('/apps/api/contact/allbyshop/' + shop.uuid + '?term=' + searchQuery + '&page=' + page, { + return [4 /*yield*/, axios_1["default"].get('/apps/api/contact/allbyshop/' + shop.uuid + '?term=' + searchQuery + '&page=' + page, { headers: { 'Authorization': 'Bearer ' + ((_a = this.token) === null || _a === void 0 ? void 0 : _a.currentToken) } }).then(function (response) { return response.data.data.map(function (item) { - var contact = new _model_contact__WEBPACK_IMPORTED_MODULE_13__.Contact(); + var contact = new contact_1.Contact(); contact.parseFromJson({ contact: item }); @@ -5699,10 +6411,10 @@ var ContactService = /** @class */function () { }); }); }; - ContactService = __decorate([(0,tsyringe__WEBPACK_IMPORTED_MODULE_11__.singleton)(), (0,tsyringe__WEBPACK_IMPORTED_MODULE_11__.autoInjectable)(), __metadata("design:paramtypes", [_token__WEBPACK_IMPORTED_MODULE_12__.Token])], ContactService); + ContactService = __decorate([(0, tsyringe_1.singleton)(), (0, tsyringe_1.autoInjectable)(), __metadata("design:paramtypes", [token_1.Token])], ContactService); return ContactService; }(); - +exports.ContactService = ContactService; /***/ }), @@ -5710,57 +6422,30 @@ var ContactService = /** @class */function () { /*!************************************************************************!*\ !*** ./var/plugins/System/PSC/Invoice/Webpack/src/services/country.ts ***! \************************************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + + -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "CountryService": () => (/* binding */ CountryService) -/* harmony export */ }); -/* harmony import */ var core_js_modules_es_object_get_own_property_descriptor_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.object.get-own-property-descriptor.js */ "./node_modules/core-js/modules/es.object.get-own-property-descriptor.js"); -/* harmony import */ var core_js_modules_es_object_get_own_property_descriptor_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_object_get_own_property_descriptor_js__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var core_js_modules_es_object_to_string_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es.object.to-string.js */ "./node_modules/core-js/modules/es.object.to-string.js"); -/* harmony import */ var core_js_modules_es_object_to_string_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_object_to_string_js__WEBPACK_IMPORTED_MODULE_1__); -/* harmony import */ var core_js_modules_es_object_define_property_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! core-js/modules/es.object.define-property.js */ "./node_modules/core-js/modules/es.object.define-property.js"); -/* harmony import */ var core_js_modules_es_object_define_property_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_object_define_property_js__WEBPACK_IMPORTED_MODULE_2__); -/* harmony import */ var core_js_modules_es_promise_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! core-js/modules/es.promise.js */ "./node_modules/core-js/modules/es.promise.js"); -/* harmony import */ var core_js_modules_es_promise_js__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_promise_js__WEBPACK_IMPORTED_MODULE_3__); -/* harmony import */ var core_js_modules_es_symbol_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! core-js/modules/es.symbol.js */ "./node_modules/core-js/modules/es.symbol.js"); -/* harmony import */ var core_js_modules_es_symbol_js__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_symbol_js__WEBPACK_IMPORTED_MODULE_4__); -/* harmony import */ var core_js_modules_es_symbol_description_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! core-js/modules/es.symbol.description.js */ "./node_modules/core-js/modules/es.symbol.description.js"); -/* harmony import */ var core_js_modules_es_symbol_description_js__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_symbol_description_js__WEBPACK_IMPORTED_MODULE_5__); -/* harmony import */ var core_js_modules_es_symbol_iterator_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! core-js/modules/es.symbol.iterator.js */ "./node_modules/core-js/modules/es.symbol.iterator.js"); -/* harmony import */ var core_js_modules_es_symbol_iterator_js__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_symbol_iterator_js__WEBPACK_IMPORTED_MODULE_6__); -/* harmony import */ var core_js_modules_es_array_iterator_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! core-js/modules/es.array.iterator.js */ "./node_modules/core-js/modules/es.array.iterator.js"); -/* harmony import */ var core_js_modules_es_array_iterator_js__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_iterator_js__WEBPACK_IMPORTED_MODULE_7__); -/* harmony import */ var core_js_modules_es_string_iterator_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! core-js/modules/es.string.iterator.js */ "./node_modules/core-js/modules/es.string.iterator.js"); -/* harmony import */ var core_js_modules_es_string_iterator_js__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_iterator_js__WEBPACK_IMPORTED_MODULE_8__); -/* harmony import */ var core_js_modules_web_dom_collections_iterator_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! core-js/modules/web.dom-collections.iterator.js */ "./node_modules/core-js/modules/web.dom-collections.iterator.js"); -/* harmony import */ var core_js_modules_web_dom_collections_iterator_js__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_web_dom_collections_iterator_js__WEBPACK_IMPORTED_MODULE_9__); -/* harmony import */ var core_js_modules_es_array_map_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! core-js/modules/es.array.map.js */ "./node_modules/core-js/modules/es.array.map.js"); -/* harmony import */ var core_js_modules_es_array_map_js__WEBPACK_IMPORTED_MODULE_10___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_map_js__WEBPACK_IMPORTED_MODULE_10__); -/* harmony import */ var tsyringe__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! tsyringe */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/tsyringe/dist/esm5/index.js"); -/* harmony import */ var axios__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! axios */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/axios/lib/axios.js"); -/* harmony import */ var _model_country__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../model/country */ "./var/plugins/System/PSC/Invoice/Webpack/src/model/country.ts"); function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); } - - - - - - - - - - - -var __decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) { +__webpack_require__(/*! core-js/modules/es.object.get-own-property-descriptor.js */ "./node_modules/core-js/modules/es.object.get-own-property-descriptor.js"); +__webpack_require__(/*! core-js/modules/es.object.to-string.js */ "./node_modules/core-js/modules/es.object.to-string.js"); +__webpack_require__(/*! core-js/modules/es.object.define-property.js */ "./node_modules/core-js/modules/es.object.define-property.js"); +__webpack_require__(/*! core-js/modules/es.promise.js */ "./node_modules/core-js/modules/es.promise.js"); +__webpack_require__(/*! core-js/modules/es.symbol.js */ "./node_modules/core-js/modules/es.symbol.js"); +__webpack_require__(/*! core-js/modules/es.symbol.description.js */ "./node_modules/core-js/modules/es.symbol.description.js"); +__webpack_require__(/*! core-js/modules/es.symbol.iterator.js */ "./node_modules/core-js/modules/es.symbol.iterator.js"); +__webpack_require__(/*! core-js/modules/es.array.iterator.js */ "./node_modules/core-js/modules/es.array.iterator.js"); +__webpack_require__(/*! core-js/modules/es.string.iterator.js */ "./node_modules/core-js/modules/es.string.iterator.js"); +__webpack_require__(/*! core-js/modules/web.dom-collections.iterator.js */ "./node_modules/core-js/modules/web.dom-collections.iterator.js"); +__webpack_require__(/*! core-js/modules/es.array.map.js */ "./node_modules/core-js/modules/es.array.map.js"); +var __decorate = this && this.__decorate || function (decorators, target, key, desc) { var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; if ((typeof Reflect === "undefined" ? "undefined" : _typeof(Reflect)) === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; return c > 3 && r && Object.defineProperty(target, key, r), r; }; -var __awaiter = undefined && undefined.__awaiter || function (thisArg, _arguments, P, generator) { +var __awaiter = this && this.__awaiter || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); @@ -5787,7 +6472,7 @@ var __awaiter = undefined && undefined.__awaiter || function (thisArg, _argument step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; -var __generator = undefined && undefined.__generator || function (thisArg, body) { +var __generator = this && this.__generator || function (thisArg, body) { var _ = { label: 0, sent: function sent() { @@ -5875,9 +6560,16 @@ var __generator = undefined && undefined.__generator || function (thisArg, body) }; } }; - - - +var __importDefault = this && this.__importDefault || function (mod) { + return mod && mod.__esModule ? mod : { + "default": mod + }; +}; +exports.__esModule = true; +exports.CountryService = void 0; +var tsyringe_1 = __webpack_require__(/*! tsyringe */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/tsyringe/dist/esm5/index.js"); +var axios_1 = __importDefault(__webpack_require__(/*! axios */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/axios/dist/browser/axios.cjs")); +var country_1 = __webpack_require__(/*! ../model/country */ "./var/plugins/System/PSC/Invoice/Webpack/src/model/country.ts"); var CountryService = /** @class */function () { function CountryService() {} CountryService.prototype.getCountry = function (shop) { @@ -5885,9 +6577,9 @@ var CountryService = /** @class */function () { return __generator(this, function (_a) { switch (_a.label) { case 0: - return [4 /*yield*/, axios__WEBPACK_IMPORTED_MODULE_13__["default"].get('/apps/api/country/by/shop/' + shop.uuid).then(function (response) { + return [4 /*yield*/, axios_1["default"].get('/apps/api/country/by/shop/' + shop.uuid).then(function (response) { return response.data.data.map(function (item) { - var country = new _model_country__WEBPACK_IMPORTED_MODULE_12__.Country(); + var country = new country_1.Country(); country.parseFromJson(item); return country; }); @@ -5898,10 +6590,10 @@ var CountryService = /** @class */function () { }); }); }; - CountryService = __decorate([(0,tsyringe__WEBPACK_IMPORTED_MODULE_11__.singleton)(), (0,tsyringe__WEBPACK_IMPORTED_MODULE_11__.autoInjectable)()], CountryService); + CountryService = __decorate([(0, tsyringe_1.singleton)(), (0, tsyringe_1.autoInjectable)()], CountryService); return CountryService; }(); - +exports.CountryService = CountryService; /***/ }), @@ -5909,58 +6601,32 @@ var CountryService = /** @class */function () { /*!**********************************************************************!*\ !*** ./var/plugins/System/PSC/Invoice/Webpack/src/services/order.ts ***! \**********************************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + + -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "OrderService": () => (/* binding */ OrderService) -/* harmony export */ }); -/* harmony import */ var core_js_modules_es_object_get_own_property_descriptor_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.object.get-own-property-descriptor.js */ "./node_modules/core-js/modules/es.object.get-own-property-descriptor.js"); -/* harmony import */ var core_js_modules_es_object_get_own_property_descriptor_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_object_get_own_property_descriptor_js__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var core_js_modules_es_object_to_string_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es.object.to-string.js */ "./node_modules/core-js/modules/es.object.to-string.js"); -/* harmony import */ var core_js_modules_es_object_to_string_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_object_to_string_js__WEBPACK_IMPORTED_MODULE_1__); -/* harmony import */ var core_js_modules_es_object_define_property_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! core-js/modules/es.object.define-property.js */ "./node_modules/core-js/modules/es.object.define-property.js"); -/* harmony import */ var core_js_modules_es_object_define_property_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_object_define_property_js__WEBPACK_IMPORTED_MODULE_2__); -/* harmony import */ var core_js_modules_es_promise_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! core-js/modules/es.promise.js */ "./node_modules/core-js/modules/es.promise.js"); -/* harmony import */ var core_js_modules_es_promise_js__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_promise_js__WEBPACK_IMPORTED_MODULE_3__); -/* harmony import */ var core_js_modules_es_symbol_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! core-js/modules/es.symbol.js */ "./node_modules/core-js/modules/es.symbol.js"); -/* harmony import */ var core_js_modules_es_symbol_js__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_symbol_js__WEBPACK_IMPORTED_MODULE_4__); -/* harmony import */ var core_js_modules_es_symbol_description_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! core-js/modules/es.symbol.description.js */ "./node_modules/core-js/modules/es.symbol.description.js"); -/* harmony import */ var core_js_modules_es_symbol_description_js__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_symbol_description_js__WEBPACK_IMPORTED_MODULE_5__); -/* harmony import */ var core_js_modules_es_symbol_iterator_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! core-js/modules/es.symbol.iterator.js */ "./node_modules/core-js/modules/es.symbol.iterator.js"); -/* harmony import */ var core_js_modules_es_symbol_iterator_js__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_symbol_iterator_js__WEBPACK_IMPORTED_MODULE_6__); -/* harmony import */ var core_js_modules_es_array_iterator_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! core-js/modules/es.array.iterator.js */ "./node_modules/core-js/modules/es.array.iterator.js"); -/* harmony import */ var core_js_modules_es_array_iterator_js__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_iterator_js__WEBPACK_IMPORTED_MODULE_7__); -/* harmony import */ var core_js_modules_es_string_iterator_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! core-js/modules/es.string.iterator.js */ "./node_modules/core-js/modules/es.string.iterator.js"); -/* harmony import */ var core_js_modules_es_string_iterator_js__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_iterator_js__WEBPACK_IMPORTED_MODULE_8__); -/* harmony import */ var core_js_modules_web_dom_collections_iterator_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! core-js/modules/web.dom-collections.iterator.js */ "./node_modules/core-js/modules/web.dom-collections.iterator.js"); -/* harmony import */ var core_js_modules_web_dom_collections_iterator_js__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_web_dom_collections_iterator_js__WEBPACK_IMPORTED_MODULE_9__); -/* harmony import */ var tsyringe__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! tsyringe */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/tsyringe/dist/esm5/index.js"); -/* harmony import */ var _token__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./token */ "./var/plugins/System/PSC/Invoice/Webpack/src/services/token.ts"); -/* harmony import */ var axios__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! axios */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/axios/lib/axios.js"); -/* harmony import */ var _model_order__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../model/order */ "./var/plugins/System/PSC/Invoice/Webpack/src/model/order.ts"); function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); } - - - - - - - - - - -var __decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) { +__webpack_require__(/*! core-js/modules/es.object.get-own-property-descriptor.js */ "./node_modules/core-js/modules/es.object.get-own-property-descriptor.js"); +__webpack_require__(/*! core-js/modules/es.object.to-string.js */ "./node_modules/core-js/modules/es.object.to-string.js"); +__webpack_require__(/*! core-js/modules/es.object.define-property.js */ "./node_modules/core-js/modules/es.object.define-property.js"); +__webpack_require__(/*! core-js/modules/es.promise.js */ "./node_modules/core-js/modules/es.promise.js"); +__webpack_require__(/*! core-js/modules/es.symbol.js */ "./node_modules/core-js/modules/es.symbol.js"); +__webpack_require__(/*! core-js/modules/es.symbol.description.js */ "./node_modules/core-js/modules/es.symbol.description.js"); +__webpack_require__(/*! core-js/modules/es.symbol.iterator.js */ "./node_modules/core-js/modules/es.symbol.iterator.js"); +__webpack_require__(/*! core-js/modules/es.array.iterator.js */ "./node_modules/core-js/modules/es.array.iterator.js"); +__webpack_require__(/*! core-js/modules/es.string.iterator.js */ "./node_modules/core-js/modules/es.string.iterator.js"); +__webpack_require__(/*! core-js/modules/web.dom-collections.iterator.js */ "./node_modules/core-js/modules/web.dom-collections.iterator.js"); +var __decorate = this && this.__decorate || function (decorators, target, key, desc) { var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; if ((typeof Reflect === "undefined" ? "undefined" : _typeof(Reflect)) === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; return c > 3 && r && Object.defineProperty(target, key, r), r; }; -var __metadata = undefined && undefined.__metadata || function (k, v) { +var __metadata = this && this.__metadata || function (k, v) { if ((typeof Reflect === "undefined" ? "undefined" : _typeof(Reflect)) === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); }; -var __awaiter = undefined && undefined.__awaiter || function (thisArg, _arguments, P, generator) { +var __awaiter = this && this.__awaiter || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); @@ -5987,7 +6653,7 @@ var __awaiter = undefined && undefined.__awaiter || function (thisArg, _argument step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; -var __generator = undefined && undefined.__generator || function (thisArg, body) { +var __generator = this && this.__generator || function (thisArg, body) { var _ = { label: 0, sent: function sent() { @@ -6075,10 +6741,17 @@ var __generator = undefined && undefined.__generator || function (thisArg, body) }; } }; - - - - +var __importDefault = this && this.__importDefault || function (mod) { + return mod && mod.__esModule ? mod : { + "default": mod + }; +}; +exports.__esModule = true; +exports.OrderService = void 0; +var tsyringe_1 = __webpack_require__(/*! tsyringe */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/tsyringe/dist/esm5/index.js"); +var token_1 = __webpack_require__(/*! ./token */ "./var/plugins/System/PSC/Invoice/Webpack/src/services/token.ts"); +var axios_1 = __importDefault(__webpack_require__(/*! axios */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/axios/dist/browser/axios.cjs")); +var order_1 = __webpack_require__(/*! ../model/order */ "./var/plugins/System/PSC/Invoice/Webpack/src/model/order.ts"); var OrderService = /** @class */function () { function OrderService(token) { this.token = token; @@ -6089,14 +6762,14 @@ var OrderService = /** @class */function () { return __generator(this, function (_b) { switch (_b.label) { case 0: - return [4 /*yield*/, axios__WEBPACK_IMPORTED_MODULE_13__["default"].post('/apps/api/order/getonebyuuid', { + return [4 /*yield*/, axios_1["default"].post('/apps/api/order/getonebyuuid', { uuid: uuid }, { headers: { 'Authorization': 'Bearer ' + ((_a = this.token) === null || _a === void 0 ? void 0 : _a.currentToken) } }).then(function (response) { - var order = new _model_order__WEBPACK_IMPORTED_MODULE_12__.Order(); + var order = new order_1.Order(); order.parseFromJson(response.data); return order; })]; @@ -6113,7 +6786,7 @@ var OrderService = /** @class */function () { return __generator(this, function (_b) { switch (_b.label) { case 0: - return [4 /*yield*/, axios__WEBPACK_IMPORTED_MODULE_13__["default"].post('/apps/api/order/create', order, { + return [4 /*yield*/, axios_1["default"].post('/apps/api/order/create', order, { headers: { 'Authorization': 'Bearer ' + ((_a = this.token) === null || _a === void 0 ? void 0 : _a.currentToken) } @@ -6132,7 +6805,7 @@ var OrderService = /** @class */function () { return __generator(this, function (_b) { switch (_b.label) { case 0: - return [4 /*yield*/, axios__WEBPACK_IMPORTED_MODULE_13__["default"].post('/apps/api/order/calc', order, { + return [4 /*yield*/, axios_1["default"].post('/apps/api/order/calc', order, { headers: { 'Authorization': 'Bearer ' + ((_a = this.token) === null || _a === void 0 ? void 0 : _a.currentToken) } @@ -6145,10 +6818,10 @@ var OrderService = /** @class */function () { }); }); }; - OrderService = __decorate([(0,tsyringe__WEBPACK_IMPORTED_MODULE_10__.singleton)(), (0,tsyringe__WEBPACK_IMPORTED_MODULE_10__.autoInjectable)(), __metadata("design:paramtypes", [_token__WEBPACK_IMPORTED_MODULE_11__.Token])], OrderService); + OrderService = __decorate([(0, tsyringe_1.singleton)(), (0, tsyringe_1.autoInjectable)(), __metadata("design:paramtypes", [token_1.Token])], OrderService); return OrderService; }(); - +exports.OrderService = OrderService; /***/ }), @@ -6156,61 +6829,33 @@ var OrderService = /** @class */function () { /*!************************************************************************!*\ !*** ./var/plugins/System/PSC/Invoice/Webpack/src/services/payment.ts ***! \************************************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + + -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "PaymentService": () => (/* binding */ PaymentService) -/* harmony export */ }); -/* harmony import */ var core_js_modules_es_object_get_own_property_descriptor_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.object.get-own-property-descriptor.js */ "./node_modules/core-js/modules/es.object.get-own-property-descriptor.js"); -/* harmony import */ var core_js_modules_es_object_get_own_property_descriptor_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_object_get_own_property_descriptor_js__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var core_js_modules_es_object_to_string_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es.object.to-string.js */ "./node_modules/core-js/modules/es.object.to-string.js"); -/* harmony import */ var core_js_modules_es_object_to_string_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_object_to_string_js__WEBPACK_IMPORTED_MODULE_1__); -/* harmony import */ var core_js_modules_es_object_define_property_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! core-js/modules/es.object.define-property.js */ "./node_modules/core-js/modules/es.object.define-property.js"); -/* harmony import */ var core_js_modules_es_object_define_property_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_object_define_property_js__WEBPACK_IMPORTED_MODULE_2__); -/* harmony import */ var core_js_modules_es_promise_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! core-js/modules/es.promise.js */ "./node_modules/core-js/modules/es.promise.js"); -/* harmony import */ var core_js_modules_es_promise_js__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_promise_js__WEBPACK_IMPORTED_MODULE_3__); -/* harmony import */ var core_js_modules_es_symbol_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! core-js/modules/es.symbol.js */ "./node_modules/core-js/modules/es.symbol.js"); -/* harmony import */ var core_js_modules_es_symbol_js__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_symbol_js__WEBPACK_IMPORTED_MODULE_4__); -/* harmony import */ var core_js_modules_es_symbol_description_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! core-js/modules/es.symbol.description.js */ "./node_modules/core-js/modules/es.symbol.description.js"); -/* harmony import */ var core_js_modules_es_symbol_description_js__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_symbol_description_js__WEBPACK_IMPORTED_MODULE_5__); -/* harmony import */ var core_js_modules_es_symbol_iterator_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! core-js/modules/es.symbol.iterator.js */ "./node_modules/core-js/modules/es.symbol.iterator.js"); -/* harmony import */ var core_js_modules_es_symbol_iterator_js__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_symbol_iterator_js__WEBPACK_IMPORTED_MODULE_6__); -/* harmony import */ var core_js_modules_es_array_iterator_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! core-js/modules/es.array.iterator.js */ "./node_modules/core-js/modules/es.array.iterator.js"); -/* harmony import */ var core_js_modules_es_array_iterator_js__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_iterator_js__WEBPACK_IMPORTED_MODULE_7__); -/* harmony import */ var core_js_modules_es_string_iterator_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! core-js/modules/es.string.iterator.js */ "./node_modules/core-js/modules/es.string.iterator.js"); -/* harmony import */ var core_js_modules_es_string_iterator_js__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_iterator_js__WEBPACK_IMPORTED_MODULE_8__); -/* harmony import */ var core_js_modules_web_dom_collections_iterator_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! core-js/modules/web.dom-collections.iterator.js */ "./node_modules/core-js/modules/web.dom-collections.iterator.js"); -/* harmony import */ var core_js_modules_web_dom_collections_iterator_js__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_web_dom_collections_iterator_js__WEBPACK_IMPORTED_MODULE_9__); -/* harmony import */ var core_js_modules_es_array_map_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! core-js/modules/es.array.map.js */ "./node_modules/core-js/modules/es.array.map.js"); -/* harmony import */ var core_js_modules_es_array_map_js__WEBPACK_IMPORTED_MODULE_10___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_map_js__WEBPACK_IMPORTED_MODULE_10__); -/* harmony import */ var tsyringe__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! tsyringe */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/tsyringe/dist/esm5/index.js"); -/* harmony import */ var _token__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./token */ "./var/plugins/System/PSC/Invoice/Webpack/src/services/token.ts"); -/* harmony import */ var axios__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! axios */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/axios/lib/axios.js"); -/* harmony import */ var _model_payment__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../model/payment */ "./var/plugins/System/PSC/Invoice/Webpack/src/model/payment.ts"); function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); } - - - - - - - - - - - -var __decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) { +__webpack_require__(/*! core-js/modules/es.object.get-own-property-descriptor.js */ "./node_modules/core-js/modules/es.object.get-own-property-descriptor.js"); +__webpack_require__(/*! core-js/modules/es.object.to-string.js */ "./node_modules/core-js/modules/es.object.to-string.js"); +__webpack_require__(/*! core-js/modules/es.object.define-property.js */ "./node_modules/core-js/modules/es.object.define-property.js"); +__webpack_require__(/*! core-js/modules/es.promise.js */ "./node_modules/core-js/modules/es.promise.js"); +__webpack_require__(/*! core-js/modules/es.symbol.js */ "./node_modules/core-js/modules/es.symbol.js"); +__webpack_require__(/*! core-js/modules/es.symbol.description.js */ "./node_modules/core-js/modules/es.symbol.description.js"); +__webpack_require__(/*! core-js/modules/es.symbol.iterator.js */ "./node_modules/core-js/modules/es.symbol.iterator.js"); +__webpack_require__(/*! core-js/modules/es.array.iterator.js */ "./node_modules/core-js/modules/es.array.iterator.js"); +__webpack_require__(/*! core-js/modules/es.string.iterator.js */ "./node_modules/core-js/modules/es.string.iterator.js"); +__webpack_require__(/*! core-js/modules/web.dom-collections.iterator.js */ "./node_modules/core-js/modules/web.dom-collections.iterator.js"); +__webpack_require__(/*! core-js/modules/es.array.map.js */ "./node_modules/core-js/modules/es.array.map.js"); +var __decorate = this && this.__decorate || function (decorators, target, key, desc) { var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; if ((typeof Reflect === "undefined" ? "undefined" : _typeof(Reflect)) === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; return c > 3 && r && Object.defineProperty(target, key, r), r; }; -var __metadata = undefined && undefined.__metadata || function (k, v) { +var __metadata = this && this.__metadata || function (k, v) { if ((typeof Reflect === "undefined" ? "undefined" : _typeof(Reflect)) === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); }; -var __awaiter = undefined && undefined.__awaiter || function (thisArg, _arguments, P, generator) { +var __awaiter = this && this.__awaiter || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); @@ -6237,7 +6882,7 @@ var __awaiter = undefined && undefined.__awaiter || function (thisArg, _argument step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; -var __generator = undefined && undefined.__generator || function (thisArg, body) { +var __generator = this && this.__generator || function (thisArg, body) { var _ = { label: 0, sent: function sent() { @@ -6325,10 +6970,17 @@ var __generator = undefined && undefined.__generator || function (thisArg, body) }; } }; - - - - +var __importDefault = this && this.__importDefault || function (mod) { + return mod && mod.__esModule ? mod : { + "default": mod + }; +}; +exports.__esModule = true; +exports.PaymentService = void 0; +var tsyringe_1 = __webpack_require__(/*! tsyringe */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/tsyringe/dist/esm5/index.js"); +var token_1 = __webpack_require__(/*! ./token */ "./var/plugins/System/PSC/Invoice/Webpack/src/services/token.ts"); +var axios_1 = __importDefault(__webpack_require__(/*! axios */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/axios/dist/browser/axios.cjs")); +var payment_1 = __webpack_require__(/*! ../model/payment */ "./var/plugins/System/PSC/Invoice/Webpack/src/model/payment.ts"); var PaymentService = /** @class */function () { function PaymentService(token) { this.token = token; @@ -6339,13 +6991,13 @@ var PaymentService = /** @class */function () { return __generator(this, function (_b) { switch (_b.label) { case 0: - return [4 /*yield*/, axios__WEBPACK_IMPORTED_MODULE_14__["default"].get('/apps/api/payment/by/shop/' + shop.uuid, { + return [4 /*yield*/, axios_1["default"].get('/apps/api/payment/by/shop/' + shop.uuid, { headers: { 'Authorization': 'Bearer ' + ((_a = this.token) === null || _a === void 0 ? void 0 : _a.currentToken) } }).then(function (response) { return response.data.data.map(function (item) { - var payment = new _model_payment__WEBPACK_IMPORTED_MODULE_13__.Payment(); + var payment = new payment_1.Payment(); payment.uid = item.uid; payment.title = item.title; payment.uuid = item.uuid; @@ -6358,10 +7010,10 @@ var PaymentService = /** @class */function () { }); }); }; - PaymentService = __decorate([(0,tsyringe__WEBPACK_IMPORTED_MODULE_11__.singleton)(), (0,tsyringe__WEBPACK_IMPORTED_MODULE_11__.autoInjectable)(), __metadata("design:paramtypes", [_token__WEBPACK_IMPORTED_MODULE_12__.Token])], PaymentService); + PaymentService = __decorate([(0, tsyringe_1.singleton)(), (0, tsyringe_1.autoInjectable)(), __metadata("design:paramtypes", [token_1.Token])], PaymentService); return PaymentService; }(); - +exports.PaymentService = PaymentService; /***/ }), @@ -6369,61 +7021,33 @@ var PaymentService = /** @class */function () { /*!************************************************************************!*\ !*** ./var/plugins/System/PSC/Invoice/Webpack/src/services/product.ts ***! \************************************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + + -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "ProductService": () => (/* binding */ ProductService) -/* harmony export */ }); -/* harmony import */ var core_js_modules_es_object_get_own_property_descriptor_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.object.get-own-property-descriptor.js */ "./node_modules/core-js/modules/es.object.get-own-property-descriptor.js"); -/* harmony import */ var core_js_modules_es_object_get_own_property_descriptor_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_object_get_own_property_descriptor_js__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var core_js_modules_es_object_to_string_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es.object.to-string.js */ "./node_modules/core-js/modules/es.object.to-string.js"); -/* harmony import */ var core_js_modules_es_object_to_string_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_object_to_string_js__WEBPACK_IMPORTED_MODULE_1__); -/* harmony import */ var core_js_modules_es_object_define_property_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! core-js/modules/es.object.define-property.js */ "./node_modules/core-js/modules/es.object.define-property.js"); -/* harmony import */ var core_js_modules_es_object_define_property_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_object_define_property_js__WEBPACK_IMPORTED_MODULE_2__); -/* harmony import */ var core_js_modules_es_promise_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! core-js/modules/es.promise.js */ "./node_modules/core-js/modules/es.promise.js"); -/* harmony import */ var core_js_modules_es_promise_js__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_promise_js__WEBPACK_IMPORTED_MODULE_3__); -/* harmony import */ var core_js_modules_es_symbol_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! core-js/modules/es.symbol.js */ "./node_modules/core-js/modules/es.symbol.js"); -/* harmony import */ var core_js_modules_es_symbol_js__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_symbol_js__WEBPACK_IMPORTED_MODULE_4__); -/* harmony import */ var core_js_modules_es_symbol_description_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! core-js/modules/es.symbol.description.js */ "./node_modules/core-js/modules/es.symbol.description.js"); -/* harmony import */ var core_js_modules_es_symbol_description_js__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_symbol_description_js__WEBPACK_IMPORTED_MODULE_5__); -/* harmony import */ var core_js_modules_es_symbol_iterator_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! core-js/modules/es.symbol.iterator.js */ "./node_modules/core-js/modules/es.symbol.iterator.js"); -/* harmony import */ var core_js_modules_es_symbol_iterator_js__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_symbol_iterator_js__WEBPACK_IMPORTED_MODULE_6__); -/* harmony import */ var core_js_modules_es_array_iterator_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! core-js/modules/es.array.iterator.js */ "./node_modules/core-js/modules/es.array.iterator.js"); -/* harmony import */ var core_js_modules_es_array_iterator_js__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_iterator_js__WEBPACK_IMPORTED_MODULE_7__); -/* harmony import */ var core_js_modules_es_string_iterator_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! core-js/modules/es.string.iterator.js */ "./node_modules/core-js/modules/es.string.iterator.js"); -/* harmony import */ var core_js_modules_es_string_iterator_js__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_iterator_js__WEBPACK_IMPORTED_MODULE_8__); -/* harmony import */ var core_js_modules_web_dom_collections_iterator_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! core-js/modules/web.dom-collections.iterator.js */ "./node_modules/core-js/modules/web.dom-collections.iterator.js"); -/* harmony import */ var core_js_modules_web_dom_collections_iterator_js__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_web_dom_collections_iterator_js__WEBPACK_IMPORTED_MODULE_9__); -/* harmony import */ var core_js_modules_es_array_map_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! core-js/modules/es.array.map.js */ "./node_modules/core-js/modules/es.array.map.js"); -/* harmony import */ var core_js_modules_es_array_map_js__WEBPACK_IMPORTED_MODULE_10___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_map_js__WEBPACK_IMPORTED_MODULE_10__); -/* harmony import */ var tsyringe__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! tsyringe */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/tsyringe/dist/esm5/index.js"); -/* harmony import */ var _token__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./token */ "./var/plugins/System/PSC/Invoice/Webpack/src/services/token.ts"); -/* harmony import */ var axios__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! axios */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/axios/lib/axios.js"); -/* harmony import */ var _model_product__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../model/product */ "./var/plugins/System/PSC/Invoice/Webpack/src/model/product.ts"); function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); } - - - - - - - - - - - -var __decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) { +__webpack_require__(/*! core-js/modules/es.object.get-own-property-descriptor.js */ "./node_modules/core-js/modules/es.object.get-own-property-descriptor.js"); +__webpack_require__(/*! core-js/modules/es.object.to-string.js */ "./node_modules/core-js/modules/es.object.to-string.js"); +__webpack_require__(/*! core-js/modules/es.object.define-property.js */ "./node_modules/core-js/modules/es.object.define-property.js"); +__webpack_require__(/*! core-js/modules/es.promise.js */ "./node_modules/core-js/modules/es.promise.js"); +__webpack_require__(/*! core-js/modules/es.symbol.js */ "./node_modules/core-js/modules/es.symbol.js"); +__webpack_require__(/*! core-js/modules/es.symbol.description.js */ "./node_modules/core-js/modules/es.symbol.description.js"); +__webpack_require__(/*! core-js/modules/es.symbol.iterator.js */ "./node_modules/core-js/modules/es.symbol.iterator.js"); +__webpack_require__(/*! core-js/modules/es.array.iterator.js */ "./node_modules/core-js/modules/es.array.iterator.js"); +__webpack_require__(/*! core-js/modules/es.string.iterator.js */ "./node_modules/core-js/modules/es.string.iterator.js"); +__webpack_require__(/*! core-js/modules/web.dom-collections.iterator.js */ "./node_modules/core-js/modules/web.dom-collections.iterator.js"); +__webpack_require__(/*! core-js/modules/es.array.map.js */ "./node_modules/core-js/modules/es.array.map.js"); +var __decorate = this && this.__decorate || function (decorators, target, key, desc) { var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; if ((typeof Reflect === "undefined" ? "undefined" : _typeof(Reflect)) === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; return c > 3 && r && Object.defineProperty(target, key, r), r; }; -var __metadata = undefined && undefined.__metadata || function (k, v) { +var __metadata = this && this.__metadata || function (k, v) { if ((typeof Reflect === "undefined" ? "undefined" : _typeof(Reflect)) === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); }; -var __awaiter = undefined && undefined.__awaiter || function (thisArg, _arguments, P, generator) { +var __awaiter = this && this.__awaiter || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); @@ -6450,7 +7074,7 @@ var __awaiter = undefined && undefined.__awaiter || function (thisArg, _argument step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; -var __generator = undefined && undefined.__generator || function (thisArg, body) { +var __generator = this && this.__generator || function (thisArg, body) { var _ = { label: 0, sent: function sent() { @@ -6538,10 +7162,17 @@ var __generator = undefined && undefined.__generator || function (thisArg, body) }; } }; - - - - +var __importDefault = this && this.__importDefault || function (mod) { + return mod && mod.__esModule ? mod : { + "default": mod + }; +}; +exports.__esModule = true; +exports.ProductService = void 0; +var tsyringe_1 = __webpack_require__(/*! tsyringe */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/tsyringe/dist/esm5/index.js"); +var token_1 = __webpack_require__(/*! ./token */ "./var/plugins/System/PSC/Invoice/Webpack/src/services/token.ts"); +var axios_1 = __importDefault(__webpack_require__(/*! axios */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/axios/dist/browser/axios.cjs")); +var product_1 = __webpack_require__(/*! ../model/product */ "./var/plugins/System/PSC/Invoice/Webpack/src/model/product.ts"); var ProductService = /** @class */function () { function ProductService(token) { this.token = token; @@ -6552,13 +7183,13 @@ var ProductService = /** @class */function () { return __generator(this, function (_b) { switch (_b.label) { case 0: - return [4 /*yield*/, axios__WEBPACK_IMPORTED_MODULE_14__["default"].get('/apps/api/product/getallbyterm/' + shop.uuid + '/' + term, { + return [4 /*yield*/, axios_1["default"].get('/apps/api/product/getallbyterm/' + shop.uuid + '/' + term, { headers: { 'Authorization': 'Bearer ' + ((_a = this.token) === null || _a === void 0 ? void 0 : _a.currentToken) } }).then(function (response) { return response.data.data.map(function (item) { - var p = new _model_product__WEBPACK_IMPORTED_MODULE_13__.Product(); + var p = new product_1.Product(); p.id = item.id; p.title = item.title; p.uuid = item.uuid; @@ -6578,13 +7209,13 @@ var ProductService = /** @class */function () { return __generator(this, function (_b) { switch (_b.label) { case 0: - return [4 /*yield*/, axios__WEBPACK_IMPORTED_MODULE_14__["default"].get('/apps/api/product/getallbyproductgroup/' + productGroup.uuid, { + return [4 /*yield*/, axios_1["default"].get('/apps/api/product/getallbyproductgroup/' + productGroup.uuid, { headers: { 'Authorization': 'Bearer ' + ((_a = this.token) === null || _a === void 0 ? void 0 : _a.currentToken) } }).then(function (response) { return response.data.data.map(function (item) { - var p = new _model_product__WEBPACK_IMPORTED_MODULE_13__.Product(); + var p = new product_1.Product(); p.id = item.id; p.title = item.title; p.uuid = item.uuid; @@ -6604,7 +7235,7 @@ var ProductService = /** @class */function () { return __generator(this, function (_b) { switch (_b.label) { case 0: - return [4 /*yield*/, axios__WEBPACK_IMPORTED_MODULE_14__["default"].post('/apps/api/product/get/form/json/' + product.uuid, formData, { + return [4 /*yield*/, axios_1["default"].post('/apps/api/product/get/form/json/' + product.uuid, formData, { headers: { 'Authorization': 'Bearer ' + ((_a = this.token) === null || _a === void 0 ? void 0 : _a.currentToken) } @@ -6623,7 +7254,7 @@ var ProductService = /** @class */function () { return __generator(this, function (_b) { switch (_b.label) { case 0: - return [4 /*yield*/, axios__WEBPACK_IMPORTED_MODULE_14__["default"].post('/apps/api/product/get/form/json/' + product.uuid, formData, { + return [4 /*yield*/, axios_1["default"].post('/apps/api/product/get/form/json/' + product.uuid, formData, { headers: { 'Authorization': 'Bearer ' + ((_a = this.token) === null || _a === void 0 ? void 0 : _a.currentToken) } @@ -6636,10 +7267,10 @@ var ProductService = /** @class */function () { }); }); }; - ProductService = __decorate([(0,tsyringe__WEBPACK_IMPORTED_MODULE_11__.singleton)(), (0,tsyringe__WEBPACK_IMPORTED_MODULE_11__.autoInjectable)(), __metadata("design:paramtypes", [_token__WEBPACK_IMPORTED_MODULE_12__.Token])], ProductService); + ProductService = __decorate([(0, tsyringe_1.singleton)(), (0, tsyringe_1.autoInjectable)(), __metadata("design:paramtypes", [token_1.Token])], ProductService); return ProductService; }(); - +exports.ProductService = ProductService; /***/ }), @@ -6647,61 +7278,33 @@ var ProductService = /** @class */function () { /*!*****************************************************************************!*\ !*** ./var/plugins/System/PSC/Invoice/Webpack/src/services/productgroup.ts ***! \*****************************************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + + -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "ProductGroupService": () => (/* binding */ ProductGroupService) -/* harmony export */ }); -/* harmony import */ var core_js_modules_es_object_get_own_property_descriptor_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.object.get-own-property-descriptor.js */ "./node_modules/core-js/modules/es.object.get-own-property-descriptor.js"); -/* harmony import */ var core_js_modules_es_object_get_own_property_descriptor_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_object_get_own_property_descriptor_js__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var core_js_modules_es_object_to_string_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es.object.to-string.js */ "./node_modules/core-js/modules/es.object.to-string.js"); -/* harmony import */ var core_js_modules_es_object_to_string_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_object_to_string_js__WEBPACK_IMPORTED_MODULE_1__); -/* harmony import */ var core_js_modules_es_object_define_property_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! core-js/modules/es.object.define-property.js */ "./node_modules/core-js/modules/es.object.define-property.js"); -/* harmony import */ var core_js_modules_es_object_define_property_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_object_define_property_js__WEBPACK_IMPORTED_MODULE_2__); -/* harmony import */ var core_js_modules_es_promise_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! core-js/modules/es.promise.js */ "./node_modules/core-js/modules/es.promise.js"); -/* harmony import */ var core_js_modules_es_promise_js__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_promise_js__WEBPACK_IMPORTED_MODULE_3__); -/* harmony import */ var core_js_modules_es_symbol_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! core-js/modules/es.symbol.js */ "./node_modules/core-js/modules/es.symbol.js"); -/* harmony import */ var core_js_modules_es_symbol_js__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_symbol_js__WEBPACK_IMPORTED_MODULE_4__); -/* harmony import */ var core_js_modules_es_symbol_description_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! core-js/modules/es.symbol.description.js */ "./node_modules/core-js/modules/es.symbol.description.js"); -/* harmony import */ var core_js_modules_es_symbol_description_js__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_symbol_description_js__WEBPACK_IMPORTED_MODULE_5__); -/* harmony import */ var core_js_modules_es_symbol_iterator_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! core-js/modules/es.symbol.iterator.js */ "./node_modules/core-js/modules/es.symbol.iterator.js"); -/* harmony import */ var core_js_modules_es_symbol_iterator_js__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_symbol_iterator_js__WEBPACK_IMPORTED_MODULE_6__); -/* harmony import */ var core_js_modules_es_array_iterator_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! core-js/modules/es.array.iterator.js */ "./node_modules/core-js/modules/es.array.iterator.js"); -/* harmony import */ var core_js_modules_es_array_iterator_js__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_iterator_js__WEBPACK_IMPORTED_MODULE_7__); -/* harmony import */ var core_js_modules_es_string_iterator_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! core-js/modules/es.string.iterator.js */ "./node_modules/core-js/modules/es.string.iterator.js"); -/* harmony import */ var core_js_modules_es_string_iterator_js__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_iterator_js__WEBPACK_IMPORTED_MODULE_8__); -/* harmony import */ var core_js_modules_web_dom_collections_iterator_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! core-js/modules/web.dom-collections.iterator.js */ "./node_modules/core-js/modules/web.dom-collections.iterator.js"); -/* harmony import */ var core_js_modules_web_dom_collections_iterator_js__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_web_dom_collections_iterator_js__WEBPACK_IMPORTED_MODULE_9__); -/* harmony import */ var core_js_modules_es_array_map_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! core-js/modules/es.array.map.js */ "./node_modules/core-js/modules/es.array.map.js"); -/* harmony import */ var core_js_modules_es_array_map_js__WEBPACK_IMPORTED_MODULE_10___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_map_js__WEBPACK_IMPORTED_MODULE_10__); -/* harmony import */ var tsyringe__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! tsyringe */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/tsyringe/dist/esm5/index.js"); -/* harmony import */ var _token__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./token */ "./var/plugins/System/PSC/Invoice/Webpack/src/services/token.ts"); -/* harmony import */ var axios__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! axios */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/axios/lib/axios.js"); -/* harmony import */ var _model_productGroup__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../model/productGroup */ "./var/plugins/System/PSC/Invoice/Webpack/src/model/productGroup.ts"); function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); } - - - - - - - - - - - -var __decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) { +__webpack_require__(/*! core-js/modules/es.object.get-own-property-descriptor.js */ "./node_modules/core-js/modules/es.object.get-own-property-descriptor.js"); +__webpack_require__(/*! core-js/modules/es.object.to-string.js */ "./node_modules/core-js/modules/es.object.to-string.js"); +__webpack_require__(/*! core-js/modules/es.object.define-property.js */ "./node_modules/core-js/modules/es.object.define-property.js"); +__webpack_require__(/*! core-js/modules/es.promise.js */ "./node_modules/core-js/modules/es.promise.js"); +__webpack_require__(/*! core-js/modules/es.symbol.js */ "./node_modules/core-js/modules/es.symbol.js"); +__webpack_require__(/*! core-js/modules/es.symbol.description.js */ "./node_modules/core-js/modules/es.symbol.description.js"); +__webpack_require__(/*! core-js/modules/es.symbol.iterator.js */ "./node_modules/core-js/modules/es.symbol.iterator.js"); +__webpack_require__(/*! core-js/modules/es.array.iterator.js */ "./node_modules/core-js/modules/es.array.iterator.js"); +__webpack_require__(/*! core-js/modules/es.string.iterator.js */ "./node_modules/core-js/modules/es.string.iterator.js"); +__webpack_require__(/*! core-js/modules/web.dom-collections.iterator.js */ "./node_modules/core-js/modules/web.dom-collections.iterator.js"); +__webpack_require__(/*! core-js/modules/es.array.map.js */ "./node_modules/core-js/modules/es.array.map.js"); +var __decorate = this && this.__decorate || function (decorators, target, key, desc) { var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; if ((typeof Reflect === "undefined" ? "undefined" : _typeof(Reflect)) === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; return c > 3 && r && Object.defineProperty(target, key, r), r; }; -var __metadata = undefined && undefined.__metadata || function (k, v) { +var __metadata = this && this.__metadata || function (k, v) { if ((typeof Reflect === "undefined" ? "undefined" : _typeof(Reflect)) === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); }; -var __awaiter = undefined && undefined.__awaiter || function (thisArg, _arguments, P, generator) { +var __awaiter = this && this.__awaiter || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); @@ -6728,7 +7331,7 @@ var __awaiter = undefined && undefined.__awaiter || function (thisArg, _argument step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; -var __generator = undefined && undefined.__generator || function (thisArg, body) { +var __generator = this && this.__generator || function (thisArg, body) { var _ = { label: 0, sent: function sent() { @@ -6816,10 +7419,17 @@ var __generator = undefined && undefined.__generator || function (thisArg, body) }; } }; - - - - +var __importDefault = this && this.__importDefault || function (mod) { + return mod && mod.__esModule ? mod : { + "default": mod + }; +}; +exports.__esModule = true; +exports.ProductGroupService = void 0; +var tsyringe_1 = __webpack_require__(/*! tsyringe */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/tsyringe/dist/esm5/index.js"); +var token_1 = __webpack_require__(/*! ./token */ "./var/plugins/System/PSC/Invoice/Webpack/src/services/token.ts"); +var axios_1 = __importDefault(__webpack_require__(/*! axios */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/axios/dist/browser/axios.cjs")); +var productGroup_1 = __webpack_require__(/*! ../model/productGroup */ "./var/plugins/System/PSC/Invoice/Webpack/src/model/productGroup.ts"); var ProductGroupService = /** @class */function () { function ProductGroupService(token) { this.token = token; @@ -6829,20 +7439,20 @@ var ProductGroupService = /** @class */function () { return __generator(this, function (_a) { switch (_a.label) { case 0: - return [4 /*yield*/, axios__WEBPACK_IMPORTED_MODULE_14__["default"].get('/apps/api/productgroup/gettree/' + shop.uuid + '?term=' + searchQuery, { + return [4 /*yield*/, axios_1["default"].get('/apps/api/productgroup/gettree/' + shop.uuid + '?term=' + searchQuery, { headers: { 'Authorization': 'Bearer ' + this.token.currentToken } }).then(function (response) { var temp = []; response.data.data.map(function (item) { - var pg = new _model_productGroup__WEBPACK_IMPORTED_MODULE_13__.ProductGroup(); + var pg = new productGroup_1.ProductGroup(); pg.id = item.id; pg.label = item.title; pg.uuid = item.uuid; temp.push(pg); item.children.map(function (sub) { - var spg = new _model_productGroup__WEBPACK_IMPORTED_MODULE_13__.ProductGroup(); + var spg = new productGroup_1.ProductGroup(); spg.id = sub.id; spg.label = "-- " + sub.title; spg.uuid = sub.uuid; @@ -6858,10 +7468,10 @@ var ProductGroupService = /** @class */function () { }); }); }; - ProductGroupService = __decorate([(0,tsyringe__WEBPACK_IMPORTED_MODULE_11__.singleton)(), (0,tsyringe__WEBPACK_IMPORTED_MODULE_11__.autoInjectable)(), __metadata("design:paramtypes", [_token__WEBPACK_IMPORTED_MODULE_12__.Token])], ProductGroupService); + ProductGroupService = __decorate([(0, tsyringe_1.singleton)(), (0, tsyringe_1.autoInjectable)(), __metadata("design:paramtypes", [token_1.Token])], ProductGroupService); return ProductGroupService; }(); - +exports.ProductGroupService = ProductGroupService; /***/ }), @@ -6869,61 +7479,33 @@ var ProductGroupService = /** @class */function () { /*!*************************************************************************!*\ !*** ./var/plugins/System/PSC/Invoice/Webpack/src/services/shipping.ts ***! \*************************************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + + -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "ShippingService": () => (/* binding */ ShippingService) -/* harmony export */ }); -/* harmony import */ var core_js_modules_es_object_get_own_property_descriptor_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.object.get-own-property-descriptor.js */ "./node_modules/core-js/modules/es.object.get-own-property-descriptor.js"); -/* harmony import */ var core_js_modules_es_object_get_own_property_descriptor_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_object_get_own_property_descriptor_js__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var core_js_modules_es_object_to_string_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es.object.to-string.js */ "./node_modules/core-js/modules/es.object.to-string.js"); -/* harmony import */ var core_js_modules_es_object_to_string_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_object_to_string_js__WEBPACK_IMPORTED_MODULE_1__); -/* harmony import */ var core_js_modules_es_object_define_property_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! core-js/modules/es.object.define-property.js */ "./node_modules/core-js/modules/es.object.define-property.js"); -/* harmony import */ var core_js_modules_es_object_define_property_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_object_define_property_js__WEBPACK_IMPORTED_MODULE_2__); -/* harmony import */ var core_js_modules_es_promise_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! core-js/modules/es.promise.js */ "./node_modules/core-js/modules/es.promise.js"); -/* harmony import */ var core_js_modules_es_promise_js__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_promise_js__WEBPACK_IMPORTED_MODULE_3__); -/* harmony import */ var core_js_modules_es_symbol_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! core-js/modules/es.symbol.js */ "./node_modules/core-js/modules/es.symbol.js"); -/* harmony import */ var core_js_modules_es_symbol_js__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_symbol_js__WEBPACK_IMPORTED_MODULE_4__); -/* harmony import */ var core_js_modules_es_symbol_description_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! core-js/modules/es.symbol.description.js */ "./node_modules/core-js/modules/es.symbol.description.js"); -/* harmony import */ var core_js_modules_es_symbol_description_js__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_symbol_description_js__WEBPACK_IMPORTED_MODULE_5__); -/* harmony import */ var core_js_modules_es_symbol_iterator_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! core-js/modules/es.symbol.iterator.js */ "./node_modules/core-js/modules/es.symbol.iterator.js"); -/* harmony import */ var core_js_modules_es_symbol_iterator_js__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_symbol_iterator_js__WEBPACK_IMPORTED_MODULE_6__); -/* harmony import */ var core_js_modules_es_array_iterator_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! core-js/modules/es.array.iterator.js */ "./node_modules/core-js/modules/es.array.iterator.js"); -/* harmony import */ var core_js_modules_es_array_iterator_js__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_iterator_js__WEBPACK_IMPORTED_MODULE_7__); -/* harmony import */ var core_js_modules_es_string_iterator_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! core-js/modules/es.string.iterator.js */ "./node_modules/core-js/modules/es.string.iterator.js"); -/* harmony import */ var core_js_modules_es_string_iterator_js__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_iterator_js__WEBPACK_IMPORTED_MODULE_8__); -/* harmony import */ var core_js_modules_web_dom_collections_iterator_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! core-js/modules/web.dom-collections.iterator.js */ "./node_modules/core-js/modules/web.dom-collections.iterator.js"); -/* harmony import */ var core_js_modules_web_dom_collections_iterator_js__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_web_dom_collections_iterator_js__WEBPACK_IMPORTED_MODULE_9__); -/* harmony import */ var core_js_modules_es_array_map_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! core-js/modules/es.array.map.js */ "./node_modules/core-js/modules/es.array.map.js"); -/* harmony import */ var core_js_modules_es_array_map_js__WEBPACK_IMPORTED_MODULE_10___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_map_js__WEBPACK_IMPORTED_MODULE_10__); -/* harmony import */ var tsyringe__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! tsyringe */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/tsyringe/dist/esm5/index.js"); -/* harmony import */ var _token__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./token */ "./var/plugins/System/PSC/Invoice/Webpack/src/services/token.ts"); -/* harmony import */ var axios__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! axios */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/axios/lib/axios.js"); -/* harmony import */ var _model_shipping__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../model/shipping */ "./var/plugins/System/PSC/Invoice/Webpack/src/model/shipping.ts"); function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); } - - - - - - - - - - - -var __decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) { +__webpack_require__(/*! core-js/modules/es.object.get-own-property-descriptor.js */ "./node_modules/core-js/modules/es.object.get-own-property-descriptor.js"); +__webpack_require__(/*! core-js/modules/es.object.to-string.js */ "./node_modules/core-js/modules/es.object.to-string.js"); +__webpack_require__(/*! core-js/modules/es.object.define-property.js */ "./node_modules/core-js/modules/es.object.define-property.js"); +__webpack_require__(/*! core-js/modules/es.promise.js */ "./node_modules/core-js/modules/es.promise.js"); +__webpack_require__(/*! core-js/modules/es.symbol.js */ "./node_modules/core-js/modules/es.symbol.js"); +__webpack_require__(/*! core-js/modules/es.symbol.description.js */ "./node_modules/core-js/modules/es.symbol.description.js"); +__webpack_require__(/*! core-js/modules/es.symbol.iterator.js */ "./node_modules/core-js/modules/es.symbol.iterator.js"); +__webpack_require__(/*! core-js/modules/es.array.iterator.js */ "./node_modules/core-js/modules/es.array.iterator.js"); +__webpack_require__(/*! core-js/modules/es.string.iterator.js */ "./node_modules/core-js/modules/es.string.iterator.js"); +__webpack_require__(/*! core-js/modules/web.dom-collections.iterator.js */ "./node_modules/core-js/modules/web.dom-collections.iterator.js"); +__webpack_require__(/*! core-js/modules/es.array.map.js */ "./node_modules/core-js/modules/es.array.map.js"); +var __decorate = this && this.__decorate || function (decorators, target, key, desc) { var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; if ((typeof Reflect === "undefined" ? "undefined" : _typeof(Reflect)) === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; return c > 3 && r && Object.defineProperty(target, key, r), r; }; -var __metadata = undefined && undefined.__metadata || function (k, v) { +var __metadata = this && this.__metadata || function (k, v) { if ((typeof Reflect === "undefined" ? "undefined" : _typeof(Reflect)) === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); }; -var __awaiter = undefined && undefined.__awaiter || function (thisArg, _arguments, P, generator) { +var __awaiter = this && this.__awaiter || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); @@ -6950,7 +7532,7 @@ var __awaiter = undefined && undefined.__awaiter || function (thisArg, _argument step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; -var __generator = undefined && undefined.__generator || function (thisArg, body) { +var __generator = this && this.__generator || function (thisArg, body) { var _ = { label: 0, sent: function sent() { @@ -7038,10 +7620,17 @@ var __generator = undefined && undefined.__generator || function (thisArg, body) }; } }; - - - - +var __importDefault = this && this.__importDefault || function (mod) { + return mod && mod.__esModule ? mod : { + "default": mod + }; +}; +exports.__esModule = true; +exports.ShippingService = void 0; +var tsyringe_1 = __webpack_require__(/*! tsyringe */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/tsyringe/dist/esm5/index.js"); +var token_1 = __webpack_require__(/*! ./token */ "./var/plugins/System/PSC/Invoice/Webpack/src/services/token.ts"); +var axios_1 = __importDefault(__webpack_require__(/*! axios */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/axios/dist/browser/axios.cjs")); +var shipping_1 = __webpack_require__(/*! ../model/shipping */ "./var/plugins/System/PSC/Invoice/Webpack/src/model/shipping.ts"); var ShippingService = /** @class */function () { function ShippingService(token) { this.token = token; @@ -7052,13 +7641,13 @@ var ShippingService = /** @class */function () { return __generator(this, function (_b) { switch (_b.label) { case 0: - return [4 /*yield*/, axios__WEBPACK_IMPORTED_MODULE_14__["default"].get('/apps/api/shipping/by/shop/' + shop.uuid, { + return [4 /*yield*/, axios_1["default"].get('/apps/api/shipping/by/shop/' + shop.uuid, { headers: { 'Authorization': 'Bearer ' + ((_a = this.token) === null || _a === void 0 ? void 0 : _a.currentToken) } }).then(function (response) { return response.data.data.map(function (item) { - var shipment = new _model_shipping__WEBPACK_IMPORTED_MODULE_13__.Shipping(); + var shipment = new shipping_1.Shipping(); shipment.uid = item.uid; shipment.title = item.title; shipment.uuid = item.uuid; @@ -7071,10 +7660,10 @@ var ShippingService = /** @class */function () { }); }); }; - ShippingService = __decorate([(0,tsyringe__WEBPACK_IMPORTED_MODULE_11__.singleton)(), (0,tsyringe__WEBPACK_IMPORTED_MODULE_11__.autoInjectable)(), __metadata("design:paramtypes", [_token__WEBPACK_IMPORTED_MODULE_12__.Token])], ShippingService); + ShippingService = __decorate([(0, tsyringe_1.singleton)(), (0, tsyringe_1.autoInjectable)(), __metadata("design:paramtypes", [token_1.Token])], ShippingService); return ShippingService; }(); - +exports.ShippingService = ShippingService; /***/ }), @@ -7082,61 +7671,33 @@ var ShippingService = /** @class */function () { /*!*********************************************************************!*\ !*** ./var/plugins/System/PSC/Invoice/Webpack/src/services/shop.ts ***! \*********************************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + + -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "ShopService": () => (/* binding */ ShopService) -/* harmony export */ }); -/* harmony import */ var core_js_modules_es_object_get_own_property_descriptor_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.object.get-own-property-descriptor.js */ "./node_modules/core-js/modules/es.object.get-own-property-descriptor.js"); -/* harmony import */ var core_js_modules_es_object_get_own_property_descriptor_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_object_get_own_property_descriptor_js__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var core_js_modules_es_object_to_string_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es.object.to-string.js */ "./node_modules/core-js/modules/es.object.to-string.js"); -/* harmony import */ var core_js_modules_es_object_to_string_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_object_to_string_js__WEBPACK_IMPORTED_MODULE_1__); -/* harmony import */ var core_js_modules_es_object_define_property_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! core-js/modules/es.object.define-property.js */ "./node_modules/core-js/modules/es.object.define-property.js"); -/* harmony import */ var core_js_modules_es_object_define_property_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_object_define_property_js__WEBPACK_IMPORTED_MODULE_2__); -/* harmony import */ var core_js_modules_es_promise_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! core-js/modules/es.promise.js */ "./node_modules/core-js/modules/es.promise.js"); -/* harmony import */ var core_js_modules_es_promise_js__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_promise_js__WEBPACK_IMPORTED_MODULE_3__); -/* harmony import */ var core_js_modules_es_symbol_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! core-js/modules/es.symbol.js */ "./node_modules/core-js/modules/es.symbol.js"); -/* harmony import */ var core_js_modules_es_symbol_js__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_symbol_js__WEBPACK_IMPORTED_MODULE_4__); -/* harmony import */ var core_js_modules_es_symbol_description_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! core-js/modules/es.symbol.description.js */ "./node_modules/core-js/modules/es.symbol.description.js"); -/* harmony import */ var core_js_modules_es_symbol_description_js__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_symbol_description_js__WEBPACK_IMPORTED_MODULE_5__); -/* harmony import */ var core_js_modules_es_symbol_iterator_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! core-js/modules/es.symbol.iterator.js */ "./node_modules/core-js/modules/es.symbol.iterator.js"); -/* harmony import */ var core_js_modules_es_symbol_iterator_js__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_symbol_iterator_js__WEBPACK_IMPORTED_MODULE_6__); -/* harmony import */ var core_js_modules_es_array_iterator_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! core-js/modules/es.array.iterator.js */ "./node_modules/core-js/modules/es.array.iterator.js"); -/* harmony import */ var core_js_modules_es_array_iterator_js__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_iterator_js__WEBPACK_IMPORTED_MODULE_7__); -/* harmony import */ var core_js_modules_es_string_iterator_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! core-js/modules/es.string.iterator.js */ "./node_modules/core-js/modules/es.string.iterator.js"); -/* harmony import */ var core_js_modules_es_string_iterator_js__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_iterator_js__WEBPACK_IMPORTED_MODULE_8__); -/* harmony import */ var core_js_modules_web_dom_collections_iterator_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! core-js/modules/web.dom-collections.iterator.js */ "./node_modules/core-js/modules/web.dom-collections.iterator.js"); -/* harmony import */ var core_js_modules_web_dom_collections_iterator_js__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_web_dom_collections_iterator_js__WEBPACK_IMPORTED_MODULE_9__); -/* harmony import */ var core_js_modules_es_array_map_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! core-js/modules/es.array.map.js */ "./node_modules/core-js/modules/es.array.map.js"); -/* harmony import */ var core_js_modules_es_array_map_js__WEBPACK_IMPORTED_MODULE_10___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_map_js__WEBPACK_IMPORTED_MODULE_10__); -/* harmony import */ var tsyringe__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! tsyringe */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/tsyringe/dist/esm5/index.js"); -/* harmony import */ var _token__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./token */ "./var/plugins/System/PSC/Invoice/Webpack/src/services/token.ts"); -/* harmony import */ var axios__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! axios */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/axios/lib/axios.js"); -/* harmony import */ var _model_shop__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../model/shop */ "./var/plugins/System/PSC/Invoice/Webpack/src/model/shop.ts"); function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); } - - - - - - - - - - - -var __decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) { +__webpack_require__(/*! core-js/modules/es.object.get-own-property-descriptor.js */ "./node_modules/core-js/modules/es.object.get-own-property-descriptor.js"); +__webpack_require__(/*! core-js/modules/es.object.to-string.js */ "./node_modules/core-js/modules/es.object.to-string.js"); +__webpack_require__(/*! core-js/modules/es.object.define-property.js */ "./node_modules/core-js/modules/es.object.define-property.js"); +__webpack_require__(/*! core-js/modules/es.promise.js */ "./node_modules/core-js/modules/es.promise.js"); +__webpack_require__(/*! core-js/modules/es.symbol.js */ "./node_modules/core-js/modules/es.symbol.js"); +__webpack_require__(/*! core-js/modules/es.symbol.description.js */ "./node_modules/core-js/modules/es.symbol.description.js"); +__webpack_require__(/*! core-js/modules/es.symbol.iterator.js */ "./node_modules/core-js/modules/es.symbol.iterator.js"); +__webpack_require__(/*! core-js/modules/es.array.iterator.js */ "./node_modules/core-js/modules/es.array.iterator.js"); +__webpack_require__(/*! core-js/modules/es.string.iterator.js */ "./node_modules/core-js/modules/es.string.iterator.js"); +__webpack_require__(/*! core-js/modules/web.dom-collections.iterator.js */ "./node_modules/core-js/modules/web.dom-collections.iterator.js"); +__webpack_require__(/*! core-js/modules/es.array.map.js */ "./node_modules/core-js/modules/es.array.map.js"); +var __decorate = this && this.__decorate || function (decorators, target, key, desc) { var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; if ((typeof Reflect === "undefined" ? "undefined" : _typeof(Reflect)) === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; return c > 3 && r && Object.defineProperty(target, key, r), r; }; -var __metadata = undefined && undefined.__metadata || function (k, v) { +var __metadata = this && this.__metadata || function (k, v) { if ((typeof Reflect === "undefined" ? "undefined" : _typeof(Reflect)) === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); }; -var __awaiter = undefined && undefined.__awaiter || function (thisArg, _arguments, P, generator) { +var __awaiter = this && this.__awaiter || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); @@ -7163,7 +7724,7 @@ var __awaiter = undefined && undefined.__awaiter || function (thisArg, _argument step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; -var __generator = undefined && undefined.__generator || function (thisArg, body) { +var __generator = this && this.__generator || function (thisArg, body) { var _ = { label: 0, sent: function sent() { @@ -7251,10 +7812,17 @@ var __generator = undefined && undefined.__generator || function (thisArg, body) }; } }; - - - - +var __importDefault = this && this.__importDefault || function (mod) { + return mod && mod.__esModule ? mod : { + "default": mod + }; +}; +exports.__esModule = true; +exports.ShopService = void 0; +var tsyringe_1 = __webpack_require__(/*! tsyringe */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/tsyringe/dist/esm5/index.js"); +var token_1 = __webpack_require__(/*! ./token */ "./var/plugins/System/PSC/Invoice/Webpack/src/services/token.ts"); +var axios_1 = __importDefault(__webpack_require__(/*! axios */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/axios/dist/browser/axios.cjs")); +var shop_1 = __webpack_require__(/*! ../model/shop */ "./var/plugins/System/PSC/Invoice/Webpack/src/model/shop.ts"); var ShopService = /** @class */function () { function ShopService(token) { this.token = token; @@ -7265,13 +7833,13 @@ var ShopService = /** @class */function () { switch (_a.label) { case 0: console.log(this.token); - return [4 /*yield*/, axios__WEBPACK_IMPORTED_MODULE_14__["default"].get('/apps/api/shops', { + return [4 /*yield*/, axios_1["default"].get('/apps/api/shops', { headers: { 'Authorization': 'Bearer ' + this.token.currentToken } }).then(function (response) { return response.data.data.map(function (item) { - var shop = new _model_shop__WEBPACK_IMPORTED_MODULE_13__.Shop(); + var shop = new shop_1.Shop(); shop.parseFromJson({ shop: item }); @@ -7284,10 +7852,10 @@ var ShopService = /** @class */function () { }); }); }; - ShopService = __decorate([(0,tsyringe__WEBPACK_IMPORTED_MODULE_11__.singleton)(), (0,tsyringe__WEBPACK_IMPORTED_MODULE_11__.autoInjectable)(), __metadata("design:paramtypes", [_token__WEBPACK_IMPORTED_MODULE_12__.Token])], ShopService); + ShopService = __decorate([(0, tsyringe_1.singleton)(), (0, tsyringe_1.autoInjectable)(), __metadata("design:paramtypes", [token_1.Token])], ShopService); return ShopService; }(); - +exports.ShopService = ShopService; /***/ }), @@ -7295,54 +7863,37 @@ var ShopService = /** @class */function () { /*!**********************************************************************!*\ !*** ./var/plugins/System/PSC/Invoice/Webpack/src/services/token.ts ***! \**********************************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + + -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "Token": () => (/* binding */ Token) -/* harmony export */ }); -/* harmony import */ var core_js_modules_es_object_get_own_property_descriptor_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.object.get-own-property-descriptor.js */ "./node_modules/core-js/modules/es.object.get-own-property-descriptor.js"); -/* harmony import */ var core_js_modules_es_object_get_own_property_descriptor_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_object_get_own_property_descriptor_js__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var core_js_modules_es_object_to_string_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es.object.to-string.js */ "./node_modules/core-js/modules/es.object.to-string.js"); -/* harmony import */ var core_js_modules_es_object_to_string_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_object_to_string_js__WEBPACK_IMPORTED_MODULE_1__); -/* harmony import */ var core_js_modules_es_object_define_property_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! core-js/modules/es.object.define-property.js */ "./node_modules/core-js/modules/es.object.define-property.js"); -/* harmony import */ var core_js_modules_es_object_define_property_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_object_define_property_js__WEBPACK_IMPORTED_MODULE_2__); -/* harmony import */ var core_js_modules_web_timers_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! core-js/modules/web.timers.js */ "./node_modules/core-js/modules/web.timers.js"); -/* harmony import */ var core_js_modules_web_timers_js__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_web_timers_js__WEBPACK_IMPORTED_MODULE_3__); -/* harmony import */ var core_js_modules_es_symbol_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! core-js/modules/es.symbol.js */ "./node_modules/core-js/modules/es.symbol.js"); -/* harmony import */ var core_js_modules_es_symbol_js__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_symbol_js__WEBPACK_IMPORTED_MODULE_4__); -/* harmony import */ var core_js_modules_es_symbol_description_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! core-js/modules/es.symbol.description.js */ "./node_modules/core-js/modules/es.symbol.description.js"); -/* harmony import */ var core_js_modules_es_symbol_description_js__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_symbol_description_js__WEBPACK_IMPORTED_MODULE_5__); -/* harmony import */ var core_js_modules_es_symbol_iterator_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! core-js/modules/es.symbol.iterator.js */ "./node_modules/core-js/modules/es.symbol.iterator.js"); -/* harmony import */ var core_js_modules_es_symbol_iterator_js__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_symbol_iterator_js__WEBPACK_IMPORTED_MODULE_6__); -/* harmony import */ var core_js_modules_es_array_iterator_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! core-js/modules/es.array.iterator.js */ "./node_modules/core-js/modules/es.array.iterator.js"); -/* harmony import */ var core_js_modules_es_array_iterator_js__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_iterator_js__WEBPACK_IMPORTED_MODULE_7__); -/* harmony import */ var core_js_modules_es_string_iterator_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! core-js/modules/es.string.iterator.js */ "./node_modules/core-js/modules/es.string.iterator.js"); -/* harmony import */ var core_js_modules_es_string_iterator_js__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_iterator_js__WEBPACK_IMPORTED_MODULE_8__); -/* harmony import */ var core_js_modules_web_dom_collections_iterator_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! core-js/modules/web.dom-collections.iterator.js */ "./node_modules/core-js/modules/web.dom-collections.iterator.js"); -/* harmony import */ var core_js_modules_web_dom_collections_iterator_js__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_web_dom_collections_iterator_js__WEBPACK_IMPORTED_MODULE_9__); -/* harmony import */ var axios__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! axios */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/axios/lib/axios.js"); -/* harmony import */ var tsyringe__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! tsyringe */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/tsyringe/dist/esm5/index.js"); function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); } - - - - - - - - - - -var __decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) { +__webpack_require__(/*! core-js/modules/es.object.get-own-property-descriptor.js */ "./node_modules/core-js/modules/es.object.get-own-property-descriptor.js"); +__webpack_require__(/*! core-js/modules/es.object.to-string.js */ "./node_modules/core-js/modules/es.object.to-string.js"); +__webpack_require__(/*! core-js/modules/es.object.define-property.js */ "./node_modules/core-js/modules/es.object.define-property.js"); +__webpack_require__(/*! core-js/modules/web.timers.js */ "./node_modules/core-js/modules/web.timers.js"); +__webpack_require__(/*! core-js/modules/es.symbol.js */ "./node_modules/core-js/modules/es.symbol.js"); +__webpack_require__(/*! core-js/modules/es.symbol.description.js */ "./node_modules/core-js/modules/es.symbol.description.js"); +__webpack_require__(/*! core-js/modules/es.symbol.iterator.js */ "./node_modules/core-js/modules/es.symbol.iterator.js"); +__webpack_require__(/*! core-js/modules/es.array.iterator.js */ "./node_modules/core-js/modules/es.array.iterator.js"); +__webpack_require__(/*! core-js/modules/es.string.iterator.js */ "./node_modules/core-js/modules/es.string.iterator.js"); +__webpack_require__(/*! core-js/modules/web.dom-collections.iterator.js */ "./node_modules/core-js/modules/web.dom-collections.iterator.js"); +var __decorate = this && this.__decorate || function (decorators, target, key, desc) { var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; if ((typeof Reflect === "undefined" ? "undefined" : _typeof(Reflect)) === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; return c > 3 && r && Object.defineProperty(target, key, r), r; }; - - +var __importDefault = this && this.__importDefault || function (mod) { + return mod && mod.__esModule ? mod : { + "default": mod + }; +}; +exports.__esModule = true; +exports.Token = void 0; +var axios_1 = __importDefault(__webpack_require__(/*! axios */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/axios/dist/browser/axios.cjs")); +var tsyringe_1 = __webpack_require__(/*! tsyringe */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/tsyringe/dist/esm5/index.js"); var Token = /** @class */function () { function Token() {} Token.prototype.init = function () { @@ -7353,7 +7904,7 @@ var Token = /** @class */function () { }; Token.prototype.refreshToken = function () { var _this = this; - axios__WEBPACK_IMPORTED_MODULE_11__["default"].get('/apps/api/contact/refresh', { + axios_1["default"].get('/apps/api/contact/refresh', { headers: { 'Authorization': 'Bearer ' + this.currentToken } @@ -7361,10 +7912,10 @@ var Token = /** @class */function () { _this.currentToken = response.data.token; }); }; - Token = __decorate([(0,tsyringe__WEBPACK_IMPORTED_MODULE_10__.singleton)()], Token); + Token = __decorate([(0, tsyringe_1.singleton)()], Token); return Token; }(); - +exports.Token = Token; /***/ }), @@ -7372,62 +7923,39 @@ var Token = /** @class */function () { /*!*******************************************************************!*\ !*** ./var/plugins/System/PSC/Invoice/Webpack/src/state/order.ts ***! \*******************************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + + -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "OrderState": () => (/* binding */ OrderState) -/* harmony export */ }); -/* harmony import */ var core_js_modules_es_object_get_own_property_descriptor_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.object.get-own-property-descriptor.js */ "./node_modules/core-js/modules/es.object.get-own-property-descriptor.js"); -/* harmony import */ var core_js_modules_es_object_get_own_property_descriptor_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_object_get_own_property_descriptor_js__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var core_js_modules_es_object_to_string_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es.object.to-string.js */ "./node_modules/core-js/modules/es.object.to-string.js"); -/* harmony import */ var core_js_modules_es_object_to_string_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_object_to_string_js__WEBPACK_IMPORTED_MODULE_1__); -/* harmony import */ var core_js_modules_es_object_define_property_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! core-js/modules/es.object.define-property.js */ "./node_modules/core-js/modules/es.object.define-property.js"); -/* harmony import */ var core_js_modules_es_object_define_property_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_object_define_property_js__WEBPACK_IMPORTED_MODULE_2__); -/* harmony import */ var core_js_modules_es_array_map_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! core-js/modules/es.array.map.js */ "./node_modules/core-js/modules/es.array.map.js"); -/* harmony import */ var core_js_modules_es_array_map_js__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_map_js__WEBPACK_IMPORTED_MODULE_3__); -/* harmony import */ var core_js_modules_es_symbol_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! core-js/modules/es.symbol.js */ "./node_modules/core-js/modules/es.symbol.js"); -/* harmony import */ var core_js_modules_es_symbol_js__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_symbol_js__WEBPACK_IMPORTED_MODULE_4__); -/* harmony import */ var core_js_modules_es_symbol_description_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! core-js/modules/es.symbol.description.js */ "./node_modules/core-js/modules/es.symbol.description.js"); -/* harmony import */ var core_js_modules_es_symbol_description_js__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_symbol_description_js__WEBPACK_IMPORTED_MODULE_5__); -/* harmony import */ var core_js_modules_es_symbol_iterator_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! core-js/modules/es.symbol.iterator.js */ "./node_modules/core-js/modules/es.symbol.iterator.js"); -/* harmony import */ var core_js_modules_es_symbol_iterator_js__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_symbol_iterator_js__WEBPACK_IMPORTED_MODULE_6__); -/* harmony import */ var core_js_modules_es_array_iterator_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! core-js/modules/es.array.iterator.js */ "./node_modules/core-js/modules/es.array.iterator.js"); -/* harmony import */ var core_js_modules_es_array_iterator_js__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_iterator_js__WEBPACK_IMPORTED_MODULE_7__); -/* harmony import */ var core_js_modules_es_string_iterator_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! core-js/modules/es.string.iterator.js */ "./node_modules/core-js/modules/es.string.iterator.js"); -/* harmony import */ var core_js_modules_es_string_iterator_js__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_iterator_js__WEBPACK_IMPORTED_MODULE_8__); -/* harmony import */ var core_js_modules_web_dom_collections_iterator_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! core-js/modules/web.dom-collections.iterator.js */ "./node_modules/core-js/modules/web.dom-collections.iterator.js"); -/* harmony import */ var core_js_modules_web_dom_collections_iterator_js__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_web_dom_collections_iterator_js__WEBPACK_IMPORTED_MODULE_9__); -/* harmony import */ var tsyringe__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! tsyringe */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/tsyringe/dist/esm5/index.js"); -/* harmony import */ var _model_order__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../model/order */ "./var/plugins/System/PSC/Invoice/Webpack/src/model/order.ts"); -/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! rxjs */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/rxjs/dist/esm5/internal/BehaviorSubject.js"); function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); } - - - - - - - - - - -var __decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) { +__webpack_require__(/*! core-js/modules/es.object.get-own-property-descriptor.js */ "./node_modules/core-js/modules/es.object.get-own-property-descriptor.js"); +__webpack_require__(/*! core-js/modules/es.object.to-string.js */ "./node_modules/core-js/modules/es.object.to-string.js"); +__webpack_require__(/*! core-js/modules/es.object.define-property.js */ "./node_modules/core-js/modules/es.object.define-property.js"); +__webpack_require__(/*! core-js/modules/es.array.map.js */ "./node_modules/core-js/modules/es.array.map.js"); +__webpack_require__(/*! core-js/modules/es.symbol.js */ "./node_modules/core-js/modules/es.symbol.js"); +__webpack_require__(/*! core-js/modules/es.symbol.description.js */ "./node_modules/core-js/modules/es.symbol.description.js"); +__webpack_require__(/*! core-js/modules/es.symbol.iterator.js */ "./node_modules/core-js/modules/es.symbol.iterator.js"); +__webpack_require__(/*! core-js/modules/es.array.iterator.js */ "./node_modules/core-js/modules/es.array.iterator.js"); +__webpack_require__(/*! core-js/modules/es.string.iterator.js */ "./node_modules/core-js/modules/es.string.iterator.js"); +__webpack_require__(/*! core-js/modules/web.dom-collections.iterator.js */ "./node_modules/core-js/modules/web.dom-collections.iterator.js"); +var __decorate = this && this.__decorate || function (decorators, target, key, desc) { var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; if ((typeof Reflect === "undefined" ? "undefined" : _typeof(Reflect)) === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; return c > 3 && r && Object.defineProperty(target, key, r), r; }; -var __metadata = undefined && undefined.__metadata || function (k, v) { +var __metadata = this && this.__metadata || function (k, v) { if ((typeof Reflect === "undefined" ? "undefined" : _typeof(Reflect)) === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); }; - - - +exports.__esModule = true; +exports.OrderState = void 0; +var tsyringe_1 = __webpack_require__(/*! tsyringe */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/tsyringe/dist/esm5/index.js"); +var order_1 = __webpack_require__(/*! ../model/order */ "./var/plugins/System/PSC/Invoice/Webpack/src/model/order.ts"); +var rxjs_1 = __webpack_require__(/*! rxjs */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/rxjs/dist/cjs/index.js"); var OrderState = /** @class */function () { function OrderState() { - this.currentOrder = new rxjs__WEBPACK_IMPORTED_MODULE_12__.BehaviorSubject(new _model_order__WEBPACK_IMPORTED_MODULE_11__.Order()); + this.currentOrder = new rxjs_1.BehaviorSubject(new order_1.Order()); } OrderState.prototype.getCurrentOrder = function () { return this.currentOrder; @@ -7443,10 +7971,10 @@ var OrderState = /** @class */function () { OrderState.prototype.updateOrder = function (order) { this.orders.push(order); }; - OrderState = __decorate([(0,tsyringe__WEBPACK_IMPORTED_MODULE_10__.singleton)(), __metadata("design:paramtypes", [])], OrderState); + OrderState = __decorate([(0, tsyringe_1.singleton)(), __metadata("design:paramtypes", [])], OrderState); return OrderState; }(); - +exports.OrderState = OrderState; /***/ }), @@ -7465,8 +7993,8 @@ __webpack_require__.r(__webpack_exports__); }, /******/ __webpack_require__ => { // webpackRuntimeModules /******/ var __webpack_exec__ = (moduleId) => (__webpack_require__(__webpack_require__.s = moduleId)) -/******/ __webpack_require__.O(0, ["vendors-node_modules_core-js_modules_es_array_concat_js-node_modules_core-js_modules_es_array-fb37e9","vendors-var_plugins_System_PSC_Invoice_Webpack_node_modules_ebay_nice-modal-react_lib_esm_ind-ced46e"], () => (__webpack_exec__("./var/plugins/System/PSC/Invoice/Webpack/index.ts"))); +/******/ __webpack_require__.O(0, ["vendors-node_modules_core-js_modules_es_array_concat_js-node_modules_core-js_modules_es_array-fb37e9","vendors-var_plugins_System_PSC_Invoice_Webpack_node_modules_ebay_nice-modal-react_lib_esm_ind-73e7df"], () => (__webpack_exec__("./var/plugins/System/PSC/Invoice/Webpack/index.ts"))); /******/ var __webpack_exports__ = __webpack_require__.O(); /******/ } ]); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,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O0FDakNKIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vdmFyL3BsdWdpbnMvU3lzdGVtL1BTQy9JbnZvaWNlL1dlYnBhY2svaW5kZXgudHMiLCJ3ZWJwYWNrOi8vLy4vdmFyL3BsdWdpbnMvU3lzdGVtL1BTQy9JbnZvaWNlL1dlYnBhY2svc3JjL2FwcC9hcHAudHN4Iiwid2VicGFjazovLy8uL3Zhci9wbHVnaW5zL1N5c3RlbS9QU0MvSW52b2ljZS9XZWJwYWNrL3NyYy9tb2RlbC9hY2NvdW50LnRzIiwid2VicGFjazovLy8uL3Zhci9wbHVnaW5zL1N5c3RlbS9QU0MvSW52b2ljZS9XZWJwYWNrL3NyYy9tb2RlbC9hZGRyZXNzLnRzIiwid2VicGFjazovLy8uL3Zhci9wbHVnaW5zL1N5c3RlbS9QU0MvSW52b2ljZS9XZWJwYWNrL3NyYy9tb2RlbC9jb250YWN0LnRzIiwid2VicGFjazovLy8uL3Zhci9wbHVnaW5zL1N5c3RlbS9QU0MvSW52b2ljZS9XZWJwYWNrL3NyYy9tb2RlbC9jb3VudHJ5LnRzIiwid2VicGFjazovLy8uL3Zhci9wbHVnaW5zL1N5c3RlbS9QU0MvSW52b2ljZS9XZWJwYWNrL3NyYy9tb2RlbC9vcmRlci50cyIsIndlYnBhY2s6Ly8vLi92YXIvcGx1Z2lucy9TeXN0ZW0vUFNDL0ludm9pY2UvV2VicGFjay9zcmMvbW9kZWwvcGF5bWVudC50cyIsIndlYnBhY2s6Ly8vLi92YXIvcGx1Z2lucy9TeXN0ZW0vUFNDL0ludm9pY2UvV2VicGFjay9zcmMvbW9kZWwvcG9zLnRzIiwid2VicGFjazovLy8uL3Zhci9wbHVnaW5zL1N5c3RlbS9QU0MvSW52b2ljZS9XZWJwYWNrL3NyYy9tb2RlbC9wcmljZS50cyIsIndlYnBhY2s6Ly8vLi92YXIvcGx1Z2lucy9TeXN0ZW0vUFNDL0ludm9pY2UvV2VicGFjay9zcmMvbW9kZWwvcHJvZHVjdC50cyIsIndlYnBhY2s6Ly8vLi92YXIvcGx1Z2lucy9TeXN0ZW0vUFNDL0ludm9pY2UvV2VicGFjay9zcmMvbW9kZWwvcHJvZHVjdEdyb3VwLnRzIiwid2VicGFjazovLy8uL3Zhci9wbHVnaW5zL1N5c3RlbS9QU0MvSW52b2ljZS9XZWJwYWNrL3NyYy9tb2RlbC9zaGlwcGluZy50cyIsIndlYnBhY2s6Ly8vLi92YXIvcGx1Z2lucy9TeXN0ZW0vUFNDL0ludm9pY2UvV2VicGFjay9zcmMvbW9kZWwvc2hvcC50cyIsIndlYnBhY2s6Ly8vLi92YXIvcGx1Z2lucy9TeXN0ZW0vUFNDL0ludm9pY2UvV2VicGFjay9zcmMvbW9kdWxlcy9hY2NvdW50L0FjY291bnRTZWxlY3RDb21wb25lbnQudHN4Iiwid2VicGFjazovLy8uL3Zhci9wbHVnaW5zL1N5c3RlbS9QU0MvSW52b2ljZS9XZWJwYWNrL3NyYy9tb2R1bGVzL2Jhc2UvQmFzZUNvbXBvbmVudC50c3giLCJ3ZWJwYWNrOi8vLy4vdmFyL3BsdWdpbnMvU3lzdGVtL1BTQy9JbnZvaWNlL1dlYnBhY2svc3JjL21vZHVsZXMvYmFzZS9CdXR0b24udHN4Iiwid2VicGFjazovLy8uL3Zhci9wbHVnaW5zL1N5c3RlbS9QU0MvSW52b2ljZS9XZWJwYWNrL3NyYy9tb2R1bGVzL2Jhc2UvQ3VycmVuY3kudHN4Iiwid2VicGFjazovLy8uL3Zhci9wbHVnaW5zL1N5c3RlbS9QU0MvSW52b2ljZS9XZWJwYWNrL3NyYy9tb2R1bGVzL2Jhc2UvU2VsZWN0TGFiZWwudHN4Iiwid2VicGFjazovLy8uL3Zhci9wbHVnaW5zL1N5c3RlbS9QU0MvSW52b2ljZS9XZWJwYWNrL3NyYy9tb2R1bGVzL2J1dHRvbi9CdXR0b25Db21wb25lbnQudHN4Iiwid2VicGFjazovLy8uL3Zhci9wbHVnaW5zL1N5c3RlbS9QU0MvSW52b2ljZS9XZWJwYWNrL3NyYy9tb2R1bGVzL2NhbGMvQ2FsY0NvbXBvbmVudC50c3giLCJ3ZWJwYWNrOi8vLy4vdmFyL3BsdWdpbnMvU3lzdGVtL1BTQy9JbnZvaWNlL1dlYnBhY2svc3JjL21vZHVsZXMvY29udGFjdC9BZGRyZXNzRGV0YWlsLnRzeCIsIndlYnBhY2s6Ly8vLi92YXIvcGx1Z2lucy9TeXN0ZW0vUFNDL0ludm9pY2UvV2VicGFjay9zcmMvbW9kdWxlcy9jb250YWN0L0FkZHJlc3NNb2RhbC50c3giLCJ3ZWJwYWNrOi8vLy4vdmFyL3BsdWdpbnMvU3lzdGVtL1BTQy9JbnZvaWNlL1dlYnBhY2svc3JjL21vZHVsZXMvY29udGFjdC9BZGRyZXNzTW9kYWxDb21wb25lbnQudHN4Iiwid2VicGFjazovLy8uL3Zhci9wbHVnaW5zL1N5c3RlbS9QU0MvSW52b2ljZS9XZWJwYWNrL3NyYy9tb2R1bGVzL2NvbnRhY3QvQWRkcmVzc1NlbGVjdC50c3giLCJ3ZWJwYWNrOi8vLy4vdmFyL3BsdWdpbnMvU3lzdGVtL1BTQy9JbnZvaWNlL1dlYnBhY2svc3JjL21vZHVsZXMvY29udGFjdC9Db250YWN0Q29tcG9uZW50LnRzeCIsIndlYnBhY2s6Ly8vLi92YXIvcGx1Z2lucy9TeXN0ZW0vUFNDL0ludm9pY2UvV2VicGFjay9zcmMvbW9kdWxlcy9jb250YWN0L0NvbnRhY3RNb2RhbC50c3giLCJ3ZWJwYWNrOi8vLy4vdmFyL3BsdWdpbnMvU3lzdGVtL1BTQy9JbnZvaWNlL1dlYnBhY2svc3JjL21vZHVsZXMvY29udGFjdC9Db250YWN0TW9kYWxDb21wb25lbnQudHN4Iiwid2VicGFjazovLy8uL3Zhci9wbHVnaW5zL1N5c3RlbS9QU0MvSW52b2ljZS9XZWJwYWNrL3NyYy9tb2R1bGVzL2NvbnRhY3QvQ29udGFjdFNlbGVjdC50c3giLCJ3ZWJwYWNrOi8vLy4vdmFyL3BsdWdpbnMvU3lzdGVtL1BTQy9JbnZvaWNlL1dlYnBhY2svc3JjL21vZHVsZXMvZHJhZnQvRHJhZnRDb21wb25lbnQudHN4Iiwid2VicGFjazovLy8uL3Zhci9wbHVnaW5zL1N5c3RlbS9QU0MvSW52b2ljZS9XZWJwYWNrL3NyYy9tb2R1bGVzL2luZm8vSW5mb0ZpZWxkQ29tcG9uZW50LnRzeCIsIndlYnBhY2s6Ly8vLi92YXIvcGx1Z2lucy9TeXN0ZW0vUFNDL0ludm9pY2UvV2VicGFjay9zcmMvbW9kdWxlcy9vcmRlci9PcmRlckFsaWFzQ29tcG9uZW50LnRzeCIsIndlYnBhY2s6Ly8vLi92YXIvcGx1Z2lucy9TeXN0ZW0vUFNDL0ludm9pY2UvV2VicGFjay9zcmMvbW9kdWxlcy9wYXltZW50L1BheW1lbnRDb21wb25lbnQudHN4Iiwid2VicGFjazovLy8uL3Zhci9wbHVnaW5zL1N5c3RlbS9QU0MvSW52b2ljZS9XZWJwYWNrL3NyYy9tb2R1bGVzL3Bvc2l0aW9ucy9BZGRQb3NpdGlvbkNvbXBvbmVudC50c3giLCJ3ZWJwYWNrOi8vLy4vdmFyL3BsdWdpbnMvU3lzdGVtL1BTQy9JbnZvaWNlL1dlYnBhY2svc3JjL21vZHVsZXMvcG9zaXRpb25zL0VkaXRQb3NpdGlvbkNvbXBvbmVudC50c3giLCJ3ZWJwYWNrOi8vLy4vdmFyL3BsdWdpbnMvU3lzdGVtL1BTQy9JbnZvaWNlL1dlYnBhY2svc3JjL21vZHVsZXMvcG9zaXRpb25zL0l0ZW1zQ29tcG9uZW50LnRzeCIsIndlYnBhY2s6Ly8vLi92YXIvcGx1Z2lucy9TeXN0ZW0vUFNDL0ludm9pY2UvV2VicGFjay9zcmMvbW9kdWxlcy9wb3NpdGlvbnMvUG9zQ29tcG9uZW50LnRzeCIsIndlYnBhY2s6Ly8vLi92YXIvcGx1Z2lucy9TeXN0ZW0vUFNDL0ludm9pY2UvV2VicGFjay9zcmMvbW9kdWxlcy9wb3NpdGlvbnMvUG9zaXRpb25zQ29tcG9uZW50LnRzeCIsIndlYnBhY2s6Ly8vLi92YXIvcGx1Z2lucy9TeXN0ZW0vUFNDL0ludm9pY2UvV2VicGFjay9zcmMvbW9kdWxlcy9wcm9kdWN0L1Byb2R1Y3RGb3JtLnRzeCIsIndlYnBhY2s6Ly8vLi92YXIvcGx1Z2lucy9TeXN0ZW0vUFNDL0ludm9pY2UvV2VicGFjay9zcmMvbW9kdWxlcy9wcm9kdWN0L1Byb2R1Y3RHcm91cFNlbGVjdC50c3giLCJ3ZWJwYWNrOi8vLy4vdmFyL3BsdWdpbnMvU3lzdGVtL1BTQy9JbnZvaWNlL1dlYnBhY2svc3JjL21vZHVsZXMvcHJvZHVjdC9Qcm9kdWN0U2VsZWN0LnRzeCIsIndlYnBhY2s6Ly8vLi92YXIvcGx1Z2lucy9TeXN0ZW0vUFNDL0ludm9pY2UvV2VicGFjay9zcmMvbW9kdWxlcy9zaGlwcGluZy9TaGlwcGluZ0NvbXBvbmVudC50c3giLCJ3ZWJwYWNrOi8vLy4vdmFyL3BsdWdpbnMvU3lzdGVtL1BTQy9JbnZvaWNlL1dlYnBhY2svc3JjL21vZHVsZXMvc2hvcC9TaG9wU2VsZWN0Q29tcG9uZW50LnRzeCIsIndlYnBhY2s6Ly8vLi92YXIvcGx1Z2lucy9TeXN0ZW0vUFNDL0ludm9pY2UvV2VicGFjay9zcmMvbW9kdWxlcy90b3BiYXIvVG9wQmFyQ29tcG9uZW50LnRzeCIsIndlYnBhY2s6Ly8vLi92YXIvcGx1Z2lucy9TeXN0ZW0vUFNDL0ludm9pY2UvV2VicGFjay9zcmMvbW9kdWxlcy90eXBlL1R5cGVTZWxlY3RDb21wb25lbnQudHN4Iiwid2VicGFjazovLy8uL3Zhci9wbHVnaW5zL1N5c3RlbS9QU0MvSW52b2ljZS9XZWJwYWNrL3NyYy9zZXJ2aWNlcy9hY2NvdW50LnRzIiwid2VicGFjazovLy8uL3Zhci9wbHVnaW5zL1N5c3RlbS9QU0MvSW52b2ljZS9XZWJwYWNrL3NyYy9zZXJ2aWNlcy9hZGRyZXNzLnRzIiwid2VicGFjazovLy8uL3Zhci9wbHVnaW5zL1N5c3RlbS9QU0MvSW52b2ljZS9XZWJwYWNrL3NyYy9zZXJ2aWNlcy9jb250YWN0LnRzIiwid2VicGFjazovLy8uL3Zhci9wbHVnaW5zL1N5c3RlbS9QU0MvSW52b2ljZS9XZWJwYWNrL3NyYy9zZXJ2aWNlcy9jb3VudHJ5LnRzIiwid2VicGFjazovLy8uL3Zhci9wbHVnaW5zL1N5c3RlbS9QU0MvSW52b2ljZS9XZWJwYWNrL3NyYy9zZXJ2aWNlcy9vcmRlci50cyIsIndlYnBhY2s6Ly8vLi92YXIvcGx1Z2lucy9TeXN0ZW0vUFNDL0ludm9pY2UvV2VicGFjay9zcmMvc2VydmljZXMvcGF5bWVudC50cyIsIndlYnBhY2s6Ly8vLi92YXIvcGx1Z2lucy9TeXN0ZW0vUFNDL0ludm9pY2UvV2VicGFjay9zcmMvc2VydmljZXMvcHJvZHVjdC50cyIsIndlYnBhY2s6Ly8vLi92YXIvcGx1Z2lucy9TeXN0ZW0vUFNDL0ludm9pY2UvV2VicGFjay9zcmMvc2VydmljZXMvcHJvZHVjdGdyb3VwLnRzIiwid2VicGFjazovLy8uL3Zhci9wbHVnaW5zL1N5c3RlbS9QU0MvSW52b2ljZS9XZWJwYWNrL3NyYy9zZXJ2aWNlcy9zaGlwcGluZy50cyIsIndlYnBhY2s6Ly8vLi92YXIvcGx1Z2lucy9TeXN0ZW0vUFNDL0ludm9pY2UvV2VicGFjay9zcmMvc2VydmljZXMvc2hvcC50cyIsIndlYnBhY2s6Ly8vLi92YXIvcGx1Z2lucy9TeXN0ZW0vUFNDL0ludm9pY2UvV2VicGFjay9zcmMvc2VydmljZXMvdG9rZW4udHMiLCJ3ZWJwYWNrOi8vLy4vdmFyL3BsdWdpbnMvU3lzdGVtL1BTQy9JbnZvaWNlL1dlYnBhY2svc3JjL3N0YXRlL29yZGVyLnRzIiwid2VicGFjazovLy8uL3Zhci9wbHVnaW5zL1N5c3RlbS9QU0MvSW52b2ljZS9XZWJwYWNrL3NyYy9jc3Mvb3V0cHV0LmNzcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXCJyZWZsZWN0LW1ldGFkYXRhXCI7XG4vL2ltcG9ydCAnLi9zcmMvY3NzL3N0eWxlLnNjc3MnXG5pbXBvcnQgJy4vc3JjL2Nzcy9vdXRwdXQuY3NzJztcbmltcG9ydCB7IEFwcCB9IGZyb20gXCIuL3NyYy9hcHAvYXBwXCI7XG52YXIgYXBwID0gbmV3IEFwcChqd3RfdG9rZW4pO1xuYXBwLmluaXQoKTtcbmFwcC5ydW4oKTtcbiIsImltcG9ydCB7IFRva2VuIH0gZnJvbSAnLi4vc2VydmljZXMvdG9rZW4nO1xuaW1wb3J0IHsgY29udGFpbmVyIH0gZnJvbSBcInRzeXJpbmdlXCI7XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFJlYWN0RE9NIGZyb20gJ3JlYWN0LWRvbS9jbGllbnQnO1xuaW1wb3J0IE5pY2VNb2RhbCBmcm9tIFwiQGViYXkvbmljZS1tb2RhbC1yZWFjdFwiO1xuaW1wb3J0IEJhc2VDb21wb25lbnQgZnJvbSAnLi4vbW9kdWxlcy9iYXNlL0Jhc2VDb21wb25lbnQnO1xuaW1wb3J0IHsgUm91dGUsIEhhc2hSb3V0ZXIgYXMgUm91dGVyLCBSb3V0ZXMgfSBmcm9tIFwicmVhY3Qtcm91dGVyLWRvbVwiO1xudmFyIEFwcCA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBBcHAoand0KSB7XG4gICAgICAgIHZhciB0b2tlbiA9IGNvbnRhaW5lci5yZXNvbHZlKFRva2VuKTtcbiAgICAgICAgY29uc29sZS5sb2coand0KTtcbiAgICAgICAgdG9rZW4uY3VycmVudFRva2VuID0gand0O1xuICAgICAgICB0b2tlbi5pbml0KCk7XG4gICAgfVxuICAgIEFwcC5wcm90b3R5cGUuaW5pdCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5idWlsZFVpKCk7XG4gICAgfTtcbiAgICBBcHAucHJvdG90eXBlLmJ1aWxkVWkgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciByb290ID0gUmVhY3RET00uY3JlYXRlUm9vdChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncm9vdCcpKTtcbiAgICAgICAgcm9vdC5yZW5kZXIoUmVhY3QuY3JlYXRlRWxlbWVudChOaWNlTW9kYWwuUHJvdmlkZXIsIG51bGwsXG4gICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFJvdXRlciwgbnVsbCxcbiAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFJvdXRlcywgbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChSb3V0ZSwgeyBwYXRoOiBcIi9cIiwgZWxlbWVudDogUmVhY3QuY3JlYXRlRWxlbWVudChCYXNlQ29tcG9uZW50LCBudWxsKSB9KSxcbiAgICAgICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChSb3V0ZSwgeyBwYXRoOiBcIi86dXVpZFwiLCBlbGVtZW50OiBSZWFjdC5jcmVhdGVFbGVtZW50KEJhc2VDb21wb25lbnQsIG51bGwpIH0pKSkpKTtcbiAgICB9O1xuICAgIEFwcC5wcm90b3R5cGUucnVuID0gZnVuY3Rpb24gKCkge1xuICAgIH07XG4gICAgcmV0dXJuIEFwcDtcbn0oKSk7XG5leHBvcnQgeyBBcHAgfTtcbiIsInZhciBBY2NvdW50ID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIEFjY291bnQoKSB7XG4gICAgICAgIHRoaXMudWlkID0gMDtcbiAgICAgICAgdGhpcy51dWlkID0gXCJcIjtcbiAgICAgICAgdGhpcy5hcHBlbmRpeCA9IFwiXCI7XG4gICAgICAgIHRoaXMudGl0bGUgPSBcIlwiO1xuICAgIH1cbiAgICBBY2NvdW50LnByb3RvdHlwZS5wYXJzZUZyb21Kc29uID0gZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgICAgdGhpcy51aWQgPSBpdGVtLmFjY291bnQudWlkO1xuICAgICAgICB0aGlzLnV1aWQgPSBpdGVtLmFjY291bnQudXVpZDtcbiAgICAgICAgdGhpcy50aXRsZSA9IGl0ZW0uYWNjb3VudC50aXRsZTtcbiAgICAgICAgdGhpcy5hcHBlbmRpeCA9IGl0ZW0uYWNjb3VudC5hcHBlbmRpeDtcbiAgICB9O1xuICAgIHJldHVybiBBY2NvdW50O1xufSgpKTtcbmV4cG9ydCB7IEFjY291bnQgfTtcbiIsImltcG9ydCB7IENvbnRhY3QgfSBmcm9tIFwiLi9jb250YWN0XCI7XG52YXIgQWRkcmVzcyA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBBZGRyZXNzKCkge1xuICAgICAgICB0aGlzLnVpZCA9IDA7XG4gICAgICAgIHRoaXMudXVpZCA9IFwiXCI7XG4gICAgICAgIHRoaXMuZmlyc3RuYW1lID0gXCJcIjtcbiAgICAgICAgdGhpcy5sYXN0bmFtZSA9IFwiXCI7XG4gICAgICAgIHRoaXMuc3RyZWV0ID0gXCJcIjtcbiAgICAgICAgdGhpcy5ob3VzZU51bWJlciA9IFwiXCI7XG4gICAgICAgIHRoaXMuemlwID0gXCJcIjtcbiAgICAgICAgdGhpcy5jb21wYW55ID0gXCJcIjtcbiAgICAgICAgdGhpcy5jb21wYW55MiA9IFwiXCI7XG4gICAgICAgIHRoaXMuY2l0eSA9IFwiXCI7XG4gICAgICAgIHRoaXMuZW1haWwgPSBcIlwiO1xuICAgICAgICB0aGlzLmNvdW50cnkgPSBcIlwiO1xuICAgICAgICB0aGlzLnVzdGlkID0gXCJcIjtcbiAgICAgICAgdGhpcy5jb250YWN0ID0gbmV3IENvbnRhY3QoKTtcbiAgICAgICAgdGhpcy50eXBlID0gMDtcbiAgICB9XG4gICAgQWRkcmVzcy5wcm90b3R5cGUucGFyc2VGcm9tSnNvbiA9IGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICAgIHRoaXMudWlkID0gaXRlbS51aWQ7XG4gICAgICAgIHRoaXMudXVpZCA9IGl0ZW0udXVpZDtcbiAgICAgICAgdGhpcy5maXJzdG5hbWUgPSBpdGVtLmZpcnN0bmFtZTtcbiAgICAgICAgdGhpcy5sYXN0bmFtZSA9IGl0ZW0ubGFzdG5hbWU7XG4gICAgICAgIHRoaXMuc3RyZWV0ID0gaXRlbS5zdHJlZXQ7XG4gICAgICAgIHRoaXMuaG91c2VOdW1iZXIgPSBpdGVtLmhvdXNlTnVtYmVyO1xuICAgICAgICB0aGlzLnppcCA9IGl0ZW0uemlwO1xuICAgICAgICB0aGlzLmNvbXBhbnkgPSBpdGVtLmNvbXBhbnk7XG4gICAgICAgIHRoaXMuY29tcGFueTIgPSBpdGVtLmNvbXBhbnkyO1xuICAgICAgICB0aGlzLnBob25lID0gaXRlbS5waG9uZTtcbiAgICAgICAgdGhpcy5jaXR5ID0gaXRlbS5jaXR5O1xuICAgICAgICB0aGlzLmVtYWlsID0gaXRlbS5lbWFpbDtcbiAgICAgICAgdGhpcy50eXBlID0gaXRlbS50eXBlO1xuICAgICAgICB0aGlzLmNvdW50cnkgPSBpdGVtLmNvdW50cnk7XG4gICAgICAgIHRoaXMudXN0aWQgPSBpdGVtLnVzdGlkO1xuICAgIH07XG4gICAgQWRkcmVzcy5wcm90b3R5cGUucGFyc2VGcm9tRm9ybURhdGEgPSBmdW5jdGlvbiAoZm9ybWRhdGEpIHtcbiAgICAgICAgdGhpcy5lbWFpbCA9IGZvcm1kYXRhLmVtYWlsO1xuICAgICAgICB0aGlzLmNvbXBhbnkgPSBmb3JtZGF0YS5jb21wYW55O1xuICAgICAgICB0aGlzLmZpcnN0bmFtZSA9IGZvcm1kYXRhLmZpcnN0bmFtZTtcbiAgICAgICAgdGhpcy5sYXN0bmFtZSA9IGZvcm1kYXRhLmxhc3RuYW1lO1xuICAgICAgICB0aGlzLnN0cmVldCA9IGZvcm1kYXRhLnN0cmVldDtcbiAgICAgICAgdGhpcy5ob3VzZU51bWJlciA9IGZvcm1kYXRhLmhvdXNlTnVtYmVyO1xuICAgICAgICB0aGlzLnppcCA9IGZvcm1kYXRhLnppcDtcbiAgICAgICAgdGhpcy5jaXR5ID0gZm9ybWRhdGEuY2l0eTtcbiAgICAgICAgdGhpcy5waG9uZSA9IGZvcm1kYXRhLnBob25lO1xuICAgICAgICB0aGlzLmNvdW50cnkgPSBmb3JtZGF0YS5jb3VudHJ5O1xuICAgICAgICB0aGlzLnVzdGlkID0gZm9ybWRhdGEudXN0aWQ7XG4gICAgfTtcbiAgICByZXR1cm4gQWRkcmVzcztcbn0oKSk7XG5leHBvcnQgeyBBZGRyZXNzIH07XG4iLCJ2YXIgTGF5b3V0ZXJEYXRhID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIExheW91dGVyRGF0YSgpIHtcbiAgICAgICAgdGhpcy5maXJzdG5hbWUgPSBcIlwiO1xuICAgICAgICB0aGlzLmNvbXBhbnkgPSBcIlwiO1xuICAgICAgICB0aGlzLmxhc3RuYW1lID0gXCJcIjtcbiAgICAgICAgdGhpcy5zdHJlZXQgPSBcIlwiO1xuICAgICAgICB0aGlzLmhvdXNlTnVtYmVyID0gXCJcIjtcbiAgICAgICAgdGhpcy56aXAgPSBcIlwiO1xuICAgICAgICB0aGlzLmNpdHkgPSBcIlwiO1xuICAgICAgICB0aGlzLnBob25lID0gXCJcIjtcbiAgICAgICAgdGhpcy5jb3VudHJ5ID0gXCJcIjtcbiAgICAgICAgdGhpcy51c3RpZCA9IFwiXCI7XG4gICAgfVxuICAgIHJldHVybiBMYXlvdXRlckRhdGE7XG59KCkpO1xuZXhwb3J0IHsgTGF5b3V0ZXJEYXRhIH07XG52YXIgQ29udGFjdCA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBDb250YWN0KCkge1xuICAgICAgICB0aGlzLnVpZCA9IDA7XG4gICAgICAgIHRoaXMudXVpZCA9IFwiXCI7XG4gICAgICAgIHRoaXMudXNlcm5hbWUgPSBcIlwiO1xuICAgICAgICB0aGlzLmVtYWlsID0gXCJcIjtcbiAgICAgICAgdGhpcy5wYXNzd29yZCA9IFwiXCI7XG4gICAgICAgIHRoaXMuc2hvcHMgPSBbXTtcbiAgICAgICAgdGhpcy5sYXlvdXRlcl9kYXRhID0gbmV3IExheW91dGVyRGF0YSgpO1xuICAgIH1cbiAgICBDb250YWN0LnByb3RvdHlwZS5wYXJzZUZyb21Kc29uID0gZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgICAgdGhpcy51aWQgPSBpdGVtLmNvbnRhY3QudWlkO1xuICAgICAgICB0aGlzLnV1aWQgPSBpdGVtLmNvbnRhY3QudXVpZDtcbiAgICAgICAgdGhpcy5lbWFpbCA9IGl0ZW0uY29udGFjdC5lbWFpbDtcbiAgICAgICAgdGhpcy51c2VybmFtZSA9IGl0ZW0uY29udGFjdC51c2VybmFtZTtcbiAgICAgICAgdGhpcy5sYXlvdXRlcl9kYXRhLmZpcnN0bmFtZSA9IGl0ZW0uY29udGFjdC5sYXlvdXRlcl9kYXRhLmZpcnN0bmFtZTtcbiAgICAgICAgdGhpcy5sYXlvdXRlcl9kYXRhLmNvbXBhbnkgPSBpdGVtLmNvbnRhY3QubGF5b3V0ZXJfZGF0YS5jb21wYW55O1xuICAgICAgICB0aGlzLmxheW91dGVyX2RhdGEubGFzdG5hbWUgPSBpdGVtLmNvbnRhY3QubGF5b3V0ZXJfZGF0YS5sYXN0bmFtZTtcbiAgICAgICAgdGhpcy5sYXlvdXRlcl9kYXRhLnN0cmVldCA9IGl0ZW0uY29udGFjdC5sYXlvdXRlcl9kYXRhLnN0cmVldDtcbiAgICAgICAgdGhpcy5sYXlvdXRlcl9kYXRhLmhvdXNlTnVtYmVyID0gaXRlbS5jb250YWN0LmxheW91dGVyX2RhdGEuaG91c2VOdW1iZXI7XG4gICAgICAgIHRoaXMubGF5b3V0ZXJfZGF0YS56aXAgPSBpdGVtLmNvbnRhY3QubGF5b3V0ZXJfZGF0YS56aXA7XG4gICAgICAgIHRoaXMubGF5b3V0ZXJfZGF0YS5jaXR5ID0gaXRlbS5jb250YWN0LmxheW91dGVyX2RhdGEuY2l0eTtcbiAgICAgICAgdGhpcy5sYXlvdXRlcl9kYXRhLnBob25lID0gaXRlbS5jb250YWN0LmxheW91dGVyX2RhdGEucGhvbmU7XG4gICAgICAgIHRoaXMubGF5b3V0ZXJfZGF0YS5jb3VudHJ5ID0gaXRlbS5jb250YWN0LmxheW91dGVyX2RhdGEuY291bnRyeTtcbiAgICAgICAgdGhpcy5sYXlvdXRlcl9kYXRhLnVzdGlkID0gaXRlbS5jb250YWN0LmxheW91dGVyX2RhdGEudXN0aWQ7XG4gICAgfTtcbiAgICBDb250YWN0LnByb3RvdHlwZS5wYXJzZUZyb21Gb3JtRGF0YSA9IGZ1bmN0aW9uIChmb3JtZGF0YSwgc2hvcCkge1xuICAgICAgICBpZiAoc2hvcCA9PT0gdm9pZCAwKSB7IHNob3AgPSBudWxsOyB9XG4gICAgICAgIHRoaXMuZW1haWwgPSBmb3JtZGF0YS5lbWFpbDtcbiAgICAgICAgdGhpcy5sYXlvdXRlcl9kYXRhLmNvbXBhbnkgPSBmb3JtZGF0YS5jb21wYW55O1xuICAgICAgICB0aGlzLmxheW91dGVyX2RhdGEuZmlyc3RuYW1lID0gZm9ybWRhdGEuZmlyc3RuYW1lO1xuICAgICAgICB0aGlzLmxheW91dGVyX2RhdGEubGFzdG5hbWUgPSBmb3JtZGF0YS5sYXN0bmFtZTtcbiAgICAgICAgdGhpcy5sYXlvdXRlcl9kYXRhLnN0cmVldCA9IGZvcm1kYXRhLnN0cmVldDtcbiAgICAgICAgdGhpcy5sYXlvdXRlcl9kYXRhLmhvdXNlTnVtYmVyID0gZm9ybWRhdGEuaG91c2VOdW1iZXI7XG4gICAgICAgIHRoaXMubGF5b3V0ZXJfZGF0YS56aXAgPSBmb3JtZGF0YS56aXA7XG4gICAgICAgIHRoaXMubGF5b3V0ZXJfZGF0YS5jaXR5ID0gZm9ybWRhdGEuY2l0eTtcbiAgICAgICAgdGhpcy5sYXlvdXRlcl9kYXRhLnBob25lID0gZm9ybWRhdGEucGhvbmU7XG4gICAgICAgIHRoaXMubGF5b3V0ZXJfZGF0YS5jb3VudHJ5ID0gZm9ybWRhdGEuY291bnRyeTtcbiAgICAgICAgdGhpcy5sYXlvdXRlcl9kYXRhLnVzdGlkID0gZm9ybWRhdGEudXN0aWQ7XG4gICAgICAgIGlmIChzaG9wKSB7XG4gICAgICAgICAgICB0aGlzLnNob3BzLnB1c2goc2hvcCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiBDb250YWN0O1xufSgpKTtcbmV4cG9ydCB7IENvbnRhY3QgfTtcbiIsInZhciBDb3VudHJ5ID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIENvdW50cnkoKSB7XG4gICAgICAgIHRoaXMudXVpZCA9IFwiXCI7XG4gICAgICAgIHRoaXMudGl0bGUgPSBcIlwiO1xuICAgICAgICB0aGlzLmNvZGUgPSBcIlwiO1xuICAgICAgICB0aGlzLnVzZVZhdFdpdGhVc3RJZCA9IHRydWU7XG4gICAgICAgIHRoaXMudXNlVmF0V2l0aG91dFVzdElkID0gdHJ1ZTtcbiAgICB9XG4gICAgQ291bnRyeS5wcm90b3R5cGUucGFyc2VGcm9tSnNvbiA9IGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICAgIHRoaXMudXVpZCA9IGl0ZW0udXVpZDtcbiAgICAgICAgdGhpcy50aXRsZSA9IGl0ZW0udGl0bGU7XG4gICAgICAgIHRoaXMuY29kZSA9IGl0ZW0uY29kZTtcbiAgICAgICAgdGhpcy51c2VWYXRXaXRoVXN0SWQgPSBpdGVtLnVzZVZhdFdpdGhVc3RJZDtcbiAgICAgICAgdGhpcy51c2VWYXRXaXRob3V0VXN0SWQgPSBpdGVtLnVzZVZhdFdpdGhvdXRVc3RJZDtcbiAgICB9O1xuICAgIHJldHVybiBDb3VudHJ5O1xufSgpKTtcbmV4cG9ydCB7IENvdW50cnkgfTtcbiIsImltcG9ydCB7IHY0IGFzIHV1aWR2NCB9IGZyb20gJ3V1aWQnO1xuaW1wb3J0IHsgQ29udGFjdCB9IGZyb20gXCIuL2NvbnRhY3RcIjtcbmltcG9ydCB7IEFjY291bnQgfSBmcm9tIFwiLi9hY2NvdW50XCI7XG5pbXBvcnQgeyBBZGRyZXNzIH0gZnJvbSBcIi4vYWRkcmVzc1wiO1xuaW1wb3J0IHsgUG9zIH0gZnJvbSBcIi4vcG9zXCI7XG5pbXBvcnQgeyBQYXltZW50IH0gZnJvbSBcIi4vcGF5bWVudFwiO1xuaW1wb3J0IHsgU2hpcHBpbmcgfSBmcm9tIFwiLi9zaGlwcGluZ1wiO1xuaW1wb3J0IHsgU2hvcCB9IGZyb20gXCIuL3Nob3BcIjtcbnZhciBPcmRlciA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBPcmRlcigpIHtcbiAgICAgICAgdGhpcy5jb250YWN0ID0gbmV3IENvbnRhY3QoKTtcbiAgICAgICAgdGhpcy5hY2NvdW50ID0gbmV3IEFjY291bnQoKTtcbiAgICAgICAgdGhpcy5kZWxpdmVyeUFkZHJlc3MgPSBuZXcgQWRkcmVzcygpO1xuICAgICAgICB0aGlzLnNlbmRlckFkZHJlc3MgPSBuZXcgQWRkcmVzcygpO1xuICAgICAgICB0aGlzLmludm9pY2VBZGRyZXNzID0gbmV3IEFkZHJlc3MoKTtcbiAgICAgICAgdGhpcy5wb3NpdGlvbnMgPSBbXTtcbiAgICAgICAgdGhpcy5wYXltZW50ID0gbmV3IFBheW1lbnQoKTtcbiAgICAgICAgdGhpcy5zaGlwcGluZyA9IG5ldyBTaGlwcGluZygpO1xuICAgICAgICB0aGlzLnNob3AgPSBuZXcgU2hvcCgpO1xuICAgICAgICB0aGlzLnV1aWQgPSB1dWlkdjQoKTtcbiAgICAgICAgdGhpcy5iYXNrZXRGaWVsZDEgPSBcIlwiO1xuICAgICAgICB0aGlzLmJhc2tldEZpZWxkMiA9IFwiXCI7XG4gICAgICAgIHRoaXMuZHJhZnQgPSB0cnVlO1xuICAgICAgICB0aGlzLnNhdmVkID0gZmFsc2U7XG4gICAgfVxuICAgIE9yZGVyLnByb3RvdHlwZS5hZGRQb3NpdGlvbiA9IGZ1bmN0aW9uIChwb3MpIHtcbiAgICAgICAgdGhpcy5wb3NpdGlvbnMucHVzaChwb3MpO1xuICAgIH07XG4gICAgT3JkZXIucHJvdG90eXBlLnBhcnNlRnJvbUpzb24gPSBmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICB0aGlzLnNob3AucGFyc2VGcm9tSnNvbihpdGVtKTtcbiAgICAgICAgdGhpcy5jb250YWN0LnBhcnNlRnJvbUpzb24oaXRlbSk7XG4gICAgICAgIHRoaXMuYWNjb3VudC5wYXJzZUZyb21Kc29uKGl0ZW0pO1xuICAgICAgICB0aGlzLnNoaXBwaW5nLnBhcnNlRnJvbUpzb24oaXRlbSk7XG4gICAgICAgIHRoaXMucGF5bWVudC5wYXJzZUZyb21Kc29uKGl0ZW0pO1xuICAgICAgICB0aGlzLmludm9pY2VBZGRyZXNzLnBhcnNlRnJvbUpzb24oaXRlbS5pbnZvaWNlQWRkcmVzcyk7XG4gICAgICAgIHRoaXMuZGVsaXZlcnlBZGRyZXNzLnBhcnNlRnJvbUpzb24oaXRlbS5kZWxpdmVyeUFkZHJlc3MpO1xuICAgICAgICB0aGlzLnNlbmRlckFkZHJlc3MucGFyc2VGcm9tSnNvbihpdGVtLnNlbmRlckFkZHJlc3MpO1xuICAgICAgICB0aGlzLmFsaWFzID0gaXRlbS5hbGlhcztcbiAgICAgICAgdGhpcy51dWlkID0gaXRlbS51dWlkO1xuICAgICAgICB0aGlzLnR5cGUgPSBpdGVtLnR5cGU7XG4gICAgICAgIHRoaXMuZHJhZnQgPSBpdGVtLmRyYWZ0O1xuICAgICAgICB0aGlzLnNhdmVkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5iYXNrZXRGaWVsZDEgPSBpdGVtLmJhc2tldEZpZWxkMTtcbiAgICAgICAgdGhpcy5iYXNrZXRGaWVsZDIgPSBpdGVtLmJhc2tldEZpZWxkMjtcbiAgICAgICAgaXRlbS5wb3NpdGlvbnMubWFwKGZ1bmN0aW9uIChlKSB7XG4gICAgICAgICAgICB2YXIgcG9zID0gbmV3IFBvcygpO1xuICAgICAgICAgICAgcG9zLnBhcnNlRnJvbUpzb24oZSk7XG4gICAgICAgICAgICBfdGhpcy5wb3NpdGlvbnMucHVzaChwb3MpO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIHJldHVybiBPcmRlcjtcbn0oKSk7XG5leHBvcnQgeyBPcmRlciB9O1xuIiwidmFyIFBheW1lbnQgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gUGF5bWVudCgpIHtcbiAgICAgICAgdGhpcy51aWQgPSAwO1xuICAgICAgICB0aGlzLnRpdGxlID0gXCJcIjtcbiAgICAgICAgdGhpcy51dWlkID0gXCJcIjtcbiAgICB9XG4gICAgUGF5bWVudC5wcm90b3R5cGUucGFyc2VGcm9tSnNvbiA9IGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICAgIHRoaXMudWlkID0gaXRlbS5wYXltZW50LnVpZDtcbiAgICAgICAgdGhpcy50aXRsZSA9IGl0ZW0ucGF5bWVudC50aXRsZTtcbiAgICAgICAgdGhpcy51dWlkID0gU3RyaW5nKGl0ZW0ucGF5bWVudC51dWlkKTtcbiAgICB9O1xuICAgIHJldHVybiBQYXltZW50O1xufSgpKTtcbmV4cG9ydCB7IFBheW1lbnQgfTtcbiIsImltcG9ydCB7IHY0IGFzIHV1aWR2NCB9IGZyb20gJ3V1aWQnO1xuaW1wb3J0IHsgUHJvZHVjdCB9IGZyb20gXCIuL3Byb2R1Y3RcIjtcbmltcG9ydCB7IFByaWNlIH0gZnJvbSBcIi4vcHJpY2VcIjtcbnZhciBQb3MgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gUG9zKCkge1xuICAgICAgICB0aGlzLnV1aWQgPSBcIlwiO1xuICAgICAgICB0aGlzLnByb2R1Y3QgPSBuZXcgUHJvZHVjdCgpO1xuICAgICAgICB0aGlzLnN0YXR1cyA9IDEwO1xuICAgICAgICB0aGlzLmNvdW50ID0gMTtcbiAgICAgICAgdGhpcy5wcmljZSA9IG5ldyBQcmljZSgpO1xuICAgICAgICB0aGlzLnV1aWQgPSB1dWlkdjQoKTtcbiAgICB9XG4gICAgUG9zLnByb3RvdHlwZS5wYXJzZUZyb21Kc29uID0gZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgICAgdGhpcy5jb3VudCA9IGl0ZW0ucHJpY2UuY291bnQ7XG4gICAgICAgIHRoaXMuc3RhdHVzID0gaXRlbS5zdGF0dXM7XG4gICAgICAgIHRoaXMudXVpZCA9IGl0ZW0udXVpZDtcbiAgICAgICAgdGhpcy5wcmljZS5wYXJzZUZyb21Kc29uKGl0ZW0ucHJpY2UpO1xuICAgICAgICB0aGlzLnByb2R1Y3QucGFyc2VGcm9tSnNvbihpdGVtLnByb2R1Y3QpO1xuICAgIH07XG4gICAgcmV0dXJuIFBvcztcbn0oKSk7XG5leHBvcnQgeyBQb3MgfTtcbiIsInZhciBQcmljZSA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBQcmljZSgpIHtcbiAgICAgICAgdGhpcy5uZXQgPSAwO1xuICAgICAgICB0aGlzLnZhdCA9IDA7XG4gICAgICAgIHRoaXMuZ3Jvc3MgPSAwO1xuICAgICAgICB0aGlzLmFsbE5ldCA9IDA7XG4gICAgICAgIHRoaXMuYWxsVmF0ID0gMDtcbiAgICAgICAgdGhpcy5hbGxHcm9zcyA9IDA7XG4gICAgfVxuICAgIFByaWNlLnByb3RvdHlwZS5wYXJzZUZyb21Kc29uID0gZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgICAgdGhpcy5uZXQgPSBpdGVtLm5ldDtcbiAgICAgICAgdGhpcy52YXQgPSBpdGVtLnZhdDtcbiAgICAgICAgdGhpcy5ncm9zcyA9IGl0ZW0uZ3Jvc3M7XG4gICAgICAgIHRoaXMuYWxsTmV0ID0gaXRlbS5hbGxOZXQ7XG4gICAgICAgIHRoaXMuYWxsVmF0ID0gaXRlbS5hbGxWYXQ7XG4gICAgICAgIHRoaXMuYWxsR3Jvc3MgPSBpdGVtLmFsbEdyb3NzO1xuICAgIH07XG4gICAgcmV0dXJuIFByaWNlO1xufSgpKTtcbmV4cG9ydCB7IFByaWNlIH07XG4iLCJ2YXIgU3BlY2lhbFByb2R1Y3RUeXBlT2JqZWN0ID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIFNwZWNpYWxQcm9kdWN0VHlwZU9iamVjdCgpIHtcbiAgICAgICAgdGhpcy5wYXJhbXMgPSBbXTtcbiAgICAgICAgdGhpcy50eXAgPSAwO1xuICAgIH1cbiAgICBTcGVjaWFsUHJvZHVjdFR5cGVPYmplY3QucHJvdG90eXBlLnBhcnNlRnJvbUpzb24gPSBmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgICB0aGlzLnR5cCA9IGl0ZW0udHlwO1xuICAgICAgICB0aGlzLnBhcmFtcyA9IGl0ZW0ucGFyYW1zO1xuICAgIH07XG4gICAgcmV0dXJuIFNwZWNpYWxQcm9kdWN0VHlwZU9iamVjdDtcbn0oKSk7XG5leHBvcnQgeyBTcGVjaWFsUHJvZHVjdFR5cGVPYmplY3QgfTtcbnZhciBQcm9kdWN0ID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIFByb2R1Y3QoKSB7XG4gICAgICAgIHRoaXMuaWQgPSAwO1xuICAgICAgICB0aGlzLnRpdGxlID0gXCJcIjtcbiAgICAgICAgdGhpcy51dWlkID0gXCJcIjtcbiAgICAgICAgdGhpcy5zcGVjaWFsUHJvZHVjdFR5cGVPYmplY3QgPSBuZXcgU3BlY2lhbFByb2R1Y3RUeXBlT2JqZWN0KCk7XG4gICAgfVxuICAgIFByb2R1Y3QucHJvdG90eXBlLnBhcnNlRnJvbUpzb24gPSBmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgICB0aGlzLmlkID0gaXRlbS5pZDtcbiAgICAgICAgdGhpcy50aXRsZSA9IGl0ZW0udGl0bGU7XG4gICAgICAgIHRoaXMudXVpZCA9IGl0ZW0udXVpZDtcbiAgICAgICAgdGhpcy5zcGVjaWFsUHJvZHVjdFR5cGVPYmplY3QucGFyc2VGcm9tSnNvbihpdGVtLnNwZWNpYWxQcm9kdWN0VHlwZU9iamVjdCk7XG4gICAgfTtcbiAgICByZXR1cm4gUHJvZHVjdDtcbn0oKSk7XG5leHBvcnQgeyBQcm9kdWN0IH07XG4iLCJ2YXIgUHJvZHVjdEdyb3VwID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIFByb2R1Y3RHcm91cCgpIHtcbiAgICAgICAgdGhpcy5pZCA9IDA7XG4gICAgICAgIHRoaXMubGFiZWwgPSBcIlwiO1xuICAgICAgICB0aGlzLnV1aWQgPSBcIlwiO1xuICAgICAgICAvL29wdGlvbnM6IFByb2R1Y3RHcm91cFtdID0gW11cbiAgICB9XG4gICAgcmV0dXJuIFByb2R1Y3RHcm91cDtcbn0oKSk7XG5leHBvcnQgeyBQcm9kdWN0R3JvdXAgfTtcbiIsInZhciBTaGlwcGluZyA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBTaGlwcGluZygpIHtcbiAgICAgICAgdGhpcy51aWQgPSAwO1xuICAgICAgICB0aGlzLnRpdGxlID0gXCJcIjtcbiAgICAgICAgdGhpcy51dWlkID0gXCJcIjtcbiAgICB9XG4gICAgU2hpcHBpbmcucHJvdG90eXBlLnBhcnNlRnJvbUpzb24gPSBmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgICB0aGlzLnVpZCA9IGl0ZW0uc2hpcHBpbmcudWlkO1xuICAgICAgICB0aGlzLnRpdGxlID0gaXRlbS5zaGlwcGluZy50aXRsZTtcbiAgICAgICAgdGhpcy51dWlkID0gU3RyaW5nKGl0ZW0uc2hpcHBpbmcudXVpZCk7XG4gICAgfTtcbiAgICByZXR1cm4gU2hpcHBpbmc7XG59KCkpO1xuZXhwb3J0IHsgU2hpcHBpbmcgfTtcbiIsInZhciBTaG9wID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIFNob3AoKSB7XG4gICAgICAgIHRoaXMuaWQgPSAwO1xuICAgICAgICB0aGlzLm5hbWUgPSBcIlwiO1xuICAgICAgICB0aGlzLnV1aWQgPSBcIlwiO1xuICAgICAgICB0aGlzLmJhc2tldEZpZWxkMSA9IFwiXCI7XG4gICAgICAgIHRoaXMuYmFza2V0RmllbGQyID0gXCJcIjtcbiAgICAgICAgdGhpcy5iYXNrZXRQb3NGaWVsZDEgPSBcIlwiO1xuICAgICAgICB0aGlzLmJhc2tldFBvc0ZpZWxkMiA9IFwiXCI7XG4gICAgfVxuICAgIFNob3AucHJvdG90eXBlLnBhcnNlRnJvbUpzb24gPSBmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgICB0aGlzLmlkID0gaXRlbS5zaG9wLmlkO1xuICAgICAgICB0aGlzLm5hbWUgPSBpdGVtLnNob3AubmFtZTtcbiAgICAgICAgdGhpcy51dWlkID0gaXRlbS5zaG9wLnV1aWQ7XG4gICAgICAgIHRoaXMuYmFza2V0RmllbGQxID0gaXRlbS5zaG9wLmJhc2tldEZpZWxkMTtcbiAgICAgICAgdGhpcy5iYXNrZXRGaWVsZDIgPSBpdGVtLnNob3AuYmFza2V0RmllbGQyO1xuICAgICAgICB0aGlzLmJhc2tldFBvc0ZpZWxkMSA9IGl0ZW0uc2hvcC5iYXNrZXRQb3NGaWVsZDE7XG4gICAgICAgIHRoaXMuYmFza2V0UG9zRmllbGQyID0gaXRlbS5zaG9wLmJhc2tldFBvc0ZpZWxkMjtcbiAgICB9O1xuICAgIHJldHVybiBTaG9wO1xufSgpKTtcbmV4cG9ydCB7IFNob3AgfTtcbiIsInZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gICAgfSk7XG59O1xudmFyIF9fZ2VuZXJhdG9yID0gKHRoaXMgJiYgdGhpcy5fX2dlbmVyYXRvcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIGJvZHkpIHtcbiAgICB2YXIgXyA9IHsgbGFiZWw6IDAsIHNlbnQ6IGZ1bmN0aW9uKCkgeyBpZiAodFswXSAmIDEpIHRocm93IHRbMV07IHJldHVybiB0WzFdOyB9LCB0cnlzOiBbXSwgb3BzOiBbXSB9LCBmLCB5LCB0LCBnO1xuICAgIHJldHVybiBnID0geyBuZXh0OiB2ZXJiKDApLCBcInRocm93XCI6IHZlcmIoMSksIFwicmV0dXJuXCI6IHZlcmIoMikgfSwgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIChnW1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbigpIHsgcmV0dXJuIHRoaXM7IH0pLCBnO1xuICAgIGZ1bmN0aW9uIHZlcmIobikgeyByZXR1cm4gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIHN0ZXAoW24sIHZdKTsgfTsgfVxuICAgIGZ1bmN0aW9uIHN0ZXAob3ApIHtcbiAgICAgICAgaWYgKGYpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuXCIpO1xuICAgICAgICB3aGlsZSAoXykgdHJ5IHtcbiAgICAgICAgICAgIGlmIChmID0gMSwgeSAmJiAodCA9IG9wWzBdICYgMiA/IHlbXCJyZXR1cm5cIl0gOiBvcFswXSA/IHlbXCJ0aHJvd1wiXSB8fCAoKHQgPSB5W1wicmV0dXJuXCJdKSAmJiB0LmNhbGwoeSksIDApIDogeS5uZXh0KSAmJiAhKHQgPSB0LmNhbGwoeSwgb3BbMV0pKS5kb25lKSByZXR1cm4gdDtcbiAgICAgICAgICAgIGlmICh5ID0gMCwgdCkgb3AgPSBbb3BbMF0gJiAyLCB0LnZhbHVlXTtcbiAgICAgICAgICAgIHN3aXRjaCAob3BbMF0pIHtcbiAgICAgICAgICAgICAgICBjYXNlIDA6IGNhc2UgMTogdCA9IG9wOyBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIDQ6IF8ubGFiZWwrKzsgcmV0dXJuIHsgdmFsdWU6IG9wWzFdLCBkb25lOiBmYWxzZSB9O1xuICAgICAgICAgICAgICAgIGNhc2UgNTogXy5sYWJlbCsrOyB5ID0gb3BbMV07IG9wID0gWzBdOyBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBjYXNlIDc6IG9wID0gXy5vcHMucG9wKCk7IF8udHJ5cy5wb3AoKTsgY29udGludWU7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEodCA9IF8udHJ5cywgdCA9IHQubGVuZ3RoID4gMCAmJiB0W3QubGVuZ3RoIC0gMV0pICYmIChvcFswXSA9PT0gNiB8fCBvcFswXSA9PT0gMikpIHsgXyA9IDA7IGNvbnRpbnVlOyB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gMyAmJiAoIXQgfHwgKG9wWzFdID4gdFswXSAmJiBvcFsxXSA8IHRbM10pKSkgeyBfLmxhYmVsID0gb3BbMV07IGJyZWFrOyB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gNiAmJiBfLmxhYmVsIDwgdFsxXSkgeyBfLmxhYmVsID0gdFsxXTsgdCA9IG9wOyBicmVhazsgfVxuICAgICAgICAgICAgICAgICAgICBpZiAodCAmJiBfLmxhYmVsIDwgdFsyXSkgeyBfLmxhYmVsID0gdFsyXTsgXy5vcHMucHVzaChvcCk7IGJyZWFrOyB9XG4gICAgICAgICAgICAgICAgICAgIGlmICh0WzJdKSBfLm9wcy5wb3AoKTtcbiAgICAgICAgICAgICAgICAgICAgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG9wID0gYm9keS5jYWxsKHRoaXNBcmcsIF8pO1xuICAgICAgICB9IGNhdGNoIChlKSB7IG9wID0gWzYsIGVdOyB5ID0gMDsgfSBmaW5hbGx5IHsgZiA9IHQgPSAwOyB9XG4gICAgICAgIGlmIChvcFswXSAmIDUpIHRocm93IG9wWzFdOyByZXR1cm4geyB2YWx1ZTogb3BbMF0gPyBvcFsxXSA6IHZvaWQgMCwgZG9uZTogdHJ1ZSB9O1xuICAgIH1cbn07XG5pbXBvcnQgeyBBc3luY1BhZ2luYXRlIH0gZnJvbSBcInJlYWN0LXNlbGVjdC1hc3luYy1wYWdpbmF0ZVwiO1xuaW1wb3J0IHsgQWNjb3VudFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9hY2NvdW50JztcbmltcG9ydCB7IGNvbnRhaW5lciB9IGZyb20gJ3RzeXJpbmdlJztcbmltcG9ydCB7IE9yZGVyU3RhdGUgfSBmcm9tICcuLi8uLi9zdGF0ZS9vcmRlcic7XG5pbXBvcnQgeyB1c2VFZmZlY3QsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0ICogYXMgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IHsgU2hvcCB9IGZyb20gJy4uLy4uL21vZGVsL3Nob3AnO1xuaW1wb3J0IHsgT3JkZXIgfSBmcm9tIFwiLi4vLi4vbW9kZWwvb3JkZXJcIjtcbmltcG9ydCB7IFNlbGVjdExhYmVsIH0gZnJvbSBcIi4uL2Jhc2UvU2VsZWN0TGFiZWxcIjtcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG52YXIgQWNjb3VudFNlbGVjdENvbXBvbmVudCA9IGZ1bmN0aW9uIChfYSkge1xuICAgIHZhciBzaG9wID0gX2Euc2hvcCwgb3JkZXIgPSBfYS5vcmRlcjtcbiAgICB2YXIgX2IgPSB1c2VTdGF0ZShudWxsKSwgc2hvcFV1aWQgPSBfYlswXSwgc2V0U2hvcFV1aWQgPSBfYlsxXTtcbiAgICB2YXIgX2MgPSB1c2VTdGF0ZSgwKSwgYWNjb3VudCA9IF9jWzBdLCBzZXRBY2NvdW50ID0gX2NbMV07XG4gICAgdXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgc2V0U2hvcFV1aWQoc2hvcC51dWlkKTtcbiAgICB9LCBbc2hvcC51dWlkXSk7XG4gICAgdmFyIG9yZGVyU3RhdGUgPSBjb250YWluZXIucmVzb2x2ZShPcmRlclN0YXRlKTtcbiAgICB2YXIgbG9hZE9wdGlvbnMgPSBmdW5jdGlvbiAoc2VhcmNoUXVlcnksIGxvYWRlZE9wdGlvbnMpIHsgcmV0dXJuIF9fYXdhaXRlcih2b2lkIDAsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBhY2NvdW50X3NlcnZpY2UsIGRhdGE7XG4gICAgICAgIHJldHVybiBfX2dlbmVyYXRvcih0aGlzLCBmdW5jdGlvbiAoX2EpIHtcbiAgICAgICAgICAgIHN3aXRjaCAoX2EubGFiZWwpIHtcbiAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgICAgIGFjY291bnRfc2VydmljZSA9IG5ldyBBY2NvdW50U2VydmljZSgpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzQgLyp5aWVsZCovLCBhY2NvdW50X3NlcnZpY2UuZ2V0QWNjb3VudHMoc2hvcCldO1xuICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICAgICAgZGF0YSA9IF9hLnNlbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFsyIC8qcmV0dXJuKi8sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zOiBkYXRhLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc01vcmU6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgfV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0pOyB9O1xuICAgIHVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgICAgIHNldEFjY291bnQob3JkZXIuYWNjb3VudC51dWlkKTtcbiAgICB9LCBbb3JkZXIuYWNjb3VudF0pO1xuICAgIHZhciBvbkNoYW5nZSA9IGZ1bmN0aW9uIChvcHRpb24pIHtcbiAgICAgICAgb3JkZXIuYWNjb3VudCA9IG9wdGlvbjtcbiAgICAgICAgdmFyIG9yZGVyT2JqID0gb3JkZXJTdGF0ZS5nZXRDdXJyZW50T3JkZXIoKS5nZXRWYWx1ZSgpO1xuICAgICAgICBvcmRlck9iai5hY2NvdW50ID0gb3B0aW9uO1xuICAgICAgICBvcmRlclN0YXRlLnNldEN1cnJlbnRPcmRlcihvcmRlck9iaik7XG4gICAgICAgIHNldEFjY291bnQob3B0aW9uLnVpZCk7XG4gICAgfTtcbiAgICByZXR1cm4gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoQXN5bmNQYWdpbmF0ZSwgeyBkZWZhdWx0T3B0aW9uczogdHJ1ZSwgY2xhc3NOYW1lOiBcIlwiLmNvbmNhdChhY2NvdW50ID09IDAgPyBcImJvcmRlciBib3JkZXItZGFuZ2VyXCIgOiBcIlwiKSwga2V5OiBKU09OLnN0cmluZ2lmeShzaG9wVXVpZCksIGRlZmF1bHRWYWx1ZTogb3JkZXIuYWNjb3VudCwgY29tcG9uZW50czogeyBDb250cm9sOiBTZWxlY3RMYWJlbCB9LCBuYW1lOiAnRmlybWEnLCBsb2FkT3B0aW9uczogbG9hZE9wdGlvbnMsIHBsYWNlaG9sZGVyOiAnJywgZ2V0T3B0aW9uVmFsdWU6IGZ1bmN0aW9uIChvcHRpb24pIHsgcmV0dXJuIG9wdGlvbi51dWlkOyB9LCBnZXRPcHRpb25MYWJlbDogZnVuY3Rpb24gKG9wdGlvbikgeyByZXR1cm4gb3B0aW9uLnRpdGxlOyB9LCBvbkNoYW5nZTogb25DaGFuZ2UsIGlzU2VhcmNoYWJsZTogdHJ1ZSB9KSk7XG59O1xuQWNjb3VudFNlbGVjdENvbXBvbmVudC5wcm9wVHlwZXMgPSB7XG4gICAgc2hvcDogUHJvcFR5cGVzLmluc3RhbmNlT2YoU2hvcCksXG4gICAgb3JkZXI6IFByb3BUeXBlcy5pbnN0YW5jZU9mKE9yZGVyKSxcbn07XG5leHBvcnQgZGVmYXVsdCBBY2NvdW50U2VsZWN0Q29tcG9uZW50O1xuIiwidmFyIF9fYXdhaXRlciA9ICh0aGlzICYmIHRoaXMuX19hd2FpdGVyKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgICB9KTtcbn07XG52YXIgX19nZW5lcmF0b3IgPSAodGhpcyAmJiB0aGlzLl9fZ2VuZXJhdG9yKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgYm9keSkge1xuICAgIHZhciBfID0geyBsYWJlbDogMCwgc2VudDogZnVuY3Rpb24oKSB7IGlmICh0WzBdICYgMSkgdGhyb3cgdFsxXTsgcmV0dXJuIHRbMV07IH0sIHRyeXM6IFtdLCBvcHM6IFtdIH0sIGYsIHksIHQsIGc7XG4gICAgcmV0dXJuIGcgPSB7IG5leHQ6IHZlcmIoMCksIFwidGhyb3dcIjogdmVyYigxKSwgXCJyZXR1cm5cIjogdmVyYigyKSB9LCB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgKGdbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhpczsgfSksIGc7XG4gICAgZnVuY3Rpb24gdmVyYihuKSB7IHJldHVybiBmdW5jdGlvbiAodikgeyByZXR1cm4gc3RlcChbbiwgdl0pOyB9OyB9XG4gICAgZnVuY3Rpb24gc3RlcChvcCkge1xuICAgICAgICBpZiAoZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy5cIik7XG4gICAgICAgIHdoaWxlIChfKSB0cnkge1xuICAgICAgICAgICAgaWYgKGYgPSAxLCB5ICYmICh0ID0gb3BbMF0gJiAyID8geVtcInJldHVyblwiXSA6IG9wWzBdID8geVtcInRocm93XCJdIHx8ICgodCA9IHlbXCJyZXR1cm5cIl0pICYmIHQuY2FsbCh5KSwgMCkgOiB5Lm5leHQpICYmICEodCA9IHQuY2FsbCh5LCBvcFsxXSkpLmRvbmUpIHJldHVybiB0O1xuICAgICAgICAgICAgaWYgKHkgPSAwLCB0KSBvcCA9IFtvcFswXSAmIDIsIHQudmFsdWVdO1xuICAgICAgICAgICAgc3dpdGNoIChvcFswXSkge1xuICAgICAgICAgICAgICAgIGNhc2UgMDogY2FzZSAxOiB0ID0gb3A7IGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgNDogXy5sYWJlbCsrOyByZXR1cm4geyB2YWx1ZTogb3BbMV0sIGRvbmU6IGZhbHNlIH07XG4gICAgICAgICAgICAgICAgY2FzZSA1OiBfLmxhYmVsKys7IHkgPSBvcFsxXTsgb3AgPSBbMF07IGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGNhc2UgNzogb3AgPSBfLm9wcy5wb3AoKTsgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICBpZiAoISh0ID0gXy50cnlzLCB0ID0gdC5sZW5ndGggPiAwICYmIHRbdC5sZW5ndGggLSAxXSkgJiYgKG9wWzBdID09PSA2IHx8IG9wWzBdID09PSAyKSkgeyBfID0gMDsgY29udGludWU7IH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSAzICYmICghdCB8fCAob3BbMV0gPiB0WzBdICYmIG9wWzFdIDwgdFszXSkpKSB7IF8ubGFiZWwgPSBvcFsxXTsgYnJlYWs7IH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSA2ICYmIF8ubGFiZWwgPCB0WzFdKSB7IF8ubGFiZWwgPSB0WzFdOyB0ID0gb3A7IGJyZWFrOyB9XG4gICAgICAgICAgICAgICAgICAgIGlmICh0ICYmIF8ubGFiZWwgPCB0WzJdKSB7IF8ubGFiZWwgPSB0WzJdOyBfLm9wcy5wdXNoKG9wKTsgYnJlYWs7IH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHRbMl0pIF8ub3BzLnBvcCgpO1xuICAgICAgICAgICAgICAgICAgICBfLnRyeXMucG9wKCk7IGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgb3AgPSBib2R5LmNhbGwodGhpc0FyZywgXyk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHsgb3AgPSBbNiwgZV07IHkgPSAwOyB9IGZpbmFsbHkgeyBmID0gdCA9IDA7IH1cbiAgICAgICAgaWYgKG9wWzBdICYgNSkgdGhyb3cgb3BbMV07IHJldHVybiB7IHZhbHVlOiBvcFswXSA/IG9wWzFdIDogdm9pZCAwLCBkb25lOiB0cnVlIH07XG4gICAgfVxufTtcbmltcG9ydCB7IFNob3AgfSBmcm9tICcuLi8uLi9tb2RlbC9zaG9wJztcbmltcG9ydCBDb250YWN0Q29tcG9uZW50IGZyb20gJy4uL2NvbnRhY3QvQ29udGFjdENvbXBvbmVudCc7XG5pbXBvcnQgVG9wQmFyQ29tcG9uZW50IGZyb20gJy4uL3RvcGJhci9Ub3BCYXJDb21wb25lbnQnO1xuaW1wb3J0IFBvc2l0aW9uc0NvbXBvbmVudCBmcm9tICcuLi9wb3NpdGlvbnMvUG9zaXRpb25zQ29tcG9uZW50JztcbmltcG9ydCB7IHVzZUVmZmVjdCwgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBPcmRlciB9IGZyb20gXCIuLi8uLi9tb2RlbC9vcmRlclwiO1xuaW1wb3J0IFBheW1lbnRDb21wb25lbnQgZnJvbSBcIi4uL3BheW1lbnQvUGF5bWVudENvbXBvbmVudFwiO1xuaW1wb3J0IFNoaXBwaW5nQ29tcG9uZW50IGZyb20gXCIuLi9zaGlwcGluZy9TaGlwcGluZ0NvbXBvbmVudFwiO1xuaW1wb3J0IEJ1dHRvbkNvbXBvbmVudCBmcm9tIFwiLi4vYnV0dG9uL0J1dHRvbkNvbXBvbmVudFwiO1xuaW1wb3J0IHsgdXNlUGFyYW1zIH0gZnJvbSBcInJlYWN0LXJvdXRlci1kb21cIjtcbmltcG9ydCB7IGNvbnRhaW5lciB9IGZyb20gXCJ0c3lyaW5nZVwiO1xuaW1wb3J0IHsgT3JkZXJTdGF0ZSB9IGZyb20gXCIuLi8uLi9zdGF0ZS9vcmRlclwiO1xuaW1wb3J0IHsgT3JkZXJTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL29yZGVyXCI7XG5pbXBvcnQgSW5mb0ZpZWxkQ29tcG9uZW50IGZyb20gXCIuLi9pbmZvL0luZm9GaWVsZENvbXBvbmVudFwiO1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBPcmRlckFsaWFzQ29tcG9uZW50IGZyb20gJy4uL29yZGVyL09yZGVyQWxpYXNDb21wb25lbnQnO1xudmFyIEJhc2VDb21wb25lbnQgPSBmdW5jdGlvbiAocHJvcHMpIHtcbiAgICB2YXIgX2EgPSB1c2VTdGF0ZShuZXcgU2hvcCgpKSwgc2hvcCA9IF9hWzBdLCBzZXRTaG9wID0gX2FbMV07XG4gICAgdmFyIF9iID0gdXNlU3RhdGUobmV3IE9yZGVyKCkpLCBvcmRlciA9IF9iWzBdLCBzZXRPcmRlciA9IF9iWzFdO1xuICAgIHZhciBvcmRlcl9zdGF0ZSA9IGNvbnRhaW5lci5yZXNvbHZlKE9yZGVyU3RhdGUpO1xuICAgIHZhciBvcmRlclNlcnZpY2UgPSBjb250YWluZXIucmVzb2x2ZShPcmRlclNlcnZpY2UpO1xuICAgIHZhciBsb2FkT3JkZXIgPSBmdW5jdGlvbiAodXVpZCkgeyByZXR1cm4gX19hd2FpdGVyKHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIF9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfYSkge1xuICAgICAgICAgICAgb3JkZXJTZXJ2aWNlLmdldE9yZGVyKHV1aWQpLnRoZW4oZnVuY3Rpb24gKG9yZGVyT2JqKSB7XG4gICAgICAgICAgICAgICAgb3JkZXJfc3RhdGUuc2V0Q3VycmVudE9yZGVyKG9yZGVyT2JqKTtcbiAgICAgICAgICAgICAgICBzZXRTaG9wKG9yZGVyT2JqLnNob3ApO1xuICAgICAgICAgICAgICAgIHNldE9yZGVyKG9yZGVyT2JqKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIFsyIC8qcmV0dXJuKi9dO1xuICAgICAgICB9KTtcbiAgICB9KTsgfTtcbiAgICB2YXIgcGFyYW1zID0gdXNlUGFyYW1zKCk7XG4gICAgdXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHBhcmFtcy51dWlkKSB7XG4gICAgICAgICAgICBsb2FkT3JkZXIocGFyYW1zLnV1aWQpO1xuICAgICAgICB9XG4gICAgfSwgW10pO1xuICAgIHJldHVybiAoUmVhY3QuY3JlYXRlRWxlbWVudChSZWFjdC5TdHJpY3RNb2RlLCBudWxsLFxuICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHsgY2xhc3NOYW1lOiAnbWwtMSBtdC0xIG1yLTEnIH0sXG4gICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHsgY2xhc3NOYW1lOiBcImZsZXggZ2FwLTEgbXQtMSBtYi0xXCIgfSxcbiAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHsgY2xhc3NOYW1lOiBcImZsZXgtMVwiIH0sXG4gICAgICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoT3JkZXJBbGlhc0NvbXBvbmVudCwgeyBvcmRlcjogb3JkZXIgfSkpLFxuICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgeyBjbGFzc05hbWU6IFwiXCIgfSxcbiAgICAgICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChCdXR0b25Db21wb25lbnQsIHsgbG9hZE9yZGVyOiBsb2FkT3JkZXIgfSkpKSxcbiAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoVG9wQmFyQ29tcG9uZW50LCB7IHNob3A6IHNob3AsIG9yZGVyOiBvcmRlciwgY2hhbmdlOiBzZXRTaG9wIH0pLFxuICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7IGNsYXNzTmFtZTogXCJtdC0xIG1iLTFcIiB9LCBzaG9wLmlkICE9IDAgJiYgUmVhY3QuY3JlYXRlRWxlbWVudChDb250YWN0Q29tcG9uZW50LCB7IHNob3A6IHNob3AsIG9yZGVyOiBvcmRlciB9KSksXG4gICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIG51bGwsIHNob3AuaWQgIT0gMCAmJiBSZWFjdC5jcmVhdGVFbGVtZW50KFBvc2l0aW9uc0NvbXBvbmVudCwgeyBzaG9wOiBzaG9wLCBvcmRlcjogb3JkZXIgfSkpLFxuICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7IGNsYXNzTmFtZTogXCJtdC0xIG1iLTEgZmxleCBnYXAtMVwiIH0sXG4gICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7IGNsYXNzTmFtZTogXCJmbGV4LTFcIiB9LCBzaG9wLmlkICE9IDAgJiYgUmVhY3QuY3JlYXRlRWxlbWVudChQYXltZW50Q29tcG9uZW50LCB7IHNob3A6IHNob3AsIG9yZGVyOiBvcmRlciB9KSksXG4gICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7IGNsYXNzTmFtZTogXCJmbGV4LTFcIiB9LCBzaG9wLmlkICE9IDAgJiYgUmVhY3QuY3JlYXRlRWxlbWVudChTaGlwcGluZ0NvbXBvbmVudCwgeyBzaG9wOiBzaG9wLCBvcmRlcjogb3JkZXIgfSkpKSxcbiAgICAgICAgICAgIHNob3AuaWQgIT0gMCAmJiBSZWFjdC5jcmVhdGVFbGVtZW50KEluZm9GaWVsZENvbXBvbmVudCwgeyBzaG9wOiBzaG9wLCBvcmRlcjogb3JkZXIgfSkpKSk7XG59O1xuZXhwb3J0IGRlZmF1bHQgQmFzZUNvbXBvbmVudDtcbiIsImltcG9ydCB7IEJzUGx1cyB9IGZyb20gXCJAcmVhY3QtaWNvbnMvYWxsLWZpbGVzL2JzL0JzUGx1c1wiO1xuaW1wb3J0IHsgQnNQZW5jaWwgfSBmcm9tIFwiQHJlYWN0LWljb25zL2FsbC1maWxlcy9icy9Cc1BlbmNpbFwiO1xuaW1wb3J0IHsgUmlTYXZlRmlsbCB9IGZyb20gXCJAcmVhY3QtaWNvbnMvYWxsLWZpbGVzL3JpL1JpU2F2ZUZpbGxcIjtcbmltcG9ydCB7IFJpRGVsZXRlQmluMkxpbmUgfSBmcm9tIFwiQHJlYWN0LWljb25zL2FsbC1maWxlcy9yaS9SaURlbGV0ZUJpbjJMaW5lXCI7XG5pbXBvcnQgeyBCc1hDaXJjbGUgfSBmcm9tIFwiQHJlYWN0LWljb25zL2FsbC1maWxlcy9icy9Cc1hDaXJjbGVcIjtcbmltcG9ydCB7IEJ1dHRvbiBhcyBCYXNlQnV0dG9uIH0gZnJvbSBcImZsb3diaXRlLXJlYWN0XCI7XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xudmFyIEJ1dHRvbiA9IGZ1bmN0aW9uIChfYSkge1xuICAgIHZhciB0eXBlID0gX2EudHlwZSwgdmFyaWFudCA9IF9hLnZhcmlhbnQsIG9uQ2xpY2sgPSBfYS5vbkNsaWNrO1xuICAgIHJldHVybiAoUmVhY3QuY3JlYXRlRWxlbWVudChCYXNlQnV0dG9uLCB7IGNvbG9yOiB2YXJpYW50LCBwaWxsOiB0cnVlLCBvbkNsaWNrOiBvbkNsaWNrIH0sXG4gICAgICAgIHR5cGUgPT0gMSAmJiBSZWFjdC5jcmVhdGVFbGVtZW50KEJzUGx1cywgbnVsbCksXG4gICAgICAgIHR5cGUgPT0gMiAmJiBSZWFjdC5jcmVhdGVFbGVtZW50KEJzUGVuY2lsLCBudWxsKSxcbiAgICAgICAgdHlwZSA9PSAzICYmIFJlYWN0LmNyZWF0ZUVsZW1lbnQoUmlTYXZlRmlsbCwgbnVsbCksXG4gICAgICAgIHR5cGUgPT0gNCAmJiBSZWFjdC5jcmVhdGVFbGVtZW50KEJzWENpcmNsZSwgbnVsbCksXG4gICAgICAgIHR5cGUgPT0gNSAmJiBSZWFjdC5jcmVhdGVFbGVtZW50KFJpRGVsZXRlQmluMkxpbmUsIG51bGwpKSk7XG59O1xuZXhwb3J0IGRlZmF1bHQgQnV0dG9uO1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbnZhciBDdXJyZW5jeSA9IGZ1bmN0aW9uIChfYSkge1xuICAgIHZhciBwcmljZSA9IF9hLnByaWNlO1xuICAgIHJldHVybiAoUmVhY3QuY3JlYXRlRWxlbWVudChSZWFjdC5GcmFnbWVudCwgbnVsbCwgSW50bC5OdW1iZXJGb3JtYXQoJ2RlLURFJywge1xuICAgICAgICBzdHlsZTogJ2N1cnJlbmN5JyxcbiAgICAgICAgY3VycmVuY3k6ICdFVVInXG4gICAgfSkuZm9ybWF0KHByaWNlIC8gMTAwKSkpO1xufTtcbmV4cG9ydCBkZWZhdWx0IEN1cnJlbmN5O1xuIiwidmFyIF9fbWFrZVRlbXBsYXRlT2JqZWN0ID0gKHRoaXMgJiYgdGhpcy5fX21ha2VUZW1wbGF0ZU9iamVjdCkgfHwgZnVuY3Rpb24gKGNvb2tlZCwgcmF3KSB7XG4gICAgaWYgKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSkgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkoY29va2VkLCBcInJhd1wiLCB7IHZhbHVlOiByYXcgfSk7IH0gZWxzZSB7IGNvb2tlZC5yYXcgPSByYXc7IH1cbiAgICByZXR1cm4gY29va2VkO1xufTtcbnZhciBfX2Fzc2lnbiA9ICh0aGlzICYmIHRoaXMuX19hc3NpZ24pIHx8IGZ1bmN0aW9uICgpIHtcbiAgICBfX2Fzc2lnbiA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24odCkge1xuICAgICAgICBmb3IgKHZhciBzLCBpID0gMSwgbiA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBuOyBpKyspIHtcbiAgICAgICAgICAgIHMgPSBhcmd1bWVudHNbaV07XG4gICAgICAgICAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkpXG4gICAgICAgICAgICAgICAgdFtwXSA9IHNbcF07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHQ7XG4gICAgfTtcbiAgICByZXR1cm4gX19hc3NpZ24uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbn07XG5pbXBvcnQgc3R5bGVkIGZyb20gXCJzdHlsZWQtY29tcG9uZW50c1wiO1xuaW1wb3J0IHsgY29tcG9uZW50cyB9IGZyb20gXCJyZWFjdC1zZWxlY3RcIjtcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5leHBvcnQgdmFyIFNlbGVjdExhYmVsID0gZnVuY3Rpb24gKHByb3BzKSB7XG4gICAgcmV0dXJuIChSZWFjdC5jcmVhdGVFbGVtZW50KFJlYWN0LkZyYWdtZW50LCBudWxsLFxuICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KGNvbXBvbmVudHMuQ29udHJvbCwgX19hc3NpZ24oe30sIHByb3BzKSksXG4gICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoTGFiZWwsIHsgXCIkaXNGbG9hdGluZ1wiOiBwcm9wcy5nZXRWYWx1ZSgpLmxlbmd0aCA9PSAwIHx8IHByb3BzLmdldFZhbHVlKClbMF0udXVpZCA9PSBcIlwiIH0sIHByb3BzLnNlbGVjdFByb3BzLm5hbWUpKSk7XG59O1xudmFyIExhYmVsID0gc3R5bGVkLmxhYmVsKHRlbXBsYXRlT2JqZWN0XzEgfHwgKHRlbXBsYXRlT2JqZWN0XzEgPSBfX21ha2VUZW1wbGF0ZU9iamVjdChbXCJcXG4gIGxlZnQ6IDEwcHg7XFxuICBwb2ludGVyLWV2ZW50czogbm9uZTtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHRyYW5zaXRpb246IDAuMnMgZWFzZSBhbGw7XFxuICAtbW96LXRyYW5zaXRpb246IDAuMnMgZWFzZSBhbGw7XFxuICAtd2Via2l0LXRyYW5zaXRpb246IDAuMnMgZWFzZSBhbGw7XFxuICB0b3A6IFwiLCBcIjtcXG4gIGZvbnQtc2l6ZTogXCIsIFwiO1xcblwiXSwgW1wiXFxuICBsZWZ0OiAxMHB4O1xcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICB0cmFuc2l0aW9uOiAwLjJzIGVhc2UgYWxsO1xcbiAgLW1vei10cmFuc2l0aW9uOiAwLjJzIGVhc2UgYWxsO1xcbiAgLXdlYmtpdC10cmFuc2l0aW9uOiAwLjJzIGVhc2UgYWxsO1xcbiAgdG9wOiBcIiwgXCI7XFxuICBmb250LXNpemU6IFwiLCBcIjtcXG5cIl0pKSwgZnVuY3Rpb24gKHByb3BzKSB7IHJldHVybiAocHJvcHMuJGlzRmxvYXRpbmcgPyBcIjIwJVwiIDogXCIwcHhcIik7IH0sIGZ1bmN0aW9uIChwcm9wcykgeyByZXR1cm4gKHByb3BzLiRpc0Zsb2F0aW5nID8gXCIxcmVtXCIgOiBcIjAuNnJlbVwiKTsgfSk7XG52YXIgdGVtcGxhdGVPYmplY3RfMTtcbiIsInZhciBfX2V4dGVuZHMgPSAodGhpcyAmJiB0aGlzLl9fZXh0ZW5kcykgfHwgKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcbiAgICAgICAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcbiAgICAgICAgICAgIGZ1bmN0aW9uIChkLCBiKSB7IGZvciAodmFyIHAgaW4gYikgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBwKSkgZFtwXSA9IGJbcF07IH07XG4gICAgICAgIHJldHVybiBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgIH07XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGlmICh0eXBlb2YgYiAhPT0gXCJmdW5jdGlvblwiICYmIGIgIT09IG51bGwpXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyhiKSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxuICAgICAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG4gICAgfTtcbn0pKCk7XG52YXIgX19hd2FpdGVyID0gKHRoaXMgJiYgdGhpcy5fX2F3YWl0ZXIpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcbiAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xuICAgIH0pO1xufTtcbnZhciBfX2dlbmVyYXRvciA9ICh0aGlzICYmIHRoaXMuX19nZW5lcmF0b3IpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBib2R5KSB7XG4gICAgdmFyIF8gPSB7IGxhYmVsOiAwLCBzZW50OiBmdW5jdGlvbigpIHsgaWYgKHRbMF0gJiAxKSB0aHJvdyB0WzFdOyByZXR1cm4gdFsxXTsgfSwgdHJ5czogW10sIG9wczogW10gfSwgZiwgeSwgdCwgZztcbiAgICByZXR1cm4gZyA9IHsgbmV4dDogdmVyYigwKSwgXCJ0aHJvd1wiOiB2ZXJiKDEpLCBcInJldHVyblwiOiB2ZXJiKDIpIH0sIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiAoZ1tTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzOyB9KSwgZztcbiAgICBmdW5jdGlvbiB2ZXJiKG4pIHsgcmV0dXJuIGZ1bmN0aW9uICh2KSB7IHJldHVybiBzdGVwKFtuLCB2XSk7IH07IH1cbiAgICBmdW5jdGlvbiBzdGVwKG9wKSB7XG4gICAgICAgIGlmIChmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLlwiKTtcbiAgICAgICAgd2hpbGUgKF8pIHRyeSB7XG4gICAgICAgICAgICBpZiAoZiA9IDEsIHkgJiYgKHQgPSBvcFswXSAmIDIgPyB5W1wicmV0dXJuXCJdIDogb3BbMF0gPyB5W1widGhyb3dcIl0gfHwgKCh0ID0geVtcInJldHVyblwiXSkgJiYgdC5jYWxsKHkpLCAwKSA6IHkubmV4dCkgJiYgISh0ID0gdC5jYWxsKHksIG9wWzFdKSkuZG9uZSkgcmV0dXJuIHQ7XG4gICAgICAgICAgICBpZiAoeSA9IDAsIHQpIG9wID0gW29wWzBdICYgMiwgdC52YWx1ZV07XG4gICAgICAgICAgICBzd2l0Y2ggKG9wWzBdKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAwOiBjYXNlIDE6IHQgPSBvcDsgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSA0OiBfLmxhYmVsKys7IHJldHVybiB7IHZhbHVlOiBvcFsxXSwgZG9uZTogZmFsc2UgfTtcbiAgICAgICAgICAgICAgICBjYXNlIDU6IF8ubGFiZWwrKzsgeSA9IG9wWzFdOyBvcCA9IFswXTsgY29udGludWU7XG4gICAgICAgICAgICAgICAgY2FzZSA3OiBvcCA9IF8ub3BzLnBvcCgpOyBfLnRyeXMucG9wKCk7IGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIGlmICghKHQgPSBfLnRyeXMsIHQgPSB0Lmxlbmd0aCA+IDAgJiYgdFt0Lmxlbmd0aCAtIDFdKSAmJiAob3BbMF0gPT09IDYgfHwgb3BbMF0gPT09IDIpKSB7IF8gPSAwOyBjb250aW51ZTsgfVxuICAgICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDMgJiYgKCF0IHx8IChvcFsxXSA+IHRbMF0gJiYgb3BbMV0gPCB0WzNdKSkpIHsgXy5sYWJlbCA9IG9wWzFdOyBicmVhazsgfVxuICAgICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDYgJiYgXy5sYWJlbCA8IHRbMV0pIHsgXy5sYWJlbCA9IHRbMV07IHQgPSBvcDsgYnJlYWs7IH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHQgJiYgXy5sYWJlbCA8IHRbMl0pIHsgXy5sYWJlbCA9IHRbMl07IF8ub3BzLnB1c2gob3ApOyBicmVhazsgfVxuICAgICAgICAgICAgICAgICAgICBpZiAodFsyXSkgXy5vcHMucG9wKCk7XG4gICAgICAgICAgICAgICAgICAgIF8udHJ5cy5wb3AoKTsgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvcCA9IGJvZHkuY2FsbCh0aGlzQXJnLCBfKTtcbiAgICAgICAgfSBjYXRjaCAoZSkgeyBvcCA9IFs2LCBlXTsgeSA9IDA7IH0gZmluYWxseSB7IGYgPSB0ID0gMDsgfVxuICAgICAgICBpZiAob3BbMF0gJiA1KSB0aHJvdyBvcFsxXTsgcmV0dXJuIHsgdmFsdWU6IG9wWzBdID8gb3BbMV0gOiB2b2lkIDAsIGRvbmU6IHRydWUgfTtcbiAgICB9XG59O1xuaW1wb3J0IHsgT3JkZXJTdGF0ZSB9IGZyb20gJy4uLy4uL3N0YXRlL29yZGVyJztcbmltcG9ydCB7IGNvbnRhaW5lciB9IGZyb20gXCJ0c3lyaW5nZVwiO1xuaW1wb3J0IHsgT3JkZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvb3JkZXInO1xuaW1wb3J0IHsgQ29tcG9uZW50IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgZGVib3VuY2VUaW1lIH0gZnJvbSBcInJ4anNcIjtcbmltcG9ydCB7IFJpU2F2ZUZpbGwgfSBmcm9tIFwiQHJlYWN0LWljb25zL2FsbC1maWxlcy9yaS9SaVNhdmVGaWxsXCI7XG5pbXBvcnQgeyBSaVByaW50ZXJGaWxsIH0gZnJvbSBcIkByZWFjdC1pY29ucy9hbGwtZmlsZXMvcmkvUmlQcmludGVyRmlsbFwiO1xuaW1wb3J0IHsgQnV0dG9uIH0gZnJvbSBcImZsb3diaXRlLXJlYWN0XCI7XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xudmFyIEJ1dHRvbkNvbXBvbmVudCA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoQnV0dG9uQ29tcG9uZW50LCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIEJ1dHRvbkNvbXBvbmVudChwcm9wcykge1xuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBwcm9wcykgfHwgdGhpcztcbiAgICAgICAgX3RoaXMub3JkZXJTdGF0ZSA9IGNvbnRhaW5lci5yZXNvbHZlKE9yZGVyU3RhdGUpO1xuICAgICAgICBfdGhpcy5vcmRlclNlcnZpY2UgPSBjb250YWluZXIucmVzb2x2ZShPcmRlclNlcnZpY2UpO1xuICAgICAgICBfdGhpcy5zdGF0ZSA9IHsgZGlzYWJsZWQ6IHRydWUgfTtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBCdXR0b25Db21wb25lbnQucHJvdG90eXBlLmNvbXBvbmVudERpZE1vdW50ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICB0aGlzLm9yZGVyU3RhdGUuZ2V0Q3VycmVudE9yZGVyKCkucGlwZShkZWJvdW5jZVRpbWUoMjAwMCkpLnN1YnNjcmliZShmdW5jdGlvbiAoZSkgeyByZXR1cm4gX3RoaXMuc2F2ZUJ1dHRvbihlKTsgfSk7XG4gICAgfTtcbiAgICBCdXR0b25Db21wb25lbnQucHJvdG90eXBlLnNhdmVCdXR0b24gPSBmdW5jdGlvbiAob3JkZXIpIHtcbiAgICAgICAgaWYgKG9yZGVyLmNvbnRhY3QudXNlcm5hbWUgIT0gXCJcIlxuICAgICAgICAgICAgJiYgb3JkZXIucGF5bWVudC50aXRsZSAhPSBcIlwiXG4gICAgICAgICAgICAmJiBvcmRlci5zaGlwcGluZy50aXRsZSAhPSBcIlwiXG4gICAgICAgICAgICAmJiBvcmRlci5zaG9wLm5hbWUgIT0gXCJcIlxuICAgICAgICAgICAgJiYgb3JkZXIuYWNjb3VudC50aXRsZSAhPSBcIlwiXG4gICAgICAgICAgICAmJiBvcmRlci5pbnZvaWNlQWRkcmVzcy51dWlkICE9IFwiXCJcbiAgICAgICAgICAgICYmIG9yZGVyLnR5cGUgIT0gMCkge1xuICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7IGRpc2FibGVkOiBmYWxzZSB9KTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgQnV0dG9uQ29tcG9uZW50LnByb3RvdHlwZS5oYW5kbGVQcmludCA9IGZ1bmN0aW9uIChlKSB7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciB1dWlkLCB0eXBlO1xuICAgICAgICAgICAgcmV0dXJuIF9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfYSkge1xuICAgICAgICAgICAgICAgIHV1aWQgPSB0aGlzLm9yZGVyU3RhdGUuZ2V0Q3VycmVudE9yZGVyKCkudmFsdWUudXVpZDtcbiAgICAgICAgICAgICAgICB0eXBlID0gdGhpcy5vcmRlclN0YXRlLmdldEN1cnJlbnRPcmRlcigpLnZhbHVlLnR5cGU7XG4gICAgICAgICAgICAgICAgd2luZG93Lm9wZW4oJy9hcHBzL2JhY2tlbmQvb3JkZXIvZGV0YWlsL3ByaW50LycgKyB0eXBlICsgJy8nICsgdXVpZCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFsyIC8qcmV0dXJuKi9dO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgQnV0dG9uQ29tcG9uZW50LnByb3RvdHlwZS5oYW5kbGVTYXZlID0gZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIHJlc3VsdDtcbiAgICAgICAgICAgIHJldHVybiBfX2dlbmVyYXRvcih0aGlzLCBmdW5jdGlvbiAoX2EpIHtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKF9hLmxhYmVsKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbNCAvKnlpZWxkKi8sIHRoaXMub3JkZXJTZXJ2aWNlLnNhdmVPcmRlcih0aGlzLm9yZGVyU3RhdGUuZ2V0Q3VycmVudE9yZGVyKCkudmFsdWUpXTtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gX2Euc2VudCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm9wcy5sb2FkT3JkZXIocmVzdWx0Wyd1dWlkJ10pO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFsyIC8qcmV0dXJuKi9dO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIEJ1dHRvbkNvbXBvbmVudC5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICByZXR1cm4gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgeyBjbGFzc05hbWU6IFwiZmxleCBnYXAtM1wiIH0sXG4gICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KEJ1dHRvbiwgeyBzaXplOiBcInhzXCIsIGNvbG9yOiBcImluZm9cIiwgZGlzYWJsZWQ6IHRoaXMuc3RhdGUuZGlzYWJsZWQsIG9uQ2xpY2s6IGZ1bmN0aW9uIChlKSB7IHJldHVybiBfdGhpcy5oYW5kbGVTYXZlKGUpOyB9IH0sXG4gICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChSaVNhdmVGaWxsLCB7IGNsYXNzTmFtZTogXCJtci0yIGgtNSB3LTVcIiB9KSxcbiAgICAgICAgICAgICAgICBcIiBTcGVpY2hlcm5cIiksXG4gICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KEJ1dHRvbiwgeyBzaXplOiBcInhzXCIsIGNvbG9yOiBcInN1Y2Nlc3NcIiwgZGlzYWJsZWQ6ICF0aGlzLm9yZGVyU3RhdGUuZ2V0Q3VycmVudE9yZGVyKCkudmFsdWUuc2F2ZWQsIG9uQ2xpY2s6IGZ1bmN0aW9uIChlKSB7IHJldHVybiBfdGhpcy5oYW5kbGVQcmludChlKTsgfSB9LFxuICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoUmlQcmludGVyRmlsbCwgeyBjbGFzc05hbWU6IFwibXItMiBoLTUgdy01XCIgfSksXG4gICAgICAgICAgICAgICAgXCIgRHJ1Y2tlblwiKSkpO1xuICAgIH07XG4gICAgcmV0dXJuIEJ1dHRvbkNvbXBvbmVudDtcbn0oQ29tcG9uZW50KSk7XG5leHBvcnQgZGVmYXVsdCBCdXR0b25Db21wb25lbnQ7XG4iLCJ2YXIgX19leHRlbmRzID0gKHRoaXMgJiYgdGhpcy5fX2V4dGVuZHMpIHx8IChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGV4dGVuZFN0YXRpY3MgPSBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8XG4gICAgICAgICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XG4gICAgICAgICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwgcCkpIGRbcF0gPSBiW3BdOyB9O1xuICAgICAgICByZXR1cm4gZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICB9O1xuICAgIHJldHVybiBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBpZiAodHlwZW9mIGIgIT09IFwiZnVuY3Rpb25cIiAmJiBiICE9PSBudWxsKVxuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNsYXNzIGV4dGVuZHMgdmFsdWUgXCIgKyBTdHJpbmcoYikgKyBcIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsXCIpO1xuICAgICAgICBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgICAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cbiAgICAgICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xuICAgIH07XG59KSgpO1xudmFyIF9fYXdhaXRlciA9ICh0aGlzICYmIHRoaXMuX19hd2FpdGVyKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgICB9KTtcbn07XG52YXIgX19nZW5lcmF0b3IgPSAodGhpcyAmJiB0aGlzLl9fZ2VuZXJhdG9yKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgYm9keSkge1xuICAgIHZhciBfID0geyBsYWJlbDogMCwgc2VudDogZnVuY3Rpb24oKSB7IGlmICh0WzBdICYgMSkgdGhyb3cgdFsxXTsgcmV0dXJuIHRbMV07IH0sIHRyeXM6IFtdLCBvcHM6IFtdIH0sIGYsIHksIHQsIGc7XG4gICAgcmV0dXJuIGcgPSB7IG5leHQ6IHZlcmIoMCksIFwidGhyb3dcIjogdmVyYigxKSwgXCJyZXR1cm5cIjogdmVyYigyKSB9LCB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgKGdbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhpczsgfSksIGc7XG4gICAgZnVuY3Rpb24gdmVyYihuKSB7IHJldHVybiBmdW5jdGlvbiAodikgeyByZXR1cm4gc3RlcChbbiwgdl0pOyB9OyB9XG4gICAgZnVuY3Rpb24gc3RlcChvcCkge1xuICAgICAgICBpZiAoZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy5cIik7XG4gICAgICAgIHdoaWxlIChfKSB0cnkge1xuICAgICAgICAgICAgaWYgKGYgPSAxLCB5ICYmICh0ID0gb3BbMF0gJiAyID8geVtcInJldHVyblwiXSA6IG9wWzBdID8geVtcInRocm93XCJdIHx8ICgodCA9IHlbXCJyZXR1cm5cIl0pICYmIHQuY2FsbCh5KSwgMCkgOiB5Lm5leHQpICYmICEodCA9IHQuY2FsbCh5LCBvcFsxXSkpLmRvbmUpIHJldHVybiB0O1xuICAgICAgICAgICAgaWYgKHkgPSAwLCB0KSBvcCA9IFtvcFswXSAmIDIsIHQudmFsdWVdO1xuICAgICAgICAgICAgc3dpdGNoIChvcFswXSkge1xuICAgICAgICAgICAgICAgIGNhc2UgMDogY2FzZSAxOiB0ID0gb3A7IGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgNDogXy5sYWJlbCsrOyByZXR1cm4geyB2YWx1ZTogb3BbMV0sIGRvbmU6IGZhbHNlIH07XG4gICAgICAgICAgICAgICAgY2FzZSA1OiBfLmxhYmVsKys7IHkgPSBvcFsxXTsgb3AgPSBbMF07IGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGNhc2UgNzogb3AgPSBfLm9wcy5wb3AoKTsgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICBpZiAoISh0ID0gXy50cnlzLCB0ID0gdC5sZW5ndGggPiAwICYmIHRbdC5sZW5ndGggLSAxXSkgJiYgKG9wWzBdID09PSA2IHx8IG9wWzBdID09PSAyKSkgeyBfID0gMDsgY29udGludWU7IH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSAzICYmICghdCB8fCAob3BbMV0gPiB0WzBdICYmIG9wWzFdIDwgdFszXSkpKSB7IF8ubGFiZWwgPSBvcFsxXTsgYnJlYWs7IH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSA2ICYmIF8ubGFiZWwgPCB0WzFdKSB7IF8ubGFiZWwgPSB0WzFdOyB0ID0gb3A7IGJyZWFrOyB9XG4gICAgICAgICAgICAgICAgICAgIGlmICh0ICYmIF8ubGFiZWwgPCB0WzJdKSB7IF8ubGFiZWwgPSB0WzJdOyBfLm9wcy5wdXNoKG9wKTsgYnJlYWs7IH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHRbMl0pIF8ub3BzLnBvcCgpO1xuICAgICAgICAgICAgICAgICAgICBfLnRyeXMucG9wKCk7IGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgb3AgPSBib2R5LmNhbGwodGhpc0FyZywgXyk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHsgb3AgPSBbNiwgZV07IHkgPSAwOyB9IGZpbmFsbHkgeyBmID0gdCA9IDA7IH1cbiAgICAgICAgaWYgKG9wWzBdICYgNSkgdGhyb3cgb3BbMV07IHJldHVybiB7IHZhbHVlOiBvcFswXSA/IG9wWzFdIDogdm9pZCAwLCBkb25lOiB0cnVlIH07XG4gICAgfVxufTtcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBPcmRlciB9IGZyb20gXCIuLi8uLi9tb2RlbC9vcmRlclwiO1xuaW1wb3J0IHsgY29udGFpbmVyIH0gZnJvbSBcInRzeXJpbmdlXCI7XG5pbXBvcnQgeyBPcmRlclN0YXRlIH0gZnJvbSBcIi4uLy4uL3N0YXRlL29yZGVyXCI7XG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IE9yZGVyU2VydmljZSB9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy9vcmRlclwiO1xuaW1wb3J0IEN1cnJlbmN5IGZyb20gXCIuLi9iYXNlL0N1cnJlbmN5XCI7XG52YXIgQ2FsY0NvbXBvbmVudCA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoQ2FsY0NvbXBvbmVudCwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBDYWxjQ29tcG9uZW50KHByb3BzKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIHByb3BzKSB8fCB0aGlzO1xuICAgICAgICBfdGhpcy5zdGF0ZSA9IHtcbiAgICAgICAgICAgIG9yZGVyOiBuZXcgT3JkZXIoKVxuICAgICAgICB9O1xuICAgICAgICBfdGhpcy5vcmRlclN0YXRlID0gY29udGFpbmVyLnJlc29sdmUoT3JkZXJTdGF0ZSk7XG4gICAgICAgIF90aGlzLm9yZGVyU2VydmljZSA9IGNvbnRhaW5lci5yZXNvbHZlKE9yZGVyU2VydmljZSk7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgQ2FsY0NvbXBvbmVudC5wcm90b3R5cGUuY29tcG9uZW50RGlkTW91bnQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIHRoaXMub3JkZXJTdGF0ZS5nZXRDdXJyZW50T3JkZXIoKS5waXBlKGRlYm91bmNlVGltZSgyMDAwKSkuc3Vic2NyaWJlKGZ1bmN0aW9uIChlKSB7IHJldHVybiBfdGhpcy5jYWxjKGUpOyB9KTtcbiAgICB9O1xuICAgIENhbGNDb21wb25lbnQucHJvdG90eXBlLmNhbGMgPSBmdW5jdGlvbiAoZSkge1xuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgcmVzdWx0O1xuICAgICAgICAgICAgcmV0dXJuIF9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfYSkge1xuICAgICAgICAgICAgICAgIHN3aXRjaCAoX2EubGFiZWwpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAwOiByZXR1cm4gWzQgLyp5aWVsZCovLCB0aGlzLm9yZGVyU2VydmljZS5jYWxjT3JkZXIoZSldO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBfYS5zZW50KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN0YXRlKGZ1bmN0aW9uICgpIHsgcmV0dXJuICh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JkZXI6IHJlc3VsdCxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pOyB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbMiAvKnJldHVybiovXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBDYWxjQ29tcG9uZW50LnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiAoUmVhY3QuY3JlYXRlRWxlbWVudChcImgzXCIsIG51bGwsXG4gICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwic21hbGxcIiwgeyBjbGFzc05hbWU6IFwidGV4dC1ib2R5LXNlY29uZGFyeVwiIH0sXG4gICAgICAgICAgICAgICAgXCIgTmV0dG86IFwiLFxuICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoQ3VycmVuY3ksIHsgcHJpY2U6IHRoaXMuc3RhdGUub3JkZXIubmV0IH0pLFxuICAgICAgICAgICAgICAgIFwiICsgTXdTdC46IFwiLFxuICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoQ3VycmVuY3ksIHsgcHJpY2U6IHRoaXMuc3RhdGUub3JkZXIudmF0IH0pLFxuICAgICAgICAgICAgICAgIFwiID1cIiksXG4gICAgICAgICAgICBcIiBCcnV0dG86IFwiLFxuICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChDdXJyZW5jeSwgeyBwcmljZTogdGhpcy5zdGF0ZS5vcmRlci5ncm9zcyB9KSkpO1xuICAgIH07XG4gICAgcmV0dXJuIENhbGNDb21wb25lbnQ7XG59KFJlYWN0LkNvbXBvbmVudCkpO1xuZXhwb3J0IGRlZmF1bHQgQ2FsY0NvbXBvbmVudDtcbiIsImltcG9ydCAqIGFzIFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCB7IEFkZHJlc3MgfSBmcm9tICcuLi8uLi9tb2RlbC9hZGRyZXNzJztcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG52YXIgQWRkcmVzc0RldGFpbCA9IGZ1bmN0aW9uIChfYSkge1xuICAgIHZhciBhZGRyZXNzID0gX2EuYWRkcmVzcztcbiAgICByZXR1cm4gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzbWFsbFwiLCBudWxsLFxuICAgICAgICBhZGRyZXNzLmNvbXBhbnksXG4gICAgICAgIFwiIFwiLFxuICAgICAgICBhZGRyZXNzLmZpcnN0bmFtZSxcbiAgICAgICAgXCIgXCIsXG4gICAgICAgIGFkZHJlc3MubGFzdG5hbWUsXG4gICAgICAgIFwiIFwiLFxuICAgICAgICBhZGRyZXNzLnN0cmVldCxcbiAgICAgICAgXCIgXCIsXG4gICAgICAgIGFkZHJlc3MuaG91c2VOdW1iZXIsXG4gICAgICAgIFwiIFwiLFxuICAgICAgICBhZGRyZXNzLmNvdW50cnksXG4gICAgICAgIFwiIFwiLFxuICAgICAgICBhZGRyZXNzLnppcCxcbiAgICAgICAgXCIgXCIsXG4gICAgICAgIGFkZHJlc3MuY2l0eSkpO1xufTtcbkFkZHJlc3NEZXRhaWwucHJvcFR5cGVzID0ge1xuICAgIGFkZHJlc3M6IFByb3BUeXBlcy5pbnN0YW5jZU9mKEFkZHJlc3MpXG59O1xuZXhwb3J0IGRlZmF1bHQgQWRkcmVzc0RldGFpbDtcbiIsImltcG9ydCB7IHVzZUVmZmVjdCwgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgTmljZU1vZGFsLCB7IHVzZU1vZGFsIH0gZnJvbSBcIkBlYmF5L25pY2UtbW9kYWwtcmVhY3RcIjtcbmltcG9ydCBCdXR0b24gZnJvbSAnLi4vYmFzZS9CdXR0b24nO1xuaW1wb3J0IHZhbGlkYXRvciBmcm9tIFwiQHJqc2YvdmFsaWRhdG9yLWFqdjZcIjtcbmltcG9ydCBGb3JtIGZyb20gXCJAcmpzZi9jb3JlXCI7XG5pbXBvcnQgeyBDb3VudHJ5U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2NvdW50cnknO1xuaW1wb3J0IHsgTW9kYWwgfSBmcm9tIFwiZmxvd2JpdGUtcmVhY3RcIjtcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG52YXIgQWRkcmVzc2RpdiA9IE5pY2VNb2RhbC5jcmVhdGUoZnVuY3Rpb24gKF9hKSB7XG4gICAgdmFyIHRpdGxlID0gX2EudGl0bGUsIGFjdGlvbiA9IF9hLmFjdGlvbiwgYWRkcmVzcyA9IF9hLmFkZHJlc3MsIHNob3AgPSBfYS5zaG9wO1xuICAgIHZhciBjb3VudHJ5X2FwaSA9IG5ldyBDb3VudHJ5U2VydmljZSgpO1xuICAgIHZhciBtb2RhbCA9IHVzZU1vZGFsKCk7XG4gICAgdmFyIF9iID0gdXNlU3RhdGUoe30pLCBmb3JtRGF0YSA9IF9iWzBdLCBzZXRGb3JtRGF0YSA9IF9iWzFdO1xuICAgIHZhciBfYyA9IHVzZVN0YXRlKHt9KSwgc2NoZW1hID0gX2NbMF0sIHNldFNjaGVtYSA9IF9jWzFdO1xuICAgIHVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmIChhZGRyZXNzKSB7XG4gICAgICAgICAgICBzZXRGb3JtRGF0YSh7XG4gICAgICAgICAgICAgICAgZW1haWw6IGFkZHJlc3MuZW1haWwsXG4gICAgICAgICAgICAgICAgZmlyc3RuYW1lOiBhZGRyZXNzLmZpcnN0bmFtZSxcbiAgICAgICAgICAgICAgICBsYXN0bmFtZTogYWRkcmVzcy5sYXN0bmFtZSxcbiAgICAgICAgICAgICAgICBjb21wYW55OiBhZGRyZXNzLmNvbXBhbnksXG4gICAgICAgICAgICAgICAgc3RyZWV0OiBhZGRyZXNzLnN0cmVldCxcbiAgICAgICAgICAgICAgICBob3VzZU51bWJlcjogYWRkcmVzcy5ob3VzZU51bWJlcixcbiAgICAgICAgICAgICAgICB6aXA6IGFkZHJlc3MuemlwLFxuICAgICAgICAgICAgICAgIGNpdHk6IGFkZHJlc3MuY2l0eSxcbiAgICAgICAgICAgICAgICBwaG9uZTogYWRkcmVzcy5waG9uZSxcbiAgICAgICAgICAgICAgICBjb3VudHJ5OiBhZGRyZXNzLmNvdW50cnksXG4gICAgICAgICAgICAgICAgdXN0aWQ6IGFkZHJlc3MudXN0aWRcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfSwgW2FkZHJlc3NdKTtcbiAgICB1c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgICAgICBjb3VudHJ5X2FwaS5nZXRDb3VudHJ5KHNob3ApLnRoZW4oZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgICAgICAgIHZhciBjb3VudHJ5cyA9IFtdO1xuICAgICAgICAgICAgZGF0YS5mb3JFYWNoKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICAgICAgICAgICAgY291bnRyeXMucHVzaCh7ICd0aXRsZSc6IGl0ZW0uY29kZSwgJ2NvbnN0JzogaXRlbS5jb2RlIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB2YXIgc2NoZW1hID0ge1xuICAgICAgICAgICAgICAgIHRpdGxlOiAnQWRkcmVzcycsXG4gICAgICAgICAgICAgICAgdHlwZTogJ29iamVjdCcsXG4gICAgICAgICAgICAgICAgcmVxdWlyZWQ6IFsnZW1haWwnXSxcbiAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICAgICAgICAgIGVtYWlsOiB7IHR5cGU6ICdzdHJpbmcnLCBmb3JtYXQ6ICdlbWFpbCcsIHRpdGxlOiAnRS1NYWlsJyB9LFxuICAgICAgICAgICAgICAgICAgICBjb21wYW55OiB7IHR5cGU6ICdzdHJpbmcnLCB0aXRsZTogJ0NvbXBhbnknIH0sXG4gICAgICAgICAgICAgICAgICAgIGZpcnN0bmFtZTogeyB0eXBlOiAnc3RyaW5nJywgdGl0bGU6ICdGaXJzdG5hbWUnIH0sXG4gICAgICAgICAgICAgICAgICAgIGxhc3RuYW1lOiB7IHR5cGU6ICdzdHJpbmcnLCB0aXRsZTogJ0xhc3RuYW1lJyB9LFxuICAgICAgICAgICAgICAgICAgICBzdHJlZXQ6IHsgdHlwZTogJ3N0cmluZycsIHRpdGxlOiAnU3RyZWV0JyB9LFxuICAgICAgICAgICAgICAgICAgICBob3VzZU51bWJlcjogeyB0eXBlOiAnc3RyaW5nJywgdGl0bGU6ICdIb3VzZW51bWJlcicgfSxcbiAgICAgICAgICAgICAgICAgICAgemlwOiB7IHR5cGU6ICdzdHJpbmcnLCB0aXRsZTogJ1ppcCcgfSxcbiAgICAgICAgICAgICAgICAgICAgY2l0eTogeyB0eXBlOiAnc3RyaW5nJywgdGl0bGU6ICdDaXR5JyB9LFxuICAgICAgICAgICAgICAgICAgICBwaG9uZTogeyB0eXBlOiAnc3RyaW5nJywgdGl0bGU6ICdQaG9uZScgfSxcbiAgICAgICAgICAgICAgICAgICAgdXN0aWQ6IHsgdHlwZTogJ3N0cmluZycsIHRpdGxlOiAnVXN0SWQnIH0sXG4gICAgICAgICAgICAgICAgICAgIGNvdW50cnk6IHsgdHlwZTogJ3N0cmluZycsIHRpdGxlOiAnQ291bnRyeScsIG9uZU9mOiBjb3VudHJ5cyB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHNldFNjaGVtYShzY2hlbWEpO1xuICAgICAgICB9KTtcbiAgICB9LCBbXSk7XG4gICAgdmFyIHVpU2NoZW1hID0ge1xuICAgICAgICBcInVpOnN1Ym1pdEJ1dHRvbk9wdGlvbnNcIjoge1xuICAgICAgICAgICAgXCJzdWJtaXRUZXh0XCI6IFwiU2F2ZVwiLFxuICAgICAgICAgICAgXCJub3JlbmRlclwiOiB0cnVlLFxuICAgICAgICAgICAgXCJwcm9wc1wiOiB7XG4gICAgICAgICAgICAgICAgXCJkaXNhYmxlZFwiOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBcImNsYXNzTmFtZVwiOiBcImJ0biBidG4taW5mb1wiXG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgfTtcbiAgICByZXR1cm4gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoTW9kYWwsIHsgc2hvdzogbW9kYWwudmlzaWJsZSwgb25DbG9zZTogZnVuY3Rpb24gKCkgeyByZXR1cm4gbW9kYWwucmVtb3ZlKCk7IH0gfSxcbiAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChNb2RhbC5IZWFkZXIsIG51bGwsXG4gICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIG51bGwsIHRpdGxlKSksXG4gICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoTW9kYWwuQm9keSwgbnVsbCwgYWN0aW9uID09PSBcIlNhdmVcIiAmJiAoUmVhY3QuY3JlYXRlRWxlbWVudChGb3JtLCB7IHNjaGVtYTogc2NoZW1hLCBmb3JtRGF0YTogZm9ybURhdGEsIHVpU2NoZW1hOiB1aVNjaGVtYSwgdmFsaWRhdG9yOiB2YWxpZGF0b3IsIG9uQ2hhbmdlOiBmdW5jdGlvbiAoZSkgeyByZXR1cm4gc2V0Rm9ybURhdGEoZS5mb3JtRGF0YSk7IH0gfSkpKSxcbiAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChNb2RhbC5Gb290ZXIsIG51bGwsXG4gICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KEJ1dHRvbiwgeyB0eXBlOiAzLCB2YXJpYW50OiBcInN1Y2Nlc3NcIiwgb25DbGljazogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoYWN0aW9uID09PSBcIlNhdmVcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZvcm1EYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kYWwucmVzb2x2ZShmb3JtRGF0YSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kYWwucmVtb3ZlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtb2RhbC5yZXNvbHZlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBtb2RhbC5yZW1vdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gfSksXG4gICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KEJ1dHRvbiwgeyB0eXBlOiA0LCB2YXJpYW50OiBcIndhcm5pbmdcIiwgb25DbGljazogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBtb2RhbC5yZW1vdmUoKTtcbiAgICAgICAgICAgICAgICB9IH0pKSkpO1xufSk7XG5leHBvcnQgZGVmYXVsdCBBZGRyZXNzZGl2O1xuIiwiaW1wb3J0ICogYXMgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgQnV0dG9uIGZyb20gXCIuLi9iYXNlL0J1dHRvblwiO1xuaW1wb3J0IEFkZHJlc3NNb2RhbCBmcm9tIFwiLi9BZGRyZXNzTW9kYWxcIjtcbmltcG9ydCB7IHVzZUNhbGxiYWNrIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgdXNlTW9kYWwgfSBmcm9tICdAZWJheS9uaWNlLW1vZGFsLXJlYWN0JztcbmltcG9ydCB7IEFkZHJlc3MgfSBmcm9tIFwiLi4vLi4vbW9kZWwvYWRkcmVzc1wiO1xuaW1wb3J0IHsgU2hvcCB9IGZyb20gXCIuLi8uLi9tb2RlbC9zaG9wXCI7XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xudmFyIEFkZHJlc3NNb2RhbENvbXBvbmVudCA9IGZ1bmN0aW9uIChfYSkge1xuICAgIHZhciBoYW5kbGVBZGQgPSBfYS5oYW5kbGVBZGQsIGhhbmRsZUVkaXQgPSBfYS5oYW5kbGVFZGl0LCBhZGRyZXNzID0gX2EuYWRkcmVzcywgc2hvcCA9IF9hLnNob3A7XG4gICAgdmFyIGFkZHJlc3NNb2RhbCA9IHVzZU1vZGFsKEFkZHJlc3NNb2RhbCk7XG4gICAgdmFyIHNob3dBZGRNb2RhbCA9IHVzZUNhbGxiYWNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgYWRkcmVzc01vZGFsLnNob3coeyB0aXRsZTogJ0FkZCBBZGRyZXNzJywgYWN0aW9uOiAnU2F2ZScsIHNob3A6IHNob3AgfSkudGhlbihmdW5jdGlvbiAoZm9ybURhdGEpIHtcbiAgICAgICAgICAgIGFkZEFkZHJlc3MoZm9ybURhdGEpO1xuICAgICAgICB9KTtcbiAgICB9LCBbYWRkcmVzc01vZGFsXSk7XG4gICAgdmFyIHNob3dFZGl0TW9kYWwgPSB1c2VDYWxsYmFjayhmdW5jdGlvbiAoYWRkcmVzcykge1xuICAgICAgICBhZGRyZXNzTW9kYWwuc2hvdyh7IHRpdGxlOiAnRWRpdCBBZGRyZXNzJywgYWN0aW9uOiAnU2F2ZScsIGFkZHJlc3M6IGFkZHJlc3MsIHNob3A6IHNob3AgfSkudGhlbihmdW5jdGlvbiAoZm9ybURhdGEpIHtcbiAgICAgICAgICAgIHVwZGF0ZUFkZHJlc3MoZm9ybURhdGEpO1xuICAgICAgICB9KTtcbiAgICB9LCBbYWRkcmVzc01vZGFsXSk7XG4gICAgdmFyIHVwZGF0ZUFkZHJlc3MgPSBmdW5jdGlvbiAoZm9ybURhdGEpIHtcbiAgICAgICAgYWRkcmVzcy5wYXJzZUZyb21Gb3JtRGF0YShmb3JtRGF0YSk7XG4gICAgICAgIGhhbmRsZUVkaXQoYWRkcmVzcyk7XG4gICAgfTtcbiAgICB2YXIgYWRkQWRkcmVzcyA9IGZ1bmN0aW9uIChmb3JtRGF0YSkge1xuICAgICAgICBhZGRyZXNzID0gbmV3IEFkZHJlc3MoKTtcbiAgICAgICAgYWRkcmVzcy5wYXJzZUZyb21Gb3JtRGF0YShmb3JtRGF0YSk7XG4gICAgICAgIGhhbmRsZUFkZChhZGRyZXNzKTtcbiAgICB9O1xuICAgIHJldHVybiAoUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7IGNsYXNzTmFtZTogJ2ZsZXggZ2FwLTEnIH0sXG4gICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoQnV0dG9uLCB7IHR5cGU6IDEsIHZhcmlhbnQ6IFwic3VjY2Vzc1wiLCBvbkNsaWNrOiBzaG93QWRkTW9kYWwgfSksXG4gICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoQnV0dG9uLCB7IHR5cGU6IDIsIHZhcmlhbnQ6IFwiaW5mb1wiLCBvbkNsaWNrOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgc2hvd0VkaXRNb2RhbChhZGRyZXNzKTtcbiAgICAgICAgICAgIH0gfSkpKTtcbn07XG5BZGRyZXNzTW9kYWxDb21wb25lbnQucHJvcFR5cGVzID0ge1xuICAgIGhhbmRsZUFkZDogUHJvcFR5cGVzLmZ1bmMsXG4gICAgaGFuZGxlRWRpdDogUHJvcFR5cGVzLmZ1bmMsXG4gICAgYWRkcmVzczogUHJvcFR5cGVzLmluc3RhbmNlT2YoQWRkcmVzcyksXG4gICAgc2hvcDogUHJvcFR5cGVzLmluc3RhbmNlT2YoU2hvcClcbn07XG5leHBvcnQgZGVmYXVsdCBBZGRyZXNzTW9kYWxDb21wb25lbnQ7XG4iLCJ2YXIgX19hd2FpdGVyID0gKHRoaXMgJiYgdGhpcy5fX2F3YWl0ZXIpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcbiAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xuICAgIH0pO1xufTtcbnZhciBfX2dlbmVyYXRvciA9ICh0aGlzICYmIHRoaXMuX19nZW5lcmF0b3IpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBib2R5KSB7XG4gICAgdmFyIF8gPSB7IGxhYmVsOiAwLCBzZW50OiBmdW5jdGlvbigpIHsgaWYgKHRbMF0gJiAxKSB0aHJvdyB0WzFdOyByZXR1cm4gdFsxXTsgfSwgdHJ5czogW10sIG9wczogW10gfSwgZiwgeSwgdCwgZztcbiAgICByZXR1cm4gZyA9IHsgbmV4dDogdmVyYigwKSwgXCJ0aHJvd1wiOiB2ZXJiKDEpLCBcInJldHVyblwiOiB2ZXJiKDIpIH0sIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiAoZ1tTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzOyB9KSwgZztcbiAgICBmdW5jdGlvbiB2ZXJiKG4pIHsgcmV0dXJuIGZ1bmN0aW9uICh2KSB7IHJldHVybiBzdGVwKFtuLCB2XSk7IH07IH1cbiAgICBmdW5jdGlvbiBzdGVwKG9wKSB7XG4gICAgICAgIGlmIChmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLlwiKTtcbiAgICAgICAgd2hpbGUgKF8pIHRyeSB7XG4gICAgICAgICAgICBpZiAoZiA9IDEsIHkgJiYgKHQgPSBvcFswXSAmIDIgPyB5W1wicmV0dXJuXCJdIDogb3BbMF0gPyB5W1widGhyb3dcIl0gfHwgKCh0ID0geVtcInJldHVyblwiXSkgJiYgdC5jYWxsKHkpLCAwKSA6IHkubmV4dCkgJiYgISh0ID0gdC5jYWxsKHksIG9wWzFdKSkuZG9uZSkgcmV0dXJuIHQ7XG4gICAgICAgICAgICBpZiAoeSA9IDAsIHQpIG9wID0gW29wWzBdICYgMiwgdC52YWx1ZV07XG4gICAgICAgICAgICBzd2l0Y2ggKG9wWzBdKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAwOiBjYXNlIDE6IHQgPSBvcDsgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSA0OiBfLmxhYmVsKys7IHJldHVybiB7IHZhbHVlOiBvcFsxXSwgZG9uZTogZmFsc2UgfTtcbiAgICAgICAgICAgICAgICBjYXNlIDU6IF8ubGFiZWwrKzsgeSA9IG9wWzFdOyBvcCA9IFswXTsgY29udGludWU7XG4gICAgICAgICAgICAgICAgY2FzZSA3OiBvcCA9IF8ub3BzLnBvcCgpOyBfLnRyeXMucG9wKCk7IGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIGlmICghKHQgPSBfLnRyeXMsIHQgPSB0Lmxlbmd0aCA+IDAgJiYgdFt0Lmxlbmd0aCAtIDFdKSAmJiAob3BbMF0gPT09IDYgfHwgb3BbMF0gPT09IDIpKSB7IF8gPSAwOyBjb250aW51ZTsgfVxuICAgICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDMgJiYgKCF0IHx8IChvcFsxXSA+IHRbMF0gJiYgb3BbMV0gPCB0WzNdKSkpIHsgXy5sYWJlbCA9IG9wWzFdOyBicmVhazsgfVxuICAgICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDYgJiYgXy5sYWJlbCA8IHRbMV0pIHsgXy5sYWJlbCA9IHRbMV07IHQgPSBvcDsgYnJlYWs7IH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHQgJiYgXy5sYWJlbCA8IHRbMl0pIHsgXy5sYWJlbCA9IHRbMl07IF8ub3BzLnB1c2gob3ApOyBicmVhazsgfVxuICAgICAgICAgICAgICAgICAgICBpZiAodFsyXSkgXy5vcHMucG9wKCk7XG4gICAgICAgICAgICAgICAgICAgIF8udHJ5cy5wb3AoKTsgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvcCA9IGJvZHkuY2FsbCh0aGlzQXJnLCBfKTtcbiAgICAgICAgfSBjYXRjaCAoZSkgeyBvcCA9IFs2LCBlXTsgeSA9IDA7IH0gZmluYWxseSB7IGYgPSB0ID0gMDsgfVxuICAgICAgICBpZiAob3BbMF0gJiA1KSB0aHJvdyBvcFsxXTsgcmV0dXJuIHsgdmFsdWU6IG9wWzBdID8gb3BbMV0gOiB2b2lkIDAsIGRvbmU6IHRydWUgfTtcbiAgICB9XG59O1xuaW1wb3J0ICogYXMgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IHsgQXN5bmNQYWdpbmF0ZSB9IGZyb20gXCJyZWFjdC1zZWxlY3QtYXN5bmMtcGFnaW5hdGVcIjtcbmltcG9ydCB7IENvbnRhY3QgfSBmcm9tICcuLi8uLi9tb2RlbC9jb250YWN0JztcbmltcG9ydCB7IEFkZHJlc3MgfSBmcm9tICcuLi8uLi9tb2RlbC9hZGRyZXNzJztcbmltcG9ydCB7IGNvbnRhaW5lciB9IGZyb20gXCJ0c3lyaW5nZVwiO1xuaW1wb3J0IHsgdXNlRWZmZWN0LCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IE9yZGVyU3RhdGUgfSBmcm9tIFwiLi4vLi4vc3RhdGUvb3JkZXJcIjtcbmltcG9ydCB7IEFkZHJlc3NTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL2FkZHJlc3NcIjtcbmltcG9ydCBBZGRyZXNzTW9kYWxDb21wb25lbnQgZnJvbSBcIi4vQWRkcmVzc01vZGFsQ29tcG9uZW50XCI7XG5pbXBvcnQgeyBTZWxlY3RMYWJlbCB9IGZyb20gJy4uL2Jhc2UvU2VsZWN0TGFiZWwnO1xuaW1wb3J0IEFkZHJlc3NEZXRhaWwgZnJvbSAnLi9BZGRyZXNzRGV0YWlsJztcbmltcG9ydCB7IFNob3AgfSBmcm9tICcuLi8uLi9tb2RlbC9zaG9wJztcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG52YXIgQWRkcmVzc1NlbGVjdCA9IGZ1bmN0aW9uIChfYSkge1xuICAgIHZhciBhZGRyZXNzID0gX2EuYWRkcmVzcywgY29udGFjdCA9IF9hLmNvbnRhY3QsIHR5cGUgPSBfYS50eXBlLCBjaGFuZ2VBZGRyZXNzID0gX2EuY2hhbmdlQWRkcmVzcywgbmFtZSA9IF9hLm5hbWUsIHNob3AgPSBfYS5zaG9wO1xuICAgIHZhciBfYiA9IHVzZVN0YXRlKG51bGwpLCBjb250YWN0VXVpZCA9IF9iWzBdLCBzZXRDb250YWN0VXVpZCA9IF9iWzFdO1xuICAgIHZhciBfYyA9IHVzZVN0YXRlKG51bGwpLCBsb2NhbEFkZHJlc3MgPSBfY1swXSwgc2V0TG9jYWxBZGRyZXNzID0gX2NbMV07XG4gICAgdmFyIGFkZHJlc3Nfc2VydmljZSA9IG5ldyBBZGRyZXNzU2VydmljZSgpO1xuICAgIHZhciBvcmRlclN0YXRlID0gY29udGFpbmVyLnJlc29sdmUoT3JkZXJTdGF0ZSk7XG4gICAgdXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKGNvbnRhY3QudXVpZCAhPSBcIlwiKSB7XG4gICAgICAgICAgICBzZXRDb250YWN0VXVpZChjb250YWN0LnV1aWQpO1xuICAgICAgICB9XG4gICAgfSwgW2NvbnRhY3QudXVpZF0pO1xuICAgIHVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgICAgIHNldExvY2FsQWRkcmVzcyhhZGRyZXNzKTtcbiAgICB9LCBbYWRkcmVzc10pO1xuICAgIHZhciBvcmRlciA9IGNvbnRhaW5lci5yZXNvbHZlKE9yZGVyU3RhdGUpO1xuICAgIHZhciBsb2FkT3B0aW9ucyA9IGZ1bmN0aW9uIChzZWFyY2hRdWVyeSwgbG9hZGVkT3B0aW9ucykgeyByZXR1cm4gX19hd2FpdGVyKHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGRhdGE7XG4gICAgICAgIHJldHVybiBfX2dlbmVyYXRvcih0aGlzLCBmdW5jdGlvbiAoX2EpIHtcbiAgICAgICAgICAgIHN3aXRjaCAoX2EubGFiZWwpIHtcbiAgICAgICAgICAgICAgICBjYXNlIDA6IHJldHVybiBbNCAvKnlpZWxkKi8sIGFkZHJlc3Nfc2VydmljZS5nZXRDb250YWN0QWRkcmVzcyhjb250YWN0LnV1aWQsIHR5cGUpXTtcbiAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgIGRhdGEgPSBfYS5zZW50KCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbMiAvKnJldHVybiovLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uczogZGF0YSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNNb3JlOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1dO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9KTsgfTtcbiAgICB2YXIgaGFuZGxlQWRkID0gZnVuY3Rpb24gKGFkZHJlc3MpIHtcbiAgICAgICAgYWRkcmVzcy50eXBlID0gdHlwZTtcbiAgICAgICAgYWRkcmVzcy5jb250YWN0LnV1aWQgPSBjb250YWN0LnV1aWQ7XG4gICAgICAgIGFkZHJlc3Nfc2VydmljZS5jcmVhdGUoYWRkcmVzcykudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBzZXRMb2NhbEFkZHJlc3MoYWRkcmVzcyk7XG4gICAgICAgICAgICBjaGFuZ2VBZGRyZXNzKGFkZHJlc3MsIHR5cGUpO1xuICAgICAgICAgICAgc2V0Q29udGFjdFV1aWQoTWF0aC5yYW5kb20oKSk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgdmFyIGhhbmRsZUVkaXQgPSBmdW5jdGlvbiAoYWRkcmVzcykge1xuICAgICAgICBhZGRyZXNzLnR5cGUgPSB0eXBlO1xuICAgICAgICBhZGRyZXNzLmNvbnRhY3QudXVpZCA9IGNvbnRhY3QudXVpZDtcbiAgICAgICAgYWRkcmVzc19zZXJ2aWNlLnVwZGF0ZShhZGRyZXNzKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHNldExvY2FsQWRkcmVzcyhhZGRyZXNzKTtcbiAgICAgICAgICAgIGNoYW5nZUFkZHJlc3MoYWRkcmVzcywgdHlwZSk7XG4gICAgICAgICAgICBzZXRDb250YWN0VXVpZChNYXRoLnJhbmRvbSgpKTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICB2YXIgc2V0QWRkcmVzc0luT3JkZXIgPSBmdW5jdGlvbiAob3B0aW9uKSB7XG4gICAgICAgIHNldExvY2FsQWRkcmVzcyhvcHRpb24pO1xuICAgICAgICBjaGFuZ2VBZGRyZXNzKG9wdGlvbiwgdHlwZSk7XG4gICAgfTtcbiAgICByZXR1cm4gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgeyBjbGFzc05hbWU6ICdmbGV4IGdhcC0xJyB9LFxuICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHsgY2xhc3NOYW1lOiAnZmxleC0xJyB9LFxuICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChBc3luY1BhZ2luYXRlLCB7IGRlZmF1bHRPcHRpb25zOiB0cnVlLCBkZWZhdWx0VmFsdWU6IGFkZHJlc3MsIGtleTogSlNPTi5zdHJpbmdpZnkoY29udGFjdFV1aWQpLCBsb2FkT3B0aW9uczogbG9hZE9wdGlvbnMsIGdldE9wdGlvblZhbHVlOiBmdW5jdGlvbiAob3B0aW9uKSB7IHJldHVybiBvcHRpb24udXVpZDsgfSwgZ2V0T3B0aW9uTGFiZWw6IGZ1bmN0aW9uIChvcHRpb24pIHsgcmV0dXJuIG9wdGlvbi5maXJzdG5hbWUgKyAnICcgKyBvcHRpb24ubGFzdG5hbWU7IH0sIG9uQ2hhbmdlOiBzZXRBZGRyZXNzSW5PcmRlciwgaXNTZWFyY2hhYmxlOiBmYWxzZSwgbmFtZTogbmFtZSwgcGxhY2Vob2xkZXI6ICcnLCBjb21wb25lbnRzOiB7IENvbnRyb2w6IFNlbGVjdExhYmVsIH0gfSksXG4gICAgICAgICAgICBsb2NhbEFkZHJlc3MgJiYgUmVhY3QuY3JlYXRlRWxlbWVudChBZGRyZXNzRGV0YWlsLCB7IGFkZHJlc3M6IGxvY2FsQWRkcmVzcyB9KSksXG4gICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgbnVsbCxcbiAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoQWRkcmVzc01vZGFsQ29tcG9uZW50LCB7IGFkZHJlc3M6IGxvY2FsQWRkcmVzcywgaGFuZGxlQWRkOiBoYW5kbGVBZGQsIGhhbmRsZUVkaXQ6IGhhbmRsZUVkaXQsIHNob3A6IHNob3AgfSkpKSk7XG59O1xuQWRkcmVzc1NlbGVjdC5wcm9wVHlwZXMgPSB7XG4gICAgYWRkcmVzczogUHJvcFR5cGVzLmluc3RhbmNlT2YoQWRkcmVzcyksXG4gICAgY29udGFjdDogUHJvcFR5cGVzLmluc3RhbmNlT2YoQ29udGFjdCksXG4gICAgc2hvcDogUHJvcFR5cGVzLmluc3RhbmNlT2YoU2hvcCksXG4gICAgdHlwZTogUHJvcFR5cGVzLm51bWJlcixcbiAgICBjaGFuZ2VBZGRyZXNzOiBQcm9wVHlwZXMuZnVuYyxcbiAgICBuYW1lOiBQcm9wVHlwZXMuc3RyaW5nXG59O1xuZXhwb3J0IGRlZmF1bHQgQWRkcmVzc1NlbGVjdDtcbiIsImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCAqIGFzIFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBDb250YWN0U2VsZWN0IGZyb20gJy4vQ29udGFjdFNlbGVjdCc7XG5pbXBvcnQgQWRkcmVzc1NlbGVjdCBmcm9tICcuL0FkZHJlc3NTZWxlY3QnO1xuaW1wb3J0IHsgQ29udGFjdCB9IGZyb20gJy4uLy4uL21vZGVsL2NvbnRhY3QnO1xuaW1wb3J0IHsgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBPcmRlclN0YXRlIH0gZnJvbSAnLi4vLi4vc3RhdGUvb3JkZXInO1xuaW1wb3J0IHsgY29udGFpbmVyIH0gZnJvbSBcInRzeXJpbmdlXCI7XG5pbXBvcnQgQWNjb3VudFNlbGVjdENvbXBvbmVudCBmcm9tICcuLi9hY2NvdW50L0FjY291bnRTZWxlY3RDb21wb25lbnQnO1xuaW1wb3J0IHsgT3JkZXIgfSBmcm9tICcuLi8uLi9tb2RlbC9vcmRlcic7XG5pbXBvcnQgeyBTaG9wIH0gZnJvbSAnLi4vLi4vbW9kZWwvc2hvcCc7XG52YXIgQ29udGFjdENvbXBvbmVudCA9IGZ1bmN0aW9uIChfYSkge1xuICAgIHZhciBvcmRlciA9IF9hLm9yZGVyLCBzaG9wID0gX2Euc2hvcDtcbiAgICB2YXIgb3JkZXJTdGF0ZSA9IGNvbnRhaW5lci5yZXNvbHZlKE9yZGVyU3RhdGUpO1xuICAgIHZhciBfYiA9IHVzZVN0YXRlKG5ldyBDb250YWN0KCkpLCBjb250YWN0ID0gX2JbMF0sIHNldENvbnRhY3QgPSBfYlsxXTtcbiAgICB2YXIgY2hhbmdlQWRkcmVzcyA9IGZ1bmN0aW9uIChhZGRyZXNzLCB0eXBlKSB7XG4gICAgICAgIGlmICh0eXBlID09IDEpIHtcbiAgICAgICAgICAgIG9yZGVyU3RhdGUuZ2V0Q3VycmVudE9yZGVyKCkudmFsdWUuaW52b2ljZUFkZHJlc3MgPSBhZGRyZXNzO1xuICAgICAgICAgICAgb3JkZXIuaW52b2ljZUFkZHJlc3MgPSBhZGRyZXNzO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlID09IDIpIHtcbiAgICAgICAgICAgIG9yZGVyU3RhdGUuZ2V0Q3VycmVudE9yZGVyKCkudmFsdWUuZGVsaXZlcnlBZGRyZXNzID0gYWRkcmVzcztcbiAgICAgICAgICAgIG9yZGVyLmRlbGl2ZXJ5QWRkcmVzcyA9IGFkZHJlc3M7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGUgPT0gMykge1xuICAgICAgICAgICAgb3JkZXJTdGF0ZS5nZXRDdXJyZW50T3JkZXIoKS52YWx1ZS5zZW5kZXJBZGRyZXNzID0gYWRkcmVzcztcbiAgICAgICAgICAgIG9yZGVyLnNlbmRlckFkZHJlc3MgPSBhZGRyZXNzO1xuICAgICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoUmVhY3QuRnJhZ21lbnQsIG51bGwsXG4gICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgeyBjbGFzc05hbWU6IFwiZmxleFwiIH0sXG4gICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHsgY2xhc3NOYW1lOiBcImZsZXgtMVwiIH0sXG4gICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChDb250YWN0U2VsZWN0LCB7IG9yZGVyOiBvcmRlciwgc2hvcDogc2hvcCwgb25DaGFuZ2U6IHNldENvbnRhY3QgfSkpLFxuICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7IGNsYXNzTmFtZTogXCJmbGV4LTFcIiB9LFxuICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoQWNjb3VudFNlbGVjdENvbXBvbmVudCwgeyBzaG9wOiBzaG9wLCBvcmRlcjogb3JkZXIgfSkpKSxcbiAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7IGNsYXNzTmFtZTogXCJmbGV4IGdhcC0xXCIgfSxcbiAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgeyBjbGFzc05hbWU6IFwiZmxleC0xXCIgfSwgb3JkZXIuY29udGFjdC51dWlkICE9IFwiXCIgJiYgUmVhY3QuY3JlYXRlRWxlbWVudChBZGRyZXNzU2VsZWN0LCB7IGFkZHJlc3M6IG9yZGVyLmludm9pY2VBZGRyZXNzLCBjb250YWN0OiBvcmRlci5jb250YWN0LCBjaGFuZ2VBZGRyZXNzOiBjaGFuZ2VBZGRyZXNzLCBuYW1lOiAnUmVjaG51bmdzYWRyZXNzZScsIHR5cGU6IDEsIHNob3A6IHNob3AgfSkpLFxuICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7IGNsYXNzTmFtZTogXCJmbGV4LTFcIiB9LCBvcmRlci5jb250YWN0LnV1aWQgIT0gXCJcIiAmJiBSZWFjdC5jcmVhdGVFbGVtZW50KEFkZHJlc3NTZWxlY3QsIHsgYWRkcmVzczogb3JkZXIuZGVsaXZlcnlBZGRyZXNzLCBjb250YWN0OiBvcmRlci5jb250YWN0LCBjaGFuZ2VBZGRyZXNzOiBjaGFuZ2VBZGRyZXNzLCBuYW1lOiAnTGllZmVyYWRyZXNzZScsIHR5cGU6IDIsIHNob3A6IHNob3AgfSkpLFxuICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7IGNsYXNzTmFtZTogXCJmbGV4LTFcIiB9LCBvcmRlci5jb250YWN0LnV1aWQgIT0gXCJcIiAmJiBSZWFjdC5jcmVhdGVFbGVtZW50KEFkZHJlc3NTZWxlY3QsIHsgYWRkcmVzczogb3JkZXIuc2VuZGVyQWRkcmVzcywgY2hhbmdlQWRkcmVzczogY2hhbmdlQWRkcmVzcywgY29udGFjdDogb3JkZXIuY29udGFjdCwgbmFtZTogJ0Fic2VuZGVyYWRyZXNzZScsIHR5cGU6IDMsIHNob3A6IHNob3AgfSkpKSkpO1xufTtcbkNvbnRhY3RDb21wb25lbnQucHJvcFR5cGVzID0ge1xuICAgIG9yZGVyOiBQcm9wVHlwZXMuaW5zdGFuY2VPZihPcmRlciksXG4gICAgc2hvcDogUHJvcFR5cGVzLmluc3RhbmNlT2YoU2hvcCksXG59O1xuZXhwb3J0IGRlZmF1bHQgQ29udGFjdENvbXBvbmVudDtcbiIsImltcG9ydCB7IHVzZUVmZmVjdCwgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgTmljZU1vZGFsLCB7IHVzZU1vZGFsIH0gZnJvbSBcIkBlYmF5L25pY2UtbW9kYWwtcmVhY3RcIjtcbmltcG9ydCBCdXR0b24gZnJvbSAnLi4vYmFzZS9CdXR0b24nO1xuaW1wb3J0IHZhbGlkYXRvciBmcm9tIFwiQHJqc2YvdmFsaWRhdG9yLWFqdjZcIjtcbmltcG9ydCBGb3JtIGZyb20gXCJAcmpzZi9jb3JlXCI7XG5pbXBvcnQgeyBDb3VudHJ5U2VydmljZSB9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy9jb3VudHJ5XCI7XG5pbXBvcnQgeyBNb2RhbCB9IGZyb20gXCJmbG93Yml0ZS1yZWFjdFwiO1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbnZhciBDb250YWN0TW9kYWwgPSBOaWNlTW9kYWwuY3JlYXRlKGZ1bmN0aW9uIChfYSkge1xuICAgIHZhciB0aXRsZSA9IF9hLnRpdGxlLCBhY3Rpb24gPSBfYS5hY3Rpb24sIGNvbnRhY3QgPSBfYS5jb250YWN0LCBzaG9wID0gX2Euc2hvcDtcbiAgICB2YXIgY291bnRyeV9hcGkgPSBuZXcgQ291bnRyeVNlcnZpY2UoKTtcbiAgICB2YXIgbW9kYWwgPSB1c2VNb2RhbCgpO1xuICAgIHZhciBfYiA9IHVzZVN0YXRlKHt9KSwgZm9ybURhdGEgPSBfYlswXSwgc2V0Rm9ybURhdGEgPSBfYlsxXTtcbiAgICB2YXIgX2MgPSB1c2VTdGF0ZSh7fSksIHNjaGVtYSA9IF9jWzBdLCBzZXRTY2hlbWEgPSBfY1sxXTtcbiAgICB1c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoY29udGFjdC51aWQgIT0gXCJcIikge1xuICAgICAgICAgICAgc2V0Rm9ybURhdGEoe1xuICAgICAgICAgICAgICAgIGVtYWlsOiBjb250YWN0LnVzZXJuYW1lLFxuICAgICAgICAgICAgICAgIGZpcnN0bmFtZTogY29udGFjdC5sYXlvdXRlcl9kYXRhLmZpcnN0bmFtZSxcbiAgICAgICAgICAgICAgICBsYXN0bmFtZTogY29udGFjdC5sYXlvdXRlcl9kYXRhLmxhc3RuYW1lLFxuICAgICAgICAgICAgICAgIGNvbXBhbnk6IGNvbnRhY3QubGF5b3V0ZXJfZGF0YS5jb21wYW55LFxuICAgICAgICAgICAgICAgIHN0cmVldDogY29udGFjdC5sYXlvdXRlcl9kYXRhLnN0cmVldCxcbiAgICAgICAgICAgICAgICBob3VzZU51bWJlcjogY29udGFjdC5sYXlvdXRlcl9kYXRhLmhvdXNlTnVtYmVyLFxuICAgICAgICAgICAgICAgIHppcDogY29udGFjdC5sYXlvdXRlcl9kYXRhLnppcCxcbiAgICAgICAgICAgICAgICBjaXR5OiBjb250YWN0LmxheW91dGVyX2RhdGEuY2l0eSxcbiAgICAgICAgICAgICAgICBwaG9uZTogY29udGFjdC5sYXlvdXRlcl9kYXRhLnBob25lLFxuICAgICAgICAgICAgICAgIGNvdW50cnk6IGNvbnRhY3QubGF5b3V0ZXJfZGF0YS5jb3VudHJ5LFxuICAgICAgICAgICAgICAgIHVzdGlkOiBjb250YWN0LmxheW91dGVyX2RhdGEudXN0aWRcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfSwgW2NvbnRhY3RdKTtcbiAgICB2YXIgdWlTY2hlbWEgPSB7XG4gICAgICAgIFwidWk6c3VibWl0QnV0dG9uT3B0aW9uc1wiOiB7XG4gICAgICAgICAgICBcInN1Ym1pdFRleHRcIjogXCJTYXZlXCIsXG4gICAgICAgICAgICBcIm5vcmVuZGVyXCI6IHRydWUsXG4gICAgICAgICAgICBcInByb3BzXCI6IHtcbiAgICAgICAgICAgICAgICBcImRpc2FibGVkXCI6IGZhbHNlLFxuICAgICAgICAgICAgICAgIFwiY2xhc3NOYW1lXCI6IFwiYnRuIGJ0bi1pbmZvXCJcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICB9O1xuICAgIHVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvdW50cnlfYXBpLmdldENvdW50cnkoc2hvcCkudGhlbihmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgICAgICAgdmFyIGNvdW50cnlzID0gW107XG4gICAgICAgICAgICBkYXRhLmZvckVhY2goZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgICAgICAgICAgICBjb3VudHJ5cy5wdXNoKHsgJ3RpdGxlJzogaXRlbS5jb2RlLCAnY29uc3QnOiBpdGVtLmNvZGUgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHZhciBzY2hlbWEgPSB7XG4gICAgICAgICAgICAgICAgdGl0bGU6ICdDb250YWN0JyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnb2JqZWN0JyxcbiAgICAgICAgICAgICAgICByZXF1aXJlZDogWydlbWFpbCddLFxuICAgICAgICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgICAgICAgICAgZW1haWw6IHsgdHlwZTogJ3N0cmluZycsIGZvcm1hdDogJ2VtYWlsJywgdGl0bGU6ICdFLU1haWwnIH0sXG4gICAgICAgICAgICAgICAgICAgIGNvbXBhbnk6IHsgdHlwZTogJ3N0cmluZycsIHRpdGxlOiAnQ29tcGFueScgfSxcbiAgICAgICAgICAgICAgICAgICAgZmlyc3RuYW1lOiB7IHR5cGU6ICdzdHJpbmcnLCB0aXRsZTogJ0ZpcnN0bmFtZScgfSxcbiAgICAgICAgICAgICAgICAgICAgbGFzdG5hbWU6IHsgdHlwZTogJ3N0cmluZycsIHRpdGxlOiAnTGFzdG5hbWUnIH0sXG4gICAgICAgICAgICAgICAgICAgIHN0cmVldDogeyB0eXBlOiAnc3RyaW5nJywgdGl0bGU6ICdTdHJlZXQnIH0sXG4gICAgICAgICAgICAgICAgICAgIGhvdXNlTnVtYmVyOiB7IHR5cGU6ICdzdHJpbmcnLCB0aXRsZTogJ0hvdXNlbnVtYmVyJyB9LFxuICAgICAgICAgICAgICAgICAgICB6aXA6IHsgdHlwZTogJ3N0cmluZycsIHRpdGxlOiAnWmlwJyB9LFxuICAgICAgICAgICAgICAgICAgICBjaXR5OiB7IHR5cGU6ICdzdHJpbmcnLCB0aXRsZTogJ0NpdHknIH0sXG4gICAgICAgICAgICAgICAgICAgIHBob25lOiB7IHR5cGU6ICdzdHJpbmcnLCB0aXRsZTogJ1Bob25lJyB9LFxuICAgICAgICAgICAgICAgICAgICB1c3RpZDogeyB0eXBlOiAnc3RyaW5nJywgdGl0bGU6ICdVc3RJZCcgfSxcbiAgICAgICAgICAgICAgICAgICAgY291bnRyeTogeyB0eXBlOiAnc3RyaW5nJywgdGl0bGU6ICdDb3VudHJ5Jywgb25lT2Y6IGNvdW50cnlzIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgc2V0U2NoZW1hKHNjaGVtYSk7XG4gICAgICAgIH0pO1xuICAgIH0sIFtdKTtcbiAgICByZXR1cm4gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoTW9kYWwsIHsgc2hvdzogbW9kYWwudmlzaWJsZSwgb25DbG9zZTogZnVuY3Rpb24gKCkgeyByZXR1cm4gbW9kYWwucmVtb3ZlKCk7IH0gfSxcbiAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChNb2RhbC5IZWFkZXIsIG51bGwsIHRpdGxlKSxcbiAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChNb2RhbC5Cb2R5LCBudWxsLCBhY3Rpb24gPT09IFwiU2F2ZVwiICYmIChSZWFjdC5jcmVhdGVFbGVtZW50KEZvcm0sIHsgc2NoZW1hOiBzY2hlbWEsIGZvcm1EYXRhOiBmb3JtRGF0YSwgdWlTY2hlbWE6IHVpU2NoZW1hLCB2YWxpZGF0b3I6IHZhbGlkYXRvciwgb25DaGFuZ2U6IGZ1bmN0aW9uIChlKSB7IHJldHVybiBzZXRGb3JtRGF0YShlLmZvcm1EYXRhKTsgfSB9KSkpLFxuICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KE1vZGFsLkZvb3RlciwgbnVsbCxcbiAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoQnV0dG9uLCB7IHR5cGU6IDMsIHZhcmlhbnQ6IFwic3VjY2Vzc1wiLCBvbkNsaWNrOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChhY3Rpb24gPT09IFwiU2F2ZVwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZm9ybURhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RhbC5yZXNvbHZlKGZvcm1EYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RhbC5yZW1vdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1vZGFsLnJlc29sdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1vZGFsLnJlbW92ZSgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSB9KSxcbiAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoQnV0dG9uLCB7IHR5cGU6IDQsIHZhcmlhbnQ6IFwid2FybmluZ1wiLCBvbkNsaWNrOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIG1vZGFsLnJlbW92ZSgpO1xuICAgICAgICAgICAgICAgIH0gfSkpKSk7XG59KTtcbmV4cG9ydCBkZWZhdWx0IENvbnRhY3RNb2RhbDtcbiIsImltcG9ydCB7IENvbnRhY3QgfSBmcm9tIFwiLi4vLi4vbW9kZWwvY29udGFjdFwiO1xuaW1wb3J0ICogYXMgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgeyBTaG9wIH0gZnJvbSBcIi4uLy4uL21vZGVsL3Nob3BcIjtcbmltcG9ydCBCdXR0b24gZnJvbSBcIi4uL2Jhc2UvQnV0dG9uXCI7XG5pbXBvcnQgQ29udGFjdE1vZGFsIGZyb20gXCIuL0NvbnRhY3RNb2RhbFwiO1xuaW1wb3J0IHsgdXNlQ2FsbGJhY2sgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyB1c2VNb2RhbCB9IGZyb20gJ0BlYmF5L25pY2UtbW9kYWwtcmVhY3QnO1xuaW1wb3J0IHsgQ29udGFjdFNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvY29udGFjdFwiO1xuaW1wb3J0IHsgQWRkcmVzcyB9IGZyb20gXCIuLi8uLi9tb2RlbC9hZGRyZXNzXCI7XG5pbXBvcnQgeyBBZGRyZXNzU2VydmljZSB9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy9hZGRyZXNzXCI7XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xudmFyIENvbnRhY3RNb2RhbENvbXBvbmVudCA9IGZ1bmN0aW9uIChfYSkge1xuICAgIHZhciBzaG9wID0gX2Euc2hvcCwgaGFuZGxlQWRkID0gX2EuaGFuZGxlQWRkLCBoYW5kbGVFZGl0ID0gX2EuaGFuZGxlRWRpdCwgY29udGFjdCA9IF9hLmNvbnRhY3Q7XG4gICAgdmFyIGNvbnRhY3RNb2RhbCA9IHVzZU1vZGFsKENvbnRhY3RNb2RhbCk7XG4gICAgdmFyIHNob3dBZGRNb2RhbCA9IHVzZUNhbGxiYWNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29udGFjdE1vZGFsLnNob3coeyB0aXRsZTogJ0FkZCBDb250YWN0JywgYWN0aW9uOiAnU2F2ZScsIHNob3A6IHNob3AsIGNvbnRhY3Q6IG5ldyBDb250YWN0KCkgfSkudGhlbihmdW5jdGlvbiAoZm9ybURhdGEpIHtcbiAgICAgICAgICAgIGFkZENvbnRhY3QoZm9ybURhdGEpO1xuICAgICAgICB9KTtcbiAgICB9LCBbY29udGFjdE1vZGFsXSk7XG4gICAgdmFyIHNob3dFZGl0TW9kYWwgPSB1c2VDYWxsYmFjayhmdW5jdGlvbiAoY29udGFjdCkge1xuICAgICAgICBjb250YWN0ID0gY29udGFjdDtcbiAgICAgICAgY29udGFjdE1vZGFsLnNob3coeyB0aXRsZTogJ0VkaXQgQ29udGFjdCcsIGFjdGlvbjogJ1NhdmUnLCBjb250YWN0OiBjb250YWN0LCBzaG9wOiBzaG9wIH0pLnRoZW4oZnVuY3Rpb24gKGZvcm1EYXRhKSB7XG4gICAgICAgICAgICBjb250YWN0LnBhcnNlRnJvbUZvcm1EYXRhKGZvcm1EYXRhKTtcbiAgICAgICAgICAgIHVwZGF0ZUNvbnRhY3QoY29udGFjdCk7XG4gICAgICAgIH0pO1xuICAgIH0sIFtjb250YWN0TW9kYWxdKTtcbiAgICB2YXIgdXBkYXRlQ29udGFjdCA9IGZ1bmN0aW9uIChjb250YWN0KSB7XG4gICAgICAgIHZhciBjb250YWN0X2FwaSA9IG5ldyBDb250YWN0U2VydmljZSgpO1xuICAgICAgICBjb250YWN0X2FwaS51cGRhdGVDb250YWN0KGNvbnRhY3QpLnRoZW4oZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgICAgIGhhbmRsZUVkaXQoY29udGFjdCk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgdmFyIGFkZENvbnRhY3QgPSBmdW5jdGlvbiAoZm9ybURhdGEpIHtcbiAgICAgICAgdmFyIGNvbnRhY3QgPSBuZXcgQ29udGFjdCgpO1xuICAgICAgICBjb250YWN0LnBhcnNlRnJvbUZvcm1EYXRhKGZvcm1EYXRhLCBzaG9wKTtcbiAgICAgICAgdmFyIGNvbnRhY3RfYXBpID0gbmV3IENvbnRhY3RTZXJ2aWNlKCk7XG4gICAgICAgIGNvbnRhY3RfYXBpLmNyZWF0ZUNvbnRhY3QoY29udGFjdCkudGhlbihmdW5jdGlvbiAoZSkge1xuICAgICAgICAgICAgY29udGFjdC5wYXJzZUZyb21Kc29uKGUpO1xuICAgICAgICAgICAgdmFyIGFkZHJlc3MgPSBuZXcgQWRkcmVzcygpO1xuICAgICAgICAgICAgYWRkcmVzcy5wYXJzZUZyb21Gb3JtRGF0YShmb3JtRGF0YSk7XG4gICAgICAgICAgICBhZGRyZXNzLmNvbnRhY3QudXVpZCA9IGNvbnRhY3QudXVpZDtcbiAgICAgICAgICAgIGFkZHJlc3MudHlwZSA9IDE7XG4gICAgICAgICAgICB2YXIgYWRkcmVzc19hcGkgPSBuZXcgQWRkcmVzc1NlcnZpY2UoKTtcbiAgICAgICAgICAgIGFkZHJlc3NfYXBpLmNyZWF0ZShhZGRyZXNzKTtcbiAgICAgICAgICAgIGFkZHJlc3MudHlwZSA9IDI7XG4gICAgICAgICAgICBhZGRyZXNzX2FwaS5jcmVhdGUoYWRkcmVzcyk7XG4gICAgICAgICAgICBoYW5kbGVBZGQoY29udGFjdCk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgcmV0dXJuIChSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHsgY2xhc3NOYW1lOiAnZmxleCBnYXAtMScgfSxcbiAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChCdXR0b24sIHsgdHlwZTogMSwgdmFyaWFudDogXCJzdWNjZXNzXCIsIG9uQ2xpY2s6IHNob3dBZGRNb2RhbCB9KSxcbiAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChCdXR0b24sIHsgdHlwZTogMiwgdmFyaWFudDogXCJpbmZvXCIsIG9uQ2xpY2s6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBzaG93RWRpdE1vZGFsKGNvbnRhY3QpO1xuICAgICAgICAgICAgfSB9KSkpO1xufTtcbkNvbnRhY3RNb2RhbENvbXBvbmVudC5wcm9wVHlwZXMgPSB7XG4gICAgc2hvcDogUHJvcFR5cGVzLmluc3RhbmNlT2YoU2hvcCksXG4gICAgaGFuZGxlQWRkOiBQcm9wVHlwZXMuZnVuYyxcbiAgICBoYW5kbGVFZGl0OiBQcm9wVHlwZXMuZnVuYyxcbiAgICBjb250YWN0OiBQcm9wVHlwZXMuaW5zdGFuY2VPZihDb250YWN0KVxufTtcbmV4cG9ydCBkZWZhdWx0IENvbnRhY3RNb2RhbENvbXBvbmVudDtcbiIsInZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gICAgfSk7XG59O1xudmFyIF9fZ2VuZXJhdG9yID0gKHRoaXMgJiYgdGhpcy5fX2dlbmVyYXRvcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIGJvZHkpIHtcbiAgICB2YXIgXyA9IHsgbGFiZWw6IDAsIHNlbnQ6IGZ1bmN0aW9uKCkgeyBpZiAodFswXSAmIDEpIHRocm93IHRbMV07IHJldHVybiB0WzFdOyB9LCB0cnlzOiBbXSwgb3BzOiBbXSB9LCBmLCB5LCB0LCBnO1xuICAgIHJldHVybiBnID0geyBuZXh0OiB2ZXJiKDApLCBcInRocm93XCI6IHZlcmIoMSksIFwicmV0dXJuXCI6IHZlcmIoMikgfSwgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIChnW1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbigpIHsgcmV0dXJuIHRoaXM7IH0pLCBnO1xuICAgIGZ1bmN0aW9uIHZlcmIobikgeyByZXR1cm4gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIHN0ZXAoW24sIHZdKTsgfTsgfVxuICAgIGZ1bmN0aW9uIHN0ZXAob3ApIHtcbiAgICAgICAgaWYgKGYpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuXCIpO1xuICAgICAgICB3aGlsZSAoXykgdHJ5IHtcbiAgICAgICAgICAgIGlmIChmID0gMSwgeSAmJiAodCA9IG9wWzBdICYgMiA/IHlbXCJyZXR1cm5cIl0gOiBvcFswXSA/IHlbXCJ0aHJvd1wiXSB8fCAoKHQgPSB5W1wicmV0dXJuXCJdKSAmJiB0LmNhbGwoeSksIDApIDogeS5uZXh0KSAmJiAhKHQgPSB0LmNhbGwoeSwgb3BbMV0pKS5kb25lKSByZXR1cm4gdDtcbiAgICAgICAgICAgIGlmICh5ID0gMCwgdCkgb3AgPSBbb3BbMF0gJiAyLCB0LnZhbHVlXTtcbiAgICAgICAgICAgIHN3aXRjaCAob3BbMF0pIHtcbiAgICAgICAgICAgICAgICBjYXNlIDA6IGNhc2UgMTogdCA9IG9wOyBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIDQ6IF8ubGFiZWwrKzsgcmV0dXJuIHsgdmFsdWU6IG9wWzFdLCBkb25lOiBmYWxzZSB9O1xuICAgICAgICAgICAgICAgIGNhc2UgNTogXy5sYWJlbCsrOyB5ID0gb3BbMV07IG9wID0gWzBdOyBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBjYXNlIDc6IG9wID0gXy5vcHMucG9wKCk7IF8udHJ5cy5wb3AoKTsgY29udGludWU7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEodCA9IF8udHJ5cywgdCA9IHQubGVuZ3RoID4gMCAmJiB0W3QubGVuZ3RoIC0gMV0pICYmIChvcFswXSA9PT0gNiB8fCBvcFswXSA9PT0gMikpIHsgXyA9IDA7IGNvbnRpbnVlOyB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gMyAmJiAoIXQgfHwgKG9wWzFdID4gdFswXSAmJiBvcFsxXSA8IHRbM10pKSkgeyBfLmxhYmVsID0gb3BbMV07IGJyZWFrOyB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gNiAmJiBfLmxhYmVsIDwgdFsxXSkgeyBfLmxhYmVsID0gdFsxXTsgdCA9IG9wOyBicmVhazsgfVxuICAgICAgICAgICAgICAgICAgICBpZiAodCAmJiBfLmxhYmVsIDwgdFsyXSkgeyBfLmxhYmVsID0gdFsyXTsgXy5vcHMucHVzaChvcCk7IGJyZWFrOyB9XG4gICAgICAgICAgICAgICAgICAgIGlmICh0WzJdKSBfLm9wcy5wb3AoKTtcbiAgICAgICAgICAgICAgICAgICAgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG9wID0gYm9keS5jYWxsKHRoaXNBcmcsIF8pO1xuICAgICAgICB9IGNhdGNoIChlKSB7IG9wID0gWzYsIGVdOyB5ID0gMDsgfSBmaW5hbGx5IHsgZiA9IHQgPSAwOyB9XG4gICAgICAgIGlmIChvcFswXSAmIDUpIHRocm93IG9wWzFdOyByZXR1cm4geyB2YWx1ZTogb3BbMF0gPyBvcFsxXSA6IHZvaWQgMCwgZG9uZTogdHJ1ZSB9O1xuICAgIH1cbn07XG5pbXBvcnQgKiBhcyBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgeyBBc3luY1BhZ2luYXRlIH0gZnJvbSBcInJlYWN0LXNlbGVjdC1hc3luYy1wYWdpbmF0ZVwiO1xuaW1wb3J0IHsgQ29udGFjdFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9jb250YWN0JztcbmltcG9ydCB7IFNob3AgfSBmcm9tICcuLi8uLi9tb2RlbC9zaG9wJztcbmltcG9ydCB7IHVzZUVmZmVjdCwgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBjb250YWluZXIgfSBmcm9tICd0c3lyaW5nZSc7XG5pbXBvcnQgeyBPcmRlclN0YXRlIH0gZnJvbSAnLi4vLi4vc3RhdGUvb3JkZXInO1xuaW1wb3J0IENvbnRhY3RNb2RhbENvbXBvbmVudCBmcm9tIFwiLi9Db250YWN0TW9kYWxDb21wb25lbnRcIjtcbmltcG9ydCB7IE9yZGVyIH0gZnJvbSAnLi4vLi4vbW9kZWwvb3JkZXInO1xuaW1wb3J0IHsgU2VsZWN0TGFiZWwgfSBmcm9tICcuLi9iYXNlL1NlbGVjdExhYmVsJztcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG52YXIgQ29udGFjdFNlbGVjdCA9IGZ1bmN0aW9uIChfYSkge1xuICAgIHZhciBvcmRlciA9IF9hLm9yZGVyLCBzaG9wID0gX2Euc2hvcCwgb25DaGFuZ2UgPSBfYS5vbkNoYW5nZTtcbiAgICB2YXIgX2IgPSB1c2VTdGF0ZShudWxsKSwgc2hvcFV1aWQgPSBfYlswXSwgc2V0U2hvcFV1aWQgPSBfYlsxXTtcbiAgICB2YXIgb3JkZXJTdGF0ZSA9IGNvbnRhaW5lci5yZXNvbHZlKE9yZGVyU3RhdGUpO1xuICAgIHZhciBjb250YWN0X2FwaSA9IG5ldyBDb250YWN0U2VydmljZSgpO1xuICAgIHVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgICAgIHNldFNob3BVdWlkKHNob3AudXVpZCk7XG4gICAgfSwgW3Nob3BdKTtcbiAgICB2YXIgbG9hZE9wdGlvbnMgPSBmdW5jdGlvbiAoc2VhcmNoUXVlcnksIGxvYWRlZE9wdGlvbnMsIF9hKSB7XG4gICAgICAgIHZhciBwYWdlID0gX2EucGFnZTtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih2b2lkIDAsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgY29udGFjdHM7XG4gICAgICAgICAgICByZXR1cm4gX19nZW5lcmF0b3IodGhpcywgZnVuY3Rpb24gKF9iKSB7XG4gICAgICAgICAgICAgICAgc3dpdGNoIChfYi5sYWJlbCkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDA6IHJldHVybiBbNCAvKnlpZWxkKi8sIGNvbnRhY3RfYXBpLmdldENvbnRhY3RzKHNlYXJjaFF1ZXJ5LCBwYWdlLCBzaG9wKV07XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhY3RzID0gX2Iuc2VudCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFsyIC8qcmV0dXJuKi8sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uczogY29udGFjdHMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc01vcmU6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRpdGlvbmFsOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWdlOiBwYWdlICsgMSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICB2YXIgc2V0Q29udGFjdEluT3JkZXIgPSBmdW5jdGlvbiAob3B0aW9uKSB7XG4gICAgICAgIG9yZGVyU3RhdGUuZ2V0Q3VycmVudE9yZGVyKCkudmFsdWUuY29udGFjdCA9IG9wdGlvbjtcbiAgICAgICAgb3JkZXIuY29udGFjdCA9IG9wdGlvbjtcbiAgICAgICAgb25DaGFuZ2Uob3B0aW9uKTtcbiAgICB9O1xuICAgIHZhciBoYW5kbGVBZGQgPSBmdW5jdGlvbiAoY29udGFjdCkge1xuICAgICAgICBzZXRTaG9wVXVpZChNYXRoLnJhbmRvbSgpKTtcbiAgICAgICAgc2V0Q29udGFjdEluT3JkZXIoY29udGFjdCk7XG4gICAgfTtcbiAgICB2YXIgaGFuZGxlRWRpdCA9IGZ1bmN0aW9uIChjb250YWN0KSB7XG4gICAgICAgIHNldFNob3BVdWlkKE1hdGgucmFuZG9tKCkpO1xuICAgICAgICBzZXRDb250YWN0SW5PcmRlcihjb250YWN0KTtcbiAgICB9O1xuICAgIHJldHVybiAoUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7IGNsYXNzTmFtZTogXCJmbGV4IGdhcC0xXCIgfSxcbiAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7IGNsYXNzTmFtZTogXCJmbGV4LTFcIiB9LFxuICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChBc3luY1BhZ2luYXRlLCB7IGRlZmF1bHRPcHRpb25zOiB0cnVlLCBjbGFzc05hbWU6IFwiXCIuY29uY2F0KG9yZGVyU3RhdGUuZ2V0Q3VycmVudE9yZGVyKCkudmFsdWUuY29udGFjdC51c2VybmFtZSA9PSBcIlwiID8gXCJib3JkZXIgYm9yZGVyLWRhbmdlclwiIDogXCJcIiksIGtleTogSlNPTi5zdHJpbmdpZnkoc2hvcFV1aWQpLCBkZWZhdWx0VmFsdWU6IG9yZGVyLmNvbnRhY3QsIGNvbXBvbmVudHM6IHsgQ29udHJvbDogU2VsZWN0TGFiZWwgfSwgcGxhY2Vob2xkZXI6ICcnLCBuYW1lOiAnS3VuZGUnLCB2YWx1ZTogb3JkZXIuY29udGFjdCwgbG9hZE9wdGlvbnM6IGxvYWRPcHRpb25zLCBnZXRPcHRpb25WYWx1ZTogZnVuY3Rpb24gKG9wdGlvbikgeyByZXR1cm4gb3B0aW9uLnV1aWQ7IH0sIGdldE9wdGlvbkxhYmVsOiBmdW5jdGlvbiAob3B0aW9uKSB7IHJldHVybiBvcHRpb24udXNlcm5hbWU7IH0sIG9uQ2hhbmdlOiBzZXRDb250YWN0SW5PcmRlciwgaXNTZWFyY2hhYmxlOiB0cnVlLCBhZGRpdGlvbmFsOiB7XG4gICAgICAgICAgICAgICAgICAgIHBhZ2U6IDEsXG4gICAgICAgICAgICAgICAgfSB9KSksXG4gICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgbnVsbCxcbiAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoQ29udGFjdE1vZGFsQ29tcG9uZW50LCB7IHNob3A6IHNob3AsIGNvbnRhY3Q6IG9yZGVyLmNvbnRhY3QsIGhhbmRsZUFkZDogaGFuZGxlQWRkLCBoYW5kbGVFZGl0OiBoYW5kbGVFZGl0IH0pKSkpO1xufTtcbkNvbnRhY3RTZWxlY3QucHJvcFR5cGVzID0ge1xuICAgIG9yZGVyOiBQcm9wVHlwZXMuaW5zdGFuY2VPZihPcmRlciksXG4gICAgb25DaGFuZ2U6IFByb3BUeXBlcy5mdW5jLFxuICAgIHNob3A6IFByb3BUeXBlcy5pbnN0YW5jZU9mKFNob3ApLFxufTtcbmV4cG9ydCBkZWZhdWx0IENvbnRhY3RTZWxlY3Q7XG4iLCJpbXBvcnQgeyB1c2VFZmZlY3QsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgY29udGFpbmVyIH0gZnJvbSAndHN5cmluZ2UnO1xuaW1wb3J0IHsgT3JkZXJTdGF0ZSB9IGZyb20gJy4uLy4uL3N0YXRlL29yZGVyJztcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG52YXIgRHJhZnRDb21wb25lbnQgPSBmdW5jdGlvbiAoX2EpIHtcbiAgICB2YXIgb3JkZXIgPSBfYS5vcmRlcjtcbiAgICB2YXIgX2IgPSB1c2VTdGF0ZSh0cnVlKSwgZHJhZnQgPSBfYlswXSwgc2V0RHJhZnQgPSBfYlsxXTtcbiAgICB2YXIgb3JkZXJTdGF0ZSA9IGNvbnRhaW5lci5yZXNvbHZlKE9yZGVyU3RhdGUpO1xuICAgIHZhciBvbkNoYW5nZSA9IGZ1bmN0aW9uIChvcHRpb24pIHtcbiAgICAgICAgdmFyIG9yZGVyT2JqID0gb3JkZXJTdGF0ZS5nZXRDdXJyZW50T3JkZXIoKS52YWx1ZTtcbiAgICAgICAgb3JkZXJPYmouZHJhZnQgPSAhZHJhZnQ7XG4gICAgICAgIG9yZGVyU3RhdGUuc2V0Q3VycmVudE9yZGVyKG9yZGVyT2JqKTtcbiAgICAgICAgc2V0RHJhZnQoIWRyYWZ0KTtcbiAgICB9O1xuICAgIHVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgICAgIHNldERyYWZ0KG9yZGVyLmRyYWZ0KTtcbiAgICB9LCBbb3JkZXIuZHJhZnRdKTtcbiAgICByZXR1cm4gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgeyBjbGFzc05hbWU6IFwiZ2FwLTJcIiB9LFxuICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwibGFiZWxcIiwgeyBjbGFzc05hbWU6IFwiaW5saW5lLWZsZXggaXRlbXMtY2VudGVyIGN1cnNvci1wb2ludGVyXCIgfSxcbiAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJpbnB1dFwiLCB7IHR5cGU6IFwiY2hlY2tib3hcIiwgdmFsdWU6IFwiMVwiLCBjbGFzc05hbWU6IFwic3Itb25seSBwZWVyXCIsIGRlZmF1bHRDaGVja2VkOiBkcmFmdCwgb25DaGFuZ2U6IGZ1bmN0aW9uIChlKSB7IHJldHVybiBvbkNoYW5nZShlKTsgfSB9KSxcbiAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgeyBjbGFzc05hbWU6IFwicmVsYXRpdmUgdy0xMSBoLTYgYmctZ3JheS0yMDAgcm91bmRlZC1mdWxsIHBlZXIgcGVlci1mb2N1czpyaW5nLTQgcGVlci1mb2N1czpyaW5nLWJsdWUtMzAwIGRhcms6cGVlci1mb2N1czpyaW5nLWJsdWUtODAwIGRhcms6YmctZ3JheS03MDAgcGVlci1jaGVja2VkOmFmdGVyOnRyYW5zbGF0ZS14LWZ1bGwgcnRsOnBlZXItY2hlY2tlZDphZnRlcjotdHJhbnNsYXRlLXgtZnVsbCBwZWVyLWNoZWNrZWQ6YWZ0ZXI6Ym9yZGVyLXdoaXRlIGFmdGVyOmNvbnRlbnQtWycnXSBhZnRlcjphYnNvbHV0ZSBhZnRlcjp0b3AtMC41IGFmdGVyOnN0YXJ0LVsycHhdIGFmdGVyOmJnLXdoaXRlIGFmdGVyOmJvcmRlci1ncmF5LTMwMCBhZnRlcjpib3JkZXIgYWZ0ZXI6cm91bmRlZC1mdWxsIGFmdGVyOmgtNSBhZnRlcjp3LTUgYWZ0ZXI6dHJhbnNpdGlvbi1hbGwgZGFyazpib3JkZXItZ3JheS02MDAgcGVlci1jaGVja2VkOmJnLWJsdWUtNjAwXCIgfSksXG4gICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwic3BhblwiLCB7IGNsYXNzTmFtZTogXCJtcy0zIHRleHQtc20gZm9udC1tZWRpdW0gdGV4dC1ncmF5LTkwMCBkYXJrOnRleHQtZ3JheS0zMDBcIiB9LCBcIkVudHd1cmZcIikpKSk7XG59O1xuZXhwb3J0IGRlZmF1bHQgRHJhZnRDb21wb25lbnQ7XG4iLCJpbXBvcnQgKiBhcyBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCB7IFNob3AgfSBmcm9tIFwiLi4vLi4vbW9kZWwvc2hvcFwiO1xuaW1wb3J0IHsgY29udGFpbmVyIH0gZnJvbSBcInRzeXJpbmdlXCI7XG5pbXBvcnQgeyBPcmRlclN0YXRlIH0gZnJvbSBcIi4uLy4uL3N0YXRlL29yZGVyXCI7XG5pbXBvcnQgeyBPcmRlciB9IGZyb20gXCIuLi8uLi9tb2RlbC9vcmRlclwiO1xuaW1wb3J0IHsgdXNlRWZmZWN0LCB1c2VTdGF0ZSB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbnZhciBJbmZvRmllbGRDb21wb25lbnQgPSBmdW5jdGlvbiAoX2EpIHtcbiAgICB2YXIgc2hvcCA9IF9hLnNob3AsIG9yZGVyID0gX2Eub3JkZXI7XG4gICAgdmFyIF9iID0gdXNlU3RhdGUoXCJcIiksIGJhc2tldEZpZWxkMSA9IF9iWzBdLCBzZXRCYXNrZXRGaWVsZDEgPSBfYlsxXTtcbiAgICB2YXIgX2MgPSB1c2VTdGF0ZShcIlwiKSwgYmFza2V0RmllbGQyID0gX2NbMF0sIHNldEJhc2tldEZpZWxkMiA9IF9jWzFdO1xuICAgIHZhciBvcmRlclN0YXRlID0gY29udGFpbmVyLnJlc29sdmUoT3JkZXJTdGF0ZSk7XG4gICAgdXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgc2V0QmFza2V0RmllbGQxKG9yZGVyLmJhc2tldEZpZWxkMSk7XG4gICAgICAgIHNldEJhc2tldEZpZWxkMihvcmRlci5iYXNrZXRGaWVsZDEpO1xuICAgIH0sIFtvcmRlci5iYXNrZXRGaWVsZDEsIG9yZGVyLmJhc2tldEZpZWxkMl0pO1xuICAgIHZhciBjaGFuZ2VCYXNrZXRGaWVsZDEgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgdmFyIG9yZGVyT2JqID0gb3JkZXJTdGF0ZS5nZXRDdXJyZW50T3JkZXIoKS5nZXRWYWx1ZSgpO1xuICAgICAgICBvcmRlck9iai5iYXNrZXRGaWVsZDEgPSB2YWx1ZTtcbiAgICAgICAgb3JkZXJTdGF0ZS5zZXRDdXJyZW50T3JkZXIob3JkZXJPYmopO1xuICAgICAgICBzZXRCYXNrZXRGaWVsZDEodmFsdWUpO1xuICAgIH07XG4gICAgdmFyIGNoYW5nZUJhc2tldEZpZWxkMiA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICB2YXIgb3JkZXJPYmogPSBvcmRlclN0YXRlLmdldEN1cnJlbnRPcmRlcigpLmdldFZhbHVlKCk7XG4gICAgICAgIG9yZGVyT2JqLmJhc2tldEZpZWxkMiA9IHZhbHVlO1xuICAgICAgICBvcmRlclN0YXRlLnNldEN1cnJlbnRPcmRlcihvcmRlck9iaik7XG4gICAgICAgIHNldEJhc2tldEZpZWxkMih2YWx1ZSk7XG4gICAgfTtcbiAgICByZXR1cm4gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgeyBjbGFzc05hbWU6IFwiXCIgfSxcbiAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7IGNsYXNzTmFtZTogXCJmbGV4XCIgfSxcbiAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgeyBjbGFzc05hbWU6IFwiZmxleC0xXCIgfSxcbiAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHsgY2xhc3NOYW1lOiAnZmxleCBnYXAtMScgfSxcbiAgICAgICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcImlucHV0XCIsIHsgdHlwZTogXCJ0ZXh0XCIsIG5hbWU6IFwiYmFza2V0RmllbGQxXCIsIHZhbHVlOiBiYXNrZXRGaWVsZDEsIG9uQ2hhbmdlOiBmdW5jdGlvbiAoZSkgeyByZXR1cm4gY2hhbmdlQmFza2V0RmllbGQxKGUudGFyZ2V0LnZhbHVlKTsgfSwgY2xhc3NOYW1lOiBcImJnLWdyYXktNTAgYm9yZGVyIGJvcmRlci1ncmF5LTMwMCB0ZXh0LWdyYXktOTAwIHRleHQtc20gcm91bmRlZC1sZyBmb2N1czpyaW5nLWJsdWUtNTAwIGZvY3VzOmJvcmRlci1ibHVlLTUwMCBibG9jayB3LWZ1bGwgcC0yLjUgZGFyazpiZy1ncmF5LTcwMCBkYXJrOmJvcmRlci1ncmF5LTYwMCBkYXJrOnBsYWNlaG9sZGVyLWdyYXktNDAwIGRhcms6dGV4dC13aGl0ZSBkYXJrOmZvY3VzOnJpbmctYmx1ZS01MDAgZGFyazpmb2N1czpib3JkZXItYmx1ZS01MDBcIiwgcGxhY2Vob2xkZXI6IFwiSW5mbyAxXCIgfSksXG4gICAgICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsYWJlbFwiLCBudWxsLCBzaG9wLmJhc2tldEZpZWxkMSkpKSxcbiAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgeyBjbGFzc05hbWU6IFwiZmxleC0xXCIgfSxcbiAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHsgY2xhc3NOYW1lOiAnZmxleCBnYXAtMScgfSxcbiAgICAgICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcImlucHV0XCIsIHsgdHlwZTogXCJ0ZXh0XCIsIG5hbWU6IFwiYmFza2V0RmllbGQyXCIsIHZhbHVlOiBiYXNrZXRGaWVsZDIsIG9uQ2hhbmdlOiBmdW5jdGlvbiAoZSkgeyByZXR1cm4gY2hhbmdlQmFza2V0RmllbGQyKGUudGFyZ2V0LnZhbHVlKTsgfSwgY2xhc3NOYW1lOiBcImJnLWdyYXktNTAgYm9yZGVyIGJvcmRlci1ncmF5LTMwMCB0ZXh0LWdyYXktOTAwIHRleHQtc20gcm91bmRlZC1sZyBmb2N1czpyaW5nLWJsdWUtNTAwIGZvY3VzOmJvcmRlci1ibHVlLTUwMCBibG9jayB3LWZ1bGwgcC0yLjUgZGFyazpiZy1ncmF5LTcwMCBkYXJrOmJvcmRlci1ncmF5LTYwMCBkYXJrOnBsYWNlaG9sZGVyLWdyYXktNDAwIGRhcms6dGV4dC13aGl0ZSBkYXJrOmZvY3VzOnJpbmctYmx1ZS01MDAgZGFyazpmb2N1czpib3JkZXItYmx1ZS01MDBcIiwgcGxhY2Vob2xkZXI6IFwiSW5mbyAyXCIgfSksXG4gICAgICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsYWJlbFwiLCBudWxsLCBzaG9wLmJhc2tldEZpZWxkMikpKSkpKTtcbn07XG5JbmZvRmllbGRDb21wb25lbnQucHJvcFR5cGVzID0ge1xuICAgIG9yZGVyOiBQcm9wVHlwZXMuaW5zdGFuY2VPZihPcmRlciksXG4gICAgc2hvcDogUHJvcFR5cGVzLmluc3RhbmNlT2YoU2hvcCksXG59O1xuZXhwb3J0IGRlZmF1bHQgSW5mb0ZpZWxkQ29tcG9uZW50O1xuIiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0ICogYXMgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgeyBPcmRlciB9IGZyb20gXCIuLi8uLi9tb2RlbC9vcmRlclwiO1xudmFyIE9yZGVyQWxpYXNDb21wb25lbnQgPSBmdW5jdGlvbiAoX2EpIHtcbiAgICB2YXIgb3JkZXIgPSBfYS5vcmRlcjtcbiAgICByZXR1cm4gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgeyBjbGFzc05hbWU6IFwibS0xIHAtMlwiIH0sXG4gICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJoNFwiLCBudWxsLFxuICAgICAgICAgICAgXCJOUjogXCIsXG4gICAgICAgICAgICBvcmRlci5hbGlhcykpKTtcbn07XG5PcmRlckFsaWFzQ29tcG9uZW50LnByb3BUeXBlcyA9IHtcbiAgICBvcmRlcjogUHJvcFR5cGVzLmluc3RhbmNlT2YoT3JkZXIpLFxufTtcbmV4cG9ydCBkZWZhdWx0IE9yZGVyQWxpYXNDb21wb25lbnQ7XG4iLCJ2YXIgX19hd2FpdGVyID0gKHRoaXMgJiYgdGhpcy5fX2F3YWl0ZXIpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcbiAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xuICAgIH0pO1xufTtcbnZhciBfX2dlbmVyYXRvciA9ICh0aGlzICYmIHRoaXMuX19nZW5lcmF0b3IpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBib2R5KSB7XG4gICAgdmFyIF8gPSB7IGxhYmVsOiAwLCBzZW50OiBmdW5jdGlvbigpIHsgaWYgKHRbMF0gJiAxKSB0aHJvdyB0WzFdOyByZXR1cm4gdFsxXTsgfSwgdHJ5czogW10sIG9wczogW10gfSwgZiwgeSwgdCwgZztcbiAgICByZXR1cm4gZyA9IHsgbmV4dDogdmVyYigwKSwgXCJ0aHJvd1wiOiB2ZXJiKDEpLCBcInJldHVyblwiOiB2ZXJiKDIpIH0sIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiAoZ1tTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzOyB9KSwgZztcbiAgICBmdW5jdGlvbiB2ZXJiKG4pIHsgcmV0dXJuIGZ1bmN0aW9uICh2KSB7IHJldHVybiBzdGVwKFtuLCB2XSk7IH07IH1cbiAgICBmdW5jdGlvbiBzdGVwKG9wKSB7XG4gICAgICAgIGlmIChmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLlwiKTtcbiAgICAgICAgd2hpbGUgKF8pIHRyeSB7XG4gICAgICAgICAgICBpZiAoZiA9IDEsIHkgJiYgKHQgPSBvcFswXSAmIDIgPyB5W1wicmV0dXJuXCJdIDogb3BbMF0gPyB5W1widGhyb3dcIl0gfHwgKCh0ID0geVtcInJldHVyblwiXSkgJiYgdC5jYWxsKHkpLCAwKSA6IHkubmV4dCkgJiYgISh0ID0gdC5jYWxsKHksIG9wWzFdKSkuZG9uZSkgcmV0dXJuIHQ7XG4gICAgICAgICAgICBpZiAoeSA9IDAsIHQpIG9wID0gW29wWzBdICYgMiwgdC52YWx1ZV07XG4gICAgICAgICAgICBzd2l0Y2ggKG9wWzBdKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAwOiBjYXNlIDE6IHQgPSBvcDsgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSA0OiBfLmxhYmVsKys7IHJldHVybiB7IHZhbHVlOiBvcFsxXSwgZG9uZTogZmFsc2UgfTtcbiAgICAgICAgICAgICAgICBjYXNlIDU6IF8ubGFiZWwrKzsgeSA9IG9wWzFdOyBvcCA9IFswXTsgY29udGludWU7XG4gICAgICAgICAgICAgICAgY2FzZSA3OiBvcCA9IF8ub3BzLnBvcCgpOyBfLnRyeXMucG9wKCk7IGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIGlmICghKHQgPSBfLnRyeXMsIHQgPSB0Lmxlbmd0aCA+IDAgJiYgdFt0Lmxlbmd0aCAtIDFdKSAmJiAob3BbMF0gPT09IDYgfHwgb3BbMF0gPT09IDIpKSB7IF8gPSAwOyBjb250aW51ZTsgfVxuICAgICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDMgJiYgKCF0IHx8IChvcFsxXSA+IHRbMF0gJiYgb3BbMV0gPCB0WzNdKSkpIHsgXy5sYWJlbCA9IG9wWzFdOyBicmVhazsgfVxuICAgICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDYgJiYgXy5sYWJlbCA8IHRbMV0pIHsgXy5sYWJlbCA9IHRbMV07IHQgPSBvcDsgYnJlYWs7IH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHQgJiYgXy5sYWJlbCA8IHRbMl0pIHsgXy5sYWJlbCA9IHRbMl07IF8ub3BzLnB1c2gob3ApOyBicmVhazsgfVxuICAgICAgICAgICAgICAgICAgICBpZiAodFsyXSkgXy5vcHMucG9wKCk7XG4gICAgICAgICAgICAgICAgICAgIF8udHJ5cy5wb3AoKTsgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvcCA9IGJvZHkuY2FsbCh0aGlzQXJnLCBfKTtcbiAgICAgICAgfSBjYXRjaCAoZSkgeyBvcCA9IFs2LCBlXTsgeSA9IDA7IH0gZmluYWxseSB7IGYgPSB0ID0gMDsgfVxuICAgICAgICBpZiAob3BbMF0gJiA1KSB0aHJvdyBvcFsxXTsgcmV0dXJuIHsgdmFsdWU6IG9wWzBdID8gb3BbMV0gOiB2b2lkIDAsIGRvbmU6IHRydWUgfTtcbiAgICB9XG59O1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgQXN5bmNQYWdpbmF0ZSB9IGZyb20gXCJyZWFjdC1zZWxlY3QtYXN5bmMtcGFnaW5hdGVcIjtcbmltcG9ydCB7IFBheW1lbnRTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL3BheW1lbnRcIjtcbmltcG9ydCAqIGFzIFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IHsgU2hvcCB9IGZyb20gXCIuLi8uLi9tb2RlbC9zaG9wXCI7XG5pbXBvcnQgeyBjb250YWluZXIgfSBmcm9tIFwidHN5cmluZ2VcIjtcbmltcG9ydCB7IE9yZGVyU3RhdGUgfSBmcm9tIFwiLi4vLi4vc3RhdGUvb3JkZXJcIjtcbmltcG9ydCB7IE9yZGVyIH0gZnJvbSBcIi4uLy4uL21vZGVsL29yZGVyXCI7XG5pbXBvcnQgeyB1c2VFZmZlY3QsIHVzZVN0YXRlIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBTZWxlY3RMYWJlbCB9IGZyb20gJy4uL2Jhc2UvU2VsZWN0TGFiZWwnO1xudmFyIFBheW1lbnRDb21wb25lbnQgPSBmdW5jdGlvbiAoX2EpIHtcbiAgICB2YXIgc2hvcCA9IF9hLnNob3AsIG9yZGVyID0gX2Eub3JkZXI7XG4gICAgdmFyIF9iID0gdXNlU3RhdGUobnVsbCksIHNob3BVdWlkID0gX2JbMF0sIHNldFNob3BVdWlkID0gX2JbMV07XG4gICAgdmFyIG9yZGVyU3RhdGUgPSBjb250YWluZXIucmVzb2x2ZShPcmRlclN0YXRlKTtcbiAgICB2YXIgX2MgPSB1c2VTdGF0ZSgwKSwgcGF5bWVudCA9IF9jWzBdLCBzZXRQYXltZW50ID0gX2NbMV07XG4gICAgdmFyIHBheW1lbnRfc2VydmljZSA9IG5ldyBQYXltZW50U2VydmljZSgpO1xuICAgIHZhciBsb2FkT3B0aW9ucyA9IGZ1bmN0aW9uIChzZWFyY2hRdWVyeSwgbG9hZGVkT3B0aW9ucykgeyByZXR1cm4gX19hd2FpdGVyKHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGRhdGE7XG4gICAgICAgIHJldHVybiBfX2dlbmVyYXRvcih0aGlzLCBmdW5jdGlvbiAoX2EpIHtcbiAgICAgICAgICAgIHN3aXRjaCAoX2EubGFiZWwpIHtcbiAgICAgICAgICAgICAgICBjYXNlIDA6IHJldHVybiBbNCAvKnlpZWxkKi8sIHBheW1lbnRfc2VydmljZS5nZXRQYXltZW50cyhzaG9wKV07XG4gICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICBkYXRhID0gX2Euc2VudCgpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzIgLypyZXR1cm4qLywge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnM6IGRhdGEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzTW9yZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICB9XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSk7IH07XG4gICAgdXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgc2V0U2hvcFV1aWQoc2hvcC51dWlkKTtcbiAgICB9LCBbc2hvcC51dWlkXSk7XG4gICAgdXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgc2V0UGF5bWVudChvcmRlci5wYXltZW50LnVpZCk7XG4gICAgfSwgW29yZGVyLnBheW1lbnRdKTtcbiAgICB2YXIgb25DaGFuZ2UgPSBmdW5jdGlvbiAob3B0aW9uKSB7XG4gICAgICAgIG9yZGVyLnBheW1lbnQgPSBvcHRpb247XG4gICAgICAgIHZhciBvcmRlck9iaiA9IG9yZGVyU3RhdGUuZ2V0Q3VycmVudE9yZGVyKCkuZ2V0VmFsdWUoKTtcbiAgICAgICAgb3JkZXJPYmoucGF5bWVudCA9IG9wdGlvbjtcbiAgICAgICAgb3JkZXJTdGF0ZS5zZXRDdXJyZW50T3JkZXIob3JkZXJPYmopO1xuICAgICAgICBzZXRQYXltZW50KG9wdGlvbi51aWQpO1xuICAgIH07XG4gICAgcmV0dXJuIChSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHsgY2xhc3NOYW1lOiBcInAtMlwiIH0sXG4gICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoQXN5bmNQYWdpbmF0ZSwgeyBkZWZhdWx0T3B0aW9uczogdHJ1ZSwga2V5OiBKU09OLnN0cmluZ2lmeShzaG9wVXVpZCksIGNvbXBvbmVudHM6IHsgQ29udHJvbDogU2VsZWN0TGFiZWwgfSwgZGVmYXVsdFZhbHVlOiBvcmRlci5wYXltZW50LCBsb2FkT3B0aW9uczogbG9hZE9wdGlvbnMsIHBsYWNlaG9sZGVyOiAnJywgbmFtZTogJ1phaGxhcnQnLCBnZXRPcHRpb25WYWx1ZTogZnVuY3Rpb24gKG9wdGlvbikgeyByZXR1cm4gb3B0aW9uLnVpZDsgfSwgZ2V0T3B0aW9uTGFiZWw6IGZ1bmN0aW9uIChvcHRpb24pIHsgcmV0dXJuIG9wdGlvbi50aXRsZTsgfSwgb25DaGFuZ2U6IG9uQ2hhbmdlLCBpc1NlYXJjaGFibGU6IGZhbHNlLCBjbGFzc05hbWU6IFwiXCIuY29uY2F0KHBheW1lbnQgPT0gMCA/IFwiYm9yZGVyIGJvcmRlci1yZWQtNTAwXCIgOiBcIlwiKSB9KSkpO1xufTtcblBheW1lbnRDb21wb25lbnQucHJvcFR5cGVzID0ge1xuICAgIHNob3A6IFByb3BUeXBlcy5pbnN0YW5jZU9mKFNob3ApLFxuICAgIG9yZGVyOiBQcm9wVHlwZXMuaW5zdGFuY2VPZihPcmRlciksXG59O1xuZXhwb3J0IGRlZmF1bHQgUGF5bWVudENvbXBvbmVudDtcbiIsImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHVzZUVmZmVjdCwgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgKiBhcyBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCB7IFNob3AgfSBmcm9tICcuLi8uLi9tb2RlbC9zaG9wJztcbmltcG9ydCB7IFByb2R1Y3QgfSBmcm9tIFwiLi4vLi4vbW9kZWwvcHJvZHVjdFwiO1xuaW1wb3J0IHsgUHJvZHVjdEdyb3VwIH0gZnJvbSBcIi4uLy4uL21vZGVsL3Byb2R1Y3RHcm91cFwiO1xuaW1wb3J0IFByb2R1Y3RHcm91cFNlbGVjdCBmcm9tIFwiLi4vcHJvZHVjdC9Qcm9kdWN0R3JvdXBTZWxlY3RcIjtcbmltcG9ydCBQcm9kdWN0U2VsZWN0IGZyb20gXCIuLi9wcm9kdWN0L1Byb2R1Y3RTZWxlY3RcIjtcbmltcG9ydCBQcm9kdWN0Rm9ybSBmcm9tIFwiLi4vcHJvZHVjdC9Qcm9kdWN0Rm9ybVwiO1xuaW1wb3J0IHsgUG9zIH0gZnJvbSAnLi4vLi4vbW9kZWwvcG9zJztcbmltcG9ydCBCdXR0b24gZnJvbSAnLi4vYmFzZS9CdXR0b24nO1xuaW1wb3J0IHsgTW9kYWwgfSBmcm9tIFwiZmxvd2JpdGUtcmVhY3RcIjtcbnZhciBBZGRQb3NpdGlvbkNvbXBvbmVudCA9IGZ1bmN0aW9uIChwcm9wcykge1xuICAgIHZhciBfYSA9IHVzZVN0YXRlKG51bGwpLCBzaG9wID0gX2FbMF0sIHNldFNob3AgPSBfYVsxXTtcbiAgICB1c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgICAgICBzZXRTaG9wKHByb3BzLnNob3ApO1xuICAgIH0sIFtwcm9wcy5zaG9wXSk7XG4gICAgdmFyIF9iID0gdXNlU3RhdGUoZmFsc2UpLCBzaG93ID0gX2JbMF0sIHNldFNob3cgPSBfYlsxXTtcbiAgICB2YXIgcG9zID0gbmV3IFBvcygpO1xuICAgIHZhciBoYW5kbGVDbG9zZSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHNldFNob3coZmFsc2UpOyB9O1xuICAgIHZhciBoYW5kbGVTaG93ID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gc2V0U2hvdyh0cnVlKTsgfTtcbiAgICB2YXIgX2MgPSB1c2VTdGF0ZShuZXcgUHJvZHVjdCgpKSwgcHJvZHVjdCA9IF9jWzBdLCBzZXRQcm9kdWN0ID0gX2NbMV07XG4gICAgdmFyIF9kID0gdXNlU3RhdGUobmV3IFByb2R1Y3RHcm91cCgpKSwgcHJvZHVjdEdyb3VwID0gX2RbMF0sIHNldFByb2R1Y3RHcm91cCA9IF9kWzFdO1xuICAgIHBvcy5wcm9kdWN0ID0gcHJvZHVjdDtcbiAgICByZXR1cm4gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgeyBjbGFzc05hbWU6ICd0ZXh0LWNlbnRlcicgfSxcbiAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChCdXR0b24sIHsgdHlwZTogMSwgb25DbGljazogaGFuZGxlU2hvdywgdmFyaWFudDogXCJzdWNjZXNzXCIgfSksXG4gICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoTW9kYWwsIHsgc2l6ZTogXCI3eGxcIiwgc2hvdzogc2hvdywgb25DbG9zZTogZnVuY3Rpb24gKCkgeyByZXR1cm4gaGFuZGxlQ2xvc2UoKTsgfSB9LFxuICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChNb2RhbC5IZWFkZXIsIG51bGwsIFwiYWRkIHBvc2l0aW9uXCIpLFxuICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChNb2RhbC5Cb2R5LCB7IGNsYXNzTmFtZTogXCJtaW4taC05NlwiIH0sXG4gICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7IGNsYXNzTmFtZTogJ2ZsZXgnIH0sXG4gICAgICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgeyBjbGFzc05hbWU6ICdmbGV4LTEnIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwiaDRcIiwgbnVsbCwgXCJQcm9kdWN0R3JvdXBcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFByb2R1Y3RHcm91cFNlbGVjdCwgeyB2YWx1ZTogcHJvZHVjdEdyb3VwLCBzaG9wOiBwcm9wcy5zaG9wLCBvbkNoYW5nZTogc2V0UHJvZHVjdEdyb3VwIH0pKSxcbiAgICAgICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7IGNsYXNzTmFtZTogJ2ZsZXgtMScgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJoNFwiLCBudWxsLCBcIlByb2R1Y3RcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFByb2R1Y3RTZWxlY3QsIHsgdmFsdWU6IHByb2R1Y3QsIHNob3A6IHByb3BzLnNob3AsIHByb2R1Y3RHcm91cDogcHJvZHVjdEdyb3VwLCBvbkNoYW5nZTogc2V0UHJvZHVjdCB9KSkpLFxuICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoUHJvZHVjdEZvcm0sIHsgcG9zOiBwb3MsIGhhbmRsZUNoYW5nZTogcHJvcHMuYWRkUG9zLCBoYW5kbGVDbG9zZTogaGFuZGxlQ2xvc2UgfSkpKSkpO1xufTtcbkFkZFBvc2l0aW9uQ29tcG9uZW50LnByb3BUeXBlcyA9IHtcbiAgICBzaG9wOiBQcm9wVHlwZXMuaW5zdGFuY2VPZihTaG9wKSxcbiAgICBhZGRQb3M6IFByb3BUeXBlcy5mdW5jXG59O1xuZXhwb3J0IGRlZmF1bHQgQWRkUG9zaXRpb25Db21wb25lbnQ7XG4iLCJpbXBvcnQgeyB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCAqIGFzIFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IHsgU2hvcCB9IGZyb20gJy4uLy4uL21vZGVsL3Nob3AnO1xuaW1wb3J0IHsgUG9zIH0gZnJvbSAnLi4vLi4vbW9kZWwvcG9zJztcbmltcG9ydCBCdXR0b24gZnJvbSAnLi4vYmFzZS9CdXR0b24nO1xuaW1wb3J0IFByb2R1Y3RGb3JtIGZyb20gJy4uL3Byb2R1Y3QvUHJvZHVjdEZvcm0nO1xuaW1wb3J0IHsgTW9kYWwgfSBmcm9tIFwiZmxvd2JpdGUtcmVhY3RcIjtcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG52YXIgRWRpdFBvc2l0aW9uQ29tcG9uZW50ID0gZnVuY3Rpb24gKF9hKSB7XG4gICAgdmFyIHBvc2l0aW9uID0gX2EucG9zaXRpb24sIHNob3AgPSBfYS5zaG9wLCBjaGFuZ2VQb3MgPSBfYS5jaGFuZ2VQb3M7XG4gICAgdmFyIF9iID0gdXNlU3RhdGUoZmFsc2UpLCBzaG93ID0gX2JbMF0sIHNldFNob3cgPSBfYlsxXTtcbiAgICB2YXIgaGFuZGxlQ2xvc2UgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBzZXRTaG93KGZhbHNlKTsgfTtcbiAgICB2YXIgaGFuZGxlU2hvdyA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHNldFNob3codHJ1ZSk7IH07XG4gICAgcmV0dXJuIChSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIG51bGwsXG4gICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgbnVsbCxcbiAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoQnV0dG9uLCB7IHR5cGU6IDIsIHZhcmlhbnQ6IFwiZ3JheVwiLCBvbkNsaWNrOiBoYW5kbGVTaG93IH0pKSxcbiAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChNb2RhbCwgeyBzaXplOiBcIjd4bFwiLCBzaG93OiBzaG93LCBvbkNsb3NlOiBmdW5jdGlvbiAoKSB7IHJldHVybiBoYW5kbGVDbG9zZSgpOyB9IH0sXG4gICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KE1vZGFsLkhlYWRlciwgeyBjbGFzc05hbWU6IFwidGV4dC1tYXV2ZTEyIG0tMCB0ZXh0LVsxN3B4XSBmb250LW1lZGl1bVwiIH0sIFwiZWRpdCBwb3NpdGlvblwiKSxcbiAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoTW9kYWwuQm9keSwgbnVsbCxcbiAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFByb2R1Y3RGb3JtLCB7IHBvczogcG9zaXRpb24sIGhhbmRsZUNoYW5nZTogY2hhbmdlUG9zLCBoYW5kbGVDbG9zZTogaGFuZGxlQ2xvc2UgfSkpKSkpO1xufTtcbkVkaXRQb3NpdGlvbkNvbXBvbmVudC5wcm9wVHlwZXMgPSB7XG4gICAgc2hvcDogUHJvcFR5cGVzLmluc3RhbmNlT2YoU2hvcCksXG4gICAgcG9zaXRpb246IFByb3BUeXBlcy5pbnN0YW5jZU9mKFBvcyksXG4gICAgY2hhbmdlUG9zOiBQcm9wVHlwZXMuZnVuY1xufTtcbmV4cG9ydCBkZWZhdWx0IEVkaXRQb3NpdGlvbkNvbXBvbmVudDtcbiIsImltcG9ydCAqIGFzIFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IFBvc0NvbXBvbmVudCBmcm9tIFwiLi9Qb3NDb21wb25lbnRcIjtcbmltcG9ydCB7IFNob3AgfSBmcm9tICcuLi8uLi9tb2RlbC9zaG9wJztcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG52YXIgSXRlbXNDb21wb25lbnQgPSBmdW5jdGlvbiAoX2EpIHtcbiAgICB2YXIgcG9zaXRpb25zID0gX2EucG9zaXRpb25zLCBkZWxQb3MgPSBfYS5kZWxQb3MsIHNob3AgPSBfYS5zaG9wLCBjaGFuZ2VQb3MgPSBfYS5jaGFuZ2VQb3M7XG4gICAgcmV0dXJuIChSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIG51bGwsXG4gICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgeyBjbGFzc05hbWU6ICdmbGV4JyB9LFxuICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7IGNsYXNzTmFtZTogJ2ZsZXgtMScgfSxcbiAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwiaDVcIiwgbnVsbCwgXCJQb3NcIikpLFxuICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7IGNsYXNzTmFtZTogJ2ZsZXgtMScgfSxcbiAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwiaDVcIiwgbnVsbCwgXCJUaXRsZVwiKSksXG4gICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHsgY2xhc3NOYW1lOiAnZmxleC0xJyB9LFxuICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJoNVwiLCBudWxsLCBcIkFuemFobFwiKSksXG4gICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHsgY2xhc3NOYW1lOiAnZmxleC0xIHRleHQtZW5kJyB9LFxuICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJoNVwiLCBudWxsLCBcIk5ldHRvXCIpKSxcbiAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgeyBjbGFzc05hbWU6ICdmbGV4LTEgdGV4dC1lbmQnIH0sXG4gICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcImg1XCIsIG51bGwsIFwiVGF4XCIpKSxcbiAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgeyBjbGFzc05hbWU6ICdmbGV4LTEgdGV4dC1lbmQnIH0sXG4gICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcImg1XCIsIG51bGwsIFwiR3Jvc3NcIikpLFxuICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7IGNsYXNzTmFtZTogJ2ZsZXgtMSB0ZXh0LWVuZCcgfSxcbiAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwiaDVcIiwgbnVsbCwgXCJTdGF0dXNcIikpLFxuICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7IGNsYXNzTmFtZTogJ2ZsZXgtMScgfSkpLFxuICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwiaHJcIiwgbnVsbCksXG4gICAgICAgIHBvc2l0aW9ucy5tYXAoZnVuY3Rpb24gKG9iamVjdCwgaSkgeyByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChQb3NDb21wb25lbnQsIHsgcG9zOiBvYmplY3QsIHNob3A6IHNob3AsIGRlbFBvczogZGVsUG9zLCBjaGFuZ2VQb3M6IGNoYW5nZVBvcywga2V5OiBpLCBpbmRleDogaSB9KTsgfSkpKTtcbn07XG5JdGVtc0NvbXBvbmVudC5wcm9wVHlwZXMgPSB7XG4gICAgcG9zaXRpb25zOiBQcm9wVHlwZXMuYXJyYXksXG4gICAgZGVsUG9zOiBQcm9wVHlwZXMuZnVuYyxcbiAgICBjaGFuZ2VQb3M6IFByb3BUeXBlcy5mdW5jLFxuICAgIHNob3A6IFByb3BUeXBlcy5pbnN0YW5jZU9mKFNob3ApXG59O1xuZXhwb3J0IGRlZmF1bHQgSXRlbXNDb21wb25lbnQ7XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0ICogYXMgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgeyBQb3MgfSBmcm9tIFwiLi4vLi4vbW9kZWwvcG9zXCI7XG5pbXBvcnQgQnV0dG9uIGZyb20gJy4uL2Jhc2UvQnV0dG9uJztcbmltcG9ydCBFZGl0UG9zaXRpb25Db21wb25lbnQgZnJvbSAnLi9FZGl0UG9zaXRpb25Db21wb25lbnQnO1xuaW1wb3J0IHsgU2hvcCB9IGZyb20gJy4uLy4uL21vZGVsL3Nob3AnO1xuaW1wb3J0IEN1cnJlbmN5IGZyb20gJy4uL2Jhc2UvQ3VycmVuY3knO1xudmFyIFBvc0NvbXBvbmVudCA9IGZ1bmN0aW9uIChfYSkge1xuICAgIHZhciBpbmRleCA9IF9hLmluZGV4LCBwb3MgPSBfYS5wb3MsIGRlbFBvcyA9IF9hLmRlbFBvcywgY2hhbmdlUG9zID0gX2EuY2hhbmdlUG9zLCBzaG9wID0gX2Euc2hvcDtcbiAgICB2YXIgZGVsZXRlUG9zID0gZnVuY3Rpb24gKHV1aWQpIHtcbiAgICAgICAgZGVsUG9zKHV1aWQpO1xuICAgIH07XG4gICAgcmV0dXJuIChSZWFjdC5jcmVhdGVFbGVtZW50KFJlYWN0LkZyYWdtZW50LCBudWxsLFxuICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHsgY2xhc3NOYW1lOiAnZmxleCcgfSxcbiAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgeyBjbGFzc05hbWU6ICdmbGV4LTEnIH0sIGluZGV4ICsgMSksXG4gICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHsgY2xhc3NOYW1lOiAnZmxleC0xJyB9LCBwb3MucHJvZHVjdC50aXRsZSksXG4gICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHsgY2xhc3NOYW1lOiAnZmxleC0xJyB9LCBwb3MuY291bnQpLFxuICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7IGNsYXNzTmFtZTogJ2ZsZXgtMSB0ZXh0LWVuZCcgfSxcbiAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KEN1cnJlbmN5LCB7IHByaWNlOiBwb3MucHJpY2UuYWxsTmV0IH0pKSxcbiAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgeyBjbGFzc05hbWU6ICdmbGV4LTEgdGV4dC1lbmQnIH0sXG4gICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChDdXJyZW5jeSwgeyBwcmljZTogcG9zLnByaWNlLmFsbFZhdCB9KSksXG4gICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHsgY2xhc3NOYW1lOiAnZmxleC0xIHRleHQtZW5kJyB9LFxuICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoQ3VycmVuY3ksIHsgcHJpY2U6IHBvcy5wcmljZS5hbGxHcm9zcyB9KSksXG4gICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHsgY2xhc3NOYW1lOiAnZmxleC0xIHRleHQtZW5kJyB9KSxcbiAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgeyBjbGFzc05hbWU6ICdmbGV4LTEgdGV4dC1lbmQnIH0sXG4gICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7IGNsYXNzTmFtZTogXCJmbGV4IGdhcC0xXCIgfSxcbiAgICAgICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChFZGl0UG9zaXRpb25Db21wb25lbnQsIHsgc2hvcDogc2hvcCwgcG9zaXRpb246IHBvcywgY2hhbmdlUG9zOiBjaGFuZ2VQb3MgfSksXG4gICAgICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoQnV0dG9uLCB7IHR5cGU6IDUsIHZhcmlhbnQ6ICdmYWlsdXJlJywgb25DbGljazogZnVuY3Rpb24gKCkgeyByZXR1cm4gZGVsZXRlUG9zKHBvcy51dWlkKTsgfSB9KSkpKSxcbiAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcImhyXCIsIG51bGwpKSk7XG59O1xuUG9zQ29tcG9uZW50LnByb3BUeXBlcyA9IHtcbiAgICBpbmRleDogUHJvcFR5cGVzLm51bWJlcixcbiAgICBwb3M6IFByb3BUeXBlcy5pbnN0YW5jZU9mKFBvcyksXG4gICAgc2hvcDogUHJvcFR5cGVzLmluc3RhbmNlT2YoU2hvcCksXG4gICAgZGVsUG9zOiBQcm9wVHlwZXMuZnVuYyxcbiAgICBjaGFuZ2VQb3M6IFByb3BUeXBlcy5mdW5jXG59O1xuZXhwb3J0IGRlZmF1bHQgUG9zQ29tcG9uZW50O1xuIiwidmFyIF9fc3ByZWFkQXJyYXkgPSAodGhpcyAmJiB0aGlzLl9fc3ByZWFkQXJyYXkpIHx8IGZ1bmN0aW9uICh0bywgZnJvbSwgcGFjaykge1xuICAgIGlmIChwYWNrIHx8IGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIGZvciAodmFyIGkgPSAwLCBsID0gZnJvbS5sZW5ndGgsIGFyOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgIGlmIChhciB8fCAhKGkgaW4gZnJvbSkpIHtcbiAgICAgICAgICAgIGlmICghYXIpIGFyID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZnJvbSwgMCwgaSk7XG4gICAgICAgICAgICBhcltpXSA9IGZyb21baV07XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRvLmNvbmNhdChhciB8fCBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChmcm9tKSk7XG59O1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBBZGRQb3NpdGlvbkNvbXBvbmVudCBmcm9tIFwiLi9BZGRQb3NpdGlvbkNvbXBvbmVudFwiO1xuaW1wb3J0IEl0ZW1zQ29tcG9uZW50IGZyb20gXCIuL0l0ZW1zQ29tcG9uZW50XCI7XG5pbXBvcnQgKiBhcyBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCB7IFNob3AgfSBmcm9tICcuLi8uLi9tb2RlbC9zaG9wJztcbmltcG9ydCB7IHVzZUVmZmVjdCwgdXNlU3RhdGUgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IE9yZGVyIH0gZnJvbSBcIi4uLy4uL21vZGVsL29yZGVyXCI7XG5pbXBvcnQgeyBjb250YWluZXIgfSBmcm9tIFwidHN5cmluZ2VcIjtcbmltcG9ydCB7IE9yZGVyU3RhdGUgfSBmcm9tIFwiLi4vLi4vc3RhdGUvb3JkZXJcIjtcbnZhciBQb3NpdGlvbnNDb21wb25lbnQgPSBmdW5jdGlvbiAoX2EpIHtcbiAgICB2YXIgb3JkZXIgPSBfYS5vcmRlciwgc2hvcCA9IF9hLnNob3AsIHVwZGF0ZU9yZGVyID0gX2EudXBkYXRlT3JkZXI7XG4gICAgdmFyIG9yZGVyU3RhdGUgPSBjb250YWluZXIucmVzb2x2ZShPcmRlclN0YXRlKTtcbiAgICB2YXIgX2IgPSB1c2VTdGF0ZShvcmRlci5wb3NpdGlvbnMpLCBwb3NpdGlvbnMgPSBfYlswXSwgc2V0UG9zaXRpb25zID0gX2JbMV07XG4gICAgdmFyIGFkZFBvcyA9IGZ1bmN0aW9uIChwb3NPYmopIHtcbiAgICAgICAgc2V0UG9zaXRpb25zKF9fc3ByZWFkQXJyYXkoX19zcHJlYWRBcnJheShbXSwgcG9zaXRpb25zLCB0cnVlKSwgW3Bvc09ial0sIGZhbHNlKSk7XG4gICAgfTtcbiAgICB2YXIgY2hhbmdlUG9zID0gZnVuY3Rpb24gKHBvc09iaikge1xuICAgICAgICB2YXIgbmV4dENvdW50ZXJzID0gcG9zaXRpb25zLm1hcChmdW5jdGlvbiAoYywgaSkge1xuICAgICAgICAgICAgaWYgKGMudXVpZCA9PT0gcG9zT2JqLnV1aWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcG9zT2JqO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGM7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBzZXRQb3NpdGlvbnMobmV4dENvdW50ZXJzKTtcbiAgICB9O1xuICAgIHZhciBkZWxQb3MgPSBmdW5jdGlvbiAodXVpZCkge1xuICAgICAgICB2YXIgcG9zID0gcG9zaXRpb25zLmZpbHRlcihmdW5jdGlvbiAob2JqKSB7IHJldHVybiBvYmoudXVpZCAhPT0gdXVpZDsgfSk7XG4gICAgICAgIHNldFBvc2l0aW9ucyhwb3MpO1xuICAgIH07XG4gICAgdXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIG9yZGVyT2JqID0gb3JkZXJTdGF0ZS5nZXRDdXJyZW50T3JkZXIoKS52YWx1ZTtcbiAgICAgICAgb3JkZXJPYmoucG9zaXRpb25zID0gcG9zaXRpb25zO1xuICAgICAgICBvcmRlclN0YXRlLnNldEN1cnJlbnRPcmRlcihvcmRlck9iaik7XG4gICAgfSwgW3Bvc2l0aW9uc10pO1xuICAgIHJldHVybiAoUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7IGNsYXNzTmFtZTogXCJwLTJcIiB9LFxuICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KEl0ZW1zQ29tcG9uZW50LCB7IHBvc2l0aW9uczogcG9zaXRpb25zLCBzaG9wOiBzaG9wLCBkZWxQb3M6IGRlbFBvcywgY2hhbmdlUG9zOiBjaGFuZ2VQb3MgfSksXG4gICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoQWRkUG9zaXRpb25Db21wb25lbnQsIHsgc2hvcDogc2hvcCwgYWRkUG9zOiBhZGRQb3MgfSkpKTtcbn07XG5Qb3NpdGlvbnNDb21wb25lbnQucHJvcFR5cGVzID0ge1xuICAgIHNob3A6IFByb3BUeXBlcy5pbnN0YW5jZU9mKFNob3ApLFxuICAgIG9yZGVyOiBQcm9wVHlwZXMuaW5zdGFuY2VPZihPcmRlciksXG4gICAgdXBkYXRlT3JkZXI6IFByb3BUeXBlcy5mdW5jXG59O1xuZXhwb3J0IGRlZmF1bHQgUG9zaXRpb25zQ29tcG9uZW50O1xuIiwiaW1wb3J0ICogYXMgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IHsgU2hvcCB9IGZyb20gJy4uLy4uL21vZGVsL3Nob3AnO1xuaW1wb3J0IHZhbGlkYXRvciBmcm9tIFwiQHJqc2YvdmFsaWRhdG9yLWFqdjZcIjtcbmltcG9ydCBGb3JtIGZyb20gXCJAcmpzZi9jb3JlXCI7XG5pbXBvcnQgeyBQcm9kdWN0U2VydmljZSB9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy9wcm9kdWN0XCI7XG5pbXBvcnQgeyB1c2VFZmZlY3QsIHVzZVN0YXRlIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBQcmljZSB9IGZyb20gXCIuLi8uLi9tb2RlbC9wcmljZVwiO1xuaW1wb3J0IHsgUG9zIH0gZnJvbSBcIi4uLy4uL21vZGVsL3Bvc1wiO1xuaW1wb3J0IHsgdXNlRGVib3VuY2VkQ2FsbGJhY2sgfSBmcm9tICd1c2UtZGVib3VuY2UnO1xuaW1wb3J0IEJ1dHRvbiBmcm9tICcuLi9iYXNlL0J1dHRvbic7XG5pbXBvcnQgQ3VycmVuY3kgZnJvbSAnLi4vYmFzZS9DdXJyZW5jeSc7XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xudmFyIFByb2R1Y3RGb3JtID0gZnVuY3Rpb24gKF9hKSB7XG4gICAgdmFyIHNob3AgPSBfYS5zaG9wLCBwb3MgPSBfYS5wb3MsIGhhbmRsZUNsb3NlID0gX2EuaGFuZGxlQ2xvc2UsIGhhbmRsZUNoYW5nZSA9IF9hLmhhbmRsZUNoYW5nZTtcbiAgICB2YXIgcHJvZHVjdF9hcGkgPSBuZXcgUHJvZHVjdFNlcnZpY2UoKTtcbiAgICB2YXIgX2IgPSB1c2VTdGF0ZSh7fSksIHNjaGVtYSA9IF9iWzBdLCBzZXRTY2hlbWEgPSBfYlsxXTtcbiAgICB2YXIgX2MgPSB1c2VTdGF0ZSh7fSksIHVpU2NoZW1hID0gX2NbMF0sIHNldFVpU2NoZW1hID0gX2NbMV07XG4gICAgdmFyIF9kID0gdXNlU3RhdGUoe30pLCBmb3JtRGF0YSA9IF9kWzBdLCBzZXRGb3JtRGF0YSA9IF9kWzFdO1xuICAgIHZhciBfZSA9IHVzZVN0YXRlKDApLCB0eXBlID0gX2VbMF0sIHNldFR5cGUgPSBfZVsxXTtcbiAgICB2YXIgX2YgPSB1c2VTdGF0ZShuZXcgUHJpY2UoKSksIHByaWNlID0gX2ZbMF0sIHNldFByaWNlID0gX2ZbMV07XG4gICAgdmFyIGxvYWRTY2hlbWEgPSBmdW5jdGlvbiAobG9hZERhdGEpIHtcbiAgICAgICAgaWYgKHBvcy5wcm9kdWN0LnV1aWQgPT0gXCJcIikge1xuICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICB9XG4gICAgICAgIHZhciBkYXRhID0ge307XG4gICAgICAgIHByb2R1Y3RfYXBpLmdldEFkZFByb2R1Y3RTY2hlbWEocG9zLnByb2R1Y3QsIGxvYWREYXRhKS50aGVuKGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgZm9yICh2YXIgb2JqIGluIHZhbHVlWydqc29uRm9ybSddWydwcm9wZXJ0aWVzJ10pIHtcbiAgICAgICAgICAgICAgICBkYXRhW29ial0gPSB2YWx1ZVsnanNvbkZvcm0nXVsncHJvcGVydGllcyddW29ial1bJ2RlZmF1bHQnXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNldEZvcm1EYXRhKGRhdGEpO1xuICAgICAgICAgICAgc2V0U2NoZW1hKHZhbHVlWydqc29uRm9ybSddKTtcbiAgICAgICAgICAgIHNldFVpU2NoZW1hKHZhbHVlWyd1aUpzb25Gb3JtJ10pO1xuICAgICAgICAgICAgc2V0UHJpY2UodmFsdWVbJ3ByaWNlJ10pO1xuICAgICAgICAgICAgc2V0VHlwZSh2YWx1ZVsndHlwJ10pO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIHZhciBjaGFuZ2VDYWxjID0gZnVuY3Rpb24gKGZvcm1EYXRhKSB7XG4gICAgICAgIHNldEZvcm1EYXRhKGZvcm1EYXRhKTtcbiAgICAgICAgZGVib3VuY2VSZUNhbGMoKTtcbiAgICB9O1xuICAgIHZhciBkZWJvdW5jZVJlQ2FsYyA9IHVzZURlYm91bmNlZENhbGxiYWNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGRhdGEgPSB7fTtcbiAgICAgICAgcHJvZHVjdF9hcGkuY2FsY1Byb2R1Y3QocG9zLnByb2R1Y3QsIGZvcm1EYXRhKS50aGVuKGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgZm9yICh2YXIgb2JqIGluIHZhbHVlWydqc29uRm9ybSddWydwcm9wZXJ0aWVzJ10pIHtcbiAgICAgICAgICAgICAgICBkYXRhW29ial0gPSB2YWx1ZVsnanNvbkZvcm0nXVsncHJvcGVydGllcyddW29ial1bJ2RlZmF1bHQnXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNldEZvcm1EYXRhKGRhdGEpO1xuICAgICAgICAgICAgc2V0U2NoZW1hKHZhbHVlWydqc29uRm9ybSddKTtcbiAgICAgICAgICAgIHNldFVpU2NoZW1hKHZhbHVlWyd1aUpzb25Gb3JtJ10pO1xuICAgICAgICAgICAgc2V0UHJpY2UodmFsdWVbJ3ByaWNlJ10pO1xuICAgICAgICAgICAgc2V0VHlwZSh2YWx1ZVsndHlwJ10pO1xuICAgICAgICB9KTtcbiAgICB9LCA2MDApO1xuICAgIHZhciBhZGRQcm9kdWN0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBwb3MucHJvZHVjdC5zcGVjaWFsUHJvZHVjdFR5cGVPYmplY3QucGFyYW1zID0gZm9ybURhdGE7XG4gICAgICAgIHBvcy5wcm9kdWN0LnNwZWNpYWxQcm9kdWN0VHlwZU9iamVjdC50eXAgPSB0eXBlO1xuICAgICAgICBpZiAoZm9ybURhdGFbJ2NvdW50J10pIHtcbiAgICAgICAgICAgIHBvcy5jb3VudCA9IGZvcm1EYXRhWydjb3VudCddO1xuICAgICAgICB9XG4gICAgICAgIHBvcy5wcmljZSA9IHByaWNlO1xuICAgICAgICBoYW5kbGVDaGFuZ2UocG9zKTtcbiAgICAgICAgaGFuZGxlQ2xvc2UoKTtcbiAgICB9O1xuICAgIHVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmIChwb3MucHJvZHVjdC5zcGVjaWFsUHJvZHVjdFR5cGVPYmplY3QucGFyYW1zKSB7XG4gICAgICAgICAgICBzZXRGb3JtRGF0YShwb3MucHJvZHVjdC5zcGVjaWFsUHJvZHVjdFR5cGVPYmplY3QucGFyYW1zKTtcbiAgICAgICAgICAgIGxvYWRTY2hlbWEocG9zLnByb2R1Y3Quc3BlY2lhbFByb2R1Y3RUeXBlT2JqZWN0LnBhcmFtcyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBzZXRGb3JtRGF0YSh7fSk7XG4gICAgICAgICAgICBsb2FkU2NoZW1hKHt9KTtcbiAgICAgICAgfVxuICAgIH0sIFtwb3MucHJvZHVjdF0pO1xuICAgIHJldHVybiAoUmVhY3QuY3JlYXRlRWxlbWVudChSZWFjdC5GcmFnbWVudCwgbnVsbCxcbiAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7IGNsYXNzTmFtZTogJ2ZsZXgnIH0sXG4gICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHsgY2xhc3NOYW1lOiAnZmxleC0xJyB9LFxuICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoRm9ybSwgeyBzY2hlbWE6IHNjaGVtYSwgdWlTY2hlbWE6IHVpU2NoZW1hLCBmb3JtRGF0YTogZm9ybURhdGEsIG9uQ2hhbmdlOiBmdW5jdGlvbiAoZSkgeyByZXR1cm4gY2hhbmdlQ2FsYyhlLmZvcm1EYXRhKTsgfSwgdmFsaWRhdG9yOiB2YWxpZGF0b3IgfSkpLFxuICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7IGNsYXNzTmFtZTogJycgfSxcbiAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFJlYWN0LkZyYWdtZW50LCBudWxsLFxuICAgICAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwiaDVcIiwgbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiTmV0dG86IFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChDdXJyZW5jeSwgeyBwcmljZTogcHJpY2UuYWxsTmV0IH0pKSxcbiAgICAgICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcImg1XCIsIG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICBcIk13ZXJ0OiBcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoQ3VycmVuY3ksIHsgcHJpY2U6IHByaWNlLmFsbFZhdCB9KSksXG4gICAgICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJoNFwiLCBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJCcnV0dG86IFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChDdXJyZW5jeSwgeyBwcmljZTogcHJpY2UuYWxsR3Jvc3MgfSkpLFxuICAgICAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KEJ1dHRvbiwgeyBvbkNsaWNrOiBhZGRQcm9kdWN0LCB0eXBlOiAzLCB2YXJpYW50OiBcInN1Y2Nlc3NcIiB9KSkpKSkpO1xufTtcblByb2R1Y3RGb3JtLnByb3BUeXBlcyA9IHtcbiAgICBzaG9wOiBQcm9wVHlwZXMuaW5zdGFuY2VPZihTaG9wKSxcbiAgICBwb3M6IFByb3BUeXBlcy5pbnN0YW5jZU9mKFBvcyksXG4gICAgaGFuZGxlQ2xvc2U6IFByb3BUeXBlcy5mdW5jLFxuICAgIGhhbmRsZUNoYW5nZTogUHJvcFR5cGVzLmZ1bmNcbn07XG5leHBvcnQgZGVmYXVsdCBQcm9kdWN0Rm9ybTtcbiIsInZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gICAgfSk7XG59O1xudmFyIF9fZ2VuZXJhdG9yID0gKHRoaXMgJiYgdGhpcy5fX2dlbmVyYXRvcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIGJvZHkpIHtcbiAgICB2YXIgXyA9IHsgbGFiZWw6IDAsIHNlbnQ6IGZ1bmN0aW9uKCkgeyBpZiAodFswXSAmIDEpIHRocm93IHRbMV07IHJldHVybiB0WzFdOyB9LCB0cnlzOiBbXSwgb3BzOiBbXSB9LCBmLCB5LCB0LCBnO1xuICAgIHJldHVybiBnID0geyBuZXh0OiB2ZXJiKDApLCBcInRocm93XCI6IHZlcmIoMSksIFwicmV0dXJuXCI6IHZlcmIoMikgfSwgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIChnW1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbigpIHsgcmV0dXJuIHRoaXM7IH0pLCBnO1xuICAgIGZ1bmN0aW9uIHZlcmIobikgeyByZXR1cm4gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIHN0ZXAoW24sIHZdKTsgfTsgfVxuICAgIGZ1bmN0aW9uIHN0ZXAob3ApIHtcbiAgICAgICAgaWYgKGYpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuXCIpO1xuICAgICAgICB3aGlsZSAoXykgdHJ5IHtcbiAgICAgICAgICAgIGlmIChmID0gMSwgeSAmJiAodCA9IG9wWzBdICYgMiA/IHlbXCJyZXR1cm5cIl0gOiBvcFswXSA/IHlbXCJ0aHJvd1wiXSB8fCAoKHQgPSB5W1wicmV0dXJuXCJdKSAmJiB0LmNhbGwoeSksIDApIDogeS5uZXh0KSAmJiAhKHQgPSB0LmNhbGwoeSwgb3BbMV0pKS5kb25lKSByZXR1cm4gdDtcbiAgICAgICAgICAgIGlmICh5ID0gMCwgdCkgb3AgPSBbb3BbMF0gJiAyLCB0LnZhbHVlXTtcbiAgICAgICAgICAgIHN3aXRjaCAob3BbMF0pIHtcbiAgICAgICAgICAgICAgICBjYXNlIDA6IGNhc2UgMTogdCA9IG9wOyBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIDQ6IF8ubGFiZWwrKzsgcmV0dXJuIHsgdmFsdWU6IG9wWzFdLCBkb25lOiBmYWxzZSB9O1xuICAgICAgICAgICAgICAgIGNhc2UgNTogXy5sYWJlbCsrOyB5ID0gb3BbMV07IG9wID0gWzBdOyBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBjYXNlIDc6IG9wID0gXy5vcHMucG9wKCk7IF8udHJ5cy5wb3AoKTsgY29udGludWU7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEodCA9IF8udHJ5cywgdCA9IHQubGVuZ3RoID4gMCAmJiB0W3QubGVuZ3RoIC0gMV0pICYmIChvcFswXSA9PT0gNiB8fCBvcFswXSA9PT0gMikpIHsgXyA9IDA7IGNvbnRpbnVlOyB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gMyAmJiAoIXQgfHwgKG9wWzFdID4gdFswXSAmJiBvcFsxXSA8IHRbM10pKSkgeyBfLmxhYmVsID0gb3BbMV07IGJyZWFrOyB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gNiAmJiBfLmxhYmVsIDwgdFsxXSkgeyBfLmxhYmVsID0gdFsxXTsgdCA9IG9wOyBicmVhazsgfVxuICAgICAgICAgICAgICAgICAgICBpZiAodCAmJiBfLmxhYmVsIDwgdFsyXSkgeyBfLmxhYmVsID0gdFsyXTsgXy5vcHMucHVzaChvcCk7IGJyZWFrOyB9XG4gICAgICAgICAgICAgICAgICAgIGlmICh0WzJdKSBfLm9wcy5wb3AoKTtcbiAgICAgICAgICAgICAgICAgICAgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG9wID0gYm9keS5jYWxsKHRoaXNBcmcsIF8pO1xuICAgICAgICB9IGNhdGNoIChlKSB7IG9wID0gWzYsIGVdOyB5ID0gMDsgfSBmaW5hbGx5IHsgZiA9IHQgPSAwOyB9XG4gICAgICAgIGlmIChvcFswXSAmIDUpIHRocm93IG9wWzFdOyByZXR1cm4geyB2YWx1ZTogb3BbMF0gPyBvcFsxXSA6IHZvaWQgMCwgZG9uZTogdHJ1ZSB9O1xuICAgIH1cbn07XG5pbXBvcnQgKiBhcyBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgeyBTaG9wIH0gZnJvbSAnLi4vLi4vbW9kZWwvc2hvcCc7XG5pbXBvcnQgeyBjb250YWluZXIgfSBmcm9tICd0c3lyaW5nZSc7XG5pbXBvcnQgeyBPcmRlclN0YXRlIH0gZnJvbSAnLi4vLi4vc3RhdGUvb3JkZXInO1xuaW1wb3J0IHsgUHJvZHVjdEdyb3VwIH0gZnJvbSBcIi4uLy4uL21vZGVsL3Byb2R1Y3RHcm91cFwiO1xuaW1wb3J0IHsgUHJvZHVjdEdyb3VwU2VydmljZSB9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy9wcm9kdWN0Z3JvdXBcIjtcbmltcG9ydCBBc3luY1NlbGVjdCBmcm9tICdyZWFjdC1zZWxlY3QvYXN5bmMnO1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbnZhciBQcm9kdWN0R3JvdXBTZWxlY3QgPSBmdW5jdGlvbiAocHJvcHMpIHtcbiAgICB2YXIgb3JkZXJTdGF0ZSA9IGNvbnRhaW5lci5yZXNvbHZlKE9yZGVyU3RhdGUpO1xuICAgIHZhciBsb2FkT3B0aW9ucyA9IGZ1bmN0aW9uIChzZWFyY2hRdWVyeSkgeyByZXR1cm4gX19hd2FpdGVyKHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHByb2R1Y3Rncm91cF9hcGk7XG4gICAgICAgIHJldHVybiBfX2dlbmVyYXRvcih0aGlzLCBmdW5jdGlvbiAoX2EpIHtcbiAgICAgICAgICAgIHN3aXRjaCAoX2EubGFiZWwpIHtcbiAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgICAgIHByb2R1Y3Rncm91cF9hcGkgPSBuZXcgUHJvZHVjdEdyb3VwU2VydmljZSgpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzQgLyp5aWVsZCovLCBwcm9kdWN0Z3JvdXBfYXBpLmdldFByb2R1Y3RHcm91cHMoc2VhcmNoUXVlcnksIHByb3BzLnNob3ApXTtcbiAgICAgICAgICAgICAgICBjYXNlIDE6IHJldHVybiBbMiAvKnJldHVybiovLCBfYS5zZW50KCldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9KTsgfTtcbiAgICB2YXIgb25DaGFuZ2UgPSBmdW5jdGlvbiAob3B0aW9uKSB7XG4gICAgICAgIGlmICh0eXBlb2YgcHJvcHMub25DaGFuZ2UgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgcHJvcHMub25DaGFuZ2Uob3B0aW9uKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIChSZWFjdC5jcmVhdGVFbGVtZW50KEFzeW5jU2VsZWN0LCB7IGRlZmF1bHRPcHRpb25zOiB0cnVlLCBrZXk6IEpTT04uc3RyaW5naWZ5KHByb3BzLnNob3AudXVpZCksIHZhbHVlOiBwcm9wcy52YWx1ZSwgbG9hZE9wdGlvbnM6IGxvYWRPcHRpb25zLCBnZXRPcHRpb25WYWx1ZTogZnVuY3Rpb24gKG9wdGlvbikgeyByZXR1cm4gb3B0aW9uLnV1aWQ7IH0sIG9uQ2hhbmdlOiBvbkNoYW5nZSwgaXNTZWFyY2hhYmxlOiB0cnVlIH0pKTtcbn07XG5Qcm9kdWN0R3JvdXBTZWxlY3QucHJvcFR5cGVzID0ge1xuICAgIHNob3A6IFByb3BUeXBlcy5pbnN0YW5jZU9mKFNob3ApLFxuICAgIHZhbHVlOiBQcm9wVHlwZXMuaW5zdGFuY2VPZihQcm9kdWN0R3JvdXApLFxuICAgIG9uQ2hhbmdlOiBQcm9wVHlwZXMuZnVuYyxcbn07XG5leHBvcnQgZGVmYXVsdCBQcm9kdWN0R3JvdXBTZWxlY3Q7XG4iLCJ2YXIgX19hd2FpdGVyID0gKHRoaXMgJiYgdGhpcy5fX2F3YWl0ZXIpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcbiAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xuICAgIH0pO1xufTtcbnZhciBfX2dlbmVyYXRvciA9ICh0aGlzICYmIHRoaXMuX19nZW5lcmF0b3IpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBib2R5KSB7XG4gICAgdmFyIF8gPSB7IGxhYmVsOiAwLCBzZW50OiBmdW5jdGlvbigpIHsgaWYgKHRbMF0gJiAxKSB0aHJvdyB0WzFdOyByZXR1cm4gdFsxXTsgfSwgdHJ5czogW10sIG9wczogW10gfSwgZiwgeSwgdCwgZztcbiAgICByZXR1cm4gZyA9IHsgbmV4dDogdmVyYigwKSwgXCJ0aHJvd1wiOiB2ZXJiKDEpLCBcInJldHVyblwiOiB2ZXJiKDIpIH0sIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiAoZ1tTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzOyB9KSwgZztcbiAgICBmdW5jdGlvbiB2ZXJiKG4pIHsgcmV0dXJuIGZ1bmN0aW9uICh2KSB7IHJldHVybiBzdGVwKFtuLCB2XSk7IH07IH1cbiAgICBmdW5jdGlvbiBzdGVwKG9wKSB7XG4gICAgICAgIGlmIChmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLlwiKTtcbiAgICAgICAgd2hpbGUgKF8pIHRyeSB7XG4gICAgICAgICAgICBpZiAoZiA9IDEsIHkgJiYgKHQgPSBvcFswXSAmIDIgPyB5W1wicmV0dXJuXCJdIDogb3BbMF0gPyB5W1widGhyb3dcIl0gfHwgKCh0ID0geVtcInJldHVyblwiXSkgJiYgdC5jYWxsKHkpLCAwKSA6IHkubmV4dCkgJiYgISh0ID0gdC5jYWxsKHksIG9wWzFdKSkuZG9uZSkgcmV0dXJuIHQ7XG4gICAgICAgICAgICBpZiAoeSA9IDAsIHQpIG9wID0gW29wWzBdICYgMiwgdC52YWx1ZV07XG4gICAgICAgICAgICBzd2l0Y2ggKG9wWzBdKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAwOiBjYXNlIDE6IHQgPSBvcDsgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSA0OiBfLmxhYmVsKys7IHJldHVybiB7IHZhbHVlOiBvcFsxXSwgZG9uZTogZmFsc2UgfTtcbiAgICAgICAgICAgICAgICBjYXNlIDU6IF8ubGFiZWwrKzsgeSA9IG9wWzFdOyBvcCA9IFswXTsgY29udGludWU7XG4gICAgICAgICAgICAgICAgY2FzZSA3OiBvcCA9IF8ub3BzLnBvcCgpOyBfLnRyeXMucG9wKCk7IGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIGlmICghKHQgPSBfLnRyeXMsIHQgPSB0Lmxlbmd0aCA+IDAgJiYgdFt0Lmxlbmd0aCAtIDFdKSAmJiAob3BbMF0gPT09IDYgfHwgb3BbMF0gPT09IDIpKSB7IF8gPSAwOyBjb250aW51ZTsgfVxuICAgICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDMgJiYgKCF0IHx8IChvcFsxXSA+IHRbMF0gJiYgb3BbMV0gPCB0WzNdKSkpIHsgXy5sYWJlbCA9IG9wWzFdOyBicmVhazsgfVxuICAgICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDYgJiYgXy5sYWJlbCA8IHRbMV0pIHsgXy5sYWJlbCA9IHRbMV07IHQgPSBvcDsgYnJlYWs7IH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHQgJiYgXy5sYWJlbCA8IHRbMl0pIHsgXy5sYWJlbCA9IHRbMl07IF8ub3BzLnB1c2gob3ApOyBicmVhazsgfVxuICAgICAgICAgICAgICAgICAgICBpZiAodFsyXSkgXy5vcHMucG9wKCk7XG4gICAgICAgICAgICAgICAgICAgIF8udHJ5cy5wb3AoKTsgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvcCA9IGJvZHkuY2FsbCh0aGlzQXJnLCBfKTtcbiAgICAgICAgfSBjYXRjaCAoZSkgeyBvcCA9IFs2LCBlXTsgeSA9IDA7IH0gZmluYWxseSB7IGYgPSB0ID0gMDsgfVxuICAgICAgICBpZiAob3BbMF0gJiA1KSB0aHJvdyBvcFsxXTsgcmV0dXJuIHsgdmFsdWU6IG9wWzBdID8gb3BbMV0gOiB2b2lkIDAsIGRvbmU6IHRydWUgfTtcbiAgICB9XG59O1xuaW1wb3J0ICogYXMgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IHsgU2hvcCB9IGZyb20gJy4uLy4uL21vZGVsL3Nob3AnO1xuaW1wb3J0IHsgY29udGFpbmVyIH0gZnJvbSAndHN5cmluZ2UnO1xuaW1wb3J0IHsgT3JkZXJTdGF0ZSB9IGZyb20gJy4uLy4uL3N0YXRlL29yZGVyJztcbmltcG9ydCB7IFByb2R1Y3QgfSBmcm9tIFwiLi4vLi4vbW9kZWwvcHJvZHVjdFwiO1xuaW1wb3J0IHsgUHJvZHVjdEdyb3VwIH0gZnJvbSBcIi4uLy4uL21vZGVsL3Byb2R1Y3RHcm91cFwiO1xuaW1wb3J0IEFzeW5jU2VsZWN0IGZyb20gXCJyZWFjdC1zZWxlY3QvYXN5bmNcIjtcbmltcG9ydCB7IFByb2R1Y3RTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL3Byb2R1Y3RcIjtcbmltcG9ydCB7IHVzZURlYm91bmNlIH0gZnJvbSBcInVzZS1kZWJvdW5jZVwiO1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbnZhciBQcm9kdWN0U2VsZWN0ID0gZnVuY3Rpb24gKHByb3BzKSB7XG4gICAgdmFyIG9yZGVyU3RhdGUgPSBjb250YWluZXIucmVzb2x2ZShPcmRlclN0YXRlKTtcbiAgICB2YXIgbG9hZE9wdGlvbnMgPSBmdW5jdGlvbiAoc2VhcmNoUXVlcnkpIHsgcmV0dXJuIF9fYXdhaXRlcih2b2lkIDAsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBwcm9kdWN0X2FwaTtcbiAgICAgICAgcmV0dXJuIF9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfYSkge1xuICAgICAgICAgICAgc3dpdGNoIChfYS5sYWJlbCkge1xuICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNlYXJjaFF1ZXJ5ID09IFwiXCIgJiYgcHJvcHMucHJvZHVjdEdyb3VwLnV1aWQgPT0gXCJcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFsyIC8qcmV0dXJuKi8sIFtdXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBwcm9kdWN0X2FwaSA9IG5ldyBQcm9kdWN0U2VydmljZSgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIShzZWFyY2hRdWVyeSAhPSBcIlwiKSkgcmV0dXJuIFszIC8qYnJlYWsqLywgMl07XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbNCAvKnlpZWxkKi8sIHByb2R1Y3RfYXBpLmdldFByb2R1Y3RzQnlUZXJtKHNlYXJjaFF1ZXJ5LCBwcm9wcy5zaG9wKV07XG4gICAgICAgICAgICAgICAgY2FzZSAxOiByZXR1cm4gWzIgLypyZXR1cm4qLywgX2Euc2VudCgpXTtcbiAgICAgICAgICAgICAgICBjYXNlIDI6IHJldHVybiBbNCAvKnlpZWxkKi8sIHByb2R1Y3RfYXBpLmdldFByb2R1Y3RzKHByb3BzLnByb2R1Y3RHcm91cCldO1xuICAgICAgICAgICAgICAgIGNhc2UgMzogcmV0dXJuIFsyIC8qcmV0dXJuKi8sIF9hLnNlbnQoKV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0pOyB9O1xuICAgIHZhciBkZWJvdW5jZWRTZWFyY2hUZXJtID0gdXNlRGVib3VuY2UobG9hZE9wdGlvbnMsIDUwMCk7XG4gICAgdmFyIG9uQ2hhbmdlID0gZnVuY3Rpb24gKG9wdGlvbikge1xuICAgICAgICBpZiAodHlwZW9mIHByb3BzLm9uQ2hhbmdlID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgIHByb3BzLm9uQ2hhbmdlKG9wdGlvbik7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiAoUmVhY3QuY3JlYXRlRWxlbWVudChBc3luY1NlbGVjdCwgeyBkZWZhdWx0T3B0aW9uczogdHJ1ZSwga2V5OiBKU09OLnN0cmluZ2lmeShwcm9wcy5wcm9kdWN0R3JvdXAudXVpZCksIHZhbHVlOiBwcm9wcy52YWx1ZSwgbG9hZE9wdGlvbnM6IGxvYWRPcHRpb25zLCBnZXRPcHRpb25WYWx1ZTogZnVuY3Rpb24gKG9wdGlvbikgeyByZXR1cm4gb3B0aW9uLnV1aWQ7IH0sIGdldE9wdGlvbkxhYmVsOiBmdW5jdGlvbiAob3B0aW9uKSB7IHJldHVybiBvcHRpb24udGl0bGU7IH0sIG9uQ2hhbmdlOiBvbkNoYW5nZSwgaXNTZWFyY2hhYmxlOiB0cnVlIH0pKTtcbn07XG5Qcm9kdWN0U2VsZWN0LnByb3BUeXBlcyA9IHtcbiAgICBzaG9wOiBQcm9wVHlwZXMuaW5zdGFuY2VPZihTaG9wKSxcbiAgICB2YWx1ZTogUHJvcFR5cGVzLmluc3RhbmNlT2YoUHJvZHVjdCksXG4gICAgcHJvZHVjdEdyb3VwOiBQcm9wVHlwZXMuaW5zdGFuY2VPZihQcm9kdWN0R3JvdXApLFxuICAgIG9uQ2hhbmdlOiBQcm9wVHlwZXMuZnVuYyxcbn07XG5leHBvcnQgZGVmYXVsdCBQcm9kdWN0U2VsZWN0O1xuIiwidmFyIF9fYXdhaXRlciA9ICh0aGlzICYmIHRoaXMuX19hd2FpdGVyKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgICB9KTtcbn07XG52YXIgX19nZW5lcmF0b3IgPSAodGhpcyAmJiB0aGlzLl9fZ2VuZXJhdG9yKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgYm9keSkge1xuICAgIHZhciBfID0geyBsYWJlbDogMCwgc2VudDogZnVuY3Rpb24oKSB7IGlmICh0WzBdICYgMSkgdGhyb3cgdFsxXTsgcmV0dXJuIHRbMV07IH0sIHRyeXM6IFtdLCBvcHM6IFtdIH0sIGYsIHksIHQsIGc7XG4gICAgcmV0dXJuIGcgPSB7IG5leHQ6IHZlcmIoMCksIFwidGhyb3dcIjogdmVyYigxKSwgXCJyZXR1cm5cIjogdmVyYigyKSB9LCB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgKGdbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhpczsgfSksIGc7XG4gICAgZnVuY3Rpb24gdmVyYihuKSB7IHJldHVybiBmdW5jdGlvbiAodikgeyByZXR1cm4gc3RlcChbbiwgdl0pOyB9OyB9XG4gICAgZnVuY3Rpb24gc3RlcChvcCkge1xuICAgICAgICBpZiAoZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy5cIik7XG4gICAgICAgIHdoaWxlIChfKSB0cnkge1xuICAgICAgICAgICAgaWYgKGYgPSAxLCB5ICYmICh0ID0gb3BbMF0gJiAyID8geVtcInJldHVyblwiXSA6IG9wWzBdID8geVtcInRocm93XCJdIHx8ICgodCA9IHlbXCJyZXR1cm5cIl0pICYmIHQuY2FsbCh5KSwgMCkgOiB5Lm5leHQpICYmICEodCA9IHQuY2FsbCh5LCBvcFsxXSkpLmRvbmUpIHJldHVybiB0O1xuICAgICAgICAgICAgaWYgKHkgPSAwLCB0KSBvcCA9IFtvcFswXSAmIDIsIHQudmFsdWVdO1xuICAgICAgICAgICAgc3dpdGNoIChvcFswXSkge1xuICAgICAgICAgICAgICAgIGNhc2UgMDogY2FzZSAxOiB0ID0gb3A7IGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgNDogXy5sYWJlbCsrOyByZXR1cm4geyB2YWx1ZTogb3BbMV0sIGRvbmU6IGZhbHNlIH07XG4gICAgICAgICAgICAgICAgY2FzZSA1OiBfLmxhYmVsKys7IHkgPSBvcFsxXTsgb3AgPSBbMF07IGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGNhc2UgNzogb3AgPSBfLm9wcy5wb3AoKTsgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICBpZiAoISh0ID0gXy50cnlzLCB0ID0gdC5sZW5ndGggPiAwICYmIHRbdC5sZW5ndGggLSAxXSkgJiYgKG9wWzBdID09PSA2IHx8IG9wWzBdID09PSAyKSkgeyBfID0gMDsgY29udGludWU7IH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSAzICYmICghdCB8fCAob3BbMV0gPiB0WzBdICYmIG9wWzFdIDwgdFszXSkpKSB7IF8ubGFiZWwgPSBvcFsxXTsgYnJlYWs7IH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSA2ICYmIF8ubGFiZWwgPCB0WzFdKSB7IF8ubGFiZWwgPSB0WzFdOyB0ID0gb3A7IGJyZWFrOyB9XG4gICAgICAgICAgICAgICAgICAgIGlmICh0ICYmIF8ubGFiZWwgPCB0WzJdKSB7IF8ubGFiZWwgPSB0WzJdOyBfLm9wcy5wdXNoKG9wKTsgYnJlYWs7IH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHRbMl0pIF8ub3BzLnBvcCgpO1xuICAgICAgICAgICAgICAgICAgICBfLnRyeXMucG9wKCk7IGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgb3AgPSBib2R5LmNhbGwodGhpc0FyZywgXyk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHsgb3AgPSBbNiwgZV07IHkgPSAwOyB9IGZpbmFsbHkgeyBmID0gdCA9IDA7IH1cbiAgICAgICAgaWYgKG9wWzBdICYgNSkgdGhyb3cgb3BbMV07IHJldHVybiB7IHZhbHVlOiBvcFswXSA/IG9wWzFdIDogdm9pZCAwLCBkb25lOiB0cnVlIH07XG4gICAgfVxufTtcbmltcG9ydCB7IEFzeW5jUGFnaW5hdGUgfSBmcm9tIFwicmVhY3Qtc2VsZWN0LWFzeW5jLXBhZ2luYXRlXCI7XG5pbXBvcnQgeyBTaGlwcGluZ1NlcnZpY2UgfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvc2hpcHBpbmdcIjtcbmltcG9ydCAqIGFzIFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IHsgU2hvcCB9IGZyb20gXCIuLi8uLi9tb2RlbC9zaG9wXCI7XG5pbXBvcnQgeyBjb250YWluZXIgfSBmcm9tIFwidHN5cmluZ2VcIjtcbmltcG9ydCB7IE9yZGVyU3RhdGUgfSBmcm9tIFwiLi4vLi4vc3RhdGUvb3JkZXJcIjtcbmltcG9ydCB7IE9yZGVyIH0gZnJvbSBcIi4uLy4uL21vZGVsL29yZGVyXCI7XG5pbXBvcnQgeyB1c2VFZmZlY3QsIHVzZVN0YXRlIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBTZWxlY3RMYWJlbCB9IGZyb20gJy4uL2Jhc2UvU2VsZWN0TGFiZWwnO1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbnZhciBTaGlwcGluZ0NvbXBvbmVudCA9IGZ1bmN0aW9uIChfYSkge1xuICAgIHZhciBzaG9wID0gX2Euc2hvcCwgb3JkZXIgPSBfYS5vcmRlcjtcbiAgICB2YXIgX2IgPSB1c2VTdGF0ZShudWxsKSwgc2hvcFV1aWQgPSBfYlswXSwgc2V0U2hvcFV1aWQgPSBfYlsxXTtcbiAgICB2YXIgb3JkZXJTdGF0ZSA9IGNvbnRhaW5lci5yZXNvbHZlKE9yZGVyU3RhdGUpO1xuICAgIHZhciBfYyA9IHVzZVN0YXRlKDApLCBzaGlwcGluZyA9IF9jWzBdLCBzZXRTaGlwcGluZyA9IF9jWzFdO1xuICAgIHZhciBzaGlwcGluZ19zZXJ2aWNlID0gbmV3IFNoaXBwaW5nU2VydmljZSgpO1xuICAgIHZhciBsb2FkT3B0aW9ucyA9IGZ1bmN0aW9uIChzZWFyY2hRdWVyeSwgbG9hZGVkT3B0aW9ucykgeyByZXR1cm4gX19hd2FpdGVyKHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGRhdGE7XG4gICAgICAgIHJldHVybiBfX2dlbmVyYXRvcih0aGlzLCBmdW5jdGlvbiAoX2EpIHtcbiAgICAgICAgICAgIHN3aXRjaCAoX2EubGFiZWwpIHtcbiAgICAgICAgICAgICAgICBjYXNlIDA6IHJldHVybiBbNCAvKnlpZWxkKi8sIHNoaXBwaW5nX3NlcnZpY2UuZ2V0U2hpcHBpbmcoc2hvcCldO1xuICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICAgICAgZGF0YSA9IF9hLnNlbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFsyIC8qcmV0dXJuKi8sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zOiBkYXRhLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc01vcmU6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgfV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0pOyB9O1xuICAgIHVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgICAgIHNldFNob3BVdWlkKHNob3AudXVpZCk7XG4gICAgfSwgW3Nob3AudXVpZF0pO1xuICAgIHVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgICAgIHNldFNoaXBwaW5nKG9yZGVyLnNoaXBwaW5nLnVpZCk7XG4gICAgfSwgW29yZGVyLnNoaXBwaW5nXSk7XG4gICAgdmFyIG9uQ2hhbmdlID0gZnVuY3Rpb24gKG9wdGlvbikge1xuICAgICAgICBvcmRlci5zaGlwcGluZyA9IG9wdGlvbjtcbiAgICAgICAgdmFyIG9yZGVyT2JqID0gb3JkZXJTdGF0ZS5nZXRDdXJyZW50T3JkZXIoKS5nZXRWYWx1ZSgpO1xuICAgICAgICBvcmRlck9iai5zaGlwcGluZyA9IG9wdGlvbjtcbiAgICAgICAgb3JkZXJTdGF0ZS5zZXRDdXJyZW50T3JkZXIob3JkZXJPYmopO1xuICAgICAgICBzZXRTaGlwcGluZyhvcHRpb24udWlkKTtcbiAgICB9O1xuICAgIHJldHVybiAoUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7IGNsYXNzTmFtZTogXCJwLTJcIiB9LFxuICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KEFzeW5jUGFnaW5hdGUsIHsgZGVmYXVsdE9wdGlvbnM6IHRydWUsIGtleTogSlNPTi5zdHJpbmdpZnkoc2hvcFV1aWQpLCBjb21wb25lbnRzOiB7IENvbnRyb2w6IFNlbGVjdExhYmVsIH0sIGRlZmF1bHRWYWx1ZTogb3JkZXIuc2hpcHBpbmcsIHBsYWNlaG9sZGVyOiAnJywgbmFtZTogJ1ZlcnNhbmRhcnQnLCBsb2FkT3B0aW9uczogbG9hZE9wdGlvbnMsIGdldE9wdGlvblZhbHVlOiBmdW5jdGlvbiAob3B0aW9uKSB7IHJldHVybiBvcHRpb24udWlkOyB9LCBnZXRPcHRpb25MYWJlbDogZnVuY3Rpb24gKG9wdGlvbikgeyByZXR1cm4gb3B0aW9uLnRpdGxlOyB9LCBvbkNoYW5nZTogb25DaGFuZ2UsIGlzU2VhcmNoYWJsZTogZmFsc2UsIGNsYXNzTmFtZTogXCJcIi5jb25jYXQoc2hpcHBpbmcgPT0gMCA/IFwiYm9yZGVyIGJvcmRlci1yZWQtNTAwXCIgOiBcIlwiKSB9KSkpO1xufTtcblNoaXBwaW5nQ29tcG9uZW50LnByb3BUeXBlcyA9IHtcbiAgICBzaG9wOiBQcm9wVHlwZXMuaW5zdGFuY2VPZihTaG9wKSxcbiAgICBvcmRlcjogUHJvcFR5cGVzLmluc3RhbmNlT2YoT3JkZXIpLFxufTtcbmV4cG9ydCBkZWZhdWx0IFNoaXBwaW5nQ29tcG9uZW50O1xuIiwidmFyIF9fYXdhaXRlciA9ICh0aGlzICYmIHRoaXMuX19hd2FpdGVyKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgICB9KTtcbn07XG52YXIgX19nZW5lcmF0b3IgPSAodGhpcyAmJiB0aGlzLl9fZ2VuZXJhdG9yKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgYm9keSkge1xuICAgIHZhciBfID0geyBsYWJlbDogMCwgc2VudDogZnVuY3Rpb24oKSB7IGlmICh0WzBdICYgMSkgdGhyb3cgdFsxXTsgcmV0dXJuIHRbMV07IH0sIHRyeXM6IFtdLCBvcHM6IFtdIH0sIGYsIHksIHQsIGc7XG4gICAgcmV0dXJuIGcgPSB7IG5leHQ6IHZlcmIoMCksIFwidGhyb3dcIjogdmVyYigxKSwgXCJyZXR1cm5cIjogdmVyYigyKSB9LCB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgKGdbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhpczsgfSksIGc7XG4gICAgZnVuY3Rpb24gdmVyYihuKSB7IHJldHVybiBmdW5jdGlvbiAodikgeyByZXR1cm4gc3RlcChbbiwgdl0pOyB9OyB9XG4gICAgZnVuY3Rpb24gc3RlcChvcCkge1xuICAgICAgICBpZiAoZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy5cIik7XG4gICAgICAgIHdoaWxlIChfKSB0cnkge1xuICAgICAgICAgICAgaWYgKGYgPSAxLCB5ICYmICh0ID0gb3BbMF0gJiAyID8geVtcInJldHVyblwiXSA6IG9wWzBdID8geVtcInRocm93XCJdIHx8ICgodCA9IHlbXCJyZXR1cm5cIl0pICYmIHQuY2FsbCh5KSwgMCkgOiB5Lm5leHQpICYmICEodCA9IHQuY2FsbCh5LCBvcFsxXSkpLmRvbmUpIHJldHVybiB0O1xuICAgICAgICAgICAgaWYgKHkgPSAwLCB0KSBvcCA9IFtvcFswXSAmIDIsIHQudmFsdWVdO1xuICAgICAgICAgICAgc3dpdGNoIChvcFswXSkge1xuICAgICAgICAgICAgICAgIGNhc2UgMDogY2FzZSAxOiB0ID0gb3A7IGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgNDogXy5sYWJlbCsrOyByZXR1cm4geyB2YWx1ZTogb3BbMV0sIGRvbmU6IGZhbHNlIH07XG4gICAgICAgICAgICAgICAgY2FzZSA1OiBfLmxhYmVsKys7IHkgPSBvcFsxXTsgb3AgPSBbMF07IGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGNhc2UgNzogb3AgPSBfLm9wcy5wb3AoKTsgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICBpZiAoISh0ID0gXy50cnlzLCB0ID0gdC5sZW5ndGggPiAwICYmIHRbdC5sZW5ndGggLSAxXSkgJiYgKG9wWzBdID09PSA2IHx8IG9wWzBdID09PSAyKSkgeyBfID0gMDsgY29udGludWU7IH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSAzICYmICghdCB8fCAob3BbMV0gPiB0WzBdICYmIG9wWzFdIDwgdFszXSkpKSB7IF8ubGFiZWwgPSBvcFsxXTsgYnJlYWs7IH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSA2ICYmIF8ubGFiZWwgPCB0WzFdKSB7IF8ubGFiZWwgPSB0WzFdOyB0ID0gb3A7IGJyZWFrOyB9XG4gICAgICAgICAgICAgICAgICAgIGlmICh0ICYmIF8ubGFiZWwgPCB0WzJdKSB7IF8ubGFiZWwgPSB0WzJdOyBfLm9wcy5wdXNoKG9wKTsgYnJlYWs7IH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHRbMl0pIF8ub3BzLnBvcCgpO1xuICAgICAgICAgICAgICAgICAgICBfLnRyeXMucG9wKCk7IGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgb3AgPSBib2R5LmNhbGwodGhpc0FyZywgXyk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHsgb3AgPSBbNiwgZV07IHkgPSAwOyB9IGZpbmFsbHkgeyBmID0gdCA9IDA7IH1cbiAgICAgICAgaWYgKG9wWzBdICYgNSkgdGhyb3cgb3BbMV07IHJldHVybiB7IHZhbHVlOiBvcFswXSA/IG9wWzFdIDogdm9pZCAwLCBkb25lOiB0cnVlIH07XG4gICAgfVxufTtcbmltcG9ydCB7IEFzeW5jUGFnaW5hdGUgfSBmcm9tIFwicmVhY3Qtc2VsZWN0LWFzeW5jLXBhZ2luYXRlXCI7XG5pbXBvcnQgeyBTaG9wU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3Nob3AnO1xuaW1wb3J0IHsgY29udGFpbmVyIH0gZnJvbSAndHN5cmluZ2UnO1xuaW1wb3J0IHsgT3JkZXJTdGF0ZSB9IGZyb20gJy4uLy4uL3N0YXRlL29yZGVyJztcbmltcG9ydCB7IFNlbGVjdExhYmVsIH0gZnJvbSAnLi4vYmFzZS9TZWxlY3RMYWJlbCc7XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xudmFyIFNob3BTZWxlY3RDb21wb25lbnQgPSBmdW5jdGlvbiAocHJvcHMpIHtcbiAgICB2YXIgb3JkZXJTdGF0ZSA9IGNvbnRhaW5lci5yZXNvbHZlKE9yZGVyU3RhdGUpO1xuICAgIHZhciBzaG9wX3NlcnZpY2UgPSBjb250YWluZXIucmVzb2x2ZShTaG9wU2VydmljZSk7XG4gICAgdmFyIGxvYWRPcHRpb25zID0gZnVuY3Rpb24gKHNlYXJjaFF1ZXJ5LCBsb2FkZWRPcHRpb25zKSB7IHJldHVybiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgZGF0YTtcbiAgICAgICAgcmV0dXJuIF9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfYSkge1xuICAgICAgICAgICAgc3dpdGNoIChfYS5sYWJlbCkge1xuICAgICAgICAgICAgICAgIGNhc2UgMDogcmV0dXJuIFs0IC8qeWllbGQqLywgc2hvcF9zZXJ2aWNlLmdldFNob3BzKCldO1xuICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICAgICAgZGF0YSA9IF9hLnNlbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFsyIC8qcmV0dXJuKi8sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zOiBkYXRhLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc01vcmU6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgfV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0pOyB9O1xuICAgIHZhciBvbkNoYW5nZSA9IGZ1bmN0aW9uIChvcHRpb24pIHtcbiAgICAgICAgb3JkZXJTdGF0ZS5nZXRDdXJyZW50T3JkZXIoKS52YWx1ZS5zaG9wID0gb3B0aW9uO1xuICAgICAgICBwcm9wcy5jaGFuZ2Uob3B0aW9uKTtcbiAgICB9O1xuICAgIHJldHVybiAoUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCBudWxsLFxuICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KEFzeW5jUGFnaW5hdGUsIHsgZGVmYXVsdE9wdGlvbnM6IHRydWUsIHZhbHVlOiBwcm9wcy5zaG9wLCBjb21wb25lbnRzOiB7IENvbnRyb2w6IFNlbGVjdExhYmVsIH0sIGxvYWRPcHRpb25zOiBsb2FkT3B0aW9ucywgZ2V0T3B0aW9uVmFsdWU6IGZ1bmN0aW9uIChvcHRpb24pIHsgcmV0dXJuIG9wdGlvbi5pZDsgfSwgZ2V0T3B0aW9uTGFiZWw6IGZ1bmN0aW9uIChvcHRpb24pIHsgcmV0dXJuIG9wdGlvbi5uYW1lOyB9LCBvbkNoYW5nZTogb25DaGFuZ2UsIGlzU2VhcmNoYWJsZTogZmFsc2UsIGNsYXNzTmFtZTogXCJcIi5jb25jYXQocHJvcHMuc2hvcC51dWlkID09IFwiXCIgPyBcImJvcmRlciBib3JkZXItZGFuZ2VyXCIgOiBcImJvcmRlciBib3JkZXItc2xhdGUtMjAwXCIpLCBuYW1lOiAnU2hvcCcgfSkpKTtcbn07XG5leHBvcnQgZGVmYXVsdCBTaG9wU2VsZWN0Q29tcG9uZW50O1xuIiwiaW1wb3J0IFR5cGVTZWxlY3RDb21wb25lbnQgZnJvbSAnLi4vdHlwZS9UeXBlU2VsZWN0Q29tcG9uZW50JztcbmltcG9ydCBTaG9wU2VsZWN0Q29tcG9uZW50IGZyb20gJy4uL3Nob3AvU2hvcFNlbGVjdENvbXBvbmVudCc7XG5pbXBvcnQgKiBhcyBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCB7IFNob3AgfSBmcm9tIFwiLi4vLi4vbW9kZWwvc2hvcFwiO1xuaW1wb3J0IERyYWZ0Q29tcG9uZW50IGZyb20gXCIuLi9kcmFmdC9EcmFmdENvbXBvbmVudFwiO1xuaW1wb3J0IHsgT3JkZXIgfSBmcm9tIFwiLi4vLi4vbW9kZWwvb3JkZXJcIjtcbmltcG9ydCBDYWxjQ29tcG9uZW50IGZyb20gJy4uL2NhbGMvQ2FsY0NvbXBvbmVudCc7XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xudmFyIFRvcEJhckNvbXBvbmVudCA9IGZ1bmN0aW9uIChfYSkge1xuICAgIHZhciBzaG9wID0gX2Euc2hvcCwgb3JkZXIgPSBfYS5vcmRlciwgY2hhbmdlID0gX2EuY2hhbmdlO1xuICAgIHJldHVybiAoUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7IGNsYXNzTmFtZTogXCJmbGV4IGdhcC0zXCIgfSxcbiAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCBudWxsLFxuICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChEcmFmdENvbXBvbmVudCwgeyBvcmRlcjogb3JkZXIgfSkpLFxuICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHsgY2xhc3NOYW1lOiBcImZsZXgtYXV0b1wiIH0sXG4gICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFR5cGVTZWxlY3RDb21wb25lbnQsIHsgb3JkZXI6IG9yZGVyIH0pKSxcbiAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7IGNsYXNzTmFtZTogXCJmbGV4LWF1dG9cIiB9LFxuICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChTaG9wU2VsZWN0Q29tcG9uZW50LCB7IHNob3A6IHNob3AsIGNoYW5nZTogY2hhbmdlIH0pKSxcbiAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCBudWxsLFxuICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChDYWxjQ29tcG9uZW50LCBudWxsKSkpKTtcbn07XG5Ub3BCYXJDb21wb25lbnQucHJvcFR5cGVzID0ge1xuICAgIHNob3A6IFByb3BUeXBlcy5pbnN0YW5jZU9mKFNob3ApLFxuICAgIG9yZGVyOiBQcm9wVHlwZXMuaW5zdGFuY2VPZihPcmRlciksXG4gICAgY2hhbmdlOiBQcm9wVHlwZXMuZnVuY1xufTtcbmV4cG9ydCBkZWZhdWx0IFRvcEJhckNvbXBvbmVudDtcbiIsImltcG9ydCBTZWxlY3QgZnJvbSAncmVhY3Qtc2VsZWN0JztcbmltcG9ydCB7IHVzZUVmZmVjdCwgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBjb250YWluZXIgfSBmcm9tICd0c3lyaW5nZSc7XG5pbXBvcnQgeyBPcmRlclN0YXRlIH0gZnJvbSAnLi4vLi4vc3RhdGUvb3JkZXInO1xuaW1wb3J0IHsgU2VsZWN0TGFiZWwgfSBmcm9tICcuLi9iYXNlL1NlbGVjdExhYmVsJztcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG52YXIgVHlwZVNlbGVjdENvbXBvbmVudCA9IGZ1bmN0aW9uIChfYSkge1xuICAgIHZhciBvcmRlciA9IF9hLm9yZGVyO1xuICAgIHZhciBfYiA9IHVzZVN0YXRlKDApLCB0eXBlID0gX2JbMF0sIHNldFR5cGUgPSBfYlsxXTtcbiAgICB2YXIgb3JkZXJTdGF0ZSA9IGNvbnRhaW5lci5yZXNvbHZlKE9yZGVyU3RhdGUpO1xuICAgIHZhciBvcHRpb25zID0gW1xuICAgICAgICB7IHZhbHVlOiAxLCBsYWJlbDogJ0F1ZnRyYWcnIH0sXG4gICAgICAgIHsgdmFsdWU6IDIsIGxhYmVsOiAnQW5nZWJvdCcgfSxcbiAgICAgICAgeyB2YWx1ZTogMywgbGFiZWw6ICdTdG9ybm8nIH0sXG4gICAgICAgIHsgdmFsdWU6IDQsIGxhYmVsOiAnR3V0c2NocmlmdCcgfSxcbiAgICAgICAgeyB2YWx1ZTogNSwgbGFiZWw6ICdSZWNobnVuZycgfSxcbiAgICAgICAgeyB2YWx1ZTogNiwgbGFiZWw6ICdUZWlscmVjaG51bmcnIH0sXG4gICAgICAgIHsgdmFsdWU6IDcsIGxhYmVsOiAnVGVpbHN0b3JubycgfSxcbiAgICBdO1xuICAgIHZhciBvbkNoYW5nZSA9IGZ1bmN0aW9uIChvcHRpb24pIHtcbiAgICAgICAgdmFyIG9yZGVyID0gb3JkZXJTdGF0ZS5nZXRDdXJyZW50T3JkZXIoKS52YWx1ZTtcbiAgICAgICAgb3JkZXIudHlwZSA9IG9wdGlvbi52YWx1ZTtcbiAgICAgICAgb3JkZXJTdGF0ZS5zZXRDdXJyZW50T3JkZXIob3JkZXIpO1xuICAgICAgICBzZXRUeXBlKG9wdGlvbik7XG4gICAgfTtcbiAgICB1c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgICAgICBzZXRUeXBlKG9yZGVyLnR5cGUpO1xuICAgIH0sIFtvcmRlci50eXBlXSk7XG4gICAgcmV0dXJuIChSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIG51bGwsXG4gICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU2VsZWN0LCB7IGNsYXNzTmFtZTogXCJcIi5jb25jYXQodHlwZSA9PSAwID8gXCJib3JkZXIgYm9yZGVyLWRhbmdlclwiIDogXCJcIiksIG9wdGlvbnM6IG9wdGlvbnMsIGRlZmF1bHRWYWx1ZTogb3B0aW9ucy5maWx0ZXIoZnVuY3Rpb24gKGUpIHsgcmV0dXJuIGUudmFsdWUgPT0gdHlwZTsgfSkucG9wKCksIHZhbHVlOiBvcHRpb25zLmZpbHRlcihmdW5jdGlvbiAoZSkgeyByZXR1cm4gZS52YWx1ZSA9PSB0eXBlOyB9KS5wb3AoKSwgb25DaGFuZ2U6IG9uQ2hhbmdlLCBjb21wb25lbnRzOiB7IENvbnRyb2w6IFNlbGVjdExhYmVsIH0sIHBsYWNlaG9sZGVyOiBcIlwiLCBuYW1lOiBcIlR5cFwiIH0pKSk7XG59O1xuZXhwb3J0IGRlZmF1bHQgVHlwZVNlbGVjdENvbXBvbmVudDtcbiIsInZhciBfX2RlY29yYXRlID0gKHRoaXMgJiYgdGhpcy5fX2RlY29yYXRlKSB8fCBmdW5jdGlvbiAoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpIHtcbiAgICB2YXIgYyA9IGFyZ3VtZW50cy5sZW5ndGgsIHIgPSBjIDwgMyA/IHRhcmdldCA6IGRlc2MgPT09IG51bGwgPyBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGtleSkgOiBkZXNjLCBkO1xuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5kZWNvcmF0ZSA9PT0gXCJmdW5jdGlvblwiKSByID0gUmVmbGVjdC5kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYyk7XG4gICAgZWxzZSBmb3IgKHZhciBpID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgaWYgKGQgPSBkZWNvcmF0b3JzW2ldKSByID0gKGMgPCAzID8gZChyKSA6IGMgPiAzID8gZCh0YXJnZXQsIGtleSwgcikgOiBkKHRhcmdldCwga2V5KSkgfHwgcjtcbiAgICByZXR1cm4gYyA+IDMgJiYgciAmJiBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHIpLCByO1xufTtcbnZhciBfX21ldGFkYXRhID0gKHRoaXMgJiYgdGhpcy5fX21ldGFkYXRhKSB8fCBmdW5jdGlvbiAoaywgdikge1xuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5tZXRhZGF0YSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gUmVmbGVjdC5tZXRhZGF0YShrLCB2KTtcbn07XG52YXIgX19hd2FpdGVyID0gKHRoaXMgJiYgdGhpcy5fX2F3YWl0ZXIpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcbiAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xuICAgIH0pO1xufTtcbnZhciBfX2dlbmVyYXRvciA9ICh0aGlzICYmIHRoaXMuX19nZW5lcmF0b3IpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBib2R5KSB7XG4gICAgdmFyIF8gPSB7IGxhYmVsOiAwLCBzZW50OiBmdW5jdGlvbigpIHsgaWYgKHRbMF0gJiAxKSB0aHJvdyB0WzFdOyByZXR1cm4gdFsxXTsgfSwgdHJ5czogW10sIG9wczogW10gfSwgZiwgeSwgdCwgZztcbiAgICByZXR1cm4gZyA9IHsgbmV4dDogdmVyYigwKSwgXCJ0aHJvd1wiOiB2ZXJiKDEpLCBcInJldHVyblwiOiB2ZXJiKDIpIH0sIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiAoZ1tTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzOyB9KSwgZztcbiAgICBmdW5jdGlvbiB2ZXJiKG4pIHsgcmV0dXJuIGZ1bmN0aW9uICh2KSB7IHJldHVybiBzdGVwKFtuLCB2XSk7IH07IH1cbiAgICBmdW5jdGlvbiBzdGVwKG9wKSB7XG4gICAgICAgIGlmIChmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLlwiKTtcbiAgICAgICAgd2hpbGUgKF8pIHRyeSB7XG4gICAgICAgICAgICBpZiAoZiA9IDEsIHkgJiYgKHQgPSBvcFswXSAmIDIgPyB5W1wicmV0dXJuXCJdIDogb3BbMF0gPyB5W1widGhyb3dcIl0gfHwgKCh0ID0geVtcInJldHVyblwiXSkgJiYgdC5jYWxsKHkpLCAwKSA6IHkubmV4dCkgJiYgISh0ID0gdC5jYWxsKHksIG9wWzFdKSkuZG9uZSkgcmV0dXJuIHQ7XG4gICAgICAgICAgICBpZiAoeSA9IDAsIHQpIG9wID0gW29wWzBdICYgMiwgdC52YWx1ZV07XG4gICAgICAgICAgICBzd2l0Y2ggKG9wWzBdKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAwOiBjYXNlIDE6IHQgPSBvcDsgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSA0OiBfLmxhYmVsKys7IHJldHVybiB7IHZhbHVlOiBvcFsxXSwgZG9uZTogZmFsc2UgfTtcbiAgICAgICAgICAgICAgICBjYXNlIDU6IF8ubGFiZWwrKzsgeSA9IG9wWzFdOyBvcCA9IFswXTsgY29udGludWU7XG4gICAgICAgICAgICAgICAgY2FzZSA3OiBvcCA9IF8ub3BzLnBvcCgpOyBfLnRyeXMucG9wKCk7IGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIGlmICghKHQgPSBfLnRyeXMsIHQgPSB0Lmxlbmd0aCA+IDAgJiYgdFt0Lmxlbmd0aCAtIDFdKSAmJiAob3BbMF0gPT09IDYgfHwgb3BbMF0gPT09IDIpKSB7IF8gPSAwOyBjb250aW51ZTsgfVxuICAgICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDMgJiYgKCF0IHx8IChvcFsxXSA+IHRbMF0gJiYgb3BbMV0gPCB0WzNdKSkpIHsgXy5sYWJlbCA9IG9wWzFdOyBicmVhazsgfVxuICAgICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDYgJiYgXy5sYWJlbCA8IHRbMV0pIHsgXy5sYWJlbCA9IHRbMV07IHQgPSBvcDsgYnJlYWs7IH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHQgJiYgXy5sYWJlbCA8IHRbMl0pIHsgXy5sYWJlbCA9IHRbMl07IF8ub3BzLnB1c2gob3ApOyBicmVhazsgfVxuICAgICAgICAgICAgICAgICAgICBpZiAodFsyXSkgXy5vcHMucG9wKCk7XG4gICAgICAgICAgICAgICAgICAgIF8udHJ5cy5wb3AoKTsgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvcCA9IGJvZHkuY2FsbCh0aGlzQXJnLCBfKTtcbiAgICAgICAgfSBjYXRjaCAoZSkgeyBvcCA9IFs2LCBlXTsgeSA9IDA7IH0gZmluYWxseSB7IGYgPSB0ID0gMDsgfVxuICAgICAgICBpZiAob3BbMF0gJiA1KSB0aHJvdyBvcFsxXTsgcmV0dXJuIHsgdmFsdWU6IG9wWzBdID8gb3BbMV0gOiB2b2lkIDAsIGRvbmU6IHRydWUgfTtcbiAgICB9XG59O1xuaW1wb3J0IHsgYXV0b0luamVjdGFibGUsIHNpbmdsZXRvbiB9IGZyb20gXCJ0c3lyaW5nZVwiO1xuaW1wb3J0IHsgVG9rZW4gfSBmcm9tIFwiLi90b2tlblwiO1xuaW1wb3J0IGF4aW9zIGZyb20gJ2F4aW9zJztcbmltcG9ydCB7IEFjY291bnQgfSBmcm9tIFwiLi4vbW9kZWwvYWNjb3VudFwiO1xudmFyIEFjY291bnRTZXJ2aWNlID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIEFjY291bnRTZXJ2aWNlKHRva2VuKSB7XG4gICAgICAgIHRoaXMudG9rZW4gPSB0b2tlbjtcbiAgICB9XG4gICAgQWNjb3VudFNlcnZpY2UucHJvdG90eXBlLmdldEFjY291bnRzID0gZnVuY3Rpb24gKHNob3ApIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gX19nZW5lcmF0b3IodGhpcywgZnVuY3Rpb24gKF9iKSB7XG4gICAgICAgICAgICAgICAgc3dpdGNoIChfYi5sYWJlbCkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDA6IHJldHVybiBbNCAvKnlpZWxkKi8sIGF4aW9zLmdldCgnL2FwcHMvYXBpL2FjY291bnQvYWxsYnlzaG9wLycgKyBzaG9wLnV1aWQsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdBdXRob3JpemF0aW9uJzogJ0JlYXJlciAnICsgKChfYSA9IHRoaXMudG9rZW4pID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5jdXJyZW50VG9rZW4pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSkudGhlbihmdW5jdGlvbiAocmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzcG9uc2UuZGF0YS5kYXRhLm1hcChmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYWNjb3VudCA9IG5ldyBBY2NvdW50KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjY291bnQudWlkID0gaXRlbS51aWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjY291bnQudGl0bGUgPSBpdGVtLnRpdGxlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY2NvdW50LmFwcGVuZGl4ID0gaXRlbS5hcHBlbmRpeDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWNjb3VudC51dWlkID0gaXRlbS51dWlkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYWNjb3VudDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXTtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAxOiByZXR1cm4gWzIgLypyZXR1cm4qLywgX2Iuc2VudCgpXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBBY2NvdW50U2VydmljZSA9IF9fZGVjb3JhdGUoW1xuICAgICAgICBzaW5nbGV0b24oKSxcbiAgICAgICAgYXV0b0luamVjdGFibGUoKSxcbiAgICAgICAgX19tZXRhZGF0YShcImRlc2lnbjpwYXJhbXR5cGVzXCIsIFtUb2tlbl0pXG4gICAgXSwgQWNjb3VudFNlcnZpY2UpO1xuICAgIHJldHVybiBBY2NvdW50U2VydmljZTtcbn0oKSk7XG5leHBvcnQgeyBBY2NvdW50U2VydmljZSB9O1xuIiwidmFyIF9fZGVjb3JhdGUgPSAodGhpcyAmJiB0aGlzLl9fZGVjb3JhdGUpIHx8IGZ1bmN0aW9uIChkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYykge1xuICAgIHZhciBjID0gYXJndW1lbnRzLmxlbmd0aCwgciA9IGMgPCAzID8gdGFyZ2V0IDogZGVzYyA9PT0gbnVsbCA/IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KSA6IGRlc2MsIGQ7XG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0LmRlY29yYXRlID09PSBcImZ1bmN0aW9uXCIpIHIgPSBSZWZsZWN0LmRlY29yYXRlKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKTtcbiAgICBlbHNlIGZvciAodmFyIGkgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSBpZiAoZCA9IGRlY29yYXRvcnNbaV0pIHIgPSAoYyA8IDMgPyBkKHIpIDogYyA+IDMgPyBkKHRhcmdldCwga2V5LCByKSA6IGQodGFyZ2V0LCBrZXkpKSB8fCByO1xuICAgIHJldHVybiBjID4gMyAmJiByICYmIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgciksIHI7XG59O1xudmFyIF9fbWV0YWRhdGEgPSAodGhpcyAmJiB0aGlzLl9fbWV0YWRhdGEpIHx8IGZ1bmN0aW9uIChrLCB2KSB7XG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0Lm1ldGFkYXRhID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiBSZWZsZWN0Lm1ldGFkYXRhKGssIHYpO1xufTtcbnZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gICAgfSk7XG59O1xudmFyIF9fZ2VuZXJhdG9yID0gKHRoaXMgJiYgdGhpcy5fX2dlbmVyYXRvcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIGJvZHkpIHtcbiAgICB2YXIgXyA9IHsgbGFiZWw6IDAsIHNlbnQ6IGZ1bmN0aW9uKCkgeyBpZiAodFswXSAmIDEpIHRocm93IHRbMV07IHJldHVybiB0WzFdOyB9LCB0cnlzOiBbXSwgb3BzOiBbXSB9LCBmLCB5LCB0LCBnO1xuICAgIHJldHVybiBnID0geyBuZXh0OiB2ZXJiKDApLCBcInRocm93XCI6IHZlcmIoMSksIFwicmV0dXJuXCI6IHZlcmIoMikgfSwgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIChnW1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbigpIHsgcmV0dXJuIHRoaXM7IH0pLCBnO1xuICAgIGZ1bmN0aW9uIHZlcmIobikgeyByZXR1cm4gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIHN0ZXAoW24sIHZdKTsgfTsgfVxuICAgIGZ1bmN0aW9uIHN0ZXAob3ApIHtcbiAgICAgICAgaWYgKGYpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuXCIpO1xuICAgICAgICB3aGlsZSAoXykgdHJ5IHtcbiAgICAgICAgICAgIGlmIChmID0gMSwgeSAmJiAodCA9IG9wWzBdICYgMiA/IHlbXCJyZXR1cm5cIl0gOiBvcFswXSA/IHlbXCJ0aHJvd1wiXSB8fCAoKHQgPSB5W1wicmV0dXJuXCJdKSAmJiB0LmNhbGwoeSksIDApIDogeS5uZXh0KSAmJiAhKHQgPSB0LmNhbGwoeSwgb3BbMV0pKS5kb25lKSByZXR1cm4gdDtcbiAgICAgICAgICAgIGlmICh5ID0gMCwgdCkgb3AgPSBbb3BbMF0gJiAyLCB0LnZhbHVlXTtcbiAgICAgICAgICAgIHN3aXRjaCAob3BbMF0pIHtcbiAgICAgICAgICAgICAgICBjYXNlIDA6IGNhc2UgMTogdCA9IG9wOyBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIDQ6IF8ubGFiZWwrKzsgcmV0dXJuIHsgdmFsdWU6IG9wWzFdLCBkb25lOiBmYWxzZSB9O1xuICAgICAgICAgICAgICAgIGNhc2UgNTogXy5sYWJlbCsrOyB5ID0gb3BbMV07IG9wID0gWzBdOyBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBjYXNlIDc6IG9wID0gXy5vcHMucG9wKCk7IF8udHJ5cy5wb3AoKTsgY29udGludWU7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEodCA9IF8udHJ5cywgdCA9IHQubGVuZ3RoID4gMCAmJiB0W3QubGVuZ3RoIC0gMV0pICYmIChvcFswXSA9PT0gNiB8fCBvcFswXSA9PT0gMikpIHsgXyA9IDA7IGNvbnRpbnVlOyB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gMyAmJiAoIXQgfHwgKG9wWzFdID4gdFswXSAmJiBvcFsxXSA8IHRbM10pKSkgeyBfLmxhYmVsID0gb3BbMV07IGJyZWFrOyB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gNiAmJiBfLmxhYmVsIDwgdFsxXSkgeyBfLmxhYmVsID0gdFsxXTsgdCA9IG9wOyBicmVhazsgfVxuICAgICAgICAgICAgICAgICAgICBpZiAodCAmJiBfLmxhYmVsIDwgdFsyXSkgeyBfLmxhYmVsID0gdFsyXTsgXy5vcHMucHVzaChvcCk7IGJyZWFrOyB9XG4gICAgICAgICAgICAgICAgICAgIGlmICh0WzJdKSBfLm9wcy5wb3AoKTtcbiAgICAgICAgICAgICAgICAgICAgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG9wID0gYm9keS5jYWxsKHRoaXNBcmcsIF8pO1xuICAgICAgICB9IGNhdGNoIChlKSB7IG9wID0gWzYsIGVdOyB5ID0gMDsgfSBmaW5hbGx5IHsgZiA9IHQgPSAwOyB9XG4gICAgICAgIGlmIChvcFswXSAmIDUpIHRocm93IG9wWzFdOyByZXR1cm4geyB2YWx1ZTogb3BbMF0gPyBvcFsxXSA6IHZvaWQgMCwgZG9uZTogdHJ1ZSB9O1xuICAgIH1cbn07XG5pbXBvcnQgeyBhdXRvSW5qZWN0YWJsZSwgc2luZ2xldG9uIH0gZnJvbSBcInRzeXJpbmdlXCI7XG5pbXBvcnQgeyBUb2tlbiB9IGZyb20gXCIuL3Rva2VuXCI7XG5pbXBvcnQgYXhpb3MgZnJvbSAnYXhpb3MnO1xuaW1wb3J0IHsgQWRkcmVzcyB9IGZyb20gXCIuLi9tb2RlbC9hZGRyZXNzXCI7XG52YXIgQWRkcmVzc1NlcnZpY2UgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gQWRkcmVzc1NlcnZpY2UodG9rZW4pIHtcbiAgICAgICAgdGhpcy50b2tlbiA9IHRva2VuO1xuICAgIH1cbiAgICBBZGRyZXNzU2VydmljZS5wcm90b3R5cGUuY3JlYXRlID0gZnVuY3Rpb24gKGFkZHJlc3MpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gX19nZW5lcmF0b3IodGhpcywgZnVuY3Rpb24gKF9iKSB7XG4gICAgICAgICAgICAgICAgc3dpdGNoIChfYi5sYWJlbCkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDA6IHJldHVybiBbNCAvKnlpZWxkKi8sIGF4aW9zLnBvc3QoJy9hcHBzL2FwaS9jb250YWN0L2FkZHJlc3MvY3JlYXRlJywgeyAnYWRkcmVzcyc6IGFkZHJlc3MgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0F1dGhvcml6YXRpb24nOiAnQmVhcmVyICcgKyAoKF9hID0gdGhpcy50b2tlbikgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmN1cnJlbnRUb2tlbilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9KS50aGVuKGZ1bmN0aW9uIChyZXNwb25zZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXNwb25zZS5kYXRhO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSldO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDE6IHJldHVybiBbMiAvKnJldHVybiovLCBfYi5zZW50KCldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIEFkZHJlc3NTZXJ2aWNlLnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbiAoYWRkcmVzcykge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBfX2dlbmVyYXRvcih0aGlzLCBmdW5jdGlvbiAoX2IpIHtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKF9iLmxhYmVsKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMDogcmV0dXJuIFs0IC8qeWllbGQqLywgYXhpb3MucHV0KCcvYXBwcy9hcGkvY29udGFjdC9hZGRyZXNzL3VwZGF0ZS8nICsgYWRkcmVzcy51dWlkLCB7ICdhZGRyZXNzJzogYWRkcmVzcyB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQXV0aG9yaXphdGlvbic6ICdCZWFyZXIgJyArICgoX2EgPSB0aGlzLnRva2VuKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuY3VycmVudFRva2VuKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0pLnRoZW4oZnVuY3Rpb24gKHJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlLmRhdGE7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KV07XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMTogcmV0dXJuIFsyIC8qcmV0dXJuKi8sIF9iLnNlbnQoKV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgQWRkcmVzc1NlcnZpY2UucHJvdG90eXBlLmdldENvbnRhY3RBZGRyZXNzID0gZnVuY3Rpb24gKGNvbnRhY3QsIHR5cGUpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gX19nZW5lcmF0b3IodGhpcywgZnVuY3Rpb24gKF9iKSB7XG4gICAgICAgICAgICAgICAgc3dpdGNoIChfYi5sYWJlbCkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDA6IHJldHVybiBbNCAvKnlpZWxkKi8sIGF4aW9zLmdldCgnL2FwcHMvYXBpL2NvbnRhY3QvYWRkcmVzcy9nZXRhbGxmb3J0eXBlLycgKyBjb250YWN0ICsgJy8nICsgdHlwZSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0F1dGhvcml6YXRpb24nOiAnQmVhcmVyICcgKyAoKF9hID0gdGhpcy50b2tlbikgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmN1cnJlbnRUb2tlbilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9KS50aGVuKGZ1bmN0aW9uIChyZXNwb25zZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXNwb25zZS5kYXRhLmRhdGEubWFwKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBhZGRyZXNzID0gbmV3IEFkZHJlc3M7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZHJlc3MudWlkID0gaXRlbS51aWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZHJlc3MuZmlyc3RuYW1lID0gaXRlbS5maXJzdG5hbWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZHJlc3MubGFzdG5hbWUgPSBpdGVtLmxhc3RuYW1lO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRyZXNzLnN0cmVldCA9IGl0ZW0uc3RyZWV0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRyZXNzLmNvdW50cnkgPSBpdGVtLmNvdW50cnk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZHJlc3MudXN0aWQgPSBpdGVtLnVzdGlkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRyZXNzLmhvdXNlTnVtYmVyID0gaXRlbS5ob3VzZU51bWJlcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkcmVzcy56aXAgPSBpdGVtLnppcDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkcmVzcy5jaXR5ID0gaXRlbS5jaXR5O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRyZXNzLmNvbXBhbnkgPSBpdGVtLmNvbXBhbnk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZHJlc3MuY29tcGFueTIgPSBpdGVtLmNvbXBhbnkyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRyZXNzLnV1aWQgPSBpdGVtLnV1aWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBhZGRyZXNzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSldO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDE6IHJldHVybiBbMiAvKnJldHVybiovLCBfYi5zZW50KCldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIEFkZHJlc3NTZXJ2aWNlID0gX19kZWNvcmF0ZShbXG4gICAgICAgIHNpbmdsZXRvbigpLFxuICAgICAgICBhdXRvSW5qZWN0YWJsZSgpLFxuICAgICAgICBfX21ldGFkYXRhKFwiZGVzaWduOnBhcmFtdHlwZXNcIiwgW1Rva2VuXSlcbiAgICBdLCBBZGRyZXNzU2VydmljZSk7XG4gICAgcmV0dXJuIEFkZHJlc3NTZXJ2aWNlO1xufSgpKTtcbmV4cG9ydCB7IEFkZHJlc3NTZXJ2aWNlIH07XG4iLCJ2YXIgX19kZWNvcmF0ZSA9ICh0aGlzICYmIHRoaXMuX19kZWNvcmF0ZSkgfHwgZnVuY3Rpb24gKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKSB7XG4gICAgdmFyIGMgPSBhcmd1bWVudHMubGVuZ3RoLCByID0gYyA8IDMgPyB0YXJnZXQgOiBkZXNjID09PSBudWxsID8gZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpIDogZGVzYywgZDtcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QuZGVjb3JhdGUgPT09IFwiZnVuY3Rpb25cIikgciA9IFJlZmxlY3QuZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpO1xuICAgIGVsc2UgZm9yICh2YXIgaSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIGlmIChkID0gZGVjb3JhdG9yc1tpXSkgciA9IChjIDwgMyA/IGQocikgOiBjID4gMyA/IGQodGFyZ2V0LCBrZXksIHIpIDogZCh0YXJnZXQsIGtleSkpIHx8IHI7XG4gICAgcmV0dXJuIGMgPiAzICYmIHIgJiYgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCByKSwgcjtcbn07XG52YXIgX19tZXRhZGF0YSA9ICh0aGlzICYmIHRoaXMuX19tZXRhZGF0YSkgfHwgZnVuY3Rpb24gKGssIHYpIHtcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QubWV0YWRhdGEgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIFJlZmxlY3QubWV0YWRhdGEoaywgdik7XG59O1xudmFyIF9fYXdhaXRlciA9ICh0aGlzICYmIHRoaXMuX19hd2FpdGVyKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgICB9KTtcbn07XG52YXIgX19nZW5lcmF0b3IgPSAodGhpcyAmJiB0aGlzLl9fZ2VuZXJhdG9yKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgYm9keSkge1xuICAgIHZhciBfID0geyBsYWJlbDogMCwgc2VudDogZnVuY3Rpb24oKSB7IGlmICh0WzBdICYgMSkgdGhyb3cgdFsxXTsgcmV0dXJuIHRbMV07IH0sIHRyeXM6IFtdLCBvcHM6IFtdIH0sIGYsIHksIHQsIGc7XG4gICAgcmV0dXJuIGcgPSB7IG5leHQ6IHZlcmIoMCksIFwidGhyb3dcIjogdmVyYigxKSwgXCJyZXR1cm5cIjogdmVyYigyKSB9LCB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgKGdbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhpczsgfSksIGc7XG4gICAgZnVuY3Rpb24gdmVyYihuKSB7IHJldHVybiBmdW5jdGlvbiAodikgeyByZXR1cm4gc3RlcChbbiwgdl0pOyB9OyB9XG4gICAgZnVuY3Rpb24gc3RlcChvcCkge1xuICAgICAgICBpZiAoZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy5cIik7XG4gICAgICAgIHdoaWxlIChfKSB0cnkge1xuICAgICAgICAgICAgaWYgKGYgPSAxLCB5ICYmICh0ID0gb3BbMF0gJiAyID8geVtcInJldHVyblwiXSA6IG9wWzBdID8geVtcInRocm93XCJdIHx8ICgodCA9IHlbXCJyZXR1cm5cIl0pICYmIHQuY2FsbCh5KSwgMCkgOiB5Lm5leHQpICYmICEodCA9IHQuY2FsbCh5LCBvcFsxXSkpLmRvbmUpIHJldHVybiB0O1xuICAgICAgICAgICAgaWYgKHkgPSAwLCB0KSBvcCA9IFtvcFswXSAmIDIsIHQudmFsdWVdO1xuICAgICAgICAgICAgc3dpdGNoIChvcFswXSkge1xuICAgICAgICAgICAgICAgIGNhc2UgMDogY2FzZSAxOiB0ID0gb3A7IGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgNDogXy5sYWJlbCsrOyByZXR1cm4geyB2YWx1ZTogb3BbMV0sIGRvbmU6IGZhbHNlIH07XG4gICAgICAgICAgICAgICAgY2FzZSA1OiBfLmxhYmVsKys7IHkgPSBvcFsxXTsgb3AgPSBbMF07IGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGNhc2UgNzogb3AgPSBfLm9wcy5wb3AoKTsgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICBpZiAoISh0ID0gXy50cnlzLCB0ID0gdC5sZW5ndGggPiAwICYmIHRbdC5sZW5ndGggLSAxXSkgJiYgKG9wWzBdID09PSA2IHx8IG9wWzBdID09PSAyKSkgeyBfID0gMDsgY29udGludWU7IH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSAzICYmICghdCB8fCAob3BbMV0gPiB0WzBdICYmIG9wWzFdIDwgdFszXSkpKSB7IF8ubGFiZWwgPSBvcFsxXTsgYnJlYWs7IH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSA2ICYmIF8ubGFiZWwgPCB0WzFdKSB7IF8ubGFiZWwgPSB0WzFdOyB0ID0gb3A7IGJyZWFrOyB9XG4gICAgICAgICAgICAgICAgICAgIGlmICh0ICYmIF8ubGFiZWwgPCB0WzJdKSB7IF8ubGFiZWwgPSB0WzJdOyBfLm9wcy5wdXNoKG9wKTsgYnJlYWs7IH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHRbMl0pIF8ub3BzLnBvcCgpO1xuICAgICAgICAgICAgICAgICAgICBfLnRyeXMucG9wKCk7IGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgb3AgPSBib2R5LmNhbGwodGhpc0FyZywgXyk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHsgb3AgPSBbNiwgZV07IHkgPSAwOyB9IGZpbmFsbHkgeyBmID0gdCA9IDA7IH1cbiAgICAgICAgaWYgKG9wWzBdICYgNSkgdGhyb3cgb3BbMV07IHJldHVybiB7IHZhbHVlOiBvcFswXSA/IG9wWzFdIDogdm9pZCAwLCBkb25lOiB0cnVlIH07XG4gICAgfVxufTtcbmltcG9ydCB7IGF1dG9JbmplY3RhYmxlLCBzaW5nbGV0b24gfSBmcm9tIFwidHN5cmluZ2VcIjtcbmltcG9ydCB7IFRva2VuIH0gZnJvbSBcIi4vdG9rZW5cIjtcbmltcG9ydCBheGlvcyBmcm9tICdheGlvcyc7XG5pbXBvcnQgeyBDb250YWN0IH0gZnJvbSBcIi4uL21vZGVsL2NvbnRhY3RcIjtcbnZhciBDb250YWN0U2VydmljZSA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBDb250YWN0U2VydmljZSh0b2tlbikge1xuICAgICAgICB0aGlzLnRva2VuID0gdG9rZW47XG4gICAgfVxuICAgIENvbnRhY3RTZXJ2aWNlLnByb3RvdHlwZS5jcmVhdGVDb250YWN0ID0gZnVuY3Rpb24gKGNvbnRhY3QpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gX19nZW5lcmF0b3IodGhpcywgZnVuY3Rpb24gKF9iKSB7XG4gICAgICAgICAgICAgICAgc3dpdGNoIChfYi5sYWJlbCkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDA6IHJldHVybiBbNCAvKnlpZWxkKi8sIGF4aW9zLnBvc3QoJy9hcHBzL2FwaS9jb250YWN0L2NyZWF0ZScsIHsgJ2NvbnRhY3QnOiBjb250YWN0IH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdBdXRob3JpemF0aW9uJzogJ0JlYXJlciAnICsgKChfYSA9IHRoaXMudG9rZW4pID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5jdXJyZW50VG9rZW4pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSkudGhlbihmdW5jdGlvbiAocmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzcG9uc2UuZGF0YTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXTtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAxOiByZXR1cm4gWzIgLypyZXR1cm4qLywgX2Iuc2VudCgpXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBDb250YWN0U2VydmljZS5wcm90b3R5cGUudXBkYXRlQ29udGFjdCA9IGZ1bmN0aW9uIChjb250YWN0KSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIF9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfYikge1xuICAgICAgICAgICAgICAgIHN3aXRjaCAoX2IubGFiZWwpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAwOiByZXR1cm4gWzQgLyp5aWVsZCovLCBheGlvcy5wdXQoJy9hcHBzL2FwaS9jb250YWN0L3VwZGF0ZS8nICsgY29udGFjdC51dWlkLCB7ICdjb250YWN0JzogY29udGFjdCB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQXV0aG9yaXphdGlvbic6ICdCZWFyZXIgJyArICgoX2EgPSB0aGlzLnRva2VuKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuY3VycmVudFRva2VuKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0pLnRoZW4oZnVuY3Rpb24gKHJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlLmRhdGE7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KV07XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMTogcmV0dXJuIFsyIC8qcmV0dXJuKi8sIF9iLnNlbnQoKV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgQ29udGFjdFNlcnZpY2UucHJvdG90eXBlLmdldENvbnRhY3RzID0gZnVuY3Rpb24gKHNlYXJjaFF1ZXJ5LCBwYWdlLCBzaG9wKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIF9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfYikge1xuICAgICAgICAgICAgICAgIHN3aXRjaCAoX2IubGFiZWwpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAwOiByZXR1cm4gWzQgLyp5aWVsZCovLCBheGlvcy5nZXQoJy9hcHBzL2FwaS9jb250YWN0L2FsbGJ5c2hvcC8nICsgc2hvcC51dWlkICsgJz90ZXJtPScgKyBzZWFyY2hRdWVyeSArICcmcGFnZT0nICsgcGFnZSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0F1dGhvcml6YXRpb24nOiAnQmVhcmVyICcgKyAoKF9hID0gdGhpcy50b2tlbikgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmN1cnJlbnRUb2tlbilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9KS50aGVuKGZ1bmN0aW9uIChyZXNwb25zZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXNwb25zZS5kYXRhLmRhdGEubWFwKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb250YWN0ID0gbmV3IENvbnRhY3Q7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhY3QucGFyc2VGcm9tSnNvbih7IGNvbnRhY3Q6IGl0ZW0gfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjb250YWN0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSldO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDE6IHJldHVybiBbMiAvKnJldHVybiovLCBfYi5zZW50KCldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIENvbnRhY3RTZXJ2aWNlID0gX19kZWNvcmF0ZShbXG4gICAgICAgIHNpbmdsZXRvbigpLFxuICAgICAgICBhdXRvSW5qZWN0YWJsZSgpLFxuICAgICAgICBfX21ldGFkYXRhKFwiZGVzaWduOnBhcmFtdHlwZXNcIiwgW1Rva2VuXSlcbiAgICBdLCBDb250YWN0U2VydmljZSk7XG4gICAgcmV0dXJuIENvbnRhY3RTZXJ2aWNlO1xufSgpKTtcbmV4cG9ydCB7IENvbnRhY3RTZXJ2aWNlIH07XG4iLCJ2YXIgX19kZWNvcmF0ZSA9ICh0aGlzICYmIHRoaXMuX19kZWNvcmF0ZSkgfHwgZnVuY3Rpb24gKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKSB7XG4gICAgdmFyIGMgPSBhcmd1bWVudHMubGVuZ3RoLCByID0gYyA8IDMgPyB0YXJnZXQgOiBkZXNjID09PSBudWxsID8gZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpIDogZGVzYywgZDtcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QuZGVjb3JhdGUgPT09IFwiZnVuY3Rpb25cIikgciA9IFJlZmxlY3QuZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpO1xuICAgIGVsc2UgZm9yICh2YXIgaSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIGlmIChkID0gZGVjb3JhdG9yc1tpXSkgciA9IChjIDwgMyA/IGQocikgOiBjID4gMyA/IGQodGFyZ2V0LCBrZXksIHIpIDogZCh0YXJnZXQsIGtleSkpIHx8IHI7XG4gICAgcmV0dXJuIGMgPiAzICYmIHIgJiYgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCByKSwgcjtcbn07XG52YXIgX19hd2FpdGVyID0gKHRoaXMgJiYgdGhpcy5fX2F3YWl0ZXIpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcbiAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xuICAgIH0pO1xufTtcbnZhciBfX2dlbmVyYXRvciA9ICh0aGlzICYmIHRoaXMuX19nZW5lcmF0b3IpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBib2R5KSB7XG4gICAgdmFyIF8gPSB7IGxhYmVsOiAwLCBzZW50OiBmdW5jdGlvbigpIHsgaWYgKHRbMF0gJiAxKSB0aHJvdyB0WzFdOyByZXR1cm4gdFsxXTsgfSwgdHJ5czogW10sIG9wczogW10gfSwgZiwgeSwgdCwgZztcbiAgICByZXR1cm4gZyA9IHsgbmV4dDogdmVyYigwKSwgXCJ0aHJvd1wiOiB2ZXJiKDEpLCBcInJldHVyblwiOiB2ZXJiKDIpIH0sIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiAoZ1tTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzOyB9KSwgZztcbiAgICBmdW5jdGlvbiB2ZXJiKG4pIHsgcmV0dXJuIGZ1bmN0aW9uICh2KSB7IHJldHVybiBzdGVwKFtuLCB2XSk7IH07IH1cbiAgICBmdW5jdGlvbiBzdGVwKG9wKSB7XG4gICAgICAgIGlmIChmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLlwiKTtcbiAgICAgICAgd2hpbGUgKF8pIHRyeSB7XG4gICAgICAgICAgICBpZiAoZiA9IDEsIHkgJiYgKHQgPSBvcFswXSAmIDIgPyB5W1wicmV0dXJuXCJdIDogb3BbMF0gPyB5W1widGhyb3dcIl0gfHwgKCh0ID0geVtcInJldHVyblwiXSkgJiYgdC5jYWxsKHkpLCAwKSA6IHkubmV4dCkgJiYgISh0ID0gdC5jYWxsKHksIG9wWzFdKSkuZG9uZSkgcmV0dXJuIHQ7XG4gICAgICAgICAgICBpZiAoeSA9IDAsIHQpIG9wID0gW29wWzBdICYgMiwgdC52YWx1ZV07XG4gICAgICAgICAgICBzd2l0Y2ggKG9wWzBdKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAwOiBjYXNlIDE6IHQgPSBvcDsgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSA0OiBfLmxhYmVsKys7IHJldHVybiB7IHZhbHVlOiBvcFsxXSwgZG9uZTogZmFsc2UgfTtcbiAgICAgICAgICAgICAgICBjYXNlIDU6IF8ubGFiZWwrKzsgeSA9IG9wWzFdOyBvcCA9IFswXTsgY29udGludWU7XG4gICAgICAgICAgICAgICAgY2FzZSA3OiBvcCA9IF8ub3BzLnBvcCgpOyBfLnRyeXMucG9wKCk7IGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIGlmICghKHQgPSBfLnRyeXMsIHQgPSB0Lmxlbmd0aCA+IDAgJiYgdFt0Lmxlbmd0aCAtIDFdKSAmJiAob3BbMF0gPT09IDYgfHwgb3BbMF0gPT09IDIpKSB7IF8gPSAwOyBjb250aW51ZTsgfVxuICAgICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDMgJiYgKCF0IHx8IChvcFsxXSA+IHRbMF0gJiYgb3BbMV0gPCB0WzNdKSkpIHsgXy5sYWJlbCA9IG9wWzFdOyBicmVhazsgfVxuICAgICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDYgJiYgXy5sYWJlbCA8IHRbMV0pIHsgXy5sYWJlbCA9IHRbMV07IHQgPSBvcDsgYnJlYWs7IH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHQgJiYgXy5sYWJlbCA8IHRbMl0pIHsgXy5sYWJlbCA9IHRbMl07IF8ub3BzLnB1c2gob3ApOyBicmVhazsgfVxuICAgICAgICAgICAgICAgICAgICBpZiAodFsyXSkgXy5vcHMucG9wKCk7XG4gICAgICAgICAgICAgICAgICAgIF8udHJ5cy5wb3AoKTsgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvcCA9IGJvZHkuY2FsbCh0aGlzQXJnLCBfKTtcbiAgICAgICAgfSBjYXRjaCAoZSkgeyBvcCA9IFs2LCBlXTsgeSA9IDA7IH0gZmluYWxseSB7IGYgPSB0ID0gMDsgfVxuICAgICAgICBpZiAob3BbMF0gJiA1KSB0aHJvdyBvcFsxXTsgcmV0dXJuIHsgdmFsdWU6IG9wWzBdID8gb3BbMV0gOiB2b2lkIDAsIGRvbmU6IHRydWUgfTtcbiAgICB9XG59O1xuaW1wb3J0IHsgYXV0b0luamVjdGFibGUsIHNpbmdsZXRvbiB9IGZyb20gXCJ0c3lyaW5nZVwiO1xuaW1wb3J0IGF4aW9zIGZyb20gJ2F4aW9zJztcbmltcG9ydCB7IENvdW50cnkgfSBmcm9tIFwiLi4vbW9kZWwvY291bnRyeVwiO1xudmFyIENvdW50cnlTZXJ2aWNlID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIENvdW50cnlTZXJ2aWNlKCkge1xuICAgIH1cbiAgICBDb3VudHJ5U2VydmljZS5wcm90b3R5cGUuZ2V0Q291bnRyeSA9IGZ1bmN0aW9uIChzaG9wKSB7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBfX2dlbmVyYXRvcih0aGlzLCBmdW5jdGlvbiAoX2EpIHtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKF9hLmxhYmVsKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMDogcmV0dXJuIFs0IC8qeWllbGQqLywgYXhpb3MuZ2V0KCcvYXBwcy9hcGkvY291bnRyeS9ieS9zaG9wLycgKyBzaG9wLnV1aWQpLnRoZW4oZnVuY3Rpb24gKHJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlLmRhdGEuZGF0YS5tYXAoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvdW50cnkgPSBuZXcgQ291bnRyeSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudHJ5LnBhcnNlRnJvbUpzb24oaXRlbSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjb3VudHJ5O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSldO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDE6IHJldHVybiBbMiAvKnJldHVybiovLCBfYS5zZW50KCldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIENvdW50cnlTZXJ2aWNlID0gX19kZWNvcmF0ZShbXG4gICAgICAgIHNpbmdsZXRvbigpLFxuICAgICAgICBhdXRvSW5qZWN0YWJsZSgpXG4gICAgXSwgQ291bnRyeVNlcnZpY2UpO1xuICAgIHJldHVybiBDb3VudHJ5U2VydmljZTtcbn0oKSk7XG5leHBvcnQgeyBDb3VudHJ5U2VydmljZSB9O1xuIiwidmFyIF9fZGVjb3JhdGUgPSAodGhpcyAmJiB0aGlzLl9fZGVjb3JhdGUpIHx8IGZ1bmN0aW9uIChkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYykge1xuICAgIHZhciBjID0gYXJndW1lbnRzLmxlbmd0aCwgciA9IGMgPCAzID8gdGFyZ2V0IDogZGVzYyA9PT0gbnVsbCA/IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KSA6IGRlc2MsIGQ7XG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0LmRlY29yYXRlID09PSBcImZ1bmN0aW9uXCIpIHIgPSBSZWZsZWN0LmRlY29yYXRlKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKTtcbiAgICBlbHNlIGZvciAodmFyIGkgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSBpZiAoZCA9IGRlY29yYXRvcnNbaV0pIHIgPSAoYyA8IDMgPyBkKHIpIDogYyA+IDMgPyBkKHRhcmdldCwga2V5LCByKSA6IGQodGFyZ2V0LCBrZXkpKSB8fCByO1xuICAgIHJldHVybiBjID4gMyAmJiByICYmIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgciksIHI7XG59O1xudmFyIF9fbWV0YWRhdGEgPSAodGhpcyAmJiB0aGlzLl9fbWV0YWRhdGEpIHx8IGZ1bmN0aW9uIChrLCB2KSB7XG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0Lm1ldGFkYXRhID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiBSZWZsZWN0Lm1ldGFkYXRhKGssIHYpO1xufTtcbnZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gICAgfSk7XG59O1xudmFyIF9fZ2VuZXJhdG9yID0gKHRoaXMgJiYgdGhpcy5fX2dlbmVyYXRvcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIGJvZHkpIHtcbiAgICB2YXIgXyA9IHsgbGFiZWw6IDAsIHNlbnQ6IGZ1bmN0aW9uKCkgeyBpZiAodFswXSAmIDEpIHRocm93IHRbMV07IHJldHVybiB0WzFdOyB9LCB0cnlzOiBbXSwgb3BzOiBbXSB9LCBmLCB5LCB0LCBnO1xuICAgIHJldHVybiBnID0geyBuZXh0OiB2ZXJiKDApLCBcInRocm93XCI6IHZlcmIoMSksIFwicmV0dXJuXCI6IHZlcmIoMikgfSwgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIChnW1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbigpIHsgcmV0dXJuIHRoaXM7IH0pLCBnO1xuICAgIGZ1bmN0aW9uIHZlcmIobikgeyByZXR1cm4gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIHN0ZXAoW24sIHZdKTsgfTsgfVxuICAgIGZ1bmN0aW9uIHN0ZXAob3ApIHtcbiAgICAgICAgaWYgKGYpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuXCIpO1xuICAgICAgICB3aGlsZSAoXykgdHJ5IHtcbiAgICAgICAgICAgIGlmIChmID0gMSwgeSAmJiAodCA9IG9wWzBdICYgMiA/IHlbXCJyZXR1cm5cIl0gOiBvcFswXSA/IHlbXCJ0aHJvd1wiXSB8fCAoKHQgPSB5W1wicmV0dXJuXCJdKSAmJiB0LmNhbGwoeSksIDApIDogeS5uZXh0KSAmJiAhKHQgPSB0LmNhbGwoeSwgb3BbMV0pKS5kb25lKSByZXR1cm4gdDtcbiAgICAgICAgICAgIGlmICh5ID0gMCwgdCkgb3AgPSBbb3BbMF0gJiAyLCB0LnZhbHVlXTtcbiAgICAgICAgICAgIHN3aXRjaCAob3BbMF0pIHtcbiAgICAgICAgICAgICAgICBjYXNlIDA6IGNhc2UgMTogdCA9IG9wOyBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIDQ6IF8ubGFiZWwrKzsgcmV0dXJuIHsgdmFsdWU6IG9wWzFdLCBkb25lOiBmYWxzZSB9O1xuICAgICAgICAgICAgICAgIGNhc2UgNTogXy5sYWJlbCsrOyB5ID0gb3BbMV07IG9wID0gWzBdOyBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBjYXNlIDc6IG9wID0gXy5vcHMucG9wKCk7IF8udHJ5cy5wb3AoKTsgY29udGludWU7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEodCA9IF8udHJ5cywgdCA9IHQubGVuZ3RoID4gMCAmJiB0W3QubGVuZ3RoIC0gMV0pICYmIChvcFswXSA9PT0gNiB8fCBvcFswXSA9PT0gMikpIHsgXyA9IDA7IGNvbnRpbnVlOyB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gMyAmJiAoIXQgfHwgKG9wWzFdID4gdFswXSAmJiBvcFsxXSA8IHRbM10pKSkgeyBfLmxhYmVsID0gb3BbMV07IGJyZWFrOyB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gNiAmJiBfLmxhYmVsIDwgdFsxXSkgeyBfLmxhYmVsID0gdFsxXTsgdCA9IG9wOyBicmVhazsgfVxuICAgICAgICAgICAgICAgICAgICBpZiAodCAmJiBfLmxhYmVsIDwgdFsyXSkgeyBfLmxhYmVsID0gdFsyXTsgXy5vcHMucHVzaChvcCk7IGJyZWFrOyB9XG4gICAgICAgICAgICAgICAgICAgIGlmICh0WzJdKSBfLm9wcy5wb3AoKTtcbiAgICAgICAgICAgICAgICAgICAgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG9wID0gYm9keS5jYWxsKHRoaXNBcmcsIF8pO1xuICAgICAgICB9IGNhdGNoIChlKSB7IG9wID0gWzYsIGVdOyB5ID0gMDsgfSBmaW5hbGx5IHsgZiA9IHQgPSAwOyB9XG4gICAgICAgIGlmIChvcFswXSAmIDUpIHRocm93IG9wWzFdOyByZXR1cm4geyB2YWx1ZTogb3BbMF0gPyBvcFsxXSA6IHZvaWQgMCwgZG9uZTogdHJ1ZSB9O1xuICAgIH1cbn07XG5pbXBvcnQgeyBhdXRvSW5qZWN0YWJsZSwgc2luZ2xldG9uIH0gZnJvbSBcInRzeXJpbmdlXCI7XG5pbXBvcnQgeyBUb2tlbiB9IGZyb20gXCIuL3Rva2VuXCI7XG5pbXBvcnQgYXhpb3MgZnJvbSAnYXhpb3MnO1xuaW1wb3J0IHsgT3JkZXIgfSBmcm9tIFwiLi4vbW9kZWwvb3JkZXJcIjtcbnZhciBPcmRlclNlcnZpY2UgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gT3JkZXJTZXJ2aWNlKHRva2VuKSB7XG4gICAgICAgIHRoaXMudG9rZW4gPSB0b2tlbjtcbiAgICB9XG4gICAgT3JkZXJTZXJ2aWNlLnByb3RvdHlwZS5nZXRPcmRlciA9IGZ1bmN0aW9uICh1dWlkKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIF9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfYikge1xuICAgICAgICAgICAgICAgIHN3aXRjaCAoX2IubGFiZWwpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAwOiByZXR1cm4gWzQgLyp5aWVsZCovLCBheGlvcy5wb3N0KCcvYXBwcy9hcGkvb3JkZXIvZ2V0b25lYnl1dWlkJywgeyB1dWlkOiB1dWlkIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdBdXRob3JpemF0aW9uJzogJ0JlYXJlciAnICsgKChfYSA9IHRoaXMudG9rZW4pID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5jdXJyZW50VG9rZW4pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSkudGhlbihmdW5jdGlvbiAocmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgb3JkZXIgPSBuZXcgT3JkZXIoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmRlci5wYXJzZUZyb21Kc29uKHJlc3BvbnNlLmRhdGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvcmRlcjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXTtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAxOiByZXR1cm4gWzIgLypyZXR1cm4qLywgX2Iuc2VudCgpXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICA7XG4gICAgT3JkZXJTZXJ2aWNlLnByb3RvdHlwZS5zYXZlT3JkZXIgPSBmdW5jdGlvbiAob3JkZXIpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gX19nZW5lcmF0b3IodGhpcywgZnVuY3Rpb24gKF9iKSB7XG4gICAgICAgICAgICAgICAgc3dpdGNoIChfYi5sYWJlbCkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDA6IHJldHVybiBbNCAvKnlpZWxkKi8sIGF4aW9zLnBvc3QoJy9hcHBzL2FwaS9vcmRlci9jcmVhdGUnLCBvcmRlciwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0F1dGhvcml6YXRpb24nOiAnQmVhcmVyICcgKyAoKF9hID0gdGhpcy50b2tlbikgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmN1cnJlbnRUb2tlbilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9KS50aGVuKGZ1bmN0aW9uIChyZXNwb25zZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXNwb25zZS5kYXRhO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSldO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDE6IHJldHVybiBbMiAvKnJldHVybiovLCBfYi5zZW50KCldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIE9yZGVyU2VydmljZS5wcm90b3R5cGUuY2FsY09yZGVyID0gZnVuY3Rpb24gKG9yZGVyKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIF9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfYikge1xuICAgICAgICAgICAgICAgIHN3aXRjaCAoX2IubGFiZWwpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAwOiByZXR1cm4gWzQgLyp5aWVsZCovLCBheGlvcy5wb3N0KCcvYXBwcy9hcGkvb3JkZXIvY2FsYycsIG9yZGVyLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQXV0aG9yaXphdGlvbic6ICdCZWFyZXIgJyArICgoX2EgPSB0aGlzLnRva2VuKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuY3VycmVudFRva2VuKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0pLnRoZW4oZnVuY3Rpb24gKHJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlLmRhdGE7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KV07XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMTogcmV0dXJuIFsyIC8qcmV0dXJuKi8sIF9iLnNlbnQoKV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgT3JkZXJTZXJ2aWNlID0gX19kZWNvcmF0ZShbXG4gICAgICAgIHNpbmdsZXRvbigpLFxuICAgICAgICBhdXRvSW5qZWN0YWJsZSgpLFxuICAgICAgICBfX21ldGFkYXRhKFwiZGVzaWduOnBhcmFtdHlwZXNcIiwgW1Rva2VuXSlcbiAgICBdLCBPcmRlclNlcnZpY2UpO1xuICAgIHJldHVybiBPcmRlclNlcnZpY2U7XG59KCkpO1xuZXhwb3J0IHsgT3JkZXJTZXJ2aWNlIH07XG4iLCJ2YXIgX19kZWNvcmF0ZSA9ICh0aGlzICYmIHRoaXMuX19kZWNvcmF0ZSkgfHwgZnVuY3Rpb24gKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKSB7XG4gICAgdmFyIGMgPSBhcmd1bWVudHMubGVuZ3RoLCByID0gYyA8IDMgPyB0YXJnZXQgOiBkZXNjID09PSBudWxsID8gZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpIDogZGVzYywgZDtcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QuZGVjb3JhdGUgPT09IFwiZnVuY3Rpb25cIikgciA9IFJlZmxlY3QuZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpO1xuICAgIGVsc2UgZm9yICh2YXIgaSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIGlmIChkID0gZGVjb3JhdG9yc1tpXSkgciA9IChjIDwgMyA/IGQocikgOiBjID4gMyA/IGQodGFyZ2V0LCBrZXksIHIpIDogZCh0YXJnZXQsIGtleSkpIHx8IHI7XG4gICAgcmV0dXJuIGMgPiAzICYmIHIgJiYgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCByKSwgcjtcbn07XG52YXIgX19tZXRhZGF0YSA9ICh0aGlzICYmIHRoaXMuX19tZXRhZGF0YSkgfHwgZnVuY3Rpb24gKGssIHYpIHtcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QubWV0YWRhdGEgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIFJlZmxlY3QubWV0YWRhdGEoaywgdik7XG59O1xudmFyIF9fYXdhaXRlciA9ICh0aGlzICYmIHRoaXMuX19hd2FpdGVyKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgICB9KTtcbn07XG52YXIgX19nZW5lcmF0b3IgPSAodGhpcyAmJiB0aGlzLl9fZ2VuZXJhdG9yKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgYm9keSkge1xuICAgIHZhciBfID0geyBsYWJlbDogMCwgc2VudDogZnVuY3Rpb24oKSB7IGlmICh0WzBdICYgMSkgdGhyb3cgdFsxXTsgcmV0dXJuIHRbMV07IH0sIHRyeXM6IFtdLCBvcHM6IFtdIH0sIGYsIHksIHQsIGc7XG4gICAgcmV0dXJuIGcgPSB7IG5leHQ6IHZlcmIoMCksIFwidGhyb3dcIjogdmVyYigxKSwgXCJyZXR1cm5cIjogdmVyYigyKSB9LCB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgKGdbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhpczsgfSksIGc7XG4gICAgZnVuY3Rpb24gdmVyYihuKSB7IHJldHVybiBmdW5jdGlvbiAodikgeyByZXR1cm4gc3RlcChbbiwgdl0pOyB9OyB9XG4gICAgZnVuY3Rpb24gc3RlcChvcCkge1xuICAgICAgICBpZiAoZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy5cIik7XG4gICAgICAgIHdoaWxlIChfKSB0cnkge1xuICAgICAgICAgICAgaWYgKGYgPSAxLCB5ICYmICh0ID0gb3BbMF0gJiAyID8geVtcInJldHVyblwiXSA6IG9wWzBdID8geVtcInRocm93XCJdIHx8ICgodCA9IHlbXCJyZXR1cm5cIl0pICYmIHQuY2FsbCh5KSwgMCkgOiB5Lm5leHQpICYmICEodCA9IHQuY2FsbCh5LCBvcFsxXSkpLmRvbmUpIHJldHVybiB0O1xuICAgICAgICAgICAgaWYgKHkgPSAwLCB0KSBvcCA9IFtvcFswXSAmIDIsIHQudmFsdWVdO1xuICAgICAgICAgICAgc3dpdGNoIChvcFswXSkge1xuICAgICAgICAgICAgICAgIGNhc2UgMDogY2FzZSAxOiB0ID0gb3A7IGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgNDogXy5sYWJlbCsrOyByZXR1cm4geyB2YWx1ZTogb3BbMV0sIGRvbmU6IGZhbHNlIH07XG4gICAgICAgICAgICAgICAgY2FzZSA1OiBfLmxhYmVsKys7IHkgPSBvcFsxXTsgb3AgPSBbMF07IGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGNhc2UgNzogb3AgPSBfLm9wcy5wb3AoKTsgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICBpZiAoISh0ID0gXy50cnlzLCB0ID0gdC5sZW5ndGggPiAwICYmIHRbdC5sZW5ndGggLSAxXSkgJiYgKG9wWzBdID09PSA2IHx8IG9wWzBdID09PSAyKSkgeyBfID0gMDsgY29udGludWU7IH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSAzICYmICghdCB8fCAob3BbMV0gPiB0WzBdICYmIG9wWzFdIDwgdFszXSkpKSB7IF8ubGFiZWwgPSBvcFsxXTsgYnJlYWs7IH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSA2ICYmIF8ubGFiZWwgPCB0WzFdKSB7IF8ubGFiZWwgPSB0WzFdOyB0ID0gb3A7IGJyZWFrOyB9XG4gICAgICAgICAgICAgICAgICAgIGlmICh0ICYmIF8ubGFiZWwgPCB0WzJdKSB7IF8ubGFiZWwgPSB0WzJdOyBfLm9wcy5wdXNoKG9wKTsgYnJlYWs7IH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHRbMl0pIF8ub3BzLnBvcCgpO1xuICAgICAgICAgICAgICAgICAgICBfLnRyeXMucG9wKCk7IGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgb3AgPSBib2R5LmNhbGwodGhpc0FyZywgXyk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHsgb3AgPSBbNiwgZV07IHkgPSAwOyB9IGZpbmFsbHkgeyBmID0gdCA9IDA7IH1cbiAgICAgICAgaWYgKG9wWzBdICYgNSkgdGhyb3cgb3BbMV07IHJldHVybiB7IHZhbHVlOiBvcFswXSA/IG9wWzFdIDogdm9pZCAwLCBkb25lOiB0cnVlIH07XG4gICAgfVxufTtcbmltcG9ydCB7IGF1dG9JbmplY3RhYmxlLCBzaW5nbGV0b24gfSBmcm9tIFwidHN5cmluZ2VcIjtcbmltcG9ydCB7IFRva2VuIH0gZnJvbSBcIi4vdG9rZW5cIjtcbmltcG9ydCBheGlvcyBmcm9tICdheGlvcyc7XG5pbXBvcnQgeyBQYXltZW50IH0gZnJvbSBcIi4uL21vZGVsL3BheW1lbnRcIjtcbnZhciBQYXltZW50U2VydmljZSA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBQYXltZW50U2VydmljZSh0b2tlbikge1xuICAgICAgICB0aGlzLnRva2VuID0gdG9rZW47XG4gICAgfVxuICAgIFBheW1lbnRTZXJ2aWNlLnByb3RvdHlwZS5nZXRQYXltZW50cyA9IGZ1bmN0aW9uIChzaG9wKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIF9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfYikge1xuICAgICAgICAgICAgICAgIHN3aXRjaCAoX2IubGFiZWwpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAwOiByZXR1cm4gWzQgLyp5aWVsZCovLCBheGlvcy5nZXQoJy9hcHBzL2FwaS9wYXltZW50L2J5L3Nob3AvJyArIHNob3AudXVpZCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0F1dGhvcml6YXRpb24nOiAnQmVhcmVyICcgKyAoKF9hID0gdGhpcy50b2tlbikgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmN1cnJlbnRUb2tlbilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9KS50aGVuKGZ1bmN0aW9uIChyZXNwb25zZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXNwb25zZS5kYXRhLmRhdGEubWFwKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwYXltZW50ID0gbmV3IFBheW1lbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF5bWVudC51aWQgPSBpdGVtLnVpZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF5bWVudC50aXRsZSA9IGl0ZW0udGl0bGU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBheW1lbnQudXVpZCA9IGl0ZW0udXVpZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBheW1lbnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KV07XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMTogcmV0dXJuIFsyIC8qcmV0dXJuKi8sIF9iLnNlbnQoKV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgUGF5bWVudFNlcnZpY2UgPSBfX2RlY29yYXRlKFtcbiAgICAgICAgc2luZ2xldG9uKCksXG4gICAgICAgIGF1dG9JbmplY3RhYmxlKCksXG4gICAgICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246cGFyYW10eXBlc1wiLCBbVG9rZW5dKVxuICAgIF0sIFBheW1lbnRTZXJ2aWNlKTtcbiAgICByZXR1cm4gUGF5bWVudFNlcnZpY2U7XG59KCkpO1xuZXhwb3J0IHsgUGF5bWVudFNlcnZpY2UgfTtcbiIsInZhciBfX2RlY29yYXRlID0gKHRoaXMgJiYgdGhpcy5fX2RlY29yYXRlKSB8fCBmdW5jdGlvbiAoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpIHtcbiAgICB2YXIgYyA9IGFyZ3VtZW50cy5sZW5ndGgsIHIgPSBjIDwgMyA/IHRhcmdldCA6IGRlc2MgPT09IG51bGwgPyBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGtleSkgOiBkZXNjLCBkO1xuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5kZWNvcmF0ZSA9PT0gXCJmdW5jdGlvblwiKSByID0gUmVmbGVjdC5kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYyk7XG4gICAgZWxzZSBmb3IgKHZhciBpID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgaWYgKGQgPSBkZWNvcmF0b3JzW2ldKSByID0gKGMgPCAzID8gZChyKSA6IGMgPiAzID8gZCh0YXJnZXQsIGtleSwgcikgOiBkKHRhcmdldCwga2V5KSkgfHwgcjtcbiAgICByZXR1cm4gYyA+IDMgJiYgciAmJiBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHIpLCByO1xufTtcbnZhciBfX21ldGFkYXRhID0gKHRoaXMgJiYgdGhpcy5fX21ldGFkYXRhKSB8fCBmdW5jdGlvbiAoaywgdikge1xuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5tZXRhZGF0YSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gUmVmbGVjdC5tZXRhZGF0YShrLCB2KTtcbn07XG52YXIgX19hd2FpdGVyID0gKHRoaXMgJiYgdGhpcy5fX2F3YWl0ZXIpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcbiAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xuICAgIH0pO1xufTtcbnZhciBfX2dlbmVyYXRvciA9ICh0aGlzICYmIHRoaXMuX19nZW5lcmF0b3IpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBib2R5KSB7XG4gICAgdmFyIF8gPSB7IGxhYmVsOiAwLCBzZW50OiBmdW5jdGlvbigpIHsgaWYgKHRbMF0gJiAxKSB0aHJvdyB0WzFdOyByZXR1cm4gdFsxXTsgfSwgdHJ5czogW10sIG9wczogW10gfSwgZiwgeSwgdCwgZztcbiAgICByZXR1cm4gZyA9IHsgbmV4dDogdmVyYigwKSwgXCJ0aHJvd1wiOiB2ZXJiKDEpLCBcInJldHVyblwiOiB2ZXJiKDIpIH0sIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiAoZ1tTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzOyB9KSwgZztcbiAgICBmdW5jdGlvbiB2ZXJiKG4pIHsgcmV0dXJuIGZ1bmN0aW9uICh2KSB7IHJldHVybiBzdGVwKFtuLCB2XSk7IH07IH1cbiAgICBmdW5jdGlvbiBzdGVwKG9wKSB7XG4gICAgICAgIGlmIChmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLlwiKTtcbiAgICAgICAgd2hpbGUgKF8pIHRyeSB7XG4gICAgICAgICAgICBpZiAoZiA9IDEsIHkgJiYgKHQgPSBvcFswXSAmIDIgPyB5W1wicmV0dXJuXCJdIDogb3BbMF0gPyB5W1widGhyb3dcIl0gfHwgKCh0ID0geVtcInJldHVyblwiXSkgJiYgdC5jYWxsKHkpLCAwKSA6IHkubmV4dCkgJiYgISh0ID0gdC5jYWxsKHksIG9wWzFdKSkuZG9uZSkgcmV0dXJuIHQ7XG4gICAgICAgICAgICBpZiAoeSA9IDAsIHQpIG9wID0gW29wWzBdICYgMiwgdC52YWx1ZV07XG4gICAgICAgICAgICBzd2l0Y2ggKG9wWzBdKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAwOiBjYXNlIDE6IHQgPSBvcDsgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSA0OiBfLmxhYmVsKys7IHJldHVybiB7IHZhbHVlOiBvcFsxXSwgZG9uZTogZmFsc2UgfTtcbiAgICAgICAgICAgICAgICBjYXNlIDU6IF8ubGFiZWwrKzsgeSA9IG9wWzFdOyBvcCA9IFswXTsgY29udGludWU7XG4gICAgICAgICAgICAgICAgY2FzZSA3OiBvcCA9IF8ub3BzLnBvcCgpOyBfLnRyeXMucG9wKCk7IGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIGlmICghKHQgPSBfLnRyeXMsIHQgPSB0Lmxlbmd0aCA+IDAgJiYgdFt0Lmxlbmd0aCAtIDFdKSAmJiAob3BbMF0gPT09IDYgfHwgb3BbMF0gPT09IDIpKSB7IF8gPSAwOyBjb250aW51ZTsgfVxuICAgICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDMgJiYgKCF0IHx8IChvcFsxXSA+IHRbMF0gJiYgb3BbMV0gPCB0WzNdKSkpIHsgXy5sYWJlbCA9IG9wWzFdOyBicmVhazsgfVxuICAgICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDYgJiYgXy5sYWJlbCA8IHRbMV0pIHsgXy5sYWJlbCA9IHRbMV07IHQgPSBvcDsgYnJlYWs7IH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHQgJiYgXy5sYWJlbCA8IHRbMl0pIHsgXy5sYWJlbCA9IHRbMl07IF8ub3BzLnB1c2gob3ApOyBicmVhazsgfVxuICAgICAgICAgICAgICAgICAgICBpZiAodFsyXSkgXy5vcHMucG9wKCk7XG4gICAgICAgICAgICAgICAgICAgIF8udHJ5cy5wb3AoKTsgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvcCA9IGJvZHkuY2FsbCh0aGlzQXJnLCBfKTtcbiAgICAgICAgfSBjYXRjaCAoZSkgeyBvcCA9IFs2LCBlXTsgeSA9IDA7IH0gZmluYWxseSB7IGYgPSB0ID0gMDsgfVxuICAgICAgICBpZiAob3BbMF0gJiA1KSB0aHJvdyBvcFsxXTsgcmV0dXJuIHsgdmFsdWU6IG9wWzBdID8gb3BbMV0gOiB2b2lkIDAsIGRvbmU6IHRydWUgfTtcbiAgICB9XG59O1xuaW1wb3J0IHsgYXV0b0luamVjdGFibGUsIHNpbmdsZXRvbiB9IGZyb20gXCJ0c3lyaW5nZVwiO1xuaW1wb3J0IHsgVG9rZW4gfSBmcm9tIFwiLi90b2tlblwiO1xuaW1wb3J0IGF4aW9zIGZyb20gJ2F4aW9zJztcbmltcG9ydCB7IFByb2R1Y3QgfSBmcm9tIFwiLi4vbW9kZWwvcHJvZHVjdFwiO1xudmFyIFByb2R1Y3RTZXJ2aWNlID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIFByb2R1Y3RTZXJ2aWNlKHRva2VuKSB7XG4gICAgICAgIHRoaXMudG9rZW4gPSB0b2tlbjtcbiAgICB9XG4gICAgUHJvZHVjdFNlcnZpY2UucHJvdG90eXBlLmdldFByb2R1Y3RzQnlUZXJtID0gZnVuY3Rpb24gKHRlcm0sIHNob3ApIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gX19nZW5lcmF0b3IodGhpcywgZnVuY3Rpb24gKF9iKSB7XG4gICAgICAgICAgICAgICAgc3dpdGNoIChfYi5sYWJlbCkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDA6IHJldHVybiBbNCAvKnlpZWxkKi8sIGF4aW9zLmdldCgnL2FwcHMvYXBpL3Byb2R1Y3QvZ2V0YWxsYnl0ZXJtLycgKyBzaG9wLnV1aWQgKyAnLycgKyB0ZXJtLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQXV0aG9yaXphdGlvbic6ICdCZWFyZXIgJyArICgoX2EgPSB0aGlzLnRva2VuKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuY3VycmVudFRva2VuKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0pLnRoZW4oZnVuY3Rpb24gKHJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlLmRhdGEuZGF0YS5tYXAoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHAgPSBuZXcgUHJvZHVjdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwLmlkID0gaXRlbS5pZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcC50aXRsZSA9IGl0ZW0udGl0bGU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHAudXVpZCA9IGl0ZW0udXVpZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcC5zcGVjaWFsUHJvZHVjdFR5cGVPYmplY3QudHlwID0gaXRlbS50eXA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSldO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDE6IHJldHVybiBbMiAvKnJldHVybiovLCBfYi5zZW50KCldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIFByb2R1Y3RTZXJ2aWNlLnByb3RvdHlwZS5nZXRQcm9kdWN0cyA9IGZ1bmN0aW9uIChwcm9kdWN0R3JvdXApIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gX19nZW5lcmF0b3IodGhpcywgZnVuY3Rpb24gKF9iKSB7XG4gICAgICAgICAgICAgICAgc3dpdGNoIChfYi5sYWJlbCkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDA6IHJldHVybiBbNCAvKnlpZWxkKi8sIGF4aW9zLmdldCgnL2FwcHMvYXBpL3Byb2R1Y3QvZ2V0YWxsYnlwcm9kdWN0Z3JvdXAvJyArIHByb2R1Y3RHcm91cC51dWlkLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQXV0aG9yaXphdGlvbic6ICdCZWFyZXIgJyArICgoX2EgPSB0aGlzLnRva2VuKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuY3VycmVudFRva2VuKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0pLnRoZW4oZnVuY3Rpb24gKHJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlLmRhdGEuZGF0YS5tYXAoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHAgPSBuZXcgUHJvZHVjdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwLmlkID0gaXRlbS5pZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcC50aXRsZSA9IGl0ZW0udGl0bGU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHAudXVpZCA9IGl0ZW0udXVpZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcC5zcGVjaWFsUHJvZHVjdFR5cGVPYmplY3QudHlwID0gaXRlbS50eXA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSldO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDE6IHJldHVybiBbMiAvKnJldHVybiovLCBfYi5zZW50KCldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIFByb2R1Y3RTZXJ2aWNlLnByb3RvdHlwZS5nZXRBZGRQcm9kdWN0U2NoZW1hID0gZnVuY3Rpb24gKHByb2R1Y3QsIGZvcm1EYXRhKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIF9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfYikge1xuICAgICAgICAgICAgICAgIHN3aXRjaCAoX2IubGFiZWwpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAwOiByZXR1cm4gWzQgLyp5aWVsZCovLCBheGlvcy5wb3N0KCcvYXBwcy9hcGkvcHJvZHVjdC9nZXQvZm9ybS9qc29uLycgKyBwcm9kdWN0LnV1aWQsIGZvcm1EYXRhLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQXV0aG9yaXphdGlvbic6ICdCZWFyZXIgJyArICgoX2EgPSB0aGlzLnRva2VuKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuY3VycmVudFRva2VuKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0pLnRoZW4oZnVuY3Rpb24gKHJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlLmRhdGE7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KV07XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMTogcmV0dXJuIFsyIC8qcmV0dXJuKi8sIF9iLnNlbnQoKV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgUHJvZHVjdFNlcnZpY2UucHJvdG90eXBlLmNhbGNQcm9kdWN0ID0gZnVuY3Rpb24gKHByb2R1Y3QsIGZvcm1EYXRhKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIF9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfYikge1xuICAgICAgICAgICAgICAgIHN3aXRjaCAoX2IubGFiZWwpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAwOiByZXR1cm4gWzQgLyp5aWVsZCovLCBheGlvcy5wb3N0KCcvYXBwcy9hcGkvcHJvZHVjdC9nZXQvZm9ybS9qc29uLycgKyBwcm9kdWN0LnV1aWQsIGZvcm1EYXRhLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQXV0aG9yaXphdGlvbic6ICdCZWFyZXIgJyArICgoX2EgPSB0aGlzLnRva2VuKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuY3VycmVudFRva2VuKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0pLnRoZW4oZnVuY3Rpb24gKHJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlLmRhdGE7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KV07XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMTogcmV0dXJuIFsyIC8qcmV0dXJuKi8sIF9iLnNlbnQoKV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgUHJvZHVjdFNlcnZpY2UgPSBfX2RlY29yYXRlKFtcbiAgICAgICAgc2luZ2xldG9uKCksXG4gICAgICAgIGF1dG9JbmplY3RhYmxlKCksXG4gICAgICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246cGFyYW10eXBlc1wiLCBbVG9rZW5dKVxuICAgIF0sIFByb2R1Y3RTZXJ2aWNlKTtcbiAgICByZXR1cm4gUHJvZHVjdFNlcnZpY2U7XG59KCkpO1xuZXhwb3J0IHsgUHJvZHVjdFNlcnZpY2UgfTtcbiIsInZhciBfX2RlY29yYXRlID0gKHRoaXMgJiYgdGhpcy5fX2RlY29yYXRlKSB8fCBmdW5jdGlvbiAoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpIHtcbiAgICB2YXIgYyA9IGFyZ3VtZW50cy5sZW5ndGgsIHIgPSBjIDwgMyA/IHRhcmdldCA6IGRlc2MgPT09IG51bGwgPyBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGtleSkgOiBkZXNjLCBkO1xuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5kZWNvcmF0ZSA9PT0gXCJmdW5jdGlvblwiKSByID0gUmVmbGVjdC5kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYyk7XG4gICAgZWxzZSBmb3IgKHZhciBpID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgaWYgKGQgPSBkZWNvcmF0b3JzW2ldKSByID0gKGMgPCAzID8gZChyKSA6IGMgPiAzID8gZCh0YXJnZXQsIGtleSwgcikgOiBkKHRhcmdldCwga2V5KSkgfHwgcjtcbiAgICByZXR1cm4gYyA+IDMgJiYgciAmJiBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHIpLCByO1xufTtcbnZhciBfX21ldGFkYXRhID0gKHRoaXMgJiYgdGhpcy5fX21ldGFkYXRhKSB8fCBmdW5jdGlvbiAoaywgdikge1xuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5tZXRhZGF0YSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gUmVmbGVjdC5tZXRhZGF0YShrLCB2KTtcbn07XG52YXIgX19hd2FpdGVyID0gKHRoaXMgJiYgdGhpcy5fX2F3YWl0ZXIpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcbiAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xuICAgIH0pO1xufTtcbnZhciBfX2dlbmVyYXRvciA9ICh0aGlzICYmIHRoaXMuX19nZW5lcmF0b3IpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBib2R5KSB7XG4gICAgdmFyIF8gPSB7IGxhYmVsOiAwLCBzZW50OiBmdW5jdGlvbigpIHsgaWYgKHRbMF0gJiAxKSB0aHJvdyB0WzFdOyByZXR1cm4gdFsxXTsgfSwgdHJ5czogW10sIG9wczogW10gfSwgZiwgeSwgdCwgZztcbiAgICByZXR1cm4gZyA9IHsgbmV4dDogdmVyYigwKSwgXCJ0aHJvd1wiOiB2ZXJiKDEpLCBcInJldHVyblwiOiB2ZXJiKDIpIH0sIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiAoZ1tTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzOyB9KSwgZztcbiAgICBmdW5jdGlvbiB2ZXJiKG4pIHsgcmV0dXJuIGZ1bmN0aW9uICh2KSB7IHJldHVybiBzdGVwKFtuLCB2XSk7IH07IH1cbiAgICBmdW5jdGlvbiBzdGVwKG9wKSB7XG4gICAgICAgIGlmIChmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLlwiKTtcbiAgICAgICAgd2hpbGUgKF8pIHRyeSB7XG4gICAgICAgICAgICBpZiAoZiA9IDEsIHkgJiYgKHQgPSBvcFswXSAmIDIgPyB5W1wicmV0dXJuXCJdIDogb3BbMF0gPyB5W1widGhyb3dcIl0gfHwgKCh0ID0geVtcInJldHVyblwiXSkgJiYgdC5jYWxsKHkpLCAwKSA6IHkubmV4dCkgJiYgISh0ID0gdC5jYWxsKHksIG9wWzFdKSkuZG9uZSkgcmV0dXJuIHQ7XG4gICAgICAgICAgICBpZiAoeSA9IDAsIHQpIG9wID0gW29wWzBdICYgMiwgdC52YWx1ZV07XG4gICAgICAgICAgICBzd2l0Y2ggKG9wWzBdKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAwOiBjYXNlIDE6IHQgPSBvcDsgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSA0OiBfLmxhYmVsKys7IHJldHVybiB7IHZhbHVlOiBvcFsxXSwgZG9uZTogZmFsc2UgfTtcbiAgICAgICAgICAgICAgICBjYXNlIDU6IF8ubGFiZWwrKzsgeSA9IG9wWzFdOyBvcCA9IFswXTsgY29udGludWU7XG4gICAgICAgICAgICAgICAgY2FzZSA3OiBvcCA9IF8ub3BzLnBvcCgpOyBfLnRyeXMucG9wKCk7IGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIGlmICghKHQgPSBfLnRyeXMsIHQgPSB0Lmxlbmd0aCA+IDAgJiYgdFt0Lmxlbmd0aCAtIDFdKSAmJiAob3BbMF0gPT09IDYgfHwgb3BbMF0gPT09IDIpKSB7IF8gPSAwOyBjb250aW51ZTsgfVxuICAgICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDMgJiYgKCF0IHx8IChvcFsxXSA+IHRbMF0gJiYgb3BbMV0gPCB0WzNdKSkpIHsgXy5sYWJlbCA9IG9wWzFdOyBicmVhazsgfVxuICAgICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDYgJiYgXy5sYWJlbCA8IHRbMV0pIHsgXy5sYWJlbCA9IHRbMV07IHQgPSBvcDsgYnJlYWs7IH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHQgJiYgXy5sYWJlbCA8IHRbMl0pIHsgXy5sYWJlbCA9IHRbMl07IF8ub3BzLnB1c2gob3ApOyBicmVhazsgfVxuICAgICAgICAgICAgICAgICAgICBpZiAodFsyXSkgXy5vcHMucG9wKCk7XG4gICAgICAgICAgICAgICAgICAgIF8udHJ5cy5wb3AoKTsgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvcCA9IGJvZHkuY2FsbCh0aGlzQXJnLCBfKTtcbiAgICAgICAgfSBjYXRjaCAoZSkgeyBvcCA9IFs2LCBlXTsgeSA9IDA7IH0gZmluYWxseSB7IGYgPSB0ID0gMDsgfVxuICAgICAgICBpZiAob3BbMF0gJiA1KSB0aHJvdyBvcFsxXTsgcmV0dXJuIHsgdmFsdWU6IG9wWzBdID8gb3BbMV0gOiB2b2lkIDAsIGRvbmU6IHRydWUgfTtcbiAgICB9XG59O1xuaW1wb3J0IHsgYXV0b0luamVjdGFibGUsIHNpbmdsZXRvbiB9IGZyb20gXCJ0c3lyaW5nZVwiO1xuaW1wb3J0IHsgVG9rZW4gfSBmcm9tIFwiLi90b2tlblwiO1xuaW1wb3J0IGF4aW9zIGZyb20gJ2F4aW9zJztcbmltcG9ydCB7IFByb2R1Y3RHcm91cCB9IGZyb20gXCIuLi9tb2RlbC9wcm9kdWN0R3JvdXBcIjtcbnZhciBQcm9kdWN0R3JvdXBTZXJ2aWNlID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIFByb2R1Y3RHcm91cFNlcnZpY2UodG9rZW4pIHtcbiAgICAgICAgdGhpcy50b2tlbiA9IHRva2VuO1xuICAgIH1cbiAgICBQcm9kdWN0R3JvdXBTZXJ2aWNlLnByb3RvdHlwZS5nZXRQcm9kdWN0R3JvdXBzID0gZnVuY3Rpb24gKHNlYXJjaFF1ZXJ5LCBzaG9wKSB7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBfX2dlbmVyYXRvcih0aGlzLCBmdW5jdGlvbiAoX2EpIHtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKF9hLmxhYmVsKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMDogcmV0dXJuIFs0IC8qeWllbGQqLywgYXhpb3MuZ2V0KCcvYXBwcy9hcGkvcHJvZHVjdGdyb3VwL2dldHRyZWUvJyArIHNob3AudXVpZCArICc/dGVybT0nICsgc2VhcmNoUXVlcnksIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdBdXRob3JpemF0aW9uJzogJ0JlYXJlciAnICsgdGhpcy50b2tlbi5jdXJyZW50VG9rZW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9KS50aGVuKGZ1bmN0aW9uIChyZXNwb25zZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0ZW1wID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UuZGF0YS5kYXRhLm1hcChmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcGcgPSBuZXcgUHJvZHVjdEdyb3VwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZy5pZCA9IGl0ZW0uaWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBnLmxhYmVsID0gaXRlbS50aXRsZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGcudXVpZCA9IGl0ZW0udXVpZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVtcC5wdXNoKHBnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5jaGlsZHJlbi5tYXAoZnVuY3Rpb24gKHN1Yikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNwZyA9IG5ldyBQcm9kdWN0R3JvdXA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGcuaWQgPSBzdWIuaWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGcubGFiZWwgPSBcIi0tIFwiICsgc3ViLnRpdGxlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BnLnV1aWQgPSBzdWIudXVpZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXAucHVzaChzcGcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0ZW1wO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSldO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDE6IHJldHVybiBbMiAvKnJldHVybiovLCBfYS5zZW50KCldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIFByb2R1Y3RHcm91cFNlcnZpY2UgPSBfX2RlY29yYXRlKFtcbiAgICAgICAgc2luZ2xldG9uKCksXG4gICAgICAgIGF1dG9JbmplY3RhYmxlKCksXG4gICAgICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246cGFyYW10eXBlc1wiLCBbVG9rZW5dKVxuICAgIF0sIFByb2R1Y3RHcm91cFNlcnZpY2UpO1xuICAgIHJldHVybiBQcm9kdWN0R3JvdXBTZXJ2aWNlO1xufSgpKTtcbmV4cG9ydCB7IFByb2R1Y3RHcm91cFNlcnZpY2UgfTtcbiIsInZhciBfX2RlY29yYXRlID0gKHRoaXMgJiYgdGhpcy5fX2RlY29yYXRlKSB8fCBmdW5jdGlvbiAoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpIHtcbiAgICB2YXIgYyA9IGFyZ3VtZW50cy5sZW5ndGgsIHIgPSBjIDwgMyA/IHRhcmdldCA6IGRlc2MgPT09IG51bGwgPyBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGtleSkgOiBkZXNjLCBkO1xuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5kZWNvcmF0ZSA9PT0gXCJmdW5jdGlvblwiKSByID0gUmVmbGVjdC5kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYyk7XG4gICAgZWxzZSBmb3IgKHZhciBpID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgaWYgKGQgPSBkZWNvcmF0b3JzW2ldKSByID0gKGMgPCAzID8gZChyKSA6IGMgPiAzID8gZCh0YXJnZXQsIGtleSwgcikgOiBkKHRhcmdldCwga2V5KSkgfHwgcjtcbiAgICByZXR1cm4gYyA+IDMgJiYgciAmJiBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHIpLCByO1xufTtcbnZhciBfX21ldGFkYXRhID0gKHRoaXMgJiYgdGhpcy5fX21ldGFkYXRhKSB8fCBmdW5jdGlvbiAoaywgdikge1xuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5tZXRhZGF0YSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gUmVmbGVjdC5tZXRhZGF0YShrLCB2KTtcbn07XG52YXIgX19hd2FpdGVyID0gKHRoaXMgJiYgdGhpcy5fX2F3YWl0ZXIpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcbiAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xuICAgIH0pO1xufTtcbnZhciBfX2dlbmVyYXRvciA9ICh0aGlzICYmIHRoaXMuX19nZW5lcmF0b3IpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBib2R5KSB7XG4gICAgdmFyIF8gPSB7IGxhYmVsOiAwLCBzZW50OiBmdW5jdGlvbigpIHsgaWYgKHRbMF0gJiAxKSB0aHJvdyB0WzFdOyByZXR1cm4gdFsxXTsgfSwgdHJ5czogW10sIG9wczogW10gfSwgZiwgeSwgdCwgZztcbiAgICByZXR1cm4gZyA9IHsgbmV4dDogdmVyYigwKSwgXCJ0aHJvd1wiOiB2ZXJiKDEpLCBcInJldHVyblwiOiB2ZXJiKDIpIH0sIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiAoZ1tTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzOyB9KSwgZztcbiAgICBmdW5jdGlvbiB2ZXJiKG4pIHsgcmV0dXJuIGZ1bmN0aW9uICh2KSB7IHJldHVybiBzdGVwKFtuLCB2XSk7IH07IH1cbiAgICBmdW5jdGlvbiBzdGVwKG9wKSB7XG4gICAgICAgIGlmIChmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLlwiKTtcbiAgICAgICAgd2hpbGUgKF8pIHRyeSB7XG4gICAgICAgICAgICBpZiAoZiA9IDEsIHkgJiYgKHQgPSBvcFswXSAmIDIgPyB5W1wicmV0dXJuXCJdIDogb3BbMF0gPyB5W1widGhyb3dcIl0gfHwgKCh0ID0geVtcInJldHVyblwiXSkgJiYgdC5jYWxsKHkpLCAwKSA6IHkubmV4dCkgJiYgISh0ID0gdC5jYWxsKHksIG9wWzFdKSkuZG9uZSkgcmV0dXJuIHQ7XG4gICAgICAgICAgICBpZiAoeSA9IDAsIHQpIG9wID0gW29wWzBdICYgMiwgdC52YWx1ZV07XG4gICAgICAgICAgICBzd2l0Y2ggKG9wWzBdKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAwOiBjYXNlIDE6IHQgPSBvcDsgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSA0OiBfLmxhYmVsKys7IHJldHVybiB7IHZhbHVlOiBvcFsxXSwgZG9uZTogZmFsc2UgfTtcbiAgICAgICAgICAgICAgICBjYXNlIDU6IF8ubGFiZWwrKzsgeSA9IG9wWzFdOyBvcCA9IFswXTsgY29udGludWU7XG4gICAgICAgICAgICAgICAgY2FzZSA3OiBvcCA9IF8ub3BzLnBvcCgpOyBfLnRyeXMucG9wKCk7IGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIGlmICghKHQgPSBfLnRyeXMsIHQgPSB0Lmxlbmd0aCA+IDAgJiYgdFt0Lmxlbmd0aCAtIDFdKSAmJiAob3BbMF0gPT09IDYgfHwgb3BbMF0gPT09IDIpKSB7IF8gPSAwOyBjb250aW51ZTsgfVxuICAgICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDMgJiYgKCF0IHx8IChvcFsxXSA+IHRbMF0gJiYgb3BbMV0gPCB0WzNdKSkpIHsgXy5sYWJlbCA9IG9wWzFdOyBicmVhazsgfVxuICAgICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDYgJiYgXy5sYWJlbCA8IHRbMV0pIHsgXy5sYWJlbCA9IHRbMV07IHQgPSBvcDsgYnJlYWs7IH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHQgJiYgXy5sYWJlbCA8IHRbMl0pIHsgXy5sYWJlbCA9IHRbMl07IF8ub3BzLnB1c2gob3ApOyBicmVhazsgfVxuICAgICAgICAgICAgICAgICAgICBpZiAodFsyXSkgXy5vcHMucG9wKCk7XG4gICAgICAgICAgICAgICAgICAgIF8udHJ5cy5wb3AoKTsgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvcCA9IGJvZHkuY2FsbCh0aGlzQXJnLCBfKTtcbiAgICAgICAgfSBjYXRjaCAoZSkgeyBvcCA9IFs2LCBlXTsgeSA9IDA7IH0gZmluYWxseSB7IGYgPSB0ID0gMDsgfVxuICAgICAgICBpZiAob3BbMF0gJiA1KSB0aHJvdyBvcFsxXTsgcmV0dXJuIHsgdmFsdWU6IG9wWzBdID8gb3BbMV0gOiB2b2lkIDAsIGRvbmU6IHRydWUgfTtcbiAgICB9XG59O1xuaW1wb3J0IHsgYXV0b0luamVjdGFibGUsIHNpbmdsZXRvbiB9IGZyb20gXCJ0c3lyaW5nZVwiO1xuaW1wb3J0IHsgVG9rZW4gfSBmcm9tIFwiLi90b2tlblwiO1xuaW1wb3J0IGF4aW9zIGZyb20gJ2F4aW9zJztcbmltcG9ydCB7IFNoaXBwaW5nIH0gZnJvbSBcIi4uL21vZGVsL3NoaXBwaW5nXCI7XG52YXIgU2hpcHBpbmdTZXJ2aWNlID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIFNoaXBwaW5nU2VydmljZSh0b2tlbikge1xuICAgICAgICB0aGlzLnRva2VuID0gdG9rZW47XG4gICAgfVxuICAgIFNoaXBwaW5nU2VydmljZS5wcm90b3R5cGUuZ2V0U2hpcHBpbmcgPSBmdW5jdGlvbiAoc2hvcCkge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBfX2dlbmVyYXRvcih0aGlzLCBmdW5jdGlvbiAoX2IpIHtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKF9iLmxhYmVsKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMDogcmV0dXJuIFs0IC8qeWllbGQqLywgYXhpb3MuZ2V0KCcvYXBwcy9hcGkvc2hpcHBpbmcvYnkvc2hvcC8nICsgc2hvcC51dWlkLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQXV0aG9yaXphdGlvbic6ICdCZWFyZXIgJyArICgoX2EgPSB0aGlzLnRva2VuKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuY3VycmVudFRva2VuKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0pLnRoZW4oZnVuY3Rpb24gKHJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlLmRhdGEuZGF0YS5tYXAoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNoaXBtZW50ID0gbmV3IFNoaXBwaW5nKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoaXBtZW50LnVpZCA9IGl0ZW0udWlkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaGlwbWVudC50aXRsZSA9IGl0ZW0udGl0bGU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoaXBtZW50LnV1aWQgPSBpdGVtLnV1aWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzaGlwbWVudDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXTtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAxOiByZXR1cm4gWzIgLypyZXR1cm4qLywgX2Iuc2VudCgpXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBTaGlwcGluZ1NlcnZpY2UgPSBfX2RlY29yYXRlKFtcbiAgICAgICAgc2luZ2xldG9uKCksXG4gICAgICAgIGF1dG9JbmplY3RhYmxlKCksXG4gICAgICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246cGFyYW10eXBlc1wiLCBbVG9rZW5dKVxuICAgIF0sIFNoaXBwaW5nU2VydmljZSk7XG4gICAgcmV0dXJuIFNoaXBwaW5nU2VydmljZTtcbn0oKSk7XG5leHBvcnQgeyBTaGlwcGluZ1NlcnZpY2UgfTtcbiIsInZhciBfX2RlY29yYXRlID0gKHRoaXMgJiYgdGhpcy5fX2RlY29yYXRlKSB8fCBmdW5jdGlvbiAoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpIHtcbiAgICB2YXIgYyA9IGFyZ3VtZW50cy5sZW5ndGgsIHIgPSBjIDwgMyA/IHRhcmdldCA6IGRlc2MgPT09IG51bGwgPyBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGtleSkgOiBkZXNjLCBkO1xuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5kZWNvcmF0ZSA9PT0gXCJmdW5jdGlvblwiKSByID0gUmVmbGVjdC5kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYyk7XG4gICAgZWxzZSBmb3IgKHZhciBpID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgaWYgKGQgPSBkZWNvcmF0b3JzW2ldKSByID0gKGMgPCAzID8gZChyKSA6IGMgPiAzID8gZCh0YXJnZXQsIGtleSwgcikgOiBkKHRhcmdldCwga2V5KSkgfHwgcjtcbiAgICByZXR1cm4gYyA+IDMgJiYgciAmJiBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHIpLCByO1xufTtcbnZhciBfX21ldGFkYXRhID0gKHRoaXMgJiYgdGhpcy5fX21ldGFkYXRhKSB8fCBmdW5jdGlvbiAoaywgdikge1xuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5tZXRhZGF0YSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gUmVmbGVjdC5tZXRhZGF0YShrLCB2KTtcbn07XG52YXIgX19hd2FpdGVyID0gKHRoaXMgJiYgdGhpcy5fX2F3YWl0ZXIpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcbiAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xuICAgIH0pO1xufTtcbnZhciBfX2dlbmVyYXRvciA9ICh0aGlzICYmIHRoaXMuX19nZW5lcmF0b3IpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBib2R5KSB7XG4gICAgdmFyIF8gPSB7IGxhYmVsOiAwLCBzZW50OiBmdW5jdGlvbigpIHsgaWYgKHRbMF0gJiAxKSB0aHJvdyB0WzFdOyByZXR1cm4gdFsxXTsgfSwgdHJ5czogW10sIG9wczogW10gfSwgZiwgeSwgdCwgZztcbiAgICByZXR1cm4gZyA9IHsgbmV4dDogdmVyYigwKSwgXCJ0aHJvd1wiOiB2ZXJiKDEpLCBcInJldHVyblwiOiB2ZXJiKDIpIH0sIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiAoZ1tTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzOyB9KSwgZztcbiAgICBmdW5jdGlvbiB2ZXJiKG4pIHsgcmV0dXJuIGZ1bmN0aW9uICh2KSB7IHJldHVybiBzdGVwKFtuLCB2XSk7IH07IH1cbiAgICBmdW5jdGlvbiBzdGVwKG9wKSB7XG4gICAgICAgIGlmIChmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLlwiKTtcbiAgICAgICAgd2hpbGUgKF8pIHRyeSB7XG4gICAgICAgICAgICBpZiAoZiA9IDEsIHkgJiYgKHQgPSBvcFswXSAmIDIgPyB5W1wicmV0dXJuXCJdIDogb3BbMF0gPyB5W1widGhyb3dcIl0gfHwgKCh0ID0geVtcInJldHVyblwiXSkgJiYgdC5jYWxsKHkpLCAwKSA6IHkubmV4dCkgJiYgISh0ID0gdC5jYWxsKHksIG9wWzFdKSkuZG9uZSkgcmV0dXJuIHQ7XG4gICAgICAgICAgICBpZiAoeSA9IDAsIHQpIG9wID0gW29wWzBdICYgMiwgdC52YWx1ZV07XG4gICAgICAgICAgICBzd2l0Y2ggKG9wWzBdKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAwOiBjYXNlIDE6IHQgPSBvcDsgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSA0OiBfLmxhYmVsKys7IHJldHVybiB7IHZhbHVlOiBvcFsxXSwgZG9uZTogZmFsc2UgfTtcbiAgICAgICAgICAgICAgICBjYXNlIDU6IF8ubGFiZWwrKzsgeSA9IG9wWzFdOyBvcCA9IFswXTsgY29udGludWU7XG4gICAgICAgICAgICAgICAgY2FzZSA3OiBvcCA9IF8ub3BzLnBvcCgpOyBfLnRyeXMucG9wKCk7IGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIGlmICghKHQgPSBfLnRyeXMsIHQgPSB0Lmxlbmd0aCA+IDAgJiYgdFt0Lmxlbmd0aCAtIDFdKSAmJiAob3BbMF0gPT09IDYgfHwgb3BbMF0gPT09IDIpKSB7IF8gPSAwOyBjb250aW51ZTsgfVxuICAgICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDMgJiYgKCF0IHx8IChvcFsxXSA+IHRbMF0gJiYgb3BbMV0gPCB0WzNdKSkpIHsgXy5sYWJlbCA9IG9wWzFdOyBicmVhazsgfVxuICAgICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDYgJiYgXy5sYWJlbCA8IHRbMV0pIHsgXy5sYWJlbCA9IHRbMV07IHQgPSBvcDsgYnJlYWs7IH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHQgJiYgXy5sYWJlbCA8IHRbMl0pIHsgXy5sYWJlbCA9IHRbMl07IF8ub3BzLnB1c2gob3ApOyBicmVhazsgfVxuICAgICAgICAgICAgICAgICAgICBpZiAodFsyXSkgXy5vcHMucG9wKCk7XG4gICAgICAgICAgICAgICAgICAgIF8udHJ5cy5wb3AoKTsgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvcCA9IGJvZHkuY2FsbCh0aGlzQXJnLCBfKTtcbiAgICAgICAgfSBjYXRjaCAoZSkgeyBvcCA9IFs2LCBlXTsgeSA9IDA7IH0gZmluYWxseSB7IGYgPSB0ID0gMDsgfVxuICAgICAgICBpZiAob3BbMF0gJiA1KSB0aHJvdyBvcFsxXTsgcmV0dXJuIHsgdmFsdWU6IG9wWzBdID8gb3BbMV0gOiB2b2lkIDAsIGRvbmU6IHRydWUgfTtcbiAgICB9XG59O1xuaW1wb3J0IHsgYXV0b0luamVjdGFibGUsIHNpbmdsZXRvbiB9IGZyb20gXCJ0c3lyaW5nZVwiO1xuaW1wb3J0IHsgVG9rZW4gfSBmcm9tIFwiLi90b2tlblwiO1xuaW1wb3J0IGF4aW9zIGZyb20gJ2F4aW9zJztcbmltcG9ydCB7IFNob3AgfSBmcm9tIFwiLi4vbW9kZWwvc2hvcFwiO1xudmFyIFNob3BTZXJ2aWNlID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIFNob3BTZXJ2aWNlKHRva2VuKSB7XG4gICAgICAgIHRoaXMudG9rZW4gPSB0b2tlbjtcbiAgICB9XG4gICAgU2hvcFNlcnZpY2UucHJvdG90eXBlLmdldFNob3BzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gX19nZW5lcmF0b3IodGhpcywgZnVuY3Rpb24gKF9hKSB7XG4gICAgICAgICAgICAgICAgc3dpdGNoIChfYS5sYWJlbCkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyh0aGlzLnRva2VuKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbNCAvKnlpZWxkKi8sIGF4aW9zLmdldCgnL2FwcHMvYXBpL3Nob3BzJywge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQXV0aG9yaXphdGlvbic6ICdCZWFyZXIgJyArIHRoaXMudG9rZW4uY3VycmVudFRva2VuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KS50aGVuKGZ1bmN0aW9uIChyZXNwb25zZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzcG9uc2UuZGF0YS5kYXRhLm1hcChmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNob3AgPSBuZXcgU2hvcCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvcC5wYXJzZUZyb21Kc29uKHsgc2hvcDogaXRlbSB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzaG9wO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KV07XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMTogcmV0dXJuIFsyIC8qcmV0dXJuKi8sIF9hLnNlbnQoKV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgU2hvcFNlcnZpY2UgPSBfX2RlY29yYXRlKFtcbiAgICAgICAgc2luZ2xldG9uKCksXG4gICAgICAgIGF1dG9JbmplY3RhYmxlKCksXG4gICAgICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246cGFyYW10eXBlc1wiLCBbVG9rZW5dKVxuICAgIF0sIFNob3BTZXJ2aWNlKTtcbiAgICByZXR1cm4gU2hvcFNlcnZpY2U7XG59KCkpO1xuZXhwb3J0IHsgU2hvcFNlcnZpY2UgfTtcbiIsInZhciBfX2RlY29yYXRlID0gKHRoaXMgJiYgdGhpcy5fX2RlY29yYXRlKSB8fCBmdW5jdGlvbiAoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpIHtcbiAgICB2YXIgYyA9IGFyZ3VtZW50cy5sZW5ndGgsIHIgPSBjIDwgMyA/IHRhcmdldCA6IGRlc2MgPT09IG51bGwgPyBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGtleSkgOiBkZXNjLCBkO1xuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5kZWNvcmF0ZSA9PT0gXCJmdW5jdGlvblwiKSByID0gUmVmbGVjdC5kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYyk7XG4gICAgZWxzZSBmb3IgKHZhciBpID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgaWYgKGQgPSBkZWNvcmF0b3JzW2ldKSByID0gKGMgPCAzID8gZChyKSA6IGMgPiAzID8gZCh0YXJnZXQsIGtleSwgcikgOiBkKHRhcmdldCwga2V5KSkgfHwgcjtcbiAgICByZXR1cm4gYyA+IDMgJiYgciAmJiBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHIpLCByO1xufTtcbmltcG9ydCBheGlvcyBmcm9tIFwiYXhpb3NcIjtcbmltcG9ydCB7IHNpbmdsZXRvbiB9IGZyb20gXCJ0c3lyaW5nZVwiO1xudmFyIFRva2VuID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIFRva2VuKCkge1xuICAgIH1cbiAgICBUb2tlbi5wcm90b3R5cGUuaW5pdCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgc2V0SW50ZXJ2YWwoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgX3RoaXMucmVmcmVzaFRva2VuKCk7XG4gICAgICAgIH0sIDIgKiA2MCAqIDEwMDApO1xuICAgIH07XG4gICAgVG9rZW4ucHJvdG90eXBlLnJlZnJlc2hUb2tlbiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgYXhpb3MuZ2V0KCcvYXBwcy9hcGkvY29udGFjdC9yZWZyZXNoJywge1xuICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICAgICdBdXRob3JpemF0aW9uJzogJ0JlYXJlciAnICsgdGhpcy5jdXJyZW50VG9rZW5cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSkudGhlbihmdW5jdGlvbiAocmVzcG9uc2UpIHtcbiAgICAgICAgICAgIF90aGlzLmN1cnJlbnRUb2tlbiA9IHJlc3BvbnNlLmRhdGEudG9rZW47XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgVG9rZW4gPSBfX2RlY29yYXRlKFtcbiAgICAgICAgc2luZ2xldG9uKClcbiAgICBdLCBUb2tlbik7XG4gICAgcmV0dXJuIFRva2VuO1xufSgpKTtcbmV4cG9ydCB7IFRva2VuIH07XG4iLCJ2YXIgX19kZWNvcmF0ZSA9ICh0aGlzICYmIHRoaXMuX19kZWNvcmF0ZSkgfHwgZnVuY3Rpb24gKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKSB7XG4gICAgdmFyIGMgPSBhcmd1bWVudHMubGVuZ3RoLCByID0gYyA8IDMgPyB0YXJnZXQgOiBkZXNjID09PSBudWxsID8gZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpIDogZGVzYywgZDtcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QuZGVjb3JhdGUgPT09IFwiZnVuY3Rpb25cIikgciA9IFJlZmxlY3QuZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpO1xuICAgIGVsc2UgZm9yICh2YXIgaSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIGlmIChkID0gZGVjb3JhdG9yc1tpXSkgciA9IChjIDwgMyA/IGQocikgOiBjID4gMyA/IGQodGFyZ2V0LCBrZXksIHIpIDogZCh0YXJnZXQsIGtleSkpIHx8IHI7XG4gICAgcmV0dXJuIGMgPiAzICYmIHIgJiYgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCByKSwgcjtcbn07XG52YXIgX19tZXRhZGF0YSA9ICh0aGlzICYmIHRoaXMuX19tZXRhZGF0YSkgfHwgZnVuY3Rpb24gKGssIHYpIHtcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QubWV0YWRhdGEgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIFJlZmxlY3QubWV0YWRhdGEoaywgdik7XG59O1xuaW1wb3J0IHsgc2luZ2xldG9uIH0gZnJvbSBcInRzeXJpbmdlXCI7XG5pbXBvcnQgeyBPcmRlciB9IGZyb20gXCIuLi9tb2RlbC9vcmRlclwiO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0IH0gZnJvbSBcInJ4anNcIjtcbnZhciBPcmRlclN0YXRlID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIE9yZGVyU3RhdGUoKSB7XG4gICAgICAgIHRoaXMuY3VycmVudE9yZGVyID0gbmV3IEJlaGF2aW9yU3ViamVjdChuZXcgT3JkZXIoKSk7XG4gICAgfVxuICAgIE9yZGVyU3RhdGUucHJvdG90eXBlLmdldEN1cnJlbnRPcmRlciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY3VycmVudE9yZGVyO1xuICAgIH07XG4gICAgT3JkZXJTdGF0ZS5wcm90b3R5cGUuc2V0Q3VycmVudE9yZGVyID0gZnVuY3Rpb24gKG9yZGVyKSB7XG4gICAgICAgIHRoaXMuY3VycmVudE9yZGVyLm5leHQob3JkZXIpO1xuICAgIH07XG4gICAgT3JkZXJTdGF0ZS5wcm90b3R5cGUuZ2V0T3JkZXIgPSBmdW5jdGlvbiAodXVpZCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcmRlcnMubWFwKGZ1bmN0aW9uIChlKSB7IHJldHVybiBlLnV1aWQgPT0gdXVpZDsgfSk7XG4gICAgfTtcbiAgICBPcmRlclN0YXRlLnByb3RvdHlwZS51cGRhdGVPcmRlciA9IGZ1bmN0aW9uIChvcmRlcikge1xuICAgICAgICB0aGlzLm9yZGVycy5wdXNoKG9yZGVyKTtcbiAgICB9O1xuICAgIE9yZGVyU3RhdGUgPSBfX2RlY29yYXRlKFtcbiAgICAgICAgc2luZ2xldG9uKCksXG4gICAgICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246cGFyYW10eXBlc1wiLCBbXSlcbiAgICBdLCBPcmRlclN0YXRlKTtcbiAgICByZXR1cm4gT3JkZXJTdGF0ZTtcbn0oKSk7XG5leHBvcnQgeyBPcmRlclN0YXRlIH07XG4iLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCB7fTsiXSwibmFtZXMiOlsiQXBwIiwiYXBwIiwiand0X3Rva2VuIiwiaW5pdCIsInJ1biIsIlRva2VuIiwiY29udGFpbmVyIiwiUmVhY3QiLCJSZWFjdERPTSIsIk5pY2VNb2RhbCIsIkJhc2VDb21wb25lbnQiLCJSb3V0ZSIsIkhhc2hSb3V0ZXIiLCJSb3V0ZXIiLCJSb3V0ZXMiLCJqd3QiLCJ0b2tlbiIsInJlc29sdmUiLCJjb25zb2xlIiwibG9nIiwiY3VycmVudFRva2VuIiwicHJvdG90eXBlIiwiYnVpbGRVaSIsInJvb3QiLCJjcmVhdGVSb290IiwiZG9jdW1lbnQiLCJnZXRFbGVtZW50QnlJZCIsInJlbmRlciIsImNyZWF0ZUVsZW1lbnQiLCJQcm92aWRlciIsInBhdGgiLCJlbGVtZW50IiwiQWNjb3VudCIsInVpZCIsInV1aWQiLCJhcHBlbmRpeCIsInRpdGxlIiwicGFyc2VGcm9tSnNvbiIsIml0ZW0iLCJhY2NvdW50IiwiQ29udGFjdCIsIkFkZHJlc3MiLCJmaXJzdG5hbWUiLCJsYXN0bmFtZSIsInN0cmVldCIsImhvdXNlTnVtYmVyIiwiemlwIiwiY29tcGFueSIsImNvbXBhbnkyIiwiY2l0eSIsImVtYWlsIiwiY291bnRyeSIsInVzdGlkIiwiY29udGFjdCIsInR5cGUiLCJwaG9uZSIsInBhcnNlRnJvbUZvcm1EYXRhIiwiZm9ybWRhdGEiLCJMYXlvdXRlckRhdGEiLCJ1c2VybmFtZSIsInBhc3N3b3JkIiwic2hvcHMiLCJsYXlvdXRlcl9kYXRhIiwic2hvcCIsInB1c2giLCJDb3VudHJ5IiwiY29kZSIsInVzZVZhdFdpdGhVc3RJZCIsInVzZVZhdFdpdGhvdXRVc3RJZCIsInY0IiwidXVpZHY0IiwiUG9zIiwiUGF5bWVudCIsIlNoaXBwaW5nIiwiU2hvcCIsIk9yZGVyIiwiZGVsaXZlcnlBZGRyZXNzIiwic2VuZGVyQWRkcmVzcyIsImludm9pY2VBZGRyZXNzIiwicG9zaXRpb25zIiwicGF5bWVudCIsInNoaXBwaW5nIiwiYmFza2V0RmllbGQxIiwiYmFza2V0RmllbGQyIiwiZHJhZnQiLCJzYXZlZCIsImFkZFBvc2l0aW9uIiwicG9zIiwiX3RoaXMiLCJhbGlhcyIsIm1hcCIsImUiLCJTdHJpbmciLCJQcm9kdWN0IiwiUHJpY2UiLCJwcm9kdWN0Iiwic3RhdHVzIiwiY291bnQiLCJwcmljZSIsIm5ldCIsInZhdCIsImdyb3NzIiwiYWxsTmV0IiwiYWxsVmF0IiwiYWxsR3Jvc3MiLCJTcGVjaWFsUHJvZHVjdFR5cGVPYmplY3QiLCJwYXJhbXMiLCJ0eXAiLCJpZCIsInNwZWNpYWxQcm9kdWN0VHlwZU9iamVjdCIsIlByb2R1Y3RHcm91cCIsImxhYmVsIiwibmFtZSIsImJhc2tldFBvc0ZpZWxkMSIsImJhc2tldFBvc0ZpZWxkMiIsIl9fYXdhaXRlciIsInRoaXNBcmciLCJfYXJndW1lbnRzIiwiUCIsImdlbmVyYXRvciIsImFkb3B0IiwidmFsdWUiLCJQcm9taXNlIiwicmVqZWN0IiwiZnVsZmlsbGVkIiwic3RlcCIsIm5leHQiLCJyZWplY3RlZCIsInJlc3VsdCIsImRvbmUiLCJ0aGVuIiwiYXBwbHkiLCJfX2dlbmVyYXRvciIsImJvZHkiLCJfIiwic2VudCIsInQiLCJ0cnlzIiwib3BzIiwiZiIsInkiLCJnIiwidmVyYiIsIlN5bWJvbCIsIml0ZXJhdG9yIiwibiIsInYiLCJvcCIsIlR5cGVFcnJvciIsImNhbGwiLCJwb3AiLCJsZW5ndGgiLCJBc3luY1BhZ2luYXRlIiwiQWNjb3VudFNlcnZpY2UiLCJPcmRlclN0YXRlIiwidXNlRWZmZWN0IiwidXNlU3RhdGUiLCJQcm9wVHlwZXMiLCJTZWxlY3RMYWJlbCIsIkFjY291bnRTZWxlY3RDb21wb25lbnQiLCJfYSIsIm9yZGVyIiwiX2IiLCJzaG9wVXVpZCIsInNldFNob3BVdWlkIiwiX2MiLCJzZXRBY2NvdW50Iiwib3JkZXJTdGF0ZSIsImxvYWRPcHRpb25zIiwic2VhcmNoUXVlcnkiLCJsb2FkZWRPcHRpb25zIiwiYWNjb3VudF9zZXJ2aWNlIiwiZGF0YSIsImdldEFjY291bnRzIiwib3B0aW9ucyIsImhhc01vcmUiLCJvbkNoYW5nZSIsIm9wdGlvbiIsIm9yZGVyT2JqIiwiZ2V0Q3VycmVudE9yZGVyIiwiZ2V0VmFsdWUiLCJzZXRDdXJyZW50T3JkZXIiLCJkZWZhdWx0T3B0aW9ucyIsImNsYXNzTmFtZSIsImNvbmNhdCIsImtleSIsIkpTT04iLCJzdHJpbmdpZnkiLCJkZWZhdWx0VmFsdWUiLCJjb21wb25lbnRzIiwiQ29udHJvbCIsInBsYWNlaG9sZGVyIiwiZ2V0T3B0aW9uVmFsdWUiLCJnZXRPcHRpb25MYWJlbCIsImlzU2VhcmNoYWJsZSIsInByb3BUeXBlcyIsImluc3RhbmNlT2YiLCJDb250YWN0Q29tcG9uZW50IiwiVG9wQmFyQ29tcG9uZW50IiwiUG9zaXRpb25zQ29tcG9uZW50IiwiUGF5bWVudENvbXBvbmVudCIsIlNoaXBwaW5nQ29tcG9uZW50IiwiQnV0dG9uQ29tcG9uZW50IiwidXNlUGFyYW1zIiwiT3JkZXJTZXJ2aWNlIiwiSW5mb0ZpZWxkQ29tcG9uZW50IiwiT3JkZXJBbGlhc0NvbXBvbmVudCIsInByb3BzIiwic2V0U2hvcCIsInNldE9yZGVyIiwib3JkZXJfc3RhdGUiLCJvcmRlclNlcnZpY2UiLCJsb2FkT3JkZXIiLCJnZXRPcmRlciIsIlN0cmljdE1vZGUiLCJjaGFuZ2UiLCJCc1BsdXMiLCJCc1BlbmNpbCIsIlJpU2F2ZUZpbGwiLCJSaURlbGV0ZUJpbjJMaW5lIiwiQnNYQ2lyY2xlIiwiQnV0dG9uIiwiQmFzZUJ1dHRvbiIsInZhcmlhbnQiLCJvbkNsaWNrIiwiY29sb3IiLCJwaWxsIiwiQ3VycmVuY3kiLCJGcmFnbWVudCIsIkludGwiLCJOdW1iZXJGb3JtYXQiLCJzdHlsZSIsImN1cnJlbmN5IiwiZm9ybWF0IiwiX19tYWtlVGVtcGxhdGVPYmplY3QiLCJjb29rZWQiLCJyYXciLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsIl9fYXNzaWduIiwiYXNzaWduIiwicyIsImkiLCJhcmd1bWVudHMiLCJwIiwiaGFzT3duUHJvcGVydHkiLCJzdHlsZWQiLCJMYWJlbCIsInNlbGVjdFByb3BzIiwidGVtcGxhdGVPYmplY3RfMSIsIiRpc0Zsb2F0aW5nIiwiX19leHRlbmRzIiwiZXh0ZW5kU3RhdGljcyIsImQiLCJiIiwic2V0UHJvdG90eXBlT2YiLCJfX3Byb3RvX18iLCJBcnJheSIsIl9fIiwiY29uc3RydWN0b3IiLCJjcmVhdGUiLCJDb21wb25lbnQiLCJkZWJvdW5jZVRpbWUiLCJSaVByaW50ZXJGaWxsIiwiX3N1cGVyIiwic3RhdGUiLCJkaXNhYmxlZCIsImNvbXBvbmVudERpZE1vdW50IiwicGlwZSIsInN1YnNjcmliZSIsInNhdmVCdXR0b24iLCJzZXRTdGF0ZSIsImhhbmRsZVByaW50Iiwid2luZG93Iiwib3BlbiIsImhhbmRsZVNhdmUiLCJwcmV2ZW50RGVmYXVsdCIsInNhdmVPcmRlciIsInNpemUiLCJDYWxjQ29tcG9uZW50IiwiY2FsYyIsImNhbGNPcmRlciIsIkFkZHJlc3NEZXRhaWwiLCJhZGRyZXNzIiwidXNlTW9kYWwiLCJ2YWxpZGF0b3IiLCJGb3JtIiwiQ291bnRyeVNlcnZpY2UiLCJNb2RhbCIsIkFkZHJlc3NkaXYiLCJhY3Rpb24iLCJjb3VudHJ5X2FwaSIsIm1vZGFsIiwiZm9ybURhdGEiLCJzZXRGb3JtRGF0YSIsInNjaGVtYSIsInNldFNjaGVtYSIsImdldENvdW50cnkiLCJjb3VudHJ5cyIsImZvckVhY2giLCJyZXF1aXJlZCIsInByb3BlcnRpZXMiLCJvbmVPZiIsInVpU2NoZW1hIiwic2hvdyIsInZpc2libGUiLCJvbkNsb3NlIiwicmVtb3ZlIiwiSGVhZGVyIiwiQm9keSIsIkZvb3RlciIsIkFkZHJlc3NNb2RhbCIsInVzZUNhbGxiYWNrIiwiQWRkcmVzc01vZGFsQ29tcG9uZW50IiwiaGFuZGxlQWRkIiwiaGFuZGxlRWRpdCIsImFkZHJlc3NNb2RhbCIsInNob3dBZGRNb2RhbCIsImFkZEFkZHJlc3MiLCJzaG93RWRpdE1vZGFsIiwidXBkYXRlQWRkcmVzcyIsImZ1bmMiLCJBZGRyZXNzU2VydmljZSIsIkFkZHJlc3NTZWxlY3QiLCJjaGFuZ2VBZGRyZXNzIiwiY29udGFjdFV1aWQiLCJzZXRDb250YWN0VXVpZCIsImxvY2FsQWRkcmVzcyIsInNldExvY2FsQWRkcmVzcyIsImFkZHJlc3Nfc2VydmljZSIsImdldENvbnRhY3RBZGRyZXNzIiwiTWF0aCIsInJhbmRvbSIsInVwZGF0ZSIsInNldEFkZHJlc3NJbk9yZGVyIiwibnVtYmVyIiwic3RyaW5nIiwiQ29udGFjdFNlbGVjdCIsInNldENvbnRhY3QiLCJDb250YWN0TW9kYWwiLCJDb250YWN0U2VydmljZSIsIkNvbnRhY3RNb2RhbENvbXBvbmVudCIsImNvbnRhY3RNb2RhbCIsImFkZENvbnRhY3QiLCJ1cGRhdGVDb250YWN0IiwiY29udGFjdF9hcGkiLCJjcmVhdGVDb250YWN0IiwiYWRkcmVzc19hcGkiLCJwYWdlIiwiY29udGFjdHMiLCJnZXRDb250YWN0cyIsImFkZGl0aW9uYWwiLCJzZXRDb250YWN0SW5PcmRlciIsIkRyYWZ0Q29tcG9uZW50Iiwic2V0RHJhZnQiLCJkZWZhdWx0Q2hlY2tlZCIsInNldEJhc2tldEZpZWxkMSIsInNldEJhc2tldEZpZWxkMiIsImNoYW5nZUJhc2tldEZpZWxkMSIsImNoYW5nZUJhc2tldEZpZWxkMiIsInRhcmdldCIsIlBheW1lbnRTZXJ2aWNlIiwic2V0UGF5bWVudCIsInBheW1lbnRfc2VydmljZSIsImdldFBheW1lbnRzIiwiUHJvZHVjdEdyb3VwU2VsZWN0IiwiUHJvZHVjdFNlbGVjdCIsIlByb2R1Y3RGb3JtIiwiQWRkUG9zaXRpb25Db21wb25lbnQiLCJzZXRTaG93IiwiaGFuZGxlQ2xvc2UiLCJoYW5kbGVTaG93Iiwic2V0UHJvZHVjdCIsIl9kIiwicHJvZHVjdEdyb3VwIiwic2V0UHJvZHVjdEdyb3VwIiwiaGFuZGxlQ2hhbmdlIiwiYWRkUG9zIiwiRWRpdFBvc2l0aW9uQ29tcG9uZW50IiwicG9zaXRpb24iLCJjaGFuZ2VQb3MiLCJQb3NDb21wb25lbnQiLCJJdGVtc0NvbXBvbmVudCIsImRlbFBvcyIsIm9iamVjdCIsImluZGV4IiwiYXJyYXkiLCJkZWxldGVQb3MiLCJfX3NwcmVhZEFycmF5IiwidG8iLCJmcm9tIiwicGFjayIsImwiLCJhciIsInNsaWNlIiwidXBkYXRlT3JkZXIiLCJzZXRQb3NpdGlvbnMiLCJwb3NPYmoiLCJuZXh0Q291bnRlcnMiLCJjIiwiZmlsdGVyIiwib2JqIiwiUHJvZHVjdFNlcnZpY2UiLCJ1c2VEZWJvdW5jZWRDYWxsYmFjayIsInByb2R1Y3RfYXBpIiwic2V0VWlTY2hlbWEiLCJfZSIsInNldFR5cGUiLCJfZiIsInNldFByaWNlIiwibG9hZFNjaGVtYSIsImxvYWREYXRhIiwiZ2V0QWRkUHJvZHVjdFNjaGVtYSIsImNoYW5nZUNhbGMiLCJkZWJvdW5jZVJlQ2FsYyIsImNhbGNQcm9kdWN0IiwiYWRkUHJvZHVjdCIsIlByb2R1Y3RHcm91cFNlcnZpY2UiLCJBc3luY1NlbGVjdCIsInByb2R1Y3Rncm91cF9hcGkiLCJnZXRQcm9kdWN0R3JvdXBzIiwidXNlRGVib3VuY2UiLCJnZXRQcm9kdWN0c0J5VGVybSIsImdldFByb2R1Y3RzIiwiZGVib3VuY2VkU2VhcmNoVGVybSIsIlNoaXBwaW5nU2VydmljZSIsInNldFNoaXBwaW5nIiwic2hpcHBpbmdfc2VydmljZSIsImdldFNoaXBwaW5nIiwiU2hvcFNlcnZpY2UiLCJTaG9wU2VsZWN0Q29tcG9uZW50Iiwic2hvcF9zZXJ2aWNlIiwiZ2V0U2hvcHMiLCJUeXBlU2VsZWN0Q29tcG9uZW50IiwiU2VsZWN0IiwiX19kZWNvcmF0ZSIsImRlY29yYXRvcnMiLCJkZXNjIiwiciIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsIlJlZmxlY3QiLCJfdHlwZW9mIiwiZGVjb3JhdGUiLCJfX21ldGFkYXRhIiwiayIsIm1ldGFkYXRhIiwiYXV0b0luamVjdGFibGUiLCJzaW5nbGV0b24iLCJheGlvcyIsImdldCIsImhlYWRlcnMiLCJyZXNwb25zZSIsInBvc3QiLCJwdXQiLCJ0ZXJtIiwidGVtcCIsInBnIiwiY2hpbGRyZW4iLCJzdWIiLCJzcGciLCJzaGlwbWVudCIsInNldEludGVydmFsIiwicmVmcmVzaFRva2VuIiwiQmVoYXZpb3JTdWJqZWN0IiwiY3VycmVudE9yZGVyIiwib3JkZXJzIl0sInNvdXJjZVJvb3QiOiIifQ== \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QUFVLENBQUM7RUFDZCxPQUFPQSxVQUFVO0FBQ3JCLENBQUMsRUFBRztBQUNKOU0sa0JBQWtCLEdBQUc4TSxVQUFVOzs7Ozs7Ozs7OztBQ3JDL0IiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi92YXIvcGx1Z2lucy9TeXN0ZW0vUFNDL0ludm9pY2UvV2VicGFjay9pbmRleC50cyIsIndlYnBhY2s6Ly8vLi92YXIvcGx1Z2lucy9TeXN0ZW0vUFNDL0ludm9pY2UvV2VicGFjay9zcmMvYXBwL2FwcC50c3giLCJ3ZWJwYWNrOi8vLy4vdmFyL3BsdWdpbnMvU3lzdGVtL1BTQy9JbnZvaWNlL1dlYnBhY2svc3JjL21vZGVsL2FjY291bnQudHMiLCJ3ZWJwYWNrOi8vLy4vdmFyL3BsdWdpbnMvU3lzdGVtL1BTQy9JbnZvaWNlL1dlYnBhY2svc3JjL21vZGVsL2FkZHJlc3MudHMiLCJ3ZWJwYWNrOi8vLy4vdmFyL3BsdWdpbnMvU3lzdGVtL1BTQy9JbnZvaWNlL1dlYnBhY2svc3JjL21vZGVsL2NvbnRhY3QudHMiLCJ3ZWJwYWNrOi8vLy4vdmFyL3BsdWdpbnMvU3lzdGVtL1BTQy9JbnZvaWNlL1dlYnBhY2svc3JjL21vZGVsL2NvdW50cnkudHMiLCJ3ZWJwYWNrOi8vLy4vdmFyL3BsdWdpbnMvU3lzdGVtL1BTQy9JbnZvaWNlL1dlYnBhY2svc3JjL21vZGVsL29yZGVyLnRzIiwid2VicGFjazovLy8uL3Zhci9wbHVnaW5zL1N5c3RlbS9QU0MvSW52b2ljZS9XZWJwYWNrL3NyYy9tb2RlbC9wYXltZW50LnRzIiwid2VicGFjazovLy8uL3Zhci9wbHVnaW5zL1N5c3RlbS9QU0MvSW52b2ljZS9XZWJwYWNrL3NyYy9tb2RlbC9wb3MudHMiLCJ3ZWJwYWNrOi8vLy4vdmFyL3BsdWdpbnMvU3lzdGVtL1BTQy9JbnZvaWNlL1dlYnBhY2svc3JjL21vZGVsL3ByaWNlLnRzIiwid2VicGFjazovLy8uL3Zhci9wbHVnaW5zL1N5c3RlbS9QU0MvSW52b2ljZS9XZWJwYWNrL3NyYy9tb2RlbC9wcm9kdWN0LnRzIiwid2VicGFjazovLy8uL3Zhci9wbHVnaW5zL1N5c3RlbS9QU0MvSW52b2ljZS9XZWJwYWNrL3NyYy9tb2RlbC9wcm9kdWN0R3JvdXAudHMiLCJ3ZWJwYWNrOi8vLy4vdmFyL3BsdWdpbnMvU3lzdGVtL1BTQy9JbnZvaWNlL1dlYnBhY2svc3JjL21vZGVsL3NoaXBwaW5nLnRzIiwid2VicGFjazovLy8uL3Zhci9wbHVnaW5zL1N5c3RlbS9QU0MvSW52b2ljZS9XZWJwYWNrL3NyYy9tb2RlbC9zaG9wLnRzIiwid2VicGFjazovLy8uL3Zhci9wbHVnaW5zL1N5c3RlbS9QU0MvSW52b2ljZS9XZWJwYWNrL3NyYy9tb2R1bGVzL2FjY291bnQvQWNjb3VudFNlbGVjdENvbXBvbmVudC50c3giLCJ3ZWJwYWNrOi8vLy4vdmFyL3BsdWdpbnMvU3lzdGVtL1BTQy9JbnZvaWNlL1dlYnBhY2svc3JjL21vZHVsZXMvYmFzZS9CYXNlQ29tcG9uZW50LnRzeCIsIndlYnBhY2s6Ly8vLi92YXIvcGx1Z2lucy9TeXN0ZW0vUFNDL0ludm9pY2UvV2VicGFjay9zcmMvbW9kdWxlcy9iYXNlL0J1dHRvbi50c3giLCJ3ZWJwYWNrOi8vLy4vdmFyL3BsdWdpbnMvU3lzdGVtL1BTQy9JbnZvaWNlL1dlYnBhY2svc3JjL21vZHVsZXMvYmFzZS9DdXJyZW5jeS50c3giLCJ3ZWJwYWNrOi8vLy4vdmFyL3BsdWdpbnMvU3lzdGVtL1BTQy9JbnZvaWNlL1dlYnBhY2svc3JjL21vZHVsZXMvYmFzZS9TZWxlY3RMYWJlbC50c3giLCJ3ZWJwYWNrOi8vLy4vdmFyL3BsdWdpbnMvU3lzdGVtL1BTQy9JbnZvaWNlL1dlYnBhY2svc3JjL21vZHVsZXMvYnV0dG9uL0J1dHRvbkNvbXBvbmVudC50c3giLCJ3ZWJwYWNrOi8vLy4vdmFyL3BsdWdpbnMvU3lzdGVtL1BTQy9JbnZvaWNlL1dlYnBhY2svc3JjL21vZHVsZXMvY2FsYy9DYWxjQ29tcG9uZW50LnRzeCIsIndlYnBhY2s6Ly8vLi92YXIvcGx1Z2lucy9TeXN0ZW0vUFNDL0ludm9pY2UvV2VicGFjay9zcmMvbW9kdWxlcy9jb250YWN0L0FkZHJlc3NEZXRhaWwudHN4Iiwid2VicGFjazovLy8uL3Zhci9wbHVnaW5zL1N5c3RlbS9QU0MvSW52b2ljZS9XZWJwYWNrL3NyYy9tb2R1bGVzL2NvbnRhY3QvQWRkcmVzc01vZGFsLnRzeCIsIndlYnBhY2s6Ly8vLi92YXIvcGx1Z2lucy9TeXN0ZW0vUFNDL0ludm9pY2UvV2VicGFjay9zcmMvbW9kdWxlcy9jb250YWN0L0FkZHJlc3NNb2RhbENvbXBvbmVudC50c3giLCJ3ZWJwYWNrOi8vLy4vdmFyL3BsdWdpbnMvU3lzdGVtL1BTQy9JbnZvaWNlL1dlYnBhY2svc3JjL21vZHVsZXMvY29udGFjdC9BZGRyZXNzU2VsZWN0LnRzeCIsIndlYnBhY2s6Ly8vLi92YXIvcGx1Z2lucy9TeXN0ZW0vUFNDL0ludm9pY2UvV2VicGFjay9zcmMvbW9kdWxlcy9jb250YWN0L0NvbnRhY3RDb21wb25lbnQudHN4Iiwid2VicGFjazovLy8uL3Zhci9wbHVnaW5zL1N5c3RlbS9QU0MvSW52b2ljZS9XZWJwYWNrL3NyYy9tb2R1bGVzL2NvbnRhY3QvQ29udGFjdE1vZGFsLnRzeCIsIndlYnBhY2s6Ly8vLi92YXIvcGx1Z2lucy9TeXN0ZW0vUFNDL0ludm9pY2UvV2VicGFjay9zcmMvbW9kdWxlcy9jb250YWN0L0NvbnRhY3RNb2RhbENvbXBvbmVudC50c3giLCJ3ZWJwYWNrOi8vLy4vdmFyL3BsdWdpbnMvU3lzdGVtL1BTQy9JbnZvaWNlL1dlYnBhY2svc3JjL21vZHVsZXMvY29udGFjdC9Db250YWN0U2VsZWN0LnRzeCIsIndlYnBhY2s6Ly8vLi92YXIvcGx1Z2lucy9TeXN0ZW0vUFNDL0ludm9pY2UvV2VicGFjay9zcmMvbW9kdWxlcy9kcmFmdC9EcmFmdENvbXBvbmVudC50c3giLCJ3ZWJwYWNrOi8vLy4vdmFyL3BsdWdpbnMvU3lzdGVtL1BTQy9JbnZvaWNlL1dlYnBhY2svc3JjL21vZHVsZXMvaW5mby9JbmZvRmllbGRDb21wb25lbnQudHN4Iiwid2VicGFjazovLy8uL3Zhci9wbHVnaW5zL1N5c3RlbS9QU0MvSW52b2ljZS9XZWJwYWNrL3NyYy9tb2R1bGVzL29yZGVyL09yZGVyQWxpYXNDb21wb25lbnQudHN4Iiwid2VicGFjazovLy8uL3Zhci9wbHVnaW5zL1N5c3RlbS9QU0MvSW52b2ljZS9XZWJwYWNrL3NyYy9tb2R1bGVzL3BheW1lbnQvUGF5bWVudENvbXBvbmVudC50c3giLCJ3ZWJwYWNrOi8vLy4vdmFyL3BsdWdpbnMvU3lzdGVtL1BTQy9JbnZvaWNlL1dlYnBhY2svc3JjL21vZHVsZXMvcG9zaXRpb25zL0FkZFBvc2l0aW9uQ29tcG9uZW50LnRzeCIsIndlYnBhY2s6Ly8vLi92YXIvcGx1Z2lucy9TeXN0ZW0vUFNDL0ludm9pY2UvV2VicGFjay9zcmMvbW9kdWxlcy9wb3NpdGlvbnMvRWRpdFBvc2l0aW9uQ29tcG9uZW50LnRzeCIsIndlYnBhY2s6Ly8vLi92YXIvcGx1Z2lucy9TeXN0ZW0vUFNDL0ludm9pY2UvV2VicGFjay9zcmMvbW9kdWxlcy9wb3NpdGlvbnMvSXRlbXNDb21wb25lbnQudHN4Iiwid2VicGFjazovLy8uL3Zhci9wbHVnaW5zL1N5c3RlbS9QU0MvSW52b2ljZS9XZWJwYWNrL3NyYy9tb2R1bGVzL3Bvc2l0aW9ucy9Qb3NDb21wb25lbnQudHN4Iiwid2VicGFjazovLy8uL3Zhci9wbHVnaW5zL1N5c3RlbS9QU0MvSW52b2ljZS9XZWJwYWNrL3NyYy9tb2R1bGVzL3Bvc2l0aW9ucy9Qb3NpdGlvbnNDb21wb25lbnQudHN4Iiwid2VicGFjazovLy8uL3Zhci9wbHVnaW5zL1N5c3RlbS9QU0MvSW52b2ljZS9XZWJwYWNrL3NyYy9tb2R1bGVzL3Byb2R1Y3QvUHJvZHVjdEZvcm0udHN4Iiwid2VicGFjazovLy8uL3Zhci9wbHVnaW5zL1N5c3RlbS9QU0MvSW52b2ljZS9XZWJwYWNrL3NyYy9tb2R1bGVzL3Byb2R1Y3QvUHJvZHVjdEdyb3VwU2VsZWN0LnRzeCIsIndlYnBhY2s6Ly8vLi92YXIvcGx1Z2lucy9TeXN0ZW0vUFNDL0ludm9pY2UvV2VicGFjay9zcmMvbW9kdWxlcy9wcm9kdWN0L1Byb2R1Y3RTZWxlY3QudHN4Iiwid2VicGFjazovLy8uL3Zhci9wbHVnaW5zL1N5c3RlbS9QU0MvSW52b2ljZS9XZWJwYWNrL3NyYy9tb2R1bGVzL3NoaXBwaW5nL1NoaXBwaW5nQ29tcG9uZW50LnRzeCIsIndlYnBhY2s6Ly8vLi92YXIvcGx1Z2lucy9TeXN0ZW0vUFNDL0ludm9pY2UvV2VicGFjay9zcmMvbW9kdWxlcy9zaG9wL1Nob3BTZWxlY3RDb21wb25lbnQudHN4Iiwid2VicGFjazovLy8uL3Zhci9wbHVnaW5zL1N5c3RlbS9QU0MvSW52b2ljZS9XZWJwYWNrL3NyYy9tb2R1bGVzL3RvcGJhci9Ub3BCYXJDb21wb25lbnQudHN4Iiwid2VicGFjazovLy8uL3Zhci9wbHVnaW5zL1N5c3RlbS9QU0MvSW52b2ljZS9XZWJwYWNrL3NyYy9tb2R1bGVzL3R5cGUvVHlwZVNlbGVjdENvbXBvbmVudC50c3giLCJ3ZWJwYWNrOi8vLy4vdmFyL3BsdWdpbnMvU3lzdGVtL1BTQy9JbnZvaWNlL1dlYnBhY2svc3JjL3NlcnZpY2VzL2FjY291bnQudHMiLCJ3ZWJwYWNrOi8vLy4vdmFyL3BsdWdpbnMvU3lzdGVtL1BTQy9JbnZvaWNlL1dlYnBhY2svc3JjL3NlcnZpY2VzL2FkZHJlc3MudHMiLCJ3ZWJwYWNrOi8vLy4vdmFyL3BsdWdpbnMvU3lzdGVtL1BTQy9JbnZvaWNlL1dlYnBhY2svc3JjL3NlcnZpY2VzL2NvbnRhY3QudHMiLCJ3ZWJwYWNrOi8vLy4vdmFyL3BsdWdpbnMvU3lzdGVtL1BTQy9JbnZvaWNlL1dlYnBhY2svc3JjL3NlcnZpY2VzL2NvdW50cnkudHMiLCJ3ZWJwYWNrOi8vLy4vdmFyL3BsdWdpbnMvU3lzdGVtL1BTQy9JbnZvaWNlL1dlYnBhY2svc3JjL3NlcnZpY2VzL29yZGVyLnRzIiwid2VicGFjazovLy8uL3Zhci9wbHVnaW5zL1N5c3RlbS9QU0MvSW52b2ljZS9XZWJwYWNrL3NyYy9zZXJ2aWNlcy9wYXltZW50LnRzIiwid2VicGFjazovLy8uL3Zhci9wbHVnaW5zL1N5c3RlbS9QU0MvSW52b2ljZS9XZWJwYWNrL3NyYy9zZXJ2aWNlcy9wcm9kdWN0LnRzIiwid2VicGFjazovLy8uL3Zhci9wbHVnaW5zL1N5c3RlbS9QU0MvSW52b2ljZS9XZWJwYWNrL3NyYy9zZXJ2aWNlcy9wcm9kdWN0Z3JvdXAudHMiLCJ3ZWJwYWNrOi8vLy4vdmFyL3BsdWdpbnMvU3lzdGVtL1BTQy9JbnZvaWNlL1dlYnBhY2svc3JjL3NlcnZpY2VzL3NoaXBwaW5nLnRzIiwid2VicGFjazovLy8uL3Zhci9wbHVnaW5zL1N5c3RlbS9QU0MvSW52b2ljZS9XZWJwYWNrL3NyYy9zZXJ2aWNlcy9zaG9wLnRzIiwid2VicGFjazovLy8uL3Zhci9wbHVnaW5zL1N5c3RlbS9QU0MvSW52b2ljZS9XZWJwYWNrL3NyYy9zZXJ2aWNlcy90b2tlbi50cyIsIndlYnBhY2s6Ly8vLi92YXIvcGx1Z2lucy9TeXN0ZW0vUFNDL0ludm9pY2UvV2VicGFjay9zcmMvc3RhdGUvb3JkZXIudHMiLCJ3ZWJwYWNrOi8vLy4vdmFyL3BsdWdpbnMvU3lzdGVtL1BTQy9JbnZvaWNlL1dlYnBhY2svc3JjL2Nzcy9vdXRwdXQuY3NzPzgyNzQiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xucmVxdWlyZShcInJlZmxlY3QtbWV0YWRhdGFcIik7XG4vL2ltcG9ydCAnLi9zcmMvY3NzL3N0eWxlLnNjc3MnXG5yZXF1aXJlKFwiLi9zcmMvY3NzL291dHB1dC5jc3NcIik7XG52YXIgYXBwXzEgPSByZXF1aXJlKFwiLi9zcmMvYXBwL2FwcFwiKTtcbnZhciBhcHAgPSBuZXcgYXBwXzEuQXBwKGp3dF90b2tlbik7XG5hcHAuaW5pdCgpO1xuYXBwLnJ1bigpO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19pbXBvcnREZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydERlZmF1bHQpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICByZXR1cm4gKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgPyBtb2QgOiB7IFwiZGVmYXVsdFwiOiBtb2QgfTtcbn07XG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuZXhwb3J0cy5BcHAgPSB2b2lkIDA7XG52YXIganN4X3J1bnRpbWVfMSA9IHJlcXVpcmUoXCJyZWFjdC9qc3gtcnVudGltZVwiKTtcbnZhciB0b2tlbl8xID0gcmVxdWlyZShcIi4uL3NlcnZpY2VzL3Rva2VuXCIpO1xudmFyIHRzeXJpbmdlXzEgPSByZXF1aXJlKFwidHN5cmluZ2VcIik7XG52YXIgY2xpZW50XzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcInJlYWN0LWRvbS9jbGllbnRcIikpO1xudmFyIG5pY2VfbW9kYWxfcmVhY3RfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiQGViYXkvbmljZS1tb2RhbC1yZWFjdFwiKSk7XG52YXIgQmFzZUNvbXBvbmVudF8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCIuLi9tb2R1bGVzL2Jhc2UvQmFzZUNvbXBvbmVudFwiKSk7XG52YXIgcmVhY3Rfcm91dGVyX2RvbV8xID0gcmVxdWlyZShcInJlYWN0LXJvdXRlci1kb21cIik7XG52YXIgQXBwID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIEFwcChqd3QpIHtcbiAgICAgICAgdmFyIHRva2VuID0gdHN5cmluZ2VfMS5jb250YWluZXIucmVzb2x2ZSh0b2tlbl8xLlRva2VuKTtcbiAgICAgICAgY29uc29sZS5sb2coand0KTtcbiAgICAgICAgdG9rZW4uY3VycmVudFRva2VuID0gand0O1xuICAgICAgICB0b2tlbi5pbml0KCk7XG4gICAgfVxuICAgIEFwcC5wcm90b3R5cGUuaW5pdCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5idWlsZFVpKCk7XG4gICAgfTtcbiAgICBBcHAucHJvdG90eXBlLmJ1aWxkVWkgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciByb290ID0gY2xpZW50XzFbXCJkZWZhdWx0XCJdLmNyZWF0ZVJvb3QoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Jvb3QnKSk7XG4gICAgICAgIHJvb3QucmVuZGVyKCgwLCBqc3hfcnVudGltZV8xLmpzeCkobmljZV9tb2RhbF9yZWFjdF8xW1wiZGVmYXVsdFwiXS5Qcm92aWRlciwgeyBjaGlsZHJlbjogKDAsIGpzeF9ydW50aW1lXzEuanN4KShyZWFjdF9yb3V0ZXJfZG9tXzEuSGFzaFJvdXRlciwgeyBjaGlsZHJlbjogKDAsIGpzeF9ydW50aW1lXzEuanN4cykocmVhY3Rfcm91dGVyX2RvbV8xLlJvdXRlcywgeyBjaGlsZHJlbjogWygwLCBqc3hfcnVudGltZV8xLmpzeCkocmVhY3Rfcm91dGVyX2RvbV8xLlJvdXRlLCB7IHBhdGg6IFwiL1wiLCBlbGVtZW50OiAoMCwganN4X3J1bnRpbWVfMS5qc3gpKEJhc2VDb21wb25lbnRfMVtcImRlZmF1bHRcIl0sIHt9KSB9KSwgKDAsIGpzeF9ydW50aW1lXzEuanN4KShyZWFjdF9yb3V0ZXJfZG9tXzEuUm91dGUsIHsgcGF0aDogXCIvOnV1aWRcIiwgZWxlbWVudDogKDAsIGpzeF9ydW50aW1lXzEuanN4KShCYXNlQ29tcG9uZW50XzFbXCJkZWZhdWx0XCJdLCB7fSkgfSldIH0pIH0pIH0pKTtcbiAgICB9O1xuICAgIEFwcC5wcm90b3R5cGUucnVuID0gZnVuY3Rpb24gKCkge1xuICAgIH07XG4gICAgcmV0dXJuIEFwcDtcbn0oKSk7XG5leHBvcnRzLkFwcCA9IEFwcDtcbiIsIlwidXNlIHN0cmljdFwiO1xuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbmV4cG9ydHMuQWNjb3VudCA9IHZvaWQgMDtcbnZhciBBY2NvdW50ID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIEFjY291bnQoKSB7XG4gICAgICAgIHRoaXMudWlkID0gMDtcbiAgICAgICAgdGhpcy51dWlkID0gXCJcIjtcbiAgICAgICAgdGhpcy5hcHBlbmRpeCA9IFwiXCI7XG4gICAgICAgIHRoaXMudGl0bGUgPSBcIlwiO1xuICAgIH1cbiAgICBBY2NvdW50LnByb3RvdHlwZS5wYXJzZUZyb21Kc29uID0gZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgICAgdGhpcy51aWQgPSBpdGVtLmFjY291bnQudWlkO1xuICAgICAgICB0aGlzLnV1aWQgPSBpdGVtLmFjY291bnQudXVpZDtcbiAgICAgICAgdGhpcy50aXRsZSA9IGl0ZW0uYWNjb3VudC50aXRsZTtcbiAgICAgICAgdGhpcy5hcHBlbmRpeCA9IGl0ZW0uYWNjb3VudC5hcHBlbmRpeDtcbiAgICB9O1xuICAgIHJldHVybiBBY2NvdW50O1xufSgpKTtcbmV4cG9ydHMuQWNjb3VudCA9IEFjY291bnQ7XG4iLCJcInVzZSBzdHJpY3RcIjtcbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5leHBvcnRzLkFkZHJlc3MgPSB2b2lkIDA7XG52YXIgY29udGFjdF8xID0gcmVxdWlyZShcIi4vY29udGFjdFwiKTtcbnZhciBBZGRyZXNzID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIEFkZHJlc3MoKSB7XG4gICAgICAgIHRoaXMudWlkID0gMDtcbiAgICAgICAgdGhpcy51dWlkID0gXCJcIjtcbiAgICAgICAgdGhpcy5maXJzdG5hbWUgPSBcIlwiO1xuICAgICAgICB0aGlzLmxhc3RuYW1lID0gXCJcIjtcbiAgICAgICAgdGhpcy5zdHJlZXQgPSBcIlwiO1xuICAgICAgICB0aGlzLmhvdXNlTnVtYmVyID0gXCJcIjtcbiAgICAgICAgdGhpcy56aXAgPSBcIlwiO1xuICAgICAgICB0aGlzLmNvbXBhbnkgPSBcIlwiO1xuICAgICAgICB0aGlzLmNvbXBhbnkyID0gXCJcIjtcbiAgICAgICAgdGhpcy5jaXR5ID0gXCJcIjtcbiAgICAgICAgdGhpcy5lbWFpbCA9IFwiXCI7XG4gICAgICAgIHRoaXMuY291bnRyeSA9IFwiXCI7XG4gICAgICAgIHRoaXMudXN0aWQgPSBcIlwiO1xuICAgICAgICB0aGlzLmNvbnRhY3QgPSBuZXcgY29udGFjdF8xLkNvbnRhY3QoKTtcbiAgICAgICAgdGhpcy50eXBlID0gMDtcbiAgICB9XG4gICAgQWRkcmVzcy5wcm90b3R5cGUucGFyc2VGcm9tSnNvbiA9IGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICAgIHRoaXMudWlkID0gaXRlbS51aWQ7XG4gICAgICAgIHRoaXMudXVpZCA9IGl0ZW0udXVpZDtcbiAgICAgICAgdGhpcy5maXJzdG5hbWUgPSBpdGVtLmZpcnN0bmFtZTtcbiAgICAgICAgdGhpcy5sYXN0bmFtZSA9IGl0ZW0ubGFzdG5hbWU7XG4gICAgICAgIHRoaXMuc3RyZWV0ID0gaXRlbS5zdHJlZXQ7XG4gICAgICAgIHRoaXMuaG91c2VOdW1iZXIgPSBpdGVtLmhvdXNlTnVtYmVyO1xuICAgICAgICB0aGlzLnppcCA9IGl0ZW0uemlwO1xuICAgICAgICB0aGlzLmNvbXBhbnkgPSBpdGVtLmNvbXBhbnk7XG4gICAgICAgIHRoaXMuY29tcGFueTIgPSBpdGVtLmNvbXBhbnkyO1xuICAgICAgICB0aGlzLnBob25lID0gaXRlbS5waG9uZTtcbiAgICAgICAgdGhpcy5jaXR5ID0gaXRlbS5jaXR5O1xuICAgICAgICB0aGlzLmVtYWlsID0gaXRlbS5lbWFpbDtcbiAgICAgICAgdGhpcy50eXBlID0gaXRlbS50eXBlO1xuICAgICAgICB0aGlzLmNvdW50cnkgPSBpdGVtLmNvdW50cnk7XG4gICAgICAgIHRoaXMudXN0aWQgPSBpdGVtLnVzdGlkO1xuICAgIH07XG4gICAgQWRkcmVzcy5wcm90b3R5cGUucGFyc2VGcm9tRm9ybURhdGEgPSBmdW5jdGlvbiAoZm9ybWRhdGEpIHtcbiAgICAgICAgdGhpcy5lbWFpbCA9IGZvcm1kYXRhLmVtYWlsO1xuICAgICAgICB0aGlzLmNvbXBhbnkgPSBmb3JtZGF0YS5jb21wYW55O1xuICAgICAgICB0aGlzLmZpcnN0bmFtZSA9IGZvcm1kYXRhLmZpcnN0bmFtZTtcbiAgICAgICAgdGhpcy5sYXN0bmFtZSA9IGZvcm1kYXRhLmxhc3RuYW1lO1xuICAgICAgICB0aGlzLnN0cmVldCA9IGZvcm1kYXRhLnN0cmVldDtcbiAgICAgICAgdGhpcy5ob3VzZU51bWJlciA9IGZvcm1kYXRhLmhvdXNlTnVtYmVyO1xuICAgICAgICB0aGlzLnppcCA9IGZvcm1kYXRhLnppcDtcbiAgICAgICAgdGhpcy5jaXR5ID0gZm9ybWRhdGEuY2l0eTtcbiAgICAgICAgdGhpcy5waG9uZSA9IGZvcm1kYXRhLnBob25lO1xuICAgICAgICB0aGlzLmNvdW50cnkgPSBmb3JtZGF0YS5jb3VudHJ5O1xuICAgICAgICB0aGlzLnVzdGlkID0gZm9ybWRhdGEudXN0aWQ7XG4gICAgfTtcbiAgICByZXR1cm4gQWRkcmVzcztcbn0oKSk7XG5leHBvcnRzLkFkZHJlc3MgPSBBZGRyZXNzO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuZXhwb3J0cy5Db250YWN0ID0gZXhwb3J0cy5MYXlvdXRlckRhdGEgPSB2b2lkIDA7XG52YXIgTGF5b3V0ZXJEYXRhID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIExheW91dGVyRGF0YSgpIHtcbiAgICAgICAgdGhpcy5maXJzdG5hbWUgPSBcIlwiO1xuICAgICAgICB0aGlzLmNvbXBhbnkgPSBcIlwiO1xuICAgICAgICB0aGlzLmxhc3RuYW1lID0gXCJcIjtcbiAgICAgICAgdGhpcy5zdHJlZXQgPSBcIlwiO1xuICAgICAgICB0aGlzLmhvdXNlTnVtYmVyID0gXCJcIjtcbiAgICAgICAgdGhpcy56aXAgPSBcIlwiO1xuICAgICAgICB0aGlzLmNpdHkgPSBcIlwiO1xuICAgICAgICB0aGlzLnBob25lID0gXCJcIjtcbiAgICAgICAgdGhpcy5jb3VudHJ5ID0gXCJcIjtcbiAgICAgICAgdGhpcy51c3RpZCA9IFwiXCI7XG4gICAgfVxuICAgIHJldHVybiBMYXlvdXRlckRhdGE7XG59KCkpO1xuZXhwb3J0cy5MYXlvdXRlckRhdGEgPSBMYXlvdXRlckRhdGE7XG52YXIgQ29udGFjdCA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBDb250YWN0KCkge1xuICAgICAgICB0aGlzLnVpZCA9IDA7XG4gICAgICAgIHRoaXMudXVpZCA9IFwiXCI7XG4gICAgICAgIHRoaXMudXNlcm5hbWUgPSBcIlwiO1xuICAgICAgICB0aGlzLmVtYWlsID0gXCJcIjtcbiAgICAgICAgdGhpcy5wYXNzd29yZCA9IFwiXCI7XG4gICAgICAgIHRoaXMuc2hvcHMgPSBbXTtcbiAgICAgICAgdGhpcy5sYXlvdXRlcl9kYXRhID0gbmV3IExheW91dGVyRGF0YSgpO1xuICAgIH1cbiAgICBDb250YWN0LnByb3RvdHlwZS5wYXJzZUZyb21Kc29uID0gZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgICAgdGhpcy51aWQgPSBpdGVtLmNvbnRhY3QudWlkO1xuICAgICAgICB0aGlzLnV1aWQgPSBpdGVtLmNvbnRhY3QudXVpZDtcbiAgICAgICAgdGhpcy5lbWFpbCA9IGl0ZW0uY29udGFjdC5lbWFpbDtcbiAgICAgICAgdGhpcy51c2VybmFtZSA9IGl0ZW0uY29udGFjdC51c2VybmFtZTtcbiAgICAgICAgdGhpcy5sYXlvdXRlcl9kYXRhLmZpcnN0bmFtZSA9IGl0ZW0uY29udGFjdC5sYXlvdXRlcl9kYXRhLmZpcnN0bmFtZTtcbiAgICAgICAgdGhpcy5sYXlvdXRlcl9kYXRhLmNvbXBhbnkgPSBpdGVtLmNvbnRhY3QubGF5b3V0ZXJfZGF0YS5jb21wYW55O1xuICAgICAgICB0aGlzLmxheW91dGVyX2RhdGEubGFzdG5hbWUgPSBpdGVtLmNvbnRhY3QubGF5b3V0ZXJfZGF0YS5sYXN0bmFtZTtcbiAgICAgICAgdGhpcy5sYXlvdXRlcl9kYXRhLnN0cmVldCA9IGl0ZW0uY29udGFjdC5sYXlvdXRlcl9kYXRhLnN0cmVldDtcbiAgICAgICAgdGhpcy5sYXlvdXRlcl9kYXRhLmhvdXNlTnVtYmVyID0gaXRlbS5jb250YWN0LmxheW91dGVyX2RhdGEuaG91c2VOdW1iZXI7XG4gICAgICAgIHRoaXMubGF5b3V0ZXJfZGF0YS56aXAgPSBpdGVtLmNvbnRhY3QubGF5b3V0ZXJfZGF0YS56aXA7XG4gICAgICAgIHRoaXMubGF5b3V0ZXJfZGF0YS5jaXR5ID0gaXRlbS5jb250YWN0LmxheW91dGVyX2RhdGEuY2l0eTtcbiAgICAgICAgdGhpcy5sYXlvdXRlcl9kYXRhLnBob25lID0gaXRlbS5jb250YWN0LmxheW91dGVyX2RhdGEucGhvbmU7XG4gICAgICAgIHRoaXMubGF5b3V0ZXJfZGF0YS5jb3VudHJ5ID0gaXRlbS5jb250YWN0LmxheW91dGVyX2RhdGEuY291bnRyeTtcbiAgICAgICAgdGhpcy5sYXlvdXRlcl9kYXRhLnVzdGlkID0gaXRlbS5jb250YWN0LmxheW91dGVyX2RhdGEudXN0aWQ7XG4gICAgfTtcbiAgICBDb250YWN0LnByb3RvdHlwZS5wYXJzZUZyb21Gb3JtRGF0YSA9IGZ1bmN0aW9uIChmb3JtZGF0YSwgc2hvcCkge1xuICAgICAgICBpZiAoc2hvcCA9PT0gdm9pZCAwKSB7IHNob3AgPSBudWxsOyB9XG4gICAgICAgIHRoaXMuZW1haWwgPSBmb3JtZGF0YS5lbWFpbDtcbiAgICAgICAgdGhpcy5sYXlvdXRlcl9kYXRhLmNvbXBhbnkgPSBmb3JtZGF0YS5jb21wYW55O1xuICAgICAgICB0aGlzLmxheW91dGVyX2RhdGEuZmlyc3RuYW1lID0gZm9ybWRhdGEuZmlyc3RuYW1lO1xuICAgICAgICB0aGlzLmxheW91dGVyX2RhdGEubGFzdG5hbWUgPSBmb3JtZGF0YS5sYXN0bmFtZTtcbiAgICAgICAgdGhpcy5sYXlvdXRlcl9kYXRhLnN0cmVldCA9IGZvcm1kYXRhLnN0cmVldDtcbiAgICAgICAgdGhpcy5sYXlvdXRlcl9kYXRhLmhvdXNlTnVtYmVyID0gZm9ybWRhdGEuaG91c2VOdW1iZXI7XG4gICAgICAgIHRoaXMubGF5b3V0ZXJfZGF0YS56aXAgPSBmb3JtZGF0YS56aXA7XG4gICAgICAgIHRoaXMubGF5b3V0ZXJfZGF0YS5jaXR5ID0gZm9ybWRhdGEuY2l0eTtcbiAgICAgICAgdGhpcy5sYXlvdXRlcl9kYXRhLnBob25lID0gZm9ybWRhdGEucGhvbmU7XG4gICAgICAgIHRoaXMubGF5b3V0ZXJfZGF0YS5jb3VudHJ5ID0gZm9ybWRhdGEuY291bnRyeTtcbiAgICAgICAgdGhpcy5sYXlvdXRlcl9kYXRhLnVzdGlkID0gZm9ybWRhdGEudXN0aWQ7XG4gICAgICAgIGlmIChzaG9wKSB7XG4gICAgICAgICAgICB0aGlzLnNob3BzLnB1c2goc2hvcCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiBDb250YWN0O1xufSgpKTtcbmV4cG9ydHMuQ29udGFjdCA9IENvbnRhY3Q7XG4iLCJcInVzZSBzdHJpY3RcIjtcbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5leHBvcnRzLkNvdW50cnkgPSB2b2lkIDA7XG52YXIgQ291bnRyeSA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBDb3VudHJ5KCkge1xuICAgICAgICB0aGlzLnV1aWQgPSBcIlwiO1xuICAgICAgICB0aGlzLnRpdGxlID0gXCJcIjtcbiAgICAgICAgdGhpcy5jb2RlID0gXCJcIjtcbiAgICAgICAgdGhpcy51c2VWYXRXaXRoVXN0SWQgPSB0cnVlO1xuICAgICAgICB0aGlzLnVzZVZhdFdpdGhvdXRVc3RJZCA9IHRydWU7XG4gICAgfVxuICAgIENvdW50cnkucHJvdG90eXBlLnBhcnNlRnJvbUpzb24gPSBmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgICB0aGlzLnV1aWQgPSBpdGVtLnV1aWQ7XG4gICAgICAgIHRoaXMudGl0bGUgPSBpdGVtLnRpdGxlO1xuICAgICAgICB0aGlzLmNvZGUgPSBpdGVtLmNvZGU7XG4gICAgICAgIHRoaXMudXNlVmF0V2l0aFVzdElkID0gaXRlbS51c2VWYXRXaXRoVXN0SWQ7XG4gICAgICAgIHRoaXMudXNlVmF0V2l0aG91dFVzdElkID0gaXRlbS51c2VWYXRXaXRob3V0VXN0SWQ7XG4gICAgfTtcbiAgICByZXR1cm4gQ291bnRyeTtcbn0oKSk7XG5leHBvcnRzLkNvdW50cnkgPSBDb3VudHJ5O1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuZXhwb3J0cy5PcmRlciA9IHZvaWQgMDtcbnZhciB1dWlkXzEgPSByZXF1aXJlKFwidXVpZFwiKTtcbnZhciBjb250YWN0XzEgPSByZXF1aXJlKFwiLi9jb250YWN0XCIpO1xudmFyIGFjY291bnRfMSA9IHJlcXVpcmUoXCIuL2FjY291bnRcIik7XG52YXIgYWRkcmVzc18xID0gcmVxdWlyZShcIi4vYWRkcmVzc1wiKTtcbnZhciBwb3NfMSA9IHJlcXVpcmUoXCIuL3Bvc1wiKTtcbnZhciBwYXltZW50XzEgPSByZXF1aXJlKFwiLi9wYXltZW50XCIpO1xudmFyIHNoaXBwaW5nXzEgPSByZXF1aXJlKFwiLi9zaGlwcGluZ1wiKTtcbnZhciBzaG9wXzEgPSByZXF1aXJlKFwiLi9zaG9wXCIpO1xudmFyIE9yZGVyID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIE9yZGVyKCkge1xuICAgICAgICB0aGlzLmNvbnRhY3QgPSBuZXcgY29udGFjdF8xLkNvbnRhY3QoKTtcbiAgICAgICAgdGhpcy5hY2NvdW50ID0gbmV3IGFjY291bnRfMS5BY2NvdW50KCk7XG4gICAgICAgIHRoaXMuZGVsaXZlcnlBZGRyZXNzID0gbmV3IGFkZHJlc3NfMS5BZGRyZXNzKCk7XG4gICAgICAgIHRoaXMuc2VuZGVyQWRkcmVzcyA9IG5ldyBhZGRyZXNzXzEuQWRkcmVzcygpO1xuICAgICAgICB0aGlzLmludm9pY2VBZGRyZXNzID0gbmV3IGFkZHJlc3NfMS5BZGRyZXNzKCk7XG4gICAgICAgIHRoaXMucG9zaXRpb25zID0gW107XG4gICAgICAgIHRoaXMucGF5bWVudCA9IG5ldyBwYXltZW50XzEuUGF5bWVudCgpO1xuICAgICAgICB0aGlzLnNoaXBwaW5nID0gbmV3IHNoaXBwaW5nXzEuU2hpcHBpbmcoKTtcbiAgICAgICAgdGhpcy5zaG9wID0gbmV3IHNob3BfMS5TaG9wKCk7XG4gICAgICAgIHRoaXMudXVpZCA9ICgwLCB1dWlkXzEudjQpKCk7XG4gICAgICAgIHRoaXMuYmFza2V0RmllbGQxID0gXCJcIjtcbiAgICAgICAgdGhpcy5iYXNrZXRGaWVsZDIgPSBcIlwiO1xuICAgICAgICB0aGlzLmRyYWZ0ID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5zYXZlZCA9IGZhbHNlO1xuICAgIH1cbiAgICBPcmRlci5wcm90b3R5cGUuYWRkUG9zaXRpb24gPSBmdW5jdGlvbiAocG9zKSB7XG4gICAgICAgIHRoaXMucG9zaXRpb25zLnB1c2gocG9zKTtcbiAgICB9O1xuICAgIE9yZGVyLnByb3RvdHlwZS5wYXJzZUZyb21Kc29uID0gZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgdGhpcy5zaG9wLnBhcnNlRnJvbUpzb24oaXRlbSk7XG4gICAgICAgIHRoaXMuY29udGFjdC5wYXJzZUZyb21Kc29uKGl0ZW0pO1xuICAgICAgICB0aGlzLmFjY291bnQucGFyc2VGcm9tSnNvbihpdGVtKTtcbiAgICAgICAgdGhpcy5zaGlwcGluZy5wYXJzZUZyb21Kc29uKGl0ZW0pO1xuICAgICAgICB0aGlzLnBheW1lbnQucGFyc2VGcm9tSnNvbihpdGVtKTtcbiAgICAgICAgdGhpcy5pbnZvaWNlQWRkcmVzcy5wYXJzZUZyb21Kc29uKGl0ZW0uaW52b2ljZUFkZHJlc3MpO1xuICAgICAgICB0aGlzLmRlbGl2ZXJ5QWRkcmVzcy5wYXJzZUZyb21Kc29uKGl0ZW0uZGVsaXZlcnlBZGRyZXNzKTtcbiAgICAgICAgdGhpcy5zZW5kZXJBZGRyZXNzLnBhcnNlRnJvbUpzb24oaXRlbS5zZW5kZXJBZGRyZXNzKTtcbiAgICAgICAgdGhpcy5hbGlhcyA9IGl0ZW0uYWxpYXM7XG4gICAgICAgIHRoaXMudXVpZCA9IGl0ZW0udXVpZDtcbiAgICAgICAgdGhpcy50eXBlID0gaXRlbS50eXBlO1xuICAgICAgICB0aGlzLmRyYWZ0ID0gaXRlbS5kcmFmdDtcbiAgICAgICAgdGhpcy5zYXZlZCA9IHRydWU7XG4gICAgICAgIHRoaXMuYmFza2V0RmllbGQxID0gaXRlbS5iYXNrZXRGaWVsZDE7XG4gICAgICAgIHRoaXMuYmFza2V0RmllbGQyID0gaXRlbS5iYXNrZXRGaWVsZDI7XG4gICAgICAgIGl0ZW0ucG9zaXRpb25zLm1hcChmdW5jdGlvbiAoZSkge1xuICAgICAgICAgICAgdmFyIHBvcyA9IG5ldyBwb3NfMS5Qb3MoKTtcbiAgICAgICAgICAgIHBvcy5wYXJzZUZyb21Kc29uKGUpO1xuICAgICAgICAgICAgX3RoaXMucG9zaXRpb25zLnB1c2gocG9zKTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICByZXR1cm4gT3JkZXI7XG59KCkpO1xuZXhwb3J0cy5PcmRlciA9IE9yZGVyO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuZXhwb3J0cy5QYXltZW50ID0gdm9pZCAwO1xudmFyIFBheW1lbnQgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gUGF5bWVudCgpIHtcbiAgICAgICAgdGhpcy51aWQgPSAwO1xuICAgICAgICB0aGlzLnRpdGxlID0gXCJcIjtcbiAgICAgICAgdGhpcy51dWlkID0gXCJcIjtcbiAgICB9XG4gICAgUGF5bWVudC5wcm90b3R5cGUucGFyc2VGcm9tSnNvbiA9IGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICAgIHRoaXMudWlkID0gaXRlbS5wYXltZW50LnVpZDtcbiAgICAgICAgdGhpcy50aXRsZSA9IGl0ZW0ucGF5bWVudC50aXRsZTtcbiAgICAgICAgdGhpcy51dWlkID0gU3RyaW5nKGl0ZW0ucGF5bWVudC51dWlkKTtcbiAgICB9O1xuICAgIHJldHVybiBQYXltZW50O1xufSgpKTtcbmV4cG9ydHMuUGF5bWVudCA9IFBheW1lbnQ7XG4iLCJcInVzZSBzdHJpY3RcIjtcbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5leHBvcnRzLlBvcyA9IHZvaWQgMDtcbnZhciB1dWlkXzEgPSByZXF1aXJlKFwidXVpZFwiKTtcbnZhciBwcm9kdWN0XzEgPSByZXF1aXJlKFwiLi9wcm9kdWN0XCIpO1xudmFyIHByaWNlXzEgPSByZXF1aXJlKFwiLi9wcmljZVwiKTtcbnZhciBQb3MgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gUG9zKCkge1xuICAgICAgICB0aGlzLnV1aWQgPSBcIlwiO1xuICAgICAgICB0aGlzLnByb2R1Y3QgPSBuZXcgcHJvZHVjdF8xLlByb2R1Y3QoKTtcbiAgICAgICAgdGhpcy5zdGF0dXMgPSAxMDtcbiAgICAgICAgdGhpcy5jb3VudCA9IDE7XG4gICAgICAgIHRoaXMucHJpY2UgPSBuZXcgcHJpY2VfMS5QcmljZSgpO1xuICAgICAgICB0aGlzLnV1aWQgPSAoMCwgdXVpZF8xLnY0KSgpO1xuICAgIH1cbiAgICBQb3MucHJvdG90eXBlLnBhcnNlRnJvbUpzb24gPSBmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgICB0aGlzLmNvdW50ID0gaXRlbS5wcmljZS5jb3VudDtcbiAgICAgICAgdGhpcy5zdGF0dXMgPSBpdGVtLnN0YXR1cztcbiAgICAgICAgdGhpcy51dWlkID0gaXRlbS51dWlkO1xuICAgICAgICB0aGlzLnByaWNlLnBhcnNlRnJvbUpzb24oaXRlbS5wcmljZSk7XG4gICAgICAgIHRoaXMucHJvZHVjdC5wYXJzZUZyb21Kc29uKGl0ZW0ucHJvZHVjdCk7XG4gICAgfTtcbiAgICByZXR1cm4gUG9zO1xufSgpKTtcbmV4cG9ydHMuUG9zID0gUG9zO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuZXhwb3J0cy5QcmljZSA9IHZvaWQgMDtcbnZhciBQcmljZSA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBQcmljZSgpIHtcbiAgICAgICAgdGhpcy5uZXQgPSAwO1xuICAgICAgICB0aGlzLnZhdCA9IDA7XG4gICAgICAgIHRoaXMuZ3Jvc3MgPSAwO1xuICAgICAgICB0aGlzLmFsbE5ldCA9IDA7XG4gICAgICAgIHRoaXMuYWxsVmF0ID0gMDtcbiAgICAgICAgdGhpcy5hbGxHcm9zcyA9IDA7XG4gICAgfVxuICAgIFByaWNlLnByb3RvdHlwZS5wYXJzZUZyb21Kc29uID0gZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgICAgdGhpcy5uZXQgPSBpdGVtLm5ldDtcbiAgICAgICAgdGhpcy52YXQgPSBpdGVtLnZhdDtcbiAgICAgICAgdGhpcy5ncm9zcyA9IGl0ZW0uZ3Jvc3M7XG4gICAgICAgIHRoaXMuYWxsTmV0ID0gaXRlbS5hbGxOZXQ7XG4gICAgICAgIHRoaXMuYWxsVmF0ID0gaXRlbS5hbGxWYXQ7XG4gICAgICAgIHRoaXMuYWxsR3Jvc3MgPSBpdGVtLmFsbEdyb3NzO1xuICAgIH07XG4gICAgcmV0dXJuIFByaWNlO1xufSgpKTtcbmV4cG9ydHMuUHJpY2UgPSBQcmljZTtcbiIsIlwidXNlIHN0cmljdFwiO1xuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbmV4cG9ydHMuUHJvZHVjdCA9IGV4cG9ydHMuU3BlY2lhbFByb2R1Y3RUeXBlT2JqZWN0ID0gdm9pZCAwO1xudmFyIFNwZWNpYWxQcm9kdWN0VHlwZU9iamVjdCA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBTcGVjaWFsUHJvZHVjdFR5cGVPYmplY3QoKSB7XG4gICAgICAgIHRoaXMucGFyYW1zID0gW107XG4gICAgICAgIHRoaXMudHlwID0gMDtcbiAgICB9XG4gICAgU3BlY2lhbFByb2R1Y3RUeXBlT2JqZWN0LnByb3RvdHlwZS5wYXJzZUZyb21Kc29uID0gZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgICAgdGhpcy50eXAgPSBpdGVtLnR5cDtcbiAgICAgICAgdGhpcy5wYXJhbXMgPSBpdGVtLnBhcmFtcztcbiAgICB9O1xuICAgIHJldHVybiBTcGVjaWFsUHJvZHVjdFR5cGVPYmplY3Q7XG59KCkpO1xuZXhwb3J0cy5TcGVjaWFsUHJvZHVjdFR5cGVPYmplY3QgPSBTcGVjaWFsUHJvZHVjdFR5cGVPYmplY3Q7XG52YXIgUHJvZHVjdCA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBQcm9kdWN0KCkge1xuICAgICAgICB0aGlzLmlkID0gMDtcbiAgICAgICAgdGhpcy50aXRsZSA9IFwiXCI7XG4gICAgICAgIHRoaXMudXVpZCA9IFwiXCI7XG4gICAgICAgIHRoaXMuc3BlY2lhbFByb2R1Y3RUeXBlT2JqZWN0ID0gbmV3IFNwZWNpYWxQcm9kdWN0VHlwZU9iamVjdCgpO1xuICAgIH1cbiAgICBQcm9kdWN0LnByb3RvdHlwZS5wYXJzZUZyb21Kc29uID0gZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgICAgdGhpcy5pZCA9IGl0ZW0uaWQ7XG4gICAgICAgIHRoaXMudGl0bGUgPSBpdGVtLnRpdGxlO1xuICAgICAgICB0aGlzLnV1aWQgPSBpdGVtLnV1aWQ7XG4gICAgICAgIHRoaXMuc3BlY2lhbFByb2R1Y3RUeXBlT2JqZWN0LnBhcnNlRnJvbUpzb24oaXRlbS5zcGVjaWFsUHJvZHVjdFR5cGVPYmplY3QpO1xuICAgIH07XG4gICAgcmV0dXJuIFByb2R1Y3Q7XG59KCkpO1xuZXhwb3J0cy5Qcm9kdWN0ID0gUHJvZHVjdDtcbiIsIlwidXNlIHN0cmljdFwiO1xuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbmV4cG9ydHMuUHJvZHVjdEdyb3VwID0gdm9pZCAwO1xudmFyIFByb2R1Y3RHcm91cCA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBQcm9kdWN0R3JvdXAoKSB7XG4gICAgICAgIHRoaXMuaWQgPSAwO1xuICAgICAgICB0aGlzLmxhYmVsID0gXCJcIjtcbiAgICAgICAgdGhpcy51dWlkID0gXCJcIjtcbiAgICAgICAgLy9vcHRpb25zOiBQcm9kdWN0R3JvdXBbXSA9IFtdXG4gICAgfVxuICAgIHJldHVybiBQcm9kdWN0R3JvdXA7XG59KCkpO1xuZXhwb3J0cy5Qcm9kdWN0R3JvdXAgPSBQcm9kdWN0R3JvdXA7XG4iLCJcInVzZSBzdHJpY3RcIjtcbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5leHBvcnRzLlNoaXBwaW5nID0gdm9pZCAwO1xudmFyIFNoaXBwaW5nID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIFNoaXBwaW5nKCkge1xuICAgICAgICB0aGlzLnVpZCA9IDA7XG4gICAgICAgIHRoaXMudGl0bGUgPSBcIlwiO1xuICAgICAgICB0aGlzLnV1aWQgPSBcIlwiO1xuICAgIH1cbiAgICBTaGlwcGluZy5wcm90b3R5cGUucGFyc2VGcm9tSnNvbiA9IGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICAgIHRoaXMudWlkID0gaXRlbS5zaGlwcGluZy51aWQ7XG4gICAgICAgIHRoaXMudGl0bGUgPSBpdGVtLnNoaXBwaW5nLnRpdGxlO1xuICAgICAgICB0aGlzLnV1aWQgPSBTdHJpbmcoaXRlbS5zaGlwcGluZy51dWlkKTtcbiAgICB9O1xuICAgIHJldHVybiBTaGlwcGluZztcbn0oKSk7XG5leHBvcnRzLlNoaXBwaW5nID0gU2hpcHBpbmc7XG4iLCJcInVzZSBzdHJpY3RcIjtcbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5leHBvcnRzLlNob3AgPSB2b2lkIDA7XG52YXIgU2hvcCA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBTaG9wKCkge1xuICAgICAgICB0aGlzLmlkID0gMDtcbiAgICAgICAgdGhpcy5uYW1lID0gXCJcIjtcbiAgICAgICAgdGhpcy51dWlkID0gXCJcIjtcbiAgICAgICAgdGhpcy5iYXNrZXRGaWVsZDEgPSBcIlwiO1xuICAgICAgICB0aGlzLmJhc2tldEZpZWxkMiA9IFwiXCI7XG4gICAgICAgIHRoaXMuYmFza2V0UG9zRmllbGQxID0gXCJcIjtcbiAgICAgICAgdGhpcy5iYXNrZXRQb3NGaWVsZDIgPSBcIlwiO1xuICAgIH1cbiAgICBTaG9wLnByb3RvdHlwZS5wYXJzZUZyb21Kc29uID0gZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgICAgdGhpcy5pZCA9IGl0ZW0uc2hvcC5pZDtcbiAgICAgICAgdGhpcy5uYW1lID0gaXRlbS5zaG9wLm5hbWU7XG4gICAgICAgIHRoaXMudXVpZCA9IGl0ZW0uc2hvcC51dWlkO1xuICAgICAgICB0aGlzLmJhc2tldEZpZWxkMSA9IGl0ZW0uc2hvcC5iYXNrZXRGaWVsZDE7XG4gICAgICAgIHRoaXMuYmFza2V0RmllbGQyID0gaXRlbS5zaG9wLmJhc2tldEZpZWxkMjtcbiAgICAgICAgdGhpcy5iYXNrZXRQb3NGaWVsZDEgPSBpdGVtLnNob3AuYmFza2V0UG9zRmllbGQxO1xuICAgICAgICB0aGlzLmJhc2tldFBvc0ZpZWxkMiA9IGl0ZW0uc2hvcC5iYXNrZXRQb3NGaWVsZDI7XG4gICAgfTtcbiAgICByZXR1cm4gU2hvcDtcbn0oKSk7XG5leHBvcnRzLlNob3AgPSBTaG9wO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19jcmVhdGVCaW5kaW5nID0gKHRoaXMgJiYgdGhpcy5fX2NyZWF0ZUJpbmRpbmcpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICB2YXIgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobSwgayk7XG4gICAgaWYgKCFkZXNjIHx8IChcImdldFwiIGluIGRlc2MgPyAhbS5fX2VzTW9kdWxlIDogZGVzYy53cml0YWJsZSB8fCBkZXNjLmNvbmZpZ3VyYWJsZSkpIHtcbiAgICAgIGRlc2MgPSB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24oKSB7IHJldHVybiBtW2tdOyB9IH07XG4gICAgfVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBrMiwgZGVzYyk7XG59KSA6IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgb1trMl0gPSBtW2tdO1xufSkpO1xudmFyIF9fc2V0TW9kdWxlRGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19zZXRNb2R1bGVEZWZhdWx0KSB8fCAoT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCB2KSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIFwiZGVmYXVsdFwiLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2IH0pO1xufSkgOiBmdW5jdGlvbihvLCB2KSB7XG4gICAgb1tcImRlZmF1bHRcIl0gPSB2O1xufSk7XG52YXIgX19pbXBvcnRTdGFyID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydFN0YXIpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICBpZiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSByZXR1cm4gbW9kO1xuICAgIHZhciByZXN1bHQgPSB7fTtcbiAgICBpZiAobW9kICE9IG51bGwpIGZvciAodmFyIGsgaW4gbW9kKSBpZiAoayAhPT0gXCJkZWZhdWx0XCIgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1vZCwgaykpIF9fY3JlYXRlQmluZGluZyhyZXN1bHQsIG1vZCwgayk7XG4gICAgX19zZXRNb2R1bGVEZWZhdWx0KHJlc3VsdCwgbW9kKTtcbiAgICByZXR1cm4gcmVzdWx0O1xufTtcbnZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gICAgfSk7XG59O1xudmFyIF9fZ2VuZXJhdG9yID0gKHRoaXMgJiYgdGhpcy5fX2dlbmVyYXRvcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIGJvZHkpIHtcbiAgICB2YXIgXyA9IHsgbGFiZWw6IDAsIHNlbnQ6IGZ1bmN0aW9uKCkgeyBpZiAodFswXSAmIDEpIHRocm93IHRbMV07IHJldHVybiB0WzFdOyB9LCB0cnlzOiBbXSwgb3BzOiBbXSB9LCBmLCB5LCB0LCBnO1xuICAgIHJldHVybiBnID0geyBuZXh0OiB2ZXJiKDApLCBcInRocm93XCI6IHZlcmIoMSksIFwicmV0dXJuXCI6IHZlcmIoMikgfSwgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIChnW1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbigpIHsgcmV0dXJuIHRoaXM7IH0pLCBnO1xuICAgIGZ1bmN0aW9uIHZlcmIobikgeyByZXR1cm4gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIHN0ZXAoW24sIHZdKTsgfTsgfVxuICAgIGZ1bmN0aW9uIHN0ZXAob3ApIHtcbiAgICAgICAgaWYgKGYpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuXCIpO1xuICAgICAgICB3aGlsZSAoXykgdHJ5IHtcbiAgICAgICAgICAgIGlmIChmID0gMSwgeSAmJiAodCA9IG9wWzBdICYgMiA/IHlbXCJyZXR1cm5cIl0gOiBvcFswXSA/IHlbXCJ0aHJvd1wiXSB8fCAoKHQgPSB5W1wicmV0dXJuXCJdKSAmJiB0LmNhbGwoeSksIDApIDogeS5uZXh0KSAmJiAhKHQgPSB0LmNhbGwoeSwgb3BbMV0pKS5kb25lKSByZXR1cm4gdDtcbiAgICAgICAgICAgIGlmICh5ID0gMCwgdCkgb3AgPSBbb3BbMF0gJiAyLCB0LnZhbHVlXTtcbiAgICAgICAgICAgIHN3aXRjaCAob3BbMF0pIHtcbiAgICAgICAgICAgICAgICBjYXNlIDA6IGNhc2UgMTogdCA9IG9wOyBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIDQ6IF8ubGFiZWwrKzsgcmV0dXJuIHsgdmFsdWU6IG9wWzFdLCBkb25lOiBmYWxzZSB9O1xuICAgICAgICAgICAgICAgIGNhc2UgNTogXy5sYWJlbCsrOyB5ID0gb3BbMV07IG9wID0gWzBdOyBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBjYXNlIDc6IG9wID0gXy5vcHMucG9wKCk7IF8udHJ5cy5wb3AoKTsgY29udGludWU7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEodCA9IF8udHJ5cywgdCA9IHQubGVuZ3RoID4gMCAmJiB0W3QubGVuZ3RoIC0gMV0pICYmIChvcFswXSA9PT0gNiB8fCBvcFswXSA9PT0gMikpIHsgXyA9IDA7IGNvbnRpbnVlOyB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gMyAmJiAoIXQgfHwgKG9wWzFdID4gdFswXSAmJiBvcFsxXSA8IHRbM10pKSkgeyBfLmxhYmVsID0gb3BbMV07IGJyZWFrOyB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gNiAmJiBfLmxhYmVsIDwgdFsxXSkgeyBfLmxhYmVsID0gdFsxXTsgdCA9IG9wOyBicmVhazsgfVxuICAgICAgICAgICAgICAgICAgICBpZiAodCAmJiBfLmxhYmVsIDwgdFsyXSkgeyBfLmxhYmVsID0gdFsyXTsgXy5vcHMucHVzaChvcCk7IGJyZWFrOyB9XG4gICAgICAgICAgICAgICAgICAgIGlmICh0WzJdKSBfLm9wcy5wb3AoKTtcbiAgICAgICAgICAgICAgICAgICAgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG9wID0gYm9keS5jYWxsKHRoaXNBcmcsIF8pO1xuICAgICAgICB9IGNhdGNoIChlKSB7IG9wID0gWzYsIGVdOyB5ID0gMDsgfSBmaW5hbGx5IHsgZiA9IHQgPSAwOyB9XG4gICAgICAgIGlmIChvcFswXSAmIDUpIHRocm93IG9wWzFdOyByZXR1cm4geyB2YWx1ZTogb3BbMF0gPyBvcFsxXSA6IHZvaWQgMCwgZG9uZTogdHJ1ZSB9O1xuICAgIH1cbn07XG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xudmFyIGpzeF9ydW50aW1lXzEgPSByZXF1aXJlKFwicmVhY3QvanN4LXJ1bnRpbWVcIik7XG52YXIgcmVhY3Rfc2VsZWN0X2FzeW5jX3BhZ2luYXRlXzEgPSByZXF1aXJlKFwicmVhY3Qtc2VsZWN0LWFzeW5jLXBhZ2luYXRlXCIpO1xudmFyIGFjY291bnRfMSA9IHJlcXVpcmUoXCIuLi8uLi9zZXJ2aWNlcy9hY2NvdW50XCIpO1xudmFyIHRzeXJpbmdlXzEgPSByZXF1aXJlKFwidHN5cmluZ2VcIik7XG52YXIgb3JkZXJfMSA9IHJlcXVpcmUoXCIuLi8uLi9zdGF0ZS9vcmRlclwiKTtcbnZhciByZWFjdF8xID0gcmVxdWlyZShcInJlYWN0XCIpO1xudmFyIFByb3BUeXBlcyA9IF9faW1wb3J0U3RhcihyZXF1aXJlKFwicHJvcC10eXBlc1wiKSk7XG52YXIgc2hvcF8xID0gcmVxdWlyZShcIi4uLy4uL21vZGVsL3Nob3BcIik7XG52YXIgb3JkZXJfMiA9IHJlcXVpcmUoXCIuLi8uLi9tb2RlbC9vcmRlclwiKTtcbnZhciBTZWxlY3RMYWJlbF8xID0gcmVxdWlyZShcIi4uL2Jhc2UvU2VsZWN0TGFiZWxcIik7XG52YXIgQWNjb3VudFNlbGVjdENvbXBvbmVudCA9IGZ1bmN0aW9uIChfYSkge1xuICAgIHZhciBzaG9wID0gX2Euc2hvcCwgb3JkZXIgPSBfYS5vcmRlcjtcbiAgICB2YXIgX2IgPSAoMCwgcmVhY3RfMS51c2VTdGF0ZSkobnVsbCksIHNob3BVdWlkID0gX2JbMF0sIHNldFNob3BVdWlkID0gX2JbMV07XG4gICAgdmFyIF9jID0gKDAsIHJlYWN0XzEudXNlU3RhdGUpKDApLCBhY2NvdW50ID0gX2NbMF0sIHNldEFjY291bnQgPSBfY1sxXTtcbiAgICAoMCwgcmVhY3RfMS51c2VFZmZlY3QpKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgc2V0U2hvcFV1aWQoc2hvcC51dWlkKTtcbiAgICB9LCBbc2hvcC51dWlkXSk7XG4gICAgdmFyIG9yZGVyU3RhdGUgPSB0c3lyaW5nZV8xLmNvbnRhaW5lci5yZXNvbHZlKG9yZGVyXzEuT3JkZXJTdGF0ZSk7XG4gICAgdmFyIGxvYWRPcHRpb25zID0gZnVuY3Rpb24gKHNlYXJjaFF1ZXJ5LCBsb2FkZWRPcHRpb25zKSB7IHJldHVybiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgYWNjb3VudF9zZXJ2aWNlLCBkYXRhO1xuICAgICAgICByZXR1cm4gX19nZW5lcmF0b3IodGhpcywgZnVuY3Rpb24gKF9hKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKF9hLmxhYmVsKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICBhY2NvdW50X3NlcnZpY2UgPSBuZXcgYWNjb3VudF8xLkFjY291bnRTZXJ2aWNlKCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbNCAvKnlpZWxkKi8sIGFjY291bnRfc2VydmljZS5nZXRBY2NvdW50cyhzaG9wKV07XG4gICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICBkYXRhID0gX2Euc2VudCgpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzIgLypyZXR1cm4qLywge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnM6IGRhdGEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzTW9yZTogZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIH1dO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9KTsgfTtcbiAgICAoMCwgcmVhY3RfMS51c2VFZmZlY3QpKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgc2V0QWNjb3VudChvcmRlci5hY2NvdW50LnV1aWQpO1xuICAgIH0sIFtvcmRlci5hY2NvdW50XSk7XG4gICAgdmFyIG9uQ2hhbmdlID0gZnVuY3Rpb24gKG9wdGlvbikge1xuICAgICAgICBvcmRlci5hY2NvdW50ID0gb3B0aW9uO1xuICAgICAgICB2YXIgb3JkZXJPYmogPSBvcmRlclN0YXRlLmdldEN1cnJlbnRPcmRlcigpLmdldFZhbHVlKCk7XG4gICAgICAgIG9yZGVyT2JqLmFjY291bnQgPSBvcHRpb247XG4gICAgICAgIG9yZGVyU3RhdGUuc2V0Q3VycmVudE9yZGVyKG9yZGVyT2JqKTtcbiAgICAgICAgc2V0QWNjb3VudChvcHRpb24udWlkKTtcbiAgICB9O1xuICAgIHJldHVybiAoKDAsIGpzeF9ydW50aW1lXzEuanN4KShyZWFjdF9zZWxlY3RfYXN5bmNfcGFnaW5hdGVfMS5Bc3luY1BhZ2luYXRlLCB7IGRlZmF1bHRPcHRpb25zOiB0cnVlLCBjbGFzc05hbWU6IFwiXCIuY29uY2F0KGFjY291bnQgPT0gMCA/IFwiYm9yZGVyIGJvcmRlci1kYW5nZXJcIiA6IFwiXCIpLCBkZWZhdWx0VmFsdWU6IG9yZGVyLmFjY291bnQsIGNvbXBvbmVudHM6IHsgQ29udHJvbDogU2VsZWN0TGFiZWxfMS5TZWxlY3RMYWJlbCB9LCBuYW1lOiAnRmlybWEnLCBsb2FkT3B0aW9uczogbG9hZE9wdGlvbnMsIHBsYWNlaG9sZGVyOiAnJywgZ2V0T3B0aW9uVmFsdWU6IGZ1bmN0aW9uIChvcHRpb24pIHsgcmV0dXJuIG9wdGlvbi51dWlkOyB9LCBnZXRPcHRpb25MYWJlbDogZnVuY3Rpb24gKG9wdGlvbikgeyByZXR1cm4gb3B0aW9uLnRpdGxlOyB9LCBvbkNoYW5nZTogb25DaGFuZ2UsIGlzU2VhcmNoYWJsZTogdHJ1ZSB9LCBKU09OLnN0cmluZ2lmeShzaG9wVXVpZCkpKTtcbn07XG5BY2NvdW50U2VsZWN0Q29tcG9uZW50LnByb3BUeXBlcyA9IHtcbiAgICBzaG9wOiBQcm9wVHlwZXMuaW5zdGFuY2VPZihzaG9wXzEuU2hvcCksXG4gICAgb3JkZXI6IFByb3BUeXBlcy5pbnN0YW5jZU9mKG9yZGVyXzIuT3JkZXIpXG59O1xuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBBY2NvdW50U2VsZWN0Q29tcG9uZW50O1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19hc3NpZ24gPSAodGhpcyAmJiB0aGlzLl9fYXNzaWduKSB8fCBmdW5jdGlvbiAoKSB7XG4gICAgX19hc3NpZ24gPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uKHQpIHtcbiAgICAgICAgZm9yICh2YXIgcywgaSA9IDEsIG4gPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbjsgaSsrKSB7XG4gICAgICAgICAgICBzID0gYXJndW1lbnRzW2ldO1xuICAgICAgICAgICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApKVxuICAgICAgICAgICAgICAgIHRbcF0gPSBzW3BdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0O1xuICAgIH07XG4gICAgcmV0dXJuIF9fYXNzaWduLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG59O1xudmFyIF9fYXdhaXRlciA9ICh0aGlzICYmIHRoaXMuX19hd2FpdGVyKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgICB9KTtcbn07XG52YXIgX19nZW5lcmF0b3IgPSAodGhpcyAmJiB0aGlzLl9fZ2VuZXJhdG9yKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgYm9keSkge1xuICAgIHZhciBfID0geyBsYWJlbDogMCwgc2VudDogZnVuY3Rpb24oKSB7IGlmICh0WzBdICYgMSkgdGhyb3cgdFsxXTsgcmV0dXJuIHRbMV07IH0sIHRyeXM6IFtdLCBvcHM6IFtdIH0sIGYsIHksIHQsIGc7XG4gICAgcmV0dXJuIGcgPSB7IG5leHQ6IHZlcmIoMCksIFwidGhyb3dcIjogdmVyYigxKSwgXCJyZXR1cm5cIjogdmVyYigyKSB9LCB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgKGdbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhpczsgfSksIGc7XG4gICAgZnVuY3Rpb24gdmVyYihuKSB7IHJldHVybiBmdW5jdGlvbiAodikgeyByZXR1cm4gc3RlcChbbiwgdl0pOyB9OyB9XG4gICAgZnVuY3Rpb24gc3RlcChvcCkge1xuICAgICAgICBpZiAoZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy5cIik7XG4gICAgICAgIHdoaWxlIChfKSB0cnkge1xuICAgICAgICAgICAgaWYgKGYgPSAxLCB5ICYmICh0ID0gb3BbMF0gJiAyID8geVtcInJldHVyblwiXSA6IG9wWzBdID8geVtcInRocm93XCJdIHx8ICgodCA9IHlbXCJyZXR1cm5cIl0pICYmIHQuY2FsbCh5KSwgMCkgOiB5Lm5leHQpICYmICEodCA9IHQuY2FsbCh5LCBvcFsxXSkpLmRvbmUpIHJldHVybiB0O1xuICAgICAgICAgICAgaWYgKHkgPSAwLCB0KSBvcCA9IFtvcFswXSAmIDIsIHQudmFsdWVdO1xuICAgICAgICAgICAgc3dpdGNoIChvcFswXSkge1xuICAgICAgICAgICAgICAgIGNhc2UgMDogY2FzZSAxOiB0ID0gb3A7IGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgNDogXy5sYWJlbCsrOyByZXR1cm4geyB2YWx1ZTogb3BbMV0sIGRvbmU6IGZhbHNlIH07XG4gICAgICAgICAgICAgICAgY2FzZSA1OiBfLmxhYmVsKys7IHkgPSBvcFsxXTsgb3AgPSBbMF07IGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGNhc2UgNzogb3AgPSBfLm9wcy5wb3AoKTsgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICBpZiAoISh0ID0gXy50cnlzLCB0ID0gdC5sZW5ndGggPiAwICYmIHRbdC5sZW5ndGggLSAxXSkgJiYgKG9wWzBdID09PSA2IHx8IG9wWzBdID09PSAyKSkgeyBfID0gMDsgY29udGludWU7IH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSAzICYmICghdCB8fCAob3BbMV0gPiB0WzBdICYmIG9wWzFdIDwgdFszXSkpKSB7IF8ubGFiZWwgPSBvcFsxXTsgYnJlYWs7IH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSA2ICYmIF8ubGFiZWwgPCB0WzFdKSB7IF8ubGFiZWwgPSB0WzFdOyB0ID0gb3A7IGJyZWFrOyB9XG4gICAgICAgICAgICAgICAgICAgIGlmICh0ICYmIF8ubGFiZWwgPCB0WzJdKSB7IF8ubGFiZWwgPSB0WzJdOyBfLm9wcy5wdXNoKG9wKTsgYnJlYWs7IH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHRbMl0pIF8ub3BzLnBvcCgpO1xuICAgICAgICAgICAgICAgICAgICBfLnRyeXMucG9wKCk7IGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgb3AgPSBib2R5LmNhbGwodGhpc0FyZywgXyk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHsgb3AgPSBbNiwgZV07IHkgPSAwOyB9IGZpbmFsbHkgeyBmID0gdCA9IDA7IH1cbiAgICAgICAgaWYgKG9wWzBdICYgNSkgdGhyb3cgb3BbMV07IHJldHVybiB7IHZhbHVlOiBvcFswXSA/IG9wWzFdIDogdm9pZCAwLCBkb25lOiB0cnVlIH07XG4gICAgfVxufTtcbnZhciBfX2ltcG9ydERlZmF1bHQgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0RGVmYXVsdCkgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIHJldHVybiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSA/IG1vZCA6IHsgXCJkZWZhdWx0XCI6IG1vZCB9O1xufTtcbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG52YXIganN4X3J1bnRpbWVfMSA9IHJlcXVpcmUoXCJyZWFjdC9qc3gtcnVudGltZVwiKTtcbnZhciBzaG9wXzEgPSByZXF1aXJlKFwiLi4vLi4vbW9kZWwvc2hvcFwiKTtcbnZhciBDb250YWN0Q29tcG9uZW50XzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIi4uL2NvbnRhY3QvQ29udGFjdENvbXBvbmVudFwiKSk7XG52YXIgVG9wQmFyQ29tcG9uZW50XzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIi4uL3RvcGJhci9Ub3BCYXJDb21wb25lbnRcIikpO1xudmFyIFBvc2l0aW9uc0NvbXBvbmVudF8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCIuLi9wb3NpdGlvbnMvUG9zaXRpb25zQ29tcG9uZW50XCIpKTtcbnZhciByZWFjdF8xID0gcmVxdWlyZShcInJlYWN0XCIpO1xudmFyIG9yZGVyXzEgPSByZXF1aXJlKFwiLi4vLi4vbW9kZWwvb3JkZXJcIik7XG52YXIgUGF5bWVudENvbXBvbmVudF8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCIuLi9wYXltZW50L1BheW1lbnRDb21wb25lbnRcIikpO1xudmFyIFNoaXBwaW5nQ29tcG9uZW50XzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIi4uL3NoaXBwaW5nL1NoaXBwaW5nQ29tcG9uZW50XCIpKTtcbnZhciBCdXR0b25Db21wb25lbnRfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiLi4vYnV0dG9uL0J1dHRvbkNvbXBvbmVudFwiKSk7XG52YXIgcmVhY3Rfcm91dGVyX2RvbV8xID0gcmVxdWlyZShcInJlYWN0LXJvdXRlci1kb21cIik7XG52YXIgdHN5cmluZ2VfMSA9IHJlcXVpcmUoXCJ0c3lyaW5nZVwiKTtcbnZhciBvcmRlcl8yID0gcmVxdWlyZShcIi4uLy4uL3N0YXRlL29yZGVyXCIpO1xudmFyIG9yZGVyXzMgPSByZXF1aXJlKFwiLi4vLi4vc2VydmljZXMvb3JkZXJcIik7XG52YXIgSW5mb0ZpZWxkQ29tcG9uZW50XzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIi4uL2luZm8vSW5mb0ZpZWxkQ29tcG9uZW50XCIpKTtcbnZhciByZWFjdF8yID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJyZWFjdFwiKSk7XG52YXIgT3JkZXJBbGlhc0NvbXBvbmVudF8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCIuLi9vcmRlci9PcmRlckFsaWFzQ29tcG9uZW50XCIpKTtcbnZhciBCYXNlQ29tcG9uZW50ID0gZnVuY3Rpb24gKHByb3BzKSB7XG4gICAgdmFyIF9hID0gKDAsIHJlYWN0XzEudXNlU3RhdGUpKG5ldyBzaG9wXzEuU2hvcCgpKSwgc2hvcCA9IF9hWzBdLCBzZXRTaG9wID0gX2FbMV07XG4gICAgdmFyIF9iID0gKDAsIHJlYWN0XzEudXNlU3RhdGUpKG5ldyBvcmRlcl8xLk9yZGVyKCkpLCBvcmRlciA9IF9iWzBdLCBzZXRPcmRlciA9IF9iWzFdO1xuICAgIHZhciBvcmRlcl9zdGF0ZSA9IHRzeXJpbmdlXzEuY29udGFpbmVyLnJlc29sdmUob3JkZXJfMi5PcmRlclN0YXRlKTtcbiAgICB2YXIgb3JkZXJTZXJ2aWNlID0gdHN5cmluZ2VfMS5jb250YWluZXIucmVzb2x2ZShvcmRlcl8zLk9yZGVyU2VydmljZSk7XG4gICAgdmFyIGxvYWRPcmRlciA9IGZ1bmN0aW9uICh1dWlkKSB7IHJldHVybiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gX19nZW5lcmF0b3IodGhpcywgZnVuY3Rpb24gKF9hKSB7XG4gICAgICAgICAgICBvcmRlclNlcnZpY2UuZ2V0T3JkZXIodXVpZCkudGhlbihmdW5jdGlvbiAob3JkZXJPYmopIHtcbiAgICAgICAgICAgICAgICBvcmRlcl9zdGF0ZS5zZXRDdXJyZW50T3JkZXIob3JkZXJPYmopO1xuICAgICAgICAgICAgICAgIHNldFNob3Aob3JkZXJPYmouc2hvcCk7XG4gICAgICAgICAgICAgICAgc2V0T3JkZXIob3JkZXJPYmopO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gWzIgLypyZXR1cm4qL107XG4gICAgICAgIH0pO1xuICAgIH0pOyB9O1xuICAgIHZhciBwYXJhbXMgPSAoMCwgcmVhY3Rfcm91dGVyX2RvbV8xLnVzZVBhcmFtcykoKTtcbiAgICAoMCwgcmVhY3RfMS51c2VFZmZlY3QpKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHBhcmFtcy51dWlkKSB7XG4gICAgICAgICAgICBsb2FkT3JkZXIocGFyYW1zLnV1aWQpO1xuICAgICAgICB9XG4gICAgfSwgW10pO1xuICAgIHJldHVybiAoKDAsIGpzeF9ydW50aW1lXzEuanN4KShyZWFjdF8yW1wiZGVmYXVsdFwiXS5TdHJpY3RNb2RlLCB7IGNoaWxkcmVuOiAoMCwganN4X3J1bnRpbWVfMS5qc3hzKShcImRpdlwiLCBfX2Fzc2lnbih7IGNsYXNzTmFtZTogJ21sLTEgbXQtMSBtci0xJyB9LCB7IGNoaWxkcmVuOiBbKDAsIGpzeF9ydW50aW1lXzEuanN4cykoXCJkaXZcIiwgX19hc3NpZ24oeyBjbGFzc05hbWU6IFwiZmxleCBnYXAtMSBtdC0xIG1iLTFcIiB9LCB7IGNoaWxkcmVuOiBbKDAsIGpzeF9ydW50aW1lXzEuanN4KShcImRpdlwiLCBfX2Fzc2lnbih7IGNsYXNzTmFtZTogXCJmbGV4LTFcIiB9LCB7IGNoaWxkcmVuOiAoMCwganN4X3J1bnRpbWVfMS5qc3gpKE9yZGVyQWxpYXNDb21wb25lbnRfMVtcImRlZmF1bHRcIl0sIHsgb3JkZXI6IG9yZGVyIH0pIH0pKSwgKDAsIGpzeF9ydW50aW1lXzEuanN4KShcImRpdlwiLCBfX2Fzc2lnbih7IGNsYXNzTmFtZTogXCJcIiB9LCB7IGNoaWxkcmVuOiAoMCwganN4X3J1bnRpbWVfMS5qc3gpKEJ1dHRvbkNvbXBvbmVudF8xW1wiZGVmYXVsdFwiXSwgeyBsb2FkT3JkZXI6IGxvYWRPcmRlciB9KSB9KSldIH0pKSwgKDAsIGpzeF9ydW50aW1lXzEuanN4KShUb3BCYXJDb21wb25lbnRfMVtcImRlZmF1bHRcIl0sIHsgc2hvcDogc2hvcCwgb3JkZXI6IG9yZGVyLCBjaGFuZ2U6IHNldFNob3AgfSksICgwLCBqc3hfcnVudGltZV8xLmpzeCkoXCJkaXZcIiwgX19hc3NpZ24oeyBjbGFzc05hbWU6IFwibXQtMSBtYi0xXCIgfSwgeyBjaGlsZHJlbjogc2hvcC5pZCAhPSAwICYmICgwLCBqc3hfcnVudGltZV8xLmpzeCkoQ29udGFjdENvbXBvbmVudF8xW1wiZGVmYXVsdFwiXSwgeyBzaG9wOiBzaG9wLCBvcmRlcjogb3JkZXIgfSkgfSkpLCAoMCwganN4X3J1bnRpbWVfMS5qc3gpKFwiZGl2XCIsIHsgY2hpbGRyZW46IHNob3AuaWQgIT0gMCAmJiAoMCwganN4X3J1bnRpbWVfMS5qc3gpKFBvc2l0aW9uc0NvbXBvbmVudF8xW1wiZGVmYXVsdFwiXSwgeyBzaG9wOiBzaG9wLCBvcmRlcjogb3JkZXIgfSkgfSksICgwLCBqc3hfcnVudGltZV8xLmpzeHMpKFwiZGl2XCIsIF9fYXNzaWduKHsgY2xhc3NOYW1lOiBcIm10LTEgbWItMSBmbGV4IGdhcC0xXCIgfSwgeyBjaGlsZHJlbjogWygwLCBqc3hfcnVudGltZV8xLmpzeCkoXCJkaXZcIiwgX19hc3NpZ24oeyBjbGFzc05hbWU6IFwiZmxleC0xXCIgfSwgeyBjaGlsZHJlbjogc2hvcC5pZCAhPSAwICYmICgwLCBqc3hfcnVudGltZV8xLmpzeCkoUGF5bWVudENvbXBvbmVudF8xW1wiZGVmYXVsdFwiXSwgeyBzaG9wOiBzaG9wLCBvcmRlcjogb3JkZXIgfSkgfSkpLCAoMCwganN4X3J1bnRpbWVfMS5qc3gpKFwiZGl2XCIsIF9fYXNzaWduKHsgY2xhc3NOYW1lOiBcImZsZXgtMVwiIH0sIHsgY2hpbGRyZW46IHNob3AuaWQgIT0gMCAmJiAoMCwganN4X3J1bnRpbWVfMS5qc3gpKFNoaXBwaW5nQ29tcG9uZW50XzFbXCJkZWZhdWx0XCJdLCB7IHNob3A6IHNob3AsIG9yZGVyOiBvcmRlciB9KSB9KSldIH0pKSwgc2hvcC5pZCAhPSAwICYmICgwLCBqc3hfcnVudGltZV8xLmpzeCkoSW5mb0ZpZWxkQ29tcG9uZW50XzFbXCJkZWZhdWx0XCJdLCB7IHNob3A6IHNob3AsIG9yZGVyOiBvcmRlciB9KV0gfSkpIH0pKTtcbn07XG5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IEJhc2VDb21wb25lbnQ7XG4iLCJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2Fzc2lnbiA9ICh0aGlzICYmIHRoaXMuX19hc3NpZ24pIHx8IGZ1bmN0aW9uICgpIHtcbiAgICBfX2Fzc2lnbiA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24odCkge1xuICAgICAgICBmb3IgKHZhciBzLCBpID0gMSwgbiA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBuOyBpKyspIHtcbiAgICAgICAgICAgIHMgPSBhcmd1bWVudHNbaV07XG4gICAgICAgICAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkpXG4gICAgICAgICAgICAgICAgdFtwXSA9IHNbcF07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHQ7XG4gICAgfTtcbiAgICByZXR1cm4gX19hc3NpZ24uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbn07XG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xudmFyIGpzeF9ydW50aW1lXzEgPSByZXF1aXJlKFwicmVhY3QvanN4LXJ1bnRpbWVcIik7XG52YXIgQnNQbHVzXzEgPSByZXF1aXJlKFwiQHJlYWN0LWljb25zL2FsbC1maWxlcy9icy9Cc1BsdXNcIik7XG52YXIgQnNQZW5jaWxfMSA9IHJlcXVpcmUoXCJAcmVhY3QtaWNvbnMvYWxsLWZpbGVzL2JzL0JzUGVuY2lsXCIpO1xudmFyIFJpU2F2ZUZpbGxfMSA9IHJlcXVpcmUoXCJAcmVhY3QtaWNvbnMvYWxsLWZpbGVzL3JpL1JpU2F2ZUZpbGxcIik7XG52YXIgUmlEZWxldGVCaW4yTGluZV8xID0gcmVxdWlyZShcIkByZWFjdC1pY29ucy9hbGwtZmlsZXMvcmkvUmlEZWxldGVCaW4yTGluZVwiKTtcbnZhciBCc1hDaXJjbGVfMSA9IHJlcXVpcmUoXCJAcmVhY3QtaWNvbnMvYWxsLWZpbGVzL2JzL0JzWENpcmNsZVwiKTtcbnZhciBmbG93Yml0ZV9yZWFjdF8xID0gcmVxdWlyZShcImZsb3diaXRlLXJlYWN0XCIpO1xudmFyIEJ1dHRvbiA9IGZ1bmN0aW9uIChfYSkge1xuICAgIHZhciB0eXBlID0gX2EudHlwZSwgdmFyaWFudCA9IF9hLnZhcmlhbnQsIG9uQ2xpY2sgPSBfYS5vbkNsaWNrO1xuICAgIHJldHVybiAoKDAsIGpzeF9ydW50aW1lXzEuanN4cykoZmxvd2JpdGVfcmVhY3RfMS5CdXR0b24sIF9fYXNzaWduKHsgY29sb3I6IHZhcmlhbnQsIHBpbGw6IHRydWUsIG9uQ2xpY2s6IG9uQ2xpY2sgfSwgeyBjaGlsZHJlbjogW3R5cGUgPT0gMSAmJiAoMCwganN4X3J1bnRpbWVfMS5qc3gpKEJzUGx1c18xLkJzUGx1cywge30pLCB0eXBlID09IDIgJiYgKDAsIGpzeF9ydW50aW1lXzEuanN4KShCc1BlbmNpbF8xLkJzUGVuY2lsLCB7fSksIHR5cGUgPT0gMyAmJiAoMCwganN4X3J1bnRpbWVfMS5qc3gpKFJpU2F2ZUZpbGxfMS5SaVNhdmVGaWxsLCB7fSksIHR5cGUgPT0gNCAmJiAoMCwganN4X3J1bnRpbWVfMS5qc3gpKEJzWENpcmNsZV8xLkJzWENpcmNsZSwge30pLCB0eXBlID09IDUgJiYgKDAsIGpzeF9ydW50aW1lXzEuanN4KShSaURlbGV0ZUJpbjJMaW5lXzEuUmlEZWxldGVCaW4yTGluZSwge30pXSB9KSkpO1xufTtcbmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gQnV0dG9uO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xudmFyIGpzeF9ydW50aW1lXzEgPSByZXF1aXJlKFwicmVhY3QvanN4LXJ1bnRpbWVcIik7XG52YXIgQ3VycmVuY3kgPSBmdW5jdGlvbiAoX2EpIHtcbiAgICB2YXIgcHJpY2UgPSBfYS5wcmljZTtcbiAgICByZXR1cm4gKCgwLCBqc3hfcnVudGltZV8xLmpzeCkoanN4X3J1bnRpbWVfMS5GcmFnbWVudCwgeyBjaGlsZHJlbjogSW50bC5OdW1iZXJGb3JtYXQoJ2RlLURFJywge1xuICAgICAgICAgICAgc3R5bGU6ICdjdXJyZW5jeScsXG4gICAgICAgICAgICBjdXJyZW5jeTogJ0VVUidcbiAgICAgICAgfSkuZm9ybWF0KHByaWNlIC8gMTAwKSB9KSk7XG59O1xuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBDdXJyZW5jeTtcbiIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9fbWFrZVRlbXBsYXRlT2JqZWN0ID0gKHRoaXMgJiYgdGhpcy5fX21ha2VUZW1wbGF0ZU9iamVjdCkgfHwgZnVuY3Rpb24gKGNvb2tlZCwgcmF3KSB7XG4gICAgaWYgKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSkgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkoY29va2VkLCBcInJhd1wiLCB7IHZhbHVlOiByYXcgfSk7IH0gZWxzZSB7IGNvb2tlZC5yYXcgPSByYXc7IH1cbiAgICByZXR1cm4gY29va2VkO1xufTtcbnZhciBfX2Fzc2lnbiA9ICh0aGlzICYmIHRoaXMuX19hc3NpZ24pIHx8IGZ1bmN0aW9uICgpIHtcbiAgICBfX2Fzc2lnbiA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24odCkge1xuICAgICAgICBmb3IgKHZhciBzLCBpID0gMSwgbiA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBuOyBpKyspIHtcbiAgICAgICAgICAgIHMgPSBhcmd1bWVudHNbaV07XG4gICAgICAgICAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkpXG4gICAgICAgICAgICAgICAgdFtwXSA9IHNbcF07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHQ7XG4gICAgfTtcbiAgICByZXR1cm4gX19hc3NpZ24uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbn07XG52YXIgX19pbXBvcnREZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydERlZmF1bHQpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICByZXR1cm4gKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgPyBtb2QgOiB7IFwiZGVmYXVsdFwiOiBtb2QgfTtcbn07XG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuZXhwb3J0cy5TZWxlY3RMYWJlbCA9IHZvaWQgMDtcbnZhciBqc3hfcnVudGltZV8xID0gcmVxdWlyZShcInJlYWN0L2pzeC1ydW50aW1lXCIpO1xudmFyIHN0eWxlZF9jb21wb25lbnRzXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcInN0eWxlZC1jb21wb25lbnRzXCIpKTtcbnZhciByZWFjdF9zZWxlY3RfMSA9IHJlcXVpcmUoXCJyZWFjdC1zZWxlY3RcIik7XG52YXIgU2VsZWN0TGFiZWwgPSBmdW5jdGlvbiAocHJvcHMpIHtcbiAgICByZXR1cm4gKCgwLCBqc3hfcnVudGltZV8xLmpzeHMpKGpzeF9ydW50aW1lXzEuRnJhZ21lbnQsIHsgY2hpbGRyZW46IFsoMCwganN4X3J1bnRpbWVfMS5qc3gpKHJlYWN0X3NlbGVjdF8xLmNvbXBvbmVudHMuQ29udHJvbCwgX19hc3NpZ24oe30sIHByb3BzKSksICgwLCBqc3hfcnVudGltZV8xLmpzeCkoTGFiZWwsIF9fYXNzaWduKHsgXCIkaXNGbG9hdGluZ1wiOiBwcm9wcy5nZXRWYWx1ZSgpLmxlbmd0aCA9PSAwIHx8IHByb3BzLmdldFZhbHVlKClbMF0udXVpZCA9PSBcIlwiIH0sIHsgY2hpbGRyZW46IHByb3BzLnNlbGVjdFByb3BzLm5hbWUgfSkpXSB9KSk7XG59O1xuZXhwb3J0cy5TZWxlY3RMYWJlbCA9IFNlbGVjdExhYmVsO1xudmFyIExhYmVsID0gc3R5bGVkX2NvbXBvbmVudHNfMVtcImRlZmF1bHRcIl0ubGFiZWwodGVtcGxhdGVPYmplY3RfMSB8fCAodGVtcGxhdGVPYmplY3RfMSA9IF9fbWFrZVRlbXBsYXRlT2JqZWN0KFtcIlxcbiAgbGVmdDogMTBweDtcXG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgdHJhbnNpdGlvbjogMC4ycyBlYXNlIGFsbDtcXG4gIC1tb3otdHJhbnNpdGlvbjogMC4ycyBlYXNlIGFsbDtcXG4gIC13ZWJraXQtdHJhbnNpdGlvbjogMC4ycyBlYXNlIGFsbDtcXG4gIHRvcDogXCIsIFwiO1xcbiAgZm9udC1zaXplOiBcIiwgXCI7XFxuXCJdLCBbXCJcXG4gIGxlZnQ6IDEwcHg7XFxuICBwb2ludGVyLWV2ZW50czogbm9uZTtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHRyYW5zaXRpb246IDAuMnMgZWFzZSBhbGw7XFxuICAtbW96LXRyYW5zaXRpb246IDAuMnMgZWFzZSBhbGw7XFxuICAtd2Via2l0LXRyYW5zaXRpb246IDAuMnMgZWFzZSBhbGw7XFxuICB0b3A6IFwiLCBcIjtcXG4gIGZvbnQtc2l6ZTogXCIsIFwiO1xcblwiXSkpLCBmdW5jdGlvbiAocHJvcHMpIHsgcmV0dXJuIChwcm9wcy4kaXNGbG9hdGluZyA/IFwiMjAlXCIgOiBcIjBweFwiKTsgfSwgZnVuY3Rpb24gKHByb3BzKSB7IHJldHVybiAocHJvcHMuJGlzRmxvYXRpbmcgPyBcIjFyZW1cIiA6IFwiMC42cmVtXCIpOyB9KTtcbnZhciB0ZW1wbGF0ZU9iamVjdF8xO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19leHRlbmRzID0gKHRoaXMgJiYgdGhpcy5fX2V4dGVuZHMpIHx8IChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGV4dGVuZFN0YXRpY3MgPSBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8XG4gICAgICAgICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XG4gICAgICAgICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwgcCkpIGRbcF0gPSBiW3BdOyB9O1xuICAgICAgICByZXR1cm4gZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICB9O1xuICAgIHJldHVybiBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBpZiAodHlwZW9mIGIgIT09IFwiZnVuY3Rpb25cIiAmJiBiICE9PSBudWxsKVxuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNsYXNzIGV4dGVuZHMgdmFsdWUgXCIgKyBTdHJpbmcoYikgKyBcIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsXCIpO1xuICAgICAgICBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgICAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cbiAgICAgICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xuICAgIH07XG59KSgpO1xudmFyIF9fYXNzaWduID0gKHRoaXMgJiYgdGhpcy5fX2Fzc2lnbikgfHwgZnVuY3Rpb24gKCkge1xuICAgIF9fYXNzaWduID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbih0KSB7XG4gICAgICAgIGZvciAodmFyIHMsIGkgPSAxLCBuID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IG47IGkrKykge1xuICAgICAgICAgICAgcyA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSlcbiAgICAgICAgICAgICAgICB0W3BdID0gc1twXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdDtcbiAgICB9O1xuICAgIHJldHVybiBfX2Fzc2lnbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xufTtcbnZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gICAgfSk7XG59O1xudmFyIF9fZ2VuZXJhdG9yID0gKHRoaXMgJiYgdGhpcy5fX2dlbmVyYXRvcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIGJvZHkpIHtcbiAgICB2YXIgXyA9IHsgbGFiZWw6IDAsIHNlbnQ6IGZ1bmN0aW9uKCkgeyBpZiAodFswXSAmIDEpIHRocm93IHRbMV07IHJldHVybiB0WzFdOyB9LCB0cnlzOiBbXSwgb3BzOiBbXSB9LCBmLCB5LCB0LCBnO1xuICAgIHJldHVybiBnID0geyBuZXh0OiB2ZXJiKDApLCBcInRocm93XCI6IHZlcmIoMSksIFwicmV0dXJuXCI6IHZlcmIoMikgfSwgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIChnW1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbigpIHsgcmV0dXJuIHRoaXM7IH0pLCBnO1xuICAgIGZ1bmN0aW9uIHZlcmIobikgeyByZXR1cm4gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIHN0ZXAoW24sIHZdKTsgfTsgfVxuICAgIGZ1bmN0aW9uIHN0ZXAob3ApIHtcbiAgICAgICAgaWYgKGYpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuXCIpO1xuICAgICAgICB3aGlsZSAoXykgdHJ5IHtcbiAgICAgICAgICAgIGlmIChmID0gMSwgeSAmJiAodCA9IG9wWzBdICYgMiA/IHlbXCJyZXR1cm5cIl0gOiBvcFswXSA/IHlbXCJ0aHJvd1wiXSB8fCAoKHQgPSB5W1wicmV0dXJuXCJdKSAmJiB0LmNhbGwoeSksIDApIDogeS5uZXh0KSAmJiAhKHQgPSB0LmNhbGwoeSwgb3BbMV0pKS5kb25lKSByZXR1cm4gdDtcbiAgICAgICAgICAgIGlmICh5ID0gMCwgdCkgb3AgPSBbb3BbMF0gJiAyLCB0LnZhbHVlXTtcbiAgICAgICAgICAgIHN3aXRjaCAob3BbMF0pIHtcbiAgICAgICAgICAgICAgICBjYXNlIDA6IGNhc2UgMTogdCA9IG9wOyBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIDQ6IF8ubGFiZWwrKzsgcmV0dXJuIHsgdmFsdWU6IG9wWzFdLCBkb25lOiBmYWxzZSB9O1xuICAgICAgICAgICAgICAgIGNhc2UgNTogXy5sYWJlbCsrOyB5ID0gb3BbMV07IG9wID0gWzBdOyBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBjYXNlIDc6IG9wID0gXy5vcHMucG9wKCk7IF8udHJ5cy5wb3AoKTsgY29udGludWU7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEodCA9IF8udHJ5cywgdCA9IHQubGVuZ3RoID4gMCAmJiB0W3QubGVuZ3RoIC0gMV0pICYmIChvcFswXSA9PT0gNiB8fCBvcFswXSA9PT0gMikpIHsgXyA9IDA7IGNvbnRpbnVlOyB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gMyAmJiAoIXQgfHwgKG9wWzFdID4gdFswXSAmJiBvcFsxXSA8IHRbM10pKSkgeyBfLmxhYmVsID0gb3BbMV07IGJyZWFrOyB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gNiAmJiBfLmxhYmVsIDwgdFsxXSkgeyBfLmxhYmVsID0gdFsxXTsgdCA9IG9wOyBicmVhazsgfVxuICAgICAgICAgICAgICAgICAgICBpZiAodCAmJiBfLmxhYmVsIDwgdFsyXSkgeyBfLmxhYmVsID0gdFsyXTsgXy5vcHMucHVzaChvcCk7IGJyZWFrOyB9XG4gICAgICAgICAgICAgICAgICAgIGlmICh0WzJdKSBfLm9wcy5wb3AoKTtcbiAgICAgICAgICAgICAgICAgICAgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG9wID0gYm9keS5jYWxsKHRoaXNBcmcsIF8pO1xuICAgICAgICB9IGNhdGNoIChlKSB7IG9wID0gWzYsIGVdOyB5ID0gMDsgfSBmaW5hbGx5IHsgZiA9IHQgPSAwOyB9XG4gICAgICAgIGlmIChvcFswXSAmIDUpIHRocm93IG9wWzFdOyByZXR1cm4geyB2YWx1ZTogb3BbMF0gPyBvcFsxXSA6IHZvaWQgMCwgZG9uZTogdHJ1ZSB9O1xuICAgIH1cbn07XG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xudmFyIGpzeF9ydW50aW1lXzEgPSByZXF1aXJlKFwicmVhY3QvanN4LXJ1bnRpbWVcIik7XG52YXIgb3JkZXJfMSA9IHJlcXVpcmUoXCIuLi8uLi9zdGF0ZS9vcmRlclwiKTtcbnZhciB0c3lyaW5nZV8xID0gcmVxdWlyZShcInRzeXJpbmdlXCIpO1xudmFyIG9yZGVyXzIgPSByZXF1aXJlKFwiLi4vLi4vc2VydmljZXMvb3JkZXJcIik7XG52YXIgcmVhY3RfMSA9IHJlcXVpcmUoXCJyZWFjdFwiKTtcbnZhciByeGpzXzEgPSByZXF1aXJlKFwicnhqc1wiKTtcbnZhciBSaVNhdmVGaWxsXzEgPSByZXF1aXJlKFwiQHJlYWN0LWljb25zL2FsbC1maWxlcy9yaS9SaVNhdmVGaWxsXCIpO1xudmFyIFJpUHJpbnRlckZpbGxfMSA9IHJlcXVpcmUoXCJAcmVhY3QtaWNvbnMvYWxsLWZpbGVzL3JpL1JpUHJpbnRlckZpbGxcIik7XG52YXIgZmxvd2JpdGVfcmVhY3RfMSA9IHJlcXVpcmUoXCJmbG93Yml0ZS1yZWFjdFwiKTtcbnZhciBCdXR0b25Db21wb25lbnQgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKEJ1dHRvbkNvbXBvbmVudCwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBCdXR0b25Db21wb25lbnQocHJvcHMpIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgcHJvcHMpIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLm9yZGVyU3RhdGUgPSB0c3lyaW5nZV8xLmNvbnRhaW5lci5yZXNvbHZlKG9yZGVyXzEuT3JkZXJTdGF0ZSk7XG4gICAgICAgIF90aGlzLm9yZGVyU2VydmljZSA9IHRzeXJpbmdlXzEuY29udGFpbmVyLnJlc29sdmUob3JkZXJfMi5PcmRlclNlcnZpY2UpO1xuICAgICAgICBfdGhpcy5zdGF0ZSA9IHsgZGlzYWJsZWQ6IHRydWUgfTtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBCdXR0b25Db21wb25lbnQucHJvdG90eXBlLmNvbXBvbmVudERpZE1vdW50ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICB0aGlzLm9yZGVyU3RhdGUuZ2V0Q3VycmVudE9yZGVyKCkucGlwZSgoMCwgcnhqc18xLmRlYm91bmNlVGltZSkoMjAwMCkpLnN1YnNjcmliZShmdW5jdGlvbiAoZSkgeyByZXR1cm4gX3RoaXMuc2F2ZUJ1dHRvbihlKTsgfSk7XG4gICAgfTtcbiAgICBCdXR0b25Db21wb25lbnQucHJvdG90eXBlLnNhdmVCdXR0b24gPSBmdW5jdGlvbiAob3JkZXIpIHtcbiAgICAgICAgaWYgKG9yZGVyLmNvbnRhY3QudXNlcm5hbWUgIT0gXCJcIlxuICAgICAgICAgICAgJiYgb3JkZXIucGF5bWVudC50aXRsZSAhPSBcIlwiXG4gICAgICAgICAgICAmJiBvcmRlci5zaGlwcGluZy50aXRsZSAhPSBcIlwiXG4gICAgICAgICAgICAmJiBvcmRlci5zaG9wLm5hbWUgIT0gXCJcIlxuICAgICAgICAgICAgJiYgb3JkZXIuYWNjb3VudC50aXRsZSAhPSBcIlwiXG4gICAgICAgICAgICAmJiBvcmRlci5pbnZvaWNlQWRkcmVzcy51dWlkICE9IFwiXCJcbiAgICAgICAgICAgICYmIG9yZGVyLnR5cGUgIT0gMCkge1xuICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7IGRpc2FibGVkOiBmYWxzZSB9KTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgQnV0dG9uQ29tcG9uZW50LnByb3RvdHlwZS5oYW5kbGVQcmludCA9IGZ1bmN0aW9uIChlKSB7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciB1dWlkLCB0eXBlO1xuICAgICAgICAgICAgcmV0dXJuIF9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfYSkge1xuICAgICAgICAgICAgICAgIHV1aWQgPSB0aGlzLm9yZGVyU3RhdGUuZ2V0Q3VycmVudE9yZGVyKCkudmFsdWUudXVpZDtcbiAgICAgICAgICAgICAgICB0eXBlID0gdGhpcy5vcmRlclN0YXRlLmdldEN1cnJlbnRPcmRlcigpLnZhbHVlLnR5cGU7XG4gICAgICAgICAgICAgICAgd2luZG93Lm9wZW4oJy9hcHBzL2JhY2tlbmQvb3JkZXIvZGV0YWlsL3ByaW50LycgKyB0eXBlICsgJy8nICsgdXVpZCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFsyIC8qcmV0dXJuKi9dO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgQnV0dG9uQ29tcG9uZW50LnByb3RvdHlwZS5oYW5kbGVTYXZlID0gZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIHJlc3VsdDtcbiAgICAgICAgICAgIHJldHVybiBfX2dlbmVyYXRvcih0aGlzLCBmdW5jdGlvbiAoX2EpIHtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKF9hLmxhYmVsKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbNCAvKnlpZWxkKi8sIHRoaXMub3JkZXJTZXJ2aWNlLnNhdmVPcmRlcih0aGlzLm9yZGVyU3RhdGUuZ2V0Q3VycmVudE9yZGVyKCkudmFsdWUpXTtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gX2Euc2VudCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm9wcy5sb2FkT3JkZXIocmVzdWx0Wyd1dWlkJ10pO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFsyIC8qcmV0dXJuKi9dO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIEJ1dHRvbkNvbXBvbmVudC5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICByZXR1cm4gKCgwLCBqc3hfcnVudGltZV8xLmpzeHMpKFwiZGl2XCIsIF9fYXNzaWduKHsgY2xhc3NOYW1lOiBcImZsZXggZ2FwLTNcIiB9LCB7IGNoaWxkcmVuOiBbKDAsIGpzeF9ydW50aW1lXzEuanN4cykoZmxvd2JpdGVfcmVhY3RfMS5CdXR0b24sIF9fYXNzaWduKHsgc2l6ZTogXCJ4c1wiLCBjb2xvcjogXCJpbmZvXCIsIGRpc2FibGVkOiB0aGlzLnN0YXRlLmRpc2FibGVkLCBvbkNsaWNrOiBmdW5jdGlvbiAoZSkgeyByZXR1cm4gX3RoaXMuaGFuZGxlU2F2ZShlKTsgfSB9LCB7IGNoaWxkcmVuOiBbKDAsIGpzeF9ydW50aW1lXzEuanN4KShSaVNhdmVGaWxsXzEuUmlTYXZlRmlsbCwgeyBjbGFzc05hbWU6IFwibXItMiBoLTUgdy01XCIgfSksIFwiIFNwZWljaGVyblwiXSB9KSksICgwLCBqc3hfcnVudGltZV8xLmpzeHMpKGZsb3diaXRlX3JlYWN0XzEuQnV0dG9uLCBfX2Fzc2lnbih7IHNpemU6IFwieHNcIiwgY29sb3I6IFwic3VjY2Vzc1wiLCBkaXNhYmxlZDogIXRoaXMub3JkZXJTdGF0ZS5nZXRDdXJyZW50T3JkZXIoKS52YWx1ZS5zYXZlZCwgb25DbGljazogZnVuY3Rpb24gKGUpIHsgcmV0dXJuIF90aGlzLmhhbmRsZVByaW50KGUpOyB9IH0sIHsgY2hpbGRyZW46IFsoMCwganN4X3J1bnRpbWVfMS5qc3gpKFJpUHJpbnRlckZpbGxfMS5SaVByaW50ZXJGaWxsLCB7IGNsYXNzTmFtZTogXCJtci0yIGgtNSB3LTVcIiB9KSwgXCIgRHJ1Y2tlblwiXSB9KSldIH0pKSk7XG4gICAgfTtcbiAgICByZXR1cm4gQnV0dG9uQ29tcG9uZW50O1xufShyZWFjdF8xLkNvbXBvbmVudCkpO1xuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBCdXR0b25Db21wb25lbnQ7XG4iLCJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2V4dGVuZHMgPSAodGhpcyAmJiB0aGlzLl9fZXh0ZW5kcykgfHwgKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcbiAgICAgICAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcbiAgICAgICAgICAgIGZ1bmN0aW9uIChkLCBiKSB7IGZvciAodmFyIHAgaW4gYikgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBwKSkgZFtwXSA9IGJbcF07IH07XG4gICAgICAgIHJldHVybiBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgIH07XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGlmICh0eXBlb2YgYiAhPT0gXCJmdW5jdGlvblwiICYmIGIgIT09IG51bGwpXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyhiKSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxuICAgICAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG4gICAgfTtcbn0pKCk7XG52YXIgX19hc3NpZ24gPSAodGhpcyAmJiB0aGlzLl9fYXNzaWduKSB8fCBmdW5jdGlvbiAoKSB7XG4gICAgX19hc3NpZ24gPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uKHQpIHtcbiAgICAgICAgZm9yICh2YXIgcywgaSA9IDEsIG4gPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbjsgaSsrKSB7XG4gICAgICAgICAgICBzID0gYXJndW1lbnRzW2ldO1xuICAgICAgICAgICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApKVxuICAgICAgICAgICAgICAgIHRbcF0gPSBzW3BdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0O1xuICAgIH07XG4gICAgcmV0dXJuIF9fYXNzaWduLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG59O1xudmFyIF9fYXdhaXRlciA9ICh0aGlzICYmIHRoaXMuX19hd2FpdGVyKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgICB9KTtcbn07XG52YXIgX19nZW5lcmF0b3IgPSAodGhpcyAmJiB0aGlzLl9fZ2VuZXJhdG9yKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgYm9keSkge1xuICAgIHZhciBfID0geyBsYWJlbDogMCwgc2VudDogZnVuY3Rpb24oKSB7IGlmICh0WzBdICYgMSkgdGhyb3cgdFsxXTsgcmV0dXJuIHRbMV07IH0sIHRyeXM6IFtdLCBvcHM6IFtdIH0sIGYsIHksIHQsIGc7XG4gICAgcmV0dXJuIGcgPSB7IG5leHQ6IHZlcmIoMCksIFwidGhyb3dcIjogdmVyYigxKSwgXCJyZXR1cm5cIjogdmVyYigyKSB9LCB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgKGdbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhpczsgfSksIGc7XG4gICAgZnVuY3Rpb24gdmVyYihuKSB7IHJldHVybiBmdW5jdGlvbiAodikgeyByZXR1cm4gc3RlcChbbiwgdl0pOyB9OyB9XG4gICAgZnVuY3Rpb24gc3RlcChvcCkge1xuICAgICAgICBpZiAoZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy5cIik7XG4gICAgICAgIHdoaWxlIChfKSB0cnkge1xuICAgICAgICAgICAgaWYgKGYgPSAxLCB5ICYmICh0ID0gb3BbMF0gJiAyID8geVtcInJldHVyblwiXSA6IG9wWzBdID8geVtcInRocm93XCJdIHx8ICgodCA9IHlbXCJyZXR1cm5cIl0pICYmIHQuY2FsbCh5KSwgMCkgOiB5Lm5leHQpICYmICEodCA9IHQuY2FsbCh5LCBvcFsxXSkpLmRvbmUpIHJldHVybiB0O1xuICAgICAgICAgICAgaWYgKHkgPSAwLCB0KSBvcCA9IFtvcFswXSAmIDIsIHQudmFsdWVdO1xuICAgICAgICAgICAgc3dpdGNoIChvcFswXSkge1xuICAgICAgICAgICAgICAgIGNhc2UgMDogY2FzZSAxOiB0ID0gb3A7IGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgNDogXy5sYWJlbCsrOyByZXR1cm4geyB2YWx1ZTogb3BbMV0sIGRvbmU6IGZhbHNlIH07XG4gICAgICAgICAgICAgICAgY2FzZSA1OiBfLmxhYmVsKys7IHkgPSBvcFsxXTsgb3AgPSBbMF07IGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGNhc2UgNzogb3AgPSBfLm9wcy5wb3AoKTsgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICBpZiAoISh0ID0gXy50cnlzLCB0ID0gdC5sZW5ndGggPiAwICYmIHRbdC5sZW5ndGggLSAxXSkgJiYgKG9wWzBdID09PSA2IHx8IG9wWzBdID09PSAyKSkgeyBfID0gMDsgY29udGludWU7IH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSAzICYmICghdCB8fCAob3BbMV0gPiB0WzBdICYmIG9wWzFdIDwgdFszXSkpKSB7IF8ubGFiZWwgPSBvcFsxXTsgYnJlYWs7IH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSA2ICYmIF8ubGFiZWwgPCB0WzFdKSB7IF8ubGFiZWwgPSB0WzFdOyB0ID0gb3A7IGJyZWFrOyB9XG4gICAgICAgICAgICAgICAgICAgIGlmICh0ICYmIF8ubGFiZWwgPCB0WzJdKSB7IF8ubGFiZWwgPSB0WzJdOyBfLm9wcy5wdXNoKG9wKTsgYnJlYWs7IH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHRbMl0pIF8ub3BzLnBvcCgpO1xuICAgICAgICAgICAgICAgICAgICBfLnRyeXMucG9wKCk7IGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgb3AgPSBib2R5LmNhbGwodGhpc0FyZywgXyk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHsgb3AgPSBbNiwgZV07IHkgPSAwOyB9IGZpbmFsbHkgeyBmID0gdCA9IDA7IH1cbiAgICAgICAgaWYgKG9wWzBdICYgNSkgdGhyb3cgb3BbMV07IHJldHVybiB7IHZhbHVlOiBvcFswXSA/IG9wWzFdIDogdm9pZCAwLCBkb25lOiB0cnVlIH07XG4gICAgfVxufTtcbnZhciBfX2ltcG9ydERlZmF1bHQgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0RGVmYXVsdCkgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIHJldHVybiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSA/IG1vZCA6IHsgXCJkZWZhdWx0XCI6IG1vZCB9O1xufTtcbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG52YXIganN4X3J1bnRpbWVfMSA9IHJlcXVpcmUoXCJyZWFjdC9qc3gtcnVudGltZVwiKTtcbnZhciByZWFjdF8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJyZWFjdFwiKSk7XG52YXIgb3JkZXJfMSA9IHJlcXVpcmUoXCIuLi8uLi9tb2RlbC9vcmRlclwiKTtcbnZhciB0c3lyaW5nZV8xID0gcmVxdWlyZShcInRzeXJpbmdlXCIpO1xudmFyIG9yZGVyXzIgPSByZXF1aXJlKFwiLi4vLi4vc3RhdGUvb3JkZXJcIik7XG52YXIgcnhqc18xID0gcmVxdWlyZShcInJ4anNcIik7XG52YXIgb3JkZXJfMyA9IHJlcXVpcmUoXCIuLi8uLi9zZXJ2aWNlcy9vcmRlclwiKTtcbnZhciBDdXJyZW5jeV8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCIuLi9iYXNlL0N1cnJlbmN5XCIpKTtcbnZhciBDYWxjQ29tcG9uZW50ID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhDYWxjQ29tcG9uZW50LCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIENhbGNDb21wb25lbnQocHJvcHMpIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgcHJvcHMpIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLnN0YXRlID0ge1xuICAgICAgICAgICAgb3JkZXI6IG5ldyBvcmRlcl8xLk9yZGVyKClcbiAgICAgICAgfTtcbiAgICAgICAgX3RoaXMub3JkZXJTdGF0ZSA9IHRzeXJpbmdlXzEuY29udGFpbmVyLnJlc29sdmUob3JkZXJfMi5PcmRlclN0YXRlKTtcbiAgICAgICAgX3RoaXMub3JkZXJTZXJ2aWNlID0gdHN5cmluZ2VfMS5jb250YWluZXIucmVzb2x2ZShvcmRlcl8zLk9yZGVyU2VydmljZSk7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgQ2FsY0NvbXBvbmVudC5wcm90b3R5cGUuY29tcG9uZW50RGlkTW91bnQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIHRoaXMub3JkZXJTdGF0ZS5nZXRDdXJyZW50T3JkZXIoKS5waXBlKCgwLCByeGpzXzEuZGVib3VuY2VUaW1lKSgyMDAwKSkuc3Vic2NyaWJlKGZ1bmN0aW9uIChlKSB7IHJldHVybiBfdGhpcy5jYWxjKGUpOyB9KTtcbiAgICB9O1xuICAgIENhbGNDb21wb25lbnQucHJvdG90eXBlLmNhbGMgPSBmdW5jdGlvbiAoZSkge1xuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgcmVzdWx0O1xuICAgICAgICAgICAgcmV0dXJuIF9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfYSkge1xuICAgICAgICAgICAgICAgIHN3aXRjaCAoX2EubGFiZWwpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAwOiByZXR1cm4gWzQgLyp5aWVsZCovLCB0aGlzLm9yZGVyU2VydmljZS5jYWxjT3JkZXIoZSldO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBfYS5zZW50KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN0YXRlKGZ1bmN0aW9uICgpIHsgcmV0dXJuICh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JkZXI6IHJlc3VsdFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7IH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFsyIC8qcmV0dXJuKi9dO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIENhbGNDb21wb25lbnQucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuICgoMCwganN4X3J1bnRpbWVfMS5qc3hzKShcImgzXCIsIHsgY2hpbGRyZW46IFsoMCwganN4X3J1bnRpbWVfMS5qc3hzKShcInNtYWxsXCIsIF9fYXNzaWduKHsgY2xhc3NOYW1lOiBcInRleHQtYm9keS1zZWNvbmRhcnlcIiB9LCB7IGNoaWxkcmVuOiBbXCIgTmV0dG86IFwiLCAoMCwganN4X3J1bnRpbWVfMS5qc3gpKEN1cnJlbmN5XzFbXCJkZWZhdWx0XCJdLCB7IHByaWNlOiB0aGlzLnN0YXRlLm9yZGVyLm5ldCB9KSwgXCIgKyBNd1N0LjogXCIsICgwLCBqc3hfcnVudGltZV8xLmpzeCkoQ3VycmVuY3lfMVtcImRlZmF1bHRcIl0sIHsgcHJpY2U6IHRoaXMuc3RhdGUub3JkZXIudmF0IH0pLCBcIiA9XCJdIH0pKSwgXCIgQnJ1dHRvOiBcIiwgKDAsIGpzeF9ydW50aW1lXzEuanN4KShDdXJyZW5jeV8xW1wiZGVmYXVsdFwiXSwgeyBwcmljZTogdGhpcy5zdGF0ZS5vcmRlci5ncm9zcyB9KV0gfSkpO1xuICAgIH07XG4gICAgcmV0dXJuIENhbGNDb21wb25lbnQ7XG59KHJlYWN0XzFbXCJkZWZhdWx0XCJdLkNvbXBvbmVudCkpO1xuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBDYWxjQ29tcG9uZW50O1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19jcmVhdGVCaW5kaW5nID0gKHRoaXMgJiYgdGhpcy5fX2NyZWF0ZUJpbmRpbmcpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICB2YXIgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobSwgayk7XG4gICAgaWYgKCFkZXNjIHx8IChcImdldFwiIGluIGRlc2MgPyAhbS5fX2VzTW9kdWxlIDogZGVzYy53cml0YWJsZSB8fCBkZXNjLmNvbmZpZ3VyYWJsZSkpIHtcbiAgICAgIGRlc2MgPSB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24oKSB7IHJldHVybiBtW2tdOyB9IH07XG4gICAgfVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBrMiwgZGVzYyk7XG59KSA6IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgb1trMl0gPSBtW2tdO1xufSkpO1xudmFyIF9fc2V0TW9kdWxlRGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19zZXRNb2R1bGVEZWZhdWx0KSB8fCAoT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCB2KSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIFwiZGVmYXVsdFwiLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2IH0pO1xufSkgOiBmdW5jdGlvbihvLCB2KSB7XG4gICAgb1tcImRlZmF1bHRcIl0gPSB2O1xufSk7XG52YXIgX19pbXBvcnRTdGFyID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydFN0YXIpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICBpZiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSByZXR1cm4gbW9kO1xuICAgIHZhciByZXN1bHQgPSB7fTtcbiAgICBpZiAobW9kICE9IG51bGwpIGZvciAodmFyIGsgaW4gbW9kKSBpZiAoayAhPT0gXCJkZWZhdWx0XCIgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1vZCwgaykpIF9fY3JlYXRlQmluZGluZyhyZXN1bHQsIG1vZCwgayk7XG4gICAgX19zZXRNb2R1bGVEZWZhdWx0KHJlc3VsdCwgbW9kKTtcbiAgICByZXR1cm4gcmVzdWx0O1xufTtcbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG52YXIganN4X3J1bnRpbWVfMSA9IHJlcXVpcmUoXCJyZWFjdC9qc3gtcnVudGltZVwiKTtcbnZhciBQcm9wVHlwZXMgPSBfX2ltcG9ydFN0YXIocmVxdWlyZShcInByb3AtdHlwZXNcIikpO1xudmFyIGFkZHJlc3NfMSA9IHJlcXVpcmUoXCIuLi8uLi9tb2RlbC9hZGRyZXNzXCIpO1xudmFyIEFkZHJlc3NEZXRhaWwgPSBmdW5jdGlvbiAoX2EpIHtcbiAgICB2YXIgYWRkcmVzcyA9IF9hLmFkZHJlc3M7XG4gICAgcmV0dXJuICgoMCwganN4X3J1bnRpbWVfMS5qc3hzKShcInNtYWxsXCIsIHsgY2hpbGRyZW46IFthZGRyZXNzLmNvbXBhbnksIFwiIFwiLCBhZGRyZXNzLmZpcnN0bmFtZSwgXCIgXCIsIGFkZHJlc3MubGFzdG5hbWUsIFwiIFwiLCBhZGRyZXNzLnN0cmVldCwgXCIgXCIsIGFkZHJlc3MuaG91c2VOdW1iZXIsIFwiIFwiLCBhZGRyZXNzLmNvdW50cnksIFwiIFwiLCBhZGRyZXNzLnppcCwgXCIgXCIsIGFkZHJlc3MuY2l0eV0gfSkpO1xufTtcbkFkZHJlc3NEZXRhaWwucHJvcFR5cGVzID0ge1xuICAgIGFkZHJlc3M6IFByb3BUeXBlcy5pbnN0YW5jZU9mKGFkZHJlc3NfMS5BZGRyZXNzKVxufTtcbmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gQWRkcmVzc0RldGFpbDtcbiIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9fYXNzaWduID0gKHRoaXMgJiYgdGhpcy5fX2Fzc2lnbikgfHwgZnVuY3Rpb24gKCkge1xuICAgIF9fYXNzaWduID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbih0KSB7XG4gICAgICAgIGZvciAodmFyIHMsIGkgPSAxLCBuID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IG47IGkrKykge1xuICAgICAgICAgICAgcyA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSlcbiAgICAgICAgICAgICAgICB0W3BdID0gc1twXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdDtcbiAgICB9O1xuICAgIHJldHVybiBfX2Fzc2lnbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xufTtcbnZhciBfX2NyZWF0ZUJpbmRpbmcgPSAodGhpcyAmJiB0aGlzLl9fY3JlYXRlQmluZGluZykgfHwgKE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihtLCBrKTtcbiAgICBpZiAoIWRlc2MgfHwgKFwiZ2V0XCIgaW4gZGVzYyA/ICFtLl9fZXNNb2R1bGUgOiBkZXNjLndyaXRhYmxlIHx8IGRlc2MuY29uZmlndXJhYmxlKSkge1xuICAgICAgZGVzYyA9IHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIG1ba107IH0gfTtcbiAgICB9XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIGsyLCBkZXNjKTtcbn0pIDogKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICBvW2syXSA9IG1ba107XG59KSk7XG52YXIgX19zZXRNb2R1bGVEZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX3NldE1vZHVsZURlZmF1bHQpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIHYpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgXCJkZWZhdWx0XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHYgfSk7XG59KSA6IGZ1bmN0aW9uKG8sIHYpIHtcbiAgICBvW1wiZGVmYXVsdFwiXSA9IHY7XG59KTtcbnZhciBfX2ltcG9ydFN0YXIgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0U3RhcikgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIGlmIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpIHJldHVybiBtb2Q7XG4gICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgIGlmIChtb2QgIT0gbnVsbCkgZm9yICh2YXIgayBpbiBtb2QpIGlmIChrICE9PSBcImRlZmF1bHRcIiAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobW9kLCBrKSkgX19jcmVhdGVCaW5kaW5nKHJlc3VsdCwgbW9kLCBrKTtcbiAgICBfX3NldE1vZHVsZURlZmF1bHQocmVzdWx0LCBtb2QpO1xuICAgIHJldHVybiByZXN1bHQ7XG59O1xudmFyIF9faW1wb3J0RGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnREZWZhdWx0KSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgcmV0dXJuIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpID8gbW9kIDogeyBcImRlZmF1bHRcIjogbW9kIH07XG59O1xuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbnZhciBqc3hfcnVudGltZV8xID0gcmVxdWlyZShcInJlYWN0L2pzeC1ydW50aW1lXCIpO1xudmFyIHJlYWN0XzEgPSByZXF1aXJlKFwicmVhY3RcIik7XG52YXIgbmljZV9tb2RhbF9yZWFjdF8xID0gX19pbXBvcnRTdGFyKHJlcXVpcmUoXCJAZWJheS9uaWNlLW1vZGFsLXJlYWN0XCIpKTtcbnZhciBCdXR0b25fMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiLi4vYmFzZS9CdXR0b25cIikpO1xudmFyIHZhbGlkYXRvcl9hanY2XzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIkByanNmL3ZhbGlkYXRvci1hanY2XCIpKTtcbnZhciBjb3JlXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIkByanNmL2NvcmVcIikpO1xudmFyIGNvdW50cnlfMSA9IHJlcXVpcmUoXCIuLi8uLi9zZXJ2aWNlcy9jb3VudHJ5XCIpO1xudmFyIGZsb3diaXRlX3JlYWN0XzEgPSByZXF1aXJlKFwiZmxvd2JpdGUtcmVhY3RcIik7XG52YXIgQWRkcmVzc2RpdiA9IG5pY2VfbW9kYWxfcmVhY3RfMVtcImRlZmF1bHRcIl0uY3JlYXRlKGZ1bmN0aW9uIChfYSkge1xuICAgIHZhciB0aXRsZSA9IF9hLnRpdGxlLCBhY3Rpb24gPSBfYS5hY3Rpb24sIGFkZHJlc3MgPSBfYS5hZGRyZXNzLCBzaG9wID0gX2Euc2hvcDtcbiAgICB2YXIgY291bnRyeV9hcGkgPSBuZXcgY291bnRyeV8xLkNvdW50cnlTZXJ2aWNlKCk7XG4gICAgdmFyIG1vZGFsID0gKDAsIG5pY2VfbW9kYWxfcmVhY3RfMS51c2VNb2RhbCkoKTtcbiAgICB2YXIgX2IgPSAoMCwgcmVhY3RfMS51c2VTdGF0ZSkoe30pLCBmb3JtRGF0YSA9IF9iWzBdLCBzZXRGb3JtRGF0YSA9IF9iWzFdO1xuICAgIHZhciBfYyA9ICgwLCByZWFjdF8xLnVzZVN0YXRlKSh7fSksIHNjaGVtYSA9IF9jWzBdLCBzZXRTY2hlbWEgPSBfY1sxXTtcbiAgICAoMCwgcmVhY3RfMS51c2VFZmZlY3QpKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKGFkZHJlc3MpIHtcbiAgICAgICAgICAgIHNldEZvcm1EYXRhKHtcbiAgICAgICAgICAgICAgICBlbWFpbDogYWRkcmVzcy5lbWFpbCxcbiAgICAgICAgICAgICAgICBmaXJzdG5hbWU6IGFkZHJlc3MuZmlyc3RuYW1lLFxuICAgICAgICAgICAgICAgIGxhc3RuYW1lOiBhZGRyZXNzLmxhc3RuYW1lLFxuICAgICAgICAgICAgICAgIGNvbXBhbnk6IGFkZHJlc3MuY29tcGFueSxcbiAgICAgICAgICAgICAgICBzdHJlZXQ6IGFkZHJlc3Muc3RyZWV0LFxuICAgICAgICAgICAgICAgIGhvdXNlTnVtYmVyOiBhZGRyZXNzLmhvdXNlTnVtYmVyLFxuICAgICAgICAgICAgICAgIHppcDogYWRkcmVzcy56aXAsXG4gICAgICAgICAgICAgICAgY2l0eTogYWRkcmVzcy5jaXR5LFxuICAgICAgICAgICAgICAgIHBob25lOiBhZGRyZXNzLnBob25lLFxuICAgICAgICAgICAgICAgIGNvdW50cnk6IGFkZHJlc3MuY291bnRyeSxcbiAgICAgICAgICAgICAgICB1c3RpZDogYWRkcmVzcy51c3RpZFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9LCBbYWRkcmVzc10pO1xuICAgICgwLCByZWFjdF8xLnVzZUVmZmVjdCkoZnVuY3Rpb24gKCkge1xuICAgICAgICBjb3VudHJ5X2FwaS5nZXRDb3VudHJ5KHNob3ApLnRoZW4oZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgICAgICAgIHZhciBjb3VudHJ5cyA9IFtdO1xuICAgICAgICAgICAgZGF0YS5mb3JFYWNoKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICAgICAgICAgICAgY291bnRyeXMucHVzaCh7ICd0aXRsZSc6IGl0ZW0uY29kZSwgJ2NvbnN0JzogaXRlbS5jb2RlIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB2YXIgc2NoZW1hID0ge1xuICAgICAgICAgICAgICAgIHRpdGxlOiAnQWRkcmVzcycsXG4gICAgICAgICAgICAgICAgdHlwZTogJ29iamVjdCcsXG4gICAgICAgICAgICAgICAgcmVxdWlyZWQ6IFsnZW1haWwnXSxcbiAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICAgICAgICAgIGVtYWlsOiB7IHR5cGU6ICdzdHJpbmcnLCBmb3JtYXQ6ICdlbWFpbCcsIHRpdGxlOiAnRS1NYWlsJyB9LFxuICAgICAgICAgICAgICAgICAgICBjb21wYW55OiB7IHR5cGU6ICdzdHJpbmcnLCB0aXRsZTogJ0NvbXBhbnknIH0sXG4gICAgICAgICAgICAgICAgICAgIGZpcnN0bmFtZTogeyB0eXBlOiAnc3RyaW5nJywgdGl0bGU6ICdGaXJzdG5hbWUnIH0sXG4gICAgICAgICAgICAgICAgICAgIGxhc3RuYW1lOiB7IHR5cGU6ICdzdHJpbmcnLCB0aXRsZTogJ0xhc3RuYW1lJyB9LFxuICAgICAgICAgICAgICAgICAgICBzdHJlZXQ6IHsgdHlwZTogJ3N0cmluZycsIHRpdGxlOiAnU3RyZWV0JyB9LFxuICAgICAgICAgICAgICAgICAgICBob3VzZU51bWJlcjogeyB0eXBlOiAnc3RyaW5nJywgdGl0bGU6ICdIb3VzZW51bWJlcicgfSxcbiAgICAgICAgICAgICAgICAgICAgemlwOiB7IHR5cGU6ICdzdHJpbmcnLCB0aXRsZTogJ1ppcCcgfSxcbiAgICAgICAgICAgICAgICAgICAgY2l0eTogeyB0eXBlOiAnc3RyaW5nJywgdGl0bGU6ICdDaXR5JyB9LFxuICAgICAgICAgICAgICAgICAgICBwaG9uZTogeyB0eXBlOiAnc3RyaW5nJywgdGl0bGU6ICdQaG9uZScgfSxcbiAgICAgICAgICAgICAgICAgICAgdXN0aWQ6IHsgdHlwZTogJ3N0cmluZycsIHRpdGxlOiAnVXN0SWQnIH0sXG4gICAgICAgICAgICAgICAgICAgIGNvdW50cnk6IHsgdHlwZTogJ3N0cmluZycsIHRpdGxlOiAnQ291bnRyeScsIG9uZU9mOiBjb3VudHJ5cyB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHNldFNjaGVtYShzY2hlbWEpO1xuICAgICAgICB9KTtcbiAgICB9LCBbXSk7XG4gICAgdmFyIHVpU2NoZW1hID0ge1xuICAgICAgICBcInVpOnN1Ym1pdEJ1dHRvbk9wdGlvbnNcIjoge1xuICAgICAgICAgICAgXCJzdWJtaXRUZXh0XCI6IFwiU2F2ZVwiLFxuICAgICAgICAgICAgXCJub3JlbmRlclwiOiB0cnVlLFxuICAgICAgICAgICAgXCJwcm9wc1wiOiB7XG4gICAgICAgICAgICAgICAgXCJkaXNhYmxlZFwiOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBcImNsYXNzTmFtZVwiOiBcImJ0biBidG4taW5mb1wiXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiAoKDAsIGpzeF9ydW50aW1lXzEuanN4cykoZmxvd2JpdGVfcmVhY3RfMS5Nb2RhbCwgX19hc3NpZ24oeyBzaG93OiBtb2RhbC52aXNpYmxlLCBvbkNsb3NlOiBmdW5jdGlvbiAoKSB7IHJldHVybiBtb2RhbC5yZW1vdmUoKTsgfSB9LCB7IGNoaWxkcmVuOiBbKDAsIGpzeF9ydW50aW1lXzEuanN4KShmbG93Yml0ZV9yZWFjdF8xLk1vZGFsLkhlYWRlciwgeyBjaGlsZHJlbjogKDAsIGpzeF9ydW50aW1lXzEuanN4KShcImRpdlwiLCB7IGNoaWxkcmVuOiB0aXRsZSB9KSB9KSwgKDAsIGpzeF9ydW50aW1lXzEuanN4KShmbG93Yml0ZV9yZWFjdF8xLk1vZGFsLkJvZHksIHsgY2hpbGRyZW46IGFjdGlvbiA9PT0gXCJTYXZlXCIgJiYgKCgwLCBqc3hfcnVudGltZV8xLmpzeCkoY29yZV8xW1wiZGVmYXVsdFwiXSwgeyBzY2hlbWE6IHNjaGVtYSwgZm9ybURhdGE6IGZvcm1EYXRhLCB1aVNjaGVtYTogdWlTY2hlbWEsIHZhbGlkYXRvcjogdmFsaWRhdG9yX2FqdjZfMVtcImRlZmF1bHRcIl0sIG9uQ2hhbmdlOiBmdW5jdGlvbiAoZSkgeyByZXR1cm4gc2V0Rm9ybURhdGEoZS5mb3JtRGF0YSk7IH0gfSkpIH0pLCAoMCwganN4X3J1bnRpbWVfMS5qc3hzKShmbG93Yml0ZV9yZWFjdF8xLk1vZGFsLkZvb3RlciwgeyBjaGlsZHJlbjogWygwLCBqc3hfcnVudGltZV8xLmpzeCkoQnV0dG9uXzFbXCJkZWZhdWx0XCJdLCB7IHR5cGU6IDMsIHZhcmlhbnQ6IFwic3VjY2Vzc1wiLCBvbkNsaWNrOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFjdGlvbiA9PT0gXCJTYXZlXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZvcm1EYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RhbC5yZXNvbHZlKGZvcm1EYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGFsLnJlbW92ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RhbC5yZXNvbHZlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGFsLnJlbW92ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0gfSksICgwLCBqc3hfcnVudGltZV8xLmpzeCkoQnV0dG9uXzFbXCJkZWZhdWx0XCJdLCB7IHR5cGU6IDQsIHZhcmlhbnQ6IFwid2FybmluZ1wiLCBvbkNsaWNrOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kYWwucmVtb3ZlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IH0pXSB9KV0gfSkpKTtcbn0pO1xuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBBZGRyZXNzZGl2O1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19hc3NpZ24gPSAodGhpcyAmJiB0aGlzLl9fYXNzaWduKSB8fCBmdW5jdGlvbiAoKSB7XG4gICAgX19hc3NpZ24gPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uKHQpIHtcbiAgICAgICAgZm9yICh2YXIgcywgaSA9IDEsIG4gPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbjsgaSsrKSB7XG4gICAgICAgICAgICBzID0gYXJndW1lbnRzW2ldO1xuICAgICAgICAgICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApKVxuICAgICAgICAgICAgICAgIHRbcF0gPSBzW3BdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0O1xuICAgIH07XG4gICAgcmV0dXJuIF9fYXNzaWduLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG59O1xudmFyIF9fY3JlYXRlQmluZGluZyA9ICh0aGlzICYmIHRoaXMuX19jcmVhdGVCaW5kaW5nKSB8fCAoT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgdmFyIGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG0sIGspO1xuICAgIGlmICghZGVzYyB8fCAoXCJnZXRcIiBpbiBkZXNjID8gIW0uX19lc01vZHVsZSA6IGRlc2Mud3JpdGFibGUgfHwgZGVzYy5jb25maWd1cmFibGUpKSB7XG4gICAgICBkZXNjID0geyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uKCkgeyByZXR1cm4gbVtrXTsgfSB9O1xuICAgIH1cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgazIsIGRlc2MpO1xufSkgOiAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIG9bazJdID0gbVtrXTtcbn0pKTtcbnZhciBfX3NldE1vZHVsZURlZmF1bHQgPSAodGhpcyAmJiB0aGlzLl9fc2V0TW9kdWxlRGVmYXVsdCkgfHwgKE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgdikge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBcImRlZmF1bHRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdiB9KTtcbn0pIDogZnVuY3Rpb24obywgdikge1xuICAgIG9bXCJkZWZhdWx0XCJdID0gdjtcbn0pO1xudmFyIF9faW1wb3J0U3RhciA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnRTdGFyKSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgaWYgKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgcmV0dXJuIG1vZDtcbiAgICB2YXIgcmVzdWx0ID0ge307XG4gICAgaWYgKG1vZCAhPSBudWxsKSBmb3IgKHZhciBrIGluIG1vZCkgaWYgKGsgIT09IFwiZGVmYXVsdFwiICYmIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChtb2QsIGspKSBfX2NyZWF0ZUJpbmRpbmcocmVzdWx0LCBtb2QsIGspO1xuICAgIF9fc2V0TW9kdWxlRGVmYXVsdChyZXN1bHQsIG1vZCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbn07XG52YXIgX19pbXBvcnREZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydERlZmF1bHQpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICByZXR1cm4gKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgPyBtb2QgOiB7IFwiZGVmYXVsdFwiOiBtb2QgfTtcbn07XG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xudmFyIGpzeF9ydW50aW1lXzEgPSByZXF1aXJlKFwicmVhY3QvanN4LXJ1bnRpbWVcIik7XG52YXIgUHJvcFR5cGVzID0gX19pbXBvcnRTdGFyKHJlcXVpcmUoXCJwcm9wLXR5cGVzXCIpKTtcbnZhciBCdXR0b25fMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiLi4vYmFzZS9CdXR0b25cIikpO1xudmFyIEFkZHJlc3NNb2RhbF8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCIuL0FkZHJlc3NNb2RhbFwiKSk7XG52YXIgcmVhY3RfMSA9IHJlcXVpcmUoXCJyZWFjdFwiKTtcbnZhciBuaWNlX21vZGFsX3JlYWN0XzEgPSByZXF1aXJlKFwiQGViYXkvbmljZS1tb2RhbC1yZWFjdFwiKTtcbnZhciBhZGRyZXNzXzEgPSByZXF1aXJlKFwiLi4vLi4vbW9kZWwvYWRkcmVzc1wiKTtcbnZhciBzaG9wXzEgPSByZXF1aXJlKFwiLi4vLi4vbW9kZWwvc2hvcFwiKTtcbnZhciBBZGRyZXNzTW9kYWxDb21wb25lbnQgPSBmdW5jdGlvbiAoX2EpIHtcbiAgICB2YXIgaGFuZGxlQWRkID0gX2EuaGFuZGxlQWRkLCBoYW5kbGVFZGl0ID0gX2EuaGFuZGxlRWRpdCwgYWRkcmVzcyA9IF9hLmFkZHJlc3MsIHNob3AgPSBfYS5zaG9wO1xuICAgIHZhciBhZGRyZXNzTW9kYWwgPSAoMCwgbmljZV9tb2RhbF9yZWFjdF8xLnVzZU1vZGFsKShBZGRyZXNzTW9kYWxfMVtcImRlZmF1bHRcIl0pO1xuICAgIHZhciBzaG93QWRkTW9kYWwgPSAoMCwgcmVhY3RfMS51c2VDYWxsYmFjaykoZnVuY3Rpb24gKCkge1xuICAgICAgICBhZGRyZXNzTW9kYWwuc2hvdyh7IHRpdGxlOiAnQWRkIEFkZHJlc3MnLCBhY3Rpb246ICdTYXZlJywgc2hvcDogc2hvcCB9KS50aGVuKGZ1bmN0aW9uIChmb3JtRGF0YSkge1xuICAgICAgICAgICAgYWRkQWRkcmVzcyhmb3JtRGF0YSk7XG4gICAgICAgIH0pO1xuICAgIH0sIFthZGRyZXNzTW9kYWxdKTtcbiAgICB2YXIgc2hvd0VkaXRNb2RhbCA9ICgwLCByZWFjdF8xLnVzZUNhbGxiYWNrKShmdW5jdGlvbiAoYWRkcmVzcykge1xuICAgICAgICBhZGRyZXNzTW9kYWwuc2hvdyh7IHRpdGxlOiAnRWRpdCBBZGRyZXNzJywgYWN0aW9uOiAnU2F2ZScsIGFkZHJlc3M6IGFkZHJlc3MsIHNob3A6IHNob3AgfSkudGhlbihmdW5jdGlvbiAoZm9ybURhdGEpIHtcbiAgICAgICAgICAgIHVwZGF0ZUFkZHJlc3MoZm9ybURhdGEpO1xuICAgICAgICB9KTtcbiAgICB9LCBbYWRkcmVzc01vZGFsXSk7XG4gICAgdmFyIHVwZGF0ZUFkZHJlc3MgPSBmdW5jdGlvbiAoZm9ybURhdGEpIHtcbiAgICAgICAgYWRkcmVzcy5wYXJzZUZyb21Gb3JtRGF0YShmb3JtRGF0YSk7XG4gICAgICAgIGhhbmRsZUVkaXQoYWRkcmVzcyk7XG4gICAgfTtcbiAgICB2YXIgYWRkQWRkcmVzcyA9IGZ1bmN0aW9uIChmb3JtRGF0YSkge1xuICAgICAgICBhZGRyZXNzID0gbmV3IGFkZHJlc3NfMS5BZGRyZXNzKCk7XG4gICAgICAgIGFkZHJlc3MucGFyc2VGcm9tRm9ybURhdGEoZm9ybURhdGEpO1xuICAgICAgICBoYW5kbGVBZGQoYWRkcmVzcyk7XG4gICAgfTtcbiAgICByZXR1cm4gKCgwLCBqc3hfcnVudGltZV8xLmpzeHMpKFwiZGl2XCIsIF9fYXNzaWduKHsgY2xhc3NOYW1lOiAnZmxleCBnYXAtMScgfSwgeyBjaGlsZHJlbjogWygwLCBqc3hfcnVudGltZV8xLmpzeCkoQnV0dG9uXzFbXCJkZWZhdWx0XCJdLCB7IHR5cGU6IDEsIHZhcmlhbnQ6IFwic3VjY2Vzc1wiLCBvbkNsaWNrOiBzaG93QWRkTW9kYWwgfSksICgwLCBqc3hfcnVudGltZV8xLmpzeCkoQnV0dG9uXzFbXCJkZWZhdWx0XCJdLCB7IHR5cGU6IDIsIHZhcmlhbnQ6IFwiaW5mb1wiLCBvbkNsaWNrOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIHNob3dFZGl0TW9kYWwoYWRkcmVzcyk7XG4gICAgICAgICAgICAgICAgfSB9KV0gfSkpKTtcbn07XG5BZGRyZXNzTW9kYWxDb21wb25lbnQucHJvcFR5cGVzID0ge1xuICAgIGhhbmRsZUFkZDogUHJvcFR5cGVzLmZ1bmMsXG4gICAgaGFuZGxlRWRpdDogUHJvcFR5cGVzLmZ1bmMsXG4gICAgYWRkcmVzczogUHJvcFR5cGVzLmluc3RhbmNlT2YoYWRkcmVzc18xLkFkZHJlc3MpLFxuICAgIHNob3A6IFByb3BUeXBlcy5pbnN0YW5jZU9mKHNob3BfMS5TaG9wKVxufTtcbmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gQWRkcmVzc01vZGFsQ29tcG9uZW50O1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19hc3NpZ24gPSAodGhpcyAmJiB0aGlzLl9fYXNzaWduKSB8fCBmdW5jdGlvbiAoKSB7XG4gICAgX19hc3NpZ24gPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uKHQpIHtcbiAgICAgICAgZm9yICh2YXIgcywgaSA9IDEsIG4gPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbjsgaSsrKSB7XG4gICAgICAgICAgICBzID0gYXJndW1lbnRzW2ldO1xuICAgICAgICAgICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApKVxuICAgICAgICAgICAgICAgIHRbcF0gPSBzW3BdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0O1xuICAgIH07XG4gICAgcmV0dXJuIF9fYXNzaWduLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG59O1xudmFyIF9fY3JlYXRlQmluZGluZyA9ICh0aGlzICYmIHRoaXMuX19jcmVhdGVCaW5kaW5nKSB8fCAoT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgdmFyIGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG0sIGspO1xuICAgIGlmICghZGVzYyB8fCAoXCJnZXRcIiBpbiBkZXNjID8gIW0uX19lc01vZHVsZSA6IGRlc2Mud3JpdGFibGUgfHwgZGVzYy5jb25maWd1cmFibGUpKSB7XG4gICAgICBkZXNjID0geyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uKCkgeyByZXR1cm4gbVtrXTsgfSB9O1xuICAgIH1cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgazIsIGRlc2MpO1xufSkgOiAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIG9bazJdID0gbVtrXTtcbn0pKTtcbnZhciBfX3NldE1vZHVsZURlZmF1bHQgPSAodGhpcyAmJiB0aGlzLl9fc2V0TW9kdWxlRGVmYXVsdCkgfHwgKE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgdikge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBcImRlZmF1bHRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdiB9KTtcbn0pIDogZnVuY3Rpb24obywgdikge1xuICAgIG9bXCJkZWZhdWx0XCJdID0gdjtcbn0pO1xudmFyIF9faW1wb3J0U3RhciA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnRTdGFyKSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgaWYgKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgcmV0dXJuIG1vZDtcbiAgICB2YXIgcmVzdWx0ID0ge307XG4gICAgaWYgKG1vZCAhPSBudWxsKSBmb3IgKHZhciBrIGluIG1vZCkgaWYgKGsgIT09IFwiZGVmYXVsdFwiICYmIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChtb2QsIGspKSBfX2NyZWF0ZUJpbmRpbmcocmVzdWx0LCBtb2QsIGspO1xuICAgIF9fc2V0TW9kdWxlRGVmYXVsdChyZXN1bHQsIG1vZCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbn07XG52YXIgX19hd2FpdGVyID0gKHRoaXMgJiYgdGhpcy5fX2F3YWl0ZXIpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcbiAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xuICAgIH0pO1xufTtcbnZhciBfX2dlbmVyYXRvciA9ICh0aGlzICYmIHRoaXMuX19nZW5lcmF0b3IpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBib2R5KSB7XG4gICAgdmFyIF8gPSB7IGxhYmVsOiAwLCBzZW50OiBmdW5jdGlvbigpIHsgaWYgKHRbMF0gJiAxKSB0aHJvdyB0WzFdOyByZXR1cm4gdFsxXTsgfSwgdHJ5czogW10sIG9wczogW10gfSwgZiwgeSwgdCwgZztcbiAgICByZXR1cm4gZyA9IHsgbmV4dDogdmVyYigwKSwgXCJ0aHJvd1wiOiB2ZXJiKDEpLCBcInJldHVyblwiOiB2ZXJiKDIpIH0sIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiAoZ1tTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzOyB9KSwgZztcbiAgICBmdW5jdGlvbiB2ZXJiKG4pIHsgcmV0dXJuIGZ1bmN0aW9uICh2KSB7IHJldHVybiBzdGVwKFtuLCB2XSk7IH07IH1cbiAgICBmdW5jdGlvbiBzdGVwKG9wKSB7XG4gICAgICAgIGlmIChmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLlwiKTtcbiAgICAgICAgd2hpbGUgKF8pIHRyeSB7XG4gICAgICAgICAgICBpZiAoZiA9IDEsIHkgJiYgKHQgPSBvcFswXSAmIDIgPyB5W1wicmV0dXJuXCJdIDogb3BbMF0gPyB5W1widGhyb3dcIl0gfHwgKCh0ID0geVtcInJldHVyblwiXSkgJiYgdC5jYWxsKHkpLCAwKSA6IHkubmV4dCkgJiYgISh0ID0gdC5jYWxsKHksIG9wWzFdKSkuZG9uZSkgcmV0dXJuIHQ7XG4gICAgICAgICAgICBpZiAoeSA9IDAsIHQpIG9wID0gW29wWzBdICYgMiwgdC52YWx1ZV07XG4gICAgICAgICAgICBzd2l0Y2ggKG9wWzBdKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAwOiBjYXNlIDE6IHQgPSBvcDsgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSA0OiBfLmxhYmVsKys7IHJldHVybiB7IHZhbHVlOiBvcFsxXSwgZG9uZTogZmFsc2UgfTtcbiAgICAgICAgICAgICAgICBjYXNlIDU6IF8ubGFiZWwrKzsgeSA9IG9wWzFdOyBvcCA9IFswXTsgY29udGludWU7XG4gICAgICAgICAgICAgICAgY2FzZSA3OiBvcCA9IF8ub3BzLnBvcCgpOyBfLnRyeXMucG9wKCk7IGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIGlmICghKHQgPSBfLnRyeXMsIHQgPSB0Lmxlbmd0aCA+IDAgJiYgdFt0Lmxlbmd0aCAtIDFdKSAmJiAob3BbMF0gPT09IDYgfHwgb3BbMF0gPT09IDIpKSB7IF8gPSAwOyBjb250aW51ZTsgfVxuICAgICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDMgJiYgKCF0IHx8IChvcFsxXSA+IHRbMF0gJiYgb3BbMV0gPCB0WzNdKSkpIHsgXy5sYWJlbCA9IG9wWzFdOyBicmVhazsgfVxuICAgICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDYgJiYgXy5sYWJlbCA8IHRbMV0pIHsgXy5sYWJlbCA9IHRbMV07IHQgPSBvcDsgYnJlYWs7IH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHQgJiYgXy5sYWJlbCA8IHRbMl0pIHsgXy5sYWJlbCA9IHRbMl07IF8ub3BzLnB1c2gob3ApOyBicmVhazsgfVxuICAgICAgICAgICAgICAgICAgICBpZiAodFsyXSkgXy5vcHMucG9wKCk7XG4gICAgICAgICAgICAgICAgICAgIF8udHJ5cy5wb3AoKTsgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvcCA9IGJvZHkuY2FsbCh0aGlzQXJnLCBfKTtcbiAgICAgICAgfSBjYXRjaCAoZSkgeyBvcCA9IFs2LCBlXTsgeSA9IDA7IH0gZmluYWxseSB7IGYgPSB0ID0gMDsgfVxuICAgICAgICBpZiAob3BbMF0gJiA1KSB0aHJvdyBvcFsxXTsgcmV0dXJuIHsgdmFsdWU6IG9wWzBdID8gb3BbMV0gOiB2b2lkIDAsIGRvbmU6IHRydWUgfTtcbiAgICB9XG59O1xudmFyIF9faW1wb3J0RGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnREZWZhdWx0KSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgcmV0dXJuIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpID8gbW9kIDogeyBcImRlZmF1bHRcIjogbW9kIH07XG59O1xuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbnZhciBqc3hfcnVudGltZV8xID0gcmVxdWlyZShcInJlYWN0L2pzeC1ydW50aW1lXCIpO1xudmFyIFByb3BUeXBlcyA9IF9faW1wb3J0U3RhcihyZXF1aXJlKFwicHJvcC10eXBlc1wiKSk7XG52YXIgcmVhY3Rfc2VsZWN0X2FzeW5jX3BhZ2luYXRlXzEgPSByZXF1aXJlKFwicmVhY3Qtc2VsZWN0LWFzeW5jLXBhZ2luYXRlXCIpO1xudmFyIGNvbnRhY3RfMSA9IHJlcXVpcmUoXCIuLi8uLi9tb2RlbC9jb250YWN0XCIpO1xudmFyIGFkZHJlc3NfMSA9IHJlcXVpcmUoXCIuLi8uLi9tb2RlbC9hZGRyZXNzXCIpO1xudmFyIHRzeXJpbmdlXzEgPSByZXF1aXJlKFwidHN5cmluZ2VcIik7XG52YXIgcmVhY3RfMSA9IHJlcXVpcmUoXCJyZWFjdFwiKTtcbnZhciBvcmRlcl8xID0gcmVxdWlyZShcIi4uLy4uL3N0YXRlL29yZGVyXCIpO1xudmFyIGFkZHJlc3NfMiA9IHJlcXVpcmUoXCIuLi8uLi9zZXJ2aWNlcy9hZGRyZXNzXCIpO1xudmFyIEFkZHJlc3NNb2RhbENvbXBvbmVudF8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCIuL0FkZHJlc3NNb2RhbENvbXBvbmVudFwiKSk7XG52YXIgU2VsZWN0TGFiZWxfMSA9IHJlcXVpcmUoXCIuLi9iYXNlL1NlbGVjdExhYmVsXCIpO1xudmFyIEFkZHJlc3NEZXRhaWxfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiLi9BZGRyZXNzRGV0YWlsXCIpKTtcbnZhciBzaG9wXzEgPSByZXF1aXJlKFwiLi4vLi4vbW9kZWwvc2hvcFwiKTtcbnZhciBBZGRyZXNzU2VsZWN0ID0gZnVuY3Rpb24gKF9hKSB7XG4gICAgdmFyIGFkZHJlc3MgPSBfYS5hZGRyZXNzLCBjb250YWN0ID0gX2EuY29udGFjdCwgdHlwZSA9IF9hLnR5cGUsIGNoYW5nZUFkZHJlc3MgPSBfYS5jaGFuZ2VBZGRyZXNzLCBuYW1lID0gX2EubmFtZSwgc2hvcCA9IF9hLnNob3A7XG4gICAgdmFyIF9iID0gKDAsIHJlYWN0XzEudXNlU3RhdGUpKG51bGwpLCBjb250YWN0VXVpZCA9IF9iWzBdLCBzZXRDb250YWN0VXVpZCA9IF9iWzFdO1xuICAgIHZhciBfYyA9ICgwLCByZWFjdF8xLnVzZVN0YXRlKShudWxsKSwgbG9jYWxBZGRyZXNzID0gX2NbMF0sIHNldExvY2FsQWRkcmVzcyA9IF9jWzFdO1xuICAgIHZhciBhZGRyZXNzX3NlcnZpY2UgPSBuZXcgYWRkcmVzc18yLkFkZHJlc3NTZXJ2aWNlKCk7XG4gICAgdmFyIG9yZGVyU3RhdGUgPSB0c3lyaW5nZV8xLmNvbnRhaW5lci5yZXNvbHZlKG9yZGVyXzEuT3JkZXJTdGF0ZSk7XG4gICAgKDAsIHJlYWN0XzEudXNlRWZmZWN0KShmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmIChjb250YWN0LnV1aWQgIT0gXCJcIikge1xuICAgICAgICAgICAgc2V0Q29udGFjdFV1aWQoY29udGFjdC51dWlkKTtcbiAgICAgICAgfVxuICAgIH0sIFtjb250YWN0LnV1aWRdKTtcbiAgICAoMCwgcmVhY3RfMS51c2VFZmZlY3QpKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgc2V0TG9jYWxBZGRyZXNzKGFkZHJlc3MpO1xuICAgIH0sIFthZGRyZXNzXSk7XG4gICAgdmFyIG9yZGVyID0gdHN5cmluZ2VfMS5jb250YWluZXIucmVzb2x2ZShvcmRlcl8xLk9yZGVyU3RhdGUpO1xuICAgIHZhciBsb2FkT3B0aW9ucyA9IGZ1bmN0aW9uIChzZWFyY2hRdWVyeSwgbG9hZGVkT3B0aW9ucykgeyByZXR1cm4gX19hd2FpdGVyKHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGRhdGE7XG4gICAgICAgIHJldHVybiBfX2dlbmVyYXRvcih0aGlzLCBmdW5jdGlvbiAoX2EpIHtcbiAgICAgICAgICAgIHN3aXRjaCAoX2EubGFiZWwpIHtcbiAgICAgICAgICAgICAgICBjYXNlIDA6IHJldHVybiBbNCAvKnlpZWxkKi8sIGFkZHJlc3Nfc2VydmljZS5nZXRDb250YWN0QWRkcmVzcyhjb250YWN0LnV1aWQsIHR5cGUpXTtcbiAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgIGRhdGEgPSBfYS5zZW50KCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbMiAvKnJldHVybiovLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uczogZGF0YSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNNb3JlOiBmYWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgfV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0pOyB9O1xuICAgIHZhciBoYW5kbGVBZGQgPSBmdW5jdGlvbiAoYWRkcmVzcykge1xuICAgICAgICBhZGRyZXNzLnR5cGUgPSB0eXBlO1xuICAgICAgICBhZGRyZXNzLmNvbnRhY3QudXVpZCA9IGNvbnRhY3QudXVpZDtcbiAgICAgICAgYWRkcmVzc19zZXJ2aWNlLmNyZWF0ZShhZGRyZXNzKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHNldExvY2FsQWRkcmVzcyhhZGRyZXNzKTtcbiAgICAgICAgICAgIGNoYW5nZUFkZHJlc3MoYWRkcmVzcywgdHlwZSk7XG4gICAgICAgICAgICBzZXRDb250YWN0VXVpZChNYXRoLnJhbmRvbSgpKTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICB2YXIgaGFuZGxlRWRpdCA9IGZ1bmN0aW9uIChhZGRyZXNzKSB7XG4gICAgICAgIGFkZHJlc3MudHlwZSA9IHR5cGU7XG4gICAgICAgIGFkZHJlc3MuY29udGFjdC51dWlkID0gY29udGFjdC51dWlkO1xuICAgICAgICBhZGRyZXNzX3NlcnZpY2UudXBkYXRlKGFkZHJlc3MpLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgc2V0TG9jYWxBZGRyZXNzKGFkZHJlc3MpO1xuICAgICAgICAgICAgY2hhbmdlQWRkcmVzcyhhZGRyZXNzLCB0eXBlKTtcbiAgICAgICAgICAgIHNldENvbnRhY3RVdWlkKE1hdGgucmFuZG9tKCkpO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIHZhciBzZXRBZGRyZXNzSW5PcmRlciA9IGZ1bmN0aW9uIChvcHRpb24pIHtcbiAgICAgICAgc2V0TG9jYWxBZGRyZXNzKG9wdGlvbik7XG4gICAgICAgIGNoYW5nZUFkZHJlc3Mob3B0aW9uLCB0eXBlKTtcbiAgICB9O1xuICAgIHJldHVybiAoKDAsIGpzeF9ydW50aW1lXzEuanN4cykoXCJkaXZcIiwgX19hc3NpZ24oeyBjbGFzc05hbWU6ICdmbGV4IGdhcC0xJyB9LCB7IGNoaWxkcmVuOiBbKDAsIGpzeF9ydW50aW1lXzEuanN4cykoXCJkaXZcIiwgX19hc3NpZ24oeyBjbGFzc05hbWU6ICdmbGV4LTEnIH0sIHsgY2hpbGRyZW46IFsoMCwganN4X3J1bnRpbWVfMS5qc3gpKHJlYWN0X3NlbGVjdF9hc3luY19wYWdpbmF0ZV8xLkFzeW5jUGFnaW5hdGUsIHsgZGVmYXVsdE9wdGlvbnM6IHRydWUsIGRlZmF1bHRWYWx1ZTogYWRkcmVzcywgbG9hZE9wdGlvbnM6IGxvYWRPcHRpb25zLCBnZXRPcHRpb25WYWx1ZTogZnVuY3Rpb24gKG9wdGlvbikgeyByZXR1cm4gb3B0aW9uLnV1aWQ7IH0sIGdldE9wdGlvbkxhYmVsOiBmdW5jdGlvbiAob3B0aW9uKSB7IHJldHVybiBvcHRpb24uZmlyc3RuYW1lICsgJyAnICsgb3B0aW9uLmxhc3RuYW1lOyB9LCBvbkNoYW5nZTogc2V0QWRkcmVzc0luT3JkZXIsIGlzU2VhcmNoYWJsZTogZmFsc2UsIG5hbWU6IG5hbWUsIHBsYWNlaG9sZGVyOiAnJywgY29tcG9uZW50czogeyBDb250cm9sOiBTZWxlY3RMYWJlbF8xLlNlbGVjdExhYmVsIH0gfSwgSlNPTi5zdHJpbmdpZnkoY29udGFjdFV1aWQpKSwgbG9jYWxBZGRyZXNzICYmICgwLCBqc3hfcnVudGltZV8xLmpzeCkoQWRkcmVzc0RldGFpbF8xW1wiZGVmYXVsdFwiXSwgeyBhZGRyZXNzOiBsb2NhbEFkZHJlc3MgfSldIH0pKSwgKDAsIGpzeF9ydW50aW1lXzEuanN4KShcImRpdlwiLCB7IGNoaWxkcmVuOiAoMCwganN4X3J1bnRpbWVfMS5qc3gpKEFkZHJlc3NNb2RhbENvbXBvbmVudF8xW1wiZGVmYXVsdFwiXSwgeyBhZGRyZXNzOiBsb2NhbEFkZHJlc3MsIGhhbmRsZUFkZDogaGFuZGxlQWRkLCBoYW5kbGVFZGl0OiBoYW5kbGVFZGl0LCBzaG9wOiBzaG9wIH0pIH0pXSB9KSkpO1xufTtcbkFkZHJlc3NTZWxlY3QucHJvcFR5cGVzID0ge1xuICAgIGFkZHJlc3M6IFByb3BUeXBlcy5pbnN0YW5jZU9mKGFkZHJlc3NfMS5BZGRyZXNzKSxcbiAgICBjb250YWN0OiBQcm9wVHlwZXMuaW5zdGFuY2VPZihjb250YWN0XzEuQ29udGFjdCksXG4gICAgc2hvcDogUHJvcFR5cGVzLmluc3RhbmNlT2Yoc2hvcF8xLlNob3ApLFxuICAgIHR5cGU6IFByb3BUeXBlcy5udW1iZXIsXG4gICAgY2hhbmdlQWRkcmVzczogUHJvcFR5cGVzLmZ1bmMsXG4gICAgbmFtZTogUHJvcFR5cGVzLnN0cmluZ1xufTtcbmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gQWRkcmVzc1NlbGVjdDtcbiIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9fYXNzaWduID0gKHRoaXMgJiYgdGhpcy5fX2Fzc2lnbikgfHwgZnVuY3Rpb24gKCkge1xuICAgIF9fYXNzaWduID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbih0KSB7XG4gICAgICAgIGZvciAodmFyIHMsIGkgPSAxLCBuID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IG47IGkrKykge1xuICAgICAgICAgICAgcyA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSlcbiAgICAgICAgICAgICAgICB0W3BdID0gc1twXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdDtcbiAgICB9O1xuICAgIHJldHVybiBfX2Fzc2lnbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xufTtcbnZhciBfX2NyZWF0ZUJpbmRpbmcgPSAodGhpcyAmJiB0aGlzLl9fY3JlYXRlQmluZGluZykgfHwgKE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihtLCBrKTtcbiAgICBpZiAoIWRlc2MgfHwgKFwiZ2V0XCIgaW4gZGVzYyA/ICFtLl9fZXNNb2R1bGUgOiBkZXNjLndyaXRhYmxlIHx8IGRlc2MuY29uZmlndXJhYmxlKSkge1xuICAgICAgZGVzYyA9IHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIG1ba107IH0gfTtcbiAgICB9XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIGsyLCBkZXNjKTtcbn0pIDogKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICBvW2syXSA9IG1ba107XG59KSk7XG52YXIgX19zZXRNb2R1bGVEZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX3NldE1vZHVsZURlZmF1bHQpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIHYpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgXCJkZWZhdWx0XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHYgfSk7XG59KSA6IGZ1bmN0aW9uKG8sIHYpIHtcbiAgICBvW1wiZGVmYXVsdFwiXSA9IHY7XG59KTtcbnZhciBfX2ltcG9ydFN0YXIgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0U3RhcikgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIGlmIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpIHJldHVybiBtb2Q7XG4gICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgIGlmIChtb2QgIT0gbnVsbCkgZm9yICh2YXIgayBpbiBtb2QpIGlmIChrICE9PSBcImRlZmF1bHRcIiAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobW9kLCBrKSkgX19jcmVhdGVCaW5kaW5nKHJlc3VsdCwgbW9kLCBrKTtcbiAgICBfX3NldE1vZHVsZURlZmF1bHQocmVzdWx0LCBtb2QpO1xuICAgIHJldHVybiByZXN1bHQ7XG59O1xudmFyIF9faW1wb3J0RGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnREZWZhdWx0KSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgcmV0dXJuIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpID8gbW9kIDogeyBcImRlZmF1bHRcIjogbW9kIH07XG59O1xuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbnZhciBqc3hfcnVudGltZV8xID0gcmVxdWlyZShcInJlYWN0L2pzeC1ydW50aW1lXCIpO1xudmFyIFByb3BUeXBlcyA9IF9faW1wb3J0U3RhcihyZXF1aXJlKFwicHJvcC10eXBlc1wiKSk7XG52YXIgQ29udGFjdFNlbGVjdF8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCIuL0NvbnRhY3RTZWxlY3RcIikpO1xudmFyIEFkZHJlc3NTZWxlY3RfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiLi9BZGRyZXNzU2VsZWN0XCIpKTtcbnZhciBjb250YWN0XzEgPSByZXF1aXJlKFwiLi4vLi4vbW9kZWwvY29udGFjdFwiKTtcbnZhciByZWFjdF8xID0gcmVxdWlyZShcInJlYWN0XCIpO1xudmFyIG9yZGVyXzEgPSByZXF1aXJlKFwiLi4vLi4vc3RhdGUvb3JkZXJcIik7XG52YXIgdHN5cmluZ2VfMSA9IHJlcXVpcmUoXCJ0c3lyaW5nZVwiKTtcbnZhciBBY2NvdW50U2VsZWN0Q29tcG9uZW50XzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIi4uL2FjY291bnQvQWNjb3VudFNlbGVjdENvbXBvbmVudFwiKSk7XG52YXIgb3JkZXJfMiA9IHJlcXVpcmUoXCIuLi8uLi9tb2RlbC9vcmRlclwiKTtcbnZhciBzaG9wXzEgPSByZXF1aXJlKFwiLi4vLi4vbW9kZWwvc2hvcFwiKTtcbnZhciBDb250YWN0Q29tcG9uZW50ID0gZnVuY3Rpb24gKF9hKSB7XG4gICAgdmFyIG9yZGVyID0gX2Eub3JkZXIsIHNob3AgPSBfYS5zaG9wO1xuICAgIHZhciBvcmRlclN0YXRlID0gdHN5cmluZ2VfMS5jb250YWluZXIucmVzb2x2ZShvcmRlcl8xLk9yZGVyU3RhdGUpO1xuICAgIHZhciBfYiA9ICgwLCByZWFjdF8xLnVzZVN0YXRlKShuZXcgY29udGFjdF8xLkNvbnRhY3QoKSksIGNvbnRhY3QgPSBfYlswXSwgc2V0Q29udGFjdCA9IF9iWzFdO1xuICAgIHZhciBjaGFuZ2VBZGRyZXNzID0gZnVuY3Rpb24gKGFkZHJlc3MsIHR5cGUpIHtcbiAgICAgICAgaWYgKHR5cGUgPT0gMSkge1xuICAgICAgICAgICAgb3JkZXJTdGF0ZS5nZXRDdXJyZW50T3JkZXIoKS52YWx1ZS5pbnZvaWNlQWRkcmVzcyA9IGFkZHJlc3M7XG4gICAgICAgICAgICBvcmRlci5pbnZvaWNlQWRkcmVzcyA9IGFkZHJlc3M7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGUgPT0gMikge1xuICAgICAgICAgICAgb3JkZXJTdGF0ZS5nZXRDdXJyZW50T3JkZXIoKS52YWx1ZS5kZWxpdmVyeUFkZHJlc3MgPSBhZGRyZXNzO1xuICAgICAgICAgICAgb3JkZXIuZGVsaXZlcnlBZGRyZXNzID0gYWRkcmVzcztcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZSA9PSAzKSB7XG4gICAgICAgICAgICBvcmRlclN0YXRlLmdldEN1cnJlbnRPcmRlcigpLnZhbHVlLnNlbmRlckFkZHJlc3MgPSBhZGRyZXNzO1xuICAgICAgICAgICAgb3JkZXIuc2VuZGVyQWRkcmVzcyA9IGFkZHJlc3M7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiAoKDAsIGpzeF9ydW50aW1lXzEuanN4cykoanN4X3J1bnRpbWVfMS5GcmFnbWVudCwgeyBjaGlsZHJlbjogWygwLCBqc3hfcnVudGltZV8xLmpzeHMpKFwiZGl2XCIsIF9fYXNzaWduKHsgY2xhc3NOYW1lOiBcImZsZXhcIiB9LCB7IGNoaWxkcmVuOiBbKDAsIGpzeF9ydW50aW1lXzEuanN4KShcImRpdlwiLCBfX2Fzc2lnbih7IGNsYXNzTmFtZTogXCJmbGV4LTFcIiB9LCB7IGNoaWxkcmVuOiAoMCwganN4X3J1bnRpbWVfMS5qc3gpKENvbnRhY3RTZWxlY3RfMVtcImRlZmF1bHRcIl0sIHsgb3JkZXI6IG9yZGVyLCBzaG9wOiBzaG9wLCBvbkNoYW5nZTogc2V0Q29udGFjdCB9KSB9KSksICgwLCBqc3hfcnVudGltZV8xLmpzeCkoXCJkaXZcIiwgX19hc3NpZ24oeyBjbGFzc05hbWU6IFwiZmxleC0xXCIgfSwgeyBjaGlsZHJlbjogKDAsIGpzeF9ydW50aW1lXzEuanN4KShBY2NvdW50U2VsZWN0Q29tcG9uZW50XzFbXCJkZWZhdWx0XCJdLCB7IHNob3A6IHNob3AsIG9yZGVyOiBvcmRlciB9KSB9KSldIH0pKSwgKDAsIGpzeF9ydW50aW1lXzEuanN4cykoXCJkaXZcIiwgX19hc3NpZ24oeyBjbGFzc05hbWU6IFwiZmxleCBnYXAtMVwiIH0sIHsgY2hpbGRyZW46IFsoMCwganN4X3J1bnRpbWVfMS5qc3gpKFwiZGl2XCIsIF9fYXNzaWduKHsgY2xhc3NOYW1lOiBcImZsZXgtMVwiIH0sIHsgY2hpbGRyZW46IG9yZGVyLmNvbnRhY3QudXVpZCAhPSBcIlwiICYmICgwLCBqc3hfcnVudGltZV8xLmpzeCkoQWRkcmVzc1NlbGVjdF8xW1wiZGVmYXVsdFwiXSwgeyBhZGRyZXNzOiBvcmRlci5pbnZvaWNlQWRkcmVzcywgY29udGFjdDogb3JkZXIuY29udGFjdCwgY2hhbmdlQWRkcmVzczogY2hhbmdlQWRkcmVzcywgbmFtZTogJ1JlY2hudW5nc2FkcmVzc2UnLCB0eXBlOiAxLCBzaG9wOiBzaG9wIH0pIH0pKSwgKDAsIGpzeF9ydW50aW1lXzEuanN4KShcImRpdlwiLCBfX2Fzc2lnbih7IGNsYXNzTmFtZTogXCJmbGV4LTFcIiB9LCB7IGNoaWxkcmVuOiBvcmRlci5jb250YWN0LnV1aWQgIT0gXCJcIiAmJiAoMCwganN4X3J1bnRpbWVfMS5qc3gpKEFkZHJlc3NTZWxlY3RfMVtcImRlZmF1bHRcIl0sIHsgYWRkcmVzczogb3JkZXIuZGVsaXZlcnlBZGRyZXNzLCBjb250YWN0OiBvcmRlci5jb250YWN0LCBjaGFuZ2VBZGRyZXNzOiBjaGFuZ2VBZGRyZXNzLCBuYW1lOiAnTGllZmVyYWRyZXNzZScsIHR5cGU6IDIsIHNob3A6IHNob3AgfSkgfSkpLCAoMCwganN4X3J1bnRpbWVfMS5qc3gpKFwiZGl2XCIsIF9fYXNzaWduKHsgY2xhc3NOYW1lOiBcImZsZXgtMVwiIH0sIHsgY2hpbGRyZW46IG9yZGVyLmNvbnRhY3QudXVpZCAhPSBcIlwiICYmICgwLCBqc3hfcnVudGltZV8xLmpzeCkoQWRkcmVzc1NlbGVjdF8xW1wiZGVmYXVsdFwiXSwgeyBhZGRyZXNzOiBvcmRlci5zZW5kZXJBZGRyZXNzLCBjaGFuZ2VBZGRyZXNzOiBjaGFuZ2VBZGRyZXNzLCBjb250YWN0OiBvcmRlci5jb250YWN0LCBuYW1lOiAnQWJzZW5kZXJhZHJlc3NlJywgdHlwZTogMywgc2hvcDogc2hvcCB9KSB9KSldIH0pKV0gfSkpO1xufTtcbkNvbnRhY3RDb21wb25lbnQucHJvcFR5cGVzID0ge1xuICAgIG9yZGVyOiBQcm9wVHlwZXMuaW5zdGFuY2VPZihvcmRlcl8yLk9yZGVyKSxcbiAgICBzaG9wOiBQcm9wVHlwZXMuaW5zdGFuY2VPZihzaG9wXzEuU2hvcClcbn07XG5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IENvbnRhY3RDb21wb25lbnQ7XG4iLCJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2Fzc2lnbiA9ICh0aGlzICYmIHRoaXMuX19hc3NpZ24pIHx8IGZ1bmN0aW9uICgpIHtcbiAgICBfX2Fzc2lnbiA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24odCkge1xuICAgICAgICBmb3IgKHZhciBzLCBpID0gMSwgbiA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBuOyBpKyspIHtcbiAgICAgICAgICAgIHMgPSBhcmd1bWVudHNbaV07XG4gICAgICAgICAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkpXG4gICAgICAgICAgICAgICAgdFtwXSA9IHNbcF07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHQ7XG4gICAgfTtcbiAgICByZXR1cm4gX19hc3NpZ24uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbn07XG52YXIgX19jcmVhdGVCaW5kaW5nID0gKHRoaXMgJiYgdGhpcy5fX2NyZWF0ZUJpbmRpbmcpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICB2YXIgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobSwgayk7XG4gICAgaWYgKCFkZXNjIHx8IChcImdldFwiIGluIGRlc2MgPyAhbS5fX2VzTW9kdWxlIDogZGVzYy53cml0YWJsZSB8fCBkZXNjLmNvbmZpZ3VyYWJsZSkpIHtcbiAgICAgIGRlc2MgPSB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24oKSB7IHJldHVybiBtW2tdOyB9IH07XG4gICAgfVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBrMiwgZGVzYyk7XG59KSA6IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgb1trMl0gPSBtW2tdO1xufSkpO1xudmFyIF9fc2V0TW9kdWxlRGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19zZXRNb2R1bGVEZWZhdWx0KSB8fCAoT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCB2KSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIFwiZGVmYXVsdFwiLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2IH0pO1xufSkgOiBmdW5jdGlvbihvLCB2KSB7XG4gICAgb1tcImRlZmF1bHRcIl0gPSB2O1xufSk7XG52YXIgX19pbXBvcnRTdGFyID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydFN0YXIpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICBpZiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSByZXR1cm4gbW9kO1xuICAgIHZhciByZXN1bHQgPSB7fTtcbiAgICBpZiAobW9kICE9IG51bGwpIGZvciAodmFyIGsgaW4gbW9kKSBpZiAoayAhPT0gXCJkZWZhdWx0XCIgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1vZCwgaykpIF9fY3JlYXRlQmluZGluZyhyZXN1bHQsIG1vZCwgayk7XG4gICAgX19zZXRNb2R1bGVEZWZhdWx0KHJlc3VsdCwgbW9kKTtcbiAgICByZXR1cm4gcmVzdWx0O1xufTtcbnZhciBfX2ltcG9ydERlZmF1bHQgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0RGVmYXVsdCkgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIHJldHVybiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSA/IG1vZCA6IHsgXCJkZWZhdWx0XCI6IG1vZCB9O1xufTtcbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG52YXIganN4X3J1bnRpbWVfMSA9IHJlcXVpcmUoXCJyZWFjdC9qc3gtcnVudGltZVwiKTtcbnZhciByZWFjdF8xID0gcmVxdWlyZShcInJlYWN0XCIpO1xudmFyIG5pY2VfbW9kYWxfcmVhY3RfMSA9IF9faW1wb3J0U3RhcihyZXF1aXJlKFwiQGViYXkvbmljZS1tb2RhbC1yZWFjdFwiKSk7XG52YXIgQnV0dG9uXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIi4uL2Jhc2UvQnV0dG9uXCIpKTtcbnZhciB2YWxpZGF0b3JfYWp2Nl8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJAcmpzZi92YWxpZGF0b3ItYWp2NlwiKSk7XG52YXIgY29yZV8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJAcmpzZi9jb3JlXCIpKTtcbnZhciBjb3VudHJ5XzEgPSByZXF1aXJlKFwiLi4vLi4vc2VydmljZXMvY291bnRyeVwiKTtcbnZhciBmbG93Yml0ZV9yZWFjdF8xID0gcmVxdWlyZShcImZsb3diaXRlLXJlYWN0XCIpO1xudmFyIENvbnRhY3RNb2RhbCA9IG5pY2VfbW9kYWxfcmVhY3RfMVtcImRlZmF1bHRcIl0uY3JlYXRlKGZ1bmN0aW9uIChfYSkge1xuICAgIHZhciB0aXRsZSA9IF9hLnRpdGxlLCBhY3Rpb24gPSBfYS5hY3Rpb24sIGNvbnRhY3QgPSBfYS5jb250YWN0LCBzaG9wID0gX2Euc2hvcDtcbiAgICB2YXIgY291bnRyeV9hcGkgPSBuZXcgY291bnRyeV8xLkNvdW50cnlTZXJ2aWNlKCk7XG4gICAgdmFyIG1vZGFsID0gKDAsIG5pY2VfbW9kYWxfcmVhY3RfMS51c2VNb2RhbCkoKTtcbiAgICB2YXIgX2IgPSAoMCwgcmVhY3RfMS51c2VTdGF0ZSkoe30pLCBmb3JtRGF0YSA9IF9iWzBdLCBzZXRGb3JtRGF0YSA9IF9iWzFdO1xuICAgIHZhciBfYyA9ICgwLCByZWFjdF8xLnVzZVN0YXRlKSh7fSksIHNjaGVtYSA9IF9jWzBdLCBzZXRTY2hlbWEgPSBfY1sxXTtcbiAgICAoMCwgcmVhY3RfMS51c2VFZmZlY3QpKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKGNvbnRhY3QudWlkICE9IFwiXCIpIHtcbiAgICAgICAgICAgIHNldEZvcm1EYXRhKHtcbiAgICAgICAgICAgICAgICBlbWFpbDogY29udGFjdC51c2VybmFtZSxcbiAgICAgICAgICAgICAgICBmaXJzdG5hbWU6IGNvbnRhY3QubGF5b3V0ZXJfZGF0YS5maXJzdG5hbWUsXG4gICAgICAgICAgICAgICAgbGFzdG5hbWU6IGNvbnRhY3QubGF5b3V0ZXJfZGF0YS5sYXN0bmFtZSxcbiAgICAgICAgICAgICAgICBjb21wYW55OiBjb250YWN0LmxheW91dGVyX2RhdGEuY29tcGFueSxcbiAgICAgICAgICAgICAgICBzdHJlZXQ6IGNvbnRhY3QubGF5b3V0ZXJfZGF0YS5zdHJlZXQsXG4gICAgICAgICAgICAgICAgaG91c2VOdW1iZXI6IGNvbnRhY3QubGF5b3V0ZXJfZGF0YS5ob3VzZU51bWJlcixcbiAgICAgICAgICAgICAgICB6aXA6IGNvbnRhY3QubGF5b3V0ZXJfZGF0YS56aXAsXG4gICAgICAgICAgICAgICAgY2l0eTogY29udGFjdC5sYXlvdXRlcl9kYXRhLmNpdHksXG4gICAgICAgICAgICAgICAgcGhvbmU6IGNvbnRhY3QubGF5b3V0ZXJfZGF0YS5waG9uZSxcbiAgICAgICAgICAgICAgICBjb3VudHJ5OiBjb250YWN0LmxheW91dGVyX2RhdGEuY291bnRyeSxcbiAgICAgICAgICAgICAgICB1c3RpZDogY29udGFjdC5sYXlvdXRlcl9kYXRhLnVzdGlkXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH0sIFtjb250YWN0XSk7XG4gICAgdmFyIHVpU2NoZW1hID0ge1xuICAgICAgICBcInVpOnN1Ym1pdEJ1dHRvbk9wdGlvbnNcIjoge1xuICAgICAgICAgICAgXCJzdWJtaXRUZXh0XCI6IFwiU2F2ZVwiLFxuICAgICAgICAgICAgXCJub3JlbmRlclwiOiB0cnVlLFxuICAgICAgICAgICAgXCJwcm9wc1wiOiB7XG4gICAgICAgICAgICAgICAgXCJkaXNhYmxlZFwiOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBcImNsYXNzTmFtZVwiOiBcImJ0biBidG4taW5mb1wiXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgICgwLCByZWFjdF8xLnVzZUVmZmVjdCkoZnVuY3Rpb24gKCkge1xuICAgICAgICBjb3VudHJ5X2FwaS5nZXRDb3VudHJ5KHNob3ApLnRoZW4oZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgICAgICAgIHZhciBjb3VudHJ5cyA9IFtdO1xuICAgICAgICAgICAgZGF0YS5mb3JFYWNoKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICAgICAgICAgICAgY291bnRyeXMucHVzaCh7ICd0aXRsZSc6IGl0ZW0uY29kZSwgJ2NvbnN0JzogaXRlbS5jb2RlIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB2YXIgc2NoZW1hID0ge1xuICAgICAgICAgICAgICAgIHRpdGxlOiAnQ29udGFjdCcsXG4gICAgICAgICAgICAgICAgdHlwZTogJ29iamVjdCcsXG4gICAgICAgICAgICAgICAgcmVxdWlyZWQ6IFsnZW1haWwnXSxcbiAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICAgICAgICAgIGVtYWlsOiB7IHR5cGU6ICdzdHJpbmcnLCBmb3JtYXQ6ICdlbWFpbCcsIHRpdGxlOiAnRS1NYWlsJyB9LFxuICAgICAgICAgICAgICAgICAgICBjb21wYW55OiB7IHR5cGU6ICdzdHJpbmcnLCB0aXRsZTogJ0NvbXBhbnknIH0sXG4gICAgICAgICAgICAgICAgICAgIGZpcnN0bmFtZTogeyB0eXBlOiAnc3RyaW5nJywgdGl0bGU6ICdGaXJzdG5hbWUnIH0sXG4gICAgICAgICAgICAgICAgICAgIGxhc3RuYW1lOiB7IHR5cGU6ICdzdHJpbmcnLCB0aXRsZTogJ0xhc3RuYW1lJyB9LFxuICAgICAgICAgICAgICAgICAgICBzdHJlZXQ6IHsgdHlwZTogJ3N0cmluZycsIHRpdGxlOiAnU3RyZWV0JyB9LFxuICAgICAgICAgICAgICAgICAgICBob3VzZU51bWJlcjogeyB0eXBlOiAnc3RyaW5nJywgdGl0bGU6ICdIb3VzZW51bWJlcicgfSxcbiAgICAgICAgICAgICAgICAgICAgemlwOiB7IHR5cGU6ICdzdHJpbmcnLCB0aXRsZTogJ1ppcCcgfSxcbiAgICAgICAgICAgICAgICAgICAgY2l0eTogeyB0eXBlOiAnc3RyaW5nJywgdGl0bGU6ICdDaXR5JyB9LFxuICAgICAgICAgICAgICAgICAgICBwaG9uZTogeyB0eXBlOiAnc3RyaW5nJywgdGl0bGU6ICdQaG9uZScgfSxcbiAgICAgICAgICAgICAgICAgICAgdXN0aWQ6IHsgdHlwZTogJ3N0cmluZycsIHRpdGxlOiAnVXN0SWQnIH0sXG4gICAgICAgICAgICAgICAgICAgIGNvdW50cnk6IHsgdHlwZTogJ3N0cmluZycsIHRpdGxlOiAnQ291bnRyeScsIG9uZU9mOiBjb3VudHJ5cyB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHNldFNjaGVtYShzY2hlbWEpO1xuICAgICAgICB9KTtcbiAgICB9LCBbXSk7XG4gICAgcmV0dXJuICgoMCwganN4X3J1bnRpbWVfMS5qc3hzKShmbG93Yml0ZV9yZWFjdF8xLk1vZGFsLCBfX2Fzc2lnbih7IHNob3c6IG1vZGFsLnZpc2libGUsIG9uQ2xvc2U6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG1vZGFsLnJlbW92ZSgpOyB9IH0sIHsgY2hpbGRyZW46IFsoMCwganN4X3J1bnRpbWVfMS5qc3gpKGZsb3diaXRlX3JlYWN0XzEuTW9kYWwuSGVhZGVyLCB7IGNoaWxkcmVuOiB0aXRsZSB9KSwgKDAsIGpzeF9ydW50aW1lXzEuanN4KShmbG93Yml0ZV9yZWFjdF8xLk1vZGFsLkJvZHksIHsgY2hpbGRyZW46IGFjdGlvbiA9PT0gXCJTYXZlXCIgJiYgKCgwLCBqc3hfcnVudGltZV8xLmpzeCkoY29yZV8xW1wiZGVmYXVsdFwiXSwgeyBzY2hlbWE6IHNjaGVtYSwgZm9ybURhdGE6IGZvcm1EYXRhLCB1aVNjaGVtYTogdWlTY2hlbWEsIHZhbGlkYXRvcjogdmFsaWRhdG9yX2FqdjZfMVtcImRlZmF1bHRcIl0sIG9uQ2hhbmdlOiBmdW5jdGlvbiAoZSkgeyByZXR1cm4gc2V0Rm9ybURhdGEoZS5mb3JtRGF0YSk7IH0gfSkpIH0pLCAoMCwganN4X3J1bnRpbWVfMS5qc3hzKShmbG93Yml0ZV9yZWFjdF8xLk1vZGFsLkZvb3RlciwgeyBjaGlsZHJlbjogWygwLCBqc3hfcnVudGltZV8xLmpzeCkoQnV0dG9uXzFbXCJkZWZhdWx0XCJdLCB7IHR5cGU6IDMsIHZhcmlhbnQ6IFwic3VjY2Vzc1wiLCBvbkNsaWNrOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFjdGlvbiA9PT0gXCJTYXZlXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZvcm1EYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RhbC5yZXNvbHZlKGZvcm1EYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGFsLnJlbW92ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RhbC5yZXNvbHZlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGFsLnJlbW92ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0gfSksICgwLCBqc3hfcnVudGltZV8xLmpzeCkoQnV0dG9uXzFbXCJkZWZhdWx0XCJdLCB7IHR5cGU6IDQsIHZhcmlhbnQ6IFwid2FybmluZ1wiLCBvbkNsaWNrOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kYWwucmVtb3ZlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IH0pXSB9KV0gfSkpKTtcbn0pO1xuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBDb250YWN0TW9kYWw7XG4iLCJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2Fzc2lnbiA9ICh0aGlzICYmIHRoaXMuX19hc3NpZ24pIHx8IGZ1bmN0aW9uICgpIHtcbiAgICBfX2Fzc2lnbiA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24odCkge1xuICAgICAgICBmb3IgKHZhciBzLCBpID0gMSwgbiA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBuOyBpKyspIHtcbiAgICAgICAgICAgIHMgPSBhcmd1bWVudHNbaV07XG4gICAgICAgICAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkpXG4gICAgICAgICAgICAgICAgdFtwXSA9IHNbcF07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHQ7XG4gICAgfTtcbiAgICByZXR1cm4gX19hc3NpZ24uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbn07XG52YXIgX19jcmVhdGVCaW5kaW5nID0gKHRoaXMgJiYgdGhpcy5fX2NyZWF0ZUJpbmRpbmcpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICB2YXIgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobSwgayk7XG4gICAgaWYgKCFkZXNjIHx8IChcImdldFwiIGluIGRlc2MgPyAhbS5fX2VzTW9kdWxlIDogZGVzYy53cml0YWJsZSB8fCBkZXNjLmNvbmZpZ3VyYWJsZSkpIHtcbiAgICAgIGRlc2MgPSB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24oKSB7IHJldHVybiBtW2tdOyB9IH07XG4gICAgfVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBrMiwgZGVzYyk7XG59KSA6IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgb1trMl0gPSBtW2tdO1xufSkpO1xudmFyIF9fc2V0TW9kdWxlRGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19zZXRNb2R1bGVEZWZhdWx0KSB8fCAoT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCB2KSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIFwiZGVmYXVsdFwiLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2IH0pO1xufSkgOiBmdW5jdGlvbihvLCB2KSB7XG4gICAgb1tcImRlZmF1bHRcIl0gPSB2O1xufSk7XG52YXIgX19pbXBvcnRTdGFyID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydFN0YXIpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICBpZiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSByZXR1cm4gbW9kO1xuICAgIHZhciByZXN1bHQgPSB7fTtcbiAgICBpZiAobW9kICE9IG51bGwpIGZvciAodmFyIGsgaW4gbW9kKSBpZiAoayAhPT0gXCJkZWZhdWx0XCIgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1vZCwgaykpIF9fY3JlYXRlQmluZGluZyhyZXN1bHQsIG1vZCwgayk7XG4gICAgX19zZXRNb2R1bGVEZWZhdWx0KHJlc3VsdCwgbW9kKTtcbiAgICByZXR1cm4gcmVzdWx0O1xufTtcbnZhciBfX2ltcG9ydERlZmF1bHQgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0RGVmYXVsdCkgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIHJldHVybiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSA/IG1vZCA6IHsgXCJkZWZhdWx0XCI6IG1vZCB9O1xufTtcbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG52YXIganN4X3J1bnRpbWVfMSA9IHJlcXVpcmUoXCJyZWFjdC9qc3gtcnVudGltZVwiKTtcbnZhciBjb250YWN0XzEgPSByZXF1aXJlKFwiLi4vLi4vbW9kZWwvY29udGFjdFwiKTtcbnZhciBQcm9wVHlwZXMgPSBfX2ltcG9ydFN0YXIocmVxdWlyZShcInByb3AtdHlwZXNcIikpO1xudmFyIHNob3BfMSA9IHJlcXVpcmUoXCIuLi8uLi9tb2RlbC9zaG9wXCIpO1xudmFyIEJ1dHRvbl8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCIuLi9iYXNlL0J1dHRvblwiKSk7XG52YXIgQ29udGFjdE1vZGFsXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIi4vQ29udGFjdE1vZGFsXCIpKTtcbnZhciByZWFjdF8xID0gcmVxdWlyZShcInJlYWN0XCIpO1xudmFyIG5pY2VfbW9kYWxfcmVhY3RfMSA9IHJlcXVpcmUoXCJAZWJheS9uaWNlLW1vZGFsLXJlYWN0XCIpO1xudmFyIGNvbnRhY3RfMiA9IHJlcXVpcmUoXCIuLi8uLi9zZXJ2aWNlcy9jb250YWN0XCIpO1xudmFyIGFkZHJlc3NfMSA9IHJlcXVpcmUoXCIuLi8uLi9tb2RlbC9hZGRyZXNzXCIpO1xudmFyIGFkZHJlc3NfMiA9IHJlcXVpcmUoXCIuLi8uLi9zZXJ2aWNlcy9hZGRyZXNzXCIpO1xudmFyIENvbnRhY3RNb2RhbENvbXBvbmVudCA9IGZ1bmN0aW9uIChfYSkge1xuICAgIHZhciBzaG9wID0gX2Euc2hvcCwgaGFuZGxlQWRkID0gX2EuaGFuZGxlQWRkLCBoYW5kbGVFZGl0ID0gX2EuaGFuZGxlRWRpdCwgY29udGFjdCA9IF9hLmNvbnRhY3Q7XG4gICAgdmFyIGNvbnRhY3RNb2RhbCA9ICgwLCBuaWNlX21vZGFsX3JlYWN0XzEudXNlTW9kYWwpKENvbnRhY3RNb2RhbF8xW1wiZGVmYXVsdFwiXSk7XG4gICAgdmFyIHNob3dBZGRNb2RhbCA9ICgwLCByZWFjdF8xLnVzZUNhbGxiYWNrKShmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnRhY3RNb2RhbC5zaG93KHsgdGl0bGU6ICdBZGQgQ29udGFjdCcsIGFjdGlvbjogJ1NhdmUnLCBzaG9wOiBzaG9wLCBjb250YWN0OiBuZXcgY29udGFjdF8xLkNvbnRhY3QoKSB9KS50aGVuKGZ1bmN0aW9uIChmb3JtRGF0YSkge1xuICAgICAgICAgICAgYWRkQ29udGFjdChmb3JtRGF0YSk7XG4gICAgICAgIH0pO1xuICAgIH0sIFtjb250YWN0TW9kYWxdKTtcbiAgICB2YXIgc2hvd0VkaXRNb2RhbCA9ICgwLCByZWFjdF8xLnVzZUNhbGxiYWNrKShmdW5jdGlvbiAoY29udGFjdCkge1xuICAgICAgICBjb250YWN0ID0gY29udGFjdDtcbiAgICAgICAgY29udGFjdE1vZGFsLnNob3coeyB0aXRsZTogJ0VkaXQgQ29udGFjdCcsIGFjdGlvbjogJ1NhdmUnLCBjb250YWN0OiBjb250YWN0LCBzaG9wOiBzaG9wIH0pLnRoZW4oZnVuY3Rpb24gKGZvcm1EYXRhKSB7XG4gICAgICAgICAgICBjb250YWN0LnBhcnNlRnJvbUZvcm1EYXRhKGZvcm1EYXRhKTtcbiAgICAgICAgICAgIHVwZGF0ZUNvbnRhY3QoY29udGFjdCk7XG4gICAgICAgIH0pO1xuICAgIH0sIFtjb250YWN0TW9kYWxdKTtcbiAgICB2YXIgdXBkYXRlQ29udGFjdCA9IGZ1bmN0aW9uIChjb250YWN0KSB7XG4gICAgICAgIHZhciBjb250YWN0X2FwaSA9IG5ldyBjb250YWN0XzIuQ29udGFjdFNlcnZpY2UoKTtcbiAgICAgICAgY29udGFjdF9hcGkudXBkYXRlQ29udGFjdChjb250YWN0KS50aGVuKGZ1bmN0aW9uIChlKSB7XG4gICAgICAgICAgICBoYW5kbGVFZGl0KGNvbnRhY3QpO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIHZhciBhZGRDb250YWN0ID0gZnVuY3Rpb24gKGZvcm1EYXRhKSB7XG4gICAgICAgIHZhciBjb250YWN0ID0gbmV3IGNvbnRhY3RfMS5Db250YWN0KCk7XG4gICAgICAgIGNvbnRhY3QucGFyc2VGcm9tRm9ybURhdGEoZm9ybURhdGEsIHNob3ApO1xuICAgICAgICB2YXIgY29udGFjdF9hcGkgPSBuZXcgY29udGFjdF8yLkNvbnRhY3RTZXJ2aWNlKCk7XG4gICAgICAgIGNvbnRhY3RfYXBpLmNyZWF0ZUNvbnRhY3QoY29udGFjdCkudGhlbihmdW5jdGlvbiAoZSkge1xuICAgICAgICAgICAgY29udGFjdC5wYXJzZUZyb21Kc29uKGUpO1xuICAgICAgICAgICAgdmFyIGFkZHJlc3MgPSBuZXcgYWRkcmVzc18xLkFkZHJlc3MoKTtcbiAgICAgICAgICAgIGFkZHJlc3MucGFyc2VGcm9tRm9ybURhdGEoZm9ybURhdGEpO1xuICAgICAgICAgICAgYWRkcmVzcy5jb250YWN0LnV1aWQgPSBjb250YWN0LnV1aWQ7XG4gICAgICAgICAgICBhZGRyZXNzLnR5cGUgPSAxO1xuICAgICAgICAgICAgdmFyIGFkZHJlc3NfYXBpID0gbmV3IGFkZHJlc3NfMi5BZGRyZXNzU2VydmljZSgpO1xuICAgICAgICAgICAgYWRkcmVzc19hcGkuY3JlYXRlKGFkZHJlc3MpO1xuICAgICAgICAgICAgYWRkcmVzcy50eXBlID0gMjtcbiAgICAgICAgICAgIGFkZHJlc3NfYXBpLmNyZWF0ZShhZGRyZXNzKTtcbiAgICAgICAgICAgIGhhbmRsZUFkZChjb250YWN0KTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICByZXR1cm4gKCgwLCBqc3hfcnVudGltZV8xLmpzeHMpKFwiZGl2XCIsIF9fYXNzaWduKHsgY2xhc3NOYW1lOiAnZmxleCBnYXAtMScgfSwgeyBjaGlsZHJlbjogWygwLCBqc3hfcnVudGltZV8xLmpzeCkoQnV0dG9uXzFbXCJkZWZhdWx0XCJdLCB7IHR5cGU6IDEsIHZhcmlhbnQ6IFwic3VjY2Vzc1wiLCBvbkNsaWNrOiBzaG93QWRkTW9kYWwgfSksICgwLCBqc3hfcnVudGltZV8xLmpzeCkoQnV0dG9uXzFbXCJkZWZhdWx0XCJdLCB7IHR5cGU6IDIsIHZhcmlhbnQ6IFwiaW5mb1wiLCBvbkNsaWNrOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIHNob3dFZGl0TW9kYWwoY29udGFjdCk7XG4gICAgICAgICAgICAgICAgfSB9KV0gfSkpKTtcbn07XG5Db250YWN0TW9kYWxDb21wb25lbnQucHJvcFR5cGVzID0ge1xuICAgIHNob3A6IFByb3BUeXBlcy5pbnN0YW5jZU9mKHNob3BfMS5TaG9wKSxcbiAgICBoYW5kbGVBZGQ6IFByb3BUeXBlcy5mdW5jLFxuICAgIGhhbmRsZUVkaXQ6IFByb3BUeXBlcy5mdW5jLFxuICAgIGNvbnRhY3Q6IFByb3BUeXBlcy5pbnN0YW5jZU9mKGNvbnRhY3RfMS5Db250YWN0KVxufTtcbmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gQ29udGFjdE1vZGFsQ29tcG9uZW50O1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19hc3NpZ24gPSAodGhpcyAmJiB0aGlzLl9fYXNzaWduKSB8fCBmdW5jdGlvbiAoKSB7XG4gICAgX19hc3NpZ24gPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uKHQpIHtcbiAgICAgICAgZm9yICh2YXIgcywgaSA9IDEsIG4gPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbjsgaSsrKSB7XG4gICAgICAgICAgICBzID0gYXJndW1lbnRzW2ldO1xuICAgICAgICAgICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApKVxuICAgICAgICAgICAgICAgIHRbcF0gPSBzW3BdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0O1xuICAgIH07XG4gICAgcmV0dXJuIF9fYXNzaWduLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG59O1xudmFyIF9fY3JlYXRlQmluZGluZyA9ICh0aGlzICYmIHRoaXMuX19jcmVhdGVCaW5kaW5nKSB8fCAoT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgdmFyIGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG0sIGspO1xuICAgIGlmICghZGVzYyB8fCAoXCJnZXRcIiBpbiBkZXNjID8gIW0uX19lc01vZHVsZSA6IGRlc2Mud3JpdGFibGUgfHwgZGVzYy5jb25maWd1cmFibGUpKSB7XG4gICAgICBkZXNjID0geyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uKCkgeyByZXR1cm4gbVtrXTsgfSB9O1xuICAgIH1cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgazIsIGRlc2MpO1xufSkgOiAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIG9bazJdID0gbVtrXTtcbn0pKTtcbnZhciBfX3NldE1vZHVsZURlZmF1bHQgPSAodGhpcyAmJiB0aGlzLl9fc2V0TW9kdWxlRGVmYXVsdCkgfHwgKE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgdikge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBcImRlZmF1bHRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdiB9KTtcbn0pIDogZnVuY3Rpb24obywgdikge1xuICAgIG9bXCJkZWZhdWx0XCJdID0gdjtcbn0pO1xudmFyIF9faW1wb3J0U3RhciA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnRTdGFyKSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgaWYgKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgcmV0dXJuIG1vZDtcbiAgICB2YXIgcmVzdWx0ID0ge307XG4gICAgaWYgKG1vZCAhPSBudWxsKSBmb3IgKHZhciBrIGluIG1vZCkgaWYgKGsgIT09IFwiZGVmYXVsdFwiICYmIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChtb2QsIGspKSBfX2NyZWF0ZUJpbmRpbmcocmVzdWx0LCBtb2QsIGspO1xuICAgIF9fc2V0TW9kdWxlRGVmYXVsdChyZXN1bHQsIG1vZCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbn07XG52YXIgX19hd2FpdGVyID0gKHRoaXMgJiYgdGhpcy5fX2F3YWl0ZXIpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcbiAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xuICAgIH0pO1xufTtcbnZhciBfX2dlbmVyYXRvciA9ICh0aGlzICYmIHRoaXMuX19nZW5lcmF0b3IpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBib2R5KSB7XG4gICAgdmFyIF8gPSB7IGxhYmVsOiAwLCBzZW50OiBmdW5jdGlvbigpIHsgaWYgKHRbMF0gJiAxKSB0aHJvdyB0WzFdOyByZXR1cm4gdFsxXTsgfSwgdHJ5czogW10sIG9wczogW10gfSwgZiwgeSwgdCwgZztcbiAgICByZXR1cm4gZyA9IHsgbmV4dDogdmVyYigwKSwgXCJ0aHJvd1wiOiB2ZXJiKDEpLCBcInJldHVyblwiOiB2ZXJiKDIpIH0sIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiAoZ1tTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzOyB9KSwgZztcbiAgICBmdW5jdGlvbiB2ZXJiKG4pIHsgcmV0dXJuIGZ1bmN0aW9uICh2KSB7IHJldHVybiBzdGVwKFtuLCB2XSk7IH07IH1cbiAgICBmdW5jdGlvbiBzdGVwKG9wKSB7XG4gICAgICAgIGlmIChmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLlwiKTtcbiAgICAgICAgd2hpbGUgKF8pIHRyeSB7XG4gICAgICAgICAgICBpZiAoZiA9IDEsIHkgJiYgKHQgPSBvcFswXSAmIDIgPyB5W1wicmV0dXJuXCJdIDogb3BbMF0gPyB5W1widGhyb3dcIl0gfHwgKCh0ID0geVtcInJldHVyblwiXSkgJiYgdC5jYWxsKHkpLCAwKSA6IHkubmV4dCkgJiYgISh0ID0gdC5jYWxsKHksIG9wWzFdKSkuZG9uZSkgcmV0dXJuIHQ7XG4gICAgICAgICAgICBpZiAoeSA9IDAsIHQpIG9wID0gW29wWzBdICYgMiwgdC52YWx1ZV07XG4gICAgICAgICAgICBzd2l0Y2ggKG9wWzBdKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAwOiBjYXNlIDE6IHQgPSBvcDsgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSA0OiBfLmxhYmVsKys7IHJldHVybiB7IHZhbHVlOiBvcFsxXSwgZG9uZTogZmFsc2UgfTtcbiAgICAgICAgICAgICAgICBjYXNlIDU6IF8ubGFiZWwrKzsgeSA9IG9wWzFdOyBvcCA9IFswXTsgY29udGludWU7XG4gICAgICAgICAgICAgICAgY2FzZSA3OiBvcCA9IF8ub3BzLnBvcCgpOyBfLnRyeXMucG9wKCk7IGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIGlmICghKHQgPSBfLnRyeXMsIHQgPSB0Lmxlbmd0aCA+IDAgJiYgdFt0Lmxlbmd0aCAtIDFdKSAmJiAob3BbMF0gPT09IDYgfHwgb3BbMF0gPT09IDIpKSB7IF8gPSAwOyBjb250aW51ZTsgfVxuICAgICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDMgJiYgKCF0IHx8IChvcFsxXSA+IHRbMF0gJiYgb3BbMV0gPCB0WzNdKSkpIHsgXy5sYWJlbCA9IG9wWzFdOyBicmVhazsgfVxuICAgICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDYgJiYgXy5sYWJlbCA8IHRbMV0pIHsgXy5sYWJlbCA9IHRbMV07IHQgPSBvcDsgYnJlYWs7IH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHQgJiYgXy5sYWJlbCA8IHRbMl0pIHsgXy5sYWJlbCA9IHRbMl07IF8ub3BzLnB1c2gob3ApOyBicmVhazsgfVxuICAgICAgICAgICAgICAgICAgICBpZiAodFsyXSkgXy5vcHMucG9wKCk7XG4gICAgICAgICAgICAgICAgICAgIF8udHJ5cy5wb3AoKTsgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvcCA9IGJvZHkuY2FsbCh0aGlzQXJnLCBfKTtcbiAgICAgICAgfSBjYXRjaCAoZSkgeyBvcCA9IFs2LCBlXTsgeSA9IDA7IH0gZmluYWxseSB7IGYgPSB0ID0gMDsgfVxuICAgICAgICBpZiAob3BbMF0gJiA1KSB0aHJvdyBvcFsxXTsgcmV0dXJuIHsgdmFsdWU6IG9wWzBdID8gb3BbMV0gOiB2b2lkIDAsIGRvbmU6IHRydWUgfTtcbiAgICB9XG59O1xudmFyIF9faW1wb3J0RGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnREZWZhdWx0KSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgcmV0dXJuIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpID8gbW9kIDogeyBcImRlZmF1bHRcIjogbW9kIH07XG59O1xuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbnZhciBqc3hfcnVudGltZV8xID0gcmVxdWlyZShcInJlYWN0L2pzeC1ydW50aW1lXCIpO1xudmFyIFByb3BUeXBlcyA9IF9faW1wb3J0U3RhcihyZXF1aXJlKFwicHJvcC10eXBlc1wiKSk7XG52YXIgcmVhY3Rfc2VsZWN0X2FzeW5jX3BhZ2luYXRlXzEgPSByZXF1aXJlKFwicmVhY3Qtc2VsZWN0LWFzeW5jLXBhZ2luYXRlXCIpO1xudmFyIGNvbnRhY3RfMSA9IHJlcXVpcmUoXCIuLi8uLi9zZXJ2aWNlcy9jb250YWN0XCIpO1xudmFyIHNob3BfMSA9IHJlcXVpcmUoXCIuLi8uLi9tb2RlbC9zaG9wXCIpO1xudmFyIHJlYWN0XzEgPSByZXF1aXJlKFwicmVhY3RcIik7XG52YXIgdHN5cmluZ2VfMSA9IHJlcXVpcmUoXCJ0c3lyaW5nZVwiKTtcbnZhciBvcmRlcl8xID0gcmVxdWlyZShcIi4uLy4uL3N0YXRlL29yZGVyXCIpO1xudmFyIENvbnRhY3RNb2RhbENvbXBvbmVudF8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCIuL0NvbnRhY3RNb2RhbENvbXBvbmVudFwiKSk7XG52YXIgb3JkZXJfMiA9IHJlcXVpcmUoXCIuLi8uLi9tb2RlbC9vcmRlclwiKTtcbnZhciBTZWxlY3RMYWJlbF8xID0gcmVxdWlyZShcIi4uL2Jhc2UvU2VsZWN0TGFiZWxcIik7XG52YXIgQ29udGFjdFNlbGVjdCA9IGZ1bmN0aW9uIChfYSkge1xuICAgIHZhciBvcmRlciA9IF9hLm9yZGVyLCBzaG9wID0gX2Euc2hvcCwgb25DaGFuZ2UgPSBfYS5vbkNoYW5nZTtcbiAgICB2YXIgX2IgPSAoMCwgcmVhY3RfMS51c2VTdGF0ZSkobnVsbCksIHNob3BVdWlkID0gX2JbMF0sIHNldFNob3BVdWlkID0gX2JbMV07XG4gICAgdmFyIG9yZGVyU3RhdGUgPSB0c3lyaW5nZV8xLmNvbnRhaW5lci5yZXNvbHZlKG9yZGVyXzEuT3JkZXJTdGF0ZSk7XG4gICAgdmFyIGNvbnRhY3RfYXBpID0gbmV3IGNvbnRhY3RfMS5Db250YWN0U2VydmljZSgpO1xuICAgICgwLCByZWFjdF8xLnVzZUVmZmVjdCkoZnVuY3Rpb24gKCkge1xuICAgICAgICBzZXRTaG9wVXVpZChzaG9wLnV1aWQpO1xuICAgIH0sIFtzaG9wXSk7XG4gICAgdmFyIGxvYWRPcHRpb25zID0gZnVuY3Rpb24gKHNlYXJjaFF1ZXJ5LCBsb2FkZWRPcHRpb25zLCBfYSkge1xuICAgICAgICB2YXIgcGFnZSA9IF9hLnBhZ2U7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGNvbnRhY3RzO1xuICAgICAgICAgICAgcmV0dXJuIF9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfYikge1xuICAgICAgICAgICAgICAgIHN3aXRjaCAoX2IubGFiZWwpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAwOiByZXR1cm4gWzQgLyp5aWVsZCovLCBjb250YWN0X2FwaS5nZXRDb250YWN0cyhzZWFyY2hRdWVyeSwgcGFnZSwgc2hvcCldO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgICAgICBjb250YWN0cyA9IF9iLnNlbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbMiAvKnJldHVybiovLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnM6IGNvbnRhY3RzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNNb3JlOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkaXRpb25hbDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFnZTogcGFnZSArIDFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1dO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIHZhciBzZXRDb250YWN0SW5PcmRlciA9IGZ1bmN0aW9uIChvcHRpb24pIHtcbiAgICAgICAgb3JkZXJTdGF0ZS5nZXRDdXJyZW50T3JkZXIoKS52YWx1ZS5jb250YWN0ID0gb3B0aW9uO1xuICAgICAgICBvcmRlci5jb250YWN0ID0gb3B0aW9uO1xuICAgICAgICBvbkNoYW5nZShvcHRpb24pO1xuICAgIH07XG4gICAgdmFyIGhhbmRsZUFkZCA9IGZ1bmN0aW9uIChjb250YWN0KSB7XG4gICAgICAgIHNldFNob3BVdWlkKE1hdGgucmFuZG9tKCkpO1xuICAgICAgICBzZXRDb250YWN0SW5PcmRlcihjb250YWN0KTtcbiAgICB9O1xuICAgIHZhciBoYW5kbGVFZGl0ID0gZnVuY3Rpb24gKGNvbnRhY3QpIHtcbiAgICAgICAgc2V0U2hvcFV1aWQoTWF0aC5yYW5kb20oKSk7XG4gICAgICAgIHNldENvbnRhY3RJbk9yZGVyKGNvbnRhY3QpO1xuICAgIH07XG4gICAgcmV0dXJuICgoMCwganN4X3J1bnRpbWVfMS5qc3hzKShcImRpdlwiLCBfX2Fzc2lnbih7IGNsYXNzTmFtZTogXCJmbGV4IGdhcC0xXCIgfSwgeyBjaGlsZHJlbjogWygwLCBqc3hfcnVudGltZV8xLmpzeCkoXCJkaXZcIiwgX19hc3NpZ24oeyBjbGFzc05hbWU6IFwiZmxleC0xXCIgfSwgeyBjaGlsZHJlbjogKDAsIGpzeF9ydW50aW1lXzEuanN4KShyZWFjdF9zZWxlY3RfYXN5bmNfcGFnaW5hdGVfMS5Bc3luY1BhZ2luYXRlLCB7IGRlZmF1bHRPcHRpb25zOiB0cnVlLCBjbGFzc05hbWU6IFwiXCIuY29uY2F0KG9yZGVyU3RhdGUuZ2V0Q3VycmVudE9yZGVyKCkudmFsdWUuY29udGFjdC51c2VybmFtZSA9PSBcIlwiID8gXCJib3JkZXIgYm9yZGVyLWRhbmdlclwiIDogXCJcIiksIGRlZmF1bHRWYWx1ZTogb3JkZXIuY29udGFjdCwgY29tcG9uZW50czogeyBDb250cm9sOiBTZWxlY3RMYWJlbF8xLlNlbGVjdExhYmVsIH0sIHBsYWNlaG9sZGVyOiAnJywgbmFtZTogJ0t1bmRlJywgdmFsdWU6IG9yZGVyLmNvbnRhY3QsIGxvYWRPcHRpb25zOiBsb2FkT3B0aW9ucywgZ2V0T3B0aW9uVmFsdWU6IGZ1bmN0aW9uIChvcHRpb24pIHsgcmV0dXJuIG9wdGlvbi51dWlkOyB9LCBnZXRPcHRpb25MYWJlbDogZnVuY3Rpb24gKG9wdGlvbikgeyByZXR1cm4gb3B0aW9uLnVzZXJuYW1lOyB9LCBvbkNoYW5nZTogc2V0Q29udGFjdEluT3JkZXIsIGlzU2VhcmNoYWJsZTogdHJ1ZSwgYWRkaXRpb25hbDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFnZTogMVxuICAgICAgICAgICAgICAgICAgICB9IH0sIEpTT04uc3RyaW5naWZ5KHNob3BVdWlkKSkgfSkpLCAoMCwganN4X3J1bnRpbWVfMS5qc3gpKFwiZGl2XCIsIHsgY2hpbGRyZW46ICgwLCBqc3hfcnVudGltZV8xLmpzeCkoQ29udGFjdE1vZGFsQ29tcG9uZW50XzFbXCJkZWZhdWx0XCJdLCB7IHNob3A6IHNob3AsIGNvbnRhY3Q6IG9yZGVyLmNvbnRhY3QsIGhhbmRsZUFkZDogaGFuZGxlQWRkLCBoYW5kbGVFZGl0OiBoYW5kbGVFZGl0IH0pIH0pXSB9KSkpO1xufTtcbkNvbnRhY3RTZWxlY3QucHJvcFR5cGVzID0ge1xuICAgIG9yZGVyOiBQcm9wVHlwZXMuaW5zdGFuY2VPZihvcmRlcl8yLk9yZGVyKSxcbiAgICBvbkNoYW5nZTogUHJvcFR5cGVzLmZ1bmMsXG4gICAgc2hvcDogUHJvcFR5cGVzLmluc3RhbmNlT2Yoc2hvcF8xLlNob3ApXG59O1xuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBDb250YWN0U2VsZWN0O1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19hc3NpZ24gPSAodGhpcyAmJiB0aGlzLl9fYXNzaWduKSB8fCBmdW5jdGlvbiAoKSB7XG4gICAgX19hc3NpZ24gPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uKHQpIHtcbiAgICAgICAgZm9yICh2YXIgcywgaSA9IDEsIG4gPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbjsgaSsrKSB7XG4gICAgICAgICAgICBzID0gYXJndW1lbnRzW2ldO1xuICAgICAgICAgICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApKVxuICAgICAgICAgICAgICAgIHRbcF0gPSBzW3BdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0O1xuICAgIH07XG4gICAgcmV0dXJuIF9fYXNzaWduLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG59O1xuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbnZhciBqc3hfcnVudGltZV8xID0gcmVxdWlyZShcInJlYWN0L2pzeC1ydW50aW1lXCIpO1xudmFyIHJlYWN0XzEgPSByZXF1aXJlKFwicmVhY3RcIik7XG52YXIgdHN5cmluZ2VfMSA9IHJlcXVpcmUoXCJ0c3lyaW5nZVwiKTtcbnZhciBvcmRlcl8xID0gcmVxdWlyZShcIi4uLy4uL3N0YXRlL29yZGVyXCIpO1xudmFyIERyYWZ0Q29tcG9uZW50ID0gZnVuY3Rpb24gKF9hKSB7XG4gICAgdmFyIG9yZGVyID0gX2Eub3JkZXI7XG4gICAgdmFyIF9iID0gKDAsIHJlYWN0XzEudXNlU3RhdGUpKHRydWUpLCBkcmFmdCA9IF9iWzBdLCBzZXREcmFmdCA9IF9iWzFdO1xuICAgIHZhciBvcmRlclN0YXRlID0gdHN5cmluZ2VfMS5jb250YWluZXIucmVzb2x2ZShvcmRlcl8xLk9yZGVyU3RhdGUpO1xuICAgIHZhciBvbkNoYW5nZSA9IGZ1bmN0aW9uIChvcHRpb24pIHtcbiAgICAgICAgdmFyIG9yZGVyT2JqID0gb3JkZXJTdGF0ZS5nZXRDdXJyZW50T3JkZXIoKS52YWx1ZTtcbiAgICAgICAgb3JkZXJPYmouZHJhZnQgPSAhZHJhZnQ7XG4gICAgICAgIG9yZGVyU3RhdGUuc2V0Q3VycmVudE9yZGVyKG9yZGVyT2JqKTtcbiAgICAgICAgc2V0RHJhZnQoIWRyYWZ0KTtcbiAgICB9O1xuICAgICgwLCByZWFjdF8xLnVzZUVmZmVjdCkoZnVuY3Rpb24gKCkge1xuICAgICAgICBzZXREcmFmdChvcmRlci5kcmFmdCk7XG4gICAgfSwgW29yZGVyLmRyYWZ0XSk7XG4gICAgcmV0dXJuICgoMCwganN4X3J1bnRpbWVfMS5qc3gpKFwiZGl2XCIsIF9fYXNzaWduKHsgY2xhc3NOYW1lOiBcImdhcC0yXCIgfSwgeyBjaGlsZHJlbjogKDAsIGpzeF9ydW50aW1lXzEuanN4cykoXCJsYWJlbFwiLCBfX2Fzc2lnbih7IGNsYXNzTmFtZTogXCJpbmxpbmUtZmxleCBpdGVtcy1jZW50ZXIgY3Vyc29yLXBvaW50ZXJcIiB9LCB7IGNoaWxkcmVuOiBbKDAsIGpzeF9ydW50aW1lXzEuanN4KShcImlucHV0XCIsIHsgdHlwZTogXCJjaGVja2JveFwiLCB2YWx1ZTogXCIxXCIsIGNsYXNzTmFtZTogXCJzci1vbmx5IHBlZXJcIiwgZGVmYXVsdENoZWNrZWQ6IGRyYWZ0LCBvbkNoYW5nZTogZnVuY3Rpb24gKGUpIHsgcmV0dXJuIG9uQ2hhbmdlKGUpOyB9IH0pLCAoMCwganN4X3J1bnRpbWVfMS5qc3gpKFwiZGl2XCIsIHsgY2xhc3NOYW1lOiBcInJlbGF0aXZlIHctMTEgaC02IGJnLWdyYXktMjAwIHJvdW5kZWQtZnVsbCBwZWVyIHBlZXItZm9jdXM6cmluZy00IHBlZXItZm9jdXM6cmluZy1ibHVlLTMwMCBkYXJrOnBlZXItZm9jdXM6cmluZy1ibHVlLTgwMCBkYXJrOmJnLWdyYXktNzAwIHBlZXItY2hlY2tlZDphZnRlcjp0cmFuc2xhdGUteC1mdWxsIHJ0bDpwZWVyLWNoZWNrZWQ6YWZ0ZXI6LXRyYW5zbGF0ZS14LWZ1bGwgcGVlci1jaGVja2VkOmFmdGVyOmJvcmRlci13aGl0ZSBhZnRlcjpjb250ZW50LVsnJ10gYWZ0ZXI6YWJzb2x1dGUgYWZ0ZXI6dG9wLTAuNSBhZnRlcjpzdGFydC1bMnB4XSBhZnRlcjpiZy13aGl0ZSBhZnRlcjpib3JkZXItZ3JheS0zMDAgYWZ0ZXI6Ym9yZGVyIGFmdGVyOnJvdW5kZWQtZnVsbCBhZnRlcjpoLTUgYWZ0ZXI6dy01IGFmdGVyOnRyYW5zaXRpb24tYWxsIGRhcms6Ym9yZGVyLWdyYXktNjAwIHBlZXItY2hlY2tlZDpiZy1ibHVlLTYwMFwiIH0pLCAoMCwganN4X3J1bnRpbWVfMS5qc3gpKFwic3BhblwiLCBfX2Fzc2lnbih7IGNsYXNzTmFtZTogXCJtcy0zIHRleHQtc20gZm9udC1tZWRpdW0gdGV4dC1ncmF5LTkwMCBkYXJrOnRleHQtZ3JheS0zMDBcIiB9LCB7IGNoaWxkcmVuOiBcIkVudHd1cmZcIiB9KSldIH0pKSB9KSkpO1xufTtcbmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gRHJhZnRDb21wb25lbnQ7XG4iLCJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2Fzc2lnbiA9ICh0aGlzICYmIHRoaXMuX19hc3NpZ24pIHx8IGZ1bmN0aW9uICgpIHtcbiAgICBfX2Fzc2lnbiA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24odCkge1xuICAgICAgICBmb3IgKHZhciBzLCBpID0gMSwgbiA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBuOyBpKyspIHtcbiAgICAgICAgICAgIHMgPSBhcmd1bWVudHNbaV07XG4gICAgICAgICAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkpXG4gICAgICAgICAgICAgICAgdFtwXSA9IHNbcF07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHQ7XG4gICAgfTtcbiAgICByZXR1cm4gX19hc3NpZ24uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbn07XG52YXIgX19jcmVhdGVCaW5kaW5nID0gKHRoaXMgJiYgdGhpcy5fX2NyZWF0ZUJpbmRpbmcpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICB2YXIgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobSwgayk7XG4gICAgaWYgKCFkZXNjIHx8IChcImdldFwiIGluIGRlc2MgPyAhbS5fX2VzTW9kdWxlIDogZGVzYy53cml0YWJsZSB8fCBkZXNjLmNvbmZpZ3VyYWJsZSkpIHtcbiAgICAgIGRlc2MgPSB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24oKSB7IHJldHVybiBtW2tdOyB9IH07XG4gICAgfVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBrMiwgZGVzYyk7XG59KSA6IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgb1trMl0gPSBtW2tdO1xufSkpO1xudmFyIF9fc2V0TW9kdWxlRGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19zZXRNb2R1bGVEZWZhdWx0KSB8fCAoT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCB2KSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIFwiZGVmYXVsdFwiLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2IH0pO1xufSkgOiBmdW5jdGlvbihvLCB2KSB7XG4gICAgb1tcImRlZmF1bHRcIl0gPSB2O1xufSk7XG52YXIgX19pbXBvcnRTdGFyID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydFN0YXIpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICBpZiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSByZXR1cm4gbW9kO1xuICAgIHZhciByZXN1bHQgPSB7fTtcbiAgICBpZiAobW9kICE9IG51bGwpIGZvciAodmFyIGsgaW4gbW9kKSBpZiAoayAhPT0gXCJkZWZhdWx0XCIgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1vZCwgaykpIF9fY3JlYXRlQmluZGluZyhyZXN1bHQsIG1vZCwgayk7XG4gICAgX19zZXRNb2R1bGVEZWZhdWx0KHJlc3VsdCwgbW9kKTtcbiAgICByZXR1cm4gcmVzdWx0O1xufTtcbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG52YXIganN4X3J1bnRpbWVfMSA9IHJlcXVpcmUoXCJyZWFjdC9qc3gtcnVudGltZVwiKTtcbnZhciBQcm9wVHlwZXMgPSBfX2ltcG9ydFN0YXIocmVxdWlyZShcInByb3AtdHlwZXNcIikpO1xudmFyIHNob3BfMSA9IHJlcXVpcmUoXCIuLi8uLi9tb2RlbC9zaG9wXCIpO1xudmFyIHRzeXJpbmdlXzEgPSByZXF1aXJlKFwidHN5cmluZ2VcIik7XG52YXIgb3JkZXJfMSA9IHJlcXVpcmUoXCIuLi8uLi9zdGF0ZS9vcmRlclwiKTtcbnZhciBvcmRlcl8yID0gcmVxdWlyZShcIi4uLy4uL21vZGVsL29yZGVyXCIpO1xudmFyIHJlYWN0XzEgPSByZXF1aXJlKFwicmVhY3RcIik7XG52YXIgSW5mb0ZpZWxkQ29tcG9uZW50ID0gZnVuY3Rpb24gKF9hKSB7XG4gICAgdmFyIHNob3AgPSBfYS5zaG9wLCBvcmRlciA9IF9hLm9yZGVyO1xuICAgIHZhciBfYiA9ICgwLCByZWFjdF8xLnVzZVN0YXRlKShcIlwiKSwgYmFza2V0RmllbGQxID0gX2JbMF0sIHNldEJhc2tldEZpZWxkMSA9IF9iWzFdO1xuICAgIHZhciBfYyA9ICgwLCByZWFjdF8xLnVzZVN0YXRlKShcIlwiKSwgYmFza2V0RmllbGQyID0gX2NbMF0sIHNldEJhc2tldEZpZWxkMiA9IF9jWzFdO1xuICAgIHZhciBvcmRlclN0YXRlID0gdHN5cmluZ2VfMS5jb250YWluZXIucmVzb2x2ZShvcmRlcl8xLk9yZGVyU3RhdGUpO1xuICAgICgwLCByZWFjdF8xLnVzZUVmZmVjdCkoZnVuY3Rpb24gKCkge1xuICAgICAgICBzZXRCYXNrZXRGaWVsZDEob3JkZXIuYmFza2V0RmllbGQxKTtcbiAgICAgICAgc2V0QmFza2V0RmllbGQyKG9yZGVyLmJhc2tldEZpZWxkMSk7XG4gICAgfSwgW29yZGVyLmJhc2tldEZpZWxkMSwgb3JkZXIuYmFza2V0RmllbGQyXSk7XG4gICAgdmFyIGNoYW5nZUJhc2tldEZpZWxkMSA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICB2YXIgb3JkZXJPYmogPSBvcmRlclN0YXRlLmdldEN1cnJlbnRPcmRlcigpLmdldFZhbHVlKCk7XG4gICAgICAgIG9yZGVyT2JqLmJhc2tldEZpZWxkMSA9IHZhbHVlO1xuICAgICAgICBvcmRlclN0YXRlLnNldEN1cnJlbnRPcmRlcihvcmRlck9iaik7XG4gICAgICAgIHNldEJhc2tldEZpZWxkMSh2YWx1ZSk7XG4gICAgfTtcbiAgICB2YXIgY2hhbmdlQmFza2V0RmllbGQyID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIHZhciBvcmRlck9iaiA9IG9yZGVyU3RhdGUuZ2V0Q3VycmVudE9yZGVyKCkuZ2V0VmFsdWUoKTtcbiAgICAgICAgb3JkZXJPYmouYmFza2V0RmllbGQyID0gdmFsdWU7XG4gICAgICAgIG9yZGVyU3RhdGUuc2V0Q3VycmVudE9yZGVyKG9yZGVyT2JqKTtcbiAgICAgICAgc2V0QmFza2V0RmllbGQyKHZhbHVlKTtcbiAgICB9O1xuICAgIHJldHVybiAoKDAsIGpzeF9ydW50aW1lXzEuanN4KShcImRpdlwiLCBfX2Fzc2lnbih7IGNsYXNzTmFtZTogXCJcIiB9LCB7IGNoaWxkcmVuOiAoMCwganN4X3J1bnRpbWVfMS5qc3hzKShcImRpdlwiLCBfX2Fzc2lnbih7IGNsYXNzTmFtZTogXCJmbGV4XCIgfSwgeyBjaGlsZHJlbjogWygwLCBqc3hfcnVudGltZV8xLmpzeCkoXCJkaXZcIiwgX19hc3NpZ24oeyBjbGFzc05hbWU6IFwiZmxleC0xXCIgfSwgeyBjaGlsZHJlbjogKDAsIGpzeF9ydW50aW1lXzEuanN4cykoXCJkaXZcIiwgX19hc3NpZ24oeyBjbGFzc05hbWU6ICdmbGV4IGdhcC0xJyB9LCB7IGNoaWxkcmVuOiBbKDAsIGpzeF9ydW50aW1lXzEuanN4KShcImlucHV0XCIsIHsgdHlwZTogXCJ0ZXh0XCIsIG5hbWU6IFwiYmFza2V0RmllbGQxXCIsIHZhbHVlOiBiYXNrZXRGaWVsZDEsIG9uQ2hhbmdlOiBmdW5jdGlvbiAoZSkgeyByZXR1cm4gY2hhbmdlQmFza2V0RmllbGQxKGUudGFyZ2V0LnZhbHVlKTsgfSwgY2xhc3NOYW1lOiBcImJnLWdyYXktNTAgYm9yZGVyIGJvcmRlci1ncmF5LTMwMCB0ZXh0LWdyYXktOTAwIHRleHQtc20gcm91bmRlZC1sZyBmb2N1czpyaW5nLWJsdWUtNTAwIGZvY3VzOmJvcmRlci1ibHVlLTUwMCBibG9jayB3LWZ1bGwgcC0yLjUgZGFyazpiZy1ncmF5LTcwMCBkYXJrOmJvcmRlci1ncmF5LTYwMCBkYXJrOnBsYWNlaG9sZGVyLWdyYXktNDAwIGRhcms6dGV4dC13aGl0ZSBkYXJrOmZvY3VzOnJpbmctYmx1ZS01MDAgZGFyazpmb2N1czpib3JkZXItYmx1ZS01MDBcIiwgcGxhY2Vob2xkZXI6IFwiSW5mbyAxXCIgfSksICgwLCBqc3hfcnVudGltZV8xLmpzeCkoXCJsYWJlbFwiLCB7IGNoaWxkcmVuOiBzaG9wLmJhc2tldEZpZWxkMSB9KV0gfSkpIH0pKSwgKDAsIGpzeF9ydW50aW1lXzEuanN4KShcImRpdlwiLCBfX2Fzc2lnbih7IGNsYXNzTmFtZTogXCJmbGV4LTFcIiB9LCB7IGNoaWxkcmVuOiAoMCwganN4X3J1bnRpbWVfMS5qc3hzKShcImRpdlwiLCBfX2Fzc2lnbih7IGNsYXNzTmFtZTogJ2ZsZXggZ2FwLTEnIH0sIHsgY2hpbGRyZW46IFsoMCwganN4X3J1bnRpbWVfMS5qc3gpKFwiaW5wdXRcIiwgeyB0eXBlOiBcInRleHRcIiwgbmFtZTogXCJiYXNrZXRGaWVsZDJcIiwgdmFsdWU6IGJhc2tldEZpZWxkMiwgb25DaGFuZ2U6IGZ1bmN0aW9uIChlKSB7IHJldHVybiBjaGFuZ2VCYXNrZXRGaWVsZDIoZS50YXJnZXQudmFsdWUpOyB9LCBjbGFzc05hbWU6IFwiYmctZ3JheS01MCBib3JkZXIgYm9yZGVyLWdyYXktMzAwIHRleHQtZ3JheS05MDAgdGV4dC1zbSByb3VuZGVkLWxnIGZvY3VzOnJpbmctYmx1ZS01MDAgZm9jdXM6Ym9yZGVyLWJsdWUtNTAwIGJsb2NrIHctZnVsbCBwLTIuNSBkYXJrOmJnLWdyYXktNzAwIGRhcms6Ym9yZGVyLWdyYXktNjAwIGRhcms6cGxhY2Vob2xkZXItZ3JheS00MDAgZGFyazp0ZXh0LXdoaXRlIGRhcms6Zm9jdXM6cmluZy1ibHVlLTUwMCBkYXJrOmZvY3VzOmJvcmRlci1ibHVlLTUwMFwiLCBwbGFjZWhvbGRlcjogXCJJbmZvIDJcIiB9KSwgKDAsIGpzeF9ydW50aW1lXzEuanN4KShcImxhYmVsXCIsIHsgY2hpbGRyZW46IHNob3AuYmFza2V0RmllbGQyIH0pXSB9KSkgfSkpXSB9KSkgfSkpKTtcbn07XG5JbmZvRmllbGRDb21wb25lbnQucHJvcFR5cGVzID0ge1xuICAgIG9yZGVyOiBQcm9wVHlwZXMuaW5zdGFuY2VPZihvcmRlcl8yLk9yZGVyKSxcbiAgICBzaG9wOiBQcm9wVHlwZXMuaW5zdGFuY2VPZihzaG9wXzEuU2hvcClcbn07XG5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IEluZm9GaWVsZENvbXBvbmVudDtcbiIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9fYXNzaWduID0gKHRoaXMgJiYgdGhpcy5fX2Fzc2lnbikgfHwgZnVuY3Rpb24gKCkge1xuICAgIF9fYXNzaWduID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbih0KSB7XG4gICAgICAgIGZvciAodmFyIHMsIGkgPSAxLCBuID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IG47IGkrKykge1xuICAgICAgICAgICAgcyA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSlcbiAgICAgICAgICAgICAgICB0W3BdID0gc1twXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdDtcbiAgICB9O1xuICAgIHJldHVybiBfX2Fzc2lnbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xufTtcbnZhciBfX2NyZWF0ZUJpbmRpbmcgPSAodGhpcyAmJiB0aGlzLl9fY3JlYXRlQmluZGluZykgfHwgKE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihtLCBrKTtcbiAgICBpZiAoIWRlc2MgfHwgKFwiZ2V0XCIgaW4gZGVzYyA/ICFtLl9fZXNNb2R1bGUgOiBkZXNjLndyaXRhYmxlIHx8IGRlc2MuY29uZmlndXJhYmxlKSkge1xuICAgICAgZGVzYyA9IHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIG1ba107IH0gfTtcbiAgICB9XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIGsyLCBkZXNjKTtcbn0pIDogKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICBvW2syXSA9IG1ba107XG59KSk7XG52YXIgX19zZXRNb2R1bGVEZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX3NldE1vZHVsZURlZmF1bHQpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIHYpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgXCJkZWZhdWx0XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHYgfSk7XG59KSA6IGZ1bmN0aW9uKG8sIHYpIHtcbiAgICBvW1wiZGVmYXVsdFwiXSA9IHY7XG59KTtcbnZhciBfX2ltcG9ydFN0YXIgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0U3RhcikgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIGlmIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpIHJldHVybiBtb2Q7XG4gICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgIGlmIChtb2QgIT0gbnVsbCkgZm9yICh2YXIgayBpbiBtb2QpIGlmIChrICE9PSBcImRlZmF1bHRcIiAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobW9kLCBrKSkgX19jcmVhdGVCaW5kaW5nKHJlc3VsdCwgbW9kLCBrKTtcbiAgICBfX3NldE1vZHVsZURlZmF1bHQocmVzdWx0LCBtb2QpO1xuICAgIHJldHVybiByZXN1bHQ7XG59O1xuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbnZhciBqc3hfcnVudGltZV8xID0gcmVxdWlyZShcInJlYWN0L2pzeC1ydW50aW1lXCIpO1xudmFyIFByb3BUeXBlcyA9IF9faW1wb3J0U3RhcihyZXF1aXJlKFwicHJvcC10eXBlc1wiKSk7XG52YXIgb3JkZXJfMSA9IHJlcXVpcmUoXCIuLi8uLi9tb2RlbC9vcmRlclwiKTtcbnZhciBPcmRlckFsaWFzQ29tcG9uZW50ID0gZnVuY3Rpb24gKF9hKSB7XG4gICAgdmFyIG9yZGVyID0gX2Eub3JkZXI7XG4gICAgcmV0dXJuICgoMCwganN4X3J1bnRpbWVfMS5qc3gpKFwiZGl2XCIsIF9fYXNzaWduKHsgY2xhc3NOYW1lOiBcIm0tMSBwLTJcIiB9LCB7IGNoaWxkcmVuOiAoMCwganN4X3J1bnRpbWVfMS5qc3hzKShcImg0XCIsIHsgY2hpbGRyZW46IFtcIk5SOiBcIiwgb3JkZXIuYWxpYXNdIH0pIH0pKSk7XG59O1xuT3JkZXJBbGlhc0NvbXBvbmVudC5wcm9wVHlwZXMgPSB7XG4gICAgb3JkZXI6IFByb3BUeXBlcy5pbnN0YW5jZU9mKG9yZGVyXzEuT3JkZXIpXG59O1xuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBPcmRlckFsaWFzQ29tcG9uZW50O1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19hc3NpZ24gPSAodGhpcyAmJiB0aGlzLl9fYXNzaWduKSB8fCBmdW5jdGlvbiAoKSB7XG4gICAgX19hc3NpZ24gPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uKHQpIHtcbiAgICAgICAgZm9yICh2YXIgcywgaSA9IDEsIG4gPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbjsgaSsrKSB7XG4gICAgICAgICAgICBzID0gYXJndW1lbnRzW2ldO1xuICAgICAgICAgICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApKVxuICAgICAgICAgICAgICAgIHRbcF0gPSBzW3BdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0O1xuICAgIH07XG4gICAgcmV0dXJuIF9fYXNzaWduLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG59O1xudmFyIF9fY3JlYXRlQmluZGluZyA9ICh0aGlzICYmIHRoaXMuX19jcmVhdGVCaW5kaW5nKSB8fCAoT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgdmFyIGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG0sIGspO1xuICAgIGlmICghZGVzYyB8fCAoXCJnZXRcIiBpbiBkZXNjID8gIW0uX19lc01vZHVsZSA6IGRlc2Mud3JpdGFibGUgfHwgZGVzYy5jb25maWd1cmFibGUpKSB7XG4gICAgICBkZXNjID0geyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uKCkgeyByZXR1cm4gbVtrXTsgfSB9O1xuICAgIH1cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgazIsIGRlc2MpO1xufSkgOiAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIG9bazJdID0gbVtrXTtcbn0pKTtcbnZhciBfX3NldE1vZHVsZURlZmF1bHQgPSAodGhpcyAmJiB0aGlzLl9fc2V0TW9kdWxlRGVmYXVsdCkgfHwgKE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgdikge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBcImRlZmF1bHRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdiB9KTtcbn0pIDogZnVuY3Rpb24obywgdikge1xuICAgIG9bXCJkZWZhdWx0XCJdID0gdjtcbn0pO1xudmFyIF9faW1wb3J0U3RhciA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnRTdGFyKSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgaWYgKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgcmV0dXJuIG1vZDtcbiAgICB2YXIgcmVzdWx0ID0ge307XG4gICAgaWYgKG1vZCAhPSBudWxsKSBmb3IgKHZhciBrIGluIG1vZCkgaWYgKGsgIT09IFwiZGVmYXVsdFwiICYmIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChtb2QsIGspKSBfX2NyZWF0ZUJpbmRpbmcocmVzdWx0LCBtb2QsIGspO1xuICAgIF9fc2V0TW9kdWxlRGVmYXVsdChyZXN1bHQsIG1vZCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbn07XG52YXIgX19hd2FpdGVyID0gKHRoaXMgJiYgdGhpcy5fX2F3YWl0ZXIpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcbiAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xuICAgIH0pO1xufTtcbnZhciBfX2dlbmVyYXRvciA9ICh0aGlzICYmIHRoaXMuX19nZW5lcmF0b3IpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBib2R5KSB7XG4gICAgdmFyIF8gPSB7IGxhYmVsOiAwLCBzZW50OiBmdW5jdGlvbigpIHsgaWYgKHRbMF0gJiAxKSB0aHJvdyB0WzFdOyByZXR1cm4gdFsxXTsgfSwgdHJ5czogW10sIG9wczogW10gfSwgZiwgeSwgdCwgZztcbiAgICByZXR1cm4gZyA9IHsgbmV4dDogdmVyYigwKSwgXCJ0aHJvd1wiOiB2ZXJiKDEpLCBcInJldHVyblwiOiB2ZXJiKDIpIH0sIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiAoZ1tTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzOyB9KSwgZztcbiAgICBmdW5jdGlvbiB2ZXJiKG4pIHsgcmV0dXJuIGZ1bmN0aW9uICh2KSB7IHJldHVybiBzdGVwKFtuLCB2XSk7IH07IH1cbiAgICBmdW5jdGlvbiBzdGVwKG9wKSB7XG4gICAgICAgIGlmIChmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLlwiKTtcbiAgICAgICAgd2hpbGUgKF8pIHRyeSB7XG4gICAgICAgICAgICBpZiAoZiA9IDEsIHkgJiYgKHQgPSBvcFswXSAmIDIgPyB5W1wicmV0dXJuXCJdIDogb3BbMF0gPyB5W1widGhyb3dcIl0gfHwgKCh0ID0geVtcInJldHVyblwiXSkgJiYgdC5jYWxsKHkpLCAwKSA6IHkubmV4dCkgJiYgISh0ID0gdC5jYWxsKHksIG9wWzFdKSkuZG9uZSkgcmV0dXJuIHQ7XG4gICAgICAgICAgICBpZiAoeSA9IDAsIHQpIG9wID0gW29wWzBdICYgMiwgdC52YWx1ZV07XG4gICAgICAgICAgICBzd2l0Y2ggKG9wWzBdKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAwOiBjYXNlIDE6IHQgPSBvcDsgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSA0OiBfLmxhYmVsKys7IHJldHVybiB7IHZhbHVlOiBvcFsxXSwgZG9uZTogZmFsc2UgfTtcbiAgICAgICAgICAgICAgICBjYXNlIDU6IF8ubGFiZWwrKzsgeSA9IG9wWzFdOyBvcCA9IFswXTsgY29udGludWU7XG4gICAgICAgICAgICAgICAgY2FzZSA3OiBvcCA9IF8ub3BzLnBvcCgpOyBfLnRyeXMucG9wKCk7IGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIGlmICghKHQgPSBfLnRyeXMsIHQgPSB0Lmxlbmd0aCA+IDAgJiYgdFt0Lmxlbmd0aCAtIDFdKSAmJiAob3BbMF0gPT09IDYgfHwgb3BbMF0gPT09IDIpKSB7IF8gPSAwOyBjb250aW51ZTsgfVxuICAgICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDMgJiYgKCF0IHx8IChvcFsxXSA+IHRbMF0gJiYgb3BbMV0gPCB0WzNdKSkpIHsgXy5sYWJlbCA9IG9wWzFdOyBicmVhazsgfVxuICAgICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDYgJiYgXy5sYWJlbCA8IHRbMV0pIHsgXy5sYWJlbCA9IHRbMV07IHQgPSBvcDsgYnJlYWs7IH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHQgJiYgXy5sYWJlbCA8IHRbMl0pIHsgXy5sYWJlbCA9IHRbMl07IF8ub3BzLnB1c2gob3ApOyBicmVhazsgfVxuICAgICAgICAgICAgICAgICAgICBpZiAodFsyXSkgXy5vcHMucG9wKCk7XG4gICAgICAgICAgICAgICAgICAgIF8udHJ5cy5wb3AoKTsgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvcCA9IGJvZHkuY2FsbCh0aGlzQXJnLCBfKTtcbiAgICAgICAgfSBjYXRjaCAoZSkgeyBvcCA9IFs2LCBlXTsgeSA9IDA7IH0gZmluYWxseSB7IGYgPSB0ID0gMDsgfVxuICAgICAgICBpZiAob3BbMF0gJiA1KSB0aHJvdyBvcFsxXTsgcmV0dXJuIHsgdmFsdWU6IG9wWzBdID8gb3BbMV0gOiB2b2lkIDAsIGRvbmU6IHRydWUgfTtcbiAgICB9XG59O1xuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbnZhciBqc3hfcnVudGltZV8xID0gcmVxdWlyZShcInJlYWN0L2pzeC1ydW50aW1lXCIpO1xudmFyIHJlYWN0X3NlbGVjdF9hc3luY19wYWdpbmF0ZV8xID0gcmVxdWlyZShcInJlYWN0LXNlbGVjdC1hc3luYy1wYWdpbmF0ZVwiKTtcbnZhciBwYXltZW50XzEgPSByZXF1aXJlKFwiLi4vLi4vc2VydmljZXMvcGF5bWVudFwiKTtcbnZhciBQcm9wVHlwZXMgPSBfX2ltcG9ydFN0YXIocmVxdWlyZShcInByb3AtdHlwZXNcIikpO1xudmFyIHNob3BfMSA9IHJlcXVpcmUoXCIuLi8uLi9tb2RlbC9zaG9wXCIpO1xudmFyIHRzeXJpbmdlXzEgPSByZXF1aXJlKFwidHN5cmluZ2VcIik7XG52YXIgb3JkZXJfMSA9IHJlcXVpcmUoXCIuLi8uLi9zdGF0ZS9vcmRlclwiKTtcbnZhciBvcmRlcl8yID0gcmVxdWlyZShcIi4uLy4uL21vZGVsL29yZGVyXCIpO1xudmFyIHJlYWN0XzEgPSByZXF1aXJlKFwicmVhY3RcIik7XG52YXIgU2VsZWN0TGFiZWxfMSA9IHJlcXVpcmUoXCIuLi9iYXNlL1NlbGVjdExhYmVsXCIpO1xudmFyIFBheW1lbnRDb21wb25lbnQgPSBmdW5jdGlvbiAoX2EpIHtcbiAgICB2YXIgc2hvcCA9IF9hLnNob3AsIG9yZGVyID0gX2Eub3JkZXI7XG4gICAgdmFyIF9iID0gKDAsIHJlYWN0XzEudXNlU3RhdGUpKG51bGwpLCBzaG9wVXVpZCA9IF9iWzBdLCBzZXRTaG9wVXVpZCA9IF9iWzFdO1xuICAgIHZhciBvcmRlclN0YXRlID0gdHN5cmluZ2VfMS5jb250YWluZXIucmVzb2x2ZShvcmRlcl8xLk9yZGVyU3RhdGUpO1xuICAgIHZhciBfYyA9ICgwLCByZWFjdF8xLnVzZVN0YXRlKSgwKSwgcGF5bWVudCA9IF9jWzBdLCBzZXRQYXltZW50ID0gX2NbMV07XG4gICAgdmFyIHBheW1lbnRfc2VydmljZSA9IG5ldyBwYXltZW50XzEuUGF5bWVudFNlcnZpY2UoKTtcbiAgICB2YXIgbG9hZE9wdGlvbnMgPSBmdW5jdGlvbiAoc2VhcmNoUXVlcnksIGxvYWRlZE9wdGlvbnMpIHsgcmV0dXJuIF9fYXdhaXRlcih2b2lkIDAsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBkYXRhO1xuICAgICAgICByZXR1cm4gX19nZW5lcmF0b3IodGhpcywgZnVuY3Rpb24gKF9hKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKF9hLmxhYmVsKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAwOiByZXR1cm4gWzQgLyp5aWVsZCovLCBwYXltZW50X3NlcnZpY2UuZ2V0UGF5bWVudHMoc2hvcCldO1xuICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICAgICAgZGF0YSA9IF9hLnNlbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFsyIC8qcmV0dXJuKi8sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zOiBkYXRhLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc01vcmU6IGZhbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICB9XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSk7IH07XG4gICAgKDAsIHJlYWN0XzEudXNlRWZmZWN0KShmdW5jdGlvbiAoKSB7XG4gICAgICAgIHNldFNob3BVdWlkKHNob3AudXVpZCk7XG4gICAgfSwgW3Nob3AudXVpZF0pO1xuICAgICgwLCByZWFjdF8xLnVzZUVmZmVjdCkoZnVuY3Rpb24gKCkge1xuICAgICAgICBzZXRQYXltZW50KG9yZGVyLnBheW1lbnQudWlkKTtcbiAgICB9LCBbb3JkZXIucGF5bWVudF0pO1xuICAgIHZhciBvbkNoYW5nZSA9IGZ1bmN0aW9uIChvcHRpb24pIHtcbiAgICAgICAgb3JkZXIucGF5bWVudCA9IG9wdGlvbjtcbiAgICAgICAgdmFyIG9yZGVyT2JqID0gb3JkZXJTdGF0ZS5nZXRDdXJyZW50T3JkZXIoKS5nZXRWYWx1ZSgpO1xuICAgICAgICBvcmRlck9iai5wYXltZW50ID0gb3B0aW9uO1xuICAgICAgICBvcmRlclN0YXRlLnNldEN1cnJlbnRPcmRlcihvcmRlck9iaik7XG4gICAgICAgIHNldFBheW1lbnQob3B0aW9uLnVpZCk7XG4gICAgfTtcbiAgICByZXR1cm4gKCgwLCBqc3hfcnVudGltZV8xLmpzeCkoXCJkaXZcIiwgX19hc3NpZ24oeyBjbGFzc05hbWU6IFwicC0yXCIgfSwgeyBjaGlsZHJlbjogKDAsIGpzeF9ydW50aW1lXzEuanN4KShyZWFjdF9zZWxlY3RfYXN5bmNfcGFnaW5hdGVfMS5Bc3luY1BhZ2luYXRlLCB7IGRlZmF1bHRPcHRpb25zOiB0cnVlLCBjb21wb25lbnRzOiB7IENvbnRyb2w6IFNlbGVjdExhYmVsXzEuU2VsZWN0TGFiZWwgfSwgZGVmYXVsdFZhbHVlOiBvcmRlci5wYXltZW50LCBsb2FkT3B0aW9uczogbG9hZE9wdGlvbnMsIHBsYWNlaG9sZGVyOiAnJywgbmFtZTogJ1phaGxhcnQnLCBnZXRPcHRpb25WYWx1ZTogZnVuY3Rpb24gKG9wdGlvbikgeyByZXR1cm4gb3B0aW9uLnVpZDsgfSwgZ2V0T3B0aW9uTGFiZWw6IGZ1bmN0aW9uIChvcHRpb24pIHsgcmV0dXJuIG9wdGlvbi50aXRsZTsgfSwgb25DaGFuZ2U6IG9uQ2hhbmdlLCBpc1NlYXJjaGFibGU6IGZhbHNlLCBjbGFzc05hbWU6IFwiXCIuY29uY2F0KHBheW1lbnQgPT0gMCA/IFwiYm9yZGVyIGJvcmRlci1yZWQtNTAwXCIgOiBcIlwiKSB9LCBKU09OLnN0cmluZ2lmeShzaG9wVXVpZCkpIH0pKSk7XG59O1xuUGF5bWVudENvbXBvbmVudC5wcm9wVHlwZXMgPSB7XG4gICAgc2hvcDogUHJvcFR5cGVzLmluc3RhbmNlT2Yoc2hvcF8xLlNob3ApLFxuICAgIG9yZGVyOiBQcm9wVHlwZXMuaW5zdGFuY2VPZihvcmRlcl8yLk9yZGVyKVxufTtcbmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gUGF5bWVudENvbXBvbmVudDtcbiIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9fYXNzaWduID0gKHRoaXMgJiYgdGhpcy5fX2Fzc2lnbikgfHwgZnVuY3Rpb24gKCkge1xuICAgIF9fYXNzaWduID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbih0KSB7XG4gICAgICAgIGZvciAodmFyIHMsIGkgPSAxLCBuID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IG47IGkrKykge1xuICAgICAgICAgICAgcyA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSlcbiAgICAgICAgICAgICAgICB0W3BdID0gc1twXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdDtcbiAgICB9O1xuICAgIHJldHVybiBfX2Fzc2lnbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xufTtcbnZhciBfX2NyZWF0ZUJpbmRpbmcgPSAodGhpcyAmJiB0aGlzLl9fY3JlYXRlQmluZGluZykgfHwgKE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihtLCBrKTtcbiAgICBpZiAoIWRlc2MgfHwgKFwiZ2V0XCIgaW4gZGVzYyA/ICFtLl9fZXNNb2R1bGUgOiBkZXNjLndyaXRhYmxlIHx8IGRlc2MuY29uZmlndXJhYmxlKSkge1xuICAgICAgZGVzYyA9IHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIG1ba107IH0gfTtcbiAgICB9XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIGsyLCBkZXNjKTtcbn0pIDogKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICBvW2syXSA9IG1ba107XG59KSk7XG52YXIgX19zZXRNb2R1bGVEZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX3NldE1vZHVsZURlZmF1bHQpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIHYpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgXCJkZWZhdWx0XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHYgfSk7XG59KSA6IGZ1bmN0aW9uKG8sIHYpIHtcbiAgICBvW1wiZGVmYXVsdFwiXSA9IHY7XG59KTtcbnZhciBfX2ltcG9ydFN0YXIgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0U3RhcikgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIGlmIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpIHJldHVybiBtb2Q7XG4gICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgIGlmIChtb2QgIT0gbnVsbCkgZm9yICh2YXIgayBpbiBtb2QpIGlmIChrICE9PSBcImRlZmF1bHRcIiAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobW9kLCBrKSkgX19jcmVhdGVCaW5kaW5nKHJlc3VsdCwgbW9kLCBrKTtcbiAgICBfX3NldE1vZHVsZURlZmF1bHQocmVzdWx0LCBtb2QpO1xuICAgIHJldHVybiByZXN1bHQ7XG59O1xudmFyIF9faW1wb3J0RGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnREZWZhdWx0KSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgcmV0dXJuIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpID8gbW9kIDogeyBcImRlZmF1bHRcIjogbW9kIH07XG59O1xuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbnZhciBqc3hfcnVudGltZV8xID0gcmVxdWlyZShcInJlYWN0L2pzeC1ydW50aW1lXCIpO1xudmFyIHJlYWN0XzEgPSByZXF1aXJlKFwicmVhY3RcIik7XG52YXIgUHJvcFR5cGVzID0gX19pbXBvcnRTdGFyKHJlcXVpcmUoXCJwcm9wLXR5cGVzXCIpKTtcbnZhciBzaG9wXzEgPSByZXF1aXJlKFwiLi4vLi4vbW9kZWwvc2hvcFwiKTtcbnZhciBwcm9kdWN0XzEgPSByZXF1aXJlKFwiLi4vLi4vbW9kZWwvcHJvZHVjdFwiKTtcbnZhciBwcm9kdWN0R3JvdXBfMSA9IHJlcXVpcmUoXCIuLi8uLi9tb2RlbC9wcm9kdWN0R3JvdXBcIik7XG52YXIgUHJvZHVjdEdyb3VwU2VsZWN0XzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIi4uL3Byb2R1Y3QvUHJvZHVjdEdyb3VwU2VsZWN0XCIpKTtcbnZhciBQcm9kdWN0U2VsZWN0XzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIi4uL3Byb2R1Y3QvUHJvZHVjdFNlbGVjdFwiKSk7XG52YXIgUHJvZHVjdEZvcm1fMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiLi4vcHJvZHVjdC9Qcm9kdWN0Rm9ybVwiKSk7XG52YXIgcG9zXzEgPSByZXF1aXJlKFwiLi4vLi4vbW9kZWwvcG9zXCIpO1xudmFyIEJ1dHRvbl8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCIuLi9iYXNlL0J1dHRvblwiKSk7XG52YXIgZmxvd2JpdGVfcmVhY3RfMSA9IHJlcXVpcmUoXCJmbG93Yml0ZS1yZWFjdFwiKTtcbnZhciBBZGRQb3NpdGlvbkNvbXBvbmVudCA9IGZ1bmN0aW9uIChwcm9wcykge1xuICAgIHZhciBfYSA9ICgwLCByZWFjdF8xLnVzZVN0YXRlKShudWxsKSwgc2hvcCA9IF9hWzBdLCBzZXRTaG9wID0gX2FbMV07XG4gICAgKDAsIHJlYWN0XzEudXNlRWZmZWN0KShmdW5jdGlvbiAoKSB7XG4gICAgICAgIHNldFNob3AocHJvcHMuc2hvcCk7XG4gICAgfSwgW3Byb3BzLnNob3BdKTtcbiAgICB2YXIgX2IgPSAoMCwgcmVhY3RfMS51c2VTdGF0ZSkoZmFsc2UpLCBzaG93ID0gX2JbMF0sIHNldFNob3cgPSBfYlsxXTtcbiAgICB2YXIgcG9zID0gbmV3IHBvc18xLlBvcygpO1xuICAgIHZhciBoYW5kbGVDbG9zZSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHNldFNob3coZmFsc2UpOyB9O1xuICAgIHZhciBoYW5kbGVTaG93ID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gc2V0U2hvdyh0cnVlKTsgfTtcbiAgICB2YXIgX2MgPSAoMCwgcmVhY3RfMS51c2VTdGF0ZSkobmV3IHByb2R1Y3RfMS5Qcm9kdWN0KCkpLCBwcm9kdWN0ID0gX2NbMF0sIHNldFByb2R1Y3QgPSBfY1sxXTtcbiAgICB2YXIgX2QgPSAoMCwgcmVhY3RfMS51c2VTdGF0ZSkobmV3IHByb2R1Y3RHcm91cF8xLlByb2R1Y3RHcm91cCgpKSwgcHJvZHVjdEdyb3VwID0gX2RbMF0sIHNldFByb2R1Y3RHcm91cCA9IF9kWzFdO1xuICAgIHBvcy5wcm9kdWN0ID0gcHJvZHVjdDtcbiAgICByZXR1cm4gKCgwLCBqc3hfcnVudGltZV8xLmpzeHMpKFwiZGl2XCIsIF9fYXNzaWduKHsgY2xhc3NOYW1lOiAndGV4dC1jZW50ZXInIH0sIHsgY2hpbGRyZW46IFsoMCwganN4X3J1bnRpbWVfMS5qc3gpKEJ1dHRvbl8xW1wiZGVmYXVsdFwiXSwgeyB0eXBlOiAxLCBvbkNsaWNrOiBoYW5kbGVTaG93LCB2YXJpYW50OiBcInN1Y2Nlc3NcIiB9KSwgKDAsIGpzeF9ydW50aW1lXzEuanN4cykoZmxvd2JpdGVfcmVhY3RfMS5Nb2RhbCwgX19hc3NpZ24oeyBzaXplOiBcIjd4bFwiLCBzaG93OiBzaG93LCBvbkNsb3NlOiBmdW5jdGlvbiAoKSB7IHJldHVybiBoYW5kbGVDbG9zZSgpOyB9IH0sIHsgY2hpbGRyZW46IFsoMCwganN4X3J1bnRpbWVfMS5qc3gpKGZsb3diaXRlX3JlYWN0XzEuTW9kYWwuSGVhZGVyLCB7IGNoaWxkcmVuOiBcImFkZCBwb3NpdGlvblwiIH0pLCAoMCwganN4X3J1bnRpbWVfMS5qc3hzKShmbG93Yml0ZV9yZWFjdF8xLk1vZGFsLkJvZHksIF9fYXNzaWduKHsgY2xhc3NOYW1lOiBcIm1pbi1oLTk2XCIgfSwgeyBjaGlsZHJlbjogWygwLCBqc3hfcnVudGltZV8xLmpzeHMpKFwiZGl2XCIsIF9fYXNzaWduKHsgY2xhc3NOYW1lOiAnZmxleCcgfSwgeyBjaGlsZHJlbjogWygwLCBqc3hfcnVudGltZV8xLmpzeHMpKFwiZGl2XCIsIF9fYXNzaWduKHsgY2xhc3NOYW1lOiAnZmxleC0xJyB9LCB7IGNoaWxkcmVuOiBbKDAsIGpzeF9ydW50aW1lXzEuanN4KShcImg0XCIsIHsgY2hpbGRyZW46IFwiUHJvZHVjdEdyb3VwXCIgfSksICgwLCBqc3hfcnVudGltZV8xLmpzeCkoUHJvZHVjdEdyb3VwU2VsZWN0XzFbXCJkZWZhdWx0XCJdLCB7IHZhbHVlOiBwcm9kdWN0R3JvdXAsIHNob3A6IHByb3BzLnNob3AsIG9uQ2hhbmdlOiBzZXRQcm9kdWN0R3JvdXAgfSldIH0pKSwgKDAsIGpzeF9ydW50aW1lXzEuanN4cykoXCJkaXZcIiwgX19hc3NpZ24oeyBjbGFzc05hbWU6ICdmbGV4LTEnIH0sIHsgY2hpbGRyZW46IFsoMCwganN4X3J1bnRpbWVfMS5qc3gpKFwiaDRcIiwgeyBjaGlsZHJlbjogXCJQcm9kdWN0XCIgfSksICgwLCBqc3hfcnVudGltZV8xLmpzeCkoUHJvZHVjdFNlbGVjdF8xW1wiZGVmYXVsdFwiXSwgeyB2YWx1ZTogcHJvZHVjdCwgc2hvcDogcHJvcHMuc2hvcCwgcHJvZHVjdEdyb3VwOiBwcm9kdWN0R3JvdXAsIG9uQ2hhbmdlOiBzZXRQcm9kdWN0IH0pXSB9KSldIH0pKSwgKDAsIGpzeF9ydW50aW1lXzEuanN4KShQcm9kdWN0Rm9ybV8xW1wiZGVmYXVsdFwiXSwgeyBwb3M6IHBvcywgaGFuZGxlQ2hhbmdlOiBwcm9wcy5hZGRQb3MsIGhhbmRsZUNsb3NlOiBoYW5kbGVDbG9zZSB9KV0gfSkpXSB9KSldIH0pKSk7XG59O1xuQWRkUG9zaXRpb25Db21wb25lbnQucHJvcFR5cGVzID0ge1xuICAgIHNob3A6IFByb3BUeXBlcy5pbnN0YW5jZU9mKHNob3BfMS5TaG9wKSxcbiAgICBhZGRQb3M6IFByb3BUeXBlcy5mdW5jXG59O1xuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBBZGRQb3NpdGlvbkNvbXBvbmVudDtcbiIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9fYXNzaWduID0gKHRoaXMgJiYgdGhpcy5fX2Fzc2lnbikgfHwgZnVuY3Rpb24gKCkge1xuICAgIF9fYXNzaWduID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbih0KSB7XG4gICAgICAgIGZvciAodmFyIHMsIGkgPSAxLCBuID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IG47IGkrKykge1xuICAgICAgICAgICAgcyA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSlcbiAgICAgICAgICAgICAgICB0W3BdID0gc1twXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdDtcbiAgICB9O1xuICAgIHJldHVybiBfX2Fzc2lnbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xufTtcbnZhciBfX2NyZWF0ZUJpbmRpbmcgPSAodGhpcyAmJiB0aGlzLl9fY3JlYXRlQmluZGluZykgfHwgKE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihtLCBrKTtcbiAgICBpZiAoIWRlc2MgfHwgKFwiZ2V0XCIgaW4gZGVzYyA/ICFtLl9fZXNNb2R1bGUgOiBkZXNjLndyaXRhYmxlIHx8IGRlc2MuY29uZmlndXJhYmxlKSkge1xuICAgICAgZGVzYyA9IHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIG1ba107IH0gfTtcbiAgICB9XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIGsyLCBkZXNjKTtcbn0pIDogKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICBvW2syXSA9IG1ba107XG59KSk7XG52YXIgX19zZXRNb2R1bGVEZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX3NldE1vZHVsZURlZmF1bHQpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIHYpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgXCJkZWZhdWx0XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHYgfSk7XG59KSA6IGZ1bmN0aW9uKG8sIHYpIHtcbiAgICBvW1wiZGVmYXVsdFwiXSA9IHY7XG59KTtcbnZhciBfX2ltcG9ydFN0YXIgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0U3RhcikgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIGlmIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpIHJldHVybiBtb2Q7XG4gICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgIGlmIChtb2QgIT0gbnVsbCkgZm9yICh2YXIgayBpbiBtb2QpIGlmIChrICE9PSBcImRlZmF1bHRcIiAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobW9kLCBrKSkgX19jcmVhdGVCaW5kaW5nKHJlc3VsdCwgbW9kLCBrKTtcbiAgICBfX3NldE1vZHVsZURlZmF1bHQocmVzdWx0LCBtb2QpO1xuICAgIHJldHVybiByZXN1bHQ7XG59O1xudmFyIF9faW1wb3J0RGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnREZWZhdWx0KSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgcmV0dXJuIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpID8gbW9kIDogeyBcImRlZmF1bHRcIjogbW9kIH07XG59O1xuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbnZhciBqc3hfcnVudGltZV8xID0gcmVxdWlyZShcInJlYWN0L2pzeC1ydW50aW1lXCIpO1xudmFyIHJlYWN0XzEgPSByZXF1aXJlKFwicmVhY3RcIik7XG52YXIgUHJvcFR5cGVzID0gX19pbXBvcnRTdGFyKHJlcXVpcmUoXCJwcm9wLXR5cGVzXCIpKTtcbnZhciBzaG9wXzEgPSByZXF1aXJlKFwiLi4vLi4vbW9kZWwvc2hvcFwiKTtcbnZhciBwb3NfMSA9IHJlcXVpcmUoXCIuLi8uLi9tb2RlbC9wb3NcIik7XG52YXIgQnV0dG9uXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIi4uL2Jhc2UvQnV0dG9uXCIpKTtcbnZhciBQcm9kdWN0Rm9ybV8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCIuLi9wcm9kdWN0L1Byb2R1Y3RGb3JtXCIpKTtcbnZhciBmbG93Yml0ZV9yZWFjdF8xID0gcmVxdWlyZShcImZsb3diaXRlLXJlYWN0XCIpO1xudmFyIEVkaXRQb3NpdGlvbkNvbXBvbmVudCA9IGZ1bmN0aW9uIChfYSkge1xuICAgIHZhciBwb3NpdGlvbiA9IF9hLnBvc2l0aW9uLCBzaG9wID0gX2Euc2hvcCwgY2hhbmdlUG9zID0gX2EuY2hhbmdlUG9zO1xuICAgIHZhciBfYiA9ICgwLCByZWFjdF8xLnVzZVN0YXRlKShmYWxzZSksIHNob3cgPSBfYlswXSwgc2V0U2hvdyA9IF9iWzFdO1xuICAgIHZhciBoYW5kbGVDbG9zZSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHNldFNob3coZmFsc2UpOyB9O1xuICAgIHZhciBoYW5kbGVTaG93ID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gc2V0U2hvdyh0cnVlKTsgfTtcbiAgICByZXR1cm4gKCgwLCBqc3hfcnVudGltZV8xLmpzeHMpKFwiZGl2XCIsIHsgY2hpbGRyZW46IFsoMCwganN4X3J1bnRpbWVfMS5qc3gpKFwiZGl2XCIsIHsgY2hpbGRyZW46ICgwLCBqc3hfcnVudGltZV8xLmpzeCkoQnV0dG9uXzFbXCJkZWZhdWx0XCJdLCB7IHR5cGU6IDIsIHZhcmlhbnQ6IFwiZ3JheVwiLCBvbkNsaWNrOiBoYW5kbGVTaG93IH0pIH0pLCAoMCwganN4X3J1bnRpbWVfMS5qc3hzKShmbG93Yml0ZV9yZWFjdF8xLk1vZGFsLCBfX2Fzc2lnbih7IHNpemU6IFwiN3hsXCIsIHNob3c6IHNob3csIG9uQ2xvc2U6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGhhbmRsZUNsb3NlKCk7IH0gfSwgeyBjaGlsZHJlbjogWygwLCBqc3hfcnVudGltZV8xLmpzeCkoZmxvd2JpdGVfcmVhY3RfMS5Nb2RhbC5IZWFkZXIsIF9fYXNzaWduKHsgY2xhc3NOYW1lOiBcInRleHQtbWF1dmUxMiBtLTAgdGV4dC1bMTdweF0gZm9udC1tZWRpdW1cIiB9LCB7IGNoaWxkcmVuOiBcImVkaXQgcG9zaXRpb25cIiB9KSksICgwLCBqc3hfcnVudGltZV8xLmpzeCkoZmxvd2JpdGVfcmVhY3RfMS5Nb2RhbC5Cb2R5LCB7IGNoaWxkcmVuOiAoMCwganN4X3J1bnRpbWVfMS5qc3gpKFByb2R1Y3RGb3JtXzFbXCJkZWZhdWx0XCJdLCB7IHBvczogcG9zaXRpb24sIGhhbmRsZUNoYW5nZTogY2hhbmdlUG9zLCBoYW5kbGVDbG9zZTogaGFuZGxlQ2xvc2UgfSkgfSldIH0pKV0gfSkpO1xufTtcbkVkaXRQb3NpdGlvbkNvbXBvbmVudC5wcm9wVHlwZXMgPSB7XG4gICAgc2hvcDogUHJvcFR5cGVzLmluc3RhbmNlT2Yoc2hvcF8xLlNob3ApLFxuICAgIHBvc2l0aW9uOiBQcm9wVHlwZXMuaW5zdGFuY2VPZihwb3NfMS5Qb3MpLFxuICAgIGNoYW5nZVBvczogUHJvcFR5cGVzLmZ1bmNcbn07XG5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IEVkaXRQb3NpdGlvbkNvbXBvbmVudDtcbiIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9fYXNzaWduID0gKHRoaXMgJiYgdGhpcy5fX2Fzc2lnbikgfHwgZnVuY3Rpb24gKCkge1xuICAgIF9fYXNzaWduID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbih0KSB7XG4gICAgICAgIGZvciAodmFyIHMsIGkgPSAxLCBuID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IG47IGkrKykge1xuICAgICAgICAgICAgcyA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSlcbiAgICAgICAgICAgICAgICB0W3BdID0gc1twXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdDtcbiAgICB9O1xuICAgIHJldHVybiBfX2Fzc2lnbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xufTtcbnZhciBfX2NyZWF0ZUJpbmRpbmcgPSAodGhpcyAmJiB0aGlzLl9fY3JlYXRlQmluZGluZykgfHwgKE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihtLCBrKTtcbiAgICBpZiAoIWRlc2MgfHwgKFwiZ2V0XCIgaW4gZGVzYyA/ICFtLl9fZXNNb2R1bGUgOiBkZXNjLndyaXRhYmxlIHx8IGRlc2MuY29uZmlndXJhYmxlKSkge1xuICAgICAgZGVzYyA9IHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIG1ba107IH0gfTtcbiAgICB9XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIGsyLCBkZXNjKTtcbn0pIDogKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICBvW2syXSA9IG1ba107XG59KSk7XG52YXIgX19zZXRNb2R1bGVEZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX3NldE1vZHVsZURlZmF1bHQpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIHYpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgXCJkZWZhdWx0XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHYgfSk7XG59KSA6IGZ1bmN0aW9uKG8sIHYpIHtcbiAgICBvW1wiZGVmYXVsdFwiXSA9IHY7XG59KTtcbnZhciBfX2ltcG9ydFN0YXIgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0U3RhcikgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIGlmIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpIHJldHVybiBtb2Q7XG4gICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgIGlmIChtb2QgIT0gbnVsbCkgZm9yICh2YXIgayBpbiBtb2QpIGlmIChrICE9PSBcImRlZmF1bHRcIiAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobW9kLCBrKSkgX19jcmVhdGVCaW5kaW5nKHJlc3VsdCwgbW9kLCBrKTtcbiAgICBfX3NldE1vZHVsZURlZmF1bHQocmVzdWx0LCBtb2QpO1xuICAgIHJldHVybiByZXN1bHQ7XG59O1xudmFyIF9faW1wb3J0RGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnREZWZhdWx0KSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgcmV0dXJuIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpID8gbW9kIDogeyBcImRlZmF1bHRcIjogbW9kIH07XG59O1xuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbnZhciBqc3hfcnVudGltZV8xID0gcmVxdWlyZShcInJlYWN0L2pzeC1ydW50aW1lXCIpO1xudmFyIFByb3BUeXBlcyA9IF9faW1wb3J0U3RhcihyZXF1aXJlKFwicHJvcC10eXBlc1wiKSk7XG52YXIgUG9zQ29tcG9uZW50XzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIi4vUG9zQ29tcG9uZW50XCIpKTtcbnZhciBzaG9wXzEgPSByZXF1aXJlKFwiLi4vLi4vbW9kZWwvc2hvcFwiKTtcbnZhciBJdGVtc0NvbXBvbmVudCA9IGZ1bmN0aW9uIChfYSkge1xuICAgIHZhciBwb3NpdGlvbnMgPSBfYS5wb3NpdGlvbnMsIGRlbFBvcyA9IF9hLmRlbFBvcywgc2hvcCA9IF9hLnNob3AsIGNoYW5nZVBvcyA9IF9hLmNoYW5nZVBvcztcbiAgICByZXR1cm4gKCgwLCBqc3hfcnVudGltZV8xLmpzeHMpKFwiZGl2XCIsIHsgY2hpbGRyZW46IFsoMCwganN4X3J1bnRpbWVfMS5qc3hzKShcImRpdlwiLCBfX2Fzc2lnbih7IGNsYXNzTmFtZTogJ2ZsZXgnIH0sIHsgY2hpbGRyZW46IFsoMCwganN4X3J1bnRpbWVfMS5qc3gpKFwiZGl2XCIsIF9fYXNzaWduKHsgY2xhc3NOYW1lOiAnZmxleC0xJyB9LCB7IGNoaWxkcmVuOiAoMCwganN4X3J1bnRpbWVfMS5qc3gpKFwiaDVcIiwgeyBjaGlsZHJlbjogXCJQb3NcIiB9KSB9KSksICgwLCBqc3hfcnVudGltZV8xLmpzeCkoXCJkaXZcIiwgX19hc3NpZ24oeyBjbGFzc05hbWU6ICdmbGV4LTEnIH0sIHsgY2hpbGRyZW46ICgwLCBqc3hfcnVudGltZV8xLmpzeCkoXCJoNVwiLCB7IGNoaWxkcmVuOiBcIlRpdGxlXCIgfSkgfSkpLCAoMCwganN4X3J1bnRpbWVfMS5qc3gpKFwiZGl2XCIsIF9fYXNzaWduKHsgY2xhc3NOYW1lOiAnZmxleC0xJyB9LCB7IGNoaWxkcmVuOiAoMCwganN4X3J1bnRpbWVfMS5qc3gpKFwiaDVcIiwgeyBjaGlsZHJlbjogXCJBbnphaGxcIiB9KSB9KSksICgwLCBqc3hfcnVudGltZV8xLmpzeCkoXCJkaXZcIiwgX19hc3NpZ24oeyBjbGFzc05hbWU6ICdmbGV4LTEgdGV4dC1lbmQnIH0sIHsgY2hpbGRyZW46ICgwLCBqc3hfcnVudGltZV8xLmpzeCkoXCJoNVwiLCB7IGNoaWxkcmVuOiBcIk5ldHRvXCIgfSkgfSkpLCAoMCwganN4X3J1bnRpbWVfMS5qc3gpKFwiZGl2XCIsIF9fYXNzaWduKHsgY2xhc3NOYW1lOiAnZmxleC0xIHRleHQtZW5kJyB9LCB7IGNoaWxkcmVuOiAoMCwganN4X3J1bnRpbWVfMS5qc3gpKFwiaDVcIiwgeyBjaGlsZHJlbjogXCJUYXhcIiB9KSB9KSksICgwLCBqc3hfcnVudGltZV8xLmpzeCkoXCJkaXZcIiwgX19hc3NpZ24oeyBjbGFzc05hbWU6ICdmbGV4LTEgdGV4dC1lbmQnIH0sIHsgY2hpbGRyZW46ICgwLCBqc3hfcnVudGltZV8xLmpzeCkoXCJoNVwiLCB7IGNoaWxkcmVuOiBcIkdyb3NzXCIgfSkgfSkpLCAoMCwganN4X3J1bnRpbWVfMS5qc3gpKFwiZGl2XCIsIF9fYXNzaWduKHsgY2xhc3NOYW1lOiAnZmxleC0xIHRleHQtZW5kJyB9LCB7IGNoaWxkcmVuOiAoMCwganN4X3J1bnRpbWVfMS5qc3gpKFwiaDVcIiwgeyBjaGlsZHJlbjogXCJTdGF0dXNcIiB9KSB9KSksICgwLCBqc3hfcnVudGltZV8xLmpzeCkoXCJkaXZcIiwgeyBjbGFzc05hbWU6ICdmbGV4LTEnIH0pXSB9KSksICgwLCBqc3hfcnVudGltZV8xLmpzeCkoXCJoclwiLCB7fSksIHBvc2l0aW9ucy5tYXAoZnVuY3Rpb24gKG9iamVjdCwgaSkgeyByZXR1cm4gKDAsIGpzeF9ydW50aW1lXzEuanN4KShQb3NDb21wb25lbnRfMVtcImRlZmF1bHRcIl0sIHsgcG9zOiBvYmplY3QsIHNob3A6IHNob3AsIGRlbFBvczogZGVsUG9zLCBjaGFuZ2VQb3M6IGNoYW5nZVBvcywgaW5kZXg6IGkgfSwgaSk7IH0pXSB9KSk7XG59O1xuSXRlbXNDb21wb25lbnQucHJvcFR5cGVzID0ge1xuICAgIHBvc2l0aW9uczogUHJvcFR5cGVzLmFycmF5LFxuICAgIGRlbFBvczogUHJvcFR5cGVzLmZ1bmMsXG4gICAgY2hhbmdlUG9zOiBQcm9wVHlwZXMuZnVuYyxcbiAgICBzaG9wOiBQcm9wVHlwZXMuaW5zdGFuY2VPZihzaG9wXzEuU2hvcClcbn07XG5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IEl0ZW1zQ29tcG9uZW50O1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19hc3NpZ24gPSAodGhpcyAmJiB0aGlzLl9fYXNzaWduKSB8fCBmdW5jdGlvbiAoKSB7XG4gICAgX19hc3NpZ24gPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uKHQpIHtcbiAgICAgICAgZm9yICh2YXIgcywgaSA9IDEsIG4gPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbjsgaSsrKSB7XG4gICAgICAgICAgICBzID0gYXJndW1lbnRzW2ldO1xuICAgICAgICAgICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApKVxuICAgICAgICAgICAgICAgIHRbcF0gPSBzW3BdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0O1xuICAgIH07XG4gICAgcmV0dXJuIF9fYXNzaWduLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG59O1xudmFyIF9fY3JlYXRlQmluZGluZyA9ICh0aGlzICYmIHRoaXMuX19jcmVhdGVCaW5kaW5nKSB8fCAoT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgdmFyIGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG0sIGspO1xuICAgIGlmICghZGVzYyB8fCAoXCJnZXRcIiBpbiBkZXNjID8gIW0uX19lc01vZHVsZSA6IGRlc2Mud3JpdGFibGUgfHwgZGVzYy5jb25maWd1cmFibGUpKSB7XG4gICAgICBkZXNjID0geyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uKCkgeyByZXR1cm4gbVtrXTsgfSB9O1xuICAgIH1cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgazIsIGRlc2MpO1xufSkgOiAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIG9bazJdID0gbVtrXTtcbn0pKTtcbnZhciBfX3NldE1vZHVsZURlZmF1bHQgPSAodGhpcyAmJiB0aGlzLl9fc2V0TW9kdWxlRGVmYXVsdCkgfHwgKE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgdikge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBcImRlZmF1bHRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdiB9KTtcbn0pIDogZnVuY3Rpb24obywgdikge1xuICAgIG9bXCJkZWZhdWx0XCJdID0gdjtcbn0pO1xudmFyIF9faW1wb3J0U3RhciA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnRTdGFyKSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgaWYgKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgcmV0dXJuIG1vZDtcbiAgICB2YXIgcmVzdWx0ID0ge307XG4gICAgaWYgKG1vZCAhPSBudWxsKSBmb3IgKHZhciBrIGluIG1vZCkgaWYgKGsgIT09IFwiZGVmYXVsdFwiICYmIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChtb2QsIGspKSBfX2NyZWF0ZUJpbmRpbmcocmVzdWx0LCBtb2QsIGspO1xuICAgIF9fc2V0TW9kdWxlRGVmYXVsdChyZXN1bHQsIG1vZCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbn07XG52YXIgX19pbXBvcnREZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydERlZmF1bHQpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICByZXR1cm4gKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgPyBtb2QgOiB7IFwiZGVmYXVsdFwiOiBtb2QgfTtcbn07XG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xudmFyIGpzeF9ydW50aW1lXzEgPSByZXF1aXJlKFwicmVhY3QvanN4LXJ1bnRpbWVcIik7XG52YXIgUHJvcFR5cGVzID0gX19pbXBvcnRTdGFyKHJlcXVpcmUoXCJwcm9wLXR5cGVzXCIpKTtcbnZhciBwb3NfMSA9IHJlcXVpcmUoXCIuLi8uLi9tb2RlbC9wb3NcIik7XG52YXIgQnV0dG9uXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIi4uL2Jhc2UvQnV0dG9uXCIpKTtcbnZhciBFZGl0UG9zaXRpb25Db21wb25lbnRfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiLi9FZGl0UG9zaXRpb25Db21wb25lbnRcIikpO1xudmFyIHNob3BfMSA9IHJlcXVpcmUoXCIuLi8uLi9tb2RlbC9zaG9wXCIpO1xudmFyIEN1cnJlbmN5XzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIi4uL2Jhc2UvQ3VycmVuY3lcIikpO1xudmFyIFBvc0NvbXBvbmVudCA9IGZ1bmN0aW9uIChfYSkge1xuICAgIHZhciBpbmRleCA9IF9hLmluZGV4LCBwb3MgPSBfYS5wb3MsIGRlbFBvcyA9IF9hLmRlbFBvcywgY2hhbmdlUG9zID0gX2EuY2hhbmdlUG9zLCBzaG9wID0gX2Euc2hvcDtcbiAgICB2YXIgZGVsZXRlUG9zID0gZnVuY3Rpb24gKHV1aWQpIHtcbiAgICAgICAgZGVsUG9zKHV1aWQpO1xuICAgIH07XG4gICAgcmV0dXJuICgoMCwganN4X3J1bnRpbWVfMS5qc3hzKShqc3hfcnVudGltZV8xLkZyYWdtZW50LCB7IGNoaWxkcmVuOiBbKDAsIGpzeF9ydW50aW1lXzEuanN4cykoXCJkaXZcIiwgX19hc3NpZ24oeyBjbGFzc05hbWU6ICdmbGV4JyB9LCB7IGNoaWxkcmVuOiBbKDAsIGpzeF9ydW50aW1lXzEuanN4KShcImRpdlwiLCBfX2Fzc2lnbih7IGNsYXNzTmFtZTogJ2ZsZXgtMScgfSwgeyBjaGlsZHJlbjogaW5kZXggKyAxIH0pKSwgKDAsIGpzeF9ydW50aW1lXzEuanN4KShcImRpdlwiLCBfX2Fzc2lnbih7IGNsYXNzTmFtZTogJ2ZsZXgtMScgfSwgeyBjaGlsZHJlbjogcG9zLnByb2R1Y3QudGl0bGUgfSkpLCAoMCwganN4X3J1bnRpbWVfMS5qc3gpKFwiZGl2XCIsIF9fYXNzaWduKHsgY2xhc3NOYW1lOiAnZmxleC0xJyB9LCB7IGNoaWxkcmVuOiBwb3MuY291bnQgfSkpLCAoMCwganN4X3J1bnRpbWVfMS5qc3gpKFwiZGl2XCIsIF9fYXNzaWduKHsgY2xhc3NOYW1lOiAnZmxleC0xIHRleHQtZW5kJyB9LCB7IGNoaWxkcmVuOiAoMCwganN4X3J1bnRpbWVfMS5qc3gpKEN1cnJlbmN5XzFbXCJkZWZhdWx0XCJdLCB7IHByaWNlOiBwb3MucHJpY2UuYWxsTmV0IH0pIH0pKSwgKDAsIGpzeF9ydW50aW1lXzEuanN4KShcImRpdlwiLCBfX2Fzc2lnbih7IGNsYXNzTmFtZTogJ2ZsZXgtMSB0ZXh0LWVuZCcgfSwgeyBjaGlsZHJlbjogKDAsIGpzeF9ydW50aW1lXzEuanN4KShDdXJyZW5jeV8xW1wiZGVmYXVsdFwiXSwgeyBwcmljZTogcG9zLnByaWNlLmFsbFZhdCB9KSB9KSksICgwLCBqc3hfcnVudGltZV8xLmpzeCkoXCJkaXZcIiwgX19hc3NpZ24oeyBjbGFzc05hbWU6ICdmbGV4LTEgdGV4dC1lbmQnIH0sIHsgY2hpbGRyZW46ICgwLCBqc3hfcnVudGltZV8xLmpzeCkoQ3VycmVuY3lfMVtcImRlZmF1bHRcIl0sIHsgcHJpY2U6IHBvcy5wcmljZS5hbGxHcm9zcyB9KSB9KSksICgwLCBqc3hfcnVudGltZV8xLmpzeCkoXCJkaXZcIiwgeyBjbGFzc05hbWU6ICdmbGV4LTEgdGV4dC1lbmQnIH0pLCAoMCwganN4X3J1bnRpbWVfMS5qc3gpKFwiZGl2XCIsIF9fYXNzaWduKHsgY2xhc3NOYW1lOiAnZmxleC0xIHRleHQtZW5kJyB9LCB7IGNoaWxkcmVuOiAoMCwganN4X3J1bnRpbWVfMS5qc3hzKShcImRpdlwiLCBfX2Fzc2lnbih7IGNsYXNzTmFtZTogXCJmbGV4IGdhcC0xXCIgfSwgeyBjaGlsZHJlbjogWygwLCBqc3hfcnVudGltZV8xLmpzeCkoRWRpdFBvc2l0aW9uQ29tcG9uZW50XzFbXCJkZWZhdWx0XCJdLCB7IHNob3A6IHNob3AsIHBvc2l0aW9uOiBwb3MsIGNoYW5nZVBvczogY2hhbmdlUG9zIH0pLCAoMCwganN4X3J1bnRpbWVfMS5qc3gpKEJ1dHRvbl8xW1wiZGVmYXVsdFwiXSwgeyB0eXBlOiA1LCB2YXJpYW50OiAnZmFpbHVyZScsIG9uQ2xpY2s6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGRlbGV0ZVBvcyhwb3MudXVpZCk7IH0gfSldIH0pKSB9KSldIH0pKSwgKDAsIGpzeF9ydW50aW1lXzEuanN4KShcImhyXCIsIHt9KV0gfSkpO1xufTtcblBvc0NvbXBvbmVudC5wcm9wVHlwZXMgPSB7XG4gICAgaW5kZXg6IFByb3BUeXBlcy5udW1iZXIsXG4gICAgcG9zOiBQcm9wVHlwZXMuaW5zdGFuY2VPZihwb3NfMS5Qb3MpLFxuICAgIHNob3A6IFByb3BUeXBlcy5pbnN0YW5jZU9mKHNob3BfMS5TaG9wKSxcbiAgICBkZWxQb3M6IFByb3BUeXBlcy5mdW5jLFxuICAgIGNoYW5nZVBvczogUHJvcFR5cGVzLmZ1bmNcbn07XG5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IFBvc0NvbXBvbmVudDtcbiIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9fYXNzaWduID0gKHRoaXMgJiYgdGhpcy5fX2Fzc2lnbikgfHwgZnVuY3Rpb24gKCkge1xuICAgIF9fYXNzaWduID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbih0KSB7XG4gICAgICAgIGZvciAodmFyIHMsIGkgPSAxLCBuID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IG47IGkrKykge1xuICAgICAgICAgICAgcyA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSlcbiAgICAgICAgICAgICAgICB0W3BdID0gc1twXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdDtcbiAgICB9O1xuICAgIHJldHVybiBfX2Fzc2lnbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xufTtcbnZhciBfX2NyZWF0ZUJpbmRpbmcgPSAodGhpcyAmJiB0aGlzLl9fY3JlYXRlQmluZGluZykgfHwgKE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihtLCBrKTtcbiAgICBpZiAoIWRlc2MgfHwgKFwiZ2V0XCIgaW4gZGVzYyA/ICFtLl9fZXNNb2R1bGUgOiBkZXNjLndyaXRhYmxlIHx8IGRlc2MuY29uZmlndXJhYmxlKSkge1xuICAgICAgZGVzYyA9IHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIG1ba107IH0gfTtcbiAgICB9XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIGsyLCBkZXNjKTtcbn0pIDogKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICBvW2syXSA9IG1ba107XG59KSk7XG52YXIgX19zZXRNb2R1bGVEZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX3NldE1vZHVsZURlZmF1bHQpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIHYpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgXCJkZWZhdWx0XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHYgfSk7XG59KSA6IGZ1bmN0aW9uKG8sIHYpIHtcbiAgICBvW1wiZGVmYXVsdFwiXSA9IHY7XG59KTtcbnZhciBfX2ltcG9ydFN0YXIgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0U3RhcikgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIGlmIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpIHJldHVybiBtb2Q7XG4gICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgIGlmIChtb2QgIT0gbnVsbCkgZm9yICh2YXIgayBpbiBtb2QpIGlmIChrICE9PSBcImRlZmF1bHRcIiAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobW9kLCBrKSkgX19jcmVhdGVCaW5kaW5nKHJlc3VsdCwgbW9kLCBrKTtcbiAgICBfX3NldE1vZHVsZURlZmF1bHQocmVzdWx0LCBtb2QpO1xuICAgIHJldHVybiByZXN1bHQ7XG59O1xudmFyIF9fc3ByZWFkQXJyYXkgPSAodGhpcyAmJiB0aGlzLl9fc3ByZWFkQXJyYXkpIHx8IGZ1bmN0aW9uICh0bywgZnJvbSwgcGFjaykge1xuICAgIGlmIChwYWNrIHx8IGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIGZvciAodmFyIGkgPSAwLCBsID0gZnJvbS5sZW5ndGgsIGFyOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgIGlmIChhciB8fCAhKGkgaW4gZnJvbSkpIHtcbiAgICAgICAgICAgIGlmICghYXIpIGFyID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZnJvbSwgMCwgaSk7XG4gICAgICAgICAgICBhcltpXSA9IGZyb21baV07XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRvLmNvbmNhdChhciB8fCBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChmcm9tKSk7XG59O1xudmFyIF9faW1wb3J0RGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnREZWZhdWx0KSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgcmV0dXJuIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpID8gbW9kIDogeyBcImRlZmF1bHRcIjogbW9kIH07XG59O1xuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbnZhciBqc3hfcnVudGltZV8xID0gcmVxdWlyZShcInJlYWN0L2pzeC1ydW50aW1lXCIpO1xudmFyIEFkZFBvc2l0aW9uQ29tcG9uZW50XzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIi4vQWRkUG9zaXRpb25Db21wb25lbnRcIikpO1xudmFyIEl0ZW1zQ29tcG9uZW50XzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIi4vSXRlbXNDb21wb25lbnRcIikpO1xudmFyIFByb3BUeXBlcyA9IF9faW1wb3J0U3RhcihyZXF1aXJlKFwicHJvcC10eXBlc1wiKSk7XG52YXIgc2hvcF8xID0gcmVxdWlyZShcIi4uLy4uL21vZGVsL3Nob3BcIik7XG52YXIgcmVhY3RfMSA9IHJlcXVpcmUoXCJyZWFjdFwiKTtcbnZhciBvcmRlcl8xID0gcmVxdWlyZShcIi4uLy4uL21vZGVsL29yZGVyXCIpO1xudmFyIHRzeXJpbmdlXzEgPSByZXF1aXJlKFwidHN5cmluZ2VcIik7XG52YXIgb3JkZXJfMiA9IHJlcXVpcmUoXCIuLi8uLi9zdGF0ZS9vcmRlclwiKTtcbnZhciBQb3NpdGlvbnNDb21wb25lbnQgPSBmdW5jdGlvbiAoX2EpIHtcbiAgICB2YXIgb3JkZXIgPSBfYS5vcmRlciwgc2hvcCA9IF9hLnNob3AsIHVwZGF0ZU9yZGVyID0gX2EudXBkYXRlT3JkZXI7XG4gICAgdmFyIG9yZGVyU3RhdGUgPSB0c3lyaW5nZV8xLmNvbnRhaW5lci5yZXNvbHZlKG9yZGVyXzIuT3JkZXJTdGF0ZSk7XG4gICAgdmFyIF9iID0gKDAsIHJlYWN0XzEudXNlU3RhdGUpKG9yZGVyLnBvc2l0aW9ucyksIHBvc2l0aW9ucyA9IF9iWzBdLCBzZXRQb3NpdGlvbnMgPSBfYlsxXTtcbiAgICB2YXIgYWRkUG9zID0gZnVuY3Rpb24gKHBvc09iaikge1xuICAgICAgICBzZXRQb3NpdGlvbnMoX19zcHJlYWRBcnJheShfX3NwcmVhZEFycmF5KFtdLCBwb3NpdGlvbnMsIHRydWUpLCBbcG9zT2JqXSwgZmFsc2UpKTtcbiAgICB9O1xuICAgIHZhciBjaGFuZ2VQb3MgPSBmdW5jdGlvbiAocG9zT2JqKSB7XG4gICAgICAgIHZhciBuZXh0Q291bnRlcnMgPSBwb3NpdGlvbnMubWFwKGZ1bmN0aW9uIChjLCBpKSB7XG4gICAgICAgICAgICBpZiAoYy51dWlkID09PSBwb3NPYmoudXVpZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBwb3NPYmo7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHNldFBvc2l0aW9ucyhuZXh0Q291bnRlcnMpO1xuICAgIH07XG4gICAgdmFyIGRlbFBvcyA9IGZ1bmN0aW9uICh1dWlkKSB7XG4gICAgICAgIHZhciBwb3MgPSBwb3NpdGlvbnMuZmlsdGVyKGZ1bmN0aW9uIChvYmopIHsgcmV0dXJuIG9iai51dWlkICE9PSB1dWlkOyB9KTtcbiAgICAgICAgc2V0UG9zaXRpb25zKHBvcyk7XG4gICAgfTtcbiAgICAoMCwgcmVhY3RfMS51c2VFZmZlY3QpKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIG9yZGVyT2JqID0gb3JkZXJTdGF0ZS5nZXRDdXJyZW50T3JkZXIoKS52YWx1ZTtcbiAgICAgICAgb3JkZXJPYmoucG9zaXRpb25zID0gcG9zaXRpb25zO1xuICAgICAgICBvcmRlclN0YXRlLnNldEN1cnJlbnRPcmRlcihvcmRlck9iaik7XG4gICAgfSwgW3Bvc2l0aW9uc10pO1xuICAgIHJldHVybiAoKDAsIGpzeF9ydW50aW1lXzEuanN4cykoXCJkaXZcIiwgX19hc3NpZ24oeyBjbGFzc05hbWU6IFwicC0yXCIgfSwgeyBjaGlsZHJlbjogWygwLCBqc3hfcnVudGltZV8xLmpzeCkoSXRlbXNDb21wb25lbnRfMVtcImRlZmF1bHRcIl0sIHsgcG9zaXRpb25zOiBwb3NpdGlvbnMsIHNob3A6IHNob3AsIGRlbFBvczogZGVsUG9zLCBjaGFuZ2VQb3M6IGNoYW5nZVBvcyB9KSwgKDAsIGpzeF9ydW50aW1lXzEuanN4KShBZGRQb3NpdGlvbkNvbXBvbmVudF8xW1wiZGVmYXVsdFwiXSwgeyBzaG9wOiBzaG9wLCBhZGRQb3M6IGFkZFBvcyB9KV0gfSkpKTtcbn07XG5Qb3NpdGlvbnNDb21wb25lbnQucHJvcFR5cGVzID0ge1xuICAgIHNob3A6IFByb3BUeXBlcy5pbnN0YW5jZU9mKHNob3BfMS5TaG9wKSxcbiAgICBvcmRlcjogUHJvcFR5cGVzLmluc3RhbmNlT2Yob3JkZXJfMS5PcmRlciksXG4gICAgdXBkYXRlT3JkZXI6IFByb3BUeXBlcy5mdW5jXG59O1xuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBQb3NpdGlvbnNDb21wb25lbnQ7XG4iLCJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2Fzc2lnbiA9ICh0aGlzICYmIHRoaXMuX19hc3NpZ24pIHx8IGZ1bmN0aW9uICgpIHtcbiAgICBfX2Fzc2lnbiA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24odCkge1xuICAgICAgICBmb3IgKHZhciBzLCBpID0gMSwgbiA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBuOyBpKyspIHtcbiAgICAgICAgICAgIHMgPSBhcmd1bWVudHNbaV07XG4gICAgICAgICAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkpXG4gICAgICAgICAgICAgICAgdFtwXSA9IHNbcF07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHQ7XG4gICAgfTtcbiAgICByZXR1cm4gX19hc3NpZ24uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbn07XG52YXIgX19jcmVhdGVCaW5kaW5nID0gKHRoaXMgJiYgdGhpcy5fX2NyZWF0ZUJpbmRpbmcpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICB2YXIgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobSwgayk7XG4gICAgaWYgKCFkZXNjIHx8IChcImdldFwiIGluIGRlc2MgPyAhbS5fX2VzTW9kdWxlIDogZGVzYy53cml0YWJsZSB8fCBkZXNjLmNvbmZpZ3VyYWJsZSkpIHtcbiAgICAgIGRlc2MgPSB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24oKSB7IHJldHVybiBtW2tdOyB9IH07XG4gICAgfVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBrMiwgZGVzYyk7XG59KSA6IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgb1trMl0gPSBtW2tdO1xufSkpO1xudmFyIF9fc2V0TW9kdWxlRGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19zZXRNb2R1bGVEZWZhdWx0KSB8fCAoT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCB2KSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIFwiZGVmYXVsdFwiLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2IH0pO1xufSkgOiBmdW5jdGlvbihvLCB2KSB7XG4gICAgb1tcImRlZmF1bHRcIl0gPSB2O1xufSk7XG52YXIgX19pbXBvcnRTdGFyID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydFN0YXIpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICBpZiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSByZXR1cm4gbW9kO1xuICAgIHZhciByZXN1bHQgPSB7fTtcbiAgICBpZiAobW9kICE9IG51bGwpIGZvciAodmFyIGsgaW4gbW9kKSBpZiAoayAhPT0gXCJkZWZhdWx0XCIgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1vZCwgaykpIF9fY3JlYXRlQmluZGluZyhyZXN1bHQsIG1vZCwgayk7XG4gICAgX19zZXRNb2R1bGVEZWZhdWx0KHJlc3VsdCwgbW9kKTtcbiAgICByZXR1cm4gcmVzdWx0O1xufTtcbnZhciBfX2ltcG9ydERlZmF1bHQgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0RGVmYXVsdCkgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIHJldHVybiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSA/IG1vZCA6IHsgXCJkZWZhdWx0XCI6IG1vZCB9O1xufTtcbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG52YXIganN4X3J1bnRpbWVfMSA9IHJlcXVpcmUoXCJyZWFjdC9qc3gtcnVudGltZVwiKTtcbnZhciBQcm9wVHlwZXMgPSBfX2ltcG9ydFN0YXIocmVxdWlyZShcInByb3AtdHlwZXNcIikpO1xudmFyIHNob3BfMSA9IHJlcXVpcmUoXCIuLi8uLi9tb2RlbC9zaG9wXCIpO1xudmFyIHZhbGlkYXRvcl9hanY2XzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIkByanNmL3ZhbGlkYXRvci1hanY2XCIpKTtcbnZhciBjb3JlXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIkByanNmL2NvcmVcIikpO1xudmFyIHByb2R1Y3RfMSA9IHJlcXVpcmUoXCIuLi8uLi9zZXJ2aWNlcy9wcm9kdWN0XCIpO1xudmFyIHJlYWN0XzEgPSByZXF1aXJlKFwicmVhY3RcIik7XG52YXIgcHJpY2VfMSA9IHJlcXVpcmUoXCIuLi8uLi9tb2RlbC9wcmljZVwiKTtcbnZhciBwb3NfMSA9IHJlcXVpcmUoXCIuLi8uLi9tb2RlbC9wb3NcIik7XG52YXIgdXNlX2RlYm91bmNlXzEgPSByZXF1aXJlKFwidXNlLWRlYm91bmNlXCIpO1xudmFyIEJ1dHRvbl8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCIuLi9iYXNlL0J1dHRvblwiKSk7XG52YXIgQ3VycmVuY3lfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiLi4vYmFzZS9DdXJyZW5jeVwiKSk7XG52YXIgUHJvZHVjdEZvcm0gPSBmdW5jdGlvbiAoX2EpIHtcbiAgICB2YXIgc2hvcCA9IF9hLnNob3AsIHBvcyA9IF9hLnBvcywgaGFuZGxlQ2xvc2UgPSBfYS5oYW5kbGVDbG9zZSwgaGFuZGxlQ2hhbmdlID0gX2EuaGFuZGxlQ2hhbmdlO1xuICAgIHZhciBwcm9kdWN0X2FwaSA9IG5ldyBwcm9kdWN0XzEuUHJvZHVjdFNlcnZpY2UoKTtcbiAgICB2YXIgX2IgPSAoMCwgcmVhY3RfMS51c2VTdGF0ZSkoe30pLCBzY2hlbWEgPSBfYlswXSwgc2V0U2NoZW1hID0gX2JbMV07XG4gICAgdmFyIF9jID0gKDAsIHJlYWN0XzEudXNlU3RhdGUpKHt9KSwgdWlTY2hlbWEgPSBfY1swXSwgc2V0VWlTY2hlbWEgPSBfY1sxXTtcbiAgICB2YXIgX2QgPSAoMCwgcmVhY3RfMS51c2VTdGF0ZSkoe30pLCBmb3JtRGF0YSA9IF9kWzBdLCBzZXRGb3JtRGF0YSA9IF9kWzFdO1xuICAgIHZhciBfZSA9ICgwLCByZWFjdF8xLnVzZVN0YXRlKSgwKSwgdHlwZSA9IF9lWzBdLCBzZXRUeXBlID0gX2VbMV07XG4gICAgdmFyIF9mID0gKDAsIHJlYWN0XzEudXNlU3RhdGUpKG5ldyBwcmljZV8xLlByaWNlKCkpLCBwcmljZSA9IF9mWzBdLCBzZXRQcmljZSA9IF9mWzFdO1xuICAgIHZhciBsb2FkU2NoZW1hID0gZnVuY3Rpb24gKGxvYWREYXRhKSB7XG4gICAgICAgIGlmIChwb3MucHJvZHVjdC51dWlkID09IFwiXCIpIHtcbiAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgZGF0YSA9IHt9O1xuICAgICAgICBwcm9kdWN0X2FwaS5nZXRBZGRQcm9kdWN0U2NoZW1hKHBvcy5wcm9kdWN0LCBsb2FkRGF0YSkudGhlbihmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgIGZvciAodmFyIG9iaiBpbiB2YWx1ZVsnanNvbkZvcm0nXVsncHJvcGVydGllcyddKSB7XG4gICAgICAgICAgICAgICAgZGF0YVtvYmpdID0gdmFsdWVbJ2pzb25Gb3JtJ11bJ3Byb3BlcnRpZXMnXVtvYmpdWydkZWZhdWx0J107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzZXRGb3JtRGF0YShkYXRhKTtcbiAgICAgICAgICAgIHNldFNjaGVtYSh2YWx1ZVsnanNvbkZvcm0nXSk7XG4gICAgICAgICAgICBzZXRVaVNjaGVtYSh2YWx1ZVsndWlKc29uRm9ybSddKTtcbiAgICAgICAgICAgIHNldFByaWNlKHZhbHVlWydwcmljZSddKTtcbiAgICAgICAgICAgIHNldFR5cGUodmFsdWVbJ3R5cCddKTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICB2YXIgY2hhbmdlQ2FsYyA9IGZ1bmN0aW9uIChmb3JtRGF0YSkge1xuICAgICAgICBzZXRGb3JtRGF0YShmb3JtRGF0YSk7XG4gICAgICAgIGRlYm91bmNlUmVDYWxjKCk7XG4gICAgfTtcbiAgICB2YXIgZGVib3VuY2VSZUNhbGMgPSAoMCwgdXNlX2RlYm91bmNlXzEudXNlRGVib3VuY2VkQ2FsbGJhY2spKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGRhdGEgPSB7fTtcbiAgICAgICAgcHJvZHVjdF9hcGkuY2FsY1Byb2R1Y3QocG9zLnByb2R1Y3QsIGZvcm1EYXRhKS50aGVuKGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgZm9yICh2YXIgb2JqIGluIHZhbHVlWydqc29uRm9ybSddWydwcm9wZXJ0aWVzJ10pIHtcbiAgICAgICAgICAgICAgICBkYXRhW29ial0gPSB2YWx1ZVsnanNvbkZvcm0nXVsncHJvcGVydGllcyddW29ial1bJ2RlZmF1bHQnXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNldEZvcm1EYXRhKGRhdGEpO1xuICAgICAgICAgICAgc2V0U2NoZW1hKHZhbHVlWydqc29uRm9ybSddKTtcbiAgICAgICAgICAgIHNldFVpU2NoZW1hKHZhbHVlWyd1aUpzb25Gb3JtJ10pO1xuICAgICAgICAgICAgc2V0UHJpY2UodmFsdWVbJ3ByaWNlJ10pO1xuICAgICAgICAgICAgc2V0VHlwZSh2YWx1ZVsndHlwJ10pO1xuICAgICAgICB9KTtcbiAgICB9LCA2MDApO1xuICAgIHZhciBhZGRQcm9kdWN0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBwb3MucHJvZHVjdC5zcGVjaWFsUHJvZHVjdFR5cGVPYmplY3QucGFyYW1zID0gZm9ybURhdGE7XG4gICAgICAgIHBvcy5wcm9kdWN0LnNwZWNpYWxQcm9kdWN0VHlwZU9iamVjdC50eXAgPSB0eXBlO1xuICAgICAgICBpZiAoZm9ybURhdGFbJ2NvdW50J10pIHtcbiAgICAgICAgICAgIHBvcy5jb3VudCA9IGZvcm1EYXRhWydjb3VudCddO1xuICAgICAgICB9XG4gICAgICAgIHBvcy5wcmljZSA9IHByaWNlO1xuICAgICAgICBoYW5kbGVDaGFuZ2UocG9zKTtcbiAgICAgICAgaGFuZGxlQ2xvc2UoKTtcbiAgICB9O1xuICAgICgwLCByZWFjdF8xLnVzZUVmZmVjdCkoZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAocG9zLnByb2R1Y3Quc3BlY2lhbFByb2R1Y3RUeXBlT2JqZWN0LnBhcmFtcykge1xuICAgICAgICAgICAgc2V0Rm9ybURhdGEocG9zLnByb2R1Y3Quc3BlY2lhbFByb2R1Y3RUeXBlT2JqZWN0LnBhcmFtcyk7XG4gICAgICAgICAgICBsb2FkU2NoZW1hKHBvcy5wcm9kdWN0LnNwZWNpYWxQcm9kdWN0VHlwZU9iamVjdC5wYXJhbXMpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgc2V0Rm9ybURhdGEoe30pO1xuICAgICAgICAgICAgbG9hZFNjaGVtYSh7fSk7XG4gICAgICAgIH1cbiAgICB9LCBbcG9zLnByb2R1Y3RdKTtcbiAgICByZXR1cm4gKCgwLCBqc3hfcnVudGltZV8xLmpzeCkoanN4X3J1bnRpbWVfMS5GcmFnbWVudCwgeyBjaGlsZHJlbjogKDAsIGpzeF9ydW50aW1lXzEuanN4cykoXCJkaXZcIiwgX19hc3NpZ24oeyBjbGFzc05hbWU6ICdmbGV4JyB9LCB7IGNoaWxkcmVuOiBbKDAsIGpzeF9ydW50aW1lXzEuanN4KShcImRpdlwiLCBfX2Fzc2lnbih7IGNsYXNzTmFtZTogJ2ZsZXgtMScgfSwgeyBjaGlsZHJlbjogKDAsIGpzeF9ydW50aW1lXzEuanN4KShjb3JlXzFbXCJkZWZhdWx0XCJdLCB7IHNjaGVtYTogc2NoZW1hLCB1aVNjaGVtYTogdWlTY2hlbWEsIGZvcm1EYXRhOiBmb3JtRGF0YSwgb25DaGFuZ2U6IGZ1bmN0aW9uIChlKSB7IHJldHVybiBjaGFuZ2VDYWxjKGUuZm9ybURhdGEpOyB9LCB2YWxpZGF0b3I6IHZhbGlkYXRvcl9hanY2XzFbXCJkZWZhdWx0XCJdIH0pIH0pKSwgKDAsIGpzeF9ydW50aW1lXzEuanN4KShcImRpdlwiLCBfX2Fzc2lnbih7IGNsYXNzTmFtZTogJycgfSwgeyBjaGlsZHJlbjogKDAsIGpzeF9ydW50aW1lXzEuanN4cykoanN4X3J1bnRpbWVfMS5GcmFnbWVudCwgeyBjaGlsZHJlbjogWygwLCBqc3hfcnVudGltZV8xLmpzeHMpKFwiaDVcIiwgeyBjaGlsZHJlbjogW1wiTmV0dG86IFwiLCAoMCwganN4X3J1bnRpbWVfMS5qc3gpKEN1cnJlbmN5XzFbXCJkZWZhdWx0XCJdLCB7IHByaWNlOiBwcmljZS5hbGxOZXQgfSldIH0pLCAoMCwganN4X3J1bnRpbWVfMS5qc3hzKShcImg1XCIsIHsgY2hpbGRyZW46IFtcIk13ZXJ0OiBcIiwgKDAsIGpzeF9ydW50aW1lXzEuanN4KShDdXJyZW5jeV8xW1wiZGVmYXVsdFwiXSwgeyBwcmljZTogcHJpY2UuYWxsVmF0IH0pXSB9KSwgKDAsIGpzeF9ydW50aW1lXzEuanN4cykoXCJoNFwiLCB7IGNoaWxkcmVuOiBbXCJCcnV0dG86IFwiLCAoMCwganN4X3J1bnRpbWVfMS5qc3gpKEN1cnJlbmN5XzFbXCJkZWZhdWx0XCJdLCB7IHByaWNlOiBwcmljZS5hbGxHcm9zcyB9KV0gfSksICgwLCBqc3hfcnVudGltZV8xLmpzeCkoQnV0dG9uXzFbXCJkZWZhdWx0XCJdLCB7IG9uQ2xpY2s6IGFkZFByb2R1Y3QsIHR5cGU6IDMsIHZhcmlhbnQ6IFwic3VjY2Vzc1wiIH0pXSB9KSB9KSldIH0pKSB9KSk7XG59O1xuUHJvZHVjdEZvcm0ucHJvcFR5cGVzID0ge1xuICAgIHNob3A6IFByb3BUeXBlcy5pbnN0YW5jZU9mKHNob3BfMS5TaG9wKSxcbiAgICBwb3M6IFByb3BUeXBlcy5pbnN0YW5jZU9mKHBvc18xLlBvcyksXG4gICAgaGFuZGxlQ2xvc2U6IFByb3BUeXBlcy5mdW5jLFxuICAgIGhhbmRsZUNoYW5nZTogUHJvcFR5cGVzLmZ1bmNcbn07XG5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IFByb2R1Y3RGb3JtO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19jcmVhdGVCaW5kaW5nID0gKHRoaXMgJiYgdGhpcy5fX2NyZWF0ZUJpbmRpbmcpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICB2YXIgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobSwgayk7XG4gICAgaWYgKCFkZXNjIHx8IChcImdldFwiIGluIGRlc2MgPyAhbS5fX2VzTW9kdWxlIDogZGVzYy53cml0YWJsZSB8fCBkZXNjLmNvbmZpZ3VyYWJsZSkpIHtcbiAgICAgIGRlc2MgPSB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24oKSB7IHJldHVybiBtW2tdOyB9IH07XG4gICAgfVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBrMiwgZGVzYyk7XG59KSA6IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgb1trMl0gPSBtW2tdO1xufSkpO1xudmFyIF9fc2V0TW9kdWxlRGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19zZXRNb2R1bGVEZWZhdWx0KSB8fCAoT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCB2KSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIFwiZGVmYXVsdFwiLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2IH0pO1xufSkgOiBmdW5jdGlvbihvLCB2KSB7XG4gICAgb1tcImRlZmF1bHRcIl0gPSB2O1xufSk7XG52YXIgX19pbXBvcnRTdGFyID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydFN0YXIpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICBpZiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSByZXR1cm4gbW9kO1xuICAgIHZhciByZXN1bHQgPSB7fTtcbiAgICBpZiAobW9kICE9IG51bGwpIGZvciAodmFyIGsgaW4gbW9kKSBpZiAoayAhPT0gXCJkZWZhdWx0XCIgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1vZCwgaykpIF9fY3JlYXRlQmluZGluZyhyZXN1bHQsIG1vZCwgayk7XG4gICAgX19zZXRNb2R1bGVEZWZhdWx0KHJlc3VsdCwgbW9kKTtcbiAgICByZXR1cm4gcmVzdWx0O1xufTtcbnZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gICAgfSk7XG59O1xudmFyIF9fZ2VuZXJhdG9yID0gKHRoaXMgJiYgdGhpcy5fX2dlbmVyYXRvcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIGJvZHkpIHtcbiAgICB2YXIgXyA9IHsgbGFiZWw6IDAsIHNlbnQ6IGZ1bmN0aW9uKCkgeyBpZiAodFswXSAmIDEpIHRocm93IHRbMV07IHJldHVybiB0WzFdOyB9LCB0cnlzOiBbXSwgb3BzOiBbXSB9LCBmLCB5LCB0LCBnO1xuICAgIHJldHVybiBnID0geyBuZXh0OiB2ZXJiKDApLCBcInRocm93XCI6IHZlcmIoMSksIFwicmV0dXJuXCI6IHZlcmIoMikgfSwgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIChnW1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbigpIHsgcmV0dXJuIHRoaXM7IH0pLCBnO1xuICAgIGZ1bmN0aW9uIHZlcmIobikgeyByZXR1cm4gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIHN0ZXAoW24sIHZdKTsgfTsgfVxuICAgIGZ1bmN0aW9uIHN0ZXAob3ApIHtcbiAgICAgICAgaWYgKGYpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuXCIpO1xuICAgICAgICB3aGlsZSAoXykgdHJ5IHtcbiAgICAgICAgICAgIGlmIChmID0gMSwgeSAmJiAodCA9IG9wWzBdICYgMiA/IHlbXCJyZXR1cm5cIl0gOiBvcFswXSA/IHlbXCJ0aHJvd1wiXSB8fCAoKHQgPSB5W1wicmV0dXJuXCJdKSAmJiB0LmNhbGwoeSksIDApIDogeS5uZXh0KSAmJiAhKHQgPSB0LmNhbGwoeSwgb3BbMV0pKS5kb25lKSByZXR1cm4gdDtcbiAgICAgICAgICAgIGlmICh5ID0gMCwgdCkgb3AgPSBbb3BbMF0gJiAyLCB0LnZhbHVlXTtcbiAgICAgICAgICAgIHN3aXRjaCAob3BbMF0pIHtcbiAgICAgICAgICAgICAgICBjYXNlIDA6IGNhc2UgMTogdCA9IG9wOyBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIDQ6IF8ubGFiZWwrKzsgcmV0dXJuIHsgdmFsdWU6IG9wWzFdLCBkb25lOiBmYWxzZSB9O1xuICAgICAgICAgICAgICAgIGNhc2UgNTogXy5sYWJlbCsrOyB5ID0gb3BbMV07IG9wID0gWzBdOyBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBjYXNlIDc6IG9wID0gXy5vcHMucG9wKCk7IF8udHJ5cy5wb3AoKTsgY29udGludWU7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEodCA9IF8udHJ5cywgdCA9IHQubGVuZ3RoID4gMCAmJiB0W3QubGVuZ3RoIC0gMV0pICYmIChvcFswXSA9PT0gNiB8fCBvcFswXSA9PT0gMikpIHsgXyA9IDA7IGNvbnRpbnVlOyB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gMyAmJiAoIXQgfHwgKG9wWzFdID4gdFswXSAmJiBvcFsxXSA8IHRbM10pKSkgeyBfLmxhYmVsID0gb3BbMV07IGJyZWFrOyB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gNiAmJiBfLmxhYmVsIDwgdFsxXSkgeyBfLmxhYmVsID0gdFsxXTsgdCA9IG9wOyBicmVhazsgfVxuICAgICAgICAgICAgICAgICAgICBpZiAodCAmJiBfLmxhYmVsIDwgdFsyXSkgeyBfLmxhYmVsID0gdFsyXTsgXy5vcHMucHVzaChvcCk7IGJyZWFrOyB9XG4gICAgICAgICAgICAgICAgICAgIGlmICh0WzJdKSBfLm9wcy5wb3AoKTtcbiAgICAgICAgICAgICAgICAgICAgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG9wID0gYm9keS5jYWxsKHRoaXNBcmcsIF8pO1xuICAgICAgICB9IGNhdGNoIChlKSB7IG9wID0gWzYsIGVdOyB5ID0gMDsgfSBmaW5hbGx5IHsgZiA9IHQgPSAwOyB9XG4gICAgICAgIGlmIChvcFswXSAmIDUpIHRocm93IG9wWzFdOyByZXR1cm4geyB2YWx1ZTogb3BbMF0gPyBvcFsxXSA6IHZvaWQgMCwgZG9uZTogdHJ1ZSB9O1xuICAgIH1cbn07XG52YXIgX19pbXBvcnREZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydERlZmF1bHQpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICByZXR1cm4gKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgPyBtb2QgOiB7IFwiZGVmYXVsdFwiOiBtb2QgfTtcbn07XG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xudmFyIGpzeF9ydW50aW1lXzEgPSByZXF1aXJlKFwicmVhY3QvanN4LXJ1bnRpbWVcIik7XG52YXIgUHJvcFR5cGVzID0gX19pbXBvcnRTdGFyKHJlcXVpcmUoXCJwcm9wLXR5cGVzXCIpKTtcbnZhciBzaG9wXzEgPSByZXF1aXJlKFwiLi4vLi4vbW9kZWwvc2hvcFwiKTtcbnZhciB0c3lyaW5nZV8xID0gcmVxdWlyZShcInRzeXJpbmdlXCIpO1xudmFyIG9yZGVyXzEgPSByZXF1aXJlKFwiLi4vLi4vc3RhdGUvb3JkZXJcIik7XG52YXIgcHJvZHVjdEdyb3VwXzEgPSByZXF1aXJlKFwiLi4vLi4vbW9kZWwvcHJvZHVjdEdyb3VwXCIpO1xudmFyIHByb2R1Y3Rncm91cF8xID0gcmVxdWlyZShcIi4uLy4uL3NlcnZpY2VzL3Byb2R1Y3Rncm91cFwiKTtcbnZhciBhc3luY18xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJyZWFjdC1zZWxlY3QvYXN5bmNcIikpO1xudmFyIFByb2R1Y3RHcm91cFNlbGVjdCA9IGZ1bmN0aW9uIChwcm9wcykge1xuICAgIHZhciBvcmRlclN0YXRlID0gdHN5cmluZ2VfMS5jb250YWluZXIucmVzb2x2ZShvcmRlcl8xLk9yZGVyU3RhdGUpO1xuICAgIHZhciBsb2FkT3B0aW9ucyA9IGZ1bmN0aW9uIChzZWFyY2hRdWVyeSkgeyByZXR1cm4gX19hd2FpdGVyKHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHByb2R1Y3Rncm91cF9hcGk7XG4gICAgICAgIHJldHVybiBfX2dlbmVyYXRvcih0aGlzLCBmdW5jdGlvbiAoX2EpIHtcbiAgICAgICAgICAgIHN3aXRjaCAoX2EubGFiZWwpIHtcbiAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgICAgIHByb2R1Y3Rncm91cF9hcGkgPSBuZXcgcHJvZHVjdGdyb3VwXzEuUHJvZHVjdEdyb3VwU2VydmljZSgpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzQgLyp5aWVsZCovLCBwcm9kdWN0Z3JvdXBfYXBpLmdldFByb2R1Y3RHcm91cHMoc2VhcmNoUXVlcnksIHByb3BzLnNob3ApXTtcbiAgICAgICAgICAgICAgICBjYXNlIDE6IHJldHVybiBbMiAvKnJldHVybiovLCBfYS5zZW50KCldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9KTsgfTtcbiAgICB2YXIgb25DaGFuZ2UgPSBmdW5jdGlvbiAob3B0aW9uKSB7XG4gICAgICAgIGlmICh0eXBlb2YgcHJvcHMub25DaGFuZ2UgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgcHJvcHMub25DaGFuZ2Uob3B0aW9uKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuICgoMCwganN4X3J1bnRpbWVfMS5qc3gpKGFzeW5jXzFbXCJkZWZhdWx0XCJdLCB7IGRlZmF1bHRPcHRpb25zOiB0cnVlLCB2YWx1ZTogcHJvcHMudmFsdWUsIGxvYWRPcHRpb25zOiBsb2FkT3B0aW9ucywgZ2V0T3B0aW9uVmFsdWU6IGZ1bmN0aW9uIChvcHRpb24pIHsgcmV0dXJuIG9wdGlvbi51dWlkOyB9LCBvbkNoYW5nZTogb25DaGFuZ2UsIGlzU2VhcmNoYWJsZTogdHJ1ZSB9LCBKU09OLnN0cmluZ2lmeShwcm9wcy5zaG9wLnV1aWQpKSk7XG59O1xuUHJvZHVjdEdyb3VwU2VsZWN0LnByb3BUeXBlcyA9IHtcbiAgICBzaG9wOiBQcm9wVHlwZXMuaW5zdGFuY2VPZihzaG9wXzEuU2hvcCksXG4gICAgdmFsdWU6IFByb3BUeXBlcy5pbnN0YW5jZU9mKHByb2R1Y3RHcm91cF8xLlByb2R1Y3RHcm91cCksXG4gICAgb25DaGFuZ2U6IFByb3BUeXBlcy5mdW5jXG59O1xuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBQcm9kdWN0R3JvdXBTZWxlY3Q7XG4iLCJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2NyZWF0ZUJpbmRpbmcgPSAodGhpcyAmJiB0aGlzLl9fY3JlYXRlQmluZGluZykgfHwgKE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihtLCBrKTtcbiAgICBpZiAoIWRlc2MgfHwgKFwiZ2V0XCIgaW4gZGVzYyA/ICFtLl9fZXNNb2R1bGUgOiBkZXNjLndyaXRhYmxlIHx8IGRlc2MuY29uZmlndXJhYmxlKSkge1xuICAgICAgZGVzYyA9IHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIG1ba107IH0gfTtcbiAgICB9XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIGsyLCBkZXNjKTtcbn0pIDogKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICBvW2syXSA9IG1ba107XG59KSk7XG52YXIgX19zZXRNb2R1bGVEZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX3NldE1vZHVsZURlZmF1bHQpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIHYpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgXCJkZWZhdWx0XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHYgfSk7XG59KSA6IGZ1bmN0aW9uKG8sIHYpIHtcbiAgICBvW1wiZGVmYXVsdFwiXSA9IHY7XG59KTtcbnZhciBfX2ltcG9ydFN0YXIgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0U3RhcikgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIGlmIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpIHJldHVybiBtb2Q7XG4gICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgIGlmIChtb2QgIT0gbnVsbCkgZm9yICh2YXIgayBpbiBtb2QpIGlmIChrICE9PSBcImRlZmF1bHRcIiAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobW9kLCBrKSkgX19jcmVhdGVCaW5kaW5nKHJlc3VsdCwgbW9kLCBrKTtcbiAgICBfX3NldE1vZHVsZURlZmF1bHQocmVzdWx0LCBtb2QpO1xuICAgIHJldHVybiByZXN1bHQ7XG59O1xudmFyIF9fYXdhaXRlciA9ICh0aGlzICYmIHRoaXMuX19hd2FpdGVyKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgICB9KTtcbn07XG52YXIgX19nZW5lcmF0b3IgPSAodGhpcyAmJiB0aGlzLl9fZ2VuZXJhdG9yKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgYm9keSkge1xuICAgIHZhciBfID0geyBsYWJlbDogMCwgc2VudDogZnVuY3Rpb24oKSB7IGlmICh0WzBdICYgMSkgdGhyb3cgdFsxXTsgcmV0dXJuIHRbMV07IH0sIHRyeXM6IFtdLCBvcHM6IFtdIH0sIGYsIHksIHQsIGc7XG4gICAgcmV0dXJuIGcgPSB7IG5leHQ6IHZlcmIoMCksIFwidGhyb3dcIjogdmVyYigxKSwgXCJyZXR1cm5cIjogdmVyYigyKSB9LCB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgKGdbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhpczsgfSksIGc7XG4gICAgZnVuY3Rpb24gdmVyYihuKSB7IHJldHVybiBmdW5jdGlvbiAodikgeyByZXR1cm4gc3RlcChbbiwgdl0pOyB9OyB9XG4gICAgZnVuY3Rpb24gc3RlcChvcCkge1xuICAgICAgICBpZiAoZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy5cIik7XG4gICAgICAgIHdoaWxlIChfKSB0cnkge1xuICAgICAgICAgICAgaWYgKGYgPSAxLCB5ICYmICh0ID0gb3BbMF0gJiAyID8geVtcInJldHVyblwiXSA6IG9wWzBdID8geVtcInRocm93XCJdIHx8ICgodCA9IHlbXCJyZXR1cm5cIl0pICYmIHQuY2FsbCh5KSwgMCkgOiB5Lm5leHQpICYmICEodCA9IHQuY2FsbCh5LCBvcFsxXSkpLmRvbmUpIHJldHVybiB0O1xuICAgICAgICAgICAgaWYgKHkgPSAwLCB0KSBvcCA9IFtvcFswXSAmIDIsIHQudmFsdWVdO1xuICAgICAgICAgICAgc3dpdGNoIChvcFswXSkge1xuICAgICAgICAgICAgICAgIGNhc2UgMDogY2FzZSAxOiB0ID0gb3A7IGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgNDogXy5sYWJlbCsrOyByZXR1cm4geyB2YWx1ZTogb3BbMV0sIGRvbmU6IGZhbHNlIH07XG4gICAgICAgICAgICAgICAgY2FzZSA1OiBfLmxhYmVsKys7IHkgPSBvcFsxXTsgb3AgPSBbMF07IGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGNhc2UgNzogb3AgPSBfLm9wcy5wb3AoKTsgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICBpZiAoISh0ID0gXy50cnlzLCB0ID0gdC5sZW5ndGggPiAwICYmIHRbdC5sZW5ndGggLSAxXSkgJiYgKG9wWzBdID09PSA2IHx8IG9wWzBdID09PSAyKSkgeyBfID0gMDsgY29udGludWU7IH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSAzICYmICghdCB8fCAob3BbMV0gPiB0WzBdICYmIG9wWzFdIDwgdFszXSkpKSB7IF8ubGFiZWwgPSBvcFsxXTsgYnJlYWs7IH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSA2ICYmIF8ubGFiZWwgPCB0WzFdKSB7IF8ubGFiZWwgPSB0WzFdOyB0ID0gb3A7IGJyZWFrOyB9XG4gICAgICAgICAgICAgICAgICAgIGlmICh0ICYmIF8ubGFiZWwgPCB0WzJdKSB7IF8ubGFiZWwgPSB0WzJdOyBfLm9wcy5wdXNoKG9wKTsgYnJlYWs7IH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHRbMl0pIF8ub3BzLnBvcCgpO1xuICAgICAgICAgICAgICAgICAgICBfLnRyeXMucG9wKCk7IGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgb3AgPSBib2R5LmNhbGwodGhpc0FyZywgXyk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHsgb3AgPSBbNiwgZV07IHkgPSAwOyB9IGZpbmFsbHkgeyBmID0gdCA9IDA7IH1cbiAgICAgICAgaWYgKG9wWzBdICYgNSkgdGhyb3cgb3BbMV07IHJldHVybiB7IHZhbHVlOiBvcFswXSA/IG9wWzFdIDogdm9pZCAwLCBkb25lOiB0cnVlIH07XG4gICAgfVxufTtcbnZhciBfX2ltcG9ydERlZmF1bHQgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0RGVmYXVsdCkgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIHJldHVybiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSA/IG1vZCA6IHsgXCJkZWZhdWx0XCI6IG1vZCB9O1xufTtcbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG52YXIganN4X3J1bnRpbWVfMSA9IHJlcXVpcmUoXCJyZWFjdC9qc3gtcnVudGltZVwiKTtcbnZhciBQcm9wVHlwZXMgPSBfX2ltcG9ydFN0YXIocmVxdWlyZShcInByb3AtdHlwZXNcIikpO1xudmFyIHNob3BfMSA9IHJlcXVpcmUoXCIuLi8uLi9tb2RlbC9zaG9wXCIpO1xudmFyIHRzeXJpbmdlXzEgPSByZXF1aXJlKFwidHN5cmluZ2VcIik7XG52YXIgb3JkZXJfMSA9IHJlcXVpcmUoXCIuLi8uLi9zdGF0ZS9vcmRlclwiKTtcbnZhciBwcm9kdWN0XzEgPSByZXF1aXJlKFwiLi4vLi4vbW9kZWwvcHJvZHVjdFwiKTtcbnZhciBwcm9kdWN0R3JvdXBfMSA9IHJlcXVpcmUoXCIuLi8uLi9tb2RlbC9wcm9kdWN0R3JvdXBcIik7XG52YXIgYXN5bmNfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwicmVhY3Qtc2VsZWN0L2FzeW5jXCIpKTtcbnZhciBwcm9kdWN0XzIgPSByZXF1aXJlKFwiLi4vLi4vc2VydmljZXMvcHJvZHVjdFwiKTtcbnZhciB1c2VfZGVib3VuY2VfMSA9IHJlcXVpcmUoXCJ1c2UtZGVib3VuY2VcIik7XG52YXIgUHJvZHVjdFNlbGVjdCA9IGZ1bmN0aW9uIChwcm9wcykge1xuICAgIHZhciBvcmRlclN0YXRlID0gdHN5cmluZ2VfMS5jb250YWluZXIucmVzb2x2ZShvcmRlcl8xLk9yZGVyU3RhdGUpO1xuICAgIHZhciBsb2FkT3B0aW9ucyA9IGZ1bmN0aW9uIChzZWFyY2hRdWVyeSkgeyByZXR1cm4gX19hd2FpdGVyKHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHByb2R1Y3RfYXBpO1xuICAgICAgICByZXR1cm4gX19nZW5lcmF0b3IodGhpcywgZnVuY3Rpb24gKF9hKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKF9hLmxhYmVsKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICBpZiAoc2VhcmNoUXVlcnkgPT0gXCJcIiAmJiBwcm9wcy5wcm9kdWN0R3JvdXAudXVpZCA9PSBcIlwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzIgLypyZXR1cm4qLywgW11dO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHByb2R1Y3RfYXBpID0gbmV3IHByb2R1Y3RfMi5Qcm9kdWN0U2VydmljZSgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIShzZWFyY2hRdWVyeSAhPSBcIlwiKSkgcmV0dXJuIFszIC8qYnJlYWsqLywgMl07XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbNCAvKnlpZWxkKi8sIHByb2R1Y3RfYXBpLmdldFByb2R1Y3RzQnlUZXJtKHNlYXJjaFF1ZXJ5LCBwcm9wcy5zaG9wKV07XG4gICAgICAgICAgICAgICAgY2FzZSAxOiByZXR1cm4gWzIgLypyZXR1cm4qLywgX2Euc2VudCgpXTtcbiAgICAgICAgICAgICAgICBjYXNlIDI6IHJldHVybiBbNCAvKnlpZWxkKi8sIHByb2R1Y3RfYXBpLmdldFByb2R1Y3RzKHByb3BzLnByb2R1Y3RHcm91cCldO1xuICAgICAgICAgICAgICAgIGNhc2UgMzogcmV0dXJuIFsyIC8qcmV0dXJuKi8sIF9hLnNlbnQoKV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0pOyB9O1xuICAgIHZhciBkZWJvdW5jZWRTZWFyY2hUZXJtID0gKDAsIHVzZV9kZWJvdW5jZV8xLnVzZURlYm91bmNlKShsb2FkT3B0aW9ucywgNTAwKTtcbiAgICB2YXIgb25DaGFuZ2UgPSBmdW5jdGlvbiAob3B0aW9uKSB7XG4gICAgICAgIGlmICh0eXBlb2YgcHJvcHMub25DaGFuZ2UgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgcHJvcHMub25DaGFuZ2Uob3B0aW9uKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuICgoMCwganN4X3J1bnRpbWVfMS5qc3gpKGFzeW5jXzFbXCJkZWZhdWx0XCJdLCB7IGRlZmF1bHRPcHRpb25zOiB0cnVlLCB2YWx1ZTogcHJvcHMudmFsdWUsIGxvYWRPcHRpb25zOiBsb2FkT3B0aW9ucywgZ2V0T3B0aW9uVmFsdWU6IGZ1bmN0aW9uIChvcHRpb24pIHsgcmV0dXJuIG9wdGlvbi51dWlkOyB9LCBnZXRPcHRpb25MYWJlbDogZnVuY3Rpb24gKG9wdGlvbikgeyByZXR1cm4gb3B0aW9uLnRpdGxlOyB9LCBvbkNoYW5nZTogb25DaGFuZ2UsIGlzU2VhcmNoYWJsZTogdHJ1ZSB9LCBKU09OLnN0cmluZ2lmeShwcm9wcy5wcm9kdWN0R3JvdXAudXVpZCkpKTtcbn07XG5Qcm9kdWN0U2VsZWN0LnByb3BUeXBlcyA9IHtcbiAgICBzaG9wOiBQcm9wVHlwZXMuaW5zdGFuY2VPZihzaG9wXzEuU2hvcCksXG4gICAgdmFsdWU6IFByb3BUeXBlcy5pbnN0YW5jZU9mKHByb2R1Y3RfMS5Qcm9kdWN0KSxcbiAgICBwcm9kdWN0R3JvdXA6IFByb3BUeXBlcy5pbnN0YW5jZU9mKHByb2R1Y3RHcm91cF8xLlByb2R1Y3RHcm91cCksXG4gICAgb25DaGFuZ2U6IFByb3BUeXBlcy5mdW5jXG59O1xuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBQcm9kdWN0U2VsZWN0O1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19hc3NpZ24gPSAodGhpcyAmJiB0aGlzLl9fYXNzaWduKSB8fCBmdW5jdGlvbiAoKSB7XG4gICAgX19hc3NpZ24gPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uKHQpIHtcbiAgICAgICAgZm9yICh2YXIgcywgaSA9IDEsIG4gPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbjsgaSsrKSB7XG4gICAgICAgICAgICBzID0gYXJndW1lbnRzW2ldO1xuICAgICAgICAgICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApKVxuICAgICAgICAgICAgICAgIHRbcF0gPSBzW3BdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0O1xuICAgIH07XG4gICAgcmV0dXJuIF9fYXNzaWduLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG59O1xudmFyIF9fY3JlYXRlQmluZGluZyA9ICh0aGlzICYmIHRoaXMuX19jcmVhdGVCaW5kaW5nKSB8fCAoT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgdmFyIGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG0sIGspO1xuICAgIGlmICghZGVzYyB8fCAoXCJnZXRcIiBpbiBkZXNjID8gIW0uX19lc01vZHVsZSA6IGRlc2Mud3JpdGFibGUgfHwgZGVzYy5jb25maWd1cmFibGUpKSB7XG4gICAgICBkZXNjID0geyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uKCkgeyByZXR1cm4gbVtrXTsgfSB9O1xuICAgIH1cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgazIsIGRlc2MpO1xufSkgOiAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIG9bazJdID0gbVtrXTtcbn0pKTtcbnZhciBfX3NldE1vZHVsZURlZmF1bHQgPSAodGhpcyAmJiB0aGlzLl9fc2V0TW9kdWxlRGVmYXVsdCkgfHwgKE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgdikge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBcImRlZmF1bHRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdiB9KTtcbn0pIDogZnVuY3Rpb24obywgdikge1xuICAgIG9bXCJkZWZhdWx0XCJdID0gdjtcbn0pO1xudmFyIF9faW1wb3J0U3RhciA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnRTdGFyKSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgaWYgKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgcmV0dXJuIG1vZDtcbiAgICB2YXIgcmVzdWx0ID0ge307XG4gICAgaWYgKG1vZCAhPSBudWxsKSBmb3IgKHZhciBrIGluIG1vZCkgaWYgKGsgIT09IFwiZGVmYXVsdFwiICYmIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChtb2QsIGspKSBfX2NyZWF0ZUJpbmRpbmcocmVzdWx0LCBtb2QsIGspO1xuICAgIF9fc2V0TW9kdWxlRGVmYXVsdChyZXN1bHQsIG1vZCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbn07XG52YXIgX19hd2FpdGVyID0gKHRoaXMgJiYgdGhpcy5fX2F3YWl0ZXIpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcbiAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xuICAgIH0pO1xufTtcbnZhciBfX2dlbmVyYXRvciA9ICh0aGlzICYmIHRoaXMuX19nZW5lcmF0b3IpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBib2R5KSB7XG4gICAgdmFyIF8gPSB7IGxhYmVsOiAwLCBzZW50OiBmdW5jdGlvbigpIHsgaWYgKHRbMF0gJiAxKSB0aHJvdyB0WzFdOyByZXR1cm4gdFsxXTsgfSwgdHJ5czogW10sIG9wczogW10gfSwgZiwgeSwgdCwgZztcbiAgICByZXR1cm4gZyA9IHsgbmV4dDogdmVyYigwKSwgXCJ0aHJvd1wiOiB2ZXJiKDEpLCBcInJldHVyblwiOiB2ZXJiKDIpIH0sIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiAoZ1tTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzOyB9KSwgZztcbiAgICBmdW5jdGlvbiB2ZXJiKG4pIHsgcmV0dXJuIGZ1bmN0aW9uICh2KSB7IHJldHVybiBzdGVwKFtuLCB2XSk7IH07IH1cbiAgICBmdW5jdGlvbiBzdGVwKG9wKSB7XG4gICAgICAgIGlmIChmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLlwiKTtcbiAgICAgICAgd2hpbGUgKF8pIHRyeSB7XG4gICAgICAgICAgICBpZiAoZiA9IDEsIHkgJiYgKHQgPSBvcFswXSAmIDIgPyB5W1wicmV0dXJuXCJdIDogb3BbMF0gPyB5W1widGhyb3dcIl0gfHwgKCh0ID0geVtcInJldHVyblwiXSkgJiYgdC5jYWxsKHkpLCAwKSA6IHkubmV4dCkgJiYgISh0ID0gdC5jYWxsKHksIG9wWzFdKSkuZG9uZSkgcmV0dXJuIHQ7XG4gICAgICAgICAgICBpZiAoeSA9IDAsIHQpIG9wID0gW29wWzBdICYgMiwgdC52YWx1ZV07XG4gICAgICAgICAgICBzd2l0Y2ggKG9wWzBdKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAwOiBjYXNlIDE6IHQgPSBvcDsgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSA0OiBfLmxhYmVsKys7IHJldHVybiB7IHZhbHVlOiBvcFsxXSwgZG9uZTogZmFsc2UgfTtcbiAgICAgICAgICAgICAgICBjYXNlIDU6IF8ubGFiZWwrKzsgeSA9IG9wWzFdOyBvcCA9IFswXTsgY29udGludWU7XG4gICAgICAgICAgICAgICAgY2FzZSA3OiBvcCA9IF8ub3BzLnBvcCgpOyBfLnRyeXMucG9wKCk7IGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIGlmICghKHQgPSBfLnRyeXMsIHQgPSB0Lmxlbmd0aCA+IDAgJiYgdFt0Lmxlbmd0aCAtIDFdKSAmJiAob3BbMF0gPT09IDYgfHwgb3BbMF0gPT09IDIpKSB7IF8gPSAwOyBjb250aW51ZTsgfVxuICAgICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDMgJiYgKCF0IHx8IChvcFsxXSA+IHRbMF0gJiYgb3BbMV0gPCB0WzNdKSkpIHsgXy5sYWJlbCA9IG9wWzFdOyBicmVhazsgfVxuICAgICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDYgJiYgXy5sYWJlbCA8IHRbMV0pIHsgXy5sYWJlbCA9IHRbMV07IHQgPSBvcDsgYnJlYWs7IH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHQgJiYgXy5sYWJlbCA8IHRbMl0pIHsgXy5sYWJlbCA9IHRbMl07IF8ub3BzLnB1c2gob3ApOyBicmVhazsgfVxuICAgICAgICAgICAgICAgICAgICBpZiAodFsyXSkgXy5vcHMucG9wKCk7XG4gICAgICAgICAgICAgICAgICAgIF8udHJ5cy5wb3AoKTsgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvcCA9IGJvZHkuY2FsbCh0aGlzQXJnLCBfKTtcbiAgICAgICAgfSBjYXRjaCAoZSkgeyBvcCA9IFs2LCBlXTsgeSA9IDA7IH0gZmluYWxseSB7IGYgPSB0ID0gMDsgfVxuICAgICAgICBpZiAob3BbMF0gJiA1KSB0aHJvdyBvcFsxXTsgcmV0dXJuIHsgdmFsdWU6IG9wWzBdID8gb3BbMV0gOiB2b2lkIDAsIGRvbmU6IHRydWUgfTtcbiAgICB9XG59O1xuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbnZhciBqc3hfcnVudGltZV8xID0gcmVxdWlyZShcInJlYWN0L2pzeC1ydW50aW1lXCIpO1xudmFyIHJlYWN0X3NlbGVjdF9hc3luY19wYWdpbmF0ZV8xID0gcmVxdWlyZShcInJlYWN0LXNlbGVjdC1hc3luYy1wYWdpbmF0ZVwiKTtcbnZhciBzaGlwcGluZ18xID0gcmVxdWlyZShcIi4uLy4uL3NlcnZpY2VzL3NoaXBwaW5nXCIpO1xudmFyIFByb3BUeXBlcyA9IF9faW1wb3J0U3RhcihyZXF1aXJlKFwicHJvcC10eXBlc1wiKSk7XG52YXIgc2hvcF8xID0gcmVxdWlyZShcIi4uLy4uL21vZGVsL3Nob3BcIik7XG52YXIgdHN5cmluZ2VfMSA9IHJlcXVpcmUoXCJ0c3lyaW5nZVwiKTtcbnZhciBvcmRlcl8xID0gcmVxdWlyZShcIi4uLy4uL3N0YXRlL29yZGVyXCIpO1xudmFyIG9yZGVyXzIgPSByZXF1aXJlKFwiLi4vLi4vbW9kZWwvb3JkZXJcIik7XG52YXIgcmVhY3RfMSA9IHJlcXVpcmUoXCJyZWFjdFwiKTtcbnZhciBTZWxlY3RMYWJlbF8xID0gcmVxdWlyZShcIi4uL2Jhc2UvU2VsZWN0TGFiZWxcIik7XG52YXIgU2hpcHBpbmdDb21wb25lbnQgPSBmdW5jdGlvbiAoX2EpIHtcbiAgICB2YXIgc2hvcCA9IF9hLnNob3AsIG9yZGVyID0gX2Eub3JkZXI7XG4gICAgdmFyIF9iID0gKDAsIHJlYWN0XzEudXNlU3RhdGUpKG51bGwpLCBzaG9wVXVpZCA9IF9iWzBdLCBzZXRTaG9wVXVpZCA9IF9iWzFdO1xuICAgIHZhciBvcmRlclN0YXRlID0gdHN5cmluZ2VfMS5jb250YWluZXIucmVzb2x2ZShvcmRlcl8xLk9yZGVyU3RhdGUpO1xuICAgIHZhciBfYyA9ICgwLCByZWFjdF8xLnVzZVN0YXRlKSgwKSwgc2hpcHBpbmcgPSBfY1swXSwgc2V0U2hpcHBpbmcgPSBfY1sxXTtcbiAgICB2YXIgc2hpcHBpbmdfc2VydmljZSA9IG5ldyBzaGlwcGluZ18xLlNoaXBwaW5nU2VydmljZSgpO1xuICAgIHZhciBsb2FkT3B0aW9ucyA9IGZ1bmN0aW9uIChzZWFyY2hRdWVyeSwgbG9hZGVkT3B0aW9ucykgeyByZXR1cm4gX19hd2FpdGVyKHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGRhdGE7XG4gICAgICAgIHJldHVybiBfX2dlbmVyYXRvcih0aGlzLCBmdW5jdGlvbiAoX2EpIHtcbiAgICAgICAgICAgIHN3aXRjaCAoX2EubGFiZWwpIHtcbiAgICAgICAgICAgICAgICBjYXNlIDA6IHJldHVybiBbNCAvKnlpZWxkKi8sIHNoaXBwaW5nX3NlcnZpY2UuZ2V0U2hpcHBpbmcoc2hvcCldO1xuICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICAgICAgZGF0YSA9IF9hLnNlbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFsyIC8qcmV0dXJuKi8sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zOiBkYXRhLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc01vcmU6IGZhbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICB9XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSk7IH07XG4gICAgKDAsIHJlYWN0XzEudXNlRWZmZWN0KShmdW5jdGlvbiAoKSB7XG4gICAgICAgIHNldFNob3BVdWlkKHNob3AudXVpZCk7XG4gICAgfSwgW3Nob3AudXVpZF0pO1xuICAgICgwLCByZWFjdF8xLnVzZUVmZmVjdCkoZnVuY3Rpb24gKCkge1xuICAgICAgICBzZXRTaGlwcGluZyhvcmRlci5zaGlwcGluZy51aWQpO1xuICAgIH0sIFtvcmRlci5zaGlwcGluZ10pO1xuICAgIHZhciBvbkNoYW5nZSA9IGZ1bmN0aW9uIChvcHRpb24pIHtcbiAgICAgICAgb3JkZXIuc2hpcHBpbmcgPSBvcHRpb247XG4gICAgICAgIHZhciBvcmRlck9iaiA9IG9yZGVyU3RhdGUuZ2V0Q3VycmVudE9yZGVyKCkuZ2V0VmFsdWUoKTtcbiAgICAgICAgb3JkZXJPYmouc2hpcHBpbmcgPSBvcHRpb247XG4gICAgICAgIG9yZGVyU3RhdGUuc2V0Q3VycmVudE9yZGVyKG9yZGVyT2JqKTtcbiAgICAgICAgc2V0U2hpcHBpbmcob3B0aW9uLnVpZCk7XG4gICAgfTtcbiAgICByZXR1cm4gKCgwLCBqc3hfcnVudGltZV8xLmpzeCkoXCJkaXZcIiwgX19hc3NpZ24oeyBjbGFzc05hbWU6IFwicC0yXCIgfSwgeyBjaGlsZHJlbjogKDAsIGpzeF9ydW50aW1lXzEuanN4KShyZWFjdF9zZWxlY3RfYXN5bmNfcGFnaW5hdGVfMS5Bc3luY1BhZ2luYXRlLCB7IGRlZmF1bHRPcHRpb25zOiB0cnVlLCBjb21wb25lbnRzOiB7IENvbnRyb2w6IFNlbGVjdExhYmVsXzEuU2VsZWN0TGFiZWwgfSwgZGVmYXVsdFZhbHVlOiBvcmRlci5zaGlwcGluZywgcGxhY2Vob2xkZXI6ICcnLCBuYW1lOiAnVmVyc2FuZGFydCcsIGxvYWRPcHRpb25zOiBsb2FkT3B0aW9ucywgZ2V0T3B0aW9uVmFsdWU6IGZ1bmN0aW9uIChvcHRpb24pIHsgcmV0dXJuIG9wdGlvbi51aWQ7IH0sIGdldE9wdGlvbkxhYmVsOiBmdW5jdGlvbiAob3B0aW9uKSB7IHJldHVybiBvcHRpb24udGl0bGU7IH0sIG9uQ2hhbmdlOiBvbkNoYW5nZSwgaXNTZWFyY2hhYmxlOiBmYWxzZSwgY2xhc3NOYW1lOiBcIlwiLmNvbmNhdChzaGlwcGluZyA9PSAwID8gXCJib3JkZXIgYm9yZGVyLXJlZC01MDBcIiA6IFwiXCIpIH0sIEpTT04uc3RyaW5naWZ5KHNob3BVdWlkKSkgfSkpKTtcbn07XG5TaGlwcGluZ0NvbXBvbmVudC5wcm9wVHlwZXMgPSB7XG4gICAgc2hvcDogUHJvcFR5cGVzLmluc3RhbmNlT2Yoc2hvcF8xLlNob3ApLFxuICAgIG9yZGVyOiBQcm9wVHlwZXMuaW5zdGFuY2VPZihvcmRlcl8yLk9yZGVyKVxufTtcbmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gU2hpcHBpbmdDb21wb25lbnQ7XG4iLCJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gICAgfSk7XG59O1xudmFyIF9fZ2VuZXJhdG9yID0gKHRoaXMgJiYgdGhpcy5fX2dlbmVyYXRvcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIGJvZHkpIHtcbiAgICB2YXIgXyA9IHsgbGFiZWw6IDAsIHNlbnQ6IGZ1bmN0aW9uKCkgeyBpZiAodFswXSAmIDEpIHRocm93IHRbMV07IHJldHVybiB0WzFdOyB9LCB0cnlzOiBbXSwgb3BzOiBbXSB9LCBmLCB5LCB0LCBnO1xuICAgIHJldHVybiBnID0geyBuZXh0OiB2ZXJiKDApLCBcInRocm93XCI6IHZlcmIoMSksIFwicmV0dXJuXCI6IHZlcmIoMikgfSwgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIChnW1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbigpIHsgcmV0dXJuIHRoaXM7IH0pLCBnO1xuICAgIGZ1bmN0aW9uIHZlcmIobikgeyByZXR1cm4gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIHN0ZXAoW24sIHZdKTsgfTsgfVxuICAgIGZ1bmN0aW9uIHN0ZXAob3ApIHtcbiAgICAgICAgaWYgKGYpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuXCIpO1xuICAgICAgICB3aGlsZSAoXykgdHJ5IHtcbiAgICAgICAgICAgIGlmIChmID0gMSwgeSAmJiAodCA9IG9wWzBdICYgMiA/IHlbXCJyZXR1cm5cIl0gOiBvcFswXSA/IHlbXCJ0aHJvd1wiXSB8fCAoKHQgPSB5W1wicmV0dXJuXCJdKSAmJiB0LmNhbGwoeSksIDApIDogeS5uZXh0KSAmJiAhKHQgPSB0LmNhbGwoeSwgb3BbMV0pKS5kb25lKSByZXR1cm4gdDtcbiAgICAgICAgICAgIGlmICh5ID0gMCwgdCkgb3AgPSBbb3BbMF0gJiAyLCB0LnZhbHVlXTtcbiAgICAgICAgICAgIHN3aXRjaCAob3BbMF0pIHtcbiAgICAgICAgICAgICAgICBjYXNlIDA6IGNhc2UgMTogdCA9IG9wOyBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIDQ6IF8ubGFiZWwrKzsgcmV0dXJuIHsgdmFsdWU6IG9wWzFdLCBkb25lOiBmYWxzZSB9O1xuICAgICAgICAgICAgICAgIGNhc2UgNTogXy5sYWJlbCsrOyB5ID0gb3BbMV07IG9wID0gWzBdOyBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBjYXNlIDc6IG9wID0gXy5vcHMucG9wKCk7IF8udHJ5cy5wb3AoKTsgY29udGludWU7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEodCA9IF8udHJ5cywgdCA9IHQubGVuZ3RoID4gMCAmJiB0W3QubGVuZ3RoIC0gMV0pICYmIChvcFswXSA9PT0gNiB8fCBvcFswXSA9PT0gMikpIHsgXyA9IDA7IGNvbnRpbnVlOyB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gMyAmJiAoIXQgfHwgKG9wWzFdID4gdFswXSAmJiBvcFsxXSA8IHRbM10pKSkgeyBfLmxhYmVsID0gb3BbMV07IGJyZWFrOyB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gNiAmJiBfLmxhYmVsIDwgdFsxXSkgeyBfLmxhYmVsID0gdFsxXTsgdCA9IG9wOyBicmVhazsgfVxuICAgICAgICAgICAgICAgICAgICBpZiAodCAmJiBfLmxhYmVsIDwgdFsyXSkgeyBfLmxhYmVsID0gdFsyXTsgXy5vcHMucHVzaChvcCk7IGJyZWFrOyB9XG4gICAgICAgICAgICAgICAgICAgIGlmICh0WzJdKSBfLm9wcy5wb3AoKTtcbiAgICAgICAgICAgICAgICAgICAgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG9wID0gYm9keS5jYWxsKHRoaXNBcmcsIF8pO1xuICAgICAgICB9IGNhdGNoIChlKSB7IG9wID0gWzYsIGVdOyB5ID0gMDsgfSBmaW5hbGx5IHsgZiA9IHQgPSAwOyB9XG4gICAgICAgIGlmIChvcFswXSAmIDUpIHRocm93IG9wWzFdOyByZXR1cm4geyB2YWx1ZTogb3BbMF0gPyBvcFsxXSA6IHZvaWQgMCwgZG9uZTogdHJ1ZSB9O1xuICAgIH1cbn07XG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xudmFyIGpzeF9ydW50aW1lXzEgPSByZXF1aXJlKFwicmVhY3QvanN4LXJ1bnRpbWVcIik7XG52YXIgcmVhY3Rfc2VsZWN0X2FzeW5jX3BhZ2luYXRlXzEgPSByZXF1aXJlKFwicmVhY3Qtc2VsZWN0LWFzeW5jLXBhZ2luYXRlXCIpO1xudmFyIHNob3BfMSA9IHJlcXVpcmUoXCIuLi8uLi9zZXJ2aWNlcy9zaG9wXCIpO1xudmFyIHRzeXJpbmdlXzEgPSByZXF1aXJlKFwidHN5cmluZ2VcIik7XG52YXIgb3JkZXJfMSA9IHJlcXVpcmUoXCIuLi8uLi9zdGF0ZS9vcmRlclwiKTtcbnZhciBTZWxlY3RMYWJlbF8xID0gcmVxdWlyZShcIi4uL2Jhc2UvU2VsZWN0TGFiZWxcIik7XG52YXIgU2hvcFNlbGVjdENvbXBvbmVudCA9IGZ1bmN0aW9uIChwcm9wcykge1xuICAgIHZhciBvcmRlclN0YXRlID0gdHN5cmluZ2VfMS5jb250YWluZXIucmVzb2x2ZShvcmRlcl8xLk9yZGVyU3RhdGUpO1xuICAgIHZhciBzaG9wX3NlcnZpY2UgPSB0c3lyaW5nZV8xLmNvbnRhaW5lci5yZXNvbHZlKHNob3BfMS5TaG9wU2VydmljZSk7XG4gICAgdmFyIGxvYWRPcHRpb25zID0gZnVuY3Rpb24gKHNlYXJjaFF1ZXJ5LCBsb2FkZWRPcHRpb25zKSB7IHJldHVybiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgZGF0YTtcbiAgICAgICAgcmV0dXJuIF9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfYSkge1xuICAgICAgICAgICAgc3dpdGNoIChfYS5sYWJlbCkge1xuICAgICAgICAgICAgICAgIGNhc2UgMDogcmV0dXJuIFs0IC8qeWllbGQqLywgc2hvcF9zZXJ2aWNlLmdldFNob3BzKCldO1xuICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICAgICAgZGF0YSA9IF9hLnNlbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFsyIC8qcmV0dXJuKi8sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zOiBkYXRhLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc01vcmU6IGZhbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICB9XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSk7IH07XG4gICAgdmFyIG9uQ2hhbmdlID0gZnVuY3Rpb24gKG9wdGlvbikge1xuICAgICAgICBvcmRlclN0YXRlLmdldEN1cnJlbnRPcmRlcigpLnZhbHVlLnNob3AgPSBvcHRpb247XG4gICAgICAgIHByb3BzLmNoYW5nZShvcHRpb24pO1xuICAgIH07XG4gICAgcmV0dXJuICgoMCwganN4X3J1bnRpbWVfMS5qc3gpKFwiZGl2XCIsIHsgY2hpbGRyZW46ICgwLCBqc3hfcnVudGltZV8xLmpzeCkocmVhY3Rfc2VsZWN0X2FzeW5jX3BhZ2luYXRlXzEuQXN5bmNQYWdpbmF0ZSwgeyBkZWZhdWx0T3B0aW9uczogdHJ1ZSwgdmFsdWU6IHByb3BzLnNob3AsIGNvbXBvbmVudHM6IHsgQ29udHJvbDogU2VsZWN0TGFiZWxfMS5TZWxlY3RMYWJlbCB9LCBsb2FkT3B0aW9uczogbG9hZE9wdGlvbnMsIGdldE9wdGlvblZhbHVlOiBmdW5jdGlvbiAob3B0aW9uKSB7IHJldHVybiBvcHRpb24uaWQ7IH0sIGdldE9wdGlvbkxhYmVsOiBmdW5jdGlvbiAob3B0aW9uKSB7IHJldHVybiBvcHRpb24ubmFtZTsgfSwgb25DaGFuZ2U6IG9uQ2hhbmdlLCBpc1NlYXJjaGFibGU6IGZhbHNlLCBjbGFzc05hbWU6IFwiXCIuY29uY2F0KHByb3BzLnNob3AudXVpZCA9PSBcIlwiID8gXCJib3JkZXIgYm9yZGVyLWRhbmdlclwiIDogXCJib3JkZXIgYm9yZGVyLXNsYXRlLTIwMFwiKSwgbmFtZTogJ1Nob3AnIH0pIH0pKTtcbn07XG5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IFNob3BTZWxlY3RDb21wb25lbnQ7XG4iLCJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2Fzc2lnbiA9ICh0aGlzICYmIHRoaXMuX19hc3NpZ24pIHx8IGZ1bmN0aW9uICgpIHtcbiAgICBfX2Fzc2lnbiA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24odCkge1xuICAgICAgICBmb3IgKHZhciBzLCBpID0gMSwgbiA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBuOyBpKyspIHtcbiAgICAgICAgICAgIHMgPSBhcmd1bWVudHNbaV07XG4gICAgICAgICAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkpXG4gICAgICAgICAgICAgICAgdFtwXSA9IHNbcF07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHQ7XG4gICAgfTtcbiAgICByZXR1cm4gX19hc3NpZ24uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbn07XG52YXIgX19jcmVhdGVCaW5kaW5nID0gKHRoaXMgJiYgdGhpcy5fX2NyZWF0ZUJpbmRpbmcpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICB2YXIgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobSwgayk7XG4gICAgaWYgKCFkZXNjIHx8IChcImdldFwiIGluIGRlc2MgPyAhbS5fX2VzTW9kdWxlIDogZGVzYy53cml0YWJsZSB8fCBkZXNjLmNvbmZpZ3VyYWJsZSkpIHtcbiAgICAgIGRlc2MgPSB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24oKSB7IHJldHVybiBtW2tdOyB9IH07XG4gICAgfVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBrMiwgZGVzYyk7XG59KSA6IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgb1trMl0gPSBtW2tdO1xufSkpO1xudmFyIF9fc2V0TW9kdWxlRGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19zZXRNb2R1bGVEZWZhdWx0KSB8fCAoT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCB2KSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIFwiZGVmYXVsdFwiLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2IH0pO1xufSkgOiBmdW5jdGlvbihvLCB2KSB7XG4gICAgb1tcImRlZmF1bHRcIl0gPSB2O1xufSk7XG52YXIgX19pbXBvcnRTdGFyID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydFN0YXIpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICBpZiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSByZXR1cm4gbW9kO1xuICAgIHZhciByZXN1bHQgPSB7fTtcbiAgICBpZiAobW9kICE9IG51bGwpIGZvciAodmFyIGsgaW4gbW9kKSBpZiAoayAhPT0gXCJkZWZhdWx0XCIgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1vZCwgaykpIF9fY3JlYXRlQmluZGluZyhyZXN1bHQsIG1vZCwgayk7XG4gICAgX19zZXRNb2R1bGVEZWZhdWx0KHJlc3VsdCwgbW9kKTtcbiAgICByZXR1cm4gcmVzdWx0O1xufTtcbnZhciBfX2ltcG9ydERlZmF1bHQgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0RGVmYXVsdCkgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIHJldHVybiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSA/IG1vZCA6IHsgXCJkZWZhdWx0XCI6IG1vZCB9O1xufTtcbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG52YXIganN4X3J1bnRpbWVfMSA9IHJlcXVpcmUoXCJyZWFjdC9qc3gtcnVudGltZVwiKTtcbnZhciBUeXBlU2VsZWN0Q29tcG9uZW50XzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIi4uL3R5cGUvVHlwZVNlbGVjdENvbXBvbmVudFwiKSk7XG52YXIgU2hvcFNlbGVjdENvbXBvbmVudF8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCIuLi9zaG9wL1Nob3BTZWxlY3RDb21wb25lbnRcIikpO1xudmFyIFByb3BUeXBlcyA9IF9faW1wb3J0U3RhcihyZXF1aXJlKFwicHJvcC10eXBlc1wiKSk7XG52YXIgc2hvcF8xID0gcmVxdWlyZShcIi4uLy4uL21vZGVsL3Nob3BcIik7XG52YXIgRHJhZnRDb21wb25lbnRfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiLi4vZHJhZnQvRHJhZnRDb21wb25lbnRcIikpO1xudmFyIG9yZGVyXzEgPSByZXF1aXJlKFwiLi4vLi4vbW9kZWwvb3JkZXJcIik7XG52YXIgQ2FsY0NvbXBvbmVudF8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCIuLi9jYWxjL0NhbGNDb21wb25lbnRcIikpO1xudmFyIFRvcEJhckNvbXBvbmVudCA9IGZ1bmN0aW9uIChfYSkge1xuICAgIHZhciBzaG9wID0gX2Euc2hvcCwgb3JkZXIgPSBfYS5vcmRlciwgY2hhbmdlID0gX2EuY2hhbmdlO1xuICAgIHJldHVybiAoKDAsIGpzeF9ydW50aW1lXzEuanN4cykoXCJkaXZcIiwgX19hc3NpZ24oeyBjbGFzc05hbWU6IFwiZmxleCBnYXAtM1wiIH0sIHsgY2hpbGRyZW46IFsoMCwganN4X3J1bnRpbWVfMS5qc3gpKFwiZGl2XCIsIHsgY2hpbGRyZW46ICgwLCBqc3hfcnVudGltZV8xLmpzeCkoRHJhZnRDb21wb25lbnRfMVtcImRlZmF1bHRcIl0sIHsgb3JkZXI6IG9yZGVyIH0pIH0pLCAoMCwganN4X3J1bnRpbWVfMS5qc3gpKFwiZGl2XCIsIF9fYXNzaWduKHsgY2xhc3NOYW1lOiBcImZsZXgtYXV0b1wiIH0sIHsgY2hpbGRyZW46ICgwLCBqc3hfcnVudGltZV8xLmpzeCkoVHlwZVNlbGVjdENvbXBvbmVudF8xW1wiZGVmYXVsdFwiXSwgeyBvcmRlcjogb3JkZXIgfSkgfSkpLCAoMCwganN4X3J1bnRpbWVfMS5qc3gpKFwiZGl2XCIsIF9fYXNzaWduKHsgY2xhc3NOYW1lOiBcImZsZXgtYXV0b1wiIH0sIHsgY2hpbGRyZW46ICgwLCBqc3hfcnVudGltZV8xLmpzeCkoU2hvcFNlbGVjdENvbXBvbmVudF8xW1wiZGVmYXVsdFwiXSwgeyBzaG9wOiBzaG9wLCBjaGFuZ2U6IGNoYW5nZSB9KSB9KSksICgwLCBqc3hfcnVudGltZV8xLmpzeCkoXCJkaXZcIiwgeyBjaGlsZHJlbjogKDAsIGpzeF9ydW50aW1lXzEuanN4KShDYWxjQ29tcG9uZW50XzFbXCJkZWZhdWx0XCJdLCB7fSkgfSldIH0pKSk7XG59O1xuVG9wQmFyQ29tcG9uZW50LnByb3BUeXBlcyA9IHtcbiAgICBzaG9wOiBQcm9wVHlwZXMuaW5zdGFuY2VPZihzaG9wXzEuU2hvcCksXG4gICAgb3JkZXI6IFByb3BUeXBlcy5pbnN0YW5jZU9mKG9yZGVyXzEuT3JkZXIpLFxuICAgIGNoYW5nZTogUHJvcFR5cGVzLmZ1bmNcbn07XG5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IFRvcEJhckNvbXBvbmVudDtcbiIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9faW1wb3J0RGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnREZWZhdWx0KSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgcmV0dXJuIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpID8gbW9kIDogeyBcImRlZmF1bHRcIjogbW9kIH07XG59O1xuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbnZhciBqc3hfcnVudGltZV8xID0gcmVxdWlyZShcInJlYWN0L2pzeC1ydW50aW1lXCIpO1xudmFyIHJlYWN0X3NlbGVjdF8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJyZWFjdC1zZWxlY3RcIikpO1xudmFyIHJlYWN0XzEgPSByZXF1aXJlKFwicmVhY3RcIik7XG52YXIgdHN5cmluZ2VfMSA9IHJlcXVpcmUoXCJ0c3lyaW5nZVwiKTtcbnZhciBvcmRlcl8xID0gcmVxdWlyZShcIi4uLy4uL3N0YXRlL29yZGVyXCIpO1xudmFyIFNlbGVjdExhYmVsXzEgPSByZXF1aXJlKFwiLi4vYmFzZS9TZWxlY3RMYWJlbFwiKTtcbnZhciBUeXBlU2VsZWN0Q29tcG9uZW50ID0gZnVuY3Rpb24gKF9hKSB7XG4gICAgdmFyIG9yZGVyID0gX2Eub3JkZXI7XG4gICAgdmFyIF9iID0gKDAsIHJlYWN0XzEudXNlU3RhdGUpKDApLCB0eXBlID0gX2JbMF0sIHNldFR5cGUgPSBfYlsxXTtcbiAgICB2YXIgb3JkZXJTdGF0ZSA9IHRzeXJpbmdlXzEuY29udGFpbmVyLnJlc29sdmUob3JkZXJfMS5PcmRlclN0YXRlKTtcbiAgICB2YXIgb3B0aW9ucyA9IFtcbiAgICAgICAgeyB2YWx1ZTogMSwgbGFiZWw6ICdBdWZ0cmFnJyB9LFxuICAgICAgICB7IHZhbHVlOiAyLCBsYWJlbDogJ0FuZ2Vib3QnIH0sXG4gICAgICAgIHsgdmFsdWU6IDMsIGxhYmVsOiAnU3Rvcm5vJyB9LFxuICAgICAgICB7IHZhbHVlOiA0LCBsYWJlbDogJ0d1dHNjaHJpZnQnIH0sXG4gICAgICAgIHsgdmFsdWU6IDUsIGxhYmVsOiAnUmVjaG51bmcnIH0sXG4gICAgICAgIHsgdmFsdWU6IDYsIGxhYmVsOiAnVGVpbHJlY2hudW5nJyB9LFxuICAgICAgICB7IHZhbHVlOiA3LCBsYWJlbDogJ1RlaWxzdG9ybm8nIH0sXG4gICAgXTtcbiAgICB2YXIgb25DaGFuZ2UgPSBmdW5jdGlvbiAob3B0aW9uKSB7XG4gICAgICAgIHZhciBvcmRlciA9IG9yZGVyU3RhdGUuZ2V0Q3VycmVudE9yZGVyKCkudmFsdWU7XG4gICAgICAgIG9yZGVyLnR5cGUgPSBvcHRpb24udmFsdWU7XG4gICAgICAgIG9yZGVyU3RhdGUuc2V0Q3VycmVudE9yZGVyKG9yZGVyKTtcbiAgICAgICAgc2V0VHlwZShvcHRpb24pO1xuICAgIH07XG4gICAgKDAsIHJlYWN0XzEudXNlRWZmZWN0KShmdW5jdGlvbiAoKSB7XG4gICAgICAgIHNldFR5cGUob3JkZXIudHlwZSk7XG4gICAgfSwgW29yZGVyLnR5cGVdKTtcbiAgICByZXR1cm4gKCgwLCBqc3hfcnVudGltZV8xLmpzeCkoXCJkaXZcIiwgeyBjaGlsZHJlbjogKDAsIGpzeF9ydW50aW1lXzEuanN4KShyZWFjdF9zZWxlY3RfMVtcImRlZmF1bHRcIl0sIHsgY2xhc3NOYW1lOiBcIlwiLmNvbmNhdCh0eXBlID09IDAgPyBcImJvcmRlciBib3JkZXItZGFuZ2VyXCIgOiBcIlwiKSwgb3B0aW9uczogb3B0aW9ucywgZGVmYXVsdFZhbHVlOiBvcHRpb25zLmZpbHRlcihmdW5jdGlvbiAoZSkgeyByZXR1cm4gZS52YWx1ZSA9PSB0eXBlOyB9KS5wb3AoKSwgdmFsdWU6IG9wdGlvbnMuZmlsdGVyKGZ1bmN0aW9uIChlKSB7IHJldHVybiBlLnZhbHVlID09IHR5cGU7IH0pLnBvcCgpLCBvbkNoYW5nZTogb25DaGFuZ2UsIGNvbXBvbmVudHM6IHsgQ29udHJvbDogU2VsZWN0TGFiZWxfMS5TZWxlY3RMYWJlbCB9LCBwbGFjZWhvbGRlcjogXCJcIiwgbmFtZTogXCJUeXBcIiB9KSB9KSk7XG59O1xuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBUeXBlU2VsZWN0Q29tcG9uZW50O1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19kZWNvcmF0ZSA9ICh0aGlzICYmIHRoaXMuX19kZWNvcmF0ZSkgfHwgZnVuY3Rpb24gKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKSB7XG4gICAgdmFyIGMgPSBhcmd1bWVudHMubGVuZ3RoLCByID0gYyA8IDMgPyB0YXJnZXQgOiBkZXNjID09PSBudWxsID8gZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpIDogZGVzYywgZDtcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QuZGVjb3JhdGUgPT09IFwiZnVuY3Rpb25cIikgciA9IFJlZmxlY3QuZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpO1xuICAgIGVsc2UgZm9yICh2YXIgaSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIGlmIChkID0gZGVjb3JhdG9yc1tpXSkgciA9IChjIDwgMyA/IGQocikgOiBjID4gMyA/IGQodGFyZ2V0LCBrZXksIHIpIDogZCh0YXJnZXQsIGtleSkpIHx8IHI7XG4gICAgcmV0dXJuIGMgPiAzICYmIHIgJiYgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCByKSwgcjtcbn07XG52YXIgX19tZXRhZGF0YSA9ICh0aGlzICYmIHRoaXMuX19tZXRhZGF0YSkgfHwgZnVuY3Rpb24gKGssIHYpIHtcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QubWV0YWRhdGEgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIFJlZmxlY3QubWV0YWRhdGEoaywgdik7XG59O1xudmFyIF9fYXdhaXRlciA9ICh0aGlzICYmIHRoaXMuX19hd2FpdGVyKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgICB9KTtcbn07XG52YXIgX19nZW5lcmF0b3IgPSAodGhpcyAmJiB0aGlzLl9fZ2VuZXJhdG9yKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgYm9keSkge1xuICAgIHZhciBfID0geyBsYWJlbDogMCwgc2VudDogZnVuY3Rpb24oKSB7IGlmICh0WzBdICYgMSkgdGhyb3cgdFsxXTsgcmV0dXJuIHRbMV07IH0sIHRyeXM6IFtdLCBvcHM6IFtdIH0sIGYsIHksIHQsIGc7XG4gICAgcmV0dXJuIGcgPSB7IG5leHQ6IHZlcmIoMCksIFwidGhyb3dcIjogdmVyYigxKSwgXCJyZXR1cm5cIjogdmVyYigyKSB9LCB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgKGdbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhpczsgfSksIGc7XG4gICAgZnVuY3Rpb24gdmVyYihuKSB7IHJldHVybiBmdW5jdGlvbiAodikgeyByZXR1cm4gc3RlcChbbiwgdl0pOyB9OyB9XG4gICAgZnVuY3Rpb24gc3RlcChvcCkge1xuICAgICAgICBpZiAoZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy5cIik7XG4gICAgICAgIHdoaWxlIChfKSB0cnkge1xuICAgICAgICAgICAgaWYgKGYgPSAxLCB5ICYmICh0ID0gb3BbMF0gJiAyID8geVtcInJldHVyblwiXSA6IG9wWzBdID8geVtcInRocm93XCJdIHx8ICgodCA9IHlbXCJyZXR1cm5cIl0pICYmIHQuY2FsbCh5KSwgMCkgOiB5Lm5leHQpICYmICEodCA9IHQuY2FsbCh5LCBvcFsxXSkpLmRvbmUpIHJldHVybiB0O1xuICAgICAgICAgICAgaWYgKHkgPSAwLCB0KSBvcCA9IFtvcFswXSAmIDIsIHQudmFsdWVdO1xuICAgICAgICAgICAgc3dpdGNoIChvcFswXSkge1xuICAgICAgICAgICAgICAgIGNhc2UgMDogY2FzZSAxOiB0ID0gb3A7IGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgNDogXy5sYWJlbCsrOyByZXR1cm4geyB2YWx1ZTogb3BbMV0sIGRvbmU6IGZhbHNlIH07XG4gICAgICAgICAgICAgICAgY2FzZSA1OiBfLmxhYmVsKys7IHkgPSBvcFsxXTsgb3AgPSBbMF07IGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGNhc2UgNzogb3AgPSBfLm9wcy5wb3AoKTsgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICBpZiAoISh0ID0gXy50cnlzLCB0ID0gdC5sZW5ndGggPiAwICYmIHRbdC5sZW5ndGggLSAxXSkgJiYgKG9wWzBdID09PSA2IHx8IG9wWzBdID09PSAyKSkgeyBfID0gMDsgY29udGludWU7IH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSAzICYmICghdCB8fCAob3BbMV0gPiB0WzBdICYmIG9wWzFdIDwgdFszXSkpKSB7IF8ubGFiZWwgPSBvcFsxXTsgYnJlYWs7IH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSA2ICYmIF8ubGFiZWwgPCB0WzFdKSB7IF8ubGFiZWwgPSB0WzFdOyB0ID0gb3A7IGJyZWFrOyB9XG4gICAgICAgICAgICAgICAgICAgIGlmICh0ICYmIF8ubGFiZWwgPCB0WzJdKSB7IF8ubGFiZWwgPSB0WzJdOyBfLm9wcy5wdXNoKG9wKTsgYnJlYWs7IH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHRbMl0pIF8ub3BzLnBvcCgpO1xuICAgICAgICAgICAgICAgICAgICBfLnRyeXMucG9wKCk7IGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgb3AgPSBib2R5LmNhbGwodGhpc0FyZywgXyk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHsgb3AgPSBbNiwgZV07IHkgPSAwOyB9IGZpbmFsbHkgeyBmID0gdCA9IDA7IH1cbiAgICAgICAgaWYgKG9wWzBdICYgNSkgdGhyb3cgb3BbMV07IHJldHVybiB7IHZhbHVlOiBvcFswXSA/IG9wWzFdIDogdm9pZCAwLCBkb25lOiB0cnVlIH07XG4gICAgfVxufTtcbnZhciBfX2ltcG9ydERlZmF1bHQgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0RGVmYXVsdCkgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIHJldHVybiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSA/IG1vZCA6IHsgXCJkZWZhdWx0XCI6IG1vZCB9O1xufTtcbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5leHBvcnRzLkFjY291bnRTZXJ2aWNlID0gdm9pZCAwO1xudmFyIHRzeXJpbmdlXzEgPSByZXF1aXJlKFwidHN5cmluZ2VcIik7XG52YXIgdG9rZW5fMSA9IHJlcXVpcmUoXCIuL3Rva2VuXCIpO1xudmFyIGF4aW9zXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcImF4aW9zXCIpKTtcbnZhciBhY2NvdW50XzEgPSByZXF1aXJlKFwiLi4vbW9kZWwvYWNjb3VudFwiKTtcbnZhciBBY2NvdW50U2VydmljZSA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBBY2NvdW50U2VydmljZSh0b2tlbikge1xuICAgICAgICB0aGlzLnRva2VuID0gdG9rZW47XG4gICAgfVxuICAgIEFjY291bnRTZXJ2aWNlLnByb3RvdHlwZS5nZXRBY2NvdW50cyA9IGZ1bmN0aW9uIChzaG9wKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIF9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfYikge1xuICAgICAgICAgICAgICAgIHN3aXRjaCAoX2IubGFiZWwpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAwOiByZXR1cm4gWzQgLyp5aWVsZCovLCBheGlvc18xW1wiZGVmYXVsdFwiXS5nZXQoJy9hcHBzL2FwaS9hY2NvdW50L2FsbGJ5c2hvcC8nICsgc2hvcC51dWlkLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQXV0aG9yaXphdGlvbic6ICdCZWFyZXIgJyArICgoX2EgPSB0aGlzLnRva2VuKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuY3VycmVudFRva2VuKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0pLnRoZW4oZnVuY3Rpb24gKHJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlLmRhdGEuZGF0YS5tYXAoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGFjY291bnQgPSBuZXcgYWNjb3VudF8xLkFjY291bnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWNjb3VudC51aWQgPSBpdGVtLnVpZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWNjb3VudC50aXRsZSA9IGl0ZW0udGl0bGU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjY291bnQuYXBwZW5kaXggPSBpdGVtLmFwcGVuZGl4O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY2NvdW50LnV1aWQgPSBpdGVtLnV1aWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBhY2NvdW50O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSldO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDE6IHJldHVybiBbMiAvKnJldHVybiovLCBfYi5zZW50KCldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIEFjY291bnRTZXJ2aWNlID0gX19kZWNvcmF0ZShbXG4gICAgICAgICgwLCB0c3lyaW5nZV8xLnNpbmdsZXRvbikoKSxcbiAgICAgICAgKDAsIHRzeXJpbmdlXzEuYXV0b0luamVjdGFibGUpKCksXG4gICAgICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246cGFyYW10eXBlc1wiLCBbdG9rZW5fMS5Ub2tlbl0pXG4gICAgXSwgQWNjb3VudFNlcnZpY2UpO1xuICAgIHJldHVybiBBY2NvdW50U2VydmljZTtcbn0oKSk7XG5leHBvcnRzLkFjY291bnRTZXJ2aWNlID0gQWNjb3VudFNlcnZpY2U7XG4iLCJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2RlY29yYXRlID0gKHRoaXMgJiYgdGhpcy5fX2RlY29yYXRlKSB8fCBmdW5jdGlvbiAoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpIHtcbiAgICB2YXIgYyA9IGFyZ3VtZW50cy5sZW5ndGgsIHIgPSBjIDwgMyA/IHRhcmdldCA6IGRlc2MgPT09IG51bGwgPyBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGtleSkgOiBkZXNjLCBkO1xuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5kZWNvcmF0ZSA9PT0gXCJmdW5jdGlvblwiKSByID0gUmVmbGVjdC5kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYyk7XG4gICAgZWxzZSBmb3IgKHZhciBpID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgaWYgKGQgPSBkZWNvcmF0b3JzW2ldKSByID0gKGMgPCAzID8gZChyKSA6IGMgPiAzID8gZCh0YXJnZXQsIGtleSwgcikgOiBkKHRhcmdldCwga2V5KSkgfHwgcjtcbiAgICByZXR1cm4gYyA+IDMgJiYgciAmJiBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHIpLCByO1xufTtcbnZhciBfX21ldGFkYXRhID0gKHRoaXMgJiYgdGhpcy5fX21ldGFkYXRhKSB8fCBmdW5jdGlvbiAoaywgdikge1xuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5tZXRhZGF0YSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gUmVmbGVjdC5tZXRhZGF0YShrLCB2KTtcbn07XG52YXIgX19hd2FpdGVyID0gKHRoaXMgJiYgdGhpcy5fX2F3YWl0ZXIpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcbiAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xuICAgIH0pO1xufTtcbnZhciBfX2dlbmVyYXRvciA9ICh0aGlzICYmIHRoaXMuX19nZW5lcmF0b3IpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBib2R5KSB7XG4gICAgdmFyIF8gPSB7IGxhYmVsOiAwLCBzZW50OiBmdW5jdGlvbigpIHsgaWYgKHRbMF0gJiAxKSB0aHJvdyB0WzFdOyByZXR1cm4gdFsxXTsgfSwgdHJ5czogW10sIG9wczogW10gfSwgZiwgeSwgdCwgZztcbiAgICByZXR1cm4gZyA9IHsgbmV4dDogdmVyYigwKSwgXCJ0aHJvd1wiOiB2ZXJiKDEpLCBcInJldHVyblwiOiB2ZXJiKDIpIH0sIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiAoZ1tTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzOyB9KSwgZztcbiAgICBmdW5jdGlvbiB2ZXJiKG4pIHsgcmV0dXJuIGZ1bmN0aW9uICh2KSB7IHJldHVybiBzdGVwKFtuLCB2XSk7IH07IH1cbiAgICBmdW5jdGlvbiBzdGVwKG9wKSB7XG4gICAgICAgIGlmIChmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLlwiKTtcbiAgICAgICAgd2hpbGUgKF8pIHRyeSB7XG4gICAgICAgICAgICBpZiAoZiA9IDEsIHkgJiYgKHQgPSBvcFswXSAmIDIgPyB5W1wicmV0dXJuXCJdIDogb3BbMF0gPyB5W1widGhyb3dcIl0gfHwgKCh0ID0geVtcInJldHVyblwiXSkgJiYgdC5jYWxsKHkpLCAwKSA6IHkubmV4dCkgJiYgISh0ID0gdC5jYWxsKHksIG9wWzFdKSkuZG9uZSkgcmV0dXJuIHQ7XG4gICAgICAgICAgICBpZiAoeSA9IDAsIHQpIG9wID0gW29wWzBdICYgMiwgdC52YWx1ZV07XG4gICAgICAgICAgICBzd2l0Y2ggKG9wWzBdKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAwOiBjYXNlIDE6IHQgPSBvcDsgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSA0OiBfLmxhYmVsKys7IHJldHVybiB7IHZhbHVlOiBvcFsxXSwgZG9uZTogZmFsc2UgfTtcbiAgICAgICAgICAgICAgICBjYXNlIDU6IF8ubGFiZWwrKzsgeSA9IG9wWzFdOyBvcCA9IFswXTsgY29udGludWU7XG4gICAgICAgICAgICAgICAgY2FzZSA3OiBvcCA9IF8ub3BzLnBvcCgpOyBfLnRyeXMucG9wKCk7IGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIGlmICghKHQgPSBfLnRyeXMsIHQgPSB0Lmxlbmd0aCA+IDAgJiYgdFt0Lmxlbmd0aCAtIDFdKSAmJiAob3BbMF0gPT09IDYgfHwgb3BbMF0gPT09IDIpKSB7IF8gPSAwOyBjb250aW51ZTsgfVxuICAgICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDMgJiYgKCF0IHx8IChvcFsxXSA+IHRbMF0gJiYgb3BbMV0gPCB0WzNdKSkpIHsgXy5sYWJlbCA9IG9wWzFdOyBicmVhazsgfVxuICAgICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDYgJiYgXy5sYWJlbCA8IHRbMV0pIHsgXy5sYWJlbCA9IHRbMV07IHQgPSBvcDsgYnJlYWs7IH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHQgJiYgXy5sYWJlbCA8IHRbMl0pIHsgXy5sYWJlbCA9IHRbMl07IF8ub3BzLnB1c2gob3ApOyBicmVhazsgfVxuICAgICAgICAgICAgICAgICAgICBpZiAodFsyXSkgXy5vcHMucG9wKCk7XG4gICAgICAgICAgICAgICAgICAgIF8udHJ5cy5wb3AoKTsgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvcCA9IGJvZHkuY2FsbCh0aGlzQXJnLCBfKTtcbiAgICAgICAgfSBjYXRjaCAoZSkgeyBvcCA9IFs2LCBlXTsgeSA9IDA7IH0gZmluYWxseSB7IGYgPSB0ID0gMDsgfVxuICAgICAgICBpZiAob3BbMF0gJiA1KSB0aHJvdyBvcFsxXTsgcmV0dXJuIHsgdmFsdWU6IG9wWzBdID8gb3BbMV0gOiB2b2lkIDAsIGRvbmU6IHRydWUgfTtcbiAgICB9XG59O1xudmFyIF9faW1wb3J0RGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnREZWZhdWx0KSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgcmV0dXJuIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpID8gbW9kIDogeyBcImRlZmF1bHRcIjogbW9kIH07XG59O1xuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbmV4cG9ydHMuQWRkcmVzc1NlcnZpY2UgPSB2b2lkIDA7XG52YXIgdHN5cmluZ2VfMSA9IHJlcXVpcmUoXCJ0c3lyaW5nZVwiKTtcbnZhciB0b2tlbl8xID0gcmVxdWlyZShcIi4vdG9rZW5cIik7XG52YXIgYXhpb3NfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiYXhpb3NcIikpO1xudmFyIGFkZHJlc3NfMSA9IHJlcXVpcmUoXCIuLi9tb2RlbC9hZGRyZXNzXCIpO1xudmFyIEFkZHJlc3NTZXJ2aWNlID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIEFkZHJlc3NTZXJ2aWNlKHRva2VuKSB7XG4gICAgICAgIHRoaXMudG9rZW4gPSB0b2tlbjtcbiAgICB9XG4gICAgQWRkcmVzc1NlcnZpY2UucHJvdG90eXBlLmNyZWF0ZSA9IGZ1bmN0aW9uIChhZGRyZXNzKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIF9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfYikge1xuICAgICAgICAgICAgICAgIHN3aXRjaCAoX2IubGFiZWwpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAwOiByZXR1cm4gWzQgLyp5aWVsZCovLCBheGlvc18xW1wiZGVmYXVsdFwiXS5wb3N0KCcvYXBwcy9hcGkvY29udGFjdC9hZGRyZXNzL2NyZWF0ZScsIHsgJ2FkZHJlc3MnOiBhZGRyZXNzIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdBdXRob3JpemF0aW9uJzogJ0JlYXJlciAnICsgKChfYSA9IHRoaXMudG9rZW4pID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5jdXJyZW50VG9rZW4pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSkudGhlbihmdW5jdGlvbiAocmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzcG9uc2UuZGF0YTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXTtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAxOiByZXR1cm4gWzIgLypyZXR1cm4qLywgX2Iuc2VudCgpXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBBZGRyZXNzU2VydmljZS5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gKGFkZHJlc3MpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gX19nZW5lcmF0b3IodGhpcywgZnVuY3Rpb24gKF9iKSB7XG4gICAgICAgICAgICAgICAgc3dpdGNoIChfYi5sYWJlbCkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDA6IHJldHVybiBbNCAvKnlpZWxkKi8sIGF4aW9zXzFbXCJkZWZhdWx0XCJdLnB1dCgnL2FwcHMvYXBpL2NvbnRhY3QvYWRkcmVzcy91cGRhdGUvJyArIGFkZHJlc3MudXVpZCwgeyAnYWRkcmVzcyc6IGFkZHJlc3MgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0F1dGhvcml6YXRpb24nOiAnQmVhcmVyICcgKyAoKF9hID0gdGhpcy50b2tlbikgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmN1cnJlbnRUb2tlbilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9KS50aGVuKGZ1bmN0aW9uIChyZXNwb25zZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXNwb25zZS5kYXRhO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSldO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDE6IHJldHVybiBbMiAvKnJldHVybiovLCBfYi5zZW50KCldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIEFkZHJlc3NTZXJ2aWNlLnByb3RvdHlwZS5nZXRDb250YWN0QWRkcmVzcyA9IGZ1bmN0aW9uIChjb250YWN0LCB0eXBlKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIF9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfYikge1xuICAgICAgICAgICAgICAgIHN3aXRjaCAoX2IubGFiZWwpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAwOiByZXR1cm4gWzQgLyp5aWVsZCovLCBheGlvc18xW1wiZGVmYXVsdFwiXS5nZXQoJy9hcHBzL2FwaS9jb250YWN0L2FkZHJlc3MvZ2V0YWxsZm9ydHlwZS8nICsgY29udGFjdCArICcvJyArIHR5cGUsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdBdXRob3JpemF0aW9uJzogJ0JlYXJlciAnICsgKChfYSA9IHRoaXMudG9rZW4pID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5jdXJyZW50VG9rZW4pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSkudGhlbihmdW5jdGlvbiAocmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzcG9uc2UuZGF0YS5kYXRhLm1hcChmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYWRkcmVzcyA9IG5ldyBhZGRyZXNzXzEuQWRkcmVzcztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkcmVzcy51aWQgPSBpdGVtLnVpZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkcmVzcy5maXJzdG5hbWUgPSBpdGVtLmZpcnN0bmFtZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkcmVzcy5sYXN0bmFtZSA9IGl0ZW0ubGFzdG5hbWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZHJlc3Muc3RyZWV0ID0gaXRlbS5zdHJlZXQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZHJlc3MuY291bnRyeSA9IGl0ZW0uY291bnRyeTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkcmVzcy51c3RpZCA9IGl0ZW0udXN0aWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZHJlc3MuaG91c2VOdW1iZXIgPSBpdGVtLmhvdXNlTnVtYmVyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRyZXNzLnppcCA9IGl0ZW0uemlwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRyZXNzLmNpdHkgPSBpdGVtLmNpdHk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZHJlc3MuY29tcGFueSA9IGl0ZW0uY29tcGFueTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkcmVzcy5jb21wYW55MiA9IGl0ZW0uY29tcGFueTI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZHJlc3MudXVpZCA9IGl0ZW0udXVpZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFkZHJlc3M7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KV07XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMTogcmV0dXJuIFsyIC8qcmV0dXJuKi8sIF9iLnNlbnQoKV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgQWRkcmVzc1NlcnZpY2UgPSBfX2RlY29yYXRlKFtcbiAgICAgICAgKDAsIHRzeXJpbmdlXzEuc2luZ2xldG9uKSgpLFxuICAgICAgICAoMCwgdHN5cmluZ2VfMS5hdXRvSW5qZWN0YWJsZSkoKSxcbiAgICAgICAgX19tZXRhZGF0YShcImRlc2lnbjpwYXJhbXR5cGVzXCIsIFt0b2tlbl8xLlRva2VuXSlcbiAgICBdLCBBZGRyZXNzU2VydmljZSk7XG4gICAgcmV0dXJuIEFkZHJlc3NTZXJ2aWNlO1xufSgpKTtcbmV4cG9ydHMuQWRkcmVzc1NlcnZpY2UgPSBBZGRyZXNzU2VydmljZTtcbiIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9fZGVjb3JhdGUgPSAodGhpcyAmJiB0aGlzLl9fZGVjb3JhdGUpIHx8IGZ1bmN0aW9uIChkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYykge1xuICAgIHZhciBjID0gYXJndW1lbnRzLmxlbmd0aCwgciA9IGMgPCAzID8gdGFyZ2V0IDogZGVzYyA9PT0gbnVsbCA/IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KSA6IGRlc2MsIGQ7XG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0LmRlY29yYXRlID09PSBcImZ1bmN0aW9uXCIpIHIgPSBSZWZsZWN0LmRlY29yYXRlKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKTtcbiAgICBlbHNlIGZvciAodmFyIGkgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSBpZiAoZCA9IGRlY29yYXRvcnNbaV0pIHIgPSAoYyA8IDMgPyBkKHIpIDogYyA+IDMgPyBkKHRhcmdldCwga2V5LCByKSA6IGQodGFyZ2V0LCBrZXkpKSB8fCByO1xuICAgIHJldHVybiBjID4gMyAmJiByICYmIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgciksIHI7XG59O1xudmFyIF9fbWV0YWRhdGEgPSAodGhpcyAmJiB0aGlzLl9fbWV0YWRhdGEpIHx8IGZ1bmN0aW9uIChrLCB2KSB7XG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0Lm1ldGFkYXRhID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiBSZWZsZWN0Lm1ldGFkYXRhKGssIHYpO1xufTtcbnZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gICAgfSk7XG59O1xudmFyIF9fZ2VuZXJhdG9yID0gKHRoaXMgJiYgdGhpcy5fX2dlbmVyYXRvcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIGJvZHkpIHtcbiAgICB2YXIgXyA9IHsgbGFiZWw6IDAsIHNlbnQ6IGZ1bmN0aW9uKCkgeyBpZiAodFswXSAmIDEpIHRocm93IHRbMV07IHJldHVybiB0WzFdOyB9LCB0cnlzOiBbXSwgb3BzOiBbXSB9LCBmLCB5LCB0LCBnO1xuICAgIHJldHVybiBnID0geyBuZXh0OiB2ZXJiKDApLCBcInRocm93XCI6IHZlcmIoMSksIFwicmV0dXJuXCI6IHZlcmIoMikgfSwgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIChnW1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbigpIHsgcmV0dXJuIHRoaXM7IH0pLCBnO1xuICAgIGZ1bmN0aW9uIHZlcmIobikgeyByZXR1cm4gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIHN0ZXAoW24sIHZdKTsgfTsgfVxuICAgIGZ1bmN0aW9uIHN0ZXAob3ApIHtcbiAgICAgICAgaWYgKGYpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuXCIpO1xuICAgICAgICB3aGlsZSAoXykgdHJ5IHtcbiAgICAgICAgICAgIGlmIChmID0gMSwgeSAmJiAodCA9IG9wWzBdICYgMiA/IHlbXCJyZXR1cm5cIl0gOiBvcFswXSA/IHlbXCJ0aHJvd1wiXSB8fCAoKHQgPSB5W1wicmV0dXJuXCJdKSAmJiB0LmNhbGwoeSksIDApIDogeS5uZXh0KSAmJiAhKHQgPSB0LmNhbGwoeSwgb3BbMV0pKS5kb25lKSByZXR1cm4gdDtcbiAgICAgICAgICAgIGlmICh5ID0gMCwgdCkgb3AgPSBbb3BbMF0gJiAyLCB0LnZhbHVlXTtcbiAgICAgICAgICAgIHN3aXRjaCAob3BbMF0pIHtcbiAgICAgICAgICAgICAgICBjYXNlIDA6IGNhc2UgMTogdCA9IG9wOyBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIDQ6IF8ubGFiZWwrKzsgcmV0dXJuIHsgdmFsdWU6IG9wWzFdLCBkb25lOiBmYWxzZSB9O1xuICAgICAgICAgICAgICAgIGNhc2UgNTogXy5sYWJlbCsrOyB5ID0gb3BbMV07IG9wID0gWzBdOyBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBjYXNlIDc6IG9wID0gXy5vcHMucG9wKCk7IF8udHJ5cy5wb3AoKTsgY29udGludWU7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEodCA9IF8udHJ5cywgdCA9IHQubGVuZ3RoID4gMCAmJiB0W3QubGVuZ3RoIC0gMV0pICYmIChvcFswXSA9PT0gNiB8fCBvcFswXSA9PT0gMikpIHsgXyA9IDA7IGNvbnRpbnVlOyB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gMyAmJiAoIXQgfHwgKG9wWzFdID4gdFswXSAmJiBvcFsxXSA8IHRbM10pKSkgeyBfLmxhYmVsID0gb3BbMV07IGJyZWFrOyB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gNiAmJiBfLmxhYmVsIDwgdFsxXSkgeyBfLmxhYmVsID0gdFsxXTsgdCA9IG9wOyBicmVhazsgfVxuICAgICAgICAgICAgICAgICAgICBpZiAodCAmJiBfLmxhYmVsIDwgdFsyXSkgeyBfLmxhYmVsID0gdFsyXTsgXy5vcHMucHVzaChvcCk7IGJyZWFrOyB9XG4gICAgICAgICAgICAgICAgICAgIGlmICh0WzJdKSBfLm9wcy5wb3AoKTtcbiAgICAgICAgICAgICAgICAgICAgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG9wID0gYm9keS5jYWxsKHRoaXNBcmcsIF8pO1xuICAgICAgICB9IGNhdGNoIChlKSB7IG9wID0gWzYsIGVdOyB5ID0gMDsgfSBmaW5hbGx5IHsgZiA9IHQgPSAwOyB9XG4gICAgICAgIGlmIChvcFswXSAmIDUpIHRocm93IG9wWzFdOyByZXR1cm4geyB2YWx1ZTogb3BbMF0gPyBvcFsxXSA6IHZvaWQgMCwgZG9uZTogdHJ1ZSB9O1xuICAgIH1cbn07XG52YXIgX19pbXBvcnREZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydERlZmF1bHQpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICByZXR1cm4gKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgPyBtb2QgOiB7IFwiZGVmYXVsdFwiOiBtb2QgfTtcbn07XG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuZXhwb3J0cy5Db250YWN0U2VydmljZSA9IHZvaWQgMDtcbnZhciB0c3lyaW5nZV8xID0gcmVxdWlyZShcInRzeXJpbmdlXCIpO1xudmFyIHRva2VuXzEgPSByZXF1aXJlKFwiLi90b2tlblwiKTtcbnZhciBheGlvc18xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJheGlvc1wiKSk7XG52YXIgY29udGFjdF8xID0gcmVxdWlyZShcIi4uL21vZGVsL2NvbnRhY3RcIik7XG52YXIgQ29udGFjdFNlcnZpY2UgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gQ29udGFjdFNlcnZpY2UodG9rZW4pIHtcbiAgICAgICAgdGhpcy50b2tlbiA9IHRva2VuO1xuICAgIH1cbiAgICBDb250YWN0U2VydmljZS5wcm90b3R5cGUuY3JlYXRlQ29udGFjdCA9IGZ1bmN0aW9uIChjb250YWN0KSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIF9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfYikge1xuICAgICAgICAgICAgICAgIHN3aXRjaCAoX2IubGFiZWwpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAwOiByZXR1cm4gWzQgLyp5aWVsZCovLCBheGlvc18xW1wiZGVmYXVsdFwiXS5wb3N0KCcvYXBwcy9hcGkvY29udGFjdC9jcmVhdGUnLCB7ICdjb250YWN0JzogY29udGFjdCB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQXV0aG9yaXphdGlvbic6ICdCZWFyZXIgJyArICgoX2EgPSB0aGlzLnRva2VuKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuY3VycmVudFRva2VuKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0pLnRoZW4oZnVuY3Rpb24gKHJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlLmRhdGE7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KV07XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMTogcmV0dXJuIFsyIC8qcmV0dXJuKi8sIF9iLnNlbnQoKV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgQ29udGFjdFNlcnZpY2UucHJvdG90eXBlLnVwZGF0ZUNvbnRhY3QgPSBmdW5jdGlvbiAoY29udGFjdCkge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBfX2dlbmVyYXRvcih0aGlzLCBmdW5jdGlvbiAoX2IpIHtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKF9iLmxhYmVsKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMDogcmV0dXJuIFs0IC8qeWllbGQqLywgYXhpb3NfMVtcImRlZmF1bHRcIl0ucHV0KCcvYXBwcy9hcGkvY29udGFjdC91cGRhdGUvJyArIGNvbnRhY3QudXVpZCwgeyAnY29udGFjdCc6IGNvbnRhY3QgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0F1dGhvcml6YXRpb24nOiAnQmVhcmVyICcgKyAoKF9hID0gdGhpcy50b2tlbikgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmN1cnJlbnRUb2tlbilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9KS50aGVuKGZ1bmN0aW9uIChyZXNwb25zZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXNwb25zZS5kYXRhO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSldO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDE6IHJldHVybiBbMiAvKnJldHVybiovLCBfYi5zZW50KCldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIENvbnRhY3RTZXJ2aWNlLnByb3RvdHlwZS5nZXRDb250YWN0cyA9IGZ1bmN0aW9uIChzZWFyY2hRdWVyeSwgcGFnZSwgc2hvcCkge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBfX2dlbmVyYXRvcih0aGlzLCBmdW5jdGlvbiAoX2IpIHtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKF9iLmxhYmVsKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMDogcmV0dXJuIFs0IC8qeWllbGQqLywgYXhpb3NfMVtcImRlZmF1bHRcIl0uZ2V0KCcvYXBwcy9hcGkvY29udGFjdC9hbGxieXNob3AvJyArIHNob3AudXVpZCArICc/dGVybT0nICsgc2VhcmNoUXVlcnkgKyAnJnBhZ2U9JyArIHBhZ2UsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdBdXRob3JpemF0aW9uJzogJ0JlYXJlciAnICsgKChfYSA9IHRoaXMudG9rZW4pID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5jdXJyZW50VG9rZW4pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSkudGhlbihmdW5jdGlvbiAocmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzcG9uc2UuZGF0YS5kYXRhLm1hcChmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29udGFjdCA9IG5ldyBjb250YWN0XzEuQ29udGFjdDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFjdC5wYXJzZUZyb21Kc29uKHsgY29udGFjdDogaXRlbSB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRhY3Q7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KV07XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMTogcmV0dXJuIFsyIC8qcmV0dXJuKi8sIF9iLnNlbnQoKV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgQ29udGFjdFNlcnZpY2UgPSBfX2RlY29yYXRlKFtcbiAgICAgICAgKDAsIHRzeXJpbmdlXzEuc2luZ2xldG9uKSgpLFxuICAgICAgICAoMCwgdHN5cmluZ2VfMS5hdXRvSW5qZWN0YWJsZSkoKSxcbiAgICAgICAgX19tZXRhZGF0YShcImRlc2lnbjpwYXJhbXR5cGVzXCIsIFt0b2tlbl8xLlRva2VuXSlcbiAgICBdLCBDb250YWN0U2VydmljZSk7XG4gICAgcmV0dXJuIENvbnRhY3RTZXJ2aWNlO1xufSgpKTtcbmV4cG9ydHMuQ29udGFjdFNlcnZpY2UgPSBDb250YWN0U2VydmljZTtcbiIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9fZGVjb3JhdGUgPSAodGhpcyAmJiB0aGlzLl9fZGVjb3JhdGUpIHx8IGZ1bmN0aW9uIChkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYykge1xuICAgIHZhciBjID0gYXJndW1lbnRzLmxlbmd0aCwgciA9IGMgPCAzID8gdGFyZ2V0IDogZGVzYyA9PT0gbnVsbCA/IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KSA6IGRlc2MsIGQ7XG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0LmRlY29yYXRlID09PSBcImZ1bmN0aW9uXCIpIHIgPSBSZWZsZWN0LmRlY29yYXRlKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKTtcbiAgICBlbHNlIGZvciAodmFyIGkgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSBpZiAoZCA9IGRlY29yYXRvcnNbaV0pIHIgPSAoYyA8IDMgPyBkKHIpIDogYyA+IDMgPyBkKHRhcmdldCwga2V5LCByKSA6IGQodGFyZ2V0LCBrZXkpKSB8fCByO1xuICAgIHJldHVybiBjID4gMyAmJiByICYmIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgciksIHI7XG59O1xudmFyIF9fYXdhaXRlciA9ICh0aGlzICYmIHRoaXMuX19hd2FpdGVyKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgICB9KTtcbn07XG52YXIgX19nZW5lcmF0b3IgPSAodGhpcyAmJiB0aGlzLl9fZ2VuZXJhdG9yKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgYm9keSkge1xuICAgIHZhciBfID0geyBsYWJlbDogMCwgc2VudDogZnVuY3Rpb24oKSB7IGlmICh0WzBdICYgMSkgdGhyb3cgdFsxXTsgcmV0dXJuIHRbMV07IH0sIHRyeXM6IFtdLCBvcHM6IFtdIH0sIGYsIHksIHQsIGc7XG4gICAgcmV0dXJuIGcgPSB7IG5leHQ6IHZlcmIoMCksIFwidGhyb3dcIjogdmVyYigxKSwgXCJyZXR1cm5cIjogdmVyYigyKSB9LCB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgKGdbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhpczsgfSksIGc7XG4gICAgZnVuY3Rpb24gdmVyYihuKSB7IHJldHVybiBmdW5jdGlvbiAodikgeyByZXR1cm4gc3RlcChbbiwgdl0pOyB9OyB9XG4gICAgZnVuY3Rpb24gc3RlcChvcCkge1xuICAgICAgICBpZiAoZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy5cIik7XG4gICAgICAgIHdoaWxlIChfKSB0cnkge1xuICAgICAgICAgICAgaWYgKGYgPSAxLCB5ICYmICh0ID0gb3BbMF0gJiAyID8geVtcInJldHVyblwiXSA6IG9wWzBdID8geVtcInRocm93XCJdIHx8ICgodCA9IHlbXCJyZXR1cm5cIl0pICYmIHQuY2FsbCh5KSwgMCkgOiB5Lm5leHQpICYmICEodCA9IHQuY2FsbCh5LCBvcFsxXSkpLmRvbmUpIHJldHVybiB0O1xuICAgICAgICAgICAgaWYgKHkgPSAwLCB0KSBvcCA9IFtvcFswXSAmIDIsIHQudmFsdWVdO1xuICAgICAgICAgICAgc3dpdGNoIChvcFswXSkge1xuICAgICAgICAgICAgICAgIGNhc2UgMDogY2FzZSAxOiB0ID0gb3A7IGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgNDogXy5sYWJlbCsrOyByZXR1cm4geyB2YWx1ZTogb3BbMV0sIGRvbmU6IGZhbHNlIH07XG4gICAgICAgICAgICAgICAgY2FzZSA1OiBfLmxhYmVsKys7IHkgPSBvcFsxXTsgb3AgPSBbMF07IGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGNhc2UgNzogb3AgPSBfLm9wcy5wb3AoKTsgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICBpZiAoISh0ID0gXy50cnlzLCB0ID0gdC5sZW5ndGggPiAwICYmIHRbdC5sZW5ndGggLSAxXSkgJiYgKG9wWzBdID09PSA2IHx8IG9wWzBdID09PSAyKSkgeyBfID0gMDsgY29udGludWU7IH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSAzICYmICghdCB8fCAob3BbMV0gPiB0WzBdICYmIG9wWzFdIDwgdFszXSkpKSB7IF8ubGFiZWwgPSBvcFsxXTsgYnJlYWs7IH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSA2ICYmIF8ubGFiZWwgPCB0WzFdKSB7IF8ubGFiZWwgPSB0WzFdOyB0ID0gb3A7IGJyZWFrOyB9XG4gICAgICAgICAgICAgICAgICAgIGlmICh0ICYmIF8ubGFiZWwgPCB0WzJdKSB7IF8ubGFiZWwgPSB0WzJdOyBfLm9wcy5wdXNoKG9wKTsgYnJlYWs7IH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHRbMl0pIF8ub3BzLnBvcCgpO1xuICAgICAgICAgICAgICAgICAgICBfLnRyeXMucG9wKCk7IGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgb3AgPSBib2R5LmNhbGwodGhpc0FyZywgXyk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHsgb3AgPSBbNiwgZV07IHkgPSAwOyB9IGZpbmFsbHkgeyBmID0gdCA9IDA7IH1cbiAgICAgICAgaWYgKG9wWzBdICYgNSkgdGhyb3cgb3BbMV07IHJldHVybiB7IHZhbHVlOiBvcFswXSA/IG9wWzFdIDogdm9pZCAwLCBkb25lOiB0cnVlIH07XG4gICAgfVxufTtcbnZhciBfX2ltcG9ydERlZmF1bHQgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0RGVmYXVsdCkgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIHJldHVybiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSA/IG1vZCA6IHsgXCJkZWZhdWx0XCI6IG1vZCB9O1xufTtcbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5leHBvcnRzLkNvdW50cnlTZXJ2aWNlID0gdm9pZCAwO1xudmFyIHRzeXJpbmdlXzEgPSByZXF1aXJlKFwidHN5cmluZ2VcIik7XG52YXIgYXhpb3NfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiYXhpb3NcIikpO1xudmFyIGNvdW50cnlfMSA9IHJlcXVpcmUoXCIuLi9tb2RlbC9jb3VudHJ5XCIpO1xudmFyIENvdW50cnlTZXJ2aWNlID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIENvdW50cnlTZXJ2aWNlKCkge1xuICAgIH1cbiAgICBDb3VudHJ5U2VydmljZS5wcm90b3R5cGUuZ2V0Q291bnRyeSA9IGZ1bmN0aW9uIChzaG9wKSB7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBfX2dlbmVyYXRvcih0aGlzLCBmdW5jdGlvbiAoX2EpIHtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKF9hLmxhYmVsKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMDogcmV0dXJuIFs0IC8qeWllbGQqLywgYXhpb3NfMVtcImRlZmF1bHRcIl0uZ2V0KCcvYXBwcy9hcGkvY291bnRyeS9ieS9zaG9wLycgKyBzaG9wLnV1aWQpLnRoZW4oZnVuY3Rpb24gKHJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlLmRhdGEuZGF0YS5tYXAoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvdW50cnkgPSBuZXcgY291bnRyeV8xLkNvdW50cnkoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnRyeS5wYXJzZUZyb21Kc29uKGl0ZW0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY291bnRyeTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXTtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAxOiByZXR1cm4gWzIgLypyZXR1cm4qLywgX2Euc2VudCgpXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBDb3VudHJ5U2VydmljZSA9IF9fZGVjb3JhdGUoW1xuICAgICAgICAoMCwgdHN5cmluZ2VfMS5zaW5nbGV0b24pKCksXG4gICAgICAgICgwLCB0c3lyaW5nZV8xLmF1dG9JbmplY3RhYmxlKSgpXG4gICAgXSwgQ291bnRyeVNlcnZpY2UpO1xuICAgIHJldHVybiBDb3VudHJ5U2VydmljZTtcbn0oKSk7XG5leHBvcnRzLkNvdW50cnlTZXJ2aWNlID0gQ291bnRyeVNlcnZpY2U7XG4iLCJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2RlY29yYXRlID0gKHRoaXMgJiYgdGhpcy5fX2RlY29yYXRlKSB8fCBmdW5jdGlvbiAoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpIHtcbiAgICB2YXIgYyA9IGFyZ3VtZW50cy5sZW5ndGgsIHIgPSBjIDwgMyA/IHRhcmdldCA6IGRlc2MgPT09IG51bGwgPyBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGtleSkgOiBkZXNjLCBkO1xuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5kZWNvcmF0ZSA9PT0gXCJmdW5jdGlvblwiKSByID0gUmVmbGVjdC5kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYyk7XG4gICAgZWxzZSBmb3IgKHZhciBpID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgaWYgKGQgPSBkZWNvcmF0b3JzW2ldKSByID0gKGMgPCAzID8gZChyKSA6IGMgPiAzID8gZCh0YXJnZXQsIGtleSwgcikgOiBkKHRhcmdldCwga2V5KSkgfHwgcjtcbiAgICByZXR1cm4gYyA+IDMgJiYgciAmJiBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHIpLCByO1xufTtcbnZhciBfX21ldGFkYXRhID0gKHRoaXMgJiYgdGhpcy5fX21ldGFkYXRhKSB8fCBmdW5jdGlvbiAoaywgdikge1xuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5tZXRhZGF0YSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gUmVmbGVjdC5tZXRhZGF0YShrLCB2KTtcbn07XG52YXIgX19hd2FpdGVyID0gKHRoaXMgJiYgdGhpcy5fX2F3YWl0ZXIpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcbiAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xuICAgIH0pO1xufTtcbnZhciBfX2dlbmVyYXRvciA9ICh0aGlzICYmIHRoaXMuX19nZW5lcmF0b3IpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBib2R5KSB7XG4gICAgdmFyIF8gPSB7IGxhYmVsOiAwLCBzZW50OiBmdW5jdGlvbigpIHsgaWYgKHRbMF0gJiAxKSB0aHJvdyB0WzFdOyByZXR1cm4gdFsxXTsgfSwgdHJ5czogW10sIG9wczogW10gfSwgZiwgeSwgdCwgZztcbiAgICByZXR1cm4gZyA9IHsgbmV4dDogdmVyYigwKSwgXCJ0aHJvd1wiOiB2ZXJiKDEpLCBcInJldHVyblwiOiB2ZXJiKDIpIH0sIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiAoZ1tTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzOyB9KSwgZztcbiAgICBmdW5jdGlvbiB2ZXJiKG4pIHsgcmV0dXJuIGZ1bmN0aW9uICh2KSB7IHJldHVybiBzdGVwKFtuLCB2XSk7IH07IH1cbiAgICBmdW5jdGlvbiBzdGVwKG9wKSB7XG4gICAgICAgIGlmIChmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLlwiKTtcbiAgICAgICAgd2hpbGUgKF8pIHRyeSB7XG4gICAgICAgICAgICBpZiAoZiA9IDEsIHkgJiYgKHQgPSBvcFswXSAmIDIgPyB5W1wicmV0dXJuXCJdIDogb3BbMF0gPyB5W1widGhyb3dcIl0gfHwgKCh0ID0geVtcInJldHVyblwiXSkgJiYgdC5jYWxsKHkpLCAwKSA6IHkubmV4dCkgJiYgISh0ID0gdC5jYWxsKHksIG9wWzFdKSkuZG9uZSkgcmV0dXJuIHQ7XG4gICAgICAgICAgICBpZiAoeSA9IDAsIHQpIG9wID0gW29wWzBdICYgMiwgdC52YWx1ZV07XG4gICAgICAgICAgICBzd2l0Y2ggKG9wWzBdKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAwOiBjYXNlIDE6IHQgPSBvcDsgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSA0OiBfLmxhYmVsKys7IHJldHVybiB7IHZhbHVlOiBvcFsxXSwgZG9uZTogZmFsc2UgfTtcbiAgICAgICAgICAgICAgICBjYXNlIDU6IF8ubGFiZWwrKzsgeSA9IG9wWzFdOyBvcCA9IFswXTsgY29udGludWU7XG4gICAgICAgICAgICAgICAgY2FzZSA3OiBvcCA9IF8ub3BzLnBvcCgpOyBfLnRyeXMucG9wKCk7IGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIGlmICghKHQgPSBfLnRyeXMsIHQgPSB0Lmxlbmd0aCA+IDAgJiYgdFt0Lmxlbmd0aCAtIDFdKSAmJiAob3BbMF0gPT09IDYgfHwgb3BbMF0gPT09IDIpKSB7IF8gPSAwOyBjb250aW51ZTsgfVxuICAgICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDMgJiYgKCF0IHx8IChvcFsxXSA+IHRbMF0gJiYgb3BbMV0gPCB0WzNdKSkpIHsgXy5sYWJlbCA9IG9wWzFdOyBicmVhazsgfVxuICAgICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDYgJiYgXy5sYWJlbCA8IHRbMV0pIHsgXy5sYWJlbCA9IHRbMV07IHQgPSBvcDsgYnJlYWs7IH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHQgJiYgXy5sYWJlbCA8IHRbMl0pIHsgXy5sYWJlbCA9IHRbMl07IF8ub3BzLnB1c2gob3ApOyBicmVhazsgfVxuICAgICAgICAgICAgICAgICAgICBpZiAodFsyXSkgXy5vcHMucG9wKCk7XG4gICAgICAgICAgICAgICAgICAgIF8udHJ5cy5wb3AoKTsgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvcCA9IGJvZHkuY2FsbCh0aGlzQXJnLCBfKTtcbiAgICAgICAgfSBjYXRjaCAoZSkgeyBvcCA9IFs2LCBlXTsgeSA9IDA7IH0gZmluYWxseSB7IGYgPSB0ID0gMDsgfVxuICAgICAgICBpZiAob3BbMF0gJiA1KSB0aHJvdyBvcFsxXTsgcmV0dXJuIHsgdmFsdWU6IG9wWzBdID8gb3BbMV0gOiB2b2lkIDAsIGRvbmU6IHRydWUgfTtcbiAgICB9XG59O1xudmFyIF9faW1wb3J0RGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnREZWZhdWx0KSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgcmV0dXJuIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpID8gbW9kIDogeyBcImRlZmF1bHRcIjogbW9kIH07XG59O1xuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbmV4cG9ydHMuT3JkZXJTZXJ2aWNlID0gdm9pZCAwO1xudmFyIHRzeXJpbmdlXzEgPSByZXF1aXJlKFwidHN5cmluZ2VcIik7XG52YXIgdG9rZW5fMSA9IHJlcXVpcmUoXCIuL3Rva2VuXCIpO1xudmFyIGF4aW9zXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcImF4aW9zXCIpKTtcbnZhciBvcmRlcl8xID0gcmVxdWlyZShcIi4uL21vZGVsL29yZGVyXCIpO1xudmFyIE9yZGVyU2VydmljZSA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBPcmRlclNlcnZpY2UodG9rZW4pIHtcbiAgICAgICAgdGhpcy50b2tlbiA9IHRva2VuO1xuICAgIH1cbiAgICBPcmRlclNlcnZpY2UucHJvdG90eXBlLmdldE9yZGVyID0gZnVuY3Rpb24gKHV1aWQpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gX19nZW5lcmF0b3IodGhpcywgZnVuY3Rpb24gKF9iKSB7XG4gICAgICAgICAgICAgICAgc3dpdGNoIChfYi5sYWJlbCkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDA6IHJldHVybiBbNCAvKnlpZWxkKi8sIGF4aW9zXzFbXCJkZWZhdWx0XCJdLnBvc3QoJy9hcHBzL2FwaS9vcmRlci9nZXRvbmVieXV1aWQnLCB7IHV1aWQ6IHV1aWQgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0F1dGhvcml6YXRpb24nOiAnQmVhcmVyICcgKyAoKF9hID0gdGhpcy50b2tlbikgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmN1cnJlbnRUb2tlbilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9KS50aGVuKGZ1bmN0aW9uIChyZXNwb25zZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvcmRlciA9IG5ldyBvcmRlcl8xLk9yZGVyKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JkZXIucGFyc2VGcm9tSnNvbihyZXNwb25zZS5kYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb3JkZXI7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KV07XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMTogcmV0dXJuIFsyIC8qcmV0dXJuKi8sIF9iLnNlbnQoKV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgO1xuICAgIE9yZGVyU2VydmljZS5wcm90b3R5cGUuc2F2ZU9yZGVyID0gZnVuY3Rpb24gKG9yZGVyKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIF9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfYikge1xuICAgICAgICAgICAgICAgIHN3aXRjaCAoX2IubGFiZWwpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAwOiByZXR1cm4gWzQgLyp5aWVsZCovLCBheGlvc18xW1wiZGVmYXVsdFwiXS5wb3N0KCcvYXBwcy9hcGkvb3JkZXIvY3JlYXRlJywgb3JkZXIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdBdXRob3JpemF0aW9uJzogJ0JlYXJlciAnICsgKChfYSA9IHRoaXMudG9rZW4pID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5jdXJyZW50VG9rZW4pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSkudGhlbihmdW5jdGlvbiAocmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzcG9uc2UuZGF0YTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXTtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAxOiByZXR1cm4gWzIgLypyZXR1cm4qLywgX2Iuc2VudCgpXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBPcmRlclNlcnZpY2UucHJvdG90eXBlLmNhbGNPcmRlciA9IGZ1bmN0aW9uIChvcmRlcikge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBfX2dlbmVyYXRvcih0aGlzLCBmdW5jdGlvbiAoX2IpIHtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKF9iLmxhYmVsKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMDogcmV0dXJuIFs0IC8qeWllbGQqLywgYXhpb3NfMVtcImRlZmF1bHRcIl0ucG9zdCgnL2FwcHMvYXBpL29yZGVyL2NhbGMnLCBvcmRlciwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0F1dGhvcml6YXRpb24nOiAnQmVhcmVyICcgKyAoKF9hID0gdGhpcy50b2tlbikgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmN1cnJlbnRUb2tlbilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9KS50aGVuKGZ1bmN0aW9uIChyZXNwb25zZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXNwb25zZS5kYXRhO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSldO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDE6IHJldHVybiBbMiAvKnJldHVybiovLCBfYi5zZW50KCldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIE9yZGVyU2VydmljZSA9IF9fZGVjb3JhdGUoW1xuICAgICAgICAoMCwgdHN5cmluZ2VfMS5zaW5nbGV0b24pKCksXG4gICAgICAgICgwLCB0c3lyaW5nZV8xLmF1dG9JbmplY3RhYmxlKSgpLFxuICAgICAgICBfX21ldGFkYXRhKFwiZGVzaWduOnBhcmFtdHlwZXNcIiwgW3Rva2VuXzEuVG9rZW5dKVxuICAgIF0sIE9yZGVyU2VydmljZSk7XG4gICAgcmV0dXJuIE9yZGVyU2VydmljZTtcbn0oKSk7XG5leHBvcnRzLk9yZGVyU2VydmljZSA9IE9yZGVyU2VydmljZTtcbiIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9fZGVjb3JhdGUgPSAodGhpcyAmJiB0aGlzLl9fZGVjb3JhdGUpIHx8IGZ1bmN0aW9uIChkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYykge1xuICAgIHZhciBjID0gYXJndW1lbnRzLmxlbmd0aCwgciA9IGMgPCAzID8gdGFyZ2V0IDogZGVzYyA9PT0gbnVsbCA/IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KSA6IGRlc2MsIGQ7XG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0LmRlY29yYXRlID09PSBcImZ1bmN0aW9uXCIpIHIgPSBSZWZsZWN0LmRlY29yYXRlKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKTtcbiAgICBlbHNlIGZvciAodmFyIGkgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSBpZiAoZCA9IGRlY29yYXRvcnNbaV0pIHIgPSAoYyA8IDMgPyBkKHIpIDogYyA+IDMgPyBkKHRhcmdldCwga2V5LCByKSA6IGQodGFyZ2V0LCBrZXkpKSB8fCByO1xuICAgIHJldHVybiBjID4gMyAmJiByICYmIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgciksIHI7XG59O1xudmFyIF9fbWV0YWRhdGEgPSAodGhpcyAmJiB0aGlzLl9fbWV0YWRhdGEpIHx8IGZ1bmN0aW9uIChrLCB2KSB7XG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0Lm1ldGFkYXRhID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiBSZWZsZWN0Lm1ldGFkYXRhKGssIHYpO1xufTtcbnZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gICAgfSk7XG59O1xudmFyIF9fZ2VuZXJhdG9yID0gKHRoaXMgJiYgdGhpcy5fX2dlbmVyYXRvcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIGJvZHkpIHtcbiAgICB2YXIgXyA9IHsgbGFiZWw6IDAsIHNlbnQ6IGZ1bmN0aW9uKCkgeyBpZiAodFswXSAmIDEpIHRocm93IHRbMV07IHJldHVybiB0WzFdOyB9LCB0cnlzOiBbXSwgb3BzOiBbXSB9LCBmLCB5LCB0LCBnO1xuICAgIHJldHVybiBnID0geyBuZXh0OiB2ZXJiKDApLCBcInRocm93XCI6IHZlcmIoMSksIFwicmV0dXJuXCI6IHZlcmIoMikgfSwgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIChnW1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbigpIHsgcmV0dXJuIHRoaXM7IH0pLCBnO1xuICAgIGZ1bmN0aW9uIHZlcmIobikgeyByZXR1cm4gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIHN0ZXAoW24sIHZdKTsgfTsgfVxuICAgIGZ1bmN0aW9uIHN0ZXAob3ApIHtcbiAgICAgICAgaWYgKGYpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuXCIpO1xuICAgICAgICB3aGlsZSAoXykgdHJ5IHtcbiAgICAgICAgICAgIGlmIChmID0gMSwgeSAmJiAodCA9IG9wWzBdICYgMiA/IHlbXCJyZXR1cm5cIl0gOiBvcFswXSA/IHlbXCJ0aHJvd1wiXSB8fCAoKHQgPSB5W1wicmV0dXJuXCJdKSAmJiB0LmNhbGwoeSksIDApIDogeS5uZXh0KSAmJiAhKHQgPSB0LmNhbGwoeSwgb3BbMV0pKS5kb25lKSByZXR1cm4gdDtcbiAgICAgICAgICAgIGlmICh5ID0gMCwgdCkgb3AgPSBbb3BbMF0gJiAyLCB0LnZhbHVlXTtcbiAgICAgICAgICAgIHN3aXRjaCAob3BbMF0pIHtcbiAgICAgICAgICAgICAgICBjYXNlIDA6IGNhc2UgMTogdCA9IG9wOyBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIDQ6IF8ubGFiZWwrKzsgcmV0dXJuIHsgdmFsdWU6IG9wWzFdLCBkb25lOiBmYWxzZSB9O1xuICAgICAgICAgICAgICAgIGNhc2UgNTogXy5sYWJlbCsrOyB5ID0gb3BbMV07IG9wID0gWzBdOyBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBjYXNlIDc6IG9wID0gXy5vcHMucG9wKCk7IF8udHJ5cy5wb3AoKTsgY29udGludWU7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEodCA9IF8udHJ5cywgdCA9IHQubGVuZ3RoID4gMCAmJiB0W3QubGVuZ3RoIC0gMV0pICYmIChvcFswXSA9PT0gNiB8fCBvcFswXSA9PT0gMikpIHsgXyA9IDA7IGNvbnRpbnVlOyB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gMyAmJiAoIXQgfHwgKG9wWzFdID4gdFswXSAmJiBvcFsxXSA8IHRbM10pKSkgeyBfLmxhYmVsID0gb3BbMV07IGJyZWFrOyB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gNiAmJiBfLmxhYmVsIDwgdFsxXSkgeyBfLmxhYmVsID0gdFsxXTsgdCA9IG9wOyBicmVhazsgfVxuICAgICAgICAgICAgICAgICAgICBpZiAodCAmJiBfLmxhYmVsIDwgdFsyXSkgeyBfLmxhYmVsID0gdFsyXTsgXy5vcHMucHVzaChvcCk7IGJyZWFrOyB9XG4gICAgICAgICAgICAgICAgICAgIGlmICh0WzJdKSBfLm9wcy5wb3AoKTtcbiAgICAgICAgICAgICAgICAgICAgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG9wID0gYm9keS5jYWxsKHRoaXNBcmcsIF8pO1xuICAgICAgICB9IGNhdGNoIChlKSB7IG9wID0gWzYsIGVdOyB5ID0gMDsgfSBmaW5hbGx5IHsgZiA9IHQgPSAwOyB9XG4gICAgICAgIGlmIChvcFswXSAmIDUpIHRocm93IG9wWzFdOyByZXR1cm4geyB2YWx1ZTogb3BbMF0gPyBvcFsxXSA6IHZvaWQgMCwgZG9uZTogdHJ1ZSB9O1xuICAgIH1cbn07XG52YXIgX19pbXBvcnREZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydERlZmF1bHQpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICByZXR1cm4gKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgPyBtb2QgOiB7IFwiZGVmYXVsdFwiOiBtb2QgfTtcbn07XG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuZXhwb3J0cy5QYXltZW50U2VydmljZSA9IHZvaWQgMDtcbnZhciB0c3lyaW5nZV8xID0gcmVxdWlyZShcInRzeXJpbmdlXCIpO1xudmFyIHRva2VuXzEgPSByZXF1aXJlKFwiLi90b2tlblwiKTtcbnZhciBheGlvc18xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJheGlvc1wiKSk7XG52YXIgcGF5bWVudF8xID0gcmVxdWlyZShcIi4uL21vZGVsL3BheW1lbnRcIik7XG52YXIgUGF5bWVudFNlcnZpY2UgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gUGF5bWVudFNlcnZpY2UodG9rZW4pIHtcbiAgICAgICAgdGhpcy50b2tlbiA9IHRva2VuO1xuICAgIH1cbiAgICBQYXltZW50U2VydmljZS5wcm90b3R5cGUuZ2V0UGF5bWVudHMgPSBmdW5jdGlvbiAoc2hvcCkge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBfX2dlbmVyYXRvcih0aGlzLCBmdW5jdGlvbiAoX2IpIHtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKF9iLmxhYmVsKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMDogcmV0dXJuIFs0IC8qeWllbGQqLywgYXhpb3NfMVtcImRlZmF1bHRcIl0uZ2V0KCcvYXBwcy9hcGkvcGF5bWVudC9ieS9zaG9wLycgKyBzaG9wLnV1aWQsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdBdXRob3JpemF0aW9uJzogJ0JlYXJlciAnICsgKChfYSA9IHRoaXMudG9rZW4pID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5jdXJyZW50VG9rZW4pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSkudGhlbihmdW5jdGlvbiAocmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzcG9uc2UuZGF0YS5kYXRhLm1hcChmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcGF5bWVudCA9IG5ldyBwYXltZW50XzEuUGF5bWVudCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXltZW50LnVpZCA9IGl0ZW0udWlkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXltZW50LnRpdGxlID0gaXRlbS50aXRsZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF5bWVudC51dWlkID0gaXRlbS51dWlkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcGF5bWVudDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXTtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAxOiByZXR1cm4gWzIgLypyZXR1cm4qLywgX2Iuc2VudCgpXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBQYXltZW50U2VydmljZSA9IF9fZGVjb3JhdGUoW1xuICAgICAgICAoMCwgdHN5cmluZ2VfMS5zaW5nbGV0b24pKCksXG4gICAgICAgICgwLCB0c3lyaW5nZV8xLmF1dG9JbmplY3RhYmxlKSgpLFxuICAgICAgICBfX21ldGFkYXRhKFwiZGVzaWduOnBhcmFtdHlwZXNcIiwgW3Rva2VuXzEuVG9rZW5dKVxuICAgIF0sIFBheW1lbnRTZXJ2aWNlKTtcbiAgICByZXR1cm4gUGF5bWVudFNlcnZpY2U7XG59KCkpO1xuZXhwb3J0cy5QYXltZW50U2VydmljZSA9IFBheW1lbnRTZXJ2aWNlO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19kZWNvcmF0ZSA9ICh0aGlzICYmIHRoaXMuX19kZWNvcmF0ZSkgfHwgZnVuY3Rpb24gKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKSB7XG4gICAgdmFyIGMgPSBhcmd1bWVudHMubGVuZ3RoLCByID0gYyA8IDMgPyB0YXJnZXQgOiBkZXNjID09PSBudWxsID8gZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpIDogZGVzYywgZDtcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QuZGVjb3JhdGUgPT09IFwiZnVuY3Rpb25cIikgciA9IFJlZmxlY3QuZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpO1xuICAgIGVsc2UgZm9yICh2YXIgaSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIGlmIChkID0gZGVjb3JhdG9yc1tpXSkgciA9IChjIDwgMyA/IGQocikgOiBjID4gMyA/IGQodGFyZ2V0LCBrZXksIHIpIDogZCh0YXJnZXQsIGtleSkpIHx8IHI7XG4gICAgcmV0dXJuIGMgPiAzICYmIHIgJiYgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCByKSwgcjtcbn07XG52YXIgX19tZXRhZGF0YSA9ICh0aGlzICYmIHRoaXMuX19tZXRhZGF0YSkgfHwgZnVuY3Rpb24gKGssIHYpIHtcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QubWV0YWRhdGEgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIFJlZmxlY3QubWV0YWRhdGEoaywgdik7XG59O1xudmFyIF9fYXdhaXRlciA9ICh0aGlzICYmIHRoaXMuX19hd2FpdGVyKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgICB9KTtcbn07XG52YXIgX19nZW5lcmF0b3IgPSAodGhpcyAmJiB0aGlzLl9fZ2VuZXJhdG9yKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgYm9keSkge1xuICAgIHZhciBfID0geyBsYWJlbDogMCwgc2VudDogZnVuY3Rpb24oKSB7IGlmICh0WzBdICYgMSkgdGhyb3cgdFsxXTsgcmV0dXJuIHRbMV07IH0sIHRyeXM6IFtdLCBvcHM6IFtdIH0sIGYsIHksIHQsIGc7XG4gICAgcmV0dXJuIGcgPSB7IG5leHQ6IHZlcmIoMCksIFwidGhyb3dcIjogdmVyYigxKSwgXCJyZXR1cm5cIjogdmVyYigyKSB9LCB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgKGdbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhpczsgfSksIGc7XG4gICAgZnVuY3Rpb24gdmVyYihuKSB7IHJldHVybiBmdW5jdGlvbiAodikgeyByZXR1cm4gc3RlcChbbiwgdl0pOyB9OyB9XG4gICAgZnVuY3Rpb24gc3RlcChvcCkge1xuICAgICAgICBpZiAoZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy5cIik7XG4gICAgICAgIHdoaWxlIChfKSB0cnkge1xuICAgICAgICAgICAgaWYgKGYgPSAxLCB5ICYmICh0ID0gb3BbMF0gJiAyID8geVtcInJldHVyblwiXSA6IG9wWzBdID8geVtcInRocm93XCJdIHx8ICgodCA9IHlbXCJyZXR1cm5cIl0pICYmIHQuY2FsbCh5KSwgMCkgOiB5Lm5leHQpICYmICEodCA9IHQuY2FsbCh5LCBvcFsxXSkpLmRvbmUpIHJldHVybiB0O1xuICAgICAgICAgICAgaWYgKHkgPSAwLCB0KSBvcCA9IFtvcFswXSAmIDIsIHQudmFsdWVdO1xuICAgICAgICAgICAgc3dpdGNoIChvcFswXSkge1xuICAgICAgICAgICAgICAgIGNhc2UgMDogY2FzZSAxOiB0ID0gb3A7IGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgNDogXy5sYWJlbCsrOyByZXR1cm4geyB2YWx1ZTogb3BbMV0sIGRvbmU6IGZhbHNlIH07XG4gICAgICAgICAgICAgICAgY2FzZSA1OiBfLmxhYmVsKys7IHkgPSBvcFsxXTsgb3AgPSBbMF07IGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGNhc2UgNzogb3AgPSBfLm9wcy5wb3AoKTsgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICBpZiAoISh0ID0gXy50cnlzLCB0ID0gdC5sZW5ndGggPiAwICYmIHRbdC5sZW5ndGggLSAxXSkgJiYgKG9wWzBdID09PSA2IHx8IG9wWzBdID09PSAyKSkgeyBfID0gMDsgY29udGludWU7IH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSAzICYmICghdCB8fCAob3BbMV0gPiB0WzBdICYmIG9wWzFdIDwgdFszXSkpKSB7IF8ubGFiZWwgPSBvcFsxXTsgYnJlYWs7IH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSA2ICYmIF8ubGFiZWwgPCB0WzFdKSB7IF8ubGFiZWwgPSB0WzFdOyB0ID0gb3A7IGJyZWFrOyB9XG4gICAgICAgICAgICAgICAgICAgIGlmICh0ICYmIF8ubGFiZWwgPCB0WzJdKSB7IF8ubGFiZWwgPSB0WzJdOyBfLm9wcy5wdXNoKG9wKTsgYnJlYWs7IH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHRbMl0pIF8ub3BzLnBvcCgpO1xuICAgICAgICAgICAgICAgICAgICBfLnRyeXMucG9wKCk7IGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgb3AgPSBib2R5LmNhbGwodGhpc0FyZywgXyk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHsgb3AgPSBbNiwgZV07IHkgPSAwOyB9IGZpbmFsbHkgeyBmID0gdCA9IDA7IH1cbiAgICAgICAgaWYgKG9wWzBdICYgNSkgdGhyb3cgb3BbMV07IHJldHVybiB7IHZhbHVlOiBvcFswXSA/IG9wWzFdIDogdm9pZCAwLCBkb25lOiB0cnVlIH07XG4gICAgfVxufTtcbnZhciBfX2ltcG9ydERlZmF1bHQgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0RGVmYXVsdCkgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIHJldHVybiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSA/IG1vZCA6IHsgXCJkZWZhdWx0XCI6IG1vZCB9O1xufTtcbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5leHBvcnRzLlByb2R1Y3RTZXJ2aWNlID0gdm9pZCAwO1xudmFyIHRzeXJpbmdlXzEgPSByZXF1aXJlKFwidHN5cmluZ2VcIik7XG52YXIgdG9rZW5fMSA9IHJlcXVpcmUoXCIuL3Rva2VuXCIpO1xudmFyIGF4aW9zXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcImF4aW9zXCIpKTtcbnZhciBwcm9kdWN0XzEgPSByZXF1aXJlKFwiLi4vbW9kZWwvcHJvZHVjdFwiKTtcbnZhciBQcm9kdWN0U2VydmljZSA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBQcm9kdWN0U2VydmljZSh0b2tlbikge1xuICAgICAgICB0aGlzLnRva2VuID0gdG9rZW47XG4gICAgfVxuICAgIFByb2R1Y3RTZXJ2aWNlLnByb3RvdHlwZS5nZXRQcm9kdWN0c0J5VGVybSA9IGZ1bmN0aW9uICh0ZXJtLCBzaG9wKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIF9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfYikge1xuICAgICAgICAgICAgICAgIHN3aXRjaCAoX2IubGFiZWwpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAwOiByZXR1cm4gWzQgLyp5aWVsZCovLCBheGlvc18xW1wiZGVmYXVsdFwiXS5nZXQoJy9hcHBzL2FwaS9wcm9kdWN0L2dldGFsbGJ5dGVybS8nICsgc2hvcC51dWlkICsgJy8nICsgdGVybSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0F1dGhvcml6YXRpb24nOiAnQmVhcmVyICcgKyAoKF9hID0gdGhpcy50b2tlbikgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmN1cnJlbnRUb2tlbilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9KS50aGVuKGZ1bmN0aW9uIChyZXNwb25zZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXNwb25zZS5kYXRhLmRhdGEubWFwKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwID0gbmV3IHByb2R1Y3RfMS5Qcm9kdWN0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHAuaWQgPSBpdGVtLmlkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwLnRpdGxlID0gaXRlbS50aXRsZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcC51dWlkID0gaXRlbS51dWlkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwLnNwZWNpYWxQcm9kdWN0VHlwZU9iamVjdC50eXAgPSBpdGVtLnR5cDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KV07XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMTogcmV0dXJuIFsyIC8qcmV0dXJuKi8sIF9iLnNlbnQoKV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgUHJvZHVjdFNlcnZpY2UucHJvdG90eXBlLmdldFByb2R1Y3RzID0gZnVuY3Rpb24gKHByb2R1Y3RHcm91cCkge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBfX2dlbmVyYXRvcih0aGlzLCBmdW5jdGlvbiAoX2IpIHtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKF9iLmxhYmVsKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMDogcmV0dXJuIFs0IC8qeWllbGQqLywgYXhpb3NfMVtcImRlZmF1bHRcIl0uZ2V0KCcvYXBwcy9hcGkvcHJvZHVjdC9nZXRhbGxieXByb2R1Y3Rncm91cC8nICsgcHJvZHVjdEdyb3VwLnV1aWQsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdBdXRob3JpemF0aW9uJzogJ0JlYXJlciAnICsgKChfYSA9IHRoaXMudG9rZW4pID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5jdXJyZW50VG9rZW4pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSkudGhlbihmdW5jdGlvbiAocmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzcG9uc2UuZGF0YS5kYXRhLm1hcChmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcCA9IG5ldyBwcm9kdWN0XzEuUHJvZHVjdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwLmlkID0gaXRlbS5pZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcC50aXRsZSA9IGl0ZW0udGl0bGU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHAudXVpZCA9IGl0ZW0udXVpZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcC5zcGVjaWFsUHJvZHVjdFR5cGVPYmplY3QudHlwID0gaXRlbS50eXA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSldO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDE6IHJldHVybiBbMiAvKnJldHVybiovLCBfYi5zZW50KCldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIFByb2R1Y3RTZXJ2aWNlLnByb3RvdHlwZS5nZXRBZGRQcm9kdWN0U2NoZW1hID0gZnVuY3Rpb24gKHByb2R1Y3QsIGZvcm1EYXRhKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIF9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfYikge1xuICAgICAgICAgICAgICAgIHN3aXRjaCAoX2IubGFiZWwpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAwOiByZXR1cm4gWzQgLyp5aWVsZCovLCBheGlvc18xW1wiZGVmYXVsdFwiXS5wb3N0KCcvYXBwcy9hcGkvcHJvZHVjdC9nZXQvZm9ybS9qc29uLycgKyBwcm9kdWN0LnV1aWQsIGZvcm1EYXRhLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQXV0aG9yaXphdGlvbic6ICdCZWFyZXIgJyArICgoX2EgPSB0aGlzLnRva2VuKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuY3VycmVudFRva2VuKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0pLnRoZW4oZnVuY3Rpb24gKHJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlLmRhdGE7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KV07XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMTogcmV0dXJuIFsyIC8qcmV0dXJuKi8sIF9iLnNlbnQoKV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgUHJvZHVjdFNlcnZpY2UucHJvdG90eXBlLmNhbGNQcm9kdWN0ID0gZnVuY3Rpb24gKHByb2R1Y3QsIGZvcm1EYXRhKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIF9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfYikge1xuICAgICAgICAgICAgICAgIHN3aXRjaCAoX2IubGFiZWwpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAwOiByZXR1cm4gWzQgLyp5aWVsZCovLCBheGlvc18xW1wiZGVmYXVsdFwiXS5wb3N0KCcvYXBwcy9hcGkvcHJvZHVjdC9nZXQvZm9ybS9qc29uLycgKyBwcm9kdWN0LnV1aWQsIGZvcm1EYXRhLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQXV0aG9yaXphdGlvbic6ICdCZWFyZXIgJyArICgoX2EgPSB0aGlzLnRva2VuKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuY3VycmVudFRva2VuKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0pLnRoZW4oZnVuY3Rpb24gKHJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlLmRhdGE7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KV07XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMTogcmV0dXJuIFsyIC8qcmV0dXJuKi8sIF9iLnNlbnQoKV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgUHJvZHVjdFNlcnZpY2UgPSBfX2RlY29yYXRlKFtcbiAgICAgICAgKDAsIHRzeXJpbmdlXzEuc2luZ2xldG9uKSgpLFxuICAgICAgICAoMCwgdHN5cmluZ2VfMS5hdXRvSW5qZWN0YWJsZSkoKSxcbiAgICAgICAgX19tZXRhZGF0YShcImRlc2lnbjpwYXJhbXR5cGVzXCIsIFt0b2tlbl8xLlRva2VuXSlcbiAgICBdLCBQcm9kdWN0U2VydmljZSk7XG4gICAgcmV0dXJuIFByb2R1Y3RTZXJ2aWNlO1xufSgpKTtcbmV4cG9ydHMuUHJvZHVjdFNlcnZpY2UgPSBQcm9kdWN0U2VydmljZTtcbiIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9fZGVjb3JhdGUgPSAodGhpcyAmJiB0aGlzLl9fZGVjb3JhdGUpIHx8IGZ1bmN0aW9uIChkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYykge1xuICAgIHZhciBjID0gYXJndW1lbnRzLmxlbmd0aCwgciA9IGMgPCAzID8gdGFyZ2V0IDogZGVzYyA9PT0gbnVsbCA/IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KSA6IGRlc2MsIGQ7XG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0LmRlY29yYXRlID09PSBcImZ1bmN0aW9uXCIpIHIgPSBSZWZsZWN0LmRlY29yYXRlKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKTtcbiAgICBlbHNlIGZvciAodmFyIGkgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSBpZiAoZCA9IGRlY29yYXRvcnNbaV0pIHIgPSAoYyA8IDMgPyBkKHIpIDogYyA+IDMgPyBkKHRhcmdldCwga2V5LCByKSA6IGQodGFyZ2V0LCBrZXkpKSB8fCByO1xuICAgIHJldHVybiBjID4gMyAmJiByICYmIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgciksIHI7XG59O1xudmFyIF9fbWV0YWRhdGEgPSAodGhpcyAmJiB0aGlzLl9fbWV0YWRhdGEpIHx8IGZ1bmN0aW9uIChrLCB2KSB7XG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0Lm1ldGFkYXRhID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiBSZWZsZWN0Lm1ldGFkYXRhKGssIHYpO1xufTtcbnZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gICAgfSk7XG59O1xudmFyIF9fZ2VuZXJhdG9yID0gKHRoaXMgJiYgdGhpcy5fX2dlbmVyYXRvcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIGJvZHkpIHtcbiAgICB2YXIgXyA9IHsgbGFiZWw6IDAsIHNlbnQ6IGZ1bmN0aW9uKCkgeyBpZiAodFswXSAmIDEpIHRocm93IHRbMV07IHJldHVybiB0WzFdOyB9LCB0cnlzOiBbXSwgb3BzOiBbXSB9LCBmLCB5LCB0LCBnO1xuICAgIHJldHVybiBnID0geyBuZXh0OiB2ZXJiKDApLCBcInRocm93XCI6IHZlcmIoMSksIFwicmV0dXJuXCI6IHZlcmIoMikgfSwgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIChnW1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbigpIHsgcmV0dXJuIHRoaXM7IH0pLCBnO1xuICAgIGZ1bmN0aW9uIHZlcmIobikgeyByZXR1cm4gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIHN0ZXAoW24sIHZdKTsgfTsgfVxuICAgIGZ1bmN0aW9uIHN0ZXAob3ApIHtcbiAgICAgICAgaWYgKGYpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuXCIpO1xuICAgICAgICB3aGlsZSAoXykgdHJ5IHtcbiAgICAgICAgICAgIGlmIChmID0gMSwgeSAmJiAodCA9IG9wWzBdICYgMiA/IHlbXCJyZXR1cm5cIl0gOiBvcFswXSA/IHlbXCJ0aHJvd1wiXSB8fCAoKHQgPSB5W1wicmV0dXJuXCJdKSAmJiB0LmNhbGwoeSksIDApIDogeS5uZXh0KSAmJiAhKHQgPSB0LmNhbGwoeSwgb3BbMV0pKS5kb25lKSByZXR1cm4gdDtcbiAgICAgICAgICAgIGlmICh5ID0gMCwgdCkgb3AgPSBbb3BbMF0gJiAyLCB0LnZhbHVlXTtcbiAgICAgICAgICAgIHN3aXRjaCAob3BbMF0pIHtcbiAgICAgICAgICAgICAgICBjYXNlIDA6IGNhc2UgMTogdCA9IG9wOyBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIDQ6IF8ubGFiZWwrKzsgcmV0dXJuIHsgdmFsdWU6IG9wWzFdLCBkb25lOiBmYWxzZSB9O1xuICAgICAgICAgICAgICAgIGNhc2UgNTogXy5sYWJlbCsrOyB5ID0gb3BbMV07IG9wID0gWzBdOyBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBjYXNlIDc6IG9wID0gXy5vcHMucG9wKCk7IF8udHJ5cy5wb3AoKTsgY29udGludWU7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEodCA9IF8udHJ5cywgdCA9IHQubGVuZ3RoID4gMCAmJiB0W3QubGVuZ3RoIC0gMV0pICYmIChvcFswXSA9PT0gNiB8fCBvcFswXSA9PT0gMikpIHsgXyA9IDA7IGNvbnRpbnVlOyB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gMyAmJiAoIXQgfHwgKG9wWzFdID4gdFswXSAmJiBvcFsxXSA8IHRbM10pKSkgeyBfLmxhYmVsID0gb3BbMV07IGJyZWFrOyB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gNiAmJiBfLmxhYmVsIDwgdFsxXSkgeyBfLmxhYmVsID0gdFsxXTsgdCA9IG9wOyBicmVhazsgfVxuICAgICAgICAgICAgICAgICAgICBpZiAodCAmJiBfLmxhYmVsIDwgdFsyXSkgeyBfLmxhYmVsID0gdFsyXTsgXy5vcHMucHVzaChvcCk7IGJyZWFrOyB9XG4gICAgICAgICAgICAgICAgICAgIGlmICh0WzJdKSBfLm9wcy5wb3AoKTtcbiAgICAgICAgICAgICAgICAgICAgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG9wID0gYm9keS5jYWxsKHRoaXNBcmcsIF8pO1xuICAgICAgICB9IGNhdGNoIChlKSB7IG9wID0gWzYsIGVdOyB5ID0gMDsgfSBmaW5hbGx5IHsgZiA9IHQgPSAwOyB9XG4gICAgICAgIGlmIChvcFswXSAmIDUpIHRocm93IG9wWzFdOyByZXR1cm4geyB2YWx1ZTogb3BbMF0gPyBvcFsxXSA6IHZvaWQgMCwgZG9uZTogdHJ1ZSB9O1xuICAgIH1cbn07XG52YXIgX19pbXBvcnREZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydERlZmF1bHQpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICByZXR1cm4gKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgPyBtb2QgOiB7IFwiZGVmYXVsdFwiOiBtb2QgfTtcbn07XG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuZXhwb3J0cy5Qcm9kdWN0R3JvdXBTZXJ2aWNlID0gdm9pZCAwO1xudmFyIHRzeXJpbmdlXzEgPSByZXF1aXJlKFwidHN5cmluZ2VcIik7XG52YXIgdG9rZW5fMSA9IHJlcXVpcmUoXCIuL3Rva2VuXCIpO1xudmFyIGF4aW9zXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcImF4aW9zXCIpKTtcbnZhciBwcm9kdWN0R3JvdXBfMSA9IHJlcXVpcmUoXCIuLi9tb2RlbC9wcm9kdWN0R3JvdXBcIik7XG52YXIgUHJvZHVjdEdyb3VwU2VydmljZSA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBQcm9kdWN0R3JvdXBTZXJ2aWNlKHRva2VuKSB7XG4gICAgICAgIHRoaXMudG9rZW4gPSB0b2tlbjtcbiAgICB9XG4gICAgUHJvZHVjdEdyb3VwU2VydmljZS5wcm90b3R5cGUuZ2V0UHJvZHVjdEdyb3VwcyA9IGZ1bmN0aW9uIChzZWFyY2hRdWVyeSwgc2hvcCkge1xuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gX19nZW5lcmF0b3IodGhpcywgZnVuY3Rpb24gKF9hKSB7XG4gICAgICAgICAgICAgICAgc3dpdGNoIChfYS5sYWJlbCkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDA6IHJldHVybiBbNCAvKnlpZWxkKi8sIGF4aW9zXzFbXCJkZWZhdWx0XCJdLmdldCgnL2FwcHMvYXBpL3Byb2R1Y3Rncm91cC9nZXR0cmVlLycgKyBzaG9wLnV1aWQgKyAnP3Rlcm09JyArIHNlYXJjaFF1ZXJ5LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQXV0aG9yaXphdGlvbic6ICdCZWFyZXIgJyArIHRoaXMudG9rZW4uY3VycmVudFRva2VuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSkudGhlbihmdW5jdGlvbiAocmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGVtcCA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlLmRhdGEuZGF0YS5tYXAoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBnID0gbmV3IHByb2R1Y3RHcm91cF8xLlByb2R1Y3RHcm91cDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGcuaWQgPSBpdGVtLmlkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZy5sYWJlbCA9IGl0ZW0udGl0bGU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBnLnV1aWQgPSBpdGVtLnV1aWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXAucHVzaChwZyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0uY2hpbGRyZW4ubWFwKGZ1bmN0aW9uIChzdWIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzcGcgPSBuZXcgcHJvZHVjdEdyb3VwXzEuUHJvZHVjdEdyb3VwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BnLmlkID0gc3ViLmlkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BnLmxhYmVsID0gXCItLSBcIiArIHN1Yi50aXRsZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwZy51dWlkID0gc3ViLnV1aWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wLnB1c2goc3BnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwZztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGVtcDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXTtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAxOiByZXR1cm4gWzIgLypyZXR1cm4qLywgX2Euc2VudCgpXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBQcm9kdWN0R3JvdXBTZXJ2aWNlID0gX19kZWNvcmF0ZShbXG4gICAgICAgICgwLCB0c3lyaW5nZV8xLnNpbmdsZXRvbikoKSxcbiAgICAgICAgKDAsIHRzeXJpbmdlXzEuYXV0b0luamVjdGFibGUpKCksXG4gICAgICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246cGFyYW10eXBlc1wiLCBbdG9rZW5fMS5Ub2tlbl0pXG4gICAgXSwgUHJvZHVjdEdyb3VwU2VydmljZSk7XG4gICAgcmV0dXJuIFByb2R1Y3RHcm91cFNlcnZpY2U7XG59KCkpO1xuZXhwb3J0cy5Qcm9kdWN0R3JvdXBTZXJ2aWNlID0gUHJvZHVjdEdyb3VwU2VydmljZTtcbiIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9fZGVjb3JhdGUgPSAodGhpcyAmJiB0aGlzLl9fZGVjb3JhdGUpIHx8IGZ1bmN0aW9uIChkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYykge1xuICAgIHZhciBjID0gYXJndW1lbnRzLmxlbmd0aCwgciA9IGMgPCAzID8gdGFyZ2V0IDogZGVzYyA9PT0gbnVsbCA/IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KSA6IGRlc2MsIGQ7XG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0LmRlY29yYXRlID09PSBcImZ1bmN0aW9uXCIpIHIgPSBSZWZsZWN0LmRlY29yYXRlKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKTtcbiAgICBlbHNlIGZvciAodmFyIGkgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSBpZiAoZCA9IGRlY29yYXRvcnNbaV0pIHIgPSAoYyA8IDMgPyBkKHIpIDogYyA+IDMgPyBkKHRhcmdldCwga2V5LCByKSA6IGQodGFyZ2V0LCBrZXkpKSB8fCByO1xuICAgIHJldHVybiBjID4gMyAmJiByICYmIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgciksIHI7XG59O1xudmFyIF9fbWV0YWRhdGEgPSAodGhpcyAmJiB0aGlzLl9fbWV0YWRhdGEpIHx8IGZ1bmN0aW9uIChrLCB2KSB7XG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0Lm1ldGFkYXRhID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiBSZWZsZWN0Lm1ldGFkYXRhKGssIHYpO1xufTtcbnZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gICAgfSk7XG59O1xudmFyIF9fZ2VuZXJhdG9yID0gKHRoaXMgJiYgdGhpcy5fX2dlbmVyYXRvcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIGJvZHkpIHtcbiAgICB2YXIgXyA9IHsgbGFiZWw6IDAsIHNlbnQ6IGZ1bmN0aW9uKCkgeyBpZiAodFswXSAmIDEpIHRocm93IHRbMV07IHJldHVybiB0WzFdOyB9LCB0cnlzOiBbXSwgb3BzOiBbXSB9LCBmLCB5LCB0LCBnO1xuICAgIHJldHVybiBnID0geyBuZXh0OiB2ZXJiKDApLCBcInRocm93XCI6IHZlcmIoMSksIFwicmV0dXJuXCI6IHZlcmIoMikgfSwgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIChnW1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbigpIHsgcmV0dXJuIHRoaXM7IH0pLCBnO1xuICAgIGZ1bmN0aW9uIHZlcmIobikgeyByZXR1cm4gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIHN0ZXAoW24sIHZdKTsgfTsgfVxuICAgIGZ1bmN0aW9uIHN0ZXAob3ApIHtcbiAgICAgICAgaWYgKGYpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuXCIpO1xuICAgICAgICB3aGlsZSAoXykgdHJ5IHtcbiAgICAgICAgICAgIGlmIChmID0gMSwgeSAmJiAodCA9IG9wWzBdICYgMiA/IHlbXCJyZXR1cm5cIl0gOiBvcFswXSA/IHlbXCJ0aHJvd1wiXSB8fCAoKHQgPSB5W1wicmV0dXJuXCJdKSAmJiB0LmNhbGwoeSksIDApIDogeS5uZXh0KSAmJiAhKHQgPSB0LmNhbGwoeSwgb3BbMV0pKS5kb25lKSByZXR1cm4gdDtcbiAgICAgICAgICAgIGlmICh5ID0gMCwgdCkgb3AgPSBbb3BbMF0gJiAyLCB0LnZhbHVlXTtcbiAgICAgICAgICAgIHN3aXRjaCAob3BbMF0pIHtcbiAgICAgICAgICAgICAgICBjYXNlIDA6IGNhc2UgMTogdCA9IG9wOyBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIDQ6IF8ubGFiZWwrKzsgcmV0dXJuIHsgdmFsdWU6IG9wWzFdLCBkb25lOiBmYWxzZSB9O1xuICAgICAgICAgICAgICAgIGNhc2UgNTogXy5sYWJlbCsrOyB5ID0gb3BbMV07IG9wID0gWzBdOyBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBjYXNlIDc6IG9wID0gXy5vcHMucG9wKCk7IF8udHJ5cy5wb3AoKTsgY29udGludWU7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEodCA9IF8udHJ5cywgdCA9IHQubGVuZ3RoID4gMCAmJiB0W3QubGVuZ3RoIC0gMV0pICYmIChvcFswXSA9PT0gNiB8fCBvcFswXSA9PT0gMikpIHsgXyA9IDA7IGNvbnRpbnVlOyB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gMyAmJiAoIXQgfHwgKG9wWzFdID4gdFswXSAmJiBvcFsxXSA8IHRbM10pKSkgeyBfLmxhYmVsID0gb3BbMV07IGJyZWFrOyB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gNiAmJiBfLmxhYmVsIDwgdFsxXSkgeyBfLmxhYmVsID0gdFsxXTsgdCA9IG9wOyBicmVhazsgfVxuICAgICAgICAgICAgICAgICAgICBpZiAodCAmJiBfLmxhYmVsIDwgdFsyXSkgeyBfLmxhYmVsID0gdFsyXTsgXy5vcHMucHVzaChvcCk7IGJyZWFrOyB9XG4gICAgICAgICAgICAgICAgICAgIGlmICh0WzJdKSBfLm9wcy5wb3AoKTtcbiAgICAgICAgICAgICAgICAgICAgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG9wID0gYm9keS5jYWxsKHRoaXNBcmcsIF8pO1xuICAgICAgICB9IGNhdGNoIChlKSB7IG9wID0gWzYsIGVdOyB5ID0gMDsgfSBmaW5hbGx5IHsgZiA9IHQgPSAwOyB9XG4gICAgICAgIGlmIChvcFswXSAmIDUpIHRocm93IG9wWzFdOyByZXR1cm4geyB2YWx1ZTogb3BbMF0gPyBvcFsxXSA6IHZvaWQgMCwgZG9uZTogdHJ1ZSB9O1xuICAgIH1cbn07XG52YXIgX19pbXBvcnREZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydERlZmF1bHQpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICByZXR1cm4gKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgPyBtb2QgOiB7IFwiZGVmYXVsdFwiOiBtb2QgfTtcbn07XG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuZXhwb3J0cy5TaGlwcGluZ1NlcnZpY2UgPSB2b2lkIDA7XG52YXIgdHN5cmluZ2VfMSA9IHJlcXVpcmUoXCJ0c3lyaW5nZVwiKTtcbnZhciB0b2tlbl8xID0gcmVxdWlyZShcIi4vdG9rZW5cIik7XG52YXIgYXhpb3NfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiYXhpb3NcIikpO1xudmFyIHNoaXBwaW5nXzEgPSByZXF1aXJlKFwiLi4vbW9kZWwvc2hpcHBpbmdcIik7XG52YXIgU2hpcHBpbmdTZXJ2aWNlID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIFNoaXBwaW5nU2VydmljZSh0b2tlbikge1xuICAgICAgICB0aGlzLnRva2VuID0gdG9rZW47XG4gICAgfVxuICAgIFNoaXBwaW5nU2VydmljZS5wcm90b3R5cGUuZ2V0U2hpcHBpbmcgPSBmdW5jdGlvbiAoc2hvcCkge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBfX2dlbmVyYXRvcih0aGlzLCBmdW5jdGlvbiAoX2IpIHtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKF9iLmxhYmVsKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMDogcmV0dXJuIFs0IC8qeWllbGQqLywgYXhpb3NfMVtcImRlZmF1bHRcIl0uZ2V0KCcvYXBwcy9hcGkvc2hpcHBpbmcvYnkvc2hvcC8nICsgc2hvcC51dWlkLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQXV0aG9yaXphdGlvbic6ICdCZWFyZXIgJyArICgoX2EgPSB0aGlzLnRva2VuKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuY3VycmVudFRva2VuKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0pLnRoZW4oZnVuY3Rpb24gKHJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlLmRhdGEuZGF0YS5tYXAoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNoaXBtZW50ID0gbmV3IHNoaXBwaW5nXzEuU2hpcHBpbmcoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hpcG1lbnQudWlkID0gaXRlbS51aWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoaXBtZW50LnRpdGxlID0gaXRlbS50aXRsZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hpcG1lbnQudXVpZCA9IGl0ZW0udXVpZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNoaXBtZW50O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSldO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDE6IHJldHVybiBbMiAvKnJldHVybiovLCBfYi5zZW50KCldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIFNoaXBwaW5nU2VydmljZSA9IF9fZGVjb3JhdGUoW1xuICAgICAgICAoMCwgdHN5cmluZ2VfMS5zaW5nbGV0b24pKCksXG4gICAgICAgICgwLCB0c3lyaW5nZV8xLmF1dG9JbmplY3RhYmxlKSgpLFxuICAgICAgICBfX21ldGFkYXRhKFwiZGVzaWduOnBhcmFtdHlwZXNcIiwgW3Rva2VuXzEuVG9rZW5dKVxuICAgIF0sIFNoaXBwaW5nU2VydmljZSk7XG4gICAgcmV0dXJuIFNoaXBwaW5nU2VydmljZTtcbn0oKSk7XG5leHBvcnRzLlNoaXBwaW5nU2VydmljZSA9IFNoaXBwaW5nU2VydmljZTtcbiIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9fZGVjb3JhdGUgPSAodGhpcyAmJiB0aGlzLl9fZGVjb3JhdGUpIHx8IGZ1bmN0aW9uIChkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYykge1xuICAgIHZhciBjID0gYXJndW1lbnRzLmxlbmd0aCwgciA9IGMgPCAzID8gdGFyZ2V0IDogZGVzYyA9PT0gbnVsbCA/IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KSA6IGRlc2MsIGQ7XG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0LmRlY29yYXRlID09PSBcImZ1bmN0aW9uXCIpIHIgPSBSZWZsZWN0LmRlY29yYXRlKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKTtcbiAgICBlbHNlIGZvciAodmFyIGkgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSBpZiAoZCA9IGRlY29yYXRvcnNbaV0pIHIgPSAoYyA8IDMgPyBkKHIpIDogYyA+IDMgPyBkKHRhcmdldCwga2V5LCByKSA6IGQodGFyZ2V0LCBrZXkpKSB8fCByO1xuICAgIHJldHVybiBjID4gMyAmJiByICYmIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgciksIHI7XG59O1xudmFyIF9fbWV0YWRhdGEgPSAodGhpcyAmJiB0aGlzLl9fbWV0YWRhdGEpIHx8IGZ1bmN0aW9uIChrLCB2KSB7XG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0Lm1ldGFkYXRhID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiBSZWZsZWN0Lm1ldGFkYXRhKGssIHYpO1xufTtcbnZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gICAgfSk7XG59O1xudmFyIF9fZ2VuZXJhdG9yID0gKHRoaXMgJiYgdGhpcy5fX2dlbmVyYXRvcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIGJvZHkpIHtcbiAgICB2YXIgXyA9IHsgbGFiZWw6IDAsIHNlbnQ6IGZ1bmN0aW9uKCkgeyBpZiAodFswXSAmIDEpIHRocm93IHRbMV07IHJldHVybiB0WzFdOyB9LCB0cnlzOiBbXSwgb3BzOiBbXSB9LCBmLCB5LCB0LCBnO1xuICAgIHJldHVybiBnID0geyBuZXh0OiB2ZXJiKDApLCBcInRocm93XCI6IHZlcmIoMSksIFwicmV0dXJuXCI6IHZlcmIoMikgfSwgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIChnW1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbigpIHsgcmV0dXJuIHRoaXM7IH0pLCBnO1xuICAgIGZ1bmN0aW9uIHZlcmIobikgeyByZXR1cm4gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIHN0ZXAoW24sIHZdKTsgfTsgfVxuICAgIGZ1bmN0aW9uIHN0ZXAob3ApIHtcbiAgICAgICAgaWYgKGYpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuXCIpO1xuICAgICAgICB3aGlsZSAoXykgdHJ5IHtcbiAgICAgICAgICAgIGlmIChmID0gMSwgeSAmJiAodCA9IG9wWzBdICYgMiA/IHlbXCJyZXR1cm5cIl0gOiBvcFswXSA/IHlbXCJ0aHJvd1wiXSB8fCAoKHQgPSB5W1wicmV0dXJuXCJdKSAmJiB0LmNhbGwoeSksIDApIDogeS5uZXh0KSAmJiAhKHQgPSB0LmNhbGwoeSwgb3BbMV0pKS5kb25lKSByZXR1cm4gdDtcbiAgICAgICAgICAgIGlmICh5ID0gMCwgdCkgb3AgPSBbb3BbMF0gJiAyLCB0LnZhbHVlXTtcbiAgICAgICAgICAgIHN3aXRjaCAob3BbMF0pIHtcbiAgICAgICAgICAgICAgICBjYXNlIDA6IGNhc2UgMTogdCA9IG9wOyBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIDQ6IF8ubGFiZWwrKzsgcmV0dXJuIHsgdmFsdWU6IG9wWzFdLCBkb25lOiBmYWxzZSB9O1xuICAgICAgICAgICAgICAgIGNhc2UgNTogXy5sYWJlbCsrOyB5ID0gb3BbMV07IG9wID0gWzBdOyBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBjYXNlIDc6IG9wID0gXy5vcHMucG9wKCk7IF8udHJ5cy5wb3AoKTsgY29udGludWU7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEodCA9IF8udHJ5cywgdCA9IHQubGVuZ3RoID4gMCAmJiB0W3QubGVuZ3RoIC0gMV0pICYmIChvcFswXSA9PT0gNiB8fCBvcFswXSA9PT0gMikpIHsgXyA9IDA7IGNvbnRpbnVlOyB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gMyAmJiAoIXQgfHwgKG9wWzFdID4gdFswXSAmJiBvcFsxXSA8IHRbM10pKSkgeyBfLmxhYmVsID0gb3BbMV07IGJyZWFrOyB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gNiAmJiBfLmxhYmVsIDwgdFsxXSkgeyBfLmxhYmVsID0gdFsxXTsgdCA9IG9wOyBicmVhazsgfVxuICAgICAgICAgICAgICAgICAgICBpZiAodCAmJiBfLmxhYmVsIDwgdFsyXSkgeyBfLmxhYmVsID0gdFsyXTsgXy5vcHMucHVzaChvcCk7IGJyZWFrOyB9XG4gICAgICAgICAgICAgICAgICAgIGlmICh0WzJdKSBfLm9wcy5wb3AoKTtcbiAgICAgICAgICAgICAgICAgICAgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG9wID0gYm9keS5jYWxsKHRoaXNBcmcsIF8pO1xuICAgICAgICB9IGNhdGNoIChlKSB7IG9wID0gWzYsIGVdOyB5ID0gMDsgfSBmaW5hbGx5IHsgZiA9IHQgPSAwOyB9XG4gICAgICAgIGlmIChvcFswXSAmIDUpIHRocm93IG9wWzFdOyByZXR1cm4geyB2YWx1ZTogb3BbMF0gPyBvcFsxXSA6IHZvaWQgMCwgZG9uZTogdHJ1ZSB9O1xuICAgIH1cbn07XG52YXIgX19pbXBvcnREZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydERlZmF1bHQpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICByZXR1cm4gKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgPyBtb2QgOiB7IFwiZGVmYXVsdFwiOiBtb2QgfTtcbn07XG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuZXhwb3J0cy5TaG9wU2VydmljZSA9IHZvaWQgMDtcbnZhciB0c3lyaW5nZV8xID0gcmVxdWlyZShcInRzeXJpbmdlXCIpO1xudmFyIHRva2VuXzEgPSByZXF1aXJlKFwiLi90b2tlblwiKTtcbnZhciBheGlvc18xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJheGlvc1wiKSk7XG52YXIgc2hvcF8xID0gcmVxdWlyZShcIi4uL21vZGVsL3Nob3BcIik7XG52YXIgU2hvcFNlcnZpY2UgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gU2hvcFNlcnZpY2UodG9rZW4pIHtcbiAgICAgICAgdGhpcy50b2tlbiA9IHRva2VuO1xuICAgIH1cbiAgICBTaG9wU2VydmljZS5wcm90b3R5cGUuZ2V0U2hvcHMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBfX2dlbmVyYXRvcih0aGlzLCBmdW5jdGlvbiAoX2EpIHtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKF9hLmxhYmVsKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKHRoaXMudG9rZW4pO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFs0IC8qeWllbGQqLywgYXhpb3NfMVtcImRlZmF1bHRcIl0uZ2V0KCcvYXBwcy9hcGkvc2hvcHMnLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdBdXRob3JpemF0aW9uJzogJ0JlYXJlciAnICsgdGhpcy50b2tlbi5jdXJyZW50VG9rZW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLnRoZW4oZnVuY3Rpb24gKHJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXNwb25zZS5kYXRhLmRhdGEubWFwKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2hvcCA9IG5ldyBzaG9wXzEuU2hvcCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvcC5wYXJzZUZyb21Kc29uKHsgc2hvcDogaXRlbSB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzaG9wO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KV07XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMTogcmV0dXJuIFsyIC8qcmV0dXJuKi8sIF9hLnNlbnQoKV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgU2hvcFNlcnZpY2UgPSBfX2RlY29yYXRlKFtcbiAgICAgICAgKDAsIHRzeXJpbmdlXzEuc2luZ2xldG9uKSgpLFxuICAgICAgICAoMCwgdHN5cmluZ2VfMS5hdXRvSW5qZWN0YWJsZSkoKSxcbiAgICAgICAgX19tZXRhZGF0YShcImRlc2lnbjpwYXJhbXR5cGVzXCIsIFt0b2tlbl8xLlRva2VuXSlcbiAgICBdLCBTaG9wU2VydmljZSk7XG4gICAgcmV0dXJuIFNob3BTZXJ2aWNlO1xufSgpKTtcbmV4cG9ydHMuU2hvcFNlcnZpY2UgPSBTaG9wU2VydmljZTtcbiIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9fZGVjb3JhdGUgPSAodGhpcyAmJiB0aGlzLl9fZGVjb3JhdGUpIHx8IGZ1bmN0aW9uIChkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYykge1xuICAgIHZhciBjID0gYXJndW1lbnRzLmxlbmd0aCwgciA9IGMgPCAzID8gdGFyZ2V0IDogZGVzYyA9PT0gbnVsbCA/IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KSA6IGRlc2MsIGQ7XG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0LmRlY29yYXRlID09PSBcImZ1bmN0aW9uXCIpIHIgPSBSZWZsZWN0LmRlY29yYXRlKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKTtcbiAgICBlbHNlIGZvciAodmFyIGkgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSBpZiAoZCA9IGRlY29yYXRvcnNbaV0pIHIgPSAoYyA8IDMgPyBkKHIpIDogYyA+IDMgPyBkKHRhcmdldCwga2V5LCByKSA6IGQodGFyZ2V0LCBrZXkpKSB8fCByO1xuICAgIHJldHVybiBjID4gMyAmJiByICYmIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgciksIHI7XG59O1xudmFyIF9faW1wb3J0RGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnREZWZhdWx0KSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgcmV0dXJuIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpID8gbW9kIDogeyBcImRlZmF1bHRcIjogbW9kIH07XG59O1xuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbmV4cG9ydHMuVG9rZW4gPSB2b2lkIDA7XG52YXIgYXhpb3NfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiYXhpb3NcIikpO1xudmFyIHRzeXJpbmdlXzEgPSByZXF1aXJlKFwidHN5cmluZ2VcIik7XG52YXIgVG9rZW4gPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gVG9rZW4oKSB7XG4gICAgfVxuICAgIFRva2VuLnByb3RvdHlwZS5pbml0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICBzZXRJbnRlcnZhbChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBfdGhpcy5yZWZyZXNoVG9rZW4oKTtcbiAgICAgICAgfSwgMiAqIDYwICogMTAwMCk7XG4gICAgfTtcbiAgICBUb2tlbi5wcm90b3R5cGUucmVmcmVzaFRva2VuID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICBheGlvc18xW1wiZGVmYXVsdFwiXS5nZXQoJy9hcHBzL2FwaS9jb250YWN0L3JlZnJlc2gnLCB7XG4gICAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAgICAgJ0F1dGhvcml6YXRpb24nOiAnQmVhcmVyICcgKyB0aGlzLmN1cnJlbnRUb2tlblxuICAgICAgICAgICAgfVxuICAgICAgICB9KS50aGVuKGZ1bmN0aW9uIChyZXNwb25zZSkge1xuICAgICAgICAgICAgX3RoaXMuY3VycmVudFRva2VuID0gcmVzcG9uc2UuZGF0YS50b2tlbjtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBUb2tlbiA9IF9fZGVjb3JhdGUoW1xuICAgICAgICAoMCwgdHN5cmluZ2VfMS5zaW5nbGV0b24pKClcbiAgICBdLCBUb2tlbik7XG4gICAgcmV0dXJuIFRva2VuO1xufSgpKTtcbmV4cG9ydHMuVG9rZW4gPSBUb2tlbjtcbiIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9fZGVjb3JhdGUgPSAodGhpcyAmJiB0aGlzLl9fZGVjb3JhdGUpIHx8IGZ1bmN0aW9uIChkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYykge1xuICAgIHZhciBjID0gYXJndW1lbnRzLmxlbmd0aCwgciA9IGMgPCAzID8gdGFyZ2V0IDogZGVzYyA9PT0gbnVsbCA/IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KSA6IGRlc2MsIGQ7XG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0LmRlY29yYXRlID09PSBcImZ1bmN0aW9uXCIpIHIgPSBSZWZsZWN0LmRlY29yYXRlKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKTtcbiAgICBlbHNlIGZvciAodmFyIGkgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSBpZiAoZCA9IGRlY29yYXRvcnNbaV0pIHIgPSAoYyA8IDMgPyBkKHIpIDogYyA+IDMgPyBkKHRhcmdldCwga2V5LCByKSA6IGQodGFyZ2V0LCBrZXkpKSB8fCByO1xuICAgIHJldHVybiBjID4gMyAmJiByICYmIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgciksIHI7XG59O1xudmFyIF9fbWV0YWRhdGEgPSAodGhpcyAmJiB0aGlzLl9fbWV0YWRhdGEpIHx8IGZ1bmN0aW9uIChrLCB2KSB7XG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0Lm1ldGFkYXRhID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiBSZWZsZWN0Lm1ldGFkYXRhKGssIHYpO1xufTtcbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5leHBvcnRzLk9yZGVyU3RhdGUgPSB2b2lkIDA7XG52YXIgdHN5cmluZ2VfMSA9IHJlcXVpcmUoXCJ0c3lyaW5nZVwiKTtcbnZhciBvcmRlcl8xID0gcmVxdWlyZShcIi4uL21vZGVsL29yZGVyXCIpO1xudmFyIHJ4anNfMSA9IHJlcXVpcmUoXCJyeGpzXCIpO1xudmFyIE9yZGVyU3RhdGUgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gT3JkZXJTdGF0ZSgpIHtcbiAgICAgICAgdGhpcy5jdXJyZW50T3JkZXIgPSBuZXcgcnhqc18xLkJlaGF2aW9yU3ViamVjdChuZXcgb3JkZXJfMS5PcmRlcigpKTtcbiAgICB9XG4gICAgT3JkZXJTdGF0ZS5wcm90b3R5cGUuZ2V0Q3VycmVudE9yZGVyID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jdXJyZW50T3JkZXI7XG4gICAgfTtcbiAgICBPcmRlclN0YXRlLnByb3RvdHlwZS5zZXRDdXJyZW50T3JkZXIgPSBmdW5jdGlvbiAob3JkZXIpIHtcbiAgICAgICAgdGhpcy5jdXJyZW50T3JkZXIubmV4dChvcmRlcik7XG4gICAgfTtcbiAgICBPcmRlclN0YXRlLnByb3RvdHlwZS5nZXRPcmRlciA9IGZ1bmN0aW9uICh1dWlkKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9yZGVycy5tYXAoZnVuY3Rpb24gKGUpIHsgcmV0dXJuIGUudXVpZCA9PSB1dWlkOyB9KTtcbiAgICB9O1xuICAgIE9yZGVyU3RhdGUucHJvdG90eXBlLnVwZGF0ZU9yZGVyID0gZnVuY3Rpb24gKG9yZGVyKSB7XG4gICAgICAgIHRoaXMub3JkZXJzLnB1c2gob3JkZXIpO1xuICAgIH07XG4gICAgT3JkZXJTdGF0ZSA9IF9fZGVjb3JhdGUoW1xuICAgICAgICAoMCwgdHN5cmluZ2VfMS5zaW5nbGV0b24pKCksXG4gICAgICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246cGFyYW10eXBlc1wiLCBbXSlcbiAgICBdLCBPcmRlclN0YXRlKTtcbiAgICByZXR1cm4gT3JkZXJTdGF0ZTtcbn0oKSk7XG5leHBvcnRzLk9yZGVyU3RhdGUgPSBPcmRlclN0YXRlO1xuIiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQge307Il0sIm5hbWVzIjpbImV4cG9ydHMiLCJfX2VzTW9kdWxlIiwicmVxdWlyZSIsImFwcF8xIiwiYXBwIiwiQXBwIiwiand0X3Rva2VuIiwiaW5pdCIsInJ1biIsIl9faW1wb3J0RGVmYXVsdCIsIm1vZCIsImpzeF9ydW50aW1lXzEiLCJ0b2tlbl8xIiwidHN5cmluZ2VfMSIsImNsaWVudF8xIiwibmljZV9tb2RhbF9yZWFjdF8xIiwiQmFzZUNvbXBvbmVudF8xIiwicmVhY3Rfcm91dGVyX2RvbV8xIiwiand0IiwidG9rZW4iLCJjb250YWluZXIiLCJyZXNvbHZlIiwiVG9rZW4iLCJjb25zb2xlIiwibG9nIiwiY3VycmVudFRva2VuIiwicHJvdG90eXBlIiwiYnVpbGRVaSIsInJvb3QiLCJjcmVhdGVSb290IiwiZG9jdW1lbnQiLCJnZXRFbGVtZW50QnlJZCIsInJlbmRlciIsImpzeCIsIlByb3ZpZGVyIiwiY2hpbGRyZW4iLCJIYXNoUm91dGVyIiwianN4cyIsIlJvdXRlcyIsIlJvdXRlIiwicGF0aCIsImVsZW1lbnQiLCJBY2NvdW50IiwidWlkIiwidXVpZCIsImFwcGVuZGl4IiwidGl0bGUiLCJwYXJzZUZyb21Kc29uIiwiaXRlbSIsImFjY291bnQiLCJBZGRyZXNzIiwiY29udGFjdF8xIiwiZmlyc3RuYW1lIiwibGFzdG5hbWUiLCJzdHJlZXQiLCJob3VzZU51bWJlciIsInppcCIsImNvbXBhbnkiLCJjb21wYW55MiIsImNpdHkiLCJlbWFpbCIsImNvdW50cnkiLCJ1c3RpZCIsImNvbnRhY3QiLCJDb250YWN0IiwidHlwZSIsInBob25lIiwicGFyc2VGcm9tRm9ybURhdGEiLCJmb3JtZGF0YSIsIkxheW91dGVyRGF0YSIsInVzZXJuYW1lIiwicGFzc3dvcmQiLCJzaG9wcyIsImxheW91dGVyX2RhdGEiLCJzaG9wIiwicHVzaCIsIkNvdW50cnkiLCJjb2RlIiwidXNlVmF0V2l0aFVzdElkIiwidXNlVmF0V2l0aG91dFVzdElkIiwiT3JkZXIiLCJ1dWlkXzEiLCJhY2NvdW50XzEiLCJhZGRyZXNzXzEiLCJwb3NfMSIsInBheW1lbnRfMSIsInNoaXBwaW5nXzEiLCJzaG9wXzEiLCJkZWxpdmVyeUFkZHJlc3MiLCJzZW5kZXJBZGRyZXNzIiwiaW52b2ljZUFkZHJlc3MiLCJwb3NpdGlvbnMiLCJwYXltZW50IiwiUGF5bWVudCIsInNoaXBwaW5nIiwiU2hpcHBpbmciLCJTaG9wIiwidjQiLCJiYXNrZXRGaWVsZDEiLCJiYXNrZXRGaWVsZDIiLCJkcmFmdCIsInNhdmVkIiwiYWRkUG9zaXRpb24iLCJwb3MiLCJfdGhpcyIsImFsaWFzIiwibWFwIiwiZSIsIlBvcyIsIlN0cmluZyIsInByb2R1Y3RfMSIsInByaWNlXzEiLCJwcm9kdWN0IiwiUHJvZHVjdCIsInN0YXR1cyIsImNvdW50IiwicHJpY2UiLCJQcmljZSIsIm5ldCIsInZhdCIsImdyb3NzIiwiYWxsTmV0IiwiYWxsVmF0IiwiYWxsR3Jvc3MiLCJTcGVjaWFsUHJvZHVjdFR5cGVPYmplY3QiLCJwYXJhbXMiLCJ0eXAiLCJpZCIsInNwZWNpYWxQcm9kdWN0VHlwZU9iamVjdCIsIlByb2R1Y3RHcm91cCIsImxhYmVsIiwibmFtZSIsImJhc2tldFBvc0ZpZWxkMSIsImJhc2tldFBvc0ZpZWxkMiIsIl9fY3JlYXRlQmluZGluZyIsIk9iamVjdCIsImNyZWF0ZSIsIm8iLCJtIiwiayIsImsyIiwidW5kZWZpbmVkIiwiZGVzYyIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsIndyaXRhYmxlIiwiY29uZmlndXJhYmxlIiwiZW51bWVyYWJsZSIsImdldCIsImRlZmluZVByb3BlcnR5IiwiX19zZXRNb2R1bGVEZWZhdWx0IiwidiIsInZhbHVlIiwiX19pbXBvcnRTdGFyIiwicmVzdWx0IiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiX19hd2FpdGVyIiwidGhpc0FyZyIsIl9hcmd1bWVudHMiLCJQIiwiZ2VuZXJhdG9yIiwiYWRvcHQiLCJQcm9taXNlIiwicmVqZWN0IiwiZnVsZmlsbGVkIiwic3RlcCIsIm5leHQiLCJyZWplY3RlZCIsImRvbmUiLCJ0aGVuIiwiYXBwbHkiLCJfX2dlbmVyYXRvciIsImJvZHkiLCJfIiwic2VudCIsInQiLCJ0cnlzIiwib3BzIiwiZiIsInkiLCJnIiwidmVyYiIsIlN5bWJvbCIsIml0ZXJhdG9yIiwibiIsIm9wIiwiVHlwZUVycm9yIiwicG9wIiwibGVuZ3RoIiwicmVhY3Rfc2VsZWN0X2FzeW5jX3BhZ2luYXRlXzEiLCJvcmRlcl8xIiwicmVhY3RfMSIsIlByb3BUeXBlcyIsIm9yZGVyXzIiLCJTZWxlY3RMYWJlbF8xIiwiQWNjb3VudFNlbGVjdENvbXBvbmVudCIsIl9hIiwib3JkZXIiLCJfYiIsInVzZVN0YXRlIiwic2hvcFV1aWQiLCJzZXRTaG9wVXVpZCIsIl9jIiwic2V0QWNjb3VudCIsInVzZUVmZmVjdCIsIm9yZGVyU3RhdGUiLCJPcmRlclN0YXRlIiwibG9hZE9wdGlvbnMiLCJzZWFyY2hRdWVyeSIsImxvYWRlZE9wdGlvbnMiLCJhY2NvdW50X3NlcnZpY2UiLCJkYXRhIiwiQWNjb3VudFNlcnZpY2UiLCJnZXRBY2NvdW50cyIsIm9wdGlvbnMiLCJoYXNNb3JlIiwib25DaGFuZ2UiLCJvcHRpb24iLCJvcmRlck9iaiIsImdldEN1cnJlbnRPcmRlciIsImdldFZhbHVlIiwic2V0Q3VycmVudE9yZGVyIiwiQXN5bmNQYWdpbmF0ZSIsImRlZmF1bHRPcHRpb25zIiwiY2xhc3NOYW1lIiwiY29uY2F0IiwiZGVmYXVsdFZhbHVlIiwiY29tcG9uZW50cyIsIkNvbnRyb2wiLCJTZWxlY3RMYWJlbCIsInBsYWNlaG9sZGVyIiwiZ2V0T3B0aW9uVmFsdWUiLCJnZXRPcHRpb25MYWJlbCIsImlzU2VhcmNoYWJsZSIsIkpTT04iLCJzdHJpbmdpZnkiLCJwcm9wVHlwZXMiLCJpbnN0YW5jZU9mIiwiX19hc3NpZ24iLCJhc3NpZ24iLCJzIiwiaSIsImFyZ3VtZW50cyIsInAiLCJDb250YWN0Q29tcG9uZW50XzEiLCJUb3BCYXJDb21wb25lbnRfMSIsIlBvc2l0aW9uc0NvbXBvbmVudF8xIiwiUGF5bWVudENvbXBvbmVudF8xIiwiU2hpcHBpbmdDb21wb25lbnRfMSIsIkJ1dHRvbkNvbXBvbmVudF8xIiwib3JkZXJfMyIsIkluZm9GaWVsZENvbXBvbmVudF8xIiwicmVhY3RfMiIsIk9yZGVyQWxpYXNDb21wb25lbnRfMSIsIkJhc2VDb21wb25lbnQiLCJwcm9wcyIsInNldFNob3AiLCJzZXRPcmRlciIsIm9yZGVyX3N0YXRlIiwib3JkZXJTZXJ2aWNlIiwiT3JkZXJTZXJ2aWNlIiwibG9hZE9yZGVyIiwiZ2V0T3JkZXIiLCJ1c2VQYXJhbXMiLCJTdHJpY3RNb2RlIiwiY2hhbmdlIiwiQnNQbHVzXzEiLCJCc1BlbmNpbF8xIiwiUmlTYXZlRmlsbF8xIiwiUmlEZWxldGVCaW4yTGluZV8xIiwiQnNYQ2lyY2xlXzEiLCJmbG93Yml0ZV9yZWFjdF8xIiwiQnV0dG9uIiwidmFyaWFudCIsIm9uQ2xpY2siLCJjb2xvciIsInBpbGwiLCJCc1BsdXMiLCJCc1BlbmNpbCIsIlJpU2F2ZUZpbGwiLCJCc1hDaXJjbGUiLCJSaURlbGV0ZUJpbjJMaW5lIiwiQ3VycmVuY3kiLCJGcmFnbWVudCIsIkludGwiLCJOdW1iZXJGb3JtYXQiLCJzdHlsZSIsImN1cnJlbmN5IiwiZm9ybWF0IiwiX19tYWtlVGVtcGxhdGVPYmplY3QiLCJjb29rZWQiLCJyYXciLCJzdHlsZWRfY29tcG9uZW50c18xIiwicmVhY3Rfc2VsZWN0XzEiLCJMYWJlbCIsInNlbGVjdFByb3BzIiwidGVtcGxhdGVPYmplY3RfMSIsIiRpc0Zsb2F0aW5nIiwiX19leHRlbmRzIiwiZXh0ZW5kU3RhdGljcyIsImQiLCJiIiwic2V0UHJvdG90eXBlT2YiLCJfX3Byb3RvX18iLCJBcnJheSIsIl9fIiwiY29uc3RydWN0b3IiLCJyeGpzXzEiLCJSaVByaW50ZXJGaWxsXzEiLCJCdXR0b25Db21wb25lbnQiLCJfc3VwZXIiLCJzdGF0ZSIsImRpc2FibGVkIiwiY29tcG9uZW50RGlkTW91bnQiLCJwaXBlIiwiZGVib3VuY2VUaW1lIiwic3Vic2NyaWJlIiwic2F2ZUJ1dHRvbiIsInNldFN0YXRlIiwiaGFuZGxlUHJpbnQiLCJ3aW5kb3ciLCJvcGVuIiwiaGFuZGxlU2F2ZSIsInByZXZlbnREZWZhdWx0Iiwic2F2ZU9yZGVyIiwic2l6ZSIsIlJpUHJpbnRlckZpbGwiLCJDb21wb25lbnQiLCJDdXJyZW5jeV8xIiwiQ2FsY0NvbXBvbmVudCIsImNhbGMiLCJjYWxjT3JkZXIiLCJBZGRyZXNzRGV0YWlsIiwiYWRkcmVzcyIsIkJ1dHRvbl8xIiwidmFsaWRhdG9yX2FqdjZfMSIsImNvcmVfMSIsImNvdW50cnlfMSIsIkFkZHJlc3NkaXYiLCJhY3Rpb24iLCJjb3VudHJ5X2FwaSIsIkNvdW50cnlTZXJ2aWNlIiwibW9kYWwiLCJ1c2VNb2RhbCIsImZvcm1EYXRhIiwic2V0Rm9ybURhdGEiLCJzY2hlbWEiLCJzZXRTY2hlbWEiLCJnZXRDb3VudHJ5IiwiY291bnRyeXMiLCJmb3JFYWNoIiwicmVxdWlyZWQiLCJwcm9wZXJ0aWVzIiwib25lT2YiLCJ1aVNjaGVtYSIsIk1vZGFsIiwic2hvdyIsInZpc2libGUiLCJvbkNsb3NlIiwicmVtb3ZlIiwiSGVhZGVyIiwiQm9keSIsInZhbGlkYXRvciIsIkZvb3RlciIsIkFkZHJlc3NNb2RhbF8xIiwiQWRkcmVzc01vZGFsQ29tcG9uZW50IiwiaGFuZGxlQWRkIiwiaGFuZGxlRWRpdCIsImFkZHJlc3NNb2RhbCIsInNob3dBZGRNb2RhbCIsInVzZUNhbGxiYWNrIiwiYWRkQWRkcmVzcyIsInNob3dFZGl0TW9kYWwiLCJ1cGRhdGVBZGRyZXNzIiwiZnVuYyIsImFkZHJlc3NfMiIsIkFkZHJlc3NNb2RhbENvbXBvbmVudF8xIiwiQWRkcmVzc0RldGFpbF8xIiwiQWRkcmVzc1NlbGVjdCIsImNoYW5nZUFkZHJlc3MiLCJjb250YWN0VXVpZCIsInNldENvbnRhY3RVdWlkIiwibG9jYWxBZGRyZXNzIiwic2V0TG9jYWxBZGRyZXNzIiwiYWRkcmVzc19zZXJ2aWNlIiwiQWRkcmVzc1NlcnZpY2UiLCJnZXRDb250YWN0QWRkcmVzcyIsIk1hdGgiLCJyYW5kb20iLCJ1cGRhdGUiLCJzZXRBZGRyZXNzSW5PcmRlciIsIm51bWJlciIsInN0cmluZyIsIkNvbnRhY3RTZWxlY3RfMSIsIkFkZHJlc3NTZWxlY3RfMSIsIkFjY291bnRTZWxlY3RDb21wb25lbnRfMSIsIkNvbnRhY3RDb21wb25lbnQiLCJzZXRDb250YWN0IiwiQ29udGFjdE1vZGFsIiwiQ29udGFjdE1vZGFsXzEiLCJjb250YWN0XzIiLCJDb250YWN0TW9kYWxDb21wb25lbnQiLCJjb250YWN0TW9kYWwiLCJhZGRDb250YWN0IiwidXBkYXRlQ29udGFjdCIsImNvbnRhY3RfYXBpIiwiQ29udGFjdFNlcnZpY2UiLCJjcmVhdGVDb250YWN0IiwiYWRkcmVzc19hcGkiLCJDb250YWN0TW9kYWxDb21wb25lbnRfMSIsIkNvbnRhY3RTZWxlY3QiLCJwYWdlIiwiY29udGFjdHMiLCJnZXRDb250YWN0cyIsImFkZGl0aW9uYWwiLCJzZXRDb250YWN0SW5PcmRlciIsIkRyYWZ0Q29tcG9uZW50Iiwic2V0RHJhZnQiLCJkZWZhdWx0Q2hlY2tlZCIsIkluZm9GaWVsZENvbXBvbmVudCIsInNldEJhc2tldEZpZWxkMSIsInNldEJhc2tldEZpZWxkMiIsImNoYW5nZUJhc2tldEZpZWxkMSIsImNoYW5nZUJhc2tldEZpZWxkMiIsInRhcmdldCIsIk9yZGVyQWxpYXNDb21wb25lbnQiLCJQYXltZW50Q29tcG9uZW50Iiwic2V0UGF5bWVudCIsInBheW1lbnRfc2VydmljZSIsIlBheW1lbnRTZXJ2aWNlIiwiZ2V0UGF5bWVudHMiLCJwcm9kdWN0R3JvdXBfMSIsIlByb2R1Y3RHcm91cFNlbGVjdF8xIiwiUHJvZHVjdFNlbGVjdF8xIiwiUHJvZHVjdEZvcm1fMSIsIkFkZFBvc2l0aW9uQ29tcG9uZW50Iiwic2V0U2hvdyIsImhhbmRsZUNsb3NlIiwiaGFuZGxlU2hvdyIsInNldFByb2R1Y3QiLCJfZCIsInByb2R1Y3RHcm91cCIsInNldFByb2R1Y3RHcm91cCIsImhhbmRsZUNoYW5nZSIsImFkZFBvcyIsIkVkaXRQb3NpdGlvbkNvbXBvbmVudCIsInBvc2l0aW9uIiwiY2hhbmdlUG9zIiwiUG9zQ29tcG9uZW50XzEiLCJJdGVtc0NvbXBvbmVudCIsImRlbFBvcyIsIm9iamVjdCIsImluZGV4IiwiYXJyYXkiLCJFZGl0UG9zaXRpb25Db21wb25lbnRfMSIsIlBvc0NvbXBvbmVudCIsImRlbGV0ZVBvcyIsIl9fc3ByZWFkQXJyYXkiLCJ0byIsImZyb20iLCJwYWNrIiwibCIsImFyIiwic2xpY2UiLCJBZGRQb3NpdGlvbkNvbXBvbmVudF8xIiwiSXRlbXNDb21wb25lbnRfMSIsIlBvc2l0aW9uc0NvbXBvbmVudCIsInVwZGF0ZU9yZGVyIiwic2V0UG9zaXRpb25zIiwicG9zT2JqIiwibmV4dENvdW50ZXJzIiwiYyIsImZpbHRlciIsIm9iaiIsInVzZV9kZWJvdW5jZV8xIiwiUHJvZHVjdEZvcm0iLCJwcm9kdWN0X2FwaSIsIlByb2R1Y3RTZXJ2aWNlIiwic2V0VWlTY2hlbWEiLCJfZSIsInNldFR5cGUiLCJfZiIsInNldFByaWNlIiwibG9hZFNjaGVtYSIsImxvYWREYXRhIiwiZ2V0QWRkUHJvZHVjdFNjaGVtYSIsImNoYW5nZUNhbGMiLCJkZWJvdW5jZVJlQ2FsYyIsInVzZURlYm91bmNlZENhbGxiYWNrIiwiY2FsY1Byb2R1Y3QiLCJhZGRQcm9kdWN0IiwicHJvZHVjdGdyb3VwXzEiLCJhc3luY18xIiwiUHJvZHVjdEdyb3VwU2VsZWN0IiwicHJvZHVjdGdyb3VwX2FwaSIsIlByb2R1Y3RHcm91cFNlcnZpY2UiLCJnZXRQcm9kdWN0R3JvdXBzIiwicHJvZHVjdF8yIiwiUHJvZHVjdFNlbGVjdCIsImdldFByb2R1Y3RzQnlUZXJtIiwiZ2V0UHJvZHVjdHMiLCJkZWJvdW5jZWRTZWFyY2hUZXJtIiwidXNlRGVib3VuY2UiLCJTaGlwcGluZ0NvbXBvbmVudCIsInNldFNoaXBwaW5nIiwic2hpcHBpbmdfc2VydmljZSIsIlNoaXBwaW5nU2VydmljZSIsImdldFNoaXBwaW5nIiwiU2hvcFNlbGVjdENvbXBvbmVudCIsInNob3Bfc2VydmljZSIsIlNob3BTZXJ2aWNlIiwiZ2V0U2hvcHMiLCJUeXBlU2VsZWN0Q29tcG9uZW50XzEiLCJTaG9wU2VsZWN0Q29tcG9uZW50XzEiLCJEcmFmdENvbXBvbmVudF8xIiwiQ2FsY0NvbXBvbmVudF8xIiwiVG9wQmFyQ29tcG9uZW50IiwiVHlwZVNlbGVjdENvbXBvbmVudCIsIl90eXBlb2YiLCJfX2RlY29yYXRlIiwiZGVjb3JhdG9ycyIsImtleSIsInIiLCJSZWZsZWN0IiwiZGVjb3JhdGUiLCJfX21ldGFkYXRhIiwibWV0YWRhdGEiLCJheGlvc18xIiwiaGVhZGVycyIsInJlc3BvbnNlIiwic2luZ2xldG9uIiwiYXV0b0luamVjdGFibGUiLCJwb3N0IiwicHV0IiwidGVybSIsInRlbXAiLCJwZyIsInN1YiIsInNwZyIsInNoaXBtZW50Iiwic2V0SW50ZXJ2YWwiLCJyZWZyZXNoVG9rZW4iLCJjdXJyZW50T3JkZXIiLCJCZWhhdmlvclN1YmplY3QiLCJvcmRlcnMiXSwic291cmNlUm9vdCI6IiJ9 \ No newline at end of file diff --git a/src/new/web/build/vendors-var_plugins_System_PSC_Invoice_Webpack_node_modules_ebay_nice-modal-react_lib_esm_ind-73e7df.js b/src/new/web/build/vendors-var_plugins_System_PSC_Invoice_Webpack_node_modules_ebay_nice-modal-react_lib_esm_ind-73e7df.js index eb41716e3..83a443528 100644 --- a/src/new/web/build/vendors-var_plugins_System_PSC_Invoice_Webpack_node_modules_ebay_nice-modal-react_lib_esm_ind-73e7df.js +++ b/src/new/web/build/vendors-var_plugins_System_PSC_Invoice_Webpack_node_modules_ebay_nice-modal-react_lib_esm_ind-73e7df.js @@ -512,10 +512,10 @@ var NiceModal = { /***/ }), -/***/ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/@emotion/cache/dist/emotion-cache.browser.development.esm.js": -/*!**************************************************************************************************************************!*\ - !*** ./var/plugins/System/PSC/Invoice/Webpack/node_modules/@emotion/cache/dist/emotion-cache.browser.development.esm.js ***! - \**************************************************************************************************************************/ +/***/ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/@emotion/cache/dist/emotion-cache.browser.esm.js": +/*!**************************************************************************************************************!*\ + !*** ./var/plugins/System/PSC/Invoice/Webpack/node_modules/@emotion/cache/dist/emotion-cache.browser.esm.js ***! + \**************************************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; @@ -523,7 +523,7 @@ __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (/* binding */ createCache) /* harmony export */ }); -/* harmony import */ var _emotion_sheet__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @emotion/sheet */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/@emotion/sheet/dist/emotion-sheet.development.esm.js"); +/* harmony import */ var _emotion_sheet__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @emotion/sheet */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/@emotion/sheet/dist/emotion-sheet.browser.esm.js"); /* harmony import */ var stylis__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! stylis */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/stylis/src/Tokenizer.js"); /* harmony import */ var stylis__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! stylis */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/stylis/src/Utility.js"); /* harmony import */ var stylis__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! stylis */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/stylis/src/Enum.js"); @@ -984,14 +984,10 @@ var prefixer = function prefixer(element, index, children, callback) { var defaultStylisPlugins = [prefixer]; -var createCache = function - /*: EmotionCache */ -createCache(options -/*: Options */ -) { +var createCache = function createCache(options) { var key = options.key; - if (!key) { + if ( true && !key) { throw new Error("You have to configure `key` for your cache. Please make sure it's unique (and not equal to 'css') as it's used for linking styles to your cache.\n" + "If multiple caches share the same key they might \"fight\" for each other's style elements."); } @@ -1001,9 +997,7 @@ createCache(options // note this very very intentionally targets all style elements regardless of the key to ensure // that creating a cache works inside of render of a React component - Array.prototype.forEach.call(ssrStyles, function (node - /*: HTMLStyleElement */ - ) { + Array.prototype.forEach.call(ssrStyles, function (node) { // we want to only move elements which have a space in the data-emotion attribute value // because that indicates that it is an Emotion 11 server-side rendered style elements // while we will already ignore Emotion 11 client-side inserted styles because of the :not([data-s]) part in the selector @@ -1015,7 +1009,6 @@ createCache(options if (dataEmotionAttribute.indexOf(' ') === -1) { return; } - document.head.appendChild(node); node.setAttribute('data-s', ''); }); @@ -1023,7 +1016,8 @@ createCache(options var stylisPlugins = options.stylisPlugins || defaultStylisPlugins; - { + if (true) { + // $FlowFixMe if (/[^a-z-]/.test(key)) { throw new Error("Emotion key must only contain lower case alphabetical characters and - but \"" + key + "\" was passed"); } @@ -1031,18 +1025,14 @@ createCache(options var inserted = {}; var container; - /* : Node */ - var nodesToHydrate = []; { container = options.container || document.head; Array.prototype.forEach.call( // this means we will ignore elements which don't have a space in them which // means that the style elements we're looking at are only Emotion 11 server-rendered style elements - document.querySelectorAll("style[data-emotion^=\"" + key + " \"]"), function (node - /*: HTMLStyleElement */ - ) { - var attrib = node.getAttribute("data-emotion").split(' '); + document.querySelectorAll("style[data-emotion^=\"" + key + " \"]"), function (node) { + var attrib = node.getAttribute("data-emotion").split(' '); // $FlowFixMe for (var i = 1; i < attrib.length; i++) { inserted[attrib[i]] = true; @@ -1053,17 +1043,10 @@ createCache(options } var _insert; - /*: ( - selector: string, - serialized: SerializedStyles, - sheet: StyleSheet, - shouldCache: boolean - ) => string | void */ - var omnipresentPlugins = [compat, removeLabel]; - { + if (true) { omnipresentPlugins.push(createUnsafeSelectorsAlarm({ get compat() { return cache.compat; @@ -1074,7 +1057,7 @@ createCache(options { var currentSheet; - var finalizingPlugins = [stylis__WEBPACK_IMPORTED_MODULE_6__.stringify, function (element) { + var finalizingPlugins = [stylis__WEBPACK_IMPORTED_MODULE_6__.stringify, true ? function (element) { if (!element.root) { if (element["return"]) { currentSheet.insert(element["return"]); @@ -1084,31 +1067,19 @@ createCache(options currentSheet.insert(element.value + "{}"); } } - } ]; + } : 0]; var serializer = (0,stylis__WEBPACK_IMPORTED_MODULE_7__.middleware)(omnipresentPlugins.concat(stylisPlugins, finalizingPlugins)); var stylis = function stylis(styles) { return (0,stylis__WEBPACK_IMPORTED_MODULE_6__.serialize)((0,stylis__WEBPACK_IMPORTED_MODULE_8__.compile)(styles), serializer); }; - _insert = function - /*: void */ - insert(selector - /*: string */ - , serialized - /*: SerializedStyles */ - , sheet - /*: StyleSheet */ - , shouldCache - /*: boolean */ - ) { + _insert = function insert(selector, serialized, sheet, shouldCache) { currentSheet = sheet; - if (serialized.map !== undefined) { + if ( true && serialized.map !== undefined) { currentSheet = { - insert: function insert(rule - /*: string */ - ) { + insert: function insert(rule) { sheet.insert(rule + serialized.map); } }; @@ -1122,9 +1093,7 @@ createCache(options }; } - var cache - /*: EmotionCache */ - = { + var cache = { key: key, sheet: new _emotion_sheet__WEBPACK_IMPORTED_MODULE_0__.StyleSheet({ key: key, @@ -1229,7 +1198,7 @@ __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (/* binding */ isPropValid) /* harmony export */ }); -/* harmony import */ var _emotion_memoize__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @emotion/memoize */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/@emotion/is-prop-valid/node_modules/@emotion/memoize/dist/emotion-memoize.esm.js"); +/* harmony import */ var _emotion_memoize__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @emotion/memoize */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/@emotion/memoize/dist/emotion-memoize.esm.js"); var reactPropsRegex = /^((children|dangerouslySetInnerHTML|key|ref|autoFocus|defaultValue|defaultChecked|innerHTML|suppressContentEditableWarning|suppressHydrationWarning|valueLink|abbr|accept|acceptCharset|accessKey|action|allow|allowUserMedia|allowPaymentRequest|allowFullScreen|allowTransparency|alt|async|autoComplete|autoPlay|capture|cellPadding|cellSpacing|challenge|charSet|checked|cite|classID|className|cols|colSpan|content|contentEditable|contextMenu|controls|controlsList|coords|crossOrigin|data|dateTime|decoding|default|defer|dir|disabled|disablePictureInPicture|disableRemotePlayback|download|draggable|encType|enterKeyHint|form|formAction|formEncType|formMethod|formNoValidate|formTarget|frameBorder|headers|height|hidden|high|href|hrefLang|htmlFor|httpEquiv|id|inputMode|integrity|is|keyParams|keyType|kind|label|lang|list|loading|loop|low|marginHeight|marginWidth|max|maxLength|media|mediaGroup|method|min|minLength|multiple|muted|name|nonce|noValidate|open|optimum|pattern|placeholder|playsInline|poster|preload|profile|radioGroup|readOnly|referrerPolicy|rel|required|reversed|role|rows|rowSpan|sandbox|scope|scoped|scrolling|seamless|selected|shape|size|sizes|slot|span|spellCheck|src|srcDoc|srcLang|srcSet|start|step|style|summary|tabIndex|target|title|translate|type|useMap|value|width|wmode|wrap|about|datatype|inlist|prefix|property|resource|typeof|vocab|autoCapitalize|autoCorrect|autoSave|color|incremental|fallback|inert|itemProp|itemScope|itemType|itemID|itemRef|on|option|results|security|unselectable|accentHeight|accumulate|additive|alignmentBaseline|allowReorder|alphabetic|amplitude|arabicForm|ascent|attributeName|attributeType|autoReverse|azimuth|baseFrequency|baselineShift|baseProfile|bbox|begin|bias|by|calcMode|capHeight|clip|clipPathUnits|clipPath|clipRule|colorInterpolation|colorInterpolationFilters|colorProfile|colorRendering|contentScriptType|contentStyleType|cursor|cx|cy|d|decelerate|descent|diffuseConstant|direction|display|divisor|dominantBaseline|dur|dx|dy|edgeMode|elevation|enableBackground|end|exponent|externalResourcesRequired|fill|fillOpacity|fillRule|filter|filterRes|filterUnits|floodColor|floodOpacity|focusable|fontFamily|fontSize|fontSizeAdjust|fontStretch|fontStyle|fontVariant|fontWeight|format|from|fr|fx|fy|g1|g2|glyphName|glyphOrientationHorizontal|glyphOrientationVertical|glyphRef|gradientTransform|gradientUnits|hanging|horizAdvX|horizOriginX|ideographic|imageRendering|in|in2|intercept|k|k1|k2|k3|k4|kernelMatrix|kernelUnitLength|kerning|keyPoints|keySplines|keyTimes|lengthAdjust|letterSpacing|lightingColor|limitingConeAngle|local|markerEnd|markerMid|markerStart|markerHeight|markerUnits|markerWidth|mask|maskContentUnits|maskUnits|mathematical|mode|numOctaves|offset|opacity|operator|order|orient|orientation|origin|overflow|overlinePosition|overlineThickness|panose1|paintOrder|pathLength|patternContentUnits|patternTransform|patternUnits|pointerEvents|points|pointsAtX|pointsAtY|pointsAtZ|preserveAlpha|preserveAspectRatio|primitiveUnits|r|radius|refX|refY|renderingIntent|repeatCount|repeatDur|requiredExtensions|requiredFeatures|restart|result|rotate|rx|ry|scale|seed|shapeRendering|slope|spacing|specularConstant|specularExponent|speed|spreadMethod|startOffset|stdDeviation|stemh|stemv|stitchTiles|stopColor|stopOpacity|strikethroughPosition|strikethroughThickness|string|stroke|strokeDasharray|strokeDashoffset|strokeLinecap|strokeLinejoin|strokeMiterlimit|strokeOpacity|strokeWidth|surfaceScale|systemLanguage|tableValues|targetX|targetY|textAnchor|textDecoration|textRendering|textLength|to|transform|u1|u2|underlinePosition|underlineThickness|unicode|unicodeBidi|unicodeRange|unitsPerEm|vAlphabetic|vHanging|vIdeographic|vMathematical|values|vectorEffect|version|vertAdvY|vertOriginX|vertOriginY|viewBox|viewTarget|visibility|widths|wordSpacing|writingMode|x|xHeight|x1|x2|xChannelSelector|xlinkActuate|xlinkArcrole|xlinkHref|xlinkRole|xlinkShow|xlinkTitle|xlinkType|xmlBase|xmlns|xmlnsXlink|xmlLang|xmlSpace|y|y1|y2|yChannelSelector|z|zoomAndPan|for|class|autofocus)|(([Dd][Aa][Tt][Aa]|[Aa][Rr][Ii][Aa]|x)-.*))$/; // https://esbench.com/bench/5bfee68a4cd7e6009ef61d23 @@ -1247,30 +1216,6 @@ var isPropValid = /* #__PURE__ */(0,_emotion_memoize__WEBPACK_IMPORTED_MODULE_0_ -/***/ }), - -/***/ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/@emotion/is-prop-valid/node_modules/@emotion/memoize/dist/emotion-memoize.esm.js": -/*!**********************************************************************************************************************************************!*\ - !*** ./var/plugins/System/PSC/Invoice/Webpack/node_modules/@emotion/is-prop-valid/node_modules/@emotion/memoize/dist/emotion-memoize.esm.js ***! - \**********************************************************************************************************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* binding */ memoize) -/* harmony export */ }); -function memoize(fn) { - var cache = Object.create(null); - return function (arg) { - if (cache[arg] === undefined) cache[arg] = fn(arg); - return cache[arg]; - }; -} - - - - /***/ }), /***/ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/@emotion/memoize/dist/emotion-memoize.esm.js": @@ -1297,10 +1242,10 @@ function memoize(fn) { /***/ }), -/***/ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/@emotion/react/_isolated-hnrs/dist/emotion-react-_isolated-hnrs.browser.development.esm.js": -/*!********************************************************************************************************************************************************!*\ - !*** ./var/plugins/System/PSC/Invoice/Webpack/node_modules/@emotion/react/_isolated-hnrs/dist/emotion-react-_isolated-hnrs.browser.development.esm.js ***! - \********************************************************************************************************************************************************/ +/***/ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/@emotion/react/_isolated-hnrs/dist/emotion-react-_isolated-hnrs.browser.esm.js": +/*!********************************************************************************************************************************************!*\ + !*** ./var/plugins/System/PSC/Invoice/Webpack/node_modules/@emotion/react/_isolated-hnrs/dist/emotion-react-_isolated-hnrs.browser.esm.js ***! + \********************************************************************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; @@ -1325,10 +1270,10 @@ var hoistNonReactStatics = (function (targetComponent, sourceComponent) { /***/ }), -/***/ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/@emotion/react/dist/emotion-element-7a1343fa.browser.development.esm.js": -/*!*************************************************************************************************************************************!*\ - !*** ./var/plugins/System/PSC/Invoice/Webpack/node_modules/@emotion/react/dist/emotion-element-7a1343fa.browser.development.esm.js ***! - \*************************************************************************************************************************************/ +/***/ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/@emotion/react/dist/emotion-element-c39617d8.browser.esm.js": +/*!*************************************************************************************************************************!*\ + !*** ./var/plugins/System/PSC/Invoice/Webpack/node_modules/@emotion/react/dist/emotion-element-c39617d8.browser.esm.js ***! + \*************************************************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; @@ -1341,18 +1286,19 @@ __webpack_require__.r(__webpack_exports__); /* harmony export */ "a": () => (/* binding */ ThemeProvider), /* harmony export */ "b": () => (/* binding */ withTheme), /* harmony export */ "c": () => (/* binding */ createEmotionProps), -/* harmony export */ "h": () => (/* binding */ hasOwn), +/* harmony export */ "h": () => (/* binding */ hasOwnProperty), +/* harmony export */ "i": () => (/* binding */ isBrowser), /* harmony export */ "u": () => (/* binding */ useTheme), /* harmony export */ "w": () => (/* binding */ withEmotionCache) /* harmony export */ }); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var _emotion_cache__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @emotion/cache */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/@emotion/cache/dist/emotion-cache.browser.development.esm.js"); +/* harmony import */ var _emotion_cache__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @emotion/cache */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/@emotion/cache/dist/emotion-cache.browser.esm.js"); /* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/@babel/runtime/helpers/esm/extends.js"); /* harmony import */ var _emotion_weak_memoize__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @emotion/weak-memoize */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/@emotion/weak-memoize/dist/emotion-weak-memoize.esm.js"); -/* harmony import */ var _isolated_hnrs_dist_emotion_react_isolated_hnrs_browser_development_esm_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../_isolated-hnrs/dist/emotion-react-_isolated-hnrs.browser.development.esm.js */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/@emotion/react/_isolated-hnrs/dist/emotion-react-_isolated-hnrs.browser.development.esm.js"); +/* harmony import */ var _isolated_hnrs_dist_emotion_react_isolated_hnrs_browser_esm_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../_isolated-hnrs/dist/emotion-react-_isolated-hnrs.browser.esm.js */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/@emotion/react/_isolated-hnrs/dist/emotion-react-_isolated-hnrs.browser.esm.js"); /* harmony import */ var _emotion_utils__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @emotion/utils */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/@emotion/utils/dist/emotion-utils.browser.esm.js"); -/* harmony import */ var _emotion_serialize__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @emotion/serialize */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/@emotion/serialize/dist/emotion-serialize.development.esm.js"); +/* harmony import */ var _emotion_serialize__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @emotion/serialize */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/@emotion/serialize/dist/emotion-serialize.browser.esm.js"); /* harmony import */ var _emotion_use_insertion_effect_with_fallbacks__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @emotion/use-insertion-effect-with-fallbacks */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/@emotion/use-insertion-effect-with-fallbacks/dist/emotion-use-insertion-effect-with-fallbacks.browser.esm.js"); @@ -1364,10 +1310,10 @@ __webpack_require__.r(__webpack_exports__); -/* import { type EmotionCache } from '@emotion/utils' */ -var EmotionCacheContext -/*: React.Context */ -= /* #__PURE__ */react__WEBPACK_IMPORTED_MODULE_0__.createContext( // we're doing this to avoid preconstruct's dead code elimination in this one case +var isBrowser = "object" !== 'undefined'; +var hasOwnProperty = {}.hasOwnProperty; + +var EmotionCacheContext = /* #__PURE__ */react__WEBPACK_IMPORTED_MODULE_0__.createContext( // we're doing this to avoid preconstruct's dead code elimination in this one case // because this module is primarily intended for the browser and node // but it's also required in react native and similar environments sometimes // and we could have a special build just for that @@ -1377,38 +1323,51 @@ typeof HTMLElement !== 'undefined' ? /* #__PURE__ */(0,_emotion_cache__WEBPACK_I key: 'css' }) : null); -{ +if (true) { EmotionCacheContext.displayName = 'EmotionCacheContext'; } var CacheProvider = EmotionCacheContext.Provider; -var __unsafe_useEmotionCache = function useEmotionCache() -/*: EmotionCache | null*/ -{ +var __unsafe_useEmotionCache = function useEmotionCache() { return (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(EmotionCacheContext); }; -var withEmotionCache = function withEmotionCache -/* > */ -(func -/*: (props: Props, cache: EmotionCache, ref: Ref) => React.Node */ -) -/*: React.AbstractComponent */ -{ - return /*#__PURE__*/(0,react__WEBPACK_IMPORTED_MODULE_0__.forwardRef)(function (props - /*: Props */ - , ref - /*: Ref */ - ) { +var withEmotionCache = function withEmotionCache(func) { + // $FlowFixMe + return /*#__PURE__*/(0,react__WEBPACK_IMPORTED_MODULE_0__.forwardRef)(function (props, ref) { // the cache will never be null in the browser var cache = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(EmotionCacheContext); return func(props, cache, ref); }); }; +if (!isBrowser) { + withEmotionCache = function withEmotionCache(func) { + return function (props) { + var cache = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(EmotionCacheContext); + + if (cache === null) { + // yes, we're potentially creating this on every render + // it doesn't actually matter though since it's only on the server + // so there will only every be a single render + // that could change in the future because of suspense and etc. but for now, + // this works and i don't want to optimise for a future thing that we aren't sure about + cache = (0,_emotion_cache__WEBPACK_IMPORTED_MODULE_1__["default"])({ + key: 'css' + }); + return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(EmotionCacheContext.Provider, { + value: cache + }, func(props, cache)); + } else { + return func(props, cache); + } + }; + }; +} + var ThemeContext = /* #__PURE__ */react__WEBPACK_IMPORTED_MODULE_0__.createContext({}); -{ +if (true) { ThemeContext.displayName = 'EmotionThemeContext'; } @@ -1416,22 +1375,18 @@ var useTheme = function useTheme() { return react__WEBPACK_IMPORTED_MODULE_0__.useContext(ThemeContext); }; -var getTheme = function getTheme(outerTheme -/*: Object */ -, theme -/*: Object | (Object => Object) */ -) { +var getTheme = function getTheme(outerTheme, theme) { if (typeof theme === 'function') { var mergedTheme = theme(outerTheme); - if ((mergedTheme == null || typeof mergedTheme !== 'object' || Array.isArray(mergedTheme))) { + if ( true && (mergedTheme == null || typeof mergedTheme !== 'object' || Array.isArray(mergedTheme))) { throw new Error('[ThemeProvider] Please return an object from your theme function, i.e. theme={() => ({})}!'); } return mergedTheme; } - if ((theme == null || typeof theme !== 'object' || Array.isArray(theme))) { + if ( true && (theme == null || typeof theme !== 'object' || Array.isArray(theme))) { throw new Error('[ThemeProvider] Please make your theme prop a plain object'); } @@ -1443,16 +1398,7 @@ var createCacheWithTheme = /* #__PURE__ */(0,_emotion_weak_memoize__WEBPACK_IMPO return getTheme(outerTheme, theme); }); }); -/* -type ThemeProviderProps = { - theme: Object | (Object => Object), - children: React.Node -} -*/ - -var ThemeProvider = function ThemeProvider(props -/*: ThemeProviderProps */ -) { +var ThemeProvider = function ThemeProvider(props) { var theme = react__WEBPACK_IMPORTED_MODULE_0__.useContext(ThemeContext); if (props.theme !== theme) { @@ -1463,13 +1409,7 @@ var ThemeProvider = function ThemeProvider(props value: theme }, props.children); }; -function withTheme -/* */ -(Component -/*: React.AbstractComponent */ -) -/*: React.AbstractComponent<$Diff> */ -{ +function withTheme(Component) { var componentName = Component.displayName || Component.name || 'Component'; var render = function render(props, ref) { @@ -1478,31 +1418,22 @@ function withTheme theme: theme, ref: ref }, props)); - }; + }; // $FlowFixMe + var WithTheme = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.forwardRef(render); WithTheme.displayName = "WithTheme(" + componentName + ")"; - return (0,_isolated_hnrs_dist_emotion_react_isolated_hnrs_browser_development_esm_js__WEBPACK_IMPORTED_MODULE_7__["default"])(WithTheme, Component); + return (0,_isolated_hnrs_dist_emotion_react_isolated_hnrs_browser_esm_js__WEBPACK_IMPORTED_MODULE_7__["default"])(WithTheme, Component); } -var hasOwn = {}.hasOwnProperty; - -var getLastPart = function - /* : string */ -getLastPart(functionName -/* : string */ -) { +var getLastPart = function getLastPart(functionName) { // The match may be something like 'Object.createEmotionProps' or // 'Loader.prototype.render' var parts = functionName.split('.'); return parts[parts.length - 1]; }; -var getFunctionNameFromStackTraceLine = function - /*: ?string*/ -getFunctionNameFromStackTraceLine(line -/*: string*/ -) { +var getFunctionNameFromStackTraceLine = function getFunctionNameFromStackTraceLine(line) { // V8 var match = /^\s+at\s+([A-Za-z0-9$.]+)\s/.exec(line); if (match) return getLastPart(match[1]); // Safari / Firefox @@ -1540,34 +1471,24 @@ var getLabelFromStackTrace = function getLabelFromStackTrace(stackTrace) { var typePropName = '__EMOTION_TYPE_PLEASE_DO_NOT_USE__'; var labelPropName = '__EMOTION_LABEL_PLEASE_DO_NOT_USE__'; -var createEmotionProps = function createEmotionProps(type -/*: React.ElementType */ -, props -/*: Object */ -) { - if (typeof props.css === 'string' && // check if there is a css declaration +var createEmotionProps = function createEmotionProps(type, props) { + if ( true && typeof props.css === 'string' && // check if there is a css declaration props.css.indexOf(':') !== -1) { throw new Error("Strings are not allowed as css prop values, please wrap it in a css template literal from '@emotion/react' like this: css`" + props.css + "`"); } - var newProps - /*: any */ - = {}; + var newProps = {}; for (var key in props) { - if (hasOwn.call(props, key)) { + if (hasOwnProperty.call(props, key)) { newProps[key] = props[key]; } } - newProps[typePropName] = type; // Runtime labeling is an opt-in feature because: - // - It causes hydration warnings when using Safari and SSR - // - It can degrade performance if there are a huge number of elements - // - // Even if the flag is set, we still don't compute the label if it has already - // been determined by the Babel plugin. + newProps[typePropName] = type; // For performance, only call getLabelFromStackTrace in development and when + // the label hasn't already been computed - if (typeof globalThis !== 'undefined' && !!globalThis.EMOTION_RUNTIME_AUTO_LABEL && !!props.css && (typeof props.css !== 'object' || typeof props.css.name !== 'string' || props.css.name.indexOf('-') === -1)) { + if ( true && !!props.css && (typeof props.css !== 'object' || typeof props.css.name !== 'string' || props.css.name.indexOf('-') === -1)) { var label = getLabelFromStackTrace(new Error().stack); if (label) newProps[labelPropName] = label; } @@ -1587,9 +1508,7 @@ var Insertion = function Insertion(_ref) { return null; }; -var Emotion = /* #__PURE__ */withEmotionCache( -/* */ -function (props, cache, ref) { +var Emotion = /* #__PURE__ */withEmotionCache(function (props, cache, ref) { var cssProp = props.css; // so that using `css` from `emotion` and passing the result to the css prop works // not passing the registered cache to serializeStyles because it would // make certain babel optimisations not possible @@ -1610,7 +1529,7 @@ function (props, cache, ref) { var serialized = (0,_emotion_serialize__WEBPACK_IMPORTED_MODULE_5__.serializeStyles)(registeredStyles, undefined, react__WEBPACK_IMPORTED_MODULE_0__.useContext(ThemeContext)); - if (serialized.name.indexOf('-') === -1) { + if ( true && serialized.name.indexOf('-') === -1) { var labelFromStack = props[labelPropName]; if (labelFromStack) { @@ -1622,17 +1541,13 @@ function (props, cache, ref) { var newProps = {}; for (var key in props) { - if (hasOwn.call(props, key) && key !== 'css' && key !== typePropName && (key !== labelPropName)) { + if (hasOwnProperty.call(props, key) && key !== 'css' && key !== typePropName && ( false || key !== labelPropName)) { newProps[key] = props[key]; } } + newProps.ref = ref; newProps.className = className; - - if (ref) { - newProps.ref = ref; - } - return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(Insertion, { cache: cache, serialized: serialized, @@ -1640,7 +1555,7 @@ function (props, cache, ref) { }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(WrappedComponent, newProps)); }); -{ +if (true) { Emotion.displayName = 'EmotionCssPropInternal'; } @@ -1651,36 +1566,36 @@ var Emotion$1 = Emotion; /***/ }), -/***/ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/@emotion/react/dist/emotion-react.browser.development.esm.js": -/*!**************************************************************************************************************************!*\ - !*** ./var/plugins/System/PSC/Invoice/Webpack/node_modules/@emotion/react/dist/emotion-react.browser.development.esm.js ***! - \**************************************************************************************************************************/ +/***/ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/@emotion/react/dist/emotion-react.browser.esm.js": +/*!**************************************************************************************************************!*\ + !*** ./var/plugins/System/PSC/Invoice/Webpack/node_modules/@emotion/react/dist/emotion-react.browser.esm.js ***! + \**************************************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "CacheProvider": () => (/* reexport safe */ _emotion_element_7a1343fa_browser_development_esm_js__WEBPACK_IMPORTED_MODULE_0__.C), +/* harmony export */ "CacheProvider": () => (/* reexport safe */ _emotion_element_c39617d8_browser_esm_js__WEBPACK_IMPORTED_MODULE_0__.C), /* harmony export */ "ClassNames": () => (/* binding */ ClassNames), /* harmony export */ "Global": () => (/* binding */ Global), -/* harmony export */ "ThemeContext": () => (/* reexport safe */ _emotion_element_7a1343fa_browser_development_esm_js__WEBPACK_IMPORTED_MODULE_0__.T), -/* harmony export */ "ThemeProvider": () => (/* reexport safe */ _emotion_element_7a1343fa_browser_development_esm_js__WEBPACK_IMPORTED_MODULE_0__.a), -/* harmony export */ "__unsafe_useEmotionCache": () => (/* reexport safe */ _emotion_element_7a1343fa_browser_development_esm_js__WEBPACK_IMPORTED_MODULE_0__._), +/* harmony export */ "ThemeContext": () => (/* reexport safe */ _emotion_element_c39617d8_browser_esm_js__WEBPACK_IMPORTED_MODULE_0__.T), +/* harmony export */ "ThemeProvider": () => (/* reexport safe */ _emotion_element_c39617d8_browser_esm_js__WEBPACK_IMPORTED_MODULE_0__.a), +/* harmony export */ "__unsafe_useEmotionCache": () => (/* reexport safe */ _emotion_element_c39617d8_browser_esm_js__WEBPACK_IMPORTED_MODULE_0__._), /* harmony export */ "createElement": () => (/* binding */ jsx), /* harmony export */ "css": () => (/* binding */ css), /* harmony export */ "jsx": () => (/* binding */ jsx), /* harmony export */ "keyframes": () => (/* binding */ keyframes), -/* harmony export */ "useTheme": () => (/* reexport safe */ _emotion_element_7a1343fa_browser_development_esm_js__WEBPACK_IMPORTED_MODULE_0__.u), -/* harmony export */ "withEmotionCache": () => (/* reexport safe */ _emotion_element_7a1343fa_browser_development_esm_js__WEBPACK_IMPORTED_MODULE_0__.w), -/* harmony export */ "withTheme": () => (/* reexport safe */ _emotion_element_7a1343fa_browser_development_esm_js__WEBPACK_IMPORTED_MODULE_0__.b) +/* harmony export */ "useTheme": () => (/* reexport safe */ _emotion_element_c39617d8_browser_esm_js__WEBPACK_IMPORTED_MODULE_0__.u), +/* harmony export */ "withEmotionCache": () => (/* reexport safe */ _emotion_element_c39617d8_browser_esm_js__WEBPACK_IMPORTED_MODULE_0__.w), +/* harmony export */ "withTheme": () => (/* reexport safe */ _emotion_element_c39617d8_browser_esm_js__WEBPACK_IMPORTED_MODULE_0__.b) /* harmony export */ }); -/* harmony import */ var _emotion_element_7a1343fa_browser_development_esm_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./emotion-element-7a1343fa.browser.development.esm.js */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/@emotion/react/dist/emotion-element-7a1343fa.browser.development.esm.js"); +/* harmony import */ var _emotion_element_c39617d8_browser_esm_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./emotion-element-c39617d8.browser.esm.js */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/@emotion/react/dist/emotion-element-c39617d8.browser.esm.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var _emotion_utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @emotion/utils */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/@emotion/utils/dist/emotion-utils.browser.esm.js"); /* harmony import */ var _emotion_use_insertion_effect_with_fallbacks__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @emotion/use-insertion-effect-with-fallbacks */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/@emotion/use-insertion-effect-with-fallbacks/dist/emotion-use-insertion-effect-with-fallbacks.browser.esm.js"); -/* harmony import */ var _emotion_serialize__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @emotion/serialize */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/@emotion/serialize/dist/emotion-serialize.development.esm.js"); -/* harmony import */ var _emotion_cache__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @emotion/cache */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/@emotion/cache/dist/emotion-cache.browser.development.esm.js"); +/* harmony import */ var _emotion_serialize__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @emotion/serialize */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/@emotion/serialize/dist/emotion-serialize.browser.esm.js"); +/* harmony import */ var _emotion_cache__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @emotion/cache */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/@emotion/cache/dist/emotion-cache.browser.esm.js"); /* harmony import */ var _babel_runtime_helpers_extends__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @babel/runtime/helpers/extends */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/@babel/runtime/helpers/esm/extends.js"); /* harmony import */ var _emotion_weak_memoize__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @emotion/weak-memoize */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/@emotion/weak-memoize/dist/emotion-weak-memoize.esm.js"); /* harmony import */ var hoist_non_react_statics__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! hoist-non-react-statics */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/hoist-non-react-statics/dist/hoist-non-react-statics.cjs.js"); @@ -1697,227 +1612,48 @@ __webpack_require__.r(__webpack_exports__); -var isDevelopment = true; - var pkg = { name: "@emotion/react", - version: "11.13.3", + version: "11.11.1", main: "dist/emotion-react.cjs.js", module: "dist/emotion-react.esm.js", + browser: { + "./dist/emotion-react.esm.js": "./dist/emotion-react.browser.esm.js" + }, exports: { ".": { - types: { - "import": "./dist/emotion-react.cjs.mjs", - "default": "./dist/emotion-react.cjs.js" + module: { + worker: "./dist/emotion-react.worker.esm.js", + browser: "./dist/emotion-react.browser.esm.js", + "default": "./dist/emotion-react.esm.js" }, - development: { - "edge-light": { - module: "./dist/emotion-react.development.edge-light.esm.js", - "import": "./dist/emotion-react.development.edge-light.cjs.mjs", - "default": "./dist/emotion-react.development.edge-light.cjs.js" - }, - worker: { - module: "./dist/emotion-react.development.edge-light.esm.js", - "import": "./dist/emotion-react.development.edge-light.cjs.mjs", - "default": "./dist/emotion-react.development.edge-light.cjs.js" - }, - workerd: { - module: "./dist/emotion-react.development.edge-light.esm.js", - "import": "./dist/emotion-react.development.edge-light.cjs.mjs", - "default": "./dist/emotion-react.development.edge-light.cjs.js" - }, - browser: { - module: "./dist/emotion-react.browser.development.esm.js", - "import": "./dist/emotion-react.browser.development.cjs.mjs", - "default": "./dist/emotion-react.browser.development.cjs.js" - }, - module: "./dist/emotion-react.development.esm.js", - "import": "./dist/emotion-react.development.cjs.mjs", - "default": "./dist/emotion-react.development.cjs.js" - }, - "edge-light": { - module: "./dist/emotion-react.edge-light.esm.js", - "import": "./dist/emotion-react.edge-light.cjs.mjs", - "default": "./dist/emotion-react.edge-light.cjs.js" - }, - worker: { - module: "./dist/emotion-react.edge-light.esm.js", - "import": "./dist/emotion-react.edge-light.cjs.mjs", - "default": "./dist/emotion-react.edge-light.cjs.js" - }, - workerd: { - module: "./dist/emotion-react.edge-light.esm.js", - "import": "./dist/emotion-react.edge-light.cjs.mjs", - "default": "./dist/emotion-react.edge-light.cjs.js" - }, - browser: { - module: "./dist/emotion-react.browser.esm.js", - "import": "./dist/emotion-react.browser.cjs.mjs", - "default": "./dist/emotion-react.browser.cjs.js" - }, - module: "./dist/emotion-react.esm.js", "import": "./dist/emotion-react.cjs.mjs", "default": "./dist/emotion-react.cjs.js" }, "./jsx-runtime": { - types: { - "import": "./jsx-runtime/dist/emotion-react-jsx-runtime.cjs.mjs", - "default": "./jsx-runtime/dist/emotion-react-jsx-runtime.cjs.js" + module: { + worker: "./jsx-runtime/dist/emotion-react-jsx-runtime.worker.esm.js", + browser: "./jsx-runtime/dist/emotion-react-jsx-runtime.browser.esm.js", + "default": "./jsx-runtime/dist/emotion-react-jsx-runtime.esm.js" }, - development: { - "edge-light": { - module: "./jsx-runtime/dist/emotion-react-jsx-runtime.development.edge-light.esm.js", - "import": "./jsx-runtime/dist/emotion-react-jsx-runtime.development.edge-light.cjs.mjs", - "default": "./jsx-runtime/dist/emotion-react-jsx-runtime.development.edge-light.cjs.js" - }, - worker: { - module: "./jsx-runtime/dist/emotion-react-jsx-runtime.development.edge-light.esm.js", - "import": "./jsx-runtime/dist/emotion-react-jsx-runtime.development.edge-light.cjs.mjs", - "default": "./jsx-runtime/dist/emotion-react-jsx-runtime.development.edge-light.cjs.js" - }, - workerd: { - module: "./jsx-runtime/dist/emotion-react-jsx-runtime.development.edge-light.esm.js", - "import": "./jsx-runtime/dist/emotion-react-jsx-runtime.development.edge-light.cjs.mjs", - "default": "./jsx-runtime/dist/emotion-react-jsx-runtime.development.edge-light.cjs.js" - }, - browser: { - module: "./jsx-runtime/dist/emotion-react-jsx-runtime.browser.development.esm.js", - "import": "./jsx-runtime/dist/emotion-react-jsx-runtime.browser.development.cjs.mjs", - "default": "./jsx-runtime/dist/emotion-react-jsx-runtime.browser.development.cjs.js" - }, - module: "./jsx-runtime/dist/emotion-react-jsx-runtime.development.esm.js", - "import": "./jsx-runtime/dist/emotion-react-jsx-runtime.development.cjs.mjs", - "default": "./jsx-runtime/dist/emotion-react-jsx-runtime.development.cjs.js" - }, - "edge-light": { - module: "./jsx-runtime/dist/emotion-react-jsx-runtime.edge-light.esm.js", - "import": "./jsx-runtime/dist/emotion-react-jsx-runtime.edge-light.cjs.mjs", - "default": "./jsx-runtime/dist/emotion-react-jsx-runtime.edge-light.cjs.js" - }, - worker: { - module: "./jsx-runtime/dist/emotion-react-jsx-runtime.edge-light.esm.js", - "import": "./jsx-runtime/dist/emotion-react-jsx-runtime.edge-light.cjs.mjs", - "default": "./jsx-runtime/dist/emotion-react-jsx-runtime.edge-light.cjs.js" - }, - workerd: { - module: "./jsx-runtime/dist/emotion-react-jsx-runtime.edge-light.esm.js", - "import": "./jsx-runtime/dist/emotion-react-jsx-runtime.edge-light.cjs.mjs", - "default": "./jsx-runtime/dist/emotion-react-jsx-runtime.edge-light.cjs.js" - }, - browser: { - module: "./jsx-runtime/dist/emotion-react-jsx-runtime.browser.esm.js", - "import": "./jsx-runtime/dist/emotion-react-jsx-runtime.browser.cjs.mjs", - "default": "./jsx-runtime/dist/emotion-react-jsx-runtime.browser.cjs.js" - }, - module: "./jsx-runtime/dist/emotion-react-jsx-runtime.esm.js", "import": "./jsx-runtime/dist/emotion-react-jsx-runtime.cjs.mjs", "default": "./jsx-runtime/dist/emotion-react-jsx-runtime.cjs.js" }, "./_isolated-hnrs": { - types: { - "import": "./_isolated-hnrs/dist/emotion-react-_isolated-hnrs.cjs.mjs", - "default": "./_isolated-hnrs/dist/emotion-react-_isolated-hnrs.cjs.js" + module: { + worker: "./_isolated-hnrs/dist/emotion-react-_isolated-hnrs.worker.esm.js", + browser: "./_isolated-hnrs/dist/emotion-react-_isolated-hnrs.browser.esm.js", + "default": "./_isolated-hnrs/dist/emotion-react-_isolated-hnrs.esm.js" }, - development: { - "edge-light": { - module: "./_isolated-hnrs/dist/emotion-react-_isolated-hnrs.development.edge-light.esm.js", - "import": "./_isolated-hnrs/dist/emotion-react-_isolated-hnrs.development.edge-light.cjs.mjs", - "default": "./_isolated-hnrs/dist/emotion-react-_isolated-hnrs.development.edge-light.cjs.js" - }, - worker: { - module: "./_isolated-hnrs/dist/emotion-react-_isolated-hnrs.development.edge-light.esm.js", - "import": "./_isolated-hnrs/dist/emotion-react-_isolated-hnrs.development.edge-light.cjs.mjs", - "default": "./_isolated-hnrs/dist/emotion-react-_isolated-hnrs.development.edge-light.cjs.js" - }, - workerd: { - module: "./_isolated-hnrs/dist/emotion-react-_isolated-hnrs.development.edge-light.esm.js", - "import": "./_isolated-hnrs/dist/emotion-react-_isolated-hnrs.development.edge-light.cjs.mjs", - "default": "./_isolated-hnrs/dist/emotion-react-_isolated-hnrs.development.edge-light.cjs.js" - }, - browser: { - module: "./_isolated-hnrs/dist/emotion-react-_isolated-hnrs.browser.development.esm.js", - "import": "./_isolated-hnrs/dist/emotion-react-_isolated-hnrs.browser.development.cjs.mjs", - "default": "./_isolated-hnrs/dist/emotion-react-_isolated-hnrs.browser.development.cjs.js" - }, - module: "./_isolated-hnrs/dist/emotion-react-_isolated-hnrs.development.esm.js", - "import": "./_isolated-hnrs/dist/emotion-react-_isolated-hnrs.development.cjs.mjs", - "default": "./_isolated-hnrs/dist/emotion-react-_isolated-hnrs.development.cjs.js" - }, - "edge-light": { - module: "./_isolated-hnrs/dist/emotion-react-_isolated-hnrs.edge-light.esm.js", - "import": "./_isolated-hnrs/dist/emotion-react-_isolated-hnrs.edge-light.cjs.mjs", - "default": "./_isolated-hnrs/dist/emotion-react-_isolated-hnrs.edge-light.cjs.js" - }, - worker: { - module: "./_isolated-hnrs/dist/emotion-react-_isolated-hnrs.edge-light.esm.js", - "import": "./_isolated-hnrs/dist/emotion-react-_isolated-hnrs.edge-light.cjs.mjs", - "default": "./_isolated-hnrs/dist/emotion-react-_isolated-hnrs.edge-light.cjs.js" - }, - workerd: { - module: "./_isolated-hnrs/dist/emotion-react-_isolated-hnrs.edge-light.esm.js", - "import": "./_isolated-hnrs/dist/emotion-react-_isolated-hnrs.edge-light.cjs.mjs", - "default": "./_isolated-hnrs/dist/emotion-react-_isolated-hnrs.edge-light.cjs.js" - }, - browser: { - module: "./_isolated-hnrs/dist/emotion-react-_isolated-hnrs.browser.esm.js", - "import": "./_isolated-hnrs/dist/emotion-react-_isolated-hnrs.browser.cjs.mjs", - "default": "./_isolated-hnrs/dist/emotion-react-_isolated-hnrs.browser.cjs.js" - }, - module: "./_isolated-hnrs/dist/emotion-react-_isolated-hnrs.esm.js", "import": "./_isolated-hnrs/dist/emotion-react-_isolated-hnrs.cjs.mjs", "default": "./_isolated-hnrs/dist/emotion-react-_isolated-hnrs.cjs.js" }, "./jsx-dev-runtime": { - types: { - "import": "./jsx-dev-runtime/dist/emotion-react-jsx-dev-runtime.cjs.mjs", - "default": "./jsx-dev-runtime/dist/emotion-react-jsx-dev-runtime.cjs.js" + module: { + worker: "./jsx-dev-runtime/dist/emotion-react-jsx-dev-runtime.worker.esm.js", + browser: "./jsx-dev-runtime/dist/emotion-react-jsx-dev-runtime.browser.esm.js", + "default": "./jsx-dev-runtime/dist/emotion-react-jsx-dev-runtime.esm.js" }, - development: { - "edge-light": { - module: "./jsx-dev-runtime/dist/emotion-react-jsx-dev-runtime.development.edge-light.esm.js", - "import": "./jsx-dev-runtime/dist/emotion-react-jsx-dev-runtime.development.edge-light.cjs.mjs", - "default": "./jsx-dev-runtime/dist/emotion-react-jsx-dev-runtime.development.edge-light.cjs.js" - }, - worker: { - module: "./jsx-dev-runtime/dist/emotion-react-jsx-dev-runtime.development.edge-light.esm.js", - "import": "./jsx-dev-runtime/dist/emotion-react-jsx-dev-runtime.development.edge-light.cjs.mjs", - "default": "./jsx-dev-runtime/dist/emotion-react-jsx-dev-runtime.development.edge-light.cjs.js" - }, - workerd: { - module: "./jsx-dev-runtime/dist/emotion-react-jsx-dev-runtime.development.edge-light.esm.js", - "import": "./jsx-dev-runtime/dist/emotion-react-jsx-dev-runtime.development.edge-light.cjs.mjs", - "default": "./jsx-dev-runtime/dist/emotion-react-jsx-dev-runtime.development.edge-light.cjs.js" - }, - browser: { - module: "./jsx-dev-runtime/dist/emotion-react-jsx-dev-runtime.browser.development.esm.js", - "import": "./jsx-dev-runtime/dist/emotion-react-jsx-dev-runtime.browser.development.cjs.mjs", - "default": "./jsx-dev-runtime/dist/emotion-react-jsx-dev-runtime.browser.development.cjs.js" - }, - module: "./jsx-dev-runtime/dist/emotion-react-jsx-dev-runtime.development.esm.js", - "import": "./jsx-dev-runtime/dist/emotion-react-jsx-dev-runtime.development.cjs.mjs", - "default": "./jsx-dev-runtime/dist/emotion-react-jsx-dev-runtime.development.cjs.js" - }, - "edge-light": { - module: "./jsx-dev-runtime/dist/emotion-react-jsx-dev-runtime.edge-light.esm.js", - "import": "./jsx-dev-runtime/dist/emotion-react-jsx-dev-runtime.edge-light.cjs.mjs", - "default": "./jsx-dev-runtime/dist/emotion-react-jsx-dev-runtime.edge-light.cjs.js" - }, - worker: { - module: "./jsx-dev-runtime/dist/emotion-react-jsx-dev-runtime.edge-light.esm.js", - "import": "./jsx-dev-runtime/dist/emotion-react-jsx-dev-runtime.edge-light.cjs.mjs", - "default": "./jsx-dev-runtime/dist/emotion-react-jsx-dev-runtime.edge-light.cjs.js" - }, - workerd: { - module: "./jsx-dev-runtime/dist/emotion-react-jsx-dev-runtime.edge-light.esm.js", - "import": "./jsx-dev-runtime/dist/emotion-react-jsx-dev-runtime.edge-light.cjs.mjs", - "default": "./jsx-dev-runtime/dist/emotion-react-jsx-dev-runtime.edge-light.cjs.js" - }, - browser: { - module: "./jsx-dev-runtime/dist/emotion-react-jsx-dev-runtime.browser.esm.js", - "import": "./jsx-dev-runtime/dist/emotion-react-jsx-dev-runtime.browser.cjs.mjs", - "default": "./jsx-dev-runtime/dist/emotion-react-jsx-dev-runtime.browser.cjs.js" - }, - module: "./jsx-dev-runtime/dist/emotion-react-jsx-dev-runtime.esm.js", "import": "./jsx-dev-runtime/dist/emotion-react-jsx-dev-runtime.cjs.mjs", "default": "./jsx-dev-runtime/dist/emotion-react-jsx-dev-runtime.cjs.js" }, @@ -1931,19 +1667,6 @@ var pkg = { "default": "./macro.js" } }, - imports: { - "#is-development": { - development: "./src/conditions/true.js", - "default": "./src/conditions/false.js" - }, - "#is-browser": { - "edge-light": "./src/conditions/false.js", - workerd: "./src/conditions/false.js", - worker: "./src/conditions/false.js", - browser: "./src/conditions/true.js", - "default": "./src/conditions/is-browser.js" - } - }, types: "types/index.d.ts", files: [ "src", @@ -1962,12 +1685,12 @@ var pkg = { }, dependencies: { "@babel/runtime": "^7.18.3", - "@emotion/babel-plugin": "^11.12.0", - "@emotion/cache": "^11.13.0", - "@emotion/serialize": "^1.3.1", - "@emotion/use-insertion-effect-with-fallbacks": "^1.1.0", - "@emotion/utils": "^1.4.0", - "@emotion/weak-memoize": "^0.4.0", + "@emotion/babel-plugin": "^11.11.0", + "@emotion/cache": "^11.11.0", + "@emotion/serialize": "^1.1.2", + "@emotion/use-insertion-effect-with-fallbacks": "^1.0.1", + "@emotion/utils": "^1.2.1", + "@emotion/weak-memoize": "^0.3.1", "hoist-non-react-statics": "^3.3.1" }, peerDependencies: { @@ -1980,14 +1703,14 @@ var pkg = { }, devDependencies: { "@definitelytyped/dtslint": "0.0.112", - "@emotion/css": "11.13.0", - "@emotion/css-prettifier": "1.1.4", + "@emotion/css": "11.11.0", + "@emotion/css-prettifier": "1.1.3", "@emotion/server": "11.11.0", - "@emotion/styled": "11.13.0", + "@emotion/styled": "11.11.0", "html-tag-names": "^1.1.2", react: "16.14.0", "svg-tag-names": "^1.1.1", - typescript: "^5.4.5" + typescript: "^4.5.5" }, repository: "https://github.com/emotion-js/emotion/tree/main/packages/react", publishConfig: { @@ -2003,6 +1726,10 @@ var pkg = { ], umdName: "emotionReact", exports: { + envConditions: [ + "browser", + "worker" + ], extra: { "./types/css-prop": "./types/css-prop.d.ts", "./macro": { @@ -2017,63 +1744,71 @@ var pkg = { } }; -var jsx -/*: typeof React.createElement */ -= function jsx -/*: typeof React.createElement */ -(type -/*: React.ElementType */ -, props -/*: Object */ -) { +var jsx = function jsx(type, props) { var args = arguments; - if (props == null || !_emotion_element_7a1343fa_browser_development_esm_js__WEBPACK_IMPORTED_MODULE_0__.h.call(props, 'css')) { + if (props == null || !_emotion_element_c39617d8_browser_esm_js__WEBPACK_IMPORTED_MODULE_0__.h.call(props, 'css')) { + // $FlowFixMe return react__WEBPACK_IMPORTED_MODULE_1__.createElement.apply(undefined, args); } var argsLength = args.length; var createElementArgArray = new Array(argsLength); - createElementArgArray[0] = _emotion_element_7a1343fa_browser_development_esm_js__WEBPACK_IMPORTED_MODULE_0__.E; - createElementArgArray[1] = (0,_emotion_element_7a1343fa_browser_development_esm_js__WEBPACK_IMPORTED_MODULE_0__.c)(type, props); + createElementArgArray[0] = _emotion_element_c39617d8_browser_esm_js__WEBPACK_IMPORTED_MODULE_0__.E; + createElementArgArray[1] = (0,_emotion_element_c39617d8_browser_esm_js__WEBPACK_IMPORTED_MODULE_0__.c)(type, props); for (var i = 2; i < argsLength; i++) { createElementArgArray[i] = args[i]; - } + } // $FlowFixMe + return react__WEBPACK_IMPORTED_MODULE_1__.createElement.apply(null, createElementArgArray); }; -/* -type Styles = Object | Array - -type GlobalProps = { - +styles: Styles | (Object => Styles) -} -*/ - var warnedAboutCssPropForGlobal = false; // maintain place over rerenders. // initial render from browser, insertBefore context.sheet.tags[0] or if a style hasn't been inserted there yet, appendChild // initial client-side render from SSR, use place of hydrating tag -var Global -/*: React.AbstractComponent< -GlobalProps -> */ -= /* #__PURE__ */(0,_emotion_element_7a1343fa_browser_development_esm_js__WEBPACK_IMPORTED_MODULE_0__.w)(function (props -/*: GlobalProps */ -, cache) { - if (!warnedAboutCssPropForGlobal && ( // check for className as well since the user is +var Global = /* #__PURE__ */(0,_emotion_element_c39617d8_browser_esm_js__WEBPACK_IMPORTED_MODULE_0__.w)(function (props, cache) { + if ( true && !warnedAboutCssPropForGlobal && ( // check for className as well since the user is // probably using the custom createElement which // means it will be turned into a className prop - // I don't really want to add it to the type since it shouldn't be used + // $FlowFixMe I don't really want to add it to the type since it shouldn't be used props.className || props.css)) { console.error("It looks like you're using the css prop on Global, did you mean to use the styles prop instead?"); warnedAboutCssPropForGlobal = true; } var styles = props.styles; - var serialized = (0,_emotion_serialize__WEBPACK_IMPORTED_MODULE_4__.serializeStyles)([styles], undefined, react__WEBPACK_IMPORTED_MODULE_1__.useContext(_emotion_element_7a1343fa_browser_development_esm_js__WEBPACK_IMPORTED_MODULE_0__.T)); + var serialized = (0,_emotion_serialize__WEBPACK_IMPORTED_MODULE_4__.serializeStyles)([styles], undefined, react__WEBPACK_IMPORTED_MODULE_1__.useContext(_emotion_element_c39617d8_browser_esm_js__WEBPACK_IMPORTED_MODULE_0__.T)); + + if (!_emotion_element_c39617d8_browser_esm_js__WEBPACK_IMPORTED_MODULE_0__.i) { + var _ref; + + var serializedNames = serialized.name; + var serializedStyles = serialized.styles; + var next = serialized.next; + + while (next !== undefined) { + serializedNames += ' ' + next.name; + serializedStyles += next.styles; + next = next.next; + } + + var shouldCache = cache.compat === true; + var rules = cache.insert("", { + name: serializedNames, + styles: serializedStyles + }, cache.sheet, shouldCache); + + if (shouldCache) { + return null; + } + + return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1__.createElement("style", (_ref = {}, _ref["data-emotion"] = cache.key + "-global " + serializedNames, _ref.dangerouslySetInnerHTML = { + __html: rules + }, _ref.nonce = cache.sheet.nonce, _ref)); + } // yes, i know these hooks are used conditionally // but it is based on a constant that will never change at runtime // it's effectively like having two implementations and switching them out // so it's not actually breaking anything @@ -2089,10 +1824,9 @@ GlobalProps container: cache.sheet.container, speedy: cache.sheet.isSpeedy }); - var rehydrating = false; - var node - /*: HTMLStyleElement | null*/ - = document.querySelector("style[data-emotion=\"" + key + " " + serialized.name + "\"]"); + var rehydrating = false; // $FlowFixMe + + var node = document.querySelector("style[data-emotion=\"" + key + " " + serialized.name + "\"]"); if (cache.sheet.tags.length) { sheet.before = cache.sheet.tags[0]; @@ -2137,15 +1871,11 @@ GlobalProps return null; }); -{ +if (true) { Global.displayName = 'EmotionGlobal'; } -/* import type { Interpolation, SerializedStyles } from '@emotion/utils' */ - -function css() -/*: SerializedStyles */ -{ +function css() { for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } @@ -2153,20 +1883,10 @@ function css() return (0,_emotion_serialize__WEBPACK_IMPORTED_MODULE_4__.serializeStyles)(args); } -/* -type Keyframes = {| - name: string, - styles: string, - anim: 1, - toString: () => string -|} & string -*/ - -var keyframes = function - /*: Keyframes */ -keyframes() { +var keyframes = function keyframes() { var insertable = css.apply(void 0, arguments); - var name = "animation-" + insertable.name; + var name = "animation-" + insertable.name; // $FlowFixMe + return { name: name, styles: "@keyframes " + name + "{" + insertable.styles + "}", @@ -2177,21 +1897,7 @@ keyframes() { }; }; -/* -type ClassNameArg = - | string - | boolean - | { [key: string]: boolean } - | Array - | null - | void -*/ - -var classnames = function - /*: string */ -classnames(args -/*: Array */ -) { +var classnames = function classnames(args) { var len = args.length; var i = 0; var cls = ''; @@ -2210,7 +1916,7 @@ classnames(args if (Array.isArray(arg)) { toAdd = classnames(arg); } else { - if (arg.styles !== undefined && arg.name !== undefined) { + if ( true && arg.styles !== undefined && arg.name !== undefined) { console.error('You have passed styles created with `css` from `@emotion/react` package to the `cx`.\n' + '`cx` is meant to compose class names (strings) so you should convert those styles to a class name by passing them to the `css` received from component.'); } @@ -2242,13 +1948,7 @@ classnames(args return cls; }; -function merge(registered -/*: Object */ -, css -/*: (...args: Array) => string */ -, className -/*: string */ -) { +function merge(registered, css, className) { var registeredStyles = []; var rawClassName = (0,_emotion_utils__WEBPACK_IMPORTED_MODULE_2__.getRegisteredStyles)(registered, registeredStyles, className); @@ -2271,24 +1971,13 @@ var Insertion = function Insertion(_ref) { return null; }; -/* -type Props = { - children: ({ - css: (...args: any) => string, - cx: (...args: Array) => string, - theme: Object - }) => React.Node -} */ - -var ClassNames -/*: React.AbstractComponent*/ -= /* #__PURE__ */(0,_emotion_element_7a1343fa_browser_development_esm_js__WEBPACK_IMPORTED_MODULE_0__.w)(function (props, cache) { +var ClassNames = /* #__PURE__ */(0,_emotion_element_c39617d8_browser_esm_js__WEBPACK_IMPORTED_MODULE_0__.w)(function (props, cache) { var hasRendered = false; var serializedArr = []; var css = function css() { - if (hasRendered && isDevelopment) { + if (hasRendered && "development" !== 'production') { throw new Error('css can only be used during render'); } @@ -2304,7 +1993,7 @@ var ClassNames }; var cx = function cx() { - if (hasRendered && isDevelopment) { + if (hasRendered && "development" !== 'production') { throw new Error('cx can only be used during render'); } @@ -2318,7 +2007,7 @@ var ClassNames var content = { css: css, cx: cx, - theme: react__WEBPACK_IMPORTED_MODULE_1__.useContext(_emotion_element_7a1343fa_browser_development_esm_js__WEBPACK_IMPORTED_MODULE_0__.T) + theme: react__WEBPACK_IMPORTED_MODULE_1__.useContext(_emotion_element_c39617d8_browser_esm_js__WEBPACK_IMPORTED_MODULE_0__.T) }; var ele = props.children(content); hasRendered = true; @@ -2328,12 +2017,12 @@ var ClassNames }), ele); }); -{ +if (true) { ClassNames.displayName = 'EmotionClassNames'; } -{ - var isBrowser = typeof document !== 'undefined'; // #1727, #2905 for some reason Jest and Vitest evaluate modules twice if some consuming module gets mocked +if (true) { + var isBrowser = "object" !== 'undefined'; // #1727, #2905 for some reason Jest and Vitest evaluate modules twice if some consuming module gets mocked var isTestEnv = typeof jest !== 'undefined' || typeof vi !== 'undefined'; @@ -2357,10 +2046,10 @@ var ClassNames /***/ }), -/***/ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/@emotion/serialize/dist/emotion-serialize.development.esm.js": -/*!**************************************************************************************************************************!*\ - !*** ./var/plugins/System/PSC/Invoice/Webpack/node_modules/@emotion/serialize/dist/emotion-serialize.development.esm.js ***! - \**************************************************************************************************************************/ +/***/ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/@emotion/serialize/dist/emotion-serialize.browser.esm.js": +/*!**********************************************************************************************************************!*\ + !*** ./var/plugins/System/PSC/Invoice/Webpack/node_modules/@emotion/serialize/dist/emotion-serialize.browser.esm.js ***! + \**********************************************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; @@ -2375,8 +2064,6 @@ __webpack_require__.r(__webpack_exports__); -var isDevelopment = true; - var ILLEGAL_ESCAPE_SEQUENCE_ERROR = "You have illegal escape sequence in your template literal, most likely inside content's property value.\nBecause you write your CSS inside a JavaScript string you actually have to do double escaping, so for example \"content: '\\00d7';\" should become \"content: '\\\\00d7';\".\nYou can read more about this here:\nhttps://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_literals#ES2018_revision_of_illegal_escape_sequences"; var UNDEFINED_AS_OBJECT_KEY_ERROR = "You have passed in falsy value as style object's key (can happen when in example you pass unexported component as computed key)."; var hyphenateRegex = /[A-Z]|^ms/g; @@ -2419,7 +2106,7 @@ var processStyleValue = function processStyleValue(key, value) { return value; }; -{ +if (true) { var contentValuePattern = /(var|attr|counters?|url|element|(((repeating-)?(linear|radial))|conic)-gradient)\(|(no-)?(open|close)-quote/; var contentValues = ['normal', 'none', 'initial', 'inherit', 'unset']; var oldProcessStyleValue = processStyleValue; @@ -2454,14 +2141,12 @@ function handleInterpolation(mergedProps, registered, interpolation) { return ''; } - var componentSelector = interpolation; - - if (componentSelector.__emotion_styles !== undefined) { - if (String(componentSelector) === 'NO_COMPONENT_SELECTOR') { + if (interpolation.__emotion_styles !== undefined) { + if ( true && interpolation.toString() === 'NO_COMPONENT_SELECTOR') { throw new Error(noComponentSelectorMessage); } - return componentSelector; + return interpolation; } switch (typeof interpolation) { @@ -2472,21 +2157,17 @@ function handleInterpolation(mergedProps, registered, interpolation) { case 'object': { - var keyframes = interpolation; - - if (keyframes.anim === 1) { + if (interpolation.anim === 1) { cursor = { - name: keyframes.name, - styles: keyframes.styles, + name: interpolation.name, + styles: interpolation.styles, next: cursor }; - return keyframes.name; + return interpolation.name; } - var serializedStyles = interpolation; - - if (serializedStyles.styles !== undefined) { - var next = serializedStyles.next; + if (interpolation.styles !== undefined) { + var next = interpolation.next; if (next !== undefined) { // not the most efficient thing ever but this is a pretty rare case @@ -2501,10 +2182,10 @@ function handleInterpolation(mergedProps, registered, interpolation) { } } - var styles = serializedStyles.styles + ";"; + var styles = interpolation.styles + ";"; - if (serializedStyles.map !== undefined) { - styles += serializedStyles.map; + if ( true && interpolation.map !== undefined) { + styles += interpolation.map; } return styles; @@ -2520,7 +2201,7 @@ function handleInterpolation(mergedProps, registered, interpolation) { var result = interpolation(mergedProps); cursor = previousCursor; return handleInterpolation(mergedProps, registered, result); - } else { + } else if (true) { console.error('Functions that are interpolated in css calls will be stringified.\n' + 'If you want to have a css call based on props, create a function that returns a css call like this\n' + 'let dynamicStyle = (props) => css`color: ${props.color}`\n' + 'It can be called directly with props or interpolated in a styled call like this\n' + "let SomeComponent = styled('div')`${dynamicStyle}`"); } @@ -2528,16 +2209,16 @@ function handleInterpolation(mergedProps, registered, interpolation) { } case 'string': - { + if (true) { var matched = []; - var replaced = interpolation.replace(animationRegex, function (_match, _p1, p2) { + var replaced = interpolation.replace(animationRegex, function (match, p1, p2) { var fakeVarName = "animation" + matched.length; matched.push("const " + fakeVarName + " = keyframes`" + p2.replace(/^@keyframes animation-\w+/, '') + "`"); return "${" + fakeVarName + "}"; }); if (matched.length) { - console.error("`keyframes` output got interpolated into plain string, please wrap it with `css`.\n\nInstead of doing this:\n\n" + [].concat(matched, ["`" + replaced + "`"]).join('\n') + "\n\nYou should wrap it with `css` like this:\n\ncss`" + replaced + "`"); + console.error('`keyframes` output got interpolated into plain string, please wrap it with `css`.\n\n' + 'Instead of doing this:\n\n' + [].concat(matched, ["`" + replaced + "`"]).join('\n') + '\n\nYou should wrap it with `css` like this:\n\n' + ("css`" + replaced + "`")); } } @@ -2545,14 +2226,12 @@ function handleInterpolation(mergedProps, registered, interpolation) { } // finalize string values (regular strings and functions interpolated into css calls) - var asString = interpolation; - if (registered == null) { - return asString; + return interpolation; } - var cached = registered[asString]; - return cached !== undefined ? cached : asString; + var cached = registered[interpolation]; + return cached !== undefined ? cached : interpolation; } function createStringFromObject(mergedProps, registered, obj) { @@ -2563,46 +2242,44 @@ function createStringFromObject(mergedProps, registered, obj) { string += handleInterpolation(mergedProps, registered, obj[i]) + ";"; } } else { - for (var key in obj) { - var value = obj[key]; + for (var _key in obj) { + var value = obj[_key]; if (typeof value !== 'object') { - var asString = value; - - if (registered != null && registered[asString] !== undefined) { - string += key + "{" + registered[asString] + "}"; - } else if (isProcessableValue(asString)) { - string += processStyleName(key) + ":" + processStyleValue(key, asString) + ";"; + if (registered != null && registered[value] !== undefined) { + string += _key + "{" + registered[value] + "}"; + } else if (isProcessableValue(value)) { + string += processStyleName(_key) + ":" + processStyleValue(_key, value) + ";"; } } else { - if (key === 'NO_COMPONENT_SELECTOR' && isDevelopment) { + if (_key === 'NO_COMPONENT_SELECTOR' && "development" !== 'production') { throw new Error(noComponentSelectorMessage); } if (Array.isArray(value) && typeof value[0] === 'string' && (registered == null || registered[value[0]] === undefined)) { for (var _i = 0; _i < value.length; _i++) { if (isProcessableValue(value[_i])) { - string += processStyleName(key) + ":" + processStyleValue(key, value[_i]) + ";"; + string += processStyleName(_key) + ":" + processStyleValue(_key, value[_i]) + ";"; } } } else { var interpolated = handleInterpolation(mergedProps, registered, value); - switch (key) { + switch (_key) { case 'animation': case 'animationName': { - string += processStyleName(key) + ":" + interpolated + ";"; + string += processStyleName(_key) + ":" + interpolated + ";"; break; } default: { - if (key === 'undefined') { + if ( true && _key === 'undefined') { console.error(UNDEFINED_AS_OBJECT_KEY_ERROR); } - string += key + "{" + interpolated + "}"; + string += _key + "{" + interpolated + "}"; } } } @@ -2613,17 +2290,17 @@ function createStringFromObject(mergedProps, registered, obj) { return string; } -var labelPattern = /label:\s*([^\s;{]+)\s*(;|$)/g; +var labelPattern = /label:\s*([^\s;\n{]+)\s*(;|$)/g; var sourceMapPattern; -{ +if (true) { sourceMapPattern = /\/\*#\ssourceMappingURL=data:application\/json;\S+\s+\*\//g; } // this is the cursor for keyframes // keyframes are stored on the SerializedStyles object as a linked list var cursor; -function serializeStyles(args, registered, mergedProps) { +var serializeStyles = function serializeStyles(args, registered, mergedProps) { if (args.length === 1 && typeof args[0] === 'object' && args[0] !== null && args[0].styles !== undefined) { return args[0]; } @@ -2637,13 +2314,11 @@ function serializeStyles(args, registered, mergedProps) { stringMode = false; styles += handleInterpolation(mergedProps, registered, strings); } else { - var asTemplateStringsArr = strings; - - if (asTemplateStringsArr[0] === undefined) { + if ( true && strings[0] === undefined) { console.error(ILLEGAL_ESCAPE_SEQUENCE_ERROR); } - styles += asTemplateStringsArr[0]; + styles += strings[0]; } // we start at 1 since we've already handled the first arg @@ -2651,19 +2326,17 @@ function serializeStyles(args, registered, mergedProps) { styles += handleInterpolation(mergedProps, registered, args[i]); if (stringMode) { - var templateStringsArr = strings; - - if (templateStringsArr[i] === undefined) { + if ( true && strings[i] === undefined) { console.error(ILLEGAL_ESCAPE_SEQUENCE_ERROR); } - styles += templateStringsArr[i]; + styles += strings[i]; } } var sourceMap; - { + if (true) { styles = styles.replace(sourceMapPattern, function (match) { sourceMap = match; return ''; @@ -2676,13 +2349,15 @@ function serializeStyles(args, registered, mergedProps) { var match; // https://esbench.com/bench/5b809c2cf2949800a0f61fb5 while ((match = labelPattern.exec(styles)) !== null) { - identifierName += '-' + match[1]; + identifierName += '-' + // $FlowFixMe we know it's not null + match[1]; } var name = (0,_emotion_hash__WEBPACK_IMPORTED_MODULE_0__["default"])(styles) + identifierName; - { - var devStyles = { + if (true) { + // $FlowFixMe SerializedStyles type doesn't have toString property (and we don't want to add it) + return { name: name, styles: styles, map: sourceMap, @@ -2691,19 +2366,24 @@ function serializeStyles(args, registered, mergedProps) { return "You have tried to stringify object returned from `css` function. It isn't supposed to be used directly (e.g. as value of the `className` prop), but rather handed to emotion so it can handle it (e.g. as value of `css` prop)."; } }; - return devStyles; } -} + + return { + name: name, + styles: styles, + next: cursor + }; +}; /***/ }), -/***/ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/@emotion/sheet/dist/emotion-sheet.development.esm.js": -/*!******************************************************************************************************************!*\ - !*** ./var/plugins/System/PSC/Invoice/Webpack/node_modules/@emotion/sheet/dist/emotion-sheet.development.esm.js ***! - \******************************************************************************************************************/ +/***/ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/@emotion/sheet/dist/emotion-sheet.browser.esm.js": +/*!**************************************************************************************************************!*\ + !*** ./var/plugins/System/PSC/Invoice/Webpack/node_modules/@emotion/sheet/dist/emotion-sheet.browser.esm.js ***! + \**************************************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; @@ -2711,8 +2391,6 @@ __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "StyleSheet": () => (/* binding */ StyleSheet) /* harmony export */ }); -var isDevelopment = true; - /* Based off glamor's StyleSheet, thanks Sunil ❤️ @@ -2735,9 +2413,10 @@ styleSheet.flush() - empties the stylesheet of all its contents */ - +// $FlowFixMe function sheetForTag(tag) { if (tag.sheet) { + // $FlowFixMe return tag.sheet; } // this weirdness brought to you by firefox @@ -2746,13 +2425,10 @@ function sheetForTag(tag) { for (var i = 0; i < document.styleSheets.length; i++) { if (document.styleSheets[i].ownerNode === tag) { + // $FlowFixMe return document.styleSheets[i]; } - } // this function should always return with a value - // TS can't understand it though so we make it stop complaining here - - - return undefined; + } } function createStyleElement(options) { @@ -2793,7 +2469,7 @@ var StyleSheet = /*#__PURE__*/function () { _this.tags.push(tag); }; - this.isSpeedy = options.speedy === undefined ? !isDevelopment : options.speedy; + this.isSpeedy = options.speedy === undefined ? "development" === 'production' : options.speedy; this.tags = []; this.ctr = 0; this.nonce = options.nonce; // key is the value of the data-emotion attribute, it's used to identify different sheets @@ -2821,7 +2497,7 @@ var StyleSheet = /*#__PURE__*/function () { var tag = this.tags[this.tags.length - 1]; - { + if (true) { var isImportRule = rule.charCodeAt(0) === 64 && rule.charCodeAt(1) === 105; if (isImportRule && this._alreadyInsertedOrderInsensitiveRule) { @@ -2830,7 +2506,6 @@ var StyleSheet = /*#__PURE__*/function () { // so we report this error at all times console.error("You're attempting to insert the following rule:\n" + rule + '\n\n`@import` rules must be before all other types of rules in a stylesheet but other rules have already been inserted. Please ensure that `@import` rules are before all other rules.'); } - this._alreadyInsertedOrderInsensitiveRule = this._alreadyInsertedOrderInsensitiveRule || !isImportRule; } @@ -2842,7 +2517,7 @@ var StyleSheet = /*#__PURE__*/function () { // the big drawback is that the css won't be editable in devtools sheet.insertRule(rule, sheet.cssRules.length); } catch (e) { - if (!/:(-moz-placeholder|-moz-focus-inner|-moz-focusring|-ms-input-placeholder|-moz-read-write|-moz-read-only|-ms-clear|-ms-expand|-ms-reveal){/.test(rule)) { + if ( true && !/:(-moz-placeholder|-moz-focus-inner|-moz-focusring|-ms-input-placeholder|-moz-read-write|-moz-read-only|-ms-clear|-ms-expand|-ms-reveal){/.test(rule)) { console.error("There was a problem inserting the following rule: \"" + rule + "\"", e); } } @@ -2854,15 +2529,14 @@ var StyleSheet = /*#__PURE__*/function () { }; _proto.flush = function flush() { + // $FlowFixMe this.tags.forEach(function (tag) { - var _tag$parentNode; - - return (_tag$parentNode = tag.parentNode) == null ? void 0 : _tag$parentNode.removeChild(tag); + return tag.parentNode && tag.parentNode.removeChild(tag); }); this.tags = []; this.ctr = 0; - { + if (true) { this._alreadyInsertedOrderInsensitiveRule = false; } }; @@ -2920,7 +2594,6 @@ var unitlessKeys = { opacity: 1, order: 1, orphans: 1, - scale: 1, tabSize: 1, widows: 1, zIndex: 1, @@ -2984,14 +2657,13 @@ __webpack_require__.r(__webpack_exports__); /* harmony export */ "insertStyles": () => (/* binding */ insertStyles), /* harmony export */ "registerStyles": () => (/* binding */ registerStyles) /* harmony export */ }); -var isBrowser = true; - +var isBrowser = "object" !== 'undefined'; function getRegisteredStyles(registered, registeredStyles, classNames) { var rawClassName = ''; classNames.split(' ').forEach(function (className) { if (registered[className] !== undefined) { registeredStyles.push(registered[className] + ";"); - } else if (className) { + } else { rawClassName += className + " "; } }); @@ -3045,11 +2717,11 @@ __webpack_require__.r(__webpack_exports__); /* harmony export */ "default": () => (/* binding */ weakMemoize) /* harmony export */ }); var weakMemoize = function weakMemoize(func) { + // $FlowFixMe flow doesn't include all non-primitive types as allowed for weakmaps var cache = new WeakMap(); return function (arg) { if (cache.has(arg)) { - // Use non-null assertion because we just checked that the cache `has` it - // This allows us to remove `undefined` from the return value + // $FlowFixMe return cache.get(arg); } @@ -3087,9 +2759,9 @@ __webpack_require__.r(__webpack_exports__); /* harmony export */ "autoPlacement": () => (/* reexport safe */ _floating_ui_react_dom__WEBPACK_IMPORTED_MODULE_1__.autoPlacement), /* harmony export */ "autoUpdate": () => (/* reexport safe */ _floating_ui_react_dom__WEBPACK_IMPORTED_MODULE_2__.autoUpdate), /* harmony export */ "computePosition": () => (/* reexport safe */ _floating_ui_react_dom__WEBPACK_IMPORTED_MODULE_2__.computePosition), -/* harmony export */ "detectOverflow": () => (/* reexport safe */ _floating_ui_react_dom__WEBPACK_IMPORTED_MODULE_2__.detectOverflow), +/* harmony export */ "detectOverflow": () => (/* reexport safe */ _floating_ui_react_dom__WEBPACK_IMPORTED_MODULE_3__.detectOverflow), /* harmony export */ "flip": () => (/* reexport safe */ _floating_ui_react_dom__WEBPACK_IMPORTED_MODULE_1__.flip), -/* harmony export */ "getOverflowAncestors": () => (/* reexport safe */ _floating_ui_react_dom__WEBPACK_IMPORTED_MODULE_3__.getOverflowAncestors), +/* harmony export */ "getOverflowAncestors": () => (/* reexport safe */ _floating_ui_react_dom__WEBPACK_IMPORTED_MODULE_2__.getOverflowAncestors), /* harmony export */ "hide": () => (/* reexport safe */ _floating_ui_react_dom__WEBPACK_IMPORTED_MODULE_1__.hide), /* harmony export */ "inline": () => (/* reexport safe */ _floating_ui_react_dom__WEBPACK_IMPORTED_MODULE_1__.inline), /* harmony export */ "inner": () => (/* binding */ inner), @@ -3126,10 +2798,11 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _floating_ui_react_utils__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @floating-ui/react/utils */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/@floating-ui/react/dist/floating-ui.react.utils.mjs"); /* harmony import */ var _floating_ui_utils__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @floating-ui/utils */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/@floating-ui/utils/dist/floating-ui.utils.mjs"); -/* harmony import */ var _floating_ui_react_dom__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @floating-ui/react-dom */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/@floating-ui/dom/dist/floating-ui.dom.mjs"); -/* harmony import */ var _floating_ui_react_dom__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @floating-ui/utils/dom */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/@floating-ui/utils/dist/floating-ui.utils.dom.mjs"); +/* harmony import */ var _floating_ui_react_dom__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @floating-ui/react-dom */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/@floating-ui/dom/dist/floating-ui.dom.browser.mjs"); /* harmony import */ var _floating_ui_react_dom__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @floating-ui/react-dom */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/@floating-ui/react-dom/dist/floating-ui.react-dom.mjs"); -/* harmony import */ var tabbable__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! tabbable */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/tabbable/dist/index.esm.js"); +/* harmony import */ var _floating_ui_react_dom__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @floating-ui/react-dom */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/@floating-ui/core/dist/floating-ui.core.mjs"); +/* harmony import */ var _floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @floating-ui/utils/dom */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/@floating-ui/utils/dist/floating-ui.utils.dom.mjs"); +/* harmony import */ var tabbable__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! tabbable */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/tabbable/dist/index.esm.js"); /* harmony import */ var react_dom__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! react-dom */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/react-dom/index.js"); @@ -4202,7 +3875,7 @@ function useHover(context, props) { } })(event); } - if ((0,_floating_ui_react_dom__WEBPACK_IMPORTED_MODULE_3__.isElement)(domReference)) { + if ((0,_floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_7__.isElement)(domReference)) { const ref = domReference; open && ref.addEventListener('mouseleave', onScrollMouseLeave); floating == null || floating.addEventListener('mouseleave', onScrollMouseLeave); @@ -4235,7 +3908,7 @@ function useHover(context, props) { body.setAttribute(safePolygonIdentifier, ''); body.style.pointerEvents = 'none'; performedPointerEventsMutationRef.current = true; - if ((0,_floating_ui_react_dom__WEBPACK_IMPORTED_MODULE_3__.isElement)(domReference) && floating) { + if ((0,_floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_7__.isElement)(domReference) && floating) { var _tree$nodesRef$curren; const ref = domReference; const parentFloating = tree == null || (_tree$nodesRef$curren = tree.nodesRef.current.find(node => node.id === parentId)) == null || (_tree$nodesRef$curren = _tree$nodesRef$curren.context) == null ? void 0 : _tree$nodesRef$curren.elements.floating; @@ -4583,7 +4256,7 @@ const getTabbableOptions = () => ({ typeof ResizeObserver === 'function' && ResizeObserver.toString().includes('[native code]') ? 'full' : 'none' }); function getTabbableIn(container, direction) { - const allTabbable = (0,tabbable__WEBPACK_IMPORTED_MODULE_7__.tabbable)(container, getTabbableOptions()); + const allTabbable = (0,tabbable__WEBPACK_IMPORTED_MODULE_8__.tabbable)(container, getTabbableOptions()); if (direction === 'prev') { allTabbable.reverse(); } @@ -4603,7 +4276,7 @@ function isOutsideEvent(event, container) { return !relatedTarget || !(0,_floating_ui_react_utils__WEBPACK_IMPORTED_MODULE_5__.contains)(containerElement, relatedTarget); } function disableFocusInside(container) { - const tabbableElements = (0,tabbable__WEBPACK_IMPORTED_MODULE_7__.tabbable)(container, getTabbableOptions()); + const tabbableElements = (0,tabbable__WEBPACK_IMPORTED_MODULE_8__.tabbable)(container, getTabbableOptions()); tabbableElements.forEach(element => { element.dataset.tabindex = element.getAttribute('tabindex') || ''; element.setAttribute('tabindex', '-1'); @@ -4714,7 +4387,7 @@ function useFloatingPortalNode(_temp) { index(() => { if (portalNodeRef.current) return; let container = root || (portalContext == null ? void 0 : portalContext.portalNode); - if (container && !(0,_floating_ui_react_dom__WEBPACK_IMPORTED_MODULE_3__.isElement)(container)) container = container.current; + if (container && !(0,_floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_7__.isElement)(container)) container = container.current; container = container || document.body; let idWrapper = null; if (id) { @@ -4837,9 +4510,9 @@ let previouslyFocusedElements = []; function addPreviouslyFocusedElement(element) { previouslyFocusedElements = previouslyFocusedElements.filter(el => el.isConnected); let tabbableEl = element; - if (!tabbableEl || (0,_floating_ui_react_dom__WEBPACK_IMPORTED_MODULE_3__.getNodeName)(tabbableEl) === 'body') return; - if (!(0,tabbable__WEBPACK_IMPORTED_MODULE_7__.isTabbable)(tabbableEl, getTabbableOptions())) { - const tabbableChild = (0,tabbable__WEBPACK_IMPORTED_MODULE_7__.tabbable)(tabbableEl, getTabbableOptions())[0]; + if (!tabbableEl || (0,_floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_7__.getNodeName)(tabbableEl) === 'body') return; + if (!(0,tabbable__WEBPACK_IMPORTED_MODULE_8__.isTabbable)(tabbableEl, getTabbableOptions())) { + const tabbableChild = (0,tabbable__WEBPACK_IMPORTED_MODULE_8__.tabbable)(tabbableEl, getTabbableOptions())[0]; if (!tabbableChild) return; tabbableEl = tabbableChild; } @@ -4912,7 +4585,7 @@ function FloatingFocusManager(props) { if (container === void 0) { container = floating; } - return container ? (0,tabbable__WEBPACK_IMPORTED_MODULE_7__.tabbable)(container, getTabbableOptions()) : []; + return container ? (0,tabbable__WEBPACK_IMPORTED_MODULE_8__.tabbable)(container, getTabbableOptions()) : []; }, [floating]); const getTabbableElements = react__WEBPACK_IMPORTED_MODULE_0__.useCallback(container => { const content = getTabbableContent(container); @@ -4987,7 +4660,7 @@ function FloatingFocusManager(props) { } }); } - if (floating && (0,_floating_ui_react_dom__WEBPACK_IMPORTED_MODULE_3__.isHTMLElement)(domReference)) { + if (floating && (0,_floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_7__.isHTMLElement)(domReference)) { domReference.addEventListener('focusout', handleFocusOutside); domReference.addEventListener('pointerdown', handlePointerDown); !modal && floating.addEventListener('focusout', handleFocusOutside); @@ -5073,7 +4746,7 @@ function FloatingFocusManager(props) { addPreviouslyFocusedElement(refs.domReference.current); } const returnElement = getPreviouslyFocusedElement(); - if (returnFocusRef.current && !preventReturnFocusRef.current && (0,_floating_ui_react_dom__WEBPACK_IMPORTED_MODULE_3__.isHTMLElement)(returnElement) && ( + if (returnFocusRef.current && !preventReturnFocusRef.current && (0,_floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_7__.isHTMLElement)(returnElement) && ( // If the focus moved somewhere else after mount, avoid returning focus // since it likely entered a different element which should be // respected: https://github.com/floating-ui/floating-ui/issues/2607 @@ -5258,7 +4931,7 @@ const FloatingOverlay = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.forwardR }); function isButtonTarget(event) { - return (0,_floating_ui_react_dom__WEBPACK_IMPORTED_MODULE_3__.isHTMLElement)(event.target) && event.target.tagName === 'BUTTON'; + return (0,_floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_7__.isHTMLElement)(event.target) && event.target.tagName === 'BUTTON'; } function isSpaceIgnored(element) { return (0,_floating_ui_react_utils__WEBPACK_IMPORTED_MODULE_5__.isTypeableElement)(element); @@ -5486,7 +5159,7 @@ function useClientPoint(context, props) { const addListener = react__WEBPACK_IMPORTED_MODULE_0__.useCallback(() => { // Explicitly specified `x`/`y` coordinates shouldn't add a listener. if (!openCheck || !enabled || x != null || y != null) return; - const win = (0,_floating_ui_react_dom__WEBPACK_IMPORTED_MODULE_3__.getWindow)(refs.floating.current); + const win = (0,_floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_7__.getWindow)(refs.floating.current); function handleMouseMove(event) { const target = (0,_floating_ui_react_utils__WEBPACK_IMPORTED_MODULE_5__.getTarget)(event); if (!(0,_floating_ui_react_utils__WEBPACK_IMPORTED_MODULE_5__.contains)(refs.floating.current, target)) { @@ -5664,10 +5337,10 @@ function useDismiss(context, props) { const target = (0,_floating_ui_react_utils__WEBPACK_IMPORTED_MODULE_5__.getTarget)(event); const inertSelector = "[" + createAttribute('inert') + "]"; const markers = (0,_floating_ui_react_utils__WEBPACK_IMPORTED_MODULE_5__.getDocument)(floating).querySelectorAll(inertSelector); - let targetRootAncestor = (0,_floating_ui_react_dom__WEBPACK_IMPORTED_MODULE_3__.isElement)(target) ? target : null; - while (targetRootAncestor && !(0,_floating_ui_react_dom__WEBPACK_IMPORTED_MODULE_3__.isLastTraversableNode)(targetRootAncestor)) { - const nextParent = (0,_floating_ui_react_dom__WEBPACK_IMPORTED_MODULE_3__.getParentNode)(targetRootAncestor); - if ((0,_floating_ui_react_dom__WEBPACK_IMPORTED_MODULE_3__.isLastTraversableNode)(nextParent) || !(0,_floating_ui_react_dom__WEBPACK_IMPORTED_MODULE_3__.isElement)(nextParent)) { + let targetRootAncestor = (0,_floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_7__.isElement)(target) ? target : null; + while (targetRootAncestor && !(0,_floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_7__.isLastTraversableNode)(targetRootAncestor)) { + const nextParent = (0,_floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_7__.getParentNode)(targetRootAncestor); + if ((0,_floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_7__.isLastTraversableNode)(nextParent) || !(0,_floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_7__.isElement)(nextParent)) { break; } targetRootAncestor = nextParent; @@ -5675,7 +5348,7 @@ function useDismiss(context, props) { // Check if the click occurred on a third-party element injected after the // floating element rendered. - if (markers.length && (0,_floating_ui_react_dom__WEBPACK_IMPORTED_MODULE_3__.isElement)(target) && !(0,_floating_ui_react_utils__WEBPACK_IMPORTED_MODULE_5__.isRootElement)(target) && + if (markers.length && (0,_floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_7__.isElement)(target) && !(0,_floating_ui_react_utils__WEBPACK_IMPORTED_MODULE_5__.isRootElement)(target) && // Clicked on a direct ancestor (e.g. FloatingOverlay). !(0,_floating_ui_react_utils__WEBPACK_IMPORTED_MODULE_5__.contains)(target, floating) && // If the target root element contains none of the markers, then the @@ -5685,7 +5358,7 @@ function useDismiss(context, props) { } // Check if the click occurred on the scrollbar - if ((0,_floating_ui_react_dom__WEBPACK_IMPORTED_MODULE_3__.isHTMLElement)(target) && floating) { + if ((0,_floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_7__.isHTMLElement)(target) && floating) { // In Firefox, `target.scrollWidth > target.clientWidth` for inline // elements. const canScrollX = target.clientWidth > 0 && target.scrollWidth > target.clientWidth; @@ -5697,7 +5370,7 @@ function useDismiss(context, props) { // check for. Plus, for modal dialogs with backdrops, it is more // important that the backdrop is checked but not so much the window. if (canScrollY) { - const isRTL = (0,_floating_ui_react_dom__WEBPACK_IMPORTED_MODULE_3__.getComputedStyle)(target).direction === 'rtl'; + const isRTL = (0,_floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_7__.getComputedStyle)(target).direction === 'rtl'; if (isRTL) { xCond = event.offsetX <= target.offsetWidth - target.clientWidth; } @@ -5752,14 +5425,14 @@ function useDismiss(context, props) { outsidePress && doc.addEventListener(outsidePressEvent, outsidePressCapture ? closeOnPressOutsideCapture : closeOnPressOutside, outsidePressCapture); let ancestors = []; if (ancestorScroll) { - if ((0,_floating_ui_react_dom__WEBPACK_IMPORTED_MODULE_3__.isElement)(domReference)) { - ancestors = (0,_floating_ui_react_dom__WEBPACK_IMPORTED_MODULE_3__.getOverflowAncestors)(domReference); + if ((0,_floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_7__.isElement)(domReference)) { + ancestors = (0,_floating_ui_react_dom__WEBPACK_IMPORTED_MODULE_2__.getOverflowAncestors)(domReference); } - if ((0,_floating_ui_react_dom__WEBPACK_IMPORTED_MODULE_3__.isElement)(floating)) { - ancestors = ancestors.concat((0,_floating_ui_react_dom__WEBPACK_IMPORTED_MODULE_3__.getOverflowAncestors)(floating)); + if ((0,_floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_7__.isElement)(floating)) { + ancestors = ancestors.concat((0,_floating_ui_react_dom__WEBPACK_IMPORTED_MODULE_2__.getOverflowAncestors)(floating)); } - if (!(0,_floating_ui_react_dom__WEBPACK_IMPORTED_MODULE_3__.isElement)(reference) && reference && reference.contextElement) { - ancestors = ancestors.concat((0,_floating_ui_react_dom__WEBPACK_IMPORTED_MODULE_3__.getOverflowAncestors)(reference.contextElement)); + if (!(0,_floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_7__.isElement)(reference) && reference && reference.contextElement) { + ancestors = ancestors.concat((0,_floating_ui_react_dom__WEBPACK_IMPORTED_MODULE_2__.getOverflowAncestors)(reference.contextElement)); } } @@ -5837,7 +5510,7 @@ function useFloating(options) { if (true) { var _options$elements; const err = 'Floating UI: Cannot pass a virtual element to the ' + '`elements.reference` option, as it must be a real DOM element. ' + 'Use `refs.setPositionReference` instead.'; - if ((_options$elements = options.elements) != null && _options$elements.reference && !(0,_floating_ui_react_dom__WEBPACK_IMPORTED_MODULE_3__.isElement)(options.elements.reference)) { + if ((_options$elements = options.elements) != null && _options$elements.reference && !(0,_floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_7__.isElement)(options.elements.reference)) { var _devMessageSet; if (!((_devMessageSet = devMessageSet) != null && _devMessageSet.has(err))) { var _devMessageSet2; @@ -5868,25 +5541,25 @@ function useFloating(options) { const events = react__WEBPACK_IMPORTED_MODULE_0__.useState(() => createPubSub())[0]; const floatingId = useId(); const setPositionReference = react__WEBPACK_IMPORTED_MODULE_0__.useCallback(node => { - const positionReference = (0,_floating_ui_react_dom__WEBPACK_IMPORTED_MODULE_3__.isElement)(node) ? { + const positionReference = (0,_floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_7__.isElement)(node) ? { getBoundingClientRect: () => node.getBoundingClientRect(), contextElement: node } : node; position.refs.setReference(positionReference); }, [position.refs]); const setReference = react__WEBPACK_IMPORTED_MODULE_0__.useCallback(node => { - if ((0,_floating_ui_react_dom__WEBPACK_IMPORTED_MODULE_3__.isElement)(node) || node === null) { + if ((0,_floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_7__.isElement)(node) || node === null) { domReferenceRef.current = node; setDomReference(node); } // Backwards-compatibility for passing a virtual element to `reference` // after it has set the DOM reference. - if ((0,_floating_ui_react_dom__WEBPACK_IMPORTED_MODULE_3__.isElement)(position.refs.reference.current) || position.refs.reference.current === null || + if ((0,_floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_7__.isElement)(position.refs.reference.current) || position.refs.reference.current === null || // Don't allow setting virtual elements using the old technique back to // `null` to support `positionReference` + an unstable `reference` // callback ref. - node !== null && !(0,_floating_ui_react_dom__WEBPACK_IMPORTED_MODULE_3__.isElement)(node)) { + node !== null && !(0,_floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_7__.isElement)(node)) { position.refs.setReference(node); } }, [position.refs]); @@ -5954,13 +5627,13 @@ function useFocus(context, props) { if (!enabled) { return; } - const win = (0,_floating_ui_react_dom__WEBPACK_IMPORTED_MODULE_3__.getWindow)(domReference); + const win = (0,_floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_7__.getWindow)(domReference); // If the reference was focused and the user left the tab/window, and the // floating element was not open, the focus should be blocked when they // return to the tab/window. function onBlur() { - if (!open && (0,_floating_ui_react_dom__WEBPACK_IMPORTED_MODULE_3__.isHTMLElement)(domReference) && domReference === (0,_floating_ui_react_utils__WEBPACK_IMPORTED_MODULE_5__.activeElement)((0,_floating_ui_react_utils__WEBPACK_IMPORTED_MODULE_5__.getDocument)(domReference))) { + if (!open && (0,_floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_7__.isHTMLElement)(domReference) && domReference === (0,_floating_ui_react_utils__WEBPACK_IMPORTED_MODULE_5__.activeElement)((0,_floating_ui_react_utils__WEBPACK_IMPORTED_MODULE_5__.getDocument)(domReference))) { blockFocusRef.current = true; } } @@ -6012,7 +5685,7 @@ function useFocus(context, props) { onFocus(event) { if (blockFocusRef.current) return; const target = (0,_floating_ui_react_utils__WEBPACK_IMPORTED_MODULE_5__.getTarget)(event.nativeEvent); - if (visibleOnly && (0,_floating_ui_react_dom__WEBPACK_IMPORTED_MODULE_3__.isElement)(target)) { + if (visibleOnly && (0,_floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_7__.isElement)(target)) { try { // Mac Safari unreliably matches `:focus-visible` on the reference // if focus was outside the page initially - use the fallback @@ -6034,7 +5707,7 @@ function useFocus(context, props) { // Hit the non-modal focus management portal guard. Focus will be // moved into the floating element immediately after. - const movedToFocusGuard = (0,_floating_ui_react_dom__WEBPACK_IMPORTED_MODULE_3__.isElement)(relatedTarget) && relatedTarget.hasAttribute(createAttribute('focus-guard')) && relatedTarget.getAttribute('data-type') === 'outside'; + const movedToFocusGuard = (0,_floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_7__.isElement)(relatedTarget) && relatedTarget.hasAttribute(createAttribute('focus-guard')) && relatedTarget.getAttribute('data-type') === 'outside'; // Wait for the window blur listener to fire. timeoutRef.current = window.setTimeout(() => { @@ -6478,7 +6151,7 @@ function useListNavigation(context, props) { if (nested && isCrossOrientationCloseKey(event.key, orientation, rtl)) { (0,_floating_ui_react_utils__WEBPACK_IMPORTED_MODULE_5__.stopEvent)(event); onOpenChange(false, event.nativeEvent, 'list-navigation'); - if ((0,_floating_ui_react_dom__WEBPACK_IMPORTED_MODULE_3__.isHTMLElement)(domReference) && !virtual) { + if ((0,_floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_7__.isHTMLElement)(domReference) && !virtual) { domReference.focus(); } return; @@ -7131,8 +6804,8 @@ const inner = props => ({ ...(await (0,_floating_ui_react_dom__WEBPACK_IMPORTED_MODULE_1__.offset)(-item.offsetTop - floating.clientTop - rects.reference.height / 2 - item.offsetHeight / 2 - innerOffset).fn(state)) }; const el = (scrollRef == null ? void 0 : scrollRef.current) || floating; - const overflow = await (0,_floating_ui_react_dom__WEBPACK_IMPORTED_MODULE_2__.detectOverflow)(getArgsWithCustomFloatingHeight(nextArgs, el.scrollHeight), detectOverflowOptions); - const refOverflow = await (0,_floating_ui_react_dom__WEBPACK_IMPORTED_MODULE_2__.detectOverflow)(nextArgs, { + const overflow = await (0,_floating_ui_react_dom__WEBPACK_IMPORTED_MODULE_3__.detectOverflow)(getArgsWithCustomFloatingHeight(nextArgs, el.scrollHeight), detectOverflowOptions); + const refOverflow = await (0,_floating_ui_react_dom__WEBPACK_IMPORTED_MODULE_3__.detectOverflow)(nextArgs, { ...detectOverflowOptions, elementContext: 'reference' }); @@ -7151,7 +6824,7 @@ const inner = props => ({ } } if (overflowRef) { - overflowRef.current = await (0,_floating_ui_react_dom__WEBPACK_IMPORTED_MODULE_2__.detectOverflow)(getArgsWithCustomFloatingHeight({ + overflowRef.current = await (0,_floating_ui_react_dom__WEBPACK_IMPORTED_MODULE_3__.detectOverflow)(getArgsWithCustomFloatingHeight({ ...nextArgs, y: nextY }, el.offsetHeight), detectOverflowOptions); @@ -7377,7 +7050,7 @@ function safePolygon(options) { // Prevent overlapping floating element from being stuck in an open-close // loop: https://github.com/floating-ui/floating-ui/issues/1910 - if (isLeave && (0,_floating_ui_react_dom__WEBPACK_IMPORTED_MODULE_3__.isElement)(event.relatedTarget) && (0,_floating_ui_react_utils__WEBPACK_IMPORTED_MODULE_5__.contains)(elements.floating, event.relatedTarget)) { + if (isLeave && (0,_floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_7__.isElement)(event.relatedTarget) && (0,_floating_ui_react_utils__WEBPACK_IMPORTED_MODULE_5__.contains)(elements.floating, event.relatedTarget)) { return; } @@ -7894,7 +7567,6 @@ __webpack_require__.r(__webpack_exports__); /* harmony export */ "UNSAFE_ErrorResponseImpl": () => (/* binding */ ErrorResponseImpl), /* harmony export */ "UNSAFE_convertRouteMatchToUiMatch": () => (/* binding */ convertRouteMatchToUiMatch), /* harmony export */ "UNSAFE_convertRoutesToDataRoutes": () => (/* binding */ convertRoutesToDataRoutes), -/* harmony export */ "UNSAFE_decodePath": () => (/* binding */ decodePath), /* harmony export */ "UNSAFE_getResolveToMatches": () => (/* binding */ getResolveToMatches), /* harmony export */ "UNSAFE_invariant": () => (/* binding */ invariant), /* harmony export */ "UNSAFE_warning": () => (/* binding */ warning), @@ -7908,7 +7580,6 @@ __webpack_require__.r(__webpack_exports__); /* harmony export */ "generatePath": () => (/* binding */ generatePath), /* harmony export */ "getStaticContextFromError": () => (/* binding */ getStaticContextFromError), /* harmony export */ "getToPathname": () => (/* binding */ getToPathname), -/* harmony export */ "isDataWithResponseInit": () => (/* binding */ isDataWithResponseInit), /* harmony export */ "isDeferredData": () => (/* binding */ isDeferredData), /* harmony export */ "isRouteErrorResponse": () => (/* binding */ isRouteErrorResponse), /* harmony export */ "joinPaths": () => (/* binding */ joinPaths), @@ -7919,14 +7590,12 @@ __webpack_require__.r(__webpack_exports__); /* harmony export */ "parsePath": () => (/* binding */ parsePath), /* harmony export */ "redirect": () => (/* binding */ redirect), /* harmony export */ "redirectDocument": () => (/* binding */ redirectDocument), -/* harmony export */ "replace": () => (/* binding */ replace), /* harmony export */ "resolvePath": () => (/* binding */ resolvePath), /* harmony export */ "resolveTo": () => (/* binding */ resolveTo), -/* harmony export */ "stripBasename": () => (/* binding */ stripBasename), -/* harmony export */ "unstable_data": () => (/* binding */ data) +/* harmony export */ "stripBasename": () => (/* binding */ stripBasename) /* harmony export */ }); /** - * @remix-run/router v1.19.2 + * @remix-run/router v1.16.0 * * Copyright (c) Remix Software Inc. * @@ -8413,7 +8082,7 @@ function convertRoutesToDataRoutes(routes, mapRouteProperties, parentPath, manif manifest = {}; } return routes.map((route, index) => { - let treePath = [...parentPath, String(index)]; + let treePath = [...parentPath, index]; let id = typeof route.id === "string" ? route.id : treePath.join("-"); invariant(route.index !== true || !route.children, "Cannot specify children on an index route"); invariant(!manifest[id], "Found a route id collision on id \"" + id + "\". Route " + "id's must be globally unique within Data Router usages"); @@ -8445,9 +8114,6 @@ function matchRoutes(routes, locationArg, basename) { if (basename === void 0) { basename = "/"; } - return matchRoutesImpl(routes, locationArg, basename, false); -} -function matchRoutesImpl(routes, locationArg, basename, allowPartial) { let location = typeof locationArg === "string" ? parsePath(locationArg) : locationArg; let pathname = stripBasename(location.pathname || "/", basename); if (pathname == null) { @@ -8464,7 +8130,7 @@ function matchRoutesImpl(routes, locationArg, basename, allowPartial) { // should be a safe operation. This avoids needing matchRoutes to be // history-aware. let decoded = decodePath(pathname); - matches = matchRouteBranch(branches[i], decoded, allowPartial); + matches = matchRouteBranch(branches[i], decoded); } return matches; } @@ -8617,10 +8283,7 @@ function compareIndexes(a, b) { // so they sort equally. 0; } -function matchRouteBranch(branch, pathname, allowPartial) { - if (allowPartial === void 0) { - allowPartial = false; - } +function matchRouteBranch(branch, pathname) { let { routesMeta } = branch; @@ -8636,18 +8299,9 @@ function matchRouteBranch(branch, pathname, allowPartial) { caseSensitive: meta.caseSensitive, end }, remainingPathname); - let route = meta.route; - if (!match && end && allowPartial && !routesMeta[routesMeta.length - 1].route.index) { - match = matchPath({ - path: meta.relativePath, - caseSensitive: meta.caseSensitive, - end: false - }, remainingPathname); - } - if (!match) { - return null; - } + if (!match) return null; Object.assign(matchedParams, match.params); + let route = meta.route; matches.push({ // TODO: Can this as be avoided? params: matchedParams, @@ -8884,7 +8538,7 @@ function getResolveToMatches(matches, v7_relativeSplatPath) { // match so we include splat values for "." links. See: // https://github.com/remix-run/react-router/issues/11052#issuecomment-1836589329 if (v7_relativeSplatPath) { - return pathMatches.map((match, idx) => idx === pathMatches.length - 1 ? match.pathname : match.pathnameBase); + return pathMatches.map((match, idx) => idx === matches.length - 1 ? match.pathname : match.pathnameBase); } return pathMatches.map(match => match.pathnameBase); } @@ -8986,22 +8640,6 @@ const json = function json(data, init) { headers })); }; -class DataWithResponseInit { - constructor(data, init) { - this.type = "DataWithResponseInit"; - this.data = data; - this.init = init || null; - } -} -/** - * Create "responses" that contain `status`/`headers` without forcing - * serialization into an actual `Response` - used by Remix single fetch - */ -function data(data, init) { - return new DataWithResponseInit(data, typeof init === "number" ? { - status: init - } : init); -} class AbortedDeferredError extends Error {} class DeferredData { constructor(data, responseInit) { @@ -9179,17 +8817,6 @@ const redirectDocument = (url, init) => { response.headers.set("X-Remix-Reload-Document", "true"); return response; }; -/** - * A redirect response that will perform a `history.replaceState` instead of a - * `history.pushState` for client-side navigation redirects. - * Sets the status code and the `Location` header. - * Defaults to "302 Found". - */ -const replace = (url, init) => { - let response = redirect(url, init); - response.headers.set("X-Remix-Replace", "true"); - return response; -}; /** * @private * Utility class we use to hold auto-unwrapped 4xx/5xx Response bodies @@ -9290,7 +8917,6 @@ function createRouter(init) { let inFlightDataRoutes; let basename = init.basename || "/"; let dataStrategyImpl = init.unstable_dataStrategy || defaultDataStrategy; - let patchRoutesOnNavigationImpl = init.unstable_patchRoutesOnNavigation; // Config driven behavior flags let future = _extends({ v7_fetcherPersist: false, @@ -9298,16 +8924,12 @@ function createRouter(init) { v7_partialHydration: false, v7_prependBasename: false, v7_relativeSplatPath: false, - v7_skipActionErrorRevalidation: false + unstable_skipActionErrorRevalidation: false }, init.future); // Cleanup function for history let unlistenHistory = null; // Externally-provided functions to call on all state changes let subscribers = new Set(); - // FIFO queue of previously discovered routes to prevent re-calling on - // subsequent navigations to the same path - let discoveredRoutesMaxSize = 1000; - let discoveredRoutes = new Set(); // Externally-provided object to hold scroll restoration locations during routing let savedScrollPositions = null; // Externally-provided function to get scroll restoration keys @@ -9323,7 +8945,7 @@ function createRouter(init) { let initialScrollRestored = init.hydrationData != null; let initialMatches = matchRoutes(dataRoutes, init.history.location, basename); let initialErrors = null; - if (initialMatches == null && !patchRoutesOnNavigationImpl) { + if (initialMatches == null) { // If we do not match a user-provided-route, fall back to the root // to allow the error boundary to take over let error = getInternalRouterError(404, { @@ -9338,36 +8960,14 @@ function createRouter(init) { [route.id]: error }; } - // In SPA apps, if the user provided a patchRoutesOnNavigation implementation and - // our initial match is a splat route, clear them out so we run through lazy - // discovery on hydration in case there's a more accurate lazy route match. - // In SSR apps (with `hydrationData`), we expect that the server will send - // up the proper matched routes so we don't want to run lazy discovery on - // initial hydration and want to hydrate into the splat route. - if (initialMatches && !init.hydrationData) { - let fogOfWar = checkFogOfWar(initialMatches, dataRoutes, init.history.location.pathname); - if (fogOfWar.active) { - initialMatches = null; - } - } let initialized; - if (!initialMatches) { - initialized = false; - initialMatches = []; - // If partial hydration and fog of war is enabled, we will be running - // `patchRoutesOnNavigation` during hydration so include any partial matches as - // the initial matches so we can properly render `HydrateFallback`'s - if (future.v7_partialHydration) { - let fogOfWar = checkFogOfWar(null, dataRoutes, init.history.location.pathname); - if (fogOfWar.active && fogOfWar.matches) { - initialMatches = fogOfWar.matches; - } - } - } else if (initialMatches.some(m => m.route.lazy)) { + let hasLazyRoutes = initialMatches.some(m => m.route.lazy); + let hasLoaders = initialMatches.some(m => m.route.loader); + if (hasLazyRoutes) { // All initialMatches need to be loaded before we're ready. If we have lazy // functions around still then we'll need to run them in initialize() initialized = false; - } else if (!initialMatches.some(m => m.route.loader)) { + } else if (!hasLoaders) { // If we've got no loaders to run, then we're good to go initialized = true; } else if (future.v7_partialHydration) { @@ -9444,7 +9044,7 @@ function createRouter(init) { let cancelledDeferredRoutes = []; // Use this internal array to capture fetcher loads that were cancelled by an // action navigation and require revalidation - let cancelledFetcherLoads = new Set(); + let cancelledFetcherLoads = []; // AbortControllers for any in-flight fetchers let fetchControllers = new Map(); // Track loads based on the order in which they started @@ -9472,12 +9072,9 @@ function createRouter(init) { // Store blocker functions in a separate Map outside of router state since // we don't need to update UI state if they change let blockerFunctions = new Map(); - // Map of pending patchRoutesOnNavigation() promises (keyed by path/matches) so - // that we only kick them off once for a given combo - let pendingPatchRoutes = new Map(); // Flag to ignore the next history update, so we can revert the URL change on // a POP navigation that was blocked by the user without touching router state - let unblockBlockerHistoryUpdate = undefined; + let ignoreNextHistoryUpdate = false; // Initialize the router, all side effects should be kicked off from here. // Implemented as a Fluent API for ease of: // let router = createRouter(init).initialize(); @@ -9492,9 +9089,8 @@ function createRouter(init) { } = _ref; // Ignore this event if it was just us resetting the URL from a // blocked POP navigation - if (unblockBlockerHistoryUpdate) { - unblockBlockerHistoryUpdate(); - unblockBlockerHistoryUpdate = undefined; + if (ignoreNextHistoryUpdate) { + ignoreNextHistoryUpdate = false; return; } warning(blockerFunctions.size === 0 || delta != null, "You are trying to use a blocker on a POP navigation to a location " + "that was not created by @remix-run/router. This will fail silently in " + "production. This can happen if you are navigating outside the router " + "via `window.history.pushState`/`window.location.hash` instead of using " + "router navigation APIs. This can also happen if you are using " + "createHashRouter and the user manually changes the URL."); @@ -9505,9 +9101,7 @@ function createRouter(init) { }); if (blockerKey && delta != null) { // Restore the URL to match the current UI, but don't update router state - let nextHistoryUpdatePromise = new Promise(resolve => { - unblockBlockerHistoryUpdate = resolve; - }); + ignoreNextHistoryUpdate = true; init.history.go(delta * -1); // Put the blocker into a blocked state updateBlocker(blockerKey, { @@ -9520,10 +9114,8 @@ function createRouter(init) { reset: undefined, location }); - // Re-do the same POP navigation we just blocked, after the url - // restoration is also complete. See: - // https://github.com/remix-run/react-router/issues/11613 - nextHistoryUpdatePromise.then(() => init.history.go(delta)); + // Re-do the same POP navigation we just blocked + init.history.go(delta); }, reset() { let blockers = new Map(state.blockers); @@ -9656,7 +9248,6 @@ function createRouter(init) { // Always respect the user flag. Otherwise don't reset on mutation // submission navigations unless they redirect let preventScrollReset = pendingPreventScrollReset === true || state.navigation.formMethod != null && isMutationMethod(state.navigation.formMethod) && ((_location$state2 = location.state) == null ? void 0 : _location$state2._isRedirect) !== true; - // Commit any in-flight routes at the end of the HMR revalidation "navigation" if (inFlightDataRoutes) { dataRoutes = inFlightDataRoutes; inFlightDataRoutes = undefined; @@ -9720,6 +9311,7 @@ function createRouter(init) { isUninterruptedRevalidation = false; isRevalidationRequired = false; cancelledDeferredRoutes = []; + cancelledFetcherLoads = []; } // Trigger a navigation event, which can either be a numerical POP or a PUSH // replace with an optional submission @@ -9822,9 +9414,7 @@ function createRouter(init) { // navigation to the navigation.location but do not trigger an uninterrupted // revalidation so that history correctly updates once the navigation completes startNavigation(pendingAction || state.historyAction, state.navigation.location, { - overrideNavigation: state.navigation, - // Proxy through any rending view transition - enableViewTransition: pendingViewTransitionEnabled === true + overrideNavigation: state.navigation }); } // Start a navigation to the given action/location. Can optionally provide a @@ -9847,17 +9437,17 @@ function createRouter(init) { let loadingNavigation = opts && opts.overrideNavigation; let matches = matchRoutes(routesToUse, location, basename); let flushSync = (opts && opts.flushSync) === true; - let fogOfWar = checkFogOfWar(matches, routesToUse, location.pathname); - if (fogOfWar.active && fogOfWar.matches) { - matches = fogOfWar.matches; - } // Short circuit with a 404 on the root error boundary if we match nothing if (!matches) { + let error = getInternalRouterError(404, { + pathname: location.pathname + }); let { - error, - notFoundMatches, + matches: notFoundMatches, route - } = handleNavigational404(location.pathname); + } = getShortCircuitMatches(routesToUse); + // Cancel all pending deferred on 404s since we don't keep any routes + cancelActiveDeferreds(); completeNavigation(location, { matches: notFoundMatches, loaderData: {}, @@ -9898,45 +9488,25 @@ function createRouter(init) { }]; } else if (opts && opts.submission && isMutationMethod(opts.submission.formMethod)) { // Call action if we received an action submission - let actionResult = await handleAction(request, location, opts.submission, matches, fogOfWar.active, { + let actionResult = await handleAction(request, location, opts.submission, matches, { replace: opts.replace, flushSync }); if (actionResult.shortCircuited) { return; } - // If we received a 404 from handleAction, it's because we couldn't lazily - // discover the destination route so we don't want to call loaders - if (actionResult.pendingActionResult) { - let [routeId, result] = actionResult.pendingActionResult; - if (isErrorResult(result) && isRouteErrorResponse(result.error) && result.error.status === 404) { - pendingNavigationController = null; - completeNavigation(location, { - matches: actionResult.matches, - loaderData: {}, - errors: { - [routeId]: result.error - } - }); - return; - } - } - matches = actionResult.matches || matches; pendingActionResult = actionResult.pendingActionResult; loadingNavigation = getLoadingNavigation(location, opts.submission); flushSync = false; - // No need to do fog of war matching again on loader execution - fogOfWar.active = false; // Create a GET request for the loaders request = createClientSideRequest(init.history, request.url, request.signal); } // Call loaders let { shortCircuited, - matches: updatedMatches, loaderData, errors - } = await handleLoaders(request, location, matches, fogOfWar.active, loadingNavigation, opts && opts.submission, opts && opts.fetcherSubmission, opts && opts.replace, opts && opts.initialHydration === true, flushSync, pendingActionResult); + } = await handleLoaders(request, location, matches, loadingNavigation, opts && opts.submission, opts && opts.fetcherSubmission, opts && opts.replace, opts && opts.initialHydration === true, flushSync, pendingActionResult); if (shortCircuited) { return; } @@ -9945,7 +9515,7 @@ function createRouter(init) { // been assigned to a new controller for the next navigation pendingNavigationController = null; completeNavigation(location, _extends({ - matches: updatedMatches || matches + matches }, getActionDataForCommit(pendingActionResult), { loaderData, errors @@ -9953,7 +9523,7 @@ function createRouter(init) { } // Call the action matched by the leaf route for this navigation and handle // redirects/errors - async function handleAction(request, location, submission, matches, isFogOfWar, opts) { + async function handleAction(request, location, submission, matches, opts) { if (opts === void 0) { opts = {}; } @@ -9965,41 +9535,6 @@ function createRouter(init) { }, { flushSync: opts.flushSync === true }); - if (isFogOfWar) { - let discoverResult = await discoverRoutes(matches, location.pathname, request.signal); - if (discoverResult.type === "aborted") { - return { - shortCircuited: true - }; - } else if (discoverResult.type === "error") { - let { - boundaryId, - error - } = handleDiscoverRouteError(location.pathname, discoverResult); - return { - matches: discoverResult.partialMatches, - pendingActionResult: [boundaryId, { - type: ResultType.error, - error - }] - }; - } else if (!discoverResult.matches) { - let { - notFoundMatches, - error, - route - } = handleNavigational404(location.pathname); - return { - matches: notFoundMatches, - pendingActionResult: [route.id, { - type: ResultType.error, - error - }] - }; - } else { - matches = discoverResult.matches; - } - } // Call our action and get the result let result; let actionMatch = getTargetMatch(matches, location); @@ -10013,8 +9548,8 @@ function createRouter(init) { }) }; } else { - let results = await callDataStrategy("action", state, request, [actionMatch], matches, null); - result = results[actionMatch.route.id]; + let results = await callDataStrategy("action", request, [actionMatch], matches); + result = results[0]; if (request.signal.aborted) { return { shortCircuited: true @@ -10032,7 +9567,7 @@ function createRouter(init) { let location = normalizeRedirectLocation(result.response.headers.get("Location"), new URL(request.url), basename); replace = location === state.location.pathname + state.location.search; } - await startRedirectNavigation(request, result, true, { + await startRedirectNavigation(request, result, { submission, replace }); @@ -10049,91 +9584,31 @@ function createRouter(init) { // Store off the pending error - we use it to determine which loaders // to call and will commit it when we complete the navigation let boundaryMatch = findNearestBoundary(matches, actionMatch.route.id); - // By default, all submissions to the current location are REPLACE - // navigations, but if the action threw an error that'll be rendered in - // an errorElement, we fall back to PUSH so that the user can use the - // back button to get back to the pre-submission form location to try - // again + // By default, all submissions are REPLACE navigations, but if the + // action threw an error that'll be rendered in an errorElement, we fall + // back to PUSH so that the user can use the back button to get back to + // the pre-submission form location to try again if ((opts && opts.replace) !== true) { pendingAction = Action.Push; } return { - matches, pendingActionResult: [boundaryMatch.route.id, result] }; } return { - matches, pendingActionResult: [actionMatch.route.id, result] }; } // Call all applicable loaders for the given matches, handling redirects, // errors, etc. - async function handleLoaders(request, location, matches, isFogOfWar, overrideNavigation, submission, fetcherSubmission, replace, initialHydration, flushSync, pendingActionResult) { + async function handleLoaders(request, location, matches, overrideNavigation, submission, fetcherSubmission, replace, initialHydration, flushSync, pendingActionResult) { // Figure out the right navigation we want to use for data loading let loadingNavigation = overrideNavigation || getLoadingNavigation(location, submission); // If this was a redirect from an action we don't have a "submission" but // we have it on the loading navigation so use that if available let activeSubmission = submission || fetcherSubmission || getSubmissionFromNavigation(loadingNavigation); - // If this is an uninterrupted revalidation, we remain in our current idle - // state. If not, we need to switch to our loading state and load data, - // preserving any new action data or existing action data (in the case of - // a revalidation interrupting an actionReload) - // If we have partialHydration enabled, then don't update the state for the - // initial data load since it's not a "navigation" - let shouldUpdateNavigationState = !isUninterruptedRevalidation && (!future.v7_partialHydration || !initialHydration); - // When fog of war is enabled, we enter our `loading` state earlier so we - // can discover new routes during the `loading` state. We skip this if - // we've already run actions since we would have done our matching already. - // If the children() function threw then, we want to proceed with the - // partial matches it discovered. - if (isFogOfWar) { - if (shouldUpdateNavigationState) { - let actionData = getUpdatedActionData(pendingActionResult); - updateState(_extends({ - navigation: loadingNavigation - }, actionData !== undefined ? { - actionData - } : {}), { - flushSync - }); - } - let discoverResult = await discoverRoutes(matches, location.pathname, request.signal); - if (discoverResult.type === "aborted") { - return { - shortCircuited: true - }; - } else if (discoverResult.type === "error") { - let { - boundaryId, - error - } = handleDiscoverRouteError(location.pathname, discoverResult); - return { - matches: discoverResult.partialMatches, - loaderData: {}, - errors: { - [boundaryId]: error - } - }; - } else if (!discoverResult.matches) { - let { - error, - notFoundMatches, - route - } = handleNavigational404(location.pathname); - return { - matches: notFoundMatches, - loaderData: {}, - errors: { - [route.id]: error - } - }; - } else { - matches = discoverResult.matches; - } - } let routesToUse = inFlightDataRoutes || dataRoutes; - let [matchesToLoad, revalidatingFetchers] = getMatchesToLoad(init.history, state, matches, activeSubmission, location, future.v7_partialHydration && initialHydration === true, future.v7_skipActionErrorRevalidation, isRevalidationRequired, cancelledDeferredRoutes, cancelledFetcherLoads, deletedFetchers, fetchLoadMatches, fetchRedirectIds, routesToUse, basename, pendingActionResult); + let [matchesToLoad, revalidatingFetchers] = getMatchesToLoad(init.history, state, matches, activeSubmission, location, future.v7_partialHydration && initialHydration === true, future.unstable_skipActionErrorRevalidation, isRevalidationRequired, cancelledDeferredRoutes, cancelledFetcherLoads, deletedFetchers, fetchLoadMatches, fetchRedirectIds, routesToUse, basename, pendingActionResult); // Cancel pending deferreds for no-longer-matched routes or routes we're // about to reload. Note that if this is an action reload we would have // already cancelled all pending deferreds so this would be a no-op @@ -10158,20 +9633,40 @@ function createRouter(init) { shortCircuited: true }; } - if (shouldUpdateNavigationState) { - let updates = {}; - if (!isFogOfWar) { - // Only update navigation/actionNData if we didn't already do it above - updates.navigation = loadingNavigation; - let actionData = getUpdatedActionData(pendingActionResult); - if (actionData !== undefined) { - updates.actionData = actionData; + // If this is an uninterrupted revalidation, we remain in our current idle + // state. If not, we need to switch to our loading state and load data, + // preserving any new action data or existing action data (in the case of + // a revalidation interrupting an actionReload) + // If we have partialHydration enabled, then don't update the state for the + // initial data load since it's not a "navigation" + if (!isUninterruptedRevalidation && (!future.v7_partialHydration || !initialHydration)) { + revalidatingFetchers.forEach(rf => { + let fetcher = state.fetchers.get(rf.key); + let revalidatingFetcher = getLoadingFetcher(undefined, fetcher ? fetcher.data : undefined); + state.fetchers.set(rf.key, revalidatingFetcher); + }); + let actionData; + if (pendingActionResult && !isErrorResult(pendingActionResult[1])) { + // This is cast to `any` currently because `RouteData`uses any and it + // would be a breaking change to use any. + // TODO: v7 - change `RouteData` to use `unknown` instead of `any` + actionData = { + [pendingActionResult[0]]: pendingActionResult[1].data + }; + } else if (state.actionData) { + if (Object.keys(state.actionData).length === 0) { + actionData = null; + } else { + actionData = state.actionData; } } - if (revalidatingFetchers.length > 0) { - updates.fetchers = getUpdatedRevalidatingFetchers(revalidatingFetchers); - } - updateState(updates, { + updateState(_extends({ + navigation: loadingNavigation + }, actionData !== undefined ? { + actionData + } : {}, revalidatingFetchers.length > 0 ? { + fetchers: new Map(state.fetchers) + } : {}), { flushSync }); } @@ -10194,7 +9689,7 @@ function createRouter(init) { let { loaderResults, fetcherResults - } = await callLoadersAndMaybeResolveData(state, matches, matchesToLoad, revalidatingFetchers, request); + } = await callLoadersAndMaybeResolveData(state.matches, matches, matchesToLoad, revalidatingFetchers, request); if (request.signal.aborted) { return { shortCircuited: true @@ -10208,22 +9703,16 @@ function createRouter(init) { } revalidatingFetchers.forEach(rf => fetchControllers.delete(rf.key)); // If any loaders returned a redirect Response, start a new REPLACE navigation - let redirect = findRedirect(loaderResults); + let redirect = findRedirect([...loaderResults, ...fetcherResults]); if (redirect) { - await startRedirectNavigation(request, redirect.result, true, { - replace - }); - return { - shortCircuited: true - }; - } - redirect = findRedirect(fetcherResults); - if (redirect) { - // If this redirect came from a fetcher make sure we mark it in - // fetchRedirectIds so it doesn't get revalidated on the next set of - // loader executions - fetchRedirectIds.add(redirect.key); - await startRedirectNavigation(request, redirect.result, true, { + if (redirect.idx >= matchesToLoad.length) { + // If this redirect came from a fetcher make sure we mark it in + // fetchRedirectIds so it doesn't get revalidated on the next set of + // loader executions + let fetcherKey = revalidatingFetchers[redirect.idx - matchesToLoad.length].key; + fetchRedirectIds.add(fetcherKey); + } + await startRedirectNavigation(request, redirect.result, { replace }); return { @@ -10262,37 +9751,12 @@ function createRouter(init) { let didAbortFetchLoads = abortStaleFetchLoads(pendingNavigationLoadId); let shouldUpdateFetchers = updatedFetchers || didAbortFetchLoads || revalidatingFetchers.length > 0; return _extends({ - matches, loaderData, errors }, shouldUpdateFetchers ? { fetchers: new Map(state.fetchers) } : {}); } - function getUpdatedActionData(pendingActionResult) { - if (pendingActionResult && !isErrorResult(pendingActionResult[1])) { - // This is cast to `any` currently because `RouteData`uses any and it - // would be a breaking change to use any. - // TODO: v7 - change `RouteData` to use `unknown` instead of `any` - return { - [pendingActionResult[0]]: pendingActionResult[1].data - }; - } else if (state.actionData) { - if (Object.keys(state.actionData).length === 0) { - return null; - } else { - return state.actionData; - } - } - } - function getUpdatedRevalidatingFetchers(revalidatingFetchers) { - revalidatingFetchers.forEach(rf => { - let fetcher = state.fetchers.get(rf.key); - let revalidatingFetcher = getLoadingFetcher(undefined, fetcher ? fetcher.data : undefined); - state.fetchers.set(rf.key, revalidatingFetcher); - }); - return new Map(state.fetchers); - } // Trigger a fetcher load/submit for the given fetcher key function fetch(key, routeId, href, opts) { if (isServer) { @@ -10303,10 +9767,6 @@ function createRouter(init) { let routesToUse = inFlightDataRoutes || dataRoutes; let normalizedPath = normalizeTo(state.location, state.matches, basename, future.v7_prependBasename, href, future.v7_relativeSplatPath, routeId, opts == null ? void 0 : opts.relative); let matches = matchRoutes(routesToUse, normalizedPath, basename); - let fogOfWar = checkFogOfWar(matches, routesToUse, normalizedPath); - if (fogOfWar.active && fogOfWar.matches) { - matches = fogOfWar.matches; - } if (!matches) { setFetcherError(key, routeId, getInternalRouterError(404, { pathname: normalizedPath @@ -10329,7 +9789,7 @@ function createRouter(init) { let match = getTargetMatch(matches, path); pendingPreventScrollReset = (opts && opts.preventScrollReset) === true; if (submission && isMutationMethod(submission.formMethod)) { - handleFetcherAction(key, routeId, path, match, matches, fogOfWar.active, flushSync, submission); + handleFetcherAction(key, routeId, path, match, matches, flushSync, submission); return; } // Store off the match so we can call it's shouldRevalidate on subsequent @@ -10338,28 +9798,22 @@ function createRouter(init) { routeId, path }); - handleFetcherLoader(key, routeId, path, match, matches, fogOfWar.active, flushSync, submission); + handleFetcherLoader(key, routeId, path, match, matches, flushSync, submission); } // Call the action for the matched fetcher.submit(), and then handle redirects, // errors, and revalidation - async function handleFetcherAction(key, routeId, path, match, requestMatches, isFogOfWar, flushSync, submission) { + async function handleFetcherAction(key, routeId, path, match, requestMatches, flushSync, submission) { interruptActiveLoads(); fetchLoadMatches.delete(key); - function detectAndHandle405Error(m) { - if (!m.route.action && !m.route.lazy) { - let error = getInternalRouterError(405, { - method: submission.formMethod, - pathname: path, - routeId: routeId - }); - setFetcherError(key, routeId, error, { - flushSync - }); - return true; - } - return false; - } - if (!isFogOfWar && detectAndHandle405Error(match)) { + if (!match.route.action && !match.route.lazy) { + let error = getInternalRouterError(405, { + method: submission.formMethod, + pathname: path, + routeId: routeId + }); + setFetcherError(key, routeId, error, { + flushSync + }); return; } // Put this fetcher into it's submitting state @@ -10367,40 +9821,13 @@ function createRouter(init) { updateFetcherState(key, getSubmittingFetcher(submission, existingFetcher), { flushSync }); + // Call the action for the fetcher let abortController = new AbortController(); let fetchRequest = createClientSideRequest(init.history, path, abortController.signal, submission); - if (isFogOfWar) { - let discoverResult = await discoverRoutes(requestMatches, path, fetchRequest.signal); - if (discoverResult.type === "aborted") { - return; - } else if (discoverResult.type === "error") { - let { - error - } = handleDiscoverRouteError(path, discoverResult); - setFetcherError(key, routeId, error, { - flushSync - }); - return; - } else if (!discoverResult.matches) { - setFetcherError(key, routeId, getInternalRouterError(404, { - pathname: path - }), { - flushSync - }); - return; - } else { - requestMatches = discoverResult.matches; - match = getTargetMatch(requestMatches, path); - if (detectAndHandle405Error(match)) { - return; - } - } - } - // Call the action for the fetcher fetchControllers.set(key, abortController); let originatingLoadId = incrementingLoadId; - let actionResults = await callDataStrategy("action", state, fetchRequest, [match], requestMatches, key); - let actionResult = actionResults[match.route.id]; + let actionResults = await callDataStrategy("action", fetchRequest, [match], requestMatches); + let actionResult = actionResults[0]; if (fetchRequest.signal.aborted) { // We can delete this so long as we weren't aborted by our own fetcher // re-submit which would have put _new_ controller is in fetchControllers @@ -10431,7 +9858,7 @@ function createRouter(init) { } else { fetchRedirectIds.add(key); updateFetcherState(key, getLoadingFetcher(submission)); - return startRedirectNavigation(fetchRequest, actionResult, false, { + return startRedirectNavigation(fetchRequest, actionResult, { fetcherSubmission: submission }); } @@ -10458,7 +9885,7 @@ function createRouter(init) { fetchReloadIds.set(key, loadId); let loadFetcher = getLoadingFetcher(submission, actionResult.data); state.fetchers.set(key, loadFetcher); - let [matchesToLoad, revalidatingFetchers] = getMatchesToLoad(init.history, state, matches, submission, nextLocation, false, future.v7_skipActionErrorRevalidation, isRevalidationRequired, cancelledDeferredRoutes, cancelledFetcherLoads, deletedFetchers, fetchLoadMatches, fetchRedirectIds, routesToUse, basename, [match.route.id, actionResult]); + let [matchesToLoad, revalidatingFetchers] = getMatchesToLoad(init.history, state, matches, submission, nextLocation, false, future.unstable_skipActionErrorRevalidation, isRevalidationRequired, cancelledDeferredRoutes, cancelledFetcherLoads, deletedFetchers, fetchLoadMatches, fetchRedirectIds, routesToUse, basename, [match.route.id, actionResult]); // Put all revalidating fetchers into the loading state, except for the // current fetcher which we want to keep in it's current loading state which // contains it's action submission info + action data @@ -10482,7 +9909,7 @@ function createRouter(init) { let { loaderResults, fetcherResults - } = await callLoadersAndMaybeResolveData(state, matches, matchesToLoad, revalidatingFetchers, revalidationRequest); + } = await callLoadersAndMaybeResolveData(state.matches, matches, matchesToLoad, revalidatingFetchers, revalidationRequest); if (abortController.signal.aborted) { return; } @@ -10490,23 +9917,22 @@ function createRouter(init) { fetchReloadIds.delete(key); fetchControllers.delete(key); revalidatingFetchers.forEach(r => fetchControllers.delete(r.key)); - let redirect = findRedirect(loaderResults); + let redirect = findRedirect([...loaderResults, ...fetcherResults]); if (redirect) { - return startRedirectNavigation(revalidationRequest, redirect.result, false); - } - redirect = findRedirect(fetcherResults); - if (redirect) { - // If this redirect came from a fetcher make sure we mark it in - // fetchRedirectIds so it doesn't get revalidated on the next set of - // loader executions - fetchRedirectIds.add(redirect.key); - return startRedirectNavigation(revalidationRequest, redirect.result, false); + if (redirect.idx >= matchesToLoad.length) { + // If this redirect came from a fetcher make sure we mark it in + // fetchRedirectIds so it doesn't get revalidated on the next set of + // loader executions + let fetcherKey = revalidatingFetchers[redirect.idx - matchesToLoad.length].key; + fetchRedirectIds.add(fetcherKey); + } + return startRedirectNavigation(revalidationRequest, redirect.result); } // Process and commit output from loaders let { loaderData, errors - } = processLoaderData(state, matches, matchesToLoad, loaderResults, undefined, revalidatingFetchers, fetcherResults, activeDeferreds); + } = processLoaderData(state, state.matches, matchesToLoad, loaderResults, undefined, revalidatingFetchers, fetcherResults, activeDeferreds); // Since we let revalidations complete even if the submitting fetcher was // deleted, only put it back to idle if it hasn't been deleted if (state.fetchers.has(key)) { @@ -10539,42 +9965,18 @@ function createRouter(init) { } } // Call the matched loader for fetcher.load(), handling redirects, errors, etc. - async function handleFetcherLoader(key, routeId, path, match, matches, isFogOfWar, flushSync, submission) { + async function handleFetcherLoader(key, routeId, path, match, matches, flushSync, submission) { let existingFetcher = state.fetchers.get(key); updateFetcherState(key, getLoadingFetcher(submission, existingFetcher ? existingFetcher.data : undefined), { flushSync }); + // Call the loader for this fetcher route match let abortController = new AbortController(); let fetchRequest = createClientSideRequest(init.history, path, abortController.signal); - if (isFogOfWar) { - let discoverResult = await discoverRoutes(matches, path, fetchRequest.signal); - if (discoverResult.type === "aborted") { - return; - } else if (discoverResult.type === "error") { - let { - error - } = handleDiscoverRouteError(path, discoverResult); - setFetcherError(key, routeId, error, { - flushSync - }); - return; - } else if (!discoverResult.matches) { - setFetcherError(key, routeId, getInternalRouterError(404, { - pathname: path - }), { - flushSync - }); - return; - } else { - matches = discoverResult.matches; - match = getTargetMatch(matches, path); - } - } - // Call the loader for this fetcher route match fetchControllers.set(key, abortController); let originatingLoadId = incrementingLoadId; - let results = await callDataStrategy("loader", state, fetchRequest, [match], matches, key); - let result = results[match.route.id]; + let results = await callDataStrategy("loader", fetchRequest, [match], matches); + let result = results[0]; // Deferred isn't supported for fetcher loads, await everything and treat it // as a normal load. resolveDeferredData will return undefined if this // fetcher gets aborted, so we just leave result untouched and short circuit @@ -10605,7 +10007,7 @@ function createRouter(init) { return; } else { fetchRedirectIds.add(key); - await startRedirectNavigation(fetchRequest, result, false); + await startRedirectNavigation(fetchRequest, result); return; } } @@ -10637,7 +10039,7 @@ function createRouter(init) { * actually touch history until we've processed redirects, so we just use * the history action from the original navigation (PUSH or REPLACE). */ - async function startRedirectNavigation(request, redirect, isNavigation, _temp2) { + async function startRedirectNavigation(request, redirect, _temp2) { let { submission, fetcherSubmission, @@ -10677,7 +10079,7 @@ function createRouter(init) { // There's no need to abort on redirects, since we don't detect the // redirect until the action/loaders have settled pendingNavigationController = null; - let redirectHistoryAction = replace === true || redirect.response.headers.has("X-Remix-Replace") ? Action.Replace : Action.Push; + let redirectHistoryAction = replace === true ? Action.Replace : Action.Push; // Use the incoming submission if provided, fallback on the active one in // state.navigation let { @@ -10697,9 +10099,8 @@ function createRouter(init) { submission: _extends({}, activeSubmission, { formAction: location }), - // Preserve these flags across redirects - preventScrollReset: pendingPreventScrollReset, - enableViewTransition: isNavigation ? pendingViewTransitionEnabled : undefined + // Preserve this flag across redirects + preventScrollReset: pendingPreventScrollReset }); } else { // If we have a navigation submission, we will preserve it through the @@ -10709,69 +10110,50 @@ function createRouter(init) { overrideNavigation, // Send fetcher submissions through for shouldRevalidate fetcherSubmission, - // Preserve these flags across redirects - preventScrollReset: pendingPreventScrollReset, - enableViewTransition: isNavigation ? pendingViewTransitionEnabled : undefined + // Preserve this flag across redirects + preventScrollReset: pendingPreventScrollReset }); } } // Utility wrapper for calling dataStrategy client-side without having to // pass around the manifest, mapRouteProperties, etc. - async function callDataStrategy(type, state, request, matchesToLoad, matches, fetcherKey) { - let results; - let dataResults = {}; + async function callDataStrategy(type, request, matchesToLoad, matches) { try { - results = await callDataStrategyImpl(dataStrategyImpl, type, state, request, matchesToLoad, matches, fetcherKey, manifest, mapRouteProperties); + let results = await callDataStrategyImpl(dataStrategyImpl, type, request, matchesToLoad, matches, manifest, mapRouteProperties); + return await Promise.all(results.map((result, i) => { + if (isRedirectHandlerResult(result)) { + let response = result.result; + return { + type: ResultType.redirect, + response: normalizeRelativeRoutingRedirectResponse(response, request, matchesToLoad[i].route.id, matches, basename, future.v7_relativeSplatPath) + }; + } + return convertHandlerResultToDataResult(result); + })); } catch (e) { // If the outer dataStrategy method throws, just return the error for all // matches - and it'll naturally bubble to the root - matchesToLoad.forEach(m => { - dataResults[m.route.id] = { - type: ResultType.error, - error: e - }; - }); - return dataResults; + return matchesToLoad.map(() => ({ + type: ResultType.error, + error: e + })); } - for (let [routeId, result] of Object.entries(results)) { - if (isRedirectDataStrategyResultResult(result)) { - let response = result.result; - dataResults[routeId] = { - type: ResultType.redirect, - response: normalizeRelativeRoutingRedirectResponse(response, request, routeId, matches, basename, future.v7_relativeSplatPath) - }; - } else { - dataResults[routeId] = await convertDataStrategyResultToDataResult(result); - } - } - return dataResults; } - async function callLoadersAndMaybeResolveData(state, matches, matchesToLoad, fetchersToLoad, request) { - let currentMatches = state.matches; - // Kick off loaders and fetchers in parallel - let loaderResultsPromise = callDataStrategy("loader", state, request, matchesToLoad, matches, null); - let fetcherResultsPromise = Promise.all(fetchersToLoad.map(async f => { + async function callLoadersAndMaybeResolveData(currentMatches, matches, matchesToLoad, fetchersToLoad, request) { + let [loaderResults, ...fetcherResults] = await Promise.all([matchesToLoad.length ? callDataStrategy("loader", request, matchesToLoad, matches) : [], ...fetchersToLoad.map(f => { if (f.matches && f.match && f.controller) { - let results = await callDataStrategy("loader", state, createClientSideRequest(init.history, f.path, f.controller.signal), [f.match], f.matches, f.key); - let result = results[f.match.route.id]; - // Fetcher results are keyed by fetcher key from here on out, not routeId - return { - [f.key]: result - }; + let fetcherRequest = createClientSideRequest(init.history, f.path, f.controller.signal); + return callDataStrategy("loader", fetcherRequest, [f.match], f.matches).then(r => r[0]); } else { return Promise.resolve({ - [f.key]: { - type: ResultType.error, - error: getInternalRouterError(404, { - pathname: f.path - }) - } + type: ResultType.error, + error: getInternalRouterError(404, { + pathname: f.path + }) }); } - })); - let loaderResults = await loaderResultsPromise; - let fetcherResults = (await fetcherResultsPromise).reduce((acc, r) => Object.assign(acc, r), {}); - await Promise.all([resolveNavigationDeferredResults(matches, loaderResults, request.signal, currentMatches, state.loaderData), resolveFetcherDeferredResults(matches, fetcherResults, fetchersToLoad)]); + })]); + await Promise.all([resolveDeferredResults(currentMatches, matchesToLoad, loaderResults, loaderResults.map(() => request.signal), false, state.loaderData), resolveDeferredResults(currentMatches, fetchersToLoad.map(f => f.match), fetcherResults, fetchersToLoad.map(f => f.controller ? f.controller.signal : null), true)]); return { loaderResults, fetcherResults @@ -10786,7 +10168,7 @@ function createRouter(init) { // Abort in-flight fetcher loads fetchLoadMatches.forEach((_, key) => { if (fetchControllers.has(key)) { - cancelledFetcherLoads.add(key); + cancelledFetcherLoads.push(key); abortFetcher(key); } }); @@ -10840,7 +10222,6 @@ function createRouter(init) { fetchReloadIds.delete(key); fetchRedirectIds.delete(key); deletedFetchers.delete(key); - cancelledFetcherLoads.delete(key); state.fetchers.delete(key); } function deleteFetcherAndUpdateState(key) { @@ -10958,33 +10339,6 @@ function createRouter(init) { return blockerKey; } } - function handleNavigational404(pathname) { - let error = getInternalRouterError(404, { - pathname - }); - let routesToUse = inFlightDataRoutes || dataRoutes; - let { - matches, - route - } = getShortCircuitMatches(routesToUse); - // Cancel all pending deferred on 404s since we don't keep any routes - cancelActiveDeferreds(); - return { - notFoundMatches: matches, - route, - error - }; - } - function handleDiscoverRouteError(pathname, discoverResult) { - return { - boundaryId: findNearestBoundary(discoverResult.partialMatches).route.id, - error: getInternalRouterError(400, { - type: "route-discovery", - pathname, - message: discoverResult.error != null && "message" in discoverResult.error ? discoverResult.error : String(discoverResult.error) - }) - }; - } function cancelActiveDeferreds(predicate) { let cancelledRouteIds = []; activeDeferreds.forEach((dfd, routeId) => { @@ -11046,115 +10400,10 @@ function createRouter(init) { } return null; } - function checkFogOfWar(matches, routesToUse, pathname) { - if (patchRoutesOnNavigationImpl) { - // Don't bother re-calling patchRouteOnMiss for a path we've already - // processed. the last execution would have patched the route tree - // accordingly so `matches` here are already accurate. - if (discoveredRoutes.has(pathname)) { - return { - active: false, - matches - }; - } - if (!matches) { - let fogMatches = matchRoutesImpl(routesToUse, pathname, basename, true); - return { - active: true, - matches: fogMatches || [] - }; - } else { - if (Object.keys(matches[0].params).length > 0) { - // If we matched a dynamic param or a splat, it might only be because - // we haven't yet discovered other routes that would match with a - // higher score. Call patchRoutesOnNavigation just to be sure - let partialMatches = matchRoutesImpl(routesToUse, pathname, basename, true); - return { - active: true, - matches: partialMatches - }; - } - } - } - return { - active: false, - matches: null - }; - } - async function discoverRoutes(matches, pathname, signal) { - let partialMatches = matches; - while (true) { - let isNonHMR = inFlightDataRoutes == null; - let routesToUse = inFlightDataRoutes || dataRoutes; - try { - await loadLazyRouteChildren(patchRoutesOnNavigationImpl, pathname, partialMatches, routesToUse, manifest, mapRouteProperties, pendingPatchRoutes, signal); - } catch (e) { - return { - type: "error", - error: e, - partialMatches - }; - } finally { - // If we are not in the middle of an HMR revalidation and we changed the - // routes, provide a new identity so when we `updateState` at the end of - // this navigation/fetch `router.routes` will be a new identity and - // trigger a re-run of memoized `router.routes` dependencies. - // HMR will already update the identity and reflow when it lands - // `inFlightDataRoutes` in `completeNavigation` - if (isNonHMR) { - dataRoutes = [...dataRoutes]; - } - } - if (signal.aborted) { - return { - type: "aborted" - }; - } - let newMatches = matchRoutes(routesToUse, pathname, basename); - if (newMatches) { - addToFifoQueue(pathname, discoveredRoutes); - return { - type: "success", - matches: newMatches - }; - } - let newPartialMatches = matchRoutesImpl(routesToUse, pathname, basename, true); - // Avoid loops if the second pass results in the same partial matches - if (!newPartialMatches || partialMatches.length === newPartialMatches.length && partialMatches.every((m, i) => m.route.id === newPartialMatches[i].route.id)) { - addToFifoQueue(pathname, discoveredRoutes); - return { - type: "success", - matches: null - }; - } - partialMatches = newPartialMatches; - } - } - function addToFifoQueue(path, queue) { - if (queue.size >= discoveredRoutesMaxSize) { - let first = queue.values().next().value; - queue.delete(first); - } - queue.add(path); - } function _internalSetRoutes(newRoutes) { manifest = {}; inFlightDataRoutes = convertRoutesToDataRoutes(newRoutes, mapRouteProperties, undefined, manifest); } - function patchRoutes(routeId, children) { - let isNonHMR = inFlightDataRoutes == null; - let routesToUse = inFlightDataRoutes || dataRoutes; - patchRoutesImpl(routeId, children, routesToUse, manifest, mapRouteProperties); - // If we are not in the middle of an HMR revalidation and we changed the - // routes, provide a new identity and trigger a reflow via `updateState` - // to re-run memoized `router.routes` dependencies. - // HMR will already update the identity and reflow when it lands - // `inFlightDataRoutes` in `completeNavigation` - if (isNonHMR) { - dataRoutes = [...dataRoutes]; - updateState({}); - } - } router = { get basename() { return basename; @@ -11186,7 +10435,6 @@ function createRouter(init) { dispose, getBlocker, deleteBlocker, - patchRoutes, _internalFetchControllers: fetchControllers, _internalActiveDeferreds: activeDeferreds, // TODO: Remove setRoutes, it's temporary to avoid dealing with @@ -11345,8 +10593,7 @@ function createStaticHandler(routes, opts) { async function queryRoute(request, _temp4) { let { routeId, - requestContext, - unstable_dataStrategy + requestContext } = _temp4 === void 0 ? {} : _temp4; let url = new URL(request.url); let method = request.method; @@ -11374,7 +10621,7 @@ function createStaticHandler(routes, opts) { pathname: location.pathname }); } - let result = await queryImpl(request, location, matches, requestContext, unstable_dataStrategy || null, false, match); + let result = await queryImpl(request, location, matches, requestContext, null, false, match); if (isResponse(result)) { return result; } @@ -11414,9 +10661,9 @@ function createStaticHandler(routes, opts) { }); } catch (e) { // If the user threw/returned a Response in callLoaderOrAction for a - // `queryRoute` call, we throw the `DataStrategyResult` to bail out early + // `queryRoute` call, we throw the `HandlerResult` to bail out early // and then return or throw the raw Response here accordingly - if (isDataStrategyResult(e) && isResponse(e.result)) { + if (isHandlerResult(e) && isResponse(e.result)) { if (e.type === ResultType.error) { throw e.result; } @@ -11447,7 +10694,7 @@ function createStaticHandler(routes, opts) { }; } else { let results = await callDataStrategy("action", request, [actionMatch], matches, isRouteRequest, requestContext, unstable_dataStrategy); - result = results[actionMatch.route.id]; + result = results[0]; if (request.signal.aborted) { throwStaticHandlerAbortedError(request, isRouteRequest, future); } @@ -11564,7 +10811,7 @@ function createStaticHandler(routes, opts) { } // Process and commit output from loaders let activeDeferreds = new Map(); - let context = processRouteLoaderData(matches, results, pendingActionResult, activeDeferreds, skipLoaderErrorBubbling); + let context = processRouteLoaderData(matches, matchesToLoad, results, pendingActionResult, activeDeferreds, skipLoaderErrorBubbling); // Add a null for any non-loader matches for proper revalidation on the client let executedLoaders = new Set(matchesToLoad.map(match => match.route.id)); matches.forEach(match => { @@ -11580,26 +10827,20 @@ function createStaticHandler(routes, opts) { // Utility wrapper for calling dataStrategy server-side without having to // pass around the manifest, mapRouteProperties, etc. async function callDataStrategy(type, request, matchesToLoad, matches, isRouteRequest, requestContext, unstable_dataStrategy) { - let results = await callDataStrategyImpl(unstable_dataStrategy || defaultDataStrategy, type, null, request, matchesToLoad, matches, null, manifest, mapRouteProperties, requestContext); - let dataResults = {}; - await Promise.all(matches.map(async match => { - if (!(match.route.id in results)) { - return; - } - let result = results[match.route.id]; - if (isRedirectDataStrategyResultResult(result)) { + let results = await callDataStrategyImpl(unstable_dataStrategy || defaultDataStrategy, type, request, matchesToLoad, matches, manifest, mapRouteProperties, requestContext); + return await Promise.all(results.map((result, i) => { + if (isRedirectHandlerResult(result)) { let response = result.result; // Throw redirects and let the server handle them with an HTTP redirect - throw normalizeRelativeRoutingRedirectResponse(response, request, match.route.id, matches, basename, future.v7_relativeSplatPath); + throw normalizeRelativeRoutingRedirectResponse(response, request, matchesToLoad[i].route.id, matches, basename, future.v7_relativeSplatPath); } if (isResponse(result.result) && isRouteRequest) { // For SSR single-route requests, we want to hand Responses back // directly without unwrapping throw result; } - dataResults[match.route.id] = await convertDataStrategyResultToDataResult(result); + return convertHandlerResultToDataResult(result); })); - return dataResults; } return { dataRoutes, @@ -11858,7 +11099,7 @@ function getMatchesToLoad(history, state, matches, submission, location, isIniti nextParams: nextRouteMatch.params }, submission, { actionResult, - actionStatus, + unstable_actionStatus: actionStatus, defaultShouldRevalidate: shouldSkipRevalidation ? false : // Forced revalidation due to submission, useRevalidator, or X-Remix-Revalidate isRevalidationRequired || currentUrl.pathname + currentUrl.search === nextUrl.pathname + nextUrl.search || @@ -11902,9 +11143,8 @@ function getMatchesToLoad(history, state, matches, submission, location, isIniti if (fetchRedirectIds.has(key)) { // Never trigger a revalidation of an actively redirecting fetcher shouldRevalidate = false; - } else if (cancelledFetcherLoads.has(key)) { - // Always mark for revalidation if the fetcher was cancelled - cancelledFetcherLoads.delete(key); + } else if (cancelledFetcherLoads.includes(key)) { + // Always revalidate if the fetcher was cancelled shouldRevalidate = true; } else if (fetcher && fetcher.state !== "idle" && fetcher.data === undefined) { // If the fetcher hasn't ever completed loading yet, then this isn't a @@ -11921,7 +11161,7 @@ function getMatchesToLoad(history, state, matches, submission, location, isIniti nextParams: matches[matches.length - 1].params }, submission, { actionResult, - actionStatus, + unstable_actionStatus: actionStatus, defaultShouldRevalidate: shouldSkipRevalidation ? false : isRevalidationRequired })); } @@ -11969,49 +11209,6 @@ function shouldRevalidateLoader(loaderMatch, arg) { } return arg.defaultShouldRevalidate; } -/** - * Idempotent utility to execute patchRoutesOnNavigation() to lazily load route - * definitions and update the routes/routeManifest - */ -async function loadLazyRouteChildren(patchRoutesOnNavigationImpl, path, matches, routes, manifest, mapRouteProperties, pendingRouteChildren, signal) { - let key = [path, ...matches.map(m => m.route.id)].join("-"); - try { - let pending = pendingRouteChildren.get(key); - if (!pending) { - pending = patchRoutesOnNavigationImpl({ - path, - matches, - patch: (routeId, children) => { - if (!signal.aborted) { - patchRoutesImpl(routeId, children, routes, manifest, mapRouteProperties); - } - } - }); - pendingRouteChildren.set(key, pending); - } - if (pending && isPromise(pending)) { - await pending; - } - } finally { - pendingRouteChildren.delete(key); - } -} -function patchRoutesImpl(routeId, children, routesToUse, manifest, mapRouteProperties) { - if (routeId) { - var _route$children; - let route = manifest[routeId]; - invariant(route, "No route found to patch children into: routeId = " + routeId); - let dataChildren = convertRoutesToDataRoutes(children, mapRouteProperties, [routeId, "patch", String(((_route$children = route.children) == null ? void 0 : _route$children.length) || "0")], manifest); - if (route.children) { - route.children.push(...dataChildren); - } else { - route.children = dataChildren; - } - } else { - let dataChildren = convertRoutesToDataRoutes(children, mapRouteProperties, ["patch", String(routesToUse.length || "0")], manifest); - routesToUse.push(...dataChildren); - } -} /** * Execute route.lazy() methods to lazily load route modules (loader, action, * shouldRevalidate) and update the routeManifest in place which shares objects @@ -12061,67 +11258,52 @@ async function loadLazyRouteModule(route, mapRouteProperties, manifest) { })); } // Default implementation of `dataStrategy` which fetches all loaders in parallel -async function defaultDataStrategy(_ref6) { - let { - matches - } = _ref6; - let matchesToLoad = matches.filter(m => m.shouldLoad); - let results = await Promise.all(matchesToLoad.map(m => m.resolve())); - return results.reduce((acc, result, i) => Object.assign(acc, { - [matchesToLoad[i].route.id]: result - }), {}); +function defaultDataStrategy(opts) { + return Promise.all(opts.matches.map(m => m.resolve())); } -async function callDataStrategyImpl(dataStrategyImpl, type, state, request, matchesToLoad, matches, fetcherKey, manifest, mapRouteProperties, requestContext) { - let loadRouteDefinitionsPromises = matches.map(m => m.route.lazy ? loadLazyRouteModule(m.route, mapRouteProperties, manifest) : undefined); - let dsMatches = matches.map((match, i) => { - let loadRoutePromise = loadRouteDefinitionsPromises[i]; - let shouldLoad = matchesToLoad.some(m => m.route.id === match.route.id); - // `resolve` encapsulates route.lazy(), executing the loader/action, - // and mapping return values/thrown errors to a `DataStrategyResult`. Users - // can pass a callback to take fine-grained control over the execution - // of the loader/action - let resolve = async handlerOverride => { - if (handlerOverride && request.method === "GET" && (match.route.lazy || match.route.loader)) { - shouldLoad = true; - } - return shouldLoad ? callLoaderOrAction(type, request, match, loadRoutePromise, handlerOverride, requestContext) : Promise.resolve({ - type: ResultType.data, - result: undefined - }); - }; - return _extends({}, match, { - shouldLoad, - resolve - }); - }); +async function callDataStrategyImpl(dataStrategyImpl, type, request, matchesToLoad, matches, manifest, mapRouteProperties, requestContext) { + let routeIdsToLoad = matchesToLoad.reduce((acc, m) => acc.add(m.route.id), new Set()); + let loadedMatches = new Set(); // Send all matches here to allow for a middleware-type implementation. // handler will be a no-op for unneeded routes and we filter those results // back out below. let results = await dataStrategyImpl({ - matches: dsMatches, + matches: matches.map(match => { + let shouldLoad = routeIdsToLoad.has(match.route.id); + // `resolve` encapsulates the route.lazy, executing the + // loader/action, and mapping return values/thrown errors to a + // HandlerResult. Users can pass a callback to take fine-grained control + // over the execution of the loader/action + let resolve = handlerOverride => { + loadedMatches.add(match.route.id); + return shouldLoad ? callLoaderOrAction(type, request, match, manifest, mapRouteProperties, handlerOverride, requestContext) : Promise.resolve({ + type: ResultType.data, + result: undefined + }); + }; + return _extends({}, match, { + shouldLoad, + resolve + }); + }), request, params: matches[0].params, - fetcherKey, context: requestContext }); - // Wait for all routes to load here but 'swallow the error since we want - // it to bubble up from the `await loadRoutePromise` in `callLoaderOrAction` - - // called from `match.resolve()` - try { - await Promise.all(loadRouteDefinitionsPromises); - } catch (e) { - // No-op - } - return results; + // Throw if any loadRoute implementations not called since they are what + // ensures a route is fully loaded + matches.forEach(m => invariant(loadedMatches.has(m.route.id), "`match.resolve()` was not called for route id \"" + m.route.id + "\". " + "You must call `match.resolve()` on every match passed to " + "`dataStrategy` to ensure all routes are properly loaded.")); + // Filter out any middleware-only matches for which we didn't need to run handlers + return results.filter((_, i) => routeIdsToLoad.has(matches[i].route.id)); } // Default logic for calling a loader/action is the user has no specified a dataStrategy -async function callLoaderOrAction(type, request, match, loadRoutePromise, handlerOverride, staticContext) { +async function callLoaderOrAction(type, request, match, manifest, mapRouteProperties, handlerOverride, staticContext) { let result; let onReject; let runHandler = handler => { // Setup a promise we can race against so that abort signals short circuit let reject; - // This will never resolve so safe to type it as Promise to + // This will never resolve so safe to type it as Promise to // satisfy the function return value let abortPromise = new Promise((_, r) => reject = r); onReject = () => reject(); @@ -12136,26 +11318,30 @@ async function callLoaderOrAction(type, request, match, loadRoutePromise, handle context: staticContext }, ...(ctx !== undefined ? [ctx] : [])); }; - let handlerPromise = (async () => { - try { - let val = await (handlerOverride ? handlerOverride(ctx => actualHandler(ctx)) : actualHandler()); - return { - type: "data", - result: val - }; - } catch (e) { - return { - type: "error", - result: e - }; - } - })(); + let handlerPromise; + if (handlerOverride) { + handlerPromise = handlerOverride(ctx => actualHandler(ctx)); + } else { + handlerPromise = (async () => { + try { + let val = await actualHandler(); + return { + type: "data", + result: val + }; + } catch (e) { + return { + type: "error", + result: e + }; + } + })(); + } return Promise.race([handlerPromise, abortPromise]); }; try { let handler = match.route[type]; - // If we have a route.lazy promise, await that first - if (loadRoutePromise) { + if (match.route.lazy) { if (handler) { // Run statically defined handler in parallel with lazy() let handlerError; @@ -12165,14 +11351,14 @@ async function callLoaderOrAction(type, request, match, loadRoutePromise, handle // route has a boundary that can handle the error runHandler(handler).catch(e => { handlerError = e; - }), loadRoutePromise]); + }), loadLazyRouteModule(match.route, mapRouteProperties, manifest)]); if (handlerError !== undefined) { throw handlerError; } result = value; } else { // Load lazy route module, then run any returned handler - await loadRoutePromise; + await loadLazyRouteModule(match.route, mapRouteProperties, manifest); handler = match.route[type]; if (handler) { // Handler still runs even if we got interrupted to maintain consistency @@ -12208,7 +11394,7 @@ async function callLoaderOrAction(type, request, match, loadRoutePromise, handle invariant(result.result !== undefined, "You defined " + (type === "action" ? "an action" : "a loader") + " for route " + ("\"" + match.route.id + "\" but didn't return anything from your `" + type + "` ") + "function. Please return a value or `null`."); } catch (e) { // We should already be catching and converting normal handler executions to - // DataStrategyResults and returning them, so anything that throws here is an + // HandlerResults and returning them, so anything that throws here is an // unexpected error we still need to wrap return { type: ResultType.error, @@ -12221,11 +11407,12 @@ async function callLoaderOrAction(type, request, match, loadRoutePromise, handle } return result; } -async function convertDataStrategyResultToDataResult(dataStrategyResult) { +async function convertHandlerResultToDataResult(handlerResult) { let { result, - type - } = dataStrategyResult; + type, + status + } = handlerResult; if (isResponse(result)) { let data; try { @@ -12263,46 +11450,25 @@ async function convertDataStrategyResultToDataResult(dataStrategyResult) { }; } if (type === ResultType.error) { - if (isDataWithResponseInit(result)) { - var _result$init2; - if (result.data instanceof Error) { - var _result$init; - return { - type: ResultType.error, - error: result.data, - statusCode: (_result$init = result.init) == null ? void 0 : _result$init.status - }; - } - // Convert thrown unstable_data() to ErrorResponse instances - result = new ErrorResponseImpl(((_result$init2 = result.init) == null ? void 0 : _result$init2.status) || 500, undefined, result.data); - } return { type: ResultType.error, error: result, - statusCode: isRouteErrorResponse(result) ? result.status : undefined + statusCode: isRouteErrorResponse(result) ? result.status : status }; } if (isDeferredData(result)) { - var _result$init3, _result$init4; + var _result$init, _result$init2; return { type: ResultType.deferred, deferredData: result, - statusCode: (_result$init3 = result.init) == null ? void 0 : _result$init3.status, - headers: ((_result$init4 = result.init) == null ? void 0 : _result$init4.headers) && new Headers(result.init.headers) - }; - } - if (isDataWithResponseInit(result)) { - var _result$init5, _result$init6; - return { - type: ResultType.data, - data: result.data, - statusCode: (_result$init5 = result.init) == null ? void 0 : _result$init5.status, - headers: (_result$init6 = result.init) != null && _result$init6.headers ? new Headers(result.init.headers) : undefined + statusCode: (_result$init = result.init) == null ? void 0 : _result$init.status, + headers: ((_result$init2 = result.init) == null ? void 0 : _result$init2.headers) && new Headers(result.init.headers) }; } return { type: ResultType.data, - data: result + data: result, + statusCode: status }; } // Support relative routing in internal redirects @@ -12378,7 +11544,7 @@ function convertSearchParamsToFormData(searchParams) { } return formData; } -function processRouteLoaderData(matches, results, pendingActionResult, activeDeferreds, skipLoaderErrorBubbling) { +function processRouteLoaderData(matches, matchesToLoad, results, pendingActionResult, activeDeferreds, skipLoaderErrorBubbling) { // Fill in loaderData/errors from our loaders let loaderData = {}; let errors = null; @@ -12387,12 +11553,8 @@ function processRouteLoaderData(matches, results, pendingActionResult, activeDef let loaderHeaders = {}; let pendingError = pendingActionResult && isErrorResult(pendingActionResult[1]) ? pendingActionResult[1].error : undefined; // Process loader results into state.loaderData/state.errors - matches.forEach(match => { - if (!(match.route.id in results)) { - return; - } - let id = match.route.id; - let result = results[id]; + results.forEach((result, index) => { + let id = matchesToLoad[index].route.id; invariant(!isRedirectResult(result), "Cannot handle redirect results in processLoaderData"); if (isErrorResult(result)) { let error = result.error; @@ -12471,21 +11633,21 @@ function processLoaderData(state, matches, matchesToLoad, results, pendingAction let { loaderData, errors - } = processRouteLoaderData(matches, results, pendingActionResult, activeDeferreds, false // This method is only called client side so we always want to bubble + } = processRouteLoaderData(matches, matchesToLoad, results, pendingActionResult, activeDeferreds, false // This method is only called client side so we always want to bubble ); // Process results from our revalidating fetchers - revalidatingFetchers.forEach(rf => { + for (let index = 0; index < revalidatingFetchers.length; index++) { let { key, match, controller - } = rf; - let result = fetcherResults[key]; - invariant(result, "Did not find corresponding fetcher result"); + } = revalidatingFetchers[index]; + invariant(fetcherResults !== undefined && fetcherResults[index] !== undefined, "Did not find corresponding fetcher result"); + let result = fetcherResults[index]; // Process fetcher non-redirect errors if (controller && controller.signal.aborted) { // Nothing to do for aborted fetchers - return; + continue; } else if (isErrorResult(result)) { let boundaryMatch = findNearestBoundary(state.matches, match == null ? void 0 : match.route.id); if (!(errors && errors[boundaryMatch.route.id])) { @@ -12506,7 +11668,7 @@ function processLoaderData(state, matches, matchesToLoad, results, pendingAction let doneFetcher = getDoneFetcher(result.data); state.fetchers.set(key, doneFetcher); } - }); + } return { loaderData, errors @@ -12572,16 +11734,13 @@ function getInternalRouterError(status, _temp5) { pathname, routeId, method, - type, - message + type } = _temp5 === void 0 ? {} : _temp5; let statusText = "Unknown Server Error"; let errorMessage = "Unknown @remix-run/router error"; if (status === 400) { statusText = "Bad Request"; - if (type === "route-discovery") { - errorMessage = "Unable to match URL \"" + pathname + "\" - the `unstable_patchRoutesOnNavigation()` " + ("function threw the following error:\n" + message); - } else if (method && pathname && routeId) { + if (method && pathname && routeId) { errorMessage = "You made a " + method + " request to \"" + pathname + "\" but " + ("did not provide a `loader` for route \"" + routeId + "\", ") + "so there is no way to handle the request."; } else if (type === "defer-action") { errorMessage = "defer() is not supported in actions"; @@ -12606,13 +11765,12 @@ function getInternalRouterError(status, _temp5) { } // Find any returned redirect errors, starting from the lowest match function findRedirect(results) { - let entries = Object.entries(results); - for (let i = entries.length - 1; i >= 0; i--) { - let [key, result] = entries[i]; + for (let i = results.length - 1; i >= 0; i--) { + let result = results[i]; if (isRedirectResult(result)) { return { - key, - result + result, + idx: i }; } } @@ -12641,13 +11799,10 @@ function isHashChangeOnly(a, b) { // /page#hash -> /page return false; } -function isPromise(val) { - return typeof val === "object" && val != null && "then" in val; -} -function isDataStrategyResult(result) { +function isHandlerResult(result) { return result != null && typeof result === "object" && "type" in result && "result" in result && (result.type === ResultType.data || result.type === ResultType.error); } -function isRedirectDataStrategyResultResult(result) { +function isRedirectHandlerResult(result) { return isResponse(result.result) && redirectStatusCodes.has(result.result.status); } function isDeferredResult(result) { @@ -12659,9 +11814,6 @@ function isErrorResult(result) { function isRedirectResult(result) { return (result && result.type) === ResultType.redirect; } -function isDataWithResponseInit(value) { - return typeof value === "object" && value != null && "type" in value && "data" in value && "init" in value && value.type === "DataWithResponseInit"; -} function isDeferredData(value) { let deferred = value; return deferred && typeof deferred === "object" && typeof deferred.data === "object" && typeof deferred.subscribe === "function" && typeof deferred.cancel === "function" && typeof deferred.resolveData === "function"; @@ -12683,11 +11835,10 @@ function isValidMethod(method) { function isMutationMethod(method) { return validMutationMethods.has(method.toLowerCase()); } -async function resolveNavigationDeferredResults(matches, results, signal, currentMatches, currentLoaderData) { - let entries = Object.entries(results); - for (let index = 0; index < entries.length; index++) { - let [routeId, result] = entries[index]; - let match = matches.find(m => (m == null ? void 0 : m.route.id) === routeId); +async function resolveDeferredResults(currentMatches, matchesToLoad, results, signals, isFetcher, currentLoaderData) { + for (let index = 0; index < results.length; index++) { + let result = results[index]; + let match = matchesToLoad[index]; // If we don't have a match, then we can have a deferred result to do // anything with. This is for revalidating fetchers where the route was // removed during HMR @@ -12696,41 +11847,15 @@ async function resolveNavigationDeferredResults(matches, results, signal, curren } let currentMatch = currentMatches.find(m => m.route.id === match.route.id); let isRevalidatingLoader = currentMatch != null && !isNewRouteInstance(currentMatch, match) && (currentLoaderData && currentLoaderData[match.route.id]) !== undefined; - if (isDeferredResult(result) && isRevalidatingLoader) { + if (isDeferredResult(result) && (isFetcher || isRevalidatingLoader)) { // Note: we do not have to touch activeDeferreds here since we race them // against the signal in resolveDeferredData and they'll get aborted // there if needed - await resolveDeferredData(result, signal, false).then(result => { + let signal = signals[index]; + invariant(signal, "Expected an AbortSignal for revalidating fetcher deferred result"); + await resolveDeferredData(result, signal, isFetcher).then(result => { if (result) { - results[routeId] = result; - } - }); - } - } -} -async function resolveFetcherDeferredResults(matches, results, revalidatingFetchers) { - for (let index = 0; index < revalidatingFetchers.length; index++) { - let { - key, - routeId, - controller - } = revalidatingFetchers[index]; - let result = results[key]; - let match = matches.find(m => (m == null ? void 0 : m.route.id) === routeId); - // If we don't have a match, then we can have a deferred result to do - // anything with. This is for revalidating fetchers where the route was - // removed during HMR - if (!match) { - continue; - } - if (isDeferredResult(result)) { - // Note: we do not have to touch activeDeferreds here since we race them - // against the signal in resolveDeferredData and they'll get aborted - // there if needed - invariant(controller, "Expected an AbortController for revalidating fetcher deferred result"); - await resolveDeferredData(result, controller.signal, true).then(result => { - if (result) { - results[key] = result; + results[index] = result || results[index]; } }); } @@ -12962,18 +12087,15 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var _rjsf_utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @rjsf/utils */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/@rjsf/utils/lib/index.js"); -/* harmony import */ var lodash_forEach__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! lodash/forEach */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/lodash/forEach.js"); -/* harmony import */ var lodash_forEach__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(lodash_forEach__WEBPACK_IMPORTED_MODULE_3__); -/* harmony import */ var lodash_get__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! lodash/get */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/lodash/get.js"); -/* harmony import */ var lodash_get__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(lodash_get__WEBPACK_IMPORTED_MODULE_4__); -/* harmony import */ var lodash_isEmpty__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! lodash/isEmpty */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/lodash/isEmpty.js"); -/* harmony import */ var lodash_isEmpty__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(lodash_isEmpty__WEBPACK_IMPORTED_MODULE_5__); -/* harmony import */ var lodash_pick__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! lodash/pick */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/lodash/pick.js"); -/* harmony import */ var lodash_pick__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(lodash_pick__WEBPACK_IMPORTED_MODULE_6__); -/* harmony import */ var lodash_toPath__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! lodash/toPath */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/lodash/toPath.js"); -/* harmony import */ var lodash_toPath__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(lodash_toPath__WEBPACK_IMPORTED_MODULE_7__); -/* harmony import */ var _getDefaultRegistry__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../getDefaultRegistry */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/@rjsf/core/lib/getDefaultRegistry.js"); - +/* harmony import */ var lodash_get__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! lodash/get */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/lodash/get.js"); +/* harmony import */ var lodash_get__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(lodash_get__WEBPACK_IMPORTED_MODULE_3__); +/* harmony import */ var lodash_isEmpty__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! lodash/isEmpty */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/lodash/isEmpty.js"); +/* harmony import */ var lodash_isEmpty__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(lodash_isEmpty__WEBPACK_IMPORTED_MODULE_4__); +/* harmony import */ var lodash_pick__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! lodash/pick */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/lodash/pick.js"); +/* harmony import */ var lodash_pick__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(lodash_pick__WEBPACK_IMPORTED_MODULE_5__); +/* harmony import */ var lodash_toPath__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! lodash/toPath */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/lodash/toPath.js"); +/* harmony import */ var lodash_toPath__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(lodash_toPath__WEBPACK_IMPORTED_MODULE_6__); +/* harmony import */ var _getDefaultRegistry__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../getDefaultRegistry */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/@rjsf/core/lib/getDefaultRegistry.js"); @@ -13003,7 +12125,7 @@ class Form extends react__WEBPACK_IMPORTED_MODULE_1__.Component { return formData; } // _pick has incorrect type definition, it works with string[][], because lodash/hasIn supports it - const data = lodash_pick__WEBPACK_IMPORTED_MODULE_6___default()(formData, fields); + const data = lodash_pick__WEBPACK_IMPORTED_MODULE_5___default()(formData, fields); if (Array.isArray(formData)) { return Object.keys(data).map((key) => data[key]); } @@ -13020,7 +12142,7 @@ class Form extends react__WEBPACK_IMPORTED_MODULE_1__.Component { if (typeof _obj[key] === 'object') { const newPaths = paths.map((path) => [...path, key]); // If an object is marked with additionalProperties, all its keys are valid - if (_obj[key][_rjsf_utils__WEBPACK_IMPORTED_MODULE_2__.RJSF_ADDITIONAL_PROPERTIES_FLAG] && _obj[key][_rjsf_utils__WEBPACK_IMPORTED_MODULE_2__.NAME_KEY] !== '') { + if (_obj[key][_rjsf_utils__WEBPACK_IMPORTED_MODULE_2__.RJSF_ADDITONAL_PROPERTIES_FLAG] && _obj[key][_rjsf_utils__WEBPACK_IMPORTED_MODULE_2__.NAME_KEY] !== '') { acc.push(_obj[key][_rjsf_utils__WEBPACK_IMPORTED_MODULE_2__.NAME_KEY]); } else { @@ -13029,11 +12151,11 @@ class Form extends react__WEBPACK_IMPORTED_MODULE_1__.Component { } else if (key === _rjsf_utils__WEBPACK_IMPORTED_MODULE_2__.NAME_KEY && _obj[key] !== '') { paths.forEach((path) => { - const formValue = lodash_get__WEBPACK_IMPORTED_MODULE_4___default()(formData, path); + const formValue = lodash_get__WEBPACK_IMPORTED_MODULE_3___default()(formData, path); // adds path to fieldNames if it points to a value // or an empty object/array if (typeof formValue !== 'object' || - lodash_isEmpty__WEBPACK_IMPORTED_MODULE_5___default()(formValue) || + lodash_isEmpty__WEBPACK_IMPORTED_MODULE_4___default()(formValue) || (Array.isArray(formValue) && formValue.every((val) => typeof val !== 'object'))) { acc.push(path); } @@ -13044,22 +12166,9 @@ class Form extends react__WEBPACK_IMPORTED_MODULE_1__.Component { }; return getAllPaths(pathSchema); }; - /** Returns the `formData` after filtering to remove any extra data not in a form field - * - * @param formData - The data for the `Form` - * @returns The `formData` after omitting extra data - */ - this.omitExtraData = (formData) => { - const { schema, schemaUtils } = this.state; - const retrievedSchema = schemaUtils.retrieveSchema(schema, formData); - const pathSchema = schemaUtils.toPathSchema(retrievedSchema, '', formData); - const fieldNames = this.getFieldNames(pathSchema, formData); - const newFormData = this.getUsedFormData(formData, fieldNames); - return newFormData; - }; /** Function to handle changes made to a field in the `Form`. This handler receives an entirely new copy of the * `formData` along with a new `ErrorSchema`. It will first update the `formData` with any missing default fields and - * then, if `omitExtraData` and `liveOmit` are turned on, the `formData` will be filtered to remove any extra data not + * then, if `omitExtraData` and `liveOmit` are turned on, the `formData` will be filterer to remove any extra data not * in a form field. Then, the resulting formData will be validated if required. The state will be updated with the new * updated (potentially filtered) `formData`, any errors that resulted from validation. Finally the `onChange` * callback will be called if specified with the updated state. @@ -13080,7 +12189,10 @@ class Form extends react__WEBPACK_IMPORTED_MODULE_1__.Component { let newFormData = formData; let _retrievedSchema; if (omitExtraData === true && liveOmit === true) { - newFormData = this.omitExtraData(formData); + _retrievedSchema = schemaUtils.retrieveSchema(schema, formData); + const pathSchema = schemaUtils.toPathSchema(_retrievedSchema, '', formData); + const fieldNames = this.getFieldNames(pathSchema, formData); + newFormData = this.getUsedFormData(formData, fieldNames); state = { formData: newFormData, }; @@ -13096,11 +12208,6 @@ class Form extends react__WEBPACK_IMPORTED_MODULE_1__.Component { errorSchema = merged.errorSchema; errors = merged.errors; } - // Merging 'newErrorSchema' into 'errorSchema' to display the custom raised errors. - if (newErrorSchema) { - const filteredErrors = this.filterErrorsBasedOnSchema(newErrorSchema, retrievedSchema, newFormData); - errorSchema = (0,_rjsf_utils__WEBPACK_IMPORTED_MODULE_2__.mergeObjects)(errorSchema, filteredErrors, 'preventDuplicates'); - } state = { formData: newFormData, errors, @@ -13183,10 +12290,14 @@ class Form extends react__WEBPACK_IMPORTED_MODULE_1__.Component { event.persist(); const { omitExtraData, extraErrors, noValidate, onSubmit } = this.props; let { formData: newFormData } = this.state; + const { schema, schemaUtils } = this.state; if (omitExtraData === true) { - newFormData = this.omitExtraData(newFormData); + const retrievedSchema = schemaUtils.retrieveSchema(schema, newFormData); + const pathSchema = schemaUtils.toPathSchema(retrievedSchema, '', newFormData); + const fieldNames = this.getFieldNames(pathSchema, newFormData); + newFormData = this.getUsedFormData(newFormData, fieldNames); } - if (noValidate || this.validateFormWithFormData(newFormData)) { + if (noValidate || this.validateForm()) { // There are no errors generated through schema validation. // Check for user provided errors and update state accordingly. const errorSchema = extraErrors || {}; @@ -13215,59 +12326,6 @@ class Form extends react__WEBPACK_IMPORTED_MODULE_1__.Component { this.formElement.current.requestSubmit(); } }; - /** Validates the form using the given `formData`. For use on form submission or on programmatic validation. - * If `onError` is provided, then it will be called with the list of errors. - * - * @param formData - The form data to validate - * @returns - True if the form is valid, false otherwise. - */ - this.validateFormWithFormData = (formData) => { - const { extraErrors, extraErrorsBlockSubmit, focusOnFirstError, onError } = this.props; - const { errors: prevErrors } = this.state; - const schemaValidation = this.validate(formData); - let errors = schemaValidation.errors; - let errorSchema = schemaValidation.errorSchema; - const schemaValidationErrors = errors; - const schemaValidationErrorSchema = errorSchema; - const hasError = errors.length > 0 || (extraErrors && extraErrorsBlockSubmit); - if (hasError) { - if (extraErrors) { - const merged = (0,_rjsf_utils__WEBPACK_IMPORTED_MODULE_2__.validationDataMerge)(schemaValidation, extraErrors); - errorSchema = merged.errorSchema; - errors = merged.errors; - } - if (focusOnFirstError) { - if (typeof focusOnFirstError === 'function') { - focusOnFirstError(errors[0]); - } - else { - this.focusOnError(errors[0]); - } - } - this.setState({ - errors, - errorSchema, - schemaValidationErrors, - schemaValidationErrorSchema, - }, () => { - if (onError) { - onError(errors); - } - else { - console.error('Form validation failed', errors); - } - }); - } - else if (prevErrors.length > 0) { - this.setState({ - errors: [], - errorSchema: {}, - schemaValidationErrors: [], - schemaValidationErrorSchema: {}, - }); - } - return !hasError; - }; if (!props.validator) { throw new Error('A validator is required for Form functionality to work'); } @@ -13346,7 +12404,6 @@ class Form extends react__WEBPACK_IMPORTED_MODULE_1__.Component { * @returns - The new state for the `Form` */ getStateFromProps(props, inputFormData, retrievedSchema, isSchemaChanged = false) { - var _a; const state = this.state || {}; const schema = 'schema' in props ? props.schema : this.props.schema; const uiSchema = ('uiSchema' in props ? props.uiSchema : this.props.uiSchema) || {}; @@ -13387,14 +12444,7 @@ class Form extends react__WEBPACK_IMPORTED_MODULE_1__.Component { if (mustValidate) { const schemaValidation = this.validate(formData, schema, schemaUtils, _retrievedSchema); errors = schemaValidation.errors; - // If the schema has changed, we do not merge state.errorSchema. - // Else in the case where it hasn't changed, we merge 'state.errorSchema' with 'schemaValidation.errorSchema.' This done to display the raised field error. - if (isSchemaChanged) { - errorSchema = schemaValidation.errorSchema; - } - else { - errorSchema = (0,_rjsf_utils__WEBPACK_IMPORTED_MODULE_2__.mergeObjects)((_a = this.state) === null || _a === void 0 ? void 0 : _a.errorSchema, schemaValidation.errorSchema, 'preventDuplicates'); - } + errorSchema = schemaValidation.errorSchema; schemaValidationErrors = errors; schemaValidationErrorSchema = errorSchema; } @@ -13459,37 +12509,12 @@ class Form extends react__WEBPACK_IMPORTED_MODULE_1__.Component { } return null; } - // Filtering errors based on your retrieved schema to only show errors for properties in the selected branch. - filterErrorsBasedOnSchema(schemaErrors, resolvedSchema, formData) { - const { retrievedSchema, schemaUtils } = this.state; - const _retrievedSchema = resolvedSchema !== null && resolvedSchema !== void 0 ? resolvedSchema : retrievedSchema; - const pathSchema = schemaUtils.toPathSchema(_retrievedSchema, '', formData); - const fieldNames = this.getFieldNames(pathSchema, formData); - const filteredErrors = lodash_pick__WEBPACK_IMPORTED_MODULE_6___default()(schemaErrors, fieldNames); - // If the root schema is of a primitive type, do not filter out the __errors - if ((resolvedSchema === null || resolvedSchema === void 0 ? void 0 : resolvedSchema.type) !== 'object' && (resolvedSchema === null || resolvedSchema === void 0 ? void 0 : resolvedSchema.type) !== 'array') { - filteredErrors.__errors = schemaErrors.__errors; - } - // Removing undefined and empty errors. - const filterUndefinedErrors = (errors) => { - lodash_forEach__WEBPACK_IMPORTED_MODULE_3___default()(errors, (errorAtKey, errorKey) => { - if (errorAtKey === undefined) { - delete errors[errorKey]; - } - else if (typeof errorAtKey === 'object' && !Array.isArray(errorAtKey.__errors)) { - filterUndefinedErrors(errorAtKey); - } - }); - return errors; - }; - return filterUndefinedErrors(filteredErrors); - } /** Returns the registry for the form */ getRegistry() { var _a; const { translateString: customTranslateString, uiSchema = {} } = this.props; const { schemaUtils } = this.state; - const { fields, templates, widgets, formContext, translateString } = (0,_getDefaultRegistry__WEBPACK_IMPORTED_MODULE_8__["default"])(); + const { fields, templates, widgets, formContext, translateString } = (0,_getDefaultRegistry__WEBPACK_IMPORTED_MODULE_7__["default"])(); return { fields: { ...fields, ...this.props.fields }, templates: { @@ -13517,7 +12542,7 @@ class Form extends react__WEBPACK_IMPORTED_MODULE_1__.Component { focusOnError(error) { const { idPrefix = 'root', idSeparator = '_' } = this.props; const { property } = error; - const path = lodash_toPath__WEBPACK_IMPORTED_MODULE_7___default()(property); + const path = lodash_toPath__WEBPACK_IMPORTED_MODULE_6___default()(property); if (path[0] === '') { // Most of the time the `.foo` property results in the first element being empty, so replace it with the idPrefix path[0] = idPrefix; @@ -13530,7 +12555,7 @@ class Form extends react__WEBPACK_IMPORTED_MODULE_1__.Component { let field = this.formElement.current.elements[elementId]; if (!field) { // if not an exact match, try finding an input starting with the element id (like radio buttons or checkboxes) - field = this.formElement.current.querySelector(`input[id^="${elementId}"`); + field = this.formElement.current.querySelector(`input[id^=${elementId}`); } if (field && field.length) { // If we got a list with length > 0 @@ -13540,25 +12565,63 @@ class Form extends react__WEBPACK_IMPORTED_MODULE_1__.Component { field.focus(); } } - /** Programmatically validate the form. If `omitExtraData` is true, the `formData` will first be filtered to remove - * any extra data not in a form field. If `onError` is provided, then it will be called with the list of errors the + /** Programmatically validate the form. If `onError` is provided, then it will be called with the list of errors the * same way as would happen on form submission. * * @returns - True if the form is valid, false otherwise. */ validateForm() { - const { omitExtraData } = this.props; - let { formData: newFormData } = this.state; - if (omitExtraData === true) { - newFormData = this.omitExtraData(newFormData); + const { extraErrors, extraErrorsBlockSubmit, focusOnFirstError, onError } = this.props; + const { formData, errors: prevErrors } = this.state; + const schemaValidation = this.validate(formData); + let errors = schemaValidation.errors; + let errorSchema = schemaValidation.errorSchema; + const schemaValidationErrors = errors; + const schemaValidationErrorSchema = errorSchema; + const hasError = errors.length > 0 || (extraErrors && extraErrorsBlockSubmit); + if (hasError) { + if (extraErrors) { + const merged = (0,_rjsf_utils__WEBPACK_IMPORTED_MODULE_2__.validationDataMerge)(schemaValidation, extraErrors); + errorSchema = merged.errorSchema; + errors = merged.errors; + } + if (focusOnFirstError) { + if (typeof focusOnFirstError === 'function') { + focusOnFirstError(errors[0]); + } + else { + this.focusOnError(errors[0]); + } + } + this.setState({ + errors, + errorSchema, + schemaValidationErrors, + schemaValidationErrorSchema, + }, () => { + if (onError) { + onError(errors); + } + else { + console.error('Form validation failed', errors); + } + }); } - return this.validateFormWithFormData(newFormData); + else if (prevErrors.length > 0) { + this.setState({ + errors: [], + errorSchema: {}, + schemaValidationErrors: [], + schemaValidationErrorSchema: {}, + }); + } + return !hasError; } /** Renders the `Form` fields inside the
| `tagName` or `_internalFormWrapper`, rendering any errors if * needed along with the submit button or any children of the form. */ render() { - const { children, id, idPrefix, idSeparator, className = '', tagName, name, method, target, action, autoComplete, enctype, acceptcharset, acceptCharset, noHtml5Validate = false, disabled, readonly, formContext, showErrorList = 'top', _internalFormWrapper, } = this.props; + const { children, id, idPrefix, idSeparator, className = '', tagName, name, method, target, action, autoComplete, enctype, acceptcharset, noHtml5Validate = false, disabled = false, readonly = false, formContext, showErrorList = 'top', _internalFormWrapper, } = this.props; const { schema, uiSchema, formData, errorSchema, idSchema } = this.state; const registry = this.getRegistry(); const { SchemaField: _SchemaField } = registry.fields; @@ -13573,7 +12636,7 @@ class Form extends react__WEBPACK_IMPORTED_MODULE_1__.Component { submitOptions = { ...submitOptions, props: { ...submitOptions.props, disabled: true } }; } const submitUiSchema = { [_rjsf_utils__WEBPACK_IMPORTED_MODULE_2__.UI_OPTIONS_KEY]: { [_rjsf_utils__WEBPACK_IMPORTED_MODULE_2__.SUBMIT_BTN_OPTIONS_KEY]: submitOptions } }; - return ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(FormTag, { className: className ? className : 'rjsf', id: id, name: name, method: method, target: target, action: action, autoComplete: autoComplete, encType: enctype, acceptCharset: acceptCharset || acceptcharset, noValidate: noHtml5Validate, onSubmit: this.onSubmit, as: as, ref: this.formElement, children: [showErrorList === 'top' && this.renderErrors(registry), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_SchemaField, { name: '', schema: schema, uiSchema: uiSchema, errorSchema: errorSchema, idSchema: idSchema, idPrefix: idPrefix, idSeparator: idSeparator, formContext: formContext, formData: formData, onChange: this.onChange, onBlur: this.onBlur, onFocus: this.onFocus, registry: registry, disabled: disabled, readonly: readonly }), children ? children : (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(SubmitButton, { uiSchema: submitUiSchema, registry: registry }), showErrorList === 'bottom' && this.renderErrors(registry)] })); + return ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(FormTag, { className: className ? className : 'rjsf', id: id, name: name, method: method, target: target, action: action, autoComplete: autoComplete, encType: enctype, acceptCharset: acceptcharset, noValidate: noHtml5Validate, onSubmit: this.onSubmit, as: as, ref: this.formElement, children: [showErrorList === 'top' && this.renderErrors(registry), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_SchemaField, { name: '', schema: schema, uiSchema: uiSchema, errorSchema: errorSchema, idSchema: idSchema, idPrefix: idPrefix, idSeparator: idSeparator, formContext: formContext, formData: formData, onChange: this.onChange, onBlur: this.onBlur, onFocus: this.onFocus, registry: registry, disabled: disabled, readonly: readonly }), children ? children : (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(SubmitButton, { uiSchema: submitUiSchema, registry: registry }), showErrorList === 'bottom' && this.renderErrors(registry)] })); } } //# sourceMappingURL=Form.js.map @@ -14060,7 +13123,7 @@ class ArrayField extends react__WEBPACK_IMPORTED_MODULE_1__.Component { const { schema, idSchema, uiSchema, formData: items = [], disabled = false, readonly = false, autofocus = false, required = false, placeholder, onBlur, onFocus, registry, rawErrors, name, } = this.props; const { widgets, schemaUtils, formContext, globalUiOptions } = registry; const itemsSchema = schemaUtils.retrieveSchema(schema.items, items); - const enumOptions = (0,_rjsf_utils__WEBPACK_IMPORTED_MODULE_2__.optionsList)(itemsSchema, uiSchema); + const enumOptions = (0,_rjsf_utils__WEBPACK_IMPORTED_MODULE_2__.optionsList)(itemsSchema); const { widget = 'select', title: uiTitle, ...options } = (0,_rjsf_utils__WEBPACK_IMPORTED_MODULE_2__.getUiOptions)(uiSchema, globalUiOptions); const Widget = (0,_rjsf_utils__WEBPACK_IMPORTED_MODULE_2__.getWidget)(schema, widget, widgets); const label = (_a = uiTitle !== null && uiTitle !== void 0 ? uiTitle : schema.title) !== null && _a !== void 0 ? _a : name; @@ -14257,7 +13320,7 @@ function BooleanField(props) { return undefined; }) .filter((o) => o), // cast away the error that typescript can't grok is fixed - }, uiSchema); + }); } else { // We deprecated enumNames in v5. It's intentionally omitted from RSJFSchema type, so we need to cast here. @@ -14280,7 +13343,7 @@ function BooleanField(props) { enum: enums, // NOTE: enumNames is deprecated, but still supported for now. enumNames: schemaWithEnumNames.enumNames, - }, uiSchema); + }); } } return ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(Widget, { options: { ...options, enumOptions }, schema: schema, uiSchema: uiSchema, id: idSchema.$id, name: name, onChange: onChange, onFocus: onFocus, onBlur: onBlur, label: label, hideLabel: !displayLabel, value: formData, required: required, disabled: disabled, readonly: readonly, hideError: hideError, registry: registry, formContext: formContext, autofocus: autofocus, rawErrors: rawErrors })); @@ -14575,7 +13638,7 @@ function NumberField(props) { // Construct a regular expression that checks for a string that consists // of the formData value suffixed with zero or one '.' characters and zero // or more '0' characters - const re = new RegExp(`^(${String(value).replace('.', '\\.')})?\\.?0*$`); + const re = new RegExp(`${value}`.replace('.', '\\.') + '\\.?0*$'); // If the cached "lastValue" is a match, use that instead of the formData // value to prevent the input value from changing in the UI if (lastValue.match(re)) { @@ -14740,16 +13803,13 @@ class ObjectField extends react__WEBPACK_IMPORTED_MODULE_1__.Component { const { formData, onChange, registry } = this.props; const newFormData = { ...formData }; let type = undefined; - let defaultValue = undefined; if (lodash_isObject__WEBPACK_IMPORTED_MODULE_5___default()(schema.additionalProperties)) { type = schema.additionalProperties.type; - defaultValue = schema.additionalProperties.default; let apSchema = schema.additionalProperties; if (_rjsf_utils__WEBPACK_IMPORTED_MODULE_2__.REF_KEY in apSchema) { const { schemaUtils } = registry; apSchema = schemaUtils.retrieveSchema({ $ref: apSchema[_rjsf_utils__WEBPACK_IMPORTED_MODULE_2__.REF_KEY] }, formData); type = apSchema.type; - defaultValue = apSchema.default; } if (!type && (_rjsf_utils__WEBPACK_IMPORTED_MODULE_2__.ANY_OF_KEY in apSchema || _rjsf_utils__WEBPACK_IMPORTED_MODULE_2__.ONE_OF_KEY in apSchema)) { type = 'object'; @@ -14757,7 +13817,7 @@ class ObjectField extends react__WEBPACK_IMPORTED_MODULE_1__.Component { } const newKey = this.getAvailableKey('newKey', newFormData); // Cast this to make the `set` work properly - lodash_set__WEBPACK_IMPORTED_MODULE_6___default()(newFormData, newKey, defaultValue !== null && defaultValue !== void 0 ? defaultValue : this.getDefaultValue(type)); + lodash_set__WEBPACK_IMPORTED_MODULE_6___default()(newFormData, newKey, this.getDefaultValue(type)); onChange(newFormData); }; } @@ -14797,7 +13857,7 @@ class ObjectField extends react__WEBPACK_IMPORTED_MODULE_1__.Component { */ render() { var _a, _b, _c, _d; - const { schema: rawSchema, uiSchema = {}, formData, errorSchema, idSchema, name, required = false, disabled, readonly, hideError, idPrefix, idSeparator, onBlur, onFocus, registry, title, } = this.props; + const { schema: rawSchema, uiSchema = {}, formData, errorSchema, idSchema, name, required = false, disabled = false, readonly = false, hideError, idPrefix, idSeparator, onBlur, onFocus, registry, title, } = this.props; const { fields, formContext, schemaUtils, translateString, globalUiOptions } = registry; const { SchemaField } = fields; const schema = schemaUtils.retrieveSchema(rawSchema, formData); @@ -14811,7 +13871,7 @@ class ObjectField extends react__WEBPACK_IMPORTED_MODULE_1__.Component { orderedProperties = (0,_rjsf_utils__WEBPACK_IMPORTED_MODULE_2__.orderProperties)(properties, uiOptions.order); } catch (err) { - return ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", { children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("p", { className: 'config-error', style: { color: 'red' }, children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(markdown_to_jsx__WEBPACK_IMPORTED_MODULE_8__["default"], { options: { disableParsingRawHTML: true }, children: translateString(_rjsf_utils__WEBPACK_IMPORTED_MODULE_2__.TranslatableString.InvalidObjectField, [name || 'root', err.message]) }) }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("pre", { children: JSON.stringify(schema) })] })); + return ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", { children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("p", { className: 'config-error', style: { color: 'red' }, children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(markdown_to_jsx__WEBPACK_IMPORTED_MODULE_8__["default"], { children: translateString(_rjsf_utils__WEBPACK_IMPORTED_MODULE_2__.TranslatableString.InvalidObjectField, [name || 'root', err.message]) }) }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("pre", { children: JSON.stringify(schema) })] })); } const Template = (0,_rjsf_utils__WEBPACK_IMPORTED_MODULE_2__.getTemplate)('ObjectFieldTemplate', registry, uiOptions); const templateProps = { @@ -14932,7 +13992,6 @@ function getFieldComponent(schema, uiOptions, idSchema, registry) { * @param props - The `FieldProps` for this component */ function SchemaFieldRender(props) { - var _a, _b, _c; const { schema: _schema, idSchema: _idSchema, uiSchema, formData, errorSchema, idPrefix, idSeparator, name, onChange, onKeyChange, onDropPropertyClick, required, registry, wasPropertyKeyModified = false, } = props; const { formContext, schemaUtils, globalUiOptions } = registry; const uiOptions = (0,_rjsf_utils__WEBPACK_IMPORTED_MODULE_2__.getUiOptions)(uiSchema, globalUiOptions); @@ -14951,12 +14010,12 @@ function SchemaFieldRender(props) { return onChange(formData, newErrorSchema, theId); }, [fieldId, onChange]); const FieldComponent = getFieldComponent(schema, uiOptions, idSchema, registry); - const disabled = Boolean((_a = uiOptions.disabled) !== null && _a !== void 0 ? _a : props.disabled); - const readonly = Boolean((_b = uiOptions.readonly) !== null && _b !== void 0 ? _b : (props.readonly || props.schema.readOnly || schema.readOnly)); + const disabled = Boolean(props.disabled || uiOptions.disabled); + const readonly = Boolean(props.readonly || uiOptions.readonly || props.schema.readOnly || schema.readOnly); const uiSchemaHideError = uiOptions.hideError; // Set hideError to the value provided in the uiSchema, otherwise stick with the prop to propagate to children const hideError = uiSchemaHideError === undefined ? props.hideError : Boolean(uiSchemaHideError); - const autofocus = Boolean((_c = uiOptions.autofocus) !== null && _c !== void 0 ? _c : props.autofocus); + const autofocus = Boolean(props.autofocus || uiOptions.autofocus); if (Object.keys(schema).length === 0) { return null; } @@ -14981,7 +14040,7 @@ function SchemaFieldRender(props) { : uiOptions.title || props.schema.title || schema.title || props.title || name; } const description = uiOptions.description || props.schema.description || schema.description || ''; - const richDescription = uiOptions.enableMarkdownInDescription ? ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(markdown_to_jsx__WEBPACK_IMPORTED_MODULE_5__["default"], { options: { disableParsingRawHTML: true }, children: description })) : (description); + const richDescription = uiOptions.enableMarkdownInDescription ? (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(markdown_to_jsx__WEBPACK_IMPORTED_MODULE_5__["default"], { children: description }) : description; const help = uiOptions.help; const hidden = uiOptions.widget === 'hidden'; const classNames = ['form-group', 'field', `field-${(0,_rjsf_utils__WEBPACK_IMPORTED_MODULE_2__.getSchemaType)(schema)}`]; @@ -15074,7 +14133,7 @@ function StringField(props) { const { schema, name, uiSchema, idSchema, formData, required, disabled = false, readonly = false, autofocus = false, onChange, onBlur, onFocus, registry, rawErrors, hideError, } = props; const { title, format } = schema; const { widgets, formContext, schemaUtils, globalUiOptions } = registry; - const enumOptions = schemaUtils.isSelect(schema) ? (0,_rjsf_utils__WEBPACK_IMPORTED_MODULE_1__.optionsList)(schema, uiSchema) : undefined; + const enumOptions = schemaUtils.isSelect(schema) ? (0,_rjsf_utils__WEBPACK_IMPORTED_MODULE_1__.optionsList)(schema) : undefined; let defaultWidget = enumOptions ? 'select' : 'text'; if (format && (0,_rjsf_utils__WEBPACK_IMPORTED_MODULE_1__.hasWidget)(schema, format, widgets)) { defaultWidget = format; @@ -15320,8 +14379,8 @@ function BaseInputTemplate(props) { inputValue = value == null ? '' : value; } const _onChange = (0,react__WEBPACK_IMPORTED_MODULE_1__.useCallback)(({ target: { value } }) => onChange(value === '' ? options.emptyValue : value), [onChange, options]); - const _onBlur = (0,react__WEBPACK_IMPORTED_MODULE_1__.useCallback)(({ target }) => onBlur(id, target && target.value), [onBlur, id]); - const _onFocus = (0,react__WEBPACK_IMPORTED_MODULE_1__.useCallback)(({ target }) => onFocus(id, target && target.value), [onFocus, id]); + const _onBlur = (0,react__WEBPACK_IMPORTED_MODULE_1__.useCallback)(({ target: { value } }) => onBlur(id, value), [onBlur, id]); + const _onFocus = (0,react__WEBPACK_IMPORTED_MODULE_1__.useCallback)(({ target: { value } }) => onFocus(id, value), [onFocus, id]); return ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, { children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("input", { id: id, name: id, className: 'form-control', readOnly: readonly, disabled: disabled, autoFocus: autofocus, value: inputValue, ...inputProps, list: schema.examples ? (0,_rjsf_utils__WEBPACK_IMPORTED_MODULE_2__.examplesId)(id) : undefined, onChange: onChangeOverride || _onChange, onBlur: _onBlur, onFocus: _onFocus, "aria-describedby": (0,_rjsf_utils__WEBPACK_IMPORTED_MODULE_2__.ariaDescribedByIds)(id, !!schema.examples) }), Array.isArray(schema.examples) && ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("datalist", { id: (0,_rjsf_utils__WEBPACK_IMPORTED_MODULE_2__.examplesId)(id), children: schema.examples .concat(schema.default && !schema.examples.includes(schema.default) ? [schema.default] : []) .map((example) => { @@ -15773,7 +14832,7 @@ function UnsupportedField(props) { : _rjsf_utils__WEBPACK_IMPORTED_MODULE_1__.TranslatableString.UnsupportedFieldWithIdAndReason; translateParams.push(reason); } - return ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", { className: 'unsupported-field', children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("p", { children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(markdown_to_jsx__WEBPACK_IMPORTED_MODULE_2__["default"], { options: { disableParsingRawHTML: true }, children: translateString(translateEnum, translateParams) }) }), schema && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("pre", { children: JSON.stringify(schema, null, 2) })] })); + return ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", { className: 'unsupported-field', children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("p", { children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(markdown_to_jsx__WEBPACK_IMPORTED_MODULE_2__["default"], { children: translateString(translateEnum, translateParams) }) }), schema && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("pre", { children: JSON.stringify(schema, null, 2) })] })); } /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (UnsupportedField); //# sourceMappingURL=UnsupportedField.js.map @@ -15812,7 +14871,7 @@ function WrapIfAdditionalTemplate(props) { if (!additional) { return ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("div", { className: classNames, style: style, children: children })); } - return ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("div", { className: classNames, style: style, children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", { className: 'row', children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("div", { className: 'col-xs-5 form-additional', children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", { className: 'form-group', children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_FieldTemplate_Label__WEBPACK_IMPORTED_MODULE_2__["default"], { label: keyLabel, required: required, id: `${id}-key` }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("input", { className: 'form-control', type: 'text', id: `${id}-key`, onBlur: ({ target }) => onKeyChange(target && target.value), defaultValue: label })] }) }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("div", { className: 'form-additional form-group col-xs-5', children: children }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("div", { className: 'col-xs-2', children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(RemoveButton, { className: 'array-item-remove btn-block', style: { border: '0' }, disabled: disabled || readonly, onClick: onDropPropertyClick(label), uiSchema: uiSchema, registry: registry }) })] }) })); + return ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("div", { className: classNames, style: style, children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", { className: 'row', children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("div", { className: 'col-xs-5 form-additional', children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", { className: 'form-group', children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_FieldTemplate_Label__WEBPACK_IMPORTED_MODULE_2__["default"], { label: keyLabel, required: required, id: `${id}-key` }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("input", { className: 'form-control', type: 'text', id: `${id}-key`, onBlur: (event) => onKeyChange(event.target.value), defaultValue: label })] }) }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("div", { className: 'form-additional form-group col-xs-5', children: children }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("div", { className: 'col-xs-2', children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(RemoveButton, { className: 'array-item-remove btn-block', style: { border: '0' }, disabled: disabled || readonly, onClick: onDropPropertyClick(label), uiSchema: uiSchema, registry: registry }) })] }) })); } //# sourceMappingURL=WrapIfAdditionalTemplate.js.map @@ -15928,13 +14987,20 @@ __webpack_require__.r(__webpack_exports__); +function rangeOptions(start, stop) { + const options = []; + for (let i = start; i <= stop; i++) { + options.push({ value: i, label: (0,_rjsf_utils__WEBPACK_IMPORTED_MODULE_2__.pad)(i, 2) }); + } + return options; +} function readyForChange(state) { return Object.values(state).every((value) => value !== -1); } function DateElement({ type, range, value, select, rootId, name, disabled, readonly, autofocus, registry, onBlur, onFocus, }) { const id = rootId + '_' + type; const { SelectWidget } = registry.widgets; - return ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(SelectWidget, { schema: { type: 'integer' }, id: id, name: name, className: 'form-control', options: { enumOptions: (0,_rjsf_utils__WEBPACK_IMPORTED_MODULE_2__.dateRangeOptions)(range[0], range[1]) }, placeholder: type, value: value, disabled: disabled, readonly: readonly, autofocus: autofocus, onChange: (value) => select(type, value), onBlur: onBlur, onFocus: onFocus, registry: registry, label: '', "aria-describedby": (0,_rjsf_utils__WEBPACK_IMPORTED_MODULE_2__.ariaDescribedByIds)(rootId) })); + return ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(SelectWidget, { schema: { type: 'integer' }, id: id, name: name, className: 'form-control', options: { enumOptions: rangeOptions(range[0], range[1]) }, placeholder: type, value: value, disabled: disabled, readonly: readonly, autofocus: autofocus, onChange: (value) => select(type, value), onBlur: onBlur, onFocus: onFocus, registry: registry, label: '', "aria-describedby": (0,_rjsf_utils__WEBPACK_IMPORTED_MODULE_2__.ariaDescribedByIds)(rootId) })); } /** The `AltDateWidget` is an alternative widget for rendering date properties. * @param props - The `WidgetProps` for this component @@ -16048,8 +15114,8 @@ __webpack_require__.r(__webpack_exports__); */ function CheckboxesWidget({ id, disabled, options: { inline = false, enumOptions, enumDisabled, emptyValue }, value, autofocus = false, readonly, onChange, onBlur, onFocus, }) { const checkboxesValues = Array.isArray(value) ? value : [value]; - const handleBlur = (0,react__WEBPACK_IMPORTED_MODULE_1__.useCallback)(({ target }) => onBlur(id, (0,_rjsf_utils__WEBPACK_IMPORTED_MODULE_2__.enumOptionsValueForIndex)(target && target.value, enumOptions, emptyValue)), [onBlur, id]); - const handleFocus = (0,react__WEBPACK_IMPORTED_MODULE_1__.useCallback)(({ target }) => onFocus(id, (0,_rjsf_utils__WEBPACK_IMPORTED_MODULE_2__.enumOptionsValueForIndex)(target && target.value, enumOptions, emptyValue)), [onFocus, id]); + const handleBlur = (0,react__WEBPACK_IMPORTED_MODULE_1__.useCallback)(({ target: { value } }) => onBlur(id, (0,_rjsf_utils__WEBPACK_IMPORTED_MODULE_2__.enumOptionsValueForIndex)(value, enumOptions, emptyValue)), [onBlur, id]); + const handleFocus = (0,react__WEBPACK_IMPORTED_MODULE_1__.useCallback)(({ target: { value } }) => onFocus(id, (0,_rjsf_utils__WEBPACK_IMPORTED_MODULE_2__.enumOptionsValueForIndex)(value, enumOptions, emptyValue)), [onFocus, id]); return ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("div", { className: 'checkboxes', id: id, children: Array.isArray(enumOptions) && enumOptions.map((option, index) => { const checked = (0,_rjsf_utils__WEBPACK_IMPORTED_MODULE_2__.enumOptionsIsSelected)(option.value, checkboxesValues); @@ -16417,8 +15483,8 @@ __webpack_require__.r(__webpack_exports__); */ function RadioWidget({ options, value, required, disabled, readonly, autofocus = false, onBlur, onFocus, onChange, id, }) { const { enumOptions, enumDisabled, inline, emptyValue } = options; - const handleBlur = (0,react__WEBPACK_IMPORTED_MODULE_1__.useCallback)(({ target }) => onBlur(id, (0,_rjsf_utils__WEBPACK_IMPORTED_MODULE_2__.enumOptionsValueForIndex)(target && target.value, enumOptions, emptyValue)), [onBlur, id]); - const handleFocus = (0,react__WEBPACK_IMPORTED_MODULE_1__.useCallback)(({ target }) => onFocus(id, (0,_rjsf_utils__WEBPACK_IMPORTED_MODULE_2__.enumOptionsValueForIndex)(target && target.value, enumOptions, emptyValue)), [onFocus, id]); + const handleBlur = (0,react__WEBPACK_IMPORTED_MODULE_1__.useCallback)(({ target: { value } }) => onBlur(id, (0,_rjsf_utils__WEBPACK_IMPORTED_MODULE_2__.enumOptionsValueForIndex)(value, enumOptions, emptyValue)), [onBlur, id]); + const handleFocus = (0,react__WEBPACK_IMPORTED_MODULE_1__.useCallback)(({ target: { value } }) => onFocus(id, (0,_rjsf_utils__WEBPACK_IMPORTED_MODULE_2__.enumOptionsValueForIndex)(value, enumOptions, emptyValue)), [onFocus, id]); return ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("div", { className: 'field-radio-group', id: id, children: Array.isArray(enumOptions) && enumOptions.map((option, i) => { const checked = (0,_rjsf_utils__WEBPACK_IMPORTED_MODULE_2__.enumOptionsIsSelected)(option.value, value); @@ -16498,18 +15564,17 @@ function SelectWidget({ schema, id, options, value, required, disabled, readonly const handleFocus = (0,react__WEBPACK_IMPORTED_MODULE_1__.useCallback)((event) => { const newValue = getValue(event, multiple); return onFocus(id, (0,_rjsf_utils__WEBPACK_IMPORTED_MODULE_2__.enumOptionsValueForIndex)(newValue, enumOptions, optEmptyVal)); - }, [onFocus, id, schema, multiple, enumOptions, optEmptyVal]); + }, [onFocus, id, schema, multiple, options]); const handleBlur = (0,react__WEBPACK_IMPORTED_MODULE_1__.useCallback)((event) => { const newValue = getValue(event, multiple); return onBlur(id, (0,_rjsf_utils__WEBPACK_IMPORTED_MODULE_2__.enumOptionsValueForIndex)(newValue, enumOptions, optEmptyVal)); - }, [onBlur, id, schema, multiple, enumOptions, optEmptyVal]); + }, [onBlur, id, schema, multiple, options]); const handleChange = (0,react__WEBPACK_IMPORTED_MODULE_1__.useCallback)((event) => { const newValue = getValue(event, multiple); return onChange((0,_rjsf_utils__WEBPACK_IMPORTED_MODULE_2__.enumOptionsValueForIndex)(newValue, enumOptions, optEmptyVal)); - }, [onChange, schema, multiple, enumOptions, optEmptyVal]); + }, [onChange, schema, multiple, options]); const selectedIndexes = (0,_rjsf_utils__WEBPACK_IMPORTED_MODULE_2__.enumOptionsIndexForValue)(value, enumOptions, multiple); - const showPlaceholderOption = !multiple && schema.default === undefined; - return ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("select", { id: id, name: id, multiple: multiple, className: 'form-control', value: typeof selectedIndexes === 'undefined' ? emptyValue : selectedIndexes, required: required, disabled: disabled || readonly, autoFocus: autofocus, onBlur: handleBlur, onFocus: handleFocus, onChange: handleChange, "aria-describedby": (0,_rjsf_utils__WEBPACK_IMPORTED_MODULE_2__.ariaDescribedByIds)(id), children: [showPlaceholderOption && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("option", { value: '', children: placeholder }), Array.isArray(enumOptions) && + return ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("select", { id: id, name: id, multiple: multiple, className: 'form-control', value: typeof selectedIndexes === 'undefined' ? emptyValue : selectedIndexes, required: required, disabled: disabled || readonly, autoFocus: autofocus, onBlur: handleBlur, onFocus: handleFocus, onChange: handleChange, "aria-describedby": (0,_rjsf_utils__WEBPACK_IMPORTED_MODULE_2__.ariaDescribedByIds)(id), children: [!multiple && schema.default === undefined && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("option", { value: '', children: placeholder }), Array.isArray(enumOptions) && enumOptions.map(({ value, label }, i) => { const disabled = enumDisabled && enumDisabled.indexOf(value) !== -1; return ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("option", { value: String(i), disabled: disabled, children: label }, i)); @@ -16572,8 +15637,8 @@ __webpack_require__.r(__webpack_exports__); */ function TextareaWidget({ id, options = {}, placeholder, value, required, disabled, readonly, autofocus = false, onChange, onBlur, onFocus, }) { const handleChange = (0,react__WEBPACK_IMPORTED_MODULE_1__.useCallback)(({ target: { value } }) => onChange(value === '' ? options.emptyValue : value), [onChange, options.emptyValue]); - const handleBlur = (0,react__WEBPACK_IMPORTED_MODULE_1__.useCallback)(({ target }) => onBlur(id, target && target.value), [onBlur, id]); - const handleFocus = (0,react__WEBPACK_IMPORTED_MODULE_1__.useCallback)(({ target }) => onFocus(id, target && target.value), [id, onFocus]); + const handleBlur = (0,react__WEBPACK_IMPORTED_MODULE_1__.useCallback)(({ target: { value } }) => onBlur(id, value), [onBlur, id]); + const handleFocus = (0,react__WEBPACK_IMPORTED_MODULE_1__.useCallback)(({ target: { value } }) => onFocus(id, value), [id, onFocus]); return ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("textarea", { id: id, name: id, className: 'form-control', value: value ? value : '', placeholder: placeholder, required: required, disabled: disabled, readOnly: readonly, autoFocus: autofocus, rows: options.rows, onBlur: handleBlur, onFocus: handleFocus, onChange: handleChange, "aria-describedby": (0,_rjsf_utils__WEBPACK_IMPORTED_MODULE_2__.ariaDescribedByIds)(id) })); } TextareaWidget.defaultProps = { @@ -17124,7 +16189,6 @@ __webpack_require__.r(__webpack_exports__); /* harmony export */ "PROPERTIES_KEY": () => (/* binding */ PROPERTIES_KEY), /* harmony export */ "REF_KEY": () => (/* binding */ REF_KEY), /* harmony export */ "REQUIRED_KEY": () => (/* binding */ REQUIRED_KEY), -/* harmony export */ "RJSF_ADDITIONAL_PROPERTIES_FLAG": () => (/* binding */ RJSF_ADDITIONAL_PROPERTIES_FLAG), /* harmony export */ "RJSF_ADDITONAL_PROPERTIES_FLAG": () => (/* binding */ RJSF_ADDITONAL_PROPERTIES_FLAG), /* harmony export */ "ROOT_SCHEMA_PREFIX": () => (/* binding */ ROOT_SCHEMA_PREFIX), /* harmony export */ "SUBMIT_BTN_OPTIONS_KEY": () => (/* binding */ SUBMIT_BTN_OPTIONS_KEY), @@ -17135,7 +16199,7 @@ __webpack_require__.r(__webpack_exports__); /* harmony export */ }); /** Below are the list of all the keys into various elements of a RJSFSchema or UiSchema that are used by the various * utility functions. In addition to those keys, there are the special `ADDITIONAL_PROPERTY_FLAG` and - * `RJSF_ADDITIONAL_PROPERTIES_FLAG` flags that is added to a schema under certain conditions by the `retrieveSchema()` + * `RJSF_ADDITONAL_PROPERTIES_FLAG` flags that is added to a schema under certain conditions by the `retrieveSchema()` * utility. */ const ADDITIONAL_PROPERTY_FLAG = '__additional_property'; @@ -17158,11 +16222,7 @@ const PROPERTIES_KEY = 'properties'; const REQUIRED_KEY = 'required'; const SUBMIT_BTN_OPTIONS_KEY = 'submitButtonOptions'; const REF_KEY = '$ref'; -/** - * @deprecated Replace with correctly spelled constant `RJSF_ADDITIONAL_PROPERTIES_FLAG` - */ const RJSF_ADDITONAL_PROPERTIES_FLAG = '__rjsf_additionalProperties'; -const RJSF_ADDITIONAL_PROPERTIES_FLAG = '__rjsf_additionalProperties'; const ROOT_SCHEMA_PREFIX = '__rjsf_rootSchema'; const UI_FIELD_KEY = 'ui:field'; const UI_WIDGET_KEY = 'ui:widget'; @@ -17501,49 +16561,6 @@ function dataURItoBlob(dataURILike) { /***/ }), -/***/ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/@rjsf/utils/lib/dateRangeOptions.js": -/*!*************************************************************************************************!*\ - !*** ./var/plugins/System/PSC/Invoice/Webpack/node_modules/@rjsf/utils/lib/dateRangeOptions.js ***! - \*************************************************************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* binding */ dateRangeOptions) -/* harmony export */ }); -/* harmony import */ var _pad__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./pad */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/@rjsf/utils/lib/pad.js"); - -/** Returns a list of options for a date range between `start` and `stop`. If the start date is greater than the end - * date, then the date range is reversed. If `start` and `stop` are negative numbers (or zero), then they will be - * treated as relative to the current year. - * - * @param start - The starting point of the date range - * @param stop - The ending point of the date range - * @returns - The list of EnumOptionsType for the date range between `start` and `stop` - * @throws - Error when `start` and `stop` aren't both <= 0 or > 0 - */ -function dateRangeOptions(start, stop) { - if (start <= 0 && stop <= 0) { - start = new Date().getFullYear() + start; - stop = new Date().getFullYear() + stop; - } - else if (start < 0 || stop < 0) { - throw new Error(`Both start (${start}) and stop (${stop}) must both be <= 0 or > 0, got one of each`); - } - if (start > stop) { - return dateRangeOptions(stop, start).reverse(); - } - const options = []; - for (let i = start; i <= stop; i++) { - options.push({ value: i, label: (0,_pad__WEBPACK_IMPORTED_MODULE_0__["default"])(i, 2) }); - } - return options; -} -//# sourceMappingURL=dateRangeOptions.js.map - -/***/ }), - /***/ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/@rjsf/utils/lib/deepEquals.js": /*!*******************************************************************************************!*\ !*** ./var/plugins/System/PSC/Invoice/Webpack/node_modules/@rjsf/utils/lib/deepEquals.js ***! @@ -17860,25 +16877,18 @@ var TranslatableString; /** Key label, where %1 will be replaced by the label as provided by WrapIfAdditionalTemplate */ TranslatableString["KeyLabel"] = "%1 Key"; // Strings with replaceable parameters AND/OR that support markdown and html - /** Invalid object field configuration as provided by the ObjectField. - * NOTE: Use markdown notation rather than html tags. - */ - TranslatableString["InvalidObjectField"] = "Invalid \"%1\" object field configuration: _%2_."; + /** Invalid object field configuration as provided by the ObjectField */ + TranslatableString["InvalidObjectField"] = "Invalid \"%1\" object field configuration: %2."; /** Unsupported field schema, used by UnsupportedField */ TranslatableString["UnsupportedField"] = "Unsupported field schema."; - /** Unsupported field schema, where %1 will be replaced by the idSchema.$id as provided by UnsupportedField. - * NOTE: Use markdown notation rather than html tags. - */ - TranslatableString["UnsupportedFieldWithId"] = "Unsupported field schema for field `%1`."; - /** Unsupported field schema, where %1 will be replaced by the reason string as provided by UnsupportedField. - * NOTE: Use markdown notation rather than html tags. - */ - TranslatableString["UnsupportedFieldWithReason"] = "Unsupported field schema: _%1_."; + /** Unsupported field schema, where %1 will be replaced by the idSchema.$id as provided by UnsupportedField */ + TranslatableString["UnsupportedFieldWithId"] = "Unsupported field schema for field %1."; + /** Unsupported field schema, where %1 will be replaced by the reason string as provided by UnsupportedField */ + TranslatableString["UnsupportedFieldWithReason"] = "Unsupported field schema: %1."; /** Unsupported field schema, where %1 and %2 will be replaced by the idSchema.$id and reason strings, respectively, - * as provided by UnsupportedField. - * NOTE: Use markdown notation rather than html tags. + * as provided by UnsupportedField */ - TranslatableString["UnsupportedFieldWithIdAndReason"] = "Unsupported field schema for field `%1`: _%2_."; + TranslatableString["UnsupportedFieldWithIdAndReason"] = "Unsupported field schema for field %1: %2."; /** File name, type and size info, where %1, %2 and %3 will be replaced by the file name, file type and file size as * provided by FileWidget */ @@ -18712,108 +17722,106 @@ function optionId(id, optionIndex) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "ADDITIONAL_PROPERTIES_KEY": () => (/* reexport safe */ _constants__WEBPACK_IMPORTED_MODULE_56__.ADDITIONAL_PROPERTIES_KEY), -/* harmony export */ "ADDITIONAL_PROPERTY_FLAG": () => (/* reexport safe */ _constants__WEBPACK_IMPORTED_MODULE_56__.ADDITIONAL_PROPERTY_FLAG), -/* harmony export */ "ALL_OF_KEY": () => (/* reexport safe */ _constants__WEBPACK_IMPORTED_MODULE_56__.ALL_OF_KEY), -/* harmony export */ "ANY_OF_KEY": () => (/* reexport safe */ _constants__WEBPACK_IMPORTED_MODULE_56__.ANY_OF_KEY), -/* harmony export */ "CONST_KEY": () => (/* reexport safe */ _constants__WEBPACK_IMPORTED_MODULE_56__.CONST_KEY), -/* harmony export */ "DEFAULT_KEY": () => (/* reexport safe */ _constants__WEBPACK_IMPORTED_MODULE_56__.DEFAULT_KEY), -/* harmony export */ "DEFINITIONS_KEY": () => (/* reexport safe */ _constants__WEBPACK_IMPORTED_MODULE_56__.DEFINITIONS_KEY), -/* harmony export */ "DEPENDENCIES_KEY": () => (/* reexport safe */ _constants__WEBPACK_IMPORTED_MODULE_56__.DEPENDENCIES_KEY), -/* harmony export */ "ENUM_KEY": () => (/* reexport safe */ _constants__WEBPACK_IMPORTED_MODULE_56__.ENUM_KEY), -/* harmony export */ "ERRORS_KEY": () => (/* reexport safe */ _constants__WEBPACK_IMPORTED_MODULE_56__.ERRORS_KEY), -/* harmony export */ "ErrorSchemaBuilder": () => (/* reexport safe */ _ErrorSchemaBuilder__WEBPACK_IMPORTED_MODULE_14__["default"]), -/* harmony export */ "ID_KEY": () => (/* reexport safe */ _constants__WEBPACK_IMPORTED_MODULE_56__.ID_KEY), -/* harmony export */ "IF_KEY": () => (/* reexport safe */ _constants__WEBPACK_IMPORTED_MODULE_56__.IF_KEY), -/* harmony export */ "ITEMS_KEY": () => (/* reexport safe */ _constants__WEBPACK_IMPORTED_MODULE_56__.ITEMS_KEY), -/* harmony export */ "JUNK_OPTION_ID": () => (/* reexport safe */ _constants__WEBPACK_IMPORTED_MODULE_56__.JUNK_OPTION_ID), -/* harmony export */ "NAME_KEY": () => (/* reexport safe */ _constants__WEBPACK_IMPORTED_MODULE_56__.NAME_KEY), -/* harmony export */ "ONE_OF_KEY": () => (/* reexport safe */ _constants__WEBPACK_IMPORTED_MODULE_56__.ONE_OF_KEY), -/* harmony export */ "PROPERTIES_KEY": () => (/* reexport safe */ _constants__WEBPACK_IMPORTED_MODULE_56__.PROPERTIES_KEY), -/* harmony export */ "REF_KEY": () => (/* reexport safe */ _constants__WEBPACK_IMPORTED_MODULE_56__.REF_KEY), -/* harmony export */ "REQUIRED_KEY": () => (/* reexport safe */ _constants__WEBPACK_IMPORTED_MODULE_56__.REQUIRED_KEY), -/* harmony export */ "RJSF_ADDITIONAL_PROPERTIES_FLAG": () => (/* reexport safe */ _constants__WEBPACK_IMPORTED_MODULE_56__.RJSF_ADDITIONAL_PROPERTIES_FLAG), -/* harmony export */ "RJSF_ADDITONAL_PROPERTIES_FLAG": () => (/* reexport safe */ _constants__WEBPACK_IMPORTED_MODULE_56__.RJSF_ADDITONAL_PROPERTIES_FLAG), -/* harmony export */ "ROOT_SCHEMA_PREFIX": () => (/* reexport safe */ _constants__WEBPACK_IMPORTED_MODULE_56__.ROOT_SCHEMA_PREFIX), -/* harmony export */ "SUBMIT_BTN_OPTIONS_KEY": () => (/* reexport safe */ _constants__WEBPACK_IMPORTED_MODULE_56__.SUBMIT_BTN_OPTIONS_KEY), -/* harmony export */ "TranslatableString": () => (/* reexport safe */ _enums__WEBPACK_IMPORTED_MODULE_55__.TranslatableString), -/* harmony export */ "UI_FIELD_KEY": () => (/* reexport safe */ _constants__WEBPACK_IMPORTED_MODULE_56__.UI_FIELD_KEY), -/* harmony export */ "UI_GLOBAL_OPTIONS_KEY": () => (/* reexport safe */ _constants__WEBPACK_IMPORTED_MODULE_56__.UI_GLOBAL_OPTIONS_KEY), -/* harmony export */ "UI_OPTIONS_KEY": () => (/* reexport safe */ _constants__WEBPACK_IMPORTED_MODULE_56__.UI_OPTIONS_KEY), -/* harmony export */ "UI_WIDGET_KEY": () => (/* reexport safe */ _constants__WEBPACK_IMPORTED_MODULE_56__.UI_WIDGET_KEY), +/* harmony export */ "ADDITIONAL_PROPERTIES_KEY": () => (/* reexport safe */ _constants__WEBPACK_IMPORTED_MODULE_55__.ADDITIONAL_PROPERTIES_KEY), +/* harmony export */ "ADDITIONAL_PROPERTY_FLAG": () => (/* reexport safe */ _constants__WEBPACK_IMPORTED_MODULE_55__.ADDITIONAL_PROPERTY_FLAG), +/* harmony export */ "ALL_OF_KEY": () => (/* reexport safe */ _constants__WEBPACK_IMPORTED_MODULE_55__.ALL_OF_KEY), +/* harmony export */ "ANY_OF_KEY": () => (/* reexport safe */ _constants__WEBPACK_IMPORTED_MODULE_55__.ANY_OF_KEY), +/* harmony export */ "CONST_KEY": () => (/* reexport safe */ _constants__WEBPACK_IMPORTED_MODULE_55__.CONST_KEY), +/* harmony export */ "DEFAULT_KEY": () => (/* reexport safe */ _constants__WEBPACK_IMPORTED_MODULE_55__.DEFAULT_KEY), +/* harmony export */ "DEFINITIONS_KEY": () => (/* reexport safe */ _constants__WEBPACK_IMPORTED_MODULE_55__.DEFINITIONS_KEY), +/* harmony export */ "DEPENDENCIES_KEY": () => (/* reexport safe */ _constants__WEBPACK_IMPORTED_MODULE_55__.DEPENDENCIES_KEY), +/* harmony export */ "ENUM_KEY": () => (/* reexport safe */ _constants__WEBPACK_IMPORTED_MODULE_55__.ENUM_KEY), +/* harmony export */ "ERRORS_KEY": () => (/* reexport safe */ _constants__WEBPACK_IMPORTED_MODULE_55__.ERRORS_KEY), +/* harmony export */ "ErrorSchemaBuilder": () => (/* reexport safe */ _ErrorSchemaBuilder__WEBPACK_IMPORTED_MODULE_13__["default"]), +/* harmony export */ "ID_KEY": () => (/* reexport safe */ _constants__WEBPACK_IMPORTED_MODULE_55__.ID_KEY), +/* harmony export */ "IF_KEY": () => (/* reexport safe */ _constants__WEBPACK_IMPORTED_MODULE_55__.IF_KEY), +/* harmony export */ "ITEMS_KEY": () => (/* reexport safe */ _constants__WEBPACK_IMPORTED_MODULE_55__.ITEMS_KEY), +/* harmony export */ "JUNK_OPTION_ID": () => (/* reexport safe */ _constants__WEBPACK_IMPORTED_MODULE_55__.JUNK_OPTION_ID), +/* harmony export */ "NAME_KEY": () => (/* reexport safe */ _constants__WEBPACK_IMPORTED_MODULE_55__.NAME_KEY), +/* harmony export */ "ONE_OF_KEY": () => (/* reexport safe */ _constants__WEBPACK_IMPORTED_MODULE_55__.ONE_OF_KEY), +/* harmony export */ "PROPERTIES_KEY": () => (/* reexport safe */ _constants__WEBPACK_IMPORTED_MODULE_55__.PROPERTIES_KEY), +/* harmony export */ "REF_KEY": () => (/* reexport safe */ _constants__WEBPACK_IMPORTED_MODULE_55__.REF_KEY), +/* harmony export */ "REQUIRED_KEY": () => (/* reexport safe */ _constants__WEBPACK_IMPORTED_MODULE_55__.REQUIRED_KEY), +/* harmony export */ "RJSF_ADDITONAL_PROPERTIES_FLAG": () => (/* reexport safe */ _constants__WEBPACK_IMPORTED_MODULE_55__.RJSF_ADDITONAL_PROPERTIES_FLAG), +/* harmony export */ "ROOT_SCHEMA_PREFIX": () => (/* reexport safe */ _constants__WEBPACK_IMPORTED_MODULE_55__.ROOT_SCHEMA_PREFIX), +/* harmony export */ "SUBMIT_BTN_OPTIONS_KEY": () => (/* reexport safe */ _constants__WEBPACK_IMPORTED_MODULE_55__.SUBMIT_BTN_OPTIONS_KEY), +/* harmony export */ "TranslatableString": () => (/* reexport safe */ _enums__WEBPACK_IMPORTED_MODULE_54__.TranslatableString), +/* harmony export */ "UI_FIELD_KEY": () => (/* reexport safe */ _constants__WEBPACK_IMPORTED_MODULE_55__.UI_FIELD_KEY), +/* harmony export */ "UI_GLOBAL_OPTIONS_KEY": () => (/* reexport safe */ _constants__WEBPACK_IMPORTED_MODULE_55__.UI_GLOBAL_OPTIONS_KEY), +/* harmony export */ "UI_OPTIONS_KEY": () => (/* reexport safe */ _constants__WEBPACK_IMPORTED_MODULE_55__.UI_OPTIONS_KEY), +/* harmony export */ "UI_WIDGET_KEY": () => (/* reexport safe */ _constants__WEBPACK_IMPORTED_MODULE_55__.UI_WIDGET_KEY), /* harmony export */ "allowAdditionalItems": () => (/* reexport safe */ _allowAdditionalItems__WEBPACK_IMPORTED_MODULE_0__["default"]), -/* harmony export */ "ariaDescribedByIds": () => (/* reexport safe */ _idGenerators__WEBPACK_IMPORTED_MODULE_27__.ariaDescribedByIds), +/* harmony export */ "ariaDescribedByIds": () => (/* reexport safe */ _idGenerators__WEBPACK_IMPORTED_MODULE_26__.ariaDescribedByIds), /* harmony export */ "asNumber": () => (/* reexport safe */ _asNumber__WEBPACK_IMPORTED_MODULE_1__["default"]), /* harmony export */ "canExpand": () => (/* reexport safe */ _canExpand__WEBPACK_IMPORTED_MODULE_2__["default"]), /* harmony export */ "createErrorHandler": () => (/* reexport safe */ _createErrorHandler__WEBPACK_IMPORTED_MODULE_3__["default"]), /* harmony export */ "createSchemaUtils": () => (/* reexport safe */ _createSchemaUtils__WEBPACK_IMPORTED_MODULE_4__["default"]), /* harmony export */ "dataURItoBlob": () => (/* reexport safe */ _dataURItoBlob__WEBPACK_IMPORTED_MODULE_5__["default"]), -/* harmony export */ "dateRangeOptions": () => (/* reexport safe */ _dateRangeOptions__WEBPACK_IMPORTED_MODULE_6__["default"]), -/* harmony export */ "deepEquals": () => (/* reexport safe */ _deepEquals__WEBPACK_IMPORTED_MODULE_7__["default"]), -/* harmony export */ "descriptionId": () => (/* reexport safe */ _idGenerators__WEBPACK_IMPORTED_MODULE_27__.descriptionId), -/* harmony export */ "englishStringTranslator": () => (/* reexport safe */ _englishStringTranslator__WEBPACK_IMPORTED_MODULE_8__["default"]), -/* harmony export */ "enumOptionsDeselectValue": () => (/* reexport safe */ _enumOptionsDeselectValue__WEBPACK_IMPORTED_MODULE_9__["default"]), -/* harmony export */ "enumOptionsIndexForValue": () => (/* reexport safe */ _enumOptionsIndexForValue__WEBPACK_IMPORTED_MODULE_10__["default"]), -/* harmony export */ "enumOptionsIsSelected": () => (/* reexport safe */ _enumOptionsIsSelected__WEBPACK_IMPORTED_MODULE_11__["default"]), -/* harmony export */ "enumOptionsSelectValue": () => (/* reexport safe */ _enumOptionsSelectValue__WEBPACK_IMPORTED_MODULE_12__["default"]), -/* harmony export */ "enumOptionsValueForIndex": () => (/* reexport safe */ _enumOptionsValueForIndex__WEBPACK_IMPORTED_MODULE_13__["default"]), -/* harmony export */ "errorId": () => (/* reexport safe */ _idGenerators__WEBPACK_IMPORTED_MODULE_27__.errorId), -/* harmony export */ "examplesId": () => (/* reexport safe */ _idGenerators__WEBPACK_IMPORTED_MODULE_27__.examplesId), -/* harmony export */ "findSchemaDefinition": () => (/* reexport safe */ _findSchemaDefinition__WEBPACK_IMPORTED_MODULE_15__["default"]), -/* harmony export */ "getClosestMatchingOption": () => (/* reexport safe */ _schema__WEBPACK_IMPORTED_MODULE_58__.getClosestMatchingOption), -/* harmony export */ "getDateElementProps": () => (/* reexport safe */ _getDateElementProps__WEBPACK_IMPORTED_MODULE_16__["default"]), -/* harmony export */ "getDefaultFormState": () => (/* reexport safe */ _schema__WEBPACK_IMPORTED_MODULE_58__.getDefaultFormState), -/* harmony export */ "getDiscriminatorFieldFromSchema": () => (/* reexport safe */ _getDiscriminatorFieldFromSchema__WEBPACK_IMPORTED_MODULE_17__["default"]), -/* harmony export */ "getDisplayLabel": () => (/* reexport safe */ _schema__WEBPACK_IMPORTED_MODULE_58__.getDisplayLabel), -/* harmony export */ "getFirstMatchingOption": () => (/* reexport safe */ _schema__WEBPACK_IMPORTED_MODULE_58__.getFirstMatchingOption), -/* harmony export */ "getInputProps": () => (/* reexport safe */ _getInputProps__WEBPACK_IMPORTED_MODULE_18__["default"]), -/* harmony export */ "getMatchingOption": () => (/* reexport safe */ _schema__WEBPACK_IMPORTED_MODULE_58__.getMatchingOption), -/* harmony export */ "getOptionMatchingSimpleDiscriminator": () => (/* reexport safe */ _getOptionMatchingSimpleDiscriminator__WEBPACK_IMPORTED_MODULE_53__["default"]), -/* harmony export */ "getSchemaType": () => (/* reexport safe */ _getSchemaType__WEBPACK_IMPORTED_MODULE_19__["default"]), -/* harmony export */ "getSubmitButtonOptions": () => (/* reexport safe */ _getSubmitButtonOptions__WEBPACK_IMPORTED_MODULE_20__["default"]), -/* harmony export */ "getTemplate": () => (/* reexport safe */ _getTemplate__WEBPACK_IMPORTED_MODULE_21__["default"]), -/* harmony export */ "getUiOptions": () => (/* reexport safe */ _getUiOptions__WEBPACK_IMPORTED_MODULE_22__["default"]), -/* harmony export */ "getWidget": () => (/* reexport safe */ _getWidget__WEBPACK_IMPORTED_MODULE_23__["default"]), -/* harmony export */ "guessType": () => (/* reexport safe */ _guessType__WEBPACK_IMPORTED_MODULE_24__["default"]), -/* harmony export */ "hasWidget": () => (/* reexport safe */ _hasWidget__WEBPACK_IMPORTED_MODULE_26__["default"]), -/* harmony export */ "hashForSchema": () => (/* reexport safe */ _hashForSchema__WEBPACK_IMPORTED_MODULE_25__["default"]), -/* harmony export */ "helpId": () => (/* reexport safe */ _idGenerators__WEBPACK_IMPORTED_MODULE_27__.helpId), -/* harmony export */ "isConstant": () => (/* reexport safe */ _isConstant__WEBPACK_IMPORTED_MODULE_28__["default"]), -/* harmony export */ "isCustomWidget": () => (/* reexport safe */ _isCustomWidget__WEBPACK_IMPORTED_MODULE_29__["default"]), -/* harmony export */ "isFilesArray": () => (/* reexport safe */ _schema__WEBPACK_IMPORTED_MODULE_58__.isFilesArray), -/* harmony export */ "isFixedItems": () => (/* reexport safe */ _isFixedItems__WEBPACK_IMPORTED_MODULE_30__["default"]), -/* harmony export */ "isMultiSelect": () => (/* reexport safe */ _schema__WEBPACK_IMPORTED_MODULE_58__.isMultiSelect), -/* harmony export */ "isObject": () => (/* reexport safe */ _isObject__WEBPACK_IMPORTED_MODULE_31__["default"]), -/* harmony export */ "isSelect": () => (/* reexport safe */ _schema__WEBPACK_IMPORTED_MODULE_58__.isSelect), -/* harmony export */ "labelValue": () => (/* reexport safe */ _labelValue__WEBPACK_IMPORTED_MODULE_32__["default"]), -/* harmony export */ "localToUTC": () => (/* reexport safe */ _localToUTC__WEBPACK_IMPORTED_MODULE_33__["default"]), -/* harmony export */ "mergeDefaultsWithFormData": () => (/* reexport safe */ _mergeDefaultsWithFormData__WEBPACK_IMPORTED_MODULE_34__["default"]), -/* harmony export */ "mergeObjects": () => (/* reexport safe */ _mergeObjects__WEBPACK_IMPORTED_MODULE_35__["default"]), -/* harmony export */ "mergeSchemas": () => (/* reexport safe */ _mergeSchemas__WEBPACK_IMPORTED_MODULE_36__["default"]), -/* harmony export */ "mergeValidationData": () => (/* reexport safe */ _schema__WEBPACK_IMPORTED_MODULE_58__.mergeValidationData), -/* harmony export */ "optionId": () => (/* reexport safe */ _idGenerators__WEBPACK_IMPORTED_MODULE_27__.optionId), -/* harmony export */ "optionsList": () => (/* reexport safe */ _optionsList__WEBPACK_IMPORTED_MODULE_37__["default"]), -/* harmony export */ "orderProperties": () => (/* reexport safe */ _orderProperties__WEBPACK_IMPORTED_MODULE_38__["default"]), -/* harmony export */ "pad": () => (/* reexport safe */ _pad__WEBPACK_IMPORTED_MODULE_39__["default"]), -/* harmony export */ "parseDateString": () => (/* reexport safe */ _parseDateString__WEBPACK_IMPORTED_MODULE_40__["default"]), -/* harmony export */ "rangeSpec": () => (/* reexport safe */ _rangeSpec__WEBPACK_IMPORTED_MODULE_41__["default"]), -/* harmony export */ "replaceStringParameters": () => (/* reexport safe */ _replaceStringParameters__WEBPACK_IMPORTED_MODULE_42__["default"]), -/* harmony export */ "retrieveSchema": () => (/* reexport safe */ _schema__WEBPACK_IMPORTED_MODULE_58__.retrieveSchema), -/* harmony export */ "sanitizeDataForNewSchema": () => (/* reexport safe */ _schema__WEBPACK_IMPORTED_MODULE_58__.sanitizeDataForNewSchema), -/* harmony export */ "schemaParser": () => (/* reexport safe */ _parser__WEBPACK_IMPORTED_MODULE_57__.schemaParser), -/* harmony export */ "schemaRequiresTrueValue": () => (/* reexport safe */ _schemaRequiresTrueValue__WEBPACK_IMPORTED_MODULE_43__["default"]), -/* harmony export */ "shouldRender": () => (/* reexport safe */ _shouldRender__WEBPACK_IMPORTED_MODULE_44__["default"]), -/* harmony export */ "titleId": () => (/* reexport safe */ _idGenerators__WEBPACK_IMPORTED_MODULE_27__.titleId), -/* harmony export */ "toConstant": () => (/* reexport safe */ _toConstant__WEBPACK_IMPORTED_MODULE_45__["default"]), -/* harmony export */ "toDateString": () => (/* reexport safe */ _toDateString__WEBPACK_IMPORTED_MODULE_46__["default"]), -/* harmony export */ "toErrorList": () => (/* reexport safe */ _toErrorList__WEBPACK_IMPORTED_MODULE_47__["default"]), -/* harmony export */ "toErrorSchema": () => (/* reexport safe */ _toErrorSchema__WEBPACK_IMPORTED_MODULE_48__["default"]), -/* harmony export */ "toIdSchema": () => (/* reexport safe */ _schema__WEBPACK_IMPORTED_MODULE_58__.toIdSchema), -/* harmony export */ "toPathSchema": () => (/* reexport safe */ _schema__WEBPACK_IMPORTED_MODULE_58__.toPathSchema), -/* harmony export */ "unwrapErrorHandler": () => (/* reexport safe */ _unwrapErrorHandler__WEBPACK_IMPORTED_MODULE_49__["default"]), -/* harmony export */ "utcToLocal": () => (/* reexport safe */ _utcToLocal__WEBPACK_IMPORTED_MODULE_50__["default"]), -/* harmony export */ "validationDataMerge": () => (/* reexport safe */ _validationDataMerge__WEBPACK_IMPORTED_MODULE_51__["default"]), -/* harmony export */ "withIdRefPrefix": () => (/* reexport safe */ _withIdRefPrefix__WEBPACK_IMPORTED_MODULE_52__["default"]) +/* harmony export */ "deepEquals": () => (/* reexport safe */ _deepEquals__WEBPACK_IMPORTED_MODULE_6__["default"]), +/* harmony export */ "descriptionId": () => (/* reexport safe */ _idGenerators__WEBPACK_IMPORTED_MODULE_26__.descriptionId), +/* harmony export */ "englishStringTranslator": () => (/* reexport safe */ _englishStringTranslator__WEBPACK_IMPORTED_MODULE_7__["default"]), +/* harmony export */ "enumOptionsDeselectValue": () => (/* reexport safe */ _enumOptionsDeselectValue__WEBPACK_IMPORTED_MODULE_8__["default"]), +/* harmony export */ "enumOptionsIndexForValue": () => (/* reexport safe */ _enumOptionsIndexForValue__WEBPACK_IMPORTED_MODULE_9__["default"]), +/* harmony export */ "enumOptionsIsSelected": () => (/* reexport safe */ _enumOptionsIsSelected__WEBPACK_IMPORTED_MODULE_10__["default"]), +/* harmony export */ "enumOptionsSelectValue": () => (/* reexport safe */ _enumOptionsSelectValue__WEBPACK_IMPORTED_MODULE_11__["default"]), +/* harmony export */ "enumOptionsValueForIndex": () => (/* reexport safe */ _enumOptionsValueForIndex__WEBPACK_IMPORTED_MODULE_12__["default"]), +/* harmony export */ "errorId": () => (/* reexport safe */ _idGenerators__WEBPACK_IMPORTED_MODULE_26__.errorId), +/* harmony export */ "examplesId": () => (/* reexport safe */ _idGenerators__WEBPACK_IMPORTED_MODULE_26__.examplesId), +/* harmony export */ "findSchemaDefinition": () => (/* reexport safe */ _findSchemaDefinition__WEBPACK_IMPORTED_MODULE_14__["default"]), +/* harmony export */ "getClosestMatchingOption": () => (/* reexport safe */ _schema__WEBPACK_IMPORTED_MODULE_57__.getClosestMatchingOption), +/* harmony export */ "getDateElementProps": () => (/* reexport safe */ _getDateElementProps__WEBPACK_IMPORTED_MODULE_15__["default"]), +/* harmony export */ "getDefaultFormState": () => (/* reexport safe */ _schema__WEBPACK_IMPORTED_MODULE_57__.getDefaultFormState), +/* harmony export */ "getDiscriminatorFieldFromSchema": () => (/* reexport safe */ _getDiscriminatorFieldFromSchema__WEBPACK_IMPORTED_MODULE_16__["default"]), +/* harmony export */ "getDisplayLabel": () => (/* reexport safe */ _schema__WEBPACK_IMPORTED_MODULE_57__.getDisplayLabel), +/* harmony export */ "getFirstMatchingOption": () => (/* reexport safe */ _schema__WEBPACK_IMPORTED_MODULE_57__.getFirstMatchingOption), +/* harmony export */ "getInputProps": () => (/* reexport safe */ _getInputProps__WEBPACK_IMPORTED_MODULE_17__["default"]), +/* harmony export */ "getMatchingOption": () => (/* reexport safe */ _schema__WEBPACK_IMPORTED_MODULE_57__.getMatchingOption), +/* harmony export */ "getOptionMatchingSimpleDiscriminator": () => (/* reexport safe */ _getOptionMatchingSimpleDiscriminator__WEBPACK_IMPORTED_MODULE_52__["default"]), +/* harmony export */ "getSchemaType": () => (/* reexport safe */ _getSchemaType__WEBPACK_IMPORTED_MODULE_18__["default"]), +/* harmony export */ "getSubmitButtonOptions": () => (/* reexport safe */ _getSubmitButtonOptions__WEBPACK_IMPORTED_MODULE_19__["default"]), +/* harmony export */ "getTemplate": () => (/* reexport safe */ _getTemplate__WEBPACK_IMPORTED_MODULE_20__["default"]), +/* harmony export */ "getUiOptions": () => (/* reexport safe */ _getUiOptions__WEBPACK_IMPORTED_MODULE_21__["default"]), +/* harmony export */ "getWidget": () => (/* reexport safe */ _getWidget__WEBPACK_IMPORTED_MODULE_22__["default"]), +/* harmony export */ "guessType": () => (/* reexport safe */ _guessType__WEBPACK_IMPORTED_MODULE_23__["default"]), +/* harmony export */ "hasWidget": () => (/* reexport safe */ _hasWidget__WEBPACK_IMPORTED_MODULE_25__["default"]), +/* harmony export */ "hashForSchema": () => (/* reexport safe */ _hashForSchema__WEBPACK_IMPORTED_MODULE_24__["default"]), +/* harmony export */ "helpId": () => (/* reexport safe */ _idGenerators__WEBPACK_IMPORTED_MODULE_26__.helpId), +/* harmony export */ "isConstant": () => (/* reexport safe */ _isConstant__WEBPACK_IMPORTED_MODULE_27__["default"]), +/* harmony export */ "isCustomWidget": () => (/* reexport safe */ _isCustomWidget__WEBPACK_IMPORTED_MODULE_28__["default"]), +/* harmony export */ "isFilesArray": () => (/* reexport safe */ _schema__WEBPACK_IMPORTED_MODULE_57__.isFilesArray), +/* harmony export */ "isFixedItems": () => (/* reexport safe */ _isFixedItems__WEBPACK_IMPORTED_MODULE_29__["default"]), +/* harmony export */ "isMultiSelect": () => (/* reexport safe */ _schema__WEBPACK_IMPORTED_MODULE_57__.isMultiSelect), +/* harmony export */ "isObject": () => (/* reexport safe */ _isObject__WEBPACK_IMPORTED_MODULE_30__["default"]), +/* harmony export */ "isSelect": () => (/* reexport safe */ _schema__WEBPACK_IMPORTED_MODULE_57__.isSelect), +/* harmony export */ "labelValue": () => (/* reexport safe */ _labelValue__WEBPACK_IMPORTED_MODULE_31__["default"]), +/* harmony export */ "localToUTC": () => (/* reexport safe */ _localToUTC__WEBPACK_IMPORTED_MODULE_32__["default"]), +/* harmony export */ "mergeDefaultsWithFormData": () => (/* reexport safe */ _mergeDefaultsWithFormData__WEBPACK_IMPORTED_MODULE_33__["default"]), +/* harmony export */ "mergeObjects": () => (/* reexport safe */ _mergeObjects__WEBPACK_IMPORTED_MODULE_34__["default"]), +/* harmony export */ "mergeSchemas": () => (/* reexport safe */ _mergeSchemas__WEBPACK_IMPORTED_MODULE_35__["default"]), +/* harmony export */ "mergeValidationData": () => (/* reexport safe */ _schema__WEBPACK_IMPORTED_MODULE_57__.mergeValidationData), +/* harmony export */ "optionId": () => (/* reexport safe */ _idGenerators__WEBPACK_IMPORTED_MODULE_26__.optionId), +/* harmony export */ "optionsList": () => (/* reexport safe */ _optionsList__WEBPACK_IMPORTED_MODULE_36__["default"]), +/* harmony export */ "orderProperties": () => (/* reexport safe */ _orderProperties__WEBPACK_IMPORTED_MODULE_37__["default"]), +/* harmony export */ "pad": () => (/* reexport safe */ _pad__WEBPACK_IMPORTED_MODULE_38__["default"]), +/* harmony export */ "parseDateString": () => (/* reexport safe */ _parseDateString__WEBPACK_IMPORTED_MODULE_39__["default"]), +/* harmony export */ "rangeSpec": () => (/* reexport safe */ _rangeSpec__WEBPACK_IMPORTED_MODULE_40__["default"]), +/* harmony export */ "replaceStringParameters": () => (/* reexport safe */ _replaceStringParameters__WEBPACK_IMPORTED_MODULE_41__["default"]), +/* harmony export */ "retrieveSchema": () => (/* reexport safe */ _schema__WEBPACK_IMPORTED_MODULE_57__.retrieveSchema), +/* harmony export */ "sanitizeDataForNewSchema": () => (/* reexport safe */ _schema__WEBPACK_IMPORTED_MODULE_57__.sanitizeDataForNewSchema), +/* harmony export */ "schemaParser": () => (/* reexport safe */ _parser__WEBPACK_IMPORTED_MODULE_56__.schemaParser), +/* harmony export */ "schemaRequiresTrueValue": () => (/* reexport safe */ _schemaRequiresTrueValue__WEBPACK_IMPORTED_MODULE_42__["default"]), +/* harmony export */ "shouldRender": () => (/* reexport safe */ _shouldRender__WEBPACK_IMPORTED_MODULE_43__["default"]), +/* harmony export */ "titleId": () => (/* reexport safe */ _idGenerators__WEBPACK_IMPORTED_MODULE_26__.titleId), +/* harmony export */ "toConstant": () => (/* reexport safe */ _toConstant__WEBPACK_IMPORTED_MODULE_44__["default"]), +/* harmony export */ "toDateString": () => (/* reexport safe */ _toDateString__WEBPACK_IMPORTED_MODULE_45__["default"]), +/* harmony export */ "toErrorList": () => (/* reexport safe */ _toErrorList__WEBPACK_IMPORTED_MODULE_46__["default"]), +/* harmony export */ "toErrorSchema": () => (/* reexport safe */ _toErrorSchema__WEBPACK_IMPORTED_MODULE_47__["default"]), +/* harmony export */ "toIdSchema": () => (/* reexport safe */ _schema__WEBPACK_IMPORTED_MODULE_57__.toIdSchema), +/* harmony export */ "toPathSchema": () => (/* reexport safe */ _schema__WEBPACK_IMPORTED_MODULE_57__.toPathSchema), +/* harmony export */ "unwrapErrorHandler": () => (/* reexport safe */ _unwrapErrorHandler__WEBPACK_IMPORTED_MODULE_48__["default"]), +/* harmony export */ "utcToLocal": () => (/* reexport safe */ _utcToLocal__WEBPACK_IMPORTED_MODULE_49__["default"]), +/* harmony export */ "validationDataMerge": () => (/* reexport safe */ _validationDataMerge__WEBPACK_IMPORTED_MODULE_50__["default"]), +/* harmony export */ "withIdRefPrefix": () => (/* reexport safe */ _withIdRefPrefix__WEBPACK_IMPORTED_MODULE_51__["default"]) /* harmony export */ }); /* harmony import */ var _allowAdditionalItems__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./allowAdditionalItems */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/@rjsf/utils/lib/allowAdditionalItems.js"); /* harmony import */ var _asNumber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./asNumber */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/@rjsf/utils/lib/asNumber.js"); @@ -18821,60 +17829,58 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var _createErrorHandler__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./createErrorHandler */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/@rjsf/utils/lib/createErrorHandler.js"); /* harmony import */ var _createSchemaUtils__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./createSchemaUtils */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/@rjsf/utils/lib/createSchemaUtils.js"); /* harmony import */ var _dataURItoBlob__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./dataURItoBlob */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/@rjsf/utils/lib/dataURItoBlob.js"); -/* harmony import */ var _dateRangeOptions__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./dateRangeOptions */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/@rjsf/utils/lib/dateRangeOptions.js"); -/* harmony import */ var _deepEquals__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./deepEquals */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/@rjsf/utils/lib/deepEquals.js"); -/* harmony import */ var _englishStringTranslator__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./englishStringTranslator */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/@rjsf/utils/lib/englishStringTranslator.js"); -/* harmony import */ var _enumOptionsDeselectValue__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./enumOptionsDeselectValue */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/@rjsf/utils/lib/enumOptionsDeselectValue.js"); -/* harmony import */ var _enumOptionsIndexForValue__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./enumOptionsIndexForValue */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/@rjsf/utils/lib/enumOptionsIndexForValue.js"); -/* harmony import */ var _enumOptionsIsSelected__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./enumOptionsIsSelected */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/@rjsf/utils/lib/enumOptionsIsSelected.js"); -/* harmony import */ var _enumOptionsSelectValue__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./enumOptionsSelectValue */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/@rjsf/utils/lib/enumOptionsSelectValue.js"); -/* harmony import */ var _enumOptionsValueForIndex__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./enumOptionsValueForIndex */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/@rjsf/utils/lib/enumOptionsValueForIndex.js"); -/* harmony import */ var _ErrorSchemaBuilder__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./ErrorSchemaBuilder */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/@rjsf/utils/lib/ErrorSchemaBuilder.js"); -/* harmony import */ var _findSchemaDefinition__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./findSchemaDefinition */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/@rjsf/utils/lib/findSchemaDefinition.js"); -/* harmony import */ var _getDateElementProps__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./getDateElementProps */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/@rjsf/utils/lib/getDateElementProps.js"); -/* harmony import */ var _getDiscriminatorFieldFromSchema__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ./getDiscriminatorFieldFromSchema */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/@rjsf/utils/lib/getDiscriminatorFieldFromSchema.js"); -/* harmony import */ var _getInputProps__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ./getInputProps */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/@rjsf/utils/lib/getInputProps.js"); -/* harmony import */ var _getSchemaType__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ./getSchemaType */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/@rjsf/utils/lib/getSchemaType.js"); -/* harmony import */ var _getSubmitButtonOptions__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ./getSubmitButtonOptions */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/@rjsf/utils/lib/getSubmitButtonOptions.js"); -/* harmony import */ var _getTemplate__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ./getTemplate */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/@rjsf/utils/lib/getTemplate.js"); -/* harmony import */ var _getUiOptions__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! ./getUiOptions */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/@rjsf/utils/lib/getUiOptions.js"); -/* harmony import */ var _getWidget__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! ./getWidget */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/@rjsf/utils/lib/getWidget.js"); -/* harmony import */ var _guessType__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! ./guessType */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/@rjsf/utils/lib/guessType.js"); -/* harmony import */ var _hashForSchema__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! ./hashForSchema */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/@rjsf/utils/lib/hashForSchema.js"); -/* harmony import */ var _hasWidget__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! ./hasWidget */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/@rjsf/utils/lib/hasWidget.js"); -/* harmony import */ var _idGenerators__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(/*! ./idGenerators */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/@rjsf/utils/lib/idGenerators.js"); -/* harmony import */ var _isConstant__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(/*! ./isConstant */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/@rjsf/utils/lib/isConstant.js"); -/* harmony import */ var _isCustomWidget__WEBPACK_IMPORTED_MODULE_29__ = __webpack_require__(/*! ./isCustomWidget */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/@rjsf/utils/lib/isCustomWidget.js"); -/* harmony import */ var _isFixedItems__WEBPACK_IMPORTED_MODULE_30__ = __webpack_require__(/*! ./isFixedItems */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/@rjsf/utils/lib/isFixedItems.js"); -/* harmony import */ var _isObject__WEBPACK_IMPORTED_MODULE_31__ = __webpack_require__(/*! ./isObject */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/@rjsf/utils/lib/isObject.js"); -/* harmony import */ var _labelValue__WEBPACK_IMPORTED_MODULE_32__ = __webpack_require__(/*! ./labelValue */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/@rjsf/utils/lib/labelValue.js"); -/* harmony import */ var _localToUTC__WEBPACK_IMPORTED_MODULE_33__ = __webpack_require__(/*! ./localToUTC */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/@rjsf/utils/lib/localToUTC.js"); -/* harmony import */ var _mergeDefaultsWithFormData__WEBPACK_IMPORTED_MODULE_34__ = __webpack_require__(/*! ./mergeDefaultsWithFormData */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/@rjsf/utils/lib/mergeDefaultsWithFormData.js"); -/* harmony import */ var _mergeObjects__WEBPACK_IMPORTED_MODULE_35__ = __webpack_require__(/*! ./mergeObjects */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/@rjsf/utils/lib/mergeObjects.js"); -/* harmony import */ var _mergeSchemas__WEBPACK_IMPORTED_MODULE_36__ = __webpack_require__(/*! ./mergeSchemas */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/@rjsf/utils/lib/mergeSchemas.js"); -/* harmony import */ var _optionsList__WEBPACK_IMPORTED_MODULE_37__ = __webpack_require__(/*! ./optionsList */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/@rjsf/utils/lib/optionsList.js"); -/* harmony import */ var _orderProperties__WEBPACK_IMPORTED_MODULE_38__ = __webpack_require__(/*! ./orderProperties */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/@rjsf/utils/lib/orderProperties.js"); -/* harmony import */ var _pad__WEBPACK_IMPORTED_MODULE_39__ = __webpack_require__(/*! ./pad */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/@rjsf/utils/lib/pad.js"); -/* harmony import */ var _parseDateString__WEBPACK_IMPORTED_MODULE_40__ = __webpack_require__(/*! ./parseDateString */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/@rjsf/utils/lib/parseDateString.js"); -/* harmony import */ var _rangeSpec__WEBPACK_IMPORTED_MODULE_41__ = __webpack_require__(/*! ./rangeSpec */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/@rjsf/utils/lib/rangeSpec.js"); -/* harmony import */ var _replaceStringParameters__WEBPACK_IMPORTED_MODULE_42__ = __webpack_require__(/*! ./replaceStringParameters */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/@rjsf/utils/lib/replaceStringParameters.js"); -/* harmony import */ var _schemaRequiresTrueValue__WEBPACK_IMPORTED_MODULE_43__ = __webpack_require__(/*! ./schemaRequiresTrueValue */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/@rjsf/utils/lib/schemaRequiresTrueValue.js"); -/* harmony import */ var _shouldRender__WEBPACK_IMPORTED_MODULE_44__ = __webpack_require__(/*! ./shouldRender */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/@rjsf/utils/lib/shouldRender.js"); -/* harmony import */ var _toConstant__WEBPACK_IMPORTED_MODULE_45__ = __webpack_require__(/*! ./toConstant */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/@rjsf/utils/lib/toConstant.js"); -/* harmony import */ var _toDateString__WEBPACK_IMPORTED_MODULE_46__ = __webpack_require__(/*! ./toDateString */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/@rjsf/utils/lib/toDateString.js"); -/* harmony import */ var _toErrorList__WEBPACK_IMPORTED_MODULE_47__ = __webpack_require__(/*! ./toErrorList */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/@rjsf/utils/lib/toErrorList.js"); -/* harmony import */ var _toErrorSchema__WEBPACK_IMPORTED_MODULE_48__ = __webpack_require__(/*! ./toErrorSchema */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/@rjsf/utils/lib/toErrorSchema.js"); -/* harmony import */ var _unwrapErrorHandler__WEBPACK_IMPORTED_MODULE_49__ = __webpack_require__(/*! ./unwrapErrorHandler */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/@rjsf/utils/lib/unwrapErrorHandler.js"); -/* harmony import */ var _utcToLocal__WEBPACK_IMPORTED_MODULE_50__ = __webpack_require__(/*! ./utcToLocal */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/@rjsf/utils/lib/utcToLocal.js"); -/* harmony import */ var _validationDataMerge__WEBPACK_IMPORTED_MODULE_51__ = __webpack_require__(/*! ./validationDataMerge */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/@rjsf/utils/lib/validationDataMerge.js"); -/* harmony import */ var _withIdRefPrefix__WEBPACK_IMPORTED_MODULE_52__ = __webpack_require__(/*! ./withIdRefPrefix */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/@rjsf/utils/lib/withIdRefPrefix.js"); -/* harmony import */ var _getOptionMatchingSimpleDiscriminator__WEBPACK_IMPORTED_MODULE_53__ = __webpack_require__(/*! ./getOptionMatchingSimpleDiscriminator */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/@rjsf/utils/lib/getOptionMatchingSimpleDiscriminator.js"); -/* harmony import */ var _types__WEBPACK_IMPORTED_MODULE_54__ = __webpack_require__(/*! ./types */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/@rjsf/utils/lib/types.js"); -/* harmony import */ var _enums__WEBPACK_IMPORTED_MODULE_55__ = __webpack_require__(/*! ./enums */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/@rjsf/utils/lib/enums.js"); -/* harmony import */ var _constants__WEBPACK_IMPORTED_MODULE_56__ = __webpack_require__(/*! ./constants */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/@rjsf/utils/lib/constants.js"); -/* harmony import */ var _parser__WEBPACK_IMPORTED_MODULE_57__ = __webpack_require__(/*! ./parser */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/@rjsf/utils/lib/parser/index.js"); -/* harmony import */ var _schema__WEBPACK_IMPORTED_MODULE_58__ = __webpack_require__(/*! ./schema */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/@rjsf/utils/lib/schema/index.js"); - +/* harmony import */ var _deepEquals__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./deepEquals */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/@rjsf/utils/lib/deepEquals.js"); +/* harmony import */ var _englishStringTranslator__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./englishStringTranslator */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/@rjsf/utils/lib/englishStringTranslator.js"); +/* harmony import */ var _enumOptionsDeselectValue__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./enumOptionsDeselectValue */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/@rjsf/utils/lib/enumOptionsDeselectValue.js"); +/* harmony import */ var _enumOptionsIndexForValue__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./enumOptionsIndexForValue */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/@rjsf/utils/lib/enumOptionsIndexForValue.js"); +/* harmony import */ var _enumOptionsIsSelected__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./enumOptionsIsSelected */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/@rjsf/utils/lib/enumOptionsIsSelected.js"); +/* harmony import */ var _enumOptionsSelectValue__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./enumOptionsSelectValue */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/@rjsf/utils/lib/enumOptionsSelectValue.js"); +/* harmony import */ var _enumOptionsValueForIndex__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./enumOptionsValueForIndex */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/@rjsf/utils/lib/enumOptionsValueForIndex.js"); +/* harmony import */ var _ErrorSchemaBuilder__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./ErrorSchemaBuilder */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/@rjsf/utils/lib/ErrorSchemaBuilder.js"); +/* harmony import */ var _findSchemaDefinition__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./findSchemaDefinition */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/@rjsf/utils/lib/findSchemaDefinition.js"); +/* harmony import */ var _getDateElementProps__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./getDateElementProps */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/@rjsf/utils/lib/getDateElementProps.js"); +/* harmony import */ var _getDiscriminatorFieldFromSchema__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./getDiscriminatorFieldFromSchema */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/@rjsf/utils/lib/getDiscriminatorFieldFromSchema.js"); +/* harmony import */ var _getInputProps__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ./getInputProps */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/@rjsf/utils/lib/getInputProps.js"); +/* harmony import */ var _getSchemaType__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ./getSchemaType */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/@rjsf/utils/lib/getSchemaType.js"); +/* harmony import */ var _getSubmitButtonOptions__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ./getSubmitButtonOptions */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/@rjsf/utils/lib/getSubmitButtonOptions.js"); +/* harmony import */ var _getTemplate__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ./getTemplate */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/@rjsf/utils/lib/getTemplate.js"); +/* harmony import */ var _getUiOptions__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ./getUiOptions */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/@rjsf/utils/lib/getUiOptions.js"); +/* harmony import */ var _getWidget__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! ./getWidget */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/@rjsf/utils/lib/getWidget.js"); +/* harmony import */ var _guessType__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! ./guessType */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/@rjsf/utils/lib/guessType.js"); +/* harmony import */ var _hashForSchema__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! ./hashForSchema */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/@rjsf/utils/lib/hashForSchema.js"); +/* harmony import */ var _hasWidget__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! ./hasWidget */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/@rjsf/utils/lib/hasWidget.js"); +/* harmony import */ var _idGenerators__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! ./idGenerators */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/@rjsf/utils/lib/idGenerators.js"); +/* harmony import */ var _isConstant__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(/*! ./isConstant */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/@rjsf/utils/lib/isConstant.js"); +/* harmony import */ var _isCustomWidget__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(/*! ./isCustomWidget */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/@rjsf/utils/lib/isCustomWidget.js"); +/* harmony import */ var _isFixedItems__WEBPACK_IMPORTED_MODULE_29__ = __webpack_require__(/*! ./isFixedItems */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/@rjsf/utils/lib/isFixedItems.js"); +/* harmony import */ var _isObject__WEBPACK_IMPORTED_MODULE_30__ = __webpack_require__(/*! ./isObject */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/@rjsf/utils/lib/isObject.js"); +/* harmony import */ var _labelValue__WEBPACK_IMPORTED_MODULE_31__ = __webpack_require__(/*! ./labelValue */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/@rjsf/utils/lib/labelValue.js"); +/* harmony import */ var _localToUTC__WEBPACK_IMPORTED_MODULE_32__ = __webpack_require__(/*! ./localToUTC */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/@rjsf/utils/lib/localToUTC.js"); +/* harmony import */ var _mergeDefaultsWithFormData__WEBPACK_IMPORTED_MODULE_33__ = __webpack_require__(/*! ./mergeDefaultsWithFormData */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/@rjsf/utils/lib/mergeDefaultsWithFormData.js"); +/* harmony import */ var _mergeObjects__WEBPACK_IMPORTED_MODULE_34__ = __webpack_require__(/*! ./mergeObjects */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/@rjsf/utils/lib/mergeObjects.js"); +/* harmony import */ var _mergeSchemas__WEBPACK_IMPORTED_MODULE_35__ = __webpack_require__(/*! ./mergeSchemas */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/@rjsf/utils/lib/mergeSchemas.js"); +/* harmony import */ var _optionsList__WEBPACK_IMPORTED_MODULE_36__ = __webpack_require__(/*! ./optionsList */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/@rjsf/utils/lib/optionsList.js"); +/* harmony import */ var _orderProperties__WEBPACK_IMPORTED_MODULE_37__ = __webpack_require__(/*! ./orderProperties */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/@rjsf/utils/lib/orderProperties.js"); +/* harmony import */ var _pad__WEBPACK_IMPORTED_MODULE_38__ = __webpack_require__(/*! ./pad */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/@rjsf/utils/lib/pad.js"); +/* harmony import */ var _parseDateString__WEBPACK_IMPORTED_MODULE_39__ = __webpack_require__(/*! ./parseDateString */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/@rjsf/utils/lib/parseDateString.js"); +/* harmony import */ var _rangeSpec__WEBPACK_IMPORTED_MODULE_40__ = __webpack_require__(/*! ./rangeSpec */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/@rjsf/utils/lib/rangeSpec.js"); +/* harmony import */ var _replaceStringParameters__WEBPACK_IMPORTED_MODULE_41__ = __webpack_require__(/*! ./replaceStringParameters */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/@rjsf/utils/lib/replaceStringParameters.js"); +/* harmony import */ var _schemaRequiresTrueValue__WEBPACK_IMPORTED_MODULE_42__ = __webpack_require__(/*! ./schemaRequiresTrueValue */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/@rjsf/utils/lib/schemaRequiresTrueValue.js"); +/* harmony import */ var _shouldRender__WEBPACK_IMPORTED_MODULE_43__ = __webpack_require__(/*! ./shouldRender */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/@rjsf/utils/lib/shouldRender.js"); +/* harmony import */ var _toConstant__WEBPACK_IMPORTED_MODULE_44__ = __webpack_require__(/*! ./toConstant */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/@rjsf/utils/lib/toConstant.js"); +/* harmony import */ var _toDateString__WEBPACK_IMPORTED_MODULE_45__ = __webpack_require__(/*! ./toDateString */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/@rjsf/utils/lib/toDateString.js"); +/* harmony import */ var _toErrorList__WEBPACK_IMPORTED_MODULE_46__ = __webpack_require__(/*! ./toErrorList */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/@rjsf/utils/lib/toErrorList.js"); +/* harmony import */ var _toErrorSchema__WEBPACK_IMPORTED_MODULE_47__ = __webpack_require__(/*! ./toErrorSchema */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/@rjsf/utils/lib/toErrorSchema.js"); +/* harmony import */ var _unwrapErrorHandler__WEBPACK_IMPORTED_MODULE_48__ = __webpack_require__(/*! ./unwrapErrorHandler */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/@rjsf/utils/lib/unwrapErrorHandler.js"); +/* harmony import */ var _utcToLocal__WEBPACK_IMPORTED_MODULE_49__ = __webpack_require__(/*! ./utcToLocal */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/@rjsf/utils/lib/utcToLocal.js"); +/* harmony import */ var _validationDataMerge__WEBPACK_IMPORTED_MODULE_50__ = __webpack_require__(/*! ./validationDataMerge */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/@rjsf/utils/lib/validationDataMerge.js"); +/* harmony import */ var _withIdRefPrefix__WEBPACK_IMPORTED_MODULE_51__ = __webpack_require__(/*! ./withIdRefPrefix */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/@rjsf/utils/lib/withIdRefPrefix.js"); +/* harmony import */ var _getOptionMatchingSimpleDiscriminator__WEBPACK_IMPORTED_MODULE_52__ = __webpack_require__(/*! ./getOptionMatchingSimpleDiscriminator */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/@rjsf/utils/lib/getOptionMatchingSimpleDiscriminator.js"); +/* harmony import */ var _types__WEBPACK_IMPORTED_MODULE_53__ = __webpack_require__(/*! ./types */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/@rjsf/utils/lib/types.js"); +/* harmony import */ var _enums__WEBPACK_IMPORTED_MODULE_54__ = __webpack_require__(/*! ./enums */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/@rjsf/utils/lib/enums.js"); +/* harmony import */ var _constants__WEBPACK_IMPORTED_MODULE_55__ = __webpack_require__(/*! ./constants */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/@rjsf/utils/lib/constants.js"); +/* harmony import */ var _parser__WEBPACK_IMPORTED_MODULE_56__ = __webpack_require__(/*! ./parser */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/@rjsf/utils/lib/parser/index.js"); +/* harmony import */ var _schema__WEBPACK_IMPORTED_MODULE_57__ = __webpack_require__(/*! ./schema */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/@rjsf/utils/lib/schema/index.js"); @@ -19265,58 +18271,34 @@ __webpack_require__.r(__webpack_exports__); /* harmony export */ "default": () => (/* binding */ optionsList) /* harmony export */ }); /* harmony import */ var _toConstant__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./toConstant */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/@rjsf/utils/lib/toConstant.js"); -/* harmony import */ var _getUiOptions__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./getUiOptions */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/@rjsf/utils/lib/getUiOptions.js"); - -/** Gets the list of options from the `schema`. If the schema has an enum list, then those enum values are returned. The +/** Gets the list of options from the schema. If the schema has an enum list, then those enum values are returned. The * labels for the options will be extracted from the non-standard, RJSF-deprecated `enumNames` if it exists, otherwise * the label will be the same as the `value`. If the schema has a `oneOf` or `anyOf`, then the value is the list of - * `const` values from the schema and the label is either the `schema.title` or the value. If a `uiSchema` is provided - * and it has the `ui:enumNames` matched with `enum` or it has an associated `oneOf` or `anyOf` with a list of objects - * containing `ui:title` then the UI schema values will replace the values from the schema. + * `const` values from the schema and the label is either the `schema.title` or the value. * * @param schema - The schema from which to extract the options list - * @param [uiSchema] - The optional uiSchema from which to get alternate labels for the options * @returns - The list of options from the schema */ -function optionsList(schema, uiSchema) { - // TODO flip generics to move T first in v6 +function optionsList(schema) { + // enumNames was deprecated in v5 and is intentionally omitted from the RJSFSchema type. + // Cast the type to include enumNames so the feature still works. const schemaWithEnumNames = schema; + if (schemaWithEnumNames.enumNames && "development" !== 'production') { + console.warn('The enumNames property is deprecated and may be removed in a future major release.'); + } if (schema.enum) { - let enumNames; - if (uiSchema) { - const { enumNames: uiEnumNames } = (0,_getUiOptions__WEBPACK_IMPORTED_MODULE_1__["default"])(uiSchema); - enumNames = uiEnumNames; - } - if (!enumNames && schemaWithEnumNames.enumNames) { - // enumNames was deprecated in v5 and is intentionally omitted from the RJSFSchema type. - // Cast the type to include enumNames so the feature still works. - if (true) { - console.warn('The "enumNames" property in the schema is deprecated and will be removed in a future major release. Use the "ui:enumNames" property in the uiSchema instead.'); - } - enumNames = schemaWithEnumNames.enumNames; - } return schema.enum.map((value, i) => { - const label = (enumNames === null || enumNames === void 0 ? void 0 : enumNames[i]) || String(value); + const label = (schemaWithEnumNames.enumNames && schemaWithEnumNames.enumNames[i]) || String(value); return { label, value }; }); } - let altSchemas = undefined; - let altUiSchemas = undefined; - if (schema.anyOf) { - altSchemas = schema.anyOf; - altUiSchemas = uiSchema === null || uiSchema === void 0 ? void 0 : uiSchema.anyOf; - } - else if (schema.oneOf) { - altSchemas = schema.oneOf; - altUiSchemas = uiSchema === null || uiSchema === void 0 ? void 0 : uiSchema.oneOf; - } + const altSchemas = schema.oneOf || schema.anyOf; return (altSchemas && - altSchemas.map((aSchemaDef, index) => { - const { title } = (0,_getUiOptions__WEBPACK_IMPORTED_MODULE_1__["default"])(altUiSchemas === null || altUiSchemas === void 0 ? void 0 : altUiSchemas[index]); + altSchemas.map((aSchemaDef) => { const aSchema = aSchemaDef; const value = (0,_toConstant__WEBPACK_IMPORTED_MODULE_0__["default"])(aSchema); - const label = title || aSchema.title || String(value); + const label = aSchema.title || String(value); return { schema: aSchema, label, @@ -19494,11 +18476,6 @@ class ParserValidator { this.rootSchema = rootSchema; this.addSchema(rootSchema, (0,_hashForSchema__WEBPACK_IMPORTED_MODULE_3__["default"])(rootSchema)); } - /** Resets the internal AJV validator to clear schemas from it. Can be helpful for resetting the validator for tests. - */ - reset() { - this.schemaMap = {}; - } /** Adds the given `schema` to the `schemaMap` keyed by the `hash` or `ID_KEY` if present on the `schema`. If the * schema does not have an `ID_KEY`, then the `hash` will be added as the `ID_KEY` to allow the schema to be * associated with it's `hash` for future use (by a schema compiler). @@ -19938,10 +18915,7 @@ __webpack_require__.r(__webpack_exports__); /* harmony export */ "AdditionalItemsHandling": () => (/* binding */ AdditionalItemsHandling), /* harmony export */ "computeDefaults": () => (/* binding */ computeDefaults), /* harmony export */ "default": () => (/* binding */ getDefaultFormState), -/* harmony export */ "getArrayDefaults": () => (/* binding */ getArrayDefaults), -/* harmony export */ "getDefaultBasedOnSchemaType": () => (/* binding */ getDefaultBasedOnSchemaType), -/* harmony export */ "getInnerSchemaForArrayItem": () => (/* binding */ getInnerSchemaForArrayItem), -/* harmony export */ "getObjectDefaults": () => (/* binding */ getObjectDefaults) +/* harmony export */ "getInnerSchemaForArrayItem": () => (/* binding */ getInnerSchemaForArrayItem) /* harmony export */ }); /* harmony import */ var lodash_get__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! lodash/get */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/lodash/get.js"); /* harmony import */ var lodash_get__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(lodash_get__WEBPACK_IMPORTED_MODULE_0__); @@ -20073,11 +19047,20 @@ function maybeAddDefaultToObject(obj, key, computedDefault, includeUndefinedValu * * @param validator - an implementation of the `ValidatorType` interface that will be used when necessary * @param rawSchema - The schema for which the default state is desired - * @param {ComputeDefaultsProps} computeDefaultsProps - Optional props for this function + * @param [props] - Optional props for this function + * @param [props.parentDefaults] - Any defaults provided by the parent field in the schema + * @param [props.rootSchema] - The options root schema, used to primarily to look up `$ref`s + * @param [props.rawFormData] - The current formData, if any, onto which to provide any missing defaults + * @param [props.includeUndefinedValues=false] - Optional flag, if true, cause undefined values to be added as defaults. + * If "excludeObjectChildren", cause undefined values for this object and pass `includeUndefinedValues` as + * false when computing defaults for any nested object properties. + * @param [props._recurseList=[]] - The list of ref names currently being recursed, used to prevent infinite recursion + * @param [props.experimental_defaultFormStateBehavior] Optional configuration object, if provided, allows users to override default form state behavior + * @param [props.required] - Optional flag, if true, indicates this schema was required in the parent schema. * @returns - The resulting `formData` with all the defaults provided */ -function computeDefaults(validator, rawSchema, computeDefaultsProps = {}) { - const { parentDefaults, rawFormData, rootSchema = {}, includeUndefinedValues = false, _recurseList = [], experimental_defaultFormStateBehavior = undefined, required, } = computeDefaultsProps; +function computeDefaults(validator, rawSchema, { parentDefaults, rawFormData, rootSchema = {}, includeUndefinedValues = false, _recurseList = [], experimental_defaultFormStateBehavior = undefined, required, } = {}) { + var _a, _b, _c, _d; const formData = ((0,_isObject__WEBPACK_IMPORTED_MODULE_7__["default"])(rawFormData) ? rawFormData : {}); const schema = (0,_isObject__WEBPACK_IMPORTED_MODULE_7__["default"])(rawSchema) ? rawSchema : {}; // Compute the defaults recursively: give highest priority to deepest nodes. @@ -20102,12 +19085,7 @@ function computeDefaults(validator, rawSchema, computeDefaultsProps = {}) { } } else if (_constants__WEBPACK_IMPORTED_MODULE_2__.DEPENDENCIES_KEY in schema) { - // Get the default if set from properties to ensure the dependencies conditions are resolved based on it - const defaultFormData = { - ...formData, - ...getDefaultBasedOnSchemaType(validator, schema, computeDefaultsProps, defaults), - }; - const resolvedSchema = (0,_retrieveSchema__WEBPACK_IMPORTED_MODULE_13__.resolveDependencies)(validator, schema, rootSchema, false, [], defaultFormData); + const resolvedSchema = (0,_retrieveSchema__WEBPACK_IMPORTED_MODULE_13__.resolveDependencies)(validator, schema, rootSchema, false, [], formData); schemaToCompute = resolvedSchema[0]; // pick the first element from resolve dependencies } else if ((0,_isFixedItems__WEBPACK_IMPORTED_MODULE_8__["default"])(schema)) { @@ -20154,63 +19132,19 @@ function computeDefaults(validator, rawSchema, computeDefaultsProps = {}) { if (defaults === undefined) { defaults = schema.default; } - const defaultBasedOnSchemaType = getDefaultBasedOnSchemaType(validator, schema, computeDefaultsProps, defaults); - return defaultBasedOnSchemaType !== null && defaultBasedOnSchemaType !== void 0 ? defaultBasedOnSchemaType : defaults; -} -/** Computes the default value for objects. - * - * @param validator - an implementation of the `ValidatorType` interface that will be used when necessary - * @param rawSchema - The schema for which the default state is desired - * @param {ComputeDefaultsProps} computeDefaultsProps - Optional props for this function - * @param defaults - Optional props for this function - * @returns - The default value based on the schema type if they are defined for object or array schemas. - */ -function getObjectDefaults(validator, rawSchema, { rawFormData, rootSchema = {}, includeUndefinedValues = false, _recurseList = [], experimental_defaultFormStateBehavior = undefined, required, } = {}, defaults) { - { - const formData = ((0,_isObject__WEBPACK_IMPORTED_MODULE_7__["default"])(rawFormData) ? rawFormData : {}); - const schema = rawSchema; - // This is a custom addition that fixes this issue: - // https://github.com/rjsf-team/react-jsonschema-form/issues/3832 - const retrievedSchema = (experimental_defaultFormStateBehavior === null || experimental_defaultFormStateBehavior === void 0 ? void 0 : experimental_defaultFormStateBehavior.allOf) === 'populateDefaults' && _constants__WEBPACK_IMPORTED_MODULE_2__.ALL_OF_KEY in schema - ? (0,_retrieveSchema__WEBPACK_IMPORTED_MODULE_13__["default"])(validator, schema, rootSchema, formData) - : schema; - const objectDefaults = Object.keys(retrievedSchema.properties || {}).reduce((acc, key) => { - var _a; - // Compute the defaults for this node, with the parent defaults we might - // have from a previous run: defaults[key]. - const computedDefault = computeDefaults(validator, lodash_get__WEBPACK_IMPORTED_MODULE_0___default()(retrievedSchema, [_constants__WEBPACK_IMPORTED_MODULE_2__.PROPERTIES_KEY, key]), { - rootSchema, - _recurseList, - experimental_defaultFormStateBehavior, - includeUndefinedValues: includeUndefinedValues === true, - parentDefaults: lodash_get__WEBPACK_IMPORTED_MODULE_0___default()(defaults, [key]), - rawFormData: lodash_get__WEBPACK_IMPORTED_MODULE_0___default()(formData, [key]), - required: (_a = retrievedSchema.required) === null || _a === void 0 ? void 0 : _a.includes(key), - }); - maybeAddDefaultToObject(acc, key, computedDefault, includeUndefinedValues, required, retrievedSchema.required, experimental_defaultFormStateBehavior); - return acc; - }, {}); - if (retrievedSchema.additionalProperties) { - // as per spec additionalProperties may be either schema or boolean - const additionalPropertiesSchema = (0,_isObject__WEBPACK_IMPORTED_MODULE_7__["default"])(retrievedSchema.additionalProperties) - ? retrievedSchema.additionalProperties - : {}; - const keys = new Set(); - if ((0,_isObject__WEBPACK_IMPORTED_MODULE_7__["default"])(defaults)) { - Object.keys(defaults) - .filter((key) => !retrievedSchema.properties || !retrievedSchema.properties[key]) - .forEach((key) => keys.add(key)); - } - const formDataRequired = []; - Object.keys(formData) - .filter((key) => !retrievedSchema.properties || !retrievedSchema.properties[key]) - .forEach((key) => { - keys.add(key); - formDataRequired.push(key); - }); - keys.forEach((key) => { + switch ((0,_getSchemaType__WEBPACK_IMPORTED_MODULE_6__["default"])(schema)) { + // We need to recurse for object schema inner default values. + case 'object': { + // This is a custom addition that fixes this issue: + // https://github.com/rjsf-team/react-jsonschema-form/issues/3832 + const retrievedSchema = (experimental_defaultFormStateBehavior === null || experimental_defaultFormStateBehavior === void 0 ? void 0 : experimental_defaultFormStateBehavior.allOf) === 'populateDefaults' && _constants__WEBPACK_IMPORTED_MODULE_2__.ALL_OF_KEY in schema + ? (0,_retrieveSchema__WEBPACK_IMPORTED_MODULE_13__["default"])(validator, schema, rootSchema, formData) + : schema; + const objectDefaults = Object.keys(retrievedSchema.properties || {}).reduce((acc, key) => { var _a; - const computedDefault = computeDefaults(validator, additionalPropertiesSchema, { + // Compute the defaults for this node, with the parent defaults we might + // have from a previous run: defaults[key]. + const computedDefault = computeDefaults(validator, lodash_get__WEBPACK_IMPORTED_MODULE_0___default()(retrievedSchema, [_constants__WEBPACK_IMPORTED_MODULE_2__.PROPERTIES_KEY, key]), { rootSchema, _recurseList, experimental_defaultFormStateBehavior, @@ -20219,108 +19153,113 @@ function getObjectDefaults(validator, rawSchema, { rawFormData, rootSchema = {}, rawFormData: lodash_get__WEBPACK_IMPORTED_MODULE_0___default()(formData, [key]), required: (_a = retrievedSchema.required) === null || _a === void 0 ? void 0 : _a.includes(key), }); - // Since these are additional properties we don't need to add the `experimental_defaultFormStateBehavior` prop - maybeAddDefaultToObject(objectDefaults, key, computedDefault, includeUndefinedValues, required, formDataRequired); - }); + maybeAddDefaultToObject(acc, key, computedDefault, includeUndefinedValues, required, retrievedSchema.required, experimental_defaultFormStateBehavior); + return acc; + }, {}); + if (retrievedSchema.additionalProperties) { + // as per spec additionalProperties may be either schema or boolean + const additionalPropertiesSchema = (0,_isObject__WEBPACK_IMPORTED_MODULE_7__["default"])(retrievedSchema.additionalProperties) + ? retrievedSchema.additionalProperties + : {}; + const keys = new Set(); + if ((0,_isObject__WEBPACK_IMPORTED_MODULE_7__["default"])(defaults)) { + Object.keys(defaults) + .filter((key) => !retrievedSchema.properties || !retrievedSchema.properties[key]) + .forEach((key) => keys.add(key)); + } + const formDataRequired = []; + Object.keys(formData) + .filter((key) => !retrievedSchema.properties || !retrievedSchema.properties[key]) + .forEach((key) => { + keys.add(key); + formDataRequired.push(key); + }); + keys.forEach((key) => { + var _a; + const computedDefault = computeDefaults(validator, additionalPropertiesSchema, { + rootSchema, + _recurseList, + experimental_defaultFormStateBehavior, + includeUndefinedValues: includeUndefinedValues === true, + parentDefaults: lodash_get__WEBPACK_IMPORTED_MODULE_0___default()(defaults, [key]), + rawFormData: lodash_get__WEBPACK_IMPORTED_MODULE_0___default()(formData, [key]), + required: (_a = retrievedSchema.required) === null || _a === void 0 ? void 0 : _a.includes(key), + }); + // Since these are additional properties we don't need to add the `experimental_defaultFormStateBehavior` prop + maybeAddDefaultToObject(objectDefaults, key, computedDefault, includeUndefinedValues, required, formDataRequired); + }); + } + return objectDefaults; } - return objectDefaults; - } -} -/** Computes the default value for arrays. - * - * @param validator - an implementation of the `ValidatorType` interface that will be used when necessary - * @param rawSchema - The schema for which the default state is desired - * @param {ComputeDefaultsProps} computeDefaultsProps - Optional props for this function - * @param defaults - Optional props for this function - * @returns - The default value based on the schema type if they are defined for object or array schemas. - */ -function getArrayDefaults(validator, rawSchema, { rawFormData, rootSchema = {}, _recurseList = [], experimental_defaultFormStateBehavior = undefined, required, } = {}, defaults) { - var _a, _b, _c, _d; - const schema = rawSchema; - const neverPopulate = ((_a = experimental_defaultFormStateBehavior === null || experimental_defaultFormStateBehavior === void 0 ? void 0 : experimental_defaultFormStateBehavior.arrayMinItems) === null || _a === void 0 ? void 0 : _a.populate) === 'never'; - const ignoreMinItemsFlagSet = ((_b = experimental_defaultFormStateBehavior === null || experimental_defaultFormStateBehavior === void 0 ? void 0 : experimental_defaultFormStateBehavior.arrayMinItems) === null || _b === void 0 ? void 0 : _b.populate) === 'requiredOnly'; - const isSkipEmptyDefaults = (experimental_defaultFormStateBehavior === null || experimental_defaultFormStateBehavior === void 0 ? void 0 : experimental_defaultFormStateBehavior.emptyObjectFields) === 'skipEmptyDefaults'; - const computeSkipPopulate = (_d = (_c = experimental_defaultFormStateBehavior === null || experimental_defaultFormStateBehavior === void 0 ? void 0 : experimental_defaultFormStateBehavior.arrayMinItems) === null || _c === void 0 ? void 0 : _c.computeSkipPopulate) !== null && _d !== void 0 ? _d : (() => false); - const emptyDefault = isSkipEmptyDefaults ? undefined : []; - // Inject defaults into existing array defaults - if (Array.isArray(defaults)) { - defaults = defaults.map((item, idx) => { - const schemaItem = getInnerSchemaForArrayItem(schema, AdditionalItemsHandling.Fallback, idx); - return computeDefaults(validator, schemaItem, { + case 'array': { + const neverPopulate = ((_a = experimental_defaultFormStateBehavior === null || experimental_defaultFormStateBehavior === void 0 ? void 0 : experimental_defaultFormStateBehavior.arrayMinItems) === null || _a === void 0 ? void 0 : _a.populate) === 'never'; + const ignoreMinItemsFlagSet = ((_b = experimental_defaultFormStateBehavior === null || experimental_defaultFormStateBehavior === void 0 ? void 0 : experimental_defaultFormStateBehavior.arrayMinItems) === null || _b === void 0 ? void 0 : _b.populate) === 'requiredOnly'; + const isSkipEmptyDefaults = (experimental_defaultFormStateBehavior === null || experimental_defaultFormStateBehavior === void 0 ? void 0 : experimental_defaultFormStateBehavior.emptyObjectFields) === 'skipEmptyDefaults'; + const computeSkipPopulate = (_d = (_c = experimental_defaultFormStateBehavior === null || experimental_defaultFormStateBehavior === void 0 ? void 0 : experimental_defaultFormStateBehavior.arrayMinItems) === null || _c === void 0 ? void 0 : _c.computeSkipPopulate) !== null && _d !== void 0 ? _d : (() => false); + const emptyDefault = isSkipEmptyDefaults ? undefined : []; + // Inject defaults into existing array defaults + if (Array.isArray(defaults)) { + defaults = defaults.map((item, idx) => { + const schemaItem = getInnerSchemaForArrayItem(schema, AdditionalItemsHandling.Fallback, idx); + return computeDefaults(validator, schemaItem, { + rootSchema, + _recurseList, + experimental_defaultFormStateBehavior, + parentDefaults: item, + required, + }); + }); + } + // Deeply inject defaults into already existing form data + if (Array.isArray(rawFormData)) { + const schemaItem = getInnerSchemaForArrayItem(schema); + if (neverPopulate) { + defaults = rawFormData; + } + else { + defaults = rawFormData.map((item, idx) => { + return computeDefaults(validator, schemaItem, { + rootSchema, + _recurseList, + experimental_defaultFormStateBehavior, + rawFormData: item, + parentDefaults: lodash_get__WEBPACK_IMPORTED_MODULE_0___default()(defaults, [idx]), + required, + }); + }); + } + } + if (neverPopulate) { + return defaults !== null && defaults !== void 0 ? defaults : emptyDefault; + } + if (ignoreMinItemsFlagSet && !required) { + // If no form data exists or defaults are set leave the field empty/non-existent, otherwise + // return form data/defaults + return defaults ? defaults : undefined; + } + const defaultsLength = Array.isArray(defaults) ? defaults.length : 0; + if (!schema.minItems || + (0,_isMultiSelect__WEBPACK_IMPORTED_MODULE_12__["default"])(validator, schema, rootSchema) || + computeSkipPopulate(validator, schema, rootSchema) || + schema.minItems <= defaultsLength) { + return defaults ? defaults : emptyDefault; + } + const defaultEntries = (defaults || []); + const fillerSchema = getInnerSchemaForArrayItem(schema, AdditionalItemsHandling.Invert); + const fillerDefault = fillerSchema.default; + // Calculate filler entries for remaining items (minItems - existing raw data/defaults) + const fillerEntries = new Array(schema.minItems - defaultsLength).fill(computeDefaults(validator, fillerSchema, { + parentDefaults: fillerDefault, rootSchema, _recurseList, experimental_defaultFormStateBehavior, - parentDefaults: item, required, - }); - }); - } - // Deeply inject defaults into already existing form data - if (Array.isArray(rawFormData)) { - const schemaItem = getInnerSchemaForArrayItem(schema); - if (neverPopulate) { - defaults = rawFormData; - } - else { - defaults = rawFormData.map((item, idx) => { - return computeDefaults(validator, schemaItem, { - rootSchema, - _recurseList, - experimental_defaultFormStateBehavior, - rawFormData: item, - parentDefaults: lodash_get__WEBPACK_IMPORTED_MODULE_0___default()(defaults, [idx]), - required, - }); - }); - } - } - if (neverPopulate) { - return defaults !== null && defaults !== void 0 ? defaults : emptyDefault; - } - if (ignoreMinItemsFlagSet && !required) { - // If no form data exists or defaults are set leave the field empty/non-existent, otherwise - // return form data/defaults - return defaults ? defaults : undefined; - } - const defaultsLength = Array.isArray(defaults) ? defaults.length : 0; - if (!schema.minItems || - (0,_isMultiSelect__WEBPACK_IMPORTED_MODULE_12__["default"])(validator, schema, rootSchema) || - computeSkipPopulate(validator, schema, rootSchema) || - schema.minItems <= defaultsLength) { - return defaults ? defaults : emptyDefault; - } - const defaultEntries = (defaults || []); - const fillerSchema = getInnerSchemaForArrayItem(schema, AdditionalItemsHandling.Invert); - const fillerDefault = fillerSchema.default; - // Calculate filler entries for remaining items (minItems - existing raw data/defaults) - const fillerEntries = new Array(schema.minItems - defaultsLength).fill(computeDefaults(validator, fillerSchema, { - parentDefaults: fillerDefault, - rootSchema, - _recurseList, - experimental_defaultFormStateBehavior, - required, - })); - // then fill up the rest with either the item default or empty, up to minItems - return defaultEntries.concat(fillerEntries); -} -/** Computes the default value based on the schema type. - * - * @param validator - an implementation of the `ValidatorType` interface that will be used when necessary - * @param rawSchema - The schema for which the default state is desired - * @param {ComputeDefaultsProps} computeDefaultsProps - Optional props for this function - * @param defaults - Optional props for this function - * @returns - The default value based on the schema type if they are defined for object or array schemas. - */ -function getDefaultBasedOnSchemaType(validator, rawSchema, computeDefaultsProps = {}, defaults) { - switch ((0,_getSchemaType__WEBPACK_IMPORTED_MODULE_6__["default"])(rawSchema)) { - // We need to recurse for object schema inner default values. - case 'object': { - return getObjectDefaults(validator, rawSchema, computeDefaultsProps, defaults); - } - case 'array': { - return getArrayDefaults(validator, rawSchema, computeDefaultsProps, defaults); + })); + // then fill up the rest with either the item default or empty, up to minItems + return defaultEntries.concat(fillerEntries); } } + return defaults; } /** Returns the superset of `formData` that includes the given set updated to include any missing fields that have * computed to have defaults provided in the `schema`. @@ -21631,7 +20570,7 @@ function toPathSchemaInternal(validator, schema, name, rootSchema, formData, _re }; } if (_constants__WEBPACK_IMPORTED_MODULE_3__.ADDITIONAL_PROPERTIES_KEY in schema && schema[_constants__WEBPACK_IMPORTED_MODULE_3__.ADDITIONAL_PROPERTIES_KEY] !== false) { - lodash_set__WEBPACK_IMPORTED_MODULE_2___default()(pathSchema, _constants__WEBPACK_IMPORTED_MODULE_3__.RJSF_ADDITIONAL_PROPERTIES_FLAG, true); + lodash_set__WEBPACK_IMPORTED_MODULE_2___default()(pathSchema, _constants__WEBPACK_IMPORTED_MODULE_3__.RJSF_ADDITONAL_PROPERTIES_FLAG, true); } if (_constants__WEBPACK_IMPORTED_MODULE_3__.ITEMS_KEY in schema && Array.isArray(formData)) { const { items: schemaItems, additionalItems: schemaAdditionalItems } = schema; @@ -22375,24 +21314,6 @@ class AJV6Validator { const userErrorSchema = (0,_rjsf_utils__WEBPACK_IMPORTED_MODULE_0__.unwrapErrorHandler)(errorHandler); return (0,_rjsf_utils__WEBPACK_IMPORTED_MODULE_0__.validationDataMerge)({ errors, errorSchema }, userErrorSchema); } - /** - * This function checks if a schema needs to be added and if the root schemas don't match it removes the old root schema from the ajv instance and adds the new one. - * @param rootSchema - The root schema used to provide $ref resolutions - */ - handleSchemaUpdate(rootSchema) { - var _a; - const rootSchemaId = _rjsf_utils__WEBPACK_IMPORTED_MODULE_0__.ROOT_SCHEMA_PREFIX; - // add the rootSchema ROOT_SCHEMA_PREFIX as id. - // if schema validator instance doesn't exist, add it. - // else 'handleRootSchemaChange' should be called if the root schema changes so we don't have to remove and recompile the schema every run. - if (this.ajv.getSchema(_rjsf_utils__WEBPACK_IMPORTED_MODULE_0__.ROOT_SCHEMA_PREFIX) === undefined) { - this.ajv.addSchema(rootSchema, _rjsf_utils__WEBPACK_IMPORTED_MODULE_0__.ROOT_SCHEMA_PREFIX); - } - else if (!(0,_rjsf_utils__WEBPACK_IMPORTED_MODULE_0__.deepEquals)(rootSchema, (_a = this.ajv.getSchema(_rjsf_utils__WEBPACK_IMPORTED_MODULE_0__.ROOT_SCHEMA_PREFIX)) === null || _a === void 0 ? void 0 : _a.schema)) { - this.ajv.removeSchema(rootSchemaId); - this.ajv.addSchema(rootSchema, rootSchemaId); - } - } /** Validates data against a schema, returning true if the data is valid, or * false otherwise. If the schema is invalid, then this function will return * false. @@ -22403,16 +21324,20 @@ class AJV6Validator { */ isValid(schema, formData, rootSchema) { try { - this.handleSchemaUpdate(rootSchema); + // add the rootSchema ROOT_SCHEMA_PREFIX as id. // then rewrite the schema ref's to point to the rootSchema // this accounts for the case where schema have references to models // that lives in the rootSchema but not in the schema in question. - const result = this.ajv.validate((0,_rjsf_utils__WEBPACK_IMPORTED_MODULE_0__.withIdRefPrefix)(schema), formData); + const result = this.ajv.addSchema(rootSchema, _rjsf_utils__WEBPACK_IMPORTED_MODULE_0__.ROOT_SCHEMA_PREFIX).validate((0,_rjsf_utils__WEBPACK_IMPORTED_MODULE_0__.withIdRefPrefix)(schema), formData); return result; } catch (e) { return false; } + finally { + // make sure we remove the rootSchema from the global ajv instance + this.ajv.removeSchema(_rjsf_utils__WEBPACK_IMPORTED_MODULE_0__.ROOT_SCHEMA_PREFIX); + } } } //# sourceMappingURL=validator.js.map @@ -30126,7 +29051,6 @@ __export(src_exports, { Some: () => Some, getResult: () => getResult, toOption: () => toOption, - tryCatch: () => tryCatch, unwrap: () => unwrap, unwrapOr: () => unwrapOr, unwrapOrElse: () => unwrapOrElse @@ -30297,17 +29221,6 @@ function unwrapOrElse(value, getDefaultValue) { } return value; } - -// src/try_catch.ts -function tryCatch(fn) { - let result; - try { - result = fn(); - } catch (e) { - return Err(e); - } - return Ok(result); -} // Annotate the CommonJS export names for ESM import in node: 0 && (0); //# sourceMappingURL=index.js.map @@ -90377,7 +89290,6 @@ __webpack_require__.r(__webpack_exports__); /* harmony export */ "redirect": () => (/* reexport safe */ react_router__WEBPACK_IMPORTED_MODULE_2__.redirect), /* harmony export */ "redirectDocument": () => (/* reexport safe */ react_router__WEBPACK_IMPORTED_MODULE_2__.redirectDocument), /* harmony export */ "renderMatches": () => (/* reexport safe */ react_router__WEBPACK_IMPORTED_MODULE_3__.renderMatches), -/* harmony export */ "replace": () => (/* reexport safe */ react_router__WEBPACK_IMPORTED_MODULE_2__.replace), /* harmony export */ "resolvePath": () => (/* reexport safe */ react_router__WEBPACK_IMPORTED_MODULE_2__.resolvePath), /* harmony export */ "unstable_HistoryRouter": () => (/* binding */ HistoryRouter), /* harmony export */ "unstable_usePrompt": () => (/* binding */ usePrompt), @@ -90417,7 +89329,7 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var react_router__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react-router */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/react-router/dist/index.js"); /* harmony import */ var react_router__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @remix-run/router */ "./var/plugins/System/PSC/Invoice/Webpack/node_modules/@remix-run/router/dist/router.js"); /** - * React Router DOM v6.26.2 + * React Router DOM v6.23.0 * * Copyright (c) Remix Software Inc. * @@ -90657,7 +89569,6 @@ function createBrowserRouter(routes, opts) { routes, mapRouteProperties: react_router__WEBPACK_IMPORTED_MODULE_3__.UNSAFE_mapRouteProperties, unstable_dataStrategy: opts == null ? void 0 : opts.unstable_dataStrategy, - unstable_patchRoutesOnNavigation: opts == null ? void 0 : opts.unstable_patchRoutesOnNavigation, window: opts == null ? void 0 : opts.window }).initialize(); } @@ -90674,7 +89585,6 @@ function createHashRouter(routes, opts) { routes, mapRouteProperties: react_router__WEBPACK_IMPORTED_MODULE_3__.UNSAFE_mapRouteProperties, unstable_dataStrategy: opts == null ? void 0 : opts.unstable_dataStrategy, - unstable_patchRoutesOnNavigation: opts == null ? void 0 : opts.unstable_patchRoutesOnNavigation, window: opts == null ? void 0 : opts.window }).initialize(); } @@ -90841,7 +89751,7 @@ function RouterProvider(_ref) { fetcherData.current.set(key, fetcher.data); } }); - let isViewTransitionUnavailable = router.window == null || router.window.document == null || typeof router.window.document.startViewTransition !== "function"; + let isViewTransitionUnavailable = router.window == null || typeof router.window.document.startViewTransition !== "function"; // If this isn't a view transition or it's not available in this browser, // just update and be done with it if (!viewTransitionOpts || isViewTransitionUnavailable) { @@ -90989,9 +89899,6 @@ function RouterProvider(_ref) { static: false, basename }), [router, navigator, basename]); - let routerFuture = react__WEBPACK_IMPORTED_MODULE_0__.useMemo(() => ({ - v7_relativeSplatPath: router.future.v7_relativeSplatPath - }), [router.future.v7_relativeSplatPath]); // The fragment and {null} here are important! We need them to keep React 18's // useId happy when we are server-rendering since we may have a