From 118bf651d791e7f90a824467f6da7f5934fb009e Mon Sep 17 00:00:00 2001 From: Jonathan Stegall Date: Sat, 4 Jan 2020 14:15:18 -0600 Subject: [PATCH 01/27] update node stuff --- package-lock.json | 6539 +++++++++++++++++++-------------------------- package.json | 20 +- 2 files changed, 2781 insertions(+), 3778 deletions(-) diff --git a/package-lock.json b/package-lock.json index b3b0cda9..be0c4f46 100644 --- a/package-lock.json +++ b/package-lock.json @@ -14,218 +14,168 @@ } }, "@babel/core": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.6.0.tgz", - "integrity": "sha512-FuRhDRtsd6IptKpHXAa+4WPZYY2ZzgowkbLBecEDDSje1X/apG7jQM33or3NdOmjXBKWGOg4JmSiRfUfuTtHXw==", + "version": "7.7.7", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.7.7.tgz", + "integrity": "sha512-jlSjuj/7z138NLZALxVgrx13AOtqip42ATZP7+kYl53GvDV6+4dCek1mVUo8z8c8Xnw/mx2q3d9HWh3griuesQ==", "dev": true, "requires": { "@babel/code-frame": "^7.5.5", - "@babel/generator": "^7.6.0", - "@babel/helpers": "^7.6.0", - "@babel/parser": "^7.6.0", - "@babel/template": "^7.6.0", - "@babel/traverse": "^7.6.0", - "@babel/types": "^7.6.0", - "convert-source-map": "^1.1.0", + "@babel/generator": "^7.7.7", + "@babel/helpers": "^7.7.4", + "@babel/parser": "^7.7.7", + "@babel/template": "^7.7.4", + "@babel/traverse": "^7.7.4", + "@babel/types": "^7.7.4", + "convert-source-map": "^1.7.0", "debug": "^4.1.0", "json5": "^2.1.0", "lodash": "^4.17.13", "resolve": "^1.3.2", "semver": "^5.4.1", "source-map": "^0.5.0" - }, - "dependencies": { - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "lodash": { - "version": "4.17.15", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", - "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", - "dev": true - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - } } }, "@babel/generator": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.6.0.tgz", - "integrity": "sha512-Ms8Mo7YBdMMn1BYuNtKuP/z0TgEIhbcyB8HVR6PPNYp4P61lMsABiS4A3VG1qznjXVCf3r+fVHhm4efTYVsySA==", + "version": "7.7.7", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.7.7.tgz", + "integrity": "sha512-/AOIBpHh/JU1l0ZFS4kiRCBnLi6OTHzh0RPk3h9isBxkkqELtQNFi1Vr/tiG9p1yfoUdKVwISuXWQR+hwwM4VQ==", "dev": true, "requires": { - "@babel/types": "^7.6.0", + "@babel/types": "^7.7.4", "jsesc": "^2.5.1", "lodash": "^4.17.13", - "source-map": "^0.5.0", - "trim-right": "^1.0.1" - }, - "dependencies": { - "lodash": { - "version": "4.17.15", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", - "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", - "dev": true - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - } + "source-map": "^0.5.0" } }, "@babel/helper-annotate-as-pure": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.0.0.tgz", - "integrity": "sha512-3UYcJUj9kvSLbLbUIfQTqzcy5VX7GRZ/CCDrnOaZorFFM01aXp1+GJwuFGV4NDDoAS+mOUyHcO6UD/RfqOks3Q==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.7.4.tgz", + "integrity": "sha512-2BQmQgECKzYKFPpiycoF9tlb5HA4lrVyAmLLVK177EcQAqjVLciUb2/R+n1boQ9y5ENV3uz2ZqiNw7QMBBw1Og==", "dev": true, "requires": { - "@babel/types": "^7.0.0" + "@babel/types": "^7.7.4" } }, "@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.1.0.tgz", - "integrity": "sha512-qNSR4jrmJ8M1VMM9tibvyRAHXQs2PmaksQF7c1CGJNipfe3D8p+wgNwgso/P2A2r2mdgBWAXljNWR0QRZAMW8w==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.7.4.tgz", + "integrity": "sha512-Biq/d/WtvfftWZ9Uf39hbPBYDUo986m5Bb4zhkeYDGUllF43D+nUe5M6Vuo6/8JDK/0YX/uBdeoQpyaNhNugZQ==", "dev": true, "requires": { - "@babel/helper-explode-assignable-expression": "^7.1.0", - "@babel/types": "^7.0.0" + "@babel/helper-explode-assignable-expression": "^7.7.4", + "@babel/types": "^7.7.4" } }, "@babel/helper-call-delegate": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/helper-call-delegate/-/helper-call-delegate-7.4.4.tgz", - "integrity": "sha512-l79boDFJ8S1c5hvQvG+rc+wHw6IuH7YldmRKsYtpbawsxURu/paVy57FZMomGK22/JckepaikOkY0MoAmdyOlQ==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/helper-call-delegate/-/helper-call-delegate-7.7.4.tgz", + "integrity": "sha512-8JH9/B7J7tCYJ2PpWVpw9JhPuEVHztagNVuQAFBVFYluRMlpG7F1CgKEgGeL6KFqcsIa92ZYVj6DSc0XwmN1ZA==", + "dev": true, + "requires": { + "@babel/helper-hoist-variables": "^7.7.4", + "@babel/traverse": "^7.7.4", + "@babel/types": "^7.7.4" + } + }, + "@babel/helper-create-regexp-features-plugin": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.7.4.tgz", + "integrity": "sha512-Mt+jBKaxL0zfOIWrfQpnfYCN7/rS6GKx6CCCfuoqVVd+17R8zNDlzVYmIi9qyb2wOk002NsmSTDymkIygDUH7A==", "dev": true, "requires": { - "@babel/helper-hoist-variables": "^7.4.4", - "@babel/traverse": "^7.4.4", - "@babel/types": "^7.4.4" + "@babel/helper-regex": "^7.4.4", + "regexpu-core": "^4.6.0" } }, "@babel/helper-define-map": { - "version": "7.5.5", - "resolved": "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.5.5.tgz", - "integrity": "sha512-fTfxx7i0B5NJqvUOBBGREnrqbTxRh7zinBANpZXAVDlsZxYdclDp467G1sQ8VZYMnAURY3RpBUAgOYT9GfzHBg==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.7.4.tgz", + "integrity": "sha512-v5LorqOa0nVQUvAUTUF3KPastvUt/HzByXNamKQ6RdJRTV7j8rLL+WB5C/MzzWAwOomxDhYFb1wLLxHqox86lg==", "dev": true, "requires": { - "@babel/helper-function-name": "^7.1.0", - "@babel/types": "^7.5.5", + "@babel/helper-function-name": "^7.7.4", + "@babel/types": "^7.7.4", "lodash": "^4.17.13" - }, - "dependencies": { - "lodash": { - "version": "4.17.15", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", - "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", - "dev": true - } } }, "@babel/helper-explode-assignable-expression": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.1.0.tgz", - "integrity": "sha512-NRQpfHrJ1msCHtKjbzs9YcMmJZOg6mQMmGRB+hbamEdG5PNpaSm95275VD92DvJKuyl0s2sFiDmMZ+EnnvufqA==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.7.4.tgz", + "integrity": "sha512-2/SicuFrNSXsZNBxe5UGdLr+HZg+raWBLE9vC98bdYOKX/U6PY0mdGlYUJdtTDPSU0Lw0PNbKKDpwYHJLn2jLg==", "dev": true, "requires": { - "@babel/traverse": "^7.1.0", - "@babel/types": "^7.0.0" + "@babel/traverse": "^7.7.4", + "@babel/types": "^7.7.4" } }, "@babel/helper-function-name": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.1.0.tgz", - "integrity": "sha512-A95XEoCpb3TO+KZzJ4S/5uW5fNe26DjBGqf1o9ucyLyCmi1dXq/B3c8iaWTfBk3VvetUxl16e8tIrd5teOCfGw==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.7.4.tgz", + "integrity": "sha512-AnkGIdiBhEuiwdoMnKm7jfPfqItZhgRaZfMg1XX3bS25INOnLPjPG1Ppnajh8eqgt5kPJnfqrRHqFqmjKDZLzQ==", "dev": true, "requires": { - "@babel/helper-get-function-arity": "^7.0.0", - "@babel/template": "^7.1.0", - "@babel/types": "^7.0.0" + "@babel/helper-get-function-arity": "^7.7.4", + "@babel/template": "^7.7.4", + "@babel/types": "^7.7.4" } }, "@babel/helper-get-function-arity": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0.tgz", - "integrity": "sha512-r2DbJeg4svYvt3HOS74U4eWKsUAMRH01Z1ds1zx8KNTPtpTL5JAsdFv8BNyOpVqdFhHkkRDIg5B4AsxmkjAlmQ==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.7.4.tgz", + "integrity": "sha512-QTGKEdCkjgzgfJ3bAyRwF4yyT3pg+vDgan8DSivq1eS0gwi+KGKE5x8kRcbeFTb/673mkO5SN1IZfmCfA5o+EA==", "dev": true, "requires": { - "@babel/types": "^7.0.0" + "@babel/types": "^7.7.4" } }, "@babel/helper-hoist-variables": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.4.4.tgz", - "integrity": "sha512-VYk2/H/BnYbZDDg39hr3t2kKyifAm1W6zHRfhx8jGjIHpQEBv9dry7oQ2f3+J703TLu69nYdxsovl0XYfcnK4w==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.7.4.tgz", + "integrity": "sha512-wQC4xyvc1Jo/FnLirL6CEgPgPCa8M74tOdjWpRhQYapz5JC7u3NYU1zCVoVAGCE3EaIP9T1A3iW0WLJ+reZlpQ==", "dev": true, "requires": { - "@babel/types": "^7.4.4" + "@babel/types": "^7.7.4" } }, "@babel/helper-member-expression-to-functions": { - "version": "7.5.5", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.5.5.tgz", - "integrity": "sha512-5qZ3D1uMclSNqYcXqiHoA0meVdv+xUEex9em2fqMnrk/scphGlGgg66zjMrPJESPwrFJ6sbfFQYUSa0Mz7FabA==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.7.4.tgz", + "integrity": "sha512-9KcA1X2E3OjXl/ykfMMInBK+uVdfIVakVe7W7Lg3wfXUNyS3Q1HWLFRwZIjhqiCGbslummPDnmb7vIekS0C1vw==", "dev": true, "requires": { - "@babel/types": "^7.5.5" + "@babel/types": "^7.7.4" } }, "@babel/helper-module-imports": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.0.0.tgz", - "integrity": "sha512-aP/hlLq01DWNEiDg4Jn23i+CXxW/owM4WpDLFUbpjxe4NS3BhLVZQ5i7E0ZrxuQ/vwekIeciyamgB1UIYxxM6A==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.7.4.tgz", + "integrity": "sha512-dGcrX6K9l8258WFjyDLJwuVKxR4XZfU0/vTUgOQYWEnRD8mgr+p4d6fCUMq/ys0h4CCt/S5JhbvtyErjWouAUQ==", "dev": true, "requires": { - "@babel/types": "^7.0.0" + "@babel/types": "^7.7.4" } }, "@babel/helper-module-transforms": { - "version": "7.5.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.5.5.tgz", - "integrity": "sha512-jBeCvETKuJqeiaCdyaheF40aXnnU1+wkSiUs/IQg3tB85up1LyL8x77ClY8qJpuRJUcXQo+ZtdNESmZl4j56Pw==", + "version": "7.7.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.7.5.tgz", + "integrity": "sha512-A7pSxyJf1gN5qXVcidwLWydjftUN878VkalhXX5iQDuGyiGK3sOrrKKHF4/A4fwHtnsotv/NipwAeLzY4KQPvw==", "dev": true, "requires": { - "@babel/helper-module-imports": "^7.0.0", - "@babel/helper-simple-access": "^7.1.0", - "@babel/helper-split-export-declaration": "^7.4.4", - "@babel/template": "^7.4.4", - "@babel/types": "^7.5.5", + "@babel/helper-module-imports": "^7.7.4", + "@babel/helper-simple-access": "^7.7.4", + "@babel/helper-split-export-declaration": "^7.7.4", + "@babel/template": "^7.7.4", + "@babel/types": "^7.7.4", "lodash": "^4.17.13" - }, - "dependencies": { - "lodash": { - "version": "4.17.15", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", - "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", - "dev": true - } } }, "@babel/helper-optimise-call-expression": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.0.0.tgz", - "integrity": "sha512-u8nd9NQePYNQV8iPWu/pLLYBqZBa4ZaY1YWRFMuxrid94wKI1QNt67NEZ7GAe5Kc/0LLScbim05xZFWkAdrj9g==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.7.4.tgz", + "integrity": "sha512-VB7gWZ2fDkSuqW6b1AKXkJWO5NyNI3bFL/kK79/30moK57blr6NbH8xcl2XcKCwOmJosftWunZqfO84IGq3ZZg==", "dev": true, "requires": { - "@babel/types": "^7.0.0" + "@babel/types": "^7.7.4" } }, "@babel/helper-plugin-utils": { @@ -241,81 +191,73 @@ "dev": true, "requires": { "lodash": "^4.17.13" - }, - "dependencies": { - "lodash": { - "version": "4.17.15", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", - "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", - "dev": true - } } }, "@babel/helper-remap-async-to-generator": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.1.0.tgz", - "integrity": "sha512-3fOK0L+Fdlg8S5al8u/hWE6vhufGSn0bN09xm2LXMy//REAF8kDCrYoOBKYmA8m5Nom+sV9LyLCwrFynA8/slg==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.7.4.tgz", + "integrity": "sha512-Sk4xmtVdM9sA/jCI80f+KS+Md+ZHIpjuqmYPk1M7F/upHou5e4ReYmExAiu6PVe65BhJPZA2CY9x9k4BqE5klw==", "dev": true, "requires": { - "@babel/helper-annotate-as-pure": "^7.0.0", - "@babel/helper-wrap-function": "^7.1.0", - "@babel/template": "^7.1.0", - "@babel/traverse": "^7.1.0", - "@babel/types": "^7.0.0" + "@babel/helper-annotate-as-pure": "^7.7.4", + "@babel/helper-wrap-function": "^7.7.4", + "@babel/template": "^7.7.4", + "@babel/traverse": "^7.7.4", + "@babel/types": "^7.7.4" } }, "@babel/helper-replace-supers": { - "version": "7.5.5", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.5.5.tgz", - "integrity": "sha512-XvRFWrNnlsow2u7jXDuH4jDDctkxbS7gXssrP4q2nUD606ukXHRvydj346wmNg+zAgpFx4MWf4+usfC93bElJg==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.7.4.tgz", + "integrity": "sha512-pP0tfgg9hsZWo5ZboYGuBn/bbYT/hdLPVSS4NMmiRJdwWhP0IznPwN9AE1JwyGsjSPLC364I0Qh5p+EPkGPNpg==", "dev": true, "requires": { - "@babel/helper-member-expression-to-functions": "^7.5.5", - "@babel/helper-optimise-call-expression": "^7.0.0", - "@babel/traverse": "^7.5.5", - "@babel/types": "^7.5.5" + "@babel/helper-member-expression-to-functions": "^7.7.4", + "@babel/helper-optimise-call-expression": "^7.7.4", + "@babel/traverse": "^7.7.4", + "@babel/types": "^7.7.4" } }, "@babel/helper-simple-access": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.1.0.tgz", - "integrity": "sha512-Vk+78hNjRbsiu49zAPALxTb+JUQCz1aolpd8osOF16BGnLtseD21nbHgLPGUwrXEurZgiCOUmvs3ExTu4F5x6w==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.7.4.tgz", + "integrity": "sha512-zK7THeEXfan7UlWsG2A6CI/L9jVnI5+xxKZOdej39Y0YtDYKx9raHk5F2EtK9K8DHRTihYwg20ADt9S36GR78A==", "dev": true, "requires": { - "@babel/template": "^7.1.0", - "@babel/types": "^7.0.0" + "@babel/template": "^7.7.4", + "@babel/types": "^7.7.4" } }, "@babel/helper-split-export-declaration": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.4.4.tgz", - "integrity": "sha512-Ro/XkzLf3JFITkW6b+hNxzZ1n5OQ80NvIUdmHspih1XAhtN3vPTuUFT4eQnela+2MaZ5ulH+iyP513KJrxbN7Q==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.7.4.tgz", + "integrity": "sha512-guAg1SXFcVr04Guk9eq0S4/rWS++sbmyqosJzVs8+1fH5NI+ZcmkaSkc7dmtAFbHFva6yRJnjW3yAcGxjueDug==", "dev": true, "requires": { - "@babel/types": "^7.4.4" + "@babel/types": "^7.7.4" } }, "@babel/helper-wrap-function": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.2.0.tgz", - "integrity": "sha512-o9fP1BZLLSrYlxYEYyl2aS+Flun5gtjTIG8iln+XuEzQTs0PLagAGSXUcqruJwD5fM48jzIEggCKpIfWTcR7pQ==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.7.4.tgz", + "integrity": "sha512-VsfzZt6wmsocOaVU0OokwrIytHND55yvyT4BPB9AIIgwr8+x7617hetdJTsuGwygN5RC6mxA9EJztTjuwm2ofg==", "dev": true, "requires": { - "@babel/helper-function-name": "^7.1.0", - "@babel/template": "^7.1.0", - "@babel/traverse": "^7.1.0", - "@babel/types": "^7.2.0" + "@babel/helper-function-name": "^7.7.4", + "@babel/template": "^7.7.4", + "@babel/traverse": "^7.7.4", + "@babel/types": "^7.7.4" } }, "@babel/helpers": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.6.0.tgz", - "integrity": "sha512-W9kao7OBleOjfXtFGgArGRX6eCP0UEcA2ZWEWNkJdRZnHhW4eEbeswbG3EwaRsnQUAEGWYgMq1HsIXuNNNy2eQ==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.7.4.tgz", + "integrity": "sha512-ak5NGZGJ6LV85Q1Zc9gn2n+ayXOizryhjSUBTdu5ih1tlVCJeuQENzc4ItyCVhINVXvIT/ZQ4mheGIsfBkpskg==", "dev": true, "requires": { - "@babel/template": "^7.6.0", - "@babel/traverse": "^7.6.0", - "@babel/types": "^7.6.0" + "@babel/template": "^7.7.4", + "@babel/traverse": "^7.7.4", + "@babel/types": "^7.7.4" } }, "@babel/highlight": { @@ -330,398 +272,397 @@ } }, "@babel/parser": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.6.0.tgz", - "integrity": "sha512-+o2q111WEx4srBs7L9eJmcwi655eD8sXniLqMB93TBK9GrNzGrxDWSjiqz2hLU0Ha8MTXFIP0yd9fNdP+m43ZQ==", + "version": "7.7.7", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.7.7.tgz", + "integrity": "sha512-WtTZMZAZLbeymhkd/sEaPD8IQyGAhmuTuvTzLiCFM7iXiVdY0gc0IaI+cW0fh1BnSMbJSzXX6/fHllgHKwHhXw==", "dev": true }, "@babel/plugin-proposal-async-generator-functions": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.2.0.tgz", - "integrity": "sha512-+Dfo/SCQqrwx48ptLVGLdE39YtWRuKc/Y9I5Fy0P1DDBB9lsAHpjcEJQt+4IifuSOSTLBKJObJqMvaO1pIE8LQ==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.7.4.tgz", + "integrity": "sha512-1ypyZvGRXriY/QP668+s8sFr2mqinhkRDMPSQLNghCQE+GAkFtp+wkHVvg2+Hdki8gwP+NFzJBJ/N1BfzCCDEw==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-remap-async-to-generator": "^7.1.0", - "@babel/plugin-syntax-async-generators": "^7.2.0" + "@babel/helper-remap-async-to-generator": "^7.7.4", + "@babel/plugin-syntax-async-generators": "^7.7.4" } }, "@babel/plugin-proposal-dynamic-import": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.5.0.tgz", - "integrity": "sha512-x/iMjggsKTFHYC6g11PL7Qy58IK8H5zqfm9e6hu4z1iH2IRyAp9u9dL80zA6R76yFovETFLKz2VJIC2iIPBuFw==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.7.4.tgz", + "integrity": "sha512-StH+nGAdO6qDB1l8sZ5UBV8AC3F2VW2I8Vfld73TMKyptMU9DY5YsJAS8U81+vEtxcH3Y/La0wG0btDrhpnhjQ==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-syntax-dynamic-import": "^7.2.0" + "@babel/plugin-syntax-dynamic-import": "^7.7.4" } }, "@babel/plugin-proposal-json-strings": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.2.0.tgz", - "integrity": "sha512-MAFV1CA/YVmYwZG0fBQyXhmj0BHCB5egZHCKWIFVv/XCxAeVGIHfos3SwDck4LvCllENIAg7xMKOG5kH0dzyUg==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.7.4.tgz", + "integrity": "sha512-wQvt3akcBTfLU/wYoqm/ws7YOAQKu8EVJEvHip/mzkNtjaclQoCCIqKXFP5/eyfnfbQCDV3OLRIK3mIVyXuZlw==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-syntax-json-strings": "^7.2.0" + "@babel/plugin-syntax-json-strings": "^7.7.4" } }, "@babel/plugin-proposal-object-rest-spread": { - "version": "7.5.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.5.5.tgz", - "integrity": "sha512-F2DxJJSQ7f64FyTVl5cw/9MWn6naXGdk3Q3UhDbFEEHv+EilCPoeRD3Zh/Utx1CJz4uyKlQ4uH+bJPbEhMV7Zw==", + "version": "7.7.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.7.7.tgz", + "integrity": "sha512-3qp9I8lelgzNedI3hrhkvhaEYree6+WHnyA/q4Dza9z7iEIs1eyhWyJnetk3jJ69RT0AT4G0UhEGwyGFJ7GUuQ==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-syntax-object-rest-spread": "^7.2.0" + "@babel/plugin-syntax-object-rest-spread": "^7.7.4" } }, "@babel/plugin-proposal-optional-catch-binding": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.2.0.tgz", - "integrity": "sha512-mgYj3jCcxug6KUcX4OBoOJz3CMrwRfQELPQ5560F70YQUBZB7uac9fqaWamKR1iWUzGiK2t0ygzjTScZnVz75g==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.7.4.tgz", + "integrity": "sha512-DyM7U2bnsQerCQ+sejcTNZh8KQEUuC3ufzdnVnSiUv/qoGJp2Z3hanKL18KDhsBT5Wj6a7CMT5mdyCNJsEaA9w==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-syntax-optional-catch-binding": "^7.2.0" + "@babel/plugin-syntax-optional-catch-binding": "^7.7.4" } }, "@babel/plugin-proposal-unicode-property-regex": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.4.4.tgz", - "integrity": "sha512-j1NwnOqMG9mFUOH58JTFsA/+ZYzQLUZ/drqWUqxCYLGeu2JFZL8YrNC9hBxKmWtAuOCHPcRpgv7fhap09Fb4kA==", + "version": "7.7.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.7.7.tgz", + "integrity": "sha512-80PbkKyORBUVm1fbTLrHpYdJxMThzM1UqFGh0ALEhO9TYbG86Ah9zQYAB/84axz2vcxefDLdZwWwZNlYARlu9w==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-regex": "^7.4.4", - "regexpu-core": "^4.5.4" + "@babel/helper-create-regexp-features-plugin": "^7.7.4", + "@babel/helper-plugin-utils": "^7.0.0" } }, "@babel/plugin-syntax-async-generators": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.2.0.tgz", - "integrity": "sha512-1ZrIRBv2t0GSlcwVoQ6VgSLpLgiN/FVQUzt9znxo7v2Ov4jJrs8RY8tv0wvDmFN3qIdMKWrmMMW6yZ0G19MfGg==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.7.4.tgz", + "integrity": "sha512-Li4+EjSpBgxcsmeEF8IFcfV/+yJGxHXDirDkEoyFjumuwbmfCVHUt0HuowD/iGM7OhIRyXJH9YXxqiH6N815+g==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.0.0" } }, "@babel/plugin-syntax-dynamic-import": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.2.0.tgz", - "integrity": "sha512-mVxuJ0YroI/h/tbFTPGZR8cv6ai+STMKNBq0f8hFxsxWjl94qqhsb+wXbpNMDPU3cfR1TIsVFzU3nXyZMqyK4w==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.7.4.tgz", + "integrity": "sha512-jHQW0vbRGvwQNgyVxwDh4yuXu4bH1f5/EICJLAhl1SblLs2CDhrsmCk+v5XLdE9wxtAFRyxx+P//Iw+a5L/tTg==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.0.0" } }, "@babel/plugin-syntax-json-strings": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.2.0.tgz", - "integrity": "sha512-5UGYnMSLRE1dqqZwug+1LISpA403HzlSfsg6P9VXU6TBjcSHeNlw4DxDx7LgpF+iKZoOG/+uzqoRHTdcUpiZNg==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.7.4.tgz", + "integrity": "sha512-QpGupahTQW1mHRXddMG5srgpHWqRLwJnJZKXTigB9RPFCCGbDGCgBeM/iC82ICXp414WeYx/tD54w7M2qRqTMg==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.0.0" } }, "@babel/plugin-syntax-object-rest-spread": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.2.0.tgz", - "integrity": "sha512-t0JKGgqk2We+9may3t0xDdmneaXmyxq0xieYcKHxIsrJO64n1OiMWNUtc5gQK1PA0NpdCRrtZp4z+IUaKugrSA==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.7.4.tgz", + "integrity": "sha512-mObR+r+KZq0XhRVS2BrBKBpr5jqrqzlPvS9C9vuOf5ilSwzloAl7RPWLrgKdWS6IreaVrjHxTjtyqFiOisaCwg==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.0.0" } }, "@babel/plugin-syntax-optional-catch-binding": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.2.0.tgz", - "integrity": "sha512-bDe4xKNhb0LI7IvZHiA13kff0KEfaGX/Hv4lMA9+7TEc63hMNvfKo6ZFpXhKuEp+II/q35Gc4NoMeDZyaUbj9w==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.7.4.tgz", + "integrity": "sha512-4ZSuzWgFxqHRE31Glu+fEr/MirNZOMYmD/0BhBWyLyOOQz/gTAl7QmWm2hX1QxEIXsr2vkdlwxIzTyiYRC4xcQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-syntax-top-level-await": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.7.4.tgz", + "integrity": "sha512-wdsOw0MvkL1UIgiQ/IFr3ETcfv1xb8RMM0H9wbiDyLaJFyiDg5oZvDLCXosIXmFeIlweML5iOBXAkqddkYNizg==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.0.0" } }, "@babel/plugin-transform-arrow-functions": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.2.0.tgz", - "integrity": "sha512-ER77Cax1+8/8jCB9fo4Ud161OZzWN5qawi4GusDuRLcDbDG+bIGYY20zb2dfAFdTRGzrfq2xZPvF0R64EHnimg==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.7.4.tgz", + "integrity": "sha512-zUXy3e8jBNPiffmqkHRNDdZM2r8DWhCB7HhcoyZjiK1TxYEluLHAvQuYnTT+ARqRpabWqy/NHkO6e3MsYB5YfA==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.0.0" } }, "@babel/plugin-transform-async-to-generator": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.5.0.tgz", - "integrity": "sha512-mqvkzwIGkq0bEF1zLRRiTdjfomZJDV33AH3oQzHVGkI2VzEmXLpKKOBvEVaFZBJdN0XTyH38s9j/Kiqr68dggg==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.7.4.tgz", + "integrity": "sha512-zpUTZphp5nHokuy8yLlyafxCJ0rSlFoSHypTUWgpdwoDXWQcseaect7cJ8Ppk6nunOM6+5rPMkod4OYKPR5MUg==", "dev": true, "requires": { - "@babel/helper-module-imports": "^7.0.0", + "@babel/helper-module-imports": "^7.7.4", "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-remap-async-to-generator": "^7.1.0" + "@babel/helper-remap-async-to-generator": "^7.7.4" } }, "@babel/plugin-transform-block-scoped-functions": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.2.0.tgz", - "integrity": "sha512-ntQPR6q1/NKuphly49+QiQiTN0O63uOwjdD6dhIjSWBI5xlrbUFh720TIpzBhpnrLfv2tNH/BXvLIab1+BAI0w==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.7.4.tgz", + "integrity": "sha512-kqtQzwtKcpPclHYjLK//3lH8OFsCDuDJBaFhVwf8kqdnF6MN4l618UDlcA7TfRs3FayrHj+svYnSX8MC9zmUyQ==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.0.0" } }, "@babel/plugin-transform-block-scoping": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.6.0.tgz", - "integrity": "sha512-tIt4E23+kw6TgL/edACZwP1OUKrjOTyMrFMLoT5IOFrfMRabCgekjqFd5o6PaAMildBu46oFkekIdMuGkkPEpA==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.7.4.tgz", + "integrity": "sha512-2VBe9u0G+fDt9B5OV5DQH4KBf5DoiNkwFKOz0TCvBWvdAN2rOykCTkrL+jTLxfCAm76l9Qo5OqL7HBOx2dWggg==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.0.0", "lodash": "^4.17.13" - }, - "dependencies": { - "lodash": { - "version": "4.17.15", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", - "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", - "dev": true - } } }, "@babel/plugin-transform-classes": { - "version": "7.5.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.5.5.tgz", - "integrity": "sha512-U2htCNK/6e9K7jGyJ++1p5XRU+LJjrwtoiVn9SzRlDT2KubcZ11OOwy3s24TjHxPgxNwonCYP7U2K51uVYCMDg==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.7.4.tgz", + "integrity": "sha512-sK1mjWat7K+buWRuImEzjNf68qrKcrddtpQo3swi9j7dUcG6y6R6+Di039QN2bD1dykeswlagupEmpOatFHHUg==", "dev": true, "requires": { - "@babel/helper-annotate-as-pure": "^7.0.0", - "@babel/helper-define-map": "^7.5.5", - "@babel/helper-function-name": "^7.1.0", - "@babel/helper-optimise-call-expression": "^7.0.0", + "@babel/helper-annotate-as-pure": "^7.7.4", + "@babel/helper-define-map": "^7.7.4", + "@babel/helper-function-name": "^7.7.4", + "@babel/helper-optimise-call-expression": "^7.7.4", "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-replace-supers": "^7.5.5", - "@babel/helper-split-export-declaration": "^7.4.4", + "@babel/helper-replace-supers": "^7.7.4", + "@babel/helper-split-export-declaration": "^7.7.4", "globals": "^11.1.0" } }, "@babel/plugin-transform-computed-properties": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.2.0.tgz", - "integrity": "sha512-kP/drqTxY6Xt3NNpKiMomfgkNn4o7+vKxK2DDKcBG9sHj51vHqMBGy8wbDS/J4lMxnqs153/T3+DmCEAkC5cpA==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.7.4.tgz", + "integrity": "sha512-bSNsOsZnlpLLyQew35rl4Fma3yKWqK3ImWMSC/Nc+6nGjC9s5NFWAer1YQ899/6s9HxO2zQC1WoFNfkOqRkqRQ==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.0.0" } }, "@babel/plugin-transform-destructuring": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.6.0.tgz", - "integrity": "sha512-2bGIS5P1v4+sWTCnKNDZDxbGvEqi0ijeqM/YqHtVGrvG2y0ySgnEEhXErvE9dA0bnIzY9bIzdFK0jFA46ASIIQ==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.7.4.tgz", + "integrity": "sha512-4jFMXI1Cu2aXbcXXl8Lr6YubCn6Oc7k9lLsu8v61TZh+1jny2BWmdtvY9zSUlLdGUvcy9DMAWyZEOqjsbeg/wA==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.0.0" } }, "@babel/plugin-transform-dotall-regex": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.4.4.tgz", - "integrity": "sha512-P05YEhRc2h53lZDjRPk/OektxCVevFzZs2Gfjd545Wde3k+yFDbXORgl2e0xpbq8mLcKJ7Idss4fAg0zORN/zg==", + "version": "7.7.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.7.7.tgz", + "integrity": "sha512-b4in+YlTeE/QmTgrllnb3bHA0HntYvjz8O3Mcbx75UBPJA2xhb5A8nle498VhxSXJHQefjtQxpnLPehDJ4TRlg==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-regex": "^7.4.4", - "regexpu-core": "^4.5.4" + "@babel/helper-create-regexp-features-plugin": "^7.7.4", + "@babel/helper-plugin-utils": "^7.0.0" } }, "@babel/plugin-transform-duplicate-keys": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.5.0.tgz", - "integrity": "sha512-igcziksHizyQPlX9gfSjHkE2wmoCH3evvD2qR5w29/Dk0SMKE/eOI7f1HhBdNhR/zxJDqrgpoDTq5YSLH/XMsQ==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.7.4.tgz", + "integrity": "sha512-g1y4/G6xGWMD85Tlft5XedGaZBCIVN+/P0bs6eabmcPP9egFleMAo65OOjlhcz1njpwagyY3t0nsQC9oTFegJA==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.0.0" } }, "@babel/plugin-transform-exponentiation-operator": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.2.0.tgz", - "integrity": "sha512-umh4hR6N7mu4Elq9GG8TOu9M0bakvlsREEC+ialrQN6ABS4oDQ69qJv1VtR3uxlKMCQMCvzk7vr17RHKcjx68A==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.7.4.tgz", + "integrity": "sha512-MCqiLfCKm6KEA1dglf6Uqq1ElDIZwFuzz1WH5mTf8k2uQSxEJMbOIEh7IZv7uichr7PMfi5YVSrr1vz+ipp7AQ==", "dev": true, "requires": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.1.0", + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.7.4", "@babel/helper-plugin-utils": "^7.0.0" } }, "@babel/plugin-transform-for-of": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.4.4.tgz", - "integrity": "sha512-9T/5Dlr14Z9TIEXLXkt8T1DU7F24cbhwhMNUziN3hB1AXoZcdzPcTiKGRn/6iOymDqtTKWnr/BtRKN9JwbKtdQ==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.7.4.tgz", + "integrity": "sha512-zZ1fD1B8keYtEcKF+M1TROfeHTKnijcVQm0yO/Yu1f7qoDoxEIc/+GX6Go430Bg84eM/xwPFp0+h4EbZg7epAA==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.0.0" } }, "@babel/plugin-transform-function-name": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.4.4.tgz", - "integrity": "sha512-iU9pv7U+2jC9ANQkKeNF6DrPy4GBa4NWQtl6dHB4Pb3izX2JOEvDTFarlNsBj/63ZEzNNIAMs3Qw4fNCcSOXJA==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.7.4.tgz", + "integrity": "sha512-E/x09TvjHNhsULs2IusN+aJNRV5zKwxu1cpirZyRPw+FyyIKEHPXTsadj48bVpc1R5Qq1B5ZkzumuFLytnbT6g==", "dev": true, "requires": { - "@babel/helper-function-name": "^7.1.0", + "@babel/helper-function-name": "^7.7.4", "@babel/helper-plugin-utils": "^7.0.0" } }, "@babel/plugin-transform-literals": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.2.0.tgz", - "integrity": "sha512-2ThDhm4lI4oV7fVQ6pNNK+sx+c/GM5/SaML0w/r4ZB7sAneD/piDJtwdKlNckXeyGK7wlwg2E2w33C/Hh+VFCg==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.7.4.tgz", + "integrity": "sha512-X2MSV7LfJFm4aZfxd0yLVFrEXAgPqYoDG53Br/tCKiKYfX0MjVjQeWPIhPHHsCqzwQANq+FLN786fF5rgLS+gw==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.0.0" } }, "@babel/plugin-transform-member-expression-literals": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.2.0.tgz", - "integrity": "sha512-HiU3zKkSU6scTidmnFJ0bMX8hz5ixC93b4MHMiYebmk2lUVNGOboPsqQvx5LzooihijUoLR/v7Nc1rbBtnc7FA==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.7.4.tgz", + "integrity": "sha512-9VMwMO7i69LHTesL0RdGy93JU6a+qOPuvB4F4d0kR0zyVjJRVJRaoaGjhtki6SzQUu8yen/vxPKN6CWnCUw6bA==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.0.0" } }, "@babel/plugin-transform-modules-amd": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.5.0.tgz", - "integrity": "sha512-n20UsQMKnWrltocZZm24cRURxQnWIvsABPJlw/fvoy9c6AgHZzoelAIzajDHAQrDpuKFFPPcFGd7ChsYuIUMpg==", + "version": "7.7.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.7.5.tgz", + "integrity": "sha512-CT57FG4A2ZUNU1v+HdvDSDrjNWBrtCmSH6YbbgN3Lrf0Di/q/lWRxZrE72p3+HCCz9UjfZOEBdphgC0nzOS6DQ==", "dev": true, "requires": { - "@babel/helper-module-transforms": "^7.1.0", + "@babel/helper-module-transforms": "^7.7.5", "@babel/helper-plugin-utils": "^7.0.0", "babel-plugin-dynamic-import-node": "^2.3.0" } }, "@babel/plugin-transform-modules-commonjs": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.6.0.tgz", - "integrity": "sha512-Ma93Ix95PNSEngqomy5LSBMAQvYKVe3dy+JlVJSHEXZR5ASL9lQBedMiCyVtmTLraIDVRE3ZjTZvmXXD2Ozw3g==", + "version": "7.7.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.7.5.tgz", + "integrity": "sha512-9Cq4zTFExwFhQI6MT1aFxgqhIsMWQWDVwOgLzl7PTWJHsNaqFvklAU+Oz6AQLAS0dJKTwZSOCo20INwktxpi3Q==", "dev": true, "requires": { - "@babel/helper-module-transforms": "^7.4.4", + "@babel/helper-module-transforms": "^7.7.5", "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-simple-access": "^7.1.0", + "@babel/helper-simple-access": "^7.7.4", "babel-plugin-dynamic-import-node": "^2.3.0" } }, "@babel/plugin-transform-modules-systemjs": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.5.0.tgz", - "integrity": "sha512-Q2m56tyoQWmuNGxEtUyeEkm6qJYFqs4c+XyXH5RAuYxObRNz9Zgj/1g2GMnjYp2EUyEy7YTrxliGCXzecl/vJg==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.7.4.tgz", + "integrity": "sha512-y2c96hmcsUi6LrMqvmNDPBBiGCiQu0aYqpHatVVu6kD4mFEXKjyNxd/drc18XXAf9dv7UXjrZwBVmTTGaGP8iw==", "dev": true, "requires": { - "@babel/helper-hoist-variables": "^7.4.4", + "@babel/helper-hoist-variables": "^7.7.4", "@babel/helper-plugin-utils": "^7.0.0", "babel-plugin-dynamic-import-node": "^2.3.0" } }, "@babel/plugin-transform-modules-umd": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.2.0.tgz", - "integrity": "sha512-BV3bw6MyUH1iIsGhXlOK6sXhmSarZjtJ/vMiD9dNmpY8QXFFQTj+6v92pcfy1iqa8DeAfJFwoxcrS/TUZda6sw==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.7.4.tgz", + "integrity": "sha512-u2B8TIi0qZI4j8q4C51ktfO7E3cQ0qnaXFI1/OXITordD40tt17g/sXqgNNCcMTcBFKrUPcGDx+TBJuZxLx7tw==", "dev": true, "requires": { - "@babel/helper-module-transforms": "^7.1.0", + "@babel/helper-module-transforms": "^7.7.4", "@babel/helper-plugin-utils": "^7.0.0" } }, "@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.6.0.tgz", - "integrity": "sha512-jem7uytlmrRl3iCAuQyw8BpB4c4LWvSpvIeXKpMb+7j84lkx4m4mYr5ErAcmN5KM7B6BqrAvRGjBIbbzqCczew==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.7.4.tgz", + "integrity": "sha512-jBUkiqLKvUWpv9GLSuHUFYdmHg0ujC1JEYoZUfeOOfNydZXp1sXObgyPatpcwjWgsdBGsagWW0cdJpX/DO2jMw==", "dev": true, "requires": { - "regexp-tree": "^0.1.13" + "@babel/helper-create-regexp-features-plugin": "^7.7.4" } }, "@babel/plugin-transform-new-target": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.4.4.tgz", - "integrity": "sha512-r1z3T2DNGQwwe2vPGZMBNjioT2scgWzK9BCnDEh+46z8EEwXBq24uRzd65I7pjtugzPSj921aM15RpESgzsSuA==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.7.4.tgz", + "integrity": "sha512-CnPRiNtOG1vRodnsyGX37bHQleHE14B9dnnlgSeEs3ek3fHN1A1SScglTCg1sfbe7sRQ2BUcpgpTpWSfMKz3gg==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.0.0" } }, "@babel/plugin-transform-object-super": { - "version": "7.5.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.5.5.tgz", - "integrity": "sha512-un1zJQAhSosGFBduPgN/YFNvWVpRuHKU7IHBglLoLZsGmruJPOo6pbInneflUdmq7YvSVqhpPs5zdBvLnteltQ==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.7.4.tgz", + "integrity": "sha512-ho+dAEhC2aRnff2JCA0SAK7V2R62zJd/7dmtoe7MHcso4C2mS+vZjn1Pb1pCVZvJs1mgsvv5+7sT+m3Bysb6eg==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-replace-supers": "^7.5.5" + "@babel/helper-replace-supers": "^7.7.4" } }, "@babel/plugin-transform-parameters": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.4.4.tgz", - "integrity": "sha512-oMh5DUO1V63nZcu/ZVLQFqiihBGo4OpxJxR1otF50GMeCLiRx5nUdtokd+u9SuVJrvvuIh9OosRFPP4pIPnwmw==", + "version": "7.7.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.7.7.tgz", + "integrity": "sha512-OhGSrf9ZBrr1fw84oFXj5hgi8Nmg+E2w5L7NhnG0lPvpDtqd7dbyilM2/vR8CKbJ907RyxPh2kj6sBCSSfI9Ew==", "dev": true, "requires": { - "@babel/helper-call-delegate": "^7.4.4", - "@babel/helper-get-function-arity": "^7.0.0", + "@babel/helper-call-delegate": "^7.7.4", + "@babel/helper-get-function-arity": "^7.7.4", "@babel/helper-plugin-utils": "^7.0.0" } }, "@babel/plugin-transform-property-literals": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.2.0.tgz", - "integrity": "sha512-9q7Dbk4RhgcLp8ebduOpCbtjh7C0itoLYHXd9ueASKAG/is5PQtMR5VJGka9NKqGhYEGn5ITahd4h9QeBMylWQ==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.7.4.tgz", + "integrity": "sha512-MatJhlC4iHsIskWYyawl53KuHrt+kALSADLQQ/HkhTjX954fkxIEh4q5slL4oRAnsm/eDoZ4q0CIZpcqBuxhJQ==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.0.0" } }, "@babel/plugin-transform-regenerator": { - "version": "7.4.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.4.5.tgz", - "integrity": "sha512-gBKRh5qAaCWntnd09S8QC7r3auLCqq5DI6O0DlfoyDjslSBVqBibrMdsqO+Uhmx3+BlOmE/Kw1HFxmGbv0N9dA==", + "version": "7.7.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.7.5.tgz", + "integrity": "sha512-/8I8tPvX2FkuEyWbjRCt4qTAgZK0DVy8QRguhA524UH48RfGJy94On2ri+dCuwOpcerPRl9O4ebQkRcVzIaGBw==", "dev": true, "requires": { "regenerator-transform": "^0.14.0" } }, "@babel/plugin-transform-reserved-words": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.2.0.tgz", - "integrity": "sha512-fz43fqW8E1tAB3DKF19/vxbpib1fuyCwSPE418ge5ZxILnBhWyhtPgz8eh1RCGGJlwvksHkyxMxh0eenFi+kFw==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.7.4.tgz", + "integrity": "sha512-OrPiUB5s5XvkCO1lS7D8ZtHcswIC57j62acAnJZKqGGnHP+TIc/ljQSrgdX/QyOTdEK5COAhuc820Hi1q2UgLQ==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.0.0" } }, "@babel/plugin-transform-shorthand-properties": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.2.0.tgz", - "integrity": "sha512-QP4eUM83ha9zmYtpbnyjTLAGKQritA5XW/iG9cjtuOI8s1RuL/3V6a3DeSHfKutJQ+ayUfeZJPcnCYEQzaPQqg==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.7.4.tgz", + "integrity": "sha512-q+suddWRfIcnyG5YiDP58sT65AJDZSUhXQDZE3r04AuqD6d/XLaQPPXSBzP2zGerkgBivqtQm9XKGLuHqBID6Q==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.0.0" } }, "@babel/plugin-transform-spread": { - "version": "7.2.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.2.2.tgz", - "integrity": "sha512-KWfky/58vubwtS0hLqEnrWJjsMGaOeSBn90Ezn5Jeg9Z8KKHmELbP1yGylMlm5N6TPKeY9A2+UaSYLdxahg01w==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.7.4.tgz", + "integrity": "sha512-8OSs0FLe5/80cndziPlg4R0K6HcWSM0zyNhHhLsmw/Nc5MaA49cAsnoJ/t/YZf8qkG7fD+UjTRaApVDB526d7Q==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.0.0" } }, "@babel/plugin-transform-sticky-regex": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.2.0.tgz", - "integrity": "sha512-KKYCoGaRAf+ckH8gEL3JHUaFVyNHKe3ASNsZ+AlktgHevvxGigoIttrEJb8iKN03Q7Eazlv1s6cx2B2cQ3Jabw==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.7.4.tgz", + "integrity": "sha512-Ls2NASyL6qtVe1H1hXts9yuEeONV2TJZmplLONkMPUG158CtmnrzW5Q5teibM5UVOFjG0D3IC5mzXR6pPpUY7A==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.0.0", @@ -729,195 +670,139 @@ } }, "@babel/plugin-transform-template-literals": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.4.4.tgz", - "integrity": "sha512-mQrEC4TWkhLN0z8ygIvEL9ZEToPhG5K7KDW3pzGqOfIGZ28Jb0POUkeWcoz8HnHvhFy6dwAT1j8OzqN8s804+g==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.7.4.tgz", + "integrity": "sha512-sA+KxLwF3QwGj5abMHkHgshp9+rRz+oY9uoRil4CyLtgEuE/88dpkeWgNk5qKVsJE9iSfly3nvHapdRiIS2wnQ==", "dev": true, "requires": { - "@babel/helper-annotate-as-pure": "^7.0.0", + "@babel/helper-annotate-as-pure": "^7.7.4", "@babel/helper-plugin-utils": "^7.0.0" } }, "@babel/plugin-transform-typeof-symbol": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.2.0.tgz", - "integrity": "sha512-2LNhETWYxiYysBtrBTqL8+La0jIoQQnIScUJc74OYvUGRmkskNY4EzLCnjHBzdmb38wqtTaixpo1NctEcvMDZw==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.7.4.tgz", + "integrity": "sha512-KQPUQ/7mqe2m0B8VecdyaW5XcQYaePyl9R7IsKd+irzj6jvbhoGnRE+M0aNkyAzI07VfUQ9266L5xMARitV3wg==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.0.0" } }, "@babel/plugin-transform-unicode-regex": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.4.4.tgz", - "integrity": "sha512-il+/XdNw01i93+M9J9u4T7/e/Ue/vWfNZE4IRUQjplu2Mqb/AFTDimkw2tdEdSH50wuQXZAbXSql0UphQke+vA==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.7.4.tgz", + "integrity": "sha512-N77UUIV+WCvE+5yHw+oks3m18/umd7y392Zv7mYTpFqHtkpcc+QUz+gLJNTWVlWROIWeLqY0f3OjZxV5TcXnRw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-regex": "^7.4.4", - "regexpu-core": "^4.5.4" + "@babel/helper-create-regexp-features-plugin": "^7.7.4", + "@babel/helper-plugin-utils": "^7.0.0" } }, "@babel/preset-env": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.6.0.tgz", - "integrity": "sha512-1efzxFv/TcPsNXlRhMzRnkBFMeIqBBgzwmZwlFDw5Ubj0AGLeufxugirwZmkkX/ayi3owsSqoQ4fw8LkfK9SYg==", + "version": "7.7.7", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.7.7.tgz", + "integrity": "sha512-pCu0hrSSDVI7kCVUOdcMNQEbOPJ52E+LrQ14sN8uL2ALfSqePZQlKrOy+tM4uhEdYlCHi4imr8Zz2cZe9oSdIg==", "dev": true, "requires": { - "@babel/helper-module-imports": "^7.0.0", + "@babel/helper-module-imports": "^7.7.4", "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-proposal-async-generator-functions": "^7.2.0", - "@babel/plugin-proposal-dynamic-import": "^7.5.0", - "@babel/plugin-proposal-json-strings": "^7.2.0", - "@babel/plugin-proposal-object-rest-spread": "^7.5.5", - "@babel/plugin-proposal-optional-catch-binding": "^7.2.0", - "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", - "@babel/plugin-syntax-async-generators": "^7.2.0", - "@babel/plugin-syntax-dynamic-import": "^7.2.0", - "@babel/plugin-syntax-json-strings": "^7.2.0", - "@babel/plugin-syntax-object-rest-spread": "^7.2.0", - "@babel/plugin-syntax-optional-catch-binding": "^7.2.0", - "@babel/plugin-transform-arrow-functions": "^7.2.0", - "@babel/plugin-transform-async-to-generator": "^7.5.0", - "@babel/plugin-transform-block-scoped-functions": "^7.2.0", - "@babel/plugin-transform-block-scoping": "^7.6.0", - "@babel/plugin-transform-classes": "^7.5.5", - "@babel/plugin-transform-computed-properties": "^7.2.0", - "@babel/plugin-transform-destructuring": "^7.6.0", - "@babel/plugin-transform-dotall-regex": "^7.4.4", - "@babel/plugin-transform-duplicate-keys": "^7.5.0", - "@babel/plugin-transform-exponentiation-operator": "^7.2.0", - "@babel/plugin-transform-for-of": "^7.4.4", - "@babel/plugin-transform-function-name": "^7.4.4", - "@babel/plugin-transform-literals": "^7.2.0", - "@babel/plugin-transform-member-expression-literals": "^7.2.0", - "@babel/plugin-transform-modules-amd": "^7.5.0", - "@babel/plugin-transform-modules-commonjs": "^7.6.0", - "@babel/plugin-transform-modules-systemjs": "^7.5.0", - "@babel/plugin-transform-modules-umd": "^7.2.0", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.6.0", - "@babel/plugin-transform-new-target": "^7.4.4", - "@babel/plugin-transform-object-super": "^7.5.5", - "@babel/plugin-transform-parameters": "^7.4.4", - "@babel/plugin-transform-property-literals": "^7.2.0", - "@babel/plugin-transform-regenerator": "^7.4.5", - "@babel/plugin-transform-reserved-words": "^7.2.0", - "@babel/plugin-transform-shorthand-properties": "^7.2.0", - "@babel/plugin-transform-spread": "^7.2.0", - "@babel/plugin-transform-sticky-regex": "^7.2.0", - "@babel/plugin-transform-template-literals": "^7.4.4", - "@babel/plugin-transform-typeof-symbol": "^7.2.0", - "@babel/plugin-transform-unicode-regex": "^7.4.4", - "@babel/types": "^7.6.0", + "@babel/plugin-proposal-async-generator-functions": "^7.7.4", + "@babel/plugin-proposal-dynamic-import": "^7.7.4", + "@babel/plugin-proposal-json-strings": "^7.7.4", + "@babel/plugin-proposal-object-rest-spread": "^7.7.7", + "@babel/plugin-proposal-optional-catch-binding": "^7.7.4", + "@babel/plugin-proposal-unicode-property-regex": "^7.7.7", + "@babel/plugin-syntax-async-generators": "^7.7.4", + "@babel/plugin-syntax-dynamic-import": "^7.7.4", + "@babel/plugin-syntax-json-strings": "^7.7.4", + "@babel/plugin-syntax-object-rest-spread": "^7.7.4", + "@babel/plugin-syntax-optional-catch-binding": "^7.7.4", + "@babel/plugin-syntax-top-level-await": "^7.7.4", + "@babel/plugin-transform-arrow-functions": "^7.7.4", + "@babel/plugin-transform-async-to-generator": "^7.7.4", + "@babel/plugin-transform-block-scoped-functions": "^7.7.4", + "@babel/plugin-transform-block-scoping": "^7.7.4", + "@babel/plugin-transform-classes": "^7.7.4", + "@babel/plugin-transform-computed-properties": "^7.7.4", + "@babel/plugin-transform-destructuring": "^7.7.4", + "@babel/plugin-transform-dotall-regex": "^7.7.7", + "@babel/plugin-transform-duplicate-keys": "^7.7.4", + "@babel/plugin-transform-exponentiation-operator": "^7.7.4", + "@babel/plugin-transform-for-of": "^7.7.4", + "@babel/plugin-transform-function-name": "^7.7.4", + "@babel/plugin-transform-literals": "^7.7.4", + "@babel/plugin-transform-member-expression-literals": "^7.7.4", + "@babel/plugin-transform-modules-amd": "^7.7.5", + "@babel/plugin-transform-modules-commonjs": "^7.7.5", + "@babel/plugin-transform-modules-systemjs": "^7.7.4", + "@babel/plugin-transform-modules-umd": "^7.7.4", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.7.4", + "@babel/plugin-transform-new-target": "^7.7.4", + "@babel/plugin-transform-object-super": "^7.7.4", + "@babel/plugin-transform-parameters": "^7.7.7", + "@babel/plugin-transform-property-literals": "^7.7.4", + "@babel/plugin-transform-regenerator": "^7.7.5", + "@babel/plugin-transform-reserved-words": "^7.7.4", + "@babel/plugin-transform-shorthand-properties": "^7.7.4", + "@babel/plugin-transform-spread": "^7.7.4", + "@babel/plugin-transform-sticky-regex": "^7.7.4", + "@babel/plugin-transform-template-literals": "^7.7.4", + "@babel/plugin-transform-typeof-symbol": "^7.7.4", + "@babel/plugin-transform-unicode-regex": "^7.7.4", + "@babel/types": "^7.7.4", "browserslist": "^4.6.0", - "core-js-compat": "^3.1.1", + "core-js-compat": "^3.6.0", "invariant": "^2.2.2", "js-levenshtein": "^1.1.3", "semver": "^5.5.0" - }, - "dependencies": { - "browserslist": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.7.0.tgz", - "integrity": "sha512-9rGNDtnj+HaahxiVV38Gn8n8Lr8REKsel68v1sPFfIGEK6uSXTY3h9acgiT1dZVtOOUtifo/Dn8daDQ5dUgVsA==", - "dev": true, - "requires": { - "caniuse-lite": "^1.0.30000989", - "electron-to-chromium": "^1.3.247", - "node-releases": "^1.1.29" - } - }, - "caniuse-lite": { - "version": "1.0.30000989", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000989.tgz", - "integrity": "sha512-vrMcvSuMz16YY6GSVZ0dWDTJP8jqk3iFQ/Aq5iqblPwxSVVZI+zxDyTX0VPqtQsDnfdrBDcsmhgTEOh5R8Lbpw==", - "dev": true - }, - "electron-to-chromium": { - "version": "1.3.256", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.256.tgz", - "integrity": "sha512-GHY1r2mO56BRMng6rkxxJvsWKtqy9k/IlSBrAV/VKwZKpTydVUJnOwajTNnl5uutJpthHgZy+HeofK5K6PqEgQ==", - "dev": true - }, - "node-releases": { - "version": "1.1.30", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.30.tgz", - "integrity": "sha512-BHcr1g6NeUH12IL+X3Flvs4IOnl1TL0JczUhEZjDE+FXXPQcVCNr8NEPb01zqGxzhTpdyJL5GXemaCW7aw6Khw==", - "dev": true, - "requires": { - "semver": "^5.3.0" - } - } + } + }, + "@babel/runtime": { + "version": "7.7.7", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.7.7.tgz", + "integrity": "sha512-uCnC2JEVAu8AKB5do1WRIsvrdJ0flYx/A/9f/6chdacnEZ7LmavjdsDXr5ksYBegxtuTPR5Va9/+13QF/kFkCA==", + "dev": true, + "requires": { + "regenerator-runtime": "^0.13.2" } }, "@babel/template": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.6.0.tgz", - "integrity": "sha512-5AEH2EXD8euCk446b7edmgFdub/qfH1SN6Nii3+fyXP807QRx9Q73A2N5hNwRRslC2H9sNzaFhsPubkS4L8oNQ==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.7.4.tgz", + "integrity": "sha512-qUzihgVPguAzXCK7WXw8pqs6cEwi54s3E+HrejlkuWO6ivMKx9hZl3Y2fSXp9i5HgyWmj7RKP+ulaYnKM4yYxw==", "dev": true, "requires": { "@babel/code-frame": "^7.0.0", - "@babel/parser": "^7.6.0", - "@babel/types": "^7.6.0" + "@babel/parser": "^7.7.4", + "@babel/types": "^7.7.4" } }, "@babel/traverse": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.6.0.tgz", - "integrity": "sha512-93t52SaOBgml/xY74lsmt7xOR4ufYvhb5c5qiM6lu4J/dWGMAfAh6eKw4PjLes6DI6nQgearoxnFJk60YchpvQ==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.7.4.tgz", + "integrity": "sha512-P1L58hQyupn8+ezVA2z5KBm4/Zr4lCC8dwKCMYzsa5jFMDMQAzaBNy9W5VjB+KAmBjb40U7a/H6ao+Xo+9saIw==", "dev": true, "requires": { "@babel/code-frame": "^7.5.5", - "@babel/generator": "^7.6.0", - "@babel/helper-function-name": "^7.1.0", - "@babel/helper-split-export-declaration": "^7.4.4", - "@babel/parser": "^7.6.0", - "@babel/types": "^7.6.0", + "@babel/generator": "^7.7.4", + "@babel/helper-function-name": "^7.7.4", + "@babel/helper-split-export-declaration": "^7.7.4", + "@babel/parser": "^7.7.4", + "@babel/types": "^7.7.4", "debug": "^4.1.0", "globals": "^11.1.0", "lodash": "^4.17.13" - }, - "dependencies": { - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "lodash": { - "version": "4.17.15", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", - "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", - "dev": true - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } } }, "@babel/types": { - "version": "7.6.1", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.6.1.tgz", - "integrity": "sha512-X7gdiuaCmA0uRjCmRtYJNAVCc/q+5xSgsfKJHqMN4iNLILX39677fJE1O40arPMh0TTtS9ItH67yre6c7k6t0g==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.7.4.tgz", + "integrity": "sha512-cz5Ji23KCi4T+YIE/BolWosrJuSmoZeN1EFnRtBwF+KKLi8GG/Z2c2hOJJeCXPk4mwk4QFvTmwIodJowXgttRA==", "dev": true, "requires": { "esutils": "^2.0.2", "lodash": "^4.17.13", "to-fast-properties": "^2.0.0" - }, - "dependencies": { - "lodash": { - "version": "4.17.15", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", - "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", - "dev": true - } } }, "@gulp-sourcemaps/identity-map": { @@ -938,6 +823,21 @@ "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.3.tgz", "integrity": "sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw==", "dev": true + }, + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, + "requires": { + "remove-trailing-separator": "^1.0.1" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true } } }, @@ -949,6 +849,17 @@ "requires": { "normalize-path": "^2.0.1", "through2": "^2.0.3" + }, + "dependencies": { + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, + "requires": { + "remove-trailing-separator": "^1.0.1" + } + } } }, "@mrmlnc/readdir-enhanced": { @@ -962,39 +873,49 @@ } }, "@nodelib/fs.scandir": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.1.tgz", - "integrity": "sha512-NT/skIZjgotDSiXs0WqYhgcuBKhUMgfekCmCGtkUAiLqZdOnrdjmZr9wRl3ll64J9NF79uZ4fk16Dx0yMc/Xbg==", + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.3.tgz", + "integrity": "sha512-eGmwYQn3gxo4r7jdQnkrrN6bY478C3P+a/y72IJukF8LjB6ZHeB3c+Ehacj3sYeSmUXGlnA67/PmbM9CVwL7Dw==", "dev": true, "requires": { - "@nodelib/fs.stat": "2.0.1", + "@nodelib/fs.stat": "2.0.3", "run-parallel": "^1.1.9" - }, - "dependencies": { - "@nodelib/fs.stat": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.1.tgz", - "integrity": "sha512-+RqhBlLn6YRBGOIoVYthsG0J9dfpO79eJyN7BYBkZJtfqrBwf2KK+rD/M/yjZR6WBmIhAgOV7S60eCgaSWtbFw==", - "dev": true - } } }, "@nodelib/fs.stat": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz", - "integrity": "sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.3.tgz", + "integrity": "sha512-bQBFruR2TAwoevBEd/NWMoAAtNGzTRgdrqnYCc7dhzfoNvqPzLyqlEQnzZ3kVnNrSp25iyxE00/3h2fqGAGArA==", "dev": true }, "@nodelib/fs.walk": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.2.tgz", - "integrity": "sha512-J/DR3+W12uCzAJkw7niXDcqcKBg6+5G5Q/ZpThpGNzAUz70eOR6RV4XnnSN01qHZiVl0eavoxJsBypQoKsV2QQ==", + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.4.tgz", + "integrity": "sha512-1V9XOY4rDW0rehzbrcqAmHnz8e7SKvX27gh8Gt2WgB0+pdzdiLV83p72kZPU+jvMbS1qU5mauP2iOvO8rhmurQ==", "dev": true, "requires": { - "@nodelib/fs.scandir": "2.1.1", + "@nodelib/fs.scandir": "2.1.3", "fastq": "^1.6.0" } }, + "@npmcli/ci-detect": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/ci-detect/-/ci-detect-1.0.0.tgz", + "integrity": "sha512-5Kp/ijewcOJonsiq+ydxDT6gxVPIvV0tNaxD9WAm2xya5EGhuyV8Ww+JswEXr5q677x5NVgU6eU/b2WlUiktrg==", + "dev": true + }, + "@npmcli/installed-package-contents": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-1.0.5.tgz", + "integrity": "sha512-aKIwguaaqb6ViwSOFytniGvLPb9SMCUm39TgM3SfUo7n0TxUMbwoXfpwyvQ4blm10lzbAwTsvjr7QZ85LvTi4A==", + "dev": true, + "requires": { + "npm-bundled": "^1.1.1", + "npm-normalize-package-bin": "^1.0.1", + "read-package-json-fast": "^1.1.1", + "readdir-scoped-modules": "^1.1.0" + } + }, "@sindresorhus/is": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.7.0.tgz", @@ -1011,6 +932,12 @@ "defer-to-connect": "^1.0.1" } }, + "@types/color-name": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.1.tgz", + "integrity": "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==", + "dev": true + }, "@types/events": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/@types/events/-/events-3.0.0.tgz", @@ -1035,9 +962,15 @@ "dev": true }, "@types/node": { - "version": "12.6.8", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.6.8.tgz", - "integrity": "sha512-aX+gFgA5GHcDi89KG5keey2zf0WfZk/HAQotEamsK2kbey+8yGKcson0hbK8E+v0NArlCJQCqMP161YhV6ZXLg==", + "version": "13.1.4", + "resolved": "https://registry.npmjs.org/@types/node/-/node-13.1.4.tgz", + "integrity": "sha512-Lue/mlp2egZJoHXZr4LndxDAd7i/7SQYhV0EjWfb/a4/OZ6tuVwMCVPiwkU5nsEipxEf7hmkSU7Em5VQ8P5NGA==", + "dev": true + }, + "@types/parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", "dev": true }, "@types/q": { @@ -1064,23 +997,12 @@ } }, "@types/vfile-message": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@types/vfile-message/-/vfile-message-1.0.1.tgz", - "integrity": "sha512-mlGER3Aqmq7bqR1tTTIVHq8KSAFFRyGbrxuM8C/H82g6k7r2fS+IMEkIu3D7JHzG10NvPdR8DNx0jr0pwpp4dA==", - "dev": true, - "requires": { - "@types/node": "*", - "@types/unist": "*" - } - }, - "JSONStream": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", - "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@types/vfile-message/-/vfile-message-2.0.0.tgz", + "integrity": "sha512-GpTIuDpb9u4zIO165fUy9+fXcULdD8HFRNli04GehoMVbeNq7D6OBnqSmg3lxZnC+UvgUhEWKxdKiwYUkGltIw==", "dev": true, "requires": { - "jsonparse": "^1.2.0", - "through": ">=2.2.7 <3" + "vfile-message": "*" } }, "abbrev": { @@ -1097,35 +1019,18 @@ "requires": { "mime-types": "~2.1.24", "negotiator": "0.6.2" - }, - "dependencies": { - "mime-db": { - "version": "1.40.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.40.0.tgz", - "integrity": "sha512-jYdeOMPy9vnxEqFRRo6ZvTZ8d9oPb+k18PKoYNYUe2stVEBPPwsln/qWzdbmaIvnhZ9v2P+CuecK+fpUfsV2mA==", - "dev": true - }, - "mime-types": { - "version": "2.1.24", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.24.tgz", - "integrity": "sha512-WaFHS3MCl5fapm3oLxU4eYDw77IQM2ACcxQ9RIxfaC3ooc6PFuBMGZZsYpvoXS5D5QTWPieo1jjLdAm3TBP3cQ==", - "dev": true, - "requires": { - "mime-db": "1.40.0" - } - } } }, "acorn": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.2.1.tgz", - "integrity": "sha512-JD0xT5FCRDNyjDda3Lrg/IxFscp9q4tiYtxE1/nOzlKCk7hIRuYjhq1kCNkbPjMRMZuFq20HNQn1I9k8Oj0E+Q==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.1.0.tgz", + "integrity": "sha512-kL5CuoXA/dgxlBbVrflsflzQ3PAas7RYZB52NOm/6839iVYJgKMJ3cQJD+t2i5+qFa8h3MDpEOJiS64E8JLnSQ==", "dev": true }, "acorn-jsx": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.0.1.tgz", - "integrity": "sha512-HJ7CfNHrfJLlNTzIEUTj43LNWGkqpRLxm3YjAlcD0ACydk9XynzYsCBHxut+iqt+1aBXkx9UP/w/ZqMr13XIzg==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.1.0.tgz", + "integrity": "sha512-tMUqwBWfLFbJbizRmEcWSLw6HnFzfdJs2sOJEOwwtVPMoH/0Ay+E703oZz78VSXZiiDcZrQ5XKjPIUQixhmgVw==", "dev": true }, "after": { @@ -1135,21 +1040,38 @@ "dev": true }, "agent-base": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.3.0.tgz", - "integrity": "sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-5.1.1.tgz", + "integrity": "sha512-TMeqbNl2fMW0nMjTEPOwe3J/PRFP4vqeoNuQMG0HlMrtm5QxKqdvAkZ1pRBQ/ulIyDD5Yq0nJ7YbdD8ey0TO3g==", + "dev": true + }, + "agentkeepalive": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.1.0.tgz", + "integrity": "sha512-CW/n1wxF8RpEuuiq6Vbn9S8m0VSYDMnZESqaJ6F2cWN9fY8rei2qaxweIaRgq+ek8TqfoFIsUjaGNKGGEHElSg==", "dev": true, "requires": { - "es6-promisify": "^5.0.0" + "debug": "^4.1.0", + "depd": "^1.1.2", + "humanize-ms": "^1.2.1" } }, - "agentkeepalive": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-3.5.2.tgz", - "integrity": "sha512-e0L/HNe6qkQ7H19kTlRRqUibEAwDK5AFk6y3PtMsuut2VAH6+Q4xZml1tNDJD7kSAyqmbG/K08K5WEJYtUrSlQ==", + "aggregate-error": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.0.1.tgz", + "integrity": "sha512-quoaXsZ9/BLNae5yiNoUz+Nhkwz83GhWwtYFglcjEQB2NDHCIpApbqXxIFnm4Pq/Nvhrsq5sYJFyohrrxnTGAA==", "dev": true, "requires": { - "humanize-ms": "^1.2.1" + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + }, + "dependencies": { + "indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "dev": true + } } }, "ajv": { @@ -1191,6 +1113,12 @@ "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", "dev": true }, + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, "is-fullwidth-code-point": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", @@ -1238,10 +1166,13 @@ } }, "ansi-escapes": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", - "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", - "dev": true + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.0.tgz", + "integrity": "sha512-EiYhwo0v255HUL6eDyuLrXEkTi7WwVCLAw+SeOQ7M7qdun1z1pum4DEm/nuqIVbPvi9RPPc9k9LbyBv6H0DwVg==", + "dev": true, + "requires": { + "type-fest": "^0.8.1" + } }, "ansi-gray": { "version": "0.1.1", @@ -1292,278 +1223,13 @@ "normalize-path": "^2.1.1" }, "dependencies": { - "arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", - "dev": true - }, - "array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", - "dev": true - }, - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", "dev": true, "requires": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - } - }, - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true - } - } - }, - "extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", - "dev": true, - "requires": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - }, - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "dev": true - }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" + "remove-trailing-separator": "^1.0.1" } } } @@ -1743,13 +1409,10 @@ } }, "array-union": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", - "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", - "dev": true, - "requires": { - "array-uniq": "^1.0.1" - } + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true }, "array-uniq": { "version": "1.0.3", @@ -1775,12 +1438,21 @@ "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", "dev": true }, - "asn1": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz", - "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=", + "asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=", "dev": true }, + "asn1": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", + "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", + "dev": true, + "requires": { + "safer-buffer": "~2.1.0" + } + }, "assert-plus": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", @@ -1806,23 +1478,15 @@ "dev": true }, "async-done": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/async-done/-/async-done-1.3.1.tgz", - "integrity": "sha512-R1BaUeJ4PMoLNJuk+0tLJgjmEqVsdN118+Z8O+alhnQDQgy0kmD5Mqi0DNEmMx2LM0Ed5yekKu+ZXYvIHceicg==", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/async-done/-/async-done-1.3.2.tgz", + "integrity": "sha512-uYkTP8dw2og1tu1nmza1n1CMW0qb8gWWlwqMmLb7MhBVs4BXrFziT6HXUd+/RlRA/i4H9AkofYloUbs1fwMqlw==", "dev": true, "requires": { "end-of-stream": "^1.1.0", "once": "^1.3.2", - "process-nextick-args": "^1.0.7", + "process-nextick-args": "^2.0.0", "stream-exhaust": "^1.0.1" - }, - "dependencies": { - "process-nextick-args": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", - "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=", - "dev": true - } } }, "async-each": { @@ -1844,9 +1508,9 @@ "dev": true }, "async-limiter": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz", - "integrity": "sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", + "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==", "dev": true }, "async-settle": { @@ -1865,91 +1529,24 @@ "dev": true }, "atob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.1.tgz", - "integrity": "sha1-ri1acpR38onWDdf5amMUoi3Wwio=", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", "dev": true }, "autoprefixer": { - "version": "9.6.1", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.6.1.tgz", - "integrity": "sha512-aVo5WxR3VyvyJxcJC3h4FKfwCQvQWb1tSI5VHNibddCVWrcD1NvlxEweg3TSgiPztMnWfjpy2FURKA2kvDE+Tw==", + "version": "9.7.3", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.7.3.tgz", + "integrity": "sha512-8T5Y1C5Iyj6PgkPSFd0ODvK9DIleuPKUPYniNxybS47g2k2wFgLZ46lGQHlBuGKIAEV8fbCDfKCCRS1tvOgc3Q==", "dev": true, "requires": { - "browserslist": "^4.6.3", - "caniuse-lite": "^1.0.30000980", + "browserslist": "^4.8.0", + "caniuse-lite": "^1.0.30001012", "chalk": "^2.4.2", "normalize-range": "^0.1.2", "num2fraction": "^1.2.2", - "postcss": "^7.0.17", - "postcss-value-parser": "^4.0.0" - }, - "dependencies": { - "browserslist": { - "version": "4.6.6", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.6.6.tgz", - "integrity": "sha512-D2Nk3W9JL9Fp/gIcWei8LrERCS+eXu9AM5cfXA8WEZ84lFks+ARnZ0q/R69m2SV3Wjma83QDDPxsNKXUwdIsyA==", - "dev": true, - "requires": { - "caniuse-lite": "^1.0.30000984", - "electron-to-chromium": "^1.3.191", - "node-releases": "^1.1.25" - } - }, - "caniuse-lite": { - "version": "1.0.30000985", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000985.tgz", - "integrity": "sha512-1ngiwkgqAYPG0JSSUp3PUDGPKKY59EK7NrGGX+VOxaKCNzRbNc7uXMny+c3VJfZxtoK3wSImTvG9T9sXiTw2+w==", - "dev": true - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "node-releases": { - "version": "1.1.25", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.25.tgz", - "integrity": "sha512-fI5BXuk83lKEoZDdH3gRhtsNgh05/wZacuXkgbiYkceE7+QIMXOg98n9ZV7mz27B+kFHnqHcUpscZZlGRSmTpQ==", - "dev": true, - "requires": { - "semver": "^5.3.0" - } - }, - "postcss": { - "version": "7.0.17", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.17.tgz", - "integrity": "sha512-546ZowA+KZ3OasvQZHsbuEpysvwTZNGJv9EfyCQdsIDltPSWHAeTQ5fQy/Npi2ZDtLI3zs7Ps/p6wThErhm9fQ==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - }, - "dependencies": { - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "postcss-value-parser": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.0.0.tgz", - "integrity": "sha512-ESPktioptiSUchCKgggAkzdmkgzKfmp0EU8jXH+5kbIUB+unr0Y4CY9SRMvibuvYUBjNh1ACLbxqYNpdTQOteQ==", - "dev": true - } + "postcss": "^7.0.23", + "postcss-value-parser": "^4.0.2" } }, "aws-sign2": { @@ -1958,6 +1555,12 @@ "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", "dev": true }, + "aws4": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.9.0.tgz", + "integrity": "sha512-Uvq6hVe90D0B2WEnUqtdgY1bATGz3mw33nH9Y+dmA+w5DHvUmBgkr5rM/KCHpCsiFNRUfokW/szpPPgMK2hm4A==", + "dev": true + }, "axios": { "version": "0.19.0", "resolved": "https://registry.npmjs.org/axios/-/axios-0.19.0.tgz", @@ -1969,9 +1572,9 @@ }, "dependencies": { "is-buffer": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.3.tgz", - "integrity": "sha512-U15Q7MXTuZlrbymiz95PJpZxu8IlipAp4dtS3wOdgPXx3mqBnslrWU14kxfHB+Py/+2PVKSr37dMAgM2A4uArw==", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.4.tgz", + "integrity": "sha512-Kq1rokWXOPXWuaMAqZiJW4XxsmD9zGx9q4aePabbn3qCRGedtH7Cm+zV8WETitMfu1wdh+Rvd6w5egwSngUX2A==", "dev": true } } @@ -2072,18 +1675,6 @@ "is-data-descriptor": "^1.0.0", "kind-of": "^6.0.2" } - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - }, - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "dev": true } } }, @@ -2117,7 +1708,6 @@ "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", "dev": true, - "optional": true, "requires": { "tweetnacl": "^0.14.3" } @@ -2192,6 +1782,17 @@ "requires": { "pump": "^3.0.0" } + }, + "pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dev": true, + "optional": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } } } }, @@ -2205,15 +1806,6 @@ "bin-version": "^3.0.0", "semver": "^5.6.0", "semver-truncate": "^1.1.2" - }, - "dependencies": { - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true, - "optional": true - } } }, "bin-wrapper": { @@ -2349,6 +1941,13 @@ "p-finally": "^1.0.0" } }, + "pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true, + "optional": true + }, "prepend-http": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", @@ -2374,6 +1973,16 @@ "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", "dev": true }, + "bindings": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", + "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "dev": true, + "optional": true, + "requires": { + "file-uri-to-path": "1.0.0" + } + }, "bl": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.2.tgz", @@ -2400,12 +2009,6 @@ "inherits": "~2.0.0" } }, - "bluebird": { - "version": "3.5.5", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.5.tgz", - "integrity": "sha512-5am6HnnfN+urzt4yfg7IgTbotDjIT/u8AJpEt0sIU9FtXfVeezXAPKswrG+xKUCOYAINpSdgZVDU6QFh+cuH3w==", - "dev": true - }, "boolbase": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", @@ -2440,16 +2043,11 @@ "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", "dev": true }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true }, "is-fullwidth-code-point": { "version": "2.0.0", @@ -2476,6 +2074,12 @@ "requires": { "ansi-regex": "^4.1.0" } + }, + "type-fest": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.3.1.tgz", + "integrity": "sha512-cUGJnCdr4STbePCgqNFbpVNCepa+kAVohJs1sLhxzdH+gnEoOd8VhbYa7pD3zZYGiURWM2xzEII3fQcRizDkYQ==", + "dev": true } } }, @@ -2583,28 +2187,14 @@ } }, "browserslist": { - "version": "4.5.6", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.5.6.tgz", - "integrity": "sha512-o/hPOtbU9oX507lIqon+UvPYqpx3mHc8cV3QemSBTXwkG8gSQSK6UKvXcE/DcleU3+A59XTUHyCvZ5qGy8xVAg==", + "version": "4.8.3", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.8.3.tgz", + "integrity": "sha512-iU43cMMknxG1ClEZ2MDKeonKE1CCrFVkQK2AqO2YWFmvIrx4JWrvQ4w4hQez6EpVI8rHTtqh/ruHHDHSOKxvUg==", "dev": true, "requires": { - "caniuse-lite": "^1.0.30000963", - "electron-to-chromium": "^1.3.127", - "node-releases": "^1.1.17" - }, - "dependencies": { - "caniuse-lite": { - "version": "1.0.30000967", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000967.tgz", - "integrity": "sha512-rUBIbap+VJfxTzrM4akJ00lkvVb5/n5v3EGXfWzSH5zT8aJmGzjA8HWhJ4U6kCpzxozUSnB+yvAYDRPY6mRpgQ==", - "dev": true - }, - "electron-to-chromium": { - "version": "1.3.133", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.133.tgz", - "integrity": "sha512-lyoC8aoqbbDqsprb6aPdt9n3DpOZZzdz/T4IZKsR0/dkZIxnJVUjjcpOSwA66jPRIOyDAamCTAUqweU05kKNSg==", - "dev": true - } + "caniuse-lite": "^1.0.30001017", + "electron-to-chromium": "^1.3.322", + "node-releases": "^1.1.44" } }, "bs-recipes": { @@ -2620,9 +2210,9 @@ "dev": true }, "buffer": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.4.0.tgz", - "integrity": "sha512-Xpgy0IwHK2N01ncykXTy6FpCWuM+CJSHoPVBLyNqyrWxsedpLvwsYUhf0ME3WRFNUhos0dMamz9cOS/xRDtU5g==", + "version": "5.4.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.4.3.tgz", + "integrity": "sha512-zvj65TkFeIt3i6aj5bIvJDzjjQQGs4o/sNoezg1F1kYap9Nu2jcUdpwzRSJTHMMzG0H7bZkn4rNQpImhuxWX2A==", "dev": true, "optional": true, "requires": { @@ -2674,12 +2264,6 @@ "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", "dev": true }, - "builtin-modules": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", - "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", - "dev": true - }, "builtins": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/builtins/-/builtins-1.0.3.tgz", @@ -2693,34 +2277,31 @@ "dev": true }, "cacache": { - "version": "12.0.3", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.3.tgz", - "integrity": "sha512-kqdmfXEGFepesTuROHMs3MpFLWrPkSSpRqOw80RCflZXy/khxaArvFrQ7uJxSUduzAufc6G0g1VUCOZXxWavPw==", + "version": "13.0.1", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-13.0.1.tgz", + "integrity": "sha512-5ZvAxd05HDDU+y9BVvcqYu2LLXmPnQ0hW62h32g4xBTgL/MppR4/04NHfj/ycM2y6lmTnbw6HVi+1eN0Psba6w==", "dev": true, "requires": { - "bluebird": "^3.5.5", - "chownr": "^1.1.1", + "chownr": "^1.1.2", "figgy-pudding": "^3.5.1", + "fs-minipass": "^2.0.0", "glob": "^7.1.4", - "graceful-fs": "^4.1.15", - "infer-owner": "^1.0.3", + "graceful-fs": "^4.2.2", + "infer-owner": "^1.0.4", "lru-cache": "^5.1.1", - "mississippi": "^3.0.0", + "minipass": "^3.0.0", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.2", "mkdirp": "^0.5.1", "move-concurrently": "^1.0.1", + "p-map": "^3.0.0", "promise-inflight": "^1.0.1", - "rimraf": "^2.6.3", - "ssri": "^6.0.1", - "unique-filename": "^1.1.1", - "y18n": "^4.0.0" + "rimraf": "^2.7.1", + "ssri": "^7.0.0", + "unique-filename": "^1.1.1" }, "dependencies": { - "graceful-fs": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.2.tgz", - "integrity": "sha512-IItsdsea19BoLC7ELy13q1iJFNmd7ofZH5+X/pJr90/nRoPEX0DJo1dHDbgtYWOhJhcCgMDTOw84RZ72q6lB+Q==", - "dev": true - }, "lru-cache": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", @@ -2739,16 +2320,10 @@ "glob": "^7.1.3" } }, - "y18n": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", - "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==", - "dev": true - }, "yallist": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz", - "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", "dev": true } } @@ -2768,14 +2343,6 @@ "to-object-path": "^0.3.0", "union-value": "^1.0.0", "unset-value": "^1.0.0" - }, - "dependencies": { - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - } } }, "cacheable-request": { @@ -2845,14 +2412,6 @@ "dev": true, "requires": { "callsites": "^2.0.0" - }, - "dependencies": { - "callsites": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz", - "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=", - "dev": true - } } }, "caller-path": { @@ -2871,9 +2430,9 @@ "dev": true }, "callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz", + "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=", "dev": true }, "camelcase": { @@ -2913,9 +2472,9 @@ } }, "caniuse-lite": { - "version": "1.0.30000878", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000878.tgz", - "integrity": "sha512-/dCGTdLCnjVJno1mFRn7Y6eit3AYaeFzSrMQHCoK0LEQaWl5snuLex1Ky4b8/Qu2ig5NgTX4cJx65hH9546puA==", + "version": "1.0.30001018", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001018.tgz", + "integrity": "sha512-GTHI7xdD2EX/U9UgNCEdekriT81N6ZwipsTGKAI1hrv3VEC96BvS5RVoc9Odlf9ftS92oxgflAGbYLi8UjIiVA==", "dev": true }, "caseless": { @@ -2944,9 +2503,9 @@ "dev": true }, "chalk": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", - "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, "requires": { "ansi-styles": "^3.2.1", @@ -2985,9 +2544,9 @@ "dev": true }, "chokidar": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.5.tgz", - "integrity": "sha512-i0TprVWp+Kj4WRPtInjexJ8Q+BqTE909VpH8xVhXrJkoc5QC8VO9TryGOqTr+2hljzc1sC62t22h5tZePodM/A==", + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", + "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", "dev": true, "requires": { "anymatch": "^2.0.0", @@ -3002,159 +2561,55 @@ "path-is-absolute": "^1.0.0", "readdirp": "^2.2.1", "upath": "^1.1.1" + } + }, + "chownr": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.3.tgz", + "integrity": "sha512-i70fVHhmV3DtTl6nqvZOnIjbY0Pe4kAUjwHj8z0zAdgBtYrJyYwLKCCuRBQ5ppkyL0AkN7HKRnETdmdp1zqNXw==", + "dev": true + }, + "ci-info": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", + "dev": true + }, + "cint": { + "version": "8.2.1", + "resolved": "https://registry.npmjs.org/cint/-/cint-8.2.1.tgz", + "integrity": "sha1-cDhrG0jidz0NYxZqVa/5TvRFahI=", + "dev": true + }, + "class-utils": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", + "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", + "dev": true, + "requires": { + "arr-union": "^3.1.0", + "define-property": "^0.2.5", + "isobject": "^3.0.0", + "static-extend": "^0.1.1" }, "dependencies": { - "array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", - "dev": true - }, - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" + "is-descriptor": "^0.1.0" } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - } - }, - "glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", - "dev": true, - "requires": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" - }, - "dependencies": { - "is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", - "dev": true, - "requires": { - "is-extglob": "^2.1.0" - } - } - } - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true - }, - "is-glob": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", - "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", - "dev": true, - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - } - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true } } }, - "chownr": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.2.tgz", - "integrity": "sha512-GkfeAQh+QNy3wquu9oIZr6SS5x7wGdSgNQvD10X3r+AZr1Oys22HW8kAmDMvNg2+Dm0TeGaEuO8gFwdBXxwO8A==", - "dev": true - }, - "ci-info": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", - "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", - "dev": true - }, - "cint": { - "version": "8.2.1", - "resolved": "https://registry.npmjs.org/cint/-/cint-8.2.1.tgz", - "integrity": "sha1-cDhrG0jidz0NYxZqVa/5TvRFahI=", + "clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", "dev": true }, - "class-utils": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", - "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", - "dev": true, - "requires": { - "arr-union": "^3.1.0", - "define-property": "^0.2.5", - "isobject": "^3.0.0", - "static-extend": "^0.1.1" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - } - } - }, "cli-boxes": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.0.tgz", @@ -3162,12 +2617,12 @@ "dev": true }, "cli-cursor": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", - "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", "dev": true, "requires": { - "restore-cursor": "^2.0.0" + "restore-cursor": "^3.1.0" } }, "cli-table": { @@ -3233,9 +2688,9 @@ "dev": true }, "cloneable-readable": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/cloneable-readable/-/cloneable-readable-1.1.2.tgz", - "integrity": "sha512-Bq6+4t+lbM8vhTs/Bef5c5AdEMtapp/iFb6+s4/Hh9MVTt8OLKH7ZOOZSCT+Ys7hsHvqv0GuMPJ1lnQJVHvxpg==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/cloneable-readable/-/cloneable-readable-1.1.3.tgz", + "integrity": "sha512-2EF8zTQOxYq70Y4XKtorQupqF0m49MBz2/yf5Bj+MHjvpG3Hy7sImifnqD6UA+TKYxeSV+u6qqQPawN5UvnpKQ==", "dev": true, "requires": { "inherits": "^2.0.1", @@ -3243,12 +2698,6 @@ "readable-stream": "^2.3.5" } }, - "co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", - "dev": true - }, "coa": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/coa/-/coa-2.0.2.tgz", @@ -3294,9 +2743,9 @@ } }, "color": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/color/-/color-3.1.1.tgz", - "integrity": "sha512-PvUltIXRjehRKPSy89VnDWFKY58xyhTLyxIg21vwQBI6qLwZNPmC8k3C1uytIgFKEpOIzN4y32iPm8231zFHIg==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/color/-/color-3.1.2.tgz", + "integrity": "sha512-vXTJhHebByxZn3lDvDJYw4lR5+uB3vuoHsuYA5AKuxRVn5wzzIfQKGLBmgdVRHKTJYeK5rvJcHnrd0Li49CFpg==", "dev": true, "requires": { "color-convert": "^1.9.1", @@ -3304,12 +2753,12 @@ } }, "color-convert": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.1.tgz", - "integrity": "sha512-mjGanIiwQJskCC18rPR6OmrZ6fm2Lc7PeGFYwCmy5J34wC6F1PzdGL6xeMfmgicfYcNLGuVFA3WzXtIDCQSZxQ==", + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "dev": true, "requires": { - "color-name": "^1.1.1" + "color-name": "1.1.3" } }, "color-name": { @@ -3341,18 +2790,18 @@ "dev": true }, "combined-stream": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.6.tgz", - "integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=", + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", "dev": true, "requires": { "delayed-stream": "~1.0.0" } }, "commander": { - "version": "2.20.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.0.tgz", - "integrity": "sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ==", + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", "dev": true }, "component-bind": { @@ -3398,6 +2847,14 @@ "dev": true, "requires": { "source-map": "^0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } } }, "config-chain": { @@ -3452,6 +2909,23 @@ "finalhandler": "1.1.0", "parseurl": "~1.3.2", "utils-merge": "1.0.1" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } } }, "connect-history-api-fallback": { @@ -3484,10 +2958,13 @@ } }, "convert-source-map": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.5.1.tgz", - "integrity": "sha1-uCeAl7m8IpNl3lxiz1/K7YtVmeU=", - "dev": true + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", + "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.1" + } }, "cookie": { "version": "0.3.1", @@ -3526,59 +3003,19 @@ } }, "core-js-compat": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.2.1.tgz", - "integrity": "sha512-MwPZle5CF9dEaMYdDeWm73ao/IflDH+FjeJCWEADcEgFSE9TLimFKwJsfmkwzI8eC0Aj0mgvMDjeQjrElkz4/A==", + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.6.1.tgz", + "integrity": "sha512-2Tl1EuxZo94QS2VeH28Ebf5g3xbPZG/hj/N5HDDy4XMP/ImR0JIer/nggQRiMN91Q54JVkGbytf42wO29oXVHg==", "dev": true, "requires": { - "browserslist": "^4.6.6", - "semver": "^6.3.0" + "browserslist": "^4.8.2", + "semver": "7.0.0" }, "dependencies": { - "browserslist": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.7.0.tgz", - "integrity": "sha512-9rGNDtnj+HaahxiVV38Gn8n8Lr8REKsel68v1sPFfIGEK6uSXTY3h9acgiT1dZVtOOUtifo/Dn8daDQ5dUgVsA==", - "dev": true, - "requires": { - "caniuse-lite": "^1.0.30000989", - "electron-to-chromium": "^1.3.247", - "node-releases": "^1.1.29" - } - }, - "caniuse-lite": { - "version": "1.0.30000989", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000989.tgz", - "integrity": "sha512-vrMcvSuMz16YY6GSVZ0dWDTJP8jqk3iFQ/Aq5iqblPwxSVVZI+zxDyTX0VPqtQsDnfdrBDcsmhgTEOh5R8Lbpw==", - "dev": true - }, - "electron-to-chromium": { - "version": "1.3.256", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.256.tgz", - "integrity": "sha512-GHY1r2mO56BRMng6rkxxJvsWKtqy9k/IlSBrAV/VKwZKpTydVUJnOwajTNnl5uutJpthHgZy+HeofK5K6PqEgQ==", - "dev": true - }, - "node-releases": { - "version": "1.1.30", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.30.tgz", - "integrity": "sha512-BHcr1g6NeUH12IL+X3Flvs4IOnl1TL0JczUhEZjDE+FXXPQcVCNr8NEPb01zqGxzhTpdyJL5GXemaCW7aw6Khw==", - "dev": true, - "requires": { - "semver": "^5.3.0" - }, - "dependencies": { - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - } - } - }, "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", + "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", "dev": true } } @@ -3590,27 +3027,17 @@ "dev": true }, "cosmiconfig": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-4.0.0.tgz", - "integrity": "sha512-6e5vDdrXZD+t5v0L8CrurPeybg4Fmf+FCSYxXKYVAqLUtyCSbuyqE059d0kDthTNRzKVjL7QMgNpEUlsoYH3iQ==", + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz", + "integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==", "dev": true, "requires": { + "import-fresh": "^2.0.0", "is-directory": "^0.3.1", - "js-yaml": "^3.9.0", - "parse-json": "^4.0.0", - "require-from-string": "^2.0.1" + "js-yaml": "^3.13.1", + "parse-json": "^4.0.0" }, "dependencies": { - "js-yaml": { - "version": "3.13.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", - "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", - "dev": true, - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - }, "parse-json": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", @@ -3652,6 +3079,14 @@ "source-map": "^0.6.1", "source-map-resolve": "^0.5.2", "urix": "^0.1.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } } }, "css-color-names": { @@ -3678,41 +3113,40 @@ "requires": { "minimist": "^1.2.0", "postcss": "^7.0.0" - }, - "dependencies": { - "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "dev": true - }, - "postcss": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.2.tgz", - "integrity": "sha512-fmaUY5370keLUTx+CnwRxtGiuFTcNBLQBqr1oE3WZ/euIYmGAo0OAgOhVJ3ByDnVmOR3PK+0V9VebzfjRIUcqw==", - "dev": true, - "requires": { - "chalk": "^2.4.1", - "source-map": "^0.6.1", - "supports-color": "^5.4.0" - } - } } }, + "css-select": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-2.1.0.tgz", + "integrity": "sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ==", + "dev": true, + "requires": { + "boolbase": "^1.0.0", + "css-what": "^3.2.1", + "domutils": "^1.7.0", + "nth-check": "^1.0.2" + } + }, + "css-select-base-adapter": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz", + "integrity": "sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w==", + "dev": true + }, "css-tree": { - "version": "1.0.0-alpha.28", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.28.tgz", - "integrity": "sha512-joNNW1gCp3qFFzj4St6zk+Wh/NBv0vM5YbEreZk0SD4S23S+1xBKb6cLDg2uj4P4k/GUMlIm6cKIDqIG+vdt0w==", + "version": "1.0.0-alpha.37", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.37.tgz", + "integrity": "sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg==", "dev": true, "requires": { - "mdn-data": "~1.1.0", - "source-map": "^0.5.3" + "mdn-data": "2.0.4", + "source-map": "^0.6.1" }, "dependencies": { "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true } } @@ -3723,10 +3157,10 @@ "integrity": "sha1-2bkoGtz9jO2TW9urqDeGiX9k6ZY=", "dev": true }, - "css-url-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/css-url-regex/-/css-url-regex-1.1.0.tgz", - "integrity": "sha1-g4NCMMyfdMRX3lnuvRVD/uuDt+w=", + "css-what": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-3.2.1.tgz", + "integrity": "sha512-WwOrosiQTvyms+Ti5ZC5vGEK0Vod3FTt1ca+payZqvKuGJF+dq7bG63DstxtN0dpm6FxY27a/zS3Wten+gEtGw==", "dev": true }, "cssesc": { @@ -3745,55 +3179,6 @@ "cssnano-preset-default": "^4.0.7", "is-resolvable": "^1.0.0", "postcss": "^7.0.0" - }, - "dependencies": { - "caller-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-2.0.0.tgz", - "integrity": "sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ=", - "dev": true, - "requires": { - "caller-callsite": "^2.0.0" - } - }, - "cosmiconfig": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz", - "integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==", - "dev": true, - "requires": { - "import-fresh": "^2.0.0", - "is-directory": "^0.3.1", - "js-yaml": "^3.13.1", - "parse-json": "^4.0.0" - } - }, - "import-fresh": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz", - "integrity": "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=", - "dev": true, - "requires": { - "caller-path": "^2.0.0", - "resolve-from": "^3.0.0" - } - }, - "parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", - "dev": true, - "requires": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" - } - }, - "resolve-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", - "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", - "dev": true - } } }, "cssnano-preset-default": { @@ -3862,30 +3247,12 @@ "dev": true }, "csso": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/csso/-/csso-3.5.1.tgz", - "integrity": "sha512-vrqULLffYU1Q2tLdJvaCYbONStnfkfimRxXNaGjxMldI0C7JPBC4rB1RyjhfdZ4m1frm8pM9uRPKH3d2knZ8gg==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/csso/-/csso-4.0.2.tgz", + "integrity": "sha512-kS7/oeNVXkHWxby5tHVxlhjizRCSv8QdU7hB2FpdAibDU8FjTAolhNjKNTiLzXtUrKT6HwClE81yXwEk1309wg==", "dev": true, "requires": { - "css-tree": "1.0.0-alpha.29" - }, - "dependencies": { - "css-tree": { - "version": "1.0.0-alpha.29", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.29.tgz", - "integrity": "sha512-sRNb1XydwkW9IOci6iB2xmy8IGCj6r/fr+JWitvJ2JxQRPzN3T4AGGVWCMlVmVwM1gtgALJRmGIlWv5ppnGGkg==", - "dev": true, - "requires": { - "mdn-data": "~1.1.0", - "source-map": "^0.5.3" - } - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - } + "css-tree": "1.0.0-alpha.37" } }, "currently-unhandled": { @@ -3897,19 +3264,14 @@ "array-find-index": "^1.0.1" } }, - "cyclist": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-1.0.1.tgz", - "integrity": "sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk=", - "dev": true - }, "d": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/d/-/d-1.0.0.tgz", - "integrity": "sha1-dUu1v+VUUdpppYuU1F9MWwRi1Y8=", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", + "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", "dev": true, "requires": { - "es5-ext": "^0.10.9" + "es5-ext": "^0.10.50", + "type": "^1.0.1" } }, "dashdash": { @@ -3922,12 +3284,12 @@ } }, "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", "dev": true, "requires": { - "ms": "2.0.0" + "ms": "^2.1.1" } }, "debug-fabulous": { @@ -3949,15 +3311,15 @@ "requires": { "ms": "^2.1.1" } - }, - "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", - "dev": true } } }, + "debuglog": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/debuglog/-/debuglog-1.0.1.tgz", + "integrity": "sha1-qiT/uaw9+aI1GDfPstJ5NgzXhJI=", + "dev": true + }, "decamelize": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", @@ -4015,13 +3377,6 @@ "optional": true } } - }, - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true, - "optional": true } } }, @@ -4129,13 +3484,6 @@ "object-assign": "^4.0.1", "pinkie-promise": "^2.0.0" } - }, - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true, - "optional": true } } }, @@ -4175,9 +3523,9 @@ "dev": true }, "defer-to-connect": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.0.2.tgz", - "integrity": "sha512-k09hcQcTDY+cwgiwa6PYKLm3jlagNzQ+RSvhjzESOGOx+MNOuXkxTfEvPrO1IOQ81tArCFYQgi631clB70RpQw==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.1.tgz", + "integrity": "sha512-J7thop4u3mRTkYRQ+Vpfwy2G5Ehoy82I14+14W4YMDLKdWloI9gSzRbV30s/NckQGVJtPkWNcW4oMAUigTdqiQ==", "dev": true }, "define-properties": { @@ -4187,14 +3535,6 @@ "dev": true, "requires": { "object-keys": "^1.0.12" - }, - "dependencies": { - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true - } } }, "define-property": { @@ -4235,18 +3575,6 @@ "is-data-descriptor": "^1.0.0", "kind-of": "^6.0.2" } - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - }, - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "dev": true } } }, @@ -4292,6 +3620,16 @@ "integrity": "sha1-p2o+0YVb56ASu4rBbLgPPADcKPA=", "dev": true }, + "dezalgo": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.3.tgz", + "integrity": "sha1-f3Qt4Gb8dIvI24IFad3c5Jvw1FY=", + "dev": true, + "requires": { + "asap": "^2.0.0", + "wrappy": "1" + } + }, "dir-glob": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", @@ -4319,13 +3657,21 @@ } }, "dom-serializer": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.1.tgz", - "integrity": "sha512-l0IU0pPzLWSHBcieZbpOKgkIn3ts3vAh7ZuFyXNwJxJXk/c4Gwj9xaTJwIDVQCXawWD0qb3IzMGH5rglQaO0XA==", + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz", + "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", "dev": true, "requires": { - "domelementtype": "^1.3.0", - "entities": "^1.1.1" + "domelementtype": "^2.0.1", + "entities": "^2.0.0" + }, + "dependencies": { + "domelementtype": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.0.1.tgz", + "integrity": "sha512-5HOHUDsYZWV8FGWN0Njbr/Rn7f/eWSQi1v7+HsUVwXgn8nWWlL64zKDkS0n8ZmQ3mlWOMuXOnR+7Nx/5tMO5AQ==", + "dev": true + } } }, "domelementtype": { @@ -4455,13 +3801,13 @@ } }, "ecc-jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz", - "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=", + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", "dev": true, - "optional": true, "requires": { - "jsbn": "~0.1.0" + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" } }, "ee-first": { @@ -4471,15 +3817,15 @@ "dev": true }, "electron-to-chromium": { - "version": "1.3.199", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.199.tgz", - "integrity": "sha512-gachlDdHSK47s0N2e58GH9HMC6Z4ip0SfmYUa5iEbE50AKaOUXysaJnXMfKj0xB245jWbYcyFSH+th3rqsF8hA==", + "version": "1.3.323", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.323.tgz", + "integrity": "sha512-c7pOUGnqNv6otzwcedViWOTGMEUG70PkhrTzVtc20Txh9nDC4s8zWvocJl7q+OpoC0ACXtxud8PX2y8zk/RZiw==", "dev": true }, "emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "dev": true }, "encodeurl": { @@ -4493,14 +3839,15 @@ "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.12.tgz", "integrity": "sha1-U4tm8+5izRq1HsMjgp0flIDHS+s=", "dev": true, + "optional": true, "requires": { "iconv-lite": "~0.4.13" } }, "end-of-stream": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", - "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", "dev": true, "requires": { "once": "^1.4.0" @@ -4529,6 +3876,25 @@ "ms": "2.0.0" } }, + "engine.io-parser": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-2.1.3.tgz", + "integrity": "sha512-6HXPre2O4Houl7c4g7Ic/XzPnHBvaEmN90vtRO9uLmwtRqQmTOw0QMevL1TOfL2Cpu1VzsaTmMotQgMdkzGkVA==", + "dev": true, + "requires": { + "after": "0.8.2", + "arraybuffer.slice": "~0.0.7", + "base64-arraybuffer": "0.1.5", + "blob": "0.0.5", + "has-binary2": "~1.0.2" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, "ws": { "version": "3.3.3", "resolved": "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz", @@ -4543,15 +3909,15 @@ } }, "engine.io-client": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.3.2.tgz", - "integrity": "sha512-y0CPINnhMvPuwtqXfsGuWE8BB66+B6wTtCofQDRecMQPYX3MYUZXFNKDhdrSe3EVjgOu4V3rxdeqN/Tr91IgbQ==", + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.4.0.tgz", + "integrity": "sha512-a4J5QO2k99CM2a0b12IznnyQndoEvtA4UAldhGzKqnHf42I3Qs2W5SPnDvatZRcMaNZs4IevVicBPayxYt6FwA==", "dev": true, "requires": { "component-emitter": "1.2.1", "component-inherit": "0.0.3", - "debug": "~3.1.0", - "engine.io-parser": "~2.1.1", + "debug": "~4.1.0", + "engine.io-parser": "~2.2.0", "has-cors": "1.1.0", "indexof": "0.0.1", "parseqs": "0.0.5", @@ -4559,23 +3925,12 @@ "ws": "~6.1.0", "xmlhttprequest-ssl": "~1.5.4", "yeast": "0.1.2" - }, - "dependencies": { - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - } } }, "engine.io-parser": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-2.1.3.tgz", - "integrity": "sha512-6HXPre2O4Houl7c4g7Ic/XzPnHBvaEmN90vtRO9uLmwtRqQmTOw0QMevL1TOfL2Cpu1VzsaTmMotQgMdkzGkVA==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-2.2.0.tgz", + "integrity": "sha512-6I3qD9iUxotsC5HEMuuGsKA0cXerGz+4uGcXQEkfBidgKf0amsjrrtwcbwK/nzpZBxclXlV7gGl9dgWvu4LF6w==", "dev": true, "requires": { "after": "0.8.2", @@ -4586,9 +3941,9 @@ } }, "entities": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", - "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.0.0.tgz", + "integrity": "sha512-D9f7V0JSRwIxlRI2mjMqufDrRDnx8p+eEOz7aUM9SuvF8gsBzra0/6tbjl1m8eQHrZlYj6PxqE00hZ1SAIKPLw==", "dev": true }, "err-code": { @@ -4598,40 +3953,37 @@ "dev": true }, "error-ex": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.1.tgz", - "integrity": "sha1-+FWobOYa3E6GIcPNoh56dhLDqNw=", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", "dev": true, "requires": { "is-arrayish": "^0.2.1" } }, "es-abstract": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.13.0.tgz", - "integrity": "sha512-vDZfg/ykNxQVwup/8E1BZhVzFfBxs9NqMzGcvIJrqg5k2/5Za2bWo40dK2J1pgLngZ7c+Shh8lwYtLGyrwPutg==", + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.0.tgz", + "integrity": "sha512-yYkE07YF+6SIBmg1MsJ9dlub5L48Ek7X0qz+c/CPCHS9EBXfESorzng4cJQjJW5/pB6vDF41u7F8vUhLVDqIug==", "dev": true, "requires": { - "es-to-primitive": "^1.2.0", + "es-to-primitive": "^1.2.1", "function-bind": "^1.1.1", "has": "^1.0.3", - "is-callable": "^1.1.4", - "is-regex": "^1.0.4", - "object-keys": "^1.0.12" - }, - "dependencies": { - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true - } + "has-symbols": "^1.0.1", + "is-callable": "^1.1.5", + "is-regex": "^1.0.5", + "object-inspect": "^1.7.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.0", + "string.prototype.trimleft": "^2.1.1", + "string.prototype.trimright": "^2.1.1" } }, "es-to-primitive": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.0.tgz", - "integrity": "sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", "dev": true, "requires": { "is-callable": "^1.1.4", @@ -4640,14 +3992,14 @@ } }, "es5-ext": { - "version": "0.10.42", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.42.tgz", - "integrity": "sha512-AJxO1rmPe1bDEfSR6TJ/FgMFYuTBhR5R57KW58iCkYACMyFbrkqVyzXSurYoScDGvgyMpk7uRF/lPUPPTmsRSA==", + "version": "0.10.53", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.53.tgz", + "integrity": "sha512-Xs2Stw6NiNHWypzRTY1MtaG/uJlwCk8kH81920ma8mvN8Xq1gsfhZvpkImLQArw8AHnv8MT2I45J3c0R8slE+Q==", "dev": true, "requires": { "es6-iterator": "~2.0.3", - "es6-symbol": "~3.1.1", - "next-tick": "1" + "es6-symbol": "~3.1.3", + "next-tick": "~1.0.0" } }, "es6-iterator": { @@ -4677,24 +4029,24 @@ } }, "es6-symbol": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz", - "integrity": "sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=", + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", + "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", "dev": true, "requires": { - "d": "1", - "es5-ext": "~0.10.14" + "d": "^1.0.1", + "ext": "^1.1.2" } }, "es6-weak-map": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.2.tgz", - "integrity": "sha1-XjqzIlH/0VOKH45f+hNXdy+S2W8=", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.3.tgz", + "integrity": "sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA==", "dev": true, "requires": { "d": "1", - "es5-ext": "^0.10.14", - "es6-iterator": "^2.0.1", + "es5-ext": "^0.10.46", + "es6-iterator": "^2.0.3", "es6-symbol": "^3.1.1" } }, @@ -4711,9 +4063,9 @@ "dev": true }, "eslint": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-6.1.0.tgz", - "integrity": "sha512-QhrbdRD7ofuV09IuE2ySWBz0FyXCq0rriLTZXZqaWSI79CVtHVRdkFuFTViiqzZhkCgfOh9USpriuGN2gIpZDQ==", + "version": "6.8.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-6.8.0.tgz", + "integrity": "sha512-K+Iayyo2LtyYhDSYwz5D5QdWw0hCacNzyq1Y821Xna2xSJj7cijoLLYmLxTQgcgZ9mC61nryMy9S7GRbYpI5Ig==", "dev": true, "requires": { "@babel/code-frame": "^7.0.0", @@ -4723,19 +4075,19 @@ "debug": "^4.0.1", "doctrine": "^3.0.0", "eslint-scope": "^5.0.0", - "eslint-utils": "^1.3.1", - "eslint-visitor-keys": "^1.0.0", - "espree": "^6.0.0", + "eslint-utils": "^1.4.3", + "eslint-visitor-keys": "^1.1.0", + "espree": "^6.1.2", "esquery": "^1.0.1", "esutils": "^2.0.2", "file-entry-cache": "^5.0.1", "functional-red-black-tree": "^1.0.1", "glob-parent": "^5.0.0", - "globals": "^11.7.0", + "globals": "^12.1.0", "ignore": "^4.0.6", "import-fresh": "^3.0.0", "imurmurhash": "^0.1.4", - "inquirer": "^6.4.1", + "inquirer": "^7.0.0", "is-glob": "^4.0.0", "js-yaml": "^3.13.1", "json-stable-stringify-without-jsonify": "^1.0.1", @@ -4744,7 +4096,7 @@ "minimatch": "^3.0.4", "mkdirp": "^0.5.1", "natural-compare": "^1.4.0", - "optionator": "^0.8.2", + "optionator": "^0.8.3", "progress": "^2.0.0", "regexpp": "^2.0.1", "semver": "^6.1.2", @@ -4761,40 +4113,44 @@ "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", "dev": true }, - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "glob-parent": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.0.tgz", + "integrity": "sha512-qjtRgnIVmOfnKUE3NJAQEdk+lKrxfw8t5ke7SXtfMTHcjsBfOfWXCQfdb30zfDoZQ2IRSIiidmjtbHZPZ++Ihw==", "dev": true, "requires": { - "ms": "^2.1.1" + "is-glob": "^4.0.1" } }, - "glob-parent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.0.0.tgz", - "integrity": "sha512-Z2RwiujPRGluePM6j699ktJYxmPpJKCfpGA13jz2hmFZC7gKetzrWvg5KN3+OsIFmydGyZ1AVwERCq1w/ZZwRg==", + "globals": { + "version": "12.3.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-12.3.0.tgz", + "integrity": "sha512-wAfjdLgFsPZsklLJvOBUBmzYE8/CwhEqSBEMRXA3qxIiNtyqvjYurAtIfDh6chlEPUfmTY3MnZh5Hfh4q0UlIw==", "dev": true, "requires": { - "is-glob": "^4.0.1" + "type-fest": "^0.8.1" } }, - "lodash": { - "version": "4.17.15", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", - "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", - "dev": true + "import-fresh": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.1.tgz", + "integrity": "sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ==", + "dev": true, + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + } }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", "dev": true }, "semver": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.2.0.tgz", - "integrity": "sha512-jdFC1VdUGT/2Scgbimf7FSx9iJLXoqfglSF+gJeuNWVpiE37OIbc1jywR/GJyFdz3mnkz2/id0L0J/cr0izR5A==", + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true }, "strip-ansi": { @@ -4825,29 +4181,29 @@ } }, "eslint-utils": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.4.2.tgz", - "integrity": "sha512-eAZS2sEUMlIeCjBeubdj45dmBHQwPHWyBcT1VSYB7o9x9WRRqKxyUoiXlRjyAwzN7YEzHJlYg0NmzDRWx6GP4Q==", + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.4.3.tgz", + "integrity": "sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q==", "dev": true, "requires": { - "eslint-visitor-keys": "^1.0.0" + "eslint-visitor-keys": "^1.1.0" } }, "eslint-visitor-keys": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz", - "integrity": "sha512-qzm/XxIbxm/FHyH341ZrbnMUpe+5Bocte9xkmFMzPMjRaZMcXww+MpBptFvtU+79L362nqiLhekCxCxDPaUMBQ==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.1.0.tgz", + "integrity": "sha512-8y9YjtM1JBJU/A9Kc+SbaOV4y29sSWckBwMHa+FGtVj5gN/sbnKDf6xJUl+8g7FAij9LVaP8C24DUiH/f/2Z9A==", "dev": true }, "espree": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-6.0.0.tgz", - "integrity": "sha512-lJvCS6YbCn3ImT3yKkPe0+tJ+mH6ljhGNjHQH9mRtiO6gjhVAOhVXW1yjnwqGwTkK3bGbye+hb00nFNmu0l/1Q==", + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/espree/-/espree-6.1.2.tgz", + "integrity": "sha512-2iUPuuPP+yW1PZaMSDM9eyVf8D5P0Hi8h83YtZ5bPc/zHYjII5khoixIUTMO794NOY8F/ThF1Bo8ncZILarUTA==", "dev": true, "requires": { - "acorn": "^6.0.7", - "acorn-jsx": "^5.0.0", - "eslint-visitor-keys": "^1.0.0" + "acorn": "^7.1.0", + "acorn-jsx": "^5.1.0", + "eslint-visitor-keys": "^1.1.0" } }, "esprima": { @@ -4875,15 +4231,15 @@ } }, "estraverse": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", - "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", "dev": true }, "esutils": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", - "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", "dev": true }, "etag": { @@ -4976,15 +4332,6 @@ "optional": true, "requires": { "pify": "^2.2.0" - }, - "dependencies": { - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true, - "optional": true - } } }, "expand-brackets": { @@ -5002,6 +4349,15 @@ "to-regex": "^3.0.1" }, "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, "define-property": { "version": "0.2.5", "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", @@ -5019,6 +4375,12 @@ "requires": { "is-extendable": "^0.1.0" } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true } } }, @@ -5031,6 +4393,23 @@ "homedir-polyfill": "^1.0.1" } }, + "ext": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/ext/-/ext-1.4.0.tgz", + "integrity": "sha512-Key5NIsUxdqKg3vIsdw9dSuXpPCQ297y6wBjL30edxwPgt2E44WcWBZey/ZvUc6sERLTxKdyCu4gZFmUbk1Q7A==", + "dev": true, + "requires": { + "type": "^2.0.0" + }, + "dependencies": { + "type": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/type/-/type-2.0.0.tgz", + "integrity": "sha512-KBt58xCHry4Cejnc2ISQAF7QY+ORngsWfxezO68+12hKV6lQY8P/psIkcbjeHWn7MqcgciWJyCCevFMJdIXpow==", + "dev": true + } + } + }, "ext-list": { "version": "2.2.2", "resolved": "https://registry.npmjs.org/ext-list/-/ext-list-2.2.2.tgz", @@ -5152,12 +4531,6 @@ "is-data-descriptor": "^1.0.0", "kind-of": "^6.0.2" } - }, - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "dev": true } } }, @@ -5168,13 +4541,14 @@ "dev": true }, "fancy-log": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/fancy-log/-/fancy-log-1.3.2.tgz", - "integrity": "sha1-9BEl49hPLn2JpD0G2VjI94vha+E=", + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/fancy-log/-/fancy-log-1.3.3.tgz", + "integrity": "sha512-k9oEhlyc0FrVh25qYuSELjr8oxsCoc4/LEZfg2iJJrfEk/tZL9bCoJE47gqAvI2m/AUjluCS4+3I0eTx8n3AEw==", "dev": true, "requires": { "ansi-gray": "^0.1.1", "color-support": "^1.1.3", + "parse-node-version": "^1.0.0", "time-stamp": "^1.0.0" } }, @@ -5191,23 +4565,76 @@ "dev": true }, "fast-glob": { - "version": "2.2.7", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-2.2.7.tgz", - "integrity": "sha512-g1KuQwHOZAmOZMuBtHdxDtju+T2RT8jgCC9aANsbpdiDDTSnjgfuVsIBNKbUeJI3oKMRExcfNDtJl4OhbffMsw==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.1.1.tgz", + "integrity": "sha512-nTCREpBY8w8r+boyFYAx21iL6faSsQynliPHM4Uf56SbkyohCNxpVPEH9xrF5TXKy+IsjkPUHDKiUkzBVRXn9g==", "dev": true, "requires": { - "@mrmlnc/readdir-enhanced": "^2.2.1", - "@nodelib/fs.stat": "^1.1.2", - "glob-parent": "^3.1.0", - "is-glob": "^4.0.0", - "merge2": "^1.2.3", - "micromatch": "^3.1.10" + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.0", + "merge2": "^1.3.0", + "micromatch": "^4.0.2" + }, + "dependencies": { + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "glob-parent": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.0.tgz", + "integrity": "sha512-qjtRgnIVmOfnKUE3NJAQEdk+lKrxfw8t5ke7SXtfMTHcjsBfOfWXCQfdb30zfDoZQ2IRSIiidmjtbHZPZ++Ihw==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "micromatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", + "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==", + "dev": true, + "requires": { + "braces": "^3.0.1", + "picomatch": "^2.0.5" + } + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + } } }, "fast-json-stable-stringify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", - "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", "dev": true }, "fast-levenshtein": { @@ -5242,9 +4669,9 @@ "dev": true }, "figures": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", - "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.1.0.tgz", + "integrity": "sha512-ravh8VRXqHuMvZt/d8GblBeqDMkdJMBdv/2KntFH+ra5MXkO7nxNKpzQ3n6QD/2da1kH0aWmNISdvhM7gl2gVg==", "dev": true, "requires": { "escape-string-regexp": "^1.0.5" @@ -5260,11 +4687,18 @@ } }, "file-type": { - "version": "12.2.0", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-12.2.0.tgz", - "integrity": "sha512-bkDBeH5doAqP69axEO69OviLlWbrZ10Ne2OPHaxBgG+fyT0w/2zfMzJz21SPwq5Iq0aN70q7RN3KRcdUY427Mg==", + "version": "12.4.2", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-12.4.2.tgz", + "integrity": "sha512-UssQP5ZgIOKelfsaB5CuGAL+Y+q7EmONuiwF3N5HAH0t27rvrttgi6Ra9k/+DVaY9UF6+ybxu5pOXLUdA8N7Vg==", "dev": true }, + "file-uri-to-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", + "dev": true, + "optional": true + }, "filename-reserved-regex": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/filename-reserved-regex/-/filename-reserved-regex-2.0.0.tgz", @@ -5320,36 +4754,43 @@ "parseurl": "~1.3.2", "statuses": "~1.3.1", "unpipe": "~1.0.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } } }, "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", + "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", "dev": true, "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" + "path-exists": "^2.0.0", + "pinkie-promise": "^2.0.0" } }, "find-versions": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/find-versions/-/find-versions-3.1.0.tgz", - "integrity": "sha512-NCTfNiVzeE/xL+roNDffGuRbrWI6atI18lTJ22vKp7rs2OhYzMK3W1dIdO2TUndH/QMcacM4d1uWwgcZcHK69Q==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/find-versions/-/find-versions-3.2.0.tgz", + "integrity": "sha512-P8WRou2S+oe222TOCHitLy8zj+SIsVJh52VP4lvXkaFVnOFFdoWv1H1Jjvel1aI6NCFOAaeAVm8qrI0odiLcww==", "dev": true, "optional": true, "requires": { - "array-uniq": "^2.1.0", "semver-regex": "^2.0.0" - }, - "dependencies": { - "array-uniq": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-2.1.0.tgz", - "integrity": "sha512-bdHxtev7FN6+MXI1YFW0Q8mQ8dTJc2S8AMfju+ZR77pbg2yAdVyDlwkaUI7Har0LyOMRFPHrJ9lYdyjZZswdlQ==", - "dev": true, - "optional": true - } } }, "findup-sync": { @@ -5392,17 +4833,6 @@ "flatted": "^2.0.0", "rimraf": "2.6.3", "write": "1.0.3" - }, - "dependencies": { - "rimraf": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", - "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - } } }, "flatted": { @@ -5438,6 +4868,12 @@ "requires": { "ms": "2.0.0" } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true } } }, @@ -5463,13 +4899,13 @@ "dev": true }, "form-data": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.2.tgz", - "integrity": "sha1-SXBJi+YEwgwAXU9cI67NIda0kJk=", + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", "dev": true, "requires": { "asynckit": "^0.4.0", - "combined-stream": "1.0.6", + "combined-stream": "^1.0.6", "mime-types": "^2.1.12" } }, @@ -5493,6 +4929,7 @@ "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=", "dev": true, + "optional": true, "requires": { "inherits": "^2.0.1", "readable-stream": "^2.0.0" @@ -5523,12 +4960,12 @@ } }, "fs-minipass": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.7.tgz", - "integrity": "sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.0.0.tgz", + "integrity": "sha512-40Qz+LFXmd9tzYVnnBmZvFfvAADfUA14TXPK1s7IfElJTIZ97rA8w4Kin7Wt5JBrC3ShnnFJO/5vPjPEeJIq9A==", "dev": true, "requires": { - "minipass": "^2.6.0" + "minipass": "^3.0.0" } }, "fs-mkdirp-stream": { @@ -5560,14 +4997,15 @@ "dev": true }, "fsevents": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.9.tgz", - "integrity": "sha512-oeyj2H3EjjonWcFjD5NvZNE9Rqe4UW+nQBU2HNeKw0koVLEFIhtyETyAakeAM3de7Z/SW5kcA+fZUait9EApnw==", + "version": "1.2.11", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.11.tgz", + "integrity": "sha512-+ux3lx6peh0BpvY0JebGyZoiR4D+oYzdPZMKJwkZ+sFkNJzpL7tXc/wehS49gUAxg3tmMHPHZkA8JU2rhhgDHw==", "dev": true, "optional": true, "requires": { + "bindings": "^1.5.0", "nan": "^2.12.1", - "node-pre-gyp": "^0.12.0" + "node-pre-gyp": "*" }, "dependencies": { "abbrev": { @@ -5615,7 +5053,7 @@ } }, "chownr": { - "version": "1.1.1", + "version": "1.1.3", "bundled": true, "dev": true, "optional": true @@ -5645,7 +5083,7 @@ "optional": true }, "debug": { - "version": "4.1.1", + "version": "3.2.6", "bundled": true, "dev": true, "optional": true, @@ -5672,12 +5110,12 @@ "optional": true }, "fs-minipass": { - "version": "1.2.5", + "version": "1.2.7", "bundled": true, "dev": true, "optional": true, "requires": { - "minipass": "^2.2.1" + "minipass": "^2.6.0" } }, "fs.realpath": { @@ -5703,7 +5141,7 @@ } }, "glob": { - "version": "7.1.3", + "version": "7.1.6", "bundled": true, "dev": true, "optional": true, @@ -5732,7 +5170,7 @@ } }, "ignore-walk": { - "version": "3.0.1", + "version": "3.0.3", "bundled": true, "dev": true, "optional": true, @@ -5751,7 +5189,7 @@ } }, "inherits": { - "version": "2.0.3", + "version": "2.0.4", "bundled": true, "dev": true, "optional": true @@ -5793,7 +5231,7 @@ "optional": true }, "minipass": { - "version": "2.3.5", + "version": "2.9.0", "bundled": true, "dev": true, "optional": true, @@ -5803,12 +5241,12 @@ } }, "minizlib": { - "version": "1.2.1", + "version": "1.3.3", "bundled": true, "dev": true, "optional": true, "requires": { - "minipass": "^2.2.1" + "minipass": "^2.9.0" } }, "mkdirp": { @@ -5821,24 +5259,24 @@ } }, "ms": { - "version": "2.1.1", + "version": "2.1.2", "bundled": true, "dev": true, "optional": true }, "needle": { - "version": "2.3.0", + "version": "2.4.0", "bundled": true, "dev": true, "optional": true, "requires": { - "debug": "^4.1.0", + "debug": "^3.2.6", "iconv-lite": "^0.4.4", "sax": "^1.2.4" } }, "node-pre-gyp": { - "version": "0.12.0", + "version": "0.14.0", "bundled": true, "dev": true, "optional": true, @@ -5852,7 +5290,7 @@ "rc": "^1.2.7", "rimraf": "^2.6.1", "semver": "^5.3.0", - "tar": "^4" + "tar": "^4.4.2" } }, "nopt": { @@ -5866,13 +5304,22 @@ } }, "npm-bundled": { - "version": "1.0.6", + "version": "1.1.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "npm-normalize-package-bin": "^1.0.1" + } + }, + "npm-normalize-package-bin": { + "version": "1.0.1", "bundled": true, "dev": true, "optional": true }, "npm-packlist": { - "version": "1.4.1", + "version": "1.4.7", "bundled": true, "dev": true, "optional": true, @@ -5943,7 +5390,7 @@ "optional": true }, "process-nextick-args": { - "version": "2.0.0", + "version": "2.0.1", "bundled": true, "dev": true, "optional": true @@ -5984,7 +5431,7 @@ } }, "rimraf": { - "version": "2.6.3", + "version": "2.7.1", "bundled": true, "dev": true, "optional": true, @@ -6011,7 +5458,7 @@ "optional": true }, "semver": { - "version": "5.7.0", + "version": "5.7.1", "bundled": true, "dev": true, "optional": true @@ -6064,18 +5511,18 @@ "optional": true }, "tar": { - "version": "4.4.8", + "version": "4.4.13", "bundled": true, "dev": true, "optional": true, "requires": { "chownr": "^1.1.1", "fs-minipass": "^1.2.5", - "minipass": "^2.3.4", - "minizlib": "^1.1.1", + "minipass": "^2.8.6", + "minizlib": "^1.2.1", "mkdirp": "^0.5.0", "safe-buffer": "^5.1.2", - "yallist": "^3.0.2" + "yallist": "^3.0.3" } }, "util-deprecate": { @@ -6100,7 +5547,7 @@ "optional": true }, "yallist": { - "version": "3.0.3", + "version": "3.1.1", "bundled": true, "dev": true, "optional": true @@ -6147,11 +5594,14 @@ "wide-align": "^1.1.0" } }, - "genfun": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/genfun/-/genfun-5.0.0.tgz", - "integrity": "sha512-KGDOARWVga7+rnB3z9Sd2Letx515owfk0hSxHGuqjANb1M+x2bGZGqHLiozPsYMdM2OubeMni/Hpwmjq6qIUhA==", - "dev": true + "gaze": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/gaze/-/gaze-1.1.3.tgz", + "integrity": "sha512-BRdNm8hbWzFzWHERTrejLqwHDfS4GibPoq5wjTPIoJHoBtKGPg3xAFfxmM+9ztbXelxcf2hwQcaz1PtmFeue8g==", + "dev": true, + "requires": { + "globule": "^1.0.0" + } }, "get-caller-file": { "version": "1.0.3", @@ -6234,13 +5684,24 @@ "requires": { "pump": "^3.0.0" } + }, + "pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dev": true, + "optional": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } } } }, "glob": { - "version": "7.1.4", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", - "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", "dev": true, "requires": { "fs.realpath": "^1.0.0", @@ -6365,89 +5826,11 @@ "slash": "^3.0.0" }, "dependencies": { - "@nodelib/fs.stat": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.1.tgz", - "integrity": "sha512-+RqhBlLn6YRBGOIoVYthsG0J9dfpO79eJyN7BYBkZJtfqrBwf2KK+rD/M/yjZR6WBmIhAgOV7S60eCgaSWtbFw==", - "dev": true - }, - "array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true - }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "requires": { - "fill-range": "^7.0.1" - } - }, - "fast-glob": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.0.4.tgz", - "integrity": "sha512-wkIbV6qg37xTJwqSsdnIphL1e+LaGz4AIQqr00mIubMaEhv1/HEmJ0uuCGZRNRUkZZmOB5mJKO0ZUTVq+SxMQg==", - "dev": true, - "requires": { - "@nodelib/fs.stat": "^2.0.1", - "@nodelib/fs.walk": "^1.2.1", - "glob-parent": "^5.0.0", - "is-glob": "^4.0.1", - "merge2": "^1.2.3", - "micromatch": "^4.0.2" - } - }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "glob-parent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.0.0.tgz", - "integrity": "sha512-Z2RwiujPRGluePM6j699ktJYxmPpJKCfpGA13jz2hmFZC7gKetzrWvg5KN3+OsIFmydGyZ1AVwERCq1w/ZZwRg==", - "dev": true, - "requires": { - "is-glob": "^4.0.1" - } - }, "ignore": { "version": "5.1.4", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.4.tgz", "integrity": "sha512-MzbUSahkTW1u7JpKKjY7LCARd1fU5W2rLdxlM4kdkayuCwZImjkpluF9CM1aLewYJguPDqewLam18Y6AU69A8A==", "dev": true - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true - }, - "micromatch": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", - "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==", - "dev": true, - "requires": { - "braces": "^3.0.1", - "picomatch": "^2.0.5" - } - }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "requires": { - "is-number": "^7.0.0" - } } } }, @@ -6457,10 +5840,21 @@ "integrity": "sha1-L0SUrIkZ43Z8XLtpHp9GMyQoXUM=", "dev": true }, + "globule": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/globule/-/globule-1.3.0.tgz", + "integrity": "sha512-YlD4kdMqRCQHrhVdonet4TdRtv1/sZKepvoxNT4Nrhrp5HI8XFfc8kFlGlBn2myBo80aGp8Eft259mbcUJhgSg==", + "dev": true, + "requires": { + "glob": "~7.1.1", + "lodash": "~4.17.10", + "minimatch": "~3.0.2" + } + }, "glogg": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/glogg/-/glogg-1.0.1.tgz", - "integrity": "sha512-ynYqXLoluBKf9XGR1gA59yEJisIL7YHEH4xr3ZziHB5/yl4qWfaK8Js9jGe6gBGCSCKVqiyO30WnRZADvemUNw==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/glogg/-/glogg-1.0.2.tgz", + "integrity": "sha512-5mwUoSuBk44Y4EshyiqcH95ZntbDdTQqA3QYSrxmzj28Ai0vXBGMH1ApSANH14j2sIRtqCEyg6PfsuP7ElOEDA==", "dev": true, "requires": { "sparkles": "^1.0.0" @@ -6507,9 +5901,9 @@ } }, "graceful-fs": { - "version": "4.1.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", - "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.3.tgz", + "integrity": "sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ==", "dev": true }, "graceful-readlink": { @@ -6599,14 +5993,6 @@ "replace-ext": "^1.0.0", "through2": "^2.0.0", "vinyl-sourcemaps-apply": "^0.2.0" - }, - "dependencies": { - "replace-ext": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.0.tgz", - "integrity": "sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs=", - "dev": true - } } }, "gulp-concat": { @@ -6618,40 +6004,6 @@ "concat-with-sourcemaps": "^1.0.0", "through2": "^2.0.0", "vinyl": "^2.0.0" - }, - "dependencies": { - "clone": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.1.tgz", - "integrity": "sha1-0hfR6WERjjrJpLi7oyhVU79kfNs=", - "dev": true - }, - "clone-stats": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz", - "integrity": "sha1-s3gt/4u1R04Yuba/D9/ngvh3doA=", - "dev": true - }, - "replace-ext": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.0.tgz", - "integrity": "sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs=", - "dev": true - }, - "vinyl": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.1.0.tgz", - "integrity": "sha1-Ah+cLPlR1rk5lDyJ617lrdT9kkw=", - "dev": true, - "requires": { - "clone": "^2.1.1", - "clone-buffer": "^1.0.0", - "clone-stats": "^1.0.0", - "cloneable-readable": "^1.0.0", - "remove-trailing-separator": "^1.0.1", - "replace-ext": "^1.0.0" - } - } } }, "gulp-eslint": { @@ -6666,9 +6018,9 @@ } }, "gulp-imagemin": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/gulp-imagemin/-/gulp-imagemin-6.1.0.tgz", - "integrity": "sha512-0TPkak5BsiRfw+kfcKwIcODbOHHcTyvBM9arlRSwXdUVzrGAcq/7urZoOQD5n4uWvKhjg+l9/yn1GDZsDuWUow==", + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/gulp-imagemin/-/gulp-imagemin-6.2.0.tgz", + "integrity": "sha512-luHT+8kUz60KGzjJLUFzaPjl4b38UQLj8BJGkpJACRjiVEuzjohMOmLagkgXs+Rs4vYaUBr9tt1F/vLizaxgGg==", "dev": true, "requires": { "chalk": "^2.4.1", @@ -6726,7 +6078,7 @@ }, "chalk": { "version": "1.1.3", - "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "dev": true, "requires": { @@ -6748,7 +6100,7 @@ }, "kind-of": { "version": "1.1.0", - "resolved": "http://registry.npmjs.org/kind-of/-/kind-of-1.1.0.tgz", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-1.1.0.tgz", "integrity": "sha1-FAo9LUGjbS78+pN3tiwk+ElaXEQ=", "dev": true }, @@ -6787,9 +6139,9 @@ } }, "gulp-rename": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/gulp-rename/-/gulp-rename-1.4.0.tgz", - "integrity": "sha512-swzbIGb/arEoFK89tPY58vg3Ok1bw+d35PfUNwWqdo7KM4jkmuGA78JiDNqR+JeZFaeeHnRg9N7aihX3YPmsyg==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/gulp-rename/-/gulp-rename-2.0.0.tgz", + "integrity": "sha512-97Vba4KBzbYmR5VBs9mWmK+HwIf5mj+/zioxfZhOKeXtx5ZjBk57KFlePf5nxq9QsTtFl0ejnHE3zTC9MHXqyQ==", "dev": true }, "gulp-sass": { @@ -6814,12 +6166,6 @@ "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", "dev": true }, - "replace-ext": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.0.tgz", - "integrity": "sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs=", - "dev": true - }, "strip-ansi": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", @@ -6843,12 +6189,6 @@ "through2": "^3.0.1" }, "dependencies": { - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true - }, "through2": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/through2/-/through2-3.0.1.tgz", @@ -6893,53 +6233,77 @@ "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.3.tgz", "integrity": "sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw==", "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true } } }, "gulp-stylelint": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/gulp-stylelint/-/gulp-stylelint-9.0.0.tgz", - "integrity": "sha512-JoYzy68jc26Z53ZtCJq9teZ81u3QS5DUwoRKHkPbs6k0xpafOVYnRIoOCDGc59vRWTvMDahxyaTlNvolCzr+sA==", + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/gulp-stylelint/-/gulp-stylelint-11.0.0.tgz", + "integrity": "sha512-Hk2DungSqeWIye5hgmB36IMN9oIIsOBieAaQZw0HAVuIljDGcfH6ng0wmJf3G418jv6KCdgpTZb0EIN1L5KXEw==", "dev": true, "requires": { - "chalk": "^2.4.2", + "chalk": "^3.0.0", "fancy-log": "^1.3.3", "mkdirp": "^0.5.1", "plugin-error": "^1.0.1", "source-map": "^0.7.3", - "strip-ansi": "^5.2.0", + "strip-ansi": "^6.0.0", "through2": "^3.0.1" }, "dependencies": { "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", "dev": true }, + "ansi-styles": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", + "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", + "dev": true, + "requires": { + "@types/color-name": "^1.1.1", + "color-convert": "^2.0.1" + } + }, "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", "dev": true, "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" } }, - "fancy-log": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/fancy-log/-/fancy-log-1.3.3.tgz", - "integrity": "sha512-k9oEhlyc0FrVh25qYuSELjr8oxsCoc4/LEZfg2iJJrfEk/tZL9bCoJE47gqAvI2m/AUjluCS4+3I0eTx8n3AEw==", + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "requires": { - "ansi-gray": "^0.1.1", - "color-support": "^1.1.3", - "parse-node-version": "^1.0.0", - "time-stamp": "^1.0.0" + "color-name": "~1.1.4" } }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, "source-map": { "version": "0.7.3", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", @@ -6947,12 +6311,21 @@ "dev": true }, "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", "dev": true, "requires": { - "ansi-regex": "^4.1.0" + "ansi-regex": "^5.0.0" + } + }, + "supports-color": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", + "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" } }, "through2": { @@ -6982,20 +6355,12 @@ "through2": "^2.0.0", "uglify-js": "^3.0.5", "vinyl-sourcemaps-apply": "^0.2.0" - }, - "dependencies": { - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - } } }, "gulp-wp-pot": { - "version": "2.3.5", - "resolved": "https://registry.npmjs.org/gulp-wp-pot/-/gulp-wp-pot-2.3.5.tgz", - "integrity": "sha512-lRZZkuEBrYTPj3j9iOWK3YdtcRH857gxMMLKoboVjtY8G5l7iOxsyza50rsA8XvmPQ8hlSuMNA0zd17oT/ybqQ==", + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/gulp-wp-pot/-/gulp-wp-pot-2.3.6.tgz", + "integrity": "sha512-RaS7MiT8w9HdfmH8c6l7QKeeZeWDMDoyWUb//vFXGH05XY1t2w4iv22k0AIWyZ9w2ceX6W2ia3jC5hH+5wn2rA==", "dev": true, "requires": { "plugin-error": "^1.0.1", @@ -7004,24 +6369,6 @@ "wp-pot": "^1.7.1" }, "dependencies": { - "clone": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", - "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=", - "dev": true - }, - "clone-stats": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz", - "integrity": "sha1-s3gt/4u1R04Yuba/D9/ngvh3doA=", - "dev": true - }, - "replace-ext": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.0.tgz", - "integrity": "sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs=", - "dev": true - }, "through2": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/through2/-/through2-3.0.1.tgz", @@ -7030,20 +6377,6 @@ "requires": { "readable-stream": "2 || 3" } - }, - "vinyl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.2.0.tgz", - "integrity": "sha512-MBH+yP0kC/GQ5GwBqrTPTzEfiiLjta7hTtvQtbxBgTeSXsmKQRQecjibMbxIXzVT3Y9KJK+drOz1/k+vsu8Nkg==", - "dev": true, - "requires": { - "clone": "^2.1.1", - "clone-buffer": "^1.0.0", - "clone-stats": "^1.0.0", - "cloneable-readable": "^1.0.0", - "remove-trailing-separator": "^1.0.1", - "replace-ext": "^1.0.0" - } } } }, @@ -7062,6 +6395,16 @@ "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", "dev": true }, + "har-validator": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz", + "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==", + "dev": true, + "requires": { + "ajv": "^6.5.5", + "har-schema": "^2.0.0" + } + }, "has": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", @@ -7118,9 +6461,9 @@ "optional": true }, "has-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz", - "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", + "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", "dev": true }, "has-to-string-tag-x": { @@ -7148,14 +6491,6 @@ "get-value": "^2.0.6", "has-values": "^1.0.0", "isobject": "^3.0.0" - }, - "dependencies": { - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - } } }, "has-values": { @@ -7168,26 +6503,6 @@ "kind-of": "^4.0.0" }, "dependencies": { - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, "kind-of": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", @@ -7221,9 +6536,9 @@ } }, "hosted-git-info": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.6.0.tgz", - "integrity": "sha512-lIbgIIQA3lz5XaB6vxakj6sDHADJiZadYEJB+FgA+C4nubM1NwcuvUr9EJPmnH1skZqpqUzWborWo8EIUi0Sdw==", + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.5.tgz", + "integrity": "sha512-kssjab8CvdXfcXMXVcvsXum4Hwdq9XGtRD3TteMEvEbq0LXyiNQr6AprqKqfeaDXze7SxWvRxdpwE6ku7ikLkg==", "dev": true }, "hsl-regex": { @@ -7264,6 +6579,12 @@ "readable-stream": "^3.1.1" }, "dependencies": { + "entities": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", + "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==", + "dev": true + }, "readable-stream": { "version": "3.4.0", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.4.0.tgz", @@ -7281,7 +6602,8 @@ "version": "3.8.1", "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-3.8.1.tgz", "integrity": "sha512-5ai2iksyV8ZXmnZhHH4rWPoxxistEexSi5936zIQ1bnNTW5VnA85B6P/VpXiRM017IgRvb2kKo1a//y+0wSp3w==", - "dev": true + "dev": true, + "optional": true }, "http-errors": { "version": "1.7.3", @@ -7296,12 +6618,6 @@ "toidentifier": "1.0.0" }, "dependencies": { - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, "statuses": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", @@ -7321,24 +6637,13 @@ } }, "http-proxy-agent": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-2.1.0.tgz", - "integrity": "sha512-qwHbBLV7WviBl0rQsOzH6o5lwyOIvwp/BdFnvVxXORldu5TmjFfjzBcWUWS5kWAZhmv+JtiDhSuQCp4sBfbIgg==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-3.0.0.tgz", + "integrity": "sha512-uGuJaBWQWDQCJI5ip0d/VTYZW0nRrlLWXA4A7P1jrsa+f77rW2yXz315oBt6zGCF6l8C2tlMxY7ffULCj+5FhA==", "dev": true, "requires": { - "agent-base": "4", - "debug": "3.1.0" - }, - "dependencies": { - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - } + "agent-base": "5", + "debug": "4" } }, "http-signature": { @@ -7353,30 +6658,13 @@ } }, "https-proxy-agent": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-2.2.2.tgz", - "integrity": "sha512-c8Ndjc9Bkpfx/vCJueCPy0jlP4ccCCSNDp8xwCZzPjKJUm+B+u9WX2x98Qx4n1PiMNTWo3D7KK5ifNV/yJyRzg==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-4.0.0.tgz", + "integrity": "sha512-zoDhWrkR3of1l9QAL8/scJZyLu8j/gBkcwcaQOZh7Gyh/+uJQzGVETdgT30akuwkpL8HTRfssqI3BZuV18teDg==", "dev": true, "requires": { - "agent-base": "^4.3.0", - "debug": "^3.1.0" - }, - "dependencies": { - "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } + "agent-base": "5", + "debug": "4" } }, "humanize-ms": { @@ -7417,22 +6705,23 @@ "dev": true }, "ignore-walk": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.2.tgz", - "integrity": "sha512-EXyErtpHbn75ZTsOADsfx6J/FPo6/5cjev46PXrcTpd8z3BoRkXgYu9/JVqrI7tusjmwCZutGeRJeU0Wo1e4Cw==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.3.tgz", + "integrity": "sha512-m7o6xuOaT1aqheYHKf8W6J5pYH85ZI9w077erOzLje3JsB1gkafkAhHHY19dqjulgIZHFm32Cp5uNZgcQqdJKw==", "dev": true, "requires": { "minimatch": "^3.0.4" } }, "imagemin": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/imagemin/-/imagemin-7.0.0.tgz", - "integrity": "sha512-TXvCSSIYl4KQUASur9S0+E4olVECzvxvZABU9rNqsza7vzIrUQMRTjyczGf8OmtcgvZ9jOYyinXW3epOpd/04A==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/imagemin/-/imagemin-7.0.1.tgz", + "integrity": "sha512-33AmZ+xjZhg2JMCe+vDf6a9mzWukE7l+wAtesjE7KyteqqKjzxv7aVQeWnul1Ve26mWvEQqyPwl0OctNBfSR9w==", "dev": true, "requires": { "file-type": "^12.0.0", "globby": "^10.0.0", + "graceful-fs": "^4.2.2", "junk": "^3.1.0", "make-dir": "^3.0.0", "p-pipe": "^3.0.0", @@ -7464,9 +6753,9 @@ } }, "imagemin-optipng": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/imagemin-optipng/-/imagemin-optipng-7.0.0.tgz", - "integrity": "sha512-N40bmLgiyv5H8xFp/RYmWKdg6Z19MGqzcNW+IWXG7VPrLV75NbcOn8y6A7eZcSHOCNW+DqBx+b95yw+Tf6Sl/g==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/imagemin-optipng/-/imagemin-optipng-7.1.0.tgz", + "integrity": "sha512-JNORTZ6j6untH7e5gF4aWdhDCxe3ODsSLKs/f7Grewy3ebZpl1ZsU+VUTPY4rzeHgaFA8GSWOoA8V2M3OixWZQ==", "dev": true, "optional": true, "requires": { @@ -7502,13 +6791,13 @@ } }, "import-fresh": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.1.0.tgz", - "integrity": "sha512-PpuksHKGt8rXfWEr9m9EHIpgyyaltBy8+eF6GJM0QCAxMgxCfucMF3mjecK2QsJr0amJW7gTqh5/wht0z2UhEQ==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz", + "integrity": "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=", "dev": true, "requires": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" + "caller-path": "^2.0.0", + "resolve-from": "^3.0.0" } }, "import-from": { @@ -7518,14 +6807,6 @@ "dev": true, "requires": { "resolve-from": "^3.0.0" - }, - "dependencies": { - "resolve-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", - "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", - "dev": true - } } }, "import-lazy": { @@ -7585,9 +6866,9 @@ } }, "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", "dev": true }, "ini": { @@ -7597,81 +6878,65 @@ "dev": true }, "inquirer": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.5.0.tgz", - "integrity": "sha512-scfHejeG/lVZSpvCXpsB4j/wQNPM5JC8kiElOI0OUTwmc1RTpXr4H32/HOlQHcZiYl2z2VElwuCVDRG8vFmbnA==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.0.1.tgz", + "integrity": "sha512-V1FFQ3TIO15det8PijPLFR9M9baSlnRs9nL7zWu1MNVA2T9YVl9ZbrHJhYs7e9X8jeMZ3lr2JH/rdHFgNCBdYw==", "dev": true, "requires": { - "ansi-escapes": "^3.2.0", + "ansi-escapes": "^4.2.1", "chalk": "^2.4.2", - "cli-cursor": "^2.1.0", + "cli-cursor": "^3.1.0", "cli-width": "^2.0.0", "external-editor": "^3.0.3", - "figures": "^2.0.0", - "lodash": "^4.17.12", - "mute-stream": "0.0.7", + "figures": "^3.0.0", + "lodash": "^4.17.15", + "mute-stream": "0.0.8", "run-async": "^2.2.0", - "rxjs": "^6.4.0", - "string-width": "^2.1.0", + "rxjs": "^6.5.3", + "string-width": "^4.1.0", "strip-ansi": "^5.1.0", "through": "^2.3.6" }, "dependencies": { "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", "dev": true }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "lodash": { - "version": "4.17.15", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", - "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true }, "rxjs": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.2.tgz", - "integrity": "sha512-HUb7j3kvb7p7eCUHE3FqjoDsC1xfZQ4AHFWfTKSpZ+sAhhz5X1WX0ZuUqWbzB2QhSLp3DoLUG+hMdEDKqWo2Zg==", + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.4.tgz", + "integrity": "sha512-naMQXcgEo3csAEGvw/NydRA0fuS2nDZJiw1YUWFKU7aPPAPGZEsD4Iimit96qwCieH6y614MCLYwdkrWx7z/7Q==", "dev": true, "requires": { "tslib": "^1.9.0" } }, "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", + "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", "dev": true, "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" }, "dependencies": { "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", "dev": true, "requires": { - "ansi-regex": "^3.0.0" + "ansi-regex": "^5.0.0" } } } @@ -7762,6 +7027,17 @@ "dev": true, "requires": { "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } } }, "is-alphabetical": { @@ -7807,19 +7083,10 @@ "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", "dev": true }, - "is-builtin-module": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", - "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=", - "dev": true, - "requires": { - "builtin-modules": "^1.0.0" - } - }, "is-callable": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz", - "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==", + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.5.tgz", + "integrity": "sha512-ESKv5sMCJB2jnHTWZ3O5itG+O128Hsus4K4Qh1h2/cgn2vbgnLSVqfV46AeJA9D5EeeLa9w81KUXMtn34zhX+Q==", "dev": true }, "is-ci": { @@ -7852,12 +7119,23 @@ "dev": true, "requires": { "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } } }, "is-date-object": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz", - "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz", + "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==", "dev": true }, "is-decimal": { @@ -7972,6 +7250,12 @@ "dev": true, "optional": true }, + "is-lambda": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz", + "integrity": "sha1-PZh3iZ5qU+/AFgUEzeFfgubwYdU=", + "dev": true + }, "is-natural-number": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/is-natural-number/-/is-natural-number-4.0.1.tgz", @@ -7998,6 +7282,17 @@ "dev": true, "requires": { "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } } }, "is-number-like": { @@ -8022,23 +7317,6 @@ "dev": true, "optional": true }, - "is-odd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-odd/-/is-odd-2.0.0.tgz", - "integrity": "sha512-OTiixgpZAT1M4NHgS5IguFp/Vz2VI3U7Goh4/HA1adtwyLtSBrxYlcSYkhpAE07s4fKEcjrFxyvtQBND4vFQyQ==", - "dev": true, - "requires": { - "is-number": "^4.0.0" - }, - "dependencies": { - "is-number": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", - "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==", - "dev": true - } - } - }, "is-path-inside": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz", @@ -8061,14 +7339,6 @@ "dev": true, "requires": { "isobject": "^3.0.1" - }, - "dependencies": { - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - } } }, "is-png": { @@ -8085,12 +7355,12 @@ "dev": true }, "is-regex": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz", - "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.5.tgz", + "integrity": "sha512-vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ==", "dev": true, "requires": { - "has": "^1.0.1" + "has": "^1.0.3" } }, "is-regexp": { @@ -8115,9 +7385,9 @@ "dev": true }, "is-retry-allowed": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz", - "integrity": "sha1-EaBgVotnM5REAz0BJaYaINVk+zQ=", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz", + "integrity": "sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg==", "dev": true, "optional": true }, @@ -8137,12 +7407,12 @@ } }, "is-symbol": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.2.tgz", - "integrity": "sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", + "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==", "dev": true, "requires": { - "has-symbols": "^1.0.0" + "has-symbols": "^1.0.1" } }, "is-typedarray": { @@ -8256,9 +7526,9 @@ } }, "js-base64": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.4.3.tgz", - "integrity": "sha512-H7ErYLM34CvDMto3GbD6xD0JLUGYXR3QTcH6B/tr4Hi/QpSThnCsIp+Sy5FRTw3B0d6py4HcNkW7nO/wdtGWEw==", + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.5.1.tgz", + "integrity": "sha512-M7kLczedRMYX4L8Mdh4MzyAMM9O5osx+4FcOQuTvr3A9F2D9S5JXheN0ewNbrvK2UatkTRhL5ejGmGSjNMiZuw==", "dev": true }, "js-levenshtein": { @@ -8287,8 +7557,7 @@ "version": "0.1.1", "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", - "dev": true, - "optional": true + "dev": true }, "jsesc": { "version": "2.5.2", @@ -8308,6 +7577,12 @@ "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", "dev": true }, + "json-parse-even-better-errors": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.0.1.tgz", + "integrity": "sha512-XFY2Mbnmg+8r7MRsxfArVkZcfjxGlF/NjM3LsPXVeCX/GBF/1FTCv+idHBYC4qLPtK7q8HC8bapLoWqnhP/bXw==", + "dev": true + }, "json-parse-helpfulerror": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/json-parse-helpfulerror/-/json-parse-helpfulerror-1.0.3.tgz", @@ -8342,20 +7617,12 @@ "dev": true }, "json5": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.0.tgz", - "integrity": "sha512-8Mh9h6xViijj36g7Dxi+Y4S6hNGV96vcJZr/SrlHh1LR/pEn/8j/+qIBbs44YKl69Lrfctp4QD+AdWLTMqEZAQ==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.1.tgz", + "integrity": "sha512-l+3HXD0GEI3huGq1njuqtzYK8OYJyXMkOLtQ53pjWh89tvWS2h6l+1zMkYWqlb57+SiQodKZyvMEFb2X+KrFhQ==", "dev": true, "requires": { "minimist": "^1.2.0" - }, - "dependencies": { - "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "dev": true - } } }, "jsonfile": { @@ -8407,13 +7674,10 @@ } }, "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "dev": true }, "kleur": { "version": "3.0.3", @@ -8422,9 +7686,9 @@ "dev": true }, "known-css-properties": { - "version": "0.15.0", - "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.15.0.tgz", - "integrity": "sha512-TS0RCcQfHYsA+59uIHhnsA71NBkpILbqi0W+hde4R5FtESdzur0tCJFoko/1Pbhx+8rmdUc0R1VE4ixnnD+9xw==", + "version": "0.17.0", + "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.17.0.tgz", + "integrity": "sha512-Vi3nxDGMm/z+lAaCjvAR1u+7fiv+sG6gU/iYDj5QOF8h76ytK9EW/EKfF0NeTyiGBi8Jy6Hklty/vxISrLox3w==", "dev": true }, "last-run": { @@ -8558,6 +7822,12 @@ "integrity": "sha512-XCpr5bElgDI65vVgstP8TWjv6/QKWm9GU5UG0Pr5sLQ3QLo8NVKsioe+Jed5/3vFOe3IQuqE7DKwTvKQkjTHvg==", "dev": true }, + "lines-and-columns": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz", + "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=", + "dev": true + }, "load-json-file": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", @@ -8569,14 +7839,6 @@ "pify": "^2.0.0", "pinkie-promise": "^2.0.0", "strip-bom": "^2.0.0" - }, - "dependencies": { - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true - } } }, "localtunnel": { @@ -8591,21 +7853,6 @@ "yargs": "6.6.0" }, "dependencies": { - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, "yargs": { "version": "6.6.0", "resolved": "https://registry.npmjs.org/yargs/-/yargs-6.6.0.tgz", @@ -8650,12 +7897,30 @@ "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=", "dev": true }, + "lodash.isboolean": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", + "integrity": "sha1-bC4XHbKiV82WgC/UOwGyDV9YcPY=", + "dev": true + }, "lodash.isfinite": { "version": "3.3.2", "resolved": "https://registry.npmjs.org/lodash.isfinite/-/lodash.isfinite-3.3.2.tgz", "integrity": "sha1-+4m2WpqAKBgz8LdHizpRBPiY67M=", "dev": true }, + "lodash.isregexp": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lodash.isregexp/-/lodash.isregexp-4.0.1.tgz", + "integrity": "sha1-4T5kezDNVZdSoEzZEghvr32hwws=", + "dev": true + }, + "lodash.isstring": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", + "integrity": "sha1-1SfftUVuynzJu5XV2ur4i6VKVFE=", + "dev": true + }, "lodash.memoize": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", @@ -8675,19 +7940,6 @@ "dev": true, "requires": { "chalk": "^2.4.2" - }, - "dependencies": { - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - } } }, "logalot": { @@ -8817,24 +8069,34 @@ } }, "make-fetch-happen": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-5.0.0.tgz", - "integrity": "sha512-nFr/vpL1Jc60etMVKeaLOqfGjMMb3tAHFVJWxHOFCFS04Zmd7kGlMxo0l1tzfhoQje0/UPnd0X8OeGUiXXnfPA==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-7.1.0.tgz", + "integrity": "sha512-/5ICTcpd4ApIRn76pxcl4aQhrWxdDCnRDy3y+Tu7DbRsfqde6q8OYXUm7bYhH5dSey590AMT0RH9LDFq7v5KRA==", "dev": true, "requires": { - "agentkeepalive": "^3.4.1", - "cacache": "^12.0.0", - "http-cache-semantics": "^3.8.1", - "http-proxy-agent": "^2.1.0", - "https-proxy-agent": "^2.2.1", + "agentkeepalive": "^4.1.0", + "cacache": "^13.0.1", + "http-cache-semantics": "^4.0.3", + "http-proxy-agent": "^3.0.0", + "https-proxy-agent": "^4.0.0", + "is-lambda": "^1.0.1", "lru-cache": "^5.1.1", - "mississippi": "^3.0.0", - "node-fetch-npm": "^2.0.2", + "minipass": "^3.0.0", + "minipass-collect": "^1.0.2", + "minipass-fetch": "^1.1.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.2", "promise-retry": "^1.1.1", "socks-proxy-agent": "^4.0.0", - "ssri": "^6.0.0" + "ssri": "^7.0.1" }, "dependencies": { + "http-cache-semantics": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.0.3.tgz", + "integrity": "sha512-TcIMG3qeVLgDr1TEd2XvHaTnMPwYQUQMIBLy+5pLSDKYFc7UIqj39w8EGzZkaxoLv/l2K8HaI0t5AVA+YYgUew==", + "dev": true + }, "lru-cache": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", @@ -8845,9 +8107,9 @@ } }, "yallist": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz", - "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", "dev": true } } @@ -8859,14 +8121,6 @@ "dev": true, "requires": { "kind-of": "^6.0.2" - }, - "dependencies": { - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "dev": true - } } }, "map-cache": { @@ -8938,30 +8192,13 @@ } }, "matched": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/matched/-/matched-3.0.1.tgz", - "integrity": "sha512-HW3qvcGvaFz36xnFanvwHNCiKZomvOcxV0w3nIq8Zy7pEm8JXNY1t6roKBx03l03bgYb7JWLg+k1lloeI/ZPkg==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/matched/-/matched-4.0.0.tgz", + "integrity": "sha512-mD08ireECeLL/CCgum8EeLx/SZiAmhbbt4FPlCZ4GG2xKBJ/yB8qn0uvuvouQzCORknElll2jSNVdtCWNQdR2g==", "dev": true, "requires": { "glob": "^7.1.3", - "is-glob": "^4.0.0" - }, - "dependencies": { - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true - }, - "is-glob": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", - "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", - "dev": true, - "requires": { - "is-extglob": "^2.1.1" - } - } + "picomatch": "^2.0.5" } }, "mathml-tag-names": { @@ -8971,18 +8208,18 @@ "dev": true }, "mdast-util-compact": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/mdast-util-compact/-/mdast-util-compact-1.0.3.tgz", - "integrity": "sha512-nRiU5GpNy62rZppDKbLwhhtw5DXoFMqw9UNZFmlPsNaQCZ//WLjGKUwWMdJrUH+Se7UvtO2gXtAMe0g/N+eI5w==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mdast-util-compact/-/mdast-util-compact-1.0.4.tgz", + "integrity": "sha512-3YDMQHI5vRiS2uygEFYaqckibpJtKq5Sj2c8JioeOQBU6INpKbdWzfyLqFFnDwEcEnRFIdMsguzs5pC1Jp4Isg==", "dev": true, "requires": { "unist-util-visit": "^1.1.0" } }, "mdn-data": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-1.1.4.tgz", - "integrity": "sha512-FSYbp3lyKjyj3E7fMl6rYvUdX0FBXaluGqlFoYESWQlyUTq8R+wp0rkFxoYFqZlHCvsUXGjyJmLQSnXToYhOSA==", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz", + "integrity": "sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==", "dev": true }, "memoizee": { @@ -8999,19 +8236,6 @@ "lru-queue": "0.1", "next-tick": "1", "timers-ext": "^0.1.5" - }, - "dependencies": { - "es5-ext": { - "version": "0.10.49", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.49.tgz", - "integrity": "sha512-3NMEhi57E31qdzmYp2jwRArIUsj1HI/RxbQ4bgnSB+AIKIxsAmTiK83bYMifIcpWvEc3P1X30DhUKOqEtF/kvg==", - "dev": true, - "requires": { - "es6-iterator": "~2.0.3", - "es6-symbol": "~3.1.1", - "next-tick": "^1.0.0" - } - } } }, "meow": { @@ -9030,20 +8254,12 @@ "read-pkg-up": "^1.0.1", "redent": "^1.0.0", "trim-newlines": "^1.0.0" - }, - "dependencies": { - "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "dev": true - } } }, "merge2": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.2.3.tgz", - "integrity": "sha512-gdUU1Fwj5ep4kplwcmftruWofEFt6lfpkkr3h860CXbAB9c3hGb55EOL2ali0Td5oebvW0E1+3Sr+Ur7XfKpRA==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.3.0.tgz", + "integrity": "sha512-2j4DAdlBOkiSZIsaXk4mTE3sRS02yBHAtfy127xRV3bQUFqXkjHCHLW6Scv7DwNRbIWNHH8zpnz9zMaKXIdvYw==", "dev": true }, "micromatch": { @@ -9065,14 +8281,6 @@ "regex-not": "^1.0.0", "snapdragon": "^0.8.1", "to-regex": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "dev": true - } } }, "mime": { @@ -9082,24 +8290,24 @@ "dev": true }, "mime-db": { - "version": "1.33.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz", - "integrity": "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==", + "version": "1.42.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.42.0.tgz", + "integrity": "sha512-UbfJCR4UAVRNgMpfImz05smAXK7+c+ZntjaA26ANtkXLlOe947Aag5zdIcKQULAiF9Cq4WxBi9jUs5zkA84bYQ==", "dev": true }, "mime-types": { - "version": "2.1.18", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz", - "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==", + "version": "2.1.25", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.25.tgz", + "integrity": "sha512-5KhStqB5xpTAeGqKBAMgwaYMnQik7teQN4IAzC7npDv6kzeU6prfkR67bc87J1kWMPGkoaZSq1npmexMgkmEVg==", "dev": true, "requires": { - "mime-db": "~1.33.0" + "mime-db": "1.42.0" } }, "mimic-fn": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", - "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", "dev": true }, "mimic-response": { @@ -9118,9 +8326,9 @@ } }, "minimist": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", "dev": true }, "minimist-options": { @@ -9134,84 +8342,141 @@ } }, "minipass": { - "version": "2.6.5", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.6.5.tgz", - "integrity": "sha512-ewSKOPFH9blOLXx0YSE+mbrNMBFPS+11a2b03QZ+P4LVrUHW/GAlqeYC7DBknDyMWkHzrzTpDhUvy7MUxqyrPA==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.1.tgz", + "integrity": "sha512-UFqVihv6PQgwj8/yTGvl9kPz7xIAY+R5z6XYjRInD3Gk3qx6QGSD6zEcpeG4Dy/lQnv1J6zv8ejV90hyYIKf3w==", "dev": true, "requires": { - "safe-buffer": "^5.1.2", - "yallist": "^3.0.0" + "yallist": "^4.0.0" }, "dependencies": { "yallist": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz", - "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true } } }, - "minizlib": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.2.2.tgz", - "integrity": "sha512-hR3At21uSrsjjDTWrbu0IMLTpnkpv8IIMFDFaoz43Tmu4LkmAXfH44vNNzpTnf+OAQQCHrb91y/wc2J4x5XgSQ==", + "minipass-collect": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", + "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", "dev": true, "requires": { - "minipass": "^2.2.1" + "minipass": "^3.0.0" } }, - "mississippi": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz", - "integrity": "sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==", + "minipass-fetch": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-1.2.1.tgz", + "integrity": "sha512-ssHt0dkljEDaKmTgQ04DQgx2ag6G2gMPxA5hpcsoeTbfDgRf2fC2gNSRc6kISjD7ckCpHwwQvXxuTBK8402fXg==", "dev": true, "requires": { - "concat-stream": "^1.5.0", - "duplexify": "^3.4.2", - "end-of-stream": "^1.1.0", - "flush-write-stream": "^1.0.0", - "from2": "^2.1.0", - "parallel-transform": "^1.1.0", - "pump": "^3.0.0", - "pumpify": "^1.3.3", - "stream-each": "^1.1.0", - "through2": "^2.0.0" + "encoding": "^0.1.12", + "minipass": "^3.1.0", + "minipass-pipeline": "^1.2.2", + "minipass-sized": "^1.0.3", + "minizlib": "^2.0.0" } }, - "mitt": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/mitt/-/mitt-1.1.3.tgz", - "integrity": "sha512-mUDCnVNsAi+eD6qA0HkRkwYczbLHJ49z17BGe2PYRhZL4wpZUFZGJHU7/5tmvohoma+Hdn0Vh/oJTiPEmgSruA==", - "dev": true + "minipass-flush": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", + "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", + "dev": true, + "requires": { + "minipass": "^3.0.0" + } }, - "mixin-deep": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", - "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", + "minipass-json-stream": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minipass-json-stream/-/minipass-json-stream-1.0.1.tgz", + "integrity": "sha512-ODqY18UZt/I8k+b7rl2AENgbWE8IDYam+undIJONvigAz8KR5GWblsFTEfQs0WODsjbSXWlm+JHEv8Gr6Tfdbg==", "dev": true, "requires": { - "for-in": "^1.0.2", - "is-extendable": "^1.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } - } + "jsonparse": "^1.3.1", + "minipass": "^3.0.0" } }, - "mkdirp": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "minipass-pipeline": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.2.tgz", + "integrity": "sha512-3JS5A2DKhD2g0Gg8x3yamO0pj7YeKGwVlDS90pF++kxptwx/F+B//roxf9SqYil5tQo65bijy+dAuAFZmYOouA==", "dev": true, "requires": { - "minimist": "0.0.8" + "minipass": "^3.0.0" + } + }, + "minipass-sized": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz", + "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==", + "dev": true, + "requires": { + "minipass": "^3.0.0" + } + }, + "minizlib": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.0.tgz", + "integrity": "sha512-EzTZN/fjSvifSX0SlqUERCN39o6T40AMarPbv0MrarSFtIITCBh7bi+dU8nxGFHuqs9jdIAeoYoKuQAAASsPPA==", + "dev": true, + "requires": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + }, + "dependencies": { + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + } + } + }, + "mitt": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mitt/-/mitt-1.2.0.tgz", + "integrity": "sha512-r6lj77KlwqLhIUku9UWYes7KJtsczvolZkzp8hbaDPPaE24OmWl5s539Mytlj22siEQKosZ26qCBgda2PKwoJw==", + "dev": true + }, + "mixin-deep": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", + "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", + "dev": true, + "requires": { + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4" + } + } + } + }, + "mkdirp": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "dev": true, + "requires": { + "minimist": "0.0.8" + }, + "dependencies": { + "minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", + "dev": true + } } }, "move-concurrently": { @@ -9229,9 +8494,9 @@ } }, "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true }, "mute-stdout": { @@ -9241,21 +8506,21 @@ "dev": true }, "mute-stream": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", - "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=", + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", "dev": true }, "nan": { - "version": "2.13.2", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.13.2.tgz", - "integrity": "sha512-TghvYc72wlMGMVMluVo9WRJc0mB8KxxF/gZ4YYFy7V2ZQX9l7rgbPg7vjS9mt6U5HXODVFVI2bOduCzwOMv/lw==", + "version": "2.14.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.0.tgz", + "integrity": "sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg==", "dev": true }, "nanomatch": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.9.tgz", - "integrity": "sha512-n8R9bS8yQ6eSXaV6jHUpKzD8gLsin02w1HSFiegwrs9E098Ylhw5jdyKPaYqvHknHaSCKTPp7C8dGCQ0q9koXA==", + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", + "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", "dev": true, "requires": { "arr-diff": "^4.0.0", @@ -9263,33 +8528,12 @@ "define-property": "^2.0.2", "extend-shallow": "^3.0.2", "fragment-cache": "^0.2.1", - "is-odd": "^2.0.0", "is-windows": "^1.0.2", "kind-of": "^6.0.2", "object.pick": "^1.3.0", "regex-not": "^1.0.0", "snapdragon": "^0.8.1", "to-regex": "^3.0.1" - }, - "dependencies": { - "arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", - "dev": true - }, - "array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", - "dev": true - }, - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "dev": true - } } }, "natural-compare": { @@ -9359,17 +8603,6 @@ } } }, - "node-fetch-npm": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/node-fetch-npm/-/node-fetch-npm-2.0.2.tgz", - "integrity": "sha512-nJIxm1QmAj4v3nfCvEeCrYSoVwXyxLnaPBK5W1W5DGEJwjlKuC2VEUycGw5oxk+4zZahRrB84PUJJgEmhFTDFw==", - "dev": true, - "requires": { - "encoding": "^0.1.11", - "json-parse-better-errors": "^1.0.0", - "safe-buffer": "^5.1.1" - } - }, "node-gyp": { "version": "3.8.0", "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-3.8.0.tgz", @@ -9399,18 +8632,26 @@ } }, "node-releases": { - "version": "1.1.19", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.19.tgz", - "integrity": "sha512-SH/B4WwovHbulIALsQllAVwqZZD1kPmKCqrhGfR29dXjLAVZMHvBjD3S6nL9D/J9QkmZ1R92/0wCMDKXUUvyyA==", + "version": "1.1.44", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.44.tgz", + "integrity": "sha512-NwbdvJyR7nrcGrXvKAvzc5raj/NkoJudkarh2yIpJ4t0NH4aqjUDz/486P+ynIW5eokKOfzGNRdYoLfBlomruw==", "dev": true, "requires": { - "semver": "^5.3.0" + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } } }, "node-sass": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/node-sass/-/node-sass-4.12.0.tgz", - "integrity": "sha512-A1Iv4oN+Iel6EPv77/HddXErL2a+gZ4uBeZUy+a8O35CFYTXhgA8MgLCWBtwpGZdCvTvQ9d+bQxX/QC36GDPpQ==", + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/node-sass/-/node-sass-4.13.0.tgz", + "integrity": "sha512-W1XBrvoJ1dy7VsvTAS5q1V45lREbTlZQqFbiHb3R3OTTCma0XBtuG6xZ6Z4506nR4lmHPTqVRwxT6KgtWC97CA==", "dev": true, "requires": { "async-foreach": "^0.1.3", @@ -9420,7 +8661,7 @@ "get-stdin": "^4.0.1", "glob": "^7.0.3", "in-publish": "^2.0.0", - "lodash": "^4.17.11", + "lodash": "^4.17.15", "meow": "^3.7.0", "mkdirp": "^0.5.1", "nan": "^2.13.2", @@ -9461,36 +8702,6 @@ "which": "^1.2.9" } }, - "gaze": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/gaze/-/gaze-1.1.3.tgz", - "integrity": "sha512-BRdNm8hbWzFzWHERTrejLqwHDfS4GibPoq5wjTPIoJHoBtKGPg3xAFfxmM+9ztbXelxcf2hwQcaz1PtmFeue8g==", - "dev": true, - "requires": { - "globule": "^1.0.0" - } - }, - "globule": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/globule/-/globule-1.2.1.tgz", - "integrity": "sha512-g7QtgWF4uYSL5/dn71WxubOrS7JVGCnFPEnoeChJmBnyR9Mw8nGoEwOgJL/RC2Te0WhbsEUCejfH8SZNJ+adYQ==", - "dev": true, - "requires": { - "glob": "~7.1.1", - "lodash": "~4.17.10", - "minimatch": "~3.0.2" - } - }, - "lru-cache": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", - "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", - "dev": true, - "requires": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" - } - }, "supports-color": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", @@ -9509,25 +8720,22 @@ } }, "normalize-package-data": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz", - "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==", + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", "dev": true, "requires": { "hosted-git-info": "^2.1.4", - "is-builtin-module": "^1.0.0", + "resolve": "^1.10.0", "semver": "2 || 3 || 4 || 5", "validate-npm-package-license": "^3.0.1" } }, "normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "dev": true, - "requires": { - "remove-trailing-separator": "^1.0.1" - } + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true }, "normalize-range": { "version": "0.1.2", @@ -9557,21 +8765,24 @@ } }, "npm-bundled": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.0.6.tgz", - "integrity": "sha512-8/JCaftHwbd//k6y2rEWp6k1wxVfpFzB6t1p825+cUb7Ym2XQfhwIC5KwhrvzZRJu+LtDE585zVaS32+CGtf0g==", - "dev": true + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.1.1.tgz", + "integrity": "sha512-gqkfgGePhTpAEgUsGEgcq1rqPXA+tv/aVBlgEzfXwA1yiUJF7xtEt3CtVwOjNYQOVknDk0F20w58Fnm3EtG0fA==", + "dev": true, + "requires": { + "npm-normalize-package-bin": "^1.0.1" + } }, "npm-check-updates": { - "version": "3.1.23", - "resolved": "https://registry.npmjs.org/npm-check-updates/-/npm-check-updates-3.1.23.tgz", - "integrity": "sha512-Z2dkMdNgue6OPkQDPcAK62Qrwv+G1PaEmKrDrrSAiSP7pRD3u30xOVy1nLukS1XrJ2/zF8XTVxFe9/ubcvlcPQ==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-check-updates/-/npm-check-updates-4.0.1.tgz", + "integrity": "sha512-rDrKAqhQuTYq2EkndroPMZGA9N6tpTotOVOIJoxRa3ZKnb/mOcq2TZv4A4LLSM8+9kZlP+sBwE+XAGh8wWZw/w==", "dev": true, "requires": { - "chalk": "^2.4.2", + "chalk": "^3.0.0", "cint": "^8.2.1", "cli-table": "^0.3.1", - "commander": "^3.0.1", + "commander": "^4.0.1", "fast-diff": "^1.2.0", "find-up": "4.1.0", "get-stdin": "^7.0.0", @@ -9579,10 +8790,10 @@ "libnpmconfig": "^1.2.1", "lodash": "^4.17.15", "node-alias": "^1.0.4", - "pacote": "^9.5.8", + "pacote": "^10.2.0", "progress": "^2.0.3", - "prompts": "^2.2.1", - "rc-config-loader": "^2.0.4", + "prompts": "^2.3.0", + "rc-config-loader": "^3.0.0", "requireg": "^0.2.2", "semver": "^6.3.0", "semver-utils": "^1.1.4", @@ -9590,33 +8801,73 @@ "update-notifier": "^3.0.1" }, "dependencies": { + "ansi-styles": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", + "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", + "dev": true, + "requires": { + "@types/color-name": "^1.1.1", + "color-convert": "^2.0.1" + } + }, "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", "dev": true, "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" } }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, "commander": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-3.0.1.tgz", - "integrity": "sha512-UNgvDd+csKdc9GD4zjtkHKQbT8Aspt2jCBqNSPp53vAS0L1tS9sXB2TCEOPHJ7kt9bN/niWkYj8T3RQSoMXdSQ==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.0.1.tgz", + "integrity": "sha512-IPF4ouhCP+qdlcmCedhxX4xiGBPyigb8v5NeUp+0LyhwLgxMqyp3S0vl7TAPfS/hiP7FC3caI/PB9lTmP8r1NA==", "dev": true }, + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, "get-stdin": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-7.0.0.tgz", "integrity": "sha512-zRKcywvrXlXsA0v0i9Io4KDRaAw7+a1ZpjRwl9Wox8PFlVCCHra7E9c4kqXCoCM9nR5tBkaTTZRBoCm60bFqTQ==", "dev": true }, - "lodash": { - "version": "4.17.15", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", - "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true }, "semver": { @@ -9624,6 +8875,15 @@ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true + }, + "supports-color": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", + "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } } } }, @@ -9647,66 +8907,104 @@ } } }, + "npm-normalize-package-bin": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz", + "integrity": "sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==", + "dev": true + }, "npm-package-arg": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-6.1.1.tgz", - "integrity": "sha512-qBpssaL3IOZWi5vEKUKW0cO7kzLeT+EQO9W8RsLOZf76KF9E/K9+wH0C7t06HXPpaH8WH5xF1MExLuCwbTqRUg==", + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-8.0.0.tgz", + "integrity": "sha512-JgqZHCEUKvhX7EehLNdySiuB227a0QYra9wpZOkW+jvwsRYKkce7y5Rv2axkxScJU1EP+L32jT2PLhQz7IWHlw==", "dev": true, "requires": { - "hosted-git-info": "^2.7.1", + "hosted-git-info": "^3.0.2", "osenv": "^0.1.5", - "semver": "^5.6.0", + "semver": "^7.0.0", "validate-npm-package-name": "^3.0.0" }, "dependencies": { "hosted-git-info": { - "version": "2.8.4", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.4.tgz", - "integrity": "sha512-pzXIvANXEFrc5oFFXRMkbLPQ2rXRoDERwDLyrcUxGhaZhgP54BBSl9Oheh7Vv0T090cszWBxPjkQQ5Sq1PbBRQ==", - "dev": true + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-3.0.2.tgz", + "integrity": "sha512-ezZMWtHXm7Eb7Rq4Mwnx2vs79WUx2QmRg3+ZqeGroKzfDO+EprOcgRPYghsOP9JuYBfK18VojmRTGCg8Ma+ktw==", + "dev": true, + "requires": { + "lru-cache": "^5.1.1" + } + }, + "lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "requires": { + "yallist": "^3.0.2" + } }, "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.1.1.tgz", + "integrity": "sha512-WfuG+fl6eh3eZ2qAf6goB7nhiCd7NPXhmyFxigB/TOkQyeLP8w8GsVehvtGNtnNmyboz4TgeK40B1Kbql/8c5A==", + "dev": true + }, + "yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", "dev": true } } }, "npm-packlist": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-1.4.4.tgz", - "integrity": "sha512-zTLo8UcVYtDU3gdeaFu2Xu0n0EvelfHDGuqtNIn5RO7yQj4H1TqNdBc/yZjxnWA0PVB8D3Woyp0i5B43JwQ6Vw==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-2.0.3.tgz", + "integrity": "sha512-geT5P1y+58INE/jlxBHNsucRX7jpZAgW+XkxAe1NWN7N9SNwpueWTUPRoVdJH+hFpqcdAChRUE/HWsXQI+8JaQ==", "dev": true, "requires": { - "ignore-walk": "^3.0.1", - "npm-bundled": "^1.0.1" + "glob": "^7.1.6", + "ignore-walk": "^3.0.3", + "npm-bundled": "^1.0.1", + "npm-normalize-package-bin": "^1.0.1" } }, "npm-pick-manifest": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-3.0.2.tgz", - "integrity": "sha512-wNprTNg+X5nf+tDi+hbjdHhM4bX+mKqv6XmPh7B5eG+QY9VARfQPfCEH013H5GqfNj6ee8Ij2fg8yk0mzps1Vw==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-5.0.0.tgz", + "integrity": "sha512-YUW9xObM7Y1OkQ/gSmU5VQyI3vCkG5lwOrdycw0dpj9/3dE8h9CKY8tVyHTIp50+mV8jOAGH4m4Lts7zz2rN4Q==", "dev": true, "requires": { "figgy-pudding": "^3.5.1", - "npm-package-arg": "^6.0.0", - "semver": "^5.4.1" + "npm-package-arg": "^8.0.0", + "semver": "^7.0.0" + }, + "dependencies": { + "semver": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.1.1.tgz", + "integrity": "sha512-WfuG+fl6eh3eZ2qAf6goB7nhiCd7NPXhmyFxigB/TOkQyeLP8w8GsVehvtGNtnNmyboz4TgeK40B1Kbql/8c5A==", + "dev": true + } } }, "npm-registry-fetch": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-4.0.1.tgz", - "integrity": "sha512-1ZQ+yjnxc698R5h9Yje9CASapzAZr7aYDkJDdERg9xg2hOEY0vRJwskOaJAXq8N/eLavzvW4g564YAfq6zMn/A==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-6.0.0.tgz", + "integrity": "sha512-TSzEzudrky0ArPskchM/7F5SrawBY5acMNtRqFuacEI2lCKEyfBjaENuuIU5Uq2CyHfJ+gWp5QlCprolKa5wKg==", "dev": true, "requires": { - "JSONStream": "^1.3.4", - "bluebird": "^3.5.1", + "@npmcli/ci-detect": "^1.0.0", "figgy-pudding": "^3.4.1", "lru-cache": "^5.1.1", - "make-fetch-happen": "^5.0.0", - "npm-package-arg": "^6.1.0", - "safe-buffer": "^5.2.0" + "make-fetch-happen": "^7.1.0", + "minipass": "^3.0.0", + "minipass-fetch": "^1.1.2", + "minipass-json-stream": "^1.0.1", + "minizlib": "^2.0.0", + "npm-package-arg": "^8.0.0", + "safe-buffer": "^5.2.0", + "semver": "^7.0.0" }, "dependencies": { "lru-cache": { @@ -9724,10 +9022,16 @@ "integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==", "dev": true }, + "semver": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.1.1.tgz", + "integrity": "sha512-WfuG+fl6eh3eZ2qAf6goB7nhiCd7NPXhmyFxigB/TOkQyeLP8w8GsVehvtGNtnNmyboz4TgeK40B1Kbql/8c5A==", + "dev": true + }, "yallist": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz", - "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", "dev": true } } @@ -9753,6 +9057,15 @@ "set-blocking": "~2.0.0" } }, + "nth-check": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", + "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", + "dev": true, + "requires": { + "boolbase": "~1.0.0" + } + }, "num2fraction": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz", @@ -9765,6 +9078,12 @@ "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", "dev": true }, + "oauth-sign": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", + "dev": true + }, "object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", @@ -9796,9 +9115,24 @@ "requires": { "is-descriptor": "^0.1.0" } + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } } } }, + "object-inspect": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.7.0.tgz", + "integrity": "sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw==", + "dev": true + }, "object-keys": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", @@ -9818,14 +9152,6 @@ "dev": true, "requires": { "isobject": "^3.0.0" - }, - "dependencies": { - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - } } }, "object.assign": { @@ -9838,14 +9164,6 @@ "function-bind": "^1.1.1", "has-symbols": "^1.0.0", "object-keys": "^1.0.11" - }, - "dependencies": { - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true - } } }, "object.defaults": { @@ -9861,13 +9179,13 @@ } }, "object.getownpropertydescriptors": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz", - "integrity": "sha1-h1jIRvW0B62rDyNuCYbxSwUcqhY=", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.0.tgz", + "integrity": "sha512-Z53Oah9A3TdLoblT7VKJaTDdXdT+lQO+cNpKVnya5JDe9uLvzu1YyY1yFDFrcxrlRgWrEFH0jJtD/IbuwjcEVg==", "dev": true, "requires": { - "define-properties": "^1.1.2", - "es-abstract": "^1.5.1" + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0-next.1" } }, "object.map": { @@ -9887,14 +9205,6 @@ "dev": true, "requires": { "isobject": "^3.0.1" - }, - "dependencies": { - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - } } }, "object.reduce": { @@ -9907,6 +9217,18 @@ "make-iterator": "^1.0.0" } }, + "object.values": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.1.tgz", + "integrity": "sha512-WTa54g2K8iu0kmS/us18jEmdv1a4Wi//BZ/DTVYEcH0XhLM5NYdpDHja3gt57VrZLcNAO2WGA+KpWsDBaHt6eA==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0-next.1", + "function-bind": "^1.1.1", + "has": "^1.0.3" + } + }, "on-finished": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", @@ -9926,12 +9248,12 @@ } }, "onetime": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", - "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.0.tgz", + "integrity": "sha512-5NcSkPHhwTVFIQN+TUqXoS5+dlElHXdpAWu9I0HP20YOtIi+aZ0Ct82jdlILDxjLEAWwvm+qj1m6aEtsDVmm6Q==", "dev": true, "requires": { - "mimic-fn": "^1.0.0" + "mimic-fn": "^2.1.0" } }, "openurl": { @@ -9950,17 +9272,17 @@ } }, "optionator": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz", - "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", + "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", "dev": true, "requires": { "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.4", + "fast-levenshtein": "~2.0.6", "levn": "~0.3.0", "prelude-ls": "~1.1.2", "type-check": "~0.3.2", - "wordwrap": "~1.0.0" + "word-wrap": "~1.2.3" } }, "optipng-bin": { @@ -10056,9 +9378,9 @@ "optional": true }, "p-limit": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.1.tgz", - "integrity": "sha512-85Tk+90UCVWvbDavCLKPOLC9vvY8OwEX/RtKF+/1OADJMVlFfEHOiMTPVyxg7mk/dKa+ipdHm0OUkTvCpMTuwg==", + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.2.tgz", + "integrity": "sha512-WGR+xHecKTr7EbUEhyLSh5Dube9JtdiG78ufaeLxTgpudf/20KqyMioIUZJAezlTIi6evxuoUs9YXc11cU+yzQ==", "dev": true, "requires": { "p-try": "^2.0.0" @@ -10073,6 +9395,15 @@ "p-limit": "^2.2.0" } }, + "p-map": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz", + "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==", + "dev": true, + "requires": { + "aggregate-error": "^3.0.0" + } + }, "p-map-series": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/p-map-series/-/p-map-series-1.0.0.tgz", @@ -10197,9 +9528,9 @@ "dev": true }, "normalize-url": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.3.0.tgz", - "integrity": "sha512-0NLtR71o4k6GLP+mr6Ty34c5GA6CMoEsncKJxvQd8NzPxaHRJNnb5gZE8R1XF4CPIS7QPHLJ74IFszwtNVAHVQ==", + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.0.tgz", + "integrity": "sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ==", "dev": true }, "p-cancelable": { @@ -10214,6 +9545,16 @@ "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=", "dev": true }, + "pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, "semver": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", @@ -10232,51 +9573,33 @@ } }, "pacote": { - "version": "9.5.8", - "resolved": "https://registry.npmjs.org/pacote/-/pacote-9.5.8.tgz", - "integrity": "sha512-0Tl8Oi/K0Lo4MZmH0/6IsT3gpGf9eEAznLXEQPKgPq7FscnbUOyopnVpwXlnQdIbCUaojWy1Wd7VMyqfVsRrIw==", + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/pacote/-/pacote-10.3.0.tgz", + "integrity": "sha512-Qq4nZkTyjKvNWj0TKfV29Q9416RQ9hALPjU5ej6ckavV1WLcurc0aZqJBKcAf2OHX6RuE1fi0N+TBCP9EyM1+Q==", "dev": true, "requires": { - "bluebird": "^3.5.3", - "cacache": "^12.0.2", - "chownr": "^1.1.2", - "figgy-pudding": "^3.5.1", - "get-stream": "^4.1.0", - "glob": "^7.1.3", + "@npmcli/installed-package-contents": "^1.0.5", + "cacache": "^13.0.1", + "chownr": "^1.1.3", + "fs-minipass": "^2.0.0", "infer-owner": "^1.0.4", "lru-cache": "^5.1.1", - "make-fetch-happen": "^5.0.0", - "minimatch": "^3.0.4", - "minipass": "^2.3.5", - "mississippi": "^3.0.0", - "mkdirp": "^0.5.1", - "normalize-package-data": "^2.4.0", - "npm-package-arg": "^6.1.0", - "npm-packlist": "^1.1.12", - "npm-pick-manifest": "^3.0.0", - "npm-registry-fetch": "^4.0.0", + "minipass": "^3.0.1", + "minipass-fetch": "^1.2.1", + "npm-package-arg": "^8.0.0", + "npm-packlist": "^2.0.3", + "npm-pick-manifest": "^5.0.0", + "npm-registry-fetch": "^6.0.0", "osenv": "^0.1.5", "promise-inflight": "^1.0.1", "promise-retry": "^1.1.1", - "protoduck": "^5.0.1", - "rimraf": "^2.6.2", - "safe-buffer": "^5.1.2", - "semver": "^5.6.0", - "ssri": "^6.0.1", - "tar": "^4.4.10", - "unique-filename": "^1.1.1", - "which": "^1.3.1" + "read-package-json-fast": "^1.1.1", + "semver": "^7.1.1", + "ssri": "^7.1.0", + "tar": "^5.0.5", + "which": "^2.0.2" }, "dependencies": { - "get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", - "dev": true, - "requires": { - "pump": "^3.0.0" - } - }, "lru-cache": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", @@ -10287,54 +9610,50 @@ } }, "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.1.1.tgz", + "integrity": "sha512-WfuG+fl6eh3eZ2qAf6goB7nhiCd7NPXhmyFxigB/TOkQyeLP8w8GsVehvtGNtnNmyboz4TgeK40B1Kbql/8c5A==", "dev": true }, "tar": { - "version": "4.4.11", - "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.11.tgz", - "integrity": "sha512-iI4zh3ktLJKaDNZKZc+fUONiQrSn9HkCFzamtb7k8FFmVilHVob7QsLX/VySAW8lAviMzMbFw4QtFb4errwgYA==", + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/tar/-/tar-5.0.5.tgz", + "integrity": "sha512-MNIgJddrV2TkuwChwcSNds/5E9VijOiw7kAc1y5hTNJoLDSuIyid2QtLYiCYNnICebpuvjhPQZsXwUL0O3l7OQ==", "dev": true, "requires": { - "chownr": "^1.1.1", - "fs-minipass": "^1.2.5", - "minipass": "^2.6.4", - "minizlib": "^1.2.1", + "chownr": "^1.1.3", + "fs-minipass": "^2.0.0", + "minipass": "^3.0.0", + "minizlib": "^2.1.0", "mkdirp": "^0.5.0", - "safe-buffer": "^5.1.2", - "yallist": "^3.0.3" + "yallist": "^4.0.0" + }, + "dependencies": { + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + } } }, "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "dev": true, "requires": { "isexe": "^2.0.0" } }, "yallist": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz", - "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", "dev": true } } }, - "parallel-transform": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.2.0.tgz", - "integrity": "sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg==", - "dev": true, - "requires": { - "cyclist": "^1.0.1", - "inherits": "^2.0.3", - "readable-stream": "^2.1.5" - } - }, "parent-module": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", @@ -10342,6 +9661,14 @@ "dev": true, "requires": { "callsites": "^3.0.0" + }, + "dependencies": { + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true + } } }, "parse-entities": { @@ -10427,10 +9754,13 @@ "dev": true }, "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", + "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", + "dev": true, + "requires": { + "pinkie-promise": "^2.0.0" + } }, "path-is-absolute": { "version": "1.0.1", @@ -10451,9 +9781,9 @@ "dev": true }, "path-parse": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.5.tgz", - "integrity": "sha1-PBrfhx6pzWyUMbbqK9dKD/BVxME=", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", + "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", "dev": true }, "path-root": { @@ -10486,14 +9816,6 @@ "graceful-fs": "^4.1.2", "pify": "^2.0.0", "pinkie-promise": "^2.0.0" - }, - "dependencies": { - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true - } } }, "pend": { @@ -10510,21 +9832,21 @@ "dev": true }, "php-parser": { - "version": "3.0.0-prerelease.8", - "resolved": "https://registry.npmjs.org/php-parser/-/php-parser-3.0.0-prerelease.8.tgz", - "integrity": "sha512-sVMPsnPd3q7kf1vs0VUROo71Klcs6s7Ho5TSMcBcI8Qg5VuVMaM5far36E4qaYTH8SW+2Tquv5RuU7e8+jfjIw==", + "version": "3.0.0-prerelease.9", + "resolved": "https://registry.npmjs.org/php-parser/-/php-parser-3.0.0-prerelease.9.tgz", + "integrity": "sha512-QTVGKeiGZyRq7NpXMx15Dkiq9+B2KLGStck1Wrik+Hui+vb70rDBF+dY1RD6/IC8Wy/tUAhcKiCfKWVJUjymDA==", "dev": true }, "picomatch": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.0.7.tgz", - "integrity": "sha512-oLHIdio3tZ0qH76NybpeneBhYVj0QFTfXEFTc/B3zKQspYfYYkWYgFsmzo+4kvId/bQRcNkVeguI3y+CD22BtA==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.1.1.tgz", + "integrity": "sha512-OYMyqkKzK7blWO/+XZYP6w8hH0LDvkBvdvKukti+7kqYFCiEAk+gI3DWnryapc0Dau05ugGTy0foQ6mqn4AHYA==", "dev": true }, "pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", "dev": true }, "pinkie": { @@ -10552,14 +9874,6 @@ "arr-diff": "^4.0.0", "arr-union": "^3.1.0", "extend-shallow": "^3.0.2" - }, - "dependencies": { - "arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", - "dev": true - } } }, "plur": { @@ -10588,14 +9902,31 @@ "dev": true }, "postcss": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.2.tgz", - "integrity": "sha512-fmaUY5370keLUTx+CnwRxtGiuFTcNBLQBqr1oE3WZ/euIYmGAo0OAgOhVJ3ByDnVmOR3PK+0V9VebzfjRIUcqw==", + "version": "7.0.26", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.26.tgz", + "integrity": "sha512-IY4oRjpXWYshuTDFxMVkJDtWIk2LhsTlu8bZnbEJA4+bYT16Lvpo8Qv6EvDumhYRgzjZl489pmsY3qVgJQ08nA==", "dev": true, "requires": { - "chalk": "^2.4.1", + "chalk": "^2.4.2", "source-map": "^0.6.1", - "supports-color": "^5.4.0" + "supports-color": "^6.1.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } } }, "postcss-calc": { @@ -10610,47 +9941,11 @@ "postcss-value-parser": "^3.3.1" }, "dependencies": { - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "dependencies": { - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "postcss": { - "version": "7.0.16", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.16.tgz", - "integrity": "sha512-MOo8zNSlIqh22Uaa3drkdIAgUGEL+AD1ESiSdmElLUmE2uVDo1QloiT/IfW9qRw8Gw+Y/w69UVMGwbufMSftxA==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true } } }, @@ -10665,6 +9960,14 @@ "has": "^1.0.0", "postcss": "^7.0.0", "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } } }, "postcss-convert-values": { @@ -10675,6 +9978,14 @@ "requires": { "postcss": "^7.0.0", "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } } }, "postcss-discard-comments": { @@ -10738,59 +10049,15 @@ "dev": true, "requires": { "postcss": "^7.0.14" - }, - "dependencies": { - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "dependencies": { - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "postcss": { - "version": "7.0.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.18.tgz", - "integrity": "sha512-/7g1QXXgegpF+9GJj4iN7ChGF40sYuGYJ8WZu8DZWnmhQ/G36hfdk3q9LBJmoK+lZ+yzZ5KYpOoxq7LF1BxE8g==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } } }, "postcss-load-config": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-2.0.0.tgz", - "integrity": "sha512-V5JBLzw406BB8UIfsAWSK2KSwIJ5yoEIVFb4gVkXci0QdKgA24jLmHZ/ghe/GgX0lJ0/D1uUK1ejhzEY94MChQ==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-2.1.0.tgz", + "integrity": "sha512-4pV3JJVPLd5+RueiVVB+gFOAa7GWc25XQcMp86Zexzke69mKf6Nx9LRcQywdz7yZI9n1udOxmLuAwTBypypF8Q==", "dev": true, "requires": { - "cosmiconfig": "^4.0.0", + "cosmiconfig": "^5.0.0", "import-cwd": "^2.0.0" } }, @@ -10820,6 +10087,14 @@ "postcss": "^7.0.0", "postcss-value-parser": "^3.0.0", "stylehacks": "^4.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } } }, "postcss-merge-rules": { @@ -10857,6 +10132,14 @@ "requires": { "postcss": "^7.0.0", "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } } }, "postcss-minify-gradients": { @@ -10869,6 +10152,14 @@ "is-color-stop": "^1.0.0", "postcss": "^7.0.0", "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } } }, "postcss-minify-params": { @@ -10883,6 +10174,14 @@ "postcss": "^7.0.0", "postcss-value-parser": "^3.0.0", "uniqs": "^2.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } } }, "postcss-minify-selectors": { @@ -10928,6 +10227,14 @@ "cssnano-util-get-match": "^4.0.0", "postcss": "^7.0.0", "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } } }, "postcss-normalize-positions": { @@ -10940,6 +10247,14 @@ "has": "^1.0.0", "postcss": "^7.0.0", "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } } }, "postcss-normalize-repeat-style": { @@ -10952,6 +10267,14 @@ "cssnano-util-get-match": "^4.0.0", "postcss": "^7.0.0", "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } } }, "postcss-normalize-string": { @@ -10963,6 +10286,14 @@ "has": "^1.0.0", "postcss": "^7.0.0", "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } } }, "postcss-normalize-timing-functions": { @@ -10974,6 +10305,14 @@ "cssnano-util-get-match": "^4.0.0", "postcss": "^7.0.0", "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } } }, "postcss-normalize-unicode": { @@ -10985,6 +10324,14 @@ "browserslist": "^4.0.0", "postcss": "^7.0.0", "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } } }, "postcss-normalize-url": { @@ -10997,6 +10344,14 @@ "normalize-url": "^3.0.0", "postcss": "^7.0.0", "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } } }, "postcss-normalize-whitespace": { @@ -11007,6 +10362,14 @@ "requires": { "postcss": "^7.0.0", "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } } }, "postcss-ordered-values": { @@ -11018,6 +10381,14 @@ "cssnano-util-get-arguments": "^4.0.0", "postcss": "^7.0.0", "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } } }, "postcss-reduce-initial": { @@ -11042,6 +10413,14 @@ "has": "^1.0.0", "postcss": "^7.0.0", "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } } }, "postcss-reporter": { @@ -11064,50 +10443,6 @@ "requires": { "chalk": "^2.0.1" } - }, - "postcss": { - "version": "7.0.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.18.tgz", - "integrity": "sha512-/7g1QXXgegpF+9GJj4iN7ChGF40sYuGYJ8WZu8DZWnmhQ/G36hfdk3q9LBJmoK+lZ+yzZ5KYpOoxq7LF1BxE8g==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - }, - "dependencies": { - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "dependencies": { - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - } - } - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } } } }, @@ -11127,57 +10462,13 @@ } }, "postcss-sass": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/postcss-sass/-/postcss-sass-0.4.1.tgz", - "integrity": "sha512-YDdykeDHylqiD2CdXuP7K1aDz7hCflGVB6H6lqabWVab5mVOWhguUuWZYpFU22/E12AEGiMlOfZnLqr343zhVA==", + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/postcss-sass/-/postcss-sass-0.4.2.tgz", + "integrity": "sha512-hcRgnd91OQ6Ot9R90PE/khUDCJHG8Uxxd3F7Y0+9VHjBiJgNv7sK5FxyHMCBtoLmmkzVbSj3M3OlqUfLJpq0CQ==", "dev": true, "requires": { "gonzales-pe": "^4.2.4", - "postcss": "^7.0.14" - }, - "dependencies": { - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "dependencies": { - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "postcss": { - "version": "7.0.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.18.tgz", - "integrity": "sha512-/7g1QXXgegpF+9GJj4iN7ChGF40sYuGYJ8WZu8DZWnmhQ/G36hfdk3q9LBJmoK+lZ+yzZ5KYpOoxq7LF1BxE8g==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } + "postcss": "^7.0.21" } }, "postcss-scss": { @@ -11210,6 +10501,14 @@ "postcss": "^7.0.0", "postcss-value-parser": "^3.0.0", "svgo": "^1.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } } }, "postcss-syntax": { @@ -11230,9 +10529,9 @@ } }, "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.0.2.tgz", + "integrity": "sha512-LmeoohTpp/K4UiyQCwuGWlONxXamGzCMtFxLq4W1nZVGIQLYvMCJx3yAF9qyyuFpflABI9yVdtJAqbihOsCsJQ==", "dev": true }, "prelude-ls": { @@ -11267,9 +10566,9 @@ "dev": true }, "process-nextick-args": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", - "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", "dev": true }, "progress": { @@ -11295,9 +10594,9 @@ } }, "prompts": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.2.1.tgz", - "integrity": "sha512-VObPvJiWPhpZI6C5m60XOzTfnYg/xc/an+r9VYymj9WJW3B/DIH+REzjpAACPf8brwPeP+7vz3bIim3S+AaMjw==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.3.0.tgz", + "integrity": "sha512-NfbbPPg/74fT7wk2XYQ7hAIp9zJyZp5Fu19iRbORqqy1BhtrkZ0fPafBU+7bmn8ie69DpT0R6QpJIN2oisYjJg==", "dev": true, "requires": { "kleur": "^3.0.3", @@ -11311,15 +10610,6 @@ "dev": true, "optional": true }, - "protoduck": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/protoduck/-/protoduck-5.0.1.tgz", - "integrity": "sha512-WxoCeDCoCBY55BMvj4cAEjdVUFGRWed9ZxPlqTKYyw1nDDTQ4pqmnIMAGfJlg7Dx35uB/M+PHJPTmGOvaCaPTg==", - "dev": true, - "requires": { - "genfun": "^5.0.0" - } - }, "pseudomap": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", @@ -11327,15 +10617,15 @@ "dev": true }, "psl": { - "version": "1.1.29", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.1.29.tgz", - "integrity": "sha512-AeUmQ0oLN02flVHXWh9sSJF7mcdFq0ppid/JkErufc3hGIV/AMa8Fo9VgDo/cT2jFdOWoFvHp90qqBH54W+gjQ==", + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.7.0.tgz", + "integrity": "sha512-5NsSEDv8zY70ScRnOTn7bK7eanl2MvFrOrS/R6x+dBt5g1ghnj9Zv90kO8GwT8gxcu2ANyFprnFYB85IogIJOQ==", "dev": true }, "pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", + "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", "dev": true, "requires": { "end-of-stream": "^1.1.0", @@ -11351,33 +10641,12 @@ "duplexify": "^3.6.0", "inherits": "^2.0.3", "pump": "^2.0.0" - }, - "dependencies": { - "end-of-stream": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", - "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", - "dev": true, - "requires": { - "once": "^1.4.0" - } - }, - "pump": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", - "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", - "dev": true, - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - } } }, "punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", "dev": true }, "q": { @@ -11440,12 +10709,6 @@ "strip-json-comments": "~2.0.1" }, "dependencies": { - "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "dev": true - }, "strip-json-comments": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", @@ -11455,41 +10718,25 @@ } }, "rc-config-loader": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/rc-config-loader/-/rc-config-loader-2.0.4.tgz", - "integrity": "sha512-k06UzRbYDWgF4Mc/YrsZsmzSpDLuHoThJxep+vq5H09hiX8rbA5Ue/Ra0dwWm5MQvWYW4YBXgA186inNxuxidQ==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/rc-config-loader/-/rc-config-loader-3.0.0.tgz", + "integrity": "sha512-bwfUSB37TWkHfP+PPjb/x8BUjChFmmBK44JMfVnU7paisWqZl/o5k7ttCH+EQLnrbn2Aq8Fo1LAsyUiz+WF4CQ==", "dev": true, "requires": { "debug": "^4.1.1", "js-yaml": "^3.12.0", - "json5": "^2.1.0", - "object-assign": "^4.1.0", - "object-keys": "^1.0.12", - "path-exists": "^3.0.0", + "json5": "^2.1.1", "require-from-string": "^2.0.2" - }, - "dependencies": { - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "dev": true - } + } + }, + "read-package-json-fast": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-1.1.1.tgz", + "integrity": "sha512-vDw3wiWLwUXhYBCVvjAQJGCI5+DcgwGSYlFETCV9m/b107/yNBnYfCkoVrwHj7338j1z24/dxUXvtrXVjVjL1Q==", + "dev": true, + "requires": { + "json-parse-even-better-errors": "^2.0.1", + "npm-normalize-package-bin": "^1.0.1" } }, "read-pkg": { @@ -11511,27 +10758,6 @@ "requires": { "find-up": "^1.0.0", "read-pkg": "^1.0.0" - }, - "dependencies": { - "find-up": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", - "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", - "dev": true, - "requires": { - "path-exists": "^2.0.0", - "pinkie-promise": "^2.0.0" - } - }, - "path-exists": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", - "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", - "dev": true, - "requires": { - "pinkie-promise": "^2.0.0" - } - } } }, "readable-stream": { @@ -11557,6 +10783,18 @@ } } }, + "readdir-scoped-modules": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/readdir-scoped-modules/-/readdir-scoped-modules-1.1.0.tgz", + "integrity": "sha512-asaikDeqAQg7JifRsZn1NJZXo9E+VwlyCfbkZhwyISinqk5zNS6266HS5kah6P0SaQKGF6SkNnZVHUzHFYxYDw==", + "dev": true, + "requires": { + "debuglog": "^1.0.1", + "dezalgo": "^1.0.0", + "graceful-fs": "^4.1.2", + "once": "^1.3.0" + } + }, "readdirp": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", @@ -11566,282 +10804,6 @@ "graceful-fs": "^4.1.11", "micromatch": "^3.1.10", "readable-stream": "^2.0.2" - }, - "dependencies": { - "arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", - "dev": true - }, - "array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", - "dev": true - }, - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", - "dev": true, - "requires": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - } - }, - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true - } - } - }, - "extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", - "dev": true, - "requires": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - }, - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "dev": true - }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - } - } } }, "rechoir": { @@ -11878,6 +10840,12 @@ "regenerate": "^1.4.0" } }, + "regenerator-runtime": { + "version": "0.13.3", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.3.tgz", + "integrity": "sha512-naKIZz2GQ8JWh///G7L3X6LaQUAMp2lvb1rvwwsURe/VXwD6VMfr+/1NuNw3ag8v2kY1aQ/go5SNn79O9JU7yw==", + "dev": true + }, "regenerator-transform": { "version": "0.14.1", "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.1.tgz", @@ -11897,12 +10865,6 @@ "safe-regex": "^1.1.0" } }, - "regexp-tree": { - "version": "0.1.13", - "resolved": "https://registry.npmjs.org/regexp-tree/-/regexp-tree-0.1.13.tgz", - "integrity": "sha512-hwdV/GQY5F8ReLZWO+W1SRoN5YfpOKY6852+tBFcma72DKBIcHjPRIlIvQN35bCOljuAfP2G2iB0FC/w236mUw==", - "dev": true - }, "regexpp": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz", @@ -11910,9 +10872,9 @@ "dev": true }, "regexpu-core": { - "version": "4.5.5", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.5.5.tgz", - "integrity": "sha512-FpI67+ky9J+cDizQUJlIlNZFKual/lUkFr1AG6zOCpwZ9cLrg8UUVakyUQJD7fCDIe9Z2nwTQJNPyonatNmDFQ==", + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.6.0.tgz", + "integrity": "sha512-YlVaefl8P5BnFYOITTNzDvan1ulLOiXJzCNZxduTIosN17b87h3bvG9yHMoHaRuo88H4mQ06Aodj5VtYGGGiTg==", "dev": true, "requires": { "regenerate": "^1.4.0", @@ -11943,15 +10905,15 @@ } }, "regjsgen": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.0.tgz", - "integrity": "sha512-RnIrLhrXCX5ow/E5/Mh2O4e/oa1/jW0eaBKTSy3LaCj+M3Bqvm97GWDp2yUtzIs4LEn65zR2yiYGFqb2ApnzDA==", + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.1.tgz", + "integrity": "sha512-5qxzGZjDs9w4tzT3TPhCJqWdCc3RLYwy9J2NB0nm5Lz+S273lvWcpjaTGHsT1dc6Hhfq41uSEOw8wBmxrKOuyg==", "dev": true }, "regjsparser": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.0.tgz", - "integrity": "sha512-RQ7YyokLiQBomUJuUG8iGVvkgOLxwyZM8k6d3q5SAXpg4r5TZJZigKFvC6PpD+qQ98bCDC5YelPeA3EucDoNeQ==", + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.2.tgz", + "integrity": "sha512-E9ghzUtoLwDekPT0DYCp+c4h+bvuUpe6rRHCTYn6eGoqj1LgKXxT6I0Il4WbjhQkOghzi/V+y03bPKvbllL93Q==", "dev": true, "requires": { "jsesc": "~0.5.0" @@ -12049,9 +11011,9 @@ "dev": true }, "repeat-element": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz", - "integrity": "sha1-7wiaF40Ug7quTZPrmLT55OEdmQo=", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", + "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==", "dev": true }, "repeat-string": { @@ -12092,127 +11054,33 @@ "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==", "dev": true, "requires": { - "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "har-validator": "~5.1.0", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "oauth-sign": "~0.9.0", - "performance-now": "^2.1.0", - "qs": "~6.5.2", - "safe-buffer": "^5.1.2", - "tough-cookie": "~2.4.3", - "tunnel-agent": "^0.6.0", - "uuid": "^3.3.2" - }, - "dependencies": { - "aws4": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz", - "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==", - "dev": true - }, - "extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", - "dev": true - }, - "fast-deep-equal": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", - "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=", - "dev": true - }, - "har-validator": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.0.tgz", - "integrity": "sha512-+qnmNjI4OfH2ipQ9VQOw23bBd/ibtfbVdK2fYbY4acTDqKTW/YDp9McimZdDbG8iV9fZizUqQMD5xvriB146TA==", - "dev": true, - "requires": { - "ajv": "^5.3.0", - "har-schema": "^2.0.0" - }, - "dependencies": { - "ajv": { - "version": "5.5.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", - "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", - "dev": true, - "requires": { - "co": "^4.6.0", - "fast-deep-equal": "^1.0.0", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.3.0" - } - } - } - }, - "json-schema-traverse": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", - "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=", - "dev": true - }, - "mime-db": { - "version": "1.35.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.35.0.tgz", - "integrity": "sha512-JWT/IcCTsB0Io3AhWUMjRqucrHSPsSf2xKLaRldJVULioggvkJvggZ3VXNNSRkCddE6D+BUI4HEIZIA2OjwIvg==", - "dev": true - }, - "mime-types": { - "version": "2.1.19", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.19.tgz", - "integrity": "sha512-P1tKYHVSZ6uFo26mtnve4HQFE3koh1UWVkp8YUC+ESBHe945xWSoXuHHiGarDqcEZ+whpCDnlNw5LON0kLo+sw==", - "dev": true, - "requires": { - "mime-db": "~1.35.0" - } - }, - "oauth-sign": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", - "dev": true - }, + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.0", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.4.3", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" + }, + "dependencies": { "qs": { "version": "6.5.2", "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", "dev": true - }, - "tough-cookie": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz", - "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==", - "dev": true, - "requires": { - "psl": "^1.1.24", - "punycode": "^1.4.1" - } - }, - "tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", - "dev": true, - "requires": { - "safe-buffer": "^5.0.1" - } - }, - "uuid": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", - "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==", - "dev": true } } }, @@ -12243,6 +11111,17 @@ "nested-error-stacks": "~2.0.1", "rc": "~1.2.7", "resolve": "~1.7.1" + }, + "dependencies": { + "resolve": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.7.1.tgz", + "integrity": "sha512-c7rwLofp8g1U+h1KNyHL/jicrKg1Ek4q+Lr33AL65uZTinUZHe30D5HlyN5V9NW0JX1D5dXQ4jqW5l7Sy/kGfw==", + "dev": true, + "requires": { + "path-parse": "^1.0.5" + } + } } }, "requires-port": { @@ -12252,12 +11131,12 @@ "dev": true }, "resolve": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.7.1.tgz", - "integrity": "sha512-c7rwLofp8g1U+h1KNyHL/jicrKg1Ek4q+Lr33AL65uZTinUZHe30D5HlyN5V9NW0JX1D5dXQ4jqW5l7Sy/kGfw==", + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.14.1.tgz", + "integrity": "sha512-fn5Wobh4cxbLzuHaE+nphztHy43/b++4M6SsGFC2gB8uYwf0C8LcarfCz1un7UTW8OFQg9iNjZ4xpcFVGebDPg==", "dev": true, "requires": { - "path-parse": "^1.0.5" + "path-parse": "^1.0.6" } }, "resolve-dir": { @@ -12271,9 +11150,9 @@ } }, "resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", + "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", "dev": true }, "resolve-options": { @@ -12299,6 +11178,23 @@ "requires": { "debug": "^2.2.0", "minimatch": "^3.0.2" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } } }, "responselike": { @@ -12311,12 +11207,12 @@ } }, "restore-cursor": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", - "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", "dev": true, "requires": { - "onetime": "^2.0.0", + "onetime": "^5.1.0", "signal-exit": "^3.0.2" } }, @@ -12351,12 +11247,12 @@ "dev": true }, "rimraf": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", - "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", + "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", "dev": true, "requires": { - "glob": "^7.0.5" + "glob": "^7.1.3" } }, "run-async": { @@ -12513,9 +11409,9 @@ } }, "semver": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz", - "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==", + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", "dev": true }, "semver-diff": { @@ -12580,6 +11476,15 @@ "statuses": "~1.4.0" }, "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, "http-errors": { "version": "1.6.3", "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", @@ -12592,6 +11497,18 @@ "statuses": ">= 1.4.0 < 2" } }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, "setprototypeof": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", @@ -12621,6 +11538,15 @@ "parseurl": "~1.3.2" }, "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, "http-errors": { "version": "1.6.3", "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", @@ -12633,6 +11559,18 @@ "statuses": ">= 1.4.0 < 2" } }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, "setprototypeof": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", @@ -12739,9 +11677,9 @@ } }, "sisteransi": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.3.tgz", - "integrity": "sha512-SbEG75TzH8G7eVXFSN5f9EExILKfly7SUvVY5DhhYLvfhKqhDFY0OzevWa/zwak0RLRfWS5AvfMWpd9gJvr5Yg==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.4.tgz", + "integrity": "sha512-/ekMoM4NJ59ivGSfKapeG+FWtrmWvA1p6FBZwXrqojw90vJu8lBmrTxCMuBCydKtkaUe2zt4PlxeTKpjwMbyig==", "dev": true }, "slash": { @@ -12770,9 +11708,9 @@ } }, "smart-buffer": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.0.2.tgz", - "integrity": "sha512-JDhEpTKzXusOqXZ0BUIdH+CjFdO/CR3tLlf5CN34IypI+xMmXW1uB16OOY8z3cICbJlDAVJzNbwBhNO0wt9OAw==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.1.0.tgz", + "integrity": "sha512-iVICrxOzCynf/SNaBQCw34eM9jROU/s5rzIhpOvzhzuYHfJR/DhZfDkXiZSgKXfgv26HT3Yni3AV/DGw0cGnnw==", "dev": true }, "snapdragon": { @@ -12791,6 +11729,15 @@ "use": "^3.1.0" }, "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, "define-property": { "version": "0.2.5", "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", @@ -12809,10 +11756,10 @@ "is-extendable": "^0.1.0" } }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", "dev": true } } @@ -12865,18 +11812,6 @@ "is-data-descriptor": "^1.0.0", "kind-of": "^6.0.2" } - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - }, - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "dev": true } } }, @@ -12887,6 +11822,17 @@ "dev": true, "requires": { "kind-of": "^3.2.0" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } } }, "socket.io": { @@ -12931,6 +11877,25 @@ "yeast": "0.1.2" } }, + "engine.io-parser": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-2.1.3.tgz", + "integrity": "sha512-6HXPre2O4Houl7c4g7Ic/XzPnHBvaEmN90vtRO9uLmwtRqQmTOw0QMevL1TOfL2Cpu1VzsaTmMotQgMdkzGkVA==", + "dev": true, + "requires": { + "after": "0.8.2", + "arraybuffer.slice": "~0.0.7", + "base64-arraybuffer": "0.1.5", + "blob": "0.0.5", + "has-binary2": "~1.0.2" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, "socket.io-client": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-2.1.1.tgz", @@ -12978,23 +11943,23 @@ } }, "socket.io-adapter": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-1.1.1.tgz", - "integrity": "sha1-KoBeihTWNyEk3ZFZrUUC+MsH8Gs=", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-1.1.2.tgz", + "integrity": "sha512-WzZRUj1kUjrTIrUKpZLEzFZ1OLj5FwLlAFQs9kuZJzJi5DKdU7FsWc36SNmA8iDOtwBQyT8FkrriRM8vXLYz8g==", "dev": true }, "socket.io-client": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-2.2.0.tgz", - "integrity": "sha512-56ZrkTDbdTLmBIyfFYesgOxsjcLnwAKoN4CiPyTVkMQj3zTUh0QAx3GbvIvLpFEOvQWu92yyWICxB0u7wkVbYA==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-2.3.0.tgz", + "integrity": "sha512-cEQQf24gET3rfhxZ2jJ5xzAOo/xhZwK+mOqtGRg5IowZsMgwvHwnf/mCRapAAkadhM26y+iydgwsXGObBB5ZdA==", "dev": true, "requires": { "backo2": "1.0.2", "base64-arraybuffer": "0.1.5", "component-bind": "1.0.0", "component-emitter": "1.2.1", - "debug": "~3.1.0", - "engine.io-client": "~3.3.1", + "debug": "~4.1.0", + "engine.io-client": "~3.4.0", "has-binary2": "~1.0.2", "has-cors": "1.1.0", "indexof": "0.0.1", @@ -13003,17 +11968,6 @@ "parseuri": "0.0.5", "socket.io-parser": "~3.3.0", "to-array": "0.1.4" - }, - "dependencies": { - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - } } }, "socket.io-parser": { @@ -13035,17 +11989,23 @@ "requires": { "ms": "2.0.0" } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true } } }, "socks": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/socks/-/socks-2.3.2.tgz", - "integrity": "sha512-pCpjxQgOByDHLlNqlnh/mNSAxIUkyBBuwwhTcV+enZGbDaClPvHdvm6uvOwZfFJkam7cGhBNbb4JxiP8UZkRvQ==", + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.3.3.tgz", + "integrity": "sha512-o5t52PCNtVdiOvzMry7wU4aOqYWL0PeCXRWBEiJow4/i/wr+wpsJQ9awEu1EonLIqsfGd5qSgDdxEOvCdmBEpA==", "dev": true, "requires": { - "ip": "^1.1.5", - "smart-buffer": "4.0.2" + "ip": "1.1.5", + "smart-buffer": "^4.1.0" } }, "socks-proxy-agent": { @@ -13090,18 +12050,18 @@ } }, "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", "dev": true }, "source-map-resolve": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz", - "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==", + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", + "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", "dev": true, "requires": { - "atob": "^2.1.1", + "atob": "^2.1.2", "decode-uri-component": "^0.2.0", "resolve-url": "^0.2.1", "source-map-url": "^0.4.0", @@ -13127,9 +12087,9 @@ "dev": true }, "spdx-correct": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.0.0.tgz", - "integrity": "sha512-N19o9z5cEyc8yQQPukRCZ9EUmb4HUpnrmaL/fxS2pBo2jbfcFRVuFZ/oFC+vZz0MNNk0h80iMn5/S6qGZOL5+g==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.0.tgz", + "integrity": "sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q==", "dev": true, "requires": { "spdx-expression-parse": "^3.0.0", @@ -13137,9 +12097,9 @@ } }, "spdx-exceptions": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.1.0.tgz", - "integrity": "sha512-4K1NsmrlCU1JJgUrtgEeTVyfx8VaYea9J9LvARxhbHtVtohPs/gFGG5yy49beySjlIMhhXZ4QqujIZEfS4l6Cg==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz", + "integrity": "sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA==", "dev": true }, "spdx-expression-parse": { @@ -13153,9 +12113,9 @@ } }, "spdx-license-ids": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.0.tgz", - "integrity": "sha512-2+EPwgbnmOIl8HjGBXXMd9NAu02vLjOO1nWw4kmeRDFyHn+M/ETfHxQUK0oXg8ctgVnl9t3rosNVsZ1jG61nDA==", + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz", + "integrity": "sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q==", "dev": true }, "specificity": { @@ -13222,9 +12182,9 @@ } }, "sshpk": { - "version": "1.14.2", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.14.2.tgz", - "integrity": "sha1-xvxhZIo9nE52T9P8306hBeSSupg=", + "version": "1.16.1", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", + "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", "dev": true, "requires": { "asn1": "~0.2.3", @@ -13239,12 +12199,13 @@ } }, "ssri": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.1.tgz", - "integrity": "sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-7.1.0.tgz", + "integrity": "sha512-77/WrDZUWocK0mvA5NTRQyveUf+wsrIc6vyrxpS8tVvYBcX215QbafrJR3KtkpskIzoFLqqNuuYQvxaMjXJ/0g==", "dev": true, "requires": { - "figgy-pudding": "^3.5.1" + "figgy-pudding": "^3.5.1", + "minipass": "^3.1.1" } }, "stable": { @@ -13301,16 +12262,6 @@ "readable-stream": "^2.0.1" } }, - "stream-each": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/stream-each/-/stream-each-1.2.3.tgz", - "integrity": "sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==", - "dev": true, - "requires": { - "end-of-stream": "^1.1.0", - "stream-shift": "^1.0.0" - } - }, "stream-exhaust": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/stream-exhaust/-/stream-exhaust-1.0.2.tgz", @@ -13318,9 +12269,9 @@ "dev": true }, "stream-shift": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.0.tgz", - "integrity": "sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI=", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz", + "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==", "dev": true }, "stream-throttle": { @@ -13351,6 +12302,26 @@ "strip-ansi": "^3.0.0" } }, + "string.prototype.trimleft": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.1.tgz", + "integrity": "sha512-iu2AGd3PuP5Rp7x2kEZCrB2Nf41ehzh+goo8TV7z8/XDBbsvc6HQIlUl9RjkZ4oyrW1XM5UwlGl1oVEaDjg6Ag==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "function-bind": "^1.1.1" + } + }, + "string.prototype.trimright": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1.1.tgz", + "integrity": "sha512-qFvWL3/+QIgZXVmJBfpHmxLB7xsUXz6HsUmP8+5dRaC3Q7oKUv9Vo6aMCRZC1smrtyECFsIT30PqBJ1gTjAs+g==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "function-bind": "^1.1.1" + } + }, "string_decoder": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", @@ -13468,15 +12439,15 @@ } }, "stylelint": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-11.0.0.tgz", - "integrity": "sha512-esKkG7CUXI5yr4jgCNuwjiiV6NJ4BpodB0e47oFvUBaHgpiXXHRPOajpb0IXL7Ucpk+X3dcrlPxVHpmJ5XUDwg==", + "version": "12.0.1", + "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-12.0.1.tgz", + "integrity": "sha512-1mn39pqZiC/e8KUPoRMc1WMM83Upb2ILaSGxkCvKxALHutEOs2txcPQocJiXdO4Zx4FY4prGqjlkwrbthAxqig==", "dev": true, "requires": { - "autoprefixer": "^9.5.1", + "autoprefixer": "^9.7.1", "balanced-match": "^1.0.0", - "chalk": "^2.4.2", - "cosmiconfig": "^5.2.0", + "chalk": "^3.0.0", + "cosmiconfig": "^6.0.0", "debug": "^4.1.1", "execall": "^2.0.0", "file-entry-cache": "^5.0.1", @@ -13484,19 +12455,19 @@ "global-modules": "^2.0.0", "globby": "^9.2.0", "globjoin": "^0.1.4", - "html-tags": "^3.0.0", - "ignore": "^5.0.6", + "html-tags": "^3.1.0", + "ignore": "^5.1.4", "import-lazy": "^4.0.0", "imurmurhash": "^0.1.4", - "known-css-properties": "^0.15.0", + "known-css-properties": "^0.17.0", "leven": "^3.1.0", - "lodash": "^4.17.14", + "lodash": "^4.17.15", "log-symbols": "^3.0.0", - "mathml-tag-names": "^2.1.0", + "mathml-tag-names": "^2.1.1", "meow": "^5.0.0", - "micromatch": "^4.0.0", + "micromatch": "^4.0.2", "normalize-selector": "^0.2.0", - "postcss": "^7.0.14", + "postcss": "^7.0.21", "postcss-html": "^0.36.0", "postcss-jsx": "^0.36.3", "postcss-less": "^3.1.4", @@ -13505,37 +12476,53 @@ "postcss-reporter": "^6.0.1", "postcss-resolve-nested-selector": "^0.1.1", "postcss-safe-parser": "^4.0.1", - "postcss-sass": "^0.4.1", + "postcss-sass": "^0.4.2", "postcss-scss": "^2.0.0", "postcss-selector-parser": "^3.1.0", "postcss-syntax": "^0.36.2", "postcss-value-parser": "^4.0.2", "resolve-from": "^5.0.0", - "signal-exit": "^3.0.2", "slash": "^3.0.0", "specificity": "^0.4.1", - "string-width": "^4.1.0", - "strip-ansi": "^5.2.0", + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", "style-search": "^0.1.0", "sugarss": "^2.0.0", "svg-tags": "^1.0.0", - "table": "^5.2.3", - "v8-compile-cache": "^2.1.0" + "table": "^5.4.6", + "v8-compile-cache": "^2.1.0", + "write-file-atomic": "^3.0.1" }, "dependencies": { + "@nodelib/fs.stat": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz", + "integrity": "sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw==", + "dev": true + }, "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", "dev": true }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "ansi-styles": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", + "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", "dev": true, "requires": { - "fill-range": "^7.0.1" + "@types/color-name": "^1.1.1", + "color-convert": "^2.0.1" + } + }, + "array-union": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", + "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", + "dev": true, + "requires": { + "array-uniq": "^1.0.1" } }, "camelcase": { @@ -13556,35 +12543,41 @@ } }, "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", "dev": true, "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" } }, - "cosmiconfig": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz", - "integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==", + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "requires": { - "import-fresh": "^2.0.0", - "is-directory": "^0.3.1", - "js-yaml": "^3.13.1", - "parse-json": "^4.0.0" + "color-name": "~1.1.4" } }, - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "cosmiconfig": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-6.0.0.tgz", + "integrity": "sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==", "dev": true, "requires": { - "ms": "^2.1.1" + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.1.0", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.7.2" } }, "dir-glob": { @@ -13594,13 +12587,61 @@ "dev": true, "requires": { "path-type": "^3.0.0" + }, + "dependencies": { + "path-type": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", + "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", + "dev": true, + "requires": { + "pify": "^3.0.0" + } + }, + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + } } }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true + "fast-glob": { + "version": "2.2.7", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-2.2.7.tgz", + "integrity": "sha512-g1KuQwHOZAmOZMuBtHdxDtju+T2RT8jgCC9aANsbpdiDDTSnjgfuVsIBNKbUeJI3oKMRExcfNDtJl4OhbffMsw==", + "dev": true, + "requires": { + "@mrmlnc/readdir-enhanced": "^2.2.1", + "@nodelib/fs.stat": "^1.1.2", + "glob-parent": "^3.1.0", + "is-glob": "^4.0.0", + "merge2": "^1.2.3", + "micromatch": "^3.1.10" + }, + "dependencies": { + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + } + } + } }, "fill-range": { "version": "7.0.1", @@ -13676,6 +12717,12 @@ } } }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, "ignore": { "version": "5.1.4", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.4.tgz", @@ -13683,19 +12730,19 @@ "dev": true }, "import-fresh": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz", - "integrity": "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.1.tgz", + "integrity": "sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ==", "dev": true, "requires": { - "caller-path": "^2.0.0", - "resolve-from": "^3.0.0" + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" }, "dependencies": { "resolve-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", - "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", "dev": true } } @@ -13724,12 +12771,6 @@ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true }, - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "dev": true - }, "load-json-file": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", @@ -13742,6 +12783,16 @@ "strip-bom": "^3.0.0" }, "dependencies": { + "parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "dev": true, + "requires": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + } + }, "pify": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", @@ -13760,12 +12811,6 @@ "path-exists": "^3.0.0" } }, - "lodash": { - "version": "4.17.15", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", - "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", - "dev": true - }, "map-obj": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-2.0.0.tgz", @@ -13797,14 +12842,19 @@ "requires": { "braces": "^3.0.1", "picomatch": "^2.0.5" + }, + "dependencies": { + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + } } }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, "p-limit": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", @@ -13830,13 +12880,15 @@ "dev": true }, "parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.0.0.tgz", + "integrity": "sha512-OOY5b7PAEFV0E2Fir1KOkxchnZNCdowAJgQ5NuxjpBKTRP3pQhwkrkxqQjeoKJ+fO7bCpmIZaogI4eZGDMEGOw==", "dev": true, "requires": { + "@babel/code-frame": "^7.0.0", "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" + "json-parse-better-errors": "^1.0.1", + "lines-and-columns": "^1.1.6" } }, "path-exists": { @@ -13846,43 +12898,16 @@ "dev": true }, "path-type": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", - "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", - "dev": true, - "requires": { - "pify": "^3.0.0" - }, - "dependencies": { - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true - } - } + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true }, - "postcss": { - "version": "7.0.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.18.tgz", - "integrity": "sha512-/7g1QXXgegpF+9GJj4iN7ChGF40sYuGYJ8WZu8DZWnmhQ/G36hfdk3q9LBJmoK+lZ+yzZ5KYpOoxq7LF1BxE8g==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - }, - "dependencies": { - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } + "pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true }, "postcss-selector-parser": { "version": "3.1.1", @@ -13895,12 +12920,6 @@ "uniq": "^1.0.1" } }, - "postcss-value-parser": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.0.2.tgz", - "integrity": "sha512-LmeoohTpp/K4UiyQCwuGWlONxXamGzCMtFxLq4W1nZVGIQLYvMCJx3yAF9qyyuFpflABI9yVdtJAqbihOsCsJQ==", - "dev": true - }, "read-pkg": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", @@ -13910,6 +12929,23 @@ "load-json-file": "^4.0.0", "normalize-package-data": "^2.3.2", "path-type": "^3.0.0" + }, + "dependencies": { + "path-type": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", + "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", + "dev": true, + "requires": { + "pify": "^3.0.0" + } + }, + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + } } }, "read-pkg-up": { @@ -13939,23 +12975,23 @@ "dev": true }, "string-width": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.1.0.tgz", - "integrity": "sha512-NrX+1dVVh+6Y9dnQ19pR0pP4FiEIlUvdTGn8pw6CKTNq5sgib2nIhmUNT5TAmhWmvKr3WcxBcP3E8nWezuipuQ==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", + "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", "dev": true, "requires": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^5.2.0" + "strip-ansi": "^6.0.0" } }, "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", "dev": true, "requires": { - "ansi-regex": "^4.1.0" + "ansi-regex": "^5.0.0" } }, "strip-bom": { @@ -13970,6 +13006,15 @@ "integrity": "sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g=", "dev": true }, + "supports-color": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", + "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, "to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -13985,19 +13030,16 @@ "integrity": "sha1-tAPQuRvlDDMd/EuC7s6yLD3hbSA=", "dev": true }, - "v8-compile-cache": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.1.0.tgz", - "integrity": "sha512-usZBT3PW+LOjM25wbqIlZwPeJV+3OSz3M1k1Ws8snlW39dZyYL9lOGC5FgPVHfk0jKmjiDV8Z0mIbVQPiwFs7g==", - "dev": true - }, - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "write-file-atomic": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.1.tgz", + "integrity": "sha512-JPStrIyyVJ6oCSz/691fAjFtefZ6q+fP6tm+OS4Qw6o+TGQxNp1ziY2PgS+X/m0V8OWhZiO/m4xSj+Pr4RrZvw==", "dev": true, "requires": { - "isexe": "^2.0.0" + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" } }, "yargs-parser": { @@ -14012,42 +13054,44 @@ } }, "stylelint-config-recommended": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/stylelint-config-recommended/-/stylelint-config-recommended-2.2.0.tgz", - "integrity": "sha512-bZ+d4RiNEfmoR74KZtCKmsABdBJr4iXRiCso+6LtMJPw5rd/KnxUWTxht7TbafrTJK1YRjNgnN0iVZaJfc3xJA==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/stylelint-config-recommended/-/stylelint-config-recommended-3.0.0.tgz", + "integrity": "sha512-F6yTRuc06xr1h5Qw/ykb2LuFynJ2IxkKfCMf+1xqPffkxh0S09Zc902XCffcsw/XMFq/OzQ1w54fLIDtmRNHnQ==", "dev": true }, "stylelint-config-recommended-scss": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/stylelint-config-recommended-scss/-/stylelint-config-recommended-scss-3.3.0.tgz", - "integrity": "sha512-BvuuLYwoet8JutOP7K1a8YaiENN+0HQn390eDi0SWe1h7Uhx6O3GUQ6Ubgie9b/AmHX4Btmp+ZzVGbzriFTBcA==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/stylelint-config-recommended-scss/-/stylelint-config-recommended-scss-4.1.0.tgz", + "integrity": "sha512-4012ca0weVi92epm3RRBRZcRJIyl5vJjJ/tJAKng+Qat5+cnmuCwyOI2vXkKdjNfGd0gvzyKCKEkvTMDcbtd7Q==", "dev": true, "requires": { - "stylelint-config-recommended": "^2.2.0" + "stylelint-config-recommended": "^3.0.0" } }, "stylelint-config-wordpress": { - "version": "14.0.0", - "resolved": "https://registry.npmjs.org/stylelint-config-wordpress/-/stylelint-config-wordpress-14.0.0.tgz", - "integrity": "sha512-Qo5I9Qa3yOy2AF+DwL9wjdNSm10ykT4lM+JvnCMDT2VBOl+5yMgpbQ9Xaa0gQXeCdcHdLprtmkBbrvDqf6DWSg==", + "version": "16.0.0", + "resolved": "https://registry.npmjs.org/stylelint-config-wordpress/-/stylelint-config-wordpress-16.0.0.tgz", + "integrity": "sha512-fu8F2a3DTHjo7Id4rUbua2FprieKBDQ+jQ67XVBMsys8YyBjOd/CdcCRiWQug4sA1/A41lq0JlD2gOlR0dWmpw==", "dev": true, "requires": { - "stylelint-config-recommended": "^2.2.0", - "stylelint-config-recommended-scss": "^3.2.0", - "stylelint-scss": "^3.6.0" + "stylelint-config-recommended": "^3.0.0", + "stylelint-config-recommended-scss": "^4.1.0", + "stylelint-scss": "^3.13.0" } }, "stylelint-scss": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/stylelint-scss/-/stylelint-scss-3.6.1.tgz", - "integrity": "sha512-6bB2EHUZsE/bDVKUdzBXqOcfgXmg3zq9Lglgbu16EqMa4PM8Y48XKcB8coOj8CKr07GtlqtOdCNA2E5njoI9Kw==", + "version": "3.13.0", + "resolved": "https://registry.npmjs.org/stylelint-scss/-/stylelint-scss-3.13.0.tgz", + "integrity": "sha512-SaLnvQyndaPcsgVJsMh6zJ1uKVzkRZJx+Wg/stzoB1mTBdEmGketbHrGbMQNymzH/0mJ06zDSpeCDvNxqIJE5A==", "dev": true, "requires": { - "lodash": "^4.17.11", + "lodash.isboolean": "^3.0.3", + "lodash.isregexp": "^4.0.1", + "lodash.isstring": "^4.0.1", "postcss-media-query-parser": "^0.2.3", "postcss-resolve-nested-selector": "^0.1.1", "postcss-selector-parser": "^6.0.2", - "postcss-value-parser": "^3.3.1" + "postcss-value-parser": "^4.0.2" }, "dependencies": { "cssesc": { @@ -14079,9 +13123,9 @@ } }, "supports-color": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", - "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, "requires": { "has-flag": "^3.0.0" @@ -14104,18 +13148,17 @@ "dev": true }, "svgo": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.2.2.tgz", - "integrity": "sha512-rAfulcwp2D9jjdGu+0CuqlrAUin6bBWrpoqXWwKDZZZJfXcUXQSxLJOFJCQCSA0x0pP2U0TxSlJu2ROq5Bq6qA==", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.3.2.tgz", + "integrity": "sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw==", "dev": true, "requires": { "chalk": "^2.4.1", "coa": "^2.0.2", "css-select": "^2.0.0", "css-select-base-adapter": "^0.1.1", - "css-tree": "1.0.0-alpha.28", - "css-url-regex": "^1.1.0", - "csso": "^3.5.1", + "css-tree": "1.0.0-alpha.37", + "csso": "^4.0.2", "js-yaml": "^3.13.1", "mkdirp": "~0.5.1", "object.values": "^1.1.0", @@ -14123,63 +13166,6 @@ "stable": "^0.1.8", "unquote": "~1.1.1", "util.promisify": "~1.0.0" - }, - "dependencies": { - "css-select": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-2.0.2.tgz", - "integrity": "sha512-dSpYaDVoWaELjvZ3mS6IKZM/y2PMPa/XYoEfYNZePL4U/XgyxZNroHEHReDx/d+VgXh9VbCTtFqLkFbmeqeaRQ==", - "dev": true, - "requires": { - "boolbase": "^1.0.0", - "css-what": "^2.1.2", - "domutils": "^1.7.0", - "nth-check": "^1.0.2" - } - }, - "css-select-base-adapter": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz", - "integrity": "sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w==", - "dev": true - }, - "css-what": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.3.tgz", - "integrity": "sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg==", - "dev": true - }, - "domutils": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", - "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", - "dev": true, - "requires": { - "dom-serializer": "0", - "domelementtype": "1" - } - }, - "nth-check": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", - "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", - "dev": true, - "requires": { - "boolbase": "~1.0.0" - } - }, - "object.values": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.0.tgz", - "integrity": "sha512-8mf0nKLAoFX6VlNVdhGj31SVYpaNFtUnuoOXWyFEstsWRgU837AK+JYM0iAxwkSzGRbwn8cbFmgbyxj1j4VbXg==", - "dev": true, - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.12.0", - "function-bind": "^1.1.1", - "has": "^1.0.3" - } - } } }, "symbol-observable": { @@ -14189,9 +13175,9 @@ "dev": true }, "table": { - "version": "5.4.4", - "resolved": "https://registry.npmjs.org/table/-/table-5.4.4.tgz", - "integrity": "sha512-IIfEAUx5QlODLblLrGTTLJA7Tk0iLSGBvgY8essPRVNGHAzThujww1YqHLs6h3HfTg55h++RzLHH5Xw/rfv+mg==", + "version": "5.4.6", + "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz", + "integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==", "dev": true, "requires": { "ajv": "^6.10.2", @@ -14206,18 +13192,18 @@ "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", "dev": true }, + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, "is-fullwidth-code-point": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", "dev": true }, - "lodash": { - "version": "4.17.15", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", - "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", - "dev": true - }, "string-width": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", @@ -14344,12 +13330,12 @@ "dev": true }, "through2": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", - "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=", + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", "dev": true, "requires": { - "readable-stream": "^2.1.5", + "readable-stream": "~2.3.6", "xtend": "~4.0.1" } }, @@ -14393,19 +13379,6 @@ "requires": { "es5-ext": "~0.10.46", "next-tick": "1" - }, - "dependencies": { - "es5-ext": { - "version": "0.10.49", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.49.tgz", - "integrity": "sha512-3NMEhi57E31qdzmYp2jwRArIUsj1HI/RxbQ4bgnSB+AIKIxsAmTiK83bYMifIcpWvEc3P1X30DhUKOqEtF/kvg==", - "dev": true, - "requires": { - "es6-iterator": "~2.0.3", - "es6-symbol": "~3.1.1", - "next-tick": "^1.0.0" - } - } } }, "timsort": { @@ -14459,6 +13432,17 @@ "dev": true, "requires": { "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } } }, "to-readable-stream": { @@ -14487,17 +13471,6 @@ "requires": { "is-number": "^3.0.0", "repeat-string": "^1.6.1" - }, - "dependencies": { - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - } - } } }, "to-through": { @@ -14515,6 +13488,24 @@ "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==", "dev": true }, + "tough-cookie": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz", + "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==", + "dev": true, + "requires": { + "psl": "^1.1.24", + "punycode": "^1.4.1" + }, + "dependencies": { + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", + "dev": true + } + } + }, "trim": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/trim/-/trim-0.0.1.tgz", @@ -14537,12 +13528,6 @@ "escape-string-regexp": "^1.0.2" } }, - "trim-right": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz", - "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=", - "dev": true - }, "trim-trailing-lines": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/trim-trailing-lines/-/trim-trailing-lines-1.1.2.tgz", @@ -14575,7 +13560,6 @@ "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", "dev": true, - "optional": true, "requires": { "safe-buffer": "^5.0.1" } @@ -14584,8 +13568,13 @@ "version": "0.14.5", "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", - "dev": true, - "optional": true + "dev": true + }, + "type": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", + "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==", + "dev": true }, "type-check": { "version": "0.3.2", @@ -14597,9 +13586,9 @@ } }, "type-fest": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.3.1.tgz", - "integrity": "sha512-cUGJnCdr4STbePCgqNFbpVNCepa+kAVohJs1sLhxzdH+gnEoOd8VhbYa7pD3zZYGiURWM2xzEII3fQcRizDkYQ==", + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", "dev": true }, "typedarray": { @@ -14608,6 +13597,15 @@ "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", "dev": true }, + "typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "dev": true, + "requires": { + "is-typedarray": "^1.0.0" + } + }, "ua-parser-js": { "version": "0.7.17", "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.17.tgz", @@ -14615,19 +13613,19 @@ "dev": true }, "uglify-js": { - "version": "3.4.10", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.4.10.tgz", - "integrity": "sha512-Y2VsbPVs0FIshJztycsO2SfPk7/KAF/T72qzv9u5EpQ4kB2hQoHlhNQTsNyy6ul7lQtqJN/AoWeS23OzEiEFxw==", + "version": "3.7.3", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.7.3.tgz", + "integrity": "sha512-7tINm46/3puUA4hCkKYo4Xdts+JDaVC9ZPRcG8Xw9R4nhO/gZgUM3TENq8IF4Vatk8qCig4MzP/c8G4u2BkVQg==", "dev": true, "requires": { - "commander": "~2.19.0", + "commander": "~2.20.3", "source-map": "~0.6.1" }, "dependencies": { - "commander": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.19.0.tgz", - "integrity": "sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg==", + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true } } @@ -14794,9 +13792,9 @@ } }, "unist-util-find-all-after": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/unist-util-find-all-after/-/unist-util-find-all-after-1.0.4.tgz", - "integrity": "sha512-CaxvMjTd+yF93BKLJvZnEfqdM7fgEACsIpQqz8vIj9CJnUb9VpyymFS3tg6TCtgrF7vfCJBF5jbT2Ox9CBRYRQ==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/unist-util-find-all-after/-/unist-util-find-all-after-1.0.5.tgz", + "integrity": "sha512-lWgIc3rrTMTlK1Y0hEuL+k+ApzFk78h+lsaa2gHf63Gp5Ww+mt11huDniuaoq1H+XMK2lIIjjPkncxXcDp3QDw==", "dev": true, "requires": { "unist-util-is": "^3.0.0" @@ -14809,19 +13807,22 @@ "dev": true }, "unist-util-remove-position": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-1.1.3.tgz", - "integrity": "sha512-CtszTlOjP2sBGYc2zcKA/CvNdTdEs3ozbiJ63IPBxh8iZg42SCCb8m04f8z2+V1aSk5a7BxbZKEdoDjadmBkWA==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-1.1.4.tgz", + "integrity": "sha512-tLqd653ArxJIPnKII6LMZwH+mb5q+n/GtXQZo6S6csPRs5zB0u79Yw8ouR3wTw8wxvdJFhpP6Y7jorWdCgLO0A==", "dev": true, "requires": { "unist-util-visit": "^1.1.0" } }, "unist-util-stringify-position": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-1.1.2.tgz", - "integrity": "sha512-pNCVrk64LZv1kElr0N1wPiHEUoXNVFERp+mlTg/s9R5Lwg87f9bM/3sQB99w+N9D/qnM9ar3+AKDBwo/gm/iQQ==", - "dev": true + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-2.0.2.tgz", + "integrity": "sha512-nK5n8OGhZ7ZgUwoUbL8uiVRwAbZyzBsB/Ddrlbu6jwwubFza4oe15KlyEaLNMXQW1svOQq4xesUeqA85YrIUQA==", + "dev": true, + "requires": { + "@types/unist": "^2.0.2" + } }, "unist-util-visit": { "version": "1.4.1", @@ -14902,19 +13903,13 @@ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", "dev": true - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true } } }, "upath": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/upath/-/upath-1.1.2.tgz", - "integrity": "sha512-kXpym8nmDmlCBr7nKdIx8P2jNBa+pBpIUFRnKJ4dr8htyYGJFokkr2ZvERRtUN+9SY+JqXouNgUPtv6JQva/2Q==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", + "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", "dev": true }, "update-notifier": { @@ -14952,14 +13947,6 @@ "dev": true, "requires": { "punycode": "^2.1.0" - }, - "dependencies": { - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "dev": true - } } }, "urix": { @@ -14986,21 +13973,10 @@ "optional": true }, "use": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/use/-/use-3.1.0.tgz", - "integrity": "sha512-6UJEQM/L+mzC3ZJNM56Q4DFGLX/evKGRg15UJHGB9X5j5Z3AFbgZvjUh2yq/UJUY4U5dh7Fal++XbNg1uzpRAw==", - "dev": true, - "requires": { - "kind-of": "^6.0.2" - }, - "dependencies": { - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "dev": true - } - } + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", + "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", + "dev": true }, "util-deprecate": { "version": "1.0.2", @@ -15028,13 +14004,12 @@ "version": "3.3.3", "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.3.tgz", "integrity": "sha512-pW0No1RGHgzlpHJO1nsVrHKpOEIxkGg1xB+v0ZmdNH5OAeAwzAVrCnI2/6Mtx+Uys6iaylxa+D3g4j63IKKjSQ==", - "dev": true, - "optional": true + "dev": true }, "v8-compile-cache": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.0.3.tgz", - "integrity": "sha512-CNmdbwQMBjwr9Gsmohvm0pbL954tJrNzf6gWL3K+QMQf00PF7ERGrEiLgjuU3mKreLC2MeGhUsNV9ybTbLgd3w==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.1.0.tgz", + "integrity": "sha512-usZBT3PW+LOjM25wbqIlZwPeJV+3OSz3M1k1Ws8snlW39dZyYL9lOGC5FgPVHfk0jKmjiDV8Z0mIbVQPiwFs7g==", "dev": true }, "v8flags": { @@ -15047,9 +14022,9 @@ } }, "validate-npm-package-license": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.3.tgz", - "integrity": "sha512-63ZOUnL4SIXj4L0NixR3L1lcjO38crAbgrTpl28t8jjrfuiOBL5Iygm+60qPs/KsZGzPNg6Smnc/oY16QTjF0g==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", "dev": true, "requires": { "spdx-correct": "^3.0.0", @@ -15101,26 +14076,42 @@ }, "dependencies": { "is-buffer": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.3.tgz", - "integrity": "sha512-U15Q7MXTuZlrbymiz95PJpZxu8IlipAp4dtS3wOdgPXx3mqBnslrWU14kxfHB+Py/+2PVKSr37dMAgM2A4uArw==", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.4.tgz", + "integrity": "sha512-Kq1rokWXOPXWuaMAqZiJW4XxsmD9zGx9q4aePabbn3qCRGedtH7Cm+zV8WETitMfu1wdh+Rvd6w5egwSngUX2A==", "dev": true + }, + "unist-util-stringify-position": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-1.1.2.tgz", + "integrity": "sha512-pNCVrk64LZv1kElr0N1wPiHEUoXNVFERp+mlTg/s9R5Lwg87f9bM/3sQB99w+N9D/qnM9ar3+AKDBwo/gm/iQQ==", + "dev": true + }, + "vfile-message": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-1.1.1.tgz", + "integrity": "sha512-1WmsopSGhWt5laNir+633LszXvZ+Z/lxveBf6yhGsqnQIhlhzooZae7zV6YVM1Sdkw68dtAW3ow0pOdPANugvA==", + "dev": true, + "requires": { + "unist-util-stringify-position": "^1.1.1" + } } } }, "vfile-location": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-2.0.5.tgz", - "integrity": "sha512-Pa1ey0OzYBkLPxPZI3d9E+S4BmvfVwNAAXrrqGbwTVXWaX2p9kM1zZ+n35UtVM06shmWKH4RPRN8KI80qE3wNQ==", + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-2.0.6.tgz", + "integrity": "sha512-sSFdyCP3G6Ka0CEmN83A2YCMKIieHx0EDaj5IDP4g1pa5ZJ4FJDvpO0WODLxo4LUX4oe52gmSCK7Jw4SBghqxA==", "dev": true }, "vfile-message": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-1.1.1.tgz", - "integrity": "sha512-1WmsopSGhWt5laNir+633LszXvZ+Z/lxveBf6yhGsqnQIhlhzooZae7zV6YVM1Sdkw68dtAW3ow0pOdPANugvA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-2.0.2.tgz", + "integrity": "sha512-gNV2Y2fDvDOOqq8bEe7cF3DXU6QgV4uA9zMR2P8tix11l1r7zju3zry3wZ8sx+BEfuO6WQ7z2QzfWTvqHQiwsA==", "dev": true, "requires": { - "unist-util-stringify-position": "^1.1.1" + "@types/unist": "^2.0.0", + "unist-util-stringify-position": "^2.0.0" } }, "vinyl": { @@ -15175,6 +14166,17 @@ "now-and-later": "^2.0.0", "remove-bom-buffer": "^3.0.0", "vinyl": "^2.0.0" + }, + "dependencies": { + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, + "requires": { + "remove-trailing-separator": "^1.0.1" + } + } } }, "vinyl-sourcemaps-apply": { @@ -15184,20 +14186,12 @@ "dev": true, "requires": { "source-map": "^0.5.1" - }, - "dependencies": { - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - } } }, "which": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.0.tgz", - "integrity": "sha512-xcJpopdamTuY5duC/KnTTNBraPK54YwpenP4lzxU8H91GudWpFv38u0CKjclE1Wi2EH2EDz5LRcHcKbCIzqGyg==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", "dev": true, "requires": { "isexe": "^2.0.0" @@ -15266,21 +14260,21 @@ "integrity": "sha1-tDFbtCFKPXBY6+7okuE/ok2YsHU=", "dev": true }, - "wordwrap": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", - "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", + "word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", "dev": true }, "wp-pot": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/wp-pot/-/wp-pot-1.7.1.tgz", - "integrity": "sha512-joAZlF+UnluusrgDfFtQDkpxaqmaAsB/82etbVvmcLKehLIrRT5lJfsLiY4ejpceddcazxnnMYy1tstIsZtHYg==", + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/wp-pot/-/wp-pot-1.8.0.tgz", + "integrity": "sha512-/mAX/emTaZ8IByXLVWHILzP6Epm22kk09S5vaUD20xpirqV6EzTF4Cn5JPivcbanczo6Bb98JR6B/mL8EHHQMA==", "dev": true, "requires": { - "matched": "^3.0.1", + "matched": "^4.0.0", "path-sort": "^0.1.0", - "php-parser": "^3.0.0-prerelease.8" + "php-parser": "^3.0.0-prerelease.9" } }, "wrap-ansi": { @@ -15347,9 +14341,9 @@ "dev": true }, "xtend": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", - "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", "dev": true }, "y18n": { @@ -15364,6 +14358,15 @@ "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", "dev": true }, + "yaml": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.7.2.tgz", + "integrity": "sha512-qXROVp90sb83XtAoqE8bP9RwAkTTZbugRUTm5YeFCBfNRPEp2YzTeqWiz7m5OORHzEvrA/qcGS8hp/E+MMROYw==", + "dev": true, + "requires": { + "@babel/runtime": "^7.6.3" + } + }, "yargs": { "version": "6.4.0", "resolved": "https://registry.npmjs.org/yargs/-/yargs-6.4.0.tgz", diff --git a/package.json b/package.json index e8376952..7cedcbd4 100644 --- a/package.json +++ b/package.json @@ -15,9 +15,9 @@ }, "homepage": "https://github.com/MinnPost/object-sync-for-salesforce#readme", "devDependencies": { - "@babel/core": "^7.6.0", - "@babel/preset-env": "^7.6.0", - "autoprefixer": "^9.6.1", + "@babel/core": "^7.7.7", + "@babel/preset-env": "^7.7.7", + "autoprefixer": "^9.7.3", "browser-sync": "^2.26.7", "css-mqpacker": "^7.0.0", "cssnano": "^4.1.10", @@ -27,20 +27,20 @@ "gulp-babel": "^8.0.0", "gulp-concat": "^2.6.1", "gulp-eslint": "^6.0.0", - "gulp-imagemin": "^6.1.0", + "gulp-imagemin": "^6.2.0", "gulp-plumber": "^1.2.1", "gulp-postcss": "^8.0.0", - "gulp-rename": "^1.4.0", + "gulp-rename": "^2.0.0", "gulp-sass": "^4.0.2", "gulp-sass-glob": "^1.1.0", "gulp-sort": "~2", "gulp-sourcemaps": "^2.6.5", - "gulp-stylelint": "^9.0.0", + "gulp-stylelint": "^11.0.0", "gulp-uglify": "^3.0.2", - "gulp-wp-pot": "^2.3.5", - "npm-check-updates": "^3.1.23", - "stylelint": "^11.0.0", - "stylelint-config-wordpress": "^14.0.0" + "gulp-wp-pot": "^2.3.6", + "npm-check-updates": "^4.0.1", + "stylelint": "^12.0.1", + "stylelint-config-wordpress": "^16.0.0" }, "browserslist": [ "last 2 version", From b1a50782dcd50ad5a845164aad1db743c45efae8 Mon Sep 17 00:00:00 2001 From: Jonathan Stegall Date: Sat, 4 Jan 2020 21:24:38 -0600 Subject: [PATCH 02/27] put the fieldset template into the html so it can be cloned. hide it if there are already rows present. --- assets/css/object-sync-for-salesforce-admin.css | 4 ++-- assets/sass/object-sync-for-salesforce-admin.scss | 4 ++++ templates/admin/fieldmaps-add-edit-clone.php | 15 +++++++-------- 3 files changed, 13 insertions(+), 10 deletions(-) diff --git a/assets/css/object-sync-for-salesforce-admin.css b/assets/css/object-sync-for-salesforce-admin.css index d236d8ce..e668c9ed 100644 --- a/assets/css/object-sync-for-salesforce-admin.css +++ b/assets/css/object-sync-for-salesforce-admin.css @@ -1,2 +1,2 @@ -.settings_page_object-sync-salesforce-admin .form-table td .checkbox{line-height:1.3;margin-bottom:9px}.settings_page_object-sync-salesforce-admin .fieldmap .spinner{display:inline-block;float:none}.settings_page_object-sync-salesforce-admin .fieldmap fieldset{border:1px solid #e1e1e1;margin-bottom:15px;position:relative}.settings_page_object-sync-salesforce-admin .fieldmap .fields{border:0}.settings_page_object-sync-salesforce-admin .fieldmap legend{margin-top:15px;padding-left:12px;position:absolute}.settings_page_object-sync-salesforce-admin .fieldmap .fields>:nth-child(2){padding-top:35px}.settings_page_object-sync-salesforce-admin .fieldmap .sync_triggers>:nth-child(2){padding-top:45px}.settings_page_object-sync-salesforce-admin .fieldmap div{padding:15px 10px}.settings_page_object-sync-salesforce-admin .fieldmap div label{display:inline-block;font-weight:700;margin-bottom:7.5px}.settings_page_object-sync-salesforce-admin .fieldmap div input,.settings_page_object-sync-salesforce-admin .fieldmap div select{display:block}.settings_page_object-sync-salesforce-admin .fieldmap .checkboxes label,.settings_page_object-sync-salesforce-admin .fieldmap .radios label{display:block;font-weight:400}.settings_page_object-sync-salesforce-admin .fieldmap .checkboxes input,.settings_page_object-sync-salesforce-admin .fieldmap .radios input{display:inline-block}.settings_page_object-sync-salesforce-admin .fieldmap table .column-direction{min-width:200px}.settings_page_object-sync-salesforce-admin .fieldmap table td div{padding-left:0;padding-top:0}.settings_page_object-sync-salesforce-admin .select2-drop,.settings_page_object-sync-salesforce-admin .select2-dropdown{z-index:999999!important}.settings_page_object-sync-salesforce-admin .select2-results{line-height:1.5}.settings_page_object-sync-salesforce-admin .select2-results .select2-results__group,.settings_page_object-sync-salesforce-admin .select2-results .select2-results__option{margin:0;padding:8px}.settings_page_object-sync-salesforce-admin .select2-results .description{display:block;padding-top:4px}.settings_page_object-sync-salesforce-admin .select2-dropdown{border-color:#ddd}.settings_page_object-sync-salesforce-admin .select2-dropdown--below{box-shadow:0 1px 1px rgba(0,0,0,.1)}.settings_page_object-sync-salesforce-admin .select2-dropdown--above{box-shadow:0 -1px 1px rgba(0,0,0,.1)}.settings_page_object-sync-salesforce-admin .select2-container .select2-selection{border-color:#ddd}.settings_page_object-sync-salesforce-admin .select2-container .select2-search__field{min-width:150px}.settings_page_object-sync-salesforce-admin .select2-container .select2-selection--single{height:32px}.settings_page_object-sync-salesforce-admin .select2-container .select2-selection--single .select2-selection__rendered{line-height:2;padding-right:24px}.settings_page_object-sync-salesforce-admin .select2-container .select2-selection--single .select2-selection__arrow{right:3px;height:30px}.settings_page_object-sync-salesforce-admin .select2-container .select2-selection--multiple{min-height:28px;border-radius:0;line-height:1.5}.settings_page_object-sync-salesforce-admin .select2-container .select2-selection--multiple li{margin:0}.settings_page_object-sync-salesforce-admin .select2-container .select2-selection--multiple .select2-selection__choice{padding:2px 6px}.settings_page_object-sync-salesforce-admin .select2-container .select2-selection--multiple .select2-selection__choice .description{display:none}.settings_page_object-sync-salesforce-admin .select2-container .select2-selection__clear{color:#999;margin-top:-1px}.settings_page_object-sync-salesforce-admin .select2-container .select2-search--inline .select2-search__field{font-family:inherit;font-size:inherit;font-weight:inherit;padding:3px 0}.settings_page_object-sync-salesforce-admin .select2-container .select2-selection__rendered.ui-sortable li{cursor:move}.salesforce_user_ajax_message{border-left:4px solid #46b450;box-shadow:0 1px 1px 0 rgba(0,0,0,.1);margin:5px 0 15px;padding:1px 12px}.salesforce_user_ajax_message p{margin:.5em 0;padding:2px}.mapped-salesforce-user{width:auto}.mapped-salesforce-user caption{border:1px solid #e1e1e1;border-bottom:0;box-shadow:0 1px 1px rgba(0,0,0,.04);color:#555;font-size:14px;font-weight:400;line-height:1.3;padding:8px 10px;text-align:left}.mapped-salesforce-user tr th{border-right:1px solid #e5e5e5;font-size:13px;width:140px} -/*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm9iamVjdC1zeW5jLWZvci1zYWxlc2ZvcmNlLWFkbWluLnNjc3MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBVUEscUVBT0ksZ0JBQWdCLEFBQ2hCLGlCQUFrQixDQUNsQixBQVRKLCtEQWlCRyxxQkFBcUIsQUFDckIsVUFBVyxDQUNYLEFBbkJILCtEQXNCRyx5QkE3QjBCLEFBOEIxQixtQkExQmtCLEFBMkJsQixpQkFBa0IsQ0FDbEIsQUF6QkgsOERBNEJHLFFBQVMsQ0FDVCxBQTdCSCw2REFnQ0csZ0JBbkNrQixBQW9DbEIsa0JBQWtCLEFBQ2xCLGlCQUFrQixDQUNsQixBQW5DSCw0RUFzQ0csZ0JBQWlCLENBQ2pCLEFBdkNILG1GQTBDRyxnQkFBaUIsQ0FDakIsQUEzQ0gsMERBOENHLGlCQW5Eb0IsQ0FnRXBCLEFBM0RILGdFQWlESSxxQkFBcUIsQUFDckIsZ0JBQWdCLEFBQ2hCLG1CQUFrQyxDQUNsQyxBQXBESixpSUF3REksYUFBYyxDQUNkLEFBekRKLDRJQStERyxjQUFjLEFBQ2QsZUFBZ0IsQ0FDaEIsQUFqRUgsNElBcUVHLG9CQUFxQixDQUNyQixBQXRFSCw4RUEyRUksZUFBZ0IsQ0FDaEIsQUE1RUosbUVBK0VJLGVBQWUsQUFDZixhQUFjLENBQ2QsQUFqRkosd0hBMEZFLHdCQUEwQixDQUMxQixBQTNGRiw2REE4RkUsZUFBZ0IsQ0FhaEIsQUEzR0YsMktBa0dHLFNBQVMsQUFDVCxXQUFZLENBQ1osQUFwR0gsMEVBdUdHLGNBQWMsQUFFZCxlQUFnQixDQUNoQixBQTFHSCw4REE4R0UsaUJBaEh3QixDQWlIeEIsQUEvR0YscUVBa0hFLG1DQUF3QyxDQUN4QyxBQW5IRixxRUFzSEUsb0NBQXlDLENBQ3pDLEFBdkhGLGtGQTRIRyxpQkFBa0IsQ0FDbEIsQUE3SEgsc0ZBZ0lHLGVBQWdCLENBQ2hCLEFBaklILDBGQW9JRyxXQUFZLENBV1osQUEvSUgsdUhBdUlJLGNBQWMsQUFDZCxrQkFBbUIsQ0FDbkIsQUF6SUosb0hBNElJLFVBQVUsQUFDVixXQUFZLENBQ1osQUE5SUosNEZBa0pHLGdCQUFnQixBQUNoQixnQkFBZ0IsQUFDaEIsZUFBZ0IsQ0FhaEIsQUFqS0gsK0ZBdUpJLFFBQVMsQ0FDVCxBQXhKSix1SEEySkksZUFBZ0IsQ0FLaEIsQUFoS0osb0lBOEpLLFlBQWEsQ0FDYixBQS9KTCx5RkFvS0csV0FBVyxBQUNYLGVBQWdCLENBQ2hCLEFBdEtILDhHQTBLRyxvQkFBb0IsQUFDcEIsa0JBQWtCLEFBQ2xCLG9CQUFvQixBQUNwQixhQUFjLENBQ2QsQUE5S0gsMkdBaUxHLFdBQVksQ0FDWixBQVVILDhCQUNDLDhCQWpNc0IsQUFrTXRCLHNDQXZNK0MsQUF3TS9DLGtCQWxNb0IsQUFtTXBCLGdCQUFpQixDQU1qQixBQVZELGdDQU9FLGNBQWUsQUFDZixXQUFZLENBQ1osQUFJRix3QkFDQyxVQUFXLENBbUJYLEFBcEJELGdDQUlFLHlCQXBOMkIsQUFxTjNCLGdCQUFnQixBQUNoQixxQ0F2TjZDLEFBd043QyxXQUFXLEFBQ1gsZUFBZSxBQUNmLGdCQUFnQixBQUNoQixnQkFBZ0IsQUFDaEIsaUJBek5xQixBQTBOckIsZUFBZ0IsQ0FDaEIsQUFiRiw4QkFnQkUsK0JBL040QixBQWdPNUIsZUFBZSxBQUNmLFdBQVksQ0FDWiIsImZpbGUiOiJvYmplY3Qtc3luYy1mb3Itc2FsZXNmb3JjZS1hZG1pbi5jc3MiLCJzb3VyY2VzQ29udGVudCI6WyIvLyB2YXJpYWJsZXNcbiRib3gtc2hhZG93LWxlc3M6IDAgMXB4IDFweCAwIHJnYmEoMCwgMCwgMCwgMC4xKTtcbiRib3gtc2hhZG93LW1vcmU6IDAgMXB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMDQpO1xuJGJvcmRlci1jb2xvci1kYXJrZXI6ICNlMWUxZTE7XG4kYm9yZGVyLWNvbG9yLWxpZ2h0ZXI6ICNlNWU1ZTU7XG4kaG9yaXpvbnRhbC1zcGFjZTogMTBweDtcbiRzdWNjZXNzLWNvbG9yOiAjNDZiNDUwO1xuJHZlcnRpY2FsLXNwYWNlOiAxNXB4O1xuJHNlbGVjdC1ib3JkZXItY29sb3I6ICNkZGQ7XG5cbi5zZXR0aW5nc19wYWdlX29iamVjdC1zeW5jLXNhbGVzZm9yY2UtYWRtaW4ge1xuXG5cdC5mb3JtLXRhYmxlIHtcblxuXHRcdHRkIHtcblxuXHRcdFx0LmNoZWNrYm94IHtcblx0XHRcdFx0bGluZS1oZWlnaHQ6IDEuMztcblx0XHRcdFx0bWFyZ2luLWJvdHRvbTogOXB4O1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8vIGZpZWxkbWFwIGZvcm1cblx0LmZpZWxkbWFwIHtcblxuXHRcdC5zcGlubmVyIHtcblx0XHRcdGRpc3BsYXk6IGlubGluZS1ibG9jaztcblx0XHRcdGZsb2F0OiBub25lO1xuXHRcdH1cblxuXHRcdGZpZWxkc2V0IHtcblx0XHRcdGJvcmRlcjogMXB4IHNvbGlkICRib3JkZXItY29sb3ItZGFya2VyO1xuXHRcdFx0bWFyZ2luLWJvdHRvbTogJHZlcnRpY2FsLXNwYWNlO1xuXHRcdFx0cG9zaXRpb246IHJlbGF0aXZlO1xuXHRcdH1cblxuXHRcdC5maWVsZHMge1xuXHRcdFx0Ym9yZGVyOiAwO1xuXHRcdH1cblxuXHRcdGxlZ2VuZCB7XG5cdFx0XHRtYXJnaW4tdG9wOiAkdmVydGljYWwtc3BhY2U7XG5cdFx0XHRwYWRkaW5nLWxlZnQ6IDEycHg7XG5cdFx0XHRwb3NpdGlvbjogYWJzb2x1dGU7XG5cdFx0fVxuXG5cdFx0LmZpZWxkcyA+IDpudGgtY2hpbGQoMikge1xuXHRcdFx0cGFkZGluZy10b3A6IDM1cHg7XG5cdFx0fVxuXG5cdFx0LnN5bmNfdHJpZ2dlcnMgPiA6bnRoLWNoaWxkKDIpIHtcblx0XHRcdHBhZGRpbmctdG9wOiA0NXB4O1xuXHRcdH1cblxuXHRcdGRpdiB7XG5cdFx0XHRwYWRkaW5nOiAkdmVydGljYWwtc3BhY2UgJGhvcml6b250YWwtc3BhY2U7XG5cblx0XHRcdGxhYmVsIHtcblx0XHRcdFx0ZGlzcGxheTogaW5saW5lLWJsb2NrO1xuXHRcdFx0XHRmb250LXdlaWdodDogNzAwO1xuXHRcdFx0XHRtYXJnaW4tYm90dG9tOiAkdmVydGljYWwtc3BhY2UgLyAyO1xuXHRcdFx0fVxuXG5cdFx0XHRpbnB1dCxcblx0XHRcdHNlbGVjdCB7XG5cdFx0XHRcdGRpc3BsYXk6IGJsb2NrO1xuXHRcdFx0fVxuXG5cdFx0fVxuXG5cdFx0LnJhZGlvcyBsYWJlbCxcblx0XHQuY2hlY2tib3hlcyBsYWJlbCB7XG5cdFx0XHRkaXNwbGF5OiBibG9jaztcblx0XHRcdGZvbnQtd2VpZ2h0OiA0MDA7XG5cdFx0fVxuXG5cdFx0LnJhZGlvcyBpbnB1dCxcblx0XHQuY2hlY2tib3hlcyBpbnB1dCB7XG5cdFx0XHRkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG5cdFx0fVxuXG5cdFx0dGFibGUge1xuXG5cdFx0XHQuY29sdW1uLWRpcmVjdGlvbiB7XG5cdFx0XHRcdG1pbi13aWR0aDogMjAwcHg7XG5cdFx0XHR9XG5cblx0XHRcdHRkIGRpdiB7XG5cdFx0XHRcdHBhZGRpbmctbGVmdDogMDtcblx0XHRcdFx0cGFkZGluZy10b3A6IDA7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFNlbGVjdDIgZWxlbWVudHMuXG5cdCAqL1xuXHQuc2VsZWN0Mi1kcm9wLFxuXHQuc2VsZWN0Mi1kcm9wZG93biB7XG5cdFx0ei1pbmRleDogOTk5OTk5ICFpbXBvcnRhbnQ7XG5cdH1cblxuXHQuc2VsZWN0Mi1yZXN1bHRzIHtcblx0XHRsaW5lLWhlaWdodDogMS41O1xuXG5cdFx0LnNlbGVjdDItcmVzdWx0c19fb3B0aW9uLFxuXHRcdC5zZWxlY3QyLXJlc3VsdHNfX2dyb3VwIHtcblx0XHRcdG1hcmdpbjogMDtcblx0XHRcdHBhZGRpbmc6IDhweDtcblx0XHR9XG5cblx0XHQuZGVzY3JpcHRpb24ge1xuXHRcdFx0ZGlzcGxheTogYmxvY2s7XG5cdFx0XHQvL2NvbG9yOiAjOTk5O1xuXHRcdFx0cGFkZGluZy10b3A6IDRweDtcblx0XHR9XG5cdH1cblxuXHQuc2VsZWN0Mi1kcm9wZG93biB7XG5cdFx0Ym9yZGVyLWNvbG9yOiAkc2VsZWN0LWJvcmRlci1jb2xvcjtcblx0fVxuXG5cdC5zZWxlY3QyLWRyb3Bkb3duLS1iZWxvdyB7XG5cdFx0Ym94LXNoYWRvdzogMCAxcHggMXB4IHJnYmEoMCwgMCwgMCwgMC4xKTtcblx0fVxuXG5cdC5zZWxlY3QyLWRyb3Bkb3duLS1hYm92ZSB7XG5cdFx0Ym94LXNoYWRvdzogMCAtMXB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMSk7XG5cdH1cblxuXHQuc2VsZWN0Mi1jb250YWluZXIge1xuXG5cdFx0LnNlbGVjdDItc2VsZWN0aW9uIHtcblx0XHRcdGJvcmRlci1jb2xvcjogI2RkZDtcblx0XHR9XG5cblx0XHQuc2VsZWN0Mi1zZWFyY2hfX2ZpZWxkIHtcblx0XHRcdG1pbi13aWR0aDogMTUwcHg7XG5cdFx0fVxuXG5cdFx0LnNlbGVjdDItc2VsZWN0aW9uLS1zaW5nbGUge1xuXHRcdFx0aGVpZ2h0OiAzMnB4O1xuXG5cdFx0XHQuc2VsZWN0Mi1zZWxlY3Rpb25fX3JlbmRlcmVkIHtcblx0XHRcdFx0bGluZS1oZWlnaHQ6IDI7XG5cdFx0XHRcdHBhZGRpbmctcmlnaHQ6IDI0cHg7XG5cdFx0XHR9XG5cblx0XHRcdC5zZWxlY3QyLXNlbGVjdGlvbl9fYXJyb3cge1xuXHRcdFx0XHRyaWdodDogM3B4O1xuXHRcdFx0XHRoZWlnaHQ6IDMwcHg7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0LnNlbGVjdDItc2VsZWN0aW9uLS1tdWx0aXBsZSB7XG5cdFx0XHRtaW4taGVpZ2h0OiAyOHB4O1xuXHRcdFx0Ym9yZGVyLXJhZGl1czogMDtcblx0XHRcdGxpbmUtaGVpZ2h0OiAxLjU7XG5cblx0XHRcdGxpIHtcblx0XHRcdFx0bWFyZ2luOiAwO1xuXHRcdFx0fVxuXG5cdFx0XHQuc2VsZWN0Mi1zZWxlY3Rpb25fX2Nob2ljZSB7XG5cdFx0XHRcdHBhZGRpbmc6IDJweCA2cHg7XG5cblx0XHRcdFx0LmRlc2NyaXB0aW9uIHtcblx0XHRcdFx0XHRkaXNwbGF5OiBub25lO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0LnNlbGVjdDItc2VsZWN0aW9uX19jbGVhciB7XG5cdFx0XHRjb2xvcjogIzk5OTtcblx0XHRcdG1hcmdpbi10b3A6IC0xcHg7XG5cdFx0fVxuXG5cdFx0LnNlbGVjdDItc2VhcmNoLS1pbmxpbmVcblx0XHQuc2VsZWN0Mi1zZWFyY2hfX2ZpZWxkIHtcblx0XHRcdGZvbnQtZmFtaWx5OiBpbmhlcml0O1xuXHRcdFx0Zm9udC1zaXplOiBpbmhlcml0O1xuXHRcdFx0Zm9udC13ZWlnaHQ6IGluaGVyaXQ7XG5cdFx0XHRwYWRkaW5nOiAzcHggMDtcblx0XHR9XG5cblx0XHQuc2VsZWN0Mi1zZWxlY3Rpb25fX3JlbmRlcmVkLnVpLXNvcnRhYmxlIGxpIHtcblx0XHRcdGN1cnNvcjogbW92ZTtcblx0XHR9XG5cdH1cblxuXHQvKi53b29jb21tZXJjZSB0YWJsZS5mb3JtLXRhYmxlIC5zZWxlY3QyLWNvbnRhaW5lciB7XG5cdFx0bWluLXdpZHRoOiA0MDBweCAhaW1wb3J0YW50O1xuXHR9Ki9cblxufVxuXG4vLyBtZXNzYWdlcyB0byBkaXNwbGF5XG4uc2FsZXNmb3JjZV91c2VyX2FqYXhfbWVzc2FnZSB7XG5cdGJvcmRlci1sZWZ0OiA0cHggc29saWQgJHN1Y2Nlc3MtY29sb3I7XG5cdGJveC1zaGFkb3c6ICRib3gtc2hhZG93LWxlc3M7XG5cdG1hcmdpbjogNXB4IDAgJHZlcnRpY2FsLXNwYWNlO1xuXHRwYWRkaW5nOiAxcHggMTJweDtcblxuXHRwIHtcblx0XHRtYXJnaW46IDAuNWVtIDA7XG5cdFx0cGFkZGluZzogMnB4O1xuXHR9XG59XG5cbi8vIHByb2ZpbGUgdGFibGUgZm9yIHNhbGVzZm9yY2UgaW5mb1xuLm1hcHBlZC1zYWxlc2ZvcmNlLXVzZXIge1xuXHR3aWR0aDogYXV0bztcblxuXHRjYXB0aW9uIHtcblx0XHRib3JkZXI6IDFweCBzb2xpZCAkYm9yZGVyLWNvbG9yLWRhcmtlcjtcblx0XHRib3JkZXItYm90dG9tOiAwO1xuXHRcdGJveC1zaGFkb3c6ICRib3gtc2hhZG93LW1vcmU7XG5cdFx0Y29sb3I6ICM1NTU7XG5cdFx0Zm9udC1zaXplOiAxNHB4O1xuXHRcdGZvbnQtd2VpZ2h0OiA0MDA7XG5cdFx0bGluZS1oZWlnaHQ6IDEuMztcblx0XHRwYWRkaW5nOiA4cHggJGhvcml6b250YWwtc3BhY2U7XG5cdFx0dGV4dC1hbGlnbjogbGVmdDtcblx0fVxuXG5cdHRyIHRoIHtcblx0XHRib3JkZXItcmlnaHQ6IDFweCBzb2xpZCAkYm9yZGVyLWNvbG9yLWxpZ2h0ZXI7XG5cdFx0Zm9udC1zaXplOiAxM3B4O1xuXHRcdHdpZHRoOiAxNDBweDtcblx0fVxufVxuXG4iXX0= */ +.settings_page_object-sync-salesforce-admin .form-table td .checkbox{line-height:1.3;margin-bottom:9px}.settings_page_object-sync-salesforce-admin .fieldmap .spinner{display:inline-block;float:none}.settings_page_object-sync-salesforce-admin .fieldmap fieldset{border:1px solid #e1e1e1;margin-bottom:15px;position:relative}.settings_page_object-sync-salesforce-admin .fieldmap .fields{border:0}.settings_page_object-sync-salesforce-admin .fieldmap legend{margin-top:15px;padding-left:12px;position:absolute}.settings_page_object-sync-salesforce-admin .fieldmap .fields>:nth-child(2){padding-top:35px}.settings_page_object-sync-salesforce-admin .fieldmap .fields .fieldmap-template-hidden{display:none}.settings_page_object-sync-salesforce-admin .fieldmap .sync_triggers>:nth-child(2){padding-top:45px}.settings_page_object-sync-salesforce-admin .fieldmap div{padding:15px 10px}.settings_page_object-sync-salesforce-admin .fieldmap div label{display:inline-block;font-weight:700;margin-bottom:7.5px}.settings_page_object-sync-salesforce-admin .fieldmap div input,.settings_page_object-sync-salesforce-admin .fieldmap div select{display:block}.settings_page_object-sync-salesforce-admin .fieldmap .checkboxes label,.settings_page_object-sync-salesforce-admin .fieldmap .radios label{display:block;font-weight:400}.settings_page_object-sync-salesforce-admin .fieldmap .checkboxes input,.settings_page_object-sync-salesforce-admin .fieldmap .radios input{display:inline-block}.settings_page_object-sync-salesforce-admin .fieldmap table .column-direction{min-width:200px}.settings_page_object-sync-salesforce-admin .fieldmap table td div{padding-left:0;padding-top:0}.settings_page_object-sync-salesforce-admin .select2-drop,.settings_page_object-sync-salesforce-admin .select2-dropdown{z-index:999999!important}.settings_page_object-sync-salesforce-admin .select2-results{line-height:1.5}.settings_page_object-sync-salesforce-admin .select2-results .select2-results__group,.settings_page_object-sync-salesforce-admin .select2-results .select2-results__option{margin:0;padding:8px}.settings_page_object-sync-salesforce-admin .select2-results .description{display:block;padding-top:4px}.settings_page_object-sync-salesforce-admin .select2-dropdown{border-color:#ddd}.settings_page_object-sync-salesforce-admin .select2-dropdown--below{box-shadow:0 1px 1px rgba(0,0,0,.1)}.settings_page_object-sync-salesforce-admin .select2-dropdown--above{box-shadow:0 -1px 1px rgba(0,0,0,.1)}.settings_page_object-sync-salesforce-admin .select2-container .select2-selection{border-color:#ddd}.settings_page_object-sync-salesforce-admin .select2-container .select2-search__field{min-width:150px}.settings_page_object-sync-salesforce-admin .select2-container .select2-selection--single{height:32px}.settings_page_object-sync-salesforce-admin .select2-container .select2-selection--single .select2-selection__rendered{line-height:2;padding-right:24px}.settings_page_object-sync-salesforce-admin .select2-container .select2-selection--single .select2-selection__arrow{right:3px;height:30px}.settings_page_object-sync-salesforce-admin .select2-container .select2-selection--multiple{min-height:28px;border-radius:0;line-height:1.5}.settings_page_object-sync-salesforce-admin .select2-container .select2-selection--multiple li{margin:0}.settings_page_object-sync-salesforce-admin .select2-container .select2-selection--multiple .select2-selection__choice{padding:2px 6px}.settings_page_object-sync-salesforce-admin .select2-container .select2-selection--multiple .select2-selection__choice .description{display:none}.settings_page_object-sync-salesforce-admin .select2-container .select2-selection__clear{color:#999;margin-top:-1px}.settings_page_object-sync-salesforce-admin .select2-container .select2-search--inline .select2-search__field{font-family:inherit;font-size:inherit;font-weight:inherit;padding:3px 0}.settings_page_object-sync-salesforce-admin .select2-container .select2-selection__rendered.ui-sortable li{cursor:move}.salesforce_user_ajax_message{border-left:4px solid #46b450;box-shadow:0 1px 1px 0 rgba(0,0,0,.1);margin:5px 0 15px;padding:1px 12px}.salesforce_user_ajax_message p{margin:.5em 0;padding:2px}.mapped-salesforce-user{width:auto}.mapped-salesforce-user caption{border:1px solid #e1e1e1;border-bottom:0;box-shadow:0 1px 1px rgba(0,0,0,.04);color:#555;font-size:14px;font-weight:400;line-height:1.3;padding:8px 10px;text-align:left}.mapped-salesforce-user tr th{border-right:1px solid #e5e5e5;font-size:13px;width:140px} +/*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm9iamVjdC1zeW5jLWZvci1zYWxlc2ZvcmNlLWFkbWluLnNjc3MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBVUEscUVBT0ksZUFBZ0IsQ0FDaEIsaUJBQWtCLENBUnRCLCtEQWlCRyxvQkFBcUIsQ0FDckIsVUFBVyxDQWxCZCwrREFzQkcsd0JBN0IwQixDQThCMUIsa0JBMUJrQixDQTJCbEIsaUJBQWtCLENBeEJyQiw4REE0QkcsUUFBUyxDQTVCWiw2REFnQ0csZUFuQ2tCLENBb0NsQixpQkFBa0IsQ0FDbEIsaUJBQWtCLENBbENyQiw0RUFzQ0csZ0JBQWlCLENBdENwQix3RkEwQ0csWUFBYSxDQTFDaEIsbUZBOENHLGdCQUFpQixDQTlDcEIsMERBa0RHLGlCQXZEb0IsQ0FLdkIsZ0VBcURJLG9CQUFxQixDQUNyQixlQUFnQixDQUNoQixtQkFBa0MsQ0F2RHRDLGlJQTRESSxhQUFjLENBNURsQiw0SUFtRUcsYUFBYyxDQUNkLGVBQWdCLENBcEVuQiw0SUF5RUcsb0JBQXFCLENBekV4Qiw4RUErRUksZUFBZ0IsQ0EvRXBCLG1FQW1GSSxjQUFlLENBQ2YsYUFBYyxDQXBGbEIsd0hBOEZFLHdCQUEwQixDQTlGNUIsNkRBa0dFLGVBQWdCLENBbEdsQiwyS0FzR0csUUFBUyxDQUNULFdBQVksQ0F2R2YsMEVBMkdHLGFBQWMsQ0FFZCxlQUFnQixDQTdHbkIsOERBa0hFLGlCQXBId0IsQ0FFMUIscUVBc0hFLG1DQUF3QyxDQXRIMUMscUVBMEhFLG9DQUF5QyxDQTFIM0Msa0ZBZ0lHLGlCQUFrQixDQWhJckIsc0ZBb0lHLGVBQWdCLENBcEluQiwwRkF3SUcsV0FBWSxDQXhJZix1SEEySUksYUFBYyxDQUNkLGtCQUFtQixDQTVJdkIsb0hBZ0pJLFNBQVUsQ0FDVixXQUFZLENBakpoQiw0RkFzSkcsZUFBZ0IsQ0FDaEIsZUFBZ0IsQ0FDaEIsZUFBZ0IsQ0F4Sm5CLCtGQTJKSSxRQUFTLENBM0piLHVIQStKSSxlQUFnQixDQS9KcEIsb0lBa0tLLFlBQWEsQ0FsS2xCLHlGQXdLRyxVQUFXLENBQ1gsZUFBZ0IsQ0F6S25CLDhHQThLRyxtQkFBb0IsQ0FDcEIsaUJBQWtCLENBQ2xCLG1CQUFvQixDQUNwQixhQUFjLENBakxqQiwyR0FxTEcsV0FBWSxDQVdmLDhCQUNDLDZCQXJNc0IsQ0FzTXRCLHFDQTNNK0MsQ0E0TS9DLGlCQXRNb0IsQ0F1TXBCLGdCQUFpQixDQUpsQixnQ0FPRSxhQUFlLENBQ2YsV0FBWSxDQUtkLHdCQUNDLFVBQVcsQ0FEWixnQ0FJRSx3QkF4TjJCLENBeU4zQixlQUFnQixDQUNoQixvQ0EzTjZDLENBNE43QyxVQUFXLENBQ1gsY0FBZSxDQUNmLGVBQWdCLENBQ2hCLGVBQWdCLENBQ2hCLGdCQTdOcUIsQ0E4TnJCLGVBQWdCLENBWmxCLDhCQWdCRSw4QkFuTzRCLENBb081QixjQUFlLENBQ2YsV0FBWSIsImZpbGUiOiJvYmplY3Qtc3luYy1mb3Itc2FsZXNmb3JjZS1hZG1pbi5jc3MiLCJzb3VyY2VzQ29udGVudCI6WyIvLyB2YXJpYWJsZXNcbiRib3gtc2hhZG93LWxlc3M6IDAgMXB4IDFweCAwIHJnYmEoMCwgMCwgMCwgMC4xKTtcbiRib3gtc2hhZG93LW1vcmU6IDAgMXB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMDQpO1xuJGJvcmRlci1jb2xvci1kYXJrZXI6ICNlMWUxZTE7XG4kYm9yZGVyLWNvbG9yLWxpZ2h0ZXI6ICNlNWU1ZTU7XG4kaG9yaXpvbnRhbC1zcGFjZTogMTBweDtcbiRzdWNjZXNzLWNvbG9yOiAjNDZiNDUwO1xuJHZlcnRpY2FsLXNwYWNlOiAxNXB4O1xuJHNlbGVjdC1ib3JkZXItY29sb3I6ICNkZGQ7XG5cbi5zZXR0aW5nc19wYWdlX29iamVjdC1zeW5jLXNhbGVzZm9yY2UtYWRtaW4ge1xuXG5cdC5mb3JtLXRhYmxlIHtcblxuXHRcdHRkIHtcblxuXHRcdFx0LmNoZWNrYm94IHtcblx0XHRcdFx0bGluZS1oZWlnaHQ6IDEuMztcblx0XHRcdFx0bWFyZ2luLWJvdHRvbTogOXB4O1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8vIGZpZWxkbWFwIGZvcm1cblx0LmZpZWxkbWFwIHtcblxuXHRcdC5zcGlubmVyIHtcblx0XHRcdGRpc3BsYXk6IGlubGluZS1ibG9jaztcblx0XHRcdGZsb2F0OiBub25lO1xuXHRcdH1cblxuXHRcdGZpZWxkc2V0IHtcblx0XHRcdGJvcmRlcjogMXB4IHNvbGlkICRib3JkZXItY29sb3ItZGFya2VyO1xuXHRcdFx0bWFyZ2luLWJvdHRvbTogJHZlcnRpY2FsLXNwYWNlO1xuXHRcdFx0cG9zaXRpb246IHJlbGF0aXZlO1xuXHRcdH1cblxuXHRcdC5maWVsZHMge1xuXHRcdFx0Ym9yZGVyOiAwO1xuXHRcdH1cblxuXHRcdGxlZ2VuZCB7XG5cdFx0XHRtYXJnaW4tdG9wOiAkdmVydGljYWwtc3BhY2U7XG5cdFx0XHRwYWRkaW5nLWxlZnQ6IDEycHg7XG5cdFx0XHRwb3NpdGlvbjogYWJzb2x1dGU7XG5cdFx0fVxuXG5cdFx0LmZpZWxkcyA+IDpudGgtY2hpbGQoMikge1xuXHRcdFx0cGFkZGluZy10b3A6IDM1cHg7XG5cdFx0fVxuXG5cdFx0LmZpZWxkcyAuZmllbGRtYXAtdGVtcGxhdGUtaGlkZGVuIHtcblx0XHRcdGRpc3BsYXk6IG5vbmU7XG5cdFx0fVxuXG5cdFx0LnN5bmNfdHJpZ2dlcnMgPiA6bnRoLWNoaWxkKDIpIHtcblx0XHRcdHBhZGRpbmctdG9wOiA0NXB4O1xuXHRcdH1cblxuXHRcdGRpdiB7XG5cdFx0XHRwYWRkaW5nOiAkdmVydGljYWwtc3BhY2UgJGhvcml6b250YWwtc3BhY2U7XG5cblx0XHRcdGxhYmVsIHtcblx0XHRcdFx0ZGlzcGxheTogaW5saW5lLWJsb2NrO1xuXHRcdFx0XHRmb250LXdlaWdodDogNzAwO1xuXHRcdFx0XHRtYXJnaW4tYm90dG9tOiAkdmVydGljYWwtc3BhY2UgLyAyO1xuXHRcdFx0fVxuXG5cdFx0XHRpbnB1dCxcblx0XHRcdHNlbGVjdCB7XG5cdFx0XHRcdGRpc3BsYXk6IGJsb2NrO1xuXHRcdFx0fVxuXG5cdFx0fVxuXG5cdFx0LnJhZGlvcyBsYWJlbCxcblx0XHQuY2hlY2tib3hlcyBsYWJlbCB7XG5cdFx0XHRkaXNwbGF5OiBibG9jaztcblx0XHRcdGZvbnQtd2VpZ2h0OiA0MDA7XG5cdFx0fVxuXG5cdFx0LnJhZGlvcyBpbnB1dCxcblx0XHQuY2hlY2tib3hlcyBpbnB1dCB7XG5cdFx0XHRkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG5cdFx0fVxuXG5cdFx0dGFibGUge1xuXG5cdFx0XHQuY29sdW1uLWRpcmVjdGlvbiB7XG5cdFx0XHRcdG1pbi13aWR0aDogMjAwcHg7XG5cdFx0XHR9XG5cblx0XHRcdHRkIGRpdiB7XG5cdFx0XHRcdHBhZGRpbmctbGVmdDogMDtcblx0XHRcdFx0cGFkZGluZy10b3A6IDA7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFNlbGVjdDIgZWxlbWVudHMuXG5cdCAqL1xuXHQuc2VsZWN0Mi1kcm9wLFxuXHQuc2VsZWN0Mi1kcm9wZG93biB7XG5cdFx0ei1pbmRleDogOTk5OTk5ICFpbXBvcnRhbnQ7XG5cdH1cblxuXHQuc2VsZWN0Mi1yZXN1bHRzIHtcblx0XHRsaW5lLWhlaWdodDogMS41O1xuXG5cdFx0LnNlbGVjdDItcmVzdWx0c19fb3B0aW9uLFxuXHRcdC5zZWxlY3QyLXJlc3VsdHNfX2dyb3VwIHtcblx0XHRcdG1hcmdpbjogMDtcblx0XHRcdHBhZGRpbmc6IDhweDtcblx0XHR9XG5cblx0XHQuZGVzY3JpcHRpb24ge1xuXHRcdFx0ZGlzcGxheTogYmxvY2s7XG5cdFx0XHQvL2NvbG9yOiAjOTk5O1xuXHRcdFx0cGFkZGluZy10b3A6IDRweDtcblx0XHR9XG5cdH1cblxuXHQuc2VsZWN0Mi1kcm9wZG93biB7XG5cdFx0Ym9yZGVyLWNvbG9yOiAkc2VsZWN0LWJvcmRlci1jb2xvcjtcblx0fVxuXG5cdC5zZWxlY3QyLWRyb3Bkb3duLS1iZWxvdyB7XG5cdFx0Ym94LXNoYWRvdzogMCAxcHggMXB4IHJnYmEoMCwgMCwgMCwgMC4xKTtcblx0fVxuXG5cdC5zZWxlY3QyLWRyb3Bkb3duLS1hYm92ZSB7XG5cdFx0Ym94LXNoYWRvdzogMCAtMXB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMSk7XG5cdH1cblxuXHQuc2VsZWN0Mi1jb250YWluZXIge1xuXG5cdFx0LnNlbGVjdDItc2VsZWN0aW9uIHtcblx0XHRcdGJvcmRlci1jb2xvcjogI2RkZDtcblx0XHR9XG5cblx0XHQuc2VsZWN0Mi1zZWFyY2hfX2ZpZWxkIHtcblx0XHRcdG1pbi13aWR0aDogMTUwcHg7XG5cdFx0fVxuXG5cdFx0LnNlbGVjdDItc2VsZWN0aW9uLS1zaW5nbGUge1xuXHRcdFx0aGVpZ2h0OiAzMnB4O1xuXG5cdFx0XHQuc2VsZWN0Mi1zZWxlY3Rpb25fX3JlbmRlcmVkIHtcblx0XHRcdFx0bGluZS1oZWlnaHQ6IDI7XG5cdFx0XHRcdHBhZGRpbmctcmlnaHQ6IDI0cHg7XG5cdFx0XHR9XG5cblx0XHRcdC5zZWxlY3QyLXNlbGVjdGlvbl9fYXJyb3cge1xuXHRcdFx0XHRyaWdodDogM3B4O1xuXHRcdFx0XHRoZWlnaHQ6IDMwcHg7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0LnNlbGVjdDItc2VsZWN0aW9uLS1tdWx0aXBsZSB7XG5cdFx0XHRtaW4taGVpZ2h0OiAyOHB4O1xuXHRcdFx0Ym9yZGVyLXJhZGl1czogMDtcblx0XHRcdGxpbmUtaGVpZ2h0OiAxLjU7XG5cblx0XHRcdGxpIHtcblx0XHRcdFx0bWFyZ2luOiAwO1xuXHRcdFx0fVxuXG5cdFx0XHQuc2VsZWN0Mi1zZWxlY3Rpb25fX2Nob2ljZSB7XG5cdFx0XHRcdHBhZGRpbmc6IDJweCA2cHg7XG5cblx0XHRcdFx0LmRlc2NyaXB0aW9uIHtcblx0XHRcdFx0XHRkaXNwbGF5OiBub25lO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0LnNlbGVjdDItc2VsZWN0aW9uX19jbGVhciB7XG5cdFx0XHRjb2xvcjogIzk5OTtcblx0XHRcdG1hcmdpbi10b3A6IC0xcHg7XG5cdFx0fVxuXG5cdFx0LnNlbGVjdDItc2VhcmNoLS1pbmxpbmVcblx0XHQuc2VsZWN0Mi1zZWFyY2hfX2ZpZWxkIHtcblx0XHRcdGZvbnQtZmFtaWx5OiBpbmhlcml0O1xuXHRcdFx0Zm9udC1zaXplOiBpbmhlcml0O1xuXHRcdFx0Zm9udC13ZWlnaHQ6IGluaGVyaXQ7XG5cdFx0XHRwYWRkaW5nOiAzcHggMDtcblx0XHR9XG5cblx0XHQuc2VsZWN0Mi1zZWxlY3Rpb25fX3JlbmRlcmVkLnVpLXNvcnRhYmxlIGxpIHtcblx0XHRcdGN1cnNvcjogbW92ZTtcblx0XHR9XG5cdH1cblxuXHQvKi53b29jb21tZXJjZSB0YWJsZS5mb3JtLXRhYmxlIC5zZWxlY3QyLWNvbnRhaW5lciB7XG5cdFx0bWluLXdpZHRoOiA0MDBweCAhaW1wb3J0YW50O1xuXHR9Ki9cblxufVxuXG4vLyBtZXNzYWdlcyB0byBkaXNwbGF5XG4uc2FsZXNmb3JjZV91c2VyX2FqYXhfbWVzc2FnZSB7XG5cdGJvcmRlci1sZWZ0OiA0cHggc29saWQgJHN1Y2Nlc3MtY29sb3I7XG5cdGJveC1zaGFkb3c6ICRib3gtc2hhZG93LWxlc3M7XG5cdG1hcmdpbjogNXB4IDAgJHZlcnRpY2FsLXNwYWNlO1xuXHRwYWRkaW5nOiAxcHggMTJweDtcblxuXHRwIHtcblx0XHRtYXJnaW46IDAuNWVtIDA7XG5cdFx0cGFkZGluZzogMnB4O1xuXHR9XG59XG5cbi8vIHByb2ZpbGUgdGFibGUgZm9yIHNhbGVzZm9yY2UgaW5mb1xuLm1hcHBlZC1zYWxlc2ZvcmNlLXVzZXIge1xuXHR3aWR0aDogYXV0bztcblxuXHRjYXB0aW9uIHtcblx0XHRib3JkZXI6IDFweCBzb2xpZCAkYm9yZGVyLWNvbG9yLWRhcmtlcjtcblx0XHRib3JkZXItYm90dG9tOiAwO1xuXHRcdGJveC1zaGFkb3c6ICRib3gtc2hhZG93LW1vcmU7XG5cdFx0Y29sb3I6ICM1NTU7XG5cdFx0Zm9udC1zaXplOiAxNHB4O1xuXHRcdGZvbnQtd2VpZ2h0OiA0MDA7XG5cdFx0bGluZS1oZWlnaHQ6IDEuMztcblx0XHRwYWRkaW5nOiA4cHggJGhvcml6b250YWwtc3BhY2U7XG5cdFx0dGV4dC1hbGlnbjogbGVmdDtcblx0fVxuXG5cdHRyIHRoIHtcblx0XHRib3JkZXItcmlnaHQ6IDFweCBzb2xpZCAkYm9yZGVyLWNvbG9yLWxpZ2h0ZXI7XG5cdFx0Zm9udC1zaXplOiAxM3B4O1xuXHRcdHdpZHRoOiAxNDBweDtcblx0fVxufVxuXG4iXX0= */ diff --git a/assets/sass/object-sync-for-salesforce-admin.scss b/assets/sass/object-sync-for-salesforce-admin.scss index 8f1ce3e6..f22df84e 100644 --- a/assets/sass/object-sync-for-salesforce-admin.scss +++ b/assets/sass/object-sync-for-salesforce-admin.scss @@ -49,6 +49,10 @@ $select-border-color: #ddd; padding-top: 35px; } + .fields .fieldmap-template-hidden { + display: none; + } + .sync_triggers > :nth-child(2) { padding-top: 45px; } diff --git a/templates/admin/fieldmaps-add-edit-clone.php b/templates/admin/fieldmaps-add-edit-clone.php index 609a0430..f49c0e86 100755 --- a/templates/admin/fieldmaps-add-edit-clone.php +++ b/templates/admin/fieldmaps-add-edit-clone.php @@ -220,11 +220,13 @@ $value ) { - $key = md5( $key . time() ); + $has_other_rows = true; + $key = md5( $key . time() ); ?> - + @@ -395,9 +397,6 @@ - From e39d02d6ff6b7fd1e9fabe51a75ab5865b9fd474 Mon Sep 17 00:00:00 2001 From: Jonathan Stegall Date: Sat, 4 Jan 2020 21:25:01 -0600 Subject: [PATCH 03/27] we can't fail linting over underscores with the way other people's code works --- .stylelintrc | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.stylelintrc b/.stylelintrc index 9f3afe67..a0c97b93 100644 --- a/.stylelintrc +++ b/.stylelintrc @@ -1,3 +1,6 @@ { - "extends": "stylelint-config-wordpress/scss" + "extends": "stylelint-config-wordpress/scss", + "rules": { + "selector-class-pattern": null + } } \ No newline at end of file From 8dbe2980f1d3152bc367d005b6e1cb1909b5da55 Mon Sep 17 00:00:00 2001 From: Jonathan Stegall Date: Sun, 5 Jan 2020 07:59:01 -0600 Subject: [PATCH 04/27] always hide the template row --- assets/css/object-sync-for-salesforce-admin.css | 4 ++-- assets/sass/object-sync-for-salesforce-admin.scss | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/assets/css/object-sync-for-salesforce-admin.css b/assets/css/object-sync-for-salesforce-admin.css index e668c9ed..cbbe3f00 100644 --- a/assets/css/object-sync-for-salesforce-admin.css +++ b/assets/css/object-sync-for-salesforce-admin.css @@ -1,2 +1,2 @@ -.settings_page_object-sync-salesforce-admin .form-table td .checkbox{line-height:1.3;margin-bottom:9px}.settings_page_object-sync-salesforce-admin .fieldmap .spinner{display:inline-block;float:none}.settings_page_object-sync-salesforce-admin .fieldmap fieldset{border:1px solid #e1e1e1;margin-bottom:15px;position:relative}.settings_page_object-sync-salesforce-admin .fieldmap .fields{border:0}.settings_page_object-sync-salesforce-admin .fieldmap legend{margin-top:15px;padding-left:12px;position:absolute}.settings_page_object-sync-salesforce-admin .fieldmap .fields>:nth-child(2){padding-top:35px}.settings_page_object-sync-salesforce-admin .fieldmap .fields .fieldmap-template-hidden{display:none}.settings_page_object-sync-salesforce-admin .fieldmap .sync_triggers>:nth-child(2){padding-top:45px}.settings_page_object-sync-salesforce-admin .fieldmap div{padding:15px 10px}.settings_page_object-sync-salesforce-admin .fieldmap div label{display:inline-block;font-weight:700;margin-bottom:7.5px}.settings_page_object-sync-salesforce-admin .fieldmap div input,.settings_page_object-sync-salesforce-admin .fieldmap div select{display:block}.settings_page_object-sync-salesforce-admin .fieldmap .checkboxes label,.settings_page_object-sync-salesforce-admin .fieldmap .radios label{display:block;font-weight:400}.settings_page_object-sync-salesforce-admin .fieldmap .checkboxes input,.settings_page_object-sync-salesforce-admin .fieldmap .radios input{display:inline-block}.settings_page_object-sync-salesforce-admin .fieldmap table .column-direction{min-width:200px}.settings_page_object-sync-salesforce-admin .fieldmap table td div{padding-left:0;padding-top:0}.settings_page_object-sync-salesforce-admin .select2-drop,.settings_page_object-sync-salesforce-admin .select2-dropdown{z-index:999999!important}.settings_page_object-sync-salesforce-admin .select2-results{line-height:1.5}.settings_page_object-sync-salesforce-admin .select2-results .select2-results__group,.settings_page_object-sync-salesforce-admin .select2-results .select2-results__option{margin:0;padding:8px}.settings_page_object-sync-salesforce-admin .select2-results .description{display:block;padding-top:4px}.settings_page_object-sync-salesforce-admin .select2-dropdown{border-color:#ddd}.settings_page_object-sync-salesforce-admin .select2-dropdown--below{box-shadow:0 1px 1px rgba(0,0,0,.1)}.settings_page_object-sync-salesforce-admin .select2-dropdown--above{box-shadow:0 -1px 1px rgba(0,0,0,.1)}.settings_page_object-sync-salesforce-admin .select2-container .select2-selection{border-color:#ddd}.settings_page_object-sync-salesforce-admin .select2-container .select2-search__field{min-width:150px}.settings_page_object-sync-salesforce-admin .select2-container .select2-selection--single{height:32px}.settings_page_object-sync-salesforce-admin .select2-container .select2-selection--single .select2-selection__rendered{line-height:2;padding-right:24px}.settings_page_object-sync-salesforce-admin .select2-container .select2-selection--single .select2-selection__arrow{right:3px;height:30px}.settings_page_object-sync-salesforce-admin .select2-container .select2-selection--multiple{min-height:28px;border-radius:0;line-height:1.5}.settings_page_object-sync-salesforce-admin .select2-container .select2-selection--multiple li{margin:0}.settings_page_object-sync-salesforce-admin .select2-container .select2-selection--multiple .select2-selection__choice{padding:2px 6px}.settings_page_object-sync-salesforce-admin .select2-container .select2-selection--multiple .select2-selection__choice .description{display:none}.settings_page_object-sync-salesforce-admin .select2-container .select2-selection__clear{color:#999;margin-top:-1px}.settings_page_object-sync-salesforce-admin .select2-container .select2-search--inline .select2-search__field{font-family:inherit;font-size:inherit;font-weight:inherit;padding:3px 0}.settings_page_object-sync-salesforce-admin .select2-container .select2-selection__rendered.ui-sortable li{cursor:move}.salesforce_user_ajax_message{border-left:4px solid #46b450;box-shadow:0 1px 1px 0 rgba(0,0,0,.1);margin:5px 0 15px;padding:1px 12px}.salesforce_user_ajax_message p{margin:.5em 0;padding:2px}.mapped-salesforce-user{width:auto}.mapped-salesforce-user caption{border:1px solid #e1e1e1;border-bottom:0;box-shadow:0 1px 1px rgba(0,0,0,.04);color:#555;font-size:14px;font-weight:400;line-height:1.3;padding:8px 10px;text-align:left}.mapped-salesforce-user tr th{border-right:1px solid #e5e5e5;font-size:13px;width:140px} -/*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm9iamVjdC1zeW5jLWZvci1zYWxlc2ZvcmNlLWFkbWluLnNjc3MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBVUEscUVBT0ksZUFBZ0IsQ0FDaEIsaUJBQWtCLENBUnRCLCtEQWlCRyxvQkFBcUIsQ0FDckIsVUFBVyxDQWxCZCwrREFzQkcsd0JBN0IwQixDQThCMUIsa0JBMUJrQixDQTJCbEIsaUJBQWtCLENBeEJyQiw4REE0QkcsUUFBUyxDQTVCWiw2REFnQ0csZUFuQ2tCLENBb0NsQixpQkFBa0IsQ0FDbEIsaUJBQWtCLENBbENyQiw0RUFzQ0csZ0JBQWlCLENBdENwQix3RkEwQ0csWUFBYSxDQTFDaEIsbUZBOENHLGdCQUFpQixDQTlDcEIsMERBa0RHLGlCQXZEb0IsQ0FLdkIsZ0VBcURJLG9CQUFxQixDQUNyQixlQUFnQixDQUNoQixtQkFBa0MsQ0F2RHRDLGlJQTRESSxhQUFjLENBNURsQiw0SUFtRUcsYUFBYyxDQUNkLGVBQWdCLENBcEVuQiw0SUF5RUcsb0JBQXFCLENBekV4Qiw4RUErRUksZUFBZ0IsQ0EvRXBCLG1FQW1GSSxjQUFlLENBQ2YsYUFBYyxDQXBGbEIsd0hBOEZFLHdCQUEwQixDQTlGNUIsNkRBa0dFLGVBQWdCLENBbEdsQiwyS0FzR0csUUFBUyxDQUNULFdBQVksQ0F2R2YsMEVBMkdHLGFBQWMsQ0FFZCxlQUFnQixDQTdHbkIsOERBa0hFLGlCQXBId0IsQ0FFMUIscUVBc0hFLG1DQUF3QyxDQXRIMUMscUVBMEhFLG9DQUF5QyxDQTFIM0Msa0ZBZ0lHLGlCQUFrQixDQWhJckIsc0ZBb0lHLGVBQWdCLENBcEluQiwwRkF3SUcsV0FBWSxDQXhJZix1SEEySUksYUFBYyxDQUNkLGtCQUFtQixDQTVJdkIsb0hBZ0pJLFNBQVUsQ0FDVixXQUFZLENBakpoQiw0RkFzSkcsZUFBZ0IsQ0FDaEIsZUFBZ0IsQ0FDaEIsZUFBZ0IsQ0F4Sm5CLCtGQTJKSSxRQUFTLENBM0piLHVIQStKSSxlQUFnQixDQS9KcEIsb0lBa0tLLFlBQWEsQ0FsS2xCLHlGQXdLRyxVQUFXLENBQ1gsZUFBZ0IsQ0F6S25CLDhHQThLRyxtQkFBb0IsQ0FDcEIsaUJBQWtCLENBQ2xCLG1CQUFvQixDQUNwQixhQUFjLENBakxqQiwyR0FxTEcsV0FBWSxDQVdmLDhCQUNDLDZCQXJNc0IsQ0FzTXRCLHFDQTNNK0MsQ0E0TS9DLGlCQXRNb0IsQ0F1TXBCLGdCQUFpQixDQUpsQixnQ0FPRSxhQUFlLENBQ2YsV0FBWSxDQUtkLHdCQUNDLFVBQVcsQ0FEWixnQ0FJRSx3QkF4TjJCLENBeU4zQixlQUFnQixDQUNoQixvQ0EzTjZDLENBNE43QyxVQUFXLENBQ1gsY0FBZSxDQUNmLGVBQWdCLENBQ2hCLGVBQWdCLENBQ2hCLGdCQTdOcUIsQ0E4TnJCLGVBQWdCLENBWmxCLDhCQWdCRSw4QkFuTzRCLENBb081QixjQUFlLENBQ2YsV0FBWSIsImZpbGUiOiJvYmplY3Qtc3luYy1mb3Itc2FsZXNmb3JjZS1hZG1pbi5jc3MiLCJzb3VyY2VzQ29udGVudCI6WyIvLyB2YXJpYWJsZXNcbiRib3gtc2hhZG93LWxlc3M6IDAgMXB4IDFweCAwIHJnYmEoMCwgMCwgMCwgMC4xKTtcbiRib3gtc2hhZG93LW1vcmU6IDAgMXB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMDQpO1xuJGJvcmRlci1jb2xvci1kYXJrZXI6ICNlMWUxZTE7XG4kYm9yZGVyLWNvbG9yLWxpZ2h0ZXI6ICNlNWU1ZTU7XG4kaG9yaXpvbnRhbC1zcGFjZTogMTBweDtcbiRzdWNjZXNzLWNvbG9yOiAjNDZiNDUwO1xuJHZlcnRpY2FsLXNwYWNlOiAxNXB4O1xuJHNlbGVjdC1ib3JkZXItY29sb3I6ICNkZGQ7XG5cbi5zZXR0aW5nc19wYWdlX29iamVjdC1zeW5jLXNhbGVzZm9yY2UtYWRtaW4ge1xuXG5cdC5mb3JtLXRhYmxlIHtcblxuXHRcdHRkIHtcblxuXHRcdFx0LmNoZWNrYm94IHtcblx0XHRcdFx0bGluZS1oZWlnaHQ6IDEuMztcblx0XHRcdFx0bWFyZ2luLWJvdHRvbTogOXB4O1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8vIGZpZWxkbWFwIGZvcm1cblx0LmZpZWxkbWFwIHtcblxuXHRcdC5zcGlubmVyIHtcblx0XHRcdGRpc3BsYXk6IGlubGluZS1ibG9jaztcblx0XHRcdGZsb2F0OiBub25lO1xuXHRcdH1cblxuXHRcdGZpZWxkc2V0IHtcblx0XHRcdGJvcmRlcjogMXB4IHNvbGlkICRib3JkZXItY29sb3ItZGFya2VyO1xuXHRcdFx0bWFyZ2luLWJvdHRvbTogJHZlcnRpY2FsLXNwYWNlO1xuXHRcdFx0cG9zaXRpb246IHJlbGF0aXZlO1xuXHRcdH1cblxuXHRcdC5maWVsZHMge1xuXHRcdFx0Ym9yZGVyOiAwO1xuXHRcdH1cblxuXHRcdGxlZ2VuZCB7XG5cdFx0XHRtYXJnaW4tdG9wOiAkdmVydGljYWwtc3BhY2U7XG5cdFx0XHRwYWRkaW5nLWxlZnQ6IDEycHg7XG5cdFx0XHRwb3NpdGlvbjogYWJzb2x1dGU7XG5cdFx0fVxuXG5cdFx0LmZpZWxkcyA+IDpudGgtY2hpbGQoMikge1xuXHRcdFx0cGFkZGluZy10b3A6IDM1cHg7XG5cdFx0fVxuXG5cdFx0LmZpZWxkcyAuZmllbGRtYXAtdGVtcGxhdGUtaGlkZGVuIHtcblx0XHRcdGRpc3BsYXk6IG5vbmU7XG5cdFx0fVxuXG5cdFx0LnN5bmNfdHJpZ2dlcnMgPiA6bnRoLWNoaWxkKDIpIHtcblx0XHRcdHBhZGRpbmctdG9wOiA0NXB4O1xuXHRcdH1cblxuXHRcdGRpdiB7XG5cdFx0XHRwYWRkaW5nOiAkdmVydGljYWwtc3BhY2UgJGhvcml6b250YWwtc3BhY2U7XG5cblx0XHRcdGxhYmVsIHtcblx0XHRcdFx0ZGlzcGxheTogaW5saW5lLWJsb2NrO1xuXHRcdFx0XHRmb250LXdlaWdodDogNzAwO1xuXHRcdFx0XHRtYXJnaW4tYm90dG9tOiAkdmVydGljYWwtc3BhY2UgLyAyO1xuXHRcdFx0fVxuXG5cdFx0XHRpbnB1dCxcblx0XHRcdHNlbGVjdCB7XG5cdFx0XHRcdGRpc3BsYXk6IGJsb2NrO1xuXHRcdFx0fVxuXG5cdFx0fVxuXG5cdFx0LnJhZGlvcyBsYWJlbCxcblx0XHQuY2hlY2tib3hlcyBsYWJlbCB7XG5cdFx0XHRkaXNwbGF5OiBibG9jaztcblx0XHRcdGZvbnQtd2VpZ2h0OiA0MDA7XG5cdFx0fVxuXG5cdFx0LnJhZGlvcyBpbnB1dCxcblx0XHQuY2hlY2tib3hlcyBpbnB1dCB7XG5cdFx0XHRkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG5cdFx0fVxuXG5cdFx0dGFibGUge1xuXG5cdFx0XHQuY29sdW1uLWRpcmVjdGlvbiB7XG5cdFx0XHRcdG1pbi13aWR0aDogMjAwcHg7XG5cdFx0XHR9XG5cblx0XHRcdHRkIGRpdiB7XG5cdFx0XHRcdHBhZGRpbmctbGVmdDogMDtcblx0XHRcdFx0cGFkZGluZy10b3A6IDA7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFNlbGVjdDIgZWxlbWVudHMuXG5cdCAqL1xuXHQuc2VsZWN0Mi1kcm9wLFxuXHQuc2VsZWN0Mi1kcm9wZG93biB7XG5cdFx0ei1pbmRleDogOTk5OTk5ICFpbXBvcnRhbnQ7XG5cdH1cblxuXHQuc2VsZWN0Mi1yZXN1bHRzIHtcblx0XHRsaW5lLWhlaWdodDogMS41O1xuXG5cdFx0LnNlbGVjdDItcmVzdWx0c19fb3B0aW9uLFxuXHRcdC5zZWxlY3QyLXJlc3VsdHNfX2dyb3VwIHtcblx0XHRcdG1hcmdpbjogMDtcblx0XHRcdHBhZGRpbmc6IDhweDtcblx0XHR9XG5cblx0XHQuZGVzY3JpcHRpb24ge1xuXHRcdFx0ZGlzcGxheTogYmxvY2s7XG5cdFx0XHQvL2NvbG9yOiAjOTk5O1xuXHRcdFx0cGFkZGluZy10b3A6IDRweDtcblx0XHR9XG5cdH1cblxuXHQuc2VsZWN0Mi1kcm9wZG93biB7XG5cdFx0Ym9yZGVyLWNvbG9yOiAkc2VsZWN0LWJvcmRlci1jb2xvcjtcblx0fVxuXG5cdC5zZWxlY3QyLWRyb3Bkb3duLS1iZWxvdyB7XG5cdFx0Ym94LXNoYWRvdzogMCAxcHggMXB4IHJnYmEoMCwgMCwgMCwgMC4xKTtcblx0fVxuXG5cdC5zZWxlY3QyLWRyb3Bkb3duLS1hYm92ZSB7XG5cdFx0Ym94LXNoYWRvdzogMCAtMXB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMSk7XG5cdH1cblxuXHQuc2VsZWN0Mi1jb250YWluZXIge1xuXG5cdFx0LnNlbGVjdDItc2VsZWN0aW9uIHtcblx0XHRcdGJvcmRlci1jb2xvcjogI2RkZDtcblx0XHR9XG5cblx0XHQuc2VsZWN0Mi1zZWFyY2hfX2ZpZWxkIHtcblx0XHRcdG1pbi13aWR0aDogMTUwcHg7XG5cdFx0fVxuXG5cdFx0LnNlbGVjdDItc2VsZWN0aW9uLS1zaW5nbGUge1xuXHRcdFx0aGVpZ2h0OiAzMnB4O1xuXG5cdFx0XHQuc2VsZWN0Mi1zZWxlY3Rpb25fX3JlbmRlcmVkIHtcblx0XHRcdFx0bGluZS1oZWlnaHQ6IDI7XG5cdFx0XHRcdHBhZGRpbmctcmlnaHQ6IDI0cHg7XG5cdFx0XHR9XG5cblx0XHRcdC5zZWxlY3QyLXNlbGVjdGlvbl9fYXJyb3cge1xuXHRcdFx0XHRyaWdodDogM3B4O1xuXHRcdFx0XHRoZWlnaHQ6IDMwcHg7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0LnNlbGVjdDItc2VsZWN0aW9uLS1tdWx0aXBsZSB7XG5cdFx0XHRtaW4taGVpZ2h0OiAyOHB4O1xuXHRcdFx0Ym9yZGVyLXJhZGl1czogMDtcblx0XHRcdGxpbmUtaGVpZ2h0OiAxLjU7XG5cblx0XHRcdGxpIHtcblx0XHRcdFx0bWFyZ2luOiAwO1xuXHRcdFx0fVxuXG5cdFx0XHQuc2VsZWN0Mi1zZWxlY3Rpb25fX2Nob2ljZSB7XG5cdFx0XHRcdHBhZGRpbmc6IDJweCA2cHg7XG5cblx0XHRcdFx0LmRlc2NyaXB0aW9uIHtcblx0XHRcdFx0XHRkaXNwbGF5OiBub25lO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0LnNlbGVjdDItc2VsZWN0aW9uX19jbGVhciB7XG5cdFx0XHRjb2xvcjogIzk5OTtcblx0XHRcdG1hcmdpbi10b3A6IC0xcHg7XG5cdFx0fVxuXG5cdFx0LnNlbGVjdDItc2VhcmNoLS1pbmxpbmVcblx0XHQuc2VsZWN0Mi1zZWFyY2hfX2ZpZWxkIHtcblx0XHRcdGZvbnQtZmFtaWx5OiBpbmhlcml0O1xuXHRcdFx0Zm9udC1zaXplOiBpbmhlcml0O1xuXHRcdFx0Zm9udC13ZWlnaHQ6IGluaGVyaXQ7XG5cdFx0XHRwYWRkaW5nOiAzcHggMDtcblx0XHR9XG5cblx0XHQuc2VsZWN0Mi1zZWxlY3Rpb25fX3JlbmRlcmVkLnVpLXNvcnRhYmxlIGxpIHtcblx0XHRcdGN1cnNvcjogbW92ZTtcblx0XHR9XG5cdH1cblxuXHQvKi53b29jb21tZXJjZSB0YWJsZS5mb3JtLXRhYmxlIC5zZWxlY3QyLWNvbnRhaW5lciB7XG5cdFx0bWluLXdpZHRoOiA0MDBweCAhaW1wb3J0YW50O1xuXHR9Ki9cblxufVxuXG4vLyBtZXNzYWdlcyB0byBkaXNwbGF5XG4uc2FsZXNmb3JjZV91c2VyX2FqYXhfbWVzc2FnZSB7XG5cdGJvcmRlci1sZWZ0OiA0cHggc29saWQgJHN1Y2Nlc3MtY29sb3I7XG5cdGJveC1zaGFkb3c6ICRib3gtc2hhZG93LWxlc3M7XG5cdG1hcmdpbjogNXB4IDAgJHZlcnRpY2FsLXNwYWNlO1xuXHRwYWRkaW5nOiAxcHggMTJweDtcblxuXHRwIHtcblx0XHRtYXJnaW46IDAuNWVtIDA7XG5cdFx0cGFkZGluZzogMnB4O1xuXHR9XG59XG5cbi8vIHByb2ZpbGUgdGFibGUgZm9yIHNhbGVzZm9yY2UgaW5mb1xuLm1hcHBlZC1zYWxlc2ZvcmNlLXVzZXIge1xuXHR3aWR0aDogYXV0bztcblxuXHRjYXB0aW9uIHtcblx0XHRib3JkZXI6IDFweCBzb2xpZCAkYm9yZGVyLWNvbG9yLWRhcmtlcjtcblx0XHRib3JkZXItYm90dG9tOiAwO1xuXHRcdGJveC1zaGFkb3c6ICRib3gtc2hhZG93LW1vcmU7XG5cdFx0Y29sb3I6ICM1NTU7XG5cdFx0Zm9udC1zaXplOiAxNHB4O1xuXHRcdGZvbnQtd2VpZ2h0OiA0MDA7XG5cdFx0bGluZS1oZWlnaHQ6IDEuMztcblx0XHRwYWRkaW5nOiA4cHggJGhvcml6b250YWwtc3BhY2U7XG5cdFx0dGV4dC1hbGlnbjogbGVmdDtcblx0fVxuXG5cdHRyIHRoIHtcblx0XHRib3JkZXItcmlnaHQ6IDFweCBzb2xpZCAkYm9yZGVyLWNvbG9yLWxpZ2h0ZXI7XG5cdFx0Zm9udC1zaXplOiAxM3B4O1xuXHRcdHdpZHRoOiAxNDBweDtcblx0fVxufVxuXG4iXX0= */ +.settings_page_object-sync-salesforce-admin .form-table td .checkbox{line-height:1.3;margin-bottom:9px}.settings_page_object-sync-salesforce-admin .fieldmap .spinner{display:inline-block;float:none}.settings_page_object-sync-salesforce-admin .fieldmap fieldset{border:1px solid #e1e1e1;margin-bottom:15px;position:relative}.settings_page_object-sync-salesforce-admin .fieldmap .fields{border:0}.settings_page_object-sync-salesforce-admin .fieldmap legend{margin-top:15px;padding-left:12px;position:absolute}.settings_page_object-sync-salesforce-admin .fieldmap .fields>:nth-child(2){padding-top:35px}.settings_page_object-sync-salesforce-admin .fieldmap .fields .fieldmap-template{display:none}.settings_page_object-sync-salesforce-admin .fieldmap .sync_triggers>:nth-child(2){padding-top:45px}.settings_page_object-sync-salesforce-admin .fieldmap div{padding:15px 10px}.settings_page_object-sync-salesforce-admin .fieldmap div label{display:inline-block;font-weight:700;margin-bottom:7.5px}.settings_page_object-sync-salesforce-admin .fieldmap div input,.settings_page_object-sync-salesforce-admin .fieldmap div select{display:block}.settings_page_object-sync-salesforce-admin .fieldmap .checkboxes label,.settings_page_object-sync-salesforce-admin .fieldmap .radios label{display:block;font-weight:400}.settings_page_object-sync-salesforce-admin .fieldmap .checkboxes input,.settings_page_object-sync-salesforce-admin .fieldmap .radios input{display:inline-block}.settings_page_object-sync-salesforce-admin .fieldmap table .column-direction{min-width:200px}.settings_page_object-sync-salesforce-admin .fieldmap table td div{padding-left:0;padding-top:0}.settings_page_object-sync-salesforce-admin .select2-drop,.settings_page_object-sync-salesforce-admin .select2-dropdown{z-index:999999!important}.settings_page_object-sync-salesforce-admin .select2-results{line-height:1.5}.settings_page_object-sync-salesforce-admin .select2-results .select2-results__group,.settings_page_object-sync-salesforce-admin .select2-results .select2-results__option{margin:0;padding:8px}.settings_page_object-sync-salesforce-admin .select2-results .description{display:block;padding-top:4px}.settings_page_object-sync-salesforce-admin .select2-dropdown{border-color:#ddd}.settings_page_object-sync-salesforce-admin .select2-dropdown--below{box-shadow:0 1px 1px rgba(0,0,0,.1)}.settings_page_object-sync-salesforce-admin .select2-dropdown--above{box-shadow:0 -1px 1px rgba(0,0,0,.1)}.settings_page_object-sync-salesforce-admin .select2-container .select2-selection{border-color:#ddd}.settings_page_object-sync-salesforce-admin .select2-container .select2-search__field{min-width:150px}.settings_page_object-sync-salesforce-admin .select2-container .select2-selection--single{height:32px}.settings_page_object-sync-salesforce-admin .select2-container .select2-selection--single .select2-selection__rendered{line-height:2;padding-right:24px}.settings_page_object-sync-salesforce-admin .select2-container .select2-selection--single .select2-selection__arrow{right:3px;height:30px}.settings_page_object-sync-salesforce-admin .select2-container .select2-selection--multiple{min-height:28px;border-radius:0;line-height:1.5}.settings_page_object-sync-salesforce-admin .select2-container .select2-selection--multiple li{margin:0}.settings_page_object-sync-salesforce-admin .select2-container .select2-selection--multiple .select2-selection__choice{padding:2px 6px}.settings_page_object-sync-salesforce-admin .select2-container .select2-selection--multiple .select2-selection__choice .description{display:none}.settings_page_object-sync-salesforce-admin .select2-container .select2-selection__clear{color:#999;margin-top:-1px}.settings_page_object-sync-salesforce-admin .select2-container .select2-search--inline .select2-search__field{font-family:inherit;font-size:inherit;font-weight:inherit;padding:3px 0}.settings_page_object-sync-salesforce-admin .select2-container .select2-selection__rendered.ui-sortable li{cursor:move}.salesforce_user_ajax_message{border-left:4px solid #46b450;box-shadow:0 1px 1px 0 rgba(0,0,0,.1);margin:5px 0 15px;padding:1px 12px}.salesforce_user_ajax_message p{margin:.5em 0;padding:2px}.mapped-salesforce-user{width:auto}.mapped-salesforce-user caption{border:1px solid #e1e1e1;border-bottom:0;box-shadow:0 1px 1px rgba(0,0,0,.04);color:#555;font-size:14px;font-weight:400;line-height:1.3;padding:8px 10px;text-align:left}.mapped-salesforce-user tr th{border-right:1px solid #e5e5e5;font-size:13px;width:140px} +/*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm9iamVjdC1zeW5jLWZvci1zYWxlc2ZvcmNlLWFkbWluLnNjc3MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBVUEscUVBT0ksZUFBZ0IsQ0FDaEIsaUJBQWtCLENBUnRCLCtEQWlCRyxvQkFBcUIsQ0FDckIsVUFBVyxDQWxCZCwrREFzQkcsd0JBN0IwQixDQThCMUIsa0JBMUJrQixDQTJCbEIsaUJBQWtCLENBeEJyQiw4REE0QkcsUUFBUyxDQTVCWiw2REFnQ0csZUFuQ2tCLENBb0NsQixpQkFBa0IsQ0FDbEIsaUJBQWtCLENBbENyQiw0RUFzQ0csZ0JBQWlCLENBdENwQixpRkEwQ0csWUFBYSxDQTFDaEIsbUZBOENHLGdCQUFpQixDQTlDcEIsMERBa0RHLGlCQXZEb0IsQ0FLdkIsZ0VBcURJLG9CQUFxQixDQUNyQixlQUFnQixDQUNoQixtQkFBa0MsQ0F2RHRDLGlJQTRESSxhQUFjLENBNURsQiw0SUFtRUcsYUFBYyxDQUNkLGVBQWdCLENBcEVuQiw0SUF5RUcsb0JBQXFCLENBekV4Qiw4RUErRUksZUFBZ0IsQ0EvRXBCLG1FQW1GSSxjQUFlLENBQ2YsYUFBYyxDQXBGbEIsd0hBOEZFLHdCQUEwQixDQTlGNUIsNkRBa0dFLGVBQWdCLENBbEdsQiwyS0FzR0csUUFBUyxDQUNULFdBQVksQ0F2R2YsMEVBMkdHLGFBQWMsQ0FFZCxlQUFnQixDQTdHbkIsOERBa0hFLGlCQXBId0IsQ0FFMUIscUVBc0hFLG1DQUF3QyxDQXRIMUMscUVBMEhFLG9DQUF5QyxDQTFIM0Msa0ZBZ0lHLGlCQUFrQixDQWhJckIsc0ZBb0lHLGVBQWdCLENBcEluQiwwRkF3SUcsV0FBWSxDQXhJZix1SEEySUksYUFBYyxDQUNkLGtCQUFtQixDQTVJdkIsb0hBZ0pJLFNBQVUsQ0FDVixXQUFZLENBakpoQiw0RkFzSkcsZUFBZ0IsQ0FDaEIsZUFBZ0IsQ0FDaEIsZUFBZ0IsQ0F4Sm5CLCtGQTJKSSxRQUFTLENBM0piLHVIQStKSSxlQUFnQixDQS9KcEIsb0lBa0tLLFlBQWEsQ0FsS2xCLHlGQXdLRyxVQUFXLENBQ1gsZUFBZ0IsQ0F6S25CLDhHQThLRyxtQkFBb0IsQ0FDcEIsaUJBQWtCLENBQ2xCLG1CQUFvQixDQUNwQixhQUFjLENBakxqQiwyR0FxTEcsV0FBWSxDQVdmLDhCQUNDLDZCQXJNc0IsQ0FzTXRCLHFDQTNNK0MsQ0E0TS9DLGlCQXRNb0IsQ0F1TXBCLGdCQUFpQixDQUpsQixnQ0FPRSxhQUFlLENBQ2YsV0FBWSxDQUtkLHdCQUNDLFVBQVcsQ0FEWixnQ0FJRSx3QkF4TjJCLENBeU4zQixlQUFnQixDQUNoQixvQ0EzTjZDLENBNE43QyxVQUFXLENBQ1gsY0FBZSxDQUNmLGVBQWdCLENBQ2hCLGVBQWdCLENBQ2hCLGdCQTdOcUIsQ0E4TnJCLGVBQWdCLENBWmxCLDhCQWdCRSw4QkFuTzRCLENBb081QixjQUFlLENBQ2YsV0FBWSIsImZpbGUiOiJvYmplY3Qtc3luYy1mb3Itc2FsZXNmb3JjZS1hZG1pbi5jc3MiLCJzb3VyY2VzQ29udGVudCI6WyIvLyB2YXJpYWJsZXNcbiRib3gtc2hhZG93LWxlc3M6IDAgMXB4IDFweCAwIHJnYmEoMCwgMCwgMCwgMC4xKTtcbiRib3gtc2hhZG93LW1vcmU6IDAgMXB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMDQpO1xuJGJvcmRlci1jb2xvci1kYXJrZXI6ICNlMWUxZTE7XG4kYm9yZGVyLWNvbG9yLWxpZ2h0ZXI6ICNlNWU1ZTU7XG4kaG9yaXpvbnRhbC1zcGFjZTogMTBweDtcbiRzdWNjZXNzLWNvbG9yOiAjNDZiNDUwO1xuJHZlcnRpY2FsLXNwYWNlOiAxNXB4O1xuJHNlbGVjdC1ib3JkZXItY29sb3I6ICNkZGQ7XG5cbi5zZXR0aW5nc19wYWdlX29iamVjdC1zeW5jLXNhbGVzZm9yY2UtYWRtaW4ge1xuXG5cdC5mb3JtLXRhYmxlIHtcblxuXHRcdHRkIHtcblxuXHRcdFx0LmNoZWNrYm94IHtcblx0XHRcdFx0bGluZS1oZWlnaHQ6IDEuMztcblx0XHRcdFx0bWFyZ2luLWJvdHRvbTogOXB4O1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8vIGZpZWxkbWFwIGZvcm1cblx0LmZpZWxkbWFwIHtcblxuXHRcdC5zcGlubmVyIHtcblx0XHRcdGRpc3BsYXk6IGlubGluZS1ibG9jaztcblx0XHRcdGZsb2F0OiBub25lO1xuXHRcdH1cblxuXHRcdGZpZWxkc2V0IHtcblx0XHRcdGJvcmRlcjogMXB4IHNvbGlkICRib3JkZXItY29sb3ItZGFya2VyO1xuXHRcdFx0bWFyZ2luLWJvdHRvbTogJHZlcnRpY2FsLXNwYWNlO1xuXHRcdFx0cG9zaXRpb246IHJlbGF0aXZlO1xuXHRcdH1cblxuXHRcdC5maWVsZHMge1xuXHRcdFx0Ym9yZGVyOiAwO1xuXHRcdH1cblxuXHRcdGxlZ2VuZCB7XG5cdFx0XHRtYXJnaW4tdG9wOiAkdmVydGljYWwtc3BhY2U7XG5cdFx0XHRwYWRkaW5nLWxlZnQ6IDEycHg7XG5cdFx0XHRwb3NpdGlvbjogYWJzb2x1dGU7XG5cdFx0fVxuXG5cdFx0LmZpZWxkcyA+IDpudGgtY2hpbGQoMikge1xuXHRcdFx0cGFkZGluZy10b3A6IDM1cHg7XG5cdFx0fVxuXG5cdFx0LmZpZWxkcyAuZmllbGRtYXAtdGVtcGxhdGUge1xuXHRcdFx0ZGlzcGxheTogbm9uZTtcblx0XHR9XG5cblx0XHQuc3luY190cmlnZ2VycyA+IDpudGgtY2hpbGQoMikge1xuXHRcdFx0cGFkZGluZy10b3A6IDQ1cHg7XG5cdFx0fVxuXG5cdFx0ZGl2IHtcblx0XHRcdHBhZGRpbmc6ICR2ZXJ0aWNhbC1zcGFjZSAkaG9yaXpvbnRhbC1zcGFjZTtcblxuXHRcdFx0bGFiZWwge1xuXHRcdFx0XHRkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG5cdFx0XHRcdGZvbnQtd2VpZ2h0OiA3MDA7XG5cdFx0XHRcdG1hcmdpbi1ib3R0b206ICR2ZXJ0aWNhbC1zcGFjZSAvIDI7XG5cdFx0XHR9XG5cblx0XHRcdGlucHV0LFxuXHRcdFx0c2VsZWN0IHtcblx0XHRcdFx0ZGlzcGxheTogYmxvY2s7XG5cdFx0XHR9XG5cblx0XHR9XG5cblx0XHQucmFkaW9zIGxhYmVsLFxuXHRcdC5jaGVja2JveGVzIGxhYmVsIHtcblx0XHRcdGRpc3BsYXk6IGJsb2NrO1xuXHRcdFx0Zm9udC13ZWlnaHQ6IDQwMDtcblx0XHR9XG5cblx0XHQucmFkaW9zIGlucHV0LFxuXHRcdC5jaGVja2JveGVzIGlucHV0IHtcblx0XHRcdGRpc3BsYXk6IGlubGluZS1ibG9jaztcblx0XHR9XG5cblx0XHR0YWJsZSB7XG5cblx0XHRcdC5jb2x1bW4tZGlyZWN0aW9uIHtcblx0XHRcdFx0bWluLXdpZHRoOiAyMDBweDtcblx0XHRcdH1cblxuXHRcdFx0dGQgZGl2IHtcblx0XHRcdFx0cGFkZGluZy1sZWZ0OiAwO1xuXHRcdFx0XHRwYWRkaW5nLXRvcDogMDtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogU2VsZWN0MiBlbGVtZW50cy5cblx0ICovXG5cdC5zZWxlY3QyLWRyb3AsXG5cdC5zZWxlY3QyLWRyb3Bkb3duIHtcblx0XHR6LWluZGV4OiA5OTk5OTkgIWltcG9ydGFudDtcblx0fVxuXG5cdC5zZWxlY3QyLXJlc3VsdHMge1xuXHRcdGxpbmUtaGVpZ2h0OiAxLjU7XG5cblx0XHQuc2VsZWN0Mi1yZXN1bHRzX19vcHRpb24sXG5cdFx0LnNlbGVjdDItcmVzdWx0c19fZ3JvdXAge1xuXHRcdFx0bWFyZ2luOiAwO1xuXHRcdFx0cGFkZGluZzogOHB4O1xuXHRcdH1cblxuXHRcdC5kZXNjcmlwdGlvbiB7XG5cdFx0XHRkaXNwbGF5OiBibG9jaztcblx0XHRcdC8vY29sb3I6ICM5OTk7XG5cdFx0XHRwYWRkaW5nLXRvcDogNHB4O1xuXHRcdH1cblx0fVxuXG5cdC5zZWxlY3QyLWRyb3Bkb3duIHtcblx0XHRib3JkZXItY29sb3I6ICRzZWxlY3QtYm9yZGVyLWNvbG9yO1xuXHR9XG5cblx0LnNlbGVjdDItZHJvcGRvd24tLWJlbG93IHtcblx0XHRib3gtc2hhZG93OiAwIDFweCAxcHggcmdiYSgwLCAwLCAwLCAwLjEpO1xuXHR9XG5cblx0LnNlbGVjdDItZHJvcGRvd24tLWFib3ZlIHtcblx0XHRib3gtc2hhZG93OiAwIC0xcHggMXB4IHJnYmEoMCwgMCwgMCwgMC4xKTtcblx0fVxuXG5cdC5zZWxlY3QyLWNvbnRhaW5lciB7XG5cblx0XHQuc2VsZWN0Mi1zZWxlY3Rpb24ge1xuXHRcdFx0Ym9yZGVyLWNvbG9yOiAjZGRkO1xuXHRcdH1cblxuXHRcdC5zZWxlY3QyLXNlYXJjaF9fZmllbGQge1xuXHRcdFx0bWluLXdpZHRoOiAxNTBweDtcblx0XHR9XG5cblx0XHQuc2VsZWN0Mi1zZWxlY3Rpb24tLXNpbmdsZSB7XG5cdFx0XHRoZWlnaHQ6IDMycHg7XG5cblx0XHRcdC5zZWxlY3QyLXNlbGVjdGlvbl9fcmVuZGVyZWQge1xuXHRcdFx0XHRsaW5lLWhlaWdodDogMjtcblx0XHRcdFx0cGFkZGluZy1yaWdodDogMjRweDtcblx0XHRcdH1cblxuXHRcdFx0LnNlbGVjdDItc2VsZWN0aW9uX19hcnJvdyB7XG5cdFx0XHRcdHJpZ2h0OiAzcHg7XG5cdFx0XHRcdGhlaWdodDogMzBweDtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQuc2VsZWN0Mi1zZWxlY3Rpb24tLW11bHRpcGxlIHtcblx0XHRcdG1pbi1oZWlnaHQ6IDI4cHg7XG5cdFx0XHRib3JkZXItcmFkaXVzOiAwO1xuXHRcdFx0bGluZS1oZWlnaHQ6IDEuNTtcblxuXHRcdFx0bGkge1xuXHRcdFx0XHRtYXJnaW46IDA7XG5cdFx0XHR9XG5cblx0XHRcdC5zZWxlY3QyLXNlbGVjdGlvbl9fY2hvaWNlIHtcblx0XHRcdFx0cGFkZGluZzogMnB4IDZweDtcblxuXHRcdFx0XHQuZGVzY3JpcHRpb24ge1xuXHRcdFx0XHRcdGRpc3BsYXk6IG5vbmU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHQuc2VsZWN0Mi1zZWxlY3Rpb25fX2NsZWFyIHtcblx0XHRcdGNvbG9yOiAjOTk5O1xuXHRcdFx0bWFyZ2luLXRvcDogLTFweDtcblx0XHR9XG5cblx0XHQuc2VsZWN0Mi1zZWFyY2gtLWlubGluZVxuXHRcdC5zZWxlY3QyLXNlYXJjaF9fZmllbGQge1xuXHRcdFx0Zm9udC1mYW1pbHk6IGluaGVyaXQ7XG5cdFx0XHRmb250LXNpemU6IGluaGVyaXQ7XG5cdFx0XHRmb250LXdlaWdodDogaW5oZXJpdDtcblx0XHRcdHBhZGRpbmc6IDNweCAwO1xuXHRcdH1cblxuXHRcdC5zZWxlY3QyLXNlbGVjdGlvbl9fcmVuZGVyZWQudWktc29ydGFibGUgbGkge1xuXHRcdFx0Y3Vyc29yOiBtb3ZlO1xuXHRcdH1cblx0fVxuXG5cdC8qLndvb2NvbW1lcmNlIHRhYmxlLmZvcm0tdGFibGUgLnNlbGVjdDItY29udGFpbmVyIHtcblx0XHRtaW4td2lkdGg6IDQwMHB4ICFpbXBvcnRhbnQ7XG5cdH0qL1xuXG59XG5cbi8vIG1lc3NhZ2VzIHRvIGRpc3BsYXlcbi5zYWxlc2ZvcmNlX3VzZXJfYWpheF9tZXNzYWdlIHtcblx0Ym9yZGVyLWxlZnQ6IDRweCBzb2xpZCAkc3VjY2Vzcy1jb2xvcjtcblx0Ym94LXNoYWRvdzogJGJveC1zaGFkb3ctbGVzcztcblx0bWFyZ2luOiA1cHggMCAkdmVydGljYWwtc3BhY2U7XG5cdHBhZGRpbmc6IDFweCAxMnB4O1xuXG5cdHAge1xuXHRcdG1hcmdpbjogMC41ZW0gMDtcblx0XHRwYWRkaW5nOiAycHg7XG5cdH1cbn1cblxuLy8gcHJvZmlsZSB0YWJsZSBmb3Igc2FsZXNmb3JjZSBpbmZvXG4ubWFwcGVkLXNhbGVzZm9yY2UtdXNlciB7XG5cdHdpZHRoOiBhdXRvO1xuXG5cdGNhcHRpb24ge1xuXHRcdGJvcmRlcjogMXB4IHNvbGlkICRib3JkZXItY29sb3ItZGFya2VyO1xuXHRcdGJvcmRlci1ib3R0b206IDA7XG5cdFx0Ym94LXNoYWRvdzogJGJveC1zaGFkb3ctbW9yZTtcblx0XHRjb2xvcjogIzU1NTtcblx0XHRmb250LXNpemU6IDE0cHg7XG5cdFx0Zm9udC13ZWlnaHQ6IDQwMDtcblx0XHRsaW5lLWhlaWdodDogMS4zO1xuXHRcdHBhZGRpbmc6IDhweCAkaG9yaXpvbnRhbC1zcGFjZTtcblx0XHR0ZXh0LWFsaWduOiBsZWZ0O1xuXHR9XG5cblx0dHIgdGgge1xuXHRcdGJvcmRlci1yaWdodDogMXB4IHNvbGlkICRib3JkZXItY29sb3ItbGlnaHRlcjtcblx0XHRmb250LXNpemU6IDEzcHg7XG5cdFx0d2lkdGg6IDE0MHB4O1xuXHR9XG59XG5cbiJdfQ== */ diff --git a/assets/sass/object-sync-for-salesforce-admin.scss b/assets/sass/object-sync-for-salesforce-admin.scss index f22df84e..46efafad 100644 --- a/assets/sass/object-sync-for-salesforce-admin.scss +++ b/assets/sass/object-sync-for-salesforce-admin.scss @@ -49,7 +49,7 @@ $select-border-color: #ddd; padding-top: 35px; } - .fields .fieldmap-template-hidden { + .fields .fieldmap-template { display: none; } From 78095e01421a2a7ceb015a1cdedc87a5f94acae3 Mon Sep 17 00:00:00 2001 From: Jonathan Stegall Date: Sun, 5 Jan 2020 07:59:34 -0600 Subject: [PATCH 05/27] fix the template row so it works before there is a fieldmap also --- templates/admin/fieldmaps-add-edit-clone.php | 44 ++++++++++---------- 1 file changed, 23 insertions(+), 21 deletions(-) diff --git a/templates/admin/fieldmaps-add-edit-clone.php b/templates/admin/fieldmaps-add-edit-clone.php index f49c0e86..facf9433 100755 --- a/templates/admin/fieldmaps-add-edit-clone.php +++ b/templates/admin/fieldmaps-add-edit-clone.php @@ -220,11 +220,9 @@ $value ) { - $has_other_rows = true; - $key = md5( $key . time() ); + $key = md5( $key . time() ); ?> @@ -345,18 +343,20 @@ } // End foreach(). } // End if(). ?> - + @@ -365,17 +365,19 @@ From 771934252f3430eec98c88ae4026d0161ef2fcea Mon Sep 17 00:00:00 2001 From: Jonathan Stegall Date: Sun, 5 Jan 2020 08:06:12 -0600 Subject: [PATCH 06/27] deprecate wp object description method; rename to fields for what it actually does, and add 'fields' to the ajax response accordingly --- classes/admin.php | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/classes/admin.php b/classes/admin.php index 8583732a..9e9b8da3 100755 --- a/classes/admin.php +++ b/classes/admin.php @@ -156,7 +156,12 @@ public function add_actions() { // Ajax for fieldmap forms add_action( 'wp_ajax_get_salesforce_object_description', array( $this, 'get_salesforce_object_description' ), 10, 1 ); + /** + * method: get_wordpress_object_description + * @deprecated since 1.9.0 + */ add_action( 'wp_ajax_get_wordpress_object_description', array( $this, 'get_wordpress_object_fields' ), 10, 1 ); + add_action( 'wp_ajax_get_wordpress_object_fields', array( $this, 'get_wordpress_object_fields' ), 10, 1 ); add_action( 'wp_ajax_get_wp_sf_object_fields', array( $this, 'get_wp_sf_object_fields' ), 10, 2 ); // Ajax events that can be manually called @@ -1342,7 +1347,10 @@ public function get_wordpress_object_fields( $wordpress_object = '' ) { $object_fields = $this->wordpress->get_wordpress_object_fields( $wordpress_object ); if ( true === $ajax ) { - wp_send_json_success( $object_fields ); + $ajax_response = array( + 'fields' => $object_fields, + ); + wp_send_json_success( $ajax_response ); } else { return $object_fields; } From 313202bbf425d3564de9e3720e4030f42a93a3ee Mon Sep 17 00:00:00 2001 From: Jonathan Stegall Date: Sun, 5 Jan 2020 08:07:40 -0600 Subject: [PATCH 07/27] deprecate the combined method as well --- classes/admin.php | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/classes/admin.php b/classes/admin.php index 9e9b8da3..92383695 100755 --- a/classes/admin.php +++ b/classes/admin.php @@ -162,6 +162,10 @@ public function add_actions() { */ add_action( 'wp_ajax_get_wordpress_object_description', array( $this, 'get_wordpress_object_fields' ), 10, 1 ); add_action( 'wp_ajax_get_wordpress_object_fields', array( $this, 'get_wordpress_object_fields' ), 10, 1 ); + /** + * method: get_wp_sf_object_fields + * @deprecated since 1.9.0 + */ add_action( 'wp_ajax_get_wp_sf_object_fields', array( $this, 'get_wp_sf_object_fields' ), 10, 2 ); // Ajax events that can be manually called @@ -1360,6 +1364,7 @@ public function get_wordpress_object_fields( $wordpress_object = '' ) { * Get WordPress and Salesforce object fields together for fieldmapping * This takes either the $_POST array via ajax, or can be directly called with $wordpress_object and $salesforce_object fields * + * @deprecated since 1.9.0 * @param string $wordpress_object * @param string $salesforce_object * @return array $object_fields From edf92ed844d01257bf05e6cae591dd4ec7b5cece Mon Sep 17 00:00:00 2001 From: Jonathan Stegall Date: Sun, 5 Jan 2020 08:08:25 -0600 Subject: [PATCH 08/27] allow salesforce_object_fields to be ajax method. filter which attributes get returned, in that case. --- classes/admin.php | 33 +++++++++++++++++++++++++++------ 1 file changed, 27 insertions(+), 6 deletions(-) diff --git a/classes/admin.php b/classes/admin.php index 92383695..371b5123 100755 --- a/classes/admin.php +++ b/classes/admin.php @@ -161,6 +161,7 @@ public function add_actions() { * @deprecated since 1.9.0 */ add_action( 'wp_ajax_get_wordpress_object_description', array( $this, 'get_wordpress_object_fields' ), 10, 1 ); + add_action( 'wp_ajax_get_salesforce_object_fields', array( $this, 'get_salesforce_object_fields' ), 10, 1 ); add_action( 'wp_ajax_get_wordpress_object_fields', array( $this, 'get_wordpress_object_fields' ), 10, 1 ); /** * method: get_wp_sf_object_fields @@ -1301,22 +1302,35 @@ public function get_salesforce_object_description( $data = array() ) { /** * Get Salesforce object fields for fieldmapping + * This takes either the $_POST array via ajax, or can be directly called with a $data array * * @param array $data - * data must contain a salesforce_object - * can optionally contain a type for the field + * data must contain a salesforce_object unless it is Ajax + * data can optionally contain a type for the field * @return array $object_fields */ public function get_salesforce_object_fields( $data = array() ) { - - if ( ! empty( $data['salesforce_object'] ) ) { - $object = $this->salesforce['sfapi']->object_describe( esc_attr( $data['salesforce_object'] ) ); + $ajax = false; + $post_data = filter_input_array( INPUT_POST, FILTER_SANITIZE_STRING ); + if ( empty( $data ) ) { + $salesforce_object = isset( $post_data['salesforce_object'] ) ? sanitize_text_field( wp_unslash( $post_data['salesforce_object'] ) ) : ''; + $ajax = true; + $attributes = array( 'name', 'label' ); + } else { + $salesforce_object = isset( $data['salesforce_object'] ) ? sanitize_text_field( wp_unslash( $data['salesforce_object'] ) ) : ''; + } + $object_fields = array(); + if ( ! empty( $salesforce_object ) ) { + $object = $this->salesforce['sfapi']->object_describe( esc_attr( $salesforce_object ) ); $object_fields = array(); $type = isset( $data['type'] ) ? esc_attr( $data['type'] ) : ''; $include_record_types = isset( $data['include_record_types'] ) ? esc_attr( $data['include_record_types'] ) : false; foreach ( $object['data']['fields'] as $key => $value ) { if ( '' === $type || $type === $value['type'] ) { $object_fields[ $key ] = $value; + if ( isset( $attributes ) ) { + $object_fields[ $key ] = array_intersect_key( $value, array_flip( $attributes ) ); + } } } if ( true === $include_record_types ) { @@ -1329,7 +1343,14 @@ public function get_salesforce_object_fields( $data = array() ) { } } - return $object_fields; + if ( true === $ajax ) { + $ajax_response = array( + 'fields' => $object_fields, + ); + wp_send_json_success( $ajax_response ); + } else { + return $object_fields; + } } From 29a7fcfa84baeaf04370bb06a99c5778b249ec19 Mon Sep 17 00:00:00 2001 From: Jonathan Stegall Date: Sun, 5 Jan 2020 08:14:22 -0600 Subject: [PATCH 09/27] make adding a new fieldset to the fieldmap driven by a template from the server, not from the javascript. also, allow it to regenerate whenever the wp or sf object changes --- assets/js/object-sync-for-salesforce-admin.js | 137 +++++++++++------- .../object-sync-for-salesforce-admin.min.js | 2 +- assets/js/src/admin.js | 132 ++++++++++------- 3 files changed, 158 insertions(+), 113 deletions(-) diff --git a/assets/js/object-sync-for-salesforce-admin.js b/assets/js/object-sync-for-salesforce-admin.js index c29ef3be..fe792e4d 100644 --- a/assets/js/object-sync-for-salesforce-admin.js +++ b/assets/js/object-sync-for-salesforce-admin.js @@ -1,9 +1,38 @@ "use strict"; (function ($) { + function loadFieldOptions(system, object_name) { + var data = { + 'action': 'get_' + system + '_object_fields' + }; + var fields = ''; + var first_field = $('.column-' + system + '_field select option').first().text(); + fields += ''; + + if ('wordpress' === system) { + data['wordpress_object'] = object_name; + } else if ('salesforce' === system) { + data['salesforce_object'] = object_name; + } else { + return fields; + } + + $.post(ajaxurl, data, function (response) { + $.each(response.data.fields, function (index, value) { + if ('wordpress' === system) { + fields += ''; + } else if ('salesforce' === system) { + fields += ''; + } + }); + $('.column-' + system + '_field select').html(fields); + }); + } /** * Don't show the WSDL file field unless SOAP is enabled */ + + function toggleSoapFields() { if (0 < $('.object-sync-for-salesforce-enable-soap').length) { if ($('.object-sync-for-salesforce-enable-soap input').is(':checked')) { @@ -115,60 +144,45 @@ function addFieldMappingRow() { $('#add-field-mapping').click(function () { - var salesforceObject = $('#salesforce_object').val(); - var wordpressObject = $('#wordpress_object').val(); - var rowKey; + var newKey = new Date().getUTCMilliseconds(); + var lastRow = $('table.fields tbody tr').last(); + var oldKey = lastRow.attr('data-key'); + oldKey = new RegExp(oldKey, 'g'); $(this).text('Add another field mapping'); - - if ('' !== wordpressObject && '' !== salesforceObject) { - rowKey = Math.floor(Date.now() / 1000); - fieldmapFields(wordpressObject, salesforceObject, rowKey); - $(this).parent().find('.missing-object').remove(); - } else { - $(this).parent().prepend('
You have to pick a WordPress object and a Salesforce object to add field mapping.
'); - } - + fieldmapFields(oldKey, newKey, lastRow); + $(this).parent().find('.missing-object').remove(); return false; }); } /** * Gets the WordPress and Salesforce field results via an Ajax call - * @param string wordpressObject the WordPress object type - * @param string salesforceObject the Salesforce object type - * @param int rowKey which row we're working on + * @param string oldKey the data-key attribute of the set that is being cloned + * @param string newKey the data-key attribute for the one we're appending + * @param object lastRow the last set of the fieldmap */ - function fieldmapFields(wordpressObject, salesforceObject, rowKey) { - var data = { - 'action': 'get_wp_sf_object_fields', - 'wordpress_object': wordpressObject, - 'salesforce_object': salesforceObject - }; - $.post(ajaxurl, data, function (response) { - var wordpress = ''; - var salesforce = ''; - var markup = ''; - wordpress += ''; - salesforce += ''; - markup = '' + wordpress + '' + salesforce + '
'; - $('table.fields tbody').append(markup); + function fieldmapFields(oldKey, newKey, lastRow) { + var nextRow = ''; - if (jQuery.fn.select2) { - $('.column-wordpress_field select').select2(); - $('.column-salesforce_field select').select2(); - } + if (jQuery.fn.select2) { + nextRow = lastRow.find('select').select2('destroy').end().clone(true).removeClass('fieldmap-template'); + } else { + nextRow = lastRow.clone(true); + } + + $(nextRow).attr('data-key', newKey); + $(nextRow).each(function () { + $(this).html(function (i, h) { + return h.replace(oldKey, newKey); + }); }); + $('table.fields tbody').append(nextRow); + + if (jQuery.fn.select2) { + lastRow.find('select').select2(); + nextRow.find('select').select2(); + } } /** * Handle manual push and pull of objects @@ -260,8 +274,28 @@ }); return false; }); - } // show wsdl field if soap is enabled + } // load available options if the wordpress object changes + + $(document).on('change', 'select#wordpress_object', function () { + var timeout; + loadFieldOptions('wordpress', $(this).val()); + clearTimeout(timeout); + timeout = setTimeout(function () { + $('table.fields tbody tr').fadeOut(); + $('table.fields tbody tr').not(':last').remove(); + }, 1000); + }); // load available options if the salesforce object changes + + $(document).on('change', 'select#salesforce_object', function () { + var timeout; + loadFieldOptions('salesforce', $(this).val()); + clearTimeout(timeout); + timeout = setTimeout(function () { + $('table.fields tbody tr').fadeOut(); + $('table.fields tbody tr').not(':last').remove(); + }, 1000); + }); // show wsdl field if soap is enabled $(document).on('change', '.object-sync-for-salesforce-enable-soap input', function () { toggleSoapFields(); @@ -292,9 +326,7 @@ $(document).ready(function () { // for main admin settings - toggleSoapFields(); // for the fieldmap add/edit screen - - var timeout; + toggleSoapFields(); if (jQuery.fn.select2) { $('select#wordpress_object').select2(); @@ -303,15 +335,8 @@ $('select#pull_trigger_field').select2(); $('.column-wordpress_field select').select2(); $('.column-salesforce_field select').select2(); - } + } // todo: need to fix this so it doesn't run all the spinners at the same time when there are multiples on the same page - $('#wordpress_object, #salesforce_object').on('change', function () { - clearTimeout(timeout); - timeout = setTimeout(function () { - $('table.fields tbody tr').fadeOut(); - $('table.fields tbody tr').remove(); - }, 1000); - }); // todo: need to fix this so it doesn't run all the spinners at the same time when there are multiples on the same page $(document).ajaxStart(function () { $('.spinner').addClass('is-active'); @@ -326,4 +351,4 @@ clearSfwpCacheLink(); }); })(jQuery); -//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFkbWluLmpzIl0sIm5hbWVzIjpbIiQiLCJ0b2dnbGVTb2FwRmllbGRzIiwibGVuZ3RoIiwiaXMiLCJzaG93IiwiaGlkZSIsInNhbGVzZm9yY2VPYmplY3RGaWVsZHMiLCJkZWxheSIsInRpbWVyIiwiY2FsbGJhY2siLCJtcyIsImNsZWFyVGltZW91dCIsInNldFRpbWVvdXQiLCJvbiIsInRoYXQiLCJkZWxheVRpbWUiLCJkYXRhIiwidmFsdWUiLCJwb3N0IiwiYWpheHVybCIsInJlc3BvbnNlIiwicmVjb3JkVHlwZXNBbGxvd2VkTWFya3VwIiwicmVjb3JkVHlwZURlZmF1bHRNYXJrdXAiLCJkYXRlTWFya3VwIiwicmVjb3JkVHlwZUluZm9zIiwiZWFjaCIsImluZGV4IiwiaHRtbCIsImZpZWxkcyIsIm5hbWUiLCJsYWJlbCIsImpRdWVyeSIsImZuIiwic2VsZWN0MiIsImFkZEZpZWxkTWFwcGluZ1JvdyIsImNsaWNrIiwic2FsZXNmb3JjZU9iamVjdCIsInZhbCIsIndvcmRwcmVzc09iamVjdCIsInJvd0tleSIsInRleHQiLCJNYXRoIiwiZmxvb3IiLCJEYXRlIiwibm93IiwiZmllbGRtYXBGaWVsZHMiLCJwYXJlbnQiLCJmaW5kIiwicmVtb3ZlIiwicHJlcGVuZCIsIndvcmRwcmVzcyIsInNhbGVzZm9yY2UiLCJtYXJrdXAiLCJrZXkiLCJhcHBlbmQiLCJwdXNoQW5kUHVsbE9iamVjdHMiLCJ3b3JkcHJlc3NJZCIsInNhbGVzZm9yY2VJZCIsInN1Y2Nlc3MiLCJ1cGRhdGVTYWxlc2ZvcmNlVXNlclN1bW1hcnkiLCJ3aWR0aCIsImZhZGVJbiIsImZhZGVPdXQiLCJtYXBwaW5nSWQiLCJsYXN0X3N5bmNfbWVzc2FnZSIsImxhc3Rfc3luY19hY3Rpb24iLCJsYXN0X3N5bmNfc3RhdHVzIiwibGFzdF9zeW5jIiwiY2xlYXJTZndwQ2FjaGVMaW5rIiwibWVzc2FnZSIsImRvY3VtZW50Iiwibm90IiwicHJvcCIsInJlYWR5IiwidGltZW91dCIsImFqYXhTdGFy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SUFBQUEsc0JBQXNCO0FBQ3RCNEIsSUFBQUEsa0JBQWtCLEdBaENhLENBa0MvQjs7QUFDQXFCLElBQUFBLGtCQUFrQixHQW5DYSxDQXFDL0I7O0FBQ0FhLElBQUFBLGtCQUFrQjtBQUNsQixHQXZDRDtBQXdDQSxDQTlUQyxFQThUQ3JDLE1BOVRELENBQUYiLCJmaWxlIjoib2JqZWN0LXN5bmMtZm9yLXNhbGVzZm9yY2UtYWRtaW4uanMiLCJzb3VyY2VzQ29udGVudCI6WyIoIGZ1bmN0aW9uKCAkICkge1xuXG5cdC8qKlxuXHQgKiBEb24ndCBzaG93IHRoZSBXU0RMIGZpbGUgZmllbGQgdW5sZXNzIFNPQVAgaXMgZW5hYmxlZFxuXHQgKi9cblx0ZnVuY3Rpb24gdG9nZ2xlU29hcEZpZWxkcygpIHtcblx0XHRpZiAoIDAgPCAkKCAnLm9iamVjdC1zeW5jLWZvci1zYWxlc2ZvcmNlLWVuYWJsZS1zb2FwJyApLmxlbmd0aCApIHtcblx0XHRcdGlmICggJCggJy5vYmplY3Qtc3luYy1mb3Itc2FsZXNmb3JjZS1lbmFibGUtc29hcCBpbnB1dCcgKS5pcyggJzpjaGVja2VkJyApICkge1xuXHRcdFx0XHQkKCAnLm9iamVjdC1zeW5jLWZvci1zYWxlc2ZvcmNlLXNvYXAtd3NkbC1wYXRoJyApLnNob3coKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdCQoICcub2JqZWN0LXN5bmMtZm9yLXNhbGVzZm9yY2Utc29hcC13c2RsLXBhdGgnICkuaGlkZSgpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBHZW5lcmF0ZXMgdGhlIFNhbGVzZm9yY2Ugb2JqZWN0IGZpZWxkcyBiYXNlZCBvbiB0aGUgZHJvcGRvd24gYWN0aXZpdHkgYW5kIEFQSSByZXN1bHRzLlxuXHQgKi9cblx0ZnVuY3Rpb24gc2FsZXNmb3JjZU9iamVjdEZpZWxkcygpIHtcblxuXHRcdHZhciBkZWxheSA9ICggZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgdGltZXIgPSAwO1xuXHRcdFx0cmV0dXJuIGZ1bmN0aW9uKCBjYWxsYmFjaywgbXMgKSB7XG5cdFx0XHRcdGNsZWFyVGltZW91dCAoIHRpbWVyICk7XG5cdFx0XHRcdHRpbWVyID0gc2V0VGltZW91dCggY2FsbGJhY2ssIG1zICk7XG5cdFx0XHR9O1xuXHRcdH0oKSApO1xuXG5cdFx0aWYgKCAwID09PSAkKCAnLnNhbGVzZm9yY2VfcmVjb3JkX3R5cGVzX2FsbG93ZWQgPiAqJyApLmxlbmd0aCApIHtcblx0XHRcdCQoICcuc2FsZXNmb3JjZV9yZWNvcmRfdHlwZXNfYWxsb3dlZCcgKS5oaWRlKCk7XG5cdFx0fVxuXG5cdFx0aWYgKCAwID09PSAkKCAnLnNhbGVzZm9yY2VfcmVjb3JkX3R5cGVfZGVmYXVsdCA+IConICkubGVuZ3RoICkge1xuXHRcdFx0JCggJy5zYWxlc2ZvcmNlX3JlY29yZF90eXBlX2RlZmF1bHQnICkuaGlkZSgpO1xuXHRcdH1cblx0XHRpZiAoIDAgPT09ICQoICcucHVsbF90cmlnZ2VyX2ZpZWxkID4gKicgKS5sZW5ndGggKSB7XG5cdFx0XHQkKCAnLnB1bGxfdHJpZ2dlcl9maWVsZCcgKS5oaWRlKCk7XG5cdFx0fVxuXG5cdFx0JCggJyNzYWxlc2ZvcmNlX29iamVjdCcgKS5vbiggJ2NoYW5nZScsIGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIHRoYXQgPSB0aGlzO1xuXHRcdFx0dmFyIGRlbGF5VGltZSA9IDEwMDA7XG5cdFx0XHRkZWxheSggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHZhciBkYXRhID0ge1xuXHRcdFx0XHRcdCdhY3Rpb24nIDogJ2dldF9zYWxlc2ZvcmNlX29iamVjdF9kZXNjcmlwdGlvbicsXG5cdFx0XHRcdFx0J2luY2x1ZGUnIDogWyAnZmllbGRzJywgJ3JlY29yZFR5cGVJbmZvcycgXSxcblx0XHRcdFx0XHQnZmllbGRfdHlwZScgOiAnZGF0ZXRpbWUnLFxuXHRcdFx0XHRcdCdzYWxlc2ZvcmNlX29iamVjdCcgOiB0aGF0LnZhbHVlXG5cdFx0XHRcdH1cblx0XHRcdFx0JC5wb3N0KCBhamF4dXJsLCBkYXRhLCBmdW5jdGlvbiggcmVzcG9uc2UgKSB7XG5cblx0XHRcdFx0XHR2YXIgcmVjb3JkVHlwZXNBbGxvd2VkTWFya3VwID0gJycsIHJlY29yZFR5cGVEZWZhdWx0TWFya3VwID0gJycsIGRhdGVNYXJrdXAgPSAnJztcblxuXHRcdFx0XHRcdGlmICggMCA8ICQoIHJlc3BvbnNlLmRhdGEucmVjb3JkVHlwZUluZm9zICkubGVuZ3RoICkge1xuXHRcdFx0XHRcdFx0cmVjb3JkVHlwZXNBbGxvd2VkTWFya3VwICs9ICc8bGFiZWwgZm9yPVwic2FsZXNmb3JjZV9yZWNvcmRfdHlwZXNfYWxsb3dlZFwiPkFsbG93ZWQgUmVjb3JkIFR5cGVzOjwvbGFiZWw+PGRpdiBjbGFzcz1cImNoZWNrYm94ZXNcIj4nO1xuXHRcdFx0XHRcdFx0JC5lYWNoKCByZXNwb25zZS5kYXRhLnJlY29yZFR5cGVJbmZvcywgZnVuY3Rpb24oIGluZGV4LCB2YWx1ZSApIHtcblx0XHRcdFx0XHRcdFx0cmVjb3JkVHlwZXNBbGxvd2VkTWFya3VwICs9ICc8bGFiZWw+PGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGNsYXNzPVwiZm9ybS1jaGVja2JveFwiIHZhbHVlPVwiJyArIGluZGV4ICsgJ1wiIG5hbWU9XCJzYWxlc2ZvcmNlX3JlY29yZF90eXBlc19hbGxvd2VkWycgKyBpbmRleCArICddXCIgaWQ9XCJzYWxlc2ZvcmNlX3JlY29yZF90eXBlc19hbGxvd2VkLScgKyBpbmRleCArICdcIj4gJyArIHZhbHVlICsgJzwvbGFiZWw+Jztcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0cmVjb3JkVHlwZXNBbGxvd2VkTWFya3VwICs9ICc8L2Rpdj4nO1xuXG5cblx0XHRcdFx0XHRcdHJlY29yZFR5cGVEZWZhdWx0TWFya3VwICs9ICc8bGFiZWwgZm9yPVwic2FsZXNmb3JjZV9yZWNvcmRfdHlwZV9kZWZhdWx0XCI+RGVmYXVsdCBSZWNvcmQgVHlwZTo8L2xhYmVsPic7XG5cdFx0XHRcdFx0XHRyZWNvcmRUeXBlRGVmYXVsdE1hcmt1cCArPSAnPHNlbGVjdCBuYW1lPVwic2FsZXNmb3JjZV9yZWNvcmRfdHlwZV9kZWZhdWx0XCIgaWQ9XCJzYWxlc2ZvcmNlX3JlY29yZF90eXBlX2RlZmF1bHRcIj48b3B0aW9uIHZhbHVlPVwiXCI+LSBTZWxlY3QgcmVjb3JkIHR5cGUgLTwvb3B0aW9uPic7XG5cdFx0XHRcdFx0XHQkLmVhY2goIHJlc3BvbnNlLmRhdGEucmVjb3JkVHlwZUluZm9zLCBmdW5jdGlvbiggaW5kZXgsIHZhbHVlICkge1xuXHRcdFx0XHRcdFx0XHRyZWNvcmRUeXBlRGVmYXVsdE1hcmt1cCArPSAnPG9wdGlvbiB2YWx1ZT1cIicgKyBpbmRleCArICdcIj4nICsgdmFsdWUgKyAnPC9vcHRpb24+Jztcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdCQoICcuc2FsZXNmb3JjZV9yZWNvcmRfdHlwZXNfYWxsb3dlZCcgKS5odG1sKCByZWNvcmRUeXBlc0FsbG93ZWRNYXJrdXAgKTtcblx0XHRcdFx0XHQkKCAnLnNhbGVzZm9yY2VfcmVjb3JkX3R5cGVfZGVmYXVsdCcgKS5odG1sKCByZWNvcmRUeXBlRGVmYXVsdE1hcmt1cCApO1xuXG5cdFx0XHRcdFx0aWYgKCAwIDwgJCggcmVzcG9uc2UuZGF0YS5maWVsZHMgKS5sZW5ndGggKSB7XG5cdFx0XHRcdFx0XHRkYXRlTWFya3VwICs9ICc8bGFiZWwgZm9yPVwicHVsbF90cmlnZ2VyX2ZpZWxkXCI+RGF0ZSBmaWVsZCB0byB0cmlnZ2VyIHB1bGw6PC9sYWJlbD4nO1xuXHRcdFx0XHRcdFx0ZGF0ZU1hcmt1cCArPSAnPHNlbGVjdCBuYW1lPVwicHVsbF90cmlnZ2VyX2ZpZWxkXCIgaWQ9XCJwdWxsX3RyaWdnZXJfZmllbGRcIj48b3B0aW9uIHZhbHVlPVwiXCI+LSBTZWxlY3QgZGF0ZSBmaWVsZCAtPC9vcHRpb24+J1xuXHRcdFx0XHRcdFx0JC5lYWNoKCByZXNwb25zZS5kYXRhLmZpZWxkcywgZnVuY3Rpb24oIGluZGV4LCB2YWx1ZSApIHtcblx0XHRcdFx0XHRcdFx0ZGF0ZU1hcmt1cCArPSAnPG9wdGlvbiB2YWx1ZT1cIicgKyB2YWx1ZS5uYW1lICsgJ1wiPicgKyB2YWx1ZS5sYWJlbCArICc8L29wdGlvbj4nO1xuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRkYXRlTWFya3VwICs9ICc8L3NlbGVjdD4nO1xuXHRcdFx0XHRcdFx0ZGF0ZU1hcmt1cCArPSAnPHAgY2xhc3M9XCJkZXNjcmlwdGlvblwiPlRoZXNlIGFyZSBkYXRlIGZpZWxkcyB0aGF0IGNhbiBjYXVzZSBXb3JkUHJlc3MgdG8gcHVsbCBhbiB1cGRhdGUgZnJvbSBTYWxlc2ZvcmNlLCBhY2NvcmRpbmcgdG8gdGhlIDxjb2RlPnNhbGVzZm9yY2VfcHVsbDwvY29kZT4gY2xhc3MuPC9wPidcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQkKCAnLnB1bGxfdHJpZ2dlcl9maWVsZCcgKS5odG1sKCBkYXRlTWFya3VwICk7XG5cblx0XHRcdFx0XHRpZiAoICcnICE9PSByZWNvcmRUeXBlc0FsbG93ZWRNYXJrdXAgKSB7XG5cdFx0XHRcdFx0XHQkKCAnLnNhbGVzZm9yY2VfcmVjb3JkX3R5cGVzX2FsbG93ZWQnICkuc2hvdygpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHQkKCAnLnNhbGVzZm9yY2VfcmVjb3JkX3R5cGVzX2FsbG93ZWQnICkuaGlkZSgpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpZiAoICcnICE9PSByZWNvcmRUeXBlRGVmYXVsdE1hcmt1cCApIHtcblx0XHRcdFx0XHRcdCQoICcuc2FsZXNmb3JjZV9yZWNvcmRfdHlwZV9kZWZhdWx0JyApLnNob3coKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0JCggJy5zYWxlc2ZvcmNlX3JlY29yZF90eXBlX2RlZmF1bHQnICkuaGlkZSgpO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGlmICggJycgIT09IGRhdGVNYXJrdXAgKSB7XG5cdFx0XHRcdFx0XHQkKCAnLnB1bGxfdHJpZ2dlcl9maWVsZCcgKS5zaG93KCk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdCQoICcucHVsbF90cmlnZ2VyX2ZpZWxkJyApLmhpZGUoKTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRpZiAoIGpRdWVyeS5mbi5zZWxlY3QyICkge1xuXHRcdFx0XHRcdFx0JCggJ3NlbGVjdCNzYWxlc2ZvcmNlX3JlY29yZF90eXBlX2RlZmF1bHQnICkuc2VsZWN0MigpO1xuXHRcdFx0XHRcdFx0JCggJ3NlbGVjdCNwdWxsX3RyaWdnZXJfZmllbGQnICkuc2VsZWN0MigpO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHR9KTtcblx0XHRcdH0sIGRlbGF5VGltZSApO1xuXHRcdH0pO1xuXHR9XG5cdC8qKlxuXHQgKiBEdXBsaWNhdGVzIHRoZSBmaWVsZHMgZm9yIGEgbmV3IHJvdyBpbiB0aGUgZmllbGRtYXAgb3B0aW9ucyBzY3JlZW4uXG5cdCAqL1xuXHQgZnVuY3Rpb24gYWRkRmllbGRNYXBwaW5nUm93KCkge1xuXHRcdCQoICcjYWRkLWZpZWxkLW1hcHBpbmcnICkuY2xpY2soIGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIHNhbGVzZm9yY2VPYmplY3QgPSAkKCAnI3NhbGVzZm9yY2Vfb2JqZWN0JyApLnZhbCgpO1xuXHRcdFx0dmFyIHdvcmRwcmVzc09iamVjdCA9ICQoICcjd29yZHByZXNzX29iamVjdCcgKS52YWwoKTtcblx0XHRcdHZhciByb3dLZXk7XG5cdFx0XHQkKCB0aGlzICkudGV4dCggJ0FkZCBhbm90aGVyIGZpZWxkIG1hcHBpbmcnICk7XG5cdFx0XHRpZiAoICcnICE9PSB3b3JkcHJlc3NPYmplY3QgJiYgJycgIT09IHNhbGVzZm9yY2VPYmplY3QgKSB7XG5cdFx0XHRcdHJvd0tleSA9IE1hdGguZmxvb3IoIERhdGUubm93KCkgLyAxMDAwICk7XG5cdFx0XHRcdGZpZWxkbWFwRmllbGRzKCB3b3JkcHJlc3NPYmplY3QsIHNhbGVzZm9yY2VPYmplY3QsIHJvd0tleSApO1xuXHRcdFx0XHQkKCB0aGlzICkucGFyZW50KCkuZmluZCggJy5taXNzaW5nLW9iamVjdCcgKS5yZW1vdmUoKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdCQoIHRoaXMgKS5wYXJlbnQoKS5wcmVwZW5kKCAnPGRpdiBjbGFzcz1cImVycm9yIG1pc3Npbmctb2JqZWN0XCI+PHNwYW4+WW91IGhhdmUgdG8gcGljayBhIFdvcmRQcmVzcyBvYmplY3QgYW5kIGEgU2FsZXNmb3JjZSBvYmplY3QgdG8gYWRkIGZpZWxkIG1hcHBpbmcuPC9zcGFuPjwvZGl2PicgKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9KTtcblx0fVxuXHQvKipcblx0ICogR2V0cyB0aGUgV29yZFByZXNzIGFuZCBTYWxlc2ZvcmNlIGZpZWxkIHJlc3VsdHMgdmlhIGFuIEFqYXggY2FsbFxuXHQgKiBAcGFyYW0gc3RyaW5nIHdvcmRwcmVzc09iamVjdCB0aGUgV29yZFByZXNzIG9iamVjdCB0eXBlXG5cdCAqIEBwYXJhbSBzdHJpbmcgc2FsZXNmb3JjZU9iamVjdCB0aGUgU2FsZXNmb3JjZSBvYmplY3QgdHlwZVxuXHQgKiBAcGFyYW0gaW50IHJvd0tleSB3aGljaCByb3cgd2UncmUgd29ya2luZyBvblxuXHQgKi9cblx0ZnVuY3Rpb24gZmllbGRtYXBGaWVsZHMoIHdvcmRwcmVzc09iamVjdCwgc2FsZXNmb3JjZU9iamVjdCwgcm93S2V5ICkge1xuXHRcdHZhciBkYXRhID0ge1xuXHRcdFx0J2FjdGlvbicgOiAnZ2V0X3dwX3NmX29iamVjdF9maWVsZHMnLFxuXHRcdFx0J3dvcmRwcmVzc19vYmplY3QnIDogd29yZHByZXNzT2JqZWN0LFxuXHRcdFx0J3NhbGVzZm9yY2Vfb2JqZWN0JyA6IHNhbGVzZm9yY2VPYmplY3Rcblx0XHR9XG5cdFx0JC5wb3N0KCBhamF4dXJsLCBkYXRhLCBmdW5jdGlvbiggcmVzcG9uc2UgKSB7XG5cdFx0XHR2YXIgd29yZHByZXNzID0gJyc7XG5cdFx0XHR2YXIgc2FsZXNmb3JjZSA9ICcnO1xuXHRcdFx0dmFyIG1hcmt1cCA9ICcnO1xuXG5cdFx0XHR3b3JkcHJlc3MgKz0gJzxzZWxlY3QgbmFtZT1cIndvcmRwcmVzc19maWVsZFsnICsgcm93S2V5ICsgJ11cIiBpZD1cIndvcmRwcmVzc19maWVsZC0nICsgcm93S2V5ICsgJ1wiPidcblx0XHRcdHdvcmRwcmVzcyArPSAnPG9wdGlvbiB2YWx1ZT1cIlwiPi0gU2VsZWN0IFdvcmRQcmVzcyBmaWVsZCAtPC9vcHRpb24+Jztcblx0XHRcdCQuZWFjaCggcmVzcG9uc2UuZGF0YS53b3JkcHJlc3MsIGZ1bmN0aW9uKCBpbmRleCwgdmFsdWUgKSB7XG5cdFx0XHRcdHdvcmRwcmVzcyArPSAnPG9wdGlvbiB2YWx1ZT1cIicgKyB2YWx1ZS5rZXkgKyAnXCI+JyArIHZhbHVlLmtleSArICc8L29wdGlvbj4nO1xuXHRcdFx0fSk7XG5cdFx0XHR3b3JkcHJlc3MgKz0gJzwvc2VsZWN0Pic7XG5cblx0XHRcdHNhbGVzZm9yY2UgKz0gJzxzZWxlY3QgbmFtZT1cInNhbGVzZm9yY2VfZmllbGRbJyArIHJvd0tleSArICddXCIgaWQ9XCJzYWxlc2ZvcmNlX2ZpZWxkLScgKyByb3dLZXkgKyAnXCI+J1xuXHRcdFx0c2FsZXNmb3JjZSArPSAnPG9wdGlvbiB2YWx1ZT1cIlwiPi0gU2VsZWN0IFNhbGVzZm9yY2UgZmllbGQgLTwvb3B0aW9uPic7XG5cdFx0XHQkLmVhY2goIHJlc3BvbnNlLmRhdGEuc2FsZXNmb3JjZSwgZnVuY3Rpb24oIGluZGV4LCB2YWx1ZSApIHtcblx0XHRcdFx0c2FsZXNmb3JjZSArPSAnPG9wdGlvbiB2YWx1ZT1cIicgKyB2YWx1ZS5uYW1lICsgJ1wiPicgKyB2YWx1ZS5sYWJlbCArICc8L29wdGlvbj4nO1xuXHRcdFx0fSk7XG5cdFx0XHRzYWxlc2ZvcmNlICs9ICc8L3NlbGVjdD4nO1xuXG5cdFx0XHRtYXJrdXAgPSAnPHRyPjx0ZCBjbGFzcz1cImNvbHVtbi13b3JkcHJlc3NfZmllbGRcIj4nICsgd29yZHByZXNzICsgJzwvdGQ+PHRkIGNsYXNzPVwiY29sdW1uLXNhbGVzZm9yY2VfZmllbGRcIj4nICsgc2FsZXNmb3JjZSArICc8L3RkPjx0ZCBjbGFzcz1cImNvbHVtbi1pc19wcmVtYXRjaFwiPjxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBuYW1lPVwiaXNfcHJlbWF0Y2hbJyArIHJvd0tleSArICddXCIgaWQ9XCJpc19wcmVtYXRjaC0nICsgcm93S2V5ICsgJ1wiIHZhbHVlPVwiMVwiIC8+PHRkIGNsYXNzPVwiY29sdW1uLWlzX2tleVwiPjxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBuYW1lPVwiaXNfa2V5WycgKyByb3dLZXkgKyAnXVwiIGlkPVwiaXNfa2V5LScgKyByb3dLZXkgKyAnXCIgdmFsdWU9XCIxXCIgLz48L3RkPjx0ZCBjbGFzcz1cImNvbHVtbi1kaXJlY3Rpb25cIj48ZGl2IGNsYXNzPVwicmFkaW9zXCI+PGxhYmVsPjxpbnB1dCB0eXBlPVwicmFkaW9cIiB2YWx1ZT1cInNmX3dwXCIgbmFtZT1cImRpcmVjdGlvblsnICsgcm93S2V5ICsgJ11cIiBpZD1cImRpcmVjdGlvbi0nICsgcm93S2V5ICsgJy1zZi13cFwiPiAgU2FsZXNmb3JjZSB0byBXb3JkUHJlc3M8L2xhYmVsPjxsYWJlbD48aW5wdXQgdHlwZT1cInJhZGlvXCIgdmFsdWU9XCJ3cF9zZlwiIG5hbWU9XCJkaXJlY3Rpb25bJyArIHJvd0tleSArICddXCIgaWQ9XCJkaXJlY3Rpb24tJyArIHJvd0tleSArICctd3Atc2ZcIj4gIFdvcmRQcmVzcyB0byBTYWxlc2ZvcmNlPC9sYWJlbD48bGFiZWw+PGlucHV0IHR5cGU9XCJyYWRpb1wiIHZhbHVlPVwic3luY1wiIG5hbWU9XCJkaXJlY3Rpb25bJyArIHJvd0tleSArICddXCIgaWQ9XCJkaXJlY3Rpb24tJyArIHJvd0tleSArICctc3luY1wiIGNoZWNrZWQ+ICBTeW5jPC9sYWJlbD48L2Rpdj48L3RkPjx0ZCBjbGFzcz1cImNvbHVtbi1pc19kZWxldGVcIj48aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgbmFtZT1cImlzX2RlbGV0ZVsnICsgcm93S2V5ICsgJ11cIiBpZD1cImlzX2RlbGV0ZS0nICsgcm93S2V5ICsgJ1wiIHZhbHVlPVwiMVwiIC8+PC90ZD48L3RyPic7XG5cdFx0XHQkKCAndGFibGUuZmllbGRzIHRib2R5JyApLmFwcGVuZCggbWFya3VwICk7XG5cblx0XHRcdGlmICggalF1ZXJ5LmZuLnNlbGVjdDIgKSB7XG5cdFx0XHRcdCQoICcuY29sdW1uLXdvcmRwcmVzc19maWVsZCBzZWxlY3QnICkuc2VsZWN0MigpO1xuXHRcdFx0XHQkKCAnLmNvbHVtbi1zYWxlc2ZvcmNlX2ZpZWxkIHNlbGVjdCcgKS5zZWxlY3QyKCk7XG5cdFx0XHR9XG5cblx0XHR9KTtcblx0fVxuXHQvKipcblx0ICogSGFuZGxlIG1hbnVhbCBwdXNoIGFuZCBwdWxsIG9mIG9iamVjdHNcblx0ICovXG5cdGZ1bmN0aW9uIHB1c2hBbmRQdWxsT2JqZWN0cygpIHtcblx0XHQkKCAnLnNhbGVzZm9yY2VfdXNlcl9hamF4X21lc3NhZ2UnICkuaGlkZSgpO1xuXHRcdGlmICggMCA8ICQoICcjd29yZHByZXNzX29iamVjdF9hamF4JyApLmxlbmd0aCApIHtcblx0XHRcdCQoICcucHVzaF90b19zYWxlc2ZvcmNlX2J1dHRvbicgKS5vbiggJ2NsaWNrJywgZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHZhciB3b3JkcHJlc3NPYmplY3QgPSAkKCAnI3dvcmRwcmVzc19vYmplY3RfYWpheCcgKS52YWwoKTtcblx0XHRcdFx0dmFyIHdvcmRwcmVzc0lkID0gJCggJyN3b3JkcHJlc3NfaWRfYWpheCcgKS52YWwoKTtcblx0XHRcdFx0dmFyIHNhbGVzZm9yY2VJZCA9ICQoICcjc2FsZXNmb3JjZV9pZF9hamF4JyApLnZhbCgpO1xuXHRcdFx0XHR2YXIgZGF0YSA9IHtcblx0XHRcdFx0XHQnYWN0aW9uJyA6ICdwdXNoX3RvX3NhbGVzZm9yY2UnLFxuXHRcdFx0XHRcdCd3b3JkcHJlc3Nfb2JqZWN0JyA6IHdvcmRwcmVzc09iamVjdCxcblx0XHRcdFx0XHQnd29yZHByZXNzX2lkJyA6IHdvcmRwcmVzc0lkLFxuXHRcdFx0XHRcdCdzYWxlc2ZvcmNlX2lkJyA6IHNhbGVzZm9yY2VJZFxuXHRcdFx0XHR9XG5cdFx0XHRcdCQucG9zdCggYWpheHVybCwgZGF0YSwgZnVuY3Rpb24oIHJlc3BvbnNlICkge1xuXHRcdFx0XHRcdGlmICggdHJ1ZSA9PT0gcmVzcG9uc2Uuc3VjY2VzcyApIHtcblx0XHRcdFx0XHRcdHVwZGF0ZVNhbGVzZm9yY2VVc2VyU3VtbWFyeSgpO1xuXHRcdFx0XHRcdFx0JCggJy5zYWxlc2ZvcmNlX3VzZXJfYWpheF9tZXNzYWdlJyApLndpZHRoKCAkKCAnLm1hcHBlZC1zYWxlc2ZvcmNlLXVzZXInICkud2lkdGgoKSAtIDI3ICk7XG5cdFx0XHRcdFx0XHQkKCAnLnNhbGVzZm9yY2VfdXNlcl9hamF4X21lc3NhZ2UnICkuaHRtbCggJzxwPlRoaXMgb2JqZWN0IGhhcyBiZWVuIHB1c2hlZCB0byBTYWxlc2ZvcmNlLjwvcD4nICkuZmFkZUluKCkuZGVsYXkoIDQwMDAgKS5mYWRlT3V0KCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdCQoICcucHVsbF9mcm9tX3NhbGVzZm9yY2VfYnV0dG9uJyApLm9uKCAnY2xpY2snLCBmdW5jdGlvbigpIHtcblx0XHRcdHZhciBzYWxlc2ZvcmNlSWQgPSAkKCAnI3NhbGVzZm9yY2VfaWRfYWpheCcgKS52YWwoKTtcblx0XHRcdHZhciB3b3JkcHJlc3NPYmplY3QgPSAkKCAnI3dvcmRwcmVzc19vYmplY3RfYWpheCcgKS52YWwoKTtcblx0XHRcdHZhciBkYXRhID0ge1xuXHRcdFx0XHQnYWN0aW9uJyA6ICdwdWxsX2Zyb21fc2FsZXNmb3JjZScsXG5cdFx0XHRcdCdzYWxlc2ZvcmNlX2lkJyA6IHNhbGVzZm9yY2VJZCxcblx0XHRcdFx0J3dvcmRwcmVzc19vYmplY3QnIDogd29yZHByZXNzT2JqZWN0XG5cdFx0XHR9XG5cdFx0XHQkLnBvc3QoIGFqYXh1cmwsIGRhdGEsIGZ1bmN0aW9uKCByZXNwb25zZSApIHtcblx0XHRcdFx0aWYgKCB0cnVlID09PSByZXNwb25zZS5zdWNjZXNzICkge1xuXHRcdFx0XHRcdHVwZGF0ZVNhbGVzZm9yY2VVc2VyU3VtbWFyeSgpO1xuXHRcdFx0XHRcdCQoICcuc2FsZXNmb3JjZV91c2VyX2FqYXhfbWVzc2FnZScgKS53aWR0aCggJCggJy5tYXBwZWQtc2FsZXNmb3JjZS11c2VyJyApLndpZHRoKCkgLSAyNyApO1xuXHRcdFx0XHRcdCQoICcuc2FsZXNmb3JjZV91c2VyX2FqYXhfbWVzc2FnZScgKS5odG1sKCAnPHA+VGhpcyBvYmplY3QgaGFzIGJlZW4gcHVsbGVkIGZyb20gU2FsZXNmb3JjZS48L3A+JyApLmZhZGVJbigpLmRlbGF5KCA0MDAwICkuZmFkZU91dCgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9KTtcblx0fVxuXHQvKipcblx0ICogVXBkYXRlcyB0aGUgdXNlciBwcm9maWxlIHN1bW1hcnkgb2YgU2FsZXNmb3JjZSBpbmZvLlxuXHQgKi9cblx0ZnVuY3Rpb24gdXBkYXRlU2FsZXNmb3JjZVVzZXJTdW1tYXJ5KCkge1xuXHRcdHZhciBtYXBwaW5nSWQgPSAkKCAnI21hcHBpbmdfaWRfYWpheCcgKS52YWwoKTtcblx0XHR2YXIgZGF0YSA9IHtcblx0XHRcdCdhY3Rpb24nIDogJ3JlZnJlc2hfbWFwcGVkX2RhdGEnLFxuXHRcdFx0J21hcHBpbmdfaWQnIDogbWFwcGluZ0lkXG5cdFx0fVxuXHRcdCQucG9zdCggYWpheHVybCwgZGF0YSwgZnVuY3Rpb24oIHJlc3BvbnNlICkge1xuXHRcdFx0aWYgKCB0cnVlID09PSByZXNwb25zZS5zdWNjZXNzICkge1xuXHRcdFx0XHQkKCAndGQubGFzdF9zeW5jX21lc3NhZ2UnICkudGV4dCggcmVzcG9uc2UuZGF0YS5sYXN0X3N5bmNfbWVzc2FnZSApO1xuXHRcdFx0XHQkKCAndGQubGFzdF9zeW5jX2FjdGlvbicgKS50ZXh0KCByZXNwb25zZS5kYXRhLmxhc3Rfc3luY19hY3Rpb24gKTtcblx0XHRcdFx0JCggJ3RkLmxhc3Rfc3luY19zdGF0dXMnICkudGV4dCggcmVzcG9uc2UuZGF0YS5sYXN0X3N5bmNfc3RhdHVzICk7XG5cdFx0XHRcdCQoICd0ZC5sYXN0X3N5bmMnICkudGV4dCggcmVzcG9uc2UuZGF0YS5sYXN0X3N5bmMgKTtcblx0XHRcdFx0aWYgKCAnMScgPT09IHJlc3BvbnNlLmRhdGEubGFzdF9zeW5jX3N0YXR1cyApIHtcblx0XHRcdFx0XHQkKCAndGQubGFzdF9zeW5jX3N0YXR1cycgKS50ZXh0KCAnc3VjY2VzcycgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cdC8qKlxuXHQgKiBDbGVhciB0aGUgcGx1Z2luIGNhY2hlIHZpYSBBamF4IHJlcXVlc3QuXG5cdCAqL1xuXHRmdW5jdGlvbiBjbGVhclNmd3BDYWNoZUxpbmsoKSB7XG5cdFx0JCggJyNjbGVhci1zZndwLWNhY2hlJyApLmNsaWNrKCBmdW5jdGlvbigpIHtcblx0XHRcdHZhciBkYXRhID0ge1xuXHRcdFx0XHQnYWN0aW9uJyA6ICdjbGVhcl9zZndwX2NhY2hlJ1xuXHRcdFx0fVxuXHRcdFx0dmFyIHRoYXQgPSAkKCB0aGlzICk7XG5cdFx0XHQkLnBvc3QoIGFqYXh1cmwsIGRhdGEsIGZ1bmN0aW9uKCByZXNwb25zZSApIHtcblx0XHRcdFx0aWYgKCB0cnVlID09PSByZXNwb25zZS5zdWNjZXNzICYmIHRydWUgPT09IHJlc3BvbnNlLmRhdGEuc3VjY2VzcyApIHtcblx0XHRcdFx0XHR0aGF0LnBhcmVudCgpLmh0bWwoIHJlc3BvbnNlLmRhdGEubWVzc2FnZSApLmZhZGVJbigpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9KTtcblx0fVxuXG5cdC8vIHNob3cgd3NkbCBmaWVsZCBpZiBzb2FwIGlzIGVuYWJsZWRcblx0JCggZG9jdW1lbnQgKS5vbiggJ2NoYW5nZScsICcub2JqZWN0LXN5bmMtZm9yLXNhbGVzZm9yY2UtZW5hYmxlLXNvYXAgaW5wdXQnLCBmdW5jdGlvbigpIHtcblx0XHR0b2dnbGVTb2FwRmllbGRzKCk7XG5cdH0pO1xuXG5cdC8qKlxuXHQgKiBBcyB0aGUgRHJ1cGFsIHBsdWdpbiBkb2VzLCB3ZSBvbmx5IGFsbG93IG9uZSBmaWVsZCB0byBiZSBhIHByZW1hdGNoXG5cdCAqL1xuXHQkKCBkb2N1bWVudCApLm9uKCAnY2xpY2snLCAnLmNvbHVtbi1pc19wcmVtYXRjaCBpbnB1dCcsIGZ1bmN0aW9uKCkge1xuXHRcdCQoICcuY29sdW1uLWlzX3ByZW1hdGNoIGlucHV0JyApLm5vdCggdGhpcyApLnByb3AoICdjaGVja2VkJywgZmFsc2UgKTtcblx0fSk7XG5cdC8qKlxuXHQgKiBBcyB0aGUgRHJ1cGFsIHBsdWdpbiBkb2VzLCB3ZSBvbmx5IGFsbG93IG9uZSBmaWVsZCB0byBiZSBhIGtleVxuXHQgKi9cblx0JCggZG9jdW1lbnQgKS5vbiggJ2NsaWNrJywgJy5jb2x1bW4taXNfa2V5IGlucHV0JywgZnVuY3Rpb24oKSB7XG5cdFx0JCggJy5jb2x1bW4taXNfa2V5IGlucHV0JyApLm5vdCggdGhpcyApLnByb3AoICdjaGVja2VkJywgZmFsc2UgKTtcblx0fSk7XG5cdC8qKlxuXHQgKiBXaGVuIHRoZSBwbHVnaW4gbG9hZHMsIGluaXRpYWxpemUgb3IgZW5hYmxlIHRoaW5nczpcblx0ICogU2VsZWN0MiBvbiBzZWxlY3QgZmllbGRzXG5cdCAqIENsZWFyIGZpZWxkcyB3aGVuIHRoZSB0YXJnZXRlZCBXb3JkUHJlc3Mgb3IgU2FsZXNmb3JjZSBvYmplY3QgdHlwZSBjaGFuZ2VzXG5cdCAqIEFkZCBhIHNwaW5uZXIgZm9yIEFqYXggcmVxdWVzdHNcblx0ICogTWFuYWdlIHRoZSBkaXNwbGF5IGZvciBTYWxlc2ZvcmNlIG9iamVjdCBmaWVsZHMgYmFzZWQgb24gQVBJIHJlcG9uc2Vcblx0ICogTWFudWFsIHB1c2ggYW5kIHB1bGxcblx0ICogQ2xlYXJpbmcgdGhlIGNhY2hlXG5cdCAqL1xuXHQkKCBkb2N1bWVudCApLnJlYWR5KCBmdW5jdGlvbigpIHtcblxuXHRcdC8vIGZvciBtYWluIGFkbWluIHNldHRpbmdzXG5cdFx0dG9nZ2xlU29hcEZpZWxkcygpO1xuXG5cdFx0Ly8gZm9yIHRoZSBmaWVsZG1hcCBhZGQvZWRpdCBzY3JlZW5cblx0XHR2YXIgdGltZW91dDtcblxuXHRcdGlmICggalF1ZXJ5LmZuLnNlbGVjdDIgKSB7XG5cdFx0XHQkKCAnc2VsZWN0I3dvcmRwcmVzc19vYmplY3QnICkuc2VsZWN0MigpO1xuXHRcdFx0JCggJ3NlbGVjdCNzYWxlc2ZvcmNlX29iamVjdCcgKS5zZWxlY3QyKCk7XG5cdFx0XHQkKCAnc2VsZWN0I3NhbGVzZm9yY2VfcmVjb3JkX3R5cGVfZGVmYXVsdCcgKS5zZWxlY3QyKCk7XG5cdFx0XHQkKCAnc2VsZWN0I3B1bGxfdHJpZ2dlcl9maWVsZCcgKS5zZWxlY3QyKCk7XG5cdFx0XHQkKCAnLmNvbHVtbi13b3JkcHJlc3NfZmllbGQgc2VsZWN0JyApLnNlbGVjdDIoKTtcblx0XHRcdCQoICcuY29sdW1uLXNhbGVzZm9yY2VfZmllbGQgc2VsZWN0JyApLnNlbGVjdDIoKTtcblx0XHR9XG5cblx0XHQkKCAnI3dvcmRwcmVzc19vYmplY3QsICNzYWxlc2ZvcmNlX29iamVjdCcgKS5vbiggJ2NoYW5nZScsIGZ1bmN0aW9uKCkge1xuXHRcdFx0Y2xlYXJUaW1lb3V0KCB0aW1lb3V0ICk7XG5cdFx0XHR0aW1lb3V0ID0gc2V0VGltZW91dCggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdCQoICd0YWJsZS5maWVsZHMgdGJvZHkgdHInICkuZmFkZU91dCgpO1xuXHRcdFx0XHQkKCAndGFibGUuZmllbGRzIHRib2R5IHRyJyApLnJlbW92ZSgpO1xuXHRcdFx0fSwgMTAwMCApO1xuXHRcdH0pO1xuXG5cdFx0Ly8gdG9kbzogbmVlZCB0byBmaXggdGhpcyBzbyBpdCBkb2Vzbid0IHJ1biBhbGwgdGhlIHNwaW5uZXJzIGF0IHRoZSBzYW1lIHRpbWUgd2hlbiB0aGVyZSBhcmUgbXVsdGlwbGVzIG9uIHRoZSBzYW1lIHBhZ2Vcblx0XHQkKCBkb2N1bWVudCApLmFqYXhTdGFydCggZnVuY3Rpb24oKSB7XG5cdFx0XHQkKCAnLnNwaW5uZXInICkuYWRkQ2xhc3MoICdpcy1hY3RpdmUnICk7XG5cdFx0fSkuYWpheFN0b3AoIGZ1bmN0aW9uKCkge1xuXHRcdFx0JCggJy5zcGlubmVyJyApLnJlbW92ZUNsYXNzKCAnaXMtYWN0aXZlJyApO1xuXHRcdH0pO1xuXHRcdHNhbGVzZm9yY2VPYmplY3RGaWVsZHMoKTtcblx0XHRhZGRGaWVsZE1hcHBpbmdSb3coKTtcblxuXHRcdC8vIGZvciBwdXNoL3B1bGwgbWV0aG9kcyBydW5uaW5nIHZpYSBhamF4XG5cdFx0cHVzaEFuZFB1bGxPYmplY3RzKCk7XG5cblx0XHQvLyBmb3IgY2xlYXJpbmcgdGhlIHBsdWdpbiBjYWNoZVxuXHRcdGNsZWFyU2Z3cENhY2hlTGluaygpO1xuXHR9KTtcbn0oIGpRdWVyeSApICk7XG4iXX0= +//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFkbWluLmpzIl0sIm5hbWVzIjpbIiQiLCJsb2FkRmllbGRPcHRpb25zIiwic3lzdGVtIiwib2JqZWN0X25hbWUiLCJkYXRhIiwiZmllbGRzIiwiZmlyc3RfZmllbGQiLCJmaXJzdCIsInRleHQiLCJwb3N0IiwiYWpheHVybCIsInJlc3BvbnNlIiwiZWFjaCIsImluZGV4IiwidmFsdWUiLCJrZXkiLCJuYW1lIiwibGFiZWwiLCJodG1sIiwidG9nZ2xlU29hcEZpZWxkcyIsImxlbmd0aCIsImlzIiwic2hvdyIsImhpZGUiLCJzYWxlc2ZvcmNlT2JqZWN0RmllbGRzIiwiZGVsYXkiLCJ0aW1lciIsImNhbGxiYWNrIiwibXMiLCJjbGVhclRpbWVvdXQiLCJzZXRUaW1lb3V0Iiwib24iLCJ0aGF0IiwiZGVsYXlUaW1lIiwicmVjb3JkVHlwZXNBbGxvd2VkTWFya3VwIiwicmVjb3JkVHlwZURlZmF1bHRNYXJrdXAiLCJkYXRlTWFya3VwIiwicmVjb3JkVHlwZUluZm9zIiwialF1ZXJ5IiwiZm4iLCJzZWxlY3QyIiwiYWRkRmllbGRNYXBwaW5nUm93IiwiY2xpY2siLCJuZXdLZXkiLCJEYXRlIiwiZ2V0VVRDTWlsbGlzZWNvbmRzIiwibGFzdFJvdyIsImxhc3QiLCJvbGRLZXkiLCJhdHRyIiwiUmVnRXhwIiwiZmllbGRtYXBGaWVsZHMiLCJwYXJlbnQiLCJmaW5kIiwicmVtb3ZlIiwibmV4dFJvdyIsImVuZCIsImNsb25lIiwicmVtb3ZlQ2xhc3MiLCJpIiwiaCIsInJlcGxhY2UiLCJhcHBlbmQiLCJwdXNoQW5kUHVsbE9iamVjdHMiLCJ3b3JkcHJlc3NPYmplY3QiLCJ2YWwiLCJ3b3JkcHJlc3NJZCIsInNhbGVzZm9yY2VJZCIsInN1Y2Nlc3MiLCJ1cGRhdGVTYWxlc2ZvcmNlVXNlclN1bW1hcnkiLCJ3aWR0aCIsImZhZGVJbiIsImZhZGVPdXQiLCJtYXBwaW5nSWQiLCJsYXN0X3N5bmNfbWVzc2FnZSIsImxhc3Rfc3luY19hY3Rpb24iLCJsYXN0X3N5bmNfc3RhdHVzIiwibGFzdF9zeW5jIiwiY2xlYXJTZndwQ2FjaGVMaW5rIiwibWVzc2FnZSIsImRvY3VtZW50IiwidGltZW91dCIsIm5vdCIsInByb3AiLCJyZWFkeSIsImFqYXhTdGFydCIsImFkZENsYXNzIiwiYWpheFN0b3AiXSwibWFwcGluZ3MiOiI7O0FBQUUsV0FBVUEsQ0FBVixFQUFjO0FBRWYsV0FBU0MsZ0JBQVQsQ0FBMkJDLE1BQTNCLEVBQW1DQyxXQUFuQyxFQUFpRDtBQUNoRCxRQUFJQyxJQUFJLEdBQUc7QUFDVixnQkFBVyxTQUFTRixNQUFULEdBQWtCO0FBRG5CLEtBQVg7QUFHQSxRQUFJRyxNQUFNLEdBQUcsRUFBYjtBQUNBLFFBQUlDLFdBQVcsR0FBR04sQ0FBQyxDQUFFLGFBQWFFLE1BQWIsR0FBc0Isc0JBQXhCLENBQUQsQ0FBaURLLEtBQWpELEdBQXlEQyxJQUF6RCxFQUFsQjtBQUNBSCxJQUFBQSxNQUFNLElBQUksc0JBQXNCQyxXQUF0QixHQUFvQyxXQUE5Qzs7QUFDQSxRQUFLLGdCQUFnQkosTUFBckIsRUFBOEI7QUFDN0JFLE1BQUFBLElBQUksQ0FBQyxrQkFBRCxDQUFKLEdBQTJCRCxXQUEzQjtBQUNBLEtBRkQsTUFFTyxJQUFLLGlCQUFpQkQsTUFBdEIsRUFBK0I7QUFDckNFLE1BQUFBLElBQUksQ0FBQyxtQkFBRCxDQUFKLEdBQTRCRCxXQUE1QjtBQUNBLEtBRk0sTUFFQTtBQUNOLGFBQU9FLE1BQVA7QUFDQTs7QUFDREwsSUFBQUEsQ0FBQyxDQUFDUyxJQUFGLENBQVFDLE9BQVIsRUFBaUJOLElBQWpCLEVBQXVCLFVBQVVPLFFBQVYsRUFBcUI7QUFDM0NYLE1BQUFBLENBQUMsQ0FBQ1ksSUFBRixDQUFRRCxRQUFRLENBQUNQLElBQVQsQ0FBY0MsTUFBdEIsRUFBOEIsVUFBVVEsS0FBVixFQUFpQkMsS0FBakIsRUFBeUI7QUFDdEQsWUFBSyxnQkFBZ0JaLE1BQXJCLEVBQThCO0FBQzdCRyxVQUFBQSxNQUFNLElBQUksb0JBQW9CUyxLQUFLLENBQUNDLEdBQTFCLEdBQWdDLElB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QWtWQ3hDLE1BbFZELENBQUYiLCJmaWxlIjoib2JqZWN0LXN5bmMtZm9yLXNhbGVzZm9yY2UtYWRtaW4uanMiLCJzb3VyY2VzQ29udGVudCI6WyIoIGZ1bmN0aW9uKCAkICkge1xuXG5cdGZ1bmN0aW9uIGxvYWRGaWVsZE9wdGlvbnMoIHN5c3RlbSwgb2JqZWN0X25hbWUgKSB7XG5cdFx0dmFyIGRhdGEgPSB7XG5cdFx0XHQnYWN0aW9uJyA6ICdnZXRfJyArIHN5c3RlbSArICdfb2JqZWN0X2ZpZWxkcycsXG5cdFx0fVxuXHRcdHZhciBmaWVsZHMgPSAnJztcblx0XHR2YXIgZmlyc3RfZmllbGQgPSAkKCAnLmNvbHVtbi0nICsgc3lzdGVtICsgJ19maWVsZCBzZWxlY3Qgb3B0aW9uJykuZmlyc3QoKS50ZXh0KCk7XG5cdFx0ZmllbGRzICs9ICc8b3B0aW9uIHZhbHVlPVwiXCI+JyArIGZpcnN0X2ZpZWxkICsgJzwvb3B0aW9uPic7XG5cdFx0aWYgKCAnd29yZHByZXNzJyA9PT0gc3lzdGVtICkge1xuXHRcdFx0ZGF0YVsnd29yZHByZXNzX29iamVjdCddID0gb2JqZWN0X25hbWU7XG5cdFx0fSBlbHNlIGlmICggJ3NhbGVzZm9yY2UnID09PSBzeXN0ZW0gKSB7XG5cdFx0XHRkYXRhWydzYWxlc2ZvcmNlX29iamVjdCddID0gb2JqZWN0X25hbWU7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiBmaWVsZHM7XG5cdFx0fVxuXHRcdCQucG9zdCggYWpheHVybCwgZGF0YSwgZnVuY3Rpb24oIHJlc3BvbnNlICkge1xuXHRcdFx0JC5lYWNoKCByZXNwb25zZS5kYXRhLmZpZWxkcywgZnVuY3Rpb24oIGluZGV4LCB2YWx1ZSApIHtcblx0XHRcdFx0aWYgKCAnd29yZHByZXNzJyA9PT0gc3lzdGVtICkge1xuXHRcdFx0XHRcdGZpZWxkcyArPSAnPG9wdGlvbiB2YWx1ZT1cIicgKyB2YWx1ZS5rZXkgKyAnXCI+JyArIHZhbHVlLmtleSArICc8L29wdGlvbj4nO1xuXHRcdFx0XHR9IGVsc2UgaWYgKCAnc2FsZXNmb3JjZScgPT09IHN5c3RlbSApIHtcblx0XHRcdFx0XHRmaWVsZHMgKz0gJzxvcHRpb24gdmFsdWU9XCInICsgdmFsdWUubmFtZSArICdcIj4nICsgdmFsdWUubGFiZWwgKyAnPC9vcHRpb24+Jztcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0XHQkKCAnLmNvbHVtbi0nICsgc3lzdGVtICsgJ19maWVsZCBzZWxlY3QnICkuaHRtbCggZmllbGRzICk7XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogRG9uJ3Qgc2hvdyB0aGUgV1NETCBmaWxlIGZpZWxkIHVubGVzcyBTT0FQIGlzIGVuYWJsZWRcblx0ICovXG5cdGZ1bmN0aW9uIHRvZ2dsZVNvYXBGaWVsZHMoKSB7XG5cdFx0aWYgKCAwIDwgJCggJy5vYmplY3Qtc3luYy1mb3Itc2FsZXNmb3JjZS1lbmFibGUtc29hcCcgKS5sZW5ndGggKSB7XG5cdFx0XHRpZiAoICQoICcub2JqZWN0LXN5bmMtZm9yLXNhbGVzZm9yY2UtZW5hYmxlLXNvYXAgaW5wdXQnICkuaXMoICc6Y2hlY2tlZCcgKSApIHtcblx0XHRcdFx0JCggJy5vYmplY3Qtc3luYy1mb3Itc2FsZXNmb3JjZS1zb2FwLXdzZGwtcGF0aCcgKS5zaG93KCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHQkKCAnLm9iamVjdC1zeW5jLWZvci1zYWxlc2ZvcmNlLXNvYXAtd3NkbC1wYXRoJyApLmhpZGUoKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogR2VuZXJhdGVzIHRoZSBTYWxlc2ZvcmNlIG9iamVjdCBmaWVsZHMgYmFzZWQgb24gdGhlIGRyb3Bkb3duIGFjdGl2aXR5IGFuZCBBUEkgcmVzdWx0cy5cblx0ICovXG5cdGZ1bmN0aW9uIHNhbGVzZm9yY2VPYmplY3RGaWVsZHMoKSB7XG5cblx0XHR2YXIgZGVsYXkgPSAoIGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIHRpbWVyID0gMDtcblx0XHRcdHJldHVybiBmdW5jdGlvbiggY2FsbGJhY2ssIG1zICkge1xuXHRcdFx0XHRjbGVhclRpbWVvdXQgKCB0aW1lciApO1xuXHRcdFx0XHR0aW1lciA9IHNldFRpbWVvdXQoIGNhbGxiYWNrLCBtcyApO1xuXHRcdFx0fTtcblx0XHR9KCkgKTtcblxuXHRcdGlmICggMCA9PT0gJCggJy5zYWxlc2ZvcmNlX3JlY29yZF90eXBlc19hbGxvd2VkID4gKicgKS5sZW5ndGggKSB7XG5cdFx0XHQkKCAnLnNhbGVzZm9yY2VfcmVjb3JkX3R5cGVzX2FsbG93ZWQnICkuaGlkZSgpO1xuXHRcdH1cblxuXHRcdGlmICggMCA9PT0gJCggJy5zYWxlc2ZvcmNlX3JlY29yZF90eXBlX2RlZmF1bHQgPiAqJyApLmxlbmd0aCApIHtcblx0XHRcdCQoICcuc2FsZXNmb3JjZV9yZWNvcmRfdHlwZV9kZWZhdWx0JyApLmhpZGUoKTtcblx0XHR9XG5cdFx0aWYgKCAwID09PSAkKCAnLnB1bGxfdHJpZ2dlcl9maWVsZCA+IConICkubGVuZ3RoICkge1xuXHRcdFx0JCggJy5wdWxsX3RyaWdnZXJfZmllbGQnICkuaGlkZSgpO1xuXHRcdH1cblxuXHRcdCQoICcjc2FsZXNmb3JjZV9vYmplY3QnICkub24oICdjaGFuZ2UnLCBmdW5jdGlvbigpIHtcblx0XHRcdHZhciB0aGF0ID0gdGhpcztcblx0XHRcdHZhciBkZWxheVRpbWUgPSAxMDAwO1xuXHRcdFx0ZGVsYXkoIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHR2YXIgZGF0YSA9IHtcblx0XHRcdFx0XHQnYWN0aW9uJyA6ICdnZXRfc2FsZXNmb3JjZV9vYmplY3RfZGVzY3JpcHRpb24nLFxuXHRcdFx0XHRcdCdpbmNsdWRlJyA6IFsgJ2ZpZWxkcycsICdyZWNvcmRUeXBlSW5mb3MnIF0sXG5cdFx0XHRcdFx0J2ZpZWxkX3R5cGUnIDogJ2RhdGV0aW1lJyxcblx0XHRcdFx0XHQnc2FsZXNmb3JjZV9vYmplY3QnIDogdGhhdC52YWx1ZVxuXHRcdFx0XHR9XG5cdFx0XHRcdCQucG9zdCggYWpheHVybCwgZGF0YSwgZnVuY3Rpb24oIHJlc3BvbnNlICkge1xuXG5cdFx0XHRcdFx0dmFyIHJlY29yZFR5cGVzQWxsb3dlZE1hcmt1cCA9ICcnLCByZWNvcmRUeXBlRGVmYXVsdE1hcmt1cCA9ICcnLCBkYXRlTWFya3VwID0gJyc7XG5cblx0XHRcdFx0XHRpZiAoIDAgPCAkKCByZXNwb25zZS5kYXRhLnJlY29yZFR5cGVJbmZvcyApLmxlbmd0aCApIHtcblx0XHRcdFx0XHRcdHJlY29yZFR5cGVzQWxsb3dlZE1hcmt1cCArPSAnPGxhYmVsIGZvcj1cInNhbGVzZm9yY2VfcmVjb3JkX3R5cGVzX2FsbG93ZWRcIj5BbGxvd2VkIFJlY29yZCBUeXBlczo8L2xhYmVsPjxkaXYgY2xhc3M9XCJjaGVja2JveGVzXCI+Jztcblx0XHRcdFx0XHRcdCQuZWFjaCggcmVzcG9uc2UuZGF0YS5yZWNvcmRUeXBlSW5mb3MsIGZ1bmN0aW9uKCBpbmRleCwgdmFsdWUgKSB7XG5cdFx0XHRcdFx0XHRcdHJlY29yZFR5cGVzQWxsb3dlZE1hcmt1cCArPSAnPGxhYmVsPjxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBjbGFzcz1cImZvcm0tY2hlY2tib3hcIiB2YWx1ZT1cIicgKyBpbmRleCArICdcIiBuYW1lPVwic2FsZXNmb3JjZV9yZWNvcmRfdHlwZXNfYWxsb3dlZFsnICsgaW5kZXggKyAnXVwiIGlkPVwic2FsZXNmb3JjZV9yZWNvcmRfdHlwZXNfYWxsb3dlZC0nICsgaW5kZXggKyAnXCI+ICcgKyB2YWx1ZSArICc8L2xhYmVsPic7XG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdHJlY29yZFR5cGVzQWxsb3dlZE1hcmt1cCArPSAnPC9kaXY+JztcblxuXG5cdFx0XHRcdFx0XHRyZWNvcmRUeXBlRGVmYXVsdE1hcmt1cCArPSAnPGxhYmVsIGZvcj1cInNhbGVzZm9yY2VfcmVjb3JkX3R5cGVfZGVmYXVsdFwiPkRlZmF1bHQgUmVjb3JkIFR5cGU6PC9sYWJlbD4nO1xuXHRcdFx0XHRcdFx0cmVjb3JkVHlwZURlZmF1bHRNYXJrdXAgKz0gJzxzZWxlY3QgbmFtZT1cInNhbGVzZm9yY2VfcmVjb3JkX3R5cGVfZGVmYXVsdFwiIGlkPVwic2FsZXNmb3JjZV9yZWNvcmRfdHlwZV9kZWZhdWx0XCI+PG9wdGlvbiB2YWx1ZT1cIlwiPi0gU2VsZWN0IHJlY29yZCB0eXBlIC08L29wdGlvbj4nO1xuXHRcdFx0XHRcdFx0JC5lYWNoKCByZXNwb25zZS5kYXRhLnJlY29yZFR5cGVJbmZvcywgZnVuY3Rpb24oIGluZGV4LCB2YWx1ZSApIHtcblx0XHRcdFx0XHRcdFx0cmVjb3JkVHlwZURlZmF1bHRNYXJrdXAgKz0gJzxvcHRpb24gdmFsdWU9XCInICsgaW5kZXggKyAnXCI+JyArIHZhbHVlICsgJzwvb3B0aW9uPic7XG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQkKCAnLnNhbGVzZm9yY2VfcmVjb3JkX3R5cGVzX2FsbG93ZWQnICkuaHRtbCggcmVjb3JkVHlwZXNBbGxvd2VkTWFya3VwICk7XG5cdFx0XHRcdFx0JCggJy5zYWxlc2ZvcmNlX3JlY29yZF90eXBlX2RlZmF1bHQnICkuaHRtbCggcmVjb3JkVHlwZURlZmF1bHRNYXJrdXAgKTtcblxuXHRcdFx0XHRcdGlmICggMCA8ICQoIHJlc3BvbnNlLmRhdGEuZmllbGRzICkubGVuZ3RoICkge1xuXHRcdFx0XHRcdFx0ZGF0ZU1hcmt1cCArPSAnPGxhYmVsIGZvcj1cInB1bGxfdHJpZ2dlcl9maWVsZFwiPkRhdGUgZmllbGQgdG8gdHJpZ2dlciBwdWxsOjwvbGFiZWw+Jztcblx0XHRcdFx0XHRcdGRhdGVNYXJrdXAgKz0gJzxzZWxlY3QgbmFtZT1cInB1bGxfdHJpZ2dlcl9maWVsZFwiIGlkPVwicHVsbF90cmlnZ2VyX2ZpZWxkXCI+PG9wdGlvbiB2YWx1ZT1cIlwiPi0gU2VsZWN0IGRhdGUgZmllbGQgLTwvb3B0aW9uPidcblx0XHRcdFx0XHRcdCQuZWFjaCggcmVzcG9uc2UuZGF0YS5maWVsZHMsIGZ1bmN0aW9uKCBpbmRleCwgdmFsdWUgKSB7XG5cdFx0XHRcdFx0XHRcdGRhdGVNYXJrdXAgKz0gJzxvcHRpb24gdmFsdWU9XCInICsgdmFsdWUubmFtZSArICdcIj4nICsgdmFsdWUubGFiZWwgKyAnPC9vcHRpb24+Jztcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0ZGF0ZU1hcmt1cCArPSAnPC9zZWxlY3Q+Jztcblx0XHRcdFx0XHRcdGRhdGVNYXJrdXAgKz0gJzxwIGNsYXNzPVwiZGVzY3JpcHRpb25cIj5UaGVzZSBhcmUgZGF0ZSBmaWVsZHMgdGhhdCBjYW4gY2F1c2UgV29yZFByZXNzIHRvIHB1bGwgYW4gdXBkYXRlIGZyb20gU2FsZXNmb3JjZSwgYWNjb3JkaW5nIHRvIHRoZSA8Y29kZT5zYWxlc2ZvcmNlX3B1bGw8L2NvZGU+IGNsYXNzLjwvcD4nXG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0JCggJy5wdWxsX3RyaWdnZXJfZmllbGQnICkuaHRtbCggZGF0ZU1hcmt1cCApO1xuXG5cdFx0XHRcdFx0aWYgKCAnJyAhPT0gcmVjb3JkVHlwZXNBbGxvd2VkTWFya3VwICkge1xuXHRcdFx0XHRcdFx0JCggJy5zYWxlc2ZvcmNlX3JlY29yZF90eXBlc19hbGxvd2VkJyApLnNob3coKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0JCggJy5zYWxlc2ZvcmNlX3JlY29yZF90eXBlc19hbGxvd2VkJyApLmhpZGUoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0aWYgKCAnJyAhPT0gcmVjb3JkVHlwZURlZmF1bHRNYXJrdXAgKSB7XG5cdFx0XHRcdFx0XHQkKCAnLnNhbGVzZm9yY2VfcmVjb3JkX3R5cGVfZGVmYXVsdCcgKS5zaG93KCk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdCQoICcuc2FsZXNmb3JjZV9yZWNvcmRfdHlwZV9kZWZhdWx0JyApLmhpZGUoKTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRpZiAoICcnICE9PSBkYXRlTWFya3VwICkge1xuXHRcdFx0XHRcdFx0JCggJy5wdWxsX3RyaWdnZXJfZmllbGQnICkuc2hvdygpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHQkKCAnLnB1bGxfdHJpZ2dlcl9maWVsZCcgKS5oaWRlKCk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aWYgKCBqUXVlcnkuZm4uc2VsZWN0MiApIHtcblx0XHRcdFx0XHRcdCQoICdzZWxlY3Qjc2FsZXNmb3JjZV9yZWNvcmRfdHlwZV9kZWZhdWx0JyApLnNlbGVjdDIoKTtcblx0XHRcdFx0XHRcdCQoICdzZWxlY3QjcHVsbF90cmlnZ2VyX2ZpZWxkJyApLnNlbGVjdDIoKTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0fSk7XG5cdFx0XHR9LCBkZWxheVRpbWUgKTtcblx0XHR9KTtcblx0fVxuXHQvKipcblx0ICogRHVwbGljYXRlcyB0aGUgZmllbGRzIGZvciBhIG5ldyByb3cgaW4gdGhlIGZpZWxkbWFwIG9wdGlvbnMgc2NyZWVuLlxuXHQgKi9cblx0IGZ1bmN0aW9uIGFkZEZpZWxkTWFwcGluZ1JvdygpIHtcblx0XHQkKCAnI2FkZC1maWVsZC1tYXBwaW5nJyApLmNsaWNrKCBmdW5jdGlvbigpIHtcblx0XHRcdHZhciBuZXdLZXkgPSBuZXcgRGF0ZSgpLmdldFVUQ01pbGxpc2Vjb25kcygpO1xuXHRcdFx0dmFyIGxhc3RSb3cgPSAkKCAndGFibGUuZmllbGRzIHRib2R5IHRyJyApLmxhc3QoKTtcblx0XHRcdHZhciBvbGRLZXkgPSBsYXN0Um93LmF0dHIoICdkYXRhLWtleScgKTtcblx0XHRcdG9sZEtleSA9IG5ldyBSZWdFeHAoIG9sZEtleSwgJ2cnICk7XG5cdFx0XHQkKCB0aGlzICkudGV4dCggJ0FkZCBhbm90aGVyIGZpZWxkIG1hcHBpbmcnICk7XG5cdFx0XHRmaWVsZG1hcEZpZWxkcyggb2xkS2V5LCBuZXdLZXksIGxhc3RSb3cgKTtcblx0XHRcdCQoIHRoaXMgKS5wYXJlbnQoKS5maW5kKCAnLm1pc3Npbmctb2JqZWN0JyApLnJlbW92ZSgpO1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH0pO1xuXHR9XG5cdC8qKlxuXHQgKiBHZXRzIHRoZSBXb3JkUHJlc3MgYW5kIFNhbGVzZm9yY2UgZmllbGQgcmVzdWx0cyB2aWEgYW4gQWpheCBjYWxsXG5cdCAqIEBwYXJhbSBzdHJpbmcgb2xkS2V5IHRoZSBkYXRhLWtleSBhdHRyaWJ1dGUgb2YgdGhlIHNldCB0aGF0IGlzIGJlaW5nIGNsb25lZFxuXHQgKiBAcGFyYW0gc3RyaW5nIG5ld0tleSB0aGUgZGF0YS1rZXkgYXR0cmlidXRlIGZvciB0aGUgb25lIHdlJ3JlIGFwcGVuZGluZ1xuXHQgKiBAcGFyYW0gb2JqZWN0IGxhc3RSb3cgdGhlIGxhc3Qgc2V0IG9mIHRoZSBmaWVsZG1hcFxuXHQgKi9cblx0ZnVuY3Rpb24gZmllbGRtYXBGaWVsZHMoIG9sZEtleSwgbmV3S2V5LCBsYXN0Um93ICkge1xuXHRcdHZhciBuZXh0Um93ID0gJyc7XG4gICAgICAgIGlmICggalF1ZXJ5LmZuLnNlbGVjdDIgKSB7XG4gICAgICAgIFx0bmV4dFJvdyA9IGxhc3RSb3cuZmluZCggJ3NlbGVjdCcgKVxuXHQgICAgICAgICAgICAuc2VsZWN0MiggJ2Rlc3Ryb3knIClcblx0ICAgICAgICAgICAgLmVuZCgpXG5cdCAgICAgICAgICAgIC5jbG9uZSggdHJ1ZSApLnJlbW92ZUNsYXNzKCAnZmllbGRtYXAtdGVtcGxhdGUnICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgIFx0bmV4dFJvdyA9IGxhc3RSb3cuY2xvbmUoIHRydWUgKTtcbiAgICAgICAgfVxuXHRcdCQoIG5leHRSb3cgKS5hdHRyKCAnZGF0YS1rZXknLCBuZXdLZXkgKTtcblx0XHQkKCBuZXh0Um93ICkuZWFjaChmdW5jdGlvbigpIHtcblx0XHRcdCQoIHRoaXMgKS5odG1sKCBmdW5jdGlvbiggaSwgaCApIHtcblx0XHRcdFx0cmV0dXJuIGgucmVwbGFjZSggb2xkS2V5LCBuZXdLZXkgKTtcblx0XHRcdH0pO1xuXHRcdH0pO1xuXHRcdCQoICd0YWJsZS5maWVsZHMgdGJvZHknICkuYXBwZW5kKCBuZXh0Um93ICk7XG5cdFx0aWYgKCBqUXVlcnkuZm4uc2VsZWN0MiApIHtcblx0XHRcdGxhc3RSb3cuZmluZCggJ3NlbGVjdCcgKS5zZWxlY3QyKCk7XG5cdFx0XHRuZXh0Um93LmZpbmQoICdzZWxlY3QnICkuc2VsZWN0MigpO1xuXHRcdH1cblx0fVxuXHQvKipcblx0ICogSGFuZGxlIG1hbnVhbCBwdXNoIGFuZCBwdWxsIG9mIG9iamVjdHNcblx0ICovXG5cdGZ1bmN0aW9uIHB1c2hBbmRQdWxsT2JqZWN0cygpIHtcblx0XHQkKCAnLnNhbGVzZm9yY2VfdXNlcl9hamF4X21lc3NhZ2UnICkuaGlkZSgpO1xuXHRcdGlmICggMCA8ICQoICcjd29yZHByZXNzX29iamVjdF9hamF4JyApLmxlbmd0aCApIHtcblx0XHRcdCQoICcucHVzaF90b19zYWxlc2ZvcmNlX2J1dHRvbicgKS5vbiggJ2NsaWNrJywgZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHZhciB3b3JkcHJlc3NPYmplY3QgPSAkKCAnI3dvcmRwcmVzc19vYmplY3RfYWpheCcgKS52YWwoKTtcblx0XHRcdFx0dmFyIHdvcmRwcmVzc0lkID0gJCggJyN3b3JkcHJlc3NfaWRfYWpheCcgKS52YWwoKTtcblx0XHRcdFx0dmFyIHNhbGVzZm9yY2VJZCA9ICQoICcjc2FsZXNmb3JjZV9pZF9hamF4JyApLnZhbCgpO1xuXHRcdFx0XHR2YXIgZGF0YSA9IHtcblx0XHRcdFx0XHQnYWN0aW9uJyA6ICdwdXNoX3RvX3NhbGVzZm9yY2UnLFxuXHRcdFx0XHRcdCd3b3JkcHJlc3Nfb2JqZWN0JyA6IHdvcmRwcmVzc09iamVjdCxcblx0XHRcdFx0XHQnd29yZHByZXNzX2lkJyA6IHdvcmRwcmVzc0lkLFxuXHRcdFx0XHRcdCdzYWxlc2ZvcmNlX2lkJyA6IHNhbGVzZm9yY2VJZFxuXHRcdFx0XHR9XG5cdFx0XHRcdCQucG9zdCggYWpheHVybCwgZGF0YSwgZnVuY3Rpb24oIHJlc3BvbnNlICkge1xuXHRcdFx0XHRcdGlmICggdHJ1ZSA9PT0gcmVzcG9uc2Uuc3VjY2VzcyApIHtcblx0XHRcdFx0XHRcdHVwZGF0ZVNhbGVzZm9yY2VVc2VyU3VtbWFyeSgpO1xuXHRcdFx0XHRcdFx0JCggJy5zYWxlc2ZvcmNlX3VzZXJfYWpheF9tZXNzYWdlJyApLndpZHRoKCAkKCAnLm1hcHBlZC1zYWxlc2ZvcmNlLXVzZXInICkud2lkdGgoKSAtIDI3ICk7XG5cdFx0XHRcdFx0XHQkKCAnLnNhbGVzZm9yY2VfdXNlcl9hamF4X21lc3NhZ2UnICkuaHRtbCggJzxwPlRoaXMgb2JqZWN0IGhhcyBiZWVuIHB1c2hlZCB0byBTYWxlc2ZvcmNlLjwvcD4nICkuZmFkZUluKCkuZGVsYXkoIDQwMDAgKS5mYWRlT3V0KCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdCQoICcucHVsbF9mcm9tX3NhbGVzZm9yY2VfYnV0dG9uJyApLm9uKCAnY2xpY2snLCBmdW5jdGlvbigpIHtcblx0XHRcdHZhciBzYWxlc2ZvcmNlSWQgPSAkKCAnI3NhbGVzZm9yY2VfaWRfYWpheCcgKS52YWwoKTtcblx0XHRcdHZhciB3b3JkcHJlc3NPYmplY3QgPSAkKCAnI3dvcmRwcmVzc19vYmplY3RfYWpheCcgKS52YWwoKTtcblx0XHRcdHZhciBkYXRhID0ge1xuXHRcdFx0XHQnYWN0aW9uJyA6ICdwdWxsX2Zyb21fc2FsZXNmb3JjZScsXG5cdFx0XHRcdCdzYWxlc2ZvcmNlX2lkJyA6IHNhbGVzZm9yY2VJZCxcblx0XHRcdFx0J3dvcmRwcmVzc19vYmplY3QnIDogd29yZHByZXNzT2JqZWN0XG5cdFx0XHR9XG5cdFx0XHQkLnBvc3QoIGFqYXh1cmwsIGRhdGEsIGZ1bmN0aW9uKCByZXNwb25zZSApIHtcblx0XHRcdFx0aWYgKCB0cnVlID09PSByZXNwb25zZS5zdWNjZXNzICkge1xuXHRcdFx0XHRcdHVwZGF0ZVNhbGVzZm9yY2VVc2VyU3VtbWFyeSgpO1xuXHRcdFx0XHRcdCQoICcuc2FsZXNmb3JjZV91c2VyX2FqYXhfbWVzc2FnZScgKS53aWR0aCggJCggJy5tYXBwZWQtc2FsZXNmb3JjZS11c2VyJyApLndpZHRoKCkgLSAyNyApO1xuXHRcdFx0XHRcdCQoICcuc2FsZXNmb3JjZV91c2VyX2FqYXhfbWVzc2FnZScgKS5odG1sKCAnPHA+VGhpcyBvYmplY3QgaGFzIGJlZW4gcHVsbGVkIGZyb20gU2FsZXNmb3JjZS48L3A+JyApLmZhZGVJbigpLmRlbGF5KCA0MDAwICkuZmFkZU91dCgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9KTtcblx0fVxuXHQvKipcblx0ICogVXBkYXRlcyB0aGUgdXNlciBwcm9maWxlIHN1bW1hcnkgb2YgU2FsZXNmb3JjZSBpbmZvLlxuXHQgKi9cblx0ZnVuY3Rpb24gdXBkYXRlU2FsZXNmb3JjZVVzZXJTdW1tYXJ5KCkge1xuXHRcdHZhciBtYXBwaW5nSWQgPSAkKCAnI21hcHBpbmdfaWRfYWpheCcgKS52YWwoKTtcblx0XHR2YXIgZGF0YSA9IHtcblx0XHRcdCdhY3Rpb24nIDogJ3JlZnJlc2hfbWFwcGVkX2RhdGEnLFxuXHRcdFx0J21hcHBpbmdfaWQnIDogbWFwcGluZ0lkXG5cdFx0fVxuXHRcdCQucG9zdCggYWpheHVybCwgZGF0YSwgZnVuY3Rpb24oIHJlc3BvbnNlICkge1xuXHRcdFx0aWYgKCB0cnVlID09PSByZXNwb25zZS5zdWNjZXNzICkge1xuXHRcdFx0XHQkKCAndGQubGFzdF9zeW5jX21lc3NhZ2UnICkudGV4dCggcmVzcG9uc2UuZGF0YS5sYXN0X3N5bmNfbWVzc2FnZSApO1xuXHRcdFx0XHQkKCAndGQubGFzdF9zeW5jX2FjdGlvbicgKS50ZXh0KCByZXNwb25zZS5kYXRhLmxhc3Rfc3luY19hY3Rpb24gKTtcblx0XHRcdFx0JCggJ3RkLmxhc3Rfc3luY19zdGF0dXMnICkudGV4dCggcmVzcG9uc2UuZGF0YS5sYXN0X3N5bmNfc3RhdHVzICk7XG5cdFx0XHRcdCQoICd0ZC5sYXN0X3N5bmMnICkudGV4dCggcmVzcG9uc2UuZGF0YS5sYXN0X3N5bmMgKTtcblx0XHRcdFx0aWYgKCAnMScgPT09IHJlc3BvbnNlLmRhdGEubGFzdF9zeW5jX3N0YXR1cyApIHtcblx0XHRcdFx0XHQkKCAndGQubGFzdF9zeW5jX3N0YXR1cycgKS50ZXh0KCAnc3VjY2VzcycgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cdC8qKlxuXHQgKiBDbGVhciB0aGUgcGx1Z2luIGNhY2hlIHZpYSBBamF4IHJlcXVlc3QuXG5cdCAqL1xuXHRmdW5jdGlvbiBjbGVhclNmd3BDYWNoZUxpbmsoKSB7XG5cdFx0JCggJyNjbGVhci1zZndwLWNhY2hlJyApLmNsaWNrKCBmdW5jdGlvbigpIHtcblx0XHRcdHZhciBkYXRhID0ge1xuXHRcdFx0XHQnYWN0aW9uJyA6ICdjbGVhcl9zZndwX2NhY2hlJ1xuXHRcdFx0fVxuXHRcdFx0dmFyIHRoYXQgPSAkKCB0aGlzICk7XG5cdFx0XHQkLnBvc3QoIGFqYXh1cmwsIGRhdGEsIGZ1bmN0aW9uKCByZXNwb25zZSApIHtcblx0XHRcdFx0aWYgKCB0cnVlID09PSByZXNwb25zZS5zdWNjZXNzICYmIHRydWUgPT09IHJlc3BvbnNlLmRhdGEuc3VjY2VzcyApIHtcblx0XHRcdFx0XHR0aGF0LnBhcmVudCgpLmh0bWwoIHJlc3BvbnNlLmRhdGEubWVzc2FnZSApLmZhZGVJbigpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9KTtcblx0fVxuXG5cdC8vIGxvYWQgYXZhaWxhYmxlIG9wdGlvbnMgaWYgdGhlIHdvcmRwcmVzcyBvYmplY3QgY2hhbmdlc1xuXHQkKCBkb2N1bWVudCApLm9uKCAnY2hhbmdlJywgJ3NlbGVjdCN3b3JkcHJlc3Nfb2JqZWN0JywgZnVuY3Rpb24oKSB7XG5cdFx0dmFyIHRpbWVvdXQ7XG5cdFx0bG9hZEZpZWxkT3B0aW9ucyggJ3dvcmRwcmVzcycsICQoIHRoaXMgKS52YWwoKSApO1xuXHRcdGNsZWFyVGltZW91dCggdGltZW91dCApO1xuXHRcdHRpbWVvdXQgPSBzZXRUaW1lb3V0KCBmdW5jdGlvbigpIHtcblx0XHRcdCQoICd0YWJsZS5maWVsZHMgdGJvZHkgdHInICkuZmFkZU91dCgpO1xuXHRcdFx0JCggJ3RhYmxlLmZpZWxkcyB0Ym9keSB0cicgKS5ub3QoICc6bGFzdCcgKS5yZW1vdmUoKTtcblx0XHR9LCAxMDAwICk7XG5cdH0pO1xuXG5cdC8vIGxvYWQgYXZhaWxhYmxlIG9wdGlvbnMgaWYgdGhlIHNhbGVzZm9yY2Ugb2JqZWN0IGNoYW5nZXNcblx0JCggZG9jdW1lbnQgKS5vbiggJ2NoYW5nZScsICdzZWxlY3Qjc2FsZXNmb3JjZV9vYmplY3QnLCBmdW5jdGlvbigpIHtcblx0XHR2YXIgdGltZW91dDtcblx0XHRsb2FkRmllbGRPcHRpb25zKCAnc2FsZXNmb3JjZScsICQoIHRoaXMgKS52YWwoKSApO1xuXHRcdGNsZWFyVGltZW91dCggdGltZW91dCApO1xuXHRcdHRpbWVvdXQgPSBzZXRUaW1lb3V0KCBmdW5jdGlvbigpIHtcblx0XHRcdCQoICd0YWJsZS5maWVsZHMgdGJvZHkgdHInICkuZmFkZU91dCgpO1xuXHRcdFx0JCggJ3RhYmxlLmZpZWxkcyB0Ym9keSB0cicgKS5ub3QoICc6bGFzdCcgKS5yZW1vdmUoKTtcblx0XHR9LCAxMDAwICk7XG5cdH0pO1xuXG5cdC8vIHNob3cgd3NkbCBmaWVsZCBpZiBzb2FwIGlzIGVuYWJsZWRcblx0JCggZG9jdW1lbnQgKS5vbiggJ2NoYW5nZScsICcub2JqZWN0LXN5bmMtZm9yLXNhbGVzZm9yY2UtZW5hYmxlLXNvYXAgaW5wdXQnLCBmdW5jdGlvbigpIHtcblx0XHR0b2dnbGVTb2FwRmllbGRzKCk7XG5cdH0pO1xuXG5cdC8qKlxuXHQgKiBBcyB0aGUgRHJ1cGFsIHBsdWdpbiBkb2VzLCB3ZSBvbmx5IGFsbG93IG9uZSBmaWVsZCB0byBiZSBhIHByZW1hdGNoXG5cdCAqL1xuXHQkKCBkb2N1bWVudCApLm9uKCAnY2xpY2snLCAnLmNvbHVtbi1pc19wcmVtYXRjaCBpbnB1dCcsIGZ1bmN0aW9uKCkge1xuXHRcdCQoICcuY29sdW1uLWlzX3ByZW1hdGNoIGlucHV0JyApLm5vdCggdGhpcyApLnByb3AoICdjaGVja2VkJywgZmFsc2UgKTtcblx0fSk7XG5cdC8qKlxuXHQgKiBBcyB0aGUgRHJ1cGFsIHBsdWdpbiBkb2VzLCB3ZSBvbmx5IGFsbG93IG9uZSBmaWVsZCB0byBiZSBhIGtleVxuXHQgKi9cblx0JCggZG9jdW1lbnQgKS5vbiggJ2NsaWNrJywgJy5jb2x1bW4taXNfa2V5IGlucHV0JywgZnVuY3Rpb24oKSB7XG5cdFx0JCggJy5jb2x1bW4taXNfa2V5IGlucHV0JyApLm5vdCggdGhpcyApLnByb3AoICdjaGVja2VkJywgZmFsc2UgKTtcblx0fSk7XG5cdC8qKlxuXHQgKiBXaGVuIHRoZSBwbHVnaW4gbG9hZHMsIGluaXRpYWxpemUgb3IgZW5hYmxlIHRoaW5nczpcblx0ICogU2VsZWN0MiBvbiBzZWxlY3QgZmllbGRzXG5cdCAqIENsZWFyIGZpZWxkcyB3aGVuIHRoZSB0YXJnZXRlZCBXb3JkUHJlc3Mgb3IgU2FsZXNmb3JjZSBvYmplY3QgdHlwZSBjaGFuZ2VzXG5cdCAqIEFkZCBhIHNwaW5uZXIgZm9yIEFqYXggcmVxdWVzdHNcblx0ICogTWFuYWdlIHRoZSBkaXNwbGF5IGZvciBTYWxlc2ZvcmNlIG9iamVjdCBmaWVsZHMgYmFzZWQgb24gQVBJIHJlcG9uc2Vcblx0ICogTWFudWFsIHB1c2ggYW5kIHB1bGxcblx0ICogQ2xlYXJpbmcgdGhlIGNhY2hlXG5cdCAqL1xuXHQkKCBkb2N1bWVudCApLnJlYWR5KCBmdW5jdGlvbigpIHtcblxuXHRcdC8vIGZvciBtYWluIGFkbWluIHNldHRpbmdzXG5cdFx0dG9nZ2xlU29hcEZpZWxkcygpO1xuXG5cdFx0aWYgKCBqUXVlcnkuZm4uc2VsZWN0MiApIHtcblx0XHRcdCQoICdzZWxlY3Qjd29yZHByZXNzX29iamVjdCcgKS5zZWxlY3QyKCk7XG5cdFx0XHQkKCAnc2VsZWN0I3NhbGVzZm9yY2Vfb2JqZWN0JyApLnNlbGVjdDIoKTtcblx0XHRcdCQoICdzZWxlY3Qjc2FsZXNmb3JjZV9yZWNvcmRfdHlwZV9kZWZhdWx0JyApLnNlbGVjdDIoKTtcblx0XHRcdCQoICdzZWxlY3QjcHVsbF90cmlnZ2VyX2ZpZWxkJyApLnNlbGVjdDIoKTtcblx0XHRcdCQoICcuY29sdW1uLXdvcmRwcmVzc19maWVsZCBzZWxlY3QnICkuc2VsZWN0MigpO1xuXHRcdFx0JCggJy5jb2x1bW4tc2FsZXNmb3JjZV9maWVsZCBzZWxlY3QnICkuc2VsZWN0MigpO1xuXHRcdH1cblxuXHRcdC8vIHRvZG86IG5lZWQgdG8gZml4IHRoaXMgc28gaXQgZG9lc24ndCBydW4gYWxsIHRoZSBzcGlubmVycyBhdCB0aGUgc2FtZSB0aW1lIHdoZW4gdGhlcmUgYXJlIG11bHRpcGxlcyBvbiB0aGUgc2FtZSBwYWdlXG5cdFx0JCggZG9jdW1lbnQgKS5hamF4U3RhcnQoIGZ1bmN0aW9uKCkge1xuXHRcdFx0JCggJy5zcGlubmVyJyApLmFkZENsYXNzKCAnaXMtYWN0aXZlJyApO1xuXHRcdH0pLmFqYXhTdG9wKCBmdW5jdGlvbigpIHtcblx0XHRcdCQoICcuc3Bpbm5lcicgKS5yZW1vdmVDbGFzcyggJ2lzLWFjdGl2ZScgKTtcblx0XHR9KTtcblx0XHRzYWxlc2ZvcmNlT2JqZWN0RmllbGRzKCk7XG5cdFx0YWRkRmllbGRNYXBwaW5nUm93KCk7XG5cblx0XHQvLyBmb3IgcHVzaC9wdWxsIG1ldGhvZHMgcnVubmluZyB2aWEgYWpheFxuXHRcdHB1c2hBbmRQdWxsT2JqZWN0cygpO1xuXG5cdFx0Ly8gZm9yIGNsZWFyaW5nIHRoZSBwbHVnaW4gY2FjaGVcblx0XHRjbGVhclNmd3BDYWNoZUxpbmsoKTtcblx0fSk7XG59KCBqUXVlcnkgKSApO1xuIl19 diff --git a/assets/js/object-sync-for-salesforce-admin.min.js b/assets/js/object-sync-for-salesforce-admin.min.js index 4889a2b3..1c8c04e0 100644 --- a/assets/js/object-sync-for-salesforce-admin.min.js +++ b/assets/js/object-sync-for-salesforce-admin.min.js @@ -1 +1 @@ -"use strict";!function(o){function s(){0',t+='',o.each(e.data.wordpress,function(e,s){t+='"}),t+="",a+='")+'
',o("table.fields tbody").append(s),jQuery.fn.select2&&(o(".column-wordpress_field select").select2(),o(".column-salesforce_field select").select2())}),o(this).parent().find(".missing-object").remove()):o(this).parent().prepend('
You have to pick a WordPress object and a Salesforce object to add field mapping.
'),!1})}function c(){var e={action:"refresh_mapped_data",mapping_id:o("#mapping_id_ajax").val()};o.post(ajaxurl,e,function(e){!0===e.success&&(o("td.last_sync_message").text(e.data.last_sync_message),o("td.last_sync_action").text(e.data.last_sync_action),o("td.last_sync_status").text(e.data.last_sync_status),o("td.last_sync").text(e.data.last_sync),"1"===e.data.last_sync_status&&o("td.last_sync_status").text("success"))})}o(document).on("change",".object-sync-for-salesforce-enable-soap input",function(){s()}),o(document).on("click",".column-is_prematch input",function(){o(".column-is_prematch input").not(this).prop("checked",!1)}),o(document).on("click",".column-is_key input",function(){o(".column-is_key input").not(this).prop("checked",!1)}),o(document).ready(function(){var e,t,a;s(),jQuery.fn.select2&&(o("select#wordpress_object").select2(),o("select#salesforce_object").select2(),o("select#salesforce_record_type_default").select2(),o("select#pull_trigger_field").select2(),o(".column-wordpress_field select").select2(),o(".column-salesforce_field select").select2()),o("#wordpress_object, #salesforce_object").on("change",function(){clearTimeout(e),e=setTimeout(function(){o("table.fields tbody tr").fadeOut(),o("table.fields tbody tr").remove()},1e3)}),o(document).ajaxStart(function(){o(".spinner").addClass("is-active")}).ajaxStop(function(){o(".spinner").removeClass("is-active")}),a=function(e,s){clearTimeout(t),t=setTimeout(e,s)},(t=0)===o(".salesforce_record_types_allowed > *").length&&o(".salesforce_record_types_allowed").hide(),0===o(".salesforce_record_type_default > *").length&&o(".salesforce_record_type_default").hide(),0===o(".pull_trigger_field > *").length&&o(".pull_trigger_field").hide(),o("#salesforce_object").on("change",function(){var s=this;a(function(){var e={action:"get_salesforce_object_description",include:["fields","recordTypeInfos"],field_type:"datetime",salesforce_object:s.value};o.post(ajaxurl,e,function(e){var t="",a="",l="";0Allowed Record Types:
',o.each(e.data.recordTypeInfos,function(e,s){t+='"}),t+="
",a+='',a+='',o.each(e.data.fields,function(e,s){l+='"}),l+="",l+='

These are date fields that can cause WordPress to pull an update from Salesforce, according to the salesforce_pull class.

'),o(".pull_trigger_field").html(l),""!==t?o(".salesforce_record_types_allowed").show():o(".salesforce_record_types_allowed").hide(),""!==a?o(".salesforce_record_type_default").show():o(".salesforce_record_type_default").hide(),""!==l?o(".pull_trigger_field").show():o(".pull_trigger_field").hide(),jQuery.fn.select2&&(o("select#salesforce_record_type_default").select2(),o("select#pull_trigger_field").select2())})},1e3)}),l(),o(".salesforce_user_ajax_message").hide(),0This object has been pushed to Salesforce.

").fadeIn().delay(4e3).fadeOut())}),!1}),o(".pull_from_salesforce_button").on("click",function(){var e={action:"pull_from_salesforce",salesforce_id:o("#salesforce_id_ajax").val(),wordpress_object:o("#wordpress_object_ajax").val()};return o.post(ajaxurl,e,function(e){!0===e.success&&(c(),o(".salesforce_user_ajax_message").width(o(".mapped-salesforce-user").width()-27),o(".salesforce_user_ajax_message").html("

This object has been pulled from Salesforce.

").fadeIn().delay(4e3).fadeOut())}),!1}),o("#clear-sfwp-cache").click(function(){var s=o(this);return o.post(ajaxurl,{action:"clear_sfwp_cache"},function(e){!0===e.success&&!0===e.data.success&&s.parent().html(e.data.message).fadeIn()}),!1})})}(jQuery); \ No newline at end of file +"use strict";!function(o){function t(s,e){var t={action:"get_"+s+"_object_fields"},a="",l=o(".column-"+s+"_field select option").first().text();if(a+='","wordpress"===s)t.wordpress_object=e;else{if("salesforce"!==s)return a;t.salesforce_object=e}o.post(ajaxurl,t,function(e){o.each(e.data.fields,function(e,t){"wordpress"===s?a+='":"salesforce"===s&&(a+='")}),o(".column-"+s+"_field select").html(a)})}function e(){0 *").length&&o(".salesforce_record_types_allowed").hide(),0===o(".salesforce_record_type_default > *").length&&o(".salesforce_record_type_default").hide(),0===o(".pull_trigger_field > *").length&&o(".pull_trigger_field").hide(),o("#salesforce_object").on("change",function(){var t=this;e(function(){var e={action:"get_salesforce_object_description",include:["fields","recordTypeInfos"],field_type:"datetime",salesforce_object:t.value};o.post(ajaxurl,e,function(e){var s="",a="",l="";0Allowed Record Types:
',o.each(e.data.recordTypeInfos,function(e,t){s+='"}),s+="
",a+='',a+='',o.each(e.data.fields,function(e,t){l+='"}),l+="",l+='

These are date fields that can cause WordPress to pull an update from Salesforce, according to the salesforce_pull class.

'),o(".pull_trigger_field").html(l),""!==s?o(".salesforce_record_types_allowed").show():o(".salesforce_record_types_allowed").hide(),""!==a?o(".salesforce_record_type_default").show():o(".salesforce_record_type_default").hide(),""!==l?o(".pull_trigger_field").show():o(".pull_trigger_field").hide(),jQuery.fn.select2&&(o("select#salesforce_record_type_default").select2(),o("select#pull_trigger_field").select2())})},1e3)})}function a(){o("#add-field-mapping").click(function(){var e=(new Date).getUTCMilliseconds(),t=o("table.fields tbody tr").last(),s=t.attr("data-key");return s=new RegExp(s,"g"),o(this).text("Add another field mapping"),function(s,a,e){var t="";t=jQuery.fn.select2?e.find("select").select2("destroy").end().clone(!0).removeClass("fieldmap-template"):e.clone(!0);o(t).attr("data-key",a),o(t).each(function(){o(this).html(function(e,t){return t.replace(s,a)})}),o("table.fields tbody").append(t),jQuery.fn.select2&&(e.find("select").select2(),t.find("select").select2())}(s,e,t),o(this).parent().find(".missing-object").remove(),!1})}function l(){var e={action:"refresh_mapped_data",mapping_id:o("#mapping_id_ajax").val()};o.post(ajaxurl,e,function(e){!0===e.success&&(o("td.last_sync_message").text(e.data.last_sync_message),o("td.last_sync_action").text(e.data.last_sync_action),o("td.last_sync_status").text(e.data.last_sync_status),o("td.last_sync").text(e.data.last_sync),"1"===e.data.last_sync_status&&o("td.last_sync_status").text("success"))})}o(document).on("change","select#wordpress_object",function(){var e;t("wordpress",o(this).val()),clearTimeout(e),e=setTimeout(function(){o("table.fields tbody tr").fadeOut(),o("table.fields tbody tr").not(":last").remove()},1e3)}),o(document).on("change","select#salesforce_object",function(){var e;t("salesforce",o(this).val()),clearTimeout(e),e=setTimeout(function(){o("table.fields tbody tr").fadeOut(),o("table.fields tbody tr").not(":last").remove()},1e3)}),o(document).on("change",".object-sync-for-salesforce-enable-soap input",function(){e()}),o(document).on("click",".column-is_prematch input",function(){o(".column-is_prematch input").not(this).prop("checked",!1)}),o(document).on("click",".column-is_key input",function(){o(".column-is_key input").not(this).prop("checked",!1)}),o(document).ready(function(){e(),jQuery.fn.select2&&(o("select#wordpress_object").select2(),o("select#salesforce_object").select2(),o("select#salesforce_record_type_default").select2(),o("select#pull_trigger_field").select2(),o(".column-wordpress_field select").select2(),o(".column-salesforce_field select").select2()),o(document).ajaxStart(function(){o(".spinner").addClass("is-active")}).ajaxStop(function(){o(".spinner").removeClass("is-active")}),s(),a(),o(".salesforce_user_ajax_message").hide(),0This object has been pushed to Salesforce.

").fadeIn().delay(4e3).fadeOut())}),!1}),o(".pull_from_salesforce_button").on("click",function(){var e={action:"pull_from_salesforce",salesforce_id:o("#salesforce_id_ajax").val(),wordpress_object:o("#wordpress_object_ajax").val()};return o.post(ajaxurl,e,function(e){!0===e.success&&(l(),o(".salesforce_user_ajax_message").width(o(".mapped-salesforce-user").width()-27),o(".salesforce_user_ajax_message").html("

This object has been pulled from Salesforce.

").fadeIn().delay(4e3).fadeOut())}),!1}),o("#clear-sfwp-cache").click(function(){var t=o(this);return o.post(ajaxurl,{action:"clear_sfwp_cache"},function(e){!0===e.success&&!0===e.data.success&&t.parent().html(e.data.message).fadeIn()}),!1})})}(jQuery); \ No newline at end of file diff --git a/assets/js/src/admin.js b/assets/js/src/admin.js index 22b622e1..2fd327f2 100644 --- a/assets/js/src/admin.js +++ b/assets/js/src/admin.js @@ -1,5 +1,31 @@ ( function( $ ) { + function loadFieldOptions( system, object_name ) { + var data = { + 'action' : 'get_' + system + '_object_fields', + } + var fields = ''; + var first_field = $( '.column-' + system + '_field select option').first().text(); + fields += ''; + if ( 'wordpress' === system ) { + data['wordpress_object'] = object_name; + } else if ( 'salesforce' === system ) { + data['salesforce_object'] = object_name; + } else { + return fields; + } + $.post( ajaxurl, data, function( response ) { + $.each( response.data.fields, function( index, value ) { + if ( 'wordpress' === system ) { + fields += ''; + } else if ( 'salesforce' === system ) { + fields += ''; + } + }); + $( '.column-' + system + '_field select' ).html( fields ); + }); + } + /** * Don't show the WSDL file field unless SOAP is enabled */ @@ -112,60 +138,43 @@ */ function addFieldMappingRow() { $( '#add-field-mapping' ).click( function() { - var salesforceObject = $( '#salesforce_object' ).val(); - var wordpressObject = $( '#wordpress_object' ).val(); - var rowKey; + var newKey = new Date().getUTCMilliseconds(); + var lastRow = $( 'table.fields tbody tr' ).last(); + var oldKey = lastRow.attr( 'data-key' ); + oldKey = new RegExp( oldKey, 'g' ); $( this ).text( 'Add another field mapping' ); - if ( '' !== wordpressObject && '' !== salesforceObject ) { - rowKey = Math.floor( Date.now() / 1000 ); - fieldmapFields( wordpressObject, salesforceObject, rowKey ); - $( this ).parent().find( '.missing-object' ).remove(); - } else { - $( this ).parent().prepend( '
You have to pick a WordPress object and a Salesforce object to add field mapping.
' ); - } + fieldmapFields( oldKey, newKey, lastRow ); + $( this ).parent().find( '.missing-object' ).remove(); return false; }); } /** * Gets the WordPress and Salesforce field results via an Ajax call - * @param string wordpressObject the WordPress object type - * @param string salesforceObject the Salesforce object type - * @param int rowKey which row we're working on + * @param string oldKey the data-key attribute of the set that is being cloned + * @param string newKey the data-key attribute for the one we're appending + * @param object lastRow the last set of the fieldmap */ - function fieldmapFields( wordpressObject, salesforceObject, rowKey ) { - var data = { - 'action' : 'get_wp_sf_object_fields', - 'wordpress_object' : wordpressObject, - 'salesforce_object' : salesforceObject - } - $.post( ajaxurl, data, function( response ) { - var wordpress = ''; - var salesforce = ''; - var markup = ''; - - wordpress += ''; - - salesforce += ''; - - markup = '' + wordpress + '' + salesforce + '
'; - $( 'table.fields tbody' ).append( markup ); - - if ( jQuery.fn.select2 ) { - $( '.column-wordpress_field select' ).select2(); - $( '.column-salesforce_field select' ).select2(); - } - }); + $( 'table.fields tbody' ).append( nextRow ); + if ( jQuery.fn.select2 ) { + lastRow.find( 'select' ).select2(); + nextRow.find( 'select' ).select2(); + } } /** * Handle manual push and pull of objects @@ -250,6 +259,28 @@ }); } + // load available options if the wordpress object changes + $( document ).on( 'change', 'select#wordpress_object', function() { + var timeout; + loadFieldOptions( 'wordpress', $( this ).val() ); + clearTimeout( timeout ); + timeout = setTimeout( function() { + $( 'table.fields tbody tr' ).fadeOut(); + $( 'table.fields tbody tr' ).not( ':last' ).remove(); + }, 1000 ); + }); + + // load available options if the salesforce object changes + $( document ).on( 'change', 'select#salesforce_object', function() { + var timeout; + loadFieldOptions( 'salesforce', $( this ).val() ); + clearTimeout( timeout ); + timeout = setTimeout( function() { + $( 'table.fields tbody tr' ).fadeOut(); + $( 'table.fields tbody tr' ).not( ':last' ).remove(); + }, 1000 ); + }); + // show wsdl field if soap is enabled $( document ).on( 'change', '.object-sync-for-salesforce-enable-soap input', function() { toggleSoapFields(); @@ -281,9 +312,6 @@ // for main admin settings toggleSoapFields(); - // for the fieldmap add/edit screen - var timeout; - if ( jQuery.fn.select2 ) { $( 'select#wordpress_object' ).select2(); $( 'select#salesforce_object' ).select2(); @@ -293,14 +321,6 @@ $( '.column-salesforce_field select' ).select2(); } - $( '#wordpress_object, #salesforce_object' ).on( 'change', function() { - clearTimeout( timeout ); - timeout = setTimeout( function() { - $( 'table.fields tbody tr' ).fadeOut(); - $( 'table.fields tbody tr' ).remove(); - }, 1000 ); - }); - // todo: need to fix this so it doesn't run all the spinners at the same time when there are multiples on the same page $( document ).ajaxStart( function() { $( '.spinner' ).addClass( 'is-active' ); From 06d658ca7af05f9e477a0e4d4e8889a810df8605 Mon Sep 17 00:00:00 2001 From: Jonathan Stegall Date: Sun, 5 Jan 2020 08:22:55 -0600 Subject: [PATCH 10/27] allow the script to work on a page refresh. also make sure both object types have a value. --- assets/js/object-sync-for-salesforce-admin.js | 19 +++++++++++++++---- .../object-sync-for-salesforce-admin.min.js | 2 +- assets/js/src/admin.js | 14 ++++++++++++-- 3 files changed, 28 insertions(+), 7 deletions(-) diff --git a/assets/js/object-sync-for-salesforce-admin.js b/assets/js/object-sync-for-salesforce-admin.js index fe792e4d..c649d569 100644 --- a/assets/js/object-sync-for-salesforce-admin.js +++ b/assets/js/object-sync-for-salesforce-admin.js @@ -144,13 +144,21 @@ function addFieldMappingRow() { $('#add-field-mapping').click(function () { + var salesforceObject = $('#salesforce_object').val(); + var wordpressObject = $('#wordpress_object').val(); var newKey = new Date().getUTCMilliseconds(); var lastRow = $('table.fields tbody tr').last(); var oldKey = lastRow.attr('data-key'); oldKey = new RegExp(oldKey, 'g'); $(this).text('Add another field mapping'); - fieldmapFields(oldKey, newKey, lastRow); - $(this).parent().find('.missing-object').remove(); + + if ('' !== wordpressObject && '' !== salesforceObject) { + fieldmapFields(oldKey, newKey, lastRow); + $(this).parent().find('.missing-object').remove(); + } else { + $(this).parent().prepend('
You have to pick a WordPress object and a Salesforce object to add field mapping.
'); + } + return false; }); } @@ -326,7 +334,10 @@ $(document).ready(function () { // for main admin settings - toggleSoapFields(); + toggleSoapFields(); // if there is already a wp or sf object, make sure it has the right fields + + loadFieldOptions('wordpress', $('select#wordpress_object').val()); + loadFieldOptions('salesforce', $('select#salesforce_object').val()); if (jQuery.fn.select2) { $('select#wordpress_object').select2(); @@ -351,4 +362,4 @@ clearSfwpCacheLink(); }); })(jQuery); -//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFkbWluLmpzIl0sIm5hbWVzIjpbIiQiLCJsb2FkRmllbGRPcHRpb25zIiwic3lzdGVtIiwib2JqZWN0X25hbWUiLCJkYXRhIiwiZmllbGRzIiwiZmlyc3RfZmllbGQiLCJmaXJzdCIsInRleHQiLCJwb3N0IiwiYWpheHVybCIsInJlc3BvbnNlIiwiZWFjaCIsImluZGV4IiwidmFsdWUiLCJrZXkiLCJuYW1lIiwibGFiZWwiLCJodG1sIiwidG9nZ2xlU29hcEZpZWxkcyIsImxlbmd0aCIsImlzIiwic2hvdyIsImhpZGUiLCJzYWxlc2ZvcmNlT2JqZWN0RmllbGRzIiwiZGVsYXkiLCJ0aW1lciIsImNhbGxiYWNrIiwibXMiLCJjbGVhclRpbWVvdXQiLCJzZXRUaW1lb3V0Iiwib24iLCJ0aGF0IiwiZGVsYXlUaW1lIiwicmVjb3JkVHlwZXNBbGxvd2VkTWFya3VwIiwicmVjb3JkVHlwZURlZmF1bHRNYXJrdXAiLCJkYXRlTWFya3VwIiwicmVjb3JkVHlwZUluZm9zIiwialF1ZXJ5IiwiZm4iLCJzZWxlY3QyIiwiYWRkRmllbGRNYXBwaW5nUm93IiwiY2xpY2siLCJuZXdLZXkiLCJEYXRlIiwiZ2V0VVRDTWlsbGlzZWNvbmRzIiwibGFzdFJvdyIsImxhc3QiLCJvbGRLZXkiLCJhdHRyIiwiUmVnRXhwIiwiZmllbGRtYXBGaWVsZHMiLCJwYXJlbnQiLCJmaW5kIiwicmVtb3ZlIiwibmV4dFJvdyIsImVuZCIsImNsb25lIiwicmVtb3ZlQ2xhc3MiLCJpIiwiaCIsInJlcGxhY2UiLCJhcHBlbmQiLCJwdXNoQW5kUHVsbE9iamVjdHMiLCJ3b3JkcHJlc3NPYmplY3QiLCJ2YWwiLCJ3b3JkcHJlc3NJZCIsInNhbGVzZm9yY2VJZCIsInN1Y2Nlc3MiLCJ1cGRhdGVTYWxlc2ZvcmNlVXNlclN1bW1hcnkiLCJ3aWR0aCIsImZhZGVJbiIsImZhZGVPdXQiLCJtYXBwaW5nSWQiLCJsYXN0X3N5bmNfbWVzc2FnZSIsImxhc3Rfc3luY19hY3Rpb24iLCJsYXN0X3N5bmNfc3RhdHVzIiwibGFzdF9zeW5jIiwiY2xlYXJTZndwQ2FjaGVMaW5rIiwibWVzc2FnZSIsImRvY3VtZW50IiwidGltZW91dCIsIm5vdCIsInByb3AiLCJyZWFkeSIsImFqYXhTdGFydCIsImFkZENsYXNzIiwiYWpheFN0b3AiXSwibWFwcGluZ3MiOiI7O0FBQUUsV0FBVUEsQ0FBVixFQUFjO0FBRWYsV0FBU0MsZ0JBQVQsQ0FBMkJDLE1BQTNCLEVBQW1DQyxXQUFuQyxFQUFpRDtBQUNoRCxRQUFJQyxJQUFJLEdBQUc7QUFDVixnQkFBVyxTQUFTRixNQUFULEdBQWtCO0FBRG5CLEtBQVg7QUFHQSxRQUFJRyxNQUFNLEdBQUcsRUFBYjtBQUNBLFFBQUlDLFdBQVcsR0FBR04sQ0FBQyxDQUFFLGFBQWFFLE1BQWIsR0FBc0Isc0JBQXhCLENBQUQsQ0FBaURLLEtBQWpELEdBQXlEQyxJQUF6RCxFQUFsQjtBQUNBSCxJQUFBQSxNQUFNLElBQUksc0JBQXNCQyxXQUF0QixHQUFvQyxXQUE5Qzs7QUFDQSxRQUFLLGdCQUFnQkosTUFBckIsRUFBOEI7QUFDN0JFLE1BQUFBLElBQUksQ0FBQyxrQkFBRCxDQUFKLEdBQTJCRCxXQUEzQjtBQUNBLEtBRkQsTUFFTyxJQUFLLGlCQUFpQkQsTUFBdEIsRUFBK0I7QUFDckNFLE1BQUFBLElBQUksQ0FBQyxtQkFBRCxDQUFKLEdBQTRCRCxXQUE1QjtBQUNBLEtBRk0sTUFFQTtBQUNOLGFBQU9FLE1BQVA7QUFDQTs7QUFDREwsSUFBQUEsQ0FBQyxDQUFDUyxJQUFGLENBQVFDLE9BQVIsRUFBaUJOLElBQWpCLEVBQXVCLFVBQVVPLFFBQVYsRUFBcUI7QUFDM0NYLE1BQUFBLENBQUMsQ0FBQ1ksSUFBRixDQUFRRCxRQUFRLENBQUNQLElBQVQsQ0FBY0MsTUFBdEIsRUFBOEIsVUFBVVEsS0FBVixFQUFpQkMsS0FBakIsRUFBeUI7QUFDdEQsWUFBSyxnQkFBZ0JaLE1BQXJCLEVBQThCO0FBQzdCRyxVQUFBQSxNQUFNLElBQUksb0JBQW9CUyxLQUFLLENBQUNDLEdBQTFCLEdBQWdDLElB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QWtWQ3hDLE1BbFZELENBQUYiLCJmaWxlIjoib2JqZWN0LXN5bmMtZm9yLXNhbGVzZm9yY2UtYWRtaW4uanMiLCJzb3VyY2VzQ29udGVudCI6WyIoIGZ1bmN0aW9uKCAkICkge1xuXG5cdGZ1bmN0aW9uIGxvYWRGaWVsZE9wdGlvbnMoIHN5c3RlbSwgb2JqZWN0X25hbWUgKSB7XG5cdFx0dmFyIGRhdGEgPSB7XG5cdFx0XHQnYWN0aW9uJyA6ICdnZXRfJyArIHN5c3RlbSArICdfb2JqZWN0X2ZpZWxkcycsXG5cdFx0fVxuXHRcdHZhciBmaWVsZHMgPSAnJztcblx0XHR2YXIgZmlyc3RfZmllbGQgPSAkKCAnLmNvbHVtbi0nICsgc3lzdGVtICsgJ19maWVsZCBzZWxlY3Qgb3B0aW9uJykuZmlyc3QoKS50ZXh0KCk7XG5cdFx0ZmllbGRzICs9ICc8b3B0aW9uIHZhbHVlPVwiXCI+JyArIGZpcnN0X2ZpZWxkICsgJzwvb3B0aW9uPic7XG5cdFx0aWYgKCAnd29yZHByZXNzJyA9PT0gc3lzdGVtICkge1xuXHRcdFx0ZGF0YVsnd29yZHByZXNzX29iamVjdCddID0gb2JqZWN0X25hbWU7XG5cdFx0fSBlbHNlIGlmICggJ3NhbGVzZm9yY2UnID09PSBzeXN0ZW0gKSB7XG5cdFx0XHRkYXRhWydzYWxlc2ZvcmNlX29iamVjdCddID0gb2JqZWN0X25hbWU7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiBmaWVsZHM7XG5cdFx0fVxuXHRcdCQucG9zdCggYWpheHVybCwgZGF0YSwgZnVuY3Rpb24oIHJlc3BvbnNlICkge1xuXHRcdFx0JC5lYWNoKCByZXNwb25zZS5kYXRhLmZpZWxkcywgZnVuY3Rpb24oIGluZGV4LCB2YWx1ZSApIHtcblx0XHRcdFx0aWYgKCAnd29yZHByZXNzJyA9PT0gc3lzdGVtICkge1xuXHRcdFx0XHRcdGZpZWxkcyArPSAnPG9wdGlvbiB2YWx1ZT1cIicgKyB2YWx1ZS5rZXkgKyAnXCI+JyArIHZhbHVlLmtleSArICc8L29wdGlvbj4nO1xuXHRcdFx0XHR9IGVsc2UgaWYgKCAnc2FsZXNmb3JjZScgPT09IHN5c3RlbSApIHtcblx0XHRcdFx0XHRmaWVsZHMgKz0gJzxvcHRpb24gdmFsdWU9XCInICsgdmFsdWUubmFtZSArICdcIj4nICsgdmFsdWUubGFiZWwgKyAnPC9vcHRpb24+Jztcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0XHQkKCAnLmNvbHVtbi0nICsgc3lzdGVtICsgJ19maWVsZCBzZWxlY3QnICkuaHRtbCggZmllbGRzICk7XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogRG9uJ3Qgc2hvdyB0aGUgV1NETCBmaWxlIGZpZWxkIHVubGVzcyBTT0FQIGlzIGVuYWJsZWRcblx0ICovXG5cdGZ1bmN0aW9uIHRvZ2dsZVNvYXBGaWVsZHMoKSB7XG5cdFx0aWYgKCAwIDwgJCggJy5vYmplY3Qtc3luYy1mb3Itc2FsZXNmb3JjZS1lbmFibGUtc29hcCcgKS5sZW5ndGggKSB7XG5cdFx0XHRpZiAoICQoICcub2JqZWN0LXN5bmMtZm9yLXNhbGVzZm9yY2UtZW5hYmxlLXNvYXAgaW5wdXQnICkuaXMoICc6Y2hlY2tlZCcgKSApIHtcblx0XHRcdFx0JCggJy5vYmplY3Qtc3luYy1mb3Itc2FsZXNmb3JjZS1zb2FwLXdzZGwtcGF0aCcgKS5zaG93KCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHQkKCAnLm9iamVjdC1zeW5jLWZvci1zYWxlc2ZvcmNlLXNvYXAtd3NkbC1wYXRoJyApLmhpZGUoKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogR2VuZXJhdGVzIHRoZSBTYWxlc2ZvcmNlIG9iamVjdCBmaWVsZHMgYmFzZWQgb24gdGhlIGRyb3Bkb3duIGFjdGl2aXR5IGFuZCBBUEkgcmVzdWx0cy5cblx0ICovXG5cdGZ1bmN0aW9uIHNhbGVzZm9yY2VPYmplY3RGaWVsZHMoKSB7XG5cblx0XHR2YXIgZGVsYXkgPSAoIGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIHRpbWVyID0gMDtcblx0XHRcdHJldHVybiBmdW5jdGlvbiggY2FsbGJhY2ssIG1zICkge1xuXHRcdFx0XHRjbGVhclRpbWVvdXQgKCB0aW1lciApO1xuXHRcdFx0XHR0aW1lciA9IHNldFRpbWVvdXQoIGNhbGxiYWNrLCBtcyApO1xuXHRcdFx0fTtcblx0XHR9KCkgKTtcblxuXHRcdGlmICggMCA9PT0gJCggJy5zYWxlc2ZvcmNlX3JlY29yZF90eXBlc19hbGxvd2VkID4gKicgKS5sZW5ndGggKSB7XG5cdFx0XHQkKCAnLnNhbGVzZm9yY2VfcmVjb3JkX3R5cGVzX2FsbG93ZWQnICkuaGlkZSgpO1xuXHRcdH1cblxuXHRcdGlmICggMCA9PT0gJCggJy5zYWxlc2ZvcmNlX3JlY29yZF90eXBlX2RlZmF1bHQgPiAqJyApLmxlbmd0aCApIHtcblx0XHRcdCQoICcuc2FsZXNmb3JjZV9yZWNvcmRfdHlwZV9kZWZhdWx0JyApLmhpZGUoKTtcblx0XHR9XG5cdFx0aWYgKCAwID09PSAkKCAnLnB1bGxfdHJpZ2dlcl9maWVsZCA+IConICkubGVuZ3RoICkge1xuXHRcdFx0JCggJy5wdWxsX3RyaWdnZXJfZmllbGQnICkuaGlkZSgpO1xuXHRcdH1cblxuXHRcdCQoICcjc2FsZXNmb3JjZV9vYmplY3QnICkub24oICdjaGFuZ2UnLCBmdW5jdGlvbigpIHtcblx0XHRcdHZhciB0aGF0ID0gdGhpcztcblx0XHRcdHZhciBkZWxheVRpbWUgPSAxMDAwO1xuXHRcdFx0ZGVsYXkoIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHR2YXIgZGF0YSA9IHtcblx0XHRcdFx0XHQnYWN0aW9uJyA6ICdnZXRfc2FsZXNmb3JjZV9vYmplY3RfZGVzY3JpcHRpb24nLFxuXHRcdFx0XHRcdCdpbmNsdWRlJyA6IFsgJ2ZpZWxkcycsICdyZWNvcmRUeXBlSW5mb3MnIF0sXG5cdFx0XHRcdFx0J2ZpZWxkX3R5cGUnIDogJ2RhdGV0aW1lJyxcblx0XHRcdFx0XHQnc2FsZXNmb3JjZV9vYmplY3QnIDogdGhhdC52YWx1ZVxuXHRcdFx0XHR9XG5cdFx0XHRcdCQucG9zdCggYWpheHVybCwgZGF0YSwgZnVuY3Rpb24oIHJlc3BvbnNlICkge1xuXG5cdFx0XHRcdFx0dmFyIHJlY29yZFR5cGVzQWxsb3dlZE1hcmt1cCA9ICcnLCByZWNvcmRUeXBlRGVmYXVsdE1hcmt1cCA9ICcnLCBkYXRlTWFya3VwID0gJyc7XG5cblx0XHRcdFx0XHRpZiAoIDAgPCAkKCByZXNwb25zZS5kYXRhLnJlY29yZFR5cGVJbmZvcyApLmxlbmd0aCApIHtcblx0XHRcdFx0XHRcdHJlY29yZFR5cGVzQWxsb3dlZE1hcmt1cCArPSAnPGxhYmVsIGZvcj1cInNhbGVzZm9yY2VfcmVjb3JkX3R5cGVzX2FsbG93ZWRcIj5BbGxvd2VkIFJlY29yZCBUeXBlczo8L2xhYmVsPjxkaXYgY2xhc3M9XCJjaGVja2JveGVzXCI+Jztcblx0XHRcdFx0XHRcdCQuZWFjaCggcmVzcG9uc2UuZGF0YS5yZWNvcmRUeXBlSW5mb3MsIGZ1bmN0aW9uKCBpbmRleCwgdmFsdWUgKSB7XG5cdFx0XHRcdFx0XHRcdHJlY29yZFR5cGVzQWxsb3dlZE1hcmt1cCArPSAnPGxhYmVsPjxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBjbGFzcz1cImZvcm0tY2hlY2tib3hcIiB2YWx1ZT1cIicgKyBpbmRleCArICdcIiBuYW1lPVwic2FsZXNmb3JjZV9yZWNvcmRfdHlwZXNfYWxsb3dlZFsnICsgaW5kZXggKyAnXVwiIGlkPVwic2FsZXNmb3JjZV9yZWNvcmRfdHlwZXNfYWxsb3dlZC0nICsgaW5kZXggKyAnXCI+ICcgKyB2YWx1ZSArICc8L2xhYmVsPic7XG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdHJlY29yZFR5cGVzQWxsb3dlZE1hcmt1cCArPSAnPC9kaXY+JztcblxuXG5cdFx0XHRcdFx0XHRyZWNvcmRUeXBlRGVmYXVsdE1hcmt1cCArPSAnPGxhYmVsIGZvcj1cInNhbGVzZm9yY2VfcmVjb3JkX3R5cGVfZGVmYXVsdFwiPkRlZmF1bHQgUmVjb3JkIFR5cGU6PC9sYWJlbD4nO1xuXHRcdFx0XHRcdFx0cmVjb3JkVHlwZURlZmF1bHRNYXJrdXAgKz0gJzxzZWxlY3QgbmFtZT1cInNhbGVzZm9yY2VfcmVjb3JkX3R5cGVfZGVmYXVsdFwiIGlkPVwic2FsZXNmb3JjZV9yZWNvcmRfdHlwZV9kZWZhdWx0XCI+PG9wdGlvbiB2YWx1ZT1cIlwiPi0gU2VsZWN0IHJlY29yZCB0eXBlIC08L29wdGlvbj4nO1xuXHRcdFx0XHRcdFx0JC5lYWNoKCByZXNwb25zZS5kYXRhLnJlY29yZFR5cGVJbmZvcywgZnVuY3Rpb24oIGluZGV4LCB2YWx1ZSApIHtcblx0XHRcdFx0XHRcdFx0cmVjb3JkVHlwZURlZmF1bHRNYXJrdXAgKz0gJzxvcHRpb24gdmFsdWU9XCInICsgaW5kZXggKyAnXCI+JyArIHZhbHVlICsgJzwvb3B0aW9uPic7XG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQkKCAnLnNhbGVzZm9yY2VfcmVjb3JkX3R5cGVzX2FsbG93ZWQnICkuaHRtbCggcmVjb3JkVHlwZXNBbGxvd2VkTWFya3VwICk7XG5cdFx0XHRcdFx0JCggJy5zYWxlc2ZvcmNlX3JlY29yZF90eXBlX2RlZmF1bHQnICkuaHRtbCggcmVjb3JkVHlwZURlZmF1bHRNYXJrdXAgKTtcblxuXHRcdFx0XHRcdGlmICggMCA8ICQoIHJlc3BvbnNlLmRhdGEuZmllbGRzICkubGVuZ3RoICkge1xuXHRcdFx0XHRcdFx0ZGF0ZU1hcmt1cCArPSAnPGxhYmVsIGZvcj1cInB1bGxfdHJpZ2dlcl9maWVsZFwiPkRhdGUgZmllbGQgdG8gdHJpZ2dlciBwdWxsOjwvbGFiZWw+Jztcblx0XHRcdFx0XHRcdGRhdGVNYXJrdXAgKz0gJzxzZWxlY3QgbmFtZT1cInB1bGxfdHJpZ2dlcl9maWVsZFwiIGlkPVwicHVsbF90cmlnZ2VyX2ZpZWxkXCI+PG9wdGlvbiB2YWx1ZT1cIlwiPi0gU2VsZWN0IGRhdGUgZmllbGQgLTwvb3B0aW9uPidcblx0XHRcdFx0XHRcdCQuZWFjaCggcmVzcG9uc2UuZGF0YS5maWVsZHMsIGZ1bmN0aW9uKCBpbmRleCwgdmFsdWUgKSB7XG5cdFx0XHRcdFx0XHRcdGRhdGVNYXJrdXAgKz0gJzxvcHRpb24gdmFsdWU9XCInICsgdmFsdWUubmFtZSArICdcIj4nICsgdmFsdWUubGFiZWwgKyAnPC9vcHRpb24+Jztcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0ZGF0ZU1hcmt1cCArPSAnPC9zZWxlY3Q+Jztcblx0XHRcdFx0XHRcdGRhdGVNYXJrdXAgKz0gJzxwIGNsYXNzPVwiZGVzY3JpcHRpb25cIj5UaGVzZSBhcmUgZGF0ZSBmaWVsZHMgdGhhdCBjYW4gY2F1c2UgV29yZFByZXNzIHRvIHB1bGwgYW4gdXBkYXRlIGZyb20gU2FsZXNmb3JjZSwgYWNjb3JkaW5nIHRvIHRoZSA8Y29kZT5zYWxlc2ZvcmNlX3B1bGw8L2NvZGU+IGNsYXNzLjwvcD4nXG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0JCggJy5wdWxsX3RyaWdnZXJfZmllbGQnICkuaHRtbCggZGF0ZU1hcmt1cCApO1xuXG5cdFx0XHRcdFx0aWYgKCAnJyAhPT0gcmVjb3JkVHlwZXNBbGxvd2VkTWFya3VwICkge1xuXHRcdFx0XHRcdFx0JCggJy5zYWxlc2ZvcmNlX3JlY29yZF90eXBlc19hbGxvd2VkJyApLnNob3coKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0JCggJy5zYWxlc2ZvcmNlX3JlY29yZF90eXBlc19hbGxvd2VkJyApLmhpZGUoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0aWYgKCAnJyAhPT0gcmVjb3JkVHlwZURlZmF1bHRNYXJrdXAgKSB7XG5cdFx0XHRcdFx0XHQkKCAnLnNhbGVzZm9yY2VfcmVjb3JkX3R5cGVfZGVmYXVsdCcgKS5zaG93KCk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdCQoICcuc2FsZXNmb3JjZV9yZWNvcmRfdHlwZV9kZWZhdWx0JyApLmhpZGUoKTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRpZiAoICcnICE9PSBkYXRlTWFya3VwICkge1xuXHRcdFx0XHRcdFx0JCggJy5wdWxsX3RyaWdnZXJfZmllbGQnICkuc2hvdygpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHQkKCAnLnB1bGxfdHJpZ2dlcl9maWVsZCcgKS5oaWRlKCk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aWYgKCBqUXVlcnkuZm4uc2VsZWN0MiApIHtcblx0XHRcdFx0XHRcdCQoICdzZWxlY3Qjc2FsZXNmb3JjZV9yZWNvcmRfdHlwZV9kZWZhdWx0JyApLnNlbGVjdDIoKTtcblx0XHRcdFx0XHRcdCQoICdzZWxlY3QjcHVsbF90cmlnZ2VyX2ZpZWxkJyApLnNlbGVjdDIoKTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0fSk7XG5cdFx0XHR9LCBkZWxheVRpbWUgKTtcblx0XHR9KTtcblx0fVxuXHQvKipcblx0ICogRHVwbGljYXRlcyB0aGUgZmllbGRzIGZvciBhIG5ldyByb3cgaW4gdGhlIGZpZWxkbWFwIG9wdGlvbnMgc2NyZWVuLlxuXHQgKi9cblx0IGZ1bmN0aW9uIGFkZEZpZWxkTWFwcGluZ1JvdygpIHtcblx0XHQkKCAnI2FkZC1maWVsZC1tYXBwaW5nJyApLmNsaWNrKCBmdW5jdGlvbigpIHtcblx0XHRcdHZhciBuZXdLZXkgPSBuZXcgRGF0ZSgpLmdldFVUQ01pbGxpc2Vjb25kcygpO1xuXHRcdFx0dmFyIGxhc3RSb3cgPSAkKCAndGFibGUuZmllbGRzIHRib2R5IHRyJyApLmxhc3QoKTtcblx0XHRcdHZhciBvbGRLZXkgPSBsYXN0Um93LmF0dHIoICdkYXRhLWtleScgKTtcblx0XHRcdG9sZEtleSA9IG5ldyBSZWdFeHAoIG9sZEtleSwgJ2cnICk7XG5cdFx0XHQkKCB0aGlzICkudGV4dCggJ0FkZCBhbm90aGVyIGZpZWxkIG1hcHBpbmcnICk7XG5cdFx0XHRmaWVsZG1hcEZpZWxkcyggb2xkS2V5LCBuZXdLZXksIGxhc3RSb3cgKTtcblx0XHRcdCQoIHRoaXMgKS5wYXJlbnQoKS5maW5kKCAnLm1pc3Npbmctb2JqZWN0JyApLnJlbW92ZSgpO1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH0pO1xuXHR9XG5cdC8qKlxuXHQgKiBHZXRzIHRoZSBXb3JkUHJlc3MgYW5kIFNhbGVzZm9yY2UgZmllbGQgcmVzdWx0cyB2aWEgYW4gQWpheCBjYWxsXG5cdCAqIEBwYXJhbSBzdHJpbmcgb2xkS2V5IHRoZSBkYXRhLWtleSBhdHRyaWJ1dGUgb2YgdGhlIHNldCB0aGF0IGlzIGJlaW5nIGNsb25lZFxuXHQgKiBAcGFyYW0gc3RyaW5nIG5ld0tleSB0aGUgZGF0YS1rZXkgYXR0cmlidXRlIGZvciB0aGUgb25lIHdlJ3JlIGFwcGVuZGluZ1xuXHQgKiBAcGFyYW0gb2JqZWN0IGxhc3RSb3cgdGhlIGxhc3Qgc2V0IG9mIHRoZSBmaWVsZG1hcFxuXHQgKi9cblx0ZnVuY3Rpb24gZmllbGRtYXBGaWVsZHMoIG9sZEtleSwgbmV3S2V5LCBsYXN0Um93ICkge1xuXHRcdHZhciBuZXh0Um93ID0gJyc7XG4gICAgICAgIGlmICggalF1ZXJ5LmZuLnNlbGVjdDIgKSB7XG4gICAgICAgIFx0bmV4dFJvdyA9IGxhc3RSb3cuZmluZCggJ3NlbGVjdCcgKVxuXHQgICAgICAgICAgICAuc2VsZWN0MiggJ2Rlc3Ryb3knIClcblx0ICAgICAgICAgICAgLmVuZCgpXG5cdCAgICAgICAgICAgIC5jbG9uZSggdHJ1ZSApLnJlbW92ZUNsYXNzKCAnZmllbGRtYXAtdGVtcGxhdGUnICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgIFx0bmV4dFJvdyA9IGxhc3RSb3cuY2xvbmUoIHRydWUgKTtcbiAgICAgICAgfVxuXHRcdCQoIG5leHRSb3cgKS5hdHRyKCAnZGF0YS1rZXknLCBuZXdLZXkgKTtcblx0XHQkKCBuZXh0Um93ICkuZWFjaChmdW5jdGlvbigpIHtcblx0XHRcdCQoIHRoaXMgKS5odG1sKCBmdW5jdGlvbiggaSwgaCApIHtcblx0XHRcdFx0cmV0dXJuIGgucmVwbGFjZSggb2xkS2V5LCBuZXdLZXkgKTtcblx0XHRcdH0pO1xuXHRcdH0pO1xuXHRcdCQoICd0YWJsZS5maWVsZHMgdGJvZHknICkuYXBwZW5kKCBuZXh0Um93ICk7XG5cdFx0aWYgKCBqUXVlcnkuZm4uc2VsZWN0MiApIHtcblx0XHRcdGxhc3RSb3cuZmluZCggJ3NlbGVjdCcgKS5zZWxlY3QyKCk7XG5cdFx0XHRuZXh0Um93LmZpbmQoICdzZWxlY3QnICkuc2VsZWN0MigpO1xuXHRcdH1cblx0fVxuXHQvKipcblx0ICogSGFuZGxlIG1hbnVhbCBwdXNoIGFuZCBwdWxsIG9mIG9iamVjdHNcblx0ICovXG5cdGZ1bmN0aW9uIHB1c2hBbmRQdWxsT2JqZWN0cygpIHtcblx0XHQkKCAnLnNhbGVzZm9yY2VfdXNlcl9hamF4X21lc3NhZ2UnICkuaGlkZSgpO1xuXHRcdGlmICggMCA8ICQoICcjd29yZHByZXNzX29iamVjdF9hamF4JyApLmxlbmd0aCApIHtcblx0XHRcdCQoICcucHVzaF90b19zYWxlc2ZvcmNlX2J1dHRvbicgKS5vbiggJ2NsaWNrJywgZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHZhciB3b3JkcHJlc3NPYmplY3QgPSAkKCAnI3dvcmRwcmVzc19vYmplY3RfYWpheCcgKS52YWwoKTtcblx0XHRcdFx0dmFyIHdvcmRwcmVzc0lkID0gJCggJyN3b3JkcHJlc3NfaWRfYWpheCcgKS52YWwoKTtcblx0XHRcdFx0dmFyIHNhbGVzZm9yY2VJZCA9ICQoICcjc2FsZXNmb3JjZV9pZF9hamF4JyApLnZhbCgpO1xuXHRcdFx0XHR2YXIgZGF0YSA9IHtcblx0XHRcdFx0XHQnYWN0aW9uJyA6ICdwdXNoX3RvX3NhbGVzZm9yY2UnLFxuXHRcdFx0XHRcdCd3b3JkcHJlc3Nfb2JqZWN0JyA6IHdvcmRwcmVzc09iamVjdCxcblx0XHRcdFx0XHQnd29yZHByZXNzX2lkJyA6IHdvcmRwcmVzc0lkLFxuXHRcdFx0XHRcdCdzYWxlc2ZvcmNlX2lkJyA6IHNhbGVzZm9yY2VJZFxuXHRcdFx0XHR9XG5cdFx0XHRcdCQucG9zdCggYWpheHVybCwgZGF0YSwgZnVuY3Rpb24oIHJlc3BvbnNlICkge1xuXHRcdFx0XHRcdGlmICggdHJ1ZSA9PT0gcmVzcG9uc2Uuc3VjY2VzcyApIHtcblx0XHRcdFx0XHRcdHVwZGF0ZVNhbGVzZm9yY2VVc2VyU3VtbWFyeSgpO1xuXHRcdFx0XHRcdFx0JCggJy5zYWxlc2ZvcmNlX3VzZXJfYWpheF9tZXNzYWdlJyApLndpZHRoKCAkKCAnLm1hcHBlZC1zYWxlc2ZvcmNlLXVzZXInICkud2lkdGgoKSAtIDI3ICk7XG5cdFx0XHRcdFx0XHQkKCAnLnNhbGVzZm9yY2VfdXNlcl9hamF4X21lc3NhZ2UnICkuaHRtbCggJzxwPlRoaXMgb2JqZWN0IGhhcyBiZWVuIHB1c2hlZCB0byBTYWxlc2ZvcmNlLjwvcD4nICkuZmFkZUluKCkuZGVsYXkoIDQwMDAgKS5mYWRlT3V0KCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdCQoICcucHVsbF9mcm9tX3NhbGVzZm9yY2VfYnV0dG9uJyApLm9uKCAnY2xpY2snLCBmdW5jdGlvbigpIHtcblx0XHRcdHZhciBzYWxlc2ZvcmNlSWQgPSAkKCAnI3NhbGVzZm9yY2VfaWRfYWpheCcgKS52YWwoKTtcblx0XHRcdHZhciB3b3JkcHJlc3NPYmplY3QgPSAkKCAnI3dvcmRwcmVzc19vYmplY3RfYWpheCcgKS52YWwoKTtcblx0XHRcdHZhciBkYXRhID0ge1xuXHRcdFx0XHQnYWN0aW9uJyA6ICdwdWxsX2Zyb21fc2FsZXNmb3JjZScsXG5cdFx0XHRcdCdzYWxlc2ZvcmNlX2lkJyA6IHNhbGVzZm9yY2VJZCxcblx0XHRcdFx0J3dvcmRwcmVzc19vYmplY3QnIDogd29yZHByZXNzT2JqZWN0XG5cdFx0XHR9XG5cdFx0XHQkLnBvc3QoIGFqYXh1cmwsIGRhdGEsIGZ1bmN0aW9uKCByZXNwb25zZSApIHtcblx0XHRcdFx0aWYgKCB0cnVlID09PSByZXNwb25zZS5zdWNjZXNzICkge1xuXHRcdFx0XHRcdHVwZGF0ZVNhbGVzZm9yY2VVc2VyU3VtbWFyeSgpO1xuXHRcdFx0XHRcdCQoICcuc2FsZXNmb3JjZV91c2VyX2FqYXhfbWVzc2FnZScgKS53aWR0aCggJCggJy5tYXBwZWQtc2FsZXNmb3JjZS11c2VyJyApLndpZHRoKCkgLSAyNyApO1xuXHRcdFx0XHRcdCQoICcuc2FsZXNmb3JjZV91c2VyX2FqYXhfbWVzc2FnZScgKS5odG1sKCAnPHA+VGhpcyBvYmplY3QgaGFzIGJlZW4gcHVsbGVkIGZyb20gU2FsZXNmb3JjZS48L3A+JyApLmZhZGVJbigpLmRlbGF5KCA0MDAwICkuZmFkZU91dCgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9KTtcblx0fVxuXHQvKipcblx0ICogVXBkYXRlcyB0aGUgdXNlciBwcm9maWxlIHN1bW1hcnkgb2YgU2FsZXNmb3JjZSBpbmZvLlxuXHQgKi9cblx0ZnVuY3Rpb24gdXBkYXRlU2FsZXNmb3JjZVVzZXJTdW1tYXJ5KCkge1xuXHRcdHZhciBtYXBwaW5nSWQgPSAkKCAnI21hcHBpbmdfaWRfYWpheCcgKS52YWwoKTtcblx0XHR2YXIgZGF0YSA9IHtcblx0XHRcdCdhY3Rpb24nIDogJ3JlZnJlc2hfbWFwcGVkX2RhdGEnLFxuXHRcdFx0J21hcHBpbmdfaWQnIDogbWFwcGluZ0lkXG5cdFx0fVxuXHRcdCQucG9zdCggYWpheHVybCwgZGF0YSwgZnVuY3Rpb24oIHJlc3BvbnNlICkge1xuXHRcdFx0aWYgKCB0cnVlID09PSByZXNwb25zZS5zdWNjZXNzICkge1xuXHRcdFx0XHQkKCAndGQubGFzdF9zeW5jX21lc3NhZ2UnICkudGV4dCggcmVzcG9uc2UuZGF0YS5sYXN0X3N5bmNfbWVzc2FnZSApO1xuXHRcdFx0XHQkKCAndGQubGFzdF9zeW5jX2FjdGlvbicgKS50ZXh0KCByZXNwb25zZS5kYXRhLmxhc3Rfc3luY19hY3Rpb24gKTtcblx0XHRcdFx0JCggJ3RkLmxhc3Rfc3luY19zdGF0dXMnICkudGV4dCggcmVzcG9uc2UuZGF0YS5sYXN0X3N5bmNfc3RhdHVzICk7XG5cdFx0XHRcdCQoICd0ZC5sYXN0X3N5bmMnICkudGV4dCggcmVzcG9uc2UuZGF0YS5sYXN0X3N5bmMgKTtcblx0XHRcdFx0aWYgKCAnMScgPT09IHJlc3BvbnNlLmRhdGEubGFzdF9zeW5jX3N0YXR1cyApIHtcblx0XHRcdFx0XHQkKCAndGQubGFzdF9zeW5jX3N0YXR1cycgKS50ZXh0KCAnc3VjY2VzcycgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cdC8qKlxuXHQgKiBDbGVhciB0aGUgcGx1Z2luIGNhY2hlIHZpYSBBamF4IHJlcXVlc3QuXG5cdCAqL1xuXHRmdW5jdGlvbiBjbGVhclNmd3BDYWNoZUxpbmsoKSB7XG5cdFx0JCggJyNjbGVhci1zZndwLWNhY2hlJyApLmNsaWNrKCBmdW5jdGlvbigpIHtcblx0XHRcdHZhciBkYXRhID0ge1xuXHRcdFx0XHQnYWN0aW9uJyA6ICdjbGVhcl9zZndwX2NhY2hlJ1xuXHRcdFx0fVxuXHRcdFx0dmFyIHRoYXQgPSAkKCB0aGlzICk7XG5cdFx0XHQkLnBvc3QoIGFqYXh1cmwsIGRhdGEsIGZ1bmN0aW9uKCByZXNwb25zZSApIHtcblx0XHRcdFx0aWYgKCB0cnVlID09PSByZXNwb25zZS5zdWNjZXNzICYmIHRydWUgPT09IHJlc3BvbnNlLmRhdGEuc3VjY2VzcyApIHtcblx0XHRcdFx0XHR0aGF0LnBhcmVudCgpLmh0bWwoIHJlc3BvbnNlLmRhdGEubWVzc2FnZSApLmZhZGVJbigpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9KTtcblx0fVxuXG5cdC8vIGxvYWQgYXZhaWxhYmxlIG9wdGlvbnMgaWYgdGhlIHdvcmRwcmVzcyBvYmplY3QgY2hhbmdlc1xuXHQkKCBkb2N1bWVudCApLm9uKCAnY2hhbmdlJywgJ3NlbGVjdCN3b3JkcHJlc3Nfb2JqZWN0JywgZnVuY3Rpb24oKSB7XG5cdFx0dmFyIHRpbWVvdXQ7XG5cdFx0bG9hZEZpZWxkT3B0aW9ucyggJ3dvcmRwcmVzcycsICQoIHRoaXMgKS52YWwoKSApO1xuXHRcdGNsZWFyVGltZW91dCggdGltZW91dCApO1xuXHRcdHRpbWVvdXQgPSBzZXRUaW1lb3V0KCBmdW5jdGlvbigpIHtcblx0XHRcdCQoICd0YWJsZS5maWVsZHMgdGJvZHkgdHInICkuZmFkZU91dCgpO1xuXHRcdFx0JCggJ3RhYmxlLmZpZWxkcyB0Ym9keSB0cicgKS5ub3QoICc6bGFzdCcgKS5yZW1vdmUoKTtcblx0XHR9LCAxMDAwICk7XG5cdH0pO1xuXG5cdC8vIGxvYWQgYXZhaWxhYmxlIG9wdGlvbnMgaWYgdGhlIHNhbGVzZm9yY2Ugb2JqZWN0IGNoYW5nZXNcblx0JCggZG9jdW1lbnQgKS5vbiggJ2NoYW5nZScsICdzZWxlY3Qjc2FsZXNmb3JjZV9vYmplY3QnLCBmdW5jdGlvbigpIHtcblx0XHR2YXIgdGltZW91dDtcblx0XHRsb2FkRmllbGRPcHRpb25zKCAnc2FsZXNmb3JjZScsICQoIHRoaXMgKS52YWwoKSApO1xuXHRcdGNsZWFyVGltZW91dCggdGltZW91dCApO1xuXHRcdHRpbWVvdXQgPSBzZXRUaW1lb3V0KCBmdW5jdGlvbigpIHtcblx0XHRcdCQoICd0YWJsZS5maWVsZHMgdGJvZHkgdHInICkuZmFkZU91dCgpO1xuXHRcdFx0JCggJ3RhYmxlLmZpZWxkcyB0Ym9keSB0cicgKS5ub3QoICc6bGFzdCcgKS5yZW1vdmUoKTtcblx0XHR9LCAxMDAwICk7XG5cdH0pO1xuXG5cdC8vIHNob3cgd3NkbCBmaWVsZCBpZiBzb2FwIGlzIGVuYWJsZWRcblx0JCggZG9jdW1lbnQgKS5vbiggJ2NoYW5nZScsICcub2JqZWN0LXN5bmMtZm9yLXNhbGVzZm9yY2UtZW5hYmxlLXNvYXAgaW5wdXQnLCBmdW5jdGlvbigpIHtcblx0XHR0b2dnbGVTb2FwRmllbGRzKCk7XG5cdH0pO1xuXG5cdC8qKlxuXHQgKiBBcyB0aGUgRHJ1cGFsIHBsdWdpbiBkb2VzLCB3ZSBvbmx5IGFsbG93IG9uZSBmaWVsZCB0byBiZSBhIHByZW1hdGNoXG5cdCAqL1xuXHQkKCBkb2N1bWVudCApLm9uKCAnY2xpY2snLCAnLmNvbHVtbi1pc19wcmVtYXRjaCBpbnB1dCcsIGZ1bmN0aW9uKCkge1xuXHRcdCQoICcuY29sdW1uLWlzX3ByZW1hdGNoIGlucHV0JyApLm5vdCggdGhpcyApLnByb3AoICdjaGVja2VkJywgZmFsc2UgKTtcblx0fSk7XG5cdC8qKlxuXHQgKiBBcyB0aGUgRHJ1cGFsIHBsdWdpbiBkb2VzLCB3ZSBvbmx5IGFsbG93IG9uZSBmaWVsZCB0byBiZSBhIGtleVxuXHQgKi9cblx0JCggZG9jdW1lbnQgKS5vbiggJ2NsaWNrJywgJy5jb2x1bW4taXNfa2V5IGlucHV0JywgZnVuY3Rpb24oKSB7XG5cdFx0JCggJy5jb2x1bW4taXNfa2V5IGlucHV0JyApLm5vdCggdGhpcyApLnByb3AoICdjaGVja2VkJywgZmFsc2UgKTtcblx0fSk7XG5cdC8qKlxuXHQgKiBXaGVuIHRoZSBwbHVnaW4gbG9hZHMsIGluaXRpYWxpemUgb3IgZW5hYmxlIHRoaW5nczpcblx0ICogU2VsZWN0MiBvbiBzZWxlY3QgZmllbGRzXG5cdCAqIENsZWFyIGZpZWxkcyB3aGVuIHRoZSB0YXJnZXRlZCBXb3JkUHJlc3Mgb3IgU2FsZXNmb3JjZSBvYmplY3QgdHlwZSBjaGFuZ2VzXG5cdCAqIEFkZCBhIHNwaW5uZXIgZm9yIEFqYXggcmVxdWVzdHNcblx0ICogTWFuYWdlIHRoZSBkaXNwbGF5IGZvciBTYWxlc2ZvcmNlIG9iamVjdCBmaWVsZHMgYmFzZWQgb24gQVBJIHJlcG9uc2Vcblx0ICogTWFudWFsIHB1c2ggYW5kIHB1bGxcblx0ICogQ2xlYXJpbmcgdGhlIGNhY2hlXG5cdCAqL1xuXHQkKCBkb2N1bWVudCApLnJlYWR5KCBmdW5jdGlvbigpIHtcblxuXHRcdC8vIGZvciBtYWluIGFkbWluIHNldHRpbmdzXG5cdFx0dG9nZ2xlU29hcEZpZWxkcygpO1xuXG5cdFx0aWYgKCBqUXVlcnkuZm4uc2VsZWN0MiApIHtcblx0XHRcdCQoICdzZWxlY3Qjd29yZHByZXNzX29iamVjdCcgKS5zZWxlY3QyKCk7XG5cdFx0XHQkKCAnc2VsZWN0I3NhbGVzZm9yY2Vfb2JqZWN0JyApLnNlbGVjdDIoKTtcblx0XHRcdCQoICdzZWxlY3Qjc2FsZXNmb3JjZV9yZWNvcmRfdHlwZV9kZWZhdWx0JyApLnNlbGVjdDIoKTtcblx0XHRcdCQoICdzZWxlY3QjcHVsbF90cmlnZ2VyX2ZpZWxkJyApLnNlbGVjdDIoKTtcblx0XHRcdCQoICcuY29sdW1uLXdvcmRwcmVzc19maWVsZCBzZWxlY3QnICkuc2VsZWN0MigpO1xuXHRcdFx0JCggJy5jb2x1bW4tc2FsZXNmb3JjZV9maWVsZCBzZWxlY3QnICkuc2VsZWN0MigpO1xuXHRcdH1cblxuXHRcdC8vIHRvZG86IG5lZWQgdG8gZml4IHRoaXMgc28gaXQgZG9lc24ndCBydW4gYWxsIHRoZSBzcGlubmVycyBhdCB0aGUgc2FtZSB0aW1lIHdoZW4gdGhlcmUgYXJlIG11bHRpcGxlcyBvbiB0aGUgc2FtZSBwYWdlXG5cdFx0JCggZG9jdW1lbnQgKS5hamF4U3RhcnQoIGZ1bmN0aW9uKCkge1xuXHRcdFx0JCggJy5zcGlubmVyJyApLmFkZENsYXNzKCAnaXMtYWN0aXZlJyApO1xuXHRcdH0pLmFqYXhTdG9wKCBmdW5jdGlvbigpIHtcblx0XHRcdCQoICcuc3Bpbm5lcicgKS5yZW1vdmVDbGFzcyggJ2lzLWFjdGl2ZScgKTtcblx0XHR9KTtcblx0XHRzYWxlc2ZvcmNlT2JqZWN0RmllbGRzKCk7XG5cdFx0YWRkRmllbGRNYXBwaW5nUm93KCk7XG5cblx0XHQvLyBmb3IgcHVzaC9wdWxsIG1ldGhvZHMgcnVubmluZyB2aWEgYWpheFxuXHRcdHB1c2hBbmRQdWxsT2JqZWN0cygpO1xuXG5cdFx0Ly8gZm9yIGNsZWFyaW5nIHRoZSBwbHVnaW4gY2FjaGVcblx0XHRjbGVhclNmd3BDYWNoZUxpbmsoKTtcblx0fSk7XG59KCBqUXVlcnkgKSApO1xuIl19 +//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFkbWluLmpzIl0sIm5hbWVzIjpbIiQiLCJsb2FkRmllbGRPcHRpb25zIiwic3lzdGVtIiwib2JqZWN0X25hbWUiLCJkYXRhIiwiZmllbGRzIiwiZmlyc3RfZmllbGQiLCJmaXJzdCIsInRleHQiLCJwb3N0IiwiYWpheHVybCIsInJlc3BvbnNlIiwiZWFjaCIsImluZGV4IiwidmFsdWUiLCJrZXkiLCJuYW1lIiwibGFiZWwiLCJodG1sIiwidG9nZ2xlU29hcEZpZWxkcyIsImxlbmd0aCIsImlzIiwic2hvdyIsImhpZGUiLCJzYWxlc2ZvcmNlT2JqZWN0RmllbGRzIiwiZGVsYXkiLCJ0aW1lciIsImNhbGxiYWNrIiwibXMiLCJjbGVhclRpbWVvdXQiLCJzZXRUaW1lb3V0Iiwib24iLCJ0aGF0IiwiZGVsYXlUaW1lIiwicmVjb3JkVHlwZXNBbGxvd2VkTWFya3VwIiwicmVjb3JkVHlwZURlZmF1bHRNYXJrdXAiLCJkYXRlTWFya3VwIiwicmVjb3JkVHlwZUluZm9zIiwialF1ZXJ5IiwiZm4iLCJzZWxlY3QyIiwiYWRkRmllbGRNYXBwaW5nUm93IiwiY2xpY2siLCJzYWxlc2ZvcmNlT2JqZWN0IiwidmFsIiwid29yZHByZXNzT2JqZWN0IiwibmV3S2V5IiwiRGF0ZSIsImdldFVUQ01pbGxpc2Vjb25kcyIsImxhc3RSb3ciLCJsYXN0Iiwib2xkS2V5IiwiYXR0ciIsIlJlZ0V4cCIsImZpZWxkbWFwRmllbGRzIiwicGFyZW50IiwiZmluZCIsInJlbW92ZSIsInByZXBlbmQiLCJuZXh0Um93IiwiZW5kIiwiY2xvbmUiLCJyZW1vdmVDbGFzcyIsImkiLCJoIiwicmVwbGFjZSIsImFwcGVuZCIsInB1c2hBbmRQdWxsT2JqZWN0cyIsIndvcmRwcmVzc0lkIiwic2FsZXNmb3JjZUlkIiwic3VjY2VzcyIsInVwZGF0ZVNhbGVzZm9yY2VVc2VyU3VtbWFyeSIsIndpZHRoIiwiZmFkZUluIiwiZmFkZU91dCIsIm1hcHBpbmdJZCIsImxhc3Rfc3luY19tZXNzYWdlIiwibGFzdF9zeW5jX2FjdGlvbiIsImxhc3Rfc3luY19zdGF0dXMiLCJsYXN0X3N5bmMiLCJjbGVhclNmd3BDYWNoZUxpbmsiLCJtZXNzYWdlIiwiZG9jdW1lbnQiLCJ0aW1lb3V0Iiwibm90IiwicHJvcCIsInJlYWR5IiwiYWpheFN0YXJ0IiwiYWRkQ2xhc3MiLCJhamF4U3RvcCJdLCJtYXBwaW5ncyI6Ijs7QUFBRSxXQUFVQSxDQUFWLEVBQWM7QUFFZixXQUFTQyxnQkFBVCxDQUEyQkMsTUFBM0IsRUFBbUNDLFdBQW5DLEVBQWlEO0FBQ2hELFFBQUlDLElBQUksR0FBRztBQUNWLGdCQUFXLFNBQVNGLE1BQVQsR0FBa0I7QUFEbkIsS0FBWDtBQUdBLFFBQUlHLE1BQU0sR0FBRyxFQUFiO0FBQ0EsUUFBSUMsV0FBVyxHQUFHTixDQUFDLENBQUUsYUFBYUUsTUFBYixHQUFzQixzQkFBeEIsQ0FBRCxDQUFpREssS0FBakQsR0FBeURDLElBQXpELEVBQWxCO0FBQ0FILElBQUFBLE1BQU0sSUFBSSxzQkFBc0JDLFdBQXRCLEdBQW9DLFdBQTlDOztBQUNBLFFBQUssZ0JBQWdCSixNQUFyQixFQUE4QjtBQUM3QkUsTUFBQUEsSUFBSSxDQUFDLGtCQUFELENBQUosR0FBMkJELFdBQTNCO0FBQ0EsS0FGRCxNQUVPLElBQUssaUJBQWlCRCxNQUF0QixFQUErQjtBQUNyQ0UsTUFBQUEsSUFBSSxDQUFDLG1CQUFELENBQUosR0FBNEJELFdBQTVCO0FBQ0EsS0FGTSxNQUVBO0FBQ04sYUFBT0UsTUFBUDtBQUNBOztBQUNETCxJQUFBQSxDQUFDLENBQUNTLElBQUYsQ0FBUUMsT0FBUixFQUFpQk4sSUFBakIsRUFBdUIsVUFBVU8sUUFBVixFQUFxQjtBQUMzQ1gsTUFBQUEsQ0FBQyxDQUFDWSxJQUFGLENBQVFELFFBQVEsQ0FBQ1AsSUFBVCxDQUFjQyxNQUF0QixFQUE4QixVQUFVUSxLQUFWLEVBQWlCQyxLQUFqQixFQUF5QjtBQUN0RCxZQUFLLGdCQUFnQlosTUFBckIsRUFBOEI7QUFDN0JHLFVBQUFBLE1BQU0sSUFBSSxvQkFB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RCxDQUFpQ3dDLE9BQWpDO0FBQ0F4QyxNQUFBQSxDQUFDLENBQUUsZ0NBQUYsQ0FBRCxDQUFzQ3dDLE9BQXRDO0FBQ0F4QyxNQUFBQSxDQUFDLENBQUUsaUNBQUYsQ0FBRCxDQUF1Q3dDLE9BQXZDO0FBQ0EsS0FoQjhCLENBa0IvQjs7O0FBQ0F4QyxJQUFBQSxDQUFDLENBQUVrRixRQUFGLENBQUQsQ0FBY0ssU0FBZCxDQUF5QixZQUFXO0FBQ25DdkYsTUFBQUEsQ0FBQyxDQUFFLFVBQUYsQ0FBRCxDQUFnQndGLFFBQWhCLENBQTBCLFdBQTFCO0FBQ0EsS0FGRCxFQUVHQyxRQUZILENBRWEsWUFBVztBQUN2QnpGLE1BQUFBLENBQUMsQ0FBRSxVQUFGLENBQUQsQ0FBZ0I4RCxXQUFoQixDQUE2QixXQUE3QjtBQUNBLEtBSkQ7QUFLQXRDLElBQUFBLHNCQUFzQjtBQUN0QmlCLElBQUFBLGtCQUFrQixHQXpCYSxDQTJCL0I7O0FBQ0EwQixJQUFBQSxrQkFBa0IsR0E1QmEsQ0E4Qi9COztBQUNBYSxJQUFBQSxrQkFBa0I7QUFDbEIsR0FoQ0Q7QUFpQ0EsQ0E1VkMsRUE0VkMxQyxNQTVWRCxDQUFGIiwiZmlsZSI6Im9iamVjdC1zeW5jLWZvci1zYWxlc2ZvcmNlLWFkbWluLmpzIiwic291cmNlc0NvbnRlbnQiOlsiKCBmdW5jdGlvbiggJCApIHtcblxuXHRmdW5jdGlvbiBsb2FkRmllbGRPcHRpb25zKCBzeXN0ZW0sIG9iamVjdF9uYW1lICkge1xuXHRcdHZhciBkYXRhID0ge1xuXHRcdFx0J2FjdGlvbicgOiAnZ2V0XycgKyBzeXN0ZW0gKyAnX29iamVjdF9maWVsZHMnLFxuXHRcdH1cblx0XHR2YXIgZmllbGRzID0gJyc7XG5cdFx0dmFyIGZpcnN0X2ZpZWxkID0gJCggJy5jb2x1bW4tJyArIHN5c3RlbSArICdfZmllbGQgc2VsZWN0IG9wdGlvbicpLmZpcnN0KCkudGV4dCgpO1xuXHRcdGZpZWxkcyArPSAnPG9wdGlvbiB2YWx1ZT1cIlwiPicgKyBmaXJzdF9maWVsZCArICc8L29wdGlvbj4nO1xuXHRcdGlmICggJ3dvcmRwcmVzcycgPT09IHN5c3RlbSApIHtcblx0XHRcdGRhdGFbJ3dvcmRwcmVzc19vYmplY3QnXSA9IG9iamVjdF9uYW1lO1xuXHRcdH0gZWxzZSBpZiAoICdzYWxlc2ZvcmNlJyA9PT0gc3lzdGVtICkge1xuXHRcdFx0ZGF0YVsnc2FsZXNmb3JjZV9vYmplY3QnXSA9IG9iamVjdF9uYW1lO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gZmllbGRzO1xuXHRcdH1cblx0XHQkLnBvc3QoIGFqYXh1cmwsIGRhdGEsIGZ1bmN0aW9uKCByZXNwb25zZSApIHtcblx0XHRcdCQuZWFjaCggcmVzcG9uc2UuZGF0YS5maWVsZHMsIGZ1bmN0aW9uKCBpbmRleCwgdmFsdWUgKSB7XG5cdFx0XHRcdGlmICggJ3dvcmRwcmVzcycgPT09IHN5c3RlbSApIHtcblx0XHRcdFx0XHRmaWVsZHMgKz0gJzxvcHRpb24gdmFsdWU9XCInICsgdmFsdWUua2V5ICsgJ1wiPicgKyB2YWx1ZS5rZXkgKyAnPC9vcHRpb24+Jztcblx0XHRcdFx0fSBlbHNlIGlmICggJ3NhbGVzZm9yY2UnID09PSBzeXN0ZW0gKSB7XG5cdFx0XHRcdFx0ZmllbGRzICs9ICc8b3B0aW9uIHZhbHVlPVwiJyArIHZhbHVlLm5hbWUgKyAnXCI+JyArIHZhbHVlLmxhYmVsICsgJzwvb3B0aW9uPic7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdFx0JCggJy5jb2x1bW4tJyArIHN5c3RlbSArICdfZmllbGQgc2VsZWN0JyApLmh0bWwoIGZpZWxkcyApO1xuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIERvbid0IHNob3cgdGhlIFdTREwgZmlsZSBmaWVsZCB1bmxlc3MgU09BUCBpcyBlbmFibGVkXG5cdCAqL1xuXHRmdW5jdGlvbiB0b2dnbGVTb2FwRmllbGRzKCkge1xuXHRcdGlmICggMCA8ICQoICcub2JqZWN0LXN5bmMtZm9yLXNhbGVzZm9yY2UtZW5hYmxlLXNvYXAnICkubGVuZ3RoICkge1xuXHRcdFx0aWYgKCAkKCAnLm9iamVjdC1zeW5jLWZvci1zYWxlc2ZvcmNlLWVuYWJsZS1zb2FwIGlucHV0JyApLmlzKCAnOmNoZWNrZWQnICkgKSB7XG5cdFx0XHRcdCQoICcub2JqZWN0LXN5bmMtZm9yLXNhbGVzZm9yY2Utc29hcC13c2RsLXBhdGgnICkuc2hvdygpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0JCggJy5vYmplY3Qtc3luYy1mb3Itc2FsZXNmb3JjZS1zb2FwLXdzZGwtcGF0aCcgKS5oaWRlKCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEdlbmVyYXRlcyB0aGUgU2FsZXNmb3JjZSBvYmplY3QgZmllbGRzIGJhc2VkIG9uIHRoZSBkcm9wZG93biBhY3Rpdml0eSBhbmQgQVBJIHJlc3VsdHMuXG5cdCAqL1xuXHRmdW5jdGlvbiBzYWxlc2ZvcmNlT2JqZWN0RmllbGRzKCkge1xuXG5cdFx0dmFyIGRlbGF5ID0gKCBmdW5jdGlvbigpIHtcblx0XHRcdHZhciB0aW1lciA9IDA7XG5cdFx0XHRyZXR1cm4gZnVuY3Rpb24oIGNhbGxiYWNrLCBtcyApIHtcblx0XHRcdFx0Y2xlYXJUaW1lb3V0ICggdGltZXIgKTtcblx0XHRcdFx0dGltZXIgPSBzZXRUaW1lb3V0KCBjYWxsYmFjaywgbXMgKTtcblx0XHRcdH07XG5cdFx0fSgpICk7XG5cblx0XHRpZiAoIDAgPT09ICQoICcuc2FsZXNmb3JjZV9yZWNvcmRfdHlwZXNfYWxsb3dlZCA+IConICkubGVuZ3RoICkge1xuXHRcdFx0JCggJy5zYWxlc2ZvcmNlX3JlY29yZF90eXBlc19hbGxvd2VkJyApLmhpZGUoKTtcblx0XHR9XG5cblx0XHRpZiAoIDAgPT09ICQoICcuc2FsZXNmb3JjZV9yZWNvcmRfdHlwZV9kZWZhdWx0ID4gKicgKS5sZW5ndGggKSB7XG5cdFx0XHQkKCAnLnNhbGVzZm9yY2VfcmVjb3JkX3R5cGVfZGVmYXVsdCcgKS5oaWRlKCk7XG5cdFx0fVxuXHRcdGlmICggMCA9PT0gJCggJy5wdWxsX3RyaWdnZXJfZmllbGQgPiAqJyApLmxlbmd0aCApIHtcblx0XHRcdCQoICcucHVsbF90cmlnZ2VyX2ZpZWxkJyApLmhpZGUoKTtcblx0XHR9XG5cblx0XHQkKCAnI3NhbGVzZm9yY2Vfb2JqZWN0JyApLm9uKCAnY2hhbmdlJywgZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgdGhhdCA9IHRoaXM7XG5cdFx0XHR2YXIgZGVsYXlUaW1lID0gMTAwMDtcblx0XHRcdGRlbGF5KCBmdW5jdGlvbigpIHtcblx0XHRcdFx0dmFyIGRhdGEgPSB7XG5cdFx0XHRcdFx0J2FjdGlvbicgOiAnZ2V0X3NhbGVzZm9yY2Vfb2JqZWN0X2Rlc2NyaXB0aW9uJyxcblx0XHRcdFx0XHQnaW5jbHVkZScgOiBbICdmaWVsZHMnLCAncmVjb3JkVHlwZUluZm9zJyBdLFxuXHRcdFx0XHRcdCdmaWVsZF90eXBlJyA6ICdkYXRldGltZScsXG5cdFx0XHRcdFx0J3NhbGVzZm9yY2Vfb2JqZWN0JyA6IHRoYXQudmFsdWVcblx0XHRcdFx0fVxuXHRcdFx0XHQkLnBvc3QoIGFqYXh1cmwsIGRhdGEsIGZ1bmN0aW9uKCByZXNwb25zZSApIHtcblxuXHRcdFx0XHRcdHZhciByZWNvcmRUeXBlc0FsbG93ZWRNYXJrdXAgPSAnJywgcmVjb3JkVHlwZURlZmF1bHRNYXJrdXAgPSAnJywgZGF0ZU1hcmt1cCA9ICcnO1xuXG5cdFx0XHRcdFx0aWYgKCAwIDwgJCggcmVzcG9uc2UuZGF0YS5yZWNvcmRUeXBlSW5mb3MgKS5sZW5ndGggKSB7XG5cdFx0XHRcdFx0XHRyZWNvcmRUeXBlc0FsbG93ZWRNYXJrdXAgKz0gJzxsYWJlbCBmb3I9XCJzYWxlc2ZvcmNlX3JlY29yZF90eXBlc19hbGxvd2VkXCI+QWxsb3dlZCBSZWNvcmQgVHlwZXM6PC9sYWJlbD48ZGl2IGNsYXNzPVwiY2hlY2tib3hlc1wiPic7XG5cdFx0XHRcdFx0XHQkLmVhY2goIHJlc3BvbnNlLmRhdGEucmVjb3JkVHlwZUluZm9zLCBmdW5jdGlvbiggaW5kZXgsIHZhbHVlICkge1xuXHRcdFx0XHRcdFx0XHRyZWNvcmRUeXBlc0FsbG93ZWRNYXJrdXAgKz0gJzxsYWJlbD48aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgY2xhc3M9XCJmb3JtLWNoZWNrYm94XCIgdmFsdWU9XCInICsgaW5kZXggKyAnXCIgbmFtZT1cInNhbGVzZm9yY2VfcmVjb3JkX3R5cGVzX2FsbG93ZWRbJyArIGluZGV4ICsgJ11cIiBpZD1cInNhbGVzZm9yY2VfcmVjb3JkX3R5cGVzX2FsbG93ZWQtJyArIGluZGV4ICsgJ1wiPiAnICsgdmFsdWUgKyAnPC9sYWJlbD4nO1xuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRyZWNvcmRUeXBlc0FsbG93ZWRNYXJrdXAgKz0gJzwvZGl2Pic7XG5cblxuXHRcdFx0XHRcdFx0cmVjb3JkVHlwZURlZmF1bHRNYXJrdXAgKz0gJzxsYWJlbCBmb3I9XCJzYWxlc2ZvcmNlX3JlY29yZF90eXBlX2RlZmF1bHRcIj5EZWZhdWx0IFJlY29yZCBUeXBlOjwvbGFiZWw+Jztcblx0XHRcdFx0XHRcdHJlY29yZFR5cGVEZWZhdWx0TWFya3VwICs9ICc8c2VsZWN0IG5hbWU9XCJzYWxlc2ZvcmNlX3JlY29yZF90eXBlX2RlZmF1bHRcIiBpZD1cInNhbGVzZm9yY2VfcmVjb3JkX3R5cGVfZGVmYXVsdFwiPjxvcHRpb24gdmFsdWU9XCJcIj4tIFNlbGVjdCByZWNvcmQgdHlwZSAtPC9vcHRpb24+Jztcblx0XHRcdFx0XHRcdCQuZWFjaCggcmVzcG9uc2UuZGF0YS5yZWNvcmRUeXBlSW5mb3MsIGZ1bmN0aW9uKCBpbmRleCwgdmFsdWUgKSB7XG5cdFx0XHRcdFx0XHRcdHJlY29yZFR5cGVEZWZhdWx0TWFya3VwICs9ICc8b3B0aW9uIHZhbHVlPVwiJyArIGluZGV4ICsgJ1wiPicgKyB2YWx1ZSArICc8L29wdGlvbj4nO1xuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0JCggJy5zYWxlc2ZvcmNlX3JlY29yZF90eXBlc19hbGxvd2VkJyApLmh0bWwoIHJlY29yZFR5cGVzQWxsb3dlZE1hcmt1cCApO1xuXHRcdFx0XHRcdCQoICcuc2FsZXNmb3JjZV9yZWNvcmRfdHlwZV9kZWZhdWx0JyApLmh0bWwoIHJlY29yZFR5cGVEZWZhdWx0TWFya3VwICk7XG5cblx0XHRcdFx0XHRpZiAoIDAgPCAkKCByZXNwb25zZS5kYXRhLmZpZWxkcyApLmxlbmd0aCApIHtcblx0XHRcdFx0XHRcdGRhdGVNYXJrdXAgKz0gJzxsYWJlbCBmb3I9XCJwdWxsX3RyaWdnZXJfZmllbGRcIj5EYXRlIGZpZWxkIHRvIHRyaWdnZXIgcHVsbDo8L2xhYmVsPic7XG5cdFx0XHRcdFx0XHRkYXRlTWFya3VwICs9ICc8c2VsZWN0IG5hbWU9XCJwdWxsX3RyaWdnZXJfZmllbGRcIiBpZD1cInB1bGxfdHJpZ2dlcl9maWVsZFwiPjxvcHRpb24gdmFsdWU9XCJcIj4tIFNlbGVjdCBkYXRlIGZpZWxkIC08L29wdGlvbj4nXG5cdFx0XHRcdFx0XHQkLmVhY2goIHJlc3BvbnNlLmRhdGEuZmllbGRzLCBmdW5jdGlvbiggaW5kZXgsIHZhbHVlICkge1xuXHRcdFx0XHRcdFx0XHRkYXRlTWFya3VwICs9ICc8b3B0aW9uIHZhbHVlPVwiJyArIHZhbHVlLm5hbWUgKyAnXCI+JyArIHZhbHVlLmxhYmVsICsgJzwvb3B0aW9uPic7XG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdGRhdGVNYXJrdXAgKz0gJzwvc2VsZWN0Pic7XG5cdFx0XHRcdFx0XHRkYXRlTWFya3VwICs9ICc8cCBjbGFzcz1cImRlc2NyaXB0aW9uXCI+VGhlc2UgYXJlIGRhdGUgZmllbGRzIHRoYXQgY2FuIGNhdXNlIFdvcmRQcmVzcyB0byBwdWxsIGFuIHVwZGF0ZSBmcm9tIFNhbGVzZm9yY2UsIGFjY29yZGluZyB0byB0aGUgPGNvZGU+c2FsZXNmb3JjZV9wdWxsPC9jb2RlPiBjbGFzcy48L3A+J1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdCQoICcucHVsbF90cmlnZ2VyX2ZpZWxkJyApLmh0bWwoIGRhdGVNYXJrdXAgKTtcblxuXHRcdFx0XHRcdGlmICggJycgIT09IHJlY29yZFR5cGVzQWxsb3dlZE1hcmt1cCApIHtcblx0XHRcdFx0XHRcdCQoICcuc2FsZXNmb3JjZV9yZWNvcmRfdHlwZXNfYWxsb3dlZCcgKS5zaG93KCk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdCQoICcuc2FsZXNmb3JjZV9yZWNvcmRfdHlwZXNfYWxsb3dlZCcgKS5oaWRlKCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGlmICggJycgIT09IHJlY29yZFR5cGVEZWZhdWx0TWFya3VwICkge1xuXHRcdFx0XHRcdFx0JCggJy5zYWxlc2ZvcmNlX3JlY29yZF90eXBlX2RlZmF1bHQnICkuc2hvdygpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHQkKCAnLnNhbGVzZm9yY2VfcmVjb3JkX3R5cGVfZGVmYXVsdCcgKS5oaWRlKCk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aWYgKCAnJyAhPT0gZGF0ZU1hcmt1cCApIHtcblx0XHRcdFx0XHRcdCQoICcucHVsbF90cmlnZ2VyX2ZpZWxkJyApLnNob3coKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0JCggJy5wdWxsX3RyaWdnZXJfZmllbGQnICkuaGlkZSgpO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGlmICggalF1ZXJ5LmZuLnNlbGVjdDIgKSB7XG5cdFx0XHRcdFx0XHQkKCAnc2VsZWN0I3NhbGVzZm9yY2VfcmVjb3JkX3R5cGVfZGVmYXVsdCcgKS5zZWxlY3QyKCk7XG5cdFx0XHRcdFx0XHQkKCAnc2VsZWN0I3B1bGxfdHJpZ2dlcl9maWVsZCcgKS5zZWxlY3QyKCk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdH0pO1xuXHRcdFx0fSwgZGVsYXlUaW1lICk7XG5cdFx0fSk7XG5cdH1cblx0LyoqXG5cdCAqIER1cGxpY2F0ZXMgdGhlIGZpZWxkcyBmb3IgYSBuZXcgcm93IGluIHRoZSBmaWVsZG1hcCBvcHRpb25zIHNjcmVlbi5cblx0ICovXG5cdCBmdW5jdGlvbiBhZGRGaWVsZE1hcHBpbmdSb3coKSB7XG5cdFx0JCggJyNhZGQtZmllbGQtbWFwcGluZycgKS5jbGljayggZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgc2FsZXNmb3JjZU9iamVjdCA9ICQoICcjc2FsZXNmb3JjZV9vYmplY3QnICkudmFsKCk7XG5cdFx0XHR2YXIgd29yZHByZXNzT2JqZWN0ID0gJCggJyN3b3JkcHJlc3Nfb2JqZWN0JyApLnZhbCgpO1xuXHRcdFx0dmFyIG5ld0tleSA9IG5ldyBEYXRlKCkuZ2V0VVRDTWlsbGlzZWNvbmRzKCk7XG5cdFx0XHR2YXIgbGFzdFJvdyA9ICQoICd0YWJsZS5maWVsZHMgdGJvZHkgdHInICkubGFzdCgpO1xuXHRcdFx0dmFyIG9sZEtleSA9IGxhc3RSb3cuYXR0ciggJ2RhdGEta2V5JyApO1xuXHRcdFx0b2xkS2V5ID0gbmV3IFJlZ0V4cCggb2xkS2V5LCAnZycgKTtcblx0XHRcdCQoIHRoaXMgKS50ZXh0KCAnQWRkIGFub3RoZXIgZmllbGQgbWFwcGluZycgKTtcblx0XHRcdGlmICggJycgIT09IHdvcmRwcmVzc09iamVjdCAmJiAnJyAhPT0gc2FsZXNmb3JjZU9iamVjdCApIHtcblx0XHRcdFx0ZmllbGRtYXBGaWVsZHMoIG9sZEtleSwgbmV3S2V5LCBsYXN0Um93ICk7XG5cdFx0XHRcdCQoIHRoaXMgKS5wYXJlbnQoKS5maW5kKCAnLm1pc3Npbmctb2JqZWN0JyApLnJlbW92ZSgpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0JCggdGhpcyApLnBhcmVudCgpLnByZXBlbmQoICc8ZGl2IGNsYXNzPVwiZXJyb3IgbWlzc2luZy1vYmplY3RcIj48c3Bhbj5Zb3UgaGF2ZSB0byBwaWNrIGEgV29yZFByZXNzIG9iamVjdCBhbmQgYSBTYWxlc2ZvcmNlIG9iamVjdCB0byBhZGQgZmllbGQgbWFwcGluZy48L3NwYW4+PC9kaXY+JyApO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH0pO1xuXHR9XG5cdC8qKlxuXHQgKiBHZXRzIHRoZSBXb3JkUHJlc3MgYW5kIFNhbGVzZm9yY2UgZmllbGQgcmVzdWx0cyB2aWEgYW4gQWpheCBjYWxsXG5cdCAqIEBwYXJhbSBzdHJpbmcgb2xkS2V5IHRoZSBkYXRhLWtleSBhdHRyaWJ1dGUgb2YgdGhlIHNldCB0aGF0IGlzIGJlaW5nIGNsb25lZFxuXHQgKiBAcGFyYW0gc3RyaW5nIG5ld0tleSB0aGUgZGF0YS1rZXkgYXR0cmlidXRlIGZvciB0aGUgb25lIHdlJ3JlIGFwcGVuZGluZ1xuXHQgKiBAcGFyYW0gb2JqZWN0IGxhc3RSb3cgdGhlIGxhc3Qgc2V0IG9mIHRoZSBmaWVsZG1hcFxuXHQgKi9cblx0ZnVuY3Rpb24gZmllbGRtYXBGaWVsZHMoIG9sZEtleSwgbmV3S2V5LCBsYXN0Um93ICkge1xuXHRcdHZhciBuZXh0Um93ID0gJyc7XG4gICAgICAgIGlmICggalF1ZXJ5LmZuLnNlbGVjdDIgKSB7XG4gICAgICAgIFx0bmV4dFJvdyA9IGxhc3RSb3cuZmluZCggJ3NlbGVjdCcgKVxuXHQgICAgICAgICAgICAuc2VsZWN0MiggJ2Rlc3Ryb3knIClcblx0ICAgICAgICAgICAgLmVuZCgpXG5cdCAgICAgICAgICAgIC5jbG9uZSggdHJ1ZSApLnJlbW92ZUNsYXNzKCAnZmllbGRtYXAtdGVtcGxhdGUnICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgIFx0bmV4dFJvdyA9IGxhc3RSb3cuY2xvbmUoIHRydWUgKTtcbiAgICAgICAgfVxuXHRcdCQoIG5leHRSb3cgKS5hdHRyKCAnZGF0YS1rZXknLCBuZXdLZXkgKTtcblx0XHQkKCBuZXh0Um93ICkuZWFjaChmdW5jdGlvbigpIHtcblx0XHRcdCQoIHRoaXMgKS5odG1sKCBmdW5jdGlvbiggaSwgaCApIHtcblx0XHRcdFx0cmV0dXJuIGgucmVwbGFjZSggb2xkS2V5LCBuZXdLZXkgKTtcblx0XHRcdH0pO1xuXHRcdH0pO1xuXHRcdCQoICd0YWJsZS5maWVsZHMgdGJvZHknICkuYXBwZW5kKCBuZXh0Um93ICk7XG5cdFx0aWYgKCBqUXVlcnkuZm4uc2VsZWN0MiApIHtcblx0XHRcdGxhc3RSb3cuZmluZCggJ3NlbGVjdCcgKS5zZWxlY3QyKCk7XG5cdFx0XHRuZXh0Um93LmZpbmQoICdzZWxlY3QnICkuc2VsZWN0MigpO1xuXHRcdH1cblx0fVxuXHQvKipcblx0ICogSGFuZGxlIG1hbnVhbCBwdXNoIGFuZCBwdWxsIG9mIG9iamVjdHNcblx0ICovXG5cdGZ1bmN0aW9uIHB1c2hBbmRQdWxsT2JqZWN0cygpIHtcblx0XHQkKCAnLnNhbGVzZm9yY2VfdXNlcl9hamF4X21lc3NhZ2UnICkuaGlkZSgpO1xuXHRcdGlmICggMCA8ICQoICcjd29yZHByZXNzX29iamVjdF9hamF4JyApLmxlbmd0aCApIHtcblx0XHRcdCQoICcucHVzaF90b19zYWxlc2ZvcmNlX2J1dHRvbicgKS5vbiggJ2NsaWNrJywgZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHZhciB3b3JkcHJlc3NPYmplY3QgPSAkKCAnI3dvcmRwcmVzc19vYmplY3RfYWpheCcgKS52YWwoKTtcblx0XHRcdFx0dmFyIHdvcmRwcmVzc0lkID0gJCggJyN3b3JkcHJlc3NfaWRfYWpheCcgKS52YWwoKTtcblx0XHRcdFx0dmFyIHNhbGVzZm9yY2VJZCA9ICQoICcjc2FsZXNmb3JjZV9pZF9hamF4JyApLnZhbCgpO1xuXHRcdFx0XHR2YXIgZGF0YSA9IHtcblx0XHRcdFx0XHQnYWN0aW9uJyA6ICdwdXNoX3RvX3NhbGVzZm9yY2UnLFxuXHRcdFx0XHRcdCd3b3JkcHJlc3Nfb2JqZWN0JyA6IHdvcmRwcmVzc09iamVjdCxcblx0XHRcdFx0XHQnd29yZHByZXNzX2lkJyA6IHdvcmRwcmVzc0lkLFxuXHRcdFx0XHRcdCdzYWxlc2ZvcmNlX2lkJyA6IHNhbGVzZm9yY2VJZFxuXHRcdFx0XHR9XG5cdFx0XHRcdCQucG9zdCggYWpheHVybCwgZGF0YSwgZnVuY3Rpb24oIHJlc3BvbnNlICkge1xuXHRcdFx0XHRcdGlmICggdHJ1ZSA9PT0gcmVzcG9uc2Uuc3VjY2VzcyApIHtcblx0XHRcdFx0XHRcdHVwZGF0ZVNhbGVzZm9yY2VVc2VyU3VtbWFyeSgpO1xuXHRcdFx0XHRcdFx0JCggJy5zYWxlc2ZvcmNlX3VzZXJfYWpheF9tZXNzYWdlJyApLndpZHRoKCAkKCAnLm1hcHBlZC1zYWxlc2ZvcmNlLXVzZXInICkud2lkdGgoKSAtIDI3ICk7XG5cdFx0XHRcdFx0XHQkKCAnLnNhbGVzZm9yY2VfdXNlcl9hamF4X21lc3NhZ2UnICkuaHRtbCggJzxwPlRoaXMgb2JqZWN0IGhhcyBiZWVuIHB1c2hlZCB0byBTYWxlc2ZvcmNlLjwvcD4nICkuZmFkZUluKCkuZGVsYXkoIDQwMDAgKS5mYWRlT3V0KCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdCQoICcucHVsbF9mcm9tX3NhbGVzZm9yY2VfYnV0dG9uJyApLm9uKCAnY2xpY2snLCBmdW5jdGlvbigpIHtcblx0XHRcdHZhciBzYWxlc2ZvcmNlSWQgPSAkKCAnI3NhbGVzZm9yY2VfaWRfYWpheCcgKS52YWwoKTtcblx0XHRcdHZhciB3b3JkcHJlc3NPYmplY3QgPSAkKCAnI3dvcmRwcmVzc19vYmplY3RfYWpheCcgKS52YWwoKTtcblx0XHRcdHZhciBkYXRhID0ge1xuXHRcdFx0XHQnYWN0aW9uJyA6ICdwdWxsX2Zyb21fc2FsZXNmb3JjZScsXG5cdFx0XHRcdCdzYWxlc2ZvcmNlX2lkJyA6IHNhbGVzZm9yY2VJZCxcblx0XHRcdFx0J3dvcmRwcmVzc19vYmplY3QnIDogd29yZHByZXNzT2JqZWN0XG5cdFx0XHR9XG5cdFx0XHQkLnBvc3QoIGFqYXh1cmwsIGRhdGEsIGZ1bmN0aW9uKCByZXNwb25zZSApIHtcblx0XHRcdFx0aWYgKCB0cnVlID09PSByZXNwb25zZS5zdWNjZXNzICkge1xuXHRcdFx0XHRcdHVwZGF0ZVNhbGVzZm9yY2VVc2VyU3VtbWFyeSgpO1xuXHRcdFx0XHRcdCQoICcuc2FsZXNmb3JjZV91c2VyX2FqYXhfbWVzc2FnZScgKS53aWR0aCggJCggJy5tYXBwZWQtc2FsZXNmb3JjZS11c2VyJyApLndpZHRoKCkgLSAyNyApO1xuXHRcdFx0XHRcdCQoICcuc2FsZXNmb3JjZV91c2VyX2FqYXhfbWVzc2FnZScgKS5odG1sKCAnPHA+VGhpcyBvYmplY3QgaGFzIGJlZW4gcHVsbGVkIGZyb20gU2FsZXNmb3JjZS48L3A+JyApLmZhZGVJbigpLmRlbGF5KCA0MDAwICkuZmFkZU91dCgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9KTtcblx0fVxuXHQvKipcblx0ICogVXBkYXRlcyB0aGUgdXNlciBwcm9maWxlIHN1bW1hcnkgb2YgU2FsZXNmb3JjZSBpbmZvLlxuXHQgKi9cblx0ZnVuY3Rpb24gdXBkYXRlU2FsZXNmb3JjZVVzZXJTdW1tYXJ5KCkge1xuXHRcdHZhciBtYXBwaW5nSWQgPSAkKCAnI21hcHBpbmdfaWRfYWpheCcgKS52YWwoKTtcblx0XHR2YXIgZGF0YSA9IHtcblx0XHRcdCdhY3Rpb24nIDogJ3JlZnJlc2hfbWFwcGVkX2RhdGEnLFxuXHRcdFx0J21hcHBpbmdfaWQnIDogbWFwcGluZ0lkXG5cdFx0fVxuXHRcdCQucG9zdCggYWpheHVybCwgZGF0YSwgZnVuY3Rpb24oIHJlc3BvbnNlICkge1xuXHRcdFx0aWYgKCB0cnVlID09PSByZXNwb25zZS5zdWNjZXNzICkge1xuXHRcdFx0XHQkKCAndGQubGFzdF9zeW5jX21lc3NhZ2UnICkudGV4dCggcmVzcG9uc2UuZGF0YS5sYXN0X3N5bmNfbWVzc2FnZSApO1xuXHRcdFx0XHQkKCAndGQubGFzdF9zeW5jX2FjdGlvbicgKS50ZXh0KCByZXNwb25zZS5kYXRhLmxhc3Rfc3luY19hY3Rpb24gKTtcblx0XHRcdFx0JCggJ3RkLmxhc3Rfc3luY19zdGF0dXMnICkudGV4dCggcmVzcG9uc2UuZGF0YS5sYXN0X3N5bmNfc3RhdHVzICk7XG5cdFx0XHRcdCQoICd0ZC5sYXN0X3N5bmMnICkudGV4dCggcmVzcG9uc2UuZGF0YS5sYXN0X3N5bmMgKTtcblx0XHRcdFx0aWYgKCAnMScgPT09IHJlc3BvbnNlLmRhdGEubGFzdF9zeW5jX3N0YXR1cyApIHtcblx0XHRcdFx0XHQkKCAndGQubGFzdF9zeW5jX3N0YXR1cycgKS50ZXh0KCAnc3VjY2VzcycgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cdC8qKlxuXHQgKiBDbGVhciB0aGUgcGx1Z2luIGNhY2hlIHZpYSBBamF4IHJlcXVlc3QuXG5cdCAqL1xuXHRmdW5jdGlvbiBjbGVhclNmd3BDYWNoZUxpbmsoKSB7XG5cdFx0JCggJyNjbGVhci1zZndwLWNhY2hlJyApLmNsaWNrKCBmdW5jdGlvbigpIHtcblx0XHRcdHZhciBkYXRhID0ge1xuXHRcdFx0XHQnYWN0aW9uJyA6ICdjbGVhcl9zZndwX2NhY2hlJ1xuXHRcdFx0fVxuXHRcdFx0dmFyIHRoYXQgPSAkKCB0aGlzICk7XG5cdFx0XHQkLnBvc3QoIGFqYXh1cmwsIGRhdGEsIGZ1bmN0aW9uKCByZXNwb25zZSApIHtcblx0XHRcdFx0aWYgKCB0cnVlID09PSByZXNwb25zZS5zdWNjZXNzICYmIHRydWUgPT09IHJlc3BvbnNlLmRhdGEuc3VjY2VzcyApIHtcblx0XHRcdFx0XHR0aGF0LnBhcmVudCgpLmh0bWwoIHJlc3BvbnNlLmRhdGEubWVzc2FnZSApLmZhZGVJbigpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9KTtcblx0fVxuXG5cdC8vIGxvYWQgYXZhaWxhYmxlIG9wdGlvbnMgaWYgdGhlIHdvcmRwcmVzcyBvYmplY3QgY2hhbmdlc1xuXHQkKCBkb2N1bWVudCApLm9uKCAnY2hhbmdlJywgJ3NlbGVjdCN3b3JkcHJlc3Nfb2JqZWN0JywgZnVuY3Rpb24oKSB7XG5cdFx0dmFyIHRpbWVvdXQ7XG5cdFx0bG9hZEZpZWxkT3B0aW9ucyggJ3dvcmRwcmVzcycsICQoIHRoaXMgKS52YWwoKSApO1xuXHRcdGNsZWFyVGltZW91dCggdGltZW91dCApO1xuXHRcdHRpbWVvdXQgPSBzZXRUaW1lb3V0KCBmdW5jdGlvbigpIHtcblx0XHRcdCQoICd0YWJsZS5maWVsZHMgdGJvZHkgdHInICkuZmFkZU91dCgpO1xuXHRcdFx0JCggJ3RhYmxlLmZpZWxkcyB0Ym9keSB0cicgKS5ub3QoICc6bGFzdCcgKS5yZW1vdmUoKTtcblx0XHR9LCAxMDAwICk7XG5cdH0pO1xuXG5cdC8vIGxvYWQgYXZhaWxhYmxlIG9wdGlvbnMgaWYgdGhlIHNhbGVzZm9yY2Ugb2JqZWN0IGNoYW5nZXNcblx0JCggZG9jdW1lbnQgKS5vbiggJ2NoYW5nZScsICdzZWxlY3Qjc2FsZXNmb3JjZV9vYmplY3QnLCBmdW5jdGlvbigpIHtcblx0XHR2YXIgdGltZW91dDtcblx0XHRsb2FkRmllbGRPcHRpb25zKCAnc2FsZXNmb3JjZScsICQoIHRoaXMgKS52YWwoKSApO1xuXHRcdGNsZWFyVGltZW91dCggdGltZW91dCApO1xuXHRcdHRpbWVvdXQgPSBzZXRUaW1lb3V0KCBmdW5jdGlvbigpIHtcblx0XHRcdCQoICd0YWJsZS5maWVsZHMgdGJvZHkgdHInICkuZmFkZU91dCgpO1xuXHRcdFx0JCggJ3RhYmxlLmZpZWxkcyB0Ym9keSB0cicgKS5ub3QoICc6bGFzdCcgKS5yZW1vdmUoKTtcblx0XHR9LCAxMDAwICk7XG5cdH0pO1xuXG5cdC8vIHNob3cgd3NkbCBmaWVsZCBpZiBzb2FwIGlzIGVuYWJsZWRcblx0JCggZG9jdW1lbnQgKS5vbiggJ2NoYW5nZScsICcub2JqZWN0LXN5bmMtZm9yLXNhbGVzZm9yY2UtZW5hYmxlLXNvYXAgaW5wdXQnLCBmdW5jdGlvbigpIHtcblx0XHR0b2dnbGVTb2FwRmllbGRzKCk7XG5cdH0pO1xuXG5cdC8qKlxuXHQgKiBBcyB0aGUgRHJ1cGFsIHBsdWdpbiBkb2VzLCB3ZSBvbmx5IGFsbG93IG9uZSBmaWVsZCB0byBiZSBhIHByZW1hdGNoXG5cdCAqL1xuXHQkKCBkb2N1bWVudCApLm9uKCAnY2xpY2snLCAnLmNvbHVtbi1pc19wcmVtYXRjaCBpbnB1dCcsIGZ1bmN0aW9uKCkge1xuXHRcdCQoICcuY29sdW1uLWlzX3ByZW1hdGNoIGlucHV0JyApLm5vdCggdGhpcyApLnByb3AoICdjaGVja2VkJywgZmFsc2UgKTtcblx0fSk7XG5cdC8qKlxuXHQgKiBBcyB0aGUgRHJ1cGFsIHBsdWdpbiBkb2VzLCB3ZSBvbmx5IGFsbG93IG9uZSBmaWVsZCB0byBiZSBhIGtleVxuXHQgKi9cblx0JCggZG9jdW1lbnQgKS5vbiggJ2NsaWNrJywgJy5jb2x1bW4taXNfa2V5IGlucHV0JywgZnVuY3Rpb24oKSB7XG5cdFx0JCggJy5jb2x1bW4taXNfa2V5IGlucHV0JyApLm5vdCggdGhpcyApLnByb3AoICdjaGVja2VkJywgZmFsc2UgKTtcblx0fSk7XG5cdC8qKlxuXHQgKiBXaGVuIHRoZSBwbHVnaW4gbG9hZHMsIGluaXRpYWxpemUgb3IgZW5hYmxlIHRoaW5nczpcblx0ICogU2VsZWN0MiBvbiBzZWxlY3QgZmllbGRzXG5cdCAqIENsZWFyIGZpZWxkcyB3aGVuIHRoZSB0YXJnZXRlZCBXb3JkUHJlc3Mgb3IgU2FsZXNmb3JjZSBvYmplY3QgdHlwZSBjaGFuZ2VzXG5cdCAqIEFkZCBhIHNwaW5uZXIgZm9yIEFqYXggcmVxdWVzdHNcblx0ICogTWFuYWdlIHRoZSBkaXNwbGF5IGZvciBTYWxlc2ZvcmNlIG9iamVjdCBmaWVsZHMgYmFzZWQgb24gQVBJIHJlcG9uc2Vcblx0ICogTWFudWFsIHB1c2ggYW5kIHB1bGxcblx0ICogQ2xlYXJpbmcgdGhlIGNhY2hlXG5cdCAqL1xuXHQkKCBkb2N1bWVudCApLnJlYWR5KCBmdW5jdGlvbigpIHtcblxuXHRcdC8vIGZvciBtYWluIGFkbWluIHNldHRpbmdzXG5cdFx0dG9nZ2xlU29hcEZpZWxkcygpO1xuXG5cdFx0Ly8gaWYgdGhlcmUgaXMgYWxyZWFkeSBhIHdwIG9yIHNmIG9iamVjdCwgbWFrZSBzdXJlIGl0IGhhcyB0aGUgcmlnaHQgZmllbGRzXG5cdFx0bG9hZEZpZWxkT3B0aW9ucyggJ3dvcmRwcmVzcycsICQoICdzZWxlY3Qjd29yZHByZXNzX29iamVjdCcgKS52YWwoKSApO1xuXHRcdGxvYWRGaWVsZE9wdGlvbnMoICdzYWxlc2ZvcmNlJywgJCggJ3NlbGVjdCNzYWxlc2ZvcmNlX29iamVjdCcgKS52YWwoKSApO1xuXG5cdFx0aWYgKCBqUXVlcnkuZm4uc2VsZWN0MiApIHtcblx0XHRcdCQoICdzZWxlY3Qjd29yZHByZXNzX29iamVjdCcgKS5zZWxlY3QyKCk7XG5cdFx0XHQkKCAnc2VsZWN0I3NhbGVzZm9yY2Vfb2JqZWN0JyApLnNlbGVjdDIoKTtcblx0XHRcdCQoICdzZWxlY3Qjc2FsZXNmb3JjZV9yZWNvcmRfdHlwZV9kZWZhdWx0JyApLnNlbGVjdDIoKTtcblx0XHRcdCQoICdzZWxlY3QjcHVsbF90cmlnZ2VyX2ZpZWxkJyApLnNlbGVjdDIoKTtcblx0XHRcdCQoICcuY29sdW1uLXdvcmRwcmVzc19maWVsZCBzZWxlY3QnICkuc2VsZWN0MigpO1xuXHRcdFx0JCggJy5jb2x1bW4tc2FsZXNmb3JjZV9maWVsZCBzZWxlY3QnICkuc2VsZWN0MigpO1xuXHRcdH1cblxuXHRcdC8vIHRvZG86IG5lZWQgdG8gZml4IHRoaXMgc28gaXQgZG9lc24ndCBydW4gYWxsIHRoZSBzcGlubmVycyBhdCB0aGUgc2FtZSB0aW1lIHdoZW4gdGhlcmUgYXJlIG11bHRpcGxlcyBvbiB0aGUgc2FtZSBwYWdlXG5cdFx0JCggZG9jdW1lbnQgKS5hamF4U3RhcnQoIGZ1bmN0aW9uKCkge1xuXHRcdFx0JCggJy5zcGlubmVyJyApLmFkZENsYXNzKCAnaXMtYWN0aXZlJyApO1xuXHRcdH0pLmFqYXhTdG9wKCBmdW5jdGlvbigpIHtcblx0XHRcdCQoICcuc3Bpbm5lcicgKS5yZW1vdmVDbGFzcyggJ2lzLWFjdGl2ZScgKTtcblx0XHR9KTtcblx0XHRzYWxlc2ZvcmNlT2JqZWN0RmllbGRzKCk7XG5cdFx0YWRkRmllbGRNYXBwaW5nUm93KCk7XG5cblx0XHQvLyBmb3IgcHVzaC9wdWxsIG1ldGhvZHMgcnVubmluZyB2aWEgYWpheFxuXHRcdHB1c2hBbmRQdWxsT2JqZWN0cygpO1xuXG5cdFx0Ly8gZm9yIGNsZWFyaW5nIHRoZSBwbHVnaW4gY2FjaGVcblx0XHRjbGVhclNmd3BDYWNoZUxpbmsoKTtcblx0fSk7XG59KCBqUXVlcnkgKSApO1xuIl19 diff --git a/assets/js/object-sync-for-salesforce-admin.min.js b/assets/js/object-sync-for-salesforce-admin.min.js index 1c8c04e0..45d87646 100644 --- a/assets/js/object-sync-for-salesforce-admin.min.js +++ b/assets/js/object-sync-for-salesforce-admin.min.js @@ -1 +1 @@ -"use strict";!function(o){function t(s,e){var t={action:"get_"+s+"_object_fields"},a="",l=o(".column-"+s+"_field select option").first().text();if(a+='","wordpress"===s)t.wordpress_object=e;else{if("salesforce"!==s)return a;t.salesforce_object=e}o.post(ajaxurl,t,function(e){o.each(e.data.fields,function(e,t){"wordpress"===s?a+='":"salesforce"===s&&(a+='")}),o(".column-"+s+"_field select").html(a)})}function e(){0 *").length&&o(".salesforce_record_types_allowed").hide(),0===o(".salesforce_record_type_default > *").length&&o(".salesforce_record_type_default").hide(),0===o(".pull_trigger_field > *").length&&o(".pull_trigger_field").hide(),o("#salesforce_object").on("change",function(){var t=this;e(function(){var e={action:"get_salesforce_object_description",include:["fields","recordTypeInfos"],field_type:"datetime",salesforce_object:t.value};o.post(ajaxurl,e,function(e){var s="",a="",l="";0Allowed Record Types:
',o.each(e.data.recordTypeInfos,function(e,t){s+='"}),s+="
",a+='',a+='',o.each(e.data.fields,function(e,t){l+='"}),l+="",l+='

These are date fields that can cause WordPress to pull an update from Salesforce, according to the salesforce_pull class.

'),o(".pull_trigger_field").html(l),""!==s?o(".salesforce_record_types_allowed").show():o(".salesforce_record_types_allowed").hide(),""!==a?o(".salesforce_record_type_default").show():o(".salesforce_record_type_default").hide(),""!==l?o(".pull_trigger_field").show():o(".pull_trigger_field").hide(),jQuery.fn.select2&&(o("select#salesforce_record_type_default").select2(),o("select#pull_trigger_field").select2())})},1e3)})}function a(){o("#add-field-mapping").click(function(){var e=(new Date).getUTCMilliseconds(),t=o("table.fields tbody tr").last(),s=t.attr("data-key");return s=new RegExp(s,"g"),o(this).text("Add another field mapping"),function(s,a,e){var t="";t=jQuery.fn.select2?e.find("select").select2("destroy").end().clone(!0).removeClass("fieldmap-template"):e.clone(!0);o(t).attr("data-key",a),o(t).each(function(){o(this).html(function(e,t){return t.replace(s,a)})}),o("table.fields tbody").append(t),jQuery.fn.select2&&(e.find("select").select2(),t.find("select").select2())}(s,e,t),o(this).parent().find(".missing-object").remove(),!1})}function l(){var e={action:"refresh_mapped_data",mapping_id:o("#mapping_id_ajax").val()};o.post(ajaxurl,e,function(e){!0===e.success&&(o("td.last_sync_message").text(e.data.last_sync_message),o("td.last_sync_action").text(e.data.last_sync_action),o("td.last_sync_status").text(e.data.last_sync_status),o("td.last_sync").text(e.data.last_sync),"1"===e.data.last_sync_status&&o("td.last_sync_status").text("success"))})}o(document).on("change","select#wordpress_object",function(){var e;t("wordpress",o(this).val()),clearTimeout(e),e=setTimeout(function(){o("table.fields tbody tr").fadeOut(),o("table.fields tbody tr").not(":last").remove()},1e3)}),o(document).on("change","select#salesforce_object",function(){var e;t("salesforce",o(this).val()),clearTimeout(e),e=setTimeout(function(){o("table.fields tbody tr").fadeOut(),o("table.fields tbody tr").not(":last").remove()},1e3)}),o(document).on("change",".object-sync-for-salesforce-enable-soap input",function(){e()}),o(document).on("click",".column-is_prematch input",function(){o(".column-is_prematch input").not(this).prop("checked",!1)}),o(document).on("click",".column-is_key input",function(){o(".column-is_key input").not(this).prop("checked",!1)}),o(document).ready(function(){e(),jQuery.fn.select2&&(o("select#wordpress_object").select2(),o("select#salesforce_object").select2(),o("select#salesforce_record_type_default").select2(),o("select#pull_trigger_field").select2(),o(".column-wordpress_field select").select2(),o(".column-salesforce_field select").select2()),o(document).ajaxStart(function(){o(".spinner").addClass("is-active")}).ajaxStop(function(){o(".spinner").removeClass("is-active")}),s(),a(),o(".salesforce_user_ajax_message").hide(),0This object has been pushed to Salesforce.

").fadeIn().delay(4e3).fadeOut())}),!1}),o(".pull_from_salesforce_button").on("click",function(){var e={action:"pull_from_salesforce",salesforce_id:o("#salesforce_id_ajax").val(),wordpress_object:o("#wordpress_object_ajax").val()};return o.post(ajaxurl,e,function(e){!0===e.success&&(l(),o(".salesforce_user_ajax_message").width(o(".mapped-salesforce-user").width()-27),o(".salesforce_user_ajax_message").html("

This object has been pulled from Salesforce.

").fadeIn().delay(4e3).fadeOut())}),!1}),o("#clear-sfwp-cache").click(function(){var t=o(this);return o.post(ajaxurl,{action:"clear_sfwp_cache"},function(e){!0===e.success&&!0===e.data.success&&t.parent().html(e.data.message).fadeIn()}),!1})})}(jQuery); \ No newline at end of file +"use strict";!function(l){function s(t,e){var s={action:"get_"+t+"_object_fields"},a="",o=l(".column-"+t+"_field select option").first().text();if(a+='","wordpress"===t)s.wordpress_object=e;else{if("salesforce"!==t)return a;s.salesforce_object=e}l.post(ajaxurl,s,function(e){l.each(e.data.fields,function(e,s){"wordpress"===t?a+='":"salesforce"===t&&(a+='")}),l(".column-"+t+"_field select").html(a)})}function e(){0 *").length&&l(".salesforce_record_types_allowed").hide(),0===l(".salesforce_record_type_default > *").length&&l(".salesforce_record_type_default").hide(),0===l(".pull_trigger_field > *").length&&l(".pull_trigger_field").hide(),l("#salesforce_object").on("change",function(){var s=this;e(function(){var e={action:"get_salesforce_object_description",include:["fields","recordTypeInfos"],field_type:"datetime",salesforce_object:s.value};l.post(ajaxurl,e,function(e){var t="",a="",o="";0Allowed Record Types:
',l.each(e.data.recordTypeInfos,function(e,s){t+='"}),t+="
",a+='',a+='',l.each(e.data.fields,function(e,s){o+='"}),o+="",o+='

These are date fields that can cause WordPress to pull an update from Salesforce, according to the salesforce_pull class.

'),l(".pull_trigger_field").html(o),""!==t?l(".salesforce_record_types_allowed").show():l(".salesforce_record_types_allowed").hide(),""!==a?l(".salesforce_record_type_default").show():l(".salesforce_record_type_default").hide(),""!==o?l(".pull_trigger_field").show():l(".pull_trigger_field").hide(),jQuery.fn.select2&&(l("select#salesforce_record_type_default").select2(),l("select#pull_trigger_field").select2())})},1e3)})}function a(){l("#add-field-mapping").click(function(){var e=l("#salesforce_object").val(),s=l("#wordpress_object").val(),t=(new Date).getUTCMilliseconds(),a=l("table.fields tbody tr").last(),o=a.attr("data-key");return o=new RegExp(o,"g"),l(this).text("Add another field mapping"),""!==s&&""!==e?(function(t,a,e){var s="";s=jQuery.fn.select2?e.find("select").select2("destroy").end().clone(!0).removeClass("fieldmap-template"):e.clone(!0);l(s).attr("data-key",a),l(s).each(function(){l(this).html(function(e,s){return s.replace(t,a)})}),l("table.fields tbody").append(s),jQuery.fn.select2&&(e.find("select").select2(),s.find("select").select2())}(o,t,a),l(this).parent().find(".missing-object").remove()):l(this).parent().prepend('
You have to pick a WordPress object and a Salesforce object to add field mapping.
'),!1})}function o(){var e={action:"refresh_mapped_data",mapping_id:l("#mapping_id_ajax").val()};l.post(ajaxurl,e,function(e){!0===e.success&&(l("td.last_sync_message").text(e.data.last_sync_message),l("td.last_sync_action").text(e.data.last_sync_action),l("td.last_sync_status").text(e.data.last_sync_status),l("td.last_sync").text(e.data.last_sync),"1"===e.data.last_sync_status&&l("td.last_sync_status").text("success"))})}l(document).on("change","select#wordpress_object",function(){var e;s("wordpress",l(this).val()),clearTimeout(e),e=setTimeout(function(){l("table.fields tbody tr").fadeOut(),l("table.fields tbody tr").not(":last").remove()},1e3)}),l(document).on("change","select#salesforce_object",function(){var e;s("salesforce",l(this).val()),clearTimeout(e),e=setTimeout(function(){l("table.fields tbody tr").fadeOut(),l("table.fields tbody tr").not(":last").remove()},1e3)}),l(document).on("change",".object-sync-for-salesforce-enable-soap input",function(){e()}),l(document).on("click",".column-is_prematch input",function(){l(".column-is_prematch input").not(this).prop("checked",!1)}),l(document).on("click",".column-is_key input",function(){l(".column-is_key input").not(this).prop("checked",!1)}),l(document).ready(function(){e(),s("wordpress",l("select#wordpress_object").val()),s("salesforce",l("select#salesforce_object").val()),jQuery.fn.select2&&(l("select#wordpress_object").select2(),l("select#salesforce_object").select2(),l("select#salesforce_record_type_default").select2(),l("select#pull_trigger_field").select2(),l(".column-wordpress_field select").select2(),l(".column-salesforce_field select").select2()),l(document).ajaxStart(function(){l(".spinner").addClass("is-active")}).ajaxStop(function(){l(".spinner").removeClass("is-active")}),t(),a(),l(".salesforce_user_ajax_message").hide(),0This object has been pushed to Salesforce.

").fadeIn().delay(4e3).fadeOut())}),!1}),l(".pull_from_salesforce_button").on("click",function(){var e={action:"pull_from_salesforce",salesforce_id:l("#salesforce_id_ajax").val(),wordpress_object:l("#wordpress_object_ajax").val()};return l.post(ajaxurl,e,function(e){!0===e.success&&(o(),l(".salesforce_user_ajax_message").width(l(".mapped-salesforce-user").width()-27),l(".salesforce_user_ajax_message").html("

This object has been pulled from Salesforce.

").fadeIn().delay(4e3).fadeOut())}),!1}),l("#clear-sfwp-cache").click(function(){var s=l(this);return l.post(ajaxurl,{action:"clear_sfwp_cache"},function(e){!0===e.success&&!0===e.data.success&&s.parent().html(e.data.message).fadeIn()}),!1})})}(jQuery); \ No newline at end of file diff --git a/assets/js/src/admin.js b/assets/js/src/admin.js index 2fd327f2..511ec82f 100644 --- a/assets/js/src/admin.js +++ b/assets/js/src/admin.js @@ -138,13 +138,19 @@ */ function addFieldMappingRow() { $( '#add-field-mapping' ).click( function() { + var salesforceObject = $( '#salesforce_object' ).val(); + var wordpressObject = $( '#wordpress_object' ).val(); var newKey = new Date().getUTCMilliseconds(); var lastRow = $( 'table.fields tbody tr' ).last(); var oldKey = lastRow.attr( 'data-key' ); oldKey = new RegExp( oldKey, 'g' ); $( this ).text( 'Add another field mapping' ); - fieldmapFields( oldKey, newKey, lastRow ); - $( this ).parent().find( '.missing-object' ).remove(); + if ( '' !== wordpressObject && '' !== salesforceObject ) { + fieldmapFields( oldKey, newKey, lastRow ); + $( this ).parent().find( '.missing-object' ).remove(); + } else { + $( this ).parent().prepend( '
You have to pick a WordPress object and a Salesforce object to add field mapping.
' ); + } return false; }); } @@ -312,6 +318,10 @@ // for main admin settings toggleSoapFields(); + // if there is already a wp or sf object, make sure it has the right fields + loadFieldOptions( 'wordpress', $( 'select#wordpress_object' ).val() ); + loadFieldOptions( 'salesforce', $( 'select#salesforce_object' ).val() ); + if ( jQuery.fn.select2 ) { $( 'select#wordpress_object' ).select2(); $( 'select#salesforce_object' ).select2(); From 8017ff2984047a517027cb038cdaf2fd6d0f63ad Mon Sep 17 00:00:00 2001 From: Jonathan Stegall Date: Sun, 5 Jan 2020 08:26:22 -0600 Subject: [PATCH 11/27] never delete that template row though --- assets/js/object-sync-for-salesforce-admin.js | 6 +++--- assets/js/object-sync-for-salesforce-admin.min.js | 2 +- assets/js/src/admin.js | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/assets/js/object-sync-for-salesforce-admin.js b/assets/js/object-sync-for-salesforce-admin.js index c649d569..b2ab2f11 100644 --- a/assets/js/object-sync-for-salesforce-admin.js +++ b/assets/js/object-sync-for-salesforce-admin.js @@ -291,7 +291,7 @@ clearTimeout(timeout); timeout = setTimeout(function () { $('table.fields tbody tr').fadeOut(); - $('table.fields tbody tr').not(':last').remove(); + $('table.fields tbody tr').not('.fieldmap-template').remove(); }, 1000); }); // load available options if the salesforce object changes @@ -301,7 +301,7 @@ clearTimeout(timeout); timeout = setTimeout(function () { $('table.fields tbody tr').fadeOut(); - $('table.fields tbody tr').not(':last').remove(); + $('table.fields tbody tr').not('.fieldmap-template').remove(); }, 1000); }); // show wsdl field if soap is enabled @@ -362,4 +362,4 @@ clearSfwpCacheLink(); }); })(jQuery); -//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFkbWluLmpzIl0sIm5hbWVzIjpbIiQiLCJsb2FkRmllbGRPcHRpb25zIiwic3lzdGVtIiwib2JqZWN0X25hbWUiLCJkYXRhIiwiZmllbGRzIiwiZmlyc3RfZmllbGQiLCJmaXJzdCIsInRleHQiLCJwb3N0IiwiYWpheHVybCIsInJlc3BvbnNlIiwiZWFjaCIsImluZGV4IiwidmFsdWUiLCJrZXkiLCJuYW1lIiwibGFiZWwiLCJodG1sIiwidG9nZ2xlU29hcEZpZWxkcyIsImxlbmd0aCIsImlzIiwic2hvdyIsImhpZGUiLCJzYWxlc2ZvcmNlT2JqZWN0RmllbGRzIiwiZGVsYXkiLCJ0aW1lciIsImNhbGxiYWNrIiwibXMiLCJjbGVhclRpbWVvdXQiLCJzZXRUaW1lb3V0Iiwib24iLCJ0aGF0IiwiZGVsYXlUaW1lIiwicmVjb3JkVHlwZXNBbGxvd2VkTWFya3VwIiwicmVjb3JkVHlwZURlZmF1bHRNYXJrdXAiLCJkYXRlTWFya3VwIiwicmVjb3JkVHlwZUluZm9zIiwialF1ZXJ5IiwiZm4iLCJzZWxlY3QyIiwiYWRkRmllbGRNYXBwaW5nUm93IiwiY2xpY2siLCJzYWxlc2ZvcmNlT2JqZWN0IiwidmFsIiwid29yZHByZXNzT2JqZWN0IiwibmV3S2V5IiwiRGF0ZSIsImdldFVUQ01pbGxpc2Vjb25kcyIsImxhc3RSb3ciLCJsYXN0Iiwib2xkS2V5IiwiYXR0ciIsIlJlZ0V4cCIsImZpZWxkbWFwRmllbGRzIiwicGFyZW50IiwiZmluZCIsInJlbW92ZSIsInByZXBlbmQiLCJuZXh0Um93IiwiZW5kIiwiY2xvbmUiLCJyZW1vdmVDbGFzcyIsImkiLCJoIiwicmVwbGFjZSIsImFwcGVuZCIsInB1c2hBbmRQdWxsT2JqZWN0cyIsIndvcmRwcmVzc0lkIiwic2FsZXNmb3JjZUlkIiwic3VjY2VzcyIsInVwZGF0ZVNhbGVzZm9yY2VVc2VyU3VtbWFyeSIsIndpZHRoIiwiZmFkZUluIiwiZmFkZU91dCIsIm1hcHBpbmdJZCIsImxhc3Rfc3luY19tZXNzYWdlIiwibGFzdF9zeW5jX2FjdGlvbiIsImxhc3Rfc3luY19zdGF0dXMiLCJsYXN0X3N5bmMiLCJjbGVhclNmd3BDYWNoZUxpbmsiLCJtZXNzYWdlIiwiZG9jdW1lbnQiLCJ0aW1lb3V0Iiwibm90IiwicHJvcCIsInJlYWR5IiwiYWpheFN0YXJ0IiwiYWRkQ2xhc3MiLCJhamF4U3RvcCJdLCJtYXBwaW5ncyI6Ijs7QUFBRSxXQUFVQSxDQUFWLEVBQWM7QUFFZixXQUFTQyxnQkFBVCxDQUEyQkMsTUFBM0IsRUFBbUNDLFdBQW5DLEVBQWlEO0FBQ2hELFFBQUlDLElBQUksR0FBRztBQUNWLGdCQUFXLFNBQVNGLE1BQVQsR0FBa0I7QUFEbkIsS0FBWDtBQUdBLFFBQUlHLE1BQU0sR0FBRyxFQUFiO0FBQ0EsUUFBSUMsV0FBVyxHQUFHTixDQUFDLENBQUUsYUFBYUUsTUFBYixHQUFzQixzQkFBeEIsQ0FBRCxDQUFpREssS0FBakQsR0FBeURDLElBQXpELEVBQWxCO0FBQ0FILElBQUFBLE1BQU0sSUFBSSxzQkFBc0JDLFdBQXRCLEdBQW9DLFdBQTlDOztBQUNBLFFBQUssZ0JBQWdCSixNQUFyQixFQUE4QjtBQUM3QkUsTUFBQUEsSUFBSSxDQUFDLGtCQUFELENBQUosR0FBMkJELFdBQTNCO0FBQ0EsS0FGRCxNQUVPLElBQUssaUJBQWlCRCxNQUF0QixFQUErQjtBQUNyQ0UsTUFBQUEsSUFBSSxDQUFDLG1CQUFELENBQUosR0FBNEJELFdBQTVCO0FBQ0EsS0FGTSxNQUVBO0FBQ04sYUFBT0UsTUFBUDtBQUNBOztBQUNETCxJQUFBQSxDQUFDLENBQUNTLElBQUYsQ0FBUUMsT0FBUixFQUFpQk4sSUFBakIsRUFBdUIsVUFBVU8sUUFBVixFQUFxQjtBQUMzQ1gsTUFBQUEsQ0FBQyxDQUFDWSxJQUFGLENBQVFELFFBQVEsQ0FBQ1AsSUFBVCxDQUFjQyxNQUF0QixFQUE4QixVQUFVUSxLQUFWLEVBQWlCQyxLQUFqQixFQUF5QjtBQUN0RCxZQUFLLGdCQUFnQlosTUFBckIsRUFBOEI7QUFDN0JHLFVBQUFBLE1BQU0sSUFBSSxvQkFB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RCxDQUFpQ3dDLE9BQWpDO0FBQ0F4QyxNQUFBQSxDQUFDLENBQUUsZ0NBQUYsQ0FBRCxDQUFzQ3dDLE9BQXRDO0FBQ0F4QyxNQUFBQSxDQUFDLENBQUUsaUNBQUYsQ0FBRCxDQUF1Q3dDLE9BQXZDO0FBQ0EsS0FoQjhCLENBa0IvQjs7O0FBQ0F4QyxJQUFBQSxDQUFDLENBQUVrRixRQUFGLENBQUQsQ0FBY0ssU0FBZCxDQUF5QixZQUFXO0FBQ25DdkYsTUFBQUEsQ0FBQyxDQUFFLFVBQUYsQ0FBRCxDQUFnQndGLFFBQWhCLENBQTBCLFdBQTFCO0FBQ0EsS0FGRCxFQUVHQyxRQUZILENBRWEsWUFBVztBQUN2QnpGLE1BQUFBLENBQUMsQ0FBRSxVQUFGLENBQUQsQ0FBZ0I4RCxXQUFoQixDQUE2QixXQUE3QjtBQUNBLEtBSkQ7QUFLQXRDLElBQUFBLHNCQUFzQjtBQUN0QmlCLElBQUFBLGtCQUFrQixHQXpCYSxDQTJCL0I7O0FBQ0EwQixJQUFBQSxrQkFBa0IsR0E1QmEsQ0E4Qi9COztBQUNBYSxJQUFBQSxrQkFBa0I7QUFDbEIsR0FoQ0Q7QUFpQ0EsQ0E1VkMsRUE0VkMxQyxNQTVWRCxDQUFGIiwiZmlsZSI6Im9iamVjdC1zeW5jLWZvci1zYWxlc2ZvcmNlLWFkbWluLmpzIiwic291cmNlc0NvbnRlbnQiOlsiKCBmdW5jdGlvbiggJCApIHtcblxuXHRmdW5jdGlvbiBsb2FkRmllbGRPcHRpb25zKCBzeXN0ZW0sIG9iamVjdF9uYW1lICkge1xuXHRcdHZhciBkYXRhID0ge1xuXHRcdFx0J2FjdGlvbicgOiAnZ2V0XycgKyBzeXN0ZW0gKyAnX29iamVjdF9maWVsZHMnLFxuXHRcdH1cblx0XHR2YXIgZmllbGRzID0gJyc7XG5cdFx0dmFyIGZpcnN0X2ZpZWxkID0gJCggJy5jb2x1bW4tJyArIHN5c3RlbSArICdfZmllbGQgc2VsZWN0IG9wdGlvbicpLmZpcnN0KCkudGV4dCgpO1xuXHRcdGZpZWxkcyArPSAnPG9wdGlvbiB2YWx1ZT1cIlwiPicgKyBmaXJzdF9maWVsZCArICc8L29wdGlvbj4nO1xuXHRcdGlmICggJ3dvcmRwcmVzcycgPT09IHN5c3RlbSApIHtcblx0XHRcdGRhdGFbJ3dvcmRwcmVzc19vYmplY3QnXSA9IG9iamVjdF9uYW1lO1xuXHRcdH0gZWxzZSBpZiAoICdzYWxlc2ZvcmNlJyA9PT0gc3lzdGVtICkge1xuXHRcdFx0ZGF0YVsnc2FsZXNmb3JjZV9vYmplY3QnXSA9IG9iamVjdF9uYW1lO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gZmllbGRzO1xuXHRcdH1cblx0XHQkLnBvc3QoIGFqYXh1cmwsIGRhdGEsIGZ1bmN0aW9uKCByZXNwb25zZSApIHtcblx0XHRcdCQuZWFjaCggcmVzcG9uc2UuZGF0YS5maWVsZHMsIGZ1bmN0aW9uKCBpbmRleCwgdmFsdWUgKSB7XG5cdFx0XHRcdGlmICggJ3dvcmRwcmVzcycgPT09IHN5c3RlbSApIHtcblx0XHRcdFx0XHRmaWVsZHMgKz0gJzxvcHRpb24gdmFsdWU9XCInICsgdmFsdWUua2V5ICsgJ1wiPicgKyB2YWx1ZS5rZXkgKyAnPC9vcHRpb24+Jztcblx0XHRcdFx0fSBlbHNlIGlmICggJ3NhbGVzZm9yY2UnID09PSBzeXN0ZW0gKSB7XG5cdFx0XHRcdFx0ZmllbGRzICs9ICc8b3B0aW9uIHZhbHVlPVwiJyArIHZhbHVlLm5hbWUgKyAnXCI+JyArIHZhbHVlLmxhYmVsICsgJzwvb3B0aW9uPic7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdFx0JCggJy5jb2x1bW4tJyArIHN5c3RlbSArICdfZmllbGQgc2VsZWN0JyApLmh0bWwoIGZpZWxkcyApO1xuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIERvbid0IHNob3cgdGhlIFdTREwgZmlsZSBmaWVsZCB1bmxlc3MgU09BUCBpcyBlbmFibGVkXG5cdCAqL1xuXHRmdW5jdGlvbiB0b2dnbGVTb2FwRmllbGRzKCkge1xuXHRcdGlmICggMCA8ICQoICcub2JqZWN0LXN5bmMtZm9yLXNhbGVzZm9yY2UtZW5hYmxlLXNvYXAnICkubGVuZ3RoICkge1xuXHRcdFx0aWYgKCAkKCAnLm9iamVjdC1zeW5jLWZvci1zYWxlc2ZvcmNlLWVuYWJsZS1zb2FwIGlucHV0JyApLmlzKCAnOmNoZWNrZWQnICkgKSB7XG5cdFx0XHRcdCQoICcub2JqZWN0LXN5bmMtZm9yLXNhbGVzZm9yY2Utc29hcC13c2RsLXBhdGgnICkuc2hvdygpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0JCggJy5vYmplY3Qtc3luYy1mb3Itc2FsZXNmb3JjZS1zb2FwLXdzZGwtcGF0aCcgKS5oaWRlKCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEdlbmVyYXRlcyB0aGUgU2FsZXNmb3JjZSBvYmplY3QgZmllbGRzIGJhc2VkIG9uIHRoZSBkcm9wZG93biBhY3Rpdml0eSBhbmQgQVBJIHJlc3VsdHMuXG5cdCAqL1xuXHRmdW5jdGlvbiBzYWxlc2ZvcmNlT2JqZWN0RmllbGRzKCkge1xuXG5cdFx0dmFyIGRlbGF5ID0gKCBmdW5jdGlvbigpIHtcblx0XHRcdHZhciB0aW1lciA9IDA7XG5cdFx0XHRyZXR1cm4gZnVuY3Rpb24oIGNhbGxiYWNrLCBtcyApIHtcblx0XHRcdFx0Y2xlYXJUaW1lb3V0ICggdGltZXIgKTtcblx0XHRcdFx0dGltZXIgPSBzZXRUaW1lb3V0KCBjYWxsYmFjaywgbXMgKTtcblx0XHRcdH07XG5cdFx0fSgpICk7XG5cblx0XHRpZiAoIDAgPT09ICQoICcuc2FsZXNmb3JjZV9yZWNvcmRfdHlwZXNfYWxsb3dlZCA+IConICkubGVuZ3RoICkge1xuXHRcdFx0JCggJy5zYWxlc2ZvcmNlX3JlY29yZF90eXBlc19hbGxvd2VkJyApLmhpZGUoKTtcblx0XHR9XG5cblx0XHRpZiAoIDAgPT09ICQoICcuc2FsZXNmb3JjZV9yZWNvcmRfdHlwZV9kZWZhdWx0ID4gKicgKS5sZW5ndGggKSB7XG5cdFx0XHQkKCAnLnNhbGVzZm9yY2VfcmVjb3JkX3R5cGVfZGVmYXVsdCcgKS5oaWRlKCk7XG5cdFx0fVxuXHRcdGlmICggMCA9PT0gJCggJy5wdWxsX3RyaWdnZXJfZmllbGQgPiAqJyApLmxlbmd0aCApIHtcblx0XHRcdCQoICcucHVsbF90cmlnZ2VyX2ZpZWxkJyApLmhpZGUoKTtcblx0XHR9XG5cblx0XHQkKCAnI3NhbGVzZm9yY2Vfb2JqZWN0JyApLm9uKCAnY2hhbmdlJywgZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgdGhhdCA9IHRoaXM7XG5cdFx0XHR2YXIgZGVsYXlUaW1lID0gMTAwMDtcblx0XHRcdGRlbGF5KCBmdW5jdGlvbigpIHtcblx0XHRcdFx0dmFyIGRhdGEgPSB7XG5cdFx0XHRcdFx0J2FjdGlvbicgOiAnZ2V0X3NhbGVzZm9yY2Vfb2JqZWN0X2Rlc2NyaXB0aW9uJyxcblx0XHRcdFx0XHQnaW5jbHVkZScgOiBbICdmaWVsZHMnLCAncmVjb3JkVHlwZUluZm9zJyBdLFxuXHRcdFx0XHRcdCdmaWVsZF90eXBlJyA6ICdkYXRldGltZScsXG5cdFx0XHRcdFx0J3NhbGVzZm9yY2Vfb2JqZWN0JyA6IHRoYXQudmFsdWVcblx0XHRcdFx0fVxuXHRcdFx0XHQkLnBvc3QoIGFqYXh1cmwsIGRhdGEsIGZ1bmN0aW9uKCByZXNwb25zZSApIHtcblxuXHRcdFx0XHRcdHZhciByZWNvcmRUeXBlc0FsbG93ZWRNYXJrdXAgPSAnJywgcmVjb3JkVHlwZURlZmF1bHRNYXJrdXAgPSAnJywgZGF0ZU1hcmt1cCA9ICcnO1xuXG5cdFx0XHRcdFx0aWYgKCAwIDwgJCggcmVzcG9uc2UuZGF0YS5yZWNvcmRUeXBlSW5mb3MgKS5sZW5ndGggKSB7XG5cdFx0XHRcdFx0XHRyZWNvcmRUeXBlc0FsbG93ZWRNYXJrdXAgKz0gJzxsYWJlbCBmb3I9XCJzYWxlc2ZvcmNlX3JlY29yZF90eXBlc19hbGxvd2VkXCI+QWxsb3dlZCBSZWNvcmQgVHlwZXM6PC9sYWJlbD48ZGl2IGNsYXNzPVwiY2hlY2tib3hlc1wiPic7XG5cdFx0XHRcdFx0XHQkLmVhY2goIHJlc3BvbnNlLmRhdGEucmVjb3JkVHlwZUluZm9zLCBmdW5jdGlvbiggaW5kZXgsIHZhbHVlICkge1xuXHRcdFx0XHRcdFx0XHRyZWNvcmRUeXBlc0FsbG93ZWRNYXJrdXAgKz0gJzxsYWJlbD48aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgY2xhc3M9XCJmb3JtLWNoZWNrYm94XCIgdmFsdWU9XCInICsgaW5kZXggKyAnXCIgbmFtZT1cInNhbGVzZm9yY2VfcmVjb3JkX3R5cGVzX2FsbG93ZWRbJyArIGluZGV4ICsgJ11cIiBpZD1cInNhbGVzZm9yY2VfcmVjb3JkX3R5cGVzX2FsbG93ZWQtJyArIGluZGV4ICsgJ1wiPiAnICsgdmFsdWUgKyAnPC9sYWJlbD4nO1xuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRyZWNvcmRUeXBlc0FsbG93ZWRNYXJrdXAgKz0gJzwvZGl2Pic7XG5cblxuXHRcdFx0XHRcdFx0cmVjb3JkVHlwZURlZmF1bHRNYXJrdXAgKz0gJzxsYWJlbCBmb3I9XCJzYWxlc2ZvcmNlX3JlY29yZF90eXBlX2RlZmF1bHRcIj5EZWZhdWx0IFJlY29yZCBUeXBlOjwvbGFiZWw+Jztcblx0XHRcdFx0XHRcdHJlY29yZFR5cGVEZWZhdWx0TWFya3VwICs9ICc8c2VsZWN0IG5hbWU9XCJzYWxlc2ZvcmNlX3JlY29yZF90eXBlX2RlZmF1bHRcIiBpZD1cInNhbGVzZm9yY2VfcmVjb3JkX3R5cGVfZGVmYXVsdFwiPjxvcHRpb24gdmFsdWU9XCJcIj4tIFNlbGVjdCByZWNvcmQgdHlwZSAtPC9vcHRpb24+Jztcblx0XHRcdFx0XHRcdCQuZWFjaCggcmVzcG9uc2UuZGF0YS5yZWNvcmRUeXBlSW5mb3MsIGZ1bmN0aW9uKCBpbmRleCwgdmFsdWUgKSB7XG5cdFx0XHRcdFx0XHRcdHJlY29yZFR5cGVEZWZhdWx0TWFya3VwICs9ICc8b3B0aW9uIHZhbHVlPVwiJyArIGluZGV4ICsgJ1wiPicgKyB2YWx1ZSArICc8L29wdGlvbj4nO1xuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0JCggJy5zYWxlc2ZvcmNlX3JlY29yZF90eXBlc19hbGxvd2VkJyApLmh0bWwoIHJlY29yZFR5cGVzQWxsb3dlZE1hcmt1cCApO1xuXHRcdFx0XHRcdCQoICcuc2FsZXNmb3JjZV9yZWNvcmRfdHlwZV9kZWZhdWx0JyApLmh0bWwoIHJlY29yZFR5cGVEZWZhdWx0TWFya3VwICk7XG5cblx0XHRcdFx0XHRpZiAoIDAgPCAkKCByZXNwb25zZS5kYXRhLmZpZWxkcyApLmxlbmd0aCApIHtcblx0XHRcdFx0XHRcdGRhdGVNYXJrdXAgKz0gJzxsYWJlbCBmb3I9XCJwdWxsX3RyaWdnZXJfZmllbGRcIj5EYXRlIGZpZWxkIHRvIHRyaWdnZXIgcHVsbDo8L2xhYmVsPic7XG5cdFx0XHRcdFx0XHRkYXRlTWFya3VwICs9ICc8c2VsZWN0IG5hbWU9XCJwdWxsX3RyaWdnZXJfZmllbGRcIiBpZD1cInB1bGxfdHJpZ2dlcl9maWVsZFwiPjxvcHRpb24gdmFsdWU9XCJcIj4tIFNlbGVjdCBkYXRlIGZpZWxkIC08L29wdGlvbj4nXG5cdFx0XHRcdFx0XHQkLmVhY2goIHJlc3BvbnNlLmRhdGEuZmllbGRzLCBmdW5jdGlvbiggaW5kZXgsIHZhbHVlICkge1xuXHRcdFx0XHRcdFx0XHRkYXRlTWFya3VwICs9ICc8b3B0aW9uIHZhbHVlPVwiJyArIHZhbHVlLm5hbWUgKyAnXCI+JyArIHZhbHVlLmxhYmVsICsgJzwvb3B0aW9uPic7XG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdGRhdGVNYXJrdXAgKz0gJzwvc2VsZWN0Pic7XG5cdFx0XHRcdFx0XHRkYXRlTWFya3VwICs9ICc8cCBjbGFzcz1cImRlc2NyaXB0aW9uXCI+VGhlc2UgYXJlIGRhdGUgZmllbGRzIHRoYXQgY2FuIGNhdXNlIFdvcmRQcmVzcyB0byBwdWxsIGFuIHVwZGF0ZSBmcm9tIFNhbGVzZm9yY2UsIGFjY29yZGluZyB0byB0aGUgPGNvZGU+c2FsZXNmb3JjZV9wdWxsPC9jb2RlPiBjbGFzcy48L3A+J1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdCQoICcucHVsbF90cmlnZ2VyX2ZpZWxkJyApLmh0bWwoIGRhdGVNYXJrdXAgKTtcblxuXHRcdFx0XHRcdGlmICggJycgIT09IHJlY29yZFR5cGVzQWxsb3dlZE1hcmt1cCApIHtcblx0XHRcdFx0XHRcdCQoICcuc2FsZXNmb3JjZV9yZWNvcmRfdHlwZXNfYWxsb3dlZCcgKS5zaG93KCk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdCQoICcuc2FsZXNmb3JjZV9yZWNvcmRfdHlwZXNfYWxsb3dlZCcgKS5oaWRlKCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGlmICggJycgIT09IHJlY29yZFR5cGVEZWZhdWx0TWFya3VwICkge1xuXHRcdFx0XHRcdFx0JCggJy5zYWxlc2ZvcmNlX3JlY29yZF90eXBlX2RlZmF1bHQnICkuc2hvdygpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHQkKCAnLnNhbGVzZm9yY2VfcmVjb3JkX3R5cGVfZGVmYXVsdCcgKS5oaWRlKCk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aWYgKCAnJyAhPT0gZGF0ZU1hcmt1cCApIHtcblx0XHRcdFx0XHRcdCQoICcucHVsbF90cmlnZ2VyX2ZpZWxkJyApLnNob3coKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0JCggJy5wdWxsX3RyaWdnZXJfZmllbGQnICkuaGlkZSgpO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGlmICggalF1ZXJ5LmZuLnNlbGVjdDIgKSB7XG5cdFx0XHRcdFx0XHQkKCAnc2VsZWN0I3NhbGVzZm9yY2VfcmVjb3JkX3R5cGVfZGVmYXVsdCcgKS5zZWxlY3QyKCk7XG5cdFx0XHRcdFx0XHQkKCAnc2VsZWN0I3B1bGxfdHJpZ2dlcl9maWVsZCcgKS5zZWxlY3QyKCk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdH0pO1xuXHRcdFx0fSwgZGVsYXlUaW1lICk7XG5cdFx0fSk7XG5cdH1cblx0LyoqXG5cdCAqIER1cGxpY2F0ZXMgdGhlIGZpZWxkcyBmb3IgYSBuZXcgcm93IGluIHRoZSBmaWVsZG1hcCBvcHRpb25zIHNjcmVlbi5cblx0ICovXG5cdCBmdW5jdGlvbiBhZGRGaWVsZE1hcHBpbmdSb3coKSB7XG5cdFx0JCggJyNhZGQtZmllbGQtbWFwcGluZycgKS5jbGljayggZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgc2FsZXNmb3JjZU9iamVjdCA9ICQoICcjc2FsZXNmb3JjZV9vYmplY3QnICkudmFsKCk7XG5cdFx0XHR2YXIgd29yZHByZXNzT2JqZWN0ID0gJCggJyN3b3JkcHJlc3Nfb2JqZWN0JyApLnZhbCgpO1xuXHRcdFx0dmFyIG5ld0tleSA9IG5ldyBEYXRlKCkuZ2V0VVRDTWlsbGlzZWNvbmRzKCk7XG5cdFx0XHR2YXIgbGFzdFJvdyA9ICQoICd0YWJsZS5maWVsZHMgdGJvZHkgdHInICkubGFzdCgpO1xuXHRcdFx0dmFyIG9sZEtleSA9IGxhc3RSb3cuYXR0ciggJ2RhdGEta2V5JyApO1xuXHRcdFx0b2xkS2V5ID0gbmV3IFJlZ0V4cCggb2xkS2V5LCAnZycgKTtcblx0XHRcdCQoIHRoaXMgKS50ZXh0KCAnQWRkIGFub3RoZXIgZmllbGQgbWFwcGluZycgKTtcblx0XHRcdGlmICggJycgIT09IHdvcmRwcmVzc09iamVjdCAmJiAnJyAhPT0gc2FsZXNmb3JjZU9iamVjdCApIHtcblx0XHRcdFx0ZmllbGRtYXBGaWVsZHMoIG9sZEtleSwgbmV3S2V5LCBsYXN0Um93ICk7XG5cdFx0XHRcdCQoIHRoaXMgKS5wYXJlbnQoKS5maW5kKCAnLm1pc3Npbmctb2JqZWN0JyApLnJlbW92ZSgpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0JCggdGhpcyApLnBhcmVudCgpLnByZXBlbmQoICc8ZGl2IGNsYXNzPVwiZXJyb3IgbWlzc2luZy1vYmplY3RcIj48c3Bhbj5Zb3UgaGF2ZSB0byBwaWNrIGEgV29yZFByZXNzIG9iamVjdCBhbmQgYSBTYWxlc2ZvcmNlIG9iamVjdCB0byBhZGQgZmllbGQgbWFwcGluZy48L3NwYW4+PC9kaXY+JyApO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH0pO1xuXHR9XG5cdC8qKlxuXHQgKiBHZXRzIHRoZSBXb3JkUHJlc3MgYW5kIFNhbGVzZm9yY2UgZmllbGQgcmVzdWx0cyB2aWEgYW4gQWpheCBjYWxsXG5cdCAqIEBwYXJhbSBzdHJpbmcgb2xkS2V5IHRoZSBkYXRhLWtleSBhdHRyaWJ1dGUgb2YgdGhlIHNldCB0aGF0IGlzIGJlaW5nIGNsb25lZFxuXHQgKiBAcGFyYW0gc3RyaW5nIG5ld0tleSB0aGUgZGF0YS1rZXkgYXR0cmlidXRlIGZvciB0aGUgb25lIHdlJ3JlIGFwcGVuZGluZ1xuXHQgKiBAcGFyYW0gb2JqZWN0IGxhc3RSb3cgdGhlIGxhc3Qgc2V0IG9mIHRoZSBmaWVsZG1hcFxuXHQgKi9cblx0ZnVuY3Rpb24gZmllbGRtYXBGaWVsZHMoIG9sZEtleSwgbmV3S2V5LCBsYXN0Um93ICkge1xuXHRcdHZhciBuZXh0Um93ID0gJyc7XG4gICAgICAgIGlmICggalF1ZXJ5LmZuLnNlbGVjdDIgKSB7XG4gICAgICAgIFx0bmV4dFJvdyA9IGxhc3RSb3cuZmluZCggJ3NlbGVjdCcgKVxuXHQgICAgICAgICAgICAuc2VsZWN0MiggJ2Rlc3Ryb3knIClcblx0ICAgICAgICAgICAgLmVuZCgpXG5cdCAgICAgICAgICAgIC5jbG9uZSggdHJ1ZSApLnJlbW92ZUNsYXNzKCAnZmllbGRtYXAtdGVtcGxhdGUnICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgIFx0bmV4dFJvdyA9IGxhc3RSb3cuY2xvbmUoIHRydWUgKTtcbiAgICAgICAgfVxuXHRcdCQoIG5leHRSb3cgKS5hdHRyKCAnZGF0YS1rZXknLCBuZXdLZXkgKTtcblx0XHQkKCBuZXh0Um93ICkuZWFjaChmdW5jdGlvbigpIHtcblx0XHRcdCQoIHRoaXMgKS5odG1sKCBmdW5jdGlvbiggaSwgaCApIHtcblx0XHRcdFx0cmV0dXJuIGgucmVwbGFjZSggb2xkS2V5LCBuZXdLZXkgKTtcblx0XHRcdH0pO1xuXHRcdH0pO1xuXHRcdCQoICd0YWJsZS5maWVsZHMgdGJvZHknICkuYXBwZW5kKCBuZXh0Um93ICk7XG5cdFx0aWYgKCBqUXVlcnkuZm4uc2VsZWN0MiApIHtcblx0XHRcdGxhc3RSb3cuZmluZCggJ3NlbGVjdCcgKS5zZWxlY3QyKCk7XG5cdFx0XHRuZXh0Um93LmZpbmQoICdzZWxlY3QnICkuc2VsZWN0MigpO1xuXHRcdH1cblx0fVxuXHQvKipcblx0ICogSGFuZGxlIG1hbnVhbCBwdXNoIGFuZCBwdWxsIG9mIG9iamVjdHNcblx0ICovXG5cdGZ1bmN0aW9uIHB1c2hBbmRQdWxsT2JqZWN0cygpIHtcblx0XHQkKCAnLnNhbGVzZm9yY2VfdXNlcl9hamF4X21lc3NhZ2UnICkuaGlkZSgpO1xuXHRcdGlmICggMCA8ICQoICcjd29yZHByZXNzX29iamVjdF9hamF4JyApLmxlbmd0aCApIHtcblx0XHRcdCQoICcucHVzaF90b19zYWxlc2ZvcmNlX2J1dHRvbicgKS5vbiggJ2NsaWNrJywgZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHZhciB3b3JkcHJlc3NPYmplY3QgPSAkKCAnI3dvcmRwcmVzc19vYmplY3RfYWpheCcgKS52YWwoKTtcblx0XHRcdFx0dmFyIHdvcmRwcmVzc0lkID0gJCggJyN3b3JkcHJlc3NfaWRfYWpheCcgKS52YWwoKTtcblx0XHRcdFx0dmFyIHNhbGVzZm9yY2VJZCA9ICQoICcjc2FsZXNmb3JjZV9pZF9hamF4JyApLnZhbCgpO1xuXHRcdFx0XHR2YXIgZGF0YSA9IHtcblx0XHRcdFx0XHQnYWN0aW9uJyA6ICdwdXNoX3RvX3NhbGVzZm9yY2UnLFxuXHRcdFx0XHRcdCd3b3JkcHJlc3Nfb2JqZWN0JyA6IHdvcmRwcmVzc09iamVjdCxcblx0XHRcdFx0XHQnd29yZHByZXNzX2lkJyA6IHdvcmRwcmVzc0lkLFxuXHRcdFx0XHRcdCdzYWxlc2ZvcmNlX2lkJyA6IHNhbGVzZm9yY2VJZFxuXHRcdFx0XHR9XG5cdFx0XHRcdCQucG9zdCggYWpheHVybCwgZGF0YSwgZnVuY3Rpb24oIHJlc3BvbnNlICkge1xuXHRcdFx0XHRcdGlmICggdHJ1ZSA9PT0gcmVzcG9uc2Uuc3VjY2VzcyApIHtcblx0XHRcdFx0XHRcdHVwZGF0ZVNhbGVzZm9yY2VVc2VyU3VtbWFyeSgpO1xuXHRcdFx0XHRcdFx0JCggJy5zYWxlc2ZvcmNlX3VzZXJfYWpheF9tZXNzYWdlJyApLndpZHRoKCAkKCAnLm1hcHBlZC1zYWxlc2ZvcmNlLXVzZXInICkud2lkdGgoKSAtIDI3ICk7XG5cdFx0XHRcdFx0XHQkKCAnLnNhbGVzZm9yY2VfdXNlcl9hamF4X21lc3NhZ2UnICkuaHRtbCggJzxwPlRoaXMgb2JqZWN0IGhhcyBiZWVuIHB1c2hlZCB0byBTYWxlc2ZvcmNlLjwvcD4nICkuZmFkZUluKCkuZGVsYXkoIDQwMDAgKS5mYWRlT3V0KCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdCQoICcucHVsbF9mcm9tX3NhbGVzZm9yY2VfYnV0dG9uJyApLm9uKCAnY2xpY2snLCBmdW5jdGlvbigpIHtcblx0XHRcdHZhciBzYWxlc2ZvcmNlSWQgPSAkKCAnI3NhbGVzZm9yY2VfaWRfYWpheCcgKS52YWwoKTtcblx0XHRcdHZhciB3b3JkcHJlc3NPYmplY3QgPSAkKCAnI3dvcmRwcmVzc19vYmplY3RfYWpheCcgKS52YWwoKTtcblx0XHRcdHZhciBkYXRhID0ge1xuXHRcdFx0XHQnYWN0aW9uJyA6ICdwdWxsX2Zyb21fc2FsZXNmb3JjZScsXG5cdFx0XHRcdCdzYWxlc2ZvcmNlX2lkJyA6IHNhbGVzZm9yY2VJZCxcblx0XHRcdFx0J3dvcmRwcmVzc19vYmplY3QnIDogd29yZHByZXNzT2JqZWN0XG5cdFx0XHR9XG5cdFx0XHQkLnBvc3QoIGFqYXh1cmwsIGRhdGEsIGZ1bmN0aW9uKCByZXNwb25zZSApIHtcblx0XHRcdFx0aWYgKCB0cnVlID09PSByZXNwb25zZS5zdWNjZXNzICkge1xuXHRcdFx0XHRcdHVwZGF0ZVNhbGVzZm9yY2VVc2VyU3VtbWFyeSgpO1xuXHRcdFx0XHRcdCQoICcuc2FsZXNmb3JjZV91c2VyX2FqYXhfbWVzc2FnZScgKS53aWR0aCggJCggJy5tYXBwZWQtc2FsZXNmb3JjZS11c2VyJyApLndpZHRoKCkgLSAyNyApO1xuXHRcdFx0XHRcdCQoICcuc2FsZXNmb3JjZV91c2VyX2FqYXhfbWVzc2FnZScgKS5odG1sKCAnPHA+VGhpcyBvYmplY3QgaGFzIGJlZW4gcHVsbGVkIGZyb20gU2FsZXNmb3JjZS48L3A+JyApLmZhZGVJbigpLmRlbGF5KCA0MDAwICkuZmFkZU91dCgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9KTtcblx0fVxuXHQvKipcblx0ICogVXBkYXRlcyB0aGUgdXNlciBwcm9maWxlIHN1bW1hcnkgb2YgU2FsZXNmb3JjZSBpbmZvLlxuXHQgKi9cblx0ZnVuY3Rpb24gdXBkYXRlU2FsZXNmb3JjZVVzZXJTdW1tYXJ5KCkge1xuXHRcdHZhciBtYXBwaW5nSWQgPSAkKCAnI21hcHBpbmdfaWRfYWpheCcgKS52YWwoKTtcblx0XHR2YXIgZGF0YSA9IHtcblx0XHRcdCdhY3Rpb24nIDogJ3JlZnJlc2hfbWFwcGVkX2RhdGEnLFxuXHRcdFx0J21hcHBpbmdfaWQnIDogbWFwcGluZ0lkXG5cdFx0fVxuXHRcdCQucG9zdCggYWpheHVybCwgZGF0YSwgZnVuY3Rpb24oIHJlc3BvbnNlICkge1xuXHRcdFx0aWYgKCB0cnVlID09PSByZXNwb25zZS5zdWNjZXNzICkge1xuXHRcdFx0XHQkKCAndGQubGFzdF9zeW5jX21lc3NhZ2UnICkudGV4dCggcmVzcG9uc2UuZGF0YS5sYXN0X3N5bmNfbWVzc2FnZSApO1xuXHRcdFx0XHQkKCAndGQubGFzdF9zeW5jX2FjdGlvbicgKS50ZXh0KCByZXNwb25zZS5kYXRhLmxhc3Rfc3luY19hY3Rpb24gKTtcblx0XHRcdFx0JCggJ3RkLmxhc3Rfc3luY19zdGF0dXMnICkudGV4dCggcmVzcG9uc2UuZGF0YS5sYXN0X3N5bmNfc3RhdHVzICk7XG5cdFx0XHRcdCQoICd0ZC5sYXN0X3N5bmMnICkudGV4dCggcmVzcG9uc2UuZGF0YS5sYXN0X3N5bmMgKTtcblx0XHRcdFx0aWYgKCAnMScgPT09IHJlc3BvbnNlLmRhdGEubGFzdF9zeW5jX3N0YXR1cyApIHtcblx0XHRcdFx0XHQkKCAndGQubGFzdF9zeW5jX3N0YXR1cycgKS50ZXh0KCAnc3VjY2VzcycgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cdC8qKlxuXHQgKiBDbGVhciB0aGUgcGx1Z2luIGNhY2hlIHZpYSBBamF4IHJlcXVlc3QuXG5cdCAqL1xuXHRmdW5jdGlvbiBjbGVhclNmd3BDYWNoZUxpbmsoKSB7XG5cdFx0JCggJyNjbGVhci1zZndwLWNhY2hlJyApLmNsaWNrKCBmdW5jdGlvbigpIHtcblx0XHRcdHZhciBkYXRhID0ge1xuXHRcdFx0XHQnYWN0aW9uJyA6ICdjbGVhcl9zZndwX2NhY2hlJ1xuXHRcdFx0fVxuXHRcdFx0dmFyIHRoYXQgPSAkKCB0aGlzICk7XG5cdFx0XHQkLnBvc3QoIGFqYXh1cmwsIGRhdGEsIGZ1bmN0aW9uKCByZXNwb25zZSApIHtcblx0XHRcdFx0aWYgKCB0cnVlID09PSByZXNwb25zZS5zdWNjZXNzICYmIHRydWUgPT09IHJlc3BvbnNlLmRhdGEuc3VjY2VzcyApIHtcblx0XHRcdFx0XHR0aGF0LnBhcmVudCgpLmh0bWwoIHJlc3BvbnNlLmRhdGEubWVzc2FnZSApLmZhZGVJbigpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9KTtcblx0fVxuXG5cdC8vIGxvYWQgYXZhaWxhYmxlIG9wdGlvbnMgaWYgdGhlIHdvcmRwcmVzcyBvYmplY3QgY2hhbmdlc1xuXHQkKCBkb2N1bWVudCApLm9uKCAnY2hhbmdlJywgJ3NlbGVjdCN3b3JkcHJlc3Nfb2JqZWN0JywgZnVuY3Rpb24oKSB7XG5cdFx0dmFyIHRpbWVvdXQ7XG5cdFx0bG9hZEZpZWxkT3B0aW9ucyggJ3dvcmRwcmVzcycsICQoIHRoaXMgKS52YWwoKSApO1xuXHRcdGNsZWFyVGltZW91dCggdGltZW91dCApO1xuXHRcdHRpbWVvdXQgPSBzZXRUaW1lb3V0KCBmdW5jdGlvbigpIHtcblx0XHRcdCQoICd0YWJsZS5maWVsZHMgdGJvZHkgdHInICkuZmFkZU91dCgpO1xuXHRcdFx0JCggJ3RhYmxlLmZpZWxkcyB0Ym9keSB0cicgKS5ub3QoICc6bGFzdCcgKS5yZW1vdmUoKTtcblx0XHR9LCAxMDAwICk7XG5cdH0pO1xuXG5cdC8vIGxvYWQgYXZhaWxhYmxlIG9wdGlvbnMgaWYgdGhlIHNhbGVzZm9yY2Ugb2JqZWN0IGNoYW5nZXNcblx0JCggZG9jdW1lbnQgKS5vbiggJ2NoYW5nZScsICdzZWxlY3Qjc2FsZXNmb3JjZV9vYmplY3QnLCBmdW5jdGlvbigpIHtcblx0XHR2YXIgdGltZW91dDtcblx0XHRsb2FkRmllbGRPcHRpb25zKCAnc2FsZXNmb3JjZScsICQoIHRoaXMgKS52YWwoKSApO1xuXHRcdGNsZWFyVGltZW91dCggdGltZW91dCApO1xuXHRcdHRpbWVvdXQgPSBzZXRUaW1lb3V0KCBmdW5jdGlvbigpIHtcblx0XHRcdCQoICd0YWJsZS5maWVsZHMgdGJvZHkgdHInICkuZmFkZU91dCgpO1xuXHRcdFx0JCggJ3RhYmxlLmZpZWxkcyB0Ym9keSB0cicgKS5ub3QoICc6bGFzdCcgKS5yZW1vdmUoKTtcblx0XHR9LCAxMDAwICk7XG5cdH0pO1xuXG5cdC8vIHNob3cgd3NkbCBmaWVsZCBpZiBzb2FwIGlzIGVuYWJsZWRcblx0JCggZG9jdW1lbnQgKS5vbiggJ2NoYW5nZScsICcub2JqZWN0LXN5bmMtZm9yLXNhbGVzZm9yY2UtZW5hYmxlLXNvYXAgaW5wdXQnLCBmdW5jdGlvbigpIHtcblx0XHR0b2dnbGVTb2FwRmllbGRzKCk7XG5cdH0pO1xuXG5cdC8qKlxuXHQgKiBBcyB0aGUgRHJ1cGFsIHBsdWdpbiBkb2VzLCB3ZSBvbmx5IGFsbG93IG9uZSBmaWVsZCB0byBiZSBhIHByZW1hdGNoXG5cdCAqL1xuXHQkKCBkb2N1bWVudCApLm9uKCAnY2xpY2snLCAnLmNvbHVtbi1pc19wcmVtYXRjaCBpbnB1dCcsIGZ1bmN0aW9uKCkge1xuXHRcdCQoICcuY29sdW1uLWlzX3ByZW1hdGNoIGlucHV0JyApLm5vdCggdGhpcyApLnByb3AoICdjaGVja2VkJywgZmFsc2UgKTtcblx0fSk7XG5cdC8qKlxuXHQgKiBBcyB0aGUgRHJ1cGFsIHBsdWdpbiBkb2VzLCB3ZSBvbmx5IGFsbG93IG9uZSBmaWVsZCB0byBiZSBhIGtleVxuXHQgKi9cblx0JCggZG9jdW1lbnQgKS5vbiggJ2NsaWNrJywgJy5jb2x1bW4taXNfa2V5IGlucHV0JywgZnVuY3Rpb24oKSB7XG5cdFx0JCggJy5jb2x1bW4taXNfa2V5IGlucHV0JyApLm5vdCggdGhpcyApLnByb3AoICdjaGVja2VkJywgZmFsc2UgKTtcblx0fSk7XG5cdC8qKlxuXHQgKiBXaGVuIHRoZSBwbHVnaW4gbG9hZHMsIGluaXRpYWxpemUgb3IgZW5hYmxlIHRoaW5nczpcblx0ICogU2VsZWN0MiBvbiBzZWxlY3QgZmllbGRzXG5cdCAqIENsZWFyIGZpZWxkcyB3aGVuIHRoZSB0YXJnZXRlZCBXb3JkUHJlc3Mgb3IgU2FsZXNmb3JjZSBvYmplY3QgdHlwZSBjaGFuZ2VzXG5cdCAqIEFkZCBhIHNwaW5uZXIgZm9yIEFqYXggcmVxdWVzdHNcblx0ICogTWFuYWdlIHRoZSBkaXNwbGF5IGZvciBTYWxlc2ZvcmNlIG9iamVjdCBmaWVsZHMgYmFzZWQgb24gQVBJIHJlcG9uc2Vcblx0ICogTWFudWFsIHB1c2ggYW5kIHB1bGxcblx0ICogQ2xlYXJpbmcgdGhlIGNhY2hlXG5cdCAqL1xuXHQkKCBkb2N1bWVudCApLnJlYWR5KCBmdW5jdGlvbigpIHtcblxuXHRcdC8vIGZvciBtYWluIGFkbWluIHNldHRpbmdzXG5cdFx0dG9nZ2xlU29hcEZpZWxkcygpO1xuXG5cdFx0Ly8gaWYgdGhlcmUgaXMgYWxyZWFkeSBhIHdwIG9yIHNmIG9iamVjdCwgbWFrZSBzdXJlIGl0IGhhcyB0aGUgcmlnaHQgZmllbGRzXG5cdFx0bG9hZEZpZWxkT3B0aW9ucyggJ3dvcmRwcmVzcycsICQoICdzZWxlY3Qjd29yZHByZXNzX29iamVjdCcgKS52YWwoKSApO1xuXHRcdGxvYWRGaWVsZE9wdGlvbnMoICdzYWxlc2ZvcmNlJywgJCggJ3NlbGVjdCNzYWxlc2ZvcmNlX29iamVjdCcgKS52YWwoKSApO1xuXG5cdFx0aWYgKCBqUXVlcnkuZm4uc2VsZWN0MiApIHtcblx0XHRcdCQoICdzZWxlY3Qjd29yZHByZXNzX29iamVjdCcgKS5zZWxlY3QyKCk7XG5cdFx0XHQkKCAnc2VsZWN0I3NhbGVzZm9yY2Vfb2JqZWN0JyApLnNlbGVjdDIoKTtcblx0XHRcdCQoICdzZWxlY3Qjc2FsZXNmb3JjZV9yZWNvcmRfdHlwZV9kZWZhdWx0JyApLnNlbGVjdDIoKTtcblx0XHRcdCQoICdzZWxlY3QjcHVsbF90cmlnZ2VyX2ZpZWxkJyApLnNlbGVjdDIoKTtcblx0XHRcdCQoICcuY29sdW1uLXdvcmRwcmVzc19maWVsZCBzZWxlY3QnICkuc2VsZWN0MigpO1xuXHRcdFx0JCggJy5jb2x1bW4tc2FsZXNmb3JjZV9maWVsZCBzZWxlY3QnICkuc2VsZWN0MigpO1xuXHRcdH1cblxuXHRcdC8vIHRvZG86IG5lZWQgdG8gZml4IHRoaXMgc28gaXQgZG9lc24ndCBydW4gYWxsIHRoZSBzcGlubmVycyBhdCB0aGUgc2FtZSB0aW1lIHdoZW4gdGhlcmUgYXJlIG11bHRpcGxlcyBvbiB0aGUgc2FtZSBwYWdlXG5cdFx0JCggZG9jdW1lbnQgKS5hamF4U3RhcnQoIGZ1bmN0aW9uKCkge1xuXHRcdFx0JCggJy5zcGlubmVyJyApLmFkZENsYXNzKCAnaXMtYWN0aXZlJyApO1xuXHRcdH0pLmFqYXhTdG9wKCBmdW5jdGlvbigpIHtcblx0XHRcdCQoICcuc3Bpbm5lcicgKS5yZW1vdmVDbGFzcyggJ2lzLWFjdGl2ZScgKTtcblx0XHR9KTtcblx0XHRzYWxlc2ZvcmNlT2JqZWN0RmllbGRzKCk7XG5cdFx0YWRkRmllbGRNYXBwaW5nUm93KCk7XG5cblx0XHQvLyBmb3IgcHVzaC9wdWxsIG1ldGhvZHMgcnVubmluZyB2aWEgYWpheFxuXHRcdHB1c2hBbmRQdWxsT2JqZWN0cygpO1xuXG5cdFx0Ly8gZm9yIGNsZWFyaW5nIHRoZSBwbHVnaW4gY2FjaGVcblx0XHRjbGVhclNmd3BDYWNoZUxpbmsoKTtcblx0fSk7XG59KCBqUXVlcnkgKSApO1xuIl19 +//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFkbWluLmpzIl0sIm5hbWVzIjpbIiQiLCJsb2FkRmllbGRPcHRpb25zIiwic3lzdGVtIiwib2JqZWN0X25hbWUiLCJkYXRhIiwiZmllbGRzIiwiZmlyc3RfZmllbGQiLCJmaXJzdCIsInRleHQiLCJwb3N0IiwiYWpheHVybCIsInJlc3BvbnNlIiwiZWFjaCIsImluZGV4IiwidmFsdWUiLCJrZXkiLCJuYW1lIiwibGFiZWwiLCJodG1sIiwidG9nZ2xlU29hcEZpZWxkcyIsImxlbmd0aCIsImlzIiwic2hvdyIsImhpZGUiLCJzYWxlc2ZvcmNlT2JqZWN0RmllbGRzIiwiZGVsYXkiLCJ0aW1lciIsImNhbGxiYWNrIiwibXMiLCJjbGVhclRpbWVvdXQiLCJzZXRUaW1lb3V0Iiwib24iLCJ0aGF0IiwiZGVsYXlUaW1lIiwicmVjb3JkVHlwZXNBbGxvd2VkTWFya3VwIiwicmVjb3JkVHlwZURlZmF1bHRNYXJrdXAiLCJkYXRlTWFya3VwIiwicmVjb3JkVHlwZUluZm9zIiwialF1ZXJ5IiwiZm4iLCJzZWxlY3QyIiwiYWRkRmllbGRNYXBwaW5nUm93IiwiY2xpY2siLCJzYWxlc2ZvcmNlT2JqZWN0IiwidmFsIiwid29yZHByZXNzT2JqZWN0IiwibmV3S2V5IiwiRGF0ZSIsImdldFVUQ01pbGxpc2Vjb25kcyIsImxhc3RSb3ciLCJsYXN0Iiwib2xkS2V5IiwiYXR0ciIsIlJlZ0V4cCIsImZpZWxkbWFwRmllbGRzIiwicGFyZW50IiwiZmluZCIsInJlbW92ZSIsInByZXBlbmQiLCJuZXh0Um93IiwiZW5kIiwiY2xvbmUiLCJyZW1vdmVDbGFzcyIsImkiLCJoIiwicmVwbGFjZSIsImFwcGVuZCIsInB1c2hBbmRQdWxsT2JqZWN0cyIsIndvcmRwcmVzc0lkIiwic2FsZXNmb3JjZUlkIiwic3VjY2VzcyIsInVwZGF0ZVNhbGVzZm9yY2VVc2VyU3VtbWFyeSIsIndpZHRoIiwiZmFkZUluIiwiZmFkZU91dCIsIm1hcHBpbmdJZCIsImxhc3Rfc3luY19tZXNzYWdlIiwibGFzdF9zeW5jX2FjdGlvbiIsImxhc3Rfc3luY19zdGF0dXMiLCJsYXN0X3N5bmMiLCJjbGVhclNmd3BDYWNoZUxpbmsiLCJtZXNzYWdlIiwiZG9jdW1lbnQiLCJ0aW1lb3V0Iiwibm90IiwicHJvcCIsInJlYWR5IiwiYWpheFN0YXJ0IiwiYWRkQ2xhc3MiLCJhamF4U3RvcCJdLCJtYXBwaW5ncyI6Ijs7QUFBRSxXQUFVQSxDQUFWLEVBQWM7QUFFZixXQUFTQyxnQkFBVCxDQUEyQkMsTUFBM0IsRUFBbUNDLFdBQW5DLEVBQWlEO0FBQ2hELFFBQUlDLElBQUksR0FBRztBQUNWLGdCQUFXLFNBQVNGLE1BQVQsR0FBa0I7QUFEbkIsS0FBWDtBQUdBLFFBQUlHLE1BQU0sR0FBRyxFQUFiO0FBQ0EsUUFBSUMsV0FBVyxHQUFHTixDQUFDLENBQUUsYUFBYUUsTUFBYixHQUFzQixzQkFBeEIsQ0FBRCxDQUFpREssS0FBakQsR0FBeURDLElBQXpELEVBQWxCO0FBQ0FILElBQUFBLE1BQU0sSUFBSSxzQkFBc0JDLFdBQXRCLEdBQW9DLFdBQTlDOztBQUNBLFFBQUssZ0JBQWdCSixNQUFyQixFQUE4QjtBQUM3QkUsTUFBQUEsSUFBSSxDQUFDLGtCQUFELENBQUosR0FBMkJELFdBQTNCO0FBQ0EsS0FGRCxNQUVPLElBQUssaUJBQWlCRCxNQUF0QixFQUErQjtBQUNyQ0UsTUFBQUEsSUFBSSxDQUFDLG1CQUFELENBQUosR0FBNEJELFdBQTVCO0FBQ0EsS0FGTSxNQUVBO0FBQ04sYUFBT0UsTUFBUDtBQUNBOztBQUNETCxJQUFBQSxDQUFDLENBQUNTLElBQUYsQ0FBUUMsT0FBUixFQUFpQk4sSUFBakIsRUFBdUIsVUFBVU8sUUFBVixFQUFxQjtBQUMzQ1gsTUFBQUEsQ0FBQyxDQUFDWSxJQUFGLENBQVFELFFBQVEsQ0FBQ1AsSUFBVCxDQUFjQyxNQUF0QixFQUE4QixVQUFVUSxLQUFWLEVBQWlCQyxLQUFqQixFQUF5QjtBQUN0RCxZQUFLLGdCQUFnQlosTUFBckIsRUFBOEI7QUFDN0JHLFVBQUFBLE1BQU0sSUFBSSxvQkFBb0JTLEtBQUssQ0FBQ0MsR0FBMUIsR0FBZ0MsSUFBaEMsR0FBdUNELEtBQUssQ0FBQ0MsR0FBN0MsR0FBbUQsV0FBN0Q7QUFDQSxTQUZELE1BRU8sSUFBSyxpQkFBaUJiLE1BQXRCLEVBQStCO0FBQ3JDRyxVQUFBQSxNQUFNLElBQUksb0JBQW9CUyxLQUFLLENBQUNFLElBQTFCLEdBQWlDLElBQWpDLEdBQXdDRixLQUFLLENBQUNHLEtBQTlDLEdBQXNELFdBQWhFO0FBQ0E7QUFDRCxPQU5EO0FBT0FqQixNQUFBQSxDQUFDLENBQUUsYUFBYUUsTUFBYixHQUFzQixlQUF4QixDQUFELENBQTJDZ0IsSUFBM0MsQ0FBaURiLE1BQWpEO0FBQ0EsS0FURDtBQVVBO0FBRUQ7Ozs7O0FBR0EsV0FBU2MsZ0JBQVQsR0FBNEI7QUFDM0IsUUFBSyxJQUFJbkIsQ0FBQyxDQUFFLHlDQUFGLENBQUQsQ0FBK0NvQixNQUF4RCxFQUFpRTtBQUNoRSxVQUFLcEIsQ0FBQyxDQUFFLCtDQUFGLENBQUQsQ0FBcURxQixFQUFyRCxDQUF5RCxVQUF6RCxDQUFMLEVBQTZFO0FBQzVFckIsUUFBQUEsQ0FBQyxDQUFFLDRDQUFGLENBQUQsQ0FBa0RzQixJQUFsRDtBQUNBLE9BRkQsTUFFTztBQUNOdEIsUUFBQUEsQ0FBQyxDQUFFLDRDQUFGLENBQUQsQ0FBa0R1QixJQUFsRDtBQUNBO0FBQ0Q7QUFDRDtBQUVEOzs7OztBQUdBLFdBQVNDLHNCQUFULEdBQWtDO0FBRWpDLFFBQUlDLEtBQUssR0FBSyxZQUFXO0FBQ3hCLFVBQUlDLEtBQUssR0FBRyxDQUFaO0FBQ0EsYUFBTyxVQUFVQyxRQUFWLEVBQW9CQyxFQUFwQixFQUF5QjtBQUMvQkMsUUFBQUEsWUFBWSxDQUFHSCxLQUFILENBQVo7QUFDQUEsUUFBQUEsS0FBSyxHQUFHSSxVQUFVLENBQUVILFFBQUYsRUFBWUMsRUFBWixDQUFsQjtBQUNBLE9BSEQ7QUFJQSxLQU5hLEVBQWQ7O0FBUUEsUUFBSyxNQUFNNUIsQ0FBQyxDQUFFLHNDQUFGLENBQUQsQ0FBNENvQixNQUF2RCxFQUFnRTtBQUMvRHBCLE1BQUFBLENBQUMsQ0FBRSxrQ0FBRixDQUFELENBQXdDdUIsSUFBeEM7QUFDQTs7QUFFRCxRQUFLLE1BQU12QixDQUFDLENBQUUscUNBQUYsQ0FBRCxDQUEyQ29CLE1BQXRELEVBQStEO0FBQzlEcEIsTUFBQUEsQ0FBQyxDQUFFLGlDQUFGLENBQUQsQ0FBdUN1QixJQUF2QztBQUNBOztBQUNELFFBQUssTUFBTXZCLENBQUMsQ0FBRSx5QkFBRixDQUFELENBQStCb0IsTUFBMUMsRUFBbUQ7QUFDbERwQixNQUFBQSxDQUFDLENBQUUscUJBQUYsQ0FBRCxDQUEyQnVCLElBQTNCO0FBQ0E7O0FBRUR2QixJQUFBQSxDQUFDLENBQUUsb0JBQUYsQ0FBRCxDQUEwQitCLEVBQTFCLENBQThCLFFBQTlCLEVBQXdDLFlBQVc7QUFDbEQsVUFBSUMsSUFBSSxHQUFHLElBQVg7QUFDQSxVQUFJQyxTQUFTLEdBQUcsSUFBaEI7QUFDQVIsTUFBQUEsS0FBSyxDQUFFLFlBQVc7QUFDakIsWUFBSXJCLElBQUksR0FBRztBQUNWLG9CQUFXLG1DQUREO0FBRVYscUJBQVksQ0FBRSxRQUFGLEVBQVksaUJBQVosQ0FGRjtBQUdWLHdCQUFlLFVBSEw7QUFJViwrQkFBc0I0QixJQUFJLENBQUNsQjtBQUpqQixTQUFYO0FBTUFkLFFBQUFBLENBQUMsQ0FBQ1MsSUFBRixDQUFRQyxPQUFSLEVBQWlCTixJQUFqQixFQUF1QixVQUFVTyxRQUFWLEVBQXFCO0FBRTNDLGNBQUl1Qix3QkFBd0IsR0FBRyxFQUEvQjtBQUFBLGNBQW1DQyx1QkFBdUIsR0FBRyxFQUE3RDtBQUFBLGNBQWlFQyxVQUFVLEdBQUcsRUFBOUU7O0FBRUEsY0FBSyxJQUFJcEMsQ0FBQyxDQUFFVyxRQUFRLENBQUNQLElBQVQsQ0FBY2lDLGVBQWhCLENBQUQsQ0FBbUNqQixNQUE1QyxFQUFxRDtBQUNwRGMsWUFBQUEsd0JBQXdCLElBQUksb0dBQTVCO0FBQ0FsQyxZQUFBQSxDQUFDLENBQUNZLElBQUYsQ0FBUUQsUUFBUSxDQUFDUCxJQUFULENBQWNpQyxlQUF0QixFQUF1QyxVQUFVeEIsS0FBVixFQUFpQkMsS0FBakIsRUFBeUI7QUFDL0RvQixjQUFBQSx3QkFBd0IsSUFBSSxnRUFBZ0VyQixLQUFoRSxHQUF3RSwwQ0FBeEUsR0FBcUhBLEtBQXJILEdBQTZILHlDQUE3SCxHQUF5S0EsS0FBekssR0FBaUwsS0FBakwsR0FBeUxDLEtBQXpMLEdBQWlNLFVBQTdOO0FBQ0EsYUFGRDtBQUdBb0IsWUFBQUEsd0JBQXdCLElBQUksUUFBNUI7QUFHQUMsWUFBQUEsdUJBQXVCLElBQUksMEVBQTNCO0FBQ0FBLFlBQUFBLHVCQUF1QixJQUFJLG9JQUEzQjtBQUNBbkMsWUFBQUEsQ0FBQyxDQUFDWSxJQUFGLENBQVFELFFBQVEsQ0FBQ1AsSUFBVCxDQUFjaUMsZUFBdEIsRUFBdUMsVUFBVXhCLEtBQVYsRUFBaUJDLEtBQWpCLEVBQXlCO0FBQy9EcUIsY0FBQUEsdUJBQXVCLElBQUksb0JBQW9CdEIsS0FBcEIsR0FBNEIsSUFBNUIsR0FBbUNDLEtBQW5DLEdBQTJDLFdBQXRFO0FBQ0EsYUFGRDtBQUdBOztBQUVEZCxVQUFBQSxDQUFDLENBQUUsa0NBQUYsQ0FBRCxDQUF3Q2tCLElBQXhDLENBQThDZ0Isd0JBQTlDO0FBQ0FsQyxVQUFBQSxDQUFDLENBQUUsaUNBQUYsQ0FBRCxDQUF1Q2tCLElBQXZDLENBQTZDaUIsdUJBQTdDOztBQUVBLGNBQUssSUFBSW5DLENBQUMsQ0FBRVcsUUFBUSxDQUFDUCxJQUFULENBQWNDLE1BQWhCLENBQUQsQ0FBMEJlLE1BQW5DLEVBQTRDO0FBQzNDZ0IsWUFBQUEsVUFBVSxJQUFJLHFFQUFkO0FBQ0FBLFlBQUFBLFVBQVUsSUFBSSwyR0FBZDtBQUNBcEMsWUFBQUEsQ0FBQyxDQUFDWSxJQUFGLENBQVFELFFBQVEsQ0FBQ1AsSUFBVCxDQUFjQyxNQUF0QixFQUE4QixVQUFVUSxLQUFWLEVBQWlCQyxLQUFqQixFQUF5QjtBQUN0RHNCLGNBQUFBLFVBQVUsSUFBSSxvQkFBb0J0QixLQUFLLENBQUNFLElBQTFCLEdBQWlDLElBQWpDLEdBQXdDRixLQUFLLENBQUNHLEtBQTlDLEdBQXNELFdBQXBFO0FBQ0EsYUFGRDtBQUdBbUIsWUFBQUEsVUFBVSxJQUFJLFdBQWQ7QUFDQUEsWUFBQUEsVUFBVSxJQUFJLG1LQUFkO0FBQ0E7O0FBRURwQyxVQUFBQSxDQUFDLENBQUUscUJBQUYsQ0FBRCxDQUEyQmtCLElBQTNCLENBQWlDa0IsVUFBakM7O0FBRUEsY0FBSyxPQUFPRix3QkFBWixFQUF1QztBQUN0Q2xDLFlBQUFBLENBQUMsQ0FBRSxrQ0FBRixDQUFELENBQXdDc0IsSUFBeEM7QUFDQSxXQUZELE1BRU87QUFDTnRCLFlBQUFBLENBQUMsQ0FBRSxrQ0FBRixDQUFELENBQXdDdUIsSUFBeEM7QUFDQTs7QUFDRCxjQUFLLE9BQU9ZLHVCQUFaLEVBQXNDO0FBQ3JDbkMsWUFBQUEsQ0FBQyxDQUFFLGlDQUFGLENBQUQsQ0FBdUNzQixJQUF2QztBQUNBLFdBRkQsTUFFTztBQUNOdEIsWUFBQUEsQ0FBQyxDQUFFLGlDQUFGLENBQUQsQ0FBdUN1QixJQUF2QztBQUNBOztBQUVELGNBQUssT0FBT2EsVUFBWixFQUF5QjtBQUN4QnBDLFlBQUFBLENBQUMsQ0FBRSxxQkFBRixDQUFELENBQTJCc0IsSUFBM0I7QUFDQSxXQUZELE1BRU87QUFDTnRCLFlBQUFBLENBQUMsQ0FBRSxxQkFBRixDQUFELENBQTJCdUIsSUFBM0I7QUFDQTs7QUFFRCxjQUFLZSxNQUFNLENBQUNDLEVBQVAsQ0FBVUMsT0FBZixFQUF5QjtBQUN4QnhDLFlBQUFBLENBQUMsQ0FBRSx1Q0FBRixDQUFELENBQTZDd0MsT0FBN0M7QUFDQXhDLFlBQUFBLENBQUMsQ0FBRSwyQkFBRixDQUFELENBQWlDd0MsT0FBakM7QUFDQTtBQUVELFNBeEREO0FBeURBLE9BaEVJLEVBZ0VGUCxTQWhFRSxDQUFMO0FBaUVBLEtBcEVEO0FBcUVBO0FBQ0Q7Ozs7O0FBR0MsV0FBU1Esa0JBQVQsR0FBOEI7QUFDOUJ6QyxJQUFBQSxDQUFDLENBQUUsb0JBQUYsQ0FBRCxDQUEwQjBDLEtBQTFCLENBQWlDLFlBQVc7QUFDM0MsVUFBSUMsZ0JBQWdCLEdBQUczQyxDQUFDLENBQUUsb0JBQUYsQ0FBRCxDQUEwQjRDLEdBQTFCLEVBQXZCO0FBQ0EsVUFBSUMsZUFBZSxHQUFHN0MsQ0FBQyxDQUFFLG1CQUFGLENBQUQsQ0FBeUI0QyxHQUF6QixFQUF0QjtBQUNBLFVBQUlFLE1BQU0sR0FBRyxJQUFJQyxJQUFKLEdBQVdDLGtCQUFYLEVBQWI7QUFDQSxVQUFJQyxPQUFPLEdBQUdqRCxDQUFDLENBQUUsdUJBQUYsQ0FBRCxDQUE2QmtELElBQTdCLEVBQWQ7QUFDQSxVQUFJQyxNQUFNLEdBQUdGLE9BQU8sQ0FBQ0csSUFBUixDQUFjLFVBQWQsQ0FBYjtBQUNBRCxNQUFBQSxNQUFNLEdBQUcsSUFBSUUsTUFBSixDQUFZRixNQUFaLEVBQW9CLEdBQXBCLENBQVQ7QUFDQW5ELE1BQUFBLENBQUMsQ0FBRSxJQUFGLENBQUQsQ0FBVVEsSUFBVixDQUFnQiwyQkFBaEI7O0FBQ0EsVUFBSyxPQUFPcUMsZUFBUCxJQUEwQixPQUFPRixnQkFBdEMsRUFBeUQ7QUFDeERXLFFBQUFBLGNBQWMsQ0FBRUgsTUFBRixFQUFVTCxNQUFWLEVBQWtCRyxPQUFsQixDQUFkO0FBQ0FqRCxRQUFBQSxDQUFDLENBQUUsSUFBRixDQUFELENBQVV1RCxNQUFWLEdBQW1CQyxJQUFuQixDQUF5QixpQkFBekIsRUFBNkNDLE1BQTdDO0FBQ0EsT0FIRCxNQUdPO0FBQ056RCxRQUFBQSxDQUFDLENBQUUsSUFBRixDQUFELENBQVV1RCxNQUFWLEdBQW1CRyxPQUFuQixDQUE0Qix3SUFBNUI7QUFDQTs7QUFDRCxhQUFPLEtBQVA7QUFDQSxLQWZEO0FBZ0JBO0FBQ0Q7Ozs7Ozs7O0FBTUEsV0FBU0osY0FBVCxDQUF5QkgsTUFBekIsRUFBaUNMLE1BQWpDLEVBQXlDRyxPQUF6QyxFQUFtRDtBQUNsRCxRQUFJVSxPQUFPLEdBQUcsRUFBZDs7QUFDTSxRQUFLckIsTUFBTSxDQUFDQyxFQUFQLENBQVVDLE9BQWYsRUFBeUI7QUFDeEJtQixNQUFBQSxPQUFPLEdBQUdWLE9BQU8sQ0FBQ08sSUFBUixDQUFjLFFBQWQsRUFDTGhCLE9BREssQ0FDSSxTQURKLEVBRUxvQixHQUZLLEdBR0xDLEtBSEssQ0FHRSxJQUhGLEVBR1NDLFdBSFQsQ0FHc0IsbUJBSHRCLENBQVY7QUFJQSxLQUxELE1BS087QUFDTkgsTUFBQUEsT0FBTyxHQUFHVixPQUFPLENBQUNZLEtBQVIsQ0FBZSxJQUFmLENBQVY7QUFDQTs7QUFDUDdELElBQUFBLENBQUMsQ0FBRTJELE9BQUYsQ0FBRCxDQUFhUCxJQUFiLENBQW1CLFVBQW5CLEVBQStCTixNQUEvQjtBQUNBOUMsSUFBQUEsQ0FBQyxDQUFFMkQsT0FBRixDQUFELENBQWEvQyxJQUFiLENBQWtCLFlBQVc7QUFDNUJaLE1BQUFBLENBQUMsQ0FBRSxJQUFGLENBQUQsQ0FBVWtCLElBQVYsQ0FBZ0IsVUFBVTZDLENBQVYsRUFBYUMsQ0FBYixFQUFpQjtBQUNoQyxlQUFPQSxDQUFDLENBQUNDLE9BQUYsQ0FBV2QsTUFBWCxFQUFtQkwsTUFBbkIsQ0FBUDtBQUNBLE9BRkQ7QUFHQSxLQUpEO0FBS0E5QyxJQUFBQSxDQUFDLENBQUUsb0JBQUYsQ0FBRCxDQUEwQmtFLE1BQTFCLENBQWtDUCxPQUFsQzs7QUFDQSxRQUFLckIsTUFBTSxDQUFDQyxFQUFQLENBQVVDLE9BQWYsRUFBeUI7QUFDeEJTLE1BQUFBLE9BQU8sQ0FBQ08sSUFBUixDQUFjLFFBQWQsRUFBeUJoQixPQUF6QjtBQUNBbUIsTUFBQUEsT0FBTyxDQUFDSCxJQUFSLENBQWMsUUFBZCxFQUF5QmhCLE9BQXpCO0FBQ0E7QUFDRDtBQUNEOzs7OztBQUdBLFdBQVMyQixrQkFBVCxHQUE4QjtBQUM3Qm5FLElBQUFBLENBQUMsQ0FBRSwrQkFBRixDQUFELENBQXFDdUIsSUFBckM7O0FBQ0EsUUFBSyxJQUFJdkIsQ0FBQyxDQUFFLHdCQUFGLENBQUQsQ0FBOEJvQixNQUF2QyxFQUFnRDtBQUMvQ3BCLE1BQUFBLENBQUMsQ0FBRSw0QkFBRixDQUFELENBQWtDK0IsRUFBbEMsQ0FBc0MsT0FBdEMsRUFBK0MsWUFBVztBQUN6RCxZQUFJYyxlQUFlLEdBQUc3QyxDQUFDLENBQUUsd0JBQUYsQ0FBRCxDQUE4QjRDLEdBQTlCLEVBQXRCO0FBQ0EsWUFBSXdCLFdBQVcsR0FBR3BFLENBQUMsQ0FBRSxvQkFBRixDQUFELENBQTBCNEMsR0FBMUIsRUFBbEI7QUFDQSxZQUFJeUIsWUFBWSxHQUFHckUsQ0FBQyxDQUFFLHFCQUFGLENBQUQsQ0FBMkI0QyxHQUEzQixFQUFuQjtBQUNBLFlBQUl4QyxJQUFJLEdBQUc7QUFDVixvQkFBVyxvQkFERDtBQUVWLDhCQUFxQnlDLGVBRlg7QUFHViwwQkFBaUJ1QixXQUhQO0FBSVYsMkJBQWtCQztBQUpSLFNBQVg7QUFNQXJFLFFBQUFBLENBQUMsQ0FBQ1MsSUFBRixDQUFRQyxPQUFSLEVBQWlCTixJQUFqQixFQUF1QixVQUFVTyxRQUFWLEVBQXFCO0FBQzNDLGNBQUssU0FBU0EsUUFBUSxDQUFDMkQsT0FBdkIsRUFBaUM7QUFDaENDLFlBQUFBLDJCQUEyQjtBQUMzQnZFLFlBQUFBLENBQUMsQ0FBRSwrQkFBRixDQUFELENBQXFDd0UsS0FBckMsQ0FBNEN4RSxDQUFDLENBQUUseUJBQUYsQ0FBRCxDQUErQndFLEtBQS9CLEtBQXlDLEVBQXJGO0FBQ0F4RSxZQUFBQSxDQUFDLENBQUUsK0JBQUYsQ0FBRCxDQUFxQ2tCLElBQXJDLENBQTJDLG1EQUEzQyxFQUFpR3VELE1BQWpHLEdBQTBHaEQsS0FBMUcsQ0FBaUgsSUFBakgsRUFBd0hpRCxPQUF4SDtBQUNBO0FBQ0QsU0FORDtBQU9BLGVBQU8sS0FBUDtBQUNBLE9BbEJEO0FBbUJBOztBQUNEMUUsSUFBQUEsQ0FBQyxDQUFFLDhCQUFGLENBQUQsQ0FBb0MrQixFQUFwQyxDQUF3QyxPQUF4QyxFQUFpRCxZQUFXO0FBQzNELFVBQUlzQyxZQUFZLEdBQUdyRSxDQUFDLENBQUUscUJBQUYsQ0FBRCxDQUEyQjRDLEdBQTNCLEVBQW5CO0FBQ0EsVUFBSUMsZUFBZSxHQUFHN0MsQ0FBQyxDQUFFLHdCQUFGLENBQUQsQ0FBOEI0QyxHQUE5QixFQUF0QjtBQUNBLFVBQUl4QyxJQUFJLEdBQUc7QUFDVixrQkFBVyxzQkFERDtBQUVWLHlCQUFrQmlFLFlBRlI7QUFHViw0QkFBcUJ4QjtBQUhYLE9BQVg7QUFLQTdDLE1BQUFBLENBQUMsQ0FBQ1MsSUFBRixDQUFRQyxPQUFSLEVBQWlCTixJQUFqQixFQUF1QixVQUFVTyxRQUFWLEVBQXFCO0FBQzNDLFlBQUssU0FBU0EsUUFBUSxDQUFDMkQsT0FBdkIsRUFBaUM7QUFDaENDLFVBQUFBLDJCQUEyQjtBQUMzQnZFLFVBQUFBLENBQUMsQ0FBRSwrQkFBRixDQUFELENBQXFDd0UsS0FBckMsQ0FBNEN4RSxDQUFDLENBQUUseUJBQUYsQ0FBRCxDQUErQndFLEtBQS9CLEtBQXlDLEVBQXJGO0FBQ0F4RSxVQUFBQSxDQUFDLENBQUUsK0JBQUYsQ0FBRCxDQUFxQ2tCLElBQXJDLENBQTJDLHFEQUEzQyxFQUFtR3VELE1BQW5HLEdBQTRHaEQsS0FBNUcsQ0FBbUgsSUFBbkgsRUFBMEhpRCxPQUExSDtBQUNBO0FBQ0QsT0FORDtBQU9BLGFBQU8sS0FBUDtBQUNBLEtBaEJEO0FBaUJBO0FBQ0Q7Ozs7O0FBR0EsV0FBU0gsMkJBQVQsR0FBdUM7QUFDdEMsUUFBSUksU0FBUyxHQUFHM0UsQ0FBQyxDQUFFLGtCQUFGLENBQUQsQ0FBd0I0QyxHQUF4QixFQUFoQjtBQUNBLFFBQUl4QyxJQUFJLEdBQUc7QUFDVixnQkFBVyxxQkFERDtBQUVWLG9CQUFldUU7QUFGTCxLQUFYO0FBSUEzRSxJQUFBQSxDQUFDLENBQUNTLElBQUYsQ0FBUUMsT0FBUixFQUFpQk4sSUFBakIsRUFBdUIsVUFBVU8sUUFBVixFQUFxQjtBQUMzQyxVQUFLLFNBQVNBLFFBQVEsQ0FBQzJELE9BQXZCLEVBQWlDO0FBQ2hDdEUsUUFBQUEsQ0FBQyxDQUFFLHNCQUFGLENBQUQsQ0FBNEJRLElBQTVCLENBQWtDRyxRQUFRLENBQUNQLElBQVQsQ0FBY3dFLGlCQUFoRDtBQUNBNUUsUUFBQUEsQ0FBQyxDQUFFLHFCQUFGLENBQUQsQ0FBMkJRLElBQTNCLENBQWlDRyxRQUFRLENBQUNQLElBQVQsQ0FBY3lFLGdCQUEvQztBQUNBN0UsUUFBQUEsQ0FBQyxDQUFFLHFCQUFGLENBQUQsQ0FBMkJRLElBQTNCLENBQWlDRyxRQUFRLENBQUNQLElBQVQsQ0FBYzBFLGdCQUEvQztBQUNBOUUsUUFBQUEsQ0FBQyxDQUFFLGNBQUYsQ0FBRCxDQUFvQlEsSUFBcEIsQ0FBMEJHLFFBQVEsQ0FBQ1AsSUFBVCxDQUFjMkUsU0FBeEM7O0FBQ0EsWUFBSyxRQUFRcEUsUUFBUSxDQUFDUCxJQUFULENBQWMwRSxnQkFBM0IsRUFBOEM7QUFDN0M5RSxVQUFBQSxDQUFDLENBQUUscUJBQUYsQ0FBRCxDQUEyQlEsSUFBM0IsQ0FBaUMsU0FBakM7QUFDQTtBQUNEO0FBQ0QsS0FWRDtBQVdBO0FBQ0Q7Ozs7O0FBR0EsV0FBU3dFLGtCQUFULEdBQThCO0FBQzdCaEYsSUFBQUEsQ0FBQyxDQUFFLG1CQUFGLENBQUQsQ0FBeUIwQyxLQUF6QixDQUFnQyxZQUFXO0FBQzFDLFVBQUl0QyxJQUFJLEdBQUc7QUFDVixrQkFBVztBQURELE9BQVg7QUFHQSxVQUFJNEIsSUFBSSxHQUFHaEMsQ0FBQyxDQUFFLElBQUYsQ0FBWjtBQUNBQSxNQUFBQSxDQUFDLENBQUNTLElBQUYsQ0FBUUMsT0FBUixFQUFpQk4sSUFBakIsRUFBdUIsVUFBVU8sUUFBVixFQUFxQjtBQUMzQyxZQUFLLFNBQVNBLFFBQVEsQ0FBQzJELE9BQWxCLElBQTZCLFNBQVMzRCxRQUFRLENBQUNQLElBQVQsQ0FBY2tFLE9BQXpELEVBQW1FO0FBQ2xFdEMsVUFBQUEsSUFBSSxDQUFDdUIsTUFBTCxHQUFjckMsSUFBZCxDQUFvQlAsUUFBUSxDQUFDUCxJQUFULENBQWM2RSxPQUFsQyxFQUE0Q1IsTUFBNUM7QUFDQTtBQUNELE9BSkQ7QUFLQSxhQUFPLEtBQVA7QUFDQSxLQVhEO0FBWUEsR0F6UWMsQ0EyUWY7OztBQUNBekUsRUFBQUEsQ0FBQyxDQUFFa0YsUUFBRixDQUFELENBQWNuRCxFQUFkLENBQWtCLFFBQWxCLEVBQTRCLHlCQUE1QixFQUF1RCxZQUFXO0FBQ2pFLFFBQUlvRCxPQUFKO0FBQ0FsRixJQUFBQSxnQkFBZ0IsQ0FBRSxXQUFGLEVBQWVELENBQUMsQ0FBRSxJQUFGLENBQUQsQ0FBVTRDLEdBQVYsRUFBZixDQUFoQjtBQUNBZixJQUFBQSxZQUFZLENBQUVzRCxPQUFGLENBQVo7QUFDQUEsSUFBQUEsT0FBTyxHQUFHckQsVUFBVSxDQUFFLFlBQVc7QUFDaEM5QixNQUFBQSxDQUFDLENBQUUsdUJBQUYsQ0FBRCxDQUE2QjBFLE9BQTdCO0FBQ0ExRSxNQUFBQSxDQUFDLENBQUUsdUJBQUYsQ0FBRCxDQUE2Qm9GLEdBQTdCLENBQWtDLG9CQUFsQyxFQUF5RDNCLE1BQXpEO0FBQ0EsS0FIbUIsRUFHakIsSUFIaUIsQ0FBcEI7QUFJQSxHQVJELEVBNVFlLENBc1JmOztBQUNBekQsRUFBQUEsQ0FBQyxDQUFFa0YsUUFBRixDQUFELENBQWNuRCxFQUFkLENBQWtCLFFBQWxCLEVBQTRCLDBCQUE1QixFQUF3RCxZQUFXO0FBQ2xFLFFBQUlvRCxPQUFKO0FBQ0FsRixJQUFBQSxnQkFBZ0IsQ0FBRSxZQUFGLEVBQWdCRCxDQUFDLENBQUUsSUFBRixDQUFELENBQVU0QyxHQUFWLEVBQWhCLENBQWhCO0FBQ0FmLElBQUFBLFlBQVksQ0FBRXNELE9BQUYsQ0FBWjtBQUNBQSxJQUFBQSxPQUFPLEdBQUdyRCxVQUFVLENBQUUsWUFBVztBQUNoQzlCLE1BQUFBLENBQUMsQ0FBRSx1QkFBRixDQUFELENBQTZCMEUsT0FBN0I7QUFDQTFFLE1BQUFBLENBQUMsQ0FBRSx1QkFBRixDQUFELENBQTZCb0YsR0FBN0IsQ0FBa0Msb0JBQWxDLEVBQXlEM0IsTUFBekQ7QUFDQSxLQUhtQixFQUdqQixJQUhpQixDQUFwQjtBQUlBLEdBUkQsRUF2UmUsQ0FpU2Y7O0FBQ0F6RCxFQUFBQSxDQUFDLENBQUVrRixRQUFGLENBQUQsQ0FBY25ELEVBQWQsQ0FBa0IsUUFBbEIsRUFBNEIsK0NBQTVCLEVBQTZFLFlBQVc7QUFDdkZaLElBQUFBLGdCQUFnQjtBQUNoQixHQUZEO0FBSUE7Ozs7QUFHQW5CLEVBQUFBLENBQUMsQ0FBRWtGLFFBQUYsQ0FBRCxDQUFjbkQsRUFBZCxDQUFrQixPQUFsQixFQUEyQiwyQkFBM0IsRUFBd0QsWUFBVztBQUNsRS9CLElBQUFBLENBQUMsQ0FBRSwyQkFBRixDQUFELENBQWlDb0YsR0FBakMsQ0FBc0MsSUFBdEMsRUFBNkNDLElBQTdDLENBQW1ELFNBQW5ELEVBQThELEtBQTlEO0FBQ0EsR0FGRDtBQUdBOzs7O0FBR0FyRixFQUFBQSxDQUFDLENBQUVrRixRQUFGLENBQUQsQ0FBY25ELEVBQWQsQ0FBa0IsT0FBbEIsRUFBMkIsc0JBQTNCLEVBQW1ELFlBQVc7QUFDN0QvQixJQUFBQSxDQUFDLENBQUUsc0JBQUYsQ0FBRCxDQUE0Qm9GLEdBQTVCLENBQWlDLElBQWpDLEVBQXdDQyxJQUF4QyxDQUE4QyxTQUE5QyxFQUF5RCxLQUF6RDtBQUNBLEdBRkQ7QUFHQTs7Ozs7Ozs7OztBQVNBckYsRUFBQUEsQ0FBQyxDQUFFa0YsUUFBRixDQUFELENBQWNJLEtBQWQsQ0FBcUIsWUFBVztBQUUvQjtBQUNBbkUsSUFBQUEsZ0JBQWdCLEdBSGUsQ0FLL0I7O0FBQ0FsQixJQUFBQSxnQkFBZ0IsQ0FBRSxXQUFGLEVBQWVELENBQUMsQ0FBRSx5QkFBRixDQUFELENBQStCNEMsR0FBL0IsRUFBZixDQUFoQjtBQUNBM0MsSUFBQUEsZ0JBQWdCLENBQUUsWUFBRixFQUFnQkQsQ0FBQyxDQUFFLDBCQUFGLENBQUQsQ0FBZ0M0QyxHQUFoQyxFQUFoQixDQUFoQjs7QUFFQSxRQUFLTixNQUFNLENBQUNDLEVBQVAsQ0FBVUMsT0FBZixFQUF5QjtBQUN4QnhDLE1BQUFBLENBQUMsQ0FBRSx5QkFBRixDQUFELENBQStCd0MsT0FBL0I7QUFDQXhDLE1BQUFBLENBQUMsQ0FBRSwwQkFBRixDQUFELENBQWdDd0MsT0FBaEM7QUFDQXhDLE1BQUFBLENBQUMsQ0FBRSx1Q0FBRixDQUFELENBQTZDd0MsT0FBN0M7QUFDQXhDLE1BQUFBLENBQUMsQ0FBRSwyQkFBRixDQUFELENBQWlDd0MsT0FBakM7QUFDQXhDLE1BQUFBLENBQUMsQ0FBRSxnQ0FBRixDQUFELENBQXNDd0MsT0FBdEM7QUFDQXhDLE1BQUFBLENBQUMsQ0FBRSxpQ0FBRixDQUFELENBQXVDd0MsT0FBdkM7QUFDQSxLQWhCOEIsQ0FrQi9COzs7QUFDQXhDLElBQUFBLENBQUMsQ0FBRWtGLFFBQUYsQ0FBRCxDQUFjSyxTQUFkLENBQXlCLFlBQVc7QUFDbkN2RixNQUFBQSxDQUFDLENBQUUsVUFBRixDQUFELENBQWdCd0YsUUFBaEIsQ0FBMEIsV0FBMUI7QUFDQSxLQUZELEVBRUdDLFFBRkgsQ0FFYSxZQUFXO0FBQ3ZCekYsTUFBQUEsQ0FBQyxDQUFFLFVBQUYsQ0FBRCxDQUFnQjhELFdBQWhCLENBQTZCLFdBQTdCO0FBQ0EsS0FKRDtBQUtBdEMsSUFBQUEsc0JBQXNCO0FBQ3RCaUIsSUFBQUEsa0JBQWtCLEdBekJhLENBMkIvQjs7QUFDQTBCLElBQUFBLGtCQUFrQixHQTVCYSxDQThCL0I7O0FBQ0FhLElBQUFBLGtCQUFrQjtBQUNsQixHQWhDRDtBQWlDQSxDQTVWQyxFQTRWQzFDLE1BNVZELENBQUYiLCJmaWxlIjoib2JqZWN0LXN5bmMtZm9yLXNhbGVzZm9yY2UtYWRtaW4uanMiLCJzb3VyY2VzQ29udGVudCI6WyIoIGZ1bmN0aW9uKCAkICkge1xuXG5cdGZ1bmN0aW9uIGxvYWRGaWVsZE9wdGlvbnMoIHN5c3RlbSwgb2JqZWN0X25hbWUgKSB7XG5cdFx0dmFyIGRhdGEgPSB7XG5cdFx0XHQnYWN0aW9uJyA6ICdnZXRfJyArIHN5c3RlbSArICdfb2JqZWN0X2ZpZWxkcycsXG5cdFx0fVxuXHRcdHZhciBmaWVsZHMgPSAnJztcblx0XHR2YXIgZmlyc3RfZmllbGQgPSAkKCAnLmNvbHVtbi0nICsgc3lzdGVtICsgJ19maWVsZCBzZWxlY3Qgb3B0aW9uJykuZmlyc3QoKS50ZXh0KCk7XG5cdFx0ZmllbGRzICs9ICc8b3B0aW9uIHZhbHVlPVwiXCI+JyArIGZpcnN0X2ZpZWxkICsgJzwvb3B0aW9uPic7XG5cdFx0aWYgKCAnd29yZHByZXNzJyA9PT0gc3lzdGVtICkge1xuXHRcdFx0ZGF0YVsnd29yZHByZXNzX29iamVjdCddID0gb2JqZWN0X25hbWU7XG5cdFx0fSBlbHNlIGlmICggJ3NhbGVzZm9yY2UnID09PSBzeXN0ZW0gKSB7XG5cdFx0XHRkYXRhWydzYWxlc2ZvcmNlX29iamVjdCddID0gb2JqZWN0X25hbWU7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiBmaWVsZHM7XG5cdFx0fVxuXHRcdCQucG9zdCggYWpheHVybCwgZGF0YSwgZnVuY3Rpb24oIHJlc3BvbnNlICkge1xuXHRcdFx0JC5lYWNoKCByZXNwb25zZS5kYXRhLmZpZWxkcywgZnVuY3Rpb24oIGluZGV4LCB2YWx1ZSApIHtcblx0XHRcdFx0aWYgKCAnd29yZHByZXNzJyA9PT0gc3lzdGVtICkge1xuXHRcdFx0XHRcdGZpZWxkcyArPSAnPG9wdGlvbiB2YWx1ZT1cIicgKyB2YWx1ZS5rZXkgKyAnXCI+JyArIHZhbHVlLmtleSArICc8L29wdGlvbj4nO1xuXHRcdFx0XHR9IGVsc2UgaWYgKCAnc2FsZXNmb3JjZScgPT09IHN5c3RlbSApIHtcblx0XHRcdFx0XHRmaWVsZHMgKz0gJzxvcHRpb24gdmFsdWU9XCInICsgdmFsdWUubmFtZSArICdcIj4nICsgdmFsdWUubGFiZWwgKyAnPC9vcHRpb24+Jztcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0XHQkKCAnLmNvbHVtbi0nICsgc3lzdGVtICsgJ19maWVsZCBzZWxlY3QnICkuaHRtbCggZmllbGRzICk7XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogRG9uJ3Qgc2hvdyB0aGUgV1NETCBmaWxlIGZpZWxkIHVubGVzcyBTT0FQIGlzIGVuYWJsZWRcblx0ICovXG5cdGZ1bmN0aW9uIHRvZ2dsZVNvYXBGaWVsZHMoKSB7XG5cdFx0aWYgKCAwIDwgJCggJy5vYmplY3Qtc3luYy1mb3Itc2FsZXNmb3JjZS1lbmFibGUtc29hcCcgKS5sZW5ndGggKSB7XG5cdFx0XHRpZiAoICQoICcub2JqZWN0LXN5bmMtZm9yLXNhbGVzZm9yY2UtZW5hYmxlLXNvYXAgaW5wdXQnICkuaXMoICc6Y2hlY2tlZCcgKSApIHtcblx0XHRcdFx0JCggJy5vYmplY3Qtc3luYy1mb3Itc2FsZXNmb3JjZS1zb2FwLXdzZGwtcGF0aCcgKS5zaG93KCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHQkKCAnLm9iamVjdC1zeW5jLWZvci1zYWxlc2ZvcmNlLXNvYXAtd3NkbC1wYXRoJyApLmhpZGUoKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogR2VuZXJhdGVzIHRoZSBTYWxlc2ZvcmNlIG9iamVjdCBmaWVsZHMgYmFzZWQgb24gdGhlIGRyb3Bkb3duIGFjdGl2aXR5IGFuZCBBUEkgcmVzdWx0cy5cblx0ICovXG5cdGZ1bmN0aW9uIHNhbGVzZm9yY2VPYmplY3RGaWVsZHMoKSB7XG5cblx0XHR2YXIgZGVsYXkgPSAoIGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIHRpbWVyID0gMDtcblx0XHRcdHJldHVybiBmdW5jdGlvbiggY2FsbGJhY2ssIG1zICkge1xuXHRcdFx0XHRjbGVhclRpbWVvdXQgKCB0aW1lciApO1xuXHRcdFx0XHR0aW1lciA9IHNldFRpbWVvdXQoIGNhbGxiYWNrLCBtcyApO1xuXHRcdFx0fTtcblx0XHR9KCkgKTtcblxuXHRcdGlmICggMCA9PT0gJCggJy5zYWxlc2ZvcmNlX3JlY29yZF90eXBlc19hbGxvd2VkID4gKicgKS5sZW5ndGggKSB7XG5cdFx0XHQkKCAnLnNhbGVzZm9yY2VfcmVjb3JkX3R5cGVzX2FsbG93ZWQnICkuaGlkZSgpO1xuXHRcdH1cblxuXHRcdGlmICggMCA9PT0gJCggJy5zYWxlc2ZvcmNlX3JlY29yZF90eXBlX2RlZmF1bHQgPiAqJyApLmxlbmd0aCApIHtcblx0XHRcdCQoICcuc2FsZXNmb3JjZV9yZWNvcmRfdHlwZV9kZWZhdWx0JyApLmhpZGUoKTtcblx0XHR9XG5cdFx0aWYgKCAwID09PSAkKCAnLnB1bGxfdHJpZ2dlcl9maWVsZCA+IConICkubGVuZ3RoICkge1xuXHRcdFx0JCggJy5wdWxsX3RyaWdnZXJfZmllbGQnICkuaGlkZSgpO1xuXHRcdH1cblxuXHRcdCQoICcjc2FsZXNmb3JjZV9vYmplY3QnICkub24oICdjaGFuZ2UnLCBmdW5jdGlvbigpIHtcblx0XHRcdHZhciB0aGF0ID0gdGhpcztcblx0XHRcdHZhciBkZWxheVRpbWUgPSAxMDAwO1xuXHRcdFx0ZGVsYXkoIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHR2YXIgZGF0YSA9IHtcblx0XHRcdFx0XHQnYWN0aW9uJyA6ICdnZXRfc2FsZXNmb3JjZV9vYmplY3RfZGVzY3JpcHRpb24nLFxuXHRcdFx0XHRcdCdpbmNsdWRlJyA6IFsgJ2ZpZWxkcycsICdyZWNvcmRUeXBlSW5mb3MnIF0sXG5cdFx0XHRcdFx0J2ZpZWxkX3R5cGUnIDogJ2RhdGV0aW1lJyxcblx0XHRcdFx0XHQnc2FsZXNmb3JjZV9vYmplY3QnIDogdGhhdC52YWx1ZVxuXHRcdFx0XHR9XG5cdFx0XHRcdCQucG9zdCggYWpheHVybCwgZGF0YSwgZnVuY3Rpb24oIHJlc3BvbnNlICkge1xuXG5cdFx0XHRcdFx0dmFyIHJlY29yZFR5cGVzQWxsb3dlZE1hcmt1cCA9ICcnLCByZWNvcmRUeXBlRGVmYXVsdE1hcmt1cCA9ICcnLCBkYXRlTWFya3VwID0gJyc7XG5cblx0XHRcdFx0XHRpZiAoIDAgPCAkKCByZXNwb25zZS5kYXRhLnJlY29yZFR5cGVJbmZvcyApLmxlbmd0aCApIHtcblx0XHRcdFx0XHRcdHJlY29yZFR5cGVzQWxsb3dlZE1hcmt1cCArPSAnPGxhYmVsIGZvcj1cInNhbGVzZm9yY2VfcmVjb3JkX3R5cGVzX2FsbG93ZWRcIj5BbGxvd2VkIFJlY29yZCBUeXBlczo8L2xhYmVsPjxkaXYgY2xhc3M9XCJjaGVja2JveGVzXCI+Jztcblx0XHRcdFx0XHRcdCQuZWFjaCggcmVzcG9uc2UuZGF0YS5yZWNvcmRUeXBlSW5mb3MsIGZ1bmN0aW9uKCBpbmRleCwgdmFsdWUgKSB7XG5cdFx0XHRcdFx0XHRcdHJlY29yZFR5cGVzQWxsb3dlZE1hcmt1cCArPSAnPGxhYmVsPjxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBjbGFzcz1cImZvcm0tY2hlY2tib3hcIiB2YWx1ZT1cIicgKyBpbmRleCArICdcIiBuYW1lPVwic2FsZXNmb3JjZV9yZWNvcmRfdHlwZXNfYWxsb3dlZFsnICsgaW5kZXggKyAnXVwiIGlkPVwic2FsZXNmb3JjZV9yZWNvcmRfdHlwZXNfYWxsb3dlZC0nICsgaW5kZXggKyAnXCI+ICcgKyB2YWx1ZSArICc8L2xhYmVsPic7XG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdHJlY29yZFR5cGVzQWxsb3dlZE1hcmt1cCArPSAnPC9kaXY+JztcblxuXG5cdFx0XHRcdFx0XHRyZWNvcmRUeXBlRGVmYXVsdE1hcmt1cCArPSAnPGxhYmVsIGZvcj1cInNhbGVzZm9yY2VfcmVjb3JkX3R5cGVfZGVmYXVsdFwiPkRlZmF1bHQgUmVjb3JkIFR5cGU6PC9sYWJlbD4nO1xuXHRcdFx0XHRcdFx0cmVjb3JkVHlwZURlZmF1bHRNYXJrdXAgKz0gJzxzZWxlY3QgbmFtZT1cInNhbGVzZm9yY2VfcmVjb3JkX3R5cGVfZGVmYXVsdFwiIGlkPVwic2FsZXNmb3JjZV9yZWNvcmRfdHlwZV9kZWZhdWx0XCI+PG9wdGlvbiB2YWx1ZT1cIlwiPi0gU2VsZWN0IHJlY29yZCB0eXBlIC08L29wdGlvbj4nO1xuXHRcdFx0XHRcdFx0JC5lYWNoKCByZXNwb25zZS5kYXRhLnJlY29yZFR5cGVJbmZvcywgZnVuY3Rpb24oIGluZGV4LCB2YWx1ZSApIHtcblx0XHRcdFx0XHRcdFx0cmVjb3JkVHlwZURlZmF1bHRNYXJrdXAgKz0gJzxvcHRpb24gdmFsdWU9XCInICsgaW5kZXggKyAnXCI+JyArIHZhbHVlICsgJzwvb3B0aW9uPic7XG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQkKCAnLnNhbGVzZm9yY2VfcmVjb3JkX3R5cGVzX2FsbG93ZWQnICkuaHRtbCggcmVjb3JkVHlwZXNBbGxvd2VkTWFya3VwICk7XG5cdFx0XHRcdFx0JCggJy5zYWxlc2ZvcmNlX3JlY29yZF90eXBlX2RlZmF1bHQnICkuaHRtbCggcmVjb3JkVHlwZURlZmF1bHRNYXJrdXAgKTtcblxuXHRcdFx0XHRcdGlmICggMCA8ICQoIHJlc3BvbnNlLmRhdGEuZmllbGRzICkubGVuZ3RoICkge1xuXHRcdFx0XHRcdFx0ZGF0ZU1hcmt1cCArPSAnPGxhYmVsIGZvcj1cInB1bGxfdHJpZ2dlcl9maWVsZFwiPkRhdGUgZmllbGQgdG8gdHJpZ2dlciBwdWxsOjwvbGFiZWw+Jztcblx0XHRcdFx0XHRcdGRhdGVNYXJrdXAgKz0gJzxzZWxlY3QgbmFtZT1cInB1bGxfdHJpZ2dlcl9maWVsZFwiIGlkPVwicHVsbF90cmlnZ2VyX2ZpZWxkXCI+PG9wdGlvbiB2YWx1ZT1cIlwiPi0gU2VsZWN0IGRhdGUgZmllbGQgLTwvb3B0aW9uPidcblx0XHRcdFx0XHRcdCQuZWFjaCggcmVzcG9uc2UuZGF0YS5maWVsZHMsIGZ1bmN0aW9uKCBpbmRleCwgdmFsdWUgKSB7XG5cdFx0XHRcdFx0XHRcdGRhdGVNYXJrdXAgKz0gJzxvcHRpb24gdmFsdWU9XCInICsgdmFsdWUubmFtZSArICdcIj4nICsgdmFsdWUubGFiZWwgKyAnPC9vcHRpb24+Jztcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0ZGF0ZU1hcmt1cCArPSAnPC9zZWxlY3Q+Jztcblx0XHRcdFx0XHRcdGRhdGVNYXJrdXAgKz0gJzxwIGNsYXNzPVwiZGVzY3JpcHRpb25cIj5UaGVzZSBhcmUgZGF0ZSBmaWVsZHMgdGhhdCBjYW4gY2F1c2UgV29yZFByZXNzIHRvIHB1bGwgYW4gdXBkYXRlIGZyb20gU2FsZXNmb3JjZSwgYWNjb3JkaW5nIHRvIHRoZSA8Y29kZT5zYWxlc2ZvcmNlX3B1bGw8L2NvZGU+IGNsYXNzLjwvcD4nXG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0JCggJy5wdWxsX3RyaWdnZXJfZmllbGQnICkuaHRtbCggZGF0ZU1hcmt1cCApO1xuXG5cdFx0XHRcdFx0aWYgKCAnJyAhPT0gcmVjb3JkVHlwZXNBbGxvd2VkTWFya3VwICkge1xuXHRcdFx0XHRcdFx0JCggJy5zYWxlc2ZvcmNlX3JlY29yZF90eXBlc19hbGxvd2VkJyApLnNob3coKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0JCggJy5zYWxlc2ZvcmNlX3JlY29yZF90eXBlc19hbGxvd2VkJyApLmhpZGUoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0aWYgKCAnJyAhPT0gcmVjb3JkVHlwZURlZmF1bHRNYXJrdXAgKSB7XG5cdFx0XHRcdFx0XHQkKCAnLnNhbGVzZm9yY2VfcmVjb3JkX3R5cGVfZGVmYXVsdCcgKS5zaG93KCk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdCQoICcuc2FsZXNmb3JjZV9yZWNvcmRfdHlwZV9kZWZhdWx0JyApLmhpZGUoKTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRpZiAoICcnICE9PSBkYXRlTWFya3VwICkge1xuXHRcdFx0XHRcdFx0JCggJy5wdWxsX3RyaWdnZXJfZmllbGQnICkuc2hvdygpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHQkKCAnLnB1bGxfdHJpZ2dlcl9maWVsZCcgKS5oaWRlKCk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aWYgKCBqUXVlcnkuZm4uc2VsZWN0MiApIHtcblx0XHRcdFx0XHRcdCQoICdzZWxlY3Qjc2FsZXNmb3JjZV9yZWNvcmRfdHlwZV9kZWZhdWx0JyApLnNlbGVjdDIoKTtcblx0XHRcdFx0XHRcdCQoICdzZWxlY3QjcHVsbF90cmlnZ2VyX2ZpZWxkJyApLnNlbGVjdDIoKTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0fSk7XG5cdFx0XHR9LCBkZWxheVRpbWUgKTtcblx0XHR9KTtcblx0fVxuXHQvKipcblx0ICogRHVwbGljYXRlcyB0aGUgZmllbGRzIGZvciBhIG5ldyByb3cgaW4gdGhlIGZpZWxkbWFwIG9wdGlvbnMgc2NyZWVuLlxuXHQgKi9cblx0IGZ1bmN0aW9uIGFkZEZpZWxkTWFwcGluZ1JvdygpIHtcblx0XHQkKCAnI2FkZC1maWVsZC1tYXBwaW5nJyApLmNsaWNrKCBmdW5jdGlvbigpIHtcblx0XHRcdHZhciBzYWxlc2ZvcmNlT2JqZWN0ID0gJCggJyNzYWxlc2ZvcmNlX29iamVjdCcgKS52YWwoKTtcblx0XHRcdHZhciB3b3JkcHJlc3NPYmplY3QgPSAkKCAnI3dvcmRwcmVzc19vYmplY3QnICkudmFsKCk7XG5cdFx0XHR2YXIgbmV3S2V5ID0gbmV3IERhdGUoKS5nZXRVVENNaWxsaXNlY29uZHMoKTtcblx0XHRcdHZhciBsYXN0Um93ID0gJCggJ3RhYmxlLmZpZWxkcyB0Ym9keSB0cicgKS5sYXN0KCk7XG5cdFx0XHR2YXIgb2xkS2V5ID0gbGFzdFJvdy5hdHRyKCAnZGF0YS1rZXknICk7XG5cdFx0XHRvbGRLZXkgPSBuZXcgUmVnRXhwKCBvbGRLZXksICdnJyApO1xuXHRcdFx0JCggdGhpcyApLnRleHQoICdBZGQgYW5vdGhlciBmaWVsZCBtYXBwaW5nJyApO1xuXHRcdFx0aWYgKCAnJyAhPT0gd29yZHByZXNzT2JqZWN0ICYmICcnICE9PSBzYWxlc2ZvcmNlT2JqZWN0ICkge1xuXHRcdFx0XHRmaWVsZG1hcEZpZWxkcyggb2xkS2V5LCBuZXdLZXksIGxhc3RSb3cgKTtcblx0XHRcdFx0JCggdGhpcyApLnBhcmVudCgpLmZpbmQoICcubWlzc2luZy1vYmplY3QnICkucmVtb3ZlKCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHQkKCB0aGlzICkucGFyZW50KCkucHJlcGVuZCggJzxkaXYgY2xhc3M9XCJlcnJvciBtaXNzaW5nLW9iamVjdFwiPjxzcGFuPllvdSBoYXZlIHRvIHBpY2sgYSBXb3JkUHJlc3Mgb2JqZWN0IGFuZCBhIFNhbGVzZm9yY2Ugb2JqZWN0IHRvIGFkZCBmaWVsZCBtYXBwaW5nLjwvc3Bhbj48L2Rpdj4nICk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fSk7XG5cdH1cblx0LyoqXG5cdCAqIEdldHMgdGhlIFdvcmRQcmVzcyBhbmQgU2FsZXNmb3JjZSBmaWVsZCByZXN1bHRzIHZpYSBhbiBBamF4IGNhbGxcblx0ICogQHBhcmFtIHN0cmluZyBvbGRLZXkgdGhlIGRhdGEta2V5IGF0dHJpYnV0ZSBvZiB0aGUgc2V0IHRoYXQgaXMgYmVpbmcgY2xvbmVkXG5cdCAqIEBwYXJhbSBzdHJpbmcgbmV3S2V5IHRoZSBkYXRhLWtleSBhdHRyaWJ1dGUgZm9yIHRoZSBvbmUgd2UncmUgYXBwZW5kaW5nXG5cdCAqIEBwYXJhbSBvYmplY3QgbGFzdFJvdyB0aGUgbGFzdCBzZXQgb2YgdGhlIGZpZWxkbWFwXG5cdCAqL1xuXHRmdW5jdGlvbiBmaWVsZG1hcEZpZWxkcyggb2xkS2V5LCBuZXdLZXksIGxhc3RSb3cgKSB7XG5cdFx0dmFyIG5leHRSb3cgPSAnJztcbiAgICAgICAgaWYgKCBqUXVlcnkuZm4uc2VsZWN0MiApIHtcbiAgICAgICAgXHRuZXh0Um93ID0gbGFzdFJvdy5maW5kKCAnc2VsZWN0JyApXG5cdCAgICAgICAgICAgIC5zZWxlY3QyKCAnZGVzdHJveScgKVxuXHQgICAgICAgICAgICAuZW5kKClcblx0ICAgICAgICAgICAgLmNsb25lKCB0cnVlICkucmVtb3ZlQ2xhc3MoICdmaWVsZG1hcC10ZW1wbGF0ZScgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgXHRuZXh0Um93ID0gbGFzdFJvdy5jbG9uZSggdHJ1ZSApO1xuICAgICAgICB9XG5cdFx0JCggbmV4dFJvdyApLmF0dHIoICdkYXRhLWtleScsIG5ld0tleSApO1xuXHRcdCQoIG5leHRSb3cgKS5lYWNoKGZ1bmN0aW9uKCkge1xuXHRcdFx0JCggdGhpcyApLmh0bWwoIGZ1bmN0aW9uKCBpLCBoICkge1xuXHRcdFx0XHRyZXR1cm4gaC5yZXBsYWNlKCBvbGRLZXksIG5ld0tleSApO1xuXHRcdFx0fSk7XG5cdFx0fSk7XG5cdFx0JCggJ3RhYmxlLmZpZWxkcyB0Ym9keScgKS5hcHBlbmQoIG5leHRSb3cgKTtcblx0XHRpZiAoIGpRdWVyeS5mbi5zZWxlY3QyICkge1xuXHRcdFx0bGFzdFJvdy5maW5kKCAnc2VsZWN0JyApLnNlbGVjdDIoKTtcblx0XHRcdG5leHRSb3cuZmluZCggJ3NlbGVjdCcgKS5zZWxlY3QyKCk7XG5cdFx0fVxuXHR9XG5cdC8qKlxuXHQgKiBIYW5kbGUgbWFudWFsIHB1c2ggYW5kIHB1bGwgb2Ygb2JqZWN0c1xuXHQgKi9cblx0ZnVuY3Rpb24gcHVzaEFuZFB1bGxPYmplY3RzKCkge1xuXHRcdCQoICcuc2FsZXNmb3JjZV91c2VyX2FqYXhfbWVzc2FnZScgKS5oaWRlKCk7XG5cdFx0aWYgKCAwIDwgJCggJyN3b3JkcHJlc3Nfb2JqZWN0X2FqYXgnICkubGVuZ3RoICkge1xuXHRcdFx0JCggJy5wdXNoX3RvX3NhbGVzZm9yY2VfYnV0dG9uJyApLm9uKCAnY2xpY2snLCBmdW5jdGlvbigpIHtcblx0XHRcdFx0dmFyIHdvcmRwcmVzc09iamVjdCA9ICQoICcjd29yZHByZXNzX29iamVjdF9hamF4JyApLnZhbCgpO1xuXHRcdFx0XHR2YXIgd29yZHByZXNzSWQgPSAkKCAnI3dvcmRwcmVzc19pZF9hamF4JyApLnZhbCgpO1xuXHRcdFx0XHR2YXIgc2FsZXNmb3JjZUlkID0gJCggJyNzYWxlc2ZvcmNlX2lkX2FqYXgnICkudmFsKCk7XG5cdFx0XHRcdHZhciBkYXRhID0ge1xuXHRcdFx0XHRcdCdhY3Rpb24nIDogJ3B1c2hfdG9fc2FsZXNmb3JjZScsXG5cdFx0XHRcdFx0J3dvcmRwcmVzc19vYmplY3QnIDogd29yZHByZXNzT2JqZWN0LFxuXHRcdFx0XHRcdCd3b3JkcHJlc3NfaWQnIDogd29yZHByZXNzSWQsXG5cdFx0XHRcdFx0J3NhbGVzZm9yY2VfaWQnIDogc2FsZXNmb3JjZUlkXG5cdFx0XHRcdH1cblx0XHRcdFx0JC5wb3N0KCBhamF4dXJsLCBkYXRhLCBmdW5jdGlvbiggcmVzcG9uc2UgKSB7XG5cdFx0XHRcdFx0aWYgKCB0cnVlID09PSByZXNwb25zZS5zdWNjZXNzICkge1xuXHRcdFx0XHRcdFx0dXBkYXRlU2FsZXNmb3JjZVVzZXJTdW1tYXJ5KCk7XG5cdFx0XHRcdFx0XHQkKCAnLnNhbGVzZm9yY2VfdXNlcl9hamF4X21lc3NhZ2UnICkud2lkdGgoICQoICcubWFwcGVkLXNhbGVzZm9yY2UtdXNlcicgKS53aWR0aCgpIC0gMjcgKTtcblx0XHRcdFx0XHRcdCQoICcuc2FsZXNmb3JjZV91c2VyX2FqYXhfbWVzc2FnZScgKS5odG1sKCAnPHA+VGhpcyBvYmplY3QgaGFzIGJlZW4gcHVzaGVkIHRvIFNhbGVzZm9yY2UuPC9wPicgKS5mYWRlSW4oKS5kZWxheSggNDAwMCApLmZhZGVPdXQoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0JCggJy5wdWxsX2Zyb21fc2FsZXNmb3JjZV9idXR0b24nICkub24oICdjbGljaycsIGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIHNhbGVzZm9yY2VJZCA9ICQoICcjc2FsZXNmb3JjZV9pZF9hamF4JyApLnZhbCgpO1xuXHRcdFx0dmFyIHdvcmRwcmVzc09iamVjdCA9ICQoICcjd29yZHByZXNzX29iamVjdF9hamF4JyApLnZhbCgpO1xuXHRcdFx0dmFyIGRhdGEgPSB7XG5cdFx0XHRcdCdhY3Rpb24nIDogJ3B1bGxfZnJvbV9zYWxlc2ZvcmNlJyxcblx0XHRcdFx0J3NhbGVzZm9yY2VfaWQnIDogc2FsZXNmb3JjZUlkLFxuXHRcdFx0XHQnd29yZHByZXNzX29iamVjdCcgOiB3b3JkcHJlc3NPYmplY3Rcblx0XHRcdH1cblx0XHRcdCQucG9zdCggYWpheHVybCwgZGF0YSwgZnVuY3Rpb24oIHJlc3BvbnNlICkge1xuXHRcdFx0XHRpZiAoIHRydWUgPT09IHJlc3BvbnNlLnN1Y2Nlc3MgKSB7XG5cdFx0XHRcdFx0dXBkYXRlU2FsZXNmb3JjZVVzZXJTdW1tYXJ5KCk7XG5cdFx0XHRcdFx0JCggJy5zYWxlc2ZvcmNlX3VzZXJfYWpheF9tZXNzYWdlJyApLndpZHRoKCAkKCAnLm1hcHBlZC1zYWxlc2ZvcmNlLXVzZXInICkud2lkdGgoKSAtIDI3ICk7XG5cdFx0XHRcdFx0JCggJy5zYWxlc2ZvcmNlX3VzZXJfYWpheF9tZXNzYWdlJyApLmh0bWwoICc8cD5UaGlzIG9iamVjdCBoYXMgYmVlbiBwdWxsZWQgZnJvbSBTYWxlc2ZvcmNlLjwvcD4nICkuZmFkZUluKCkuZGVsYXkoIDQwMDAgKS5mYWRlT3V0KCk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH0pO1xuXHR9XG5cdC8qKlxuXHQgKiBVcGRhdGVzIHRoZSB1c2VyIHByb2ZpbGUgc3VtbWFyeSBvZiBTYWxlc2ZvcmNlIGluZm8uXG5cdCAqL1xuXHRmdW5jdGlvbiB1cGRhdGVTYWxlc2ZvcmNlVXNlclN1bW1hcnkoKSB7XG5cdFx0dmFyIG1hcHBpbmdJZCA9ICQoICcjbWFwcGluZ19pZF9hamF4JyApLnZhbCgpO1xuXHRcdHZhciBkYXRhID0ge1xuXHRcdFx0J2FjdGlvbicgOiAncmVmcmVzaF9tYXBwZWRfZGF0YScsXG5cdFx0XHQnbWFwcGluZ19pZCcgOiBtYXBwaW5nSWRcblx0XHR9XG5cdFx0JC5wb3N0KCBhamF4dXJsLCBkYXRhLCBmdW5jdGlvbiggcmVzcG9uc2UgKSB7XG5cdFx0XHRpZiAoIHRydWUgPT09IHJlc3BvbnNlLnN1Y2Nlc3MgKSB7XG5cdFx0XHRcdCQoICd0ZC5sYXN0X3N5bmNfbWVzc2FnZScgKS50ZXh0KCByZXNwb25zZS5kYXRhLmxhc3Rfc3luY19tZXNzYWdlICk7XG5cdFx0XHRcdCQoICd0ZC5sYXN0X3N5bmNfYWN0aW9uJyApLnRleHQoIHJlc3BvbnNlLmRhdGEubGFzdF9zeW5jX2FjdGlvbiApO1xuXHRcdFx0XHQkKCAndGQubGFzdF9zeW5jX3N0YXR1cycgKS50ZXh0KCByZXNwb25zZS5kYXRhLmxhc3Rfc3luY19zdGF0dXMgKTtcblx0XHRcdFx0JCggJ3RkLmxhc3Rfc3luYycgKS50ZXh0KCByZXNwb25zZS5kYXRhLmxhc3Rfc3luYyApO1xuXHRcdFx0XHRpZiAoICcxJyA9PT0gcmVzcG9uc2UuZGF0YS5sYXN0X3N5bmNfc3RhdHVzICkge1xuXHRcdFx0XHRcdCQoICd0ZC5sYXN0X3N5bmNfc3RhdHVzJyApLnRleHQoICdzdWNjZXNzJyApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblx0LyoqXG5cdCAqIENsZWFyIHRoZSBwbHVnaW4gY2FjaGUgdmlhIEFqYXggcmVxdWVzdC5cblx0ICovXG5cdGZ1bmN0aW9uIGNsZWFyU2Z3cENhY2hlTGluaygpIHtcblx0XHQkKCAnI2NsZWFyLXNmd3AtY2FjaGUnICkuY2xpY2soIGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIGRhdGEgPSB7XG5cdFx0XHRcdCdhY3Rpb24nIDogJ2NsZWFyX3Nmd3BfY2FjaGUnXG5cdFx0XHR9XG5cdFx0XHR2YXIgdGhhdCA9ICQoIHRoaXMgKTtcblx0XHRcdCQucG9zdCggYWpheHVybCwgZGF0YSwgZnVuY3Rpb24oIHJlc3BvbnNlICkge1xuXHRcdFx0XHRpZiAoIHRydWUgPT09IHJlc3BvbnNlLnN1Y2Nlc3MgJiYgdHJ1ZSA9PT0gcmVzcG9uc2UuZGF0YS5zdWNjZXNzICkge1xuXHRcdFx0XHRcdHRoYXQucGFyZW50KCkuaHRtbCggcmVzcG9uc2UuZGF0YS5tZXNzYWdlICkuZmFkZUluKCk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH0pO1xuXHR9XG5cblx0Ly8gbG9hZCBhdmFpbGFibGUgb3B0aW9ucyBpZiB0aGUgd29yZHByZXNzIG9iamVjdCBjaGFuZ2VzXG5cdCQoIGRvY3VtZW50ICkub24oICdjaGFuZ2UnLCAnc2VsZWN0I3dvcmRwcmVzc19vYmplY3QnLCBmdW5jdGlvbigpIHtcblx0XHR2YXIgdGltZW91dDtcblx0XHRsb2FkRmllbGRPcHRpb25zKCAnd29yZHByZXNzJywgJCggdGhpcyApLnZhbCgpICk7XG5cdFx0Y2xlYXJUaW1lb3V0KCB0aW1lb3V0ICk7XG5cdFx0dGltZW91dCA9IHNldFRpbWVvdXQoIGZ1bmN0aW9uKCkge1xuXHRcdFx0JCggJ3RhYmxlLmZpZWxkcyB0Ym9keSB0cicgKS5mYWRlT3V0KCk7XG5cdFx0XHQkKCAndGFibGUuZmllbGRzIHRib2R5IHRyJyApLm5vdCggJy5maWVsZG1hcC10ZW1wbGF0ZScgKS5yZW1vdmUoKTtcblx0XHR9LCAxMDAwICk7XG5cdH0pO1xuXG5cdC8vIGxvYWQgYXZhaWxhYmxlIG9wdGlvbnMgaWYgdGhlIHNhbGVzZm9yY2Ugb2JqZWN0IGNoYW5nZXNcblx0JCggZG9jdW1lbnQgKS5vbiggJ2NoYW5nZScsICdzZWxlY3Qjc2FsZXNmb3JjZV9vYmplY3QnLCBmdW5jdGlvbigpIHtcblx0XHR2YXIgdGltZW91dDtcblx0XHRsb2FkRmllbGRPcHRpb25zKCAnc2FsZXNmb3JjZScsICQoIHRoaXMgKS52YWwoKSApO1xuXHRcdGNsZWFyVGltZW91dCggdGltZW91dCApO1xuXHRcdHRpbWVvdXQgPSBzZXRUaW1lb3V0KCBmdW5jdGlvbigpIHtcblx0XHRcdCQoICd0YWJsZS5maWVsZHMgdGJvZHkgdHInICkuZmFkZU91dCgpO1xuXHRcdFx0JCggJ3RhYmxlLmZpZWxkcyB0Ym9keSB0cicgKS5ub3QoICcuZmllbGRtYXAtdGVtcGxhdGUnICkucmVtb3ZlKCk7XG5cdFx0fSwgMTAwMCApO1xuXHR9KTtcblxuXHQvLyBzaG93IHdzZGwgZmllbGQgaWYgc29hcCBpcyBlbmFibGVkXG5cdCQoIGRvY3VtZW50ICkub24oICdjaGFuZ2UnLCAnLm9iamVjdC1zeW5jLWZvci1zYWxlc2ZvcmNlLWVuYWJsZS1zb2FwIGlucHV0JywgZnVuY3Rpb24oKSB7XG5cdFx0dG9nZ2xlU29hcEZpZWxkcygpO1xuXHR9KTtcblxuXHQvKipcblx0ICogQXMgdGhlIERydXBhbCBwbHVnaW4gZG9lcywgd2Ugb25seSBhbGxvdyBvbmUgZmllbGQgdG8gYmUgYSBwcmVtYXRjaFxuXHQgKi9cblx0JCggZG9jdW1lbnQgKS5vbiggJ2NsaWNrJywgJy5jb2x1bW4taXNfcHJlbWF0Y2ggaW5wdXQnLCBmdW5jdGlvbigpIHtcblx0XHQkKCAnLmNvbHVtbi1pc19wcmVtYXRjaCBpbnB1dCcgKS5ub3QoIHRoaXMgKS5wcm9wKCAnY2hlY2tlZCcsIGZhbHNlICk7XG5cdH0pO1xuXHQvKipcblx0ICogQXMgdGhlIERydXBhbCBwbHVnaW4gZG9lcywgd2Ugb25seSBhbGxvdyBvbmUgZmllbGQgdG8gYmUgYSBrZXlcblx0ICovXG5cdCQoIGRvY3VtZW50ICkub24oICdjbGljaycsICcuY29sdW1uLWlzX2tleSBpbnB1dCcsIGZ1bmN0aW9uKCkge1xuXHRcdCQoICcuY29sdW1uLWlzX2tleSBpbnB1dCcgKS5ub3QoIHRoaXMgKS5wcm9wKCAnY2hlY2tlZCcsIGZhbHNlICk7XG5cdH0pO1xuXHQvKipcblx0ICogV2hlbiB0aGUgcGx1Z2luIGxvYWRzLCBpbml0aWFsaXplIG9yIGVuYWJsZSB0aGluZ3M6XG5cdCAqIFNlbGVjdDIgb24gc2VsZWN0IGZpZWxkc1xuXHQgKiBDbGVhciBmaWVsZHMgd2hlbiB0aGUgdGFyZ2V0ZWQgV29yZFByZXNzIG9yIFNhbGVzZm9yY2Ugb2JqZWN0IHR5cGUgY2hhbmdlc1xuXHQgKiBBZGQgYSBzcGlubmVyIGZvciBBamF4IHJlcXVlc3RzXG5cdCAqIE1hbmFnZSB0aGUgZGlzcGxheSBmb3IgU2FsZXNmb3JjZSBvYmplY3QgZmllbGRzIGJhc2VkIG9uIEFQSSByZXBvbnNlXG5cdCAqIE1hbnVhbCBwdXNoIGFuZCBwdWxsXG5cdCAqIENsZWFyaW5nIHRoZSBjYWNoZVxuXHQgKi9cblx0JCggZG9jdW1lbnQgKS5yZWFkeSggZnVuY3Rpb24oKSB7XG5cblx0XHQvLyBmb3IgbWFpbiBhZG1pbiBzZXR0aW5nc1xuXHRcdHRvZ2dsZVNvYXBGaWVsZHMoKTtcblxuXHRcdC8vIGlmIHRoZXJlIGlzIGFscmVhZHkgYSB3cCBvciBzZiBvYmplY3QsIG1ha2Ugc3VyZSBpdCBoYXMgdGhlIHJpZ2h0IGZpZWxkc1xuXHRcdGxvYWRGaWVsZE9wdGlvbnMoICd3b3JkcHJlc3MnLCAkKCAnc2VsZWN0I3dvcmRwcmVzc19vYmplY3QnICkudmFsKCkgKTtcblx0XHRsb2FkRmllbGRPcHRpb25zKCAnc2FsZXNmb3JjZScsICQoICdzZWxlY3Qjc2FsZXNmb3JjZV9vYmplY3QnICkudmFsKCkgKTtcblxuXHRcdGlmICggalF1ZXJ5LmZuLnNlbGVjdDIgKSB7XG5cdFx0XHQkKCAnc2VsZWN0I3dvcmRwcmVzc19vYmplY3QnICkuc2VsZWN0MigpO1xuXHRcdFx0JCggJ3NlbGVjdCNzYWxlc2ZvcmNlX29iamVjdCcgKS5zZWxlY3QyKCk7XG5cdFx0XHQkKCAnc2VsZWN0I3NhbGVzZm9yY2VfcmVjb3JkX3R5cGVfZGVmYXVsdCcgKS5zZWxlY3QyKCk7XG5cdFx0XHQkKCAnc2VsZWN0I3B1bGxfdHJpZ2dlcl9maWVsZCcgKS5zZWxlY3QyKCk7XG5cdFx0XHQkKCAnLmNvbHVtbi13b3JkcHJlc3NfZmllbGQgc2VsZWN0JyApLnNlbGVjdDIoKTtcblx0XHRcdCQoICcuY29sdW1uLXNhbGVzZm9yY2VfZmllbGQgc2VsZWN0JyApLnNlbGVjdDIoKTtcblx0XHR9XG5cblx0XHQvLyB0b2RvOiBuZWVkIHRvIGZpeCB0aGlzIHNvIGl0IGRvZXNuJ3QgcnVuIGFsbCB0aGUgc3Bpbm5lcnMgYXQgdGhlIHNhbWUgdGltZSB3aGVuIHRoZXJlIGFyZSBtdWx0aXBsZXMgb24gdGhlIHNhbWUgcGFnZVxuXHRcdCQoIGRvY3VtZW50ICkuYWpheFN0YXJ0KCBmdW5jdGlvbigpIHtcblx0XHRcdCQoICcuc3Bpbm5lcicgKS5hZGRDbGFzcyggJ2lzLWFjdGl2ZScgKTtcblx0XHR9KS5hamF4U3RvcCggZnVuY3Rpb24oKSB7XG5cdFx0XHQkKCAnLnNwaW5uZXInICkucmVtb3ZlQ2xhc3MoICdpcy1hY3RpdmUnICk7XG5cdFx0fSk7XG5cdFx0c2FsZXNmb3JjZU9iamVjdEZpZWxkcygpO1xuXHRcdGFkZEZpZWxkTWFwcGluZ1JvdygpO1xuXG5cdFx0Ly8gZm9yIHB1c2gvcHVsbCBtZXRob2RzIHJ1bm5pbmcgdmlhIGFqYXhcblx0XHRwdXNoQW5kUHVsbE9iamVjdHMoKTtcblxuXHRcdC8vIGZvciBjbGVhcmluZyB0aGUgcGx1Z2luIGNhY2hlXG5cdFx0Y2xlYXJTZndwQ2FjaGVMaW5rKCk7XG5cdH0pO1xufSggalF1ZXJ5ICkgKTtcbiJdfQ== diff --git a/assets/js/object-sync-for-salesforce-admin.min.js b/assets/js/object-sync-for-salesforce-admin.min.js index 45d87646..966c5362 100644 --- a/assets/js/object-sync-for-salesforce-admin.min.js +++ b/assets/js/object-sync-for-salesforce-admin.min.js @@ -1 +1 @@ -"use strict";!function(l){function s(t,e){var s={action:"get_"+t+"_object_fields"},a="",o=l(".column-"+t+"_field select option").first().text();if(a+='","wordpress"===t)s.wordpress_object=e;else{if("salesforce"!==t)return a;s.salesforce_object=e}l.post(ajaxurl,s,function(e){l.each(e.data.fields,function(e,s){"wordpress"===t?a+='":"salesforce"===t&&(a+='")}),l(".column-"+t+"_field select").html(a)})}function e(){0 *").length&&l(".salesforce_record_types_allowed").hide(),0===l(".salesforce_record_type_default > *").length&&l(".salesforce_record_type_default").hide(),0===l(".pull_trigger_field > *").length&&l(".pull_trigger_field").hide(),l("#salesforce_object").on("change",function(){var s=this;e(function(){var e={action:"get_salesforce_object_description",include:["fields","recordTypeInfos"],field_type:"datetime",salesforce_object:s.value};l.post(ajaxurl,e,function(e){var t="",a="",o="";0Allowed Record Types:
',l.each(e.data.recordTypeInfos,function(e,s){t+='"}),t+="
",a+='',a+='',l.each(e.data.fields,function(e,s){o+='"}),o+="",o+='

These are date fields that can cause WordPress to pull an update from Salesforce, according to the salesforce_pull class.

'),l(".pull_trigger_field").html(o),""!==t?l(".salesforce_record_types_allowed").show():l(".salesforce_record_types_allowed").hide(),""!==a?l(".salesforce_record_type_default").show():l(".salesforce_record_type_default").hide(),""!==o?l(".pull_trigger_field").show():l(".pull_trigger_field").hide(),jQuery.fn.select2&&(l("select#salesforce_record_type_default").select2(),l("select#pull_trigger_field").select2())})},1e3)})}function a(){l("#add-field-mapping").click(function(){var e=l("#salesforce_object").val(),s=l("#wordpress_object").val(),t=(new Date).getUTCMilliseconds(),a=l("table.fields tbody tr").last(),o=a.attr("data-key");return o=new RegExp(o,"g"),l(this).text("Add another field mapping"),""!==s&&""!==e?(function(t,a,e){var s="";s=jQuery.fn.select2?e.find("select").select2("destroy").end().clone(!0).removeClass("fieldmap-template"):e.clone(!0);l(s).attr("data-key",a),l(s).each(function(){l(this).html(function(e,s){return s.replace(t,a)})}),l("table.fields tbody").append(s),jQuery.fn.select2&&(e.find("select").select2(),s.find("select").select2())}(o,t,a),l(this).parent().find(".missing-object").remove()):l(this).parent().prepend('
You have to pick a WordPress object and a Salesforce object to add field mapping.
'),!1})}function o(){var e={action:"refresh_mapped_data",mapping_id:l("#mapping_id_ajax").val()};l.post(ajaxurl,e,function(e){!0===e.success&&(l("td.last_sync_message").text(e.data.last_sync_message),l("td.last_sync_action").text(e.data.last_sync_action),l("td.last_sync_status").text(e.data.last_sync_status),l("td.last_sync").text(e.data.last_sync),"1"===e.data.last_sync_status&&l("td.last_sync_status").text("success"))})}l(document).on("change","select#wordpress_object",function(){var e;s("wordpress",l(this).val()),clearTimeout(e),e=setTimeout(function(){l("table.fields tbody tr").fadeOut(),l("table.fields tbody tr").not(":last").remove()},1e3)}),l(document).on("change","select#salesforce_object",function(){var e;s("salesforce",l(this).val()),clearTimeout(e),e=setTimeout(function(){l("table.fields tbody tr").fadeOut(),l("table.fields tbody tr").not(":last").remove()},1e3)}),l(document).on("change",".object-sync-for-salesforce-enable-soap input",function(){e()}),l(document).on("click",".column-is_prematch input",function(){l(".column-is_prematch input").not(this).prop("checked",!1)}),l(document).on("click",".column-is_key input",function(){l(".column-is_key input").not(this).prop("checked",!1)}),l(document).ready(function(){e(),s("wordpress",l("select#wordpress_object").val()),s("salesforce",l("select#salesforce_object").val()),jQuery.fn.select2&&(l("select#wordpress_object").select2(),l("select#salesforce_object").select2(),l("select#salesforce_record_type_default").select2(),l("select#pull_trigger_field").select2(),l(".column-wordpress_field select").select2(),l(".column-salesforce_field select").select2()),l(document).ajaxStart(function(){l(".spinner").addClass("is-active")}).ajaxStop(function(){l(".spinner").removeClass("is-active")}),t(),a(),l(".salesforce_user_ajax_message").hide(),0This object has been pushed to Salesforce.

").fadeIn().delay(4e3).fadeOut())}),!1}),l(".pull_from_salesforce_button").on("click",function(){var e={action:"pull_from_salesforce",salesforce_id:l("#salesforce_id_ajax").val(),wordpress_object:l("#wordpress_object_ajax").val()};return l.post(ajaxurl,e,function(e){!0===e.success&&(o(),l(".salesforce_user_ajax_message").width(l(".mapped-salesforce-user").width()-27),l(".salesforce_user_ajax_message").html("

This object has been pulled from Salesforce.

").fadeIn().delay(4e3).fadeOut())}),!1}),l("#clear-sfwp-cache").click(function(){var s=l(this);return l.post(ajaxurl,{action:"clear_sfwp_cache"},function(e){!0===e.success&&!0===e.data.success&&s.parent().html(e.data.message).fadeIn()}),!1})})}(jQuery); \ No newline at end of file +"use strict";!function(l){function t(s,e){var t={action:"get_"+s+"_object_fields"},a="",o=l(".column-"+s+"_field select option").first().text();if(a+='","wordpress"===s)t.wordpress_object=e;else{if("salesforce"!==s)return a;t.salesforce_object=e}l.post(ajaxurl,t,function(e){l.each(e.data.fields,function(e,t){"wordpress"===s?a+='":"salesforce"===s&&(a+='")}),l(".column-"+s+"_field select").html(a)})}function e(){0 *").length&&l(".salesforce_record_types_allowed").hide(),0===l(".salesforce_record_type_default > *").length&&l(".salesforce_record_type_default").hide(),0===l(".pull_trigger_field > *").length&&l(".pull_trigger_field").hide(),l("#salesforce_object").on("change",function(){var t=this;e(function(){var e={action:"get_salesforce_object_description",include:["fields","recordTypeInfos"],field_type:"datetime",salesforce_object:t.value};l.post(ajaxurl,e,function(e){var s="",a="",o="";0Allowed Record Types:
',l.each(e.data.recordTypeInfos,function(e,t){s+='"}),s+="
",a+='',a+='',l.each(e.data.fields,function(e,t){o+='"}),o+="",o+='

These are date fields that can cause WordPress to pull an update from Salesforce, according to the salesforce_pull class.

'),l(".pull_trigger_field").html(o),""!==s?l(".salesforce_record_types_allowed").show():l(".salesforce_record_types_allowed").hide(),""!==a?l(".salesforce_record_type_default").show():l(".salesforce_record_type_default").hide(),""!==o?l(".pull_trigger_field").show():l(".pull_trigger_field").hide(),jQuery.fn.select2&&(l("select#salesforce_record_type_default").select2(),l("select#pull_trigger_field").select2())})},1e3)})}function a(){l("#add-field-mapping").click(function(){var e=l("#salesforce_object").val(),t=l("#wordpress_object").val(),s=(new Date).getUTCMilliseconds(),a=l("table.fields tbody tr").last(),o=a.attr("data-key");return o=new RegExp(o,"g"),l(this).text("Add another field mapping"),""!==t&&""!==e?(function(s,a,e){var t="";t=jQuery.fn.select2?e.find("select").select2("destroy").end().clone(!0).removeClass("fieldmap-template"):e.clone(!0);l(t).attr("data-key",a),l(t).each(function(){l(this).html(function(e,t){return t.replace(s,a)})}),l("table.fields tbody").append(t),jQuery.fn.select2&&(e.find("select").select2(),t.find("select").select2())}(o,s,a),l(this).parent().find(".missing-object").remove()):l(this).parent().prepend('
You have to pick a WordPress object and a Salesforce object to add field mapping.
'),!1})}function o(){var e={action:"refresh_mapped_data",mapping_id:l("#mapping_id_ajax").val()};l.post(ajaxurl,e,function(e){!0===e.success&&(l("td.last_sync_message").text(e.data.last_sync_message),l("td.last_sync_action").text(e.data.last_sync_action),l("td.last_sync_status").text(e.data.last_sync_status),l("td.last_sync").text(e.data.last_sync),"1"===e.data.last_sync_status&&l("td.last_sync_status").text("success"))})}l(document).on("change","select#wordpress_object",function(){var e;t("wordpress",l(this).val()),clearTimeout(e),e=setTimeout(function(){l("table.fields tbody tr").fadeOut(),l("table.fields tbody tr").not(".fieldmap-template").remove()},1e3)}),l(document).on("change","select#salesforce_object",function(){var e;t("salesforce",l(this).val()),clearTimeout(e),e=setTimeout(function(){l("table.fields tbody tr").fadeOut(),l("table.fields tbody tr").not(".fieldmap-template").remove()},1e3)}),l(document).on("change",".object-sync-for-salesforce-enable-soap input",function(){e()}),l(document).on("click",".column-is_prematch input",function(){l(".column-is_prematch input").not(this).prop("checked",!1)}),l(document).on("click",".column-is_key input",function(){l(".column-is_key input").not(this).prop("checked",!1)}),l(document).ready(function(){e(),t("wordpress",l("select#wordpress_object").val()),t("salesforce",l("select#salesforce_object").val()),jQuery.fn.select2&&(l("select#wordpress_object").select2(),l("select#salesforce_object").select2(),l("select#salesforce_record_type_default").select2(),l("select#pull_trigger_field").select2(),l(".column-wordpress_field select").select2(),l(".column-salesforce_field select").select2()),l(document).ajaxStart(function(){l(".spinner").addClass("is-active")}).ajaxStop(function(){l(".spinner").removeClass("is-active")}),s(),a(),l(".salesforce_user_ajax_message").hide(),0This object has been pushed to Salesforce.

").fadeIn().delay(4e3).fadeOut())}),!1}),l(".pull_from_salesforce_button").on("click",function(){var e={action:"pull_from_salesforce",salesforce_id:l("#salesforce_id_ajax").val(),wordpress_object:l("#wordpress_object_ajax").val()};return l.post(ajaxurl,e,function(e){!0===e.success&&(o(),l(".salesforce_user_ajax_message").width(l(".mapped-salesforce-user").width()-27),l(".salesforce_user_ajax_message").html("

This object has been pulled from Salesforce.

").fadeIn().delay(4e3).fadeOut())}),!1}),l("#clear-sfwp-cache").click(function(){var t=l(this);return l.post(ajaxurl,{action:"clear_sfwp_cache"},function(e){!0===e.success&&!0===e.data.success&&t.parent().html(e.data.message).fadeIn()}),!1})})}(jQuery); \ No newline at end of file diff --git a/assets/js/src/admin.js b/assets/js/src/admin.js index 511ec82f..7e735371 100644 --- a/assets/js/src/admin.js +++ b/assets/js/src/admin.js @@ -272,7 +272,7 @@ clearTimeout( timeout ); timeout = setTimeout( function() { $( 'table.fields tbody tr' ).fadeOut(); - $( 'table.fields tbody tr' ).not( ':last' ).remove(); + $( 'table.fields tbody tr' ).not( '.fieldmap-template' ).remove(); }, 1000 ); }); @@ -283,7 +283,7 @@ clearTimeout( timeout ); timeout = setTimeout( function() { $( 'table.fields tbody tr' ).fadeOut(); - $( 'table.fields tbody tr' ).not( ':last' ).remove(); + $( 'table.fields tbody tr' ).not( '.fieldmap-template' ).remove(); }, 1000 ); }); From 8ac45a648fc195033b39ccfb51c0960ba667ce07 Mon Sep 17 00:00:00 2001 From: Jonathan Stegall Date: Sun, 5 Jan 2020 13:17:52 -0600 Subject: [PATCH 12/27] don't replace on existing fieldmaps --- assets/js/object-sync-for-salesforce-admin.js | 12 +++++++++--- assets/js/object-sync-for-salesforce-admin.min.js | 2 +- assets/js/src/admin.js | 8 ++++++-- 3 files changed, 16 insertions(+), 6 deletions(-) diff --git a/assets/js/object-sync-for-salesforce-admin.js b/assets/js/object-sync-for-salesforce-admin.js index b2ab2f11..f384ecfd 100644 --- a/assets/js/object-sync-for-salesforce-admin.js +++ b/assets/js/object-sync-for-salesforce-admin.js @@ -5,8 +5,14 @@ var data = { 'action': 'get_' + system + '_object_fields' }; + var selectField = '.column-' + system + '_field select'; var fields = ''; - var first_field = $('.column-' + system + '_field select option').first().text(); + var first_field = $(selectField + ' option').first().text(); + + if ('' !== $(selectField).val()) { + return; + } + fields += ''; if ('wordpress' === system) { @@ -25,7 +31,7 @@ fields += ''; } }); - $('.column-' + system + '_field select').html(fields); + $(selectField).html(fields); }); } /** @@ -362,4 +368,4 @@ clearSfwpCacheLink(); }); })(jQuery); -//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFkbWluLmpzIl0sIm5hbWVzIjpbIiQiLCJsb2FkRmllbGRPcHRpb25zIiwic3lzdGVtIiwib2JqZWN0X25hbWUiLCJkYXRhIiwiZmllbGRzIiwiZmlyc3RfZmllbGQiLCJmaXJzdCIsInRleHQiLCJwb3N0IiwiYWpheHVybCIsInJlc3BvbnNlIiwiZWFjaCIsImluZGV4IiwidmFsdWUiLCJrZXkiLCJuYW1lIiwibGFiZWwiLCJodG1sIiwidG9nZ2xlU29hcEZpZWxkcyIsImxlbmd0aCIsImlzIiwic2hvdyIsImhpZGUiLCJzYWxlc2ZvcmNlT2JqZWN0RmllbGRzIiwiZGVsYXkiLCJ0aW1lciIsImNhbGxiYWNrIiwibXMiLCJjbGVhclRpbWVvdXQiLCJzZXRUaW1lb3V0Iiwib24iLCJ0aGF0IiwiZGVsYXlUaW1lIiwicmVjb3JkVHlwZXNBbGxvd2VkTWFya3VwIiwicmVjb3JkVHlwZURlZmF1bHRNYXJrdXAiLCJkYXRlTWFya3VwIiwicmVjb3JkVHlwZUluZm9zIiwialF1ZXJ5IiwiZm4iLCJzZWxlY3QyIiwiYWRkRmllbGRNYXBwaW5nUm93IiwiY2xpY2siLCJzYWxlc2ZvcmNlT2JqZWN0IiwidmFsIiwid29yZHByZXNzT2JqZWN0IiwibmV3S2V5IiwiRGF0ZSIsImdldFVUQ01pbGxpc2Vjb25kcyIsImxhc3RSb3ciLCJsYXN0Iiwib2xkS2V5IiwiYXR0ciIsIlJlZ0V4cCIsImZpZWxkbWFwRmllbGRzIiwicGFyZW50IiwiZmluZCIsInJlbW92ZSIsInByZXBlbmQiLCJuZXh0Um93IiwiZW5kIiwiY2xvbmUiLCJyZW1vdmVDbGFzcyIsImkiLCJoIiwicmVwbGFjZSIsImFwcGVuZCIsInB1c2hBbmRQdWxsT2JqZWN0cyIsIndvcmRwcmVzc0lkIiwic2FsZXNmb3JjZUlkIiwic3VjY2VzcyIsInVwZGF0ZVNhbGVzZm9yY2VVc2VyU3VtbWFyeSIsIndpZHRoIiwiZmFkZUluIiwiZmFkZU91dCIsIm1hcHBpbmdJZCIsImxhc3Rfc3luY19tZXNzYWdlIiwibGFzdF9zeW5jX2FjdGlvbiIsImxhc3Rfc3luY19zdGF0dXMiLCJsYXN0X3N5bmMiLCJjbGVhclNmd3BDYWNoZUxpbmsiLCJtZXNzYWdlIiwiZG9jdW1lbnQiLCJ0aW1lb3V0Iiwibm90IiwicHJvcCIsInJlYWR5IiwiYWpheFN0YXJ0IiwiYWRkQ2xhc3MiLCJhamF4U3RvcCJdLCJtYXBwaW5ncyI6Ijs7QUFBRSxXQUFVQSxDQUFWLEVBQWM7QUFFZixXQUFTQyxnQkFBVCxDQUEyQkMsTUFBM0IsRUFBbUNDLFdBQW5DLEVBQWlEO0FBQ2hELFFBQUlDLElBQUksR0FBRztBQUNWLGdCQUFXLFNBQVNGLE1BQVQsR0FBa0I7QUFEbkIsS0FBWDtBQUdBLFFBQUlHLE1BQU0sR0FBRyxFQUFiO0FBQ0EsUUFBSUMsV0FBVyxHQUFHTixDQUFDLENBQUUsYUFBYUUsTUFBYixHQUFzQixzQkFBeEIsQ0FBRCxDQUFpREssS0FBakQsR0FBeURDLElBQXpELEVBQWxCO0FBQ0FILElBQUFBLE1BQU0sSUFBSSxzQkFBc0JDLFdBQXRCLEdBQW9DLFdBQTlDOztBQUNBLFFBQUssZ0JBQWdCSixNQUFyQixFQUE4QjtBQUM3QkUsTUFBQUEsSUFBSSxDQUFDLGtCQUFELENBQUosR0FBMkJELFdBQTNCO0FBQ0EsS0FGRCxNQUVPLElBQUssaUJBQWlCRCxNQUF0QixFQUErQjtBQUNyQ0UsTUFBQUEsSUFBSSxDQUFDLG1CQUFELENBQUosR0FBNEJELFdBQTVCO0FBQ0EsS0FGTSxNQUVBO0FBQ04sYUFBT0UsTUFBUDtBQUNBOztBQUNETCxJQUFBQSxDQUFDLENBQUNTLElBQUYsQ0FBUUMsT0FBUixFQUFpQk4sSUFBakIsRUFBdUIsVUFBVU8sUUFBVixFQUFxQjtBQUMzQ1gsTUFBQUEsQ0FBQyxDQUFDWSxJQUFGLENBQVFELFFBQVEsQ0FBQ1AsSUFBVCxDQUFjQyxNQUF0QixFQUE4QixVQUFVUSxLQUFWLEVBQWlCQyxLQUFqQixFQUF5QjtBQUN0RCxZQUFLLGdCQUFnQlosTUFBckIsRUFBOEI7QUFDN0JHLFVBQUFBLE1BQU0sSUFBSSxvQkFB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QUFELENBQWlDd0MsT0FBakM7QUFDQXhDLE1BQUFBLENBQUMsQ0FBRSxnQ0FBRixDQUFELENBQXNDd0MsT0FBdEM7QUFDQXhDLE1BQUFBLENBQUMsQ0FBRSxpQ0FBRixDQUFELENBQXVDd0MsT0FBdkM7QUFDQSxLQWhCOEIsQ0FrQi9COzs7QUFDQXhDLElBQUFBLENBQUMsQ0FBRWtGLFFBQUYsQ0FBRCxDQUFjSyxTQUFkLENBQXlCLFlBQVc7QUFDbkN2RixNQUFBQSxDQUFDLENBQUUsVUFBRixDQUFELENBQWdCd0YsUUFBaEIsQ0FBMEIsV0FBMUI7QUFDQSxLQUZELEVBRUdDLFFBRkgsQ0FFYSxZQUFXO0FBQ3ZCekYsTUFBQUEsQ0FBQyxDQUFFLFVBQUYsQ0FBRCxDQUFnQjhELFdBQWhCLENBQTZCLFdBQTdCO0FBQ0EsS0FKRDtBQUtBdEMsSUFBQUEsc0JBQXNCO0FBQ3RCaUIsSUFBQUEsa0JBQWtCLEdBekJhLENBMkIvQjs7QUFDQTBCLElBQUFBLGtCQUFrQixHQTVCYSxDQThCL0I7O0FBQ0FhLElBQUFBLGtCQUFrQjtBQUNsQixHQWhDRDtBQWlDQSxDQTVWQyxFQTRWQzFDLE1BNVZELENBQUYiLCJmaWxlIjoib2JqZWN0LXN5bmMtZm9yLXNhbGVzZm9yY2UtYWRtaW4uanMiLCJzb3VyY2VzQ29udGVudCI6WyIoIGZ1bmN0aW9uKCAkICkge1xuXG5cdGZ1bmN0aW9uIGxvYWRGaWVsZE9wdGlvbnMoIHN5c3RlbSwgb2JqZWN0X25hbWUgKSB7XG5cdFx0dmFyIGRhdGEgPSB7XG5cdFx0XHQnYWN0aW9uJyA6ICdnZXRfJyArIHN5c3RlbSArICdfb2JqZWN0X2ZpZWxkcycsXG5cdFx0fVxuXHRcdHZhciBmaWVsZHMgPSAnJztcblx0XHR2YXIgZmlyc3RfZmllbGQgPSAkKCAnLmNvbHVtbi0nICsgc3lzdGVtICsgJ19maWVsZCBzZWxlY3Qgb3B0aW9uJykuZmlyc3QoKS50ZXh0KCk7XG5cdFx0ZmllbGRzICs9ICc8b3B0aW9uIHZhbHVlPVwiXCI+JyArIGZpcnN0X2ZpZWxkICsgJzwvb3B0aW9uPic7XG5cdFx0aWYgKCAnd29yZHByZXNzJyA9PT0gc3lzdGVtICkge1xuXHRcdFx0ZGF0YVsnd29yZHByZXNzX29iamVjdCddID0gb2JqZWN0X25hbWU7XG5cdFx0fSBlbHNlIGlmICggJ3NhbGVzZm9yY2UnID09PSBzeXN0ZW0gKSB7XG5cdFx0XHRkYXRhWydzYWxlc2ZvcmNlX29iamVjdCddID0gb2JqZWN0X25hbWU7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiBmaWVsZHM7XG5cdFx0fVxuXHRcdCQucG9zdCggYWpheHVybCwgZGF0YSwgZnVuY3Rpb24oIHJlc3BvbnNlICkge1xuXHRcdFx0JC5lYWNoKCByZXNwb25zZS5kYXRhLmZpZWxkcywgZnVuY3Rpb24oIGluZGV4LCB2YWx1ZSApIHtcblx0XHRcdFx0aWYgKCAnd29yZHByZXNzJyA9PT0gc3lzdGVtICkge1xuXHRcdFx0XHRcdGZpZWxkcyArPSAnPG9wdGlvbiB2YWx1ZT1cIicgKyB2YWx1ZS5rZXkgKyAnXCI+JyArIHZhbHVlLmtleSArICc8L29wdGlvbj4nO1xuXHRcdFx0XHR9IGVsc2UgaWYgKCAnc2FsZXNmb3JjZScgPT09IHN5c3RlbSApIHtcblx0XHRcdFx0XHRmaWVsZHMgKz0gJzxvcHRpb24gdmFsdWU9XCInICsgdmFsdWUubmFtZSArICdcIj4nICsgdmFsdWUubGFiZWwgKyAnPC9vcHRpb24+Jztcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0XHQkKCAnLmNvbHVtbi0nICsgc3lzdGVtICsgJ19maWVsZCBzZWxlY3QnICkuaHRtbCggZmllbGRzICk7XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogRG9uJ3Qgc2hvdyB0aGUgV1NETCBmaWxlIGZpZWxkIHVubGVzcyBTT0FQIGlzIGVuYWJsZWRcblx0ICovXG5cdGZ1bmN0aW9uIHRvZ2dsZVNvYXBGaWVsZHMoKSB7XG5cdFx0aWYgKCAwIDwgJCggJy5vYmplY3Qtc3luYy1mb3Itc2FsZXNmb3JjZS1lbmFibGUtc29hcCcgKS5sZW5ndGggKSB7XG5cdFx0XHRpZiAoICQoICcub2JqZWN0LXN5bmMtZm9yLXNhbGVzZm9yY2UtZW5hYmxlLXNvYXAgaW5wdXQnICkuaXMoICc6Y2hlY2tlZCcgKSApIHtcblx0XHRcdFx0JCggJy5vYmplY3Qtc3luYy1mb3Itc2FsZXNmb3JjZS1zb2FwLXdzZGwtcGF0aCcgKS5zaG93KCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHQkKCAnLm9iamVjdC1zeW5jLWZvci1zYWxlc2ZvcmNlLXNvYXAtd3NkbC1wYXRoJyApLmhpZGUoKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogR2VuZXJhdGVzIHRoZSBTYWxlc2ZvcmNlIG9iamVjdCBmaWVsZHMgYmFzZWQgb24gdGhlIGRyb3Bkb3duIGFjdGl2aXR5IGFuZCBBUEkgcmVzdWx0cy5cblx0ICovXG5cdGZ1bmN0aW9uIHNhbGVzZm9yY2VPYmplY3RGaWVsZHMoKSB7XG5cblx0XHR2YXIgZGVsYXkgPSAoIGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIHRpbWVyID0gMDtcblx0XHRcdHJldHVybiBmdW5jdGlvbiggY2FsbGJhY2ssIG1zICkge1xuXHRcdFx0XHRjbGVhclRpbWVvdXQgKCB0aW1lciApO1xuXHRcdFx0XHR0aW1lciA9IHNldFRpbWVvdXQoIGNhbGxiYWNrLCBtcyApO1xuXHRcdFx0fTtcblx0XHR9KCkgKTtcblxuXHRcdGlmICggMCA9PT0gJCggJy5zYWxlc2ZvcmNlX3JlY29yZF90eXBlc19hbGxvd2VkID4gKicgKS5sZW5ndGggKSB7XG5cdFx0XHQkKCAnLnNhbGVzZm9yY2VfcmVjb3JkX3R5cGVzX2FsbG93ZWQnICkuaGlkZSgpO1xuXHRcdH1cblxuXHRcdGlmICggMCA9PT0gJCggJy5zYWxlc2ZvcmNlX3JlY29yZF90eXBlX2RlZmF1bHQgPiAqJyApLmxlbmd0aCApIHtcblx0XHRcdCQoICcuc2FsZXNmb3JjZV9yZWNvcmRfdHlwZV9kZWZhdWx0JyApLmhpZGUoKTtcblx0XHR9XG5cdFx0aWYgKCAwID09PSAkKCAnLnB1bGxfdHJpZ2dlcl9maWVsZCA+IConICkubGVuZ3RoICkge1xuXHRcdFx0JCggJy5wdWxsX3RyaWdnZXJfZmllbGQnICkuaGlkZSgpO1xuXHRcdH1cblxuXHRcdCQoICcjc2FsZXNmb3JjZV9vYmplY3QnICkub24oICdjaGFuZ2UnLCBmdW5jdGlvbigpIHtcblx0XHRcdHZhciB0aGF0ID0gdGhpcztcblx0XHRcdHZhciBkZWxheVRpbWUgPSAxMDAwO1xuXHRcdFx0ZGVsYXkoIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHR2YXIgZGF0YSA9IHtcblx0XHRcdFx0XHQnYWN0aW9uJyA6ICdnZXRfc2FsZXNmb3JjZV9vYmplY3RfZGVzY3JpcHRpb24nLFxuXHRcdFx0XHRcdCdpbmNsdWRlJyA6IFsgJ2ZpZWxkcycsICdyZWNvcmRUeXBlSW5mb3MnIF0sXG5cdFx0XHRcdFx0J2ZpZWxkX3R5cGUnIDogJ2RhdGV0aW1lJyxcblx0XHRcdFx0XHQnc2FsZXNmb3JjZV9vYmplY3QnIDogdGhhdC52YWx1ZVxuXHRcdFx0XHR9XG5cdFx0XHRcdCQucG9zdCggYWpheHVybCwgZGF0YSwgZnVuY3Rpb24oIHJlc3BvbnNlICkge1xuXG5cdFx0XHRcdFx0dmFyIHJlY29yZFR5cGVzQWxsb3dlZE1hcmt1cCA9ICcnLCByZWNvcmRUeXBlRGVmYXVsdE1hcmt1cCA9ICcnLCBkYXRlTWFya3VwID0gJyc7XG5cblx0XHRcdFx0XHRpZiAoIDAgPCAkKCByZXNwb25zZS5kYXRhLnJlY29yZFR5cGVJbmZvcyApLmxlbmd0aCApIHtcblx0XHRcdFx0XHRcdHJlY29yZFR5cGVzQWxsb3dlZE1hcmt1cCArPSAnPGxhYmVsIGZvcj1cInNhbGVzZm9yY2VfcmVjb3JkX3R5cGVzX2FsbG93ZWRcIj5BbGxvd2VkIFJlY29yZCBUeXBlczo8L2xhYmVsPjxkaXYgY2xhc3M9XCJjaGVja2JveGVzXCI+Jztcblx0XHRcdFx0XHRcdCQuZWFjaCggcmVzcG9uc2UuZGF0YS5yZWNvcmRUeXBlSW5mb3MsIGZ1bmN0aW9uKCBpbmRleCwgdmFsdWUgKSB7XG5cdFx0XHRcdFx0XHRcdHJlY29yZFR5cGVzQWxsb3dlZE1hcmt1cCArPSAnPGxhYmVsPjxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBjbGFzcz1cImZvcm0tY2hlY2tib3hcIiB2YWx1ZT1cIicgKyBpbmRleCArICdcIiBuYW1lPVwic2FsZXNmb3JjZV9yZWNvcmRfdHlwZXNfYWxsb3dlZFsnICsgaW5kZXggKyAnXVwiIGlkPVwic2FsZXNmb3JjZV9yZWNvcmRfdHlwZXNfYWxsb3dlZC0nICsgaW5kZXggKyAnXCI+ICcgKyB2YWx1ZSArICc8L2xhYmVsPic7XG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdHJlY29yZFR5cGVzQWxsb3dlZE1hcmt1cCArPSAnPC9kaXY+JztcblxuXG5cdFx0XHRcdFx0XHRyZWNvcmRUeXBlRGVmYXVsdE1hcmt1cCArPSAnPGxhYmVsIGZvcj1cInNhbGVzZm9yY2VfcmVjb3JkX3R5cGVfZGVmYXVsdFwiPkRlZmF1bHQgUmVjb3JkIFR5cGU6PC9sYWJlbD4nO1xuXHRcdFx0XHRcdFx0cmVjb3JkVHlwZURlZmF1bHRNYXJrdXAgKz0gJzxzZWxlY3QgbmFtZT1cInNhbGVzZm9yY2VfcmVjb3JkX3R5cGVfZGVmYXVsdFwiIGlkPVwic2FsZXNmb3JjZV9yZWNvcmRfdHlwZV9kZWZhdWx0XCI+PG9wdGlvbiB2YWx1ZT1cIlwiPi0gU2VsZWN0IHJlY29yZCB0eXBlIC08L29wdGlvbj4nO1xuXHRcdFx0XHRcdFx0JC5lYWNoKCByZXNwb25zZS5kYXRhLnJlY29yZFR5cGVJbmZvcywgZnVuY3Rpb24oIGluZGV4LCB2YWx1ZSApIHtcblx0XHRcdFx0XHRcdFx0cmVjb3JkVHlwZURlZmF1bHRNYXJrdXAgKz0gJzxvcHRpb24gdmFsdWU9XCInICsgaW5kZXggKyAnXCI+JyArIHZhbHVlICsgJzwvb3B0aW9uPic7XG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQkKCAnLnNhbGVzZm9yY2VfcmVjb3JkX3R5cGVzX2FsbG93ZWQnICkuaHRtbCggcmVjb3JkVHlwZXNBbGxvd2VkTWFya3VwICk7XG5cdFx0XHRcdFx0JCggJy5zYWxlc2ZvcmNlX3JlY29yZF90eXBlX2RlZmF1bHQnICkuaHRtbCggcmVjb3JkVHlwZURlZmF1bHRNYXJrdXAgKTtcblxuXHRcdFx0XHRcdGlmICggMCA8ICQoIHJlc3BvbnNlLmRhdGEuZmllbGRzICkubGVuZ3RoICkge1xuXHRcdFx0XHRcdFx0ZGF0ZU1hcmt1cCArPSAnPGxhYmVsIGZvcj1cInB1bGxfdHJpZ2dlcl9maWVsZFwiPkRhdGUgZmllbGQgdG8gdHJpZ2dlciBwdWxsOjwvbGFiZWw+Jztcblx0XHRcdFx0XHRcdGRhdGVNYXJrdXAgKz0gJzxzZWxlY3QgbmFtZT1cInB1bGxfdHJpZ2dlcl9maWVsZFwiIGlkPVwicHVsbF90cmlnZ2VyX2ZpZWxkXCI+PG9wdGlvbiB2YWx1ZT1cIlwiPi0gU2VsZWN0IGRhdGUgZmllbGQgLTwvb3B0aW9uPidcblx0XHRcdFx0XHRcdCQuZWFjaCggcmVzcG9uc2UuZGF0YS5maWVsZHMsIGZ1bmN0aW9uKCBpbmRleCwgdmFsdWUgKSB7XG5cdFx0XHRcdFx0XHRcdGRhdGVNYXJrdXAgKz0gJzxvcHRpb24gdmFsdWU9XCInICsgdmFsdWUubmFtZSArICdcIj4nICsgdmFsdWUubGFiZWwgKyAnPC9vcHRpb24+Jztcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0ZGF0ZU1hcmt1cCArPSAnPC9zZWxlY3Q+Jztcblx0XHRcdFx0XHRcdGRhdGVNYXJrdXAgKz0gJzxwIGNsYXNzPVwiZGVzY3JpcHRpb25cIj5UaGVzZSBhcmUgZGF0ZSBmaWVsZHMgdGhhdCBjYW4gY2F1c2UgV29yZFByZXNzIHRvIHB1bGwgYW4gdXBkYXRlIGZyb20gU2FsZXNmb3JjZSwgYWNjb3JkaW5nIHRvIHRoZSA8Y29kZT5zYWxlc2ZvcmNlX3B1bGw8L2NvZGU+IGNsYXNzLjwvcD4nXG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0JCggJy5wdWxsX3RyaWdnZXJfZmllbGQnICkuaHRtbCggZGF0ZU1hcmt1cCApO1xuXG5cdFx0XHRcdFx0aWYgKCAnJyAhPT0gcmVjb3JkVHlwZXNBbGxvd2VkTWFya3VwICkge1xuXHRcdFx0XHRcdFx0JCggJy5zYWxlc2ZvcmNlX3JlY29yZF90eXBlc19hbGxvd2VkJyApLnNob3coKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0JCggJy5zYWxlc2ZvcmNlX3JlY29yZF90eXBlc19hbGxvd2VkJyApLmhpZGUoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0aWYgKCAnJyAhPT0gcmVjb3JkVHlwZURlZmF1bHRNYXJrdXAgKSB7XG5cdFx0XHRcdFx0XHQkKCAnLnNhbGVzZm9yY2VfcmVjb3JkX3R5cGVfZGVmYXVsdCcgKS5zaG93KCk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdCQoICcuc2FsZXNmb3JjZV9yZWNvcmRfdHlwZV9kZWZhdWx0JyApLmhpZGUoKTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRpZiAoICcnICE9PSBkYXRlTWFya3VwICkge1xuXHRcdFx0XHRcdFx0JCggJy5wdWxsX3RyaWdnZXJfZmllbGQnICkuc2hvdygpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHQkKCAnLnB1bGxfdHJpZ2dlcl9maWVsZCcgKS5oaWRlKCk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aWYgKCBqUXVlcnkuZm4uc2VsZWN0MiApIHtcblx0XHRcdFx0XHRcdCQoICdzZWxlY3Qjc2FsZXNmb3JjZV9yZWNvcmRfdHlwZV9kZWZhdWx0JyApLnNlbGVjdDIoKTtcblx0XHRcdFx0XHRcdCQoICdzZWxlY3QjcHVsbF90cmlnZ2VyX2ZpZWxkJyApLnNlbGVjdDIoKTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0fSk7XG5cdFx0XHR9LCBkZWxheVRpbWUgKTtcblx0XHR9KTtcblx0fVxuXHQvKipcblx0ICogRHVwbGljYXRlcyB0aGUgZmllbGRzIGZvciBhIG5ldyByb3cgaW4gdGhlIGZpZWxkbWFwIG9wdGlvbnMgc2NyZWVuLlxuXHQgKi9cblx0IGZ1bmN0aW9uIGFkZEZpZWxkTWFwcGluZ1JvdygpIHtcblx0XHQkKCAnI2FkZC1maWVsZC1tYXBwaW5nJyApLmNsaWNrKCBmdW5jdGlvbigpIHtcblx0XHRcdHZhciBzYWxlc2ZvcmNlT2JqZWN0ID0gJCggJyNzYWxlc2ZvcmNlX29iamVjdCcgKS52YWwoKTtcblx0XHRcdHZhciB3b3JkcHJlc3NPYmplY3QgPSAkKCAnI3dvcmRwcmVzc19vYmplY3QnICkudmFsKCk7XG5cdFx0XHR2YXIgbmV3S2V5ID0gbmV3IERhdGUoKS5nZXRVVENNaWxsaXNlY29uZHMoKTtcblx0XHRcdHZhciBsYXN0Um93ID0gJCggJ3RhYmxlLmZpZWxkcyB0Ym9keSB0cicgKS5sYXN0KCk7XG5cdFx0XHR2YXIgb2xkS2V5ID0gbGFzdFJvdy5hdHRyKCAnZGF0YS1rZXknICk7XG5cdFx0XHRvbGRLZXkgPSBuZXcgUmVnRXhwKCBvbGRLZXksICdnJyApO1xuXHRcdFx0JCggdGhpcyApLnRleHQoICdBZGQgYW5vdGhlciBmaWVsZCBtYXBwaW5nJyApO1xuXHRcdFx0aWYgKCAnJyAhPT0gd29yZHByZXNzT2JqZWN0ICYmICcnICE9PSBzYWxlc2ZvcmNlT2JqZWN0ICkge1xuXHRcdFx0XHRmaWVsZG1hcEZpZWxkcyggb2xkS2V5LCBuZXdLZXksIGxhc3RSb3cgKTtcblx0XHRcdFx0JCggdGhpcyApLnBhcmVudCgpLmZpbmQoICcubWlzc2luZy1vYmplY3QnICkucmVtb3ZlKCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHQkKCB0aGlzICkucGFyZW50KCkucHJlcGVuZCggJzxkaXYgY2xhc3M9XCJlcnJvciBtaXNzaW5nLW9iamVjdFwiPjxzcGFuPllvdSBoYXZlIHRvIHBpY2sgYSBXb3JkUHJlc3Mgb2JqZWN0IGFuZCBhIFNhbGVzZm9yY2Ugb2JqZWN0IHRvIGFkZCBmaWVsZCBtYXBwaW5nLjwvc3Bhbj48L2Rpdj4nICk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fSk7XG5cdH1cblx0LyoqXG5cdCAqIEdldHMgdGhlIFdvcmRQcmVzcyBhbmQgU2FsZXNmb3JjZSBmaWVsZCByZXN1bHRzIHZpYSBhbiBBamF4IGNhbGxcblx0ICogQHBhcmFtIHN0cmluZyBvbGRLZXkgdGhlIGRhdGEta2V5IGF0dHJpYnV0ZSBvZiB0aGUgc2V0IHRoYXQgaXMgYmVpbmcgY2xvbmVkXG5cdCAqIEBwYXJhbSBzdHJpbmcgbmV3S2V5IHRoZSBkYXRhLWtleSBhdHRyaWJ1dGUgZm9yIHRoZSBvbmUgd2UncmUgYXBwZW5kaW5nXG5cdCAqIEBwYXJhbSBvYmplY3QgbGFzdFJvdyB0aGUgbGFzdCBzZXQgb2YgdGhlIGZpZWxkbWFwXG5cdCAqL1xuXHRmdW5jdGlvbiBmaWVsZG1hcEZpZWxkcyggb2xkS2V5LCBuZXdLZXksIGxhc3RSb3cgKSB7XG5cdFx0dmFyIG5leHRSb3cgPSAnJztcbiAgICAgICAgaWYgKCBqUXVlcnkuZm4uc2VsZWN0MiApIHtcbiAgICAgICAgXHRuZXh0Um93ID0gbGFzdFJvdy5maW5kKCAnc2VsZWN0JyApXG5cdCAgICAgICAgICAgIC5zZWxlY3QyKCAnZGVzdHJveScgKVxuXHQgICAgICAgICAgICAuZW5kKClcblx0ICAgICAgICAgICAgLmNsb25lKCB0cnVlICkucmVtb3ZlQ2xhc3MoICdmaWVsZG1hcC10ZW1wbGF0ZScgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgXHRuZXh0Um93ID0gbGFzdFJvdy5jbG9uZSggdHJ1ZSApO1xuICAgICAgICB9XG5cdFx0JCggbmV4dFJvdyApLmF0dHIoICdkYXRhLWtleScsIG5ld0tleSApO1xuXHRcdCQoIG5leHRSb3cgKS5lYWNoKGZ1bmN0aW9uKCkge1xuXHRcdFx0JCggdGhpcyApLmh0bWwoIGZ1bmN0aW9uKCBpLCBoICkge1xuXHRcdFx0XHRyZXR1cm4gaC5yZXBsYWNlKCBvbGRLZXksIG5ld0tleSApO1xuXHRcdFx0fSk7XG5cdFx0fSk7XG5cdFx0JCggJ3RhYmxlLmZpZWxkcyB0Ym9keScgKS5hcHBlbmQoIG5leHRSb3cgKTtcblx0XHRpZiAoIGpRdWVyeS5mbi5zZWxlY3QyICkge1xuXHRcdFx0bGFzdFJvdy5maW5kKCAnc2VsZWN0JyApLnNlbGVjdDIoKTtcblx0XHRcdG5leHRSb3cuZmluZCggJ3NlbGVjdCcgKS5zZWxlY3QyKCk7XG5cdFx0fVxuXHR9XG5cdC8qKlxuXHQgKiBIYW5kbGUgbWFudWFsIHB1c2ggYW5kIHB1bGwgb2Ygb2JqZWN0c1xuXHQgKi9cblx0ZnVuY3Rpb24gcHVzaEFuZFB1bGxPYmplY3RzKCkge1xuXHRcdCQoICcuc2FsZXNmb3JjZV91c2VyX2FqYXhfbWVzc2FnZScgKS5oaWRlKCk7XG5cdFx0aWYgKCAwIDwgJCggJyN3b3JkcHJlc3Nfb2JqZWN0X2FqYXgnICkubGVuZ3RoICkge1xuXHRcdFx0JCggJy5wdXNoX3RvX3NhbGVzZm9yY2VfYnV0dG9uJyApLm9uKCAnY2xpY2snLCBmdW5jdGlvbigpIHtcblx0XHRcdFx0dmFyIHdvcmRwcmVzc09iamVjdCA9ICQoICcjd29yZHByZXNzX29iamVjdF9hamF4JyApLnZhbCgpO1xuXHRcdFx0XHR2YXIgd29yZHByZXNzSWQgPSAkKCAnI3dvcmRwcmVzc19pZF9hamF4JyApLnZhbCgpO1xuXHRcdFx0XHR2YXIgc2FsZXNmb3JjZUlkID0gJCggJyNzYWxlc2ZvcmNlX2lkX2FqYXgnICkudmFsKCk7XG5cdFx0XHRcdHZhciBkYXRhID0ge1xuXHRcdFx0XHRcdCdhY3Rpb24nIDogJ3B1c2hfdG9fc2FsZXNmb3JjZScsXG5cdFx0XHRcdFx0J3dvcmRwcmVzc19vYmplY3QnIDogd29yZHByZXNzT2JqZWN0LFxuXHRcdFx0XHRcdCd3b3JkcHJlc3NfaWQnIDogd29yZHByZXNzSWQsXG5cdFx0XHRcdFx0J3NhbGVzZm9yY2VfaWQnIDogc2FsZXNmb3JjZUlkXG5cdFx0XHRcdH1cblx0XHRcdFx0JC5wb3N0KCBhamF4dXJsLCBkYXRhLCBmdW5jdGlvbiggcmVzcG9uc2UgKSB7XG5cdFx0XHRcdFx0aWYgKCB0cnVlID09PSByZXNwb25zZS5zdWNjZXNzICkge1xuXHRcdFx0XHRcdFx0dXBkYXRlU2FsZXNmb3JjZVVzZXJTdW1tYXJ5KCk7XG5cdFx0XHRcdFx0XHQkKCAnLnNhbGVzZm9yY2VfdXNlcl9hamF4X21lc3NhZ2UnICkud2lkdGgoICQoICcubWFwcGVkLXNhbGVzZm9yY2UtdXNlcicgKS53aWR0aCgpIC0gMjcgKTtcblx0XHRcdFx0XHRcdCQoICcuc2FsZXNmb3JjZV91c2VyX2FqYXhfbWVzc2FnZScgKS5odG1sKCAnPHA+VGhpcyBvYmplY3QgaGFzIGJlZW4gcHVzaGVkIHRvIFNhbGVzZm9yY2UuPC9wPicgKS5mYWRlSW4oKS5kZWxheSggNDAwMCApLmZhZGVPdXQoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0JCggJy5wdWxsX2Zyb21fc2FsZXNmb3JjZV9idXR0b24nICkub24oICdjbGljaycsIGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIHNhbGVzZm9yY2VJZCA9ICQoICcjc2FsZXNmb3JjZV9pZF9hamF4JyApLnZhbCgpO1xuXHRcdFx0dmFyIHdvcmRwcmVzc09iamVjdCA9ICQoICcjd29yZHByZXNzX29iamVjdF9hamF4JyApLnZhbCgpO1xuXHRcdFx0dmFyIGRhdGEgPSB7XG5cdFx0XHRcdCdhY3Rpb24nIDogJ3B1bGxfZnJvbV9zYWxlc2ZvcmNlJyxcblx0XHRcdFx0J3NhbGVzZm9yY2VfaWQnIDogc2FsZXNmb3JjZUlkLFxuXHRcdFx0XHQnd29yZHByZXNzX29iamVjdCcgOiB3b3JkcHJlc3NPYmplY3Rcblx0XHRcdH1cblx0XHRcdCQucG9zdCggYWpheHVybCwgZGF0YSwgZnVuY3Rpb24oIHJlc3BvbnNlICkge1xuXHRcdFx0XHRpZiAoIHRydWUgPT09IHJlc3BvbnNlLnN1Y2Nlc3MgKSB7XG5cdFx0XHRcdFx0dXBkYXRlU2FsZXNmb3JjZVVzZXJTdW1tYXJ5KCk7XG5cdFx0XHRcdFx0JCggJy5zYWxlc2ZvcmNlX3VzZXJfYWpheF9tZXNzYWdlJyApLndpZHRoKCAkKCAnLm1hcHBlZC1zYWxlc2ZvcmNlLXVzZXInICkud2lkdGgoKSAtIDI3ICk7XG5cdFx0XHRcdFx0JCggJy5zYWxlc2ZvcmNlX3VzZXJfYWpheF9tZXNzYWdlJyApLmh0bWwoICc8cD5UaGlzIG9iamVjdCBoYXMgYmVlbiBwdWxsZWQgZnJvbSBTYWxlc2ZvcmNlLjwvcD4nICkuZmFkZUluKCkuZGVsYXkoIDQwMDAgKS5mYWRlT3V0KCk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH0pO1xuXHR9XG5cdC8qKlxuXHQgKiBVcGRhdGVzIHRoZSB1c2VyIHByb2ZpbGUgc3VtbWFyeSBvZiBTYWxlc2ZvcmNlIGluZm8uXG5cdCAqL1xuXHRmdW5jdGlvbiB1cGRhdGVTYWxlc2ZvcmNlVXNlclN1bW1hcnkoKSB7XG5cdFx0dmFyIG1hcHBpbmdJZCA9ICQoICcjbWFwcGluZ19pZF9hamF4JyApLnZhbCgpO1xuXHRcdHZhciBkYXRhID0ge1xuXHRcdFx0J2FjdGlvbicgOiAncmVmcmVzaF9tYXBwZWRfZGF0YScsXG5cdFx0XHQnbWFwcGluZ19pZCcgOiBtYXBwaW5nSWRcblx0XHR9XG5cdFx0JC5wb3N0KCBhamF4dXJsLCBkYXRhLCBmdW5jdGlvbiggcmVzcG9uc2UgKSB7XG5cdFx0XHRpZiAoIHRydWUgPT09IHJlc3BvbnNlLnN1Y2Nlc3MgKSB7XG5cdFx0XHRcdCQoICd0ZC5sYXN0X3N5bmNfbWVzc2FnZScgKS50ZXh0KCByZXNwb25zZS5kYXRhLmxhc3Rfc3luY19tZXNzYWdlICk7XG5cdFx0XHRcdCQoICd0ZC5sYXN0X3N5bmNfYWN0aW9uJyApLnRleHQoIHJlc3BvbnNlLmRhdGEubGFzdF9zeW5jX2FjdGlvbiApO1xuXHRcdFx0XHQkKCAndGQubGFzdF9zeW5jX3N0YXR1cycgKS50ZXh0KCByZXNwb25zZS5kYXRhLmxhc3Rfc3luY19zdGF0dXMgKTtcblx0XHRcdFx0JCggJ3RkLmxhc3Rfc3luYycgKS50ZXh0KCByZXNwb25zZS5kYXRhLmxhc3Rfc3luYyApO1xuXHRcdFx0XHRpZiAoICcxJyA9PT0gcmVzcG9uc2UuZGF0YS5sYXN0X3N5bmNfc3RhdHVzICkge1xuXHRcdFx0XHRcdCQoICd0ZC5sYXN0X3N5bmNfc3RhdHVzJyApLnRleHQoICdzdWNjZXNzJyApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblx0LyoqXG5cdCAqIENsZWFyIHRoZSBwbHVnaW4gY2FjaGUgdmlhIEFqYXggcmVxdWVzdC5cblx0ICovXG5cdGZ1bmN0aW9uIGNsZWFyU2Z3cENhY2hlTGluaygpIHtcblx0XHQkKCAnI2NsZWFyLXNmd3AtY2FjaGUnICkuY2xpY2soIGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIGRhdGEgPSB7XG5cdFx0XHRcdCdhY3Rpb24nIDogJ2NsZWFyX3Nmd3BfY2FjaGUnXG5cdFx0XHR9XG5cdFx0XHR2YXIgdGhhdCA9ICQoIHRoaXMgKTtcblx0XHRcdCQucG9zdCggYWpheHVybCwgZGF0YSwgZnVuY3Rpb24oIHJlc3BvbnNlICkge1xuXHRcdFx0XHRpZiAoIHRydWUgPT09IHJlc3BvbnNlLnN1Y2Nlc3MgJiYgdHJ1ZSA9PT0gcmVzcG9uc2UuZGF0YS5zdWNjZXNzICkge1xuXHRcdFx0XHRcdHRoYXQucGFyZW50KCkuaHRtbCggcmVzcG9uc2UuZGF0YS5tZXNzYWdlICkuZmFkZUluKCk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH0pO1xuXHR9XG5cblx0Ly8gbG9hZCBhdmFpbGFibGUgb3B0aW9ucyBpZiB0aGUgd29yZHByZXNzIG9iamVjdCBjaGFuZ2VzXG5cdCQoIGRvY3VtZW50ICkub24oICdjaGFuZ2UnLCAnc2VsZWN0I3dvcmRwcmVzc19vYmplY3QnLCBmdW5jdGlvbigpIHtcblx0XHR2YXIgdGltZW91dDtcblx0XHRsb2FkRmllbGRPcHRpb25zKCAnd29yZHByZXNzJywgJCggdGhpcyApLnZhbCgpICk7XG5cdFx0Y2xlYXJUaW1lb3V0KCB0aW1lb3V0ICk7XG5cdFx0dGltZW91dCA9IHNldFRpbWVvdXQoIGZ1bmN0aW9uKCkge1xuXHRcdFx0JCggJ3RhYmxlLmZpZWxkcyB0Ym9keSB0cicgKS5mYWRlT3V0KCk7XG5cdFx0XHQkKCAndGFibGUuZmllbGRzIHRib2R5IHRyJyApLm5vdCggJy5maWVsZG1hcC10ZW1wbGF0ZScgKS5yZW1vdmUoKTtcblx0XHR9LCAxMDAwICk7XG5cdH0pO1xuXG5cdC8vIGxvYWQgYXZhaWxhYmxlIG9wdGlvbnMgaWYgdGhlIHNhbGVzZm9yY2Ugb2JqZWN0IGNoYW5nZXNcblx0JCggZG9jdW1lbnQgKS5vbiggJ2NoYW5nZScsICdzZWxlY3Qjc2FsZXNmb3JjZV9vYmplY3QnLCBmdW5jdGlvbigpIHtcblx0XHR2YXIgdGltZW91dDtcblx0XHRsb2FkRmllbGRPcHRpb25zKCAnc2FsZXNmb3JjZScsICQoIHRoaXMgKS52YWwoKSApO1xuXHRcdGNsZWFyVGltZW91dCggdGltZW91dCApO1xuXHRcdHRpbWVvdXQgPSBzZXRUaW1lb3V0KCBmdW5jdGlvbigpIHtcblx0XHRcdCQoICd0YWJsZS5maWVsZHMgdGJvZHkgdHInICkuZmFkZU91dCgpO1xuXHRcdFx0JCggJ3RhYmxlLmZpZWxkcyB0Ym9keSB0cicgKS5ub3QoICcuZmllbGRtYXAtdGVtcGxhdGUnICkucmVtb3ZlKCk7XG5cdFx0fSwgMTAwMCApO1xuXHR9KTtcblxuXHQvLyBzaG93IHdzZGwgZmllbGQgaWYgc29hcCBpcyBlbmFibGVkXG5cdCQoIGRvY3VtZW50ICkub24oICdjaGFuZ2UnLCAnLm9iamVjdC1zeW5jLWZvci1zYWxlc2ZvcmNlLWVuYWJsZS1zb2FwIGlucHV0JywgZnVuY3Rpb24oKSB7XG5cdFx0dG9nZ2xlU29hcEZpZWxkcygpO1xuXHR9KTtcblxuXHQvKipcblx0ICogQXMgdGhlIERydXBhbCBwbHVnaW4gZG9lcywgd2Ugb25seSBhbGxvdyBvbmUgZmllbGQgdG8gYmUgYSBwcmVtYXRjaFxuXHQgKi9cblx0JCggZG9jdW1lbnQgKS5vbiggJ2NsaWNrJywgJy5jb2x1bW4taXNfcHJlbWF0Y2ggaW5wdXQnLCBmdW5jdGlvbigpIHtcblx0XHQkKCAnLmNvbHVtbi1pc19wcmVtYXRjaCBpbnB1dCcgKS5ub3QoIHRoaXMgKS5wcm9wKCAnY2hlY2tlZCcsIGZhbHNlICk7XG5cdH0pO1xuXHQvKipcblx0ICogQXMgdGhlIERydXBhbCBwbHVnaW4gZG9lcywgd2Ugb25seSBhbGxvdyBvbmUgZmllbGQgdG8gYmUgYSBrZXlcblx0ICovXG5cdCQoIGRvY3VtZW50ICkub24oICdjbGljaycsICcuY29sdW1uLWlzX2tleSBpbnB1dCcsIGZ1bmN0aW9uKCkge1xuXHRcdCQoICcuY29sdW1uLWlzX2tleSBpbnB1dCcgKS5ub3QoIHRoaXMgKS5wcm9wKCAnY2hlY2tlZCcsIGZhbHNlICk7XG5cdH0pO1xuXHQvKipcblx0ICogV2hlbiB0aGUgcGx1Z2luIGxvYWRzLCBpbml0aWFsaXplIG9yIGVuYWJsZSB0aGluZ3M6XG5cdCAqIFNlbGVjdDIgb24gc2VsZWN0IGZpZWxkc1xuXHQgKiBDbGVhciBmaWVsZHMgd2hlbiB0aGUgdGFyZ2V0ZWQgV29yZFByZXNzIG9yIFNhbGVzZm9yY2Ugb2JqZWN0IHR5cGUgY2hhbmdlc1xuXHQgKiBBZGQgYSBzcGlubmVyIGZvciBBamF4IHJlcXVlc3RzXG5cdCAqIE1hbmFnZSB0aGUgZGlzcGxheSBmb3IgU2FsZXNmb3JjZSBvYmplY3QgZmllbGRzIGJhc2VkIG9uIEFQSSByZXBvbnNlXG5cdCAqIE1hbnVhbCBwdXNoIGFuZCBwdWxsXG5cdCAqIENsZWFyaW5nIHRoZSBjYWNoZVxuXHQgKi9cblx0JCggZG9jdW1lbnQgKS5yZWFkeSggZnVuY3Rpb24oKSB7XG5cblx0XHQvLyBmb3IgbWFpbiBhZG1pbiBzZXR0aW5nc1xuXHRcdHRvZ2dsZVNvYXBGaWVsZHMoKTtcblxuXHRcdC8vIGlmIHRoZXJlIGlzIGFscmVhZHkgYSB3cCBvciBzZiBvYmplY3QsIG1ha2Ugc3VyZSBpdCBoYXMgdGhlIHJpZ2h0IGZpZWxkc1xuXHRcdGxvYWRGaWVsZE9wdGlvbnMoICd3b3JkcHJlc3MnLCAkKCAnc2VsZWN0I3dvcmRwcmVzc19vYmplY3QnICkudmFsKCkgKTtcblx0XHRsb2FkRmllbGRPcHRpb25zKCAnc2FsZXNmb3JjZScsICQoICdzZWxlY3Qjc2FsZXNmb3JjZV9vYmplY3QnICkudmFsKCkgKTtcblxuXHRcdGlmICggalF1ZXJ5LmZuLnNlbGVjdDIgKSB7XG5cdFx0XHQkKCAnc2VsZWN0I3dvcmRwcmVzc19vYmplY3QnICkuc2VsZWN0MigpO1xuXHRcdFx0JCggJ3NlbGVjdCNzYWxlc2ZvcmNlX29iamVjdCcgKS5zZWxlY3QyKCk7XG5cdFx0XHQkKCAnc2VsZWN0I3NhbGVzZm9yY2VfcmVjb3JkX3R5cGVfZGVmYXVsdCcgKS5zZWxlY3QyKCk7XG5cdFx0XHQkKCAnc2VsZWN0I3B1bGxfdHJpZ2dlcl9maWVsZCcgKS5zZWxlY3QyKCk7XG5cdFx0XHQkKCAnLmNvbHVtbi13b3JkcHJlc3NfZmllbGQgc2VsZWN0JyApLnNlbGVjdDIoKTtcblx0XHRcdCQoICcuY29sdW1uLXNhbGVzZm9yY2VfZmllbGQgc2VsZWN0JyApLnNlbGVjdDIoKTtcblx0XHR9XG5cblx0XHQvLyB0b2RvOiBuZWVkIHRvIGZpeCB0aGlzIHNvIGl0IGRvZXNuJ3QgcnVuIGFsbCB0aGUgc3Bpbm5lcnMgYXQgdGhlIHNhbWUgdGltZSB3aGVuIHRoZXJlIGFyZSBtdWx0aXBsZXMgb24gdGhlIHNhbWUgcGFnZVxuXHRcdCQoIGRvY3VtZW50ICkuYWpheFN0YXJ0KCBmdW5jdGlvbigpIHtcblx0XHRcdCQoICcuc3Bpbm5lcicgKS5hZGRDbGFzcyggJ2lzLWFjdGl2ZScgKTtcblx0XHR9KS5hamF4U3RvcCggZnVuY3Rpb24oKSB7XG5cdFx0XHQkKCAnLnNwaW5uZXInICkucmVtb3ZlQ2xhc3MoICdpcy1hY3RpdmUnICk7XG5cdFx0fSk7XG5cdFx0c2FsZXNmb3JjZU9iamVjdEZpZWxkcygpO1xuXHRcdGFkZEZpZWxkTWFwcGluZ1JvdygpO1xuXG5cdFx0Ly8gZm9yIHB1c2gvcHVsbCBtZXRob2RzIHJ1bm5pbmcgdmlhIGFqYXhcblx0XHRwdXNoQW5kUHVsbE9iamVjdHMoKTtcblxuXHRcdC8vIGZvciBjbGVhcmluZyB0aGUgcGx1Z2luIGNhY2hlXG5cdFx0Y2xlYXJTZndwQ2FjaGVMaW5rKCk7XG5cdH0pO1xufSggalF1ZXJ5ICkgKTtcbiJdfQ== +//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFkbWluLmpzIl0sIm5hbWVzIjpbIiQiLCJsb2FkRmllbGRPcHRpb25zIiwic3lzdGVtIiwib2JqZWN0X25hbWUiLCJkYXRhIiwic2VsZWN0RmllbGQiLCJmaWVsZHMiLCJmaXJzdF9maWVsZCIsImZpcnN0IiwidGV4dCIsInZhbCIsInBvc3QiLCJhamF4dXJsIiwicmVzcG9uc2UiLCJlYWNoIiwiaW5kZXgiLCJ2YWx1ZSIsImtleSIsIm5hbWUiLCJsYWJlbCIsImh0bWwiLCJ0b2dnbGVTb2FwRmllbGRzIiwibGVuZ3RoIiwiaXMiLCJzaG93IiwiaGlkZSIsInNhbGVzZm9yY2VPYmplY3RGaWVsZHMiLCJkZWxheSIsInRpbWVyIiwiY2FsbGJhY2siLCJtcyIsImNsZWFyVGltZW91dCIsInNldFRpbWVvdXQiLCJvbiIsInRoYXQiLCJkZWxheVRpbWUiLCJyZWNvcmRUeXBlc0FsbG93ZWRNYXJrdXAiLCJyZWNvcmRUeXBlRGVmYXVsdE1hcmt1cCIsImRhdGVNYXJrdXAiLCJyZWNvcmRUeXBlSW5mb3MiLCJqUXVlcnkiLCJmbiIsInNlbGVjdDIiLCJhZGRGaWVsZE1hcHBpbmdSb3ciLCJjbGljayIsInNhbGVzZm9yY2VPYmplY3QiLCJ3b3JkcHJlc3NPYmplY3QiLCJuZXdLZXkiLCJEYXRlIiwiZ2V0VVRDTWlsbGlzZWNvbmRzIiwibGFzdFJvdyIsImxhc3QiLCJvbGRLZXkiLCJhdHRyIiwiUmVnRXhwIiwiZmllbGRtYXBGaWVsZHMiLCJwYXJlbnQiLCJmaW5kIiwicmVtb3ZlIiwicHJlcGVuZCIsIm5leHRSb3ciLCJlbmQiLCJjbG9uZSIsInJlbW92ZUNsYXNzIiwiaSIsImgiLCJyZXBsYWNlIiwiYXBwZW5kIiwicHVzaEFuZFB1bGxPYmplY3RzIiwid29yZHByZXNzSWQiLCJzYWxlc2ZvcmNlSWQiLCJzdWNjZXNzIiwidXBkYXRlU2FsZXNmb3JjZVVzZXJTdW1tYXJ5Iiwid2lkdGgiLCJmYWRlSW4iLCJmYWRlT3V0IiwibWFwcGluZ0lkIiwibGFzdF9zeW5jX21lc3NhZ2UiLCJsYXN0X3N5bmNfYWN0aW9uIiwibGFzdF9zeW5jX3N0YXR1cyIsImxhc3Rfc3luYyIsImNsZWFyU2Z3cENhY2hlTGluayIsIm1lc3NhZ2UiLCJkb2N1bWVudCIsInRpbWVvdXQiLCJub3QiLCJwcm9wIiwicmVhZHkiLCJhamF4U3RhcnQiLCJhZGRDbGFzcyIsImFqYXhTdG9wIl0sIm1hcHBpbmdzIjoiOztBQUFFLFdBQVVBLENBQVYsRUFBYztBQUVmLFdBQVNDLGdCQUFULENBQTJCQyxNQUEzQixFQUFtQ0MsV0FBbkMsRUFBaUQ7QUFDaEQsUUFBSUMsSUFBSSxHQUFHO0FBQ1YsZ0JBQVcsU0FBU0YsTUFBVCxHQUFrQjtBQURuQixLQUFYO0FBR0EsUUFBSUcsV0FBVyxHQUFHLGFBQWFILE1BQWIsR0FBc0IsZUFBeEM7QUFDQSxRQUFJSSxNQUFNLEdBQUcsRUFBYjtBQUNBLFFBQUlDLFdBQVcsR0FBR1AsQ0FBQyxDQUFFSyxXQUFXLEdBQUcsU0FBaEIsQ0FBRCxDQUE0QkcsS0FBNUIsR0FBb0NDLElBQXBDLEVBQWxCOztBQUNBLFFBQUssT0FBT1QsQ0FBQyxDQUFFSyxXQUFGLENBQUQsQ0FBaUJLLEdBQWpCLEVBQVosRUFBcUM7QUFDcEM7QUFDQTs7QUFDREosSUFBQUEsTUFBTSxJQUFJLHNCQUFzQkMsV0FBdEIsR0FBb0MsV0FBOUM7O0FBQ0EsUUFBSyxnQkFBZ0JMLE1BQXJCLEVBQThCO0FBQzdCRSxNQUFBQSxJQUFJLENBQUMsa0JBQUQsQ0FBSixHQUEyQkQsV0FBM0I7QUFDQSxLQUZELE1BRU8sSUFBSyxpQkFBaUJELE1BQXRCLEVBQStCO0FBQ3JDRSxNQUFBQSxJQUFJLENBQUMsbUJBQUQsQ0FBSixHQUE0QkQsV0FBNUI7QUFDQSxLQUZNLE1BRUE7QUFDTixhQUFPRyxNQUFQO0FBQ0E7O0FBQ0ROLElBQUFBLENBQUMsQ0FBQ1csSUFBRixDQUFRQyxPQUFSLEVBQWlCUixJQUFqQixFQUF1QixVQUFVUyxRQUFWLEVBQXFCO0FBQzNDYixNQUFBQSxDQUFDLENBQUNjLElBQUYsQ0FB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Q0FBRCxDQUFnQzBDLE9BQWhDO0FBQ0ExQyxNQUFBQSxDQUFDLENBQUUsdUNBQUYsQ0FBRCxDQUE2QzBDLE9BQTdDO0FBQ0ExQyxNQUFBQSxDQUFDLENBQUUsMkJBQUYsQ0FBRCxDQUFpQzBDLE9BQWpDO0FBQ0ExQyxNQUFBQSxDQUFDLENBQUUsZ0NBQUYsQ0FBRCxDQUFzQzBDLE9BQXRDO0FBQ0ExQyxNQUFBQSxDQUFDLENBQUUsaUNBQUYsQ0FBRCxDQUF1QzBDLE9BQXZDO0FBQ0EsS0FoQjhCLENBa0IvQjs7O0FBQ0ExQyxJQUFBQSxDQUFDLENBQUVtRixRQUFGLENBQUQsQ0FBY0ssU0FBZCxDQUF5QixZQUFXO0FBQ25DeEYsTUFBQUEsQ0FBQyxDQUFFLFVBQUYsQ0FBRCxDQUFnQnlGLFFBQWhCLENBQTBCLFdBQTFCO0FBQ0EsS0FGRCxFQUVHQyxRQUZILENBRWEsWUFBVztBQUN2QjFGLE1BQUFBLENBQUMsQ0FBRSxVQUFGLENBQUQsQ0FBZ0IrRCxXQUFoQixDQUE2QixXQUE3QjtBQUNBLEtBSkQ7QUFLQXJDLElBQUFBLHNCQUFzQjtBQUN0QmlCLElBQUFBLGtCQUFrQixHQXpCYSxDQTJCL0I7O0FBQ0F5QixJQUFBQSxrQkFBa0IsR0E1QmEsQ0E4Qi9COztBQUNBYSxJQUFBQSxrQkFBa0I7QUFDbEIsR0FoQ0Q7QUFpQ0EsQ0FoV0MsRUFnV0N6QyxNQWhXRCxDQUFGIiwiZmlsZSI6Im9iamVjdC1zeW5jLWZvci1zYWxlc2ZvcmNlLWFkbWluLmpzIiwic291cmNlc0NvbnRlbnQiOlsiKCBmdW5jdGlvbiggJCApIHtcblxuXHRmdW5jdGlvbiBsb2FkRmllbGRPcHRpb25zKCBzeXN0ZW0sIG9iamVjdF9uYW1lICkge1xuXHRcdHZhciBkYXRhID0ge1xuXHRcdFx0J2FjdGlvbicgOiAnZ2V0XycgKyBzeXN0ZW0gKyAnX29iamVjdF9maWVsZHMnLFxuXHRcdH1cblx0XHR2YXIgc2VsZWN0RmllbGQgPSAnLmNvbHVtbi0nICsgc3lzdGVtICsgJ19maWVsZCBzZWxlY3QnO1xuXHRcdHZhciBmaWVsZHMgPSAnJztcblx0XHR2YXIgZmlyc3RfZmllbGQgPSAkKCBzZWxlY3RGaWVsZCArICcgb3B0aW9uJykuZmlyc3QoKS50ZXh0KCk7XG5cdFx0aWYgKCAnJyAhPT0gJCggc2VsZWN0RmllbGQgKS52YWwoKSApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0ZmllbGRzICs9ICc8b3B0aW9uIHZhbHVlPVwiXCI+JyArIGZpcnN0X2ZpZWxkICsgJzwvb3B0aW9uPic7XG5cdFx0aWYgKCAnd29yZHByZXNzJyA9PT0gc3lzdGVtICkge1xuXHRcdFx0ZGF0YVsnd29yZHByZXNzX29iamVjdCddID0gb2JqZWN0X25hbWU7XG5cdFx0fSBlbHNlIGlmICggJ3NhbGVzZm9yY2UnID09PSBzeXN0ZW0gKSB7XG5cdFx0XHRkYXRhWydzYWxlc2ZvcmNlX29iamVjdCddID0gb2JqZWN0X25hbWU7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiBmaWVsZHM7XG5cdFx0fVxuXHRcdCQucG9zdCggYWpheHVybCwgZGF0YSwgZnVuY3Rpb24oIHJlc3BvbnNlICkge1xuXHRcdFx0JC5lYWNoKCByZXNwb25zZS5kYXRhLmZpZWxkcywgZnVuY3Rpb24oIGluZGV4LCB2YWx1ZSApIHtcblx0XHRcdFx0aWYgKCAnd29yZHByZXNzJyA9PT0gc3lzdGVtICkge1xuXHRcdFx0XHRcdGZpZWxkcyArPSAnPG9wdGlvbiB2YWx1ZT1cIicgKyB2YWx1ZS5rZXkgKyAnXCI+JyArIHZhbHVlLmtleSArICc8L29wdGlvbj4nO1xuXHRcdFx0XHR9IGVsc2UgaWYgKCAnc2FsZXNmb3JjZScgPT09IHN5c3RlbSApIHtcblx0XHRcdFx0XHRmaWVsZHMgKz0gJzxvcHRpb24gdmFsdWU9XCInICsgdmFsdWUubmFtZSArICdcIj4nICsgdmFsdWUubGFiZWwgKyAnPC9vcHRpb24+Jztcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0XHQkKCBzZWxlY3RGaWVsZCApLmh0bWwoIGZpZWxkcyApO1xuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIERvbid0IHNob3cgdGhlIFdTREwgZmlsZSBmaWVsZCB1bmxlc3MgU09BUCBpcyBlbmFibGVkXG5cdCAqL1xuXHRmdW5jdGlvbiB0b2dnbGVTb2FwRmllbGRzKCkge1xuXHRcdGlmICggMCA8ICQoICcub2JqZWN0LXN5bmMtZm9yLXNhbGVzZm9yY2UtZW5hYmxlLXNvYXAnICkubGVuZ3RoICkge1xuXHRcdFx0aWYgKCAkKCAnLm9iamVjdC1zeW5jLWZvci1zYWxlc2ZvcmNlLWVuYWJsZS1zb2FwIGlucHV0JyApLmlzKCAnOmNoZWNrZWQnICkgKSB7XG5cdFx0XHRcdCQoICcub2JqZWN0LXN5bmMtZm9yLXNhbGVzZm9yY2Utc29hcC13c2RsLXBhdGgnICkuc2hvdygpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0JCggJy5vYmplY3Qtc3luYy1mb3Itc2FsZXNmb3JjZS1zb2FwLXdzZGwtcGF0aCcgKS5oaWRlKCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEdlbmVyYXRlcyB0aGUgU2FsZXNmb3JjZSBvYmplY3QgZmllbGRzIGJhc2VkIG9uIHRoZSBkcm9wZG93biBhY3Rpdml0eSBhbmQgQVBJIHJlc3VsdHMuXG5cdCAqL1xuXHRmdW5jdGlvbiBzYWxlc2ZvcmNlT2JqZWN0RmllbGRzKCkge1xuXG5cdFx0dmFyIGRlbGF5ID0gKCBmdW5jdGlvbigpIHtcblx0XHRcdHZhciB0aW1lciA9IDA7XG5cdFx0XHRyZXR1cm4gZnVuY3Rpb24oIGNhbGxiYWNrLCBtcyApIHtcblx0XHRcdFx0Y2xlYXJUaW1lb3V0ICggdGltZXIgKTtcblx0XHRcdFx0dGltZXIgPSBzZXRUaW1lb3V0KCBjYWxsYmFjaywgbXMgKTtcblx0XHRcdH07XG5cdFx0fSgpICk7XG5cblx0XHRpZiAoIDAgPT09ICQoICcuc2FsZXNmb3JjZV9yZWNvcmRfdHlwZXNfYWxsb3dlZCA+IConICkubGVuZ3RoICkge1xuXHRcdFx0JCggJy5zYWxlc2ZvcmNlX3JlY29yZF90eXBlc19hbGxvd2VkJyApLmhpZGUoKTtcblx0XHR9XG5cblx0XHRpZiAoIDAgPT09ICQoICcuc2FsZXNmb3JjZV9yZWNvcmRfdHlwZV9kZWZhdWx0ID4gKicgKS5sZW5ndGggKSB7XG5cdFx0XHQkKCAnLnNhbGVzZm9yY2VfcmVjb3JkX3R5cGVfZGVmYXVsdCcgKS5oaWRlKCk7XG5cdFx0fVxuXHRcdGlmICggMCA9PT0gJCggJy5wdWxsX3RyaWdnZXJfZmllbGQgPiAqJyApLmxlbmd0aCApIHtcblx0XHRcdCQoICcucHVsbF90cmlnZ2VyX2ZpZWxkJyApLmhpZGUoKTtcblx0XHR9XG5cblx0XHQkKCAnI3NhbGVzZm9yY2Vfb2JqZWN0JyApLm9uKCAnY2hhbmdlJywgZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgdGhhdCA9IHRoaXM7XG5cdFx0XHR2YXIgZGVsYXlUaW1lID0gMTAwMDtcblx0XHRcdGRlbGF5KCBmdW5jdGlvbigpIHtcblx0XHRcdFx0dmFyIGRhdGEgPSB7XG5cdFx0XHRcdFx0J2FjdGlvbicgOiAnZ2V0X3NhbGVzZm9yY2Vfb2JqZWN0X2Rlc2NyaXB0aW9uJyxcblx0XHRcdFx0XHQnaW5jbHVkZScgOiBbICdmaWVsZHMnLCAncmVjb3JkVHlwZUluZm9zJyBdLFxuXHRcdFx0XHRcdCdmaWVsZF90eXBlJyA6ICdkYXRldGltZScsXG5cdFx0XHRcdFx0J3NhbGVzZm9yY2Vfb2JqZWN0JyA6IHRoYXQudmFsdWVcblx0XHRcdFx0fVxuXHRcdFx0XHQkLnBvc3QoIGFqYXh1cmwsIGRhdGEsIGZ1bmN0aW9uKCByZXNwb25zZSApIHtcblxuXHRcdFx0XHRcdHZhciByZWNvcmRUeXBlc0FsbG93ZWRNYXJrdXAgPSAnJywgcmVjb3JkVHlwZURlZmF1bHRNYXJrdXAgPSAnJywgZGF0ZU1hcmt1cCA9ICcnO1xuXG5cdFx0XHRcdFx0aWYgKCAwIDwgJCggcmVzcG9uc2UuZGF0YS5yZWNvcmRUeXBlSW5mb3MgKS5sZW5ndGggKSB7XG5cdFx0XHRcdFx0XHRyZWNvcmRUeXBlc0FsbG93ZWRNYXJrdXAgKz0gJzxsYWJlbCBmb3I9XCJzYWxlc2ZvcmNlX3JlY29yZF90eXBlc19hbGxvd2VkXCI+QWxsb3dlZCBSZWNvcmQgVHlwZXM6PC9sYWJlbD48ZGl2IGNsYXNzPVwiY2hlY2tib3hlc1wiPic7XG5cdFx0XHRcdFx0XHQkLmVhY2goIHJlc3BvbnNlLmRhdGEucmVjb3JkVHlwZUluZm9zLCBmdW5jdGlvbiggaW5kZXgsIHZhbHVlICkge1xuXHRcdFx0XHRcdFx0XHRyZWNvcmRUeXBlc0FsbG93ZWRNYXJrdXAgKz0gJzxsYWJlbD48aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgY2xhc3M9XCJmb3JtLWNoZWNrYm94XCIgdmFsdWU9XCInICsgaW5kZXggKyAnXCIgbmFtZT1cInNhbGVzZm9yY2VfcmVjb3JkX3R5cGVzX2FsbG93ZWRbJyArIGluZGV4ICsgJ11cIiBpZD1cInNhbGVzZm9yY2VfcmVjb3JkX3R5cGVzX2FsbG93ZWQtJyArIGluZGV4ICsgJ1wiPiAnICsgdmFsdWUgKyAnPC9sYWJlbD4nO1xuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRyZWNvcmRUeXBlc0FsbG93ZWRNYXJrdXAgKz0gJzwvZGl2Pic7XG5cblxuXHRcdFx0XHRcdFx0cmVjb3JkVHlwZURlZmF1bHRNYXJrdXAgKz0gJzxsYWJlbCBmb3I9XCJzYWxlc2ZvcmNlX3JlY29yZF90eXBlX2RlZmF1bHRcIj5EZWZhdWx0IFJlY29yZCBUeXBlOjwvbGFiZWw+Jztcblx0XHRcdFx0XHRcdHJlY29yZFR5cGVEZWZhdWx0TWFya3VwICs9ICc8c2VsZWN0IG5hbWU9XCJzYWxlc2ZvcmNlX3JlY29yZF90eXBlX2RlZmF1bHRcIiBpZD1cInNhbGVzZm9yY2VfcmVjb3JkX3R5cGVfZGVmYXVsdFwiPjxvcHRpb24gdmFsdWU9XCJcIj4tIFNlbGVjdCByZWNvcmQgdHlwZSAtPC9vcHRpb24+Jztcblx0XHRcdFx0XHRcdCQuZWFjaCggcmVzcG9uc2UuZGF0YS5yZWNvcmRUeXBlSW5mb3MsIGZ1bmN0aW9uKCBpbmRleCwgdmFsdWUgKSB7XG5cdFx0XHRcdFx0XHRcdHJlY29yZFR5cGVEZWZhdWx0TWFya3VwICs9ICc8b3B0aW9uIHZhbHVlPVwiJyArIGluZGV4ICsgJ1wiPicgKyB2YWx1ZSArICc8L29wdGlvbj4nO1xuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0JCggJy5zYWxlc2ZvcmNlX3JlY29yZF90eXBlc19hbGxvd2VkJyApLmh0bWwoIHJlY29yZFR5cGVzQWxsb3dlZE1hcmt1cCApO1xuXHRcdFx0XHRcdCQoICcuc2FsZXNmb3JjZV9yZWNvcmRfdHlwZV9kZWZhdWx0JyApLmh0bWwoIHJlY29yZFR5cGVEZWZhdWx0TWFya3VwICk7XG5cblx0XHRcdFx0XHRpZiAoIDAgPCAkKCByZXNwb25zZS5kYXRhLmZpZWxkcyApLmxlbmd0aCApIHtcblx0XHRcdFx0XHRcdGRhdGVNYXJrdXAgKz0gJzxsYWJlbCBmb3I9XCJwdWxsX3RyaWdnZXJfZmllbGRcIj5EYXRlIGZpZWxkIHRvIHRyaWdnZXIgcHVsbDo8L2xhYmVsPic7XG5cdFx0XHRcdFx0XHRkYXRlTWFya3VwICs9ICc8c2VsZWN0IG5hbWU9XCJwdWxsX3RyaWdnZXJfZmllbGRcIiBpZD1cInB1bGxfdHJpZ2dlcl9maWVsZFwiPjxvcHRpb24gdmFsdWU9XCJcIj4tIFNlbGVjdCBkYXRlIGZpZWxkIC08L29wdGlvbj4nXG5cdFx0XHRcdFx0XHQkLmVhY2goIHJlc3BvbnNlLmRhdGEuZmllbGRzLCBmdW5jdGlvbiggaW5kZXgsIHZhbHVlICkge1xuXHRcdFx0XHRcdFx0XHRkYXRlTWFya3VwICs9ICc8b3B0aW9uIHZhbHVlPVwiJyArIHZhbHVlLm5hbWUgKyAnXCI+JyArIHZhbHVlLmxhYmVsICsgJzwvb3B0aW9uPic7XG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdGRhdGVNYXJrdXAgKz0gJzwvc2VsZWN0Pic7XG5cdFx0XHRcdFx0XHRkYXRlTWFya3VwICs9ICc8cCBjbGFzcz1cImRlc2NyaXB0aW9uXCI+VGhlc2UgYXJlIGRhdGUgZmllbGRzIHRoYXQgY2FuIGNhdXNlIFdvcmRQcmVzcyB0byBwdWxsIGFuIHVwZGF0ZSBmcm9tIFNhbGVzZm9yY2UsIGFjY29yZGluZyB0byB0aGUgPGNvZGU+c2FsZXNmb3JjZV9wdWxsPC9jb2RlPiBjbGFzcy48L3A+J1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdCQoICcucHVsbF90cmlnZ2VyX2ZpZWxkJyApLmh0bWwoIGRhdGVNYXJrdXAgKTtcblxuXHRcdFx0XHRcdGlmICggJycgIT09IHJlY29yZFR5cGVzQWxsb3dlZE1hcmt1cCApIHtcblx0XHRcdFx0XHRcdCQoICcuc2FsZXNmb3JjZV9yZWNvcmRfdHlwZXNfYWxsb3dlZCcgKS5zaG93KCk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdCQoICcuc2FsZXNmb3JjZV9yZWNvcmRfdHlwZXNfYWxsb3dlZCcgKS5oaWRlKCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGlmICggJycgIT09IHJlY29yZFR5cGVEZWZhdWx0TWFya3VwICkge1xuXHRcdFx0XHRcdFx0JCggJy5zYWxlc2ZvcmNlX3JlY29yZF90eXBlX2RlZmF1bHQnICkuc2hvdygpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHQkKCAnLnNhbGVzZm9yY2VfcmVjb3JkX3R5cGVfZGVmYXVsdCcgKS5oaWRlKCk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aWYgKCAnJyAhPT0gZGF0ZU1hcmt1cCApIHtcblx0XHRcdFx0XHRcdCQoICcucHVsbF90cmlnZ2VyX2ZpZWxkJyApLnNob3coKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0JCggJy5wdWxsX3RyaWdnZXJfZmllbGQnICkuaGlkZSgpO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGlmICggalF1ZXJ5LmZuLnNlbGVjdDIgKSB7XG5cdFx0XHRcdFx0XHQkKCAnc2VsZWN0I3NhbGVzZm9yY2VfcmVjb3JkX3R5cGVfZGVmYXVsdCcgKS5zZWxlY3QyKCk7XG5cdFx0XHRcdFx0XHQkKCAnc2VsZWN0I3B1bGxfdHJpZ2dlcl9maWVsZCcgKS5zZWxlY3QyKCk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdH0pO1xuXHRcdFx0fSwgZGVsYXlUaW1lICk7XG5cdFx0fSk7XG5cdH1cblx0LyoqXG5cdCAqIER1cGxpY2F0ZXMgdGhlIGZpZWxkcyBmb3IgYSBuZXcgcm93IGluIHRoZSBmaWVsZG1hcCBvcHRpb25zIHNjcmVlbi5cblx0ICovXG5cdCBmdW5jdGlvbiBhZGRGaWVsZE1hcHBpbmdSb3coKSB7XG5cdFx0JCggJyNhZGQtZmllbGQtbWFwcGluZycgKS5jbGljayggZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgc2FsZXNmb3JjZU9iamVjdCA9ICQoICcjc2FsZXNmb3JjZV9vYmplY3QnICkudmFsKCk7XG5cdFx0XHR2YXIgd29yZHByZXNzT2JqZWN0ID0gJCggJyN3b3JkcHJlc3Nfb2JqZWN0JyApLnZhbCgpO1xuXHRcdFx0dmFyIG5ld0tleSA9IG5ldyBEYXRlKCkuZ2V0VVRDTWlsbGlzZWNvbmRzKCk7XG5cdFx0XHR2YXIgbGFzdFJvdyA9ICQoICd0YWJsZS5maWVsZHMgdGJvZHkgdHInICkubGFzdCgpO1xuXHRcdFx0dmFyIG9sZEtleSA9IGxhc3RSb3cuYXR0ciggJ2RhdGEta2V5JyApO1xuXHRcdFx0b2xkS2V5ID0gbmV3IFJlZ0V4cCggb2xkS2V5LCAnZycgKTtcblx0XHRcdCQoIHRoaXMgKS50ZXh0KCAnQWRkIGFub3RoZXIgZmllbGQgbWFwcGluZycgKTtcblx0XHRcdGlmICggJycgIT09IHdvcmRwcmVzc09iamVjdCAmJiAnJyAhPT0gc2FsZXNmb3JjZU9iamVjdCApIHtcblx0XHRcdFx0ZmllbGRtYXBGaWVsZHMoIG9sZEtleSwgbmV3S2V5LCBsYXN0Um93ICk7XG5cdFx0XHRcdCQoIHRoaXMgKS5wYXJlbnQoKS5maW5kKCAnLm1pc3Npbmctb2JqZWN0JyApLnJlbW92ZSgpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0JCggdGhpcyApLnBhcmVudCgpLnByZXBlbmQoICc8ZGl2IGNsYXNzPVwiZXJyb3IgbWlzc2luZy1vYmplY3RcIj48c3Bhbj5Zb3UgaGF2ZSB0byBwaWNrIGEgV29yZFByZXNzIG9iamVjdCBhbmQgYSBTYWxlc2ZvcmNlIG9iamVjdCB0byBhZGQgZmllbGQgbWFwcGluZy48L3NwYW4+PC9kaXY+JyApO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH0pO1xuXHR9XG5cdC8qKlxuXHQgKiBHZXRzIHRoZSBXb3JkUHJlc3MgYW5kIFNhbGVzZm9yY2UgZmllbGQgcmVzdWx0cyB2aWEgYW4gQWpheCBjYWxsXG5cdCAqIEBwYXJhbSBzdHJpbmcgb2xkS2V5IHRoZSBkYXRhLWtleSBhdHRyaWJ1dGUgb2YgdGhlIHNldCB0aGF0IGlzIGJlaW5nIGNsb25lZFxuXHQgKiBAcGFyYW0gc3RyaW5nIG5ld0tleSB0aGUgZGF0YS1rZXkgYXR0cmlidXRlIGZvciB0aGUgb25lIHdlJ3JlIGFwcGVuZGluZ1xuXHQgKiBAcGFyYW0gb2JqZWN0IGxhc3RSb3cgdGhlIGxhc3Qgc2V0IG9mIHRoZSBmaWVsZG1hcFxuXHQgKi9cblx0ZnVuY3Rpb24gZmllbGRtYXBGaWVsZHMoIG9sZEtleSwgbmV3S2V5LCBsYXN0Um93ICkge1xuXHRcdHZhciBuZXh0Um93ID0gJyc7XG4gICAgICAgIGlmICggalF1ZXJ5LmZuLnNlbGVjdDIgKSB7XG4gICAgICAgIFx0bmV4dFJvdyA9IGxhc3RSb3cuZmluZCggJ3NlbGVjdCcgKVxuXHQgICAgICAgICAgICAuc2VsZWN0MiggJ2Rlc3Ryb3knIClcblx0ICAgICAgICAgICAgLmVuZCgpXG5cdCAgICAgICAgICAgIC5jbG9uZSggdHJ1ZSApLnJlbW92ZUNsYXNzKCAnZmllbGRtYXAtdGVtcGxhdGUnICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgIFx0bmV4dFJvdyA9IGxhc3RSb3cuY2xvbmUoIHRydWUgKTtcbiAgICAgICAgfVxuXHRcdCQoIG5leHRSb3cgKS5hdHRyKCAnZGF0YS1rZXknLCBuZXdLZXkgKTtcblx0XHQkKCBuZXh0Um93ICkuZWFjaChmdW5jdGlvbigpIHtcblx0XHRcdCQoIHRoaXMgKS5odG1sKCBmdW5jdGlvbiggaSwgaCApIHtcblx0XHRcdFx0cmV0dXJuIGgucmVwbGFjZSggb2xkS2V5LCBuZXdLZXkgKTtcblx0XHRcdH0pO1xuXHRcdH0pO1xuXHRcdCQoICd0YWJsZS5maWVsZHMgdGJvZHknICkuYXBwZW5kKCBuZXh0Um93ICk7XG5cdFx0aWYgKCBqUXVlcnkuZm4uc2VsZWN0MiApIHtcblx0XHRcdGxhc3RSb3cuZmluZCggJ3NlbGVjdCcgKS5zZWxlY3QyKCk7XG5cdFx0XHRuZXh0Um93LmZpbmQoICdzZWxlY3QnICkuc2VsZWN0MigpO1xuXHRcdH1cblx0fVxuXHQvKipcblx0ICogSGFuZGxlIG1hbnVhbCBwdXNoIGFuZCBwdWxsIG9mIG9iamVjdHNcblx0ICovXG5cdGZ1bmN0aW9uIHB1c2hBbmRQdWxsT2JqZWN0cygpIHtcblx0XHQkKCAnLnNhbGVzZm9yY2VfdXNlcl9hamF4X21lc3NhZ2UnICkuaGlkZSgpO1xuXHRcdGlmICggMCA8ICQoICcjd29yZHByZXNzX29iamVjdF9hamF4JyApLmxlbmd0aCApIHtcblx0XHRcdCQoICcucHVzaF90b19zYWxlc2ZvcmNlX2J1dHRvbicgKS5vbiggJ2NsaWNrJywgZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHZhciB3b3JkcHJlc3NPYmplY3QgPSAkKCAnI3dvcmRwcmVzc19vYmplY3RfYWpheCcgKS52YWwoKTtcblx0XHRcdFx0dmFyIHdvcmRwcmVzc0lkID0gJCggJyN3b3JkcHJlc3NfaWRfYWpheCcgKS52YWwoKTtcblx0XHRcdFx0dmFyIHNhbGVzZm9yY2VJZCA9ICQoICcjc2FsZXNmb3JjZV9pZF9hamF4JyApLnZhbCgpO1xuXHRcdFx0XHR2YXIgZGF0YSA9IHtcblx0XHRcdFx0XHQnYWN0aW9uJyA6ICdwdXNoX3RvX3NhbGVzZm9yY2UnLFxuXHRcdFx0XHRcdCd3b3JkcHJlc3Nfb2JqZWN0JyA6IHdvcmRwcmVzc09iamVjdCxcblx0XHRcdFx0XHQnd29yZHByZXNzX2lkJyA6IHdvcmRwcmVzc0lkLFxuXHRcdFx0XHRcdCdzYWxlc2ZvcmNlX2lkJyA6IHNhbGVzZm9yY2VJZFxuXHRcdFx0XHR9XG5cdFx0XHRcdCQucG9zdCggYWpheHVybCwgZGF0YSwgZnVuY3Rpb24oIHJlc3BvbnNlICkge1xuXHRcdFx0XHRcdGlmICggdHJ1ZSA9PT0gcmVzcG9uc2Uuc3VjY2VzcyApIHtcblx0XHRcdFx0XHRcdHVwZGF0ZVNhbGVzZm9yY2VVc2VyU3VtbWFyeSgpO1xuXHRcdFx0XHRcdFx0JCggJy5zYWxlc2ZvcmNlX3VzZXJfYWpheF9tZXNzYWdlJyApLndpZHRoKCAkKCAnLm1hcHBlZC1zYWxlc2ZvcmNlLXVzZXInICkud2lkdGgoKSAtIDI3ICk7XG5cdFx0XHRcdFx0XHQkKCAnLnNhbGVzZm9yY2VfdXNlcl9hamF4X21lc3NhZ2UnICkuaHRtbCggJzxwPlRoaXMgb2JqZWN0IGhhcyBiZWVuIHB1c2hlZCB0byBTYWxlc2ZvcmNlLjwvcD4nICkuZmFkZUluKCkuZGVsYXkoIDQwMDAgKS5mYWRlT3V0KCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdCQoICcucHVsbF9mcm9tX3NhbGVzZm9yY2VfYnV0dG9uJyApLm9uKCAnY2xpY2snLCBmdW5jdGlvbigpIHtcblx0XHRcdHZhciBzYWxlc2ZvcmNlSWQgPSAkKCAnI3NhbGVzZm9yY2VfaWRfYWpheCcgKS52YWwoKTtcblx0XHRcdHZhciB3b3JkcHJlc3NPYmplY3QgPSAkKCAnI3dvcmRwcmVzc19vYmplY3RfYWpheCcgKS52YWwoKTtcblx0XHRcdHZhciBkYXRhID0ge1xuXHRcdFx0XHQnYWN0aW9uJyA6ICdwdWxsX2Zyb21fc2FsZXNmb3JjZScsXG5cdFx0XHRcdCdzYWxlc2ZvcmNlX2lkJyA6IHNhbGVzZm9yY2VJZCxcblx0XHRcdFx0J3dvcmRwcmVzc19vYmplY3QnIDogd29yZHByZXNzT2JqZWN0XG5cdFx0XHR9XG5cdFx0XHQkLnBvc3QoIGFqYXh1cmwsIGRhdGEsIGZ1bmN0aW9uKCByZXNwb25zZSApIHtcblx0XHRcdFx0aWYgKCB0cnVlID09PSByZXNwb25zZS5zdWNjZXNzICkge1xuXHRcdFx0XHRcdHVwZGF0ZVNhbGVzZm9yY2VVc2VyU3VtbWFyeSgpO1xuXHRcdFx0XHRcdCQoICcuc2FsZXNmb3JjZV91c2VyX2FqYXhfbWVzc2FnZScgKS53aWR0aCggJCggJy5tYXBwZWQtc2FsZXNmb3JjZS11c2VyJyApLndpZHRoKCkgLSAyNyApO1xuXHRcdFx0XHRcdCQoICcuc2FsZXNmb3JjZV91c2VyX2FqYXhfbWVzc2FnZScgKS5odG1sKCAnPHA+VGhpcyBvYmplY3QgaGFzIGJlZW4gcHVsbGVkIGZyb20gU2FsZXNmb3JjZS48L3A+JyApLmZhZGVJbigpLmRlbGF5KCA0MDAwICkuZmFkZU91dCgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9KTtcblx0fVxuXHQvKipcblx0ICogVXBkYXRlcyB0aGUgdXNlciBwcm9maWxlIHN1bW1hcnkgb2YgU2FsZXNmb3JjZSBpbmZvLlxuXHQgKi9cblx0ZnVuY3Rpb24gdXBkYXRlU2FsZXNmb3JjZVVzZXJTdW1tYXJ5KCkge1xuXHRcdHZhciBtYXBwaW5nSWQgPSAkKCAnI21hcHBpbmdfaWRfYWpheCcgKS52YWwoKTtcblx0XHR2YXIgZGF0YSA9IHtcblx0XHRcdCdhY3Rpb24nIDogJ3JlZnJlc2hfbWFwcGVkX2RhdGEnLFxuXHRcdFx0J21hcHBpbmdfaWQnIDogbWFwcGluZ0lkXG5cdFx0fVxuXHRcdCQucG9zdCggYWpheHVybCwgZGF0YSwgZnVuY3Rpb24oIHJlc3BvbnNlICkge1xuXHRcdFx0aWYgKCB0cnVlID09PSByZXNwb25zZS5zdWNjZXNzICkge1xuXHRcdFx0XHQkKCAndGQubGFzdF9zeW5jX21lc3NhZ2UnICkudGV4dCggcmVzcG9uc2UuZGF0YS5sYXN0X3N5bmNfbWVzc2FnZSApO1xuXHRcdFx0XHQkKCAndGQubGFzdF9zeW5jX2FjdGlvbicgKS50ZXh0KCByZXNwb25zZS5kYXRhLmxhc3Rfc3luY19hY3Rpb24gKTtcblx0XHRcdFx0JCggJ3RkLmxhc3Rfc3luY19zdGF0dXMnICkudGV4dCggcmVzcG9uc2UuZGF0YS5sYXN0X3N5bmNfc3RhdHVzICk7XG5cdFx0XHRcdCQoICd0ZC5sYXN0X3N5bmMnICkudGV4dCggcmVzcG9uc2UuZGF0YS5sYXN0X3N5bmMgKTtcblx0XHRcdFx0aWYgKCAnMScgPT09IHJlc3BvbnNlLmRhdGEubGFzdF9zeW5jX3N0YXR1cyApIHtcblx0XHRcdFx0XHQkKCAndGQubGFzdF9zeW5jX3N0YXR1cycgKS50ZXh0KCAnc3VjY2VzcycgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cdC8qKlxuXHQgKiBDbGVhciB0aGUgcGx1Z2luIGNhY2hlIHZpYSBBamF4IHJlcXVlc3QuXG5cdCAqL1xuXHRmdW5jdGlvbiBjbGVhclNmd3BDYWNoZUxpbmsoKSB7XG5cdFx0JCggJyNjbGVhci1zZndwLWNhY2hlJyApLmNsaWNrKCBmdW5jdGlvbigpIHtcblx0XHRcdHZhciBkYXRhID0ge1xuXHRcdFx0XHQnYWN0aW9uJyA6ICdjbGVhcl9zZndwX2NhY2hlJ1xuXHRcdFx0fVxuXHRcdFx0dmFyIHRoYXQgPSAkKCB0aGlzICk7XG5cdFx0XHQkLnBvc3QoIGFqYXh1cmwsIGRhdGEsIGZ1bmN0aW9uKCByZXNwb25zZSApIHtcblx0XHRcdFx0aWYgKCB0cnVlID09PSByZXNwb25zZS5zdWNjZXNzICYmIHRydWUgPT09IHJlc3BvbnNlLmRhdGEuc3VjY2VzcyApIHtcblx0XHRcdFx0XHR0aGF0LnBhcmVudCgpLmh0bWwoIHJlc3BvbnNlLmRhdGEubWVzc2FnZSApLmZhZGVJbigpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9KTtcblx0fVxuXG5cdC8vIGxvYWQgYXZhaWxhYmxlIG9wdGlvbnMgaWYgdGhlIHdvcmRwcmVzcyBvYmplY3QgY2hhbmdlc1xuXHQkKCBkb2N1bWVudCApLm9uKCAnY2hhbmdlJywgJ3NlbGVjdCN3b3JkcHJlc3Nfb2JqZWN0JywgZnVuY3Rpb24oKSB7XG5cdFx0dmFyIHRpbWVvdXQ7XG5cdFx0bG9hZEZpZWxkT3B0aW9ucyggJ3dvcmRwcmVzcycsICQoIHRoaXMgKS52YWwoKSApO1xuXHRcdGNsZWFyVGltZW91dCggdGltZW91dCApO1xuXHRcdHRpbWVvdXQgPSBzZXRUaW1lb3V0KCBmdW5jdGlvbigpIHtcblx0XHRcdCQoICd0YWJsZS5maWVsZHMgdGJvZHkgdHInICkuZmFkZU91dCgpO1xuXHRcdFx0JCggJ3RhYmxlLmZpZWxkcyB0Ym9keSB0cicgKS5ub3QoICcuZmllbGRtYXAtdGVtcGxhdGUnICkucmVtb3ZlKCk7XG5cdFx0fSwgMTAwMCApO1xuXHR9KTtcblxuXHQvLyBsb2FkIGF2YWlsYWJsZSBvcHRpb25zIGlmIHRoZSBzYWxlc2ZvcmNlIG9iamVjdCBjaGFuZ2VzXG5cdCQoIGRvY3VtZW50ICkub24oICdjaGFuZ2UnLCAnc2VsZWN0I3NhbGVzZm9yY2Vfb2JqZWN0JywgZnVuY3Rpb24oKSB7XG5cdFx0dmFyIHRpbWVvdXQ7XG5cdFx0bG9hZEZpZWxkT3B0aW9ucyggJ3NhbGVzZm9yY2UnLCAkKCB0aGlzICkudmFsKCkgKTtcblx0XHRjbGVhclRpbWVvdXQoIHRpbWVvdXQgKTtcblx0XHR0aW1lb3V0ID0gc2V0VGltZW91dCggZnVuY3Rpb24oKSB7XG5cdFx0XHQkKCAndGFibGUuZmllbGRzIHRib2R5IHRyJyApLmZhZGVPdXQoKTtcblx0XHRcdCQoICd0YWJsZS5maWVsZHMgdGJvZHkgdHInICkubm90KCAnLmZpZWxkbWFwLXRlbXBsYXRlJyApLnJlbW92ZSgpO1xuXHRcdH0sIDEwMDAgKTtcblx0fSk7XG5cblx0Ly8gc2hvdyB3c2RsIGZpZWxkIGlmIHNvYXAgaXMgZW5hYmxlZFxuXHQkKCBkb2N1bWVudCApLm9uKCAnY2hhbmdlJywgJy5vYmplY3Qtc3luYy1mb3Itc2FsZXNmb3JjZS1lbmFibGUtc29hcCBpbnB1dCcsIGZ1bmN0aW9uKCkge1xuXHRcdHRvZ2dsZVNvYXBGaWVsZHMoKTtcblx0fSk7XG5cblx0LyoqXG5cdCAqIEFzIHRoZSBEcnVwYWwgcGx1Z2luIGRvZXMsIHdlIG9ubHkgYWxsb3cgb25lIGZpZWxkIHRvIGJlIGEgcHJlbWF0Y2hcblx0ICovXG5cdCQoIGRvY3VtZW50ICkub24oICdjbGljaycsICcuY29sdW1uLWlzX3ByZW1hdGNoIGlucHV0JywgZnVuY3Rpb24oKSB7XG5cdFx0JCggJy5jb2x1bW4taXNfcHJlbWF0Y2ggaW5wdXQnICkubm90KCB0aGlzICkucHJvcCggJ2NoZWNrZWQnLCBmYWxzZSApO1xuXHR9KTtcblx0LyoqXG5cdCAqIEFzIHRoZSBEcnVwYWwgcGx1Z2luIGRvZXMsIHdlIG9ubHkgYWxsb3cgb25lIGZpZWxkIHRvIGJlIGEga2V5XG5cdCAqL1xuXHQkKCBkb2N1bWVudCApLm9uKCAnY2xpY2snLCAnLmNvbHVtbi1pc19rZXkgaW5wdXQnLCBmdW5jdGlvbigpIHtcblx0XHQkKCAnLmNvbHVtbi1pc19rZXkgaW5wdXQnICkubm90KCB0aGlzICkucHJvcCggJ2NoZWNrZWQnLCBmYWxzZSApO1xuXHR9KTtcblx0LyoqXG5cdCAqIFdoZW4gdGhlIHBsdWdpbiBsb2FkcywgaW5pdGlhbGl6ZSBvciBlbmFibGUgdGhpbmdzOlxuXHQgKiBTZWxlY3QyIG9uIHNlbGVjdCBmaWVsZHNcblx0ICogQ2xlYXIgZmllbGRzIHdoZW4gdGhlIHRhcmdldGVkIFdvcmRQcmVzcyBvciBTYWxlc2ZvcmNlIG9iamVjdCB0eXBlIGNoYW5nZXNcblx0ICogQWRkIGEgc3Bpbm5lciBmb3IgQWpheCByZXF1ZXN0c1xuXHQgKiBNYW5hZ2UgdGhlIGRpc3BsYXkgZm9yIFNhbGVzZm9yY2Ugb2JqZWN0IGZpZWxkcyBiYXNlZCBvbiBBUEkgcmVwb25zZVxuXHQgKiBNYW51YWwgcHVzaCBhbmQgcHVsbFxuXHQgKiBDbGVhcmluZyB0aGUgY2FjaGVcblx0ICovXG5cdCQoIGRvY3VtZW50ICkucmVhZHkoIGZ1bmN0aW9uKCkge1xuXG5cdFx0Ly8gZm9yIG1haW4gYWRtaW4gc2V0dGluZ3Ncblx0XHR0b2dnbGVTb2FwRmllbGRzKCk7XG5cblx0XHQvLyBpZiB0aGVyZSBpcyBhbHJlYWR5IGEgd3Agb3Igc2Ygb2JqZWN0LCBtYWtlIHN1cmUgaXQgaGFzIHRoZSByaWdodCBmaWVsZHNcblx0XHRsb2FkRmllbGRPcHRpb25zKCAnd29yZHByZXNzJywgJCggJ3NlbGVjdCN3b3JkcHJlc3Nfb2JqZWN0JyApLnZhbCgpICk7XG5cdFx0bG9hZEZpZWxkT3B0aW9ucyggJ3NhbGVzZm9yY2UnLCAkKCAnc2VsZWN0I3NhbGVzZm9yY2Vfb2JqZWN0JyApLnZhbCgpICk7XG5cblx0XHRpZiAoIGpRdWVyeS5mbi5zZWxlY3QyICkge1xuXHRcdFx0JCggJ3NlbGVjdCN3b3JkcHJlc3Nfb2JqZWN0JyApLnNlbGVjdDIoKTtcblx0XHRcdCQoICdzZWxlY3Qjc2FsZXNmb3JjZV9vYmplY3QnICkuc2VsZWN0MigpO1xuXHRcdFx0JCggJ3NlbGVjdCNzYWxlc2ZvcmNlX3JlY29yZF90eXBlX2RlZmF1bHQnICkuc2VsZWN0MigpO1xuXHRcdFx0JCggJ3NlbGVjdCNwdWxsX3RyaWdnZXJfZmllbGQnICkuc2VsZWN0MigpO1xuXHRcdFx0JCggJy5jb2x1bW4td29yZHByZXNzX2ZpZWxkIHNlbGVjdCcgKS5zZWxlY3QyKCk7XG5cdFx0XHQkKCAnLmNvbHVtbi1zYWxlc2ZvcmNlX2ZpZWxkIHNlbGVjdCcgKS5zZWxlY3QyKCk7XG5cdFx0fVxuXG5cdFx0Ly8gdG9kbzogbmVlZCB0byBmaXggdGhpcyBzbyBpdCBkb2Vzbid0IHJ1biBhbGwgdGhlIHNwaW5uZXJzIGF0IHRoZSBzYW1lIHRpbWUgd2hlbiB0aGVyZSBhcmUgbXVsdGlwbGVzIG9uIHRoZSBzYW1lIHBhZ2Vcblx0XHQkKCBkb2N1bWVudCApLmFqYXhTdGFydCggZnVuY3Rpb24oKSB7XG5cdFx0XHQkKCAnLnNwaW5uZXInICkuYWRkQ2xhc3MoICdpcy1hY3RpdmUnICk7XG5cdFx0fSkuYWpheFN0b3AoIGZ1bmN0aW9uKCkge1xuXHRcdFx0JCggJy5zcGlubmVyJyApLnJlbW92ZUNsYXNzKCAnaXMtYWN0aXZlJyApO1xuXHRcdH0pO1xuXHRcdHNhbGVzZm9yY2VPYmplY3RGaWVsZHMoKTtcblx0XHRhZGRGaWVsZE1hcHBpbmdSb3coKTtcblxuXHRcdC8vIGZvciBwdXNoL3B1bGwgbWV0aG9kcyBydW5uaW5nIHZpYSBhamF4XG5cdFx0cHVzaEFuZFB1bGxPYmplY3RzKCk7XG5cblx0XHQvLyBmb3IgY2xlYXJpbmcgdGhlIHBsdWdpbiBjYWNoZVxuXHRcdGNsZWFyU2Z3cENhY2hlTGluaygpO1xuXHR9KTtcbn0oIGpRdWVyeSApICk7XG4iXX0= diff --git a/assets/js/object-sync-for-salesforce-admin.min.js b/assets/js/object-sync-for-salesforce-admin.min.js index 966c5362..c690c3ff 100644 --- a/assets/js/object-sync-for-salesforce-admin.min.js +++ b/assets/js/object-sync-for-salesforce-admin.min.js @@ -1 +1 @@ -"use strict";!function(l){function t(s,e){var t={action:"get_"+s+"_object_fields"},a="",o=l(".column-"+s+"_field select option").first().text();if(a+='","wordpress"===s)t.wordpress_object=e;else{if("salesforce"!==s)return a;t.salesforce_object=e}l.post(ajaxurl,t,function(e){l.each(e.data.fields,function(e,t){"wordpress"===s?a+='":"salesforce"===s&&(a+='")}),l(".column-"+s+"_field select").html(a)})}function e(){0 *").length&&l(".salesforce_record_types_allowed").hide(),0===l(".salesforce_record_type_default > *").length&&l(".salesforce_record_type_default").hide(),0===l(".pull_trigger_field > *").length&&l(".pull_trigger_field").hide(),l("#salesforce_object").on("change",function(){var t=this;e(function(){var e={action:"get_salesforce_object_description",include:["fields","recordTypeInfos"],field_type:"datetime",salesforce_object:t.value};l.post(ajaxurl,e,function(e){var s="",a="",o="";0Allowed Record Types:
',l.each(e.data.recordTypeInfos,function(e,t){s+='"}),s+="
",a+='',a+='',l.each(e.data.fields,function(e,t){o+='"}),o+="",o+='

These are date fields that can cause WordPress to pull an update from Salesforce, according to the salesforce_pull class.

'),l(".pull_trigger_field").html(o),""!==s?l(".salesforce_record_types_allowed").show():l(".salesforce_record_types_allowed").hide(),""!==a?l(".salesforce_record_type_default").show():l(".salesforce_record_type_default").hide(),""!==o?l(".pull_trigger_field").show():l(".pull_trigger_field").hide(),jQuery.fn.select2&&(l("select#salesforce_record_type_default").select2(),l("select#pull_trigger_field").select2())})},1e3)})}function a(){l("#add-field-mapping").click(function(){var e=l("#salesforce_object").val(),t=l("#wordpress_object").val(),s=(new Date).getUTCMilliseconds(),a=l("table.fields tbody tr").last(),o=a.attr("data-key");return o=new RegExp(o,"g"),l(this).text("Add another field mapping"),""!==t&&""!==e?(function(s,a,e){var t="";t=jQuery.fn.select2?e.find("select").select2("destroy").end().clone(!0).removeClass("fieldmap-template"):e.clone(!0);l(t).attr("data-key",a),l(t).each(function(){l(this).html(function(e,t){return t.replace(s,a)})}),l("table.fields tbody").append(t),jQuery.fn.select2&&(e.find("select").select2(),t.find("select").select2())}(o,s,a),l(this).parent().find(".missing-object").remove()):l(this).parent().prepend('
You have to pick a WordPress object and a Salesforce object to add field mapping.
'),!1})}function o(){var e={action:"refresh_mapped_data",mapping_id:l("#mapping_id_ajax").val()};l.post(ajaxurl,e,function(e){!0===e.success&&(l("td.last_sync_message").text(e.data.last_sync_message),l("td.last_sync_action").text(e.data.last_sync_action),l("td.last_sync_status").text(e.data.last_sync_status),l("td.last_sync").text(e.data.last_sync),"1"===e.data.last_sync_status&&l("td.last_sync_status").text("success"))})}l(document).on("change","select#wordpress_object",function(){var e;t("wordpress",l(this).val()),clearTimeout(e),e=setTimeout(function(){l("table.fields tbody tr").fadeOut(),l("table.fields tbody tr").not(".fieldmap-template").remove()},1e3)}),l(document).on("change","select#salesforce_object",function(){var e;t("salesforce",l(this).val()),clearTimeout(e),e=setTimeout(function(){l("table.fields tbody tr").fadeOut(),l("table.fields tbody tr").not(".fieldmap-template").remove()},1e3)}),l(document).on("change",".object-sync-for-salesforce-enable-soap input",function(){e()}),l(document).on("click",".column-is_prematch input",function(){l(".column-is_prematch input").not(this).prop("checked",!1)}),l(document).on("click",".column-is_key input",function(){l(".column-is_key input").not(this).prop("checked",!1)}),l(document).ready(function(){e(),t("wordpress",l("select#wordpress_object").val()),t("salesforce",l("select#salesforce_object").val()),jQuery.fn.select2&&(l("select#wordpress_object").select2(),l("select#salesforce_object").select2(),l("select#salesforce_record_type_default").select2(),l("select#pull_trigger_field").select2(),l(".column-wordpress_field select").select2(),l(".column-salesforce_field select").select2()),l(document).ajaxStart(function(){l(".spinner").addClass("is-active")}).ajaxStop(function(){l(".spinner").removeClass("is-active")}),s(),a(),l(".salesforce_user_ajax_message").hide(),0This object has been pushed to Salesforce.

").fadeIn().delay(4e3).fadeOut())}),!1}),l(".pull_from_salesforce_button").on("click",function(){var e={action:"pull_from_salesforce",salesforce_id:l("#salesforce_id_ajax").val(),wordpress_object:l("#wordpress_object_ajax").val()};return l.post(ajaxurl,e,function(e){!0===e.success&&(o(),l(".salesforce_user_ajax_message").width(l(".mapped-salesforce-user").width()-27),l(".salesforce_user_ajax_message").html("

This object has been pulled from Salesforce.

").fadeIn().delay(4e3).fadeOut())}),!1}),l("#clear-sfwp-cache").click(function(){var t=l(this);return l.post(ajaxurl,{action:"clear_sfwp_cache"},function(e){!0===e.success&&!0===e.data.success&&t.parent().html(e.data.message).fadeIn()}),!1})})}(jQuery); \ No newline at end of file +"use strict";!function(c){function t(s,e){var t={action:"get_"+s+"_object_fields"},a=".column-"+s+"_field select",o="",l=c(a+" option").first().text();if(""===c(a).val()){if(o+='","wordpress"===s)t.wordpress_object=e;else{if("salesforce"!==s)return o;t.salesforce_object=e}c.post(ajaxurl,t,function(e){c.each(e.data.fields,function(e,t){"wordpress"===s?o+='":"salesforce"===s&&(o+='")}),c(a).html(o)})}}function e(){0 *").length&&c(".salesforce_record_types_allowed").hide(),0===c(".salesforce_record_type_default > *").length&&c(".salesforce_record_type_default").hide(),0===c(".pull_trigger_field > *").length&&c(".pull_trigger_field").hide(),c("#salesforce_object").on("change",function(){var t=this;e(function(){var e={action:"get_salesforce_object_description",include:["fields","recordTypeInfos"],field_type:"datetime",salesforce_object:t.value};c.post(ajaxurl,e,function(e){var s="",a="",o="";0Allowed Record Types:
',c.each(e.data.recordTypeInfos,function(e,t){s+='"}),s+="
",a+='',a+='',c.each(e.data.fields,function(e,t){o+='"}),o+="",o+='

These are date fields that can cause WordPress to pull an update from Salesforce, according to the salesforce_pull class.

'),c(".pull_trigger_field").html(o),""!==s?c(".salesforce_record_types_allowed").show():c(".salesforce_record_types_allowed").hide(),""!==a?c(".salesforce_record_type_default").show():c(".salesforce_record_type_default").hide(),""!==o?c(".pull_trigger_field").show():c(".pull_trigger_field").hide(),jQuery.fn.select2&&(c("select#salesforce_record_type_default").select2(),c("select#pull_trigger_field").select2())})},1e3)})}function a(){c("#add-field-mapping").click(function(){var e=c("#salesforce_object").val(),t=c("#wordpress_object").val(),s=(new Date).getUTCMilliseconds(),a=c("table.fields tbody tr").last(),o=a.attr("data-key");return o=new RegExp(o,"g"),c(this).text("Add another field mapping"),""!==t&&""!==e?(function(s,a,e){var t="";t=jQuery.fn.select2?e.find("select").select2("destroy").end().clone(!0).removeClass("fieldmap-template"):e.clone(!0);c(t).attr("data-key",a),c(t).each(function(){c(this).html(function(e,t){return t.replace(s,a)})}),c("table.fields tbody").append(t),jQuery.fn.select2&&(e.find("select").select2(),t.find("select").select2())}(o,s,a),c(this).parent().find(".missing-object").remove()):c(this).parent().prepend('
You have to pick a WordPress object and a Salesforce object to add field mapping.
'),!1})}function o(){var e={action:"refresh_mapped_data",mapping_id:c("#mapping_id_ajax").val()};c.post(ajaxurl,e,function(e){!0===e.success&&(c("td.last_sync_message").text(e.data.last_sync_message),c("td.last_sync_action").text(e.data.last_sync_action),c("td.last_sync_status").text(e.data.last_sync_status),c("td.last_sync").text(e.data.last_sync),"1"===e.data.last_sync_status&&c("td.last_sync_status").text("success"))})}c(document).on("change","select#wordpress_object",function(){var e;t("wordpress",c(this).val()),clearTimeout(e),e=setTimeout(function(){c("table.fields tbody tr").fadeOut(),c("table.fields tbody tr").not(".fieldmap-template").remove()},1e3)}),c(document).on("change","select#salesforce_object",function(){var e;t("salesforce",c(this).val()),clearTimeout(e),e=setTimeout(function(){c("table.fields tbody tr").fadeOut(),c("table.fields tbody tr").not(".fieldmap-template").remove()},1e3)}),c(document).on("change",".object-sync-for-salesforce-enable-soap input",function(){e()}),c(document).on("click",".column-is_prematch input",function(){c(".column-is_prematch input").not(this).prop("checked",!1)}),c(document).on("click",".column-is_key input",function(){c(".column-is_key input").not(this).prop("checked",!1)}),c(document).ready(function(){e(),t("wordpress",c("select#wordpress_object").val()),t("salesforce",c("select#salesforce_object").val()),jQuery.fn.select2&&(c("select#wordpress_object").select2(),c("select#salesforce_object").select2(),c("select#salesforce_record_type_default").select2(),c("select#pull_trigger_field").select2(),c(".column-wordpress_field select").select2(),c(".column-salesforce_field select").select2()),c(document).ajaxStart(function(){c(".spinner").addClass("is-active")}).ajaxStop(function(){c(".spinner").removeClass("is-active")}),s(),a(),c(".salesforce_user_ajax_message").hide(),0This object has been pushed to Salesforce.

").fadeIn().delay(4e3).fadeOut())}),!1}),c(".pull_from_salesforce_button").on("click",function(){var e={action:"pull_from_salesforce",salesforce_id:c("#salesforce_id_ajax").val(),wordpress_object:c("#wordpress_object_ajax").val()};return c.post(ajaxurl,e,function(e){!0===e.success&&(o(),c(".salesforce_user_ajax_message").width(c(".mapped-salesforce-user").width()-27),c(".salesforce_user_ajax_message").html("

This object has been pulled from Salesforce.

").fadeIn().delay(4e3).fadeOut())}),!1}),c("#clear-sfwp-cache").click(function(){var t=c(this);return c.post(ajaxurl,{action:"clear_sfwp_cache"},function(e){!0===e.success&&!0===e.data.success&&t.parent().html(e.data.message).fadeIn()}),!1})})}(jQuery); \ No newline at end of file diff --git a/assets/js/src/admin.js b/assets/js/src/admin.js index 7e735371..529e3f6b 100644 --- a/assets/js/src/admin.js +++ b/assets/js/src/admin.js @@ -4,8 +4,12 @@ var data = { 'action' : 'get_' + system + '_object_fields', } + var selectField = '.column-' + system + '_field select'; var fields = ''; - var first_field = $( '.column-' + system + '_field select option').first().text(); + var first_field = $( selectField + ' option').first().text(); + if ( '' !== $( selectField ).val() ) { + return; + } fields += ''; if ( 'wordpress' === system ) { data['wordpress_object'] = object_name; @@ -22,7 +26,7 @@ fields += ''; } }); - $( '.column-' + system + '_field select' ).html( fields ); + $( selectField ).html( fields ); }); } From af39cb592f3d1e1e54f3cf9f8462836e9fa1a651 Mon Sep 17 00:00:00 2001 From: Jonathan Stegall Date: Sun, 5 Jan 2020 13:43:03 -0600 Subject: [PATCH 13/27] convert `post` to `ajax` so we can control the spinners individually --- assets/js/src/admin.js | 37 +++++++++++++++++++++---------------- 1 file changed, 21 insertions(+), 16 deletions(-) diff --git a/assets/js/src/admin.js b/assets/js/src/admin.js index 529e3f6b..1650478c 100644 --- a/assets/js/src/admin.js +++ b/assets/js/src/admin.js @@ -18,15 +18,27 @@ } else { return fields; } - $.post( ajaxurl, data, function( response ) { - $.each( response.data.fields, function( index, value ) { - if ( 'wordpress' === system ) { - fields += ''; - } else if ( 'salesforce' === system ) { - fields += ''; - } - }); - $( selectField ).html( fields ); + + $.ajax({ + type: 'POST', + url: ajaxurl, + data: data, + beforeSend: function() { + $( '.spinner-' + system ).addClass( 'is-active' ); + }, + success: function( response ) { + $.each( response.data.fields, function( index, value ) { + if ( 'wordpress' === system ) { + fields += ''; + } else if ( 'salesforce' === system ) { + fields += ''; + } + }); + $( selectField ).html( fields ); + }, + complete: function () { + $( '.spinner-' + system ).removeClass( 'is-active' ); + } }); } @@ -312,7 +324,6 @@ * When the plugin loads, initialize or enable things: * Select2 on select fields * Clear fields when the targeted WordPress or Salesforce object type changes - * Add a spinner for Ajax requests * Manage the display for Salesforce object fields based on API reponse * Manual push and pull * Clearing the cache @@ -335,12 +346,6 @@ $( '.column-salesforce_field select' ).select2(); } - // todo: need to fix this so it doesn't run all the spinners at the same time when there are multiples on the same page - $( document ).ajaxStart( function() { - $( '.spinner' ).addClass( 'is-active' ); - }).ajaxStop( function() { - $( '.spinner' ).removeClass( 'is-active' ); - }); salesforceObjectFields(); addFieldMappingRow(); From 000fc5467e3fca30db194b22483d95b551e3dd50 Mon Sep 17 00:00:00 2001 From: Jonathan Stegall Date: Sun, 5 Jan 2020 13:43:37 -0600 Subject: [PATCH 14/27] fix spinner markup. also cleanup comments. --- assets/js/src/admin.js | 22 ++++++++++++++------ templates/admin/fieldmaps-add-edit-clone.php | 3 ++- 2 files changed, 18 insertions(+), 7 deletions(-) diff --git a/assets/js/src/admin.js b/assets/js/src/admin.js index 1650478c..7a34c5d6 100644 --- a/assets/js/src/admin.js +++ b/assets/js/src/admin.js @@ -1,5 +1,10 @@ ( function( $ ) { + /** + * Gets the WordPress and Salesforce field results via an Ajax call + * @param string system whether we want WordPress or Salesforce data + * @param string object_name the value for the object name from the the
-
+
+ */ function loadFieldOptions(system, object_name) { var data = { 'action': 'get_' + system + '_object_fields' @@ -23,15 +28,26 @@ return fields; } - $.post(ajaxurl, data, function (response) { - $.each(response.data.fields, function (index, value) { - if ('wordpress' === system) { - fields += ''; - } else if ('salesforce' === system) { - fields += ''; - } - }); - $(selectField).html(fields); + $.ajax({ + type: 'POST', + url: ajaxurl, + data: data, + beforeSend: function beforeSend() { + $('.spinner-' + system).addClass('is-active'); + }, + success: function success(response) { + $.each(response.data.fields, function (index, value) { + if ('wordpress' === system) { + fields += ''; + } else if ('salesforce' === system) { + fields += ''; + } + }); + $(selectField).html(fields); + }, + complete: function complete() { + $('.spinner-' + system).removeClass('is-active'); + } }); } /** @@ -50,6 +66,7 @@ } /** * Generates the Salesforce object fields based on the dropdown activity and API results. + * This also generates other query fields that are object-specific, like date fields, record types allowed, etc. */ @@ -145,6 +162,7 @@ } /** * Duplicates the fields for a new row in the fieldmap options screen. + * this appears not to work with data() instead of attr() */ @@ -169,9 +187,10 @@ }); } /** - * Gets the WordPress and Salesforce field results via an Ajax call - * @param string oldKey the data-key attribute of the set that is being cloned - * @param string newKey the data-key attribute for the one we're appending + * Clones the fieldset markup provided by the server-side template and appends it at the end. + * this appears not to work with data() instead of attr() + * @param string oldKey the data key attribute of the set that is being cloned + * @param string newKey the data key attribute for the one we're appending * @param object lastRow the last set of the fieldmap */ @@ -309,7 +328,7 @@ $('table.fields tbody tr').fadeOut(); $('table.fields tbody tr').not('.fieldmap-template').remove(); }, 1000); - }); // show wsdl field if soap is enabled + }); // Don't show the WSDL file field unless SOAP is enabled $(document).on('change', '.object-sync-for-salesforce-enable-soap input', function () { toggleSoapFields(); @@ -332,18 +351,17 @@ * When the plugin loads, initialize or enable things: * Select2 on select fields * Clear fields when the targeted WordPress or Salesforce object type changes - * Add a spinner for Ajax requests * Manage the display for Salesforce object fields based on API reponse * Manual push and pull * Clearing the cache */ $(document).ready(function () { - // for main admin settings - toggleSoapFields(); // if there is already a wp or sf object, make sure it has the right fields + // Don't show the WSDL file field unless SOAP is enabled + toggleSoapFields(); // if there is already a wp or sf object, make sure it has the right fields when the page loads loadFieldOptions('wordpress', $('select#wordpress_object').val()); - loadFieldOptions('salesforce', $('select#salesforce_object').val()); + loadFieldOptions('salesforce', $('select#salesforce_object').val()); // setup the select2 fields if the library is present if (jQuery.fn.select2) { $('select#wordpress_object').select2(); @@ -352,20 +370,16 @@ $('select#pull_trigger_field').select2(); $('.column-wordpress_field select').select2(); $('.column-salesforce_field select').select2(); - } // todo: need to fix this so it doesn't run all the spinners at the same time when there are multiples on the same page + } // get the available Salesforce object choices - $(document).ajaxStart(function () { - $('.spinner').addClass('is-active'); - }).ajaxStop(function () { - $('.spinner').removeClass('is-active'); - }); - salesforceObjectFields(); - addFieldMappingRow(); // for push/pull methods running via ajax + salesforceObjectFields(); // Duplicate the fields for a new row in the fieldmap options screen. + + addFieldMappingRow(); // Handle manual push and pull of objects - pushAndPullObjects(); // for clearing the plugin cache + pushAndPullObjects(); // Clear the plugin cache via Ajax request. clearSfwpCacheLink(); }); })(jQuery); -//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFkbWluLmpzIl0sIm5hbWVzIjpbIiQiLCJsb2FkRmllbGRPcHRpb25zIiwic3lzdGVtIiwib2JqZWN0X25hbWUiLCJkYXRhIiwic2VsZWN0RmllbGQiLCJmaWVsZHMiLCJmaXJzdF9maWVsZCIsImZpcnN0IiwidGV4dCIsInZhbCIsInBvc3QiLCJhamF4dXJsIiwicmVzcG9uc2UiLCJlYWNoIiwiaW5kZXgiLCJ2YWx1ZSIsImtleSIsIm5hbWUiLCJsYWJlbCIsImh0bWwiLCJ0b2dnbGVTb2FwRmllbGRzIiwibGVuZ3RoIiwiaXMiLCJzaG93IiwiaGlkZSIsInNhbGVzZm9yY2VPYmplY3RGaWVsZHMiLCJkZWxheSIsInRpbWVyIiwiY2FsbGJhY2siLCJtcyIsImNsZWFyVGltZW91dCIsInNldFRpbWVvdXQiLCJvbiIsInRoYXQiLCJkZWxheVRpbWUiLCJyZWNvcmRUeXBlc0FsbG93ZWRNYXJrdXAiLCJyZWNvcmRUeXBlRGVmYXVsdE1hcmt1cCIsImRhdGVNYXJrdXAiLCJyZWNvcmRUeXBlSW5mb3MiLCJqUXVlcnkiLCJmbiIsInNlbGVjdDIiLCJhZGRGaWVsZE1hcHBpbmdSb3ciLCJjbGljayIsInNhbGVzZm9yY2VPYmplY3QiLCJ3b3JkcHJlc3NPYmplY3QiLCJuZXdLZXkiLCJEYXRlIiwiZ2V0VVRDTWlsbGlzZWNvbmRzIiwibGFzdFJvdyIsImxhc3QiLCJvbGRLZXkiLCJhdHRyIiwiUmVnRXhwIiwiZmllbGRtYXBGaWVsZHMiLCJwYXJlbnQiLCJmaW5kIiwicmVtb3ZlIiwicHJlcGVuZCIsIm5leHRSb3ciLCJlbmQiLCJjbG9uZSIsInJlbW92ZUNsYXNzIiwiaSIsImgiLCJyZXBsYWNlIiwiYXBwZW5kIiwicHVzaEFuZFB1bGxPYmplY3RzIiwid29yZHByZXNzSWQiLCJzYWxlc2ZvcmNlSWQiLCJzdWNjZXNzIiwidXBkYXRlU2FsZXNmb3JjZVVzZXJTdW1tYXJ5Iiwid2lkdGgiLCJmYWRlSW4iLCJmYWRlT3V0IiwibWFwcGluZ0lkIiwibGFzdF9zeW5jX21lc3NhZ2UiLCJsYXN0X3N5bmNfYWN0aW9uIiwibGFzdF9zeW5jX3N0YXR1cyIsImxhc3Rfc3luYyIsImNsZWFyU2Z3cENhY2hlTGluayIsIm1lc3NhZ2UiLCJkb2N1bWVudCIsInRpbWVvdXQiLCJub3QiLCJwcm9wIiwicmVhZHkiLCJhamF4U3RhcnQiLCJhZGRDbGFzcyIsImFqYXhTdG9wIl0sIm1hcHBpbmdzIjoiOztBQUFFLFdBQVVBLENBQVYsRUFBYztBQUVmLFdBQVNDLGdCQUFULENBQTJCQyxNQUEzQixFQUFtQ0MsV0FBbkMsRUFBaUQ7QUFDaEQsUUFBSUMsSUFBSSxHQUFHO0FBQ1YsZ0JBQVcsU0FBU0YsTUFBVCxHQUFrQjtBQURuQixLQUFYO0FBR0EsUUFBSUcsV0FBVyxHQUFHLGFBQWFILE1BQWIsR0FBc0IsZUFBeEM7QUFDQSxRQUFJSSxNQUFNLEdBQUcsRUFBYjtBQUNBLFFBQUlDLFdBQVcsR0FBR1AsQ0FBQyxDQUFFSyxXQUFXLEdBQUcsU0FBaEIsQ0FBRCxDQUE0QkcsS0FBNUIsR0FBb0NDLElBQXBDLEVBQWxCOztBQUNBLFFBQUssT0FBT1QsQ0FBQyxDQUFFSyxXQUFGLENBQUQsQ0FBaUJLLEdBQWpCLEVBQVosRUFBcUM7QUFDcEM7QUFDQTs7QUFDREosSUFBQUEsTUFBTSxJQUFJLHNCQUFzQkMsV0FBdEIsR0FBb0MsV0FBOUM7O0FBQ0EsUUFBSyxnQkFBZ0JMLE1BQXJCLEVBQThCO0FBQzdCRSxNQUFBQSxJQUFJLENBQUMsa0JBQUQsQ0FBSixHQUEyQkQsV0FBM0I7QUFDQSxLQUZELE1BRU8sSUFBSyxpQkFBaUJELE1BQXRCLEVBQStCO0FBQ3JDRSxNQUFBQSxJQUFJLENBQUMsbUJBQUQsQ0FBSixHQUE0QkQsV0FBNUI7QUFDQSxLQUZNLE1BRUE7QUFDTixhQUFPRyxNQUFQO0FBQ0E7O0FBQ0ROLElBQUFBLENBQUMsQ0FBQ1csSUFBRixDQUFRQyxPQUFSLEVBQWlCUixJQUFqQixFQUF1QixVQUFVUyxRQUFWLEVBQXFCO0FBQzNDYixNQUFBQSxDQUFDLENBQUNjLElBQUYsQ0FB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Q0FBRCxDQUFnQzBDLE9BQWhDO0FBQ0ExQyxNQUFBQSxDQUFDLENBQUUsdUNBQUYsQ0FBRCxDQUE2QzBDLE9BQTdDO0FBQ0ExQyxNQUFBQSxDQUFDLENBQUUsMkJBQUYsQ0FBRCxDQUFpQzBDLE9BQWpDO0FBQ0ExQyxNQUFBQSxDQUFDLENBQUUsZ0NBQUYsQ0FBRCxDQUFzQzBDLE9BQXRDO0FBQ0ExQyxNQUFBQSxDQUFDLENBQUUsaUNBQUYsQ0FBRCxDQUF1QzBDLE9BQXZDO0FBQ0EsS0FoQjhCLENBa0IvQjs7O0FBQ0ExQyxJQUFBQSxDQUFDLENBQUVtRixRQUFGLENBQUQsQ0FBY0ssU0FBZCxDQUF5QixZQUFXO0FBQ25DeEYsTUFBQUEsQ0FBQyxDQUFFLFVBQUYsQ0FBRCxDQUFnQnlGLFFBQWhCLENBQTBCLFdBQTFCO0FBQ0EsS0FGRCxFQUVHQyxRQUZILENBRWEsWUFBVztBQUN2QjFGLE1BQUFBLENBQUMsQ0FBRSxVQUFGLENBQUQsQ0FBZ0IrRCxXQUFoQixDQUE2QixXQUE3QjtBQUNBLEtBSkQ7QUFLQXJDLElBQUFBLHNCQUFzQjtBQUN0QmlCLElBQUFBLGtCQUFrQixHQXpCYSxDQTJCL0I7O0FBQ0F5QixJQUFBQSxrQkFBa0IsR0E1QmEsQ0E4Qi9COztBQUNBYSxJQUFBQSxrQkFBa0I7QUFDbEIsR0FoQ0Q7QUFpQ0EsQ0FoV0MsRUFnV0N6QyxNQWhXRCxDQUFGIiwiZmlsZSI6Im9iamVjdC1zeW5jLWZvci1zYWxlc2ZvcmNlLWFkbWluLmpzIiwic291cmNlc0NvbnRlbnQiOlsiKCBmdW5jdGlvbiggJCApIHtcblxuXHRmdW5jdGlvbiBsb2FkRmllbGRPcHRpb25zKCBzeXN0ZW0sIG9iamVjdF9uYW1lICkge1xuXHRcdHZhciBkYXRhID0ge1xuXHRcdFx0J2FjdGlvbicgOiAnZ2V0XycgKyBzeXN0ZW0gKyAnX29iamVjdF9maWVsZHMnLFxuXHRcdH1cblx0XHR2YXIgc2VsZWN0RmllbGQgPSAnLmNvbHVtbi0nICsgc3lzdGVtICsgJ19maWVsZCBzZWxlY3QnO1xuXHRcdHZhciBmaWVsZHMgPSAnJztcblx0XHR2YXIgZmlyc3RfZmllbGQgPSAkKCBzZWxlY3RGaWVsZCArICcgb3B0aW9uJykuZmlyc3QoKS50ZXh0KCk7XG5cdFx0aWYgKCAnJyAhPT0gJCggc2VsZWN0RmllbGQgKS52YWwoKSApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0ZmllbGRzICs9ICc8b3B0aW9uIHZhbHVlPVwiXCI+JyArIGZpcnN0X2ZpZWxkICsgJzwvb3B0aW9uPic7XG5cdFx0aWYgKCAnd29yZHByZXNzJyA9PT0gc3lzdGVtICkge1xuXHRcdFx0ZGF0YVsnd29yZHByZXNzX29iamVjdCddID0gb2JqZWN0X25hbWU7XG5cdFx0fSBlbHNlIGlmICggJ3NhbGVzZm9yY2UnID09PSBzeXN0ZW0gKSB7XG5cdFx0XHRkYXRhWydzYWxlc2ZvcmNlX29iamVjdCddID0gb2JqZWN0X25hbWU7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiBmaWVsZHM7XG5cdFx0fVxuXHRcdCQucG9zdCggYWpheHVybCwgZGF0YSwgZnVuY3Rpb24oIHJlc3BvbnNlICkge1xuXHRcdFx0JC5lYWNoKCByZXNwb25zZS5kYXRhLmZpZWxkcywgZnVuY3Rpb24oIGluZGV4LCB2YWx1ZSApIHtcblx0XHRcdFx0aWYgKCAnd29yZHByZXNzJyA9PT0gc3lzdGVtICkge1xuXHRcdFx0XHRcdGZpZWxkcyArPSAnPG9wdGlvbiB2YWx1ZT1cIicgKyB2YWx1ZS5rZXkgKyAnXCI+JyArIHZhbHVlLmtleSArICc8L29wdGlvbj4nO1xuXHRcdFx0XHR9IGVsc2UgaWYgKCAnc2FsZXNmb3JjZScgPT09IHN5c3RlbSApIHtcblx0XHRcdFx0XHRmaWVsZHMgKz0gJzxvcHRpb24gdmFsdWU9XCInICsgdmFsdWUubmFtZSArICdcIj4nICsgdmFsdWUubGFiZWwgKyAnPC9vcHRpb24+Jztcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0XHQkKCBzZWxlY3RGaWVsZCApLmh0bWwoIGZpZWxkcyApO1xuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIERvbid0IHNob3cgdGhlIFdTREwgZmlsZSBmaWVsZCB1bmxlc3MgU09BUCBpcyBlbmFibGVkXG5cdCAqL1xuXHRmdW5jdGlvbiB0b2dnbGVTb2FwRmllbGRzKCkge1xuXHRcdGlmICggMCA8ICQoICcub2JqZWN0LXN5bmMtZm9yLXNhbGVzZm9yY2UtZW5hYmxlLXNvYXAnICkubGVuZ3RoICkge1xuXHRcdFx0aWYgKCAkKCAnLm9iamVjdC1zeW5jLWZvci1zYWxlc2ZvcmNlLWVuYWJsZS1zb2FwIGlucHV0JyApLmlzKCAnOmNoZWNrZWQnICkgKSB7XG5cdFx0XHRcdCQoICcub2JqZWN0LXN5bmMtZm9yLXNhbGVzZm9yY2Utc29hcC13c2RsLXBhdGgnICkuc2hvdygpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0JCggJy5vYmplY3Qtc3luYy1mb3Itc2FsZXNmb3JjZS1zb2FwLXdzZGwtcGF0aCcgKS5oaWRlKCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEdlbmVyYXRlcyB0aGUgU2FsZXNmb3JjZSBvYmplY3QgZmllbGRzIGJhc2VkIG9uIHRoZSBkcm9wZG93biBhY3Rpdml0eSBhbmQgQVBJIHJlc3VsdHMuXG5cdCAqL1xuXHRmdW5jdGlvbiBzYWxlc2ZvcmNlT2JqZWN0RmllbGRzKCkge1xuXG5cdFx0dmFyIGRlbGF5ID0gKCBmdW5jdGlvbigpIHtcblx0XHRcdHZhciB0aW1lciA9IDA7XG5cdFx0XHRyZXR1cm4gZnVuY3Rpb24oIGNhbGxiYWNrLCBtcyApIHtcblx0XHRcdFx0Y2xlYXJUaW1lb3V0ICggdGltZXIgKTtcblx0XHRcdFx0dGltZXIgPSBzZXRUaW1lb3V0KCBjYWxsYmFjaywgbXMgKTtcblx0XHRcdH07XG5cdFx0fSgpICk7XG5cblx0XHRpZiAoIDAgPT09ICQoICcuc2FsZXNmb3JjZV9yZWNvcmRfdHlwZXNfYWxsb3dlZCA+IConICkubGVuZ3RoICkge1xuXHRcdFx0JCggJy5zYWxlc2ZvcmNlX3JlY29yZF90eXBlc19hbGxvd2VkJyApLmhpZGUoKTtcblx0XHR9XG5cblx0XHRpZiAoIDAgPT09ICQoICcuc2FsZXNmb3JjZV9yZWNvcmRfdHlwZV9kZWZhdWx0ID4gKicgKS5sZW5ndGggKSB7XG5cdFx0XHQkKCAnLnNhbGVzZm9yY2VfcmVjb3JkX3R5cGVfZGVmYXVsdCcgKS5oaWRlKCk7XG5cdFx0fVxuXHRcdGlmICggMCA9PT0gJCggJy5wdWxsX3RyaWdnZXJfZmllbGQgPiAqJyApLmxlbmd0aCApIHtcblx0XHRcdCQoICcucHVsbF90cmlnZ2VyX2ZpZWxkJyApLmhpZGUoKTtcblx0XHR9XG5cblx0XHQkKCAnI3NhbGVzZm9yY2Vfb2JqZWN0JyApLm9uKCAnY2hhbmdlJywgZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgdGhhdCA9IHRoaXM7XG5cdFx0XHR2YXIgZGVsYXlUaW1lID0gMTAwMDtcblx0XHRcdGRlbGF5KCBmdW5jdGlvbigpIHtcblx0XHRcdFx0dmFyIGRhdGEgPSB7XG5cdFx0XHRcdFx0J2FjdGlvbicgOiAnZ2V0X3NhbGVzZm9yY2Vfb2JqZWN0X2Rlc2NyaXB0aW9uJyxcblx0XHRcdFx0XHQnaW5jbHVkZScgOiBbICdmaWVsZHMnLCAncmVjb3JkVHlwZUluZm9zJyBdLFxuXHRcdFx0XHRcdCdmaWVsZF90eXBlJyA6ICdkYXRldGltZScsXG5cdFx0XHRcdFx0J3NhbGVzZm9yY2Vfb2JqZWN0JyA6IHRoYXQudmFsdWVcblx0XHRcdFx0fVxuXHRcdFx0XHQkLnBvc3QoIGFqYXh1cmwsIGRhdGEsIGZ1bmN0aW9uKCByZXNwb25zZSApIHtcblxuXHRcdFx0XHRcdHZhciByZWNvcmRUeXBlc0FsbG93ZWRNYXJrdXAgPSAnJywgcmVjb3JkVHlwZURlZmF1bHRNYXJrdXAgPSAnJywgZGF0ZU1hcmt1cCA9ICcnO1xuXG5cdFx0XHRcdFx0aWYgKCAwIDwgJCggcmVzcG9uc2UuZGF0YS5yZWNvcmRUeXBlSW5mb3MgKS5sZW5ndGggKSB7XG5cdFx0XHRcdFx0XHRyZWNvcmRUeXBlc0FsbG93ZWRNYXJrdXAgKz0gJzxsYWJlbCBmb3I9XCJzYWxlc2ZvcmNlX3JlY29yZF90eXBlc19hbGxvd2VkXCI+QWxsb3dlZCBSZWNvcmQgVHlwZXM6PC9sYWJlbD48ZGl2IGNsYXNzPVwiY2hlY2tib3hlc1wiPic7XG5cdFx0XHRcdFx0XHQkLmVhY2goIHJlc3BvbnNlLmRhdGEucmVjb3JkVHlwZUluZm9zLCBmdW5jdGlvbiggaW5kZXgsIHZhbHVlICkge1xuXHRcdFx0XHRcdFx0XHRyZWNvcmRUeXBlc0FsbG93ZWRNYXJrdXAgKz0gJzxsYWJlbD48aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgY2xhc3M9XCJmb3JtLWNoZWNrYm94XCIgdmFsdWU9XCInICsgaW5kZXggKyAnXCIgbmFtZT1cInNhbGVzZm9yY2VfcmVjb3JkX3R5cGVzX2FsbG93ZWRbJyArIGluZGV4ICsgJ11cIiBpZD1cInNhbGVzZm9yY2VfcmVjb3JkX3R5cGVzX2FsbG93ZWQtJyArIGluZGV4ICsgJ1wiPiAnICsgdmFsdWUgKyAnPC9sYWJlbD4nO1xuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRyZWNvcmRUeXBlc0FsbG93ZWRNYXJrdXAgKz0gJzwvZGl2Pic7XG5cblxuXHRcdFx0XHRcdFx0cmVjb3JkVHlwZURlZmF1bHRNYXJrdXAgKz0gJzxsYWJlbCBmb3I9XCJzYWxlc2ZvcmNlX3JlY29yZF90eXBlX2RlZmF1bHRcIj5EZWZhdWx0IFJlY29yZCBUeXBlOjwvbGFiZWw+Jztcblx0XHRcdFx0XHRcdHJlY29yZFR5cGVEZWZhdWx0TWFya3VwICs9ICc8c2VsZWN0IG5hbWU9XCJzYWxlc2ZvcmNlX3JlY29yZF90eXBlX2RlZmF1bHRcIiBpZD1cInNhbGVzZm9yY2VfcmVjb3JkX3R5cGVfZGVmYXVsdFwiPjxvcHRpb24gdmFsdWU9XCJcIj4tIFNlbGVjdCByZWNvcmQgdHlwZSAtPC9vcHRpb24+Jztcblx0XHRcdFx0XHRcdCQuZWFjaCggcmVzcG9uc2UuZGF0YS5yZWNvcmRUeXBlSW5mb3MsIGZ1bmN0aW9uKCBpbmRleCwgdmFsdWUgKSB7XG5cdFx0XHRcdFx0XHRcdHJlY29yZFR5cGVEZWZhdWx0TWFya3VwICs9ICc8b3B0aW9uIHZhbHVlPVwiJyArIGluZGV4ICsgJ1wiPicgKyB2YWx1ZSArICc8L29wdGlvbj4nO1xuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0JCggJy5zYWxlc2ZvcmNlX3JlY29yZF90eXBlc19hbGxvd2VkJyApLmh0bWwoIHJlY29yZFR5cGVzQWxsb3dlZE1hcmt1cCApO1xuXHRcdFx0XHRcdCQoICcuc2FsZXNmb3JjZV9yZWNvcmRfdHlwZV9kZWZhdWx0JyApLmh0bWwoIHJlY29yZFR5cGVEZWZhdWx0TWFya3VwICk7XG5cblx0XHRcdFx0XHRpZiAoIDAgPCAkKCByZXNwb25zZS5kYXRhLmZpZWxkcyApLmxlbmd0aCApIHtcblx0XHRcdFx0XHRcdGRhdGVNYXJrdXAgKz0gJzxsYWJlbCBmb3I9XCJwdWxsX3RyaWdnZXJfZmllbGRcIj5EYXRlIGZpZWxkIHRvIHRyaWdnZXIgcHVsbDo8L2xhYmVsPic7XG5cdFx0XHRcdFx0XHRkYXRlTWFya3VwICs9ICc8c2VsZWN0IG5hbWU9XCJwdWxsX3RyaWdnZXJfZmllbGRcIiBpZD1cInB1bGxfdHJpZ2dlcl9maWVsZFwiPjxvcHRpb24gdmFsdWU9XCJcIj4tIFNlbGVjdCBkYXRlIGZpZWxkIC08L29wdGlvbj4nXG5cdFx0XHRcdFx0XHQkLmVhY2goIHJlc3BvbnNlLmRhdGEuZmllbGRzLCBmdW5jdGlvbiggaW5kZXgsIHZhbHVlICkge1xuXHRcdFx0XHRcdFx0XHRkYXRlTWFya3VwICs9ICc8b3B0aW9uIHZhbHVlPVwiJyArIHZhbHVlLm5hbWUgKyAnXCI+JyArIHZhbHVlLmxhYmVsICsgJzwvb3B0aW9uPic7XG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdGRhdGVNYXJrdXAgKz0gJzwvc2VsZWN0Pic7XG5cdFx0XHRcdFx0XHRkYXRlTWFya3VwICs9ICc8cCBjbGFzcz1cImRlc2NyaXB0aW9uXCI+VGhlc2UgYXJlIGRhdGUgZmllbGRzIHRoYXQgY2FuIGNhdXNlIFdvcmRQcmVzcyB0byBwdWxsIGFuIHVwZGF0ZSBmcm9tIFNhbGVzZm9yY2UsIGFjY29yZGluZyB0byB0aGUgPGNvZGU+c2FsZXNmb3JjZV9wdWxsPC9jb2RlPiBjbGFzcy48L3A+J1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdCQoICcucHVsbF90cmlnZ2VyX2ZpZWxkJyApLmh0bWwoIGRhdGVNYXJrdXAgKTtcblxuXHRcdFx0XHRcdGlmICggJycgIT09IHJlY29yZFR5cGVzQWxsb3dlZE1hcmt1cCApIHtcblx0XHRcdFx0XHRcdCQoICcuc2FsZXNmb3JjZV9yZWNvcmRfdHlwZXNfYWxsb3dlZCcgKS5zaG93KCk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdCQoICcuc2FsZXNmb3JjZV9yZWNvcmRfdHlwZXNfYWxsb3dlZCcgKS5oaWRlKCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGlmICggJycgIT09IHJlY29yZFR5cGVEZWZhdWx0TWFya3VwICkge1xuXHRcdFx0XHRcdFx0JCggJy5zYWxlc2ZvcmNlX3JlY29yZF90eXBlX2RlZmF1bHQnICkuc2hvdygpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHQkKCAnLnNhbGVzZm9yY2VfcmVjb3JkX3R5cGVfZGVmYXVsdCcgKS5oaWRlKCk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aWYgKCAnJyAhPT0gZGF0ZU1hcmt1cCApIHtcblx0XHRcdFx0XHRcdCQoICcucHVsbF90cmlnZ2VyX2ZpZWxkJyApLnNob3coKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0JCggJy5wdWxsX3RyaWdnZXJfZmllbGQnICkuaGlkZSgpO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGlmICggalF1ZXJ5LmZuLnNlbGVjdDIgKSB7XG5cdFx0XHRcdFx0XHQkKCAnc2VsZWN0I3NhbGVzZm9yY2VfcmVjb3JkX3R5cGVfZGVmYXVsdCcgKS5zZWxlY3QyKCk7XG5cdFx0XHRcdFx0XHQkKCAnc2VsZWN0I3B1bGxfdHJpZ2dlcl9maWVsZCcgKS5zZWxlY3QyKCk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdH0pO1xuXHRcdFx0fSwgZGVsYXlUaW1lICk7XG5cdFx0fSk7XG5cdH1cblx0LyoqXG5cdCAqIER1cGxpY2F0ZXMgdGhlIGZpZWxkcyBmb3IgYSBuZXcgcm93IGluIHRoZSBmaWVsZG1hcCBvcHRpb25zIHNjcmVlbi5cblx0ICovXG5cdCBmdW5jdGlvbiBhZGRGaWVsZE1hcHBpbmdSb3coKSB7XG5cdFx0JCggJyNhZGQtZmllbGQtbWFwcGluZycgKS5jbGljayggZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgc2FsZXNmb3JjZU9iamVjdCA9ICQoICcjc2FsZXNmb3JjZV9vYmplY3QnICkudmFsKCk7XG5cdFx0XHR2YXIgd29yZHByZXNzT2JqZWN0ID0gJCggJyN3b3JkcHJlc3Nfb2JqZWN0JyApLnZhbCgpO1xuXHRcdFx0dmFyIG5ld0tleSA9IG5ldyBEYXRlKCkuZ2V0VVRDTWlsbGlzZWNvbmRzKCk7XG5cdFx0XHR2YXIgbGFzdFJvdyA9ICQoICd0YWJsZS5maWVsZHMgdGJvZHkgdHInICkubGFzdCgpO1xuXHRcdFx0dmFyIG9sZEtleSA9IGxhc3RSb3cuYXR0ciggJ2RhdGEta2V5JyApO1xuXHRcdFx0b2xkS2V5ID0gbmV3IFJlZ0V4cCggb2xkS2V5LCAnZycgKTtcblx0XHRcdCQoIHRoaXMgKS50ZXh0KCAnQWRkIGFub3RoZXIgZmllbGQgbWFwcGluZycgKTtcblx0XHRcdGlmICggJycgIT09IHdvcmRwcmVzc09iamVjdCAmJiAnJyAhPT0gc2FsZXNmb3JjZU9iamVjdCApIHtcblx0XHRcdFx0ZmllbGRtYXBGaWVsZHMoIG9sZEtleSwgbmV3S2V5LCBsYXN0Um93ICk7XG5cdFx0XHRcdCQoIHRoaXMgKS5wYXJlbnQoKS5maW5kKCAnLm1pc3Npbmctb2JqZWN0JyApLnJlbW92ZSgpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0JCggdGhpcyApLnBhcmVudCgpLnByZXBlbmQoICc8ZGl2IGNsYXNzPVwiZXJyb3IgbWlzc2luZy1vYmplY3RcIj48c3Bhbj5Zb3UgaGF2ZSB0byBwaWNrIGEgV29yZFByZXNzIG9iamVjdCBhbmQgYSBTYWxlc2ZvcmNlIG9iamVjdCB0byBhZGQgZmllbGQgbWFwcGluZy48L3NwYW4+PC9kaXY+JyApO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH0pO1xuXHR9XG5cdC8qKlxuXHQgKiBHZXRzIHRoZSBXb3JkUHJlc3MgYW5kIFNhbGVzZm9yY2UgZmllbGQgcmVzdWx0cyB2aWEgYW4gQWpheCBjYWxsXG5cdCAqIEBwYXJhbSBzdHJpbmcgb2xkS2V5IHRoZSBkYXRhLWtleSBhdHRyaWJ1dGUgb2YgdGhlIHNldCB0aGF0IGlzIGJlaW5nIGNsb25lZFxuXHQgKiBAcGFyYW0gc3RyaW5nIG5ld0tleSB0aGUgZGF0YS1rZXkgYXR0cmlidXRlIGZvciB0aGUgb25lIHdlJ3JlIGFwcGVuZGluZ1xuXHQgKiBAcGFyYW0gb2JqZWN0IGxhc3RSb3cgdGhlIGxhc3Qgc2V0IG9mIHRoZSBmaWVsZG1hcFxuXHQgKi9cblx0ZnVuY3Rpb24gZmllbGRtYXBGaWVsZHMoIG9sZEtleSwgbmV3S2V5LCBsYXN0Um93ICkge1xuXHRcdHZhciBuZXh0Um93ID0gJyc7XG4gICAgICAgIGlmICggalF1ZXJ5LmZuLnNlbGVjdDIgKSB7XG4gICAgICAgIFx0bmV4dFJvdyA9IGxhc3RSb3cuZmluZCggJ3NlbGVjdCcgKVxuXHQgICAgICAgICAgICAuc2VsZWN0MiggJ2Rlc3Ryb3knIClcblx0ICAgICAgICAgICAgLmVuZCgpXG5cdCAgICAgICAgICAgIC5jbG9uZSggdHJ1ZSApLnJlbW92ZUNsYXNzKCAnZmllbGRtYXAtdGVtcGxhdGUnICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgIFx0bmV4dFJvdyA9IGxhc3RSb3cuY2xvbmUoIHRydWUgKTtcbiAgICAgICAgfVxuXHRcdCQoIG5leHRSb3cgKS5hdHRyKCAnZGF0YS1rZXknLCBuZXdLZXkgKTtcblx0XHQkKCBuZXh0Um93ICkuZWFjaChmdW5jdGlvbigpIHtcblx0XHRcdCQoIHRoaXMgKS5odG1sKCBmdW5jdGlvbiggaSwgaCApIHtcblx0XHRcdFx0cmV0dXJuIGgucmVwbGFjZSggb2xkS2V5LCBuZXdLZXkgKTtcblx0XHRcdH0pO1xuXHRcdH0pO1xuXHRcdCQoICd0YWJsZS5maWVsZHMgdGJvZHknICkuYXBwZW5kKCBuZXh0Um93ICk7XG5cdFx0aWYgKCBqUXVlcnkuZm4uc2VsZWN0MiApIHtcblx0XHRcdGxhc3RSb3cuZmluZCggJ3NlbGVjdCcgKS5zZWxlY3QyKCk7XG5cdFx0XHRuZXh0Um93LmZpbmQoICdzZWxlY3QnICkuc2VsZWN0MigpO1xuXHRcdH1cblx0fVxuXHQvKipcblx0ICogSGFuZGxlIG1hbnVhbCBwdXNoIGFuZCBwdWxsIG9mIG9iamVjdHNcblx0ICovXG5cdGZ1bmN0aW9uIHB1c2hBbmRQdWxsT2JqZWN0cygpIHtcblx0XHQkKCAnLnNhbGVzZm9yY2VfdXNlcl9hamF4X21lc3NhZ2UnICkuaGlkZSgpO1xuXHRcdGlmICggMCA8ICQoICcjd29yZHByZXNzX29iamVjdF9hamF4JyApLmxlbmd0aCApIHtcblx0XHRcdCQoICcucHVzaF90b19zYWxlc2ZvcmNlX2J1dHRvbicgKS5vbiggJ2NsaWNrJywgZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHZhciB3b3JkcHJlc3NPYmplY3QgPSAkKCAnI3dvcmRwcmVzc19vYmplY3RfYWpheCcgKS52YWwoKTtcblx0XHRcdFx0dmFyIHdvcmRwcmVzc0lkID0gJCggJyN3b3JkcHJlc3NfaWRfYWpheCcgKS52YWwoKTtcblx0XHRcdFx0dmFyIHNhbGVzZm9yY2VJZCA9ICQoICcjc2FsZXNmb3JjZV9pZF9hamF4JyApLnZhbCgpO1xuXHRcdFx0XHR2YXIgZGF0YSA9IHtcblx0XHRcdFx0XHQnYWN0aW9uJyA6ICdwdXNoX3RvX3NhbGVzZm9yY2UnLFxuXHRcdFx0XHRcdCd3b3JkcHJlc3Nfb2JqZWN0JyA6IHdvcmRwcmVzc09iamVjdCxcblx0XHRcdFx0XHQnd29yZHByZXNzX2lkJyA6IHdvcmRwcmVzc0lkLFxuXHRcdFx0XHRcdCdzYWxlc2ZvcmNlX2lkJyA6IHNhbGVzZm9yY2VJZFxuXHRcdFx0XHR9XG5cdFx0XHRcdCQucG9zdCggYWpheHVybCwgZGF0YSwgZnVuY3Rpb24oIHJlc3BvbnNlICkge1xuXHRcdFx0XHRcdGlmICggdHJ1ZSA9PT0gcmVzcG9uc2Uuc3VjY2VzcyApIHtcblx0XHRcdFx0XHRcdHVwZGF0ZVNhbGVzZm9yY2VVc2VyU3VtbWFyeSgpO1xuXHRcdFx0XHRcdFx0JCggJy5zYWxlc2ZvcmNlX3VzZXJfYWpheF9tZXNzYWdlJyApLndpZHRoKCAkKCAnLm1hcHBlZC1zYWxlc2ZvcmNlLXVzZXInICkud2lkdGgoKSAtIDI3ICk7XG5cdFx0XHRcdFx0XHQkKCAnLnNhbGVzZm9yY2VfdXNlcl9hamF4X21lc3NhZ2UnICkuaHRtbCggJzxwPlRoaXMgb2JqZWN0IGhhcyBiZWVuIHB1c2hlZCB0byBTYWxlc2ZvcmNlLjwvcD4nICkuZmFkZUluKCkuZGVsYXkoIDQwMDAgKS5mYWRlT3V0KCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdCQoICcucHVsbF9mcm9tX3NhbGVzZm9yY2VfYnV0dG9uJyApLm9uKCAnY2xpY2snLCBmdW5jdGlvbigpIHtcblx0XHRcdHZhciBzYWxlc2ZvcmNlSWQgPSAkKCAnI3NhbGVzZm9yY2VfaWRfYWpheCcgKS52YWwoKTtcblx0XHRcdHZhciB3b3JkcHJlc3NPYmplY3QgPSAkKCAnI3dvcmRwcmVzc19vYmplY3RfYWpheCcgKS52YWwoKTtcblx0XHRcdHZhciBkYXRhID0ge1xuXHRcdFx0XHQnYWN0aW9uJyA6ICdwdWxsX2Zyb21fc2FsZXNmb3JjZScsXG5cdFx0XHRcdCdzYWxlc2ZvcmNlX2lkJyA6IHNhbGVzZm9yY2VJZCxcblx0XHRcdFx0J3dvcmRwcmVzc19vYmplY3QnIDogd29yZHByZXNzT2JqZWN0XG5cdFx0XHR9XG5cdFx0XHQkLnBvc3QoIGFqYXh1cmwsIGRhdGEsIGZ1bmN0aW9uKCByZXNwb25zZSApIHtcblx0XHRcdFx0aWYgKCB0cnVlID09PSByZXNwb25zZS5zdWNjZXNzICkge1xuXHRcdFx0XHRcdHVwZGF0ZVNhbGVzZm9yY2VVc2VyU3VtbWFyeSgpO1xuXHRcdFx0XHRcdCQoICcuc2FsZXNmb3JjZV91c2VyX2FqYXhfbWVzc2FnZScgKS53aWR0aCggJCggJy5tYXBwZWQtc2FsZXNmb3JjZS11c2VyJyApLndpZHRoKCkgLSAyNyApO1xuXHRcdFx0XHRcdCQoICcuc2FsZXNmb3JjZV91c2VyX2FqYXhfbWVzc2FnZScgKS5odG1sKCAnPHA+VGhpcyBvYmplY3QgaGFzIGJlZW4gcHVsbGVkIGZyb20gU2FsZXNmb3JjZS48L3A+JyApLmZhZGVJbigpLmRlbGF5KCA0MDAwICkuZmFkZU91dCgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9KTtcblx0fVxuXHQvKipcblx0ICogVXBkYXRlcyB0aGUgdXNlciBwcm9maWxlIHN1bW1hcnkgb2YgU2FsZXNmb3JjZSBpbmZvLlxuXHQgKi9cblx0ZnVuY3Rpb24gdXBkYXRlU2FsZXNmb3JjZVVzZXJTdW1tYXJ5KCkge1xuXHRcdHZhciBtYXBwaW5nSWQgPSAkKCAnI21hcHBpbmdfaWRfYWpheCcgKS52YWwoKTtcblx0XHR2YXIgZGF0YSA9IHtcblx0XHRcdCdhY3Rpb24nIDogJ3JlZnJlc2hfbWFwcGVkX2RhdGEnLFxuXHRcdFx0J21hcHBpbmdfaWQnIDogbWFwcGluZ0lkXG5cdFx0fVxuXHRcdCQucG9zdCggYWpheHVybCwgZGF0YSwgZnVuY3Rpb24oIHJlc3BvbnNlICkge1xuXHRcdFx0aWYgKCB0cnVlID09PSByZXNwb25zZS5zdWNjZXNzICkge1xuXHRcdFx0XHQkKCAndGQubGFzdF9zeW5jX21lc3NhZ2UnICkudGV4dCggcmVzcG9uc2UuZGF0YS5sYXN0X3N5bmNfbWVzc2FnZSApO1xuXHRcdFx0XHQkKCAndGQubGFzdF9zeW5jX2FjdGlvbicgKS50ZXh0KCByZXNwb25zZS5kYXRhLmxhc3Rfc3luY19hY3Rpb24gKTtcblx0XHRcdFx0JCggJ3RkLmxhc3Rfc3luY19zdGF0dXMnICkudGV4dCggcmVzcG9uc2UuZGF0YS5sYXN0X3N5bmNfc3RhdHVzICk7XG5cdFx0XHRcdCQoICd0ZC5sYXN0X3N5bmMnICkudGV4dCggcmVzcG9uc2UuZGF0YS5sYXN0X3N5bmMgKTtcblx0XHRcdFx0aWYgKCAnMScgPT09IHJlc3BvbnNlLmRhdGEubGFzdF9zeW5jX3N0YXR1cyApIHtcblx0XHRcdFx0XHQkKCAndGQubGFzdF9zeW5jX3N0YXR1cycgKS50ZXh0KCAnc3VjY2VzcycgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cdC8qKlxuXHQgKiBDbGVhciB0aGUgcGx1Z2luIGNhY2hlIHZpYSBBamF4IHJlcXVlc3QuXG5cdCAqL1xuXHRmdW5jdGlvbiBjbGVhclNmd3BDYWNoZUxpbmsoKSB7XG5cdFx0JCggJyNjbGVhci1zZndwLWNhY2hlJyApLmNsaWNrKCBmdW5jdGlvbigpIHtcblx0XHRcdHZhciBkYXRhID0ge1xuXHRcdFx0XHQnYWN0aW9uJyA6ICdjbGVhcl9zZndwX2NhY2hlJ1xuXHRcdFx0fVxuXHRcdFx0dmFyIHRoYXQgPSAkKCB0aGlzICk7XG5cdFx0XHQkLnBvc3QoIGFqYXh1cmwsIGRhdGEsIGZ1bmN0aW9uKCByZXNwb25zZSApIHtcblx0XHRcdFx0aWYgKCB0cnVlID09PSByZXNwb25zZS5zdWNjZXNzICYmIHRydWUgPT09IHJlc3BvbnNlLmRhdGEuc3VjY2VzcyApIHtcblx0XHRcdFx0XHR0aGF0LnBhcmVudCgpLmh0bWwoIHJlc3BvbnNlLmRhdGEubWVzc2FnZSApLmZhZGVJbigpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9KTtcblx0fVxuXG5cdC8vIGxvYWQgYXZhaWxhYmxlIG9wdGlvbnMgaWYgdGhlIHdvcmRwcmVzcyBvYmplY3QgY2hhbmdlc1xuXHQkKCBkb2N1bWVudCApLm9uKCAnY2hhbmdlJywgJ3NlbGVjdCN3b3JkcHJlc3Nfb2JqZWN0JywgZnVuY3Rpb24oKSB7XG5cdFx0dmFyIHRpbWVvdXQ7XG5cdFx0bG9hZEZpZWxkT3B0aW9ucyggJ3dvcmRwcmVzcycsICQoIHRoaXMgKS52YWwoKSApO1xuXHRcdGNsZWFyVGltZW91dCggdGltZW91dCApO1xuXHRcdHRpbWVvdXQgPSBzZXRUaW1lb3V0KCBmdW5jdGlvbigpIHtcblx0XHRcdCQoICd0YWJsZS5maWVsZHMgdGJvZHkgdHInICkuZmFkZU91dCgpO1xuXHRcdFx0JCggJ3RhYmxlLmZpZWxkcyB0Ym9keSB0cicgKS5ub3QoICcuZmllbGRtYXAtdGVtcGxhdGUnICkucmVtb3ZlKCk7XG5cdFx0fSwgMTAwMCApO1xuXHR9KTtcblxuXHQvLyBsb2FkIGF2YWlsYWJsZSBvcHRpb25zIGlmIHRoZSBzYWxlc2ZvcmNlIG9iamVjdCBjaGFuZ2VzXG5cdCQoIGRvY3VtZW50ICkub24oICdjaGFuZ2UnLCAnc2VsZWN0I3NhbGVzZm9yY2Vfb2JqZWN0JywgZnVuY3Rpb24oKSB7XG5cdFx0dmFyIHRpbWVvdXQ7XG5cdFx0bG9hZEZpZWxkT3B0aW9ucyggJ3NhbGVzZm9yY2UnLCAkKCB0aGlzICkudmFsKCkgKTtcblx0XHRjbGVhclRpbWVvdXQoIHRpbWVvdXQgKTtcblx0XHR0aW1lb3V0ID0gc2V0VGltZW91dCggZnVuY3Rpb24oKSB7XG5cdFx0XHQkKCAndGFibGUuZmllbGRzIHRib2R5IHRyJyApLmZhZGVPdXQoKTtcblx0XHRcdCQoICd0YWJsZS5maWVsZHMgdGJvZHkgdHInICkubm90KCAnLmZpZWxkbWFwLXRlbXBsYXRlJyApLnJlbW92ZSgpO1xuXHRcdH0sIDEwMDAgKTtcblx0fSk7XG5cblx0Ly8gc2hvdyB3c2RsIGZpZWxkIGlmIHNvYXAgaXMgZW5hYmxlZFxuXHQkKCBkb2N1bWVudCApLm9uKCAnY2hhbmdlJywgJy5vYmplY3Qtc3luYy1mb3Itc2FsZXNmb3JjZS1lbmFibGUtc29hcCBpbnB1dCcsIGZ1bmN0aW9uKCkge1xuXHRcdHRvZ2dsZVNvYXBGaWVsZHMoKTtcblx0fSk7XG5cblx0LyoqXG5cdCAqIEFzIHRoZSBEcnVwYWwgcGx1Z2luIGRvZXMsIHdlIG9ubHkgYWxsb3cgb25lIGZpZWxkIHRvIGJlIGEgcHJlbWF0Y2hcblx0ICovXG5cdCQoIGRvY3VtZW50ICkub24oICdjbGljaycsICcuY29sdW1uLWlzX3ByZW1hdGNoIGlucHV0JywgZnVuY3Rpb24oKSB7XG5cdFx0JCggJy5jb2x1bW4taXNfcHJlbWF0Y2ggaW5wdXQnICkubm90KCB0aGlzICkucHJvcCggJ2NoZWNrZWQnLCBmYWxzZSApO1xuXHR9KTtcblx0LyoqXG5cdCAqIEFzIHRoZSBEcnVwYWwgcGx1Z2luIGRvZXMsIHdlIG9ubHkgYWxsb3cgb25lIGZpZWxkIHRvIGJlIGEga2V5XG5cdCAqL1xuXHQkKCBkb2N1bWVudCApLm9uKCAnY2xpY2snLCAnLmNvbHVtbi1pc19rZXkgaW5wdXQnLCBmdW5jdGlvbigpIHtcblx0XHQkKCAnLmNvbHVtbi1pc19rZXkgaW5wdXQnICkubm90KCB0aGlzICkucHJvcCggJ2NoZWNrZWQnLCBmYWxzZSApO1xuXHR9KTtcblx0LyoqXG5cdCAqIFdoZW4gdGhlIHBsdWdpbiBsb2FkcywgaW5pdGlhbGl6ZSBvciBlbmFibGUgdGhpbmdzOlxuXHQgKiBTZWxlY3QyIG9uIHNlbGVjdCBmaWVsZHNcblx0ICogQ2xlYXIgZmllbGRzIHdoZW4gdGhlIHRhcmdldGVkIFdvcmRQcmVzcyBvciBTYWxlc2ZvcmNlIG9iamVjdCB0eXBlIGNoYW5nZXNcblx0ICogQWRkIGEgc3Bpbm5lciBmb3IgQWpheCByZXF1ZXN0c1xuXHQgKiBNYW5hZ2UgdGhlIGRpc3BsYXkgZm9yIFNhbGVzZm9yY2Ugb2JqZWN0IGZpZWxkcyBiYXNlZCBvbiBBUEkgcmVwb25zZVxuXHQgKiBNYW51YWwgcHVzaCBhbmQgcHVsbFxuXHQgKiBDbGVhcmluZyB0aGUgY2FjaGVcblx0ICovXG5cdCQoIGRvY3VtZW50ICkucmVhZHkoIGZ1bmN0aW9uKCkge1xuXG5cdFx0Ly8gZm9yIG1haW4gYWRtaW4gc2V0dGluZ3Ncblx0XHR0b2dnbGVTb2FwRmllbGRzKCk7XG5cblx0XHQvLyBpZiB0aGVyZSBpcyBhbHJlYWR5IGEgd3Agb3Igc2Ygb2JqZWN0LCBtYWtlIHN1cmUgaXQgaGFzIHRoZSByaWdodCBmaWVsZHNcblx0XHRsb2FkRmllbGRPcHRpb25zKCAnd29yZHByZXNzJywgJCggJ3NlbGVjdCN3b3JkcHJlc3Nfb2JqZWN0JyApLnZhbCgpICk7XG5cdFx0bG9hZEZpZWxkT3B0aW9ucyggJ3NhbGVzZm9yY2UnLCAkKCAnc2VsZWN0I3NhbGVzZm9yY2Vfb2JqZWN0JyApLnZhbCgpICk7XG5cblx0XHRpZiAoIGpRdWVyeS5mbi5zZWxlY3QyICkge1xuXHRcdFx0JCggJ3NlbGVjdCN3b3JkcHJlc3Nfb2JqZWN0JyApLnNlbGVjdDIoKTtcblx0XHRcdCQoICdzZWxlY3Qjc2FsZXNmb3JjZV9vYmplY3QnICkuc2VsZWN0MigpO1xuXHRcdFx0JCggJ3NlbGVjdCNzYWxlc2ZvcmNlX3JlY29yZF90eXBlX2RlZmF1bHQnICkuc2VsZWN0MigpO1xuXHRcdFx0JCggJ3NlbGVjdCNwdWxsX3RyaWdnZXJfZmllbGQnICkuc2VsZWN0MigpO1xuXHRcdFx0JCggJy5jb2x1bW4td29yZHByZXNzX2ZpZWxkIHNlbGVjdCcgKS5zZWxlY3QyKCk7XG5cdFx0XHQkKCAnLmNvbHVtbi1zYWxlc2ZvcmNlX2ZpZWxkIHNlbGVjdCcgKS5zZWxlY3QyKCk7XG5cdFx0fVxuXG5cdFx0Ly8gdG9kbzogbmVlZCB0byBmaXggdGhpcyBzbyBpdCBkb2Vzbid0IHJ1biBhbGwgdGhlIHNwaW5uZXJzIGF0IHRoZSBzYW1lIHRpbWUgd2hlbiB0aGVyZSBhcmUgbXVsdGlwbGVzIG9uIHRoZSBzYW1lIHBhZ2Vcblx0XHQkKCBkb2N1bWVudCApLmFqYXhTdGFydCggZnVuY3Rpb24oKSB7XG5cdFx0XHQkKCAnLnNwaW5uZXInICkuYWRkQ2xhc3MoICdpcy1hY3RpdmUnICk7XG5cdFx0fSkuYWpheFN0b3AoIGZ1bmN0aW9uKCkge1xuXHRcdFx0JCggJy5zcGlubmVyJyApLnJlbW92ZUNsYXNzKCAnaXMtYWN0aXZlJyApO1xuXHRcdH0pO1xuXHRcdHNhbGVzZm9yY2VPYmplY3RGaWVsZHMoKTtcblx0XHRhZGRGaWVsZE1hcHBpbmdSb3coKTtcblxuXHRcdC8vIGZvciBwdXNoL3B1bGwgbWV0aG9kcyBydW5uaW5nIHZpYSBhamF4XG5cdFx0cHVzaEFuZFB1bGxPYmplY3RzKCk7XG5cblx0XHQvLyBmb3IgY2xlYXJpbmcgdGhlIHBsdWdpbiBjYWNoZVxuXHRcdGNsZWFyU2Z3cENhY2hlTGluaygpO1xuXHR9KTtcbn0oIGpRdWVyeSApICk7XG4iXX0= +//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFkbWluLmpzIl0sIm5hbWVzIjpbIiQiLCJsb2FkRmllbGRPcHRpb25zIiwic3lzdGVtIiwib2JqZWN0X25hbWUiLCJkYXRhIiwic2VsZWN0RmllbGQiLCJmaWVsZHMiLCJmaXJzdF9maWVsZCIsImZpcnN0IiwidGV4dCIsInZhbCIsImFqYXgiLCJ0eXBlIiwidXJsIiwiYWpheHVybCIsImJlZm9yZVNlbmQiLCJhZGRDbGFzcyIsInN1Y2Nlc3MiLCJyZXNwb25zZSIsImVhY2giLCJpbmRleCIsInZhbHVlIiwia2V5IiwibmFtZSIsImxhYmVsIiwiaHRtbCIsImNvbXBsZXRlIiwicmVtb3ZlQ2xhc3MiLCJ0b2dnbGVTb2FwRmllbGRzIiwibGVuZ3RoIiwiaXMiLCJzaG93IiwiaGlkZSIsInNhbGVzZm9yY2VPYmplY3RGaWVsZHMiLCJkZWxheSIsInRpbWVyIiwiY2FsbGJhY2siLCJtcyIsImNsZWFyVGltZW91dCIsInNldFRpbWVvdXQiLCJvbiIsInRoYXQiLCJkZWxheVRpbWUiLCJwb3N0IiwicmVjb3JkVHlwZXNBbGxvd2VkTWFya3VwIiwicmVjb3JkVHlwZURlZmF1bHRNYXJrdXAiLCJkYXRlTWFya3VwIiwicmVjb3JkVHlwZUluZm9zIiwialF1ZXJ5IiwiZm4iLCJzZWxlY3QyIiwiYWRkRmllbGRNYXBwaW5nUm93IiwiY2xpY2siLCJzYWxlc2ZvcmNlT2JqZWN0Iiwid29yZHByZXNzT2JqZWN0IiwibmV3S2V5IiwiRGF0ZSIsImdldFVUQ01pbGxpc2Vjb25kcyIsImxhc3RSb3ciLCJsYXN0Iiwib2xkS2V5IiwiYXR0ciIsIlJlZ0V4cCIsImZpZWxkbWFwRmllbGRzIiwicGFyZW50IiwiZmluZCIsInJlbW92ZSIsInByZXBlbmQiLCJuZXh0Um93IiwiZW5kIiwiY2xvbmUiLCJpIiwiaCIsInJlcGxhY2UiLCJhcHBlbmQiLCJwdXNoQW5kUHVsbE9iamVjdHMiLCJ3b3JkcHJlc3NJZCIsInNhbGVzZm9yY2VJZCIsInVwZGF0ZVNhbGVzZm9yY2VVc2VyU3VtbWFyeSIsIndpZHRoIiwiZmFkZUluIiwiZmFkZU91dCIsIm1hcHBpbmdJZCIsImxhc3Rfc3luY19tZXNzYWdlIiwibGFzdF9zeW5jX2FjdGlvbiIsImxhc3Rfc3luY19zdGF0dXMiLCJsYXN0X3N5bmMiLCJjbGVhclNmd3BDYWNoZUxpbmsiLCJtZXNzYWdlIiwiZG9jdW1lbnQiLCJ0aW1lb3V0Iiwibm90IiwicHJvcCIsInJlYWR5Il0sIm1hcHBpbmdzIjoiOztBQUFFLFdBQVVBLENBQVYsRUFBYztBQUVmOzs7OztBQUtBLFdBQVNDLGdCQUFULENBQTJCQyxNQUEzQixFQUFtQ0MsV0FBbkMsRUFBaUQ7QUFDaEQsUUFBSUMsSUFBSSxHQUFHO0FBQ1YsZ0JBQVcsU0FBU0YsTUFBVCxHQUFrQjtBQURuQixLQUFYO0FBR0EsUUFBSUcsV0FBVyxHQUFHLGFBQWFILE1BQWIsR0FBc0IsZUFBeEM7QUFDQSxRQUFJSSxNQUFNLEdBQUcsRUFBYjtBQUNBLFFBQUlDLFdBQVcsR0FBR1AsQ0FBQyxDQUFFSyxXQUFXLEdBQUcsU0FBaEIsQ0FBRCxDQUE0QkcsS0FBNUIsR0FBb0NDLElBQXBDLEVBQWxCOztBQUNBLFFBQUssT0FBT1QsQ0FBQyxDQUFFSyxXQUFGLENBQUQsQ0FBaUJLLEdBQWpCLEVBQVosRUFBcUM7QUFDcEM7QUFDQTs7QUFDREosSUFBQUEsTUFBTSxJQUFJLHNCQUFzQkMsV0FBdEIsR0FBb0MsV0FBOUM7O0FBQ0EsUUFBSyxnQkFBZ0JMLE1BQXJCLEVBQThCO0FBQzdCRSxNQUFBQSxJQUFJLENBQUMsa0JBQUQsQ0FBSixHQUEyQkQsV0FBM0I7QUFDQSxLQUZELE1BRU8sSUFBSyxpQkFBaUJELE1BQXRCLEVBQStCO0FBQ3JDRSxNQUFBQSxJQUFJLENBQUMsbUJBQUQsQ0FBSixHQUE0QkQsV0FBNUI7QUFDQSxLQUZNLE1BRUE7QUFDTixhQUFPRyxNQUFQO0FBQ0E7O0FBRUROLElBQUFBLENBQUMsQ0FBQ1csSUFBRixDQUFPO0FBQ05DLE1BQUFBLElBQUksRUFBRSxNQURBO0FBRU5DLE1BQUFBLEdBQUcsRUFBRUMsT0FGQztBQUdOVixNQUFBQSxJQUFJLEVBQUVBLElBSEE7QUFJTlcsTUFBQUEsVUFBVSxFQUFFLHNCQUFXO0FBQ3RCZixRQUFBQSxDQUFDLENBQUUsY0FBY0UsTUFBaEIsQ0FBRCxDQUEwQmMsUUFBMUIsQ0FBb0MsV0FBcEM7QUFDQSxPQU5LO0FBT0hDLE1BQUFBLE9BQU8sRUFBRSxpQkFBVUMsUUFBVixFQUFxQjtBQUM3QmxCLFFBQUFBLENBQUMsQ0FBQ21CLElBQUYsQ0FBUUQsUUFBUSxDQUFDZCxJQUFULENBQWNFLE1BQXRCLEVBQThCLFVBQVVjLEtBQVYsRUFBaUJDLEtBQWpCLEVBQXlCO0FBQ3pELGNBQUssZ0JBQWdCbkIsTUFBckIsRUFBOEI7QUFDN0JJLFlBQUFBLE1BQU0sSUFBSSxvQkFBb0JlLEtBQUssQ0FBQ0MsR0FBMUIsR0FBZ0MsSUFBaEMsR0FBdUNELEtBQUssQ0FBQ0MsR0FBN0MsR0FBbUQsV0FBN0Q7QUFDQSxXQUZELE1BRU8sSUFBSyxpQkFBaUJwQixNQUF0QixFQUErQjtBQUNyQ0ksWUFBQUEsTUFBTSxJQUFJLG9CQUFvQmUsS0FBSyxDQUFDRSxJQUExQixHQUFpQyxJQUFqQyxHQUF3Q0YsS0FBSyxDQUFDRyxLQUE5QyxHQUFzRCxXQUFoRTtBQUNBO0FBQ0QsU0FORTtBQU9IeEIsUUFBQUEsQ0FBQyxDQUFFSyxXQUFGLENBQUQsQ0FBaUJvQixJQUFqQixDQUF1Qm5CLE1BQXZCO0FBQ0csT0FoQkU7QUFpQkhvQixNQUFBQSxRQUFRLEVBQUUsb0JBQVk7QUFDckIxQixRQUFBQSxDQUFDLENBQUUsY0FBY0UsTUFBaEIsQ0FBRCxDQUEwQnlCLFdBQTFCLENBQXVDLFdBQXZDO0FBQ0E7QUFuQkUsS0FBUDtBQXFCQTtBQUVEOzs7OztBQUdBLFdBQVNDLGdCQUFULEdBQTRCO0FBQzNCLFFBQUssSUFBSTVCLENBQUMsQ0FBRSx5Q0FBRixDQUFELENBQStDNkIsTUFBeEQsRUFBaUU7QUFDaEUsVUFBSzdCLENBQUMsQ0FBRSwrQ0FBRixDQUFELENBQXFEOEIsRUFBckQsQ0FBeUQsVUFBekQsQ0FBTCxFQUE2RTtBQUM1RTlCLFFBQUFBLENBQUMsQ0FBRSw0Q0FBRixDQUFELENBQWtEK0IsSUFBbEQ7QUFDQSxPQUZELE1BRU87QUFDTi9CLFFBQUFBLENBQUMsQ0FBRSw0Q0FBRixDQUFELENBQWtEZ0MsSUFBbEQ7QUFDQTtBQUNEO0FBQ0Q7QUFFRDs7Ozs7O0FBSUEsV0FBU0Msc0JBQVQsR0FBa0M7QUFFakMsUUFBSUMsS0FBSyxHQUFLLFlBQVc7QUFDeEIsVUFBSUMsS0FBSyxHQUFHLENBQVo7QUFDQSxhQUFPLFVBQVVDLFFBQVYsRUFBb0JDLEVBQXBCLEVBQXlCO0FBQy9CQyxRQUFBQSxZQUFZLENBQUdILEtBQUgsQ0FBWjtBQUNBQSxRQUFBQSxLQUFLLEdBQUdJLFVBQVUsQ0FBRUgsUUFBRixFQUFZQyxFQUFaLENBQWxCO0FBQ0EsT0FIRDtBQUlBLEtBTmEsRUFBZDs7QUFRQSxRQUFLLE1BQU1yQyxDQUFDLENBQUUsc0NBQUYsQ0FBRCxDQUE0QzZCLE1BQXZELEVBQWdFO0FBQy9EN0IsTUFBQUEsQ0FBQyxDQUFFLGtDQUFGLENBQUQsQ0FBd0NnQyxJQUF4QztBQUNBOztBQUVELFFBQUssTUFBTWhDLENBQUMsQ0FBRSxxQ0FBRixDQUFELENBQTJDNkIsTUFBdEQsRUFBK0Q7QUFDOUQ3QixNQUFBQSxDQUFDLENBQUUsaUNBQUYsQ0FBRCxDQUF1Q2dDLElBQXZDO0FBQ0E7O0FBQ0QsUUFBSyxNQUFNaEMsQ0FBQyxDQUFFLHlCQUFGLENBQUQsQ0FBK0I2QixNQUExQyxFQUFtRDtBQUNsRDdCLE1BQUFBLENBQUMsQ0FBRSxxQkFBRixDQUFELENBQTJCZ0MsSUFBM0I7QUFDQTs7QUFFRGhDLElBQUFBLENBQUMsQ0FBRSxvQkFBRixDQUFELENBQTBCd0MsRUFBMUIsQ0FBOEIsUUFBOUIsRUFBd0MsWUFBVztBQUNsRCxVQUFJQyxJQUFJLEdBQUcsSUFBWDtBQUNBLFVBQUlDLFNBQVMsR0FBRyxJQUFoQjtBQUNBUixNQUFBQSxLQUFLLENBQUUsWUFBVztBQUNqQixZQUFJOUIsSUFBSSxHQUFHO0FBQ1Ysb0JBQVcsbUNBREQ7QUFFVixxQkFBWSxDQUFFLFFBQUYsRUFBWSxpQkFBWixDQUZGO0FBR1Ysd0JBQWUsVUFITDtBQUlWLCtCQUFzQnFDLElBQUksQ0FBQ3BCO0FBSmpCLFNBQVg7QUFNQXJCLFFBQUFBLENBQUMsQ0FBQzJDLElBQUYsQ0FBUTdCLE9BQVIsRUFBaUJWLElBQWpCLEVBQXVCLFVBQVVjLFFBQVYsRUFBcUI7QUFFM0MsY0FBSTBCLHdCQUF3QixHQUFHLEVBQS9CO0FBQUEsY0FBbUNDLHVCQUF1QixHQUFHLEVBQTdEO0FBQUEsY0FBaUVDLFVBQVUsR0FBRyxFQUE5RTs7QUFFQSxjQUFLLElBQUk5QyxDQUFDLENBQUVrQixRQUFRLENBQUNkLElBQVQsQ0FBYzJDLGVBQWhCLENBQUQsQ0FBbUNsQixNQUE1QyxFQUFxRDtBQUNwRGUsWUFBQUEsd0JBQXdCLElBQUksb0dBQTVCO0FBQ0E1QyxZQUFBQSxDQUFDLENBQUNtQixJQUFGLENBQVFELFFBQVEsQ0FBQ2QsSUFBVCxDQUFjMkMsZUFBdEIsRUFBdUMsVUFBVTNCLEtBQVYsRUFBaUJDLEtBQWpCLEVBQXlCO0FBQy9EdUIsY0FBQUEsd0JBQXdCLElBQUksZ0VBQWdFeEIsS0FBaEUsR0FBd0UsMENBQXhFLEdBQXFIQSxLQUFySCxHQUE2SCx5Q0FBN0gsR0FBeUtBLEtBQXpLLEdBQWlMLEtBQWpMLEdBQXlMQyxLQUF6TCxHQUFpTSxVQUE3TjtBQUNBLGFBRkQ7QUFHQXVCLFlBQUFBLHdCQUF3QixJQUFJLFFBQTVCO0FBR0FDLFlBQUFBLHVCQUF1QixJQUFJLDBFQUEzQjtBQUNBQSxZQUFBQSx1QkFBdUIsSUFBSSxvSUFBM0I7QUFDQTdDLFlBQUFBLENBQUMsQ0FBQ21CLElBQUYsQ0FBUUQsUUFBUSxDQUFDZCxJQUFULENBQWMyQyxlQUF0QixFQUF1QyxVQUFVM0IsS0FBVixFQUFpQkMsS0FBakIsRUFBeUI7QUFDL0R3QixjQUFBQSx1QkFBdUIsSUFBSSxvQkFBb0J6QixLQUFwQixHQUE0QixJQUE1QixHQUFtQ0MsS0FBbkMsR0FBMkMsV0FBdEU7QUFDQSxhQUZEO0FBR0E7O0FBRURyQixVQUFBQSxDQUFDLENBQUUsa0NBQUYsQ0FBRCxDQUF3Q3lCLElBQXhDLENBQThDbUIsd0JBQTlDO0FBQ0E1QyxVQUFBQSxDQUFDLENBQUUsaUNBQUYsQ0FBRCxDQUF1Q3lCLElBQXZDLENBQTZDb0IsdUJBQTdDOztBQUVBLGNBQUssSUFBSTdDLENBQUMsQ0FBRWtCLFFBQVEsQ0FBQ2QsSUFBVCxDQUFjRSxNQUFoQixDQUFELENBQTBCdUIsTUFBbkMsRUFBNEM7QUFDM0NpQixZQUFBQSxVQUFVLElBQUkscUVBQWQ7QUFDQUEsWUFBQUEsVUFBVSxJQUFJLDJHQUFkO0FBQ0E5QyxZQUFBQSxDQUFDLENBQUNtQixJQUFGLENBQVFELFFBQVEsQ0FBQ2QsSUFBVCxDQUFjRSxNQUF0QixFQUE4QixVQUFVYyxLQUFWLEVBQWlCQyxLQUFqQixFQUF5QjtBQUN0RHlCLGNBQUFBLFVBQVUsSUFBSSxvQkFBb0J6QixLQUFLLENBQUNFLElBQTFCLEdBQWlDLElBQWpDLEdBQXdDRixLQUFLLENBQUNHLEtBQTlDLEdBQXNELFdBQXBFO0FBQ0EsYUFGRDtBQUdBc0IsWUFBQUEsVUFBVSxJQUFJLFdBQWQ7QUFDQUEsWUFBQUEsVUFBVSxJQUFJLG1LQUFkO0FBQ0E7O0FBRUQ5QyxVQUFBQSxDQUFDLENBQUUscUJBQUYsQ0FBRCxDQUEyQnlCLElBQTNCLENBQWlDcUIsVUFBakM7O0FBRUEsY0FBSyxPQUFPRix3QkFBWixFQUF1QztBQUN0QzVDLFlBQUFBLENBQUMsQ0FBRSxrQ0FBRixDQUFELENBQXdDK0IsSUFBeEM7QUFDQSxXQUZELE1BRU87QUFDTi9CLFlBQUFBLENBQUMsQ0FBRSxrQ0FBRixDQUFELENBQXdDZ0MsSUFBeEM7QUFDQTs7QUFDRCxjQUFLLE9BQU9hLHVCQUFaLEVBQXNDO0FBQ3JDN0MsWUFBQUEsQ0FBQyxDQUFFLGlDQUFGLENBQUQsQ0FBdUMrQixJQUF2QztBQUNBLFdBRkQsTUFFTztBQUNOL0IsWUFBQUEsQ0FBQyxDQUFFLGlDQUFGLENBQUQsQ0FBdUNnQyxJQUF2QztBQUNBOztBQUVELGNBQUssT0FBT2MsVUFBWixFQUF5QjtBQUN4QjlDLFlBQUFBLENBQUMsQ0FBRSxxQkFBRixDQUFELENBQTJCK0IsSUFBM0I7QUFDQSxXQUZELE1BRU87QUFDTi9CLFlBQUFBLENBQUMsQ0FBRSxxQkFBRixDQUFELENBQTJCZ0MsSUFBM0I7QUFDQTs7QUFFRCxjQUFLZ0IsTUFBTSxDQUFDQyxFQUFQLENBQVVDLE9BQWYsRUFBeUI7QUFDeEJsRCxZQUFBQSxDQUFDLENBQUUsdUNBQUYsQ0FBRCxDQUE2Q2tELE9BQTdDO0FBQ0FsRCxZQUFBQSxDQUFDLENBQUUsMkJBQUYsQ0FBRCxDQUFpQ2tELE9BQWpDO0FBQ0E7QUFFRCxTQXhERDtBQXlEQSxPQWhFSSxFQWdFRlIsU0FoRUUsQ0FBTDtBQWlFQSxLQXBFRDtBQXFFQTtBQUNEOzs7Ozs7QUFJQyxXQUFTUyxrQkFBVCxHQUE4QjtBQUM5Qm5ELElBQUFBLENBQUMsQ0FBRSxvQkFBRixDQUFELENBQTBCb0QsS0FBMUIsQ0FBaUMsWUFBVztBQUMzQyxVQUFJQyxnQkFBZ0IsR0FBR3JELENBQUMsQ0FBRSxvQkFBRixDQUFELENBQTBCVSxHQUExQixFQUF2QjtBQUNBLFVBQUk0QyxlQUFlLEdBQUd0RCxDQUFDLENBQUUsbUJBQUYsQ0FBRCxDQUF5QlUsR0FBekIsRUFBdEI7QUFDQSxVQUFJNkMsTUFBTSxHQUFHLElBQUlDLElBQUosR0FBV0Msa0JBQVgsRUFBYjtBQUNBLFVBQUlDLE9BQU8sR0FBRzFELENBQUMsQ0FBRSx1QkFBRixDQUFELENBQTZCMkQsSUFBN0IsRUFBZDtBQUNBLFVBQUlDLE1BQU0sR0FBR0YsT0FBTyxDQUFDRyxJQUFSLENBQWMsVUFBZCxDQUFiO0FBQ0FELE1BQUFBLE1BQU0sR0FBRyxJQUFJRSxNQUFKLENBQVlGLE1BQVosRUFBb0IsR0FBcEIsQ0FBVDtBQUNBNUQsTUFBQUEsQ0FBQyxDQUFFLElBQUYsQ0FBRCxDQUFVUyxJQUFWLENBQWdCLDJCQUFoQjs7QUFDQSxVQUFLLE9BQU82QyxlQUFQLElBQTBCLE9BQU9ELGdCQUF0QyxFQUF5RDtBQUN4RFUsUUFBQUEsY0FBYyxDQUFFSCxNQUFGLEVBQVVMLE1BQVYsRUFBa0JHLE9BQWxCLENBQWQ7QUFDQTFELFFBQUFBLENBQUMsQ0FBRSxJQUFGLENBQUQsQ0FBVWdFLE1BQVYsR0FBbUJDLElBQW5CLENBQXlCLGlCQUF6QixFQUE2Q0MsTUFBN0M7QUFDQSxPQUhELE1BR087QUFDTmxFLFFBQUFBLENBQUMsQ0FBRSxJQUFGLENBQUQsQ0FBVWdFLE1BQVYsR0FBbUJHLE9BQW5CLENBQTRCLHdJQUE1QjtBQUNBOztBQUNELGFBQU8sS0FBUDtBQUNBLEtBZkQ7QUFnQkE7QUFDRDs7Ozs7Ozs7O0FBT0EsV0FBU0osY0FBVCxDQUF5QkgsTUFBekIsRUFBaUNMLE1BQWpDLEVBQXlDRyxPQUF6QyxFQUFtRDtBQUNsRCxRQUFJVSxPQUFPLEdBQUcsRUFBZDs7QUFDTSxRQUFLcEIsTUFBTSxDQUFDQyxFQUFQLENBQVVDLE9BQWYsRUFBeUI7QUFDeEJrQixNQUFBQSxPQUFPLEdBQUdWLE9BQU8sQ0FBQ08sSUFBUixDQUFjLFFBQWQsRUFDTGYsT0FESyxDQUNJLFNBREosRUFFTG1CLEdBRkssR0FHTEMsS0FISyxDQUdFLElBSEYsRUFHUzNDLFdBSFQsQ0FHc0IsbUJBSHRCLENBQVY7QUFJQSxLQUxELE1BS087QUFDTnlDLE1BQUFBLE9BQU8sR0FBR1YsT0FBTyxDQUFDWSxLQUFSLENBQWUsSUFBZixDQUFWO0FBQ0E7O0FBQ1B0RSxJQUFBQSxDQUFDLENBQUVvRSxPQUFGLENBQUQsQ0FBYVAsSUFBYixDQUFtQixVQUFuQixFQUErQk4sTUFBL0I7QUFDQXZELElBQUFBLENBQUMsQ0FBRW9FLE9BQUYsQ0FBRCxDQUFhakQsSUFBYixDQUFrQixZQUFXO0FBQzVCbkIsTUFBQUEsQ0FBQyxDQUFFLElBQUYsQ0FBRCxDQUFVeUIsSUFBVixDQUFnQixVQUFVOEMsQ0FBVixFQUFhQyxDQUFiLEVBQWlCO0FBQ2hDLGVBQU9BLENBQUMsQ0FBQ0MsT0FBRixDQUFXYixNQUFYLEVBQW1CTCxNQUFuQixDQUFQO0FBQ0EsT0FGRDtBQUdBLEtBSkQ7QUFLQXZELElBQUFBLENBQUMsQ0FBRSxvQkFBRixDQUFELENBQTBCMEUsTUFBMUIsQ0FBa0NOLE9BQWxDOztBQUNBLFFBQUtwQixNQUFNLENBQUNDLEVBQVAsQ0FBVUMsT0FBZixFQUF5QjtBQUN4QlEsTUFBQUEsT0FBTyxDQUFDTyxJQUFSLENBQWMsUUFBZCxFQUF5QmYsT0FBekI7QUFDQWtCLE1BQUFBLE9BQU8sQ0FBQ0gsSUFBUixDQUFjLFFBQWQsRUFBeUJmLE9BQXpCO0FBQ0E7QUFDRDtBQUNEOzs7OztBQUdBLFdBQVN5QixrQkFBVCxHQUE4QjtBQUM3QjNFLElBQUFBLENBQUMsQ0FBRSwrQkFBRixDQUFELENBQXFDZ0MsSUFBckM7O0FBQ0EsUUFBSyxJQUFJaEMsQ0FBQyxDQUFFLHdCQUFGLENBQUQsQ0FBOEI2QixNQUF2QyxFQUFnRDtBQUMvQzdCLE1BQUFBLENBQUMsQ0FBRSw0QkFBRixDQUFELENBQWtDd0MsRUFBbEMsQ0FBc0MsT0FBdEMsRUFBK0MsWUFBVztBQUN6RCxZQUFJYyxlQUFlLEdBQUd0RCxDQUFDLENBQUUsd0JBQUYsQ0FBRCxDQUE4QlUsR0FBOUIsRUFBdEI7QUFDQSxZQUFJa0UsV0FBVyxHQUFHNUUsQ0FBQyxDQUFFLG9CQUFGLENBQUQsQ0FBMEJVLEdBQTFCLEVBQWxCO0FBQ0EsWUFBSW1FLFlBQVksR0FBRzdFLENBQUMsQ0FBRSxxQkFBRixDQUFELENBQTJCVSxHQUEzQixFQUFuQjtBQUNBLFlBQUlOLElBQUksR0FBRztBQUNWLG9CQUFXLG9CQUREO0FBRVYsOEJBQXFCa0QsZUFGWDtBQUdWLDBCQUFpQnNCLFdBSFA7QUFJViwyQkFBa0JDO0FBSlIsU0FBWDtBQU1BN0UsUUFBQUEsQ0FBQyxDQUFDMkMsSUFBRixDQUFRN0IsT0FBUixFQUFpQlYsSUFBakIsRUFBdUIsVUFBVWMsUUFBVixFQUFxQjtBQUMzQyxjQUFLLFNBQVNBLFFBQVEsQ0FBQ0QsT0FBdkIsRUFBaUM7QUFDaEM2RCxZQUFBQSwyQkFBMkI7QUFDM0I5RSxZQUFBQSxDQUFDLENBQUUsK0JBQUYsQ0FBRCxDQUFxQytFLEtBQXJDLENBQTRDL0UsQ0FBQyxDQUFFLHlCQUFGLENBQUQsQ0FBK0IrRSxLQUEvQixLQUF5QyxFQUFyRjtBQUNBL0UsWUFBQUEsQ0FBQyxDQUFFLCtCQUFGLENBQUQsQ0FBcUN5QixJQUFyQyxDQUEyQyxtREFBM0MsRUFBaUd1RCxNQUFqRyxHQUEwRzlDLEtBQTFHLENBQWlILElBQWpILEVBQXdIK0MsT0FBeEg7QUFDQTtBQUNELFNBTkQ7QUFPQSxlQUFPLEtBQVA7QUFDQSxPQWxCRDtBQW1CQTs7QUFDRGpGLElBQUFBLENBQUMsQ0FBRSw4QkFBRixDQUFELENBQW9Dd0MsRUFBcEMsQ0FBd0MsT0FBeEMsRUFBaUQsWUFBVztBQUMzRCxVQUFJcUMsWUFBWSxHQUFHN0UsQ0FBQyxDQUFFLHFCQUFGLENBQUQsQ0FBMkJVLEdBQTNCLEVBQW5CO0FBQ0EsVUFBSTRDLGVBQWUsR0FBR3RELENBQUMsQ0FBRSx3QkFBRixDQUFELENBQThCVSxHQUE5QixFQUF0QjtBQUNBLFVBQUlOLElBQUksR0FBRztBQUNWLGtCQUFXLHNCQUREO0FBRVYseUJBQWtCeUUsWUFGUjtBQUdWLDRCQUFxQnZCO0FBSFgsT0FBWDtBQUtBdEQsTUFBQUEsQ0FBQyxDQUFDMkMsSUFBRixDQUFRN0IsT0FBUixFQUFpQlYsSUFBakIsRUFBdUIsVUFBVWMsUUFBVixFQUFxQjtBQUMzQyxZQUFLLFNBQVNBLFFBQVEsQ0FBQ0QsT0FBdkIsRUFBaUM7QUFDaEM2RCxVQUFBQSwyQkFBMkI7QUFDM0I5RSxVQUFBQSxDQUFDLENBQUUsK0JBQUYsQ0FBRCxDQUFxQytFLEtBQXJDLENBQTRDL0UsQ0FBQyxDQUFFLHlCQUFGLENBQUQsQ0FBK0IrRSxLQUEvQixLQUF5QyxFQUFyRjtBQUNBL0UsVUFBQUEsQ0FBQyxDQUFFLCtCQUFGLENBQUQsQ0FBcUN5QixJQUFyQyxDQUEyQyxxREFBM0MsRUFBbUd1RCxNQUFuRyxHQUE0RzlDLEtBQTVHLENBQW1ILElBQW5ILEVBQTBIK0MsT0FBMUg7QUFDQTtBQUNELE9BTkQ7QUFPQSxhQUFPLEtBQVA7QUFDQSxLQWhCRDtBQWlCQTtBQUNEOzs7OztBQUdBLFdBQVNILDJCQUFULEdBQXVDO0FBQ3RDLFFBQUlJLFNBQVMsR0FBR2xGLENBQUMsQ0FBRSxrQkFBRixDQUFELENBQXdCVSxHQUF4QixFQUFoQjtBQUNBLFFBQUlOLElBQUksR0FBRztBQUNWLGdCQUFXLHFCQUREO0FBRVYsb0JBQWU4RTtBQUZMLEtBQVg7QUFJQWxGLElBQUFBLENBQUMsQ0FBQzJDLElBQUYsQ0FBUTdCLE9BQVIsRUFBaUJWLElBQWpCLEVBQXVCLFVBQVVjLFFBQVYsRUFBcUI7QUFDM0MsVUFBSyxTQUFTQSxRQUFRLENBQUNELE9BQXZCLEVBQWlDO0FBQ2hDakIsUUFBQUEsQ0FBQyxDQUFFLHNCQUFGLENBQUQsQ0FBNEJTLElBQTVCLENBQWtDUyxRQUFRLENBQUNkLElBQVQsQ0FBYytFLGlCQUFoRDtBQUNBbkYsUUFBQUEsQ0FBQyxDQUFFLHFCQUFGLENBQUQsQ0FBMkJTLElBQTNCLENBQWlDUyxRQUFRLENBQUNkLElBQVQsQ0FBY2dGLGdCQUEvQztBQUNBcEYsUUFBQUEsQ0FBQyxDQUFFLHFCQUFGLENBQUQsQ0FBMkJTLElBQTNCLENBQWlDUyxRQUFRLENBQUNkLElBQVQsQ0FBY2lGLGdCQUEvQztBQUNBckYsUUFBQUEsQ0FBQyxDQUFFLGNBQUYsQ0FBRCxDQUFvQlMsSUFBcEIsQ0FBMEJTLFFBQVEsQ0FBQ2QsSUFBVCxDQUFja0YsU0FBeEM7O0FBQ0EsWUFBSyxRQUFRcEUsUUFBUSxDQUFDZCxJQUFULENBQWNpRixnQkFBM0IsRUFBOEM7QUFDN0NyRixVQUFBQSxDQUFDLENBQUUscUJBQUYsQ0FBRCxDQUEyQlMsSUFBM0IsQ0FBaUMsU0FBakM7QUFDQTtBQUNEO0FBQ0QsS0FWRDtBQVdBO0FBQ0Q7Ozs7O0FBR0EsV0FBUzhFLGtCQUFULEdBQThCO0FBQzdCdkYsSUFBQUEsQ0FBQyxDQUFFLG1CQUFGLENBQUQsQ0FBeUJvRCxLQUF6QixDQUFnQyxZQUFXO0FBQzFDLFVBQUloRCxJQUFJLEdBQUc7QUFDVixrQkFBVztBQURELE9BQVg7QUFHQSxVQUFJcUMsSUFBSSxHQUFHekMsQ0FBQyxDQUFFLElBQUYsQ0FBWjtBQUNBQSxNQUFBQSxDQUFDLENBQUMyQyxJQUFGLENBQVE3QixPQUFSLEVBQWlCVixJQUFqQixFQUF1QixVQUFVYyxRQUFWLEVBQXFCO0FBQzNDLFlBQUssU0FBU0EsUUFBUSxDQUFDRCxPQUFsQixJQUE2QixTQUFTQyxRQUFRLENBQUNkLElBQVQsQ0FBY2EsT0FBekQsRUFBbUU7QUFDbEV3QixVQUFBQSxJQUFJLENBQUN1QixNQUFMLEdBQWN2QyxJQUFkLENBQW9CUCxRQUFRLENBQUNkLElBQVQsQ0FBY29GLE9BQWxDLEVBQTRDUixNQUE1QztBQUNBO0FBQ0QsT0FKRDtBQUtBLGFBQU8sS0FBUDtBQUNBLEtBWEQ7QUFZQSxHQWpTYyxDQW1TZjs7O0FBQ0FoRixFQUFBQSxDQUFDLENBQUV5RixRQUFGLENBQUQsQ0FBY2pELEVBQWQsQ0FBa0IsUUFBbEIsRUFBNEIseUJBQTVCLEVBQXVELFlBQVc7QUFDakUsUUFBSWtELE9BQUo7QUFDQXpGLElBQUFBLGdCQUFnQixDQUFFLFdBQUYsRUFBZUQsQ0FBQyxDQUFFLElBQUYsQ0FBRCxDQUFVVSxHQUFWLEVBQWYsQ0FBaEI7QUFDQTRCLElBQUFBLFlBQVksQ0FBRW9ELE9BQUYsQ0FBWjtBQUNBQSxJQUFBQSxPQUFPLEdBQUduRCxVQUFVLENBQUUsWUFBVztBQUNoQ3ZDLE1BQUFBLENBQUMsQ0FBRSx1QkFBRixDQUFELENBQTZCaUYsT0FBN0I7QUFDQWpGLE1BQUFBLENBQUMsQ0FBRSx1QkFBRixDQUFELENBQTZCMkYsR0FBN0IsQ0FBa0Msb0JBQWxDLEVBQXlEekIsTUFBekQ7QUFDQSxLQUhtQixFQUdqQixJQUhpQixDQUFwQjtBQUlBLEdBUkQsRUFwU2UsQ0E4U2Y7O0FBQ0FsRSxFQUFBQSxDQUFDLENBQUV5RixRQUFGLENBQUQsQ0FBY2pELEVBQWQsQ0FBa0IsUUFBbEIsRUFBNEIsMEJBQTVCLEVBQXdELFlBQVc7QUFDbEUsUUFBSWtELE9BQUo7QUFDQXpGLElBQUFBLGdCQUFnQixDQUFFLFlBQUYsRUFBZ0JELENBQUMsQ0FBRSxJQUFGLENBQUQsQ0FBVVUsR0FBVixFQUFoQixDQUFoQjtBQUNBNEIsSUFBQUEsWUFBWSxDQUFFb0QsT0FBRixDQUFaO0FBQ0FBLElBQUFBLE9BQU8sR0FBR25ELFVBQVUsQ0FBRSxZQUFXO0FBQ2hDdkMsTUFBQUEsQ0FBQyxDQUFFLHVCQUFGLENBQUQsQ0FBNkJpRixPQUE3QjtBQUNBakYsTUFBQUEsQ0FBQyxDQUFFLHVCQUFGLENBQUQsQ0FBNkIyRixHQUE3QixDQUFrQyxvQkFBbEMsRUFBeUR6QixNQUF6RDtBQUNBLEtBSG1CLEVBR2pCLElBSGlCLENBQXBCO0FBSUEsR0FSRCxFQS9TZSxDQXlUZjs7QUFDQWxFLEVBQUFBLENBQUMsQ0FBRXlGLFFBQUYsQ0FBRCxDQUFjakQsRUFBZCxDQUFrQixRQUFsQixFQUE0QiwrQ0FBNUIsRUFBNkUsWUFBVztBQUN2RlosSUFBQUEsZ0JBQWdCO0FBQ2hCLEdBRkQ7QUFJQTs7OztBQUdBNUIsRUFBQUEsQ0FBQyxDQUFFeUYsUUFBRixDQUFELENBQWNqRCxFQUFkLENBQWtCLE9BQWxCLEVBQTJCLDJCQUEzQixFQUF3RCxZQUFXO0FBQ2xFeEMsSUFBQUEsQ0FBQyxDQUFFLDJCQUFGLENBQUQsQ0FBaUMyRixHQUFqQyxDQUFzQyxJQUF0QyxFQUE2Q0MsSUFBN0MsQ0FBbUQsU0FBbkQsRUFBOEQsS0FBOUQ7QUFDQSxHQUZEO0FBR0E7Ozs7QUFHQTVGLEVBQUFBLENBQUMsQ0FBRXlGLFFBQUYsQ0FBRCxDQUFjakQsRUFBZCxDQUFrQixPQUFsQixFQUEyQixzQkFBM0IsRUFBbUQsWUFBVztBQUM3RHhDLElBQUFBLENBQUMsQ0FBRSxzQkFBRixDQUFELENBQTRCMkYsR0FBNUIsQ0FBaUMsSUFBakMsRUFBd0NDLElBQXhDLENBQThDLFNBQTlDLEVBQXlELEtBQXpEO0FBQ0EsR0FGRDtBQUdBOzs7Ozs7Ozs7QUFRQTVGLEVBQUFBLENBQUMsQ0FBRXlGLFFBQUYsQ0FBRCxDQUFjSSxLQUFkLENBQXFCLFlBQVc7QUFFL0I7QUFDQWpFLElBQUFBLGdCQUFnQixHQUhlLENBSy9COztBQUNBM0IsSUFBQUEsZ0JBQWdCLENBQUUsV0FBRixFQUFlRCxDQUFDLENBQUUseUJBQUYsQ0FBRCxDQUErQlUsR0FBL0IsRUFBZixDQUFoQjtBQUNBVCxJQUFBQSxnQkFBZ0IsQ0FBRSxZQUFGLEVBQWdCRCxDQUFDLENBQUUsMEJBQUYsQ0FBRCxDQUFnQ1UsR0FBaEMsRUFBaEIsQ0FBaEIsQ0FQK0IsQ0FTL0I7O0FBQ0EsUUFBS3NDLE1BQU0sQ0FBQ0MsRUFBUCxDQUFVQyxPQUFmLEVBQXlCO0FBQ3hCbEQsTUFBQUEsQ0FBQyxDQUFFLHlCQUFGLENBQUQsQ0FBK0JrRCxPQUEvQjtBQUNBbEQsTUFBQUEsQ0FBQyxDQUFFLDBCQUFGLENBQUQsQ0FBZ0NrRCxPQUFoQztBQUNBbEQsTUFBQUEsQ0FBQyxDQUFFLHVDQUFGLENBQUQsQ0FBNkNrRCxPQUE3QztBQUNBbEQsTUFBQUEsQ0FBQyxDQUFFLDJCQUFGLENBQUQsQ0FBaUNrRCxPQUFqQztBQUNBbEQsTUFBQUEsQ0FBQyxDQUFFLGdDQUFGLENBQUQsQ0FBc0NrRCxPQUF0QztBQUNBbEQsTUFBQUEsQ0FBQyxDQUFFLGlDQUFGLENBQUQsQ0FBdUNrRCxPQUF2QztBQUNBLEtBakI4QixDQW1CL0I7OztBQUNBakIsSUFBQUEsc0JBQXNCLEdBcEJTLENBc0IvQjs7QUFDQWtCLElBQUFBLGtCQUFrQixHQXZCYSxDQXlCL0I7O0FBQ0F3QixJQUFBQSxrQkFBa0IsR0ExQmEsQ0E0Qi9COztBQUNBWSxJQUFBQSxrQkFBa0I7QUFDbEIsR0E5QkQ7QUErQkEsQ0FqWEMsRUFpWEN2QyxNQWpYRCxDQUFGIiwiZmlsZSI6Im9iamVjdC1zeW5jLWZvci1zYWxlc2ZvcmNlLWFkbWluLmpzIiwic291cmNlc0NvbnRlbnQiOlsiKCBmdW5jdGlvbiggJCApIHtcblxuXHQvKipcblx0ICogR2V0cyB0aGUgV29yZFByZXNzIGFuZCBTYWxlc2ZvcmNlIGZpZWxkIHJlc3VsdHMgdmlhIGFuIEFqYXggY2FsbFxuXHQgKiBAcGFyYW0gc3RyaW5nIHN5c3RlbSB3aGV0aGVyIHdlIHdhbnQgV29yZFByZXNzIG9yIFNhbGVzZm9yY2UgZGF0YVxuXHQgKiBAcGFyYW0gc3RyaW5nIG9iamVjdF9uYW1lIHRoZSB2YWx1ZSBmb3IgdGhlIG9iamVjdCBuYW1lIGZyb20gdGhlIHRoZSA8c2VsZWN0PlxuXHQgKi9cblx0ZnVuY3Rpb24gbG9hZEZpZWxkT3B0aW9ucyggc3lzdGVtLCBvYmplY3RfbmFtZSApIHtcblx0XHR2YXIgZGF0YSA9IHtcblx0XHRcdCdhY3Rpb24nIDogJ2dldF8nICsgc3lzdGVtICsgJ19vYmplY3RfZmllbGRzJyxcblx0XHR9XG5cdFx0dmFyIHNlbGVjdEZpZWxkID0gJy5jb2x1bW4tJyArIHN5c3RlbSArICdfZmllbGQgc2VsZWN0Jztcblx0XHR2YXIgZmllbGRzID0gJyc7XG5cdFx0dmFyIGZpcnN0X2ZpZWxkID0gJCggc2VsZWN0RmllbGQgKyAnIG9wdGlvbicpLmZpcnN0KCkudGV4dCgpO1xuXHRcdGlmICggJycgIT09ICQoIHNlbGVjdEZpZWxkICkudmFsKCkgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGZpZWxkcyArPSAnPG9wdGlvbiB2YWx1ZT1cIlwiPicgKyBmaXJzdF9maWVsZCArICc8L29wdGlvbj4nO1xuXHRcdGlmICggJ3dvcmRwcmVzcycgPT09IHN5c3RlbSApIHtcblx0XHRcdGRhdGFbJ3dvcmRwcmVzc19vYmplY3QnXSA9IG9iamVjdF9uYW1lO1xuXHRcdH0gZWxzZSBpZiAoICdzYWxlc2ZvcmNlJyA9PT0gc3lzdGVtICkge1xuXHRcdFx0ZGF0YVsnc2FsZXNmb3JjZV9vYmplY3QnXSA9IG9iamVjdF9uYW1lO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gZmllbGRzO1xuXHRcdH1cblxuXHRcdCQuYWpheCh7XG5cdFx0XHR0eXBlOiAnUE9TVCcsXG5cdFx0XHR1cmw6IGFqYXh1cmwsXG5cdFx0XHRkYXRhOiBkYXRhLFxuXHRcdFx0YmVmb3JlU2VuZDogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdCQoICcuc3Bpbm5lci0nICsgc3lzdGVtICkuYWRkQ2xhc3MoICdpcy1hY3RpdmUnICk7XG5cdFx0XHR9LFxuICAgIFx0XHRzdWNjZXNzOiBmdW5jdGlvbiggcmVzcG9uc2UgKSB7XG4gICAgXHRcdFx0JC5lYWNoKCByZXNwb25zZS5kYXRhLmZpZWxkcywgZnVuY3Rpb24oIGluZGV4LCB2YWx1ZSApIHtcblx0XHRcdFx0XHRpZiAoICd3b3JkcHJlc3MnID09PSBzeXN0ZW0gKSB7XG5cdFx0XHRcdFx0XHRmaWVsZHMgKz0gJzxvcHRpb24gdmFsdWU9XCInICsgdmFsdWUua2V5ICsgJ1wiPicgKyB2YWx1ZS5rZXkgKyAnPC9vcHRpb24+Jztcblx0XHRcdFx0XHR9IGVsc2UgaWYgKCAnc2FsZXNmb3JjZScgPT09IHN5c3RlbSApIHtcblx0XHRcdFx0XHRcdGZpZWxkcyArPSAnPG9wdGlvbiB2YWx1ZT1cIicgKyB2YWx1ZS5uYW1lICsgJ1wiPicgKyB2YWx1ZS5sYWJlbCArICc8L29wdGlvbj4nO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHRcdCQoIHNlbGVjdEZpZWxkICkuaHRtbCggZmllbGRzICk7XG4gICAgXHRcdH0sXG4gICAgXHRcdGNvbXBsZXRlOiBmdW5jdGlvbiAoKSB7XG4gICAgXHRcdFx0JCggJy5zcGlubmVyLScgKyBzeXN0ZW0gKS5yZW1vdmVDbGFzcyggJ2lzLWFjdGl2ZScgKTtcbiAgICBcdFx0fVxuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIERvbid0IHNob3cgdGhlIFdTREwgZmlsZSBmaWVsZCB1bmxlc3MgU09BUCBpcyBlbmFibGVkXG5cdCAqL1xuXHRmdW5jdGlvbiB0b2dnbGVTb2FwRmllbGRzKCkge1xuXHRcdGlmICggMCA8ICQoICcub2JqZWN0LXN5bmMtZm9yLXNhbGVzZm9yY2UtZW5hYmxlLXNvYXAnICkubGVuZ3RoICkge1xuXHRcdFx0aWYgKCAkKCAnLm9iamVjdC1zeW5jLWZvci1zYWxlc2ZvcmNlLWVuYWJsZS1zb2FwIGlucHV0JyApLmlzKCAnOmNoZWNrZWQnICkgKSB7XG5cdFx0XHRcdCQoICcub2JqZWN0LXN5bmMtZm9yLXNhbGVzZm9yY2Utc29hcC13c2RsLXBhdGgnICkuc2hvdygpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0JCggJy5vYmplY3Qtc3luYy1mb3Itc2FsZXNmb3JjZS1zb2FwLXdzZGwtcGF0aCcgKS5oaWRlKCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEdlbmVyYXRlcyB0aGUgU2FsZXNmb3JjZSBvYmplY3QgZmllbGRzIGJhc2VkIG9uIHRoZSBkcm9wZG93biBhY3Rpdml0eSBhbmQgQVBJIHJlc3VsdHMuXG5cdCAqIFRoaXMgYWxzbyBnZW5lcmF0ZXMgb3RoZXIgcXVlcnkgZmllbGRzIHRoYXQgYXJlIG9iamVjdC1zcGVjaWZpYywgbGlrZSBkYXRlIGZpZWxkcywgcmVjb3JkIHR5cGVzIGFsbG93ZWQsIGV0Yy5cblx0ICovXG5cdGZ1bmN0aW9uIHNhbGVzZm9yY2VPYmplY3RGaWVsZHMoKSB7XG5cblx0XHR2YXIgZGVsYXkgPSAoIGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIHRpbWVyID0gMDtcblx0XHRcdHJldHVybiBmdW5jdGlvbiggY2FsbGJhY2ssIG1zICkge1xuXHRcdFx0XHRjbGVhclRpbWVvdXQgKCB0aW1lciApO1xuXHRcdFx0XHR0aW1lciA9IHNldFRpbWVvdXQoIGNhbGxiYWNrLCBtcyApO1xuXHRcdFx0fTtcblx0XHR9KCkgKTtcblxuXHRcdGlmICggMCA9PT0gJCggJy5zYWxlc2ZvcmNlX3JlY29yZF90eXBlc19hbGxvd2VkID4gKicgKS5sZW5ndGggKSB7XG5cdFx0XHQkKCAnLnNhbGVzZm9yY2VfcmVjb3JkX3R5cGVzX2FsbG93ZWQnICkuaGlkZSgpO1xuXHRcdH1cblxuXHRcdGlmICggMCA9PT0gJCggJy5zYWxlc2ZvcmNlX3JlY29yZF90eXBlX2RlZmF1bHQgPiAqJyApLmxlbmd0aCApIHtcblx0XHRcdCQoICcuc2FsZXNmb3JjZV9yZWNvcmRfdHlwZV9kZWZhdWx0JyApLmhpZGUoKTtcblx0XHR9XG5cdFx0aWYgKCAwID09PSAkKCAnLnB1bGxfdHJpZ2dlcl9maWVsZCA+IConICkubGVuZ3RoICkge1xuXHRcdFx0JCggJy5wdWxsX3RyaWdnZXJfZmllbGQnICkuaGlkZSgpO1xuXHRcdH1cblxuXHRcdCQoICcjc2FsZXNmb3JjZV9vYmplY3QnICkub24oICdjaGFuZ2UnLCBmdW5jdGlvbigpIHtcblx0XHRcdHZhciB0aGF0ID0gdGhpcztcblx0XHRcdHZhciBkZWxheVRpbWUgPSAxMDAwO1xuXHRcdFx0ZGVsYXkoIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHR2YXIgZGF0YSA9IHtcblx0XHRcdFx0XHQnYWN0aW9uJyA6ICdnZXRfc2FsZXNmb3JjZV9vYmplY3RfZGVzY3JpcHRpb24nLFxuXHRcdFx0XHRcdCdpbmNsdWRlJyA6IFsgJ2ZpZWxkcycsICdyZWNvcmRUeXBlSW5mb3MnIF0sXG5cdFx0XHRcdFx0J2ZpZWxkX3R5cGUnIDogJ2RhdGV0aW1lJyxcblx0XHRcdFx0XHQnc2FsZXNmb3JjZV9vYmplY3QnIDogdGhhdC52YWx1ZVxuXHRcdFx0XHR9XG5cdFx0XHRcdCQucG9zdCggYWpheHVybCwgZGF0YSwgZnVuY3Rpb24oIHJlc3BvbnNlICkge1xuXG5cdFx0XHRcdFx0dmFyIHJlY29yZFR5cGVzQWxsb3dlZE1hcmt1cCA9ICcnLCByZWNvcmRUeXBlRGVmYXVsdE1hcmt1cCA9ICcnLCBkYXRlTWFya3VwID0gJyc7XG5cblx0XHRcdFx0XHRpZiAoIDAgPCAkKCByZXNwb25zZS5kYXRhLnJlY29yZFR5cGVJbmZvcyApLmxlbmd0aCApIHtcblx0XHRcdFx0XHRcdHJlY29yZFR5cGVzQWxsb3dlZE1hcmt1cCArPSAnPGxhYmVsIGZvcj1cInNhbGVzZm9yY2VfcmVjb3JkX3R5cGVzX2FsbG93ZWRcIj5BbGxvd2VkIFJlY29yZCBUeXBlczo8L2xhYmVsPjxkaXYgY2xhc3M9XCJjaGVja2JveGVzXCI+Jztcblx0XHRcdFx0XHRcdCQuZWFjaCggcmVzcG9uc2UuZGF0YS5yZWNvcmRUeXBlSW5mb3MsIGZ1bmN0aW9uKCBpbmRleCwgdmFsdWUgKSB7XG5cdFx0XHRcdFx0XHRcdHJlY29yZFR5cGVzQWxsb3dlZE1hcmt1cCArPSAnPGxhYmVsPjxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBjbGFzcz1cImZvcm0tY2hlY2tib3hcIiB2YWx1ZT1cIicgKyBpbmRleCArICdcIiBuYW1lPVwic2FsZXNmb3JjZV9yZWNvcmRfdHlwZXNfYWxsb3dlZFsnICsgaW5kZXggKyAnXVwiIGlkPVwic2FsZXNmb3JjZV9yZWNvcmRfdHlwZXNfYWxsb3dlZC0nICsgaW5kZXggKyAnXCI+ICcgKyB2YWx1ZSArICc8L2xhYmVsPic7XG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdHJlY29yZFR5cGVzQWxsb3dlZE1hcmt1cCArPSAnPC9kaXY+JztcblxuXG5cdFx0XHRcdFx0XHRyZWNvcmRUeXBlRGVmYXVsdE1hcmt1cCArPSAnPGxhYmVsIGZvcj1cInNhbGVzZm9yY2VfcmVjb3JkX3R5cGVfZGVmYXVsdFwiPkRlZmF1bHQgUmVjb3JkIFR5cGU6PC9sYWJlbD4nO1xuXHRcdFx0XHRcdFx0cmVjb3JkVHlwZURlZmF1bHRNYXJrdXAgKz0gJzxzZWxlY3QgbmFtZT1cInNhbGVzZm9yY2VfcmVjb3JkX3R5cGVfZGVmYXVsdFwiIGlkPVwic2FsZXNmb3JjZV9yZWNvcmRfdHlwZV9kZWZhdWx0XCI+PG9wdGlvbiB2YWx1ZT1cIlwiPi0gU2VsZWN0IHJlY29yZCB0eXBlIC08L29wdGlvbj4nO1xuXHRcdFx0XHRcdFx0JC5lYWNoKCByZXNwb25zZS5kYXRhLnJlY29yZFR5cGVJbmZvcywgZnVuY3Rpb24oIGluZGV4LCB2YWx1ZSApIHtcblx0XHRcdFx0XHRcdFx0cmVjb3JkVHlwZURlZmF1bHRNYXJrdXAgKz0gJzxvcHRpb24gdmFsdWU9XCInICsgaW5kZXggKyAnXCI+JyArIHZhbHVlICsgJzwvb3B0aW9uPic7XG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQkKCAnLnNhbGVzZm9yY2VfcmVjb3JkX3R5cGVzX2FsbG93ZWQnICkuaHRtbCggcmVjb3JkVHlwZXNBbGxvd2VkTWFya3VwICk7XG5cdFx0XHRcdFx0JCggJy5zYWxlc2ZvcmNlX3JlY29yZF90eXBlX2RlZmF1bHQnICkuaHRtbCggcmVjb3JkVHlwZURlZmF1bHRNYXJrdXAgKTtcblxuXHRcdFx0XHRcdGlmICggMCA8ICQoIHJlc3BvbnNlLmRhdGEuZmllbGRzICkubGVuZ3RoICkge1xuXHRcdFx0XHRcdFx0ZGF0ZU1hcmt1cCArPSAnPGxhYmVsIGZvcj1cInB1bGxfdHJpZ2dlcl9maWVsZFwiPkRhdGUgZmllbGQgdG8gdHJpZ2dlciBwdWxsOjwvbGFiZWw+Jztcblx0XHRcdFx0XHRcdGRhdGVNYXJrdXAgKz0gJzxzZWxlY3QgbmFtZT1cInB1bGxfdHJpZ2dlcl9maWVsZFwiIGlkPVwicHVsbF90cmlnZ2VyX2ZpZWxkXCI+PG9wdGlvbiB2YWx1ZT1cIlwiPi0gU2VsZWN0IGRhdGUgZmllbGQgLTwvb3B0aW9uPidcblx0XHRcdFx0XHRcdCQuZWFjaCggcmVzcG9uc2UuZGF0YS5maWVsZHMsIGZ1bmN0aW9uKCBpbmRleCwgdmFsdWUgKSB7XG5cdFx0XHRcdFx0XHRcdGRhdGVNYXJrdXAgKz0gJzxvcHRpb24gdmFsdWU9XCInICsgdmFsdWUubmFtZSArICdcIj4nICsgdmFsdWUubGFiZWwgKyAnPC9vcHRpb24+Jztcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0ZGF0ZU1hcmt1cCArPSAnPC9zZWxlY3Q+Jztcblx0XHRcdFx0XHRcdGRhdGVNYXJrdXAgKz0gJzxwIGNsYXNzPVwiZGVzY3JpcHRpb25cIj5UaGVzZSBhcmUgZGF0ZSBmaWVsZHMgdGhhdCBjYW4gY2F1c2UgV29yZFByZXNzIHRvIHB1bGwgYW4gdXBkYXRlIGZyb20gU2FsZXNmb3JjZSwgYWNjb3JkaW5nIHRvIHRoZSA8Y29kZT5zYWxlc2ZvcmNlX3B1bGw8L2NvZGU+IGNsYXNzLjwvcD4nXG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0JCggJy5wdWxsX3RyaWdnZXJfZmllbGQnICkuaHRtbCggZGF0ZU1hcmt1cCApO1xuXG5cdFx0XHRcdFx0aWYgKCAnJyAhPT0gcmVjb3JkVHlwZXNBbGxvd2VkTWFya3VwICkge1xuXHRcdFx0XHRcdFx0JCggJy5zYWxlc2ZvcmNlX3JlY29yZF90eXBlc19hbGxvd2VkJyApLnNob3coKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0JCggJy5zYWxlc2ZvcmNlX3JlY29yZF90eXBlc19hbGxvd2VkJyApLmhpZGUoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0aWYgKCAnJyAhPT0gcmVjb3JkVHlwZURlZmF1bHRNYXJrdXAgKSB7XG5cdFx0XHRcdFx0XHQkKCAnLnNhbGVzZm9yY2VfcmVjb3JkX3R5cGVfZGVmYXVsdCcgKS5zaG93KCk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdCQoICcuc2FsZXNmb3JjZV9yZWNvcmRfdHlwZV9kZWZhdWx0JyApLmhpZGUoKTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRpZiAoICcnICE9PSBkYXRlTWFya3VwICkge1xuXHRcdFx0XHRcdFx0JCggJy5wdWxsX3RyaWdnZXJfZmllbGQnICkuc2hvdygpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHQkKCAnLnB1bGxfdHJpZ2dlcl9maWVsZCcgKS5oaWRlKCk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aWYgKCBqUXVlcnkuZm4uc2VsZWN0MiApIHtcblx0XHRcdFx0XHRcdCQoICdzZWxlY3Qjc2FsZXNmb3JjZV9yZWNvcmRfdHlwZV9kZWZhdWx0JyApLnNlbGVjdDIoKTtcblx0XHRcdFx0XHRcdCQoICdzZWxlY3QjcHVsbF90cmlnZ2VyX2ZpZWxkJyApLnNlbGVjdDIoKTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0fSk7XG5cdFx0XHR9LCBkZWxheVRpbWUgKTtcblx0XHR9KTtcblx0fVxuXHQvKipcblx0ICogRHVwbGljYXRlcyB0aGUgZmllbGRzIGZvciBhIG5ldyByb3cgaW4gdGhlIGZpZWxkbWFwIG9wdGlvbnMgc2NyZWVuLlxuXHQgKiB0aGlzIGFwcGVhcnMgbm90IHRvIHdvcmsgd2l0aCBkYXRhKCkgaW5zdGVhZCBvZiBhdHRyKClcblx0ICovXG5cdCBmdW5jdGlvbiBhZGRGaWVsZE1hcHBpbmdSb3coKSB7XG5cdFx0JCggJyNhZGQtZmllbGQtbWFwcGluZycgKS5jbGljayggZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgc2FsZXNmb3JjZU9iamVjdCA9ICQoICcjc2FsZXNmb3JjZV9vYmplY3QnICkudmFsKCk7XG5cdFx0XHR2YXIgd29yZHByZXNzT2JqZWN0ID0gJCggJyN3b3JkcHJlc3Nfb2JqZWN0JyApLnZhbCgpO1xuXHRcdFx0dmFyIG5ld0tleSA9IG5ldyBEYXRlKCkuZ2V0VVRDTWlsbGlzZWNvbmRzKCk7XG5cdFx0XHR2YXIgbGFzdFJvdyA9ICQoICd0YWJsZS5maWVsZHMgdGJvZHkgdHInICkubGFzdCgpO1xuXHRcdFx0dmFyIG9sZEtleSA9IGxhc3RSb3cuYXR0ciggJ2RhdGEta2V5JyApO1xuXHRcdFx0b2xkS2V5ID0gbmV3IFJlZ0V4cCggb2xkS2V5LCAnZycgKTtcblx0XHRcdCQoIHRoaXMgKS50ZXh0KCAnQWRkIGFub3RoZXIgZmllbGQgbWFwcGluZycgKTtcblx0XHRcdGlmICggJycgIT09IHdvcmRwcmVzc09iamVjdCAmJiAnJyAhPT0gc2FsZXNmb3JjZU9iamVjdCApIHtcblx0XHRcdFx0ZmllbGRtYXBGaWVsZHMoIG9sZEtleSwgbmV3S2V5LCBsYXN0Um93ICk7XG5cdFx0XHRcdCQoIHRoaXMgKS5wYXJlbnQoKS5maW5kKCAnLm1pc3Npbmctb2JqZWN0JyApLnJlbW92ZSgpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0JCggdGhpcyApLnBhcmVudCgpLnByZXBlbmQoICc8ZGl2IGNsYXNzPVwiZXJyb3IgbWlzc2luZy1vYmplY3RcIj48c3Bhbj5Zb3UgaGF2ZSB0byBwaWNrIGEgV29yZFByZXNzIG9iamVjdCBhbmQgYSBTYWxlc2ZvcmNlIG9iamVjdCB0byBhZGQgZmllbGQgbWFwcGluZy48L3NwYW4+PC9kaXY+JyApO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH0pO1xuXHR9XG5cdC8qKlxuXHQgKiBDbG9uZXMgdGhlIGZpZWxkc2V0IG1hcmt1cCBwcm92aWRlZCBieSB0aGUgc2VydmVyLXNpZGUgdGVtcGxhdGUgYW5kIGFwcGVuZHMgaXQgYXQgdGhlIGVuZC5cblx0ICogdGhpcyBhcHBlYXJzIG5vdCB0byB3b3JrIHdpdGggZGF0YSgpIGluc3RlYWQgb2YgYXR0cigpXG5cdCAqIEBwYXJhbSBzdHJpbmcgb2xkS2V5IHRoZSBkYXRhIGtleSBhdHRyaWJ1dGUgb2YgdGhlIHNldCB0aGF0IGlzIGJlaW5nIGNsb25lZFxuXHQgKiBAcGFyYW0gc3RyaW5nIG5ld0tleSB0aGUgZGF0YSBrZXkgYXR0cmlidXRlIGZvciB0aGUgb25lIHdlJ3JlIGFwcGVuZGluZ1xuXHQgKiBAcGFyYW0gb2JqZWN0IGxhc3RSb3cgdGhlIGxhc3Qgc2V0IG9mIHRoZSBmaWVsZG1hcFxuXHQgKi9cblx0ZnVuY3Rpb24gZmllbGRtYXBGaWVsZHMoIG9sZEtleSwgbmV3S2V5LCBsYXN0Um93ICkge1xuXHRcdHZhciBuZXh0Um93ID0gJyc7XG4gICAgICAgIGlmICggalF1ZXJ5LmZuLnNlbGVjdDIgKSB7XG4gICAgICAgIFx0bmV4dFJvdyA9IGxhc3RSb3cuZmluZCggJ3NlbGVjdCcgKVxuXHQgICAgICAgICAgICAuc2VsZWN0MiggJ2Rlc3Ryb3knIClcblx0ICAgICAgICAgICAgLmVuZCgpXG5cdCAgICAgICAgICAgIC5jbG9uZSggdHJ1ZSApLnJlbW92ZUNsYXNzKCAnZmllbGRtYXAtdGVtcGxhdGUnICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgIFx0bmV4dFJvdyA9IGxhc3RSb3cuY2xvbmUoIHRydWUgKTtcbiAgICAgICAgfVxuXHRcdCQoIG5leHRSb3cgKS5hdHRyKCAnZGF0YS1rZXknLCBuZXdLZXkgKTtcblx0XHQkKCBuZXh0Um93ICkuZWFjaChmdW5jdGlvbigpIHtcblx0XHRcdCQoIHRoaXMgKS5odG1sKCBmdW5jdGlvbiggaSwgaCApIHtcblx0XHRcdFx0cmV0dXJuIGgucmVwbGFjZSggb2xkS2V5LCBuZXdLZXkgKTtcblx0XHRcdH0pO1xuXHRcdH0pO1xuXHRcdCQoICd0YWJsZS5maWVsZHMgdGJvZHknICkuYXBwZW5kKCBuZXh0Um93ICk7XG5cdFx0aWYgKCBqUXVlcnkuZm4uc2VsZWN0MiApIHtcblx0XHRcdGxhc3RSb3cuZmluZCggJ3NlbGVjdCcgKS5zZWxlY3QyKCk7XG5cdFx0XHRuZXh0Um93LmZpbmQoICdzZWxlY3QnICkuc2VsZWN0MigpO1xuXHRcdH1cblx0fVxuXHQvKipcblx0ICogSGFuZGxlIG1hbnVhbCBwdXNoIGFuZCBwdWxsIG9mIG9iamVjdHNcblx0ICovXG5cdGZ1bmN0aW9uIHB1c2hBbmRQdWxsT2JqZWN0cygpIHtcblx0XHQkKCAnLnNhbGVzZm9yY2VfdXNlcl9hamF4X21lc3NhZ2UnICkuaGlkZSgpO1xuXHRcdGlmICggMCA8ICQoICcjd29yZHByZXNzX29iamVjdF9hamF4JyApLmxlbmd0aCApIHtcblx0XHRcdCQoICcucHVzaF90b19zYWxlc2ZvcmNlX2J1dHRvbicgKS5vbiggJ2NsaWNrJywgZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHZhciB3b3JkcHJlc3NPYmplY3QgPSAkKCAnI3dvcmRwcmVzc19vYmplY3RfYWpheCcgKS52YWwoKTtcblx0XHRcdFx0dmFyIHdvcmRwcmVzc0lkID0gJCggJyN3b3JkcHJlc3NfaWRfYWpheCcgKS52YWwoKTtcblx0XHRcdFx0dmFyIHNhbGVzZm9yY2VJZCA9ICQoICcjc2FsZXNmb3JjZV9pZF9hamF4JyApLnZhbCgpO1xuXHRcdFx0XHR2YXIgZGF0YSA9IHtcblx0XHRcdFx0XHQnYWN0aW9uJyA6ICdwdXNoX3RvX3NhbGVzZm9yY2UnLFxuXHRcdFx0XHRcdCd3b3JkcHJlc3Nfb2JqZWN0JyA6IHdvcmRwcmVzc09iamVjdCxcblx0XHRcdFx0XHQnd29yZHByZXNzX2lkJyA6IHdvcmRwcmVzc0lkLFxuXHRcdFx0XHRcdCdzYWxlc2ZvcmNlX2lkJyA6IHNhbGVzZm9yY2VJZFxuXHRcdFx0XHR9XG5cdFx0XHRcdCQucG9zdCggYWpheHVybCwgZGF0YSwgZnVuY3Rpb24oIHJlc3BvbnNlICkge1xuXHRcdFx0XHRcdGlmICggdHJ1ZSA9PT0gcmVzcG9uc2Uuc3VjY2VzcyApIHtcblx0XHRcdFx0XHRcdHVwZGF0ZVNhbGVzZm9yY2VVc2VyU3VtbWFyeSgpO1xuXHRcdFx0XHRcdFx0JCggJy5zYWxlc2ZvcmNlX3VzZXJfYWpheF9tZXNzYWdlJyApLndpZHRoKCAkKCAnLm1hcHBlZC1zYWxlc2ZvcmNlLXVzZXInICkud2lkdGgoKSAtIDI3ICk7XG5cdFx0XHRcdFx0XHQkKCAnLnNhbGVzZm9yY2VfdXNlcl9hamF4X21lc3NhZ2UnICkuaHRtbCggJzxwPlRoaXMgb2JqZWN0IGhhcyBiZWVuIHB1c2hlZCB0byBTYWxlc2ZvcmNlLjwvcD4nICkuZmFkZUluKCkuZGVsYXkoIDQwMDAgKS5mYWRlT3V0KCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdCQoICcucHVsbF9mcm9tX3NhbGVzZm9yY2VfYnV0dG9uJyApLm9uKCAnY2xpY2snLCBmdW5jdGlvbigpIHtcblx0XHRcdHZhciBzYWxlc2ZvcmNlSWQgPSAkKCAnI3NhbGVzZm9yY2VfaWRfYWpheCcgKS52YWwoKTtcblx0XHRcdHZhciB3b3JkcHJlc3NPYmplY3QgPSAkKCAnI3dvcmRwcmVzc19vYmplY3RfYWpheCcgKS52YWwoKTtcblx0XHRcdHZhciBkYXRhID0ge1xuXHRcdFx0XHQnYWN0aW9uJyA6ICdwdWxsX2Zyb21fc2FsZXNmb3JjZScsXG5cdFx0XHRcdCdzYWxlc2ZvcmNlX2lkJyA6IHNhbGVzZm9yY2VJZCxcblx0XHRcdFx0J3dvcmRwcmVzc19vYmplY3QnIDogd29yZHByZXNzT2JqZWN0XG5cdFx0XHR9XG5cdFx0XHQkLnBvc3QoIGFqYXh1cmwsIGRhdGEsIGZ1bmN0aW9uKCByZXNwb25zZSApIHtcblx0XHRcdFx0aWYgKCB0cnVlID09PSByZXNwb25zZS5zdWNjZXNzICkge1xuXHRcdFx0XHRcdHVwZGF0ZVNhbGVzZm9yY2VVc2VyU3VtbWFyeSgpO1xuXHRcdFx0XHRcdCQoICcuc2FsZXNmb3JjZV91c2VyX2FqYXhfbWVzc2FnZScgKS53aWR0aCggJCggJy5tYXBwZWQtc2FsZXNmb3JjZS11c2VyJyApLndpZHRoKCkgLSAyNyApO1xuXHRcdFx0XHRcdCQoICcuc2FsZXNmb3JjZV91c2VyX2FqYXhfbWVzc2FnZScgKS5odG1sKCAnPHA+VGhpcyBvYmplY3QgaGFzIGJlZW4gcHVsbGVkIGZyb20gU2FsZXNmb3JjZS48L3A+JyApLmZhZGVJbigpLmRlbGF5KCA0MDAwICkuZmFkZU91dCgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9KTtcblx0fVxuXHQvKipcblx0ICogVXBkYXRlcyB0aGUgdXNlciBwcm9maWxlIHN1bW1hcnkgb2YgU2FsZXNmb3JjZSBpbmZvLlxuXHQgKi9cblx0ZnVuY3Rpb24gdXBkYXRlU2FsZXNmb3JjZVVzZXJTdW1tYXJ5KCkge1xuXHRcdHZhciBtYXBwaW5nSWQgPSAkKCAnI21hcHBpbmdfaWRfYWpheCcgKS52YWwoKTtcblx0XHR2YXIgZGF0YSA9IHtcblx0XHRcdCdhY3Rpb24nIDogJ3JlZnJlc2hfbWFwcGVkX2RhdGEnLFxuXHRcdFx0J21hcHBpbmdfaWQnIDogbWFwcGluZ0lkXG5cdFx0fVxuXHRcdCQucG9zdCggYWpheHVybCwgZGF0YSwgZnVuY3Rpb24oIHJlc3BvbnNlICkge1xuXHRcdFx0aWYgKCB0cnVlID09PSByZXNwb25zZS5zdWNjZXNzICkge1xuXHRcdFx0XHQkKCAndGQubGFzdF9zeW5jX21lc3NhZ2UnICkudGV4dCggcmVzcG9uc2UuZGF0YS5sYXN0X3N5bmNfbWVzc2FnZSApO1xuXHRcdFx0XHQkKCAndGQubGFzdF9zeW5jX2FjdGlvbicgKS50ZXh0KCByZXNwb25zZS5kYXRhLmxhc3Rfc3luY19hY3Rpb24gKTtcblx0XHRcdFx0JCggJ3RkLmxhc3Rfc3luY19zdGF0dXMnICkudGV4dCggcmVzcG9uc2UuZGF0YS5sYXN0X3N5bmNfc3RhdHVzICk7XG5cdFx0XHRcdCQoICd0ZC5sYXN0X3N5bmMnICkudGV4dCggcmVzcG9uc2UuZGF0YS5sYXN0X3N5bmMgKTtcblx0XHRcdFx0aWYgKCAnMScgPT09IHJlc3BvbnNlLmRhdGEubGFzdF9zeW5jX3N0YXR1cyApIHtcblx0XHRcdFx0XHQkKCAndGQubGFzdF9zeW5jX3N0YXR1cycgKS50ZXh0KCAnc3VjY2VzcycgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cdC8qKlxuXHQgKiBDbGVhciB0aGUgcGx1Z2luIGNhY2hlIHZpYSBBamF4IHJlcXVlc3QuXG5cdCAqL1xuXHRmdW5jdGlvbiBjbGVhclNmd3BDYWNoZUxpbmsoKSB7XG5cdFx0JCggJyNjbGVhci1zZndwLWNhY2hlJyApLmNsaWNrKCBmdW5jdGlvbigpIHtcblx0XHRcdHZhciBkYXRhID0ge1xuXHRcdFx0XHQnYWN0aW9uJyA6ICdjbGVhcl9zZndwX2NhY2hlJ1xuXHRcdFx0fVxuXHRcdFx0dmFyIHRoYXQgPSAkKCB0aGlzICk7XG5cdFx0XHQkLnBvc3QoIGFqYXh1cmwsIGRhdGEsIGZ1bmN0aW9uKCByZXNwb25zZSApIHtcblx0XHRcdFx0aWYgKCB0cnVlID09PSByZXNwb25zZS5zdWNjZXNzICYmIHRydWUgPT09IHJlc3BvbnNlLmRhdGEuc3VjY2VzcyApIHtcblx0XHRcdFx0XHR0aGF0LnBhcmVudCgpLmh0bWwoIHJlc3BvbnNlLmRhdGEubWVzc2FnZSApLmZhZGVJbigpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9KTtcblx0fVxuXG5cdC8vIGxvYWQgYXZhaWxhYmxlIG9wdGlvbnMgaWYgdGhlIHdvcmRwcmVzcyBvYmplY3QgY2hhbmdlc1xuXHQkKCBkb2N1bWVudCApLm9uKCAnY2hhbmdlJywgJ3NlbGVjdCN3b3JkcHJlc3Nfb2JqZWN0JywgZnVuY3Rpb24oKSB7XG5cdFx0dmFyIHRpbWVvdXQ7XG5cdFx0bG9hZEZpZWxkT3B0aW9ucyggJ3dvcmRwcmVzcycsICQoIHRoaXMgKS52YWwoKSApO1xuXHRcdGNsZWFyVGltZW91dCggdGltZW91dCApO1xuXHRcdHRpbWVvdXQgPSBzZXRUaW1lb3V0KCBmdW5jdGlvbigpIHtcblx0XHRcdCQoICd0YWJsZS5maWVsZHMgdGJvZHkgdHInICkuZmFkZU91dCgpO1xuXHRcdFx0JCggJ3RhYmxlLmZpZWxkcyB0Ym9keSB0cicgKS5ub3QoICcuZmllbGRtYXAtdGVtcGxhdGUnICkucmVtb3ZlKCk7XG5cdFx0fSwgMTAwMCApO1xuXHR9KTtcblxuXHQvLyBsb2FkIGF2YWlsYWJsZSBvcHRpb25zIGlmIHRoZSBzYWxlc2ZvcmNlIG9iamVjdCBjaGFuZ2VzXG5cdCQoIGRvY3VtZW50ICkub24oICdjaGFuZ2UnLCAnc2VsZWN0I3NhbGVzZm9yY2Vfb2JqZWN0JywgZnVuY3Rpb24oKSB7XG5cdFx0dmFyIHRpbWVvdXQ7XG5cdFx0bG9hZEZpZWxkT3B0aW9ucyggJ3NhbGVzZm9yY2UnLCAkKCB0aGlzICkudmFsKCkgKTtcblx0XHRjbGVhclRpbWVvdXQoIHRpbWVvdXQgKTtcblx0XHR0aW1lb3V0ID0gc2V0VGltZW91dCggZnVuY3Rpb24oKSB7XG5cdFx0XHQkKCAndGFibGUuZmllbGRzIHRib2R5IHRyJyApLmZhZGVPdXQoKTtcblx0XHRcdCQoICd0YWJsZS5maWVsZHMgdGJvZHkgdHInICkubm90KCAnLmZpZWxkbWFwLXRlbXBsYXRlJyApLnJlbW92ZSgpO1xuXHRcdH0sIDEwMDAgKTtcblx0fSk7XG5cblx0Ly8gRG9uJ3Qgc2hvdyB0aGUgV1NETCBmaWxlIGZpZWxkIHVubGVzcyBTT0FQIGlzIGVuYWJsZWRcblx0JCggZG9jdW1lbnQgKS5vbiggJ2NoYW5nZScsICcub2JqZWN0LXN5bmMtZm9yLXNhbGVzZm9yY2UtZW5hYmxlLXNvYXAgaW5wdXQnLCBmdW5jdGlvbigpIHtcblx0XHR0b2dnbGVTb2FwRmllbGRzKCk7XG5cdH0pO1xuXG5cdC8qKlxuXHQgKiBBcyB0aGUgRHJ1cGFsIHBsdWdpbiBkb2VzLCB3ZSBvbmx5IGFsbG93IG9uZSBmaWVsZCB0byBiZSBhIHByZW1hdGNoXG5cdCAqL1xuXHQkKCBkb2N1bWVudCApLm9uKCAnY2xpY2snLCAnLmNvbHVtbi1pc19wcmVtYXRjaCBpbnB1dCcsIGZ1bmN0aW9uKCkge1xuXHRcdCQoICcuY29sdW1uLWlzX3ByZW1hdGNoIGlucHV0JyApLm5vdCggdGhpcyApLnByb3AoICdjaGVja2VkJywgZmFsc2UgKTtcblx0fSk7XG5cdC8qKlxuXHQgKiBBcyB0aGUgRHJ1cGFsIHBsdWdpbiBkb2VzLCB3ZSBvbmx5IGFsbG93IG9uZSBmaWVsZCB0byBiZSBhIGtleVxuXHQgKi9cblx0JCggZG9jdW1lbnQgKS5vbiggJ2NsaWNrJywgJy5jb2x1bW4taXNfa2V5IGlucHV0JywgZnVuY3Rpb24oKSB7XG5cdFx0JCggJy5jb2x1bW4taXNfa2V5IGlucHV0JyApLm5vdCggdGhpcyApLnByb3AoICdjaGVja2VkJywgZmFsc2UgKTtcblx0fSk7XG5cdC8qKlxuXHQgKiBXaGVuIHRoZSBwbHVnaW4gbG9hZHMsIGluaXRpYWxpemUgb3IgZW5hYmxlIHRoaW5nczpcblx0ICogU2VsZWN0MiBvbiBzZWxlY3QgZmllbGRzXG5cdCAqIENsZWFyIGZpZWxkcyB3aGVuIHRoZSB0YXJnZXRlZCBXb3JkUHJlc3Mgb3IgU2FsZXNmb3JjZSBvYmplY3QgdHlwZSBjaGFuZ2VzXG5cdCAqIE1hbmFnZSB0aGUgZGlzcGxheSBmb3IgU2FsZXNmb3JjZSBvYmplY3QgZmllbGRzIGJhc2VkIG9uIEFQSSByZXBvbnNlXG5cdCAqIE1hbnVhbCBwdXNoIGFuZCBwdWxsXG5cdCAqIENsZWFyaW5nIHRoZSBjYWNoZVxuXHQgKi9cblx0JCggZG9jdW1lbnQgKS5yZWFkeSggZnVuY3Rpb24oKSB7XG5cblx0XHQvLyBEb24ndCBzaG93IHRoZSBXU0RMIGZpbGUgZmllbGQgdW5sZXNzIFNPQVAgaXMgZW5hYmxlZFxuXHRcdHRvZ2dsZVNvYXBGaWVsZHMoKTtcblxuXHRcdC8vIGlmIHRoZXJlIGlzIGFscmVhZHkgYSB3cCBvciBzZiBvYmplY3QsIG1ha2Ugc3VyZSBpdCBoYXMgdGhlIHJpZ2h0IGZpZWxkcyB3aGVuIHRoZSBwYWdlIGxvYWRzXG5cdFx0bG9hZEZpZWxkT3B0aW9ucyggJ3dvcmRwcmVzcycsICQoICdzZWxlY3Qjd29yZHByZXNzX29iamVjdCcgKS52YWwoKSApO1xuXHRcdGxvYWRGaWVsZE9wdGlvbnMoICdzYWxlc2ZvcmNlJywgJCggJ3NlbGVjdCNzYWxlc2ZvcmNlX29iamVjdCcgKS52YWwoKSApO1xuXG5cdFx0Ly8gc2V0dXAgdGhlIHNlbGVjdDIgZmllbGRzIGlmIHRoZSBsaWJyYXJ5IGlzIHByZXNlbnRcblx0XHRpZiAoIGpRdWVyeS5mbi5zZWxlY3QyICkge1xuXHRcdFx0JCggJ3NlbGVjdCN3b3JkcHJlc3Nfb2JqZWN0JyApLnNlbGVjdDIoKTtcblx0XHRcdCQoICdzZWxlY3Qjc2FsZXNmb3JjZV9vYmplY3QnICkuc2VsZWN0MigpO1xuXHRcdFx0JCggJ3NlbGVjdCNzYWxlc2ZvcmNlX3JlY29yZF90eXBlX2RlZmF1bHQnICkuc2VsZWN0MigpO1xuXHRcdFx0JCggJ3NlbGVjdCNwdWxsX3RyaWdnZXJfZmllbGQnICkuc2VsZWN0MigpO1xuXHRcdFx0JCggJy5jb2x1bW4td29yZHByZXNzX2ZpZWxkIHNlbGVjdCcgKS5zZWxlY3QyKCk7XG5cdFx0XHQkKCAnLmNvbHVtbi1zYWxlc2ZvcmNlX2ZpZWxkIHNlbGVjdCcgKS5zZWxlY3QyKCk7XG5cdFx0fVxuXG5cdFx0Ly8gZ2V0IHRoZSBhdmFpbGFibGUgU2FsZXNmb3JjZSBvYmplY3QgY2hvaWNlc1xuXHRcdHNhbGVzZm9yY2VPYmplY3RGaWVsZHMoKTtcblxuXHRcdC8vIER1cGxpY2F0ZSB0aGUgZmllbGRzIGZvciBhIG5ldyByb3cgaW4gdGhlIGZpZWxkbWFwIG9wdGlvbnMgc2NyZWVuLlxuXHRcdGFkZEZpZWxkTWFwcGluZ1JvdygpO1xuXG5cdFx0Ly8gSGFuZGxlIG1hbnVhbCBwdXNoIGFuZCBwdWxsIG9mIG9iamVjdHNcblx0XHRwdXNoQW5kUHVsbE9iamVjdHMoKTtcblxuXHRcdC8vIENsZWFyIHRoZSBwbHVnaW4gY2FjaGUgdmlhIEFqYXggcmVxdWVzdC5cblx0XHRjbGVhclNmd3BDYWNoZUxpbmsoKTtcblx0fSk7XG59KCBqUXVlcnkgKSApO1xuIl19 diff --git a/assets/js/object-sync-for-salesforce-admin.min.js b/assets/js/object-sync-for-salesforce-admin.min.js index c690c3ff..083f0810 100644 --- a/assets/js/object-sync-for-salesforce-admin.min.js +++ b/assets/js/object-sync-for-salesforce-admin.min.js @@ -1 +1 @@ -"use strict";!function(c){function t(s,e){var t={action:"get_"+s+"_object_fields"},a=".column-"+s+"_field select",o="",l=c(a+" option").first().text();if(""===c(a).val()){if(o+='","wordpress"===s)t.wordpress_object=e;else{if("salesforce"!==s)return o;t.salesforce_object=e}c.post(ajaxurl,t,function(e){c.each(e.data.fields,function(e,t){"wordpress"===s?o+='":"salesforce"===s&&(o+='")}),c(a).html(o)})}}function e(){0 *").length&&c(".salesforce_record_types_allowed").hide(),0===c(".salesforce_record_type_default > *").length&&c(".salesforce_record_type_default").hide(),0===c(".pull_trigger_field > *").length&&c(".pull_trigger_field").hide(),c("#salesforce_object").on("change",function(){var t=this;e(function(){var e={action:"get_salesforce_object_description",include:["fields","recordTypeInfos"],field_type:"datetime",salesforce_object:t.value};c.post(ajaxurl,e,function(e){var s="",a="",o="";0Allowed Record Types:
',c.each(e.data.recordTypeInfos,function(e,t){s+='"}),s+="
",a+='',a+='',c.each(e.data.fields,function(e,t){o+='"}),o+="",o+='

These are date fields that can cause WordPress to pull an update from Salesforce, according to the salesforce_pull class.

'),c(".pull_trigger_field").html(o),""!==s?c(".salesforce_record_types_allowed").show():c(".salesforce_record_types_allowed").hide(),""!==a?c(".salesforce_record_type_default").show():c(".salesforce_record_type_default").hide(),""!==o?c(".pull_trigger_field").show():c(".pull_trigger_field").hide(),jQuery.fn.select2&&(c("select#salesforce_record_type_default").select2(),c("select#pull_trigger_field").select2())})},1e3)})}function a(){c("#add-field-mapping").click(function(){var e=c("#salesforce_object").val(),t=c("#wordpress_object").val(),s=(new Date).getUTCMilliseconds(),a=c("table.fields tbody tr").last(),o=a.attr("data-key");return o=new RegExp(o,"g"),c(this).text("Add another field mapping"),""!==t&&""!==e?(function(s,a,e){var t="";t=jQuery.fn.select2?e.find("select").select2("destroy").end().clone(!0).removeClass("fieldmap-template"):e.clone(!0);c(t).attr("data-key",a),c(t).each(function(){c(this).html(function(e,t){return t.replace(s,a)})}),c("table.fields tbody").append(t),jQuery.fn.select2&&(e.find("select").select2(),t.find("select").select2())}(o,s,a),c(this).parent().find(".missing-object").remove()):c(this).parent().prepend('
You have to pick a WordPress object and a Salesforce object to add field mapping.
'),!1})}function o(){var e={action:"refresh_mapped_data",mapping_id:c("#mapping_id_ajax").val()};c.post(ajaxurl,e,function(e){!0===e.success&&(c("td.last_sync_message").text(e.data.last_sync_message),c("td.last_sync_action").text(e.data.last_sync_action),c("td.last_sync_status").text(e.data.last_sync_status),c("td.last_sync").text(e.data.last_sync),"1"===e.data.last_sync_status&&c("td.last_sync_status").text("success"))})}c(document).on("change","select#wordpress_object",function(){var e;t("wordpress",c(this).val()),clearTimeout(e),e=setTimeout(function(){c("table.fields tbody tr").fadeOut(),c("table.fields tbody tr").not(".fieldmap-template").remove()},1e3)}),c(document).on("change","select#salesforce_object",function(){var e;t("salesforce",c(this).val()),clearTimeout(e),e=setTimeout(function(){c("table.fields tbody tr").fadeOut(),c("table.fields tbody tr").not(".fieldmap-template").remove()},1e3)}),c(document).on("change",".object-sync-for-salesforce-enable-soap input",function(){e()}),c(document).on("click",".column-is_prematch input",function(){c(".column-is_prematch input").not(this).prop("checked",!1)}),c(document).on("click",".column-is_key input",function(){c(".column-is_key input").not(this).prop("checked",!1)}),c(document).ready(function(){e(),t("wordpress",c("select#wordpress_object").val()),t("salesforce",c("select#salesforce_object").val()),jQuery.fn.select2&&(c("select#wordpress_object").select2(),c("select#salesforce_object").select2(),c("select#salesforce_record_type_default").select2(),c("select#pull_trigger_field").select2(),c(".column-wordpress_field select").select2(),c(".column-salesforce_field select").select2()),c(document).ajaxStart(function(){c(".spinner").addClass("is-active")}).ajaxStop(function(){c(".spinner").removeClass("is-active")}),s(),a(),c(".salesforce_user_ajax_message").hide(),0This object has been pushed to Salesforce.

").fadeIn().delay(4e3).fadeOut())}),!1}),c(".pull_from_salesforce_button").on("click",function(){var e={action:"pull_from_salesforce",salesforce_id:c("#salesforce_id_ajax").val(),wordpress_object:c("#wordpress_object_ajax").val()};return c.post(ajaxurl,e,function(e){!0===e.success&&(o(),c(".salesforce_user_ajax_message").width(c(".mapped-salesforce-user").width()-27),c(".salesforce_user_ajax_message").html("

This object has been pulled from Salesforce.

").fadeIn().delay(4e3).fadeOut())}),!1}),c("#clear-sfwp-cache").click(function(){var t=c(this);return c.post(ajaxurl,{action:"clear_sfwp_cache"},function(e){!0===e.success&&!0===e.data.success&&t.parent().html(e.data.message).fadeIn()}),!1})})}(jQuery); \ No newline at end of file +"use strict";!function(c){function s(t,e){var s={action:"get_"+t+"_object_fields"},a=".column-"+t+"_field select",o="",l=c(a+" option").first().text();if(""===c(a).val()){if(o+='","wordpress"===t)s.wordpress_object=e;else{if("salesforce"!==t)return o;s.salesforce_object=e}c.ajax({type:"POST",url:ajaxurl,data:s,beforeSend:function(){c(".spinner-"+t).addClass("is-active")},success:function(e){c.each(e.data.fields,function(e,s){"wordpress"===t?o+='":"salesforce"===t&&(o+='")}),c(a).html(o)},complete:function(){c(".spinner-"+t).removeClass("is-active")}})}}function e(){0 *").length&&c(".salesforce_record_types_allowed").hide(),0===c(".salesforce_record_type_default > *").length&&c(".salesforce_record_type_default").hide(),0===c(".pull_trigger_field > *").length&&c(".pull_trigger_field").hide(),c("#salesforce_object").on("change",function(){var s=this;e(function(){var e={action:"get_salesforce_object_description",include:["fields","recordTypeInfos"],field_type:"datetime",salesforce_object:s.value};c.post(ajaxurl,e,function(e){var t="",a="",o="";0Allowed Record Types:
',c.each(e.data.recordTypeInfos,function(e,s){t+='"}),t+="
",a+='',a+='',c.each(e.data.fields,function(e,s){o+='"}),o+="",o+='

These are date fields that can cause WordPress to pull an update from Salesforce, according to the salesforce_pull class.

'),c(".pull_trigger_field").html(o),""!==t?c(".salesforce_record_types_allowed").show():c(".salesforce_record_types_allowed").hide(),""!==a?c(".salesforce_record_type_default").show():c(".salesforce_record_type_default").hide(),""!==o?c(".pull_trigger_field").show():c(".pull_trigger_field").hide(),jQuery.fn.select2&&(c("select#salesforce_record_type_default").select2(),c("select#pull_trigger_field").select2())})},1e3)})}function a(){c("#add-field-mapping").click(function(){var e=c("#salesforce_object").val(),s=c("#wordpress_object").val(),t=(new Date).getUTCMilliseconds(),a=c("table.fields tbody tr").last(),o=a.attr("data-key");return o=new RegExp(o,"g"),c(this).text("Add another field mapping"),""!==s&&""!==e?(function(t,a,e){var s="";s=jQuery.fn.select2?e.find("select").select2("destroy").end().clone(!0).removeClass("fieldmap-template"):e.clone(!0);c(s).attr("data-key",a),c(s).each(function(){c(this).html(function(e,s){return s.replace(t,a)})}),c("table.fields tbody").append(s),jQuery.fn.select2&&(e.find("select").select2(),s.find("select").select2())}(o,t,a),c(this).parent().find(".missing-object").remove()):c(this).parent().prepend('
You have to pick a WordPress object and a Salesforce object to add field mapping.
'),!1})}function o(){var e={action:"refresh_mapped_data",mapping_id:c("#mapping_id_ajax").val()};c.post(ajaxurl,e,function(e){!0===e.success&&(c("td.last_sync_message").text(e.data.last_sync_message),c("td.last_sync_action").text(e.data.last_sync_action),c("td.last_sync_status").text(e.data.last_sync_status),c("td.last_sync").text(e.data.last_sync),"1"===e.data.last_sync_status&&c("td.last_sync_status").text("success"))})}c(document).on("change","select#wordpress_object",function(){var e;s("wordpress",c(this).val()),clearTimeout(e),e=setTimeout(function(){c("table.fields tbody tr").fadeOut(),c("table.fields tbody tr").not(".fieldmap-template").remove()},1e3)}),c(document).on("change","select#salesforce_object",function(){var e;s("salesforce",c(this).val()),clearTimeout(e),e=setTimeout(function(){c("table.fields tbody tr").fadeOut(),c("table.fields tbody tr").not(".fieldmap-template").remove()},1e3)}),c(document).on("change",".object-sync-for-salesforce-enable-soap input",function(){e()}),c(document).on("click",".column-is_prematch input",function(){c(".column-is_prematch input").not(this).prop("checked",!1)}),c(document).on("click",".column-is_key input",function(){c(".column-is_key input").not(this).prop("checked",!1)}),c(document).ready(function(){e(),s("wordpress",c("select#wordpress_object").val()),s("salesforce",c("select#salesforce_object").val()),jQuery.fn.select2&&(c("select#wordpress_object").select2(),c("select#salesforce_object").select2(),c("select#salesforce_record_type_default").select2(),c("select#pull_trigger_field").select2(),c(".column-wordpress_field select").select2(),c(".column-salesforce_field select").select2()),t(),a(),c(".salesforce_user_ajax_message").hide(),0This object has been pushed to Salesforce.

").fadeIn().delay(4e3).fadeOut())}),!1}),c(".pull_from_salesforce_button").on("click",function(){var e={action:"pull_from_salesforce",salesforce_id:c("#salesforce_id_ajax").val(),wordpress_object:c("#wordpress_object_ajax").val()};return c.post(ajaxurl,e,function(e){!0===e.success&&(o(),c(".salesforce_user_ajax_message").width(c(".mapped-salesforce-user").width()-27),c(".salesforce_user_ajax_message").html("

This object has been pulled from Salesforce.

").fadeIn().delay(4e3).fadeOut())}),!1}),c("#clear-sfwp-cache").click(function(){var s=c(this);return c.post(ajaxurl,{action:"clear_sfwp_cache"},function(e){!0===e.success&&!0===e.data.success&&s.parent().html(e.data.message).fadeIn()}),!1})})}(jQuery); \ No newline at end of file diff --git a/assets/js/src/admin.js b/assets/js/src/admin.js index 7a34c5d6..358cfa30 100644 --- a/assets/js/src/admin.js +++ b/assets/js/src/admin.js @@ -157,6 +157,7 @@ } /** * Duplicates the fields for a new row in the fieldmap options screen. + * this appears not to work with data() instead of attr() */ function addFieldMappingRow() { $( '#add-field-mapping' ).click( function() { @@ -178,8 +179,9 @@ } /** * Clones the fieldset markup provided by the server-side template and appends it at the end. - * @param string oldKey the data-key attribute of the set that is being cloned - * @param string newKey the data-key attribute for the one we're appending + * this appears not to work with data() instead of attr() + * @param string oldKey the data key attribute of the set that is being cloned + * @param string newKey the data key attribute for the one we're appending * @param object lastRow the last set of the fieldmap */ function fieldmapFields( oldKey, newKey, lastRow ) { From a43754216f0ae68cf8a4ea50b1e9ef00b1c84bdc Mon Sep 17 00:00:00 2001 From: Jonathan Stegall Date: Sun, 5 Jan 2020 14:05:13 -0600 Subject: [PATCH 16/27] update the changelog --- changelog.md | 1 + 1 file changed, 1 insertion(+) diff --git a/changelog.md b/changelog.md index d12c9133..3e66d944 100644 --- a/changelog.md +++ b/changelog.md @@ -4,6 +4,7 @@ Changelog * 1.9.0 () * Feature: when pushing or pulling the `wp_capabilities` field on a WordPress user, treat the data as WordPress needs it to assign roles. Thanks to WordPress user @emilyb6116 for reporting this and for testing the fix. * Feature: Hide admin menu items that won't work pre-authorization until the plugin is authorized with Salesforce. Thanks to WordPress user mgparisi for pointing this out. + * Maintenance: when adding new fields to a fieldmap, we use a server-side template instead of duplicating the markup in JavaScript. This makes it easier to change the structure of the fieldmap screen. * 1.8.12 (2019-09-19) * Bug fix: fix the `object_sync_for_salesforce_pull_query_modify` filter to prevent SOQL query properties from being added multiple times. From f50a65419f776143ce32c30f5de99b1a589a6bb7 Mon Sep 17 00:00:00 2001 From: Jonathan Stegall Date: Sun, 5 Jan 2020 14:26:10 -0600 Subject: [PATCH 17/27] fix incorrect colspan --- changelog.md | 2 +- templates/admin/fieldmaps-list.php | 8 +++++--- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/changelog.md b/changelog.md index 3e66d944..16a31428 100644 --- a/changelog.md +++ b/changelog.md @@ -4,7 +4,7 @@ Changelog * 1.9.0 () * Feature: when pushing or pulling the `wp_capabilities` field on a WordPress user, treat the data as WordPress needs it to assign roles. Thanks to WordPress user @emilyb6116 for reporting this and for testing the fix. * Feature: Hide admin menu items that won't work pre-authorization until the plugin is authorized with Salesforce. Thanks to WordPress user mgparisi for pointing this out. - * Maintenance: when adding new fields to a fieldmap, we use a server-side template instead of duplicating the markup in JavaScript. This makes it easier to change the structure of the fieldmap screen. + * Maintenance: When adding new fields to a fieldmap, this changes the JavaScript so it clones a server-side template instead of duplicating the markup in JavaScript. This makes it easier to change the structure of the fieldmap screen. * 1.8.12 (2019-09-19) * Bug fix: fix the `object_sync_for_salesforce_pull_query_modify` filter to prevent SOQL query properties from being added multiple times. diff --git a/templates/admin/fieldmaps-list.php b/templates/admin/fieldmaps-list.php index aa66b473..34a2e7be 100644 --- a/templates/admin/fieldmaps-list.php +++ b/templates/admin/fieldmaps-list.php @@ -10,11 +10,12 @@ - +

%2$s' . esc_html__( ' to make sure you can map the most recent data structures.', 'object-sync-for-salesforce' ), + echo sprintf( + esc_html__( 'Has your WordPress or Salesforce data structure changed? ', 'object-sync-for-salesforce' ) . '%2$s' . esc_html__( ' to make sure you can map the most recent data structures.', 'object-sync-for-salesforce' ), esc_url( get_admin_url( null, 'options-general.php?page=object-sync-salesforce-admin&tab=clear_cache' ) ), esc_html__( 'Clear the plugin cache' ) ); @@ -47,7 +48,8 @@

%2$s.', + echo sprintf( + esc_html__( 'No fieldmaps exist yet. You can ', 'object-sync-for-salesforce' ) . '%2$s.', esc_url( get_admin_url( null, 'options-general.php?page=object-sync-salesforce-admin&tab=fieldmaps&method=add' ) ), esc_html__( 'add one' ) ); From 3e5e4a5e9b716e6a92a4e7131786d6f3cd14fad6 Mon Sep 17 00:00:00 2001 From: Jonathan Stegall Date: Sun, 5 Jan 2020 19:37:59 -0600 Subject: [PATCH 18/27] use iife to combine javascript and prepend it --- Gulpfile.js | 6 + assets/js/object-sync-for-salesforce-admin.js | 668 +++++++++--------- .../object-sync-for-salesforce-admin.min.js | 2 +- package-lock.json | 12 + package.json | 1 + 5 files changed, 354 insertions(+), 335 deletions(-) diff --git a/Gulpfile.js b/Gulpfile.js index d33adef7..ab358b54 100644 --- a/Gulpfile.js +++ b/Gulpfile.js @@ -7,6 +7,7 @@ const cssnano = require('cssnano'); const eslint = require('gulp-eslint'); const fs = require('fs'); const gulp = require('gulp'); +const iife = require('gulp-iife'); const imagemin = require('gulp-imagemin'); const packagejson = JSON.parse(fs.readFileSync('./package.json')); const mqpacker = require( 'css-mqpacker' ); @@ -88,6 +89,11 @@ function adminscripts() { .pipe(concat(packagejson.name + '-admin.js')) // Concatenate .pipe(sourcemaps.write()) .pipe(eslint()) + .pipe(iife({ + useStrict: false, + params: ['$'], + args: ['jQuery'] + })) .pipe(gulp.dest(config.scripts.dest)) .pipe(browserSync.stream()); } diff --git a/assets/js/object-sync-for-salesforce-admin.js b/assets/js/object-sync-for-salesforce-admin.js index e2314f59..7e0b774d 100644 --- a/assets/js/object-sync-for-salesforce-admin.js +++ b/assets/js/object-sync-for-salesforce-admin.js @@ -1,385 +1,385 @@ +;(function($) { "use strict"; -(function ($) { - /** - * Gets the WordPress and Salesforce field results via an Ajax call - * @param string system whether we want WordPress or Salesforce data - * @param string object_name the value for the object name from the the + */ +function loadFieldOptions(system, object_name) { + var data = { + 'action': 'get_' + system + '_object_fields' + }; + var selectField = '.column-' + system + '_field select'; + var fields = ''; + var first_field = $(selectField + ' option').first().text(); + + if ('' !== $(selectField).val()) { + return; + } + + fields += ''; + + if ('wordpress' === system) { + data['wordpress_object'] = object_name; + } else if ('salesforce' === system) { + data['salesforce_object'] = object_name; + } else { + return fields; + } - if ('' !== $(selectField).val()) { - return; + $.ajax({ + type: 'POST', + url: ajaxurl, + data: data, + beforeSend: function beforeSend() { + $('.spinner-' + system).addClass('is-active'); + }, + success: function success(response) { + $.each(response.data.fields, function (index, value) { + if ('wordpress' === system) { + fields += ''; + } else if ('salesforce' === system) { + fields += ''; + } + }); + $(selectField).html(fields); + }, + complete: function complete() { + $('.spinner-' + system).removeClass('is-active'); } + }); +} +/** + * Don't show the WSDL file field unless SOAP is enabled + */ - fields += ''; - if ('wordpress' === system) { - data['wordpress_object'] = object_name; - } else if ('salesforce' === system) { - data['salesforce_object'] = object_name; +function toggleSoapFields() { + if (0 < $('.object-sync-for-salesforce-enable-soap').length) { + if ($('.object-sync-for-salesforce-enable-soap input').is(':checked')) { + $('.object-sync-for-salesforce-soap-wsdl-path').show(); } else { - return fields; + $('.object-sync-for-salesforce-soap-wsdl-path').hide(); } - - $.ajax({ - type: 'POST', - url: ajaxurl, - data: data, - beforeSend: function beforeSend() { - $('.spinner-' + system).addClass('is-active'); - }, - success: function success(response) { - $.each(response.data.fields, function (index, value) { - if ('wordpress' === system) { - fields += ''; - } else if ('salesforce' === system) { - fields += ''; - } - }); - $(selectField).html(fields); - }, - complete: function complete() { - $('.spinner-' + system).removeClass('is-active'); - } - }); } - /** - * Don't show the WSDL file field unless SOAP is enabled - */ +} +/** + * Generates the Salesforce object fields based on the dropdown activity and API results. + * This also generates other query fields that are object-specific, like date fields, record types allowed, etc. + */ + + +function salesforceObjectFields() { + var delay = function () { + var timer = 0; + return function (callback, ms) { + clearTimeout(timer); + timer = setTimeout(callback, ms); + }; + }(); + if (0 === $('.salesforce_record_types_allowed > *').length) { + $('.salesforce_record_types_allowed').hide(); + } - function toggleSoapFields() { - if (0 < $('.object-sync-for-salesforce-enable-soap').length) { - if ($('.object-sync-for-salesforce-enable-soap input').is(':checked')) { - $('.object-sync-for-salesforce-soap-wsdl-path').show(); - } else { - $('.object-sync-for-salesforce-soap-wsdl-path').hide(); - } - } + if (0 === $('.salesforce_record_type_default > *').length) { + $('.salesforce_record_type_default').hide(); } - /** - * Generates the Salesforce object fields based on the dropdown activity and API results. - * This also generates other query fields that are object-specific, like date fields, record types allowed, etc. - */ - - - function salesforceObjectFields() { - var delay = function () { - var timer = 0; - return function (callback, ms) { - clearTimeout(timer); - timer = setTimeout(callback, ms); - }; - }(); - if (0 === $('.salesforce_record_types_allowed > *').length) { - $('.salesforce_record_types_allowed').hide(); - } + if (0 === $('.pull_trigger_field > *').length) { + $('.pull_trigger_field').hide(); + } - if (0 === $('.salesforce_record_type_default > *').length) { - $('.salesforce_record_type_default').hide(); - } + $('#salesforce_object').on('change', function () { + var that = this; + var delayTime = 1000; + delay(function () { + var data = { + 'action': 'get_salesforce_object_description', + 'include': ['fields', 'recordTypeInfos'], + 'field_type': 'datetime', + 'salesforce_object': that.value + }; + $.post(ajaxurl, data, function (response) { + var recordTypesAllowedMarkup = '', + recordTypeDefaultMarkup = '', + dateMarkup = ''; + + if (0 < $(response.data.recordTypeInfos).length) { + recordTypesAllowedMarkup += '

'; + $.each(response.data.recordTypeInfos, function (index, value) { + recordTypesAllowedMarkup += ''; + }); + recordTypesAllowedMarkup += '
'; + recordTypeDefaultMarkup += ''; + recordTypeDefaultMarkup += ''; + $.each(response.data.fields, function (index, value) { + dateMarkup += ''; + }); + dateMarkup += ''; + dateMarkup += '

These are date fields that can cause WordPress to pull an update from Salesforce, according to the salesforce_pull class.

'; + } - $('#salesforce_object').on('change', function () { - var that = this; - var delayTime = 1000; - delay(function () { - var data = { - 'action': 'get_salesforce_object_description', - 'include': ['fields', 'recordTypeInfos'], - 'field_type': 'datetime', - 'salesforce_object': that.value - }; - $.post(ajaxurl, data, function (response) { - var recordTypesAllowedMarkup = '', - recordTypeDefaultMarkup = '', - dateMarkup = ''; - - if (0 < $(response.data.recordTypeInfos).length) { - recordTypesAllowedMarkup += '
'; - $.each(response.data.recordTypeInfos, function (index, value) { - recordTypesAllowedMarkup += ''; - }); - recordTypesAllowedMarkup += '
'; - recordTypeDefaultMarkup += ''; - recordTypeDefaultMarkup += ''; - $.each(response.data.fields, function (index, value) { - dateMarkup += ''; - }); - dateMarkup += ''; - dateMarkup += '

These are date fields that can cause WordPress to pull an update from Salesforce, according to the salesforce_pull class.

'; - } - - $('.pull_trigger_field').html(dateMarkup); - - if ('' !== recordTypesAllowedMarkup) { - $('.salesforce_record_types_allowed').show(); - } else { - $('.salesforce_record_types_allowed').hide(); - } - - if ('' !== recordTypeDefaultMarkup) { - $('.salesforce_record_type_default').show(); - } else { - $('.salesforce_record_type_default').hide(); - } - - if ('' !== dateMarkup) { - $('.pull_trigger_field').show(); - } else { - $('.pull_trigger_field').hide(); - } - - if (jQuery.fn.select2) { - $('select#salesforce_record_type_default').select2(); - $('select#pull_trigger_field').select2(); - } - }); - }, delayTime); - }); - } - /** - * Duplicates the fields for a new row in the fieldmap options screen. - * this appears not to work with data() instead of attr() - */ - - - function addFieldMappingRow() { - $('#add-field-mapping').click(function () { - var salesforceObject = $('#salesforce_object').val(); - var wordpressObject = $('#wordpress_object').val(); - var newKey = new Date().getUTCMilliseconds(); - var lastRow = $('table.fields tbody tr').last(); - var oldKey = lastRow.attr('data-key'); - oldKey = new RegExp(oldKey, 'g'); - $(this).text('Add another field mapping'); - - if ('' !== wordpressObject && '' !== salesforceObject) { - fieldmapFields(oldKey, newKey, lastRow); - $(this).parent().find('.missing-object').remove(); - } else { - $(this).parent().prepend('
You have to pick a WordPress object and a Salesforce object to add field mapping.
'); - } + $('.pull_trigger_field').html(dateMarkup); - return false; - }); - } - /** - * Clones the fieldset markup provided by the server-side template and appends it at the end. - * this appears not to work with data() instead of attr() - * @param string oldKey the data key attribute of the set that is being cloned - * @param string newKey the data key attribute for the one we're appending - * @param object lastRow the last set of the fieldmap - */ + if ('' !== recordTypesAllowedMarkup) { + $('.salesforce_record_types_allowed').show(); + } else { + $('.salesforce_record_types_allowed').hide(); + } + if ('' !== recordTypeDefaultMarkup) { + $('.salesforce_record_type_default').show(); + } else { + $('.salesforce_record_type_default').hide(); + } - function fieldmapFields(oldKey, newKey, lastRow) { - var nextRow = ''; + if ('' !== dateMarkup) { + $('.pull_trigger_field').show(); + } else { + $('.pull_trigger_field').hide(); + } - if (jQuery.fn.select2) { - nextRow = lastRow.find('select').select2('destroy').end().clone(true).removeClass('fieldmap-template'); + if (jQuery.fn.select2) { + $('select#salesforce_record_type_default').select2(); + $('select#pull_trigger_field').select2(); + } + }); + }, delayTime); + }); +} +/** + * Duplicates the fields for a new row in the fieldmap options screen. + * this appears not to work with data() instead of attr() + */ + + +function addFieldMappingRow() { + $('#add-field-mapping').click(function () { + var salesforceObject = $('#salesforce_object').val(); + var wordpressObject = $('#wordpress_object').val(); + var newKey = new Date().getUTCMilliseconds(); + var lastRow = $('table.fields tbody tr').last(); + var oldKey = lastRow.attr('data-key'); + oldKey = new RegExp(oldKey, 'g'); + $(this).text('Add another field mapping'); + + if ('' !== wordpressObject && '' !== salesforceObject) { + fieldmapFields(oldKey, newKey, lastRow); + $(this).parent().find('.missing-object').remove(); } else { - nextRow = lastRow.clone(true); + $(this).parent().prepend('
You have to pick a WordPress object and a Salesforce object to add field mapping.
'); } - $(nextRow).attr('data-key', newKey); - $(nextRow).each(function () { - $(this).html(function (i, h) { - return h.replace(oldKey, newKey); - }); + return false; + }); +} +/** + * Clones the fieldset markup provided by the server-side template and appends it at the end. + * this appears not to work with data() instead of attr() + * @param string oldKey the data key attribute of the set that is being cloned + * @param string newKey the data key attribute for the one we're appending + * @param object lastRow the last set of the fieldmap + */ + + +function fieldmapFields(oldKey, newKey, lastRow) { + var nextRow = ''; + + if (jQuery.fn.select2) { + nextRow = lastRow.find('select').select2('destroy').end().clone(true).removeClass('fieldmap-template'); + } else { + nextRow = lastRow.clone(true); + } + + $(nextRow).attr('data-key', newKey); + $(nextRow).each(function () { + $(this).html(function (i, h) { + return h.replace(oldKey, newKey); }); - $('table.fields tbody').append(nextRow); + }); + $('table.fields tbody').append(nextRow); - if (jQuery.fn.select2) { - lastRow.find('select').select2(); - nextRow.find('select').select2(); - } + if (jQuery.fn.select2) { + lastRow.find('select').select2(); + nextRow.find('select').select2(); } - /** - * Handle manual push and pull of objects - */ - - - function pushAndPullObjects() { - $('.salesforce_user_ajax_message').hide(); - - if (0 < $('#wordpress_object_ajax').length) { - $('.push_to_salesforce_button').on('click', function () { - var wordpressObject = $('#wordpress_object_ajax').val(); - var wordpressId = $('#wordpress_id_ajax').val(); - var salesforceId = $('#salesforce_id_ajax').val(); - var data = { - 'action': 'push_to_salesforce', - 'wordpress_object': wordpressObject, - 'wordpress_id': wordpressId, - 'salesforce_id': salesforceId - }; - $.post(ajaxurl, data, function (response) { - if (true === response.success) { - updateSalesforceUserSummary(); - $('.salesforce_user_ajax_message').width($('.mapped-salesforce-user').width() - 27); - $('.salesforce_user_ajax_message').html('

This object has been pushed to Salesforce.

').fadeIn().delay(4000).fadeOut(); - } - }); - return false; - }); - } +} +/** + * Handle manual push and pull of objects + */ - $('.pull_from_salesforce_button').on('click', function () { - var salesforceId = $('#salesforce_id_ajax').val(); + +function pushAndPullObjects() { + $('.salesforce_user_ajax_message').hide(); + + if (0 < $('#wordpress_object_ajax').length) { + $('.push_to_salesforce_button').on('click', function () { var wordpressObject = $('#wordpress_object_ajax').val(); + var wordpressId = $('#wordpress_id_ajax').val(); + var salesforceId = $('#salesforce_id_ajax').val(); var data = { - 'action': 'pull_from_salesforce', - 'salesforce_id': salesforceId, - 'wordpress_object': wordpressObject + 'action': 'push_to_salesforce', + 'wordpress_object': wordpressObject, + 'wordpress_id': wordpressId, + 'salesforce_id': salesforceId }; $.post(ajaxurl, data, function (response) { if (true === response.success) { updateSalesforceUserSummary(); $('.salesforce_user_ajax_message').width($('.mapped-salesforce-user').width() - 27); - $('.salesforce_user_ajax_message').html('

This object has been pulled from Salesforce.

').fadeIn().delay(4000).fadeOut(); + $('.salesforce_user_ajax_message').html('

This object has been pushed to Salesforce.

').fadeIn().delay(4000).fadeOut(); } }); return false; }); } - /** - * Updates the user profile summary of Salesforce info. - */ - - function updateSalesforceUserSummary() { - var mappingId = $('#mapping_id_ajax').val(); + $('.pull_from_salesforce_button').on('click', function () { + var salesforceId = $('#salesforce_id_ajax').val(); + var wordpressObject = $('#wordpress_object_ajax').val(); var data = { - 'action': 'refresh_mapped_data', - 'mapping_id': mappingId + 'action': 'pull_from_salesforce', + 'salesforce_id': salesforceId, + 'wordpress_object': wordpressObject }; $.post(ajaxurl, data, function (response) { if (true === response.success) { - $('td.last_sync_message').text(response.data.last_sync_message); - $('td.last_sync_action').text(response.data.last_sync_action); - $('td.last_sync_status').text(response.data.last_sync_status); - $('td.last_sync').text(response.data.last_sync); - - if ('1' === response.data.last_sync_status) { - $('td.last_sync_status').text('success'); - } + updateSalesforceUserSummary(); + $('.salesforce_user_ajax_message').width($('.mapped-salesforce-user').width() - 27); + $('.salesforce_user_ajax_message').html('

This object has been pulled from Salesforce.

').fadeIn().delay(4000).fadeOut(); } }); - } - /** - * Clear the plugin cache via Ajax request. - */ - - - function clearSfwpCacheLink() { - $('#clear-sfwp-cache').click(function () { - var data = { - 'action': 'clear_sfwp_cache' - }; - var that = $(this); - $.post(ajaxurl, data, function (response) { - if (true === response.success && true === response.data.success) { - that.parent().html(response.data.message).fadeIn(); - } - }); - return false; - }); - } // load available options if the wordpress object changes - - - $(document).on('change', 'select#wordpress_object', function () { - var timeout; - loadFieldOptions('wordpress', $(this).val()); - clearTimeout(timeout); - timeout = setTimeout(function () { - $('table.fields tbody tr').fadeOut(); - $('table.fields tbody tr').not('.fieldmap-template').remove(); - }, 1000); - }); // load available options if the salesforce object changes - - $(document).on('change', 'select#salesforce_object', function () { - var timeout; - loadFieldOptions('salesforce', $(this).val()); - clearTimeout(timeout); - timeout = setTimeout(function () { - $('table.fields tbody tr').fadeOut(); - $('table.fields tbody tr').not('.fieldmap-template').remove(); - }, 1000); - }); // Don't show the WSDL file field unless SOAP is enabled - - $(document).on('change', '.object-sync-for-salesforce-enable-soap input', function () { - toggleSoapFields(); - }); - /** - * As the Drupal plugin does, we only allow one field to be a prematch - */ - - $(document).on('click', '.column-is_prematch input', function () { - $('.column-is_prematch input').not(this).prop('checked', false); + return false; }); - /** - * As the Drupal plugin does, we only allow one field to be a key - */ - - $(document).on('click', '.column-is_key input', function () { - $('.column-is_key input').not(this).prop('checked', false); +} +/** + * Updates the user profile summary of Salesforce info. + */ + + +function updateSalesforceUserSummary() { + var mappingId = $('#mapping_id_ajax').val(); + var data = { + 'action': 'refresh_mapped_data', + 'mapping_id': mappingId + }; + $.post(ajaxurl, data, function (response) { + if (true === response.success) { + $('td.last_sync_message').text(response.data.last_sync_message); + $('td.last_sync_action').text(response.data.last_sync_action); + $('td.last_sync_status').text(response.data.last_sync_status); + $('td.last_sync').text(response.data.last_sync); + + if ('1' === response.data.last_sync_status) { + $('td.last_sync_status').text('success'); + } + } }); - /** - * When the plugin loads, initialize or enable things: - * Select2 on select fields - * Clear fields when the targeted WordPress or Salesforce object type changes - * Manage the display for Salesforce object fields based on API reponse - * Manual push and pull - * Clearing the cache - */ - - $(document).ready(function () { - // Don't show the WSDL file field unless SOAP is enabled - toggleSoapFields(); // if there is already a wp or sf object, make sure it has the right fields when the page loads - - loadFieldOptions('wordpress', $('select#wordpress_object').val()); - loadFieldOptions('salesforce', $('select#salesforce_object').val()); // setup the select2 fields if the library is present +} +/** + * Clear the plugin cache via Ajax request. + */ - if (jQuery.fn.select2) { - $('select#wordpress_object').select2(); - $('select#salesforce_object').select2(); - $('select#salesforce_record_type_default').select2(); - $('select#pull_trigger_field').select2(); - $('.column-wordpress_field select').select2(); - $('.column-salesforce_field select').select2(); - } // get the available Salesforce object choices - - salesforceObjectFields(); // Duplicate the fields for a new row in the fieldmap options screen. - - addFieldMappingRow(); // Handle manual push and pull of objects - - pushAndPullObjects(); // Clear the plugin cache via Ajax request. - - clearSfwpCacheLink(); +function clearSfwpCacheLink() { + $('#clear-sfwp-cache').click(function () { + var data = { + 'action': 'clear_sfwp_cache' + }; + var that = $(this); + $.post(ajaxurl, data, function (response) { + if (true === response.success && true === response.data.success) { + that.parent().html(response.data.message).fadeIn(); + } + }); + return false; }); -})(jQuery); -//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFkbWluLmpzIl0sIm5hbWVzIjpbIiQiLCJsb2FkRmllbGRPcHRpb25zIiwic3lzdGVtIiwib2JqZWN0X25hbWUiLCJkYXRhIiwic2VsZWN0RmllbGQiLCJmaWVsZHMiLCJmaXJzdF9maWVsZCIsImZpcnN0IiwidGV4dCIsInZhbCIsImFqYXgiLCJ0eXBlIiwidXJsIiwiYWpheHVybCIsImJlZm9yZVNlbmQiLCJhZGRDbGFzcyIsInN1Y2Nlc3MiLCJyZXNwb25zZSIsImVhY2giLCJpbmRleCIsInZhbHVlIiwia2V5IiwibmFtZSIsImxhYmVsIiwiaHRtbCIsImNvbXBsZXRlIiwicmVtb3ZlQ2xhc3MiLCJ0b2dnbGVTb2FwRmllbGRzIiwibGVuZ3RoIiwiaXMiLCJzaG93IiwiaGlkZSIsInNhbGVzZm9yY2VPYmplY3RGaWVsZHMiLCJkZWxheSIsInRpbWVyIiwiY2FsbGJhY2siLCJtcyIsImNsZWFyVGltZW91dCIsInNldFRpbWVvdXQiLCJvbiIsInRoYXQiLCJkZWxheVRpbWUiLCJwb3N0IiwicmVjb3JkVHlwZXNBbGxvd2VkTWFya3VwIiwicmVjb3JkVHlwZURlZmF1bHRNYXJrdXAiLCJkYXRlTWFya3VwIiwicmVjb3JkVHlwZUluZm9zIiwialF1ZXJ5IiwiZm4iLCJzZWxlY3QyIiwiYWRkRmllbGRNYXBwaW5nUm93IiwiY2xpY2siLCJzYWxlc2ZvcmNlT2JqZWN0Iiwid29yZHByZXNzT2JqZWN0IiwibmV3S2V5IiwiRGF0ZSIsImdldFVUQ01pbGxpc2Vjb25kcyIsImxhc3RSb3ciLCJsYXN0Iiwib2xkS2V5IiwiYXR0ciIsIlJlZ0V4cCIsImZpZWxkbWFwRmllbGRzIiwicGFyZW50IiwiZmluZCIsInJlbW92ZSIsInByZXBlbmQiLCJuZXh0Um93IiwiZW5kIiwiY2xvbmUiLCJpIiwiaCIsInJlcGxhY2UiLCJhcHBlbmQiLCJwdXNoQW5kUHVsbE9iamVjdHMiLCJ3b3JkcHJlc3NJZCIsInNhbGVzZm9yY2VJZCIsInVwZGF0ZVNhbGVzZm9yY2VVc2VyU3VtbWFyeSIsIndpZHRoIiwiZmFkZUluIiwiZmFkZU91dCIsIm1hcHBpbmdJZCIsImxhc3Rfc3luY19tZXNzYWdlIiwibGFzdF9zeW5jX2FjdGlvbiIsImxhc3Rfc3luY19zdGF0dXMiLCJsYXN0X3N5bmMiLCJjbGVhclNmd3BDYWNoZUxpbmsiLCJtZXNzYWdlIiwiZG9jdW1lbnQiLCJ0aW1lb3V0Iiwibm90IiwicHJvcCIsInJlYWR5Il0sIm1hcHBpbmdzIjoiOztBQUFFLFdBQVVBLENBQVYsRUFBYztBQUVmOzs7OztBQUtBLFdBQVNDLGdCQUFULENBQTJCQyxNQUEzQixFQUFtQ0MsV0FBbkMsRUFBaUQ7QUFDaEQsUUFBSUMsSUFBSSxHQUFHO0FBQ1YsZ0JBQVcsU0FBU0YsTUFBVCxHQUFrQjtBQURuQixLQUFYO0FBR0EsUUFBSUcsV0FBVyxHQUFHLGFBQWFILE1BQWIsR0FBc0IsZUFBeEM7QUFDQSxRQUFJSSxNQUFNLEdBQUcsRUFBYjtBQUNBLFFBQUlDLFdBQVcsR0FBR1AsQ0FBQyxDQUFFSyxXQUFXLEdBQUcsU0FBaEIsQ0FBRCxDQUE0QkcsS0FBNUIsR0FBb0NDLElBQXBDLEVBQWxCOztBQUNBLFFBQUssT0FBT1QsQ0FBQyxDQUFFSyxXQUFGLENBQUQsQ0FBaUJLLEdBQWpCLEVBQVosRUFBcUM7QUFDcEM7QUFDQTs7QUFDREosSUFBQUEsTUFBTSxJQUFJLHNCQUFzQkMsV0FBdEIsR0FBb0MsV0FBOUM7O0FBQ0EsUUFBSyxnQkFBZ0JMLE1BQXJCLEVBQThCO0FBQzdCRSxNQUFBQSxJQUFJLENBQUMsa0JBQUQsQ0FBSixHQUEyQkQsV0FBM0I7QUFDQSxLQUZELE1BRU8sSUFBSyxpQkFBaUJELE1BQXRCLEVBQStCO0FBQ3JDRSxNQUFBQSxJQUFJLENBQUMsbUJBQUQsQ0FBSixHQUE0QkQsV0FBNUI7QUFDQSxLQUZNLE1BRUE7QUFDTixhQUFPRyxNQUFQO0FBQ0E7O0FBRUROLElBQUFBLENBQUMsQ0FBQ1csSUFBRixDQUFPO0FBQ05DLE1BQUFBLElBQUksRUFBRSxNQURBO0FBRU5DLE1BQUFBLEdBQUcs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Q0FBRCxDQUFjSSxLQUFkLENBQXFCLFlBQVc7QUFFL0I7QUFDQWpFLElBQUFBLGdCQUFnQixHQUhlLENBSy9COztBQUNBM0IsSUFBQUEsZ0JBQWdCLENBQUUsV0FBRixFQUFlRCxDQUFDLENBQUUseUJBQUYsQ0FBRCxDQUErQlUsR0FBL0IsRUFBZixDQUFoQjtBQUNBVCxJQUFBQSxnQkFBZ0IsQ0FBRSxZQUFGLEVBQWdCRCxDQUFDLENBQUUsMEJBQUYsQ0FBRCxDQUFnQ1UsR0FBaEMsRUFBaEIsQ0FBaEIsQ0FQK0IsQ0FTL0I7O0FBQ0EsUUFBS3NDLE1BQU0sQ0FBQ0MsRUFBUCxDQUFVQyxPQUFmLEVBQXlCO0FBQ3hCbEQsTUFBQUEsQ0FBQyxDQUFFLHlCQUFGLENBQUQsQ0FBK0JrRCxPQUEvQjtBQUNBbEQsTUFBQUEsQ0FBQyxDQUFFLDBCQUFGLENBQUQsQ0FBZ0NrRCxPQUFoQztBQUNBbEQsTUFBQUEsQ0FBQyxDQUFFLHVDQUFGLENBQUQsQ0FBNkNrRCxPQUE3QztBQUNBbEQsTUFBQUEsQ0FBQyxDQUFFLDJCQUFGLENBQUQsQ0FBaUNrRCxPQUFqQztBQUNBbEQsTUFBQUEsQ0FBQyxDQUFFLGdDQUFGLENBQUQsQ0FBc0NrRCxPQUF0QztBQUNBbEQsTUFBQUEsQ0FBQyxDQUFFLGlDQUFGLENBQUQsQ0FBdUNrRCxPQUF2QztBQUNBLEtBakI4QixDQW1CL0I7OztBQUNBakIsSUFBQUEsc0JBQXNCLEdBcEJTLENBc0IvQjs7QUFDQWtCLElBQUFBLGtCQUFrQixHQXZCYSxDQXlCL0I7O0FBQ0F3QixJQUFBQSxrQkFBa0IsR0ExQmEsQ0E0Qi9COztBQUNBWSxJQUFBQSxrQkFBa0I7QUFDbEIsR0E5QkQ7QUErQkEsQ0FqWEMsRUFpWEN2QyxNQWpYRCxDQUFGIiwiZmlsZSI6Im9iamVjdC1zeW5jLWZvci1zYWxlc2ZvcmNlLWFkbWluLmpzIiwic291cmNlc0NvbnRlbnQiOlsiKCBmdW5jdGlvbiggJCApIHtcblxuXHQvKipcblx0ICogR2V0cyB0aGUgV29yZFByZXNzIGFuZCBTYWxlc2ZvcmNlIGZpZWxkIHJlc3VsdHMgdmlhIGFuIEFqYXggY2FsbFxuXHQgKiBAcGFyYW0gc3RyaW5nIHN5c3RlbSB3aGV0aGVyIHdlIHdhbnQgV29yZFByZXNzIG9yIFNhbGVzZm9yY2UgZGF0YVxuXHQgKiBAcGFyYW0gc3RyaW5nIG9iamVjdF9uYW1lIHRoZSB2YWx1ZSBmb3IgdGhlIG9iamVjdCBuYW1lIGZyb20gdGhlIHRoZSA8c2VsZWN0PlxuXHQgKi9cblx0ZnVuY3Rpb24gbG9hZEZpZWxkT3B0aW9ucyggc3lzdGVtLCBvYmplY3RfbmFtZSApIHtcblx0XHR2YXIgZGF0YSA9IHtcblx0XHRcdCdhY3Rpb24nIDogJ2dldF8nICsgc3lzdGVtICsgJ19vYmplY3RfZmllbGRzJyxcblx0XHR9XG5cdFx0dmFyIHNlbGVjdEZpZWxkID0gJy5jb2x1bW4tJyArIHN5c3RlbSArICdfZmllbGQgc2VsZWN0Jztcblx0XHR2YXIgZmllbGRzID0gJyc7XG5cdFx0dmFyIGZpcnN0X2ZpZWxkID0gJCggc2VsZWN0RmllbGQgKyAnIG9wdGlvbicpLmZpcnN0KCkudGV4dCgpO1xuXHRcdGlmICggJycgIT09ICQoIHNlbGVjdEZpZWxkICkudmFsKCkgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGZpZWxkcyArPSAnPG9wdGlvbiB2YWx1ZT1cIlwiPicgKyBmaXJzdF9maWVsZCArICc8L29wdGlvbj4nO1xuXHRcdGlmICggJ3dvcmRwcmVzcycgPT09IHN5c3RlbSApIHtcblx0XHRcdGRhdGFbJ3dvcmRwcmVzc19vYmplY3QnXSA9IG9iamVjdF9uYW1lO1xuXHRcdH0gZWxzZSBpZiAoICdzYWxlc2ZvcmNlJyA9PT0gc3lzdGVtICkge1xuXHRcdFx0ZGF0YVsnc2FsZXNmb3JjZV9vYmplY3QnXSA9IG9iamVjdF9uYW1lO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gZmllbGRzO1xuXHRcdH1cblxuXHRcdCQuYWpheCh7XG5cdFx0XHR0eXBlOiAnUE9TVCcsXG5cdFx0XHR1cmw6IGFqYXh1cmwsXG5cdFx0XHRkYXRhOiBkYXRhLFxuXHRcdFx0YmVmb3JlU2VuZDogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdCQoICcuc3Bpbm5lci0nICsgc3lzdGVtICkuYWRkQ2xhc3MoICdpcy1hY3RpdmUnICk7XG5cdFx0XHR9LFxuICAgIFx0XHRzdWNjZXNzOiBmdW5jdGlvbiggcmVzcG9uc2UgKSB7XG4gICAgXHRcdFx0JC5lYWNoKCByZXNwb25zZS5kYXRhLmZpZWxkcywgZnVuY3Rpb24oIGluZGV4LCB2YWx1ZSApIHtcblx0XHRcdFx0XHRpZiAoICd3b3JkcHJlc3MnID09PSBzeXN0ZW0gKSB7XG5cdFx0XHRcdFx0XHRmaWVsZHMgKz0gJzxvcHRpb24gdmFsdWU9XCInICsgdmFsdWUua2V5ICsgJ1wiPicgKyB2YWx1ZS5rZXkgKyAnPC9vcHRpb24+Jztcblx0XHRcdFx0XHR9IGVsc2UgaWYgKCAnc2FsZXNmb3JjZScgPT09IHN5c3RlbSApIHtcblx0XHRcdFx0XHRcdGZpZWxkcyArPSAnPG9wdGlvbiB2YWx1ZT1cIicgKyB2YWx1ZS5uYW1lICsgJ1wiPicgKyB2YWx1ZS5sYWJlbCArICc8L29wdGlvbj4nO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHRcdCQoIHNlbGVjdEZpZWxkICkuaHRtbCggZmllbGRzICk7XG4gICAgXHRcdH0sXG4gICAgXHRcdGNvbXBsZXRlOiBmdW5jdGlvbiAoKSB7XG4gICAgXHRcdFx0JCggJy5zcGlubmVyLScgKyBzeXN0ZW0gKS5yZW1vdmVDbGFzcyggJ2lzLWFjdGl2ZScgKTtcbiAgICBcdFx0fVxuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIERvbid0IHNob3cgdGhlIFdTREwgZmlsZSBmaWVsZCB1bmxlc3MgU09BUCBpcyBlbmFibGVkXG5cdCAqL1xuXHRmdW5jdGlvbiB0b2dnbGVTb2FwRmllbGRzKCkge1xuXHRcdGlmICggMCA8ICQoICcub2JqZWN0LXN5bmMtZm9yLXNhbGVzZm9yY2UtZW5hYmxlLXNvYXAnICkubGVuZ3RoICkge1xuXHRcdFx0aWYgKCAkKCAnLm9iamVjdC1zeW5jLWZvci1zYWxlc2ZvcmNlLWVuYWJsZS1zb2FwIGlucHV0JyApLmlzKCAnOmNoZWNrZWQnICkgKSB7XG5cdFx0XHRcdCQoICcub2JqZWN0LXN5bmMtZm9yLXNhbGVzZm9yY2Utc29hcC13c2RsLXBhdGgnICkuc2hvdygpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0JCggJy5vYmplY3Qtc3luYy1mb3Itc2FsZXNmb3JjZS1zb2FwLXdzZGwtcGF0aCcgKS5oaWRlKCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEdlbmVyYXRlcyB0aGUgU2FsZXNmb3JjZSBvYmplY3QgZmllbGRzIGJhc2VkIG9uIHRoZSBkcm9wZG93biBhY3Rpdml0eSBhbmQgQVBJIHJlc3VsdHMuXG5cdCAqIFRoaXMgYWxzbyBnZW5lcmF0ZXMgb3RoZXIgcXVlcnkgZmllbGRzIHRoYXQgYXJlIG9iamVjdC1zcGVjaWZpYywgbGlrZSBkYXRlIGZpZWxkcywgcmVjb3JkIHR5cGVzIGFsbG93ZWQsIGV0Yy5cblx0ICovXG5cdGZ1bmN0aW9uIHNhbGVzZm9yY2VPYmplY3RGaWVsZHMoKSB7XG5cblx0XHR2YXIgZGVsYXkgPSAoIGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIHRpbWVyID0gMDtcblx0XHRcdHJldHVybiBmdW5jdGlvbiggY2FsbGJhY2ssIG1zICkge1xuXHRcdFx0XHRjbGVhclRpbWVvdXQgKCB0aW1lciApO1xuXHRcdFx0XHR0aW1lciA9IHNldFRpbWVvdXQoIGNhbGxiYWNrLCBtcyApO1xuXHRcdFx0fTtcblx0XHR9KCkgKTtcblxuXHRcdGlmICggMCA9PT0gJCggJy5zYWxlc2ZvcmNlX3JlY29yZF90eXBlc19hbGxvd2VkID4gKicgKS5sZW5ndGggKSB7XG5cdFx0XHQkKCAnLnNhbGVzZm9yY2VfcmVjb3JkX3R5cGVzX2FsbG93ZWQnICkuaGlkZSgpO1xuXHRcdH1cblxuXHRcdGlmICggMCA9PT0gJCggJy5zYWxlc2ZvcmNlX3JlY29yZF90eXBlX2RlZmF1bHQgPiAqJyApLmxlbmd0aCApIHtcblx0XHRcdCQoICcuc2FsZXNmb3JjZV9yZWNvcmRfdHlwZV9kZWZhdWx0JyApLmhpZGUoKTtcblx0XHR9XG5cdFx0aWYgKCAwID09PSAkKCAnLnB1bGxfdHJpZ2dlcl9maWVsZCA+IConICkubGVuZ3RoICkge1xuXHRcdFx0JCggJy5wdWxsX3RyaWdnZXJfZmllbGQnICkuaGlkZSgpO1xuXHRcdH1cblxuXHRcdCQoICcjc2FsZXNmb3JjZV9vYmplY3QnICkub24oICdjaGFuZ2UnLCBmdW5jdGlvbigpIHtcblx0XHRcdHZhciB0aGF0ID0gdGhpcztcblx0XHRcdHZhciBkZWxheVRpbWUgPSAxMDAwO1xuXHRcdFx0ZGVsYXkoIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHR2YXIgZGF0YSA9IHtcblx0XHRcdFx0XHQnYWN0aW9uJyA6ICdnZXRfc2FsZXNmb3JjZV9vYmplY3RfZGVzY3JpcHRpb24nLFxuXHRcdFx0XHRcdCdpbmNsdWRlJyA6IFsgJ2ZpZWxkcycsICdyZWNvcmRUeXBlSW5mb3MnIF0sXG5cdFx0XHRcdFx0J2ZpZWxkX3R5cGUnIDogJ2RhdGV0aW1lJyxcblx0XHRcdFx0XHQnc2FsZXNmb3JjZV9vYmplY3QnIDogdGhhdC52YWx1ZVxuXHRcdFx0XHR9XG5cdFx0XHRcdCQucG9zdCggYWpheHVybCwgZGF0YSwgZnVuY3Rpb24oIHJlc3BvbnNlICkge1xuXG5cdFx0XHRcdFx0dmFyIHJlY29yZFR5cGVzQWxsb3dlZE1hcmt1cCA9ICcnLCByZWNvcmRUeXBlRGVmYXVsdE1hcmt1cCA9ICcnLCBkYXRlTWFya3VwID0gJyc7XG5cblx0XHRcdFx0XHRpZiAoIDAgPCAkKCByZXNwb25zZS5kYXRhLnJlY29yZFR5cGVJbmZvcyApLmxlbmd0aCApIHtcblx0XHRcdFx0XHRcdHJlY29yZFR5cGVzQWxsb3dlZE1hcmt1cCArPSAnPGxhYmVsIGZvcj1cInNhbGVzZm9yY2VfcmVjb3JkX3R5cGVzX2FsbG93ZWRcIj5BbGxvd2VkIFJlY29yZCBUeXBlczo8L2xhYmVsPjxkaXYgY2xhc3M9XCJjaGVja2JveGVzXCI+Jztcblx0XHRcdFx0XHRcdCQuZWFjaCggcmVzcG9uc2UuZGF0YS5yZWNvcmRUeXBlSW5mb3MsIGZ1bmN0aW9uKCBpbmRleCwgdmFsdWUgKSB7XG5cdFx0XHRcdFx0XHRcdHJlY29yZFR5cGVzQWxsb3dlZE1hcmt1cCArPSAnPGxhYmVsPjxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBjbGFzcz1cImZvcm0tY2hlY2tib3hcIiB2YWx1ZT1cIicgKyBpbmRleCArICdcIiBuYW1lPVwic2FsZXNmb3JjZV9yZWNvcmRfdHlwZXNfYWxsb3dlZFsnICsgaW5kZXggKyAnXVwiIGlkPVwic2FsZXNmb3JjZV9yZWNvcmRfdHlwZXNfYWxsb3dlZC0nICsgaW5kZXggKyAnXCI+ICcgKyB2YWx1ZSArICc8L2xhYmVsPic7XG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdHJlY29yZFR5cGVzQWxsb3dlZE1hcmt1cCArPSAnPC9kaXY+JztcblxuXG5cdFx0XHRcdFx0XHRyZWNvcmRUeXBlRGVmYXVsdE1hcmt1cCArPSAnPGxhYmVsIGZvcj1cInNhbGVzZm9yY2VfcmVjb3JkX3R5cGVfZGVmYXVsdFwiPkRlZmF1bHQgUmVjb3JkIFR5cGU6PC9sYWJlbD4nO1xuXHRcdFx0XHRcdFx0cmVjb3JkVHlwZURlZmF1bHRNYXJrdXAgKz0gJzxzZWxlY3QgbmFtZT1cInNhbGVzZm9yY2VfcmVjb3JkX3R5cGVfZGVmYXVsdFwiIGlkPVwic2FsZXNmb3JjZV9yZWNvcmRfdHlwZV9kZWZhdWx0XCI+PG9wdGlvbiB2YWx1ZT1cIlwiPi0gU2VsZWN0IHJlY29yZCB0eXBlIC08L29wdGlvbj4nO1xuXHRcdFx0XHRcdFx0JC5lYWNoKCByZXNwb25zZS5kYXRhLnJlY29yZFR5cGVJbmZvcywgZnVuY3Rpb24oIGluZGV4LCB2YWx1ZSApIHtcblx0XHRcdFx0XHRcdFx0cmVjb3JkVHlwZURlZmF1bHRNYXJrdXAgKz0gJzxvcHRpb24gdmFsdWU9XCInICsgaW5kZXggKyAnXCI+JyArIHZhbHVlICsgJzwvb3B0aW9uPic7XG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQkKCAnLnNhbGVzZm9yY2VfcmVjb3JkX3R5cGVzX2FsbG93ZWQnICkuaHRtbCggcmVjb3JkVHlwZXNBbGxvd2VkTWFya3VwICk7XG5cdFx0XHRcdFx0JCggJy5zYWxlc2ZvcmNlX3JlY29yZF90eXBlX2RlZmF1bHQnICkuaHRtbCggcmVjb3JkVHlwZURlZmF1bHRNYXJrdXAgKTtcblxuXHRcdFx0XHRcdGlmICggMCA8ICQoIHJlc3BvbnNlLmRhdGEuZmllbGRzICkubGVuZ3RoICkge1xuXHRcdFx0XHRcdFx0ZGF0ZU1hcmt1cCArPSAnPGxhYmVsIGZvcj1cInB1bGxfdHJpZ2dlcl9maWVsZFwiPkRhdGUgZmllbGQgdG8gdHJpZ2dlciBwdWxsOjwvbGFiZWw+Jztcblx0XHRcdFx0XHRcdGRhdGVNYXJrdXAgKz0gJzxzZWxlY3QgbmFtZT1cInB1bGxfdHJpZ2dlcl9maWVsZFwiIGlkPVwicHVsbF90cmlnZ2VyX2ZpZWxkXCI+PG9wdGlvbiB2YWx1ZT1cIlwiPi0gU2VsZWN0IGRhdGUgZmllbGQgLTwvb3B0aW9uPidcblx0XHRcdFx0XHRcdCQuZWFjaCggcmVzcG9uc2UuZGF0YS5maWVsZHMsIGZ1bmN0aW9uKCBpbmRleCwgdmFsdWUgKSB7XG5cdFx0XHRcdFx0XHRcdGRhdGVNYXJrdXAgKz0gJzxvcHRpb24gdmFsdWU9XCInICsgdmFsdWUubmFtZSArICdcIj4nICsgdmFsdWUubGFiZWwgKyAnPC9vcHRpb24+Jztcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0ZGF0ZU1hcmt1cCArPSAnPC9zZWxlY3Q+Jztcblx0XHRcdFx0XHRcdGRhdGVNYXJrdXAgKz0gJzxwIGNsYXNzPVwiZGVzY3JpcHRpb25cIj5UaGVzZSBhcmUgZGF0ZSBmaWVsZHMgdGhhdCBjYW4gY2F1c2UgV29yZFByZXNzIHRvIHB1bGwgYW4gdXBkYXRlIGZyb20gU2FsZXNmb3JjZSwgYWNjb3JkaW5nIHRvIHRoZSA8Y29kZT5zYWxlc2ZvcmNlX3B1bGw8L2NvZGU+IGNsYXNzLjwvcD4nXG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0JCggJy5wdWxsX3RyaWdnZXJfZmllbGQnICkuaHRtbCggZGF0ZU1hcmt1cCApO1xuXG5cdFx0XHRcdFx0aWYgKCAnJyAhPT0gcmVjb3JkVHlwZXNBbGxvd2VkTWFya3VwICkge1xuXHRcdFx0XHRcdFx0JCggJy5zYWxlc2ZvcmNlX3JlY29yZF90eXBlc19hbGxvd2VkJyApLnNob3coKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0JCggJy5zYWxlc2ZvcmNlX3JlY29yZF90eXBlc19hbGxvd2VkJyApLmhpZGUoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0aWYgKCAnJyAhPT0gcmVjb3JkVHlwZURlZmF1bHRNYXJrdXAgKSB7XG5cdFx0XHRcdFx0XHQkKCAnLnNhbGVzZm9yY2VfcmVjb3JkX3R5cGVfZGVmYXVsdCcgKS5zaG93KCk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdCQoICcuc2FsZXNmb3JjZV9yZWNvcmRfdHlwZV9kZWZhdWx0JyApLmhpZGUoKTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRpZiAoICcnICE9PSBkYXRlTWFya3VwICkge1xuXHRcdFx0XHRcdFx0JCggJy5wdWxsX3RyaWdnZXJfZmllbGQnICkuc2hvdygpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHQkKCAnLnB1bGxfdHJpZ2dlcl9maWVsZCcgKS5oaWRlKCk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aWYgKCBqUXVlcnkuZm4uc2VsZWN0MiApIHtcblx0XHRcdFx0XHRcdCQoICdzZWxlY3Qjc2FsZXNmb3JjZV9yZWNvcmRfdHlwZV9kZWZhdWx0JyApLnNlbGVjdDIoKTtcblx0XHRcdFx0XHRcdCQoICdzZWxlY3QjcHVsbF90cmlnZ2VyX2ZpZWxkJyApLnNlbGVjdDIoKTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0fSk7XG5cdFx0XHR9LCBkZWxheVRpbWUgKTtcblx0XHR9KTtcblx0fVxuXHQvKipcblx0ICogRHVwbGljYXRlcyB0aGUgZmllbGRzIGZvciBhIG5ldyByb3cgaW4gdGhlIGZpZWxkbWFwIG9wdGlvbnMgc2NyZWVuLlxuXHQgKiB0aGlzIGFwcGVhcnMgbm90IHRvIHdvcmsgd2l0aCBkYXRhKCkgaW5zdGVhZCBvZiBhdHRyKClcblx0ICovXG5cdCBmdW5jdGlvbiBhZGRGaWVsZE1hcHBpbmdSb3coKSB7XG5cdFx0JCggJyNhZGQtZmllbGQtbWFwcGluZycgKS5jbGljayggZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgc2FsZXNmb3JjZU9iamVjdCA9ICQoICcjc2FsZXNmb3JjZV9vYmplY3QnICkudmFsKCk7XG5cdFx0XHR2YXIgd29yZHByZXNzT2JqZWN0ID0gJCggJyN3b3JkcHJlc3Nfb2JqZWN0JyApLnZhbCgpO1xuXHRcdFx0dmFyIG5ld0tleSA9IG5ldyBEYXRlKCkuZ2V0VVRDTWlsbGlzZWNvbmRzKCk7XG5cdFx0XHR2YXIgbGFzdFJvdyA9ICQoICd0YWJsZS5maWVsZHMgdGJvZHkgdHInICkubGFzdCgpO1xuXHRcdFx0dmFyIG9sZEtleSA9IGxhc3RSb3cuYXR0ciggJ2RhdGEta2V5JyApO1xuXHRcdFx0b2xkS2V5ID0gbmV3IFJlZ0V4cCggb2xkS2V5LCAnZycgKTtcblx0XHRcdCQoIHRoaXMgKS50ZXh0KCAnQWRkIGFub3RoZXIgZmllbGQgbWFwcGluZycgKTtcblx0XHRcdGlmICggJycgIT09IHdvcmRwcmVzc09iamVjdCAmJiAnJyAhPT0gc2FsZXNmb3JjZU9iamVjdCApIHtcblx0XHRcdFx0ZmllbGRtYXBGaWVsZHMoIG9sZEtleSwgbmV3S2V5LCBsYXN0Um93ICk7XG5cdFx0XHRcdCQoIHRoaXMgKS5wYXJlbnQoKS5maW5kKCAnLm1pc3Npbmctb2JqZWN0JyApLnJlbW92ZSgpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0JCggdGhpcyApLnBhcmVudCgpLnByZXBlbmQoICc8ZGl2IGNsYXNzPVwiZXJyb3IgbWlzc2luZy1vYmplY3RcIj48c3Bhbj5Zb3UgaGF2ZSB0byBwaWNrIGEgV29yZFByZXNzIG9iamVjdCBhbmQgYSBTYWxlc2ZvcmNlIG9iamVjdCB0byBhZGQgZmllbGQgbWFwcGluZy48L3NwYW4+PC9kaXY+JyApO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH0pO1xuXHR9XG5cdC8qKlxuXHQgKiBDbG9uZXMgdGhlIGZpZWxkc2V0IG1hcmt1cCBwcm92aWRlZCBieSB0aGUgc2VydmVyLXNpZGUgdGVtcGxhdGUgYW5kIGFwcGVuZHMgaXQgYXQgdGhlIGVuZC5cblx0ICogdGhpcyBhcHBlYXJzIG5vdCB0byB3b3JrIHdpdGggZGF0YSgpIGluc3RlYWQgb2YgYXR0cigpXG5cdCAqIEBwYXJhbSBzdHJpbmcgb2xkS2V5IHRoZSBkYXRhIGtleSBhdHRyaWJ1dGUgb2YgdGhlIHNldCB0aGF0IGlzIGJlaW5nIGNsb25lZFxuXHQgKiBAcGFyYW0gc3RyaW5nIG5ld0tleSB0aGUgZGF0YSBrZXkgYXR0cmlidXRlIGZvciB0aGUgb25lIHdlJ3JlIGFwcGVuZGluZ1xuXHQgKiBAcGFyYW0gb2JqZWN0IGxhc3RSb3cgdGhlIGxhc3Qgc2V0IG9mIHRoZSBmaWVsZG1hcFxuXHQgKi9cblx0ZnVuY3Rpb24gZmllbGRtYXBGaWVsZHMoIG9sZEtleSwgbmV3S2V5LCBsYXN0Um93ICkge1xuXHRcdHZhciBuZXh0Um93ID0gJyc7XG4gICAgICAgIGlmICggalF1ZXJ5LmZuLnNlbGVjdDIgKSB7XG4gICAgICAgIFx0bmV4dFJvdyA9IGxhc3RSb3cuZmluZCggJ3NlbGVjdCcgKVxuXHQgICAgICAgICAgICAuc2VsZWN0MiggJ2Rlc3Ryb3knIClcblx0ICAgICAgICAgICAgLmVuZCgpXG5cdCAgICAgICAgICAgIC5jbG9uZSggdHJ1ZSApLnJlbW92ZUNsYXNzKCAnZmllbGRtYXAtdGVtcGxhdGUnICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgIFx0bmV4dFJvdyA9IGxhc3RSb3cuY2xvbmUoIHRydWUgKTtcbiAgICAgICAgfVxuXHRcdCQoIG5leHRSb3cgKS5hdHRyKCAnZGF0YS1rZXknLCBuZXdLZXkgKTtcblx0XHQkKCBuZXh0Um93ICkuZWFjaChmdW5jdGlvbigpIHtcblx0XHRcdCQoIHRoaXMgKS5odG1sKCBmdW5jdGlvbiggaSwgaCApIHtcblx0XHRcdFx0cmV0dXJuIGgucmVwbGFjZSggb2xkS2V5LCBuZXdLZXkgKTtcblx0XHRcdH0pO1xuXHRcdH0pO1xuXHRcdCQoICd0YWJsZS5maWVsZHMgdGJvZHknICkuYXBwZW5kKCBuZXh0Um93ICk7XG5cdFx0aWYgKCBqUXVlcnkuZm4uc2VsZWN0MiApIHtcblx0XHRcdGxhc3RSb3cuZmluZCggJ3NlbGVjdCcgKS5zZWxlY3QyKCk7XG5cdFx0XHRuZXh0Um93LmZpbmQoICdzZWxlY3QnICkuc2VsZWN0MigpO1xuXHRcdH1cblx0fVxuXHQvKipcblx0ICogSGFuZGxlIG1hbnVhbCBwdXNoIGFuZCBwdWxsIG9mIG9iamVjdHNcblx0ICovXG5cdGZ1bmN0aW9uIHB1c2hBbmRQdWxsT2JqZWN0cygpIHtcblx0XHQkKCAnLnNhbGVzZm9yY2VfdXNlcl9hamF4X21lc3NhZ2UnICkuaGlkZSgpO1xuXHRcdGlmICggMCA8ICQoICcjd29yZHByZXNzX29iamVjdF9hamF4JyApLmxlbmd0aCApIHtcblx0XHRcdCQoICcucHVzaF90b19zYWxlc2ZvcmNlX2J1dHRvbicgKS5vbiggJ2NsaWNrJywgZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHZhciB3b3JkcHJlc3NPYmplY3QgPSAkKCAnI3dvcmRwcmVzc19vYmplY3RfYWpheCcgKS52YWwoKTtcblx0XHRcdFx0dmFyIHdvcmRwcmVzc0lkID0gJCggJyN3b3JkcHJlc3NfaWRfYWpheCcgKS52YWwoKTtcblx0XHRcdFx0dmFyIHNhbGVzZm9yY2VJZCA9ICQoICcjc2FsZXNmb3JjZV9pZF9hamF4JyApLnZhbCgpO1xuXHRcdFx0XHR2YXIgZGF0YSA9IHtcblx0XHRcdFx0XHQnYWN0aW9uJyA6ICdwdXNoX3RvX3NhbGVzZm9yY2UnLFxuXHRcdFx0XHRcdCd3b3JkcHJlc3Nfb2JqZWN0JyA6IHdvcmRwcmVzc09iamVjdCxcblx0XHRcdFx0XHQnd29yZHByZXNzX2lkJyA6IHdvcmRwcmVzc0lkLFxuXHRcdFx0XHRcdCdzYWxlc2ZvcmNlX2lkJyA6IHNhbGVzZm9yY2VJZFxuXHRcdFx0XHR9XG5cdFx0XHRcdCQucG9zdCggYWpheHVybCwgZGF0YSwgZnVuY3Rpb24oIHJlc3BvbnNlICkge1xuXHRcdFx0XHRcdGlmICggdHJ1ZSA9PT0gcmVzcG9uc2Uuc3VjY2VzcyApIHtcblx0XHRcdFx0XHRcdHVwZGF0ZVNhbGVzZm9yY2VVc2VyU3VtbWFyeSgpO1xuXHRcdFx0XHRcdFx0JCggJy5zYWxlc2ZvcmNlX3VzZXJfYWpheF9tZXNzYWdlJyApLndpZHRoKCAkKCAnLm1hcHBlZC1zYWxlc2ZvcmNlLXVzZXInICkud2lkdGgoKSAtIDI3ICk7XG5cdFx0XHRcdFx0XHQkKCAnLnNhbGVzZm9yY2VfdXNlcl9hamF4X21lc3NhZ2UnICkuaHRtbCggJzxwPlRoaXMgb2JqZWN0IGhhcyBiZWVuIHB1c2hlZCB0byBTYWxlc2ZvcmNlLjwvcD4nICkuZmFkZUluKCkuZGVsYXkoIDQwMDAgKS5mYWRlT3V0KCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdCQoICcucHVsbF9mcm9tX3NhbGVzZm9yY2VfYnV0dG9uJyApLm9uKCAnY2xpY2snLCBmdW5jdGlvbigpIHtcblx0XHRcdHZhciBzYWxlc2ZvcmNlSWQgPSAkKCAnI3NhbGVzZm9yY2VfaWRfYWpheCcgKS52YWwoKTtcblx0XHRcdHZhciB3b3JkcHJlc3NPYmplY3QgPSAkKCAnI3dvcmRwcmVzc19vYmplY3RfYWpheCcgKS52YWwoKTtcblx0XHRcdHZhciBkYXRhID0ge1xuXHRcdFx0XHQnYWN0aW9uJyA6ICdwdWxsX2Zyb21fc2FsZXNmb3JjZScsXG5cdFx0XHRcdCdzYWxlc2ZvcmNlX2lkJyA6IHNhbGVzZm9yY2VJZCxcblx0XHRcdFx0J3dvcmRwcmVzc19vYmplY3QnIDogd29yZHByZXNzT2JqZWN0XG5cdFx0XHR9XG5cdFx0XHQkLnBvc3QoIGFqYXh1cmwsIGRhdGEsIGZ1bmN0aW9uKCByZXNwb25zZSApIHtcblx0XHRcdFx0aWYgKCB0cnVlID09PSByZXNwb25zZS5zdWNjZXNzICkge1xuXHRcdFx0XHRcdHVwZGF0ZVNhbGVzZm9yY2VVc2VyU3VtbWFyeSgpO1xuXHRcdFx0XHRcdCQoICcuc2FsZXNmb3JjZV91c2VyX2FqYXhfbWVzc2FnZScgKS53aWR0aCggJCggJy5tYXBwZWQtc2FsZXNmb3JjZS11c2VyJyApLndpZHRoKCkgLSAyNyApO1xuXHRcdFx0XHRcdCQoICcuc2FsZXNmb3JjZV91c2VyX2FqYXhfbWVzc2FnZScgKS5odG1sKCAnPHA+VGhpcyBvYmplY3QgaGFzIGJlZW4gcHVsbGVkIGZyb20gU2FsZXNmb3JjZS48L3A+JyApLmZhZGVJbigpLmRlbGF5KCA0MDAwICkuZmFkZU91dCgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9KTtcblx0fVxuXHQvKipcblx0ICogVXBkYXRlcyB0aGUgdXNlciBwcm9maWxlIHN1bW1hcnkgb2YgU2FsZXNmb3JjZSBpbmZvLlxuXHQgKi9cblx0ZnVuY3Rpb24gdXBkYXRlU2FsZXNmb3JjZVVzZXJTdW1tYXJ5KCkge1xuXHRcdHZhciBtYXBwaW5nSWQgPSAkKCAnI21hcHBpbmdfaWRfYWpheCcgKS52YWwoKTtcblx0XHR2YXIgZGF0YSA9IHtcblx0XHRcdCdhY3Rpb24nIDogJ3JlZnJlc2hfbWFwcGVkX2RhdGEnLFxuXHRcdFx0J21hcHBpbmdfaWQnIDogbWFwcGluZ0lkXG5cdFx0fVxuXHRcdCQucG9zdCggYWpheHVybCwgZGF0YSwgZnVuY3Rpb24oIHJlc3BvbnNlICkge1xuXHRcdFx0aWYgKCB0cnVlID09PSByZXNwb25zZS5zdWNjZXNzICkge1xuXHRcdFx0XHQkKCAndGQubGFzdF9zeW5jX21lc3NhZ2UnICkudGV4dCggcmVzcG9uc2UuZGF0YS5sYXN0X3N5bmNfbWVzc2FnZSApO1xuXHRcdFx0XHQkKCAndGQubGFzdF9zeW5jX2FjdGlvbicgKS50ZXh0KCByZXNwb25zZS5kYXRhLmxhc3Rfc3luY19hY3Rpb24gKTtcblx0XHRcdFx0JCggJ3RkLmxhc3Rfc3luY19zdGF0dXMnICkudGV4dCggcmVzcG9uc2UuZGF0YS5sYXN0X3N5bmNfc3RhdHVzICk7XG5cdFx0XHRcdCQoICd0ZC5sYXN0X3N5bmMnICkudGV4dCggcmVzcG9uc2UuZGF0YS5sYXN0X3N5bmMgKTtcblx0XHRcdFx0aWYgKCAnMScgPT09IHJlc3BvbnNlLmRhdGEubGFzdF9zeW5jX3N0YXR1cyApIHtcblx0XHRcdFx0XHQkKCAndGQubGFzdF9zeW5jX3N0YXR1cycgKS50ZXh0KCAnc3VjY2VzcycgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cdC8qKlxuXHQgKiBDbGVhciB0aGUgcGx1Z2luIGNhY2hlIHZpYSBBamF4IHJlcXVlc3QuXG5cdCAqL1xuXHRmdW5jdGlvbiBjbGVhclNmd3BDYWNoZUxpbmsoKSB7XG5cdFx0JCggJyNjbGVhci1zZndwLWNhY2hlJyApLmNsaWNrKCBmdW5jdGlvbigpIHtcblx0XHRcdHZhciBkYXRhID0ge1xuXHRcdFx0XHQnYWN0aW9uJyA6ICdjbGVhcl9zZndwX2NhY2hlJ1xuXHRcdFx0fVxuXHRcdFx0dmFyIHRoYXQgPSAkKCB0aGlzICk7XG5cdFx0XHQkLnBvc3QoIGFqYXh1cmwsIGRhdGEsIGZ1bmN0aW9uKCByZXNwb25zZSApIHtcblx0XHRcdFx0aWYgKCB0cnVlID09PSByZXNwb25zZS5zdWNjZXNzICYmIHRydWUgPT09IHJlc3BvbnNlLmRhdGEuc3VjY2VzcyApIHtcblx0XHRcdFx0XHR0aGF0LnBhcmVudCgpLmh0bWwoIHJlc3BvbnNlLmRhdGEubWVzc2FnZSApLmZhZGVJbigpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9KTtcblx0fVxuXG5cdC8vIGxvYWQgYXZhaWxhYmxlIG9wdGlvbnMgaWYgdGhlIHdvcmRwcmVzcyBvYmplY3QgY2hhbmdlc1xuXHQkKCBkb2N1bWVudCApLm9uKCAnY2hhbmdlJywgJ3NlbGVjdCN3b3JkcHJlc3Nfb2JqZWN0JywgZnVuY3Rpb24oKSB7XG5cdFx0dmFyIHRpbWVvdXQ7XG5cdFx0bG9hZEZpZWxkT3B0aW9ucyggJ3dvcmRwcmVzcycsICQoIHRoaXMgKS52YWwoKSApO1xuXHRcdGNsZWFyVGltZW91dCggdGltZW91dCApO1xuXHRcdHRpbWVvdXQgPSBzZXRUaW1lb3V0KCBmdW5jdGlvbigpIHtcblx0XHRcdCQoICd0YWJsZS5maWVsZHMgdGJvZHkgdHInICkuZmFkZU91dCgpO1xuXHRcdFx0JCggJ3RhYmxlLmZpZWxkcyB0Ym9keSB0cicgKS5ub3QoICcuZmllbGRtYXAtdGVtcGxhdGUnICkucmVtb3ZlKCk7XG5cdFx0fSwgMTAwMCApO1xuXHR9KTtcblxuXHQvLyBsb2FkIGF2YWlsYWJsZSBvcHRpb25zIGlmIHRoZSBzYWxlc2ZvcmNlIG9iamVjdCBjaGFuZ2VzXG5cdCQoIGRvY3VtZW50ICkub24oICdjaGFuZ2UnLCAnc2VsZWN0I3NhbGVzZm9yY2Vfb2JqZWN0JywgZnVuY3Rpb24oKSB7XG5cdFx0dmFyIHRpbWVvdXQ7XG5cdFx0bG9hZEZpZWxkT3B0aW9ucyggJ3NhbGVzZm9yY2UnLCAkKCB0aGlzICkudmFsKCkgKTtcblx0XHRjbGVhclRpbWVvdXQoIHRpbWVvdXQgKTtcblx0XHR0aW1lb3V0ID0gc2V0VGltZW91dCggZnVuY3Rpb24oKSB7XG5cdFx0XHQkKCAndGFibGUuZmllbGRzIHRib2R5IHRyJyApLmZhZGVPdXQoKTtcblx0XHRcdCQoICd0YWJsZS5maWVsZHMgdGJvZHkgdHInICkubm90KCAnLmZpZWxkbWFwLXRlbXBsYXRlJyApLnJlbW92ZSgpO1xuXHRcdH0sIDEwMDAgKTtcblx0fSk7XG5cblx0Ly8gRG9uJ3Qgc2hvdyB0aGUgV1NETCBmaWxlIGZpZWxkIHVubGVzcyBTT0FQIGlzIGVuYWJsZWRcblx0JCggZG9jdW1lbnQgKS5vbiggJ2NoYW5nZScsICcub2JqZWN0LXN5bmMtZm9yLXNhbGVzZm9yY2UtZW5hYmxlLXNvYXAgaW5wdXQnLCBmdW5jdGlvbigpIHtcblx0XHR0b2dnbGVTb2FwRmllbGRzKCk7XG5cdH0pO1xuXG5cdC8qKlxuXHQgKiBBcyB0aGUgRHJ1cGFsIHBsdWdpbiBkb2VzLCB3ZSBvbmx5IGFsbG93IG9uZSBmaWVsZCB0byBiZSBhIHByZW1hdGNoXG5cdCAqL1xuXHQkKCBkb2N1bWVudCApLm9uKCAnY2xpY2snLCAnLmNvbHVtbi1pc19wcmVtYXRjaCBpbnB1dCcsIGZ1bmN0aW9uKCkge1xuXHRcdCQoICcuY29sdW1uLWlzX3ByZW1hdGNoIGlucHV0JyApLm5vdCggdGhpcyApLnByb3AoICdjaGVja2VkJywgZmFsc2UgKTtcblx0fSk7XG5cdC8qKlxuXHQgKiBBcyB0aGUgRHJ1cGFsIHBsdWdpbiBkb2VzLCB3ZSBvbmx5IGFsbG93IG9uZSBmaWVsZCB0byBiZSBhIGtleVxuXHQgKi9cblx0JCggZG9jdW1lbnQgKS5vbiggJ2NsaWNrJywgJy5jb2x1bW4taXNfa2V5IGlucHV0JywgZnVuY3Rpb24oKSB7XG5cdFx0JCggJy5jb2x1bW4taXNfa2V5IGlucHV0JyApLm5vdCggdGhpcyApLnByb3AoICdjaGVja2VkJywgZmFsc2UgKTtcblx0fSk7XG5cdC8qKlxuXHQgKiBXaGVuIHRoZSBwbHVnaW4gbG9hZHMsIGluaXRpYWxpemUgb3IgZW5hYmxlIHRoaW5nczpcblx0ICogU2VsZWN0MiBvbiBzZWxlY3QgZmllbGRzXG5cdCAqIENsZWFyIGZpZWxkcyB3aGVuIHRoZSB0YXJnZXRlZCBXb3JkUHJlc3Mgb3IgU2FsZXNmb3JjZSBvYmplY3QgdHlwZSBjaGFuZ2VzXG5cdCAqIE1hbmFnZSB0aGUgZGlzcGxheSBmb3IgU2FsZXNmb3JjZSBvYmplY3QgZmllbGRzIGJhc2VkIG9uIEFQSSByZXBvbnNlXG5cdCAqIE1hbnVhbCBwdXNoIGFuZCBwdWxsXG5cdCAqIENsZWFyaW5nIHRoZSBjYWNoZVxuXHQgKi9cblx0JCggZG9jdW1lbnQgKS5yZWFkeSggZnVuY3Rpb24oKSB7XG5cblx0XHQvLyBEb24ndCBzaG93IHRoZSBXU0RMIGZpbGUgZmllbGQgdW5sZXNzIFNPQVAgaXMgZW5hYmxlZFxuXHRcdHRvZ2dsZVNvYXBGaWVsZHMoKTtcblxuXHRcdC8vIGlmIHRoZXJlIGlzIGFscmVhZHkgYSB3cCBvciBzZiBvYmplY3QsIG1ha2Ugc3VyZSBpdCBoYXMgdGhlIHJpZ2h0IGZpZWxkcyB3aGVuIHRoZSBwYWdlIGxvYWRzXG5cdFx0bG9hZEZpZWxkT3B0aW9ucyggJ3dvcmRwcmVzcycsICQoICdzZWxlY3Qjd29yZHByZXNzX29iamVjdCcgKS52YWwoKSApO1xuXHRcdGxvYWRGaWVsZE9wdGlvbnMoICdzYWxlc2ZvcmNlJywgJCggJ3NlbGVjdCNzYWxlc2ZvcmNlX29iamVjdCcgKS52YWwoKSApO1xuXG5cdFx0Ly8gc2V0dXAgdGhlIHNlbGVjdDIgZmllbGRzIGlmIHRoZSBsaWJyYXJ5IGlzIHByZXNlbnRcblx0XHRpZiAoIGpRdWVyeS5mbi5zZWxlY3QyICkge1xuXHRcdFx0JCggJ3NlbGVjdCN3b3JkcHJlc3Nfb2JqZWN0JyApLnNlbGVjdDIoKTtcblx0XHRcdCQoICdzZWxlY3Qjc2FsZXNmb3JjZV9vYmplY3QnICkuc2VsZWN0MigpO1xuXHRcdFx0JCggJ3NlbGVjdCNzYWxlc2ZvcmNlX3JlY29yZF90eXBlX2RlZmF1bHQnICkuc2VsZWN0MigpO1xuXHRcdFx0JCggJ3NlbGVjdCNwdWxsX3RyaWdnZXJfZmllbGQnICkuc2VsZWN0MigpO1xuXHRcdFx0JCggJy5jb2x1bW4td29yZHByZXNzX2ZpZWxkIHNlbGVjdCcgKS5zZWxlY3QyKCk7XG5cdFx0XHQkKCAnLmNvbHVtbi1zYWxlc2ZvcmNlX2ZpZWxkIHNlbGVjdCcgKS5zZWxlY3QyKCk7XG5cdFx0fVxuXG5cdFx0Ly8gZ2V0IHRoZSBhdmFpbGFibGUgU2FsZXNmb3JjZSBvYmplY3QgY2hvaWNlc1xuXHRcdHNhbGVzZm9yY2VPYmplY3RGaWVsZHMoKTtcblxuXHRcdC8vIER1cGxpY2F0ZSB0aGUgZmllbGRzIGZvciBhIG5ldyByb3cgaW4gdGhlIGZpZWxkbWFwIG9wdGlvbnMgc2NyZWVuLlxuXHRcdGFkZEZpZWxkTWFwcGluZ1JvdygpO1xuXG5cdFx0Ly8gSGFuZGxlIG1hbnVhbCBwdXNoIGFuZCBwdWxsIG9mIG9iamVjdHNcblx0XHRwdXNoQW5kUHVsbE9iamVjdHMoKTtcblxuXHRcdC8vIENsZWFyIHRoZSBwbHVnaW4gY2FjaGUgdmlhIEFqYXggcmVxdWVzdC5cblx0XHRjbGVhclNmd3BDYWNoZUxpbmsoKTtcblx0fSk7XG59KCBqUXVlcnkgKSApO1xuIl19 +} // load available options if the wordpress object changes + + +$(document).on('change', 'select#wordpress_object', function () { + var timeout; + loadFieldOptions('wordpress', $(this).val()); + clearTimeout(timeout); + timeout = setTimeout(function () { + $('table.fields tbody tr').fadeOut(); + $('table.fields tbody tr').not('.fieldmap-template').remove(); + }, 1000); +}); // load available options if the salesforce object changes + +$(document).on('change', 'select#salesforce_object', function () { + var timeout; + loadFieldOptions('salesforce', $(this).val()); + clearTimeout(timeout); + timeout = setTimeout(function () { + $('table.fields tbody tr').fadeOut(); + $('table.fields tbody tr').not('.fieldmap-template').remove(); + }, 1000); +}); // Don't show the WSDL file field unless SOAP is enabled + +$(document).on('change', '.object-sync-for-salesforce-enable-soap input', function () { + toggleSoapFields(); +}); +/** + * As the Drupal plugin does, we only allow one field to be a prematch + */ + +$(document).on('click', '.column-is_prematch input', function () { + $('.column-is_prematch input').not(this).prop('checked', false); +}); +/** + * As the Drupal plugin does, we only allow one field to be a key + */ + +$(document).on('click', '.column-is_key input', function () { + $('.column-is_key input').not(this).prop('checked', false); +}); +/** + * When the plugin loads, initialize or enable things: + * Select2 on select fields + * Clear fields when the targeted WordPress or Salesforce object type changes + * Manage the display for Salesforce object fields based on API reponse + * Manual push and pull + * Clearing the cache + */ + +$(document).ready(function () { + // Don't show the WSDL file field unless SOAP is enabled + toggleSoapFields(); // if there is already a wp or sf object, make sure it has the right fields when the page loads + + loadFieldOptions('wordpress', $('select#wordpress_object').val()); + loadFieldOptions('salesforce', $('select#salesforce_object').val()); // setup the select2 fields if the library is present + + if (jQuery.fn.select2) { + $('select#wordpress_object').select2(); + $('select#salesforce_object').select2(); + $('select#salesforce_record_type_default').select2(); + $('select#pull_trigger_field').select2(); + $('.column-wordpress_field select').select2(); + $('.column-salesforce_field select').select2(); + } // get the available Salesforce object choices + + + salesforceObjectFields(); // Duplicate the fields for a new row in the fieldmap options screen. + + addFieldMappingRow(); // Handle manual push and pull of objects + + pushAndPullObjects(); // Clear the plugin cache via Ajax request. + + clearSfwpCacheLink(); +}); +//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFkbWluLmpzIl0sIm5hbWVzIjpbImxvYWRGaWVsZE9wdGlvbnMiLCJzeXN0ZW0iLCJvYmplY3RfbmFtZSIsImRhdGEiLCJzZWxlY3RGaWVsZCIsImZpZWxkcyIsImZpcnN0X2ZpZWxkIiwiJCIsImZpcnN0IiwidGV4dCIsInZhbCIsImFqYXgiLCJ0eXBlIiwidXJsIiwiYWpheHVybCIsImJlZm9yZVNlbmQiLCJhZGRDbGFzcyIsInN1Y2Nlc3MiLCJyZXNwb25zZSIsImVhY2giLCJpbmRleCIsInZhbHVlIiwia2V5IiwibmFtZSIsImxhYmVsIiwiaHRtbCIsImNvbXBsZXRlIiwicmVtb3ZlQ2xhc3MiLCJ0b2dnbGVTb2FwRmllbGRzIiwibGVuZ3RoIiwiaXMiLCJzaG93IiwiaGlkZSIsInNhbGVzZm9yY2VPYmplY3RGaWVsZHMiLCJkZWxheSIsInRpbWVyIiwiY2FsbGJhY2siLCJtcyIsImNsZWFyVGltZW91dCIsInNldFRpbWVvdXQiLCJvbiIsInRoYXQiLCJkZWxheVRpbWUiLCJwb3N0IiwicmVjb3JkVHlwZXNBbGxvd2VkTWFya3VwIiwicmVjb3JkVHlwZURlZmF1bHRNYXJrdXAiLCJkYXRlTWFya3VwIiwicmVjb3JkVHlwZUluZm9zIiwialF1ZXJ5IiwiZm4iLCJzZWxlY3QyIiwiYWRkRmllbGRNYXBwaW5nUm93IiwiY2xpY2siLCJzYWxlc2ZvcmNlT2JqZWN0Iiwid29yZHByZXNzT2JqZWN0IiwibmV3S2V5IiwiRGF0ZSIsImdldFVUQ01pbGxpc2Vjb25kcyIsImxhc3RSb3ciLCJsYXN0Iiwib2xkS2V5IiwiYXR0ciIsIlJlZ0V4cCIsImZpZWxkbWFwRmllbGRzIiwicGFyZW50IiwiZmluZCIsInJlbW92ZSIsInByZXBlbmQiLCJuZXh0Um93IiwiZW5kIiwiY2xvbmUiLCJpIiwiaCIsInJlcGxhY2UiLCJhcHBlbmQiLCJwdXNoQW5kUHVsbE9iamVjdHMiLCJ3b3JkcHJlc3NJZCIsInNhbGVzZm9yY2VJZCIsInVwZGF0ZVNhbGVzZm9yY2VVc2VyU3VtbWFyeSIsIndpZHRoIiwiZmFkZUluIiwiZmFkZU91dCIsIm1hcHBpbmdJZCIsImxhc3Rfc3luY19tZXNzYWdlIiwibGFzdF9zeW5jX2FjdGlvbiIsImxhc3Rfc3luY19zdGF0dXMiLCJsYXN0X3N5bmMiLCJjbGVhclNmd3BDYWNoZUxpbmsiLCJtZXNzYWdlIiwiZG9jdW1lbnQiLCJ0aW1lb3V0Iiwibm90IiwicHJvcCIsInJlYWR5Il0sIm1hcHBpbmdzIjoiOztBQUVDOzs7OztBQUtBLFNBQVNBLGdCQUFULENBQTJCQyxNQUEzQixFQUFtQ0MsV0FBbkMsRUFBaUQ7QUFDaEQsTUFBSUMsSUFBSSxHQUFHO0FBQ1YsY0FBVyxTQUFTRixNQUFULEdBQWtCO0FBRG5CLEdBQVg7QUFHQSxNQUFJRyxXQUFXLEdBQUcsYUFBYUgsTUFBYixHQUFzQixlQUF4QztBQUNBLE1BQUlJLE1BQU0sR0FBRyxFQUFiO0FBQ0EsTUFBSUMsV0FBVyxHQUFHQyxDQUFDLENBQUVILFdBQVcsR0FBRyxTQUFoQixDQUFELENBQTRCSSxLQUE1QixHQUFvQ0MsSUFBcEMsRUFBbEI7O0FBQ0EsTUFBSyxPQUFPRixDQUFDLENBQUVILFdBQUYsQ0FBRCxDQUFpQk0sR0FBakIsRUFBWixFQUFxQztBQUNwQztBQUNBOztBQUNETCxFQUFBQSxNQUFNLElBQUksc0JBQXNCQyxXQUF0QixHQUFvQyxXQUE5Qzs7QUFDQSxNQUFLLGdCQUFnQkwsTUFBckIsRUFBOEI7QUFDN0JFLElBQUFBLElBQUksQ0FBQyxrQkFBRCxDQUFKLEdBQTJCRCxXQUEzQjtBQUNBLEdBRkQsTUFFTyxJQUFLLGlCQUFpQkQsTUFBdEIsRUFBK0I7QUFDckNFLElBQUFBLElBQUksQ0FBQyxtQkFBRCxDQUFKLEdBQTRCRCxXQUE1QjtBQUNBLEdBRk0sTUFFQTtBQUNOLFdBQU9HLE1BQVA7QUFDQTs7QUFFREUsRUFBQUEsQ0FBQyxDQUFDSSxJQUFGLENBQU87QUFDTkMsSUFBQUEsSUFBSSxFQUFFLE1BREE7QUFFTkMsSUFBQUEsR0FBRyxFQUFFQyxPQUZDO0FBR05YLElBQUFBLElBQUksRUFBRUEsSUFIQTtBQUlOWSxJQUFBQSxVQUFVLEVBQUUsc0JBQVc7QUFDdEJSLE1BQUFBLENBQUMsQ0FBRSxjQUFjTixNQUFoQixDQUFELENBQTBCZSxRQUExQixDQUFvQyxXQUFwQztBQUNBLEtBTks7QUFPSEMsSUFBQUEsT0FBTyxFQUFFLGlCQUFVQyxRQUFWLEVBQXFCO0FBQzdCWCxNQUFBQSxDQUFDLENBQUNZLElBQUYsQ0FBUUQsUUFBUSxDQUFDZixJQUFULENBQWNFLE1BQXRCLEVBQThCLFVBQVVlLEtBQVYsRUFBaUJDLEtBQWpCLEVBQXlCO0FBQ3pELFlBQUssZ0JBQWdCcEIsTUFBckIsRUFBOEI7QUFDN0JJLFVBQUFBLE1BQU0sSUFBSSxvQkFBb0JnQixLQUFLLENBQUNDLEdBQTFCLEdBQWdDLElBQWhDLEdBQXVDRCxLQUFLLENBQUNDLEdBQTdDLEdBQW1ELFdBQTdEO0FBQ0EsU0FGRCxNQUVPLElBQUssaUJBQWlCckIsTUFBdEIsRUFBK0I7QUFDckNJLFVBQUFBLE1BQU0sSUFBSSxvQkFBb0JnQixLQUFLLENBQUNFLElBQTFCLEdBQWlDLElBQWpDLEdBQXdDRixLQUFLLENBQUNHLEtBQTlDLEdBQXNELFdBQWhFO0FBQ0E7QUFDRCxPQU5FO0FBT0hqQixNQUFBQSxDQUFDLENBQUVILFdBQUYsQ0FBRCxDQUFpQnFCLElBQWpCLENBQXVCcEIsTUFBdkI7QUFDRyxLQWhCRTtBQWlCSHFCLElBQUFBLFFBQVEsRUFBRSxvQkFBWTtBQUNyQm5CLE1BQUFBLENBQUMsQ0FBRSxjQUFjTixNQUFoQixDQUFELENBQTBCMEIsV0FBMUIsQ0FBdUMsV0FBdkM7QUFDQTtBQW5CRSxHQUFQO0FBcUJBO0FBRUQ7Ozs7O0FBR0EsU0FBU0MsZ0JBQVQsR0FBNEI7QUFDM0IsTUFBSyxJQUFJckIsQ0FBQyxDQUFFLHlDQUFGLENBQUQsQ0FBK0NzQixNQUF4RCxFQUFpRTtBQUNoRSxRQUFLdEIsQ0FBQyxDQUFFLCtDQUFGLENBQUQsQ0FBcUR1QixFQUFyRCxDQUF5RCxVQUF6RCxDQUFMLEVBQTZFO0FBQzVFdkIsTUFBQUEsQ0FBQyxDQUFFLDRDQUFGLENBQUQsQ0FBa0R3QixJQUFsRDtBQUNBLEtBRkQsTUFFTztBQUNOeEIsTUFBQUEsQ0FBQyxDQUFFLDRDQUFGLENBQUQsQ0FBa0R5QixJQUFsRDtBQUNBO0FBQ0Q7QUFDRDtBQUVEOzs7Ozs7QUFJQSxTQUFTQyxzQkFBVCxHQUFrQztBQUVqQyxNQUFJQyxLQUFLLEdBQUssWUFBVztBQUN4QixRQUFJQyxLQUFLLEdBQUcsQ0FBWjtBQUNBLFdBQU8sVUFBVUMsUUFBVixFQUFvQkMsRUFBcEIsRUFBeUI7QUFDL0JDLE1BQUFBLFlBQVksQ0FBR0gsS0FBSCxDQUFaO0FBQ0FBLE1BQUFBLEtBQUssR0FBR0ksVUFBVSxDQUFFSCxRQUFGLEVBQVlDLEVBQVosQ0FBbEI7QUFDQSxLQUhEO0FBSUEsR0FOYSxFQUFkOztBQVFBLE1BQUssTUFBTTlCLENBQUMsQ0FBRSxzQ0FBRixDQUFELENBQTRDc0IsTUFBdkQsRUFBZ0U7QUFDL0R0QixJQUFBQSxDQUFDLENBQUUsa0NBQUYsQ0FBRCxDQUF3Q3lCLElBQXhDO0FBQ0E7O0FBRUQsTUFBSyxNQUFNekIsQ0FBQyxDQUFFLHFDQUFGLENBQUQsQ0FBMkNzQixNQUF0RCxFQUErRDtBQUM5RHRCLElBQUFBLENBQUMsQ0FBRSxpQ0FBRixDQUFELENBQXVDeUIsSUFBdkM7QUFDQTs7QUFDRCxNQUFLLE1BQU16QixDQUFDLENBQUUseUJBQUYsQ0FBRCxDQUErQnNCLE1BQTFDLEVBQW1EO0FBQ2xEdEIsSUFBQUEsQ0FBQyxDQUFFLHFCQUFGLENBQUQsQ0FBMkJ5QixJQUEzQjtBQUNBOztBQUVEekIsRUFBQUEsQ0FBQyxDQUFFLG9CQUFGLENBQUQsQ0FBMEJpQyxFQUExQixDQUE4QixRQUE5QixFQUF3QyxZQUFXO0FBQ2xELFFBQUlDLElBQUksR0FBRyxJQUFYO0FBQ0EsUUFBSUMsU0FBUyxHQUFHLElBQWhCO0FBQ0FSLElBQUFBLEtBQUssQ0FBRSxZQUFXO0FBQ2pCLFVBQUkvQixJQUFJLEdBQUc7QUFDVixrQkFBVyxtQ0FERDtBQUVWLG1CQUFZLENBQUUsUUFBRixFQUFZLGlCQUFaLENBRkY7QUFHVixzQkFBZSxVQUhMO0FBSVYsNkJBQXNCc0MsSUFBSSxDQUFDcEI7QUFKakIsT0FBWDtBQU1BZCxNQUFBQSxDQUFDLENBQUNvQyxJQUFGLENBQVE3QixPQUFSLEVBQWlCWCxJQUFqQixFQUF1QixVQUFVZSxRQUFWLEVBQXFCO0FBRTNDLFlBQUkwQix3QkFBd0IsR0FBRyxFQUEvQjtBQUFBLFlBQW1DQyx1QkFBdUIsR0FBRyxFQUE3RDtBQUFBLFlBQWlFQyxVQUFVLEdBQUcsRUFBOUU7O0FBRUEsWUFBSyxJQUFJdkMsQ0FBQyxDQUFFVyxRQUFRLENBQUNmLElBQVQsQ0FBYzRDLGVBQWhCLENBQUQsQ0FBbUNsQixNQUE1QyxFQUFxRDtBQUNwRGUsVUFBQUEsd0JBQXdCLElBQUksb0dBQTVCO0FBQ0FyQyxVQUFBQSxDQUFDLENBQUNZLElBQUYsQ0FBUUQsUUFBUSxDQUFDZixJQUFULENBQWM0QyxlQUF0QixFQUF1QyxVQUFVM0IsS0FBVixFQUFpQkMsS0FBakIsRUFBeUI7QUFDL0R1QixZQUFBQSx3QkFBd0IsSUFBSSxnRUFBZ0V4QixLQUFoRSxHQUF3RSwwQ0FBeEUsR0FBcUhBLEtBQXJILEdBQTZILHlDQUE3SCxHQUF5S0EsS0FBekssR0FBaUwsS0FBakwsR0FBeUxDLEtBQXpMLEdBQWlNLFVBQTdOO0FBQ0EsV0FGRDtBQUdBdUIsVUFBQUEsd0JBQXdCLElBQUksUUFBNUI7QUFHQUMsVUFBQUEsdUJBQXVCLElBQUksMEVBQTNCO0FBQ0FBLFVBQUFBLHVCQUF1QixJQUFJLG9JQUEzQjtBQUNBdEMsVUFBQUEsQ0FBQyxDQUFDWSxJQUFGLENBQVFELFFBQVEsQ0FBQ2YsSUFBVCxDQUFjNEMsZUFBdEIsRUFBdUMsVUFBVTNCLEtBQVYsRUFBaUJDLEtBQWpCLEVBQXlCO0FBQy9Ed0IsWUFBQUEsdUJBQXVCLElBQUksb0JBQW9CekIsS0FBcEIsR0FBNEIsSUFBNUIsR0FBbUNDLEtBQW5DLEdBQTJDLFdBQXRFO0FBQ0EsV0FGRDtBQUdBOztBQUVEZCxRQUFBQSxDQUFDLENBQUUsa0NBQUYsQ0FBRCxDQUF3Q2tCLElBQXhDLENBQThDbUIsd0JBQTlDO0FBQ0FyQyxRQUFBQSxDQUFDLENBQUUsaUNBQUYsQ0FBRCxDQUF1Q2tCLElBQXZDLENBQTZDb0IsdUJBQTdDOztBQUVBLFlBQUssSUFBSXRDLENBQUMsQ0FBRVcsUUFBUSxDQUFDZixJQUFULENBQWNFLE1BQWhCLENBQUQsQ0FBMEJ3QixNQUFuQyxFQUE0QztBQUMzQ2lCLFVBQUFBLFVBQVUsSUFBSSxxRUFBZDtBQUNBQSxVQUFBQSxVQUFVLElBQUksMkdBQWQ7QUFDQXZDLFVBQUFBLENBQUMsQ0FBQ1ksSUFBRixDQUFRRCxRQUFRLENBQUNmLElBQVQsQ0FBY0UsTUFBdEIsRUFBOEIsVUFBVWUsS0FBVixFQUFpQkMsS0FBakIsRUFBeUI7QUFDdER5QixZQUFBQSxVQUFVLElBQUksb0JBQW9CekIsS0FBSyxDQUFDRSxJQUExQixHQUFpQyxJQUFqQyxHQUF3Q0YsS0FBSyxDQUFDRyxLQUE5QyxHQUFzRCxXQUFwRTtBQUNBLFdBRkQ7QUFHQXNCLFVBQUFBLFVBQVUsSUFBSSxXQUFkO0FBQ0FBLFVBQUFBLFVBQVUsSUFBSSxtS0FBZDtBQUNBOztBQUVEdkMsUUFBQUEsQ0FBQyxDQUFFLHFCQUFGLENBQUQsQ0FBMkJrQixJQUEzQixDQUFpQ3FCLFVBQWpDOztBQUVBLFlBQUssT0FBT0Ysd0JBQVosRUFBdUM7QUFDdENyQyxVQUFBQSxDQUFDLENBQUUsa0NBQUYsQ0FBRCxDQUF3Q3dCLElBQXhDO0FBQ0EsU0FGRCxNQUVPO0FBQ054QixVQUFBQSxDQUFDLENBQUUsa0NBQUYsQ0FBRCxDQUF3Q3lCLElBQXhDO0FBQ0E7O0FBQ0QsWUFBSyxPQUFPYSx1QkFBWixFQUFzQztBQUNyQ3RDLFVBQUFBLENBQUMsQ0FBRSxpQ0FBRixDQUFELENBQXVDd0IsSUFBdkM7QUFDQSxTQUZELE1BRU87QUFDTnhCLFVBQUFBLENBQUMsQ0FBRSxpQ0FBRixDQUFELENBQXVDeUIsSUFBdkM7QUFDQTs7QUFFRCxZQUFLLE9BQU9jLFVBQVosRUFBeUI7QUFDeEJ2QyxVQUFBQSxDQUFDLENBQUUscUJBQUYsQ0FBRCxDQUEyQndCLElBQTNCO0FBQ0EsU0FGRCxNQUVPO0FBQ054QixVQUFBQSxDQUFDLENBQUUscUJBQUYsQ0FBRCxDQUEyQnlCLElBQTNCO0FBQ0E7O0FBRUQsWUFBS2dCLE1BQU0sQ0FBQ0MsRUFBUCxDQUFVQyxPQUFmLEVBQXlCO0FBQ3hCM0MsVUFBQUEsQ0FBQyxDQUFFLHVDQUFGLENBQUQsQ0FBNkMyQyxPQUE3QztBQUNBM0MsVUFBQUEsQ0FBQyxDQUFFLDJCQUFGLENBQUQsQ0FBaUMyQyxPQUFqQztBQUNBO0FBRUQsT0F4REQ7QUF5REEsS0FoRUksRUFnRUZSLFNBaEVFLENBQUw7QUFpRUEsR0FwRUQ7QUFxRUE7QUFDRDs7Ozs7O0FBSUMsU0FBU1Msa0JBQVQsR0FBOEI7QUFDOUI1QyxFQUFBQSxDQUFDLENBQUUsb0JBQUYsQ0FBRCxDQUEwQjZDLEtBQTFCLENBQWlDLFlBQVc7QUFDM0MsUUFBSUMsZ0JBQWdCLEdBQUc5QyxDQUFDLENBQUUsb0JBQUYsQ0FBRCxDQUEwQkcsR0FBMUIsRUFBdkI7QUFDQSxRQUFJNEMsZUFBZSxHQUFHL0MsQ0FBQyxDQUFFLG1CQUFGLENBQUQsQ0FBeUJHLEdBQXpCLEVBQXRCO0FBQ0EsUUFBSTZDLE1BQU0sR0FBRyxJQUFJQyxJQUFKLEdBQVdDLGtCQUFYLEVBQWI7QUFDQSxRQUFJQyxPQUFPLEdBQUduRCxDQUFDLENBQUUsdUJBQUYsQ0FBRCxDQUE2Qm9ELElBQTdCLEVBQWQ7QUFDQSxRQUFJQyxNQUFNLEdBQUdGLE9BQU8sQ0FBQ0csSUFBUixDQUFjLFVBQWQsQ0FBYjtBQUNBRCxJQUFBQSxNQUFNLEdBQUcsSUFBSUUsTUFBSixDQUFZRixNQUFaLEVBQW9CLEdBQXBCLENBQVQ7QUFDQXJELElBQUFBLENBQUMsQ0FBRSxJQUFGLENBQUQsQ0FBVUUsSUFBVixDQUFnQiwyQkFBaEI7O0FBQ0EsUUFBSyxPQUFPNkMsZUFBUCxJQUEwQixPQUFPRCxnQkFBdEMsRUFBeUQ7QUFDeERVLE1BQUFBLGNBQWMsQ0FBRUgsTUFBRixFQUFVTCxNQUFWLEVBQWtCRyxPQUFsQixDQUFkO0FBQ0FuRCxNQUFBQSxDQUFDLENBQUUsSUFBRixDQUFELENBQVV5RCxNQUFWLEdBQW1CQyxJQUFuQixDQUF5QixpQkFBekIsRUFBNkNDLE1BQTdDO0FBQ0EsS0FIRCxNQUdPO0FBQ04zRCxNQUFBQSxDQUFDLENBQUUsSUFBRixDQUFELENBQVV5RCxNQUFWLEdBQW1CRyxPQUFuQixDQUE0Qix3SUFBNUI7QUFDQTs7QUFDRCxXQUFPLEtBQVA7QUFDQSxHQWZEO0FBZ0JBO0FBQ0Q7Ozs7Ozs7OztBQU9BLFNBQVNKLGNBQVQsQ0FBeUJILE1BQXpCLEVBQWlDTCxNQUFqQyxFQUF5Q0csT0FBekMsRUFBbUQ7QUFDbEQsTUFBSVUsT0FBTyxHQUFHLEVBQWQ7O0FBQ00sTUFBS3BCLE1BQU0sQ0FBQ0MsRUFBUCxDQUFVQyxPQUFmLEVBQXlCO0FBQ3hCa0IsSUFBQUEsT0FBTyxHQUFHVixPQUFPLENBQUNPLElBQVIsQ0FBYyxRQUFkLEVBQ0xmLE9BREssQ0FDSSxTQURKLEVBRUxtQixHQUZLLEdBR0xDLEtBSEssQ0FHRSxJQUhGLEVBR1MzQyxXQUhULENBR3NCLG1CQUh0QixDQUFWO0FBSUEsR0FMRCxNQUtPO0FBQ055QyxJQUFBQSxPQUFPLEdBQUdWLE9BQU8sQ0FBQ1ksS0FBUixDQUFlLElBQWYsQ0FBVjtBQUNBOztBQUNQL0QsRUFBQUEsQ0FBQyxDQUFFNkQsT0FBRixDQUFELENBQWFQLElBQWIsQ0FBbUIsVUFBbkIsRUFBK0JOLE1BQS9CO0FBQ0FoRCxFQUFBQSxDQUFDLENBQUU2RCxPQUFGLENBQUQsQ0FBYWpELElBQWIsQ0FBa0IsWUFBVztBQUM1QlosSUFBQUEsQ0FBQyxDQUFFLElBQUYsQ0FBRCxDQUFVa0IsSUFBVixDQUFnQixVQUFVOEMsQ0FBVixFQUFhQyxDQUFiLEVBQWlCO0FBQ2hDLGFBQU9BLENBQUMsQ0FBQ0MsT0FBRixDQUFXYixNQUFYLEVBQW1CTCxNQUFuQixDQUFQO0FBQ0EsS0FGRDtBQUdBLEdBSkQ7QUFLQWhELEVBQUFBLENBQUMsQ0FBRSxvQkFBRixDQUFELENBQTBCbUUsTUFBMUIsQ0FBa0NOLE9BQWxDOztBQUNBLE1BQUtwQixNQUFNLENBQUNDLEVBQVAsQ0FBVUMsT0FBZixFQUF5QjtBQUN4QlEsSUFBQUEsT0FBTyxDQUFDTyxJQUFSLENBQWMsUUFBZCxFQUF5QmYsT0FBekI7QUFDQWtCLElBQUFBLE9BQU8sQ0FBQ0gsSUFBUixDQUFjLFFBQWQsRUFBeUJmLE9BQXpCO0FBQ0E7QUFDRDtBQUNEOzs7OztBQUdBLFNBQVN5QixrQkFBVCxHQUE4QjtBQUM3QnBFLEVBQUFBLENBQUMsQ0FBRSwrQkFBRixDQUFELENBQXFDeUIsSUFBckM7O0FBQ0EsTUFBSyxJQUFJekIsQ0FBQyxDQUFFLHdCQUFGLENBQUQsQ0FBOEJzQixNQUF2QyxFQUFnRDtBQUMvQ3RCLElBQUFBLENBQUMsQ0FBRSw0QkFBRixDQUFELENBQWtDaUMsRUFBbEMsQ0FBc0MsT0FBdEMsRUFBK0MsWUFBVztBQUN6RCxVQUFJYyxlQUFlLEdBQUcvQyxDQUFDLENBQUUsd0JBQUYsQ0FBRCxDQUE4QkcsR0FBOUIsRUFBdEI7QUFDQSxVQUFJa0UsV0FBVyxHQUFHckUsQ0FBQyxDQUFFLG9CQUFGLENBQUQsQ0FBMEJHLEdBQTFCLEVBQWxCO0FBQ0EsVUFBSW1FLFlBQVksR0FBR3RFLENBQUMsQ0FBRSxxQkFBRixDQUFELENBQTJCRyxHQUEzQixFQUFuQjtBQUNBLFVBQUlQLElBQUksR0FBRztBQUNWLGtCQUFXLG9CQUREO0FBRVYsNEJBQXFCbUQsZUFGWDtBQUdWLHdCQUFpQnNCLFdBSFA7QUFJVix5QkFBa0JDO0FBSlIsT0FBWDtBQU1BdEUsTUFBQUEsQ0FBQyxDQUFDb0MsSUFBRixDQUFRN0IsT0FBUixFQUFpQlgsSUFBakIsRUFBdUIsVUFBVWUsUUFBVixFQUFxQjtBQUMzQyxZQUFLLFNBQVNBLFFBQVEsQ0FBQ0QsT0FBdkIsRUFBaUM7QUFDaEM2RCxVQUFBQSwyQkFBMkI7QUFDM0J2RSxVQUFBQSxDQUFDLENBQUUsK0JBQUYsQ0FBRCxDQUFxQ3dFLEtBQXJDLENBQTRDeEUsQ0FBQyxDQUFFLHlCQUFGLENBQUQsQ0FBK0J3RSxLQUEvQixLQUF5QyxFQUFyRjtBQUNBeEUsVUFBQUEsQ0FBQyxDQUFFLCtCQUFGLENBQUQsQ0FBcUNrQixJQUFyQyxDQUEyQyxtREFBM0MsRUFBaUd1RCxNQUFqRyxHQUEwRzlDLEtBQTFHLENBQWlILElBQWpILEVBQXdIK0MsT0FBeEg7QUFDQTtBQUNELE9BTkQ7QUFPQSxhQUFPLEtBQVA7QUFDQSxLQWxCRDtBQW1CQTs7QUFDRDFFLEVBQUFBLENBQUMsQ0FBRSw4QkFBRixDQUFELENBQW9DaUMsRUFBcEMsQ0FBd0MsT0FBeEMsRUFBaUQsWUFBVztBQUMzRCxRQUFJcUMsWUFBWSxHQUFHdEUsQ0FBQyxDQUFFLHFCQUFGLENBQUQsQ0FBMkJHLEdBQTNCLEVBQW5CO0FBQ0EsUUFBSTRDLGVBQWUsR0FBRy9DLENBQUMsQ0FBRSx3QkFBRixDQUFELENBQThCRyxHQUE5QixFQUF0QjtBQUNBLFFBQUlQLElBQUksR0FBRztBQUNWLGdCQUFXLHNCQUREO0FBRVYsdUJBQWtCMEUsWUFGUjtBQUdWLDBCQUFxQnZCO0FBSFgsS0FBWDtBQUtBL0MsSUFBQUEsQ0FBQyxDQUFDb0MsSUFBRixDQUFRN0IsT0FBUixFQUFpQlgsSUFBakIsRUFBdUIsVUFBVWUsUUFBVixFQUFxQjtBQUMzQyxVQUFLLFNBQVNBLFFBQVEsQ0FBQ0QsT0FBdkIsRUFBaUM7QUFDaEM2RCxRQUFBQSwyQkFBMkI7QUFDM0J2RSxRQUFBQSxDQUFDLENBQUUsK0JBQUYsQ0FBRCxDQUFxQ3dFLEtBQXJDLENBQTRDeEUsQ0FBQyxDQUFFLHlCQUFGLENBQUQsQ0FBK0J3RSxLQUEvQixLQUF5QyxFQUFyRjtBQUNBeEUsUUFBQUEsQ0FBQyxDQUFFLCtCQUFGLENBQUQsQ0FBcUNrQixJQUFyQyxDQUEyQyxxREFBM0MsRUFBbUd1RCxNQUFuRyxHQUE0RzlDLEtBQTVHLENBQW1ILElBQW5ILEVBQTBIK0MsT0FBMUg7QUFDQTtBQUNELEtBTkQ7QUFPQSxXQUFPLEtBQVA7QUFDQSxHQWhCRDtBQWlCQTtBQUNEOzs7OztBQUdBLFNBQVNILDJCQUFULEdBQXVDO0FBQ3RDLE1BQUlJLFNBQVMsR0FBRzNFLENBQUMsQ0FBRSxrQkFBRixDQUFELENBQXdCRyxHQUF4QixFQUFoQjtBQUNBLE1BQUlQLElBQUksR0FBRztBQUNWLGNBQVcscUJBREQ7QUFFVixrQkFBZStFO0FBRkwsR0FBWDtBQUlBM0UsRUFBQUEsQ0FBQyxDQUFDb0MsSUFBRixDQUFRN0IsT0FBUixFQUFpQlgsSUFBakIsRUFBdUIsVUFBVWUsUUFBVixFQUFxQjtBQUMzQyxRQUFLLFNBQVNBLFFBQVEsQ0FBQ0QsT0FBdkIsRUFBaUM7QUFDaENWLE1BQUFBLENBQUMsQ0FBRSxzQkFBRixDQUFELENBQTRCRSxJQUE1QixDQUFrQ1MsUUFBUSxDQUFDZixJQUFULENBQWNnRixpQkFBaEQ7QUFDQTVFLE1BQUFBLENBQUMsQ0FBRSxxQkFBRixDQUFELENBQTJCRSxJQUEzQixDQUFpQ1MsUUFBUSxDQUFDZixJQUFULENBQWNpRixnQkFBL0M7QUFDQTdFLE1BQUFBLENBQUMsQ0FBRSxxQkFBRixDQUFELENBQTJCRSxJQUEzQixDQUFpQ1MsUUFBUSxDQUFDZixJQUFULENBQWNrRixnQkFBL0M7QUFDQTlFLE1BQUFBLENBQUMsQ0FBRSxjQUFGLENBQUQsQ0FBb0JFLElBQXBCLENBQTBCUyxRQUFRLENBQUNmLElBQVQsQ0FBY21GLFNBQXhDOztBQUNBLFVBQUssUUFBUXBFLFFBQVEsQ0FBQ2YsSUFBVCxDQUFja0YsZ0JBQTNCLEVBQThDO0FBQzdDOUUsUUFBQUEsQ0FBQyxDQUFFLHFCQUFGLENBQUQsQ0FBMkJFLElBQTNCLENBQWlDLFNBQWpDO0FBQ0E7QUFDRDtBQUNELEdBVkQ7QUFXQTtBQUNEOzs7OztBQUdBLFNBQVM4RSxrQkFBVCxHQUE4QjtBQUM3QmhGLEVBQUFBLENBQUMsQ0FBRSxtQkFBRixDQUFELENBQXlCNkMsS0FBekIsQ0FBZ0MsWUFBVztBQUMxQyxRQUFJakQsSUFBSSxHQUFHO0FBQ1YsZ0JBQVc7QUFERCxLQUFYO0FBR0EsUUFBSXNDLElBQUksR0FBR2xDLENBQUMsQ0FBRSxJQUFGLENBQVo7QUFDQUEsSUFBQUEsQ0FBQyxDQUFDb0MsSUFBRixDQUFRN0IsT0FBUixFQUFpQlgsSUFBakIsRUFBdUIsVUFBVWUsUUFBVixFQUFxQjtBQUMzQyxVQUFLLFNBQVNBLFFBQVEsQ0FBQ0QsT0FBbEIsSUFBNkIsU0FBU0MsUUFBUSxDQUFDZixJQUFULENBQWNjLE9BQXpELEVBQW1FO0FBQ2xFd0IsUUFBQUEsSUFBSSxDQUFDdUIsTUFBTCxHQUFjdkMsSUFBZCxDQUFvQlAsUUFBUSxDQUFDZixJQUFULENBQWNxRixPQUFsQyxFQUE0Q1IsTUFBNUM7QUFDQTtBQUNELEtBSkQ7QUFLQSxXQUFPLEtBQVA7QUFDQSxHQVhEO0FBWUEsQyxDQUVEOzs7QUFDQXpFLENBQUMsQ0FBRWtGLFFBQUYsQ0FBRCxDQUFjakQsRUFBZCxDQUFrQixRQUFsQixFQUE0Qix5QkFBNUIsRUFBdUQsWUFBVztBQUNqRSxNQUFJa0QsT0FBSjtBQUNBMUYsRUFBQUEsZ0JBQWdCLENBQUUsV0FBRixFQUFlTyxDQUFDLENBQUUsSUFBRixDQUFELENBQVVHLEdBQVYsRUFBZixDQUFoQjtBQUNBNEIsRUFBQUEsWUFBWSxDQUFFb0QsT0FBRixDQUFaO0FBQ0FBLEVBQUFBLE9BQU8sR0FBR25ELFVBQVUsQ0FBRSxZQUFXO0FBQ2hDaEMsSUFBQUEsQ0FBQyxDQUFFLHVCQUFGLENBQUQsQ0FBNkIwRSxPQUE3QjtBQUNBMUUsSUFBQUEsQ0FBQyxDQUFFLHVCQUFGLENBQUQsQ0FBNkJvRixHQUE3QixDQUFrQyxvQkFBbEMsRUFBeUR6QixNQUF6RDtBQUNBLEdBSG1CLEVBR2pCLElBSGlCLENBQXBCO0FBSUEsQ0FSRCxFLENBVUE7O0FBQ0EzRCxDQUFDLENBQUVrRixRQUFGLENBQUQsQ0FBY2pELEVBQWQsQ0FBa0IsUUFBbEIsRUFBNEIsMEJBQTVCLEVBQXdELFlBQVc7QUFDbEUsTUFBSWtELE9BQUo7QUFDQTFGLEVBQUFBLGdCQUFnQixDQUFFLFlBQUYsRUFBZ0JPLENBQUMsQ0FBRSxJQUFGLENBQUQsQ0FBVUcsR0FBVixFQUFoQixDQUFoQjtBQUNBNEIsRUFBQUEsWUFBWSxDQUFFb0QsT0FBRixDQUFaO0FBQ0FBLEVBQUFBLE9BQU8sR0FBR25ELFVBQVUsQ0FBRSxZQUFXO0FBQ2hDaEMsSUFBQUEsQ0FBQyxDQUFFLHVCQUFGLENBQUQsQ0FBNkIwRSxPQUE3QjtBQUNBMUUsSUFBQUEsQ0FBQyxDQUFFLHVCQUFGLENBQUQsQ0FBNkJvRixHQUE3QixDQUFrQyxvQkFBbEMsRUFBeUR6QixNQUF6RDtBQUNBLEdBSG1CLEVBR2pCLElBSGlCLENBQXBCO0FBSUEsQ0FSRCxFLENBVUE7O0FBQ0EzRCxDQUFDLENBQUVrRixRQUFGLENBQUQsQ0FBY2pELEVBQWQsQ0FBa0IsUUFBbEIsRUFBNEIsK0NBQTVCLEVBQTZFLFlBQVc7QUFDdkZaLEVBQUFBLGdCQUFnQjtBQUNoQixDQUZEO0FBSUE7Ozs7QUFHQXJCLENBQUMsQ0FBRWtGLFFBQUYsQ0FBRCxDQUFjakQsRUFBZCxDQUFrQixPQUFsQixFQUEyQiwyQkFBM0IsRUFBd0QsWUFBVztBQUNsRWpDLEVBQUFBLENBQUMsQ0FBRSwyQkFBRixDQUFELENBQWlDb0YsR0FBakMsQ0FBc0MsSUFBdEMsRUFBNkNDLElBQTdDLENBQW1ELFNBQW5ELEVBQThELEtBQTlEO0FBQ0EsQ0FGRDtBQUdBOzs7O0FBR0FyRixDQUFDLENBQUVrRixRQUFGLENBQUQsQ0FBY2pELEVBQWQsQ0FBa0IsT0FBbEIsRUFBMkIsc0JBQTNCLEVBQW1ELFlBQVc7QUFDN0RqQyxFQUFBQSxDQUFDLENBQUUsc0JBQUYsQ0FBRCxDQUE0Qm9GLEdBQTVCLENBQWlDLElBQWpDLEVBQXdDQyxJQUF4QyxDQUE4QyxTQUE5QyxFQUF5RCxLQUF6RDtBQUNBLENBRkQ7QUFHQTs7Ozs7Ozs7O0FBUUFyRixDQUFDLENBQUVrRixRQUFGLENBQUQsQ0FBY0ksS0FBZCxDQUFxQixZQUFXO0FBRS9CO0FBQ0FqRSxFQUFBQSxnQkFBZ0IsR0FIZSxDQUsvQjs7QUFDQTVCLEVBQUFBLGdCQUFnQixDQUFFLFdBQUYsRUFBZU8sQ0FBQyxDQUFFLHlCQUFGLENBQUQsQ0FBK0JHLEdBQS9CLEVBQWYsQ0FBaEI7QUFDQVYsRUFBQUEsZ0JBQWdCLENBQUUsWUFBRixFQUFnQk8sQ0FBQyxDQUFFLDBCQUFGLENBQUQsQ0FBZ0NHLEdBQWhDLEVBQWhCLENBQWhCLENBUCtCLENBUy9COztBQUNBLE1BQUtzQyxNQUFNLENBQUNDLEVBQVAsQ0FBVUMsT0FBZixFQUF5QjtBQUN4QjNDLElBQUFBLENBQUMsQ0FBRSx5QkFBRixDQUFELENBQStCMkMsT0FBL0I7QUFDQTNDLElBQUFBLENBQUMsQ0FBRSwwQkFBRixDQUFELENBQWdDMkMsT0FBaEM7QUFDQTNDLElBQUFBLENBQUMsQ0FBRSx1Q0FBRixDQUFELENBQTZDMkMsT0FBN0M7QUFDQTNDLElBQUFBLENBQUMsQ0FBRSwyQkFBRixDQUFELENBQWlDMkMsT0FBakM7QUFDQTNDLElBQUFBLENBQUMsQ0FBRSxnQ0FBRixDQUFELENBQXNDMkMsT0FBdEM7QUFDQTNDLElBQUFBLENBQUMsQ0FBRSxpQ0FBRixDQUFELENBQXVDMkMsT0FBdkM7QUFDQSxHQWpCOEIsQ0FtQi9COzs7QUFDQWpCLEVBQUFBLHNCQUFzQixHQXBCUyxDQXNCL0I7O0FBQ0FrQixFQUFBQSxrQkFBa0IsR0F2QmEsQ0F5Qi9COztBQUNBd0IsRUFBQUEsa0JBQWtCLEdBMUJhLENBNEIvQjs7QUFDQVksRUFBQUEsa0JBQWtCO0FBQ2xCLENBOUJEIiwiZmlsZSI6Im9iamVjdC1zeW5jLWZvci1zYWxlc2ZvcmNlLWFkbWluLmpzIiwic291cmNlc0NvbnRlbnQiOlsiXG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIFdvcmRQcmVzcyBhbmQgU2FsZXNmb3JjZSBmaWVsZCByZXN1bHRzIHZpYSBhbiBBamF4IGNhbGxcblx0ICogQHBhcmFtIHN0cmluZyBzeXN0ZW0gd2hldGhlciB3ZSB3YW50IFdvcmRQcmVzcyBvciBTYWxlc2ZvcmNlIGRhdGFcblx0ICogQHBhcmFtIHN0cmluZyBvYmplY3RfbmFtZSB0aGUgdmFsdWUgZm9yIHRoZSBvYmplY3QgbmFtZSBmcm9tIHRoZSB0aGUgPHNlbGVjdD5cblx0ICovXG5cdGZ1bmN0aW9uIGxvYWRGaWVsZE9wdGlvbnMoIHN5c3RlbSwgb2JqZWN0X25hbWUgKSB7XG5cdFx0dmFyIGRhdGEgPSB7XG5cdFx0XHQnYWN0aW9uJyA6ICdnZXRfJyArIHN5c3RlbSArICdfb2JqZWN0X2ZpZWxkcycsXG5cdFx0fVxuXHRcdHZhciBzZWxlY3RGaWVsZCA9ICcuY29sdW1uLScgKyBzeXN0ZW0gKyAnX2ZpZWxkIHNlbGVjdCc7XG5cdFx0dmFyIGZpZWxkcyA9ICcnO1xuXHRcdHZhciBmaXJzdF9maWVsZCA9ICQoIHNlbGVjdEZpZWxkICsgJyBvcHRpb24nKS5maXJzdCgpLnRleHQoKTtcblx0XHRpZiAoICcnICE9PSAkKCBzZWxlY3RGaWVsZCApLnZhbCgpICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRmaWVsZHMgKz0gJzxvcHRpb24gdmFsdWU9XCJcIj4nICsgZmlyc3RfZmllbGQgKyAnPC9vcHRpb24+Jztcblx0XHRpZiAoICd3b3JkcHJlc3MnID09PSBzeXN0ZW0gKSB7XG5cdFx0XHRkYXRhWyd3b3JkcHJlc3Nfb2JqZWN0J10gPSBvYmplY3RfbmFtZTtcblx0XHR9IGVsc2UgaWYgKCAnc2FsZXNmb3JjZScgPT09IHN5c3RlbSApIHtcblx0XHRcdGRhdGFbJ3NhbGVzZm9yY2Vfb2JqZWN0J10gPSBvYmplY3RfbmFtZTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIGZpZWxkcztcblx0XHR9XG5cblx0XHQkLmFqYXgoe1xuXHRcdFx0dHlwZTogJ1BPU1QnLFxuXHRcdFx0dXJsOiBhamF4dXJsLFxuXHRcdFx0ZGF0YTogZGF0YSxcblx0XHRcdGJlZm9yZVNlbmQ6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHQkKCAnLnNwaW5uZXItJyArIHN5c3RlbSApLmFkZENsYXNzKCAnaXMtYWN0aXZlJyApO1xuXHRcdFx0fSxcbiAgICBcdFx0c3VjY2VzczogZnVuY3Rpb24oIHJlc3BvbnNlICkge1xuICAgIFx0XHRcdCQuZWFjaCggcmVzcG9uc2UuZGF0YS5maWVsZHMsIGZ1bmN0aW9uKCBpbmRleCwgdmFsdWUgKSB7XG5cdFx0XHRcdFx0aWYgKCAnd29yZHByZXNzJyA9PT0gc3lzdGVtICkge1xuXHRcdFx0XHRcdFx0ZmllbGRzICs9ICc8b3B0aW9uIHZhbHVlPVwiJyArIHZhbHVlLmtleSArICdcIj4nICsgdmFsdWUua2V5ICsgJzwvb3B0aW9uPic7XG5cdFx0XHRcdFx0fSBlbHNlIGlmICggJ3NhbGVzZm9yY2UnID09PSBzeXN0ZW0gKSB7XG5cdFx0XHRcdFx0XHRmaWVsZHMgKz0gJzxvcHRpb24gdmFsdWU9XCInICsgdmFsdWUubmFtZSArICdcIj4nICsgdmFsdWUubGFiZWwgKyAnPC9vcHRpb24+Jztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0XHQkKCBzZWxlY3RGaWVsZCApLmh0bWwoIGZpZWxkcyApO1xuICAgIFx0XHR9LFxuICAgIFx0XHRjb21wbGV0ZTogZnVuY3Rpb24gKCkge1xuICAgIFx0XHRcdCQoICcuc3Bpbm5lci0nICsgc3lzdGVtICkucmVtb3ZlQ2xhc3MoICdpcy1hY3RpdmUnICk7XG4gICAgXHRcdH1cblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBEb24ndCBzaG93IHRoZSBXU0RMIGZpbGUgZmllbGQgdW5sZXNzIFNPQVAgaXMgZW5hYmxlZFxuXHQgKi9cblx0ZnVuY3Rpb24gdG9nZ2xlU29hcEZpZWxkcygpIHtcblx0XHRpZiAoIDAgPCAkKCAnLm9iamVjdC1zeW5jLWZvci1zYWxlc2ZvcmNlLWVuYWJsZS1zb2FwJyApLmxlbmd0aCApIHtcblx0XHRcdGlmICggJCggJy5vYmplY3Qtc3luYy1mb3Itc2FsZXNmb3JjZS1lbmFibGUtc29hcCBpbnB1dCcgKS5pcyggJzpjaGVja2VkJyApICkge1xuXHRcdFx0XHQkKCAnLm9iamVjdC1zeW5jLWZvci1zYWxlc2ZvcmNlLXNvYXAtd3NkbC1wYXRoJyApLnNob3coKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdCQoICcub2JqZWN0LXN5bmMtZm9yLXNhbGVzZm9yY2Utc29hcC13c2RsLXBhdGgnICkuaGlkZSgpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBHZW5lcmF0ZXMgdGhlIFNhbGVzZm9yY2Ugb2JqZWN0IGZpZWxkcyBiYXNlZCBvbiB0aGUgZHJvcGRvd24gYWN0aXZpdHkgYW5kIEFQSSByZXN1bHRzLlxuXHQgKiBUaGlzIGFsc28gZ2VuZXJhdGVzIG90aGVyIHF1ZXJ5IGZpZWxkcyB0aGF0IGFyZSBvYmplY3Qtc3BlY2lmaWMsIGxpa2UgZGF0ZSBmaWVsZHMsIHJlY29yZCB0eXBlcyBhbGxvd2VkLCBldGMuXG5cdCAqL1xuXHRmdW5jdGlvbiBzYWxlc2ZvcmNlT2JqZWN0RmllbGRzKCkge1xuXG5cdFx0dmFyIGRlbGF5ID0gKCBmdW5jdGlvbigpIHtcblx0XHRcdHZhciB0aW1lciA9IDA7XG5cdFx0XHRyZXR1cm4gZnVuY3Rpb24oIGNhbGxiYWNrLCBtcyApIHtcblx0XHRcdFx0Y2xlYXJUaW1lb3V0ICggdGltZXIgKTtcblx0XHRcdFx0dGltZXIgPSBzZXRUaW1lb3V0KCBjYWxsYmFjaywgbXMgKTtcblx0XHRcdH07XG5cdFx0fSgpICk7XG5cblx0XHRpZiAoIDAgPT09ICQoICcuc2FsZXNmb3JjZV9yZWNvcmRfdHlwZXNfYWxsb3dlZCA+IConICkubGVuZ3RoICkge1xuXHRcdFx0JCggJy5zYWxlc2ZvcmNlX3JlY29yZF90eXBlc19hbGxvd2VkJyApLmhpZGUoKTtcblx0XHR9XG5cblx0XHRpZiAoIDAgPT09ICQoICcuc2FsZXNmb3JjZV9yZWNvcmRfdHlwZV9kZWZhdWx0ID4gKicgKS5sZW5ndGggKSB7XG5cdFx0XHQkKCAnLnNhbGVzZm9yY2VfcmVjb3JkX3R5cGVfZGVmYXVsdCcgKS5oaWRlKCk7XG5cdFx0fVxuXHRcdGlmICggMCA9PT0gJCggJy5wdWxsX3RyaWdnZXJfZmllbGQgPiAqJyApLmxlbmd0aCApIHtcblx0XHRcdCQoICcucHVsbF90cmlnZ2VyX2ZpZWxkJyApLmhpZGUoKTtcblx0XHR9XG5cblx0XHQkKCAnI3NhbGVzZm9yY2Vfb2JqZWN0JyApLm9uKCAnY2hhbmdlJywgZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgdGhhdCA9IHRoaXM7XG5cdFx0XHR2YXIgZGVsYXlUaW1lID0gMTAwMDtcblx0XHRcdGRlbGF5KCBmdW5jdGlvbigpIHtcblx0XHRcdFx0dmFyIGRhdGEgPSB7XG5cdFx0XHRcdFx0J2FjdGlvbicgOiAnZ2V0X3NhbGVzZm9yY2Vfb2JqZWN0X2Rlc2NyaXB0aW9uJyxcblx0XHRcdFx0XHQnaW5jbHVkZScgOiBbICdmaWVsZHMnLCAncmVjb3JkVHlwZUluZm9zJyBdLFxuXHRcdFx0XHRcdCdmaWVsZF90eXBlJyA6ICdkYXRldGltZScsXG5cdFx0XHRcdFx0J3NhbGVzZm9yY2Vfb2JqZWN0JyA6IHRoYXQudmFsdWVcblx0XHRcdFx0fVxuXHRcdFx0XHQkLnBvc3QoIGFqYXh1cmwsIGRhdGEsIGZ1bmN0aW9uKCByZXNwb25zZSApIHtcblxuXHRcdFx0XHRcdHZhciByZWNvcmRUeXBlc0FsbG93ZWRNYXJrdXAgPSAnJywgcmVjb3JkVHlwZURlZmF1bHRNYXJrdXAgPSAnJywgZGF0ZU1hcmt1cCA9ICcnO1xuXG5cdFx0XHRcdFx0aWYgKCAwIDwgJCggcmVzcG9uc2UuZGF0YS5yZWNvcmRUeXBlSW5mb3MgKS5sZW5ndGggKSB7XG5cdFx0XHRcdFx0XHRyZWNvcmRUeXBlc0FsbG93ZWRNYXJrdXAgKz0gJzxsYWJlbCBmb3I9XCJzYWxlc2ZvcmNlX3JlY29yZF90eXBlc19hbGxvd2VkXCI+QWxsb3dlZCBSZWNvcmQgVHlwZXM6PC9sYWJlbD48ZGl2IGNsYXNzPVwiY2hlY2tib3hlc1wiPic7XG5cdFx0XHRcdFx0XHQkLmVhY2goIHJlc3BvbnNlLmRhdGEucmVjb3JkVHlwZUluZm9zLCBmdW5jdGlvbiggaW5kZXgsIHZhbHVlICkge1xuXHRcdFx0XHRcdFx0XHRyZWNvcmRUeXBlc0FsbG93ZWRNYXJrdXAgKz0gJzxsYWJlbD48aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgY2xhc3M9XCJmb3JtLWNoZWNrYm94XCIgdmFsdWU9XCInICsgaW5kZXggKyAnXCIgbmFtZT1cInNhbGVzZm9yY2VfcmVjb3JkX3R5cGVzX2FsbG93ZWRbJyArIGluZGV4ICsgJ11cIiBpZD1cInNhbGVzZm9yY2VfcmVjb3JkX3R5cGVzX2FsbG93ZWQtJyArIGluZGV4ICsgJ1wiPiAnICsgdmFsdWUgKyAnPC9sYWJlbD4nO1xuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRyZWNvcmRUeXBlc0FsbG93ZWRNYXJrdXAgKz0gJzwvZGl2Pic7XG5cblxuXHRcdFx0XHRcdFx0cmVjb3JkVHlwZURlZmF1bHRNYXJrdXAgKz0gJzxsYWJlbCBmb3I9XCJzYWxlc2ZvcmNlX3JlY29yZF90eXBlX2RlZmF1bHRcIj5EZWZhdWx0IFJlY29yZCBUeXBlOjwvbGFiZWw+Jztcblx0XHRcdFx0XHRcdHJlY29yZFR5cGVEZWZhdWx0TWFya3VwICs9ICc8c2VsZWN0IG5hbWU9XCJzYWxlc2ZvcmNlX3JlY29yZF90eXBlX2RlZmF1bHRcIiBpZD1cInNhbGVzZm9yY2VfcmVjb3JkX3R5cGVfZGVmYXVsdFwiPjxvcHRpb24gdmFsdWU9XCJcIj4tIFNlbGVjdCByZWNvcmQgdHlwZSAtPC9vcHRpb24+Jztcblx0XHRcdFx0XHRcdCQuZWFjaCggcmVzcG9uc2UuZGF0YS5yZWNvcmRUeXBlSW5mb3MsIGZ1bmN0aW9uKCBpbmRleCwgdmFsdWUgKSB7XG5cdFx0XHRcdFx0XHRcdHJlY29yZFR5cGVEZWZhdWx0TWFya3VwICs9ICc8b3B0aW9uIHZhbHVlPVwiJyArIGluZGV4ICsgJ1wiPicgKyB2YWx1ZSArICc8L29wdGlvbj4nO1xuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0JCggJy5zYWxlc2ZvcmNlX3JlY29yZF90eXBlc19hbGxvd2VkJyApLmh0bWwoIHJlY29yZFR5cGVzQWxsb3dlZE1hcmt1cCApO1xuXHRcdFx0XHRcdCQoICcuc2FsZXNmb3JjZV9yZWNvcmRfdHlwZV9kZWZhdWx0JyApLmh0bWwoIHJlY29yZFR5cGVEZWZhdWx0TWFya3VwICk7XG5cblx0XHRcdFx0XHRpZiAoIDAgPCAkKCByZXNwb25zZS5kYXRhLmZpZWxkcyApLmxlbmd0aCApIHtcblx0XHRcdFx0XHRcdGRhdGVNYXJrdXAgKz0gJzxsYWJlbCBmb3I9XCJwdWxsX3RyaWdnZXJfZmllbGRcIj5EYXRlIGZpZWxkIHRvIHRyaWdnZXIgcHVsbDo8L2xhYmVsPic7XG5cdFx0XHRcdFx0XHRkYXRlTWFya3VwICs9ICc8c2VsZWN0IG5hbWU9XCJwdWxsX3RyaWdnZXJfZmllbGRcIiBpZD1cInB1bGxfdHJpZ2dlcl9maWVsZFwiPjxvcHRpb24gdmFsdWU9XCJcIj4tIFNlbGVjdCBkYXRlIGZpZWxkIC08L29wdGlvbj4nXG5cdFx0XHRcdFx0XHQkLmVhY2goIHJlc3BvbnNlLmRhdGEuZmllbGRzLCBmdW5jdGlvbiggaW5kZXgsIHZhbHVlICkge1xuXHRcdFx0XHRcdFx0XHRkYXRlTWFya3VwICs9ICc8b3B0aW9uIHZhbHVlPVwiJyArIHZhbHVlLm5hbWUgKyAnXCI+JyArIHZhbHVlLmxhYmVsICsgJzwvb3B0aW9uPic7XG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdGRhdGVNYXJrdXAgKz0gJzwvc2VsZWN0Pic7XG5cdFx0XHRcdFx0XHRkYXRlTWFya3VwICs9ICc8cCBjbGFzcz1cImRlc2NyaXB0aW9uXCI+VGhlc2UgYXJlIGRhdGUgZmllbGRzIHRoYXQgY2FuIGNhdXNlIFdvcmRQcmVzcyB0byBwdWxsIGFuIHVwZGF0ZSBmcm9tIFNhbGVzZm9yY2UsIGFjY29yZGluZyB0byB0aGUgPGNvZGU+c2FsZXNmb3JjZV9wdWxsPC9jb2RlPiBjbGFzcy48L3A+J1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdCQoICcucHVsbF90cmlnZ2VyX2ZpZWxkJyApLmh0bWwoIGRhdGVNYXJrdXAgKTtcblxuXHRcdFx0XHRcdGlmICggJycgIT09IHJlY29yZFR5cGVzQWxsb3dlZE1hcmt1cCApIHtcblx0XHRcdFx0XHRcdCQoICcuc2FsZXNmb3JjZV9yZWNvcmRfdHlwZXNfYWxsb3dlZCcgKS5zaG93KCk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdCQoICcuc2FsZXNmb3JjZV9yZWNvcmRfdHlwZXNfYWxsb3dlZCcgKS5oaWRlKCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGlmICggJycgIT09IHJlY29yZFR5cGVEZWZhdWx0TWFya3VwICkge1xuXHRcdFx0XHRcdFx0JCggJy5zYWxlc2ZvcmNlX3JlY29yZF90eXBlX2RlZmF1bHQnICkuc2hvdygpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHQkKCAnLnNhbGVzZm9yY2VfcmVjb3JkX3R5cGVfZGVmYXVsdCcgKS5oaWRlKCk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aWYgKCAnJyAhPT0gZGF0ZU1hcmt1cCApIHtcblx0XHRcdFx0XHRcdCQoICcucHVsbF90cmlnZ2VyX2ZpZWxkJyApLnNob3coKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0JCggJy5wdWxsX3RyaWdnZXJfZmllbGQnICkuaGlkZSgpO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGlmICggalF1ZXJ5LmZuLnNlbGVjdDIgKSB7XG5cdFx0XHRcdFx0XHQkKCAnc2VsZWN0I3NhbGVzZm9yY2VfcmVjb3JkX3R5cGVfZGVmYXVsdCcgKS5zZWxlY3QyKCk7XG5cdFx0XHRcdFx0XHQkKCAnc2VsZWN0I3B1bGxfdHJpZ2dlcl9maWVsZCcgKS5zZWxlY3QyKCk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdH0pO1xuXHRcdFx0fSwgZGVsYXlUaW1lICk7XG5cdFx0fSk7XG5cdH1cblx0LyoqXG5cdCAqIER1cGxpY2F0ZXMgdGhlIGZpZWxkcyBmb3IgYSBuZXcgcm93IGluIHRoZSBmaWVsZG1hcCBvcHRpb25zIHNjcmVlbi5cblx0ICogdGhpcyBhcHBlYXJzIG5vdCB0byB3b3JrIHdpdGggZGF0YSgpIGluc3RlYWQgb2YgYXR0cigpXG5cdCAqL1xuXHQgZnVuY3Rpb24gYWRkRmllbGRNYXBwaW5nUm93KCkge1xuXHRcdCQoICcjYWRkLWZpZWxkLW1hcHBpbmcnICkuY2xpY2soIGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIHNhbGVzZm9yY2VPYmplY3QgPSAkKCAnI3NhbGVzZm9yY2Vfb2JqZWN0JyApLnZhbCgpO1xuXHRcdFx0dmFyIHdvcmRwcmVzc09iamVjdCA9ICQoICcjd29yZHByZXNzX29iamVjdCcgKS52YWwoKTtcblx0XHRcdHZhciBuZXdLZXkgPSBuZXcgRGF0ZSgpLmdldFVUQ01pbGxpc2Vjb25kcygpO1xuXHRcdFx0dmFyIGxhc3RSb3cgPSAkKCAndGFibGUuZmllbGRzIHRib2R5IHRyJyApLmxhc3QoKTtcblx0XHRcdHZhciBvbGRLZXkgPSBsYXN0Um93LmF0dHIoICdkYXRhLWtleScgKTtcblx0XHRcdG9sZEtleSA9IG5ldyBSZWdFeHAoIG9sZEtleSwgJ2cnICk7XG5cdFx0XHQkKCB0aGlzICkudGV4dCggJ0FkZCBhbm90aGVyIGZpZWxkIG1hcHBpbmcnICk7XG5cdFx0XHRpZiAoICcnICE9PSB3b3JkcHJlc3NPYmplY3QgJiYgJycgIT09IHNhbGVzZm9yY2VPYmplY3QgKSB7XG5cdFx0XHRcdGZpZWxkbWFwRmllbGRzKCBvbGRLZXksIG5ld0tleSwgbGFzdFJvdyApO1xuXHRcdFx0XHQkKCB0aGlzICkucGFyZW50KCkuZmluZCggJy5taXNzaW5nLW9iamVjdCcgKS5yZW1vdmUoKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdCQoIHRoaXMgKS5wYXJlbnQoKS5wcmVwZW5kKCAnPGRpdiBjbGFzcz1cImVycm9yIG1pc3Npbmctb2JqZWN0XCI+PHNwYW4+WW91IGhhdmUgdG8gcGljayBhIFdvcmRQcmVzcyBvYmplY3QgYW5kIGEgU2FsZXNmb3JjZSBvYmplY3QgdG8gYWRkIGZpZWxkIG1hcHBpbmcuPC9zcGFuPjwvZGl2PicgKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9KTtcblx0fVxuXHQvKipcblx0ICogQ2xvbmVzIHRoZSBmaWVsZHNldCBtYXJrdXAgcHJvdmlkZWQgYnkgdGhlIHNlcnZlci1zaWRlIHRlbXBsYXRlIGFuZCBhcHBlbmRzIGl0IGF0IHRoZSBlbmQuXG5cdCAqIHRoaXMgYXBwZWFycyBub3QgdG8gd29yayB3aXRoIGRhdGEoKSBpbnN0ZWFkIG9mIGF0dHIoKVxuXHQgKiBAcGFyYW0gc3RyaW5nIG9sZEtleSB0aGUgZGF0YSBrZXkgYXR0cmlidXRlIG9mIHRoZSBzZXQgdGhhdCBpcyBiZWluZyBjbG9uZWRcblx0ICogQHBhcmFtIHN0cmluZyBuZXdLZXkgdGhlIGRhdGEga2V5IGF0dHJpYnV0ZSBmb3IgdGhlIG9uZSB3ZSdyZSBhcHBlbmRpbmdcblx0ICogQHBhcmFtIG9iamVjdCBsYXN0Um93IHRoZSBsYXN0IHNldCBvZiB0aGUgZmllbGRtYXBcblx0ICovXG5cdGZ1bmN0aW9uIGZpZWxkbWFwRmllbGRzKCBvbGRLZXksIG5ld0tleSwgbGFzdFJvdyApIHtcblx0XHR2YXIgbmV4dFJvdyA9ICcnO1xuICAgICAgICBpZiAoIGpRdWVyeS5mbi5zZWxlY3QyICkge1xuICAgICAgICBcdG5leHRSb3cgPSBsYXN0Um93LmZpbmQoICdzZWxlY3QnIClcblx0ICAgICAgICAgICAgLnNlbGVjdDIoICdkZXN0cm95JyApXG5cdCAgICAgICAgICAgIC5lbmQoKVxuXHQgICAgICAgICAgICAuY2xvbmUoIHRydWUgKS5yZW1vdmVDbGFzcyggJ2ZpZWxkbWFwLXRlbXBsYXRlJyApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICBcdG5leHRSb3cgPSBsYXN0Um93LmNsb25lKCB0cnVlICk7XG4gICAgICAgIH1cblx0XHQkKCBuZXh0Um93ICkuYXR0ciggJ2RhdGEta2V5JywgbmV3S2V5ICk7XG5cdFx0JCggbmV4dFJvdyApLmVhY2goZnVuY3Rpb24oKSB7XG5cdFx0XHQkKCB0aGlzICkuaHRtbCggZnVuY3Rpb24oIGksIGggKSB7XG5cdFx0XHRcdHJldHVybiBoLnJlcGxhY2UoIG9sZEtleSwgbmV3S2V5ICk7XG5cdFx0XHR9KTtcblx0XHR9KTtcblx0XHQkKCAndGFibGUuZmllbGRzIHRib2R5JyApLmFwcGVuZCggbmV4dFJvdyApO1xuXHRcdGlmICggalF1ZXJ5LmZuLnNlbGVjdDIgKSB7XG5cdFx0XHRsYXN0Um93LmZpbmQoICdzZWxlY3QnICkuc2VsZWN0MigpO1xuXHRcdFx0bmV4dFJvdy5maW5kKCAnc2VsZWN0JyApLnNlbGVjdDIoKTtcblx0XHR9XG5cdH1cblx0LyoqXG5cdCAqIEhhbmRsZSBtYW51YWwgcHVzaCBhbmQgcHVsbCBvZiBvYmplY3RzXG5cdCAqL1xuXHRmdW5jdGlvbiBwdXNoQW5kUHVsbE9iamVjdHMoKSB7XG5cdFx0JCggJy5zYWxlc2ZvcmNlX3VzZXJfYWpheF9tZXNzYWdlJyApLmhpZGUoKTtcblx0XHRpZiAoIDAgPCAkKCAnI3dvcmRwcmVzc19vYmplY3RfYWpheCcgKS5sZW5ndGggKSB7XG5cdFx0XHQkKCAnLnB1c2hfdG9fc2FsZXNmb3JjZV9idXR0b24nICkub24oICdjbGljaycsIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHR2YXIgd29yZHByZXNzT2JqZWN0ID0gJCggJyN3b3JkcHJlc3Nfb2JqZWN0X2FqYXgnICkudmFsKCk7XG5cdFx0XHRcdHZhciB3b3JkcHJlc3NJZCA9ICQoICcjd29yZHByZXNzX2lkX2FqYXgnICkudmFsKCk7XG5cdFx0XHRcdHZhciBzYWxlc2ZvcmNlSWQgPSAkKCAnI3NhbGVzZm9yY2VfaWRfYWpheCcgKS52YWwoKTtcblx0XHRcdFx0dmFyIGRhdGEgPSB7XG5cdFx0XHRcdFx0J2FjdGlvbicgOiAncHVzaF90b19zYWxlc2ZvcmNlJyxcblx0XHRcdFx0XHQnd29yZHByZXNzX29iamVjdCcgOiB3b3JkcHJlc3NPYmplY3QsXG5cdFx0XHRcdFx0J3dvcmRwcmVzc19pZCcgOiB3b3JkcHJlc3NJZCxcblx0XHRcdFx0XHQnc2FsZXNmb3JjZV9pZCcgOiBzYWxlc2ZvcmNlSWRcblx0XHRcdFx0fVxuXHRcdFx0XHQkLnBvc3QoIGFqYXh1cmwsIGRhdGEsIGZ1bmN0aW9uKCByZXNwb25zZSApIHtcblx0XHRcdFx0XHRpZiAoIHRydWUgPT09IHJlc3BvbnNlLnN1Y2Nlc3MgKSB7XG5cdFx0XHRcdFx0XHR1cGRhdGVTYWxlc2ZvcmNlVXNlclN1bW1hcnkoKTtcblx0XHRcdFx0XHRcdCQoICcuc2FsZXNmb3JjZV91c2VyX2FqYXhfbWVzc2FnZScgKS53aWR0aCggJCggJy5tYXBwZWQtc2FsZXNmb3JjZS11c2VyJyApLndpZHRoKCkgLSAyNyApO1xuXHRcdFx0XHRcdFx0JCggJy5zYWxlc2ZvcmNlX3VzZXJfYWpheF9tZXNzYWdlJyApLmh0bWwoICc8cD5UaGlzIG9iamVjdCBoYXMgYmVlbiBwdXNoZWQgdG8gU2FsZXNmb3JjZS48L3A+JyApLmZhZGVJbigpLmRlbGF5KCA0MDAwICkuZmFkZU91dCgpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH0pO1xuXHRcdH1cblx0XHQkKCAnLnB1bGxfZnJvbV9zYWxlc2ZvcmNlX2J1dHRvbicgKS5vbiggJ2NsaWNrJywgZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgc2FsZXNmb3JjZUlkID0gJCggJyNzYWxlc2ZvcmNlX2lkX2FqYXgnICkudmFsKCk7XG5cdFx0XHR2YXIgd29yZHByZXNzT2JqZWN0ID0gJCggJyN3b3JkcHJlc3Nfb2JqZWN0X2FqYXgnICkudmFsKCk7XG5cdFx0XHR2YXIgZGF0YSA9IHtcblx0XHRcdFx0J2FjdGlvbicgOiAncHVsbF9mcm9tX3NhbGVzZm9yY2UnLFxuXHRcdFx0XHQnc2FsZXNmb3JjZV9pZCcgOiBzYWxlc2ZvcmNlSWQsXG5cdFx0XHRcdCd3b3JkcHJlc3Nfb2JqZWN0JyA6IHdvcmRwcmVzc09iamVjdFxuXHRcdFx0fVxuXHRcdFx0JC5wb3N0KCBhamF4dXJsLCBkYXRhLCBmdW5jdGlvbiggcmVzcG9uc2UgKSB7XG5cdFx0XHRcdGlmICggdHJ1ZSA9PT0gcmVzcG9uc2Uuc3VjY2VzcyApIHtcblx0XHRcdFx0XHR1cGRhdGVTYWxlc2ZvcmNlVXNlclN1bW1hcnkoKTtcblx0XHRcdFx0XHQkKCAnLnNhbGVzZm9yY2VfdXNlcl9hamF4X21lc3NhZ2UnICkud2lkdGgoICQoICcubWFwcGVkLXNhbGVzZm9yY2UtdXNlcicgKS53aWR0aCgpIC0gMjcgKTtcblx0XHRcdFx0XHQkKCAnLnNhbGVzZm9yY2VfdXNlcl9hamF4X21lc3NhZ2UnICkuaHRtbCggJzxwPlRoaXMgb2JqZWN0IGhhcyBiZWVuIHB1bGxlZCBmcm9tIFNhbGVzZm9yY2UuPC9wPicgKS5mYWRlSW4oKS5kZWxheSggNDAwMCApLmZhZGVPdXQoKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fSk7XG5cdH1cblx0LyoqXG5cdCAqIFVwZGF0ZXMgdGhlIHVzZXIgcHJvZmlsZSBzdW1tYXJ5IG9mIFNhbGVzZm9yY2UgaW5mby5cblx0ICovXG5cdGZ1bmN0aW9uIHVwZGF0ZVNhbGVzZm9yY2VVc2VyU3VtbWFyeSgpIHtcblx0XHR2YXIgbWFwcGluZ0lkID0gJCggJyNtYXBwaW5nX2lkX2FqYXgnICkudmFsKCk7XG5cdFx0dmFyIGRhdGEgPSB7XG5cdFx0XHQnYWN0aW9uJyA6ICdyZWZyZXNoX21hcHBlZF9kYXRhJyxcblx0XHRcdCdtYXBwaW5nX2lkJyA6IG1hcHBpbmdJZFxuXHRcdH1cblx0XHQkLnBvc3QoIGFqYXh1cmwsIGRhdGEsIGZ1bmN0aW9uKCByZXNwb25zZSApIHtcblx0XHRcdGlmICggdHJ1ZSA9PT0gcmVzcG9uc2Uuc3VjY2VzcyApIHtcblx0XHRcdFx0JCggJ3RkLmxhc3Rfc3luY19tZXNzYWdlJyApLnRleHQoIHJlc3BvbnNlLmRhdGEubGFzdF9zeW5jX21lc3NhZ2UgKTtcblx0XHRcdFx0JCggJ3RkLmxhc3Rfc3luY19hY3Rpb24nICkudGV4dCggcmVzcG9uc2UuZGF0YS5sYXN0X3N5bmNfYWN0aW9uICk7XG5cdFx0XHRcdCQoICd0ZC5sYXN0X3N5bmNfc3RhdHVzJyApLnRleHQoIHJlc3BvbnNlLmRhdGEubGFzdF9zeW5jX3N0YXR1cyApO1xuXHRcdFx0XHQkKCAndGQubGFzdF9zeW5jJyApLnRleHQoIHJlc3BvbnNlLmRhdGEubGFzdF9zeW5jICk7XG5cdFx0XHRcdGlmICggJzEnID09PSByZXNwb25zZS5kYXRhLmxhc3Rfc3luY19zdGF0dXMgKSB7XG5cdFx0XHRcdFx0JCggJ3RkLmxhc3Rfc3luY19zdGF0dXMnICkudGV4dCggJ3N1Y2Nlc3MnICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXHQvKipcblx0ICogQ2xlYXIgdGhlIHBsdWdpbiBjYWNoZSB2aWEgQWpheCByZXF1ZXN0LlxuXHQgKi9cblx0ZnVuY3Rpb24gY2xlYXJTZndwQ2FjaGVMaW5rKCkge1xuXHRcdCQoICcjY2xlYXItc2Z3cC1jYWNoZScgKS5jbGljayggZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgZGF0YSA9IHtcblx0XHRcdFx0J2FjdGlvbicgOiAnY2xlYXJfc2Z3cF9jYWNoZSdcblx0XHRcdH1cblx0XHRcdHZhciB0aGF0ID0gJCggdGhpcyApO1xuXHRcdFx0JC5wb3N0KCBhamF4dXJsLCBkYXRhLCBmdW5jdGlvbiggcmVzcG9uc2UgKSB7XG5cdFx0XHRcdGlmICggdHJ1ZSA9PT0gcmVzcG9uc2Uuc3VjY2VzcyAmJiB0cnVlID09PSByZXNwb25zZS5kYXRhLnN1Y2Nlc3MgKSB7XG5cdFx0XHRcdFx0dGhhdC5wYXJlbnQoKS5odG1sKCByZXNwb25zZS5kYXRhLm1lc3NhZ2UgKS5mYWRlSW4oKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fSk7XG5cdH1cblxuXHQvLyBsb2FkIGF2YWlsYWJsZSBvcHRpb25zIGlmIHRoZSB3b3JkcHJlc3Mgb2JqZWN0IGNoYW5nZXNcblx0JCggZG9jdW1lbnQgKS5vbiggJ2NoYW5nZScsICdzZWxlY3Qjd29yZHByZXNzX29iamVjdCcsIGZ1bmN0aW9uKCkge1xuXHRcdHZhciB0aW1lb3V0O1xuXHRcdGxvYWRGaWVsZE9wdGlvbnMoICd3b3JkcHJlc3MnLCAkKCB0aGlzICkudmFsKCkgKTtcblx0XHRjbGVhclRpbWVvdXQoIHRpbWVvdXQgKTtcblx0XHR0aW1lb3V0ID0gc2V0VGltZW91dCggZnVuY3Rpb24oKSB7XG5cdFx0XHQkKCAndGFibGUuZmllbGRzIHRib2R5IHRyJyApLmZhZGVPdXQoKTtcblx0XHRcdCQoICd0YWJsZS5maWVsZHMgdGJvZHkgdHInICkubm90KCAnLmZpZWxkbWFwLXRlbXBsYXRlJyApLnJlbW92ZSgpO1xuXHRcdH0sIDEwMDAgKTtcblx0fSk7XG5cblx0Ly8gbG9hZCBhdmFpbGFibGUgb3B0aW9ucyBpZiB0aGUgc2FsZXNmb3JjZSBvYmplY3QgY2hhbmdlc1xuXHQkKCBkb2N1bWVudCApLm9uKCAnY2hhbmdlJywgJ3NlbGVjdCNzYWxlc2ZvcmNlX29iamVjdCcsIGZ1bmN0aW9uKCkge1xuXHRcdHZhciB0aW1lb3V0O1xuXHRcdGxvYWRGaWVsZE9wdGlvbnMoICdzYWxlc2ZvcmNlJywgJCggdGhpcyApLnZhbCgpICk7XG5cdFx0Y2xlYXJUaW1lb3V0KCB0aW1lb3V0ICk7XG5cdFx0dGltZW91dCA9IHNldFRpbWVvdXQoIGZ1bmN0aW9uKCkge1xuXHRcdFx0JCggJ3RhYmxlLmZpZWxkcyB0Ym9keSB0cicgKS5mYWRlT3V0KCk7XG5cdFx0XHQkKCAndGFibGUuZmllbGRzIHRib2R5IHRyJyApLm5vdCggJy5maWVsZG1hcC10ZW1wbGF0ZScgKS5yZW1vdmUoKTtcblx0XHR9LCAxMDAwICk7XG5cdH0pO1xuXG5cdC8vIERvbid0IHNob3cgdGhlIFdTREwgZmlsZSBmaWVsZCB1bmxlc3MgU09BUCBpcyBlbmFibGVkXG5cdCQoIGRvY3VtZW50ICkub24oICdjaGFuZ2UnLCAnLm9iamVjdC1zeW5jLWZvci1zYWxlc2ZvcmNlLWVuYWJsZS1zb2FwIGlucHV0JywgZnVuY3Rpb24oKSB7XG5cdFx0dG9nZ2xlU29hcEZpZWxkcygpO1xuXHR9KTtcblxuXHQvKipcblx0ICogQXMgdGhlIERydXBhbCBwbHVnaW4gZG9lcywgd2Ugb25seSBhbGxvdyBvbmUgZmllbGQgdG8gYmUgYSBwcmVtYXRjaFxuXHQgKi9cblx0JCggZG9jdW1lbnQgKS5vbiggJ2NsaWNrJywgJy5jb2x1bW4taXNfcHJlbWF0Y2ggaW5wdXQnLCBmdW5jdGlvbigpIHtcblx0XHQkKCAnLmNvbHVtbi1pc19wcmVtYXRjaCBpbnB1dCcgKS5ub3QoIHRoaXMgKS5wcm9wKCAnY2hlY2tlZCcsIGZhbHNlICk7XG5cdH0pO1xuXHQvKipcblx0ICogQXMgdGhlIERydXBhbCBwbHVnaW4gZG9lcywgd2Ugb25seSBhbGxvdyBvbmUgZmllbGQgdG8gYmUgYSBrZXlcblx0ICovXG5cdCQoIGRvY3VtZW50ICkub24oICdjbGljaycsICcuY29sdW1uLWlzX2tleSBpbnB1dCcsIGZ1bmN0aW9uKCkge1xuXHRcdCQoICcuY29sdW1uLWlzX2tleSBpbnB1dCcgKS5ub3QoIHRoaXMgKS5wcm9wKCAnY2hlY2tlZCcsIGZhbHNlICk7XG5cdH0pO1xuXHQvKipcblx0ICogV2hlbiB0aGUgcGx1Z2luIGxvYWRzLCBpbml0aWFsaXplIG9yIGVuYWJsZSB0aGluZ3M6XG5cdCAqIFNlbGVjdDIgb24gc2VsZWN0IGZpZWxkc1xuXHQgKiBDbGVhciBmaWVsZHMgd2hlbiB0aGUgdGFyZ2V0ZWQgV29yZFByZXNzIG9yIFNhbGVzZm9yY2Ugb2JqZWN0IHR5cGUgY2hhbmdlc1xuXHQgKiBNYW5hZ2UgdGhlIGRpc3BsYXkgZm9yIFNhbGVzZm9yY2Ugb2JqZWN0IGZpZWxkcyBiYXNlZCBvbiBBUEkgcmVwb25zZVxuXHQgKiBNYW51YWwgcHVzaCBhbmQgcHVsbFxuXHQgKiBDbGVhcmluZyB0aGUgY2FjaGVcblx0ICovXG5cdCQoIGRvY3VtZW50ICkucmVhZHkoIGZ1bmN0aW9uKCkge1xuXG5cdFx0Ly8gRG9uJ3Qgc2hvdyB0aGUgV1NETCBmaWxlIGZpZWxkIHVubGVzcyBTT0FQIGlzIGVuYWJsZWRcblx0XHR0b2dnbGVTb2FwRmllbGRzKCk7XG5cblx0XHQvLyBpZiB0aGVyZSBpcyBhbHJlYWR5IGEgd3Agb3Igc2Ygb2JqZWN0LCBtYWtlIHN1cmUgaXQgaGFzIHRoZSByaWdodCBmaWVsZHMgd2hlbiB0aGUgcGFnZSBsb2Fkc1xuXHRcdGxvYWRGaWVsZE9wdGlvbnMoICd3b3JkcHJlc3MnLCAkKCAnc2VsZWN0I3dvcmRwcmVzc19vYmplY3QnICkudmFsKCkgKTtcblx0XHRsb2FkRmllbGRPcHRpb25zKCAnc2FsZXNmb3JjZScsICQoICdzZWxlY3Qjc2FsZXNmb3JjZV9vYmplY3QnICkudmFsKCkgKTtcblxuXHRcdC8vIHNldHVwIHRoZSBzZWxlY3QyIGZpZWxkcyBpZiB0aGUgbGlicmFyeSBpcyBwcmVzZW50XG5cdFx0aWYgKCBqUXVlcnkuZm4uc2VsZWN0MiApIHtcblx0XHRcdCQoICdzZWxlY3Qjd29yZHByZXNzX29iamVjdCcgKS5zZWxlY3QyKCk7XG5cdFx0XHQkKCAnc2VsZWN0I3NhbGVzZm9yY2Vfb2JqZWN0JyApLnNlbGVjdDIoKTtcblx0XHRcdCQoICdzZWxlY3Qjc2FsZXNmb3JjZV9yZWNvcmRfdHlwZV9kZWZhdWx0JyApLnNlbGVjdDIoKTtcblx0XHRcdCQoICdzZWxlY3QjcHVsbF90cmlnZ2VyX2ZpZWxkJyApLnNlbGVjdDIoKTtcblx0XHRcdCQoICcuY29sdW1uLXdvcmRwcmVzc19maWVsZCBzZWxlY3QnICkuc2VsZWN0MigpO1xuXHRcdFx0JCggJy5jb2x1bW4tc2FsZXNmb3JjZV9maWVsZCBzZWxlY3QnICkuc2VsZWN0MigpO1xuXHRcdH1cblxuXHRcdC8vIGdldCB0aGUgYXZhaWxhYmxlIFNhbGVzZm9yY2Ugb2JqZWN0IGNob2ljZXNcblx0XHRzYWxlc2ZvcmNlT2JqZWN0RmllbGRzKCk7XG5cblx0XHQvLyBEdXBsaWNhdGUgdGhlIGZpZWxkcyBmb3IgYSBuZXcgcm93IGluIHRoZSBmaWVsZG1hcCBvcHRpb25zIHNjcmVlbi5cblx0XHRhZGRGaWVsZE1hcHBpbmdSb3coKTtcblxuXHRcdC8vIEhhbmRsZSBtYW51YWwgcHVzaCBhbmQgcHVsbCBvZiBvYmplY3RzXG5cdFx0cHVzaEFuZFB1bGxPYmplY3RzKCk7XG5cblx0XHQvLyBDbGVhciB0aGUgcGx1Z2luIGNhY2hlIHZpYSBBamF4IHJlcXVlc3QuXG5cdFx0Y2xlYXJTZndwQ2FjaGVMaW5rKCk7XG5cdH0pO1xuXG4iXX0= +}(jQuery)); diff --git a/assets/js/object-sync-for-salesforce-admin.min.js b/assets/js/object-sync-for-salesforce-admin.min.js index 083f0810..d0f73a81 100644 --- a/assets/js/object-sync-for-salesforce-admin.min.js +++ b/assets/js/object-sync-for-salesforce-admin.min.js @@ -1 +1 @@ -"use strict";!function(c){function s(t,e){var s={action:"get_"+t+"_object_fields"},a=".column-"+t+"_field select",o="",l=c(a+" option").first().text();if(""===c(a).val()){if(o+='","wordpress"===t)s.wordpress_object=e;else{if("salesforce"!==t)return o;s.salesforce_object=e}c.ajax({type:"POST",url:ajaxurl,data:s,beforeSend:function(){c(".spinner-"+t).addClass("is-active")},success:function(e){c.each(e.data.fields,function(e,s){"wordpress"===t?o+='":"salesforce"===t&&(o+='")}),c(a).html(o)},complete:function(){c(".spinner-"+t).removeClass("is-active")}})}}function e(){0 *").length&&c(".salesforce_record_types_allowed").hide(),0===c(".salesforce_record_type_default > *").length&&c(".salesforce_record_type_default").hide(),0===c(".pull_trigger_field > *").length&&c(".pull_trigger_field").hide(),c("#salesforce_object").on("change",function(){var s=this;e(function(){var e={action:"get_salesforce_object_description",include:["fields","recordTypeInfos"],field_type:"datetime",salesforce_object:s.value};c.post(ajaxurl,e,function(e){var t="",a="",o="";0Allowed Record Types:
',c.each(e.data.recordTypeInfos,function(e,s){t+='"}),t+="
",a+='',a+='',c.each(e.data.fields,function(e,s){o+='"}),o+="",o+='

These are date fields that can cause WordPress to pull an update from Salesforce, according to the salesforce_pull class.

'),c(".pull_trigger_field").html(o),""!==t?c(".salesforce_record_types_allowed").show():c(".salesforce_record_types_allowed").hide(),""!==a?c(".salesforce_record_type_default").show():c(".salesforce_record_type_default").hide(),""!==o?c(".pull_trigger_field").show():c(".pull_trigger_field").hide(),jQuery.fn.select2&&(c("select#salesforce_record_type_default").select2(),c("select#pull_trigger_field").select2())})},1e3)})}function a(){c("#add-field-mapping").click(function(){var e=c("#salesforce_object").val(),s=c("#wordpress_object").val(),t=(new Date).getUTCMilliseconds(),a=c("table.fields tbody tr").last(),o=a.attr("data-key");return o=new RegExp(o,"g"),c(this).text("Add another field mapping"),""!==s&&""!==e?(function(t,a,e){var s="";s=jQuery.fn.select2?e.find("select").select2("destroy").end().clone(!0).removeClass("fieldmap-template"):e.clone(!0);c(s).attr("data-key",a),c(s).each(function(){c(this).html(function(e,s){return s.replace(t,a)})}),c("table.fields tbody").append(s),jQuery.fn.select2&&(e.find("select").select2(),s.find("select").select2())}(o,t,a),c(this).parent().find(".missing-object").remove()):c(this).parent().prepend('
You have to pick a WordPress object and a Salesforce object to add field mapping.
'),!1})}function o(){var e={action:"refresh_mapped_data",mapping_id:c("#mapping_id_ajax").val()};c.post(ajaxurl,e,function(e){!0===e.success&&(c("td.last_sync_message").text(e.data.last_sync_message),c("td.last_sync_action").text(e.data.last_sync_action),c("td.last_sync_status").text(e.data.last_sync_status),c("td.last_sync").text(e.data.last_sync),"1"===e.data.last_sync_status&&c("td.last_sync_status").text("success"))})}c(document).on("change","select#wordpress_object",function(){var e;s("wordpress",c(this).val()),clearTimeout(e),e=setTimeout(function(){c("table.fields tbody tr").fadeOut(),c("table.fields tbody tr").not(".fieldmap-template").remove()},1e3)}),c(document).on("change","select#salesforce_object",function(){var e;s("salesforce",c(this).val()),clearTimeout(e),e=setTimeout(function(){c("table.fields tbody tr").fadeOut(),c("table.fields tbody tr").not(".fieldmap-template").remove()},1e3)}),c(document).on("change",".object-sync-for-salesforce-enable-soap input",function(){e()}),c(document).on("click",".column-is_prematch input",function(){c(".column-is_prematch input").not(this).prop("checked",!1)}),c(document).on("click",".column-is_key input",function(){c(".column-is_key input").not(this).prop("checked",!1)}),c(document).ready(function(){e(),s("wordpress",c("select#wordpress_object").val()),s("salesforce",c("select#salesforce_object").val()),jQuery.fn.select2&&(c("select#wordpress_object").select2(),c("select#salesforce_object").select2(),c("select#salesforce_record_type_default").select2(),c("select#pull_trigger_field").select2(),c(".column-wordpress_field select").select2(),c(".column-salesforce_field select").select2()),t(),a(),c(".salesforce_user_ajax_message").hide(),0This object has been pushed to Salesforce.

").fadeIn().delay(4e3).fadeOut())}),!1}),c(".pull_from_salesforce_button").on("click",function(){var e={action:"pull_from_salesforce",salesforce_id:c("#salesforce_id_ajax").val(),wordpress_object:c("#wordpress_object_ajax").val()};return c.post(ajaxurl,e,function(e){!0===e.success&&(o(),c(".salesforce_user_ajax_message").width(c(".mapped-salesforce-user").width()-27),c(".salesforce_user_ajax_message").html("

This object has been pulled from Salesforce.

").fadeIn().delay(4e3).fadeOut())}),!1}),c("#clear-sfwp-cache").click(function(){var s=c(this);return c.post(ajaxurl,{action:"clear_sfwp_cache"},function(e){!0===e.success&&!0===e.data.success&&s.parent().html(e.data.message).fadeIn()}),!1})})}(jQuery); \ No newline at end of file +!function(c){"use strict";function s(t,e){var s={action:"get_"+t+"_object_fields"},a=".column-"+t+"_field select",o="",l=c(a+" option").first().text();if(""===c(a).val()){if(o+='","wordpress"===t)s.wordpress_object=e;else{if("salesforce"!==t)return o;s.salesforce_object=e}c.ajax({type:"POST",url:ajaxurl,data:s,beforeSend:function(){c(".spinner-"+t).addClass("is-active")},success:function(e){c.each(e.data.fields,function(e,s){"wordpress"===t?o+='":"salesforce"===t&&(o+='")}),c(a).html(o)},complete:function(){c(".spinner-"+t).removeClass("is-active")}})}}function e(){0 *").length&&c(".salesforce_record_types_allowed").hide(),0===c(".salesforce_record_type_default > *").length&&c(".salesforce_record_type_default").hide(),0===c(".pull_trigger_field > *").length&&c(".pull_trigger_field").hide(),c("#salesforce_object").on("change",function(){var s=this;e(function(){var e={action:"get_salesforce_object_description",include:["fields","recordTypeInfos"],field_type:"datetime",salesforce_object:s.value};c.post(ajaxurl,e,function(e){var t="",a="",o="";0Allowed Record Types:
',c.each(e.data.recordTypeInfos,function(e,s){t+='"}),t+="
",a+='',a+='',c.each(e.data.fields,function(e,s){o+='"}),o+="",o+='

These are date fields that can cause WordPress to pull an update from Salesforce, according to the salesforce_pull class.

'),c(".pull_trigger_field").html(o),""!==t?c(".salesforce_record_types_allowed").show():c(".salesforce_record_types_allowed").hide(),""!==a?c(".salesforce_record_type_default").show():c(".salesforce_record_type_default").hide(),""!==o?c(".pull_trigger_field").show():c(".pull_trigger_field").hide(),jQuery.fn.select2&&(c("select#salesforce_record_type_default").select2(),c("select#pull_trigger_field").select2())})},1e3)})}function a(){c("#add-field-mapping").click(function(){var e=c("#salesforce_object").val(),s=c("#wordpress_object").val(),t=(new Date).getUTCMilliseconds(),a=c("table.fields tbody tr").last(),o=a.attr("data-key");return o=new RegExp(o,"g"),c(this).text("Add another field mapping"),""!==s&&""!==e?(function(t,a,e){var s="";s=jQuery.fn.select2?e.find("select").select2("destroy").end().clone(!0).removeClass("fieldmap-template"):e.clone(!0);c(s).attr("data-key",a),c(s).each(function(){c(this).html(function(e,s){return s.replace(t,a)})}),c("table.fields tbody").append(s),jQuery.fn.select2&&(e.find("select").select2(),s.find("select").select2())}(o,t,a),c(this).parent().find(".missing-object").remove()):c(this).parent().prepend('
You have to pick a WordPress object and a Salesforce object to add field mapping.
'),!1})}function o(){var e={action:"refresh_mapped_data",mapping_id:c("#mapping_id_ajax").val()};c.post(ajaxurl,e,function(e){!0===e.success&&(c("td.last_sync_message").text(e.data.last_sync_message),c("td.last_sync_action").text(e.data.last_sync_action),c("td.last_sync_status").text(e.data.last_sync_status),c("td.last_sync").text(e.data.last_sync),"1"===e.data.last_sync_status&&c("td.last_sync_status").text("success"))})}c(document).on("change","select#wordpress_object",function(){var e;s("wordpress",c(this).val()),clearTimeout(e),e=setTimeout(function(){c("table.fields tbody tr").fadeOut(),c("table.fields tbody tr").not(".fieldmap-template").remove()},1e3)}),c(document).on("change","select#salesforce_object",function(){var e;s("salesforce",c(this).val()),clearTimeout(e),e=setTimeout(function(){c("table.fields tbody tr").fadeOut(),c("table.fields tbody tr").not(".fieldmap-template").remove()},1e3)}),c(document).on("change",".object-sync-for-salesforce-enable-soap input",function(){e()}),c(document).on("click",".column-is_prematch input",function(){c(".column-is_prematch input").not(this).prop("checked",!1)}),c(document).on("click",".column-is_key input",function(){c(".column-is_key input").not(this).prop("checked",!1)}),c(document).ready(function(){e(),s("wordpress",c("select#wordpress_object").val()),s("salesforce",c("select#salesforce_object").val()),jQuery.fn.select2&&(c("select#wordpress_object").select2(),c("select#salesforce_object").select2(),c("select#salesforce_record_type_default").select2(),c("select#pull_trigger_field").select2(),c(".column-wordpress_field select").select2(),c(".column-salesforce_field select").select2()),t(),a(),c(".salesforce_user_ajax_message").hide(),0This object has been pushed to Salesforce.

").fadeIn().delay(4e3).fadeOut())}),!1}),c(".pull_from_salesforce_button").on("click",function(){var e={action:"pull_from_salesforce",salesforce_id:c("#salesforce_id_ajax").val(),wordpress_object:c("#wordpress_object_ajax").val()};return c.post(ajaxurl,e,function(e){!0===e.success&&(o(),c(".salesforce_user_ajax_message").width(c(".mapped-salesforce-user").width()-27),c(".salesforce_user_ajax_message").html("

This object has been pulled from Salesforce.

").fadeIn().delay(4e3).fadeOut())}),!1}),c("#clear-sfwp-cache").click(function(){var s=c(this);return c.post(ajaxurl,{action:"clear_sfwp_cache"},function(e){!0===e.success&&!0===e.data.success&&s.parent().html(e.data.message).fadeIn()}),!1})})}(jQuery); \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index be0c4f46..f9ea3a6e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -6017,6 +6017,18 @@ "plugin-error": "^1.0.1" } }, + "gulp-iife": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/gulp-iife/-/gulp-iife-0.4.0.tgz", + "integrity": "sha512-2XPPYEsCi7sfJyu6LhFWynxgc5cHylHKeGqQo3vp2LWViKm/2eJlsMWX9WvKVzoLkyTf52PwEW0d0X3By+sdFQ==", + "dev": true, + "requires": { + "lodash": "^4.17.11", + "source-map": "^0.5.3", + "through2": "^2.0.0", + "vinyl-sourcemaps-apply": "^0.2.1" + } + }, "gulp-imagemin": { "version": "6.2.0", "resolved": "https://registry.npmjs.org/gulp-imagemin/-/gulp-imagemin-6.2.0.tgz", diff --git a/package.json b/package.json index 7cedcbd4..00203a20 100644 --- a/package.json +++ b/package.json @@ -27,6 +27,7 @@ "gulp-babel": "^8.0.0", "gulp-concat": "^2.6.1", "gulp-eslint": "^6.0.0", + "gulp-iife": "^0.4.0", "gulp-imagemin": "^6.2.0", "gulp-plumber": "^1.2.1", "gulp-postcss": "^8.0.0", From 1597ebfc9cc6de6cd955fe27ef75126ba0eeff47 Mon Sep 17 00:00:00 2001 From: Jonathan Stegall Date: Sun, 5 Jan 2020 20:26:50 -0600 Subject: [PATCH 19/27] separate javascript into multiple files that get concatenated --- assets/js/object-sync-for-salesforce-admin.js | 209 +++++----- .../object-sync-for-salesforce-admin.min.js | 2 +- assets/js/src/01-salesforce-object.js | 95 +++++ assets/js/src/02-load-field-options.js | 68 ++++ assets/js/src/03-fieldmap-rows.js | 66 ++++ assets/js/src/04-interface-ajax-events.js | 82 ++++ assets/js/src/05-soap.js | 17 + assets/js/src/06-document-ready.js | 39 ++ assets/js/src/admin.js | 370 ------------------ 9 files changed, 474 insertions(+), 474 deletions(-) create mode 100644 assets/js/src/01-salesforce-object.js create mode 100644 assets/js/src/02-load-field-options.js create mode 100644 assets/js/src/03-fieldmap-rows.js create mode 100644 assets/js/src/04-interface-ajax-events.js create mode 100644 assets/js/src/05-soap.js create mode 100644 assets/js/src/06-document-ready.js delete mode 100644 assets/js/src/admin.js diff --git a/assets/js/object-sync-for-salesforce-admin.js b/assets/js/object-sync-for-salesforce-admin.js index 7e0b774d..7d9d74fc 100644 --- a/assets/js/object-sync-for-salesforce-admin.js +++ b/assets/js/object-sync-for-salesforce-admin.js @@ -1,75 +1,10 @@ ;(function($) { "use strict"; -/** - * Gets the WordPress and Salesforce field results via an Ajax call - * @param string system whether we want WordPress or Salesforce data - * @param string object_name the value for the object name from the the */ +function loadFieldOptions(system, object_name) { + var data = { + 'action': 'get_' + system + '_object_fields' + }; + var selectField = '.column-' + system + '_field select'; + var fields = ''; + var first_field = $(selectField + ' option').first().text(); + if ('' !== $(selectField).val()) { + return; + } + fields += ''; + + if ('wordpress' === system) { + data['wordpress_object'] = object_name; + } else if ('salesforce' === system) { + data['salesforce_object'] = object_name; + } else { + return fields; + } + + $.ajax({ + type: 'POST', + url: ajaxurl, + data: data, + beforeSend: function beforeSend() { + $('.spinner-' + system).addClass('is-active'); + }, + success: function success(response) { + $.each(response.data.fields, function (index, value) { + if ('wordpress' === system) { + fields += ''; + } else if ('salesforce' === system) { + fields += ''; + } + }); + $(selectField).html(fields); + }, + complete: function complete() { + $('.spinner-' + system).removeClass('is-active'); + } + }); +} // load available options if the wordpress object changes + + +$(document).on('change', 'select#wordpress_object', function () { + var timeout; + loadFieldOptions('wordpress', $(this).val()); + clearTimeout(timeout); + timeout = setTimeout(function () { + $('table.fields tbody tr').fadeOut(); + $('table.fields tbody tr').not('.fieldmap-template').remove(); + }, 1000); +}); // load available options if the salesforce object changes + +$(document).on('change', 'select#salesforce_object', function () { + var timeout; + loadFieldOptions('salesforce', $(this).val()); + clearTimeout(timeout); + timeout = setTimeout(function () { + $('table.fields tbody tr').fadeOut(); + $('table.fields tbody tr').not('.fieldmap-template').remove(); + }, 1000); +}); +"use strict"; + +/** + * Duplicates the fields for a new row in the fieldmap options screen. + * this appears not to work with data() instead of attr() + */ function addFieldMappingRow() { $('#add-field-mapping').click(function () { var salesforceObject = $('#salesforce_object').val(); @@ -218,10 +225,25 @@ function fieldmapFields(oldKey, newKey, lastRow) { } } /** - * Handle manual push and pull of objects + * As the Drupal plugin does, we only allow one field to be a prematch + */ + + +$(document).on('click', '.column-is_prematch input', function () { + $('.column-is_prematch input').not(this).prop('checked', false); +}); +/** + * As the Drupal plugin does, we only allow one field to be a key */ +$(document).on('click', '.column-is_key input', function () { + $('.column-is_key input').not(this).prop('checked', false); +}); +"use strict"; +/** + * Handle manual push and pull of objects + */ function pushAndPullObjects() { $('.salesforce_user_ajax_message').hide(); @@ -307,46 +329,28 @@ function clearSfwpCacheLink() { }); return false; }); -} // load available options if the wordpress object changes - +} +"use strict"; -$(document).on('change', 'select#wordpress_object', function () { - var timeout; - loadFieldOptions('wordpress', $(this).val()); - clearTimeout(timeout); - timeout = setTimeout(function () { - $('table.fields tbody tr').fadeOut(); - $('table.fields tbody tr').not('.fieldmap-template').remove(); - }, 1000); -}); // load available options if the salesforce object changes +/** + * Don't show the WSDL file field unless SOAP is enabled + */ +function toggleSoapFields() { + if (0 < $('.object-sync-for-salesforce-enable-soap').length) { + if ($('.object-sync-for-salesforce-enable-soap input').is(':checked')) { + $('.object-sync-for-salesforce-soap-wsdl-path').show(); + } else { + $('.object-sync-for-salesforce-soap-wsdl-path').hide(); + } + } +} // Don't show the WSDL file field unless SOAP is enabled -$(document).on('change', 'select#salesforce_object', function () { - var timeout; - loadFieldOptions('salesforce', $(this).val()); - clearTimeout(timeout); - timeout = setTimeout(function () { - $('table.fields tbody tr').fadeOut(); - $('table.fields tbody tr').not('.fieldmap-template').remove(); - }, 1000); -}); // Don't show the WSDL file field unless SOAP is enabled $(document).on('change', '.object-sync-for-salesforce-enable-soap input', function () { toggleSoapFields(); }); -/** - * As the Drupal plugin does, we only allow one field to be a prematch - */ - -$(document).on('click', '.column-is_prematch input', function () { - $('.column-is_prematch input').not(this).prop('checked', false); -}); -/** - * As the Drupal plugin does, we only allow one field to be a key - */ +"use strict"; -$(document).on('click', '.column-is_key input', function () { - $('.column-is_key input').not(this).prop('checked', false); -}); /** * When the plugin loads, initialize or enable things: * Select2 on select fields @@ -355,7 +359,6 @@ $(document).on('click', '.column-is_key input', function () { * Manual push and pull * Clearing the cache */ - $(document).ready(function () { // Don't show the WSDL file field unless SOAP is enabled toggleSoapFields(); // if there is already a wp or sf object, make sure it has the right fields when the page loads @@ -381,5 +384,5 @@ $(document).ready(function () { clearSfwpCacheLink(); }); -//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFkbWluLmpzIl0sIm5hbWVzIjpbImxvYWRGaWVsZE9wdGlvbnMiLCJzeXN0ZW0iLCJvYmplY3RfbmFtZSIsImRhdGEiLCJzZWxlY3RGaWVsZCIsImZpZWxkcyIsImZpcnN0X2ZpZWxkIiwiJCIsImZpcnN0IiwidGV4dCIsInZhbCIsImFqYXgiLCJ0eXBlIiwidXJsIiwiYWpheHVybCIsImJlZm9yZVNlbmQiLCJhZGRDbGFzcyIsInN1Y2Nlc3MiLCJyZXNwb25zZSIsImVhY2giLCJpbmRleCIsInZhbHVlIiwia2V5IiwibmFtZSIsImxhYmVsIiwiaHRtbCIsImNvbXBsZXRlIiwicmVtb3ZlQ2xhc3MiLCJ0b2dnbGVTb2FwRmllbGRzIiwibGVuZ3RoIiwiaXMiLCJzaG93IiwiaGlkZSIsInNhbGVzZm9yY2VPYmplY3RGaWVsZHMiLCJkZWxheSIsInRpbWVyIiwiY2FsbGJhY2siLCJtcyIsImNsZWFyVGltZW91dCIsInNldFRpbWVvdXQiLCJvbiIsInRoYXQiLCJkZWxheVRpbWUiLCJwb3N0IiwicmVjb3JkVHlwZXNBbGxvd2VkTWFya3VwIiwicmVjb3JkVHlwZURlZmF1bHRNYXJrdXAiLCJkYXRlTWFya3VwIiwicmVjb3JkVHlwZUluZm9zIiwialF1ZXJ5IiwiZm4iLCJzZWxlY3QyIiwiYWRkRmllbGRNYXBwaW5nUm93IiwiY2xpY2siLCJzYWxlc2ZvcmNlT2JqZWN0Iiwid29yZHByZXNzT2JqZWN0IiwibmV3S2V5IiwiRGF0ZSIsImdldFVUQ01pbGxpc2Vjb25kcyIsImxhc3RSb3ciLCJsYXN0Iiwib2xkS2V5IiwiYXR0ciIsIlJlZ0V4cCIsImZpZWxkbWFwRmllbGRzIiwicGFyZW50IiwiZmluZCIsInJlbW92ZSIsInByZXBlbmQiLCJuZXh0Um93IiwiZW5kIiwiY2xvbmUiLCJpIiwiaCIsInJlcGxhY2UiLCJhcHBlbmQiLCJwdXNoQW5kUHVsbE9iamVjdHMiLCJ3b3JkcHJlc3NJZCIsInNhbGVzZm9yY2VJZCIsInVwZGF0ZVNhbGVzZm9yY2VVc2VyU3VtbWFyeSIsIndpZHRoIiwiZmFkZUluIiwiZmFkZU91dCIsIm1hcHBpbmdJZCIsImxhc3Rfc3luY19tZXNzYWdlIiwibGFzdF9zeW5jX2FjdGlvbiIsImxhc3Rfc3luY19zdGF0dXMiLCJsYXN0X3N5bmMiLCJjbGVhclNmd3BDYWNoZUxpbmsiLCJtZXNzYWdlIiwiZG9jdW1lbnQiLCJ0aW1lb3V0Iiwibm90IiwicHJvcCIsInJlYWR5Il0sIm1hcHBpbmdzIjoiOztBQUVDOzs7OztBQUtBLFNBQVNBLGdCQUFULENBQTJCQyxNQUEzQixFQUFtQ0MsV0FBbkMsRUFBaUQ7QUFDaEQsTUFBSUMsSUFBSSxHQUFHO0FBQ1YsY0FBVyxTQUFTRixNQUFULEdBQWtCO0FBRG5CLEdBQVg7QUFHQSxNQUFJRyxXQUFXLEdBQUcsYUFBYUgsTUFBYixHQUFzQixlQUF4QztBQUNBLE1BQUlJLE1BQU0sR0FBRyxFQUFiO0FBQ0EsTUFBSUMsV0FBVyxHQUFHQyxDQUFDLENBQUVILFdBQVcsR0FBRyxTQUFoQixDQUFELENBQTRCSSxLQUE1QixHQUFvQ0MsSUFBcEMsRUFBbEI7O0FBQ0EsTUFBSyxPQUFPRixDQUFDLENBQUVILFdBQUYsQ0FBRCxDQUFpQk0sR0FBakIsRUFBWixFQUFxQztBQUNwQztBQUNBOztBQUNETCxFQUFBQSxNQUFNLElBQUksc0JBQXNCQyxXQUF0QixHQUFvQyxXQUE5Qzs7QUFDQSxNQUFLLGdCQUFnQkwsTUFBckIsRUFBOEI7QUFDN0JFLElBQUFBLElBQUksQ0FBQyxrQkFBRCxDQUFKLEdBQTJCRCxXQUEzQjtBQUNBLEdBRkQsTUFFTyxJQUFLLGlCQUFpQkQsTUFBdEIsRUFBK0I7QUFDckNFLElBQUFBLElBQUksQ0FBQyxtQkFBRCxDQUFKLEdBQTRCRCxXQUE1QjtBQUNBLEdBRk0sTUFFQTtBQUNOLFdBQU9HLE1BQVA7QUFDQTs7QUFFREUsRUFBQUEsQ0FBQyxDQUFDSSxJQUFGLENBQU87QUFDTkMsSUFBQUEsSUFBSSxFQUFFLE1BREE7QUFFTkMsSUFBQUEsR0FBRyxFQUFFQyxPQUZDO0FBR05YLElBQUFB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QixDQUFFLFdBQUYsRUFBZU8sQ0FBQyxDQUFFLHlCQUFGLENBQUQsQ0FBK0JHLEdBQS9CLEVBQWYsQ0FBaEI7QUFDQVYsRUFBQUEsZ0JBQWdCLENBQUUsWUFBRixFQUFnQk8sQ0FBQyxDQUFFLDBCQUFGLENBQUQsQ0FBZ0NHLEdBQWhDLEVBQWhCLENBQWhCLENBUCtCLENBUy9COztBQUNBLE1BQUtzQyxNQUFNLENBQUNDLEVBQVAsQ0FBVUMsT0FBZixFQUF5QjtBQUN4QjNDLElBQUFBLENBQUMsQ0FBRSx5QkFBRixDQUFELENBQStCMkMsT0FBL0I7QUFDQTNDLElBQUFBLENBQUMsQ0FBRSwwQkFBRixDQUFELENBQWdDMkMsT0FBaEM7QUFDQTNDLElBQUFBLENBQUMsQ0FBRSx1Q0FBRixDQUFELENBQTZDMkMsT0FBN0M7QUFDQTNDLElBQUFBLENBQUMsQ0FBRSwyQkFBRixDQUFELENBQWlDMkMsT0FBakM7QUFDQTNDLElBQUFBLENBQUMsQ0FBRSxnQ0FBRixDQUFELENBQXNDMkMsT0FBdEM7QUFDQTNDLElBQUFBLENBQUMsQ0FBRSxpQ0FBRixDQUFELENBQXVDMkMsT0FBdkM7QUFDQSxHQWpCOEIsQ0FtQi9COzs7QUFDQWpCLEVBQUFBLHNCQUFzQixHQXBCUyxDQXNCL0I7O0FBQ0FrQixFQUFBQSxrQkFBa0IsR0F2QmEsQ0F5Qi9COztBQUNBd0IsRUFBQUEsa0JBQWtCLEdBMUJhLENBNEIvQjs7QUFDQVksRUFBQUEsa0JBQWtCO0FBQ2xCLENBOUJEIiwiZmlsZSI6Im9iamVjdC1zeW5jLWZvci1zYWxlc2ZvcmNlLWFkbWluLmpzIiwic291cmNlc0NvbnRlbnQiOlsiXG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIFdvcmRQcmVzcyBhbmQgU2FsZXNmb3JjZSBmaWVsZCByZXN1bHRzIHZpYSBhbiBBamF4IGNhbGxcblx0ICogQHBhcmFtIHN0cmluZyBzeXN0ZW0gd2hldGhlciB3ZSB3YW50IFdvcmRQcmVzcyBvciBTYWxlc2ZvcmNlIGRhdGFcblx0ICogQHBhcmFtIHN0cmluZyBvYmplY3RfbmFtZSB0aGUgdmFsdWUgZm9yIHRoZSBvYmplY3QgbmFtZSBmcm9tIHRoZSB0aGUgPHNlbGVjdD5cblx0ICovXG5cdGZ1bmN0aW9uIGxvYWRGaWVsZE9wdGlvbnMoIHN5c3RlbSwgb2JqZWN0X25hbWUgKSB7XG5cdFx0dmFyIGRhdGEgPSB7XG5cdFx0XHQnYWN0aW9uJyA6ICdnZXRfJyArIHN5c3RlbSArICdfb2JqZWN0X2ZpZWxkcycsXG5cdFx0fVxuXHRcdHZhciBzZWxlY3RGaWVsZCA9ICcuY29sdW1uLScgKyBzeXN0ZW0gKyAnX2ZpZWxkIHNlbGVjdCc7XG5cdFx0dmFyIGZpZWxkcyA9ICcnO1xuXHRcdHZhciBmaXJzdF9maWVsZCA9ICQoIHNlbGVjdEZpZWxkICsgJyBvcHRpb24nKS5maXJzdCgpLnRleHQoKTtcblx0XHRpZiAoICcnICE9PSAkKCBzZWxlY3RGaWVsZCApLnZhbCgpICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRmaWVsZHMgKz0gJzxvcHRpb24gdmFsdWU9XCJcIj4nICsgZmlyc3RfZmllbGQgKyAnPC9vcHRpb24+Jztcblx0XHRpZiAoICd3b3JkcHJlc3MnID09PSBzeXN0ZW0gKSB7XG5cdFx0XHRkYXRhWyd3b3JkcHJlc3Nfb2JqZWN0J10gPSBvYmplY3RfbmFtZTtcblx0XHR9IGVsc2UgaWYgKCAnc2FsZXNmb3JjZScgPT09IHN5c3RlbSApIHtcblx0XHRcdGRhdGFbJ3NhbGVzZm9yY2Vfb2JqZWN0J10gPSBvYmplY3RfbmFtZTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIGZpZWxkcztcblx0XHR9XG5cblx0XHQkLmFqYXgoe1xuXHRcdFx0dHlwZTogJ1BPU1QnLFxuXHRcdFx0dXJsOiBhamF4dXJsLFxuXHRcdFx0ZGF0YTogZGF0YSxcblx0XHRcdGJlZm9yZVNlbmQ6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHQkKCAnLnNwaW5uZXItJyArIHN5c3RlbSApLmFkZENsYXNzKCAnaXMtYWN0aXZlJyApO1xuXHRcdFx0fSxcbiAgICBcdFx0c3VjY2VzczogZnVuY3Rpb24oIHJlc3BvbnNlICkge1xuICAgIFx0XHRcdCQuZWFjaCggcmVzcG9uc2UuZGF0YS5maWVsZHMsIGZ1bmN0aW9uKCBpbmRleCwgdmFsdWUgKSB7XG5cdFx0XHRcdFx0aWYgKCAnd29yZHByZXNzJyA9PT0gc3lzdGVtICkge1xuXHRcdFx0XHRcdFx0ZmllbGRzICs9ICc8b3B0aW9uIHZhbHVlPVwiJyArIHZhbHVlLmtleSArICdcIj4nICsgdmFsdWUua2V5ICsgJzwvb3B0aW9uPic7XG5cdFx0XHRcdFx0fSBlbHNlIGlmICggJ3NhbGVzZm9yY2UnID09PSBzeXN0ZW0gKSB7XG5cdFx0XHRcdFx0XHRmaWVsZHMgKz0gJzxvcHRpb24gdmFsdWU9XCInICsgdmFsdWUubmFtZSArICdcIj4nICsgdmFsdWUubGFiZWwgKyAnPC9vcHRpb24+Jztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0XHQkKCBzZWxlY3RGaWVsZCApLmh0bWwoIGZpZWxkcyApO1xuICAgIFx0XHR9LFxuICAgIFx0XHRjb21wbGV0ZTogZnVuY3Rpb24gKCkge1xuICAgIFx0XHRcdCQoICcuc3Bpbm5lci0nICsgc3lzdGVtICkucmVtb3ZlQ2xhc3MoICdpcy1hY3RpdmUnICk7XG4gICAgXHRcdH1cblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBEb24ndCBzaG93IHRoZSBXU0RMIGZpbGUgZmllbGQgdW5sZXNzIFNPQVAgaXMgZW5hYmxlZFxuXHQgKi9cblx0ZnVuY3Rpb24gdG9nZ2xlU29hcEZpZWxkcygpIHtcblx0XHRpZiAoIDAgPCAkKCAnLm9iamVjdC1zeW5jLWZvci1zYWxlc2ZvcmNlLWVuYWJsZS1zb2FwJyApLmxlbmd0aCApIHtcblx0XHRcdGlmICggJCggJy5vYmplY3Qtc3luYy1mb3Itc2FsZXNmb3JjZS1lbmFibGUtc29hcCBpbnB1dCcgKS5pcyggJzpjaGVja2VkJyApICkge1xuXHRcdFx0XHQkKCAnLm9iamVjdC1zeW5jLWZvci1zYWxlc2ZvcmNlLXNvYXAtd3NkbC1wYXRoJyApLnNob3coKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdCQoICcub2JqZWN0LXN5bmMtZm9yLXNhbGVzZm9yY2Utc29hcC13c2RsLXBhdGgnICkuaGlkZSgpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBHZW5lcmF0ZXMgdGhlIFNhbGVzZm9yY2Ugb2JqZWN0IGZpZWxkcyBiYXNlZCBvbiB0aGUgZHJvcGRvd24gYWN0aXZpdHkgYW5kIEFQSSByZXN1bHRzLlxuXHQgKiBUaGlzIGFsc28gZ2VuZXJhdGVzIG90aGVyIHF1ZXJ5IGZpZWxkcyB0aGF0IGFyZSBvYmplY3Qtc3BlY2lmaWMsIGxpa2UgZGF0ZSBmaWVsZHMsIHJlY29yZCB0eXBlcyBhbGxvd2VkLCBldGMuXG5cdCAqL1xuXHRmdW5jdGlvbiBzYWxlc2ZvcmNlT2JqZWN0RmllbGRzKCkge1xuXG5cdFx0dmFyIGRlbGF5ID0gKCBmdW5jdGlvbigpIHtcblx0XHRcdHZhciB0aW1lciA9IDA7XG5cdFx0XHRyZXR1cm4gZnVuY3Rpb24oIGNhbGxiYWNrLCBtcyApIHtcblx0XHRcdFx0Y2xlYXJUaW1lb3V0ICggdGltZXIgKTtcblx0XHRcdFx0dGltZXIgPSBzZXRUaW1lb3V0KCBjYWxsYmFjaywgbXMgKTtcblx0XHRcdH07XG5cdFx0fSgpICk7XG5cblx0XHRpZiAoIDAgPT09ICQoICcuc2FsZXNmb3JjZV9yZWNvcmRfdHlwZXNfYWxsb3dlZCA+IConICkubGVuZ3RoICkge1xuXHRcdFx0JCggJy5zYWxlc2ZvcmNlX3JlY29yZF90eXBlc19hbGxvd2VkJyApLmhpZGUoKTtcblx0XHR9XG5cblx0XHRpZiAoIDAgPT09ICQoICcuc2FsZXNmb3JjZV9yZWNvcmRfdHlwZV9kZWZhdWx0ID4gKicgKS5sZW5ndGggKSB7XG5cdFx0XHQkKCAnLnNhbGVzZm9yY2VfcmVjb3JkX3R5cGVfZGVmYXVsdCcgKS5oaWRlKCk7XG5cdFx0fVxuXHRcdGlmICggMCA9PT0gJCggJy5wdWxsX3RyaWdnZXJfZmllbGQgPiAqJyApLmxlbmd0aCApIHtcblx0XHRcdCQoICcucHVsbF90cmlnZ2VyX2ZpZWxkJyApLmhpZGUoKTtcblx0XHR9XG5cblx0XHQkKCAnI3NhbGVzZm9yY2Vfb2JqZWN0JyApLm9uKCAnY2hhbmdlJywgZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgdGhhdCA9IHRoaXM7XG5cdFx0XHR2YXIgZGVsYXlUaW1lID0gMTAwMDtcblx0XHRcdGRlbGF5KCBmdW5jdGlvbigpIHtcblx0XHRcdFx0dmFyIGRhdGEgPSB7XG5cdFx0XHRcdFx0J2FjdGlvbicgOiAnZ2V0X3NhbGVzZm9yY2Vfb2JqZWN0X2Rlc2NyaXB0aW9uJyxcblx0XHRcdFx0XHQnaW5jbHVkZScgOiBbICdmaWVsZHMnLCAncmVjb3JkVHlwZUluZm9zJyBdLFxuXHRcdFx0XHRcdCdmaWVsZF90eXBlJyA6ICdkYXRldGltZScsXG5cdFx0XHRcdFx0J3NhbGVzZm9yY2Vfb2JqZWN0JyA6IHRoYXQudmFsdWVcblx0XHRcdFx0fVxuXHRcdFx0XHQkLnBvc3QoIGFqYXh1cmwsIGRhdGEsIGZ1bmN0aW9uKCByZXNwb25zZSApIHtcblxuXHRcdFx0XHRcdHZhciByZWNvcmRUeXBlc0FsbG93ZWRNYXJrdXAgPSAnJywgcmVjb3JkVHlwZURlZmF1bHRNYXJrdXAgPSAnJywgZGF0ZU1hcmt1cCA9ICcnO1xuXG5cdFx0XHRcdFx0aWYgKCAwIDwgJCggcmVzcG9uc2UuZGF0YS5yZWNvcmRUeXBlSW5mb3MgKS5sZW5ndGggKSB7XG5cdFx0XHRcdFx0XHRyZWNvcmRUeXBlc0FsbG93ZWRNYXJrdXAgKz0gJzxsYWJlbCBmb3I9XCJzYWxlc2ZvcmNlX3JlY29yZF90eXBlc19hbGxvd2VkXCI+QWxsb3dlZCBSZWNvcmQgVHlwZXM6PC9sYWJlbD48ZGl2IGNsYXNzPVwiY2hlY2tib3hlc1wiPic7XG5cdFx0XHRcdFx0XHQkLmVhY2goIHJlc3BvbnNlLmRhdGEucmVjb3JkVHlwZUluZm9zLCBmdW5jdGlvbiggaW5kZXgsIHZhbHVlICkge1xuXHRcdFx0XHRcdFx0XHRyZWNvcmRUeXBlc0FsbG93ZWRNYXJrdXAgKz0gJzxsYWJlbD48aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgY2xhc3M9XCJmb3JtLWNoZWNrYm94XCIgdmFsdWU9XCInICsgaW5kZXggKyAnXCIgbmFtZT1cInNhbGVzZm9yY2VfcmVjb3JkX3R5cGVzX2FsbG93ZWRbJyArIGluZGV4ICsgJ11cIiBpZD1cInNhbGVzZm9yY2VfcmVjb3JkX3R5cGVzX2FsbG93ZWQtJyArIGluZGV4ICsgJ1wiPiAnICsgdmFsdWUgKyAnPC9sYWJlbD4nO1xuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRyZWNvcmRUeXBlc0FsbG93ZWRNYXJrdXAgKz0gJzwvZGl2Pic7XG5cblxuXHRcdFx0XHRcdFx0cmVjb3JkVHlwZURlZmF1bHRNYXJrdXAgKz0gJzxsYWJlbCBmb3I9XCJzYWxlc2ZvcmNlX3JlY29yZF90eXBlX2RlZmF1bHRcIj5EZWZhdWx0IFJlY29yZCBUeXBlOjwvbGFiZWw+Jztcblx0XHRcdFx0XHRcdHJlY29yZFR5cGVEZWZhdWx0TWFya3VwICs9ICc8c2VsZWN0IG5hbWU9XCJzYWxlc2ZvcmNlX3JlY29yZF90eXBlX2RlZmF1bHRcIiBpZD1cInNhbGVzZm9yY2VfcmVjb3JkX3R5cGVfZGVmYXVsdFwiPjxvcHRpb24gdmFsdWU9XCJcIj4tIFNlbGVjdCByZWNvcmQgdHlwZSAtPC9vcHRpb24+Jztcblx0XHRcdFx0XHRcdCQuZWFjaCggcmVzcG9uc2UuZGF0YS5yZWNvcmRUeXBlSW5mb3MsIGZ1bmN0aW9uKCBpbmRleCwgdmFsdWUgKSB7XG5cdFx0XHRcdFx0XHRcdHJlY29yZFR5cGVEZWZhdWx0TWFya3VwICs9ICc8b3B0aW9uIHZhbHVlPVwiJyArIGluZGV4ICsgJ1wiPicgKyB2YWx1ZSArICc8L29wdGlvbj4nO1xuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0JCggJy5zYWxlc2ZvcmNlX3JlY29yZF90eXBlc19hbGxvd2VkJyApLmh0bWwoIHJlY29yZFR5cGVzQWxsb3dlZE1hcmt1cCApO1xuXHRcdFx0XHRcdCQoICcuc2FsZXNmb3JjZV9yZWNvcmRfdHlwZV9kZWZhdWx0JyApLmh0bWwoIHJlY29yZFR5cGVEZWZhdWx0TWFya3VwICk7XG5cblx0XHRcdFx0XHRpZiAoIDAgPCAkKCByZXNwb25zZS5kYXRhLmZpZWxkcyApLmxlbmd0aCApIHtcblx0XHRcdFx0XHRcdGRhdGVNYXJrdXAgKz0gJzxsYWJlbCBmb3I9XCJwdWxsX3RyaWdnZXJfZmllbGRcIj5EYXRlIGZpZWxkIHRvIHRyaWdnZXIgcHVsbDo8L2xhYmVsPic7XG5cdFx0XHRcdFx0XHRkYXRlTWFya3VwICs9ICc8c2VsZWN0IG5hbWU9XCJwdWxsX3RyaWdnZXJfZmllbGRcIiBpZD1cInB1bGxfdHJpZ2dlcl9maWVsZFwiPjxvcHRpb24gdmFsdWU9XCJcIj4tIFNlbGVjdCBkYXRlIGZpZWxkIC08L29wdGlvbj4nXG5cdFx0XHRcdFx0XHQkLmVhY2goIHJlc3BvbnNlLmRhdGEuZmllbGRzLCBmdW5jdGlvbiggaW5kZXgsIHZhbHVlICkge1xuXHRcdFx0XHRcdFx0XHRkYXRlTWFya3VwICs9ICc8b3B0aW9uIHZhbHVlPVwiJyArIHZhbHVlLm5hbWUgKyAnXCI+JyArIHZhbHVlLmxhYmVsICsgJzwvb3B0aW9uPic7XG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdGRhdGVNYXJrdXAgKz0gJzwvc2VsZWN0Pic7XG5cdFx0XHRcdFx0XHRkYXRlTWFya3VwICs9ICc8cCBjbGFzcz1cImRlc2NyaXB0aW9uXCI+VGhlc2UgYXJlIGRhdGUgZmllbGRzIHRoYXQgY2FuIGNhdXNlIFdvcmRQcmVzcyB0byBwdWxsIGFuIHVwZGF0ZSBmcm9tIFNhbGVzZm9yY2UsIGFjY29yZGluZyB0byB0aGUgPGNvZGU+c2FsZXNmb3JjZV9wdWxsPC9jb2RlPiBjbGFzcy48L3A+J1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdCQoICcucHVsbF90cmlnZ2VyX2ZpZWxkJyApLmh0bWwoIGRhdGVNYXJrdXAgKTtcblxuXHRcdFx0XHRcdGlmICggJycgIT09IHJlY29yZFR5cGVzQWxsb3dlZE1hcmt1cCApIHtcblx0XHRcdFx0XHRcdCQoICcuc2FsZXNmb3JjZV9yZWNvcmRfdHlwZXNfYWxsb3dlZCcgKS5zaG93KCk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdCQoICcuc2FsZXNmb3JjZV9yZWNvcmRfdHlwZXNfYWxsb3dlZCcgKS5oaWRlKCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGlmICggJycgIT09IHJlY29yZFR5cGVEZWZhdWx0TWFya3VwICkge1xuXHRcdFx0XHRcdFx0JCggJy5zYWxlc2ZvcmNlX3JlY29yZF90eXBlX2RlZmF1bHQnICkuc2hvdygpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHQkKCAnLnNhbGVzZm9yY2VfcmVjb3JkX3R5cGVfZGVmYXVsdCcgKS5oaWRlKCk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aWYgKCAnJyAhPT0gZGF0ZU1hcmt1cCApIHtcblx0XHRcdFx0XHRcdCQoICcucHVsbF90cmlnZ2VyX2ZpZWxkJyApLnNob3coKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0JCggJy5wdWxsX3RyaWdnZXJfZmllbGQnICkuaGlkZSgpO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGlmICggalF1ZXJ5LmZuLnNlbGVjdDIgKSB7XG5cdFx0XHRcdFx0XHQkKCAnc2VsZWN0I3NhbGVzZm9yY2VfcmVjb3JkX3R5cGVfZGVmYXVsdCcgKS5zZWxlY3QyKCk7XG5cdFx0XHRcdFx0XHQkKCAnc2VsZWN0I3B1bGxfdHJpZ2dlcl9maWVsZCcgKS5zZWxlY3QyKCk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdH0pO1xuXHRcdFx0fSwgZGVsYXlUaW1lICk7XG5cdFx0fSk7XG5cdH1cblx0LyoqXG5cdCAqIER1cGxpY2F0ZXMgdGhlIGZpZWxkcyBmb3IgYSBuZXcgcm93IGluIHRoZSBmaWVsZG1hcCBvcHRpb25zIHNjcmVlbi5cblx0ICogdGhpcyBhcHBlYXJzIG5vdCB0byB3b3JrIHdpdGggZGF0YSgpIGluc3RlYWQgb2YgYXR0cigpXG5cdCAqL1xuXHQgZnVuY3Rpb24gYWRkRmllbGRNYXBwaW5nUm93KCkge1xuXHRcdCQoICcjYWRkLWZpZWxkLW1hcHBpbmcnICkuY2xpY2soIGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIHNhbGVzZm9yY2VPYmplY3QgPSAkKCAnI3NhbGVzZm9yY2Vfb2JqZWN0JyApLnZhbCgpO1xuXHRcdFx0dmFyIHdvcmRwcmVzc09iamVjdCA9ICQoICcjd29yZHByZXNzX29iamVjdCcgKS52YWwoKTtcblx0XHRcdHZhciBuZXdLZXkgPSBuZXcgRGF0ZSgpLmdldFVUQ01pbGxpc2Vjb25kcygpO1xuXHRcdFx0dmFyIGxhc3RSb3cgPSAkKCAndGFibGUuZmllbGRzIHRib2R5IHRyJyApLmxhc3QoKTtcblx0XHRcdHZhciBvbGRLZXkgPSBsYXN0Um93LmF0dHIoICdkYXRhLWtleScgKTtcblx0XHRcdG9sZEtleSA9IG5ldyBSZWdFeHAoIG9sZEtleSwgJ2cnICk7XG5cdFx0XHQkKCB0aGlzICkudGV4dCggJ0FkZCBhbm90aGVyIGZpZWxkIG1hcHBpbmcnICk7XG5cdFx0XHRpZiAoICcnICE9PSB3b3JkcHJlc3NPYmplY3QgJiYgJycgIT09IHNhbGVzZm9yY2VPYmplY3QgKSB7XG5cdFx0XHRcdGZpZWxkbWFwRmllbGRzKCBvbGRLZXksIG5ld0tleSwgbGFzdFJvdyApO1xuXHRcdFx0XHQkKCB0aGlzICkucGFyZW50KCkuZmluZCggJy5taXNzaW5nLW9iamVjdCcgKS5yZW1vdmUoKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdCQoIHRoaXMgKS5wYXJlbnQoKS5wcmVwZW5kKCAnPGRpdiBjbGFzcz1cImVycm9yIG1pc3Npbmctb2JqZWN0XCI+PHNwYW4+WW91IGhhdmUgdG8gcGljayBhIFdvcmRQcmVzcyBvYmplY3QgYW5kIGEgU2FsZXNmb3JjZSBvYmplY3QgdG8gYWRkIGZpZWxkIG1hcHBpbmcuPC9zcGFuPjwvZGl2PicgKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9KTtcblx0fVxuXHQvKipcblx0ICogQ2xvbmVzIHRoZSBmaWVsZHNldCBtYXJrdXAgcHJvdmlkZWQgYnkgdGhlIHNlcnZlci1zaWRlIHRlbXBsYXRlIGFuZCBhcHBlbmRzIGl0IGF0IHRoZSBlbmQuXG5cdCAqIHRoaXMgYXBwZWFycyBub3QgdG8gd29yayB3aXRoIGRhdGEoKSBpbnN0ZWFkIG9mIGF0dHIoKVxuXHQgKiBAcGFyYW0gc3RyaW5nIG9sZEtleSB0aGUgZGF0YSBrZXkgYXR0cmlidXRlIG9mIHRoZSBzZXQgdGhhdCBpcyBiZWluZyBjbG9uZWRcblx0ICogQHBhcmFtIHN0cmluZyBuZXdLZXkgdGhlIGRhdGEga2V5IGF0dHJpYnV0ZSBmb3IgdGhlIG9uZSB3ZSdyZSBhcHBlbmRpbmdcblx0ICogQHBhcmFtIG9iamVjdCBsYXN0Um93IHRoZSBsYXN0IHNldCBvZiB0aGUgZmllbGRtYXBcblx0ICovXG5cdGZ1bmN0aW9uIGZpZWxkbWFwRmllbGRzKCBvbGRLZXksIG5ld0tleSwgbGFzdFJvdyApIHtcblx0XHR2YXIgbmV4dFJvdyA9ICcnO1xuICAgICAgICBpZiAoIGpRdWVyeS5mbi5zZWxlY3QyICkge1xuICAgICAgICBcdG5leHRSb3cgPSBsYXN0Um93LmZpbmQoICdzZWxlY3QnIClcblx0ICAgICAgICAgICAgLnNlbGVjdDIoICdkZXN0cm95JyApXG5cdCAgICAgICAgICAgIC5lbmQoKVxuXHQgICAgICAgICAgICAuY2xvbmUoIHRydWUgKS5yZW1vdmVDbGFzcyggJ2ZpZWxkbWFwLXRlbXBsYXRlJyApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICBcdG5leHRSb3cgPSBsYXN0Um93LmNsb25lKCB0cnVlICk7XG4gICAgICAgIH1cblx0XHQkKCBuZXh0Um93ICkuYXR0ciggJ2RhdGEta2V5JywgbmV3S2V5ICk7XG5cdFx0JCggbmV4dFJvdyApLmVhY2goZnVuY3Rpb24oKSB7XG5cdFx0XHQkKCB0aGlzICkuaHRtbCggZnVuY3Rpb24oIGksIGggKSB7XG5cdFx0XHRcdHJldHVybiBoLnJlcGxhY2UoIG9sZEtleSwgbmV3S2V5ICk7XG5cdFx0XHR9KTtcblx0XHR9KTtcblx0XHQkKCAndGFibGUuZmllbGRzIHRib2R5JyApLmFwcGVuZCggbmV4dFJvdyApO1xuXHRcdGlmICggalF1ZXJ5LmZuLnNlbGVjdDIgKSB7XG5cdFx0XHRsYXN0Um93LmZpbmQoICdzZWxlY3QnICkuc2VsZWN0MigpO1xuXHRcdFx0bmV4dFJvdy5maW5kKCAnc2VsZWN0JyApLnNlbGVjdDIoKTtcblx0XHR9XG5cdH1cblx0LyoqXG5cdCAqIEhhbmRsZSBtYW51YWwgcHVzaCBhbmQgcHVsbCBvZiBvYmplY3RzXG5cdCAqL1xuXHRmdW5jdGlvbiBwdXNoQW5kUHVsbE9iamVjdHMoKSB7XG5cdFx0JCggJy5zYWxlc2ZvcmNlX3VzZXJfYWpheF9tZXNzYWdlJyApLmhpZGUoKTtcblx0XHRpZiAoIDAgPCAkKCAnI3dvcmRwcmVzc19vYmplY3RfYWpheCcgKS5sZW5ndGggKSB7XG5cdFx0XHQkKCAnLnB1c2hfdG9fc2FsZXNmb3JjZV9idXR0b24nICkub24oICdjbGljaycsIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHR2YXIgd29yZHByZXNzT2JqZWN0ID0gJCggJyN3b3JkcHJlc3Nfb2JqZWN0X2FqYXgnICkudmFsKCk7XG5cdFx0XHRcdHZhciB3b3JkcHJlc3NJZCA9ICQoICcjd29yZHByZXNzX2lkX2FqYXgnICkudmFsKCk7XG5cdFx0XHRcdHZhciBzYWxlc2ZvcmNlSWQgPSAkKCAnI3NhbGVzZm9yY2VfaWRfYWpheCcgKS52YWwoKTtcblx0XHRcdFx0dmFyIGRhdGEgPSB7XG5cdFx0XHRcdFx0J2FjdGlvbicgOiAncHVzaF90b19zYWxlc2ZvcmNlJyxcblx0XHRcdFx0XHQnd29yZHByZXNzX29iamVjdCcgOiB3b3JkcHJlc3NPYmplY3QsXG5cdFx0XHRcdFx0J3dvcmRwcmVzc19pZCcgOiB3b3JkcHJlc3NJZCxcblx0XHRcdFx0XHQnc2FsZXNmb3JjZV9pZCcgOiBzYWxlc2ZvcmNlSWRcblx0XHRcdFx0fVxuXHRcdFx0XHQkLnBvc3QoIGFqYXh1cmwsIGRhdGEsIGZ1bmN0aW9uKCByZXNwb25zZSApIHtcblx0XHRcdFx0XHRpZiAoIHRydWUgPT09IHJlc3BvbnNlLnN1Y2Nlc3MgKSB7XG5cdFx0XHRcdFx0XHR1cGRhdGVTYWxlc2ZvcmNlVXNlclN1bW1hcnkoKTtcblx0XHRcdFx0XHRcdCQoICcuc2FsZXNmb3JjZV91c2VyX2FqYXhfbWVzc2FnZScgKS53aWR0aCggJCggJy5tYXBwZWQtc2FsZXNmb3JjZS11c2VyJyApLndpZHRoKCkgLSAyNyApO1xuXHRcdFx0XHRcdFx0JCggJy5zYWxlc2ZvcmNlX3VzZXJfYWpheF9tZXNzYWdlJyApLmh0bWwoICc8cD5UaGlzIG9iamVjdCBoYXMgYmVlbiBwdXNoZWQgdG8gU2FsZXNmb3JjZS48L3A+JyApLmZhZGVJbigpLmRlbGF5KCA0MDAwICkuZmFkZU91dCgpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH0pO1xuXHRcdH1cblx0XHQkKCAnLnB1bGxfZnJvbV9zYWxlc2ZvcmNlX2J1dHRvbicgKS5vbiggJ2NsaWNrJywgZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgc2FsZXNmb3JjZUlkID0gJCggJyNzYWxlc2ZvcmNlX2lkX2FqYXgnICkudmFsKCk7XG5cdFx0XHR2YXIgd29yZHByZXNzT2JqZWN0ID0gJCggJyN3b3JkcHJlc3Nfb2JqZWN0X2FqYXgnICkudmFsKCk7XG5cdFx0XHR2YXIgZGF0YSA9IHtcblx0XHRcdFx0J2FjdGlvbicgOiAncHVsbF9mcm9tX3NhbGVzZm9yY2UnLFxuXHRcdFx0XHQnc2FsZXNmb3JjZV9pZCcgOiBzYWxlc2ZvcmNlSWQsXG5cdFx0XHRcdCd3b3JkcHJlc3Nfb2JqZWN0JyA6IHdvcmRwcmVzc09iamVjdFxuXHRcdFx0fVxuXHRcdFx0JC5wb3N0KCBhamF4dXJsLCBkYXRhLCBmdW5jdGlvbiggcmVzcG9uc2UgKSB7XG5cdFx0XHRcdGlmICggdHJ1ZSA9PT0gcmVzcG9uc2Uuc3VjY2VzcyApIHtcblx0XHRcdFx0XHR1cGRhdGVTYWxlc2ZvcmNlVXNlclN1bW1hcnkoKTtcblx0XHRcdFx0XHQkKCAnLnNhbGVzZm9yY2VfdXNlcl9hamF4X21lc3NhZ2UnICkud2lkdGgoICQoICcubWFwcGVkLXNhbGVzZm9yY2UtdXNlcicgKS53aWR0aCgpIC0gMjcgKTtcblx0XHRcdFx0XHQkKCAnLnNhbGVzZm9yY2VfdXNlcl9hamF4X21lc3NhZ2UnICkuaHRtbCggJzxwPlRoaXMgb2JqZWN0IGhhcyBiZWVuIHB1bGxlZCBmcm9tIFNhbGVzZm9yY2UuPC9wPicgKS5mYWRlSW4oKS5kZWxheSggNDAwMCApLmZhZGVPdXQoKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fSk7XG5cdH1cblx0LyoqXG5cdCAqIFVwZGF0ZXMgdGhlIHVzZXIgcHJvZmlsZSBzdW1tYXJ5IG9mIFNhbGVzZm9yY2UgaW5mby5cblx0ICovXG5cdGZ1bmN0aW9uIHVwZGF0ZVNhbGVzZm9yY2VVc2VyU3VtbWFyeSgpIHtcblx0XHR2YXIgbWFwcGluZ0lkID0gJCggJyNtYXBwaW5nX2lkX2FqYXgnICkudmFsKCk7XG5cdFx0dmFyIGRhdGEgPSB7XG5cdFx0XHQnYWN0aW9uJyA6ICdyZWZyZXNoX21hcHBlZF9kYXRhJyxcblx0XHRcdCdtYXBwaW5nX2lkJyA6IG1hcHBpbmdJZFxuXHRcdH1cblx0XHQkLnBvc3QoIGFqYXh1cmwsIGRhdGEsIGZ1bmN0aW9uKCByZXNwb25zZSApIHtcblx0XHRcdGlmICggdHJ1ZSA9PT0gcmVzcG9uc2Uuc3VjY2VzcyApIHtcblx0XHRcdFx0JCggJ3RkLmxhc3Rfc3luY19tZXNzYWdlJyApLnRleHQoIHJlc3BvbnNlLmRhdGEubGFzdF9zeW5jX21lc3NhZ2UgKTtcblx0XHRcdFx0JCggJ3RkLmxhc3Rfc3luY19hY3Rpb24nICkudGV4dCggcmVzcG9uc2UuZGF0YS5sYXN0X3N5bmNfYWN0aW9uICk7XG5cdFx0XHRcdCQoICd0ZC5sYXN0X3N5bmNfc3RhdHVzJyApLnRleHQoIHJlc3BvbnNlLmRhdGEubGFzdF9zeW5jX3N0YXR1cyApO1xuXHRcdFx0XHQkKCAndGQubGFzdF9zeW5jJyApLnRleHQoIHJlc3BvbnNlLmRhdGEubGFzdF9zeW5jICk7XG5cdFx0XHRcdGlmICggJzEnID09PSByZXNwb25zZS5kYXRhLmxhc3Rfc3luY19zdGF0dXMgKSB7XG5cdFx0XHRcdFx0JCggJ3RkLmxhc3Rfc3luY19zdGF0dXMnICkudGV4dCggJ3N1Y2Nlc3MnICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXHQvKipcblx0ICogQ2xlYXIgdGhlIHBsdWdpbiBjYWNoZSB2aWEgQWpheCByZXF1ZXN0LlxuXHQgKi9cblx0ZnVuY3Rpb24gY2xlYXJTZndwQ2FjaGVMaW5rKCkge1xuXHRcdCQoICcjY2xlYXItc2Z3cC1jYWNoZScgKS5jbGljayggZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgZGF0YSA9IHtcblx0XHRcdFx0J2FjdGlvbicgOiAnY2xlYXJfc2Z3cF9jYWNoZSdcblx0XHRcdH1cblx0XHRcdHZhciB0aGF0ID0gJCggdGhpcyApO1xuXHRcdFx0JC5wb3N0KCBhamF4dXJsLCBkYXRhLCBmdW5jdGlvbiggcmVzcG9uc2UgKSB7XG5cdFx0XHRcdGlmICggdHJ1ZSA9PT0gcmVzcG9uc2Uuc3VjY2VzcyAmJiB0cnVlID09PSByZXNwb25zZS5kYXRhLnN1Y2Nlc3MgKSB7XG5cdFx0XHRcdFx0dGhhdC5wYXJlbnQoKS5odG1sKCByZXNwb25zZS5kYXRhLm1lc3NhZ2UgKS5mYWRlSW4oKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fSk7XG5cdH1cblxuXHQvLyBsb2FkIGF2YWlsYWJsZSBvcHRpb25zIGlmIHRoZSB3b3JkcHJlc3Mgb2JqZWN0IGNoYW5nZXNcblx0JCggZG9jdW1lbnQgKS5vbiggJ2NoYW5nZScsICdzZWxlY3Qjd29yZHByZXNzX29iamVjdCcsIGZ1bmN0aW9uKCkge1xuXHRcdHZhciB0aW1lb3V0O1xuXHRcdGxvYWRGaWVsZE9wdGlvbnMoICd3b3JkcHJlc3MnLCAkKCB0aGlzICkudmFsKCkgKTtcblx0XHRjbGVhclRpbWVvdXQoIHRpbWVvdXQgKTtcblx0XHR0aW1lb3V0ID0gc2V0VGltZW91dCggZnVuY3Rpb24oKSB7XG5cdFx0XHQkKCAndGFibGUuZmllbGRzIHRib2R5IHRyJyApLmZhZGVPdXQoKTtcblx0XHRcdCQoICd0YWJsZS5maWVsZHMgdGJvZHkgdHInICkubm90KCAnLmZpZWxkbWFwLXRlbXBsYXRlJyApLnJlbW92ZSgpO1xuXHRcdH0sIDEwMDAgKTtcblx0fSk7XG5cblx0Ly8gbG9hZCBhdmFpbGFibGUgb3B0aW9ucyBpZiB0aGUgc2FsZXNmb3JjZSBvYmplY3QgY2hhbmdlc1xuXHQkKCBkb2N1bWVudCApLm9uKCAnY2hhbmdlJywgJ3NlbGVjdCNzYWxlc2ZvcmNlX29iamVjdCcsIGZ1bmN0aW9uKCkge1xuXHRcdHZhciB0aW1lb3V0O1xuXHRcdGxvYWRGaWVsZE9wdGlvbnMoICdzYWxlc2ZvcmNlJywgJCggdGhpcyApLnZhbCgpICk7XG5cdFx0Y2xlYXJUaW1lb3V0KCB0aW1lb3V0ICk7XG5cdFx0dGltZW91dCA9IHNldFRpbWVvdXQoIGZ1bmN0aW9uKCkge1xuXHRcdFx0JCggJ3RhYmxlLmZpZWxkcyB0Ym9keSB0cicgKS5mYWRlT3V0KCk7XG5cdFx0XHQkKCAndGFibGUuZmllbGRzIHRib2R5IHRyJyApLm5vdCggJy5maWVsZG1hcC10ZW1wbGF0ZScgKS5yZW1vdmUoKTtcblx0XHR9LCAxMDAwICk7XG5cdH0pO1xuXG5cdC8vIERvbid0IHNob3cgdGhlIFdTREwgZmlsZSBmaWVsZCB1bmxlc3MgU09BUCBpcyBlbmFibGVkXG5cdCQoIGRvY3VtZW50ICkub24oICdjaGFuZ2UnLCAnLm9iamVjdC1zeW5jLWZvci1zYWxlc2ZvcmNlLWVuYWJsZS1zb2FwIGlucHV0JywgZnVuY3Rpb24oKSB7XG5cdFx0dG9nZ2xlU29hcEZpZWxkcygpO1xuXHR9KTtcblxuXHQvKipcblx0ICogQXMgdGhlIERydXBhbCBwbHVnaW4gZG9lcywgd2Ugb25seSBhbGxvdyBvbmUgZmllbGQgdG8gYmUgYSBwcmVtYXRjaFxuXHQgKi9cblx0JCggZG9jdW1lbnQgKS5vbiggJ2NsaWNrJywgJy5jb2x1bW4taXNfcHJlbWF0Y2ggaW5wdXQnLCBmdW5jdGlvbigpIHtcblx0XHQkKCAnLmNvbHVtbi1pc19wcmVtYXRjaCBpbnB1dCcgKS5ub3QoIHRoaXMgKS5wcm9wKCAnY2hlY2tlZCcsIGZhbHNlICk7XG5cdH0pO1xuXHQvKipcblx0ICogQXMgdGhlIERydXBhbCBwbHVnaW4gZG9lcywgd2Ugb25seSBhbGxvdyBvbmUgZmllbGQgdG8gYmUgYSBrZXlcblx0ICovXG5cdCQoIGRvY3VtZW50ICkub24oICdjbGljaycsICcuY29sdW1uLWlzX2tleSBpbnB1dCcsIGZ1bmN0aW9uKCkge1xuXHRcdCQoICcuY29sdW1uLWlzX2tleSBpbnB1dCcgKS5ub3QoIHRoaXMgKS5wcm9wKCAnY2hlY2tlZCcsIGZhbHNlICk7XG5cdH0pO1xuXHQvKipcblx0ICogV2hlbiB0aGUgcGx1Z2luIGxvYWRzLCBpbml0aWFsaXplIG9yIGVuYWJsZSB0aGluZ3M6XG5cdCAqIFNlbGVjdDIgb24gc2VsZWN0IGZpZWxkc1xuXHQgKiBDbGVhciBmaWVsZHMgd2hlbiB0aGUgdGFyZ2V0ZWQgV29yZFByZXNzIG9yIFNhbGVzZm9yY2Ugb2JqZWN0IHR5cGUgY2hhbmdlc1xuXHQgKiBNYW5hZ2UgdGhlIGRpc3BsYXkgZm9yIFNhbGVzZm9yY2Ugb2JqZWN0IGZpZWxkcyBiYXNlZCBvbiBBUEkgcmVwb25zZVxuXHQgKiBNYW51YWwgcHVzaCBhbmQgcHVsbFxuXHQgKiBDbGVhcmluZyB0aGUgY2FjaGVcblx0ICovXG5cdCQoIGRvY3VtZW50ICkucmVhZHkoIGZ1bmN0aW9uKCkge1xuXG5cdFx0Ly8gRG9uJ3Qgc2hvdyB0aGUgV1NETCBmaWxlIGZpZWxkIHVubGVzcyBTT0FQIGlzIGVuYWJsZWRcblx0XHR0b2dnbGVTb2FwRmllbGRzKCk7XG5cblx0XHQvLyBpZiB0aGVyZSBpcyBhbHJlYWR5IGEgd3Agb3Igc2Ygb2JqZWN0LCBtYWtlIHN1cmUgaXQgaGFzIHRoZSByaWdodCBmaWVsZHMgd2hlbiB0aGUgcGFnZSBsb2Fkc1xuXHRcdGxvYWRGaWVsZE9wdGlvbnMoICd3b3JkcHJlc3MnLCAkKCAnc2VsZWN0I3dvcmRwcmVzc19vYmplY3QnICkudmFsKCkgKTtcblx0XHRsb2FkRmllbGRPcHRpb25zKCAnc2FsZXNmb3JjZScsICQoICdzZWxlY3Qjc2FsZXNmb3JjZV9vYmplY3QnICkudmFsKCkgKTtcblxuXHRcdC8vIHNldHVwIHRoZSBzZWxlY3QyIGZpZWxkcyBpZiB0aGUgbGlicmFyeSBpcyBwcmVzZW50XG5cdFx0aWYgKCBqUXVlcnkuZm4uc2VsZWN0MiApIHtcblx0XHRcdCQoICdzZWxlY3Qjd29yZHByZXNzX29iamVjdCcgKS5zZWxlY3QyKCk7XG5cdFx0XHQkKCAnc2VsZWN0I3NhbGVzZm9yY2Vfb2JqZWN0JyApLnNlbGVjdDIoKTtcblx0XHRcdCQoICdzZWxlY3Qjc2FsZXNmb3JjZV9yZWNvcmRfdHlwZV9kZWZhdWx0JyApLnNlbGVjdDIoKTtcblx0XHRcdCQoICdzZWxlY3QjcHVsbF90cmlnZ2VyX2ZpZWxkJyApLnNlbGVjdDIoKTtcblx0XHRcdCQoICcuY29sdW1uLXdvcmRwcmVzc19maWVsZCBzZWxlY3QnICkuc2VsZWN0MigpO1xuXHRcdFx0JCggJy5jb2x1bW4tc2FsZXNmb3JjZV9maWVsZCBzZWxlY3QnICkuc2VsZWN0MigpO1xuXHRcdH1cblxuXHRcdC8vIGdldCB0aGUgYXZhaWxhYmxlIFNhbGVzZm9yY2Ugb2JqZWN0IGNob2ljZXNcblx0XHRzYWxlc2ZvcmNlT2JqZWN0RmllbGRzKCk7XG5cblx0XHQvLyBEdXBsaWNhdGUgdGhlIGZpZWxkcyBmb3IgYSBuZXcgcm93IGluIHRoZSBmaWVsZG1hcCBvcHRpb25zIHNjcmVlbi5cblx0XHRhZGRGaWVsZE1hcHBpbmdSb3coKTtcblxuXHRcdC8vIEhhbmRsZSBtYW51YWwgcHVzaCBhbmQgcHVsbCBvZiBvYmplY3RzXG5cdFx0cHVzaEFuZFB1bGxPYmplY3RzKCk7XG5cblx0XHQvLyBDbGVhciB0aGUgcGx1Z2luIGNhY2hlIHZpYSBBamF4IHJlcXVlc3QuXG5cdFx0Y2xlYXJTZndwQ2FjaGVMaW5rKCk7XG5cdH0pO1xuXG4iXX0= +//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIjAxLXNhbGVzZm9yY2Utb2JqZWN0LmpzIiwiMDItbG9hZC1maWVsZC1vcHRpb25zLmpzIiwiMDMtZmllbGRtYXAtcm93cy5qcyIsIjA0LWludGVyZmFjZS1hamF4LWV2ZW50cy5qcyIsIjA1LXNvYXAuanMiLCIwNi1kb2N1bWVudC1yZWFkeS5qcyJdLCJuYW1lcyI6WyJzYWxlc2ZvcmNlT2JqZWN0RmllbGRzIiwiZGVsYXkiLCJ0aW1lciIsImNhbGxiYWNrIiwibXMiLCJjbGVhclRpbWVvdXQiLCJzZXRUaW1lb3V0IiwiJCIsImxlbmd0aCIsImhpZGUiLCJvbiIsInRoYXQiLCJkZWxheVRpbWUiLCJkYXRhIiwidmFsdWUiLCJwb3N0IiwiYWpheHVybCIsInJlc3BvbnNlIiwicmVjb3JkVHlwZXNBbGxvd2VkTWFya3VwIiwicmVjb3JkVHlwZURlZmF1bHRNYXJrdXAiLCJkYXRlTWFya3VwIiwicmVjb3JkVHlwZUluZm9zIiwiZWFjaCIsImluZGV4IiwiaHRtbCIsImZpZWxkcyIsIm5hbWUiLCJsYWJlbCIsInNob3ciLCJqUXVlcnkiLCJmbiIsInNlbGVjdDIiLCJsb2FkRmllbGRPcHRpb25zIiwic3lzdGVtIiwib2JqZWN0X25hbWUiLCJzZWxlY3RGaWVsZCIsImZpcnN0X2ZpZWxkIiwiZmlyc3QiLCJ0ZXh0IiwidmFsIiwiYWpheCIsInR5cGUiLCJ1cmwiLCJiZWZvcmVTZW5kIiwiYWRkQ2xhc3MiLCJzdWNjZXNzIiwia2V5IiwiY29tcGxldGUiLCJyZW1vdmVDbGFzcyIsImRvY3VtZW50IiwidGltZW91dCIsImZhZGVPdXQiLCJub3QiLCJyZW1vdmUiLCJhZGRGaWVsZE1hcHBpbmdSb3ciLCJjbGljayIsInNhbGVzZm9yY2VPYmplY3QiLCJ3b3JkcHJlc3NPYmplY3QiLCJuZXdLZXkiLCJEYXRlIiwiZ2V0VVRDTWlsbGlzZWNvbmRzIiwibGFzdFJvdyIsImxhc3QiLCJvbGRLZXkiLCJhdHRyIiwiUmVnRXhwIiwiZmllbGRtYXBGaWVsZHMiLCJwYXJlbnQiLCJmaW5kIiwicHJlcGVuZCIsIm5leHRSb3ciLCJlbmQiLCJjbG9uZSIsImkiLCJoIiwicmVwbGFjZSIsImFwcGVuZCIsInByb3AiLCJwdXNoQW5kUHVsbE9iamVjdHMiLCJ3b3JkcHJlc3NJZCIsInNhbGVzZm9yY2VJZCIsInVwZGF0ZVNhbGVzZm9yY2VVc2VyU3VtbWFyeSIsIndpZHRoIiwiZmFkZUluIiwibWFwcGluZ0lkIiwibGFzdF9zeW5jX21lc3NhZ2UiLCJsYXN0X3N5bmNfYWN0aW9uIiwibGFzdF9zeW5jX3N0YXR1cyIsImxhc3Rfc3luYyIsImNsZWFyU2Z3cENhY2hlTGluayIsIm1lc3NhZ2UiLCJ0b2dnbGVTb2FwRmllbGRzIiwiaXMiLCJyZWFkeSJdLCJtYXBwaW5ncyI6Ijs7QUFBQTs7OztBQUlBLFNBQVNBLHNCQUFULEdBQWtDO0FBRWpDLE1BQUlDLEtBQUssR0FBSyxZQUFXO0FBQ3hCLFFBQUlDLEtBQUssR0FBRyxDQUFaO0FBQ0EsV0FBTyxVQUFVQyxRQUFWLEVBQW9CQyxFQUFwQixFQUF5QjtBQUMvQkMsTUFBQUEsWUFBWSxDQUFHSCxLQUFILENBQVo7QUFDQUEsTUFBQUEsS0FBSyxHQUFHSSxVQUFVLENBQUVILFFBQUYsRUFBWUMsRUFBWixDQUFsQjtBQUNBLEtBSEQ7QUFJQSxHQU5hLEVBQWQ7O0FBUUEsTUFBSyxNQUFNRyxDQUFDLENBQUUsc0NBQUYsQ0FBRCxDQUE0Q0MsTUFBdkQsRUFBZ0U7QUFDL0RELElBQUFBLENBQUMsQ0FBRSxrQ0FBRixDQUFELENBQXdDRSxJQUF4QztBQUNBOztBQUVELE1BQUssTUFBTUYsQ0FBQyxDQUFFLHFDQUFGLENBQUQsQ0FBMkNDLE1BQXRELEVBQStEO0FBQzlERCxJQUFBQSxDQUFDLENBQUUsaUNBQUYsQ0FBRCxDQUF1Q0UsSUFBdkM7QUFDQTs7QUFDRCxNQUFLLE1BQU1GLENBQUMsQ0FBRSx5QkFBRixDQUFELENBQStCQyxNQUExQyxFQUFtRDtBQUNsREQsSUFBQUEsQ0FBQyxDQUFFLHFCQUFGLENBQUQsQ0FBMkJFLElBQTNCO0FBQ0E7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Q2RBOzs7Ozs7OztBQVFBcEYsQ0FBQyxDQUFFMEMsUUFBRixDQUFELENBQWM0QyxLQUFkLENBQXFCLFlBQVc7QUFFL0I7QUFDQUYsRUFBQUEsZ0JBQWdCLEdBSGUsQ0FLL0I7O0FBQ0EzRCxFQUFBQSxnQkFBZ0IsQ0FBRSxXQUFGLEVBQWV6QixDQUFDLENBQUUseUJBQUYsQ0FBRCxDQUErQmdDLEdBQS9CLEVBQWYsQ0FBaEI7QUFDQVAsRUFBQUEsZ0JBQWdCLENBQUUsWUFBRixFQUFnQnpCLENBQUMsQ0FBRSwwQkFBRixDQUFELENBQWdDZ0MsR0FBaEMsRUFBaEIsQ0FBaEIsQ0FQK0IsQ0FTL0I7O0FBQ0EsTUFBS1YsTUFBTSxDQUFDQyxFQUFQLENBQVVDLE9BQWYsRUFBeUI7QUFDeEJ4QixJQUFBQSxDQUFDLENBQUUseUJBQUYsQ0FBRCxDQUErQndCLE9BQS9CO0FBQ0F4QixJQUFBQSxDQUFDLENBQUUsMEJBQUYsQ0FBRCxDQUFnQ3dCLE9BQWhDO0FBQ0F4QixJQUFBQSxDQUFDLENBQUUsdUNBQUYsQ0FBRCxDQUE2Q3dCLE9BQTdDO0FBQ0F4QixJQUFBQSxDQUFDLENBQUUsMkJBQUYsQ0FBRCxDQUFpQ3dCLE9BQWpDO0FBQ0F4QixJQUFBQSxDQUFDLENBQUUsZ0NBQUYsQ0FBRCxDQUFzQ3dCLE9BQXRDO0FBQ0F4QixJQUFBQSxDQUFDLENBQUUsaUNBQUYsQ0FBRCxDQUF1Q3dCLE9BQXZDO0FBQ0EsR0FqQjhCLENBbUIvQjs7O0FBQ0EvQixFQUFBQSxzQkFBc0IsR0FwQlMsQ0FzQi9COztBQUNBc0QsRUFBQUEsa0JBQWtCLEdBdkJhLENBeUIvQjs7QUFDQXdCLEVBQUFBLGtCQUFrQixHQTFCYSxDQTRCL0I7O0FBQ0FXLEVBQUFBLGtCQUFrQjtBQUNsQixDQTlCRCIsImZpbGUiOiJvYmplY3Qtc3luYy1mb3Itc2FsZXNmb3JjZS1hZG1pbi5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJhdGVzIHRoZSBTYWxlc2ZvcmNlIG9iamVjdCBmaWVsZHMgYmFzZWQgb24gdGhlIGRyb3Bkb3duIGFjdGl2aXR5IGFuZCBBUEkgcmVzdWx0cy5cbiAqIFRoaXMgYWxzbyBnZW5lcmF0ZXMgb3RoZXIgcXVlcnkgZmllbGRzIHRoYXQgYXJlIG9iamVjdC1zcGVjaWZpYywgbGlrZSBkYXRlIGZpZWxkcywgcmVjb3JkIHR5cGVzIGFsbG93ZWQsIGV0Yy5cbiAqL1xuZnVuY3Rpb24gc2FsZXNmb3JjZU9iamVjdEZpZWxkcygpIHtcblxuXHR2YXIgZGVsYXkgPSAoIGZ1bmN0aW9uKCkge1xuXHRcdHZhciB0aW1lciA9IDA7XG5cdFx0cmV0dXJuIGZ1bmN0aW9uKCBjYWxsYmFjaywgbXMgKSB7XG5cdFx0XHRjbGVhclRpbWVvdXQgKCB0aW1lciApO1xuXHRcdFx0dGltZXIgPSBzZXRUaW1lb3V0KCBjYWxsYmFjaywgbXMgKTtcblx0XHR9O1xuXHR9KCkgKTtcblxuXHRpZiAoIDAgPT09ICQoICcuc2FsZXNmb3JjZV9yZWNvcmRfdHlwZXNfYWxsb3dlZCA+IConICkubGVuZ3RoICkge1xuXHRcdCQoICcuc2FsZXNmb3JjZV9yZWNvcmRfdHlwZXNfYWxsb3dlZCcgKS5oaWRlKCk7XG5cdH1cblxuXHRpZiAoIDAgPT09ICQoICcuc2FsZXNmb3JjZV9yZWNvcmRfdHlwZV9kZWZhdWx0ID4gKicgKS5sZW5ndGggKSB7XG5cdFx0JCggJy5zYWxlc2ZvcmNlX3JlY29yZF90eXBlX2RlZmF1bHQnICkuaGlkZSgpO1xuXHR9XG5cdGlmICggMCA9PT0gJCggJy5wdWxsX3RyaWdnZXJfZmllbGQgPiAqJyApLmxlbmd0aCApIHtcblx0XHQkKCAnLnB1bGxfdHJpZ2dlcl9maWVsZCcgKS5oaWRlKCk7XG5cdH1cblxuXHQkKCAnI3NhbGVzZm9yY2Vfb2JqZWN0JyApLm9uKCAnY2hhbmdlJywgZnVuY3Rpb24oKSB7XG5cdFx0dmFyIHRoYXQgPSB0aGlzO1xuXHRcdHZhciBkZWxheVRpbWUgPSAxMDAwO1xuXHRcdGRlbGF5KCBmdW5jdGlvbigpIHtcblx0XHRcdHZhciBkYXRhID0ge1xuXHRcdFx0XHQnYWN0aW9uJyA6ICdnZXRfc2FsZXNmb3JjZV9vYmplY3RfZGVzY3JpcHRpb24nLFxuXHRcdFx0XHQnaW5jbHVkZScgOiBbICdmaWVsZHMnLCAncmVjb3JkVHlwZUluZm9zJyBdLFxuXHRcdFx0XHQnZmllbGRfdHlwZScgOiAnZGF0ZXRpbWUnLFxuXHRcdFx0XHQnc2FsZXNmb3JjZV9vYmplY3QnIDogdGhhdC52YWx1ZVxuXHRcdFx0fVxuXHRcdFx0JC5wb3N0KCBhamF4dXJsLCBkYXRhLCBmdW5jdGlvbiggcmVzcG9uc2UgKSB7XG5cblx0XHRcdFx0dmFyIHJlY29yZFR5cGVzQWxsb3dlZE1hcmt1cCA9ICcnLCByZWNvcmRUeXBlRGVmYXVsdE1hcmt1cCA9ICcnLCBkYXRlTWFya3VwID0gJyc7XG5cblx0XHRcdFx0aWYgKCAwIDwgJCggcmVzcG9uc2UuZGF0YS5yZWNvcmRUeXBlSW5mb3MgKS5sZW5ndGggKSB7XG5cdFx0XHRcdFx0cmVjb3JkVHlwZXNBbGxvd2VkTWFya3VwICs9ICc8bGFiZWwgZm9yPVwic2FsZXNmb3JjZV9yZWNvcmRfdHlwZXNfYWxsb3dlZFwiPkFsbG93ZWQgUmVjb3JkIFR5cGVzOjwvbGFiZWw+PGRpdiBjbGFzcz1cImNoZWNrYm94ZXNcIj4nO1xuXHRcdFx0XHRcdCQuZWFjaCggcmVzcG9uc2UuZGF0YS5yZWNvcmRUeXBlSW5mb3MsIGZ1bmN0aW9uKCBpbmRleCwgdmFsdWUgKSB7XG5cdFx0XHRcdFx0XHRyZWNvcmRUeXBlc0FsbG93ZWRNYXJrdXAgKz0gJzxsYWJlbD48aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgY2xhc3M9XCJmb3JtLWNoZWNrYm94XCIgdmFsdWU9XCInICsgaW5kZXggKyAnXCIgbmFtZT1cInNhbGVzZm9yY2VfcmVjb3JkX3R5cGVzX2FsbG93ZWRbJyArIGluZGV4ICsgJ11cIiBpZD1cInNhbGVzZm9yY2VfcmVjb3JkX3R5cGVzX2FsbG93ZWQtJyArIGluZGV4ICsgJ1wiPiAnICsgdmFsdWUgKyAnPC9sYWJlbD4nO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdHJlY29yZFR5cGVzQWxsb3dlZE1hcmt1cCArPSAnPC9kaXY+JztcblxuXG5cdFx0XHRcdFx0cmVjb3JkVHlwZURlZmF1bHRNYXJrdXAgKz0gJzxsYWJlbCBmb3I9XCJzYWxlc2ZvcmNlX3JlY29yZF90eXBlX2RlZmF1bHRcIj5EZWZhdWx0IFJlY29yZCBUeXBlOjwvbGFiZWw+Jztcblx0XHRcdFx0XHRyZWNvcmRUeXBlRGVmYXVsdE1hcmt1cCArPSAnPHNlbGVjdCBuYW1lPVwic2FsZXNmb3JjZV9yZWNvcmRfdHlwZV9kZWZhdWx0XCIgaWQ9XCJzYWxlc2ZvcmNlX3JlY29yZF90eXBlX2RlZmF1bHRcIj48b3B0aW9uIHZhbHVlPVwiXCI+LSBTZWxlY3QgcmVjb3JkIHR5cGUgLTwvb3B0aW9uPic7XG5cdFx0XHRcdFx0JC5lYWNoKCByZXNwb25zZS5kYXRhLnJlY29yZFR5cGVJbmZvcywgZnVuY3Rpb24oIGluZGV4LCB2YWx1ZSApIHtcblx0XHRcdFx0XHRcdHJlY29yZFR5cGVEZWZhdWx0TWFya3VwICs9ICc8b3B0aW9uIHZhbHVlPVwiJyArIGluZGV4ICsgJ1wiPicgKyB2YWx1ZSArICc8L29wdGlvbj4nO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0JCggJy5zYWxlc2ZvcmNlX3JlY29yZF90eXBlc19hbGxvd2VkJyApLmh0bWwoIHJlY29yZFR5cGVzQWxsb3dlZE1hcmt1cCApO1xuXHRcdFx0XHQkKCAnLnNhbGVzZm9yY2VfcmVjb3JkX3R5cGVfZGVmYXVsdCcgKS5odG1sKCByZWNvcmRUeXBlRGVmYXVsdE1hcmt1cCApO1xuXG5cdFx0XHRcdGlmICggMCA8ICQoIHJlc3BvbnNlLmRhdGEuZmllbGRzICkubGVuZ3RoICkge1xuXHRcdFx0XHRcdGRhdGVNYXJrdXAgKz0gJzxsYWJlbCBmb3I9XCJwdWxsX3RyaWdnZXJfZmllbGRcIj5EYXRlIGZpZWxkIHRvIHRyaWdnZXIgcHVsbDo8L2xhYmVsPic7XG5cdFx0XHRcdFx0ZGF0ZU1hcmt1cCArPSAnPHNlbGVjdCBuYW1lPVwicHVsbF90cmlnZ2VyX2ZpZWxkXCIgaWQ9XCJwdWxsX3RyaWdnZXJfZmllbGRcIj48b3B0aW9uIHZhbHVlPVwiXCI+LSBTZWxlY3QgZGF0ZSBmaWVsZCAtPC9vcHRpb24+J1xuXHRcdFx0XHRcdCQuZWFjaCggcmVzcG9uc2UuZGF0YS5maWVsZHMsIGZ1bmN0aW9uKCBpbmRleCwgdmFsdWUgKSB7XG5cdFx0XHRcdFx0XHRkYXRlTWFya3VwICs9ICc8b3B0aW9uIHZhbHVlPVwiJyArIHZhbHVlLm5hbWUgKyAnXCI+JyArIHZhbHVlLmxhYmVsICsgJzwvb3B0aW9uPic7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0ZGF0ZU1hcmt1cCArPSAnPC9zZWxlY3Q+Jztcblx0XHRcdFx0XHRkYXRlTWFya3VwICs9ICc8cCBjbGFzcz1cImRlc2NyaXB0aW9uXCI+VGhlc2UgYXJlIGRhdGUgZmllbGRzIHRoYXQgY2FuIGNhdXNlIFdvcmRQcmVzcyB0byBwdWxsIGFuIHVwZGF0ZSBmcm9tIFNhbGVzZm9yY2UsIGFjY29yZGluZyB0byB0aGUgPGNvZGU+c2FsZXNmb3JjZV9wdWxsPC9jb2RlPiBjbGFzcy48L3A+J1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0JCggJy5wdWxsX3RyaWdnZXJfZmllbGQnICkuaHRtbCggZGF0ZU1hcmt1cCApO1xuXG5cdFx0XHRcdGlmICggJycgIT09IHJlY29yZFR5cGVzQWxsb3dlZE1hcmt1cCApIHtcblx0XHRcdFx0XHQkKCAnLnNhbGVzZm9yY2VfcmVjb3JkX3R5cGVzX2FsbG93ZWQnICkuc2hvdygpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdCQoICcuc2FsZXNmb3JjZV9yZWNvcmRfdHlwZXNfYWxsb3dlZCcgKS5oaWRlKCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKCAnJyAhPT0gcmVjb3JkVHlwZURlZmF1bHRNYXJrdXAgKSB7XG5cdFx0XHRcdFx0JCggJy5zYWxlc2ZvcmNlX3JlY29yZF90eXBlX2RlZmF1bHQnICkuc2hvdygpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdCQoICcuc2FsZXNmb3JjZV9yZWNvcmRfdHlwZV9kZWZhdWx0JyApLmhpZGUoKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmICggJycgIT09IGRhdGVNYXJrdXAgKSB7XG5cdFx0XHRcdFx0JCggJy5wdWxsX3RyaWdnZXJfZmllbGQnICkuc2hvdygpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdCQoICcucHVsbF90cmlnZ2VyX2ZpZWxkJyApLmhpZGUoKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmICggalF1ZXJ5LmZuLnNlbGVjdDIgKSB7XG5cdFx0XHRcdFx0JCggJ3NlbGVjdCNzYWxlc2ZvcmNlX3JlY29yZF90eXBlX2RlZmF1bHQnICkuc2VsZWN0MigpO1xuXHRcdFx0XHRcdCQoICdzZWxlY3QjcHVsbF90cmlnZ2VyX2ZpZWxkJyApLnNlbGVjdDIoKTtcblx0XHRcdFx0fVxuXG5cdFx0XHR9KTtcblx0XHR9LCBkZWxheVRpbWUgKTtcblx0fSk7XG59XG4iLCIvKipcbiAqIEdldHMgdGhlIFdvcmRQcmVzcyBhbmQgU2FsZXNmb3JjZSBmaWVsZCByZXN1bHRzIHZpYSBhbiBBamF4IGNhbGxcbiAqIEBwYXJhbSBzdHJpbmcgc3lzdGVtIHdoZXRoZXIgd2Ugd2FudCBXb3JkUHJlc3Mgb3IgU2FsZXNmb3JjZSBkYXRhXG4gKiBAcGFyYW0gc3RyaW5nIG9iamVjdF9uYW1lIHRoZSB2YWx1ZSBmb3IgdGhlIG9iamVjdCBuYW1lIGZyb20gdGhlIHRoZSA8c2VsZWN0PlxuICovXG5mdW5jdGlvbiBsb2FkRmllbGRPcHRpb25zKCBzeXN0ZW0sIG9iamVjdF9uYW1lICkge1xuXHR2YXIgZGF0YSA9IHtcblx0XHQnYWN0aW9uJyA6ICdnZXRfJyArIHN5c3RlbSArICdfb2JqZWN0X2ZpZWxkcycsXG5cdH1cblx0dmFyIHNlbGVjdEZpZWxkID0gJy5jb2x1bW4tJyArIHN5c3RlbSArICdfZmllbGQgc2VsZWN0Jztcblx0dmFyIGZpZWxkcyA9ICcnO1xuXHR2YXIgZmlyc3RfZmllbGQgPSAkKCBzZWxlY3RGaWVsZCArICcgb3B0aW9uJykuZmlyc3QoKS50ZXh0KCk7XG5cdGlmICggJycgIT09ICQoIHNlbGVjdEZpZWxkICkudmFsKCkgKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cdGZpZWxkcyArPSAnPG9wdGlvbiB2YWx1ZT1cIlwiPicgKyBmaXJzdF9maWVsZCArICc8L29wdGlvbj4nO1xuXHRpZiAoICd3b3JkcHJlc3MnID09PSBzeXN0ZW0gKSB7XG5cdFx0ZGF0YVsnd29yZHByZXNzX29iamVjdCddID0gb2JqZWN0X25hbWU7XG5cdH0gZWxzZSBpZiAoICdzYWxlc2ZvcmNlJyA9PT0gc3lzdGVtICkge1xuXHRcdGRhdGFbJ3NhbGVzZm9yY2Vfb2JqZWN0J10gPSBvYmplY3RfbmFtZTtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gZmllbGRzO1xuXHR9XG5cblx0JC5hamF4KHtcblx0XHR0eXBlOiAnUE9TVCcsXG5cdFx0dXJsOiBhamF4dXJsLFxuXHRcdGRhdGE6IGRhdGEsXG5cdFx0YmVmb3JlU2VuZDogZnVuY3Rpb24oKSB7XG5cdFx0XHQkKCAnLnNwaW5uZXItJyArIHN5c3RlbSApLmFkZENsYXNzKCAnaXMtYWN0aXZlJyApO1xuXHRcdH0sXG5cdFx0c3VjY2VzczogZnVuY3Rpb24oIHJlc3BvbnNlICkge1xuXHRcdFx0JC5lYWNoKCByZXNwb25zZS5kYXRhLmZpZWxkcywgZnVuY3Rpb24oIGluZGV4LCB2YWx1ZSApIHtcblx0XHRcdFx0aWYgKCAnd29yZHByZXNzJyA9PT0gc3lzdGVtICkge1xuXHRcdFx0XHRcdGZpZWxkcyArPSAnPG9wdGlvbiB2YWx1ZT1cIicgKyB2YWx1ZS5rZXkgKyAnXCI+JyArIHZhbHVlLmtleSArICc8L29wdGlvbj4nO1xuXHRcdFx0XHR9IGVsc2UgaWYgKCAnc2FsZXNmb3JjZScgPT09IHN5c3RlbSApIHtcblx0XHRcdFx0XHRmaWVsZHMgKz0gJzxvcHRpb24gdmFsdWU9XCInICsgdmFsdWUubmFtZSArICdcIj4nICsgdmFsdWUubGFiZWwgKyAnPC9vcHRpb24+Jztcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0XHQkKCBzZWxlY3RGaWVsZCApLmh0bWwoIGZpZWxkcyApO1xuXHRcdH0sXG5cdFx0Y29tcGxldGU6IGZ1bmN0aW9uICgpIHtcblx0XHRcdCQoICcuc3Bpbm5lci0nICsgc3lzdGVtICkucmVtb3ZlQ2xhc3MoICdpcy1hY3RpdmUnICk7XG5cdFx0fVxuXHR9KTtcbn1cblxuLy8gbG9hZCBhdmFpbGFibGUgb3B0aW9ucyBpZiB0aGUgd29yZHByZXNzIG9iamVjdCBjaGFuZ2VzXG4kKCBkb2N1bWVudCApLm9uKCAnY2hhbmdlJywgJ3NlbGVjdCN3b3JkcHJlc3Nfb2JqZWN0JywgZnVuY3Rpb24oKSB7XG5cdHZhciB0aW1lb3V0O1xuXHRsb2FkRmllbGRPcHRpb25zKCAnd29yZHByZXNzJywgJCggdGhpcyApLnZhbCgpICk7XG5cdGNsZWFyVGltZW91dCggdGltZW91dCApO1xuXHR0aW1lb3V0ID0gc2V0VGltZW91dCggZnVuY3Rpb24oKSB7XG5cdFx0JCggJ3RhYmxlLmZpZWxkcyB0Ym9keSB0cicgKS5mYWRlT3V0KCk7XG5cdFx0JCggJ3RhYmxlLmZpZWxkcyB0Ym9keSB0cicgKS5ub3QoICcuZmllbGRtYXAtdGVtcGxhdGUnICkucmVtb3ZlKCk7XG5cdH0sIDEwMDAgKTtcbn0pO1xuXG4vLyBsb2FkIGF2YWlsYWJsZSBvcHRpb25zIGlmIHRoZSBzYWxlc2ZvcmNlIG9iamVjdCBjaGFuZ2VzXG4kKCBkb2N1bWVudCApLm9uKCAnY2hhbmdlJywgJ3NlbGVjdCNzYWxlc2ZvcmNlX29iamVjdCcsIGZ1bmN0aW9uKCkge1xuXHR2YXIgdGltZW91dDtcblx0bG9hZEZpZWxkT3B0aW9ucyggJ3NhbGVzZm9yY2UnLCAkKCB0aGlzICkudmFsKCkgKTtcblx0Y2xlYXJUaW1lb3V0KCB0aW1lb3V0ICk7XG5cdHRpbWVvdXQgPSBzZXRUaW1lb3V0KCBmdW5jdGlvbigpIHtcblx0XHQkKCAndGFibGUuZmllbGRzIHRib2R5IHRyJyApLmZhZGVPdXQoKTtcblx0XHQkKCAndGFibGUuZmllbGRzIHRib2R5IHRyJyApLm5vdCggJy5maWVsZG1hcC10ZW1wbGF0ZScgKS5yZW1vdmUoKTtcblx0fSwgMTAwMCApO1xufSk7XG4iLCJcbi8qKlxuICogRHVwbGljYXRlcyB0aGUgZmllbGRzIGZvciBhIG5ldyByb3cgaW4gdGhlIGZpZWxkbWFwIG9wdGlvbnMgc2NyZWVuLlxuICogdGhpcyBhcHBlYXJzIG5vdCB0byB3b3JrIHdpdGggZGF0YSgpIGluc3RlYWQgb2YgYXR0cigpXG4gKi9cbiBmdW5jdGlvbiBhZGRGaWVsZE1hcHBpbmdSb3coKSB7XG5cdCQoICcjYWRkLWZpZWxkLW1hcHBpbmcnICkuY2xpY2soIGZ1bmN0aW9uKCkge1xuXHRcdHZhciBzYWxlc2ZvcmNlT2JqZWN0ID0gJCggJyNzYWxlc2ZvcmNlX29iamVjdCcgKS52YWwoKTtcblx0XHR2YXIgd29yZHByZXNzT2JqZWN0ID0gJCggJyN3b3JkcHJlc3Nfb2JqZWN0JyApLnZhbCgpO1xuXHRcdHZhciBuZXdLZXkgPSBuZXcgRGF0ZSgpLmdldFVUQ01pbGxpc2Vjb25kcygpO1xuXHRcdHZhciBsYXN0Um93ID0gJCggJ3RhYmxlLmZpZWxkcyB0Ym9keSB0cicgKS5sYXN0KCk7XG5cdFx0dmFyIG9sZEtleSA9IGxhc3RSb3cuYXR0ciggJ2RhdGEta2V5JyApO1xuXHRcdG9sZEtleSA9IG5ldyBSZWdFeHAoIG9sZEtleSwgJ2cnICk7XG5cdFx0JCggdGhpcyApLnRleHQoICdBZGQgYW5vdGhlciBmaWVsZCBtYXBwaW5nJyApO1xuXHRcdGlmICggJycgIT09IHdvcmRwcmVzc09iamVjdCAmJiAnJyAhPT0gc2FsZXNmb3JjZU9iamVjdCApIHtcblx0XHRcdGZpZWxkbWFwRmllbGRzKCBvbGRLZXksIG5ld0tleSwgbGFzdFJvdyApO1xuXHRcdFx0JCggdGhpcyApLnBhcmVudCgpLmZpbmQoICcubWlzc2luZy1vYmplY3QnICkucmVtb3ZlKCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdCQoIHRoaXMgKS5wYXJlbnQoKS5wcmVwZW5kKCAnPGRpdiBjbGFzcz1cImVycm9yIG1pc3Npbmctb2JqZWN0XCI+PHNwYW4+WW91IGhhdmUgdG8gcGljayBhIFdvcmRQcmVzcyBvYmplY3QgYW5kIGEgU2FsZXNmb3JjZSBvYmplY3QgdG8gYWRkIGZpZWxkIG1hcHBpbmcuPC9zcGFuPjwvZGl2PicgKTtcblx0XHR9XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9KTtcbn1cbi8qKlxuICogQ2xvbmVzIHRoZSBmaWVsZHNldCBtYXJrdXAgcHJvdmlkZWQgYnkgdGhlIHNlcnZlci1zaWRlIHRlbXBsYXRlIGFuZCBhcHBlbmRzIGl0IGF0IHRoZSBlbmQuXG4gKiB0aGlzIGFwcGVhcnMgbm90IHRvIHdvcmsgd2l0aCBkYXRhKCkgaW5zdGVhZCBvZiBhdHRyKClcbiAqIEBwYXJhbSBzdHJpbmcgb2xkS2V5IHRoZSBkYXRhIGtleSBhdHRyaWJ1dGUgb2YgdGhlIHNldCB0aGF0IGlzIGJlaW5nIGNsb25lZFxuICogQHBhcmFtIHN0cmluZyBuZXdLZXkgdGhlIGRhdGEga2V5IGF0dHJpYnV0ZSBmb3IgdGhlIG9uZSB3ZSdyZSBhcHBlbmRpbmdcbiAqIEBwYXJhbSBvYmplY3QgbGFzdFJvdyB0aGUgbGFzdCBzZXQgb2YgdGhlIGZpZWxkbWFwXG4gKi9cbmZ1bmN0aW9uIGZpZWxkbWFwRmllbGRzKCBvbGRLZXksIG5ld0tleSwgbGFzdFJvdyApIHtcblx0dmFyIG5leHRSb3cgPSAnJztcbiAgICBpZiAoIGpRdWVyeS5mbi5zZWxlY3QyICkge1xuICAgIFx0bmV4dFJvdyA9IGxhc3RSb3cuZmluZCggJ3NlbGVjdCcgKVxuICAgICAgICAgICAgLnNlbGVjdDIoICdkZXN0cm95JyApXG4gICAgICAgICAgICAuZW5kKClcbiAgICAgICAgICAgIC5jbG9uZSggdHJ1ZSApLnJlbW92ZUNsYXNzKCAnZmllbGRtYXAtdGVtcGxhdGUnICk7XG4gICAgfSBlbHNlIHtcbiAgICBcdG5leHRSb3cgPSBsYXN0Um93LmNsb25lKCB0cnVlICk7XG4gICAgfVxuXHQkKCBuZXh0Um93ICkuYXR0ciggJ2RhdGEta2V5JywgbmV3S2V5ICk7XG5cdCQoIG5leHRSb3cgKS5lYWNoKGZ1bmN0aW9uKCkge1xuXHRcdCQoIHRoaXMgKS5odG1sKCBmdW5jdGlvbiggaSwgaCApIHtcblx0XHRcdHJldHVybiBoLnJlcGxhY2UoIG9sZEtleSwgbmV3S2V5ICk7XG5cdFx0fSk7XG5cdH0pO1xuXHQkKCAndGFibGUuZmllbGRzIHRib2R5JyApLmFwcGVuZCggbmV4dFJvdyApO1xuXHRpZiAoIGpRdWVyeS5mbi5zZWxlY3QyICkge1xuXHRcdGxhc3RSb3cuZmluZCggJ3NlbGVjdCcgKS5zZWxlY3QyKCk7XG5cdFx0bmV4dFJvdy5maW5kKCAnc2VsZWN0JyApLnNlbGVjdDIoKTtcblx0fVxufVxuXG4vKipcbiAqIEFzIHRoZSBEcnVwYWwgcGx1Z2luIGRvZXMsIHdlIG9ubHkgYWxsb3cgb25lIGZpZWxkIHRvIGJlIGEgcHJlbWF0Y2hcbiAqL1xuJCggZG9jdW1lbnQgKS5vbiggJ2NsaWNrJywgJy5jb2x1bW4taXNfcHJlbWF0Y2ggaW5wdXQnLCBmdW5jdGlvbigpIHtcblx0JCggJy5jb2x1bW4taXNfcHJlbWF0Y2ggaW5wdXQnICkubm90KCB0aGlzICkucHJvcCggJ2NoZWNrZWQnLCBmYWxzZSApO1xufSk7XG5cbi8qKlxuICogQXMgdGhlIERydXBhbCBwbHVnaW4gZG9lcywgd2Ugb25seSBhbGxvdyBvbmUgZmllbGQgdG8gYmUgYSBrZXlcbiAqL1xuJCggZG9jdW1lbnQgKS5vbiggJ2NsaWNrJywgJy5jb2x1bW4taXNfa2V5IGlucHV0JywgZnVuY3Rpb24oKSB7XG5cdCQoICcuY29sdW1uLWlzX2tleSBpbnB1dCcgKS5ub3QoIHRoaXMgKS5wcm9wKCAnY2hlY2tlZCcsIGZhbHNlICk7XG59KTtcbiIsIi8qKlxuICogSGFuZGxlIG1hbnVhbCBwdXNoIGFuZCBwdWxsIG9mIG9iamVjdHNcbiAqL1xuZnVuY3Rpb24gcHVzaEFuZFB1bGxPYmplY3RzKCkge1xuXHQkKCAnLnNhbGVzZm9yY2VfdXNlcl9hamF4X21lc3NhZ2UnICkuaGlkZSgpO1xuXHRpZiAoIDAgPCAkKCAnI3dvcmRwcmVzc19vYmplY3RfYWpheCcgKS5sZW5ndGggKSB7XG5cdFx0JCggJy5wdXNoX3RvX3NhbGVzZm9yY2VfYnV0dG9uJyApLm9uKCAnY2xpY2snLCBmdW5jdGlvbigpIHtcblx0XHRcdHZhciB3b3JkcHJlc3NPYmplY3QgPSAkKCAnI3dvcmRwcmVzc19vYmplY3RfYWpheCcgKS52YWwoKTtcblx0XHRcdHZhciB3b3JkcHJlc3NJZCA9ICQoICcjd29yZHByZXNzX2lkX2FqYXgnICkudmFsKCk7XG5cdFx0XHR2YXIgc2FsZXNmb3JjZUlkID0gJCggJyNzYWxlc2ZvcmNlX2lkX2FqYXgnICkudmFsKCk7XG5cdFx0XHR2YXIgZGF0YSA9IHtcblx0XHRcdFx0J2FjdGlvbicgOiAncHVzaF90b19zYWxlc2ZvcmNlJyxcblx0XHRcdFx0J3dvcmRwcmVzc19vYmplY3QnIDogd29yZHByZXNzT2JqZWN0LFxuXHRcdFx0XHQnd29yZHByZXNzX2lkJyA6IHdvcmRwcmVzc0lkLFxuXHRcdFx0XHQnc2FsZXNmb3JjZV9pZCcgOiBzYWxlc2ZvcmNlSWRcblx0XHRcdH1cblx0XHRcdCQucG9zdCggYWpheHVybCwgZGF0YSwgZnVuY3Rpb24oIHJlc3BvbnNlICkge1xuXHRcdFx0XHRpZiAoIHRydWUgPT09IHJlc3BvbnNlLnN1Y2Nlc3MgKSB7XG5cdFx0XHRcdFx0dXBkYXRlU2FsZXNmb3JjZVVzZXJTdW1tYXJ5KCk7XG5cdFx0XHRcdFx0JCggJy5zYWxlc2ZvcmNlX3VzZXJfYWpheF9tZXNzYWdlJyApLndpZHRoKCAkKCAnLm1hcHBlZC1zYWxlc2ZvcmNlLXVzZXInICkud2lkdGgoKSAtIDI3ICk7XG5cdFx0XHRcdFx0JCggJy5zYWxlc2ZvcmNlX3VzZXJfYWpheF9tZXNzYWdlJyApLmh0bWwoICc8cD5UaGlzIG9iamVjdCBoYXMgYmVlbiBwdXNoZWQgdG8gU2FsZXNmb3JjZS48L3A+JyApLmZhZGVJbigpLmRlbGF5KCA0MDAwICkuZmFkZU91dCgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9KTtcblx0fVxuXHQkKCAnLnB1bGxfZnJvbV9zYWxlc2ZvcmNlX2J1dHRvbicgKS5vbiggJ2NsaWNrJywgZnVuY3Rpb24oKSB7XG5cdFx0dmFyIHNhbGVzZm9yY2VJZCA9ICQoICcjc2FsZXNmb3JjZV9pZF9hamF4JyApLnZhbCgpO1xuXHRcdHZhciB3b3JkcHJlc3NPYmplY3QgPSAkKCAnI3dvcmRwcmVzc19vYmplY3RfYWpheCcgKS52YWwoKTtcblx0XHR2YXIgZGF0YSA9IHtcblx0XHRcdCdhY3Rpb24nIDogJ3B1bGxfZnJvbV9zYWxlc2ZvcmNlJyxcblx0XHRcdCdzYWxlc2ZvcmNlX2lkJyA6IHNhbGVzZm9yY2VJZCxcblx0XHRcdCd3b3JkcHJlc3Nfb2JqZWN0JyA6IHdvcmRwcmVzc09iamVjdFxuXHRcdH1cblx0XHQkLnBvc3QoIGFqYXh1cmwsIGRhdGEsIGZ1bmN0aW9uKCByZXNwb25zZSApIHtcblx0XHRcdGlmICggdHJ1ZSA9PT0gcmVzcG9uc2Uuc3VjY2VzcyApIHtcblx0XHRcdFx0dXBkYXRlU2FsZXNmb3JjZVVzZXJTdW1tYXJ5KCk7XG5cdFx0XHRcdCQoICcuc2FsZXNmb3JjZV91c2VyX2FqYXhfbWVzc2FnZScgKS53aWR0aCggJCggJy5tYXBwZWQtc2FsZXNmb3JjZS11c2VyJyApLndpZHRoKCkgLSAyNyApO1xuXHRcdFx0XHQkKCAnLnNhbGVzZm9yY2VfdXNlcl9hamF4X21lc3NhZ2UnICkuaHRtbCggJzxwPlRoaXMgb2JqZWN0IGhhcyBiZWVuIHB1bGxlZCBmcm9tIFNhbGVzZm9yY2UuPC9wPicgKS5mYWRlSW4oKS5kZWxheSggNDAwMCApLmZhZGVPdXQoKTtcblx0XHRcdH1cblx0XHR9KTtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH0pO1xufVxuLyoqXG4gKiBVcGRhdGVzIHRoZSB1c2VyIHByb2ZpbGUgc3VtbWFyeSBvZiBTYWxlc2ZvcmNlIGluZm8uXG4gKi9cbmZ1bmN0aW9uIHVwZGF0ZVNhbGVzZm9yY2VVc2VyU3VtbWFyeSgpIHtcblx0dmFyIG1hcHBpbmdJZCA9ICQoICcjbWFwcGluZ19pZF9hamF4JyApLnZhbCgpO1xuXHR2YXIgZGF0YSA9IHtcblx0XHQnYWN0aW9uJyA6ICdyZWZyZXNoX21hcHBlZF9kYXRhJyxcblx0XHQnbWFwcGluZ19pZCcgOiBtYXBwaW5nSWRcblx0fVxuXHQkLnBvc3QoIGFqYXh1cmwsIGRhdGEsIGZ1bmN0aW9uKCByZXNwb25zZSApIHtcblx0XHRpZiAoIHRydWUgPT09IHJlc3BvbnNlLnN1Y2Nlc3MgKSB7XG5cdFx0XHQkKCAndGQubGFzdF9zeW5jX21lc3NhZ2UnICkudGV4dCggcmVzcG9uc2UuZGF0YS5sYXN0X3N5bmNfbWVzc2FnZSApO1xuXHRcdFx0JCggJ3RkLmxhc3Rfc3luY19hY3Rpb24nICkudGV4dCggcmVzcG9uc2UuZGF0YS5sYXN0X3N5bmNfYWN0aW9uICk7XG5cdFx0XHQkKCAndGQubGFzdF9zeW5jX3N0YXR1cycgKS50ZXh0KCByZXNwb25zZS5kYXRhLmxhc3Rfc3luY19zdGF0dXMgKTtcblx0XHRcdCQoICd0ZC5sYXN0X3N5bmMnICkudGV4dCggcmVzcG9uc2UuZGF0YS5sYXN0X3N5bmMgKTtcblx0XHRcdGlmICggJzEnID09PSByZXNwb25zZS5kYXRhLmxhc3Rfc3luY19zdGF0dXMgKSB7XG5cdFx0XHRcdCQoICd0ZC5sYXN0X3N5bmNfc3RhdHVzJyApLnRleHQoICdzdWNjZXNzJyApO1xuXHRcdFx0fVxuXHRcdH1cblx0fSk7XG59XG4vKipcbiAqIENsZWFyIHRoZSBwbHVnaW4gY2FjaGUgdmlhIEFqYXggcmVxdWVzdC5cbiAqL1xuZnVuY3Rpb24gY2xlYXJTZndwQ2FjaGVMaW5rKCkge1xuXHQkKCAnI2NsZWFyLXNmd3AtY2FjaGUnICkuY2xpY2soIGZ1bmN0aW9uKCkge1xuXHRcdHZhciBkYXRhID0ge1xuXHRcdFx0J2FjdGlvbicgOiAnY2xlYXJfc2Z3cF9jYWNoZSdcblx0XHR9XG5cdFx0dmFyIHRoYXQgPSAkKCB0aGlzICk7XG5cdFx0JC5wb3N0KCBhamF4dXJsLCBkYXRhLCBmdW5jdGlvbiggcmVzcG9uc2UgKSB7XG5cdFx0XHRpZiAoIHRydWUgPT09IHJlc3BvbnNlLnN1Y2Nlc3MgJiYgdHJ1ZSA9PT0gcmVzcG9uc2UuZGF0YS5zdWNjZXNzICkge1xuXHRcdFx0XHR0aGF0LnBhcmVudCgpLmh0bWwoIHJlc3BvbnNlLmRhdGEubWVzc2FnZSApLmZhZGVJbigpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdHJldHVybiBmYWxzZTtcblx0fSk7XG59XG4iLCIvKipcbiAqIERvbid0IHNob3cgdGhlIFdTREwgZmlsZSBmaWVsZCB1bmxlc3MgU09BUCBpcyBlbmFibGVkXG4gKi9cbmZ1bmN0aW9uIHRvZ2dsZVNvYXBGaWVsZHMoKSB7XG5cdGlmICggMCA8ICQoICcub2JqZWN0LXN5bmMtZm9yLXNhbGVzZm9yY2UtZW5hYmxlLXNvYXAnICkubGVuZ3RoICkge1xuXHRcdGlmICggJCggJy5vYmplY3Qtc3luYy1mb3Itc2FsZXNmb3JjZS1lbmFibGUtc29hcCBpbnB1dCcgKS5pcyggJzpjaGVja2VkJyApICkge1xuXHRcdFx0JCggJy5vYmplY3Qtc3luYy1mb3Itc2FsZXNmb3JjZS1zb2FwLXdzZGwtcGF0aCcgKS5zaG93KCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdCQoICcub2JqZWN0LXN5bmMtZm9yLXNhbGVzZm9yY2Utc29hcC13c2RsLXBhdGgnICkuaGlkZSgpO1xuXHRcdH1cblx0fVxufVxuXG4vLyBEb24ndCBzaG93IHRoZSBXU0RMIGZpbGUgZmllbGQgdW5sZXNzIFNPQVAgaXMgZW5hYmxlZFxuJCggZG9jdW1lbnQgKS5vbiggJ2NoYW5nZScsICcub2JqZWN0LXN5bmMtZm9yLXNhbGVzZm9yY2UtZW5hYmxlLXNvYXAgaW5wdXQnLCBmdW5jdGlvbigpIHtcblx0dG9nZ2xlU29hcEZpZWxkcygpO1xufSk7IiwiLyoqXG4gKiBXaGVuIHRoZSBwbHVnaW4gbG9hZHMsIGluaXRpYWxpemUgb3IgZW5hYmxlIHRoaW5nczpcbiAqIFNlbGVjdDIgb24gc2VsZWN0IGZpZWxkc1xuICogQ2xlYXIgZmllbGRzIHdoZW4gdGhlIHRhcmdldGVkIFdvcmRQcmVzcyBvciBTYWxlc2ZvcmNlIG9iamVjdCB0eXBlIGNoYW5nZXNcbiAqIE1hbmFnZSB0aGUgZGlzcGxheSBmb3IgU2FsZXNmb3JjZSBvYmplY3QgZmllbGRzIGJhc2VkIG9uIEFQSSByZXBvbnNlXG4gKiBNYW51YWwgcHVzaCBhbmQgcHVsbFxuICogQ2xlYXJpbmcgdGhlIGNhY2hlXG4gKi9cbiQoIGRvY3VtZW50ICkucmVhZHkoIGZ1bmN0aW9uKCkge1xuXG5cdC8vIERvbid0IHNob3cgdGhlIFdTREwgZmlsZSBmaWVsZCB1bmxlc3MgU09BUCBpcyBlbmFibGVkXG5cdHRvZ2dsZVNvYXBGaWVsZHMoKTtcblxuXHQvLyBpZiB0aGVyZSBpcyBhbHJlYWR5IGEgd3Agb3Igc2Ygb2JqZWN0LCBtYWtlIHN1cmUgaXQgaGFzIHRoZSByaWdodCBmaWVsZHMgd2hlbiB0aGUgcGFnZSBsb2Fkc1xuXHRsb2FkRmllbGRPcHRpb25zKCAnd29yZHByZXNzJywgJCggJ3NlbGVjdCN3b3JkcHJlc3Nfb2JqZWN0JyApLnZhbCgpICk7XG5cdGxvYWRGaWVsZE9wdGlvbnMoICdzYWxlc2ZvcmNlJywgJCggJ3NlbGVjdCNzYWxlc2ZvcmNlX29iamVjdCcgKS52YWwoKSApO1xuXG5cdC8vIHNldHVwIHRoZSBzZWxlY3QyIGZpZWxkcyBpZiB0aGUgbGlicmFyeSBpcyBwcmVzZW50XG5cdGlmICggalF1ZXJ5LmZuLnNlbGVjdDIgKSB7XG5cdFx0JCggJ3NlbGVjdCN3b3JkcHJlc3Nfb2JqZWN0JyApLnNlbGVjdDIoKTtcblx0XHQkKCAnc2VsZWN0I3NhbGVzZm9yY2Vfb2JqZWN0JyApLnNlbGVjdDIoKTtcblx0XHQkKCAnc2VsZWN0I3NhbGVzZm9yY2VfcmVjb3JkX3R5cGVfZGVmYXVsdCcgKS5zZWxlY3QyKCk7XG5cdFx0JCggJ3NlbGVjdCNwdWxsX3RyaWdnZXJfZmllbGQnICkuc2VsZWN0MigpO1xuXHRcdCQoICcuY29sdW1uLXdvcmRwcmVzc19maWVsZCBzZWxlY3QnICkuc2VsZWN0MigpO1xuXHRcdCQoICcuY29sdW1uLXNhbGVzZm9yY2VfZmllbGQgc2VsZWN0JyApLnNlbGVjdDIoKTtcblx0fVxuXG5cdC8vIGdldCB0aGUgYXZhaWxhYmxlIFNhbGVzZm9yY2Ugb2JqZWN0IGNob2ljZXNcblx0c2FsZXNmb3JjZU9iamVjdEZpZWxkcygpO1xuXG5cdC8vIER1cGxpY2F0ZSB0aGUgZmllbGRzIGZvciBhIG5ldyByb3cgaW4gdGhlIGZpZWxkbWFwIG9wdGlvbnMgc2NyZWVuLlxuXHRhZGRGaWVsZE1hcHBpbmdSb3coKTtcblxuXHQvLyBIYW5kbGUgbWFudWFsIHB1c2ggYW5kIHB1bGwgb2Ygb2JqZWN0c1xuXHRwdXNoQW5kUHVsbE9iamVjdHMoKTtcblxuXHQvLyBDbGVhciB0aGUgcGx1Z2luIGNhY2hlIHZpYSBBamF4IHJlcXVlc3QuXG5cdGNsZWFyU2Z3cENhY2hlTGluaygpO1xufSk7XG4iXX0= }(jQuery)); diff --git a/assets/js/object-sync-for-salesforce-admin.min.js b/assets/js/object-sync-for-salesforce-admin.min.js index d0f73a81..ef702bde 100644 --- a/assets/js/object-sync-for-salesforce-admin.min.js +++ b/assets/js/object-sync-for-salesforce-admin.min.js @@ -1 +1 @@ -!function(c){"use strict";function s(t,e){var s={action:"get_"+t+"_object_fields"},a=".column-"+t+"_field select",o="",l=c(a+" option").first().text();if(""===c(a).val()){if(o+='","wordpress"===t)s.wordpress_object=e;else{if("salesforce"!==t)return o;s.salesforce_object=e}c.ajax({type:"POST",url:ajaxurl,data:s,beforeSend:function(){c(".spinner-"+t).addClass("is-active")},success:function(e){c.each(e.data.fields,function(e,s){"wordpress"===t?o+='":"salesforce"===t&&(o+='")}),c(a).html(o)},complete:function(){c(".spinner-"+t).removeClass("is-active")}})}}function e(){0 *").length&&c(".salesforce_record_types_allowed").hide(),0===c(".salesforce_record_type_default > *").length&&c(".salesforce_record_type_default").hide(),0===c(".pull_trigger_field > *").length&&c(".pull_trigger_field").hide(),c("#salesforce_object").on("change",function(){var s=this;e(function(){var e={action:"get_salesforce_object_description",include:["fields","recordTypeInfos"],field_type:"datetime",salesforce_object:s.value};c.post(ajaxurl,e,function(e){var t="",a="",o="";0Allowed Record Types:
',c.each(e.data.recordTypeInfos,function(e,s){t+='"}),t+="
",a+='',a+='',c.each(e.data.fields,function(e,s){o+='"}),o+="",o+='

These are date fields that can cause WordPress to pull an update from Salesforce, according to the salesforce_pull class.

'),c(".pull_trigger_field").html(o),""!==t?c(".salesforce_record_types_allowed").show():c(".salesforce_record_types_allowed").hide(),""!==a?c(".salesforce_record_type_default").show():c(".salesforce_record_type_default").hide(),""!==o?c(".pull_trigger_field").show():c(".pull_trigger_field").hide(),jQuery.fn.select2&&(c("select#salesforce_record_type_default").select2(),c("select#pull_trigger_field").select2())})},1e3)})}function a(){c("#add-field-mapping").click(function(){var e=c("#salesforce_object").val(),s=c("#wordpress_object").val(),t=(new Date).getUTCMilliseconds(),a=c("table.fields tbody tr").last(),o=a.attr("data-key");return o=new RegExp(o,"g"),c(this).text("Add another field mapping"),""!==s&&""!==e?(function(t,a,e){var s="";s=jQuery.fn.select2?e.find("select").select2("destroy").end().clone(!0).removeClass("fieldmap-template"):e.clone(!0);c(s).attr("data-key",a),c(s).each(function(){c(this).html(function(e,s){return s.replace(t,a)})}),c("table.fields tbody").append(s),jQuery.fn.select2&&(e.find("select").select2(),s.find("select").select2())}(o,t,a),c(this).parent().find(".missing-object").remove()):c(this).parent().prepend('
You have to pick a WordPress object and a Salesforce object to add field mapping.
'),!1})}function o(){var e={action:"refresh_mapped_data",mapping_id:c("#mapping_id_ajax").val()};c.post(ajaxurl,e,function(e){!0===e.success&&(c("td.last_sync_message").text(e.data.last_sync_message),c("td.last_sync_action").text(e.data.last_sync_action),c("td.last_sync_status").text(e.data.last_sync_status),c("td.last_sync").text(e.data.last_sync),"1"===e.data.last_sync_status&&c("td.last_sync_status").text("success"))})}c(document).on("change","select#wordpress_object",function(){var e;s("wordpress",c(this).val()),clearTimeout(e),e=setTimeout(function(){c("table.fields tbody tr").fadeOut(),c("table.fields tbody tr").not(".fieldmap-template").remove()},1e3)}),c(document).on("change","select#salesforce_object",function(){var e;s("salesforce",c(this).val()),clearTimeout(e),e=setTimeout(function(){c("table.fields tbody tr").fadeOut(),c("table.fields tbody tr").not(".fieldmap-template").remove()},1e3)}),c(document).on("change",".object-sync-for-salesforce-enable-soap input",function(){e()}),c(document).on("click",".column-is_prematch input",function(){c(".column-is_prematch input").not(this).prop("checked",!1)}),c(document).on("click",".column-is_key input",function(){c(".column-is_key input").not(this).prop("checked",!1)}),c(document).ready(function(){e(),s("wordpress",c("select#wordpress_object").val()),s("salesforce",c("select#salesforce_object").val()),jQuery.fn.select2&&(c("select#wordpress_object").select2(),c("select#salesforce_object").select2(),c("select#salesforce_record_type_default").select2(),c("select#pull_trigger_field").select2(),c(".column-wordpress_field select").select2(),c(".column-salesforce_field select").select2()),t(),a(),c(".salesforce_user_ajax_message").hide(),0This object has been pushed to Salesforce.

").fadeIn().delay(4e3).fadeOut())}),!1}),c(".pull_from_salesforce_button").on("click",function(){var e={action:"pull_from_salesforce",salesforce_id:c("#salesforce_id_ajax").val(),wordpress_object:c("#wordpress_object_ajax").val()};return c.post(ajaxurl,e,function(e){!0===e.success&&(o(),c(".salesforce_user_ajax_message").width(c(".mapped-salesforce-user").width()-27),c(".salesforce_user_ajax_message").html("

This object has been pulled from Salesforce.

").fadeIn().delay(4e3).fadeOut())}),!1}),c("#clear-sfwp-cache").click(function(){var s=c(this);return c.post(ajaxurl,{action:"clear_sfwp_cache"},function(e){!0===e.success&&!0===e.data.success&&s.parent().html(e.data.message).fadeIn()}),!1})})}(jQuery); \ No newline at end of file +!function(c){"use strict";function e(){var t,e=function(e,s){clearTimeout(t),t=setTimeout(e,s)};(t=0)===c(".salesforce_record_types_allowed > *").length&&c(".salesforce_record_types_allowed").hide(),0===c(".salesforce_record_type_default > *").length&&c(".salesforce_record_type_default").hide(),0===c(".pull_trigger_field > *").length&&c(".pull_trigger_field").hide(),c("#salesforce_object").on("change",function(){var s=this;e(function(){var e={action:"get_salesforce_object_description",include:["fields","recordTypeInfos"],field_type:"datetime",salesforce_object:s.value};c.post(ajaxurl,e,function(e){var t="",a="",o="";0Allowed Record Types:
',c.each(e.data.recordTypeInfos,function(e,s){t+='"}),t+="
",a+='',a+='',c.each(e.data.fields,function(e,s){o+='"}),o+="",o+='

These are date fields that can cause WordPress to pull an update from Salesforce, according to the salesforce_pull class.

'),c(".pull_trigger_field").html(o),""!==t?c(".salesforce_record_types_allowed").show():c(".salesforce_record_types_allowed").hide(),""!==a?c(".salesforce_record_type_default").show():c(".salesforce_record_type_default").hide(),""!==o?c(".pull_trigger_field").show():c(".pull_trigger_field").hide(),jQuery.fn.select2&&(c("select#salesforce_record_type_default").select2(),c("select#pull_trigger_field").select2())})},1e3)})}function s(t,e){var s={action:"get_"+t+"_object_fields"},a=".column-"+t+"_field select",o="",l=c(a+" option").first().text();if(""===c(a).val()){if(o+='","wordpress"===t)s.wordpress_object=e;else{if("salesforce"!==t)return o;s.salesforce_object=e}c.ajax({type:"POST",url:ajaxurl,data:s,beforeSend:function(){c(".spinner-"+t).addClass("is-active")},success:function(e){c.each(e.data.fields,function(e,s){"wordpress"===t?o+='":"salesforce"===t&&(o+='")}),c(a).html(o)},complete:function(){c(".spinner-"+t).removeClass("is-active")}})}}function t(){c("#add-field-mapping").click(function(){var e=c("#salesforce_object").val(),s=c("#wordpress_object").val(),t=(new Date).getUTCMilliseconds(),a=c("table.fields tbody tr").last(),o=a.attr("data-key");return o=new RegExp(o,"g"),c(this).text("Add another field mapping"),""!==s&&""!==e?(function(t,a,e){var s="";s=jQuery.fn.select2?e.find("select").select2("destroy").end().clone(!0).removeClass("fieldmap-template"):e.clone(!0);c(s).attr("data-key",a),c(s).each(function(){c(this).html(function(e,s){return s.replace(t,a)})}),c("table.fields tbody").append(s),jQuery.fn.select2&&(e.find("select").select2(),s.find("select").select2())}(o,t,a),c(this).parent().find(".missing-object").remove()):c(this).parent().prepend('
You have to pick a WordPress object and a Salesforce object to add field mapping.
'),!1})}function a(){var e={action:"refresh_mapped_data",mapping_id:c("#mapping_id_ajax").val()};c.post(ajaxurl,e,function(e){!0===e.success&&(c("td.last_sync_message").text(e.data.last_sync_message),c("td.last_sync_action").text(e.data.last_sync_action),c("td.last_sync_status").text(e.data.last_sync_status),c("td.last_sync").text(e.data.last_sync),"1"===e.data.last_sync_status&&c("td.last_sync_status").text("success"))})}function o(){0This object has been pushed to Salesforce.

").fadeIn().delay(4e3).fadeOut())}),!1}),c(".pull_from_salesforce_button").on("click",function(){var e={action:"pull_from_salesforce",salesforce_id:c("#salesforce_id_ajax").val(),wordpress_object:c("#wordpress_object_ajax").val()};return c.post(ajaxurl,e,function(e){!0===e.success&&(a(),c(".salesforce_user_ajax_message").width(c(".mapped-salesforce-user").width()-27),c(".salesforce_user_ajax_message").html("

This object has been pulled from Salesforce.

").fadeIn().delay(4e3).fadeOut())}),!1}),c("#clear-sfwp-cache").click(function(){var s=c(this);return c.post(ajaxurl,{action:"clear_sfwp_cache"},function(e){!0===e.success&&!0===e.data.success&&s.parent().html(e.data.message).fadeIn()}),!1})})}(jQuery); \ No newline at end of file diff --git a/assets/js/src/01-salesforce-object.js b/assets/js/src/01-salesforce-object.js new file mode 100644 index 00000000..0e79abdf --- /dev/null +++ b/assets/js/src/01-salesforce-object.js @@ -0,0 +1,95 @@ +/** + * Generates the Salesforce object fields based on the dropdown activity and API results. + * This also generates other query fields that are object-specific, like date fields, record types allowed, etc. + */ +function salesforceObjectFields() { + + var delay = ( function() { + var timer = 0; + return function( callback, ms ) { + clearTimeout ( timer ); + timer = setTimeout( callback, ms ); + }; + }() ); + + if ( 0 === $( '.salesforce_record_types_allowed > *' ).length ) { + $( '.salesforce_record_types_allowed' ).hide(); + } + + if ( 0 === $( '.salesforce_record_type_default > *' ).length ) { + $( '.salesforce_record_type_default' ).hide(); + } + if ( 0 === $( '.pull_trigger_field > *' ).length ) { + $( '.pull_trigger_field' ).hide(); + } + + $( '#salesforce_object' ).on( 'change', function() { + var that = this; + var delayTime = 1000; + delay( function() { + var data = { + 'action' : 'get_salesforce_object_description', + 'include' : [ 'fields', 'recordTypeInfos' ], + 'field_type' : 'datetime', + 'salesforce_object' : that.value + } + $.post( ajaxurl, data, function( response ) { + + var recordTypesAllowedMarkup = '', recordTypeDefaultMarkup = '', dateMarkup = ''; + + if ( 0 < $( response.data.recordTypeInfos ).length ) { + recordTypesAllowedMarkup += '
'; + $.each( response.data.recordTypeInfos, function( index, value ) { + recordTypesAllowedMarkup += ''; + }); + recordTypesAllowedMarkup += '
'; + + + recordTypeDefaultMarkup += ''; + recordTypeDefaultMarkup += '' + $.each( response.data.fields, function( index, value ) { + dateMarkup += ''; + }); + dateMarkup += ''; + dateMarkup += '

These are date fields that can cause WordPress to pull an update from Salesforce, according to the salesforce_pull class.

' + } + + $( '.pull_trigger_field' ).html( dateMarkup ); + + if ( '' !== recordTypesAllowedMarkup ) { + $( '.salesforce_record_types_allowed' ).show(); + } else { + $( '.salesforce_record_types_allowed' ).hide(); + } + if ( '' !== recordTypeDefaultMarkup ) { + $( '.salesforce_record_type_default' ).show(); + } else { + $( '.salesforce_record_type_default' ).hide(); + } + + if ( '' !== dateMarkup ) { + $( '.pull_trigger_field' ).show(); + } else { + $( '.pull_trigger_field' ).hide(); + } + + if ( jQuery.fn.select2 ) { + $( 'select#salesforce_record_type_default' ).select2(); + $( 'select#pull_trigger_field' ).select2(); + } + + }); + }, delayTime ); + }); +} diff --git a/assets/js/src/02-load-field-options.js b/assets/js/src/02-load-field-options.js new file mode 100644 index 00000000..d7e343d9 --- /dev/null +++ b/assets/js/src/02-load-field-options.js @@ -0,0 +1,68 @@ +/** + * Gets the WordPress and Salesforce field results via an Ajax call + * @param string system whether we want WordPress or Salesforce data + * @param string object_name the value for the object name from the the - */ - function loadFieldOptions( system, object_name ) { - var data = { - 'action' : 'get_' + system + '_object_fields', - } - var selectField = '.column-' + system + '_field select'; - var fields = ''; - var first_field = $( selectField + ' option').first().text(); - if ( '' !== $( selectField ).val() ) { - return; - } - fields += ''; - if ( 'wordpress' === system ) { - data['wordpress_object'] = object_name; - } else if ( 'salesforce' === system ) { - data['salesforce_object'] = object_name; - } else { - return fields; - } - - $.ajax({ - type: 'POST', - url: ajaxurl, - data: data, - beforeSend: function() { - $( '.spinner-' + system ).addClass( 'is-active' ); - }, - success: function( response ) { - $.each( response.data.fields, function( index, value ) { - if ( 'wordpress' === system ) { - fields += ''; - } else if ( 'salesforce' === system ) { - fields += ''; - } - }); - $( selectField ).html( fields ); - }, - complete: function () { - $( '.spinner-' + system ).removeClass( 'is-active' ); - } - }); - } - - /** - * Don't show the WSDL file field unless SOAP is enabled - */ - function toggleSoapFields() { - if ( 0 < $( '.object-sync-for-salesforce-enable-soap' ).length ) { - if ( $( '.object-sync-for-salesforce-enable-soap input' ).is( ':checked' ) ) { - $( '.object-sync-for-salesforce-soap-wsdl-path' ).show(); - } else { - $( '.object-sync-for-salesforce-soap-wsdl-path' ).hide(); - } - } - } - - /** - * Generates the Salesforce object fields based on the dropdown activity and API results. - * This also generates other query fields that are object-specific, like date fields, record types allowed, etc. - */ - function salesforceObjectFields() { - - var delay = ( function() { - var timer = 0; - return function( callback, ms ) { - clearTimeout ( timer ); - timer = setTimeout( callback, ms ); - }; - }() ); - - if ( 0 === $( '.salesforce_record_types_allowed > *' ).length ) { - $( '.salesforce_record_types_allowed' ).hide(); - } - - if ( 0 === $( '.salesforce_record_type_default > *' ).length ) { - $( '.salesforce_record_type_default' ).hide(); - } - if ( 0 === $( '.pull_trigger_field > *' ).length ) { - $( '.pull_trigger_field' ).hide(); - } - - $( '#salesforce_object' ).on( 'change', function() { - var that = this; - var delayTime = 1000; - delay( function() { - var data = { - 'action' : 'get_salesforce_object_description', - 'include' : [ 'fields', 'recordTypeInfos' ], - 'field_type' : 'datetime', - 'salesforce_object' : that.value - } - $.post( ajaxurl, data, function( response ) { - - var recordTypesAllowedMarkup = '', recordTypeDefaultMarkup = '', dateMarkup = ''; - - if ( 0 < $( response.data.recordTypeInfos ).length ) { - recordTypesAllowedMarkup += '
'; - $.each( response.data.recordTypeInfos, function( index, value ) { - recordTypesAllowedMarkup += ''; - }); - recordTypesAllowedMarkup += '
'; - - - recordTypeDefaultMarkup += ''; - recordTypeDefaultMarkup += '' - $.each( response.data.fields, function( index, value ) { - dateMarkup += ''; - }); - dateMarkup += ''; - dateMarkup += '

These are date fields that can cause WordPress to pull an update from Salesforce, according to the salesforce_pull class.

' - } - - $( '.pull_trigger_field' ).html( dateMarkup ); - - if ( '' !== recordTypesAllowedMarkup ) { - $( '.salesforce_record_types_allowed' ).show(); - } else { - $( '.salesforce_record_types_allowed' ).hide(); - } - if ( '' !== recordTypeDefaultMarkup ) { - $( '.salesforce_record_type_default' ).show(); - } else { - $( '.salesforce_record_type_default' ).hide(); - } - - if ( '' !== dateMarkup ) { - $( '.pull_trigger_field' ).show(); - } else { - $( '.pull_trigger_field' ).hide(); - } - - if ( jQuery.fn.select2 ) { - $( 'select#salesforce_record_type_default' ).select2(); - $( 'select#pull_trigger_field' ).select2(); - } - - }); - }, delayTime ); - }); - } - /** - * Duplicates the fields for a new row in the fieldmap options screen. - * this appears not to work with data() instead of attr() - */ - function addFieldMappingRow() { - $( '#add-field-mapping' ).click( function() { - var salesforceObject = $( '#salesforce_object' ).val(); - var wordpressObject = $( '#wordpress_object' ).val(); - var newKey = new Date().getUTCMilliseconds(); - var lastRow = $( 'table.fields tbody tr' ).last(); - var oldKey = lastRow.attr( 'data-key' ); - oldKey = new RegExp( oldKey, 'g' ); - $( this ).text( 'Add another field mapping' ); - if ( '' !== wordpressObject && '' !== salesforceObject ) { - fieldmapFields( oldKey, newKey, lastRow ); - $( this ).parent().find( '.missing-object' ).remove(); - } else { - $( this ).parent().prepend( '
You have to pick a WordPress object and a Salesforce object to add field mapping.
' ); - } - return false; - }); - } - /** - * Clones the fieldset markup provided by the server-side template and appends it at the end. - * this appears not to work with data() instead of attr() - * @param string oldKey the data key attribute of the set that is being cloned - * @param string newKey the data key attribute for the one we're appending - * @param object lastRow the last set of the fieldmap - */ - function fieldmapFields( oldKey, newKey, lastRow ) { - var nextRow = ''; - if ( jQuery.fn.select2 ) { - nextRow = lastRow.find( 'select' ) - .select2( 'destroy' ) - .end() - .clone( true ).removeClass( 'fieldmap-template' ); - } else { - nextRow = lastRow.clone( true ); - } - $( nextRow ).attr( 'data-key', newKey ); - $( nextRow ).each(function() { - $( this ).html( function( i, h ) { - return h.replace( oldKey, newKey ); - }); - }); - $( 'table.fields tbody' ).append( nextRow ); - if ( jQuery.fn.select2 ) { - lastRow.find( 'select' ).select2(); - nextRow.find( 'select' ).select2(); - } - } - /** - * Handle manual push and pull of objects - */ - function pushAndPullObjects() { - $( '.salesforce_user_ajax_message' ).hide(); - if ( 0 < $( '#wordpress_object_ajax' ).length ) { - $( '.push_to_salesforce_button' ).on( 'click', function() { - var wordpressObject = $( '#wordpress_object_ajax' ).val(); - var wordpressId = $( '#wordpress_id_ajax' ).val(); - var salesforceId = $( '#salesforce_id_ajax' ).val(); - var data = { - 'action' : 'push_to_salesforce', - 'wordpress_object' : wordpressObject, - 'wordpress_id' : wordpressId, - 'salesforce_id' : salesforceId - } - $.post( ajaxurl, data, function( response ) { - if ( true === response.success ) { - updateSalesforceUserSummary(); - $( '.salesforce_user_ajax_message' ).width( $( '.mapped-salesforce-user' ).width() - 27 ); - $( '.salesforce_user_ajax_message' ).html( '

This object has been pushed to Salesforce.

' ).fadeIn().delay( 4000 ).fadeOut(); - } - }); - return false; - }); - } - $( '.pull_from_salesforce_button' ).on( 'click', function() { - var salesforceId = $( '#salesforce_id_ajax' ).val(); - var wordpressObject = $( '#wordpress_object_ajax' ).val(); - var data = { - 'action' : 'pull_from_salesforce', - 'salesforce_id' : salesforceId, - 'wordpress_object' : wordpressObject - } - $.post( ajaxurl, data, function( response ) { - if ( true === response.success ) { - updateSalesforceUserSummary(); - $( '.salesforce_user_ajax_message' ).width( $( '.mapped-salesforce-user' ).width() - 27 ); - $( '.salesforce_user_ajax_message' ).html( '

This object has been pulled from Salesforce.

' ).fadeIn().delay( 4000 ).fadeOut(); - } - }); - return false; - }); - } - /** - * Updates the user profile summary of Salesforce info. - */ - function updateSalesforceUserSummary() { - var mappingId = $( '#mapping_id_ajax' ).val(); - var data = { - 'action' : 'refresh_mapped_data', - 'mapping_id' : mappingId - } - $.post( ajaxurl, data, function( response ) { - if ( true === response.success ) { - $( 'td.last_sync_message' ).text( response.data.last_sync_message ); - $( 'td.last_sync_action' ).text( response.data.last_sync_action ); - $( 'td.last_sync_status' ).text( response.data.last_sync_status ); - $( 'td.last_sync' ).text( response.data.last_sync ); - if ( '1' === response.data.last_sync_status ) { - $( 'td.last_sync_status' ).text( 'success' ); - } - } - }); - } - /** - * Clear the plugin cache via Ajax request. - */ - function clearSfwpCacheLink() { - $( '#clear-sfwp-cache' ).click( function() { - var data = { - 'action' : 'clear_sfwp_cache' - } - var that = $( this ); - $.post( ajaxurl, data, function( response ) { - if ( true === response.success && true === response.data.success ) { - that.parent().html( response.data.message ).fadeIn(); - } - }); - return false; - }); - } - - // load available options if the wordpress object changes - $( document ).on( 'change', 'select#wordpress_object', function() { - var timeout; - loadFieldOptions( 'wordpress', $( this ).val() ); - clearTimeout( timeout ); - timeout = setTimeout( function() { - $( 'table.fields tbody tr' ).fadeOut(); - $( 'table.fields tbody tr' ).not( '.fieldmap-template' ).remove(); - }, 1000 ); - }); - - // load available options if the salesforce object changes - $( document ).on( 'change', 'select#salesforce_object', function() { - var timeout; - loadFieldOptions( 'salesforce', $( this ).val() ); - clearTimeout( timeout ); - timeout = setTimeout( function() { - $( 'table.fields tbody tr' ).fadeOut(); - $( 'table.fields tbody tr' ).not( '.fieldmap-template' ).remove(); - }, 1000 ); - }); - - // Don't show the WSDL file field unless SOAP is enabled - $( document ).on( 'change', '.object-sync-for-salesforce-enable-soap input', function() { - toggleSoapFields(); - }); - - /** - * As the Drupal plugin does, we only allow one field to be a prematch - */ - $( document ).on( 'click', '.column-is_prematch input', function() { - $( '.column-is_prematch input' ).not( this ).prop( 'checked', false ); - }); - /** - * As the Drupal plugin does, we only allow one field to be a key - */ - $( document ).on( 'click', '.column-is_key input', function() { - $( '.column-is_key input' ).not( this ).prop( 'checked', false ); - }); - /** - * When the plugin loads, initialize or enable things: - * Select2 on select fields - * Clear fields when the targeted WordPress or Salesforce object type changes - * Manage the display for Salesforce object fields based on API reponse - * Manual push and pull - * Clearing the cache - */ - $( document ).ready( function() { - - // Don't show the WSDL file field unless SOAP is enabled - toggleSoapFields(); - - // if there is already a wp or sf object, make sure it has the right fields when the page loads - loadFieldOptions( 'wordpress', $( 'select#wordpress_object' ).val() ); - loadFieldOptions( 'salesforce', $( 'select#salesforce_object' ).val() ); - - // setup the select2 fields if the library is present - if ( jQuery.fn.select2 ) { - $( 'select#wordpress_object' ).select2(); - $( 'select#salesforce_object' ).select2(); - $( 'select#salesforce_record_type_default' ).select2(); - $( 'select#pull_trigger_field' ).select2(); - $( '.column-wordpress_field select' ).select2(); - $( '.column-salesforce_field select' ).select2(); - } - - // get the available Salesforce object choices - salesforceObjectFields(); - - // Duplicate the fields for a new row in the fieldmap options screen. - addFieldMappingRow(); - - // Handle manual push and pull of objects - pushAndPullObjects(); - - // Clear the plugin cache via Ajax request. - clearSfwpCacheLink(); - }); -}( jQuery ) ); From 32bb3fd008af8f9e281ad16e5670caacca68ea1d Mon Sep 17 00:00:00 2001 From: Jonathan Stegall Date: Sun, 5 Jan 2020 20:40:15 -0600 Subject: [PATCH 20/27] better organize scripts --- assets/js/object-sync-for-salesforce-admin.js | 69 +++++++++---------- .../object-sync-for-salesforce-admin.min.js | 2 +- assets/js/src/01-salesforce-object.js | 9 +++ assets/js/src/02-load-field-options.js | 17 ++++- assets/js/src/03-fieldmap-rows.js | 19 +++++ assets/js/src/04-interface-ajax-events.js | 12 ++++ assets/js/src/05-soap.js | 7 +- assets/js/src/06-document-ready.js | 39 ----------- 8 files changed, 95 insertions(+), 79 deletions(-) delete mode 100644 assets/js/src/06-document-ready.js diff --git a/assets/js/object-sync-for-salesforce-admin.js b/assets/js/object-sync-for-salesforce-admin.js index 7d9d74fc..a5b9f9c4 100644 --- a/assets/js/object-sync-for-salesforce-admin.js +++ b/assets/js/object-sync-for-salesforce-admin.js @@ -95,6 +95,11 @@ function salesforceObjectFields() { }, delayTime); }); } + +$(document).ready(function () { + // get the available Salesforce object choices + salesforceObjectFields(); +}); "use strict"; /** @@ -108,13 +113,13 @@ function loadFieldOptions(system, object_name) { }; var selectField = '.column-' + system + '_field select'; var fields = ''; - var first_field = $(selectField + ' option').first().text(); + var firstField = $(selectField + ' option').first().text(); if ('' !== $(selectField).val()) { return; } - fields += ''; + fields += ''; if ('wordpress' === system) { data['wordpress_object'] = object_name; @@ -167,6 +172,11 @@ $(document).on('change', 'select#salesforce_object', function () { $('table.fields tbody tr').not('.fieldmap-template').remove(); }, 1000); }); +$(document).ready(function () { + // if there is already a wp or sf object, make sure it has the right fields when the page loads + loadFieldOptions('wordpress', $('select#wordpress_object').val()); + loadFieldOptions('salesforce', $('select#salesforce_object').val()); +}); "use strict"; /** @@ -239,6 +249,19 @@ $(document).on('click', '.column-is_prematch input', function () { $(document).on('click', '.column-is_key input', function () { $('.column-is_key input').not(this).prop('checked', false); }); +$(document).ready(function () { + // Duplicate the fields for a new row in the fieldmap options screen. + addFieldMappingRow(); // setup the select2 fields if the library is present + + if (jQuery.fn.select2) { + $('select#wordpress_object').select2(); + $('select#salesforce_object').select2(); + $('select#salesforce_record_type_default').select2(); + $('select#pull_trigger_field').select2(); + $('.column-wordpress_field select').select2(); + $('.column-salesforce_field select').select2(); + } +}); "use strict"; /** @@ -330,6 +353,13 @@ function clearSfwpCacheLink() { return false; }); } + +$(document).ready(function () { + // Clear the plugin cache via Ajax request. + clearSfwpCacheLink(); // Handle manual push and pull of objects + + pushAndPullObjects(); +}); "use strict"; /** @@ -349,40 +379,9 @@ function toggleSoapFields() { $(document).on('change', '.object-sync-for-salesforce-enable-soap input', function () { toggleSoapFields(); }); -"use strict"; - -/** - * When the plugin loads, initialize or enable things: - * Select2 on select fields - * Clear fields when the targeted WordPress or Salesforce object type changes - * Manage the display for Salesforce object fields based on API reponse - * Manual push and pull - * Clearing the cache - */ $(document).ready(function () { // Don't show the WSDL file field unless SOAP is enabled - toggleSoapFields(); // if there is already a wp or sf object, make sure it has the right fields when the page loads - - loadFieldOptions('wordpress', $('select#wordpress_object').val()); - loadFieldOptions('salesforce', $('select#salesforce_object').val()); // setup the select2 fields if the library is present - - if (jQuery.fn.select2) { - $('select#wordpress_object').select2(); - $('select#salesforce_object').select2(); - $('select#salesforce_record_type_default').select2(); - $('select#pull_trigger_field').select2(); - $('.column-wordpress_field select').select2(); - $('.column-salesforce_field select').select2(); - } // get the available Salesforce object choices - - - salesforceObjectFields(); // Duplicate the fields for a new row in the fieldmap options screen. - - addFieldMappingRow(); // Handle manual push and pull of objects - - pushAndPullObjects(); // Clear the plugin cache via Ajax request. - - clearSfwpCacheLink(); + toggleSoapFields(); }); -//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIjAxLXNhbGVzZm9yY2Utb2JqZWN0LmpzIiwiMDItbG9hZC1maWVsZC1vcHRpb25zLmpzIiwiMDMtZmllbGRtYXAtcm93cy5qcyIsIjA0LWludGVyZmFjZS1hamF4LWV2ZW50cy5qcyIsIjA1LXNvYXAuanMiLCIwNi1kb2N1bWVudC1yZWFkeS5qcyJdLCJuYW1lcyI6WyJzYWxlc2ZvcmNlT2JqZWN0RmllbGRzIiwiZGVsYXkiLCJ0aW1lciIsImNhbGxiYWNrIiwibXMiLCJjbGVhclRpbWVvdXQiLCJzZXRUaW1lb3V0IiwiJCIsImxlbmd0aCIsImhpZGUiLCJvbiIsInRoYXQiLCJkZWxheVRpbWUiLCJkYXRhIiwidmFsdWUiLCJwb3N0IiwiYWpheHVybCIsInJlc3BvbnNlIiwicmVjb3JkVHlwZXNBbGxvd2VkTWFya3VwIiwicmVjb3JkVHlwZURlZmF1bHRNYXJrdXAiLCJkYXRlTWFya3VwIiwicmVjb3JkVHlwZUluZm9zIiwiZWFjaCIsImluZGV4IiwiaHRtbCIsImZpZWxkcyIsIm5hbWUiLCJsYWJlbCIsInNob3ciLCJqUXVlcnkiLCJmbiIsInNlbGVjdDIiLCJsb2FkRmllbGRPcHRpb25zIiwic3lzdGVtIiwib2JqZWN0X25hbWUiLCJzZWxlY3RGaWVsZCIsImZpcnN0X2ZpZWxkIiwiZmlyc3QiLCJ0ZXh0IiwidmFsIiwiYWpheCIsInR5cGUiLCJ1cmwiLCJiZWZvcmVTZW5kIiwiYWRkQ2xhc3MiLCJzdWNjZXNzIiwia2V5IiwiY29tcGxldGUiLCJyZW1vdmVDbGFzcyIsImRvY3VtZW50IiwidGltZW91dCIsImZhZGVPdXQiLCJub3QiLCJyZW1vdmUiLCJhZGRGaWVsZE1hcHBpbmdSb3ciLCJjbGljayIsInNhbGVzZm9yY2VPYmplY3QiLCJ3b3JkcHJlc3NPYmplY3QiLCJuZXdLZXkiLCJEYXRlIiwiZ2V0VVRDTWlsbGlzZWNvbmRzIiwibGFzdFJvdyIsImxhc3QiLCJvbGRLZXkiLCJhdHRyIiwiUmVnRXhwIiwiZmllbGRtYXBGaWVsZHMiLCJwYXJlbnQiLCJmaW5kIiwicHJlcGVuZCIsIm5leHRSb3ciLCJlbmQiLCJjbG9uZSIsImkiLCJoIiwicmVwbGFjZSIsImFwcGVuZCIsInByb3AiLCJwdXNoQW5kUHVsbE9iamVjdHMiLCJ3b3JkcHJlc3NJZCIsInNhbGVzZm9yY2VJZCIsInVwZGF0ZVNhbGVzZm9yY2VVc2VyU3VtbWFyeSIsIndpZHRoIiwiZmFkZUluIiwibWFwcGluZ0lkIiwibGFzdF9zeW5jX21lc3NhZ2UiLCJsYXN0X3N5bmNfYWN0aW9uIiwibGFzdF9zeW5jX3N0YXR1cyIsImxhc3Rfc3luYyIsImNsZWFyU2Z3cENhY2hlTGluayIsIm1lc3NhZ2UiLCJ0b2dnbGVTb2FwRmllbGRzIiwiaXMiLCJyZWFkeSJdLCJtYXBwaW5ncyI6Ijs7QUFBQTs7OztBQUlBLFNBQVNBLHNCQUFULEdBQWtDO0FBRWpDLE1BQUlDLEtBQUssR0FBSyxZQUFXO0FBQ3hCLFFBQUlDLEtBQUssR0FBRyxDQUFaO0FBQ0EsV0FBTyxVQUFVQyxRQUFWLEVBQW9CQyxFQUFwQixFQUF5QjtBQUMvQkMsTUFBQUEsWUFBWSxDQUFHSCxLQUFILENBQVo7QUFDQUEsTUFBQUEsS0FBSyxHQUFHSSxVQUFVLENBQUVILFFBQUYsRUFBWUMsRUFBWixDQUFsQjtBQUNBLEtBSEQ7QUFJQSxHQU5hLEVBQWQ7O0FBUUEsTUFBSyxNQUFNRyxDQUFDLENBQUUsc0NBQUYsQ0FBRCxDQUE0Q0MsTUFBdkQsRUFBZ0U7QUFDL0RELElBQUFBLENBQUMsQ0FBRSxrQ0FBRixDQUFELENBQXdDRSxJQUF4QztBQUNBOztBQUVELE1BQUssTUFBTUYsQ0FBQyxDQUFFLHFDQUFGLENBQUQsQ0FBMkNDLE1BQXRELEVBQStEO0FBQzlERCxJQUFBQSxDQUFDLENBQUUsaUNBQUYsQ0FBRCxDQUF1Q0UsSUFBdkM7QUFDQTs7QUFDRCxNQUFLLE1BQU1GLENBQUMsQ0FBRSx5QkFBRixDQUFELENBQStCQyxNQUExQyxFQUFtRDtBQUNsREQsSUFBQUEsQ0FBQyxDQUFFLHFCQUFGLENBQUQsQ0FBMkJFLElBQTNCO0FBQ0E7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Q2RBOzs7Ozs7OztBQVFBcEYsQ0FBQyxDQUFFMEMsUUFBRixDQUFELENBQWM0QyxLQUFkLENBQXFCLFlBQVc7QUFFL0I7QUFDQUYsRUFBQUEsZ0JBQWdCLEdBSGUsQ0FLL0I7O0FBQ0EzRCxFQUFBQSxnQkFBZ0IsQ0FBRSxXQUFGLEVBQWV6QixDQUFDLENBQUUseUJBQUYsQ0FBRCxDQUErQmdDLEdBQS9CLEVBQWYsQ0FBaEI7QUFDQVAsRUFBQUEsZ0JBQWdCLENBQUUsWUFBRixFQUFnQnpCLENBQUMsQ0FBRSwwQkFBRixDQUFELENBQWdDZ0MsR0FBaEMsRUFBaEIsQ0FBaEIsQ0FQK0IsQ0FTL0I7O0FBQ0EsTUFBS1YsTUFBTSxDQUFDQyxFQUFQLENBQVVDLE9BQWYsRUFBeUI7QUFDeEJ4QixJQUFBQSxDQUFDLENBQUUseUJBQUYsQ0FBRCxDQUErQndCLE9BQS9CO0FBQ0F4QixJQUFBQSxDQUFDLENBQUUsMEJBQUYsQ0FBRCxDQUFnQ3dCLE9BQWhDO0FBQ0F4QixJQUFBQSxDQUFDLENBQUUsdUNBQUYsQ0FBRCxDQUE2Q3dCLE9BQTdDO0FBQ0F4QixJQUFBQSxDQUFDLENBQUUsMkJBQUYsQ0FBRCxDQUFpQ3dCLE9BQWpDO0FBQ0F4QixJQUFBQSxDQUFDLENBQUUsZ0NBQUYsQ0FBRCxDQUFzQ3dCLE9BQXRDO0FBQ0F4QixJQUFBQSxDQUFDLENBQUUsaUNBQUYsQ0FBRCxDQUF1Q3dCLE9BQXZDO0FBQ0EsR0FqQjhCLENBbUIvQjs7O0FBQ0EvQixFQUFBQSxzQkFBc0IsR0FwQlMsQ0FzQi9COztBQUNBc0QsRUFBQUEsa0JBQWtCLEdBdkJhLENBeUIvQjs7QUFDQXdCLEVBQUFBLGtCQUFrQixHQTFCYSxDQTRCL0I7O0FBQ0FXLEVBQUFBLGtCQUFrQjtBQUNsQixDQTlCRCIsImZpbGUiOiJvYmplY3Qtc3luYy1mb3Itc2FsZXNmb3JjZS1hZG1pbi5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJhdGVzIHRoZSBTYWxlc2ZvcmNlIG9iamVjdCBmaWVsZHMgYmFzZWQgb24gdGhlIGRyb3Bkb3duIGFjdGl2aXR5IGFuZCBBUEkgcmVzdWx0cy5cbiAqIFRoaXMgYWxzbyBnZW5lcmF0ZXMgb3RoZXIgcXVlcnkgZmllbGRzIHRoYXQgYXJlIG9iamVjdC1zcGVjaWZpYywgbGlrZSBkYXRlIGZpZWxkcywgcmVjb3JkIHR5cGVzIGFsbG93ZWQsIGV0Yy5cbiAqL1xuZnVuY3Rpb24gc2FsZXNmb3JjZU9iamVjdEZpZWxkcygpIHtcblxuXHR2YXIgZGVsYXkgPSAoIGZ1bmN0aW9uKCkge1xuXHRcdHZhciB0aW1lciA9IDA7XG5cdFx0cmV0dXJuIGZ1bmN0aW9uKCBjYWxsYmFjaywgbXMgKSB7XG5cdFx0XHRjbGVhclRpbWVvdXQgKCB0aW1lciApO1xuXHRcdFx0dGltZXIgPSBzZXRUaW1lb3V0KCBjYWxsYmFjaywgbXMgKTtcblx0XHR9O1xuXHR9KCkgKTtcblxuXHRpZiAoIDAgPT09ICQoICcuc2FsZXNmb3JjZV9yZWNvcmRfdHlwZXNfYWxsb3dlZCA+IConICkubGVuZ3RoICkge1xuXHRcdCQoICcuc2FsZXNmb3JjZV9yZWNvcmRfdHlwZXNfYWxsb3dlZCcgKS5oaWRlKCk7XG5cdH1cblxuXHRpZiAoIDAgPT09ICQoICcuc2FsZXNmb3JjZV9yZWNvcmRfdHlwZV9kZWZhdWx0ID4gKicgKS5sZW5ndGggKSB7XG5cdFx0JCggJy5zYWxlc2ZvcmNlX3JlY29yZF90eXBlX2RlZmF1bHQnICkuaGlkZSgpO1xuXHR9XG5cdGlmICggMCA9PT0gJCggJy5wdWxsX3RyaWdnZXJfZmllbGQgPiAqJyApLmxlbmd0aCApIHtcblx0XHQkKCAnLnB1bGxfdHJpZ2dlcl9maWVsZCcgKS5oaWRlKCk7XG5cdH1cblxuXHQkKCAnI3NhbGVzZm9yY2Vfb2JqZWN0JyApLm9uKCAnY2hhbmdlJywgZnVuY3Rpb24oKSB7XG5cdFx0dmFyIHRoYXQgPSB0aGlzO1xuXHRcdHZhciBkZWxheVRpbWUgPSAxMDAwO1xuXHRcdGRlbGF5KCBmdW5jdGlvbigpIHtcblx0XHRcdHZhciBkYXRhID0ge1xuXHRcdFx0XHQnYWN0aW9uJyA6ICdnZXRfc2FsZXNmb3JjZV9vYmplY3RfZGVzY3JpcHRpb24nLFxuXHRcdFx0XHQnaW5jbHVkZScgOiBbICdmaWVsZHMnLCAncmVjb3JkVHlwZUluZm9zJyBdLFxuXHRcdFx0XHQnZmllbGRfdHlwZScgOiAnZGF0ZXRpbWUnLFxuXHRcdFx0XHQnc2FsZXNmb3JjZV9vYmplY3QnIDogdGhhdC52YWx1ZVxuXHRcdFx0fVxuXHRcdFx0JC5wb3N0KCBhamF4dXJsLCBkYXRhLCBmdW5jdGlvbiggcmVzcG9uc2UgKSB7XG5cblx0XHRcdFx0dmFyIHJlY29yZFR5cGVzQWxsb3dlZE1hcmt1cCA9ICcnLCByZWNvcmRUeXBlRGVmYXVsdE1hcmt1cCA9ICcnLCBkYXRlTWFya3VwID0gJyc7XG5cblx0XHRcdFx0aWYgKCAwIDwgJCggcmVzcG9uc2UuZGF0YS5yZWNvcmRUeXBlSW5mb3MgKS5sZW5ndGggKSB7XG5cdFx0XHRcdFx0cmVjb3JkVHlwZXNBbGxvd2VkTWFya3VwICs9ICc8bGFiZWwgZm9yPVwic2FsZXNmb3JjZV9yZWNvcmRfdHlwZXNfYWxsb3dlZFwiPkFsbG93ZWQgUmVjb3JkIFR5cGVzOjwvbGFiZWw+PGRpdiBjbGFzcz1cImNoZWNrYm94ZXNcIj4nO1xuXHRcdFx0XHRcdCQuZWFjaCggcmVzcG9uc2UuZGF0YS5yZWNvcmRUeXBlSW5mb3MsIGZ1bmN0aW9uKCBpbmRleCwgdmFsdWUgKSB7XG5cdFx0XHRcdFx0XHRyZWNvcmRUeXBlc0FsbG93ZWRNYXJrdXAgKz0gJzxsYWJlbD48aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgY2xhc3M9XCJmb3JtLWNoZWNrYm94XCIgdmFsdWU9XCInICsgaW5kZXggKyAnXCIgbmFtZT1cInNhbGVzZm9yY2VfcmVjb3JkX3R5cGVzX2FsbG93ZWRbJyArIGluZGV4ICsgJ11cIiBpZD1cInNhbGVzZm9yY2VfcmVjb3JkX3R5cGVzX2FsbG93ZWQtJyArIGluZGV4ICsgJ1wiPiAnICsgdmFsdWUgKyAnPC9sYWJlbD4nO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdHJlY29yZFR5cGVzQWxsb3dlZE1hcmt1cCArPSAnPC9kaXY+JztcblxuXG5cdFx0XHRcdFx0cmVjb3JkVHlwZURlZmF1bHRNYXJrdXAgKz0gJzxsYWJlbCBmb3I9XCJzYWxlc2ZvcmNlX3JlY29yZF90eXBlX2RlZmF1bHRcIj5EZWZhdWx0IFJlY29yZCBUeXBlOjwvbGFiZWw+Jztcblx0XHRcdFx0XHRyZWNvcmRUeXBlRGVmYXVsdE1hcmt1cCArPSAnPHNlbGVjdCBuYW1lPVwic2FsZXNmb3JjZV9yZWNvcmRfdHlwZV9kZWZhdWx0XCIgaWQ9XCJzYWxlc2ZvcmNlX3JlY29yZF90eXBlX2RlZmF1bHRcIj48b3B0aW9uIHZhbHVlPVwiXCI+LSBTZWxlY3QgcmVjb3JkIHR5cGUgLTwvb3B0aW9uPic7XG5cdFx0XHRcdFx0JC5lYWNoKCByZXNwb25zZS5kYXRhLnJlY29yZFR5cGVJbmZvcywgZnVuY3Rpb24oIGluZGV4LCB2YWx1ZSApIHtcblx0XHRcdFx0XHRcdHJlY29yZFR5cGVEZWZhdWx0TWFya3VwICs9ICc8b3B0aW9uIHZhbHVlPVwiJyArIGluZGV4ICsgJ1wiPicgKyB2YWx1ZSArICc8L29wdGlvbj4nO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0JCggJy5zYWxlc2ZvcmNlX3JlY29yZF90eXBlc19hbGxvd2VkJyApLmh0bWwoIHJlY29yZFR5cGVzQWxsb3dlZE1hcmt1cCApO1xuXHRcdFx0XHQkKCAnLnNhbGVzZm9yY2VfcmVjb3JkX3R5cGVfZGVmYXVsdCcgKS5odG1sKCByZWNvcmRUeXBlRGVmYXVsdE1hcmt1cCApO1xuXG5cdFx0XHRcdGlmICggMCA8ICQoIHJlc3BvbnNlLmRhdGEuZmllbGRzICkubGVuZ3RoICkge1xuXHRcdFx0XHRcdGRhdGVNYXJrdXAgKz0gJzxsYWJlbCBmb3I9XCJwdWxsX3RyaWdnZXJfZmllbGRcIj5EYXRlIGZpZWxkIHRvIHRyaWdnZXIgcHVsbDo8L2xhYmVsPic7XG5cdFx0XHRcdFx0ZGF0ZU1hcmt1cCArPSAnPHNlbGVjdCBuYW1lPVwicHVsbF90cmlnZ2VyX2ZpZWxkXCIgaWQ9XCJwdWxsX3RyaWdnZXJfZmllbGRcIj48b3B0aW9uIHZhbHVlPVwiXCI+LSBTZWxlY3QgZGF0ZSBmaWVsZCAtPC9vcHRpb24+J1xuXHRcdFx0XHRcdCQuZWFjaCggcmVzcG9uc2UuZGF0YS5maWVsZHMsIGZ1bmN0aW9uKCBpbmRleCwgdmFsdWUgKSB7XG5cdFx0XHRcdFx0XHRkYXRlTWFya3VwICs9ICc8b3B0aW9uIHZhbHVlPVwiJyArIHZhbHVlLm5hbWUgKyAnXCI+JyArIHZhbHVlLmxhYmVsICsgJzwvb3B0aW9uPic7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0ZGF0ZU1hcmt1cCArPSAnPC9zZWxlY3Q+Jztcblx0XHRcdFx0XHRkYXRlTWFya3VwICs9ICc8cCBjbGFzcz1cImRlc2NyaXB0aW9uXCI+VGhlc2UgYXJlIGRhdGUgZmllbGRzIHRoYXQgY2FuIGNhdXNlIFdvcmRQcmVzcyB0byBwdWxsIGFuIHVwZGF0ZSBmcm9tIFNhbGVzZm9yY2UsIGFjY29yZGluZyB0byB0aGUgPGNvZGU+c2FsZXNmb3JjZV9wdWxsPC9jb2RlPiBjbGFzcy48L3A+J1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0JCggJy5wdWxsX3RyaWdnZXJfZmllbGQnICkuaHRtbCggZGF0ZU1hcmt1cCApO1xuXG5cdFx0XHRcdGlmICggJycgIT09IHJlY29yZFR5cGVzQWxsb3dlZE1hcmt1cCApIHtcblx0XHRcdFx0XHQkKCAnLnNhbGVzZm9yY2VfcmVjb3JkX3R5cGVzX2FsbG93ZWQnICkuc2hvdygpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdCQoICcuc2FsZXNmb3JjZV9yZWNvcmRfdHlwZXNfYWxsb3dlZCcgKS5oaWRlKCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKCAnJyAhPT0gcmVjb3JkVHlwZURlZmF1bHRNYXJrdXAgKSB7XG5cdFx0XHRcdFx0JCggJy5zYWxlc2ZvcmNlX3JlY29yZF90eXBlX2RlZmF1bHQnICkuc2hvdygpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdCQoICcuc2FsZXNmb3JjZV9yZWNvcmRfdHlwZV9kZWZhdWx0JyApLmhpZGUoKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmICggJycgIT09IGRhdGVNYXJrdXAgKSB7XG5cdFx0XHRcdFx0JCggJy5wdWxsX3RyaWdnZXJfZmllbGQnICkuc2hvdygpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdCQoICcucHVsbF90cmlnZ2VyX2ZpZWxkJyApLmhpZGUoKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmICggalF1ZXJ5LmZuLnNlbGVjdDIgKSB7XG5cdFx0XHRcdFx0JCggJ3NlbGVjdCNzYWxlc2ZvcmNlX3JlY29yZF90eXBlX2RlZmF1bHQnICkuc2VsZWN0MigpO1xuXHRcdFx0XHRcdCQoICdzZWxlY3QjcHVsbF90cmlnZ2VyX2ZpZWxkJyApLnNlbGVjdDIoKTtcblx0XHRcdFx0fVxuXG5cdFx0XHR9KTtcblx0XHR9LCBkZWxheVRpbWUgKTtcblx0fSk7XG59XG4iLCIvKipcbiAqIEdldHMgdGhlIFdvcmRQcmVzcyBhbmQgU2FsZXNmb3JjZSBmaWVsZCByZXN1bHRzIHZpYSBhbiBBamF4IGNhbGxcbiAqIEBwYXJhbSBzdHJpbmcgc3lzdGVtIHdoZXRoZXIgd2Ugd2FudCBXb3JkUHJlc3Mgb3IgU2FsZXNmb3JjZSBkYXRhXG4gKiBAcGFyYW0gc3RyaW5nIG9iamVjdF9uYW1lIHRoZSB2YWx1ZSBmb3IgdGhlIG9iamVjdCBuYW1lIGZyb20gdGhlIHRoZSA8c2VsZWN0PlxuICovXG5mdW5jdGlvbiBsb2FkRmllbGRPcHRpb25zKCBzeXN0ZW0sIG9iamVjdF9uYW1lICkge1xuXHR2YXIgZGF0YSA9IHtcblx0XHQnYWN0aW9uJyA6ICdnZXRfJyArIHN5c3RlbSArICdfb2JqZWN0X2ZpZWxkcycsXG5cdH1cblx0dmFyIHNlbGVjdEZpZWxkID0gJy5jb2x1bW4tJyArIHN5c3RlbSArICdfZmllbGQgc2VsZWN0Jztcblx0dmFyIGZpZWxkcyA9ICcnO1xuXHR2YXIgZmlyc3RfZmllbGQgPSAkKCBzZWxlY3RGaWVsZCArICcgb3B0aW9uJykuZmlyc3QoKS50ZXh0KCk7XG5cdGlmICggJycgIT09ICQoIHNlbGVjdEZpZWxkICkudmFsKCkgKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cdGZpZWxkcyArPSAnPG9wdGlvbiB2YWx1ZT1cIlwiPicgKyBmaXJzdF9maWVsZCArICc8L29wdGlvbj4nO1xuXHRpZiAoICd3b3JkcHJlc3MnID09PSBzeXN0ZW0gKSB7XG5cdFx0ZGF0YVsnd29yZHByZXNzX29iamVjdCddID0gb2JqZWN0X25hbWU7XG5cdH0gZWxzZSBpZiAoICdzYWxlc2ZvcmNlJyA9PT0gc3lzdGVtICkge1xuXHRcdGRhdGFbJ3NhbGVzZm9yY2Vfb2JqZWN0J10gPSBvYmplY3RfbmFtZTtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gZmllbGRzO1xuXHR9XG5cblx0JC5hamF4KHtcblx0XHR0eXBlOiAnUE9TVCcsXG5cdFx0dXJsOiBhamF4dXJsLFxuXHRcdGRhdGE6IGRhdGEsXG5cdFx0YmVmb3JlU2VuZDogZnVuY3Rpb24oKSB7XG5cdFx0XHQkKCAnLnNwaW5uZXItJyArIHN5c3RlbSApLmFkZENsYXNzKCAnaXMtYWN0aXZlJyApO1xuXHRcdH0sXG5cdFx0c3VjY2VzczogZnVuY3Rpb24oIHJlc3BvbnNlICkge1xuXHRcdFx0JC5lYWNoKCByZXNwb25zZS5kYXRhLmZpZWxkcywgZnVuY3Rpb24oIGluZGV4LCB2YWx1ZSApIHtcblx0XHRcdFx0aWYgKCAnd29yZHByZXNzJyA9PT0gc3lzdGVtICkge1xuXHRcdFx0XHRcdGZpZWxkcyArPSAnPG9wdGlvbiB2YWx1ZT1cIicgKyB2YWx1ZS5rZXkgKyAnXCI+JyArIHZhbHVlLmtleSArICc8L29wdGlvbj4nO1xuXHRcdFx0XHR9IGVsc2UgaWYgKCAnc2FsZXNmb3JjZScgPT09IHN5c3RlbSApIHtcblx0XHRcdFx0XHRmaWVsZHMgKz0gJzxvcHRpb24gdmFsdWU9XCInICsgdmFsdWUubmFtZSArICdcIj4nICsgdmFsdWUubGFiZWwgKyAnPC9vcHRpb24+Jztcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0XHQkKCBzZWxlY3RGaWVsZCApLmh0bWwoIGZpZWxkcyApO1xuXHRcdH0sXG5cdFx0Y29tcGxldGU6IGZ1bmN0aW9uICgpIHtcblx0XHRcdCQoICcuc3Bpbm5lci0nICsgc3lzdGVtICkucmVtb3ZlQ2xhc3MoICdpcy1hY3RpdmUnICk7XG5cdFx0fVxuXHR9KTtcbn1cblxuLy8gbG9hZCBhdmFpbGFibGUgb3B0aW9ucyBpZiB0aGUgd29yZHByZXNzIG9iamVjdCBjaGFuZ2VzXG4kKCBkb2N1bWVudCApLm9uKCAnY2hhbmdlJywgJ3NlbGVjdCN3b3JkcHJlc3Nfb2JqZWN0JywgZnVuY3Rpb24oKSB7XG5cdHZhciB0aW1lb3V0O1xuXHRsb2FkRmllbGRPcHRpb25zKCAnd29yZHByZXNzJywgJCggdGhpcyApLnZhbCgpICk7XG5cdGNsZWFyVGltZW91dCggdGltZW91dCApO1xuXHR0aW1lb3V0ID0gc2V0VGltZW91dCggZnVuY3Rpb24oKSB7XG5cdFx0JCggJ3RhYmxlLmZpZWxkcyB0Ym9keSB0cicgKS5mYWRlT3V0KCk7XG5cdFx0JCggJ3RhYmxlLmZpZWxkcyB0Ym9keSB0cicgKS5ub3QoICcuZmllbGRtYXAtdGVtcGxhdGUnICkucmVtb3ZlKCk7XG5cdH0sIDEwMDAgKTtcbn0pO1xuXG4vLyBsb2FkIGF2YWlsYWJsZSBvcHRpb25zIGlmIHRoZSBzYWxlc2ZvcmNlIG9iamVjdCBjaGFuZ2VzXG4kKCBkb2N1bWVudCApLm9uKCAnY2hhbmdlJywgJ3NlbGVjdCNzYWxlc2ZvcmNlX29iamVjdCcsIGZ1bmN0aW9uKCkge1xuXHR2YXIgdGltZW91dDtcblx0bG9hZEZpZWxkT3B0aW9ucyggJ3NhbGVzZm9yY2UnLCAkKCB0aGlzICkudmFsKCkgKTtcblx0Y2xlYXJUaW1lb3V0KCB0aW1lb3V0ICk7XG5cdHRpbWVvdXQgPSBzZXRUaW1lb3V0KCBmdW5jdGlvbigpIHtcblx0XHQkKCAndGFibGUuZmllbGRzIHRib2R5IHRyJyApLmZhZGVPdXQoKTtcblx0XHQkKCAndGFibGUuZmllbGRzIHRib2R5IHRyJyApLm5vdCggJy5maWVsZG1hcC10ZW1wbGF0ZScgKS5yZW1vdmUoKTtcblx0fSwgMTAwMCApO1xufSk7XG4iLCJcbi8qKlxuICogRHVwbGljYXRlcyB0aGUgZmllbGRzIGZvciBhIG5ldyByb3cgaW4gdGhlIGZpZWxkbWFwIG9wdGlvbnMgc2NyZWVuLlxuICogdGhpcyBhcHBlYXJzIG5vdCB0byB3b3JrIHdpdGggZGF0YSgpIGluc3RlYWQgb2YgYXR0cigpXG4gKi9cbiBmdW5jdGlvbiBhZGRGaWVsZE1hcHBpbmdSb3coKSB7XG5cdCQoICcjYWRkLWZpZWxkLW1hcHBpbmcnICkuY2xpY2soIGZ1bmN0aW9uKCkge1xuXHRcdHZhciBzYWxlc2ZvcmNlT2JqZWN0ID0gJCggJyNzYWxlc2ZvcmNlX29iamVjdCcgKS52YWwoKTtcblx0XHR2YXIgd29yZHByZXNzT2JqZWN0ID0gJCggJyN3b3JkcHJlc3Nfb2JqZWN0JyApLnZhbCgpO1xuXHRcdHZhciBuZXdLZXkgPSBuZXcgRGF0ZSgpLmdldFVUQ01pbGxpc2Vjb25kcygpO1xuXHRcdHZhciBsYXN0Um93ID0gJCggJ3RhYmxlLmZpZWxkcyB0Ym9keSB0cicgKS5sYXN0KCk7XG5cdFx0dmFyIG9sZEtleSA9IGxhc3RSb3cuYXR0ciggJ2RhdGEta2V5JyApO1xuXHRcdG9sZEtleSA9IG5ldyBSZWdFeHAoIG9sZEtleSwgJ2cnICk7XG5cdFx0JCggdGhpcyApLnRleHQoICdBZGQgYW5vdGhlciBmaWVsZCBtYXBwaW5nJyApO1xuXHRcdGlmICggJycgIT09IHdvcmRwcmVzc09iamVjdCAmJiAnJyAhPT0gc2FsZXNmb3JjZU9iamVjdCApIHtcblx0XHRcdGZpZWxkbWFwRmllbGRzKCBvbGRLZXksIG5ld0tleSwgbGFzdFJvdyApO1xuXHRcdFx0JCggdGhpcyApLnBhcmVudCgpLmZpbmQoICcubWlzc2luZy1vYmplY3QnICkucmVtb3ZlKCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdCQoIHRoaXMgKS5wYXJlbnQoKS5wcmVwZW5kKCAnPGRpdiBjbGFzcz1cImVycm9yIG1pc3Npbmctb2JqZWN0XCI+PHNwYW4+WW91IGhhdmUgdG8gcGljayBhIFdvcmRQcmVzcyBvYmplY3QgYW5kIGEgU2FsZXNmb3JjZSBvYmplY3QgdG8gYWRkIGZpZWxkIG1hcHBpbmcuPC9zcGFuPjwvZGl2PicgKTtcblx0XHR9XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9KTtcbn1cbi8qKlxuICogQ2xvbmVzIHRoZSBmaWVsZHNldCBtYXJrdXAgcHJvdmlkZWQgYnkgdGhlIHNlcnZlci1zaWRlIHRlbXBsYXRlIGFuZCBhcHBlbmRzIGl0IGF0IHRoZSBlbmQuXG4gKiB0aGlzIGFwcGVhcnMgbm90IHRvIHdvcmsgd2l0aCBkYXRhKCkgaW5zdGVhZCBvZiBhdHRyKClcbiAqIEBwYXJhbSBzdHJpbmcgb2xkS2V5IHRoZSBkYXRhIGtleSBhdHRyaWJ1dGUgb2YgdGhlIHNldCB0aGF0IGlzIGJlaW5nIGNsb25lZFxuICogQHBhcmFtIHN0cmluZyBuZXdLZXkgdGhlIGRhdGEga2V5IGF0dHJpYnV0ZSBmb3IgdGhlIG9uZSB3ZSdyZSBhcHBlbmRpbmdcbiAqIEBwYXJhbSBvYmplY3QgbGFzdFJvdyB0aGUgbGFzdCBzZXQgb2YgdGhlIGZpZWxkbWFwXG4gKi9cbmZ1bmN0aW9uIGZpZWxkbWFwRmllbGRzKCBvbGRLZXksIG5ld0tleSwgbGFzdFJvdyApIHtcblx0dmFyIG5leHRSb3cgPSAnJztcbiAgICBpZiAoIGpRdWVyeS5mbi5zZWxlY3QyICkge1xuICAgIFx0bmV4dFJvdyA9IGxhc3RSb3cuZmluZCggJ3NlbGVjdCcgKVxuICAgICAgICAgICAgLnNlbGVjdDIoICdkZXN0cm95JyApXG4gICAgICAgICAgICAuZW5kKClcbiAgICAgICAgICAgIC5jbG9uZSggdHJ1ZSApLnJlbW92ZUNsYXNzKCAnZmllbGRtYXAtdGVtcGxhdGUnICk7XG4gICAgfSBlbHNlIHtcbiAgICBcdG5leHRSb3cgPSBsYXN0Um93LmNsb25lKCB0cnVlICk7XG4gICAgfVxuXHQkKCBuZXh0Um93ICkuYXR0ciggJ2RhdGEta2V5JywgbmV3S2V5ICk7XG5cdCQoIG5leHRSb3cgKS5lYWNoKGZ1bmN0aW9uKCkge1xuXHRcdCQoIHRoaXMgKS5odG1sKCBmdW5jdGlvbiggaSwgaCApIHtcblx0XHRcdHJldHVybiBoLnJlcGxhY2UoIG9sZEtleSwgbmV3S2V5ICk7XG5cdFx0fSk7XG5cdH0pO1xuXHQkKCAndGFibGUuZmllbGRzIHRib2R5JyApLmFwcGVuZCggbmV4dFJvdyApO1xuXHRpZiAoIGpRdWVyeS5mbi5zZWxlY3QyICkge1xuXHRcdGxhc3RSb3cuZmluZCggJ3NlbGVjdCcgKS5zZWxlY3QyKCk7XG5cdFx0bmV4dFJvdy5maW5kKCAnc2VsZWN0JyApLnNlbGVjdDIoKTtcblx0fVxufVxuXG4vKipcbiAqIEFzIHRoZSBEcnVwYWwgcGx1Z2luIGRvZXMsIHdlIG9ubHkgYWxsb3cgb25lIGZpZWxkIHRvIGJlIGEgcHJlbWF0Y2hcbiAqL1xuJCggZG9jdW1lbnQgKS5vbiggJ2NsaWNrJywgJy5jb2x1bW4taXNfcHJlbWF0Y2ggaW5wdXQnLCBmdW5jdGlvbigpIHtcblx0JCggJy5jb2x1bW4taXNfcHJlbWF0Y2ggaW5wdXQnICkubm90KCB0aGlzICkucHJvcCggJ2NoZWNrZWQnLCBmYWxzZSApO1xufSk7XG5cbi8qKlxuICogQXMgdGhlIERydXBhbCBwbHVnaW4gZG9lcywgd2Ugb25seSBhbGxvdyBvbmUgZmllbGQgdG8gYmUgYSBrZXlcbiAqL1xuJCggZG9jdW1lbnQgKS5vbiggJ2NsaWNrJywgJy5jb2x1bW4taXNfa2V5IGlucHV0JywgZnVuY3Rpb24oKSB7XG5cdCQoICcuY29sdW1uLWlzX2tleSBpbnB1dCcgKS5ub3QoIHRoaXMgKS5wcm9wKCAnY2hlY2tlZCcsIGZhbHNlICk7XG59KTtcbiIsIi8qKlxuICogSGFuZGxlIG1hbnVhbCBwdXNoIGFuZCBwdWxsIG9mIG9iamVjdHNcbiAqL1xuZnVuY3Rpb24gcHVzaEFuZFB1bGxPYmplY3RzKCkge1xuXHQkKCAnLnNhbGVzZm9yY2VfdXNlcl9hamF4X21lc3NhZ2UnICkuaGlkZSgpO1xuXHRpZiAoIDAgPCAkKCAnI3dvcmRwcmVzc19vYmplY3RfYWpheCcgKS5sZW5ndGggKSB7XG5cdFx0JCggJy5wdXNoX3RvX3NhbGVzZm9yY2VfYnV0dG9uJyApLm9uKCAnY2xpY2snLCBmdW5jdGlvbigpIHtcblx0XHRcdHZhciB3b3JkcHJlc3NPYmplY3QgPSAkKCAnI3dvcmRwcmVzc19vYmplY3RfYWpheCcgKS52YWwoKTtcblx0XHRcdHZhciB3b3JkcHJlc3NJZCA9ICQoICcjd29yZHByZXNzX2lkX2FqYXgnICkudmFsKCk7XG5cdFx0XHR2YXIgc2FsZXNmb3JjZUlkID0gJCggJyNzYWxlc2ZvcmNlX2lkX2FqYXgnICkudmFsKCk7XG5cdFx0XHR2YXIgZGF0YSA9IHtcblx0XHRcdFx0J2FjdGlvbicgOiAncHVzaF90b19zYWxlc2ZvcmNlJyxcblx0XHRcdFx0J3dvcmRwcmVzc19vYmplY3QnIDogd29yZHByZXNzT2JqZWN0LFxuXHRcdFx0XHQnd29yZHByZXNzX2lkJyA6IHdvcmRwcmVzc0lkLFxuXHRcdFx0XHQnc2FsZXNmb3JjZV9pZCcgOiBzYWxlc2ZvcmNlSWRcblx0XHRcdH1cblx0XHRcdCQucG9zdCggYWpheHVybCwgZGF0YSwgZnVuY3Rpb24oIHJlc3BvbnNlICkge1xuXHRcdFx0XHRpZiAoIHRydWUgPT09IHJlc3BvbnNlLnN1Y2Nlc3MgKSB7XG5cdFx0XHRcdFx0dXBkYXRlU2FsZXNmb3JjZVVzZXJTdW1tYXJ5KCk7XG5cdFx0XHRcdFx0JCggJy5zYWxlc2ZvcmNlX3VzZXJfYWpheF9tZXNzYWdlJyApLndpZHRoKCAkKCAnLm1hcHBlZC1zYWxlc2ZvcmNlLXVzZXInICkud2lkdGgoKSAtIDI3ICk7XG5cdFx0XHRcdFx0JCggJy5zYWxlc2ZvcmNlX3VzZXJfYWpheF9tZXNzYWdlJyApLmh0bWwoICc8cD5UaGlzIG9iamVjdCBoYXMgYmVlbiBwdXNoZWQgdG8gU2FsZXNmb3JjZS48L3A+JyApLmZhZGVJbigpLmRlbGF5KCA0MDAwICkuZmFkZU91dCgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9KTtcblx0fVxuXHQkKCAnLnB1bGxfZnJvbV9zYWxlc2ZvcmNlX2J1dHRvbicgKS5vbiggJ2NsaWNrJywgZnVuY3Rpb24oKSB7XG5cdFx0dmFyIHNhbGVzZm9yY2VJZCA9ICQoICcjc2FsZXNmb3JjZV9pZF9hamF4JyApLnZhbCgpO1xuXHRcdHZhciB3b3JkcHJlc3NPYmplY3QgPSAkKCAnI3dvcmRwcmVzc19vYmplY3RfYWpheCcgKS52YWwoKTtcblx0XHR2YXIgZGF0YSA9IHtcblx0XHRcdCdhY3Rpb24nIDogJ3B1bGxfZnJvbV9zYWxlc2ZvcmNlJyxcblx0XHRcdCdzYWxlc2ZvcmNlX2lkJyA6IHNhbGVzZm9yY2VJZCxcblx0XHRcdCd3b3JkcHJlc3Nfb2JqZWN0JyA6IHdvcmRwcmVzc09iamVjdFxuXHRcdH1cblx0XHQkLnBvc3QoIGFqYXh1cmwsIGRhdGEsIGZ1bmN0aW9uKCByZXNwb25zZSApIHtcblx0XHRcdGlmICggdHJ1ZSA9PT0gcmVzcG9uc2Uuc3VjY2VzcyApIHtcblx0XHRcdFx0dXBkYXRlU2FsZXNmb3JjZVVzZXJTdW1tYXJ5KCk7XG5cdFx0XHRcdCQoICcuc2FsZXNmb3JjZV91c2VyX2FqYXhfbWVzc2FnZScgKS53aWR0aCggJCggJy5tYXBwZWQtc2FsZXNmb3JjZS11c2VyJyApLndpZHRoKCkgLSAyNyApO1xuXHRcdFx0XHQkKCAnLnNhbGVzZm9yY2VfdXNlcl9hamF4X21lc3NhZ2UnICkuaHRtbCggJzxwPlRoaXMgb2JqZWN0IGhhcyBiZWVuIHB1bGxlZCBmcm9tIFNhbGVzZm9yY2UuPC9wPicgKS5mYWRlSW4oKS5kZWxheSggNDAwMCApLmZhZGVPdXQoKTtcblx0XHRcdH1cblx0XHR9KTtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH0pO1xufVxuLyoqXG4gKiBVcGRhdGVzIHRoZSB1c2VyIHByb2ZpbGUgc3VtbWFyeSBvZiBTYWxlc2ZvcmNlIGluZm8uXG4gKi9cbmZ1bmN0aW9uIHVwZGF0ZVNhbGVzZm9yY2VVc2VyU3VtbWFyeSgpIHtcblx0dmFyIG1hcHBpbmdJZCA9ICQoICcjbWFwcGluZ19pZF9hamF4JyApLnZhbCgpO1xuXHR2YXIgZGF0YSA9IHtcblx0XHQnYWN0aW9uJyA6ICdyZWZyZXNoX21hcHBlZF9kYXRhJyxcblx0XHQnbWFwcGluZ19pZCcgOiBtYXBwaW5nSWRcblx0fVxuXHQkLnBvc3QoIGFqYXh1cmwsIGRhdGEsIGZ1bmN0aW9uKCByZXNwb25zZSApIHtcblx0XHRpZiAoIHRydWUgPT09IHJlc3BvbnNlLnN1Y2Nlc3MgKSB7XG5cdFx0XHQkKCAndGQubGFzdF9zeW5jX21lc3NhZ2UnICkudGV4dCggcmVzcG9uc2UuZGF0YS5sYXN0X3N5bmNfbWVzc2FnZSApO1xuXHRcdFx0JCggJ3RkLmxhc3Rfc3luY19hY3Rpb24nICkudGV4dCggcmVzcG9uc2UuZGF0YS5sYXN0X3N5bmNfYWN0aW9uICk7XG5cdFx0XHQkKCAndGQubGFzdF9zeW5jX3N0YXR1cycgKS50ZXh0KCByZXNwb25zZS5kYXRhLmxhc3Rfc3luY19zdGF0dXMgKTtcblx0XHRcdCQoICd0ZC5sYXN0X3N5bmMnICkudGV4dCggcmVzcG9uc2UuZGF0YS5sYXN0X3N5bmMgKTtcblx0XHRcdGlmICggJzEnID09PSByZXNwb25zZS5kYXRhLmxhc3Rfc3luY19zdGF0dXMgKSB7XG5cdFx0XHRcdCQoICd0ZC5sYXN0X3N5bmNfc3RhdHVzJyApLnRleHQoICdzdWNjZXNzJyApO1xuXHRcdFx0fVxuXHRcdH1cblx0fSk7XG59XG4vKipcbiAqIENsZWFyIHRoZSBwbHVnaW4gY2FjaGUgdmlhIEFqYXggcmVxdWVzdC5cbiAqL1xuZnVuY3Rpb24gY2xlYXJTZndwQ2FjaGVMaW5rKCkge1xuXHQkKCAnI2NsZWFyLXNmd3AtY2FjaGUnICkuY2xpY2soIGZ1bmN0aW9uKCkge1xuXHRcdHZhciBkYXRhID0ge1xuXHRcdFx0J2FjdGlvbicgOiAnY2xlYXJfc2Z3cF9jYWNoZSdcblx0XHR9XG5cdFx0dmFyIHRoYXQgPSAkKCB0aGlzICk7XG5cdFx0JC5wb3N0KCBhamF4dXJsLCBkYXRhLCBmdW5jdGlvbiggcmVzcG9uc2UgKSB7XG5cdFx0XHRpZiAoIHRydWUgPT09IHJlc3BvbnNlLnN1Y2Nlc3MgJiYgdHJ1ZSA9PT0gcmVzcG9uc2UuZGF0YS5zdWNjZXNzICkge1xuXHRcdFx0XHR0aGF0LnBhcmVudCgpLmh0bWwoIHJlc3BvbnNlLmRhdGEubWVzc2FnZSApLmZhZGVJbigpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdHJldHVybiBmYWxzZTtcblx0fSk7XG59XG4iLCIvKipcbiAqIERvbid0IHNob3cgdGhlIFdTREwgZmlsZSBmaWVsZCB1bmxlc3MgU09BUCBpcyBlbmFibGVkXG4gKi9cbmZ1bmN0aW9uIHRvZ2dsZVNvYXBGaWVsZHMoKSB7XG5cdGlmICggMCA8ICQoICcub2JqZWN0LXN5bmMtZm9yLXNhbGVzZm9yY2UtZW5hYmxlLXNvYXAnICkubGVuZ3RoICkge1xuXHRcdGlmICggJCggJy5vYmplY3Qtc3luYy1mb3Itc2FsZXNmb3JjZS1lbmFibGUtc29hcCBpbnB1dCcgKS5pcyggJzpjaGVja2VkJyApICkge1xuXHRcdFx0JCggJy5vYmplY3Qtc3luYy1mb3Itc2FsZXNmb3JjZS1zb2FwLXdzZGwtcGF0aCcgKS5zaG93KCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdCQoICcub2JqZWN0LXN5bmMtZm9yLXNhbGVzZm9yY2Utc29hcC13c2RsLXBhdGgnICkuaGlkZSgpO1xuXHRcdH1cblx0fVxufVxuXG4vLyBEb24ndCBzaG93IHRoZSBXU0RMIGZpbGUgZmllbGQgdW5sZXNzIFNPQVAgaXMgZW5hYmxlZFxuJCggZG9jdW1lbnQgKS5vbiggJ2NoYW5nZScsICcub2JqZWN0LXN5bmMtZm9yLXNhbGVzZm9yY2UtZW5hYmxlLXNvYXAgaW5wdXQnLCBmdW5jdGlvbigpIHtcblx0dG9nZ2xlU29hcEZpZWxkcygpO1xufSk7IiwiLyoqXG4gKiBXaGVuIHRoZSBwbHVnaW4gbG9hZHMsIGluaXRpYWxpemUgb3IgZW5hYmxlIHRoaW5nczpcbiAqIFNlbGVjdDIgb24gc2VsZWN0IGZpZWxkc1xuICogQ2xlYXIgZmllbGRzIHdoZW4gdGhlIHRhcmdldGVkIFdvcmRQcmVzcyBvciBTYWxlc2ZvcmNlIG9iamVjdCB0eXBlIGNoYW5nZXNcbiAqIE1hbmFnZSB0aGUgZGlzcGxheSBmb3IgU2FsZXNmb3JjZSBvYmplY3QgZmllbGRzIGJhc2VkIG9uIEFQSSByZXBvbnNlXG4gKiBNYW51YWwgcHVzaCBhbmQgcHVsbFxuICogQ2xlYXJpbmcgdGhlIGNhY2hlXG4gKi9cbiQoIGRvY3VtZW50ICkucmVhZHkoIGZ1bmN0aW9uKCkge1xuXG5cdC8vIERvbid0IHNob3cgdGhlIFdTREwgZmlsZSBmaWVsZCB1bmxlc3MgU09BUCBpcyBlbmFibGVkXG5cdHRvZ2dsZVNvYXBGaWVsZHMoKTtcblxuXHQvLyBpZiB0aGVyZSBpcyBhbHJlYWR5IGEgd3Agb3Igc2Ygb2JqZWN0LCBtYWtlIHN1cmUgaXQgaGFzIHRoZSByaWdodCBmaWVsZHMgd2hlbiB0aGUgcGFnZSBsb2Fkc1xuXHRsb2FkRmllbGRPcHRpb25zKCAnd29yZHByZXNzJywgJCggJ3NlbGVjdCN3b3JkcHJlc3Nfb2JqZWN0JyApLnZhbCgpICk7XG5cdGxvYWRGaWVsZE9wdGlvbnMoICdzYWxlc2ZvcmNlJywgJCggJ3NlbGVjdCNzYWxlc2ZvcmNlX29iamVjdCcgKS52YWwoKSApO1xuXG5cdC8vIHNldHVwIHRoZSBzZWxlY3QyIGZpZWxkcyBpZiB0aGUgbGlicmFyeSBpcyBwcmVzZW50XG5cdGlmICggalF1ZXJ5LmZuLnNlbGVjdDIgKSB7XG5cdFx0JCggJ3NlbGVjdCN3b3JkcHJlc3Nfb2JqZWN0JyApLnNlbGVjdDIoKTtcblx0XHQkKCAnc2VsZWN0I3NhbGVzZm9yY2Vfb2JqZWN0JyApLnNlbGVjdDIoKTtcblx0XHQkKCAnc2VsZWN0I3NhbGVzZm9yY2VfcmVjb3JkX3R5cGVfZGVmYXVsdCcgKS5zZWxlY3QyKCk7XG5cdFx0JCggJ3NlbGVjdCNwdWxsX3RyaWdnZXJfZmllbGQnICkuc2VsZWN0MigpO1xuXHRcdCQoICcuY29sdW1uLXdvcmRwcmVzc19maWVsZCBzZWxlY3QnICkuc2VsZWN0MigpO1xuXHRcdCQoICcuY29sdW1uLXNhbGVzZm9yY2VfZmllbGQgc2VsZWN0JyApLnNlbGVjdDIoKTtcblx0fVxuXG5cdC8vIGdldCB0aGUgYXZhaWxhYmxlIFNhbGVzZm9yY2Ugb2JqZWN0IGNob2ljZXNcblx0c2FsZXNmb3JjZU9iamVjdEZpZWxkcygpO1xuXG5cdC8vIER1cGxpY2F0ZSB0aGUgZmllbGRzIGZvciBhIG5ldyByb3cgaW4gdGhlIGZpZWxkbWFwIG9wdGlvbnMgc2NyZWVuLlxuXHRhZGRGaWVsZE1hcHBpbmdSb3coKTtcblxuXHQvLyBIYW5kbGUgbWFudWFsIHB1c2ggYW5kIHB1bGwgb2Ygb2JqZWN0c1xuXHRwdXNoQW5kUHVsbE9iamVjdHMoKTtcblxuXHQvLyBDbGVhciB0aGUgcGx1Z2luIGNhY2hlIHZpYSBBamF4IHJlcXVlc3QuXG5cdGNsZWFyU2Z3cENhY2hlTGluaygpO1xufSk7XG4iXX0= +//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIjAxLXNhbGVzZm9yY2Utb2JqZWN0LmpzIiwiMDItbG9hZC1maWVsZC1vcHRpb25zLmpzIiwiMDMtZmllbGRtYXAtcm93cy5qcyIsIjA0LWludGVyZmFjZS1hamF4LWV2ZW50cy5qcyIsIjA1LXNvYXAuanMiXSwibmFtZXMiOlsic2FsZXNmb3JjZU9iamVjdEZpZWxkcyIsImRlbGF5IiwidGltZXIiLCJjYWxsYmFjayIsIm1zIiwiY2xlYXJUaW1lb3V0Iiwic2V0VGltZW91dCIsIiQiLCJsZW5ndGgiLCJoaWRlIiwib24iLCJ0aGF0IiwiZGVsYXlUaW1lIiwiZGF0YSIsInZhbHVlIiwicG9zdCIsImFqYXh1cmwiLCJyZXNwb25zZSIsInJlY29yZFR5cGVzQWxsb3dlZE1hcmt1cCIsInJlY29yZFR5cGVEZWZhdWx0TWFya3VwIiwiZGF0ZU1hcmt1cCIsInJlY29yZFR5cGVJbmZvcyIsImVhY2giLCJpbmRleCIsImh0bWwiLCJmaWVsZHMiLCJuYW1lIiwibGFiZWwiLCJzaG93IiwialF1ZXJ5IiwiZm4iLCJzZWxlY3QyIiwiZG9jdW1lbnQiLCJyZWFkeSIsImxvYWRGaWVsZE9wdGlvbnMiLCJzeXN0ZW0iLCJvYmplY3RfbmFtZSIsInNlbGVjdEZpZWxkIiwiZmlyc3RGaWVsZCIsImZpcnN0IiwidGV4dCIsInZhbCIsImFqYXgiLCJ0eXBlIiwidXJsIiwiYmVmb3JlU2VuZCIsImFkZENsYXNzIiwic3VjY2VzcyIsImtleSIsImNvbXBsZXRlIiwicmVtb3ZlQ2xhc3MiLCJ0aW1lb3V0IiwiZmFkZU91dCIsIm5vdCIsInJlbW92ZSIsImFkZEZpZWxkTWFwcGluZ1JvdyIsImNsaWNrIiwic2FsZXNmb3JjZU9iamVjdCIsIndvcmRwcmVzc09iamVjdCIsIm5ld0tleSIsIkRhdGUiLCJnZXRVVENNaWxsaXNlY29uZHMiLCJsYXN0Um93IiwibGFzdCIsIm9sZEtleSIsImF0dHIiLCJSZWdFeHAiLCJmaWVsZG1hcEZpZWxkcyIsInBhcmVudCIsImZpbmQiLCJwcmVwZW5kIiwibmV4dFJvdyIsImVuZCIsImNsb25lIiwiaSIsImgiLCJyZXBsYWNlIiwiYXBwZW5kIiwicHJvcCIsInB1c2hBbmRQdWxsT2JqZWN0cyIsIndvcmRwcmVzc0lkIiwic2FsZXNmb3JjZUlkIiwidXBkYXRlU2FsZXNmb3JjZVVzZXJTdW1tYXJ5Iiwid2lkdGgiLCJmYWRlSW4iLCJtYXBwaW5nSWQiLCJsYXN0X3N5bmNfbWVzc2FnZSIsImxhc3Rfc3luY19hY3Rpb24iLCJsYXN0X3N5bmNfc3RhdHVzIiwibGFzdF9zeW5jIiwiY2xlYXJTZndwQ2FjaGVMaW5rIiwibWVzc2FnZSIsInRvZ2dsZVNvYXBGaWVsZHMiLCJpcyJdLCJtYXBwaW5ncyI6Ijs7QUFBQTs7OztBQUlBLFNBQVNBLHNCQUFULEdBQWtDO0FBRWpDLE1BQUlDLEtBQUssR0FBSyxZQUFXO0FBQ3hCLFFBQUlDLEtBQUssR0FBRyxDQUFaO0FBQ0EsV0FBTyxVQUFVQyxRQUFWLEVBQW9CQyxFQUFwQixFQUF5QjtBQUMvQkMsTUFBQUEsWUFBWSxDQUFHSCxLQUFILENBQVo7QUFDQUEsTUFBQUEsS0FBSyxHQUFHSSxVQUFVLENBQUVILFFBQUYsRUFBWUMsRUFBWixDQUFsQjtBQUNBLEtBSEQ7QUFJQSxHQU5hLEVBQWQ7O0FBUUEsTUFBSyxNQUFNRyxDQUFDLENBQUUsc0NBQUYsQ0FBRCxDQUE0Q0MsTUFBdkQsRUFBZ0U7QUFDL0RELElBQUFBLENBQUMsQ0FBRSxrQ0FBRixDQUFELENBQXdDRSxJQUF4QztBQUNBOztBQUVELE1BQUssTUFBTUYsQ0FBQyxDQUFFLHFDQUFGLENBQUQsQ0FBMkNDLE1BQXRELEVBQStEO0FBQzlERCxJQUFBQSxDQUFDLENBQUUsaUNBQUYsQ0FBRCxDQUF1Q0UsSUFBdkM7QUFDQTs7QUFDRCxNQUFLLE1BQU1GLENBQUMsQ0FBRSx5QkFBRixDQUFELENBQStCQyxNQUExQyxFQUFtRDtBQUNsREQsSUFBQUEsQ0FBQyxDQUFFLHFCQUFGLENBQUQsQ0FBMkJFLElBQTNCO0FBQ0E7O0FBRURGLEVBQUFBLENBQUMsQ0FBRSxv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WUFBVztBQUMvQjtBQUNBMkQsRUFBQUEsZ0JBQWdCO0FBQ2hCLENBSEQiLCJmaWxlIjoib2JqZWN0LXN5bmMtZm9yLXNhbGVzZm9yY2UtYWRtaW4uanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEdlbmVyYXRlcyB0aGUgU2FsZXNmb3JjZSBvYmplY3QgZmllbGRzIGJhc2VkIG9uIHRoZSBkcm9wZG93biBhY3Rpdml0eSBhbmQgQVBJIHJlc3VsdHMuXG4gKiBUaGlzIGFsc28gZ2VuZXJhdGVzIG90aGVyIHF1ZXJ5IGZpZWxkcyB0aGF0IGFyZSBvYmplY3Qtc3BlY2lmaWMsIGxpa2UgZGF0ZSBmaWVsZHMsIHJlY29yZCB0eXBlcyBhbGxvd2VkLCBldGMuXG4gKi9cbmZ1bmN0aW9uIHNhbGVzZm9yY2VPYmplY3RGaWVsZHMoKSB7XG5cblx0dmFyIGRlbGF5ID0gKCBmdW5jdGlvbigpIHtcblx0XHR2YXIgdGltZXIgPSAwO1xuXHRcdHJldHVybiBmdW5jdGlvbiggY2FsbGJhY2ssIG1zICkge1xuXHRcdFx0Y2xlYXJUaW1lb3V0ICggdGltZXIgKTtcblx0XHRcdHRpbWVyID0gc2V0VGltZW91dCggY2FsbGJhY2ssIG1zICk7XG5cdFx0fTtcblx0fSgpICk7XG5cblx0aWYgKCAwID09PSAkKCAnLnNhbGVzZm9yY2VfcmVjb3JkX3R5cGVzX2FsbG93ZWQgPiAqJyApLmxlbmd0aCApIHtcblx0XHQkKCAnLnNhbGVzZm9yY2VfcmVjb3JkX3R5cGVzX2FsbG93ZWQnICkuaGlkZSgpO1xuXHR9XG5cblx0aWYgKCAwID09PSAkKCAnLnNhbGVzZm9yY2VfcmVjb3JkX3R5cGVfZGVmYXVsdCA+IConICkubGVuZ3RoICkge1xuXHRcdCQoICcuc2FsZXNmb3JjZV9yZWNvcmRfdHlwZV9kZWZhdWx0JyApLmhpZGUoKTtcblx0fVxuXHRpZiAoIDAgPT09ICQoICcucHVsbF90cmlnZ2VyX2ZpZWxkID4gKicgKS5sZW5ndGggKSB7XG5cdFx0JCggJy5wdWxsX3RyaWdnZXJfZmllbGQnICkuaGlkZSgpO1xuXHR9XG5cblx0JCggJyNzYWxlc2ZvcmNlX29iamVjdCcgKS5vbiggJ2NoYW5nZScsIGZ1bmN0aW9uKCkge1xuXHRcdHZhciB0aGF0ID0gdGhpcztcblx0XHR2YXIgZGVsYXlUaW1lID0gMTAwMDtcblx0XHRkZWxheSggZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgZGF0YSA9IHtcblx0XHRcdFx0J2FjdGlvbicgOiAnZ2V0X3NhbGVzZm9yY2Vfb2JqZWN0X2Rlc2NyaXB0aW9uJyxcblx0XHRcdFx0J2luY2x1ZGUnIDogWyAnZmllbGRzJywgJ3JlY29yZFR5cGVJbmZvcycgXSxcblx0XHRcdFx0J2ZpZWxkX3R5cGUnIDogJ2RhdGV0aW1lJyxcblx0XHRcdFx0J3NhbGVzZm9yY2Vfb2JqZWN0JyA6IHRoYXQudmFsdWVcblx0XHRcdH1cblx0XHRcdCQucG9zdCggYWpheHVybCwgZGF0YSwgZnVuY3Rpb24oIHJlc3BvbnNlICkge1xuXG5cdFx0XHRcdHZhciByZWNvcmRUeXBlc0FsbG93ZWRNYXJrdXAgPSAnJywgcmVjb3JkVHlwZURlZmF1bHRNYXJrdXAgPSAnJywgZGF0ZU1hcmt1cCA9ICcnO1xuXG5cdFx0XHRcdGlmICggMCA8ICQoIHJlc3BvbnNlLmRhdGEucmVjb3JkVHlwZUluZm9zICkubGVuZ3RoICkge1xuXHRcdFx0XHRcdHJlY29yZFR5cGVzQWxsb3dlZE1hcmt1cCArPSAnPGxhYmVsIGZvcj1cInNhbGVzZm9yY2VfcmVjb3JkX3R5cGVzX2FsbG93ZWRcIj5BbGxvd2VkIFJlY29yZCBUeXBlczo8L2xhYmVsPjxkaXYgY2xhc3M9XCJjaGVja2JveGVzXCI+Jztcblx0XHRcdFx0XHQkLmVhY2goIHJlc3BvbnNlLmRhdGEucmVjb3JkVHlwZUluZm9zLCBmdW5jdGlvbiggaW5kZXgsIHZhbHVlICkge1xuXHRcdFx0XHRcdFx0cmVjb3JkVHlwZXNBbGxvd2VkTWFya3VwICs9ICc8bGFiZWw+PGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGNsYXNzPVwiZm9ybS1jaGVja2JveFwiIHZhbHVlPVwiJyArIGluZGV4ICsgJ1wiIG5hbWU9XCJzYWxlc2ZvcmNlX3JlY29yZF90eXBlc19hbGxvd2VkWycgKyBpbmRleCArICddXCIgaWQ9XCJzYWxlc2ZvcmNlX3JlY29yZF90eXBlc19hbGxvd2VkLScgKyBpbmRleCArICdcIj4gJyArIHZhbHVlICsgJzwvbGFiZWw+Jztcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRyZWNvcmRUeXBlc0FsbG93ZWRNYXJrdXAgKz0gJzwvZGl2Pic7XG5cblxuXHRcdFx0XHRcdHJlY29yZFR5cGVEZWZhdWx0TWFya3VwICs9ICc8bGFiZWwgZm9yPVwic2FsZXNmb3JjZV9yZWNvcmRfdHlwZV9kZWZhdWx0XCI+RGVmYXVsdCBSZWNvcmQgVHlwZTo8L2xhYmVsPic7XG5cdFx0XHRcdFx0cmVjb3JkVHlwZURlZmF1bHRNYXJrdXAgKz0gJzxzZWxlY3QgbmFtZT1cInNhbGVzZm9yY2VfcmVjb3JkX3R5cGVfZGVmYXVsdFwiIGlkPVwic2FsZXNmb3JjZV9yZWNvcmRfdHlwZV9kZWZhdWx0XCI+PG9wdGlvbiB2YWx1ZT1cIlwiPi0gU2VsZWN0IHJlY29yZCB0eXBlIC08L29wdGlvbj4nO1xuXHRcdFx0XHRcdCQuZWFjaCggcmVzcG9uc2UuZGF0YS5yZWNvcmRUeXBlSW5mb3MsIGZ1bmN0aW9uKCBpbmRleCwgdmFsdWUgKSB7XG5cdFx0XHRcdFx0XHRyZWNvcmRUeXBlRGVmYXVsdE1hcmt1cCArPSAnPG9wdGlvbiB2YWx1ZT1cIicgKyBpbmRleCArICdcIj4nICsgdmFsdWUgKyAnPC9vcHRpb24+Jztcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdCQoICcuc2FsZXNmb3JjZV9yZWNvcmRfdHlwZXNfYWxsb3dlZCcgKS5odG1sKCByZWNvcmRUeXBlc0FsbG93ZWRNYXJrdXAgKTtcblx0XHRcdFx0JCggJy5zYWxlc2ZvcmNlX3JlY29yZF90eXBlX2RlZmF1bHQnICkuaHRtbCggcmVjb3JkVHlwZURlZmF1bHRNYXJrdXAgKTtcblxuXHRcdFx0XHRpZiAoIDAgPCAkKCByZXNwb25zZS5kYXRhLmZpZWxkcyApLmxlbmd0aCApIHtcblx0XHRcdFx0XHRkYXRlTWFya3VwICs9ICc8bGFiZWwgZm9yPVwicHVsbF90cmlnZ2VyX2ZpZWxkXCI+RGF0ZSBmaWVsZCB0byB0cmlnZ2VyIHB1bGw6PC9sYWJlbD4nO1xuXHRcdFx0XHRcdGRhdGVNYXJrdXAgKz0gJzxzZWxlY3QgbmFtZT1cInB1bGxfdHJpZ2dlcl9maWVsZFwiIGlkPVwicHVsbF90cmlnZ2VyX2ZpZWxkXCI+PG9wdGlvbiB2YWx1ZT1cIlwiPi0gU2VsZWN0IGRhdGUgZmllbGQgLTwvb3B0aW9uPidcblx0XHRcdFx0XHQkLmVhY2goIHJlc3BvbnNlLmRhdGEuZmllbGRzLCBmdW5jdGlvbiggaW5kZXgsIHZhbHVlICkge1xuXHRcdFx0XHRcdFx0ZGF0ZU1hcmt1cCArPSAnPG9wdGlvbiB2YWx1ZT1cIicgKyB2YWx1ZS5uYW1lICsgJ1wiPicgKyB2YWx1ZS5sYWJlbCArICc8L29wdGlvbj4nO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdGRhdGVNYXJrdXAgKz0gJzwvc2VsZWN0Pic7XG5cdFx0XHRcdFx0ZGF0ZU1hcmt1cCArPSAnPHAgY2xhc3M9XCJkZXNjcmlwdGlvblwiPlRoZXNlIGFyZSBkYXRlIGZpZWxkcyB0aGF0IGNhbiBjYXVzZSBXb3JkUHJlc3MgdG8gcHVsbCBhbiB1cGRhdGUgZnJvbSBTYWxlc2ZvcmNlLCBhY2NvcmRpbmcgdG8gdGhlIDxjb2RlPnNhbGVzZm9yY2VfcHVsbDwvY29kZT4gY2xhc3MuPC9wPidcblx0XHRcdFx0fVxuXG5cdFx0XHRcdCQoICcucHVsbF90cmlnZ2VyX2ZpZWxkJyApLmh0bWwoIGRhdGVNYXJrdXAgKTtcblxuXHRcdFx0XHRpZiAoICcnICE9PSByZWNvcmRUeXBlc0FsbG93ZWRNYXJrdXAgKSB7XG5cdFx0XHRcdFx0JCggJy5zYWxlc2ZvcmNlX3JlY29yZF90eXBlc19hbGxvd2VkJyApLnNob3coKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHQkKCAnLnNhbGVzZm9yY2VfcmVjb3JkX3R5cGVzX2FsbG93ZWQnICkuaGlkZSgpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmICggJycgIT09IHJlY29yZFR5cGVEZWZhdWx0TWFya3VwICkge1xuXHRcdFx0XHRcdCQoICcuc2FsZXNmb3JjZV9yZWNvcmRfdHlwZV9kZWZhdWx0JyApLnNob3coKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHQkKCAnLnNhbGVzZm9yY2VfcmVjb3JkX3R5cGVfZGVmYXVsdCcgKS5oaWRlKCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoICcnICE9PSBkYXRlTWFya3VwICkge1xuXHRcdFx0XHRcdCQoICcucHVsbF90cmlnZ2VyX2ZpZWxkJyApLnNob3coKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHQkKCAnLnB1bGxfdHJpZ2dlcl9maWVsZCcgKS5oaWRlKCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoIGpRdWVyeS5mbi5zZWxlY3QyICkge1xuXHRcdFx0XHRcdCQoICdzZWxlY3Qjc2FsZXNmb3JjZV9yZWNvcmRfdHlwZV9kZWZhdWx0JyApLnNlbGVjdDIoKTtcblx0XHRcdFx0XHQkKCAnc2VsZWN0I3B1bGxfdHJpZ2dlcl9maWVsZCcgKS5zZWxlY3QyKCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0fSk7XG5cdFx0fSwgZGVsYXlUaW1lICk7XG5cdH0pO1xufVxuXG4kKCBkb2N1bWVudCApLnJlYWR5KCBmdW5jdGlvbigpIHtcblx0Ly8gZ2V0IHRoZSBhdmFpbGFibGUgU2FsZXNmb3JjZSBvYmplY3QgY2hvaWNlc1xuXHRzYWxlc2ZvcmNlT2JqZWN0RmllbGRzKCk7XG59KTtcbiIsIi8qKlxuICogR2V0cyB0aGUgV29yZFByZXNzIGFuZCBTYWxlc2ZvcmNlIGZpZWxkIHJlc3VsdHMgdmlhIGFuIEFqYXggY2FsbFxuICogQHBhcmFtIHN0cmluZyBzeXN0ZW0gd2hldGhlciB3ZSB3YW50IFdvcmRQcmVzcyBvciBTYWxlc2ZvcmNlIGRhdGFcbiAqIEBwYXJhbSBzdHJpbmcgb2JqZWN0X25hbWUgdGhlIHZhbHVlIGZvciB0aGUgb2JqZWN0IG5hbWUgZnJvbSB0aGUgdGhlIDxzZWxlY3Q+XG4gKi9cbmZ1bmN0aW9uIGxvYWRGaWVsZE9wdGlvbnMoIHN5c3RlbSwgb2JqZWN0X25hbWUgKSB7XG5cdHZhciBkYXRhID0ge1xuXHRcdCdhY3Rpb24nIDogJ2dldF8nICsgc3lzdGVtICsgJ19vYmplY3RfZmllbGRzJyxcblx0fTtcblx0dmFyIHNlbGVjdEZpZWxkID0gJy5jb2x1bW4tJyArIHN5c3RlbSArICdfZmllbGQgc2VsZWN0Jztcblx0dmFyIGZpZWxkcyA9ICcnO1xuXHR2YXIgZmlyc3RGaWVsZCA9ICQoIHNlbGVjdEZpZWxkICsgJyBvcHRpb24nICkuZmlyc3QoKS50ZXh0KCk7XG5cdGlmICggJycgIT09ICQoIHNlbGVjdEZpZWxkICkudmFsKCkgKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cdGZpZWxkcyArPSAnPG9wdGlvbiB2YWx1ZT1cIlwiPicgKyBmaXJzdEZpZWxkICsgJzwvb3B0aW9uPic7XG5cdGlmICggJ3dvcmRwcmVzcycgPT09IHN5c3RlbSApIHtcblx0XHRkYXRhWyd3b3JkcHJlc3Nfb2JqZWN0J10gPSBvYmplY3RfbmFtZTtcblx0fSBlbHNlIGlmICggJ3NhbGVzZm9yY2UnID09PSBzeXN0ZW0gKSB7XG5cdFx0ZGF0YVsnc2FsZXNmb3JjZV9vYmplY3QnXSA9IG9iamVjdF9uYW1lO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBmaWVsZHM7XG5cdH1cblxuXHQkLmFqYXgoe1xuXHRcdHR5cGU6ICdQT1NUJyxcblx0XHR1cmw6IGFqYXh1cmwsXG5cdFx0ZGF0YTogZGF0YSxcblx0XHRiZWZvcmVTZW5kOiBmdW5jdGlvbigpIHtcblx0XHRcdCQoICcuc3Bpbm5lci0nICsgc3lzdGVtICkuYWRkQ2xhc3MoICdpcy1hY3RpdmUnICk7XG5cdFx0fSxcblx0XHRzdWNjZXNzOiBmdW5jdGlvbiggcmVzcG9uc2UgKSB7XG5cdFx0XHQkLmVhY2goIHJlc3BvbnNlLmRhdGEuZmllbGRzLCBmdW5jdGlvbiggaW5kZXgsIHZhbHVlICkge1xuXHRcdFx0XHRpZiAoICd3b3JkcHJlc3MnID09PSBzeXN0ZW0gKSB7XG5cdFx0XHRcdFx0ZmllbGRzICs9ICc8b3B0aW9uIHZhbHVlPVwiJyArIHZhbHVlLmtleSArICdcIj4nICsgdmFsdWUua2V5ICsgJzwvb3B0aW9uPic7XG5cdFx0XHRcdH0gZWxzZSBpZiAoICdzYWxlc2ZvcmNlJyA9PT0gc3lzdGVtICkge1xuXHRcdFx0XHRcdGZpZWxkcyArPSAnPG9wdGlvbiB2YWx1ZT1cIicgKyB2YWx1ZS5uYW1lICsgJ1wiPicgKyB2YWx1ZS5sYWJlbCArICc8L29wdGlvbj4nO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHRcdCQoIHNlbGVjdEZpZWxkICkuaHRtbCggZmllbGRzICk7XG5cdFx0fSxcblx0XHRjb21wbGV0ZTogZnVuY3Rpb24gKCkge1xuXHRcdFx0JCggJy5zcGlubmVyLScgKyBzeXN0ZW0gKS5yZW1vdmVDbGFzcyggJ2lzLWFjdGl2ZScgKTtcblx0XHR9XG5cdH0pO1xufVxuXG4vLyBsb2FkIGF2YWlsYWJsZSBvcHRpb25zIGlmIHRoZSB3b3JkcHJlc3Mgb2JqZWN0IGNoYW5nZXNcbiQoIGRvY3VtZW50ICkub24oICdjaGFuZ2UnLCAnc2VsZWN0I3dvcmRwcmVzc19vYmplY3QnLCBmdW5jdGlvbigpIHtcblx0dmFyIHRpbWVvdXQ7XG5cdGxvYWRGaWVsZE9wdGlvbnMoICd3b3JkcHJlc3MnLCAkKCB0aGlzICkudmFsKCkgKTtcblx0Y2xlYXJUaW1lb3V0KCB0aW1lb3V0ICk7XG5cdHRpbWVvdXQgPSBzZXRUaW1lb3V0KCBmdW5jdGlvbigpIHtcblx0XHQkKCAndGFibGUuZmllbGRzIHRib2R5IHRyJyApLmZhZGVPdXQoKTtcblx0XHQkKCAndGFibGUuZmllbGRzIHRib2R5IHRyJyApLm5vdCggJy5maWVsZG1hcC10ZW1wbGF0ZScgKS5yZW1vdmUoKTtcblx0fSwgMTAwMCApO1xufSk7XG5cbi8vIGxvYWQgYXZhaWxhYmxlIG9wdGlvbnMgaWYgdGhlIHNhbGVzZm9yY2Ugb2JqZWN0IGNoYW5nZXNcbiQoIGRvY3VtZW50ICkub24oICdjaGFuZ2UnLCAnc2VsZWN0I3NhbGVzZm9yY2Vfb2JqZWN0JywgZnVuY3Rpb24oKSB7XG5cdHZhciB0aW1lb3V0O1xuXHRsb2FkRmllbGRPcHRpb25zKCAnc2FsZXNmb3JjZScsICQoIHRoaXMgKS52YWwoKSApO1xuXHRjbGVhclRpbWVvdXQoIHRpbWVvdXQgKTtcblx0dGltZW91dCA9IHNldFRpbWVvdXQoIGZ1bmN0aW9uKCkge1xuXHRcdCQoICd0YWJsZS5maWVsZHMgdGJvZHkgdHInICkuZmFkZU91dCgpO1xuXHRcdCQoICd0YWJsZS5maWVsZHMgdGJvZHkgdHInICkubm90KCAnLmZpZWxkbWFwLXRlbXBsYXRlJyApLnJlbW92ZSgpO1xuXHR9LCAxMDAwICk7XG59KTtcblxuJCggZG9jdW1lbnQgKS5yZWFkeSggZnVuY3Rpb24oKSB7XG5cdC8vIGlmIHRoZXJlIGlzIGFscmVhZHkgYSB3cCBvciBzZiBvYmplY3QsIG1ha2Ugc3VyZSBpdCBoYXMgdGhlIHJpZ2h0IGZpZWxkcyB3aGVuIHRoZSBwYWdlIGxvYWRzXG5cdGxvYWRGaWVsZE9wdGlvbnMoICd3b3JkcHJlc3MnLCAkKCAnc2VsZWN0I3dvcmRwcmVzc19vYmplY3QnICkudmFsKCkgKTtcblx0bG9hZEZpZWxkT3B0aW9ucyggJ3NhbGVzZm9yY2UnLCAkKCAnc2VsZWN0I3NhbGVzZm9yY2Vfb2JqZWN0JyApLnZhbCgpICk7XG59KTtcbiIsIlxuLyoqXG4gKiBEdXBsaWNhdGVzIHRoZSBmaWVsZHMgZm9yIGEgbmV3IHJvdyBpbiB0aGUgZmllbGRtYXAgb3B0aW9ucyBzY3JlZW4uXG4gKiB0aGlzIGFwcGVhcnMgbm90IHRvIHdvcmsgd2l0aCBkYXRhKCkgaW5zdGVhZCBvZiBhdHRyKClcbiAqL1xuIGZ1bmN0aW9uIGFkZEZpZWxkTWFwcGluZ1JvdygpIHtcblx0JCggJyNhZGQtZmllbGQtbWFwcGluZycgKS5jbGljayggZnVuY3Rpb24oKSB7XG5cdFx0dmFyIHNhbGVzZm9yY2VPYmplY3QgPSAkKCAnI3NhbGVzZm9yY2Vfb2JqZWN0JyApLnZhbCgpO1xuXHRcdHZhciB3b3JkcHJlc3NPYmplY3QgPSAkKCAnI3dvcmRwcmVzc19vYmplY3QnICkudmFsKCk7XG5cdFx0dmFyIG5ld0tleSA9IG5ldyBEYXRlKCkuZ2V0VVRDTWlsbGlzZWNvbmRzKCk7XG5cdFx0dmFyIGxhc3RSb3cgPSAkKCAndGFibGUuZmllbGRzIHRib2R5IHRyJyApLmxhc3QoKTtcblx0XHR2YXIgb2xkS2V5ID0gbGFzdFJvdy5hdHRyKCAnZGF0YS1rZXknICk7XG5cdFx0b2xkS2V5ID0gbmV3IFJlZ0V4cCggb2xkS2V5LCAnZycgKTtcblx0XHQkKCB0aGlzICkudGV4dCggJ0FkZCBhbm90aGVyIGZpZWxkIG1hcHBpbmcnICk7XG5cdFx0aWYgKCAnJyAhPT0gd29yZHByZXNzT2JqZWN0ICYmICcnICE9PSBzYWxlc2ZvcmNlT2JqZWN0ICkge1xuXHRcdFx0ZmllbGRtYXBGaWVsZHMoIG9sZEtleSwgbmV3S2V5LCBsYXN0Um93ICk7XG5cdFx0XHQkKCB0aGlzICkucGFyZW50KCkuZmluZCggJy5taXNzaW5nLW9iamVjdCcgKS5yZW1vdmUoKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0JCggdGhpcyApLnBhcmVudCgpLnByZXBlbmQoICc8ZGl2IGNsYXNzPVwiZXJyb3IgbWlzc2luZy1vYmplY3RcIj48c3Bhbj5Zb3UgaGF2ZSB0byBwaWNrIGEgV29yZFByZXNzIG9iamVjdCBhbmQgYSBTYWxlc2ZvcmNlIG9iamVjdCB0byBhZGQgZmllbGQgbWFwcGluZy48L3NwYW4+PC9kaXY+JyApO1xuXHRcdH1cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH0pO1xufVxuLyoqXG4gKiBDbG9uZXMgdGhlIGZpZWxkc2V0IG1hcmt1cCBwcm92aWRlZCBieSB0aGUgc2VydmVyLXNpZGUgdGVtcGxhdGUgYW5kIGFwcGVuZHMgaXQgYXQgdGhlIGVuZC5cbiAqIHRoaXMgYXBwZWFycyBub3QgdG8gd29yayB3aXRoIGRhdGEoKSBpbnN0ZWFkIG9mIGF0dHIoKVxuICogQHBhcmFtIHN0cmluZyBvbGRLZXkgdGhlIGRhdGEga2V5IGF0dHJpYnV0ZSBvZiB0aGUgc2V0IHRoYXQgaXMgYmVpbmcgY2xvbmVkXG4gKiBAcGFyYW0gc3RyaW5nIG5ld0tleSB0aGUgZGF0YSBrZXkgYXR0cmlidXRlIGZvciB0aGUgb25lIHdlJ3JlIGFwcGVuZGluZ1xuICogQHBhcmFtIG9iamVjdCBsYXN0Um93IHRoZSBsYXN0IHNldCBvZiB0aGUgZmllbGRtYXBcbiAqL1xuZnVuY3Rpb24gZmllbGRtYXBGaWVsZHMoIG9sZEtleSwgbmV3S2V5LCBsYXN0Um93ICkge1xuXHR2YXIgbmV4dFJvdyA9ICcnO1xuICAgIGlmICggalF1ZXJ5LmZuLnNlbGVjdDIgKSB7XG4gICAgXHRuZXh0Um93ID0gbGFzdFJvdy5maW5kKCAnc2VsZWN0JyApXG4gICAgICAgICAgICAuc2VsZWN0MiggJ2Rlc3Ryb3knIClcbiAgICAgICAgICAgIC5lbmQoKVxuICAgICAgICAgICAgLmNsb25lKCB0cnVlICkucmVtb3ZlQ2xhc3MoICdmaWVsZG1hcC10ZW1wbGF0ZScgKTtcbiAgICB9IGVsc2Uge1xuICAgIFx0bmV4dFJvdyA9IGxhc3RSb3cuY2xvbmUoIHRydWUgKTtcbiAgICB9XG5cdCQoIG5leHRSb3cgKS5hdHRyKCAnZGF0YS1rZXknLCBuZXdLZXkgKTtcblx0JCggbmV4dFJvdyApLmVhY2goZnVuY3Rpb24oKSB7XG5cdFx0JCggdGhpcyApLmh0bWwoIGZ1bmN0aW9uKCBpLCBoICkge1xuXHRcdFx0cmV0dXJuIGgucmVwbGFjZSggb2xkS2V5LCBuZXdLZXkgKTtcblx0XHR9KTtcblx0fSk7XG5cdCQoICd0YWJsZS5maWVsZHMgdGJvZHknICkuYXBwZW5kKCBuZXh0Um93ICk7XG5cdGlmICggalF1ZXJ5LmZuLnNlbGVjdDIgKSB7XG5cdFx0bGFzdFJvdy5maW5kKCAnc2VsZWN0JyApLnNlbGVjdDIoKTtcblx0XHRuZXh0Um93LmZpbmQoICdzZWxlY3QnICkuc2VsZWN0MigpO1xuXHR9XG59XG5cbi8qKlxuICogQXMgdGhlIERydXBhbCBwbHVnaW4gZG9lcywgd2Ugb25seSBhbGxvdyBvbmUgZmllbGQgdG8gYmUgYSBwcmVtYXRjaFxuICovXG4kKCBkb2N1bWVudCApLm9uKCAnY2xpY2snLCAnLmNvbHVtbi1pc19wcmVtYXRjaCBpbnB1dCcsIGZ1bmN0aW9uKCkge1xuXHQkKCAnLmNvbHVtbi1pc19wcmVtYXRjaCBpbnB1dCcgKS5ub3QoIHRoaXMgKS5wcm9wKCAnY2hlY2tlZCcsIGZhbHNlICk7XG59KTtcblxuLyoqXG4gKiBBcyB0aGUgRHJ1cGFsIHBsdWdpbiBkb2VzLCB3ZSBvbmx5IGFsbG93IG9uZSBmaWVsZCB0byBiZSBhIGtleVxuICovXG4kKCBkb2N1bWVudCApLm9uKCAnY2xpY2snLCAnLmNvbHVtbi1pc19rZXkgaW5wdXQnLCBmdW5jdGlvbigpIHtcblx0JCggJy5jb2x1bW4taXNfa2V5IGlucHV0JyApLm5vdCggdGhpcyApLnByb3AoICdjaGVja2VkJywgZmFsc2UgKTtcbn0pO1xuXG4kKCBkb2N1bWVudCApLnJlYWR5KCBmdW5jdGlvbigpIHtcblx0Ly8gRHVwbGljYXRlIHRoZSBmaWVsZHMgZm9yIGEgbmV3IHJvdyBpbiB0aGUgZmllbGRtYXAgb3B0aW9ucyBzY3JlZW4uXG5cdGFkZEZpZWxkTWFwcGluZ1JvdygpO1xuXHQvLyBzZXR1cCB0aGUgc2VsZWN0MiBmaWVsZHMgaWYgdGhlIGxpYnJhcnkgaXMgcHJlc2VudFxuXHRpZiAoIGpRdWVyeS5mbi5zZWxlY3QyICkge1xuXHRcdCQoICdzZWxlY3Qjd29yZHByZXNzX29iamVjdCcgKS5zZWxlY3QyKCk7XG5cdFx0JCggJ3NlbGVjdCNzYWxlc2ZvcmNlX29iamVjdCcgKS5zZWxlY3QyKCk7XG5cdFx0JCggJ3NlbGVjdCNzYWxlc2ZvcmNlX3JlY29yZF90eXBlX2RlZmF1bHQnICkuc2VsZWN0MigpO1xuXHRcdCQoICdzZWxlY3QjcHVsbF90cmlnZ2VyX2ZpZWxkJyApLnNlbGVjdDIoKTtcblx0XHQkKCAnLmNvbHVtbi13b3JkcHJlc3NfZmllbGQgc2VsZWN0JyApLnNlbGVjdDIoKTtcblx0XHQkKCAnLmNvbHVtbi1zYWxlc2ZvcmNlX2ZpZWxkIHNlbGVjdCcgKS5zZWxlY3QyKCk7XG5cdH1cbn0pO1xuIiwiLyoqXG4gKiBIYW5kbGUgbWFudWFsIHB1c2ggYW5kIHB1bGwgb2Ygb2JqZWN0c1xuICovXG5mdW5jdGlvbiBwdXNoQW5kUHVsbE9iamVjdHMoKSB7XG5cdCQoICcuc2FsZXNmb3JjZV91c2VyX2FqYXhfbWVzc2FnZScgKS5oaWRlKCk7XG5cdGlmICggMCA8ICQoICcjd29yZHByZXNzX29iamVjdF9hamF4JyApLmxlbmd0aCApIHtcblx0XHQkKCAnLnB1c2hfdG9fc2FsZXNmb3JjZV9idXR0b24nICkub24oICdjbGljaycsIGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIHdvcmRwcmVzc09iamVjdCA9ICQoICcjd29yZHByZXNzX29iamVjdF9hamF4JyApLnZhbCgpO1xuXHRcdFx0dmFyIHdvcmRwcmVzc0lkID0gJCggJyN3b3JkcHJlc3NfaWRfYWpheCcgKS52YWwoKTtcblx0XHRcdHZhciBzYWxlc2ZvcmNlSWQgPSAkKCAnI3NhbGVzZm9yY2VfaWRfYWpheCcgKS52YWwoKTtcblx0XHRcdHZhciBkYXRhID0ge1xuXHRcdFx0XHQnYWN0aW9uJyA6ICdwdXNoX3RvX3NhbGVzZm9yY2UnLFxuXHRcdFx0XHQnd29yZHByZXNzX29iamVjdCcgOiB3b3JkcHJlc3NPYmplY3QsXG5cdFx0XHRcdCd3b3JkcHJlc3NfaWQnIDogd29yZHByZXNzSWQsXG5cdFx0XHRcdCdzYWxlc2ZvcmNlX2lkJyA6IHNhbGVzZm9yY2VJZFxuXHRcdFx0fVxuXHRcdFx0JC5wb3N0KCBhamF4dXJsLCBkYXRhLCBmdW5jdGlvbiggcmVzcG9uc2UgKSB7XG5cdFx0XHRcdGlmICggdHJ1ZSA9PT0gcmVzcG9uc2Uuc3VjY2VzcyApIHtcblx0XHRcdFx0XHR1cGRhdGVTYWxlc2ZvcmNlVXNlclN1bW1hcnkoKTtcblx0XHRcdFx0XHQkKCAnLnNhbGVzZm9yY2VfdXNlcl9hamF4X21lc3NhZ2UnICkud2lkdGgoICQoICcubWFwcGVkLXNhbGVzZm9yY2UtdXNlcicgKS53aWR0aCgpIC0gMjcgKTtcblx0XHRcdFx0XHQkKCAnLnNhbGVzZm9yY2VfdXNlcl9hamF4X21lc3NhZ2UnICkuaHRtbCggJzxwPlRoaXMgb2JqZWN0IGhhcyBiZWVuIHB1c2hlZCB0byBTYWxlc2ZvcmNlLjwvcD4nICkuZmFkZUluKCkuZGVsYXkoIDQwMDAgKS5mYWRlT3V0KCk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH0pO1xuXHR9XG5cdCQoICcucHVsbF9mcm9tX3NhbGVzZm9yY2VfYnV0dG9uJyApLm9uKCAnY2xpY2snLCBmdW5jdGlvbigpIHtcblx0XHR2YXIgc2FsZXNmb3JjZUlkID0gJCggJyNzYWxlc2ZvcmNlX2lkX2FqYXgnICkudmFsKCk7XG5cdFx0dmFyIHdvcmRwcmVzc09iamVjdCA9ICQoICcjd29yZHByZXNzX29iamVjdF9hamF4JyApLnZhbCgpO1xuXHRcdHZhciBkYXRhID0ge1xuXHRcdFx0J2FjdGlvbicgOiAncHVsbF9mcm9tX3NhbGVzZm9yY2UnLFxuXHRcdFx0J3NhbGVzZm9yY2VfaWQnIDogc2FsZXNmb3JjZUlkLFxuXHRcdFx0J3dvcmRwcmVzc19vYmplY3QnIDogd29yZHByZXNzT2JqZWN0XG5cdFx0fVxuXHRcdCQucG9zdCggYWpheHVybCwgZGF0YSwgZnVuY3Rpb24oIHJlc3BvbnNlICkge1xuXHRcdFx0aWYgKCB0cnVlID09PSByZXNwb25zZS5zdWNjZXNzICkge1xuXHRcdFx0XHR1cGRhdGVTYWxlc2ZvcmNlVXNlclN1bW1hcnkoKTtcblx0XHRcdFx0JCggJy5zYWxlc2ZvcmNlX3VzZXJfYWpheF9tZXNzYWdlJyApLndpZHRoKCAkKCAnLm1hcHBlZC1zYWxlc2ZvcmNlLXVzZXInICkud2lkdGgoKSAtIDI3ICk7XG5cdFx0XHRcdCQoICcuc2FsZXNmb3JjZV91c2VyX2FqYXhfbWVzc2FnZScgKS5odG1sKCAnPHA+VGhpcyBvYmplY3QgaGFzIGJlZW4gcHVsbGVkIGZyb20gU2FsZXNmb3JjZS48L3A+JyApLmZhZGVJbigpLmRlbGF5KCA0MDAwICkuZmFkZU91dCgpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdHJldHVybiBmYWxzZTtcblx0fSk7XG59XG4vKipcbiAqIFVwZGF0ZXMgdGhlIHVzZXIgcHJvZmlsZSBzdW1tYXJ5IG9mIFNhbGVzZm9yY2UgaW5mby5cbiAqL1xuZnVuY3Rpb24gdXBkYXRlU2FsZXNmb3JjZVVzZXJTdW1tYXJ5KCkge1xuXHR2YXIgbWFwcGluZ0lkID0gJCggJyNtYXBwaW5nX2lkX2FqYXgnICkudmFsKCk7XG5cdHZhciBkYXRhID0ge1xuXHRcdCdhY3Rpb24nIDogJ3JlZnJlc2hfbWFwcGVkX2RhdGEnLFxuXHRcdCdtYXBwaW5nX2lkJyA6IG1hcHBpbmdJZFxuXHR9XG5cdCQucG9zdCggYWpheHVybCwgZGF0YSwgZnVuY3Rpb24oIHJlc3BvbnNlICkge1xuXHRcdGlmICggdHJ1ZSA9PT0gcmVzcG9uc2Uuc3VjY2VzcyApIHtcblx0XHRcdCQoICd0ZC5sYXN0X3N5bmNfbWVzc2FnZScgKS50ZXh0KCByZXNwb25zZS5kYXRhLmxhc3Rfc3luY19tZXNzYWdlICk7XG5cdFx0XHQkKCAndGQubGFzdF9zeW5jX2FjdGlvbicgKS50ZXh0KCByZXNwb25zZS5kYXRhLmxhc3Rfc3luY19hY3Rpb24gKTtcblx0XHRcdCQoICd0ZC5sYXN0X3N5bmNfc3RhdHVzJyApLnRleHQoIHJlc3BvbnNlLmRhdGEubGFzdF9zeW5jX3N0YXR1cyApO1xuXHRcdFx0JCggJ3RkLmxhc3Rfc3luYycgKS50ZXh0KCByZXNwb25zZS5kYXRhLmxhc3Rfc3luYyApO1xuXHRcdFx0aWYgKCAnMScgPT09IHJlc3BvbnNlLmRhdGEubGFzdF9zeW5jX3N0YXR1cyApIHtcblx0XHRcdFx0JCggJ3RkLmxhc3Rfc3luY19zdGF0dXMnICkudGV4dCggJ3N1Y2Nlc3MnICk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9KTtcbn1cbi8qKlxuICogQ2xlYXIgdGhlIHBsdWdpbiBjYWNoZSB2aWEgQWpheCByZXF1ZXN0LlxuICovXG5mdW5jdGlvbiBjbGVhclNmd3BDYWNoZUxpbmsoKSB7XG5cdCQoICcjY2xlYXItc2Z3cC1jYWNoZScgKS5jbGljayggZnVuY3Rpb24oKSB7XG5cdFx0dmFyIGRhdGEgPSB7XG5cdFx0XHQnYWN0aW9uJyA6ICdjbGVhcl9zZndwX2NhY2hlJ1xuXHRcdH1cblx0XHR2YXIgdGhhdCA9ICQoIHRoaXMgKTtcblx0XHQkLnBvc3QoIGFqYXh1cmwsIGRhdGEsIGZ1bmN0aW9uKCByZXNwb25zZSApIHtcblx0XHRcdGlmICggdHJ1ZSA9PT0gcmVzcG9uc2Uuc3VjY2VzcyAmJiB0cnVlID09PSByZXNwb25zZS5kYXRhLnN1Y2Nlc3MgKSB7XG5cdFx0XHRcdHRoYXQucGFyZW50KCkuaHRtbCggcmVzcG9uc2UuZGF0YS5tZXNzYWdlICkuZmFkZUluKCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9KTtcbn1cblxuJCggZG9jdW1lbnQgKS5yZWFkeSggZnVuY3Rpb24oKSB7XG5cdC8vIENsZWFyIHRoZSBwbHVnaW4gY2FjaGUgdmlhIEFqYXggcmVxdWVzdC5cblx0Y2xlYXJTZndwQ2FjaGVMaW5rKCk7XG5cdC8vIEhhbmRsZSBtYW51YWwgcHVzaCBhbmQgcHVsbCBvZiBvYmplY3RzXG5cdHB1c2hBbmRQdWxsT2JqZWN0cygpO1xufSk7XG4iLCIvKipcbiAqIERvbid0IHNob3cgdGhlIFdTREwgZmlsZSBmaWVsZCB1bmxlc3MgU09BUCBpcyBlbmFibGVkXG4gKi9cbmZ1bmN0aW9uIHRvZ2dsZVNvYXBGaWVsZHMoKSB7XG5cdGlmICggMCA8ICQoICcub2JqZWN0LXN5bmMtZm9yLXNhbGVzZm9yY2UtZW5hYmxlLXNvYXAnICkubGVuZ3RoICkge1xuXHRcdGlmICggJCggJy5vYmplY3Qtc3luYy1mb3Itc2FsZXNmb3JjZS1lbmFibGUtc29hcCBpbnB1dCcgKS5pcyggJzpjaGVja2VkJyApICkge1xuXHRcdFx0JCggJy5vYmplY3Qtc3luYy1mb3Itc2FsZXNmb3JjZS1zb2FwLXdzZGwtcGF0aCcgKS5zaG93KCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdCQoICcub2JqZWN0LXN5bmMtZm9yLXNhbGVzZm9yY2Utc29hcC13c2RsLXBhdGgnICkuaGlkZSgpO1xuXHRcdH1cblx0fVxufVxuXG4vLyBEb24ndCBzaG93IHRoZSBXU0RMIGZpbGUgZmllbGQgdW5sZXNzIFNPQVAgaXMgZW5hYmxlZFxuJCggZG9jdW1lbnQgKS5vbiggJ2NoYW5nZScsICcub2JqZWN0LXN5bmMtZm9yLXNhbGVzZm9yY2UtZW5hYmxlLXNvYXAgaW5wdXQnLCBmdW5jdGlvbigpIHtcblx0dG9nZ2xlU29hcEZpZWxkcygpO1xufSk7XG5cbiQoIGRvY3VtZW50ICkucmVhZHkoIGZ1bmN0aW9uKCkge1xuXHQvLyBEb24ndCBzaG93IHRoZSBXU0RMIGZpbGUgZmllbGQgdW5sZXNzIFNPQVAgaXMgZW5hYmxlZFxuXHR0b2dnbGVTb2FwRmllbGRzKCk7XG59KTtcbiJdfQ== }(jQuery)); diff --git a/assets/js/object-sync-for-salesforce-admin.min.js b/assets/js/object-sync-for-salesforce-admin.min.js index ef702bde..0d90172f 100644 --- a/assets/js/object-sync-for-salesforce-admin.min.js +++ b/assets/js/object-sync-for-salesforce-admin.min.js @@ -1 +1 @@ -!function(c){"use strict";function e(){var t,e=function(e,s){clearTimeout(t),t=setTimeout(e,s)};(t=0)===c(".salesforce_record_types_allowed > *").length&&c(".salesforce_record_types_allowed").hide(),0===c(".salesforce_record_type_default > *").length&&c(".salesforce_record_type_default").hide(),0===c(".pull_trigger_field > *").length&&c(".pull_trigger_field").hide(),c("#salesforce_object").on("change",function(){var s=this;e(function(){var e={action:"get_salesforce_object_description",include:["fields","recordTypeInfos"],field_type:"datetime",salesforce_object:s.value};c.post(ajaxurl,e,function(e){var t="",a="",o="";0Allowed Record Types:
',c.each(e.data.recordTypeInfos,function(e,s){t+='"}),t+="
",a+='',a+='',c.each(e.data.fields,function(e,s){o+='"}),o+="",o+='

These are date fields that can cause WordPress to pull an update from Salesforce, according to the salesforce_pull class.

'),c(".pull_trigger_field").html(o),""!==t?c(".salesforce_record_types_allowed").show():c(".salesforce_record_types_allowed").hide(),""!==a?c(".salesforce_record_type_default").show():c(".salesforce_record_type_default").hide(),""!==o?c(".pull_trigger_field").show():c(".pull_trigger_field").hide(),jQuery.fn.select2&&(c("select#salesforce_record_type_default").select2(),c("select#pull_trigger_field").select2())})},1e3)})}function s(t,e){var s={action:"get_"+t+"_object_fields"},a=".column-"+t+"_field select",o="",l=c(a+" option").first().text();if(""===c(a).val()){if(o+='","wordpress"===t)s.wordpress_object=e;else{if("salesforce"!==t)return o;s.salesforce_object=e}c.ajax({type:"POST",url:ajaxurl,data:s,beforeSend:function(){c(".spinner-"+t).addClass("is-active")},success:function(e){c.each(e.data.fields,function(e,s){"wordpress"===t?o+='":"salesforce"===t&&(o+='")}),c(a).html(o)},complete:function(){c(".spinner-"+t).removeClass("is-active")}})}}function t(){c("#add-field-mapping").click(function(){var e=c("#salesforce_object").val(),s=c("#wordpress_object").val(),t=(new Date).getUTCMilliseconds(),a=c("table.fields tbody tr").last(),o=a.attr("data-key");return o=new RegExp(o,"g"),c(this).text("Add another field mapping"),""!==s&&""!==e?(function(t,a,e){var s="";s=jQuery.fn.select2?e.find("select").select2("destroy").end().clone(!0).removeClass("fieldmap-template"):e.clone(!0);c(s).attr("data-key",a),c(s).each(function(){c(this).html(function(e,s){return s.replace(t,a)})}),c("table.fields tbody").append(s),jQuery.fn.select2&&(e.find("select").select2(),s.find("select").select2())}(o,t,a),c(this).parent().find(".missing-object").remove()):c(this).parent().prepend('
You have to pick a WordPress object and a Salesforce object to add field mapping.
'),!1})}function a(){var e={action:"refresh_mapped_data",mapping_id:c("#mapping_id_ajax").val()};c.post(ajaxurl,e,function(e){!0===e.success&&(c("td.last_sync_message").text(e.data.last_sync_message),c("td.last_sync_action").text(e.data.last_sync_action),c("td.last_sync_status").text(e.data.last_sync_status),c("td.last_sync").text(e.data.last_sync),"1"===e.data.last_sync_status&&c("td.last_sync_status").text("success"))})}function o(){0This object has been pushed to Salesforce.

").fadeIn().delay(4e3).fadeOut())}),!1}),c(".pull_from_salesforce_button").on("click",function(){var e={action:"pull_from_salesforce",salesforce_id:c("#salesforce_id_ajax").val(),wordpress_object:c("#wordpress_object_ajax").val()};return c.post(ajaxurl,e,function(e){!0===e.success&&(a(),c(".salesforce_user_ajax_message").width(c(".mapped-salesforce-user").width()-27),c(".salesforce_user_ajax_message").html("

This object has been pulled from Salesforce.

").fadeIn().delay(4e3).fadeOut())}),!1}),c("#clear-sfwp-cache").click(function(){var s=c(this);return c.post(ajaxurl,{action:"clear_sfwp_cache"},function(e){!0===e.success&&!0===e.data.success&&s.parent().html(e.data.message).fadeIn()}),!1})})}(jQuery); \ No newline at end of file +!function(c){"use strict";function e(){var s,e=function(e,t){clearTimeout(s),s=setTimeout(e,t)};(s=0)===c(".salesforce_record_types_allowed > *").length&&c(".salesforce_record_types_allowed").hide(),0===c(".salesforce_record_type_default > *").length&&c(".salesforce_record_type_default").hide(),0===c(".pull_trigger_field > *").length&&c(".pull_trigger_field").hide(),c("#salesforce_object").on("change",function(){var t=this;e(function(){var e={action:"get_salesforce_object_description",include:["fields","recordTypeInfos"],field_type:"datetime",salesforce_object:t.value};c.post(ajaxurl,e,function(e){var s="",a="",o="";0Allowed Record Types:
',c.each(e.data.recordTypeInfos,function(e,t){s+='"}),s+="
",a+='',a+='',c.each(e.data.fields,function(e,t){o+='"}),o+="",o+='

These are date fields that can cause WordPress to pull an update from Salesforce, according to the salesforce_pull class.

'),c(".pull_trigger_field").html(o),""!==s?c(".salesforce_record_types_allowed").show():c(".salesforce_record_types_allowed").hide(),""!==a?c(".salesforce_record_type_default").show():c(".salesforce_record_type_default").hide(),""!==o?c(".pull_trigger_field").show():c(".pull_trigger_field").hide(),jQuery.fn.select2&&(c("select#salesforce_record_type_default").select2(),c("select#pull_trigger_field").select2())})},1e3)})}function t(s,e){var t={action:"get_"+s+"_object_fields"},a=".column-"+s+"_field select",o="",l=c(a+" option").first().text();if(""===c(a).val()){if(o+='","wordpress"===s)t.wordpress_object=e;else{if("salesforce"!==s)return o;t.salesforce_object=e}c.ajax({type:"POST",url:ajaxurl,data:t,beforeSend:function(){c(".spinner-"+s).addClass("is-active")},success:function(e){c.each(e.data.fields,function(e,t){"wordpress"===s?o+='":"salesforce"===s&&(o+='")}),c(a).html(o)},complete:function(){c(".spinner-"+s).removeClass("is-active")}})}}function s(){c("#add-field-mapping").click(function(){var e=c("#salesforce_object").val(),t=c("#wordpress_object").val(),s=(new Date).getUTCMilliseconds(),a=c("table.fields tbody tr").last(),o=a.attr("data-key");return o=new RegExp(o,"g"),c(this).text("Add another field mapping"),""!==t&&""!==e?(function(s,a,e){var t="";t=jQuery.fn.select2?e.find("select").select2("destroy").end().clone(!0).removeClass("fieldmap-template"):e.clone(!0);c(t).attr("data-key",a),c(t).each(function(){c(this).html(function(e,t){return t.replace(s,a)})}),c("table.fields tbody").append(t),jQuery.fn.select2&&(e.find("select").select2(),t.find("select").select2())}(o,s,a),c(this).parent().find(".missing-object").remove()):c(this).parent().prepend('
You have to pick a WordPress object and a Salesforce object to add field mapping.
'),!1})}function a(){var e={action:"refresh_mapped_data",mapping_id:c("#mapping_id_ajax").val()};c.post(ajaxurl,e,function(e){!0===e.success&&(c("td.last_sync_message").text(e.data.last_sync_message),c("td.last_sync_action").text(e.data.last_sync_action),c("td.last_sync_status").text(e.data.last_sync_status),c("td.last_sync").text(e.data.last_sync),"1"===e.data.last_sync_status&&c("td.last_sync_status").text("success"))})}function o(){0This object has been pushed to Salesforce.

").fadeIn().delay(4e3).fadeOut())}),!1}),c(".pull_from_salesforce_button").on("click",function(){var e={action:"pull_from_salesforce",salesforce_id:c("#salesforce_id_ajax").val(),wordpress_object:c("#wordpress_object_ajax").val()};return c.post(ajaxurl,e,function(e){!0===e.success&&(a(),c(".salesforce_user_ajax_message").width(c(".mapped-salesforce-user").width()-27),c(".salesforce_user_ajax_message").html("

This object has been pulled from Salesforce.

").fadeIn().delay(4e3).fadeOut())}),!1})}),c(document).on("change",".object-sync-for-salesforce-enable-soap input",function(){o()}),c(document).ready(function(){o()})}(jQuery); \ No newline at end of file diff --git a/assets/js/src/01-salesforce-object.js b/assets/js/src/01-salesforce-object.js index 0e79abdf..654f799e 100644 --- a/assets/js/src/01-salesforce-object.js +++ b/assets/js/src/01-salesforce-object.js @@ -93,3 +93,12 @@ function salesforceObjectFields() { }, delayTime ); }); } + +/** + * When the plugin loads: + * Manage the display for Salesforce object fields based on API response + */ +$( document ).ready( function() { + // get the available Salesforce object choices + salesforceObjectFields(); +}); diff --git a/assets/js/src/02-load-field-options.js b/assets/js/src/02-load-field-options.js index d7e343d9..95f6a3da 100644 --- a/assets/js/src/02-load-field-options.js +++ b/assets/js/src/02-load-field-options.js @@ -6,14 +6,14 @@ function loadFieldOptions( system, object_name ) { var data = { 'action' : 'get_' + system + '_object_fields', - } + }; var selectField = '.column-' + system + '_field select'; var fields = ''; - var first_field = $( selectField + ' option').first().text(); + var firstField = $( selectField + ' option' ).first().text(); if ( '' !== $( selectField ).val() ) { return; } - fields += ''; + fields += ''; if ( 'wordpress' === system ) { data['wordpress_object'] = object_name; } else if ( 'salesforce' === system ) { @@ -66,3 +66,14 @@ $( document ).on( 'change', 'select#salesforce_object', function() { $( 'table.fields tbody tr' ).not( '.fieldmap-template' ).remove(); }, 1000 ); }); + +/** + * When the plugin loads: + * Clear fields when the targeted WordPress or Salesforce object type changes + * Manage the display for Salesforce object fields based on API reponse + */ +$( document ).ready( function() { + // if there is already a wp or sf object, make sure it has the right fields when the page loads + loadFieldOptions( 'wordpress', $( 'select#wordpress_object' ).val() ); + loadFieldOptions( 'salesforce', $( 'select#salesforce_object' ).val() ); +}); diff --git a/assets/js/src/03-fieldmap-rows.js b/assets/js/src/03-fieldmap-rows.js index 2efbd12d..6d38c0cd 100644 --- a/assets/js/src/03-fieldmap-rows.js +++ b/assets/js/src/03-fieldmap-rows.js @@ -64,3 +64,22 @@ $( document ).on( 'click', '.column-is_prematch input', function() { $( document ).on( 'click', '.column-is_key input', function() { $( '.column-is_key input' ).not( this ).prop( 'checked', false ); }); + +/** + * When the plugin loads: + * Add new fieldmap rows + * Select2 on select fields + */ +$( document ).ready( function() { + // Duplicate the fields for a new row in the fieldmap options screen. + addFieldMappingRow(); + // setup the select2 fields if the library is present + if ( jQuery.fn.select2 ) { + $( 'select#wordpress_object' ).select2(); + $( 'select#salesforce_object' ).select2(); + $( 'select#salesforce_record_type_default' ).select2(); + $( 'select#pull_trigger_field' ).select2(); + $( '.column-wordpress_field select' ).select2(); + $( '.column-salesforce_field select' ).select2(); + } +}); diff --git a/assets/js/src/04-interface-ajax-events.js b/assets/js/src/04-interface-ajax-events.js index 52d21639..8658257d 100644 --- a/assets/js/src/04-interface-ajax-events.js +++ b/assets/js/src/04-interface-ajax-events.js @@ -80,3 +80,15 @@ function clearSfwpCacheLink() { return false; }); } + +/** + * When the plugin loads: + * Clear plugin cache button + * Manual push and pull + */ +$( document ).ready( function() { + // Clear the plugin cache via Ajax request. + clearSfwpCacheLink(); + // Handle manual push and pull of objects + pushAndPullObjects(); +}); diff --git a/assets/js/src/05-soap.js b/assets/js/src/05-soap.js index 9a482bb9..3b710a00 100644 --- a/assets/js/src/05-soap.js +++ b/assets/js/src/05-soap.js @@ -14,4 +14,9 @@ function toggleSoapFields() { // Don't show the WSDL file field unless SOAP is enabled $( document ).on( 'change', '.object-sync-for-salesforce-enable-soap input', function() { toggleSoapFields(); -}); \ No newline at end of file +}); + +$( document ).ready( function() { + // Don't show the WSDL file field unless SOAP is enabled + toggleSoapFields(); +}); diff --git a/assets/js/src/06-document-ready.js b/assets/js/src/06-document-ready.js deleted file mode 100644 index ae9ce320..00000000 --- a/assets/js/src/06-document-ready.js +++ /dev/null @@ -1,39 +0,0 @@ -/** - * When the plugin loads, initialize or enable things: - * Select2 on select fields - * Clear fields when the targeted WordPress or Salesforce object type changes - * Manage the display for Salesforce object fields based on API reponse - * Manual push and pull - * Clearing the cache - */ -$( document ).ready( function() { - - // Don't show the WSDL file field unless SOAP is enabled - toggleSoapFields(); - - // if there is already a wp or sf object, make sure it has the right fields when the page loads - loadFieldOptions( 'wordpress', $( 'select#wordpress_object' ).val() ); - loadFieldOptions( 'salesforce', $( 'select#salesforce_object' ).val() ); - - // setup the select2 fields if the library is present - if ( jQuery.fn.select2 ) { - $( 'select#wordpress_object' ).select2(); - $( 'select#salesforce_object' ).select2(); - $( 'select#salesforce_record_type_default' ).select2(); - $( 'select#pull_trigger_field' ).select2(); - $( '.column-wordpress_field select' ).select2(); - $( '.column-salesforce_field select' ).select2(); - } - - // get the available Salesforce object choices - salesforceObjectFields(); - - // Duplicate the fields for a new row in the fieldmap options screen. - addFieldMappingRow(); - - // Handle manual push and pull of objects - pushAndPullObjects(); - - // Clear the plugin cache via Ajax request. - clearSfwpCacheLink(); -}); From 5cf8785802438161d3302540dbc6d0d99843c0ee Mon Sep 17 00:00:00 2001 From: Jonathan Stegall Date: Sun, 5 Jan 2020 20:43:56 -0600 Subject: [PATCH 21/27] eslint --- assets/js/src/01-salesforce-object.js | 37 ++++++++++----------------- 1 file changed, 14 insertions(+), 23 deletions(-) diff --git a/assets/js/src/01-salesforce-object.js b/assets/js/src/01-salesforce-object.js index 654f799e..ae86df4f 100644 --- a/assets/js/src/01-salesforce-object.js +++ b/assets/js/src/01-salesforce-object.js @@ -28,45 +28,39 @@ function salesforceObjectFields() { var delayTime = 1000; delay( function() { var data = { - 'action' : 'get_salesforce_object_description', - 'include' : [ 'fields', 'recordTypeInfos' ], - 'field_type' : 'datetime', - 'salesforce_object' : that.value - } + 'action': 'get_salesforce_object_description', + 'include': [ 'fields', 'recordTypeInfos' ], + 'field_type': 'datetime', + 'salesforce_object': that.value + }; $.post( ajaxurl, data, function( response ) { - - var recordTypesAllowedMarkup = '', recordTypeDefaultMarkup = '', dateMarkup = ''; - + var recordTypesAllowedMarkup = ''; + var recordTypeDefaultMarkup = ''; + var dateMarkup = ''; if ( 0 < $( response.data.recordTypeInfos ).length ) { recordTypesAllowedMarkup += '
'; $.each( response.data.recordTypeInfos, function( index, value ) { recordTypesAllowedMarkup += ''; }); recordTypesAllowedMarkup += '
'; - - recordTypeDefaultMarkup += ''; recordTypeDefaultMarkup += '' + dateMarkup += ''; - dateMarkup += '

These are date fields that can cause WordPress to pull an update from Salesforce, according to the salesforce_pull class.

' + dateMarkup += '

These are date fields that can cause WordPress to pull an update from Salesforce, according to the salesforce_pull class.

'; } - $( '.pull_trigger_field' ).html( dateMarkup ); - if ( '' !== recordTypesAllowedMarkup ) { $( '.salesforce_record_types_allowed' ).show(); } else { @@ -77,21 +71,18 @@ function salesforceObjectFields() { } else { $( '.salesforce_record_type_default' ).hide(); } - if ( '' !== dateMarkup ) { $( '.pull_trigger_field' ).show(); } else { $( '.pull_trigger_field' ).hide(); } - if ( jQuery.fn.select2 ) { $( 'select#salesforce_record_type_default' ).select2(); $( 'select#pull_trigger_field' ).select2(); } - - }); + } ); }, delayTime ); - }); + } ); } /** From e99b143bc2b17fd90939f80da81c21be43d46f0d Mon Sep 17 00:00:00 2001 From: Jonathan Stegall Date: Sun, 5 Jan 2020 20:59:47 -0600 Subject: [PATCH 22/27] eslint --- assets/js/object-sync-for-salesforce-admin.js | 47 ++++++++++++++----- assets/js/src/01-salesforce-object.js | 5 +- assets/js/src/02-load-field-options.js | 25 +++++----- assets/js/src/03-fieldmap-rows.js | 27 ++++++----- assets/js/src/04-interface-ajax-events.js | 47 ++++++++++--------- assets/js/src/05-soap.js | 5 +- 6 files changed, 94 insertions(+), 62 deletions(-) diff --git a/assets/js/object-sync-for-salesforce-admin.js b/assets/js/object-sync-for-salesforce-admin.js index a5b9f9c4..a13127d1 100644 --- a/assets/js/object-sync-for-salesforce-admin.js +++ b/assets/js/object-sync-for-salesforce-admin.js @@ -37,9 +37,9 @@ function salesforceObjectFields() { 'salesforce_object': that.value }; $.post(ajaxurl, data, function (response) { - var recordTypesAllowedMarkup = '', - recordTypeDefaultMarkup = '', - dateMarkup = ''; + var recordTypesAllowedMarkup = ''; + var recordTypeDefaultMarkup = ''; + var dateMarkup = ''; if (0 < $(response.data.recordTypeInfos).length) { recordTypesAllowedMarkup += '
'; @@ -95,6 +95,11 @@ function salesforceObjectFields() { }, delayTime); }); } +/** + * When the plugin loads: + * Manage the display for Salesforce object fields based on API response + */ + $(document).ready(function () { // get the available Salesforce object choices @@ -104,10 +109,10 @@ $(document).ready(function () { /** * Gets the WordPress and Salesforce field results via an Ajax call - * @param string system whether we want WordPress or Salesforce data - * @param string object_name the value for the object name from the the */ -function loadFieldOptions(system, object_name) { +function loadFieldOptions(system, objectName) { var data = { 'action': 'get_' + system + '_object_fields' }; @@ -122,9 +127,9 @@ function loadFieldOptions(system, object_name) { fields += ''; if ('wordpress' === system) { - data['wordpress_object'] = object_name; + data['wordpress_object'] = objectName; } else if ('salesforce' === system) { - data['salesforce_object'] = object_name; + data['salesforce_object'] = objectName; } else { return fields; } @@ -172,6 +177,12 @@ $(document).on('change', 'select#salesforce_object', function () { $('table.fields tbody tr').not('.fieldmap-template').remove(); }, 1000); }); +/** + * When the plugin loads: + * Clear fields when the targeted WordPress or Salesforce object type changes + * Manage the display for Salesforce object fields based on API reponse + */ + $(document).ready(function () { // if there is already a wp or sf object, make sure it has the right fields when the page loads loadFieldOptions('wordpress', $('select#wordpress_object').val()); @@ -206,9 +217,9 @@ function addFieldMappingRow() { /** * Clones the fieldset markup provided by the server-side template and appends it at the end. * this appears not to work with data() instead of attr() - * @param string oldKey the data key attribute of the set that is being cloned - * @param string newKey the data key attribute for the one we're appending - * @param object lastRow the last set of the fieldmap + * @param {string} oldKey the data key attribute of the set that is being cloned + * @param {string} newKey the data key attribute for the one we're appending + * @param {object} lastRow the last set of the fieldmap */ @@ -249,6 +260,12 @@ $(document).on('click', '.column-is_prematch input', function () { $(document).on('click', '.column-is_key input', function () { $('.column-is_key input').not(this).prop('checked', false); }); +/** + * When the plugin loads: + * Add new fieldmap rows + * Select2 on select fields + */ + $(document).ready(function () { // Duplicate the fields for a new row in the fieldmap options screen. addFieldMappingRow(); // setup the select2 fields if the library is present @@ -353,6 +370,12 @@ function clearSfwpCacheLink() { return false; }); } +/** + * When the plugin loads: + * Clear plugin cache button + * Manual push and pull + */ + $(document).ready(function () { // Clear the plugin cache via Ajax request. @@ -383,5 +406,5 @@ $(document).ready(function () { // Don't show the WSDL file field unless SOAP is enabled toggleSoapFields(); }); -//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIjAxLXNhbGVzZm9yY2Utb2JqZWN0LmpzIiwiMDItbG9hZC1maWVsZC1vcHRpb25zLmpzIiwiMDMtZmllbGRtYXAtcm93cy5qcyIsIjA0LWludGVyZmFjZS1hamF4LWV2ZW50cy5qcyIsIjA1LXNvYXAuanMiXSwibmFtZXMiOlsic2FsZXNmb3JjZU9iamVjdEZpZWxkcyIsImRlbGF5IiwidGltZXIiLCJjYWxsYmFjayIsIm1zIiwiY2xlYXJUaW1lb3V0Iiwic2V0VGltZW91dCIsIiQiLCJsZW5ndGgiLCJoaWRlIiwib24iLCJ0aGF0IiwiZGVsYXlUaW1lIiwiZGF0YSIsInZhbHVlIiwicG9zdCIsImFqYXh1cmwiLCJyZXNwb25zZSIsInJlY29yZFR5cGVzQWxsb3dlZE1hcmt1cCIsInJlY29yZFR5cGVEZWZhdWx0TWFya3VwIiwiZGF0ZU1hcmt1cCIsInJlY29yZFR5cGVJbmZvcyIsImVhY2giLCJpbmRleCIsImh0bWwiLCJmaWVsZHMiLCJuYW1lIiwibGFiZWwiLCJzaG93IiwialF1ZXJ5IiwiZm4iLCJzZWxlY3QyIiwiZG9jdW1lbnQiLCJyZWFkeSIsImxvYWRGaWVsZE9wdGlvbnMiLCJzeXN0ZW0iLCJvYmplY3RfbmFtZSIsInNlbGVjdEZpZWxkIiwiZmlyc3RGaWVsZCIsImZpcnN0IiwidGV4dCIsInZhbCIsImFqYXgiLCJ0eXBlIiwidXJsIiwiYmVmb3JlU2VuZCIsImFkZENsYXNzIiwic3VjY2VzcyIsImtleSIsImNvbXBsZXRlIiwicmVtb3ZlQ2xhc3MiLCJ0aW1lb3V0IiwiZmFkZU91dCIsIm5vdCIsInJlbW92ZSIsImFkZEZpZWxkTWFwcGluZ1JvdyIsImNsaWNrIiwic2FsZXNmb3JjZU9iamVjdCIsIndvcmRwcmVzc09iamVjdCIsIm5ld0tleSIsIkRhdGUiLCJnZXRVVENNaWxsaXNlY29uZHMiLCJsYXN0Um93IiwibGFzdCIsIm9sZEtleSIsImF0dHIiLCJSZWdFeHAiLCJmaWVsZG1hcEZpZWxkcyIsInBhcmVudCIsImZpbmQiLCJwcmVwZW5kIiwibmV4dFJvdyIsImVuZCIsImNsb25lIiwiaSIsImgiLCJyZXBsYWNlIiwiYXBwZW5kIiwicHJvcCIsInB1c2hBbmRQdWxsT2JqZWN0cyIsIndvcmRwcmVzc0lkIiwic2FsZXNmb3JjZUlkIiwidXBkYXRlU2FsZXNmb3JjZVVzZXJTdW1tYXJ5Iiwid2lkdGgiLCJmYWRlSW4iLCJtYXBwaW5nSWQiLCJsYXN0X3N5bmNfbWVzc2FnZSIsImxhc3Rfc3luY19hY3Rpb24iLCJsYXN0X3N5bmNfc3RhdHVzIiwibGFzdF9zeW5jIiwiY2xlYXJTZndwQ2FjaGVMaW5rIiwibWVzc2FnZSIsInRvZ2dsZVNvYXBGaWVsZHMiLCJpcyJdLCJtYXBwaW5ncyI6Ijs7QUFBQTs7OztBQUlBLFNBQVNBLHNCQUFULEdBQWtDO0FBRWpDLE1BQUlDLEtBQUssR0FBSyxZQUFXO0FBQ3hCLFFBQUlDLEtBQUssR0FBRyxDQUFaO0FBQ0EsV0FBTyxVQUFVQyxRQUFWLEVBQW9CQyxFQUFwQixFQUF5QjtBQUMvQkMsTUFBQUEsWUFBWSxDQUFHSCxLQUFILENBQVo7QUFDQUEsTUFBQUEsS0FBSyxHQUFHSSxVQUFVLENBQUVILFFBQUYsRUFBWUMsRUFBWixDQUFsQjtBQUNBLEtBSEQ7QUFJQSxHQU5hLEVBQWQ7O0FBUUEsTUFBSyxNQUFNRyxDQUFDLENBQUUsc0NBQUYsQ0FBRCxDQUE0Q0MsTUFBdkQsRUFBZ0U7QUFDL0RELElBQUFBLENBQUMsQ0FBRSxrQ0FBRixDQUFELENBQXdDRSxJQUF4QztBQUNBOztBQUVELE1BQUssTUFBTUYsQ0FBQyxDQUFFLHFDQUFGLENBQUQsQ0FBMkNDLE1BQXRELEVBQStEO0FBQzlERCxJQUFBQSxDQUFDLENBQUUsaUNBQUYsQ0FBRCxDQUF1Q0UsSUFBdkM7QUFDQTs7QUFDRCxNQUFLLE1BQU1GLENBQUMsQ0FBRSx5QkFBRixDQUFELENBQStCQyxNQUExQyxFQUFtRDtBQUNsREQsSUFBQUEsQ0FBQyxDQUFFLHFCQUFGLENBQUQsQ0FBMkJFLElBQTNCO0FBQ0E7O0FBRURGLEVBQUFBLENBQUMsQ0FBRSxv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WUFBVztBQUMvQjtBQUNBMkQsRUFBQUEsZ0JBQWdCO0FBQ2hCLENBSEQiLCJmaWxlIjoib2JqZWN0LXN5bmMtZm9yLXNhbGVzZm9yY2UtYWRtaW4uanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEdlbmVyYXRlcyB0aGUgU2FsZXNmb3JjZSBvYmplY3QgZmllbGRzIGJhc2VkIG9uIHRoZSBkcm9wZG93biBhY3Rpdml0eSBhbmQgQVBJIHJlc3VsdHMuXG4gKiBUaGlzIGFsc28gZ2VuZXJhdGVzIG90aGVyIHF1ZXJ5IGZpZWxkcyB0aGF0IGFyZSBvYmplY3Qtc3BlY2lmaWMsIGxpa2UgZGF0ZSBmaWVsZHMsIHJlY29yZCB0eXBlcyBhbGxvd2VkLCBldGMuXG4gKi9cbmZ1bmN0aW9uIHNhbGVzZm9yY2VPYmplY3RGaWVsZHMoKSB7XG5cblx0dmFyIGRlbGF5ID0gKCBmdW5jdGlvbigpIHtcblx0XHR2YXIgdGltZXIgPSAwO1xuXHRcdHJldHVybiBmdW5jdGlvbiggY2FsbGJhY2ssIG1zICkge1xuXHRcdFx0Y2xlYXJUaW1lb3V0ICggdGltZXIgKTtcblx0XHRcdHRpbWVyID0gc2V0VGltZW91dCggY2FsbGJhY2ssIG1zICk7XG5cdFx0fTtcblx0fSgpICk7XG5cblx0aWYgKCAwID09PSAkKCAnLnNhbGVzZm9yY2VfcmVjb3JkX3R5cGVzX2FsbG93ZWQgPiAqJyApLmxlbmd0aCApIHtcblx0XHQkKCAnLnNhbGVzZm9yY2VfcmVjb3JkX3R5cGVzX2FsbG93ZWQnICkuaGlkZSgpO1xuXHR9XG5cblx0aWYgKCAwID09PSAkKCAnLnNhbGVzZm9yY2VfcmVjb3JkX3R5cGVfZGVmYXVsdCA+IConICkubGVuZ3RoICkge1xuXHRcdCQoICcuc2FsZXNmb3JjZV9yZWNvcmRfdHlwZV9kZWZhdWx0JyApLmhpZGUoKTtcblx0fVxuXHRpZiAoIDAgPT09ICQoICcucHVsbF90cmlnZ2VyX2ZpZWxkID4gKicgKS5sZW5ndGggKSB7XG5cdFx0JCggJy5wdWxsX3RyaWdnZXJfZmllbGQnICkuaGlkZSgpO1xuXHR9XG5cblx0JCggJyNzYWxlc2ZvcmNlX29iamVjdCcgKS5vbiggJ2NoYW5nZScsIGZ1bmN0aW9uKCkge1xuXHRcdHZhciB0aGF0ID0gdGhpcztcblx0XHR2YXIgZGVsYXlUaW1lID0gMTAwMDtcblx0XHRkZWxheSggZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgZGF0YSA9IHtcblx0XHRcdFx0J2FjdGlvbicgOiAnZ2V0X3NhbGVzZm9yY2Vfb2JqZWN0X2Rlc2NyaXB0aW9uJyxcblx0XHRcdFx0J2luY2x1ZGUnIDogWyAnZmllbGRzJywgJ3JlY29yZFR5cGVJbmZvcycgXSxcblx0XHRcdFx0J2ZpZWxkX3R5cGUnIDogJ2RhdGV0aW1lJyxcblx0XHRcdFx0J3NhbGVzZm9yY2Vfb2JqZWN0JyA6IHRoYXQudmFsdWVcblx0XHRcdH1cblx0XHRcdCQucG9zdCggYWpheHVybCwgZGF0YSwgZnVuY3Rpb24oIHJlc3BvbnNlICkge1xuXG5cdFx0XHRcdHZhciByZWNvcmRUeXBlc0FsbG93ZWRNYXJrdXAgPSAnJywgcmVjb3JkVHlwZURlZmF1bHRNYXJrdXAgPSAnJywgZGF0ZU1hcmt1cCA9ICcnO1xuXG5cdFx0XHRcdGlmICggMCA8ICQoIHJlc3BvbnNlLmRhdGEucmVjb3JkVHlwZUluZm9zICkubGVuZ3RoICkge1xuXHRcdFx0XHRcdHJlY29yZFR5cGVzQWxsb3dlZE1hcmt1cCArPSAnPGxhYmVsIGZvcj1cInNhbGVzZm9yY2VfcmVjb3JkX3R5cGVzX2FsbG93ZWRcIj5BbGxvd2VkIFJlY29yZCBUeXBlczo8L2xhYmVsPjxkaXYgY2xhc3M9XCJjaGVja2JveGVzXCI+Jztcblx0XHRcdFx0XHQkLmVhY2goIHJlc3BvbnNlLmRhdGEucmVjb3JkVHlwZUluZm9zLCBmdW5jdGlvbiggaW5kZXgsIHZhbHVlICkge1xuXHRcdFx0XHRcdFx0cmVjb3JkVHlwZXNBbGxvd2VkTWFya3VwICs9ICc8bGFiZWw+PGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGNsYXNzPVwiZm9ybS1jaGVja2JveFwiIHZhbHVlPVwiJyArIGluZGV4ICsgJ1wiIG5hbWU9XCJzYWxlc2ZvcmNlX3JlY29yZF90eXBlc19hbGxvd2VkWycgKyBpbmRleCArICddXCIgaWQ9XCJzYWxlc2ZvcmNlX3JlY29yZF90eXBlc19hbGxvd2VkLScgKyBpbmRleCArICdcIj4gJyArIHZhbHVlICsgJzwvbGFiZWw+Jztcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRyZWNvcmRUeXBlc0FsbG93ZWRNYXJrdXAgKz0gJzwvZGl2Pic7XG5cblxuXHRcdFx0XHRcdHJlY29yZFR5cGVEZWZhdWx0TWFya3VwICs9ICc8bGFiZWwgZm9yPVwic2FsZXNmb3JjZV9yZWNvcmRfdHlwZV9kZWZhdWx0XCI+RGVmYXVsdCBSZWNvcmQgVHlwZTo8L2xhYmVsPic7XG5cdFx0XHRcdFx0cmVjb3JkVHlwZURlZmF1bHRNYXJrdXAgKz0gJzxzZWxlY3QgbmFtZT1cInNhbGVzZm9yY2VfcmVjb3JkX3R5cGVfZGVmYXVsdFwiIGlkPVwic2FsZXNmb3JjZV9yZWNvcmRfdHlwZV9kZWZhdWx0XCI+PG9wdGlvbiB2YWx1ZT1cIlwiPi0gU2VsZWN0IHJlY29yZCB0eXBlIC08L29wdGlvbj4nO1xuXHRcdFx0XHRcdCQuZWFjaCggcmVzcG9uc2UuZGF0YS5yZWNvcmRUeXBlSW5mb3MsIGZ1bmN0aW9uKCBpbmRleCwgdmFsdWUgKSB7XG5cdFx0XHRcdFx0XHRyZWNvcmRUeXBlRGVmYXVsdE1hcmt1cCArPSAnPG9wdGlvbiB2YWx1ZT1cIicgKyBpbmRleCArICdcIj4nICsgdmFsdWUgKyAnPC9vcHRpb24+Jztcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdCQoICcuc2FsZXNmb3JjZV9yZWNvcmRfdHlwZXNfYWxsb3dlZCcgKS5odG1sKCByZWNvcmRUeXBlc0FsbG93ZWRNYXJrdXAgKTtcblx0XHRcdFx0JCggJy5zYWxlc2ZvcmNlX3JlY29yZF90eXBlX2RlZmF1bHQnICkuaHRtbCggcmVjb3JkVHlwZURlZmF1bHRNYXJrdXAgKTtcblxuXHRcdFx0XHRpZiAoIDAgPCAkKCByZXNwb25zZS5kYXRhLmZpZWxkcyApLmxlbmd0aCApIHtcblx0XHRcdFx0XHRkYXRlTWFya3VwICs9ICc8bGFiZWwgZm9yPVwicHVsbF90cmlnZ2VyX2ZpZWxkXCI+RGF0ZSBmaWVsZCB0byB0cmlnZ2VyIHB1bGw6PC9sYWJlbD4nO1xuXHRcdFx0XHRcdGRhdGVNYXJrdXAgKz0gJzxzZWxlY3QgbmFtZT1cInB1bGxfdHJpZ2dlcl9maWVsZFwiIGlkPVwicHVsbF90cmlnZ2VyX2ZpZWxkXCI+PG9wdGlvbiB2YWx1ZT1cIlwiPi0gU2VsZWN0IGRhdGUgZmllbGQgLTwvb3B0aW9uPidcblx0XHRcdFx0XHQkLmVhY2goIHJlc3BvbnNlLmRhdGEuZmllbGRzLCBmdW5jdGlvbiggaW5kZXgsIHZhbHVlICkge1xuXHRcdFx0XHRcdFx0ZGF0ZU1hcmt1cCArPSAnPG9wdGlvbiB2YWx1ZT1cIicgKyB2YWx1ZS5uYW1lICsgJ1wiPicgKyB2YWx1ZS5sYWJlbCArICc8L29wdGlvbj4nO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdGRhdGVNYXJrdXAgKz0gJzwvc2VsZWN0Pic7XG5cdFx0XHRcdFx0ZGF0ZU1hcmt1cCArPSAnPHAgY2xhc3M9XCJkZXNjcmlwdGlvblwiPlRoZXNlIGFyZSBkYXRlIGZpZWxkcyB0aGF0IGNhbiBjYXVzZSBXb3JkUHJlc3MgdG8gcHVsbCBhbiB1cGRhdGUgZnJvbSBTYWxlc2ZvcmNlLCBhY2NvcmRpbmcgdG8gdGhlIDxjb2RlPnNhbGVzZm9yY2VfcHVsbDwvY29kZT4gY2xhc3MuPC9wPidcblx0XHRcdFx0fVxuXG5cdFx0XHRcdCQoICcucHVsbF90cmlnZ2VyX2ZpZWxkJyApLmh0bWwoIGRhdGVNYXJrdXAgKTtcblxuXHRcdFx0XHRpZiAoICcnICE9PSByZWNvcmRUeXBlc0FsbG93ZWRNYXJrdXAgKSB7XG5cdFx0XHRcdFx0JCggJy5zYWxlc2ZvcmNlX3JlY29yZF90eXBlc19hbGxvd2VkJyApLnNob3coKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHQkKCAnLnNhbGVzZm9yY2VfcmVjb3JkX3R5cGVzX2FsbG93ZWQnICkuaGlkZSgpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmICggJycgIT09IHJlY29yZFR5cGVEZWZhdWx0TWFya3VwICkge1xuXHRcdFx0XHRcdCQoICcuc2FsZXNmb3JjZV9yZWNvcmRfdHlwZV9kZWZhdWx0JyApLnNob3coKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHQkKCAnLnNhbGVzZm9yY2VfcmVjb3JkX3R5cGVfZGVmYXVsdCcgKS5oaWRlKCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoICcnICE9PSBkYXRlTWFya3VwICkge1xuXHRcdFx0XHRcdCQoICcucHVsbF90cmlnZ2VyX2ZpZWxkJyApLnNob3coKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHQkKCAnLnB1bGxfdHJpZ2dlcl9maWVsZCcgKS5oaWRlKCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoIGpRdWVyeS5mbi5zZWxlY3QyICkge1xuXHRcdFx0XHRcdCQoICdzZWxlY3Qjc2FsZXNmb3JjZV9yZWNvcmRfdHlwZV9kZWZhdWx0JyApLnNlbGVjdDIoKTtcblx0XHRcdFx0XHQkKCAnc2VsZWN0I3B1bGxfdHJpZ2dlcl9maWVsZCcgKS5zZWxlY3QyKCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0fSk7XG5cdFx0fSwgZGVsYXlUaW1lICk7XG5cdH0pO1xufVxuXG4kKCBkb2N1bWVudCApLnJlYWR5KCBmdW5jdGlvbigpIHtcblx0Ly8gZ2V0IHRoZSBhdmFpbGFibGUgU2FsZXNmb3JjZSBvYmplY3QgY2hvaWNlc1xuXHRzYWxlc2ZvcmNlT2JqZWN0RmllbGRzKCk7XG59KTtcbiIsIi8qKlxuICogR2V0cyB0aGUgV29yZFByZXNzIGFuZCBTYWxlc2ZvcmNlIGZpZWxkIHJlc3VsdHMgdmlhIGFuIEFqYXggY2FsbFxuICogQHBhcmFtIHN0cmluZyBzeXN0ZW0gd2hldGhlciB3ZSB3YW50IFdvcmRQcmVzcyBvciBTYWxlc2ZvcmNlIGRhdGFcbiAqIEBwYXJhbSBzdHJpbmcgb2JqZWN0X25hbWUgdGhlIHZhbHVlIGZvciB0aGUgb2JqZWN0IG5hbWUgZnJvbSB0aGUgdGhlIDxzZWxlY3Q+XG4gKi9cbmZ1bmN0aW9uIGxvYWRGaWVsZE9wdGlvbnMoIHN5c3RlbSwgb2JqZWN0X25hbWUgKSB7XG5cdHZhciBkYXRhID0ge1xuXHRcdCdhY3Rpb24nIDogJ2dldF8nICsgc3lzdGVtICsgJ19vYmplY3RfZmllbGRzJyxcblx0fTtcblx0dmFyIHNlbGVjdEZpZWxkID0gJy5jb2x1bW4tJyArIHN5c3RlbSArICdfZmllbGQgc2VsZWN0Jztcblx0dmFyIGZpZWxkcyA9ICcnO1xuXHR2YXIgZmlyc3RGaWVsZCA9ICQoIHNlbGVjdEZpZWxkICsgJyBvcHRpb24nICkuZmlyc3QoKS50ZXh0KCk7XG5cdGlmICggJycgIT09ICQoIHNlbGVjdEZpZWxkICkudmFsKCkgKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cdGZpZWxkcyArPSAnPG9wdGlvbiB2YWx1ZT1cIlwiPicgKyBmaXJzdEZpZWxkICsgJzwvb3B0aW9uPic7XG5cdGlmICggJ3dvcmRwcmVzcycgPT09IHN5c3RlbSApIHtcblx0XHRkYXRhWyd3b3JkcHJlc3Nfb2JqZWN0J10gPSBvYmplY3RfbmFtZTtcblx0fSBlbHNlIGlmICggJ3NhbGVzZm9yY2UnID09PSBzeXN0ZW0gKSB7XG5cdFx0ZGF0YVsnc2FsZXNmb3JjZV9vYmplY3QnXSA9IG9iamVjdF9uYW1lO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBmaWVsZHM7XG5cdH1cblxuXHQkLmFqYXgoe1xuXHRcdHR5cGU6ICdQT1NUJyxcblx0XHR1cmw6IGFqYXh1cmwsXG5cdFx0ZGF0YTogZGF0YSxcblx0XHRiZWZvcmVTZW5kOiBmdW5jdGlvbigpIHtcblx0XHRcdCQoICcuc3Bpbm5lci0nICsgc3lzdGVtICkuYWRkQ2xhc3MoICdpcy1hY3RpdmUnICk7XG5cdFx0fSxcblx0XHRzdWNjZXNzOiBmdW5jdGlvbiggcmVzcG9uc2UgKSB7XG5cdFx0XHQkLmVhY2goIHJlc3BvbnNlLmRhdGEuZmllbGRzLCBmdW5jdGlvbiggaW5kZXgsIHZhbHVlICkge1xuXHRcdFx0XHRpZiAoICd3b3JkcHJlc3MnID09PSBzeXN0ZW0gKSB7XG5cdFx0XHRcdFx0ZmllbGRzICs9ICc8b3B0aW9uIHZhbHVlPVwiJyArIHZhbHVlLmtleSArICdcIj4nICsgdmFsdWUua2V5ICsgJzwvb3B0aW9uPic7XG5cdFx0XHRcdH0gZWxzZSBpZiAoICdzYWxlc2ZvcmNlJyA9PT0gc3lzdGVtICkge1xuXHRcdFx0XHRcdGZpZWxkcyArPSAnPG9wdGlvbiB2YWx1ZT1cIicgKyB2YWx1ZS5uYW1lICsgJ1wiPicgKyB2YWx1ZS5sYWJlbCArICc8L29wdGlvbj4nO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHRcdCQoIHNlbGVjdEZpZWxkICkuaHRtbCggZmllbGRzICk7XG5cdFx0fSxcblx0XHRjb21wbGV0ZTogZnVuY3Rpb24gKCkge1xuXHRcdFx0JCggJy5zcGlubmVyLScgKyBzeXN0ZW0gKS5yZW1vdmVDbGFzcyggJ2lzLWFjdGl2ZScgKTtcblx0XHR9XG5cdH0pO1xufVxuXG4vLyBsb2FkIGF2YWlsYWJsZSBvcHRpb25zIGlmIHRoZSB3b3JkcHJlc3Mgb2JqZWN0IGNoYW5nZXNcbiQoIGRvY3VtZW50ICkub24oICdjaGFuZ2UnLCAnc2VsZWN0I3dvcmRwcmVzc19vYmplY3QnLCBmdW5jdGlvbigpIHtcblx0dmFyIHRpbWVvdXQ7XG5cdGxvYWRGaWVsZE9wdGlvbnMoICd3b3JkcHJlc3MnLCAkKCB0aGlzICkudmFsKCkgKTtcblx0Y2xlYXJUaW1lb3V0KCB0aW1lb3V0ICk7XG5cdHRpbWVvdXQgPSBzZXRUaW1lb3V0KCBmdW5jdGlvbigpIHtcblx0XHQkKCAndGFibGUuZmllbGRzIHRib2R5IHRyJyApLmZhZGVPdXQoKTtcblx0XHQkKCAndGFibGUuZmllbGRzIHRib2R5IHRyJyApLm5vdCggJy5maWVsZG1hcC10ZW1wbGF0ZScgKS5yZW1vdmUoKTtcblx0fSwgMTAwMCApO1xufSk7XG5cbi8vIGxvYWQgYXZhaWxhYmxlIG9wdGlvbnMgaWYgdGhlIHNhbGVzZm9yY2Ugb2JqZWN0IGNoYW5nZXNcbiQoIGRvY3VtZW50ICkub24oICdjaGFuZ2UnLCAnc2VsZWN0I3NhbGVzZm9yY2Vfb2JqZWN0JywgZnVuY3Rpb24oKSB7XG5cdHZhciB0aW1lb3V0O1xuXHRsb2FkRmllbGRPcHRpb25zKCAnc2FsZXNmb3JjZScsICQoIHRoaXMgKS52YWwoKSApO1xuXHRjbGVhclRpbWVvdXQoIHRpbWVvdXQgKTtcblx0dGltZW91dCA9IHNldFRpbWVvdXQoIGZ1bmN0aW9uKCkge1xuXHRcdCQoICd0YWJsZS5maWVsZHMgdGJvZHkgdHInICkuZmFkZU91dCgpO1xuXHRcdCQoICd0YWJsZS5maWVsZHMgdGJvZHkgdHInICkubm90KCAnLmZpZWxkbWFwLXRlbXBsYXRlJyApLnJlbW92ZSgpO1xuXHR9LCAxMDAwICk7XG59KTtcblxuJCggZG9jdW1lbnQgKS5yZWFkeSggZnVuY3Rpb24oKSB7XG5cdC8vIGlmIHRoZXJlIGlzIGFscmVhZHkgYSB3cCBvciBzZiBvYmplY3QsIG1ha2Ugc3VyZSBpdCBoYXMgdGhlIHJpZ2h0IGZpZWxkcyB3aGVuIHRoZSBwYWdlIGxvYWRzXG5cdGxvYWRGaWVsZE9wdGlvbnMoICd3b3JkcHJlc3MnLCAkKCAnc2VsZWN0I3dvcmRwcmVzc19vYmplY3QnICkudmFsKCkgKTtcblx0bG9hZEZpZWxkT3B0aW9ucyggJ3NhbGVzZm9yY2UnLCAkKCAnc2VsZWN0I3NhbGVzZm9yY2Vfb2JqZWN0JyApLnZhbCgpICk7XG59KTtcbiIsIlxuLyoqXG4gKiBEdXBsaWNhdGVzIHRoZSBmaWVsZHMgZm9yIGEgbmV3IHJvdyBpbiB0aGUgZmllbGRtYXAgb3B0aW9ucyBzY3JlZW4uXG4gKiB0aGlzIGFwcGVhcnMgbm90IHRvIHdvcmsgd2l0aCBkYXRhKCkgaW5zdGVhZCBvZiBhdHRyKClcbiAqL1xuIGZ1bmN0aW9uIGFkZEZpZWxkTWFwcGluZ1JvdygpIHtcblx0JCggJyNhZGQtZmllbGQtbWFwcGluZycgKS5jbGljayggZnVuY3Rpb24oKSB7XG5cdFx0dmFyIHNhbGVzZm9yY2VPYmplY3QgPSAkKCAnI3NhbGVzZm9yY2Vfb2JqZWN0JyApLnZhbCgpO1xuXHRcdHZhciB3b3JkcHJlc3NPYmplY3QgPSAkKCAnI3dvcmRwcmVzc19vYmplY3QnICkudmFsKCk7XG5cdFx0dmFyIG5ld0tleSA9IG5ldyBEYXRlKCkuZ2V0VVRDTWlsbGlzZWNvbmRzKCk7XG5cdFx0dmFyIGxhc3RSb3cgPSAkKCAndGFibGUuZmllbGRzIHRib2R5IHRyJyApLmxhc3QoKTtcblx0XHR2YXIgb2xkS2V5ID0gbGFzdFJvdy5hdHRyKCAnZGF0YS1rZXknICk7XG5cdFx0b2xkS2V5ID0gbmV3IFJlZ0V4cCggb2xkS2V5LCAnZycgKTtcblx0XHQkKCB0aGlzICkudGV4dCggJ0FkZCBhbm90aGVyIGZpZWxkIG1hcHBpbmcnICk7XG5cdFx0aWYgKCAnJyAhPT0gd29yZHByZXNzT2JqZWN0ICYmICcnICE9PSBzYWxlc2ZvcmNlT2JqZWN0ICkge1xuXHRcdFx0ZmllbGRtYXBGaWVsZHMoIG9sZEtleSwgbmV3S2V5LCBsYXN0Um93ICk7XG5cdFx0XHQkKCB0aGlzICkucGFyZW50KCkuZmluZCggJy5taXNzaW5nLW9iamVjdCcgKS5yZW1vdmUoKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0JCggdGhpcyApLnBhcmVudCgpLnByZXBlbmQoICc8ZGl2IGNsYXNzPVwiZXJyb3IgbWlzc2luZy1vYmplY3RcIj48c3Bhbj5Zb3UgaGF2ZSB0byBwaWNrIGEgV29yZFByZXNzIG9iamVjdCBhbmQgYSBTYWxlc2ZvcmNlIG9iamVjdCB0byBhZGQgZmllbGQgbWFwcGluZy48L3NwYW4+PC9kaXY+JyApO1xuXHRcdH1cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH0pO1xufVxuLyoqXG4gKiBDbG9uZXMgdGhlIGZpZWxkc2V0IG1hcmt1cCBwcm92aWRlZCBieSB0aGUgc2VydmVyLXNpZGUgdGVtcGxhdGUgYW5kIGFwcGVuZHMgaXQgYXQgdGhlIGVuZC5cbiAqIHRoaXMgYXBwZWFycyBub3QgdG8gd29yayB3aXRoIGRhdGEoKSBpbnN0ZWFkIG9mIGF0dHIoKVxuICogQHBhcmFtIHN0cmluZyBvbGRLZXkgdGhlIGRhdGEga2V5IGF0dHJpYnV0ZSBvZiB0aGUgc2V0IHRoYXQgaXMgYmVpbmcgY2xvbmVkXG4gKiBAcGFyYW0gc3RyaW5nIG5ld0tleSB0aGUgZGF0YSBrZXkgYXR0cmlidXRlIGZvciB0aGUgb25lIHdlJ3JlIGFwcGVuZGluZ1xuICogQHBhcmFtIG9iamVjdCBsYXN0Um93IHRoZSBsYXN0IHNldCBvZiB0aGUgZmllbGRtYXBcbiAqL1xuZnVuY3Rpb24gZmllbGRtYXBGaWVsZHMoIG9sZEtleSwgbmV3S2V5LCBsYXN0Um93ICkge1xuXHR2YXIgbmV4dFJvdyA9ICcnO1xuICAgIGlmICggalF1ZXJ5LmZuLnNlbGVjdDIgKSB7XG4gICAgXHRuZXh0Um93ID0gbGFzdFJvdy5maW5kKCAnc2VsZWN0JyApXG4gICAgICAgICAgICAuc2VsZWN0MiggJ2Rlc3Ryb3knIClcbiAgICAgICAgICAgIC5lbmQoKVxuICAgICAgICAgICAgLmNsb25lKCB0cnVlICkucmVtb3ZlQ2xhc3MoICdmaWVsZG1hcC10ZW1wbGF0ZScgKTtcbiAgICB9IGVsc2Uge1xuICAgIFx0bmV4dFJvdyA9IGxhc3RSb3cuY2xvbmUoIHRydWUgKTtcbiAgICB9XG5cdCQoIG5leHRSb3cgKS5hdHRyKCAnZGF0YS1rZXknLCBuZXdLZXkgKTtcblx0JCggbmV4dFJvdyApLmVhY2goZnVuY3Rpb24oKSB7XG5cdFx0JCggdGhpcyApLmh0bWwoIGZ1bmN0aW9uKCBpLCBoICkge1xuXHRcdFx0cmV0dXJuIGgucmVwbGFjZSggb2xkS2V5LCBuZXdLZXkgKTtcblx0XHR9KTtcblx0fSk7XG5cdCQoICd0YWJsZS5maWVsZHMgdGJvZHknICkuYXBwZW5kKCBuZXh0Um93ICk7XG5cdGlmICggalF1ZXJ5LmZuLnNlbGVjdDIgKSB7XG5cdFx0bGFzdFJvdy5maW5kKCAnc2VsZWN0JyApLnNlbGVjdDIoKTtcblx0XHRuZXh0Um93LmZpbmQoICdzZWxlY3QnICkuc2VsZWN0MigpO1xuXHR9XG59XG5cbi8qKlxuICogQXMgdGhlIERydXBhbCBwbHVnaW4gZG9lcywgd2Ugb25seSBhbGxvdyBvbmUgZmllbGQgdG8gYmUgYSBwcmVtYXRjaFxuICovXG4kKCBkb2N1bWVudCApLm9uKCAnY2xpY2snLCAnLmNvbHVtbi1pc19wcmVtYXRjaCBpbnB1dCcsIGZ1bmN0aW9uKCkge1xuXHQkKCAnLmNvbHVtbi1pc19wcmVtYXRjaCBpbnB1dCcgKS5ub3QoIHRoaXMgKS5wcm9wKCAnY2hlY2tlZCcsIGZhbHNlICk7XG59KTtcblxuLyoqXG4gKiBBcyB0aGUgRHJ1cGFsIHBsdWdpbiBkb2VzLCB3ZSBvbmx5IGFsbG93IG9uZSBmaWVsZCB0byBiZSBhIGtleVxuICovXG4kKCBkb2N1bWVudCApLm9uKCAnY2xpY2snLCAnLmNvbHVtbi1pc19rZXkgaW5wdXQnLCBmdW5jdGlvbigpIHtcblx0JCggJy5jb2x1bW4taXNfa2V5IGlucHV0JyApLm5vdCggdGhpcyApLnByb3AoICdjaGVja2VkJywgZmFsc2UgKTtcbn0pO1xuXG4kKCBkb2N1bWVudCApLnJlYWR5KCBmdW5jdGlvbigpIHtcblx0Ly8gRHVwbGljYXRlIHRoZSBmaWVsZHMgZm9yIGEgbmV3IHJvdyBpbiB0aGUgZmllbGRtYXAgb3B0aW9ucyBzY3JlZW4uXG5cdGFkZEZpZWxkTWFwcGluZ1JvdygpO1xuXHQvLyBzZXR1cCB0aGUgc2VsZWN0MiBmaWVsZHMgaWYgdGhlIGxpYnJhcnkgaXMgcHJlc2VudFxuXHRpZiAoIGpRdWVyeS5mbi5zZWxlY3QyICkge1xuXHRcdCQoICdzZWxlY3Qjd29yZHByZXNzX29iamVjdCcgKS5zZWxlY3QyKCk7XG5cdFx0JCggJ3NlbGVjdCNzYWxlc2ZvcmNlX29iamVjdCcgKS5zZWxlY3QyKCk7XG5cdFx0JCggJ3NlbGVjdCNzYWxlc2ZvcmNlX3JlY29yZF90eXBlX2RlZmF1bHQnICkuc2VsZWN0MigpO1xuXHRcdCQoICdzZWxlY3QjcHVsbF90cmlnZ2VyX2ZpZWxkJyApLnNlbGVjdDIoKTtcblx0XHQkKCAnLmNvbHVtbi13b3JkcHJlc3NfZmllbGQgc2VsZWN0JyApLnNlbGVjdDIoKTtcblx0XHQkKCAnLmNvbHVtbi1zYWxlc2ZvcmNlX2ZpZWxkIHNlbGVjdCcgKS5zZWxlY3QyKCk7XG5cdH1cbn0pO1xuIiwiLyoqXG4gKiBIYW5kbGUgbWFudWFsIHB1c2ggYW5kIHB1bGwgb2Ygb2JqZWN0c1xuICovXG5mdW5jdGlvbiBwdXNoQW5kUHVsbE9iamVjdHMoKSB7XG5cdCQoICcuc2FsZXNmb3JjZV91c2VyX2FqYXhfbWVzc2FnZScgKS5oaWRlKCk7XG5cdGlmICggMCA8ICQoICcjd29yZHByZXNzX29iamVjdF9hamF4JyApLmxlbmd0aCApIHtcblx0XHQkKCAnLnB1c2hfdG9fc2FsZXNmb3JjZV9idXR0b24nICkub24oICdjbGljaycsIGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIHdvcmRwcmVzc09iamVjdCA9ICQoICcjd29yZHByZXNzX29iamVjdF9hamF4JyApLnZhbCgpO1xuXHRcdFx0dmFyIHdvcmRwcmVzc0lkID0gJCggJyN3b3JkcHJlc3NfaWRfYWpheCcgKS52YWwoKTtcblx0XHRcdHZhciBzYWxlc2ZvcmNlSWQgPSAkKCAnI3NhbGVzZm9yY2VfaWRfYWpheCcgKS52YWwoKTtcblx0XHRcdHZhciBkYXRhID0ge1xuXHRcdFx0XHQnYWN0aW9uJyA6ICdwdXNoX3RvX3NhbGVzZm9yY2UnLFxuXHRcdFx0XHQnd29yZHByZXNzX29iamVjdCcgOiB3b3JkcHJlc3NPYmplY3QsXG5cdFx0XHRcdCd3b3JkcHJlc3NfaWQnIDogd29yZHByZXNzSWQsXG5cdFx0XHRcdCdzYWxlc2ZvcmNlX2lkJyA6IHNhbGVzZm9yY2VJZFxuXHRcdFx0fVxuXHRcdFx0JC5wb3N0KCBhamF4dXJsLCBkYXRhLCBmdW5jdGlvbiggcmVzcG9uc2UgKSB7XG5cdFx0XHRcdGlmICggdHJ1ZSA9PT0gcmVzcG9uc2Uuc3VjY2VzcyApIHtcblx0XHRcdFx0XHR1cGRhdGVTYWxlc2ZvcmNlVXNlclN1bW1hcnkoKTtcblx0XHRcdFx0XHQkKCAnLnNhbGVzZm9yY2VfdXNlcl9hamF4X21lc3NhZ2UnICkud2lkdGgoICQoICcubWFwcGVkLXNhbGVzZm9yY2UtdXNlcicgKS53aWR0aCgpIC0gMjcgKTtcblx0XHRcdFx0XHQkKCAnLnNhbGVzZm9yY2VfdXNlcl9hamF4X21lc3NhZ2UnICkuaHRtbCggJzxwPlRoaXMgb2JqZWN0IGhhcyBiZWVuIHB1c2hlZCB0byBTYWxlc2ZvcmNlLjwvcD4nICkuZmFkZUluKCkuZGVsYXkoIDQwMDAgKS5mYWRlT3V0KCk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH0pO1xuXHR9XG5cdCQoICcucHVsbF9mcm9tX3NhbGVzZm9yY2VfYnV0dG9uJyApLm9uKCAnY2xpY2snLCBmdW5jdGlvbigpIHtcblx0XHR2YXIgc2FsZXNmb3JjZUlkID0gJCggJyNzYWxlc2ZvcmNlX2lkX2FqYXgnICkudmFsKCk7XG5cdFx0dmFyIHdvcmRwcmVzc09iamVjdCA9ICQoICcjd29yZHByZXNzX29iamVjdF9hamF4JyApLnZhbCgpO1xuXHRcdHZhciBkYXRhID0ge1xuXHRcdFx0J2FjdGlvbicgOiAncHVsbF9mcm9tX3NhbGVzZm9yY2UnLFxuXHRcdFx0J3NhbGVzZm9yY2VfaWQnIDogc2FsZXNmb3JjZUlkLFxuXHRcdFx0J3dvcmRwcmVzc19vYmplY3QnIDogd29yZHByZXNzT2JqZWN0XG5cdFx0fVxuXHRcdCQucG9zdCggYWpheHVybCwgZGF0YSwgZnVuY3Rpb24oIHJlc3BvbnNlICkge1xuXHRcdFx0aWYgKCB0cnVlID09PSByZXNwb25zZS5zdWNjZXNzICkge1xuXHRcdFx0XHR1cGRhdGVTYWxlc2ZvcmNlVXNlclN1bW1hcnkoKTtcblx0XHRcdFx0JCggJy5zYWxlc2ZvcmNlX3VzZXJfYWpheF9tZXNzYWdlJyApLndpZHRoKCAkKCAnLm1hcHBlZC1zYWxlc2ZvcmNlLXVzZXInICkud2lkdGgoKSAtIDI3ICk7XG5cdFx0XHRcdCQoICcuc2FsZXNmb3JjZV91c2VyX2FqYXhfbWVzc2FnZScgKS5odG1sKCAnPHA+VGhpcyBvYmplY3QgaGFzIGJlZW4gcHVsbGVkIGZyb20gU2FsZXNmb3JjZS48L3A+JyApLmZhZGVJbigpLmRlbGF5KCA0MDAwICkuZmFkZU91dCgpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdHJldHVybiBmYWxzZTtcblx0fSk7XG59XG4vKipcbiAqIFVwZGF0ZXMgdGhlIHVzZXIgcHJvZmlsZSBzdW1tYXJ5IG9mIFNhbGVzZm9yY2UgaW5mby5cbiAqL1xuZnVuY3Rpb24gdXBkYXRlU2FsZXNmb3JjZVVzZXJTdW1tYXJ5KCkge1xuXHR2YXIgbWFwcGluZ0lkID0gJCggJyNtYXBwaW5nX2lkX2FqYXgnICkudmFsKCk7XG5cdHZhciBkYXRhID0ge1xuXHRcdCdhY3Rpb24nIDogJ3JlZnJlc2hfbWFwcGVkX2RhdGEnLFxuXHRcdCdtYXBwaW5nX2lkJyA6IG1hcHBpbmdJZFxuXHR9XG5cdCQucG9zdCggYWpheHVybCwgZGF0YSwgZnVuY3Rpb24oIHJlc3BvbnNlICkge1xuXHRcdGlmICggdHJ1ZSA9PT0gcmVzcG9uc2Uuc3VjY2VzcyApIHtcblx0XHRcdCQoICd0ZC5sYXN0X3N5bmNfbWVzc2FnZScgKS50ZXh0KCByZXNwb25zZS5kYXRhLmxhc3Rfc3luY19tZXNzYWdlICk7XG5cdFx0XHQkKCAndGQubGFzdF9zeW5jX2FjdGlvbicgKS50ZXh0KCByZXNwb25zZS5kYXRhLmxhc3Rfc3luY19hY3Rpb24gKTtcblx0XHRcdCQoICd0ZC5sYXN0X3N5bmNfc3RhdHVzJyApLnRleHQoIHJlc3BvbnNlLmRhdGEubGFzdF9zeW5jX3N0YXR1cyApO1xuXHRcdFx0JCggJ3RkLmxhc3Rfc3luYycgKS50ZXh0KCByZXNwb25zZS5kYXRhLmxhc3Rfc3luYyApO1xuXHRcdFx0aWYgKCAnMScgPT09IHJlc3BvbnNlLmRhdGEubGFzdF9zeW5jX3N0YXR1cyApIHtcblx0XHRcdFx0JCggJ3RkLmxhc3Rfc3luY19zdGF0dXMnICkudGV4dCggJ3N1Y2Nlc3MnICk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9KTtcbn1cbi8qKlxuICogQ2xlYXIgdGhlIHBsdWdpbiBjYWNoZSB2aWEgQWpheCByZXF1ZXN0LlxuICovXG5mdW5jdGlvbiBjbGVhclNmd3BDYWNoZUxpbmsoKSB7XG5cdCQoICcjY2xlYXItc2Z3cC1jYWNoZScgKS5jbGljayggZnVuY3Rpb24oKSB7XG5cdFx0dmFyIGRhdGEgPSB7XG5cdFx0XHQnYWN0aW9uJyA6ICdjbGVhcl9zZndwX2NhY2hlJ1xuXHRcdH1cblx0XHR2YXIgdGhhdCA9ICQoIHRoaXMgKTtcblx0XHQkLnBvc3QoIGFqYXh1cmwsIGRhdGEsIGZ1bmN0aW9uKCByZXNwb25zZSApIHtcblx0XHRcdGlmICggdHJ1ZSA9PT0gcmVzcG9uc2Uuc3VjY2VzcyAmJiB0cnVlID09PSByZXNwb25zZS5kYXRhLnN1Y2Nlc3MgKSB7XG5cdFx0XHRcdHRoYXQucGFyZW50KCkuaHRtbCggcmVzcG9uc2UuZGF0YS5tZXNzYWdlICkuZmFkZUluKCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9KTtcbn1cblxuJCggZG9jdW1lbnQgKS5yZWFkeSggZnVuY3Rpb24oKSB7XG5cdC8vIENsZWFyIHRoZSBwbHVnaW4gY2FjaGUgdmlhIEFqYXggcmVxdWVzdC5cblx0Y2xlYXJTZndwQ2FjaGVMaW5rKCk7XG5cdC8vIEhhbmRsZSBtYW51YWwgcHVzaCBhbmQgcHVsbCBvZiBvYmplY3RzXG5cdHB1c2hBbmRQdWxsT2JqZWN0cygpO1xufSk7XG4iLCIvKipcbiAqIERvbid0IHNob3cgdGhlIFdTREwgZmlsZSBmaWVsZCB1bmxlc3MgU09BUCBpcyBlbmFibGVkXG4gKi9cbmZ1bmN0aW9uIHRvZ2dsZVNvYXBGaWVsZHMoKSB7XG5cdGlmICggMCA8ICQoICcub2JqZWN0LXN5bmMtZm9yLXNhbGVzZm9yY2UtZW5hYmxlLXNvYXAnICkubGVuZ3RoICkge1xuXHRcdGlmICggJCggJy5vYmplY3Qtc3luYy1mb3Itc2FsZXNmb3JjZS1lbmFibGUtc29hcCBpbnB1dCcgKS5pcyggJzpjaGVja2VkJyApICkge1xuXHRcdFx0JCggJy5vYmplY3Qtc3luYy1mb3Itc2FsZXNmb3JjZS1zb2FwLXdzZGwtcGF0aCcgKS5zaG93KCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdCQoICcub2JqZWN0LXN5bmMtZm9yLXNhbGVzZm9yY2Utc29hcC13c2RsLXBhdGgnICkuaGlkZSgpO1xuXHRcdH1cblx0fVxufVxuXG4vLyBEb24ndCBzaG93IHRoZSBXU0RMIGZpbGUgZmllbGQgdW5sZXNzIFNPQVAgaXMgZW5hYmxlZFxuJCggZG9jdW1lbnQgKS5vbiggJ2NoYW5nZScsICcub2JqZWN0LXN5bmMtZm9yLXNhbGVzZm9yY2UtZW5hYmxlLXNvYXAgaW5wdXQnLCBmdW5jdGlvbigpIHtcblx0dG9nZ2xlU29hcEZpZWxkcygpO1xufSk7XG5cbiQoIGRvY3VtZW50ICkucmVhZHkoIGZ1bmN0aW9uKCkge1xuXHQvLyBEb24ndCBzaG93IHRoZSBXU0RMIGZpbGUgZmllbGQgdW5sZXNzIFNPQVAgaXMgZW5hYmxlZFxuXHR0b2dnbGVTb2FwRmllbGRzKCk7XG59KTtcbiJdfQ== +//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIjAxLXNhbGVzZm9yY2Utb2JqZWN0LmpzIiwiMDItbG9hZC1maWVsZC1vcHRpb25zLmpzIiwiMDMtZmllbGRtYXAtcm93cy5qcyIsIjA0LWludGVyZmFjZS1hamF4LWV2ZW50cy5qcyIsIjA1LXNvYXAuanMiXSwibmFtZXMiOlsic2FsZXNmb3JjZU9iamVjdEZpZWxkcyIsImRlbGF5IiwidGltZXIiLCJjYWxsYmFjayIsIm1zIiwiY2xlYXJUaW1lb3V0Iiwic2V0VGltZW91dCIsIiQiLCJsZW5ndGgiLCJoaWRlIiwib24iLCJ0aGF0IiwiZGVsYXlUaW1lIiwiZGF0YSIsInZhbHVlIiwicG9zdCIsImFqYXh1cmwiLCJyZXNwb25zZSIsInJlY29yZFR5cGVzQWxsb3dlZE1hcmt1cCIsInJlY29yZFR5cGVEZWZhdWx0TWFya3VwIiwiZGF0ZU1hcmt1cCIsInJlY29yZFR5cGVJbmZvcyIsImVhY2giLCJpbmRleCIsImh0bWwiLCJmaWVsZHMiLCJuYW1lIiwibGFiZWwiLCJzaG93IiwialF1ZXJ5IiwiZm4iLCJzZWxlY3QyIiwiZG9jdW1lbnQiLCJyZWFkeSIsImxvYWRGaWVsZE9wdGlvbnMiLCJzeXN0ZW0iLCJvYmplY3ROYW1lIiwic2VsZWN0RmllbGQiLCJmaXJzdEZpZWxkIiwiZmlyc3QiLCJ0ZXh0IiwidmFsIiwiYWpheCIsInR5cGUiLCJ1cmwiLCJiZWZvcmVTZW5kIiwiYWRkQ2xhc3MiLCJzdWNjZXNzIiwia2V5IiwiY29tcGxldGUiLCJyZW1vdmVDbGFzcyIsInRpbWVvdXQiLCJmYWRlT3V0Iiwibm90IiwicmVtb3ZlIiwiYWRkRmllbGRNYXBwaW5nUm93IiwiY2xpY2siLCJzYWxlc2ZvcmNlT2JqZWN0Iiwid29yZHByZXNzT2JqZWN0IiwibmV3S2V5IiwiRGF0ZSIsImdldFVUQ01pbGxpc2Vjb25kcyIsImxhc3RSb3ciLCJsYXN0Iiwib2xkS2V5IiwiYXR0ciIsIlJlZ0V4cCIsImZpZWxkbWFwRmllbGRzIiwicGFyZW50IiwiZmluZCIsInByZXBlbmQiLCJuZXh0Um93IiwiZW5kIiwiY2xvbmUiLCJpIiwiaCIsInJlcGxhY2UiLCJhcHBlbmQiLCJwcm9wIiwicHVzaEFuZFB1bGxPYmplY3RzIiwid29yZHByZXNzSWQiLCJzYWxlc2ZvcmNlSWQiLCJ1cGRhdGVTYWxlc2ZvcmNlVXNlclN1bW1hcnkiLCJ3aWR0aCIsImZhZGVJbiIsIm1hcHBpbmdJZCIsImxhc3Rfc3luY19tZXNzYWdlIiwibGFzdF9zeW5jX2FjdGlvbiIsImxhc3Rfc3luY19zdGF0dXMiLCJsYXN0X3N5bmMiLCJjbGVhclNmd3BDYWNoZUxpbmsiLCJtZXNzYWdlIiwidG9nZ2xlU29hcEZpZWxkcyIsImlzIl0sIm1hcHBpbmdzIjoiOztBQUFBOzs7O0FBSUEsU0FBU0Esc0JBQVQsR0FBa0M7QUFFakMsTUFBSUMsS0FBSyxHQUFLLFlBQVc7QUFDeEIsUUFBSUMsS0FBSyxHQUFHLENBQVo7QUFDQSxXQUFPLFVBQVVDLFFBQVYsRUFBb0JDLEVBQXBCLEVBQXlCO0FBQy9CQyxNQUFBQSxZQUFZLENBQUdILEtBQUgsQ0FBWjtBQUNBQSxNQUFBQSxLQUFLLEdBQUdJLFVBQVUsQ0FBRUgsUUFBRixFQUFZQyxFQUFaLENBQWxCO0FBQ0EsS0FIRDtBQUlBLEdBTmEsRUFBZDs7QUFRQSxNQUFLLE1BQU1HLENBQUMsQ0FBRSxzQ0FBRixDQUFELENBQTRDQyxNQUF2RCxFQUFnRTtBQUMvREQsSUFBQUEsQ0FBQyxDQUFFLGtDQUFGLENBQUQsQ0FBd0NFLElBQXhDO0FBQ0E7O0FBRUQsTUFBSyxNQUFNRixDQUFDLENBQUUscUNBQUYsQ0FBRCxDQUEyQ0MsTUFBdEQsRUFBK0Q7QUFDOURELElBQUFBLENBQUMsQ0FBRSxpQ0FBRixDQUFELENBQXVDRSxJQUF2QztBQUNBOztBQUNELE1BQUssTUFBTUYsQ0FBQyxDQUFFLHlCQUFGLENBQUQsQ0FBK0JDLE1BQTFDLEVBQW1EO0FBQ2xERCxJQUFBQSxDQUFDLENBQUUscUJBQUYsQ0FBRCxDQUEyQkUsSUFBM0I7QUFDQTs7QUFFREYsRUFBQUEsQ0FBQyxDQUFFLG9C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QyxDQUFFeUIsUUFBRixDQUFELENBQWNDLEtBQWQsQ0FBcUIsWUFBVztBQUUvQjtBQUNBMkQsRUFBQUEsZ0JBQWdCO0FBQ2hCLENBSkQiLCJmaWxlIjoib2JqZWN0LXN5bmMtZm9yLXNhbGVzZm9yY2UtYWRtaW4uanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEdlbmVyYXRlcyB0aGUgU2FsZXNmb3JjZSBvYmplY3QgZmllbGRzIGJhc2VkIG9uIHRoZSBkcm9wZG93biBhY3Rpdml0eSBhbmQgQVBJIHJlc3VsdHMuXG4gKiBUaGlzIGFsc28gZ2VuZXJhdGVzIG90aGVyIHF1ZXJ5IGZpZWxkcyB0aGF0IGFyZSBvYmplY3Qtc3BlY2lmaWMsIGxpa2UgZGF0ZSBmaWVsZHMsIHJlY29yZCB0eXBlcyBhbGxvd2VkLCBldGMuXG4gKi9cbmZ1bmN0aW9uIHNhbGVzZm9yY2VPYmplY3RGaWVsZHMoKSB7XG5cblx0dmFyIGRlbGF5ID0gKCBmdW5jdGlvbigpIHtcblx0XHR2YXIgdGltZXIgPSAwO1xuXHRcdHJldHVybiBmdW5jdGlvbiggY2FsbGJhY2ssIG1zICkge1xuXHRcdFx0Y2xlYXJUaW1lb3V0ICggdGltZXIgKTtcblx0XHRcdHRpbWVyID0gc2V0VGltZW91dCggY2FsbGJhY2ssIG1zICk7XG5cdFx0fTtcblx0fSgpICk7XG5cblx0aWYgKCAwID09PSAkKCAnLnNhbGVzZm9yY2VfcmVjb3JkX3R5cGVzX2FsbG93ZWQgPiAqJyApLmxlbmd0aCApIHtcblx0XHQkKCAnLnNhbGVzZm9yY2VfcmVjb3JkX3R5cGVzX2FsbG93ZWQnICkuaGlkZSgpO1xuXHR9XG5cblx0aWYgKCAwID09PSAkKCAnLnNhbGVzZm9yY2VfcmVjb3JkX3R5cGVfZGVmYXVsdCA+IConICkubGVuZ3RoICkge1xuXHRcdCQoICcuc2FsZXNmb3JjZV9yZWNvcmRfdHlwZV9kZWZhdWx0JyApLmhpZGUoKTtcblx0fVxuXHRpZiAoIDAgPT09ICQoICcucHVsbF90cmlnZ2VyX2ZpZWxkID4gKicgKS5sZW5ndGggKSB7XG5cdFx0JCggJy5wdWxsX3RyaWdnZXJfZmllbGQnICkuaGlkZSgpO1xuXHR9XG5cblx0JCggJyNzYWxlc2ZvcmNlX29iamVjdCcgKS5vbiggJ2NoYW5nZScsIGZ1bmN0aW9uKCkge1xuXHRcdHZhciB0aGF0ID0gdGhpcztcblx0XHR2YXIgZGVsYXlUaW1lID0gMTAwMDtcblx0XHRkZWxheSggZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgZGF0YSA9IHtcblx0XHRcdFx0J2FjdGlvbic6ICdnZXRfc2FsZXNmb3JjZV9vYmplY3RfZGVzY3JpcHRpb24nLFxuXHRcdFx0XHQnaW5jbHVkZSc6IFsgJ2ZpZWxkcycsICdyZWNvcmRUeXBlSW5mb3MnIF0sXG5cdFx0XHRcdCdmaWVsZF90eXBlJzogJ2RhdGV0aW1lJyxcblx0XHRcdFx0J3NhbGVzZm9yY2Vfb2JqZWN0JzogdGhhdC52YWx1ZVxuXHRcdFx0fTtcblx0XHRcdCQucG9zdCggYWpheHVybCwgZGF0YSwgZnVuY3Rpb24oIHJlc3BvbnNlICkge1xuXHRcdFx0XHR2YXIgcmVjb3JkVHlwZXNBbGxvd2VkTWFya3VwID0gJyc7XG5cdFx0XHRcdHZhciByZWNvcmRUeXBlRGVmYXVsdE1hcmt1cCA9ICcnO1xuXHRcdFx0XHR2YXIgZGF0ZU1hcmt1cCA9ICcnO1xuXHRcdFx0XHRpZiAoIDAgPCAkKCByZXNwb25zZS5kYXRhLnJlY29yZFR5cGVJbmZvcyApLmxlbmd0aCApIHtcblx0XHRcdFx0XHRyZWNvcmRUeXBlc0FsbG93ZWRNYXJrdXAgKz0gJzxsYWJlbCBmb3I9XCJzYWxlc2ZvcmNlX3JlY29yZF90eXBlc19hbGxvd2VkXCI+QWxsb3dlZCBSZWNvcmQgVHlwZXM6PC9sYWJlbD48ZGl2IGNsYXNzPVwiY2hlY2tib3hlc1wiPic7XG5cdFx0XHRcdFx0JC5lYWNoKCByZXNwb25zZS5kYXRhLnJlY29yZFR5cGVJbmZvcywgZnVuY3Rpb24oIGluZGV4LCB2YWx1ZSApIHtcblx0XHRcdFx0XHRcdHJlY29yZFR5cGVzQWxsb3dlZE1hcmt1cCArPSAnPGxhYmVsPjxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBjbGFzcz1cImZvcm0tY2hlY2tib3hcIiB2YWx1ZT1cIicgKyBpbmRleCArICdcIiBuYW1lPVwic2FsZXNmb3JjZV9yZWNvcmRfdHlwZXNfYWxsb3dlZFsnICsgaW5kZXggKyAnXVwiIGlkPVwic2FsZXNmb3JjZV9yZWNvcmRfdHlwZXNfYWxsb3dlZC0nICsgaW5kZXggKyAnXCI+ICcgKyB2YWx1ZSArICc8L2xhYmVsPic7XG5cdFx0XHRcdFx0fSApO1xuXHRcdFx0XHRcdHJlY29yZFR5cGVzQWxsb3dlZE1hcmt1cCArPSAnPC9kaXY+Jztcblx0XHRcdFx0XHRyZWNvcmRUeXBlRGVmYXVsdE1hcmt1cCArPSAnPGxhYmVsIGZvcj1cInNhbGVzZm9yY2VfcmVjb3JkX3R5cGVfZGVmYXVsdFwiPkRlZmF1bHQgUmVjb3JkIFR5cGU6PC9sYWJlbD4nO1xuXHRcdFx0XHRcdHJlY29yZFR5cGVEZWZhdWx0TWFya3VwICs9ICc8c2VsZWN0IG5hbWU9XCJzYWxlc2ZvcmNlX3JlY29yZF90eXBlX2RlZmF1bHRcIiBpZD1cInNhbGVzZm9yY2VfcmVjb3JkX3R5cGVfZGVmYXVsdFwiPjxvcHRpb24gdmFsdWU9XCJcIj4tIFNlbGVjdCByZWNvcmQgdHlwZSAtPC9vcHRpb24+Jztcblx0XHRcdFx0XHQkLmVhY2goIHJlc3BvbnNlLmRhdGEucmVjb3JkVHlwZUluZm9zLCBmdW5jdGlvbiggaW5kZXgsIHZhbHVlICkge1xuXHRcdFx0XHRcdFx0cmVjb3JkVHlwZURlZmF1bHRNYXJrdXAgKz0gJzxvcHRpb24gdmFsdWU9XCInICsgaW5kZXggKyAnXCI+JyArIHZhbHVlICsgJzwvb3B0aW9uPic7XG5cdFx0XHRcdFx0fSApO1xuXHRcdFx0XHR9XG5cdFx0XHRcdCQoICcuc2FsZXNmb3JjZV9yZWNvcmRfdHlwZXNfYWxsb3dlZCcgKS5odG1sKCByZWNvcmRUeXBlc0FsbG93ZWRNYXJrdXAgKTtcblx0XHRcdFx0JCggJy5zYWxlc2ZvcmNlX3JlY29yZF90eXBlX2RlZmF1bHQnICkuaHRtbCggcmVjb3JkVHlwZURlZmF1bHRNYXJrdXAgKTtcblx0XHRcdFx0aWYgKCAwIDwgJCggcmVzcG9uc2UuZGF0YS5maWVsZHMgKS5sZW5ndGggKSB7XG5cdFx0XHRcdFx0ZGF0ZU1hcmt1cCArPSAnPGxhYmVsIGZvcj1cInB1bGxfdHJpZ2dlcl9maWVsZFwiPkRhdGUgZmllbGQgdG8gdHJpZ2dlciBwdWxsOjwvbGFiZWw+Jztcblx0XHRcdFx0XHRkYXRlTWFya3VwICs9ICc8c2VsZWN0IG5hbWU9XCJwdWxsX3RyaWdnZXJfZmllbGRcIiBpZD1cInB1bGxfdHJpZ2dlcl9maWVsZFwiPjxvcHRpb24gdmFsdWU9XCJcIj4tIFNlbGVjdCBkYXRlIGZpZWxkIC08L29wdGlvbj4nO1xuXHRcdFx0XHRcdCQuZWFjaCggcmVzcG9uc2UuZGF0YS5maWVsZHMsIGZ1bmN0aW9uKCBpbmRleCwgdmFsdWUgKSB7XG5cdFx0XHRcdFx0XHRkYXRlTWFya3VwICs9ICc8b3B0aW9uIHZhbHVlPVwiJyArIHZhbHVlLm5hbWUgKyAnXCI+JyArIHZhbHVlLmxhYmVsICsgJzwvb3B0aW9uPic7XG5cdFx0XHRcdFx0fSApO1xuXHRcdFx0XHRcdGRhdGVNYXJrdXAgKz0gJzwvc2VsZWN0Pic7XG5cdFx0XHRcdFx0ZGF0ZU1hcmt1cCArPSAnPHAgY2xhc3M9XCJkZXNjcmlwdGlvblwiPlRoZXNlIGFyZSBkYXRlIGZpZWxkcyB0aGF0IGNhbiBjYXVzZSBXb3JkUHJlc3MgdG8gcHVsbCBhbiB1cGRhdGUgZnJvbSBTYWxlc2ZvcmNlLCBhY2NvcmRpbmcgdG8gdGhlIDxjb2RlPnNhbGVzZm9yY2VfcHVsbDwvY29kZT4gY2xhc3MuPC9wPic7XG5cdFx0XHRcdH1cblx0XHRcdFx0JCggJy5wdWxsX3RyaWdnZXJfZmllbGQnICkuaHRtbCggZGF0ZU1hcmt1cCApO1xuXHRcdFx0XHRpZiAoICcnICE9PSByZWNvcmRUeXBlc0FsbG93ZWRNYXJrdXAgKSB7XG5cdFx0XHRcdFx0JCggJy5zYWxlc2ZvcmNlX3JlY29yZF90eXBlc19hbGxvd2VkJyApLnNob3coKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHQkKCAnLnNhbGVzZm9yY2VfcmVjb3JkX3R5cGVzX2FsbG93ZWQnICkuaGlkZSgpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmICggJycgIT09IHJlY29yZFR5cGVEZWZhdWx0TWFya3VwICkge1xuXHRcdFx0XHRcdCQoICcuc2FsZXNmb3JjZV9yZWNvcmRfdHlwZV9kZWZhdWx0JyApLnNob3coKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHQkKCAnLnNhbGVzZm9yY2VfcmVjb3JkX3R5cGVfZGVmYXVsdCcgKS5oaWRlKCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKCAnJyAhPT0gZGF0ZU1hcmt1cCApIHtcblx0XHRcdFx0XHQkKCAnLnB1bGxfdHJpZ2dlcl9maWVsZCcgKS5zaG93KCk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0JCggJy5wdWxsX3RyaWdnZXJfZmllbGQnICkuaGlkZSgpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmICggalF1ZXJ5LmZuLnNlbGVjdDIgKSB7XG5cdFx0XHRcdFx0JCggJ3NlbGVjdCNzYWxlc2ZvcmNlX3JlY29yZF90eXBlX2RlZmF1bHQnICkuc2VsZWN0MigpO1xuXHRcdFx0XHRcdCQoICdzZWxlY3QjcHVsbF90cmlnZ2VyX2ZpZWxkJyApLnNlbGVjdDIoKTtcblx0XHRcdFx0fVxuXHRcdFx0fSApO1xuXHRcdH0sIGRlbGF5VGltZSApO1xuXHR9ICk7XG59XG5cbi8qKlxuICogV2hlbiB0aGUgcGx1Z2luIGxvYWRzOlxuICogTWFuYWdlIHRoZSBkaXNwbGF5IGZvciBTYWxlc2ZvcmNlIG9iamVjdCBmaWVsZHMgYmFzZWQgb24gQVBJIHJlc3BvbnNlXG4gKi9cbiQoIGRvY3VtZW50ICkucmVhZHkoIGZ1bmN0aW9uKCkge1xuXG5cdC8vIGdldCB0aGUgYXZhaWxhYmxlIFNhbGVzZm9yY2Ugb2JqZWN0IGNob2ljZXNcblx0c2FsZXNmb3JjZU9iamVjdEZpZWxkcygpO1xufSApO1xuIiwiLyoqXG4gKiBHZXRzIHRoZSBXb3JkUHJlc3MgYW5kIFNhbGVzZm9yY2UgZmllbGQgcmVzdWx0cyB2aWEgYW4gQWpheCBjYWxsXG4gKiBAcGFyYW0ge3N0cmluZ30gc3lzdGVtIHdoZXRoZXIgd2Ugd2FudCBXb3JkUHJlc3Mgb3IgU2FsZXNmb3JjZSBkYXRhXG4gKiBAcGFyYW0ge3N0cmluZ30gb2JqZWN0TmFtZSB0aGUgdmFsdWUgZm9yIHRoZSBvYmplY3QgbmFtZSBmcm9tIHRoZSB0aGUgPHNlbGVjdD5cbiAqL1xuZnVuY3Rpb24gbG9hZEZpZWxkT3B0aW9ucyggc3lzdGVtLCBvYmplY3ROYW1lICkge1xuXHR2YXIgZGF0YSA9IHtcblx0XHQnYWN0aW9uJzogJ2dldF8nICsgc3lzdGVtICsgJ19vYmplY3RfZmllbGRzJ1xuXHR9O1xuXHR2YXIgc2VsZWN0RmllbGQgPSAnLmNvbHVtbi0nICsgc3lzdGVtICsgJ19maWVsZCBzZWxlY3QnO1xuXHR2YXIgZmllbGRzID0gJyc7XG5cdHZhciBmaXJzdEZpZWxkID0gJCggc2VsZWN0RmllbGQgKyAnIG9wdGlvbicgKS5maXJzdCgpLnRleHQoKTtcblx0aWYgKCAnJyAhPT0gJCggc2VsZWN0RmllbGQgKS52YWwoKSApIHtcblx0XHRyZXR1cm47XG5cdH1cblx0ZmllbGRzICs9ICc8b3B0aW9uIHZhbHVlPVwiXCI+JyArIGZpcnN0RmllbGQgKyAnPC9vcHRpb24+Jztcblx0aWYgKCAnd29yZHByZXNzJyA9PT0gc3lzdGVtICkge1xuXHRcdGRhdGFbJ3dvcmRwcmVzc19vYmplY3QnXSA9IG9iamVjdE5hbWU7XG5cdH0gZWxzZSBpZiAoICdzYWxlc2ZvcmNlJyA9PT0gc3lzdGVtICkge1xuXHRcdGRhdGFbJ3NhbGVzZm9yY2Vfb2JqZWN0J10gPSBvYmplY3ROYW1lO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBmaWVsZHM7XG5cdH1cblxuXHQkLmFqYXgoIHtcblx0XHR0eXBlOiAnUE9TVCcsXG5cdFx0dXJsOiBhamF4dXJsLFxuXHRcdGRhdGE6IGRhdGEsXG5cdFx0YmVmb3JlU2VuZDogZnVuY3Rpb24oKSB7XG5cdFx0XHQkKCAnLnNwaW5uZXItJyArIHN5c3RlbSApLmFkZENsYXNzKCAnaXMtYWN0aXZlJyApO1xuXHRcdH0sXG5cdFx0c3VjY2VzczogZnVuY3Rpb24oIHJlc3BvbnNlICkge1xuXHRcdFx0JC5lYWNoKCByZXNwb25zZS5kYXRhLmZpZWxkcywgZnVuY3Rpb24oIGluZGV4LCB2YWx1ZSApIHtcblx0XHRcdFx0aWYgKCAnd29yZHByZXNzJyA9PT0gc3lzdGVtICkge1xuXHRcdFx0XHRcdGZpZWxkcyArPSAnPG9wdGlvbiB2YWx1ZT1cIicgKyB2YWx1ZS5rZXkgKyAnXCI+JyArIHZhbHVlLmtleSArICc8L29wdGlvbj4nO1xuXHRcdFx0XHR9IGVsc2UgaWYgKCAnc2FsZXNmb3JjZScgPT09IHN5c3RlbSApIHtcblx0XHRcdFx0XHRmaWVsZHMgKz0gJzxvcHRpb24gdmFsdWU9XCInICsgdmFsdWUubmFtZSArICdcIj4nICsgdmFsdWUubGFiZWwgKyAnPC9vcHRpb24+Jztcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0XHQkKCBzZWxlY3RGaWVsZCApLmh0bWwoIGZpZWxkcyApO1xuXHRcdH0sXG5cdFx0Y29tcGxldGU6IGZ1bmN0aW9uKCkge1xuXHRcdFx0JCggJy5zcGlubmVyLScgKyBzeXN0ZW0gKS5yZW1vdmVDbGFzcyggJ2lzLWFjdGl2ZScgKTtcblx0XHR9XG5cdH0gKTtcbn1cblxuLy8gbG9hZCBhdmFpbGFibGUgb3B0aW9ucyBpZiB0aGUgd29yZHByZXNzIG9iamVjdCBjaGFuZ2VzXG4kKCBkb2N1bWVudCApLm9uKCAnY2hhbmdlJywgJ3NlbGVjdCN3b3JkcHJlc3Nfb2JqZWN0JywgZnVuY3Rpb24oKSB7XG5cdHZhciB0aW1lb3V0O1xuXHRsb2FkRmllbGRPcHRpb25zKCAnd29yZHByZXNzJywgJCggdGhpcyApLnZhbCgpICk7XG5cdGNsZWFyVGltZW91dCggdGltZW91dCApO1xuXHR0aW1lb3V0ID0gc2V0VGltZW91dCggZnVuY3Rpb24oKSB7XG5cdFx0JCggJ3RhYmxlLmZpZWxkcyB0Ym9keSB0cicgKS5mYWRlT3V0KCk7XG5cdFx0JCggJ3RhYmxlLmZpZWxkcyB0Ym9keSB0cicgKS5ub3QoICcuZmllbGRtYXAtdGVtcGxhdGUnICkucmVtb3ZlKCk7XG5cdH0sIDEwMDAgKTtcbn0gKTtcblxuLy8gbG9hZCBhdmFpbGFibGUgb3B0aW9ucyBpZiB0aGUgc2FsZXNmb3JjZSBvYmplY3QgY2hhbmdlc1xuJCggZG9jdW1lbnQgKS5vbiggJ2NoYW5nZScsICdzZWxlY3Qjc2FsZXNmb3JjZV9vYmplY3QnLCBmdW5jdGlvbigpIHtcblx0dmFyIHRpbWVvdXQ7XG5cdGxvYWRGaWVsZE9wdGlvbnMoICdzYWxlc2ZvcmNlJywgJCggdGhpcyApLnZhbCgpICk7XG5cdGNsZWFyVGltZW91dCggdGltZW91dCApO1xuXHR0aW1lb3V0ID0gc2V0VGltZW91dCggZnVuY3Rpb24oKSB7XG5cdFx0JCggJ3RhYmxlLmZpZWxkcyB0Ym9keSB0cicgKS5mYWRlT3V0KCk7XG5cdFx0JCggJ3RhYmxlLmZpZWxkcyB0Ym9keSB0cicgKS5ub3QoICcuZmllbGRtYXAtdGVtcGxhdGUnICkucmVtb3ZlKCk7XG5cdH0sIDEwMDAgKTtcbn0gKTtcblxuLyoqXG4gKiBXaGVuIHRoZSBwbHVnaW4gbG9hZHM6XG4gKiBDbGVhciBmaWVsZHMgd2hlbiB0aGUgdGFyZ2V0ZWQgV29yZFByZXNzIG9yIFNhbGVzZm9yY2Ugb2JqZWN0IHR5cGUgY2hhbmdlc1xuICogTWFuYWdlIHRoZSBkaXNwbGF5IGZvciBTYWxlc2ZvcmNlIG9iamVjdCBmaWVsZHMgYmFzZWQgb24gQVBJIHJlcG9uc2VcbiAqL1xuJCggZG9jdW1lbnQgKS5yZWFkeSggZnVuY3Rpb24oKSB7XG5cblx0Ly8gaWYgdGhlcmUgaXMgYWxyZWFkeSBhIHdwIG9yIHNmIG9iamVjdCwgbWFrZSBzdXJlIGl0IGhhcyB0aGUgcmlnaHQgZmllbGRzIHdoZW4gdGhlIHBhZ2UgbG9hZHNcblx0bG9hZEZpZWxkT3B0aW9ucyggJ3dvcmRwcmVzcycsICQoICdzZWxlY3Qjd29yZHByZXNzX29iamVjdCcgKS52YWwoKSApO1xuXHRsb2FkRmllbGRPcHRpb25zKCAnc2FsZXNmb3JjZScsICQoICdzZWxlY3Qjc2FsZXNmb3JjZV9vYmplY3QnICkudmFsKCkgKTtcbn0gKTtcbiIsIlxuLyoqXG4gKiBEdXBsaWNhdGVzIHRoZSBmaWVsZHMgZm9yIGEgbmV3IHJvdyBpbiB0aGUgZmllbGRtYXAgb3B0aW9ucyBzY3JlZW4uXG4gKiB0aGlzIGFwcGVhcnMgbm90IHRvIHdvcmsgd2l0aCBkYXRhKCkgaW5zdGVhZCBvZiBhdHRyKClcbiAqL1xuIGZ1bmN0aW9uIGFkZEZpZWxkTWFwcGluZ1JvdygpIHtcblx0JCggJyNhZGQtZmllbGQtbWFwcGluZycgKS5jbGljayggZnVuY3Rpb24oKSB7XG5cdFx0dmFyIHNhbGVzZm9yY2VPYmplY3QgPSAkKCAnI3NhbGVzZm9yY2Vfb2JqZWN0JyApLnZhbCgpO1xuXHRcdHZhciB3b3JkcHJlc3NPYmplY3QgPSAkKCAnI3dvcmRwcmVzc19vYmplY3QnICkudmFsKCk7XG5cdFx0dmFyIG5ld0tleSA9IG5ldyBEYXRlKCkuZ2V0VVRDTWlsbGlzZWNvbmRzKCk7XG5cdFx0dmFyIGxhc3RSb3cgPSAkKCAndGFibGUuZmllbGRzIHRib2R5IHRyJyApLmxhc3QoKTtcblx0XHR2YXIgb2xkS2V5ID0gbGFzdFJvdy5hdHRyKCAnZGF0YS1rZXknICk7XG5cdFx0b2xkS2V5ID0gbmV3IFJlZ0V4cCggb2xkS2V5LCAnZycgKTtcblx0XHQkKCB0aGlzICkudGV4dCggJ0FkZCBhbm90aGVyIGZpZWxkIG1hcHBpbmcnICk7XG5cdFx0aWYgKCAnJyAhPT0gd29yZHByZXNzT2JqZWN0ICYmICcnICE9PSBzYWxlc2ZvcmNlT2JqZWN0ICkge1xuXHRcdFx0ZmllbGRtYXBGaWVsZHMoIG9sZEtleSwgbmV3S2V5LCBsYXN0Um93ICk7XG5cdFx0XHQkKCB0aGlzICkucGFyZW50KCkuZmluZCggJy5taXNzaW5nLW9iamVjdCcgKS5yZW1vdmUoKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0JCggdGhpcyApLnBhcmVudCgpLnByZXBlbmQoICc8ZGl2IGNsYXNzPVwiZXJyb3IgbWlzc2luZy1vYmplY3RcIj48c3Bhbj5Zb3UgaGF2ZSB0byBwaWNrIGEgV29yZFByZXNzIG9iamVjdCBhbmQgYSBTYWxlc2ZvcmNlIG9iamVjdCB0byBhZGQgZmllbGQgbWFwcGluZy48L3NwYW4+PC9kaXY+JyApO1xuXHRcdH1cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH0pO1xufVxuXG4vKipcbiAqIENsb25lcyB0aGUgZmllbGRzZXQgbWFya3VwIHByb3ZpZGVkIGJ5IHRoZSBzZXJ2ZXItc2lkZSB0ZW1wbGF0ZSBhbmQgYXBwZW5kcyBpdCBhdCB0aGUgZW5kLlxuICogdGhpcyBhcHBlYXJzIG5vdCB0byB3b3JrIHdpdGggZGF0YSgpIGluc3RlYWQgb2YgYXR0cigpXG4gKiBAcGFyYW0ge3N0cmluZ30gb2xkS2V5IHRoZSBkYXRhIGtleSBhdHRyaWJ1dGUgb2YgdGhlIHNldCB0aGF0IGlzIGJlaW5nIGNsb25lZFxuICogQHBhcmFtIHtzdHJpbmd9IG5ld0tleSB0aGUgZGF0YSBrZXkgYXR0cmlidXRlIGZvciB0aGUgb25lIHdlJ3JlIGFwcGVuZGluZ1xuICogQHBhcmFtIHtvYmplY3R9IGxhc3RSb3cgdGhlIGxhc3Qgc2V0IG9mIHRoZSBmaWVsZG1hcFxuICovXG5mdW5jdGlvbiBmaWVsZG1hcEZpZWxkcyggb2xkS2V5LCBuZXdLZXksIGxhc3RSb3cgKSB7XG5cdHZhciBuZXh0Um93ID0gJyc7XG4gICAgaWYgKCBqUXVlcnkuZm4uc2VsZWN0MiApIHtcbiAgICBcdG5leHRSb3cgPSBsYXN0Um93LmZpbmQoICdzZWxlY3QnIClcbiAgICBcdFx0LnNlbGVjdDIoICdkZXN0cm95JyApXG4gICAgXHRcdC5lbmQoKVxuICAgIFx0XHQuY2xvbmUoIHRydWUgKS5yZW1vdmVDbGFzcyggJ2ZpZWxkbWFwLXRlbXBsYXRlJyApO1xuICAgIH0gZWxzZSB7XG4gICAgXHRuZXh0Um93ID0gbGFzdFJvdy5jbG9uZSggdHJ1ZSApO1xuICAgIH1cblx0JCggbmV4dFJvdyApLmF0dHIoICdkYXRhLWtleScsIG5ld0tleSApO1xuXHQkKCBuZXh0Um93ICkuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0JCggdGhpcyApLmh0bWwoIGZ1bmN0aW9uKCBpLCBoICkge1xuXHRcdFx0cmV0dXJuIGgucmVwbGFjZSggb2xkS2V5LCBuZXdLZXkgKTtcblx0XHR9ICk7XG5cdH0gKTtcblx0JCggJ3RhYmxlLmZpZWxkcyB0Ym9keScgKS5hcHBlbmQoIG5leHRSb3cgKTtcblx0aWYgKCBqUXVlcnkuZm4uc2VsZWN0MiApIHtcblx0XHRsYXN0Um93LmZpbmQoICdzZWxlY3QnICkuc2VsZWN0MigpO1xuXHRcdG5leHRSb3cuZmluZCggJ3NlbGVjdCcgKS5zZWxlY3QyKCk7XG5cdH1cbn1cblxuLyoqXG4gKiBBcyB0aGUgRHJ1cGFsIHBsdWdpbiBkb2VzLCB3ZSBvbmx5IGFsbG93IG9uZSBmaWVsZCB0byBiZSBhIHByZW1hdGNoXG4gKi9cbiQoIGRvY3VtZW50ICkub24oICdjbGljaycsICcuY29sdW1uLWlzX3ByZW1hdGNoIGlucHV0JywgZnVuY3Rpb24oKSB7XG5cdCQoICcuY29sdW1uLWlzX3ByZW1hdGNoIGlucHV0JyApLm5vdCggdGhpcyApLnByb3AoICdjaGVja2VkJywgZmFsc2UgKTtcbn0gKTtcblxuLyoqXG4gKiBBcyB0aGUgRHJ1cGFsIHBsdWdpbiBkb2VzLCB3ZSBvbmx5IGFsbG93IG9uZSBmaWVsZCB0byBiZSBhIGtleVxuICovXG4kKCBkb2N1bWVudCApLm9uKCAnY2xpY2snLCAnLmNvbHVtbi1pc19rZXkgaW5wdXQnLCBmdW5jdGlvbigpIHtcblx0JCggJy5jb2x1bW4taXNfa2V5IGlucHV0JyApLm5vdCggdGhpcyApLnByb3AoICdjaGVja2VkJywgZmFsc2UgKTtcbn0gKTtcblxuLyoqXG4gKiBXaGVuIHRoZSBwbHVnaW4gbG9hZHM6XG4gKiBBZGQgbmV3IGZpZWxkbWFwIHJvd3NcbiAqIFNlbGVjdDIgb24gc2VsZWN0IGZpZWxkc1xuICovXG4kKCBkb2N1bWVudCApLnJlYWR5KCBmdW5jdGlvbigpIHtcblxuXHQvLyBEdXBsaWNhdGUgdGhlIGZpZWxkcyBmb3IgYSBuZXcgcm93IGluIHRoZSBmaWVsZG1hcCBvcHRpb25zIHNjcmVlbi5cblx0YWRkRmllbGRNYXBwaW5nUm93KCk7XG5cblx0Ly8gc2V0dXAgdGhlIHNlbGVjdDIgZmllbGRzIGlmIHRoZSBsaWJyYXJ5IGlzIHByZXNlbnRcblx0aWYgKCBqUXVlcnkuZm4uc2VsZWN0MiApIHtcblx0XHQkKCAnc2VsZWN0I3dvcmRwcmVzc19vYmplY3QnICkuc2VsZWN0MigpO1xuXHRcdCQoICdzZWxlY3Qjc2FsZXNmb3JjZV9vYmplY3QnICkuc2VsZWN0MigpO1xuXHRcdCQoICdzZWxlY3Qjc2FsZXNmb3JjZV9yZWNvcmRfdHlwZV9kZWZhdWx0JyApLnNlbGVjdDIoKTtcblx0XHQkKCAnc2VsZWN0I3B1bGxfdHJpZ2dlcl9maWVsZCcgKS5zZWxlY3QyKCk7XG5cdFx0JCggJy5jb2x1bW4td29yZHByZXNzX2ZpZWxkIHNlbGVjdCcgKS5zZWxlY3QyKCk7XG5cdFx0JCggJy5jb2x1bW4tc2FsZXNmb3JjZV9maWVsZCBzZWxlY3QnICkuc2VsZWN0MigpO1xuXHR9XG59ICk7XG4iLCIvKipcbiAqIEhhbmRsZSBtYW51YWwgcHVzaCBhbmQgcHVsbCBvZiBvYmplY3RzXG4gKi9cbmZ1bmN0aW9uIHB1c2hBbmRQdWxsT2JqZWN0cygpIHtcblx0JCggJy5zYWxlc2ZvcmNlX3VzZXJfYWpheF9tZXNzYWdlJyApLmhpZGUoKTtcblx0aWYgKCAwIDwgJCggJyN3b3JkcHJlc3Nfb2JqZWN0X2FqYXgnICkubGVuZ3RoICkge1xuXHRcdCQoICcucHVzaF90b19zYWxlc2ZvcmNlX2J1dHRvbicgKS5vbiggJ2NsaWNrJywgZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgd29yZHByZXNzT2JqZWN0ID0gJCggJyN3b3JkcHJlc3Nfb2JqZWN0X2FqYXgnICkudmFsKCk7XG5cdFx0XHR2YXIgd29yZHByZXNzSWQgPSAkKCAnI3dvcmRwcmVzc19pZF9hamF4JyApLnZhbCgpO1xuXHRcdFx0dmFyIHNhbGVzZm9yY2VJZCA9ICQoICcjc2FsZXNmb3JjZV9pZF9hamF4JyApLnZhbCgpO1xuXHRcdFx0dmFyIGRhdGEgPSB7XG5cdFx0XHRcdCdhY3Rpb24nOiAncHVzaF90b19zYWxlc2ZvcmNlJyxcblx0XHRcdFx0J3dvcmRwcmVzc19vYmplY3QnOiB3b3JkcHJlc3NPYmplY3QsXG5cdFx0XHRcdCd3b3JkcHJlc3NfaWQnOiB3b3JkcHJlc3NJZCxcblx0XHRcdFx0J3NhbGVzZm9yY2VfaWQnOiBzYWxlc2ZvcmNlSWRcblx0XHRcdH07XG5cdFx0XHQkLnBvc3QoIGFqYXh1cmwsIGRhdGEsIGZ1bmN0aW9uKCByZXNwb25zZSApIHtcblx0XHRcdFx0aWYgKCB0cnVlID09PSByZXNwb25zZS5zdWNjZXNzICkge1xuXHRcdFx0XHRcdHVwZGF0ZVNhbGVzZm9yY2VVc2VyU3VtbWFyeSgpO1xuXHRcdFx0XHRcdCQoICcuc2FsZXNmb3JjZV91c2VyX2FqYXhfbWVzc2FnZScgKS53aWR0aCggJCggJy5tYXBwZWQtc2FsZXNmb3JjZS11c2VyJyApLndpZHRoKCkgLSAyNyApO1xuXHRcdFx0XHRcdCQoICcuc2FsZXNmb3JjZV91c2VyX2FqYXhfbWVzc2FnZScgKS5odG1sKCAnPHA+VGhpcyBvYmplY3QgaGFzIGJlZW4gcHVzaGVkIHRvIFNhbGVzZm9yY2UuPC9wPicgKS5mYWRlSW4oKS5kZWxheSggNDAwMCApLmZhZGVPdXQoKTtcblx0XHRcdFx0fVxuXHRcdFx0fSApO1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH0gKTtcblx0fVxuXHQkKCAnLnB1bGxfZnJvbV9zYWxlc2ZvcmNlX2J1dHRvbicgKS5vbiggJ2NsaWNrJywgZnVuY3Rpb24oKSB7XG5cdFx0dmFyIHNhbGVzZm9yY2VJZCA9ICQoICcjc2FsZXNmb3JjZV9pZF9hamF4JyApLnZhbCgpO1xuXHRcdHZhciB3b3JkcHJlc3NPYmplY3QgPSAkKCAnI3dvcmRwcmVzc19vYmplY3RfYWpheCcgKS52YWwoKTtcblx0XHR2YXIgZGF0YSA9IHtcblx0XHRcdCdhY3Rpb24nOiAncHVsbF9mcm9tX3NhbGVzZm9yY2UnLFxuXHRcdFx0J3NhbGVzZm9yY2VfaWQnOiBzYWxlc2ZvcmNlSWQsXG5cdFx0XHQnd29yZHByZXNzX29iamVjdCc6IHdvcmRwcmVzc09iamVjdFxuXHRcdH07XG5cdFx0JC5wb3N0KCBhamF4dXJsLCBkYXRhLCBmdW5jdGlvbiggcmVzcG9uc2UgKSB7XG5cdFx0XHRpZiAoIHRydWUgPT09IHJlc3BvbnNlLnN1Y2Nlc3MgKSB7XG5cdFx0XHRcdHVwZGF0ZVNhbGVzZm9yY2VVc2VyU3VtbWFyeSgpO1xuXHRcdFx0XHQkKCAnLnNhbGVzZm9yY2VfdXNlcl9hamF4X21lc3NhZ2UnICkud2lkdGgoICQoICcubWFwcGVkLXNhbGVzZm9yY2UtdXNlcicgKS53aWR0aCgpIC0gMjcgKTtcblx0XHRcdFx0JCggJy5zYWxlc2ZvcmNlX3VzZXJfYWpheF9tZXNzYWdlJyApLmh0bWwoICc8cD5UaGlzIG9iamVjdCBoYXMgYmVlbiBwdWxsZWQgZnJvbSBTYWxlc2ZvcmNlLjwvcD4nICkuZmFkZUluKCkuZGVsYXkoIDQwMDAgKS5mYWRlT3V0KCk7XG5cdFx0XHR9XG5cdFx0fSApO1xuXHRcdHJldHVybiBmYWxzZTtcblx0fSApO1xufVxuXG4vKipcbiAqIFVwZGF0ZXMgdGhlIHVzZXIgcHJvZmlsZSBzdW1tYXJ5IG9mIFNhbGVzZm9yY2UgaW5mby5cbiAqL1xuZnVuY3Rpb24gdXBkYXRlU2FsZXNmb3JjZVVzZXJTdW1tYXJ5KCkge1xuXHR2YXIgbWFwcGluZ0lkID0gJCggJyNtYXBwaW5nX2lkX2FqYXgnICkudmFsKCk7XG5cdHZhciBkYXRhID0ge1xuXHRcdCdhY3Rpb24nOiAncmVmcmVzaF9tYXBwZWRfZGF0YScsXG5cdFx0J21hcHBpbmdfaWQnOiBtYXBwaW5nSWRcblx0fTtcblx0JC5wb3N0KCBhamF4dXJsLCBkYXRhLCBmdW5jdGlvbiggcmVzcG9uc2UgKSB7XG5cdFx0aWYgKCB0cnVlID09PSByZXNwb25zZS5zdWNjZXNzICkge1xuXHRcdFx0JCggJ3RkLmxhc3Rfc3luY19tZXNzYWdlJyApLnRleHQoIHJlc3BvbnNlLmRhdGEubGFzdF9zeW5jX21lc3NhZ2UgKTtcblx0XHRcdCQoICd0ZC5sYXN0X3N5bmNfYWN0aW9uJyApLnRleHQoIHJlc3BvbnNlLmRhdGEubGFzdF9zeW5jX2FjdGlvbiApO1xuXHRcdFx0JCggJ3RkLmxhc3Rfc3luY19zdGF0dXMnICkudGV4dCggcmVzcG9uc2UuZGF0YS5sYXN0X3N5bmNfc3RhdHVzICk7XG5cdFx0XHQkKCAndGQubGFzdF9zeW5jJyApLnRleHQoIHJlc3BvbnNlLmRhdGEubGFzdF9zeW5jICk7XG5cdFx0XHRpZiAoICcxJyA9PT0gcmVzcG9uc2UuZGF0YS5sYXN0X3N5bmNfc3RhdHVzICkge1xuXHRcdFx0XHQkKCAndGQubGFzdF9zeW5jX3N0YXR1cycgKS50ZXh0KCAnc3VjY2VzcycgKTtcblx0XHRcdH1cblx0XHR9XG5cdH0gKTtcbn1cbi8qKlxuICogQ2xlYXIgdGhlIHBsdWdpbiBjYWNoZSB2aWEgQWpheCByZXF1ZXN0LlxuICovXG5mdW5jdGlvbiBjbGVhclNmd3BDYWNoZUxpbmsoKSB7XG5cdCQoICcjY2xlYXItc2Z3cC1jYWNoZScgKS5jbGljayggZnVuY3Rpb24oKSB7XG5cdFx0dmFyIGRhdGEgPSB7XG5cdFx0XHQnYWN0aW9uJzogJ2NsZWFyX3Nmd3BfY2FjaGUnXG5cdFx0fTtcblx0XHR2YXIgdGhhdCA9ICQoIHRoaXMgKTtcblx0XHQkLnBvc3QoIGFqYXh1cmwsIGRhdGEsIGZ1bmN0aW9uKCByZXNwb25zZSApIHtcblx0XHRcdGlmICggdHJ1ZSA9PT0gcmVzcG9uc2Uuc3VjY2VzcyAmJiB0cnVlID09PSByZXNwb25zZS5kYXRhLnN1Y2Nlc3MgKSB7XG5cdFx0XHRcdHRoYXQucGFyZW50KCkuaHRtbCggcmVzcG9uc2UuZGF0YS5tZXNzYWdlICkuZmFkZUluKCk7XG5cdFx0XHR9XG5cdFx0fSApO1xuXHRcdHJldHVybiBmYWxzZTtcblx0fSApO1xufVxuXG4vKipcbiAqIFdoZW4gdGhlIHBsdWdpbiBsb2FkczpcbiAqIENsZWFyIHBsdWdpbiBjYWNoZSBidXR0b25cbiAqIE1hbnVhbCBwdXNoIGFuZCBwdWxsXG4gKi9cbiQoIGRvY3VtZW50ICkucmVhZHkoIGZ1bmN0aW9uKCkge1xuXG5cdC8vIENsZWFyIHRoZSBwbHVnaW4gY2FjaGUgdmlhIEFqYXggcmVxdWVzdC5cblx0Y2xlYXJTZndwQ2FjaGVMaW5rKCk7XG5cblx0Ly8gSGFuZGxlIG1hbnVhbCBwdXNoIGFuZCBwdWxsIG9mIG9iamVjdHNcblx0cHVzaEFuZFB1bGxPYmplY3RzKCk7XG59ICk7XG4iLCIvKipcbiAqIERvbid0IHNob3cgdGhlIFdTREwgZmlsZSBmaWVsZCB1bmxlc3MgU09BUCBpcyBlbmFibGVkXG4gKi9cbmZ1bmN0aW9uIHRvZ2dsZVNvYXBGaWVsZHMoKSB7XG5cdGlmICggMCA8ICQoICcub2JqZWN0LXN5bmMtZm9yLXNhbGVzZm9yY2UtZW5hYmxlLXNvYXAnICkubGVuZ3RoICkge1xuXHRcdGlmICggJCggJy5vYmplY3Qtc3luYy1mb3Itc2FsZXNmb3JjZS1lbmFibGUtc29hcCBpbnB1dCcgKS5pcyggJzpjaGVja2VkJyApICkge1xuXHRcdFx0JCggJy5vYmplY3Qtc3luYy1mb3Itc2FsZXNmb3JjZS1zb2FwLXdzZGwtcGF0aCcgKS5zaG93KCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdCQoICcub2JqZWN0LXN5bmMtZm9yLXNhbGVzZm9yY2Utc29hcC13c2RsLXBhdGgnICkuaGlkZSgpO1xuXHRcdH1cblx0fVxufVxuXG4vLyBEb24ndCBzaG93IHRoZSBXU0RMIGZpbGUgZmllbGQgdW5sZXNzIFNPQVAgaXMgZW5hYmxlZFxuJCggZG9jdW1lbnQgKS5vbiggJ2NoYW5nZScsICcub2JqZWN0LXN5bmMtZm9yLXNhbGVzZm9yY2UtZW5hYmxlLXNvYXAgaW5wdXQnLCBmdW5jdGlvbigpIHtcblx0dG9nZ2xlU29hcEZpZWxkcygpO1xufSApO1xuXG4kKCBkb2N1bWVudCApLnJlYWR5KCBmdW5jdGlvbigpIHtcblxuXHQvLyBEb24ndCBzaG93IHRoZSBXU0RMIGZpbGUgZmllbGQgdW5sZXNzIFNPQVAgaXMgZW5hYmxlZFxuXHR0b2dnbGVTb2FwRmllbGRzKCk7XG59ICk7XG4iXX0= }(jQuery)); diff --git a/assets/js/src/01-salesforce-object.js b/assets/js/src/01-salesforce-object.js index ae86df4f..c11dbc93 100644 --- a/assets/js/src/01-salesforce-object.js +++ b/assets/js/src/01-salesforce-object.js @@ -41,7 +41,7 @@ function salesforceObjectFields() { recordTypesAllowedMarkup += '
'; $.each( response.data.recordTypeInfos, function( index, value ) { recordTypesAllowedMarkup += ''; - }); + } ); recordTypesAllowedMarkup += '
'; recordTypeDefaultMarkup += ''; recordTypeDefaultMarkup += ' + * @param {string} system whether we want WordPress or Salesforce data + * @param {string} objectName the value for the object name from the the '+t+""}),s+="
",a+='',a+='',c.each(e.data.fields,function(e,t){o+='"}),o+="",o+='

These are date fields that can cause WordPress to pull an update from Salesforce, according to the salesforce_pull class.

'),c(".pull_trigger_field").html(o),""!==s?c(".salesforce_record_types_allowed").show():c(".salesforce_record_types_allowed").hide(),""!==a?c(".salesforce_record_type_default").show():c(".salesforce_record_type_default").hide(),""!==o?c(".pull_trigger_field").show():c(".pull_trigger_field").hide(),jQuery.fn.select2&&(c("select#salesforce_record_type_default").select2(),c("select#pull_trigger_field").select2())})},1e3)})}function t(s,e){var t={action:"get_"+s+"_object_fields"},a=".column-"+s+"_field select",o="",l=c(a+" option").first().text();if(""===c(a).val()){if(o+='","wordpress"===s)t.wordpress_object=e;else{if("salesforce"!==s)return o;t.salesforce_object=e}c.ajax({type:"POST",url:ajaxurl,data:t,beforeSend:function(){c(".spinner-"+s).addClass("is-active")},success:function(e){c.each(e.data.fields,function(e,t){"wordpress"===s?o+='":"salesforce"===s&&(o+='")}),c(a).html(o)},complete:function(){c(".spinner-"+s).removeClass("is-active")}})}}function s(){c("#add-field-mapping").click(function(){var e=c("#salesforce_object").val(),t=c("#wordpress_object").val(),s=(new Date).getUTCMilliseconds(),a=c("table.fields tbody tr").last(),o=a.attr("data-key");return o=new RegExp(o,"g"),c(this).text("Add another field mapping"),""!==t&&""!==e?(function(s,a,e){var t="";t=jQuery.fn.select2?e.find("select").select2("destroy").end().clone(!0).removeClass("fieldmap-template"):e.clone(!0);c(t).attr("data-key",a),c(t).each(function(){c(this).html(function(e,t){return t.replace(s,a)})}),c("table.fields tbody").append(t),jQuery.fn.select2&&(e.find("select").select2(),t.find("select").select2())}(o,s,a),c(this).parent().find(".missing-object").remove()):c(this).parent().prepend('
You have to pick a WordPress object and a Salesforce object to add field mapping.
'),!1})}function a(){var e={action:"refresh_mapped_data",mapping_id:c("#mapping_id_ajax").val()};c.post(ajaxurl,e,function(e){!0===e.success&&(c("td.last_sync_message").text(e.data.last_sync_message),c("td.last_sync_action").text(e.data.last_sync_action),c("td.last_sync_status").text(e.data.last_sync_status),c("td.last_sync").text(e.data.last_sync),"1"===e.data.last_sync_status&&c("td.last_sync_status").text("success"))})}function o(){0This object has been pushed to Salesforce.

").fadeIn().delay(4e3).fadeOut())}),!1}),c(".pull_from_salesforce_button").on("click",function(){var e={action:"pull_from_salesforce",salesforce_id:c("#salesforce_id_ajax").val(),wordpress_object:c("#wordpress_object_ajax").val()};return c.post(ajaxurl,e,function(e){!0===e.success&&(a(),c(".salesforce_user_ajax_message").width(c(".mapped-salesforce-user").width()-27),c(".salesforce_user_ajax_message").html("

This object has been pulled from Salesforce.

").fadeIn().delay(4e3).fadeOut())}),!1})}),c(document).on("change",".object-sync-for-salesforce-enable-soap input",function(){o()}),c(document).ready(function(){o()})}(jQuery); \ No newline at end of file +!function(c){"use strict";function e(){var s,e=function(e,t){clearTimeout(s),s=setTimeout(e,t)};(s=0)===c(".salesforce_record_types_allowed > *").length&&c(".salesforce_record_types_allowed").hide(),0===c(".salesforce_record_type_default > *").length&&c(".salesforce_record_type_default").hide(),0===c(".pull_trigger_field > *").length&&c(".pull_trigger_field").hide(),c("#salesforce_object").on("change",function(){var t=this;e(function(){var e={action:"get_salesforce_object_description",include:["fields","recordTypeInfos"],field_type:"datetime",salesforce_object:t.value};c.post(ajaxurl,e,function(e){var s="",a="",o="";0Allowed Record Types:
',c.each(e.data.recordTypeInfos,function(e,t){s+='"}),s+="
",a+='',a+='',c.each(e.data.fields,function(e,t){o+='"}),o+="",o+='

These are date fields that can cause WordPress to pull an update from Salesforce, according to the salesforce_pull class.

'),c(".pull_trigger_field").html(o),""!==s?c(".salesforce_record_types_allowed").show():c(".salesforce_record_types_allowed").hide(),""!==a?c(".salesforce_record_type_default").show():c(".salesforce_record_type_default").hide(),""!==o?c(".pull_trigger_field").show():c(".pull_trigger_field").hide(),jQuery.fn.select2&&(c("select#salesforce_record_type_default").select2(),c("select#pull_trigger_field").select2())})},1e3)})}function t(s,e){var t={action:"get_"+s+"_object_fields"},a=".column-"+s+"_field select",o="",l=c(a+" option").first().text();if(""===c(a).val()){if(o+='","wordpress"===s)t.wordpress_object=e;else{if("salesforce"!==s)return o;t.salesforce_object=e}c.ajax({type:"POST",url:ajaxurl,data:t,beforeSend:function(){c(".spinner-"+s).addClass("is-active")},success:function(e){c.each(e.data.fields,function(e,t){"wordpress"===s?o+='":"salesforce"===s&&(o+='")}),c(a).html(o)},complete:function(){c(".spinner-"+s).removeClass("is-active")}})}}function s(){c("#add-field-mapping").click(function(){var e=c("#salesforce_object").val(),t=c("#wordpress_object").val(),s=(new Date).getUTCMilliseconds(),a=c("table.fields tbody tr").last(),o=a.attr("data-key");return o=new RegExp(o,"g"),c(this).text("Add another field mapping"),""!==t&&""!==e?(function(s,a,e){var t="";t=jQuery.fn.select2?e.find("select").select2("destroy").end().clone(!0).removeClass("fieldmap-template"):e.clone(!0);c(t).attr("data-key",a),c(t).each(function(){c(this).html(function(e,t){return t.replace(s,a)})}),c("table.fields tbody").append(t),jQuery.fn.select2&&(e.find("select").select2(),t.find("select").select2())}(o,s,a),c(this).parent().find(".missing-object").remove()):c(this).parent().prepend('
You have to pick a WordPress object and a Salesforce object to add field mapping.
'),!1})}function a(){var e={action:"refresh_mapped_data",mapping_id:c("#mapping_id_ajax").val()};c.post(ajaxurl,e,function(e){!0===e.success&&(c("td.last_sync_message").text(e.data.last_sync_message),c("td.last_sync_action").text(e.data.last_sync_action),c("td.last_sync_status").text(e.data.last_sync_status),c("td.last_sync").text(e.data.last_sync),"1"===e.data.last_sync_status&&c("td.last_sync_status").text("success"))})}function o(){0This object has been pushed to Salesforce.

").fadeIn().delay(4e3).fadeOut())}),!1}),c(".salesforce_user_ajax_message").hide(),c(".pull_from_salesforce_button").on("click",function(){var e={action:"pull_from_salesforce",salesforce_id:c("#salesforce_id_ajax").val(),wordpress_object:c("#wordpress_object_ajax").val()};return c.post(ajaxurl,e,function(e){!0===e.success&&(a(),c(".salesforce_user_ajax_message").width(c(".mapped-salesforce-user").width()-27),c(".salesforce_user_ajax_message").html("

This object has been pulled from Salesforce.

").fadeIn().delay(4e3).fadeOut())}),!1})}),c(document).on("change",".object-sync-for-salesforce-enable-soap input",function(){o()}),c(document).ready(function(){o()})}(jQuery); \ No newline at end of file diff --git a/assets/js/src/04-interface-ajax-events.js b/assets/js/src/04-interface-ajax-events.js index fc4cc41a..0262b3bc 100644 --- a/assets/js/src/04-interface-ajax-events.js +++ b/assets/js/src/04-interface-ajax-events.js @@ -1,7 +1,7 @@ /** - * Handle manual push and pull of objects + * Handle manual push of objects to Salesforce */ -function pushAndPullObjects() { +function pushObjects() { $( '.salesforce_user_ajax_message' ).hide(); if ( 0 < $( '#wordpress_object_ajax' ).length ) { $( '.push_to_salesforce_button' ).on( 'click', function() { @@ -24,6 +24,13 @@ function pushAndPullObjects() { return false; } ); } +} + +/** + * Handle manual pull of objects from Salesforce + */ +function pullObjects() { + $( '.salesforce_user_ajax_message' ).hide(); $( '.pull_from_salesforce_button' ).on( 'click', function() { var salesforceId = $( '#salesforce_id_ajax' ).val(); var wordpressObject = $( '#wordpress_object_ajax' ).val(); @@ -94,5 +101,8 @@ $( document ).ready( function() { clearSfwpCacheLink(); // Handle manual push and pull of objects - pushAndPullObjects(); + pushObjects(); + + // Handle manual pull of objects + pullObjects(); } ); From 5b8200b2b6ce4680e5dd994048c556758f229c35 Mon Sep 17 00:00:00 2001 From: Jonathan Stegall Date: Sun, 5 Jan 2020 21:14:39 -0600 Subject: [PATCH 26/27] more eslint --- assets/js/object-sync-for-salesforce-admin.js | 2 +- assets/js/src/03-fieldmap-rows.js | 6 +----- 2 files changed, 2 insertions(+), 6 deletions(-) diff --git a/assets/js/object-sync-for-salesforce-admin.js b/assets/js/object-sync-for-salesforce-admin.js index 2edf7001..9aab93bd 100644 --- a/assets/js/object-sync-for-salesforce-admin.js +++ b/assets/js/object-sync-for-salesforce-admin.js @@ -415,5 +415,5 @@ $(document).ready(function () { // Don't show the WSDL file field unless SOAP is enabled toggleSoapFields(); }); -//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIjAxLXNhbGVzZm9yY2Utb2JqZWN0LmpzIiwiMDItbG9hZC1maWVsZC1vcHRpb25zLmpzIiwiMDMtZmllbGRtYXAtcm93cy5qcyIsIjA0LWludGVyZmFjZS1hamF4LWV2ZW50cy5qcyIsIjA1LXNvYXAuanMiXSwibmFtZXMiOlsic2FsZXNmb3JjZU9iamVjdEZpZWxkcyIsImRlbGF5IiwidGltZXIiLCJjYWxsYmFjayIsIm1zIiwiY2xlYXJUaW1lb3V0Iiwic2V0VGltZW91dCIsIiQiLCJsZW5ndGgiLCJoaWRlIiwib24iLCJ0aGF0IiwiZGVsYXlUaW1lIiwiZGF0YSIsInZhbHVlIiwicG9zdCIsImFqYXh1cmwiLCJyZXNwb25zZSIsInJlY29yZFR5cGVzQWxsb3dlZE1hcmt1cCIsInJlY29yZFR5cGVEZWZhdWx0TWFya3VwIiwiZGF0ZU1hcmt1cCIsInJlY29yZFR5cGVJbmZvcyIsImVhY2giLCJpbmRleCIsImh0bWwiLCJmaWVsZHMiLCJuYW1lIiwibGFiZWwiLCJzaG93IiwialF1ZXJ5IiwiZm4iLCJzZWxlY3QyIiwiZG9jdW1lbnQiLCJyZWFkeSIsImxvYWRGaWVsZE9wdGlvbnMiLCJzeXN0ZW0iLCJvYmplY3ROYW1lIiwic2VsZWN0RmllbGQiLCJmaXJzdEZpZWxkIiwiZmlyc3QiLCJ0ZXh0IiwidmFsIiwiYWpheCIsInR5cGUiLCJ1cmwiLCJiZWZvcmVTZW5kIiwiYWRkQ2xhc3MiLCJzdWNjZXNzIiwia2V5IiwiY29tcGxldGUiLCJyZW1vdmVDbGFzcyIsInRpbWVvdXQiLCJmYWRlT3V0Iiwibm90IiwicmVtb3ZlIiwiYWRkRmllbGRNYXBwaW5nUm93IiwiY2xpY2siLCJzYWxlc2ZvcmNlT2JqZWN0Iiwid29yZHByZXNzT2JqZWN0IiwibmV3S2V5IiwiRGF0ZSIsImdldFVUQ01pbGxpc2Vjb25kcyIsImxhc3RSb3ciLCJsYXN0Iiwib2xkS2V5IiwiYXR0ciIsIlJlZ0V4cCIsImZpZWxkbWFwRmllbGRzIiwicGFyZW50IiwiZmluZCIsInByZXBlbmQiLCJuZXh0Um93IiwiZW5kIiwiY2xvbmUiLCJpIiwiaCIsInJlcGxhY2UiLCJhcHBlbmQiLCJwcm9wIiwicHVzaE9iamVjdHMiLCJ3b3JkcHJlc3NJZCIsInNhbGVzZm9yY2VJZCIsInVwZGF0ZVNhbGVzZm9yY2VVc2VyU3VtbWFyeSIsIndpZHRoIiwiZmFkZUluIiwicHVsbE9iamVjdHMiLCJtYXBwaW5nSWQiLCJsYXN0X3N5bmNfbWVzc2FnZSIsImxhc3Rfc3luY19hY3Rpb24iLCJsYXN0X3N5bmNfc3RhdHVzIiwibGFzdF9zeW5jIiwiY2xlYXJTZndwQ2FjaGVMaW5rIiwibWVzc2FnZSIsInRvZ2dsZVNvYXBGaWVsZHMiLCJpcyJdLCJtYXBwaW5ncyI6Ijs7QUFBQTs7OztBQUlBLFNBQVNBLHNCQUFULEdBQWtDO0FBRWpDLE1BQUlDLEtBQUssR0FBSyxZQUFXO0FBQ3hCLFFBQUlDLEtBQUssR0FBRyxDQUFaO0FBQ0EsV0FBTyxVQUFVQyxRQUFWLEVBQW9CQyxFQUFwQixFQUF5QjtBQUMvQkMsTUFBQUEsWUFBWSxDQUFHSCxLQUFILENBQVo7QUFDQUEsTUFBQUEsS0FBSyxHQUFHSSxVQUFVLENBQUVILFFBQUYsRUFBWUMsRUFBWixDQUFsQjtBQUNBLEtBSEQ7QUFJQSxHQU5hLEVBQWQ7O0FBUUEsTUFBSyxNQUFNRyxDQUFDLENBQUUsc0NBQUYsQ0FBRCxDQUE0Q0MsTUFBdkQsRUFBZ0U7QUFDL0RELElBQUFBLENBQUMsQ0FBRSxrQ0FBRixDQUFELENBQXdDRSxJQUF4QztBQUNBOztBQUVELE1BQUssTUFBTUYsQ0FBQyxDQUFFLHFDQUFGLENBQUQsQ0FBMkNDLE1BQXRELEVBQStEO0FBQzlERCxJQUFBQSxDQUFDLENBQUUsaUNBQUYsQ0FBRCxDQUF1Q0UsSUFBdkM7QUFDQTs7QUFDRCxNQUFLLE1BQU1GLENBQUMsQ0FBRSx5QkFBRixDQUFELENBQStCQyxNQUExQyxFQUFtRDtBQUNsREQsSUFBQUEsQ0FBQyxDQUFFLHFCQUFGLENBQUQsQ0FBMkJFLElBQTNCO0FBQ0E7O0FBRURGLEVBQUFBLENBQUMs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RixDQUFDLENBQUV5QixRQUFGLENBQUQsQ0FBY3RCLEVBQWQsQ0FBa0IsUUFBbEIsRUFBNEIsK0NBQTVCLEVBQTZFLFlBQVc7QUFDdkZtRixFQUFBQSxnQkFBZ0I7QUFDaEIsQ0FGRDtBQUlBdEYsQ0FBQyxDQUFFeUIsUUFBRixDQUFELENBQWNDLEtBQWQsQ0FBcUIsWUFBVztBQUUvQjtBQUNBNEQsRUFBQUEsZ0JBQWdCO0FBQ2hCLENBSkQiLCJmaWxlIjoib2JqZWN0LXN5bmMtZm9yLXNhbGVzZm9yY2UtYWRtaW4uanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEdlbmVyYXRlcyB0aGUgU2FsZXNmb3JjZSBvYmplY3QgZmllbGRzIGJhc2VkIG9uIHRoZSBkcm9wZG93biBhY3Rpdml0eSBhbmQgQVBJIHJlc3VsdHMuXG4gKiBUaGlzIGFsc28gZ2VuZXJhdGVzIG90aGVyIHF1ZXJ5IGZpZWxkcyB0aGF0IGFyZSBvYmplY3Qtc3BlY2lmaWMsIGxpa2UgZGF0ZSBmaWVsZHMsIHJlY29yZCB0eXBlcyBhbGxvd2VkLCBldGMuXG4gKi9cbmZ1bmN0aW9uIHNhbGVzZm9yY2VPYmplY3RGaWVsZHMoKSB7XG5cblx0dmFyIGRlbGF5ID0gKCBmdW5jdGlvbigpIHtcblx0XHR2YXIgdGltZXIgPSAwO1xuXHRcdHJldHVybiBmdW5jdGlvbiggY2FsbGJhY2ssIG1zICkge1xuXHRcdFx0Y2xlYXJUaW1lb3V0ICggdGltZXIgKTtcblx0XHRcdHRpbWVyID0gc2V0VGltZW91dCggY2FsbGJhY2ssIG1zICk7XG5cdFx0fTtcblx0fSgpICk7XG5cblx0aWYgKCAwID09PSAkKCAnLnNhbGVzZm9yY2VfcmVjb3JkX3R5cGVzX2FsbG93ZWQgPiAqJyApLmxlbmd0aCApIHtcblx0XHQkKCAnLnNhbGVzZm9yY2VfcmVjb3JkX3R5cGVzX2FsbG93ZWQnICkuaGlkZSgpO1xuXHR9XG5cblx0aWYgKCAwID09PSAkKCAnLnNhbGVzZm9yY2VfcmVjb3JkX3R5cGVfZGVmYXVsdCA+IConICkubGVuZ3RoICkge1xuXHRcdCQoICcuc2FsZXNmb3JjZV9yZWNvcmRfdHlwZV9kZWZhdWx0JyApLmhpZGUoKTtcblx0fVxuXHRpZiAoIDAgPT09ICQoICcucHVsbF90cmlnZ2VyX2ZpZWxkID4gKicgKS5sZW5ndGggKSB7XG5cdFx0JCggJy5wdWxsX3RyaWdnZXJfZmllbGQnICkuaGlkZSgpO1xuXHR9XG5cblx0JCggJyNzYWxlc2ZvcmNlX29iamVjdCcgKS5vbiggJ2NoYW5nZScsIGZ1bmN0aW9uKCkge1xuXHRcdHZhciB0aGF0ID0gdGhpcztcblx0XHR2YXIgZGVsYXlUaW1lID0gMTAwMDtcblx0XHRkZWxheSggZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgZGF0YSA9IHtcblx0XHRcdFx0J2FjdGlvbic6ICdnZXRfc2FsZXNmb3JjZV9vYmplY3RfZGVzY3JpcHRpb24nLFxuXHRcdFx0XHQnaW5jbHVkZSc6IFsgJ2ZpZWxkcycsICdyZWNvcmRUeXBlSW5mb3MnIF0sXG5cdFx0XHRcdCdmaWVsZF90eXBlJzogJ2RhdGV0aW1lJyxcblx0XHRcdFx0J3NhbGVzZm9yY2Vfb2JqZWN0JzogdGhhdC52YWx1ZVxuXHRcdFx0fTtcblx0XHRcdCQucG9zdCggYWpheHVybCwgZGF0YSwgZnVuY3Rpb24oIHJlc3BvbnNlICkge1xuXHRcdFx0XHR2YXIgcmVjb3JkVHlwZXNBbGxvd2VkTWFya3VwID0gJyc7XG5cdFx0XHRcdHZhciByZWNvcmRUeXBlRGVmYXVsdE1hcmt1cCA9ICcnO1xuXHRcdFx0XHR2YXIgZGF0ZU1hcmt1cCA9ICcnO1xuXHRcdFx0XHRpZiAoIDAgPCAkKCByZXNwb25zZS5kYXRhLnJlY29yZFR5cGVJbmZvcyApLmxlbmd0aCApIHtcblx0XHRcdFx0XHRyZWNvcmRUeXBlc0FsbG93ZWRNYXJrdXAgKz0gJzxsYWJlbCBmb3I9XCJzYWxlc2ZvcmNlX3JlY29yZF90eXBlc19hbGxvd2VkXCI+QWxsb3dlZCBSZWNvcmQgVHlwZXM6PC9sYWJlbD48ZGl2IGNsYXNzPVwiY2hlY2tib3hlc1wiPic7XG5cdFx0XHRcdFx0JC5lYWNoKCByZXNwb25zZS5kYXRhLnJlY29yZFR5cGVJbmZvcywgZnVuY3Rpb24oIGluZGV4LCB2YWx1ZSApIHtcblx0XHRcdFx0XHRcdHJlY29yZFR5cGVzQWxsb3dlZE1hcmt1cCArPSAnPGxhYmVsPjxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBjbGFzcz1cImZvcm0tY2hlY2tib3hcIiB2YWx1ZT1cIicgKyBpbmRleCArICdcIiBuYW1lPVwic2FsZXNmb3JjZV9yZWNvcmRfdHlwZXNfYWxsb3dlZFsnICsgaW5kZXggKyAnXVwiIGlkPVwic2FsZXNmb3JjZV9yZWNvcmRfdHlwZXNfYWxsb3dlZC0nICsgaW5kZXggKyAnXCI+ICcgKyB2YWx1ZSArICc8L2xhYmVsPic7XG5cdFx0XHRcdFx0fSApO1xuXHRcdFx0XHRcdHJlY29yZFR5cGVzQWxsb3dlZE1hcmt1cCArPSAnPC9kaXY+Jztcblx0XHRcdFx0XHRyZWNvcmRUeXBlRGVmYXVsdE1hcmt1cCArPSAnPGxhYmVsIGZvcj1cInNhbGVzZm9yY2VfcmVjb3JkX3R5cGVfZGVmYXVsdFwiPkRlZmF1bHQgUmVjb3JkIFR5cGU6PC9sYWJlbD4nO1xuXHRcdFx0XHRcdHJlY29yZFR5cGVEZWZhdWx0TWFya3VwICs9ICc8c2VsZWN0IG5hbWU9XCJzYWxlc2ZvcmNlX3JlY29yZF90eXBlX2RlZmF1bHRcIiBpZD1cInNhbGVzZm9yY2VfcmVjb3JkX3R5cGVfZGVmYXVsdFwiPjxvcHRpb24gdmFsdWU9XCJcIj4tIFNlbGVjdCByZWNvcmQgdHlwZSAtPC9vcHRpb24+Jztcblx0XHRcdFx0XHQkLmVhY2goIHJlc3BvbnNlLmRhdGEucmVjb3JkVHlwZUluZm9zLCBmdW5jdGlvbiggaW5kZXgsIHZhbHVlICkge1xuXHRcdFx0XHRcdFx0cmVjb3JkVHlwZURlZmF1bHRNYXJrdXAgKz0gJzxvcHRpb24gdmFsdWU9XCInICsgaW5kZXggKyAnXCI+JyArIHZhbHVlICsgJzwvb3B0aW9uPic7XG5cdFx0XHRcdFx0fSApO1xuXHRcdFx0XHR9XG5cdFx0XHRcdCQoICcuc2FsZXNmb3JjZV9yZWNvcmRfdHlwZXNfYWxsb3dlZCcgKS5odG1sKCByZWNvcmRUeXBlc0FsbG93ZWRNYXJrdXAgKTtcblx0XHRcdFx0JCggJy5zYWxlc2ZvcmNlX3JlY29yZF90eXBlX2RlZmF1bHQnICkuaHRtbCggcmVjb3JkVHlwZURlZmF1bHRNYXJrdXAgKTtcblx0XHRcdFx0aWYgKCAwIDwgJCggcmVzcG9uc2UuZGF0YS5maWVsZHMgKS5sZW5ndGggKSB7XG5cdFx0XHRcdFx0ZGF0ZU1hcmt1cCArPSAnPGxhYmVsIGZvcj1cInB1bGxfdHJpZ2dlcl9maWVsZFwiPkRhdGUgZmllbGQgdG8gdHJpZ2dlciBwdWxsOjwvbGFiZWw+Jztcblx0XHRcdFx0XHRkYXRlTWFya3VwICs9ICc8c2VsZWN0IG5hbWU9XCJwdWxsX3RyaWdnZXJfZmllbGRcIiBpZD1cInB1bGxfdHJpZ2dlcl9maWVsZFwiPjxvcHRpb24gdmFsdWU9XCJcIj4tIFNlbGVjdCBkYXRlIGZpZWxkIC08L29wdGlvbj4nO1xuXHRcdFx0XHRcdCQuZWFjaCggcmVzcG9uc2UuZGF0YS5maWVsZHMsIGZ1bmN0aW9uKCBpbmRleCwgdmFsdWUgKSB7XG5cdFx0XHRcdFx0XHRkYXRlTWFya3VwICs9ICc8b3B0aW9uIHZhbHVlPVwiJyArIHZhbHVlLm5hbWUgKyAnXCI+JyArIHZhbHVlLmxhYmVsICsgJzwvb3B0aW9uPic7XG5cdFx0XHRcdFx0fSApO1xuXHRcdFx0XHRcdGRhdGVNYXJrdXAgKz0gJzwvc2VsZWN0Pic7XG5cdFx0XHRcdFx0ZGF0ZU1hcmt1cCArPSAnPHAgY2xhc3M9XCJkZXNjcmlwdGlvblwiPlRoZXNlIGFyZSBkYXRlIGZpZWxkcyB0aGF0IGNhbiBjYXVzZSBXb3JkUHJlc3MgdG8gcHVsbCBhbiB1cGRhdGUgZnJvbSBTYWxlc2ZvcmNlLCBhY2NvcmRpbmcgdG8gdGhlIDxjb2RlPnNhbGVzZm9yY2VfcHVsbDwvY29kZT4gY2xhc3MuPC9wPic7XG5cdFx0XHRcdH1cblx0XHRcdFx0JCggJy5wdWxsX3RyaWdnZXJfZmllbGQnICkuaHRtbCggZGF0ZU1hcmt1cCApO1xuXHRcdFx0XHRpZiAoICcnICE9PSByZWNvcmRUeXBlc0FsbG93ZWRNYXJrdXAgKSB7XG5cdFx0XHRcdFx0JCggJy5zYWxlc2ZvcmNlX3JlY29yZF90eXBlc19hbGxvd2VkJyApLnNob3coKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHQkKCAnLnNhbGVzZm9yY2VfcmVjb3JkX3R5cGVzX2FsbG93ZWQnICkuaGlkZSgpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmICggJycgIT09IHJlY29yZFR5cGVEZWZhdWx0TWFya3VwICkge1xuXHRcdFx0XHRcdCQoICcuc2FsZXNmb3JjZV9yZWNvcmRfdHlwZV9kZWZhdWx0JyApLnNob3coKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHQkKCAnLnNhbGVzZm9yY2VfcmVjb3JkX3R5cGVfZGVmYXVsdCcgKS5oaWRlKCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKCAnJyAhPT0gZGF0ZU1hcmt1cCApIHtcblx0XHRcdFx0XHQkKCAnLnB1bGxfdHJpZ2dlcl9maWVsZCcgKS5zaG93KCk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0JCggJy5wdWxsX3RyaWdnZXJfZmllbGQnICkuaGlkZSgpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmICggalF1ZXJ5LmZuLnNlbGVjdDIgKSB7XG5cdFx0XHRcdFx0JCggJ3NlbGVjdCNzYWxlc2ZvcmNlX3JlY29yZF90eXBlX2RlZmF1bHQnICkuc2VsZWN0MigpO1xuXHRcdFx0XHRcdCQoICdzZWxlY3QjcHVsbF90cmlnZ2VyX2ZpZWxkJyApLnNlbGVjdDIoKTtcblx0XHRcdFx0fVxuXHRcdFx0fSApO1xuXHRcdH0sIGRlbGF5VGltZSApO1xuXHR9ICk7XG59XG5cbi8qKlxuICogV2hlbiB0aGUgcGx1Z2luIGxvYWRzOlxuICogTWFuYWdlIHRoZSBkaXNwbGF5IGZvciBTYWxlc2ZvcmNlIG9iamVjdCBmaWVsZHMgYmFzZWQgb24gQVBJIHJlc3BvbnNlXG4gKi9cbiQoIGRvY3VtZW50ICkucmVhZHkoIGZ1bmN0aW9uKCkge1xuXG5cdC8vIGdldCB0aGUgYXZhaWxhYmxlIFNhbGVzZm9yY2Ugb2JqZWN0IGNob2ljZXNcblx0c2FsZXNmb3JjZU9iamVjdEZpZWxkcygpO1xufSApO1xuIiwiLyoqXG4gKiBHZXRzIHRoZSBXb3JkUHJlc3MgYW5kIFNhbGVzZm9yY2UgZmllbGQgcmVzdWx0cyB2aWEgYW4gQWpheCBjYWxsXG4gKiBAcGFyYW0ge3N0cmluZ30gc3lzdGVtIHdoZXRoZXIgd2Ugd2FudCBXb3JkUHJlc3Mgb3IgU2FsZXNmb3JjZSBkYXRhXG4gKiBAcGFyYW0ge3N0cmluZ30gb2JqZWN0TmFtZSB0aGUgdmFsdWUgZm9yIHRoZSBvYmplY3QgbmFtZSBmcm9tIHRoZSB0aGUgPHNlbGVjdD5cbiAqL1xuZnVuY3Rpb24gbG9hZEZpZWxkT3B0aW9ucyggc3lzdGVtLCBvYmplY3ROYW1lICkge1xuXHR2YXIgZGF0YSA9IHtcblx0XHQnYWN0aW9uJzogJ2dldF8nICsgc3lzdGVtICsgJ19vYmplY3RfZmllbGRzJ1xuXHR9O1xuXHR2YXIgc2VsZWN0RmllbGQgPSAnLmNvbHVtbi0nICsgc3lzdGVtICsgJ19maWVsZCBzZWxlY3QnO1xuXHR2YXIgZmllbGRzID0gJyc7XG5cdHZhciBmaXJzdEZpZWxkID0gJCggc2VsZWN0RmllbGQgKyAnIG9wdGlvbicgKS5maXJzdCgpLnRleHQoKTtcblx0aWYgKCAnJyAhPT0gJCggc2VsZWN0RmllbGQgKS52YWwoKSApIHtcblx0XHRyZXR1cm47XG5cdH1cblx0ZmllbGRzICs9ICc8b3B0aW9uIHZhbHVlPVwiXCI+JyArIGZpcnN0RmllbGQgKyAnPC9vcHRpb24+Jztcblx0aWYgKCAnd29yZHByZXNzJyA9PT0gc3lzdGVtICkge1xuXHRcdGRhdGFbJ3dvcmRwcmVzc19vYmplY3QnXSA9IG9iamVjdE5hbWU7XG5cdH0gZWxzZSBpZiAoICdzYWxlc2ZvcmNlJyA9PT0gc3lzdGVtICkge1xuXHRcdGRhdGFbJ3NhbGVzZm9yY2Vfb2JqZWN0J10gPSBvYmplY3ROYW1lO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBmaWVsZHM7XG5cdH1cblxuXHQkLmFqYXgoIHtcblx0XHR0eXBlOiAnUE9TVCcsXG5cdFx0dXJsOiBhamF4dXJsLFxuXHRcdGRhdGE6IGRhdGEsXG5cdFx0YmVmb3JlU2VuZDogZnVuY3Rpb24oKSB7XG5cdFx0XHQkKCAnLnNwaW5uZXItJyArIHN5c3RlbSApLmFkZENsYXNzKCAnaXMtYWN0aXZlJyApO1xuXHRcdH0sXG5cdFx0c3VjY2VzczogZnVuY3Rpb24oIHJlc3BvbnNlICkge1xuXHRcdFx0JC5lYWNoKCByZXNwb25zZS5kYXRhLmZpZWxkcywgZnVuY3Rpb24oIGluZGV4LCB2YWx1ZSApIHtcblx0XHRcdFx0aWYgKCAnd29yZHByZXNzJyA9PT0gc3lzdGVtICkge1xuXHRcdFx0XHRcdGZpZWxkcyArPSAnPG9wdGlvbiB2YWx1ZT1cIicgKyB2YWx1ZS5rZXkgKyAnXCI+JyArIHZhbHVlLmtleSArICc8L29wdGlvbj4nO1xuXHRcdFx0XHR9IGVsc2UgaWYgKCAnc2FsZXNmb3JjZScgPT09IHN5c3RlbSApIHtcblx0XHRcdFx0XHRmaWVsZHMgKz0gJzxvcHRpb24gdmFsdWU9XCInICsgdmFsdWUubmFtZSArICdcIj4nICsgdmFsdWUubGFiZWwgKyAnPC9vcHRpb24+Jztcblx0XHRcdFx0fVxuXHRcdFx0fSApO1xuXHRcdFx0JCggc2VsZWN0RmllbGQgKS5odG1sKCBmaWVsZHMgKTtcblx0XHR9LFxuXHRcdGNvbXBsZXRlOiBmdW5jdGlvbigpIHtcblx0XHRcdCQoICcuc3Bpbm5lci0nICsgc3lzdGVtICkucmVtb3ZlQ2xhc3MoICdpcy1hY3RpdmUnICk7XG5cdFx0fVxuXHR9ICk7XG59XG5cbi8vIGxvYWQgYXZhaWxhYmxlIG9wdGlvbnMgaWYgdGhlIHdvcmRwcmVzcyBvYmplY3QgY2hhbmdlc1xuJCggZG9jdW1lbnQgKS5vbiggJ2NoYW5nZScsICdzZWxlY3Qjd29yZHByZXNzX29iamVjdCcsIGZ1bmN0aW9uKCkge1xuXHR2YXIgdGltZW91dDtcblx0bG9hZEZpZWxkT3B0aW9ucyggJ3dvcmRwcmVzcycsICQoIHRoaXMgKS52YWwoKSApO1xuXHRjbGVhclRpbWVvdXQoIHRpbWVvdXQgKTtcblx0dGltZW91dCA9IHNldFRpbWVvdXQoIGZ1bmN0aW9uKCkge1xuXHRcdCQoICd0YWJsZS5maWVsZHMgdGJvZHkgdHInICkuZmFkZU91dCgpO1xuXHRcdCQoICd0YWJsZS5maWVsZHMgdGJvZHkgdHInICkubm90KCAnLmZpZWxkbWFwLXRlbXBsYXRlJyApLnJlbW92ZSgpO1xuXHR9LCAxMDAwICk7XG59ICk7XG5cbi8vIGxvYWQgYXZhaWxhYmxlIG9wdGlvbnMgaWYgdGhlIHNhbGVzZm9yY2Ugb2JqZWN0IGNoYW5nZXNcbiQoIGRvY3VtZW50ICkub24oICdjaGFuZ2UnLCAnc2VsZWN0I3NhbGVzZm9yY2Vfb2JqZWN0JywgZnVuY3Rpb24oKSB7XG5cdHZhciB0aW1lb3V0O1xuXHRsb2FkRmllbGRPcHRpb25zKCAnc2FsZXNmb3JjZScsICQoIHRoaXMgKS52YWwoKSApO1xuXHRjbGVhclRpbWVvdXQoIHRpbWVvdXQgKTtcblx0dGltZW91dCA9IHNldFRpbWVvdXQoIGZ1bmN0aW9uKCkge1xuXHRcdCQoICd0YWJsZS5maWVsZHMgdGJvZHkgdHInICkuZmFkZU91dCgpO1xuXHRcdCQoICd0YWJsZS5maWVsZHMgdGJvZHkgdHInICkubm90KCAnLmZpZWxkbWFwLXRlbXBsYXRlJyApLnJlbW92ZSgpO1xuXHR9LCAxMDAwICk7XG59ICk7XG5cbi8qKlxuICogV2hlbiB0aGUgcGx1Z2luIGxvYWRzOlxuICogQ2xlYXIgZmllbGRzIHdoZW4gdGhlIHRhcmdldGVkIFdvcmRQcmVzcyBvciBTYWxlc2ZvcmNlIG9iamVjdCB0eXBlIGNoYW5nZXNcbiAqIE1hbmFnZSB0aGUgZGlzcGxheSBmb3IgU2FsZXNmb3JjZSBvYmplY3QgZmllbGRzIGJhc2VkIG9uIEFQSSByZXBvbnNlXG4gKi9cbiQoIGRvY3VtZW50ICkucmVhZHkoIGZ1bmN0aW9uKCkge1xuXG5cdC8vIGlmIHRoZXJlIGlzIGFscmVhZHkgYSB3cCBvciBzZiBvYmplY3QsIG1ha2Ugc3VyZSBpdCBoYXMgdGhlIHJpZ2h0IGZpZWxkcyB3aGVuIHRoZSBwYWdlIGxvYWRzXG5cdGxvYWRGaWVsZE9wdGlvbnMoICd3b3JkcHJlc3MnLCAkKCAnc2VsZWN0I3dvcmRwcmVzc19vYmplY3QnICkudmFsKCkgKTtcblx0bG9hZEZpZWxkT3B0aW9ucyggJ3NhbGVzZm9yY2UnLCAkKCAnc2VsZWN0I3NhbGVzZm9yY2Vfb2JqZWN0JyApLnZhbCgpICk7XG59ICk7XG4iLCJcbi8qKlxuICogRHVwbGljYXRlcyB0aGUgZmllbGRzIGZvciBhIG5ldyByb3cgaW4gdGhlIGZpZWxkbWFwIG9wdGlvbnMgc2NyZWVuLlxuICogdGhpcyBhcHBlYXJzIG5vdCB0byB3b3JrIHdpdGggZGF0YSgpIGluc3RlYWQgb2YgYXR0cigpXG4gKi9cbiBmdW5jdGlvbiBhZGRGaWVsZE1hcHBpbmdSb3coKSB7XG5cdCQoICcjYWRkLWZpZWxkLW1hcHBpbmcnICkuY2xpY2soIGZ1bmN0aW9uKCkge1xuXHRcdHZhciBzYWxlc2ZvcmNlT2JqZWN0ID0gJCggJyNzYWxlc2ZvcmNlX29iamVjdCcgKS52YWwoKTtcblx0XHR2YXIgd29yZHByZXNzT2JqZWN0ID0gJCggJyN3b3JkcHJlc3Nfb2JqZWN0JyApLnZhbCgpO1xuXHRcdHZhciBuZXdLZXkgPSBuZXcgRGF0ZSgpLmdldFVUQ01pbGxpc2Vjb25kcygpO1xuXHRcdHZhciBsYXN0Um93ID0gJCggJ3RhYmxlLmZpZWxkcyB0Ym9keSB0cicgKS5sYXN0KCk7XG5cdFx0dmFyIG9sZEtleSA9IGxhc3RSb3cuYXR0ciggJ2RhdGEta2V5JyApO1xuXHRcdG9sZEtleSA9IG5ldyBSZWdFeHAoIG9sZEtleSwgJ2cnICk7XG5cdFx0JCggdGhpcyApLnRleHQoICdBZGQgYW5vdGhlciBmaWVsZCBtYXBwaW5nJyApO1xuXHRcdGlmICggJycgIT09IHdvcmRwcmVzc09iamVjdCAmJiAnJyAhPT0gc2FsZXNmb3JjZU9iamVjdCApIHtcblx0XHRcdGZpZWxkbWFwRmllbGRzKCBvbGRLZXksIG5ld0tleSwgbGFzdFJvdyApO1xuXHRcdFx0JCggdGhpcyApLnBhcmVudCgpLmZpbmQoICcubWlzc2luZy1vYmplY3QnICkucmVtb3ZlKCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdCQoIHRoaXMgKS5wYXJlbnQoKS5wcmVwZW5kKCAnPGRpdiBjbGFzcz1cImVycm9yIG1pc3Npbmctb2JqZWN0XCI+PHNwYW4+WW91IGhhdmUgdG8gcGljayBhIFdvcmRQcmVzcyBvYmplY3QgYW5kIGEgU2FsZXNmb3JjZSBvYmplY3QgdG8gYWRkIGZpZWxkIG1hcHBpbmcuPC9zcGFuPjwvZGl2PicgKTtcblx0XHR9XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9ICk7XG59XG5cbi8qKlxuICogQ2xvbmVzIHRoZSBmaWVsZHNldCBtYXJrdXAgcHJvdmlkZWQgYnkgdGhlIHNlcnZlci1zaWRlIHRlbXBsYXRlIGFuZCBhcHBlbmRzIGl0IGF0IHRoZSBlbmQuXG4gKiB0aGlzIGFwcGVhcnMgbm90IHRvIHdvcmsgd2l0aCBkYXRhKCkgaW5zdGVhZCBvZiBhdHRyKClcbiAqIEBwYXJhbSB7c3RyaW5nfSBvbGRLZXkgdGhlIGRhdGEga2V5IGF0dHJpYnV0ZSBvZiB0aGUgc2V0IHRoYXQgaXMgYmVpbmcgY2xvbmVkXG4gKiBAcGFyYW0ge3N0cmluZ30gbmV3S2V5IHRoZSBkYXRhIGtleSBhdHRyaWJ1dGUgZm9yIHRoZSBvbmUgd2UncmUgYXBwZW5kaW5nXG4gKiBAcGFyYW0ge29iamVjdH0gbGFzdFJvdyB0aGUgbGFzdCBzZXQgb2YgdGhlIGZpZWxkbWFwXG4gKi9cbmZ1bmN0aW9uIGZpZWxkbWFwRmllbGRzKCBvbGRLZXksIG5ld0tleSwgbGFzdFJvdyApIHtcblx0dmFyIG5leHRSb3cgPSAnJztcbiAgICBpZiAoIGpRdWVyeS5mbi5zZWxlY3QyICkge1xuICAgIFx0bmV4dFJvdyA9IGxhc3RSb3cuZmluZCggJ3NlbGVjdCcgKVxuICAgIFx0XHQuc2VsZWN0MiggJ2Rlc3Ryb3knIClcbiAgICBcdFx0LmVuZCgpXG4gICAgXHRcdC5jbG9uZSggdHJ1ZSApXG4gICAgXHRcdC5yZW1vdmVDbGFzcyggJ2ZpZWxkbWFwLXRlbXBsYXRlJyApO1xuICAgIH0gZWxzZSB7XG4gICAgXHRuZXh0Um93ID0gbGFzdFJvdy5jbG9uZSggdHJ1ZSApO1xuICAgIH1cblx0JCggbmV4dFJvdyApLmF0dHIoICdkYXRhLWtleScsIG5ld0tleSApO1xuXHQkKCBuZXh0Um93ICkuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0JCggdGhpcyApLmh0bWwoIGZ1bmN0aW9uKCBpLCBoICkge1xuXHRcdFx0cmV0dXJuIGgucmVwbGFjZSggb2xkS2V5LCBuZXdLZXkgKTtcblx0XHR9ICk7XG5cdH0gKTtcblx0JCggJ3RhYmxlLmZpZWxkcyB0Ym9keScgKS5hcHBlbmQoIG5leHRSb3cgKTtcblx0aWYgKCBqUXVlcnkuZm4uc2VsZWN0MiApIHtcblx0XHRsYXN0Um93LmZpbmQoICdzZWxlY3QnICkuc2VsZWN0MigpO1xuXHRcdG5leHRSb3cuZmluZCggJ3NlbGVjdCcgKS5zZWxlY3QyKCk7XG5cdH1cbn1cblxuLyoqXG4gKiBBcyB0aGUgRHJ1cGFsIHBsdWdpbiBkb2VzLCB3ZSBvbmx5IGFsbG93IG9uZSBmaWVsZCB0byBiZSBhIHByZW1hdGNoXG4gKi9cbiQoIGRvY3VtZW50ICkub24oICdjbGljaycsICcuY29sdW1uLWlzX3ByZW1hdGNoIGlucHV0JywgZnVuY3Rpb24oKSB7XG5cdCQoICcuY29sdW1uLWlzX3ByZW1hdGNoIGlucHV0JyApLm5vdCggdGhpcyApLnByb3AoICdjaGVja2VkJywgZmFsc2UgKTtcbn0gKTtcblxuLyoqXG4gKiBBcyB0aGUgRHJ1cGFsIHBsdWdpbiBkb2VzLCB3ZSBvbmx5IGFsbG93IG9uZSBmaWVsZCB0byBiZSBhIGtleVxuICovXG4kKCBkb2N1bWVudCApLm9uKCAnY2xpY2snLCAnLmNvbHVtbi1pc19rZXkgaW5wdXQnLCBmdW5jdGlvbigpIHtcblx0JCggJy5jb2x1bW4taXNfa2V5IGlucHV0JyApLm5vdCggdGhpcyApLnByb3AoICdjaGVja2VkJywgZmFsc2UgKTtcbn0gKTtcblxuLyoqXG4gKiBXaGVuIHRoZSBwbHVnaW4gbG9hZHM6XG4gKiBBZGQgbmV3IGZpZWxkbWFwIHJvd3NcbiAqIFNlbGVjdDIgb24gc2VsZWN0IGZpZWxkc1xuICovXG4kKCBkb2N1bWVudCApLnJlYWR5KCBmdW5jdGlvbigpIHtcblxuXHQvLyBEdXBsaWNhdGUgdGhlIGZpZWxkcyBmb3IgYSBuZXcgcm93IGluIHRoZSBmaWVsZG1hcCBvcHRpb25zIHNjcmVlbi5cblx0YWRkRmllbGRNYXBwaW5nUm93KCk7XG5cblx0Ly8gc2V0dXAgdGhlIHNlbGVjdDIgZmllbGRzIGlmIHRoZSBsaWJyYXJ5IGlzIHByZXNlbnRcblx0aWYgKCBqUXVlcnkuZm4uc2VsZWN0MiApIHtcblx0XHQkKCAnc2VsZWN0I3dvcmRwcmVzc19vYmplY3QnICkuc2VsZWN0MigpO1xuXHRcdCQoICdzZWxlY3Qjc2FsZXNmb3JjZV9vYmplY3QnICkuc2VsZWN0MigpO1xuXHRcdCQoICdzZWxlY3Qjc2FsZXNmb3JjZV9yZWNvcmRfdHlwZV9kZWZhdWx0JyApLnNlbGVjdDIoKTtcblx0XHQkKCAnc2VsZWN0I3B1bGxfdHJpZ2dlcl9maWVsZCcgKS5zZWxlY3QyKCk7XG5cdFx0JCggJy5jb2x1bW4td29yZHByZXNzX2ZpZWxkIHNlbGVjdCcgKS5zZWxlY3QyKCk7XG5cdFx0JCggJy5jb2x1bW4tc2FsZXNmb3JjZV9maWVsZCBzZWxlY3QnICkuc2VsZWN0MigpO1xuXHR9XG59ICk7XG4iLCIvKipcbiAqIEhhbmRsZSBtYW51YWwgcHVzaCBvZiBvYmplY3RzIHRvIFNhbGVzZm9yY2VcbiAqL1xuZnVuY3Rpb24gcHVzaE9iamVjdHMoKSB7XG5cdCQoICcuc2FsZXNmb3JjZV91c2VyX2FqYXhfbWVzc2FnZScgKS5oaWRlKCk7XG5cdGlmICggMCA8ICQoICcjd29yZHByZXNzX29iamVjdF9hamF4JyApLmxlbmd0aCApIHtcblx0XHQkKCAnLnB1c2hfdG9fc2FsZXNmb3JjZV9idXR0b24nICkub24oICdjbGljaycsIGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIHdvcmRwcmVzc09iamVjdCA9ICQoICcjd29yZHByZXNzX29iamVjdF9hamF4JyApLnZhbCgpO1xuXHRcdFx0dmFyIHdvcmRwcmVzc0lkID0gJCggJyN3b3JkcHJlc3NfaWRfYWpheCcgKS52YWwoKTtcblx0XHRcdHZhciBzYWxlc2ZvcmNlSWQgPSAkKCAnI3NhbGVzZm9yY2VfaWRfYWpheCcgKS52YWwoKTtcblx0XHRcdHZhciBkYXRhID0ge1xuXHRcdFx0XHQnYWN0aW9uJzogJ3B1c2hfdG9fc2FsZXNmb3JjZScsXG5cdFx0XHRcdCd3b3JkcHJlc3Nfb2JqZWN0Jzogd29yZHByZXNzT2JqZWN0LFxuXHRcdFx0XHQnd29yZHByZXNzX2lkJzogd29yZHByZXNzSWQsXG5cdFx0XHRcdCdzYWxlc2ZvcmNlX2lkJzogc2FsZXNmb3JjZUlkXG5cdFx0XHR9O1xuXHRcdFx0JC5wb3N0KCBhamF4dXJsLCBkYXRhLCBmdW5jdGlvbiggcmVzcG9uc2UgKSB7XG5cdFx0XHRcdGlmICggdHJ1ZSA9PT0gcmVzcG9uc2Uuc3VjY2VzcyApIHtcblx0XHRcdFx0XHR1cGRhdGVTYWxlc2ZvcmNlVXNlclN1bW1hcnkoKTtcblx0XHRcdFx0XHQkKCAnLnNhbGVzZm9yY2VfdXNlcl9hamF4X21lc3NhZ2UnICkud2lkdGgoICQoICcubWFwcGVkLXNhbGVzZm9yY2UtdXNlcicgKS53aWR0aCgpIC0gMjcgKTtcblx0XHRcdFx0XHQkKCAnLnNhbGVzZm9yY2VfdXNlcl9hamF4X21lc3NhZ2UnICkuaHRtbCggJzxwPlRoaXMgb2JqZWN0IGhhcyBiZWVuIHB1c2hlZCB0byBTYWxlc2ZvcmNlLjwvcD4nICkuZmFkZUluKCkuZGVsYXkoIDQwMDAgKS5mYWRlT3V0KCk7XG5cdFx0XHRcdH1cblx0XHRcdH0gKTtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9ICk7XG5cdH1cbn1cblxuLyoqXG4gKiBIYW5kbGUgbWFudWFsIHB1bGwgb2Ygb2JqZWN0cyBmcm9tIFNhbGVzZm9yY2VcbiAqL1xuZnVuY3Rpb24gcHVsbE9iamVjdHMoKSB7XG5cdCQoICcuc2FsZXNmb3JjZV91c2VyX2FqYXhfbWVzc2FnZScgKS5oaWRlKCk7XG5cdCQoICcucHVsbF9mcm9tX3NhbGVzZm9yY2VfYnV0dG9uJyApLm9uKCAnY2xpY2snLCBmdW5jdGlvbigpIHtcblx0XHR2YXIgc2FsZXNmb3JjZUlkID0gJCggJyNzYWxlc2ZvcmNlX2lkX2FqYXgnICkudmFsKCk7XG5cdFx0dmFyIHdvcmRwcmVzc09iamVjdCA9ICQoICcjd29yZHByZXNzX29iamVjdF9hamF4JyApLnZhbCgpO1xuXHRcdHZhciBkYXRhID0ge1xuXHRcdFx0J2FjdGlvbic6ICdwdWxsX2Zyb21fc2FsZXNmb3JjZScsXG5cdFx0XHQnc2FsZXNmb3JjZV9pZCc6IHNhbGVzZm9yY2VJZCxcblx0XHRcdCd3b3JkcHJlc3Nfb2JqZWN0Jzogd29yZHByZXNzT2JqZWN0XG5cdFx0fTtcblx0XHQkLnBvc3QoIGFqYXh1cmwsIGRhdGEsIGZ1bmN0aW9uKCByZXNwb25zZSApIHtcblx0XHRcdGlmICggdHJ1ZSA9PT0gcmVzcG9uc2Uuc3VjY2VzcyApIHtcblx0XHRcdFx0dXBkYXRlU2FsZXNmb3JjZVVzZXJTdW1tYXJ5KCk7XG5cdFx0XHRcdCQoICcuc2FsZXNmb3JjZV91c2VyX2FqYXhfbWVzc2FnZScgKS53aWR0aCggJCggJy5tYXBwZWQtc2FsZXNmb3JjZS11c2VyJyApLndpZHRoKCkgLSAyNyApO1xuXHRcdFx0XHQkKCAnLnNhbGVzZm9yY2VfdXNlcl9hamF4X21lc3NhZ2UnICkuaHRtbCggJzxwPlRoaXMgb2JqZWN0IGhhcyBiZWVuIHB1bGxlZCBmcm9tIFNhbGVzZm9yY2UuPC9wPicgKS5mYWRlSW4oKS5kZWxheSggNDAwMCApLmZhZGVPdXQoKTtcblx0XHRcdH1cblx0XHR9ICk7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9ICk7XG59XG5cbi8qKlxuICogVXBkYXRlcyB0aGUgdXNlciBwcm9maWxlIHN1bW1hcnkgb2YgU2FsZXNmb3JjZSBpbmZvLlxuICovXG5mdW5jdGlvbiB1cGRhdGVTYWxlc2ZvcmNlVXNlclN1bW1hcnkoKSB7XG5cdHZhciBtYXBwaW5nSWQgPSAkKCAnI21hcHBpbmdfaWRfYWpheCcgKS52YWwoKTtcblx0dmFyIGRhdGEgPSB7XG5cdFx0J2FjdGlvbic6ICdyZWZyZXNoX21hcHBlZF9kYXRhJyxcblx0XHQnbWFwcGluZ19pZCc6IG1hcHBpbmdJZFxuXHR9O1xuXHQkLnBvc3QoIGFqYXh1cmwsIGRhdGEsIGZ1bmN0aW9uKCByZXNwb25zZSApIHtcblx0XHRpZiAoIHRydWUgPT09IHJlc3BvbnNlLnN1Y2Nlc3MgKSB7XG5cdFx0XHQkKCAndGQubGFzdF9zeW5jX21lc3NhZ2UnICkudGV4dCggcmVzcG9uc2UuZGF0YS5sYXN0X3N5bmNfbWVzc2FnZSApO1xuXHRcdFx0JCggJ3RkLmxhc3Rfc3luY19hY3Rpb24nICkudGV4dCggcmVzcG9uc2UuZGF0YS5sYXN0X3N5bmNfYWN0aW9uICk7XG5cdFx0XHQkKCAndGQubGFzdF9zeW5jX3N0YXR1cycgKS50ZXh0KCByZXNwb25zZS5kYXRhLmxhc3Rfc3luY19zdGF0dXMgKTtcblx0XHRcdCQoICd0ZC5sYXN0X3N5bmMnICkudGV4dCggcmVzcG9uc2UuZGF0YS5sYXN0X3N5bmMgKTtcblx0XHRcdGlmICggJzEnID09PSByZXNwb25zZS5kYXRhLmxhc3Rfc3luY19zdGF0dXMgKSB7XG5cdFx0XHRcdCQoICd0ZC5sYXN0X3N5bmNfc3RhdHVzJyApLnRleHQoICdzdWNjZXNzJyApO1xuXHRcdFx0fVxuXHRcdH1cblx0fSApO1xufVxuXG4vKipcbiAqIENsZWFyIHRoZSBwbHVnaW4gY2FjaGUgdmlhIEFqYXggcmVxdWVzdC5cbiAqL1xuZnVuY3Rpb24gY2xlYXJTZndwQ2FjaGVMaW5rKCkge1xuXHQkKCAnI2NsZWFyLXNmd3AtY2FjaGUnICkuY2xpY2soIGZ1bmN0aW9uKCkge1xuXHRcdHZhciBkYXRhID0ge1xuXHRcdFx0J2FjdGlvbic6ICdjbGVhcl9zZndwX2NhY2hlJ1xuXHRcdH07XG5cdFx0dmFyIHRoYXQgPSAkKCB0aGlzICk7XG5cdFx0JC5wb3N0KCBhamF4dXJsLCBkYXRhLCBmdW5jdGlvbiggcmVzcG9uc2UgKSB7XG5cdFx0XHRpZiAoIHRydWUgPT09IHJlc3BvbnNlLnN1Y2Nlc3MgJiYgdHJ1ZSA9PT0gcmVzcG9uc2UuZGF0YS5zdWNjZXNzICkge1xuXHRcdFx0XHR0aGF0LnBhcmVudCgpLmh0bWwoIHJlc3BvbnNlLmRhdGEubWVzc2FnZSApLmZhZGVJbigpO1xuXHRcdFx0fVxuXHRcdH0gKTtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH0gKTtcbn1cblxuLyoqXG4gKiBXaGVuIHRoZSBwbHVnaW4gbG9hZHM6XG4gKiBDbGVhciBwbHVnaW4gY2FjaGUgYnV0dG9uXG4gKiBNYW51YWwgcHVzaCBhbmQgcHVsbFxuICovXG4kKCBkb2N1bWVudCApLnJlYWR5KCBmdW5jdGlvbigpIHtcblxuXHQvLyBDbGVhciB0aGUgcGx1Z2luIGNhY2hlIHZpYSBBamF4IHJlcXVlc3QuXG5cdGNsZWFyU2Z3cENhY2hlTGluaygpO1xuXG5cdC8vIEhhbmRsZSBtYW51YWwgcHVzaCBhbmQgcHVsbCBvZiBvYmplY3RzXG5cdHB1c2hPYmplY3RzKCk7XG5cblx0Ly8gSGFuZGxlIG1hbnVhbCBwdWxsIG9mIG9iamVjdHNcblx0cHVsbE9iamVjdHMoKTtcbn0gKTtcbiIsIi8qKlxuICogRG9uJ3Qgc2hvdyB0aGUgV1NETCBmaWxlIGZpZWxkIHVubGVzcyBTT0FQIGlzIGVuYWJsZWRcbiAqL1xuZnVuY3Rpb24gdG9nZ2xlU29hcEZpZWxkcygpIHtcblx0aWYgKCAwIDwgJCggJy5vYmplY3Qtc3luYy1mb3Itc2FsZXNmb3JjZS1lbmFibGUtc29hcCcgKS5sZW5ndGggKSB7XG5cdFx0aWYgKCAkKCAnLm9iamVjdC1zeW5jLWZvci1zYWxlc2ZvcmNlLWVuYWJsZS1zb2FwIGlucHV0JyApLmlzKCAnOmNoZWNrZWQnICkgKSB7XG5cdFx0XHQkKCAnLm9iamVjdC1zeW5jLWZvci1zYWxlc2ZvcmNlLXNvYXAtd3NkbC1wYXRoJyApLnNob3coKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0JCggJy5vYmplY3Qtc3luYy1mb3Itc2FsZXNmb3JjZS1zb2FwLXdzZGwtcGF0aCcgKS5oaWRlKCk7XG5cdFx0fVxuXHR9XG59XG5cbi8vIERvbid0IHNob3cgdGhlIFdTREwgZmlsZSBmaWVsZCB1bmxlc3MgU09BUCBpcyBlbmFibGVkXG4kKCBkb2N1bWVudCApLm9uKCAnY2hhbmdlJywgJy5vYmplY3Qtc3luYy1mb3Itc2FsZXNmb3JjZS1lbmFibGUtc29hcCBpbnB1dCcsIGZ1bmN0aW9uKCkge1xuXHR0b2dnbGVTb2FwRmllbGRzKCk7XG59ICk7XG5cbiQoIGRvY3VtZW50ICkucmVhZHkoIGZ1bmN0aW9uKCkge1xuXG5cdC8vIERvbid0IHNob3cgdGhlIFdTREwgZmlsZSBmaWVsZCB1bmxlc3MgU09BUCBpcyBlbmFibGVkXG5cdHRvZ2dsZVNvYXBGaWVsZHMoKTtcbn0gKTtcbiJdfQ== +//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIjAxLXNhbGVzZm9yY2Utb2JqZWN0LmpzIiwiMDItbG9hZC1maWVsZC1vcHRpb25zLmpzIiwiMDMtZmllbGRtYXAtcm93cy5qcyIsIjA0LWludGVyZmFjZS1hamF4LWV2ZW50cy5qcyIsIjA1LXNvYXAuanMiXSwibmFtZXMiOlsic2FsZXNmb3JjZU9iamVjdEZpZWxkcyIsImRlbGF5IiwidGltZXIiLCJjYWxsYmFjayIsIm1zIiwiY2xlYXJUaW1lb3V0Iiwic2V0VGltZW91dCIsIiQiLCJsZW5ndGgiLCJoaWRlIiwib24iLCJ0aGF0IiwiZGVsYXlUaW1lIiwiZGF0YSIsInZhbHVlIiwicG9zdCIsImFqYXh1cmwiLCJyZXNwb25zZSIsInJlY29yZFR5cGVzQWxsb3dlZE1hcmt1cCIsInJlY29yZFR5cGVEZWZhdWx0TWFya3VwIiwiZGF0ZU1hcmt1cCIsInJlY29yZFR5cGVJbmZvcyIsImVhY2giLCJpbmRleCIsImh0bWwiLCJmaWVsZHMiLCJuYW1lIiwibGFiZWwiLCJzaG93IiwialF1ZXJ5IiwiZm4iLCJzZWxlY3QyIiwiZG9jdW1lbnQiLCJyZWFkeSIsImxvYWRGaWVsZE9wdGlvbnMiLCJzeXN0ZW0iLCJvYmplY3ROYW1lIiwic2VsZWN0RmllbGQiLCJmaXJzdEZpZWxkIiwiZmlyc3QiLCJ0ZXh0IiwidmFsIiwiYWpheCIsInR5cGUiLCJ1cmwiLCJiZWZvcmVTZW5kIiwiYWRkQ2xhc3MiLCJzdWNjZXNzIiwia2V5IiwiY29tcGxldGUiLCJyZW1vdmVDbGFzcyIsInRpbWVvdXQiLCJmYWRlT3V0Iiwibm90IiwicmVtb3ZlIiwiYWRkRmllbGRNYXBwaW5nUm93IiwiY2xpY2siLCJzYWxlc2ZvcmNlT2JqZWN0Iiwid29yZHByZXNzT2JqZWN0IiwibmV3S2V5IiwiRGF0ZSIsImdldFVUQ01pbGxpc2Vjb25kcyIsImxhc3RSb3ciLCJsYXN0Iiwib2xkS2V5IiwiYXR0ciIsIlJlZ0V4cCIsImZpZWxkbWFwRmllbGRzIiwicGFyZW50IiwiZmluZCIsInByZXBlbmQiLCJuZXh0Um93IiwiZW5kIiwiY2xvbmUiLCJpIiwiaCIsInJlcGxhY2UiLCJhcHBlbmQiLCJwcm9wIiwicHVzaE9iamVjdHMiLCJ3b3JkcHJlc3NJZCIsInNhbGVzZm9yY2VJZCIsInVwZGF0ZVNhbGVzZm9yY2VVc2VyU3VtbWFyeSIsIndpZHRoIiwiZmFkZUluIiwicHVsbE9iamVjdHMiLCJtYXBwaW5nSWQiLCJsYXN0X3N5bmNfbWVzc2FnZSIsImxhc3Rfc3luY19hY3Rpb24iLCJsYXN0X3N5bmNfc3RhdHVzIiwibGFzdF9zeW5jIiwiY2xlYXJTZndwQ2FjaGVMaW5rIiwibWVzc2FnZSIsInRvZ2dsZVNvYXBGaWVsZHMiLCJpcyJdLCJtYXBwaW5ncyI6Ijs7QUFBQTs7OztBQUlBLFNBQVNBLHNCQUFULEdBQWtDO0FBRWpDLE1BQUlDLEtBQUssR0FBSyxZQUFXO0FBQ3hCLFFBQUlDLEtBQUssR0FBRyxDQUFaO0FBQ0EsV0FBTyxVQUFVQyxRQUFWLEVBQW9CQyxFQUFwQixFQUF5QjtBQUMvQkMsTUFBQUEsWUFBWSxDQUFHSCxLQUFILENBQVo7QUFDQUEsTUFBQUEsS0FBSyxHQUFHSSxVQUFVLENBQUVILFFBQUYsRUFBWUMsRUFBWixDQUFsQjtBQUNBLEtBSEQ7QUFJQSxHQU5hLEVBQWQ7O0FBUUEsTUFBSyxNQUFNRyxDQUFDLENBQUUsc0NBQUYsQ0FBRCxDQUE0Q0MsTUFBdkQsRUFBZ0U7QUFDL0RELElBQUFBLENBQUMsQ0FBRSxrQ0FBRixDQUFELENBQXdDRSxJQUF4QztBQUNBOztBQUVELE1BQUssTUFBTUYsQ0FBQyxDQUFFLHFDQUFGLENBQUQsQ0FBMkNDLE1BQXRELEVBQStEO0FBQzlERCxJQUFBQSxDQUFDLENBQUUsaUNBQUYsQ0FBRCxDQUF1Q0UsSUFBdkM7QUFDQTs7QUFDRCxNQUFLLE1BQU1GLENBQUMsQ0FBRSx5QkFBRixDQUFELENBQStCQyxNQUExQyxFQUFtRDtBQUNsREQsSUFBQUEsQ0FBQyxDQUFFLHFCQUFGLENBQUQsQ0FBMkJFLElBQTNCO0FBQ0E7O0FBRURGLEVBQUFBLENBQUMs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LEMsQ0FFRDs7O0FBQ0FGLENBQUMsQ0FBRXlCLFFBQUYsQ0FBRCxDQUFjdEIsRUFBZCxDQUFrQixRQUFsQixFQUE0QiwrQ0FBNUIsRUFBNkUsWUFBVztBQUN2Rm1GLEVBQUFBLGdCQUFnQjtBQUNoQixDQUZEO0FBSUF0RixDQUFDLENBQUV5QixRQUFGLENBQUQsQ0FBY0MsS0FBZCxDQUFxQixZQUFXO0FBRS9CO0FBQ0E0RCxFQUFBQSxnQkFBZ0I7QUFDaEIsQ0FKRCIsImZpbGUiOiJvYmplY3Qtc3luYy1mb3Itc2FsZXNmb3JjZS1hZG1pbi5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJhdGVzIHRoZSBTYWxlc2ZvcmNlIG9iamVjdCBmaWVsZHMgYmFzZWQgb24gdGhlIGRyb3Bkb3duIGFjdGl2aXR5IGFuZCBBUEkgcmVzdWx0cy5cbiAqIFRoaXMgYWxzbyBnZW5lcmF0ZXMgb3RoZXIgcXVlcnkgZmllbGRzIHRoYXQgYXJlIG9iamVjdC1zcGVjaWZpYywgbGlrZSBkYXRlIGZpZWxkcywgcmVjb3JkIHR5cGVzIGFsbG93ZWQsIGV0Yy5cbiAqL1xuZnVuY3Rpb24gc2FsZXNmb3JjZU9iamVjdEZpZWxkcygpIHtcblxuXHR2YXIgZGVsYXkgPSAoIGZ1bmN0aW9uKCkge1xuXHRcdHZhciB0aW1lciA9IDA7XG5cdFx0cmV0dXJuIGZ1bmN0aW9uKCBjYWxsYmFjaywgbXMgKSB7XG5cdFx0XHRjbGVhclRpbWVvdXQgKCB0aW1lciApO1xuXHRcdFx0dGltZXIgPSBzZXRUaW1lb3V0KCBjYWxsYmFjaywgbXMgKTtcblx0XHR9O1xuXHR9KCkgKTtcblxuXHRpZiAoIDAgPT09ICQoICcuc2FsZXNmb3JjZV9yZWNvcmRfdHlwZXNfYWxsb3dlZCA+IConICkubGVuZ3RoICkge1xuXHRcdCQoICcuc2FsZXNmb3JjZV9yZWNvcmRfdHlwZXNfYWxsb3dlZCcgKS5oaWRlKCk7XG5cdH1cblxuXHRpZiAoIDAgPT09ICQoICcuc2FsZXNmb3JjZV9yZWNvcmRfdHlwZV9kZWZhdWx0ID4gKicgKS5sZW5ndGggKSB7XG5cdFx0JCggJy5zYWxlc2ZvcmNlX3JlY29yZF90eXBlX2RlZmF1bHQnICkuaGlkZSgpO1xuXHR9XG5cdGlmICggMCA9PT0gJCggJy5wdWxsX3RyaWdnZXJfZmllbGQgPiAqJyApLmxlbmd0aCApIHtcblx0XHQkKCAnLnB1bGxfdHJpZ2dlcl9maWVsZCcgKS5oaWRlKCk7XG5cdH1cblxuXHQkKCAnI3NhbGVzZm9yY2Vfb2JqZWN0JyApLm9uKCAnY2hhbmdlJywgZnVuY3Rpb24oKSB7XG5cdFx0dmFyIHRoYXQgPSB0aGlzO1xuXHRcdHZhciBkZWxheVRpbWUgPSAxMDAwO1xuXHRcdGRlbGF5KCBmdW5jdGlvbigpIHtcblx0XHRcdHZhciBkYXRhID0ge1xuXHRcdFx0XHQnYWN0aW9uJzogJ2dldF9zYWxlc2ZvcmNlX29iamVjdF9kZXNjcmlwdGlvbicsXG5cdFx0XHRcdCdpbmNsdWRlJzogWyAnZmllbGRzJywgJ3JlY29yZFR5cGVJbmZvcycgXSxcblx0XHRcdFx0J2ZpZWxkX3R5cGUnOiAnZGF0ZXRpbWUnLFxuXHRcdFx0XHQnc2FsZXNmb3JjZV9vYmplY3QnOiB0aGF0LnZhbHVlXG5cdFx0XHR9O1xuXHRcdFx0JC5wb3N0KCBhamF4dXJsLCBkYXRhLCBmdW5jdGlvbiggcmVzcG9uc2UgKSB7XG5cdFx0XHRcdHZhciByZWNvcmRUeXBlc0FsbG93ZWRNYXJrdXAgPSAnJztcblx0XHRcdFx0dmFyIHJlY29yZFR5cGVEZWZhdWx0TWFya3VwID0gJyc7XG5cdFx0XHRcdHZhciBkYXRlTWFya3VwID0gJyc7XG5cdFx0XHRcdGlmICggMCA8ICQoIHJlc3BvbnNlLmRhdGEucmVjb3JkVHlwZUluZm9zICkubGVuZ3RoICkge1xuXHRcdFx0XHRcdHJlY29yZFR5cGVzQWxsb3dlZE1hcmt1cCArPSAnPGxhYmVsIGZvcj1cInNhbGVzZm9yY2VfcmVjb3JkX3R5cGVzX2FsbG93ZWRcIj5BbGxvd2VkIFJlY29yZCBUeXBlczo8L2xhYmVsPjxkaXYgY2xhc3M9XCJjaGVja2JveGVzXCI+Jztcblx0XHRcdFx0XHQkLmVhY2goIHJlc3BvbnNlLmRhdGEucmVjb3JkVHlwZUluZm9zLCBmdW5jdGlvbiggaW5kZXgsIHZhbHVlICkge1xuXHRcdFx0XHRcdFx0cmVjb3JkVHlwZXNBbGxvd2VkTWFya3VwICs9ICc8bGFiZWw+PGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGNsYXNzPVwiZm9ybS1jaGVja2JveFwiIHZhbHVlPVwiJyArIGluZGV4ICsgJ1wiIG5hbWU9XCJzYWxlc2ZvcmNlX3JlY29yZF90eXBlc19hbGxvd2VkWycgKyBpbmRleCArICddXCIgaWQ9XCJzYWxlc2ZvcmNlX3JlY29yZF90eXBlc19hbGxvd2VkLScgKyBpbmRleCArICdcIj4gJyArIHZhbHVlICsgJzwvbGFiZWw+Jztcblx0XHRcdFx0XHR9ICk7XG5cdFx0XHRcdFx0cmVjb3JkVHlwZXNBbGxvd2VkTWFya3VwICs9ICc8L2Rpdj4nO1xuXHRcdFx0XHRcdHJlY29yZFR5cGVEZWZhdWx0TWFya3VwICs9ICc8bGFiZWwgZm9yPVwic2FsZXNmb3JjZV9yZWNvcmRfdHlwZV9kZWZhdWx0XCI+RGVmYXVsdCBSZWNvcmQgVHlwZTo8L2xhYmVsPic7XG5cdFx0XHRcdFx0cmVjb3JkVHlwZURlZmF1bHRNYXJrdXAgKz0gJzxzZWxlY3QgbmFtZT1cInNhbGVzZm9yY2VfcmVjb3JkX3R5cGVfZGVmYXVsdFwiIGlkPVwic2FsZXNmb3JjZV9yZWNvcmRfdHlwZV9kZWZhdWx0XCI+PG9wdGlvbiB2YWx1ZT1cIlwiPi0gU2VsZWN0IHJlY29yZCB0eXBlIC08L29wdGlvbj4nO1xuXHRcdFx0XHRcdCQuZWFjaCggcmVzcG9uc2UuZGF0YS5yZWNvcmRUeXBlSW5mb3MsIGZ1bmN0aW9uKCBpbmRleCwgdmFsdWUgKSB7XG5cdFx0XHRcdFx0XHRyZWNvcmRUeXBlRGVmYXVsdE1hcmt1cCArPSAnPG9wdGlvbiB2YWx1ZT1cIicgKyBpbmRleCArICdcIj4nICsgdmFsdWUgKyAnPC9vcHRpb24+Jztcblx0XHRcdFx0XHR9ICk7XG5cdFx0XHRcdH1cblx0XHRcdFx0JCggJy5zYWxlc2ZvcmNlX3JlY29yZF90eXBlc19hbGxvd2VkJyApLmh0bWwoIHJlY29yZFR5cGVzQWxsb3dlZE1hcmt1cCApO1xuXHRcdFx0XHQkKCAnLnNhbGVzZm9yY2VfcmVjb3JkX3R5cGVfZGVmYXVsdCcgKS5odG1sKCByZWNvcmRUeXBlRGVmYXVsdE1hcmt1cCApO1xuXHRcdFx0XHRpZiAoIDAgPCAkKCByZXNwb25zZS5kYXRhLmZpZWxkcyApLmxlbmd0aCApIHtcblx0XHRcdFx0XHRkYXRlTWFya3VwICs9ICc8bGFiZWwgZm9yPVwicHVsbF90cmlnZ2VyX2ZpZWxkXCI+RGF0ZSBmaWVsZCB0byB0cmlnZ2VyIHB1bGw6PC9sYWJlbD4nO1xuXHRcdFx0XHRcdGRhdGVNYXJrdXAgKz0gJzxzZWxlY3QgbmFtZT1cInB1bGxfdHJpZ2dlcl9maWVsZFwiIGlkPVwicHVsbF90cmlnZ2VyX2ZpZWxkXCI+PG9wdGlvbiB2YWx1ZT1cIlwiPi0gU2VsZWN0IGRhdGUgZmllbGQgLTwvb3B0aW9uPic7XG5cdFx0XHRcdFx0JC5lYWNoKCByZXNwb25zZS5kYXRhLmZpZWxkcywgZnVuY3Rpb24oIGluZGV4LCB2YWx1ZSApIHtcblx0XHRcdFx0XHRcdGRhdGVNYXJrdXAgKz0gJzxvcHRpb24gdmFsdWU9XCInICsgdmFsdWUubmFtZSArICdcIj4nICsgdmFsdWUubGFiZWwgKyAnPC9vcHRpb24+Jztcblx0XHRcdFx0XHR9ICk7XG5cdFx0XHRcdFx0ZGF0ZU1hcmt1cCArPSAnPC9zZWxlY3Q+Jztcblx0XHRcdFx0XHRkYXRlTWFya3VwICs9ICc8cCBjbGFzcz1cImRlc2NyaXB0aW9uXCI+VGhlc2UgYXJlIGRhdGUgZmllbGRzIHRoYXQgY2FuIGNhdXNlIFdvcmRQcmVzcyB0byBwdWxsIGFuIHVwZGF0ZSBmcm9tIFNhbGVzZm9yY2UsIGFjY29yZGluZyB0byB0aGUgPGNvZGU+c2FsZXNmb3JjZV9wdWxsPC9jb2RlPiBjbGFzcy48L3A+Jztcblx0XHRcdFx0fVxuXHRcdFx0XHQkKCAnLnB1bGxfdHJpZ2dlcl9maWVsZCcgKS5odG1sKCBkYXRlTWFya3VwICk7XG5cdFx0XHRcdGlmICggJycgIT09IHJlY29yZFR5cGVzQWxsb3dlZE1hcmt1cCApIHtcblx0XHRcdFx0XHQkKCAnLnNhbGVzZm9yY2VfcmVjb3JkX3R5cGVzX2FsbG93ZWQnICkuc2hvdygpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdCQoICcuc2FsZXNmb3JjZV9yZWNvcmRfdHlwZXNfYWxsb3dlZCcgKS5oaWRlKCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKCAnJyAhPT0gcmVjb3JkVHlwZURlZmF1bHRNYXJrdXAgKSB7XG5cdFx0XHRcdFx0JCggJy5zYWxlc2ZvcmNlX3JlY29yZF90eXBlX2RlZmF1bHQnICkuc2hvdygpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdCQoICcuc2FsZXNmb3JjZV9yZWNvcmRfdHlwZV9kZWZhdWx0JyApLmhpZGUoKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoICcnICE9PSBkYXRlTWFya3VwICkge1xuXHRcdFx0XHRcdCQoICcucHVsbF90cmlnZ2VyX2ZpZWxkJyApLnNob3coKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHQkKCAnLnB1bGxfdHJpZ2dlcl9maWVsZCcgKS5oaWRlKCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKCBqUXVlcnkuZm4uc2VsZWN0MiApIHtcblx0XHRcdFx0XHQkKCAnc2VsZWN0I3NhbGVzZm9yY2VfcmVjb3JkX3R5cGVfZGVmYXVsdCcgKS5zZWxlY3QyKCk7XG5cdFx0XHRcdFx0JCggJ3NlbGVjdCNwdWxsX3RyaWdnZXJfZmllbGQnICkuc2VsZWN0MigpO1xuXHRcdFx0XHR9XG5cdFx0XHR9ICk7XG5cdFx0fSwgZGVsYXlUaW1lICk7XG5cdH0gKTtcbn1cblxuLyoqXG4gKiBXaGVuIHRoZSBwbHVnaW4gbG9hZHM6XG4gKiBNYW5hZ2UgdGhlIGRpc3BsYXkgZm9yIFNhbGVzZm9yY2Ugb2JqZWN0IGZpZWxkcyBiYXNlZCBvbiBBUEkgcmVzcG9uc2VcbiAqL1xuJCggZG9jdW1lbnQgKS5yZWFkeSggZnVuY3Rpb24oKSB7XG5cblx0Ly8gZ2V0IHRoZSBhdmFpbGFibGUgU2FsZXNmb3JjZSBvYmplY3QgY2hvaWNlc1xuXHRzYWxlc2ZvcmNlT2JqZWN0RmllbGRzKCk7XG59ICk7XG4iLCIvKipcbiAqIEdldHMgdGhlIFdvcmRQcmVzcyBhbmQgU2FsZXNmb3JjZSBmaWVsZCByZXN1bHRzIHZpYSBhbiBBamF4IGNhbGxcbiAqIEBwYXJhbSB7c3RyaW5nfSBzeXN0ZW0gd2hldGhlciB3ZSB3YW50IFdvcmRQcmVzcyBvciBTYWxlc2ZvcmNlIGRhdGFcbiAqIEBwYXJhbSB7c3RyaW5nfSBvYmplY3ROYW1lIHRoZSB2YWx1ZSBmb3IgdGhlIG9iamVjdCBuYW1lIGZyb20gdGhlIHRoZSA8c2VsZWN0PlxuICovXG5mdW5jdGlvbiBsb2FkRmllbGRPcHRpb25zKCBzeXN0ZW0sIG9iamVjdE5hbWUgKSB7XG5cdHZhciBkYXRhID0ge1xuXHRcdCdhY3Rpb24nOiAnZ2V0XycgKyBzeXN0ZW0gKyAnX29iamVjdF9maWVsZHMnXG5cdH07XG5cdHZhciBzZWxlY3RGaWVsZCA9ICcuY29sdW1uLScgKyBzeXN0ZW0gKyAnX2ZpZWxkIHNlbGVjdCc7XG5cdHZhciBmaWVsZHMgPSAnJztcblx0dmFyIGZpcnN0RmllbGQgPSAkKCBzZWxlY3RGaWVsZCArICcgb3B0aW9uJyApLmZpcnN0KCkudGV4dCgpO1xuXHRpZiAoICcnICE9PSAkKCBzZWxlY3RGaWVsZCApLnZhbCgpICkge1xuXHRcdHJldHVybjtcblx0fVxuXHRmaWVsZHMgKz0gJzxvcHRpb24gdmFsdWU9XCJcIj4nICsgZmlyc3RGaWVsZCArICc8L29wdGlvbj4nO1xuXHRpZiAoICd3b3JkcHJlc3MnID09PSBzeXN0ZW0gKSB7XG5cdFx0ZGF0YVsnd29yZHByZXNzX29iamVjdCddID0gb2JqZWN0TmFtZTtcblx0fSBlbHNlIGlmICggJ3NhbGVzZm9yY2UnID09PSBzeXN0ZW0gKSB7XG5cdFx0ZGF0YVsnc2FsZXNmb3JjZV9vYmplY3QnXSA9IG9iamVjdE5hbWU7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIGZpZWxkcztcblx0fVxuXG5cdCQuYWpheCgge1xuXHRcdHR5cGU6ICdQT1NUJyxcblx0XHR1cmw6IGFqYXh1cmwsXG5cdFx0ZGF0YTogZGF0YSxcblx0XHRiZWZvcmVTZW5kOiBmdW5jdGlvbigpIHtcblx0XHRcdCQoICcuc3Bpbm5lci0nICsgc3lzdGVtICkuYWRkQ2xhc3MoICdpcy1hY3RpdmUnICk7XG5cdFx0fSxcblx0XHRzdWNjZXNzOiBmdW5jdGlvbiggcmVzcG9uc2UgKSB7XG5cdFx0XHQkLmVhY2goIHJlc3BvbnNlLmRhdGEuZmllbGRzLCBmdW5jdGlvbiggaW5kZXgsIHZhbHVlICkge1xuXHRcdFx0XHRpZiAoICd3b3JkcHJlc3MnID09PSBzeXN0ZW0gKSB7XG5cdFx0XHRcdFx0ZmllbGRzICs9ICc8b3B0aW9uIHZhbHVlPVwiJyArIHZhbHVlLmtleSArICdcIj4nICsgdmFsdWUua2V5ICsgJzwvb3B0aW9uPic7XG5cdFx0XHRcdH0gZWxzZSBpZiAoICdzYWxlc2ZvcmNlJyA9PT0gc3lzdGVtICkge1xuXHRcdFx0XHRcdGZpZWxkcyArPSAnPG9wdGlvbiB2YWx1ZT1cIicgKyB2YWx1ZS5uYW1lICsgJ1wiPicgKyB2YWx1ZS5sYWJlbCArICc8L29wdGlvbj4nO1xuXHRcdFx0XHR9XG5cdFx0XHR9ICk7XG5cdFx0XHQkKCBzZWxlY3RGaWVsZCApLmh0bWwoIGZpZWxkcyApO1xuXHRcdH0sXG5cdFx0Y29tcGxldGU6IGZ1bmN0aW9uKCkge1xuXHRcdFx0JCggJy5zcGlubmVyLScgKyBzeXN0ZW0gKS5yZW1vdmVDbGFzcyggJ2lzLWFjdGl2ZScgKTtcblx0XHR9XG5cdH0gKTtcbn1cblxuLy8gbG9hZCBhdmFpbGFibGUgb3B0aW9ucyBpZiB0aGUgd29yZHByZXNzIG9iamVjdCBjaGFuZ2VzXG4kKCBkb2N1bWVudCApLm9uKCAnY2hhbmdlJywgJ3NlbGVjdCN3b3JkcHJlc3Nfb2JqZWN0JywgZnVuY3Rpb24oKSB7XG5cdHZhciB0aW1lb3V0O1xuXHRsb2FkRmllbGRPcHRpb25zKCAnd29yZHByZXNzJywgJCggdGhpcyApLnZhbCgpICk7XG5cdGNsZWFyVGltZW91dCggdGltZW91dCApO1xuXHR0aW1lb3V0ID0gc2V0VGltZW91dCggZnVuY3Rpb24oKSB7XG5cdFx0JCggJ3RhYmxlLmZpZWxkcyB0Ym9keSB0cicgKS5mYWRlT3V0KCk7XG5cdFx0JCggJ3RhYmxlLmZpZWxkcyB0Ym9keSB0cicgKS5ub3QoICcuZmllbGRtYXAtdGVtcGxhdGUnICkucmVtb3ZlKCk7XG5cdH0sIDEwMDAgKTtcbn0gKTtcblxuLy8gbG9hZCBhdmFpbGFibGUgb3B0aW9ucyBpZiB0aGUgc2FsZXNmb3JjZSBvYmplY3QgY2hhbmdlc1xuJCggZG9jdW1lbnQgKS5vbiggJ2NoYW5nZScsICdzZWxlY3Qjc2FsZXNmb3JjZV9vYmplY3QnLCBmdW5jdGlvbigpIHtcblx0dmFyIHRpbWVvdXQ7XG5cdGxvYWRGaWVsZE9wdGlvbnMoICdzYWxlc2ZvcmNlJywgJCggdGhpcyApLnZhbCgpICk7XG5cdGNsZWFyVGltZW91dCggdGltZW91dCApO1xuXHR0aW1lb3V0ID0gc2V0VGltZW91dCggZnVuY3Rpb24oKSB7XG5cdFx0JCggJ3RhYmxlLmZpZWxkcyB0Ym9keSB0cicgKS5mYWRlT3V0KCk7XG5cdFx0JCggJ3RhYmxlLmZpZWxkcyB0Ym9keSB0cicgKS5ub3QoICcuZmllbGRtYXAtdGVtcGxhdGUnICkucmVtb3ZlKCk7XG5cdH0sIDEwMDAgKTtcbn0gKTtcblxuLyoqXG4gKiBXaGVuIHRoZSBwbHVnaW4gbG9hZHM6XG4gKiBDbGVhciBmaWVsZHMgd2hlbiB0aGUgdGFyZ2V0ZWQgV29yZFByZXNzIG9yIFNhbGVzZm9yY2Ugb2JqZWN0IHR5cGUgY2hhbmdlc1xuICogTWFuYWdlIHRoZSBkaXNwbGF5IGZvciBTYWxlc2ZvcmNlIG9iamVjdCBmaWVsZHMgYmFzZWQgb24gQVBJIHJlcG9uc2VcbiAqL1xuJCggZG9jdW1lbnQgKS5yZWFkeSggZnVuY3Rpb24oKSB7XG5cblx0Ly8gaWYgdGhlcmUgaXMgYWxyZWFkeSBhIHdwIG9yIHNmIG9iamVjdCwgbWFrZSBzdXJlIGl0IGhhcyB0aGUgcmlnaHQgZmllbGRzIHdoZW4gdGhlIHBhZ2UgbG9hZHNcblx0bG9hZEZpZWxkT3B0aW9ucyggJ3dvcmRwcmVzcycsICQoICdzZWxlY3Qjd29yZHByZXNzX29iamVjdCcgKS52YWwoKSApO1xuXHRsb2FkRmllbGRPcHRpb25zKCAnc2FsZXNmb3JjZScsICQoICdzZWxlY3Qjc2FsZXNmb3JjZV9vYmplY3QnICkudmFsKCkgKTtcbn0gKTtcbiIsIlxuLyoqXG4gKiBEdXBsaWNhdGVzIHRoZSBmaWVsZHMgZm9yIGEgbmV3IHJvdyBpbiB0aGUgZmllbGRtYXAgb3B0aW9ucyBzY3JlZW4uXG4gKiB0aGlzIGFwcGVhcnMgbm90IHRvIHdvcmsgd2l0aCBkYXRhKCkgaW5zdGVhZCBvZiBhdHRyKClcbiAqL1xuIGZ1bmN0aW9uIGFkZEZpZWxkTWFwcGluZ1JvdygpIHtcblx0JCggJyNhZGQtZmllbGQtbWFwcGluZycgKS5jbGljayggZnVuY3Rpb24oKSB7XG5cdFx0dmFyIHNhbGVzZm9yY2VPYmplY3QgPSAkKCAnI3NhbGVzZm9yY2Vfb2JqZWN0JyApLnZhbCgpO1xuXHRcdHZhciB3b3JkcHJlc3NPYmplY3QgPSAkKCAnI3dvcmRwcmVzc19vYmplY3QnICkudmFsKCk7XG5cdFx0dmFyIG5ld0tleSA9IG5ldyBEYXRlKCkuZ2V0VVRDTWlsbGlzZWNvbmRzKCk7XG5cdFx0dmFyIGxhc3RSb3cgPSAkKCAndGFibGUuZmllbGRzIHRib2R5IHRyJyApLmxhc3QoKTtcblx0XHR2YXIgb2xkS2V5ID0gbGFzdFJvdy5hdHRyKCAnZGF0YS1rZXknICk7XG5cdFx0b2xkS2V5ID0gbmV3IFJlZ0V4cCggb2xkS2V5LCAnZycgKTtcblx0XHQkKCB0aGlzICkudGV4dCggJ0FkZCBhbm90aGVyIGZpZWxkIG1hcHBpbmcnICk7XG5cdFx0aWYgKCAnJyAhPT0gd29yZHByZXNzT2JqZWN0ICYmICcnICE9PSBzYWxlc2ZvcmNlT2JqZWN0ICkge1xuXHRcdFx0ZmllbGRtYXBGaWVsZHMoIG9sZEtleSwgbmV3S2V5LCBsYXN0Um93ICk7XG5cdFx0XHQkKCB0aGlzICkucGFyZW50KCkuZmluZCggJy5taXNzaW5nLW9iamVjdCcgKS5yZW1vdmUoKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0JCggdGhpcyApLnBhcmVudCgpLnByZXBlbmQoICc8ZGl2IGNsYXNzPVwiZXJyb3IgbWlzc2luZy1vYmplY3RcIj48c3Bhbj5Zb3UgaGF2ZSB0byBwaWNrIGEgV29yZFByZXNzIG9iamVjdCBhbmQgYSBTYWxlc2ZvcmNlIG9iamVjdCB0byBhZGQgZmllbGQgbWFwcGluZy48L3NwYW4+PC9kaXY+JyApO1xuXHRcdH1cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH0gKTtcbn1cblxuLyoqXG4gKiBDbG9uZXMgdGhlIGZpZWxkc2V0IG1hcmt1cCBwcm92aWRlZCBieSB0aGUgc2VydmVyLXNpZGUgdGVtcGxhdGUgYW5kIGFwcGVuZHMgaXQgYXQgdGhlIGVuZC5cbiAqIHRoaXMgYXBwZWFycyBub3QgdG8gd29yayB3aXRoIGRhdGEoKSBpbnN0ZWFkIG9mIGF0dHIoKVxuICogQHBhcmFtIHtzdHJpbmd9IG9sZEtleSB0aGUgZGF0YSBrZXkgYXR0cmlidXRlIG9mIHRoZSBzZXQgdGhhdCBpcyBiZWluZyBjbG9uZWRcbiAqIEBwYXJhbSB7c3RyaW5nfSBuZXdLZXkgdGhlIGRhdGEga2V5IGF0dHJpYnV0ZSBmb3IgdGhlIG9uZSB3ZSdyZSBhcHBlbmRpbmdcbiAqIEBwYXJhbSB7b2JqZWN0fSBsYXN0Um93IHRoZSBsYXN0IHNldCBvZiB0aGUgZmllbGRtYXBcbiAqL1xuZnVuY3Rpb24gZmllbGRtYXBGaWVsZHMoIG9sZEtleSwgbmV3S2V5LCBsYXN0Um93ICkge1xuXHR2YXIgbmV4dFJvdyA9ICcnO1xuICAgIGlmICggalF1ZXJ5LmZuLnNlbGVjdDIgKSB7XG4gICAgXHRuZXh0Um93ID0gbGFzdFJvdy5maW5kKCAnc2VsZWN0JyApLnNlbGVjdDIoICdkZXN0cm95JyApLmVuZCgpLmNsb25lKCB0cnVlICkucmVtb3ZlQ2xhc3MoICdmaWVsZG1hcC10ZW1wbGF0ZScgKTtcbiAgICB9IGVsc2Uge1xuICAgIFx0bmV4dFJvdyA9IGxhc3RSb3cuY2xvbmUoIHRydWUgKTtcbiAgICB9XG5cdCQoIG5leHRSb3cgKS5hdHRyKCAnZGF0YS1rZXknLCBuZXdLZXkgKTtcblx0JCggbmV4dFJvdyApLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdCQoIHRoaXMgKS5odG1sKCBmdW5jdGlvbiggaSwgaCApIHtcblx0XHRcdHJldHVybiBoLnJlcGxhY2UoIG9sZEtleSwgbmV3S2V5ICk7XG5cdFx0fSApO1xuXHR9ICk7XG5cdCQoICd0YWJsZS5maWVsZHMgdGJvZHknICkuYXBwZW5kKCBuZXh0Um93ICk7XG5cdGlmICggalF1ZXJ5LmZuLnNlbGVjdDIgKSB7XG5cdFx0bGFzdFJvdy5maW5kKCAnc2VsZWN0JyApLnNlbGVjdDIoKTtcblx0XHRuZXh0Um93LmZpbmQoICdzZWxlY3QnICkuc2VsZWN0MigpO1xuXHR9XG59XG5cbi8qKlxuICogQXMgdGhlIERydXBhbCBwbHVnaW4gZG9lcywgd2Ugb25seSBhbGxvdyBvbmUgZmllbGQgdG8gYmUgYSBwcmVtYXRjaFxuICovXG4kKCBkb2N1bWVudCApLm9uKCAnY2xpY2snLCAnLmNvbHVtbi1pc19wcmVtYXRjaCBpbnB1dCcsIGZ1bmN0aW9uKCkge1xuXHQkKCAnLmNvbHVtbi1pc19wcmVtYXRjaCBpbnB1dCcgKS5ub3QoIHRoaXMgKS5wcm9wKCAnY2hlY2tlZCcsIGZhbHNlICk7XG59ICk7XG5cbi8qKlxuICogQXMgdGhlIERydXBhbCBwbHVnaW4gZG9lcywgd2Ugb25seSBhbGxvdyBvbmUgZmllbGQgdG8gYmUgYSBrZXlcbiAqL1xuJCggZG9jdW1lbnQgKS5vbiggJ2NsaWNrJywgJy5jb2x1bW4taXNfa2V5IGlucHV0JywgZnVuY3Rpb24oKSB7XG5cdCQoICcuY29sdW1uLWlzX2tleSBpbnB1dCcgKS5ub3QoIHRoaXMgKS5wcm9wKCAnY2hlY2tlZCcsIGZhbHNlICk7XG59ICk7XG5cbi8qKlxuICogV2hlbiB0aGUgcGx1Z2luIGxvYWRzOlxuICogQWRkIG5ldyBmaWVsZG1hcCByb3dzXG4gKiBTZWxlY3QyIG9uIHNlbGVjdCBmaWVsZHNcbiAqL1xuJCggZG9jdW1lbnQgKS5yZWFkeSggZnVuY3Rpb24oKSB7XG5cblx0Ly8gRHVwbGljYXRlIHRoZSBmaWVsZHMgZm9yIGEgbmV3IHJvdyBpbiB0aGUgZmllbGRtYXAgb3B0aW9ucyBzY3JlZW4uXG5cdGFkZEZpZWxkTWFwcGluZ1JvdygpO1xuXG5cdC8vIHNldHVwIHRoZSBzZWxlY3QyIGZpZWxkcyBpZiB0aGUgbGlicmFyeSBpcyBwcmVzZW50XG5cdGlmICggalF1ZXJ5LmZuLnNlbGVjdDIgKSB7XG5cdFx0JCggJ3NlbGVjdCN3b3JkcHJlc3Nfb2JqZWN0JyApLnNlbGVjdDIoKTtcblx0XHQkKCAnc2VsZWN0I3NhbGVzZm9yY2Vfb2JqZWN0JyApLnNlbGVjdDIoKTtcblx0XHQkKCAnc2VsZWN0I3NhbGVzZm9yY2VfcmVjb3JkX3R5cGVfZGVmYXVsdCcgKS5zZWxlY3QyKCk7XG5cdFx0JCggJ3NlbGVjdCNwdWxsX3RyaWdnZXJfZmllbGQnICkuc2VsZWN0MigpO1xuXHRcdCQoICcuY29sdW1uLXdvcmRwcmVzc19maWVsZCBzZWxlY3QnICkuc2VsZWN0MigpO1xuXHRcdCQoICcuY29sdW1uLXNhbGVzZm9yY2VfZmllbGQgc2VsZWN0JyApLnNlbGVjdDIoKTtcblx0fVxufSApO1xuIiwiLyoqXG4gKiBIYW5kbGUgbWFudWFsIHB1c2ggb2Ygb2JqZWN0cyB0byBTYWxlc2ZvcmNlXG4gKi9cbmZ1bmN0aW9uIHB1c2hPYmplY3RzKCkge1xuXHQkKCAnLnNhbGVzZm9yY2VfdXNlcl9hamF4X21lc3NhZ2UnICkuaGlkZSgpO1xuXHRpZiAoIDAgPCAkKCAnI3dvcmRwcmVzc19vYmplY3RfYWpheCcgKS5sZW5ndGggKSB7XG5cdFx0JCggJy5wdXNoX3RvX3NhbGVzZm9yY2VfYnV0dG9uJyApLm9uKCAnY2xpY2snLCBmdW5jdGlvbigpIHtcblx0XHRcdHZhciB3b3JkcHJlc3NPYmplY3QgPSAkKCAnI3dvcmRwcmVzc19vYmplY3RfYWpheCcgKS52YWwoKTtcblx0XHRcdHZhciB3b3JkcHJlc3NJZCA9ICQoICcjd29yZHByZXNzX2lkX2FqYXgnICkudmFsKCk7XG5cdFx0XHR2YXIgc2FsZXNmb3JjZUlkID0gJCggJyNzYWxlc2ZvcmNlX2lkX2FqYXgnICkudmFsKCk7XG5cdFx0XHR2YXIgZGF0YSA9IHtcblx0XHRcdFx0J2FjdGlvbic6ICdwdXNoX3RvX3NhbGVzZm9yY2UnLFxuXHRcdFx0XHQnd29yZHByZXNzX29iamVjdCc6IHdvcmRwcmVzc09iamVjdCxcblx0XHRcdFx0J3dvcmRwcmVzc19pZCc6IHdvcmRwcmVzc0lkLFxuXHRcdFx0XHQnc2FsZXNmb3JjZV9pZCc6IHNhbGVzZm9yY2VJZFxuXHRcdFx0fTtcblx0XHRcdCQucG9zdCggYWpheHVybCwgZGF0YSwgZnVuY3Rpb24oIHJlc3BvbnNlICkge1xuXHRcdFx0XHRpZiAoIHRydWUgPT09IHJlc3BvbnNlLnN1Y2Nlc3MgKSB7XG5cdFx0XHRcdFx0dXBkYXRlU2FsZXNmb3JjZVVzZXJTdW1tYXJ5KCk7XG5cdFx0XHRcdFx0JCggJy5zYWxlc2ZvcmNlX3VzZXJfYWpheF9tZXNzYWdlJyApLndpZHRoKCAkKCAnLm1hcHBlZC1zYWxlc2ZvcmNlLXVzZXInICkud2lkdGgoKSAtIDI3ICk7XG5cdFx0XHRcdFx0JCggJy5zYWxlc2ZvcmNlX3VzZXJfYWpheF9tZXNzYWdlJyApLmh0bWwoICc8cD5UaGlzIG9iamVjdCBoYXMgYmVlbiBwdXNoZWQgdG8gU2FsZXNmb3JjZS48L3A+JyApLmZhZGVJbigpLmRlbGF5KCA0MDAwICkuZmFkZU91dCgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9ICk7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fSApO1xuXHR9XG59XG5cbi8qKlxuICogSGFuZGxlIG1hbnVhbCBwdWxsIG9mIG9iamVjdHMgZnJvbSBTYWxlc2ZvcmNlXG4gKi9cbmZ1bmN0aW9uIHB1bGxPYmplY3RzKCkge1xuXHQkKCAnLnNhbGVzZm9yY2VfdXNlcl9hamF4X21lc3NhZ2UnICkuaGlkZSgpO1xuXHQkKCAnLnB1bGxfZnJvbV9zYWxlc2ZvcmNlX2J1dHRvbicgKS5vbiggJ2NsaWNrJywgZnVuY3Rpb24oKSB7XG5cdFx0dmFyIHNhbGVzZm9yY2VJZCA9ICQoICcjc2FsZXNmb3JjZV9pZF9hamF4JyApLnZhbCgpO1xuXHRcdHZhciB3b3JkcHJlc3NPYmplY3QgPSAkKCAnI3dvcmRwcmVzc19vYmplY3RfYWpheCcgKS52YWwoKTtcblx0XHR2YXIgZGF0YSA9IHtcblx0XHRcdCdhY3Rpb24nOiAncHVsbF9mcm9tX3NhbGVzZm9yY2UnLFxuXHRcdFx0J3NhbGVzZm9yY2VfaWQnOiBzYWxlc2ZvcmNlSWQsXG5cdFx0XHQnd29yZHByZXNzX29iamVjdCc6IHdvcmRwcmVzc09iamVjdFxuXHRcdH07XG5cdFx0JC5wb3N0KCBhamF4dXJsLCBkYXRhLCBmdW5jdGlvbiggcmVzcG9uc2UgKSB7XG5cdFx0XHRpZiAoIHRydWUgPT09IHJlc3BvbnNlLnN1Y2Nlc3MgKSB7XG5cdFx0XHRcdHVwZGF0ZVNhbGVzZm9yY2VVc2VyU3VtbWFyeSgpO1xuXHRcdFx0XHQkKCAnLnNhbGVzZm9yY2VfdXNlcl9hamF4X21lc3NhZ2UnICkud2lkdGgoICQoICcubWFwcGVkLXNhbGVzZm9yY2UtdXNlcicgKS53aWR0aCgpIC0gMjcgKTtcblx0XHRcdFx0JCggJy5zYWxlc2ZvcmNlX3VzZXJfYWpheF9tZXNzYWdlJyApLmh0bWwoICc8cD5UaGlzIG9iamVjdCBoYXMgYmVlbiBwdWxsZWQgZnJvbSBTYWxlc2ZvcmNlLjwvcD4nICkuZmFkZUluKCkuZGVsYXkoIDQwMDAgKS5mYWRlT3V0KCk7XG5cdFx0XHR9XG5cdFx0fSApO1xuXHRcdHJldHVybiBmYWxzZTtcblx0fSApO1xufVxuXG4vKipcbiAqIFVwZGF0ZXMgdGhlIHVzZXIgcHJvZmlsZSBzdW1tYXJ5IG9mIFNhbGVzZm9yY2UgaW5mby5cbiAqL1xuZnVuY3Rpb24gdXBkYXRlU2FsZXNmb3JjZVVzZXJTdW1tYXJ5KCkge1xuXHR2YXIgbWFwcGluZ0lkID0gJCggJyNtYXBwaW5nX2lkX2FqYXgnICkudmFsKCk7XG5cdHZhciBkYXRhID0ge1xuXHRcdCdhY3Rpb24nOiAncmVmcmVzaF9tYXBwZWRfZGF0YScsXG5cdFx0J21hcHBpbmdfaWQnOiBtYXBwaW5nSWRcblx0fTtcblx0JC5wb3N0KCBhamF4dXJsLCBkYXRhLCBmdW5jdGlvbiggcmVzcG9uc2UgKSB7XG5cdFx0aWYgKCB0cnVlID09PSByZXNwb25zZS5zdWNjZXNzICkge1xuXHRcdFx0JCggJ3RkLmxhc3Rfc3luY19tZXNzYWdlJyApLnRleHQoIHJlc3BvbnNlLmRhdGEubGFzdF9zeW5jX21lc3NhZ2UgKTtcblx0XHRcdCQoICd0ZC5sYXN0X3N5bmNfYWN0aW9uJyApLnRleHQoIHJlc3BvbnNlLmRhdGEubGFzdF9zeW5jX2FjdGlvbiApO1xuXHRcdFx0JCggJ3RkLmxhc3Rfc3luY19zdGF0dXMnICkudGV4dCggcmVzcG9uc2UuZGF0YS5sYXN0X3N5bmNfc3RhdHVzICk7XG5cdFx0XHQkKCAndGQubGFzdF9zeW5jJyApLnRleHQoIHJlc3BvbnNlLmRhdGEubGFzdF9zeW5jICk7XG5cdFx0XHRpZiAoICcxJyA9PT0gcmVzcG9uc2UuZGF0YS5sYXN0X3N5bmNfc3RhdHVzICkge1xuXHRcdFx0XHQkKCAndGQubGFzdF9zeW5jX3N0YXR1cycgKS50ZXh0KCAnc3VjY2VzcycgKTtcblx0XHRcdH1cblx0XHR9XG5cdH0gKTtcbn1cblxuLyoqXG4gKiBDbGVhciB0aGUgcGx1Z2luIGNhY2hlIHZpYSBBamF4IHJlcXVlc3QuXG4gKi9cbmZ1bmN0aW9uIGNsZWFyU2Z3cENhY2hlTGluaygpIHtcblx0JCggJyNjbGVhci1zZndwLWNhY2hlJyApLmNsaWNrKCBmdW5jdGlvbigpIHtcblx0XHR2YXIgZGF0YSA9IHtcblx0XHRcdCdhY3Rpb24nOiAnY2xlYXJfc2Z3cF9jYWNoZSdcblx0XHR9O1xuXHRcdHZhciB0aGF0ID0gJCggdGhpcyApO1xuXHRcdCQucG9zdCggYWpheHVybCwgZGF0YSwgZnVuY3Rpb24oIHJlc3BvbnNlICkge1xuXHRcdFx0aWYgKCB0cnVlID09PSByZXNwb25zZS5zdWNjZXNzICYmIHRydWUgPT09IHJlc3BvbnNlLmRhdGEuc3VjY2VzcyApIHtcblx0XHRcdFx0dGhhdC5wYXJlbnQoKS5odG1sKCByZXNwb25zZS5kYXRhLm1lc3NhZ2UgKS5mYWRlSW4oKTtcblx0XHRcdH1cblx0XHR9ICk7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9ICk7XG59XG5cbi8qKlxuICogV2hlbiB0aGUgcGx1Z2luIGxvYWRzOlxuICogQ2xlYXIgcGx1Z2luIGNhY2hlIGJ1dHRvblxuICogTWFudWFsIHB1c2ggYW5kIHB1bGxcbiAqL1xuJCggZG9jdW1lbnQgKS5yZWFkeSggZnVuY3Rpb24oKSB7XG5cblx0Ly8gQ2xlYXIgdGhlIHBsdWdpbiBjYWNoZSB2aWEgQWpheCByZXF1ZXN0LlxuXHRjbGVhclNmd3BDYWNoZUxpbmsoKTtcblxuXHQvLyBIYW5kbGUgbWFudWFsIHB1c2ggYW5kIHB1bGwgb2Ygb2JqZWN0c1xuXHRwdXNoT2JqZWN0cygpO1xuXG5cdC8vIEhhbmRsZSBtYW51YWwgcHVsbCBvZiBvYmplY3RzXG5cdHB1bGxPYmplY3RzKCk7XG59ICk7XG4iLCIvKipcbiAqIERvbid0IHNob3cgdGhlIFdTREwgZmlsZSBmaWVsZCB1bmxlc3MgU09BUCBpcyBlbmFibGVkXG4gKi9cbmZ1bmN0aW9uIHRvZ2dsZVNvYXBGaWVsZHMoKSB7XG5cdGlmICggMCA8ICQoICcub2JqZWN0LXN5bmMtZm9yLXNhbGVzZm9yY2UtZW5hYmxlLXNvYXAnICkubGVuZ3RoICkge1xuXHRcdGlmICggJCggJy5vYmplY3Qtc3luYy1mb3Itc2FsZXNmb3JjZS1lbmFibGUtc29hcCBpbnB1dCcgKS5pcyggJzpjaGVja2VkJyApICkge1xuXHRcdFx0JCggJy5vYmplY3Qtc3luYy1mb3Itc2FsZXNmb3JjZS1zb2FwLXdzZGwtcGF0aCcgKS5zaG93KCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdCQoICcub2JqZWN0LXN5bmMtZm9yLXNhbGVzZm9yY2Utc29hcC13c2RsLXBhdGgnICkuaGlkZSgpO1xuXHRcdH1cblx0fVxufVxuXG4vLyBEb24ndCBzaG93IHRoZSBXU0RMIGZpbGUgZmllbGQgdW5sZXNzIFNPQVAgaXMgZW5hYmxlZFxuJCggZG9jdW1lbnQgKS5vbiggJ2NoYW5nZScsICcub2JqZWN0LXN5bmMtZm9yLXNhbGVzZm9yY2UtZW5hYmxlLXNvYXAgaW5wdXQnLCBmdW5jdGlvbigpIHtcblx0dG9nZ2xlU29hcEZpZWxkcygpO1xufSApO1xuXG4kKCBkb2N1bWVudCApLnJlYWR5KCBmdW5jdGlvbigpIHtcblxuXHQvLyBEb24ndCBzaG93IHRoZSBXU0RMIGZpbGUgZmllbGQgdW5sZXNzIFNPQVAgaXMgZW5hYmxlZFxuXHR0b2dnbGVTb2FwRmllbGRzKCk7XG59ICk7XG4iXX0= }(jQuery)); diff --git a/assets/js/src/03-fieldmap-rows.js b/assets/js/src/03-fieldmap-rows.js index a4fc5487..aa60f4c2 100644 --- a/assets/js/src/03-fieldmap-rows.js +++ b/assets/js/src/03-fieldmap-rows.js @@ -32,11 +32,7 @@ function fieldmapFields( oldKey, newKey, lastRow ) { var nextRow = ''; if ( jQuery.fn.select2 ) { - nextRow = lastRow.find( 'select' ) - .select2( 'destroy' ) - .end() - .clone( true ) - .removeClass( 'fieldmap-template' ); + nextRow = lastRow.find( 'select' ).select2( 'destroy' ).end().clone( true ).removeClass( 'fieldmap-template' ); } else { nextRow = lastRow.clone( true ); } From 8ccd2f8602a83bf6637d82398a7265b01b3c4d6e Mon Sep 17 00:00:00 2001 From: Jonathan Stegall Date: Sun, 5 Jan 2020 21:16:46 -0600 Subject: [PATCH 27/27] spaces and tabs --- assets/js/object-sync-for-salesforce-admin.js | 2 +- assets/js/src/03-fieldmap-rows.js | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/assets/js/object-sync-for-salesforce-admin.js b/assets/js/object-sync-for-salesforce-admin.js index 9aab93bd..5a705669 100644 --- a/assets/js/object-sync-for-salesforce-admin.js +++ b/assets/js/object-sync-for-salesforce-admin.js @@ -415,5 +415,5 @@ $(document).ready(function () { // Don't show the WSDL file field unless SOAP is enabled toggleSoapFields(); }); -//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIjAxLXNhbGVzZm9yY2Utb2JqZWN0LmpzIiwiMDItbG9hZC1maWVsZC1vcHRpb25zLmpzIiwiMDMtZmllbGRtYXAtcm93cy5qcyIsIjA0LWludGVyZmFjZS1hamF4LWV2ZW50cy5qcyIsIjA1LXNvYXAuanMiXSwibmFtZXMiOlsic2FsZXNmb3JjZU9iamVjdEZpZWxkcyIsImRlbGF5IiwidGltZXIiLCJjYWxsYmFjayIsIm1zIiwiY2xlYXJUaW1lb3V0Iiwic2V0VGltZW91dCIsIiQiLCJsZW5ndGgiLCJoaWRlIiwib24iLCJ0aGF0IiwiZGVsYXlUaW1lIiwiZGF0YSIsInZhbHVlIiwicG9zdCIsImFqYXh1cmwiLCJyZXNwb25zZSIsInJlY29yZFR5cGVzQWxsb3dlZE1hcmt1cCIsInJlY29yZFR5cGVEZWZhdWx0TWFya3VwIiwiZGF0ZU1hcmt1cCIsInJlY29yZFR5cGVJbmZvcyIsImVhY2giLCJpbmRleCIsImh0bWwiLCJmaWVsZHMiLCJuYW1lIiwibGFiZWwiLCJzaG93IiwialF1ZXJ5IiwiZm4iLCJzZWxlY3QyIiwiZG9jdW1lbnQiLCJyZWFkeSIsImxvYWRGaWVsZE9wdGlvbnMiLCJzeXN0ZW0iLCJvYmplY3ROYW1lIiwic2VsZWN0RmllbGQiLCJmaXJzdEZpZWxkIiwiZmlyc3QiLCJ0ZXh0IiwidmFsIiwiYWpheCIsInR5cGUiLCJ1cmwiLCJiZWZvcmVTZW5kIiwiYWRkQ2xhc3MiLCJzdWNjZXNzIiwia2V5IiwiY29tcGxldGUiLCJyZW1vdmVDbGFzcyIsInRpbWVvdXQiLCJmYWRlT3V0Iiwibm90IiwicmVtb3ZlIiwiYWRkRmllbGRNYXBwaW5nUm93IiwiY2xpY2siLCJzYWxlc2ZvcmNlT2JqZWN0Iiwid29yZHByZXNzT2JqZWN0IiwibmV3S2V5IiwiRGF0ZSIsImdldFVUQ01pbGxpc2Vjb25kcyIsImxhc3RSb3ciLCJsYXN0Iiwib2xkS2V5IiwiYXR0ciIsIlJlZ0V4cCIsImZpZWxkbWFwRmllbGRzIiwicGFyZW50IiwiZmluZCIsInByZXBlbmQiLCJuZXh0Um93IiwiZW5kIiwiY2xvbmUiLCJpIiwiaCIsInJlcGxhY2UiLCJhcHBlbmQiLCJwcm9wIiwicHVzaE9iamVjdHMiLCJ3b3JkcHJlc3NJZCIsInNhbGVzZm9yY2VJZCIsInVwZGF0ZVNhbGVzZm9yY2VVc2VyU3VtbWFyeSIsIndpZHRoIiwiZmFkZUluIiwicHVsbE9iamVjdHMiLCJtYXBwaW5nSWQiLCJsYXN0X3N5bmNfbWVzc2FnZSIsImxhc3Rfc3luY19hY3Rpb24iLCJsYXN0X3N5bmNfc3RhdHVzIiwibGFzdF9zeW5jIiwiY2xlYXJTZndwQ2FjaGVMaW5rIiwibWVzc2FnZSIsInRvZ2dsZVNvYXBGaWVsZHMiLCJpcyJdLCJtYXBwaW5ncyI6Ijs7QUFBQTs7OztBQUlBLFNBQVNBLHNCQUFULEdBQWtDO0FBRWpDLE1BQUlDLEtBQUssR0FBSyxZQUFXO0FBQ3hCLFFBQUlDLEtBQUssR0FBRyxDQUFaO0FBQ0EsV0FBTyxVQUFVQyxRQUFWLEVBQW9CQyxFQUFwQixFQUF5QjtBQUMvQkMsTUFBQUEsWUFBWSxDQUFHSCxLQUFILENBQVo7QUFDQUEsTUFBQUEsS0FBSyxHQUFHSSxVQUFVLENBQUVILFFBQUYsRUFBWUMsRUFBWixDQUFsQjtBQUNBLEtBSEQ7QUFJQSxHQU5hLEVBQWQ7O0FBUUEsTUFBSyxNQUFNRyxDQUFDLENBQUUsc0NBQUYsQ0FBRCxDQUE0Q0MsTUFBdkQsRUFBZ0U7QUFDL0RELElBQUFBLENBQUMsQ0FBRSxrQ0FBRixDQUFELENBQXdDRSxJQUF4QztBQUNBOztBQUVELE1BQUssTUFBTUYsQ0FBQyxDQUFFLHFDQUFGLENBQUQsQ0FBMkNDLE1BQXRELEVBQStEO0FBQzlERCxJQUFBQSxDQUFDLENBQUUsaUNBQUYsQ0FBRCxDQUF1Q0UsSUFBdkM7QUFDQTs7QUFDRCxNQUFLLE1BQU1GLENBQUMsQ0FBRSx5QkFBRixDQUFELENBQStCQyxNQUExQyxFQUFtRDtBQUNsREQsSUFBQUEsQ0FBQyxDQUFFLHFCQUFGLENBQUQsQ0FBMkJFLElBQTNCO0FBQ0E7O0FBRURGLEVBQUFBLENBQUMs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LEMsQ0FFRDs7O0FBQ0FGLENBQUMsQ0FBRXlCLFFBQUYsQ0FBRCxDQUFjdEIsRUFBZCxDQUFrQixRQUFsQixFQUE0QiwrQ0FBNUIsRUFBNkUsWUFBVztBQUN2Rm1GLEVBQUFBLGdCQUFnQjtBQUNoQixDQUZEO0FBSUF0RixDQUFDLENBQUV5QixRQUFGLENBQUQsQ0FBY0MsS0FBZCxDQUFxQixZQUFXO0FBRS9CO0FBQ0E0RCxFQUFBQSxnQkFBZ0I7QUFDaEIsQ0FKRCIsImZpbGUiOiJvYmplY3Qtc3luYy1mb3Itc2FsZXNmb3JjZS1hZG1pbi5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJhdGVzIHRoZSBTYWxlc2ZvcmNlIG9iamVjdCBmaWVsZHMgYmFzZWQgb24gdGhlIGRyb3Bkb3duIGFjdGl2aXR5IGFuZCBBUEkgcmVzdWx0cy5cbiAqIFRoaXMgYWxzbyBnZW5lcmF0ZXMgb3RoZXIgcXVlcnkgZmllbGRzIHRoYXQgYXJlIG9iamVjdC1zcGVjaWZpYywgbGlrZSBkYXRlIGZpZWxkcywgcmVjb3JkIHR5cGVzIGFsbG93ZWQsIGV0Yy5cbiAqL1xuZnVuY3Rpb24gc2FsZXNmb3JjZU9iamVjdEZpZWxkcygpIHtcblxuXHR2YXIgZGVsYXkgPSAoIGZ1bmN0aW9uKCkge1xuXHRcdHZhciB0aW1lciA9IDA7XG5cdFx0cmV0dXJuIGZ1bmN0aW9uKCBjYWxsYmFjaywgbXMgKSB7XG5cdFx0XHRjbGVhclRpbWVvdXQgKCB0aW1lciApO1xuXHRcdFx0dGltZXIgPSBzZXRUaW1lb3V0KCBjYWxsYmFjaywgbXMgKTtcblx0XHR9O1xuXHR9KCkgKTtcblxuXHRpZiAoIDAgPT09ICQoICcuc2FsZXNmb3JjZV9yZWNvcmRfdHlwZXNfYWxsb3dlZCA+IConICkubGVuZ3RoICkge1xuXHRcdCQoICcuc2FsZXNmb3JjZV9yZWNvcmRfdHlwZXNfYWxsb3dlZCcgKS5oaWRlKCk7XG5cdH1cblxuXHRpZiAoIDAgPT09ICQoICcuc2FsZXNmb3JjZV9yZWNvcmRfdHlwZV9kZWZhdWx0ID4gKicgKS5sZW5ndGggKSB7XG5cdFx0JCggJy5zYWxlc2ZvcmNlX3JlY29yZF90eXBlX2RlZmF1bHQnICkuaGlkZSgpO1xuXHR9XG5cdGlmICggMCA9PT0gJCggJy5wdWxsX3RyaWdnZXJfZmllbGQgPiAqJyApLmxlbmd0aCApIHtcblx0XHQkKCAnLnB1bGxfdHJpZ2dlcl9maWVsZCcgKS5oaWRlKCk7XG5cdH1cblxuXHQkKCAnI3NhbGVzZm9yY2Vfb2JqZWN0JyApLm9uKCAnY2hhbmdlJywgZnVuY3Rpb24oKSB7XG5cdFx0dmFyIHRoYXQgPSB0aGlzO1xuXHRcdHZhciBkZWxheVRpbWUgPSAxMDAwO1xuXHRcdGRlbGF5KCBmdW5jdGlvbigpIHtcblx0XHRcdHZhciBkYXRhID0ge1xuXHRcdFx0XHQnYWN0aW9uJzogJ2dldF9zYWxlc2ZvcmNlX29iamVjdF9kZXNjcmlwdGlvbicsXG5cdFx0XHRcdCdpbmNsdWRlJzogWyAnZmllbGRzJywgJ3JlY29yZFR5cGVJbmZvcycgXSxcblx0XHRcdFx0J2ZpZWxkX3R5cGUnOiAnZGF0ZXRpbWUnLFxuXHRcdFx0XHQnc2FsZXNmb3JjZV9vYmplY3QnOiB0aGF0LnZhbHVlXG5cdFx0XHR9O1xuXHRcdFx0JC5wb3N0KCBhamF4dXJsLCBkYXRhLCBmdW5jdGlvbiggcmVzcG9uc2UgKSB7XG5cdFx0XHRcdHZhciByZWNvcmRUeXBlc0FsbG93ZWRNYXJrdXAgPSAnJztcblx0XHRcdFx0dmFyIHJlY29yZFR5cGVEZWZhdWx0TWFya3VwID0gJyc7XG5cdFx0XHRcdHZhciBkYXRlTWFya3VwID0gJyc7XG5cdFx0XHRcdGlmICggMCA8ICQoIHJlc3BvbnNlLmRhdGEucmVjb3JkVHlwZUluZm9zICkubGVuZ3RoICkge1xuXHRcdFx0XHRcdHJlY29yZFR5cGVzQWxsb3dlZE1hcmt1cCArPSAnPGxhYmVsIGZvcj1cInNhbGVzZm9yY2VfcmVjb3JkX3R5cGVzX2FsbG93ZWRcIj5BbGxvd2VkIFJlY29yZCBUeXBlczo8L2xhYmVsPjxkaXYgY2xhc3M9XCJjaGVja2JveGVzXCI+Jztcblx0XHRcdFx0XHQkLmVhY2goIHJlc3BvbnNlLmRhdGEucmVjb3JkVHlwZUluZm9zLCBmdW5jdGlvbiggaW5kZXgsIHZhbHVlICkge1xuXHRcdFx0XHRcdFx0cmVjb3JkVHlwZXNBbGxvd2VkTWFya3VwICs9ICc8bGFiZWw+PGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGNsYXNzPVwiZm9ybS1jaGVja2JveFwiIHZhbHVlPVwiJyArIGluZGV4ICsgJ1wiIG5hbWU9XCJzYWxlc2ZvcmNlX3JlY29yZF90eXBlc19hbGxvd2VkWycgKyBpbmRleCArICddXCIgaWQ9XCJzYWxlc2ZvcmNlX3JlY29yZF90eXBlc19hbGxvd2VkLScgKyBpbmRleCArICdcIj4gJyArIHZhbHVlICsgJzwvbGFiZWw+Jztcblx0XHRcdFx0XHR9ICk7XG5cdFx0XHRcdFx0cmVjb3JkVHlwZXNBbGxvd2VkTWFya3VwICs9ICc8L2Rpdj4nO1xuXHRcdFx0XHRcdHJlY29yZFR5cGVEZWZhdWx0TWFya3VwICs9ICc8bGFiZWwgZm9yPVwic2FsZXNmb3JjZV9yZWNvcmRfdHlwZV9kZWZhdWx0XCI+RGVmYXVsdCBSZWNvcmQgVHlwZTo8L2xhYmVsPic7XG5cdFx0XHRcdFx0cmVjb3JkVHlwZURlZmF1bHRNYXJrdXAgKz0gJzxzZWxlY3QgbmFtZT1cInNhbGVzZm9yY2VfcmVjb3JkX3R5cGVfZGVmYXVsdFwiIGlkPVwic2FsZXNmb3JjZV9yZWNvcmRfdHlwZV9kZWZhdWx0XCI+PG9wdGlvbiB2YWx1ZT1cIlwiPi0gU2VsZWN0IHJlY29yZCB0eXBlIC08L29wdGlvbj4nO1xuXHRcdFx0XHRcdCQuZWFjaCggcmVzcG9uc2UuZGF0YS5yZWNvcmRUeXBlSW5mb3MsIGZ1bmN0aW9uKCBpbmRleCwgdmFsdWUgKSB7XG5cdFx0XHRcdFx0XHRyZWNvcmRUeXBlRGVmYXVsdE1hcmt1cCArPSAnPG9wdGlvbiB2YWx1ZT1cIicgKyBpbmRleCArICdcIj4nICsgdmFsdWUgKyAnPC9vcHRpb24+Jztcblx0XHRcdFx0XHR9ICk7XG5cdFx0XHRcdH1cblx0XHRcdFx0JCggJy5zYWxlc2ZvcmNlX3JlY29yZF90eXBlc19hbGxvd2VkJyApLmh0bWwoIHJlY29yZFR5cGVzQWxsb3dlZE1hcmt1cCApO1xuXHRcdFx0XHQkKCAnLnNhbGVzZm9yY2VfcmVjb3JkX3R5cGVfZGVmYXVsdCcgKS5odG1sKCByZWNvcmRUeXBlRGVmYXVsdE1hcmt1cCApO1xuXHRcdFx0XHRpZiAoIDAgPCAkKCByZXNwb25zZS5kYXRhLmZpZWxkcyApLmxlbmd0aCApIHtcblx0XHRcdFx0XHRkYXRlTWFya3VwICs9ICc8bGFiZWwgZm9yPVwicHVsbF90cmlnZ2VyX2ZpZWxkXCI+RGF0ZSBmaWVsZCB0byB0cmlnZ2VyIHB1bGw6PC9sYWJlbD4nO1xuXHRcdFx0XHRcdGRhdGVNYXJrdXAgKz0gJzxzZWxlY3QgbmFtZT1cInB1bGxfdHJpZ2dlcl9maWVsZFwiIGlkPVwicHVsbF90cmlnZ2VyX2ZpZWxkXCI+PG9wdGlvbiB2YWx1ZT1cIlwiPi0gU2VsZWN0IGRhdGUgZmllbGQgLTwvb3B0aW9uPic7XG5cdFx0XHRcdFx0JC5lYWNoKCByZXNwb25zZS5kYXRhLmZpZWxkcywgZnVuY3Rpb24oIGluZGV4LCB2YWx1ZSApIHtcblx0XHRcdFx0XHRcdGRhdGVNYXJrdXAgKz0gJzxvcHRpb24gdmFsdWU9XCInICsgdmFsdWUubmFtZSArICdcIj4nICsgdmFsdWUubGFiZWwgKyAnPC9vcHRpb24+Jztcblx0XHRcdFx0XHR9ICk7XG5cdFx0XHRcdFx0ZGF0ZU1hcmt1cCArPSAnPC9zZWxlY3Q+Jztcblx0XHRcdFx0XHRkYXRlTWFya3VwICs9ICc8cCBjbGFzcz1cImRlc2NyaXB0aW9uXCI+VGhlc2UgYXJlIGRhdGUgZmllbGRzIHRoYXQgY2FuIGNhdXNlIFdvcmRQcmVzcyB0byBwdWxsIGFuIHVwZGF0ZSBmcm9tIFNhbGVzZm9yY2UsIGFjY29yZGluZyB0byB0aGUgPGNvZGU+c2FsZXNmb3JjZV9wdWxsPC9jb2RlPiBjbGFzcy48L3A+Jztcblx0XHRcdFx0fVxuXHRcdFx0XHQkKCAnLnB1bGxfdHJpZ2dlcl9maWVsZCcgKS5odG1sKCBkYXRlTWFya3VwICk7XG5cdFx0XHRcdGlmICggJycgIT09IHJlY29yZFR5cGVzQWxsb3dlZE1hcmt1cCApIHtcblx0XHRcdFx0XHQkKCAnLnNhbGVzZm9yY2VfcmVjb3JkX3R5cGVzX2FsbG93ZWQnICkuc2hvdygpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdCQoICcuc2FsZXNmb3JjZV9yZWNvcmRfdHlwZXNfYWxsb3dlZCcgKS5oaWRlKCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKCAnJyAhPT0gcmVjb3JkVHlwZURlZmF1bHRNYXJrdXAgKSB7XG5cdFx0XHRcdFx0JCggJy5zYWxlc2ZvcmNlX3JlY29yZF90eXBlX2RlZmF1bHQnICkuc2hvdygpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdCQoICcuc2FsZXNmb3JjZV9yZWNvcmRfdHlwZV9kZWZhdWx0JyApLmhpZGUoKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoICcnICE9PSBkYXRlTWFya3VwICkge1xuXHRcdFx0XHRcdCQoICcucHVsbF90cmlnZ2VyX2ZpZWxkJyApLnNob3coKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHQkKCAnLnB1bGxfdHJpZ2dlcl9maWVsZCcgKS5oaWRlKCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKCBqUXVlcnkuZm4uc2VsZWN0MiApIHtcblx0XHRcdFx0XHQkKCAnc2VsZWN0I3NhbGVzZm9yY2VfcmVjb3JkX3R5cGVfZGVmYXVsdCcgKS5zZWxlY3QyKCk7XG5cdFx0XHRcdFx0JCggJ3NlbGVjdCNwdWxsX3RyaWdnZXJfZmllbGQnICkuc2VsZWN0MigpO1xuXHRcdFx0XHR9XG5cdFx0XHR9ICk7XG5cdFx0fSwgZGVsYXlUaW1lICk7XG5cdH0gKTtcbn1cblxuLyoqXG4gKiBXaGVuIHRoZSBwbHVnaW4gbG9hZHM6XG4gKiBNYW5hZ2UgdGhlIGRpc3BsYXkgZm9yIFNhbGVzZm9yY2Ugb2JqZWN0IGZpZWxkcyBiYXNlZCBvbiBBUEkgcmVzcG9uc2VcbiAqL1xuJCggZG9jdW1lbnQgKS5yZWFkeSggZnVuY3Rpb24oKSB7XG5cblx0Ly8gZ2V0IHRoZSBhdmFpbGFibGUgU2FsZXNmb3JjZSBvYmplY3QgY2hvaWNlc1xuXHRzYWxlc2ZvcmNlT2JqZWN0RmllbGRzKCk7XG59ICk7XG4iLCIvKipcbiAqIEdldHMgdGhlIFdvcmRQcmVzcyBhbmQgU2FsZXNmb3JjZSBmaWVsZCByZXN1bHRzIHZpYSBhbiBBamF4IGNhbGxcbiAqIEBwYXJhbSB7c3RyaW5nfSBzeXN0ZW0gd2hldGhlciB3ZSB3YW50IFdvcmRQcmVzcyBvciBTYWxlc2ZvcmNlIGRhdGFcbiAqIEBwYXJhbSB7c3RyaW5nfSBvYmplY3ROYW1lIHRoZSB2YWx1ZSBmb3IgdGhlIG9iamVjdCBuYW1lIGZyb20gdGhlIHRoZSA8c2VsZWN0PlxuICovXG5mdW5jdGlvbiBsb2FkRmllbGRPcHRpb25zKCBzeXN0ZW0sIG9iamVjdE5hbWUgKSB7XG5cdHZhciBkYXRhID0ge1xuXHRcdCdhY3Rpb24nOiAnZ2V0XycgKyBzeXN0ZW0gKyAnX29iamVjdF9maWVsZHMnXG5cdH07XG5cdHZhciBzZWxlY3RGaWVsZCA9ICcuY29sdW1uLScgKyBzeXN0ZW0gKyAnX2ZpZWxkIHNlbGVjdCc7XG5cdHZhciBmaWVsZHMgPSAnJztcblx0dmFyIGZpcnN0RmllbGQgPSAkKCBzZWxlY3RGaWVsZCArICcgb3B0aW9uJyApLmZpcnN0KCkudGV4dCgpO1xuXHRpZiAoICcnICE9PSAkKCBzZWxlY3RGaWVsZCApLnZhbCgpICkge1xuXHRcdHJldHVybjtcblx0fVxuXHRmaWVsZHMgKz0gJzxvcHRpb24gdmFsdWU9XCJcIj4nICsgZmlyc3RGaWVsZCArICc8L29wdGlvbj4nO1xuXHRpZiAoICd3b3JkcHJlc3MnID09PSBzeXN0ZW0gKSB7XG5cdFx0ZGF0YVsnd29yZHByZXNzX29iamVjdCddID0gb2JqZWN0TmFtZTtcblx0fSBlbHNlIGlmICggJ3NhbGVzZm9yY2UnID09PSBzeXN0ZW0gKSB7XG5cdFx0ZGF0YVsnc2FsZXNmb3JjZV9vYmplY3QnXSA9IG9iamVjdE5hbWU7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIGZpZWxkcztcblx0fVxuXG5cdCQuYWpheCgge1xuXHRcdHR5cGU6ICdQT1NUJyxcblx0XHR1cmw6IGFqYXh1cmwsXG5cdFx0ZGF0YTogZGF0YSxcblx0XHRiZWZvcmVTZW5kOiBmdW5jdGlvbigpIHtcblx0XHRcdCQoICcuc3Bpbm5lci0nICsgc3lzdGVtICkuYWRkQ2xhc3MoICdpcy1hY3RpdmUnICk7XG5cdFx0fSxcblx0XHRzdWNjZXNzOiBmdW5jdGlvbiggcmVzcG9uc2UgKSB7XG5cdFx0XHQkLmVhY2goIHJlc3BvbnNlLmRhdGEuZmllbGRzLCBmdW5jdGlvbiggaW5kZXgsIHZhbHVlICkge1xuXHRcdFx0XHRpZiAoICd3b3JkcHJlc3MnID09PSBzeXN0ZW0gKSB7XG5cdFx0XHRcdFx0ZmllbGRzICs9ICc8b3B0aW9uIHZhbHVlPVwiJyArIHZhbHVlLmtleSArICdcIj4nICsgdmFsdWUua2V5ICsgJzwvb3B0aW9uPic7XG5cdFx0XHRcdH0gZWxzZSBpZiAoICdzYWxlc2ZvcmNlJyA9PT0gc3lzdGVtICkge1xuXHRcdFx0XHRcdGZpZWxkcyArPSAnPG9wdGlvbiB2YWx1ZT1cIicgKyB2YWx1ZS5uYW1lICsgJ1wiPicgKyB2YWx1ZS5sYWJlbCArICc8L29wdGlvbj4nO1xuXHRcdFx0XHR9XG5cdFx0XHR9ICk7XG5cdFx0XHQkKCBzZWxlY3RGaWVsZCApLmh0bWwoIGZpZWxkcyApO1xuXHRcdH0sXG5cdFx0Y29tcGxldGU6IGZ1bmN0aW9uKCkge1xuXHRcdFx0JCggJy5zcGlubmVyLScgKyBzeXN0ZW0gKS5yZW1vdmVDbGFzcyggJ2lzLWFjdGl2ZScgKTtcblx0XHR9XG5cdH0gKTtcbn1cblxuLy8gbG9hZCBhdmFpbGFibGUgb3B0aW9ucyBpZiB0aGUgd29yZHByZXNzIG9iamVjdCBjaGFuZ2VzXG4kKCBkb2N1bWVudCApLm9uKCAnY2hhbmdlJywgJ3NlbGVjdCN3b3JkcHJlc3Nfb2JqZWN0JywgZnVuY3Rpb24oKSB7XG5cdHZhciB0aW1lb3V0O1xuXHRsb2FkRmllbGRPcHRpb25zKCAnd29yZHByZXNzJywgJCggdGhpcyApLnZhbCgpICk7XG5cdGNsZWFyVGltZW91dCggdGltZW91dCApO1xuXHR0aW1lb3V0ID0gc2V0VGltZW91dCggZnVuY3Rpb24oKSB7XG5cdFx0JCggJ3RhYmxlLmZpZWxkcyB0Ym9keSB0cicgKS5mYWRlT3V0KCk7XG5cdFx0JCggJ3RhYmxlLmZpZWxkcyB0Ym9keSB0cicgKS5ub3QoICcuZmllbGRtYXAtdGVtcGxhdGUnICkucmVtb3ZlKCk7XG5cdH0sIDEwMDAgKTtcbn0gKTtcblxuLy8gbG9hZCBhdmFpbGFibGUgb3B0aW9ucyBpZiB0aGUgc2FsZXNmb3JjZSBvYmplY3QgY2hhbmdlc1xuJCggZG9jdW1lbnQgKS5vbiggJ2NoYW5nZScsICdzZWxlY3Qjc2FsZXNmb3JjZV9vYmplY3QnLCBmdW5jdGlvbigpIHtcblx0dmFyIHRpbWVvdXQ7XG5cdGxvYWRGaWVsZE9wdGlvbnMoICdzYWxlc2ZvcmNlJywgJCggdGhpcyApLnZhbCgpICk7XG5cdGNsZWFyVGltZW91dCggdGltZW91dCApO1xuXHR0aW1lb3V0ID0gc2V0VGltZW91dCggZnVuY3Rpb24oKSB7XG5cdFx0JCggJ3RhYmxlLmZpZWxkcyB0Ym9keSB0cicgKS5mYWRlT3V0KCk7XG5cdFx0JCggJ3RhYmxlLmZpZWxkcyB0Ym9keSB0cicgKS5ub3QoICcuZmllbGRtYXAtdGVtcGxhdGUnICkucmVtb3ZlKCk7XG5cdH0sIDEwMDAgKTtcbn0gKTtcblxuLyoqXG4gKiBXaGVuIHRoZSBwbHVnaW4gbG9hZHM6XG4gKiBDbGVhciBmaWVsZHMgd2hlbiB0aGUgdGFyZ2V0ZWQgV29yZFByZXNzIG9yIFNhbGVzZm9yY2Ugb2JqZWN0IHR5cGUgY2hhbmdlc1xuICogTWFuYWdlIHRoZSBkaXNwbGF5IGZvciBTYWxlc2ZvcmNlIG9iamVjdCBmaWVsZHMgYmFzZWQgb24gQVBJIHJlcG9uc2VcbiAqL1xuJCggZG9jdW1lbnQgKS5yZWFkeSggZnVuY3Rpb24oKSB7XG5cblx0Ly8gaWYgdGhlcmUgaXMgYWxyZWFkeSBhIHdwIG9yIHNmIG9iamVjdCwgbWFrZSBzdXJlIGl0IGhhcyB0aGUgcmlnaHQgZmllbGRzIHdoZW4gdGhlIHBhZ2UgbG9hZHNcblx0bG9hZEZpZWxkT3B0aW9ucyggJ3dvcmRwcmVzcycsICQoICdzZWxlY3Qjd29yZHByZXNzX29iamVjdCcgKS52YWwoKSApO1xuXHRsb2FkRmllbGRPcHRpb25zKCAnc2FsZXNmb3JjZScsICQoICdzZWxlY3Qjc2FsZXNmb3JjZV9vYmplY3QnICkudmFsKCkgKTtcbn0gKTtcbiIsIlxuLyoqXG4gKiBEdXBsaWNhdGVzIHRoZSBmaWVsZHMgZm9yIGEgbmV3IHJvdyBpbiB0aGUgZmllbGRtYXAgb3B0aW9ucyBzY3JlZW4uXG4gKiB0aGlzIGFwcGVhcnMgbm90IHRvIHdvcmsgd2l0aCBkYXRhKCkgaW5zdGVhZCBvZiBhdHRyKClcbiAqL1xuIGZ1bmN0aW9uIGFkZEZpZWxkTWFwcGluZ1JvdygpIHtcblx0JCggJyNhZGQtZmllbGQtbWFwcGluZycgKS5jbGljayggZnVuY3Rpb24oKSB7XG5cdFx0dmFyIHNhbGVzZm9yY2VPYmplY3QgPSAkKCAnI3NhbGVzZm9yY2Vfb2JqZWN0JyApLnZhbCgpO1xuXHRcdHZhciB3b3JkcHJlc3NPYmplY3QgPSAkKCAnI3dvcmRwcmVzc19vYmplY3QnICkudmFsKCk7XG5cdFx0dmFyIG5ld0tleSA9IG5ldyBEYXRlKCkuZ2V0VVRDTWlsbGlzZWNvbmRzKCk7XG5cdFx0dmFyIGxhc3RSb3cgPSAkKCAndGFibGUuZmllbGRzIHRib2R5IHRyJyApLmxhc3QoKTtcblx0XHR2YXIgb2xkS2V5ID0gbGFzdFJvdy5hdHRyKCAnZGF0YS1rZXknICk7XG5cdFx0b2xkS2V5ID0gbmV3IFJlZ0V4cCggb2xkS2V5LCAnZycgKTtcblx0XHQkKCB0aGlzICkudGV4dCggJ0FkZCBhbm90aGVyIGZpZWxkIG1hcHBpbmcnICk7XG5cdFx0aWYgKCAnJyAhPT0gd29yZHByZXNzT2JqZWN0ICYmICcnICE9PSBzYWxlc2ZvcmNlT2JqZWN0ICkge1xuXHRcdFx0ZmllbGRtYXBGaWVsZHMoIG9sZEtleSwgbmV3S2V5LCBsYXN0Um93ICk7XG5cdFx0XHQkKCB0aGlzICkucGFyZW50KCkuZmluZCggJy5taXNzaW5nLW9iamVjdCcgKS5yZW1vdmUoKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0JCggdGhpcyApLnBhcmVudCgpLnByZXBlbmQoICc8ZGl2IGNsYXNzPVwiZXJyb3IgbWlzc2luZy1vYmplY3RcIj48c3Bhbj5Zb3UgaGF2ZSB0byBwaWNrIGEgV29yZFByZXNzIG9iamVjdCBhbmQgYSBTYWxlc2ZvcmNlIG9iamVjdCB0byBhZGQgZmllbGQgbWFwcGluZy48L3NwYW4+PC9kaXY+JyApO1xuXHRcdH1cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH0gKTtcbn1cblxuLyoqXG4gKiBDbG9uZXMgdGhlIGZpZWxkc2V0IG1hcmt1cCBwcm92aWRlZCBieSB0aGUgc2VydmVyLXNpZGUgdGVtcGxhdGUgYW5kIGFwcGVuZHMgaXQgYXQgdGhlIGVuZC5cbiAqIHRoaXMgYXBwZWFycyBub3QgdG8gd29yayB3aXRoIGRhdGEoKSBpbnN0ZWFkIG9mIGF0dHIoKVxuICogQHBhcmFtIHtzdHJpbmd9IG9sZEtleSB0aGUgZGF0YSBrZXkgYXR0cmlidXRlIG9mIHRoZSBzZXQgdGhhdCBpcyBiZWluZyBjbG9uZWRcbiAqIEBwYXJhbSB7c3RyaW5nfSBuZXdLZXkgdGhlIGRhdGEga2V5IGF0dHJpYnV0ZSBmb3IgdGhlIG9uZSB3ZSdyZSBhcHBlbmRpbmdcbiAqIEBwYXJhbSB7b2JqZWN0fSBsYXN0Um93IHRoZSBsYXN0IHNldCBvZiB0aGUgZmllbGRtYXBcbiAqL1xuZnVuY3Rpb24gZmllbGRtYXBGaWVsZHMoIG9sZEtleSwgbmV3S2V5LCBsYXN0Um93ICkge1xuXHR2YXIgbmV4dFJvdyA9ICcnO1xuICAgIGlmICggalF1ZXJ5LmZuLnNlbGVjdDIgKSB7XG4gICAgXHRuZXh0Um93ID0gbGFzdFJvdy5maW5kKCAnc2VsZWN0JyApLnNlbGVjdDIoICdkZXN0cm95JyApLmVuZCgpLmNsb25lKCB0cnVlICkucmVtb3ZlQ2xhc3MoICdmaWVsZG1hcC10ZW1wbGF0ZScgKTtcbiAgICB9IGVsc2Uge1xuICAgIFx0bmV4dFJvdyA9IGxhc3RSb3cuY2xvbmUoIHRydWUgKTtcbiAgICB9XG5cdCQoIG5leHRSb3cgKS5hdHRyKCAnZGF0YS1rZXknLCBuZXdLZXkgKTtcblx0JCggbmV4dFJvdyApLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdCQoIHRoaXMgKS5odG1sKCBmdW5jdGlvbiggaSwgaCApIHtcblx0XHRcdHJldHVybiBoLnJlcGxhY2UoIG9sZEtleSwgbmV3S2V5ICk7XG5cdFx0fSApO1xuXHR9ICk7XG5cdCQoICd0YWJsZS5maWVsZHMgdGJvZHknICkuYXBwZW5kKCBuZXh0Um93ICk7XG5cdGlmICggalF1ZXJ5LmZuLnNlbGVjdDIgKSB7XG5cdFx0bGFzdFJvdy5maW5kKCAnc2VsZWN0JyApLnNlbGVjdDIoKTtcblx0XHRuZXh0Um93LmZpbmQoICdzZWxlY3QnICkuc2VsZWN0MigpO1xuXHR9XG59XG5cbi8qKlxuICogQXMgdGhlIERydXBhbCBwbHVnaW4gZG9lcywgd2Ugb25seSBhbGxvdyBvbmUgZmllbGQgdG8gYmUgYSBwcmVtYXRjaFxuICovXG4kKCBkb2N1bWVudCApLm9uKCAnY2xpY2snLCAnLmNvbHVtbi1pc19wcmVtYXRjaCBpbnB1dCcsIGZ1bmN0aW9uKCkge1xuXHQkKCAnLmNvbHVtbi1pc19wcmVtYXRjaCBpbnB1dCcgKS5ub3QoIHRoaXMgKS5wcm9wKCAnY2hlY2tlZCcsIGZhbHNlICk7XG59ICk7XG5cbi8qKlxuICogQXMgdGhlIERydXBhbCBwbHVnaW4gZG9lcywgd2Ugb25seSBhbGxvdyBvbmUgZmllbGQgdG8gYmUgYSBrZXlcbiAqL1xuJCggZG9jdW1lbnQgKS5vbiggJ2NsaWNrJywgJy5jb2x1bW4taXNfa2V5IGlucHV0JywgZnVuY3Rpb24oKSB7XG5cdCQoICcuY29sdW1uLWlzX2tleSBpbnB1dCcgKS5ub3QoIHRoaXMgKS5wcm9wKCAnY2hlY2tlZCcsIGZhbHNlICk7XG59ICk7XG5cbi8qKlxuICogV2hlbiB0aGUgcGx1Z2luIGxvYWRzOlxuICogQWRkIG5ldyBmaWVsZG1hcCByb3dzXG4gKiBTZWxlY3QyIG9uIHNlbGVjdCBmaWVsZHNcbiAqL1xuJCggZG9jdW1lbnQgKS5yZWFkeSggZnVuY3Rpb24oKSB7XG5cblx0Ly8gRHVwbGljYXRlIHRoZSBmaWVsZHMgZm9yIGEgbmV3IHJvdyBpbiB0aGUgZmllbGRtYXAgb3B0aW9ucyBzY3JlZW4uXG5cdGFkZEZpZWxkTWFwcGluZ1JvdygpO1xuXG5cdC8vIHNldHVwIHRoZSBzZWxlY3QyIGZpZWxkcyBpZiB0aGUgbGlicmFyeSBpcyBwcmVzZW50XG5cdGlmICggalF1ZXJ5LmZuLnNlbGVjdDIgKSB7XG5cdFx0JCggJ3NlbGVjdCN3b3JkcHJlc3Nfb2JqZWN0JyApLnNlbGVjdDIoKTtcblx0XHQkKCAnc2VsZWN0I3NhbGVzZm9yY2Vfb2JqZWN0JyApLnNlbGVjdDIoKTtcblx0XHQkKCAnc2VsZWN0I3NhbGVzZm9yY2VfcmVjb3JkX3R5cGVfZGVmYXVsdCcgKS5zZWxlY3QyKCk7XG5cdFx0JCggJ3NlbGVjdCNwdWxsX3RyaWdnZXJfZmllbGQnICkuc2VsZWN0MigpO1xuXHRcdCQoICcuY29sdW1uLXdvcmRwcmVzc19maWVsZCBzZWxlY3QnICkuc2VsZWN0MigpO1xuXHRcdCQoICcuY29sdW1uLXNhbGVzZm9yY2VfZmllbGQgc2VsZWN0JyApLnNlbGVjdDIoKTtcblx0fVxufSApO1xuIiwiLyoqXG4gKiBIYW5kbGUgbWFudWFsIHB1c2ggb2Ygb2JqZWN0cyB0byBTYWxlc2ZvcmNlXG4gKi9cbmZ1bmN0aW9uIHB1c2hPYmplY3RzKCkge1xuXHQkKCAnLnNhbGVzZm9yY2VfdXNlcl9hamF4X21lc3NhZ2UnICkuaGlkZSgpO1xuXHRpZiAoIDAgPCAkKCAnI3dvcmRwcmVzc19vYmplY3RfYWpheCcgKS5sZW5ndGggKSB7XG5cdFx0JCggJy5wdXNoX3RvX3NhbGVzZm9yY2VfYnV0dG9uJyApLm9uKCAnY2xpY2snLCBmdW5jdGlvbigpIHtcblx0XHRcdHZhciB3b3JkcHJlc3NPYmplY3QgPSAkKCAnI3dvcmRwcmVzc19vYmplY3RfYWpheCcgKS52YWwoKTtcblx0XHRcdHZhciB3b3JkcHJlc3NJZCA9ICQoICcjd29yZHByZXNzX2lkX2FqYXgnICkudmFsKCk7XG5cdFx0XHR2YXIgc2FsZXNmb3JjZUlkID0gJCggJyNzYWxlc2ZvcmNlX2lkX2FqYXgnICkudmFsKCk7XG5cdFx0XHR2YXIgZGF0YSA9IHtcblx0XHRcdFx0J2FjdGlvbic6ICdwdXNoX3RvX3NhbGVzZm9yY2UnLFxuXHRcdFx0XHQnd29yZHByZXNzX29iamVjdCc6IHdvcmRwcmVzc09iamVjdCxcblx0XHRcdFx0J3dvcmRwcmVzc19pZCc6IHdvcmRwcmVzc0lkLFxuXHRcdFx0XHQnc2FsZXNmb3JjZV9pZCc6IHNhbGVzZm9yY2VJZFxuXHRcdFx0fTtcblx0XHRcdCQucG9zdCggYWpheHVybCwgZGF0YSwgZnVuY3Rpb24oIHJlc3BvbnNlICkge1xuXHRcdFx0XHRpZiAoIHRydWUgPT09IHJlc3BvbnNlLnN1Y2Nlc3MgKSB7XG5cdFx0XHRcdFx0dXBkYXRlU2FsZXNmb3JjZVVzZXJTdW1tYXJ5KCk7XG5cdFx0XHRcdFx0JCggJy5zYWxlc2ZvcmNlX3VzZXJfYWpheF9tZXNzYWdlJyApLndpZHRoKCAkKCAnLm1hcHBlZC1zYWxlc2ZvcmNlLXVzZXInICkud2lkdGgoKSAtIDI3ICk7XG5cdFx0XHRcdFx0JCggJy5zYWxlc2ZvcmNlX3VzZXJfYWpheF9tZXNzYWdlJyApLmh0bWwoICc8cD5UaGlzIG9iamVjdCBoYXMgYmVlbiBwdXNoZWQgdG8gU2FsZXNmb3JjZS48L3A+JyApLmZhZGVJbigpLmRlbGF5KCA0MDAwICkuZmFkZU91dCgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9ICk7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fSApO1xuXHR9XG59XG5cbi8qKlxuICogSGFuZGxlIG1hbnVhbCBwdWxsIG9mIG9iamVjdHMgZnJvbSBTYWxlc2ZvcmNlXG4gKi9cbmZ1bmN0aW9uIHB1bGxPYmplY3RzKCkge1xuXHQkKCAnLnNhbGVzZm9yY2VfdXNlcl9hamF4X21lc3NhZ2UnICkuaGlkZSgpO1xuXHQkKCAnLnB1bGxfZnJvbV9zYWxlc2ZvcmNlX2J1dHRvbicgKS5vbiggJ2NsaWNrJywgZnVuY3Rpb24oKSB7XG5cdFx0dmFyIHNhbGVzZm9yY2VJZCA9ICQoICcjc2FsZXNmb3JjZV9pZF9hamF4JyApLnZhbCgpO1xuXHRcdHZhciB3b3JkcHJlc3NPYmplY3QgPSAkKCAnI3dvcmRwcmVzc19vYmplY3RfYWpheCcgKS52YWwoKTtcblx0XHR2YXIgZGF0YSA9IHtcblx0XHRcdCdhY3Rpb24nOiAncHVsbF9mcm9tX3NhbGVzZm9yY2UnLFxuXHRcdFx0J3NhbGVzZm9yY2VfaWQnOiBzYWxlc2ZvcmNlSWQsXG5cdFx0XHQnd29yZHByZXNzX29iamVjdCc6IHdvcmRwcmVzc09iamVjdFxuXHRcdH07XG5cdFx0JC5wb3N0KCBhamF4dXJsLCBkYXRhLCBmdW5jdGlvbiggcmVzcG9uc2UgKSB7XG5cdFx0XHRpZiAoIHRydWUgPT09IHJlc3BvbnNlLnN1Y2Nlc3MgKSB7XG5cdFx0XHRcdHVwZGF0ZVNhbGVzZm9yY2VVc2VyU3VtbWFyeSgpO1xuXHRcdFx0XHQkKCAnLnNhbGVzZm9yY2VfdXNlcl9hamF4X21lc3NhZ2UnICkud2lkdGgoICQoICcubWFwcGVkLXNhbGVzZm9yY2UtdXNlcicgKS53aWR0aCgpIC0gMjcgKTtcblx0XHRcdFx0JCggJy5zYWxlc2ZvcmNlX3VzZXJfYWpheF9tZXNzYWdlJyApLmh0bWwoICc8cD5UaGlzIG9iamVjdCBoYXMgYmVlbiBwdWxsZWQgZnJvbSBTYWxlc2ZvcmNlLjwvcD4nICkuZmFkZUluKCkuZGVsYXkoIDQwMDAgKS5mYWRlT3V0KCk7XG5cdFx0XHR9XG5cdFx0fSApO1xuXHRcdHJldHVybiBmYWxzZTtcblx0fSApO1xufVxuXG4vKipcbiAqIFVwZGF0ZXMgdGhlIHVzZXIgcHJvZmlsZSBzdW1tYXJ5IG9mIFNhbGVzZm9yY2UgaW5mby5cbiAqL1xuZnVuY3Rpb24gdXBkYXRlU2FsZXNmb3JjZVVzZXJTdW1tYXJ5KCkge1xuXHR2YXIgbWFwcGluZ0lkID0gJCggJyNtYXBwaW5nX2lkX2FqYXgnICkudmFsKCk7XG5cdHZhciBkYXRhID0ge1xuXHRcdCdhY3Rpb24nOiAncmVmcmVzaF9tYXBwZWRfZGF0YScsXG5cdFx0J21hcHBpbmdfaWQnOiBtYXBwaW5nSWRcblx0fTtcblx0JC5wb3N0KCBhamF4dXJsLCBkYXRhLCBmdW5jdGlvbiggcmVzcG9uc2UgKSB7XG5cdFx0aWYgKCB0cnVlID09PSByZXNwb25zZS5zdWNjZXNzICkge1xuXHRcdFx0JCggJ3RkLmxhc3Rfc3luY19tZXNzYWdlJyApLnRleHQoIHJlc3BvbnNlLmRhdGEubGFzdF9zeW5jX21lc3NhZ2UgKTtcblx0XHRcdCQoICd0ZC5sYXN0X3N5bmNfYWN0aW9uJyApLnRleHQoIHJlc3BvbnNlLmRhdGEubGFzdF9zeW5jX2FjdGlvbiApO1xuXHRcdFx0JCggJ3RkLmxhc3Rfc3luY19zdGF0dXMnICkudGV4dCggcmVzcG9uc2UuZGF0YS5sYXN0X3N5bmNfc3RhdHVzICk7XG5cdFx0XHQkKCAndGQubGFzdF9zeW5jJyApLnRleHQoIHJlc3BvbnNlLmRhdGEubGFzdF9zeW5jICk7XG5cdFx0XHRpZiAoICcxJyA9PT0gcmVzcG9uc2UuZGF0YS5sYXN0X3N5bmNfc3RhdHVzICkge1xuXHRcdFx0XHQkKCAndGQubGFzdF9zeW5jX3N0YXR1cycgKS50ZXh0KCAnc3VjY2VzcycgKTtcblx0XHRcdH1cblx0XHR9XG5cdH0gKTtcbn1cblxuLyoqXG4gKiBDbGVhciB0aGUgcGx1Z2luIGNhY2hlIHZpYSBBamF4IHJlcXVlc3QuXG4gKi9cbmZ1bmN0aW9uIGNsZWFyU2Z3cENhY2hlTGluaygpIHtcblx0JCggJyNjbGVhci1zZndwLWNhY2hlJyApLmNsaWNrKCBmdW5jdGlvbigpIHtcblx0XHR2YXIgZGF0YSA9IHtcblx0XHRcdCdhY3Rpb24nOiAnY2xlYXJfc2Z3cF9jYWNoZSdcblx0XHR9O1xuXHRcdHZhciB0aGF0ID0gJCggdGhpcyApO1xuXHRcdCQucG9zdCggYWpheHVybCwgZGF0YSwgZnVuY3Rpb24oIHJlc3BvbnNlICkge1xuXHRcdFx0aWYgKCB0cnVlID09PSByZXNwb25zZS5zdWNjZXNzICYmIHRydWUgPT09IHJlc3BvbnNlLmRhdGEuc3VjY2VzcyApIHtcblx0XHRcdFx0dGhhdC5wYXJlbnQoKS5odG1sKCByZXNwb25zZS5kYXRhLm1lc3NhZ2UgKS5mYWRlSW4oKTtcblx0XHRcdH1cblx0XHR9ICk7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9ICk7XG59XG5cbi8qKlxuICogV2hlbiB0aGUgcGx1Z2luIGxvYWRzOlxuICogQ2xlYXIgcGx1Z2luIGNhY2hlIGJ1dHRvblxuICogTWFudWFsIHB1c2ggYW5kIHB1bGxcbiAqL1xuJCggZG9jdW1lbnQgKS5yZWFkeSggZnVuY3Rpb24oKSB7XG5cblx0Ly8gQ2xlYXIgdGhlIHBsdWdpbiBjYWNoZSB2aWEgQWpheCByZXF1ZXN0LlxuXHRjbGVhclNmd3BDYWNoZUxpbmsoKTtcblxuXHQvLyBIYW5kbGUgbWFudWFsIHB1c2ggYW5kIHB1bGwgb2Ygb2JqZWN0c1xuXHRwdXNoT2JqZWN0cygpO1xuXG5cdC8vIEhhbmRsZSBtYW51YWwgcHVsbCBvZiBvYmplY3RzXG5cdHB1bGxPYmplY3RzKCk7XG59ICk7XG4iLCIvKipcbiAqIERvbid0IHNob3cgdGhlIFdTREwgZmlsZSBmaWVsZCB1bmxlc3MgU09BUCBpcyBlbmFibGVkXG4gKi9cbmZ1bmN0aW9uIHRvZ2dsZVNvYXBGaWVsZHMoKSB7XG5cdGlmICggMCA8ICQoICcub2JqZWN0LXN5bmMtZm9yLXNhbGVzZm9yY2UtZW5hYmxlLXNvYXAnICkubGVuZ3RoICkge1xuXHRcdGlmICggJCggJy5vYmplY3Qtc3luYy1mb3Itc2FsZXNmb3JjZS1lbmFibGUtc29hcCBpbnB1dCcgKS5pcyggJzpjaGVja2VkJyApICkge1xuXHRcdFx0JCggJy5vYmplY3Qtc3luYy1mb3Itc2FsZXNmb3JjZS1zb2FwLXdzZGwtcGF0aCcgKS5zaG93KCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdCQoICcub2JqZWN0LXN5bmMtZm9yLXNhbGVzZm9yY2Utc29hcC13c2RsLXBhdGgnICkuaGlkZSgpO1xuXHRcdH1cblx0fVxufVxuXG4vLyBEb24ndCBzaG93IHRoZSBXU0RMIGZpbGUgZmllbGQgdW5sZXNzIFNPQVAgaXMgZW5hYmxlZFxuJCggZG9jdW1lbnQgKS5vbiggJ2NoYW5nZScsICcub2JqZWN0LXN5bmMtZm9yLXNhbGVzZm9yY2UtZW5hYmxlLXNvYXAgaW5wdXQnLCBmdW5jdGlvbigpIHtcblx0dG9nZ2xlU29hcEZpZWxkcygpO1xufSApO1xuXG4kKCBkb2N1bWVudCApLnJlYWR5KCBmdW5jdGlvbigpIHtcblxuXHQvLyBEb24ndCBzaG93IHRoZSBXU0RMIGZpbGUgZmllbGQgdW5sZXNzIFNPQVAgaXMgZW5hYmxlZFxuXHR0b2dnbGVTb2FwRmllbGRzKCk7XG59ICk7XG4iXX0= +//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIjAxLXNhbGVzZm9yY2Utb2JqZWN0LmpzIiwiMDItbG9hZC1maWVsZC1vcHRpb25zLmpzIiwiMDMtZmllbGRtYXAtcm93cy5qcyIsIjA0LWludGVyZmFjZS1hamF4LWV2ZW50cy5qcyIsIjA1LXNvYXAuanMiXSwibmFtZXMiOlsic2FsZXNmb3JjZU9iamVjdEZpZWxkcyIsImRlbGF5IiwidGltZXIiLCJjYWxsYmFjayIsIm1zIiwiY2xlYXJUaW1lb3V0Iiwic2V0VGltZW91dCIsIiQiLCJsZW5ndGgiLCJoaWRlIiwib24iLCJ0aGF0IiwiZGVsYXlUaW1lIiwiZGF0YSIsInZhbHVlIiwicG9zdCIsImFqYXh1cmwiLCJyZXNwb25zZSIsInJlY29yZFR5cGVzQWxsb3dlZE1hcmt1cCIsInJlY29yZFR5cGVEZWZhdWx0TWFya3VwIiwiZGF0ZU1hcmt1cCIsInJlY29yZFR5cGVJbmZvcyIsImVhY2giLCJpbmRleCIsImh0bWwiLCJmaWVsZHMiLCJuYW1lIiwibGFiZWwiLCJzaG93IiwialF1ZXJ5IiwiZm4iLCJzZWxlY3QyIiwiZG9jdW1lbnQiLCJyZWFkeSIsImxvYWRGaWVsZE9wdGlvbnMiLCJzeXN0ZW0iLCJvYmplY3ROYW1lIiwic2VsZWN0RmllbGQiLCJmaXJzdEZpZWxkIiwiZmlyc3QiLCJ0ZXh0IiwidmFsIiwiYWpheCIsInR5cGUiLCJ1cmwiLCJiZWZvcmVTZW5kIiwiYWRkQ2xhc3MiLCJzdWNjZXNzIiwia2V5IiwiY29tcGxldGUiLCJyZW1vdmVDbGFzcyIsInRpbWVvdXQiLCJmYWRlT3V0Iiwibm90IiwicmVtb3ZlIiwiYWRkRmllbGRNYXBwaW5nUm93IiwiY2xpY2siLCJzYWxlc2ZvcmNlT2JqZWN0Iiwid29yZHByZXNzT2JqZWN0IiwibmV3S2V5IiwiRGF0ZSIsImdldFVUQ01pbGxpc2Vjb25kcyIsImxhc3RSb3ciLCJsYXN0Iiwib2xkS2V5IiwiYXR0ciIsIlJlZ0V4cCIsImZpZWxkbWFwRmllbGRzIiwicGFyZW50IiwiZmluZCIsInByZXBlbmQiLCJuZXh0Um93IiwiZW5kIiwiY2xvbmUiLCJpIiwiaCIsInJlcGxhY2UiLCJhcHBlbmQiLCJwcm9wIiwicHVzaE9iamVjdHMiLCJ3b3JkcHJlc3NJZCIsInNhbGVzZm9yY2VJZCIsInVwZGF0ZVNhbGVzZm9yY2VVc2VyU3VtbWFyeSIsIndpZHRoIiwiZmFkZUluIiwicHVsbE9iamVjdHMiLCJtYXBwaW5nSWQiLCJsYXN0X3N5bmNfbWVzc2FnZSIsImxhc3Rfc3luY19hY3Rpb24iLCJsYXN0X3N5bmNfc3RhdHVzIiwibGFzdF9zeW5jIiwiY2xlYXJTZndwQ2FjaGVMaW5rIiwibWVzc2FnZSIsInRvZ2dsZVNvYXBGaWVsZHMiLCJpcyJdLCJtYXBwaW5ncyI6Ijs7QUFBQTs7OztBQUlBLFNBQVNBLHNCQUFULEdBQWtDO0FBRWpDLE1BQUlDLEtBQUssR0FBSyxZQUFXO0FBQ3hCLFFBQUlDLEtBQUssR0FBRyxDQUFaO0FBQ0EsV0FBTyxVQUFVQyxRQUFWLEVBQW9CQyxFQUFwQixFQUF5QjtBQUMvQkMsTUFBQUEsWUFBWSxDQUFHSCxLQUFILENBQVo7QUFDQUEsTUFBQUEsS0FBSyxHQUFHSSxVQUFVLENBQUVILFFBQUYsRUFBWUMsRUFBWixDQUFsQjtBQUNBLEtBSEQ7QUFJQSxHQU5hLEVBQWQ7O0FBUUEsTUFBSyxNQUFNRyxDQUFDLENBQUUsc0NBQUYsQ0FBRCxDQUE0Q0MsTUFBdkQsRUFBZ0U7QUFDL0RELElBQUFBLENBQUMsQ0FBRSxrQ0FBRixDQUFELENBQXdDRSxJQUF4QztBQUNBOztBQUVELE1BQUssTUFBTUYsQ0FBQyxDQUFFLHFDQUFGLENBQUQsQ0FBMkNDLE1BQXRELEVBQStEO0FBQzlERCxJQUFBQSxDQUFDLENBQUUsaUNBQUYsQ0FBRCxDQUF1Q0UsSUFBdkM7QUFDQTs7QUFDRCxNQUFLLE1BQU1GLENBQUMsQ0FBRSx5QkFBRixDQUFELENBQStCQyxNQUExQyxFQUFtRDtBQUNsREQsSUFBQUEsQ0FBQyxDQUFFLHFCQUFGLENBQUQsQ0FBMkJFLElBQTNCO0FBQ0E7O0FBRURGLEVBQUFBLENBQUMs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LEMsQ0FFRDs7O0FBQ0FGLENBQUMsQ0FBRXlCLFFBQUYsQ0FBRCxDQUFjdEIsRUFBZCxDQUFrQixRQUFsQixFQUE0QiwrQ0FBNUIsRUFBNkUsWUFBVztBQUN2Rm1GLEVBQUFBLGdCQUFnQjtBQUNoQixDQUZEO0FBSUF0RixDQUFDLENBQUV5QixRQUFGLENBQUQsQ0FBY0MsS0FBZCxDQUFxQixZQUFXO0FBRS9CO0FBQ0E0RCxFQUFBQSxnQkFBZ0I7QUFDaEIsQ0FKRCIsImZpbGUiOiJvYmplY3Qtc3luYy1mb3Itc2FsZXNmb3JjZS1hZG1pbi5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJhdGVzIHRoZSBTYWxlc2ZvcmNlIG9iamVjdCBmaWVsZHMgYmFzZWQgb24gdGhlIGRyb3Bkb3duIGFjdGl2aXR5IGFuZCBBUEkgcmVzdWx0cy5cbiAqIFRoaXMgYWxzbyBnZW5lcmF0ZXMgb3RoZXIgcXVlcnkgZmllbGRzIHRoYXQgYXJlIG9iamVjdC1zcGVjaWZpYywgbGlrZSBkYXRlIGZpZWxkcywgcmVjb3JkIHR5cGVzIGFsbG93ZWQsIGV0Yy5cbiAqL1xuZnVuY3Rpb24gc2FsZXNmb3JjZU9iamVjdEZpZWxkcygpIHtcblxuXHR2YXIgZGVsYXkgPSAoIGZ1bmN0aW9uKCkge1xuXHRcdHZhciB0aW1lciA9IDA7XG5cdFx0cmV0dXJuIGZ1bmN0aW9uKCBjYWxsYmFjaywgbXMgKSB7XG5cdFx0XHRjbGVhclRpbWVvdXQgKCB0aW1lciApO1xuXHRcdFx0dGltZXIgPSBzZXRUaW1lb3V0KCBjYWxsYmFjaywgbXMgKTtcblx0XHR9O1xuXHR9KCkgKTtcblxuXHRpZiAoIDAgPT09ICQoICcuc2FsZXNmb3JjZV9yZWNvcmRfdHlwZXNfYWxsb3dlZCA+IConICkubGVuZ3RoICkge1xuXHRcdCQoICcuc2FsZXNmb3JjZV9yZWNvcmRfdHlwZXNfYWxsb3dlZCcgKS5oaWRlKCk7XG5cdH1cblxuXHRpZiAoIDAgPT09ICQoICcuc2FsZXNmb3JjZV9yZWNvcmRfdHlwZV9kZWZhdWx0ID4gKicgKS5sZW5ndGggKSB7XG5cdFx0JCggJy5zYWxlc2ZvcmNlX3JlY29yZF90eXBlX2RlZmF1bHQnICkuaGlkZSgpO1xuXHR9XG5cdGlmICggMCA9PT0gJCggJy5wdWxsX3RyaWdnZXJfZmllbGQgPiAqJyApLmxlbmd0aCApIHtcblx0XHQkKCAnLnB1bGxfdHJpZ2dlcl9maWVsZCcgKS5oaWRlKCk7XG5cdH1cblxuXHQkKCAnI3NhbGVzZm9yY2Vfb2JqZWN0JyApLm9uKCAnY2hhbmdlJywgZnVuY3Rpb24oKSB7XG5cdFx0dmFyIHRoYXQgPSB0aGlzO1xuXHRcdHZhciBkZWxheVRpbWUgPSAxMDAwO1xuXHRcdGRlbGF5KCBmdW5jdGlvbigpIHtcblx0XHRcdHZhciBkYXRhID0ge1xuXHRcdFx0XHQnYWN0aW9uJzogJ2dldF9zYWxlc2ZvcmNlX29iamVjdF9kZXNjcmlwdGlvbicsXG5cdFx0XHRcdCdpbmNsdWRlJzogWyAnZmllbGRzJywgJ3JlY29yZFR5cGVJbmZvcycgXSxcblx0XHRcdFx0J2ZpZWxkX3R5cGUnOiAnZGF0ZXRpbWUnLFxuXHRcdFx0XHQnc2FsZXNmb3JjZV9vYmplY3QnOiB0aGF0LnZhbHVlXG5cdFx0XHR9O1xuXHRcdFx0JC5wb3N0KCBhamF4dXJsLCBkYXRhLCBmdW5jdGlvbiggcmVzcG9uc2UgKSB7XG5cdFx0XHRcdHZhciByZWNvcmRUeXBlc0FsbG93ZWRNYXJrdXAgPSAnJztcblx0XHRcdFx0dmFyIHJlY29yZFR5cGVEZWZhdWx0TWFya3VwID0gJyc7XG5cdFx0XHRcdHZhciBkYXRlTWFya3VwID0gJyc7XG5cdFx0XHRcdGlmICggMCA8ICQoIHJlc3BvbnNlLmRhdGEucmVjb3JkVHlwZUluZm9zICkubGVuZ3RoICkge1xuXHRcdFx0XHRcdHJlY29yZFR5cGVzQWxsb3dlZE1hcmt1cCArPSAnPGxhYmVsIGZvcj1cInNhbGVzZm9yY2VfcmVjb3JkX3R5cGVzX2FsbG93ZWRcIj5BbGxvd2VkIFJlY29yZCBUeXBlczo8L2xhYmVsPjxkaXYgY2xhc3M9XCJjaGVja2JveGVzXCI+Jztcblx0XHRcdFx0XHQkLmVhY2goIHJlc3BvbnNlLmRhdGEucmVjb3JkVHlwZUluZm9zLCBmdW5jdGlvbiggaW5kZXgsIHZhbHVlICkge1xuXHRcdFx0XHRcdFx0cmVjb3JkVHlwZXNBbGxvd2VkTWFya3VwICs9ICc8bGFiZWw+PGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGNsYXNzPVwiZm9ybS1jaGVja2JveFwiIHZhbHVlPVwiJyArIGluZGV4ICsgJ1wiIG5hbWU9XCJzYWxlc2ZvcmNlX3JlY29yZF90eXBlc19hbGxvd2VkWycgKyBpbmRleCArICddXCIgaWQ9XCJzYWxlc2ZvcmNlX3JlY29yZF90eXBlc19hbGxvd2VkLScgKyBpbmRleCArICdcIj4gJyArIHZhbHVlICsgJzwvbGFiZWw+Jztcblx0XHRcdFx0XHR9ICk7XG5cdFx0XHRcdFx0cmVjb3JkVHlwZXNBbGxvd2VkTWFya3VwICs9ICc8L2Rpdj4nO1xuXHRcdFx0XHRcdHJlY29yZFR5cGVEZWZhdWx0TWFya3VwICs9ICc8bGFiZWwgZm9yPVwic2FsZXNmb3JjZV9yZWNvcmRfdHlwZV9kZWZhdWx0XCI+RGVmYXVsdCBSZWNvcmQgVHlwZTo8L2xhYmVsPic7XG5cdFx0XHRcdFx0cmVjb3JkVHlwZURlZmF1bHRNYXJrdXAgKz0gJzxzZWxlY3QgbmFtZT1cInNhbGVzZm9yY2VfcmVjb3JkX3R5cGVfZGVmYXVsdFwiIGlkPVwic2FsZXNmb3JjZV9yZWNvcmRfdHlwZV9kZWZhdWx0XCI+PG9wdGlvbiB2YWx1ZT1cIlwiPi0gU2VsZWN0IHJlY29yZCB0eXBlIC08L29wdGlvbj4nO1xuXHRcdFx0XHRcdCQuZWFjaCggcmVzcG9uc2UuZGF0YS5yZWNvcmRUeXBlSW5mb3MsIGZ1bmN0aW9uKCBpbmRleCwgdmFsdWUgKSB7XG5cdFx0XHRcdFx0XHRyZWNvcmRUeXBlRGVmYXVsdE1hcmt1cCArPSAnPG9wdGlvbiB2YWx1ZT1cIicgKyBpbmRleCArICdcIj4nICsgdmFsdWUgKyAnPC9vcHRpb24+Jztcblx0XHRcdFx0XHR9ICk7XG5cdFx0XHRcdH1cblx0XHRcdFx0JCggJy5zYWxlc2ZvcmNlX3JlY29yZF90eXBlc19hbGxvd2VkJyApLmh0bWwoIHJlY29yZFR5cGVzQWxsb3dlZE1hcmt1cCApO1xuXHRcdFx0XHQkKCAnLnNhbGVzZm9yY2VfcmVjb3JkX3R5cGVfZGVmYXVsdCcgKS5odG1sKCByZWNvcmRUeXBlRGVmYXVsdE1hcmt1cCApO1xuXHRcdFx0XHRpZiAoIDAgPCAkKCByZXNwb25zZS5kYXRhLmZpZWxkcyApLmxlbmd0aCApIHtcblx0XHRcdFx0XHRkYXRlTWFya3VwICs9ICc8bGFiZWwgZm9yPVwicHVsbF90cmlnZ2VyX2ZpZWxkXCI+RGF0ZSBmaWVsZCB0byB0cmlnZ2VyIHB1bGw6PC9sYWJlbD4nO1xuXHRcdFx0XHRcdGRhdGVNYXJrdXAgKz0gJzxzZWxlY3QgbmFtZT1cInB1bGxfdHJpZ2dlcl9maWVsZFwiIGlkPVwicHVsbF90cmlnZ2VyX2ZpZWxkXCI+PG9wdGlvbiB2YWx1ZT1cIlwiPi0gU2VsZWN0IGRhdGUgZmllbGQgLTwvb3B0aW9uPic7XG5cdFx0XHRcdFx0JC5lYWNoKCByZXNwb25zZS5kYXRhLmZpZWxkcywgZnVuY3Rpb24oIGluZGV4LCB2YWx1ZSApIHtcblx0XHRcdFx0XHRcdGRhdGVNYXJrdXAgKz0gJzxvcHRpb24gdmFsdWU9XCInICsgdmFsdWUubmFtZSArICdcIj4nICsgdmFsdWUubGFiZWwgKyAnPC9vcHRpb24+Jztcblx0XHRcdFx0XHR9ICk7XG5cdFx0XHRcdFx0ZGF0ZU1hcmt1cCArPSAnPC9zZWxlY3Q+Jztcblx0XHRcdFx0XHRkYXRlTWFya3VwICs9ICc8cCBjbGFzcz1cImRlc2NyaXB0aW9uXCI+VGhlc2UgYXJlIGRhdGUgZmllbGRzIHRoYXQgY2FuIGNhdXNlIFdvcmRQcmVzcyB0byBwdWxsIGFuIHVwZGF0ZSBmcm9tIFNhbGVzZm9yY2UsIGFjY29yZGluZyB0byB0aGUgPGNvZGU+c2FsZXNmb3JjZV9wdWxsPC9jb2RlPiBjbGFzcy48L3A+Jztcblx0XHRcdFx0fVxuXHRcdFx0XHQkKCAnLnB1bGxfdHJpZ2dlcl9maWVsZCcgKS5odG1sKCBkYXRlTWFya3VwICk7XG5cdFx0XHRcdGlmICggJycgIT09IHJlY29yZFR5cGVzQWxsb3dlZE1hcmt1cCApIHtcblx0XHRcdFx0XHQkKCAnLnNhbGVzZm9yY2VfcmVjb3JkX3R5cGVzX2FsbG93ZWQnICkuc2hvdygpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdCQoICcuc2FsZXNmb3JjZV9yZWNvcmRfdHlwZXNfYWxsb3dlZCcgKS5oaWRlKCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKCAnJyAhPT0gcmVjb3JkVHlwZURlZmF1bHRNYXJrdXAgKSB7XG5cdFx0XHRcdFx0JCggJy5zYWxlc2ZvcmNlX3JlY29yZF90eXBlX2RlZmF1bHQnICkuc2hvdygpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdCQoICcuc2FsZXNmb3JjZV9yZWNvcmRfdHlwZV9kZWZhdWx0JyApLmhpZGUoKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoICcnICE9PSBkYXRlTWFya3VwICkge1xuXHRcdFx0XHRcdCQoICcucHVsbF90cmlnZ2VyX2ZpZWxkJyApLnNob3coKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHQkKCAnLnB1bGxfdHJpZ2dlcl9maWVsZCcgKS5oaWRlKCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKCBqUXVlcnkuZm4uc2VsZWN0MiApIHtcblx0XHRcdFx0XHQkKCAnc2VsZWN0I3NhbGVzZm9yY2VfcmVjb3JkX3R5cGVfZGVmYXVsdCcgKS5zZWxlY3QyKCk7XG5cdFx0XHRcdFx0JCggJ3NlbGVjdCNwdWxsX3RyaWdnZXJfZmllbGQnICkuc2VsZWN0MigpO1xuXHRcdFx0XHR9XG5cdFx0XHR9ICk7XG5cdFx0fSwgZGVsYXlUaW1lICk7XG5cdH0gKTtcbn1cblxuLyoqXG4gKiBXaGVuIHRoZSBwbHVnaW4gbG9hZHM6XG4gKiBNYW5hZ2UgdGhlIGRpc3BsYXkgZm9yIFNhbGVzZm9yY2Ugb2JqZWN0IGZpZWxkcyBiYXNlZCBvbiBBUEkgcmVzcG9uc2VcbiAqL1xuJCggZG9jdW1lbnQgKS5yZWFkeSggZnVuY3Rpb24oKSB7XG5cblx0Ly8gZ2V0IHRoZSBhdmFpbGFibGUgU2FsZXNmb3JjZSBvYmplY3QgY2hvaWNlc1xuXHRzYWxlc2ZvcmNlT2JqZWN0RmllbGRzKCk7XG59ICk7XG4iLCIvKipcbiAqIEdldHMgdGhlIFdvcmRQcmVzcyBhbmQgU2FsZXNmb3JjZSBmaWVsZCByZXN1bHRzIHZpYSBhbiBBamF4IGNhbGxcbiAqIEBwYXJhbSB7c3RyaW5nfSBzeXN0ZW0gd2hldGhlciB3ZSB3YW50IFdvcmRQcmVzcyBvciBTYWxlc2ZvcmNlIGRhdGFcbiAqIEBwYXJhbSB7c3RyaW5nfSBvYmplY3ROYW1lIHRoZSB2YWx1ZSBmb3IgdGhlIG9iamVjdCBuYW1lIGZyb20gdGhlIHRoZSA8c2VsZWN0PlxuICovXG5mdW5jdGlvbiBsb2FkRmllbGRPcHRpb25zKCBzeXN0ZW0sIG9iamVjdE5hbWUgKSB7XG5cdHZhciBkYXRhID0ge1xuXHRcdCdhY3Rpb24nOiAnZ2V0XycgKyBzeXN0ZW0gKyAnX29iamVjdF9maWVsZHMnXG5cdH07XG5cdHZhciBzZWxlY3RGaWVsZCA9ICcuY29sdW1uLScgKyBzeXN0ZW0gKyAnX2ZpZWxkIHNlbGVjdCc7XG5cdHZhciBmaWVsZHMgPSAnJztcblx0dmFyIGZpcnN0RmllbGQgPSAkKCBzZWxlY3RGaWVsZCArICcgb3B0aW9uJyApLmZpcnN0KCkudGV4dCgpO1xuXHRpZiAoICcnICE9PSAkKCBzZWxlY3RGaWVsZCApLnZhbCgpICkge1xuXHRcdHJldHVybjtcblx0fVxuXHRmaWVsZHMgKz0gJzxvcHRpb24gdmFsdWU9XCJcIj4nICsgZmlyc3RGaWVsZCArICc8L29wdGlvbj4nO1xuXHRpZiAoICd3b3JkcHJlc3MnID09PSBzeXN0ZW0gKSB7XG5cdFx0ZGF0YVsnd29yZHByZXNzX29iamVjdCddID0gb2JqZWN0TmFtZTtcblx0fSBlbHNlIGlmICggJ3NhbGVzZm9yY2UnID09PSBzeXN0ZW0gKSB7XG5cdFx0ZGF0YVsnc2FsZXNmb3JjZV9vYmplY3QnXSA9IG9iamVjdE5hbWU7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIGZpZWxkcztcblx0fVxuXG5cdCQuYWpheCgge1xuXHRcdHR5cGU6ICdQT1NUJyxcblx0XHR1cmw6IGFqYXh1cmwsXG5cdFx0ZGF0YTogZGF0YSxcblx0XHRiZWZvcmVTZW5kOiBmdW5jdGlvbigpIHtcblx0XHRcdCQoICcuc3Bpbm5lci0nICsgc3lzdGVtICkuYWRkQ2xhc3MoICdpcy1hY3RpdmUnICk7XG5cdFx0fSxcblx0XHRzdWNjZXNzOiBmdW5jdGlvbiggcmVzcG9uc2UgKSB7XG5cdFx0XHQkLmVhY2goIHJlc3BvbnNlLmRhdGEuZmllbGRzLCBmdW5jdGlvbiggaW5kZXgsIHZhbHVlICkge1xuXHRcdFx0XHRpZiAoICd3b3JkcHJlc3MnID09PSBzeXN0ZW0gKSB7XG5cdFx0XHRcdFx0ZmllbGRzICs9ICc8b3B0aW9uIHZhbHVlPVwiJyArIHZhbHVlLmtleSArICdcIj4nICsgdmFsdWUua2V5ICsgJzwvb3B0aW9uPic7XG5cdFx0XHRcdH0gZWxzZSBpZiAoICdzYWxlc2ZvcmNlJyA9PT0gc3lzdGVtICkge1xuXHRcdFx0XHRcdGZpZWxkcyArPSAnPG9wdGlvbiB2YWx1ZT1cIicgKyB2YWx1ZS5uYW1lICsgJ1wiPicgKyB2YWx1ZS5sYWJlbCArICc8L29wdGlvbj4nO1xuXHRcdFx0XHR9XG5cdFx0XHR9ICk7XG5cdFx0XHQkKCBzZWxlY3RGaWVsZCApLmh0bWwoIGZpZWxkcyApO1xuXHRcdH0sXG5cdFx0Y29tcGxldGU6IGZ1bmN0aW9uKCkge1xuXHRcdFx0JCggJy5zcGlubmVyLScgKyBzeXN0ZW0gKS5yZW1vdmVDbGFzcyggJ2lzLWFjdGl2ZScgKTtcblx0XHR9XG5cdH0gKTtcbn1cblxuLy8gbG9hZCBhdmFpbGFibGUgb3B0aW9ucyBpZiB0aGUgd29yZHByZXNzIG9iamVjdCBjaGFuZ2VzXG4kKCBkb2N1bWVudCApLm9uKCAnY2hhbmdlJywgJ3NlbGVjdCN3b3JkcHJlc3Nfb2JqZWN0JywgZnVuY3Rpb24oKSB7XG5cdHZhciB0aW1lb3V0O1xuXHRsb2FkRmllbGRPcHRpb25zKCAnd29yZHByZXNzJywgJCggdGhpcyApLnZhbCgpICk7XG5cdGNsZWFyVGltZW91dCggdGltZW91dCApO1xuXHR0aW1lb3V0ID0gc2V0VGltZW91dCggZnVuY3Rpb24oKSB7XG5cdFx0JCggJ3RhYmxlLmZpZWxkcyB0Ym9keSB0cicgKS5mYWRlT3V0KCk7XG5cdFx0JCggJ3RhYmxlLmZpZWxkcyB0Ym9keSB0cicgKS5ub3QoICcuZmllbGRtYXAtdGVtcGxhdGUnICkucmVtb3ZlKCk7XG5cdH0sIDEwMDAgKTtcbn0gKTtcblxuLy8gbG9hZCBhdmFpbGFibGUgb3B0aW9ucyBpZiB0aGUgc2FsZXNmb3JjZSBvYmplY3QgY2hhbmdlc1xuJCggZG9jdW1lbnQgKS5vbiggJ2NoYW5nZScsICdzZWxlY3Qjc2FsZXNmb3JjZV9vYmplY3QnLCBmdW5jdGlvbigpIHtcblx0dmFyIHRpbWVvdXQ7XG5cdGxvYWRGaWVsZE9wdGlvbnMoICdzYWxlc2ZvcmNlJywgJCggdGhpcyApLnZhbCgpICk7XG5cdGNsZWFyVGltZW91dCggdGltZW91dCApO1xuXHR0aW1lb3V0ID0gc2V0VGltZW91dCggZnVuY3Rpb24oKSB7XG5cdFx0JCggJ3RhYmxlLmZpZWxkcyB0Ym9keSB0cicgKS5mYWRlT3V0KCk7XG5cdFx0JCggJ3RhYmxlLmZpZWxkcyB0Ym9keSB0cicgKS5ub3QoICcuZmllbGRtYXAtdGVtcGxhdGUnICkucmVtb3ZlKCk7XG5cdH0sIDEwMDAgKTtcbn0gKTtcblxuLyoqXG4gKiBXaGVuIHRoZSBwbHVnaW4gbG9hZHM6XG4gKiBDbGVhciBmaWVsZHMgd2hlbiB0aGUgdGFyZ2V0ZWQgV29yZFByZXNzIG9yIFNhbGVzZm9yY2Ugb2JqZWN0IHR5cGUgY2hhbmdlc1xuICogTWFuYWdlIHRoZSBkaXNwbGF5IGZvciBTYWxlc2ZvcmNlIG9iamVjdCBmaWVsZHMgYmFzZWQgb24gQVBJIHJlcG9uc2VcbiAqL1xuJCggZG9jdW1lbnQgKS5yZWFkeSggZnVuY3Rpb24oKSB7XG5cblx0Ly8gaWYgdGhlcmUgaXMgYWxyZWFkeSBhIHdwIG9yIHNmIG9iamVjdCwgbWFrZSBzdXJlIGl0IGhhcyB0aGUgcmlnaHQgZmllbGRzIHdoZW4gdGhlIHBhZ2UgbG9hZHNcblx0bG9hZEZpZWxkT3B0aW9ucyggJ3dvcmRwcmVzcycsICQoICdzZWxlY3Qjd29yZHByZXNzX29iamVjdCcgKS52YWwoKSApO1xuXHRsb2FkRmllbGRPcHRpb25zKCAnc2FsZXNmb3JjZScsICQoICdzZWxlY3Qjc2FsZXNmb3JjZV9vYmplY3QnICkudmFsKCkgKTtcbn0gKTtcbiIsIlxuLyoqXG4gKiBEdXBsaWNhdGVzIHRoZSBmaWVsZHMgZm9yIGEgbmV3IHJvdyBpbiB0aGUgZmllbGRtYXAgb3B0aW9ucyBzY3JlZW4uXG4gKiB0aGlzIGFwcGVhcnMgbm90IHRvIHdvcmsgd2l0aCBkYXRhKCkgaW5zdGVhZCBvZiBhdHRyKClcbiAqL1xuIGZ1bmN0aW9uIGFkZEZpZWxkTWFwcGluZ1JvdygpIHtcblx0JCggJyNhZGQtZmllbGQtbWFwcGluZycgKS5jbGljayggZnVuY3Rpb24oKSB7XG5cdFx0dmFyIHNhbGVzZm9yY2VPYmplY3QgPSAkKCAnI3NhbGVzZm9yY2Vfb2JqZWN0JyApLnZhbCgpO1xuXHRcdHZhciB3b3JkcHJlc3NPYmplY3QgPSAkKCAnI3dvcmRwcmVzc19vYmplY3QnICkudmFsKCk7XG5cdFx0dmFyIG5ld0tleSA9IG5ldyBEYXRlKCkuZ2V0VVRDTWlsbGlzZWNvbmRzKCk7XG5cdFx0dmFyIGxhc3RSb3cgPSAkKCAndGFibGUuZmllbGRzIHRib2R5IHRyJyApLmxhc3QoKTtcblx0XHR2YXIgb2xkS2V5ID0gbGFzdFJvdy5hdHRyKCAnZGF0YS1rZXknICk7XG5cdFx0b2xkS2V5ID0gbmV3IFJlZ0V4cCggb2xkS2V5LCAnZycgKTtcblx0XHQkKCB0aGlzICkudGV4dCggJ0FkZCBhbm90aGVyIGZpZWxkIG1hcHBpbmcnICk7XG5cdFx0aWYgKCAnJyAhPT0gd29yZHByZXNzT2JqZWN0ICYmICcnICE9PSBzYWxlc2ZvcmNlT2JqZWN0ICkge1xuXHRcdFx0ZmllbGRtYXBGaWVsZHMoIG9sZEtleSwgbmV3S2V5LCBsYXN0Um93ICk7XG5cdFx0XHQkKCB0aGlzICkucGFyZW50KCkuZmluZCggJy5taXNzaW5nLW9iamVjdCcgKS5yZW1vdmUoKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0JCggdGhpcyApLnBhcmVudCgpLnByZXBlbmQoICc8ZGl2IGNsYXNzPVwiZXJyb3IgbWlzc2luZy1vYmplY3RcIj48c3Bhbj5Zb3UgaGF2ZSB0byBwaWNrIGEgV29yZFByZXNzIG9iamVjdCBhbmQgYSBTYWxlc2ZvcmNlIG9iamVjdCB0byBhZGQgZmllbGQgbWFwcGluZy48L3NwYW4+PC9kaXY+JyApO1xuXHRcdH1cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH0gKTtcbn1cblxuLyoqXG4gKiBDbG9uZXMgdGhlIGZpZWxkc2V0IG1hcmt1cCBwcm92aWRlZCBieSB0aGUgc2VydmVyLXNpZGUgdGVtcGxhdGUgYW5kIGFwcGVuZHMgaXQgYXQgdGhlIGVuZC5cbiAqIHRoaXMgYXBwZWFycyBub3QgdG8gd29yayB3aXRoIGRhdGEoKSBpbnN0ZWFkIG9mIGF0dHIoKVxuICogQHBhcmFtIHtzdHJpbmd9IG9sZEtleSB0aGUgZGF0YSBrZXkgYXR0cmlidXRlIG9mIHRoZSBzZXQgdGhhdCBpcyBiZWluZyBjbG9uZWRcbiAqIEBwYXJhbSB7c3RyaW5nfSBuZXdLZXkgdGhlIGRhdGEga2V5IGF0dHJpYnV0ZSBmb3IgdGhlIG9uZSB3ZSdyZSBhcHBlbmRpbmdcbiAqIEBwYXJhbSB7b2JqZWN0fSBsYXN0Um93IHRoZSBsYXN0IHNldCBvZiB0aGUgZmllbGRtYXBcbiAqL1xuZnVuY3Rpb24gZmllbGRtYXBGaWVsZHMoIG9sZEtleSwgbmV3S2V5LCBsYXN0Um93ICkge1xuXHR2YXIgbmV4dFJvdyA9ICcnO1xuXHRpZiAoIGpRdWVyeS5mbi5zZWxlY3QyICkge1xuXHRcdG5leHRSb3cgPSBsYXN0Um93LmZpbmQoICdzZWxlY3QnICkuc2VsZWN0MiggJ2Rlc3Ryb3knICkuZW5kKCkuY2xvbmUoIHRydWUgKS5yZW1vdmVDbGFzcyggJ2ZpZWxkbWFwLXRlbXBsYXRlJyApO1xuXHR9IGVsc2Uge1xuXHRcdG5leHRSb3cgPSBsYXN0Um93LmNsb25lKCB0cnVlICk7XG5cdH1cblx0JCggbmV4dFJvdyApLmF0dHIoICdkYXRhLWtleScsIG5ld0tleSApO1xuXHQkKCBuZXh0Um93ICkuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0JCggdGhpcyApLmh0bWwoIGZ1bmN0aW9uKCBpLCBoICkge1xuXHRcdFx0cmV0dXJuIGgucmVwbGFjZSggb2xkS2V5LCBuZXdLZXkgKTtcblx0XHR9ICk7XG5cdH0gKTtcblx0JCggJ3RhYmxlLmZpZWxkcyB0Ym9keScgKS5hcHBlbmQoIG5leHRSb3cgKTtcblx0aWYgKCBqUXVlcnkuZm4uc2VsZWN0MiApIHtcblx0XHRsYXN0Um93LmZpbmQoICdzZWxlY3QnICkuc2VsZWN0MigpO1xuXHRcdG5leHRSb3cuZmluZCggJ3NlbGVjdCcgKS5zZWxlY3QyKCk7XG5cdH1cbn1cblxuLyoqXG4gKiBBcyB0aGUgRHJ1cGFsIHBsdWdpbiBkb2VzLCB3ZSBvbmx5IGFsbG93IG9uZSBmaWVsZCB0byBiZSBhIHByZW1hdGNoXG4gKi9cbiQoIGRvY3VtZW50ICkub24oICdjbGljaycsICcuY29sdW1uLWlzX3ByZW1hdGNoIGlucHV0JywgZnVuY3Rpb24oKSB7XG5cdCQoICcuY29sdW1uLWlzX3ByZW1hdGNoIGlucHV0JyApLm5vdCggdGhpcyApLnByb3AoICdjaGVja2VkJywgZmFsc2UgKTtcbn0gKTtcblxuLyoqXG4gKiBBcyB0aGUgRHJ1cGFsIHBsdWdpbiBkb2VzLCB3ZSBvbmx5IGFsbG93IG9uZSBmaWVsZCB0byBiZSBhIGtleVxuICovXG4kKCBkb2N1bWVudCApLm9uKCAnY2xpY2snLCAnLmNvbHVtbi1pc19rZXkgaW5wdXQnLCBmdW5jdGlvbigpIHtcblx0JCggJy5jb2x1bW4taXNfa2V5IGlucHV0JyApLm5vdCggdGhpcyApLnByb3AoICdjaGVja2VkJywgZmFsc2UgKTtcbn0gKTtcblxuLyoqXG4gKiBXaGVuIHRoZSBwbHVnaW4gbG9hZHM6XG4gKiBBZGQgbmV3IGZpZWxkbWFwIHJvd3NcbiAqIFNlbGVjdDIgb24gc2VsZWN0IGZpZWxkc1xuICovXG4kKCBkb2N1bWVudCApLnJlYWR5KCBmdW5jdGlvbigpIHtcblxuXHQvLyBEdXBsaWNhdGUgdGhlIGZpZWxkcyBmb3IgYSBuZXcgcm93IGluIHRoZSBmaWVsZG1hcCBvcHRpb25zIHNjcmVlbi5cblx0YWRkRmllbGRNYXBwaW5nUm93KCk7XG5cblx0Ly8gc2V0dXAgdGhlIHNlbGVjdDIgZmllbGRzIGlmIHRoZSBsaWJyYXJ5IGlzIHByZXNlbnRcblx0aWYgKCBqUXVlcnkuZm4uc2VsZWN0MiApIHtcblx0XHQkKCAnc2VsZWN0I3dvcmRwcmVzc19vYmplY3QnICkuc2VsZWN0MigpO1xuXHRcdCQoICdzZWxlY3Qjc2FsZXNmb3JjZV9vYmplY3QnICkuc2VsZWN0MigpO1xuXHRcdCQoICdzZWxlY3Qjc2FsZXNmb3JjZV9yZWNvcmRfdHlwZV9kZWZhdWx0JyApLnNlbGVjdDIoKTtcblx0XHQkKCAnc2VsZWN0I3B1bGxfdHJpZ2dlcl9maWVsZCcgKS5zZWxlY3QyKCk7XG5cdFx0JCggJy5jb2x1bW4td29yZHByZXNzX2ZpZWxkIHNlbGVjdCcgKS5zZWxlY3QyKCk7XG5cdFx0JCggJy5jb2x1bW4tc2FsZXNmb3JjZV9maWVsZCBzZWxlY3QnICkuc2VsZWN0MigpO1xuXHR9XG59ICk7XG4iLCIvKipcbiAqIEhhbmRsZSBtYW51YWwgcHVzaCBvZiBvYmplY3RzIHRvIFNhbGVzZm9yY2VcbiAqL1xuZnVuY3Rpb24gcHVzaE9iamVjdHMoKSB7XG5cdCQoICcuc2FsZXNmb3JjZV91c2VyX2FqYXhfbWVzc2FnZScgKS5oaWRlKCk7XG5cdGlmICggMCA8ICQoICcjd29yZHByZXNzX29iamVjdF9hamF4JyApLmxlbmd0aCApIHtcblx0XHQkKCAnLnB1c2hfdG9fc2FsZXNmb3JjZV9idXR0b24nICkub24oICdjbGljaycsIGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIHdvcmRwcmVzc09iamVjdCA9ICQoICcjd29yZHByZXNzX29iamVjdF9hamF4JyApLnZhbCgpO1xuXHRcdFx0dmFyIHdvcmRwcmVzc0lkID0gJCggJyN3b3JkcHJlc3NfaWRfYWpheCcgKS52YWwoKTtcblx0XHRcdHZhciBzYWxlc2ZvcmNlSWQgPSAkKCAnI3NhbGVzZm9yY2VfaWRfYWpheCcgKS52YWwoKTtcblx0XHRcdHZhciBkYXRhID0ge1xuXHRcdFx0XHQnYWN0aW9uJzogJ3B1c2hfdG9fc2FsZXNmb3JjZScsXG5cdFx0XHRcdCd3b3JkcHJlc3Nfb2JqZWN0Jzogd29yZHByZXNzT2JqZWN0LFxuXHRcdFx0XHQnd29yZHByZXNzX2lkJzogd29yZHByZXNzSWQsXG5cdFx0XHRcdCdzYWxlc2ZvcmNlX2lkJzogc2FsZXNmb3JjZUlkXG5cdFx0XHR9O1xuXHRcdFx0JC5wb3N0KCBhamF4dXJsLCBkYXRhLCBmdW5jdGlvbiggcmVzcG9uc2UgKSB7XG5cdFx0XHRcdGlmICggdHJ1ZSA9PT0gcmVzcG9uc2Uuc3VjY2VzcyApIHtcblx0XHRcdFx0XHR1cGRhdGVTYWxlc2ZvcmNlVXNlclN1bW1hcnkoKTtcblx0XHRcdFx0XHQkKCAnLnNhbGVzZm9yY2VfdXNlcl9hamF4X21lc3NhZ2UnICkud2lkdGgoICQoICcubWFwcGVkLXNhbGVzZm9yY2UtdXNlcicgKS53aWR0aCgpIC0gMjcgKTtcblx0XHRcdFx0XHQkKCAnLnNhbGVzZm9yY2VfdXNlcl9hamF4X21lc3NhZ2UnICkuaHRtbCggJzxwPlRoaXMgb2JqZWN0IGhhcyBiZWVuIHB1c2hlZCB0byBTYWxlc2ZvcmNlLjwvcD4nICkuZmFkZUluKCkuZGVsYXkoIDQwMDAgKS5mYWRlT3V0KCk7XG5cdFx0XHRcdH1cblx0XHRcdH0gKTtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9ICk7XG5cdH1cbn1cblxuLyoqXG4gKiBIYW5kbGUgbWFudWFsIHB1bGwgb2Ygb2JqZWN0cyBmcm9tIFNhbGVzZm9yY2VcbiAqL1xuZnVuY3Rpb24gcHVsbE9iamVjdHMoKSB7XG5cdCQoICcuc2FsZXNmb3JjZV91c2VyX2FqYXhfbWVzc2FnZScgKS5oaWRlKCk7XG5cdCQoICcucHVsbF9mcm9tX3NhbGVzZm9yY2VfYnV0dG9uJyApLm9uKCAnY2xpY2snLCBmdW5jdGlvbigpIHtcblx0XHR2YXIgc2FsZXNmb3JjZUlkID0gJCggJyNzYWxlc2ZvcmNlX2lkX2FqYXgnICkudmFsKCk7XG5cdFx0dmFyIHdvcmRwcmVzc09iamVjdCA9ICQoICcjd29yZHByZXNzX29iamVjdF9hamF4JyApLnZhbCgpO1xuXHRcdHZhciBkYXRhID0ge1xuXHRcdFx0J2FjdGlvbic6ICdwdWxsX2Zyb21fc2FsZXNmb3JjZScsXG5cdFx0XHQnc2FsZXNmb3JjZV9pZCc6IHNhbGVzZm9yY2VJZCxcblx0XHRcdCd3b3JkcHJlc3Nfb2JqZWN0Jzogd29yZHByZXNzT2JqZWN0XG5cdFx0fTtcblx0XHQkLnBvc3QoIGFqYXh1cmwsIGRhdGEsIGZ1bmN0aW9uKCByZXNwb25zZSApIHtcblx0XHRcdGlmICggdHJ1ZSA9PT0gcmVzcG9uc2Uuc3VjY2VzcyApIHtcblx0XHRcdFx0dXBkYXRlU2FsZXNmb3JjZVVzZXJTdW1tYXJ5KCk7XG5cdFx0XHRcdCQoICcuc2FsZXNmb3JjZV91c2VyX2FqYXhfbWVzc2FnZScgKS53aWR0aCggJCggJy5tYXBwZWQtc2FsZXNmb3JjZS11c2VyJyApLndpZHRoKCkgLSAyNyApO1xuXHRcdFx0XHQkKCAnLnNhbGVzZm9yY2VfdXNlcl9hamF4X21lc3NhZ2UnICkuaHRtbCggJzxwPlRoaXMgb2JqZWN0IGhhcyBiZWVuIHB1bGxlZCBmcm9tIFNhbGVzZm9yY2UuPC9wPicgKS5mYWRlSW4oKS5kZWxheSggNDAwMCApLmZhZGVPdXQoKTtcblx0XHRcdH1cblx0XHR9ICk7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9ICk7XG59XG5cbi8qKlxuICogVXBkYXRlcyB0aGUgdXNlciBwcm9maWxlIHN1bW1hcnkgb2YgU2FsZXNmb3JjZSBpbmZvLlxuICovXG5mdW5jdGlvbiB1cGRhdGVTYWxlc2ZvcmNlVXNlclN1bW1hcnkoKSB7XG5cdHZhciBtYXBwaW5nSWQgPSAkKCAnI21hcHBpbmdfaWRfYWpheCcgKS52YWwoKTtcblx0dmFyIGRhdGEgPSB7XG5cdFx0J2FjdGlvbic6ICdyZWZyZXNoX21hcHBlZF9kYXRhJyxcblx0XHQnbWFwcGluZ19pZCc6IG1hcHBpbmdJZFxuXHR9O1xuXHQkLnBvc3QoIGFqYXh1cmwsIGRhdGEsIGZ1bmN0aW9uKCByZXNwb25zZSApIHtcblx0XHRpZiAoIHRydWUgPT09IHJlc3BvbnNlLnN1Y2Nlc3MgKSB7XG5cdFx0XHQkKCAndGQubGFzdF9zeW5jX21lc3NhZ2UnICkudGV4dCggcmVzcG9uc2UuZGF0YS5sYXN0X3N5bmNfbWVzc2FnZSApO1xuXHRcdFx0JCggJ3RkLmxhc3Rfc3luY19hY3Rpb24nICkudGV4dCggcmVzcG9uc2UuZGF0YS5sYXN0X3N5bmNfYWN0aW9uICk7XG5cdFx0XHQkKCAndGQubGFzdF9zeW5jX3N0YXR1cycgKS50ZXh0KCByZXNwb25zZS5kYXRhLmxhc3Rfc3luY19zdGF0dXMgKTtcblx0XHRcdCQoICd0ZC5sYXN0X3N5bmMnICkudGV4dCggcmVzcG9uc2UuZGF0YS5sYXN0X3N5bmMgKTtcblx0XHRcdGlmICggJzEnID09PSByZXNwb25zZS5kYXRhLmxhc3Rfc3luY19zdGF0dXMgKSB7XG5cdFx0XHRcdCQoICd0ZC5sYXN0X3N5bmNfc3RhdHVzJyApLnRleHQoICdzdWNjZXNzJyApO1xuXHRcdFx0fVxuXHRcdH1cblx0fSApO1xufVxuXG4vKipcbiAqIENsZWFyIHRoZSBwbHVnaW4gY2FjaGUgdmlhIEFqYXggcmVxdWVzdC5cbiAqL1xuZnVuY3Rpb24gY2xlYXJTZndwQ2FjaGVMaW5rKCkge1xuXHQkKCAnI2NsZWFyLXNmd3AtY2FjaGUnICkuY2xpY2soIGZ1bmN0aW9uKCkge1xuXHRcdHZhciBkYXRhID0ge1xuXHRcdFx0J2FjdGlvbic6ICdjbGVhcl9zZndwX2NhY2hlJ1xuXHRcdH07XG5cdFx0dmFyIHRoYXQgPSAkKCB0aGlzICk7XG5cdFx0JC5wb3N0KCBhamF4dXJsLCBkYXRhLCBmdW5jdGlvbiggcmVzcG9uc2UgKSB7XG5cdFx0XHRpZiAoIHRydWUgPT09IHJlc3BvbnNlLnN1Y2Nlc3MgJiYgdHJ1ZSA9PT0gcmVzcG9uc2UuZGF0YS5zdWNjZXNzICkge1xuXHRcdFx0XHR0aGF0LnBhcmVudCgpLmh0bWwoIHJlc3BvbnNlLmRhdGEubWVzc2FnZSApLmZhZGVJbigpO1xuXHRcdFx0fVxuXHRcdH0gKTtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH0gKTtcbn1cblxuLyoqXG4gKiBXaGVuIHRoZSBwbHVnaW4gbG9hZHM6XG4gKiBDbGVhciBwbHVnaW4gY2FjaGUgYnV0dG9uXG4gKiBNYW51YWwgcHVzaCBhbmQgcHVsbFxuICovXG4kKCBkb2N1bWVudCApLnJlYWR5KCBmdW5jdGlvbigpIHtcblxuXHQvLyBDbGVhciB0aGUgcGx1Z2luIGNhY2hlIHZpYSBBamF4IHJlcXVlc3QuXG5cdGNsZWFyU2Z3cENhY2hlTGluaygpO1xuXG5cdC8vIEhhbmRsZSBtYW51YWwgcHVzaCBhbmQgcHVsbCBvZiBvYmplY3RzXG5cdHB1c2hPYmplY3RzKCk7XG5cblx0Ly8gSGFuZGxlIG1hbnVhbCBwdWxsIG9mIG9iamVjdHNcblx0cHVsbE9iamVjdHMoKTtcbn0gKTtcbiIsIi8qKlxuICogRG9uJ3Qgc2hvdyB0aGUgV1NETCBmaWxlIGZpZWxkIHVubGVzcyBTT0FQIGlzIGVuYWJsZWRcbiAqL1xuZnVuY3Rpb24gdG9nZ2xlU29hcEZpZWxkcygpIHtcblx0aWYgKCAwIDwgJCggJy5vYmplY3Qtc3luYy1mb3Itc2FsZXNmb3JjZS1lbmFibGUtc29hcCcgKS5sZW5ndGggKSB7XG5cdFx0aWYgKCAkKCAnLm9iamVjdC1zeW5jLWZvci1zYWxlc2ZvcmNlLWVuYWJsZS1zb2FwIGlucHV0JyApLmlzKCAnOmNoZWNrZWQnICkgKSB7XG5cdFx0XHQkKCAnLm9iamVjdC1zeW5jLWZvci1zYWxlc2ZvcmNlLXNvYXAtd3NkbC1wYXRoJyApLnNob3coKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0JCggJy5vYmplY3Qtc3luYy1mb3Itc2FsZXNmb3JjZS1zb2FwLXdzZGwtcGF0aCcgKS5oaWRlKCk7XG5cdFx0fVxuXHR9XG59XG5cbi8vIERvbid0IHNob3cgdGhlIFdTREwgZmlsZSBmaWVsZCB1bmxlc3MgU09BUCBpcyBlbmFibGVkXG4kKCBkb2N1bWVudCApLm9uKCAnY2hhbmdlJywgJy5vYmplY3Qtc3luYy1mb3Itc2FsZXNmb3JjZS1lbmFibGUtc29hcCBpbnB1dCcsIGZ1bmN0aW9uKCkge1xuXHR0b2dnbGVTb2FwRmllbGRzKCk7XG59ICk7XG5cbiQoIGRvY3VtZW50ICkucmVhZHkoIGZ1bmN0aW9uKCkge1xuXG5cdC8vIERvbid0IHNob3cgdGhlIFdTREwgZmlsZSBmaWVsZCB1bmxlc3MgU09BUCBpcyBlbmFibGVkXG5cdHRvZ2dsZVNvYXBGaWVsZHMoKTtcbn0gKTtcbiJdfQ== }(jQuery)); diff --git a/assets/js/src/03-fieldmap-rows.js b/assets/js/src/03-fieldmap-rows.js index aa60f4c2..43cdbd65 100644 --- a/assets/js/src/03-fieldmap-rows.js +++ b/assets/js/src/03-fieldmap-rows.js @@ -31,11 +31,11 @@ */ function fieldmapFields( oldKey, newKey, lastRow ) { var nextRow = ''; - if ( jQuery.fn.select2 ) { - nextRow = lastRow.find( 'select' ).select2( 'destroy' ).end().clone( true ).removeClass( 'fieldmap-template' ); - } else { - nextRow = lastRow.clone( true ); - } + if ( jQuery.fn.select2 ) { + nextRow = lastRow.find( 'select' ).select2( 'destroy' ).end().clone( true ).removeClass( 'fieldmap-template' ); + } else { + nextRow = lastRow.clone( true ); + } $( nextRow ).attr( 'data-key', newKey ); $( nextRow ).each( function() { $( this ).html( function( i, h ) {