diff options
author | 2018-08-07 15:09:08 +0100 | |
---|---|---|
committer | 2018-08-07 15:09:16 +0100 | |
commit | af54db6c136138c66cf5ca72419989525a0baa5c (patch) | |
tree | 8519aeab8d45277c51797c7dc23aacf3b56ed1bb | |
parent | A wizard is never late, nor is he early. (diff) |
Initial project layout for django
301 files changed, 348 insertions, 27350 deletions
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 2ea2b632..144260ff 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -5,44 +5,44 @@ variables: RETHINKDB_HOST: rethinkdb stages: - - build +# - build - test - - deploy - -build: - before_script: - - docker info - - image: docker:stable-git - - only: - - master - - services: - - docker:dind - - stage: build - - script: - - sh scripts/deploy-ci.sh - - tags: - - docker - - variables: - DOCKER_DRIVER: overlay2 +# - deploy +# +#build: +# before_script: +# - docker info +# +# image: docker:stable-git +# +# only: +# - master +# +# services: +# - docker:dind +# +# stage: build +# +# script: +# - sh scripts/deploy-ci.sh +# +# tags: +# - docker +# +# variables: +# DOCKER_DRIVER: overlay2 test: tags: - docker stage: test - services: - - name: rabbitmq:3.7.5-alpine - alias: rabbit - - - name: rethinkdb:2.3.6 - alias: rethinkdb +# services: +# - name: rabbitmq:3.7.5-alpine +# alias: rabbit +# +# - name: rethinkdb:2.3.6 +# alias: rethinkdb cache: paths: @@ -53,26 +53,26 @@ test: - pipenv sync --dev - pipenv run lint - - pipenv run lintjs - - pipenv run lintscss - - - pipenv run python gunicorn_config.py - - pipenv run test - -deploy: - tags: - - docker - - only: - - master - - services: - - docker:dind - - stage: deploy - script: - - sh scripts/deploy.sh - - environment: - name: Production - url: https://pythondiscord.com +# - pipenv run lintjs +# - pipenv run lintscss +# +# - pipenv run python gunicorn_config.py +# - pipenv run test +# +#deploy: +# tags: +# - docker +# +# only: +# - master +# +# services: +# - docker:dind +# +# stage: deploy +# script: +# - sh scripts/deploy.sh +# +# environment: +# name: Production +# url: https://pythondiscord.com @@ -1,26 +1,11 @@ [[source]] -url = "https://pypi.python.org/simple" +url = "https://pypi.org/simple" verify_ssl = true name = "pypi" [packages] -flask = "==0.12.2" -rethinkdb = "*" -requests = "*" -gevent = "==1.2.2" -gevent-websocket = "*" -wsaccel = "*" -ujson = "*" -schema = "*" -flask-sockets = "*" -flask-dance = "*" -logmatic-python = "*" -flask-wtf = "*" -docutils = "*" -pygments = "*" -gunicorn = "*" -kombu = "*" -librabbitmq = "*" +django = "*" +django-hosts = "*" [dev-packages] "flake8" = "*" @@ -29,15 +14,10 @@ librabbitmq = "*" "flake8-import-order" = "*" "flake8-tidy-imports" = "*" "flake8-string-format" = "*" -requests = "*" -flask-testing = "*" -pytest = "*" -pytest-cov = "*" -python-coveralls = "*" libsass = "*" [requires] -python_version = "3.6" +python_version = "3.7" [scripts] build = "docker build -t pythondiscord/site:latest -f docker/Dockerfile ." @@ -45,11 +25,11 @@ buildci = "docker build -t pythondiscord/site-ci:latest -f docker/ci.Dockerfile buildbase = "docker build -t pythondiscord/site-base:latest -f docker/Dockerfile.base ." buildjs = "gulp" -buildscss = "python scss.py scss/pysite:scss/pysite/style.scss:static/css/style.css scss/uikit:scss/uikit/uikit_blurple.scss:static/css/uikit_blurple.css" +#buildscss = "python scss.py scss/pysite:scss/pysite/style.scss:static/css/style.css scss/uikit:scss/uikit/uikit_blurple.scss:static/css/uikit_blurple.css" clean = "rm -rf __pycache__ htmlcov .coverage .pytest_cache" fixjs = "eslint static/js --fix" -start = "gunicorn -w 12 -b 0.0.0.0:10012 -c gunicorn_config.py --log-level info -k geventwebsocket.gunicorn.workers.GeventWebSocketWorker app:app" +#start = "gunicorn -w 12 -b 0.0.0.0:10012 -c gunicorn_config.py --log-level info -k geventwebsocket.gunicorn.workers.GeventWebSocketWorker app:app" lint = "python -m flake8" lintjs = "eslint js/src" @@ -59,5 +39,6 @@ push = "docker push pythondiscord/site:latest" pushbase = "docker push pythondiscord/site-base:latest" pushci = "docker push pythondiscord/site-ci:latest" -rundev = "python app.py" -test = "py.test tests --cov pysite --cov-report term-missing -v" +#rundev = "python app.py" +#test = "py.test tests --cov pysite --cov-report term-missing -v" + diff --git a/Pipfile.lock b/Pipfile.lock index bdd6121c..6567ef95 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -1,340 +1,46 @@ { "_meta": { "hash": { - "sha256": "0555e89a9c14fd589e6a844f4f8a19926ab8e1747134623f4b71ecdfa7a25ebf" + "sha256": "d002ebbb384d9d2782cb4843616ec47687d188787612e8f4dab3e700ce25571e" }, "pipfile-spec": 6, "requires": { - "python_version": "3.6" + "python_version": "3.7" }, "sources": [ { "name": "pypi", - "url": "https://pypi.python.org/simple", + "url": "https://pypi.org/simple", "verify_ssl": true } ] }, "default": { - "amqp": { + "django": { "hashes": [ - "sha256:073dd02fdd73041bffc913b767866015147b61f2a9bc104daef172fc1a0066eb", - "sha256:eed41946890cd43e8dee44a316b85cf6fee5a1a34bb4a562b660a358eb529e1b" - ], - "version": "==2.3.2" - }, - "certifi": { - "hashes": [ - "sha256:13e698f54293db9f89122b0581843a782ad0934a4fe0172d2a980ba77fc61bb7", - "sha256:9fa520c1bacfb634fa7af20a76bcbd3d5fb390481724c597da32c719a7dca4b0" - ], - "version": "==2018.4.16" - }, - "chardet": { - "hashes": [ - "sha256:84ab92ed1c4d4f16916e05906b6b75a6c0fb5db821cc65e70cbd64a3e2a5eaae", - "sha256:fc323ffcaeaed0e0a02bf4d117757b98aed530d9ed4531e3e15460124c106691" - ], - "version": "==3.0.4" - }, - "click": { - "hashes": [ - "sha256:29f99fc6125fbc931b758dc053b3114e55c77a6e4c6c3a2674a2dc986016381d", - "sha256:f15516df478d5a56180fbf80e68f206010e6d160fc39fa508b65e035fd75130b" - ], - "version": "==6.7" - }, - "docutils": { - "hashes": [ - "sha256:02aec4bd92ab067f6ff27a38a38a41173bf01bed8f89157768c1573f53e474a6", - "sha256:51e64ef2ebfb29cae1faa133b3710143496eca21c530f3f71424d77687764274", - "sha256:7a4bd47eaf6596e1295ecb11361139febe29b084a87bf005bf899f9a42edc3c6" - ], - "index": "pypi", - "version": "==0.14" - }, - "flask": { - "hashes": [ - "sha256:0749df235e3ff61ac108f69ac178c9770caeaccad2509cb762ce1f65570a8856", - "sha256:49f44461237b69ecd901cc7ce66feea0319b9158743dd27a2899962ab214dac1" - ], - "index": "pypi", - "version": "==0.12.2" - }, - "flask-dance": { - "hashes": [ - "sha256:02bae709a0ad975cd6d5fba18a4d78b710602b29b2774338559405911ab758ec", - "sha256:043e3381087589e2ba5b7d1eacaf8a8b5b13cb7f8fab3303547795e0cdc3a011", - "sha256:877037105d1b66556dbfcc0c3711a3969bc71ee98235a46f4650beca53208b48" - ], - "index": "pypi", - "version": "==1.0.0" - }, - "flask-sockets": { - "hashes": [ - "sha256:072927da8edca0e81e024f5787e643c87d80b351b714de95d723becb30e0643b", - "sha256:350a76d55f5889f64afd2ca9b32f262680b7960965f0830365576307d30cfe1e" - ], - "index": "pypi", - "version": "==0.2.1" - }, - "flask-wtf": { - "hashes": [ - "sha256:5d14d55cfd35f613d99ee7cba0fc3fbbe63ba02f544d349158c14ca15561cc36", - "sha256:d9a9e366b32dcbb98ef17228e76be15702cd2600675668bca23f63a7947fd5ac" - ], - "index": "pypi", - "version": "==0.14.2" - }, - "gevent": { - "hashes": [ - "sha256:0901975628790e8a57fc92bb7062e5b856edea48c8de9caf36cfda14eae07329", - "sha256:1af93825db5753550fa8ff5ab2f2132e8733170b3f8d38347b34fa4a984cb624", - "sha256:2ff045a91509c35664c27a849c8cbf742a227f587b7cdbc88301e9c85dcaedff", - "sha256:33fa6759eabc9176ddbe0d29b66867a82e19a61f06eb7cfabbac35343c0ecf24", - "sha256:35790f1a3c8e431ada3471b70bb2105050009ea4beb15cbe41b86bc716a7ffa9", - "sha256:4791c8ae9c57d6f153354736e1ccab1e2baf6c8d9ae5a77a9ac90f41e2966b2d", - "sha256:4f098002126ebef7f2907188b6c8b09e5193161ce968847d9e6a8bc832b0db9a", - "sha256:552719cec4721673b8c7d2f9de666e3f7591b9b182f801ecaef1c76e638052aa", - "sha256:59e9237af027f8db85e5d78a9da2e328ae96f01d67a0d62abcecad3db7876908", - "sha256:60109741377367eef8ded9283a1bf629621b73acaf3e1e8aac9d1a0f50fa0f05", - "sha256:6892fabc9051e8c0a171d543b6536859aabeb6d169db79b2f45d64dc2a15808c", - "sha256:70558dd45c7a1f8046ba45792e489dd0f409bd8a3b7a0635ca9d3055223b3dff", - "sha256:74bce0c30bb2240e3d5d515ba8cb3eadf840c2bde7109a1979c7a26c9d0f5a6a", - "sha256:7f93b67b680f4a921f517294048d05f8f6f0ed5962b78d6685a6cf0fcd7d8202", - "sha256:81cb24e0f7bd9888596364e8d8ed0d65c2547c84884c67bb46d956faeed67396", - "sha256:833bebdc36bfeeedefc200ca9aee9b8eddd80f56b63ca1e886e18b97b1240edd", - "sha256:8a710eddb3e9e5f22bdbd458b5f211b94f59409ecd6896f15b9fee2cba266a59", - "sha256:9b492bb1a043540abb6e54fdb5537531e24962ca49c09f3b47dc4f9c37f6297c", - "sha256:a0ed8ba787b9c0c1c565c2675d71652e6c1e2d4e91f53530860d0303e867fe85", - "sha256:a16db4f56699ef07f0249b953ff949aae641e50b2bdc4710f11c0d8d9089b296", - "sha256:a66cf99f08da65c501826a19e30f5a6e7ba942fdd79baba5ce2d51eebaa13444", - "sha256:b67a10799923f9fed546ca5f8b93a2819c71a60132d7a97b4a13fbdab66b278a", - "sha256:b7e0e6400c2f3ce78a9ae1cdd55b53166feedd003d60c033863881227129a4d3", - "sha256:c35b29de49211014ec66d056fd4f9ba7a04795e2a654697f72879c0cf365d6d4", - "sha256:c9dd6534c46ed782e2d7236767cd07115cb29ce8670c2fc0794f264de9024fe0", - "sha256:de13a8e378103af84a8bf6015ad1d2761d46f29b8393e8dd6d9bb7cb51bbb713", - "sha256:deafd70d04ab62428d4e291e8e2c0fb22f38690e6a9f23a67ee6c304087634da", - "sha256:df52e06a2754c2d905aad75a7dc06a732c804d9edbc87f06f47c8f483ba98bca", - "sha256:fce894a64db3911897cdad6c37fbb23dfb18b7bf8b9cb8c00a8ea0a7253651c9" - ], - "index": "pypi", - "version": "==1.2.2" - }, - "gevent-websocket": { - "hashes": [ - "sha256:17b67d91282f8f4c973eba0551183fc84f56f1c90c8f6b6b30256f31f66f5242", - "sha256:7eaef32968290c9121f7c35b973e2cc302ffb076d018c9068d2f5ca8b2d85fb0" - ], - "index": "pypi", - "version": "==0.10.1" - }, - "greenlet": { - "hashes": [ - "sha256:09ef2636ea35782364c830f07127d6c7a70542b178268714a9a9ba16318e7e8b", - "sha256:0fef83d43bf87a5196c91e73cb9772f945a4caaff91242766c5916d1dd1381e4", - "sha256:1b7df09c6598f5cfb40f843ade14ed1eb40596e75cd79b6fa2efc750ba01bb01", - "sha256:1fff21a2da5f9e03ddc5bd99131a6b8edf3d7f9d6bc29ba21784323d17806ed7", - "sha256:42118bf608e0288e35304b449a2d87e2ba77d1e373e8aa221ccdea073de026fa", - "sha256:50643fd6d54fd919f9a0a577c5f7b71f5d21f0959ab48767bd4bb73ae0839500", - "sha256:58798b5d30054bb4f6cf0f712f08e6092df23a718b69000786634a265e8911a9", - "sha256:5b49b3049697aeae17ef7bf21267e69972d9e04917658b4e788986ea5cc518e8", - "sha256:75c413551a436b462d5929255b6dc9c0c3c2b25cbeaee5271a56c7fda8ca49c0", - "sha256:769b740aeebd584cd59232be84fdcaf6270b8adc356596cdea5b2152c82caaac", - "sha256:ad2383d39f13534f3ca5c48fe1fc0975676846dc39c2cece78c0f1f9891418e0", - "sha256:b417bb7ff680d43e7bd7a13e2e08956fa6acb11fd432f74c97b7664f8bdb6ec1", - "sha256:b6ef0cabaf5a6ecb5ac122e689d25ba12433a90c7b067b12e5f28bdb7fb78254", - "sha256:c2de19c88bdb0366c976cc125dca1002ec1b346989d59524178adfd395e62421", - "sha256:c7b04a6dc74087b1598de8d713198de4718fa30ec6cbb84959b26426c198e041", - "sha256:f8f2a0ae8de0b49c7b5b2daca4f150fdd9c1173e854df2cce3b04123244f9f45", - "sha256:fcfadaf4bf68a27e5dc2f42cbb2f4b4ceea9f05d1d0b8f7787e640bed2801634" - ], - "version": "==0.4.13" - }, - "gunicorn": { - "hashes": [ - "sha256:7ef2b828b335ed58e3b64ffa84caceb0a7dd7c5ca12f217241350dec36a1d5dc", - "sha256:bc59005979efb6d2dd7d5ba72d99f8a8422862ad17ff3a16e900684630dd2a10" - ], - "index": "pypi", - "version": "==19.8.1" - }, - "idna": { - "hashes": [ - "sha256:2c6a5de3089009e3da7c5dde64a141dbc8551d5b7f6cf4ed7c2568d0cc520a8f", - "sha256:8c7309c718f94b3a625cb648ace320157ad16ff131ae0af362c9f21b80ef6ec4" - ], - "version": "==2.6" - }, - "itsdangerous": { - "hashes": [ - "sha256:cbb3fcf8d3e33df861709ecaf89d9e6629cff0a217bc2848f1b41cd30d360519" - ], - "version": "==0.24" - }, - "jinja2": { - "hashes": [ - "sha256:74c935a1b8bb9a3947c50a54766a969d4846290e1e788ea44c1392163723c3bd", - "sha256:f84be1bb0040caca4cea721fcbbbbd61f9be9464ca236387158b0feea01914a4" - ], - "version": "==2.10" - }, - "kombu": { - "hashes": [ - "sha256:86adec6c60f63124e2082ea8481bbe4ebe04fde8ebed32c177c7f0cd2c1c9082", - "sha256:b274db3a4eacc4789aeb24e1de3e460586db7c4fc8610f7adcc7a3a1709a60af" - ], - "index": "pypi", - "version": "==4.2.1" - }, - "lazy": { - "hashes": [ - "sha256:c80a77bf7106ba7b27378759900cfefef38271088dc63b014bcfe610c8e68e3d" - ], - "version": "==1.3" - }, - "librabbitmq": { - "hashes": [ - "sha256:3116e40c02d4285b8dd69834e4cbcb1a89ea534ca9147e865f11d44e7cc56eea", - "sha256:5cdfb473573396d43d54cef9e9b4c74fa3d1516da51d04a7b261f6ef4e0bd8be", - "sha256:98e355f486964dadae7e8b51c9a60e9aa0653bbe27f6b14542687f305c4c3652", - "sha256:c2a8113d3c831808d1d940fdf43e4882636a1efe2864df7ab3bb709a45016b37", - "sha256:cd9cc09343b193d7cf2cff6c6a578061863bd986a4bdf38f922e9dc32e15d944", - "sha256:ffa2363a860ab5dcc3ce3703247e05e940c73d776c03a3f3f9deaf3cf43bb96c" - ], - "index": "pypi", - "version": "==2.0.0" - }, - "logmatic-python": { - "hashes": [ - "sha256:0c15ac9f5faa6a60059b28910db642c3dc7722948c3cc940923f8c9039604342" - ], - "index": "pypi", - "version": "==0.1.7" - }, - "markupsafe": { - "hashes": [ - "sha256:a6be69091dac236ea9c6bc7d012beab42010fa914c459791d627dad4910eb665" - ], - "version": "==1.0" - }, - "oauthlib": { - "hashes": [ - "sha256:ac35665a61c1685c56336bda97d5eefa246f1202618a1d6f34fccb1bdd404162", - "sha256:d883b36b21a6ad813953803edfa563b1b579d79ca758fe950d1bc9e8b326025b" - ], - "version": "==2.1.0" - }, - "pygments": { - "hashes": [ - "sha256:78f3f434bcc5d6ee09020f92ba487f95ba50f1e3ef83ae96b9d5ffa1bab25c5d", - "sha256:dbae1046def0efb574852fab9e90209b23f556367b5a320c0bcb871c77c3e8cc" - ], - "index": "pypi", - "version": "==2.2.0" - }, - "python-json-logger": { - "hashes": [ - "sha256:30999d1d742ecf6645991a2ce9273188505e98b713ad63be06aabff47dd1b3c4", - "sha256:8205cfe7061715de5cd1b37e3565d5b97d0ac13b30ff3ee612554abb6093d640" - ], - "version": "==0.1.8" - }, - "requests": { - "hashes": [ - "sha256:6a1b267aa90cac58ac3a765d067950e7dbbf75b1da07e895d1f594193a40a38b", - "sha256:9c443e7324ba5b85070c4a818ade28bfabedf16ea10206da1132edaa6dda237e" - ], - "index": "pypi", - "version": "==2.18.4" - }, - "requests-oauthlib": { - "hashes": [ - "sha256:8886bfec5ad7afb391ed5443b1f697c6f4ae98d0e5620839d8b4499c032ada3f", - "sha256:e21232e2465808c0e892e0e4dbb8c2faafec16ac6dc067dd546e9b466f3deac8", - "sha256:fe3282f48fb134ee0035712159f5429215459407f6d5484013343031ff1a400d" - ], - "version": "==1.0.0" - }, - "rethinkdb": { - "hashes": [ - "sha256:b5354ecd896b59065693e4139c067f401c9f57970268e9b93f83d869709d1c17" - ], - "index": "pypi", - "version": "==2.3.0.post6" - }, - "schema": { - "hashes": [ - "sha256:410f44cb025384959d20deef00b4e1595397fa30959947a4f0d92e9c84616f35", - "sha256:a058daf5d926e4ece9f13c4c2366a836143ca7913ef053c5023c569e00175b2a" + "sha256:7f246078d5a546f63c28fc03ce71f4d7a23677ce42109219c24c9ffb28416137", + "sha256:ea50d85709708621d956187c6b61d9f9ce155007b496dd914fdb35db8d790aec" ], "index": "pypi", - "version": "==0.6.7" - }, - "six": { - "hashes": [ - "sha256:70e8a77beed4562e7f14fe23a786b54f6296e34344c23bc42f07b15018ff98e9", - "sha256:832dc0e10feb1aa2c68dcc57dbb658f1c7e65b9b61af69048abc87a2db00a0eb" - ], - "version": "==1.11.0" + "version": "==2.1" }, - "ujson": { + "django-hosts": { "hashes": [ - "sha256:f66073e5506e91d204ab0c614a148d5aa938bdbf104751be66f8ad7a222f5f86" + "sha256:3599645f37b4c51df6140d659bef356e05ae7ff7748f8fef14c2c84083dd8089", + "sha256:8e83232dbd7ff0d9de5c814f16bdf4cd1971bd00c54fa1f3e507aed4f93215a8" ], "index": "pypi", - "version": "==1.35" - }, - "urllib3": { - "hashes": [ - "sha256:06330f386d6e4b195fbfc736b297f58c5a892e4440e54d294d7004e3a9bbea1b", - "sha256:cc44da8e1145637334317feebd728bd869a35285b93cbb4cca2577da7e62db4f" - ], - "version": "==1.22" + "version": "==3.0" }, - "urlobject": { + "pytz": { "hashes": [ - "sha256:47b2e20e6ab9c8366b2f4a3566b6ff4053025dad311c4bb71279bbcfa2430caa" + "sha256:a061aa0a9e06881eb8b3b2b43f05b9439d6583c206d0a6c340ff72a7b6669053", + "sha256:ffb9ef1de172603304d9d2819af6f5ece76f2e85ec10692a524dd876e72bf277" ], - "version": "==2.4.3" - }, - "vine": { - "hashes": [ - "sha256:52116d59bc45392af9fdd3b75ed98ae48a93e822cee21e5fda249105c59a7a72", - "sha256:6849544be74ec3638e84d90bc1cf2e1e9224cc10d96cd4383ec3f69e9bce077b" - ], - "version": "==1.1.4" - }, - "werkzeug": { - "hashes": [ - "sha256:c3fd7a7d41976d9f44db327260e263132466836cef6f91512889ed60ad26557c", - "sha256:d5da73735293558eb1651ee2fddc4d0dedcfa06538b8813a2e20011583c9e49b" - ], - "version": "==0.14.1" - }, - "wsaccel": { - "hashes": [ - "sha256:425706acf0724d2f6bfa391ec37b4ef121d3432c956029de3cea4e101c218e0c" - ], - "index": "pypi", - "version": "==0.6.2" - }, - "wtforms": { - "hashes": [ - "sha256:0cdbac3e7f6878086c334aa25dc5a33869a3954e9d1e015130d65a69309b3b61", - "sha256:e3ee092c827582c50877cdbd49e9ce6d2c5c1f6561f849b3b068c1b8029626f1" - ], - "version": "==2.2.1" + "version": "==2018.5" } }, "develop": { - "atomicwrites": { - "hashes": [ - "sha256:240831ea22da9ab882b551b31d4225591e5e447a68c5e188db5b89ca1d487585", - "sha256:a24da68318b08ac9c9c45029f4a10371ab5b20e4226738e150e6e7c571630ae6" - ], - "version": "==1.1.5" - }, "attrs": { "hashes": [ "sha256:4b90b09eeeb9b88c35bc642cbac057e45a5fd85367b985bd2809c62b7b939265", @@ -349,59 +55,6 @@ ], "version": "==1.4.0" }, - "certifi": { - "hashes": [ - "sha256:13e698f54293db9f89122b0581843a782ad0934a4fe0172d2a980ba77fc61bb7", - "sha256:9fa520c1bacfb634fa7af20a76bcbd3d5fb390481724c597da32c719a7dca4b0" - ], - "version": "==2018.4.16" - }, - "chardet": { - "hashes": [ - "sha256:84ab92ed1c4d4f16916e05906b6b75a6c0fb5db821cc65e70cbd64a3e2a5eaae", - "sha256:fc323ffcaeaed0e0a02bf4d117757b98aed530d9ed4531e3e15460124c106691" - ], - "version": "==3.0.4" - }, - "click": { - "hashes": [ - "sha256:29f99fc6125fbc931b758dc053b3114e55c77a6e4c6c3a2674a2dc986016381d", - "sha256:f15516df478d5a56180fbf80e68f206010e6d160fc39fa508b65e035fd75130b" - ], - "version": "==6.7" - }, - "coverage": { - "hashes": [ - "sha256:00d464797a236f654337181af72b4baea3d35d056ca480e45e9163bb5df496b8", - "sha256:0a90afa6f5ea08889da9066dca3ce2ef85d47587e3f66ca06a4fa8d3a0053acc", - "sha256:0ba6c4345e3c197f6a3ba924d155c402ad28c080ac0d79529493eb17582fbc41", - "sha256:2be3748f45d2eb0259c3c93abccc15c10725ef715bf0817a4c0a1a1dad2abc6a", - "sha256:50727512afe77e044c7d7f2fd4cd0fe62b06527f965b335a810d956748e0514d", - "sha256:6c2fd127cd4e2decb0ab41fe3ac2948b87ad2ea0470e24b4be5f7e7fdfef8df3", - "sha256:6ed521ed3800d8f8911642b9b3c3891780a929db5e572c88c4713c1032530f82", - "sha256:76a73a48a308fb87a4417d630b0345d36166f489ef17ea5aa8e4596fb50a2296", - "sha256:7eaa0a33423476ed63317ee0a53cc07c0e36b5a390e3e95b95152e7eb6b3a6f6", - "sha256:845d0f8a1765074b3256f07ddbce2969e5a5316dfd0eb3289137010d7677326a", - "sha256:85b1275b6d7a61ccc8024a4e9a4c9e896394776edce1a5d075ec116f91925462", - "sha256:8e60e720cad3ee6b0a32f475ae4040552c5623870a9ca0d3d4263faa89a8d96b", - "sha256:93c50475f189cd226e9688b9897a0cd3c4c5d9c90b1733fa8f6445cfc0182c51", - "sha256:94c1e66610807a7917d967ed6415b9d5fde7487ab2a07bb5e054567865ef6ef0", - "sha256:964f86394cb4d0fd2bb40ffcddca321acf4323b48d1aa5a93db8b743c8a00f79", - "sha256:99043494b28d6460035dd9410269cdb437ee460edc7f96f07ab45c57ba95e651", - "sha256:addf63b5e39d573c459c3930b25176146395c1dc1afce4710067bb5e6dc4ea58", - "sha256:af2f59ce312523c384a7826821cae0b95f320fee1751387abba4f00eed737166", - "sha256:af6ed80340e5e1b89fa794f730ce7597651fbda3312e500002688b679c184ef9", - "sha256:beb96d32ce8cfa47ec6433d95a33e4afaa97c19ac1b4a47ea40a424fedfee7c2", - "sha256:c00bac0f6b35b82ace069a6a0d88e8fd4cd18d964fc5e47329cd02b212397fbe", - "sha256:d079e36baceea9707fd50b268305654151011274494a33c608c075808920eda8", - "sha256:d3188345f1c7161d701fd2ea9150f9bb6e2df890f3ddd6c0aea1f525e21d1544", - "sha256:e65c78bde155a734f0d624647c4d6e0f47fb4875355a0b95c37d537788737f4f", - "sha256:e813cba9ff0e3d37ad31dc127fac85d23f9a26d0461ef8042ac4539b2045e781", - "sha256:e96c13a40df389ce8cbb5ec108e5fb834989d1bedff5d8846e5aa3d270a5f3b6", - "sha256:ee2338539157cfc35fb1d6757dd799126804df39393c4a6c5fe88b402c8c0ab4" - ], - "version": "==4.0.3" - }, "flake8": { "hashes": [ "sha256:7253265f7abd8b313e3892944044a365e3f4ac3fcdcfb4298f55ee9ddf188ba0", @@ -428,11 +81,11 @@ }, "flake8-import-order": { "hashes": [ - "sha256:40d2a39ed91e080f3285f4c16256b252d7c31070e7f11b7854415bb9f924ea81", - "sha256:68d430781a9ef15c85a0121500cf8462f1a4bc7672acb2a32bfdbcab044ae0b7" + "sha256:9be5ca10d791d458eaa833dd6890ab2db37be80384707b0f76286ddd13c16cbf", + "sha256:feca2fd0a17611b33b7fa84449939196c2c82764e262486d5c3e143ed77d387b" ], "index": "pypi", - "version": "==0.17.1" + "version": "==0.18" }, "flake8-polyfill": { "hashes": [ @@ -457,54 +110,19 @@ "index": "pypi", "version": "==1.1.0" }, - "flask": { - "hashes": [ - "sha256:0749df235e3ff61ac108f69ac178c9770caeaccad2509cb762ce1f65570a8856", - "sha256:49f44461237b69ecd901cc7ce66feea0319b9158743dd27a2899962ab214dac1" - ], - "index": "pypi", - "version": "==0.12.2" - }, - "flask-testing": { - "hashes": [ - "sha256:dc076623d7d850653a018cb64f500948334c8aeb6b10a5a842bf1bcfb98122bc" - ], - "index": "pypi", - "version": "==0.7.1" - }, "gitdb2": { "hashes": [ - "sha256:b60e29d4533e5e25bb50b7678bbc187c8f6bcff1344b4f293b2ba55c85795f09", - "sha256:cf9a4b68e8c4da8d42e48728c944ff7af2d8c9db303ac1ab32eac37aa4194b0e" + "sha256:87783b7f4a8f6b71c7fe81d32179b3c8781c1a7d6fa0c69bff2f315b00aff4f8", + "sha256:bb4c85b8a58531c51373c89f92163b92f30f81369605a67cd52d1fc21246c044" ], - "version": "==2.0.3" + "version": "==2.0.4" }, "gitpython": { "hashes": [ - "sha256:1ec4c44846cf76a1e55769560673a97731849c9d05401e035e607495f10db959", - "sha256:b60b045cf64a321e5b620debb49890099fa6c7be6dfb7fb249027e5d34227301" - ], - "version": "==2.1.10" - }, - "idna": { - "hashes": [ - "sha256:2c6a5de3089009e3da7c5dde64a141dbc8551d5b7f6cf4ed7c2568d0cc520a8f", - "sha256:8c7309c718f94b3a625cb648ace320157ad16ff131ae0af362c9f21b80ef6ec4" - ], - "version": "==2.6" - }, - "itsdangerous": { - "hashes": [ - "sha256:cbb3fcf8d3e33df861709ecaf89d9e6629cff0a217bc2848f1b41cd30d360519" - ], - "version": "==0.24" - }, - "jinja2": { - "hashes": [ - "sha256:74c935a1b8bb9a3947c50a54766a969d4846290e1e788ea44c1392163723c3bd", - "sha256:f84be1bb0040caca4cea721fcbbbbd61f9be9464ca236387158b0feea01914a4" + "sha256:563221e5a44369c6b79172f455584c9ebbb122a13368cc82cb4b5addff788f82", + "sha256:8237dc5bfd6f1366abeee5624111b9d6879393d84745a507de0fda86043b65a8" ], - "version": "==2.10" + "version": "==2.1.11" }, "libsass": { "hashes": [ @@ -519,6 +137,7 @@ "sha256:727fb84326ffa930bc09fad8b706e77ada4d13b3adf35cce134962a434d7eccb", "sha256:7b9e7179b5f4fc32bc716f86e9ccaeb48ab90e7eb6648b339440346733af8828", "sha256:a0ffca466b35fb57f2afe1f1c5fd39b4c51a4107596d28ef8c0d3bb0962244b5", + "sha256:bb9735066391189b3c0383254d20d59aaafb438d632d7de551c264f16486e773", "sha256:cbd5ee83d3603a2b2c2937d8f06acc07b30fd22642ea2460c966d4fd6217f1d0", "sha256:de1eae502764b3dde294d6652a0046489cf31008de190c4dd8d05e7f4b5e0d71", "sha256:e00b6c6d75a6e912990cbc23d48ddfdbfefc3e400c20be6593988839292248c5", @@ -527,12 +146,6 @@ "index": "pypi", "version": "==0.14.5" }, - "markupsafe": { - "hashes": [ - "sha256:a6be69091dac236ea9c6bc7d012beab42010fa914c459791d627dad4910eb665" - ], - "version": "==1.0" - }, "mccabe": { "hashes": [ "sha256:ab8a6258860da4b6677da4bd2fe5dc2c659cff31b3ee4f7f5d64e79735b80d42", @@ -540,35 +153,12 @@ ], "version": "==0.6.1" }, - "more-itertools": { - "hashes": [ - "sha256:2b6b9893337bfd9166bee6a62c2b0c9fe7735dcf85948b387ec8cba30e85d8e8", - "sha256:6703844a52d3588f951883005efcf555e49566a48afd4db4e965d69b883980d3", - "sha256:a18d870ef2ffca2b8463c0070ad17b5978056f403fb64e3f15fe62a52db21cc0" - ], - "version": "==4.2.0" - }, "pbr": { "hashes": [ - "sha256:3747c6f017f2dc099986c325239661948f9f5176f6880d9fdef164cb664cd665", - "sha256:a9c27eb8f0e24e786e544b2dbaedb729c9d8546342b5a6818d8eda098ad4340d" - ], - "version": "==4.0.4" - }, - "pluggy": { - "hashes": [ - "sha256:7f8ae7f5bdf75671a718d2daf0a64b7885f74510bcd98b1a0bb420eb9a9d0cff", - "sha256:d345c8fe681115900d6da8d048ba67c25df42973bda370783cd58826442dcd7c", - "sha256:e160a7fcf25762bb60efc7e171d4497ff1d8d2d75a3d0df7a21b76821ecbf5c5" - ], - "version": "==0.6.0" - }, - "py": { - "hashes": [ - "sha256:29c9fab495d7528e80ba1e343b958684f4ace687327e6f789a94bf3d1915f881", - "sha256:983f77f3331356039fdd792e9220b7b8ee1aa6bd2b25f567a963ff1de5a64f6a" + "sha256:1b8be50d938c9bb75d0eaf7eda111eec1bf6dc88a62a6412e33bf077457e0f45", + "sha256:b486975c0cafb6beeb50ca0e17ba047647f229087bd74e37f4a7e2cac17d2caa" ], - "version": "==1.5.3" + "version": "==4.2.0" }, "pycodestyle": { "hashes": [ @@ -584,56 +174,21 @@ ], "version": "==1.6.0" }, - "pytest": { - "hashes": [ - "sha256:26838b2bc58620e01675485491504c3aa7ee0faf335c37fcd5f8731ca4319591", - "sha256:32c49a69566aa7c333188149ad48b58ac11a426d5352ea3d8f6ce843f88199cb" - ], - "index": "pypi", - "version": "==3.6.1" - }, - "pytest-cov": { - "hashes": [ - "sha256:03aa752cf11db41d281ea1d807d954c4eda35cfa1b21d6971966cc041bbf6e2d", - "sha256:890fe5565400902b0c78b5357004aab1c814115894f4f21370e2433256a3eeec" - ], - "index": "pypi", - "version": "==2.5.1" - }, - "python-coveralls": { - "hashes": [ - "sha256:1748272081e0fc21e2c20c12e5bd18cb13272db1b130758df0d473da0cb31087", - "sha256:736dda01f64beda240e1500d5f264b969495b05fcb325c7c0eb7ebbfd1210b70" - ], - "index": "pypi", - "version": "==2.9.1" - }, "pyyaml": { "hashes": [ - "sha256:0c507b7f74b3d2dd4d1322ec8a94794927305ab4cebbe89cc47fe5e81541e6e8", - "sha256:16b20e970597e051997d90dc2cddc713a2876c47e3d92d59ee198700c5427736", - "sha256:3262c96a1ca437e7e4763e2843746588a965426550f3797a79fca9c6199c431f", - "sha256:326420cbb492172dec84b0f65c80942de6cedb5233c413dd824483989c000608", - "sha256:4474f8ea030b5127225b8894d626bb66c01cda098d47a2b0d3429b6700af9fd8", - "sha256:592766c6303207a20efc445587778322d7f73b161bd994f227adaa341ba212ab", - "sha256:5ac82e411044fb129bae5cfbeb3ba626acb2af31a8d17d175004b70862a741a7", - "sha256:5f84523c076ad14ff5e6c037fe1c89a7f73a3e04cf0377cb4d017014976433f3", - "sha256:827dc04b8fa7d07c44de11fabbc888e627fa8293b695e0f99cb544fdfa1bf0d1", - "sha256:b4c423ab23291d3945ac61346feeb9a0dc4184999ede5e7c43e1ffb975130ae6", - "sha256:bc6bced57f826ca7cb5125a10b23fd0f2fff3b7c4701d64c439a300ce665fff8", - "sha256:c01b880ec30b5a6e6aa67b09a2fe3fb30473008c85cd6a67359a1b15ed6d83a4", - "sha256:ca233c64c6e40eaa6c66ef97058cdc80e8d0157a443655baa1b2966e812807ca", - "sha256:e863072cdf4c72eebf179342c94e6989c67185842d9997960b3e69290b2fa269" - ], - "version": "==3.12" - }, - "requests": { - "hashes": [ - "sha256:6a1b267aa90cac58ac3a765d067950e7dbbf75b1da07e895d1f594193a40a38b", - "sha256:9c443e7324ba5b85070c4a818ade28bfabedf16ea10206da1132edaa6dda237e" + "sha256:3d7da3009c0f3e783b2c873687652d83b1bbfd5c88e9813fb7e5b03c0dd3108b", + "sha256:3ef3092145e9b70e3ddd2c7ad59bdd0252a94dfe3949721633e41344de00a6bf", + "sha256:40c71b8e076d0550b2e6380bada1f1cd1017b882f7e16f09a65be98e017f211a", + "sha256:558dd60b890ba8fd982e05941927a3911dc409a63dcb8b634feaa0cda69330d3", + "sha256:a7c28b45d9f99102fa092bb213aa12e0aaf9a6a1f5e395d36166639c1f96c3a1", + "sha256:aa7dd4a6a427aed7df6fb7f08a580d68d9b118d90310374716ae90b710280af1", + "sha256:bc558586e6045763782014934bfaf39d48b8ae85a2713117d16c39864085c613", + "sha256:d46d7982b62e0729ad0175a9bc7e10a566fc07b224d2c79fafb5e032727eaa04", + "sha256:d5eef459e30b09f5a098b9cea68bebfeb268697f78d647bd255a085371ac7f3f", + "sha256:e01d3203230e1786cd91ccfdc8f8454c8069c91bee3962ad93b87a4b2860f537", + "sha256:e170a9e6fcfd19021dd29845af83bb79236068bf5fd4df3327c1be18182b2531" ], - "index": "pypi", - "version": "==2.18.4" + "version": "==3.13" }, "six": { "hashes": [ @@ -644,31 +199,17 @@ }, "smmap2": { "hashes": [ - "sha256:b78ee0f1f5772d69ff50b1cbdb01b8c6647a8354f02f23b488cf4b2cfc923956", - "sha256:c7530db63f15f09f8251094b22091298e82bf6c699a6b8344aaaef3f2e1276c3" + "sha256:0dd53d991af487f9b22774fa89451358da3607c02b9b886a54736c6a313ece0b", + "sha256:dc216005e529d57007ace27048eb336dcecb7fc413cfb3b2f402bb25972b69c6" ], - "version": "==2.0.3" + "version": "==2.0.4" }, "stevedore": { "hashes": [ - "sha256:e3d96b2c4e882ec0c1ff95eaebf7b575a779fd0ccb4c741b9832bed410d58b3d", - "sha256:f1c7518e7b160336040fee272174f1f7b29a46febb3632502a8f2055f973d60b" - ], - "version": "==1.28.0" - }, - "urllib3": { - "hashes": [ - "sha256:06330f386d6e4b195fbfc736b297f58c5a892e4440e54d294d7004e3a9bbea1b", - "sha256:cc44da8e1145637334317feebd728bd869a35285b93cbb4cca2577da7e62db4f" - ], - "version": "==1.22" - }, - "werkzeug": { - "hashes": [ - "sha256:c3fd7a7d41976d9f44db327260e263132466836cef6f91512889ed60ad26557c", - "sha256:d5da73735293558eb1651ee2fddc4d0dedcfa06538b8813a2e20011583c9e49b" + "sha256:1e153545aca7a6a49d8337acca4f41c212fbfa60bf864ecd056df0cafb9627e8", + "sha256:c7eac1c0d95824c88b655273da5c17cdde6482b2739f47c30bf851dcc9d3c2c0" ], - "version": "==0.14.1" + "version": "==1.29.0" } } } diff --git a/app.py b/app.py deleted file mode 100644 index 5e55bc07..00000000 --- a/app.py +++ /dev/null @@ -1,13 +0,0 @@ -from os import environ - -from pysite.route_manager import RouteManager - -manager = RouteManager() -app = manager.app - -debug = environ.get('TEMPLATES_AUTO_RELOAD', "no") -if debug == "yes": - app.jinja_env.auto_reload = True - -if __name__ == '__main__': - manager.run() diff --git a/gunicorn_config.py b/gunicorn_config.py deleted file mode 100644 index 4814f5bf..00000000 --- a/gunicorn_config.py +++ /dev/null @@ -1,76 +0,0 @@ -import re - -from kombu import Connection - -from pysite.constants import ( - BOT_EVENT_QUEUE, BotEventTypes, CHANNEL_DEV_LOGS, DEBUG_MODE, - RMQ_HOST, RMQ_PASSWORD, RMQ_PORT, RMQ_USERNAME -) -from pysite.migrations.runner import run_migrations -from pysite.queues import QUEUES -from pysite.service_discovery import wait_for_rmq - -STRIP_REGEX = re.compile(r"<[^<]+?>") -WIKI_TABLE = "wiki" - - -def when_ready(server=None): - _when_ready(server=server) - - -def _when_ready(server=None, output_func=None): - """ server hook that only runs when the gunicorn master process loads """ - - if server: - output = server.log.info - elif output_func: - output = output_func - else: - output = print - - output("Creating tables...") - - from pysite.database import RethinkDB - - db = RethinkDB(loop_type=None) - db.conn = db.get_connection() - - # Create any table that doesn't exist - created = db.create_tables() - if created: - tables = ", ".join([f"{table}" for table in created]) - output(f"Created the following tables: {tables}") - - run_migrations(db, output=output) - - output("Waiting for RabbitMQ...") - - has_rmq = wait_for_rmq() - - if not has_rmq: - output("Timed out while waiting for RabbitMQ") - else: - output("RabbitMQ found, declaring RabbitMQ queues...") - - try: - with Connection(hostname=RMQ_HOST, userid=RMQ_USERNAME, password=RMQ_PASSWORD, port=RMQ_PORT) as c: - with c.channel() as channel: - for name, queue in QUEUES.items(): - queue.declare(channel=channel) - output(f"Queue declared: {name}") - - if not DEBUG_MODE: - producer = c.Producer() - producer.publish( - { - "event": BotEventTypes.send_embed.value, - "data": { - "target": CHANNEL_DEV_LOGS, - "title": "Site Deployment", - "description": "The site has been deployed!" - } - }, - routing_key=BOT_EVENT_QUEUE - ) - except Exception as e: - output(f"Failed to declare RabbitMQ Queues: {e}") diff --git a/manage.py b/manage.py new file mode 100755 index 00000000..4688df77 --- /dev/null +++ b/manage.py @@ -0,0 +1,15 @@ +#!/usr/bin/env python +import os +import sys + +if __name__ == '__main__': + os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'pydis_django.settings') + try: + from django.core.management import execute_from_command_line + except ImportError as exc: + raise ImportError( + "Couldn't import Django. Are you sure it's installed and " + "available on your PYTHONPATH environment variable? Did you " + "forget to activate a virtual environment?" + ) from exc + execute_from_command_line(sys.argv) diff --git a/pysite/migrations/__init__.py b/pydis_django/__init__.py index e69de29b..e69de29b 100644 --- a/pysite/migrations/__init__.py +++ b/pydis_django/__init__.py diff --git a/pydis_django/hosts.py b/pydis_django/hosts.py new file mode 100644 index 00000000..898902dc --- /dev/null +++ b/pydis_django/hosts.py @@ -0,0 +1,15 @@ +from django.conf import settings +from django_hosts import host, patterns + +host_patterns = patterns( + "pydis_django.urls", + + # > | Subdomain | URL Module | Host entry name | + host(r"admin", "admin", name="admin"), + host(r"api", "api", name="api"), + host(r"staff", "staff", name="staff"), + host(r"wiki", "wiki", name="wiki"), + host(r"ws", "ws", name="ws"), + + host(r".*", "main", name=settings.DEFAULT_HOST) +) diff --git a/pydis_django/settings.py b/pydis_django/settings.py new file mode 100644 index 00000000..657fef3b --- /dev/null +++ b/pydis_django/settings.py @@ -0,0 +1,140 @@ +""" +Django settings for pydis_django project. + +Generated by 'django-admin startproject' using Django 2.1. + +For more information on this file, see +https://docs.djangoproject.com/en/2.1/topics/settings/ + +For the full list of settings and their values, see +https://docs.djangoproject.com/en/2.1/ref/settings/ +""" + +import os + +# Build paths inside the project like this: os.path.join(BASE_DIR, ...) +BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) + + +# Quick-start development settings - unsuitable for production +# See https://docs.djangoproject.com/en/2.1/howto/deployment/checklist/ + +# SECURITY WARNING: keep the secret key used in production secret! +SECRET_KEY = os.getenv("SECRET_KEY", "+_x00w3e94##2-qm-v(5&-x_@*l3t9zlir1etu+7$@4%!it2##") + +ALLOWED_HOSTS = ["pythondiscord.com"] + + +# Application definition + +INSTALLED_APPS = [ + "django.contrib.admin", + "django.contrib.auth", + "django.contrib.contenttypes", + "django.contrib.sessions", + "django.contrib.messages", + "django.contrib.staticfiles", + + "django_hosts", +] + +MIDDLEWARE = [ + "django_hosts.middleware.HostsRequestMiddleware", + + "django.middleware.security.SecurityMiddleware", + "django.contrib.sessions.middleware.SessionMiddleware", + "django.middleware.common.CommonMiddleware", + "django.middleware.csrf.CsrfViewMiddleware", + "django.contrib.auth.middleware.AuthenticationMiddleware", + "django.contrib.messages.middleware.MessageMiddleware", + "django.middleware.clickjacking.XFrameOptionsMiddleware", + + "django_hosts.middleware.HostsResponseMiddleware", +] +ROOT_URLCONF = "pydis_django.urls.main" + +TEMPLATES = [ + { + "APP_DIRS": True, + "BACKEND": "django.template.backends.jinja2.Jinja2", + "DIRS": [os.path.join(BASE_DIR, "templates")], + + "OPTIONS": { + "builtins": [ + "django_hosts.templatetags.hosts_override", + ], + + "context_processors": [ + "django.template.context_processors.debug", + "django.template.context_processors.request", + "django.contrib.auth.context_processors.auth", + "django.contrib.messages.context_processors.messages", + ], + }, + }, +] + +WSGI_APPLICATION = "pydis_django.wsgi.application" + + +# Database +# https://docs.djangoproject.com/en/2.1/ref/settings/#databases + +DATABASES = { + "default": { + "ENGINE": "django.db.backends.sqlite3", + "NAME": os.path.join(BASE_DIR, "db.sqlite3"), + } +} + + +# Password validation +# https://docs.djangoproject.com/en/2.1/ref/settings/#auth-password-validators + +AUTH_PASSWORD_VALIDATORS = [ + { + "NAME": "django.contrib.auth.password_validation.UserAttributeSimilarityValidator", + }, + { + "NAME": "django.contrib.auth.password_validation.MinimumLengthValidator", + }, + { + "NAME": "django.contrib.auth.password_validation.CommonPasswordValidator", + }, + { + "NAME": "django.contrib.auth.password_validation.NumericPasswordValidator", + }, +] + + +# Internationalization +# https://docs.djangoproject.com/en/2.1/topics/i18n/ + +LANGUAGE_CODE = "en-us" + +TIME_ZONE = "UTC" + +USE_I18N = True + +USE_L10N = True + +USE_TZ = True + + +# Static files (CSS, JavaScript, Images) +# https://docs.djangoproject.com/en/2.1/howto/static-files/ + +STATIC_URL = "/static/" + +# Custom settings + +DEBUG = False +DEFAULT_HOST = "main" +PARENT_HOST = "pythondiscord.com" + +if os.getenv("DEBUG") is not None: # Debug mode + ALLOWED_HOSTS = ["pythondiscord.local"] + DEBUG = True + PARENT_HOST = "pythondiscord.local:8000" + +ROOT_HOSTCONF = "pydis_django.hosts" diff --git a/pysite/migrations/tables/__init__.py b/pydis_django/urls/__init__.py index e69de29b..e69de29b 100644 --- a/pysite/migrations/tables/__init__.py +++ b/pydis_django/urls/__init__.py diff --git a/pydis_django/urls/admin.py b/pydis_django/urls/admin.py new file mode 100644 index 00000000..dfc73621 --- /dev/null +++ b/pydis_django/urls/admin.py @@ -0,0 +1,6 @@ +from django.contrib import admin +from django.urls import path + +urlpatterns = [ + path('admin/', admin.site.urls), +] diff --git a/pydis_django/urls/api.py b/pydis_django/urls/api.py new file mode 100644 index 00000000..dfc73621 --- /dev/null +++ b/pydis_django/urls/api.py @@ -0,0 +1,6 @@ +from django.contrib import admin +from django.urls import path + +urlpatterns = [ + path('admin/', admin.site.urls), +] diff --git a/pydis_django/urls/main.py b/pydis_django/urls/main.py new file mode 100644 index 00000000..90453f65 --- /dev/null +++ b/pydis_django/urls/main.py @@ -0,0 +1,21 @@ +"""pydis_django URL Configuration + +The `urlpatterns` list routes URLs to views. For more information please see: + https://docs.djangoproject.com/en/2.1/topics/http/urls/ +Examples: +Function views + 1. Add an import: from my_app import views + 2. Add a URL to urlpatterns: path('', views.home, name='home') +Class-based views + 1. Add an import: from other_app.views import Home + 2. Add a URL to urlpatterns: path('', Home.as_view(), name='home') +Including another URLconf + 1. Import the include() function: from django.urls import include, path + 2. Add a URL to urlpatterns: path('blog/', include('blog.urls')) +""" +from django.contrib import admin +from django.urls import path + +urlpatterns = [ + path('admin/', admin.site.urls), +] diff --git a/pydis_django/urls/staff.py b/pydis_django/urls/staff.py new file mode 100644 index 00000000..dfc73621 --- /dev/null +++ b/pydis_django/urls/staff.py @@ -0,0 +1,6 @@ +from django.contrib import admin +from django.urls import path + +urlpatterns = [ + path('admin/', admin.site.urls), +] diff --git a/pydis_django/urls/wiki.py b/pydis_django/urls/wiki.py new file mode 100644 index 00000000..dfc73621 --- /dev/null +++ b/pydis_django/urls/wiki.py @@ -0,0 +1,6 @@ +from django.contrib import admin +from django.urls import path + +urlpatterns = [ + path('admin/', admin.site.urls), +] diff --git a/pydis_django/urls/ws.py b/pydis_django/urls/ws.py new file mode 100644 index 00000000..dfc73621 --- /dev/null +++ b/pydis_django/urls/ws.py @@ -0,0 +1,6 @@ +from django.contrib import admin +from django.urls import path + +urlpatterns = [ + path('admin/', admin.site.urls), +] diff --git a/pydis_django/wsgi.py b/pydis_django/wsgi.py new file mode 100644 index 00000000..17fb615f --- /dev/null +++ b/pydis_django/wsgi.py @@ -0,0 +1,16 @@ +""" +WSGI config for pydis_django project. + +It exposes the WSGI callable as a module-level variable named ``application``. + +For more information on this file, see +https://docs.djangoproject.com/en/2.1/howto/deployment/wsgi/ +""" + +import os + +from django.core.wsgi import get_wsgi_application + +os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'pydis_django.settings') + +application = get_wsgi_application() diff --git a/pysite/__init__.py b/pysite/__init__.py deleted file mode 100644 index c02afd0d..00000000 --- a/pysite/__init__.py +++ /dev/null @@ -1,61 +0,0 @@ -import logging -import os -import sys -from logging import Logger, StreamHandler, handlers - -from logmatic import JsonFormatter - -from pysite.constants import DEBUG_MODE - -# region Logging -# Get the log level from environment - -logging.TRACE = 5 -logging.addLevelName(logging.TRACE, "TRACE") - - -def monkeypatch_trace(self, msg, *args, **kwargs): - """ - Log 'msg % args' with severity 'TRACE'. - - To pass exception information, use the keyword argument exc_info with - a true value, e.g. - - logger.trace("Houston, we have an %s", "interesting problem", exc_info=1) - """ - if self.isEnabledFor(logging.TRACE): - self._log(logging.TRACE, msg, args, **kwargs) - - -Logger.trace = monkeypatch_trace -log_level = logging.TRACE if DEBUG_MODE else logging.INFO -logging_handlers = [] - -if DEBUG_MODE: - logging_handlers.append(StreamHandler(stream=sys.stdout)) - - json_handler = logging.FileHandler(filename="log.json", mode="w") - json_handler.formatter = JsonFormatter() - logging_handlers.append(json_handler) -else: - logdir = "log" - logfile = logdir+os.sep+"site.log" - megabyte = 1048576 - - if not os.path.exists(logdir): - os.makedirs(logdir) - - filehandler = handlers.RotatingFileHandler(logfile, maxBytes=(megabyte*5), backupCount=7) - logging_handlers.append(filehandler) - - json_handler = logging.StreamHandler(stream=sys.stdout) - json_handler.formatter = JsonFormatter() - logging_handlers.append(json_handler) - -logging.basicConfig( - format="%(asctime)s pd.beardfist.com Site: | %(name)35s | %(levelname)8s | %(message)s", - datefmt="%b %d %H:%M:%S", - level=log_level, - handlers=logging_handlers -) -# endregion diff --git a/pysite/base_route.py b/pysite/base_route.py deleted file mode 100644 index 8178b142..00000000 --- a/pysite/base_route.py +++ /dev/null @@ -1,328 +0,0 @@ -from collections import Iterable -from datetime import datetime -from typing import Any - -from flask import Blueprint, Response, jsonify, redirect, render_template, session, url_for -from flask.views import MethodView -from werkzeug.exceptions import default_exceptions - -from pysite.constants import ALL_STAFF_ROLES, DEBUG_MODE, ErrorCodes -from pysite.mixins import OAuthMixin - - -class BaseView(MethodView, OAuthMixin): - """ - Base view class with functions and attributes that should be common to all view classes. - - This class should be subclassed, and is not intended to be used directly. - """ - - name = None # type: str - blueprint = None # type: str - - def render(self, *template_names: str, **context: Any) -> str: - """ - Render some templates and get them back in a form that you can simply return from your view function. - - Here's what's inserted: - * "current_page" - the "name" attribute from the view class - * "view" - the view class instance - * "logged_in" - a boolean, True if the user is logged in - * "static_file(filename)", a function used to get the URL for a given static file - * "csrf_token()", a function returning the CSRF token stored in the current session - - For XSS protection, a CSRF token must be used. The "csrf_token()" function returns the correct token - to be used in the current rendering context - if your view methods are to be protected from XSS - exploits, the following steps must be taken: - - 1. Apply the "csrf" decorator to the view method - 2. For forms, a hidden input must be declared in the template, with the name "csrf_token", and the value set to - the CSRF token. - 3. For any AJAX work, the CSRF token should be stored in a variable, and sent as part of the request headers. - You can set the "X-CSRFToken" header to the CSRF token for this. - - Any API call or form submission not protected by an API key must not be vulnerable to XSS, unless the API - call is intended to be a completely public feature. Public API methods must not be account-bound, and they - must never return information on a current user or perform any action. Only data retrieval is permissible. - - :param template_names: Names of the templates to render - :param context: Extra data to pass into the template - :return: String representing the rendered templates - """ - - context["current_page"] = self.name - context["view"] = self - context["logged_in"] = self.logged_in - context["user"] = self.user_data - context["static_file"] = self._static_file - context["debug"] = DEBUG_MODE - context["format_datetime"] = lambda dt: dt.strftime("%b %d %Y, %H:%M") if isinstance(dt, datetime) else dt - context["blueprint"] = self.blueprint - - def is_staff(): - if DEBUG_MODE: - return True - - if not self.logged_in: - return False - - for role in ALL_STAFF_ROLES: - if role in self.user_data.get("roles", []): - return True - - return False - - context["is_staff"] = is_staff - - return render_template(template_names, **context) - - def _static_file(self, filename): - return url_for("static", filename=filename) - - -class RouteView(BaseView): - """ - Standard route-based page view. For a standard page, this is what you want. - - This class is intended to be subclassed - use it as a base class for your own views, and set the class-level - attributes as appropriate. For example: - - >>> class MyView(RouteView): - ... name = "my_view" # Flask internal name for this route - ... path = "/my_view" # Actual URL path to reach this route - ... - ... def get(self): # Name your function after the relevant HTTP method - ... return self.render("index.html") - - For more complicated routing, see http://exploreflask.com/en/latest/views.html#built-in-converters - """ - - path = None # type: str - - @classmethod - def setup(cls: "RouteView", manager: "pysite.route_manager.RouteManager", blueprint: Blueprint): - """ - Set up the view by adding it to the blueprint passed in - this will also deal with multiple inheritance by - calling `super().setup()` as appropriate. - - This is for a standard route view. Nothing special here. - - :param manager: Instance of the current RouteManager - :param blueprint: Current Flask blueprint to register this route to - """ - - if hasattr(super(), "setup"): - super().setup(manager, blueprint) - - if not cls.path or not cls.name: - raise RuntimeError("Route views must have both `path` and `name` defined") - - blueprint.add_url_rule(cls.path, view_func=cls.as_view(cls.name)) - - cls.blueprint = blueprint.name - cls.name = f"{blueprint.name}.{cls.name}" # Add blueprint to page name - - def redirect_login(self, **kwargs): - session["redirect_target"] = { - "url": self.name, - "kwargs": kwargs - } - - response = redirect(url_for("discord.login")) - response.headers.add("X-Robots-Tag", "noindex") - - return response - - -class APIView(RouteView): - """ - API route view, with extra methods to help you add routes to the JSON API with ease. - - This class is intended to be subclassed - use it as a base class for your own views, and set the class-level - attributes as appropriate. For example: - - >>> class MyView(APIView): - ... name = "my_view" # Flask internal name for this route - ... path = "/my_view" # Actual URL path to reach this route - ... - ... def get(self): # Name your function after the relevant HTTP method - ... return self.error(ErrorCodes.unknown_route) - """ - - def error(self, error_code: ErrorCodes, error_info: str = "") -> Response: - """ - Generate a JSON response for you to return from your handler, for a specific type of API error - - :param error_code: The type of error to generate a response for - see `constants.ErrorCodes` for more - :param error_info: An optional message with more information about the error. - :return: A Flask Response object that you can return from your handler - """ - - data = { - "error_code": error_code.value, - "error_message": error_info or "Unknown error" - } - - http_code = 200 - - if error_code is ErrorCodes.unknown_route: - data["error_message"] = error_info or "Unknown API route" - http_code = 404 - elif error_code is ErrorCodes.unauthorized: - data["error_message"] = error_info or "Unauthorized" - http_code = 401 - elif error_code is ErrorCodes.invalid_api_key: - data["error_message"] = error_info or "Invalid API-key" - http_code = 401 - elif error_code is ErrorCodes.bad_data_format: - data["error_message"] = error_info or "Input data in incorrect format" - http_code = 400 - elif error_code is ErrorCodes.incorrect_parameters: - data["error_message"] = error_info or "Incorrect parameters provided" - http_code = 400 - - response = jsonify(data) - response.status_code = http_code - return response - - -class ErrorView(BaseView): - """ - Error view, shown for a specific HTTP status code, as defined in the class attributes. - - This class is intended to be subclassed - use it as a base class for your own views, and set the class-level - attributes as appropriate. For example: - - >>> class MyView(ErrorView): - ... name = "my_view" # Flask internal name for this route - ... path = "/my_view" # Actual URL path to reach this route - ... error_code = 404 # Error code - ... - ... def get(self, error: HTTPException): # Name your function after the relevant HTTP method - ... return "Replace me with a template, 404 not found", 404 - - If you'd like to catch multiple HTTP error codes, feel free to supply an iterable for `error_code`. For example... - - >>> error_code = [401, 403] # Handle two specific errors - >>> error_code = range(500, 600) # Handle all 5xx errors - """ - - error_code = None # type: Union[int, Iterable] - register_on_app = True - blueprint = "error" # Because it doesn't truly have its own - - @classmethod - def setup(cls: "ErrorView", manager: "pysite.route_manager.RouteManager", blueprint: Blueprint): - """ - Set up the view by registering it as the error handler for the HTTP status codes specified in the class - attributes - this will also deal with multiple inheritance by calling `super().setup()` as appropriate. - - :param manager: Instance of the current RouteManager - :param blueprint: Current Flask blueprint to register the error handler for - """ - - if hasattr(super(), "setup"): - super().setup(manager, blueprint) # pragma: no cover - - if not cls.name or not cls.error_code: - raise RuntimeError("Error views must have both `name` and `error_code` defined") - - if isinstance(cls.error_code, int): - cls.error_code = [cls.error_code] - - if isinstance(cls.error_code, Iterable): - for code in cls.error_code: - if isinstance(code, int) and code not in default_exceptions: - continue # Otherwise we'll possibly get an exception thrown during blueprint registration - - if cls.register_on_app: - manager.app.errorhandler(code)(cls.as_view(cls.name)) - else: - blueprint.errorhandler(code)(cls.as_view(cls.name)) - else: - raise RuntimeError( - "Error views must have an `error_code` that is either an `int` or an iterable") # pragma: no cover # noqa: E501 - - -class TemplateView(RouteView): - """ - An easy view for routes that simply render a template with no extra information. - - This class is intended to be subclassed - use it as a base class for your own views, and set the class-level - attributes as appropriate. For example: - - >>> class MyView(TemplateView): - ... name = "my_view" # Flask internal name for this route - ... path = "/my_view" # Actual URL path to reach this route - ... template = "my_view.html" # Template to use - - Note that this view only handles GET requests. If you need any other verbs, you can implement them yourself - or just use one of the more customizable base view classes. - """ - - template = None # type: str - - @classmethod - def setup(cls: "TemplateView", manager: "pysite.route_manager.RouteManager", blueprint: Blueprint): - """ - Set up the view, deferring most setup to the superclasses but checking for the template attribute. - - :param manager: Instance of the current RouteManager - :param blueprint: Current Flask blueprint to register the error handler for - """ - - if hasattr(super(), "setup"): - super().setup(manager, blueprint) # pragma: no cover - - if not cls.template: - raise RuntimeError("Template views must have `template` defined") - - def get(self, *_): - return self.render(self.template) - - -class RedirectView(RouteView): - """ - An easy view for routes that simply redirect to another page or view. - - This class is intended to be subclassed - use it as a base class for your own views, and set the class-level - attributes as appropriate. For example: - - >>> class MyView(RedirectView): - ... name = "my_view" # Flask internal name for this route - ... path = "/my_view" # Actual URL path to reach this route - ... code = 303 # HTTP status code to use for the redirect; 303 by default - ... page = "staff.index" # Page to redirect to - ... kwargs = {} # Any extra keyword args to pass to the url_for call, if redirecting to another view - - You can specify a full URL, including the protocol, eg "http://google.com" or a Flask internal route name, - eg "main.index". Nothing else is supported. - - Note that this view only handles GET requests. If you need any other verbs, you can implement them yourself - or just use one of the more customizable base view classes. - """ - - code = 303 # type: int - page = None # type: str - kwargs = {} # type: Optional[dict] - - @classmethod - def setup(cls: "RedirectView", manager: "pysite.route_manager.RouteManager", blueprint: Blueprint): - """ - Set up the view, deferring most setup to the superclasses but checking for the template attribute. - - :param manager: Instance of the current RouteManager - :param blueprint: Current Flask blueprint to register the error handler for - """ - - if hasattr(super(), "setup"): - super().setup(manager, blueprint) # pragma: no cover - - if not cls.page or not cls.code: - raise RuntimeError("Redirect views must have both `code` and `page` defined") - - def get(self, *_): - if "://" in self.page: - return redirect(self.page, code=self.code) - - return redirect(url_for(self.page, **self.kwargs), code=self.code) diff --git a/pysite/constants.py b/pysite/constants.py deleted file mode 100644 index 7d8dbf6e..00000000 --- a/pysite/constants.py +++ /dev/null @@ -1,151 +0,0 @@ -from enum import Enum, IntEnum -from os import environ - -from flask_wtf import CSRFProtect - - -class ErrorCodes(IntEnum): - unknown_route = 0 - unauthorized = 1 - invalid_api_key = 2 - incorrect_parameters = 3 - bad_data_format = 4 - - -class ValidationTypes(Enum): - json = "json" - none = "none" - params = "params" - - -class BotEventTypes(Enum): - mod_log = "mod_log" - - send_message = "send_message" - send_embed = "send_embed" - - add_role = "add_role" - remove_role = "remove_role" - - -DEBUG_MODE = "FLASK_DEBUG" in environ - -# All snowflakes should be strings as RethinkDB rounds them as ints -ADMIN_BOTS_ROLE = "270988689419665409" -ADMINS_ROLE = "267628507062992896" -ANNOUNCEMENTS_ROLE = "463658397560995840" -BOTS_ROLE = "277546923144249364" -CODE_JAM_CHAMPIONS_ROLE = "430492892331769857" -CONTRIBS_ROLE = "295488872404484098" -DEVOPS_ROLE = "409416496733880320" -DEVELOPERS_ROLE = "352427296948486144" -HELPERS_ROLE = "267630620367257601" -JAMMERS_ROLE = "423054537079783434" -MODERATORS_ROLE = "267629731250176001" -MUTED_ROLE = "277914926603829249" -OWNERS_ROLE = "267627879762755584" -PARTNERS_ROLE = "323426753857191936" -PYTHON_ROLE = "458226699344019457" -STREAMERS_ROLE = "462650825978806274" -SUBREDDIT_MOD_ROLE = "458226413825294336" - -ALL_STAFF_ROLES = (OWNERS_ROLE, ADMINS_ROLE, MODERATORS_ROLE, DEVOPS_ROLE) -TABLE_MANAGER_ROLES = (OWNERS_ROLE, ADMINS_ROLE, DEVOPS_ROLE) -EDITOR_ROLES = ALL_STAFF_ROLES + (HELPERS_ROLE, CONTRIBS_ROLE) - -SERVER_ID = 267624335836053506 - -DISCORD_API_ENDPOINT = "https://discordapp.com/api" - -DISCORD_OAUTH_REDIRECT = "/auth/discord" -DISCORD_OAUTH_AUTHORIZED = "/auth/discord/authorized" -DISCORD_OAUTH_ID = environ.get('DISCORD_OAUTH_ID', '') -DISCORD_OAUTH_SECRET = environ.get('DISCORD_OAUTH_SECRET', '') -DISCORD_OAUTH_SCOPE = 'identify' -OAUTH_DATABASE = "oauth_data" - -GITLAB_ACCESS_TOKEN = environ.get("GITLAB_ACCESS_TOKEN", '') - -PREFERRED_URL_SCHEME = environ.get("PREFERRED_URL_SCHEME", "http") - -ERROR_DESCRIPTIONS = { - # 5XX - 500: "The server encountered an unexpected error ._.", - 501: "Woah! You seem to have found something we haven't even implemented yet!", - 502: "This is weird, one of our upstream servers seems to have experienced an error.", - 503: "Looks like one of our services is down for maintenance and couldn't respond to your request.", - 504: "Looks like an upstream server experienced a timeout while we tried to talk to it!", - 505: "You're using an old HTTP version. It might be time to upgrade your browser.", - # 4XX - 400: "You sent us a request that we don't know what to do with.", - 401: "Nope! You'll need to authenticate before we let you do that.", - 403: "No way! You're not allowed to do that.", - 404: "We looked, but we couldn't seem to find that page.", - 405: "That's a real page, but you can't use that method.", - 408: "We waited a really long time, but never got your request.", - 410: "This used to be here, but it's gone now.", - 411: "You forgot to tell us the length of the content.", - 413: "No way! That payload is, like, way too big!", - 415: "The thing you sent has the wrong format.", - 418: "I'm a teapot, I can't make coffee. (._.)", - 429: "Please don't send us that many requests." -} - -JAM_STATES = [ - "planning", - "announced", - "preparing", - "running", - "judging", - "finished" -] - -JAM_QUESTION_TYPES = [ - "checkbox", - "email", - "number", - "radio", - "range", - "text", - "textarea", - "slider" -] - -# Server role colors -ROLE_COLORS = { - ADMIN_BOTS_ROLE: "#6f9fed", - ADMINS_ROLE: "#e76e6c", - BOTS_ROLE: "#6f9fed", - CODE_JAM_CHAMPIONS_ROLE: "#b108b4", - CONTRIBS_ROLE: "#55cc6c", - DEVOPS_ROLE: "#a1d1ff", - DEVELOPERS_ROLE: "#fcfcfc", - HELPERS_ROLE: "#e0b000", - JAMMERS_ROLE: "#258639", - MODERATORS_ROLE: "#ce3c42", - MUTED_ROLE: "#fcfcfc", - OWNERS_ROLE: "#ffa3a1", - PARTNERS_ROLE: "#b66fed", - PYTHON_ROLE: "#6f9fed", - STREAMERS_ROLE: "#833cba", - SUBREDDIT_MOD_ROLE: "#d897ed", -} - -# CSRF -CSRF = CSRFProtect() - -# Bot key -BOT_API_KEY = environ.get("BOT_API_KEY") - -# RabbitMQ settings -BOT_EVENT_QUEUE = "bot_events" - -RMQ_USERNAME = environ.get("RABBITMQ_DEFAULT_USER") or "guest" -RMQ_PASSWORD = environ.get("RABBITMQ_DEFAULT_PASS") or "guest" -RMQ_HOST = "localhost" if DEBUG_MODE else environ.get("RABBITMQ_HOST") or "pdrmq" -RMQ_PORT = 5672 - -# Channels -CHANNEL_MOD_LOG = 282638479504965634 -CHANNEL_DEV_LOGS = 409308876241108992 -CHANNEL_JAM_LOGS = 452486310121439262 diff --git a/pysite/database.py b/pysite/database.py deleted file mode 100644 index ddf79a31..00000000 --- a/pysite/database.py +++ /dev/null @@ -1,562 +0,0 @@ -import logging -import os -from typing import Any, Callable, Dict, Iterator, List, Optional, Union -import re - -import rethinkdb -from rethinkdb.ast import RqlMethodQuery, Table, UserError -from rethinkdb.net import DefaultConnection -from werkzeug.exceptions import ServiceUnavailable - -from pysite.tables import TABLES - -STRIP_REGEX = re.compile(r"<[^<]+?>") -WIKI_TABLE = "wiki" - - -class RethinkDB: - - def __init__(self, loop_type: Optional[str] = "gevent"): - self.host = os.environ.get("RETHINKDB_HOST", "127.0.0.1") - self.port = os.environ.get("RETHINKDB_PORT", "28015") - self.database = os.environ.get("RETHINKDB_DATABASE", "pythondiscord") - self.log = logging.getLogger(__name__) - self.conn = None - - if loop_type: - rethinkdb.set_loop_type(loop_type) - - with self.get_connection() as self.conn: - try: - rethinkdb.db_create(self.database).run(self.conn) - self.log.debug(f"Database created: '{self.database}'") - except rethinkdb.RqlRuntimeError: - self.log.debug(f"Database found: '{self.database}'") - - def create_tables(self) -> List[str]: - """ - Creates whichever tables exist in the TABLES - constant if they don't already exist in the database. - - :return: a list of the tables that were created. - """ - created = [] - - for table, obj in TABLES.items(): - if self.create_table(table, obj.primary_key): - created.append(table) - - return created - - def get_connection(self, connect_database: bool = True) -> DefaultConnection: - """ - Grab a connection to the RethinkDB server, optionally without selecting a database - - :param connect_database: Whether to immediately connect to the database or not - """ - - if connect_database: - return rethinkdb.connect(host=self.host, port=self.port, db=self.database) - else: - return rethinkdb.connect(host=self.host, port=self.port) - - def before_request(self): - """ - Flask pre-request callback to set up a connection for the duration of the request - """ - - try: - self.conn = self.get_connection() - except rethinkdb.RqlDriverError: - raise ServiceUnavailable("Database connection could not be established.") - - def teardown_request(self, _): - """ - Flask post-request callback to close a previously set-up connection - - :param _: Exception object, not used here - """ - - try: - self.conn.close() - except AttributeError: - pass - - # region: Convenience wrappers - - def create_table(self, table_name: str, primary_key: str = "id", durability: str = "hard", shards: int = 1, - replicas: Union[int, Dict[str, int]] = 1, primary_replica_tag: Optional[str] = None) -> bool: - """ - Attempt to create a new table on the current database - - :param table_name: The name of the table to create - :param primary_key: The name of the primary key - defaults to "id" - :param durability: "hard" (the default) to write the change immediately, "soft" otherwise - :param shards: The number of shards to span the table over - defaults to 1 - :param replicas: See the RethinkDB documentation relating to replicas - :param primary_replica_tag: See the RethinkDB documentation relating to replicas - - :return: True if the table was created, False if it already exists - """ - - with self.get_connection() as conn: - all_tables = rethinkdb.db(self.database).table_list().run(conn) - self.log.debug(f"Call to table_list returned the following list of tables: {all_tables}") - - if table_name in all_tables: - self.log.debug(f"Table found: '{table_name}' ({len(all_tables)} tables in total)") - return False - - # Use a kwargs dict because the driver doesn't check the value - # of `primary_replica_tag` properly; None is not handled - kwargs = { - "primary_key": primary_key, - "durability": durability, - "shards": shards, - "replicas": replicas - } - - if primary_replica_tag is not None: - kwargs["primary_replica_tag"] = primary_replica_tag - - rethinkdb.db(self.database).table_create(table_name, **kwargs).run(conn) - - self.log.debug(f"Table created: '{table_name}'") - return True - - def delete(self, - table_name: str, - primary_key: Union[str, None] = None, - durability: str = "hard", - return_changes: Union[bool, str] = False) -> dict: - """ - Delete one or all documents from a table. This can only delete - either the contents of an entire table, or a single document. - For more complex delete operations, please use self.query. - - :param table_name: The name of the table to delete from. This must be provided. - :param primary_key: The primary_key to delete from that table. This is optional. - :param durability: "hard" (the default) to write the change immediately, "soft" otherwise - :param return_changes: Whether to return a list of changed values or not - defaults to False - :return: if return_changes is True, returns a dict containing all changes. Else, returns None. - """ - - if primary_key: - query = self.query(table_name).get(primary_key).delete( - durability=durability, return_changes=return_changes - ) - else: - query = self.query(table_name).delete( - durability=durability, return_changes=return_changes - ) - - if return_changes: - return self.run(query, coerce=dict) - self.run(query) - - def drop_table(self, table_name: str): - """ - Attempt to drop a table from the database, along with its data - - :param table_name: The name of the table to drop - :return: True if the table was dropped, False if the table doesn't exist - """ - - with self.get_connection() as conn: - all_tables = rethinkdb.db(self.database).table_list().run(conn) - - if table_name not in all_tables: - return False - - rethinkdb.db(self.database).table_drop(table_name).run(conn) - return True - - def query(self, table_name: str) -> Table: - """ - Get a RethinkDB table object that you can run queries against - - >>> db = RethinkDB() - >>> query = db.query("my_table") - >>> db.run(query.insert({"key": "value"}), coerce=dict) - { - "deleted": 0, - "errors": 0, - "inserted": 1, - "replaced": 0, - "skipped": 0, - "unchanged": 0 - } - - :param table_name: Name of the table to query against - :return: The RethinkDB table object for the table - """ - - if table_name not in TABLES: - self.log.warning(f"Table not declared in tables.py: {table_name}") - - return rethinkdb.table(table_name) - - def run(self, query: Union[RqlMethodQuery, Table], *, new_connection: bool = False, - connect_database: bool = True, coerce: type = None) -> Union[rethinkdb.Cursor, List, Dict, object]: - """ - Run a query using a table object obtained from a call to `query()` - - >>> db = RethinkDB() - >>> query = db.query("my_table") - >>> db.run(query.insert({"key": "value"}), coerce=dict) - { - "deleted": 0, - "errors": 0, - "inserted": 1, - "replaced": 0, - "skipped": 0, - "unchanged": 0 - } - - Note that result coercion is very basic, and doesn't really do any magic. If you want to be able to work - directly with the result of your query, then don't specify the `coerce` argument - the object that you'd - usually get from the RethinkDB API will be returned instead. - - :param query: The full query to run - :param new_connection: Whether to create a new connection or use the current request-bound one - :param connect_database: If creating a new connection, whether to connect to the database immediately - :param coerce: Optionally, an object type to attempt to coerce the result to - - :return: The result of the operation - """ - - if not new_connection: - try: - result = query.run(self.conn) - except rethinkdb.ReqlDriverError as e: - if e.message == "Connection is closed.": - self.log.warning("Connection was closed, attempting with a new connection...") - result = query.run(self.get_connection(connect_database)) - else: - raise - else: - result = query.run(self.get_connection(connect_database)) - - if coerce: - return coerce(result) if result else coerce() - return result - - # endregion - - # region: RethinkDB wrapper functions - - def between(self, table_name: str, *, lower: Any = rethinkdb.minval, upper: Any = rethinkdb.maxval, - index: Optional[str] = None, left_bound: str = "closed", right_bound: str = "open") -> List[ - Dict[str, Any]]: - """ - Get all documents between two keys - - >>> db = RethinkDB() - >>> db.between("users", upper=10, index="conquests") - [ - {"username": "gdude", "conquests": 2}, - {"username": "joseph", "conquests": 5} - ] - >>> db.between("users", lower=10, index="conquests") - [ - {"username": "lemon", "conquests": 15} - ] - >>> db.between("users", lower=2, upper=10, index="conquests" left_bound="open") - [ - {"username": "gdude", "conquests": 2}, - {"username": "joseph", "conquests": 5} - ] - - :param table_name: The table to get documents from - :param lower: The lower-bounded value, leave blank to ignore - :param upper: The upper-bounded value, leave blank to ignore - :param index: The key or index to check on each document - :param left_bound: "open" to include documents that exactly match the lower bound, "closed" otherwise - :param right_bound: "open" to include documents that exactly match the upper bound, "closed" otherwise - - :return: A list of matched documents; may be empty - """ - return self.run( # pragma: no cover - self.query(table_name).between(lower, upper, index=index, left_bound=left_bound, right_bound=right_bound), - coerce=list - ) - - def changes(self, table_name: str, squash: Union[bool, int] = False, changefeed_queue_size: int = 100_000, - include_initial: Optional[bool] = None, include_states: bool = False, - include_types: bool = False) -> Iterator[Dict[str, Any]]: - """ - A complicated function allowing you to follow a changefeed for a specific table - - This function will not allow you to specify a set of conditions for your changefeed, so you'll - have to write your own query and run it with `run()` if you need that. If not, you'll just get every - change for the specified table. - - >>> db = RethinkDB() - >>> for document in db.changes("my_table", squash=True): - ... print(document.get("new_val", {})) - - Documents take the form of a dict with `old_val` and `new_val` fields by default. These are set to a copy of - the document before and after the change being represented was made, respectively. The format of these dicts - can change depending on the arguments you pass to the function, however. - - If a changefeed must be aborted (for example, if the table was deleted), a ReqlRuntimeError will be - raised. - - Note: This function always creates a new connection. This is to prevent you from losing your changefeed - when the connection used for a request context is closed. - - :param table_name: The name of the table to watch for changes on - - :param squash: How to deal with batches of changes to a single document - False (the default) to send changes - as they happen, True to squash changes for single objects together and send them as a single change, - or an int to specify how many seconds to wait for an object to change before batching it - - :param changefeed_queue_size: The number of changes the server will buffer between client reads before it - starts to drop changes and issues errors - defaults to 100,000 - - :param include_initial: If True, the changefeed will start with the initial values of all the documents in - the table; the results will have `new_val` fields ONLY to start with if this is the case. Note that - the old values may be intermixed with new changes if you're still iterating through the old values, but - only as long as the old value for that field has already been sent. If the order of a document you've - already seen moves it to a part of the group you haven't yet seen, an "unitial" notification is sent, which - is simply a dict with an `old_val` field set, and not a `new_val` field set. This option defaults to - False. - - :param include_states: Whether to send special state documents to the changefeed as its state changes. This - comprises of special documents with only a `state` field, set to a string - the state of the feed. There - are currently two states - "initializing" and "ready". This option defaults to False. - - :param include_types: If True, each document generated will include a `type` field which states what type - of change the document represents. This may be "add", "remove", "change", "initial", "uninitial" or - "state". This option defaults to False. - - :return: A special iterator that will iterate over documents in the changefeed as they're sent. If there is - no document waiting, this will block the function until there is. - """ - return self.run( # pragma: no cover - self.query(table_name).changes( - squash=squash, changefeed_queue_size=changefeed_queue_size, include_initial=include_initial, - include_states=include_states, include_offsets=False, include_types=include_types - ), - new_connection=True - ) - - def filter(self, table_name: str, predicate: Callable[[Dict[str, Any]], bool], - default: Union[bool, UserError] = False) -> List[Dict[str, Any]]: - """ - Return all documents in a table for which `predicate` returns true. - - The `predicate` argument should be a function that takes a single argument - a single document to check - and - it should return True or False depending on whether the document should be included. - - >>> def many_conquests(doc): - ... '''Return documents with at least 10 conquests''' - ... return doc["conquests"] >= 10 - ... - >>> db = RethinkDB() - >>> db.filter("users", many_conquests) - [ - {"username": "lemon", "conquests": 15} - ] - - :param table_name: The name of the table to get documents for - :param predicate: The callable to use to filter the documents - :param default: What to do if a document is missing fields; True to include them, `rethink.error()` to raise - aa ReqlRuntimeError, or False to skip over the document (the default) - :return: A list of documents that match the predicate; may be empty - """ - - return self.run( # pragma: no cover - self.query(table_name).filter(predicate, default=default), - coerce=list - ) - - def get(self, table_name: str, key: Any) -> Optional[Dict[str, Any]]: - """ - Get a single document from a table by primary key - - :param table_name: The name of the table to get the document from - :param key: The value of the primary key belonging to the document you want - - :return: The document, or None if it wasn't found - """ - - result = self.run( # pragma: no cover - self.query(table_name).get(key) - ) - - return dict(result) if result else None # pragma: no cover - - def get_all(self, table_name: str, *keys: str, index: str = "id") -> List[Any]: - """ - Get a list of documents matching a set of keys, on a specific index - - :param table_name: The name of the table to get documents from - :param keys: The key values to match against - :param index: The name of the key or index to match on - - :return: A list of matching documents; may be empty if no matches were made - """ - - if keys: - return self.run( # pragma: no cover - self.query(table_name).get_all(*keys, index=index), - coerce=list - ) - else: - return self.run( - self.query(table_name), - coerce=list - ) - - def insert(self, table_name: str, *objects: Dict[str, Any], - durability: str = "hard", - return_changes: Union[bool, str] = False, - conflict: Union[ # Any of... - str, Callable[ # ...str, or a callable that... - [Dict[str, Any], Dict[str, Any]], # ...takes two dicts with string keys and any values... - Dict[str, Any] # ...and returns a dict with string keys and any values - ] - ] = "error") -> Dict[str, Any]: # flake8: noqa - """ - Insert an object or a set of objects into a table - - :param table_name: The name of the table to insert into - :param objects: The objects to be inserted into the table - :param durability: "hard" (the default) to write the change immediately, "soft" otherwise - :param return_changes: Whether to return a list of changed values or not - defaults to False - :param conflict: What to do in the event of a conflict - "error", "replace" and "update" are included, but - you can also provide your own function in order to handle conflicts yourself. If you do this, the function - should take two arguments (the old document and the new one), and return a single document to replace both. - - :return: A dict detailing the operations run - """ - - query = self.query(table_name).insert( - objects, durability=durability, return_changes=return_changes, conflict=conflict - ) - - return self.run(query, coerce=dict) - - def map(self, table_name: str, func: Callable): - """ - Map a function over every document in a table, with the possibility of modifying it - - As an example, you could do the following to rename the "id" field to "user_id" for all documents - in the "users" table. - - >>> db = RethinkDB() - >>> db.map( - ... "users", - ... lambda doc: doc.merge({"user_id": doc["id"]}).without("id") - ... ) - - :param table_name: The name of the table to map the function over - :param func: A callable that takes a single argument - - :return: Unknown, needs more testing - """ - - return self.run( # pragma: no cover - self.query(table_name).map(func), - coerce=list - ) - - def pluck(self, table_name: str, *selectors: Union[str, Dict[str, Union[List, Dict]]]) -> List[Dict[str, Any]]: - """ - Get a list of values for a specific set of keys for every document in the table; this can include - nested values - - >>> db = RethinkDB() - >>> db.pluck("users", "username", "password") # Select a flat document - [ - {"username": "lemon", "password": "hunter2"} - ] - >>> db.pluck("users", {"posts": ["title"]}) # Select from nested documents - [ - { - "posts": [ - {"title": "New website!"} - ] - } - ] - - :param table_name: The table to get values from - :param selectors: The set of keys to get values for - :return: A list containing the requested documents, with only the keys requested - """ - - return self.run( # pragma: no cover - self.query(table_name).pluck(*selectors), - coerce=list - ) - - def sample(self, table_name: str, sample_size: int) -> List[Dict[str, Any]]: - """ - Select a given number of elements from a table at random. - - :param table_name: The name of the table to select from. - :param sample_size: The number of elements to select. - If this number is higher than the total amount of items in - the table, this will return the entire table in random order. - - :return: A list of items from the table. - """ - return self.run( # pragma: no cover - self.query(table_name).sample(sample_size), - coerce=list - ) - - def sync(self, table_name: str) -> bool: - """ - Following a set of edits with durability set to "soft", this must be called to save those edits - - :param table_name: The name of the table to sync - - :return: True if the sync was successful; False otherwise - """ - result = self.run( # pragma: no cover - self.query(table_name).sync(), - coerce=dict - ) - - return result.get("synced", 0) > 0 # pragma: no cover - - def wait(self, table_name: str, wait_for: str = "all_replicas_ready", timeout: int = 0) -> bool: - """ - Wait until an operation has happened on a specific table; will block the current function - - :param table_name: The name of the table to wait against - :param wait_for: The operation to wait for; may be "ready_for_outdated_reads", - "ready_for_reads", "ready_for_writes" or "all_replicas_ready", which is the default - :param timeout: How long to wait before returning; defaults to 0 (forever) - - :return: True; but may return False if the timeout was reached - """ - - result = self.run( # pragma: no cover - self.query(table_name).wait(wait_for=wait_for, timeout=timeout), - coerce=dict - ) - - return result.get("ready", 0) > 0 - - def without(self, table_name: str, *selectors: Union[str, Dict[str, Union[List, Dict]]]): - """ - The functional opposite of `pluck()`, returning full documents without the specified selectors - - >>> db = RethinkDB() - >>> db.without("users", "posts") - [ - {"username": "lemon", "password": "hunter2"} - ] - - :param table_name: The table to get values from - :param selectors: The set of keys to exclude - :return: A list containing the requested documents, without the keys requested - """ - - return self.run( # pragma: no cover - self.query(table_name).without(*selectors) - ) - # endregion diff --git a/pysite/decorators.py b/pysite/decorators.py deleted file mode 100644 index fbfb90f8..00000000 --- a/pysite/decorators.py +++ /dev/null @@ -1,151 +0,0 @@ -from functools import wraps -from json import JSONDecodeError - -from flask import request -from schema import Schema, SchemaError -from werkzeug.exceptions import BadRequest, Forbidden - -from pysite.base_route import APIView, RouteView -from pysite.constants import BOT_API_KEY, CSRF, DEBUG_MODE, ErrorCodes, ValidationTypes - - -def csrf(f): - """ - Apply CSRF protection to a specific view function. - """ - - @wraps(f) - def inner_decorator(*args, **kwargs): - CSRF.protect() - - return f(*args, **kwargs) - - return inner_decorator - - -def require_roles(*roles: int): - def inner_decorator(f): - - @wraps(f) - def inner(self: RouteView, *args, **kwargs): - data = self.user_data - - if DEBUG_MODE: - return f(self, *args, **kwargs) - elif data: - for role in roles: - if role in data.get("roles", []): - return f(self, *args, **kwargs) - - if isinstance(self, APIView): - return self.error(ErrorCodes.unauthorized) - - raise Forbidden() - return self.redirect_login(**kwargs) - - return inner - - return inner_decorator - - -def api_key(f): - """ - Decorator to check if X-API-Key is valid. - - Should only be applied to functions on APIView routes. - """ - - @wraps(f) - def inner_decorator(self: APIView, *args, **kwargs): - if not request.headers.get("X-API-Key") == BOT_API_KEY: - return self.error(ErrorCodes.invalid_api_key) - return f(self, *args, **kwargs) - - return inner_decorator - - -def api_params( - schema: Schema = None, - validation_type: ValidationTypes = ValidationTypes.json, - allow_duplicate_params: bool = False): - """ - Validate parameters of data passed to the decorated view. - - Should only be applied to functions on APIView routes. - - This will pass the validated data in as the first parameter to the decorated function. - This data will always be a list, and view functions are expected to be able to handle that - in the case of multiple sets of data being provided by the api. - - If `allow_duplicate_params` is set to False (only effects dictionary schemata - and parameter validation), then the view will return a 400 Bad Request - response if the client submits multiple parameters with the same name. - """ - - def inner_decorator(f): - - @wraps(f) - def inner(self: APIView, *args, **kwargs): - if validation_type == ValidationTypes.json: - try: - if not request.is_json: - return self.error(ErrorCodes.bad_data_format) - - data = request.get_json() - - if not isinstance(data, list) and isinstance(schema._schema, list): - data = [data] - - except JSONDecodeError: - return self.error(ErrorCodes.bad_data_format) # pragma: no cover - - elif validation_type == ValidationTypes.params and isinstance(schema._schema, list): - # I really don't like this section here, but I can't think of a better way to do it - multi = request.args # This is a MultiDict, which should be flattened to a list of dicts - - # We'll assume that there's always an equal number of values for each param - # Anything else doesn't really make sense anyway - data = [] - longest = None - - for _key, items in multi.lists(): - # Make sure every key has the same number of values - if longest is None: - # First iteration, store it - longest = len(items) - - elif len(items) != longest: # pragma: no cover - # At least one key has a different number of values - return self.error(ErrorCodes.bad_data_format) # pragma: no cover - - if longest is not None: - for i in range(longest): # Now we know all keys have the same number of values... - obj = {} # New dict to store this set of values - - for key, items in multi.lists(): - obj[key] = items[i] # Store the item at that specific index - - data.append(obj) - - elif validation_type == ValidationTypes.params and isinstance(schema._schema, dict): - if not allow_duplicate_params: - for _arg, value in request.args.to_dict(flat=False).items(): - if len(value) > 1: - raise BadRequest("This view does not allow duplicate query arguments") - data = request.args.to_dict() - elif validation_type == ValidationTypes.none: - return f(self, None, *args, **kwargs) - - else: - raise ValueError(f"Unknown validation type: {validation_type}") # pragma: no cover - - try: - schema.validate(data) - except SchemaError as e: - return self.error(ErrorCodes.incorrect_parameters, str(e)) - - return f(self, data, *args, **kwargs) - - return inner - - return inner_decorator diff --git a/pysite/migrations/runner.py b/pysite/migrations/runner.py deleted file mode 100644 index d498832f..00000000 --- a/pysite/migrations/runner.py +++ /dev/null @@ -1,95 +0,0 @@ -import importlib -import json -import os -from typing import Callable - -from pysite.database import RethinkDB -from pysite.tables import TABLES - -TABLES_DIR = os.path.abspath("./pysite/migrations/tables") -VERSIONS_TABLE = "_versions" - - -def get_migrations(table_path, table): - """ - Take a table name and the path to its migration files, and return a dict containing versions and modules - corresponding with each migration. - - And, yes, migrations start at 1. - """ - migrations = {} - final_version = 0 - - for filename in sorted(os.listdir(table_path)): - if filename.startswith("v") and filename.endswith(".py"): - final_version = int(filename[1:-3]) - migrations[final_version] = f"pysite.migrations.tables.{table}.v{final_version}" - - return migrations, final_version - - -def run_migrations(db: RethinkDB, output: Callable[[str], None]=None): - for table, obj in TABLES.items(): # All _defined_ tables - table_path = os.path.join(TABLES_DIR, table) - - if not os.path.exists(table_path): # Check whether we actually have any migration data for this table at all - output(f"No migration data found for table: {table}") - continue - - with db.get_connection() as conn: # Make sure we have an active connection - try: - if not db.query(table).count().run(conn): # If there are no documents in the table... - # Table's empty, so we'll have to run migrations again anyway - db.delete(VERSIONS_TABLE, table) - - json_path = os.path.join(table_path, "initial_data.json") - - if os.path.exists(json_path): # We have initial data to insert, so let's do that - with open(json_path, "r", encoding="utf-8") as json_file: - data = json.load(json_file) - db.insert(table, *data) # Table's empty, so... just do the thing - - output(f"Inserted initial data for table: {table}") - else: # There's no json data file for this table - output(f"No initial_data.json file for table: {table}") - output(json_path) - - # Translate migration files into modules and versions - migrations, final_version = get_migrations(table_path, table) - - if not migrations: # No migration files found - output(f"No structural migrations for table: {table}") - continue - - current_version = 0 - doc = db.get(VERSIONS_TABLE, table) - - if doc: # We've done a migration before, so continue from where we left off - current_version = doc["version"] - - if current_version == final_version: # Nothing to do, we're up to date - output(f"Table is already up to date: {table}") - continue - output(f"Table has never been migrated: {table}") - - while current_version < final_version: - current_version += 1 - - module = importlib.import_module(migrations[current_version]) - module.run(db, table, obj) - output(f"Table upgraded to version {current_version}/{final_version}: {table}") - - # Make sure the versions table is kept up to date, so we don't ever migrate twice - # We do this in the loop to save our progress, in case we fail during a migration - - db.insert( - VERSIONS_TABLE, - {"table": table, "version": current_version}, - conflict="replace", - durability="soft" - ) - except Exception: - output(f"Failed to migrate table: {table}") - raise - finally: - db.sync(VERSIONS_TABLE) diff --git a/pysite/migrations/tables/code_jam_participants/__init__.py b/pysite/migrations/tables/code_jam_participants/__init__.py deleted file mode 100644 index e69de29b..00000000 --- a/pysite/migrations/tables/code_jam_participants/__init__.py +++ /dev/null diff --git a/pysite/migrations/tables/code_jam_participants/v1.py b/pysite/migrations/tables/code_jam_participants/v1.py deleted file mode 100644 index c6e7bff6..00000000 --- a/pysite/migrations/tables/code_jam_participants/v1.py +++ /dev/null @@ -1,11 +0,0 @@ -def run(db, table, table_obj): - """ - Remove stored dates of birth from code jam participants - """ - - for document in db.get_all(table): - if "dob" in document: - del document["dob"] - - db.insert(table, document, conflict="replace", durability="soft") - db.sync(table) diff --git a/pysite/migrations/tables/code_jam_participants/v2.py b/pysite/migrations/tables/code_jam_participants/v2.py deleted file mode 100644 index 858da279..00000000 --- a/pysite/migrations/tables/code_jam_participants/v2.py +++ /dev/null @@ -1,12 +0,0 @@ -def run(db, table, table_obj): - """ - GitHub usernames -> Store as GitLab username, this will be correct for most jammers - """ - - for document in db.get_all(table): - if "github_username" in document: - document["gitlab_username"] = document["github_username"] - del document["github_username"] - - db.insert(table, document, conflict="replace", durability="soft") - db.sync(table) diff --git a/pysite/migrations/tables/code_jam_teams/__init__.py b/pysite/migrations/tables/code_jam_teams/__init__.py deleted file mode 100644 index e69de29b..00000000 --- a/pysite/migrations/tables/code_jam_teams/__init__.py +++ /dev/null diff --git a/pysite/migrations/tables/code_jam_teams/v1.py b/pysite/migrations/tables/code_jam_teams/v1.py deleted file mode 100644 index 165d3100..00000000 --- a/pysite/migrations/tables/code_jam_teams/v1.py +++ /dev/null @@ -1,13 +0,0 @@ -def run(db, table, table_obj): - """ - Associate the ID of each team's code jam (team -> jam) - """ - - for document in db.get_all(table): - if "jam" not in document: - # find the code jam containing this team - for jam in db.get_all("code_jams"): - if document["id"] in jam["teams"]: - document["jam"] = jam["number"] - db.insert(table, document, conflict="update", durability="soft") - db.sync(table) diff --git a/pysite/migrations/tables/code_jam_teams/v2.py b/pysite/migrations/tables/code_jam_teams/v2.py deleted file mode 100644 index c6d7c972..00000000 --- a/pysite/migrations/tables/code_jam_teams/v2.py +++ /dev/null @@ -1,13 +0,0 @@ -def run(db, table, table_obj): - """ - Associate the ID of each team's code jam (team -> jam) - again - """ - - for document in db.get_all(table): - if "jam" not in document: - # find the code jam containing this team - for jam in db.get_all("code_jams"): - if document["id"] in jam["teams"]: - document["jam"] = jam["number"] - db.insert(table, document, conflict="update", durability="soft") - db.sync(table) diff --git a/pysite/migrations/tables/code_jams/__init__.py b/pysite/migrations/tables/code_jams/__init__.py deleted file mode 100644 index e69de29b..00000000 --- a/pysite/migrations/tables/code_jams/__init__.py +++ /dev/null diff --git a/pysite/migrations/tables/code_jams/v1.py b/pysite/migrations/tables/code_jams/v1.py deleted file mode 100644 index cce3b112..00000000 --- a/pysite/migrations/tables/code_jams/v1.py +++ /dev/null @@ -1,11 +0,0 @@ -def run(db, table, table_obj): - """ - Add "teams" list to jams without it - """ - - for document in db.get_all(table): - if "teams" not in document: - document["teams"] = [] - - db.insert(table, document, conflict="replace", durability="soft") - db.sync(table) diff --git a/pysite/migrations/tables/code_jams/v2.py b/pysite/migrations/tables/code_jams/v2.py deleted file mode 100644 index df4752c8..00000000 --- a/pysite/migrations/tables/code_jams/v2.py +++ /dev/null @@ -1,10 +0,0 @@ -def run(db, table, table_obj): - """ - Clean list of teams from teams that do not exist anymore. - """ - for document in db.get_all(table): - for team_id in document["teams"]: - if db.get("code_jam_teams", team_id) is None: - document["teams"].remove(team_id) - db.insert(table, document, conflict="update", durability="soft") - db.sync(table) diff --git a/pysite/migrations/tables/hiphopify_namelist/__init__.py b/pysite/migrations/tables/hiphopify_namelist/__init__.py deleted file mode 100644 index e69de29b..00000000 --- a/pysite/migrations/tables/hiphopify_namelist/__init__.py +++ /dev/null diff --git a/pysite/migrations/tables/hiphopify_namelist/initial_data.json b/pysite/migrations/tables/hiphopify_namelist/initial_data.json deleted file mode 100644 index f0b15f63..00000000 --- a/pysite/migrations/tables/hiphopify_namelist/initial_data.json +++ /dev/null @@ -1,5198 +0,0 @@ -[ - { - "name": "100 Kila", - "image_url": "http://hotnews.bg/uploads/tinymce/w09/100-%D0%BA%D0%B8%D0%BB%D0%B0.jpg" - }, - { - "name": "100s", - "image_url": "http://images.complex.com/complex/image/upload/t_article_image/nzwte8lxj3p1orqf5yrm.jpg" - }, - { - "name": "12 Gauge", - "image_url": "http://cps-static.rovicorp.com/3/JPG_250/MI0001/358/MI0001358517.jpg" - }, - { - "name": "2 Chainz", - "image_url": "http://thesource.com/wp-content/uploads/2016/01/2-Chainz-rapper.jpg" - }, - { - "name": "2 Pistols", - "image_url": "http://images3.wikia.nocookie.net/__cb20130521104737/rap/images/0/0c/2p.jpg" - }, - { - "name": "2$ Fabo", - "image_url": "http://assets.audiomack.com/2-fabo/355f3587905bb4e2bc936f76cd64cef3.jpeg" - }, - { - "name": "21 Savage", - "image_url": "https://nyppagesix.files.wordpress.com/2018/04/21-savage-amber-rose.jpg" - }, - { - "name": "2Mex", - "image_url": "https://www.ballerstatus.com/wp-content/uploads/2016/05/2mex.jpg" - }, - { - "name": "360", - "image_url": "http://resources1.news.com.au/images/2012/07/19/1226428/465937-rapper-360-hit.jpg" - }, - { - "name": "40 Glocc", - "image_url": "http://www.ballerstatus.com/wp-content/uploads/2014/06/40glocc.jpg" - }, - { - "name": "50 Cent", - "image_url": "http://www.michellehenry.fr/rapper_50_cent.jpg" - }, - { - "name": "6lack", - "image_url": "http://electriccircus.co/home/wp-content/uploads/2017/01/black.jpg" - }, - { - "name": "6ix9ine", - "image_url": "http://thesource.com/wp-content/uploads/2018/04/Screen-Shot-2018-04-11-at-8.51.56-AM.png" - }, - { - "name": "The 6th Letter", - "image_url": "http://hw-img.datpiff.com/m5dadf91/The_6th_Letter_What_The_F_the_Mixtape-front-large.jpg" - }, - { - "name": "9th Wonder", - "image_url": "http://www.hiphopvideoworld.com/wp-content/uploads/2016/06/Talib-Kweli-ft.-9th-Wonder-Rapsody-Life-Ahead-Of-Me.jpg" - }, - { - "name": "Andre 3000", - "image_url": "http://1.bp.blogspot.com/-1TAyMhARS8s/UaWDLXzZzdI/AAAAAAAACDg/NOToaM0g_as/s1600/80999804-e1369795094594.jpg" - }, - { - "name": "Big Boi", - "image_url": "http://redalertpolitics.com/files/2013/01/BigBoi.jpg" - }, - { - "name": "A.CHAL", - "image_url": "http://images.thissongissick.com/c_fill-f_auto-g_faces-h_630-w_1200-v1496443961-this-song-is-sick-media-image-a-chal-press-shot-1496443960836-png.jpg" - }, - { - "name": "A+", - "image_url": "https://upload.wikimedia.org/wikipedia/commons/7/72/Guru_(rapper).jpg" - }, - { - "name": "A-Q", - "image_url": "http://www.eurweb.com/wp-content/uploads/2011/05/qtip.jpg" - }, - { - "name": "Arabian Prince", - "image_url": "https://68.media.tumblr.com/3938a8b6b11d462ba95807666e47f778/tumblr_mvjf8kRjCx1qzx6s2o1_500.jpg" - }, - { - "name": "Ab-Soul", - "image_url": "http://16762-presscdn-0-89.pagely.netdna-cdn.com/wp-content/uploads/2014/05/ab-soul.jpg" - }, - { - "name": "A Boogie wit da Hoodie", - "image_url": "https://vergecampus.com/wp-content/uploads/2018/04/Screen-Shot-2018-04-09-at-9.47.46-PM-1024x594.png" - }, - { - "name": "Abstract Rude", - "image_url": "http://media1.fdncms.com/orlando/imager/u/original/2554165/20170112_abstract_rude_5.jpg" - }, - { - "name": "Ace Hood", - "image_url": "http://www.aceshowbiz.com/images/news/00024363.jpg" - }, - { - "name": "Aceyalone", - "image_url": "http://images.rapgenius.com/4f38e699f6f80a3255420adf5e98a0a8.600x600x1.jpg" - }, - { - "name": "Action Bronson", - "image_url": "http://alloveralbany.com/images/rapper_Action_Bronson.jpg" - }, - { - "name": "Adam Saleh", - "image_url": "http://naibuzz.com/wp-content/uploads/2016/05/adam-saleh.jpg" - }, - { - "name": "Aesop Rock", - "image_url": "https://static-secure.guim.co.uk/sys-images/Guardian/Pix/pictures/2014/5/5/1399294322119/Rapper-Aesop-Rock-014.jpg" - }, - { - "name": "Afrika Bambaataa", - "image_url": "http://imageslogotv-a.akamaihd.net/uri/mgid:uma:image:logotv.com:11564172" - }, - { - "name": "Afroman", - "image_url": "http://www.irishnews.com/picturesarchive/irishnews/irishnews/2017/01/10/130012018-8220bff2-983c-48f3-ae57-276cab82f911.png" - }, - { - "name": "Afu-Ra", - "image_url": "https://upload.wikimedia.org/wikipedia/commons/thumb/2/2f/20120504_-_Afu-Ra.jpg/220px-20120504_-_Afu-Ra.jpg" - }, - { - "name": "Agallah", - "image_url": "http://1.bp.blogspot.com/-jJBR6f4cBwI/ThQ-NxjTffI/AAAAAAAABF4/Oe2n71hDmtM/s320/8%2Boff%2Bagallah.jpg" - }, - { - "name": "Ahmad", - "image_url": "http://images.rapgenius.com/38af31ae445f8c6ac6ce2a3b21a4605b.1000x684x1.jpg" - }, - { - "name": "Ajs Nigrutin", - "image_url": "http://vignette2.wikia.nocookie.net/rap/images/0/0f/Medium_ajs-nigrutin.jpg/revision/latest" - }, - { - "name": "Akala", - "image_url": "http://assets.londonist.com/uploads/2015/11/akala.jpg" - }, - { - "name": "Akinyele", - "image_url": "http://www.hiphopfind.com/upload/bukmtqhhlj.jpg" - }, - { - "name": "Akir", - "image_url": "http://www.iamhiphopmagazine.com/wp-content/uploads/2013/05/Akir.jpg" - }, - { - "name": "Akon", - "image_url": "http://img.mi9.com/male-celebrities/5077/akon-rapper-2012_1920x1200_96228.jpg" - }, - { - "name": "The Alchemist", - "image_url": "http://4.bp.blogspot.com/_nF-S6ZVuhd4/SuESHfU70_I/AAAAAAAAABs/s0txyMZP-Ps/s400/alc.jpg" - }, - { - "name": "Ali Vegas", - "image_url": "https://s3-us-west-2.amazonaws.com/maven-user-photos/f0f13b1e-f33a-4136-bc5a-6a0f09dd591f" - }, - { - "name": "Alpha", - "image_url": "https://images.rapgenius.com/9f2ba7bd713179faa8fe8968969f82eb.1000x667x1.jpg" - }, - { - "name": "AMG", - "image_url": "http://en.academic.ru/pictures/enwiki/65/Amg_rapper.jpg" - }, - { - "name": "Amil", - "image_url": "http://3.bp.blogspot.com/_RaOrchOImw8/SxSVt5z1auI/AAAAAAAAbeQ/sZ7xLZjOmco/s1600/Amil.jpg" - }, - { - "name": "Aminé", - "image_url": "https://upload.wikimedia.org/wikipedia/commons/thumb/1/17/Amine_performing_on_Jimmy_Fallon_in_2017_%28crop%29.png/1200px-Amine_performing_on_Jimmy_Fallon_in_2017_%28crop%29.png" - }, - { - "name": "Amir Obè", - "image_url": "http://www.brooklynvegan.com/files/2016/03/Amir-Obe-Press-2015-billboard-650-e1457450170547.jpg" - }, - { - "name": "Ampichino", - "image_url": "http://ecx.images-amazon.com/images/I/51rPUuz7FTL._SL500_AA280_.jpg" - }, - { - "name": "Anderson .Paak", - "image_url": "http://okp-cdn.okayplayer.com/wp-content/uploads/2017/01/Chance-The-Rapper-Anderson-.Paak_.jpg" - }, - { - "name": "André 3000", - "image_url": "http://1.bp.blogspot.com/-1TAyMhARS8s/UaWDLXzZzdI/AAAAAAAACDg/NOToaM0g_as/s1600/80999804-e1369795094594.jpg" - }, - { - "name": "Andre Nickatina", - "image_url": "http://favimages.com/wp-content/uploads/2012/08/rapper-andre-nickatina-singer-man-star.jpg" - }, - { - "name": "Andy Mineo", - "image_url": "http://media-cache-ec0.pinimg.com/736x/8c/fa/7a/8cfa7aebe58f9bc08a140cc571d62723.jpg" - }, - { - "name": "Angel Haze", - "image_url": "http://www.trbimg.com/img-508ac7c2/turbine/la-et-ms-fall-in-love-with-angel-haze-20121025-003/600" - }, - { - "name": "Angie Martinez", - "image_url": "http://www.missinfo.tv/wp-content/uploads/2014/03/yg-angie-martinez.png" - }, - { - "name": "Ant", - "image_url": "http://static.vibe.com/files/article_images/yg-addie.jpg" - }, - { - "name": "Ant Banks", - "image_url": "http://www.rapmusicguide.com/amass/images/inventory/2415/Ant%20Banks%20-%20Big%20Thangs.jpg" - }, - { - "name": "Antoinette", - "image_url": "http://static.squarespace.com/static/520ed800e4b0229123208764/521febeae4b011f034449849/521febebe4b0b42980e39d2d/1377823723826/whostheboss.jpg" - }, - { - "name": "Anybody Killa", - "image_url": "http://cdn.ticketfly.com/i/00/01/38/13/01-atxl1.png" - }, - { - "name": "Apache", - "image_url": "http://mtv.mtvnimages.com/uri/mgid:uma:image:mtv.com:4554653" - }, - { - "name": "Apathy", - "image_url": "https://upload.wikimedia.org/wikipedia/commons/1/1f/Apathy_rapper.jpg" - }, - { - "name": "Arin Hanson", - "image_url": "https://i.redditmedia.com/WE_gR0aOODE9WLF-83188AYG9Rd2QknnezyMyKVv_q0.jpg" - }, - { - "name": "A$AP Ferg", - "image_url": "http://media.gettyimages.com/photos/rapper-aap-ferg-performs-in-concert-at-austin-music-hall-on-february-picture-id508118894" - }, - { - "name": "A$AP Nast", - "image_url": "https://i1.wp.com/hypebeast.com/image/2017/02/asap-nast-calabasas-collection-video-0-1.jpg" - }, - { - "name": "A$AP Rocky", - "image_url": "http://3.bp.blogspot.com/-4ks0l9W_v9w/T_H3jtPbI-I/AAAAAAACePQ/9fbnSjU60zE/s1600/Rapper+A$AP+Rocky.jpg" - }, - { - "name": "A$AP Yams", - "image_url": "http://cdn.chartattack.com/wp-content/uploads/2015/01/asap-yams.jpg" - }, - { - "name": "A$ton Matthews", - "image_url": "http://hivesociety.com/wp-content/uploads/2014/07/Aston004.jpg" - }, - { - "name": "Asher Roth", - "image_url": "http://www.streetgangs.com/wp-content/uploads/2010/08/asher-roth.jpg" - }, - { - "name": "Astronautalis", - "image_url": "http://jacksonville.com/sites/default/files/imagecache/superphoto/photos/blogs/141/13358_203735570707_32280295707_4512309_5261114_n.jpg" - }, - { - "name": "Awol One", - "image_url": "http://images.complex.com/complex/image/upload/c_limit,w_680/fl_lossy,pg_1,q_auto/lqiqtknfvukvwx4ki4te.jpg" - }, - { - "name": "Awkwafina", - "image_url": "http://media3.s-nbcnews.com/i/newscms/2014_35/635111/awkwafina_06_00cd08f4bbc01bf20145954bf5e97fc0.jpg" - }, - { - "name": "AZ", - "image_url": "https://upload.wikimedia.org/wikipedia/commons/7/76/Az-03.jpg" - }, - { - "name": "Azealia Banks", - "image_url": "http://i.huffpost.com/gen/920953/images/o-RAPPER-AZEALIA-BANKS-facebook.jpg" - }, - { - "name": "Big Daddy Kane", - "image_url": "http://images.rapgenius.com/30a5d7f5135fdf9124beff6834884ff8.640x773x1.jpg" - }, - { - "name": "Busta Rhymes", - "image_url": "http://newsbite.it/public/images/articles/busta-drake.jpg" - }, - { - "name": "B-Legit", - "image_url": "http://cps-static.rovicorp.com/3/JPG_500/MI0003/729/MI0003729154.jpg" - }, - { - "name": "B-Real", - "image_url": "http://www3.pictures.zimbio.com/pc/Rapper+B+Real+Cypress+Hill+outside+Beso+Hollywood+sklqv7IPKMfl.jpg" - }, - { - "name": "B.G.", - "image_url": "http://1.bp.blogspot.com/-L8lASsCAFzo/Ve46XOQJynI/AAAAAAAAJOw/zJ6vIxtAbrs/s400/BG-In-Prison-2015.jpg" - }, - { - "name": "B.G. Knocc Out", - "image_url": "https://escobar300.files.wordpress.com/2013/08/b-g-knocc-out.png" - }, - { - "name": "B.o.B", - "image_url": "http://www4.pictures.zimbio.com/gi/B+o+B+rapper+BET+Hip+Hop+Awards+2010+Arrivals+bQ93QLw6t05l.jpg" - }, - { - "name": "Baby Bash", - "image_url": "http://ww2.hdnux.com/photos/24/26/14/5333761/5/960x540.jpg" - }, - { - "name": "Baby Boy da Prince", - "image_url": "http://www.rapartists.com/_files/pictures/full/1924_baby_boy_da_prince_u03.jpg" - }, - { - "name": "Baby D", - "image_url": "http://cdn.straightfromthea.com/wp-content/uploads/2008/03/babyd2.jpg" - }, - { - "name": "Bad Azz", - "image_url": "https://s3.amazonaws.com/hiphopdx-production/2015/10/Bad-Azz_10-08-2015.jpg" - }, - { - "name": "Badshah", - "image_url": "http://freehdwallpapersz.com/wp-content/uploads/2016/06/badshah-rapper-wallpaper.jpg" - }, - { - "name": "Baeza", - "image_url": "https://40.media.tumblr.com/bcb78b58c6c7a906342772115424c983/tumblr_mhpekhIOKd1rily04o1_500.jpg" - }, - { - "name": "Bahamadia", - "image_url": "http://hiphopgoldenage.com/wp-content/uploads/2015/08/CS1700455-02A-BIG.jpg" - }, - { - "name": "Baka Not Nice", - "image_url": "http://rapradar.com/wp-content/uploads/2015/05/baka.jpg" - }, - { - "name": "Bang Yong-guk", - "image_url": "http://favimages.com/wp-content/uploads/2012/08/rapper-bang-yong-guk-dance-song-hip-hop.jpg" - }, - { - "name": "Bangladesh", - "image_url": "http://www.nodfactor.com/wp-content/uploads/2010/04/bangladesh_0.jpg" - }, - { - "name": "Bas", - "image_url": "http://cps-static.rovicorp.com/3/JPG_400/MI0004/032/MI0004032446.jpg" - }, - { - "name": "Battlecat", - "image_url": "https://mediaanarchist.files.wordpress.com/2013/07/7995104660_aeda73b31f_z.jpg" - }, - { - "name": "Beanie Sigel", - "image_url": "http://hustlebunny.com/content/2012/07/beanie-sigel-rapper.jpg" - }, - { - "name": "Becky G", - "image_url": "https://40.media.tumblr.com/da84f75189bb52c8d66f64dc5ea20bf1/tumblr_mo8inbcBAK1qfyjoto1_500.jpg" - }, - { - "name": "Benny Blanco", - "image_url": "http://cache2.asset-cache.net/gc/473115600-rapper-benny-blanco-attends-the-63rd-annual-gettyimages.jpg" - }, - { - "name": "Beenzino", - "image_url": "http://www.kpopmusic.com/wp-content/uploads/2015/10/beenzino-3.jpg" - }, - { - "name": "Benzino", - "image_url": "http://missxpose.com/wp-content/uploads/2014/03/benzino.png" - }, - { - "name": "Big Boi", - "image_url": "http://redalertpolitics.com/files/2013/01/BigBoi.jpg" - }, - { - "name": "Big Daddy Kane", - "image_url": "http://images.rapgenius.com/30a5d7f5135fdf9124beff6834884ff8.640x773x1.jpg" - }, - { - "name": "Big Ed", - "image_url": "http://upload.wikimedia.org/wikipedia/en/8/8d/Big_Ed.jpg" - }, - { - "name": "Big Gipp", - "image_url": "http://www.stacksmag.net/wp-content/uploads/2014/09/stacksmag007atllive.png" - }, - { - "name": "Big Hawk", - "image_url": "http://favimages.com/wp-content/uploads/2012/08/rapper-big-hawk-celebrity-star-style.jpg" - }, - { - "name": "Big K.R.I.T.", - "image_url": "http://www.thissongslaps.com/wp-content/uploads/2014/09/big_krit-news-article921121.png" - }, - { - "name": "Big Kuntry King", - "image_url": "http://s4.evcdn.com/images/block250/I0-001/000/989/283-8.jpeg_/big-kuntry-king-83.jpeg" - }, - { - "name": "Big L", - "image_url": "http://outlookaub.com/wp-content/uploads/2015/03/big-l.jpg" - }, - { - "name": "Big Lurch", - "image_url": "https://thoughtcatalog.files.wordpress.com/2015/09/big_lurch.jpg" - }, - { - "name": "Big Mello", - "image_url": "http://hivesociety.com/wp-content/uploads/2015/10/big-mello.jpg" - }, - { - "name": "Big Mike", - "image_url": "http://fakehustle.files.wordpress.com/2009/02/big-mike.jpg" - }, - { - "name": "Big Moe", - "image_url": "http://s3.amazonaws.com/rapgenius/big-moe_480x480.jpg" - }, - { - "name": "Big Noyd", - "image_url": "http://singersroom.com/upload/2013/03/Big-Noyd-Light-Up-The-Night.jpg" - }, - { - "name": "Big Pokey", - "image_url": "http://purple-drank.com/wp-content/uploads/2013/06/Big-Pokey.png" - }, - { - "name": "Big Pooh", - "image_url": "http://ambrosiaforheads.com/wp-content/uploads/2012/07/Rapper+Big+Pooh+Big+p00h.jpg" - }, - { - "name": "Big Pun", - "image_url": "http://assets.nydailynews.com/polopoly_fs/1.1620420.1392857208!/img/httpImage/image.jpg_gen/derivatives/article_750/big-pun-legacy.jpg" - }, - { - "name": "Big Reese", - "image_url": "https://dpjsgvx0fhwmn.cloudfront.net/albums/34235/large/bb2c7032b95187e95b92.jpg" - }, - { - "name": "Big Scoob", - "image_url": "http://www.funmissouri.com/uploads/files/2013/06/big-scoob-rapper-missouri.png" - }, - { - "name": "Big Smo", - "image_url": "https://i.ytimg.com/vi/igZweLr604Y/maxresdefault.jpg" - }, - { - "name": "Big Sean", - "image_url": "http://images5.fanpop.com/image/photos/27200000/Big-Sean-big-sean-rapper-27232010-500-610.jpg" - }, - { - "name": "Big Shaq", - "image_url": "https://hypebeast.imgix.net/http%3A%2F%2Fhypebeast.com%2Fimage%2F2017%2F10%2Frapper-halloween-costumes-lil-pump-roadman-shaq-lil-peep-lil-b-lil-uzi-vert-00.jpg" - }, - { - "name": "Big Shug", - "image_url": "https://s-media-cache-ak0.pinimg.com/736x/d1/2a/db/d12adb999028c2db003aa5e736e585a2.jpg" - }, - { - "name": "Big Syke", - "image_url": "https://pmchollywoodlife.files.wordpress.com/2016/12/big-syke-rapper-died-ftr.jpg" - }, - { - "name": "Bigg D", - "image_url": "http://www.4umf.com/wp-content/uploads/2014/11/Rapper-Big-Paybacc-Killed.jpg" - }, - { - "name": "Billy Woods", - "image_url": "http://backwoodzstudioz.com/wp-content/uploads/2013/06/BillyWoods_AlexanderRichter_WebReady_Press_DourCandy_2C.jpg" - }, - { - "name": "Birdman", - "image_url": "http://www.ablogtowatch.com/wp-content/uploads/2010/12/clip_image008.jpg" - }, - { - "name": "Bishop Nehru", - "image_url": "http://cdn2.pitchfork.com/news/53665/e5bac495.jpg" - }, - { - "name": "Biz Markie", - "image_url": "http://assets.nydailynews.com/polopoly_fs/1.1451937.1378902764!/img/httpImage/image.jpg_gen/derivatives/article_1200/biz-markie.jpg" - }, - { - "name": "Bizarre", - "image_url": "https://upload.wikimedia.org/wikipedia/commons/thumb/b/b7/Bizarre.jpg/1200px-Bizarre.jpg" - }, - { - "name": "Bugz", - "image_url": "http://1.bp.blogspot.com/-zqDNlEcJS9Q/U3JTKpcl7hI/AAAAAAAAAcw/sQJSzSDVIq4/s1600/bugz+image.jpg" - }, - { - "name": "Bizzy", - "image_url": "http://wprapradar.s3.amazonaws.com/wp-content/uploads/2010/05/bizzy-bone1.jpg" - }, - { - "name": "Bizzy Bone", - "image_url": "https://nowtoronto.com/downloads/68186/download/BizzyBone.jpg" - }, - { - "name": "BJ the Chicago Kid", - "image_url": "https://consequenceofsound.files.wordpress.com/2015/08/chance-the-rapper-bj-the-chicago-kid.jpg" - }, - { - "name": "Black Milk", - "image_url": "http://hiphop-n-more.com/wp-content/uploads/2010/09/black-milk-9.jpg" - }, - { - "name": "Black Rob", - "image_url": "http://mtv.mtvnimages.com/uri/mgid:uma:image:mtv.com:1676761" - }, - { - "name": "Black Thought", - "image_url": "http://vibesource.files.wordpress.com/2008/06/black-thought-mcsforlifevibesourcemag.jpg" - }, - { - "name": "Blade Icewood", - "image_url": "http://www.officialpsds.com/images/thumbs/Blade-Icewood-psd61214.png" - }, - { - "name": "Blaq Poet", - "image_url": "http://www.audibletreats.com/wp-content/gallery/blaqpoet/blaq_poet-street.jpg" - }, - { - "name": "Blaze Ya Dead Homie", - "image_url": "http://img3.wikia.nocookie.net/__cb20130520210459/rap/images/b/bb/Blaze_ya_dead_homie.jpg" - }, - { - "name": "BlocBoy JB", - "image_url": "https://rapdose.com/wp-content/uploads/fly-images/146583/asap-forever-378x250-c.jpg" - }, - { - "name": "Blood Raw", - "image_url": "http://www.rapartists.com/_files/pictures/full/2313_blood_raw.jpg" - }, - { - "name": "Blu", - "image_url": "http://thecomeupshow.com/wp-content/uploads/2012/08/blu-rapper.jpg" - }, - { - "name": "Bob Doe", - "image_url": "http://media-cache-ak0.pinimg.com/736x/84/e0/35/84e0355d2eaac3e990892bad26267ff2.jpg" - }, - { - "name": "Bobby Brackins", - "image_url": "http://www1.pictures.zimbio.com/gi/Bobby+Brackins+Puma+Presents+Riddim+Run+Benefiting+1v-Ki1nD2Owl.jpg" - }, - { - "name": "Bobby Creekwater", - "image_url": "http://static.djbooth.net/pics-artist/bobbycreekwater2.jpg" - }, - { - "name": "Bobby Shmurda", - "image_url": "https://static.pulse.ng/img/incoming/origs3920830/3240485024-w980-h640/bobby-shmurda-and-rihanna.jpg" - }, - { - "name": "Bohemia", - "image_url": "http://1.bp.blogspot.com/-vnAVLnSXj1k/UskN6icYkBI/AAAAAAAAAUM/6jbrIjj-GS0/s1600/From+the+set+of+Dada+in+Bahrain.jpg" - }, - { - "name": "Boi-1da", - "image_url": "http://www.beatmakingvideos.com/sites/default/files/producer_foto/boi_1da.jpg" - }, - { - "name": "Boldy James", - "image_url": "http://thoughtontracks.files.wordpress.com/2012/06/boldy-james.jpg" - }, - { - "name": "Bone Crusher", - "image_url": "http://images2.mtv.com/uri/mgid:uma:artist:mtv.com:1235147" - }, - { - "name": "Bones", - "image_url": "https://s-media-cache-ak0.pinimg.com/736x/e7/3a/2e/e73a2e853bd074c32d1abe08900ba2a7.jpg" - }, - { - "name": "Booba", - "image_url": "https://underneathestarz.files.wordpress.com/2015/06/boo23.jpg" - }, - { - "name": "Boondox", - "image_url": "http://static.tvtropes.org/pmwiki/pub/images/boondox01_7971.jpg" - }, - { - "name": "Boosie Badazz", - "image_url": "http://www.rap-up.com/app/uploads/2015/11/boosie-hat.jpg" - }, - { - "name": "Boss", - "image_url": "http://3.bp.blogspot.com/-2Tn1dMXQIzE/TtW53Kcvo4I/AAAAAAAADcQ/LNWNkwDCwIY/s1600/Boss.jpg" - }, - { - "name": "Bow Wow", - "image_url": "https://thedrinksbusiness.com/wordpress/wp-content/uploads/2015/03/lil-bow-wow-net-worth-424x640.jpg" - }, - { - "name": "Braille", - "image_url": "http://media1.fdncms.com/bend/imager/braille-read-him-with-your-ears/u/original/2148215/braille.jpg" - }, - { - "name": "Brandun DeShay", - "image_url": "https://s-media-cache-ak0.pinimg.com/736x/4b/28/bb/4b28bbbd4f6d7223e07d312b7cacc2ac--rapper-artists.jpg" - }, - { - "name": "Brianna Perry", - "image_url": "http://4.bp.blogspot.com/-IXYep2nCIwI/T0F0AX6zRZI/AAAAAAAACRg/4agQBS5a50Y/s1600/rapper-brianna.jpg" - }, - { - "name": "Brisco", - "image_url": "http://www.yorapper.com/Photos/brisco-rap.jpg" - }, - { - "name": "Brotha Lynch Hung", - "image_url": "http://favimages.com/wp-content/uploads/2012/08/rapper-brotha-lynch-hung-song-recitation-fame.jpg" - }, - { - "name": "Bruno Mars", - "image_url": "http://www2.pictures.zimbio.com/gi/Bruno+Mars+B+o+B+rapper+2010+MTV+Video+Music+TeX5_EMP-jDl.jpg" - }, - { - "name": "Brother Ali", - "image_url": "http://www.killerhiphop.com/wp-content/uploads/2012/02/Brother-Ali.jpg" - }, - { - "name": "Bryson Tiller", - "image_url": "https://i.pinimg.com/736x/00/2d/f7/002df7c879422acb3a18c00c224300f3--bryson-tiller-rapper.jpg" - }, - { - "name": "Bubba Sparxxx", - "image_url": "http://www.contactmusic.com/pics/l/ludacris_benefit_250408/rapper_bubba_sparxxx_5124692.jpg" - }, - { - "name": "Buckshot", - "image_url": "https://i.ytimg.com/vi/JU81txDlbx8/maxresdefault.jpg" - }, - { - "name": "Buckwild", - "image_url": "http://www.blackouthiphop.com/blog/wp-content/uploads/2011/04/buckwild-producer1.jpg" - }, - { - "name": "Bumpy Knuckles", - "image_url": "http://streetknowledge.files.wordpress.com/2008/07/bumpy_knuckles.jpg" - }, - { - "name": "Bun B", - "image_url": "http://ww4.hdnux.com/photos/23/53/75/5160803/3/rawImage.jpg" - }, - { - "name": "Busdriver", - "image_url": "http://images2.laweekly.com/imager/busdriver/u/original/5177944/busdriver_photo-l_dianadalsasso2014.jpg" - }, - { - "name": "Bushwick Bill", - "image_url": "http://www.collegebaseballtoday.com/files/2013/05/BushwickBill_Stitches1.jpg" - }, - { - "name": "Busta Rhymes", - "image_url": "http://newsbite.it/public/images/articles/busta-drake.jpg" - }, - { - "name": "Busy Bee Starski", - "image_url": "https://s3.amazonaws.com/battlerap-production/2014/09/Busy-Bee610.jpg" - }, - { - "name": "Butch Cassidy", - "image_url": "https://pbs.twimg.com/profile_images/378800000221503061/5d6802b25f28f80c390d48fd1aca20d1.jpeg" - }, - { - "name": "Common", - "image_url": "http://i.huffpost.com/gen/1352726/thumbs/o-RAPPER-COMMON-facebook.jpg" - }, - { - "name": "C-Bo", - "image_url": "http://unitedgangs.files.wordpress.com/2010/04/c-bo.jpg" - }, - { - "name": "C-Murder", - "image_url": "http://media.nola.com/crime_impact/photo/cmurder-horizontal-cropjpg-77be374eafb600e4.jpg" - }, - { - "name": "C-Note", - "image_url": "https://i.ytimg.com/vi/F40M4icrNMQ/maxresdefault.jpg" - }, - { - "name": "C-Rayz Walz", - "image_url": "https://s3.amazonaws.com/hiphopdx-production/2017/04/C-Rayz-WalzInstagram-e1491328882399-827x620.png" - }, - { - "name": "Cage", - "image_url": "http://1.bp.blogspot.com/_4ZiWxZWnbZE/TVEuUjybxkI/AAAAAAAAAWQ/SjyC6aacpXc/s1600/cagecrazy.jpg" - }, - { - "name": "Cam'ron", - "image_url": "http://www.yorapper.com/Photos/camron-ringtones.jpg" - }, - { - "name": "Canibus", - "image_url": "http://upload.wikimedia.org/wikipedia/commons/d/d9/Canibus_at_Amager_Bio_4.jpg" - }, - { - "name": "Capital Steez", - "image_url": "http://images.complex.com/complex/image/upload/c_fill,g_center,h_640,w_640/fl_lossy,pg_1,q_auto/gjpwujnfpj1afsu4uawy.jpg" - }, - { - "name": "Capone", - "image_url": "https://consequenceofsound.files.wordpress.com/2018/04/the-meadows-2017-ben-kaye-run-the-jewels-7.jpg" - }, - { - "name": "Cappadonna", - "image_url": "http://favimages.com/wp-content/uploads/2012/08/rapper-cappadonna-star-celebrity-best-photo.jpg" - }, - { - "name": "Cardi B", - "image_url": "https://rapdose.com/wp-content/uploads/2018/03/cardi-b-be-careful.jpg" - }, - { - "name": "Casey Veggies", - "image_url": "http://wac.450f.edgecastcdn.net/80450F/theboombox.com/files/2015/02/caseyveggies-630x420.jpg" - }, - { - "name": "Cash Out", - "image_url": "http://jojocrews.com/wp-content/uploads/2015/01/cash1.jpg" - }, - { - "name": "Cashis", - "image_url": "http://mediastarr.files.wordpress.com/2008/10/cashismusiccom1.jpg" - }, - { - "name": "Caskey", - "image_url": "http://social.rollins.edu/wpsites/mousetrap/files/2016/06/Caskey.jpg" - }, - { - "name": "Casper Nyovest", - "image_url": "http://www.destinyman.com/wp-content/uploads/2015/04/Casper-Nyovest--690x450.jpg" - }, - { - "name": "Cassidy", - "image_url": "http://www.missxpose.com/wp-content/uploads/2010/03/BET+Rip+Runway+2010+Arrivals+MPN9FSqiQxql2.jpg" - }, - { - "name": "Cazwell", - "image_url": "http://1.bp.blogspot.com/-yxVYPS6GT4Q/TdLjbiV2bYI/AAAAAAAAESs/ecXi9lrdkKM/s1600/cazwell.jpg" - }, - { - "name": "CeeLo Green", - "image_url": "https://www.festivalsherpa.com/wp-content/uploads/2014/09/ceelo.jpg" - }, - { - "name": "Cellski", - "image_url": "http://images.rapgenius.com/56c23a073295a1baa7c88f22411a8a9a.500x500x1.jpg" - }, - { - "name": "Celly Cel", - "image_url": "http://cps-static.rovicorp.com/3/JPG_400/MI0003/729/MI0003729697.jpg" - }, - { - "name": "Celph Titled", - "image_url": "http://s3.amazonaws.com/rapgenius/1362723298_l.jpg" - }, - { - "name": "Cesar Comanche", - "image_url": "http://d2jos65913uaef.cloudfront.net/wp-content/uploads/2013/07/Cesar_comanche_interview-200x130.jpg" - }, - { - "name": "Ceza", - "image_url": "https://musicinculture.files.wordpress.com/2011/04/ceza40ke9_1_.jpg" - }, - { - "name": "Chamillionaire", - "image_url": "http://i.dailymail.co.uk/i/pix/2016/02/19/09/01BC5195000004B0-3454235-image-m-26_1455874575624.jpg" - }, - { - "name": "Chance the Rapper", - "image_url": "http://rukkus.com/blog/wp-content/uploads/2014/01/chance-the-rapper.png" - }, - { - "name": "Chanel West Coast", - "image_url": "http://images1.laweekly.com/imager/rapper-reality-tv-star-chanel-west-coast/u/original/5002632/law_chanel_west_coast-3280-edit.jpg" - }, - { - "name": "Channel 7", - "image_url": "http://media.gettyimages.com/photos/south-korean-rapper-psy-performs-live-on-channel-7s-sunrise-at-martin-picture-id154251648" - }, - { - "name": "Charizma", - "image_url": "http://4ca03fhcpiv4bsn7vbg2ef11td.wpengine.netdna-cdn.com/wp-content/uploads/2014/09/1b820b3864413e7b3fba3958b433d733-1024x690.jpg" - }, - { - "name": "Charles Hamilton", - "image_url": "http://www.billboard.com/files/styles/promo_650/public/media/charles-hamilton-brigitte-sire-bb7-2015-billboard-650.jpg" - }, - { - "name": "Charli Baltimore", - "image_url": "http://djpinkietuscadero.files.wordpress.com/2013/08/charli-baltimore.jpg" - }, - { - "name": "Chevy Woods", - "image_url": "http://www.post-gazette.com/image/2015/08/04/ca11,5,1918,1913/chevy0806b0553-1.jpg" - }, - { - "name": "Chi Ali", - "image_url": "http://www.vladtv.com/images/size_fs/video_image-133965.jpg" - }, - { - "name": "Chali 2na", - "image_url": "https://upload.wikimedia.org/wikipedia/commons/2/2a/Chali2na.jpg" - }, - { - "name": "Chiddy Bang", - "image_url": "http://campuseventsblog.com/wp-content/uploads/2012/09/CHIDDYPHOTO1.jpg" - }, - { - "name": "Chief Keef", - "image_url": "http://wallpapersqq.net/wp-content/uploads/2016/01/Chief-Keef-6.jpg" - }, - { - "name": "Childish Gambino", - "image_url": "http://diymag.com/media/img/Artists/C/Childish-Gambino/_1500x1000_crop_center-center_75/Childish-Gambino-Press-Photo-copy.jpg" - }, - { - "name": "Chill Rob G", - "image_url": "https://img.youtube.com/vi/Hd0aNVDOo3U/0.jpg" - }, - { - "name": "Chingy", - "image_url": "http://tattletailzz.com/wp-content/uploads/2013/03/SGG-008258.jpg" - }, - { - "name": "Chingo Bling", - "image_url": "https://atlantalatinos.com/wp-content/uploads/2018/03/chingo-bling-atlanta-georgia-atlantalatinos-2-1068x1067.jpg" - }, - { - "name": "Chino XL", - "image_url": "http://iv1.lisimg.com/image/436161/600full-chino-xl.jpg" - }, - { - "name": "Chinx", - "image_url": "http://images.complex.com/complex/image/upload/t_article_image/chinx-rapper-2_jyerea.jpg" - }, - { - "name": "Chip", - "image_url": "http://www.voice-online.co.uk/sites/default/files/imagecache/455/chip-rapper-RIP.jpg" - }, - { - "name": "Choice", - "image_url": "http://2.bp.blogspot.com/-TjL6ZSCN8kA/UTimdEyVUSI/AAAAAAAABYI/fUlPXSKfg7o/s320/choiceback.jpg" - }, - { - "name": "Choppa", - "image_url": "http://fanpagepress.net/m/C/choppa-rapper-1.jpg" - }, - { - "name": "Chris Brown", - "image_url": "http://www.hdwallpaper4u.com/wp-content/uploads/2015/07/chris-brown_rapper_look.jpg" - }, - { - "name": "Chris Webby", - "image_url": "http://thissongissick.com/blog/wp-content/uploads/2011/11/Chris-Webby-Rapper.jpg" - }, - { - "name": "Christopher Martin", - "image_url": "http://www2.pictures.zimbio.com/gi/Heavy+D+Funeral+Service+Qy4IEAGabbUx.jpg" - }, - { - "name": "Christopher Reid", - "image_url": "http://static.atlantablackstar.com/wp-content/uploads/2014/09/Christopher-Kid-Reid.jpg" - }, - { - "name": "Chubb Rock", - "image_url": "http://www.largeup.com/wp-content/uploads/2012/07/chubb-rock.jpg" - }, - { - "name": "CJ Fly", - "image_url": "https://images.rapgenius.com/02df360b384c97322368321affc6603c.600x338x73.gif" - }, - { - "name": "CL", - "image_url": "http://koogle.tv/static/media/uploads/news/010915_2ne1-cl_01.jpg" - }, - { - "name": "CL Smooth", - "image_url": "http://i2.cdn.turner.com/cnnnext/dam/assets/130502100438-08-90s-rappers-horizontal-large-gallery.jpg" - }, - { - "name": "Classified", - "image_url": "https://upload.wikimedia.org/wikipedia/commons/c/c5/2011_MuchMusic_Video_Awards_-_Classified.jpg" - }, - { - "name": "Clinton Sparks", - "image_url": "http://www.themusicgroupagency.com/Artist%20Bio_Pixs/DJ%20CLINTON%20SPARKS.jpg" - }, - { - "name": "Clyde Carson", - "image_url": "http://www2.pictures.zimbio.com/gi/Clyde+Carson+2012+BET+Awards+Celebrity+Gifting+h3makmUgLDQl.jpg" - }, - { - "name": "Cold 187um", - "image_url": "http://cps-static.rovicorp.com/3/JPG_400/MI0003/471/MI0003471422.jpg" - }, - { - "name": "Common", - "image_url": "http://i.huffpost.com/gen/1352726/thumbs/o-RAPPER-COMMON-facebook.jpg" - }, - { - "name": "Consequence", - "image_url": "http://cdn.cnwimg.com/wp-content/uploads/2013/01/consequence.jpg" - }, - { - "name": "Cool Breeze", - "image_url": "http://www4.pictures.zimbio.com/gi/2010+Vh1+Hip+Hop+Honors+Arrivals+6Kw4hn4nNHJl.jpg" - }, - { - "name": "Cool C", - "image_url": "http://bloximages.chicago2.vip.townnews.com/phillytrib.com/content/tncms/assets/v3/editorial/e/a3/ea3f0f99-c7b3-5a16-a498-43e00ef30007/5473f146bc971.image.jpg" - }, - { - "name": "Coolio", - "image_url": "http://1.bp.blogspot.com/_B1LlYh6iKqs/TEpHopMKndI/AAAAAAAACVQ/w5typW_-Cqo/s1600/coolio.jpg" - }, - { - "name": "Copywrite", - "image_url": "http://ifelicious.com/wp-content/uploads/2010/06/RapperCopywrite_614cap.jpg" - }, - { - "name": "Cormega", - "image_url": "http://www.iamhiphopmagazine.com/wp-content/uploads/2013/02/cormega_by_G_M_D_THREE_02.jpg" - }, - { - "name": "Cory Gunz", - "image_url": "http://www.aceshowbiz.com/images/wennpic/cory-gunz-set-music-video-fred-the-godson-01.jpg" - }, - { - "name": "Cordaro Stewart", - "image_url": "http://www.famousbirthdays.com/thumbnails/stewart-cordaro-large.jpg" - }, - { - "name": "Count Bass D", - "image_url": "https://massappeal.com/wp-content/uploads/2012/10/count-bass-d.jpg" - }, - { - "name": "The Coup", - "image_url": "http://media.philly.com/images/600*450/20121207_inq_wkpfea07-a.JPG" - }, - { - "name": "Craig Mack", - "image_url": "https://escobar300.files.wordpress.com/2011/08/craig-mack.jpg" - }, - { - "name": "Crime Boss", - "image_url": "http://www.angelfire.com/ok/midsouthhiphop/images/CRIME.jpg" - }, - { - "name": "Criminal Manne", - "image_url": "http://www.hip-hopvibe.com/wp-content/uploads/2013/02/Criminal-Manne.jpg" - }, - { - "name": "Crooked I", - "image_url": "http://zmldajoker.com/wp-content/uploads/2012/08/Crooked-I.jpg" - }, - { - "name": "Crucial Star", - "image_url": "http://www.allkpop.com/upload/2017/02/af_org/crucial-star_1486480774_af_org.jpg" - }, - { - "name": "Cupcakke", - "image_url": "https://lastfm-img2.akamaized.net/i/u/770x0/fd2ee4b462b471a02f1d47c6908aa414.jpg#fd2ee4b462b471a02f1d47c6908aa414" - }, - { - "name": "Currensy", - "image_url": "http://www.rapbasement.com/wp-content/uploads/2013/09/currensy.jpg" - }, - { - "name": "Curtiss King", - "image_url": "http://images.genius.com/d117bf90749090895c48b26d53585f3f.640x640x1.jpg" - }, - { - "name": "Cyhi the Prynce", - "image_url": "http://hiphop-n-more.com/wp-content/uploads/2016/02/cyhi-the-prynce-montreality-680x462.jpg" - }, - { - "name": "Del Tha Funkee Homosapien", - "image_url": "http://www.fagostore.com/shared/d/de988c79be500dce37c77c306ca4c1c7_hw600_width.jpg" - }, - { - "name": "Dr. Dre", - "image_url": "https://pennylibertygbow.files.wordpress.com/2012/02/drdre.gif" - }, - { - "name": "D'Angelo", - "image_url": "http://1.bp.blogspot.com/-eWbI_zHem7w/T05dilWoEqI/AAAAAAADZjw/w-bTjY7Ro1Q/s400/dangelo-1.jpg" - }, - { - "name": "D'banj", - "image_url": "http://cache2.asset-cache.net/gc/150994476-rapper-d-banj-is-photographed-for-the-gettyimages.jpg" - }, - { - "name": "D-Loc", - "image_url": "http://s3.amazonaws.com/rapgenius/YJsUar79REWtkxvOpCVw_d-loc.jpg" - }, - { - "name": "D-Nice", - "image_url": "http://img.wax.fm/releases/2386762/d-nice-call-me-d-nice-1523902.jpeg" - }, - { - "name": "D-Pryde", - "image_url": "https://upload.wikimedia.org/wikipedia/commons/b/ba/Plan_A_Merchandise_Promotion.png" - }, - { - "name": "The D.O.C.", - "image_url": "http://www.blackouthiphop.com/blog/wp-content/uploads/2011/01/The+DOC.jpg" - }, - { - "name": "Da Brat", - "image_url": "http://3.bp.blogspot.com/-2ptC5bvDzrc/Ti2nZQfRhKI/AAAAAAAARhA/Zq7JHQZPftU/s1600/Da-Brat-vibe1.jpg" - }, - { - "name": "Da$h", - "image_url": "http://s3.amazonaws.com/rapgenius/1362086799_Dah%20dashtweet.jpg" - }, - { - "name": "Da'unda'dogg", - "image_url": "https://images-na.ssl-images-amazon.com/images/I/61Scu%2BIkLYL._SL500_AA280_.jpg" - }, - { - "name": "Daddy-O", - "image_url": "http://m.i.uol.com.br/musica/2010/02/26/o-rapper-puffy-daddy-em-evento-em-nova-york-23012010-1267194075418_956x500.jpg" - }, - { - "name": "Dae Dae", - "image_url": "http://cdn.baeblemusic.com/bandcontent/dae_dae/dae_dae_bio-498.jpg" - }, - { - "name": "Damu the Fudgemunk", - "image_url": "http://berlin030.de/wp-content/uploads/2016/07/Damu-The-Fudgemunk.jpg" - }, - { - "name": "Dan Bull", - "image_url": "http://www.tubefilter.com/wp-content/uploads/2016/03/dan-bull.jpg" - }, - { - "name": "Dana Dane", - "image_url": "http://media-cache-ak0.pinimg.com/736x/14/57/5c/14575c78fb7f3e2e844ec15621acea74.jpg" - }, - { - "name": "Danny Boy", - "image_url": "https://upload.wikimedia.org/wikipedia/commons/thumb/1/1b/House_of_Pain-IMG_6536.jpg/1200px-House_of_Pain-IMG_6536.jpg" - }, - { - "name": "Danny Brown", - "image_url": "http://media.npr.org/assets/img/2012/08/27/rap-stream-db2_wide-2f0e39013c78f49f93129e2eef4c93e72b9c0eb1-s6-c30.jpg" - }, - { - "name": "Dappy", - "image_url": "http://madnews.files.wordpress.com/2010/05/dappy.jpg" - }, - { - "name": "Dave East", - "image_url": "http://www.rehabonlinemag.com/wp-content/uploads/2014/09/dave-east-cropped.jpg" - }, - { - "name": "Daveed Diggs", - "image_url": "http://theawesomer.com/photos/2016/05/Daveed-Diggs_fastest_rapper_on_broadway_t.jpg" - }, - { - "name": "David Banner", - "image_url": "http://www3.pictures.zimbio.com/gi/David+Banner+33rd+Annual+UNCF+Evening+Stars+ZUzQpuO0gb0l.jpg" - }, - { - "name": "David Dallas", - "image_url": "http://static.djbooth.net/pics-artist/daviddallas2.jpg" - }, - { - "name": "David Rush", - "image_url": "http://www.vegasnews.com/wp-content/uploads/davidrush_redcarpet-588.jpg" - }, - { - "name": "David Stones", - "image_url": "https://media.licdn.com/mpr/mpr/AAEAAQAAAAAAAAfNAAAAJGY2M2Q3MDY5LWE4MTYtNDgyMS1hMWZmLWEzOTMzOTFmYTQ4Mw.jpg" - }, - { - "name": "Daz Dillinger", - "image_url": "https://s3.amazonaws.com/rapgenius/filepicker%2FXvubZbsJQue813tNktYE_Daz_Dillinger.jpg" - }, - { - "name": "Dazzie Dee", - "image_url": "https://lh6.googleusercontent.com/-2BfKUpLN9OU/TX9xEi7kAUI/AAAAAAAACDY/tcA_AynfDM8/s400/1.jpg" - }, - { - "name": "Dee Barnes", - "image_url": "http://i.dailymail.co.uk/i/pix/2015/08/19/01/2B7A5D7E00000578-0-image-a-2_1439945563429.jpg" - }, - { - "name": "Dee Dee King", - "image_url": "http://4.bp.blogspot.com/_svH18z9S5bU/SnSk-Vq8-SI/AAAAAAAAAsc/dr_YK0SSeV0/s320/FRONT.jpg" - }, - { - "name": "Dej Loaf", - "image_url": "http://i1.wp.com/inyaearhiphop.com/wp-content/uploads/2016/03/rapper-says-dej-loaf-is-lying-about-her-sexuality.png" - }, - { - "name": "Delyric Oracle", - "image_url": "http://thebaybridged.com/wp-content/uploads/2017/04/Chance-The-Rapper-at-Oracle-Arena-by-Joshua-Huver-14.jpg" - }, - { - "name": "Del the Funky Homosapien", - "image_url": "http://s3.amazonaws.com/rapgenius/del_the_funky_homosapien-130.jpg" - }, - { - "name": "Demrick", - "image_url": "http://theindustrywest.com/wp-content/uploads/2013/03/demrick.jpg" - }, - { - "name": "Deniro Farrar", - "image_url": "https://assets.audiomack.com/deniro-farrar/5a30d8d7a0f778a2e84ec2ebb5992768.jpeg" - }, - { - "name": "Denzel Curry", - "image_url": "https://media2.fdncms.com/orlando/imager/u/blog/2488240/denzel_-_photo-jmp_web.jpg" - }, - { - "name": "Derek Minor", - "image_url": "http://thegospelguru.com/wp-content/uploads/2014/10/derek-minor-03.jpg" - }, - { - "name": "Desiigner", - "image_url": "https://i.ytimg.com/vi/nmCYm7NOWME/maxresdefault.jpg" - }, - { - "name": "Detail", - "image_url": "https://s3.amazonaws.com/hiphopdx-production/2011/03/detail_03-21-11-300x300.jpg" - }, - { - "name": "Deuce", - "image_url": "https://upload.wikimedia.org/wikipedia/commons/3/34/Deuce.jpg" - }, - { - "name": "Dev", - "image_url": "http://4.bp.blogspot.com/-DTmssduDnJk/TWfNLurcS1I/AAAAAAAAAjY/yNyTtcEEuM0/s1600/Dev-Bass_Down_Low-single_cover.jpg" - }, - { - "name": "Devin the Dude", - "image_url": "http://lahiphopevents.com/wp-content/uploads/2015/11/DEVIN-THE-DUDE.jpg" - }, - { - "name": "Devlin", - "image_url": "http://musiqexpo.files.wordpress.com/2012/08/devlin-rapper-freestyle-2012-e1343833573673.jpg" - }, - { - "name": "Diabolic", - "image_url": "http://upload.wikimedia.org/wikipedia/commons/a/a3/DIABOLIC.jpg" - }, - { - "name": "Diamond", - "image_url": "http://2.bp.blogspot.com/-Zk504yF-lDo/Tbo7Vy75dfI/AAAAAAAAuEQ/FtRTLC65dJ8/s1600/diamond-rapper-3.jpg" - }, - { - "name": "Diamond D", - "image_url": "http://nahright.com/wp-content/uploads/2013/12/DIAMOND-450x304.jpg" - }, - { - "name": "Diggy Simmons", - "image_url": "http://www4.pictures.zimbio.com/gi/Diggy+Simmons+2012+BET+Awards+Celebrity+Gifting+f_6FuVhNcnSl.jpg" - }, - { - "name": "Dillon Cooper", - "image_url": "http://s3.amazonaws.com/rapgenius/1352155921_Dillon-Cooper-1.jpg" - }, - { - "name": "Disco D", - "image_url": "https://i.ytimg.com/vi/-pzjJ0Gnwg0/maxresdefault.jpg" - }, - { - "name": "Disco King Mario", - "image_url": "http://hiphopandpolitics.files.wordpress.com/2013/01/disco-king-mario.jpg" - }, - { - "name": "Dizzee Rascal", - "image_url": "https://juelzone.files.wordpress.com/2012/01/dizzee_rascal_2.jpg" - }, - { - "name": "Dizzy Wright", - "image_url": "http://thedailyloud.com/wp-content/uploads/2013/07/dizzy-wright.jpeg" - }, - { - "name": "DJ Cash Money", - "image_url": "https://i.ytimg.com/vi/YjQi0oLbfT4/maxresdefault.jpg" - }, - { - "name": "DJ Casper", - "image_url": "http://assets.libsyn.com/content/1652870" - }, - { - "name": "DJ Clay", - "image_url": "http://cps-static.rovicorp.com/3/JPG_400/MI0003/162/MI0003162471.jpg" - }, - { - "name": "DJ Clue?", - "image_url": "https://hhvibe.files.wordpress.com/2010/01/dj-clue.jpg" - }, - { - "name": "DJ Drama", - "image_url": "http://upload.wikimedia.org/wikipedia/commons/thumb/2/28/DJ_Drama.jpg/1280px-DJ_Drama.jpg" - }, - { - "name": "DJ Felli Fel", - "image_url": "http://images.complex.com/complex/image/upload/c_limit,w_680/f_auto,fl_lossy,pg_1,q_auto/vdonhefsu1vbqzkokfvl.jpg" - }, - { - "name": "DJ Fuze", - "image_url": "http://api.ning.com/files/twryudDDeJeBWWFC5lWwmMNonB3Ue79CfQIrNYzlFuV2rTlpK65jKYOrbTFCSI3uKyKLXfsXo-QtftbzfM98VkeRbvf10eQZ/fuze.jpg" - }, - { - "name": "DJ Green Lantern", - "image_url": "http://hw-img.datpiff.com/m76a31fd/Various_Artists_Green_Lantern_Instrumentals-front-large.jpg" - }, - { - "name": "DJ Head", - "image_url": "http://www.eminem.pro/wp-content/uploads/2013/09/DJ-Head.jpg" - }, - { - "name": "DJ Hurricane", - "image_url": "http://www.vanndigital.com/wp-content/uploads/djhurricanecominoffcentralcoastvibemusicvideoclip.jpg" - }, - { - "name": "DJ Kay Slay", - "image_url": "http://assets.audiomack.com/paperchaserdotcom/1d35c76ce398acf2bba0bc11508f0fba.jpeg" - }, - { - "name": "DJ Khaled", - "image_url": "https://www.bestvideorap.com/wp-content/uploads/bscap0008(3).jpg" - }, - { - "name": "DJ Krush", - "image_url": "https://image.redbull.com/rbcom/010/2016-11-16/1331829659822_2/0010/1/1600/1067/1/dj-krush.jpg" - }, - { - "name": "DJ Mustard", - "image_url": "http://the5thelementmag.files.wordpress.com/2014/08/rapper-yg-and-dj-mustard.jpg" - }, - { - "name": "DJ Paul", - "image_url": "http://hiphoprapscene.com/wp-content/uploads/2016/08/dj-paul.jpg" - }, - { - "name": "DJ Pooh", - "image_url": "https://img.discogs.com/KHTPZVL6Pa1dtmD3PhfQvKz-eQg=/fit-in/300x300/filters:strip_icc():format(jpeg):mode_rgb():quality(40)/discogs-images/A-131630-1487348732-7573.jpeg.jpg" - }, - { - "name": "DJ Premier", - "image_url": "http://hiphopgoldenage.com/wp-content/uploads/2016/05/dj-premier-producer.jpg" - }, - { - "name": "DJ Quik", - "image_url": "http://dieenormousla.files.wordpress.com/2013/05/dj-quik.jpg" - }, - { - "name": "DJ Run", - "image_url": "https://c2.staticflickr.com/6/5022/5615202725_2e4e019896_b.jpg" - }, - { - "name": "DJ Screw", - "image_url": "http://screweduprecords.com/wp-content/uploads/2010/11/djSCREW5.jpg" - }, - { - "name": "DJ Shadow", - "image_url": "http://static.djbooth.net/pics-artist/dj-shadow.jpg" - }, - { - "name": "DJ Yella", - "image_url": "https://i.ytimg.com/vi/qaRqdspVNdo/maxresdefault.jpg" - }, - { - "name": "DMC", - "image_url": "http://i.huffpost.com/gen/1235615/images/o-RAPPER-DMC-facebook.jpg" - }, - { - "name": "DMX", - "image_url": "http://4hdwallpapers.com/wp-content/uploads/2013/04/Dmx-Rapper.jpg" - }, - { - "name": "Doap Nixon", - "image_url": "http://imagecache.blastro.com/timthumb.php/src=http%3A%2F%2Fimages.blastro.com%2Fimages%2Fartist_images%2Ffull%2Ffull_vinniepazvinniepazondoapnixon.jpg&w=610&h=457&zc=2&a=T" - }, - { - "name": "Doe B", - "image_url": "http://assets.noisey.com/content-images/contentimage/22592/Doe%20B%20featured%20image.jpg" - }, - { - "name": "Dok2", - "image_url": "http://static.askkpop.com/images/upload/18/ifrit1112/2016/05/12/Dok2-says-female-rappers-dontwrite-their-own-lyrics.jpg" - }, - { - "name": "Dolla", - "image_url": "http://www.streetgangs.com/wp-content/uploads/2009/05/20090529-dolla3.jpg" - }, - { - "name": "Dom Kennedy", - "image_url": "http://cdn.ambrosiaforheads.com/wp-content/uploads/2015/05/Rapper-Dom-Kennedy-Reveals-Album-Release-Date-MusicSnake-1024x576.jpg" - }, - { - "name": "Dominique Young Unique", - "image_url": "http://images.dailystar.co.uk/dynamic/45/photos/984000/620x/5327940d40cfe_18f12domm.jpg" - }, - { - "name": "Domino", - "image_url": "https://unitedgangs.files.wordpress.com/2013/09/domino.png" - }, - { - "name": "Domo Genesis", - "image_url": "http://media.gettyimages.com/photos/rapper-domo-genesis-of-mellowhigh-and-the-odd-future-collective-at-picture-id538084320" - }, - { - "name": "Don Cannon", - "image_url": "http://freddyo.com/wp-content/uploads/2013/07/don-cannon.jpg" - }, - { - "name": "Donnis", - "image_url": "http://www3.pictures.zimbio.com/gi/Donnis+Nokia+Lumia+900+Launches+Times+Square+ZmfXDpow5Jkl.jpg" - }, - { - "name": "Dorrough", - "image_url": "http://theboombox.com/files/2011/02/dorrough-200-020811.jpg" - }, - { - "name": "Doseone", - "image_url": "http://l7.alamy.com/zooms/d51db8efa60f4be5890e618183a22976/doseone-rapper-producer-poet-and-artist-performing-at-all-tomorrows-d7wtt5.jpg" - }, - { - "name": "Doug E. Fresh", - "image_url": "https://s-media-cache-ak0.pinimg.com/564x/d3/e9/47/d3e94702d1d9ad80b155eca525e91ce9.jpg" - }, - { - "name": "Doughbeezy", - "image_url": "http://www.brooklynvegan.com/img/indie/doughbeezy.jpg" - }, - { - "name": "Dr. Dre", - "image_url": "https://pennylibertygbow.files.wordpress.com/2012/02/drdre.gif" - }, - { - "name": "Drag-On", - "image_url": "https://ioneglobalgrind.files.wordpress.com/2016/03/14573801941016.png" - }, - { - "name": "Drake", - "image_url": "http://2.bp.blogspot.com/-PF-iHgXDePo/TrjTRk8SsfI/AAAAAAAAAvk/8j_OnnCRbLc/s1600/Drake_ThankMe_Publici_5000DPI300RGB550255.jpg" - }, - { - "name": "Dres", - "image_url": "http://images.complex.com/complex/image/upload/c_fill,g_center,w_1200/fl_lossy,pg_1,q_auto/cxinsw78yglijdcx7xfh.jpg" - }, - { - "name": "Dresta", - "image_url": "http://www.prlog.org/11403708-dresta.jpg" - }, - { - "name": "Drew Deezy", - "image_url": "https://upload.wikimedia.org/wikipedia/commons/thumb/f/f7/Photo-of-Drew-Deezy.jpg/220px-Photo-of-Drew-Deezy.jpg" - }, - { - "name": "Driicky Graham", - "image_url": "http://www3.pictures.zimbio.com/gi/2012+BET+Awards+Celebrity+Gifting+Suite+Day+s6iambQit8Kx.jpg" - }, - { - "name": "Droop-E", - "image_url": "http://images.complex.com/complex/image/upload/c_limit,w_680/f_auto,fl_lossy,pg_1,q_auto/yumgqwihf7wyqgrhbsjh.jpg" - }, - { - "name": "Dru Down", - "image_url": "http://s3.amazonaws.com/rapgenius/252244_106167516141612_7339951_n.jpg" - }, - { - "name": "Drumma Boy", - "image_url": "http://www.azquotes.com/public/pictures/authors/b2/29/b229ecbe96e3bf6858a880ad34c9dc21/55ee91fea5d8b_drumma_boy.jpg" - }, - { - "name": "Dumbfoundead", - "image_url": "http://onwardstate.com/wp-content/uploads/2013/12/DFD_15.jpg" - }, - { - "name": "Duncan Mighty", - "image_url": "http://howng.com/wp-content/uploads/2016/09/Duncan-Mighty.png" - }, - { - "name": "Eve", - "image_url": "https://upload.wikimedia.org/wikipedia/commons/5/53/Eve_2011_cropped.jpg" - }, - { - "name": "E-40", - "image_url": "http://www.diablomag.com/March-2016/Rapper-E-40-Malt-Liquor-Sluricane-Hurricane/DM1603_116_DIG800.jpg" - }, - { - "name": "E.D.I. Mean", - "image_url": "https://www.ballerstatus.com/wp-content/uploads/2015/07/edi.jpg" - }, - { - "name": "E-Sens", - "image_url": "https://images.rapgenius.com/9b9cf127a072d14eda839946d33e8b06.500x500x1.jpg" - }, - { - "name": "E.S.G.", - "image_url": "https://vignette4.wikia.nocookie.net/hip-hop-music/images/9/90/E.S.G..jpg/revision/latest" - }, - { - "name": "Earl Sweatshirt", - "image_url": "https://s3.amazonaws.com/rapgenius/1348551787_Earl-Sweatshirt.jpg" - }, - { - "name": "Easy Mo Bee", - "image_url": "https://bomboclap.files.wordpress.com/2012/01/easy-mo-bee2.jpg" - }, - { - "name": "Eazy-E", - "image_url": "http://3.bp.blogspot.com/-OCsagfqI7hc/Ui9BHy4S6xI/AAAAAAAAATk/H1DL94luEHg/s1600/Eazy+E+rapper.jpg" - }, - { - "name": "Ed O.G.", - "image_url": "http://2.bp.blogspot.com/_Wm5H75m6zhE/TL4201QyKgI/AAAAAAAAAm0/UnMY54i171c/s1600/ed.jpg" - }, - { - "name": "Edo Maajka", - "image_url": "http://www.ravnododna.com/wp-content/uploads/2013/06/edo-maajka01.jpg" - }, - { - "name": "El Da Sensei", - "image_url": "http://cdn.ticketfly.com/i/00/02/15/04/45-exl.jpg" - }, - { - "name": "El-P", - "image_url": "https://consequenceofsound.files.wordpress.com/2018/04/the-meadows-2017-ben-kaye-run-the-jewels-7.jpg" - }, - { - "name": "Elephant Man", - "image_url": "http://www.farfrommoscow.com/wp-content/uploads/2009/02/elephant-man.jpg" - }, - { - "name": "Elzhi", - "image_url": "https://images.rapgenius.com/727e2b38afd6daf878861a026a9b748f.1000x667x1.jpg" - }, - { - "name": "Emcee N.I.C.E.", - "image_url": "https://upload.wikimedia.org/wikipedia/commons/9/94/Emcee_N.I.C.E..JPG" - }, - { - "name": "Eminem", - "image_url": "http://www.dopeshxtdaily.com/wp-content/uploads/2018/04/Eminem-Framed-3.jpg" - }, - { - "name": "Eric Biddines", - "image_url": "http://images1.miaminewtimes.com/imager/u/745xauto/9106282/eric-biddines-elliot-liss.jpg" - }, - { - "name": "Erick Arc Elliott", - "image_url": "http://www4.pictures.zimbio.com/gi/Erick+Elliott+Coachella+Valley+Music+Arts+DCw4bFEm-O4l.jpg" - }, - { - "name": "Erick Sermon", - "image_url": "https://s-media-cache-ak0.pinimg.com/736x/5a/12/e1/5a12e16dbad591b63da7eef19e59a11d.jpg" - }, - { - "name": "Eric Stanley", - "image_url": "https://i.scdn.co/image/0b3f8ab808d49b6c4b8a7d70a5bedf399a105377" - }, - { - "name": "Esham", - "image_url": "https://media2.fdncms.com/metrotimes/imager/mayor-esham-what/u/slideshow/2229545/esham_press3jpg" - }, - { - "name": "Esoteric", - "image_url": "https://i.ytimg.com/vi/Ekzu8upcHo0/maxresdefault.jpg" - }, - { - "name": "Eve", - "image_url": "https://upload.wikimedia.org/wikipedia/commons/5/53/Eve_2011_cropped.jpg" - }, - { - "name": "Everlast", - "image_url": "http://www.latimes.com/resizer/ON_hgfI8nrImP_htAnzUnEpLUBE=/1400x0/arc-anglerfish-arc2-prod-tronc.s3.amazonaws.com/public/OUCVGT32CRHGVA3VJGMJB2PSC4.jpg" - }, - { - "name": "Evidence", - "image_url": "http://www.brutalmusic.org/wp-content/uploads/2012/02/evidence-rapper.jpg" - }, - { - "name": "Eyedea", - "image_url": "http://www.rapgrid.com/sites/default/files/rapper-photo/eyedea.jpg" - }, - { - "name": "Ghostface Killah", - "image_url": "https://fanart.tv/fanart/music/3b39abeb-0064-4eed-9ddd-ee47a45c54cb/artistbackground/ghostface-killah-5053b6c4a440f.jpg" - }, - { - "name": "Fabolous", - "image_url": "http://www.maybachmedia.com/wp-content/uploads/2018/03/emily-b-and-fabolous.jpg" - }, - { - "name": "Fabri Fibra", - "image_url": "http://static.nanopress.it/nanopress/fotogallery/843X0/80541/fabri-fibra-tatuaggi.jpg" - }, - { - "name": "Fam-Lay", - "image_url": "http://s3.amazonaws.com/rapgenius/1369303498_FamLay.jpg" - }, - { - "name": "Famous Dex", - "image_url": "http://16762-presscdn-0-89.pagely.netdna-cdn.com/wp-content/uploads/2016/09/IMG_6195.jpg" - }, - { - "name": "Fashawn", - "image_url": "http://portlandmetrolive.com/wp-content/uploads/2015/02/Rapper-Fashawn-comes-to-Peter%E2%80%99s-Room.jpg" - }, - { - "name": "Fat Joe", - "image_url": "http://assets.nydailynews.com/polopoly_fs/1.1437632.1377553895!/img/httpImage/image.jpg_gen/derivatives/article_970/83094393.jpg" - }, - { - "name": "Fat Pat", - "image_url": "http://s3.amazonaws.com/rapgenius/1363587723_Fat%20Pat%20fatpat.jpg" - }, - { - "name": "Fat Trel", - "image_url": "https://ioneglobalgrind.files.wordpress.com/2013/11/screen-shot-2013-11-07-at-3-48-54-pm.png" - }, - { - "name": "Fatboi", - "image_url": "https://www.sohh.com/wp-content/uploads/Fatboy-SSE.jpg" - }, - { - "name": "Father MC", - "image_url": "http://www.rapartists.com/_files/pictures/full/618_fathermc.jpg" - }, - { - "name": "Fatman Scoop", - "image_url": "http://d.ibtimes.co.uk/en/full/1577170/fatman-scoop.jpg" - }, - { - "name": "Fergie", - "image_url": "http://4everstatic.com/pictures/674xX/people/musicians/fergie,-singer,-music-134929.jpg" - }, - { - "name": "Fetty Wap", - "image_url": "http://image1.redbull.com/rbcom/010/2015-05-07/1331721730967_2/0010/1/1500/1000/2/fetty-wap.jpg" - }, - { - "name": "Fiend", - "image_url": "http://i1169.photobucket.com/albums/r502/ThaFixxDotCom/fiend.jpg" - }, - { - "name": "FLAME", - "image_url": "http://thefrontrowreport.com/wp-content/uploads/2012/08/flame2.jpg" - }, - { - "name": "Flavor Flav", - "image_url": "http://assets.nydailynews.com/polopoly_fs/1.1185779.1350499171!/img/httpImage/image.jpg_gen/derivatives/landscape_635/flavor-flav.jpg" - }, - { - "name": "Flavour N'abania", - "image_url": "http://www.naijaolofofo.com/wp-content/uploads/2016/05/flavour.jpg" - }, - { - "name": "Flo Rida", - "image_url": "https://bossip.files.wordpress.com/2014/07/flo-rida.jpg" - }, - { - "name": "Flying Lotus", - "image_url": "http://exclaim.ca/images/flylo10.jpg" - }, - { - "name": "Focus...", - "image_url": "http://cdn5.hiphoplead.com/static/2011/07/focus.jpg" - }, - { - "name": "Fonzworth Bentley", - "image_url": "https://i.ytimg.com/vi/PKT8_mXk1-g/maxresdefault.jpg" - }, - { - "name": "Fort Minor", - "image_url": "http://4.bp.blogspot.com/_VVVnguvXP6s/S8tfaGjCefI/AAAAAAAAA0c/SfnVfFFEgjs/s1600/Fort%2BMinor.jpg" - }, - { - "name": "Foxx", - "image_url": "https://hiphollywood.com/wp-content/uploads/2018/04/946479462.jpg" - }, - { - "name": "Foxy Brown", - "image_url": "http://static.vibe.com/files/2017/03/foxy-brown-endorses-donald-trump-640x476-1488571302-640x476.jpg" - }, - { - "name": "Frank Ocean", - "image_url": "http://static.vibe.com/files/2017/03/frank-ocean-rapper-vibe-1489602237.jpg" - }, - { - "name": "Frankie J", - "image_url": "http://static.djbooth.net/pics-artist/frankiej.jpg" - }, - { - "name": "Frayser Boy", - "image_url": "http://trapsntrunks.com/wp-content/uploads/2017/07/motives-672x672.jpg" - }, - { - "name": "Freak Nasty", - "image_url": "http://cps-static.rovicorp.com/3/JPG_400/MI0003/827/MI0003827380.jpg" - }, - { - "name": "Freaky Tah", - "image_url": "http://upload.wikimedia.org/wikipedia/en/9/9b/Freaky_Tah.jpg" - }, - { - "name": "Fred Durst", - "image_url": "http://trendliest.files.wordpress.com/2008/07/durst-fred-photo-xl-fred-durst-6209268.jpg" - }, - { - "name": "Freddie Foxxx", - "image_url": "http://grandgood.com/wordpress/wp-content/uploads/2008/06/freddie-foxxx.jpg" - }, - { - "name": "Freddie Gibbs", - "image_url": "http://www.networth2013.com/wp-content/uploads/2013/07/Frddie+Gibbs+VIP+Area+Governors+Ball+Day+3+p6VBOlpeThel.jpg" - }, - { - "name": "Fredo Santana", - "image_url": "http://www.rapbasement.com/wp-content/uploads/2014/11/fredosantana.jpg" - }, - { - "name": "Fredro Starr", - "image_url": "http://ambrosiaforheads.com/wp-content/uploads/2014/02/Fredro-Starr-Sticky-Fingaz-610x400.jpg" - }, - { - "name": "Fredwreck", - "image_url": "http://www.beatmakingvideos.com/sites/default/files/producer_foto/fredwreck.jpg" - }, - { - "name": "Free", - "image_url": "http://www.whosampled.com/static/artist_images_200/lr2929_2010525_114148297125.jpg" - }, - { - "name": "Freekey Zekey", - "image_url": "https://1.bp.blogspot.com/-TSFhXxYHSZI/V8kVNFnN7TI/AAAAAAAAmJ8/GiIVH63gXwsxVIbWGZlYeVep9JhsPYgHQCK4B/w1200-h630-p-k-nu/freekey-zekey-net-worth.jpg" - }, - { - "name": "Freeway", - "image_url": "http://www.5pillarz.com/wp-content/uploads/2014/10/freeway1.jpg" - }, - { - "name": "French Montana", - "image_url": "https://lasentinel.net/wp-content/uploads/sites/5/2016/06/ENT-its-a-rap-french-montana2.jpg" - }, - { - "name": "Frenkie", - "image_url": "http://cps-static.rovicorp.com/3/JPG_500/MI0003/596/MI0003596298.jpg" - }, - { - "name": "Fresh Kid Ice", - "image_url": "https://zayzay.com/wp-content/uploads/2017/07/Rapper-Fresh-Kid-Ice-Of-%E2%80%982-Live-Crew%E2%80%99-Dead-At-53.jpg" - }, - { - "name": "Froggy Fresh", - "image_url": "http://i.ytimg.com/vi/4feIwig2AtA/0.jpg" - }, - { - "name": "Frost", - "image_url": "http://askkissy.com/wp-content/uploads/2015/09/EAZY-E-RAPPER-FROST.jpeg" - }, - { - "name": "Full Blooded", - "image_url": "https://i.skyrock.net/5301/5285301/pics/235349117_small.jpg" - }, - { - "name": "Funkmaster Flex", - "image_url": "http://www.rapbasement.com/wp-content/uploads/2014/04/6a00d8341c4fe353ef01156ff9e8f1970c-800wi.jpg" - }, - { - "name": "Future", - "image_url": "http://www.thefamouspeople.com/profiles/images/future-1.jpg" - }, - { - "name": "Grandmaster Caz", - "image_url": "https://upload.wikimedia.org/wikipedia/commons/thumb/f/fc/Grandmastercaz.jpg/1200px-Grandmastercaz.jpg" - }, - { - "name": "Grandmaster Flash", - "image_url": "https://s-media-cache-ak0.pinimg.com/736x/34/60/41/346041acd20fbe40c44b97a91c9a2a80.jpg" - }, - { - "name": "G-Dragon", - "image_url": "http://www.soompi.com/wp-content/uploads/a/t/7m/356158/356158.jpg" - }, - { - "name": "G-Eazy", - "image_url": "http://i.dailymail.co.uk/i/newpix/2018/04/14/16/4B18913E00000578-5615765-Cute_couple_The_New_Jersey_native_is_dating_rapper_G_Eazy_with_t-a-5_1523718500475.jpg" - }, - { - "name": "G. Dep", - "image_url": "http://assets.nydailynews.com/polopoly_fs/1.473448.1314633586!/img/httpImage/image.jpg_gen/derivatives/article_970/alg-g-dep-portrait-jpg.jpg" - }, - { - "name": "G Herbo", - "image_url": "http://www.datwav.com/wp-content/uploads/2017/04/G_Herbo_In_Studio-1024x683.jpg" - }, - { - "name": "Gaeko", - "image_url": "http://www.weekendnotes.co.uk/im/002/07/geko-rapper-tour-birmingham-academy-21.jpg" - }, - { - "name": "The Game", - "image_url": "http://images2.fanpop.com/images/photos/3600000/The-Game-the-game-rapper-3618562-1024-768.jpg" - }, - { - "name": "Gang Starr", - "image_url": "http://www.billboard.com/files/styles/promo_650/public/stylus/106631-Gangstarr-guru-617_409.jpg" - }, - { - "name": "Gangsta Blac", - "image_url": "http://purple-drank.com/wp-content/uploads/2011/06/Gangsta-Blac-Return-Of-The-Gangsta.jpg" - }, - { - "name": "Gangsta Boo", - "image_url": "http://live.drjays.com/wp-content/uploads/2009/12/43439_lg.jpg" - }, - { - "name": "Ganksta N-I-P", - "image_url": "http://www.ugs4life.com/wp-content/uploads/2014/06/ganxsta-nip.png" - }, - { - "name": "Gary", - "image_url": "http://media-cache-ec0.pinimg.com/736x/1e/52/6c/1e526ce56e4e7a0d8ce5b588faa49102.jpg" - }, - { - "name": "Gee Money", - "image_url": "https://amonpointtv.com/wp-content/uploads/2017/09/ABCD1505228816.jpg" - }, - { - "name": "General Woo", - "image_url": "https://natasavajagic.files.wordpress.com/2008/11/dsc044672.jpg" - }, - { - "name": "Ghostface Killah", - "image_url": "https://fanart.tv/fanart/music/3b39abeb-0064-4eed-9ddd-ee47a45c54cb/artistbackground/ghostface-killah-5053b6c4a440f.jpg" - }, - { - "name": "Giggs", - "image_url": "http://4.bp.blogspot.com/-NLMOcLtTIgs/Tbidhpi_LpI/AAAAAAAAANY/4gL5Wzj4f1s/s1600/mytypeofhype_giggs_rapper-thumb.jpg" - }, - { - "name": "Gilbere Forte", - "image_url": "http://famousfamilybirthdaysbiofacts.com/BirthDayPersonality/Gilbere-Forte-Rapper-birhday-image.jpg" - }, - { - "name": "Glasses Malone", - "image_url": "http://siccness.net/wp/wp-content/uploads/2012/11/glasses-malone.jpg" - }, - { - "name": "GLC", - "image_url": "https://d.ibtimes.co.uk/en/full/1396199/mike-glc.jpg" - }, - { - "name": "Goldie Loc", - "image_url": "https://s-media-cache-ak0.pinimg.com/736x/88/03/67/8803675d722cc75dd4eb071ea1b9809d.jpg" - }, - { - "name": "GoldLink", - "image_url": "http://unbiasedwriter.com/wp-content/uploads/2014/10/GoldLink-rapper.jpg" - }, - { - "name": "Gorilla Zoe", - "image_url": "https://upload.wikimedia.org/wikipedia/commons/thumb/a/a6/Gorilla_zoe_picture.jpg/1200px-Gorilla_zoe_picture.jpg" - }, - { - "name": "Grafh", - "image_url": "http://static.djbooth.net/pics-artist/grafh.jpg" - }, - { - "name": "Grand Puba", - "image_url": "http://images.complex.com/complex/image/upload/t_article_image/akb1hkm8uzgscqwucuan.jpg" - }, - { - "name": "Grandmaster Caz", - "image_url": "https://upload.wikimedia.org/wikipedia/commons/thumb/f/fc/Grandmastercaz.jpg/1200px-Grandmastercaz.jpg" - }, - { - "name": "Grandmaster Flash", - "image_url": "https://s-media-cache-ak0.pinimg.com/736x/34/60/41/346041acd20fbe40c44b97a91c9a2a80.jpg" - }, - { - "name": "Greydon Square", - "image_url": "https://upload.wikimedia.org/wikipedia/commons/2/2e/TAM_6_-_Greydon_Square.jpg" - }, - { - "name": "Grieves", - "image_url": "http://thissongissick.com/blog/wp-content/uploads/2011/05/Grieves-Rapper-Bloody-Poetry.jpg" - }, - { - "name": "Gucci Mane", - "image_url": "https://www.amlu.com/wp-content/uploads/2018/04/rapper-gucci-mane-skips-three-year-waiting-list-and-gets-the-first-ferrari-812-superfast1.jpg" - }, - { - "name": "Gudda Gudda", - "image_url": "http://favimages.com/wp-content/uploads/2012/08/rapper-gudda-gudda-singer-celebrity-rap.jpg" - }, - { - "name": "Guerilla Black", - "image_url": "http://i1-news.softpedia-static.com/images/news2/Rapper-Guerilla-Black-Arrested-for-Buying-and-Using-Stolen-Payment-Card-Details-2.jpg" - }, - { - "name": "Guilty Simpson", - "image_url": "http://favimages.com/wp-content/uploads/2012/08/rapper-guilty-simpson-star-celebrity-rap.jpg" - }, - { - "name": "Gunplay", - "image_url": "http://www.passionweiss.com/wp-content/uploads/2015/07/gunplay-press2.jpg" - }, - { - "name": "Guru", - "image_url": "http://upload.wikimedia.org/wikipedia/commons/7/72/Guru_%28rapper%29.jpg" - }, - { - "name": "GZA", - "image_url": "http://api.ning.com/files/Cr*mNN-mhgZVTnMO1Ax5ew2lFizHAFllT8mDVu1iYmXBixU5MNOvS6DzmIs82Yuhin8A2u0Hpk48uLC2goXSr74xqMAwQK5C/GZAMetro.jpg" - }, - { - "name": "Half a Mill", - "image_url": "http://www.kingsizemagazine.se/wp-content/uploads/2013/10/half-a-mill-S.jpg" - }, - { - "name": "Hard Kaur", - "image_url": "http://www.prokerala.com/news/photos/imgs/800/singer-rapper-hard-kaur-during-an-interview-at-440863.jpg" - }, - { - "name": "Hasan Salaam", - "image_url": "http://api.ning.com/files/2VGrzzXedu3*LX5VRoIFBZeWe8qqGJjpAxzb0ZR9giaHZEvLo8d8B7mpIcLrLmH5gmcJt8aUpyPHr2aVLVFxrlylSJByg*eO/HasanSalaam.jpg" - }, - { - "name": "Havoc", - "image_url": "http://www.hip-hopvibe.com/wp-content/uploads/2012/01/Prodigy.jpg" - }, - { - "name": "Heavy D", - "image_url": "http://www.guttaworld.com/wp-content/uploads/2011/12/obit-heavy-d.jpg" - }, - { - "name": "Hefe Heetroc", - "image_url": "https://1.bp.blogspot.com/-nmJ_Z8xC9Wg/V_GjdMvY_fI/AAAAAAAAAyQ/9hfGLMDGemgyOsjY5mM3XW9ul-3WCpGnQCLcB/s640/20160223_1125571.jpg" - }, - { - "name": "Heize", - "image_url": "http://cdn.koreaboo.com/wp-content/uploads/2016/12/heize.jpg" - }, - { - "name": "Hemlock Ernst", - "image_url": "http://static.stereogum.com/uploads/2015/09/rappingfutureislands1.png" - }, - { - "name": "Hi-C", - "image_url": "http://unitedgangs.files.wordpress.com/2013/11/hic_feb2005a.jpg" - }, - { - "name": "Hi-Tek", - "image_url": "http://thamidwest.com/wp-content/uploads/Hi-Tek.jpg" - }, - { - "name": "Hit-Boy", - "image_url": "http://3.bp.blogspot.com/-pzifRQd37EQ/TwaMSQmoOfI/AAAAAAAAA7s/YUaDMqmATM4/s1600/whiterapper.jpg" - }, - { - "name": "Hittman", - "image_url": "http://s3.amazonaws.com/hiphopdx-production/2014/11/Hittman_11-13-2014.jpg" - }, - { - "name": "Hodgy Beats", - "image_url": "http://www.rapburger.com/wp-content/uploads/2013/07/hodgy-beats-Godsss-free-download-1024x682.jpg" - }, - { - "name": "Honey Cocaine", - "image_url": "http://swaggarightentertainment.com/wp-content/uploads/2014/10/rapper-honey-cocaine.jpeg" - }, - { - "name": "Hoodie Allen", - "image_url": "http://conversationsabouther.net/wp-content/uploads/2014/10/Hoodie-Allen.jpg" - }, - { - "name": "Hopsin", - "image_url": "http://www.stasheverything.com/wp-content/uploads/2012/10/Hopsin-banner.jpg" - }, - { - "name": "Hot Dollar", - "image_url": "http://www.aceshowbiz.com/images/news/00010456.jpg" - }, - { - "name": "Huey", - "image_url": "http://images5.fanpop.com/image/photos/30200000/Huey-huey-rapper-30242374-1024-768.jpg" - }, - { - "name": "Hurricane Chris", - "image_url": "https://upload.wikimedia.org/wikipedia/commons/c/c8/Hurricane_Chris.jpg" - }, - { - "name": "Hurricane G", - "image_url": "https://i.ytimg.com/vi/3pTO0lsjzco/maxresdefault.jpg" - }, - { - "name": "Hush", - "image_url": "https://www.gannett-cdn.com/-mm-/a691de1d2241d7baf1c60d5d31346451d4cd3669/c=0-236-1360-1004&r=x633&c=1200x630/local/-/media/2015/06/22/DetroitFreePress/DetroitFreePress/635705966302572023-Hush.jpg" - }, - { - "name": "Hussein Fatal", - "image_url": "https://pmchollywoodlife.files.wordpress.com/2015/07/hussein-fatal-rapper-dies-at-38-car-accident-lead.jpg" - }, - { - "name": "Ice Cube", - "image_url": "http://www.ultimatemovierankings.com/wp-content/uploads/2016/04/ice-cube-11111.jpg" - }, - { - "name": "I-20", - "image_url": "http://1.bp.blogspot.com/_IXe2z8hItAg/TBxH_T19eQI/AAAAAAAABX0/dFXw4HYqdqI/s1600/i20_self.jpg" - }, - { - "name": "Iamsu!", - "image_url": "http://media.gettyimages.com/photos/rapper-iamsu-arrives-at-ditch-fridays-at-palms-pool-dayclub-on-may-13-picture-id531300532" - }, - { - "name": "Ice Cube", - "image_url": "http://www.ultimatemovierankings.com/wp-content/uploads/2016/04/ice-cube-11111.jpg" - }, - { - "name": "Ice-T", - "image_url": "http://www.ireport.cz/images/ireport/clanky/Ice_T/ice-t.jpg" - }, - { - "name": "IDK", - "image_url": "https://static.highsnobiety.com/wp-content/uploads/2017/07/27163702/jay-idk-idk-interview-01-480x320.jpg" - }, - { - "name": "Iggy Azalea", - "image_url": "http://www.maybachmedia.com/wp-content/uploads/2018/04/Iggy-Azalea-Tyga.jpg" - }, - { - "name": "IHeartMemphis", - "image_url": "https://memphisrap.com/mr-uploads/2015/12/iLoveMemphis-rapper.jpg" - }, - { - "name": "Ill Bill", - "image_url": "https://upload.wikimedia.org/wikipedia/commons/thumb/c/c3/Ill_Bill.jpg/1200px-Ill_Bill.jpg" - }, - { - "name": "Illmind", - "image_url": "http://media.charged.fm/media/file_5429de95c0e71.jpg" - }, - { - "name": "ILoveMakonnen", - "image_url": "http://s3-ak.buzzfeed.com/static/2014-08/13/14/enhanced/webdr11/enhanced-8028-1407955933-1.jpg" - }, - { - "name": "Immortal Technique", - "image_url": "http://www.digitaljournal.com/img/7/5/0/1/1/0/i/1/5/5/o/3534639765_39c888714b_b.jpg" - }, - { - "name": "Imran Khan", - "image_url": "http://bollyspice.com/wp-content/uploads/2014/12/14dec_Imran-Khan-singer.jpg" - }, - { - "name": "Indo G", - "image_url": "http://purple-drank.com/wp-content/uploads/2013/03/Indo-G-New.jpg" - }, - { - "name": "Inspectah Deck", - "image_url": "http://favimages.com/wp-content/uploads/2012/08/rapper-inspectah-deck-celebrity-jacket-photo.jpg" - }, - { - "name": "Isaiah Rashad", - "image_url": "http://okp-cdn.okayplayer.com/wp-content/uploads/2014/06/xxl-freshman-2014-cypher-drama-cannon-lead.jpg" - }, - { - "name": "Iyanya", - "image_url": "https://4.bp.blogspot.com/-GeL-JX7MH2o/V4NryaxgfEI/AAAAAAAAIuw/KrtCr4Tp3cskgDG7QHHJ6M-Gvaz7a5AogCLcB/w1200-h630-p-k-no-nu/Iyanya.JPG" - }, - { - "name": "Iyaz", - "image_url": "http://muzicjunkies.com/wp-content/uploads/2014/10/slim2.jpg" - }, - { - "name": "Jay-Z", - "image_url": "http://th07.deviantart.net/fs70/PRE/f/2011/042/6/d/rapper___jay_z_by_rwpike-d39aevp.jpg" - }, - { - "name": "Kanye West", - "image_url": "http://assets.nydailynews.com/polopoly_fs/1.3936461.1523887222!/img/httpImage/image.jpg_gen/derivatives/article_750/604289829cc00020-kanye-west.jpg" - }, - { - "name": "Kendrick Lamar", - "image_url": "https://stupiddope.com/wp-content/uploads/2018/04/kendrick-lamar-damn-2018-pulitzer-prize-first-rapper-music.jpg" - }, - { - "name": "KRS-One", - "image_url": "http://ifihavent.files.wordpress.com/2007/07/krs_blaze02991.jpg" - }, - { - "name": "J Dilla", - "image_url": "http://www.stonesthrow.com/images/2012/DILLA_2.jpg" - }, - { - "name": "J-Diggs", - "image_url": "http://www.sierrasun.com/wp-content/uploads/2016/09/JDiggs-SSU-011415-1-244x325.jpg" - }, - { - "name": "J-Kwon", - "image_url": "http://hiphop-n-more.com/wp-content/uploads/2010/03/j-kwon-s02.jpg" - }, - { - "name": "J-Son", - "image_url": "https://i.ytimg.com/vi/SjV2lPTUB2o/maxresdefault.jpg" - }, - { - "name": "J. Cole", - "image_url": "http://www.rap-up.com/app/uploads/2018/04/j-cole-kod-cover.jpg" - }, - { - "name": "J. Stalin", - "image_url": "http://siccness.net/wp/wp-content/uploads/2015/10/stalin.jpg" - }, - { - "name": "J. Valentine", - "image_url": "http://cache2.asset-cache.net/gc/56850135-rapper-ll-cool-j-delivers-valentines-day-gettyimages.jpg" - }, - { - "name": "J.I.D", - "image_url": "http://www.musicfesttv.com/wp-content/uploads/2017/02/J.-Cole-Sign039s-Atlanta-Rapper-J.I.D.-To-Dreamville-1200x600.png" - }, - { - "name": "J.R. Rotem", - "image_url": "http://m2.paperblog.com/i/56/567622/j-r-rotem-beluga-heights-artist-of-the-week-L-9apUCg.jpeg" - }, - { - "name": "J.R. Writer", - "image_url": "http://static.djbooth.net/pics-artist/jrwriter.jpg" - }, - { - "name": "Ja Rule", - "image_url": "http://fanart.tv/fanart/music/b504f625-4ef6-4a5a-81e8-870a61e8dc9c/artistbackground/ja-rule-503dd1b16fcfa.jpg" - }, - { - "name": "Jack Parow", - "image_url": "http://sunelia89.files.wordpress.com/2012/11/parow_duck-manfred-werner-hr.jpg" - }, - { - "name": "The Jacka", - "image_url": "http://static.stereogum.com/uploads/2015/02/The-Jacka.jpg" - }, - { - "name": "Jackie Hill-Perry", - "image_url": "http://media.washtimes.com.s3.amazonaws.com/media/image/2014/10/27/10272014_jackie-3-color8201.jpg" - }, - { - "name": "Jadakiss", - "image_url": "https://hhvibe.files.wordpress.com/2010/02/jadakiss.jpg" - }, - { - "name": "Jaden Smith", - "image_url": "http://i.dailymail.co.uk/i/pix/2013/02/28/article-2285761-1856EF78000005DC-756_634x493.jpg" - }, - { - "name": "Jae Millz", - "image_url": "http://theboombox.com/files/2010/05/jae-millz-200ak051910.jpg" - }, - { - "name": "Jahlil Beats", - "image_url": "http://www3.pictures.zimbio.com/gi/Jahlil+Beats+BET+Hip+Hop+Awards+2012+Red+Carpet+8GcDsHs2IfRl.jpg" - }, - { - "name": "Jamie Madrox", - "image_url": "https://upload.wikimedia.org/wikipedia/commons/thumb/3/39/Jamie_Madrox_at_the_Abominationz_Tour.JPG/1200px-Jamie_Madrox_at_the_Abominationz_Tour.JPG" - }, - { - "name": "Jahred", - "image_url": "http://www.sportsgraphs.com/1314rampage4.jpg" - }, - { - "name": "Jake Miller", - "image_url": "http://thetriangle.org/wp-content/uploads/2013/11/Jake-Miller_Edgar-Estevez_WEB.jpg" - }, - { - "name": "Jake One", - "image_url": "http://www.nodfactor.com/wp-content/uploads/2013/11/Jake-One-Acid-Rain.png" - }, - { - "name": "Jam Master Jay", - "image_url": "http://ww3.hdnux.com/photos/10/27/41/2193534/5/920x920.jpg" - }, - { - "name": "Jamal", - "image_url": "http://assets.nydailynews.com/polopoly_fs/1.421164.1314528333!/img/httpImage/image.jpg_gen/derivatives/article_970/amd-jamal-woolard-jpg.jpg" - }, - { - "name": "Jamal Woolard", - "image_url": "http://assets.nydailynews.com/polopoly_fs/1.421164.1314528333!/img/httpImage/image.jpg_gen/derivatives/article_970/amd-jamal-woolard-jpg.jpg" - }, - { - "name": "Jamie Foxx", - "image_url": "https://hiphollywood.com/wp-content/uploads/2018/04/946479462.jpg" - }, - { - "name": "Jarren Benton", - "image_url": "https://ioneglobalgrind.files.wordpress.com/2015/02/photo-credit-funk-volume-extralarge_1408660385558.jpg" - }, - { - "name": "Jay Burna", - "image_url": "http://jamsphere.com/wp-content/uploads/2014/12/jay-burna-300.jpg" - }, - { - "name": "Jay Critch", - "image_url": "https://cdn.spinrilla.com/users/11645663/original/46d961baf0.jpg" - }, - { - "name": "Jay Electronica", - "image_url": "http://i.dailymail.co.uk/i/pix/2012/06/09/article-2156691-13845E1F000005DC-865_634x809.jpg" - }, - { - "name": "Jay Park", - "image_url": "https://s-media-cache-ak0.pinimg.com/736x/76/2a/65/762a65ec5adc664e7e7edc3c7f3ce526.jpg" - }, - { - "name": "Jay Rock", - "image_url": "http://rapsandhustles.com/wp-content/uploads/2012/04/jayrock.jpeg" - }, - { - "name": "Jay Z", - "image_url": "http://www.streetgangs.com/wp-content/uploads/2010/06/jay-z.jpg" - }, - { - "name": "Jayo Felony", - "image_url": "http://unitedgangs.files.wordpress.com/2013/12/jayo_felony.jpg" - }, - { - "name": "Jaz-O", - "image_url": "https://upload.wikimedia.org/wikipedia/commons/1/1c/Jaz-O--mika.jpg" - }, - { - "name": "Jazz Cartier", - "image_url": "http://respect-mag.com/wp-content/uploads/2018/04/1C6378F4-D2A9-4F48-93E8-AA47A154E54E.jpeg" - }, - { - "name": "Jazze Pha", - "image_url": "http://media.gettyimages.com/photos/music-producer-jazze-pha-rapper-heavy-d-and-dj-toomp-attend-tis-akoo-picture-id127898169" - }, - { - "name": "Jean Grae", - "image_url": "http://www.jayforce.com/wp-content/uploads/2011/03/jeangreen.jpg" - }, - { - "name": "Jeremiah Jae", - "image_url": "http://www.brooklynvegan.com/img/as/jeremiah-jae.jpg" - }, - { - "name": "Jeremih", - "image_url": "http://i2.wp.com/therighthairstyles.com/wp-content/uploads/2013/12/jeremih.jpg" - }, - { - "name": "Jermaine Dupri", - "image_url": "http://media.gettyimages.com/photos/rapper-jermaine-dupri-poses-for-photos-at-the-swissotel-in-chicago-picture-id145014316" - }, - { - "name": "Jeru the Damaja", - "image_url": "https://upload.wikimedia.org/wikipedia/commons/thumb/c/c9/Out4Fame-Festival_2016_-_Jeru_the_Damaja.JPG/1200px-Out4Fame-Festival_2016_-_Jeru_the_Damaja.JPG" - }, - { - "name": "Jewell", - "image_url": "http://www.celebpronto.com/wp-content/uploads/2010/08/jewel11.jpg" - }, - { - "name": "Jibbs", - "image_url": "http://rapdirt.com/images/misc/Jibbs_0306f.jpg" - }, - { - "name": "Jim Jones", - "image_url": "http://www.networth2013.com/wp-content/uploads/2013/08/Jim-Jones-Rapper.jpg" - }, - { - "name": "Jim Jonsin", - "image_url": "http://www.networth2013.com/wp-content/uploads/2013/08/Jim-Jones-Rapper.jpg" - }, - { - "name": "Jipsta", - "image_url": "http://getoutmag.com/wp-content/uploads/2011/10/jipsta.jpg" - }, - { - "name": "Jme", - "image_url": "http://conversationsabouther.net/wp-content/uploads/2015/09/Jme.jpg" - }, - { - "name": "Joe Budden", - "image_url": "http://dailyentertainmentnews.com/wpgo/wp-content/uploads/2014/08/rapper-joe-budden-girlfriend-Audely-Robles.jpg" - }, - { - "name": "Joell Ortiz", - "image_url": "https://movesmusic.files.wordpress.com/2015/01/joell.jpg" - }, - { - "name": "Joey Badass", - "image_url": "https://www.thestar.com/content/dam/thestar/news/gta/2017/08/24/rapper-joey-bada-cancels-toronto-show-after-staring-at-eclipse/joey-badass.jpg.size.custom.crop.1086x724.jpg" - }, - { - "name": "John Cena", - "image_url": "http://www.picshunger.com/wp-content/uploads/2014/04/Rap.jpg" - }, - { - "name": "Johnny J", - "image_url": "http://media.rapnews.net/ArtistPics/JohnnyJ_rnn.jpg" - }, - { - "name": "Johntá Austin", - "image_url": "http://www.rap-up.com/app/uploads/2010/05/johnta-austin.jpg" - }, - { - "name": "Joji Miller", - "image_url": "http://pre11.deviantart.net/2640/th/pre/i/2016/122/1/8/joji_miller__filthy_frank__by_shuploc-da122fv.jpg" - }, - { - "name": "Jon Connor", - "image_url": "http://s3.amazonaws.com/rapgenius/jonconnor.png" - }, - { - "name": "Joyner Lucas", - "image_url": "https://www.sohh.com/wp-content/uploads/Joyner-Lucas-1.png" - }, - { - "name": "JT Money", - "image_url": "http://purple-drank.com/wp-content/uploads/2013/06/JT-Money-New.jpg" - }, - { - "name": "JT the Bigga Figga", - "image_url": "http://a1yola.com/wp-content/uploads/2010/10/JT-The-Bigga-Figga-Dwellin-In-Tha-Labb1-e1299005670778.jpg" - }, - { - "name": "Juelz Santana", - "image_url": "http://ll-media.tmz.com/2016/12/12/1212-juelz-santana-instagram-3.jpg" - }, - { - "name": "Juice (Đus)", - "image_url": "http://images.genius.com/37b135c1e081633b01d3b09bf4e785ed.600x600x1.png" - }, - { - "name": "Juicy J", - "image_url": "http://www.beyondblackwhite.com/wp-content/uploads/2014/01/Juicy-j-cup-1.png" - }, - { - "name": "Junhyung", - "image_url": "http://stuffpoint.com/kpopshineecnbluesujubapexoetc/image/378408-kpopshineecnbluesujub-a-pexoetc-rapper-junhyung.jpg" - }, - { - "name": "Jus Allah", - "image_url": "http://farm5.staticflickr.com/4014/5169574228_84ff1a04f4_z.jpg" - }, - { - "name": "Just Ice", - "image_url": "https://images.genius.com/608c268dba94e441e3f19c1e46207413.879x876x1.jpg" - }, - { - "name": "Juvenile", - "image_url": "http://wac.450f.edgecastcdn.net/80450F/club937.com/files/2012/08/56688577-630x418.jpg" - }, - { - "name": "Kurtis Blow", - "image_url": "http://is4.mzstatic.com/image/thumb/Music/v4/69/fd/9f/69fd9f31-d152-c8ba-57be-80308d6b5d0c/source/1200x1200sr.jpg" - }, - { - "name": "Lauryn Hill", - "image_url": "http://images.musictimes.com/data/images/full/75871/lauryn-hill-tour.jpg" - }, - { - "name": "K Camp", - "image_url": "http://www2.pictures.zimbio.com/gi/K+Camp+American+Authors+Visit+Music+Choice+Furxjl-IhJ7l.jpg" - }, - { - "name": "K'naan", - "image_url": "http://images2.fanpop.com/image/photos/13600000/Stock-Knaan-on-twitter-knaan-club-13681875-483-570.jpg" - }, - { - "name": "K-Dee", - "image_url": "https://i.ytimg.com/vi/ovfrEfeqjf0/hqdefault.jpg" - }, - { - "name": "K-OS", - "image_url": "http://torontorappers.com/newsite/wp-content/uploads/2016/08/k-os-rapper.jpg" - }, - { - "name": "K-Solo", - "image_url": "http://freshnewsbysteph.com/wp-content/uploads/2011/07/k-solo.jpg" - }, - { - "name": "K.E. on the Track", - "image_url": "https://akpopworld.files.wordpress.com/2015/08/sik-k.jpg" - }, - { - "name": "K7", - "image_url": "http://cps-static.rovicorp.com/3/JPG_400/MI0001/792/MI0001792148.jpg" - }, - { - "name": "Kafani", - "image_url": "http://gossip-grind.com/wp-content/uploads/2014/09/image18.jpg" - }, - { - "name": "Kam", - "image_url": "http://3.bp.blogspot.com/_qqc1V4I4JkY/RiKG8DfqsLI/AAAAAAAABmU/e7zmHRlRL9M/kam2.jpg" - }, - { - "name": "Kangol Kid", - "image_url": "http://cache4.asset-cache.net/gc/141797166-rapper-kangol-kid-attends-the-back-to-the-gettyimages.jpg" - }, - { - "name": "Kanye West", - "image_url": "http://assets.nydailynews.com/polopoly_fs/1.3936461.1523887222!/img/httpImage/image.jpg_gen/derivatives/article_750/604289829cc00020-kanye-west.jpg" - }, - { - "name": "Kap G", - "image_url": "http://remezcla.com/wp-content/uploads/2016/04/kap-g-2016-e1466531632221.jpg" - }, - { - "name": "Kardinal Offishall", - "image_url": "http://favimages.com/wp-content/uploads/2012/08/rapper-kardinal-offishall-fame-rap-singer.jpg" - }, - { - "name": "Kastro", - "image_url": "https://i.ytimg.com/vi/tV66DD_rxNU/maxresdefault.jpg" - }, - { - "name": "Kat Dahlia", - "image_url": "http://static.djbooth.net/pics-artist/katdahlia.jpg" - }, - { - "name": "Katie Got Bandz", - "image_url": "http://moodswingmgmt.com/wp-content/uploads/2013/10/Katie_Main.jpg" - }, - { - "name": "KB", - "image_url": "http://www.rapzilla.com/rz/images/kbillboard.jpg" - }, - { - "name": "Keak da Sneak", - "image_url": "http://theboombox.com/files/2017/01/Keak-Da-Sneak-Shot.jpg" - }, - { - "name": "Keith Ape", - "image_url": "http://conversationsabouther.net/wp-content/uploads/2016/08/Keith-Ape.jpg" - }, - { - "name": "Keith Murray", - "image_url": "http://mrdaveyd.files.wordpress.com/2010/10/keith-murray.jpg" - }, - { - "name": "Malcolm David Kelley", - "image_url": "http://cdn.cnwimg.com/searchThumb/wp-content/uploads/2014/09/Malcolm-David-Kelley.jpg" - }, - { - "name": "Kendrick Lamar", - "image_url": "https://stupiddope.com/wp-content/uploads/2018/04/kendrick-lamar-damn-2018-pulitzer-prize-first-rapper-music.jpg" - }, - { - "name": "Kent Jones", - "image_url": "http://static.vibe.com/files/2015/12/kent-jones-binishPR.jpg" - }, - { - "name": "Kerser", - "image_url": "http://dailyurbanculture.com/wp-content/uploads/2014/07/3.13.jpg" - }, - { - "name": "Kevin Abstract", - "image_url": "http://images.greenlabel.com/assets/2015/09/kevin-abstract-2.jpg" - }, - { - "name": "Kevin Gates", - "image_url": "https://s-media-cache-ak0.pinimg.com/736x/73/db/e4/73dbe4857b26434fdfaab15b98a622de.jpg" - }, - { - "name": "Kevin McCall", - "image_url": "http://resources3.news.com.au/images/2013/04/29/1226631/457575-kevin-mccall.jpg" - }, - { - "name": "Khia", - "image_url": "http://planetill.com/wp-content/uploads/2012/01/Khia.jpg" - }, - { - "name": "Khleo", - "image_url": "https://s-media-cache-ak0.pinimg.com/736x/2b/fb/f7/2bfbf784203a8fbd7a032c6eb77cbaef.jpg" - }, - { - "name": "Kia Shine", - "image_url": "http://i1.ytimg.com/vi/8OZx1vK4PNE/maxresdefault.jpg" - }, - { - "name": "Kid Capri", - "image_url": "https://s3.amazonaws.com/battlerap-production/2014/08/rsz_caprirsz.jpg" - }, - { - "name": "Kid Cudi", - "image_url": "http://www.stasheverything.com/wp-content/uploads/2013/04/Kid-Cudi-pic.jpg" - }, - { - "name": "Kid Frost", - "image_url": "http://media-cache-ak0.pinimg.com/736x/8f/36/61/8f3661da395898b46c6c3c84ce4ecef1.jpg" - }, - { - "name": "Kid Ink", - "image_url": "http://chekadigital.co.za/wp-content/uploads/2013/03/kid-ink.jpg" - }, - { - "name": "Kid Rock", - "image_url": "http://www.feelnumb.com/wp-content/uploads/2011/02/gallery0219.jpg" - }, - { - "name": "Kid Sister", - "image_url": "http://s3.amazonaws.com/rapgenius/jpg_Kid_Sister__MG_2600copy2.jpg" - }, - { - "name": "Kidd Kidd", - "image_url": "http://assets.nydailynews.com/polopoly_fs/1.2284876.1436323996!/img/httpImage/image.jpg_gen/derivatives/article_750/webconfitems78f-1-web.jpg" - }, - { - "name": "Killah Priest", - "image_url": "http://media-cache-ak0.pinimg.com/736x/ce/9a/5c/ce9a5c2abde75b828adae9b87dc8e020.jpg" - }, - { - "name": "Killer Mike", - "image_url": "http://www.findnews.co.uk/wp-content/uploads/2018/03/killer-mike-rapper-defends-gun-ownership-in-nra-video.jpg" - }, - { - "name": "Kilo Ali", - "image_url": "http://straightfromthea.com/wp-content/uploads/2014/09/KiloAli.jpg" - }, - { - "name": "King Chip", - "image_url": "http://jasperdowney.files.wordpress.com/2013/09/king-chip.jpg" - }, - { - "name": "King Gordy", - "image_url": "https://s3.amazonaws.com/rapgenius/King%20Gordy%2051.jpg" - }, - { - "name": "King L", - "image_url": "http://wac.450f.edgecastcdn.net/80450F/theboombox.com/files/2012/11/king-l-456-11212.jpg" - }, - { - "name": "King Tee", - "image_url": "http://siccness.net/wp/wp-content/uploads/2015/03/king-t.jpeg" - }, - { - "name": "Kirk Knight", - "image_url": "https://s3.amazonaws.com/rapgenius/dsc_0086.jpg" - }, - { - "name": "Kirko Bangz", - "image_url": "http://api.ning.com/files/SVfVaVsl8W2HxUovnHG5eBzdyEzEx0OOHA5U4cWbuT8ShSldd7ZKPKOi2RnF*LScvMps4AXVqwGVzjyDRdPbhW**MOzSt8V3/151263619.jpg" - }, - { - "name": "Kitty", - "image_url": "http://www.mxdwn.com/wp-content/uploads/2014/06/kitty-pryde2-580x386.jpg" - }, - { - "name": "KJ-52", - "image_url": "http://www.vegasnews.com/wp-content/uploads/KJ-52-570.jpg" - }, - { - "name": "Knero", - "image_url": "https://upload.wikimedia.org/wikipedia/en/a/a8/Knero_performing_during_the_Liberian_Independent_Celebration.jpg" - }, - { - "name": "Knoc-turn'al", - "image_url": "http://images.artistdirect.com/Images/artd/amg/music/bio/1640940_knocturnal_200x200.jpg" - }, - { - "name": "KO", - "image_url": "http://hbr.co.ke/wp-content/uploads/2015/09/K.O-CARACARA-RAPPER-HIP-HOP-MUSIC.jpg" - }, - { - "name": "KOHH", - "image_url": "https://s-media-cache-ak0.pinimg.com/736x/6a/1a/12/6a1a128849b04dfde612195054e9568d.jpg" - }, - { - "name": "Kodak Black", - "image_url": "https://media.nbcnewyork.com/images/1200*675/kodakblackout1.jpg" - }, - { - "name": "Kokane", - "image_url": "http://images1.laweekly.com/imager/kokane/u/original/5095855/kokane.jpg" - }, - { - "name": "Kool A.D", - "image_url": "http://s3.amazonaws.com/rapgenius/1362185468_Kool-AD-Okayplayer-interview2.jpg" - }, - { - "name": "Kool G Rap", - "image_url": "http://www.howtorapbook.com/wp-content/uploads/2015/07/040511-music-kool-g-rap.png" - }, - { - "name": "Kool Keith", - "image_url": "http://favimages.com/wp-content/uploads/2012/08/rapper-kool-keith-hip-hop-celebrity-star.jpg" - }, - { - "name": "Kool Moe Dee", - "image_url": "https://s3.amazonaws.com/rapgenius/kool_moe_dee.jpg" - }, - { - "name": "Koolade", - "image_url": "http://media-cache-ak0.pinimg.com/736x/48/d5/96/48d596e5d2914e055459440cd92cd802.jpg" - }, - { - "name": "Krayzie Bone", - "image_url": "http://articlebio.com/uploads/bio/2016/03/23/krayzie-bone.jpg" - }, - { - "name": "Kreayshawn", - "image_url": "http://thesuperslice.com/wp-content/uploads/2011/05/Kreayshawn-03.jpg" - }, - { - "name": "Krizz Kaliko", - "image_url": "http://favimages.com/wp-content/uploads/2012/08/rapper-krizz-kaliko-hip-hop-star-celebrity.jpg" - }, - { - "name": "KRS-One", - "image_url": "http://ifihavent.files.wordpress.com/2007/07/krs_blaze02991.jpg" - }, - { - "name": "Kung Fu Vampire", - "image_url": "https://kungfuvampire.com/wp-content/uploads/2015/03/KFV-Love-Bites_cover1200x1200.jpeg" - }, - { - "name": "Kurious", - "image_url": "http://theciphershow.com/image/uploads/kurious.jpg" - }, - { - "name": "Kurtis Blow", - "image_url": "http://is4.mzstatic.com/image/thumb/Music/v4/69/fd/9f/69fd9f31-d152-c8ba-57be-80308d6b5d0c/source/1200x1200sr.jpg" - }, - { - "name": "Kurupt", - "image_url": "http://upload.wikimedia.org/wikipedia/commons/1/19/Kurupt_Young_Gotti_in_Abu_Dhabi.jpg" - }, - { - "name": "Kutt Calhoun", - "image_url": "http://cdn.ticketfly.com/i/00/02/01/08/95-atxl.jpg" - }, - { - "name": "Kwamé", - "image_url": "http://3.bp.blogspot.com/-jgNTkFb4SrQ/UD5DgQgbdPI/AAAAAAAAAJI/13r9_kMiDkY/s1600/kwame_classic1.jpg" - }, - { - "name": "Kyle", - "image_url": "http://www.dailypublic.com/sites/default/files/2015/Apr/kyle.jpg" - }, - { - "name": "Lil' Kim", - "image_url": "http://4.bp.blogspot.com/-EngYxv2jBPA/UTknA4a939I/AAAAAAAAzBU/nb9YucfMRzs/s1600/41.jpg" - }, - { - "name": "Lil Wayne", - "image_url": "http://matchmusik.files.wordpress.com/2012/01/lil-wayne.jpg" - }, - { - "name": "L.T. Hutton", - "image_url": "http://www1.pictures.zimbio.com/gi/L+T+Hutton+Tupac+Production+Celebration+Santa+0yDUOUDKzhxl.jpg" - }, - { - "name": "La Chat", - "image_url": "http://uptwnxs.com/wp-content/uploads/2013/09/lachat.png" - }, - { - "name": "La the Darkman", - "image_url": "http://cdn5.hiphoplead.com/static/2010/02/la-the-darkman2.jpg" - }, - { - "name": "Lady Luck", - "image_url": "http://www.rapgrid.com/sites/default/files/rapper-photo/lady-luck.jpg" - }, - { - "name": "The Lady of Rage", - "image_url": "https://static1.squarespace.com/static/520ed800e4b0229123208764/526f4c76e4b0096d44b292ac/526f4c78e4b0096d44b292ad/1383025791721/1.jpg" - }, - { - "name": "Lakey The Kid", - "image_url": "http://nahright.com/wp-content/uploads/2014/10/Lakey.jpg" - }, - { - "name": "Lakim Shabazz", - "image_url": "http://uniqueheat.files.wordpress.com/2011/09/lakim-shabazz-11.jpg" - }, - { - "name": "Lakutis", - "image_url": "http://first-avenue.com/sites/default/files/styles/medium/public/images/performers/lakutis11.jpg" - }, - { - "name": "Large Professor", - "image_url": "http://www.hiphopnometry.org/wp-content/uploads/2015/03/download.jpg" - }, - { - "name": "Lauryn Hill", - "image_url": "http://images.musictimes.com/data/images/full/75871/lauryn-hill-tour.jpg" - }, - { - "name": "Lazarus", - "image_url": "https://upload.wikimedia.org/wikipedia/commons/d/dc/Lazarus_%28rapper%29.jpeg" - }, - { - "name": "LE", - "image_url": "http://hiphopenquirer.com/wp-content/uploads/2013/01/le.jpg" - }, - { - "name": "Lecrae", - "image_url": "http://blog.beliefnet.com/wholenotes/files/2012/06/Lecrae1.jpg" - }, - { - "name": "Left Brain", - "image_url": "http://s3.amazonaws.com/rapgenius/tumblr_m81jhwwa8m1qa42jro1_1280.jpg" - }, - { - "name": "Lex Luger", - "image_url": "http://static01.nyt.com/images/2011/11/06/magazine/06luger/06luger-popup-v2.jpg" - }, - { - "name": "Lil' B", - "image_url": "http://celebrityinsider.org/wp-content/uploads/2018/04/Cardi-B-Nicki-Minaj-Lil-Scrappy.jpg" - }, - { - "name": "Lil' Bibby", - "image_url": "http://www.billboard.com/files/styles/article_main_image/public/media/462817929-rapper-lil-bibby-enters-the-sirius-xm-650.jpg" - }, - { - "name": "Lil' Debbie", - "image_url": "https://upload.wikimedia.org/wikipedia/commons/4/42/Lil_Debbie_on_March_14%2C_2013.jpg" - }, - { - "name": "Lil' Dicky", - "image_url": "http://b-sides.tv/wp-content/uploads/2015/10/lil-dicky.jpg" - }, - { - "name": "Lil' Durk", - "image_url": "http://www.trbimg.com/img-5693fc6e/turbine/ct-chicago-rapper-lil-durk-announces-tour-drops-new-video-20160111" - }, - { - "name": "Lil' Eazy-E", - "image_url": "http://s3.amazonaws.com/hiphopdx-production/2014/09/Lil-Eazy-E_09-05-2014.jpg" - }, - { - "name": "Lil' Flip", - "image_url": "http://cdn.cnwimg.com/wp-content/uploads/2010/12/083011-lil-flip-lil-flip.png" - }, - { - "name": "Lil' Herb", - "image_url": "https://urbanstylzclothing.files.wordpress.com/2015/09/herb.jpg" - }, - { - "name": "Lil' Jon", - "image_url": "http://s3.amazonaws.com/rapgenius/lil-jon-w.jpg" - }, - { - "name": "Lil' Joseph", - "image_url": "http://beardfist.com/images/lil_joseph.png" - }, - { - "name": "Lil' Mama", - "image_url": "http://images2.fanpop.com/image/photos/11900000/Lil-Mama-3-female-rappers-11934192-440-348.jpg" - }, - { - "name": "Lil' Peep", - "image_url": "http://www.sobrietyresources.org/wp-content/uploads/2017/11/Lil-Peep-920x584.jpg" - }, - { - "name": "Lil' Phat", - "image_url": "http://api.ning.com/files/pQ8PE*Dabum6BY5-C2af3tLPWvIZgBdgFHHT*JOkvQAU8VjVm9v*Tl*M5TmfXHOqV4ji67tMnQY9zl7p-2QdcmKmsJPGcl6Y/WTFRussianMobsterChargedInTheMurderOfRapperLilPhatAtAtlantaHospitalInAOrderedShootingVideoInside.jpg" - }, - { - "name": "Lil' Pump", - "image_url": "https://s3.amazonaws.com/hiphopdx-production/2017/05/170530-Lil-Pump-800x600.jpg" - }, - { - "name": "Lil' Reese", - "image_url": "https://assets.dnainfo.com/generated/chicago_photo/2013/06/tavares-taylor-1372019233.jpg/extralarge.jpg" - }, - { - "name": "Lil' Ric", - "image_url": "http://a1yola.com/wp-content/uploads/2010/10/Lil-Ric.jpg" - }, - { - "name": "Lil' Ru", - "image_url": "http://authenticcore.files.wordpress.com/2009/06/lil-ru.jpg" - }, - { - "name": "Lil' Scrappy", - "image_url": "http://www.memphisrap.com/mr-uploads/2014/04/Lil-Scrappy-rapper-photo.jpg" - }, - { - "name": "Lil' Skies", - "image_url": "http://dailychiefers.com/wp-content/media/2017/08/Screen-Shot-2017-08-14-at-1.47.54-PM-1160x1088.png" - }, - { - "name": "Lil' Twist", - "image_url": "http://static.vibe.com/files/2015/03/Lil-Twist.jpg" - }, - { - "name": "Lil' Uzi Vert", - "image_url": "https://static.vibe.com/files/2017/05/Lil-Uzi-Vert-photo-1494953208-640x635.jpg" - }, - { - "name": "Lil' Wayne", - "image_url": "http://matchmusik.files.wordpress.com/2012/01/lil-wayne.jpg" - }, - { - "name": "Lil' Wyte", - "image_url": "https://bloximages.chicago2.vip.townnews.com/siouxcityjournal.com/content/tncms/assets/v3/editorial/f/16/f16599f8-8e54-5711-bb60-dae0d43f7a57/4f20871f57f10.image.jpg" - }, - { - "name": "Lil' Xan", - "image_url": "http://dailychiefers.com/wp-content/media/2017/05/lil-xan-1160x1119.png" - }, - { - "name": "Lil' Yachty", - "image_url": "http://i.dailymail.co.uk/i/newpix/2018/04/16/09/4B34F62B00000578-5620125-To_celebrate_her_15th_birthday_rapper_Danielle_Bregoli_released_-a-23_1523865744678.jpg" - }, - { - "name": "Lil' Zane", - "image_url": "http://eotm.files.wordpress.com/2010/07/lil_zane_677x600.jpg" - }, - { - "name": "Lil' Cease", - "image_url": "http://www1.pictures.zimbio.com/gi/Lil+Cease+Celebs+BET+Networks+New+York+Upfront+MTLFBnBGM_Gl.jpg" - }, - { - "name": "Lil' Fizz", - "image_url": "http://img.spokeo.com/public/900-600/lil_fizz_2007_07_10.jpg" - }, - { - "name": "Lil' Flip", - "image_url": "http://cdn.cnwimg.com/wp-content/uploads/2010/12/083011-lil-flip-lil-flip.png" - }, - { - "name": "Lil' Keke", - "image_url": "http://rapdose.com/wp-content/uploads/2014/04/Lil-Keke.jpg" - }, - { - "name": "Lil' Kim", - "image_url": "http://4.bp.blogspot.com/-EngYxv2jBPA/UTknA4a939I/AAAAAAAAzBU/nb9YucfMRzs/s1600/41.jpg" - }, - { - "name": "Lil' O", - "image_url": "http://purple-drank.com/wp-content/uploads/2011/06/Lil-O-Grind-Hard-Pray-Harder.jpg" - }, - { - "name": "Lil' Ronnie", - "image_url": "http://s3.amazonaws.com/hiphopdx-production/2016/10/Lil-Ronny-Instagram-e1477254471301-824x620.jpg" - }, - { - "name": "Lil' Troy", - "image_url": "http://photos1.blogger.com/x/blogger/2167/1769/1600/398335/liltroy.jpg" - }, - { - "name": "Lil' Wil", - "image_url": "http://www.rap-up.com/app/uploads/2018/04/lil-uzi-vert-japan.jpg" - }, - { - "name": "Lin Que", - "image_url": "https://upload.wikimedia.org/wikipedia/commons/thumb/3/3b/LinQue_5287-theOne.jpg/220px-LinQue_5287-theOne.jpg" - }, - { - "name": "Lisa Lopes", - "image_url": "http://images.rapgenius.com/3c8e978c534d938aa60f47229515ee66.527x600x1.jpg" - }, - { - "name": "LL Cool J", - "image_url": "http://media.npr.org/assets/img/2012/08/23/ll-cool-j_sq-ad8a68251f21a82c02dec641aad124d6b4de1ca0-s6-c30.jpg" - }, - { - "name": "Lloyd Banks", - "image_url": "https://www.bet.com/music/2018/03/17/lloyd-banks/_jcr_content/image.large2x1image.dimg/__1521337827454__1521335807971/031718-music-lloyd-banks.jpg" - }, - { - "name": "Locksmith", - "image_url": "http://api.ning.com/files/J*jFKCPdofWd1tPJxEdhL67p02O8suSNVExOVE0sZ0Gr*i9CA1T6aus8mXwgRx-xZODjLxtX5Am03SCXd8YZS1dm-MQZU*rN/locksmith.PNG" - }, - { - "name": "Logic", - "image_url": "http://hiphopnewssource.com/wp-content/uploads/2015/01/Logic-rapper.jpg" - }, - { - "name": "LoLa Monroe", - "image_url": "http://talkingpretty.com/wp-content/uploads/2011/12/Lola_Monroe.jpg" - }, - { - "name": "London On Da Track", - "image_url": "http://image1.redbull.com/rbcom/010/2017-02-27/1331846909916_2/0010/1/1500/1000/2/rapper-pell-and-producer-london-on-da-track.jpg" - }, - { - "name": "Loon", - "image_url": "http://rollingout.com/wp-content/uploads/2013/07/loon.jpg" - }, - { - "name": "Lord Finesse", - "image_url": "http://www.ballerstatus.com/wp-content/uploads/2012/07/lordfinesse.jpg" - }, - { - "name": "Lord Have Mercy", - "image_url": "http://4.bp.blogspot.com/-e0M8qmkHdr4/T-OOzru_EbI/AAAAAAAAB4c/b2Xzs3Uhx2M/s1600/lord-have-mercy-black-n-white.jpg" - }, - { - "name": "Lord Infamous", - "image_url": "http://www.aceshowbiz.com/images/news/lord-infamous-of-three-6-mafia-died-at-40.jpg" - }, - { - "name": "Lord Jamar", - "image_url": "http://insidejamarifox.com/wp-content/uploads/2013/09/LORDJAMAR.jpg" - }, - { - "name": "Los", - "image_url": "http://cdn.ambrosiaforheads.com/wp-content/uploads/2014/03/los-rapper.jpeg" - }, - { - "name": "Louis Logic", - "image_url": "http://www.mvremix.com/urban/interviews/images/l_l.jpg" - }, - { - "name": "Lovebug Starski", - "image_url": "https://upload.wikimedia.org/wikipedia/commons/1/12/Starski.jpg" - }, - { - "name": "LoveRance", - "image_url": "http://www.famousbirthdays.com/thumbnails/loverance-medium.jpg" - }, - { - "name": "Lowkey", - "image_url": "https://www.thecanary.co/wp-content/uploads/2018/04/Rapper-Lowkey-on-Going-Underground-770x403.jpg" - }, - { - "name": "LRoc", - "image_url": "https://i1.wp.com/www.respectmyregion.com/wp-content/uploads/2015/07/unnamed1-e1438370960295.jpg" - }, - { - "name": "Ludacris", - "image_url": "https://pennylibertygbow.files.wordpress.com/2012/02/ludacris.jpg" - }, - { - "name": "Luis Resto", - "image_url": "http://images.genius.com/1555dd4015e93a37e901dd6bbcf8fd94.502x502x1.jpg" - }, - { - "name": "Luni Coleone", - "image_url": "http://hw-static.worldstarhiphop.com/pics/images/tp/2lieagk.jpg" - }, - { - "name": "Lupe Fiasco", - "image_url": "http://2.bp.blogspot.com/-sB8Ufk5JalU/TnVCVMu-QaI/AAAAAAAAGZk/ih8up0ox8AA/s1600/lupe_fiasco.jpg" - }, - { - "name": "Luther Campbell", - "image_url": "https://s-media-cache-ak0.pinimg.com/736x/55/bf/a2/55bfa20740ef48b87c79db4bf83045e6.jpg" - }, - { - "name": "MC Lyte", - "image_url": "http://www2.pictures.zimbio.com/gi/MC+Lyte+Soul+Train+Awards+2012+Glade+Suite+pwqWuYKKQkwl.jpg" - }, - { - "name": "Melle Mel", - "image_url": "http://www4.pictures.zimbio.com/gi/Melle+Mel+GRAMMY+Nominations+Concert+Live+uqqOc_pgcOKl.jpg" - }, - { - "name": "MF Doom", - "image_url": "http://1.bp.blogspot.com/-sV6R16-qWxo/Tm6ZhYV7_aI/AAAAAAAAACI/Hh6dPl1H2L0/s1600/MF%2BDOOM.jpg" - }, - { - "name": "M Trill", - "image_url": "http://www.iwantairplay.com/artist/img/201011041288886539_mtrill%202.jpg" - }, - { - "name": "M-1", - "image_url": "http://i.huffpost.com/gen/2559626/images/o-M1-RAPPER-facebook.jpg" - }, - { - "name": "M.I.A.", - "image_url": "http://media.santabanta.com/newsite/cinemascope/feed/mia20.jpg" - }, - { - "name": "Mac", - "image_url": "http://s3.amazonaws.com/rapgenius/Earlly.jpg" - }, - { - "name": "Mac Dre", - "image_url": "http://s3.amazonaws.com/rapgenius/10683a596c9b82548291.jpg" - }, - { - "name": "Mac Lethal", - "image_url": "http://i.ytimg.com/vi/UV-q4q66SAQ/maxresdefault.jpg" - }, - { - "name": "Mac Mall", - "image_url": "http://s3.amazonaws.com/rapgenius/DSC_2267a.jpg" - }, - { - "name": "Mac Miller", - "image_url": "http://s3.amazonaws.com/rapgenius/1357230347_MacMiller.jpg" - }, - { - "name": "Mac Minister", - "image_url": "http://mtv.mtvnimages.com/uri/mgid:uma:image:mtv.com:3088181" - }, - { - "name": "Machine Gun Kelly", - "image_url": "https://upload.wikimedia.org/wikipedia/commons/thumb/a/a7/Machine_Gun_Kelly.jpg/1200px-Machine_Gun_Kelly.jpg" - }, - { - "name": "Mack 10", - "image_url": "http://s3.amazonaws.com/rapgenius/1368457732_77476E77A10496D1F7CAD8DC2CBA9F72.jpg" - }, - { - "name": "Mack Maine", - "image_url": "http://www1.pictures.zimbio.com/gi/Cash+Money+Records+Lil+Wayne+Album+Release+4Y_9ed0dAwal.jpg" - }, - { - "name": "Macklemore", - "image_url": "http://cdn1.bostonmagazine.com/wp-content/uploads/2013/10/macklemore-boston-rappers.jpg" - }, - { - "name": "Mad Lion", - "image_url": "http://ring.cdandlp.com/oldiers/photo_grande/114795296.jpg" - }, - { - "name": "Madchild", - "image_url": "http://i1.wp.com/www.ballerstatus.com/wp-content/uploads/2013/07/madchild.jpg" - }, - { - "name": "Madlib", - "image_url": "http://www.stasheverything.com/wp-content/uploads/2012/08/madlib.jpg" - }, - { - "name": "Maejor Ali", - "image_url": "http://www.rap-up.com/app/uploads/2014/10/maejor-ali-team.jpg" - }, - { - "name": "Magic", - "image_url": "http://www.ballerstatus.com/wp-content/uploads/2013/03/mrmagic.jpg" - }, - { - "name": "Magneto Dayo", - "image_url": "http://images1.laweekly.com/imager/magneto-dayo/u/original/4246159/dayophoto.jpg" - }, - { - "name": "Magnolia Shorty", - "image_url": "http://img.wennermedia.com/social/rs-896-rectangle.jpg" - }, - { - "name": "Maino", - "image_url": "https://fanart.tv/fanart/music/2c2cc2fe-0dcf-4995-8199-91fd5f159323/artistbackground/maino-50a1d2727401b.jpg" - }, - { - "name": "Manafest", - "image_url": "http://favimages.com/wp-content/uploads/2012/08/rapper-manafest-celebrity-rap-singer.jpg" - }, - { - "name": "Mann", - "image_url": "https://ipeoplewatch.files.wordpress.com/2010/11/mann.png" - }, - { - "name": "Mannie Fresh", - "image_url": "http://www.hip-hopvibe.com/wp-content/uploads/2012/08/Mannie-Fresh-3.jpg" - }, - { - "name": "Marčelo", - "image_url": "http://upload.wikimedia.org/wikipedia/commons/thumb/4/4c/Mar%C4%8Delo_2008.jpg/600px-Mar%C4%8Delo_2008.jpg" - }, - { - "name": "Mariah Carey", - "image_url": "http://37.media.tumblr.com/ddcd2842cfaa27ad749eb1c8f0fa87d3/tumblr_mrvw1psZ391szbfero1_500.jpg" - }, - { - "name": "Mark Battles", - "image_url": "http://www.gannett-cdn.com/-mm-/ea1e306e18ab38d38fd0c7bad5df798dc9e6bf2a/c=1-0-1142-858&r=x404&c=534x401/local/-/media/2016/09/12/INGroup/Indianapolis/636092765862586531-MARKBATTLES-1-.jpg" - }, - { - "name": "Marky Mark", - "image_url": "http://i.dailymail.co.uk/i/pix/2014/12/15/23C0FCDA00000578-2874607-Back_in_the_day_Marky_Mark_Mark_Wahlberg_rapper_and_actor_circa_-m-4_1418665581123.jpg" - }, - { - "name": "Marley Marl", - "image_url": "http://www.waxpoetics.com/wp-content/uploads/2014/06/Kool-G-Rap_Promo2_suekwon-1.jpg" - }, - { - "name": "Marvaless", - "image_url": "http://a1yola.com/wp-content/uploads/2011/01/Marvaless-Ghetto-Blues.jpg" - }, - { - "name": "Marz", - "image_url": "http://wadeoradio.com/wp-content/uploads/2013/05/marz_with_hoodie.jpg" - }, - { - "name": "Mase", - "image_url": "http://richglare.com/wp-content/uploads/2014/03/mase.jpg" - }, - { - "name": "Masspike Miles", - "image_url": "http://api.ning.com/files/mWq-Pv8RWzQj-MamUWH9TNTYNoW0BlcruPGRV8J5nMMxDR76Wm0*Jgimy-pJMwxDTY5CcBFnbIJEj2GQDyirFkBKOdLYcw7C/masspikemiles20120105300x300.jpg" - }, - { - "name": "Masta Ace", - "image_url": "http://www.okayplayer.com/wp-content/uploads/2012/04/Masta_Ace_x_DOOM.jpg" - }, - { - "name": "Masta Killa", - "image_url": "http://favimages.com/wp-content/uploads/2012/08/rapper-masta-killa-singer-rap-hip-hop.jpg" - }, - { - "name": "Master P", - "image_url": "http://cdn2.hiphopsince1987.com/wp-content/uploads/2014/04/MasterP.jpg" - }, - { - "name": "Master Shortie", - "image_url": "http://cache4.asset-cache.net/gc/98003447-british-rapper-master-shortie-performs-at-the-gettyimages.jpg" - }, - { - "name": "Matt Toka", - "image_url": "http://cdn.baeblemusic.com/bandcontent/matt_toka/matt_toka-498.jpg" - }, - { - "name": "Max B", - "image_url": "http://www.therapscene.com/wp-content/uploads/2016/09/max-b.png" - }, - { - "name": "Maxo Kream", - "image_url": "http://images.livemixtapes.com/artists/nodj/maxo_kream-maxo_187/cover.jpg" - }, - { - "name": "MC Breed", - "image_url": "http://cdn.ambrosiaforheads.com/wp-content/uploads/2015/10/MCBreed_Tupac.jpg" - }, - { - "name": "MC Davo", - "image_url": "https://i.scdn.co/image/8ca10c2e0345c064fd77e23dffd044e095cd09d9" - }, - { - "name": "MC Eiht", - "image_url": "http://happybday.to/sites/pics/mc-eiht-2013-3.jpg" - }, - { - "name": "MC Frontalot", - "image_url": "http://s3.amazonaws.com/media.wbur.org/wordpress/9/files/2011/11/1102_frontalot.jpg" - }, - { - "name": "MC Hammer", - "image_url": "http://i2.cdn.turner.com/cnnnext/dam/assets/111020033101-mc-hammer-story-top.jpg" - }, - { - "name": "MC Jin", - "image_url": "http://blog.asianinny.com/wp-content/uploads/2014/08/Edit-2.jpg" - }, - { - "name": "MC Lyte", - "image_url": "http://www2.pictures.zimbio.com/gi/MC+Lyte+Soul+Train+Awards+2012+Glade+Suite+pwqWuYKKQkwl.jpg" - }, - { - "name": "MC Mong", - "image_url": "http://www.christianitydaily.com/data/images/full/292/mc-mong.jpg" - }, - { - "name": "MC Pressure", - "image_url": "http://resources1.news.com.au/images/2013/09/13/1226718/911813-6111b67a-1b93-11e3-885a-29191a963f6e.jpg" - }, - { - "name": "MC Ren", - "image_url": "http://favimages.com/wp-content/uploads/2012/08/rapper-mc-ren-celebrity-rap-star.jpg" - }, - { - "name": "MC Ride", - "image_url": "https://upload.wikimedia.org/wikipedia/commons/7/72/MC_Ride_of_Death_Grips_in_2012.jpg" - }, - { - "name": "MC Serch", - "image_url": "http://www.eurweb.com/wp-content/uploads/2013/09/MC-Serch1.jpg" - }, - { - "name": "MC Shan", - "image_url": "http://cps-static.rovicorp.com/3/JPG_400/MI0001/369/MI0001369927.jpg" - }, - { - "name": "MC Solaar", - "image_url": "http://www.potoclips.com/wp-content/uploads/2014/12/MC-Solaar-Zoom-90-11-2014-10.png" - }, - { - "name": "MC Trouble", - "image_url": "http://urbanbridgez.com/ubgblog/wp-content/uploads/2012/06/MCTrouble.jpg" - }, - { - "name": "MC Tunes", - "image_url": "http://i4.manchestereveningnews.co.uk/incoming/article4024647.ece/ALTERNATES/s615/nicky-lockett.jpg" - }, - { - "name": "Meechy Darko", - "image_url": "http://www4.pictures.zimbio.com/gi/Meechy+Darko+Coachella+Valley+Music+Arts+Festival+TkYgAgZECOrl.jpg" - }, - { - "name": "Meek Mill", - "image_url": "https://mk0slamonlinensgt39k.kinstacdn.com/wp-content/uploads/2018/04/meek.jpg" - }, - { - "name": "Melle Mel", - "image_url": "http://www4.pictures.zimbio.com/gi/Melle+Mel+GRAMMY+Nominations+Concert+Live+uqqOc_pgcOKl.jpg" - }, - { - "name": "Mellow Man Ace", - "image_url": "http://www.thecubanhistory.com/wp-content/uploads/2014/09/mellow-man-ace-posing-for-pic-picture.jpg" - }, - { - "name": "Memphis Bleek", - "image_url": "http://www4.pictures.gi.zimbio.com/Jay+Z+Celebrates+Grand+Opening+40+40+Club+BLwPtvgRe4Sl.jpg" - }, - { - "name": "Messy Marv", - "image_url": "http://gossip-grind.com/wp-content/uploads/2013/09/image3.jpg" - }, - { - "name": "Method Man", - "image_url": "http://assets.nydailynews.com/polopoly_fs/1.384069!/img/httpImage/image.jpg_gen/derivatives/landscape_1200/alg-rapper-method-man-jpg.jpg" - }, - { - "name": "Metro Boomin", - "image_url": "http://static.stereogum.com/uploads/2017/05/Metro-Boomin-1496168461-compressed.jpg" - }, - { - "name": "MF Doom", - "image_url": "http://1.bp.blogspot.com/-sV6R16-qWxo/Tm6ZhYV7_aI/AAAAAAAAACI/Hh6dPl1H2L0/s1600/MF%2BDOOM.jpg" - }, - { - "name": "MF Grimm", - "image_url": "http://favimages.com/wp-content/uploads/2012/08/rapper-mf-grimm-fame-hip-hop-star.jpg" - }, - { - "name": "Mia X", - "image_url": "http://www.blackvibes.com/images/bvc/81/16306-mia-x.jpg" - }, - { - "name": "Mic Geronimo", - "image_url": "http://img.spokeo.com/public/900-600/mic_geronimo_2003_06_04.jpg" - }, - { - "name": "Mick Jenkins", - "image_url": "http://thekoalition.com/images/2015/10/Mick-Jenkins.jpg" - }, - { - "name": "Mickey Factz", - "image_url": "http://www.thefader.com/ys_assets/0005/4038/mfactz_main.jpg" - }, - { - "name": "Mike Dean", - "image_url": "https://vice-images.vice.com/images/content-images-crops/2015/10/23/smoking-weed-and-talking-rap-urban-legends-with-the-biggest-stoner-in-hip-hop-420-body-image-1445632224-size_1000.jpg" - }, - { - "name": "Mike G", - "image_url": "http://assets.nydailynews.com/polopoly_fs/1.2687217.1466809127!/img/httpImage/image.jpg_gen/derivatives/article_750/brown25f-2-web.jpg" - }, - { - "name": "Mike Jones", - "image_url": "http://content6.flixster.com/photo/12/68/69/12686960_ori.jpg" - }, - { - "name": "Mike Posner", - "image_url": "http://i.ytimg.com/vi/_z1aJvUTXUY/maxresdefault.jpg" - }, - { - "name": "Mike Shinoda", - "image_url": "http://www.canada.com/entertainment/cms/binary/7181890.jpg" - }, - { - "name": "Mike Stud", - "image_url": "https://cab.blog.gustavus.edu/files/2014/01/STUDITUNES2.jpg" - }, - { - "name": "Mike Will Made It", - "image_url": "http://generations.fr/media/son/_src/mike-will-made-it.jpg" - }, - { - "name": "Mike Zombie", - "image_url": "http://www.lifeistremendez.com/wp-content/uploads/2016/06/MIKE-ZOMBIE.jpg" - }, - { - "name": "Milo", - "image_url": "http://images1.laweekly.com/imager/milo/u/original/4244882/milo2final.jpg" - }, - { - "name": "Mims", - "image_url": "https://upload.wikimedia.org/wikipedia/commons/f/f5/Shawn-Mims_2009-04-10_by-Adam-Bielawski.jpg" - }, - { - "name": "Mino", - "image_url": "https://s-media-cache-ak0.pinimg.com/736x/9c/ab/e8/9cabe8d370440fada55bc1e8f338b332.jpg" - }, - { - "name": "Miryo", - "image_url": "http://i1.wp.com/www.koreaboo.com/wp-content/uploads/2015/11/80059600.jpg" - }, - { - "name": "Missy Elliott", - "image_url": "http://thatgrapejuice.net/wp-content/uploads/2011/06/Missy%2BElliott1.jpg" - }, - { - "name": "Mista Grimm", - "image_url": "http://steadydippin.com/wp-content/uploads/Mista-Grimm.jpg" - }, - { - "name": "Mistah F.A.B.", - "image_url": "https://upload.wikimedia.org/wikipedia/commons/5/5f/Mistah_F.A.B._%28cropped%29.jpg" - }, - { - "name": "Mister Cee", - "image_url": "http://ocdn.hiphopdx.com/mister-cee-gq-magazine-january-2014-hip-hop-dj-atlanta-music-01.jpg" - }, - { - "name": "Mitchy Slick", - "image_url": "http://celebnmusic247.com/wp-content/uploads/2013/12/San-Diego-rapper-Lil-Mitchy-Slick-Killed-news-1216-1.jpg" - }, - { - "name": "Mo B. Dick", - "image_url": "http://purple-drank.com/wp-content/uploads/2011/06/Mo-B.-Dick.jpg" - }, - { - "name": "Mod Sun", - "image_url": "https://i.ytimg.com/vi/077gBsOpfLY/maxresdefault.jpg" - }, - { - "name": "Money-B", - "image_url": "https://static1.squarespace.com/static/537f7de4e4b07cc20962a0fe/57d9ce70d482e972e8422601/57d9ced41b631b43099ada2e/1486258009597/money+b+icicles.jpg" - }, - { - "name": "Monie Love", - "image_url": "https://68.media.tumblr.com/34e9804dcd3a4307e744fc0b343318bf/tumblr_mvftdi4xlG1szbfero1_500.jpg" - }, - { - "name": "Monoxide Child", - "image_url": "https://upload.wikimedia.org/wikipedia/commons/thumb/0/01/Monoxide_Child_at_the_Abominationz_tour_in_Chesterfield%2C_MI_on_April_27th%2C_2013.jpg/220px-Monoxide_Child_at_the_Abominationz_tour_in_Chesterfield%2C_MI_on_April_27th%2C_2013.jpg" - }, - { - "name": "Mopreme Shakur", - "image_url": "https://media.gettyimages.com/photos/rapper-mopreme-shakur-attends-the-2012-estrella-de-moet-program-at-picture-id143587959" - }, - { - "name": "Mos Def", - "image_url": "http://1.bp.blogspot.com/-OfuE_iF9YT4/TarRyZ1raYI/AAAAAAAABJA/JZ6p4D2dMjw/s1600/mos_def1.jpg" - }, - { - "name": "Mr. Capone-E", - "image_url": "http://media-cache-ak0.pinimg.com/736x/06/58/dd/0658ddcf276465f97bee8e59ac5937ef.jpg" - }, - { - "name": "Mr. Cheeks", - "image_url": "http://www.twincities.com/wp-content/uploads/2016/03/08-RapperMrCheeks.jpg" - }, - { - "name": "Mr. Collipark", - "image_url": "http://urltv.tv/wp-content/uploads/2015/02/mr-collipark.png" - }, - { - "name": "Mr. Criminal", - "image_url": "https://nueonline.files.wordpress.com/2010/05/mr-cr.jpg" - }, - { - "name": "Mr. Lif", - "image_url": "https://media2.wnyc.org/i/800/0/c/80/nprproxy/477517970" - }, - { - "name": "Mr. Porter", - "image_url": "https://s3.amazonaws.com/rapgenius/1364090355_l.jpg" - }, - { - "name": "Mr. Serv-On", - "image_url": "http://purple-drank.com/wp-content/uploads/2013/09/Mr.-Serv-On-Gangsta-1-More-Time.jpg" - }, - { - "name": "Mr. Short Khop", - "image_url": "https://www.rapmusicguide.com/amass/images/inventory/4474/Mr.%20Short%20Khop%20-%20Da%20Khop%20Shop.jpg" - }, - { - "name": "Ms. Jade", - "image_url": "http://www.billboard.com/files/media/ms-jade-press-2002-650a.jpg" - }, - { - "name": "Murphy Lee", - "image_url": "http://1.bp.blogspot.com/_72Fq2ASEDsQ/SylcE_hqPzI/AAAAAAAAJSQ/VlycqZcZFQE/s320/murphy_lee_mo-174781.jpg" - }, - { - "name": "Murs", - "image_url": "http://planetill.com/wp-content/uploads/2011/01/murs1a.jpg" - }, - { - "name": "Mystikal", - "image_url": "http://theboombox.com/files/2015/09/mystikal-630x420.jpg" - }, - { - "name": "Myzery", - "image_url": "http://faygoluvers.net/v5/wp-content/uploads/2013/03/MYZERY-INT-2013th.jpg" - }, - { - "name": "Montana of 300", - "image_url": "http://www.rapswag.com/wp-content/uploads/2016/05/montana-of-300.jpg" - }, - { - "name": "Nas", - "image_url": "http://www.howtorapbook.com/wp-content/uploads/2016/04/nas_rapper_reuters_1200.jpg" - }, - { - "name": "Nicki Minaj", - "image_url": "http://www.rap-up.com/app/uploads/2018/04/nicki-minaj-chun-li.jpg" - }, - { - "name": "NBA YoungBoy", - "image_url": "http://feedbox.com/wp-content/uploads/2017/07/rapper-nba-youngboy.jpg" - }, - { - "name": "N.O. Joe", - "image_url": "https://images.genius.com/e6d317c1fc41f258cab262a651d1032d.220x222x1.jpg" - }, - { - "name": "N.O.R.E.", - "image_url": "http://rapradar.com/wp-content/uploads/2016/03/nore-rapradar-2.jpg" - }, - { - "name": "Napoleon", - "image_url": "http://2paclegacy.net/wp-content/uploads/2015/12/Napoleon-Outlawz.jpg" - }, - { - "name": "Nas", - "image_url": "http://www.howtorapbook.com/wp-content/uploads/2016/04/nas_rapper_reuters_1200.jpg" - }, - { - "name": "Nate Dogg", - "image_url": "http://www.evilbeetgossip.com/wp-content/uploads/2011/03/Nate-Dogg-AKA-Nathaniel-Hale.jpg" - }, - { - "name": "Nature", - "image_url": "http://blogordiepgh.com/wp-content/uploads/2016/02/nature2-590x738.jpg" - }, - { - "name": "Nav", - "image_url": "https://www.desiblitz.com/wp-content/uploads/2017/02/Nav-Rapper-Watch-2017-Featued-1.jpg" - }, - { - "name": "Nebu Kiniza", - "image_url": "https://www.famousbirthdays.com/faces/kiniza-nebu-image.jpg" - }, - { - "name": "Necro", - "image_url": "https://m3event.files.wordpress.com/2012/05/necro.png" - }, - { - "name": "Needlz", - "image_url": "http://www.mvremix.com/urban/interviews/images/choppa.jpg" - }, - { - "name": "Nelly", - "image_url": "http://www.rapbasement.com/wp-content/uploads/2015/04/nelly-4ee7ec5a1b162.jpg" - }, - { - "name": "NF", - "image_url": "http://nfrealmusic.umg-wp.com/wp-content/blogs.dir/390/files_mf/1427238717nfbg2.jpg" - }, - { - "name": "Nick Cannon", - "image_url": "http://4.bp.blogspot.com/-WlJB4GcpcJI/TrIsDVJpnCI/AAAAAAAAAQs/KvUN9_OEwRg/s1600/Nick-Cannon-biography.jpg" - }, - { - "name": "Nicki Minaj", - "image_url": "http://www.rap-up.com/app/uploads/2018/04/nicki-minaj-chun-li.jpg" - }, - { - "name": "Nicky da B", - "image_url": "http://www.out.com/sites/out.com/files/2014/09/04/nicky-1%20main.jpg" - }, - { - "name": "Nicole Wray", - "image_url": "http://static.djbooth.net/pics-artist-rec/Nicole_Wray_1.jpg" - }, - { - "name": "Nikki D", - "image_url": "http://4.bp.blogspot.com/-Qc-EvZbPM1Q/UZhHG-wvkUI/AAAAAAAASYY/FRdaUwO8KJg/s1600/nikkid.jpg" - }, - { - "name": "Ninja", - "image_url": "http://www.dieantwoord.com/wp-content/uploads/2016/06/13355485_1803315693234477_1383954422_n.jpg" - }, - { - "name": "Nipsey Hussle", - "image_url": "https://badgerherald.com/media/2013/10/nipsey_headshot.jpg" - }, - { - "name": "Nitty", - "image_url": "http://versetracker.com/sites/default/files/rapper-pictures/r/rum-nitty.jpg" - }, - { - "name": "Nitty Scott MC", - "image_url": "http://www.thesocialmediasamurai.com/wp-content/uploads/2015/06/TMT_6971-Edit_HighResEdit.jpg" - }, - { - "name": "NoClue", - "image_url": "https://upload.wikimedia.org/wikipedia/commons/9/94/RickyBrown2.jpg" - }, - { - "name": "No Malice", - "image_url": "http://www.xxlmag.com/files/2015/08/no-malice-interview.jpg" - }, - { - "name": "Noah 40 Shebib", - "image_url": "http://www.rap-up.com/app/uploads/2018/04/drake-floral.jpg" - }, - { - "name": "Noname", - "image_url": "https://upload.wikimedia.org/wikipedia/commons/thumb/b/b8/Noname_%28rapper%29_2017.jpg/1200px-Noname_%28rapper%29_2017.jpg" - }, - { - "name": "Nonchalant", - "image_url": "http://bandwidth.wamu.org/wp-content/uploads/2014/05/nonchalant-900x503.png" - }, - { - "name": "The Notorious B.I.G.", - "image_url": "http://www.neontommy.com/sites/default/files/NotoriousBIG.jpg" - }, - { - "name": "Nottz", - "image_url": "http://brandnew-hiphop.com/wp-content/uploads/2015/11/rapper-big-pooh-nottz-300z.jpg" - }, - { - "name": "Nujabes", - "image_url": "http://www.posterinvation.com/wp-content/uploads/2017/11/Nujabes-Japanese-Rapper.jpg" - }, - { - "name": "Nump", - "image_url": "https://upload.wikimedia.org/wikipedia/commons/0/08/NUMP_Photo_By_Linda_Poeng.jpg" - }, - { - "name": "Numskull", - "image_url": "http://a1yola.com/wp-content/uploads/2010/10/knumskull.jpeg" - }, - { - "name": "Nyck Caution", - "image_url": "https://s3.amazonaws.com/rapgenius/1370913624_Nyck-Caution.jpeg" - }, - { - "name": "Nyzzy Nyce", - "image_url": "http://cache.vevo.com/Content/VevoImages/artist/F77096AEAB227EDC7749E54A60AD84FD20133151332767.jpg" - }, - { - "name": "O.T. Genasis", - "image_url": "http://www.atlanticrecords.com/sites/g/files/g2000003466/f/styles/post_thumbnail_home/public/201407/O.T.Genasis_NewArtist_StoryImage.jpg" - }, - { - "name": "Obie Trice", - "image_url": "https://i.ytimg.com/vi/k0CukaaPmpk/hqdefault.jpg" - }, - { - "name": "Oddisee", - "image_url": "http://image2.redbull.com/rbcom/010/2015-04-21/1331718387121_2/0012/0/905/0/2616/2573/1500/2/oddisee.jpg" - }, - { - "name": "Offset", - "image_url": "http://celebrityinsider.org/wp-content/uploads/2018/04/Offset.jpg" - }, - { - "name": "OG Maco", - "image_url": "http://rack.0.mshcdn.com/media/ZgkyMDE0LzA5LzE5LzY2L29nbWFjb3VndWVzLjI3ZTY4LmpwZwpwCXRodW1iCTk1MHg1MzQjCmUJanBn/e9db9255/336/og-maco-uguessedit.jpg" - }, - { - "name": "Oh No", - "image_url": "https://s3.amazonaws.com/hiphopdx-production/2015/07/Screen-Shot-2015-07-17-at-6.45.39-PM-300x300.png" - }, - { - "name": "OJ da Juiceman", - "image_url": "http://www.stacksmag.net/wp-content/uploads/2013/03/Oj+Da+Juiceman.jpg" - }, - { - "name": "Ol' Dirty Bastard", - "image_url": "http://25.media.tumblr.com/tumblr_llopqgJSCs1qcnjjco1_500.jpg" - }, - { - "name": "Olamide", - "image_url": "http://i0.wp.com/www.currentnewsnow.com/wp-content/uploads/2017/02/olamide-rapper.jpg" - }, - { - "name": "Olivia", - "image_url": "http://4.bp.blogspot.com/-zjgq7UuGNO8/TtdcuvdVFoI/AAAAAAAAEtA/5zoyt9VRv3E/s1600/olivia+longott.jpg" - }, - { - "name": "Omarion", - "image_url": "https://i0.wp.com/favimages.com/wp-content/uploads/2012/08/rapper-omarion-rap-celebrity-singer.jpg" - }, - { - "name": "Omega Red", - "image_url": "https://www.rap-n-blues.com/wp-content/uploads/2010/10/Exclusive-Interview-with-Omega-Red-pt-1-11.jpg" - }, - { - "name": "Omillio Sparks", - "image_url": "https://i.ytimg.com/vi/bgjehnnP7vE/maxresdefault.jpg" - }, - { - "name": "One Be Lo", - "image_url": "https://grownuprap.files.wordpress.com/2015/06/one-be-lo.jpg" - }, - { - "name": "Oneya", - "image_url": "http://4.bp.blogspot.com/_rc6elIZnb9w/StfvPh8AExI/AAAAAAAAAPI/_RXYXzPY8PI/s320/grillz%5B1%5D.png" - }, - { - "name": "Open Mike Eagle", - "image_url": "http://normalimage.cdn.ucbt.net/person_69295.png" - }, - { - "name": "Psy", - "image_url": "http://www.soompi.com/wp-content/uploads/2013/05/psy-yahoo.jpg" - }, - { - "name": "Q-Tip", - "image_url": "http://amarudontv.com/wp-content/uploads/2011/06/q-tip.jpg" - }, - { - "name": "P. Reign", - "image_url": "http://www.thisisyourconscience.com/wp-content/uploads/2011/03/P-Reign.jpg" - }, - { - "name": "P.C.T", - "image_url": "http://media-cache-ec0.pinimg.com/736x/d8/6e/c4/d86ec4828778e4997a77313619d0d370.jpg" - }, - { - "name": "Papa Reu", - "image_url": "http://thesource.com/wp-content/uploads/2015/07/papa-reu-1.jpg" - }, - { - "name": "Papoose", - "image_url": "http://assets.nydailynews.com/polopoly_fs/1.281729.1314351515!/img/httpImage/image.jpg_gen/derivatives/article_970/amd-papoose-jpg.jpg" - }, - { - "name": "Paris", - "image_url": "http://cps-static.rovicorp.com/3/JPG_1080/MI0001/400/MI0001400360.jpg" - }, - { - "name": "PARTYNEXTDOOR", - "image_url": "http://wac.450f.edgecastcdn.net/80450F/theboombox.com/files/2013/10/PARTYNEXTDOOR.jpg" - }, - { - "name": "Pastor Troy", - "image_url": "http://veganrapnerd.com/wp-content/uploads/2013/08/pastortroy.jpg" - }, - { - "name": "Paul Wall", - "image_url": "http://aaenglish.files.wordpress.com/2010/07/paul_wall.jpg" - }, - { - "name": "Peedi Peedi", - "image_url": "http://www.yorapper.com/Photos/peedi-peedi-ringtone.jpg" - }, - { - "name": "Peewee Longway", - "image_url": "http://thedailyloud.com/wp-content/uploads/2014/07/PeeWee+Longway.jpg" - }, - { - "name": "Pacewon", - "image_url": "http://s3.amazonaws.com/rapgenius/1362133040_pacewon1.jpg" - }, - { - "name": "Percee P", - "image_url": "https://images.genius.com/5043bb54deda4ff352e7a413107e40fd.455x489x1.jpg" - }, - { - "name": "Petey Pablo", - "image_url": "http://i.perezhilton.com/wp-content/uploads/2012/02/rapper-petey-pablo-goes-to-prison__oPt.jpg" - }, - { - "name": "Pharoahe Monch", - "image_url": "http://thecorner.co.nz/wp-content/uploads/2010/10/monch.jpg" - }, - { - "name": "Pharrell Williams", - "image_url": "http://www.alux.com/wp-content/uploads/2016/05/pharrell-williams8.jpg" - }, - { - "name": "Phat Kat", - "image_url": "http://factmag-images.s3.amazonaws.com/wp-content/uploads/2015/09/Phat-Kat-FACT-Freestyles-Episode-1200x630.png" - }, - { - "name": "Phife Dawg", - "image_url": "http://static.celebuzz.com/uploads/2016/03/phife-dawg-32316.jpg" - }, - { - "name": "Philthy Rich", - "image_url": "http://i2.wp.com/allhiphop.com/wp-content/uploads/2012/02/20120214-133154-1.jpg" - }, - { - "name": "Phyno", - "image_url": "https://i.onthe.io/vllkyt2uq4dmo3ouf.bf39c0a9.jpg" - }, - { - "name": "Pill", - "image_url": "http://missdimplez.com/wp-content/uploads/2011/12/pill-rapper.jpg" - }, - { - "name": "Pimp C", - "image_url": "http://media-cache-ak0.pinimg.com/736x/4a/5d/da/4a5dda5cf63497a7a7323d64036ea588.jpg" - }, - { - "name": "Pinkie Pie", - "image_url": "http://fc09.deviantart.net/fs71/i/2014/106/a/e/rap_pinkie_pie_by_racoonkun-d7eqdf7.png" - }, - { - "name": "Pitbull", - "image_url": "http://images5.fanpop.com/image/photos/25000000/Pitbull-wallpaper-pitbull-rapper-25094094-1024-768.jpg" - }, - { - "name": "Planet Asia", - "image_url": "http://2.bp.blogspot.com/_3i6Ja3TzR3U/TUsqDLt5_eI/AAAAAAAAA5E/o5cNPWjIOUc/s1600/Planet+Asia.jpg" - }, - { - "name": "Planetary", - "image_url": "https://www.universetoday.com/wp-content/uploads/2013/06/star_cluster_planet.jpg" - }, - { - "name": "Plies", - "image_url": "http://siccness.net/wp/wp-content/uploads/2013/01/Plies.png" - }, - { - "name": "Playboi Carti", - "image_url": "http://images.complex.com/complex/image/upload/t_article_image/playboi-carti_hylalw.jpg" - }, - { - "name": "PnB Rock", - "image_url": "http://www.trbimg.com/img-593a8ea1/turbine/mc-rapper-pnb-rocks-show-to-open-easton-s-new-one-centre-square-is-rescheduled-20170609" - }, - { - "name": "PNC", - "image_url": "https://resources.stuff.co.nz/content/dam/images/1/d/s/t/f/0/image.related.StuffLandscapeSixteenByNine.620x349.1gbkoq.png/1483310043452.jpg" - }, - { - "name": "Porta", - "image_url": "https://upload.wikimedia.org/wikipedia/commons/9/93/Christian_Jim%C3%A9nez_Porta.jpg" - }, - { - "name": "Positive K", - "image_url": "https://i.ytimg.com/vi/rKSu3MMqjNA/maxresdefault.jpg" - }, - { - "name": "Post Malone", - "image_url": "http://s3.amazonaws.com/factmag-images/wp-content/uploads/2016/06/Post-Malone-6-15-16-616x440.jpg" - }, - { - "name": "Pras", - "image_url": "http://okp-cdn.okayplayer.com/wp-content/uploads/2015/11/pras-grey.jpg" - }, - { - "name": "Prince Ital Joe", - "image_url": "http://api.ning.com/files/HX2HJ5zFz1VXk6nnlv3UuQYepy3Zaqp7FB99CwchCVK9qZAdUGnd2wgm8KBTPBQ5TPA7viKN70LkASDddCvpMRV*qbrLbSTS/2pacPrinceItalJoe.jpg" - }, - { - "name": "Prince Paul", - "image_url": "http://s3.amazonaws.com/hiphopdx-production/2017/06/DJ-Prince-Paul-789x591.jpg" - }, - { - "name": "Prince Po", - "image_url": "http://s3.amazonaws.com/rapgenius/1354768383_tumblr_m4e3h3JIu51rrnvtco1_500.png" - }, - { - "name": "Problem", - "image_url": "http://media-cache-ec0.pinimg.com/736x/91/12/c5/9112c5e71840687c066eb9bf199a6c8b.jpg" - }, - { - "name": "Prodigy", - "image_url": "http://www.genycis.com/blog/php/prodigy.jpg" - }, - { - "name": "Professor Green", - "image_url": "http://www.thedrum.com/uploads/drum_basic_article/154317/main_images/ProfessorGreen.jpg" - }, - { - "name": "Project Pat", - "image_url": "http://purple-drank.com/wp-content/uploads/2013/04/Project-Pat-New.jpg" - }, - { - "name": "Proof", - "image_url": "http://api.ning.com/files/id8pBTnWr70l7rcG7ybqV4HsnNh-BPxmwnyZ9v0VIyOITru56VjRVTRg9zdpsZMShSK3pPDKlmcbXnYrswx9fJCRZh8Y5ooC/proof.jpg" - }, - { - "name": "Prozak", - "image_url": "http://favimages.com/wp-content/uploads/2012/08/rapper-prozak-celebrity-rap-photo.jpg" - }, - { - "name": "Psy", - "image_url": "http://www.soompi.com/wp-content/uploads/2013/05/psy-yahoo.jpg" - }, - { - "name": "Pusha T", - "image_url": "https://images.vice.com/noisey/content-images/article/pusha-t-interview-my-name-is-my-name/Pusha%20T%20Close.jpg" - }, - { - "name": "Queen Latifah", - "image_url": "http://media-cache-ec0.pinimg.com/736x/98/eb/23/98eb236df993bb4d0a7b2bbb6f8887d6.jpg" - }, - { - "name": "Q-Tip", - "image_url": "http://amarudontv.com/wp-content/uploads/2011/06/q-tip.jpg" - }, - { - "name": "Quan", - "image_url": "http://www.collegedj.net/wp-content/uploads/2011/09/Quan-rapper.jpg" - }, - { - "name": "Quavo", - "image_url": "http://www.globallnews.com/wp-content/uploads/2018/04/725393107_quavo_hunchoday_1522628161372_11247409_ver1.0_640_360.jpg" - }, - { - "name": "Quazedelic", - "image_url": "https://ilovemssugar.files.wordpress.com/2009/08/quazedelic.jpg" - }, - { - "name": "Queen Latifah", - "image_url": "http://media-cache-ec0.pinimg.com/736x/98/eb/23/98eb236df993bb4d0a7b2bbb6f8887d6.jpg" - }, - { - "name": "Queen Pen", - "image_url": "https://s-media-cache-ak0.pinimg.com/736x/48/19/d1/4819d1636cf36c92194437765638240b.jpg" - }, - { - "name": "The Quiett", - "image_url": "http://korcan50years.files.wordpress.com/2013/06/the-quiett-798x1024.jpg" - }, - { - "name": "Quincy Jones III", - "image_url": "http://theboombox.com/files/2010/05/david-banner-200ak050410.jpg" - }, - { - "name": "Qwazaar", - "image_url": "http://cdn.ticketfly.com/i/00/01/88/84/11-atxl1.jpg" - }, - { - "name": "Qwel", - "image_url": "http://img.karaoke-lyrics.net/img/artists/4536/qwel-247381.jpg" - }, - { - "name": "Rakim", - "image_url": "http://cps-static.rovicorp.com/3/JPG_400/MI0003/162/MI0003162077.jpg" - }, - { - "name": "RZA", - "image_url": "https://static01.nyt.com/images/2012/10/21/arts/21RZA1_SPAN/21RZA1_SPAN-jumbo.jpg" - }, - { - "name": "R. Kelly", - "image_url": "http://i.dailymail.co.uk/i/newpix/2018/04/16/21/4B25AB0C00000578-5622755-image-a-24_1523909544359.jpg" - }, - { - "name": "R.A. the Rugged Man", - "image_url": "http://www.kapu.or.at/sites/default/files/event/image/ruggednew1.jpg" - }, - { - "name": "Raekwon", - "image_url": "http://www.bkhiphopfestival.com/wp-content/uploads/2014/06/Raekwon.jpg" - }, - { - "name": "Rah Digga", - "image_url": "http://hiphopgoldenage.com/wp-content/uploads/2015/08/2012-music-topic-rah-digga.png" - }, - { - "name": "Rahzel", - "image_url": "http://www.blackouthiphop.com/blog/wp-content/uploads/2011/04/rahzel.jpg" - }, - { - "name": "Rakim", - "image_url": "http://cps-static.rovicorp.com/3/JPG_400/MI0003/162/MI0003162077.jpg" - }, - { - "name": "Rampage", - "image_url": "http://www.blackouthiphop.com/blog/wp-content/uploads/2012/01/rampage.jpg" - }, - { - "name": "Rap Monster", - "image_url": "http://xinspirit.files.wordpress.com/2013/06/rap-monster.jpg" - }, - { - "name": "Rappin' 4-Tay", - "image_url": "https://s3.amazonaws.com/hiphopdx-production/2016/10/Rappin-4-Tay_10-13-2016-596x447.jpg" - }, - { - "name": "Rapsody", - "image_url": "http://rollingout.com/wp-content/uploads/2014/05/rapsody.jpg" - }, - { - "name": "Ramey Dawoud", - "image_url": "https://upload.wikimedia.org/wikipedia/commons/7/70/Kashta_Live.jpg" - }, - { - "name": "Ras Kass", - "image_url": "http://cdn4.hiphoplead.com/static/2012/03/Ras-Kass.jpg" - }, - { - "name": "Rasheeda", - "image_url": "http://media-cache-ak0.pinimg.com/736x/df/01/4f/df014fca71f89f5efc4d58f27b1beb2a.jpg" - }, - { - "name": "Ravi", - "image_url": "https://upload.wikimedia.org/wikipedia/commons/thumb/7/7d/Ravi_-_2016_Gaon_Chart_K-pop_Awards_red_carpet.jpg/1200px-Ravi_-_2016_Gaon_Chart_K-pop_Awards_red_carpet.jpg" - }, - { - "name": "Ray Cash", - "image_url": "http://www.hipstrumentals.com/wp-content/uploads/2012/12/Ray-Cash-Bumpin-My-Music.jpg" - }, - { - "name": "Ray J", - "image_url": "http://www3.pictures.zimbio.com/pc/Rapper+Ray+J+spotted+Tru+night+club+Hollywood+0orxsqqyQ49x.jpg" - }, - { - "name": "Ray Luv", - "image_url": "https://upload.wikimedia.org/wikipedia/commons/thumb/9/91/Ray_Luv_performing_at_5th_Annual_AHSC_1.JPG/1200px-Ray_Luv_performing_at_5th_Annual_AHSC_1.JPG" - }, - { - "name": "Raz Fresco", - "image_url": "http://exclaim.ca/images/razfresco2.jpg" - }, - { - "name": "RBX", - "image_url": "http://www.longbeachindependent.com/wp-content/uploads/2015/03/rbx-rapper-long-beach1.jpg" - }, - { - "name": "The Real Roxanne", - "image_url": "https://s-media-cache-ak0.pinimg.com/736x/dd/e9/61/dde961ccc373460deb2bab6b8df479b8.jpg" - }, - { - "name": "Really Doe", - "image_url": "http://cdn.smosh.com/sites/default/files/ftpuploads/bloguploads/1113/least-badass-name-really-doe.jpg" - }, - { - "name": "Red Café", - "image_url": "http://www1.pictures.zimbio.com/gi/Red+Cafe+Interscope+Geffen+Promotions+Department+MlqC_HJwxQMl.jpg" - }, - { - "name": "Red Spyda", - "image_url": "http://16762-presscdn-0-89.pagely.netdna-cdn.com/wp-content/uploads/2012/08/red-spyda.png" - }, - { - "name": "Redfoo", - "image_url": "http://media.gettyimages.com/photos/rapper-redfoo-of-lmfao-arrives-for-party-rock-mondays-at-marquee-in-picture-id131805210" - }, - { - "name": "Redman", - "image_url": "http://djstorm.files.wordpress.com/2011/02/redman1.jpg" - }, - { - "name": "Reef the Lost Cauze", - "image_url": "http://thekey.xpn.org/aatk/files/2016/02/ReefCaliph-9726-620x413.jpg" - }, - { - "name": "Reema Major", - "image_url": "http://www.bet.com/topics/r/reema-major/_jcr_content/image.heroimage.dimg/__1411088698102/080312-topic-music-reema-major-rapper.jpg" - }, - { - "name": "Reks", - "image_url": "http://hypeverse.files.wordpress.com/2012/10/reks.jpg" - }, - { - "name": "Remy Ma", - "image_url": "https://s-media-cache-ak0.pinimg.com/736x/d9/79/0e/d9790e372e4df2baf687770b711968bf.jpg" - }, - { - "name": "Rhymefest", - "image_url": "http://i.huffpost.com/gen/2824474/images/h-CHE-RHYMEFEST-SMITH-348x516.jpg" - }, - { - "name": "Rich Boy", - "image_url": "http://wac.450f.edgecastcdn.net/80450F/theboombox.com/files/2009/01/rich-boy_011509_200.jpg" - }, - { - "name": "Rich Brian", - "image_url": "https://www.tinymixtapes.com/sites/default/files/imagecache/Article_Width/1801/rich-chigga-amen-cover-low-res.jpg" - }, - { - "name": "Rich Homie Quan", - "image_url": "http://www.judiciaryreport.com/images_4/rich-homie-quan-4-10-15-1.png" - }, - { - "name": "Rich The Kid", - "image_url": "https://gazettereview.com/wp-content/uploads/2017/05/rich4.jpg" - }, - { - "name": "Richie Rich", - "image_url": "http://www.rule4080.com/wp-content/uploads/2011/08/Richie_Rich_rapper.jpeg" - }, - { - "name": "Rick Rock", - "image_url": "http://s3.amazonaws.com/rapgenius/rick_rock.jpg" - }, - { - "name": "Rick Ross", - "image_url": "http://www.thefamouspeople.com/profiles/images/rick-ross-2.jpg" - }, - { - "name": "Rico Love", - "image_url": "http://media.gettyimages.com/photos/record-producer-singer-songwriter-and-rapper-rico-love-is-interviewed-picture-id177991029" - }, - { - "name": "Riff Raff", - "image_url": "http://images1.laweekly.com/imager/riff-raff/u/original/4248950/rrone.jpg" - }, - { - "name": "Rittz", - "image_url": "http://theciphershow.com/image/uploads/rittz.jpg" - }, - { - "name": "RJ", - "image_url": "http://images1.laweekly.com/imager/u/original/6044341/rj-kenneth-wynn.jpg" - }, - { - "name": "Rob Sonic", - "image_url": "http://cdn.ticketfly.com/i/00/01/30/07/57-exl.jpeg" - }, - { - "name": "Rob Stone", - "image_url": "https://i1.wp.com/hypebeast.com/image/ht/2016/08/rob-stone-chill-bill-remix1.png" - }, - { - "name": "Roc Marciano", - "image_url": "https://s3.amazonaws.com/hiphopdx-production/2010/09/marciano_304.jpg" - }, - { - "name": "Rockie Fresh", - "image_url": "http://www.missinfo.tv/wp-content/uploads/2014/03/rockie-fresh.jpg.jpg" - }, - { - "name": "Rocko", - "image_url": "http://www.bet.com/content/dam/betcom/images/2013/06/Shows/Music-News/mn13_rockoadon_final.jpg" - }, - { - "name": "Roger Troutman", - "image_url": "https://www.thefamousbirthdays.com/photo/en/c/c6/wk_60128_40208_large.jpg" - }, - { - "name": "Romeo Miller", - "image_url": "http://www1.pictures.zimbio.com/gi/BET+Awards+11+Arrivals+XFI1wmisCnBx.jpg" - }, - { - "name": "Ronnie Radke", - "image_url": "http://www.altpress.com/images/uploads/feature_header_images/ronnie_radke_list_2015.jpg" - }, - { - "name": "Roots Manuva", - "image_url": "http://dis.resized.images.s3.amazonaws.com/940x535/27742.jpeg" - }, - { - "name": "Roscoe", - "image_url": "http://www4.pictures.stylebistro.com/gi/Roscoe%2BDash%2BScarves%2BPatterned%2BScarf%2B8lklV6z5LqUl.jpg" - }, - { - "name": "Roscoe Dash", - "image_url": "http://www.africamusiclaw.com/wp-content/uploads/2012/09/Rapper-Roscoe-Dash-Says-Wale-and-Kanye-Did-not-Give-Credits.jpg" - }, - { - "name": "Rowdy Rebel", - "image_url": "https://images.vice.com/noisey/content-images/article/rowdy-rebel-interview/Screen-Shot-2014-09-19-at-1-26-44-PM.jpg" - }, - { - "name": "Roxanne Shanté", - "image_url": "https://s-media-cache-ak0.pinimg.com/564x/aa/0a/11/aa0a117dbca70d9867e8ec57cda0209f.jpg" - }, - { - "name": "Royce da 5'9", - "image_url": "http://www.ihiphop.com/wp-content/uploads/2011/08/royce.jpg" - }, - { - "name": "Russ", - "image_url": "http://dailychiefers.com/wp-content/media/2016/04/russ.jpg" - }, - { - "name": "Rucka Rucka Ali", - "image_url": "https://www.thefamouspeople.com/profiles/images/rucka-rucka-ali-1.jpg" - }, - { - "name": "Rydah J. Klyde", - "image_url": "http://siccness.net/wp/wp-content/uploads/2016/08/dj-fresh-rydah-j-klyde.jpg" - }, - { - "name": "Rye Rye", - "image_url": "http://www.bet.com/topics/r/rye-rye/_jcr_content/image.heroimage.dimg/__1411951278058/051512-shows-106-park-rye-rye-9.jpg" - }, - { - "name": "RZA", - "image_url": "http://www.sosoactive.com/wp-content/uploads/2014/04/rza-2.jpg" - }, - { - "name": "Roy Woods", - "image_url": "http://bendxl.com/wp-content/uploads/2015/07/ROYWoodsOVO.jpg" - }, - { - "name": "Slick Rick", - "image_url": "http://jobbiecrew.com/wp-content/uploads/2015/04/0slickrick2.jpg" - }, - { - "name": "Snoop Dogg", - "image_url": "https://media.nbcnewyork.com/images/1200*675/Snoop+Dogg3.jpg" - }, - { - "name": "Skabo", - "image_url": "https://upload.wikimedia.org/wikipedia/commons/8/83/Bosko.jpg" - }, - { - "name": "Saafir", - "image_url": "http://www.okayplayer.com/wp-content/uploads/2013/02/saafir.jpg" - }, - { - "name": "Sabac Red", - "image_url": "http://wildstylemag.com/wp-content/uploads/Sabac-Red.gif" - }, - { - "name": "Sacario", - "image_url": "http://www.hellhoundmusic.com/wp-content/uploads/2013/11/sacario-1.jpg" - }, - { - "name": "Sadat X", - "image_url": "http://factmag-images.s3.amazonaws.com/wp-content/uploads/2012/10/sadat-x-10.25.2012.j.jpeg" - }, - { - "name": "Sadistik", - "image_url": "http://potholesinmyblog.com/wp-content/uploads/2013/01/sadistik-mic.jpg" - }, - { - "name": "Sage Francis", - "image_url": "https://consequenceofsound.files.wordpress.com/2014/03/sage-francis_1276598819.jpg" - }, - { - "name": "Sage the Gemini", - "image_url": "https://images.vice.com/noisey/content-images/article/sage-the-gemini-doesnt-listen-to-rap/E9FA1B25DC26BCB317C236E1CD46175920132510124230269.jpg" - }, - { - "name": "Saigon", - "image_url": "http://thekoalition.com/images/2011/01/Saigon.jpg" - }, - { - "name": "Sam Sneed", - "image_url": "http://www.post-gazette.com/image/2013/10/17/Sam-Sneed.jpg" - }, - { - "name": "Sammy Adams", - "image_url": "https://s3.amazonaws.com/rapgenius/1374121236_Sam_Adams-Bostons_Boy_Album.jpg" - }, - { - "name": "San E", - "image_url": "http://www.soompi.com/wp-content/uploads/2014/10/1013-san-e.jpg" - }, - { - "name": "San Quinn", - "image_url": "http://www.therealspill.com/uploads/2/0/6/4/2064107/5641474.jpg" - }, - { - "name": "Sarkodie", - "image_url": "http://www.thecable.ng/wp-content/uploads/2015/06/sak1.jpg" - }, - { - "name": "Sauce Money", - "image_url": "http://images.rapgenius.com/709f4d670c0505627849b8664f8276de.422x530x1.jpg" - }, - { - "name": "Savage", - "image_url": "https://i1.wp.com/hypebeast.com/image/2016/08/off-white-2016-fw-collection-21-savage-lookbook-2.jpg" - }, - { - "name": "Scarface", - "image_url": "http://www.rapbasement.com/wp-content/uploads/2015/10/SCARFACE.jpg" - }, - { - "name": "Schoolboy Q", - "image_url": "http://www.rapbasement.com/wp-content/uploads/2014/02/Schoolboy_Q_Speaks_on_best_tde_rapper.jpg" - }, - { - "name": "Schoolly D", - "image_url": "http://www.rapmusicguide.com/blog/wp-content/uploads/2013/12/Schoolly-D-arms.jpg" - }, - { - "name": "Scott Storch", - "image_url": "https://s3.amazonaws.com/hiphopdx-production/2014/02/Scott-Storch_02-17-2014-300x300.jpg" - }, - { - "name": "Scotty", - "image_url": "https://upload.wikimedia.org/wikipedia/commons/1/1b/Scotty_%28Scotty_ATL%29.jpg" - }, - { - "name": "Scram Jones", - "image_url": "http://i1.wp.com/allhiphop.com/wp-content/uploads/2013/10/scram-jones.jpg" - }, - { - "name": "Scribe", - "image_url": "http://static2.stuff.co.nz/1296207390/967/4595967.jpg" - }, - { - "name": "Scrilla", - "image_url": "http://media.nbcmiami.com/images/1200*675/Young-Scrilla.jpg" - }, - { - "name": "Scrufizzer", - "image_url": "http://jumpoff.tv/assets/images/made/assets/images/posts/12dec11_scrufizzer_war_MAIN_580_352.jpg" - }, - { - "name": "Sean Combs", - "image_url": "http://s1.ibtimes.com/sites/www.ibtimes.com/files/styles/lg/public/2012/04/20/265198-rapper-sean-diddy-combs.jpg" - }, - { - "name": "Sean Paul", - "image_url": "http://wac.450f.edgecastcdn.net/80450F/theboombox.com/files/2009/12/seanp_bbx_200_122309.jpg" - }, - { - "name": "Sean Price", - "image_url": "http://img2.timeinc.net/people/i/2015/news/150824/sean-price-435.jpg" - }, - { - "name": "Sean T", - "image_url": "http://www.talentedprofiles.com/wp-content/uploads/2016/02/Rapper-Big-Sean-600x600_t.jpg" - }, - { - "name": "Serengeti", - "image_url": "http://www.anticon.com/sites/default/files/imagecache/artist/White%20Collar%209.jpg" - }, - { - "name": "Serius Jones", - "image_url": "http://www2.pictures.zimbio.com/gi/Serius+Jones+Sean+Diddy+Combs+Hosts+Pool+Party+3ntNwfoXEMil.jpg" - }, - { - "name": "Sev Statik", - "image_url": "http://i.ytimg.com/vi/vbQhHs2_10s/maxresdefault.jpg" - }, - { - "name": "Sha Money XL", - "image_url": "http://favimages.com/wp-content/uploads/2012/08/rapper-sha-money-xl-celebrity-singer-photos.jpg" - }, - { - "name": "Shabazz the Disciple", - "image_url": "http://i1.ytimg.com/vi/UzKEnCSozmA/maxresdefault.jpg" - }, - { - "name": "Shad", - "image_url": "http://www.chartattack.com/wp-content/uploads/2014/04/shad.jpg" - }, - { - "name": "Shade Sheist", - "image_url": "http://beatsandrhymesfc.com/wp-content/uploads/2012/04/ss-bb.jpg" - }, - { - "name": "Shady Nate", - "image_url": "http://bloximages.newyork1.vip.townnews.com/montereycountyweekly.com/content/tncms/assets/v3/editorial/e/b5/eb5a2b49-dc95-557a-9967-09f87b6818a1/519523d286802.image.jpg" - }, - { - "name": "Shaggy", - "image_url": "http://img.karaoke-lyrics.net/img/artists/10440/shaggy-132443.jpg" - }, - { - "name": "Shaggy 2 Dope", - "image_url": "http://www.faygoluvers.net/v5/wp-content/uploads/2013/05/Shaggy-2-Dope1.jpg" - }, - { - "name": "Shaquille O'Neal", - "image_url": "https://nextshark-vxdsockgvw3ki.stackpathdns.com/wp-content/uploads/2018/04/maxresdefault.jpg" - }, - { - "name": "Shawnna", - "image_url": "http://www.hip-hopvibe.com/wp-content/uploads/2012/05/Shawnna.jpg" - }, - { - "name": "Shawty Lo", - "image_url": "http://jusflippin.com/wp-content/uploads/2011/07/Shawty-Lo.jpg" - }, - { - "name": "Sheek Louch", - "image_url": "http://highlineballroom.com/assets/Sheek-Louch.jpg" - }, - { - "name": "Shing02", - "image_url": "http://media-cache-ec0.pinimg.com/736x/78/23/8e/78238e9ab30512cfb4d52af6ccb40292.jpg" - }, - { - "name": "Sho Baraka", - "image_url": "https://i0.wp.com/allhiphop.com/wp-content/uploads/2017/02/rapper-sho-baraka-banned-from-ch.jpg" - }, - { - "name": "Shock G", - "image_url": "https://upload.wikimedia.org/wikipedia/commons/c/ca/ShkWiki9.jpg" - }, - { - "name": "Shorty", - "image_url": "http://starcasm.net/wp-content/uploads/2010/12/Magnolia-Shorty-490x445.jpg" - }, - { - "name": "Shorty Mack", - "image_url": "https://i0.wp.com/www.hip-hopvibe.com/wp-content/uploads/2013/01/Shorty-Mack.jpg" - }, - { - "name": "Shwayze", - "image_url": "http://www.aceshowbiz.com/images/wennpic/wenn5188509.jpg" - }, - { - "name": "Shy Glizzy", - "image_url": "http://www.trbimg.com/img-57a2315f/turbine/bal-shy-glizzy-young-jefe-2-cut-it-royal-farms-arena" - }, - { - "name": "Shyheim", - "image_url": "http://www.eurweb.com/wp-content/uploads/2014/07/Shyheim_04-24-2013-300x300.jpg" - }, - { - "name": "Shyne", - "image_url": "http://www.hip-hopvibe.com/wp-content/uploads/2012/01/Shyne-2.jpg" - }, - { - "name": "Silentó", - "image_url": "https://cmgajcmusic.files.wordpress.com/2015/06/silento-2.jpg" - }, - { - "name": "Silkk the Shocker", - "image_url": "http://2.bp.blogspot.com/_B1LlYh6iKqs/TK0gNRXZJ_I/AAAAAAAAC7g/vT3VW7tT8C4/s1600/silkk-the-shocker.jpg" - }, - { - "name": "Silla", - "image_url": "http://rap.de/wp-content/uploads/silla-rapde.png" - }, - { - "name": "Simon D", - "image_url": "http://3.bp.blogspot.com/-o789bRAl2C8/UaSCreHk8lI/AAAAAAAAD6A/671amIdPmxA/s1600/simon+d.jpg" - }, - { - "name": "Sir Jinx", - "image_url": "http://www.dubcnn.com/wp-content/uploads/2012/12/jinx-pic1000001.png" - }, - { - "name": "Sir Mix-a-Lot", - "image_url": "https://usatftw.files.wordpress.com/2018/03/pjimage-23-e1520876763340.jpg" - }, - { - "name": "Sirah", - "image_url": "http://www3.pictures.zimbio.com/gi/Sirah+55th+Annual+GRAMMY+Awards+Press+Room+AQYNmS4HQPUl.jpg" - }, - { - "name": "Skee-Lo", - "image_url": "http://whatisplayinginmyitunes.files.wordpress.com/2012/12/skee-lo.jpg" - }, - { - "name": "Skeme", - "image_url": "http://rapdose.com/wp-content/uploads/2014/05/Skeme-Believe.jpg" - }, - { - "name": "Skepta", - "image_url": "http://runthetrap.com/wp-content/uploads/2015/03/skepta-50bb835c0adb7.jpg" - }, - { - "name": "Skinnyman", - "image_url": "http://eslhiphop.com/wp-content/uploads/2013/06/skinnyman.png" - }, - { - "name": "Skooly", - "image_url": "https://i.ytimg.com/vi/6mZHPf-ZvFA/maxresdefault.jpg" - }, - { - "name": "Skyzoo", - "image_url": "http://www.ballerstatus.com/wp-content/uploads/2009/05/skyzoo.jpg" - }, - { - "name": "SL Jones", - "image_url": "http://www.audibletreats.com/Media/newspics/SL_Jones-08.jpg" - }, - { - "name": "Sleepy Brown", - "image_url": "http://s3.amazonaws.com/rapgenius/sleepy-brown-129.jpg" - }, - { - "name": "Slick Rick", - "image_url": "http://jobbiecrew.com/wp-content/uploads/2015/04/0slickrick2.jpg" - }, - { - "name": "Slim Jxmmi", - "image_url": "https://images.genius.com/7e898276f657a3d38d0febfee65a7280.640x640x1.jpg" - }, - { - "name": "Slim Thug", - "image_url": "http://1.bp.blogspot.com/-qfh469KzybM/TkT0T9dTN9I/AAAAAAAAAY8/uB-uoTiwCv4/s1600/Slim-Thug-Rapper-Gun.jpg" - }, - { - "name": "Slug", - "image_url": "http://unspokenstyle.files.wordpress.com/2011/01/slug.jpg" - }, - { - "name": "Smitty", - "image_url": "https://upload.wikimedia.org/wikipedia/commons/thumb/3/32/Smitty-rapper.jpg/1200px-Smitty-rapper.jpg" - }, - { - "name": "Smoke DZA", - "image_url": "http://massappeal.com/wp-content/uploads/2014/03/smoke-dza-.png" - }, - { - "name": "Smooth", - "image_url": "https://i.ytimg.com/vi/KmtRq-iucII/maxresdefault.jpg" - }, - { - "name": "Smoothe da Hustler", - "image_url": "https://i.ytimg.com/vi/e_zc1qBlu-c/maxresdefault.jpg" - }, - { - "name": "Sniper J", - "image_url": "http://medias.2kmusic.com/uploads/2010/03/19/img-1269021506-cb5ef53ef55ea9e90358d91d4e4b25f7.jpg" - }, - { - "name": "Snoop Dogg", - "image_url": "https://media.nbcnewyork.com/images/1200*675/Snoop+Dogg3.jpg" - }, - { - "name": "Snootie Wild", - "image_url": "https://images.genius.com/e0d17ec7650545545dabdf923613065c.600x600x1.jpg" - }, - { - "name": "Snow Tha Product", - "image_url": "http://blog.krizzkaliko.com/wp-content/uploads/2012/11/SNow-On-Kaliko.jpg" - }, - { - "name": "Soce the elemental wizard", - "image_url": "https://upload.wikimedia.org/wikipedia/commons/thumb/b/b7/Soce.jpg/1200px-Soce.jpg" - }, - { - "name": "Sole", - "image_url": "http://lobermanhiphop.files.wordpress.com/2013/02/sole.jpg" - }, - { - "name": "Solzilla", - "image_url": "https://upload.wikimedia.org/wikipedia/commons/thumb/6/6a/Sol_%28Seattle_rapper%29_03.jpg/1200px-Sol_%28Seattle_rapper%29_03.jpg" - }, - { - "name": "Sonny Digital", - "image_url": "https://nationofbillions.com/wp-content/uploads/2016/07/SONNYDIGITAL_1_Wireless.jpg" - }, - { - "name": "SonReal", - "image_url": "http://www.digitaljournal.com/img/2/7/4/3/7/7/i/1/7/0/o/BWsuit_15.JPG" - }, - { - "name": "Sonsee", - "image_url": "http://img2-ak.lst.fm/i/u/avatar170s/ed38054f95d64ddf9b5e6a53f9702497.jpg" - }, - { - "name": "Soopafly", - "image_url": "http://cache1.asset-cache.net/xc/136582867-rapper-soopafly-visits-the-late-show-with-filmmagic.jpg" - }, - { - "name": "Soulja Boy", - "image_url": "http://www.wallpaperup.com/uploads/wallpapers/2014/03/04/284914/a82261adb443e8646b88831a16649ffe.jpg" - }, - { - "name": "Soulja Slim", - "image_url": "http://listofdeadrappers.files.wordpress.com/2011/09/soulja_slim.jpg" - }, - { - "name": "South Park Mexican", - "image_url": "http://ww3.hdnux.com/photos/04/30/72/1150654/0/960x540.jpg" - }, - { - "name": "Southside", - "image_url": "https://i.ytimg.com/vi/L95z8KjFPZo/maxresdefault.jpg" - }, - { - "name": "SpaceGhostPurrp", - "image_url": "http://images1.miaminewtimes.com/imager/spaceghostpurrp-will-not-abide-the-fakes/u/original/6387038/7915708.0.jpg" - }, - { - "name": "Special Ed", - "image_url": "http://i1.ytimg.com/vi/XXOHX9HBeXk/maxresdefault.jpg" - }, - { - "name": "Spice 1", - "image_url": "http://s3.amazonaws.com/rapgenius/1378684361_tumblr_mi7aw9N3cj1qzx6s2o1_500.jpg" - }, - { - "name": "Spider Loc", - "image_url": "http://www.datwav.com/wp-content/uploads/2017/06/G-Unit-Rapper-Spider-Loc.jpg" - }, - { - "name": "Spoonie Gee", - "image_url": "http://www.boogitybeat.com/images/BB13068.jpg" - }, - { - "name": "Spose", - "image_url": "http://img3.wikia.nocookie.net/__cb20111103180051/rap/images/d/d7/Spose.png" - }, - { - "name": "Spot", - "image_url": "https://upload.wikimedia.org/wikipedia/commons/6/6c/SPOT_January_2012_Photoshoot.jpg" - }, - { - "name": "Stalley", - "image_url": "http://blahblahblahscience.com/wp-content/uploads/2014/09/stalley.jpg" - }, - { - "name": "Starlito", - "image_url": "http://factmag-images.s3.amazonaws.com/wp-content/uploads/2010/02/starlito-sq-39399222.jpg" - }, - { - "name": "Stat Quo", - "image_url": "http://hiphopscholar.files.wordpress.com/2008/09/stat_quo.jpg" - }, - { - "name": "Static Major", - "image_url": "http://3.bp.blogspot.com/_DuzxFBl8bfQ/TKdHgLphHHI/AAAAAAAAAlA/e4rL00OHn-I/s1600/static+major+1.jpg" - }, - { - "name": "Statik Selektah", - "image_url": "http://www.tunecore.com/blog/wp-content/uploads/2015/05/statik.selektah-actual_wide-970ed5943d6d8b812a0e74a38aac7f8a2d1ae196-s6-c30.jpg" - }, - { - "name": "Steady B", - "image_url": "http://ring.cdandlp.com/lower/photo_grande/115261787.jpg" - }, - { - "name": "Stevie Joe", - "image_url": "http://siccness.net/wp/wp-content/uploads/2016/02/Stevie_Joe.jpg" - }, - { - "name": "Stevie Stone", - "image_url": "http://faygoluvers.net/v5/wp-content/uploads/2012/09/steviestone101912.jpg" - }, - { - "name": "Stezo", - "image_url": "http://phaseonemusic.com/wp-content/uploads/2012/02/STEZO+FREAK+THE+FUNK+COVER+1.jpg" - }, - { - "name": "Stitches", - "image_url": "https://pmchollywoodlife.files.wordpress.com/2015/12/stitches-the-game-insta-ftr.jpg" - }, - { - "name": "Sticky Fingaz", - "image_url": "http://interestingcelebrities.com/pictures/sticky_fingaz.jpg" - }, - { - "name": "Stoka", - "image_url": "https://www.hhunity.org/wp-content/uploads/2014/11/Stoka-Agram-Audio.png" - }, - { - "name": "Stoupe the Enemy of Mankind", - "image_url": "http://images.rapgenius.com/8ed6eb4ea61413e34c0a67f5e04f3b3c.600x340x1.jpg" - }, - { - "name": "Stormzy", - "image_url": "https://d.ibtimes.co.uk/en/full/1475476/stormzy.jpg" - }, - { - "name": "Stretch", - "image_url": "http://img2.wikia.nocookie.net/__cb20130717123821/hip-hop-music/images/6/69/Stretch.jpg" - }, - { - "name": "Styles P", - "image_url": "http://favimages.com/wp-content/uploads/2012/08/rapper-styles-p-singer-celebrity-hip-hop.jpg" - }, - { - "name": "Substantial", - "image_url": "http://www.hiphopsite.com/wp-content/uploads/2010/06/Substantial.jpg" - }, - { - "name": "Suga Free", - "image_url": "http://s3.amazonaws.com/rapgenius/1361309346_l.jpg" - }, - { - "name": "Suffa", - "image_url": "http://i.dailymail.co.uk/i/pix/2015/02/28/262B331400000578-2973396-In_the_zone_The_Suffa_MC_from_the_Hilltop_Hoods_also_took_to_the-a-13_1425134138732.jpg" - }, - { - "name": "Swagg Man", - "image_url": "http://www.famousbirthdays.com/headshots/swagg-man-7.jpg" - }, - { - "name": "Sweet Tee", - "image_url": "http://www.rapindustry.com/sweet_tee_in.jpg" - }, - { - "name": "Swings", - "image_url": "http://cdn.koreaboo.com/wp-content/uploads/2014/11/htm_20141106171738c010c0111.jpg" - }, - { - "name": "Swizz Beatz", - "image_url": "http://www1.pictures.zimbio.com/gi/Swizz+Beatz+40th+American+Music+Awards+Arrivals+cTuFcCa4A2sl.jpg" - }, - { - "name": "SwizZz", - "image_url": "http://favimages.com/wp-content/uploads/2012/08/rapper-swizzz-star-rap-hip-hop.jpg" - }, - { - "name": "Syd Tha Kyd", - "image_url": "https://i1.wp.com/hypebeast.com/image/2012/03/syd-tha-kyd-by-lance-bangs-edit-0.jpg" - }, - { - "name": "SZA", - "image_url": "http://www.billboard.com/files/styles/promo_650/public/media/sza-650.jpg" - }, - { - "name": "T.I.", - "image_url": "http://media-cache-ec0.pinimg.com/736x/d8/6e/c4/d86ec4828778e4997a77313619d0d370.jpg" - }, - { - "name": "Tyler the Creator", - "image_url": "https://s-media-cache-ak0.pinimg.com/736x/fa/52/a6/fa52a6dd8c76a533092056f173900e80.jpg" - }, - { - "name": "T La Rock", - "image_url": "http://okp-cdn.okayplayer.com/wp-content/uploads/2017/10/Screen-Shot-2017-10-20-at-9.55.59-PM-715x719.png" - }, - { - "name": "T-Bone", - "image_url": "http://www.christianmusic.com/PHOTOS/t_bone-2.jpg" - }, - { - "name": "T-Nutty", - "image_url": "http://siccness.net/wp/wp-content/uploads/2016/02/nutty.png" - }, - { - "name": "T-Pain", - "image_url": "http://www.rapbasement.com/wp-content/uploads/2014/02/grammy-award-winning-rapper-t-pain-Talks-Chance-The-Rapper.jpg" - }, - { - "name": "T-Wayne", - "image_url": "https://images.rapgenius.com/822e2be4f84c2ecdada82f017f75b7fb.960x960x1.jpg" - }, - { - "name": "T. Mills", - "image_url": "http://www2.pictures.zimbio.com/gi/T+Mills+Arrivals+Young+Hollywood+Awards+Part+NJl90h8MOpal.jpg" - }, - { - "name": "T.I.", - "image_url": "http://media-cache-ec0.pinimg.com/736x/d8/6e/c4/d86ec4828778e4997a77313619d0d370.jpg" - }, - { - "name": "T.O.P", - "image_url": "http://i2.asntown.net/h2/Korea/7/kpop-bigbang/TOP-bigbang-fashion06.jpg" - }, - { - "name": "Tabi Bonney", - "image_url": "https://thisguysworld.files.wordpress.com/2010/07/tabi.jpg" - }, - { - "name": "Tablo", - "image_url": "http://images5.fanpop.com/image/photos/30500000/Tablo-tablo-30511618-333-500.jpg" - }, - { - "name": "Taio Cruz", - "image_url": "http://colunas.multishowfm.globoradio.globo.com/platb/files/806/2010/11/Taio-Cruz-.jpg" - }, - { - "name": "Talib Kweli", - "image_url": "http://media2.fdncms.com/orlando/imager/u/original/2404812/talib_kweli.jpg" - }, - { - "name": "Target", - "image_url": "http://static5.businessinsider.com/image/4e9876896bb3f74864000017/rapper-rick-ross-was-the-target-of-a-drive-by-shooting-in-florida.jpg" - }, - { - "name": "Tay Dizm", - "image_url": "http://static.djbooth.net/pics-artist-rec/Tay_Dizm_1.jpg" - }, - { - "name": "Tay-K", - "image_url": "https://hypb.imgix.net/image/2017/10/ybn-nahmir-tay-k-the-race-remix-0.jpg" - }, - { - "name": "TD Cruze", - "image_url": "http://www.berliner-kurier.de/image/26201312/max/600/450/49d662a34b7203e4183c320bf0785416/UF/ted-cruz.jpg" - }, - { - "name": "Teairra Marí", - "image_url": "http://hw-img.datpiff.com/mb740e75/Teairra_Marie_Unfinished_Business-front-large.jpg" - }, - { - "name": "Tech N9ne", - "image_url": "http://vegasimpulse.files.wordpress.com/2012/04/tech-n9ne-2.jpg" - }, - { - "name": "Tedashii", - "image_url": "http://images.christianpost.com/full/75663/tedashii.jpg" - }, - { - "name": "TeeFlii", - "image_url": "http://www3.pictures.zimbio.com/gi/TeeFlii+BET+AWARDS+14+Day+1+Kp7kNUhHFvyl.jpg" - }, - { - "name": "Tee Grizzley", - "image_url": "https://i1.wp.com/hypebeast.com/image/2016/11/detroit-rapper-tee-grizzley-first-day-out-video-0.jpg" - }, - { - "name": "Tekitha", - "image_url": "http://rollingout.com/wp-content/uploads/2015/12/Anthony-Hamilton-380x280.jpg" - }, - { - "name": "Tela", - "image_url": "http://nebula.wsimg.com/88482f2967eb7b323b8df1fd1eff4d3a" - }, - { - "name": "Termanology", - "image_url": "http://static.djbooth.net/pics-artist/termanology.jpg" - }, - { - "name": "Terrace Martin", - "image_url": "https://lastfm-img2.akamaized.net/i/u/57e7f81f5b8f4d2daea075100bf0473a.png" - }, - { - "name": "Teyana Taylor", - "image_url": "http://worldofblackheroes.files.wordpress.com/2012/03/teyana-taylor-17.jpg" - }, - { - "name": "Tha Chill", - "image_url": "http://steadydippin.com/wp-content/uploads/Tha-Chill.jpg" - }, - { - "name": "Tha City Paper", - "image_url": "http://hw-img.datpiff.com/ma42439e/Tha_City_Paper_Paper_Aka_Tha_City_Paper_paper_Vie-front-large.jpg" - }, - { - "name": "Tha Trademarc", - "image_url": "http://s3.amazonaws.com/rapgenius/1363145335_John%20Cena%20%20Tha%20Trademarc%20JOHN_CENA___THA_TRADEMARCcolti.jpg" - }, - { - "name": "The-Dream", - "image_url": "http://thatgrapejuice.net/wp-content/uploads/2010/06/the-dream1.jpg" - }, - { - "name": "Theophilus London", - "image_url": "http://www2.pictures.zimbio.com/gi/Theophilus+London+Carlos+Campos+Presentation+NeU7Y7HGrqwl.jpg" - }, - { - "name": "Tiffany Foxx", - "image_url": "http://bloximages.newyork1.vip.townnews.com/stltoday.com/content/tncms/assets/v3/editorial/b/2c/b2cd2408-9233-5bff-9a8b-5d39bafa4029/50928305bb4ba.preview-620.jpg" - }, - { - "name": "Tim Dog", - "image_url": "http://assets.rollingstone.com/assets/2014/article/tim-dog-rapper-accused-of-faking-death-confirmed-dead-20140916/168425/large_rect/1401x788-retna2059832.jpg" - }, - { - "name": "Timaya", - "image_url": "http://www.360nobs.com/wp-content/uploads/2015/01/Jahbless1.jpg" - }, - { - "name": "Timbaland", - "image_url": "http://live.drjays.com/wp-content/uploads/2009/12/timbaland.jpg" - }, - { - "name": "Timbe", - "image_url": "http://live.drjays.com/wp-content/uploads/2009/12/timbaland.jpg" - }, - { - "name": "Tinie Tempah", - "image_url": "http://dollyumez.files.wordpress.com/2013/01/tinie-tempah.jpg" - }, - { - "name": "Tink (musician)", - "image_url": "https://cocoocd.files.wordpress.com/2013/04/228090_507024229347791_1052484062_n.jpg" - }, - { - "name": "TobyMac", - "image_url": "https://s-media-cache-ak0.pinimg.com/564x/e7/a8/9e/e7a89ea48cbf5822fb909ec267b79499.jpg" - }, - { - "name": "Tone Lōc", - "image_url": "http://media-cache-ak0.pinimg.com/736x/68/72/60/6872607c9c8e2dacc6a52a776d4b843a.jpg" - }, - { - "name": "Tone Trump", - "image_url": "http://www.ballerstatus.com/wp-content/uploads/2012/06/tonetrump.jpg" - }, - { - "name": "Tonedeff", - "image_url": "https://upload.wikimedia.org/wikipedia/commons/5/51/Tonedefflive.png" - }, - { - "name": "Toni Blackman", - "image_url": "http://www.womex.com/virtual/image/artist/toni_blackman_big_29989.jpg" - }, - { - "name": "Tony Yayo", - "image_url": "http://zmldajoker.com/wp-content/uploads/2012/08/Tony-Yayo.jpg" - }, - { - "name": "Too Short", - "image_url": "https://escobar300.files.wordpress.com/2011/08/tooshort.jpg" - }, - { - "name": "Torch (American)", - "image_url": "http://1.bp.blogspot.com/-XU66PTiuIIA/T36hTMQCXJI/AAAAAAAAAcU/5rfwuQ6TWAU/s1600/Torch_(US_rapper).jpg" - }, - { - "name": "Torch (German)", - "image_url": "http://leaveyournineathome.files.wordpress.com/2007/10/torch-blauer_samt.jpg" - }, - { - "name": "Tory Lanez", - "image_url": "http://cdn.ratedrnb.com/2016/10/tory-lanez.jpg" - }, - { - "name": "Tracey Lee", - "image_url": "http://madrapper.com/wp-content/uploads/2010/12/Lee1.jpg" - }, - { - "name": "Trae tha Truth", - "image_url": "https://media.thehypemagazine.com/wp-content/uploads/2018/04/trae-tha-truth-paras-griffin-1024x683.jpg" - }, - { - "name": "Tragedy Khadafi", - "image_url": "http://assets2.vice.com/images/content-images/2014/12/29/tragedy-khadafi-is-still-queensbridges-realest-456-body-image-1419881556.jpg" - }, - { - "name": "Travis Scott", - "image_url": "http://www1.pictures.zimbio.com/gi/Travis+Scott+Arrivals+BET+Awards+54GWNTvi2gDl.jpg" - }, - { - "name": "Traxamillion", - "image_url": "https://cbarap.files.wordpress.com/2014/05/traxamillion.jpg" - }, - { - "name": "Tray Deee", - "image_url": "https://unitedgangs.files.wordpress.com/2013/07/ta36tw1.jpg" - }, - { - "name": "Treach", - "image_url": "https://ionehellobeautiful.files.wordpress.com/2016/01/14520871976376.jpg" - }, - { - "name": "Trey Songz", - "image_url": "http://www.creativefan.com/important/cf/2012/08/trey-songz-tattoo/trey-songz-body-tattoo.jpg" - }, - { - "name": "Trick Daddy", - "image_url": "https://i1.wp.com/celebritybio.org/wp-content/uploads/2014/08/Trick-Daddy-Net-Worth.jpg" - }, - { - "name": "Trick-Trick", - "image_url": "http://ctt.marketwire.com/" - }, - { - "name": "Trina", - "image_url": "http://www.missxpose.com/wp-content/uploads/2011/11/trina-bet-photo-shoot-4.jpg" - }, - { - "name": "Trinidad James", - "image_url": "https://cbshot937.files.wordpress.com/2012/12/trinidad_james10.jpg" - }, - { - "name": "Trip Lee", - "image_url": "http://www.eewmagazine.com/images/Trip-Lee-Good-life.jpg" - }, - { - "name": "Trippie Redd", - "image_url": "http://hiphopheads.net/wp-content/uploads/2017/08/Trippie-Redd-1.jpg" - }, - { - "name": "Tristan Wilds", - "image_url": "https://s-media-cache-ak0.pinimg.com/736x/8c/a2/44/8ca24487846ce97afbae1ff967fb78c5--tristan-wilds-rapper.jpg" - }, - { - "name": "Troy Ave", - "image_url": "http://www.ballerstatus.com/wp-content/uploads/2016/05/tave.jpg" - }, - { - "name": "Tupac Shakur", - "image_url": "http://sahiphopmag.co.za/wp-content/uploads/2016/05/Rap-artist-Tupac-Shakur.jpg" - }, - { - "name": "Turf Talk", - "image_url": "http://www.wallpaperup.com/uploads/wallpapers/2013/12/01/181203/19ce36a2c8ceed416ad66fa6d96db889.jpg" - }, - { - "name": "Turk", - "image_url": "http://www.brothersonsports.com/wp-content/uploads/2014/12/turkandwayne.jpg" - }, - { - "name": "Tweedy Bird Loc", - "image_url": "http://steadydippin.com/wp-content/uploads/Tweedy-Bird-Loc.jpg" - }, - { - "name": "Twista", - "image_url": "http://www.trbimg.com/img-53503146/turbine/ct-twista-chicago-rap-durty-nellies-20140417-001/2048/1365x2048" - }, - { - "name": "Twisted Insane", - "image_url": "http://assets.audiomack.com/rap-ebashit/f6e96e7ed6b0e965062aaed0ab4a9983.jpeg" - }, - { - "name": "Ty Dolla Sign", - "image_url": "http://www.rapbasement.com/wp-content/uploads/2015/01/tydolla.jpg" - }, - { - "name": "Tyga", - "image_url": "http://www.eurweb.com/wp-content/uploads/2015/07/tyga.jpg" - }, - { - "name": "Tyler Joseph", - "image_url": "https://s-media-cache-ak0.pinimg.com/564x/02/1c/b9/021cb958f946bfa08f64aea9d90b1a5b.jpg" - }, - { - "name": "Tyler The Creator", - "image_url": "https://s-media-cache-ak0.pinimg.com/736x/fa/52/a6/fa52a6dd8c76a533092056f173900e80.jpg" - }, - { - "name": "Tyra Bolling", - "image_url": "http://www.famousbirthdays.com/faces/bolling-tyra-image.jpg" - }, - { - "name": "Verbal Jint", - "image_url": "https://www.allkpop.com/upload/2017/09/af_org/22120146/verbal-jint.jpg" - }, - { - "name": "U-God", - "image_url": "http://assets.rollingstone.com/assets/2014/albumreview/wu-tang-clan-a-better-tomorrow-20141218/178198/large_rect/1418859659/1401x788-Wu_Tang_Clan_JW_WBR_107(2).JPG" - }, - { - "name": "Ugly God", - "image_url": "http://dailychiefers.com/wp-content/media/2016/03/ugly-god.jpg" - }, - { - "name": "Uncle Murda", - "image_url": "http://hiphop-n-more.com/wp-content/uploads/2015/01/uncle-murda-2014-rap-up.jpg" - }, - { - "name": "Unk", - "image_url": "http://antoniofam.files.wordpress.com/2011/05/dj_unk.jpg" - }, - { - "name": "U$O", - "image_url": "http://images.stiften.dk/22/63622_1200_0_0_35_1921_1200_2.jpg" - }, - { - "name": "Wyclef Jean", - "image_url": "http://media.gettyimages.com/photos/rapper-wyclef-jean-performs-in-concert-at-brooklyn-bowl-on-march-29-picture-id518080012" - }, - { - "name": "V-Nasty", - "image_url": "http://images.complex.com/complex/image/upload/c_limit,w_680/fl_lossy,pg_1,q_auto/daxoo4uvasmysgziontg.jpg" - }, - { - "name": "V.I.C.", - "image_url": "http://www.bigbloc.com/proto/images/hiphop/V.I.C._.jpg" - }, - { - "name": "Vado", - "image_url": "http://messymandella.files.wordpress.com/2012/10/vado_.jpg" - }, - { - "name": "Vakill", - "image_url": "http://thamidwest.com/wp-content/uploads/Vakill.png" - }, - { - "name": "Val Young", - "image_url": "https://i.ytimg.com/vi/uxy12OgQL54/maxresdefault.jpg" - }, - { - "name": "Valete", - "image_url": "https://upload.wikimedia.org/wikipedia/commons/0/04/ValeteRapper.jpg" - }, - { - "name": "Vanilla Ice", - "image_url": "http://i.dailymail.co.uk/i/pix/2008/04_02/iceLFI1104_468x762.jpg" - }, - { - "name": "Vast Aire", - "image_url": "http://exclaim.ca/images/vast1.jpg" - }, - { - "name": "Verbal Jint", - "image_url": "https://www.allkpop.com/upload/2017/09/af_org/22120146/verbal-jint.jpg" - }, - { - "name": "Verse Simmonds", - "image_url": "https://i0.wp.com/allhiphop.com/wp-content/uploads/2012/02/verse-simmonds-1.png" - }, - { - "name": "Vic Mensa", - "image_url": "http://media-cache-ak0.pinimg.com/736x/91/aa/c1/91aac1b95e805342d2225913359ebd2b.jpg" - }, - { - "name": "Vince Staples", - "image_url": "http://i.dailymail.co.uk/i/newpix/2018/04/16/21/4B25AB0C00000578-5622755-image-a-24_1523909544359.jpg" - }, - { - "name": "Vinnie Paz", - "image_url": "http://favimages.com/wp-content/uploads/2012/08/rapper-vinnie-paz-celebrity-song-rap.jpg" - }, - { - "name": "Violent J", - "image_url": "http://www.celebdirtylaundry.com/wp-content/uploads/violent-j-stereo-stolen.jpg" - }, - { - "name": "Viper", - "image_url": "http://static.qobuz.com/images/covers/14/83/3610154048314_600.jpg" - }, - { - "name": "VL Mike", - "image_url": "http://themusicsover.com/wp-content/uploads/2008/04/vlmike2.jpg" - }, - { - "name": "Xzibit", - "image_url": "http://assets.nydailynews.com/polopoly_fs/1.330091.1314424298!/img/httpImage/image.jpg_gen/derivatives/article_1200/amd-xzibit-jpg.jpg" - }, - { - "name": "Waka Flocka Flame", - "image_url": "http://2.bp.blogspot.com/-32xuBz8T-dk/T8oPlIH1PjI/AAAAAAAAqb0/pVwsKQXbigU/s1600/99_waka-flocka.jpg" - }, - { - "name": "Wale", - "image_url": "http://upbjmu.files.wordpress.com/2010/04/wale.jpg" - }, - { - "name": "Warren G", - "image_url": "http://images.huffingtonpost.com/2014-06-23-WarrenG.jpg" - }, - { - "name": "Warryn Campbell", - "image_url": "http://www.famousbirthdays.com/thumbnails/campbell-warryn-medium.jpg" - }, - { - "name": "Watsky", - "image_url": "http://www.gannett-cdn.com/-mm-/ac1394dbdcca6a36cbf486633b129cd813095ac3/r=x404&c=534x401/local/-/media/USATODAY/USATODAY/2013/05/23/1369356877000-image-1305232056_4_3.jpg" - }, - { - "name": "Wax (rapper)", - "image_url": "http://s3.amazonaws.com/rapgenius/Big_Wax_in_Front_of_a_Fence.jpg" - }, - { - "name": "WC", - "image_url": "http://www3.pictures.zimbio.com/fp/Wc+WC+Performing+In+Vancouver+RlfP1TE81Vzl.jpg" - }, - { - "name": "Webbie", - "image_url": "https://messymandella.files.wordpress.com/2012/08/16.jpg" - }, - { - "name": "The Weeknd", - "image_url": "http://factmag-images.s3.amazonaws.com/wp-content/uploads/2013/02/the_weeknd_0205131.jpg" - }, - { - "name": "Westside Gunn", - "image_url": "http://247hiphopnews.com/wp-content/uploads/2017/06/WestSide-Gunn-JAYFORCE.COM_.png" - }, - { - "name": "Wikluh Sky", - "image_url": "https://a4-images.myspacecdn.com/images01/12/691bb215a8b471aa86fc0f11a46ddfdb/full.jpg" - }, - { - "name": "Will Smith", - "image_url": "http://www.clashmusic.com/sites/default/files/styles/article_feature/public/legacy/files/willsmith-freshprince.jpg" - }, - { - "name": "will.i.am", - "image_url": "http://i1.tribune.com.pk/wp-content/uploads/2013/04/538192-image-1366470972-209-640x480.JPG" - }, - { - "name": "Willie D", - "image_url": "http://siccness.net/wp/wp-content/uploads/2013/02/Willie-D-blackchair1.jpg" - }, - { - "name": "Willie the Kid", - "image_url": "http://static.djbooth.net/pics-artist/williethekid.jpg" - }, - { - "name": "Willow Smith", - "image_url": "http://i.dailymail.co.uk/i/pix/2010/12/26/article-1341770-0C9599D1000005DC-328_468x531.jpg" - }, - { - "name": "Willy Northpole", - "image_url": "http://www.bet.com/topics/w/willy-northpole/_jcr_content/image.heroimage.dimg/__1378865366064/081012-topic-music-willy-northpole.jpg" - }, - { - "name": "Wish Bone", - "image_url": "http://djrushmusic.files.wordpress.com/2011/05/wish.jpg" - }, - { - "name": "Witchdoctor", - "image_url": "http://www.cocaineblunts.com/blunts/wp-content/uploads/2007/11/witch3.jpg" - }, - { - "name": "Wiz Khalifa", - "image_url": "http://farm8.staticflickr.com/7154/6622364753_1b2ab906b4.jpg" - }, - { - "name": "Wizkid", - "image_url": "http://www.thenet.ng/wp-content/uploads/2012/07/wale_wizkid-1.jpg" - }, - { - "name": "Wrekonize", - "image_url": "https://s-media-cache-ak0.pinimg.com/736x/a6/03/8d/a6038dcfe1d2068294fd3991603bedcf.jpg" - }, - { - "name": "Wyclef Jean", - "image_url": "http://media.gettyimages.com/photos/rapper-wyclef-jean-performs-in-concert-at-brooklyn-bowl-on-march-29-picture-id518080012" - }, - { - "name": "X-Raided", - "image_url": "http://siccness.net/wp/wp-content/uploads/2016/03/xraided.jpg" - }, - { - "name": "XV", - "image_url": "https://upload.wikimedia.org/wikipedia/commons/thumb/4/4e/XV_performance_Dancefestopia_2013_2014-01-28_00-39.jpg/1200px-XV_performance_Dancefestopia_2013_2014-01-28_00-39.jpg" - }, - { - "name": "Xzibit", - "image_url": "http://assets.nydailynews.com/polopoly_fs/1.330091.1314424298!/img/httpImage/image.jpg_gen/derivatives/article_1200/amd-xzibit-jpg.jpg" - }, - { - "name": "XXXTentacion", - "image_url": "https://dancehallhiphop.com/wp-content/uploads/2017/12/XXXTentacion-rapper-800x565.jpg" - }, - { - "name": "X Clan", - "image_url": "http://www.xxlmag.com/files/2015/03/x-clan-feat2.jpg" - }, - { - "name": "Yolandi Visser", - "image_url": "https://i.pinimg.com/originals/d0/fd/b2/d0fdb22ac606edd8f1bd15abd8d67faa.jpg" - }, - { - "name": "Young Jeezy", - "image_url": "http://pennylibertygbow.files.wordpress.com/2012/02/youngjeezy3.jpg" - }, - { - "name": "Ya Boy", - "image_url": "http://www.yorapper.com/Photos/ya-boy-rapper.jpg" - }, - { - "name": "Yaki Kadafi", - "image_url": "https://40.media.tumblr.com/d340fd47b49c53270809188a633dd53b/tumblr_nnhcxjUrQ41tm7i3uo1_500.jpg" - }, - { - "name": "Yazz The Greatest", - "image_url": "http://l7.alamy.com/zooms/ed94feec8a1b4ca9a29552f71c0625ac/philadelphia-pa-usa-15th-may-2016-american-rapper-yazz-the-greatest-g1ppkr.jpg" - }, - { - "name": "YBN Nahmir", - "image_url": "https://upload.wikimedia.org/wikipedia/commons/thumb/6/6e/YBN-Nahmir-2018.png/1200px-YBN-Nahmir-2018.png" - }, - { - "name": "YC", - "image_url": "http://www2.pictures.zimbio.com/gi/YC+BET+Awards+11+Press+Room+RRqra9BH48Ql.jpg" - }, - { - "name": "YDG", - "image_url": "http://www.bntnews.co.uk/images/news/2014/z7rqhmv4d3wjw5nffyob82va89tuo6me.jpg" - }, - { - "name": "Yelawolf", - "image_url": "http://3.bp.blogspot.com/-tOoHr9RZwUA/TjvmXyGFLWI/AAAAAAAAALg/tNy7P4_BWy4/s1600/Yelawolf-994x1024.jpg" - }, - { - "name": "YFN Lucci", - "image_url": "https://www.trapworldhiphop.com/wp-content/uploads/YFN-Lucci.jpg" - }, - { - "name": "YG", - "image_url": "https://s-media-cache-ak0.pinimg.com/736x/39/40/81/3940811a323f82520ca394aa7cec923f.jpg" - }, - { - "name": "Yo Gotti", - "image_url": "https://s-media-cache-ak0.pinimg.com/736x/b8/25/70/b82570e97603b42d3ff6f8dc26d2d0c5.jpg" - }, - { - "name": "Yo Yo Honey Singh", - "image_url": "http://media2.intoday.in/indiatoday/images/stories/honey-4_650_090214091121.jpg" - }, - { - "name": "Yoon Mi-rae", - "image_url": "http://media.tumblr.com/tumblr_m5sq6s8kb41r84myb.jpg" - }, - { - "name": "Young Bleed", - "image_url": "http://udgsounds.com/wp-content/uploads/2016/01/young-bleed-pic-for-interview-1.jpg" - }, - { - "name": "Young Buck", - "image_url": "http://favimages.com/wp-content/uploads/2012/08/rapper-young-buck-hip-hop-fame-rap.jpg" - }, - { - "name": "Young Chop", - "image_url": "http://rollingout.com/wp-content/uploads/2014/11/young_chop.jpg" - }, - { - "name": "Young Chris", - "image_url": "http://hustlebunny.com/content/2012/08/young-chris-rapper.jpg" - }, - { - "name": "Young Dolph", - "image_url": "http://img.wennermedia.com/social/rs-young-dolph-v1-d999645e-11e4-4549-b0f6-61af8728931a.jpg" - }, - { - "name": "Young Dre the Truth", - "image_url": "https://www.rapmusicguide.com/amass/images/inventory/9868/young%20dre-rev-4.jpg" - }, - { - "name": "Young Dro", - "image_url": "http://www.sohh.com/wp-content/uploads/2014/06/young-dro-2012-11-10-300x3001.jpg" - }, - { - "name": "Young Greatness", - "image_url": "http://hw-static.hiphopearly.com/images/tracks/3/Trappin-t32631-large.jpg" - }, - { - "name": "Young Jeezy", - "image_url": "http://pennylibertygbow.files.wordpress.com/2012/02/youngjeezy3.jpg" - }, - { - "name": "Young M.A", - "image_url": "https://cmga360music.files.wordpress.com/2017/03/youngma_img_9284_mike-marquez.jpg" - }, - { - "name": "Young Maylay", - "image_url": "http://www.hip-hopvibe.com/wp-content/uploads/2013/03/Young-Maylay-3.jpg" - }, - { - "name": "Young MC", - "image_url": "http://www1.pictures.zimbio.com/gi/Young+MC+Screening+Lionsgate+Films+Expendables+A6aEODh_pRRl.jpg" - }, - { - "name": "Young Noble", - "image_url": "https://www.strangemusicinc.com/wp-content/uploads/2011/09/Noble.jpg" - }, - { - "name": "Young Scooter", - "image_url": "http://www.4umf.com/wp-content/uploads/2013/04/Rapper-Young-Scooter-Arrested.jpg" - }, - { - "name": "Young Thug", - "image_url": "https://djbooth.net/.image/t_share/MTU0NzgzMTA4OTEzMTc3NzI3/chance-the-rapper-project-with-young-thug.jpg" - }, - { - "name": "YoungBoy Never Broke Again", - "image_url": "http://image.nola.com/home/nola-media/width600/img/crime_impact/photo/youngboy-never-broke-again-499fcd968041c808.jpg" - }, - { - "name": "Your Old Droog", - "image_url": "https://2.bp.blogspot.com/-LBeysv-KSHw/V1oDq2dOglI/AAAAAAAAIZc/NiQPZ0DOaBgHnZiILbvwTUJfSHT7vNMTQCLcB/s1600/Your%2BOld%2BDroog.jpg" - }, - { - "name": "Yubin", - "image_url": "http://favimages.com/wp-content/uploads/2012/08/rapper-yubin-celebrity-hip-hop-singer-style.jpg" - }, - { - "name": "Yukmouth", - "image_url": "http://content9.flixster.com/photo/13/58/04/13580447_ori.jpg" - }, - { - "name": "Yung Berg", - "image_url": "http://4.bp.blogspot.com/_sBPAPP8w_cA/TLgdFYjm7FI/AAAAAAAAAtU/blx-d1WJmMQ/s1600/yung%20berg.jpg" - }, - { - "name": "Yung Joc", - "image_url": "http://www.judiciaryreport.com/images_4/yung-joc-5-12-15-3.jpg" - }, - { - "name": "Yung L.A.", - "image_url": "http://2.bp.blogspot.com/_WcsRR3fKzyU/TPZx4zZP_9I/AAAAAAAAAXY/z7SrxMG6ehs/s1600/yung_la_1.jpg" - }, - { - "name": "Yung Lean", - "image_url": "http://content.acclaimmag.com/content/uploads/2016/04/yung-lean3-600x400.jpg" - }, - { - "name": "Yung Ro", - "image_url": "http://c3.cduniverse.ws/resized/250x500/music/135/7350135.jpg" - }, - { - "name": "Yung Wun", - "image_url": "http://independentmusicpromotions.com/wp-content/uploads/2011/12/16279_Yung-Wun-pr04.jpg" - }, - { - "name": "Yung6ix", - "image_url": "https://mojidelano.com/wp-content/uploads/2017/03/Yung6ix-1.jpg" - }, - { - "name": "YZ", - "image_url": "http://www.cocaineblunts.com/blunts/wp-content/uploads/2009/06/yz.jpg" - }, - { - "name": "Z-Ro", - "image_url": "http://hiphop-n-more.com/wp-content/uploads/2013/04/z-ro-4.jpg" - }, - { - "name": "Zack de la Rocha", - "image_url": "http://favimages.com/wp-content/uploads/2012/08/rapper-zack-de-la-rocha-singer-rap-photoshoot-young.jpg" - }, - { - "name": "Zaytoven", - "image_url": "https://s3.amazonaws.com/hiphopdx-production/2016/03/Zaytoven-Bankroll-Fresh-e1457227555254-824x620.png" - }, - { - "name": "Zebra Katz", - "image_url": "http://thencrowd14.com/wp-content/uploads/2016/11/04-371x500.jpg" - }, - { - "name": "Zelooperz", - "image_url": "https://i-d-images.vice.com/images/articles/meta/2016/01/26/untitled-article-1453817283.jpg" - }, - { - "name": "Zico", - "image_url": "https://i.pinimg.com/736x/05/4a/2e/054a2eb016aa2d165fb3d933c0b47207.jpg" - } -]
\ No newline at end of file diff --git a/pysite/migrations/tables/oauth_data/__init__.py b/pysite/migrations/tables/oauth_data/__init__.py deleted file mode 100644 index e69de29b..00000000 --- a/pysite/migrations/tables/oauth_data/__init__.py +++ /dev/null diff --git a/pysite/migrations/tables/oauth_data/v1.py b/pysite/migrations/tables/oauth_data/v1.py deleted file mode 100644 index 9ace6bf9..00000000 --- a/pysite/migrations/tables/oauth_data/v1.py +++ /dev/null @@ -1,13 +0,0 @@ -from rethinkdb import ReqlOpFailedError - - -def run(db, table, table_obj): - """ - Create a secondary index on the "snowflake" key, so we can easily get documents by matching that key - """ - - try: - db.run(db.query(table).index_create("snowflake")) - db.run(db.query(table).index_wait("snowflake")) - except ReqlOpFailedError: - print("Index already exists.") diff --git a/pysite/migrations/tables/pydoc_links/__init__.py b/pysite/migrations/tables/pydoc_links/__init__.py deleted file mode 100644 index e69de29b..00000000 --- a/pysite/migrations/tables/pydoc_links/__init__.py +++ /dev/null diff --git a/pysite/migrations/tables/pydoc_links/initial_data.json b/pysite/migrations/tables/pydoc_links/initial_data.json deleted file mode 100644 index e5b21357..00000000 --- a/pysite/migrations/tables/pydoc_links/initial_data.json +++ /dev/null @@ -1,22 +0,0 @@ -[ - { - "package": "aiohttp", - "base_url": "https://aiohttp.readthedocs.io/en/stable/", - "inventory_url": "https://aiohttp.readthedocs.io/en/stable/objects.inv" - }, - { - "package": "discord", - "base_url": "https://discordpy.readthedocs.io/en/rewrite/", - "inventory_url": "https://discordpy.readthedocs.io/en/rewrite/objects.inv" - }, - { - "package": "django", - "base_url": "https://docs.djangoproject.com/en/dev/", - "inventory_url": "https://docs.djangoproject.com/en/dev/_objects/" - }, - { - "package": "stdlib", - "base_url": "https://docs.python.org/3.7/", - "inventory_url": "https://docs.python.org/3.7/objects.inv" - } -] diff --git a/pysite/migrations/tables/snake_facts/__init__.py b/pysite/migrations/tables/snake_facts/__init__.py deleted file mode 100644 index e69de29b..00000000 --- a/pysite/migrations/tables/snake_facts/__init__.py +++ /dev/null diff --git a/pysite/migrations/tables/snake_facts/initial_data.json b/pysite/migrations/tables/snake_facts/initial_data.json deleted file mode 100644 index 49b5a80e..00000000 --- a/pysite/migrations/tables/snake_facts/initial_data.json +++ /dev/null @@ -1,233 +0,0 @@ -[ - { - "fact": "The decapitated head of a dead snake can still bite, even hours after death. These types of bites usually contain huge amounts of venom." - }, - { - "fact": "What is considered the most “dangerous” snake depends on both a specific country’s health care and the availability of antivenom following a bite. Based on these criteria, the most dangerous snake in the world is the saw-scaled viper, which bites and kills more people each year than any other snake." - }, - { - "fact": "Snakes live on everywhere on Earth except Ireland, Iceland, New Zealand, and the North and South Poles.a" - }, - { - "fact": "Of the approximately 725 species of venomous snakes worldwide, 250 can kill a human with one bite." - }, - { - "fact": "Snakes evolved from a four-legged reptilian ancestor—most likely a small, burrowing, land-bound lizard—about 100 million years ago. Some snakes, such as pythons and boas, still have traces of back legs." - }, - { - "fact": "The fear of snakes (ophiophobia or herpetophobia) is one of the most common phobias worldwide. Approximately 1/3 of all adult humans areophidiophobic , which suggests that humans have an innate, evolutionary fear of snakes." - }, - { - "fact": "The top 5 most venomous snakes in the world are the inland taipan, the eastern brown snake, the coastal taipan, the tiger snake, and the black tiger snake." - }, - { - "fact": "The warmer a snake’s body, the more quickly it can digest its prey. Typically, it takes 3–5 days for a snake to digest its meal. For very large snakes, such as the anaconda, digestion can take weeks." - }, - { - "fact": "Some animals, such as the Mongoose, are immune to snake venom." - }, - { - "fact": "To avoid predators, some snakes can poop whenever they want. They make themselves so dirty and smelly that predators will run away." - }, - { - "fact": "The heaviest snake in the world is the anaconda. It weighs over 595 pounds (270 kg) and can grow to over 30 feet (9m) long. It has been known to eat caimans, capybaras, and jaguars." - }, - { - "fact": "The Brahminy Blind Snake, or flowerpot snake, is the only snake species made up of solely females and, as such, does not need a mate to reproduce. It is also the most widespread terrestrial snake in the world." - }, - { - "fact": "If a person suddenly turned into a snake, they would be about 4 times longer than they are now and only a few inches thick. While humans have 24 ribs, some snakes can have more than 400." - }, - { - "fact": "The most advanced snake species in the world is believed to be the black mamba. It has the most highly evolved venom delivery system of any snake on Earth. It can strike up to 12 times in a row, though just one bite is enough to kill a grown man.o" - }, - { - "fact": "The inland taipan is the world’s most toxic snake, meaning it has both the most toxic venom and it injects the most venom when it bites. Its venom sacs hold enough poison to kill up to 80 people." - }, - { - "fact": "The death adder has the fastest strike of any snake in the world. It can attack, inject venom, and go back to striking position in under 0.15 seconds." - }, - { - "fact": "While snakes do not have external ears or eardrums, their skin, muscles, and bones carry sound vibrations to their inner ears." - }, - { - "fact": "Some snakes have been known to explode after eating a large meal. For example, a 13-foot python blew up after it tried to eat a 6-foot alligator. The python was found with the alligator’s tail protruding from its midsection. Its head was missing." - }, - { - "fact": "The word “snake” is from the Proto-Indo-European root *sneg -, meaning “to crawl, creeping thing.” The word “serpent” is from the Proto-Indo-European root *serp -, meaning “to crawl, creep.”" - }, - { - "fact": "Rattlesnake rattles are made of rings of keratin, which is the same material as human hair and fingernails. A rattler will add a new ring each time it sheds its skin." - }, - { - "fact": "Some snakes have over 200 teeth. The teeth aren’t used for chewing but they point backward to prevent prey from escaping the snake’s throat." - }, - { - "fact": "There are about 500 genera and 3,000 different species of snakes. All of them are predators." - }, - { - "fact": "Naturalist Paul Rosolie attempted to be the first person to survive being swallowed by an anaconda in 2014. Though he was wearing a specially designed carbon fiber suit equipped with a breathing system, cameras, and a communication system, he ultimately called off his stunt when he felt like the anaconda was breaking his arm as it tightened its grip around his body." - }, - { - "fact": "There are five recognized species of flying snakes. Growing up to 4 feet, some types can glide up to 330 feet through the air." - }, - { - "fact": "Scales cover every inch of a snake’s body, even its eyes. Scales are thick, tough pieces of skin made from keratin, which is the same material human nails and hair are made from." - }, - { - "fact": "The most common snake in North America is the garter (gardener) snake. This snake is also Massachusetts’s state reptile. While previously thought to be nonvenomous, garter snakes do, in fact, produce a mild neurotoxic venom that is harmless to humans." - }, - { - "fact": "Snakes do not lap up water like mammals do. Instead, they dunk their snouts underwater and use their throats to pump water into their stomachs." - }, - { - "fact": "A snake’s fangs usually last about 6–10 weeks. When a fang wears out, a new one grows in its place." - }, - { - "fact": "Because the end of a snake’s tongue is forked, the two tips taste different amounts of chemicals. Essentially, a snake “smells in stereo” and can even tell which direction a smell is coming from. It identifies scents on its tongue using pits in the roof of its mouth called the Jacobson’s organ." - }, - { - "fact": "The amount of food a snake eats determines how many offspring it will have. The Arafura file snake eats the least and lays just one egg every decade." - }, - { - "fact": "While smaller snakes, such a tree- or- ground-dwelling snakes, use their tongues to follow the scent trails of prey (such as spiders, birds, and other snakes). Larger snakes, such as boas, have heat-sensing organs called labial (lip) pits in their snouts." - }, - { - "fact": "Snakes typically need to eat only 6–30 meals each year to be healthy." - }, - { - "fact": "Snakes like to lie on roads and rocky areas because stones and rocks absorb heat from the sun, which warms them. Basking on these surfaces warms a snake quickly so it can move. If the temperature reaches below 50° Fahrenheit, a snake’s body does not work properly." - }, - { - "fact": "The Mozambique spitting cobra can spit venom over 8 feet away. It can spit from any position, including lying on the ground or raised up. It prefers to aim for its victim’s eyes." - }, - { - "fact": "Snakes cannot chew, so they must swallow their food whole. They are able to stretch their mouths very wide because they have a very flexible lower jaw. Snakes can eat other animals that are 75%–100% bigger than their own bodies." - }, - { - "fact": "To keep from choking on large prey, a snake will push the end of its trachea, or windpipe, out of its mouth, similar to the way a snorkel works." - }, - { - "fact": "The Gaboon viper has the longest fangs of any snake, reaching about 2 inches (5 cm) long." - }, - { - "fact": "Anacondas can hold their breath for up to 10 minutes under water. Additionally, similar to crocodiles, anacondas have eyes and nostrils that can poke above the water’s surface to increase their stealth and hunting prowess." - }, - { - "fact": "The longest snake ever recorded is the reticulated python. It can reach over 33 feet long, which is big enough to swallow a pig, a deer, or even a person." - }, - { - "fact": "Sea snakes with their paddle-shaped tails can dive over 300 feet into the ocean." - }, - { - "fact": "If a snake is threatened soon after a meal, it will often regurgitate its food so it can quickly escape the perceived threat. A snake’s digestive system can dissolve everything but a prey’s hair, feathers, and claws." - }, - { - "fact": "Snakes do not have eyelids; rather, a single transparent scale called a brille protects their eyes. Most snakes see very well, especially if the object is moving." - }, - { - "fact": "The world’s longest venomous snake is the king cobra from Asia. It can grow up to 18 feet, rear almost as high as a person, growl loudly, and inject enough venom to kill an elephant." - }, - { - "fact": "The king cobra is thought to be one of the most intelligent of all snakes. Additionally, unlike most snakes, who do not care for their young, king cobras are careful parents who defend and protect their eggs from enemies." - }, - { - "fact": "Not all snakes have fangs—only those that kill their prey with venom have them. When their fangs are not in use, they fold them back into the roof of the mouth (except for the coral snake, whose fangs do not fold back)." - }, - { - "fact": "Some venomous snakes have died after biting and poisoning themselves by mistake." - }, - { - "fact": "Elephant trunk snakes are almost completely aquatic. They cannot slither because they lack the broad scales in the belly that help other snakes move on land. Rather, elephant trunk snakes have large knobby scales to hold onto slippery fish and constrict them underwater." - }, - { - "fact": "The shortest known snake is the thread snake. It is about 4 inches long and lives on the island of Barbados in the Caribbean. It is said to be as “thin as spaghetti” and it feeds primarily on termites and larvae." - }, - { - "fact": "In 2009, a farm worker in East Africa survived an epic 3-hour battle with a 12-foot python after accidentally stepping on the large snake. It coiled around the man and carried him into a tree. The man wrapped his shirt over the snake’s mouth to prevent it from swallowing him, and he was finally rescued by police after calling for help on his cell phone." - }, - { - "fact": "The venom from a Brazilian pit viper is used in a drug to treat high blood pressure." - }, - { - "fact": "The word “cobra” means “hooded.” Some cobras have large spots on the back of their hood that look like eyes to make them appear intimating even from behind." - }, - { - "fact": "Some desert snakes, such as the African rock python, sleep during the hottest parts of the desert summer. This summer sleep is similar to hibernation and is called “aestivation.”" - }, - { - "fact": "The black mamba is the world’s fastest snake and the world’s second-longest venomous snake in the world, after the king cobra. Found in East Africa, it can reach speeds of up to 12 mph (19kph). It’s named not from the color of its scales, which is olive green, but from the inside of its mouth, which is inky black. Its venom is highly toxic, and without anti-venom, death in humans usually occurs within 7–15 hours." - }, - { - "fact": "Although a snake’s growth rate slows as it gets older, a snake never stops growing." - }, - { - "fact": "While a snake cannot hear the music of a snake charmer, the snake responds to the vibrations of the charmer’s tapping foot or to the movement of the flute." - }, - { - "fact": "Most snakes are not harmful to humans and they help balance the ecosystem by keeping the population of rats, mice, and birds under control." - }, - { - "fact": "The largest snake fossil ever found is the Titanoboa. It lived over 60 million years ago and reached over 50 feet (15 meters) long. It weighed more than 20 people and ate crocodiles and giant tortoises." - }, - { - "fact": "Two-headed snakes are similar to conjoined twins: an embryo begins to split to create identical twins, but the process does not finish. Such snakes rarely survive in the wild because the two heads have duplicate senses, they fight over food, and one head may try to eat the other head." - }, - { - "fact": "Snakes can be grouped into two sections: primitive snakes and true (typical) snakes. Primitive snakes—such as blind snakes, worm snakes, and thread snakes—represent the earliest forms of snakes. True snakes, such as rat snakes and king snakes, are more evolved and more active." - }, - { - "fact": "The oldest written record that describes snakes is in the Brooklyn Papyrus, which is a medical papyrus dating from ancient Egypt (450 B.C.)." - }, - { - "fact": "Approximately 70% of snakes lay eggs. Those that lay eggs are called oviparous. The other 30% of snakes live in colder climates and give birth to live young because it is too cold for eggs outside the body to develop and hatch." - }, - { - "fact": "Most snakes have an elongated right lung, many have a smaller left lung, and a few even have a third lung. They do not have a sense of taste, and most of their organs are organized linearly." - }, - { - "fact": "The most rare and endangered snake is the St. Lucia racer. There are only 18 to 100 of these snakes left." - }, - { - "fact": "Snakes kill over 40,000 people a year—though, with unreported incidents, the total may be over 100,000. About half of these deaths are in India." - }, - { - "fact": "In some cultures, eating snakes is considered a delicacy. For example, snake soup has been a popular Cantonese delicacy for over 2,000 years." - }, - { - "fact": "In some Asian countries, it is believed that drinking the blood of snakes, particularly the cobra, will increase sexual virility. The blood is usually drained from a live snake and then mixed with liquor." - }, - { - "fact": "In the United States, fewer than 1 in 37,500 people are bitten by venomous snakes each year (7,000–8,000 bites per year), and only 1 in 50 million people will die from snake bite (5–6 fatalities per year). In the U.S., a person is 9 times more likely to die from being struck by lightening than to die from a venomous snakebite." - }, - { - "fact": "Some members of the U.S. Army Special Forces are taught to kill and eat snakes during their survival training, which has earned them the nickname “Snake Eaters.”" - }, - { - "fact": "One of the great feats of the legendary Greek hero Perseus was to kill Medusa, a female monster whose hair consisted of writhing, venomous snakes." - }, - { - "fact": "The symbol of the snake is one of the most widespread and oldest cultural symbols in history. Snakes often represent the duality of good and evil and of life and death." - }, - { - "fact": "Because snakes shed their skin, they are often symbols of rebirth, transformation, and healing. For example, Asclepius, the god of medicine, carries a staff encircled by a snake." - }, - { - "fact": "The snake has held various meanings throughout history. For example, The Egyptians viewed the snake as representing royalty and deity. In the Jewish rabbinical tradition and in Hinduism, it represents sexual passion and desire. And the Romans interpreted the snake as a symbol of eternal love." - }, - { - "fact": "Anacondas mate in a huge “breeding ball.” The ball consists of 1 female and nearly 12 males. They stay in a “mating ball” for up to a month." - }, - { - "fact": "Depending on the species, snakes can live from 4 to over 25 years." - }, - { - "fact": "Snakes that are poisonous have pupils that are shaped like a diamond. Nonpoisonous snakes have round pupils." - }, - { - "fact": "Endangered snakes include the San Francisco garter snake, eastern indigo snake, the king cobra, and Dumeril’s boa." - }, - { - "fact": "A mysterious, new “mad snake disease” causes captive pythons and boas to tie themselves in knots. Other symptoms include “stargazing,” which is when snakes stare upwards for long periods of time. Snake experts believe a rodent virus causes the fatal disease." - } -]
\ No newline at end of file diff --git a/pysite/migrations/tables/snake_idioms/__init__.py b/pysite/migrations/tables/snake_idioms/__init__.py deleted file mode 100644 index e69de29b..00000000 --- a/pysite/migrations/tables/snake_idioms/__init__.py +++ /dev/null diff --git a/pysite/migrations/tables/snake_idioms/initial_data.json b/pysite/migrations/tables/snake_idioms/initial_data.json deleted file mode 100644 index 37148c42..00000000 --- a/pysite/migrations/tables/snake_idioms/initial_data.json +++ /dev/null @@ -1,275 +0,0 @@ -[ - { - "idiom": "snek it up" - }, - { - "idiom": "get ur snek on" - }, - { - "idiom": "snek ur heart out" - }, - { - "idiom": "snek 4 ever" - }, - { - "idiom": "i luve snek" - }, - { - "idiom": "snek bff" - }, - { - "idiom": "boyfriend snek" - }, - { - "idiom": "dont snek ur homies" - }, - { - "idiom": "garden snek" - }, - { - "idiom": "snektie" - }, - { - "idiom": "snek keks" - }, - { - "idiom": "birthday snek!" - }, - { - "idiom": "snek tonight?" - }, - { - "idiom": "snek hott lips" - }, - { - "idiom": "snek u latr" - }, - { - "idiom": "netflx and snek" - }, - { - "idiom": "holy snek prey4u" - }, - { - "idiom": "ghowst snek hauntt u" - }, - { - "idiom": "ipekek snek syrop" - }, - { - "idiom": "2 snek 2 furius" - }, - { - "idiom": "the shawsnek redumpton" - }, - { - "idiom": "snekler's list" - }, - { - "idiom": "snekablanca" - }, - { - "idiom": "romeo n snekulet" - }, - { - "idiom": "citizn snek" - }, - { - "idiom": "gon wit the snek" - }, - { - "idiom": "dont step on snek" - }, - { - "idiom": "the wizrd uf snek" - }, - { - "idiom": "forrest snek" - }, - { - "idiom": "snek of musik" - }, - { - "idiom": "west snek story" - }, - { - "idiom": "snek wars eposide XI" - }, - { - "idiom": "2001: a snek odyssuuy" - }, - { - "idiom": "E.T. the snekstra terrastriul" - }, - { - "idiom": "snekkin' inth rain" - }, - { - "idiom": "dr sneklove" - }, - { - "idiom": "snekley kubrik" - }, - { - "idiom": "willium snekspeare" - }, - { - "idiom": "snek on tutanic" - }, - { - "idiom": "a snekwork orunge" - }, - { - "idiom": "the snek the bad n the ogly" - }, - { - "idiom": "the sneksorcist" - }, - { - "idiom": "gudd snek huntin" - }, - { - "idiom": "leonurdo disnekrio" - }, - { - "idiom": "denzal snekington" - }, - { - "idiom": "snekuel l jocksons" - }, - { - "idiom": "kevn snek" - }, - { - "idiom": "snekthony hopkuns" - }, - { - "idiom": "hugh snekman" - }, - { - "idiom": "snek but it glow in durk" - }, - { - "idiom": "snek but u cn ride it" - }, - { - "idiom": "snek but slep in ur bed" - }, - { - "idiom": "snek but mad frum plastk" - }, - { - "idiom": "snek but bulong 2 ur frnd" - }, - { - "idiom": "sneks on plene" - }, - { - "idiom": "baby snek" - }, - { - "idiom": "trouser snek" - }, - { - "idiom": "momo snek" - }, - { - "idiom": "fast snek" - }, - { - "idiom": "super slow snek" - }, - { - "idiom": "old snek" - }, - { - "idiom": "slimy snek" - }, - { - "idiom": "snek attekk" - }, - { - "idiom": "snek get wrekk" - }, - { - "idiom": "snek you long time" - }, - { - "idiom": "carpenter snek" - }, - { - "idiom": "drain snek" - }, - { - "idiom": "eat ur face snek" - }, - { - "idiom": "kawaii snek" - }, - { - "idiom": "dis snek is soft" - }, - { - "idiom": "snek is 4 yers uld" - }, - { - "idiom": "pls feed snek, is hingry" - }, - { - "idiom": "snek? snek? sneeeeek!!" - }, - { - "idiom": "solid snek" - }, - { - "idiom": "big bos snek" - }, - { - "idiom": "snek republic" - }, - { - "idiom": "snekoslovakia" - }, - { - "idiom": "snek please!" - }, - { - "idiom": "i brok my snek :(" - }, - { - "idiom": "star snek the nxt generatin" - }, - { - "idiom": "azsnek tempul" - }, - { - "idiom": "discosnek" - }, - { - "idiom": "bottlsnek" - }, - { - "idiom": "turtlsnek" - }, - { - "idiom": "cashiers snek" - }, - { - "idiom": "mega snek!!" - }, - { - "idiom": "one tim i saw snek neked" - }, - { - "idiom": "snek cnt clim trees" - }, - { - "idiom": "snek in muth is jus tongue" - }, - { - "idiom": "juan snek" - }, - { - "idiom": "photosnek" - } -]
\ No newline at end of file diff --git a/pysite/migrations/tables/snake_names/__init__.py b/pysite/migrations/tables/snake_names/__init__.py deleted file mode 100644 index e69de29b..00000000 --- a/pysite/migrations/tables/snake_names/__init__.py +++ /dev/null diff --git a/pysite/migrations/tables/snake_names/initial_data.json b/pysite/migrations/tables/snake_names/initial_data.json deleted file mode 100644 index 8ba9dbd7..00000000 --- a/pysite/migrations/tables/snake_names/initial_data.json +++ /dev/null @@ -1,2170 +0,0 @@ -[ - { - "name": "Acanthophis", - "scientific": "Acanthophis" - }, - { - "name": "Aesculapian snake", - "scientific": "Aesculapian snake" - }, - { - "name": "African beaked snake", - "scientific": "Rufous beaked snake" - }, - { - "name": "African puff adder", - "scientific": "Bitis arietans" - }, - { - "name": "African rock python", - "scientific": "African rock python" - }, - { - "name": "African twig snake", - "scientific": "Twig snake" - }, - { - "name": "Agkistrodon piscivorus", - "scientific": "Agkistrodon piscivorus" - }, - { - "name": "Ahaetulla", - "scientific": "Ahaetulla" - }, - { - "name": "Amazonian palm viper", - "scientific": "Bothriopsis bilineata" - }, - { - "name": "American copperhead", - "scientific": "Agkistrodon contortrix" - }, - { - "name": "Amethystine python", - "scientific": "Amethystine python" - }, - { - "name": "Anaconda", - "scientific": "Anaconda" - }, - { - "name": "Andaman cat snake", - "scientific": "Boiga andamanensis" - }, - { - "name": "Andrea's keelback", - "scientific": "Amphiesma andreae" - }, - { - "name": "Annulated sea snake", - "scientific": "Hydrophis cyanocinctus" - }, - { - "name": "Arafura file snake", - "scientific": "Acrochordus arafurae" - }, - { - "name": "Arizona black rattlesnake", - "scientific": "Crotalus oreganus cerberus" - }, - { - "name": "Arizona coral snake", - "scientific": "Coral snake" - }, - { - "name": "Aruba rattlesnake", - "scientific": "Crotalus durissus unicolor" - }, - { - "name": "Asian cobra", - "scientific": "Indian cobra" - }, - { - "name": "Asian keelback", - "scientific": "Amphiesma vibakari" - }, - { - "name": "Asp (reptile)", - "scientific": "Asp (reptile)" - }, - { - "name": "Assam keelback", - "scientific": "Amphiesma pealii" - }, - { - "name": "Australian copperhead", - "scientific": "Austrelaps" - }, - { - "name": "Australian scrub python", - "scientific": "Amethystine python" - }, - { - "name": "Baird's rat snake", - "scientific": "Pantherophis bairdi" - }, - { - "name": "Banded Flying Snake", - "scientific": "Banded flying snake" - }, - { - "name": "Banded cat-eyed snake", - "scientific": "Banded cat-eyed snake" - }, - { - "name": "Banded krait", - "scientific": "Banded krait" - }, - { - "name": "Barred wolf snake", - "scientific": "Lycodon striatus" - }, - { - "name": "Beaked sea snake", - "scientific": "Enhydrina schistosa" - }, - { - "name": "Beauty rat snake", - "scientific": "Beauty rat snake" - }, - { - "name": "Beddome's cat snake", - "scientific": "Boiga beddomei" - }, - { - "name": "Beddome's coral snake", - "scientific": "Beddome's coral snake" - }, - { - "name": "Bird snake", - "scientific": "Twig snake" - }, - { - "name": "Black-banded trinket snake", - "scientific": "Oreocryptophis porphyraceus" - }, - { - "name": "Black-headed snake", - "scientific": "Western black-headed snake" - }, - { - "name": "Black-necked cobra", - "scientific": "Black-necked spitting cobra" - }, - { - "name": "Black-necked spitting cobra", - "scientific": "Black-necked spitting cobra" - }, - { - "name": "Black-striped keelback", - "scientific": "Buff striped keelback" - }, - { - "name": "Black-tailed horned pit viper", - "scientific": "Mixcoatlus melanurus" - }, - { - "name": "Black headed python", - "scientific": "Black-headed python" - }, - { - "name": "Black krait", - "scientific": "Greater black krait" - }, - { - "name": "Black mamba", - "scientific": "Black mamba" - }, - { - "name": "Black rat snake", - "scientific": "Rat snake" - }, - { - "name": "Black tree cobra", - "scientific": "Cobra" - }, - { - "name": "Blind snake", - "scientific": "Scolecophidia" - }, - { - "name": "Blonde hognose snake", - "scientific": "Hognose" - }, - { - "name": "Blood python", - "scientific": "Python brongersmai" - }, - { - "name": "Blue krait", - "scientific": "Bungarus candidus" - }, - { - "name": "Blunt-headed tree snake", - "scientific": "Imantodes cenchoa" - }, - { - "name": "Boa constrictor", - "scientific": "Boa constrictor" - }, - { - "name": "Bocourt's water snake", - "scientific": "Subsessor" - }, - { - "name": "Boelen python", - "scientific": "Morelia boeleni" - }, - { - "name": "Boidae", - "scientific": "Boidae" - }, - { - "name": "Boiga", - "scientific": "Boiga" - }, - { - "name": "Boomslang", - "scientific": "Boomslang" - }, - { - "name": "Brahminy blind snake", - "scientific": "Indotyphlops braminus" - }, - { - "name": "Brazilian coral snake", - "scientific": "Coral snake" - }, - { - "name": "Brazilian smooth snake", - "scientific": "Hydrodynastes gigas" - }, - { - "name": "Brown snake (disambiguation)", - "scientific": "Brown snake" - }, - { - "name": "Brown tree snake", - "scientific": "Brown tree snake" - }, - { - "name": "Brown white-lipped python", - "scientific": "Leiopython" - }, - { - "name": "Buff striped keelback", - "scientific": "Buff striped keelback" - }, - { - "name": "Bull snake", - "scientific": "Bull snake" - }, - { - "name": "Burmese keelback", - "scientific": "Burmese keelback water snake" - }, - { - "name": "Burmese krait", - "scientific": "Burmese krait" - }, - { - "name": "Burmese python", - "scientific": "Burmese python" - }, - { - "name": "Burrowing viper", - "scientific": "Atractaspidinae" - }, - { - "name": "Buttermilk racer", - "scientific": "Coluber constrictor anthicus" - }, - { - "name": "California kingsnake", - "scientific": "California kingsnake" - }, - { - "name": "Cantor's pitviper", - "scientific": "Trimeresurus cantori" - }, - { - "name": "Cape cobra", - "scientific": "Cape cobra" - }, - { - "name": "Cape coral snake", - "scientific": "Aspidelaps lubricus" - }, - { - "name": "Cape gopher snake", - "scientific": "Cape gopher snake" - }, - { - "name": "Carpet viper", - "scientific": "Echis" - }, - { - "name": "Cat-eyed night snake", - "scientific": "Banded cat-eyed snake" - }, - { - "name": "Cat-eyed snake", - "scientific": "Banded cat-eyed snake" - }, - { - "name": "Cat snake", - "scientific": "Boiga" - }, - { - "name": "Central American lyre snake", - "scientific": "Trimorphodon biscutatus" - }, - { - "name": "Central ranges taipan", - "scientific": "Taipan" - }, - { - "name": "Chappell Island tiger snake", - "scientific": "Tiger snake" - }, - { - "name": "Checkered garter snake", - "scientific": "Checkered garter snake" - }, - { - "name": "Checkered keelback", - "scientific": "Checkered keelback" - }, - { - "name": "Children's python", - "scientific": "Children's python" - }, - { - "name": "Chinese cobra", - "scientific": "Chinese cobra" - }, - { - "name": "Coachwhip snake", - "scientific": "Masticophis flagellum" - }, - { - "name": "Coastal taipan", - "scientific": "Coastal taipan" - }, - { - "name": "Cobra", - "scientific": "Cobra" - }, - { - "name": "Collett's snake", - "scientific": "Collett's snake" - }, - { - "name": "Common adder", - "scientific": "Vipera berus" - }, - { - "name": "Common cobra", - "scientific": "Chinese cobra" - }, - { - "name": "Common garter snake", - "scientific": "Common garter snake" - }, - { - "name": "Common ground snake", - "scientific": "Western ground snake" - }, - { - "name": "Common keelback (disambiguation)", - "scientific": "Common keelback" - }, - { - "name": "Common tiger snake", - "scientific": "Tiger snake" - }, - { - "name": "Common worm snake", - "scientific": "Indotyphlops braminus" - }, - { - "name": "Congo snake", - "scientific": "Amphiuma" - }, - { - "name": "Congo water cobra", - "scientific": "Naja christyi" - }, - { - "name": "Coral snake", - "scientific": "Coral snake" - }, - { - "name": "Corn snake", - "scientific": "Corn snake" - }, - { - "name": "Coronado Island rattlesnake", - "scientific": "Crotalus oreganus caliginis" - }, - { - "name": "Crossed viper", - "scientific": "Vipera berus" - }, - { - "name": "Crotalus cerastes", - "scientific": "Crotalus cerastes" - }, - { - "name": "Crotalus durissus", - "scientific": "Crotalus durissus" - }, - { - "name": "Crotalus horridus", - "scientific": "Timber rattlesnake" - }, - { - "name": "Crowned snake", - "scientific": "Tantilla" - }, - { - "name": "Cuban boa", - "scientific": "Chilabothrus angulifer" - }, - { - "name": "Cuban wood snake", - "scientific": "Tropidophis melanurus" - }, - { - "name": "Dasypeltis", - "scientific": "Dasypeltis" - }, - { - "name": "Desert death adder", - "scientific": "Desert death adder" - }, - { - "name": "Desert kingsnake", - "scientific": "Desert kingsnake" - }, - { - "name": "Desert woma python", - "scientific": "Woma python" - }, - { - "name": "Diamond python", - "scientific": "Morelia spilota spilota" - }, - { - "name": "Dog-toothed cat snake", - "scientific": "Boiga cynodon" - }, - { - "name": "Down's tiger snake", - "scientific": "Tiger snake" - }, - { - "name": "Dubois's sea snake", - "scientific": "Aipysurus duboisii" - }, - { - "name": "Durango rock rattlesnake", - "scientific": "Crotalus lepidus klauberi" - }, - { - "name": "Dusty hognose snake", - "scientific": "Hognose" - }, - { - "name": "Dwarf beaked snake", - "scientific": "Dwarf beaked snake" - }, - { - "name": "Dwarf boa", - "scientific": "Boa constrictor" - }, - { - "name": "Dwarf pipe snake", - "scientific": "Anomochilus" - }, - { - "name": "Eastern brown snake", - "scientific": "Eastern brown snake" - }, - { - "name": "Eastern coral snake", - "scientific": "Micrurus fulvius" - }, - { - "name": "Eastern diamondback rattlesnake", - "scientific": "Eastern diamondback rattlesnake" - }, - { - "name": "Eastern green mamba", - "scientific": "Eastern green mamba" - }, - { - "name": "Eastern hognose snake", - "scientific": "Eastern hognose snake" - }, - { - "name": "Eastern mud snake", - "scientific": "Mud snake" - }, - { - "name": "Eastern racer", - "scientific": "Coluber constrictor" - }, - { - "name": "Eastern tiger snake", - "scientific": "Tiger snake" - }, - { - "name": "Eastern water cobra", - "scientific": "Cobra" - }, - { - "name": "Elaps harlequin snake", - "scientific": "Micrurus fulvius" - }, - { - "name": "Eunectes", - "scientific": "Eunectes" - }, - { - "name": "European Smooth Snake", - "scientific": "Smooth snake" - }, - { - "name": "False cobra", - "scientific": "False cobra" - }, - { - "name": "False coral snake", - "scientific": "Coral snake" - }, - { - "name": "False water cobra", - "scientific": "Hydrodynastes gigas" - }, - { - "name": "Fierce snake", - "scientific": "Inland taipan" - }, - { - "name": "Flying snake", - "scientific": "Chrysopelea" - }, - { - "name": "Forest cobra", - "scientific": "Forest cobra" - }, - { - "name": "Forsten's cat snake", - "scientific": "Boiga forsteni" - }, - { - "name": "Fox snake", - "scientific": "Fox snake" - }, - { - "name": "Gaboon viper", - "scientific": "Gaboon viper" - }, - { - "name": "Garter snake", - "scientific": "Garter snake" - }, - { - "name": "Giant Malagasy hognose snake", - "scientific": "Hognose" - }, - { - "name": "Glossy snake", - "scientific": "Glossy snake" - }, - { - "name": "Gold-ringed cat snake", - "scientific": "Boiga dendrophila" - }, - { - "name": "Gold tree cobra", - "scientific": "Pseudohaje goldii" - }, - { - "name": "Golden tree snake", - "scientific": "Chrysopelea ornata" - }, - { - "name": "Gopher snake", - "scientific": "Pituophis catenifer" - }, - { - "name": "Grand Canyon rattlesnake", - "scientific": "Crotalus oreganus abyssus" - }, - { - "name": "Grass snake", - "scientific": "Grass snake" - }, - { - "name": "Gray cat snake", - "scientific": "Boiga ocellata" - }, - { - "name": "Great Plains rat snake", - "scientific": "Pantherophis emoryi" - }, - { - "name": "Green anaconda", - "scientific": "Green anaconda" - }, - { - "name": "Green rat snake", - "scientific": "Rat snake" - }, - { - "name": "Green tree python", - "scientific": "Green tree python" - }, - { - "name": "Grey-banded kingsnake", - "scientific": "Gray-banded kingsnake" - }, - { - "name": "Grey Lora", - "scientific": "Leptophis stimsoni" - }, - { - "name": "Halmahera python", - "scientific": "Morelia tracyae" - }, - { - "name": "Harlequin coral snake", - "scientific": "Micrurus fulvius" - }, - { - "name": "Herald snake", - "scientific": "Caduceus" - }, - { - "name": "High Woods coral snake", - "scientific": "Coral snake" - }, - { - "name": "Hill keelback", - "scientific": "Amphiesma monticola" - }, - { - "name": "Himalayan keelback", - "scientific": "Amphiesma platyceps" - }, - { - "name": "Hognose snake", - "scientific": "Hognose" - }, - { - "name": "Hognosed viper", - "scientific": "Porthidium" - }, - { - "name": "Hook Nosed Sea Snake", - "scientific": "Enhydrina schistosa" - }, - { - "name": "Hoop snake", - "scientific": "Hoop snake" - }, - { - "name": "Hopi rattlesnake", - "scientific": "Crotalus viridis nuntius" - }, - { - "name": "Indian cobra", - "scientific": "Indian cobra" - }, - { - "name": "Indian egg-eater", - "scientific": "Indian egg-eating snake" - }, - { - "name": "Indian flying snake", - "scientific": "Chrysopelea ornata" - }, - { - "name": "Indian krait", - "scientific": "Bungarus" - }, - { - "name": "Indigo snake", - "scientific": "Drymarchon" - }, - { - "name": "Inland carpet python", - "scientific": "Morelia spilota metcalfei" - }, - { - "name": "Inland taipan", - "scientific": "Inland taipan" - }, - { - "name": "Jamaican boa", - "scientific": "Jamaican boa" - }, - { - "name": "Jan's hognose snake", - "scientific": "Hognose" - }, - { - "name": "Japanese forest rat snake", - "scientific": "Euprepiophis conspicillatus" - }, - { - "name": "Japanese rat snake", - "scientific": "Japanese rat snake" - }, - { - "name": "Japanese striped snake", - "scientific": "Japanese striped snake" - }, - { - "name": "Kayaudi dwarf reticulated python", - "scientific": "Reticulated python" - }, - { - "name": "Keelback", - "scientific": "Natricinae" - }, - { - "name": "Khasi Hills keelback", - "scientific": "Amphiesma khasiense" - }, - { - "name": "King Island tiger snake", - "scientific": "Tiger snake" - }, - { - "name": "King brown", - "scientific": "Mulga snake" - }, - { - "name": "King cobra", - "scientific": "King cobra" - }, - { - "name": "King rat snake", - "scientific": "Rat snake" - }, - { - "name": "King snake", - "scientific": "Kingsnake" - }, - { - "name": "Krait", - "scientific": "Bungarus" - }, - { - "name": "Krefft's tiger snake", - "scientific": "Tiger snake" - }, - { - "name": "Lance-headed rattlesnake", - "scientific": "Crotalus polystictus" - }, - { - "name": "Lancehead", - "scientific": "Bothrops" - }, - { - "name": "Large shield snake", - "scientific": "Pseudotyphlops" - }, - { - "name": "Leptophis ahaetulla", - "scientific": "Leptophis ahaetulla" - }, - { - "name": "Lesser black krait", - "scientific": "Lesser black krait" - }, - { - "name": "Long-nosed adder", - "scientific": "Eastern hognose snake" - }, - { - "name": "Long-nosed tree snake", - "scientific": "Western hognose snake" - }, - { - "name": "Long-nosed whip snake", - "scientific": "Ahaetulla nasuta" - }, - { - "name": "Long-tailed rattlesnake", - "scientific": "Rattlesnake" - }, - { - "name": "Longnosed worm snake", - "scientific": "Leptotyphlops macrorhynchus" - }, - { - "name": "Lyre snake", - "scientific": "Trimorphodon" - }, - { - "name": "Madagascar ground boa", - "scientific": "Acrantophis madagascariensis" - }, - { - "name": "Malayan krait", - "scientific": "Bungarus candidus" - }, - { - "name": "Malayan long-glanded coral snake", - "scientific": "Calliophis bivirgata" - }, - { - "name": "Malayan pit viper", - "scientific": "Pit viper" - }, - { - "name": "Mamba", - "scientific": "Mamba" - }, - { - "name": "Mamushi", - "scientific": "Mamushi" - }, - { - "name": "Manchurian Black Water Snake", - "scientific": "Elaphe schrenckii" - }, - { - "name": "Mandarin rat snake", - "scientific": "Mandarin rat snake" - }, - { - "name": "Mangrove snake (disambiguation)", - "scientific": "Mangrove snake" - }, - { - "name": "Many-banded krait", - "scientific": "Many-banded krait" - }, - { - "name": "Many-banded tree snake", - "scientific": "Many-banded tree snake" - }, - { - "name": "Many-spotted cat snake", - "scientific": "Boiga multomaculata" - }, - { - "name": "Massasauga rattlesnake", - "scientific": "Massasauga" - }, - { - "name": "Mexican black kingsnake", - "scientific": "Mexican black kingsnake" - }, - { - "name": "Mexican green rattlesnake", - "scientific": "Crotalus basiliscus" - }, - { - "name": "Mexican hognose snake", - "scientific": "Hognose" - }, - { - "name": "Mexican parrot snake", - "scientific": "Leptophis mexicanus" - }, - { - "name": "Mexican racer", - "scientific": "Coluber constrictor oaxaca" - }, - { - "name": "Mexican vine snake", - "scientific": "Oxybelis aeneus" - }, - { - "name": "Mexican west coast rattlesnake", - "scientific": "Crotalus basiliscus" - }, - { - "name": "Micropechis ikaheka", - "scientific": "Micropechis ikaheka" - }, - { - "name": "Midget faded rattlesnake", - "scientific": "Crotalus oreganus concolor" - }, - { - "name": "Milk snake", - "scientific": "Milk snake" - }, - { - "name": "Moccasin snake", - "scientific": "Agkistrodon piscivorus" - }, - { - "name": "Modest keelback", - "scientific": "Amphiesma modestum" - }, - { - "name": "Mojave desert sidewinder", - "scientific": "Crotalus cerastes" - }, - { - "name": "Mojave rattlesnake", - "scientific": "Crotalus scutulatus" - }, - { - "name": "Mole viper", - "scientific": "Atractaspidinae" - }, - { - "name": "Moluccan flying snake", - "scientific": "Chrysopelea" - }, - { - "name": "Montpellier snake", - "scientific": "Malpolon monspessulanus" - }, - { - "name": "Mud adder", - "scientific": "Mud adder" - }, - { - "name": "Mud snake", - "scientific": "Mud snake" - }, - { - "name": "Mussurana", - "scientific": "Mussurana" - }, - { - "name": "Narrowhead Garter Snake", - "scientific": "Garter snake" - }, - { - "name": "Nicobar Island keelback", - "scientific": "Amphiesma nicobariense" - }, - { - "name": "Nicobar cat snake", - "scientific": "Boiga wallachi" - }, - { - "name": "Night snake", - "scientific": "Night snake" - }, - { - "name": "Nilgiri keelback", - "scientific": "Nilgiri keelback" - }, - { - "name": "North eastern king snake", - "scientific": "Eastern hognose snake" - }, - { - "name": "Northeastern hill krait", - "scientific": "Northeastern hill krait" - }, - { - "name": "Northern black-tailed rattlesnake", - "scientific": "Crotalus molossus" - }, - { - "name": "Northern tree snake", - "scientific": "Dendrelaphis calligastra" - }, - { - "name": "Northern water snake", - "scientific": "Northern water snake" - }, - { - "name": "Northern white-lipped python", - "scientific": "Leiopython" - }, - { - "name": "Oaxacan small-headed rattlesnake", - "scientific": "Crotalus intermedius gloydi" - }, - { - "name": "Okinawan habu", - "scientific": "Okinawan habu" - }, - { - "name": "Olive sea snake", - "scientific": "Aipysurus laevis" - }, - { - "name": "Opheodrys", - "scientific": "Opheodrys" - }, - { - "name": "Orange-collared keelback", - "scientific": "Rhabdophis himalayanus" - }, - { - "name": "Ornate flying snake", - "scientific": "Chrysopelea ornata" - }, - { - "name": "Oxybelis", - "scientific": "Oxybelis" - }, - { - "name": "Palestine viper", - "scientific": "Vipera palaestinae" - }, - { - "name": "Paradise flying snake", - "scientific": "Chrysopelea paradisi" - }, - { - "name": "Parrot snake", - "scientific": "Leptophis ahaetulla" - }, - { - "name": "Patchnose snake", - "scientific": "Salvadora (snake)" - }, - { - "name": "Pelagic sea snake", - "scientific": "Yellow-bellied sea snake" - }, - { - "name": "Peninsula tiger snake", - "scientific": "Tiger snake" - }, - { - "name": "Perrotet's shieldtail snake", - "scientific": "Plectrurus perrotetii" - }, - { - "name": "Persian rat snake", - "scientific": "Rat snake" - }, - { - "name": "Pine snake", - "scientific": "Pine snake" - }, - { - "name": "Pit viper", - "scientific": "Pit viper" - }, - { - "name": "Plains hognose snake", - "scientific": "Western hognose snake" - }, - { - "name": "Prairie kingsnake", - "scientific": "Lampropeltis calligaster" - }, - { - "name": "Pygmy python", - "scientific": "Pygmy python" - }, - { - "name": "Pythonidae", - "scientific": "Pythonidae" - }, - { - "name": "Queen snake", - "scientific": "Queen snake" - }, - { - "name": "Rat snake", - "scientific": "Rat snake" - }, - { - "name": "Rattler", - "scientific": "Rattlesnake" - }, - { - "name": "Rattlesnake", - "scientific": "Rattlesnake" - }, - { - "name": "Red-bellied black snake", - "scientific": "Red-bellied black snake" - }, - { - "name": "Red-headed krait", - "scientific": "Red-headed krait" - }, - { - "name": "Red-necked keelback", - "scientific": "Rhabdophis subminiatus" - }, - { - "name": "Red-tailed bamboo pitviper", - "scientific": "Trimeresurus erythrurus" - }, - { - "name": "Red-tailed boa", - "scientific": "Boa constrictor" - }, - { - "name": "Red-tailed pipe snake", - "scientific": "Cylindrophis ruffus" - }, - { - "name": "Red blood python", - "scientific": "Python brongersmai" - }, - { - "name": "Red diamond rattlesnake", - "scientific": "Crotalus ruber" - }, - { - "name": "Reticulated python", - "scientific": "Reticulated python" - }, - { - "name": "Ribbon snake", - "scientific": "Ribbon snake" - }, - { - "name": "Ringed hognose snake", - "scientific": "Hognose" - }, - { - "name": "Rosy boa", - "scientific": "Rosy boa" - }, - { - "name": "Rough green snake", - "scientific": "Opheodrys aestivus" - }, - { - "name": "Rubber boa", - "scientific": "Rubber boa" - }, - { - "name": "Rufous beaked snake", - "scientific": "Rufous beaked snake" - }, - { - "name": "Russell's viper", - "scientific": "Russell's viper" - }, - { - "name": "San Francisco garter snake", - "scientific": "San Francisco garter snake" - }, - { - "name": "Sand boa", - "scientific": "Erycinae" - }, - { - "name": "Sand viper", - "scientific": "Sand viper" - }, - { - "name": "Saw-scaled viper", - "scientific": "Echis" - }, - { - "name": "Scarlet kingsnake", - "scientific": "Scarlet kingsnake" - }, - { - "name": "Sea snake", - "scientific": "Hydrophiinae" - }, - { - "name": "Selayer reticulated python", - "scientific": "Reticulated python" - }, - { - "name": "Shield-nosed cobra", - "scientific": "Shield-nosed cobra" - }, - { - "name": "Shield-tailed snake", - "scientific": "Uropeltidae" - }, - { - "name": "Sikkim keelback", - "scientific": "Sikkim keelback" - }, - { - "name": "Sind krait", - "scientific": "Sind krait" - }, - { - "name": "Smooth green snake", - "scientific": "Smooth green snake" - }, - { - "name": "South American hognose snake", - "scientific": "Hognose" - }, - { - "name": "South Andaman krait", - "scientific": "South Andaman krait" - }, - { - "name": "South eastern corn snake", - "scientific": "Corn snake" - }, - { - "name": "Southern Pacific rattlesnake", - "scientific": "Crotalus oreganus helleri" - }, - { - "name": "Southern black racer", - "scientific": "Southern black racer" - }, - { - "name": "Southern hognose snake", - "scientific": "Southern hognose snake" - }, - { - "name": "Southern white-lipped python", - "scientific": "Leiopython" - }, - { - "name": "Southwestern blackhead snake", - "scientific": "Tantilla hobartsmithi" - }, - { - "name": "Southwestern carpet python", - "scientific": "Morelia spilota imbricata" - }, - { - "name": "Southwestern speckled rattlesnake", - "scientific": "Crotalus mitchellii pyrrhus" - }, - { - "name": "Speckled hognose snake", - "scientific": "Hognose" - }, - { - "name": "Speckled kingsnake", - "scientific": "Lampropeltis getula holbrooki" - }, - { - "name": "Spectacled cobra", - "scientific": "Indian cobra" - }, - { - "name": "Sri Lanka cat snake", - "scientific": "Boiga ceylonensis" - }, - { - "name": "Stiletto snake", - "scientific": "Atractaspidinae" - }, - { - "name": "Stimson's python", - "scientific": "Stimson's python" - }, - { - "name": "Striped snake", - "scientific": "Japanese striped snake" - }, - { - "name": "Sumatran short-tailed python", - "scientific": "Python curtus" - }, - { - "name": "Sunbeam snake", - "scientific": "Xenopeltis" - }, - { - "name": "Taipan", - "scientific": "Taipan" - }, - { - "name": "Tan racer", - "scientific": "Coluber constrictor etheridgei" - }, - { - "name": "Tancitaran dusky rattlesnake", - "scientific": "Crotalus pusillus" - }, - { - "name": "Tanimbar python", - "scientific": "Reticulated python" - }, - { - "name": "Tasmanian tiger snake", - "scientific": "Tiger snake" - }, - { - "name": "Tawny cat snake", - "scientific": "Boiga ochracea" - }, - { - "name": "Temple pit viper", - "scientific": "Pit viper" - }, - { - "name": "Tentacled snake", - "scientific": "Erpeton tentaculatum" - }, - { - "name": "Texas Coral Snake", - "scientific": "Coral snake" - }, - { - "name": "Texas blind snake", - "scientific": "Leptotyphlops dulcis" - }, - { - "name": "Texas garter snake", - "scientific": "Texas garter snake" - }, - { - "name": "Texas lyre snake", - "scientific": "Trimorphodon biscutatus vilkinsonii" - }, - { - "name": "Texas night snake", - "scientific": "Hypsiglena jani" - }, - { - "name": "Thai cobra", - "scientific": "King cobra" - }, - { - "name": "Three-lined ground snake", - "scientific": "Atractus trilineatus" - }, - { - "name": "Tic polonga", - "scientific": "Russell's viper" - }, - { - "name": "Tiger rattlesnake", - "scientific": "Crotalus tigris" - }, - { - "name": "Tiger snake", - "scientific": "Tiger snake" - }, - { - "name": "Tigre snake", - "scientific": "Spilotes pullatus" - }, - { - "name": "Timber rattlesnake", - "scientific": "Timber rattlesnake" - }, - { - "name": "Tree snake", - "scientific": "Brown tree snake" - }, - { - "name": "Tri-color hognose snake", - "scientific": "Hognose" - }, - { - "name": "Trinket snake", - "scientific": "Trinket snake" - }, - { - "name": "Tropical rattlesnake", - "scientific": "Crotalus durissus" - }, - { - "name": "Twig snake", - "scientific": "Twig snake" - }, - { - "name": "Twin-Barred tree snake", - "scientific": "Banded flying snake" - }, - { - "name": "Twin-spotted rat snake", - "scientific": "Rat snake" - }, - { - "name": "Twin-spotted rattlesnake", - "scientific": "Crotalus pricei" - }, - { - "name": "Uracoan rattlesnake", - "scientific": "Crotalus durissus vegrandis" - }, - { - "name": "Viperidae", - "scientific": "Viperidae" - }, - { - "name": "Wall's keelback", - "scientific": "Amphiesma xenura" - }, - { - "name": "Wart snake", - "scientific": "Acrochordidae" - }, - { - "name": "Water adder", - "scientific": "Agkistrodon piscivorus" - }, - { - "name": "Water moccasin", - "scientific": "Agkistrodon piscivorus" - }, - { - "name": "West Indian racer", - "scientific": "Antiguan racer" - }, - { - "name": "Western blind snake", - "scientific": "Leptotyphlops humilis" - }, - { - "name": "Western carpet python", - "scientific": "Morelia spilota" - }, - { - "name": "Western coral snake", - "scientific": "Coral snake" - }, - { - "name": "Western diamondback rattlesnake", - "scientific": "Western diamondback rattlesnake" - }, - { - "name": "Western green mamba", - "scientific": "Western green mamba" - }, - { - "name": "Western ground snake", - "scientific": "Western ground snake" - }, - { - "name": "Western hognose snake", - "scientific": "Western hognose snake" - }, - { - "name": "Western mud snake", - "scientific": "Mud snake" - }, - { - "name": "Western tiger snake", - "scientific": "Tiger snake" - }, - { - "name": "Western woma python", - "scientific": "Woma python" - }, - { - "name": "White-lipped keelback", - "scientific": "Amphiesma leucomystax" - }, - { - "name": "Wolf snake", - "scientific": "Lycodon capucinus" - }, - { - "name": "Woma python", - "scientific": "Woma python" - }, - { - "name": "Wutu", - "scientific": "Bothrops alternatus" - }, - { - "name": "Wynaad keelback", - "scientific": "Amphiesma monticola" - }, - { - "name": "Yellow-banded sea snake", - "scientific": "Yellow-bellied sea snake" - }, - { - "name": "Yellow-bellied sea snake", - "scientific": "Yellow-bellied sea snake" - }, - { - "name": "Yellow-lipped sea snake", - "scientific": "Yellow-lipped sea krait" - }, - { - "name": "Yellow-striped rat snake", - "scientific": "Rat snake" - }, - { - "name": "Yellow anaconda", - "scientific": "Yellow anaconda" - }, - { - "name": "Yellow cobra", - "scientific": "Cape cobra" - }, - { - "name": "Yunnan keelback", - "scientific": "Amphiesma parallelum" - }, - { - "name": "Abaco Island boa", - "scientific": "Epicrates exsul" - }, - { - "name": "Agkistrodon bilineatus", - "scientific": "Agkistrodon bilineatus" - }, - { - "name": "Amazon tree boa", - "scientific": "Corallus hortulanus" - }, - { - "name": "Andaman cobra", - "scientific": "Andaman cobra" - }, - { - "name": "Angolan python", - "scientific": "Python anchietae" - }, - { - "name": "Arabian cobra", - "scientific": "Arabian cobra" - }, - { - "name": "Asp viper", - "scientific": "Vipera aspis" - }, - { - "name": "Ball Python", - "scientific": "Ball python" - }, - { - "name": "Ball python", - "scientific": "Ball python" - }, - { - "name": "Bamboo pitviper", - "scientific": "Trimeresurus gramineus" - }, - { - "name": "Banded pitviper", - "scientific": "Trimeresurus fasciatus" - }, - { - "name": "Banded water cobra", - "scientific": "Naja annulata" - }, - { - "name": "Barbour's pit viper", - "scientific": "Mixcoatlus barbouri" - }, - { - "name": "Bismarck ringed python", - "scientific": "Bothrochilus" - }, - { - "name": "Black-speckled palm-pitviper", - "scientific": "Bothriechis nigroviridis" - }, - { - "name": "Bluntnose viper", - "scientific": "Macrovipera lebetina" - }, - { - "name": "Bornean pitviper", - "scientific": "Trimeresurus borneensis" - }, - { - "name": "Borneo short-tailed python", - "scientific": "Borneo python" - }, - { - "name": "Bothrops jararacussu", - "scientific": "Bothrops jararacussu" - }, - { - "name": "Bredl's python", - "scientific": "Morelia bredli" - }, - { - "name": "Brongersma's pitviper", - "scientific": "Trimeresurus brongersmai" - }, - { - "name": "Brown spotted pitviper", - "scientific": "Trimeresurus mucrosquamatus" - }, - { - "name": "Brown water python", - "scientific": "Liasis fuscus" - }, - { - "name": "Burrowing cobra", - "scientific": "Egyptian cobra" - }, - { - "name": "Bush viper", - "scientific": "Atheris" - }, - { - "name": "Calabar python", - "scientific": "Calabar python" - }, - { - "name": "Caspian cobra", - "scientific": "Caspian cobra" - }, - { - "name": "Centralian carpet python", - "scientific": "Morelia bredli" - }, - { - "name": "Chinese tree viper", - "scientific": "Trimeresurus stejnegeri" - }, - { - "name": "Coastal carpet python", - "scientific": "Morelia spilota mcdowelli" - }, - { - "name": "Colorado desert sidewinder", - "scientific": "Crotalus cerastes laterorepens" - }, - { - "name": "Common lancehead", - "scientific": "Bothrops atrox" - }, - { - "name": "Cyclades blunt-nosed viper", - "scientific": "Macrovipera schweizeri" - }, - { - "name": "Dauan Island water python", - "scientific": "Liasis fuscus" - }, - { - "name": "De Schauensee's anaconda", - "scientific": "Eunectes deschauenseei" - }, - { - "name": "Dumeril's boa", - "scientific": "Acrantophis dumerili" - }, - { - "name": "Dusky pigmy rattlesnake", - "scientific": "Sistrurus miliarius barbouri" - }, - { - "name": "Dwarf sand adder", - "scientific": "Bitis peringueyi" - }, - { - "name": "Egyptian cobra", - "scientific": "Egyptian cobra" - }, - { - "name": "Elegant pitviper", - "scientific": "Trimeresurus elegans" - }, - { - "name": "Emerald tree boa", - "scientific": "Emerald tree boa" - }, - { - "name": "Equatorial spitting cobra", - "scientific": "Equatorial spitting cobra" - }, - { - "name": "European asp", - "scientific": "Vipera aspis" - }, - { - "name": "Eyelash palm-pitviper", - "scientific": "Bothriechis schlegelii" - }, - { - "name": "Eyelash pit viper", - "scientific": "Bothriechis schlegelii" - }, - { - "name": "Eyelash viper", - "scientific": "Bothriechis schlegelii" - }, - { - "name": "False horned viper", - "scientific": "Pseudocerastes" - }, - { - "name": "Fan-Si-Pan horned pitviper", - "scientific": "Trimeresurus cornutus" - }, - { - "name": "Fea's viper", - "scientific": "Azemiops" - }, - { - "name": "Fifty pacer", - "scientific": "Deinagkistrodon" - }, - { - "name": "Flat-nosed pitviper", - "scientific": "Trimeresurus puniceus" - }, - { - "name": "Godman's pit viper", - "scientific": "Cerrophidion godmani" - }, - { - "name": "Great Lakes bush viper", - "scientific": "Atheris nitschei" - }, - { - "name": "Green palm viper", - "scientific": "Bothriechis lateralis" - }, - { - "name": "Green tree pit viper", - "scientific": "Trimeresurus gramineus" - }, - { - "name": "Guatemalan palm viper", - "scientific": "Bothriechis aurifer" - }, - { - "name": "Guatemalan tree viper", - "scientific": "Bothriechis bicolor" - }, - { - "name": "Hagen's pitviper", - "scientific": "Trimeresurus hageni" - }, - { - "name": "Hairy bush viper", - "scientific": "Atheris hispida" - }, - { - "name": "Himehabu", - "scientific": "Ovophis okinavensis" - }, - { - "name": "Hogg Island boa", - "scientific": "Boa constrictor imperator" - }, - { - "name": "Honduran palm viper", - "scientific": "Bothriechis marchi" - }, - { - "name": "Horned desert viper", - "scientific": "Cerastes cerastes" - }, - { - "name": "Horseshoe pitviper", - "scientific": "Trimeresurus strigatus" - }, - { - "name": "Hundred pacer", - "scientific": "Deinagkistrodon" - }, - { - "name": "Hutton's tree viper", - "scientific": "Tropidolaemus huttoni" - }, - { - "name": "Indian python", - "scientific": "Python molurus" - }, - { - "name": "Indian tree viper", - "scientific": "Trimeresurus gramineus" - }, - { - "name": "Indochinese spitting cobra", - "scientific": "Indochinese spitting cobra" - }, - { - "name": "Indonesian water python", - "scientific": "Liasis mackloti" - }, - { - "name": "Javan spitting cobra", - "scientific": "Javan spitting cobra" - }, - { - "name": "Jerdon's pitviper", - "scientific": "Trimeresurus jerdonii" - }, - { - "name": "Jumping viper", - "scientific": "Atropoides" - }, - { - "name": "Jungle carpet python", - "scientific": "Morelia spilota cheynei" - }, - { - "name": "Kanburian pit viper", - "scientific": "Trimeresurus kanburiensis" - }, - { - "name": "Kaulback's lance-headed pitviper", - "scientific": "Trimeresurus kaulbacki" - }, - { - "name": "Kaznakov's viper", - "scientific": "Vipera kaznakovi" - }, - { - "name": "Kham Plateau pitviper", - "scientific": "Protobothrops xiangchengensis" - }, - { - "name": "Lachesis (genus)", - "scientific": "Lachesis (genus)" - }, - { - "name": "Large-eyed pitviper", - "scientific": "Trimeresurus macrops" - }, - { - "name": "Large-scaled tree viper", - "scientific": "Trimeresurus macrolepis" - }, - { - "name": "Leaf-nosed viper", - "scientific": "Eristicophis" - }, - { - "name": "Leaf viper", - "scientific": "Atheris squamigera" - }, - { - "name": "Levant viper", - "scientific": "Macrovipera lebetina" - }, - { - "name": "Long-nosed viper", - "scientific": "Vipera ammodytes" - }, - { - "name": "Macklot's python", - "scientific": "Liasis mackloti" - }, - { - "name": "Madagascar tree boa", - "scientific": "Sanzinia" - }, - { - "name": "Malabar rock pitviper", - "scientific": "Trimeresurus malabaricus" - }, - { - "name": "Malcolm's tree viper", - "scientific": "Trimeresurus sumatranus malcolmi" - }, - { - "name": "Mandalay cobra", - "scientific": "Mandalay spitting cobra" - }, - { - "name": "Mangrove pit viper", - "scientific": "Trimeresurus purpureomaculatus" - }, - { - "name": "Mangshan pitviper", - "scientific": "Trimeresurus mangshanensis" - }, - { - "name": "McMahon's viper", - "scientific": "Eristicophis" - }, - { - "name": "Mexican palm-pitviper", - "scientific": "Bothriechis rowleyi" - }, - { - "name": "Monocled cobra", - "scientific": "Monocled cobra" - }, - { - "name": "Motuo bamboo pitviper", - "scientific": "Trimeresurus medoensis" - }, - { - "name": "Mozambique spitting cobra", - "scientific": "Mozambique spitting cobra" - }, - { - "name": "Namaqua dwarf adder", - "scientific": "Bitis schneideri" - }, - { - "name": "Namib dwarf sand adder", - "scientific": "Bitis peringueyi" - }, - { - "name": "New Guinea carpet python", - "scientific": "Morelia spilota variegata" - }, - { - "name": "Nicobar bamboo pitviper", - "scientific": "Trimeresurus labialis" - }, - { - "name": "Nitsche's bush viper", - "scientific": "Atheris nitschei" - }, - { - "name": "Nitsche's tree viper", - "scientific": "Atheris nitschei" - }, - { - "name": "Northwestern carpet python", - "scientific": "Morelia spilota variegata" - }, - { - "name": "Nubian spitting cobra", - "scientific": "Nubian spitting cobra" - }, - { - "name": "Oenpelli python", - "scientific": "Oenpelli python" - }, - { - "name": "Olive python", - "scientific": "Liasis olivaceus" - }, - { - "name": "Pallas' viper", - "scientific": "Gloydius halys" - }, - { - "name": "Palm viper", - "scientific": "Bothriechis lateralis" - }, - { - "name": "Papuan python", - "scientific": "Apodora" - }, - { - "name": "Peringuey's adder", - "scientific": "Bitis peringueyi" - }, - { - "name": "Philippine cobra", - "scientific": "Philippine cobra" - }, - { - "name": "Philippine pitviper", - "scientific": "Trimeresurus flavomaculatus" - }, - { - "name": "Pope's tree viper", - "scientific": "Trimeresurus popeorum" - }, - { - "name": "Portuguese viper", - "scientific": "Vipera seoanei" - }, - { - "name": "Puerto Rican boa", - "scientific": "Puerto Rican boa" - }, - { - "name": "Rainbow boa", - "scientific": "Rainbow boa" - }, - { - "name": "Red spitting cobra", - "scientific": "Red spitting cobra" - }, - { - "name": "Rhinoceros viper", - "scientific": "Bitis nasicornis" - }, - { - "name": "Rhombic night adder", - "scientific": "Causus maculatus" - }, - { - "name": "Rinkhals", - "scientific": "Rinkhals" - }, - { - "name": "Rinkhals cobra", - "scientific": "Rinkhals" - }, - { - "name": "River jack", - "scientific": "Bitis nasicornis" - }, - { - "name": "Rough-scaled bush viper", - "scientific": "Atheris hispida" - }, - { - "name": "Rough-scaled python", - "scientific": "Rough-scaled python" - }, - { - "name": "Rough-scaled tree viper", - "scientific": "Atheris hispida" - }, - { - "name": "Royal python", - "scientific": "Ball python" - }, - { - "name": "Rungwe tree viper", - "scientific": "Atheris nitschei rungweensis" - }, - { - "name": "Sakishima habu", - "scientific": "Trimeresurus elegans" - }, - { - "name": "Savu python", - "scientific": "Liasis mackloti savuensis" - }, - { - "name": "Schlegel's viper", - "scientific": "Bothriechis schlegelii" - }, - { - "name": "Schultze's pitviper", - "scientific": "Trimeresurus schultzei" - }, - { - "name": "Sedge viper", - "scientific": "Atheris nitschei" - }, - { - "name": "Sharp-nosed viper", - "scientific": "Deinagkistrodon" - }, - { - "name": "Siamese palm viper", - "scientific": "Trimeresurus puniceus" - }, - { - "name": "Side-striped palm-pitviper", - "scientific": "Bothriechis lateralis" - }, - { - "name": "Snorkel viper", - "scientific": "Deinagkistrodon" - }, - { - "name": "Snouted cobra", - "scientific": "Snouted cobra" - }, - { - "name": "Sonoran sidewinder", - "scientific": "Crotalus cerastes cercobombus" - }, - { - "name": "Southern Indonesian spitting cobra", - "scientific": "Javan spitting cobra" - }, - { - "name": "Southern Philippine cobra", - "scientific": "Samar cobra" - }, - { - "name": "Spiny bush viper", - "scientific": "Atheris hispida" - }, - { - "name": "Spitting cobra", - "scientific": "Spitting cobra" - }, - { - "name": "Spotted python", - "scientific": "Spotted python" - }, - { - "name": "Sri Lankan pit viper", - "scientific": "Trimeresurus trigonocephalus" - }, - { - "name": "Stejneger's bamboo pitviper", - "scientific": "Trimeresurus stejnegeri" - }, - { - "name": "Storm water cobra", - "scientific": "Naja annulata" - }, - { - "name": "Sumatran tree viper", - "scientific": "Trimeresurus sumatranus" - }, - { - "name": "Temple viper", - "scientific": "Tropidolaemus wagleri" - }, - { - "name": "Tibetan bamboo pitviper", - "scientific": "Trimeresurus tibetanus" - }, - { - "name": "Tiger pit viper", - "scientific": "Trimeresurus kanburiensis" - }, - { - "name": "Timor python", - "scientific": "Python timoriensis" - }, - { - "name": "Tokara habu", - "scientific": "Trimeresurus tokarensis" - }, - { - "name": "Tree boa", - "scientific": "Emerald tree boa" - }, - { - "name": "Undulated pit viper", - "scientific": "Ophryacus undulatus" - }, - { - "name": "Ursini's viper", - "scientific": "Vipera ursinii" - }, - { - "name": "Wagler's pit viper", - "scientific": "Tropidolaemus wagleri" - }, - { - "name": "West African brown spitting cobra", - "scientific": "Mozambique spitting cobra" - }, - { - "name": "White-lipped tree viper", - "scientific": "Trimeresurus albolabris" - }, - { - "name": "Wirot's pit viper", - "scientific": "Trimeresurus puniceus" - }, - { - "name": "Yellow-lined palm viper", - "scientific": "Bothriechis lateralis" - }, - { - "name": "Zebra spitting cobra", - "scientific": "Naja nigricincta" - }, - { - "name": "Yarara", - "scientific": "Bothrops jararaca" - }, - { - "name": "Wetar Island python", - "scientific": "Liasis macklot" - }, - { - "name": "Urutus", - "scientific": "Bothrops alternatus" - }, - { - "name": "Titanboa", - "scientific": "Titanoboa" - } -]
\ No newline at end of file diff --git a/pysite/migrations/tables/snake_quiz/__init__.py b/pysite/migrations/tables/snake_quiz/__init__.py deleted file mode 100644 index e69de29b..00000000 --- a/pysite/migrations/tables/snake_quiz/__init__.py +++ /dev/null diff --git a/pysite/migrations/tables/snake_quiz/initial_data.json b/pysite/migrations/tables/snake_quiz/initial_data.json deleted file mode 100644 index 8c426b22..00000000 --- a/pysite/migrations/tables/snake_quiz/initial_data.json +++ /dev/null @@ -1,200 +0,0 @@ -[ - { - "id": 0, - "question": "How long have snakes been roaming the Earth for?", - "options": { - "a": "3 million years", - "b": "30 million years", - "c": "130 million years", - "d": "200 million years" - }, - "answerkey": "c" - }, - { - "id": 1, - "question": "What characteristics do all snakes share?", - "options": { - "a": "They are carnivoes", - "b": "They are all programming languages", - "c": "They're all cold-blooded", - "d": "They are both carnivores and cold-blooded" - }, - "answerkey": "c" - }, - { - "id": 2, - "question": "How do snakes hear?", - "options": { - "a": "With small ears", - "b": "Through their skin", - "c": "Through their tail", - "d": "They don't use their ears at all" - }, - "answerkey": "b" - }, - { - "id": 3, - "question": "What can't snakes see?", - "options": { - "a": "Colour", - "b": "Light", - "c": "Both of the above", - "d": "Other snakes" - }, - "answerkey": "a" - }, - { - "id": 4, - "question": "What unique vision ability do boas and pythons possess?", - "options": { - "a": "Night vision", - "b": "Infrared vision", - "c": "See through walls", - "d": "They don't have vision" - }, - "answerkey": "b" - }, - { - "id": 5, - "question": "How does a snake smell?", - "options": { - "a": "Quite pleasant", - "b": "Through its nose", - "c": "Through its tongues", - "d": "Both through its nose and its tongues" - }, - "answerkey": "d" - }, - { - "id": 6, - "question": "Where are Jacobson's organs located in snakes?", - "options": { - "a": "Mouth", - "b": "Tail", - "c": "Stomach", - "d": "Liver" - }, - "answerkey": "a" - }, - { - "id": 7, - "question": "Snakes have very similar internal organs compared to humans. Snakes, however; lack the following:", - "options": { - "a": "A diaphragm", - "b": "Intestines", - "c": "Lungs", - "d": "Kidney" - }, - "answerkey": "a" - }, - { - "id": 8, - "question": "Snakes have different shaped lungs than humans. What do snakes have?", - "options": { - "a": "An elongated right lung", - "b": "A small left lung", - "c": "Both of the above", - "d": "None of the above" - }, - "answerkey": "c" - }, - { - "id": 9, - "question": "What's true about two-headed snakes?", - "options": { - "a": "They're a myth!", - "b": "They rarely survive in the wild", - "c": "They're very dangerous", - "d": "They can kiss each other" - }, - "answerkey": "b" - }, - { - "id": 10, - "question": "What substance covers a snake's skin?", - "options": { - "a": "Calcium", - "b": "Keratin", - "c": "Copper", - "d": "Iron" - }, - "answerkey": "b" - }, - { - "id": 11, - "question": "What snake doesn't have to have a mate to lay eggs?", - "options": { - "a": "Copperhead", - "b": "Cornsnake", - "c": "Kingsnake", - "d": "Flower pot snake" - }, - "answerkey": "d" - }, - { - "id": 12, - "question": "What snake is the longest?", - "options": { - "a": "Green anaconda", - "b": "Reticulated python", - "c": "King cobra", - "d": "Kingsnake" - }, - "answerkey": "b" - }, - { - "id": 13, - "question": "Though invasive species can now be found in the Everglades, in which three continents are pythons (members of the family Pythonidae) found in the wild?", - "options": { - "a": "Africa, Asia and Australia", - "b": "Africa, Australia and Europe", - "c": "Africa, Australia and South America", - "d": "Africa, Asia and South America" - }, - "answerkey": "a" - }, - { - "id": 14, - "question": "Pythons are held as some of the most dangerous snakes on earth, but are often confused with anacondas. Which of these is *not* a difference between pythons and anacondas?", - "options": { - "a": "Pythons suffocate their prey, anacondas crush them", - "b": "Pythons lay eggs, anacondas give birth to live young", - "c": "Pythons grow longer, anacondas grow heavier", - "d": "Pythons generally spend less time in water than anacondas do" - }, - "answerkey": "a" - }, - { - "id": 15, - "question": "Pythons are unable to chew their food, and so swallow prey whole. Which of these methods is most commonly demonstrated to help a python to swallow large prey?", - "options": { - "a": "The python's stomach pressure is reduced, so prey is sucked in", - "b": "An extra set of upper teeth 'walk' along the prey", - "c": "The python holds its head up, so prey falls into its stomach", - "d": "Prey is pushed against a barrier and is forced down the python's throat" - }, - "answerkey": "b" - }, - { - "id": 16, - "question": "Pythons, like many large constrictors, possess vestigial hind limbs. Whilst these 'spurs' serve no purpose in locomotion, how are they put to use by some male pythons? ", - "options": { - "a": "To store sperm", - "b": "To release pheromones", - "c": "To grip females during mating", - "d": "To fight off rival males" - }, - "answerkey": "c" - }, - { - "id": 17, - "question": "Pythons tend to travel by the rectilinear method (in straight lines) when on land, as opposed to the concertina method (s-shaped movement). Why do large pythons tend not to use the concertina method? ", - "options": { - "a": "Their spine is too inflexible", - "b": "They move too slowly", - "c": "The scales on their backs are too rigid", - "d": "They are too heavy" - }, - "answerkey": "d" - } -] diff --git a/pysite/migrations/tables/special_snakes/__init__.py b/pysite/migrations/tables/special_snakes/__init__.py deleted file mode 100644 index e69de29b..00000000 --- a/pysite/migrations/tables/special_snakes/__init__.py +++ /dev/null diff --git a/pysite/migrations/tables/special_snakes/initial_data.json b/pysite/migrations/tables/special_snakes/initial_data.json deleted file mode 100644 index 8159f914..00000000 --- a/pysite/migrations/tables/special_snakes/initial_data.json +++ /dev/null @@ -1,16 +0,0 @@ -[ - { - "name": "Bob Ross", - "info": "Robert Norman Ross (October 29, 1942 – July 4, 1995) was an American painter, art instructor, and television host. He was the creator and host of The Joy of Painting, an instructional television program that aired from 1983 to 1994 on PBS in the United States, and also aired in Canada, Latin America, and Europe.", - "image_list": [ - "https://d3atagt0rnqk7k.cloudfront.net/wp-content/uploads/2016/09/23115633/bob-ross-1-1280x800.jpg" - ] - }, - { - "name": "Mystery Snake", - "info": "The Mystery Snake is rumored to be a thin, serpentine creature that hides in spaghetti dinners. It has yellow, pasta-like scales with a completely smooth texture, and is quite glossy. ", - "image_list": [ - "https://img.thrfun.com/img/080/349/spaghetti_dinner_l1.jpg" - ] - } -]
\ No newline at end of file diff --git a/pysite/migrations/tables/users/__init__.py b/pysite/migrations/tables/users/__init__.py deleted file mode 100644 index e69de29b..00000000 --- a/pysite/migrations/tables/users/__init__.py +++ /dev/null diff --git a/pysite/migrations/tables/users/v1.py b/pysite/migrations/tables/users/v1.py deleted file mode 100644 index 9ba70142..00000000 --- a/pysite/migrations/tables/users/v1.py +++ /dev/null @@ -1,11 +0,0 @@ -def run(db, table, table_obj): - """ - Remove stored email addresses from every user document - """ - - for document in db.get_all(table): - if "email" in document: - del document["email"] - - db.insert(table, document, conflict="update", durability="soft") - db.sync(table) diff --git a/pysite/migrations/tables/users/v2.py b/pysite/migrations/tables/users/v2.py deleted file mode 100644 index 820d0d6d..00000000 --- a/pysite/migrations/tables/users/v2.py +++ /dev/null @@ -1,11 +0,0 @@ -def run(db, table, table_obj): - """ - Remove stored email addresses from every user document - "apparently `update` doesn't update" update - """ - - for document in db.get_all(table): - if "email" in document: - del document["email"] - - db.insert(table, document, conflict="replace", durability="soft") - db.sync(table) diff --git a/pysite/migrations/tables/wiki/__init__.py b/pysite/migrations/tables/wiki/__init__.py deleted file mode 100644 index e69de29b..00000000 --- a/pysite/migrations/tables/wiki/__init__.py +++ /dev/null diff --git a/pysite/migrations/tables/wiki/v1.py b/pysite/migrations/tables/wiki/v1.py deleted file mode 100644 index 22670342..00000000 --- a/pysite/migrations/tables/wiki/v1.py +++ /dev/null @@ -1,11 +0,0 @@ -def run(db, table, table_obj): - """ - Ensure that there are no wiki articles that don't have titles - """ - - for document in db.pluck(table, table_obj.primary_key, "title"): - if not document.get("title"): - document["title"] = "No Title" - - db.insert(table, document, conflict="update", durability="soft") - db.sync(table) diff --git a/pysite/mixins.py b/pysite/mixins.py deleted file mode 100644 index 98528891..00000000 --- a/pysite/mixins.py +++ /dev/null @@ -1,214 +0,0 @@ -from typing import Any, Dict -from weakref import ref - -from flask import Blueprint -from kombu import Connection -from rethinkdb.ast import Table - -from pysite.constants import ( - BOT_EVENT_QUEUE, BotEventTypes, - RMQ_HOST, RMQ_PASSWORD, RMQ_PORT, RMQ_USERNAME -) -from pysite.database import RethinkDB -from pysite.oauth import OAuthBackend - - -BOT_EVENT_REQUIRED_PARAMS = { - "mod_log": ("level", "title", "message"), - "send_message": ("target", "message"), - "send_embed": ("target",), - "add_role": ("target", "role_id", "reason"), - "remove_role": ("target", "role_id", "reason") -} - - -class DBMixin: - """ - Mixin for classes that make use of RethinkDB. It can automatically create a table with the specified primary - key using the attributes set at class-level. - - This class is intended to be mixed in alongside one of the other view classes. For example: - - >>> class MyView(APIView, DBMixin): - ... name = "my_view" # Flask internal name for this route - ... path = "/my_view" # Actual URL path to reach this route - ... table_name = "my_table" # Name of the table to create - ... table_primary_key = "username" # Primary key to set for this table - - This class will also work with Websockets: - - >>> class MyWebsocket(WS, DBMixin): - ... name = "my_websocket" - ... path = "/my_websocket" - ... table_name = "my_table" - ... table_primary_key = "username" - - You may omit `table_primary_key` and it will be defaulted to RethinkDB's default column - "id". - """ - - table_name = "" # type: str - table_primary_key = "id" # type: str - - @classmethod - def setup(cls: "DBMixin", manager: "pysite.route_manager.RouteManager", blueprint: Blueprint): - """ - Set up the view by creating the table specified by the class attributes - this will also deal with multiple - inheritance by calling `super().setup()` as appropriate. - - :param manager: Instance of the current RouteManager (used to get a handle for the database object) - :param blueprint: Current Flask blueprint - """ - - if hasattr(super(), "setup"): - super().setup(manager, blueprint) # pragma: no cover - - cls._db = ref(manager.db) - - @property - def table(self) -> Table: - return self.db.query(self.table_name) - - @property - def db(self) -> RethinkDB: - return self._db() - - -class RMQMixin: - """ - Mixin for classes that make use of RabbitMQ. It allows routes to send JSON-encoded messages to specific RabbitMQ - queues. - - This class is intended to be mixed in alongside one of the other view classes. For example: - - >>> class MyView(APIView, RMQMixin): - ... name = "my_view" # Flask internal name for this route - ... path = "/my_view" # Actual URL path to reach this route - ... queue_name = "my_queue" # Name of the RabbitMQ queue to send on - - Note that the queue name is optional if all you want to do is send bot events. - - This class will also work with Websockets: - - >>> class MyWebsocket(WS, RMQMixin): - ... name = "my_websocket" - ... path = "/my_websocket" - ... queue_name = "my_queue" - """ - - queue_name = "" - - @classmethod - def setup(cls: "RMQMixin", manager: "pysite.route_manager.RouteManager", blueprint: Blueprint): - """ - Set up the view by calling `super().setup()` as appropriate. - - :param manager: Instance of the current RouteManager (used to get a handle for the database object) - :param blueprint: Current Flask blueprint - """ - - if hasattr(super(), "setup"): - super().setup(manager, blueprint) # pragma: no cover - - @property - def rmq_connection(self) -> Connection: - """ - Get a Kombu AMQP connection object - use this in a context manager so that it gets closed after you're done - - If you're just trying to send a message, check out `rmq_send` and `rmq_bot_event` instead. - """ - - return Connection(hostname=RMQ_HOST, userid=RMQ_USERNAME, password=RMQ_PASSWORD, port=RMQ_PORT) - - def rmq_send(self, data: Dict[str, Any], routing_key: str = None): - """ - Send some data to the RabbitMQ queue - - >>> self.rmq_send({ - ... "text": "My hovercraft is full of eels!", - ... "source": "Dirty Hungarian Phrasebook" - ... }) - ... - - This will be delivered to the queue immediately. - """ - - if routing_key is None: - routing_key = self.queue_name - - with self.rmq_connection as c: - producer = c.Producer() - producer.publish(data, routing_key=routing_key) - - def rmq_bot_event(self, event_type: BotEventTypes, data: Dict[str, Any]): - """ - Send an event to the queue responsible for delivering events to the bot - - >>> self.rmq_bot_event(BotEventTypes.send_message, { - ... "channel": CHANNEL_MOD_LOG, - ... "message": "This is a plain-text message for @everyone, from the site!" - ... }) - ... - - This will be delivered to the bot and actioned immediately, or when the bot comes online if it isn't already - connected. - """ - - if not isinstance(event_type, BotEventTypes): - raise ValueError("`event_type` must be a member of the the `pysite.constants.BotEventTypes` enum") - - event_type = event_type.value - required_params = BOT_EVENT_REQUIRED_PARAMS[event_type] - - for param in required_params: - if param not in data: - raise KeyError(f"Event is missing required parameter: {param}") - - return self.rmq_send( - {"event": event_type, "data": data}, - routing_key=BOT_EVENT_QUEUE, - ) - - -class OAuthMixin: - """ - Mixin for the classes that need access to a logged in user's information. This class should be used - to grant route's access to user information, such as name, email, id, ect. - - There will almost never be a need for someone to inherit this, as BaseView does that for you. - - This class will add 3 properties to your route: - - * logged_in (bool): True if user is registered with the site, False else wise. - - * user_data (dict): A dict that looks like this: - - { - "user_id": Their discord ID, - "username": Their discord username (without discriminator), - "discriminator": Their discord discriminator, - "email": Their email, in which is connected to discord - } - - user_data returns None, if the user isn't logged in. - - * oauth (OAuthBackend): The instance of pysite.oauth.OAuthBackend, connected to the RouteManager. - """ - - @classmethod - def setup(cls: "OAuthMixin", manager: "pysite.route_manager.RouteManager", blueprint: Blueprint): - if hasattr(super(), "setup"): - super().setup(manager, blueprint) # pragma: no cover - - cls._oauth = ref(manager.oauth_backend) - - @property - def logged_in(self) -> bool: - return self.user_data is not None - - @property - def user_data(self) -> dict: - return self.oauth.user_data() - - @property - def oauth(self) -> OAuthBackend: - return self._oauth() diff --git a/pysite/oauth.py b/pysite/oauth.py deleted file mode 100644 index 86e7cdde..00000000 --- a/pysite/oauth.py +++ /dev/null @@ -1,86 +0,0 @@ -import logging -from uuid import uuid4, uuid5 - -from flask import session -from flask_dance.consumer.backend import BaseBackend -from flask_dance.contrib.discord import discord - -from pysite.constants import DISCORD_API_ENDPOINT, OAUTH_DATABASE - - -class OAuthBackend(BaseBackend): - """ - This is the backend for the oauth - - This is used to manage users that have completed - an oauth dance. It contains 3 functions, get, set, - and delete, however we only use set. - - Inherits: - flake_dance.consumer.backend.BaseBackend - pysite.mixins.DBmixin - - Properties: - key: The app's secret, we use it too make session IDs - """ - - def __init__(self, manager): - super().__init__() - self.db = manager.db - self.key = manager.app.secret_key - self.db.create_table(OAUTH_DATABASE, primary_key="id") - - def get(self, *args, **kwargs): # Not used - pass - - def set(self, blueprint, token): - user = self.get_user() - sess_id = str(uuid5(uuid4(), self.key)) - self.add_user(token, user, sess_id) - - def delete(self, blueprint): # Not used - pass - - def add_user(self, token_data: dict, user_data: dict, session_id: str): - session["session_id"] = session_id - - self.db.insert( - OAUTH_DATABASE, - { - "id": session_id, - "access_token": token_data["access_token"], - "refresh_token": token_data["refresh_token"], - "expires_at": token_data["expires_at"], - "snowflake": user_data["id"] - }, - conflict="replace" - ) - - self.db.insert( - "users", - { - "user_id": user_data["id"], - "username": user_data["username"], - "discriminator": user_data["discriminator"] - }, - conflict="update" - ) - - def get_user(self) -> dict: - resp = discord.get(DISCORD_API_ENDPOINT + "/users/@me") # 'discord' is a request.Session with oauth information - if resp.status_code != 200: - logging.warning("Unable to get user information: " + str(resp.json())) - return resp.json() - - def user_data(self): - user_id = session.get("session_id") - if user_id: # If the user is logged in, get user info. - creds = self.db.get(OAUTH_DATABASE, user_id) - if creds: - return self.db.get("users", creds["snowflake"]) - - def logout(self): - sess_id = session.get("session_id") - if sess_id and self.db.get(OAUTH_DATABASE, sess_id): # If user exists in db, - self.db.delete(OAUTH_DATABASE, sess_id) # remove them (at least, their session) - session.clear() diff --git a/pysite/queues.py b/pysite/queues.py deleted file mode 100644 index 7a200208..00000000 --- a/pysite/queues.py +++ /dev/null @@ -1,5 +0,0 @@ -from kombu import Queue - -QUEUES = { # RabbitMQ Queue definitions, they'll be declared at gunicorn start time - "bot_events": Queue("bot_events", durable=True) -} diff --git a/pysite/route_manager.py b/pysite/route_manager.py deleted file mode 100644 index 79fb67ac..00000000 --- a/pysite/route_manager.py +++ /dev/null @@ -1,146 +0,0 @@ -import importlib -import inspect -import logging -import os - -from flask import Blueprint, Flask, _request_ctx_stack -from flask_dance.contrib.discord import make_discord_blueprint -from flask_sockets import Sockets -from gunicorn_config import _when_ready as when_ready - -from pysite.base_route import APIView, BaseView, ErrorView, RedirectView, RouteView, TemplateView -from pysite.constants import ( - CSRF, DEBUG_MODE, DISCORD_OAUTH_AUTHORIZED, DISCORD_OAUTH_ID, DISCORD_OAUTH_REDIRECT, - DISCORD_OAUTH_SCOPE, DISCORD_OAUTH_SECRET, PREFERRED_URL_SCHEME) -from pysite.database import RethinkDB -from pysite.oauth import OAuthBackend -from pysite.websockets import WS - -TEMPLATES_PATH = "../templates" -STATIC_PATH = "../static" - - -class RouteManager: - def __init__(self): - - # Set up the app and the database - self.app = Flask( - __name__, template_folder=TEMPLATES_PATH, static_folder=STATIC_PATH, static_url_path="/static", - ) - self.sockets = Sockets(self.app) - - self.db = RethinkDB() - self.log = logging.getLogger(__name__) - self.app.secret_key = os.environ.get("WEBPAGE_SECRET_KEY", "super_secret") - self.app.config["SERVER_NAME"] = os.environ.get("SERVER_NAME", "pythondiscord.local:8080") - self.app.config["PREFERRED_URL_SCHEME"] = PREFERRED_URL_SCHEME - self.app.config["WTF_CSRF_CHECK_DEFAULT"] = False # We only want to protect specific routes - - # Trim blocks so that {% block %} statements in templates don't generate blank lines - self.app.jinja_env.trim_blocks = True - self.app.jinja_env.lstrip_blocks = True - - # We make the token valid for the lifetime of the session because of the wiki - you might spend some - # time editing an article, and it seems that session lifetime is a good analogue for how long you have - # to edit - self.app.config["WTF_CSRF_TIME_LIMIT"] = None - - if DEBUG_MODE: - # Migrate the database, as we would in prod - when_ready(output_func=self.db.log.info) - - self.app.before_request(self.db.before_request) - self.app.teardown_request(self.db.teardown_request) - - CSRF.init_app(self.app) # Set up CSRF protection - - # Load the oauth blueprint - self.oauth_backend = OAuthBackend(self) - self.oauth_blueprint = make_discord_blueprint( - DISCORD_OAUTH_ID, - DISCORD_OAUTH_SECRET, - DISCORD_OAUTH_SCOPE, - login_url=DISCORD_OAUTH_REDIRECT, - authorized_url=DISCORD_OAUTH_AUTHORIZED, - redirect_to="main.auth.done", - backend=self.oauth_backend - ) - self.log.debug(f"Loading Blueprint: {self.oauth_blueprint.name}") - self.app.register_blueprint(self.oauth_blueprint) - self.log.debug("") - - # Load the main blueprint - self.main_blueprint = Blueprint("main", __name__) - self.log.debug(f"Loading Blueprint: {self.main_blueprint.name}") - self.load_views(self.main_blueprint, "pysite/views/main") - self.load_views(self.main_blueprint, "pysite/views/error_handlers") - self.app.register_blueprint(self.main_blueprint) - self.log.debug("") - - # Load the subdomains - self.subdomains = ["api", "staff", "wiki"] - - for sub in self.subdomains: - try: - sub_blueprint = Blueprint(sub, __name__, subdomain=sub) - self.log.debug(f"Loading Blueprint: {sub_blueprint.name}") - self.load_views(sub_blueprint, f"pysite/views/{sub}") - self.app.register_blueprint(sub_blueprint) - except Exception: - logging.getLogger(__name__).exception(f"Failed to register blueprint for subdomain: {sub}") - - # Load the websockets - self.ws_blueprint = Blueprint("ws", __name__) - - self.log.debug("Loading websocket routes...") - self.load_views(self.ws_blueprint, "pysite/views/ws") - self.sockets.register_blueprint(self.ws_blueprint, url_prefix="/ws") - - self.app.before_request(self.https_fixing_hook) # Try to fix HTTPS issues - - def https_fixing_hook(self): - """ - Attempt to fix HTTPS issues by modifying the request context stack - """ - - if _request_ctx_stack is not None: - reqctx = _request_ctx_stack.top - reqctx.url_adapter.url_scheme = PREFERRED_URL_SCHEME - - def run(self): - from gevent.pywsgi import WSGIServer - from geventwebsocket.handler import WebSocketHandler - - server = WSGIServer( - ("0.0.0.0", int(os.environ.get("WEBPAGE_PORT", 8080))), # noqa: B104, S104 - self.app, handler_class=WebSocketHandler - ) - server.serve_forever() - - def load_views(self, blueprint, location="pysite/views"): - for filename in os.listdir(location): - if os.path.isdir(f"{location}/{filename}"): - # Recurse if it's a directory; load ALL the views! - self.load_views(blueprint, location=f"{location}/{filename}") - continue - - if filename.endswith(".py") and not filename.startswith("__init__"): - module = importlib.import_module(f"{location}/{filename}".replace("/", ".")[:-3]) - - for cls_name, cls in inspect.getmembers(module): - if ( - inspect.isclass(cls) and - cls is not BaseView and - cls is not ErrorView and - cls is not RouteView and - cls is not APIView and - cls is not WS and - cls is not TemplateView and - cls is not RedirectView and - ( - BaseView in cls.__mro__ or - WS in cls.__mro__ - ) - ): - cls.setup(self, blueprint) - self.log.debug(f">> View loaded: {cls.name: <15} ({module.__name__}.{cls_name})") diff --git a/pysite/rst/__init__.py b/pysite/rst/__init__.py deleted file mode 100644 index e58fbe8c..00000000 --- a/pysite/rst/__init__.py +++ /dev/null @@ -1,108 +0,0 @@ -import re - -from docutils.core import publish_parts -from docutils.parsers.rst.directives import register_directive -from docutils.parsers.rst.roles import register_canonical_role - -from pysite.rst.directives import ButtonDirective -from pysite.rst.roles import fira_code_role, icon_role, page_role, url_for_role - -RST_TEMPLATE = """.. contents:: - -{0}""" - -CONTENTS_REGEX = re.compile(r"""<div class=\"contents topic\" id=\"contents\">(.*?)</div>""", re.DOTALL) -HREF_REGEX = re.compile(r"""<a class=\"reference internal\" href=\"(.*?)\".*?>(.*?)</a>""") - -TABLE_FRAGMENT = """<table class="uk-table uk-table-divider table-bordered uk-table-striped">""" - - -def render(rst: str, link_headers=True): - if link_headers: - rst = RST_TEMPLATE.format(rst) - - html = publish_parts( - source=rst, writer_name="html5", settings_overrides={ - "halt_level": 2, "syntax_highlight": "short", "initial_header_level": 3 - } - )["html_body"] - - data = { - "html": html, - "headers": [] - } - - if link_headers: - match = CONTENTS_REGEX.search(html) # Find the contents HTML - - if match: - data["html"] = html.replace(match.group(0), "") # Remove the contents from the document HTML - depth = 0 - headers = [] - current_header = {} - - group = match.group(1) - - # Sanitize the output so we can more easily parse it - group = group.replace("<li>", "<li>\n") - group = group.replace("</li>", "\n</li>") - group = group.replace("<p>", "<p>\n") - group = group.replace("</p>", "\n</p>") - - for line in group.split("\n"): - line = line.strip() # Remove excess whitespace - - if not line: # Nothing to process - continue - - if line.startswith("<li>") and depth <= 2: - # We've found a header, or the start of a header group - depth += 1 - elif line.startswith("</li>") and depth >= 0: - # That's the end of a header or header group - - if depth == 1: - # We just dealt with an entire header group, so store it - headers.append(current_header.copy()) # Store a copy, since we're clearing the dict - current_header.clear() - - depth -= 1 - elif line.startswith("<a") and depth <= 2: - # We've found an actual URL - match = HREF_REGEX.match(line) # Parse the line for the ID and header title - - if depth == 1: # Top-level header, so just store it in the current header - current_header["id"] = match.group(1) - - title = match.group(2) - - if title.startswith("<i"): # We've found an icon, which needs to have a space after it - title = title.replace("</i> ", "</i> ") - - current_header["title"] = title - else: # Second-level (or deeper) header, should be stored in a list of sub-headers - sub_headers = current_header.get("sub_headers", []) - title = match.group(2) - - if title.startswith("<i"): # We've found an icon, which needs to have a space after it - title = title.replace("</i> ", "</i> ") - - sub_headers.append({ - "id": match.group(1), - "title": title - }) - current_header["sub_headers"] = sub_headers - - data["headers"] = headers - - data["html"] = data["html"].replace("<table>", TABLE_FRAGMENT) # Style the tables properly - - return data - - -register_canonical_role("fira_code", fira_code_role) -register_canonical_role("icon", icon_role) -register_canonical_role("page", page_role) -register_canonical_role("url_for", url_for_role) - -register_directive("button", ButtonDirective) diff --git a/pysite/rst/directives/__init__.py b/pysite/rst/directives/__init__.py deleted file mode 100644 index b4359200..00000000 --- a/pysite/rst/directives/__init__.py +++ /dev/null @@ -1,65 +0,0 @@ -from docutils import nodes -from docutils.parsers.rst import Directive -from docutils.parsers.rst.directives import unchanged, unchanged_required -from flask import url_for -from jinja2 import escape - -BUTTON_TYPES = ("default", "primary", "secondary", "danger", "darkish", "darker") - -ICON_WEIGHT_TABLE = { - "light": "fal", - "regular": "far", - "solid": "fas", - "branding": "fab" -} -ICON_WEIGHTS = tuple(ICON_WEIGHT_TABLE.values()) - - -class ButtonDirective(Directive): - has_content = True - - option_spec = { - "icon": unchanged_required, - "text": unchanged_required, - "type": unchanged, - "url": unchanged, - } - - def run(self): - icon = self.options.get("icon", "") - button_type = self.options.get("type", "primary") - - text = self.options["text"] - url = self.options["url"] - - if icon: - parts = [escape(x) for x in icon.split("/")] - - if len(parts) != 2: - raise self.error("Icon specification must be in the form <type>/<name>") - elif parts: - weight = parts[0] - - if weight not in ICON_WEIGHTS: - weight = ICON_WEIGHT_TABLE.get(weight) - - if not weight: - raise self.error( - "Icon type must be one of light, regular, solid or " - "branding, or a font-awesome weight class" - ) - - icon_html = f"""<i class="uk-icon fa-fw {weight} fa-{parts[1]}"></i>""" - else: - icon_html = "" - - if button_type not in BUTTON_TYPES: - self.error(f"Button type must be one of {', '.join(BUTTON_TYPES[:-1])} or {[-1]}") - - if url.startswith("flask://"): - url = url_for(url.split("://", 1)[1]) - elif url.startswith("wiki://"): - url = url_for("wiki.page", page=url.split("://", 1)[1]) - html = f"""<a class="uk-button uk-button-{button_type}" href=\"{url}\">{icon_html} {text}</a>""" - - return [nodes.raw(html, html, format="html", **{})] diff --git a/pysite/rst/roles.py b/pysite/rst/roles.py deleted file mode 100644 index d83f07f9..00000000 --- a/pysite/rst/roles.py +++ /dev/null @@ -1,125 +0,0 @@ -from docutils import nodes -from docutils.parsers.rst.roles import set_classes -from docutils.parsers.rst.states import Inliner -from flask import url_for -from jinja2 import escape - - -def icon_role(_role: str, rawtext: str, text: str, lineno: int, inliner: Inliner, - options: dict = None, _content: dict = None): - if options is None: - options = {} - - set_classes(options) - - if "/" in text: - parts = [escape(x) for x in text.split("/")] - else: - msg = inliner.reporter.error("Icon specification must be in the form <type>/<name>", line=lineno) - prb = inliner.problematic(text, rawtext, msg) - - return [prb], [msg] - - if len(parts) != 2: - msg = inliner.reporter.error("Icon specification must be in the form <type>/<name>", line=lineno) - prb = inliner.problematic(text, rawtext, msg) - - return [prb], [msg] - else: - if parts[0] == "light": - weight = "fal" - elif parts[0] == "regular": - weight = "far" - elif parts[0] == "solid": - weight = "fas" - elif parts[0] == "branding": - weight = "fab" - else: - msg = inliner.reporter.error("Icon type must be one of light, regular, solid or branding", line=lineno) - prb = inliner.problematic(text, rawtext, msg) - - return [prb], [msg] - - html = f"""<i class="uk-icon fa-fw {weight} fa-{parts[1]}"></i>""" - - node = nodes.raw(html, html, format="html", **options) - return [node], [] - - -def url_for_role(_role: str, rawtext: str, text: str, lineno: int, inliner: Inliner, - options: dict = None, _content: dict = None): - if options is None: - options = {} - - set_classes(options) - - if "/" in text: - parts = [escape(x) for x in text.split("/")] - else: - msg = inliner.reporter.error("URL specification must be in the form <page.name>/<text>", line=lineno) - prb = inliner.problematic(text, rawtext, msg) - - return [prb], [msg] - - if len(parts) != 2: - msg = inliner.reporter.error("URL specification must be in the form <page.name>/<text>", line=lineno) - prb = inliner.problematic(text, rawtext, msg) - - return [prb], [msg] - else: - try: - url = url_for(parts[0]) - name = parts[1] - - html = f"""<a href="{url}">{name}</a>""" - - node = nodes.raw(html, html, format="html", **options) - return [node], [] - except Exception as e: - msg = inliner.reporter.error(str(e), line=lineno) - prb = inliner.problematic(text, rawtext, msg) - - return [prb], [msg] - - -def page_role(_role: str, rawtext: str, text: str, lineno: int, inliner: Inliner, - options: dict = None, _content: dict = None): - if options is None: - options = {} - - set_classes(options) - - if "/" in text: - parts = [escape(x) for x in text.rsplit("/", 1)] - else: - msg = inliner.reporter.error("Page specification must be in the form <page_slug>/<text>", line=lineno) - prb = inliner.problematic(text, rawtext, msg) - - return [prb], [msg] - - try: - url = url_for("wiki.page", page=parts[0]) - name = parts[1] - - html = f"""<a href="{url}">{name}</a>""" - - node = nodes.raw(html, html, format="html", **options) - return [node], [] - except Exception as e: - msg = inliner.reporter.error(str(e), line=lineno) - prb = inliner.problematic(text, rawtext, msg) - - return [prb], [msg] - - -def fira_code_role(_role: str, rawtext: str, text: str, lineno: int, inliner: Inliner, - options: dict = None, _content: dict = None): - if options is None: - options = {} - - set_classes(options) - - html = f"""<span class="fira-code">{text}</span>""" - node = nodes.raw(html, html, format="html", **options) - - return [node], [] diff --git a/pysite/service_discovery.py b/pysite/service_discovery.py deleted file mode 100644 index a03341c4..00000000 --- a/pysite/service_discovery.py +++ /dev/null @@ -1,26 +0,0 @@ -import datetime -import socket -import time -from contextlib import closing - -from pysite.constants import RMQ_HOST, RMQ_PORT - -THIRTY_SECONDS = datetime.timedelta(seconds=30) - - -def wait_for_rmq(): - start = datetime.datetime.now() - - while True: - if datetime.datetime.now() - start > THIRTY_SECONDS: - return False - - with closing(socket.socket(socket.AF_INET, socket.SOCK_STREAM)) as sock: - try: - state = sock.connect_ex((RMQ_HOST, RMQ_PORT)) - if state == 0: - return True - except socket.gaierror: - pass - - time.sleep(0.5) diff --git a/pysite/tables.py b/pysite/tables.py deleted file mode 100644 index 65a4db16..00000000 --- a/pysite/tables.py +++ /dev/null @@ -1,292 +0,0 @@ -from typing import List, NamedTuple - - -class Table(NamedTuple): - primary_key: str - keys: List[str] - locked: bool = True - - -TABLES = { - "bot_events": Table( # Events to be sent to the bot via websocket - primary_key="id", - keys=sorted([ - "id", - "data" - ]) - ), - - "clean_logs": Table( # Logs of cleanups done by the clean bot commands - primary_key="id", - keys=sorted([ - "id", - "log_data" - ]) - ), - - "hiphopify": Table( # Users in hiphop prison - primary_key="user_id", - keys=sorted([ - "user_id", - "end_timestamp", - "forced_nick" - ]) - ), - - "hiphopify_namelist": Table( # Names and images of hiphop artists - primary_key="name", - keys=sorted([ - "name", - "image_url" - ]), - locked=False - ), - - "code_jams": Table( # Information about each code jam - primary_key="number", - keys=sorted([ - "date_end", # datetime - "date_start", # datetime - "end_html", # str - "end_rst", # str - "info_rst", # str - "info_html", # str - "number", # int - "participants", # list[str] - "repo", # str - "state", # str - "task_html", # str - "task_rst", # str - "teams", # list[str] - "theme", # str - "title", # str - "winning_team" # str - ]) - ), - - "code_jam_forms": Table( # Application forms for each jam - primary_key="number", - keys=sorted([ - "number", # int - "preamble_rst", # str - "preamble_html", # str - "questions" # list[dict[str, str]] {title, type, input_type, options?} - ]) - ), - - "code_jam_questions": Table( # Application form questions - primary_key="id", - keys=sorted([ - "data", # dict - "id", # uuid - "optional", # bool - "title", # str - "type", # str - ]) - ), - - "code_jam_responses": Table( # Application form responses - primary_key="id", - keys=sorted([ - "id", # uuid - "snowflake", # str - "jam", # int - "answers", # list [{question, answer, metadata}] - "approved" # bool - ]) - ), - - "code_jam_teams": Table( # Teams for each jam - primary_key="id", - keys=sorted([ - "id", # uuid - "name", # str - "members", # list[str] - "repo", # str - "jam" # int - ]) - ), - - "code_jam_infractions": Table( # Individual infractions for each user - primary_key="id", - keys=sorted([ - "id", # uuid - "participant", # str - "reason", # str - "number", # int (optionally -1 for permanent) - "decremented_for" # list[int] - ]) - ), - - "code_jam_participants": Table( # Info for each participant - primary_key="id", - keys=sorted([ - "id", # str - "gitlab_username", # str - "timezone" # str - ]) - ), - - "member_chunks": Table( - primary_key="id", - keys=sorted([ - "id", # str - "chunk", # list - ]) - ), - - "oauth_data": Table( # OAuth login information - primary_key="id", - keys=sorted([ - "id", - "access_token", - "expires_at", - "refresh_token", - "snowflake" - ]) - ), - - "off_topic_names": Table( # Names for the off-topic category channels - primary_key="name", - keys=("name",), - locked=False - ), - - "snake_facts": Table( # Snake facts - primary_key="fact", - keys=sorted([ - "fact" - ]), - locked=False - ), - - "snake_idioms": Table( # Snake idioms - primary_key="idiom", - keys=sorted([ - "idiom" - ]), - locked=False - ), - - "snake_names": Table( # Snake names - primary_key="name", - keys=sorted([ - "name", - "scientific" - ]), - locked=False - ), - - "snake_quiz": Table( # Snake questions and answers - primary_key="id", - keys=sorted([ - "id", - "question", - "options", - "answerkey" - ]), - locked=False - ), - - "special_snakes": Table( # Special case snakes for the snake converter - primary_key="name", - keys=sorted([ - "name", - "info", - "image_list", - ]), - locked=False - ), - - "tags": Table( # Tag names and values - primary_key="tag_name", - keys=sorted([ - "tag_name", - "tag_content" - ]), - locked=False - ), - - "users": Table( # Users from the Discord server - primary_key="user_id", - keys=sorted([ - "avatar", - "user_id", - "roles", - "username", - "discriminator" - ]) - ), - - "wiki": Table( # Wiki articles - primary_key="slug", - keys=sorted([ - "slug", - "headers", - "html", - "rst", - "text", - "title" - ]) - ), - - "wiki_revisions": Table( # Revisions of wiki articles - primary_key="id", - keys=sorted([ - "id", - "date", - "post", - "slug", - "user" - ]) - ), - - "_versions": Table( # Table migration versions - primary_key="table", - keys=sorted([ - "table", - "version" - ]) - ), - - "pydoc_links": Table( # pydoc_links - primary_key="package", - keys=sorted([ - "base_url", - "inventory_url", - "package" - ]), - locked=False - ), - - "bot_settings": Table( - primary_key="key", - keys=sorted([ - "key", # str - "value" # any - ]) - ), - - "bot_infractions": Table( - primary_key="id", - keys=sorted([ - "id", # str - "user_id", # str - "actor_id", # str - "reason", # str - "type", # str - "inserted_at", # datetime - "expires_at", # datetime - "closed", # bool - "legacy_rowboat_id" # str - ]) - ), - - "watched_users": Table( # Users being monitored by the bot's BigBrother cog - primary_key="user_id", - keys=sorted([ - "user_id", - "channel_id" - ]) - ) -} diff --git a/pysite/utils/time.py b/pysite/utils/time.py deleted file mode 100644 index 334408a4..00000000 --- a/pysite/utils/time.py +++ /dev/null @@ -1,62 +0,0 @@ -from datetime import datetime, timedelta - -from rethinkdb import make_timezone - - -UNITS = { - 's': lambda value: value, - 'm': lambda value: value * 60, - 'h': lambda value: value * 60 * 60, - 'd': lambda value: value * 60 * 60 * 24, - 'w': lambda value: value * 60 * 60 * 24 * 7 -} - - -def parse_duration(duration: str) -> datetime: - """ - Parses a string like '3w' into a datetime 3 weeks from now. - - Also supports strings like 1w2d or 1h25m. - - This function is adapted from a bot called ROWBOAT, written by b1naryth1ef. - See https://github.com/b1naryth1ef/rowboat/blob/master/rowboat/util/input.py - - :param duration: a string containing the number and a time unit shorthand. - :return: A datetime representing now + the duration - """ - - if not duration: - raise ValueError("No duration provided.") - - value = 0 - digits = '' - - for char in duration: - - # Add all numbers to the digits string - if char.isdigit(): - digits += char - continue - - # If it's not a number and not one of the letters in UNITS, it must be invalid. - if char not in UNITS or not digits: - raise ValueError("Invalid duration") - - # Otherwise, call the corresponding lambda to convert the value, and keep iterating. - value += UNITS[char](int(digits)) - digits = '' - - return datetime.now(make_timezone("00:00")) + timedelta(seconds=value + 1) - - -def is_expired(rdb_datetime: datetime) -> bool: - """ - Takes a rethinkdb datetime (timezone aware) and - figures out if it has expired yet. - - Always compares with UTC 00:00 - - :param rdb_timestamp: A datetime as stored in rethinkdb. - :return: True if the datetime is in the past. - """ - return datetime.now(make_timezone("00:00")) > rdb_datetime diff --git a/pysite/utils/words.py b/pysite/utils/words.py deleted file mode 100644 index 0959ec3e..00000000 --- a/pysite/utils/words.py +++ /dev/null @@ -1,73 +0,0 @@ -import random -from typing import Iterator, List, Tuple - -adjectives = ( - "abortive", "abounding", "abrasive", "absent", "acceptable", "adamant", "adhesive", "adjoining", "aggressive", - "alike", "alleged", "aloof", "ambitious", "amused", "aspiring", "available", "awake", "axiomatic", "barbarous", - "bashful", "beautiful", "befitting", "beneficial", "blushing", "boundless", "brawny", "certain", "childlike", - "cluttered", "courageous", "crooked", "damp", "deadpan", "debonair", "decorous", "defiant", "delirious", - "detailed", "disturbed", "divergent", "drab", "dramatic", "drunk", "electric", "enormous", "erect", "evanescent", - "excellent", "exultant", "faded", "famous", "far-flung", "fascinated", "faulty", "festive", "fine", "fixed", - "flaky", "flat", "fluttering", "foregoing", "frail", "fresh", "frightened", "funny", "furtive", "gainful", "glib", - "godly", "half", "hallowed", "handsome", "hard", "heavenly", "hesitant", "high", "honorable", "hot", "hungry", - "hurt", "hushed", "hypnotic", "ill-fated", "illegal", "important", "incompetent", "inconclusive", "infamous", - "innocent", "insidious", "instinctive", "jazzy", "jumbled", "kind", "knowing", "late", "laughable", "lean", - "loving", "madly", "majestic", "married", "materialistic", "measly", "mighty", "misty", "murky", "mushy", - "mysterious", "needy", "next", "nice", "nondescript", "nutritious", "omniscient", "ossified", "overconfident", - "panoramic", "parallel", "parched", "pastoral", "plant", "possible", "pricey", "prickly", "private", "productive", - "pumped", "purple", "purring", "quixotic", "rabid", "rare", "real", "receptive", "resolute", "right", "rightful", - "ritzy", "rough", "ruddy", "rude", "salty", "sassy", "satisfying", "scandalous", "sedate", "selective", "separate", - "shrill", "sincere", "slow", "small", "smooth", "sordid", "sour", "spicy", "spiky", "spiteful", "spooky" "spotty", - "steady", "subdued", "successful", "supreme", "sweltering", "synonymous", "talented", "tasty", "teeny", "telling", - "temporary", "tender", "tense", "tenuous", "thinkable", "thoughtless", "tiny", "tough", "trashy", "two", - "uncovered", "uninterested", "unruly", "unsuitable", "used", "useful", "vagabond", "verdant", "vivacious", - "voiceless", "waggish", "wasteful", "wealthy", "whole", "wise", "woebegone", "workable", "wrong", "young", -) - -nouns = ( - "actions", "activities", "additions", "advertisements", "afterthoughts", "airplanes", "amounts", "angles", "ants", - "baskets", "baths", "battles", "bees", "beginners", "behaviors", "beliefs", "bells", "berries", "bikes", - "birthdays", "bits", "boats", "boys", "breaths", "bubbles", "bulbs", "bursts", "butter", "cables", "camps", "cans", - "captions", "cars", "carpenters", "cats", "cemeteries", "changes", "channels", "chickens", "classes", "clubs", - "committees", "covers", "cracks", "crates", "crayons", "crowds", "decisions", "degrees", "details", "directions", - "dresses", "drops", "dusts", "errors", "examples", "expansions", "falls", "fangs", "feelings", "firemen", - "flowers", "fog", "feet", "fowls", "frogs", "glasses", "gloves", "grandmothers", "grounds", "guns", "haircuts", - "halls", "harmonies", "hats", "hopes", "horns", "horses", "ideas", "inks", "insects", "interests", "inventions", - "irons", "islands", "jails", "jeans", "jellyfish", "laborers", "lakes", "letters", "lockets", "matches", "measures", - "mice", "milk", "motions", "moves", "nerves", "numbers", "pans", "pancakes", "persons", "pets", "pickles", "pies", - "pizzas", "plantations", "plastics", "ploughs", "pockets", "potatoes", "powders", "properties", "reactions", - "regrets", "riddles", "rivers", "rocks", "sails", "scales", "scarecrows", "scarves", "scenes", "schools", - "sciences", "shakes", "shapes", "shirts", "silvers", "sinks", "snakes", "sneezes", "sofas", "songs", "sounds", - "spades", "sparks", "stages", "stamps", "stars", "stations", "stews", "stomachs", "suggestions", "suits", "swings", - "tables", "tents", "territories", "tests", "textures", "things", "thoughts", "threads", "tigers", "toads", "toes", - "tomatoes", "trains", "treatments", "troubles", "tubs", "turkeys", "umbrellas", "uncles", "vacations", "veils", - "voices", "volcanoes", "volleyballs", "walls", "wars", "waters", "waves", "wilderness", "women", "words", "works", - "worms", "wounds", "writings", "yams", "yards", "yarns", "zebras" -) - - -def get_adjectives(num: int = 1) -> List[str]: - """ - Get a list of random, unique adjectives - """ - - return random.sample(adjectives, num) - - -def get_nouns(num: int = 1) -> List[str]: - """ - Get a list of random, unique nouns - """ - - return random.sample(nouns, num) - - -def get_word_pairs(num: int = 1) -> Iterator[Tuple[str, str]]: - """ - Get an iterator over random, unique (adjective, noun) pairs - """ - - return zip( - get_adjectives(num), - get_nouns(num) - ) diff --git a/pysite/views/__init__.py b/pysite/views/__init__.py deleted file mode 100644 index e69de29b..00000000 --- a/pysite/views/__init__.py +++ /dev/null diff --git a/pysite/views/api/__init__.py b/pysite/views/api/__init__.py deleted file mode 100644 index e69de29b..00000000 --- a/pysite/views/api/__init__.py +++ /dev/null diff --git a/pysite/views/api/bot/__init__.py b/pysite/views/api/bot/__init__.py deleted file mode 100644 index e69de29b..00000000 --- a/pysite/views/api/bot/__init__.py +++ /dev/null diff --git a/pysite/views/api/bot/bigbrother.py b/pysite/views/api/bot/bigbrother.py deleted file mode 100644 index 89697811..00000000 --- a/pysite/views/api/bot/bigbrother.py +++ /dev/null @@ -1,118 +0,0 @@ -import json - -from flask import jsonify -from schema import And, Optional, Schema - -from pysite.base_route import APIView -from pysite.constants import ValidationTypes -from pysite.decorators import api_key, api_params -from pysite.mixins import DBMixin - - -GET_SCHEMA = Schema({ - # This is passed as a GET parameter, so it has to be a string - Optional('user_id'): And(str, str.isnumeric, error="`user_id` must be a numeric string") -}) - -POST_SCHEMA = Schema({ - 'user_id': And(str, str.isnumeric, error="`user_id` must be a numeric string"), - 'channel_id': And(str, str.isnumeric, error="`channel_id` must be a numeric string") -}) - -DELETE_SCHEMA = Schema({ - 'user_id': And(str, str.isnumeric, error="`user_id` must be a numeric string") -}) - - -NOT_A_NUMBER_JSON = json.dumps({ - 'error_message': "The given `user_id` parameter is not a valid number" -}) -NOT_FOUND_JSON = json.dumps({ - 'error_message': "No entry for the requested user ID could be found." -}) - - -class BigBrotherView(APIView, DBMixin): - path = '/bot/bigbrother' - name = 'bot.bigbrother' - table_name = 'watched_users' - - @api_key - @api_params(schema=GET_SCHEMA, validation_type=ValidationTypes.params) - def get(self, params): - """ - Without query parameters, returns a list of all monitored users. - A parameter `user_id` can be specified to return a single entry, - or a dictionary with the string field 'error_message' that tells why it failed. - - If the returned status is 200, has got either a list of entries - or a single object (see above). - - If the returned status is 400, the `user_id` parameter was incorrectly specified. - If the returned status is 404, the given `user_id` could not be found. - See the 'error_message' field in the JSON response for more information. - - The user ID must be provided as query parameter. - API key must be provided as header. - """ - - user_id = params.get('user_id') - if user_id is not None: - data = self.db.get(self.table_name, user_id) - if data is None: - return NOT_FOUND_JSON, 404 - return jsonify(data) - - else: - data = self.db.pluck(self.table_name, ('user_id', 'channel_id')) or [] - return jsonify(data) - - @api_key - @api_params(schema=POST_SCHEMA, validation_type=ValidationTypes.json) - def post(self, data): - """ - Adds a new entry to the database. - Entries take the following form: - { - "user_id": ..., # The user ID of the user being monitored, as a string. - "channel_id": ... # The channel ID that the user's messages will be relayed to, as a string. - } - - If an entry for the given `user_id` already exists, it will be updated with the new channel ID. - - Returns 204 (ok, empty response) on success. - - Data must be provided as JSON. - API key must be provided as header. - """ - - self.db.insert( - self.table_name, - { - 'user_id': data['user_id'], - 'channel_id': data['channel_id'] - }, - conflict='update' - ) - - return '', 204 - - @api_key - @api_params(schema=DELETE_SCHEMA, validation_type=ValidationTypes.params) - def delete(self, params): - """ - Removes an entry for the given `user_id`. - - Returns 204 (ok, empty response) on success. - Returns 400 if the given `user_id` is invalid. - - The user ID must be provided as query parameter. - API key must be provided as header. - """ - - self.db.delete( - self.table_name, - params['user_id'] - ) - - return '', 204 diff --git a/pysite/views/api/bot/clean.py b/pysite/views/api/bot/clean.py deleted file mode 100644 index 82d1e735..00000000 --- a/pysite/views/api/bot/clean.py +++ /dev/null @@ -1,48 +0,0 @@ -from flask import jsonify -from schema import Schema - -from pysite.base_route import APIView -from pysite.constants import ValidationTypes -from pysite.decorators import api_key, api_params -from pysite.mixins import DBMixin - -POST_SCHEMA = Schema({ - 'log_data': [ - { - "author": str, - "user_id": str, - "content": str, - "role_id": str, - "timestamp": str, - "embeds": object, - "attachments": [str], - } - ] -}) - - -class CleanView(APIView, DBMixin): - path = '/bot/clean' - name = 'bot.clean' - table_name = 'clean_logs' - - @api_key - @api_params(schema=POST_SCHEMA, validation_type=ValidationTypes.json) - def post(self, data): - """ - Receive some log_data from a bulk deletion, - and store it in the database. - - Returns an ID which can be used to get the data - from the /bot/clean_logs/<id> endpoint. - """ - - # Insert and return the id to use for GET - insert = self.db.insert( - self.table_name, - { - "log_data": data["log_data"] - } - ) - - return jsonify({"log_id": insert['generated_keys'][0]}) diff --git a/pysite/views/api/bot/doc.py b/pysite/views/api/bot/doc.py deleted file mode 100644 index c1d6020c..00000000 --- a/pysite/views/api/bot/doc.py +++ /dev/null @@ -1,98 +0,0 @@ -from flask import jsonify -from schema import Optional, Schema - -from pysite.base_route import APIView -from pysite.constants import ValidationTypes -from pysite.decorators import api_key, api_params -from pysite.mixins import DBMixin - - -GET_SCHEMA = Schema([ - { - Optional("package"): str - } -]) - -POST_SCHEMA = Schema([ - { - "package": str, - "base_url": str, - "inventory_url": str - } -]) - -DELETE_SCHEMA = Schema([ - { - "package": str - } -]) - - -class DocView(APIView, DBMixin): - path = "/bot/docs" - name = "bot.docs" - table_name = "pydoc_links" - - @api_key - @api_params(schema=GET_SCHEMA, validation_type=ValidationTypes.params) - def get(self, params=None): - """ - Fetches documentation metadata from the database. - - - If `package` parameters are provided, fetch metadata - for the given packages, or `[]` if none matched. - - - If `package` is not provided, return all - packages known to the database. - - Data must be provided as params. - API key must be provided as header. - """ - - if params: - packages = (param['package'] for param in params if 'package' in param) - data = self.db.get_all(self.table_name, *packages, index='package') or [] - else: - data = self.db.pluck(self.table_name, ("package", "base_url", "inventory_url")) or [] - - return jsonify(data) - - @api_key - @api_params(schema=POST_SCHEMA, validation_type=ValidationTypes.json) - def post(self, json_data): - """ - Adds one or more new documentation metadata objects. - - If the `package` passed in the data - already exists, it will be updated instead. - - Data must be provided as JSON. - API key must be provided as header. - """ - - packages_to_insert = ( - { - "package": json_object["package"], - "base_url": json_object["base_url"], - "inventory_url": json_object["inventory_url"] - } for json_object in json_data - ) - - self.db.insert(self.table_name, *packages_to_insert, conflict="update") - return jsonify({"success": True}) - - @api_key - @api_params(schema=DELETE_SCHEMA, validation_type=ValidationTypes.json) - def delete(self, json_data): - """ - Deletes a documentation metadata object. - Expects the `package` to be deleted to - be specified as a request parameter. - - Data must be provided as params. - API key must be provided as header. - """ - - packages = (json_object["package"]for json_object in json_data) - changes = self.db.delete(self.table_name, *packages, return_changes=True) - return jsonify(changes) diff --git a/pysite/views/api/bot/hiphopify.py b/pysite/views/api/bot/hiphopify.py deleted file mode 100644 index ce4dfa4a..00000000 --- a/pysite/views/api/bot/hiphopify.py +++ /dev/null @@ -1,170 +0,0 @@ -import logging - -from flask import jsonify -from schema import Optional, Schema - -from pysite.base_route import APIView -from pysite.constants import ValidationTypes -from pysite.decorators import api_key, api_params -from pysite.mixins import DBMixin -from pysite.utils.time import is_expired, parse_duration - -log = logging.getLogger(__name__) - -GET_SCHEMA = Schema({ - "user_id": str -}) - -POST_SCHEMA = Schema({ - "user_id": str, - "duration": str, - Optional("forced_nick"): str -}) - -DELETE_SCHEMA = Schema({ - "user_id": str -}) - - -class HiphopifyView(APIView, DBMixin): - path = "/bot/hiphopify" - name = "bot.hiphopify" - prison_table = "hiphopify" - name_table = "hiphopify_namelist" - - @api_key - @api_params(schema=GET_SCHEMA, validation_type=ValidationTypes.params) - def get(self, params=None): - """ - Check if the user is currently in hiphop-prison. - - If user is currently servin' his sentence in the big house, - return the name stored in the forced_nick column of prison_table. - - If user cannot be found in prison, or - if his sentence has expired, return nothing. - - Data must be provided as params. - API key must be provided as header. - """ - - user_id = params.get("user_id") - - log.debug(f"Checking if user ({user_id}) is permitted to change their nickname.") - data = self.db.get(self.prison_table, user_id) or {} - - if data and data.get("end_timestamp"): - log.trace("User exists in the prison_table.") - end_time = data.get("end_timestamp") - if is_expired(end_time): - log.trace("...But their sentence has already expired.") - data = {} # Return nothing if the sentence has expired. - - return jsonify(data) - - @api_key - @api_params(schema=POST_SCHEMA, validation_type=ValidationTypes.json) - def post(self, json_data): - """ - Imprisons a user in hiphop-prison. - - If a forced_nick was provided by the caller, the method will force - this nick. If not, a random hiphop nick will be selected from the - name_table. - - Data must be provided as JSON. - API key must be provided as header. - """ - - user_id = json_data.get("user_id") - duration = json_data.get("duration") - forced_nick = json_data.get("forced_nick") - - log.debug(f"Attempting to imprison user ({user_id}).") - - # Get random name and picture if no forced_nick was provided. - if not forced_nick: - log.trace("No forced_nick provided. Fetching a random rapper name and image.") - rapper_data = self.db.sample(self.name_table, 1)[0] - forced_nick = rapper_data.get('name') - - # If forced nick was provided, try to look up the forced_nick in the database. - # If a match cannot be found, just default to Lil' Jon for the image. - else: - log.trace(f"Forced nick provided ({forced_nick}). Trying to match it with the database.") - rapper_data = ( - self.db.get(self.name_table, forced_nick) - or self.db.get(self.name_table, "Lil' Joseph") - ) - - image_url = rapper_data.get('image_url') - log.trace(f"Using the nickname {forced_nick} and the image_url {image_url}.") - - # Convert duration to valid timestamp - try: - log.trace("Parsing the duration and converting it to a timestamp") - end_timestamp = parse_duration(duration) - except ValueError: - log.warning(f"The duration could not be parsed, or was invalid. The duration was '{duration}'.") - return jsonify({ - "success": False, - "error_message": "Invalid duration" - }) - - log.debug("Everything seems to be in order, inserting the data into the prison_table.") - self.db.insert( - self.prison_table, - { - "user_id": user_id, - "end_timestamp": end_timestamp, - "forced_nick": forced_nick - }, - conflict="update" # If it exists, update it. - ) - - return jsonify({ - "success": True, - "end_timestamp": end_timestamp, - "forced_nick": forced_nick, - "image_url": image_url - }) - - @api_key - @api_params(schema=DELETE_SCHEMA, validation_type=ValidationTypes.json) - def delete(self, json_data): - """ - Releases a user from hiphop-prison. - - Data must be provided as JSON. - API key must be provided as header. - """ - - user_id = json_data.get("user_id") - - log.debug(f"Attempting to release user ({user_id}) from hiphop-prison.") - prisoner_data = self.db.get(self.prison_table, user_id) - sentence_expired = None - - log.trace(f"Checking if the user ({user_id}) is currently in hiphop-prison.") - if prisoner_data and prisoner_data.get("end_timestamp"): - sentence_expired = is_expired(prisoner_data['end_timestamp']) - - if prisoner_data and not sentence_expired: - log.debug("User is currently in hiphop-prison. Deleting the record and releasing the prisoner.") - self.db.delete( - self.prison_table, - user_id - ) - return jsonify({"success": True}) - elif not prisoner_data: - log.warning(f"User ({user_id}) is not currently in hiphop-prison.") - return jsonify({ - "success": False, - "error_message": "User is not currently in hiphop-prison!" - }) - elif sentence_expired: - log.warning(f"User ({user_id}) was in hiphop-prison, but has already been released.") - return jsonify({ - "success": False, - "error_message": "User has already been released from hiphop-prison!" - }) diff --git a/pysite/views/api/bot/infractions.py b/pysite/views/api/bot/infractions.py deleted file mode 100644 index eee40b82..00000000 --- a/pysite/views/api/bot/infractions.py +++ /dev/null @@ -1,572 +0,0 @@ -""" -INFRACTIONS API - -"GET" endpoints in this API may take the following optional parameters, depending on the endpoint: - - active: filters infractions that are active (true), expired (false), or either (not present/any) - - expand: expands the result data with the information about the users (slower) - - dangling: filters infractions that are active, or inactive infractions that have not been closed manually. - - search: filters the "reason" field to match the given RE2 query. - -Infraction Schema: - This schema is used when an infraction's data is returned. - - Root object: - "id" (str): the UUID of the infraction. - "inserted_at" (str): the date and time of the creation of this infraction (RFC1123 format). - "expires_at" (str): the date and time of the expiration of this infraction (RC1123 format), may be null. - The significance of this field being null depends on the type of infraction. Duration-based infractions - have a "null" expiration if they are permanent. Other infraction types do not have expirations. - "active" (bool): whether the infraction is still active. Note that the check for expiration of - duration-based infractions is done by the API, so you should check for expiration using this "active" field. - "user" (object): the user to which the infraction was applied. - "user_id" (str): the Discord ID of the user. - "username" (optional str): the username of the user. This field is only present if the query was expanded. - "discriminator" (optional int): the username discriminator of the user. This field is only present if the - query was expanded. - "avatar" (optional str): the avatar URL of the user. This field is only present if the query was expanded. - "actor" (object): the user which applied the infraction. - This object uses the same schema as the "user" field. - "type" (str): the type of the infraction. - "reason" (str): the reason for the infraction. - - -Endpoints: - - GET /bot/infractions - Gets a list of all infractions, regardless of type or user. - Parameters: "active", "expand", "dangling", "search". - This endpoint returns an array of infraction objects. - - GET /bot/infractions/user/<user_id> - Gets a list of all infractions for a user. - Parameters: "active", "expand", "search". - This endpoint returns an array of infraction objects. - - GET /bot/infractions/type/<type> - Gets a list of all infractions of the given type (ban, mute, etc.) - Parameters: "active", "expand", "search". - This endpoint returns an array of infraction objects. - - GET /bot/infractions/user/<user_id>/<type> - Gets a list of all infractions of the given type for a user. - Parameters: "active", "expand", "search". - This endpoint returns an array of infraction objects. - - GET /bot/infractions/user/<user_id>/<type>/current - Gets the active infraction (if any) of the given type for a user. - Parameters: "expand". - This endpoint returns an object with the "infraction" key, which is either set to null (no infraction) - or the query's corresponding infraction. It will not return an infraction if the type of the infraction - isn't duration-based (e.g. kick, warning, etc.) - - GET /bot/infractions/id/<infraction_id> - Gets the infraction (if any) for the given ID. - Parameters: "expand". - This endpoint returns an object with the "infraction" key, which is either set to null (no infraction) - or the infraction corresponding to the ID. - - POST /bot/infractions - Creates an infraction for a user. - Parameters (JSON payload): - "type" (str): the type of the infraction (must be a valid infraction type). - "reason" (str): the reason of the infraction. - "user_id" (str): the Discord ID of the user who is being given the infraction. - "actor_id" (str): the Discord ID of the user who submitted the infraction. - "duration" (optional str): the duration of the infraction. This is ignored for infractions - which are not duration-based. For other infraction types, omitting this field may imply permanence. - "expand" (optional bool): whether to expand the infraction user data once the infraction is inserted and returned. - - PATCH /bot/infractions - Updates an infractions. - Parameters (JSON payload): - "id" (str): the ID of the infraction to update. - "reason" (optional str): if provided, the new reason for the infraction. - "duration" (optional str): if provided, updates the expiration of the infraction to the time of UPDATING - plus the duration. If set to null, the expiration is also set to null (may imply permanence). - "active" (optional bool): if provided, activates or deactivates the infraction. This does not do anything - if the infraction isn't duration-based, or if the infraction has already expired. This marks the infraction - as closed. - "expand" (optional bool): whether to expand the infraction user data once the infraction is updated and returned. -""" - -import datetime -from typing import NamedTuple - -import rethinkdb -from flask import jsonify -from schema import Optional, Or, Schema - -from pysite.base_route import APIView -from pysite.constants import ErrorCodes, ValidationTypes -from pysite.decorators import api_key, api_params -from pysite.mixins import DBMixin -from pysite.utils.time import parse_duration - - -class InfractionType(NamedTuple): - timed_infraction: bool # whether the infraction is active until it expires. - - -RFC1123_FORMAT = "%a, %d %b %Y %H:%M:%S GMT" -EXCLUDED_FIELDS = "user_id", "actor_id", "closed", "_timed" -INFRACTION_ORDER = rethinkdb.desc("active"), rethinkdb.desc("inserted_at") - -INFRACTION_TYPES = { - "warning": InfractionType(timed_infraction=False), - "mute": InfractionType(timed_infraction=True), - "ban": InfractionType(timed_infraction=True), - "kick": InfractionType(timed_infraction=False), - "superstar": InfractionType(timed_infraction=True) # hiphopify -} - -GET_SCHEMA = Schema({ - Optional("active"): str, - Optional("expand"): str, - Optional("dangling"): str, - Optional("search"): str -}) - -GET_ACTIVE_SCHEMA = Schema({ - Optional("expand"): str -}) - -CREATE_INFRACTION_SCHEMA = Schema({ - "type": lambda tp: tp in INFRACTION_TYPES, - "reason": Or(str, None), - "user_id": str, # Discord user ID - "actor_id": str, # Discord user ID - Optional("duration"): str, # If not provided, may imply permanence depending on the infraction - Optional("expand"): bool -}) - -UPDATE_INFRACTION_SCHEMA = Schema({ - "id": str, - Optional("reason"): Or(str, None), - Optional("duration"): Or(str, None), - Optional("active"): bool -}) - -IMPORT_INFRACTIONS_SCHEMA = Schema([ - { - "id": str, - "active": bool, - "actor": { - "id": str - }, - "created_at": str, - "expires_at": Or(str, None), - "reason": Or(str, None), - "type": { - "name": str - }, - "user": { - "id": str - } - } -], ignore_extra_keys=True) - - -class InfractionsView(APIView, DBMixin): - path = "/bot/infractions" - name = "bot.infractions" - table_name = "bot_infractions" - - @api_key - @api_params(schema=GET_SCHEMA, validation_type=ValidationTypes.params) - def get(self, params: dict = None): - if "dangling" in params: - return _infraction_list_filtered(self, params, {"_timed": True, "closed": False}) - else: - return _infraction_list_filtered(self, params, {}) - - @api_key - @api_params(schema=CREATE_INFRACTION_SCHEMA, validation_type=ValidationTypes.json) - def post(self, data): - deactivate_infraction_query = None - - infraction_type = data["type"] - user_id = data["user_id"] - actor_id = data["actor_id"] - reason = data["reason"] - duration_str = data.get("duration") - expand = data.get("expand") - expires_at = None - inserted_at = datetime.datetime.now(tz=datetime.timezone.utc) - - if infraction_type not in INFRACTION_TYPES: - return self.error(ErrorCodes.incorrect_parameters, "Invalid infraction type.") - - # check if the user already has an active infraction of this type - # if so, we need to disable that infraction and create a new infraction - if INFRACTION_TYPES[infraction_type].timed_infraction: - active_infraction_query = \ - self.db.query(self.table_name).merge(_merge_active_check()) \ - .filter({"user_id": user_id, "type": infraction_type, "active": True}) \ - .limit(1).nth(0).default(None) - - active_infraction = self.db.run(active_infraction_query) - if active_infraction: - deactivate_infraction_query = \ - self.db.query(self.table_name) \ - .get(active_infraction["id"]) \ - .update({"active": False, "closed": True}) - - if duration_str: - try: - expires_at = parse_duration(duration_str) - except ValueError: - return self.error( - ErrorCodes.incorrect_parameters, - "Invalid duration format." - ) - - infraction_insert_doc = { - "actor_id": actor_id, - "user_id": user_id, - "type": infraction_type, - "reason": reason, - "inserted_at": inserted_at, - "expires_at": expires_at - } - - infraction_id = self.db.insert(self.table_name, infraction_insert_doc)["generated_keys"][0] - - if deactivate_infraction_query: - self.db.run(deactivate_infraction_query) - - query = self.db.query(self.table_name).get(infraction_id) \ - .merge(_merge_expand_users(self, expand)) \ - .merge(_merge_active_check()) \ - .without(*EXCLUDED_FIELDS).default(None) - return jsonify({ - "infraction": self.db.run(query) - }) - - @api_key - @api_params(schema=UPDATE_INFRACTION_SCHEMA, validation_type=ValidationTypes.json) - def patch(self, data): - expand = data.get("expand") - update_collection = { - "id": data["id"] - } - - if "reason" in data: - update_collection["reason"] = data["reason"] - - if "active" in data: - update_collection["active"] = data["active"] - update_collection["closed"] = not data["active"] - - if "duration" in data: - duration_str = data["duration"] - if duration_str is None: - update_collection["expires_at"] = None - else: - try: - update_collection["expires_at"] = parse_duration(duration_str) - except ValueError: - return self.error( - ErrorCodes.incorrect_parameters, - "Invalid duration format." - ) - - query_update = self.db.query(self.table_name).update(update_collection) - result_update = self.db.run(query_update) - - if not result_update["replaced"]: - return jsonify({ - "success": False, - "error_message": "Unknown infraction / nothing was changed." - }) - - # return the updated infraction - query = self.db.query(self.table_name).get(data["id"]) \ - .merge(_merge_expand_users(self, expand)) \ - .merge(_merge_active_check()) \ - .without(*EXCLUDED_FIELDS).default(None) - infraction = self.db.run(query) - - return jsonify({ - "infraction": infraction, - "success": True - }) - - -class InfractionById(APIView, DBMixin): - path = "/bot/infractions/id/<string:infraction_id>" - name = "bot.infractions.id" - table_name = "bot_infractions" - - @api_key - @api_params(schema=GET_ACTIVE_SCHEMA, validation_type=ValidationTypes.params) - def get(self, params, infraction_id): - params = params or {} - expand = parse_bool(params.get("expand"), default=False) - - query = self.db.query(self.table_name).get(infraction_id) \ - .merge(_merge_expand_users(self, expand)) \ - .merge(_merge_active_check()) \ - .without(*EXCLUDED_FIELDS).default(None) - return jsonify({ - "infraction": self.db.run(query) - }) - - -class ListInfractionsByUserView(APIView, DBMixin): - path = "/bot/infractions/user/<string:user_id>" - name = "bot.infractions.user" - table_name = "bot_infractions" - - @api_key - @api_params(schema=GET_SCHEMA, validation_type=ValidationTypes.params) - def get(self, params, user_id): - return _infraction_list_filtered(self, params, { - "user_id": user_id - }) - - -class ListInfractionsByTypeView(APIView, DBMixin): - path = "/bot/infractions/type/<string:type>" - name = "bot.infractions.type" - table_name = "bot_infractions" - - @api_key - @api_params(schema=GET_SCHEMA, validation_type=ValidationTypes.params) - def get(self, params, type): - return _infraction_list_filtered(self, params, { - "type": type - }) - - -class ListInfractionsByTypeAndUserView(APIView, DBMixin): - path = "/bot/infractions/user/<string:user_id>/<string:type>" - name = "bot.infractions.user.type" - table_name = "bot_infractions" - - @api_key - @api_params(schema=GET_SCHEMA, validation_type=ValidationTypes.params) - def get(self, params, user_id, type): - return _infraction_list_filtered(self, params, { - "user_id": user_id, - "type": type - }) - - -class CurrentInfractionByTypeAndUserView(APIView, DBMixin): - path = "/bot/infractions/user/<string:user_id>/<string:infraction_type>/current" - name = "bot.infractions.user.type.current" - table_name = "bot_infractions" - - @api_key - @api_params(schema=GET_ACTIVE_SCHEMA, validation_type=ValidationTypes.params) - def get(self, params, user_id, infraction_type): - params = params or {} - expand = parse_bool(params.get("expand"), default=False) - - query_filter = { - "user_id": user_id, - "type": infraction_type - } - query = _merged_query(self, expand, query_filter).filter({ - "active": True - }).order_by(rethinkdb.desc("data")).limit(1).nth(0).default(None) - return jsonify({ - "infraction": self.db.run(query) - }) - - -class ImportRowboatInfractionsView(APIView, DBMixin): - path = "/bot/infractions/import" - name = "bot.infractions.import" - table_name = "bot_infractions" - - @api_key - @api_params(schema=IMPORT_INFRACTIONS_SCHEMA, validation_type=ValidationTypes.json) - def post(self, data): - # keep track of the un-bans, to apply after the import is complete. - unbans = [] - infractions = [] - - # previously imported infractions - imported_infractions = self.db.run( - self.db.query(self.table_name).filter( - lambda row: row.has_fields("legacy_rowboat_id") - ).fold([], lambda acc, row: acc.append(row["legacy_rowboat_id"])).coerce_to("array") - ) - - for rowboat_infraction_data in data: - legacy_rowboat_id = rowboat_infraction_data["id"] - if legacy_rowboat_id in imported_infractions: - continue - infraction_type = rowboat_infraction_data["type"]["name"] - if infraction_type == "unban": - unbans.append(rowboat_infraction_data) - continue - # adjust infraction types - if infraction_type == "tempmute": - infraction_type = "mute" - if infraction_type == "tempban": - infraction_type = "ban" - if infraction_type not in INFRACTION_TYPES: - # unknown infraction type - continue - active = rowboat_infraction_data["active"] - reason = rowboat_infraction_data["reason"] or "<No reason>" - user_id = rowboat_infraction_data["user"]["id"] - actor_id = rowboat_infraction_data["actor"]["id"] - inserted_at_str = rowboat_infraction_data["created_at"] - try: - inserted_at = parse_rfc1123(inserted_at_str) - except ValueError: - continue - expires_at_str = rowboat_infraction_data["expires_at"] - if expires_at_str is not None: - try: - expires_at = parse_rfc1123(expires_at_str) - except ValueError: - continue - else: - expires_at = None - infractions.append({ - "legacy_rowboat_id": legacy_rowboat_id, - "active": active, - "reason": reason, - "user_id": user_id, - "actor_id": actor_id, - "inserted_at": inserted_at, - "expires_at": expires_at, - "type": infraction_type - }) - - insertion_query = self.db.query(self.table_name).insert(infractions) - inserted_count = self.db.run(insertion_query)["inserted"] - - # apply unbans - for unban_data in unbans: - inserted_at_str = unban_data["created_at"] - user_id = unban_data["user"]["id"] - try: - inserted_at = parse_rfc1123(inserted_at_str) - except ValueError: - continue - self.db.run( - self.db.query(self.table_name).filter( - lambda row: (row["user_id"].eq(user_id)) & - (row["type"].eq("ban")) & - (row["inserted_at"] < inserted_at) - ).pluck("id").merge(lambda row: { - "active": False - }).coerce_to("array").for_each(lambda doc: self.db.query(self.table_name).get(doc["id"]).update(doc)) - ) - - return jsonify({ - "success": True, - "inserted_count": inserted_count - }) - - -def _infraction_list_filtered(view, params=None, query_filter=None): - params = params or {} - query_filter = query_filter or {} - active = parse_bool(params.get("active")) - expand = parse_bool(params.get("expand"), default=False) - search = params.get("search") - - if active is not None: - query_filter["active"] = active - - query = _merged_query(view, expand, query_filter) - - if search is not None: - query = query.filter( - lambda row: rethinkdb.branch( - row["reason"].eq(None), - False, - row["reason"].match(search) - ) - ) - - query = query.order_by(*INFRACTION_ORDER) - - return jsonify(view.db.run(query.coerce_to("array"))) - - -def _merged_query(view, expand, query_filter): - return view.db.query(view.table_name).merge(_merge_active_check()).filter(query_filter) \ - .merge(_merge_expand_users(view, expand)).without(*EXCLUDED_FIELDS) - - -def _merge_active_check(): - # Checks if the "closed" field has been set to true (manual infraction removal). - # If not, the "active" field is set to whether the infraction has expired. - def _merge(row): - return { - "active": - rethinkdb.branch( - _is_timed_infraction(row["type"]), - rethinkdb.branch( - (row["closed"].default(False).eq(True)) | (row["active"].default(True).eq(False)), - False, - rethinkdb.branch( - row["expires_at"].eq(None), - True, - row["expires_at"] > rethinkdb.now() - ) - ), - False - ), - "closed": row["closed"].default(False), - "_timed": _is_timed_infraction(row["type"]) - } - - return _merge - - -def _merge_expand_users(view, expand): - def _do_expand(user_id): - if not user_id: - return None - # Expands the user information, if it is in the database. - - if expand: - return view.db.query("users").get(user_id).default({ - "user_id": user_id - }) - - return { - "user_id": user_id - } - - def _merge(row): - return { - "user": _do_expand(row["user_id"].default(None)), - "actor": _do_expand(row["actor_id"].default(None)) - } - - return _merge - - -def _is_timed_infraction(type_var): - # this method generates an ReQL expression to check if the given type - # is a "timed infraction" (i.e it can expire or be permanent) - - timed_infractions = filter(lambda key: INFRACTION_TYPES[key].timed_infraction, INFRACTION_TYPES.keys()) - expr = rethinkdb.expr(False) - for infra_type in timed_infractions: - expr = expr | type_var.eq(infra_type) - return expr - - -def parse_rfc1123(time_str): - return datetime.datetime.strptime(time_str, RFC1123_FORMAT).replace(tzinfo=datetime.timezone.utc) - - -def parse_bool(a_string, default=None): - # Not present, null or any: returns default (defaults to None) - # false, no, or 0: returns False - # anything else: True - if a_string is None or a_string == "null" or a_string == "any": - return default - if a_string.lower() == "false" or a_string.lower() == "no" or a_string == "0": - return False - return True diff --git a/pysite/views/api/bot/off_topic_names.py b/pysite/views/api/bot/off_topic_names.py deleted file mode 100644 index 1c75428e..00000000 --- a/pysite/views/api/bot/off_topic_names.py +++ /dev/null @@ -1,108 +0,0 @@ -import random - -from flask import jsonify, request -from schema import And, Schema - -from pysite.base_route import APIView -from pysite.constants import ValidationTypes -from pysite.decorators import api_key, api_params -from pysite.mixins import DBMixin - - -OFF_TOPIC_NAME = And( - str, - len, - lambda name: all(c.isalnum() or c == '-' for c in name), - str.islower, - lambda name: len(name) <= 96, - error=( - "The channel name must be a non-blank string consisting only of" - " lowercase regular characters and '-' with a maximum length of 96" - ) -) - -DELETE_SCHEMA = Schema({ - 'name': OFF_TOPIC_NAME -}) - -POST_SCHEMA = Schema({ - 'name': OFF_TOPIC_NAME -}) - - -class OffTopicNamesView(APIView, DBMixin): - path = "/bot/off-topic-names" - name = "bot.off_topic_names" - table_name = "off_topic_names" - - @api_key - @api_params(schema=DELETE_SCHEMA, validation_type=ValidationTypes.params) - def delete(self, params): - """ - Removes a single off-topic name from the database. - Returns the result of the deletion call. - - API key must be provided as header. - Name to delete must be provided as the `name` query argument. - """ - - result = self.db.delete( - self.table_name, - params['name'], - return_changes=True - ) - - return jsonify(result) - - @api_key - def get(self): - """ - Fetch all known off-topic channel names from the database. - Returns a list of strings, the strings being the off-topic names. - - If the query argument `random_items` is provided (a non-negative integer), - then this view will return `random_items` random names from the database - instead of returning all items at once. - - API key must be provided as header. - """ - - names = [ - entry['name'] for entry in self.db.get_all(self.table_name) - ] - - if 'random_items' in request.args: - random_count = request.args['random_items'] - if not random_count.isdigit(): - response = {'message': "`random_items` must be a valid integer"} - return jsonify(response), 400 - - samples = random.sample(names, int(random_count)) - return jsonify(samples) - - return jsonify(names) - - @api_key - @api_params(schema=POST_SCHEMA, validation_type=ValidationTypes.params) - def post(self, data): - """ - Add a new off-topic channel name to the database. - Expects the new channel's name as the `name` argument. - The name must consist only of alphanumeric characters or minus signs, - and must not be empty or exceed 96 characters. - - Data must be provided as params. - API key must be provided as header. - """ - - if self.db.get(self.table_name, data['name']) is not None: - response = { - 'message': "An entry with the given name already exists" - } - return jsonify(response), 400 - - self.db.insert( - self.table_name, - {'name': data['name']} - ) - return jsonify({'message': 'ok'}) diff --git a/pysite/views/api/bot/settings.py b/pysite/views/api/bot/settings.py deleted file mode 100644 index a633a68a..00000000 --- a/pysite/views/api/bot/settings.py +++ /dev/null @@ -1,56 +0,0 @@ -from flask import jsonify -from schema import Optional, Schema - -from pysite.base_route import APIView -from pysite.constants import ValidationTypes -from pysite.decorators import api_key, api_params -from pysite.mixins import DBMixin - -# todo: type safety -SETTINGS_KEYS_DEFAULTS = { - "defcon_enabled": False, - "defcon_days": 1 -} - -GET_SCHEMA = Schema({ - Optional("keys"): str -}) - - -def settings_schema(): - schema_dict = {Optional(key): type(SETTINGS_KEYS_DEFAULTS[key]) for key in SETTINGS_KEYS_DEFAULTS.keys()} - return Schema(schema_dict) - - -class ServerSettingsView(APIView, DBMixin): - path = "/bot/settings" - name = "bot.settings" - - @api_key - @api_params(schema=GET_SCHEMA, validation_type=ValidationTypes.params) - def get(self, params=None): - keys_raw = None - if params: - keys_raw = params.get("keys") - - keys = filter(lambda key: key in SETTINGS_KEYS_DEFAULTS, - keys_raw.split(",")) if keys_raw else SETTINGS_KEYS_DEFAULTS.keys() - - result = {key: (self.db.get("bot_settings", key) or {}).get("value") or SETTINGS_KEYS_DEFAULTS[key] for key in - keys} - return jsonify(result) - - @api_key - @api_params(schema=settings_schema(), validation_type=ValidationTypes.json) - def put(self, json_data): - # update in database - - for key, value in json_data.items(): - self.db.insert("bot_settings", { - "key": key, - "value": value - }, conflict="update") - - return jsonify({ - "success": True - }) diff --git a/pysite/views/api/bot/snake_cog/__init__.py b/pysite/views/api/bot/snake_cog/__init__.py deleted file mode 100644 index e69de29b..00000000 --- a/pysite/views/api/bot/snake_cog/__init__.py +++ /dev/null diff --git a/pysite/views/api/bot/snake_cog/snake_facts.py b/pysite/views/api/bot/snake_cog/snake_facts.py deleted file mode 100644 index 4e8c8a5d..00000000 --- a/pysite/views/api/bot/snake_cog/snake_facts.py +++ /dev/null @@ -1,28 +0,0 @@ -import logging - -from flask import jsonify - -from pysite.base_route import APIView -from pysite.decorators import api_key -from pysite.mixins import DBMixin - -log = logging.getLogger(__name__) - - -class SnakeFactsView(APIView, DBMixin): - path = "/bot/snake_facts" - name = "bot.snake_facts" - table = "snake_facts" - - @api_key - def get(self): - """ - Returns a random fact from the snake_facts table. - - API key must be provided as header. - """ - - log.trace("Fetching a random fact from the snake_facts database") - question = self.db.sample(self.table, 1)[0]["fact"] - - return jsonify(question) diff --git a/pysite/views/api/bot/snake_cog/snake_idioms.py b/pysite/views/api/bot/snake_cog/snake_idioms.py deleted file mode 100644 index 9d879871..00000000 --- a/pysite/views/api/bot/snake_cog/snake_idioms.py +++ /dev/null @@ -1,28 +0,0 @@ -import logging - -from flask import jsonify - -from pysite.base_route import APIView -from pysite.decorators import api_key -from pysite.mixins import DBMixin - -log = logging.getLogger(__name__) - - -class SnakeIdiomView(APIView, DBMixin): - path = "/bot/snake_idioms" - name = "bot.snake_idioms" - table = "snake_idioms" - - @api_key - def get(self): - """ - Returns a random idiom from the snake_idioms table. - - API key must be provided as header. - """ - - log.trace("Fetching a random idiom from the snake_idioms database") - question = self.db.sample(self.table, 1)[0]["idiom"] - - return jsonify(question) diff --git a/pysite/views/api/bot/snake_cog/snake_names.py b/pysite/views/api/bot/snake_cog/snake_names.py deleted file mode 100644 index d9e0c6b8..00000000 --- a/pysite/views/api/bot/snake_cog/snake_names.py +++ /dev/null @@ -1,48 +0,0 @@ -import logging - -from flask import jsonify -from schema import Optional, Schema - - -from pysite.base_route import APIView -from pysite.constants import ValidationTypes -from pysite.decorators import api_key, api_params -from pysite.mixins import DBMixin - -log = logging.getLogger(__name__) - -GET_SCHEMA = Schema([ - { - Optional("get_all"): str - } -]) - - -class SnakeNamesView(APIView, DBMixin): - path = "/bot/snake_names" - name = "bot.snake_names" - table = "snake_names" - - @api_key - @api_params(schema=GET_SCHEMA, validation_type=ValidationTypes.params) - def get(self, params=None): - """ - Returns all snake names random name from the snake_names table. - - API key must be provided as header. - """ - - get_all = None - - if params: - get_all = params[0].get("get_all") - - if get_all: - log.trace("Returning all snake names from the snake_names table") - snake_names = self.db.get_all(self.table) - - else: - log.trace("Fetching a single random snake name from the snake_names table") - snake_names = self.db.sample(self.table, 1)[0] - - return jsonify(snake_names) diff --git a/pysite/views/api/bot/snake_cog/snake_quiz.py b/pysite/views/api/bot/snake_cog/snake_quiz.py deleted file mode 100644 index 359077d7..00000000 --- a/pysite/views/api/bot/snake_cog/snake_quiz.py +++ /dev/null @@ -1,28 +0,0 @@ -import logging - -from flask import jsonify - -from pysite.base_route import APIView -from pysite.decorators import api_key -from pysite.mixins import DBMixin - -log = logging.getLogger(__name__) - - -class SnakeQuizView(APIView, DBMixin): - path = "/bot/snake_quiz" - name = "bot.snake_quiz" - table = "snake_quiz" - - @api_key - def get(self): - """ - Returns a random question from the snake_quiz table. - - API key must be provided as header. - """ - - log.trace("Fetching a random question from the snake_quiz database") - question = self.db.sample(self.table, 1)[0] - - return jsonify(question) diff --git a/pysite/views/api/bot/snake_cog/special_snakes.py b/pysite/views/api/bot/snake_cog/special_snakes.py deleted file mode 100644 index 294c16c9..00000000 --- a/pysite/views/api/bot/snake_cog/special_snakes.py +++ /dev/null @@ -1,28 +0,0 @@ -import logging - -from flask import jsonify - -from pysite.base_route import APIView -from pysite.decorators import api_key -from pysite.mixins import DBMixin - -log = logging.getLogger(__name__) - - -class SpecialSnakesView(APIView, DBMixin): - path = "/bot/special_snakes" - name = "bot.special_snakes" - table = "special_snakes" - - @api_key - def get(self): - """ - Returns all special snake objects from the database - - API key must be provided as header. - """ - - log.trace("Returning all special snakes in the database") - snake_names = self.db.get_all(self.table) - - return jsonify(snake_names) diff --git a/pysite/views/api/bot/tags.py b/pysite/views/api/bot/tags.py deleted file mode 100644 index 4394c224..00000000 --- a/pysite/views/api/bot/tags.py +++ /dev/null @@ -1,107 +0,0 @@ -from flask import jsonify -from schema import Optional, Schema - -from pysite.base_route import APIView -from pysite.constants import ValidationTypes -from pysite.decorators import api_key, api_params -from pysite.mixins import DBMixin - -GET_SCHEMA = Schema({ - Optional("tag_name"): str -}) - -POST_SCHEMA = Schema({ - "tag_name": str, - "tag_content": str -}) - -DELETE_SCHEMA = Schema({ - "tag_name": str -}) - - -class TagsView(APIView, DBMixin): - path = "/bot/tags" - name = "bot.tags" - table_name = "tags" - - @api_key - @api_params(schema=GET_SCHEMA, validation_type=ValidationTypes.params) - def get(self, params=None): - """ - Fetches tags from the database. - - - If tag_name is provided, it fetches - that specific tag. - - - If tag_category is provided, it fetches - all tags in that category. - - - If nothing is provided, it will - fetch a list of all tag_names. - - Data must be provided as params. - API key must be provided as header. - """ - - tag_name = None - - if params: - tag_name = params.get("tag_name") - - if tag_name: - data = self.db.get(self.table_name, tag_name) or {} - else: - data = self.db.pluck(self.table_name, "tag_name") or [] - - return jsonify(data) - - @api_key - @api_params(schema=POST_SCHEMA, validation_type=ValidationTypes.json) - def post(self, json_data): - """ - If the tag_name doesn't exist, this - saves a new tag in the database. - - If the tag_name already exists, - this will edit the existing tag. - - Data must be provided as JSON. - API key must be provided as header. - """ - - tag_name = json_data.get("tag_name") - tag_content = json_data.get("tag_content") - - self.db.insert( - self.table_name, - { - "tag_name": tag_name, - "tag_content": tag_content - }, - conflict="update" # If it exists, update it. - ) - - return jsonify({"success": True}) - - @api_key - @api_params(schema=DELETE_SCHEMA, validation_type=ValidationTypes.json) - def delete(self, data): - """ - Deletes a tag from the database. - - Data must be provided as JSON. - API key must be provided as header. - """ - - tag_name = data.get("tag_name") - tag_exists = self.db.get(self.table_name, tag_name) - - if tag_exists: - self.db.delete( - self.table_name, - tag_name - ) - return jsonify({"success": True}) - - return jsonify({"success": False}) diff --git a/pysite/views/api/bot/user.py b/pysite/views/api/bot/user.py deleted file mode 100644 index a3a0c7a8..00000000 --- a/pysite/views/api/bot/user.py +++ /dev/null @@ -1,166 +0,0 @@ -import logging - -import rethinkdb -from flask import jsonify, request -from schema import Optional, Schema - -from pysite.base_route import APIView -from pysite.constants import ErrorCodes, ValidationTypes -from pysite.decorators import api_key, api_params -from pysite.mixins import DBMixin - -SCHEMA = Schema([ - { - "avatar": str, - "discriminator": str, - "roles": [str], - "user_id": str, - "username": str - } -]) - -GET_SCHEMA = Schema([ - { - "user_id": str - } -]) - -DELETE_SCHEMA = Schema([ - { - "user_id": str, - - Optional("avatar"): str, - Optional("discriminator"): str, - Optional("roles"): [str], - Optional("username"): str - } -]) - -BANNABLE_STATES = ("preparing", "running") - - -class UserView(APIView, DBMixin): - path = "/bot/users" - name = "bot.users" - - chunks_table = "member_chunks" - infractions_table = "code_jam_infractions" - jams_table = "code_jams" - oauth_table_name = "oauth_data" - participants_table = "code_jam_participants" - responses_table = "code_jam_responses" - table_name = "users" - teams_table = "code_jam_teams" - - @api_key - @api_params(schema=GET_SCHEMA, validation_type=ValidationTypes.params) - def get(self, data): - logging.getLogger(__name__).debug(f"Size of request: {len(request.data)} bytes") - - if not data: - return self.error(ErrorCodes.bad_data_format, "No user IDs supplied") - - data = [x["user_id"] for x in data] - - result = self.db.run( - self.db.query(self.table_name) - .filter(lambda document: rethinkdb.expr(data).contains(document["user_id"])), - coerce=list - ) - - return jsonify({"data": result}) # pragma: no cover - - @api_key - @api_params(schema=SCHEMA, validation_type=ValidationTypes.json) - def post(self, data): - logging.getLogger(__name__).debug(f"Size of request: {len(request.data)} bytes") - - if not data: - return self.error(ErrorCodes.bad_data_format, "No users supplied") - - self.db.insert(self.chunks_table, {"chunk": data}) - - return jsonify({"success": True}) # pragma: no cover - - @api_key - @api_params(schema=SCHEMA, validation_type=ValidationTypes.json) - def put(self, data): - changes = self.db.insert( - self.table_name, *data, - conflict="update" - ) - - return jsonify(changes) # pragma: no cover - - @api_key - @api_params(schema=DELETE_SCHEMA, validation_type=ValidationTypes.json) - def delete(self, data): - user_ids = [user["user_id"] for user in data] - - changes = {} - - # changes = self.db.run( - # self.db.query(self.table_name) - # .get_all(*user_ids) - # .delete() - # ) - - oauth_deletions = self.db.run( - self.db.query(self.oauth_table_name) - .get_all(*user_ids, index="snowflake") - .delete() - ).get("deleted", 0) - - profile_deletions = self.db.run( - self.db.query(self.participants_table) - .get_all(*user_ids) - .delete() - ).get("deleted", 0) - - bans = 0 - response_deletions = 0 - - for user_id in user_ids: - banned = False - responses = self.db.run(self.db.query(self.responses_table).filter({"snowflake": user_id}), coerce=list) - - for response in responses: - jam = response["jam"] - jam_obj = self.db.get(self.jams_table, jam) - - if jam_obj: - if jam_obj["state"] in BANNABLE_STATES: - banned = True - - self.db.delete(self.responses_table, response["id"]) - response_deletions += 1 - - teams = self.db.run( - self.db.query(self.teams_table).filter(lambda row: row["members"].contains(user_id)), - coerce=list - ) - - for team in teams: - team["members"].remove(user_id) - - self.db.insert(self.teams_table, team, conflict="replace", durability="soft") - - self.db.sync(self.teams_table) - - if banned: - self.db.insert( - self.infractions_table, { - "participant": user_id, - "reason": "Automatic ban: Removed jammer profile in the middle of a code jam", - "number": -1, - "decremented_for": [] - } - ) - bans += 1 - - changes["deleted_oauth"] = oauth_deletions - changes["deleted_jam_profiles"] = profile_deletions - changes["deleted_responses"] = response_deletions - changes["jam_bans"] = bans - - return jsonify(changes) # pragma: no cover diff --git a/pysite/views/api/bot/user_complete.py b/pysite/views/api/bot/user_complete.py deleted file mode 100644 index 877eee34..00000000 --- a/pysite/views/api/bot/user_complete.py +++ /dev/null @@ -1,143 +0,0 @@ -import logging - -from flask import jsonify, request - -from pysite.base_route import APIView -from pysite.constants import ErrorCodes, ValidationTypes -from pysite.decorators import api_key, api_params -from pysite.mixins import DBMixin - - -BANNABLE_STATES = ("preparing", "running") - -log = logging.getLogger(__name__) - - -class UserView(APIView, DBMixin): - path = "/bot/users/complete" - name = "bot.users.complete" - - chunks_table = "member_chunks" - infractions_table = "code_jam_infractions" - jams_table = "code_jams" - oauth_table_name = "oauth_data" - participants_table = "code_jam_participants" - responses_table = "code_jam_responses" - table_name = "users" - teams_table = "code_jam_teams" - - @api_key - @api_params(validation_type=ValidationTypes.none) - def post(self, _): - log.debug(f"Size of request: {len(request.data)} bytes") - - documents = self.db.get_all(self.chunks_table) - chunks = [] - - for doc in documents: - log.info(f"Got member chunk with {len(doc['chunk'])} users") - chunks.append(doc["chunk"]) - - self.db.delete(self.chunks_table, doc["id"], durability="soft") - self.db.sync(self.chunks_table) - - log.info(f"Got {len(chunks)} member chunks") - - data = [] - - for chunk in chunks: - data += chunk - - log.info(f"Got {len(data)} members") - - if not data: - return self.error(ErrorCodes.bad_data_format, "No users supplied") - - deletions = 0 - oauth_deletions = 0 - profile_deletions = 0 - response_deletions = 0 - bans = 0 - - user_ids = [user["user_id"] for user in data] - - all_users = self.db.run(self.db.query(self.table_name), coerce=list) - - for user in all_users: - if user["user_id"] not in user_ids: - self.db.delete(self.table_name, user["user_id"], durability="soft") - deletions += 1 - - all_oauth_data = self.db.run(self.db.query(self.oauth_table_name), coerce=list) - - for item in all_oauth_data: - if item["snowflake"] not in user_ids: - user_id = item["snowflake"] - - oauth_deletions += self.db.delete( - self.oauth_table_name, item["id"], durability="soft", return_changes=True - ).get("deleted", 0) - profile_deletions += self.db.delete( - self.participants_table, user_id, durability="soft", return_changes=True - ).get("deleted", 0) - - banned = False - responses = self.db.run( - self.db.query(self.responses_table).filter({"snowflake": user_id}), - coerce=list - ) - - for response in responses: - jam = response["jam"] - jam_obj = self.db.get(self.jams_table, jam) - - if jam_obj: - if jam_obj["state"] in BANNABLE_STATES: - banned = True - - self.db.delete(self.responses_table, response["id"], durability="soft") - response_deletions += 1 - - teams = self.db.run( - self.db.query(self.teams_table).filter(lambda row: row["members"].contains(user_id)), - coerce=list - ) - - for team in teams: - team["members"].remove(user_id) - - self.db.insert(self.teams_table, team, conflict="replace", durability="soft") - - if banned: - self.db.insert( - self.infractions_table, { - "participant": user_id, - "reason": "Automatic ban: Removed jammer profile in the middle of a code jam", - "number": -1, - "decremented_for": [] - }, durability="soft" - ) - bans += 1 - - del user_ids - - changes = self.db.insert( - self.table_name, *data, - conflict="update", - durability="soft" - ) - - self.db.sync(self.infractions_table) - self.db.sync(self.oauth_table_name) - self.db.sync(self.participants_table) - self.db.sync(self.responses_table) - self.db.sync(self.table_name) - self.db.sync(self.teams_table) - - changes["deleted"] = deletions - changes["deleted_oauth"] = oauth_deletions - changes["deleted_jam_profiles"] = profile_deletions - changes["deleted_responses"] = response_deletions - changes["jam_bans"] = bans - - return jsonify(changes) # pragma: no cover diff --git a/pysite/views/api/error_view.py b/pysite/views/api/error_view.py deleted file mode 100644 index 89b4d6ad..00000000 --- a/pysite/views/api/error_view.py +++ /dev/null @@ -1,40 +0,0 @@ -from flask import jsonify -from werkzeug.exceptions import HTTPException - -from pysite.base_route import ErrorView - - -class APIErrorView(ErrorView): - name = "api.error_all" - error_code = range(400, 600) - register_on_app = False - - def __init__(self): - - # Direct errors for all methods at self.return_error - methods = [ - 'get', 'post', 'put', - 'delete', 'patch', 'connect', - 'options', 'trace' - ] - - for method in methods: - setattr(self, method, self.return_error) - - def return_error(self, error: HTTPException): - """ - Return a basic JSON object representing the HTTP error, - as well as propagating its status code - """ - - message = str(error) - code = 500 - - if isinstance(error, HTTPException): - message = error.description - code = error.code - - return jsonify({ - "error_code": -1, - "error_message": message - }), code diff --git a/pysite/views/api/healthcheck.py b/pysite/views/api/healthcheck.py deleted file mode 100644 index c873d674..00000000 --- a/pysite/views/api/healthcheck.py +++ /dev/null @@ -1,11 +0,0 @@ -from flask import jsonify - -from pysite.base_route import APIView - - -class HealthCheckView(APIView): - path = "/healthcheck" - name = "api.healthcheck" - - def get(self): - return jsonify({"status": "ok"}) diff --git a/pysite/views/api/index.py b/pysite/views/api/index.py deleted file mode 100644 index 5111162c..00000000 --- a/pysite/views/api/index.py +++ /dev/null @@ -1,10 +0,0 @@ -from pysite.base_route import APIView -from pysite.constants import ErrorCodes - - -class IndexView(APIView): - path = "/" - name = "api.index" - - def get(self): - return self.error(ErrorCodes.unknown_route) diff --git a/pysite/views/api/robots_txt.py b/pysite/views/api/robots_txt.py deleted file mode 100644 index d4406d54..00000000 --- a/pysite/views/api/robots_txt.py +++ /dev/null @@ -1,15 +0,0 @@ -from flask import Response, url_for - -from pysite.base_route import RouteView - - -class RobotsTXT(RouteView): - path = "/robots.txt" - name = "robots_txt" - - def get(self): - return Response( - self.render( - "robots.txt", sitemap_url=url_for("api.sitemap_xml", _external=True), rules={"*": ["/"]} - ), content_type="text/plain" - ) diff --git a/pysite/views/api/sitemap_xml.py b/pysite/views/api/sitemap_xml.py deleted file mode 100644 index 26a786b0..00000000 --- a/pysite/views/api/sitemap_xml.py +++ /dev/null @@ -1,11 +0,0 @@ -from flask import Response - -from pysite.base_route import RouteView - - -class SitemapXML(RouteView): - path = "/sitemap.xml" - name = "sitemap_xml" - - def get(self): - return Response(self.render("sitemap.xml", urls=[]), content_type="application/xml") diff --git a/pysite/views/error_handlers/http_4xx.py b/pysite/views/error_handlers/http_4xx.py deleted file mode 100644 index 731204f9..00000000 --- a/pysite/views/error_handlers/http_4xx.py +++ /dev/null @@ -1,31 +0,0 @@ -from flask import request -from werkzeug.exceptions import HTTPException - -from pysite.base_route import ErrorView -from pysite.constants import ERROR_DESCRIPTIONS - - -class Error400View(ErrorView): - name = "errors.4xx" - error_code = range(400, 430) - - def __init__(self): - # Direct errors for all methods at self.return_error - methods = [ - 'get', 'post', 'put', - 'delete', 'patch', 'connect', - 'options', 'trace' - ] - - for method in methods: - setattr(self, method, self.error) - - def error(self, error: HTTPException): - error_desc = ERROR_DESCRIPTIONS.get(error.code, "We're not really sure what happened there, please try again.") - - return self.render( - "errors/error.html", code=error.code, req=request, error_title=error_desc, - error_message=f"{error_desc} If you believe we have made a mistake, please " - "<a href='https://gitlab.com/python-discord/projects/site/issues'>" - "open an issue on our GitLab</a>." - ), error.code diff --git a/pysite/views/error_handlers/http_5xx.py b/pysite/views/error_handlers/http_5xx.py deleted file mode 100644 index 489eb5e5..00000000 --- a/pysite/views/error_handlers/http_5xx.py +++ /dev/null @@ -1,41 +0,0 @@ -from flask import request -from werkzeug.exceptions import HTTPException, InternalServerError - -from pysite.base_route import ErrorView -from pysite.constants import ERROR_DESCRIPTIONS - - -class Error500View(ErrorView): - name = "errors.5xx" - error_code = range(500, 600) - - def __init__(self): - - # Direct errors for all methods at self.return_error - methods = [ - 'get', 'post', 'put', - 'delete', 'patch', 'connect', - 'options', 'trace' - ] - - for method in methods: - setattr(self, method, self.error) - - def error(self, error: HTTPException): - - # We were sometimes recieving errors from RethinkDB, which were not originating from Werkzeug. - # To fix this, this section checks whether they have a code (which werkzeug adds) and if not - # change the error to a Werkzeug InternalServerError. - - if not hasattr(error, "code"): - error = InternalServerError() - - error_desc = ERROR_DESCRIPTIONS.get(error.code, "We're not really sure what happened there, please try again.") - - return self.render( - "errors/error.html", code=error.code, req=request, error_title=error_desc, - error_message="An error occurred while processing this request, please try " - "again later. If you believe we have made a mistake, please " - "<a href='https://gitlab.com/python-discord/projects/site/issues'>file an issue on our" - " GitLab</a>." - ), error.code diff --git a/pysite/views/main/__init__.py b/pysite/views/main/__init__.py deleted file mode 100644 index e69de29b..00000000 --- a/pysite/views/main/__init__.py +++ /dev/null diff --git a/pysite/views/main/abort.py b/pysite/views/main/abort.py deleted file mode 100644 index ecfe8f91..00000000 --- a/pysite/views/main/abort.py +++ /dev/null @@ -1,11 +0,0 @@ -from werkzeug.exceptions import InternalServerError - -from pysite.base_route import RouteView - - -class EasterEgg500(RouteView): - path = "/500" - name = "500" - - def get(self): - raise InternalServerError diff --git a/pysite/views/main/about/__init__.py b/pysite/views/main/about/__init__.py deleted file mode 100644 index e69de29b..00000000 --- a/pysite/views/main/about/__init__.py +++ /dev/null diff --git a/pysite/views/main/about/channels.py b/pysite/views/main/about/channels.py deleted file mode 100644 index 2e5496f9..00000000 --- a/pysite/views/main/about/channels.py +++ /dev/null @@ -1,7 +0,0 @@ -from pysite.base_route import TemplateView - - -class ChannelsView(TemplateView): - path = "/about/channels" - name = "about.channels" - template = "main/about/channels.html" diff --git a/pysite/views/main/about/index.py b/pysite/views/main/about/index.py deleted file mode 100644 index 6f5ef1c8..00000000 --- a/pysite/views/main/about/index.py +++ /dev/null @@ -1,7 +0,0 @@ -from pysite.base_route import TemplateView - - -class IndexView(TemplateView): - path = "/about/" - name = "about.index" - template = "main/about/index.html" diff --git a/pysite/views/main/about/partners.py b/pysite/views/main/about/partners.py deleted file mode 100644 index 4fe321a5..00000000 --- a/pysite/views/main/about/partners.py +++ /dev/null @@ -1,19 +0,0 @@ -import json -from logging import getLogger - -from pysite.base_route import RouteView - -try: - with open("static/partners.json") as fh: - partners = json.load(fh) -except Exception: - getLogger("Partners").exception("Failed to load partners.json") - categories = None - - -class PartnersView(RouteView): - path = "/about/partners" - name = "about.partners" - - def get(self): - return self.render("main/about/partners.html", partners=partners) diff --git a/pysite/views/main/about/privacy.py b/pysite/views/main/about/privacy.py deleted file mode 100644 index a08aa22b..00000000 --- a/pysite/views/main/about/privacy.py +++ /dev/null @@ -1,7 +0,0 @@ -from pysite.base_route import TemplateView - - -class PrivacyView(TemplateView): - path = "/about/privacy" - name = "about.privacy" - template = "main/about/privacy.html" diff --git a/pysite/views/main/about/rules.py b/pysite/views/main/about/rules.py deleted file mode 100644 index a40110a1..00000000 --- a/pysite/views/main/about/rules.py +++ /dev/null @@ -1,7 +0,0 @@ -from pysite.base_route import TemplateView - - -class RulesView(TemplateView): - path = "/about/rules" - name = "about.rules" - template = "main/about/rules.html" diff --git a/pysite/views/main/auth/__init__.py b/pysite/views/main/auth/__init__.py deleted file mode 100644 index e69de29b..00000000 --- a/pysite/views/main/auth/__init__.py +++ /dev/null diff --git a/pysite/views/main/auth/done.py b/pysite/views/main/auth/done.py deleted file mode 100644 index 6e892906..00000000 --- a/pysite/views/main/auth/done.py +++ /dev/null @@ -1,18 +0,0 @@ -from flask import redirect, session, url_for - -from pysite.base_route import RouteView - - -class AuthDoneView(RouteView): - path = "/auth/done" - name = "auth.done" - - def get(self): - if self.logged_in: - target = session.get("redirect_target") - - if target: - del session["redirect_target"] - return redirect(url_for(target["url"], **target.get("kwargs", {}))) - - return redirect(url_for("main.index")) diff --git a/pysite/views/main/bot/cleanlog.py b/pysite/views/main/bot/cleanlog.py deleted file mode 100644 index 9c719b3e..00000000 --- a/pysite/views/main/bot/cleanlog.py +++ /dev/null @@ -1,35 +0,0 @@ -import logging - -from pysite.base_route import RouteView -from pysite.constants import ALL_STAFF_ROLES, DEVELOPERS_ROLE, ROLE_COLORS -from pysite.decorators import require_roles -from pysite.mixins import DBMixin, OAuthMixin - -log = logging.getLogger(__name__) - - -class CleanLogView(RouteView, DBMixin, OAuthMixin): - path = "/bot/clean_logs/<log_id>" - name = "bot.clean_logs" - - table_name = "clean_logs" - template = "main/bot/clean_logs.html" - - @require_roles(ALL_STAFF_ROLES) - def get(self, log_id): - """ - Get the requested clean log and spit it out - in a beautiful template. - """ - - data = self.db.get(self.table_name, log_id) - - if data is None: - return "ID could not be found in the database", 404 - - messages = data["log_data"] - - for message in messages: - message['color'] = ROLE_COLORS.get(message['role_id'], ROLE_COLORS[DEVELOPERS_ROLE]) - - return self.render(self.template, messages=messages) diff --git a/pysite/views/main/error.py b/pysite/views/main/error.py deleted file mode 100644 index 07286eb4..00000000 --- a/pysite/views/main/error.py +++ /dev/null @@ -1,14 +0,0 @@ -from flask import abort - -from pysite.base_route import RouteView - - -class ErrorView(RouteView): - path = "/error/<int:code>" - name = "error" - - def get(self, code): - try: - return abort(code) - except LookupError: - return abort(500) diff --git a/pysite/views/main/index.py b/pysite/views/main/index.py deleted file mode 100644 index 874961bb..00000000 --- a/pysite/views/main/index.py +++ /dev/null @@ -1,7 +0,0 @@ -from pysite.base_route import TemplateView - - -class IndexView(TemplateView): - path = "/" - name = "index" - template = "main/index.html" diff --git a/pysite/views/main/info/__init__.py b/pysite/views/main/info/__init__.py deleted file mode 100644 index e69de29b..00000000 --- a/pysite/views/main/info/__init__.py +++ /dev/null diff --git a/pysite/views/main/info/faq.py b/pysite/views/main/info/faq.py deleted file mode 100644 index 8878e180..00000000 --- a/pysite/views/main/info/faq.py +++ /dev/null @@ -1,7 +0,0 @@ -from pysite.base_route import TemplateView - - -class IndexView(TemplateView): - path = "/info/faq" - name = "info.faq" - template = "main/info/faq.html" diff --git a/pysite/views/main/info/help.py b/pysite/views/main/info/help.py deleted file mode 100644 index 6a82a9ed..00000000 --- a/pysite/views/main/info/help.py +++ /dev/null @@ -1,7 +0,0 @@ -from pysite.base_route import TemplateView - - -class HelpView(TemplateView): - path = "/info/help" - name = "info.help" - template = "main/info/help.html" diff --git a/pysite/views/main/info/index.py b/pysite/views/main/info/index.py deleted file mode 100644 index 97678ee4..00000000 --- a/pysite/views/main/info/index.py +++ /dev/null @@ -1,7 +0,0 @@ -from pysite.base_route import TemplateView - - -class IndexView(TemplateView): - path = "/info/" - name = "info.index" - template = "main/info/index.html" diff --git a/pysite/views/main/info/jams.py b/pysite/views/main/info/jams.py deleted file mode 100644 index b654ec1d..00000000 --- a/pysite/views/main/info/jams.py +++ /dev/null @@ -1,7 +0,0 @@ -from pysite.base_route import RedirectView - - -class JamsView(RedirectView): - path = "/info/jams" - name = "info.jams" - page = "main.jams.index" diff --git a/pysite/views/main/info/resources.py b/pysite/views/main/info/resources.py deleted file mode 100644 index 541b9ba1..00000000 --- a/pysite/views/main/info/resources.py +++ /dev/null @@ -1,58 +0,0 @@ -import json -from logging import getLogger - -from pysite.base_route import RouteView - -ICON_STYLES = { - "branding": "fab", - "regular": "far", - "solid": "fas", - "light": "fal" -} - -logger = getLogger("Resources") - -try: - with open("static/resources.json") as fh: - categories = json.load(fh) - - for category, items in categories.items(): - to_remove = [] - - for name, resource in items["resources"].items(): - for url_obj in resource["urls"]: - icon = url_obj["icon"].lower() - - if "/" not in icon: - to_remove.append(name) - logger.error( - f"Resource {name} in category {category} has an invalid icon. Icons should be of the" - f"form `style/name`." - ) - continue - - style, icon_name = icon.split("/") - - if style not in ICON_STYLES: - to_remove.append(name) - logger.error( - f"Resource {name} in category {category} has an invalid icon style. Icon style must " - f"be one of {', '.join(ICON_STYLES.keys())}." - ) - continue - - url_obj["classes"] = f"{ICON_STYLES[style]} fa-{icon_name}" - - for name in to_remove: - del items["resources"][name] -except Exception: - getLogger("Resources").exception("Failed to load resources.json") - categories = None - - -class ResourcesView(RouteView): - path = "/info/resources" - name = "info.resources" - - def get(self): - return self.render("main/info/resources.html", categories=categories) diff --git a/pysite/views/main/jams/__init__.py b/pysite/views/main/jams/__init__.py deleted file mode 100644 index e69de29b..00000000 --- a/pysite/views/main/jams/__init__.py +++ /dev/null diff --git a/pysite/views/main/jams/index.py b/pysite/views/main/jams/index.py deleted file mode 100644 index 0cd9a287..00000000 --- a/pysite/views/main/jams/index.py +++ /dev/null @@ -1,52 +0,0 @@ -import rethinkdb - -from pysite.base_route import RouteView -from pysite.mixins import DBMixin - - -class JamsIndexView(RouteView, DBMixin): - path = "/jams" - name = "jams.index" - table_name = "code_jams" - - teams_table = "code_jam_teams" - - def get(self): - query = ( - self.db.query(self.table_name) - .filter(rethinkdb.row["state"] != "planning") - .merge( - lambda jam_obj: { - "teams": - self.db.query(self.teams_table) - .filter(lambda team_row: jam_obj["teams"].contains(team_row["id"])) - .pluck(["id"]) - .coerce_to("array") - } - ) - .order_by(rethinkdb.desc("number")) - .limit(5) - ) - - jams = self.db.run(query, coerce=list) - for jam in jams: - if "winning_team" in jam and jam["winning_team"]: - jam["winning_team"] = self.db.get(self.teams_table, jam["winning_team"]) - else: - jam["winning_team"] = None - pass - return self.render("main/jams/index.html", jams=jams, has_applied_to_jam=self.has_applied_to_jam) - - def get_jam_response(self, jam, user_id): - query = self.db.query("code_jam_responses").filter({"jam": jam, "snowflake": user_id}) - result = self.db.run(query, coerce=list) - - if result: - return result[0] - return None - - def has_applied_to_jam(self, jam): - # whether the user has applied to this jam - if not self.logged_in: - return False - return self.get_jam_response(jam, self.user_data["user_id"]) diff --git a/pysite/views/main/jams/info.py b/pysite/views/main/jams/info.py deleted file mode 100644 index fd4615e9..00000000 --- a/pysite/views/main/jams/info.py +++ /dev/null @@ -1,7 +0,0 @@ -from pysite.base_route import TemplateView - - -class JamsInfoView(TemplateView): - path = "/jams/info" - name = "jams.info" - template = "main/jams/info.html" diff --git a/pysite/views/main/jams/jam_team_list.py b/pysite/views/main/jams/jam_team_list.py deleted file mode 100644 index 452a073f..00000000 --- a/pysite/views/main/jams/jam_team_list.py +++ /dev/null @@ -1,45 +0,0 @@ -import logging - -from werkzeug.exceptions import NotFound - -from pysite.base_route import RouteView -from pysite.mixins import DBMixin, OAuthMixin - -log = logging.getLogger(__name__) - - -class JamsTeamListView(RouteView, DBMixin, OAuthMixin): - path = "/jams/teams/<int:jam_id>" - name = "jams.jam_team_list" - - table_name = "code_jam_teams" - jams_table = "code_jams" - - def get(self, jam_id): - jam_obj = self.db.get(self.jams_table, jam_id) - if not jam_obj: - raise NotFound() - - # Get all the participants of this jam - # Note: the group function will return a dict with user_ids as keys, however each element will be an array - participants_query = self.db.query("users").get_all(*jam_obj["participants"], index="user_id").group("user_id") - participants = self.db.run(participants_query) - - # Get all the teams, leaving the team members as only an array of IDs - query = self.db.query(self.table_name).get_all(self.table_name, *jam_obj["teams"]).pluck( - ["id", "name", "members", "repo"]).coerce_to("array") - jam_obj["teams"] = self.db.run(query) - - # Populate each team's members using the previously queried participant list - for team in jam_obj["teams"]: - team["members"] = [participants[user_id][0] for user_id in team["members"]] - - return self.render( - "main/jams/team_list.html", - jam=jam_obj, - teams=jam_obj["teams"], - member_ids=self.member_ids - ) - - def member_ids(self, members): - return [member["user_id"] for member in members] diff --git a/pysite/views/main/jams/join.py b/pysite/views/main/jams/join.py deleted file mode 100644 index 4db59630..00000000 --- a/pysite/views/main/jams/join.py +++ /dev/null @@ -1,247 +0,0 @@ -import datetime -from email.utils import parseaddr - -from flask import redirect, request, url_for -from werkzeug.exceptions import BadRequest, NotFound - -from pysite.base_route import RouteView -from pysite.constants import BotEventTypes, CHANNEL_JAM_LOGS -from pysite.decorators import csrf -from pysite.mixins import DBMixin, OAuthMixin, RMQMixin - - -class JamsJoinView(RouteView, DBMixin, OAuthMixin, RMQMixin): - path = "/jams/join/<int:jam>" - name = "jams.join" - - table_name = "code_jams" - forms_table = "code_jam_forms" - questions_table = "code_jam_questions" - responses_table = "code_jam_responses" - participants_table = "code_jam_participants" - infractions_table = "code_jam_infractions" - - def get(self, jam): - jam_obj = self.db.get(self.table_name, jam) - - if not jam_obj: - return NotFound() - - if not self.user_data: - return self.redirect_login(jam=jam) - - infractions = self.get_infractions(self.user_data["user_id"]) - - for infraction in infractions: - if infraction["number"] == -1: # Indefinite ban - return self.render("main/jams/banned.html", infraction=infraction, jam=jam_obj) - - if infraction["number"]: # Got some jams left - if jam not in infraction["decremented_for"]: - # Make sure they haven't already tried to apply for this jam - infraction["number"] -= 1 - infraction["decremented_for"].append(jam) - - self.db.insert(self.infractions_table, infraction, conflict="replace") - - return self.render("main/jams/banned.html", infraction=infraction, jam=jam_obj) - - if jam in infraction["decremented_for"]: - # They already tried to apply for this jam - return self.render("main/jams/banned.html", infraction=infraction, jam=jam_obj) - - participant = self.db.get(self.participants_table, self.user_data["user_id"]) - - if not participant: - return redirect(url_for("main.jams.profile", form=jam)) - - if self.get_response(jam, self.user_data["user_id"]): - return self.render("main/jams/already.html", jam=jam_obj) - - form_obj = self.db.get(self.forms_table, jam) - questions = [] - - if form_obj: - for question in form_obj["questions"]: - questions.append(self.db.get(self.questions_table, question)) - - return self.render( - "main/jams/join.html", jam=jam_obj, form=form_obj, - questions=questions, question_ids=[q["id"] for q in questions] - ) - - @csrf - def post(self, jam): - jam_obj = self.db.get(self.table_name, jam) - - if not jam_obj: - return NotFound() - - if not self.user_data: - return self.redirect_login(jam=jam) - - infractions = self.get_infractions(self.user_data["user_id"]) - - for infraction in infractions: - if infraction["number"] == -1: # Indefinite ban - self.log_banned(infraction["number"], infraction["reason"]) - return self.render("main/jams/banned.html", infraction=infraction) - - if infraction["number"]: # Got some jams left - if jam not in infraction["decremented_for"]: - # Make sure they haven't already tried to apply for this jam - infraction["number"] -= 1 - infraction["decremented_for"].append(jam) - - self.db.insert(self.infractions_table, infraction, conflict="replace") - - self.log_banned(infraction["number"], infraction["reason"]) - return self.render("main/jams/banned.html", infraction=infraction, jam=jam_obj) - - if jam in infraction["decremented_for"]: - # They already tried to apply for this jam - self.log_banned(infraction["number"], infraction["reason"]) - return self.render("main/jams/banned.html", infraction=infraction, jam=jam_obj) - - participant = self.db.get(self.participants_table, self.user_data["user_id"]) - - if not participant: - return redirect(url_for("main.jams.profile")) - - if self.get_response(jam, self.user_data["user_id"]): - return self.render("main/jams/already.html", jam=jam_obj) - - form_obj = self.db.get(self.forms_table, jam) - - if not form_obj: - return NotFound() - - questions = [] - - for question in form_obj["questions"]: - questions.append(self.db.get(self.questions_table, question)) - - answers = [] - - for question in questions: - value = request.form.get(question["id"]) - answer = {"question": question["id"]} - - if not question["optional"] and value is None: - return BadRequest() - - if question["type"] == "checkbox": - if value == "on": - answer["value"] = True - elif not question["optional"]: - return BadRequest() - else: - answer["value"] = False - - elif question["type"] == "email": - if value: - address = parseaddr(value) - - if address == ("", ""): - return BadRequest() - - answer["value"] = value - - elif question["type"] in ["number", "range", "slider"]: - if value is not None: - value = int(value) - - if value > int(question["data"]["max"]) or value < int(question["data"]["min"]): - return BadRequest() - - answer["value"] = value - - elif question["type"] == "radio": - if value: - if value not in question["data"]["options"]: - return BadRequest() - - answer["value"] = value - - elif question["type"] in ["text", "textarea"]: - answer["value"] = value - - answers.append(answer) - - user_id = self.user_data["user_id"] - - response = { - "snowflake": user_id, - "jam": jam, - "approved": False, - "answers": answers - } - - self.db.insert(self.responses_table, response) - self.log_success() - - return self.render("main/jams/thanks.html", jam=jam_obj) - - def get_response(self, jam, user_id): - query = self.db.query(self.responses_table).filter({"jam": jam, "snowflake": user_id}) - result = self.db.run(query, coerce=list) - - if result: - return result[0] - return None - - def get_infractions(self, user_id): - query = self.db.query(self.infractions_table).filter({"participant": user_id}) - return self.db.run(query, coerce=list) - - def log_banned(self, number, reason): - user_data = self.user_data - - user_id = user_data["user_id"] - username = user_data["username"] - discriminator = user_data["discriminator"] - - message = f"Failed code jam signup from banned user: {user_id} ({username}#{discriminator})\n\n" - - if number == -1: - message += f"This user has been banned indefinitely. Reason: '{reason}'" - elif number < 1: - message += f"This application has expired the infraction. Reason: '{reason}'" - else: - message += f"This user has {number} more applications left before they're unbanned. Reason: '{reason}'" - - self.rmq_bot_event( - BotEventTypes.mod_log, - { - "level": "warning", "title": "Code Jams: Applications", - "message": message - } - ) - - def log_success(self): - user_data = self.user_data - - user_id = user_data["user_id"] - username = user_data["username"] - discriminator = user_data["discriminator"] - - self.rmq_bot_event( - BotEventTypes.mod_log, - { - "level": "info", "title": "Code Jams: Applications", - "message": f"Successful code jam signup from user: {user_id} " - f"({username}#{discriminator})" - } - ) - - self.rmq_bot_event( - BotEventTypes.send_embed, - { - "target": CHANNEL_JAM_LOGS, - "title": "Code Jams: Applications", - "description": f"Successful code jam signup from user: {user_id} " - f"({username}#{discriminator})", - "colour": 0x2ecc71, # Green from d.py - "timestamp": datetime.datetime.now().isoformat() - } - ) diff --git a/pysite/views/main/jams/profile.py b/pysite/views/main/jams/profile.py deleted file mode 100644 index e918c135..00000000 --- a/pysite/views/main/jams/profile.py +++ /dev/null @@ -1,71 +0,0 @@ -from flask import redirect, request, url_for -from werkzeug.exceptions import BadRequest - -from pysite.base_route import RouteView -from pysite.decorators import csrf -from pysite.mixins import DBMixin, OAuthMixin - - -class JamsProfileView(RouteView, DBMixin, OAuthMixin): - path = "/jams/profile" - name = "jams.profile" - - table_name = "code_jam_participants" - - def get(self): - if not self.user_data: - return self.redirect_login() - - participant = self.db.get(self.table_name, self.user_data["user_id"]) - existing = True - - if not participant: - participant = {"id": self.user_data["user_id"]} - existing = False - - form = request.args.get("form") - - if form: - try: - form = int(form) - except ValueError: - pass # Someone trying to have some fun I guess - - return self.render( - "main/jams/profile.html", participant=participant, form=form, existing=existing - ) - - @csrf - def post(self): - if not self.user_data: - return self.redirect_login() - - participant = self.db.get(self.table_name, self.user_data["user_id"]) - - if not participant: - participant = {"id": self.user_data["user_id"]} - - gitlab_username = request.form.get("gitlab_username") - timezone = request.form.get("timezone") - - if not gitlab_username or not timezone: - return BadRequest() - - participant["gitlab_username"] = gitlab_username - participant["timezone"] = timezone - - self.db.insert(self.table_name, participant, conflict="replace") - - form = request.args.get("form") - - if form: - try: - form = int(form) - except ValueError: - pass # Someone trying to have some fun I guess - else: - return redirect(url_for("main.jams.join", jam=form)) - - return self.render( - "main/jams/profile.html", participant=participant, done=True, existing=True - ) diff --git a/pysite/views/main/jams/retract.py b/pysite/views/main/jams/retract.py deleted file mode 100644 index 277426b5..00000000 --- a/pysite/views/main/jams/retract.py +++ /dev/null @@ -1,83 +0,0 @@ -from werkzeug.exceptions import BadRequest - -from pysite.base_route import RouteView -from pysite.decorators import csrf -from pysite.mixins import DBMixin, OAuthMixin - -BANNABLE_STATES = ("preparing", "running") - - -class JamsProfileView(RouteView, DBMixin, OAuthMixin): - path = "/jams/retract" - name = "jams.retract" - - table_name = "code_jam_participants" - infractions_table = "code_jam_infractions" - jams_table = "code_jams" - responses_table = "code_jam_responses" - - def get(self): - if not self.user_data: - return self.redirect_login() - - user_id = self.user_data["user_id"] - participant = self.db.get(self.table_name, user_id) - - banned = False - - if participant: - responses = self.db.run(self.db.query(self.responses_table).filter({"snowflake": user_id}), coerce=list) - - for response in responses: - jam = response["jam"] - jam_obj = self.db.get(self.jams_table, jam) - - if jam_obj: - if jam_obj["state"] in BANNABLE_STATES: - banned = True - break - - return self.render( - "main/jams/retract.html", participant=participant, banned=banned - ) - - @csrf - def post(self): - if not self.user_data: - return self.redirect_login() - - user_id = self.user_data["user_id"] - participant = self.db.get(self.table_name, user_id) - - if not participant: - return BadRequest() - - banned = False - - responses = self.db.run(self.db.query(self.responses_table).filter({"snowflake": user_id}), coerce=list) - - for response in responses: - jam = response["jam"] - jam_obj = self.db.get(self.jams_table, jam) - - if jam_obj: - if jam_obj["state"] in BANNABLE_STATES: - banned = True - - self.db.delete(self.responses_table, response["id"]) - - self.db.delete(self.table_name, participant["id"]) - - if banned: - self.db.insert( - self.infractions_table, { - "participant": user_id, - "reason": "Automatic ban: Removed jammer profile in the middle of a code jam", - "number": -1, - "decremented_for": [] - } - ) - - return self.render( - "main/jams/retracted.html", participant=participant, banned=banned - ) diff --git a/pysite/views/main/jams/team_edit_repo.py b/pysite/views/main/jams/team_edit_repo.py deleted file mode 100644 index 03e752bc..00000000 --- a/pysite/views/main/jams/team_edit_repo.py +++ /dev/null @@ -1,151 +0,0 @@ -import logging -import re -from urllib.parse import quote - -import requests -from flask import jsonify, request -from rethinkdb import ReqlNonExistenceError -from urllib3.util import parse_url -from werkzeug.exceptions import NotFound, Unauthorized - -from pysite.base_route import APIView -from pysite.constants import ErrorCodes, GITLAB_ACCESS_TOKEN -from pysite.decorators import csrf -from pysite.mixins import DBMixin, OAuthMixin - -log = logging.getLogger(__name__) - - -class JamsTeamEditRepo(APIView, DBMixin, OAuthMixin): - path = "/jams/teams/<string:team_id>/edit_repo" - name = "jams.team.edit_repo" - - table_name = "code_jam_teams" - jams_table = "code_jams" - - gitlab_projects_api_endpoint = "https://gitlab.com/api/v4/projects/{0}" - - @csrf - def post(self, team_id): - if not self.user_data: - return self.redirect_login() - - try: - query = self.db.query(self.table_name).get(team_id).merge( - lambda team: { - "jam": self.db.query("code_jams").get(team["jam"]) - } - ) - - team = self.db.run(query) - except ReqlNonExistenceError: - log.exception("Failed RethinkDB query") - raise NotFound() - - # Only team members can use this route - if not self.user_data["user_id"] in team["members"]: - raise Unauthorized() - - repo_url = request.form.get("repo_url").strip() - - # Check if repo is a valid GitLab repo URI - url = parse_url(repo_url) - - if url.host != "gitlab.com" or url.path is None: - return self.error( - ErrorCodes.incorrect_parameters, - "Not a GitLab repository." - ) - - project_path = url.path.strip("/") # /user/repository/ --> user/repository - if len(project_path.split("/")) < 2: - return self.error( - ErrorCodes.incorrect_parameters, - "Not a valid repository." - ) - - word_regex = re.compile("^[\-\.\w]+$") # Alphanumerical, underscores, periods, and dashes - for segment in project_path.split("/"): - if not word_regex.fullmatch(segment): - return self.error( - ErrorCodes.incorrect_parameters, - "Not a valid repository." - ) - - project_path_encoded = quote(project_path, safe='') # Replaces / with %2F, etc. - - # If validation returns something else than True, abort - validation = self.validate_project(team, project_path_encoded) - if validation is not True: - return validation - - # Update the team repo - # Note: the team repo is only stored using its path (e.g. user/repository) - team_obj = self.db.get(self.table_name, team_id) - team_obj["repo"] = project_path - self.db.insert(self.table_name, team_obj, conflict="update") - - return jsonify( - { - "project_path": project_path - } - ) - - def validate_project(self, team, project_path): - # Check on GitLab if the project exists - # NB: certain fields (such as "forked_from_project") need an access token - # to be visible. Set the GITLAB_ACCESS_TOKEN env variable to solve this - query_response = self.request_project(project_path) - - if query_response.status_code != 200: - return self.error( - ErrorCodes.incorrect_parameters, - "Not a valid repository." - ) - - # Check if the jam's base repo has been set by staff - # If not, just ignore the fork check and proceed - if "repo" not in team["jam"]: - return True - jam_repo = team["jam"]["repo"] - - # Check if the provided repo is a forked repo - project_data = query_response.json() - if "forked_from_project" not in project_data: - return self.error( - ErrorCodes.incorrect_parameters, - "This repository is not a fork of the jam's repository." - ) - - # Check if the provided repo is forking the base repo - forked_from_project = project_data["forked_from_project"] - - # The jam repo is stored in full (e.g. https://gitlab.com/user/repository) - jam_repo_path = quote(parse_url(jam_repo).path.strip("/"), safe='') - - # Get info about the code jam repo - jam_repo_response = self.request_project(jam_repo_path) - - # Something went wrong, fail silently - if jam_repo_response.status_code != 200: - return True - - # Check if the IDs for the code jam repo and the fork source match - jam_repo_data = jam_repo_response.json() - if jam_repo_data["id"] != forked_from_project["id"]: - return self.error( - ErrorCodes.incorrect_parameters, - "This repository is not a fork of the jam's repository." - ) - - # All good - return True - - def request_project(self, project_path): - # Request the project details using a private access token - return requests.get( - self.gitlab_projects_api_endpoint.format(project_path), - params={ - "private_token": GITLAB_ACCESS_TOKEN - } - ) diff --git a/pysite/views/main/jams/team_view.py b/pysite/views/main/jams/team_view.py deleted file mode 100644 index 6b5d86ce..00000000 --- a/pysite/views/main/jams/team_view.py +++ /dev/null @@ -1,53 +0,0 @@ -import datetime -import logging - -from rethinkdb import ReqlNonExistenceError -from werkzeug.exceptions import NotFound - -from pysite.base_route import RouteView -from pysite.mixins import DBMixin, OAuthMixin - -log = logging.getLogger(__name__) - - -class JamsTeamView(RouteView, DBMixin, OAuthMixin): - path = "/jams/team/<string:team_id>" - name = "jams.team_view" - - table_name = "code_jam_teams" - - def get(self, team_id: str): - try: - query = self.db.query(self.table_name).get(team_id).merge( - lambda team: { - "members": - self.db.query("users") - .filter(lambda user: team["members"].contains(user["user_id"])) - .merge( - lambda user: { - "gitlab_username": self.db.query("code_jam_participants").filter( - {"id": user["user_id"]} - ).coerce_to("array")[0]["gitlab_username"] - } - ).coerce_to("array"), - "jam": self.db.query("code_jams").get(team["jam"]) - } - ) - - team = self.db.run(query) - except ReqlNonExistenceError: - log.exception("Failed RethinkDB query") - raise NotFound() - - # check if the current user is a member of this team - # (this is for edition privileges) - is_own_team = self.logged_in and self.user_data["user_id"] in [member["user_id"] for member in team["members"]] - - return self.render( - "main/jams/team_view.html", - team=team, is_own_team=is_own_team, day_delta=self.day_delta - ) - - def day_delta(self, date, delta): - # util to add or subtract days from a date - return date + datetime.timedelta(days=delta) diff --git a/pysite/views/main/jams/user_team_list.py b/pysite/views/main/jams/user_team_list.py deleted file mode 100644 index 226cc4b0..00000000 --- a/pysite/views/main/jams/user_team_list.py +++ /dev/null @@ -1,37 +0,0 @@ -import rethinkdb - -from pysite.base_route import RouteView -from pysite.mixins import DBMixin, OAuthMixin - - -class JamsUserTeamListView(RouteView, DBMixin, OAuthMixin): - path = "/jams/my_teams" - name = "jams.user_team_list" - - def get(self): - # list teams a user is (or was) a part of - if not self.user_data: - return self.redirect_login() - - query = self.db.query("code_jam_teams").filter( - lambda team: team["members"].contains(self.user_data["user_id"]) - ).merge( - lambda team: { - "members": - self.db.query("users") - .filter(lambda user: team["members"].contains(user["user_id"])) - .merge(lambda user: { - "gitlab_username": - self.db.query("code_jam_participants").filter({"id": user["user_id"]}) - .coerce_to("array")[0]["gitlab_username"] - }).coerce_to("array"), - "jam": self.db.query("code_jams").get(team["jam"]) - } - ).order_by(rethinkdb.desc("jam.number")) - teams = self.db.run(query) - - return self.render( - "main/jams/team_list.html", - user_teams=True, - teams=teams - ) diff --git a/pysite/views/main/logout.py b/pysite/views/main/logout.py deleted file mode 100644 index 64326371..00000000 --- a/pysite/views/main/logout.py +++ /dev/null @@ -1,16 +0,0 @@ -from flask import redirect, session, url_for - -from pysite.base_route import RouteView - - -class LogoutView(RouteView): - path = "/auth/logout" - name = "logout" - - def get(self): - if self.logged_in: - # remove user's session - del session["session_id"] - self.oauth.logout() - - return redirect(url_for("main.index")) diff --git a/pysite/views/main/redirects/__init__.py b/pysite/views/main/redirects/__init__.py deleted file mode 100644 index e69de29b..00000000 --- a/pysite/views/main/redirects/__init__.py +++ /dev/null diff --git a/pysite/views/main/redirects/github.py b/pysite/views/main/redirects/github.py deleted file mode 100644 index 9e9c0cb8..00000000 --- a/pysite/views/main/redirects/github.py +++ /dev/null @@ -1,8 +0,0 @@ -from pysite.base_route import RedirectView - - -class GitHubView(RedirectView): - path = "/github" - name = "github" - page = "https://gitlab.com/python-discord/" - code = 302 diff --git a/pysite/views/main/redirects/gitlab.py b/pysite/views/main/redirects/gitlab.py deleted file mode 100644 index 4b2b60b4..00000000 --- a/pysite/views/main/redirects/gitlab.py +++ /dev/null @@ -1,8 +0,0 @@ -from pysite.base_route import RedirectView - - -class GitLabView(RedirectView): - path = "/gitlab" - name = "gitlab" - page = "https://gitlab.com/python-discord/" - code = 302 diff --git a/pysite/views/main/redirects/invite.py b/pysite/views/main/redirects/invite.py deleted file mode 100644 index 72e0d144..00000000 --- a/pysite/views/main/redirects/invite.py +++ /dev/null @@ -1,8 +0,0 @@ -from pysite.base_route import RedirectView - - -class InviteView(RedirectView): - path = "/invite" - name = "invite" - page = "https://discord.gg/8NWhsvT" - code = 302 diff --git a/pysite/views/main/redirects/stats.py b/pysite/views/main/redirects/stats.py deleted file mode 100644 index 57a56b3d..00000000 --- a/pysite/views/main/redirects/stats.py +++ /dev/null @@ -1,8 +0,0 @@ -from pysite.base_route import RedirectView - - -class StatsView(RedirectView): - path = "/stats" - name = "stats" - page = "https://p.datadoghq.com/sb/ac8680a8c-c01b556f01b96622fd4f57545b81d568" - code = 302 diff --git a/pysite/views/main/robots_txt.py b/pysite/views/main/robots_txt.py deleted file mode 100644 index 308fe2a2..00000000 --- a/pysite/views/main/robots_txt.py +++ /dev/null @@ -1,15 +0,0 @@ -from flask import Response, url_for - -from pysite.base_route import RouteView - - -class RobotsTXT(RouteView): - path = "/robots.txt" - name = "robots_txt" - - def get(self): - return Response( - self.render( - "robots.txt", sitemap_url=url_for("api.sitemap_xml", _external=True) - ), content_type="text/plain" - ) diff --git a/pysite/views/main/sitemap_xml.py b/pysite/views/main/sitemap_xml.py deleted file mode 100644 index 98893c21..00000000 --- a/pysite/views/main/sitemap_xml.py +++ /dev/null @@ -1,69 +0,0 @@ -from flask import Response, url_for - -from pysite.base_route import RouteView - - -class SitemapXML(RouteView): - path = "/sitemap.xml" - name = "sitemap_xml" - - def get(self): - urls = [ - { - "type": "url", - "url": url_for("main.index", _external=True), - "priority": 1.0, # Max priority - - "images": [ - { - "caption": "Python Discord Logo", - "url": url_for("static", filename="logos/logo_discord.png", _external=True) - }, - { - "caption": "Python Discord Banner", - "url": url_for("static", filename="logos/logo_banner.png", _external=True) - } - ] - }, - - { - "type": "url", - "url": url_for("main.jams.index", _external=True), - "priority": 0.9 # Above normal priority - }, - - { - "type": "url", - "url": url_for("main.about.privacy", _external=True), - "priority": 0.8 # Above normal priority - }, - { - "type": "url", - "url": url_for("main.about.rules", _external=True), - "priority": 0.8 # Above normal priority - }, - - { - "type": "url", - "url": url_for("main.info.help", _external=True), - "priority": 0.7 # Above normal priority - }, - { - "type": "url", - "url": url_for("main.info.faq", _external=True), - "priority": 0.7 # Above normal priority - }, - { - "type": "url", - "url": url_for("main.info.resources", _external=True), - "priority": 0.7 # Above normal priority - }, - - { - "type": "url", - "url": url_for("main.about.partners", _external=True), - "priority": 0.6 # Normal priority - }, - ] - - return Response(self.render("sitemap.xml", urls=urls), content_type="application/xml") diff --git a/pysite/views/main/ws_test.py b/pysite/views/main/ws_test.py deleted file mode 100644 index a0b6215f..00000000 --- a/pysite/views/main/ws_test.py +++ /dev/null @@ -1,14 +0,0 @@ -import os - -from pysite.base_route import RouteView - - -class WSTest(RouteView): - path = "/ws_test" - name = "ws_test" - - def get(self): - return self.render( - "main/ws_test.html", - server_name=os.environ.get("SERVER_NAME", "localhost") - ) diff --git a/pysite/views/main/ws_test_rst.py b/pysite/views/main/ws_test_rst.py deleted file mode 100644 index e80acc55..00000000 --- a/pysite/views/main/ws_test_rst.py +++ /dev/null @@ -1,14 +0,0 @@ -import os - -from pysite.base_route import RouteView - - -class WSTest(RouteView): - path = "/ws_test_rst" - name = "ws_test_rst" - - def get(self): - return self.render( - "main/ws_test_rst.html", - server_name=os.environ.get("SERVER_NAME", "localhost") - ) diff --git a/pysite/views/staff/__init__.py b/pysite/views/staff/__init__.py deleted file mode 100644 index e69de29b..00000000 --- a/pysite/views/staff/__init__.py +++ /dev/null diff --git a/pysite/views/staff/index.py b/pysite/views/staff/index.py deleted file mode 100644 index a090ebdd..00000000 --- a/pysite/views/staff/index.py +++ /dev/null @@ -1,31 +0,0 @@ -from pprint import pformat - -from flask import current_app - -from pysite.base_route import RouteView -from pysite.constants import ALL_STAFF_ROLES, DEBUG_MODE, TABLE_MANAGER_ROLES -from pysite.decorators import require_roles - - -class StaffView(RouteView): - path = "/" - name = "index" - - @require_roles(*ALL_STAFF_ROLES) - def get(self): - return self.render( - "staff/index.html", manager=self.is_table_editor(), - app_config=pformat(current_app.config, indent=4, width=120) - ) - - def is_table_editor(self): - if DEBUG_MODE: - return True - - data = self.user_data - - for role in TABLE_MANAGER_ROLES: - if role in data.get("roles", []): - return True - - return False diff --git a/pysite/views/staff/jams/__init__.py b/pysite/views/staff/jams/__init__.py deleted file mode 100644 index e69de29b..00000000 --- a/pysite/views/staff/jams/__init__.py +++ /dev/null diff --git a/pysite/views/staff/jams/actions.py b/pysite/views/staff/jams/actions.py deleted file mode 100644 index dfcbf2de..00000000 --- a/pysite/views/staff/jams/actions.py +++ /dev/null @@ -1,597 +0,0 @@ -from flask import jsonify, request -from rethinkdb import ReqlNonExistenceError - -from pysite.base_route import APIView -from pysite.constants import ALL_STAFF_ROLES, BotEventTypes, CHANNEL_JAM_LOGS, ErrorCodes, JAMMERS_ROLE -from pysite.decorators import csrf, require_roles -from pysite.mixins import DBMixin, RMQMixin -from pysite.utils.words import get_word_pairs - -GET_ACTIONS = ("questions",) -POST_ACTIONS = ( - "associate_question", "disassociate_question", "infraction", "questions", "state", "approve_application", - "unapprove_application", "create_team", "generate_teams", "set_team_member", - "reroll_team", "set_winning_team", "unset_winning_team" -) -DELETE_ACTIONS = ("infraction", "question", "team") - -KEYS = ("action",) -QUESTION_KEYS = ("optional", "title", "type") - - -class ActionView(APIView, DBMixin, RMQMixin): - path = "/jams/action" - name = "jams.action" - - table_name = "code_jams" - forms_table = "code_jam_forms" - infractions_table = "code_jam_infractions" - questions_table = "code_jam_questions" - responses_table = "code_jam_responses" - teams_table = "code_jam_teams" - users_table = "users" - - @csrf - @require_roles(*ALL_STAFF_ROLES) - def get(self): - action = request.args.get("action") - - if action not in GET_ACTIONS: - return self.error(ErrorCodes.incorrect_parameters) - - if action == "questions": - questions = self.db.get_all(self.questions_table) - - return jsonify({"questions": questions}) - - @csrf - @require_roles(*ALL_STAFF_ROLES) - def post(self): - if request.is_json: - data = request.get_json(force=True) - action = data["action"] if "action" in data else None - else: - action = request.form.get("action") - - if action not in POST_ACTIONS: - return self.error(ErrorCodes.incorrect_parameters) - - if action == "associate_question": - form = int(request.form.get("form")) - question = request.form.get("question") - - form_obj = self.db.get(self.forms_table, form) - - if not form_obj: - return self.error(ErrorCodes.incorrect_parameters, f"Unknown form: {form}") - - question_obj = self.db.get(self.questions_table, question) - - if not question_obj: - return self.error(ErrorCodes.incorrect_parameters, f"Unknown question: {question}") - - if question_obj["id"] not in form_obj["questions"]: - form_obj["questions"].append(question_obj["id"]) - self.db.insert(self.forms_table, form_obj, conflict="replace") - - return jsonify({"question": question_obj}) - else: - return self.error( - ErrorCodes.incorrect_parameters, - f"Question {question} already associated with form {form}" - ) - - if action == "disassociate_question": - form = int(request.form.get("form")) - question = request.form.get("question") - - form_obj = self.db.get(self.forms_table, form) - - if not form_obj: - return self.error(ErrorCodes.incorrect_parameters, f"Unknown form: {form}") - - question_obj = self.db.get(self.questions_table, question) - - if not question_obj: - return self.error(ErrorCodes.incorrect_parameters, f"Unknown question: {question}") - - if question_obj["id"] in form_obj["questions"]: - form_obj["questions"].remove(question_obj["id"]) - self.db.insert(self.forms_table, form_obj, conflict="replace") - - return jsonify({"question": question_obj}) - else: - return self.error( - ErrorCodes.incorrect_parameters, - f"Question {question} not already associated with form {form}" - ) - - if action == "state": - jam = int(request.form.get("jam")) - state = request.form.get("state") - - if not all((jam, state)): - return self.error(ErrorCodes.incorrect_parameters) - - jam_obj = self.db.get(self.table_name, jam) - jam_obj["state"] = state - self.db.insert(self.table_name, jam_obj, conflict="update") - - return jsonify({}) - - if action == "questions": - data = request.get_json(force=True) - - for key in QUESTION_KEYS: - if key not in data: - return self.error(ErrorCodes.incorrect_parameters, f"Missing key: {key}") - - title = data["title"] - optional = data["optional"] - question_type = data["type"] - question_data = data.get("data", {}) - - if question_type in ["number", "range", "slider"]: - if "max" not in question_data or "min" not in question_data: - return self.error( - ErrorCodes.incorrect_parameters, f"{question_type} questions must have both max and min values" - ) - - result = self.db.insert( - self.questions_table, - { - "title": title, - "optional": optional, - "type": question_type, - "data": { - "max": question_data["max"], - "min": question_data["min"] - } - }, - conflict="error" - ) - elif question_type == "radio": - if "options" not in question_data: - return self.error( - ErrorCodes.incorrect_parameters, f"{question_type} questions must have both options" - ) - - result = self.db.insert( - self.questions_table, - { - "title": title, - "optional": optional, - "type": question_type, - "data": { - "options": question_data["options"] - } - }, - conflict="error" - ) - else: - result = self.db.insert( - self.questions_table, - { # No extra data for other types of question - "title": title, - "optional": optional, - "type": question_type - }, - conflict="error" - ) - - return jsonify({"id": result["generated_keys"][0]}) - - if action == "infraction": - participant = request.form.get("participant") - reason = request.form.get("reason") - - if not participant or not reason or "number" not in request.form: - return self.error( - ErrorCodes.incorrect_parameters, "Infractions must have a participant, reason and number" - ) - - number = int(request.form.get("number")) - - result = self.db.insert(self.infractions_table, { - "participant": participant, - "reason": reason, - "number": number, - "decremented_for": [] - }) - - return jsonify({"id": result["generated_keys"][0]}) - - if action == "create_team": - jam = request.form.get("jam", type=int) - - if not jam: - return self.error( - ErrorCodes.incorrect_parameters, "Jam number required" - ) - - jam_data = self.db.get(self.table_name, jam) - - if not jam_data: - return self.error( - ErrorCodes.incorrect_parameters, "Unknown jam number" - ) - - word_pairs = get_word_pairs() - adjective, noun = list(word_pairs)[0] - - team = { - "name": f"{adjective} {noun}".title(), - "members": [], - "jam": jam - } - - result = self.db.insert(self.teams_table, team) - team["id"] = result["generated_keys"][0] - - jam_obj = self.db.get(self.table_name, jam) - jam_obj["teams"].append(team["id"]) - - self.db.insert(self.table_name, jam_obj, conflict="replace") - - return jsonify({"team": team}) - - if action == "generate_teams": - jam = request.form.get("jam", type=int) - - if not jam: - return self.error( - ErrorCodes.incorrect_parameters, "Jam number required" - ) - - try: - query = self.db.query(self.table_name).get(jam).merge( - lambda jam_obj: { - "participants": - self.db.query(self.responses_table) - .filter({"jam": jam_obj["number"], "approved": True}) - .eq_join("snowflake", self.db.query(self.users_table)) - .without({"left": ["snowflake", "answers"]}) - .zip() - .order_by("username") - .coerce_to("array"), - "teams": - self.db.query(self.teams_table) - .outer_join(self.db.query(self.table_name), - lambda team_row, jams_row: jams_row["teams"].contains(team_row["id"])) - .pluck({"left": ["id", "name", "members"]}) - .zip() - .coerce_to("array") - } - ) - - jam_data = self.db.run(query) - except ReqlNonExistenceError: - return self.error( - ErrorCodes.incorrect_parameters, "Unknown jam number" - ) - - if jam_data["teams"]: - return self.error( - ErrorCodes.incorrect_parameters, "Jam already has teams" - ) - - num_participants = len(jam_data["participants"]) - num_teams = num_participants // 3 - - if num_participants % 3: - num_teams += 1 - - word_pairs = get_word_pairs(num_teams) - teams = [] - - for adjective, noun in word_pairs: - team = { - "name": f"{adjective} {noun}".title(), - "members": [] - } - - result = self.db.insert(self.teams_table, team, durability="soft") - team["id"] = result["generated_keys"][0] - teams.append(team) - - self.db.sync(self.teams_table) - - jam_obj = self.db.get(self.table_name, jam) - jam_obj["teams"] = [team["id"] for team in teams] - - self.db.insert(self.table_name, jam_obj, conflict="replace") - - return jsonify({"teams": teams}) - - if action == "set_team_member": - jam = request.form.get("jam", type=int) - member = request.form.get("member") - team = request.form.get("team") - - if not jam: - return self.error( - ErrorCodes.incorrect_parameters, "Jam number required" - ) - - if not member: - return self.error( - ErrorCodes.incorrect_parameters, "Member ID required" - ) - - if not team: - return self.error( - ErrorCodes.incorrect_parameters, "Team ID required" - ) - - try: - query = self.db.query(self.table_name).get(jam).merge( - lambda jam_obj: { - "participants": - self.db.query(self.responses_table) - .filter({"jam": jam_obj["number"], "approved": True}) - .eq_join("snowflake", self.db.query(self.users_table)) - .without({"left": ["snowflake", "answers"]}) - .zip() - .order_by("username") - .coerce_to("array"), - "teams": - self.db.query(self.teams_table) - .filter(lambda team_row: jam_obj["teams"].contains(team_row["id"])) - .pluck(["id", "name", "members", "jam"]) - .coerce_to("array") - } - ) - - jam_data = self.db.run(query) - except ReqlNonExistenceError: - return self.error( - ErrorCodes.incorrect_parameters, "Unknown jam number" - ) - - if not jam_data["teams"]: - return self.error( - ErrorCodes.incorrect_parameters, "Jam has no teams" - ) - - team_obj = self.db.get(self.teams_table, team) - - if not team_obj: - return self.error( - ErrorCodes.incorrect_parameters, "Unknown team ID" - ) - - for jam_team_obj in jam_data["teams"]: - if jam_team_obj["id"] == team: - if member not in jam_team_obj["members"]: - jam_team_obj["members"].append(member) - - self.db.insert(self.teams_table, jam_team_obj, conflict="replace") - else: - if member in jam_team_obj["members"]: - jam_team_obj["members"].remove(member) - - self.db.insert(self.teams_table, jam_team_obj, conflict="replace") - - return jsonify({"result": True}) - - if action == "reroll_team": - team = request.form.get("team") - - if not team: - return self.error( - ErrorCodes.incorrect_parameters, "Team ID required" - ) - - team_obj = self.db.get(self.teams_table, team) - - if not team_obj: - return self.error( - ErrorCodes.incorrect_parameters, "Unknown team ID" - ) - - word_pairs = get_word_pairs() - adjective, noun = list(word_pairs)[0] - - team_obj["name"] = f"{adjective} {noun}".title() - - self.db.insert(self.teams_table, team_obj, conflict="replace") - - return jsonify({"name": team_obj["name"]}) - - if action == "set_winning_team": - team = request.form.get("team") - - if not team: - return self.error( - ErrorCodes.incorrect_parameters, "Team ID required" - ) - - team_obj = self.db.get(self.teams_table, team) - - if not team_obj: - return self.error( - ErrorCodes.incorrect_parameters, "Unknown team ID" - ) - - jam_number = team_obj["jam"] - jam_obj = self.db.get(self.table_name, jam_number) - jam_obj["winning_team"] = team - self.db.insert(self.table_name, jam_obj, conflict="replace") - - return jsonify({"result": "success"}) - - if action == "unset_winning_team": - jam = request.form.get("jam", type=int) - - if not jam: - return self.error( - ErrorCodes.incorrect_parameters, "Jam number required" - ) - - jam_obj = self.db.get(self.table_name, jam) - if not jam_obj: - return self.error( - ErrorCodes.incorrect_parameters, "Unknown jam number" - ) - - jam_obj["winning_team"] = None - self.db.insert(self.table_name, jam_obj, conflict="replace") - - return jsonify({"result": "success"}) - - if action == "approve_application": - app = request.form.get("id") - - if not app: - return self.error( - ErrorCodes.incorrect_parameters, "Application ID required" - ) - - app_obj = self.db.get(self.responses_table, app) - - if not app_obj: - return self.error( - ErrorCodes.incorrect_parameters, "Unknown application ID" - ) - - app_obj["approved"] = True - - self.db.insert(self.responses_table, app_obj, conflict="replace") - - jam_obj = self.db.get(self.table_name, app_obj["jam"]) - - snowflake = app_obj["snowflake"] - participants = jam_obj.get("participants", []) - - if snowflake not in participants: - participants.append(snowflake) - jam_obj["participants"] = participants - self.db.insert(self.table_name, jam_obj, conflict="replace") - - self.rmq_bot_event( - BotEventTypes.add_role, - { - "reason": "Code jam application approved", - "role_id": JAMMERS_ROLE, - "target": snowflake, - } - ) - - self.rmq_bot_event( - BotEventTypes.send_message, - { - "message": f"Congratulations <@{snowflake}> - you've been approved, " - f"and we've assigned you the Jammer role!", - "target": CHANNEL_JAM_LOGS, - } - ) - - return jsonify({"result": "success"}) - - if action == "unapprove_application": - app = request.form.get("id") - - if not app: - return self.error( - ErrorCodes.incorrect_parameters, "Application ID required" - ) - - app_obj = self.db.get(self.responses_table, app) - - if not app_obj: - return self.error( - ErrorCodes.incorrect_parameters, "Unknown application ID" - ) - - app_obj["approved"] = False - - self.db.insert(self.responses_table, app_obj, conflict="replace") - - jam_obj = self.db.get(self.table_name, app_obj["jam"]) - - snowflake = app_obj["snowflake"] - participants = jam_obj.get("participants", []) - - if snowflake in participants: - participants.remove(snowflake) - jam_obj["participants"] = participants - - self.db.insert(self.table_name, jam_obj, conflict="replace") - - self.rmq_bot_event( - BotEventTypes.remove_role, - { - "reason": "Code jam application unapproved", - "role_id": JAMMERS_ROLE, - "target": snowflake, - } - ) - - return jsonify({"result": "success"}) - - @csrf - @require_roles(*ALL_STAFF_ROLES) - def delete(self): - action = request.form.get("action") - - if action not in DELETE_ACTIONS: - return self.error(ErrorCodes.incorrect_parameters) - - if action == "question": - question = request.form.get("id") - - if not question: - return self.error(ErrorCodes.incorrect_parameters, f"Missing key: id") - - question_obj = self.db.get(self.questions_table, question) - - if not question_obj: - return self.error(ErrorCodes.incorrect_parameters, f"Unknown question: {question}") - - self.db.delete(self.questions_table, question) - - for form_obj in self.db.get_all(self.forms_table): - if question in form_obj["questions"]: - form_obj["questions"].remove(question) - self.db.insert(self.forms_table, form_obj, conflict="replace") - - return jsonify({"id": question}) - - if action == "infraction": - infraction = request.form.get("id") - - if not infraction: - return self.error(ErrorCodes.incorrect_parameters, "Missing key id") - - infraction_obj = self.db.get(self.infractions_table, infraction) - - if not infraction_obj: - return self.error(ErrorCodes.incorrect_parameters, f"Unknown infraction: {infraction}") - - self.db.delete(self.infractions_table, infraction) - - return jsonify({"id": infraction_obj["id"]}) - - if action == "team": - team = request.form.get("team") - - if not team: - return self.error( - ErrorCodes.incorrect_parameters, "Team ID required" - ) - - team_obj = self.db.get(self.teams_table, team) - - if not team_obj: - return self.error( - ErrorCodes.incorrect_parameters, "Unknown team ID" - ) - - jam_obj = self.db.get(self.table_name, team_obj["jam"]) - if jam_obj: - jam_obj["teams"].remove(team) - self.db.insert(self.table_name, jam_obj, conflict="update") - - self.db.delete(self.teams_table, team) - - return jsonify({"result": True}) diff --git a/pysite/views/staff/jams/create.py b/pysite/views/staff/jams/create.py deleted file mode 100644 index ef61cbef..00000000 --- a/pysite/views/staff/jams/create.py +++ /dev/null @@ -1,61 +0,0 @@ -import datetime - -from flask import redirect, request, url_for -from werkzeug.exceptions import BadRequest - -from pysite.base_route import RouteView -from pysite.constants import ALL_STAFF_ROLES -from pysite.decorators import csrf, require_roles -from pysite.mixins import DBMixin - -REQUIRED_KEYS = ["title", "date_start", "date_end"] - - -class StaffView(RouteView, DBMixin): - path = "/jams/create" - name = "jams.create" - table_name = "code_jams" - - @require_roles(*ALL_STAFF_ROLES) - def get(self): - number = self.get_next_number() - return self.render("staff/jams/create.html", number=number) - - @require_roles(*ALL_STAFF_ROLES) - @csrf - def post(self): - data = {} - - for key in REQUIRED_KEYS: - arg = request.form.get(key) - - if not arg: - return BadRequest() - - data[key] = arg - - data["state"] = "planning" - data["number"] = self.get_next_number() - - # Convert given datetime strings into actual objects, adding timezones to keep rethinkdb happy - date_start = datetime.datetime.strptime(data["date_start"], "%Y-%m-%d %H:%M") - date_start = date_start.replace(tzinfo=datetime.timezone.utc) - - date_end = datetime.datetime.strptime(data["date_end"], "%Y-%m-%d %H:%M") - date_end = date_end.replace(tzinfo=datetime.timezone.utc) - - data["date_start"] = date_start - data["date_end"] = date_end - - self.db.insert(self.table_name, data) - - return redirect(url_for("staff.jams.index")) - - def get_next_number(self) -> int: - count = self.db.run(self.table.count(), coerce=int) - - if count: - max_num = self.db.run(self.table.max("number"))["number"] - - return max_num + 1 - return 1 diff --git a/pysite/views/staff/jams/edit_basics.py b/pysite/views/staff/jams/edit_basics.py deleted file mode 100644 index 462cba14..00000000 --- a/pysite/views/staff/jams/edit_basics.py +++ /dev/null @@ -1,55 +0,0 @@ -import datetime - -from flask import redirect, request, url_for -from werkzeug.exceptions import BadRequest, NotFound - -from pysite.base_route import RouteView -from pysite.constants import ALL_STAFF_ROLES -from pysite.decorators import csrf, require_roles -from pysite.mixins import DBMixin - -REQUIRED_KEYS = ["title", "date_start", "date_end"] - - -class StaffView(RouteView, DBMixin): - path = "/jams/<int:jam>/edit/basics" - name = "jams.edit.basics" - table_name = "code_jams" - - @require_roles(*ALL_STAFF_ROLES) - def get(self, jam): - jam_obj = self.db.get(self.table_name, jam) - - if not jam_obj: - return NotFound() - return self.render("staff/jams/edit_basics.html", jam=jam_obj) - - @require_roles(*ALL_STAFF_ROLES) - @csrf - def post(self, jam): - jam_obj = self.db.get(self.table_name, jam) - - if not jam_obj: - return NotFound() - - for key in REQUIRED_KEYS: - arg = request.form.get(key) - - if not arg: - return BadRequest() - - jam_obj[key] = arg - - # Convert given datetime strings into actual objects, adding timezones to keep rethinkdb happy - date_start = datetime.datetime.strptime(jam_obj["date_start"], "%Y-%m-%d %H:%M") - date_start = date_start.replace(tzinfo=datetime.timezone.utc) - - date_end = datetime.datetime.strptime(jam_obj["date_end"], "%Y-%m-%d %H:%M") - date_end = date_end.replace(tzinfo=datetime.timezone.utc) - - jam_obj["date_start"] = date_start - jam_obj["date_end"] = date_end - - self.db.insert(self.table_name, jam_obj, conflict="replace") - - return redirect(url_for("staff.jams.index")) diff --git a/pysite/views/staff/jams/edit_ending.py b/pysite/views/staff/jams/edit_ending.py deleted file mode 100644 index 43a36ebc..00000000 --- a/pysite/views/staff/jams/edit_ending.py +++ /dev/null @@ -1,54 +0,0 @@ -from flask import redirect, request, url_for -from werkzeug.exceptions import BadRequest, NotFound - -from pysite.base_route import RouteView -from pysite.constants import ALL_STAFF_ROLES -from pysite.decorators import csrf, require_roles -from pysite.mixins import DBMixin -from pysite.rst import render - -REQUIRED_KEYS = ["end_rst"] -ALLOWED_STATES = ["judging", "finished"] - - -class StaffView(RouteView, DBMixin): - path = "/jams/<int:jam>/edit/ending" - name = "jams.edit.ending" - table_name = "code_jams" - - @require_roles(*ALL_STAFF_ROLES) - def get(self, jam): - jam_obj = self.db.get(self.table_name, jam) - - if not jam_obj: - return NotFound() - - if not jam_obj["state"] in ALLOWED_STATES: - return BadRequest() - - return self.render("staff/jams/edit_ending.html", jam=jam_obj) - - @require_roles(*ALL_STAFF_ROLES) - @csrf - def post(self, jam): - jam_obj = self.db.get(self.table_name, jam) - - if not jam_obj: - return NotFound() - - if not jam_obj["state"] in ALLOWED_STATES: - return BadRequest() - - for key in REQUIRED_KEYS: - arg = request.form.get(key) - - if not arg: - return BadRequest() - - jam_obj[key] = arg - - jam_obj["end_html"] = render(jam_obj["end_rst"], link_headers=False)["html"] - - self.db.insert(self.table_name, jam_obj, conflict="replace") - - return redirect(url_for("staff.jams.index")) diff --git a/pysite/views/staff/jams/edit_info.py b/pysite/views/staff/jams/edit_info.py deleted file mode 100644 index 4944ae67..00000000 --- a/pysite/views/staff/jams/edit_info.py +++ /dev/null @@ -1,55 +0,0 @@ -from flask import redirect, request, url_for -from werkzeug.exceptions import BadRequest, NotFound - -from pysite.base_route import RouteView -from pysite.constants import ALL_STAFF_ROLES -from pysite.decorators import csrf, require_roles -from pysite.mixins import DBMixin -from pysite.rst import render - -REQUIRED_KEYS = ["info_rst", "repo", "task_rst", "theme"] -ALLOWED_STATES = ["planning", "announced", "preparing", "finished"] - - -class StaffView(RouteView, DBMixin): - path = "/jams/<int:jam>/edit/info" - name = "jams.edit.info" - table_name = "code_jams" - - @require_roles(*ALL_STAFF_ROLES) - def get(self, jam): - jam_obj = self.db.get(self.table_name, jam) - - if not jam_obj: - return NotFound() - - if not jam_obj["state"] in ALLOWED_STATES: - return BadRequest() - - return self.render("staff/jams/edit_info.html", jam=jam_obj) - - @require_roles(*ALL_STAFF_ROLES) - @csrf - def post(self, jam): - jam_obj = self.db.get(self.table_name, jam) - - if not jam_obj: - return NotFound() - - if not jam_obj["state"] in ALLOWED_STATES: - return BadRequest() - - for key in REQUIRED_KEYS: - arg = request.form.get(key) - - if not arg: - return BadRequest() - - jam_obj[key] = arg - - jam_obj["task_html"] = render(jam_obj["task_rst"], link_headers=False)["html"] - jam_obj["info_html"] = render(jam_obj["info_rst"], link_headers=False)["html"] - - self.db.insert(self.table_name, jam_obj, conflict="replace") - - return redirect(url_for("staff.jams.index")) diff --git a/pysite/views/staff/jams/forms/__init__.py b/pysite/views/staff/jams/forms/__init__.py deleted file mode 100644 index e69de29b..00000000 --- a/pysite/views/staff/jams/forms/__init__.py +++ /dev/null diff --git a/pysite/views/staff/jams/forms/preamble_edit.py b/pysite/views/staff/jams/forms/preamble_edit.py deleted file mode 100644 index 59b4678b..00000000 --- a/pysite/views/staff/jams/forms/preamble_edit.py +++ /dev/null @@ -1,45 +0,0 @@ -from flask import redirect, request, url_for -from werkzeug.exceptions import NotFound - -from pysite.base_route import RouteView -from pysite.constants import ALL_STAFF_ROLES -from pysite.decorators import csrf, require_roles -from pysite.mixins import DBMixin -from pysite.rst import render - - -class StaffView(RouteView, DBMixin): - path = "/jams/form/<int:jam>/preamble" - name = "jams.forms.preamble.edit" - - table_name = "code_jam_forms" - jams_table = "code_jams" - - @require_roles(*ALL_STAFF_ROLES) - def get(self, jam): - jam_obj = self.db.get(self.jams_table, jam) - - if not jam_obj: - return NotFound() - - form_obj = self.db.get(self.table_name, jam) - return self.render("staff/jams/forms/preamble_edit.html", jam=jam_obj, form=form_obj) - - @require_roles(*ALL_STAFF_ROLES) - @csrf - def post(self, jam): - jam_obj = self.db.get(self.table_name, jam) - - if not jam_obj: - return NotFound() - - form_obj = self.db.get(self.table_name, jam) - - preamble_rst = request.form.get("preamble_rst") - - form_obj["preamble_rst"] = preamble_rst - form_obj["preamble_html"] = render(preamble_rst, link_headers=False)["html"] - - self.db.insert(self.table_name, form_obj, conflict="replace") - - return redirect(url_for("staff.jams.forms.view", jam=jam)) diff --git a/pysite/views/staff/jams/forms/questions_edit.py b/pysite/views/staff/jams/forms/questions_edit.py deleted file mode 100644 index d46c4ef3..00000000 --- a/pysite/views/staff/jams/forms/questions_edit.py +++ /dev/null @@ -1,75 +0,0 @@ -import json - -from flask import redirect, request, url_for -from werkzeug.exceptions import BadRequest, NotFound - -from pysite.base_route import RouteView -from pysite.constants import ALL_STAFF_ROLES -from pysite.decorators import csrf, require_roles -from pysite.mixins import DBMixin - -REQUIRED_KEYS = ["title", "date_start", "date_end"] - - -class StaffView(RouteView, DBMixin): - path = "/jams/forms/questions/<question>" - name = "jams.forms.questions.edit" - - questions_table = "code_jam_questions" - - @require_roles(*ALL_STAFF_ROLES) - def get(self, question): - question_obj = self.db.get(self.questions_table, question) - - if not question_obj: - return NotFound() - - question_obj["data"] = question_obj.get("data", {}) - - return self.render( - "staff/jams/forms/questions_edit.html", question=question_obj - ) - - @require_roles(*ALL_STAFF_ROLES) - @csrf - def post(self, question): - question_obj = self.db.get(self.questions_table, question) - - if not question_obj: - return NotFound() - - title = request.form.get("title") - optional = request.form.get("optional") - question_type = request.form.get("type") - - if not title or not optional or not question_type: - return BadRequest() - - question_obj["title"] = title - question_obj["optional"] = optional == "optional" - question_obj["type"] = question_type - - if question_type == "radio": - options = request.form.get("options") - - if not options: - return BadRequest() - - options = json.loads(options)["options"] # No choice this time - question_obj["data"] = {"options": options} - - elif question_type in ("number", "range", "slider"): - question_min = request.form.get("min") - question_max = request.form.get("max") - - if question_min is None or question_max is None: - return BadRequest() - - question_obj["data"] = { - "min": question_min, - "max": question_max - } - - self.db.insert(self.questions_table, question_obj, conflict="replace") - - return redirect(url_for("staff.jams.forms.questions")) diff --git a/pysite/views/staff/jams/forms/questions_view.py b/pysite/views/staff/jams/forms/questions_view.py deleted file mode 100644 index 50ad009e..00000000 --- a/pysite/views/staff/jams/forms/questions_view.py +++ /dev/null @@ -1,22 +0,0 @@ -from pysite.base_route import RouteView -from pysite.constants import ALL_STAFF_ROLES -from pysite.decorators import require_roles -from pysite.mixins import DBMixin - -REQUIRED_KEYS = ["title", "date_start", "date_end"] - - -class StaffView(RouteView, DBMixin): - path = "/jams/forms/questions" - name = "jams.forms.questions" - - questions_table = "code_jam_questions" - - @require_roles(*ALL_STAFF_ROLES) - def get(self): - questions = self.db.get_all(self.questions_table) - - return self.render( - "staff/jams/forms/questions_view.html", questions=questions, - question_ids=[q["id"] for q in questions] - ) diff --git a/pysite/views/staff/jams/forms/view.py b/pysite/views/staff/jams/forms/view.py deleted file mode 100644 index 8d4e16ad..00000000 --- a/pysite/views/staff/jams/forms/view.py +++ /dev/null @@ -1,46 +0,0 @@ -from werkzeug.exceptions import NotFound - -from pysite.base_route import RouteView -from pysite.constants import ALL_STAFF_ROLES -from pysite.decorators import require_roles -from pysite.mixins import DBMixin - -REQUIRED_KEYS = ["title", "date_start", "date_end"] - - -class StaffView(RouteView, DBMixin): - path = "/jams/forms/<int:jam>" - name = "jams.forms.view" - - table_name = "code_jams" - forms_table = "code_jam_forms" - questions_table = "code_jam_questions" - - @require_roles(*ALL_STAFF_ROLES) - def get(self, jam): - jam_obj = self.db.get(self.table_name, jam) - - if not jam_obj: - return NotFound() - - form_obj = self.db.get(self.forms_table, jam) - - if not form_obj: - form_obj = { - "number": jam, - "questions": [], - "preamble_rst": "", - "preamble_html": "" - } - - self.db.insert(self.forms_table, form_obj) - - if form_obj["questions"]: - questions = self.db.get_all(self.questions_table, *[q for q in form_obj["questions"]]) - else: - questions = [] - - return self.render( - "staff/jams/forms/view.html", jam=jam_obj, form=form_obj, - questions=questions, question_ids=[q["id"] for q in questions] - ) diff --git a/pysite/views/staff/jams/index.py b/pysite/views/staff/jams/index.py deleted file mode 100644 index 40a8387c..00000000 --- a/pysite/views/staff/jams/index.py +++ /dev/null @@ -1,15 +0,0 @@ -from pysite.base_route import RouteView -from pysite.constants import ALL_STAFF_ROLES, JAM_STATES -from pysite.decorators import require_roles -from pysite.mixins import DBMixin - - -class StaffView(RouteView, DBMixin): - path = "/jams" - name = "jams.index" - table_name = "code_jams" - - @require_roles(*ALL_STAFF_ROLES) - def get(self): - jams = self.db.get_all(self.table_name) - return self.render("staff/jams/index.html", jams=jams, states=JAM_STATES) diff --git a/pysite/views/staff/jams/infractions/__init__.py b/pysite/views/staff/jams/infractions/__init__.py deleted file mode 100644 index e69de29b..00000000 --- a/pysite/views/staff/jams/infractions/__init__.py +++ /dev/null diff --git a/pysite/views/staff/jams/infractions/view.py b/pysite/views/staff/jams/infractions/view.py deleted file mode 100644 index 235f99ac..00000000 --- a/pysite/views/staff/jams/infractions/view.py +++ /dev/null @@ -1,29 +0,0 @@ -from pysite.base_route import RouteView -from pysite.constants import ALL_STAFF_ROLES -from pysite.decorators import require_roles -from pysite.mixins import DBMixin - -REQUIRED_KEYS = ["title", "date_start", "date_end"] - - -class StaffView(RouteView, DBMixin): - path = "/jams/infractions" - name = "jams.infractions" - - table_name = "code_jam_infractions" - users_table = "users" - - @require_roles(*ALL_STAFF_ROLES) - def get(self): - infractions = self.db.get_all(self.table_name) - - for document in infractions: - user_obj = self.db.get(self.users_table, document["participant"]) - - if user_obj: - document["participant"] = user_obj - - return self.render( - "staff/jams/infractions/view.html", infractions=infractions, - infraction_ids=[i["id"] for i in infractions] - ) diff --git a/pysite/views/staff/jams/participants.py b/pysite/views/staff/jams/participants.py deleted file mode 100644 index 52f9bdec..00000000 --- a/pysite/views/staff/jams/participants.py +++ /dev/null @@ -1,56 +0,0 @@ -import logging - -from rethinkdb import ReqlNonExistenceError -from werkzeug.exceptions import NotFound - -from pysite.base_route import RouteView -from pysite.constants import ALL_STAFF_ROLES -from pysite.decorators import require_roles -from pysite.mixins import DBMixin - -REQUIRED_KEYS = ["title", "date_start", "date_end"] -log = logging.getLogger(__name__) - - -class StaffView(RouteView, DBMixin): - path = "/jams/participants/<int:jam>" - name = "jams.participants" - - forms_table = "code_jam_forms" - participants_table = "code_jam_participants" - questions_table = "code_jam_questions" - responses_table = "code_jam_responses" - table_name = "code_jams" - users_table = "users" - - @require_roles(*ALL_STAFF_ROLES) - def get(self, jam: int): - try: - query = self.db.query(self.table_name).get(jam).merge( - lambda jam_obj: { - "participants": - self.db.query(self.responses_table) - .filter({"jam": jam_obj["number"]}) - .eq_join("snowflake", self.db.query(self.users_table)) - .without({"left": "snowflake"}) - .zip() - .coerce_to("array") - } - ) - - jam_data = self.db.run(query) - except ReqlNonExistenceError: - log.exception("Failed RethinkDB query") - raise NotFound() - - form_obj = self.db.get(self.forms_table, jam) - questions = {} - - if form_obj: - for question in form_obj["questions"]: - questions[question] = self.db.get(self.questions_table, question) - - return self.render( - "staff/jams/participants.html", - jam=jam_data, form=form_obj, questions=questions - ) diff --git a/pysite/views/staff/jams/teams/__init__.py b/pysite/views/staff/jams/teams/__init__.py deleted file mode 100644 index e69de29b..00000000 --- a/pysite/views/staff/jams/teams/__init__.py +++ /dev/null diff --git a/pysite/views/staff/jams/teams/view.py b/pysite/views/staff/jams/teams/view.py deleted file mode 100644 index 662cc084..00000000 --- a/pysite/views/staff/jams/teams/view.py +++ /dev/null @@ -1,102 +0,0 @@ -import logging - -from rethinkdb import ReqlNonExistenceError -from werkzeug.exceptions import NotFound - -from pysite.base_route import RouteView -from pysite.constants import ALL_STAFF_ROLES -from pysite.decorators import require_roles -from pysite.mixins import DBMixin - -REQUIRED_KEYS = ("title", "date_start", "date_end") -log = logging.getLogger(__name__) - - -class StaffView(RouteView, DBMixin): - path = "/jams/teams/<int:jam>" - name = "jams.teams" - - table_name = "code_jam_teams" - - forms_table = "code_jam_forms" - jams_table = "code_jams" - participants_table = "code_jam_participants" - questions_table = "code_jam_questions" - responses_table = "code_jam_responses" - users_table = "users" - - @require_roles(*ALL_STAFF_ROLES) - def get(self, jam: int): - try: - query = self.db.query(self.jams_table).get(jam).merge( - # Merge the jam document with a custom document defined below - lambda jam_obj: { # The lambda lets us manipulate the jam document server-side - "participants": - # Query the responses table - self.db.query(self.responses_table) - # Filter: approved responses for this jam only # noqa: E131 - .filter({"jam": jam_obj["number"], "approved": True}) - # Join each response document with documents from the user table that match the user that - # created this response - this is the efficient way to do things, inner/outer joins - # are slower as they only support explicit predicates - .eq_join("snowflake", self.db.query(self.users_table)) - # Remove the user ID from the left side (the response document) - .without({"left": ["snowflake"]}) - .zip() # Combine the left and right documents together - .order_by("username") # Reorder the documents by username - .coerce_to("array"), # Coerce the document stream into an array - "profiles": - # Query the responses table (again) - # We do this because RethinkDB just returns empty lists if you join on another join - self.db.query(self.responses_table) - # Filter: approved responses for this jam only # noqa: E131 - .filter({"jam": jam_obj["number"], "approved": True}) - # Join each response document with documents from the participant profiles table - # this time - .eq_join("snowflake", self.db.query(self.participants_table)) - # Remove the user ID and answers from the left side (the response document) - .without({"left": ["snowflake", "answers"]}) - .zip() # Combine the left and right documents together - .order_by("username") # Reorder the documents by username - .coerce_to("array"), # Coerce the document stream into an array - "form": self.db.query(self.forms_table).get(jam), # Just get the correct form object - "teams": - self.db.query(self.table_name) - .filter(lambda team_row: jam_obj["teams"].contains(team_row["id"])) - .pluck(["id", "name", "members"]) - .coerce_to("array") - } - ) - - jam_data = self.db.run(query) - except ReqlNonExistenceError: - log.exception("Failed RethinkDB query") - raise NotFound() - - questions = {} - - for question in jam_data["form"]["questions"]: - questions[question] = self.db.get(self.questions_table, question) - - teams = {} - participants = {} - assigned = [] - - for team in jam_data["teams"]: - teams[team["id"]] = team - - for member in team["members"]: - assigned.append(member) - - for user in jam_data["participants"]: - participants[user["user_id"]] = user - - for profile in jam_data["profiles"]: - participants[profile["id"]]["profile"] = profile - - return self.render( - "staff/jams/teams/view.html", - jam=jam_data, teams=teams, - participants=participants, assigned=assigned, - questions=questions - ) diff --git a/pysite/views/staff/render.py b/pysite/views/staff/render.py deleted file mode 100644 index 0152e568..00000000 --- a/pysite/views/staff/render.py +++ /dev/null @@ -1,62 +0,0 @@ -import re - -from docutils.utils import SystemMessage -from flask import jsonify -from schema import Schema - -from pysite.base_route import APIView -from pysite.constants import EDITOR_ROLES, ValidationTypes -from pysite.decorators import api_params, csrf, require_roles -from pysite.rst import render - -SCHEMA = Schema([{ - "data": str -}]) - -MESSAGE_REGEX = re.compile(r"<string>:(\d+): \([A-Z]+/\d\) (.*)") - - -class RenderView(APIView): - path = "/render" # "path" means that it accepts slashes - name = "render" - - @csrf - @require_roles(*EDITOR_ROLES) - @api_params(schema=SCHEMA, validation_type=ValidationTypes.json) - def post(self, data): - if not len(data): - return jsonify({"error": "No data!"}) - - data = data[0]["data"] - try: - html = render(data, link_headers=False)["html"] - - return jsonify({"data": html}) - except SystemMessage as e: - lines = str(e) - data = { - "error": lines, - "error_lines": [] - } - - if "\n" in lines: - lines = lines.split("\n") - else: - lines = [lines] - - for message in lines: - match = MESSAGE_REGEX.match(message) - - if match: - data["error_lines"].append( - { - "row": int(match.group(1)) - 3, - "column": 0, - "type": "error", - "text": match.group(2) - } - ) - - return jsonify(data) - except Exception as e: - return jsonify({"error": str(e)}) diff --git a/pysite/views/staff/robots_txt.py b/pysite/views/staff/robots_txt.py deleted file mode 100644 index 308fe2a2..00000000 --- a/pysite/views/staff/robots_txt.py +++ /dev/null @@ -1,15 +0,0 @@ -from flask import Response, url_for - -from pysite.base_route import RouteView - - -class RobotsTXT(RouteView): - path = "/robots.txt" - name = "robots_txt" - - def get(self): - return Response( - self.render( - "robots.txt", sitemap_url=url_for("api.sitemap_xml", _external=True) - ), content_type="text/plain" - ) diff --git a/pysite/views/staff/sitemap_xml.py b/pysite/views/staff/sitemap_xml.py deleted file mode 100644 index 26a786b0..00000000 --- a/pysite/views/staff/sitemap_xml.py +++ /dev/null @@ -1,11 +0,0 @@ -from flask import Response - -from pysite.base_route import RouteView - - -class SitemapXML(RouteView): - path = "/sitemap.xml" - name = "sitemap_xml" - - def get(self): - return Response(self.render("sitemap.xml", urls=[]), content_type="application/xml") diff --git a/pysite/views/staff/tables/__init__.py b/pysite/views/staff/tables/__init__.py deleted file mode 100644 index e69de29b..00000000 --- a/pysite/views/staff/tables/__init__.py +++ /dev/null diff --git a/pysite/views/staff/tables/edit.py b/pysite/views/staff/tables/edit.py deleted file mode 100644 index 7de63ad2..00000000 --- a/pysite/views/staff/tables/edit.py +++ /dev/null @@ -1,110 +0,0 @@ -import json - -from flask import redirect, request, url_for -from werkzeug.exceptions import BadRequest, NotFound - -from pysite.base_route import RouteView -from pysite.constants import TABLE_MANAGER_ROLES -from pysite.decorators import csrf, require_roles -from pysite.mixins import DBMixin -from pysite.tables import TABLES - - -class TableEditView(RouteView, DBMixin): - path = "/tables/<table>/edit" - name = "tables.edit" - - @require_roles(*TABLE_MANAGER_ROLES) - def get(self, table): - obj = TABLES.get(table) - - if not obj: - # Unknown table - raise NotFound() - - if obj.locked: - return redirect(url_for("staff.tables.table", table=table, page=1), code=303) - - key = request.args.get("key") - - old_primary = None - - if key: - db_obj = self.db.get(table, key) - old_primary = key # Provide the current document's primary key, in case it's modified - - document = json.dumps( # Editor uses JSON - db_obj, - indent=4 - ) - else: - document = json.dumps( # Generate default document from key schema - {k: "" for k in obj.keys}, - indent=4 - ) - - return self.render( - "staff/tables/edit.html", table=table, primary_key=obj.primary_key, - document=document, old_primary=old_primary - ) - - @require_roles(*TABLE_MANAGER_ROLES) - @csrf - def post(self, table): - obj = TABLES.get(table) - - if not obj: - # Unknown table - raise NotFound() - - if obj.locked: - raise BadRequest() - - data = request.form.get("json") - old_primary = request.form.get("old_primary") - - if not data: - # No data given (for some reason) - document = json.dumps( - {k: "" for k in obj.keys}, - indent=4 - ) - - return self.render( - "staff/tables/edit.html", table=table, primary_key=obj.primary_key, document=document, - message="Please provide some data to save", old_primary=old_primary - ) - - try: - data = json.loads(data) - except json.JSONDecodeError as e: - # Invalid JSON - return self.render( - "staff/tables/edit.html", table=table, primary_key=obj.primary_key, document=data, - message=f"Invalid JSON, please try again: {e}", old_primary=old_primary - ) - - if not data[obj.primary_key]: - # No primary key value provided - return self.render( - "staff/tables/edit.html", table=table, primary_key=obj.primary_key, document=data, - message=f"Please provide a value for the primary key: {obj.primary_key}", old_primary=old_primary - ) - - if old_primary is None: - self.db.insert( # This is a new object, so just insert it - table, data - ) - elif old_primary == data[obj.primary_key]: - self.db.insert( # This is an update without a primary key change, replace the whole document - table, data, conflict="replace" - ) - else: - self.db.delete( # This is a primary key change, so we need to remove the old object - table, old_primary - ) - self.db.insert( - table, data, - ) - - return redirect(url_for("staff.tables.table", table=table, page=1), code=303) diff --git a/pysite/views/staff/tables/index.py b/pysite/views/staff/tables/index.py deleted file mode 100644 index 0d84aeb4..00000000 --- a/pysite/views/staff/tables/index.py +++ /dev/null @@ -1,13 +0,0 @@ -from pysite.base_route import RouteView -from pysite.constants import TABLE_MANAGER_ROLES -from pysite.decorators import require_roles -from pysite.tables import TABLES - - -class TablesView(RouteView): - path = "/tables" - name = "tables.index" - - @require_roles(*TABLE_MANAGER_ROLES) - def get(self): - return self.render("staff/tables/index.html", tables=TABLES) diff --git a/pysite/views/staff/tables/table.py b/pysite/views/staff/tables/table.py deleted file mode 100644 index f47d7793..00000000 --- a/pysite/views/staff/tables/table.py +++ /dev/null @@ -1,63 +0,0 @@ -from math import ceil - -from flask import request -from werkzeug.exceptions import BadRequest, NotFound - -from pysite.base_route import RouteView -from pysite.constants import TABLE_MANAGER_ROLES -from pysite.decorators import require_roles -from pysite.mixins import DBMixin -from pysite.tables import TABLES - - -class TableView(RouteView, DBMixin): - path = "/tables/<table>/<page>" - name = "tables.table" - - @require_roles(*TABLE_MANAGER_ROLES) - def get(self, table, page): - search = request.args.get("search") - search_key = request.args.get("search-key") - - pages = page - obj = TABLES.get(table) - - if not obj: - return NotFound() - - if search: - new_search = f"(?i){search}" # Case-insensitive search - search_key = search_key or obj.primary_key - - query = self.db.query(table).filter(lambda d: d[search_key].match(new_search)) - else: - query = self.db.query(table) - - if page != "all": - try: - page = int(page) - except ValueError: - # Not an integer - return BadRequest() - - count = self.db.run(query.count(), coerce=int) - pages = max(ceil(count / 10), 1) # Pages if we have 10 documents per page, always at least one - - if page < 1 or page > pages: - # If the page is too small or too big, well, that's an error - return BadRequest() - - documents = self.db.run( # Get only the documents for this page - query.skip((page - 1) * 10).limit(10), - coerce=list - ) - else: - documents = self.db.run(query, coerce=list) - - documents = [dict(sorted(d.items())) for d in documents] - - return self.render( - "staff/tables/table.html", - table=table, documents=documents, table_obj=obj, - page=page, pages=pages, search=search, search_key=search_key - ) diff --git a/pysite/views/staff/tables/table_bare.py b/pysite/views/staff/tables/table_bare.py deleted file mode 100644 index abd6cb19..00000000 --- a/pysite/views/staff/tables/table_bare.py +++ /dev/null @@ -1,30 +0,0 @@ -from flask import redirect, request, url_for -from werkzeug.exceptions import NotFound - -from pysite.base_route import RouteView -from pysite.constants import TABLE_MANAGER_ROLES -from pysite.decorators import require_roles -from pysite.mixins import DBMixin -from pysite.tables import TABLES - - -class TableView(RouteView, DBMixin): - path = "/tables/<table>" - name = "tables.table_bare" - - @require_roles(*TABLE_MANAGER_ROLES) - def get(self, table): - if table not in TABLES: - raise NotFound() - - search = request.args.get("search") - - args = { - "table": table, - "page": 1 - } - - if search is not None: - args["search"] = search - - return redirect(url_for("staff.tables.table", **args)) diff --git a/pysite/views/tests/__init__.py b/pysite/views/tests/__init__.py deleted file mode 100644 index adfc1286..00000000 --- a/pysite/views/tests/__init__.py +++ /dev/null @@ -1 +0,0 @@ -# .gitkeep diff --git a/pysite/views/tests/index.py b/pysite/views/tests/index.py deleted file mode 100644 index f99e3f3c..00000000 --- a/pysite/views/tests/index.py +++ /dev/null @@ -1,23 +0,0 @@ -from flask import jsonify -from schema import Schema - -from pysite.base_route import APIView -from pysite.constants import ValidationTypes -from pysite.decorators import api_params - -LIST_SCHEMA = Schema([{"test": str}]) -DICT_SCHEMA = Schema({"segfault": str}) - - -class TestParamsView(APIView): - path = "/testparams" - name = "testparams" - - @api_params(schema=DICT_SCHEMA, validation_type=ValidationTypes.params) - def get(self, data): - return jsonify(data) - - @api_params(schema=LIST_SCHEMA, validation_type=ValidationTypes.params) - def post(self, data): - jsonified = jsonify(data) - return jsonified diff --git a/pysite/views/wiki/__init__.py b/pysite/views/wiki/__init__.py deleted file mode 100644 index e69de29b..00000000 --- a/pysite/views/wiki/__init__.py +++ /dev/null diff --git a/pysite/views/wiki/delete.py b/pysite/views/wiki/delete.py deleted file mode 100644 index 728570a9..00000000 --- a/pysite/views/wiki/delete.py +++ /dev/null @@ -1,64 +0,0 @@ -import datetime - -from flask import redirect, url_for -from werkzeug.exceptions import NotFound - -from pysite.base_route import RouteView -from pysite.constants import BotEventTypes, CHANNEL_MOD_LOG, EDITOR_ROLES -from pysite.decorators import csrf, require_roles -from pysite.mixins import DBMixin, RMQMixin - - -class DeleteView(RouteView, DBMixin, RMQMixin): - path = "/delete/<path:page>" # "path" means that it accepts slashes - name = "delete" - table_name = "wiki" - revision_table_name = "wiki_revisions" - - @require_roles(*EDITOR_ROLES) - def get(self, page): - obj = self.db.get(self.table_name, page) - - if obj: - title = obj.get("title", "") - - if obj.get("lock_expiry") and obj.get("lock_user") != self.user_data.get("user_id"): - lock_time = datetime.datetime.fromtimestamp(obj["lock_expiry"]) - if datetime.datetime.utcnow() < lock_time: - return self.render("wiki/page_in_use.html", page=page) - - return self.render("wiki/page_delete.html", page=page, title=title, can_edit=True) - else: - raise NotFound() - - @require_roles(*EDITOR_ROLES) - @csrf - def post(self, page): - obj = self.db.get(self.table_name, page) - - if not obj: - raise NotFound() - - self.db.delete(self.table_name, page) - self.db.delete(self.revision_table_name, page) - - revisions = self.db.filter(self.revision_table_name, lambda revision: revision["slug"] == page) - - for revision in revisions: - self.db.delete(self.revision_table_name, revision["id"]) - - self.audit_log(obj) - - return redirect(url_for("wiki.page", page="home"), code=303) # Redirect, ensuring a GET - - def audit_log(self, obj): - self.rmq_bot_event( - BotEventTypes.send_embed, - { - "target": CHANNEL_MOD_LOG, - "title": f"Page Deletion", - "description": f"**{obj['title']}** was deleted by **{self.user_data.get('username')}**", - "colour": 0x3F8DD7, # Light blue - "timestamp": datetime.datetime.now().isoformat() - } - ) diff --git a/pysite/views/wiki/edit.py b/pysite/views/wiki/edit.py deleted file mode 100644 index 949c9942..00000000 --- a/pysite/views/wiki/edit.py +++ /dev/null @@ -1,149 +0,0 @@ -import datetime -import html -import re - -from flask import redirect, request, url_for -from werkzeug.exceptions import BadRequest - -from pysite.base_route import RouteView -from pysite.constants import BotEventTypes, CHANNEL_MOD_LOG, DEBUG_MODE, EDITOR_ROLES -from pysite.decorators import csrf, require_roles -from pysite.mixins import DBMixin, RMQMixin -from pysite.rst import render - -STRIP_REGEX = re.compile(r"<[^<]+?>") - - -class EditView(RouteView, DBMixin, RMQMixin): - path = "/edit/<path:page>" # "path" means that it accepts slashes - name = "edit" - table_name = "wiki" - revision_table_name = "wiki_revisions" - - @require_roles(*EDITOR_ROLES) - def get(self, page): - rst = "" - title = "" - preview = "<p>Preview will appear here.</p>" - - obj = self.db.get(self.table_name, page) - - if obj: - rst = obj.get("rst", "") - title = obj.get("title", "") - preview = obj.get("html", preview) - - if obj.get("lock_expiry") and obj.get("lock_user") != self.user_data.get("user_id"): - lock_time = datetime.datetime.fromtimestamp(obj["lock_expiry"]) - if datetime.datetime.utcnow() < lock_time: - return self.render("wiki/page_in_use.html", page=page, can_edit=True) - - lock_expiry = datetime.datetime.utcnow() + datetime.timedelta(minutes=5) - - # There are a couple of cases where we will not need to lock a page. One of these is if the application is - # current set to debug mode. The other of these cases is if the page is empty, because if the page is empty - # we will only have a partially filled out page if the user quits before saving. - if obj: - if not DEBUG_MODE and obj.get("rst"): - self.db.insert( - self.table_name, - { - "slug": page, - "lock_expiry": lock_expiry.timestamp(), - "lock_user": self.user_data.get("user_id") - }, - conflict="update" - ) - - return self.render("wiki/page_edit.html", page=page, rst=rst, title=title, preview=preview, can_edit=True) - - @require_roles(*EDITOR_ROLES) - @csrf - def post(self, page): - rst = request.form.get("rst") - title = request.form["title"] - - if not rst or not rst.strip(): - raise BadRequest() - - if not title or not title.strip(): - raise BadRequest() - - rendered = render(rst) - - obj = { - "slug": page, - "title": request.form["title"], - "rst": rst, - "html": rendered["html"], - "text": html.unescape(STRIP_REGEX.sub("", rendered["html"]).strip()), - "headers": rendered["headers"] - } - - self.db.insert( - self.table_name, - obj, - conflict="replace" - ) - - if not DEBUG_MODE: - # Add the post to the revisions table - revision_payload = { - "slug": page, - "post": obj, - "date": datetime.datetime.utcnow().timestamp(), - "user": self.user_data.get("user_id") - } - - del revision_payload["post"]["slug"] - - current_revisions = self.db.filter(self.revision_table_name, lambda rev: rev["slug"] == page) - sorted_revisions = sorted(current_revisions, key=lambda rev: rev["date"], reverse=True) - - if len(sorted_revisions) > 0: - old_rev = sorted_revisions[0] - else: - old_rev = None - - new_rev = self.db.insert(self.revision_table_name, revision_payload)["generated_keys"][0] - - self.audit_log(page, new_rev, old_rev, obj) - - return redirect(url_for("wiki.page", page=page), code=303) # Redirect, ensuring a GET - - @require_roles(*EDITOR_ROLES) - @csrf - def patch(self, page): - current = self.db.get(self.table_name, page) - if not current: - return "", 404 - - if current.get("lock_expiry"): # If there is a lock present - - # If user patching is not the user with the lock end here - if current["lock_user"] != self.user_data.get("user_id"): - return "", 400 - new_lock = datetime.datetime.utcnow() + datetime.timedelta(minutes=5) # New lock time, 5 minutes in future - self.db.insert(self.table_name, { - "slug": page, - "lock_expiry": new_lock.timestamp() - }, conflict="update") # Update with new lock time - return "", 204 - - def audit_log(self, page, new_id, old_data, new_data): - if not old_data: - link = f"https://wiki.pythondiscord.com/source/{page}" - else: - link = f"https://wiki.pythondiscord.com/history/compare/{old_data['id']}/{new_id}" - - self.rmq_bot_event( - BotEventTypes.send_embed, - { - "target": CHANNEL_MOD_LOG, - "title": "Page Edit", - "description": f"**{new_data['title']}** edited by **{self.user_data.get('username')}**. " - f"[View the diff here]({link})", - "colour": 0x3F8DD7, # Light blue - "timestamp": datetime.datetime.now().isoformat() - } - ) diff --git a/pysite/views/wiki/history/compare.py b/pysite/views/wiki/history/compare.py deleted file mode 100644 index 6411ab30..00000000 --- a/pysite/views/wiki/history/compare.py +++ /dev/null @@ -1,70 +0,0 @@ -import difflib - -from pygments import highlight -from pygments.formatters import HtmlFormatter -from pygments.lexers import DiffLexer -from werkzeug.exceptions import BadRequest, NotFound - -from pysite.base_route import RouteView -from pysite.constants import DEBUG_MODE, EDITOR_ROLES -from pysite.mixins import DBMixin - - -class CompareView(RouteView, DBMixin): - path = "/history/compare/<string:first_rev>/<string:second_rev>" - name = "history.compare" - - table_name = "wiki_revisions" - table_primary_key = "id" - - def get(self, first_rev, second_rev): - before = self.db.get(self.table_name, first_rev) - after = self.db.get(self.table_name, second_rev) - - if not (before and after): - raise NotFound() - - if before["date"] > after["date"]: # Check whether the before was created after the after - raise BadRequest() - - if before["id"] == after["id"]: # The same revision has been requested - raise BadRequest() - - before_text = before["post"]["rst"] - after_text = after["post"]["rst"] - - if not before_text.endswith("\n"): - before_text += "\n" - - if not after_text.endswith("\n"): - after_text += "\n" - - before_text = before_text.splitlines(keepends=True) - after_text = after_text.splitlines(keepends=True) - - if not before["slug"] == after["slug"]: - raise BadRequest() # The revisions are not from the same post - - diff = difflib.unified_diff(before_text, after_text, fromfile=f"{first_rev}.rst", tofile=f"{second_rev}.rst") - diff = "".join(diff) - diff = highlight(diff, DiffLexer(), HtmlFormatter()) - return self.render("wiki/compare_revision.html", - title=after["post"]["title"], - page=before["slug"], - diff=diff, - slug=before["slug"], - can_edit=self.is_staff()) - - def is_staff(self): - if DEBUG_MODE: - return True - if not self.logged_in: - return False - - roles = self.user_data.get("roles", []) - - for role in roles: - if role in EDITOR_ROLES: - return True - - return False diff --git a/pysite/views/wiki/history/show.py b/pysite/views/wiki/history/show.py deleted file mode 100644 index 00a1dc27..00000000 --- a/pysite/views/wiki/history/show.py +++ /dev/null @@ -1,41 +0,0 @@ -import datetime - -from werkzeug.exceptions import NotFound - -from pysite.base_route import RouteView -from pysite.constants import DEBUG_MODE, EDITOR_ROLES -from pysite.mixins import DBMixin - - -class RevisionsListView(RouteView, DBMixin): - path = "/history/show/<path:page>" - name = "history.show" - - table_name = "wiki_revisions" - table_primary_key = "id" - - def get(self, page): - results = self.db.filter(self.table_name, lambda revision: revision["slug"] == page) - if len(results) == 0: - raise NotFound() - - for result in results: - ts = datetime.datetime.fromtimestamp(result["date"]) - result["pretty_time"] = ts.strftime("%d %b %Y") - - results = sorted(results, key=lambda revision: revision["date"], reverse=True) - return self.render("wiki/revision_list.html", page=page, revisions=results, can_edit=self.is_staff()), 200 - - def is_staff(self): - if DEBUG_MODE: - return True - if not self.logged_in: - return False - - roles = self.user_data.get("roles", []) - - for role in roles: - if role in EDITOR_ROLES: - return True - - return False diff --git a/pysite/views/wiki/index.py b/pysite/views/wiki/index.py deleted file mode 100644 index 53a4d269..00000000 --- a/pysite/views/wiki/index.py +++ /dev/null @@ -1,8 +0,0 @@ -from pysite.base_route import RedirectView - - -class WikiView(RedirectView): - path = "/" - name = "index" - page = "wiki.page" - kwargs = {"page": "home"} diff --git a/pysite/views/wiki/move.py b/pysite/views/wiki/move.py deleted file mode 100644 index 095a1fdb..00000000 --- a/pysite/views/wiki/move.py +++ /dev/null @@ -1,84 +0,0 @@ -import datetime - -from flask import redirect, request, url_for -from werkzeug.exceptions import BadRequest, NotFound - -from pysite.base_route import RouteView -from pysite.constants import BotEventTypes, CHANNEL_MOD_LOG, EDITOR_ROLES -from pysite.decorators import csrf, require_roles -from pysite.mixins import DBMixin, RMQMixin - - -class MoveView(RouteView, DBMixin, RMQMixin): - path = "/move/<path:page>" # "path" means that it accepts slashes - name = "move" - table_name = "wiki" - revision_table_name = "wiki_revisions" - - @require_roles(*EDITOR_ROLES) - def get(self, page): - obj = self.db.get(self.table_name, page) - - if obj: - title = obj.get("title", "") - - if obj.get("lock_expiry") and obj.get("lock_user") != self.user_data.get("user_id"): - lock_time = datetime.datetime.fromtimestamp(obj["lock_expiry"]) - if datetime.datetime.utcnow() < lock_time: - return self.render("wiki/page_in_use.html", page=page, can_edit=True) - - return self.render("wiki/page_move.html", page=page, title=title, can_edit=True) - else: - raise NotFound() - - @require_roles(*EDITOR_ROLES) - @csrf - def post(self, page): - location = request.form.get("location") - - if not location or not location.strip(): - raise BadRequest() - - obj = self.db.get(self.table_name, page) - - if not obj: - raise NotFound() - - title = obj.get("title", "") - other_obj = self.db.get(self.table_name, location) - - if other_obj: - return self.render( - "wiki/page_move.html", page=page, title=title, - message=f"There's already a page at {location} - please pick a different location" - ) - - self.db.delete(self.table_name, page) - - # Move all revisions for the old slug to the new slug. - revisions = self.db.filter(self.revision_table_name, lambda revision: revision["slug"] == obj["slug"]) - - for revision in revisions: - revision["slug"] = location - self.db.insert(self.revision_table_name, revision, conflict="update") - - obj["slug"] = location - - self.db.insert(self.table_name, obj, conflict="update") - - self.audit_log(obj) - - return redirect(url_for("wiki.page", page=location), code=303) # Redirect, ensuring a GET - - def audit_log(self, obj): - self.rmq_bot_event( - BotEventTypes.send_embed, - { - "target": CHANNEL_MOD_LOG, - "title": "Wiki Page Move", - "description": f"**{obj['title']}** was moved by **{self.user_data.get('username')}** to " - f"**{obj['slug']}**", - "colour": 0x3F8DD7, # Light blue - "timestamp": datetime.datetime.now().isoformat() - } - ) diff --git a/pysite/views/wiki/page.py b/pysite/views/wiki/page.py deleted file mode 100644 index 26edfcc4..00000000 --- a/pysite/views/wiki/page.py +++ /dev/null @@ -1,36 +0,0 @@ -from flask import redirect, url_for -from werkzeug.exceptions import NotFound - -from pysite.base_route import RouteView -from pysite.constants import DEBUG_MODE, EDITOR_ROLES -from pysite.mixins import DBMixin - - -class PageView(RouteView, DBMixin): - path = "/wiki/<path:page>" # "path" means that it accepts slashes - name = "page" - table_name = "wiki" - - def get(self, page): - obj = self.db.get(self.table_name, page) - - if obj is None: - if self.is_staff(): - return redirect(url_for("wiki.edit", page=page)) - - raise NotFound() - return self.render("wiki/page_view.html", page=page, data=obj, can_edit=self.is_staff()) - - def is_staff(self): - if DEBUG_MODE: - return True - if not self.logged_in: - return False - - roles = self.user_data.get("roles", []) - - for role in roles: - if role in EDITOR_ROLES: - return True - - return False diff --git a/pysite/views/wiki/render.py b/pysite/views/wiki/render.py deleted file mode 100644 index 39bdd133..00000000 --- a/pysite/views/wiki/render.py +++ /dev/null @@ -1,62 +0,0 @@ -import re - -from docutils.utils import SystemMessage -from flask import jsonify -from schema import Schema - -from pysite.base_route import APIView -from pysite.constants import EDITOR_ROLES, ValidationTypes -from pysite.decorators import api_params, csrf, require_roles -from pysite.rst import render - -SCHEMA = Schema([{ - "data": str -}]) - -MESSAGE_REGEX = re.compile(r"<string>:(\d+): \([A-Z]+/\d\) (.*)", flags=re.S) - - -class RenderView(APIView): - path = "/render" # "path" means that it accepts slashes - name = "render" - - @csrf - @require_roles(*EDITOR_ROLES) - @api_params(schema=SCHEMA, validation_type=ValidationTypes.json) - def post(self, data): - if not len(data): - return jsonify({"error": "No data!"}) - - data = data[0]["data"] - try: - html = render(data)["html"] - - return jsonify({"data": html}) - except SystemMessage as e: - lines = str(e) - data = { - "error": lines, - "error_lines": [] - } - - if "\n" in lines: - lines = lines.split("\n") - else: - lines = [lines] - - for message in lines: - match = MESSAGE_REGEX.match(message) - - if match: - data["error_lines"].append( - { - "row": int(match.group(1)) - 3, - "column": 0, - "type": "error", - "text": match.group(2) - } - ) - - return jsonify(data) - except Exception as e: - return jsonify({"error": str(e)}) diff --git a/pysite/views/wiki/robots_txt.py b/pysite/views/wiki/robots_txt.py deleted file mode 100644 index 308fe2a2..00000000 --- a/pysite/views/wiki/robots_txt.py +++ /dev/null @@ -1,15 +0,0 @@ -from flask import Response, url_for - -from pysite.base_route import RouteView - - -class RobotsTXT(RouteView): - path = "/robots.txt" - name = "robots_txt" - - def get(self): - return Response( - self.render( - "robots.txt", sitemap_url=url_for("api.sitemap_xml", _external=True) - ), content_type="text/plain" - ) diff --git a/pysite/views/wiki/search.py b/pysite/views/wiki/search.py deleted file mode 100644 index 369da943..00000000 --- a/pysite/views/wiki/search.py +++ /dev/null @@ -1,66 +0,0 @@ -import html -import re - -from flask import redirect, request, url_for -from werkzeug.exceptions import BadRequest - -from pysite.base_route import RouteView -from pysite.decorators import csrf -from pysite.mixins import DBMixin - -STRIP_REGEX = re.compile(r"<[^<]+?>") - - -class SearchView(RouteView, DBMixin): - path = "/search" # "path" means that it accepts slashes - name = "search" - table_name = "wiki" - revision_table_name = "wiki_revisions" - - def get(self): - return self.render("wiki/search.html") - - @csrf - def post(self): - given_query = request.form.get("query") - - if not given_query or not given_query.strip(): - raise BadRequest() - - query = f"({re.escape(given_query)})" - - pages = self.db.filter( - self.table_name, - lambda doc: doc["text"].match(f"(?i){query}") - ) - - if len(pages) == 1: - slug = pages[0]["slug"] - return redirect(url_for("wiki.page", page=slug), code=303) - - for obj in pages: - text = obj["text"] - - matches = re.finditer(query, text, flags=re.IGNORECASE) - snippets = [] - - for match in matches: - start = match.start() - 50 - - if start < 0: - start = 0 - - end = match.end() + 50 - - if end > len(text): - end = len(text) - - match_text = text[start:end] - match_text = re.sub(query, r"<strong>\1</strong>", html.escape(match_text), flags=re.IGNORECASE) - - snippets.append(match_text.replace("\n", "<br />")) - - obj["matches"] = snippets - - pages = sorted(pages, key=lambda d: d["title"]) - return self.render("wiki/search_results.html", pages=pages, query=given_query) diff --git a/pysite/views/wiki/sitemap_xml.py b/pysite/views/wiki/sitemap_xml.py deleted file mode 100644 index 9b7f0980..00000000 --- a/pysite/views/wiki/sitemap_xml.py +++ /dev/null @@ -1,22 +0,0 @@ -from flask import Response, url_for - -from pysite.base_route import RouteView -from pysite.mixins import DBMixin - - -class SitemapXML(RouteView, DBMixin): - path = "/sitemap.xml" - name = "sitemap_xml" - table_name = "wiki" - - def get(self): - urls = [] - - for page in self.db.get_all(self.table_name): - urls.append({ - "change_frequency": "weekly", - "type": "url", - "url": url_for("wiki.page", page=page["slug"], _external=True) - }) - - return Response(self.render("sitemap.xml", urls=urls), content_type="application/xml") diff --git a/pysite/views/wiki/source.py b/pysite/views/wiki/source.py deleted file mode 100644 index 83674447..00000000 --- a/pysite/views/wiki/source.py +++ /dev/null @@ -1,42 +0,0 @@ -from flask import redirect, url_for -from pygments import highlight -from pygments.formatters.html import HtmlFormatter -from pygments.lexers import get_lexer_by_name -from werkzeug.exceptions import NotFound - -from pysite.base_route import RouteView -from pysite.constants import DEBUG_MODE, EDITOR_ROLES -from pysite.mixins import DBMixin - - -class PageView(RouteView, DBMixin): - path = "/source/<path:page>" # "path" means that it accepts slashes - name = "source" - table_name = "wiki" - - def get(self, page): - obj = self.db.get(self.table_name, page) - - if obj is None: - if self.is_staff(): - return redirect(url_for("wiki.edit", page=page, can_edit=False)) - - raise NotFound() - - rst = obj["rst"] - rst = highlight(rst, get_lexer_by_name("rst"), HtmlFormatter(preclass="code", linenos="inline")) - return self.render("wiki/page_source.html", page=page, data=obj, rst=rst, can_edit=self.is_staff()) - - def is_staff(self): - if DEBUG_MODE: - return True - if not self.logged_in: - return False - - roles = self.user_data.get("roles", []) - - for role in roles: - if role in EDITOR_ROLES: - return True - - return False diff --git a/pysite/views/wiki/special/__init__.py b/pysite/views/wiki/special/__init__.py deleted file mode 100644 index e69de29b..00000000 --- a/pysite/views/wiki/special/__init__.py +++ /dev/null diff --git a/pysite/views/wiki/special/all_pages.py b/pysite/views/wiki/special/all_pages.py deleted file mode 100644 index d2e02a72..00000000 --- a/pysite/views/wiki/special/all_pages.py +++ /dev/null @@ -1,27 +0,0 @@ -from pysite.base_route import RouteView -from pysite.mixins import DBMixin - - -class PageView(RouteView, DBMixin): - path = "/special/all_pages" - name = "special.all_pages" - table_name = "wiki" - - def get(self): - pages = self.db.pluck(self.table_name, "title", "slug") - pages = sorted(pages, key=lambda d: d.get("title", "No Title")) - - letters = {} - - for page in pages: - if "title" not in page: - page["title"] = "No Title" - - letter = page["title"][0].upper() - - if letter not in letters: - letters[letter] = [] - - letters[letter].append(page) - - return self.render("wiki/special_all.html", letters=letters) diff --git a/pysite/views/wiki/special/index.py b/pysite/views/wiki/special/index.py deleted file mode 100644 index ccfc7a5a..00000000 --- a/pysite/views/wiki/special/index.py +++ /dev/null @@ -1,7 +0,0 @@ -from pysite.base_route import TemplateView - - -class PageView(TemplateView): - path = "/special" - name = "special" - template = "wiki/special.html" diff --git a/pysite/views/ws/__init__.py b/pysite/views/ws/__init__.py deleted file mode 100644 index e69de29b..00000000 --- a/pysite/views/ws/__init__.py +++ /dev/null diff --git a/pysite/views/ws/bot.py b/pysite/views/ws/bot.py deleted file mode 100644 index 816e7579..00000000 --- a/pysite/views/ws/bot.py +++ /dev/null @@ -1,56 +0,0 @@ -import json -import logging - -from geventwebsocket.websocket import WebSocket - -from pysite.constants import BOT_API_KEY -from pysite.mixins import DBMixin -from pysite.websockets import WS - - -class BotWebsocket(WS, DBMixin): - path = "/bot" - name = "ws.bot" - table_name = "bot_events" - - do_changefeed = True - - def __init__(self, socket: WebSocket): - super().__init__(socket) - self.log = logging.getLogger() - - def on_open(self): - self.log.debug("Bot | WS opened.") - - def on_message(self, message): - self.log.debug(f"Bot | Message: {message}") - - try: - message = json.loads(message) - except json.JSONDecodeError: - self.send_json({"error": "Message was not valid JSON"}) - return self.socket.close() - - action = message["action"] - - if action == "login": - if message["key"] != BOT_API_KEY: - return self.socket.close() - - self.do_changefeed = True - - for document in self.db.changes(self.table_name, include_initial=True, include_types=True): - if not self.do_changefeed: - break - - if document["type"] not in ["add", "initial"]: - continue - - self.send_json({"action": "event", "event": document["new_val"]}) - self.db.delete(self.table_name, document["id"]) - - self.send_json({"error": f"Unknown action: {action}"}) - - def on_close(self): - self.log.debug("Bot | WS closed.") - self.do_changefeed = False diff --git a/pysite/views/ws/echo.py b/pysite/views/ws/echo.py deleted file mode 100644 index b6f11168..00000000 --- a/pysite/views/ws/echo.py +++ /dev/null @@ -1,25 +0,0 @@ -import logging - -from geventwebsocket.websocket import WebSocket - -from pysite.websockets import WS - - -class EchoWebsocket(WS): - path = "/echo" - name = "ws.echo" - - def __init__(self, socket: WebSocket): - super().__init__(socket) - self.log = logging.getLogger() - - def on_open(self): - self.log.debug("Echo | WS opened.") - self.send("Hey, welcome!") - - def on_message(self, message): - self.log.debug(f"Echo | Message: {message}") - self.send(message) - - def on_close(self): - self.log.debug("Echo | WS closed.") diff --git a/pysite/views/ws/rst.py b/pysite/views/ws/rst.py deleted file mode 100644 index f2b2db24..00000000 --- a/pysite/views/ws/rst.py +++ /dev/null @@ -1,33 +0,0 @@ -import logging - -from geventwebsocket.websocket import WebSocket - -from pysite.rst import render -from pysite.websockets import WS - - -class RSTWebsocket(WS): - path = "/rst" - name = "ws.rst" - - def __init__(self, socket: WebSocket): - super().__init__(socket) - self.log = logging.getLogger() - - def on_open(self): - self.log.debug("RST | WS opened.") - self.send("Hey, welcome!") - - def on_message(self, message): - self.log.debug(f"RST | Message: {message}") - - try: - data = render(message)["html"] - except Exception as e: - self.log.exception("Parsing error") - data = str(e) - - self.send(data) - - def on_close(self): - self.log.debug("RST | WS closed.") diff --git a/pysite/websockets.py b/pysite/websockets.py deleted file mode 100644 index 213daace..00000000 --- a/pysite/websockets.py +++ /dev/null @@ -1,123 +0,0 @@ -import json - -from flask import Blueprint -from geventwebsocket.websocket import WebSocket - - -class WS: - """ - Base class for representing a Websocket. - - At minimum, you must implement the `on_message(self, message)` function. Without it, you won't be able to handle - any messages, and an error will be thrown! - - If you need access to the database, you can mix-in DBMixin, just like any view class: - - >>> class DBWebsocket(WS, DBMixin): - ... name = "db_websocket" - ... path = "/db_websocket" # This will be prefixed with "/ws" by the blueprint - ... table = "ws" - ... - ... def on_message(self, message): - ... self.send( - ... json.loads(self.db.get(self.table_name, message)) - ... ) - - Please note that an instance of this class is created for every websocket connected to the path. This does, however, - mean that you can store any state required by your websocket. - """ - - path = "" # type: str - name = "" # type: str - - _connections = None - - def __init__(self, socket: WebSocket): - self.socket = socket - - def __new__(cls, *args, **kwargs): - if cls._connections is None: - cls._connections = [] - - return super().__new__(cls) - - def on_open(self): - """ - Called once when the websocket is opened. Optional. - """ - - def on_message(self, message: str): - """ - Called when a message is received by the websocket. - """ - - raise NotImplementedError() - - def on_close(self): - """ - Called once when the websocket is closed. Optional. - """ - - def send(self, message, binary=None): - """ - Send a message to the currently-connected websocket, if it's open. - - Nothing will happen if the websocket is closed. - """ - - if not self.socket.closed: - self.socket.send(message, binary=binary) - - def send_json(self, data): - return self.send(json.dumps(data)) - - @classmethod - def send_all(cls, message, binary=None): - for connection in cls._connections: - connection.send(message, binary=binary) - - @classmethod - def send_all_json(cls, data): - for connection in cls._connections: - connection.send_json(data) - - @classmethod - def setup(cls: "type(WS)", manager: "pysite.route_manager.RouteManager", blueprint: Blueprint): - """ - Set up the websocket object, calling `setup()` on any superclasses as necessary (for example, on the DB - mixin). - - This function will set up a websocket handler so that it behaves in a class-oriented way. It's up to you to - deal with message handling yourself, however. - """ - - if hasattr(super(), "setup"): - super().setup(manager, blueprint) - - if not cls.path or not cls.name: - raise RuntimeError("Websockets must have both `path` and `name` defined") - - cls.manager = manager - - def handle(socket: WebSocket): - """ - Wrap the current WS class, dispatching events to it as necessary. We're using gevent, so there's - no need to worry about blocking here. - """ - - ws = cls(socket) # Instantiate the current class, passing it the WS object - cls._connections.append(ws) - try: - ws.on_open() # Call the "on_open" handler - - while not socket.closed: # As long as the socket is open... - message = socket.receive() # Wait for a message - - if not socket.closed: # If the socket didn't just close (there's always a None message on closing) - ws.on_message(message) # Call the "on_message" handler - - ws.on_close() # The socket just closed, call the "on_close" handler - finally: - cls._connections.remove(ws) - - blueprint.route(cls.path)(handle) # Register the handling function to the WS blueprint diff --git a/scripts/deploy-ci.sh b/scripts/deploy-ci.sh deleted file mode 100644 index 6a3d64bc..00000000 --- a/scripts/deploy-ci.sh +++ /dev/null @@ -1,23 +0,0 @@ -#!/bin/bash - -# Build and deploy on master branch -if [[ $CI_COMMIT_REF_SLUG == 'master' ]]; then - echo "Connecting to docker hub" - echo "$DOCKER_PASSWORD" | docker login -u "$DOCKER_USERNAME" --password-stdin - - changed_lines=$(git diff HEAD~1 HEAD docker/ci.Dockerfile | wc -l) - - if [ $changed_lines != '0' ]; then - echo "ci.Dockerfile was changed" - - echo "Building CI container" - docker build -t pythondiscord/site-ci:latest -f docker/ci.Dockerfile . - - echo "Pushing image to Docker Hub" - docker push pythondiscord/site-ci:latest - else - echo "ci.Dockerfile was not changed, not building" - fi -else - echo "Skipping CI Docker build" -fi diff --git a/scripts/deploy.sh b/scripts/deploy.sh deleted file mode 100644 index f4799749..00000000 --- a/scripts/deploy.sh +++ /dev/null @@ -1,33 +0,0 @@ -#!/bin/bash - -# Build and deploy on master branch -if [[ $CI_COMMIT_REF_SLUG == 'master' ]]; then - echo "Connecting to docker hub" - echo "$DOCKER_PASSWORD" | docker login -u "$DOCKER_USERNAME" --password-stdin - - changed_lines=$(git diff HEAD~1 HEAD docker/Dockerfile.base | wc -l) - - if [ $changed_lines != '0' ]; then - echo "Dockerfile.base was changed" - - echo "Building site base" - docker build -t pythondiscord/site-base:latest -f docker/Dockerfile.base . - - echo "Pushing image to Docker Hub" - docker push pythondiscord/site-base:latest - else - echo "Dockerfile.base was not changed, not building" - fi - - - echo "Building image" - docker build -t pythondiscord/site:latest -f docker/Dockerfile . - - echo "Pushing image" - docker push pythondiscord/site:latest - - echo "Deploying container" - curl -H "token: $AUTODEPLOY_TOKEN" $AUTODEPLOY_WEBHOOK -else - echo "Skipping deploy" -fi diff --git a/static/.gitkeep b/static/.gitkeep deleted file mode 100644 index e69de29b..00000000 --- a/static/.gitkeep +++ /dev/null diff --git a/static/css/bundled/pygments-monokai.css b/static/css/bundled/pygments-monokai.css deleted file mode 100644 index 756a5850..00000000 --- a/static/css/bundled/pygments-monokai.css +++ /dev/null @@ -1,143 +0,0 @@ -.code .hll { background-color: #49483e } -.code { background: #272822; color: #f8f8f2 } -.code .c { color: #75715e } /* Comment */ -.code .err { color: #960050; background-color: #1e0010 } /* Error */ -.code .k { color: #66d9ef } /* Keyword */ -.code .l { color: #ae81ff } /* Literal */ -.code .n { color: #f8f8f2 } /* Name */ -.code .o { color: #f92672 } /* Operator */ -.code .p { color: #f8f8f2 } /* Punctuation */ -.code .ch { color: #75715e } /* Comment.Hashbang */ -.code .cm { color: #75715e } /* Comment.Multiline */ -.code .cp { color: #75715e } /* Comment.Preproc */ -.code .cpf { color: #75715e } /* Comment.PreprocFile */ -.code .c1 { color: #75715e } /* Comment.Single */ -.code .cs { color: #75715e } /* Comment.Special */ -.code .gd { color: #f92672 } /* Generic.Deleted */ -.code .ge { font-style: italic } /* Generic.Emph */ -.code .gi { color: #a6e22e } /* Generic.Inserted */ -.code .gs { font-weight: bold } /* Generic.Strong */ -.code .gu { color: #75715e } /* Generic.Subheading */ -.code .kc { color: #66d9ef } /* Keyword.Constant */ -.code .kd { color: #66d9ef } /* Keyword.Declaration */ -.code .kn { color: #f92672 } /* Keyword.Namespace */ -.code .kp { color: #66d9ef } /* Keyword.Pseudo */ -.code .kr { color: #66d9ef } /* Keyword.Reserved */ -.code .kt { color: #66d9ef } /* Keyword.Type */ -.code .ld { color: #e6db74 } /* Literal.Date */ -.code .m { color: #ae81ff } /* Literal.Number */ -.code .s { color: #e6db74 } /* Literal.String */ -.code .na { color: #a6e22e } /* Name.Attribute */ -.code .nb { color: #f8f8f2 } /* Name.Builtin */ -.code .nc { color: #a6e22e } /* Name.Class */ -.code .no { color: #66d9ef } /* Name.Constant */ -.code .nd { color: #a6e22e } /* Name.Decorator */ -.code .ni { color: #f8f8f2 } /* Name.Entity */ -.code .ne { color: #a6e22e } /* Name.Exception */ -.code .nf { color: #a6e22e } /* Name.Function */ -.code .nl { color: #f8f8f2 } /* Name.Label */ -.code .nn { color: #f8f8f2 } /* Name.Namespace */ -.code .nx { color: #a6e22e } /* Name.Other */ -.code .py { color: #f8f8f2 } /* Name.Property */ -.code .nt { color: #f92672 } /* Name.Tag */ -.code .nv { color: #f8f8f2 } /* Name.Variable */ -.code .ow { color: #f92672 } /* Operator.Word */ -.code .w { color: #f8f8f2 } /* Text.Whitespace */ -.code .mb { color: #ae81ff } /* Literal.Number.Bin */ -.code .mf { color: #ae81ff } /* Literal.Number.Float */ -.code .mh { color: #ae81ff } /* Literal.Number.Hex */ -.code .mi { color: #ae81ff } /* Literal.Number.Integer */ -.code .mo { color: #ae81ff } /* Literal.Number.Oct */ -.code .sa { color: #e6db74 } /* Literal.String.Affix */ -.code .sb { color: #e6db74 } /* Literal.String.Backtick */ -.code .sc { color: #e6db74 } /* Literal.String.Char */ -.code .dl { color: #e6db74 } /* Literal.String.Delimiter */ -.code .sd { color: #e6db74 } /* Literal.String.Doc */ -.code .s2 { color: #e6db74 } /* Literal.String.Double */ -.code .se { color: #ae81ff } /* Literal.String.Escape */ -.code .sh { color: #e6db74 } /* Literal.String.Heredoc */ -.code .si { color: #e6db74 } /* Literal.String.Interpol */ -.code .sx { color: #e6db74 } /* Literal.String.Other */ -.code .sr { color: #e6db74 } /* Literal.String.Regex */ -.code .s1 { color: #e6db74 } /* Literal.String.Single */ -.code .ss { color: #e6db74 } /* Literal.String.Symbol */ -.code .bp { color: #f8f8f2 } /* Name.Builtin.Pseudo */ -.code .fm { color: #a6e22e } /* Name.Function.Magic */ -.code .vc { color: #f8f8f2 } /* Name.Variable.Class */ -.code .vg { color: #f8f8f2 } /* Name.Variable.Global */ -.code .vi { color: #f8f8f2 } /* Name.Variable.Instance */ -.code .vm { color: #f8f8f2 } /* Name.Variable.Magic */ -.code .il { color: #ae81ff } /* Literal.Number.Integer.Long */ - -/* Extra CSS for non-docutils output */ - -.highlight pre .hll { background-color: #49483e } -.highlight pre { background: #272822; color: #f8f8f2 } -.highlight pre .c { color: #75715e } /* Comment */ -.highlight pre .err { color: #960050; background-color: #1e0010 } /* Error */ -.highlight pre .k { color: #66d9ef } /* Keyword */ -.highlight pre .l { color: #ae81ff } /* Literal */ -.highlight pre .n { color: #f8f8f2 } /* Name */ -.highlight pre .o { color: #f92672 } /* Operator */ -.highlight pre .p { color: #f8f8f2 } /* Punctuation */ -.highlight pre .ch { color: #75715e } /* Comment.Hashbang */ -.highlight pre .cm { color: #75715e } /* Comment.Multiline */ -.highlight pre .cp { color: #75715e } /* Comment.Preproc */ -.highlight pre .cpf { color: #75715e } /* Comment.PreprocFile */ -.highlight pre .c1 { color: #75715e } /* Comment.Single */ -.highlight pre .cs { color: #75715e } /* Comment.Special */ -.highlight pre .gd { color: #f92672 } /* Generic.Deleted */ -.highlight pre .ge { font-style: italic } /* Generic.Emph */ -.highlight pre .gi { color: #a6e22e } /* Generic.Inserted */ -.highlight pre .gs { font-weight: bold } /* Generic.Strong */ -.highlight pre .gu { color: #75715e } /* Generic.Subheading */ -.highlight pre .kc { color: #66d9ef } /* Keyword.Constant */ -.highlight pre .kd { color: #66d9ef } /* Keyword.Declaration */ -.highlight pre .kn { color: #f92672 } /* Keyword.Namespace */ -.highlight pre .kp { color: #66d9ef } /* Keyword.Pseudo */ -.highlight pre .kr { color: #66d9ef } /* Keyword.Reserved */ -.highlight pre .kt { color: #66d9ef } /* Keyword.Type */ -.highlight pre .ld { color: #e6db74 } /* Literal.Date */ -.highlight pre .m { color: #ae81ff } /* Literal.Number */ -.highlight pre .s { color: #e6db74 } /* Literal.String */ -.highlight pre .na { color: #a6e22e } /* Name.Attribute */ -.highlight pre .nb { color: #f8f8f2 } /* Name.Builtin */ -.highlight pre .nc { color: #a6e22e } /* Name.Class */ -.highlight pre .no { color: #66d9ef } /* Name.Constant */ -.highlight pre .nd { color: #a6e22e } /* Name.Decorator */ -.highlight pre .ni { color: #f8f8f2 } /* Name.Entity */ -.highlight pre .ne { color: #a6e22e } /* Name.Exception */ -.highlight pre .nf { color: #a6e22e } /* Name.Function */ -.highlight pre .nl { color: #f8f8f2 } /* Name.Label */ -.highlight pre .nn { color: #f8f8f2 } /* Name.Namespace */ -.highlight pre .nx { color: #a6e22e } /* Name.Other */ -.highlight pre .py { color: #f8f8f2 } /* Name.Property */ -.highlight pre .nt { color: #f92672 } /* Name.Tag */ -.highlight pre .nv { color: #f8f8f2 } /* Name.Variable */ -.highlight pre .ow { color: #f92672 } /* Operator.Word */ -.highlight pre .w { color: #f8f8f2 } /* Text.Whitespace */ -.highlight pre .mb { color: #ae81ff } /* Literal.Number.Bin */ -.highlight pre .mf { color: #ae81ff } /* Literal.Number.Float */ -.highlight pre .mh { color: #ae81ff } /* Literal.Number.Hex */ -.highlight pre .mi { color: #ae81ff } /* Literal.Number.Integer */ -.highlight pre .mo { color: #ae81ff } /* Literal.Number.Oct */ -.highlight pre .sa { color: #e6db74 } /* Literal.String.Affix */ -.highlight pre .sb { color: #e6db74 } /* Literal.String.Backtick */ -.highlight pre .sc { color: #e6db74 } /* Literal.String.Char */ -.highlight pre .dl { color: #e6db74 } /* Literal.String.Delimiter */ -.highlight pre .sd { color: #e6db74 } /* Literal.String.Doc */ -.highlight pre .s2 { color: #e6db74 } /* Literal.String.Double */ -.highlight pre .se { color: #ae81ff } /* Literal.String.Escape */ -.highlight pre .sh { color: #e6db74 } /* Literal.String.Heredoc */ -.highlight pre .si { color: #e6db74 } /* Literal.String.Interpol */ -.highlight pre .sx { color: #e6db74 } /* Literal.String.Other */ -.highlight pre .sr { color: #e6db74 } /* Literal.String.Regex */ -.highlight pre .s1 { color: #e6db74 } /* Literal.String.Single */ -.highlight pre .ss { color: #e6db74 } /* Literal.String.Symbol */ -.highlight pre .bp { color: #f8f8f2 } /* Name.Builtin.Pseudo */ -.highlight pre .fm { color: #a6e22e } /* Name.Function.Magic */ -.highlight pre .vc { color: #f8f8f2 } /* Name.Variable.Class */ -.highlight pre .vg { color: #f8f8f2 } /* Name.Variable.Global */ -.highlight pre .vi { color: #f8f8f2 } /* Name.Variable.Instance */ -.highlight pre .vm { color: #f8f8f2 } /* Name.Variable.Magic */ -.highlight pre .il { color: #ae81ff } /* Literal.Number.Integer.Long */ diff --git a/static/css/style.css b/static/css/style.css deleted file mode 100644 index a2cfa897..00000000 --- a/static/css/style.css +++ /dev/null @@ -1,3 +0,0 @@ -@font-face{font-family:"Fira Code";src:url("https://unpkg.com/firacode/distr/eot/FiraCode-Regular.eot");src:url("https://unpkg.com/firacode/distr/eot/FiraCode-Regular.eot?#iefix") format("embedded-opentype"),url("https://unpkg.com/firacode/distr/woff2/FiraCode-Regular.woff2") format("woff2"),url("https://unpkg.com/firacode/distr/woff/FiraCode-Regular.woff") format("woff"),url("https://unpkg.com/firacode/distr/ttf/FiraCode-Regular.ttf") format("truetype")}.fira-code{font-family:'Fira Code', "monospace", Fallback}textarea.fira-code{line-height:1.3 !important}th p{margin:0}.uk-offcanvas-content{flex:1 0 auto}.uk-background-secondary .uk-navbar-dropdown-nav .uk-active a{color:#fff}.uk-background-secondary .uk-navbar-dropdown-nav .uk-nav-header{color:#666;font-size:120%;font-weight:bold;padding:0;text-transform:none}.uk-background-secondary .uk-navbar-dropdown-nav .uk-nav-header.uk-active{color:#fff}.uk-background-secondary .uk-navbar-dropdown-nav .uk-navbar-dropbar{background:#222}.uk-navbar-container,.uk-sticky-placeholder,.uk-navbar-nav>li>a,.uk-navbar-left>a{height:70px}.uk-navbar-dropdown{overflow-y:auto;top:45px !important}.uk-article-title{margin-bottom:0 !important}.uk-article-meta{margin-left:2px;margin-top:0 !important}.uk-section{padding-bottom:30px;padding-top:20px}.uk-heading-divider .uk-article-meta{margin-bottom:0}footer{flex-shrink:0}footer div.uk-section{padding:0}footer div.uk-section div.uk-text-center{margin-top:20px}.uk-button-dark{background:rgba(0,0,0,0.95);border:1px solid rgba(34,34,34,0.93);color:#fff}.uk-button-dark :hover{background:rgba(0,0,0,0.7)}.uk-button-darkish{background:rgba(0,0,0,0.11);border:1px solid rgba(34,34,34,0.09)}.uk-button-darkish :hover{background:rgba(0,0,0,0.22)}.uk-navbar-container{padding-left:40px;padding-right:40px}.uk-button-success{background-color:#32D296;border:1px solid transparent;color:#fff}.uk-button-success:hover,.uk-button-success:focus{background-color:#2ac088}.uk-button-success:active,.uk-button-success.uk-active{background-color:#26ab79}.uk-button-success:disabled{background-color:#fff !important;border:1px solid #E5E5E5;color:#999 !important}.uses-rst .document li p{margin-bottom:0}.uses-rst .document img{margin-bottom:20px}.uses-rst #editor{min-height:50vh;resize:vertical}.blueprint-error .window{-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:0 4px 12px 0 rgba(0,0,0,0.5);-moz-box-shadow:0 4px 12px 0 rgba(0,0,0,0.5);box-shadow:0 4px 12px 0 rgba(0,0,0,0.5);border:1px solid #C1C2C2;height:500px;margin:20px auto auto;width:100%}.blueprint-error .inside{background:#000;height:100%;padding-right:20px}.blueprint-error .block{background:#000;width:100%}.blueprint-error .top,.blueprint-error .panel{float:left}.blueprint-error .top{background:#F1F1F1;background:-webkit-linear-gradient(top, #E9E9E9 3%, #D8D8D8 100%);background:-moz-linear-gradient(top, #E9E9E9 3%, #D8D8D8 100%);background:-ms-linear-gradient(top, #E9E9E9 3%, #D8D8D8 100%);background:-o-linear-gradient(top, #E9E9E9 3%, #D8D8D8 100%);background:-webkit-gradient(linear, top, bottom, color-stop(3%, #E9E9E9), color-stop(100%, #D8D8D8));background:linear-gradient(to bottom, #E9E9E9 3%, #D8D8D8 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#F1F1F1', endColorstr='#D8D8D8', GradientType=0);-webkit-box-shadow:inset 0 1px 1px 0 rgba(255,255,255,0.76);-moz-box-shadow:inset 0 1px 1px 0 rgba(255,255,255,0.76);box-shadow:inset 0 1px 1px 0 rgba(255,255,255,0.76);border-bottom:2px solid #BDBCC1;overflow:hidden;padding:7px 0;position:relative;width:100%}.blueprint-error .panel{padding-left:9px;padding-top:2px}.blueprint-error #terminal-close,.blueprint-error #second-button,.blueprint-error #third-button{-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;cursor:pointer;display:inline-block;float:left;height:12px;margin-right:7px;width:12px}.blueprint-error #terminal-close{background:#FF5F4F}.blueprint-error #second-button{background:#F9C206}.blueprint-error #third-button{background:#19CC32}.blueprint-error #terminal{background-color:#000;color:#fff;height:100%;width:100%}.blueprint-error #terminal code{white-space:pre-wrap}.blueprint-error pre{border:0;border-radius:3px}.blueprint-error .uk-background-muted,.blueprint-error .error-header{background-color:#E8E8E8 !important}.blueprint-error .error-header{color:#E84149;font-family:monospace}.blueprint-error code,.blueprint-error pre{overflow-wrap:break-word;width:100%;word-wrap:break-word}.page-main-index #invite-button{padding:0}.page-main-about-partners #partner-cards .uk-card-default{margin-top:2em;text-align:center}.page-main-about-privacy td,.page-main-about-privacy th{max-width:30rem}.page-main-info-resources .payment-icon{margin-right:1em}.page-main-info-resources .payment-icon img{height:2em}.page-main-info-resources .payment-description{height:3.7rem;margin-right:.5rem;vertical-align:text-bottom}.page-main-info-resources .resource-title{margin-bottom:-1rem}.page-main-info-resources .resource-title div{padding-bottom:0}.page-main-jams-index .date-separator{vertical-align:middle}.page-main-jams-index .theme-label{margin-top:3px}.page-main-jams-index .jam-tiles{border-color:#aaa transparent;border-style:solid;border-width:1px}.page-main-jams-index .jam-tiles .uk-tile-success{background:#32D296}.page-main-jams-index .jam-tiles .uk-tile-danger{background:#F0506E}.page-main-jams-index .jam-tiles .uk-tile-winner{background:#eb0}.page-main-jams-index .jam-tiles .jam-tile-text{align-items:center;color:#fff;display:flex;justify-content:center;text-transform:uppercase}.page-main-jams-join .question-label{margin-top:0}.page-main-jams-join .checkbox-label{padding-left:.7rem}.page-main-jams-join .radio-label{padding-left:.7rem;padding-right:1rem}.page-main-jams-join .range-label{padding-left:.3rem}.page-main-jams-join .textarea{min-height:15rem;resize:vertical}.page-main-jams-join .slider-label{margin-right:1rem}.jam-team-view .participant-card-list{margin-bottom:25px}.jam-team-view .participant-card{margin-bottom:10px;padding:10px}.jam-team-view .participant-card .participant-avatar-link{margin-right:10px}.jam-team-view .participant-card .participant-avatar-link .participant-avatar{height:2.5rem}.jam-team-view .participant-card .participant-avatar-link:hover,.jam-team-view .participant-card .participant-avatar-link:active{text-decoration:none}.jam-team-view .participant-card .participant-links{float:right}.jam-team-view .gitlab-activity{background-color:#f5f5f5;height:500px;overflow-x:hidden;overflow-y:auto;width:100%}.jam-team-view .gitlab-activity .gitlab-activity-loading{align-items:center;display:flex;height:100%;justify-content:center;width:100%}.jam-team-view .gitlab-activity .gitlab-activity-loading .gitlab-activity-spinner{text-align:center;width:100%}.jam-team-view .gitlab-activity .gitlab-activity-events{height:auto;width:100%}.jam-team-view .gitlab-activity .gitlab-activity-event-item{background-color:#fff;border:solid 1px #999;border-bottom-width:0;box-sizing:border-box;display:flex;justify-content:center;padding:10px;vertical-align:middle;width:100%}.jam-team-view .gitlab-activity .gitlab-activity-event-item .gitlab-activity-event-item-content{width:100%}.jam-team-view .gitlab-activity .gitlab-activity-event-item .pasta{background-color:#EAF5FF;border-radius:3px;color:#0366D6;font-family:Consolas, monaco, monospace;font-size:12px;margin-right:10px;padding:3px 5px}.jam-team-view .gitlab-activity .gitlab-activity-event-item:nth-last-child(2){border-bottom-width:1px}.jam-team-view .gitlab-activity .gitlab-activity-events-footer{color:#999;display:flex;justify-content:center;padding:10px;text-align:center;vertical-align:middle}.jam-team-list .team-list-cards{margin-top:20px}.jam-team-list .team-links{text-align:center}.jam-team-list .team-subtitle{margin-bottom:0}.jam-team-list .team-card-own{border:solid 2px #7289DA}.jam-team-list .team-card-own.team-card-winner{border-color:#E0B000 #E0B000 #7289DA #7289DA}.jam-team-list .team-badge-own{color:#7289DA}.jam-team-list .team-card-winner{border:solid 2px #E0B000}.jam-team-list .team-badge-winner{color:#E0B000}.jam-team-list .team-member-avatars{padding:10px;text-align:center}.jam-team-list .team-member-avatars .team-member-avatar-link{margin:0 5px}.jam-team-list .team-member-avatars .team-member-avatar-link .team-member-avatar{height:32px}.jam-team-list .team-member-avatars .team-member-avatar-link:hover,.jam-team-list .team-member-avatars .team-member-avatar-link:active{text-decoration:none}.clean-logs{background-color:#36393E}.clean-logs .nick{font-weight:700}.clean-logs .time{color:#75797F;font-size:11px;font-weight:normal;margin-left:.8em}.clean-logs .text{color:#fff;margin-bottom:1em}.clean-logs .embed{background-color:#2E3136;border:2px solid #282B30;border-radius:5px;color:#fff;margin-bottom:1.5em;padding:1em;width:60%}.clean-logs .embed .footer{font-size:9px}.clean-logs .embed .fields{display:flex;flex-wrap:wrap}.clean-logs .embed .field{flex:50%}.clean-logs .embed a{color:#A9C4DA}.blueprint-staff .participant-handle{cursor:move !important}.blueprint-staff #member-answers-sidebar{border-right:1px solid #E5E5E5;margin-right:1rem;min-width:20vw;width:20vw}.blueprint-staff #member-answers-sidebar .avatar{margin:1vw 4vw;width:12vw}.blueprint-staff .approval-card{border:1px solid #E5E5E5;padding:0}.blueprint-staff .approval-card img{height:2.5rem}.blueprint-staff .approval-card h2{margin-bottom:0;vertical-align:central}.blueprint-staff .approval-card .user-id{margin-bottom:0 !important}.blueprint-staff .approval-card .expand-icon{display:none}.blueprint-staff .approval-card .contract-icon{display:inline-block}.blueprint-staff .approval-card .uk-button{padding-left:10px;padding-right:10px}.blueprint-staff .approval-card .uk-card-body{border-top:1px solid #E5E5E5;padding-top:20px}.blueprint-staff .approval-card .status-icon.fa-check{color:#32D296}.blueprint-staff .approval-card .status-icon.fa-times{color:#F0506E}.blueprint-staff .approval-card .approved .status-icon.fa-times{display:none}.blueprint-staff .approval-card .unapproved .status-icon.fa-check{display:none}.blueprint-staff .approval-card.collapsed .expand-icon{display:inline-block}.blueprint-staff .approval-card.collapsed .contract-icon{display:none}.blueprint-staff .approval-card.collapsed .uk-card-header{border-bottom:0}.blueprint-staff .approval-card.collapsed .uk-card-body{display:none;visibility:hidden}.page-staff-jams-edit-ending #editor{min-height:50vh;resize:vertical}.page-staff-jams-edit-info .editor{min-height:30vh;resize:vertical}.page-staff-jams-forms-preamble-edit .editor{min-height:30vh;resize:vertical}.page-staff-jams-forms-questions .delete-question-button,.page-staff-jams-forms-questions .edit-question-button{padding-left:5px;padding-right:5px}.page-staff-jams-forms-view .delete-question-button,.page-staff-jams-forms-view .edit-question-button{padding-left:5px;padding-right:5px}.page-staff-jams-infractions .delete-infraction-button{padding-left:5px;padding-right:5px}.page-staff-jams-edit-teams .team-winner-unset-button,.page-staff-jams-edit-teams .team-winner-button{background-color:#E0B000;border:1px solid transparent;color:#fff}.page-staff-jams-edit-teams .team-winner-unset-button:hover,.page-staff-jams-edit-teams .team-winner-button:hover{background-color:#DAA900}.page-staff-jams-edit-teams .team-winner-unset-button:active,.page-staff-jams-edit-teams .team-winner-button:active{background-color:#DAA015}.page-staff-jams-edit-teams .team-card-winner{border:solid 2px #E0B000}.page-staff-tables-edit #editor{min-height:50vh;resize:vertical}.page-staff-tables-table .delete-infraction-button{padding-left:5px;padding-right:5px}.blueprint-wiki .quote{border-left:3px solid #7289DA;color:#99AAB5;margin-bottom:1rem;padding-left:20px}.blueprint-wiki #wiki-nav .uk-nav-divider{min-width:8rem}.blueprint-wiki #wiki-sidebar{transition:width ease 1s}.blueprint-wiki #wiki-page{overflow-x:hidden}.blueprint-wiki #wiki-sidebar-button{align-items:center;border:1px solid rgba(0,0,0,0.11);color:#fff;height:3rem;justify-content:center;min-height:3rem;min-width:3rem;width:3rem}.blueprint-wiki #doc-view{width:calc(100% - 6rem)}@media (max-width: 639px){.blueprint-wiki #doc-view{width:calc(100% - 1rem)}}.blueprint-wiki .sidebar-search-input{border-left:0;border-right:0;margin-top:5px;padding-right:0}.blueprint-wiki .search-button{border:0;width:100%}.blueprint-wiki .content{flex-grow:1;margin:0 1rem 1rem}.blueprint-wiki .location-input{margin-left:15px}.blueprint-wiki .preview-title{padding:1rem 1rem .1rem}html{height:100%}html body{display:flex;flex-direction:column;height:100%}.navbar-logo{height:60%;margin-left:-10px;margin-top:2px;max-width:110%;padding-left:3px}.hover-title a{transition:opacity 200ms ease-in-out;-moz-transition:opacity 200ms ease-in-out;-webkit-transition:opacity 200ms ease-in-out;opacity:0;visibility:hidden}.hover-title:hover a{transition:opacity 200ms ease-in-out;-moz-transition:opacity 200ms ease-in-out;-webkit-transition:opacity 200ms ease-in-out;opacity:1;visibility:visible}.debug-mode-item{color:#7289DA !important}.jam-image{max-width:15rem}.cursor-default{cursor:default !important}.full-width{width:100%}select{-webkit-appearance:unset !important;left:auto !important;opacity:1 !important;position:relative !important;top:auto !important}div.danger-input *{border-color:red !important;color:red;transition:color .5s ease, border-color .5s ease}table.table-bordered{border:1px solid #E5E5E5 !important}tr.thick-bottom-border{border-bottom:3px solid #E5E5E5 !important}td.left-border,th.left-border{border-left:1px solid #E5E5E5 !important}td.right-border,th.right-border{border-right:1px solid #E5E5E5 !important}.prevent-fouc{display:none} - -/*# sourceMappingURL=style.css.map */
\ No newline at end of file diff --git a/static/css/style.css.map b/static/css/style.css.map deleted file mode 100644 index f68094d7..00000000 --- a/static/css/style.css.map +++ /dev/null @@ -1,36 +0,0 @@ -{ - "version": 3, - "file": "style.css", - "sources": [ - "../../scss/pysite/style.scss", - "../../scss/pysite/_fonts.scss", - "../../scss/pysite/_mixins.scss", - "../../scss/pysite/_uikit_shim.scss", - "../../scss/pysite/_variables.scss", - "../../scss/pysite/pages/_rst.scss", - "../../scss/pysite/pages/errors/_common.scss", - "../../scss/pysite/pages/main/_index.scss", - "../../scss/pysite/pages/main/about/_partners.scss", - "../../scss/pysite/pages/main/about/_privacy.scss", - "../../scss/pysite/pages/main/info/_resources.scss", - "../../scss/pysite/pages/main/jams/_index.scss", - "../../scss/uikit/_variables.scss", - "../../scss/pysite/pages/main/jams/_join.scss", - "../../scss/pysite/pages/main/jams/_team_view.scss", - "../../scss/pysite/pages/main/jams/_team_list.scss", - "../../scss/pysite/pages/main/bot/_clean_logs.scss", - "../../scss/pysite/pages/staff/_common.scss", - "../../scss/pysite/pages/staff/jams/_edit_ending.scss", - "../../scss/pysite/pages/staff/jams/_edit_info.scss", - "../../scss/pysite/pages/staff/jams/forms/_preamble_edit.scss", - "../../scss/pysite/pages/staff/jams/forms/_questions_view.scss", - "../../scss/pysite/pages/staff/jams/forms/_view.scss", - "../../scss/pysite/pages/staff/jams/infractions/_view.scss", - "../../scss/pysite/pages/staff/jams/teams/_view.scss", - "../../scss/pysite/pages/staff/tables/_edit.scss", - "../../scss/pysite/pages/staff/tables/_table.scss", - "../../scss/pysite/pages/wiki/_common.scss" - ], - "names": [], - "mappings": "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" -}
\ No newline at end of file diff --git a/static/css/uikit_blurple.css b/static/css/uikit_blurple.css deleted file mode 100644 index 1a42e7bb..00000000 --- a/static/css/uikit_blurple.css +++ /dev/null @@ -1,3 +0,0 @@ -html{font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-size:16px;font-weight:normal;line-height:1.5;-webkit-text-size-adjust:100%;background:#fff;color:#666}body{margin:0}a{-webkit-text-decoration-skip:objects}a:active,a:hover{outline:none}a,.uk-link{color:#1e87f0;text-decoration:none;cursor:pointer}a:hover,.uk-link:hover{color:#0f6ecd;text-decoration:underline}abbr[title]{border-bottom:none;text-decoration:underline;text-decoration:underline dotted}b,strong{font-weight:bolder}:not(pre)>code,:not(pre)>kbd,:not(pre)>samp{font-family:Consolas,monaco,monospace;font-size:.875rem;color:#f0506e;white-space:nowrap;padding:2px 6px;background:#f8f8f8}em{color:#f0506e}ins{background:#ffd;color:#666;text-decoration:none}mark{background:#ffd;color:#666}q{font-style:italic}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-0.5em}sub{bottom:-0.25em}audio,canvas,iframe,img,svg,video{vertical-align:middle}audio,canvas,img,video{max-width:100%;height:auto;box-sizing:border-box}svg:not(:root){overflow:hidden}img:not([src]){visibility:hidden}p,ul,ol,dl,pre,address,fieldset,figure{margin:0 0 20px 0}*+p,*+ul,*+ol,*+dl,*+pre,*+address,*+fieldset,*+figure{margin-top:20px}h1,.uk-h1,h2,.uk-h2,h3,.uk-h3,h4,.uk-h4,h5,.uk-h5,h6,.uk-h6{margin:0 0 20px 0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-weight:normal;color:#333;text-transform:none}*+h1,*+.uk-h1,*+h2,*+.uk-h2,*+h3,*+.uk-h3,*+h4,*+.uk-h4,*+h5,*+.uk-h5,*+h6,*+.uk-h6{margin-top:40px}h1,.uk-h1{font-size:2.23125rem;line-height:1.2}h2,.uk-h2{font-size:1.7rem;line-height:1.3}h3,.uk-h3{font-size:1.5rem;line-height:1.4}h4,.uk-h4{font-size:1.25rem;line-height:1.4}h5,.uk-h5{font-size:16px;line-height:1.4}h6,.uk-h6{font-size:.875rem;line-height:1.4}@media (min-width: 960px){h1,.uk-h1{font-size:2.625rem}h2,.uk-h2{font-size:2rem}}ul,ol{padding-left:30px}ul>li>ul,ul>li>ol,ol>li>ol,ol>li>ul{margin:0}dt{font-weight:bold}dd{margin-left:0}hr,.uk-hr{box-sizing:content-box;height:0;overflow:visible;text-align:inherit;margin:0 0 20px 0;border:0;border-top:1px solid #E5E5E5}*+hr,*+.uk-hr{margin-top:20px}address{font-style:normal}blockquote{margin:0 0 20px 0;font-size:1.25rem;line-height:1.5;font-style:italic;color:#333}*+blockquote{margin-top:20px}blockquote p:last-of-type{margin-bottom:0}blockquote footer{margin-top:10px;font-size:.875rem;line-height:1.5;color:#666}blockquote footer::before{content:"— "}pre{font:.875rem / 1.5 Consolas,monaco,monospace;color:#666;-moz-tab-size:4;tab-size:4;overflow:auto;padding:10px;border:1px solid #E5E5E5;border-radius:3px;background:#fff}pre code{font-family:Consolas,monaco,monospace}::-moz-selection{background:#39f;color:#fff;text-shadow:none}::selection{background:#39f;color:#fff;text-shadow:none}details,main{display:block}summary{display:list-item}template{display:none}iframe{border:0}a,area,button,input,label,select,summary,textarea{touch-action:manipulation}.var-media-s::before{content:"640px"}.var-media-m::before{content:"960px"}.var-media-l::before{content:"1200px"}.var-media-xl::before{content:"1600px"}a.uk-link-muted,.uk-link-muted a{color:#999}a.uk-link-muted:hover,.uk-link-muted a:hover{color:#666}a.uk-link-text:not(:hover),.uk-link-text a:not(:hover){color:inherit}a.uk-link-text:hover,.uk-link-text a:hover{color:#999}a.uk-link-heading:not(:hover),.uk-link-heading a:not(:hover){color:inherit}a.uk-link-heading:hover,.uk-link-heading a:hover{color:#7289DA;text-decoration:none}a.uk-link-reset,a.uk-link-reset:hover,.uk-link-reset a,.uk-link-reset a:hover{color:inherit !important;text-decoration:none !important}.uk-heading-primary{font-size:3rem;line-height:1.2}@media (min-width: 960px){.uk-heading-primary{font-size:3.375rem}}@media (min-width: 1200px){.uk-heading-primary{font-size:3.75rem;line-height:1.1}}.uk-heading-hero{font-size:4rem;line-height:1.1}@media (min-width: 960px){.uk-heading-hero{font-size:6rem;line-height:1}}@media (min-width: 1200px){.uk-heading-hero{font-size:8rem;line-height:1}}.uk-heading-divider{padding-bottom:10px;border-bottom:1px solid #E5E5E5}.uk-heading-bullet{position:relative}.uk-heading-bullet::before{content:"";display:inline-block;position:relative;top:calc(-0.1 * 1em);vertical-align:middle;height:.9em;margin-right:10px;border-left:5px solid #E5E5E5}.uk-heading-line{overflow:hidden}.uk-heading-line>*{display:inline-block;position:relative}.uk-heading-line>::before,.uk-heading-line>::after{content:"";position:absolute;top:calc(50% - (1px / 2));width:2000px;border-bottom:1px solid #E5E5E5}.uk-heading-line>::before{right:100%;margin-right:.6em}.uk-heading-line>::after{left:100%;margin-left:.6em}[class*='uk-divider']{border:none;margin-bottom:20px}*+[class*='uk-divider']{margin-top:20px}.uk-divider-icon{position:relative;height:20px;background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2220%22%20height%3D%2220%22%20viewBox%3D%220%200%2020%2020%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Ccircle%20fill%3D%22none%22%20stroke%3D%22%23E5E5E5%22%20stroke-width%3D%222%22%20cx%3D%2210%22%20cy%3D%2210%22%20r%3D%227%22%20%2F%3E%0A%3C%2Fsvg%3E%0A");background-repeat:no-repeat;background-position:50% 50%}.uk-divider-icon::before,.uk-divider-icon::after{content:"";position:absolute;top:50%;max-width:calc(50% - (50px / 2));border-bottom:1px solid #E5E5E5}.uk-divider-icon::before{right:calc(50% + (50px / 2));width:100%}.uk-divider-icon::after{left:calc(50% + (50px / 2));width:100%}.uk-divider-small{line-height:0}.uk-divider-small::after{content:"";display:inline-block;width:100px;max-width:100%;border-top:1px solid #E5E5E5;vertical-align:top}.uk-list{padding:0;list-style:none}.uk-list>li::before,.uk-list>li::after{content:"";display:table}.uk-list>li::after{clear:both}.uk-list>li>:last-child{margin-bottom:0}.uk-list ul{margin:0;padding-left:30px;list-style:none}.uk-list>li:nth-child(n+2),.uk-list>li>ul{margin-top:10px}.uk-list-divider>li:nth-child(n+2){margin-top:10px;padding-top:10px;border-top:1px solid #E5E5E5}.uk-list-striped>li{padding:10px 10px}.uk-list-striped>li:nth-of-type(odd){border-top:1px solid #E5E5E5;border-bottom:1px solid #E5E5E5}.uk-list-striped>li:nth-of-type(odd){background:#f8f8f8}.uk-list-striped>li:nth-child(n+2){margin-top:0}.uk-list-bullet>li{position:relative;padding-left:calc(1.5em + 10px)}.uk-list-bullet>li::before{content:"";position:absolute;top:0;left:0;width:1.5em;height:1.5em;background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%226%22%20height%3D%226%22%20viewBox%3D%220%200%206%206%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Ccircle%20fill%3D%22%23666%22%20cx%3D%223%22%20cy%3D%223%22%20r%3D%223%22%20%2F%3E%0A%3C%2Fsvg%3E");background-repeat:no-repeat;background-position:50% 50%;float:left}.uk-list-large>li:nth-child(n+2),.uk-list-large>li>ul{margin-top:20px}.uk-list-large.uk-list-divider>li:nth-child(n+2){margin-top:20px;padding-top:20px}.uk-list-large.uk-list-striped>li{padding:20px 10px}.uk-list-large.uk-list-striped>li:nth-of-type(odd){border-top:1px solid #E5E5E5;border-bottom:1px solid #E5E5E5}.uk-list-large.uk-list-striped>li:nth-child(n+2){margin-top:0}.uk-description-list>dt{color:#333;font-size:.875rem;font-weight:normal;text-transform:uppercase}.uk-description-list>dt:nth-child(n+2){margin-top:20px}.uk-description-list-divider>dt:nth-child(n+2){margin-top:20px;padding-top:20px;border-top:1px solid #E5E5E5}.uk-table{border-collapse:collapse;border-spacing:0;width:100%;margin-bottom:20px}*+.uk-table{margin-top:20px}.uk-table th{padding:16px 12px;text-align:left;vertical-align:bottom;font-size:.875rem;font-weight:normal;color:#999;text-transform:uppercase}.uk-table td{padding:16px 12px;vertical-align:top}.uk-table td>:last-child{margin-bottom:0}.uk-table tfoot{font-size:.875rem}.uk-table caption{font-size:.875rem;text-align:left;color:#999}.uk-table>tr.uk-active,.uk-table tbody tr.uk-active{background:#ffd}.uk-table-middle,.uk-table-middle td{vertical-align:middle !important}.uk-table-divider>tr:not(:first-child),.uk-table-divider>:not(:first-child)>tr,.uk-table-divider>:first-child>tr:not(:first-child){border-top:1px solid #E5E5E5}.uk-table-striped>tr:nth-of-type(odd),.uk-table-striped tbody tr:nth-of-type(odd){background:#f8f8f8;border-top:1px solid #E5E5E5;border-bottom:1px solid #E5E5E5}.uk-table-hover>tr:hover,.uk-table-hover tbody tr:hover{background:#ffd}.uk-table-small th,.uk-table-small td{padding:10px 12px}.uk-table-large th,.uk-table-large td{padding:22px 12px}.uk-table-justify th:first-child,.uk-table-justify td:first-child{padding-left:0}.uk-table-justify th:last-child,.uk-table-justify td:last-child{padding-right:0}.uk-table-shrink{width:1px}.uk-table-expand{min-width:150px}.uk-table-link{padding:0 !important}.uk-table-link>a{display:block;padding:16px 12px}.uk-table-small .uk-table-link>a{padding:10px 12px}@media (max-width: 959px){.uk-table-responsive,.uk-table-responsive tbody,.uk-table-responsive th,.uk-table-responsive td,.uk-table-responsive tr{display:block}.uk-table-responsive thead{display:none}.uk-table-responsive th,.uk-table-responsive td{width:auto !important;max-width:none !important;min-width:0 !important;overflow:visible !important;white-space:normal !important}.uk-table-responsive th:not(:first-child):not(.uk-table-link),.uk-table-responsive td:not(:first-child):not(.uk-table-link),.uk-table-responsive .uk-table-link:not(:first-child)>a{padding-top:5px !important}.uk-table-responsive th:not(:last-child):not(.uk-table-link),.uk-table-responsive td:not(:last-child):not(.uk-table-link),.uk-table-responsive .uk-table-link:not(:last-child)>a{padding-bottom:5px !important}.uk-table-justify.uk-table-responsive th,.uk-table-justify.uk-table-responsive td{padding-left:0;padding-right:0}}.uk-table tbody tr{transition:background-color 0.1s linear}.uk-icon{margin:0;border:none;border-radius:0;overflow:visible;font:inherit;color:inherit;text-transform:none;padding:0;background-color:transparent;display:inline-block;fill:currentcolor;line-height:0}button.uk-icon:not(:disabled){cursor:pointer}.uk-icon::-moz-focus-inner{border:0;padding:0}.uk-icon [fill*='#']:not(.uk-preserve),.uk-icon [FILL*='#']:not(.uk-preserve){fill:currentcolor}.uk-icon [stroke*='#']:not(.uk-preserve),.uk-icon [STROKE*='#']:not(.uk-preserve){stroke:currentcolor}.uk-icon>*{transform:translate(0, 0)}.uk-icon-image{width:20px;height:20px;background-position:50% 50%;background-repeat:no-repeat;background-size:contain;vertical-align:middle}.uk-icon-link{color:#999}.uk-icon-link:hover,.uk-icon-link:focus{color:#666;outline:none}.uk-icon-link:active,.uk-active>.uk-icon-link{color:#595959}.uk-icon-button{box-sizing:border-box;width:36px;height:36px;border-radius:500px;background:#f8f8f8;color:#999;vertical-align:middle;display:inline-flex;justify-content:center;align-items:center;transition:0.1s ease-in-out;transition-property:color, background-color}.uk-icon-button:hover,.uk-icon-button:focus{background-color:#ebebeb;color:#666;outline:none}.uk-icon-button:active,.uk-active>.uk-icon-button{background-color:#dfdfdf;color:#666}.uk-range{box-sizing:border-box;margin:0;vertical-align:middle;max-width:100%;width:100%;-webkit-appearance:none;background:transparent;padding:0}.uk-range:focus{outline:none}.uk-range::-moz-focus-outer{border:none}.uk-range::-ms-track{height:15px;background:transparent;border-color:transparent;color:transparent}.uk-range:not(:disabled)::-webkit-slider-thumb{cursor:pointer}.uk-range:not(:disabled)::-moz-range-thumb{cursor:pointer}.uk-range:not(:disabled)::-ms-thumb{cursor:pointer}.uk-range::-webkit-slider-thumb{-webkit-appearance:none;margin-top:-7px;height:15px;width:15px;border-radius:500px;background:#fff;border:1px solid #ccc}.uk-range::-moz-range-thumb{border:none;height:15px;width:15px;border-radius:500px;background:#fff;border:1px solid #ccc}.uk-range::-ms-thumb{margin-top:0}.uk-range::-ms-thumb{border:none;height:15px;width:15px;border-radius:500px;background:#fff;border:1px solid #ccc}.uk-range::-ms-tooltip{display:none}.uk-range::-webkit-slider-runnable-track{height:3px;background:#ebebeb;border-radius:500px}.uk-range:focus::-webkit-slider-runnable-track,.uk-range:active::-webkit-slider-runnable-track{background:#d2d2d2}.uk-range::-moz-range-track{height:3px;background:#ebebeb;border-radius:500px}.uk-range:focus::-moz-range-track{background:#d2d2d2}.uk-range::-ms-fill-lower,.uk-range::-ms-fill-upper{height:3px;background:#ebebeb;border-radius:500px}.uk-range:focus::-ms-fill-lower,.uk-range:focus::-ms-fill-upper{background:#d2d2d2}.uk-input,.uk-select,.uk-textarea,.uk-radio,.uk-checkbox{box-sizing:border-box;margin:0;border-radius:0;font:inherit}.uk-input{overflow:visible}.uk-select{text-transform:none}.uk-select optgroup{font:inherit;font-weight:bold}.uk-textarea{overflow:auto}.uk-input[type="search"]::-webkit-search-cancel-button,.uk-input[type="search"]::-webkit-search-decoration{-webkit-appearance:none}.uk-input[type="number"]::-webkit-inner-spin-button,.uk-input[type="number"]::-webkit-outer-spin-button{height:auto}.uk-input::-moz-placeholder,.uk-textarea::-moz-placeholder{opacity:1}.uk-radio:not(:disabled),.uk-checkbox:not(:disabled){cursor:pointer}.uk-fieldset{border:none;margin:0;padding:0}.uk-input,.uk-textarea{-webkit-appearance:none}.uk-input,.uk-select,.uk-textarea{max-width:100%;width:100%;border:0 none;padding:0 10px;background:#fff;color:#666;border:1px solid #E5E5E5;transition:0.2s ease-in-out;transition-property:color, background-color, border}.uk-input,.uk-select:not([multiple]):not([size]){height:40px;vertical-align:middle;display:inline-block}.uk-input:not(input),.uk-select:not(select){line-height:38px}.uk-select[multiple],.uk-select[size],.uk-textarea{padding-top:4px;padding-bottom:4px;vertical-align:top}.uk-input:focus,.uk-select:focus,.uk-textarea:focus{outline:none;background-color:#fff;color:#666;border-color:#7289DA}.uk-input:disabled,.uk-select:disabled,.uk-textarea:disabled{background-color:#f8f8f8;color:#999;border-color:#E5E5E5}.uk-input:-ms-input-placeholder{color:#999 !important}.uk-input::placeholder{color:#999}.uk-textarea:-ms-input-placeholder{color:#999 !important}.uk-textarea::placeholder{color:#999}.uk-form-small{font-size:.875rem}.uk-form-small:not(textarea):not([multiple]):not([size]){height:30px;padding-left:8px;padding-right:8px}.uk-form-small:not(select):not(input):not(textarea){line-height:28px}.uk-form-large{font-size:1.25rem}.uk-form-large:not(textarea):not([multiple]):not([size]){height:55px;padding-left:12px;padding-right:12px}.uk-form-large:not(select):not(input):not(textarea){line-height:53px}.uk-form-danger,.uk-form-danger:focus{color:#f0506e;border-color:#f0506e}.uk-form-success,.uk-form-success:focus{color:#32d296;border-color:#32d296}.uk-form-blank{background:none;border-color:transparent}.uk-form-blank:focus{border-color:#E5E5E5;border-style:dashed}input.uk-form-width-xsmall{width:50px}select.uk-form-width-xsmall{width:75px}.uk-form-width-small{width:130px}.uk-form-width-medium{width:200px}.uk-form-width-large{width:500px}.uk-select:not([multiple]):not([size]){-webkit-appearance:none;-moz-appearance:none;padding-right:20px;background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2224%22%20height%3D%2216%22%20viewBox%3D%220%200%2024%2016%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Cpolygon%20fill%3D%22%23666%22%20points%3D%2212%201%209%206%2015%206%22%20%2F%3E%0A%20%20%20%20%3Cpolygon%20fill%3D%22%23666%22%20points%3D%2212%2013%209%208%2015%208%22%20%2F%3E%0A%3C%2Fsvg%3E%0A");background-repeat:no-repeat;background-position:100% 50%}.uk-select:not([multiple]):not([size])::-ms-expand{display:none}.uk-select:not([multiple]):not([size]) option{color:#444}.uk-select:not([multiple]):not([size]):disabled{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2224%22%20height%3D%2216%22%20viewBox%3D%220%200%2024%2016%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Cpolygon%20fill%3D%22%23999%22%20points%3D%2212%201%209%206%2015%206%22%20%2F%3E%0A%20%20%20%20%3Cpolygon%20fill%3D%22%23999%22%20points%3D%2212%2013%209%208%2015%208%22%20%2F%3E%0A%3C%2Fsvg%3E%0A")}.uk-radio,.uk-checkbox{display:inline-block;height:16px;width:16px;overflow:hidden;margin-top:-4px;vertical-align:middle;-webkit-appearance:none;-moz-appearance:none;background-color:rgba(0,0,0,0);background-repeat:no-repeat;background-position:50% 50%;border:1px solid #ccc;transition:0.2s ease-in-out;transition-property:background-color, border}.uk-radio{border-radius:50%}.uk-radio:focus,.uk-checkbox:focus{outline:none;border-color:#7289DA}.uk-radio:checked,.uk-checkbox:checked,.uk-checkbox:indeterminate{background-color:#7289DA;border-color:rgba(0,0,0,0)}.uk-radio:checked:focus,.uk-checkbox:checked:focus,.uk-checkbox:indeterminate:focus{background-color:#4a67cf}.uk-radio:checked{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Ccircle%20fill%3D%22%23fff%22%20cx%3D%228%22%20cy%3D%228%22%20r%3D%222%22%20%2F%3E%0A%3C%2Fsvg%3E")}.uk-checkbox:checked{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2214%22%20height%3D%2211%22%20viewBox%3D%220%200%2014%2011%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Cpolygon%20fill%3D%22%23fff%22%20points%3D%2212%201%205%207.5%202%205%201%205.5%205%2010%2013%201.5%22%20%2F%3E%0A%3C%2Fsvg%3E%0A")}.uk-checkbox:indeterminate{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Crect%20fill%3D%22%23fff%22%20x%3D%223%22%20y%3D%228%22%20width%3D%2210%22%20height%3D%221%22%20%2F%3E%0A%3C%2Fsvg%3E")}.uk-radio:disabled,.uk-checkbox:disabled{background-color:#f8f8f8;border-color:#E5E5E5}.uk-radio:disabled:checked{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Ccircle%20fill%3D%22%23999%22%20cx%3D%228%22%20cy%3D%228%22%20r%3D%222%22%20%2F%3E%0A%3C%2Fsvg%3E")}.uk-checkbox:disabled:checked{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2214%22%20height%3D%2211%22%20viewBox%3D%220%200%2014%2011%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Cpolygon%20fill%3D%22%23999%22%20points%3D%2212%201%205%207.5%202%205%201%205.5%205%2010%2013%201.5%22%20%2F%3E%0A%3C%2Fsvg%3E%0A")}.uk-checkbox:disabled:indeterminate{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Crect%20fill%3D%22%23999%22%20x%3D%223%22%20y%3D%228%22%20width%3D%2210%22%20height%3D%221%22%20%2F%3E%0A%3C%2Fsvg%3E")}.uk-legend{width:100%;color:inherit;padding:0;font-size:1.5rem;line-height:1.4}.uk-form-custom{display:inline-block;position:relative;max-width:100%;vertical-align:middle}.uk-form-custom select,.uk-form-custom input[type="file"]{position:absolute;top:0;z-index:1;width:100%;height:100%;left:0;-webkit-appearance:none;opacity:0;cursor:pointer}.uk-form-custom input[type="file"]{font-size:500px;overflow:hidden}.uk-form-label{color:#333;font-size:.875rem}.uk-form-stacked .uk-form-label{display:block;margin-bottom:5px}@media (max-width: 959px){.uk-form-horizontal .uk-form-label{display:block;margin-bottom:5px}}@media (min-width: 960px){.uk-form-horizontal .uk-form-label{width:200px;margin-top:7px;float:left}.uk-form-horizontal .uk-form-controls{margin-left:215px}.uk-form-horizontal .uk-form-controls-text{padding-top:7px}}.uk-form-icon{position:absolute;top:0;bottom:0;left:0;width:40px;display:inline-flex;justify-content:center;align-items:center;color:#999}.uk-form-icon:hover{color:#666}.uk-form-icon:not(a):not(button):not(input){pointer-events:none}.uk-form-icon:not(.uk-form-icon-flip) ~ .uk-input{padding-left:40px !important}.uk-form-icon-flip{right:0;left:auto}.uk-form-icon-flip ~ .uk-input{padding-right:40px !important}.uk-button{margin:0;border:none;border-radius:0;overflow:visible;font:inherit;color:inherit;text-transform:none;display:inline-block;box-sizing:border-box;padding:0 30px;vertical-align:middle;font-size:.875rem;line-height:38px;text-align:center;text-decoration:none;text-transform:uppercase;transition:0.1s ease-in-out;transition-property:color, background-color, border-color}.uk-button:not(:disabled){cursor:pointer}.uk-button::-moz-focus-inner{border:0;padding:0}.uk-button:hover{text-decoration:none}.uk-button:focus{outline:none}.uk-button-default{background-color:rgba(0,0,0,0);color:#333;border:1px solid #E5E5E5}.uk-button-default:hover,.uk-button-default:focus{background-color:rgba(0,0,0,0);color:#333;border-color:#b2b2b2}.uk-button-default:active,.uk-button-default.uk-active{background-color:rgba(0,0,0,0);color:#333;border-color:#999}.uk-button-primary{background-color:#7289DA;color:#fff;border:1px solid transparent}.uk-button-primary:hover,.uk-button-primary:focus{background-color:#5e78d5;color:#fff}.uk-button-primary:active,.uk-button-primary.uk-active{background-color:#4a67cf;color:#fff}.uk-button-secondary{background-color:#222;color:#fff;border:1px solid transparent}.uk-button-secondary:hover,.uk-button-secondary:focus{background-color:#151515;color:#fff}.uk-button-secondary:active,.uk-button-secondary.uk-active{background-color:#090909;color:#fff}.uk-button-danger{background-color:#f0506e;color:#fff;border:1px solid transparent}.uk-button-danger:hover,.uk-button-danger:focus{background-color:#ee395b;color:#fff}.uk-button-danger:active,.uk-button-danger.uk-active{background-color:#ec2147;color:#fff}.uk-button-default:disabled,.uk-button-primary:disabled,.uk-button-secondary:disabled,.uk-button-danger:disabled{background-color:rgba(0,0,0,0);color:#999;border-color:#E5E5E5}.uk-button-small{padding:0 15px;line-height:28px;font-size:.875rem}.uk-button-large{padding:0 40px;line-height:53px;font-size:.875rem}.uk-button-text{padding:0;line-height:1.5;background:none;color:#333;position:relative}.uk-button-text::before{content:"";position:absolute;bottom:0;left:0;right:100%;border-bottom:1px solid #333;transition:right 0.3s ease-out}.uk-button-text:hover,.uk-button-text:focus{color:#333}.uk-button-text:hover::before,.uk-button-text:focus::before{right:0}.uk-button-text:disabled{color:#999}.uk-button-text:disabled::before{display:none}.uk-button-link{padding:0;line-height:1.5;background:none;color:#1e87f0}.uk-button-link:hover,.uk-button-link:focus{color:#0f6ecd;text-decoration:underline}.uk-button-link:disabled{color:#999;text-decoration:none}.uk-button-group{display:inline-flex;vertical-align:middle;position:relative}.uk-button-group>.uk-button:nth-child(n+2),.uk-button-group>div:nth-child(n+2) .uk-button{margin-left:-1px}.uk-button-group .uk-button:hover,.uk-button-group .uk-button:focus,.uk-button-group .uk-button:active,.uk-button-group .uk-button.uk-active{position:relative;z-index:1}.uk-section{box-sizing:border-box;padding-top:40px;padding-bottom:40px}@media (min-width: 960px){.uk-section{padding-top:70px;padding-bottom:70px}}.uk-section::before,.uk-section::after{content:"";display:table}.uk-section::after{clear:both}.uk-section>:last-child{margin-bottom:0}.uk-section-xsmall{padding-top:20px;padding-bottom:20px}.uk-section-small{padding-top:40px;padding-bottom:40px}.uk-section-large{padding-top:70px;padding-bottom:70px}@media (min-width: 960px){.uk-section-large{padding-top:140px;padding-bottom:140px}}.uk-section-xlarge{padding-top:140px;padding-bottom:140px}@media (min-width: 960px){.uk-section-xlarge{padding-top:210px;padding-bottom:210px}}.uk-section-default{background:#fff}.uk-section-muted{background:#f8f8f8}.uk-section-primary{background:#7289DA}.uk-section-secondary{background:#222}.uk-container{box-sizing:content-box;max-width:1200px;margin-left:auto;margin-right:auto;padding-left:15px;padding-right:15px}@media (min-width: 640px){.uk-container{padding-left:30px;padding-right:30px}}@media (min-width: 960px){.uk-container{padding-left:40px;padding-right:40px}}.uk-container::before,.uk-container::after{content:"";display:table}.uk-container::after{clear:both}.uk-container>:last-child{margin-bottom:0}.uk-container .uk-container{padding-left:0;padding-right:0}.uk-container-small{max-width:900px}.uk-container-large{max-width:1600px}.uk-container-expand{max-width:none}.uk-grid{display:flex;flex-wrap:wrap;margin:0;padding:0;list-style:none}.uk-grid>*{margin:0}.uk-grid>*>:last-child{margin-bottom:0}.uk-grid{margin-left:-30px}.uk-grid>*{padding-left:30px}.uk-grid+.uk-grid,.uk-grid>.uk-grid-margin,*+.uk-grid-margin{margin-top:30px}@media (min-width: 1200px){.uk-grid{margin-left:-40px}.uk-grid>*{padding-left:40px}.uk-grid+.uk-grid,.uk-grid>.uk-grid-margin,*+.uk-grid-margin{margin-top:40px}}.uk-grid-small{margin-left:-15px}.uk-grid-small>*{padding-left:15px}.uk-grid+.uk-grid-small,.uk-grid-small>.uk-grid-margin,*+.uk-grid-margin-small{margin-top:15px}.uk-grid-medium{margin-left:-30px}.uk-grid-medium>*{padding-left:30px}.uk-grid+.uk-grid-medium,.uk-grid-medium>.uk-grid-margin,*+.uk-grid-margin-medium{margin-top:30px}.uk-grid-large{margin-left:-40px}.uk-grid-large>*{padding-left:40px}.uk-grid+.uk-grid-large,.uk-grid-large>.uk-grid-margin,*+.uk-grid-margin-large{margin-top:40px}@media (min-width: 1200px){.uk-grid-large{margin-left:-70px}.uk-grid-large>*{padding-left:70px}.uk-grid+.uk-grid-large,.uk-grid-large>.uk-grid-margin,*+.uk-grid-margin-large{margin-top:70px}}.uk-grid-collapse{margin-left:0}.uk-grid-collapse>*{padding-left:0}.uk-grid+.uk-grid-collapse,.uk-grid-collapse>.uk-grid-margin{margin-top:0}.uk-grid-divider>*{position:relative}.uk-grid-divider>:not(.uk-first-column)::before{content:"";position:absolute;top:0;bottom:0;border-left:1px solid #E5E5E5}.uk-grid-divider.uk-grid-stack>.uk-grid-margin::before{content:"";position:absolute;left:0;right:0;border-top:1px solid #E5E5E5}.uk-grid-divider{margin-left:-60px}.uk-grid-divider>*{padding-left:60px}.uk-grid-divider>:not(.uk-first-column)::before{left:30px}.uk-grid-divider.uk-grid-stack>.uk-grid-margin{margin-top:60px}.uk-grid-divider.uk-grid-stack>.uk-grid-margin::before{top:-30px;left:60px}@media (min-width: 1200px){.uk-grid-divider{margin-left:-80px}.uk-grid-divider>*{padding-left:80px}.uk-grid-divider>:not(.uk-first-column)::before{left:40px}.uk-grid-divider.uk-grid-stack>.uk-grid-margin{margin-top:80px}.uk-grid-divider.uk-grid-stack>.uk-grid-margin::before{top:-40px;left:80px}}.uk-grid-divider.uk-grid-small{margin-left:-30px}.uk-grid-divider.uk-grid-small>*{padding-left:30px}.uk-grid-divider.uk-grid-small>:not(.uk-first-column)::before{left:15px}.uk-grid-divider.uk-grid-small.uk-grid-stack>.uk-grid-margin{margin-top:30px}.uk-grid-divider.uk-grid-small.uk-grid-stack>.uk-grid-margin::before{top:-15px;left:30px}.uk-grid-divider.uk-grid-medium{margin-left:-60px}.uk-grid-divider.uk-grid-medium>*{padding-left:60px}.uk-grid-divider.uk-grid-medium>:not(.uk-first-column)::before{left:30px}.uk-grid-divider.uk-grid-medium.uk-grid-stack>.uk-grid-margin{margin-top:60px}.uk-grid-divider.uk-grid-medium.uk-grid-stack>.uk-grid-margin::before{top:-30px;left:60px}.uk-grid-divider.uk-grid-large{margin-left:-80px}.uk-grid-divider.uk-grid-large>*{padding-left:80px}.uk-grid-divider.uk-grid-large>:not(.uk-first-column)::before{left:40px}.uk-grid-divider.uk-grid-large.uk-grid-stack>.uk-grid-margin{margin-top:80px}.uk-grid-divider.uk-grid-large.uk-grid-stack>.uk-grid-margin::before{top:-40px;left:80px}@media (min-width: 1200px){.uk-grid-divider.uk-grid-large{margin-left:-140px}.uk-grid-divider.uk-grid-large>*{padding-left:140px}.uk-grid-divider.uk-grid-large>:not(.uk-first-column)::before{left:70px}.uk-grid-divider.uk-grid-large.uk-grid-stack>.uk-grid-margin{margin-top:140px}.uk-grid-divider.uk-grid-large.uk-grid-stack>.uk-grid-margin::before{top:-70px;left:140px}}.uk-grid-match>*,.uk-grid-item-match{display:flex;flex-wrap:wrap}.uk-grid-match>*>:not([class*='uk-width']),.uk-grid-item-match>:not([class*='uk-width']){box-sizing:border-box;width:100%;flex:auto}.uk-tile{position:relative;box-sizing:border-box;padding-left:15px;padding-right:15px;padding-top:40px;padding-bottom:40px}@media (min-width: 640px){.uk-tile{padding-left:30px;padding-right:30px}}@media (min-width: 960px){.uk-tile{padding-left:40px;padding-right:40px;padding-top:70px;padding-bottom:70px}}.uk-tile::before,.uk-tile::after{content:"";display:table}.uk-tile::after{clear:both}.uk-tile>:last-child{margin-bottom:0}.uk-tile-xsmall{padding-top:20px;padding-bottom:20px}.uk-tile-small{padding-top:40px;padding-bottom:40px}.uk-tile-large{padding-top:70px;padding-bottom:70px}@media (min-width: 960px){.uk-tile-large{padding-top:140px;padding-bottom:140px}}.uk-tile-xlarge{padding-top:140px;padding-bottom:140px}@media (min-width: 960px){.uk-tile-xlarge{padding-top:210px;padding-bottom:210px}}.uk-tile-default{background:#fff}.uk-tile-muted{background:#f8f8f8}.uk-tile-primary{background:#7289DA}.uk-tile-secondary{background:#222}.uk-card{position:relative;box-sizing:border-box;color:#000}.uk-card-body{padding:30px 30px}.uk-card-header{padding:15px 30px}.uk-card-footer{padding:15px 30px}@media (min-width: 1200px){.uk-card-body{padding:40px 40px}.uk-card-header{padding:20px 40px}.uk-card-footer{padding:20px 40px}}.uk-card-body::before,.uk-card-body::after,.uk-card-header::before,.uk-card-header::after,.uk-card-footer::before,.uk-card-footer::after{content:"";display:table}.uk-card-body::after,.uk-card-header::after,.uk-card-footer::after{clear:both}.uk-card-body>:last-child,.uk-card-header>:last-child,.uk-card-footer>:last-child{margin-bottom:0}.uk-card-title{font-size:1.5rem;line-height:1.4}.uk-card-badge{position:absolute;top:30px;right:30px;z-index:1}.uk-card-badge:first-child+*{margin-top:0}.uk-card-hover:not(.uk-card-default):not(.uk-card-primary):not(.uk-card-secondary):hover{background:#fff;box-shadow:0 14px 25px rgba(0,0,0,0.16)}.uk-card-default{background:#fff;color:#666;box-shadow:0 5px 15px rgba(0,0,0,0.08)}.uk-card-default .uk-card-title{color:#333}.uk-card-default.uk-card-hover:hover{background-color:#fff;box-shadow:0 14px 25px rgba(0,0,0,0.16)}.uk-card-default .uk-card-header{border-bottom:1px solid #E5E5E5}.uk-card-default .uk-card-footer{border-top:1px solid #E5E5E5}.uk-card-primary{background:#7289DA;color:#fff;box-shadow:0 5px 15px rgba(0,0,0,0.08)}.uk-card-primary .uk-card-title{color:#fff}.uk-card-primary.uk-card-hover:hover{background-color:#7289DA;box-shadow:0 14px 25px rgba(0,0,0,0.16)}.uk-card-secondary{background:#222;color:#fff;box-shadow:0 5px 15px rgba(0,0,0,0.08)}.uk-card-secondary .uk-card-title{color:#fff}.uk-card-secondary.uk-card-hover:hover{background-color:#222;box-shadow:0 14px 25px rgba(0,0,0,0.16)}.uk-card-small.uk-card-body,.uk-card-small .uk-card-body{padding:20px 20px}.uk-card-small .uk-card-header{padding:13px 20px}.uk-card-small .uk-card-footer{padding:13px 20px}@media (min-width: 1200px){.uk-card-large.uk-card-body,.uk-card-large .uk-card-body{padding:70px 70px}.uk-card-large .uk-card-header{padding:35px 70px}.uk-card-large .uk-card-footer{padding:35px 70px}}.uk-card-body>.uk-nav-default{margin-left:-30px;margin-right:-30px}.uk-card-body>.uk-nav-default:only-child{margin-top:-15px;margin-bottom:-15px}.uk-card-body .uk-nav-default>li>a,.uk-card-body .uk-nav-default .uk-nav-header,.uk-card-body .uk-nav-default .uk-nav-divider{padding-left:30px;padding-right:30px}.uk-card-body .uk-nav-default .uk-nav-sub{padding-left:45px}@media (min-width: 1200px){.uk-card-body>.uk-nav-default{margin-left:-40px;margin-right:-40px}.uk-card-body>.uk-nav-default:only-child{margin-top:-25px;margin-bottom:-25px}.uk-card-body .uk-nav-default>li>a,.uk-card-body .uk-nav-default .uk-nav-header,.uk-card-body .uk-nav-default .uk-nav-divider{padding-left:40px;padding-right:40px}.uk-card-body .uk-nav-default .uk-nav-sub{padding-left:55px}}.uk-card-small>.uk-nav-default{margin-left:-20px;margin-right:-20px}.uk-card-small>.uk-nav-default:only-child{margin-top:-5px;margin-bottom:-5px}.uk-card-small .uk-nav-default>li>a,.uk-card-small .uk-nav-default .uk-nav-header,.uk-card-small .uk-nav-default .uk-nav-divider{padding-left:20px;padding-right:20px}.uk-card-small .uk-nav-default .uk-nav-sub{padding-left:35px}@media (min-width: 1200px){.uk-card-large>.uk-nav-default{margin:0}.uk-card-large>.uk-nav-default:only-child{margin:0}.uk-card-large .uk-nav-default>li>a,.uk-card-large .uk-nav-default .uk-nav-header,.uk-card-large .uk-nav-default .uk-nav-divider{padding-left:0;padding-right:0}.uk-card-large .uk-nav-default .uk-nav-sub{padding-left:15px}}.uk-close{color:#999;transition:0.1s ease-in-out;transition-property:color, opacity}.uk-close:hover,.uk-close:focus{color:#666;outline:none}.uk-spinner>*{animation:uk-spinner-rotate 1.4s linear infinite}@keyframes uk-spinner-rotate{0%{transform:rotate(0deg)}100%{transform:rotate(270deg)}}.uk-spinner>*>*{stroke-dasharray:88px;stroke-dashoffset:0;transform-origin:center;animation:uk-spinner-dash 1.4s ease-in-out infinite;stroke-width:1;stroke-linecap:round}@keyframes uk-spinner-dash{0%{stroke-dashoffset:88px}50%{stroke-dashoffset:22px;transform:rotate(135deg)}100%{stroke-dashoffset:88px;transform:rotate(450deg)}}.uk-totop{padding:5px;color:#999;transition:color 0.1s ease-in-out}.uk-totop:hover,.uk-totop:focus{color:#666;outline:none}.uk-totop:active{color:#333}.uk-marker{padding:5px;background:#222;color:#fff;border-radius:500px}.uk-marker:hover,.uk-marker:focus{color:#fff;outline:none}.uk-alert{position:relative;margin-bottom:20px;padding:15px 29px 15px 15px;background:#f8f8f8;color:#666}*+.uk-alert{margin-top:20px}.uk-alert>:last-child{margin-bottom:0}.uk-alert-close{position:absolute;top:20px;right:15px;color:inherit;opacity:.4}.uk-alert-close:first-child+*{margin-top:0}.uk-alert-close:hover,.uk-alert-close:focus{color:inherit;opacity:.8}.uk-alert-primary{background:#fbfcfe;color:#7289DA}.uk-alert-success{background:#edfbf6;color:#32d296}.uk-alert-warning{background:#fef5ee;color:#faa05a}.uk-alert-danger{background:#fef4f6;color:#f0506e}.uk-alert h1,.uk-alert h2,.uk-alert h3,.uk-alert h4,.uk-alert h5,.uk-alert h6{color:inherit}.uk-alert a:not([class]){color:inherit;text-decoration:underline}.uk-alert a:not([class]):hover{color:inherit;text-decoration:underline}.uk-badge{box-sizing:border-box;min-width:22px;height:22px;padding:0 5px;border-radius:500px;vertical-align:middle;background:#7289DA;color:#fff;font-size:.875rem;display:inline-flex;justify-content:center;align-items:center}.uk-badge:hover,.uk-badge:focus{color:#fff;text-decoration:none;outline:none}.uk-label{display:inline-block;padding:0 10px;background:#7289DA;line-height:1.5;font-size:.875rem;color:#fff;vertical-align:middle;white-space:nowrap;border-radius:2px;text-transform:uppercase}.uk-label-success{background-color:#32d296;color:#fff}.uk-label-warning{background-color:#faa05a;color:#fff}.uk-label-danger{background-color:#f0506e;color:#fff}.uk-overlay{padding:30px 30px}.uk-overlay>:last-child{margin-bottom:0}.uk-overlay-default{background:rgba(255,255,255,0.8)}.uk-overlay-primary{background:rgba(34,34,34,0.8)}.uk-article::before,.uk-article::after{content:"";display:table}.uk-article::after{clear:both}.uk-article>:last-child{margin-bottom:0}.uk-article+.uk-article{margin-top:70px}.uk-article-title{font-size:2.23125rem;line-height:1.2}@media (min-width: 960px){.uk-article-title{font-size:2.625rem}}.uk-article-meta{font-size:.875rem;line-height:1.4;color:#999}.uk-article-meta a{color:#999}.uk-article-meta a:hover{color:#666;text-decoration:none}.uk-comment-body{overflow-wrap:break-word;word-wrap:break-word}.uk-comment-header{margin-bottom:20px}.uk-comment-body::before,.uk-comment-body::after,.uk-comment-header::before,.uk-comment-header::after{content:"";display:table}.uk-comment-body::after,.uk-comment-header::after{clear:both}.uk-comment-body>:last-child,.uk-comment-header>:last-child{margin-bottom:0}.uk-comment-title{font-size:1.25rem;line-height:1.4}.uk-comment-meta{font-size:.875rem;line-height:1.4;color:#999}.uk-comment-list{padding:0;list-style:none}.uk-comment-list>:nth-child(n+2){margin-top:70px}.uk-comment-list .uk-comment ~ ul{margin:70px 0 0 0;padding-left:30px;list-style:none}@media (min-width: 960px){.uk-comment-list .uk-comment ~ ul{padding-left:100px}}.uk-comment-list .uk-comment ~ ul>:nth-child(n+2){margin-top:70px}.uk-comment-primary{padding:30px;background-color:#f8f8f8}.uk-search{display:inline-block;position:relative;max-width:100%;margin:0}.uk-search-input::-webkit-search-cancel-button,.uk-search-input::-webkit-search-decoration{-webkit-appearance:none}.uk-search-input::-moz-placeholder{opacity:1}.uk-search-input{box-sizing:border-box;margin:0;border-radius:0;font:inherit;overflow:visible;-webkit-appearance:none;vertical-align:middle;width:100%;border:none;color:#666}.uk-search-input:focus{outline:none}.uk-search-input:-ms-input-placeholder{color:#999 !important}.uk-search-input::placeholder{color:#999}.uk-search-icon:focus{outline:none}.uk-search .uk-search-icon{position:absolute;top:0;bottom:0;left:0;display:inline-flex;justify-content:center;align-items:center;color:#999}.uk-search .uk-search-icon:hover{color:#999}.uk-search .uk-search-icon:not(a):not(button):not(input){pointer-events:none}.uk-search .uk-search-icon-flip{right:0;left:auto}.uk-search-default{width:180px}.uk-search-default .uk-search-input{height:40px;padding-left:6px;padding-right:6px;background:rgba(0,0,0,0);border:1px solid #E5E5E5}.uk-search-default .uk-search-input:focus{background-color:rgba(0,0,0,0)}.uk-search-default .uk-search-icon{width:40px}.uk-search-default .uk-search-icon:not(.uk-search-icon-flip) ~ .uk-search-input{padding-left:40px}.uk-search-default .uk-search-icon-flip ~ .uk-search-input{padding-right:40px}.uk-search-navbar{width:400px}.uk-search-navbar .uk-search-input{height:40px;background:rgba(0,0,0,0);font-size:1.5rem}.uk-search-navbar .uk-search-icon{width:40px}.uk-search-navbar .uk-search-icon:not(.uk-search-icon-flip) ~ .uk-search-input{padding-left:40px}.uk-search-navbar .uk-search-icon-flip ~ .uk-search-input{padding-right:40px}.uk-search-large{width:500px}.uk-search-large .uk-search-input{height:80px;background:rgba(0,0,0,0);font-size:2.625rem}.uk-search-large .uk-search-icon{width:80px}.uk-search-large .uk-search-icon:not(.uk-search-icon-flip) ~ .uk-search-input{padding-left:80px}.uk-search-large .uk-search-icon-flip ~ .uk-search-input{padding-right:80px}.uk-search-toggle{color:#999}.uk-search-toggle:hover,.uk-search-toggle:focus{color:#666}.uk-nav,.uk-nav ul{margin:0;padding:0;list-style:none}.uk-nav li>a{display:block;text-decoration:none}.uk-nav li>a:focus{outline:none}.uk-nav>li>a{padding:5px 0}ul.uk-nav-sub{padding:5px 0 5px 15px}.uk-nav-sub ul{padding-left:15px}.uk-nav-sub a{padding:2px 0}.uk-nav-parent-icon>.uk-parent>a::after{content:"";width:1.5em;height:1.5em;float:right;background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2214%22%20height%3D%2214%22%20viewBox%3D%220%200%2014%2014%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Cpolyline%20fill%3D%22none%22%20stroke%3D%22%23666%22%20stroke-width%3D%221.1%22%20points%3D%2210%201%204%207%2010%2013%22%20%2F%3E%0A%3C%2Fsvg%3E");background-repeat:no-repeat;background-position:50% 50%}.uk-nav-parent-icon>.uk-parent.uk-open>a::after{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2214%22%20height%3D%2214%22%20viewBox%3D%220%200%2014%2014%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Cpolyline%20fill%3D%22none%22%20stroke%3D%22%23666%22%20stroke-width%3D%221.1%22%20points%3D%221%204%207%2010%2013%204%22%20%2F%3E%0A%3C%2Fsvg%3E")}.uk-nav-header{padding:5px 0;text-transform:uppercase;font-size:.875rem}.uk-nav-header:not(:first-child){margin-top:20px}.uk-nav-divider{margin:5px 0}.uk-nav-default{font-size:.875rem}.uk-nav-default>li>a{color:#999}.uk-nav-default>li>a:hover,.uk-nav-default>li>a:focus{color:#666}.uk-nav-default>li.uk-active>a{color:#333}.uk-nav-default .uk-nav-header{color:#333}.uk-nav-default .uk-nav-divider{border-top:1px solid #E5E5E5}.uk-nav-default .uk-nav-sub a{color:#999}.uk-nav-default .uk-nav-sub a:hover,.uk-nav-default .uk-nav-sub a:focus{color:#666}.uk-nav-primary>li>a{font-size:1.5rem;line-height:1.5;color:#999}.uk-nav-primary>li>a:hover,.uk-nav-primary>li>a:focus{color:#666}.uk-nav-primary>li.uk-active>a{color:#333}.uk-nav-primary .uk-nav-header{color:#333}.uk-nav-primary .uk-nav-divider{border-top:1px solid #E5E5E5}.uk-nav-primary .uk-nav-sub a{color:#999}.uk-nav-primary .uk-nav-sub a:hover,.uk-nav-primary .uk-nav-sub a:focus{color:#666}.uk-nav-center{text-align:center}.uk-nav-center .uk-nav-sub,.uk-nav-center .uk-nav-sub ul{padding-left:0}.uk-nav-center.uk-nav-parent-icon>.uk-parent>a::after{position:absolute}.uk-navbar{display:flex;position:relative}.uk-navbar-container:not(.uk-navbar-transparent){background:#f8f8f8}.uk-navbar-container>::before,.uk-navbar-container>::after{display:none !important}.uk-navbar-left,.uk-navbar-right,.uk-navbar-center,.uk-navbar-center-left>*,.uk-navbar-center-right>*{display:flex;align-items:center}.uk-navbar-right{margin-left:auto}.uk-navbar-center:only-child{margin-left:auto;margin-right:auto;position:relative}.uk-navbar-center:not(:only-child){position:absolute;top:50%;left:50%;transform:translate(-50%, -50%);z-index:990}.uk-navbar-center:not(:only-child) .uk-navbar-nav>li>a,.uk-navbar-center:not(:only-child) .uk-navbar-item,.uk-navbar-center:not(:only-child) .uk-navbar-toggle{white-space:nowrap}.uk-navbar-center-left,.uk-navbar-center-right{position:absolute;top:0}.uk-navbar-center-left{right:100%}.uk-navbar-center-right{left:100%}[class*='uk-navbar-center-'] .uk-navbar-nav>li>a,[class*='uk-navbar-center-'] .uk-navbar-item,[class*='uk-navbar-center-'] .uk-navbar-toggle{white-space:nowrap}.uk-navbar-nav{display:flex;margin:0;padding:0;list-style:none}.uk-navbar-left,.uk-navbar-right,.uk-navbar-center:only-child{flex-wrap:wrap}.uk-navbar-nav>li>a,.uk-navbar-item,.uk-navbar-toggle{display:flex;justify-content:center;align-items:center;box-sizing:border-box;height:80px;padding:0 15px;font-size:.875rem;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;text-decoration:none}.uk-navbar-nav>li>a{color:#999;text-transform:uppercase;transition:0.1s ease-in-out;transition-property:color, background-color}.uk-navbar-nav>li:hover>a,.uk-navbar-nav>li>a:focus,.uk-navbar-nav>li>a.uk-open{color:#666;outline:none}.uk-navbar-nav>li>a:active{color:#333}.uk-navbar-nav>li.uk-active>a{color:#333}.uk-navbar-item{color:#666}.uk-navbar-toggle{color:#999}.uk-navbar-toggle:hover,.uk-navbar-toggle:focus,.uk-navbar-toggle.uk-open{color:#666;outline:none;text-decoration:none}.uk-navbar-subtitle{font-size:.875rem}.uk-navbar-dropdown{display:none;position:absolute;z-index:1020;box-sizing:border-box;width:200px;padding:25px;background:#fff;color:#666;box-shadow:0 5px 12px rgba(0,0,0,0.15)}.uk-navbar-dropdown.uk-open{display:block}[class*='uk-navbar-dropdown-top']{margin-top:-15px}[class*='uk-navbar-dropdown-bottom']{margin-top:15px}[class*='uk-navbar-dropdown-left']{margin-left:-15px}[class*='uk-navbar-dropdown-right']{margin-left:15px}.uk-navbar-dropdown-grid{margin-left:-50px}.uk-navbar-dropdown-grid>*{padding-left:50px}.uk-navbar-dropdown-grid>.uk-grid-margin{margin-top:50px}.uk-navbar-dropdown-stack .uk-navbar-dropdown-grid>*{width:100% !important}.uk-navbar-dropdown-width-2:not(.uk-navbar-dropdown-stack){width:400px}.uk-navbar-dropdown-width-3:not(.uk-navbar-dropdown-stack){width:600px}.uk-navbar-dropdown-width-4:not(.uk-navbar-dropdown-stack){width:800px}.uk-navbar-dropdown-width-5:not(.uk-navbar-dropdown-stack){width:1000px}.uk-navbar-dropdown-dropbar{margin-top:0;margin-bottom:0;box-shadow:none}.uk-navbar-dropdown-nav{font-size:.875rem}.uk-navbar-dropdown-nav>li>a{color:#999}.uk-navbar-dropdown-nav>li>a:hover,.uk-navbar-dropdown-nav>li>a:focus{color:#666}.uk-navbar-dropdown-nav>li.uk-active>a{color:#333}.uk-navbar-dropdown-nav .uk-nav-header{color:#333}.uk-navbar-dropdown-nav .uk-nav-divider{border-top:1px solid #E5E5E5}.uk-navbar-dropdown-nav .uk-nav-sub a{color:#999}.uk-navbar-dropdown-nav .uk-nav-sub a:hover,.uk-navbar-dropdown-nav .uk-nav-sub a:focus{color:#666}.uk-navbar-dropbar{background:#fff}.uk-navbar-dropbar-slide{position:absolute;z-index:980;left:0;right:0;box-shadow:0 5px 7px rgba(0,0,0,0.05)}.uk-navbar-container>.uk-container .uk-navbar-left{margin-left:-15px;margin-right:-15px}.uk-navbar-container>.uk-container .uk-navbar-right{margin-right:-15px}.uk-navbar-dropdown-grid>*{position:relative}.uk-navbar-dropdown-grid>:not(.uk-first-column)::before{content:"";position:absolute;top:0;bottom:0;left:25px;border-left:1px solid #E5E5E5}.uk-navbar-dropdown-grid.uk-grid-stack>.uk-grid-margin::before{content:"";position:absolute;top:-25px;left:50px;right:0;border-top:1px solid #E5E5E5}.uk-subnav{display:flex;flex-wrap:wrap;margin-left:-20px;padding:0;list-style:none}.uk-subnav>*{flex:none;padding-left:20px;position:relative}.uk-subnav>*>:first-child{display:block;color:#999;font-size:.875rem;text-transform:uppercase;transition:0.1s ease-in-out;transition-property:color, background-color}.uk-subnav>*>a:hover,.uk-subnav>*>a:focus{color:#666;text-decoration:none;outline:none}.uk-subnav>.uk-active>a{color:#333}.uk-subnav-divider>*{display:flex;align-items:center}.uk-subnav-divider>:nth-child(n+2):not(.uk-first-column)::before{content:"";height:1.5em;margin-left:0px;margin-right:20px;border-left:1px solid #E5E5E5}.uk-subnav-pill>*>:first-child{padding:5px 10px;background:rgba(0,0,0,0);color:#999}.uk-subnav-pill>*>a:hover,.uk-subnav-pill>*>a:focus{background-color:#f8f8f8;color:#666}.uk-subnav-pill>*>a:active{background-color:#f8f8f8;color:#666}.uk-subnav-pill>.uk-active>a{background-color:#7289DA;color:#fff}.uk-subnav>.uk-disabled>a{color:#999}.uk-breadcrumb{display:flex;flex-wrap:wrap;padding:0;list-style:none}.uk-breadcrumb>*{flex:none}.uk-breadcrumb>*>*{display:inline-block;font-size:.875rem;color:#999}.uk-breadcrumb>*>:hover,.uk-breadcrumb>*>:focus{color:#666;text-decoration:none}.uk-breadcrumb>:last-child>*{color:#666}.uk-breadcrumb>:nth-child(n+2):not(.uk-first-column)::before{content:"/";display:inline-block;margin:0 20px;color:#999}.uk-pagination{display:flex;flex-wrap:wrap;margin-left:-20px;padding:0;list-style:none}.uk-pagination>*{flex:none;padding-left:20px;position:relative}.uk-pagination>*>*{display:block;color:#999;transition:color 0.1s ease-in-out}.uk-pagination>*>:hover,.uk-pagination>*>:focus{color:#666;text-decoration:none}.uk-pagination>.uk-active>*{color:#666}.uk-pagination>.uk-disabled>*{color:#999}.uk-tab{display:flex;flex-wrap:wrap;margin-left:-20px;padding:0;list-style:none;position:relative}.uk-tab::before{content:"";position:absolute;bottom:0;left:20px;right:0;border-bottom:1px solid #E5E5E5}.uk-tab>*{flex:none;padding-left:20px;position:relative}.uk-tab>*>a{display:block;text-align:center;padding:5px 10px;color:#999;border-bottom:1px solid transparent;font-size:.875rem;text-transform:uppercase;transition:color 0.1s ease-in-out}.uk-tab>*>a:hover,.uk-tab>*>a:focus{color:#666;text-decoration:none}.uk-tab>.uk-active>a{color:#333;border-color:#7289DA}.uk-tab>.uk-disabled>a{color:#999}.uk-tab-bottom::before{top:0;bottom:auto}.uk-tab-bottom>*>a{border-top:1px solid transparent;border-bottom:none}.uk-tab-left,.uk-tab-right{flex-direction:column;margin-left:0}.uk-tab-left>*,.uk-tab-right>*{padding-left:0}.uk-tab-left::before{top:0;bottom:0;left:auto;right:0;border-left:1px solid #E5E5E5;border-bottom:none}.uk-tab-right::before{top:0;bottom:0;left:0;right:auto;border-left:1px solid #E5E5E5;border-bottom:none}.uk-tab-left>*>a{text-align:left;border-right:1px solid transparent;border-bottom:none}.uk-tab-right>*>a{text-align:left;border-left:1px solid transparent;border-bottom:none}.uk-tab .uk-dropdown{margin-left:30px}.uk-slidenav{padding:5px 10px;color:rgba(102,102,102,0.5);transition:color 0.1s ease-in-out}.uk-slidenav:hover,.uk-slidenav:focus{color:rgba(102,102,102,0.9);outline:none}.uk-slidenav:active{color:rgba(102,102,102,0.5)}.uk-slidenav-large{padding:10px 10px}.uk-slidenav-container{display:flex}.uk-dotnav{display:flex;flex-wrap:wrap;margin:0;padding:0;list-style:none;margin-left:-12px}.uk-dotnav>*{flex:none;padding-left:12px}.uk-dotnav>*>*{display:block;box-sizing:border-box;width:10px;height:10px;border-radius:50%;background:rgba(0,0,0,0);text-indent:100%;overflow:hidden;white-space:nowrap;border:1px solid rgba(102,102,102,0.4);transition:0.2s ease-in-out;transition-property:background-color, border-color}.uk-dotnav>*>:hover,.uk-dotnav>*>:focus{background-color:rgba(102,102,102,0.6);outline:none;border-color:rgba(0,0,0,0)}.uk-dotnav>*>:active{background-color:rgba(102,102,102,0.2);border-color:rgba(0,0,0,0)}.uk-dotnav>.uk-active>*{background-color:rgba(102,102,102,0.6);border-color:rgba(0,0,0,0)}.uk-dotnav-vertical{flex-direction:column;margin-left:0;margin-top:-12px}.uk-dotnav-vertical>*{padding-left:0;padding-top:12px}.uk-thumbnav{display:flex;flex-wrap:wrap;margin:0;padding:0;list-style:none;margin-left:-15px}.uk-thumbnav>*{flex:none;padding-left:15px}.uk-thumbnav>*>*{display:inline-block;position:relative}.uk-thumbnav>*>*::after{content:"";position:absolute;top:0;bottom:0;left:0;right:0;background:rgba(255,255,255,0.4);transition:background-color 0.1s ease-in-out}.uk-thumbnav>*>:hover,.uk-thumbnav>*>:focus{outline:none}.uk-thumbnav>*>:hover::after,.uk-thumbnav>*>:focus::after{background-color:rgba(0,0,0,0)}.uk-thumbnav>.uk-active>*::after{background-color:rgba(0,0,0,0)}.uk-thumbnav-vertical{flex-direction:column;margin-left:0;margin-top:-15px}.uk-thumbnav-vertical>*{padding-left:0;padding-top:15px}.uk-accordion{padding:0;list-style:none}.uk-accordion>:nth-child(n+2){margin-top:20px}.uk-accordion-title{display:block;font-size:1.25rem;line-height:1.4;color:#333;overflow:hidden}.uk-accordion-title::after{content:"";width:1.4em;height:1.4em;float:right;background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2213%22%20height%3D%2213%22%20viewBox%3D%220%200%2013%2013%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Crect%20fill%3D%22%23666%22%20width%3D%2213%22%20height%3D%221%22%20x%3D%220%22%20y%3D%226%22%20%2F%3E%0A%20%20%20%20%3Crect%20fill%3D%22%23666%22%20width%3D%221%22%20height%3D%2213%22%20x%3D%226%22%20y%3D%220%22%20%2F%3E%0A%3C%2Fsvg%3E");background-repeat:no-repeat;background-position:50% 50%}.uk-open>.uk-accordion-title::after{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2213%22%20height%3D%2213%22%20viewBox%3D%220%200%2013%2013%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Crect%20fill%3D%22%23666%22%20width%3D%2213%22%20height%3D%221%22%20x%3D%220%22%20y%3D%226%22%20%2F%3E%0A%3C%2Fsvg%3E")}.uk-accordion-title:hover,.uk-accordion-title:focus{color:#666;text-decoration:none;outline:none}.uk-accordion-content{margin-top:20px}.uk-accordion-content::before,.uk-accordion-content::after{content:"";display:table}.uk-accordion-content::after{clear:both}.uk-accordion-content>:last-child{margin-bottom:0}.uk-drop{display:none;position:absolute;z-index:1020;box-sizing:border-box;width:300px}.uk-drop.uk-open{display:block}[class*='uk-drop-top']{margin-top:-20px}[class*='uk-drop-bottom']{margin-top:20px}[class*='uk-drop-left']{margin-left:-20px}[class*='uk-drop-right']{margin-left:20px}.uk-drop-stack .uk-drop-grid>*{width:100% !important}.uk-dropdown{display:none;position:absolute;z-index:1020;box-sizing:border-box;min-width:200px;padding:25px;background:#fff;color:#666;box-shadow:0 5px 12px rgba(0,0,0,0.15)}.uk-dropdown.uk-open{display:block}.uk-dropdown-nav{white-space:nowrap;font-size:.875rem}.uk-dropdown-nav>li>a{color:#999}.uk-dropdown-nav>li>a:hover,.uk-dropdown-nav>li>a:focus,.uk-dropdown-nav>li.uk-active>a{color:#666}.uk-dropdown-nav .uk-nav-header{color:#333}.uk-dropdown-nav .uk-nav-divider{border-top:1px solid #E5E5E5}.uk-dropdown-nav .uk-nav-sub a{color:#999}.uk-dropdown-nav .uk-nav-sub a:hover,.uk-dropdown-nav .uk-nav-sub a:focus{color:#666}[class*='uk-dropdown-top']{margin-top:-10px}[class*='uk-dropdown-bottom']{margin-top:10px}[class*='uk-dropdown-left']{margin-left:-10px}[class*='uk-dropdown-right']{margin-left:10px}.uk-dropdown-stack .uk-dropdown-grid>*{width:100% !important}.uk-modal{display:none;position:fixed;top:0;right:0;bottom:0;left:0;z-index:1010;overflow-y:auto;-webkit-overflow-scrolling:touch;padding:15px 15px;background:rgba(0,0,0,0.6);opacity:0;transition:opacity 0.15s linear}@media (min-width: 640px){.uk-modal{padding:50px 30px}}@media (min-width: 960px){.uk-modal{padding-left:40px;padding-right:40px}}.uk-modal.uk-open{opacity:1}.uk-modal-page{overflow:hidden}.uk-modal-dialog{position:relative;box-sizing:border-box;margin:0 auto;width:600px;max-width:calc(100% - 0.01px) !important;background:#fff;opacity:0;transform:translateY(-100px);transition:0.3s linear;transition-property:opacity, transform}.uk-open>.uk-modal-dialog{opacity:1;transform:translateY(0)}.uk-modal-container .uk-modal-dialog{width:1200px}.uk-modal-full{padding:0;background:none}.uk-modal-full .uk-modal-dialog{margin:0;width:100%;max-width:100%;transform:translateY(0)}.uk-modal-body{padding:30px 30px}.uk-modal-header{padding:15px 30px;background:#fff;border-bottom:1px solid #E5E5E5}.uk-modal-footer{padding:15px 30px;background:#fff;border-top:1px solid #E5E5E5}.uk-modal-body::before,.uk-modal-body::after,.uk-modal-header::before,.uk-modal-header::after,.uk-modal-footer::before,.uk-modal-footer::after{content:"";display:table}.uk-modal-body::after,.uk-modal-header::after,.uk-modal-footer::after{clear:both}.uk-modal-body>:last-child,.uk-modal-header>:last-child,.uk-modal-footer>:last-child{margin-bottom:0}.uk-modal-title{font-size:2rem;line-height:1.3}[class*='uk-modal-close-']{position:absolute;z-index:1010;top:10px;right:10px;padding:5px}[class*='uk-modal-close-']:first-child+*{margin-top:0}.uk-modal-close-outside{top:0;right:-5px;transform:translate(0, -100%);color:#fff}.uk-modal-close-outside:hover{color:#fff}@media (min-width: 960px){.uk-modal-close-outside{right:0;transform:translate(100%, -100%)}}.uk-modal-close-full{top:0;right:0;padding:20px;background:#fff}.uk-lightbox{display:none;position:fixed;top:0;right:0;bottom:0;left:0;z-index:1010;background:#000;opacity:0;transition:opacity 0.15s linear}.uk-lightbox.uk-open{display:block;opacity:1}.uk-lightbox-page{overflow:hidden}.uk-lightbox-items>*{position:absolute;top:0;right:0;bottom:0;left:0;display:none;justify-content:center;align-items:center;color:rgba(255,255,255,0.7);will-change:transform, opacity}.uk-lightbox-items>*>*{max-width:100vw;max-height:100vh}.uk-lightbox-items>*>:not(iframe){width:auto;height:auto}.uk-lightbox-items>.uk-active{display:flex}.uk-lightbox-toolbar{padding:10px 10px;background:rgba(0,0,0,0.3);color:rgba(255,255,255,0.7)}.uk-lightbox-toolbar *{color:rgba(255,255,255,0.7)}.uk-lightbox-toolbar-icon{padding:5px;color:rgba(255,255,255,0.7)}.uk-lightbox-toolbar-icon:hover{color:#fff}.uk-lightbox-button{box-sizing:border-box;width:50px;height:50px;background:rgba(0,0,0,0.3);color:rgba(255,255,255,0.7);display:inline-flex;justify-content:center;align-items:center}.uk-lightbox-button:hover{color:#fff}.uk-lightbox-iframe{width:80%;height:80%}.uk-slideshow{-webkit-tap-highlight-color:transparent}.uk-slideshow-items{position:relative;z-index:0;margin:0;padding:0;list-style:none;overflow:hidden;-webkit-touch-callout:none}.uk-slideshow-items>*{position:absolute;top:0;left:0;right:0;bottom:0;overflow:hidden;will-change:transform, opacity;touch-action:pan-y}.uk-slideshow-items>:not(.uk-active){display:none}.uk-slider{-webkit-tap-highlight-color:transparent}.uk-slider-container{overflow:hidden}.uk-slider-items{will-change:transform;position:relative}.uk-slider-items:not(.uk-grid){display:flex;margin:0;padding:0;list-style:none;-webkit-touch-callout:none}.uk-slider-items.uk-grid{flex-wrap:nowrap}.uk-slider-items>*{flex:none;position:relative;touch-action:pan-y}.uk-sticky-fixed{z-index:980;box-sizing:border-box;margin:0 !important;-webkit-backface-visibility:hidden;backface-visibility:hidden}.uk-sticky[class*='uk-animation-']{animation-duration:.2s}.uk-sticky.uk-animation-reverse{animation-duration:.2s}.uk-offcanvas{display:none;position:fixed;top:0;bottom:0;left:0;z-index:1000}.uk-offcanvas-flip .uk-offcanvas{right:0;left:auto}.uk-offcanvas-bar{position:absolute;top:0;bottom:0;left:0;box-sizing:border-box;width:270px;padding:20px 20px;background:#222;overflow-y:auto;-webkit-overflow-scrolling:touch;transform:translateX(-100%)}@media (min-width: 960px){.uk-offcanvas-bar{width:350px;padding:40px 40px}}.uk-offcanvas-flip .uk-offcanvas-bar{left:auto;right:0;transform:translateX(100%)}.uk-open>.uk-offcanvas-bar{transform:translateX(0)}.uk-offcanvas-bar-animation{transition:transform 0.3s ease-out}.uk-offcanvas-reveal{position:absolute;top:0;bottom:0;left:0;width:0;overflow:hidden;transition:width 0.3s ease-out}.uk-offcanvas-reveal .uk-offcanvas-bar{transform:translateX(0)}.uk-open>.uk-offcanvas-reveal{width:270px}@media (min-width: 960px){.uk-open>.uk-offcanvas-reveal{width:350px}}.uk-offcanvas-flip .uk-offcanvas-reveal{right:0;left:auto}.uk-offcanvas-close{position:absolute;z-index:1000;top:20px;right:20px;padding:5px}.uk-offcanvas-overlay{width:100vw;touch-action:none}.uk-offcanvas-overlay::before{content:"";position:absolute;top:0;bottom:0;left:0;right:0;background:rgba(0,0,0,0.1);opacity:0;transition:opacity 0.15s linear}.uk-offcanvas-overlay.uk-open::before{opacity:1}.uk-offcanvas-page,.uk-offcanvas-container{overflow-x:hidden}.uk-offcanvas-container-overlay{overflow:hidden}.uk-offcanvas-container .uk-offcanvas-content{position:relative;left:0;transition:left 0.3s ease-out;-webkit-overflow-scrolling:touch}.uk-offcanvas-overlay .uk-offcanvas-content{overflow-y:hidden}:not(.uk-offcanvas-flip)>.uk-offcanvas-content-animation{left:270px}.uk-offcanvas-flip>.uk-offcanvas-content-animation{left:-270px}@media (min-width: 960px){:not(.uk-offcanvas-flip)>.uk-offcanvas-content-animation{left:350px}.uk-offcanvas-flip>.uk-offcanvas-content-animation{left:-350px}}.uk-switcher{margin:0;padding:0;list-style:none}.uk-switcher>:not(.uk-active){display:none}.uk-switcher>*>:last-child{margin-bottom:0}.uk-leader{overflow:hidden}.uk-leader-fill::after{display:inline-block;margin-left:15px;width:0;content:attr(data-fill);white-space:nowrap}.uk-leader-fill.uk-leader-hide::after{display:none}.var-leader-fill::before{content:"."}.uk-iconnav{display:flex;flex-wrap:wrap;margin:0;padding:0;list-style:none;margin-left:-10px}.uk-iconnav>*{flex:none;padding-left:10px}.uk-iconnav>*>a{display:block;color:#999}.uk-iconnav>*>a:hover,.uk-iconnav>*>a:focus{color:#666;outline:none}.uk-iconnav>.uk-active>a{color:#666}.uk-iconnav-vertical{flex-direction:column;margin-left:0;margin-top:-10px}.uk-iconnav-vertical>*{padding-left:0;padding-top:10px}.uk-notification{position:fixed;top:10px;left:10px;z-index:1040;box-sizing:border-box;width:350px}.uk-notification-top-right,.uk-notification-bottom-right{left:auto;right:10px}.uk-notification-top-center,.uk-notification-bottom-center{left:50%;margin-left:-175px}.uk-notification-bottom-left,.uk-notification-bottom-right,.uk-notification-bottom-center{top:auto;bottom:10px}@media (max-width: 639px){.uk-notification{left:10px;right:10px;width:auto;margin:0}}.uk-notification-message{position:relative;margin-bottom:10px;padding:15px;background:#f8f8f8;color:#666;font-size:1.25rem;line-height:1.4;cursor:pointer}.uk-notification-close{display:none;position:absolute;top:20px;right:15px}.uk-notification-message:hover .uk-notification-close{display:block}.uk-notification-message-primary{color:#7289DA}.uk-notification-message-success{color:#32d296}.uk-notification-message-warning{color:#faa05a}.uk-notification-message-danger{color:#f0506e}.uk-tooltip{display:none;position:absolute;z-index:1030;box-sizing:border-box;max-width:200px;padding:3px 6px;background:#666;border-radius:2px;color:#fff;font-size:12px}.uk-tooltip.uk-active{display:block}[class*='uk-tooltip-top']{margin-top:-10px}[class*='uk-tooltip-bottom']{margin-top:10px}[class*='uk-tooltip-left']{margin-left:-10px}[class*='uk-tooltip-right']{margin-left:10px}.uk-placeholder{margin-bottom:20px;padding:30px 30px;background:rgba(0,0,0,0);border:1px dashed #E5E5E5}*+.uk-placeholder{margin-top:20px}.uk-placeholder>:last-child{margin-bottom:0}.uk-progress{vertical-align:baseline;-webkit-appearance:none;-moz-appearance:none;display:block;width:100%;border:0;background-color:#f8f8f8;margin-bottom:20px;height:15px;border-radius:500px;overflow:hidden}*+.uk-progress{margin-top:20px}.uk-progress:indeterminate{color:transparent}.uk-progress::-webkit-progress-bar{background-color:#f8f8f8;border-radius:500px;overflow:hidden}.uk-progress:indeterminate::-moz-progress-bar{width:0}.uk-progress::-webkit-progress-value{background-color:#7289DA;transition:width 0.6s ease}.uk-progress::-moz-progress-bar{background-color:#7289DA}.uk-progress::-ms-fill{background-color:#7289DA;transition:width 0.6s ease;border:0}.uk-sortable{position:relative}.uk-sortable>*{touch-action:none}.uk-sortable svg{pointer-events:none}.uk-sortable>:last-child{margin-bottom:0}.uk-sortable-drag{position:absolute !important;z-index:1050 !important;pointer-events:none}.uk-sortable-placeholder{opacity:0}.uk-sortable-empty{min-height:50px}.uk-sortable-handle:hover{cursor:move}.uk-countdown-number,.uk-countdown-separator{line-height:70px}.uk-countdown-number{font-size:2rem}@media (min-width: 640px){.uk-countdown-number{font-size:4rem}}@media (min-width: 960px){.uk-countdown-number{font-size:6rem}}.uk-countdown-separator{font-size:1rem}@media (min-width: 640px){.uk-countdown-separator{font-size:2rem}}@media (min-width: 960px){.uk-countdown-separator{font-size:3rem}}[class*='uk-animation-']{animation-duration:.5s;animation-timing-function:ease-out;animation-fill-mode:both}.uk-animation-reverse{animation-direction:reverse;animation-timing-function:ease-in}.uk-animation-fade{animation-name:uk-fade;animation-duration:.8s;animation-timing-function:linear}.uk-animation-scale-up{animation-name:uk-fade-scale-02}.uk-animation-scale-down{animation-name:uk-fade-scale-18}.uk-animation-slide-top{animation-name:uk-fade-top}.uk-animation-slide-bottom{animation-name:uk-fade-bottom}.uk-animation-slide-left{animation-name:uk-fade-left}.uk-animation-slide-right{animation-name:uk-fade-right}.uk-animation-slide-top-small{animation-name:uk-fade-top-small}.uk-animation-slide-bottom-small{animation-name:uk-fade-bottom-small}.uk-animation-slide-left-small{animation-name:uk-fade-left-small}.uk-animation-slide-right-small{animation-name:uk-fade-right-small}.uk-animation-slide-top-medium{animation-name:uk-fade-top-medium}.uk-animation-slide-bottom-medium{animation-name:uk-fade-bottom-medium}.uk-animation-slide-left-medium{animation-name:uk-fade-left-medium}.uk-animation-slide-right-medium{animation-name:uk-fade-right-medium}.uk-animation-kenburns{animation-name:uk-scale-kenburns;animation-duration:15s}.uk-animation-shake{animation-name:uk-shake}.uk-animation-fast{animation-duration:.1s}.uk-animation-toggle:not(:hover):not(.uk-hover) [class*='uk-animation-']{animation-name:none}@keyframes uk-fade{0%{opacity:0}100%{opacity:1}}@keyframes uk-fade-top{0%{opacity:0;transform:translateY(-100%)}100%{opacity:1;transform:translateY(0)}}@keyframes uk-fade-bottom{0%{opacity:0;transform:translateY(100%)}100%{opacity:1;transform:translateY(0)}}@keyframes uk-fade-left{0%{opacity:0;transform:translateX(-100%)}100%{opacity:1;transform:translateX(0)}}@keyframes uk-fade-right{0%{opacity:0;transform:translateX(100%)}100%{opacity:1;transform:translateX(0)}}@keyframes uk-fade-top-small{0%{opacity:0;transform:translateY(-10px)}100%{opacity:1;transform:translateY(0)}}@keyframes uk-fade-bottom-small{0%{opacity:0;transform:translateY(10px)}100%{opacity:1;transform:translateY(0)}}@keyframes uk-fade-left-small{0%{opacity:0;transform:translateX(-10px)}100%{opacity:1;transform:translateX(0)}}@keyframes uk-fade-right-small{0%{opacity:0;transform:translateX(10px)}100%{opacity:1;transform:translateX(0)}}@keyframes uk-fade-top-medium{0%{opacity:0;transform:translateY(-50px)}100%{opacity:1;transform:translateY(0)}}@keyframes uk-fade-bottom-medium{0%{opacity:0;transform:translateY(50px)}100%{opacity:1;transform:translateY(0)}}@keyframes uk-fade-left-medium{0%{opacity:0;transform:translateX(-50px)}100%{opacity:1;transform:translateX(0)}}@keyframes uk-fade-right-medium{0%{opacity:0;transform:translateX(50px)}100%{opacity:1;transform:translateX(0)}}@keyframes uk-fade-scale-02{0%{opacity:0;transform:scale(0.2)}100%{opacity:1;transform:scale(1)}}@keyframes uk-fade-scale-18{0%{opacity:0;transform:scale(1.8)}100%{opacity:1;transform:scale(1)}}@keyframes uk-scale-kenburns{0%{transform:scale(1)}100%{transform:scale(1.2)}}@keyframes uk-shake{0%,100%{transform:translateX(0)}10%{transform:translateX(-9px)}20%{transform:translateX(8px)}30%{transform:translateX(-7px)}40%{transform:translateX(6px)}50%{transform:translateX(-5px)}60%{transform:translateX(4px)}70%{transform:translateX(-3px)}80%{transform:translateX(2px)}90%{transform:translateX(-1px)}}[class*='uk-child-width']>*{box-sizing:border-box;width:100%}.uk-child-width-1-2>*{width:50%}.uk-child-width-1-3>*{width:calc(100% * 1 / 3.001)}.uk-child-width-1-4>*{width:25%}.uk-child-width-1-5>*{width:20%}.uk-child-width-1-6>*{width:calc(100% * 1 / 6.001)}.uk-child-width-auto>*{width:auto}.uk-child-width-expand>*{width:1px}.uk-child-width-expand>:not([class*='uk-width']){flex:1;min-width:0;flex-basis:1px}@media (min-width: 640px){.uk-child-width-1-1\@s>*{width:100%}.uk-child-width-1-2\@s>*{width:50%}.uk-child-width-1-3\@s>*{width:calc(100% * 1 / 3.001)}.uk-child-width-1-4\@s>*{width:25%}.uk-child-width-1-5\@s>*{width:20%}.uk-child-width-1-6\@s>*{width:calc(100% * 1 / 6.001)}.uk-child-width-auto\@s>*{width:auto}.uk-child-width-expand\@s>*{width:1px}.uk-child-width-expand\@s>:not([class*='uk-width']){flex:1;min-width:0;flex-basis:1px}}@media (min-width: 960px){.uk-child-width-1-1\@m>*{width:100%}.uk-child-width-1-2\@m>*{width:50%}.uk-child-width-1-3\@m>*{width:calc(100% * 1 / 3.001)}.uk-child-width-1-4\@m>*{width:25%}.uk-child-width-1-5\@m>*{width:20%}.uk-child-width-1-6\@m>*{width:calc(100% * 1 / 6.001)}.uk-child-width-auto\@m>*{width:auto}.uk-child-width-expand\@m>*{width:1px}.uk-child-width-expand\@m>:not([class*='uk-width']){flex:1;min-width:0;flex-basis:1px}}@media (min-width: 1200px){.uk-child-width-1-1\@l>*{width:100%}.uk-child-width-1-2\@l>*{width:50%}.uk-child-width-1-3\@l>*{width:calc(100% * 1 / 3.001)}.uk-child-width-1-4\@l>*{width:25%}.uk-child-width-1-5\@l>*{width:20%}.uk-child-width-1-6\@l>*{width:calc(100% * 1 / 6.001)}.uk-child-width-auto\@l>*{width:auto}.uk-child-width-expand\@l>*{width:1px}.uk-child-width-expand\@l>:not([class*='uk-width']){flex:1;min-width:0;flex-basis:1px}}@media (min-width: 1600px){.uk-child-width-1-1\@xl>*{width:100%}.uk-child-width-1-2\@xl>*{width:50%}.uk-child-width-1-3\@xl>*{width:calc(100% * 1 / 3.001)}.uk-child-width-1-4\@xl>*{width:25%}.uk-child-width-1-5\@xl>*{width:20%}.uk-child-width-1-6\@xl>*{width:calc(100% * 1 / 6.001)}.uk-child-width-auto\@xl>*{width:auto}.uk-child-width-expand\@xl>*{width:1px}.uk-child-width-expand\@xl>:not([class*='uk-width']){flex:1;min-width:0;flex-basis:1px}}[class*='uk-width']{box-sizing:border-box;width:100%;max-width:100%}.uk-width-1-2{width:50%}.uk-width-1-3{width:calc(100% * 1 / 3.001)}.uk-width-2-3{width:calc(100% * 2 / 3.001)}.uk-width-1-4{width:25%}.uk-width-3-4{width:75%}.uk-width-1-5{width:20%}.uk-width-2-5{width:40%}.uk-width-3-5{width:60%}.uk-width-4-5{width:80%}.uk-width-1-6{width:calc(100% * 1 / 6.001)}.uk-width-5-6{width:calc(100% * 5 / 6.001)}.uk-width-small{width:150px}.uk-width-medium{width:300px}.uk-width-large{width:450px}.uk-width-xlarge{width:600px}.uk-width-xxlarge{width:750px}.uk-width-auto{width:auto}.uk-width-expand{width:1px;flex:1;min-width:0;flex-basis:1px}@media (min-width: 640px){.uk-width-1-1\@s{width:100%}.uk-width-1-2\@s{width:50%}.uk-width-1-3\@s{width:calc(100% * 1 / 3.001)}.uk-width-2-3\@s{width:calc(100% * 2 / 3.001)}.uk-width-1-4\@s{width:25%}.uk-width-3-4\@s{width:75%}.uk-width-1-5\@s{width:20%}.uk-width-2-5\@s{width:40%}.uk-width-3-5\@s{width:60%}.uk-width-4-5\@s{width:80%}.uk-width-1-6\@s{width:calc(100% * 1 / 6.001)}.uk-width-5-6\@s{width:calc(100% * 5 / 6.001)}.uk-width-small\@s{width:150px}.uk-width-medium\@s{width:300px}.uk-width-large\@s{width:450px}.uk-width-xlarge\@s{width:600px}.uk-width-xxlarge\@s{width:750px}.uk-width-auto\@s{width:auto}.uk-width-expand\@s{width:1px;flex:1;min-width:0;flex-basis:1px}}@media (min-width: 960px){.uk-width-1-1\@m{width:100%}.uk-width-1-2\@m{width:50%}.uk-width-1-3\@m{width:calc(100% * 1 / 3.001)}.uk-width-2-3\@m{width:calc(100% * 2 / 3.001)}.uk-width-1-4\@m{width:25%}.uk-width-3-4\@m{width:75%}.uk-width-1-5\@m{width:20%}.uk-width-2-5\@m{width:40%}.uk-width-3-5\@m{width:60%}.uk-width-4-5\@m{width:80%}.uk-width-1-6\@m{width:calc(100% * 1 / 6.001)}.uk-width-5-6\@m{width:calc(100% * 5 / 6.001)}.uk-width-small\@m{width:150px}.uk-width-medium\@m{width:300px}.uk-width-large\@m{width:450px}.uk-width-xlarge\@m{width:600px}.uk-width-xxlarge\@m{width:750px}.uk-width-auto\@m{width:auto}.uk-width-expand\@m{width:1px;flex:1;min-width:0;flex-basis:1px}}@media (min-width: 1200px){.uk-width-1-1\@l{width:100%}.uk-width-1-2\@l{width:50%}.uk-width-1-3\@l{width:calc(100% * 1 / 3.001)}.uk-width-2-3\@l{width:calc(100% * 2 / 3.001)}.uk-width-1-4\@l{width:25%}.uk-width-3-4\@l{width:75%}.uk-width-1-5\@l{width:20%}.uk-width-2-5\@l{width:40%}.uk-width-3-5\@l{width:60%}.uk-width-4-5\@l{width:80%}.uk-width-1-6\@l{width:calc(100% * 1 / 6.001)}.uk-width-5-6\@l{width:calc(100% * 5 / 6.001)}.uk-width-small\@l{width:150px}.uk-width-medium\@l{width:300px}.uk-width-large\@l{width:450px}.uk-width-xlarge\@l{width:600px}.uk-width-xxlarge\@l{width:750px}.uk-width-auto\@l{width:auto}.uk-width-expand\@l{width:1px;flex:1;min-width:0;flex-basis:1px}}@media (min-width: 1600px){.uk-width-1-1\@xl{width:100%}.uk-width-1-2\@xl{width:50%}.uk-width-1-3\@xl{width:calc(100% * 1 / 3.001)}.uk-width-2-3\@xl{width:calc(100% * 2 / 3.001)}.uk-width-1-4\@xl{width:25%}.uk-width-3-4\@xl{width:75%}.uk-width-1-5\@xl{width:20%}.uk-width-2-5\@xl{width:40%}.uk-width-3-5\@xl{width:60%}.uk-width-4-5\@xl{width:80%}.uk-width-1-6\@xl{width:calc(100% * 1 / 6.001)}.uk-width-5-6\@xl{width:calc(100% * 5 / 6.001)}.uk-width-small\@xl{width:150px}.uk-width-medium\@xl{width:300px}.uk-width-large\@xl{width:450px}.uk-width-xlarge\@xl{width:600px}.uk-width-xxlarge\@xl{width:750px}.uk-width-auto\@xl{width:auto}.uk-width-expand\@xl{width:1px;flex:1;min-width:0;flex-basis:1px}}[class*='uk-height']{box-sizing:border-box}.uk-height-1-1{height:100%}.uk-height-viewport{min-height:100vh}.uk-height-small{height:150px}.uk-height-medium{height:300px}.uk-height-large{height:450px}.uk-height-max-small{max-height:150px}.uk-height-max-medium{max-height:300px}.uk-height-max-large{max-height:450px}.uk-text-lead{font-size:1.5rem;line-height:1.5;color:#333}.uk-text-meta{font-size:.875rem;line-height:1.4;color:#999}.uk-text-meta a{color:#999}.uk-text-meta a:hover{color:#666;text-decoration:none}.uk-text-small{font-size:.875rem;line-height:1.5}.uk-text-large{font-size:1.5rem;line-height:1.5}.uk-text-bold{font-weight:bolder}.uk-text-uppercase{text-transform:uppercase !important}.uk-text-capitalize{text-transform:capitalize !important}.uk-text-lowercase{text-transform:lowercase !important}.uk-text-muted{color:#999 !important}.uk-text-primary{color:#7289DA !important}.uk-text-success{color:#32d296 !important}.uk-text-warning{color:#faa05a !important}.uk-text-danger{color:#f0506e !important}.uk-text-background{-webkit-background-clip:text;-webkit-text-fill-color:transparent;display:inline-block;color:#7289DA !important}@supports (-webkit-background-clip: text){.uk-text-background{background-color:#7289DA}}.uk-text-left{text-align:left !important}.uk-text-right{text-align:right !important}.uk-text-center{text-align:center !important}.uk-text-justify{text-align:justify !important}@media (min-width: 640px){.uk-text-left\@s{text-align:left !important}.uk-text-right\@s{text-align:right !important}.uk-text-center\@s{text-align:center !important}}@media (min-width: 960px){.uk-text-left\@m{text-align:left !important}.uk-text-right\@m{text-align:right !important}.uk-text-center\@m{text-align:center !important}}@media (min-width: 1200px){.uk-text-left\@l{text-align:left !important}.uk-text-right\@l{text-align:right !important}.uk-text-center\@l{text-align:center !important}}@media (min-width: 1600px){.uk-text-left\@xl{text-align:left !important}.uk-text-right\@xl{text-align:right !important}.uk-text-center\@xl{text-align:center !important}}.uk-text-top{vertical-align:top !important}.uk-text-middle{vertical-align:middle !important}.uk-text-bottom{vertical-align:bottom !important}.uk-text-baseline{vertical-align:baseline !important}.uk-text-nowrap{white-space:nowrap}.uk-text-truncate{max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}th.uk-text-truncate,td.uk-text-truncate{max-width:0}.uk-text-break{overflow-wrap:break-word;word-wrap:break-word}th.uk-text-break,td.uk-text-break{word-break:break-all}[class*='uk-column-']{column-gap:30px}@media (min-width: 1200px){[class*='uk-column-']{column-gap:40px}}[class*='uk-column-'] img{transform:translate3d(0, 0, 0)}.uk-column-divider{column-rule:1px solid #E5E5E5;column-gap:60px}@media (min-width: 1200px){.uk-column-divider{column-gap:80px}}.uk-column-1-2{column-count:2}.uk-column-1-3{column-count:3}.uk-column-1-4{column-count:4}.uk-column-1-5{column-count:5}.uk-column-1-6{column-count:6}@media (min-width: 640px){.uk-column-1-2\@s{column-count:2}.uk-column-1-3\@s{column-count:3}.uk-column-1-4\@s{column-count:4}.uk-column-1-5\@s{column-count:5}.uk-column-1-6\@s{column-count:6}}@media (min-width: 960px){.uk-column-1-2\@m{column-count:2}.uk-column-1-3\@m{column-count:3}.uk-column-1-4\@m{column-count:4}.uk-column-1-5\@m{column-count:5}.uk-column-1-6\@m{column-count:6}}@media (min-width: 1200px){.uk-column-1-2\@l{column-count:2}.uk-column-1-3\@l{column-count:3}.uk-column-1-4\@l{column-count:4}.uk-column-1-5\@l{column-count:5}.uk-column-1-6\@l{column-count:6}}@media (min-width: 1600px){.uk-column-1-2\@xl{column-count:2}.uk-column-1-3\@xl{column-count:3}.uk-column-1-4\@xl{column-count:4}.uk-column-1-5\@xl{column-count:5}.uk-column-1-6\@xl{column-count:6}}.uk-column-span{column-span:all}.uk-cover{max-width:none;position:absolute;left:50%;top:50%;transform:translate(-50%, -50%)}iframe.uk-cover{pointer-events:none}.uk-cover-container{overflow:hidden;position:relative}.uk-background-default{background-color:#fff}.uk-background-muted{background-color:#f8f8f8}.uk-background-primary{background-color:#7289DA}.uk-background-secondary{background-color:#222}.uk-background-cover,.uk-background-contain{background-position:50% 50%;background-repeat:no-repeat}.uk-background-cover{background-size:cover}.uk-background-contain{background-size:contain}.uk-background-top-left{background-position:0 0}.uk-background-top-center{background-position:50% 0}.uk-background-top-right{background-position:100% 0}.uk-background-center-left{background-position:0 50%}.uk-background-center-center{background-position:50% 50%}.uk-background-center-right{background-position:100% 50%}.uk-background-bottom-left{background-position:0 100%}.uk-background-bottom-center{background-position:50% 100%}.uk-background-bottom-right{background-position:100% 100%}.uk-background-norepeat{background-repeat:no-repeat}.uk-background-fixed{background-attachment:fixed}@media (pointer: coarse){.uk-background-fixed{background-attachment:scroll}}@media (max-width: 639px){.uk-background-image\@s{background-image:none !important}}@media (max-width: 959px){.uk-background-image\@m{background-image:none !important}}@media (max-width: 1199px){.uk-background-image\@l{background-image:none !important}}@media (max-width: 1599px){.uk-background-image\@xl{background-image:none !important}}.uk-background-blend-multiply{background-blend-mode:multiply}.uk-background-blend-screen{background-blend-mode:screen}.uk-background-blend-overlay{background-blend-mode:overlay}.uk-background-blend-darken{background-blend-mode:darken}.uk-background-blend-lighten{background-blend-mode:lighten}.uk-background-blend-color-dodge{background-blend-mode:color-dodge}.uk-background-blend-color-burn{background-blend-mode:color-burn}.uk-background-blend-hard-light{background-blend-mode:hard-light}.uk-background-blend-soft-light{background-blend-mode:soft-light}.uk-background-blend-difference{background-blend-mode:difference}.uk-background-blend-exclusion{background-blend-mode:exclusion}.uk-background-blend-hue{background-blend-mode:hue}.uk-background-blend-saturation{background-blend-mode:saturation}.uk-background-blend-color{background-blend-mode:color}.uk-background-blend-luminosity{background-blend-mode:luminosity}[class*='uk-align']{display:block;margin-bottom:30px}*+[class*='uk-align']{margin-top:30px}.uk-align-center{margin-left:auto;margin-right:auto}.uk-align-left{margin-top:0;margin-right:30px;float:left}.uk-align-right{margin-top:0;margin-left:30px;float:right}@media (min-width: 640px){.uk-align-left\@s{margin-top:0;margin-right:30px;float:left}.uk-align-right\@s{margin-top:0;margin-left:30px;float:right}}@media (min-width: 960px){.uk-align-left\@m{margin-top:0;margin-right:30px;float:left}.uk-align-right\@m{margin-top:0;margin-left:30px;float:right}}@media (min-width: 1200px){.uk-align-left\@l{margin-top:0;float:left}.uk-align-right\@l{margin-top:0;float:right}.uk-align-left,.uk-align-left\@s,.uk-align-left\@m,.uk-align-left\@l{margin-right:40px}.uk-align-right,.uk-align-right\@s,.uk-align-right\@m,.uk-align-right\@l{margin-left:40px}}@media (min-width: 1600px){.uk-align-left\@xl{margin-top:0;margin-right:40px;float:left}.uk-align-right\@xl{margin-top:0;margin-left:40px;float:right}}.uk-svg,.uk-svg:not(.uk-preserve) [fill*='#']:not(.uk-preserve),.uk-svg:not(.uk-preserve) [FILL*='#']:not(.uk-preserve){fill:currentcolor}.uk-svg:not(.uk-preserve) [stroke*='#']:not(.uk-preserve),.uk-svg:not(.uk-preserve) [STROKE*='#']:not(.uk-preserve){stroke:currentcolor}.uk-svg{transform:translate(0, 0)}.uk-panel{position:relative;box-sizing:border-box}.uk-panel::before,.uk-panel::after{content:"";display:table}.uk-panel::after{clear:both}.uk-panel>:last-child{margin-bottom:0}.uk-panel-scrollable{height:170px;padding:10px;border:1px solid #E5E5E5;overflow:auto;-webkit-overflow-scrolling:touch;resize:both}.uk-clearfix::before{content:"";display:table-cell}.uk-clearfix::after{content:"";display:table;clear:both}.uk-float-left{float:left}.uk-float-right{float:right}[class*='uk-float-']{max-width:100%}.uk-overflow-hidden{overflow:hidden}.uk-overflow-auto{overflow:auto;-webkit-overflow-scrolling:touch}.uk-overflow-auto>:last-child{margin-bottom:0}.uk-resize{resize:both}.uk-resize-vertical{resize:vertical}.uk-display-block{display:block !important}.uk-display-inline{display:inline !important}.uk-display-inline-block{display:inline-block !important}[class*='uk-inline']{display:inline-block;position:relative;max-width:100%;vertical-align:middle;-webkit-backface-visibility:hidden}.uk-inline-clip{overflow:hidden}.uk-preserve-width,.uk-preserve-width audio,.uk-preserve-width canvas,.uk-preserve-width img,.uk-preserve-width svg,.uk-preserve-width video{max-width:none}.uk-responsive-width,.uk-responsive-height{box-sizing:border-box}.uk-responsive-width{max-width:100% !important;height:auto}.uk-responsive-height{max-height:100%;width:auto;max-width:none}.uk-border-circle{border-radius:50%}.uk-border-rounded{border-radius:5px}.uk-inline-clip[class*='uk-border-']{-webkit-transform:translateZ(0)}.uk-box-shadow-small{box-shadow:0 2px 8px rgba(0,0,0,0.08)}.uk-box-shadow-medium{box-shadow:0 5px 15px rgba(0,0,0,0.08)}.uk-box-shadow-large{box-shadow:0 14px 25px rgba(0,0,0,0.16)}.uk-box-shadow-xlarge{box-shadow:0 28px 50px rgba(0,0,0,0.16)}[class*='uk-box-shadow-hover']{transition:box-shadow .1s ease-in-out}.uk-box-shadow-hover-small:hover{box-shadow:0 2px 8px rgba(0,0,0,0.08)}.uk-box-shadow-hover-medium:hover{box-shadow:0 5px 15px rgba(0,0,0,0.08)}.uk-box-shadow-hover-large:hover{box-shadow:0 14px 25px rgba(0,0,0,0.16)}.uk-box-shadow-hover-xlarge:hover{box-shadow:0 28px 50px rgba(0,0,0,0.16)}@supports (filter: blur(0)){.uk-box-shadow-bottom{display:inline-block;position:relative;max-width:100%;vertical-align:middle}.uk-box-shadow-bottom::before{content:'';position:absolute;bottom:-30px;left:0;right:0;height:30px;border-radius:100%;background:#444;filter:blur(20px)}.uk-box-shadow-bottom>*{position:relative}}.uk-dropcap::first-letter,.uk-dropcap>p:first-of-type::first-letter{display:block;margin-right:10px;float:left;font-size:4.5em;line-height:1;margin-bottom:-2px}@-moz-document url-prefix(){.uk-dropcap::first-letter,.uk-dropcap>p:first-of-type::first-letter{margin-top:1.1%}}@supports (-ms-ime-align: auto){.uk-dropcap>p:first-of-type::first-letter{font-size:1em}}.uk-logo{font-size:1.5rem;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;color:#666;text-decoration:none}.uk-logo:hover,.uk-logo:focus{color:#666;outline:none;text-decoration:none}.uk-logo-inverse{display:none}.uk-disabled{pointer-events:none}.uk-drag,.uk-drag *{cursor:move}.uk-drag iframe{pointer-events:none}.uk-dragover{box-shadow:0 0 20px rgba(100,100,100,0.3)}.uk-blend-multiply{mix-blend-mode:multiply}.uk-blend-screen{mix-blend-mode:screen}.uk-blend-overlay{mix-blend-mode:overlay}.uk-blend-darken{mix-blend-mode:darken}.uk-blend-lighten{mix-blend-mode:lighten}.uk-blend-color-dodge{mix-blend-mode:color-dodge}.uk-blend-color-burn{mix-blend-mode:color-burn}.uk-blend-hard-light{mix-blend-mode:hard-light}.uk-blend-soft-light{mix-blend-mode:soft-light}.uk-blend-difference{mix-blend-mode:difference}.uk-blend-exclusion{mix-blend-mode:exclusion}.uk-blend-hue{mix-blend-mode:hue}.uk-blend-saturation{mix-blend-mode:saturation}.uk-blend-color{mix-blend-mode:color}.uk-blend-luminosity{mix-blend-mode:luminosity}.uk-transform-center{transform:translate(-50%, -50%)}.uk-transform-origin-top-left{transform-origin:0 0}.uk-transform-origin-top-center{transform-origin:50% 0}.uk-transform-origin-top-right{transform-origin:100% 0}.uk-transform-origin-center-left{transform-origin:0 50%}.uk-transform-origin-center-right{transform-origin:100% 50%}.uk-transform-origin-bottom-left{transform-origin:0 100%}.uk-transform-origin-bottom-center{transform-origin:50% 100%}.uk-transform-origin-bottom-right{transform-origin:100% 100%}.uk-flex{display:flex}.uk-flex-inline{display:inline-flex}.uk-flex::before,.uk-flex::after,.uk-flex-inline::before,.uk-flex-inline::after{display:none}.uk-flex-left{justify-content:flex-start}.uk-flex-center{justify-content:center}.uk-flex-right{justify-content:flex-end}.uk-flex-between{justify-content:space-between}.uk-flex-around{justify-content:space-around}@media (min-width: 640px){.uk-flex-left\@s{justify-content:flex-start}.uk-flex-center\@s{justify-content:center}.uk-flex-right\@s{justify-content:flex-end}.uk-flex-between\@s{justify-content:space-between}.uk-flex-around\@s{justify-content:space-around}}@media (min-width: 960px){.uk-flex-left\@m{justify-content:flex-start}.uk-flex-center\@m{justify-content:center}.uk-flex-right\@m{justify-content:flex-end}.uk-flex-between\@m{justify-content:space-between}.uk-flex-around\@m{justify-content:space-around}}@media (min-width: 1200px){.uk-flex-left\@l{justify-content:flex-start}.uk-flex-center\@l{justify-content:center}.uk-flex-right\@l{justify-content:flex-end}.uk-flex-between\@l{justify-content:space-between}.uk-flex-around\@l{justify-content:space-around}}@media (min-width: 1600px){.uk-flex-left\@xl{justify-content:flex-start}.uk-flex-center\@xl{justify-content:center}.uk-flex-right\@xl{justify-content:flex-end}.uk-flex-between\@xl{justify-content:space-between}.uk-flex-around\@xl{justify-content:space-around}}.uk-flex-stretch{align-items:stretch}.uk-flex-top{align-items:flex-start}.uk-flex-middle{align-items:center}.uk-flex-bottom{align-items:flex-end}.uk-flex-row{flex-direction:row}.uk-flex-row-reverse{flex-direction:row-reverse}.uk-flex-column{flex-direction:column}.uk-flex-column-reverse{flex-direction:column-reverse}.uk-flex-nowrap{flex-wrap:nowrap}.uk-flex-wrap{flex-wrap:wrap}.uk-flex-wrap-reverse{flex-wrap:wrap-reverse}.uk-flex-wrap-stretch{align-content:stretch}.uk-flex-wrap-top{align-content:flex-start}.uk-flex-wrap-middle{align-content:center}.uk-flex-wrap-bottom{align-content:flex-end}.uk-flex-wrap-between{align-content:space-between}.uk-flex-wrap-around{align-content:space-around}.uk-flex-first{order:-1}.uk-flex-last{order:99}@media (min-width: 640px){.uk-flex-first\@s{order:-1}.uk-flex-last\@s{order:99}}@media (min-width: 960px){.uk-flex-first\@m{order:-1}.uk-flex-last\@m{order:99}}@media (min-width: 1200px){.uk-flex-first\@l{order:-1}.uk-flex-last\@l{order:99}}@media (min-width: 1600px){.uk-flex-first\@xl{order:-1}.uk-flex-last\@xl{order:99}}.uk-flex-none{flex:none}.uk-flex-auto{flex:auto}.uk-flex-1{flex:1}.uk-margin{margin-bottom:20px}*+.uk-margin{margin-top:20px !important}.uk-margin-top{margin-top:20px !important}.uk-margin-bottom{margin-bottom:20px !important}.uk-margin-left{margin-left:20px !important}.uk-margin-right{margin-right:20px !important}.uk-margin-small{margin-bottom:10px}*+.uk-margin-small{margin-top:10px !important}.uk-margin-small-top{margin-top:10px !important}.uk-margin-small-bottom{margin-bottom:10px !important}.uk-margin-small-left{margin-left:10px !important}.uk-margin-small-right{margin-right:10px !important}.uk-margin-medium{margin-bottom:40px}*+.uk-margin-medium{margin-top:40px !important}.uk-margin-medium-top{margin-top:40px !important}.uk-margin-medium-bottom{margin-bottom:40px !important}.uk-margin-medium-left{margin-left:40px !important}.uk-margin-medium-right{margin-right:40px !important}.uk-margin-large{margin-bottom:40px}*+.uk-margin-large{margin-top:40px !important}.uk-margin-large-top{margin-top:40px !important}.uk-margin-large-bottom{margin-bottom:40px !important}.uk-margin-large-left{margin-left:40px !important}.uk-margin-large-right{margin-right:40px !important}@media (min-width: 1200px){.uk-margin-large{margin-bottom:70px}*+.uk-margin-large{margin-top:70px !important}.uk-margin-large-top{margin-top:70px !important}.uk-margin-large-bottom{margin-bottom:70px !important}.uk-margin-large-left{margin-left:70px !important}.uk-margin-large-right{margin-right:70px !important}}.uk-margin-xlarge{margin-bottom:70px}*+.uk-margin-xlarge{margin-top:70px !important}.uk-margin-xlarge-top{margin-top:70px !important}.uk-margin-xlarge-bottom{margin-bottom:70px !important}.uk-margin-xlarge-left{margin-left:70px !important}.uk-margin-xlarge-right{margin-right:70px !important}@media (min-width: 1200px){.uk-margin-xlarge{margin-bottom:140px}*+.uk-margin-xlarge{margin-top:140px !important}.uk-margin-xlarge-top{margin-top:140px !important}.uk-margin-xlarge-bottom{margin-bottom:140px !important}.uk-margin-xlarge-left{margin-left:140px !important}.uk-margin-xlarge-right{margin-right:140px !important}}.uk-margin-remove{margin:0 !important}.uk-margin-remove-top{margin-top:0 !important}.uk-margin-remove-bottom{margin-bottom:0 !important}.uk-margin-remove-left{margin-left:0 !important}.uk-margin-remove-right{margin-right:0 !important}.uk-margin-remove-vertical{margin-top:0 !important;margin-bottom:0 !important}.uk-margin-remove-adjacent+*{margin-top:0 !important}.uk-margin-auto{margin-left:auto !important;margin-right:auto !important}.uk-margin-auto-top{margin-top:auto !important}.uk-margin-auto-bottom{margin-bottom:auto !important}.uk-margin-auto-left{margin-left:auto !important}.uk-margin-auto-right{margin-right:auto !important}.uk-margin-auto-vertical{margin-top:auto !important;margin-bottom:auto !important}.uk-padding{padding:30px}@media (min-width: 1200px){.uk-padding{padding:40px}}.uk-padding-small{padding:15px}.uk-padding-large{padding:30px}@media (min-width: 1200px){.uk-padding-large{padding:70px}}.uk-padding-remove{padding:0 !important}.uk-padding-remove-top{padding-top:0 !important}.uk-padding-remove-bottom{padding-bottom:0 !important}.uk-padding-remove-left{padding-left:0 !important}.uk-padding-remove-right{padding-right:0 !important}.uk-padding-remove-vertical{padding-top:0 !important;padding-bottom:0 !important}.uk-padding-remove-horizontal{padding-left:0 !important;padding-right:0 !important}[class*='uk-position-top'],[class*='uk-position-bottom'],[class*='uk-position-left'],[class*='uk-position-right'],[class*='uk-position-center']{position:absolute !important}.uk-position-top{top:0;left:0;right:0}.uk-position-bottom{bottom:0;left:0;right:0}.uk-position-left{top:0;bottom:0;left:0}.uk-position-right{top:0;bottom:0;right:0}.uk-position-top-left{top:0;left:0}.uk-position-top-right{top:0;right:0}.uk-position-bottom-left{bottom:0;left:0}.uk-position-bottom-right{bottom:0;right:0}.uk-position-center{top:50%;left:50%;transform:translate(-50%, -50%);display:table;width:-moz-max-content;max-width:100%;box-sizing:border-box}[class*='uk-position-center-left'],[class*='uk-position-center-right']{top:50%;transform:translateY(-50%)}.uk-position-center-left{left:0}.uk-position-center-right{right:0}.uk-position-center-left-out{right:100%;width:max-content}.uk-position-center-right-out{left:100%;width:max-content}.uk-position-top-center,.uk-position-bottom-center{left:50%;transform:translateX(-50%);display:table;width:-moz-max-content;max-width:100%;box-sizing:border-box}.uk-position-top-center{top:0}.uk-position-bottom-center{bottom:0}.uk-position-cover{position:absolute;top:0;bottom:0;left:0;right:0}.uk-position-relative{position:relative !important}.uk-position-absolute{position:absolute !important}.uk-position-fixed{position:fixed !important}.uk-position-z-index{z-index:1}.uk-position-small{margin:15px}.uk-position-small.uk-position-center{transform:translate(-50%, -50%) translate(-15px, -15px)}.uk-position-small[class*='uk-position-center-left'],.uk-position-small[class*='uk-position-center-right']{transform:translateY(-50%) translateY(-15px)}.uk-position-small.uk-position-top-center,.uk-position-small.uk-position-bottom-center{transform:translateX(-50%) translateX(-15px)}.uk-position-medium{margin:30px}.uk-position-medium.uk-position-center{transform:translate(-50%, -50%) translate(-30px, -30px)}.uk-position-medium[class*='uk-position-center-left'],.uk-position-medium[class*='uk-position-center-right']{transform:translateY(-50%) translateY(-30px)}.uk-position-medium.uk-position-top-center,.uk-position-medium.uk-position-bottom-center{transform:translateX(-50%) translateX(-30px)}.uk-position-large{margin:30px}.uk-position-large.uk-position-center{transform:translate(-50%, -50%) translate(-30px, -30px)}.uk-position-large[class*='uk-position-center-left'],.uk-position-large[class*='uk-position-center-right']{transform:translateY(-50%) translateY(-30px)}.uk-position-large.uk-position-top-center,.uk-position-large.uk-position-bottom-center{transform:translateX(-50%) translateX(-30px)}@media (min-width: 1200px){.uk-position-large{margin:50px}.uk-position-large.uk-position-center{transform:translate(-50%, -50%) translate(-50px, -50px)}.uk-position-large[class*='uk-position-center-left'],.uk-position-large[class*='uk-position-center-right']{transform:translateY(-50%) translateY(-50px)}.uk-position-large.uk-position-top-center,.uk-position-large.uk-position-bottom-center{transform:translateX(-50%) translateX(-50px)}}.uk-transition-fade,[class*='uk-transition-scale'],[class*='uk-transition-slide']{transition:.3s ease-out;transition-property:opacity, transform, filter}.uk-transition-toggle:focus{outline:none}.uk-transition-fade{opacity:0}.uk-transition-toggle:hover [class*='uk-transition-fade'],.uk-transition-toggle.uk-hover [class*='uk-transition-fade'],.uk-transition-toggle:focus [class*='uk-transition-fade'],.uk-transition-active.uk-active [class*='uk-transition-fade']{opacity:1}[class*='uk-transition-scale']{opacity:0}.uk-transition-scale-up{transform:scale3d(1, 1, 1)}.uk-transition-scale-down{transform:scale3d(1.1, 1.1, 1)}.uk-transition-toggle:hover .uk-transition-scale-up,.uk-transition-toggle.uk-hover .uk-transition-scale-up,.uk-transition-toggle:focus .uk-transition-scale-up,.uk-transition-active.uk-active .uk-transition-scale-up{opacity:1;transform:scale3d(1.1, 1.1, 1)}.uk-transition-toggle:hover .uk-transition-scale-down,.uk-transition-toggle.uk-hover .uk-transition-scale-down,.uk-transition-toggle:focus .uk-transition-scale-down,.uk-transition-active.uk-active .uk-transition-scale-down{opacity:1;transform:scale3d(1, 1, 1)}[class*='uk-transition-slide']{opacity:0}.uk-transition-slide-top{transform:translateY(-100%)}.uk-transition-slide-bottom{transform:translateY(100%)}.uk-transition-slide-left{transform:translateX(-100%)}.uk-transition-slide-right{transform:translateX(100%)}.uk-transition-slide-top-small{transform:translateY(-10px)}.uk-transition-slide-bottom-small{transform:translateY(10px)}.uk-transition-slide-left-small{transform:translateX(-10px)}.uk-transition-slide-right-small{transform:translateX(10px)}.uk-transition-slide-top-medium{transform:translateY(-50px)}.uk-transition-slide-bottom-medium{transform:translateY(50px)}.uk-transition-slide-left-medium{transform:translateX(-50px)}.uk-transition-slide-right-medium{transform:translateX(50px)}.uk-transition-toggle:hover [class*='uk-transition-slide'],.uk-transition-toggle.uk-hover [class*='uk-transition-slide'],.uk-transition-toggle:focus [class*='uk-transition-slide'],.uk-transition-active.uk-active [class*='uk-transition-slide']{opacity:1;transform:translateX(0) translateY(0)}.uk-transition-opaque{opacity:1}.uk-transition-slow{transition-duration:.7s}[hidden],.uk-hidden{display:none !important}@media (min-width: 640px){.uk-hidden\@s{display:none !important}}@media (min-width: 960px){.uk-hidden\@m{display:none !important}}@media (min-width: 1200px){.uk-hidden\@l{display:none !important}}@media (min-width: 1600px){.uk-hidden\@xl{display:none !important}}@media (max-width: 639px){.uk-visible\@s{display:none !important}}@media (max-width: 959px){.uk-visible\@m{display:none !important}}@media (max-width: 1199px){.uk-visible\@l{display:none !important}}@media (max-width: 1599px){.uk-visible\@xl{display:none !important}}.uk-invisible{visibility:hidden !important}.uk-visible-toggle:not(:hover):not(.uk-hover) .uk-hidden-hover:not(:focus){position:absolute !important;width:0 !important;height:0 !important;padding:0 !important;margin:0 !important;overflow:hidden !important}.uk-visible-toggle:not(:hover):not(.uk-hover) .uk-invisible-hover:not(:focus){opacity:0 !important}@media (pointer: coarse){.uk-hidden-touch{display:none !important}}.uk-hidden-notouch{display:none !important}@media (pointer: coarse){.uk-hidden-notouch{display:block !important}}.uk-light,.uk-section-primary:not(.uk-preserve-color),.uk-section-secondary:not(.uk-preserve-color),.uk-tile-primary:not(.uk-preserve-color),.uk-tile-secondary:not(.uk-preserve-color),.uk-card-primary.uk-card-body,.uk-card-primary>:not([class*='uk-card-media']),.uk-card-secondary.uk-card-body,.uk-card-secondary>:not([class*='uk-card-media']),.uk-overlay-primary,.uk-offcanvas-bar{color:rgba(255,255,255,0.7)}.uk-light a,.uk-section-primary:not(.uk-preserve-color) a,.uk-section-secondary:not(.uk-preserve-color) a,.uk-tile-primary:not(.uk-preserve-color) a,.uk-tile-secondary:not(.uk-preserve-color) a,.uk-card-primary.uk-card-body a,.uk-card-primary>:not([class*='uk-card-media']) a,.uk-card-secondary.uk-card-body a,.uk-card-secondary>:not([class*='uk-card-media']) a,.uk-overlay-primary a,.uk-offcanvas-bar a,.uk-light .uk-link,.uk-section-primary:not(.uk-preserve-color) .uk-link,.uk-section-secondary:not(.uk-preserve-color) .uk-link,.uk-tile-primary:not(.uk-preserve-color) .uk-link,.uk-tile-secondary:not(.uk-preserve-color) .uk-link,.uk-card-primary.uk-card-body .uk-link,.uk-card-primary>:not([class*='uk-card-media']) .uk-link,.uk-card-secondary.uk-card-body .uk-link,.uk-card-secondary>:not([class*='uk-card-media']) .uk-link,.uk-overlay-primary .uk-link,.uk-offcanvas-bar .uk-link{color:#fff}.uk-light a:hover,.uk-section-primary:not(.uk-preserve-color) a:hover,.uk-section-secondary:not(.uk-preserve-color) a:hover,.uk-tile-primary:not(.uk-preserve-color) a:hover,.uk-tile-secondary:not(.uk-preserve-color) a:hover,.uk-card-primary.uk-card-body a:hover,.uk-card-primary>:not([class*='uk-card-media']) a:hover,.uk-card-secondary.uk-card-body a:hover,.uk-card-secondary>:not([class*='uk-card-media']) a:hover,.uk-overlay-primary a:hover,.uk-offcanvas-bar a:hover,.uk-light .uk-link:hover,.uk-section-primary:not(.uk-preserve-color) .uk-link:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-link:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-link:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-link:hover,.uk-card-primary.uk-card-body .uk-link:hover,.uk-card-primary>:not([class*='uk-card-media']) .uk-link:hover,.uk-card-secondary.uk-card-body .uk-link:hover,.uk-card-secondary>:not([class*='uk-card-media']) .uk-link:hover,.uk-overlay-primary .uk-link:hover,.uk-offcanvas-bar .uk-link:hover{color:#fff}.uk-light :not(pre)>code,.uk-section-primary:not(.uk-preserve-color) :not(pre)>code,.uk-section-secondary:not(.uk-preserve-color) :not(pre)>code,.uk-tile-primary:not(.uk-preserve-color) :not(pre)>code,.uk-tile-secondary:not(.uk-preserve-color) :not(pre)>code,.uk-card-primary.uk-card-body :not(pre)>code,.uk-card-primary>:not([class*='uk-card-media']) :not(pre)>code,.uk-card-secondary.uk-card-body :not(pre)>code,.uk-card-secondary>:not([class*='uk-card-media']) :not(pre)>code,.uk-overlay-primary :not(pre)>code,.uk-offcanvas-bar :not(pre)>code,.uk-light :not(pre)>kbd,.uk-section-primary:not(.uk-preserve-color) :not(pre)>kbd,.uk-section-secondary:not(.uk-preserve-color) :not(pre)>kbd,.uk-tile-primary:not(.uk-preserve-color) :not(pre)>kbd,.uk-tile-secondary:not(.uk-preserve-color) :not(pre)>kbd,.uk-card-primary.uk-card-body :not(pre)>kbd,.uk-card-primary>:not([class*='uk-card-media']) :not(pre)>kbd,.uk-card-secondary.uk-card-body :not(pre)>kbd,.uk-card-secondary>:not([class*='uk-card-media']) :not(pre)>kbd,.uk-overlay-primary :not(pre)>kbd,.uk-offcanvas-bar :not(pre)>kbd,.uk-light :not(pre)>samp,.uk-section-primary:not(.uk-preserve-color) :not(pre)>samp,.uk-section-secondary:not(.uk-preserve-color) :not(pre)>samp,.uk-tile-primary:not(.uk-preserve-color) :not(pre)>samp,.uk-tile-secondary:not(.uk-preserve-color) :not(pre)>samp,.uk-card-primary.uk-card-body :not(pre)>samp,.uk-card-primary>:not([class*='uk-card-media']) :not(pre)>samp,.uk-card-secondary.uk-card-body :not(pre)>samp,.uk-card-secondary>:not([class*='uk-card-media']) :not(pre)>samp,.uk-overlay-primary :not(pre)>samp,.uk-offcanvas-bar :not(pre)>samp{color:rgba(255,255,255,0.7);background:rgba(255,255,255,0.1)}.uk-light em,.uk-section-primary:not(.uk-preserve-color) em,.uk-section-secondary:not(.uk-preserve-color) em,.uk-tile-primary:not(.uk-preserve-color) em,.uk-tile-secondary:not(.uk-preserve-color) em,.uk-card-primary.uk-card-body em,.uk-card-primary>:not([class*='uk-card-media']) em,.uk-card-secondary.uk-card-body em,.uk-card-secondary>:not([class*='uk-card-media']) em,.uk-overlay-primary em,.uk-offcanvas-bar em{color:#fff}.uk-light h1,.uk-section-primary:not(.uk-preserve-color) h1,.uk-section-secondary:not(.uk-preserve-color) h1,.uk-tile-primary:not(.uk-preserve-color) h1,.uk-tile-secondary:not(.uk-preserve-color) h1,.uk-card-primary.uk-card-body h1,.uk-card-primary>:not([class*='uk-card-media']) h1,.uk-card-secondary.uk-card-body h1,.uk-card-secondary>:not([class*='uk-card-media']) h1,.uk-overlay-primary h1,.uk-offcanvas-bar h1,.uk-light .uk-h1,.uk-section-primary:not(.uk-preserve-color) .uk-h1,.uk-section-secondary:not(.uk-preserve-color) .uk-h1,.uk-tile-primary:not(.uk-preserve-color) .uk-h1,.uk-tile-secondary:not(.uk-preserve-color) .uk-h1,.uk-card-primary.uk-card-body .uk-h1,.uk-card-primary>:not([class*='uk-card-media']) .uk-h1,.uk-card-secondary.uk-card-body .uk-h1,.uk-card-secondary>:not([class*='uk-card-media']) .uk-h1,.uk-overlay-primary .uk-h1,.uk-offcanvas-bar .uk-h1,.uk-light h2,.uk-section-primary:not(.uk-preserve-color) h2,.uk-section-secondary:not(.uk-preserve-color) h2,.uk-tile-primary:not(.uk-preserve-color) h2,.uk-tile-secondary:not(.uk-preserve-color) h2,.uk-card-primary.uk-card-body h2,.uk-card-primary>:not([class*='uk-card-media']) h2,.uk-card-secondary.uk-card-body h2,.uk-card-secondary>:not([class*='uk-card-media']) h2,.uk-overlay-primary h2,.uk-offcanvas-bar h2,.uk-light .uk-h2,.uk-section-primary:not(.uk-preserve-color) .uk-h2,.uk-section-secondary:not(.uk-preserve-color) .uk-h2,.uk-tile-primary:not(.uk-preserve-color) .uk-h2,.uk-tile-secondary:not(.uk-preserve-color) .uk-h2,.uk-card-primary.uk-card-body .uk-h2,.uk-card-primary>:not([class*='uk-card-media']) .uk-h2,.uk-card-secondary.uk-card-body .uk-h2,.uk-card-secondary>:not([class*='uk-card-media']) .uk-h2,.uk-overlay-primary .uk-h2,.uk-offcanvas-bar .uk-h2,.uk-light h3,.uk-section-primary:not(.uk-preserve-color) h3,.uk-section-secondary:not(.uk-preserve-color) h3,.uk-tile-primary:not(.uk-preserve-color) h3,.uk-tile-secondary:not(.uk-preserve-color) h3,.uk-card-primary.uk-card-body h3,.uk-card-primary>:not([class*='uk-card-media']) h3,.uk-card-secondary.uk-card-body h3,.uk-card-secondary>:not([class*='uk-card-media']) h3,.uk-overlay-primary h3,.uk-offcanvas-bar h3,.uk-light .uk-h3,.uk-section-primary:not(.uk-preserve-color) .uk-h3,.uk-section-secondary:not(.uk-preserve-color) .uk-h3,.uk-tile-primary:not(.uk-preserve-color) .uk-h3,.uk-tile-secondary:not(.uk-preserve-color) .uk-h3,.uk-card-primary.uk-card-body .uk-h3,.uk-card-primary>:not([class*='uk-card-media']) .uk-h3,.uk-card-secondary.uk-card-body .uk-h3,.uk-card-secondary>:not([class*='uk-card-media']) .uk-h3,.uk-overlay-primary .uk-h3,.uk-offcanvas-bar .uk-h3,.uk-light h4,.uk-section-primary:not(.uk-preserve-color) h4,.uk-section-secondary:not(.uk-preserve-color) h4,.uk-tile-primary:not(.uk-preserve-color) h4,.uk-tile-secondary:not(.uk-preserve-color) h4,.uk-card-primary.uk-card-body h4,.uk-card-primary>:not([class*='uk-card-media']) h4,.uk-card-secondary.uk-card-body h4,.uk-card-secondary>:not([class*='uk-card-media']) h4,.uk-overlay-primary h4,.uk-offcanvas-bar h4,.uk-light .uk-h4,.uk-section-primary:not(.uk-preserve-color) .uk-h4,.uk-section-secondary:not(.uk-preserve-color) .uk-h4,.uk-tile-primary:not(.uk-preserve-color) .uk-h4,.uk-tile-secondary:not(.uk-preserve-color) .uk-h4,.uk-card-primary.uk-card-body .uk-h4,.uk-card-primary>:not([class*='uk-card-media']) .uk-h4,.uk-card-secondary.uk-card-body .uk-h4,.uk-card-secondary>:not([class*='uk-card-media']) .uk-h4,.uk-overlay-primary .uk-h4,.uk-offcanvas-bar .uk-h4,.uk-light h5,.uk-section-primary:not(.uk-preserve-color) h5,.uk-section-secondary:not(.uk-preserve-color) h5,.uk-tile-primary:not(.uk-preserve-color) h5,.uk-tile-secondary:not(.uk-preserve-color) h5,.uk-card-primary.uk-card-body h5,.uk-card-primary>:not([class*='uk-card-media']) h5,.uk-card-secondary.uk-card-body h5,.uk-card-secondary>:not([class*='uk-card-media']) h5,.uk-overlay-primary h5,.uk-offcanvas-bar h5,.uk-light .uk-h5,.uk-section-primary:not(.uk-preserve-color) .uk-h5,.uk-section-secondary:not(.uk-preserve-color) .uk-h5,.uk-tile-primary:not(.uk-preserve-color) .uk-h5,.uk-tile-secondary:not(.uk-preserve-color) .uk-h5,.uk-card-primary.uk-card-body .uk-h5,.uk-card-primary>:not([class*='uk-card-media']) .uk-h5,.uk-card-secondary.uk-card-body .uk-h5,.uk-card-secondary>:not([class*='uk-card-media']) .uk-h5,.uk-overlay-primary .uk-h5,.uk-offcanvas-bar .uk-h5,.uk-light h6,.uk-section-primary:not(.uk-preserve-color) h6,.uk-section-secondary:not(.uk-preserve-color) h6,.uk-tile-primary:not(.uk-preserve-color) h6,.uk-tile-secondary:not(.uk-preserve-color) h6,.uk-card-primary.uk-card-body h6,.uk-card-primary>:not([class*='uk-card-media']) h6,.uk-card-secondary.uk-card-body h6,.uk-card-secondary>:not([class*='uk-card-media']) h6,.uk-overlay-primary h6,.uk-offcanvas-bar h6,.uk-light .uk-h6,.uk-section-primary:not(.uk-preserve-color) .uk-h6,.uk-section-secondary:not(.uk-preserve-color) .uk-h6,.uk-tile-primary:not(.uk-preserve-color) .uk-h6,.uk-tile-secondary:not(.uk-preserve-color) .uk-h6,.uk-card-primary.uk-card-body .uk-h6,.uk-card-primary>:not([class*='uk-card-media']) .uk-h6,.uk-card-secondary.uk-card-body .uk-h6,.uk-card-secondary>:not([class*='uk-card-media']) .uk-h6,.uk-overlay-primary .uk-h6,.uk-offcanvas-bar .uk-h6{color:#fff}.uk-light blockquote,.uk-section-primary:not(.uk-preserve-color) blockquote,.uk-section-secondary:not(.uk-preserve-color) blockquote,.uk-tile-primary:not(.uk-preserve-color) blockquote,.uk-tile-secondary:not(.uk-preserve-color) blockquote,.uk-card-primary.uk-card-body blockquote,.uk-card-primary>:not([class*='uk-card-media']) blockquote,.uk-card-secondary.uk-card-body blockquote,.uk-card-secondary>:not([class*='uk-card-media']) blockquote,.uk-overlay-primary blockquote,.uk-offcanvas-bar blockquote{color:#fff}.uk-light blockquote footer,.uk-section-primary:not(.uk-preserve-color) blockquote footer,.uk-section-secondary:not(.uk-preserve-color) blockquote footer,.uk-tile-primary:not(.uk-preserve-color) blockquote footer,.uk-tile-secondary:not(.uk-preserve-color) blockquote footer,.uk-card-primary.uk-card-body blockquote footer,.uk-card-primary>:not([class*='uk-card-media']) blockquote footer,.uk-card-secondary.uk-card-body blockquote footer,.uk-card-secondary>:not([class*='uk-card-media']) blockquote footer,.uk-overlay-primary blockquote footer,.uk-offcanvas-bar blockquote footer{color:rgba(255,255,255,0.7)}.uk-light hr,.uk-section-primary:not(.uk-preserve-color) hr,.uk-section-secondary:not(.uk-preserve-color) hr,.uk-tile-primary:not(.uk-preserve-color) hr,.uk-tile-secondary:not(.uk-preserve-color) hr,.uk-card-primary.uk-card-body hr,.uk-card-primary>:not([class*='uk-card-media']) hr,.uk-card-secondary.uk-card-body hr,.uk-card-secondary>:not([class*='uk-card-media']) hr,.uk-overlay-primary hr,.uk-offcanvas-bar hr,.uk-light .uk-hr,.uk-section-primary:not(.uk-preserve-color) .uk-hr,.uk-section-secondary:not(.uk-preserve-color) .uk-hr,.uk-tile-primary:not(.uk-preserve-color) .uk-hr,.uk-tile-secondary:not(.uk-preserve-color) .uk-hr,.uk-card-primary.uk-card-body .uk-hr,.uk-card-primary>:not([class*='uk-card-media']) .uk-hr,.uk-card-secondary.uk-card-body .uk-hr,.uk-card-secondary>:not([class*='uk-card-media']) .uk-hr,.uk-overlay-primary .uk-hr,.uk-offcanvas-bar .uk-hr{border-top-color:rgba(255,255,255,0.2)}.uk-light a.uk-link-muted,.uk-section-primary:not(.uk-preserve-color) a.uk-link-muted,.uk-section-secondary:not(.uk-preserve-color) a.uk-link-muted,.uk-tile-primary:not(.uk-preserve-color) a.uk-link-muted,.uk-tile-secondary:not(.uk-preserve-color) a.uk-link-muted,.uk-card-primary.uk-card-body a.uk-link-muted,.uk-card-primary>:not([class*='uk-card-media']) a.uk-link-muted,.uk-card-secondary.uk-card-body a.uk-link-muted,.uk-card-secondary>:not([class*='uk-card-media']) a.uk-link-muted,.uk-overlay-primary a.uk-link-muted,.uk-offcanvas-bar a.uk-link-muted,.uk-light .uk-link-muted a,.uk-section-primary:not(.uk-preserve-color) .uk-link-muted a,.uk-section-secondary:not(.uk-preserve-color) .uk-link-muted a,.uk-tile-primary:not(.uk-preserve-color) .uk-link-muted a,.uk-tile-secondary:not(.uk-preserve-color) .uk-link-muted a,.uk-card-primary.uk-card-body .uk-link-muted a,.uk-card-primary>:not([class*='uk-card-media']) .uk-link-muted a,.uk-card-secondary.uk-card-body .uk-link-muted a,.uk-card-secondary>:not([class*='uk-card-media']) .uk-link-muted a,.uk-overlay-primary .uk-link-muted a,.uk-offcanvas-bar .uk-link-muted a{color:rgba(255,255,255,0.5)}.uk-light a.uk-link-muted:hover,.uk-section-primary:not(.uk-preserve-color) a.uk-link-muted:hover,.uk-section-secondary:not(.uk-preserve-color) a.uk-link-muted:hover,.uk-tile-primary:not(.uk-preserve-color) a.uk-link-muted:hover,.uk-tile-secondary:not(.uk-preserve-color) a.uk-link-muted:hover,.uk-card-primary.uk-card-body a.uk-link-muted:hover,.uk-card-primary>:not([class*='uk-card-media']) a.uk-link-muted:hover,.uk-card-secondary.uk-card-body a.uk-link-muted:hover,.uk-card-secondary>:not([class*='uk-card-media']) a.uk-link-muted:hover,.uk-overlay-primary a.uk-link-muted:hover,.uk-offcanvas-bar a.uk-link-muted:hover,.uk-light .uk-link-muted a:hover,.uk-section-primary:not(.uk-preserve-color) .uk-link-muted a:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-link-muted a:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-link-muted a:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-link-muted a:hover,.uk-card-primary.uk-card-body .uk-link-muted a:hover,.uk-card-primary>:not([class*='uk-card-media']) .uk-link-muted a:hover,.uk-card-secondary.uk-card-body .uk-link-muted a:hover,.uk-card-secondary>:not([class*='uk-card-media']) .uk-link-muted a:hover,.uk-overlay-primary .uk-link-muted a:hover,.uk-offcanvas-bar .uk-link-muted a:hover{color:rgba(255,255,255,0.7)}.uk-light a.uk-link-text:hover,.uk-section-primary:not(.uk-preserve-color) a.uk-link-text:hover,.uk-section-secondary:not(.uk-preserve-color) a.uk-link-text:hover,.uk-tile-primary:not(.uk-preserve-color) a.uk-link-text:hover,.uk-tile-secondary:not(.uk-preserve-color) a.uk-link-text:hover,.uk-card-primary.uk-card-body a.uk-link-text:hover,.uk-card-primary>:not([class*='uk-card-media']) a.uk-link-text:hover,.uk-card-secondary.uk-card-body a.uk-link-text:hover,.uk-card-secondary>:not([class*='uk-card-media']) a.uk-link-text:hover,.uk-overlay-primary a.uk-link-text:hover,.uk-offcanvas-bar a.uk-link-text:hover,.uk-light .uk-link-text a:hover,.uk-section-primary:not(.uk-preserve-color) .uk-link-text a:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-link-text a:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-link-text a:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-link-text a:hover,.uk-card-primary.uk-card-body .uk-link-text a:hover,.uk-card-primary>:not([class*='uk-card-media']) .uk-link-text a:hover,.uk-card-secondary.uk-card-body .uk-link-text a:hover,.uk-card-secondary>:not([class*='uk-card-media']) .uk-link-text a:hover,.uk-overlay-primary .uk-link-text a:hover,.uk-offcanvas-bar .uk-link-text a:hover{color:rgba(255,255,255,0.5)}.uk-light a.uk-link-heading:hover,.uk-section-primary:not(.uk-preserve-color) a.uk-link-heading:hover,.uk-section-secondary:not(.uk-preserve-color) a.uk-link-heading:hover,.uk-tile-primary:not(.uk-preserve-color) a.uk-link-heading:hover,.uk-tile-secondary:not(.uk-preserve-color) a.uk-link-heading:hover,.uk-card-primary.uk-card-body a.uk-link-heading:hover,.uk-card-primary>:not([class*='uk-card-media']) a.uk-link-heading:hover,.uk-card-secondary.uk-card-body a.uk-link-heading:hover,.uk-card-secondary>:not([class*='uk-card-media']) a.uk-link-heading:hover,.uk-overlay-primary a.uk-link-heading:hover,.uk-offcanvas-bar a.uk-link-heading:hover,.uk-light .uk-link-heading a:hover,.uk-section-primary:not(.uk-preserve-color) .uk-link-heading a:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-link-heading a:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-link-heading a:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-link-heading a:hover,.uk-card-primary.uk-card-body .uk-link-heading a:hover,.uk-card-primary>:not([class*='uk-card-media']) .uk-link-heading a:hover,.uk-card-secondary.uk-card-body .uk-link-heading a:hover,.uk-card-secondary>:not([class*='uk-card-media']) .uk-link-heading a:hover,.uk-overlay-primary .uk-link-heading a:hover,.uk-offcanvas-bar .uk-link-heading a:hover{color:#fff}.uk-light .uk-heading-divider,.uk-section-primary:not(.uk-preserve-color) .uk-heading-divider,.uk-section-secondary:not(.uk-preserve-color) .uk-heading-divider,.uk-tile-primary:not(.uk-preserve-color) .uk-heading-divider,.uk-tile-secondary:not(.uk-preserve-color) .uk-heading-divider,.uk-card-primary.uk-card-body .uk-heading-divider,.uk-card-primary>:not([class*='uk-card-media']) .uk-heading-divider,.uk-card-secondary.uk-card-body .uk-heading-divider,.uk-card-secondary>:not([class*='uk-card-media']) .uk-heading-divider,.uk-overlay-primary .uk-heading-divider,.uk-offcanvas-bar .uk-heading-divider{border-bottom-color:rgba(255,255,255,0.2)}.uk-light .uk-heading-bullet::before,.uk-section-primary:not(.uk-preserve-color) .uk-heading-bullet::before,.uk-section-secondary:not(.uk-preserve-color) .uk-heading-bullet::before,.uk-tile-primary:not(.uk-preserve-color) .uk-heading-bullet::before,.uk-tile-secondary:not(.uk-preserve-color) .uk-heading-bullet::before,.uk-card-primary.uk-card-body .uk-heading-bullet::before,.uk-card-primary>:not([class*='uk-card-media']) .uk-heading-bullet::before,.uk-card-secondary.uk-card-body .uk-heading-bullet::before,.uk-card-secondary>:not([class*='uk-card-media']) .uk-heading-bullet::before,.uk-overlay-primary .uk-heading-bullet::before,.uk-offcanvas-bar .uk-heading-bullet::before{border-left-color:rgba(255,255,255,0.2)}.uk-light .uk-heading-line>::before,.uk-section-primary:not(.uk-preserve-color) .uk-heading-line>::before,.uk-section-secondary:not(.uk-preserve-color) .uk-heading-line>::before,.uk-tile-primary:not(.uk-preserve-color) .uk-heading-line>::before,.uk-tile-secondary:not(.uk-preserve-color) .uk-heading-line>::before,.uk-card-primary.uk-card-body .uk-heading-line>::before,.uk-card-primary>:not([class*='uk-card-media']) .uk-heading-line>::before,.uk-card-secondary.uk-card-body .uk-heading-line>::before,.uk-card-secondary>:not([class*='uk-card-media']) .uk-heading-line>::before,.uk-overlay-primary .uk-heading-line>::before,.uk-offcanvas-bar .uk-heading-line>::before,.uk-light .uk-heading-line>::after,.uk-section-primary:not(.uk-preserve-color) .uk-heading-line>::after,.uk-section-secondary:not(.uk-preserve-color) .uk-heading-line>::after,.uk-tile-primary:not(.uk-preserve-color) .uk-heading-line>::after,.uk-tile-secondary:not(.uk-preserve-color) .uk-heading-line>::after,.uk-card-primary.uk-card-body .uk-heading-line>::after,.uk-card-primary>:not([class*='uk-card-media']) .uk-heading-line>::after,.uk-card-secondary.uk-card-body .uk-heading-line>::after,.uk-card-secondary>:not([class*='uk-card-media']) .uk-heading-line>::after,.uk-overlay-primary .uk-heading-line>::after,.uk-offcanvas-bar .uk-heading-line>::after{border-bottom-color:rgba(255,255,255,0.2)}.uk-light .uk-divider-icon,.uk-section-primary:not(.uk-preserve-color) .uk-divider-icon,.uk-section-secondary:not(.uk-preserve-color) .uk-divider-icon,.uk-tile-primary:not(.uk-preserve-color) .uk-divider-icon,.uk-tile-secondary:not(.uk-preserve-color) .uk-divider-icon,.uk-card-primary.uk-card-body .uk-divider-icon,.uk-card-primary>:not([class*='uk-card-media']) .uk-divider-icon,.uk-card-secondary.uk-card-body .uk-divider-icon,.uk-card-secondary>:not([class*='uk-card-media']) .uk-divider-icon,.uk-overlay-primary .uk-divider-icon,.uk-offcanvas-bar .uk-divider-icon{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2220%22%20height%3D%2220%22%20viewBox%3D%220%200%2020%2020%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Ccircle%20fill%3D%22none%22%20stroke%3D%22rgba(255,255,255,0.2)%22%20stroke-width%3D%222%22%20cx%3D%2210%22%20cy%3D%2210%22%20r%3D%227%22%20%2F%3E%0A%3C%2Fsvg%3E%0A")}.uk-light .uk-divider-icon::before,.uk-section-primary:not(.uk-preserve-color) .uk-divider-icon::before,.uk-section-secondary:not(.uk-preserve-color) .uk-divider-icon::before,.uk-tile-primary:not(.uk-preserve-color) .uk-divider-icon::before,.uk-tile-secondary:not(.uk-preserve-color) .uk-divider-icon::before,.uk-card-primary.uk-card-body .uk-divider-icon::before,.uk-card-primary>:not([class*='uk-card-media']) .uk-divider-icon::before,.uk-card-secondary.uk-card-body .uk-divider-icon::before,.uk-card-secondary>:not([class*='uk-card-media']) .uk-divider-icon::before,.uk-overlay-primary .uk-divider-icon::before,.uk-offcanvas-bar .uk-divider-icon::before,.uk-light .uk-divider-icon::after,.uk-section-primary:not(.uk-preserve-color) .uk-divider-icon::after,.uk-section-secondary:not(.uk-preserve-color) .uk-divider-icon::after,.uk-tile-primary:not(.uk-preserve-color) .uk-divider-icon::after,.uk-tile-secondary:not(.uk-preserve-color) .uk-divider-icon::after,.uk-card-primary.uk-card-body .uk-divider-icon::after,.uk-card-primary>:not([class*='uk-card-media']) .uk-divider-icon::after,.uk-card-secondary.uk-card-body .uk-divider-icon::after,.uk-card-secondary>:not([class*='uk-card-media']) .uk-divider-icon::after,.uk-overlay-primary .uk-divider-icon::after,.uk-offcanvas-bar .uk-divider-icon::after{border-bottom-color:rgba(255,255,255,0.2)}.uk-light .uk-divider-small::after,.uk-section-primary:not(.uk-preserve-color) .uk-divider-small::after,.uk-section-secondary:not(.uk-preserve-color) .uk-divider-small::after,.uk-tile-primary:not(.uk-preserve-color) .uk-divider-small::after,.uk-tile-secondary:not(.uk-preserve-color) .uk-divider-small::after,.uk-card-primary.uk-card-body .uk-divider-small::after,.uk-card-primary>:not([class*='uk-card-media']) .uk-divider-small::after,.uk-card-secondary.uk-card-body .uk-divider-small::after,.uk-card-secondary>:not([class*='uk-card-media']) .uk-divider-small::after,.uk-overlay-primary .uk-divider-small::after,.uk-offcanvas-bar .uk-divider-small::after{border-top-color:rgba(255,255,255,0.2)}.uk-light .uk-list-divider>li:nth-child(n+2),.uk-section-primary:not(.uk-preserve-color) .uk-list-divider>li:nth-child(n+2),.uk-section-secondary:not(.uk-preserve-color) .uk-list-divider>li:nth-child(n+2),.uk-tile-primary:not(.uk-preserve-color) .uk-list-divider>li:nth-child(n+2),.uk-tile-secondary:not(.uk-preserve-color) .uk-list-divider>li:nth-child(n+2),.uk-card-primary.uk-card-body .uk-list-divider>li:nth-child(n+2),.uk-card-primary>:not([class*='uk-card-media']) .uk-list-divider>li:nth-child(n+2),.uk-card-secondary.uk-card-body .uk-list-divider>li:nth-child(n+2),.uk-card-secondary>:not([class*='uk-card-media']) .uk-list-divider>li:nth-child(n+2),.uk-overlay-primary .uk-list-divider>li:nth-child(n+2),.uk-offcanvas-bar .uk-list-divider>li:nth-child(n+2){border-top-color:rgba(255,255,255,0.2)}.uk-light .uk-list-striped>li:nth-of-type(odd),.uk-section-primary:not(.uk-preserve-color) .uk-list-striped>li:nth-of-type(odd),.uk-section-secondary:not(.uk-preserve-color) .uk-list-striped>li:nth-of-type(odd),.uk-tile-primary:not(.uk-preserve-color) .uk-list-striped>li:nth-of-type(odd),.uk-tile-secondary:not(.uk-preserve-color) .uk-list-striped>li:nth-of-type(odd),.uk-card-primary.uk-card-body .uk-list-striped>li:nth-of-type(odd),.uk-card-primary>:not([class*='uk-card-media']) .uk-list-striped>li:nth-of-type(odd),.uk-card-secondary.uk-card-body .uk-list-striped>li:nth-of-type(odd),.uk-card-secondary>:not([class*='uk-card-media']) .uk-list-striped>li:nth-of-type(odd),.uk-overlay-primary .uk-list-striped>li:nth-of-type(odd),.uk-offcanvas-bar .uk-list-striped>li:nth-of-type(odd){border-top-color:rgba(255,255,255,0.2);border-bottom-color:rgba(255,255,255,0.2)}.uk-light .uk-list-striped>li:nth-of-type(odd),.uk-section-primary:not(.uk-preserve-color) .uk-list-striped>li:nth-of-type(odd),.uk-section-secondary:not(.uk-preserve-color) .uk-list-striped>li:nth-of-type(odd),.uk-tile-primary:not(.uk-preserve-color) .uk-list-striped>li:nth-of-type(odd),.uk-tile-secondary:not(.uk-preserve-color) .uk-list-striped>li:nth-of-type(odd),.uk-card-primary.uk-card-body .uk-list-striped>li:nth-of-type(odd),.uk-card-primary>:not([class*='uk-card-media']) .uk-list-striped>li:nth-of-type(odd),.uk-card-secondary.uk-card-body .uk-list-striped>li:nth-of-type(odd),.uk-card-secondary>:not([class*='uk-card-media']) .uk-list-striped>li:nth-of-type(odd),.uk-overlay-primary .uk-list-striped>li:nth-of-type(odd),.uk-offcanvas-bar .uk-list-striped>li:nth-of-type(odd){background-color:rgba(255,255,255,0.1)}.uk-light .uk-list-bullet>li::before,.uk-section-primary:not(.uk-preserve-color) .uk-list-bullet>li::before,.uk-section-secondary:not(.uk-preserve-color) .uk-list-bullet>li::before,.uk-tile-primary:not(.uk-preserve-color) .uk-list-bullet>li::before,.uk-tile-secondary:not(.uk-preserve-color) .uk-list-bullet>li::before,.uk-card-primary.uk-card-body .uk-list-bullet>li::before,.uk-card-primary>:not([class*='uk-card-media']) .uk-list-bullet>li::before,.uk-card-secondary.uk-card-body .uk-list-bullet>li::before,.uk-card-secondary>:not([class*='uk-card-media']) .uk-list-bullet>li::before,.uk-overlay-primary .uk-list-bullet>li::before,.uk-offcanvas-bar .uk-list-bullet>li::before{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%226%22%20height%3D%226%22%20viewBox%3D%220%200%206%206%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Ccircle%20fill%3D%22rgba(255,255,255,0.7)%22%20cx%3D%223%22%20cy%3D%223%22%20r%3D%223%22%20%2F%3E%0A%3C%2Fsvg%3E")}.uk-light .uk-icon-link,.uk-section-primary:not(.uk-preserve-color) .uk-icon-link,.uk-section-secondary:not(.uk-preserve-color) .uk-icon-link,.uk-tile-primary:not(.uk-preserve-color) .uk-icon-link,.uk-tile-secondary:not(.uk-preserve-color) .uk-icon-link,.uk-card-primary.uk-card-body .uk-icon-link,.uk-card-primary>:not([class*='uk-card-media']) .uk-icon-link,.uk-card-secondary.uk-card-body .uk-icon-link,.uk-card-secondary>:not([class*='uk-card-media']) .uk-icon-link,.uk-overlay-primary .uk-icon-link,.uk-offcanvas-bar .uk-icon-link{color:rgba(255,255,255,0.5)}.uk-light .uk-icon-link:hover,.uk-section-primary:not(.uk-preserve-color) .uk-icon-link:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-icon-link:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-icon-link:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-icon-link:hover,.uk-card-primary.uk-card-body .uk-icon-link:hover,.uk-card-primary>:not([class*='uk-card-media']) .uk-icon-link:hover,.uk-card-secondary.uk-card-body .uk-icon-link:hover,.uk-card-secondary>:not([class*='uk-card-media']) .uk-icon-link:hover,.uk-overlay-primary .uk-icon-link:hover,.uk-offcanvas-bar .uk-icon-link:hover,.uk-light .uk-icon-link:focus,.uk-section-primary:not(.uk-preserve-color) .uk-icon-link:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-icon-link:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-icon-link:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-icon-link:focus,.uk-card-primary.uk-card-body .uk-icon-link:focus,.uk-card-primary>:not([class*='uk-card-media']) .uk-icon-link:focus,.uk-card-secondary.uk-card-body .uk-icon-link:focus,.uk-card-secondary>:not([class*='uk-card-media']) .uk-icon-link:focus,.uk-overlay-primary .uk-icon-link:focus,.uk-offcanvas-bar .uk-icon-link:focus{color:rgba(255,255,255,0.7)}.uk-light .uk-icon-link:active,.uk-section-primary:not(.uk-preserve-color) .uk-icon-link:active,.uk-section-secondary:not(.uk-preserve-color) .uk-icon-link:active,.uk-tile-primary:not(.uk-preserve-color) .uk-icon-link:active,.uk-tile-secondary:not(.uk-preserve-color) .uk-icon-link:active,.uk-card-primary.uk-card-body .uk-icon-link:active,.uk-card-primary>:not([class*='uk-card-media']) .uk-icon-link:active,.uk-card-secondary.uk-card-body .uk-icon-link:active,.uk-card-secondary>:not([class*='uk-card-media']) .uk-icon-link:active,.uk-overlay-primary .uk-icon-link:active,.uk-offcanvas-bar .uk-icon-link:active,.uk-light .uk-active>.uk-icon-link,.uk-section-primary:not(.uk-preserve-color) .uk-active>.uk-icon-link,.uk-section-secondary:not(.uk-preserve-color) .uk-active>.uk-icon-link,.uk-tile-primary:not(.uk-preserve-color) .uk-active>.uk-icon-link,.uk-tile-secondary:not(.uk-preserve-color) .uk-active>.uk-icon-link,.uk-card-primary.uk-card-body .uk-active>.uk-icon-link,.uk-card-primary>:not([class*='uk-card-media']) .uk-active>.uk-icon-link,.uk-card-secondary.uk-card-body .uk-active>.uk-icon-link,.uk-card-secondary>:not([class*='uk-card-media']) .uk-active>.uk-icon-link,.uk-overlay-primary .uk-active>.uk-icon-link,.uk-offcanvas-bar .uk-active>.uk-icon-link{color:rgba(255,255,255,0.7)}.uk-light .uk-icon-button,.uk-section-primary:not(.uk-preserve-color) .uk-icon-button,.uk-section-secondary:not(.uk-preserve-color) .uk-icon-button,.uk-tile-primary:not(.uk-preserve-color) .uk-icon-button,.uk-tile-secondary:not(.uk-preserve-color) .uk-icon-button,.uk-card-primary.uk-card-body .uk-icon-button,.uk-card-primary>:not([class*='uk-card-media']) .uk-icon-button,.uk-card-secondary.uk-card-body .uk-icon-button,.uk-card-secondary>:not([class*='uk-card-media']) .uk-icon-button,.uk-overlay-primary .uk-icon-button,.uk-offcanvas-bar .uk-icon-button{background-color:rgba(255,255,255,0.1);color:rgba(255,255,255,0.5)}.uk-light .uk-icon-button:hover,.uk-section-primary:not(.uk-preserve-color) .uk-icon-button:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-icon-button:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-icon-button:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-icon-button:hover,.uk-card-primary.uk-card-body .uk-icon-button:hover,.uk-card-primary>:not([class*='uk-card-media']) .uk-icon-button:hover,.uk-card-secondary.uk-card-body .uk-icon-button:hover,.uk-card-secondary>:not([class*='uk-card-media']) .uk-icon-button:hover,.uk-overlay-primary .uk-icon-button:hover,.uk-offcanvas-bar .uk-icon-button:hover,.uk-light .uk-icon-button:focus,.uk-section-primary:not(.uk-preserve-color) .uk-icon-button:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-icon-button:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-icon-button:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-icon-button:focus,.uk-card-primary.uk-card-body .uk-icon-button:focus,.uk-card-primary>:not([class*='uk-card-media']) .uk-icon-button:focus,.uk-card-secondary.uk-card-body .uk-icon-button:focus,.uk-card-secondary>:not([class*='uk-card-media']) .uk-icon-button:focus,.uk-overlay-primary .uk-icon-button:focus,.uk-offcanvas-bar .uk-icon-button:focus{background-color:rgba(242,242,242,0.1);color:rgba(255,255,255,0.7)}.uk-light .uk-icon-button:active,.uk-section-primary:not(.uk-preserve-color) .uk-icon-button:active,.uk-section-secondary:not(.uk-preserve-color) .uk-icon-button:active,.uk-tile-primary:not(.uk-preserve-color) .uk-icon-button:active,.uk-tile-secondary:not(.uk-preserve-color) .uk-icon-button:active,.uk-card-primary.uk-card-body .uk-icon-button:active,.uk-card-primary>:not([class*='uk-card-media']) .uk-icon-button:active,.uk-card-secondary.uk-card-body .uk-icon-button:active,.uk-card-secondary>:not([class*='uk-card-media']) .uk-icon-button:active,.uk-overlay-primary .uk-icon-button:active,.uk-offcanvas-bar .uk-icon-button:active{background-color:rgba(230,230,230,0.1);color:rgba(255,255,255,0.7)}.uk-light .uk-input,.uk-section-primary:not(.uk-preserve-color) .uk-input,.uk-section-secondary:not(.uk-preserve-color) .uk-input,.uk-tile-primary:not(.uk-preserve-color) .uk-input,.uk-tile-secondary:not(.uk-preserve-color) .uk-input,.uk-card-primary.uk-card-body .uk-input,.uk-card-primary>:not([class*='uk-card-media']) .uk-input,.uk-card-secondary.uk-card-body .uk-input,.uk-card-secondary>:not([class*='uk-card-media']) .uk-input,.uk-overlay-primary .uk-input,.uk-offcanvas-bar .uk-input,.uk-light .uk-select,.uk-section-primary:not(.uk-preserve-color) .uk-select,.uk-section-secondary:not(.uk-preserve-color) .uk-select,.uk-tile-primary:not(.uk-preserve-color) .uk-select,.uk-tile-secondary:not(.uk-preserve-color) .uk-select,.uk-card-primary.uk-card-body .uk-select,.uk-card-primary>:not([class*='uk-card-media']) .uk-select,.uk-card-secondary.uk-card-body .uk-select,.uk-card-secondary>:not([class*='uk-card-media']) .uk-select,.uk-overlay-primary .uk-select,.uk-offcanvas-bar .uk-select,.uk-light .uk-textarea,.uk-section-primary:not(.uk-preserve-color) .uk-textarea,.uk-section-secondary:not(.uk-preserve-color) .uk-textarea,.uk-tile-primary:not(.uk-preserve-color) .uk-textarea,.uk-tile-secondary:not(.uk-preserve-color) .uk-textarea,.uk-card-primary.uk-card-body .uk-textarea,.uk-card-primary>:not([class*='uk-card-media']) .uk-textarea,.uk-card-secondary.uk-card-body .uk-textarea,.uk-card-secondary>:not([class*='uk-card-media']) .uk-textarea,.uk-overlay-primary .uk-textarea,.uk-offcanvas-bar .uk-textarea{background-color:rgba(255,255,255,0.1);color:rgba(255,255,255,0.7);background-clip:padding-box;border-color:rgba(255,255,255,0.2)}.uk-light .uk-input:focus,.uk-section-primary:not(.uk-preserve-color) .uk-input:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-input:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-input:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-input:focus,.uk-card-primary.uk-card-body .uk-input:focus,.uk-card-primary>:not([class*='uk-card-media']) .uk-input:focus,.uk-card-secondary.uk-card-body .uk-input:focus,.uk-card-secondary>:not([class*='uk-card-media']) .uk-input:focus,.uk-overlay-primary .uk-input:focus,.uk-offcanvas-bar .uk-input:focus,.uk-light .uk-select:focus,.uk-section-primary:not(.uk-preserve-color) .uk-select:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-select:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-select:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-select:focus,.uk-card-primary.uk-card-body .uk-select:focus,.uk-card-primary>:not([class*='uk-card-media']) .uk-select:focus,.uk-card-secondary.uk-card-body .uk-select:focus,.uk-card-secondary>:not([class*='uk-card-media']) .uk-select:focus,.uk-overlay-primary .uk-select:focus,.uk-offcanvas-bar .uk-select:focus,.uk-light .uk-textarea:focus,.uk-section-primary:not(.uk-preserve-color) .uk-textarea:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-textarea:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-textarea:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-textarea:focus,.uk-card-primary.uk-card-body .uk-textarea:focus,.uk-card-primary>:not([class*='uk-card-media']) .uk-textarea:focus,.uk-card-secondary.uk-card-body .uk-textarea:focus,.uk-card-secondary>:not([class*='uk-card-media']) .uk-textarea:focus,.uk-overlay-primary .uk-textarea:focus,.uk-offcanvas-bar .uk-textarea:focus{background-color:rgba(255,255,255,0.1);color:rgba(255,255,255,0.7);border-color:rgba(255,255,255,0.7)}.uk-light .uk-input:-ms-input-placeholder,.uk-section-primary:not(.uk-preserve-color) .uk-input:-ms-input-placeholder,.uk-section-secondary:not(.uk-preserve-color) .uk-input:-ms-input-placeholder,.uk-tile-primary:not(.uk-preserve-color) .uk-input:-ms-input-placeholder,.uk-tile-secondary:not(.uk-preserve-color) .uk-input:-ms-input-placeholder,.uk-card-primary.uk-card-body .uk-input:-ms-input-placeholder,.uk-card-primary>:not([class*='uk-card-media']) .uk-input:-ms-input-placeholder,.uk-card-secondary.uk-card-body .uk-input:-ms-input-placeholder,.uk-card-secondary>:not([class*='uk-card-media']) .uk-input:-ms-input-placeholder,.uk-overlay-primary .uk-input:-ms-input-placeholder,.uk-offcanvas-bar .uk-input:-ms-input-placeholder{color:rgba(255,255,255,0.5) !important}.uk-light .uk-input::placeholder,.uk-section-primary:not(.uk-preserve-color) .uk-input::placeholder,.uk-section-secondary:not(.uk-preserve-color) .uk-input::placeholder,.uk-tile-primary:not(.uk-preserve-color) .uk-input::placeholder,.uk-tile-secondary:not(.uk-preserve-color) .uk-input::placeholder,.uk-card-primary.uk-card-body .uk-input::placeholder,.uk-card-primary>:not([class*='uk-card-media']) .uk-input::placeholder,.uk-card-secondary.uk-card-body .uk-input::placeholder,.uk-card-secondary>:not([class*='uk-card-media']) .uk-input::placeholder,.uk-overlay-primary .uk-input::placeholder,.uk-offcanvas-bar .uk-input::placeholder{color:rgba(255,255,255,0.5)}.uk-light .uk-textarea:-ms-input-placeholder,.uk-section-primary:not(.uk-preserve-color) .uk-textarea:-ms-input-placeholder,.uk-section-secondary:not(.uk-preserve-color) .uk-textarea:-ms-input-placeholder,.uk-tile-primary:not(.uk-preserve-color) .uk-textarea:-ms-input-placeholder,.uk-tile-secondary:not(.uk-preserve-color) .uk-textarea:-ms-input-placeholder,.uk-card-primary.uk-card-body .uk-textarea:-ms-input-placeholder,.uk-card-primary>:not([class*='uk-card-media']) .uk-textarea:-ms-input-placeholder,.uk-card-secondary.uk-card-body .uk-textarea:-ms-input-placeholder,.uk-card-secondary>:not([class*='uk-card-media']) .uk-textarea:-ms-input-placeholder,.uk-overlay-primary .uk-textarea:-ms-input-placeholder,.uk-offcanvas-bar .uk-textarea:-ms-input-placeholder{color:rgba(255,255,255,0.5) !important}.uk-light .uk-textarea::placeholder,.uk-section-primary:not(.uk-preserve-color) .uk-textarea::placeholder,.uk-section-secondary:not(.uk-preserve-color) .uk-textarea::placeholder,.uk-tile-primary:not(.uk-preserve-color) .uk-textarea::placeholder,.uk-tile-secondary:not(.uk-preserve-color) .uk-textarea::placeholder,.uk-card-primary.uk-card-body .uk-textarea::placeholder,.uk-card-primary>:not([class*='uk-card-media']) .uk-textarea::placeholder,.uk-card-secondary.uk-card-body .uk-textarea::placeholder,.uk-card-secondary>:not([class*='uk-card-media']) .uk-textarea::placeholder,.uk-overlay-primary .uk-textarea::placeholder,.uk-offcanvas-bar .uk-textarea::placeholder{color:rgba(255,255,255,0.5)}.uk-light .uk-select:not([multiple]):not([size]),.uk-section-primary:not(.uk-preserve-color) .uk-select:not([multiple]):not([size]),.uk-section-secondary:not(.uk-preserve-color) .uk-select:not([multiple]):not([size]),.uk-tile-primary:not(.uk-preserve-color) .uk-select:not([multiple]):not([size]),.uk-tile-secondary:not(.uk-preserve-color) .uk-select:not([multiple]):not([size]),.uk-card-primary.uk-card-body .uk-select:not([multiple]):not([size]),.uk-card-primary>:not([class*='uk-card-media']) .uk-select:not([multiple]):not([size]),.uk-card-secondary.uk-card-body .uk-select:not([multiple]):not([size]),.uk-card-secondary>:not([class*='uk-card-media']) .uk-select:not([multiple]):not([size]),.uk-overlay-primary .uk-select:not([multiple]):not([size]),.uk-offcanvas-bar .uk-select:not([multiple]):not([size]){background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2224%22%20height%3D%2216%22%20viewBox%3D%220%200%2024%2016%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Cpolygon%20fill%3D%22rgba(255,255,255,0.7)%22%20points%3D%2212%201%209%206%2015%206%22%20%2F%3E%0A%20%20%20%20%3Cpolygon%20fill%3D%22rgba(255,255,255,0.7)%22%20points%3D%2212%2013%209%208%2015%208%22%20%2F%3E%0A%3C%2Fsvg%3E%0A")}.uk-light .uk-radio,.uk-section-primary:not(.uk-preserve-color) .uk-radio,.uk-section-secondary:not(.uk-preserve-color) .uk-radio,.uk-tile-primary:not(.uk-preserve-color) .uk-radio,.uk-tile-secondary:not(.uk-preserve-color) .uk-radio,.uk-card-primary.uk-card-body .uk-radio,.uk-card-primary>:not([class*='uk-card-media']) .uk-radio,.uk-card-secondary.uk-card-body .uk-radio,.uk-card-secondary>:not([class*='uk-card-media']) .uk-radio,.uk-overlay-primary .uk-radio,.uk-offcanvas-bar .uk-radio,.uk-light .uk-checkbox,.uk-section-primary:not(.uk-preserve-color) .uk-checkbox,.uk-section-secondary:not(.uk-preserve-color) .uk-checkbox,.uk-tile-primary:not(.uk-preserve-color) .uk-checkbox,.uk-tile-secondary:not(.uk-preserve-color) .uk-checkbox,.uk-card-primary.uk-card-body .uk-checkbox,.uk-card-primary>:not([class*='uk-card-media']) .uk-checkbox,.uk-card-secondary.uk-card-body .uk-checkbox,.uk-card-secondary>:not([class*='uk-card-media']) .uk-checkbox,.uk-overlay-primary .uk-checkbox,.uk-offcanvas-bar .uk-checkbox{background-color:rgba(242,242,242,0.1);border-color:rgba(255,255,255,0.2)}.uk-light .uk-radio:focus,.uk-section-primary:not(.uk-preserve-color) .uk-radio:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-radio:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-radio:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-radio:focus,.uk-card-primary.uk-card-body .uk-radio:focus,.uk-card-primary>:not([class*='uk-card-media']) .uk-radio:focus,.uk-card-secondary.uk-card-body .uk-radio:focus,.uk-card-secondary>:not([class*='uk-card-media']) .uk-radio:focus,.uk-overlay-primary .uk-radio:focus,.uk-offcanvas-bar .uk-radio:focus,.uk-light .uk-checkbox:focus,.uk-section-primary:not(.uk-preserve-color) .uk-checkbox:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-checkbox:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-checkbox:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-checkbox:focus,.uk-card-primary.uk-card-body .uk-checkbox:focus,.uk-card-primary>:not([class*='uk-card-media']) .uk-checkbox:focus,.uk-card-secondary.uk-card-body .uk-checkbox:focus,.uk-card-secondary>:not([class*='uk-card-media']) .uk-checkbox:focus,.uk-overlay-primary .uk-checkbox:focus,.uk-offcanvas-bar .uk-checkbox:focus{border-color:rgba(255,255,255,0.7)}.uk-light .uk-radio:checked,.uk-section-primary:not(.uk-preserve-color) .uk-radio:checked,.uk-section-secondary:not(.uk-preserve-color) .uk-radio:checked,.uk-tile-primary:not(.uk-preserve-color) .uk-radio:checked,.uk-tile-secondary:not(.uk-preserve-color) .uk-radio:checked,.uk-card-primary.uk-card-body .uk-radio:checked,.uk-card-primary>:not([class*='uk-card-media']) .uk-radio:checked,.uk-card-secondary.uk-card-body .uk-radio:checked,.uk-card-secondary>:not([class*='uk-card-media']) .uk-radio:checked,.uk-overlay-primary .uk-radio:checked,.uk-offcanvas-bar .uk-radio:checked,.uk-light .uk-checkbox:checked,.uk-section-primary:not(.uk-preserve-color) .uk-checkbox:checked,.uk-section-secondary:not(.uk-preserve-color) .uk-checkbox:checked,.uk-tile-primary:not(.uk-preserve-color) .uk-checkbox:checked,.uk-tile-secondary:not(.uk-preserve-color) .uk-checkbox:checked,.uk-card-primary.uk-card-body .uk-checkbox:checked,.uk-card-primary>:not([class*='uk-card-media']) .uk-checkbox:checked,.uk-card-secondary.uk-card-body .uk-checkbox:checked,.uk-card-secondary>:not([class*='uk-card-media']) .uk-checkbox:checked,.uk-overlay-primary .uk-checkbox:checked,.uk-offcanvas-bar .uk-checkbox:checked,.uk-light .uk-checkbox:indeterminate,.uk-section-primary:not(.uk-preserve-color) .uk-checkbox:indeterminate,.uk-section-secondary:not(.uk-preserve-color) .uk-checkbox:indeterminate,.uk-tile-primary:not(.uk-preserve-color) .uk-checkbox:indeterminate,.uk-tile-secondary:not(.uk-preserve-color) .uk-checkbox:indeterminate,.uk-card-primary.uk-card-body .uk-checkbox:indeterminate,.uk-card-primary>:not([class*='uk-card-media']) .uk-checkbox:indeterminate,.uk-card-secondary.uk-card-body .uk-checkbox:indeterminate,.uk-card-secondary>:not([class*='uk-card-media']) .uk-checkbox:indeterminate,.uk-overlay-primary .uk-checkbox:indeterminate,.uk-offcanvas-bar .uk-checkbox:indeterminate{background-color:#fff;border-color:rgba(255,255,255,0.7)}.uk-light .uk-radio:checked:focus,.uk-section-primary:not(.uk-preserve-color) .uk-radio:checked:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-radio:checked:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-radio:checked:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-radio:checked:focus,.uk-card-primary.uk-card-body .uk-radio:checked:focus,.uk-card-primary>:not([class*='uk-card-media']) .uk-radio:checked:focus,.uk-card-secondary.uk-card-body .uk-radio:checked:focus,.uk-card-secondary>:not([class*='uk-card-media']) .uk-radio:checked:focus,.uk-overlay-primary .uk-radio:checked:focus,.uk-offcanvas-bar .uk-radio:checked:focus,.uk-light .uk-checkbox:checked:focus,.uk-section-primary:not(.uk-preserve-color) .uk-checkbox:checked:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-checkbox:checked:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-checkbox:checked:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-checkbox:checked:focus,.uk-card-primary.uk-card-body .uk-checkbox:checked:focus,.uk-card-primary>:not([class*='uk-card-media']) .uk-checkbox:checked:focus,.uk-card-secondary.uk-card-body .uk-checkbox:checked:focus,.uk-card-secondary>:not([class*='uk-card-media']) .uk-checkbox:checked:focus,.uk-overlay-primary .uk-checkbox:checked:focus,.uk-offcanvas-bar .uk-checkbox:checked:focus,.uk-light .uk-checkbox:indeterminate:focus,.uk-section-primary:not(.uk-preserve-color) .uk-checkbox:indeterminate:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-checkbox:indeterminate:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-checkbox:indeterminate:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-checkbox:indeterminate:focus,.uk-card-primary.uk-card-body .uk-checkbox:indeterminate:focus,.uk-card-primary>:not([class*='uk-card-media']) .uk-checkbox:indeterminate:focus,.uk-card-secondary.uk-card-body .uk-checkbox:indeterminate:focus,.uk-card-secondary>:not([class*='uk-card-media']) .uk-checkbox:indeterminate:focus,.uk-overlay-primary .uk-checkbox:indeterminate:focus,.uk-offcanvas-bar .uk-checkbox:indeterminate:focus{background-color:#e6e6e6}.uk-light .uk-radio:checked,.uk-section-primary:not(.uk-preserve-color) .uk-radio:checked,.uk-section-secondary:not(.uk-preserve-color) .uk-radio:checked,.uk-tile-primary:not(.uk-preserve-color) .uk-radio:checked,.uk-tile-secondary:not(.uk-preserve-color) .uk-radio:checked,.uk-card-primary.uk-card-body .uk-radio:checked,.uk-card-primary>:not([class*='uk-card-media']) .uk-radio:checked,.uk-card-secondary.uk-card-body .uk-radio:checked,.uk-card-secondary>:not([class*='uk-card-media']) .uk-radio:checked,.uk-overlay-primary .uk-radio:checked,.uk-offcanvas-bar .uk-radio:checked{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Ccircle%20fill%3D%22%23666%22%20cx%3D%228%22%20cy%3D%228%22%20r%3D%222%22%20%2F%3E%0A%3C%2Fsvg%3E")}.uk-light .uk-checkbox:checked,.uk-section-primary:not(.uk-preserve-color) .uk-checkbox:checked,.uk-section-secondary:not(.uk-preserve-color) .uk-checkbox:checked,.uk-tile-primary:not(.uk-preserve-color) .uk-checkbox:checked,.uk-tile-secondary:not(.uk-preserve-color) .uk-checkbox:checked,.uk-card-primary.uk-card-body .uk-checkbox:checked,.uk-card-primary>:not([class*='uk-card-media']) .uk-checkbox:checked,.uk-card-secondary.uk-card-body .uk-checkbox:checked,.uk-card-secondary>:not([class*='uk-card-media']) .uk-checkbox:checked,.uk-overlay-primary .uk-checkbox:checked,.uk-offcanvas-bar .uk-checkbox:checked{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2214%22%20height%3D%2211%22%20viewBox%3D%220%200%2014%2011%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Cpolygon%20fill%3D%22%23666%22%20points%3D%2212%201%205%207.5%202%205%201%205.5%205%2010%2013%201.5%22%20%2F%3E%0A%3C%2Fsvg%3E%0A")}.uk-light .uk-checkbox:indeterminate,.uk-section-primary:not(.uk-preserve-color) .uk-checkbox:indeterminate,.uk-section-secondary:not(.uk-preserve-color) .uk-checkbox:indeterminate,.uk-tile-primary:not(.uk-preserve-color) .uk-checkbox:indeterminate,.uk-tile-secondary:not(.uk-preserve-color) .uk-checkbox:indeterminate,.uk-card-primary.uk-card-body .uk-checkbox:indeterminate,.uk-card-primary>:not([class*='uk-card-media']) .uk-checkbox:indeterminate,.uk-card-secondary.uk-card-body .uk-checkbox:indeterminate,.uk-card-secondary>:not([class*='uk-card-media']) .uk-checkbox:indeterminate,.uk-overlay-primary .uk-checkbox:indeterminate,.uk-offcanvas-bar .uk-checkbox:indeterminate{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Crect%20fill%3D%22%23666%22%20x%3D%223%22%20y%3D%228%22%20width%3D%2210%22%20height%3D%221%22%20%2F%3E%0A%3C%2Fsvg%3E")}.uk-light .uk-form-label,.uk-section-primary:not(.uk-preserve-color) .uk-form-label,.uk-section-secondary:not(.uk-preserve-color) .uk-form-label,.uk-tile-primary:not(.uk-preserve-color) .uk-form-label,.uk-tile-secondary:not(.uk-preserve-color) .uk-form-label,.uk-card-primary.uk-card-body .uk-form-label,.uk-card-primary>:not([class*='uk-card-media']) .uk-form-label,.uk-card-secondary.uk-card-body .uk-form-label,.uk-card-secondary>:not([class*='uk-card-media']) .uk-form-label,.uk-overlay-primary .uk-form-label,.uk-offcanvas-bar .uk-form-label{color:#fff}.uk-light .uk-form-icon,.uk-section-primary:not(.uk-preserve-color) .uk-form-icon,.uk-section-secondary:not(.uk-preserve-color) .uk-form-icon,.uk-tile-primary:not(.uk-preserve-color) .uk-form-icon,.uk-tile-secondary:not(.uk-preserve-color) .uk-form-icon,.uk-card-primary.uk-card-body .uk-form-icon,.uk-card-primary>:not([class*='uk-card-media']) .uk-form-icon,.uk-card-secondary.uk-card-body .uk-form-icon,.uk-card-secondary>:not([class*='uk-card-media']) .uk-form-icon,.uk-overlay-primary .uk-form-icon,.uk-offcanvas-bar .uk-form-icon{color:rgba(255,255,255,0.5)}.uk-light .uk-form-icon:hover,.uk-section-primary:not(.uk-preserve-color) .uk-form-icon:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-form-icon:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-form-icon:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-form-icon:hover,.uk-card-primary.uk-card-body .uk-form-icon:hover,.uk-card-primary>:not([class*='uk-card-media']) .uk-form-icon:hover,.uk-card-secondary.uk-card-body .uk-form-icon:hover,.uk-card-secondary>:not([class*='uk-card-media']) .uk-form-icon:hover,.uk-overlay-primary .uk-form-icon:hover,.uk-offcanvas-bar .uk-form-icon:hover{color:rgba(255,255,255,0.7)}.uk-light .uk-button-default,.uk-section-primary:not(.uk-preserve-color) .uk-button-default,.uk-section-secondary:not(.uk-preserve-color) .uk-button-default,.uk-tile-primary:not(.uk-preserve-color) .uk-button-default,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-default,.uk-card-primary.uk-card-body .uk-button-default,.uk-card-primary>:not([class*='uk-card-media']) .uk-button-default,.uk-card-secondary.uk-card-body .uk-button-default,.uk-card-secondary>:not([class*='uk-card-media']) .uk-button-default,.uk-overlay-primary .uk-button-default,.uk-offcanvas-bar .uk-button-default{background-color:rgba(0,0,0,0);color:#fff;border-color:rgba(255,255,255,0.7)}.uk-light .uk-button-default:hover,.uk-section-primary:not(.uk-preserve-color) .uk-button-default:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-button-default:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-button-default:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-default:hover,.uk-card-primary.uk-card-body .uk-button-default:hover,.uk-card-primary>:not([class*='uk-card-media']) .uk-button-default:hover,.uk-card-secondary.uk-card-body .uk-button-default:hover,.uk-card-secondary>:not([class*='uk-card-media']) .uk-button-default:hover,.uk-overlay-primary .uk-button-default:hover,.uk-offcanvas-bar .uk-button-default:hover,.uk-light .uk-button-default:focus,.uk-section-primary:not(.uk-preserve-color) .uk-button-default:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-button-default:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-button-default:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-default:focus,.uk-card-primary.uk-card-body .uk-button-default:focus,.uk-card-primary>:not([class*='uk-card-media']) .uk-button-default:focus,.uk-card-secondary.uk-card-body .uk-button-default:focus,.uk-card-secondary>:not([class*='uk-card-media']) .uk-button-default:focus,.uk-overlay-primary .uk-button-default:focus,.uk-offcanvas-bar .uk-button-default:focus{background-color:rgba(0,0,0,0);color:#fff;border-color:#fff}.uk-light .uk-button-default:active,.uk-section-primary:not(.uk-preserve-color) .uk-button-default:active,.uk-section-secondary:not(.uk-preserve-color) .uk-button-default:active,.uk-tile-primary:not(.uk-preserve-color) .uk-button-default:active,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-default:active,.uk-card-primary.uk-card-body .uk-button-default:active,.uk-card-primary>:not([class*='uk-card-media']) .uk-button-default:active,.uk-card-secondary.uk-card-body .uk-button-default:active,.uk-card-secondary>:not([class*='uk-card-media']) .uk-button-default:active,.uk-overlay-primary .uk-button-default:active,.uk-offcanvas-bar .uk-button-default:active,.uk-light .uk-button-default.uk-active,.uk-section-primary:not(.uk-preserve-color) .uk-button-default.uk-active,.uk-section-secondary:not(.uk-preserve-color) .uk-button-default.uk-active,.uk-tile-primary:not(.uk-preserve-color) .uk-button-default.uk-active,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-default.uk-active,.uk-card-primary.uk-card-body .uk-button-default.uk-active,.uk-card-primary>:not([class*='uk-card-media']) .uk-button-default.uk-active,.uk-card-secondary.uk-card-body .uk-button-default.uk-active,.uk-card-secondary>:not([class*='uk-card-media']) .uk-button-default.uk-active,.uk-overlay-primary .uk-button-default.uk-active,.uk-offcanvas-bar .uk-button-default.uk-active{background-color:rgba(0,0,0,0);color:#fff;border-color:#fff}.uk-light .uk-button-primary,.uk-section-primary:not(.uk-preserve-color) .uk-button-primary,.uk-section-secondary:not(.uk-preserve-color) .uk-button-primary,.uk-tile-primary:not(.uk-preserve-color) .uk-button-primary,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-primary,.uk-card-primary.uk-card-body .uk-button-primary,.uk-card-primary>:not([class*='uk-card-media']) .uk-button-primary,.uk-card-secondary.uk-card-body .uk-button-primary,.uk-card-secondary>:not([class*='uk-card-media']) .uk-button-primary,.uk-overlay-primary .uk-button-primary,.uk-offcanvas-bar .uk-button-primary{background-color:#fff;color:#666}.uk-light .uk-button-primary:hover,.uk-section-primary:not(.uk-preserve-color) .uk-button-primary:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-button-primary:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-button-primary:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-primary:hover,.uk-card-primary.uk-card-body .uk-button-primary:hover,.uk-card-primary>:not([class*='uk-card-media']) .uk-button-primary:hover,.uk-card-secondary.uk-card-body .uk-button-primary:hover,.uk-card-secondary>:not([class*='uk-card-media']) .uk-button-primary:hover,.uk-overlay-primary .uk-button-primary:hover,.uk-offcanvas-bar .uk-button-primary:hover,.uk-light .uk-button-primary:focus,.uk-section-primary:not(.uk-preserve-color) .uk-button-primary:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-button-primary:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-button-primary:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-primary:focus,.uk-card-primary.uk-card-body .uk-button-primary:focus,.uk-card-primary>:not([class*='uk-card-media']) .uk-button-primary:focus,.uk-card-secondary.uk-card-body .uk-button-primary:focus,.uk-card-secondary>:not([class*='uk-card-media']) .uk-button-primary:focus,.uk-overlay-primary .uk-button-primary:focus,.uk-offcanvas-bar .uk-button-primary:focus{background-color:#f2f2f2;color:#666}.uk-light .uk-button-primary:active,.uk-section-primary:not(.uk-preserve-color) .uk-button-primary:active,.uk-section-secondary:not(.uk-preserve-color) .uk-button-primary:active,.uk-tile-primary:not(.uk-preserve-color) .uk-button-primary:active,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-primary:active,.uk-card-primary.uk-card-body .uk-button-primary:active,.uk-card-primary>:not([class*='uk-card-media']) .uk-button-primary:active,.uk-card-secondary.uk-card-body .uk-button-primary:active,.uk-card-secondary>:not([class*='uk-card-media']) .uk-button-primary:active,.uk-overlay-primary .uk-button-primary:active,.uk-offcanvas-bar .uk-button-primary:active,.uk-light .uk-button-primary.uk-active,.uk-section-primary:not(.uk-preserve-color) .uk-button-primary.uk-active,.uk-section-secondary:not(.uk-preserve-color) .uk-button-primary.uk-active,.uk-tile-primary:not(.uk-preserve-color) .uk-button-primary.uk-active,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-primary.uk-active,.uk-card-primary.uk-card-body .uk-button-primary.uk-active,.uk-card-primary>:not([class*='uk-card-media']) .uk-button-primary.uk-active,.uk-card-secondary.uk-card-body .uk-button-primary.uk-active,.uk-card-secondary>:not([class*='uk-card-media']) .uk-button-primary.uk-active,.uk-overlay-primary .uk-button-primary.uk-active,.uk-offcanvas-bar .uk-button-primary.uk-active{background-color:#e6e6e6;color:#666}.uk-light .uk-button-secondary,.uk-section-primary:not(.uk-preserve-color) .uk-button-secondary,.uk-section-secondary:not(.uk-preserve-color) .uk-button-secondary,.uk-tile-primary:not(.uk-preserve-color) .uk-button-secondary,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-secondary,.uk-card-primary.uk-card-body .uk-button-secondary,.uk-card-primary>:not([class*='uk-card-media']) .uk-button-secondary,.uk-card-secondary.uk-card-body .uk-button-secondary,.uk-card-secondary>:not([class*='uk-card-media']) .uk-button-secondary,.uk-overlay-primary .uk-button-secondary,.uk-offcanvas-bar .uk-button-secondary{background-color:#fff;color:#666}.uk-light .uk-button-secondary:hover,.uk-section-primary:not(.uk-preserve-color) .uk-button-secondary:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-button-secondary:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-button-secondary:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-secondary:hover,.uk-card-primary.uk-card-body .uk-button-secondary:hover,.uk-card-primary>:not([class*='uk-card-media']) .uk-button-secondary:hover,.uk-card-secondary.uk-card-body .uk-button-secondary:hover,.uk-card-secondary>:not([class*='uk-card-media']) .uk-button-secondary:hover,.uk-overlay-primary .uk-button-secondary:hover,.uk-offcanvas-bar .uk-button-secondary:hover,.uk-light .uk-button-secondary:focus,.uk-section-primary:not(.uk-preserve-color) .uk-button-secondary:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-button-secondary:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-button-secondary:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-secondary:focus,.uk-card-primary.uk-card-body .uk-button-secondary:focus,.uk-card-primary>:not([class*='uk-card-media']) .uk-button-secondary:focus,.uk-card-secondary.uk-card-body .uk-button-secondary:focus,.uk-card-secondary>:not([class*='uk-card-media']) .uk-button-secondary:focus,.uk-overlay-primary .uk-button-secondary:focus,.uk-offcanvas-bar .uk-button-secondary:focus{background-color:#f2f2f2;color:#666}.uk-light .uk-button-secondary:active,.uk-section-primary:not(.uk-preserve-color) .uk-button-secondary:active,.uk-section-secondary:not(.uk-preserve-color) .uk-button-secondary:active,.uk-tile-primary:not(.uk-preserve-color) .uk-button-secondary:active,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-secondary:active,.uk-card-primary.uk-card-body .uk-button-secondary:active,.uk-card-primary>:not([class*='uk-card-media']) .uk-button-secondary:active,.uk-card-secondary.uk-card-body .uk-button-secondary:active,.uk-card-secondary>:not([class*='uk-card-media']) .uk-button-secondary:active,.uk-overlay-primary .uk-button-secondary:active,.uk-offcanvas-bar .uk-button-secondary:active,.uk-light .uk-button-secondary.uk-active,.uk-section-primary:not(.uk-preserve-color) .uk-button-secondary.uk-active,.uk-section-secondary:not(.uk-preserve-color) .uk-button-secondary.uk-active,.uk-tile-primary:not(.uk-preserve-color) .uk-button-secondary.uk-active,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-secondary.uk-active,.uk-card-primary.uk-card-body .uk-button-secondary.uk-active,.uk-card-primary>:not([class*='uk-card-media']) .uk-button-secondary.uk-active,.uk-card-secondary.uk-card-body .uk-button-secondary.uk-active,.uk-card-secondary>:not([class*='uk-card-media']) .uk-button-secondary.uk-active,.uk-overlay-primary .uk-button-secondary.uk-active,.uk-offcanvas-bar .uk-button-secondary.uk-active{background-color:#e6e6e6;color:#666}.uk-light .uk-button-text,.uk-section-primary:not(.uk-preserve-color) .uk-button-text,.uk-section-secondary:not(.uk-preserve-color) .uk-button-text,.uk-tile-primary:not(.uk-preserve-color) .uk-button-text,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-text,.uk-card-primary.uk-card-body .uk-button-text,.uk-card-primary>:not([class*='uk-card-media']) .uk-button-text,.uk-card-secondary.uk-card-body .uk-button-text,.uk-card-secondary>:not([class*='uk-card-media']) .uk-button-text,.uk-overlay-primary .uk-button-text,.uk-offcanvas-bar .uk-button-text{color:#fff}.uk-light .uk-button-text::before,.uk-section-primary:not(.uk-preserve-color) .uk-button-text::before,.uk-section-secondary:not(.uk-preserve-color) .uk-button-text::before,.uk-tile-primary:not(.uk-preserve-color) .uk-button-text::before,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-text::before,.uk-card-primary.uk-card-body .uk-button-text::before,.uk-card-primary>:not([class*='uk-card-media']) .uk-button-text::before,.uk-card-secondary.uk-card-body .uk-button-text::before,.uk-card-secondary>:not([class*='uk-card-media']) .uk-button-text::before,.uk-overlay-primary .uk-button-text::before,.uk-offcanvas-bar .uk-button-text::before{border-bottom-color:#fff}.uk-light .uk-button-text:hover,.uk-section-primary:not(.uk-preserve-color) .uk-button-text:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-button-text:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-button-text:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-text:hover,.uk-card-primary.uk-card-body .uk-button-text:hover,.uk-card-primary>:not([class*='uk-card-media']) .uk-button-text:hover,.uk-card-secondary.uk-card-body .uk-button-text:hover,.uk-card-secondary>:not([class*='uk-card-media']) .uk-button-text:hover,.uk-overlay-primary .uk-button-text:hover,.uk-offcanvas-bar .uk-button-text:hover,.uk-light .uk-button-text:focus,.uk-section-primary:not(.uk-preserve-color) .uk-button-text:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-button-text:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-button-text:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-text:focus,.uk-card-primary.uk-card-body .uk-button-text:focus,.uk-card-primary>:not([class*='uk-card-media']) .uk-button-text:focus,.uk-card-secondary.uk-card-body .uk-button-text:focus,.uk-card-secondary>:not([class*='uk-card-media']) .uk-button-text:focus,.uk-overlay-primary .uk-button-text:focus,.uk-offcanvas-bar .uk-button-text:focus{color:#fff}.uk-light .uk-button-text:disabled,.uk-section-primary:not(.uk-preserve-color) .uk-button-text:disabled,.uk-section-secondary:not(.uk-preserve-color) .uk-button-text:disabled,.uk-tile-primary:not(.uk-preserve-color) .uk-button-text:disabled,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-text:disabled,.uk-card-primary.uk-card-body .uk-button-text:disabled,.uk-card-primary>:not([class*='uk-card-media']) .uk-button-text:disabled,.uk-card-secondary.uk-card-body .uk-button-text:disabled,.uk-card-secondary>:not([class*='uk-card-media']) .uk-button-text:disabled,.uk-overlay-primary .uk-button-text:disabled,.uk-offcanvas-bar .uk-button-text:disabled{color:rgba(255,255,255,0.5)}.uk-light .uk-button-link,.uk-section-primary:not(.uk-preserve-color) .uk-button-link,.uk-section-secondary:not(.uk-preserve-color) .uk-button-link,.uk-tile-primary:not(.uk-preserve-color) .uk-button-link,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-link,.uk-card-primary.uk-card-body .uk-button-link,.uk-card-primary>:not([class*='uk-card-media']) .uk-button-link,.uk-card-secondary.uk-card-body .uk-button-link,.uk-card-secondary>:not([class*='uk-card-media']) .uk-button-link,.uk-overlay-primary .uk-button-link,.uk-offcanvas-bar .uk-button-link{color:rgba(255,255,255,0.5)}.uk-light .uk-button-link:hover,.uk-section-primary:not(.uk-preserve-color) .uk-button-link:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-button-link:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-button-link:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-link:hover,.uk-card-primary.uk-card-body .uk-button-link:hover,.uk-card-primary>:not([class*='uk-card-media']) .uk-button-link:hover,.uk-card-secondary.uk-card-body .uk-button-link:hover,.uk-card-secondary>:not([class*='uk-card-media']) .uk-button-link:hover,.uk-overlay-primary .uk-button-link:hover,.uk-offcanvas-bar .uk-button-link:hover,.uk-light .uk-button-link:focus,.uk-section-primary:not(.uk-preserve-color) .uk-button-link:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-button-link:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-button-link:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-link:focus,.uk-card-primary.uk-card-body .uk-button-link:focus,.uk-card-primary>:not([class*='uk-card-media']) .uk-button-link:focus,.uk-card-secondary.uk-card-body .uk-button-link:focus,.uk-card-secondary>:not([class*='uk-card-media']) .uk-button-link:focus,.uk-overlay-primary .uk-button-link:focus,.uk-offcanvas-bar .uk-button-link:focus{color:rgba(255,255,255,0.7)}.uk-light .uk-grid-divider>:not(.uk-first-column)::before,.uk-section-primary:not(.uk-preserve-color) .uk-grid-divider>:not(.uk-first-column)::before,.uk-section-secondary:not(.uk-preserve-color) .uk-grid-divider>:not(.uk-first-column)::before,.uk-tile-primary:not(.uk-preserve-color) .uk-grid-divider>:not(.uk-first-column)::before,.uk-tile-secondary:not(.uk-preserve-color) .uk-grid-divider>:not(.uk-first-column)::before,.uk-card-primary.uk-card-body .uk-grid-divider>:not(.uk-first-column)::before,.uk-card-primary>:not([class*='uk-card-media']) .uk-grid-divider>:not(.uk-first-column)::before,.uk-card-secondary.uk-card-body .uk-grid-divider>:not(.uk-first-column)::before,.uk-card-secondary>:not([class*='uk-card-media']) .uk-grid-divider>:not(.uk-first-column)::before,.uk-overlay-primary .uk-grid-divider>:not(.uk-first-column)::before,.uk-offcanvas-bar .uk-grid-divider>:not(.uk-first-column)::before{border-left-color:rgba(255,255,255,0.2)}.uk-light .uk-grid-divider.uk-grid-stack>.uk-grid-margin::before,.uk-section-primary:not(.uk-preserve-color) .uk-grid-divider.uk-grid-stack>.uk-grid-margin::before,.uk-section-secondary:not(.uk-preserve-color) .uk-grid-divider.uk-grid-stack>.uk-grid-margin::before,.uk-tile-primary:not(.uk-preserve-color) .uk-grid-divider.uk-grid-stack>.uk-grid-margin::before,.uk-tile-secondary:not(.uk-preserve-color) .uk-grid-divider.uk-grid-stack>.uk-grid-margin::before,.uk-card-primary.uk-card-body .uk-grid-divider.uk-grid-stack>.uk-grid-margin::before,.uk-card-primary>:not([class*='uk-card-media']) .uk-grid-divider.uk-grid-stack>.uk-grid-margin::before,.uk-card-secondary.uk-card-body .uk-grid-divider.uk-grid-stack>.uk-grid-margin::before,.uk-card-secondary>:not([class*='uk-card-media']) .uk-grid-divider.uk-grid-stack>.uk-grid-margin::before,.uk-overlay-primary .uk-grid-divider.uk-grid-stack>.uk-grid-margin::before,.uk-offcanvas-bar .uk-grid-divider.uk-grid-stack>.uk-grid-margin::before{border-top-color:rgba(255,255,255,0.2)}.uk-light .uk-close,.uk-section-primary:not(.uk-preserve-color) .uk-close,.uk-section-secondary:not(.uk-preserve-color) .uk-close,.uk-tile-primary:not(.uk-preserve-color) .uk-close,.uk-tile-secondary:not(.uk-preserve-color) .uk-close,.uk-card-primary.uk-card-body .uk-close,.uk-card-primary>:not([class*='uk-card-media']) .uk-close,.uk-card-secondary.uk-card-body .uk-close,.uk-card-secondary>:not([class*='uk-card-media']) .uk-close,.uk-overlay-primary .uk-close,.uk-offcanvas-bar .uk-close{color:rgba(255,255,255,0.5)}.uk-light .uk-close:hover,.uk-section-primary:not(.uk-preserve-color) .uk-close:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-close:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-close:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-close:hover,.uk-card-primary.uk-card-body .uk-close:hover,.uk-card-primary>:not([class*='uk-card-media']) .uk-close:hover,.uk-card-secondary.uk-card-body .uk-close:hover,.uk-card-secondary>:not([class*='uk-card-media']) .uk-close:hover,.uk-overlay-primary .uk-close:hover,.uk-offcanvas-bar .uk-close:hover,.uk-light .uk-close:focus,.uk-section-primary:not(.uk-preserve-color) .uk-close:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-close:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-close:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-close:focus,.uk-card-primary.uk-card-body .uk-close:focus,.uk-card-primary>:not([class*='uk-card-media']) .uk-close:focus,.uk-card-secondary.uk-card-body .uk-close:focus,.uk-card-secondary>:not([class*='uk-card-media']) .uk-close:focus,.uk-overlay-primary .uk-close:focus,.uk-offcanvas-bar .uk-close:focus{color:rgba(255,255,255,0.7)}.uk-light .uk-totop,.uk-section-primary:not(.uk-preserve-color) .uk-totop,.uk-section-secondary:not(.uk-preserve-color) .uk-totop,.uk-tile-primary:not(.uk-preserve-color) .uk-totop,.uk-tile-secondary:not(.uk-preserve-color) .uk-totop,.uk-card-primary.uk-card-body .uk-totop,.uk-card-primary>:not([class*='uk-card-media']) .uk-totop,.uk-card-secondary.uk-card-body .uk-totop,.uk-card-secondary>:not([class*='uk-card-media']) .uk-totop,.uk-overlay-primary .uk-totop,.uk-offcanvas-bar .uk-totop{color:rgba(255,255,255,0.5)}.uk-light .uk-totop:hover,.uk-section-primary:not(.uk-preserve-color) .uk-totop:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-totop:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-totop:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-totop:hover,.uk-card-primary.uk-card-body .uk-totop:hover,.uk-card-primary>:not([class*='uk-card-media']) .uk-totop:hover,.uk-card-secondary.uk-card-body .uk-totop:hover,.uk-card-secondary>:not([class*='uk-card-media']) .uk-totop:hover,.uk-overlay-primary .uk-totop:hover,.uk-offcanvas-bar .uk-totop:hover,.uk-light .uk-totop:focus,.uk-section-primary:not(.uk-preserve-color) .uk-totop:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-totop:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-totop:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-totop:focus,.uk-card-primary.uk-card-body .uk-totop:focus,.uk-card-primary>:not([class*='uk-card-media']) .uk-totop:focus,.uk-card-secondary.uk-card-body .uk-totop:focus,.uk-card-secondary>:not([class*='uk-card-media']) .uk-totop:focus,.uk-overlay-primary .uk-totop:focus,.uk-offcanvas-bar .uk-totop:focus{color:rgba(255,255,255,0.7)}.uk-light .uk-totop:active,.uk-section-primary:not(.uk-preserve-color) .uk-totop:active,.uk-section-secondary:not(.uk-preserve-color) .uk-totop:active,.uk-tile-primary:not(.uk-preserve-color) .uk-totop:active,.uk-tile-secondary:not(.uk-preserve-color) .uk-totop:active,.uk-card-primary.uk-card-body .uk-totop:active,.uk-card-primary>:not([class*='uk-card-media']) .uk-totop:active,.uk-card-secondary.uk-card-body .uk-totop:active,.uk-card-secondary>:not([class*='uk-card-media']) .uk-totop:active,.uk-overlay-primary .uk-totop:active,.uk-offcanvas-bar .uk-totop:active{color:#fff}.uk-light .uk-badge,.uk-section-primary:not(.uk-preserve-color) .uk-badge,.uk-section-secondary:not(.uk-preserve-color) .uk-badge,.uk-tile-primary:not(.uk-preserve-color) .uk-badge,.uk-tile-secondary:not(.uk-preserve-color) .uk-badge,.uk-card-primary.uk-card-body .uk-badge,.uk-card-primary>:not([class*='uk-card-media']) .uk-badge,.uk-card-secondary.uk-card-body .uk-badge,.uk-card-secondary>:not([class*='uk-card-media']) .uk-badge,.uk-overlay-primary .uk-badge,.uk-offcanvas-bar .uk-badge{background-color:#fff;color:#666}.uk-light .uk-badge:hover,.uk-section-primary:not(.uk-preserve-color) .uk-badge:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-badge:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-badge:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-badge:hover,.uk-card-primary.uk-card-body .uk-badge:hover,.uk-card-primary>:not([class*='uk-card-media']) .uk-badge:hover,.uk-card-secondary.uk-card-body .uk-badge:hover,.uk-card-secondary>:not([class*='uk-card-media']) .uk-badge:hover,.uk-overlay-primary .uk-badge:hover,.uk-offcanvas-bar .uk-badge:hover,.uk-light .uk-badge:focus,.uk-section-primary:not(.uk-preserve-color) .uk-badge:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-badge:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-badge:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-badge:focus,.uk-card-primary.uk-card-body .uk-badge:focus,.uk-card-primary>:not([class*='uk-card-media']) .uk-badge:focus,.uk-card-secondary.uk-card-body .uk-badge:focus,.uk-card-secondary>:not([class*='uk-card-media']) .uk-badge:focus,.uk-overlay-primary .uk-badge:focus,.uk-offcanvas-bar .uk-badge:focus{color:#666}.uk-light .uk-label,.uk-section-primary:not(.uk-preserve-color) .uk-label,.uk-section-secondary:not(.uk-preserve-color) .uk-label,.uk-tile-primary:not(.uk-preserve-color) .uk-label,.uk-tile-secondary:not(.uk-preserve-color) .uk-label,.uk-card-primary.uk-card-body .uk-label,.uk-card-primary>:not([class*='uk-card-media']) .uk-label,.uk-card-secondary.uk-card-body .uk-label,.uk-card-secondary>:not([class*='uk-card-media']) .uk-label,.uk-overlay-primary .uk-label,.uk-offcanvas-bar .uk-label{background-color:#fff;color:#666}.uk-light .uk-article-meta,.uk-section-primary:not(.uk-preserve-color) .uk-article-meta,.uk-section-secondary:not(.uk-preserve-color) .uk-article-meta,.uk-tile-primary:not(.uk-preserve-color) .uk-article-meta,.uk-tile-secondary:not(.uk-preserve-color) .uk-article-meta,.uk-card-primary.uk-card-body .uk-article-meta,.uk-card-primary>:not([class*='uk-card-media']) .uk-article-meta,.uk-card-secondary.uk-card-body .uk-article-meta,.uk-card-secondary>:not([class*='uk-card-media']) .uk-article-meta,.uk-overlay-primary .uk-article-meta,.uk-offcanvas-bar .uk-article-meta{color:rgba(255,255,255,0.5)}.uk-light .uk-search-input,.uk-section-primary:not(.uk-preserve-color) .uk-search-input,.uk-section-secondary:not(.uk-preserve-color) .uk-search-input,.uk-tile-primary:not(.uk-preserve-color) .uk-search-input,.uk-tile-secondary:not(.uk-preserve-color) .uk-search-input,.uk-card-primary.uk-card-body .uk-search-input,.uk-card-primary>:not([class*='uk-card-media']) .uk-search-input,.uk-card-secondary.uk-card-body .uk-search-input,.uk-card-secondary>:not([class*='uk-card-media']) .uk-search-input,.uk-overlay-primary .uk-search-input,.uk-offcanvas-bar .uk-search-input{color:rgba(255,255,255,0.7)}.uk-light .uk-search-input:-ms-input-placeholder,.uk-section-primary:not(.uk-preserve-color) .uk-search-input:-ms-input-placeholder,.uk-section-secondary:not(.uk-preserve-color) .uk-search-input:-ms-input-placeholder,.uk-tile-primary:not(.uk-preserve-color) .uk-search-input:-ms-input-placeholder,.uk-tile-secondary:not(.uk-preserve-color) .uk-search-input:-ms-input-placeholder,.uk-card-primary.uk-card-body .uk-search-input:-ms-input-placeholder,.uk-card-primary>:not([class*='uk-card-media']) .uk-search-input:-ms-input-placeholder,.uk-card-secondary.uk-card-body .uk-search-input:-ms-input-placeholder,.uk-card-secondary>:not([class*='uk-card-media']) .uk-search-input:-ms-input-placeholder,.uk-overlay-primary .uk-search-input:-ms-input-placeholder,.uk-offcanvas-bar .uk-search-input:-ms-input-placeholder{color:rgba(255,255,255,0.5) !important}.uk-light .uk-search-input::placeholder,.uk-section-primary:not(.uk-preserve-color) .uk-search-input::placeholder,.uk-section-secondary:not(.uk-preserve-color) .uk-search-input::placeholder,.uk-tile-primary:not(.uk-preserve-color) .uk-search-input::placeholder,.uk-tile-secondary:not(.uk-preserve-color) .uk-search-input::placeholder,.uk-card-primary.uk-card-body .uk-search-input::placeholder,.uk-card-primary>:not([class*='uk-card-media']) .uk-search-input::placeholder,.uk-card-secondary.uk-card-body .uk-search-input::placeholder,.uk-card-secondary>:not([class*='uk-card-media']) .uk-search-input::placeholder,.uk-overlay-primary .uk-search-input::placeholder,.uk-offcanvas-bar .uk-search-input::placeholder{color:rgba(255,255,255,0.5)}.uk-light .uk-search .uk-search-icon,.uk-section-primary:not(.uk-preserve-color) .uk-search .uk-search-icon,.uk-section-secondary:not(.uk-preserve-color) .uk-search .uk-search-icon,.uk-tile-primary:not(.uk-preserve-color) .uk-search .uk-search-icon,.uk-tile-secondary:not(.uk-preserve-color) .uk-search .uk-search-icon,.uk-card-primary.uk-card-body .uk-search .uk-search-icon,.uk-card-primary>:not([class*='uk-card-media']) .uk-search .uk-search-icon,.uk-card-secondary.uk-card-body .uk-search .uk-search-icon,.uk-card-secondary>:not([class*='uk-card-media']) .uk-search .uk-search-icon,.uk-overlay-primary .uk-search .uk-search-icon,.uk-offcanvas-bar .uk-search .uk-search-icon{color:rgba(255,255,255,0.5)}.uk-light .uk-search .uk-search-icon:hover,.uk-section-primary:not(.uk-preserve-color) .uk-search .uk-search-icon:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-search .uk-search-icon:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-search .uk-search-icon:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-search .uk-search-icon:hover,.uk-card-primary.uk-card-body .uk-search .uk-search-icon:hover,.uk-card-primary>:not([class*='uk-card-media']) .uk-search .uk-search-icon:hover,.uk-card-secondary.uk-card-body .uk-search .uk-search-icon:hover,.uk-card-secondary>:not([class*='uk-card-media']) .uk-search .uk-search-icon:hover,.uk-overlay-primary .uk-search .uk-search-icon:hover,.uk-offcanvas-bar .uk-search .uk-search-icon:hover{color:rgba(255,255,255,0.5)}.uk-light .uk-search-default .uk-search-input,.uk-section-primary:not(.uk-preserve-color) .uk-search-default .uk-search-input,.uk-section-secondary:not(.uk-preserve-color) .uk-search-default .uk-search-input,.uk-tile-primary:not(.uk-preserve-color) .uk-search-default .uk-search-input,.uk-tile-secondary:not(.uk-preserve-color) .uk-search-default .uk-search-input,.uk-card-primary.uk-card-body .uk-search-default .uk-search-input,.uk-card-primary>:not([class*='uk-card-media']) .uk-search-default .uk-search-input,.uk-card-secondary.uk-card-body .uk-search-default .uk-search-input,.uk-card-secondary>:not([class*='uk-card-media']) .uk-search-default .uk-search-input,.uk-overlay-primary .uk-search-default .uk-search-input,.uk-offcanvas-bar .uk-search-default .uk-search-input{background-color:rgba(0,0,0,0);border-color:rgba(255,255,255,0.2)}.uk-light .uk-search-default .uk-search-input:focus,.uk-section-primary:not(.uk-preserve-color) .uk-search-default .uk-search-input:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-search-default .uk-search-input:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-search-default .uk-search-input:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-search-default .uk-search-input:focus,.uk-card-primary.uk-card-body .uk-search-default .uk-search-input:focus,.uk-card-primary>:not([class*='uk-card-media']) .uk-search-default .uk-search-input:focus,.uk-card-secondary.uk-card-body .uk-search-default .uk-search-input:focus,.uk-card-secondary>:not([class*='uk-card-media']) .uk-search-default .uk-search-input:focus,.uk-overlay-primary .uk-search-default .uk-search-input:focus,.uk-offcanvas-bar .uk-search-default .uk-search-input:focus{background-color:rgba(0,0,0,0)}.uk-light .uk-search-navbar .uk-search-input,.uk-section-primary:not(.uk-preserve-color) .uk-search-navbar .uk-search-input,.uk-section-secondary:not(.uk-preserve-color) .uk-search-navbar .uk-search-input,.uk-tile-primary:not(.uk-preserve-color) .uk-search-navbar .uk-search-input,.uk-tile-secondary:not(.uk-preserve-color) .uk-search-navbar .uk-search-input,.uk-card-primary.uk-card-body .uk-search-navbar .uk-search-input,.uk-card-primary>:not([class*='uk-card-media']) .uk-search-navbar .uk-search-input,.uk-card-secondary.uk-card-body .uk-search-navbar .uk-search-input,.uk-card-secondary>:not([class*='uk-card-media']) .uk-search-navbar .uk-search-input,.uk-overlay-primary .uk-search-navbar .uk-search-input,.uk-offcanvas-bar .uk-search-navbar .uk-search-input{background-color:rgba(0,0,0,0)}.uk-light .uk-search-large .uk-search-input,.uk-section-primary:not(.uk-preserve-color) .uk-search-large .uk-search-input,.uk-section-secondary:not(.uk-preserve-color) .uk-search-large .uk-search-input,.uk-tile-primary:not(.uk-preserve-color) .uk-search-large .uk-search-input,.uk-tile-secondary:not(.uk-preserve-color) .uk-search-large .uk-search-input,.uk-card-primary.uk-card-body .uk-search-large .uk-search-input,.uk-card-primary>:not([class*='uk-card-media']) .uk-search-large .uk-search-input,.uk-card-secondary.uk-card-body .uk-search-large .uk-search-input,.uk-card-secondary>:not([class*='uk-card-media']) .uk-search-large .uk-search-input,.uk-overlay-primary .uk-search-large .uk-search-input,.uk-offcanvas-bar .uk-search-large .uk-search-input{background-color:rgba(0,0,0,0)}.uk-light .uk-search-toggle,.uk-section-primary:not(.uk-preserve-color) .uk-search-toggle,.uk-section-secondary:not(.uk-preserve-color) .uk-search-toggle,.uk-tile-primary:not(.uk-preserve-color) .uk-search-toggle,.uk-tile-secondary:not(.uk-preserve-color) .uk-search-toggle,.uk-card-primary.uk-card-body .uk-search-toggle,.uk-card-primary>:not([class*='uk-card-media']) .uk-search-toggle,.uk-card-secondary.uk-card-body .uk-search-toggle,.uk-card-secondary>:not([class*='uk-card-media']) .uk-search-toggle,.uk-overlay-primary .uk-search-toggle,.uk-offcanvas-bar .uk-search-toggle{color:rgba(255,255,255,0.5)}.uk-light .uk-search-toggle:hover,.uk-section-primary:not(.uk-preserve-color) .uk-search-toggle:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-search-toggle:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-search-toggle:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-search-toggle:hover,.uk-card-primary.uk-card-body .uk-search-toggle:hover,.uk-card-primary>:not([class*='uk-card-media']) .uk-search-toggle:hover,.uk-card-secondary.uk-card-body .uk-search-toggle:hover,.uk-card-secondary>:not([class*='uk-card-media']) .uk-search-toggle:hover,.uk-overlay-primary .uk-search-toggle:hover,.uk-offcanvas-bar .uk-search-toggle:hover,.uk-light .uk-search-toggle:focus,.uk-section-primary:not(.uk-preserve-color) .uk-search-toggle:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-search-toggle:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-search-toggle:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-search-toggle:focus,.uk-card-primary.uk-card-body .uk-search-toggle:focus,.uk-card-primary>:not([class*='uk-card-media']) .uk-search-toggle:focus,.uk-card-secondary.uk-card-body .uk-search-toggle:focus,.uk-card-secondary>:not([class*='uk-card-media']) .uk-search-toggle:focus,.uk-overlay-primary .uk-search-toggle:focus,.uk-offcanvas-bar .uk-search-toggle:focus{color:rgba(255,255,255,0.7)}.uk-light .uk-nav-parent-icon>.uk-parent>a::after,.uk-section-primary:not(.uk-preserve-color) .uk-nav-parent-icon>.uk-parent>a::after,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-parent-icon>.uk-parent>a::after,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-parent-icon>.uk-parent>a::after,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-parent-icon>.uk-parent>a::after,.uk-card-primary.uk-card-body .uk-nav-parent-icon>.uk-parent>a::after,.uk-card-primary>:not([class*='uk-card-media']) .uk-nav-parent-icon>.uk-parent>a::after,.uk-card-secondary.uk-card-body .uk-nav-parent-icon>.uk-parent>a::after,.uk-card-secondary>:not([class*='uk-card-media']) .uk-nav-parent-icon>.uk-parent>a::after,.uk-overlay-primary .uk-nav-parent-icon>.uk-parent>a::after,.uk-offcanvas-bar .uk-nav-parent-icon>.uk-parent>a::after{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2214%22%20height%3D%2214%22%20viewBox%3D%220%200%2014%2014%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Cpolyline%20fill%3D%22none%22%20stroke%3D%22rgba(255,255,255,0.7)%22%20stroke-width%3D%221.1%22%20points%3D%2210%201%204%207%2010%2013%22%20%2F%3E%0A%3C%2Fsvg%3E")}.uk-light .uk-nav-parent-icon>.uk-parent.uk-open>a::after,.uk-section-primary:not(.uk-preserve-color) .uk-nav-parent-icon>.uk-parent.uk-open>a::after,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-parent-icon>.uk-parent.uk-open>a::after,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-parent-icon>.uk-parent.uk-open>a::after,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-parent-icon>.uk-parent.uk-open>a::after,.uk-card-primary.uk-card-body .uk-nav-parent-icon>.uk-parent.uk-open>a::after,.uk-card-primary>:not([class*='uk-card-media']) .uk-nav-parent-icon>.uk-parent.uk-open>a::after,.uk-card-secondary.uk-card-body .uk-nav-parent-icon>.uk-parent.uk-open>a::after,.uk-card-secondary>:not([class*='uk-card-media']) .uk-nav-parent-icon>.uk-parent.uk-open>a::after,.uk-overlay-primary .uk-nav-parent-icon>.uk-parent.uk-open>a::after,.uk-offcanvas-bar .uk-nav-parent-icon>.uk-parent.uk-open>a::after{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2214%22%20height%3D%2214%22%20viewBox%3D%220%200%2014%2014%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Cpolyline%20fill%3D%22none%22%20stroke%3D%22rgba(255,255,255,0.7)%22%20stroke-width%3D%221.1%22%20points%3D%221%204%207%2010%2013%204%22%20%2F%3E%0A%3C%2Fsvg%3E")}.uk-light .uk-nav-default>li>a,.uk-section-primary:not(.uk-preserve-color) .uk-nav-default>li>a,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-default>li>a,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-default>li>a,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-default>li>a,.uk-card-primary.uk-card-body .uk-nav-default>li>a,.uk-card-primary>:not([class*='uk-card-media']) .uk-nav-default>li>a,.uk-card-secondary.uk-card-body .uk-nav-default>li>a,.uk-card-secondary>:not([class*='uk-card-media']) .uk-nav-default>li>a,.uk-overlay-primary .uk-nav-default>li>a,.uk-offcanvas-bar .uk-nav-default>li>a{color:rgba(255,255,255,0.5)}.uk-light .uk-nav-default>li>a:hover,.uk-section-primary:not(.uk-preserve-color) .uk-nav-default>li>a:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-default>li>a:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-default>li>a:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-default>li>a:hover,.uk-card-primary.uk-card-body .uk-nav-default>li>a:hover,.uk-card-primary>:not([class*='uk-card-media']) .uk-nav-default>li>a:hover,.uk-card-secondary.uk-card-body .uk-nav-default>li>a:hover,.uk-card-secondary>:not([class*='uk-card-media']) .uk-nav-default>li>a:hover,.uk-overlay-primary .uk-nav-default>li>a:hover,.uk-offcanvas-bar .uk-nav-default>li>a:hover,.uk-light .uk-nav-default>li>a:focus,.uk-section-primary:not(.uk-preserve-color) .uk-nav-default>li>a:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-default>li>a:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-default>li>a:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-default>li>a:focus,.uk-card-primary.uk-card-body .uk-nav-default>li>a:focus,.uk-card-primary>:not([class*='uk-card-media']) .uk-nav-default>li>a:focus,.uk-card-secondary.uk-card-body .uk-nav-default>li>a:focus,.uk-card-secondary>:not([class*='uk-card-media']) .uk-nav-default>li>a:focus,.uk-overlay-primary .uk-nav-default>li>a:focus,.uk-offcanvas-bar .uk-nav-default>li>a:focus{color:rgba(255,255,255,0.7)}.uk-light .uk-nav-default>li.uk-active>a,.uk-section-primary:not(.uk-preserve-color) .uk-nav-default>li.uk-active>a,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-default>li.uk-active>a,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-default>li.uk-active>a,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-default>li.uk-active>a,.uk-card-primary.uk-card-body .uk-nav-default>li.uk-active>a,.uk-card-primary>:not([class*='uk-card-media']) .uk-nav-default>li.uk-active>a,.uk-card-secondary.uk-card-body .uk-nav-default>li.uk-active>a,.uk-card-secondary>:not([class*='uk-card-media']) .uk-nav-default>li.uk-active>a,.uk-overlay-primary .uk-nav-default>li.uk-active>a,.uk-offcanvas-bar .uk-nav-default>li.uk-active>a{color:#fff}.uk-light .uk-nav-default .uk-nav-header,.uk-section-primary:not(.uk-preserve-color) .uk-nav-default .uk-nav-header,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-default .uk-nav-header,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-default .uk-nav-header,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-default .uk-nav-header,.uk-card-primary.uk-card-body .uk-nav-default .uk-nav-header,.uk-card-primary>:not([class*='uk-card-media']) .uk-nav-default .uk-nav-header,.uk-card-secondary.uk-card-body .uk-nav-default .uk-nav-header,.uk-card-secondary>:not([class*='uk-card-media']) .uk-nav-default .uk-nav-header,.uk-overlay-primary .uk-nav-default .uk-nav-header,.uk-offcanvas-bar .uk-nav-default .uk-nav-header{color:#fff}.uk-light .uk-nav-default .uk-nav-divider,.uk-section-primary:not(.uk-preserve-color) .uk-nav-default .uk-nav-divider,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-default .uk-nav-divider,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-default .uk-nav-divider,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-default .uk-nav-divider,.uk-card-primary.uk-card-body .uk-nav-default .uk-nav-divider,.uk-card-primary>:not([class*='uk-card-media']) .uk-nav-default .uk-nav-divider,.uk-card-secondary.uk-card-body .uk-nav-default .uk-nav-divider,.uk-card-secondary>:not([class*='uk-card-media']) .uk-nav-default .uk-nav-divider,.uk-overlay-primary .uk-nav-default .uk-nav-divider,.uk-offcanvas-bar .uk-nav-default .uk-nav-divider{border-top-color:rgba(255,255,255,0.2)}.uk-light .uk-nav-default .uk-nav-sub a,.uk-section-primary:not(.uk-preserve-color) .uk-nav-default .uk-nav-sub a,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-default .uk-nav-sub a,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-default .uk-nav-sub a,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-default .uk-nav-sub a,.uk-card-primary.uk-card-body .uk-nav-default .uk-nav-sub a,.uk-card-primary>:not([class*='uk-card-media']) .uk-nav-default .uk-nav-sub a,.uk-card-secondary.uk-card-body .uk-nav-default .uk-nav-sub a,.uk-card-secondary>:not([class*='uk-card-media']) .uk-nav-default .uk-nav-sub a,.uk-overlay-primary .uk-nav-default .uk-nav-sub a,.uk-offcanvas-bar .uk-nav-default .uk-nav-sub a{color:rgba(255,255,255,0.5)}.uk-light .uk-nav-default .uk-nav-sub a:hover,.uk-section-primary:not(.uk-preserve-color) .uk-nav-default .uk-nav-sub a:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-default .uk-nav-sub a:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-default .uk-nav-sub a:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-default .uk-nav-sub a:hover,.uk-card-primary.uk-card-body .uk-nav-default .uk-nav-sub a:hover,.uk-card-primary>:not([class*='uk-card-media']) .uk-nav-default .uk-nav-sub a:hover,.uk-card-secondary.uk-card-body .uk-nav-default .uk-nav-sub a:hover,.uk-card-secondary>:not([class*='uk-card-media']) .uk-nav-default .uk-nav-sub a:hover,.uk-overlay-primary .uk-nav-default .uk-nav-sub a:hover,.uk-offcanvas-bar .uk-nav-default .uk-nav-sub a:hover,.uk-light .uk-nav-default .uk-nav-sub a:focus,.uk-section-primary:not(.uk-preserve-color) .uk-nav-default .uk-nav-sub a:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-default .uk-nav-sub a:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-default .uk-nav-sub a:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-default .uk-nav-sub a:focus,.uk-card-primary.uk-card-body .uk-nav-default .uk-nav-sub a:focus,.uk-card-primary>:not([class*='uk-card-media']) .uk-nav-default .uk-nav-sub a:focus,.uk-card-secondary.uk-card-body .uk-nav-default .uk-nav-sub a:focus,.uk-card-secondary>:not([class*='uk-card-media']) .uk-nav-default .uk-nav-sub a:focus,.uk-overlay-primary .uk-nav-default .uk-nav-sub a:focus,.uk-offcanvas-bar .uk-nav-default .uk-nav-sub a:focus{color:rgba(255,255,255,0.7)}.uk-light .uk-nav-primary>li>a,.uk-section-primary:not(.uk-preserve-color) .uk-nav-primary>li>a,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-primary>li>a,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-primary>li>a,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-primary>li>a,.uk-card-primary.uk-card-body .uk-nav-primary>li>a,.uk-card-primary>:not([class*='uk-card-media']) .uk-nav-primary>li>a,.uk-card-secondary.uk-card-body .uk-nav-primary>li>a,.uk-card-secondary>:not([class*='uk-card-media']) .uk-nav-primary>li>a,.uk-overlay-primary .uk-nav-primary>li>a,.uk-offcanvas-bar .uk-nav-primary>li>a{color:rgba(255,255,255,0.5)}.uk-light .uk-nav-primary>li>a:hover,.uk-section-primary:not(.uk-preserve-color) .uk-nav-primary>li>a:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-primary>li>a:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-primary>li>a:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-primary>li>a:hover,.uk-card-primary.uk-card-body .uk-nav-primary>li>a:hover,.uk-card-primary>:not([class*='uk-card-media']) .uk-nav-primary>li>a:hover,.uk-card-secondary.uk-card-body .uk-nav-primary>li>a:hover,.uk-card-secondary>:not([class*='uk-card-media']) .uk-nav-primary>li>a:hover,.uk-overlay-primary .uk-nav-primary>li>a:hover,.uk-offcanvas-bar .uk-nav-primary>li>a:hover,.uk-light .uk-nav-primary>li>a:focus,.uk-section-primary:not(.uk-preserve-color) .uk-nav-primary>li>a:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-primary>li>a:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-primary>li>a:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-primary>li>a:focus,.uk-card-primary.uk-card-body .uk-nav-primary>li>a:focus,.uk-card-primary>:not([class*='uk-card-media']) .uk-nav-primary>li>a:focus,.uk-card-secondary.uk-card-body .uk-nav-primary>li>a:focus,.uk-card-secondary>:not([class*='uk-card-media']) .uk-nav-primary>li>a:focus,.uk-overlay-primary .uk-nav-primary>li>a:focus,.uk-offcanvas-bar .uk-nav-primary>li>a:focus{color:rgba(255,255,255,0.7)}.uk-light .uk-nav-primary>li.uk-active>a,.uk-section-primary:not(.uk-preserve-color) .uk-nav-primary>li.uk-active>a,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-primary>li.uk-active>a,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-primary>li.uk-active>a,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-primary>li.uk-active>a,.uk-card-primary.uk-card-body .uk-nav-primary>li.uk-active>a,.uk-card-primary>:not([class*='uk-card-media']) .uk-nav-primary>li.uk-active>a,.uk-card-secondary.uk-card-body .uk-nav-primary>li.uk-active>a,.uk-card-secondary>:not([class*='uk-card-media']) .uk-nav-primary>li.uk-active>a,.uk-overlay-primary .uk-nav-primary>li.uk-active>a,.uk-offcanvas-bar .uk-nav-primary>li.uk-active>a{color:#fff}.uk-light .uk-nav-primary .uk-nav-header,.uk-section-primary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-header,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-header,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-header,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-header,.uk-card-primary.uk-card-body .uk-nav-primary .uk-nav-header,.uk-card-primary>:not([class*='uk-card-media']) .uk-nav-primary .uk-nav-header,.uk-card-secondary.uk-card-body .uk-nav-primary .uk-nav-header,.uk-card-secondary>:not([class*='uk-card-media']) .uk-nav-primary .uk-nav-header,.uk-overlay-primary .uk-nav-primary .uk-nav-header,.uk-offcanvas-bar .uk-nav-primary .uk-nav-header{color:#fff}.uk-light .uk-nav-primary .uk-nav-divider,.uk-section-primary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-divider,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-divider,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-divider,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-divider,.uk-card-primary.uk-card-body .uk-nav-primary .uk-nav-divider,.uk-card-primary>:not([class*='uk-card-media']) .uk-nav-primary .uk-nav-divider,.uk-card-secondary.uk-card-body .uk-nav-primary .uk-nav-divider,.uk-card-secondary>:not([class*='uk-card-media']) .uk-nav-primary .uk-nav-divider,.uk-overlay-primary .uk-nav-primary .uk-nav-divider,.uk-offcanvas-bar .uk-nav-primary .uk-nav-divider{border-top-color:rgba(255,255,255,0.2)}.uk-light .uk-nav-primary .uk-nav-sub a,.uk-section-primary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-sub a,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-sub a,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-sub a,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-sub a,.uk-card-primary.uk-card-body .uk-nav-primary .uk-nav-sub a,.uk-card-primary>:not([class*='uk-card-media']) .uk-nav-primary .uk-nav-sub a,.uk-card-secondary.uk-card-body .uk-nav-primary .uk-nav-sub a,.uk-card-secondary>:not([class*='uk-card-media']) .uk-nav-primary .uk-nav-sub a,.uk-overlay-primary .uk-nav-primary .uk-nav-sub a,.uk-offcanvas-bar .uk-nav-primary .uk-nav-sub a{color:rgba(255,255,255,0.5)}.uk-light .uk-nav-primary .uk-nav-sub a:hover,.uk-section-primary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-sub a:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-sub a:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-sub a:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-sub a:hover,.uk-card-primary.uk-card-body .uk-nav-primary .uk-nav-sub a:hover,.uk-card-primary>:not([class*='uk-card-media']) .uk-nav-primary .uk-nav-sub a:hover,.uk-card-secondary.uk-card-body .uk-nav-primary .uk-nav-sub a:hover,.uk-card-secondary>:not([class*='uk-card-media']) .uk-nav-primary .uk-nav-sub a:hover,.uk-overlay-primary .uk-nav-primary .uk-nav-sub a:hover,.uk-offcanvas-bar .uk-nav-primary .uk-nav-sub a:hover,.uk-light .uk-nav-primary .uk-nav-sub a:focus,.uk-section-primary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-sub a:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-sub a:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-sub a:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-sub a:focus,.uk-card-primary.uk-card-body .uk-nav-primary .uk-nav-sub a:focus,.uk-card-primary>:not([class*='uk-card-media']) .uk-nav-primary .uk-nav-sub a:focus,.uk-card-secondary.uk-card-body .uk-nav-primary .uk-nav-sub a:focus,.uk-card-secondary>:not([class*='uk-card-media']) .uk-nav-primary .uk-nav-sub a:focus,.uk-overlay-primary .uk-nav-primary .uk-nav-sub a:focus,.uk-offcanvas-bar .uk-nav-primary .uk-nav-sub a:focus{color:rgba(255,255,255,0.7)}.uk-light .uk-navbar-nav>li>a,.uk-section-primary:not(.uk-preserve-color) .uk-navbar-nav>li>a,.uk-section-secondary:not(.uk-preserve-color) .uk-navbar-nav>li>a,.uk-tile-primary:not(.uk-preserve-color) .uk-navbar-nav>li>a,.uk-tile-secondary:not(.uk-preserve-color) .uk-navbar-nav>li>a,.uk-card-primary.uk-card-body .uk-navbar-nav>li>a,.uk-card-primary>:not([class*='uk-card-media']) .uk-navbar-nav>li>a,.uk-card-secondary.uk-card-body .uk-navbar-nav>li>a,.uk-card-secondary>:not([class*='uk-card-media']) .uk-navbar-nav>li>a,.uk-overlay-primary .uk-navbar-nav>li>a,.uk-offcanvas-bar .uk-navbar-nav>li>a{color:rgba(255,255,255,0.5)}.uk-light .uk-navbar-nav>li:hover>a,.uk-section-primary:not(.uk-preserve-color) .uk-navbar-nav>li:hover>a,.uk-section-secondary:not(.uk-preserve-color) .uk-navbar-nav>li:hover>a,.uk-tile-primary:not(.uk-preserve-color) .uk-navbar-nav>li:hover>a,.uk-tile-secondary:not(.uk-preserve-color) .uk-navbar-nav>li:hover>a,.uk-card-primary.uk-card-body .uk-navbar-nav>li:hover>a,.uk-card-primary>:not([class*='uk-card-media']) .uk-navbar-nav>li:hover>a,.uk-card-secondary.uk-card-body .uk-navbar-nav>li:hover>a,.uk-card-secondary>:not([class*='uk-card-media']) .uk-navbar-nav>li:hover>a,.uk-overlay-primary .uk-navbar-nav>li:hover>a,.uk-offcanvas-bar .uk-navbar-nav>li:hover>a,.uk-light .uk-navbar-nav>li>a:focus,.uk-section-primary:not(.uk-preserve-color) .uk-navbar-nav>li>a:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-navbar-nav>li>a:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-navbar-nav>li>a:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-navbar-nav>li>a:focus,.uk-card-primary.uk-card-body .uk-navbar-nav>li>a:focus,.uk-card-primary>:not([class*='uk-card-media']) .uk-navbar-nav>li>a:focus,.uk-card-secondary.uk-card-body .uk-navbar-nav>li>a:focus,.uk-card-secondary>:not([class*='uk-card-media']) .uk-navbar-nav>li>a:focus,.uk-overlay-primary .uk-navbar-nav>li>a:focus,.uk-offcanvas-bar .uk-navbar-nav>li>a:focus,.uk-light .uk-navbar-nav>li>a.uk-open,.uk-section-primary:not(.uk-preserve-color) .uk-navbar-nav>li>a.uk-open,.uk-section-secondary:not(.uk-preserve-color) .uk-navbar-nav>li>a.uk-open,.uk-tile-primary:not(.uk-preserve-color) .uk-navbar-nav>li>a.uk-open,.uk-tile-secondary:not(.uk-preserve-color) .uk-navbar-nav>li>a.uk-open,.uk-card-primary.uk-card-body .uk-navbar-nav>li>a.uk-open,.uk-card-primary>:not([class*='uk-card-media']) .uk-navbar-nav>li>a.uk-open,.uk-card-secondary.uk-card-body .uk-navbar-nav>li>a.uk-open,.uk-card-secondary>:not([class*='uk-card-media']) .uk-navbar-nav>li>a.uk-open,.uk-overlay-primary .uk-navbar-nav>li>a.uk-open,.uk-offcanvas-bar .uk-navbar-nav>li>a.uk-open{color:rgba(255,255,255,0.7)}.uk-light .uk-navbar-nav>li>a:active,.uk-section-primary:not(.uk-preserve-color) .uk-navbar-nav>li>a:active,.uk-section-secondary:not(.uk-preserve-color) .uk-navbar-nav>li>a:active,.uk-tile-primary:not(.uk-preserve-color) .uk-navbar-nav>li>a:active,.uk-tile-secondary:not(.uk-preserve-color) .uk-navbar-nav>li>a:active,.uk-card-primary.uk-card-body .uk-navbar-nav>li>a:active,.uk-card-primary>:not([class*='uk-card-media']) .uk-navbar-nav>li>a:active,.uk-card-secondary.uk-card-body .uk-navbar-nav>li>a:active,.uk-card-secondary>:not([class*='uk-card-media']) .uk-navbar-nav>li>a:active,.uk-overlay-primary .uk-navbar-nav>li>a:active,.uk-offcanvas-bar .uk-navbar-nav>li>a:active{color:#fff}.uk-light .uk-navbar-nav>li.uk-active>a,.uk-section-primary:not(.uk-preserve-color) .uk-navbar-nav>li.uk-active>a,.uk-section-secondary:not(.uk-preserve-color) .uk-navbar-nav>li.uk-active>a,.uk-tile-primary:not(.uk-preserve-color) .uk-navbar-nav>li.uk-active>a,.uk-tile-secondary:not(.uk-preserve-color) .uk-navbar-nav>li.uk-active>a,.uk-card-primary.uk-card-body .uk-navbar-nav>li.uk-active>a,.uk-card-primary>:not([class*='uk-card-media']) .uk-navbar-nav>li.uk-active>a,.uk-card-secondary.uk-card-body .uk-navbar-nav>li.uk-active>a,.uk-card-secondary>:not([class*='uk-card-media']) .uk-navbar-nav>li.uk-active>a,.uk-overlay-primary .uk-navbar-nav>li.uk-active>a,.uk-offcanvas-bar .uk-navbar-nav>li.uk-active>a{color:#fff}.uk-light .uk-navbar-item,.uk-section-primary:not(.uk-preserve-color) .uk-navbar-item,.uk-section-secondary:not(.uk-preserve-color) .uk-navbar-item,.uk-tile-primary:not(.uk-preserve-color) .uk-navbar-item,.uk-tile-secondary:not(.uk-preserve-color) .uk-navbar-item,.uk-card-primary.uk-card-body .uk-navbar-item,.uk-card-primary>:not([class*='uk-card-media']) .uk-navbar-item,.uk-card-secondary.uk-card-body .uk-navbar-item,.uk-card-secondary>:not([class*='uk-card-media']) .uk-navbar-item,.uk-overlay-primary .uk-navbar-item,.uk-offcanvas-bar .uk-navbar-item{color:rgba(255,255,255,0.7)}.uk-light .uk-navbar-toggle,.uk-section-primary:not(.uk-preserve-color) .uk-navbar-toggle,.uk-section-secondary:not(.uk-preserve-color) .uk-navbar-toggle,.uk-tile-primary:not(.uk-preserve-color) .uk-navbar-toggle,.uk-tile-secondary:not(.uk-preserve-color) .uk-navbar-toggle,.uk-card-primary.uk-card-body .uk-navbar-toggle,.uk-card-primary>:not([class*='uk-card-media']) .uk-navbar-toggle,.uk-card-secondary.uk-card-body .uk-navbar-toggle,.uk-card-secondary>:not([class*='uk-card-media']) .uk-navbar-toggle,.uk-overlay-primary .uk-navbar-toggle,.uk-offcanvas-bar .uk-navbar-toggle{color:rgba(255,255,255,0.5)}.uk-light .uk-navbar-toggle:hover,.uk-section-primary:not(.uk-preserve-color) .uk-navbar-toggle:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-navbar-toggle:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-navbar-toggle:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-navbar-toggle:hover,.uk-card-primary.uk-card-body .uk-navbar-toggle:hover,.uk-card-primary>:not([class*='uk-card-media']) .uk-navbar-toggle:hover,.uk-card-secondary.uk-card-body .uk-navbar-toggle:hover,.uk-card-secondary>:not([class*='uk-card-media']) .uk-navbar-toggle:hover,.uk-overlay-primary .uk-navbar-toggle:hover,.uk-offcanvas-bar .uk-navbar-toggle:hover,.uk-light .uk-navbar-toggle:focus,.uk-section-primary:not(.uk-preserve-color) .uk-navbar-toggle:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-navbar-toggle:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-navbar-toggle:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-navbar-toggle:focus,.uk-card-primary.uk-card-body .uk-navbar-toggle:focus,.uk-card-primary>:not([class*='uk-card-media']) .uk-navbar-toggle:focus,.uk-card-secondary.uk-card-body .uk-navbar-toggle:focus,.uk-card-secondary>:not([class*='uk-card-media']) .uk-navbar-toggle:focus,.uk-overlay-primary .uk-navbar-toggle:focus,.uk-offcanvas-bar .uk-navbar-toggle:focus,.uk-light .uk-navbar-toggle.uk-open,.uk-section-primary:not(.uk-preserve-color) .uk-navbar-toggle.uk-open,.uk-section-secondary:not(.uk-preserve-color) .uk-navbar-toggle.uk-open,.uk-tile-primary:not(.uk-preserve-color) .uk-navbar-toggle.uk-open,.uk-tile-secondary:not(.uk-preserve-color) .uk-navbar-toggle.uk-open,.uk-card-primary.uk-card-body .uk-navbar-toggle.uk-open,.uk-card-primary>:not([class*='uk-card-media']) .uk-navbar-toggle.uk-open,.uk-card-secondary.uk-card-body .uk-navbar-toggle.uk-open,.uk-card-secondary>:not([class*='uk-card-media']) .uk-navbar-toggle.uk-open,.uk-overlay-primary .uk-navbar-toggle.uk-open,.uk-offcanvas-bar .uk-navbar-toggle.uk-open{color:rgba(255,255,255,0.7)}.uk-light .uk-subnav>*>:first-child,.uk-section-primary:not(.uk-preserve-color) .uk-subnav>*>:first-child,.uk-section-secondary:not(.uk-preserve-color) .uk-subnav>*>:first-child,.uk-tile-primary:not(.uk-preserve-color) .uk-subnav>*>:first-child,.uk-tile-secondary:not(.uk-preserve-color) .uk-subnav>*>:first-child,.uk-card-primary.uk-card-body .uk-subnav>*>:first-child,.uk-card-primary>:not([class*='uk-card-media']) .uk-subnav>*>:first-child,.uk-card-secondary.uk-card-body .uk-subnav>*>:first-child,.uk-card-secondary>:not([class*='uk-card-media']) .uk-subnav>*>:first-child,.uk-overlay-primary .uk-subnav>*>:first-child,.uk-offcanvas-bar .uk-subnav>*>:first-child{color:rgba(255,255,255,0.5)}.uk-light .uk-subnav>*>a:hover,.uk-section-primary:not(.uk-preserve-color) .uk-subnav>*>a:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-subnav>*>a:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-subnav>*>a:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-subnav>*>a:hover,.uk-card-primary.uk-card-body .uk-subnav>*>a:hover,.uk-card-primary>:not([class*='uk-card-media']) .uk-subnav>*>a:hover,.uk-card-secondary.uk-card-body .uk-subnav>*>a:hover,.uk-card-secondary>:not([class*='uk-card-media']) .uk-subnav>*>a:hover,.uk-overlay-primary .uk-subnav>*>a:hover,.uk-offcanvas-bar .uk-subnav>*>a:hover,.uk-light .uk-subnav>*>a:focus,.uk-section-primary:not(.uk-preserve-color) .uk-subnav>*>a:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-subnav>*>a:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-subnav>*>a:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-subnav>*>a:focus,.uk-card-primary.uk-card-body .uk-subnav>*>a:focus,.uk-card-primary>:not([class*='uk-card-media']) .uk-subnav>*>a:focus,.uk-card-secondary.uk-card-body .uk-subnav>*>a:focus,.uk-card-secondary>:not([class*='uk-card-media']) .uk-subnav>*>a:focus,.uk-overlay-primary .uk-subnav>*>a:focus,.uk-offcanvas-bar .uk-subnav>*>a:focus{color:rgba(255,255,255,0.7)}.uk-light .uk-subnav>.uk-active>a,.uk-section-primary:not(.uk-preserve-color) .uk-subnav>.uk-active>a,.uk-section-secondary:not(.uk-preserve-color) .uk-subnav>.uk-active>a,.uk-tile-primary:not(.uk-preserve-color) .uk-subnav>.uk-active>a,.uk-tile-secondary:not(.uk-preserve-color) .uk-subnav>.uk-active>a,.uk-card-primary.uk-card-body .uk-subnav>.uk-active>a,.uk-card-primary>:not([class*='uk-card-media']) .uk-subnav>.uk-active>a,.uk-card-secondary.uk-card-body .uk-subnav>.uk-active>a,.uk-card-secondary>:not([class*='uk-card-media']) .uk-subnav>.uk-active>a,.uk-overlay-primary .uk-subnav>.uk-active>a,.uk-offcanvas-bar .uk-subnav>.uk-active>a{color:#fff}.uk-light .uk-subnav-divider>:nth-child(n+2):not(.uk-first-column)::before,.uk-section-primary:not(.uk-preserve-color) .uk-subnav-divider>:nth-child(n+2):not(.uk-first-column)::before,.uk-section-secondary:not(.uk-preserve-color) .uk-subnav-divider>:nth-child(n+2):not(.uk-first-column)::before,.uk-tile-primary:not(.uk-preserve-color) .uk-subnav-divider>:nth-child(n+2):not(.uk-first-column)::before,.uk-tile-secondary:not(.uk-preserve-color) .uk-subnav-divider>:nth-child(n+2):not(.uk-first-column)::before,.uk-card-primary.uk-card-body .uk-subnav-divider>:nth-child(n+2):not(.uk-first-column)::before,.uk-card-primary>:not([class*='uk-card-media']) .uk-subnav-divider>:nth-child(n+2):not(.uk-first-column)::before,.uk-card-secondary.uk-card-body .uk-subnav-divider>:nth-child(n+2):not(.uk-first-column)::before,.uk-card-secondary>:not([class*='uk-card-media']) .uk-subnav-divider>:nth-child(n+2):not(.uk-first-column)::before,.uk-overlay-primary .uk-subnav-divider>:nth-child(n+2):not(.uk-first-column)::before,.uk-offcanvas-bar .uk-subnav-divider>:nth-child(n+2):not(.uk-first-column)::before{border-left-color:rgba(255,255,255,0.2)}.uk-light .uk-subnav-pill>*>:first-child,.uk-section-primary:not(.uk-preserve-color) .uk-subnav-pill>*>:first-child,.uk-section-secondary:not(.uk-preserve-color) .uk-subnav-pill>*>:first-child,.uk-tile-primary:not(.uk-preserve-color) .uk-subnav-pill>*>:first-child,.uk-tile-secondary:not(.uk-preserve-color) .uk-subnav-pill>*>:first-child,.uk-card-primary.uk-card-body .uk-subnav-pill>*>:first-child,.uk-card-primary>:not([class*='uk-card-media']) .uk-subnav-pill>*>:first-child,.uk-card-secondary.uk-card-body .uk-subnav-pill>*>:first-child,.uk-card-secondary>:not([class*='uk-card-media']) .uk-subnav-pill>*>:first-child,.uk-overlay-primary .uk-subnav-pill>*>:first-child,.uk-offcanvas-bar .uk-subnav-pill>*>:first-child{background-color:rgba(0,0,0,0);color:rgba(255,255,255,0.5)}.uk-light .uk-subnav-pill>*>a:hover,.uk-section-primary:not(.uk-preserve-color) .uk-subnav-pill>*>a:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-subnav-pill>*>a:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-subnav-pill>*>a:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-subnav-pill>*>a:hover,.uk-card-primary.uk-card-body .uk-subnav-pill>*>a:hover,.uk-card-primary>:not([class*='uk-card-media']) .uk-subnav-pill>*>a:hover,.uk-card-secondary.uk-card-body .uk-subnav-pill>*>a:hover,.uk-card-secondary>:not([class*='uk-card-media']) .uk-subnav-pill>*>a:hover,.uk-overlay-primary .uk-subnav-pill>*>a:hover,.uk-offcanvas-bar .uk-subnav-pill>*>a:hover,.uk-light .uk-subnav-pill>*>a:focus,.uk-section-primary:not(.uk-preserve-color) .uk-subnav-pill>*>a:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-subnav-pill>*>a:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-subnav-pill>*>a:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-subnav-pill>*>a:focus,.uk-card-primary.uk-card-body .uk-subnav-pill>*>a:focus,.uk-card-primary>:not([class*='uk-card-media']) .uk-subnav-pill>*>a:focus,.uk-card-secondary.uk-card-body .uk-subnav-pill>*>a:focus,.uk-card-secondary>:not([class*='uk-card-media']) .uk-subnav-pill>*>a:focus,.uk-overlay-primary .uk-subnav-pill>*>a:focus,.uk-offcanvas-bar .uk-subnav-pill>*>a:focus{background-color:rgba(255,255,255,0.1);color:rgba(255,255,255,0.7)}.uk-light .uk-subnav-pill>*>a:active,.uk-section-primary:not(.uk-preserve-color) .uk-subnav-pill>*>a:active,.uk-section-secondary:not(.uk-preserve-color) .uk-subnav-pill>*>a:active,.uk-tile-primary:not(.uk-preserve-color) .uk-subnav-pill>*>a:active,.uk-tile-secondary:not(.uk-preserve-color) .uk-subnav-pill>*>a:active,.uk-card-primary.uk-card-body .uk-subnav-pill>*>a:active,.uk-card-primary>:not([class*='uk-card-media']) .uk-subnav-pill>*>a:active,.uk-card-secondary.uk-card-body .uk-subnav-pill>*>a:active,.uk-card-secondary>:not([class*='uk-card-media']) .uk-subnav-pill>*>a:active,.uk-overlay-primary .uk-subnav-pill>*>a:active,.uk-offcanvas-bar .uk-subnav-pill>*>a:active{background-color:rgba(255,255,255,0.1);color:rgba(255,255,255,0.7)}.uk-light .uk-subnav-pill>.uk-active>a,.uk-section-primary:not(.uk-preserve-color) .uk-subnav-pill>.uk-active>a,.uk-section-secondary:not(.uk-preserve-color) .uk-subnav-pill>.uk-active>a,.uk-tile-primary:not(.uk-preserve-color) .uk-subnav-pill>.uk-active>a,.uk-tile-secondary:not(.uk-preserve-color) .uk-subnav-pill>.uk-active>a,.uk-card-primary.uk-card-body .uk-subnav-pill>.uk-active>a,.uk-card-primary>:not([class*='uk-card-media']) .uk-subnav-pill>.uk-active>a,.uk-card-secondary.uk-card-body .uk-subnav-pill>.uk-active>a,.uk-card-secondary>:not([class*='uk-card-media']) .uk-subnav-pill>.uk-active>a,.uk-overlay-primary .uk-subnav-pill>.uk-active>a,.uk-offcanvas-bar .uk-subnav-pill>.uk-active>a{background-color:#fff;color:#666}.uk-light .uk-subnav>.uk-disabled>a,.uk-section-primary:not(.uk-preserve-color) .uk-subnav>.uk-disabled>a,.uk-section-secondary:not(.uk-preserve-color) .uk-subnav>.uk-disabled>a,.uk-tile-primary:not(.uk-preserve-color) .uk-subnav>.uk-disabled>a,.uk-tile-secondary:not(.uk-preserve-color) .uk-subnav>.uk-disabled>a,.uk-card-primary.uk-card-body .uk-subnav>.uk-disabled>a,.uk-card-primary>:not([class*='uk-card-media']) .uk-subnav>.uk-disabled>a,.uk-card-secondary.uk-card-body .uk-subnav>.uk-disabled>a,.uk-card-secondary>:not([class*='uk-card-media']) .uk-subnav>.uk-disabled>a,.uk-overlay-primary .uk-subnav>.uk-disabled>a,.uk-offcanvas-bar .uk-subnav>.uk-disabled>a{color:rgba(255,255,255,0.5)}.uk-light .uk-breadcrumb>*>*,.uk-section-primary:not(.uk-preserve-color) .uk-breadcrumb>*>*,.uk-section-secondary:not(.uk-preserve-color) .uk-breadcrumb>*>*,.uk-tile-primary:not(.uk-preserve-color) .uk-breadcrumb>*>*,.uk-tile-secondary:not(.uk-preserve-color) .uk-breadcrumb>*>*,.uk-card-primary.uk-card-body .uk-breadcrumb>*>*,.uk-card-primary>:not([class*='uk-card-media']) .uk-breadcrumb>*>*,.uk-card-secondary.uk-card-body .uk-breadcrumb>*>*,.uk-card-secondary>:not([class*='uk-card-media']) .uk-breadcrumb>*>*,.uk-overlay-primary .uk-breadcrumb>*>*,.uk-offcanvas-bar .uk-breadcrumb>*>*{color:rgba(255,255,255,0.5)}.uk-light .uk-breadcrumb>*>:hover,.uk-section-primary:not(.uk-preserve-color) .uk-breadcrumb>*>:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-breadcrumb>*>:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-breadcrumb>*>:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-breadcrumb>*>:hover,.uk-card-primary.uk-card-body .uk-breadcrumb>*>:hover,.uk-card-primary>:not([class*='uk-card-media']) .uk-breadcrumb>*>:hover,.uk-card-secondary.uk-card-body .uk-breadcrumb>*>:hover,.uk-card-secondary>:not([class*='uk-card-media']) .uk-breadcrumb>*>:hover,.uk-overlay-primary .uk-breadcrumb>*>:hover,.uk-offcanvas-bar .uk-breadcrumb>*>:hover,.uk-light .uk-breadcrumb>*>:focus,.uk-section-primary:not(.uk-preserve-color) .uk-breadcrumb>*>:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-breadcrumb>*>:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-breadcrumb>*>:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-breadcrumb>*>:focus,.uk-card-primary.uk-card-body .uk-breadcrumb>*>:focus,.uk-card-primary>:not([class*='uk-card-media']) .uk-breadcrumb>*>:focus,.uk-card-secondary.uk-card-body .uk-breadcrumb>*>:focus,.uk-card-secondary>:not([class*='uk-card-media']) .uk-breadcrumb>*>:focus,.uk-overlay-primary .uk-breadcrumb>*>:focus,.uk-offcanvas-bar .uk-breadcrumb>*>:focus{color:rgba(255,255,255,0.7)}.uk-light .uk-breadcrumb>:last-child>*,.uk-section-primary:not(.uk-preserve-color) .uk-breadcrumb>:last-child>*,.uk-section-secondary:not(.uk-preserve-color) .uk-breadcrumb>:last-child>*,.uk-tile-primary:not(.uk-preserve-color) .uk-breadcrumb>:last-child>*,.uk-tile-secondary:not(.uk-preserve-color) .uk-breadcrumb>:last-child>*,.uk-card-primary.uk-card-body .uk-breadcrumb>:last-child>*,.uk-card-primary>:not([class*='uk-card-media']) .uk-breadcrumb>:last-child>*,.uk-card-secondary.uk-card-body .uk-breadcrumb>:last-child>*,.uk-card-secondary>:not([class*='uk-card-media']) .uk-breadcrumb>:last-child>*,.uk-overlay-primary .uk-breadcrumb>:last-child>*,.uk-offcanvas-bar .uk-breadcrumb>:last-child>*{color:rgba(255,255,255,0.7)}.uk-light .uk-breadcrumb>:nth-child(n+2):not(.uk-first-column)::before,.uk-section-primary:not(.uk-preserve-color) .uk-breadcrumb>:nth-child(n+2):not(.uk-first-column)::before,.uk-section-secondary:not(.uk-preserve-color) .uk-breadcrumb>:nth-child(n+2):not(.uk-first-column)::before,.uk-tile-primary:not(.uk-preserve-color) .uk-breadcrumb>:nth-child(n+2):not(.uk-first-column)::before,.uk-tile-secondary:not(.uk-preserve-color) .uk-breadcrumb>:nth-child(n+2):not(.uk-first-column)::before,.uk-card-primary.uk-card-body .uk-breadcrumb>:nth-child(n+2):not(.uk-first-column)::before,.uk-card-primary>:not([class*='uk-card-media']) .uk-breadcrumb>:nth-child(n+2):not(.uk-first-column)::before,.uk-card-secondary.uk-card-body .uk-breadcrumb>:nth-child(n+2):not(.uk-first-column)::before,.uk-card-secondary>:not([class*='uk-card-media']) .uk-breadcrumb>:nth-child(n+2):not(.uk-first-column)::before,.uk-overlay-primary .uk-breadcrumb>:nth-child(n+2):not(.uk-first-column)::before,.uk-offcanvas-bar .uk-breadcrumb>:nth-child(n+2):not(.uk-first-column)::before{color:rgba(255,255,255,0.5)}.uk-light .uk-pagination>*>*,.uk-section-primary:not(.uk-preserve-color) .uk-pagination>*>*,.uk-section-secondary:not(.uk-preserve-color) .uk-pagination>*>*,.uk-tile-primary:not(.uk-preserve-color) .uk-pagination>*>*,.uk-tile-secondary:not(.uk-preserve-color) .uk-pagination>*>*,.uk-card-primary.uk-card-body .uk-pagination>*>*,.uk-card-primary>:not([class*='uk-card-media']) .uk-pagination>*>*,.uk-card-secondary.uk-card-body .uk-pagination>*>*,.uk-card-secondary>:not([class*='uk-card-media']) .uk-pagination>*>*,.uk-overlay-primary .uk-pagination>*>*,.uk-offcanvas-bar .uk-pagination>*>*{color:rgba(255,255,255,0.5)}.uk-light .uk-pagination>*>:hover,.uk-section-primary:not(.uk-preserve-color) .uk-pagination>*>:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-pagination>*>:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-pagination>*>:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-pagination>*>:hover,.uk-card-primary.uk-card-body .uk-pagination>*>:hover,.uk-card-primary>:not([class*='uk-card-media']) .uk-pagination>*>:hover,.uk-card-secondary.uk-card-body .uk-pagination>*>:hover,.uk-card-secondary>:not([class*='uk-card-media']) .uk-pagination>*>:hover,.uk-overlay-primary .uk-pagination>*>:hover,.uk-offcanvas-bar .uk-pagination>*>:hover,.uk-light .uk-pagination>*>:focus,.uk-section-primary:not(.uk-preserve-color) .uk-pagination>*>:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-pagination>*>:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-pagination>*>:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-pagination>*>:focus,.uk-card-primary.uk-card-body .uk-pagination>*>:focus,.uk-card-primary>:not([class*='uk-card-media']) .uk-pagination>*>:focus,.uk-card-secondary.uk-card-body .uk-pagination>*>:focus,.uk-card-secondary>:not([class*='uk-card-media']) .uk-pagination>*>:focus,.uk-overlay-primary .uk-pagination>*>:focus,.uk-offcanvas-bar .uk-pagination>*>:focus{color:rgba(255,255,255,0.7)}.uk-light .uk-pagination>.uk-active>*,.uk-section-primary:not(.uk-preserve-color) .uk-pagination>.uk-active>*,.uk-section-secondary:not(.uk-preserve-color) .uk-pagination>.uk-active>*,.uk-tile-primary:not(.uk-preserve-color) .uk-pagination>.uk-active>*,.uk-tile-secondary:not(.uk-preserve-color) .uk-pagination>.uk-active>*,.uk-card-primary.uk-card-body .uk-pagination>.uk-active>*,.uk-card-primary>:not([class*='uk-card-media']) .uk-pagination>.uk-active>*,.uk-card-secondary.uk-card-body .uk-pagination>.uk-active>*,.uk-card-secondary>:not([class*='uk-card-media']) .uk-pagination>.uk-active>*,.uk-overlay-primary .uk-pagination>.uk-active>*,.uk-offcanvas-bar .uk-pagination>.uk-active>*{color:rgba(255,255,255,0.7)}.uk-light .uk-pagination>.uk-disabled>*,.uk-section-primary:not(.uk-preserve-color) .uk-pagination>.uk-disabled>*,.uk-section-secondary:not(.uk-preserve-color) .uk-pagination>.uk-disabled>*,.uk-tile-primary:not(.uk-preserve-color) .uk-pagination>.uk-disabled>*,.uk-tile-secondary:not(.uk-preserve-color) .uk-pagination>.uk-disabled>*,.uk-card-primary.uk-card-body .uk-pagination>.uk-disabled>*,.uk-card-primary>:not([class*='uk-card-media']) .uk-pagination>.uk-disabled>*,.uk-card-secondary.uk-card-body .uk-pagination>.uk-disabled>*,.uk-card-secondary>:not([class*='uk-card-media']) .uk-pagination>.uk-disabled>*,.uk-overlay-primary .uk-pagination>.uk-disabled>*,.uk-offcanvas-bar .uk-pagination>.uk-disabled>*{color:rgba(255,255,255,0.5)}.uk-light .uk-tab::before,.uk-section-primary:not(.uk-preserve-color) .uk-tab::before,.uk-section-secondary:not(.uk-preserve-color) .uk-tab::before,.uk-tile-primary:not(.uk-preserve-color) .uk-tab::before,.uk-tile-secondary:not(.uk-preserve-color) .uk-tab::before,.uk-card-primary.uk-card-body .uk-tab::before,.uk-card-primary>:not([class*='uk-card-media']) .uk-tab::before,.uk-card-secondary.uk-card-body .uk-tab::before,.uk-card-secondary>:not([class*='uk-card-media']) .uk-tab::before,.uk-overlay-primary .uk-tab::before,.uk-offcanvas-bar .uk-tab::before{border-color:rgba(255,255,255,0.2)}.uk-light .uk-tab>*>a,.uk-section-primary:not(.uk-preserve-color) .uk-tab>*>a,.uk-section-secondary:not(.uk-preserve-color) .uk-tab>*>a,.uk-tile-primary:not(.uk-preserve-color) .uk-tab>*>a,.uk-tile-secondary:not(.uk-preserve-color) .uk-tab>*>a,.uk-card-primary.uk-card-body .uk-tab>*>a,.uk-card-primary>:not([class*='uk-card-media']) .uk-tab>*>a,.uk-card-secondary.uk-card-body .uk-tab>*>a,.uk-card-secondary>:not([class*='uk-card-media']) .uk-tab>*>a,.uk-overlay-primary .uk-tab>*>a,.uk-offcanvas-bar .uk-tab>*>a{color:rgba(255,255,255,0.5)}.uk-light .uk-tab>*>a:hover,.uk-section-primary:not(.uk-preserve-color) .uk-tab>*>a:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-tab>*>a:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-tab>*>a:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-tab>*>a:hover,.uk-card-primary.uk-card-body .uk-tab>*>a:hover,.uk-card-primary>:not([class*='uk-card-media']) .uk-tab>*>a:hover,.uk-card-secondary.uk-card-body .uk-tab>*>a:hover,.uk-card-secondary>:not([class*='uk-card-media']) .uk-tab>*>a:hover,.uk-overlay-primary .uk-tab>*>a:hover,.uk-offcanvas-bar .uk-tab>*>a:hover,.uk-light .uk-tab>*>a:focus,.uk-section-primary:not(.uk-preserve-color) .uk-tab>*>a:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-tab>*>a:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-tab>*>a:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-tab>*>a:focus,.uk-card-primary.uk-card-body .uk-tab>*>a:focus,.uk-card-primary>:not([class*='uk-card-media']) .uk-tab>*>a:focus,.uk-card-secondary.uk-card-body .uk-tab>*>a:focus,.uk-card-secondary>:not([class*='uk-card-media']) .uk-tab>*>a:focus,.uk-overlay-primary .uk-tab>*>a:focus,.uk-offcanvas-bar .uk-tab>*>a:focus{color:rgba(255,255,255,0.7)}.uk-light .uk-tab>.uk-active>a,.uk-section-primary:not(.uk-preserve-color) .uk-tab>.uk-active>a,.uk-section-secondary:not(.uk-preserve-color) .uk-tab>.uk-active>a,.uk-tile-primary:not(.uk-preserve-color) .uk-tab>.uk-active>a,.uk-tile-secondary:not(.uk-preserve-color) .uk-tab>.uk-active>a,.uk-card-primary.uk-card-body .uk-tab>.uk-active>a,.uk-card-primary>:not([class*='uk-card-media']) .uk-tab>.uk-active>a,.uk-card-secondary.uk-card-body .uk-tab>.uk-active>a,.uk-card-secondary>:not([class*='uk-card-media']) .uk-tab>.uk-active>a,.uk-overlay-primary .uk-tab>.uk-active>a,.uk-offcanvas-bar .uk-tab>.uk-active>a{color:#fff;border-color:#fff}.uk-light .uk-tab>.uk-disabled>a,.uk-section-primary:not(.uk-preserve-color) .uk-tab>.uk-disabled>a,.uk-section-secondary:not(.uk-preserve-color) .uk-tab>.uk-disabled>a,.uk-tile-primary:not(.uk-preserve-color) .uk-tab>.uk-disabled>a,.uk-tile-secondary:not(.uk-preserve-color) .uk-tab>.uk-disabled>a,.uk-card-primary.uk-card-body .uk-tab>.uk-disabled>a,.uk-card-primary>:not([class*='uk-card-media']) .uk-tab>.uk-disabled>a,.uk-card-secondary.uk-card-body .uk-tab>.uk-disabled>a,.uk-card-secondary>:not([class*='uk-card-media']) .uk-tab>.uk-disabled>a,.uk-overlay-primary .uk-tab>.uk-disabled>a,.uk-offcanvas-bar .uk-tab>.uk-disabled>a{color:rgba(255,255,255,0.5)}.uk-light .uk-slidenav,.uk-section-primary:not(.uk-preserve-color) .uk-slidenav,.uk-section-secondary:not(.uk-preserve-color) .uk-slidenav,.uk-tile-primary:not(.uk-preserve-color) .uk-slidenav,.uk-tile-secondary:not(.uk-preserve-color) .uk-slidenav,.uk-card-primary.uk-card-body .uk-slidenav,.uk-card-primary>:not([class*='uk-card-media']) .uk-slidenav,.uk-card-secondary.uk-card-body .uk-slidenav,.uk-card-secondary>:not([class*='uk-card-media']) .uk-slidenav,.uk-overlay-primary .uk-slidenav,.uk-offcanvas-bar .uk-slidenav{color:rgba(255,255,255,0.7)}.uk-light .uk-slidenav:hover,.uk-section-primary:not(.uk-preserve-color) .uk-slidenav:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-slidenav:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-slidenav:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-slidenav:hover,.uk-card-primary.uk-card-body .uk-slidenav:hover,.uk-card-primary>:not([class*='uk-card-media']) .uk-slidenav:hover,.uk-card-secondary.uk-card-body .uk-slidenav:hover,.uk-card-secondary>:not([class*='uk-card-media']) .uk-slidenav:hover,.uk-overlay-primary .uk-slidenav:hover,.uk-offcanvas-bar .uk-slidenav:hover,.uk-light .uk-slidenav:focus,.uk-section-primary:not(.uk-preserve-color) .uk-slidenav:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-slidenav:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-slidenav:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-slidenav:focus,.uk-card-primary.uk-card-body .uk-slidenav:focus,.uk-card-primary>:not([class*='uk-card-media']) .uk-slidenav:focus,.uk-card-secondary.uk-card-body .uk-slidenav:focus,.uk-card-secondary>:not([class*='uk-card-media']) .uk-slidenav:focus,.uk-overlay-primary .uk-slidenav:focus,.uk-offcanvas-bar .uk-slidenav:focus{color:rgba(255,255,255,0.95)}.uk-light .uk-slidenav:active,.uk-section-primary:not(.uk-preserve-color) .uk-slidenav:active,.uk-section-secondary:not(.uk-preserve-color) .uk-slidenav:active,.uk-tile-primary:not(.uk-preserve-color) .uk-slidenav:active,.uk-tile-secondary:not(.uk-preserve-color) .uk-slidenav:active,.uk-card-primary.uk-card-body .uk-slidenav:active,.uk-card-primary>:not([class*='uk-card-media']) .uk-slidenav:active,.uk-card-secondary.uk-card-body .uk-slidenav:active,.uk-card-secondary>:not([class*='uk-card-media']) .uk-slidenav:active,.uk-overlay-primary .uk-slidenav:active,.uk-offcanvas-bar .uk-slidenav:active{color:rgba(255,255,255,0.7)}.uk-light .uk-dotnav>*>*,.uk-section-primary:not(.uk-preserve-color) .uk-dotnav>*>*,.uk-section-secondary:not(.uk-preserve-color) .uk-dotnav>*>*,.uk-tile-primary:not(.uk-preserve-color) .uk-dotnav>*>*,.uk-tile-secondary:not(.uk-preserve-color) .uk-dotnav>*>*,.uk-card-primary.uk-card-body .uk-dotnav>*>*,.uk-card-primary>:not([class*='uk-card-media']) .uk-dotnav>*>*,.uk-card-secondary.uk-card-body .uk-dotnav>*>*,.uk-card-secondary>:not([class*='uk-card-media']) .uk-dotnav>*>*,.uk-overlay-primary .uk-dotnav>*>*,.uk-offcanvas-bar .uk-dotnav>*>*{background-color:rgba(0,0,0,0);border-color:rgba(255,255,255,0.9)}.uk-light .uk-dotnav>*>:hover,.uk-section-primary:not(.uk-preserve-color) .uk-dotnav>*>:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-dotnav>*>:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-dotnav>*>:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-dotnav>*>:hover,.uk-card-primary.uk-card-body .uk-dotnav>*>:hover,.uk-card-primary>:not([class*='uk-card-media']) .uk-dotnav>*>:hover,.uk-card-secondary.uk-card-body .uk-dotnav>*>:hover,.uk-card-secondary>:not([class*='uk-card-media']) .uk-dotnav>*>:hover,.uk-overlay-primary .uk-dotnav>*>:hover,.uk-offcanvas-bar .uk-dotnav>*>:hover,.uk-light .uk-dotnav>*>:focus,.uk-section-primary:not(.uk-preserve-color) .uk-dotnav>*>:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-dotnav>*>:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-dotnav>*>:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-dotnav>*>:focus,.uk-card-primary.uk-card-body .uk-dotnav>*>:focus,.uk-card-primary>:not([class*='uk-card-media']) .uk-dotnav>*>:focus,.uk-card-secondary.uk-card-body .uk-dotnav>*>:focus,.uk-card-secondary>:not([class*='uk-card-media']) .uk-dotnav>*>:focus,.uk-overlay-primary .uk-dotnav>*>:focus,.uk-offcanvas-bar .uk-dotnav>*>:focus{background-color:rgba(255,255,255,0.9);border-color:transparent}.uk-light .uk-dotnav>*>:active,.uk-section-primary:not(.uk-preserve-color) .uk-dotnav>*>:active,.uk-section-secondary:not(.uk-preserve-color) .uk-dotnav>*>:active,.uk-tile-primary:not(.uk-preserve-color) .uk-dotnav>*>:active,.uk-tile-secondary:not(.uk-preserve-color) .uk-dotnav>*>:active,.uk-card-primary.uk-card-body .uk-dotnav>*>:active,.uk-card-primary>:not([class*='uk-card-media']) .uk-dotnav>*>:active,.uk-card-secondary.uk-card-body .uk-dotnav>*>:active,.uk-card-secondary>:not([class*='uk-card-media']) .uk-dotnav>*>:active,.uk-overlay-primary .uk-dotnav>*>:active,.uk-offcanvas-bar .uk-dotnav>*>:active{background-color:rgba(255,255,255,0.5);border-color:transparent}.uk-light .uk-dotnav>.uk-active>*,.uk-section-primary:not(.uk-preserve-color) .uk-dotnav>.uk-active>*,.uk-section-secondary:not(.uk-preserve-color) .uk-dotnav>.uk-active>*,.uk-tile-primary:not(.uk-preserve-color) .uk-dotnav>.uk-active>*,.uk-tile-secondary:not(.uk-preserve-color) .uk-dotnav>.uk-active>*,.uk-card-primary.uk-card-body .uk-dotnav>.uk-active>*,.uk-card-primary>:not([class*='uk-card-media']) .uk-dotnav>.uk-active>*,.uk-card-secondary.uk-card-body .uk-dotnav>.uk-active>*,.uk-card-secondary>:not([class*='uk-card-media']) .uk-dotnav>.uk-active>*,.uk-overlay-primary .uk-dotnav>.uk-active>*,.uk-offcanvas-bar .uk-dotnav>.uk-active>*{background-color:rgba(255,255,255,0.9);border-color:transparent}.uk-light .uk-accordion-title::after,.uk-section-primary:not(.uk-preserve-color) .uk-accordion-title::after,.uk-section-secondary:not(.uk-preserve-color) .uk-accordion-title::after,.uk-tile-primary:not(.uk-preserve-color) .uk-accordion-title::after,.uk-tile-secondary:not(.uk-preserve-color) .uk-accordion-title::after,.uk-card-primary.uk-card-body .uk-accordion-title::after,.uk-card-primary>:not([class*='uk-card-media']) .uk-accordion-title::after,.uk-card-secondary.uk-card-body .uk-accordion-title::after,.uk-card-secondary>:not([class*='uk-card-media']) .uk-accordion-title::after,.uk-overlay-primary .uk-accordion-title::after,.uk-offcanvas-bar .uk-accordion-title::after{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2213%22%20height%3D%2213%22%20viewBox%3D%220%200%2013%2013%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Crect%20fill%3D%22rgba(255,255,255,0.7)%22%20width%3D%2213%22%20height%3D%221%22%20x%3D%220%22%20y%3D%226%22%20%2F%3E%0A%20%20%20%20%3Crect%20fill%3D%22rgba(255,255,255,0.7)%22%20width%3D%221%22%20height%3D%2213%22%20x%3D%226%22%20y%3D%220%22%20%2F%3E%0A%3C%2Fsvg%3E")}.uk-light .uk-open>.uk-accordion-title::after,.uk-section-primary:not(.uk-preserve-color) .uk-open>.uk-accordion-title::after,.uk-section-secondary:not(.uk-preserve-color) .uk-open>.uk-accordion-title::after,.uk-tile-primary:not(.uk-preserve-color) .uk-open>.uk-accordion-title::after,.uk-tile-secondary:not(.uk-preserve-color) .uk-open>.uk-accordion-title::after,.uk-card-primary.uk-card-body .uk-open>.uk-accordion-title::after,.uk-card-primary>:not([class*='uk-card-media']) .uk-open>.uk-accordion-title::after,.uk-card-secondary.uk-card-body .uk-open>.uk-accordion-title::after,.uk-card-secondary>:not([class*='uk-card-media']) .uk-open>.uk-accordion-title::after,.uk-overlay-primary .uk-open>.uk-accordion-title::after,.uk-offcanvas-bar .uk-open>.uk-accordion-title::after{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2213%22%20height%3D%2213%22%20viewBox%3D%220%200%2013%2013%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Crect%20fill%3D%22rgba(255,255,255,0.7)%22%20width%3D%2213%22%20height%3D%221%22%20x%3D%220%22%20y%3D%226%22%20%2F%3E%0A%3C%2Fsvg%3E")}.uk-light .uk-iconnav>*>a,.uk-section-primary:not(.uk-preserve-color) .uk-iconnav>*>a,.uk-section-secondary:not(.uk-preserve-color) .uk-iconnav>*>a,.uk-tile-primary:not(.uk-preserve-color) .uk-iconnav>*>a,.uk-tile-secondary:not(.uk-preserve-color) .uk-iconnav>*>a,.uk-card-primary.uk-card-body .uk-iconnav>*>a,.uk-card-primary>:not([class*='uk-card-media']) .uk-iconnav>*>a,.uk-card-secondary.uk-card-body .uk-iconnav>*>a,.uk-card-secondary>:not([class*='uk-card-media']) .uk-iconnav>*>a,.uk-overlay-primary .uk-iconnav>*>a,.uk-offcanvas-bar .uk-iconnav>*>a{color:rgba(255,255,255,0.5)}.uk-light .uk-iconnav>*>a:hover,.uk-section-primary:not(.uk-preserve-color) .uk-iconnav>*>a:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-iconnav>*>a:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-iconnav>*>a:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-iconnav>*>a:hover,.uk-card-primary.uk-card-body .uk-iconnav>*>a:hover,.uk-card-primary>:not([class*='uk-card-media']) .uk-iconnav>*>a:hover,.uk-card-secondary.uk-card-body .uk-iconnav>*>a:hover,.uk-card-secondary>:not([class*='uk-card-media']) .uk-iconnav>*>a:hover,.uk-overlay-primary .uk-iconnav>*>a:hover,.uk-offcanvas-bar .uk-iconnav>*>a:hover,.uk-light .uk-iconnav>*>a:focus,.uk-section-primary:not(.uk-preserve-color) .uk-iconnav>*>a:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-iconnav>*>a:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-iconnav>*>a:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-iconnav>*>a:focus,.uk-card-primary.uk-card-body .uk-iconnav>*>a:focus,.uk-card-primary>:not([class*='uk-card-media']) .uk-iconnav>*>a:focus,.uk-card-secondary.uk-card-body .uk-iconnav>*>a:focus,.uk-card-secondary>:not([class*='uk-card-media']) .uk-iconnav>*>a:focus,.uk-overlay-primary .uk-iconnav>*>a:focus,.uk-offcanvas-bar .uk-iconnav>*>a:focus{color:rgba(255,255,255,0.7)}.uk-light .uk-iconnav>.uk-active>a,.uk-section-primary:not(.uk-preserve-color) .uk-iconnav>.uk-active>a,.uk-section-secondary:not(.uk-preserve-color) .uk-iconnav>.uk-active>a,.uk-tile-primary:not(.uk-preserve-color) .uk-iconnav>.uk-active>a,.uk-tile-secondary:not(.uk-preserve-color) .uk-iconnav>.uk-active>a,.uk-card-primary.uk-card-body .uk-iconnav>.uk-active>a,.uk-card-primary>:not([class*='uk-card-media']) .uk-iconnav>.uk-active>a,.uk-card-secondary.uk-card-body .uk-iconnav>.uk-active>a,.uk-card-secondary>:not([class*='uk-card-media']) .uk-iconnav>.uk-active>a,.uk-overlay-primary .uk-iconnav>.uk-active>a,.uk-offcanvas-bar .uk-iconnav>.uk-active>a{color:rgba(255,255,255,0.7)}.uk-light .uk-text-lead,.uk-section-primary:not(.uk-preserve-color) .uk-text-lead,.uk-section-secondary:not(.uk-preserve-color) .uk-text-lead,.uk-tile-primary:not(.uk-preserve-color) .uk-text-lead,.uk-tile-secondary:not(.uk-preserve-color) .uk-text-lead,.uk-card-primary.uk-card-body .uk-text-lead,.uk-card-primary>:not([class*='uk-card-media']) .uk-text-lead,.uk-card-secondary.uk-card-body .uk-text-lead,.uk-card-secondary>:not([class*='uk-card-media']) .uk-text-lead,.uk-overlay-primary .uk-text-lead,.uk-offcanvas-bar .uk-text-lead{color:rgba(255,255,255,0.7)}.uk-light .uk-text-meta,.uk-section-primary:not(.uk-preserve-color) .uk-text-meta,.uk-section-secondary:not(.uk-preserve-color) .uk-text-meta,.uk-tile-primary:not(.uk-preserve-color) .uk-text-meta,.uk-tile-secondary:not(.uk-preserve-color) .uk-text-meta,.uk-card-primary.uk-card-body .uk-text-meta,.uk-card-primary>:not([class*='uk-card-media']) .uk-text-meta,.uk-card-secondary.uk-card-body .uk-text-meta,.uk-card-secondary>:not([class*='uk-card-media']) .uk-text-meta,.uk-overlay-primary .uk-text-meta,.uk-offcanvas-bar .uk-text-meta{color:rgba(255,255,255,0.5)}.uk-light .uk-text-muted,.uk-section-primary:not(.uk-preserve-color) .uk-text-muted,.uk-section-secondary:not(.uk-preserve-color) .uk-text-muted,.uk-tile-primary:not(.uk-preserve-color) .uk-text-muted,.uk-tile-secondary:not(.uk-preserve-color) .uk-text-muted,.uk-card-primary.uk-card-body .uk-text-muted,.uk-card-primary>:not([class*='uk-card-media']) .uk-text-muted,.uk-card-secondary.uk-card-body .uk-text-muted,.uk-card-secondary>:not([class*='uk-card-media']) .uk-text-muted,.uk-overlay-primary .uk-text-muted,.uk-offcanvas-bar .uk-text-muted{color:rgba(255,255,255,0.5) !important}.uk-light .uk-text-primary,.uk-section-primary:not(.uk-preserve-color) .uk-text-primary,.uk-section-secondary:not(.uk-preserve-color) .uk-text-primary,.uk-tile-primary:not(.uk-preserve-color) .uk-text-primary,.uk-tile-secondary:not(.uk-preserve-color) .uk-text-primary,.uk-card-primary.uk-card-body .uk-text-primary,.uk-card-primary>:not([class*='uk-card-media']) .uk-text-primary,.uk-card-secondary.uk-card-body .uk-text-primary,.uk-card-secondary>:not([class*='uk-card-media']) .uk-text-primary,.uk-overlay-primary .uk-text-primary,.uk-offcanvas-bar .uk-text-primary{color:rgba(255,255,255,0.7) !important}.uk-light .uk-column-divider,.uk-section-primary:not(.uk-preserve-color) .uk-column-divider,.uk-section-secondary:not(.uk-preserve-color) .uk-column-divider,.uk-tile-primary:not(.uk-preserve-color) .uk-column-divider,.uk-tile-secondary:not(.uk-preserve-color) .uk-column-divider,.uk-card-primary.uk-card-body .uk-column-divider,.uk-card-primary>:not([class*='uk-card-media']) .uk-column-divider,.uk-card-secondary.uk-card-body .uk-column-divider,.uk-card-secondary>:not([class*='uk-card-media']) .uk-column-divider,.uk-overlay-primary .uk-column-divider,.uk-offcanvas-bar .uk-column-divider{column-rule-color:rgba(255,255,255,0.2)}.uk-light .uk-logo,.uk-section-primary:not(.uk-preserve-color) .uk-logo,.uk-section-secondary:not(.uk-preserve-color) .uk-logo,.uk-tile-primary:not(.uk-preserve-color) .uk-logo,.uk-tile-secondary:not(.uk-preserve-color) .uk-logo,.uk-card-primary.uk-card-body .uk-logo,.uk-card-primary>:not([class*='uk-card-media']) .uk-logo,.uk-card-secondary.uk-card-body .uk-logo,.uk-card-secondary>:not([class*='uk-card-media']) .uk-logo,.uk-overlay-primary .uk-logo,.uk-offcanvas-bar .uk-logo{color:rgba(255,255,255,0.7)}.uk-light .uk-logo:hover,.uk-section-primary:not(.uk-preserve-color) .uk-logo:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-logo:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-logo:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-logo:hover,.uk-card-primary.uk-card-body .uk-logo:hover,.uk-card-primary>:not([class*='uk-card-media']) .uk-logo:hover,.uk-card-secondary.uk-card-body .uk-logo:hover,.uk-card-secondary>:not([class*='uk-card-media']) .uk-logo:hover,.uk-overlay-primary .uk-logo:hover,.uk-offcanvas-bar .uk-logo:hover,.uk-light .uk-logo:focus,.uk-section-primary:not(.uk-preserve-color) .uk-logo:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-logo:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-logo:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-logo:focus,.uk-card-primary.uk-card-body .uk-logo:focus,.uk-card-primary>:not([class*='uk-card-media']) .uk-logo:focus,.uk-card-secondary.uk-card-body .uk-logo:focus,.uk-card-secondary>:not([class*='uk-card-media']) .uk-logo:focus,.uk-overlay-primary .uk-logo:focus,.uk-offcanvas-bar .uk-logo:focus{color:rgba(255,255,255,0.7)}.uk-light .uk-logo>:not(.uk-logo-inverse):not(:only-of-type),.uk-section-primary:not(.uk-preserve-color) .uk-logo>:not(.uk-logo-inverse):not(:only-of-type),.uk-section-secondary:not(.uk-preserve-color) .uk-logo>:not(.uk-logo-inverse):not(:only-of-type),.uk-tile-primary:not(.uk-preserve-color) .uk-logo>:not(.uk-logo-inverse):not(:only-of-type),.uk-tile-secondary:not(.uk-preserve-color) .uk-logo>:not(.uk-logo-inverse):not(:only-of-type),.uk-card-primary.uk-card-body .uk-logo>:not(.uk-logo-inverse):not(:only-of-type),.uk-card-primary>:not([class*='uk-card-media']) .uk-logo>:not(.uk-logo-inverse):not(:only-of-type),.uk-card-secondary.uk-card-body .uk-logo>:not(.uk-logo-inverse):not(:only-of-type),.uk-card-secondary>:not([class*='uk-card-media']) .uk-logo>:not(.uk-logo-inverse):not(:only-of-type),.uk-overlay-primary .uk-logo>:not(.uk-logo-inverse):not(:only-of-type),.uk-offcanvas-bar .uk-logo>:not(.uk-logo-inverse):not(:only-of-type){display:none}.uk-light .uk-logo-inverse,.uk-section-primary:not(.uk-preserve-color) .uk-logo-inverse,.uk-section-secondary:not(.uk-preserve-color) .uk-logo-inverse,.uk-tile-primary:not(.uk-preserve-color) .uk-logo-inverse,.uk-tile-secondary:not(.uk-preserve-color) .uk-logo-inverse,.uk-card-primary.uk-card-body .uk-logo-inverse,.uk-card-primary>:not([class*='uk-card-media']) .uk-logo-inverse,.uk-card-secondary.uk-card-body .uk-logo-inverse,.uk-card-secondary>:not([class*='uk-card-media']) .uk-logo-inverse,.uk-overlay-primary .uk-logo-inverse,.uk-offcanvas-bar .uk-logo-inverse{display:inline}@media print{*,*::before,*::after{background:transparent !important;color:black !important;box-shadow:none !important;text-shadow:none !important}a,a:visited{text-decoration:underline}pre,blockquote{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}img{max-width:100% !important}@page{margin:0.5cm}p,h2,h3{orphans:3;widows:3}h2,h3{page-break-after:avoid}} - -/*# sourceMappingURL=uikit_blurple.css.map */
\ No newline at end of file diff --git a/static/css/uikit_blurple.css.map b/static/css/uikit_blurple.css.map deleted file mode 100644 index a3d9c90f..00000000 --- a/static/css/uikit_blurple.css.map +++ /dev/null @@ -1,154 +0,0 @@ -{ - "version": 3, - "file": "uikit_blurple.css", - "sources": [ - "../../scss/uikit/uikit_blurple.scss", - "../../scss/pysite/_variables.scss", - "../../scss/uikit/_variables-theme.scss", - "../../scss/uikit/_mixins-theme.scss", - "../../scss/uikit/_uikit-theme.scss", - "../../scss/uikit/theme/_import.scss", - "../../scss/uikit/theme/variables.scss", - "../../scss/uikit/theme/base.scss", - "../../scss/uikit/theme/link.scss", - "../../scss/uikit/theme/heading.scss", - "../../scss/uikit/theme/divider.scss", - "../../scss/uikit/theme/list.scss", - "../../scss/uikit/theme/description-list.scss", - "../../scss/uikit/theme/table.scss", - "../../scss/uikit/theme/icon.scss", - "../../scss/uikit/theme/form-range.scss", - "../../scss/uikit/theme/form.scss", - "../../scss/uikit/theme/button.scss", - "../../scss/uikit/theme/section.scss", - "../../scss/uikit/theme/container.scss", - "../../scss/uikit/theme/grid.scss", - "../../scss/uikit/theme/tile.scss", - "../../scss/uikit/theme/card.scss", - "../../scss/uikit/theme/close.scss", - "../../scss/uikit/theme/spinner.scss", - "../../scss/uikit/theme/marker.scss", - "../../scss/uikit/theme/totop.scss", - "../../scss/uikit/theme/alert.scss", - "../../scss/uikit/theme/badge.scss", - "../../scss/uikit/theme/label.scss", - "../../scss/uikit/theme/overlay.scss", - "../../scss/uikit/theme/article.scss", - "../../scss/uikit/theme/comment.scss", - "../../scss/uikit/theme/search.scss", - "../../scss/uikit/theme/nav.scss", - "../../scss/uikit/theme/navbar.scss", - "../../scss/uikit/theme/subnav.scss", - "../../scss/uikit/theme/breadcrumb.scss", - "../../scss/uikit/theme/pagination.scss", - "../../scss/uikit/theme/tab.scss", - "../../scss/uikit/theme/slidenav.scss", - "../../scss/uikit/theme/dotnav.scss", - "../../scss/uikit/theme/thumbnav.scss", - "../../scss/uikit/theme/accordion.scss", - "../../scss/uikit/theme/drop.scss", - "../../scss/uikit/theme/dropdown.scss", - "../../scss/uikit/theme/modal.scss", - "../../scss/uikit/theme/lightbox.scss", - "../../scss/uikit/theme/sticky.scss", - "../../scss/uikit/theme/offcanvas.scss", - "../../scss/uikit/theme/leader.scss", - "../../scss/uikit/theme/iconnav.scss", - "../../scss/uikit/theme/notification.scss", - "../../scss/uikit/theme/tooltip.scss", - "../../scss/uikit/theme/placeholder.scss", - "../../scss/uikit/theme/progress.scss", - "../../scss/uikit/theme/sortable.scss", - "../../scss/uikit/theme/countdown.scss", - "../../scss/uikit/theme/animation.scss", - "../../scss/uikit/theme/width.scss", - "../../scss/uikit/theme/height.scss", - "../../scss/uikit/theme/text.scss", - "../../scss/uikit/theme/column.scss", - "../../scss/uikit/theme/background.scss", - "../../scss/uikit/theme/align.scss", - "../../scss/uikit/theme/utility.scss", - "../../scss/uikit/theme/margin.scss", - "../../scss/uikit/theme/padding.scss", - "../../scss/uikit/theme/position.scss", - "../../scss/uikit/theme/transition.scss", - "../../scss/uikit/theme/inverse.scss", - "../../scss/uikit/components/_import.scss", - "../../scss/uikit/components/variables.scss", - "../../scss/uikit/components/mixin.scss", - "../../scss/uikit/components/base.scss", - "../../scss/uikit/components/link.scss", - "../../scss/uikit/components/heading.scss", - "../../scss/uikit/components/divider.scss", - "../../scss/uikit/components/list.scss", - "../../scss/uikit/components/description-list.scss", - "../../scss/uikit/components/table.scss", - "../../scss/uikit/components/icon.scss", - "../../scss/uikit/components/form-range.scss", - "../../scss/uikit/components/form.scss", - "../../scss/uikit/components/button.scss", - "../../scss/uikit/components/section.scss", - "../../scss/uikit/components/container.scss", - "../../scss/uikit/components/grid.scss", - "../../scss/uikit/components/tile.scss", - "../../scss/uikit/components/card.scss", - "../../scss/uikit/components/close.scss", - "../../scss/uikit/components/spinner.scss", - "../../scss/uikit/components/totop.scss", - "../../scss/uikit/components/marker.scss", - "../../scss/uikit/components/alert.scss", - "../../scss/uikit/components/badge.scss", - "../../scss/uikit/components/label.scss", - "../../scss/uikit/components/overlay.scss", - "../../scss/uikit/components/article.scss", - "../../scss/uikit/components/comment.scss", - "../../scss/uikit/components/search.scss", - "../../scss/uikit/components/nav.scss", - "../../scss/uikit/components/navbar.scss", - "../../scss/uikit/components/subnav.scss", - "../../scss/uikit/components/breadcrumb.scss", - "../../scss/uikit/components/pagination.scss", - "../../scss/uikit/components/tab.scss", - "../../scss/uikit/components/slidenav.scss", - "../../scss/uikit/components/dotnav.scss", - "../../scss/uikit/components/thumbnav.scss", - "../../scss/uikit/components/accordion.scss", - "../../scss/uikit/components/drop.scss", - "../../scss/uikit/components/dropdown.scss", - "../../scss/uikit/components/modal.scss", - "../../scss/uikit/components/lightbox.scss", - "../../scss/uikit/components/slideshow.scss", - "../../scss/uikit/components/slider.scss", - "../../scss/uikit/components/sticky.scss", - "../../scss/uikit/components/offcanvas.scss", - "../../scss/uikit/components/switcher.scss", - "../../scss/uikit/components/leader.scss", - "../../scss/uikit/components/iconnav.scss", - "../../scss/uikit/components/notification.scss", - "../../scss/uikit/components/tooltip.scss", - "../../scss/uikit/components/placeholder.scss", - "../../scss/uikit/components/progress.scss", - "../../scss/uikit/components/sortable.scss", - "../../scss/uikit/components/countdown.scss", - "../../scss/uikit/components/animation.scss", - "../../scss/uikit/components/width.scss", - "../../scss/uikit/components/height.scss", - "../../scss/uikit/components/text.scss", - "../../scss/uikit/components/column.scss", - "../../scss/uikit/components/cover.scss", - "../../scss/uikit/components/background.scss", - "../../scss/uikit/components/align.scss", - "../../scss/uikit/components/svg.scss", - "../../scss/uikit/components/utility.scss", - "../../scss/uikit/components/flex.scss", - "../../scss/uikit/components/margin.scss", - "../../scss/uikit/components/padding.scss", - "../../scss/uikit/components/position.scss", - "../../scss/uikit/components/transition.scss", - "../../scss/uikit/components/visibility.scss", - "../../scss/uikit/components/inverse.scss", - "../../scss/uikit/components/print.scss" - ], - "names": [], - "mappings": "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" -}
\ No newline at end of file diff --git a/static/favicon.ico b/static/favicon.ico Binary files differdeleted file mode 100644 index 046480bf..00000000 --- a/static/favicon.ico +++ /dev/null diff --git a/static/images/jams/jams_1.png b/static/images/jams/jams_1.png Binary files differdeleted file mode 100644 index 6f60301b..00000000 --- a/static/images/jams/jams_1.png +++ /dev/null diff --git a/static/images/jams/jams_10.png b/static/images/jams/jams_10.png Binary files differdeleted file mode 100644 index a1685ebf..00000000 --- a/static/images/jams/jams_10.png +++ /dev/null diff --git a/static/images/jams/jams_11.png b/static/images/jams/jams_11.png Binary files differdeleted file mode 100644 index 5dd019ac..00000000 --- a/static/images/jams/jams_11.png +++ /dev/null diff --git a/static/images/jams/jams_12.png b/static/images/jams/jams_12.png Binary files differdeleted file mode 100644 index ca75f404..00000000 --- a/static/images/jams/jams_12.png +++ /dev/null diff --git a/static/images/jams/jams_13.png b/static/images/jams/jams_13.png Binary files differdeleted file mode 100644 index b3ec813d..00000000 --- a/static/images/jams/jams_13.png +++ /dev/null diff --git a/static/images/jams/jams_14.png b/static/images/jams/jams_14.png Binary files differdeleted file mode 100644 index 6205de2a..00000000 --- a/static/images/jams/jams_14.png +++ /dev/null diff --git a/static/images/jams/jams_15.png b/static/images/jams/jams_15.png Binary files differdeleted file mode 100644 index 38deef2b..00000000 --- a/static/images/jams/jams_15.png +++ /dev/null diff --git a/static/images/jams/jams_16.png b/static/images/jams/jams_16.png Binary files differdeleted file mode 100644 index 1835c795..00000000 --- a/static/images/jams/jams_16.png +++ /dev/null diff --git a/static/images/jams/jams_17.png b/static/images/jams/jams_17.png Binary files differdeleted file mode 100644 index b62412f9..00000000 --- a/static/images/jams/jams_17.png +++ /dev/null diff --git a/static/images/jams/jams_2.png b/static/images/jams/jams_2.png Binary files differdeleted file mode 100644 index 486ace82..00000000 --- a/static/images/jams/jams_2.png +++ /dev/null diff --git a/static/images/jams/jams_3.png b/static/images/jams/jams_3.png Binary files differdeleted file mode 100644 index ea799afd..00000000 --- a/static/images/jams/jams_3.png +++ /dev/null diff --git a/static/images/jams/jams_4.png b/static/images/jams/jams_4.png Binary files differdeleted file mode 100644 index da73c511..00000000 --- a/static/images/jams/jams_4.png +++ /dev/null diff --git a/static/images/jams/jams_5.png b/static/images/jams/jams_5.png Binary files differdeleted file mode 100644 index f3782fd8..00000000 --- a/static/images/jams/jams_5.png +++ /dev/null diff --git a/static/images/jams/jams_6.png b/static/images/jams/jams_6.png Binary files differdeleted file mode 100644 index 83c74809..00000000 --- a/static/images/jams/jams_6.png +++ /dev/null diff --git a/static/images/jams/jams_7.png b/static/images/jams/jams_7.png Binary files differdeleted file mode 100644 index 1aacdff0..00000000 --- a/static/images/jams/jams_7.png +++ /dev/null diff --git a/static/images/jams/jams_8.png b/static/images/jams/jams_8.png Binary files differdeleted file mode 100644 index 9b1a9859..00000000 --- a/static/images/jams/jams_8.png +++ /dev/null diff --git a/static/images/jams/jams_9.png b/static/images/jams/jams_9.png Binary files differdeleted file mode 100644 index 9337af06..00000000 --- a/static/images/jams/jams_9.png +++ /dev/null diff --git a/static/images/jetbrains.png b/static/images/jetbrains.png Binary files differdeleted file mode 100644 index ccceb958..00000000 --- a/static/images/jetbrains.png +++ /dev/null diff --git a/static/images/partners/code monkeys.png b/static/images/partners/code monkeys.png Binary files differdeleted file mode 100644 index 198885a2..00000000 --- a/static/images/partners/code monkeys.png +++ /dev/null diff --git a/static/images/partners/functional programming.png b/static/images/partners/functional programming.png Binary files differdeleted file mode 100644 index dae5ac74..00000000 --- a/static/images/partners/functional programming.png +++ /dev/null diff --git a/static/images/partners/programming.png b/static/images/partners/programming.png Binary files differdeleted file mode 100644 index 75f4fbb1..00000000 --- a/static/images/partners/programming.png +++ /dev/null diff --git a/static/images/partners/stem.png b/static/images/partners/stem.png Binary files differdeleted file mode 100644 index 24ec97a7..00000000 --- a/static/images/partners/stem.png +++ /dev/null diff --git a/static/images/payment_icons/green.svg b/static/images/payment_icons/green.svg deleted file mode 100644 index 317ec1bf..00000000 --- a/static/images/payment_icons/green.svg +++ /dev/null @@ -1 +0,0 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 72 72"><defs><style>.cls-1{fill:green;}</style></defs><title>Artboard 1</title><g id="Layer_2" data-name="Layer 2"><path class="cls-1" d="M36,0A35.8137,35.8137,0,0,0,12.38,8.84a34.7948,34.7948,0,0,0-3.54,3.54A35.9934,35.9934,0,0,0,59.62,63.16a34.7948,34.7948,0,0,0,3.54-3.54A35.9934,35.9934,0,0,0,36,0ZM59.61,56.07,49.4613,45.9213c-.0226.0687-.037.1386-.0609.2071a10.9065,10.9065,0,0,1-2.6627,4.1492l9.333,9.3331A30.987,30.987,0,0,1,12.39,15.93L22.5383,26.0783a11.3884,11.3884,0,0,1,2.3943-4.0939c.0944-.1034.1956-.1989.2934-.2984l-9.2967-9.2967A30.987,30.987,0,0,1,59.61,56.07Z"/><path class="cls-1" d="M41.0032,34.2656l-8.2882-2.425a2.2635,2.2635,0,0,1,.637-4.4357H38.44a4.6843,4.6843,0,0,1,2.6246.8058,1.1963,1.1963,0,0,0,1.4964-.1535l2.6707-2.6092a1.244,1.244,0,0,0-.1382-1.88,10.8515,10.8515,0,0,0-6.6382-2.3023V17.5819a1.2314,1.2314,0,0,0-1.2278-1.2279H34.7717a1.2315,1.2315,0,0,0-1.2279,1.2279v3.6836H33.352a8.4083,8.4083,0,0,0-8.3649,9.1784,8.7851,8.7851,0,0,0,6.431,7.4133l7.866,2.3022a2.2635,2.2635,0,0,1-.6369,4.4357h-5.088a4.6838,4.6838,0,0,1-2.6246-.8058,1.1964,1.1964,0,0,0-1.4965.1535L26.7675,46.552a1.244,1.244,0,0,0,.1381,1.88,10.8515,10.8515,0,0,0,6.6382,2.3023v3.6836a1.2315,1.2315,0,0,0,1.2279,1.2279h2.4558a1.2314,1.2314,0,0,0,1.2278-1.2279v-3.699A8.6688,8.6688,0,0,0,46.567,45.14a8.4271,8.4271,0,0,0-5.5638-10.8744Z"/></g></svg>
\ No newline at end of file diff --git a/static/images/payment_icons/red.svg b/static/images/payment_icons/red.svg deleted file mode 100644 index 854334d4..00000000 --- a/static/images/payment_icons/red.svg +++ /dev/null @@ -1 +0,0 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 72 72"><defs><style>.cls-1{fill:#c00;}</style></defs><title>Artboard 1</title><g id="Layer_2" data-name="Layer 2"><path class="cls-1" d="M36,0A36,36,0,1,0,72,36,36,36,0,0,0,36,0ZM48.077,46.4461a9.9077,9.9077,0,0,1-9.2708,6.3764V57.05a1.4075,1.4075,0,0,1-1.4034,1.4034H34.5962A1.4074,1.4074,0,0,1,33.1929,57.05V52.84a12.4027,12.4027,0,0,1-7.5869-2.6312,1.4217,1.4217,0,0,1-.1578-2.1489L28.5,45.0778a1.3674,1.3674,0,0,1,1.71-.1754,5.3535,5.3535,0,0,0,3,.921h5.8151a2.587,2.587,0,0,0,.7279-5.07l-8.99-2.6312a10.0408,10.0408,0,0,1-7.35-8.4727,9.61,9.61,0,0,1,9.56-10.49h.2193V14.95a1.4074,1.4074,0,0,1,1.4033-1.4033h2.8066A1.4075,1.4075,0,0,1,38.8062,14.95v4.21a12.4027,12.4027,0,0,1,7.5868,2.6313,1.4217,1.4217,0,0,1,.1578,2.1489l-3.0522,2.982a1.3672,1.3672,0,0,1-1.71.1754,5.3547,5.3547,0,0,0-3-.9209h-5.815a2.587,2.587,0,0,0-.728,5.07l9.4725,2.7716A9.6312,9.6312,0,0,1,48.077,46.4461Z"/></g></svg>
\ No newline at end of file diff --git a/static/images/payment_icons/yellow.svg b/static/images/payment_icons/yellow.svg deleted file mode 100644 index 76a0bf4d..00000000 --- a/static/images/payment_icons/yellow.svg +++ /dev/null @@ -1 +0,0 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 71.8468 71.8751"><defs><style>.cls-1{fill:#ff8000;}</style></defs><title>Artboard 1</title><g id="Layer_2" data-name="Layer 2"><path class="cls-1" d="M22.0846,2.899a1.994,1.994,0,0,0-.8093.172q-.1434.0636-.2863.1284h0L20.9,3.24l-.001,0-.0346.0159-.0014.0006-.0343.0158-.0016.0007-.0155.0071-.0018.0009-.0166.0076-.0022.001-.0139.0064-.0042.0019-.0157.0073-.0015.0007-.0143.0066-.0045.0021-.0134.0062-.0027.0013-.0149.0069L20.7,3.3319l-.0108.005-.0047.0022-.0146.0068-.0056.0026-.01.0049-.0059.0027-.0145.0068-.0049.0022-.01.0049-.0066.0031-.01.0047-.009.0042-.01.0048-.0076.0035-.0075.0036-.01.0045-.011.0052-.0078.0037-.0077.0036-.0078.0037-.0118.0056-.009.0042-.0072.0033-.0084.004L20.48,3.435l-.0141.0067-.0066.0031-.009.0042-.0056.0027-.0193.0092-.0017.0008-.01.0048-.0046.0022-.0323.0153-.0037.0018-.0106.005-.0017.0009-.02.01-.0039.0019-.01.0049-.003.0014-.0335.0161-.003.0014-.0336.0162-.003.0014-.0109.0053-.0006,0-.0231.0112-.0013.0006-.0487.0236h0A35.9612,35.9612,0,0,0,16.8579,5.41,2,2,0,0,0,18.9724,8.805,32.0261,32.0261,0,0,1,22.896,6.728a2,2,0,0,0-.8114-3.829ZM10.6829,11.136a1.9949,1.9949,0,0,0-1.48.6543l-.0008.0009-.0249.0274-.0016.0018-.0245.027L9.149,11.85l-.0119.013,0,0-.0126.014-.0012.0013-.0113.0125-.0015.0017-.012.0133-.0018.002-.0107.0118-.002.0022-.0242.027-.0018.002-.0244.0272-.002.0022-.0111.0125-.001.001-.0121.0135-.002.0023-.01.0113-.0023.0026-.012.0134-.0011.0012-.0107.0121-.0023.0026-.0237.0266-.0027.003-.0235.0265-.0022.0025-.0113.0126-.0007.0009-.0117.0132-.003.0032-.01.0109-.0022.0024-.0116.0132-.002.0023-.01.0112-.0027.0031-.0116.0131-.001.0011-.0107.0122-.0027.003-.0109.0124-.0008.001-.0114.0128-.0034.0039-.0087.01-.0029.0033-.0111.0126-.0028.0033-.01.0108-.0025.0028L8.7486,12.3l-.0022.0024-.0094.0108-.0031.0035-.0115.013-.0011.0014-.01.0118-.0031.0035-.0113.013h0l-.0111.0128-.0037.0042-.0089.01-.0026.003-.011.0127-.0031.0036-.009.01-.0026.0032-.0113.0128-.0024.003-.0094.0108-.0028.0032-.0112.013-.0019.0022-.01.0109-.0034.004-.0091.01L8.58,12.494l-.0089.01-.004.0046-.0086.01-.0025.0029-.0109.0126-.0034.0041-.0082.0095-.0035.004-.0108.0125-.0029.0034-.0086.01-.0033.0038-.0108.0127-.0025.0028-.0088.01-.004.0047-.0091.0107-.0028.0033-.01.0112-.004.0047-.0083.01-.0029.0036-.01.0121-.0043.005-.0073.0087-.0038.0043-.01.0121-.0042.0049-.0071.0084-.0044.0051-.01.0117-.0042.005-.0069.0081-.0045.0054-.0083.01-.0044.0052-.0086.01-.0042.005-.0073.0086-.0039.0046-.01.0118-.0043.0051-.0073.0086-.004.0048-.01.012-.004.0048-.0068.0082-.0045.0053-.01.0119-.0039.0046-.007.0086-.0046.0053-.0085.01-.0039.0047-.0084.01-.0045.0055-.0074.0087-.0035.0043-.01.0121L8.2,12.9411l-.0069.0082-.0043.0052-.0094.0114-.0053.0063-.0059.0069-.0051.0061-.009.011-.005.0059-.0062.0075-.0049.0059-.0071.0085-.0068.0083-.0064.0077-.0052.0063-.006.0073-.0059.007-.0082.01-.0053.0065-.0055.0067-.0053.0064-.0094.0113-.0047.0059-.0059.0071-.0052.0062-.0081.01-.0061.0075-.0056.0068-.0056.0069-.0055.0067-.0086.01-.0055.0068-.0055.0067-.0053.0065L7.986,13.2l-.0049.0059-.0061.0076-.0044.0053-.006.0072-.0086.0107-.006.0073-.0048.0058-.0056.007-.0073.0088-.0071.0088-.0051.0063-.0056.0068-.0053.0065-.009.0111-.0053.0064-.0056.0071-.0044.0054-.01.0127L7.87,13.342l-.0058.0071-.0049.006-.0074.0093-.0069.0084-.0062.0077-.0039.0048-.0065.008-.0033.0041-.0114.0142-.0038.0048-.0065.0079-.0042.0051-.01.0131-.004.0048-.0064.0081-.0036.0045-.0112.0139-.0038.0047-.0065.008L7.75,13.491l-.0214.0266-.0037.0047-.0064.008-.0017.0022-.0135.0168-.003.0038-.0067.0084-.0027.0034-.0127.0158-.0028.0036-.0067.0084-.0034.0043-.0114.0144-.0035.0043-.0065.0082-.0033.004-.0218.0276-.0028.0036-.022.0278-.0029.0036-.0071.009-.0015.0018-.0138.0175-.0022.0029-.007.0089-.0028.0036-.0131.0165-.002.0025-.0068.0087-.0032.004-.0215.0274-.003.004-.0222.0282-.0022.0028-.0072.0092-.0015.0019-.0135.0173-.0027.0034-.0069.0089-.0022.0028-.0139.0178-.0014.0018L7.4264,13.9l-.003.0039-.0219.0281-.0023.0031-.0223.0288-.0022.0028-.0075.01,0,0-.0151.0194-.0015.0022-.0074.0094-.002.0026-.0127.0166-.0029.0035-.0065.0087-.003.0037-.0215.028-.0029.0038-.0212.0276-.0033.0043-.0065.0084-.0026.0034-.0127.0165-.0023.0031-.0069.009-.0023.003-.0135.0176-.0014.002-.0071.0092-.0023.0031-.0149.02h0l-.0068.009-.0027.0035-.0211.0278-.0034.0045-.0065.0084-.0025.0034-.0119.0157-.0032.0042-.0062.0082-.004.0053-.011.0145-.0028.0038-.0065.0084-.0035.0048-.0106.014-.0036.0048-.0061.008-.0039.0052-.006.0079-.0055.0074-.0084.0111-.0041.0055-.0058.0077L7.044,14.4l-.01.013-.0044.0059-.0055.0074-.0045.006-.009.0119-.0049.0066-.0051.0068-.0055.0074-.0053.007-.0082.0109L6.977,14.49l-.0052.0069-.005.0067-.0086.0116-.0049.0065-.0053.0071-.0049.0066-.0069.0094-.0065.0087-.0051.0069-.0054.0072-.0052.007-.0074.01-.0059.008-.005.0067-.0054.0073-.0044.0061-.0089.0119-.0045.0062-.006.008-.0043.0057-.0089.0122-.0045.0062-.0054.0073-.0049.0065-.0057.0078-.0079.0108-.005.0069-.0048.0065-.0065.0088-.0053.0072-.0071.01-.0044.0059-.0061.0083-.0042.0056-.009.0125-.0038.0051-.0067.0092-.0035.0049-.01.0131-.0029.0039-.0074.01-.0036.0048-.01.0133-.002.0027-.0082.0112-.0033.0045-.0091.0127-.0012.0015-.01.0133-.0033.0046-.0084.0117-.0015.0021-.01.0139-.0027.0037-.0083.0115-.0023.0031-.01.0138-.0025.0035-.0082.0112-.0025.0034-.01.0144-.0008.0009-.01.0139-.0017.0025-.0212.0294-.0017.0024-.01.0143,0,0-.0109.0151-.0014.002-.01.0136L6.553,15.07l-.011.0153,0,0L6.5312,15.1l-.001.0013-.0219.0307-.0008.0012-.0449.0632h0q-.1809.2552-.3575.5136a2,2,0,1,0,3.3022,2.2572,32.2789,32.2789,0,0,1,2.755-3.4863,2,2,0,0,0-1.4792-3.3454ZM3.5735,23.27a2.0011,2.0011,0,0,0-1.8967,1.367c-.0726.2184-.1428.4368-.2113.657l0,.0009-.0119.0389,0,0-.0041.0131h0l-.012.0389-.0005.0017-.0113.0367-.001.0032-.0035.0116-.0006.0018-.0071.0235-.0006.002-.0035.0111-.0012.004-.0106.0348-.0012.0042-.0034.0111-.001.0031-.0061.02-.0015.0047-.003.01-.0016.0052-.01.0331-.0019.006-.0028.01-.0017.0056-.0052.0174-.0017.0058-.003.01-.0017.0059-.0067.0221,0,.001-.0027.009-.0021.0072-.0026.0086-.0026.0088-.0039.0132-.0024.0078-.0027.0091-.0021.0072-.0025.0085-.004.0137-.0028.0093-.002.0067-.0027.0092-.002.0069-.0044.0152-.0022.0074-.0026.0088-.0023.0076-.0025.0085-.0041.0141-.0022.0077-.0024.0082-.0025.0085-.0029.01-.0029.01-.0031.0105-.0022.0073-.0027.01-.0021.0069-.0041.0144L1.26,25.98l-.0027.0091-.0021.0074-.0033.0116-.0025.0087-.0032.011-.0019.0066-.0031.0107-.0017.0061-.0043.0151-.0018.0064-.0029.01-.002.0066-.0043.0151-.0014.0049-.0033.0117-.002.0068-.0033.0116-.0012.0046-.0045.0157-.0017.0059-.0031.0109-.0018.0063-.0043.0154-.0014.0051-.0032.0114-.0019.0064-.0031.0113-.0016.0055-.0044.0155-.0016.006-.0029.01-.002.0071-.0042.0152-.0013.0044-.0034.0123-.0017.0061-.0034.0123-.0012.0043-.0044.0157-.0016.0059-.0031.0112-.0017.0061-.0042.0152-.0016.0059-.003.0107-.0019.0069-.0028.01-.0023.0084L1.13,26.44l-.0018.0068-.0029.01-.0018.0064-.0041.0152-.0016.006-.0029.0106-.002.0071-.003.0112-.0014.005-.0042.0154-.0018.0065L1.1,26.5515l-.0017.0064-.0041.0154-.0015.0053-.0029.011-.002.0069-.0029.011-.0018.0071-.0038.0138-.0019.0068-.0025.01-.002.007-.004.0149-.0016.0062-.0029.0108-.0019.0068-.0029.0111-.0018.0071-.0036.0132-.0019.0074-.0027.01-.0018.0069-.0039.015-.0017.0063-.0027.01-.0019.0069-.0029.0108-.0024.0095-.003.0112-.002.0076-.0025.0093-.0018.0072-.0039.0147-.002.0075-.0023.0089-.0022.0084-.0024.0094-.0027.01-.0028.0109-.0021.008L1,26.9273l-.002.0077L.9941,26.95l-.002.0075L.99,26.966l-.0021.0079-.0026.01-.0026.01-.0029.011-.0019.0076-.0022.0087L.9734,27.03.97,27.0437l-.0021.0081L.9655,27.06l-.0021.0084-.0023.0088-.0033.0132-.0021.0082-.0023.0088-.0021.0082-.002.0084-.0036.014-.0022.0086-.0019.0076-.0022.0089-.002.0077-.0038.0151-.0018.0074L.93,27.2025l-.002.0078-.0021.0084-.0035.014L.92,27.2418l-.0018.0071-.0025.01-.0014.0059L.91,27.2821l-.0014.0057-.0025.01-.0015.006-.0084.0338-.0012.0053-.0026.01-.0012.0048-.0047.0187-.0014.0059-.0025.01-.0013.0057-.0055.0224,0,.0011-.0025.01-.0016.0062-.0024.01-.0009.0032-.0052.0219-.0009.0032-.0027.0114-.0009.0041-.0087.0356-.0011.0045-.0026.0109-.0008.0031L.84,27.5685l-.0008.0034-.0027.0116-.0009.0031-.0088.037-.0007.003-.0089.0376-.0006.0024-.0028.012-.0006.0028-.0089.0376-.0006.0025-.009.0382,0,.002-.0031.0127v.0008l-.0092.0391,0,.0023-.0089.0386,0,.0015-.003.0124-.0006.0026L.7594,27.91l0,.0014Q.58,28.6908.4352,29.483A2,2,0,0,0,4.3705,30.2a31.87,31.87,0,0,1,1.1012-4.298A2.0014,2.0014,0,0,0,3.5735,23.27ZM2.0025,37.2511c-.0631,0-.127.003-.1911.0091A2,2,0,0,0,.0091,39.44q.0642.6788.1537,1.35v0l.0052.0387v0l.0078.0576v.0011l.0052.0383v0l.0025.0188,0,.0007.0052.0381v.0012l.0081.0574v0l.0054.0385v0L.211,41.14V41.14l.0138.0962,0,.0011.0083.0569,0,.0011.0056.0379,0,.0009.0086.0573v0q.2,1.3352.4976,2.6371l0,.0012.0082.036.0006.0028.0039.0167v.0009l.0043.0181,0,.0017.0037.0161.0006.0027.004.0175,0,0,.0039.0172.0011.0044.0029.0127.0011.005.0038.016.0013.0056.0025.0106.0018.0077.0022.01.0016.0065.0034.0147.0019.0083.0019.008.0021.0088.0015.0066.0043.0182.0011.0045.0026.0107.0011.0047.0086.0366,0,.002.002.0085a2,2,0,0,0,3.891-.9277,32.0309,32.0309,0,0,1-.7248-4.38,2,2,0,0,0-1.9887-1.8114ZM6.2032,50.6667a2.0006,2.0006,0,0,0-1.7414,2.9809l.0066.0117v0l.0265.047,0,.0008.0194.0342.0009.0016.0191.0337.0009.0016.0194.034.0006.001.0064.0112.0008.0014.0193.0337.001.0017.0189.033.0015.0027.0186.0325.0015.0024.0189.0328.0013.0021.0062.0109,0,.0009.0194.0335.0017.0029.0188.0326.0011.0019.019.0326.0015.0027.0062.0105.0007.0013.012.0206.0014.0023.0062.0105.0013.0024.0125.0214,0,0,.0061.0106.0016.0025.0187.032.002.0033.0183.0312.0022.0036.0056.01.0022.0038.01.0171.0026.0045.0052.0087.0033.0056.0083.0142.0037.006.005.0086.0032.0054.0172.029.0034.0056.0049.0084.0041.0069.0076.0128.0039.0064.005.0084.0034.0058.0082.0138.0038.0062.0049.0082.0038.0065.0076.0128.0042.0068.0048.0081.004.0067.0044.0072.0074.0126.0042.0069.0047.0078.0042.0069.0058.01.0054.0089.005.0084.0042.0067.0055.0092.0045.0075.0067.0111.0037.006.0052.0087.0038.0062.0078.013.0034.0057.0059.01.0032.0054.0084.0138.0024.004.0066.0108.0031.0051.0081.0135.0022.0035.0071.0117.0032.0053.0068.0112.0022.0035.0083.0136.0034.0057.0063.01.0028.0045.0085.0142.0025.0039.0069.0114.0026.0041.0087.0142.0023.0038.007.0115.0027.0043.0089.0146,0,.0006.0089.0145.0022.0035.0081.0132.0013.0021.0093.0151.0018.0029.0081.013.0016.0026.0092.0151.0016.0025.0081.0129.0019.0032.0188.0305.0019.0029.019.0306.0017.0027.02.0313.0006.001.01.0159h0l.0414.0661v0q.8779,1.3987,1.8782,2.7089a2,2,0,1,0,3.18-2.4268,32.1847,32.1847,0,0,1-2.4438-3.7089,1.9993,1.9993,0,0,0-1.7441-1.0185Zm9.29,10.5691a2,2,0,0,0-1.2016,3.6l.0051.004.0022.0016.0179.0134.0026.0018.01.0073.0019.0014.0309.0229.0008.0007.0316.0236.0008.0005a36.0508,36.0508,0,0,0,3.5565,2.3309l0,0,.0342.02.002.001.0324.0186.0032.0018.01.0059.0018.0011.02.0112.0029.0018.01.0055.004.0023.0187.0106.0025.0015.0094.0053.0051.0028.0087.005.0066.0038.0138.0078.0061.0034.0085.0047.0072.0042.0122.0069.0072.004.0078.0044.0075.0043.0113.0063.0083.0047.0077.0043.0075.0043.0068.0038.013.0073.0065.0037.009.005.0061.0034.0136.0076.0049.0028.0111.0062.0042.0024.0148.0083.0027.0014.0129.0073.0043.0023.0133.0075.002.0011.015.0083.004.0023.0129.0071.0026.0015.016.0088.0016.0009.0143.0079.0027.0015.0161.0089,0,0,.0155.0085.0023.0014.0323.0179.0011.0005a2,2,0,0,0,1.9312-3.5029A32.1669,32.1669,0,0,1,16.69,61.6349a1.9909,1.9909,0,0,0-1.1971-.3991Zm12.7537,5.912a2,2,0,0,0-.4431,3.95q.7907.18,1.5943.326h.0011l.0568.01h0l.038.0068h.0006l.056.01.0021,0,.0366.0064.0021,0,.0165.0029.0022,0,.0182.0031.0011,0,.0168.003.0029,0,.0169.003.0011,0,.0183.0031.0019,0,.016.0028.0032.0006.0355.006.0037.0006.0153.0027.0026.0005.0176.0029.0032.0005.0146.0025.0041.0007.0166.0028.0009,0,.0176.0029.0039.0007.0142.0024.004.0007.0176.0029.0008,0,.0165.0027.0044.0007.0155.0026.002,0,.0174.0029.0042.0007.0135.0022.0048.0008.0172.0028h0l.0174.0029.0045.0007.0135.0023.0044.0006.0175.0029.0021,0,.0148.0025.0053.0008.0144.0023.0029.0005.0169.0027.0052.0009.0126.002.0051.0008.017.0027.0023,0,.0153.0024.0046.0008.0137.0021.0043.0007.0168.0027.0043.0006.0134.0022.005.0008.0164.0025h.0008l.0172.0027.005.0008.0136.0022.004.0006.0173.0026.003.0005.0145.0022.0049.0008.0146.0023.003,0,.0175.0028.0032,0,.0152.0023.0032.0006.0356.0053.0044.0007.0146.0023.0029,0,.0176.0026.0036.0006.0144.0022.0042.0006.0352.0053.0039.0005.0147.0022.0035.0005.0179.0027h.0011l.016.0024.0049.0007.0155.0023.0018,0,.0184.0027.002,0,.0161.0023.0031,0,.0362.0053.0029,0,.0164.0024.0017,0,.0188.0027h.0005l.0174.0025.0031.0005.0363.0052.0024,0,.017.0023.0015,0,.0373.0052.0019,0,.0375.0052.0008,0,.0174.0024.0025,0,.0372.0051.0015,0,.0565.0077h.0016l.0379.0052h0l.0187.0025.0008,0,.0385.0051h0q.8355.1112,1.6826.1836.0869.0075.1726.0074a2,2,0,0,0,.1681-3.9928,32.06,32.06,0,0,1-4.3868-.684,1.9994,1.9994,0,0,0-.4469-.05Zm18.6287-.9762a1.9956,1.9956,0,0,0-.6486.1086,31.8616,31.8616,0,0,1-4.2876,1.1414,2,2,0,1,0,.7566,3.9278q1.1522-.222,2.2771-.5162h0l.0376-.01h0l.0558-.0147.0013,0,.0364-.01.0018,0,.0171-.0046.001,0,.0179-.0048.0021-.0005.0161-.0044.0022-.0005.0355-.01.0031-.0008.0161-.0044.0013,0,.0177-.0048.0026-.0006.015-.0041.0036-.0009.0341-.0093.0043-.0011.0153-.0042.0018,0,.0173-.0048.0032-.0009.0144-.0039.0036-.0009.0172-.0047.0015-.0005.0158-.0043.0039-.001.0144-.004.0031-.0009.0163-.0045.0048-.0013.0124-.0034.0054-.0014.016-.0045.0038-.001.0129-.0036.0054-.0015.0137-.0038.0033-.0009.0159-.0045.0058-.0016.0115-.0032L45.54,70.68l.0158-.0044.0054-.0015.011-.0031.007-.0019.0107-.003.0063-.0018.0144-.0041.007-.0019.01-.0028.0069-.002.0149-.0041.0063-.0018.01-.0028.0076-.0022.01-.003.0083-.0023.0123-.0034.0078-.0023.0083-.0024.0082-.0023.01-.0027.0133-.0038.0071-.0021.0093-.0026.0061-.0017.0162-.0047.0072-.002.0088-.0026.0072-.002.0092-.0027.0051-.0014.0182-.0053.0055-.0016.01-.0029.0055-.0016.0192-.0055.0038-.0011.0111-.0032.0041-.0012.0349-.01.0042-.0012.0111-.0033.0024-.0007.0237-.0069.0012,0,.0119-.0035.003-.0008.0373-.011.0013,0,.0389-.0114.0005,0,.0128-.0038.0011,0,.038-.0112.0021-.0006q.7054-.21,1.3985-.4476a2,2,0,0,0-.6525-3.891ZM58.943,58.951a1.9937,1.9937,0,0,0-1.3585.5326,32.2611,32.2611,0,0,1-3.4607,2.7872,2,2,0,1,0,2.2876,3.2813,36.1654,36.1654,0,0,0,3.8911-3.1338,2,2,0,0,0-1.36-3.4673Zm8.1319-11.48a2.0008,2.0008,0,0,0-1.837,1.2073,31.9823,31.9823,0,0,1-2.04,3.9426,2,2,0,1,0,3.4162,2.081A35.8955,35.8955,0,0,0,68.91,50.2653a2.0012,2.0012,0,0,0-1.8349-2.7938Zm2.78-13.7882h-.0186a2.011,2.011,0,0,0-1.9908,2.0182L67.8468,36a32.4731,32.4731,0,0,1-.2651,4.1415,2,2,0,0,0,1.7275,2.2395,2.0257,2.0257,0,0,0,.2586.0167,2.0006,2.0006,0,0,0,1.9811-1.7442q.0783-.607.1363-1.22v0l.0067-.0712V39.36l.0049-.053,0-.0006.0014-.0168v-.0016l.0048-.053v-.0012l.0015-.0163v-.0017l.0046-.0527,0-.0018.0014-.0162,0-.0013.003-.0353v-.0016l.0013-.0152,0-.0033.0012-.0148,0-.0023.0028-.0343,0-.0034.0013-.014,0-.0033L71.7237,39h0l.0014-.0177,0-.0017.0012-.015,0-.004.0012-.0137,0-.0033.0013-.0168v0l.0014-.0172,0-.0029.0011-.0141,0-.0039.0011-.0142,0-.0029.0027-.0338,0-.0043.0009-.0127,0-.0047.0011-.0141V38.8l.0014-.017,0-.0028.001-.0142,0-.0042.0009-.013,0-.0042.0011-.0153v-.0016l.0012-.0169,0-.0037.0009-.0129.0005-.0052.0008-.0119,0-.0051.0023-.0328.0005-.0059.0007-.0108.0005-.0063.0009-.0114,0-.005.0011-.0163,0-.0035.0009-.013,0-.006.0009-.0111,0-.0055.0009-.013,0-.0038.0013-.0163,0-.005.0009-.0113,0-.0066.0007-.01.0005-.0065.0009-.0123,0-.0041.0011-.0159,0-.0059.0007-.0106,0-.0069.0007-.01,0-.0064.0009-.0128.0006-.0086.0006-.0106.0005-.0075.0006-.0088.0005-.0078.0006-.01.0005-.0065.0009-.0157,0-.0052.0006-.0112.0005-.0068.0006-.01.0005-.0071.0006-.0107,0-.0057.001-.0154,0-.0071.0006-.0095,0-.0075.0005-.009.0005-.0075.0006-.0107.0006-.01.0006-.0105.0005-.0079.0005-.0086,0-.0079.0005-.009.0005-.0075.0008-.0153,0-.0055.0006-.011,0-.0068.0006-.01,0-.0069.0007-.0095,0-.0073.0009-.0152,0-.0065.0006-.01,0-.0072.0005-.01,0-.007.0006-.0108,0-.0071.0009-.0145,0-.0059.0007-.0105,0-.0069.0005-.01,0-.0064.0007-.0134,0-.0072.0006-.0116,0-.007.0005-.01,0-.007.0005-.0107,0-.0057.0007-.0158,0-.0062,0-.0105,0-.007.0005-.0094,0-.0075,0-.0106,0-.0058.0007-.0152.0005-.0078,0-.0092,0-.007,0-.01,0-.0069.0006-.0121,0-.0068.0006-.0129,0-.0075,0-.0094,0-.0073,0-.0095,0-.0072.0007-.0155,0-.0051.0005-.0113,0-.0074.0005-.0093,0-.0073.0005-.01,0-.0066.0007-.0158,0-.0057,0-.0106,0-.0073,0-.01,0-.0069,0-.011,0-.0064.0007-.0147,0-.0072,0-.0093,0-.0078,0-.0094,0-.0069.0005-.0134,0-.0065.0005-.0127,0-.0062.0005-.01,0-.0069,0-.0107,0-.006.0006-.0156,0-.0066,0-.01,0-.0073,0-.009,0-.0082,0-.009,0-.0072.0005-.0154,0-.0067,0-.01,0-.0071,0-.01,0-.0076,0-.01,0-.01,0-.0116,0-.0073,0-.0091,0-.0078,0-.009,0-.0077.0005-.0154v-.0054l0-.0111,0-.0073,0-.0094,0-.0075,0-.01,0-.007,0-.0155v-.0064l0-.01,0-.0073,0-.01,0-.0071,0-.011,0-.0063,0-.0153v-.006l0-.0106v-.0067l0-.0109v-.006l0-.0159v-.0023l0-.0147,0-.0057,0-.0113,0-.0063,0-.0109v-.006l0-.0156,0-.0062,0-.0109v-.0065l0-.01,0-.0072,0-.0108v-.0057l0-.016v-.0059l0-.0107,0-.0069v-.01l0-.0067,0-.0139v-.0025l0-.0159v-.007l0-.01v-.0067l0-.0107v-.006l0-.0163v-.0033l0-.0132V36.66l0-.01v-.0173l0-.0064,0-.0157v-.0062l0-.01v-.0242l0-.0119v-.0046l0-.0164v-.005l0-.0119v-.0228l0-.0169h0l0-.0168V36.44l0-.0122v-.0045l0-.0169v-.0025l0-.0143v-.04l0-.0165v-.0573l0-.0159v-.0792l0-.0117V36h0v-.0636q0-.1357-.0016-.2712v-.019a1.989,1.989,0,0,0-1.99-1.9629ZM66.8169,19.95a2.0009,2.0009,0,0,0-1.82,2.8279,31.8491,31.8491,0,0,1,1.5489,4.1578,2,2,0,0,0,3.8368-1.1308q-.3781-1.2831-.8477-2.5249l-.0005-.0013-.0134-.0355,0-.0009-.0136-.0359v0l-.0066-.0171L69.5,23.1879l-.0131-.0344-.0012-.0032-.006-.0156-.0005-.0012-.0063-.0167-.0013-.0032-.0055-.0142-.0011-.0031-.0063-.0164-.0011-.003-.0053-.0133-.0017-.0046-.0061-.0157-.0005-.0014-.0058-.0151-.002-.0051-.0048-.0125-.0015-.0038-.0059-.0153-.0023-.0058-.004-.0106-.0023-.006-.0059-.0148-.002-.0052-.0041-.0105L69.401,22.93l-.0039-.01-.0035-.0089L69.3891,22.9l-.0027-.007-.0033-.0086-.0031-.0076-.0052-.0133-.0033-.0085-.0027-.0069-.0037-.0092-.0023-.0059-.0061-.0157-.0025-.0063-.0036-.0091-.0025-.0065-.0072-.0183-.0014-.0032-.0039-.01-.002-.0049-.004-.01-.0006-.0016-.0088-.0221-.0012-.0031-.0045-.0115,0-.0008L69.3,22.6729l-.0008-.0019-.0146-.0367,0-.0008q-.3064-.766-.6467-1.5143a2,2,0,0,0-1.82-1.1688ZM58.477,8.6241a2,2,0,0,0-1.3324,3.4922,32.343,32.343,0,0,1,3.1038,3.1809,2,2,0,0,0,3.0525-2.5851A36.2413,36.2413,0,0,0,59.8056,9.13a1.9924,1.9924,0,0,0-1.3286-.5058ZM46.2757,1.6284a2,2,0,0,0-.6125,3.9043,31.8707,31.8707,0,0,1,4.1184,1.6516,2,2,0,0,0,1.7476-3.5981q-1.4552-.7053-2.9817-1.2818l-.001,0L48.51,2.29l-.0026-.001L48.472,2.276l-.0029-.0011-.0108-.004-.0043-.0016-.0181-.0068-.0054-.002-.0094-.0035-.0057-.0021-.0317-.0118-.0067-.0025-.0089-.0033-.0076-.0028L48.3474,2.23l-.0086-.0032-.0075-.0027-.01-.0036-.0063-.0024-.0146-.0053L48.2945,2.21l-.0109-.0041-.0051-.0018-.0158-.0058-.0038-.0014-.0133-.0049-.0041-.0015-.0333-.0122-.0036-.0013-.0152-.0056-.0017-.0006L48.17,2.1645l-.0015,0-.016-.0058-.0022-.0009-.035-.0126-.0019-.0007-.0353-.0128-.0015-.0006q-.5892-.2127-1.1879-.4055a1.994,1.994,0,0,0-.6132-.0967ZM35.8468,0h-.2181l-.0176,0H35.47l-.0171,0h-.024l-.0146,0h-.003l-.0173,0h-.0242l-.017,0H35.35l-.0149,0h-.0243l-.0166,0h-.0057l-.012,0H35.27l-.012,0h-.006l-.0164,0h-.0068l-.01,0H35.21l-.0115,0H35.193l-.0163,0H35.17l-.0111,0-.0067,0-.0131,0-.0081,0-.013,0-.0068,0-.0111,0h-.0065l-.0166,0h-.0057l-.0116,0h-.0076l-.0109,0h-.0064l-.0163,0-.0067,0-.0108,0-.0075,0-.0115,0h-.0059l-.016,0-.0076,0-.01,0-.0076,0-.0126,0h-.0069l-.0137,0-.0078,0-.01,0-.0073,0-.014,0-.0086,0-.0105,0-.0083,0-.0094,0-.0082,0-.0153.0005-.0082,0-.0087,0-.0091,0-.0087,0-.0087,0-.0149.0005-.0089,0-.0084,0-.0088,0-.0088,0-.014,0-.0095,0-.0091,0-.0078,0-.01,0-.0065,0L34.6339.02l-.0069,0-.01,0-.0066,0-.01,0-.0055,0L34.5753.022l-.0065,0-.01,0-.0067,0-.0351.0012-.0061,0-.0107,0-.0057,0-.0209.0008-.0041,0-.0105,0-.0066,0-.01,0-.0051,0L34.416.0279l-.005,0-.0107,0-.0059,0-.0111,0h-.002L34.3582.03l-.0053,0-.0111.0005-.0055,0L34.3.0327l-.005,0-.0112,0-.0045,0-.0375.0017-.0048,0-.0113.0005-.0046,0-.0236.001h-.0018l-.012.0006-.0045,0-.0119.0005h-.0015L34.14.04h-.0024l-.0127.0006H34.122l-.04.0019H34.08l-.0133.0006H34.065l-.0407.002h-.0022l-.0134.0007h0l-.0422.0022h-.0014l-.0567.003h-.0006q-1.5432.0819-3.05.2917a2,2,0,0,0,.5536,3.9615A32.4354,32.4354,0,0,1,35.8468,4h0q.5463,0,1.0882.0181.0341.0012.0677.0012A2,2,0,0,0,37.0705.02L37.0381.0193h-.0025l-.0116,0-.0053,0-.0109,0-.0045,0L36.9839.0176l-.0071,0-.009,0-.0081,0-.0085,0-.0111,0-.01,0-.0118,0-.0073,0-.01,0h-.0063l-.0141,0h-.0031L36.8605.014h-.0046l-.0131,0h-.0049l-.016-.0005h-.0012l-.0182,0H36.8l-.0157,0h-.0033l-.0167,0h-.001l-.0186,0h-.0012l-.0166,0h-.003l-.0174,0h0L36.67.0092h-.0021l-.017,0h-.0013L36.6121.008H36.61l-.0174,0h-.0012L36.5545.0068h-.0009l-.0177,0h-.0013L36.4972.0058h-.0008l-.0174,0h-.0022L36.44.0048h-.0008l-.0174,0H36.42l-.037-.0006h0l-.0177,0h-.0023l-.0173,0H36.344l-.0367,0h-.021l-.0365,0H36.247l-.0153,0h-.0033l-.0359,0h-.04l-.0174,0h-.2885Z"/><path class="cls-1" d="M40.85,34.2656l-8.2882-2.425a2.2635,2.2635,0,0,1,.637-4.4357h5.088a4.6838,4.6838,0,0,1,2.6246.8058,1.1964,1.1964,0,0,0,1.4965-.1535l2.6706-2.6092a1.244,1.244,0,0,0-.1381-1.88,10.8515,10.8515,0,0,0-6.6382-2.3023V17.5819a1.2315,1.2315,0,0,0-1.2279-1.2279H34.6185a1.2314,1.2314,0,0,0-1.2278,1.2279v3.6836h-.1919a8.4083,8.4083,0,0,0-8.3649,9.1784,8.7852,8.7852,0,0,0,6.431,7.4133l7.8661,2.3022a2.2635,2.2635,0,0,1-.637,4.4357H33.406a4.684,4.684,0,0,1-2.6246-.8058,1.1963,1.1963,0,0,0-1.4964.1535L26.6143,46.552a1.244,1.244,0,0,0,.1382,1.88,10.8513,10.8513,0,0,0,6.6382,2.3023v3.6836a1.2314,1.2314,0,0,0,1.2278,1.2279h2.4558a1.2315,1.2315,0,0,0,1.2279-1.2279v-3.699A8.6686,8.6686,0,0,0,46.4138,45.14,8.427,8.427,0,0,0,40.85,34.2656Z"/></g></svg>
\ No newline at end of file diff --git a/static/js/script.js b/static/js/script.js deleted file mode 100644 index 3e01bd1b..00000000 --- a/static/js/script.js +++ /dev/null @@ -1,2 +0,0 @@ -"use strict";function getScript(url,integrity,cross_origin){const script=document.createElement("script");script.type="text/javascript",script.src=url,script.defer=!0,void 0!==integrity&&(script.integrity=integrity),void 0!==cross_origin&&(script.crossOrigin=cross_origin),document.getElementsByTagName("head")[0].appendChild(script)}function setClass(selector,my_class){document.querySelector(selector).className=my_class}function removeClass(selector,my_class){const element=document.querySelector(selector),reg=new RegExp(`(^| )${my_class}($| )`,"g");element.className=element.className.replace(reg," ")}function error_typewriter(){const app=document.getElementById("error"),typewriter=new Typewriter(app,{loop:!1,deleteSpeed:40,typingSpeed:"natural",devMode:!1});document.getElementById("terminal-close").onclick=function(){const app=document.getElementById("win"),current_class=app.getAttribute("class");app.setAttribute("class",`${current_class} uk-animation-scale-up uk-animation-reverse`),typewriter.stop()},typewriter.appendText("Python 3.6.4 (default, Jan 5 2018, 02:35:40)\n").appendText("[GCC 7.2.1 20171224] on darwin\n").appendText('Type "help", "copyright", "credits" or "license" for more information.\n').appendText(">>> ").pauseFor(1e3).typeString("impor requests").deleteChars(9).typeString("t requests\n").appendText(">>> ").pauseFor(750).changeSettings({typingSpeed:"natural"}).typeString(`response = requests.${window._RequestMethod}('https://pythim`).deleteChars(2).typeString("ondiscord.con/").deleteChars(2).typeString(`m${window._Path}')\n`).pauseFor(1e3).appendText(`<Response [${window._Code}]>\n>>> `).typeString("# hmmmm").pauseFor(1e3).deleteChars(7).pauseFor(1e3).typeString("response.text\n").appendText(`${window._ErrorMsg}\n>>> `).start()}setClass("html","prevent-fouc"),document.onreadystatechange=function(){"interactive"===document.readyState&&(removeClass("html","prevent-fouc"),getScript("https://pro.fontawesome.com/releases/v5.1.0/js/all.js","sha384-E5SpgaZcbSJx0Iabb3Jr2AfTRiFnrdOw1mhO19DzzrT9L+wCpDyHUG2q07aQdO6E","anonymous"),getScript("https://cdnjs.cloudflare.com/ajax/libs/ace/1.3.3/ace.js"),getScript("https://cdn.jsdelivr.net/npm/flatpickr"))},function(){const startjam=new Date(Date.UTC(2018,2,23)),endjam=new Date(Date.UTC(2018,2,26)),now=Date.now();let goal;if(now+1e3<endjam.getTime()){UIkit.notification({message:'<div class=\'uk-text-center\'> <span id="countdown-title" class="uk-text-center"> <a href="/info/jams">Code Jam</a> Countdown </span> <p class=\'uk-text-large\' id="countdown-remaining">...</p><small style=\'font-size: 0.6em;\'>(Tap/click to dismiss)</small></div>',pos:"bottom-right",timeout:endjam-now});const heading=document.getElementById("countdown-title");now>startjam.getTime()?(heading.innerHTML='Current <a href="/info/jams">code jam</a> ends in...',goal=endjam.getTime()):(heading.innerHTML='Next <a href="/info/jams">code jam</a> starts in...',goal=startjam.getTime());const refreshCountdown=setInterval(()=>{let delta=goal-Date.now();if(delta<=1e3)return clearInterval(refreshCountdown),location.reload();let days=Math.floor(delta/864e5);delta-=864e5*days;let hours=Math.floor(delta/36e5);delta-=36e5*hours;let minutes=Math.floor(delta/6e4);delta-=6e4*minutes;let seconds=Math.floor(delta/1e3);days<10&&(days=`0${days}`),hours<10&&(hours=`0${hours}`),minutes<10&&(minutes=`0${minutes}`),seconds<10&&(seconds=`0${seconds}`);try{document.getElementById("countdown-remaining").innerHTML=`${days}:${hours}:${minutes}:${seconds}`}catch(e){return clearInterval(refreshCountdown)}},500)}}();class JamActions{constructor(url,csrf_token){this.url=url,this.csrf_token=csrf_token}send(action,method,data,callback){data.action=action,$.ajax(this.url,{data:data,dataType:"json",headers:{"X-CSRFToken":this.csrf_token},method:method}).done(data=>callback(!("error_code"in data),data)).fail(()=>callback(!1))}send_json(action,method,data,callback){data.action=action,$.ajax(this.url,{data:JSON.stringify(data),dataType:"json",headers:{"X-CSRFToken":this.csrf_token},contentType:"application/json",method:method}).done(data=>callback(!("error_code"in data),data)).fail(()=>callback(!1))}set_state(jam,state,callback){this.send("state","POST",{jam:jam,state:state},callback)}get_questions(callback){this.send("questions","GET",{},callback)}create_question(data,callback){this.send_json("questions","POST",data,callback)}delete_question(id,callback){this.send("question","DELETE",{id:id},callback)}associate_question(form,question,callback){this.send("associate_question","POST",{form:form,question:question},callback)}disassociate_question(form,question,callback){this.send("disassociate_question","POST",{form:form,question:question},callback)}create_infraction(id,reason,number,callback){this.send("infraction","POST",{participant:id,reason:reason,number:number},callback)}delete_infraction(id,callback){this.send("infraction","DELETE",{id:id},callback)}approve_application(id,callback){this.send("approve_application","POST",{id:id},callback)}unapprove_application(id,callback){this.send("unapprove_application","POST",{id:id},callback)}generate_teams(jam,callback){this.send("generate_teams","POST",{jam:jam},callback)}create_team(jam,callback){this.send("create_team","POST",{jam:jam},callback)}reroll_team(team,callback){this.send("reroll_team","POST",{team:team},callback)}delete_team(team,callback){this.send("team","DELETE",{team:team},callback)}set_team_member(jam,member,team,callback){this.send("set_team_member","POST",{jam:jam,member:member,team:team},callback)}set_winning_team(team,callback){this.send("set_winning_team","POST",{team:team},callback)}unset_winning_team(jam,callback){this.send("unset_winning_team","POST",{jam:jam},callback)}}function revision_diff(revisions){const buttons=document.querySelectorAll("td input"),id_reg=/compare-(before|after)-([\w|-]+)/;function getRevisionId(element){const e=element.id.match(id_reg);return[e[1],e[2]]}function getRevision(id){return revisions.filter(x=>x.id===id)[0]}buttons.forEach(button=>{button.checked=!1,button.onchange=function(){!function(element){const id=getRevisionId(element),rev=getRevision(id[1]);let aft,bef;"after"===id[0]?(document.querySelector(`#compare-before-${id[1]}`).checked=!1,buttons.forEach(e=>{"after"===getRevisionId(e)[0]&&e.id!==element.id&&(e.checked=!1)})):(document.querySelector(`#compare-after-${id[1]}`).checked=!1,buttons.forEach(e=>{"before"===getRevisionId(e)[0]&&e.id!==element.id&&(e.checked=!1),"after"===getRevisionId(e)[0]&&(getRevision(getRevisionId(e)[1]).date<=rev.date?document.querySelector(`#${e.id}`).setAttribute("disabled",""):document.querySelector(`#${e.id}`).removeAttribute("disabled"))})),buttons.forEach(button=>{const id=getRevisionId(button);button.checked&&"before"===id[0]&&(bef=id[1]),button.checked&&"after"===id[0]&&(aft=id[1])}),document.getElementById("compare-submit").href=`/history/compare/${bef}/${aft}`}(button)}})}function wiki_sidebar(){const sidebar=document.getElementById("wiki-sidebar");document.getElementById("wiki-sidebar-button").onclick=function(){sidebar.classList.contains("uk-visible@s")?sidebar.classList.remove("uk-visible@s"):sidebar.classList.add("uk-visible@s")}}!function(global,factory){"object"==typeof exports&&"undefined"!=typeof module?module.exports=factory():"function"==typeof define&&define.amd?define(factory):global.moment=factory()}(this,function(){var hookCallback,some;function hooks(){return hookCallback.apply(null,arguments)}function isArray(input){return input instanceof Array||"[object Array]"===Object.prototype.toString.call(input)}function isObject(input){return null!=input&&"[object Object]"===Object.prototype.toString.call(input)}function isUndefined(input){return void 0===input}function isNumber(input){return"number"==typeof input||"[object Number]"===Object.prototype.toString.call(input)}function isDate(input){return input instanceof Date||"[object Date]"===Object.prototype.toString.call(input)}function map(arr,fn){var i,res=[];for(i=0;i<arr.length;++i)res.push(fn(arr[i],i));return res}function hasOwnProp(a,b){return Object.prototype.hasOwnProperty.call(a,b)}function extend(a,b){for(var i in b)hasOwnProp(b,i)&&(a[i]=b[i]);return hasOwnProp(b,"toString")&&(a.toString=b.toString),hasOwnProp(b,"valueOf")&&(a.valueOf=b.valueOf),a}function createUTC(input,format,locale,strict){return createLocalOrUTC(input,format,locale,strict,!0).utc()}function getParsingFlags(m){return null==m._pf&&(m._pf={empty:!1,unusedTokens:[],unusedInput:[],overflow:-2,charsLeftOver:0,nullInput:!1,invalidMonth:null,invalidFormat:!1,userInvalidated:!1,iso:!1,parsedDateParts:[],meridiem:null,rfc2822:!1,weekdayMismatch:!1}),m._pf}function isValid(m){if(null==m._isValid){var flags=getParsingFlags(m),parsedParts=some.call(flags.parsedDateParts,function(i){return null!=i}),isNowValid=!isNaN(m._d.getTime())&&flags.overflow<0&&!flags.empty&&!flags.invalidMonth&&!flags.invalidWeekday&&!flags.weekdayMismatch&&!flags.nullInput&&!flags.invalidFormat&&!flags.userInvalidated&&(!flags.meridiem||flags.meridiem&&parsedParts);if(m._strict&&(isNowValid=isNowValid&&0===flags.charsLeftOver&&0===flags.unusedTokens.length&&void 0===flags.bigHour),null!=Object.isFrozen&&Object.isFrozen(m))return isNowValid;m._isValid=isNowValid}return m._isValid}function createInvalid(flags){var m=createUTC(NaN);return null!=flags?extend(getParsingFlags(m),flags):getParsingFlags(m).userInvalidated=!0,m}some=Array.prototype.some?Array.prototype.some:function(fun){for(var t=Object(this),len=t.length>>>0,i=0;i<len;i++)if(i in t&&fun.call(this,t[i],i,t))return!0;return!1};var momentProperties=hooks.momentProperties=[];function copyConfig(to,from){var i,prop,val;if(isUndefined(from._isAMomentObject)||(to._isAMomentObject=from._isAMomentObject),isUndefined(from._i)||(to._i=from._i),isUndefined(from._f)||(to._f=from._f),isUndefined(from._l)||(to._l=from._l),isUndefined(from._strict)||(to._strict=from._strict),isUndefined(from._tzm)||(to._tzm=from._tzm),isUndefined(from._isUTC)||(to._isUTC=from._isUTC),isUndefined(from._offset)||(to._offset=from._offset),isUndefined(from._pf)||(to._pf=getParsingFlags(from)),isUndefined(from._locale)||(to._locale=from._locale),momentProperties.length>0)for(i=0;i<momentProperties.length;i++)isUndefined(val=from[prop=momentProperties[i]])||(to[prop]=val);return to}var updateInProgress=!1;function Moment(config){copyConfig(this,config),this._d=new Date(null!=config._d?config._d.getTime():NaN),this.isValid()||(this._d=new Date(NaN)),!1===updateInProgress&&(updateInProgress=!0,hooks.updateOffset(this),updateInProgress=!1)}function isMoment(obj){return obj instanceof Moment||null!=obj&&null!=obj._isAMomentObject}function absFloor(number){return number<0?Math.ceil(number)||0:Math.floor(number)}function toInt(argumentForCoercion){var coercedNumber=+argumentForCoercion,value=0;return 0!==coercedNumber&&isFinite(coercedNumber)&&(value=absFloor(coercedNumber)),value}function compareArrays(array1,array2,dontConvert){var i,len=Math.min(array1.length,array2.length),lengthDiff=Math.abs(array1.length-array2.length),diffs=0;for(i=0;i<len;i++)(dontConvert&&array1[i]!==array2[i]||!dontConvert&&toInt(array1[i])!==toInt(array2[i]))&&diffs++;return diffs+lengthDiff}function warn(msg){!1===hooks.suppressDeprecationWarnings&&"undefined"!=typeof console&&console.warn&&console.warn("Deprecation warning: "+msg)}function deprecate(msg,fn){var firstTime=!0;return extend(function(){if(null!=hooks.deprecationHandler&&hooks.deprecationHandler(null,msg),firstTime){for(var arg,args=[],i=0;i<arguments.length;i++){if(arg="","object"==typeof arguments[i]){for(var key in arg+="\n["+i+"] ",arguments[0])arg+=key+": "+arguments[0][key]+", ";arg=arg.slice(0,-2)}else arg=arguments[i];args.push(arg)}warn(msg+"\nArguments: "+Array.prototype.slice.call(args).join("")+"\n"+(new Error).stack),firstTime=!1}return fn.apply(this,arguments)},fn)}var keys,deprecations={};function deprecateSimple(name,msg){null!=hooks.deprecationHandler&&hooks.deprecationHandler(name,msg),deprecations[name]||(warn(msg),deprecations[name]=!0)}function isFunction(input){return input instanceof Function||"[object Function]"===Object.prototype.toString.call(input)}function mergeConfigs(parentConfig,childConfig){var prop,res=extend({},parentConfig);for(prop in childConfig)hasOwnProp(childConfig,prop)&&(isObject(parentConfig[prop])&&isObject(childConfig[prop])?(res[prop]={},extend(res[prop],parentConfig[prop]),extend(res[prop],childConfig[prop])):null!=childConfig[prop]?res[prop]=childConfig[prop]:delete res[prop]);for(prop in parentConfig)hasOwnProp(parentConfig,prop)&&!hasOwnProp(childConfig,prop)&&isObject(parentConfig[prop])&&(res[prop]=extend({},res[prop]));return res}function Locale(config){null!=config&&this.set(config)}hooks.suppressDeprecationWarnings=!1,hooks.deprecationHandler=null,keys=Object.keys?Object.keys:function(obj){var i,res=[];for(i in obj)hasOwnProp(obj,i)&&res.push(i);return res};var aliases={};function addUnitAlias(unit,shorthand){var lowerCase=unit.toLowerCase();aliases[lowerCase]=aliases[lowerCase+"s"]=aliases[shorthand]=unit}function normalizeUnits(units){return"string"==typeof units?aliases[units]||aliases[units.toLowerCase()]:void 0}function normalizeObjectUnits(inputObject){var normalizedProp,prop,normalizedInput={};for(prop in inputObject)hasOwnProp(inputObject,prop)&&(normalizedProp=normalizeUnits(prop))&&(normalizedInput[normalizedProp]=inputObject[prop]);return normalizedInput}var priorities={};function addUnitPriority(unit,priority){priorities[unit]=priority}function zeroFill(number,targetLength,forceSign){var absNumber=""+Math.abs(number),zerosToFill=targetLength-absNumber.length;return(number>=0?forceSign?"+":"":"-")+Math.pow(10,Math.max(0,zerosToFill)).toString().substr(1)+absNumber}var formattingTokens=/(\[[^\[]*\])|(\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|YYYYYY|YYYYY|YYYY|YY|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g,localFormattingTokens=/(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g,formatFunctions={},formatTokenFunctions={};function addFormatToken(token,padded,ordinal,callback){var func=callback;"string"==typeof callback&&(func=function(){return this[callback]()}),token&&(formatTokenFunctions[token]=func),padded&&(formatTokenFunctions[padded[0]]=function(){return zeroFill(func.apply(this,arguments),padded[1],padded[2])}),ordinal&&(formatTokenFunctions[ordinal]=function(){return this.localeData().ordinal(func.apply(this,arguments),token)})}function formatMoment(m,format){return m.isValid()?(format=expandFormat(format,m.localeData()),formatFunctions[format]=formatFunctions[format]||function(format){var i,length,input,array=format.match(formattingTokens);for(i=0,length=array.length;i<length;i++)formatTokenFunctions[array[i]]?array[i]=formatTokenFunctions[array[i]]:array[i]=(input=array[i]).match(/\[[\s\S]/)?input.replace(/^\[|\]$/g,""):input.replace(/\\/g,"");return function(mom){var i,output="";for(i=0;i<length;i++)output+=isFunction(array[i])?array[i].call(mom,format):array[i];return output}}(format),formatFunctions[format](m)):m.localeData().invalidDate()}function expandFormat(format,locale){var i=5;function replaceLongDateFormatTokens(input){return locale.longDateFormat(input)||input}for(localFormattingTokens.lastIndex=0;i>=0&&localFormattingTokens.test(format);)format=format.replace(localFormattingTokens,replaceLongDateFormatTokens),localFormattingTokens.lastIndex=0,i-=1;return format}var match1=/\d/,match2=/\d\d/,match3=/\d{3}/,match4=/\d{4}/,match6=/[+-]?\d{6}/,match1to2=/\d\d?/,match3to4=/\d\d\d\d?/,match5to6=/\d\d\d\d\d\d?/,match1to3=/\d{1,3}/,match1to4=/\d{1,4}/,match1to6=/[+-]?\d{1,6}/,matchUnsigned=/\d+/,matchSigned=/[+-]?\d+/,matchOffset=/Z|[+-]\d\d:?\d\d/gi,matchShortOffset=/Z|[+-]\d\d(?::?\d\d)?/gi,matchWord=/[0-9]{0,256}['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFF07\uFF10-\uFFEF]{1,256}|[\u0600-\u06FF\/]{1,256}(\s*?[\u0600-\u06FF]{1,256}){1,2}/i,regexes={};function addRegexToken(token,regex,strictRegex){regexes[token]=isFunction(regex)?regex:function(isStrict,localeData){return isStrict&&strictRegex?strictRegex:regex}}function getParseRegexForToken(token,config){return hasOwnProp(regexes,token)?regexes[token](config._strict,config._locale):new RegExp(regexEscape(token.replace("\\","").replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g,function(matched,p1,p2,p3,p4){return p1||p2||p3||p4})))}function regexEscape(s){return s.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&")}var tokens={};function addParseToken(token,callback){var i,func=callback;for("string"==typeof token&&(token=[token]),isNumber(callback)&&(func=function(input,array){array[callback]=toInt(input)}),i=0;i<token.length;i++)tokens[token[i]]=func}function addWeekParseToken(token,callback){addParseToken(token,function(input,array,config,token){config._w=config._w||{},callback(input,config._w,config,token)})}function addTimeToArrayFromToken(token,input,config){null!=input&&hasOwnProp(tokens,token)&&tokens[token](input,config._a,config,token)}var YEAR=0,MONTH=1,DATE=2,HOUR=3,MINUTE=4,SECOND=5,MILLISECOND=6,WEEK=7,WEEKDAY=8;function daysInYear(year){return isLeapYear(year)?366:365}function isLeapYear(year){return year%4==0&&year%100!=0||year%400==0}addFormatToken("Y",0,0,function(){var y=this.year();return y<=9999?""+y:"+"+y}),addFormatToken(0,["YY",2],0,function(){return this.year()%100}),addFormatToken(0,["YYYY",4],0,"year"),addFormatToken(0,["YYYYY",5],0,"year"),addFormatToken(0,["YYYYYY",6,!0],0,"year"),addUnitAlias("year","y"),addUnitPriority("year",1),addRegexToken("Y",matchSigned),addRegexToken("YY",match1to2,match2),addRegexToken("YYYY",match1to4,match4),addRegexToken("YYYYY",match1to6,match6),addRegexToken("YYYYYY",match1to6,match6),addParseToken(["YYYYY","YYYYYY"],YEAR),addParseToken("YYYY",function(input,array){array[YEAR]=2===input.length?hooks.parseTwoDigitYear(input):toInt(input)}),addParseToken("YY",function(input,array){array[YEAR]=hooks.parseTwoDigitYear(input)}),addParseToken("Y",function(input,array){array[YEAR]=parseInt(input,10)}),hooks.parseTwoDigitYear=function(input){return toInt(input)+(toInt(input)>68?1900:2e3)};var indexOf,getSetYear=makeGetSet("FullYear",!0);function makeGetSet(unit,keepTime){return function(value){return null!=value?(set$1(this,unit,value),hooks.updateOffset(this,keepTime),this):get(this,unit)}}function get(mom,unit){return mom.isValid()?mom._d["get"+(mom._isUTC?"UTC":"")+unit]():NaN}function set$1(mom,unit,value){mom.isValid()&&!isNaN(value)&&("FullYear"===unit&&isLeapYear(mom.year())&&1===mom.month()&&29===mom.date()?mom._d["set"+(mom._isUTC?"UTC":"")+unit](value,mom.month(),daysInMonth(value,mom.month())):mom._d["set"+(mom._isUTC?"UTC":"")+unit](value))}function daysInMonth(year,month){if(isNaN(year)||isNaN(month))return NaN;var x,modMonth=(month%(x=12)+x)%x;return year+=(month-modMonth)/12,1===modMonth?isLeapYear(year)?29:28:31-modMonth%7%2}indexOf=Array.prototype.indexOf?Array.prototype.indexOf:function(o){var i;for(i=0;i<this.length;++i)if(this[i]===o)return i;return-1},addFormatToken("M",["MM",2],"Mo",function(){return this.month()+1}),addFormatToken("MMM",0,0,function(format){return this.localeData().monthsShort(this,format)}),addFormatToken("MMMM",0,0,function(format){return this.localeData().months(this,format)}),addUnitAlias("month","M"),addUnitPriority("month",8),addRegexToken("M",match1to2),addRegexToken("MM",match1to2,match2),addRegexToken("MMM",function(isStrict,locale){return locale.monthsShortRegex(isStrict)}),addRegexToken("MMMM",function(isStrict,locale){return locale.monthsRegex(isStrict)}),addParseToken(["M","MM"],function(input,array){array[MONTH]=toInt(input)-1}),addParseToken(["MMM","MMMM"],function(input,array,config,token){var month=config._locale.monthsParse(input,token,config._strict);null!=month?array[MONTH]=month:getParsingFlags(config).invalidMonth=input});var MONTHS_IN_FORMAT=/D[oD]?(\[[^\[\]]*\]|\s)+MMMM?/,defaultLocaleMonths="January_February_March_April_May_June_July_August_September_October_November_December".split("_");var defaultLocaleMonthsShort="Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_");function setMonth(mom,value){var dayOfMonth;if(!mom.isValid())return mom;if("string"==typeof value)if(/^\d+$/.test(value))value=toInt(value);else if(!isNumber(value=mom.localeData().monthsParse(value)))return mom;return dayOfMonth=Math.min(mom.date(),daysInMonth(mom.year(),value)),mom._d["set"+(mom._isUTC?"UTC":"")+"Month"](value,dayOfMonth),mom}function getSetMonth(value){return null!=value?(setMonth(this,value),hooks.updateOffset(this,!0),this):get(this,"Month")}var defaultMonthsShortRegex=matchWord;var defaultMonthsRegex=matchWord;function computeMonthsParse(){function cmpLenRev(a,b){return b.length-a.length}var i,mom,shortPieces=[],longPieces=[],mixedPieces=[];for(i=0;i<12;i++)mom=createUTC([2e3,i]),shortPieces.push(this.monthsShort(mom,"")),longPieces.push(this.months(mom,"")),mixedPieces.push(this.months(mom,"")),mixedPieces.push(this.monthsShort(mom,""));for(shortPieces.sort(cmpLenRev),longPieces.sort(cmpLenRev),mixedPieces.sort(cmpLenRev),i=0;i<12;i++)shortPieces[i]=regexEscape(shortPieces[i]),longPieces[i]=regexEscape(longPieces[i]);for(i=0;i<24;i++)mixedPieces[i]=regexEscape(mixedPieces[i]);this._monthsRegex=new RegExp("^("+mixedPieces.join("|")+")","i"),this._monthsShortRegex=this._monthsRegex,this._monthsStrictRegex=new RegExp("^("+longPieces.join("|")+")","i"),this._monthsShortStrictRegex=new RegExp("^("+shortPieces.join("|")+")","i")}function createUTCDate(y){var date=new Date(Date.UTC.apply(null,arguments));return y<100&&y>=0&&isFinite(date.getUTCFullYear())&&date.setUTCFullYear(y),date}function firstWeekOffset(year,dow,doy){var fwd=7+dow-doy;return-((7+createUTCDate(year,0,fwd).getUTCDay()-dow)%7)+fwd-1}function dayOfYearFromWeeks(year,week,weekday,dow,doy){var resYear,resDayOfYear,dayOfYear=1+7*(week-1)+(7+weekday-dow)%7+firstWeekOffset(year,dow,doy);return dayOfYear<=0?resDayOfYear=daysInYear(resYear=year-1)+dayOfYear:dayOfYear>daysInYear(year)?(resYear=year+1,resDayOfYear=dayOfYear-daysInYear(year)):(resYear=year,resDayOfYear=dayOfYear),{year:resYear,dayOfYear:resDayOfYear}}function weekOfYear(mom,dow,doy){var resWeek,resYear,weekOffset=firstWeekOffset(mom.year(),dow,doy),week=Math.floor((mom.dayOfYear()-weekOffset-1)/7)+1;return week<1?resWeek=week+weeksInYear(resYear=mom.year()-1,dow,doy):week>weeksInYear(mom.year(),dow,doy)?(resWeek=week-weeksInYear(mom.year(),dow,doy),resYear=mom.year()+1):(resYear=mom.year(),resWeek=week),{week:resWeek,year:resYear}}function weeksInYear(year,dow,doy){var weekOffset=firstWeekOffset(year,dow,doy),weekOffsetNext=firstWeekOffset(year+1,dow,doy);return(daysInYear(year)-weekOffset+weekOffsetNext)/7}addFormatToken("w",["ww",2],"wo","week"),addFormatToken("W",["WW",2],"Wo","isoWeek"),addUnitAlias("week","w"),addUnitAlias("isoWeek","W"),addUnitPriority("week",5),addUnitPriority("isoWeek",5),addRegexToken("w",match1to2),addRegexToken("ww",match1to2,match2),addRegexToken("W",match1to2),addRegexToken("WW",match1to2,match2),addWeekParseToken(["w","ww","W","WW"],function(input,week,config,token){week[token.substr(0,1)]=toInt(input)});addFormatToken("d",0,"do","day"),addFormatToken("dd",0,0,function(format){return this.localeData().weekdaysMin(this,format)}),addFormatToken("ddd",0,0,function(format){return this.localeData().weekdaysShort(this,format)}),addFormatToken("dddd",0,0,function(format){return this.localeData().weekdays(this,format)}),addFormatToken("e",0,0,"weekday"),addFormatToken("E",0,0,"isoWeekday"),addUnitAlias("day","d"),addUnitAlias("weekday","e"),addUnitAlias("isoWeekday","E"),addUnitPriority("day",11),addUnitPriority("weekday",11),addUnitPriority("isoWeekday",11),addRegexToken("d",match1to2),addRegexToken("e",match1to2),addRegexToken("E",match1to2),addRegexToken("dd",function(isStrict,locale){return locale.weekdaysMinRegex(isStrict)}),addRegexToken("ddd",function(isStrict,locale){return locale.weekdaysShortRegex(isStrict)}),addRegexToken("dddd",function(isStrict,locale){return locale.weekdaysRegex(isStrict)}),addWeekParseToken(["dd","ddd","dddd"],function(input,week,config,token){var weekday=config._locale.weekdaysParse(input,token,config._strict);null!=weekday?week.d=weekday:getParsingFlags(config).invalidWeekday=input}),addWeekParseToken(["d","e","E"],function(input,week,config,token){week[token]=toInt(input)});var defaultLocaleWeekdays="Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_");var defaultLocaleWeekdaysShort="Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_");var defaultLocaleWeekdaysMin="Su_Mo_Tu_We_Th_Fr_Sa".split("_");var defaultWeekdaysRegex=matchWord;var defaultWeekdaysShortRegex=matchWord;var defaultWeekdaysMinRegex=matchWord;function computeWeekdaysParse(){function cmpLenRev(a,b){return b.length-a.length}var i,mom,minp,shortp,longp,minPieces=[],shortPieces=[],longPieces=[],mixedPieces=[];for(i=0;i<7;i++)mom=createUTC([2e3,1]).day(i),minp=this.weekdaysMin(mom,""),shortp=this.weekdaysShort(mom,""),longp=this.weekdays(mom,""),minPieces.push(minp),shortPieces.push(shortp),longPieces.push(longp),mixedPieces.push(minp),mixedPieces.push(shortp),mixedPieces.push(longp);for(minPieces.sort(cmpLenRev),shortPieces.sort(cmpLenRev),longPieces.sort(cmpLenRev),mixedPieces.sort(cmpLenRev),i=0;i<7;i++)shortPieces[i]=regexEscape(shortPieces[i]),longPieces[i]=regexEscape(longPieces[i]),mixedPieces[i]=regexEscape(mixedPieces[i]);this._weekdaysRegex=new RegExp("^("+mixedPieces.join("|")+")","i"),this._weekdaysShortRegex=this._weekdaysRegex,this._weekdaysMinRegex=this._weekdaysRegex,this._weekdaysStrictRegex=new RegExp("^("+longPieces.join("|")+")","i"),this._weekdaysShortStrictRegex=new RegExp("^("+shortPieces.join("|")+")","i"),this._weekdaysMinStrictRegex=new RegExp("^("+minPieces.join("|")+")","i")}function hFormat(){return this.hours()%12||12}function meridiem(token,lowercase){addFormatToken(token,0,0,function(){return this.localeData().meridiem(this.hours(),this.minutes(),lowercase)})}function matchMeridiem(isStrict,locale){return locale._meridiemParse}addFormatToken("H",["HH",2],0,"hour"),addFormatToken("h",["hh",2],0,hFormat),addFormatToken("k",["kk",2],0,function(){return this.hours()||24}),addFormatToken("hmm",0,0,function(){return""+hFormat.apply(this)+zeroFill(this.minutes(),2)}),addFormatToken("hmmss",0,0,function(){return""+hFormat.apply(this)+zeroFill(this.minutes(),2)+zeroFill(this.seconds(),2)}),addFormatToken("Hmm",0,0,function(){return""+this.hours()+zeroFill(this.minutes(),2)}),addFormatToken("Hmmss",0,0,function(){return""+this.hours()+zeroFill(this.minutes(),2)+zeroFill(this.seconds(),2)}),meridiem("a",!0),meridiem("A",!1),addUnitAlias("hour","h"),addUnitPriority("hour",13),addRegexToken("a",matchMeridiem),addRegexToken("A",matchMeridiem),addRegexToken("H",match1to2),addRegexToken("h",match1to2),addRegexToken("k",match1to2),addRegexToken("HH",match1to2,match2),addRegexToken("hh",match1to2,match2),addRegexToken("kk",match1to2,match2),addRegexToken("hmm",match3to4),addRegexToken("hmmss",match5to6),addRegexToken("Hmm",match3to4),addRegexToken("Hmmss",match5to6),addParseToken(["H","HH"],HOUR),addParseToken(["k","kk"],function(input,array,config){var kInput=toInt(input);array[HOUR]=24===kInput?0:kInput}),addParseToken(["a","A"],function(input,array,config){config._isPm=config._locale.isPM(input),config._meridiem=input}),addParseToken(["h","hh"],function(input,array,config){array[HOUR]=toInt(input),getParsingFlags(config).bigHour=!0}),addParseToken("hmm",function(input,array,config){var pos=input.length-2;array[HOUR]=toInt(input.substr(0,pos)),array[MINUTE]=toInt(input.substr(pos)),getParsingFlags(config).bigHour=!0}),addParseToken("hmmss",function(input,array,config){var pos1=input.length-4,pos2=input.length-2;array[HOUR]=toInt(input.substr(0,pos1)),array[MINUTE]=toInt(input.substr(pos1,2)),array[SECOND]=toInt(input.substr(pos2)),getParsingFlags(config).bigHour=!0}),addParseToken("Hmm",function(input,array,config){var pos=input.length-2;array[HOUR]=toInt(input.substr(0,pos)),array[MINUTE]=toInt(input.substr(pos))}),addParseToken("Hmmss",function(input,array,config){var pos1=input.length-4,pos2=input.length-2;array[HOUR]=toInt(input.substr(0,pos1)),array[MINUTE]=toInt(input.substr(pos1,2)),array[SECOND]=toInt(input.substr(pos2))});var globalLocale,getSetHour=makeGetSet("Hours",!0),baseConfig={calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},longDateFormat:{LTS:"h:mm:ss A",LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"},invalidDate:"Invalid date",ordinal:"%d",dayOfMonthOrdinalParse:/\d{1,2}/,relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},months:defaultLocaleMonths,monthsShort:defaultLocaleMonthsShort,week:{dow:0,doy:6},weekdays:defaultLocaleWeekdays,weekdaysMin:defaultLocaleWeekdaysMin,weekdaysShort:defaultLocaleWeekdaysShort,meridiemParse:/[ap]\.?m?\.?/i},locales={},localeFamilies={};function normalizeLocale(key){return key?key.toLowerCase().replace("_","-"):key}function loadLocale(name){var oldLocale=null;if(!locales[name]&&"undefined"!=typeof module&&module&&module.exports)try{oldLocale=globalLocale._abbr,require("./locale/"+name),getSetGlobalLocale(oldLocale)}catch(e){}return locales[name]}function getSetGlobalLocale(key,values){var data;return key&&((data=isUndefined(values)?getLocale(key):defineLocale(key,values))?globalLocale=data:"undefined"!=typeof console&&console.warn&&console.warn("Locale "+key+" not found. Did you forget to load it?")),globalLocale._abbr}function defineLocale(name,config){if(null!==config){var locale,parentConfig=baseConfig;if(config.abbr=name,null!=locales[name])deprecateSimple("defineLocaleOverride","use moment.updateLocale(localeName, config) to change an existing locale. moment.defineLocale(localeName, config) should only be used for creating a new locale See http://momentjs.com/guides/#/warnings/define-locale/ for more info."),parentConfig=locales[name]._config;else if(null!=config.parentLocale)if(null!=locales[config.parentLocale])parentConfig=locales[config.parentLocale]._config;else{if(null==(locale=loadLocale(config.parentLocale)))return localeFamilies[config.parentLocale]||(localeFamilies[config.parentLocale]=[]),localeFamilies[config.parentLocale].push({name:name,config:config}),null;parentConfig=locale._config}return locales[name]=new Locale(mergeConfigs(parentConfig,config)),localeFamilies[name]&&localeFamilies[name].forEach(function(x){defineLocale(x.name,x.config)}),getSetGlobalLocale(name),locales[name]}return delete locales[name],null}function getLocale(key){var locale;if(key&&key._locale&&key._locale._abbr&&(key=key._locale._abbr),!key)return globalLocale;if(!isArray(key)){if(locale=loadLocale(key))return locale;key=[key]}return function(names){for(var j,next,locale,split,i=0;i<names.length;){for(j=(split=normalizeLocale(names[i]).split("-")).length,next=(next=normalizeLocale(names[i+1]))?next.split("-"):null;j>0;){if(locale=loadLocale(split.slice(0,j).join("-")))return locale;if(next&&next.length>=j&&compareArrays(split,next,!0)>=j-1)break;j--}i++}return globalLocale}(key)}function checkOverflow(m){var overflow,a=m._a;return a&&-2===getParsingFlags(m).overflow&&(overflow=a[MONTH]<0||a[MONTH]>11?MONTH:a[DATE]<1||a[DATE]>daysInMonth(a[YEAR],a[MONTH])?DATE:a[HOUR]<0||a[HOUR]>24||24===a[HOUR]&&(0!==a[MINUTE]||0!==a[SECOND]||0!==a[MILLISECOND])?HOUR:a[MINUTE]<0||a[MINUTE]>59?MINUTE:a[SECOND]<0||a[SECOND]>59?SECOND:a[MILLISECOND]<0||a[MILLISECOND]>999?MILLISECOND:-1,getParsingFlags(m)._overflowDayOfYear&&(overflow<YEAR||overflow>DATE)&&(overflow=DATE),getParsingFlags(m)._overflowWeeks&&-1===overflow&&(overflow=WEEK),getParsingFlags(m)._overflowWeekday&&-1===overflow&&(overflow=WEEKDAY),getParsingFlags(m).overflow=overflow),m}function defaults(a,b,c){return null!=a?a:null!=b?b:c}function configFromArray(config){var i,date,currentDate,expectedWeekday,yearToUse,input=[];if(!config._d){for(currentDate=function(config){var nowValue=new Date(hooks.now());return config._useUTC?[nowValue.getUTCFullYear(),nowValue.getUTCMonth(),nowValue.getUTCDate()]:[nowValue.getFullYear(),nowValue.getMonth(),nowValue.getDate()]}(config),config._w&&null==config._a[DATE]&&null==config._a[MONTH]&&function(config){var w,weekYear,week,weekday,dow,doy,temp,weekdayOverflow;if(null!=(w=config._w).GG||null!=w.W||null!=w.E)dow=1,doy=4,weekYear=defaults(w.GG,config._a[YEAR],weekOfYear(createLocal(),1,4).year),week=defaults(w.W,1),((weekday=defaults(w.E,1))<1||weekday>7)&&(weekdayOverflow=!0);else{dow=config._locale._week.dow,doy=config._locale._week.doy;var curWeek=weekOfYear(createLocal(),dow,doy);weekYear=defaults(w.gg,config._a[YEAR],curWeek.year),week=defaults(w.w,curWeek.week),null!=w.d?((weekday=w.d)<0||weekday>6)&&(weekdayOverflow=!0):null!=w.e?(weekday=w.e+dow,(w.e<0||w.e>6)&&(weekdayOverflow=!0)):weekday=dow}week<1||week>weeksInYear(weekYear,dow,doy)?getParsingFlags(config)._overflowWeeks=!0:null!=weekdayOverflow?getParsingFlags(config)._overflowWeekday=!0:(temp=dayOfYearFromWeeks(weekYear,week,weekday,dow,doy),config._a[YEAR]=temp.year,config._dayOfYear=temp.dayOfYear)}(config),null!=config._dayOfYear&&(yearToUse=defaults(config._a[YEAR],currentDate[YEAR]),(config._dayOfYear>daysInYear(yearToUse)||0===config._dayOfYear)&&(getParsingFlags(config)._overflowDayOfYear=!0),date=createUTCDate(yearToUse,0,config._dayOfYear),config._a[MONTH]=date.getUTCMonth(),config._a[DATE]=date.getUTCDate()),i=0;i<3&&null==config._a[i];++i)config._a[i]=input[i]=currentDate[i];for(;i<7;i++)config._a[i]=input[i]=null==config._a[i]?2===i?1:0:config._a[i];24===config._a[HOUR]&&0===config._a[MINUTE]&&0===config._a[SECOND]&&0===config._a[MILLISECOND]&&(config._nextDay=!0,config._a[HOUR]=0),config._d=(config._useUTC?createUTCDate:function(y,m,d,h,M,s,ms){var date=new Date(y,m,d,h,M,s,ms);return y<100&&y>=0&&isFinite(date.getFullYear())&&date.setFullYear(y),date}).apply(null,input),expectedWeekday=config._useUTC?config._d.getUTCDay():config._d.getDay(),null!=config._tzm&&config._d.setUTCMinutes(config._d.getUTCMinutes()-config._tzm),config._nextDay&&(config._a[HOUR]=24),config._w&&void 0!==config._w.d&&config._w.d!==expectedWeekday&&(getParsingFlags(config).weekdayMismatch=!0)}}var extendedIsoRegex=/^\s*((?:[+-]\d{6}|\d{4})-(?:\d\d-\d\d|W\d\d-\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?::\d\d(?::\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?$/,basicIsoRegex=/^\s*((?:[+-]\d{6}|\d{4})(?:\d\d\d\d|W\d\d\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?:\d\d(?:\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?$/,tzRegex=/Z|[+-]\d\d(?::?\d\d)?/,isoDates=[["YYYYYY-MM-DD",/[+-]\d{6}-\d\d-\d\d/],["YYYY-MM-DD",/\d{4}-\d\d-\d\d/],["GGGG-[W]WW-E",/\d{4}-W\d\d-\d/],["GGGG-[W]WW",/\d{4}-W\d\d/,!1],["YYYY-DDD",/\d{4}-\d{3}/],["YYYY-MM",/\d{4}-\d\d/,!1],["YYYYYYMMDD",/[+-]\d{10}/],["YYYYMMDD",/\d{8}/],["GGGG[W]WWE",/\d{4}W\d{3}/],["GGGG[W]WW",/\d{4}W\d{2}/,!1],["YYYYDDD",/\d{7}/]],isoTimes=[["HH:mm:ss.SSSS",/\d\d:\d\d:\d\d\.\d+/],["HH:mm:ss,SSSS",/\d\d:\d\d:\d\d,\d+/],["HH:mm:ss",/\d\d:\d\d:\d\d/],["HH:mm",/\d\d:\d\d/],["HHmmss.SSSS",/\d\d\d\d\d\d\.\d+/],["HHmmss,SSSS",/\d\d\d\d\d\d,\d+/],["HHmmss",/\d\d\d\d\d\d/],["HHmm",/\d\d\d\d/],["HH",/\d\d/]],aspNetJsonRegex=/^\/?Date\((\-?\d+)/i;function configFromISO(config){var i,l,allowTime,dateFormat,timeFormat,tzFormat,string=config._i,match=extendedIsoRegex.exec(string)||basicIsoRegex.exec(string);if(match){for(getParsingFlags(config).iso=!0,i=0,l=isoDates.length;i<l;i++)if(isoDates[i][1].exec(match[1])){dateFormat=isoDates[i][0],allowTime=!1!==isoDates[i][2];break}if(null==dateFormat)return void(config._isValid=!1);if(match[3]){for(i=0,l=isoTimes.length;i<l;i++)if(isoTimes[i][1].exec(match[3])){timeFormat=(match[2]||" ")+isoTimes[i][0];break}if(null==timeFormat)return void(config._isValid=!1)}if(!allowTime&&null!=timeFormat)return void(config._isValid=!1);if(match[4]){if(!tzRegex.exec(match[4]))return void(config._isValid=!1);tzFormat="Z"}config._f=dateFormat+(timeFormat||"")+(tzFormat||""),configFromStringAndFormat(config)}else config._isValid=!1}var rfc2822=/^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\s)?(\d{1,2})\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s(\d{2,4})\s(\d\d):(\d\d)(?::(\d\d))?\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|([+-]\d{4}))$/;function extractFromRFC2822Strings(yearStr,monthStr,dayStr,hourStr,minuteStr,secondStr){var result=[function(yearStr){var year=parseInt(yearStr,10);if(year<=49)return 2e3+year;if(year<=999)return 1900+year;return year}(yearStr),defaultLocaleMonthsShort.indexOf(monthStr),parseInt(dayStr,10),parseInt(hourStr,10),parseInt(minuteStr,10)];return secondStr&&result.push(parseInt(secondStr,10)),result}var obsOffsets={UT:0,GMT:0,EDT:-240,EST:-300,CDT:-300,CST:-360,MDT:-360,MST:-420,PDT:-420,PST:-480};function configFromRFC2822(config){var match=rfc2822.exec(config._i.replace(/\([^)]*\)|[\n\t]/g," ").replace(/(\s\s+)/g," ").replace(/^\s\s*/,"").replace(/\s\s*$/,""));if(match){var parsedArray=extractFromRFC2822Strings(match[4],match[3],match[2],match[5],match[6],match[7]);if(!function(weekdayStr,parsedInput,config){return!weekdayStr||defaultLocaleWeekdaysShort.indexOf(weekdayStr)===new Date(parsedInput[0],parsedInput[1],parsedInput[2]).getDay()||(getParsingFlags(config).weekdayMismatch=!0,config._isValid=!1,!1)}(match[1],parsedArray,config))return;config._a=parsedArray,config._tzm=function(obsOffset,militaryOffset,numOffset){if(obsOffset)return obsOffsets[obsOffset];if(militaryOffset)return 0;var hm=parseInt(numOffset,10),m=hm%100;return(hm-m)/100*60+m}(match[8],match[9],match[10]),config._d=createUTCDate.apply(null,config._a),config._d.setUTCMinutes(config._d.getUTCMinutes()-config._tzm),getParsingFlags(config).rfc2822=!0}else config._isValid=!1}function configFromStringAndFormat(config){if(config._f!==hooks.ISO_8601)if(config._f!==hooks.RFC_2822){config._a=[],getParsingFlags(config).empty=!0;var i,parsedInput,tokens,token,skipped,string=""+config._i,stringLength=string.length,totalParsedInputLength=0;for(tokens=expandFormat(config._f,config._locale).match(formattingTokens)||[],i=0;i<tokens.length;i++)token=tokens[i],(parsedInput=(string.match(getParseRegexForToken(token,config))||[])[0])&&((skipped=string.substr(0,string.indexOf(parsedInput))).length>0&&getParsingFlags(config).unusedInput.push(skipped),string=string.slice(string.indexOf(parsedInput)+parsedInput.length),totalParsedInputLength+=parsedInput.length),formatTokenFunctions[token]?(parsedInput?getParsingFlags(config).empty=!1:getParsingFlags(config).unusedTokens.push(token),addTimeToArrayFromToken(token,parsedInput,config)):config._strict&&!parsedInput&&getParsingFlags(config).unusedTokens.push(token);getParsingFlags(config).charsLeftOver=stringLength-totalParsedInputLength,string.length>0&&getParsingFlags(config).unusedInput.push(string),config._a[HOUR]<=12&&!0===getParsingFlags(config).bigHour&&config._a[HOUR]>0&&(getParsingFlags(config).bigHour=void 0),getParsingFlags(config).parsedDateParts=config._a.slice(0),getParsingFlags(config).meridiem=config._meridiem,config._a[HOUR]=function(locale,hour,meridiem){var isPm;if(null==meridiem)return hour;return null!=locale.meridiemHour?locale.meridiemHour(hour,meridiem):null!=locale.isPM?((isPm=locale.isPM(meridiem))&&hour<12&&(hour+=12),isPm||12!==hour||(hour=0),hour):hour}(config._locale,config._a[HOUR],config._meridiem),configFromArray(config),checkOverflow(config)}else configFromRFC2822(config);else configFromISO(config)}function prepareConfig(config){var input=config._i,format=config._f;return config._locale=config._locale||getLocale(config._l),null===input||void 0===format&&""===input?createInvalid({nullInput:!0}):("string"==typeof input&&(config._i=input=config._locale.preparse(input)),isMoment(input)?new Moment(checkOverflow(input)):(isDate(input)?config._d=input:isArray(format)?function(config){var tempConfig,bestMoment,scoreToBeat,i,currentScore;if(0===config._f.length)return getParsingFlags(config).invalidFormat=!0,void(config._d=new Date(NaN));for(i=0;i<config._f.length;i++)currentScore=0,tempConfig=copyConfig({},config),null!=config._useUTC&&(tempConfig._useUTC=config._useUTC),tempConfig._f=config._f[i],configFromStringAndFormat(tempConfig),isValid(tempConfig)&&(currentScore+=getParsingFlags(tempConfig).charsLeftOver,currentScore+=10*getParsingFlags(tempConfig).unusedTokens.length,getParsingFlags(tempConfig).score=currentScore,(null==scoreToBeat||currentScore<scoreToBeat)&&(scoreToBeat=currentScore,bestMoment=tempConfig));extend(config,bestMoment||tempConfig)}(config):format?configFromStringAndFormat(config):function(config){var input=config._i;isUndefined(input)?config._d=new Date(hooks.now()):isDate(input)?config._d=new Date(input.valueOf()):"string"==typeof input?function(config){var matched=aspNetJsonRegex.exec(config._i);null===matched?(configFromISO(config),!1===config._isValid&&(delete config._isValid,configFromRFC2822(config),!1===config._isValid&&(delete config._isValid,hooks.createFromInputFallback(config)))):config._d=new Date(+matched[1])}(config):isArray(input)?(config._a=map(input.slice(0),function(obj){return parseInt(obj,10)}),configFromArray(config)):isObject(input)?function(config){if(!config._d){var i=normalizeObjectUnits(config._i);config._a=map([i.year,i.month,i.day||i.date,i.hour,i.minute,i.second,i.millisecond],function(obj){return obj&&parseInt(obj,10)}),configFromArray(config)}}(config):isNumber(input)?config._d=new Date(input):hooks.createFromInputFallback(config)}(config),isValid(config)||(config._d=null),config))}function createLocalOrUTC(input,format,locale,strict,isUTC){var res,c={};return!0!==locale&&!1!==locale||(strict=locale,locale=void 0),(isObject(input)&&function(obj){if(Object.getOwnPropertyNames)return 0===Object.getOwnPropertyNames(obj).length;var k;for(k in obj)if(obj.hasOwnProperty(k))return!1;return!0}(input)||isArray(input)&&0===input.length)&&(input=void 0),c._isAMomentObject=!0,c._useUTC=c._isUTC=isUTC,c._l=locale,c._i=input,c._f=format,c._strict=strict,(res=new Moment(checkOverflow(prepareConfig(c))))._nextDay&&(res.add(1,"d"),res._nextDay=void 0),res}function createLocal(input,format,locale,strict){return createLocalOrUTC(input,format,locale,strict,!1)}hooks.createFromInputFallback=deprecate("value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are discouraged and will be removed in an upcoming major release. Please refer to http://momentjs.com/guides/#/warnings/js-date/ for more info.",function(config){config._d=new Date(config._i+(config._useUTC?" UTC":""))}),hooks.ISO_8601=function(){},hooks.RFC_2822=function(){};var prototypeMin=deprecate("moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/",function(){var other=createLocal.apply(null,arguments);return this.isValid()&&other.isValid()?other<this?this:other:createInvalid()}),prototypeMax=deprecate("moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/",function(){var other=createLocal.apply(null,arguments);return this.isValid()&&other.isValid()?other>this?this:other:createInvalid()});function pickBy(fn,moments){var res,i;if(1===moments.length&&isArray(moments[0])&&(moments=moments[0]),!moments.length)return createLocal();for(res=moments[0],i=1;i<moments.length;++i)moments[i].isValid()&&!moments[i][fn](res)||(res=moments[i]);return res}var ordering=["year","quarter","month","week","day","hour","minute","second","millisecond"];function Duration(duration){var normalizedInput=normalizeObjectUnits(duration),years=normalizedInput.year||0,quarters=normalizedInput.quarter||0,months=normalizedInput.month||0,weeks=normalizedInput.week||0,days=normalizedInput.day||0,hours=normalizedInput.hour||0,minutes=normalizedInput.minute||0,seconds=normalizedInput.second||0,milliseconds=normalizedInput.millisecond||0;this._isValid=function(m){for(var key in m)if(-1===indexOf.call(ordering,key)||null!=m[key]&&isNaN(m[key]))return!1;for(var unitHasDecimal=!1,i=0;i<ordering.length;++i)if(m[ordering[i]]){if(unitHasDecimal)return!1;parseFloat(m[ordering[i]])!==toInt(m[ordering[i]])&&(unitHasDecimal=!0)}return!0}(normalizedInput),this._milliseconds=+milliseconds+1e3*seconds+6e4*minutes+1e3*hours*60*60,this._days=+days+7*weeks,this._months=+months+3*quarters+12*years,this._data={},this._locale=getLocale(),this._bubble()}function isDuration(obj){return obj instanceof Duration}function absRound(number){return number<0?-1*Math.round(-1*number):Math.round(number)}function offset(token,separator){addFormatToken(token,0,0,function(){var offset=this.utcOffset(),sign="+";return offset<0&&(offset=-offset,sign="-"),sign+zeroFill(~~(offset/60),2)+separator+zeroFill(~~offset%60,2)})}offset("Z",":"),offset("ZZ",""),addRegexToken("Z",matchShortOffset),addRegexToken("ZZ",matchShortOffset),addParseToken(["Z","ZZ"],function(input,array,config){config._useUTC=!0,config._tzm=offsetFromString(matchShortOffset,input)});var chunkOffset=/([\+\-]|\d\d)/gi;function offsetFromString(matcher,string){var matches=(string||"").match(matcher);if(null===matches)return null;var parts=((matches[matches.length-1]||[])+"").match(chunkOffset)||["-",0,0],minutes=60*parts[1]+toInt(parts[2]);return 0===minutes?0:"+"===parts[0]?minutes:-minutes}function cloneWithOffset(input,model){var res,diff;return model._isUTC?(res=model.clone(),diff=(isMoment(input)||isDate(input)?input.valueOf():createLocal(input).valueOf())-res.valueOf(),res._d.setTime(res._d.valueOf()+diff),hooks.updateOffset(res,!1),res):createLocal(input).local()}function getDateOffset(m){return 15*-Math.round(m._d.getTimezoneOffset()/15)}function isUtc(){return!!this.isValid()&&(this._isUTC&&0===this._offset)}hooks.updateOffset=function(){};var aspNetRegex=/^(\-|\+)?(?:(\d*)[. ])?(\d+)\:(\d+)(?:\:(\d+)(\.\d*)?)?$/,isoRegex=/^(-|\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;function createDuration(input,key){var sign,ret,diffRes,duration=input,match=null;return isDuration(input)?duration={ms:input._milliseconds,d:input._days,M:input._months}:isNumber(input)?(duration={},key?duration[key]=input:duration.milliseconds=input):(match=aspNetRegex.exec(input))?(sign="-"===match[1]?-1:1,duration={y:0,d:toInt(match[DATE])*sign,h:toInt(match[HOUR])*sign,m:toInt(match[MINUTE])*sign,s:toInt(match[SECOND])*sign,ms:toInt(absRound(1e3*match[MILLISECOND]))*sign}):(match=isoRegex.exec(input))?(sign="-"===match[1]?-1:(match[1],1),duration={y:parseIso(match[2],sign),M:parseIso(match[3],sign),w:parseIso(match[4],sign),d:parseIso(match[5],sign),h:parseIso(match[6],sign),m:parseIso(match[7],sign),s:parseIso(match[8],sign)}):null==duration?duration={}:"object"==typeof duration&&("from"in duration||"to"in duration)&&(diffRes=function(base,other){var res;if(!base.isValid()||!other.isValid())return{milliseconds:0,months:0};other=cloneWithOffset(other,base),base.isBefore(other)?res=positiveMomentsDifference(base,other):((res=positiveMomentsDifference(other,base)).milliseconds=-res.milliseconds,res.months=-res.months);return res}(createLocal(duration.from),createLocal(duration.to)),(duration={}).ms=diffRes.milliseconds,duration.M=diffRes.months),ret=new Duration(duration),isDuration(input)&&hasOwnProp(input,"_locale")&&(ret._locale=input._locale),ret}function parseIso(inp,sign){var res=inp&&parseFloat(inp.replace(",","."));return(isNaN(res)?0:res)*sign}function positiveMomentsDifference(base,other){var res={milliseconds:0,months:0};return res.months=other.month()-base.month()+12*(other.year()-base.year()),base.clone().add(res.months,"M").isAfter(other)&&--res.months,res.milliseconds=+other-+base.clone().add(res.months,"M"),res}function createAdder(direction,name){return function(val,period){var tmp;return null===period||isNaN(+period)||(deprecateSimple(name,"moment()."+name+"(period, number) is deprecated. Please use moment()."+name+"(number, period). See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info."),tmp=val,val=period,period=tmp),addSubtract(this,createDuration(val="string"==typeof val?+val:val,period),direction),this}}function addSubtract(mom,duration,isAdding,updateOffset){var milliseconds=duration._milliseconds,days=absRound(duration._days),months=absRound(duration._months);mom.isValid()&&(updateOffset=null==updateOffset||updateOffset,months&&setMonth(mom,get(mom,"Month")+months*isAdding),days&&set$1(mom,"Date",get(mom,"Date")+days*isAdding),milliseconds&&mom._d.setTime(mom._d.valueOf()+milliseconds*isAdding),updateOffset&&hooks.updateOffset(mom,days||months))}createDuration.fn=Duration.prototype,createDuration.invalid=function(){return createDuration(NaN)};var add=createAdder(1,"add"),subtract=createAdder(-1,"subtract");function monthDiff(a,b){var wholeMonthDiff=12*(b.year()-a.year())+(b.month()-a.month()),anchor=a.clone().add(wholeMonthDiff,"months");return-(wholeMonthDiff+(b-anchor<0?(b-anchor)/(anchor-a.clone().add(wholeMonthDiff-1,"months")):(b-anchor)/(a.clone().add(wholeMonthDiff+1,"months")-anchor)))||0}function locale(key){var newLocaleData;return void 0===key?this._locale._abbr:(null!=(newLocaleData=getLocale(key))&&(this._locale=newLocaleData),this)}hooks.defaultFormat="YYYY-MM-DDTHH:mm:ssZ",hooks.defaultFormatUtc="YYYY-MM-DDTHH:mm:ss[Z]";var lang=deprecate("moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.",function(key){return void 0===key?this.localeData():this.locale(key)});function localeData(){return this._locale}function addWeekYearFormatToken(token,getter){addFormatToken(0,[token,token.length],0,getter)}function getSetWeekYearHelper(input,week,weekday,dow,doy){var weeksTarget;return null==input?weekOfYear(this,dow,doy).year:(week>(weeksTarget=weeksInYear(input,dow,doy))&&(week=weeksTarget),function(weekYear,week,weekday,dow,doy){var dayOfYearData=dayOfYearFromWeeks(weekYear,week,weekday,dow,doy),date=createUTCDate(dayOfYearData.year,0,dayOfYearData.dayOfYear);return this.year(date.getUTCFullYear()),this.month(date.getUTCMonth()),this.date(date.getUTCDate()),this}.call(this,input,week,weekday,dow,doy))}addFormatToken(0,["gg",2],0,function(){return this.weekYear()%100}),addFormatToken(0,["GG",2],0,function(){return this.isoWeekYear()%100}),addWeekYearFormatToken("gggg","weekYear"),addWeekYearFormatToken("ggggg","weekYear"),addWeekYearFormatToken("GGGG","isoWeekYear"),addWeekYearFormatToken("GGGGG","isoWeekYear"),addUnitAlias("weekYear","gg"),addUnitAlias("isoWeekYear","GG"),addUnitPriority("weekYear",1),addUnitPriority("isoWeekYear",1),addRegexToken("G",matchSigned),addRegexToken("g",matchSigned),addRegexToken("GG",match1to2,match2),addRegexToken("gg",match1to2,match2),addRegexToken("GGGG",match1to4,match4),addRegexToken("gggg",match1to4,match4),addRegexToken("GGGGG",match1to6,match6),addRegexToken("ggggg",match1to6,match6),addWeekParseToken(["gggg","ggggg","GGGG","GGGGG"],function(input,week,config,token){week[token.substr(0,2)]=toInt(input)}),addWeekParseToken(["gg","GG"],function(input,week,config,token){week[token]=hooks.parseTwoDigitYear(input)}),addFormatToken("Q",0,"Qo","quarter"),addUnitAlias("quarter","Q"),addUnitPriority("quarter",7),addRegexToken("Q",match1),addParseToken("Q",function(input,array){array[MONTH]=3*(toInt(input)-1)}),addFormatToken("D",["DD",2],"Do","date"),addUnitAlias("date","D"),addUnitPriority("date",9),addRegexToken("D",match1to2),addRegexToken("DD",match1to2,match2),addRegexToken("Do",function(isStrict,locale){return isStrict?locale._dayOfMonthOrdinalParse||locale._ordinalParse:locale._dayOfMonthOrdinalParseLenient}),addParseToken(["D","DD"],DATE),addParseToken("Do",function(input,array){array[DATE]=toInt(input.match(match1to2)[0])});var getSetDayOfMonth=makeGetSet("Date",!0);addFormatToken("DDD",["DDDD",3],"DDDo","dayOfYear"),addUnitAlias("dayOfYear","DDD"),addUnitPriority("dayOfYear",4),addRegexToken("DDD",match1to3),addRegexToken("DDDD",match3),addParseToken(["DDD","DDDD"],function(input,array,config){config._dayOfYear=toInt(input)}),addFormatToken("m",["mm",2],0,"minute"),addUnitAlias("minute","m"),addUnitPriority("minute",14),addRegexToken("m",match1to2),addRegexToken("mm",match1to2,match2),addParseToken(["m","mm"],MINUTE);var getSetMinute=makeGetSet("Minutes",!1);addFormatToken("s",["ss",2],0,"second"),addUnitAlias("second","s"),addUnitPriority("second",15),addRegexToken("s",match1to2),addRegexToken("ss",match1to2,match2),addParseToken(["s","ss"],SECOND);var token,getSetSecond=makeGetSet("Seconds",!1);for(addFormatToken("S",0,0,function(){return~~(this.millisecond()/100)}),addFormatToken(0,["SS",2],0,function(){return~~(this.millisecond()/10)}),addFormatToken(0,["SSS",3],0,"millisecond"),addFormatToken(0,["SSSS",4],0,function(){return 10*this.millisecond()}),addFormatToken(0,["SSSSS",5],0,function(){return 100*this.millisecond()}),addFormatToken(0,["SSSSSS",6],0,function(){return 1e3*this.millisecond()}),addFormatToken(0,["SSSSSSS",7],0,function(){return 1e4*this.millisecond()}),addFormatToken(0,["SSSSSSSS",8],0,function(){return 1e5*this.millisecond()}),addFormatToken(0,["SSSSSSSSS",9],0,function(){return 1e6*this.millisecond()}),addUnitAlias("millisecond","ms"),addUnitPriority("millisecond",16),addRegexToken("S",match1to3,match1),addRegexToken("SS",match1to3,match2),addRegexToken("SSS",match1to3,match3),token="SSSS";token.length<=9;token+="S")addRegexToken(token,matchUnsigned);function parseMs(input,array){array[MILLISECOND]=toInt(1e3*("0."+input))}for(token="S";token.length<=9;token+="S")addParseToken(token,parseMs);var getSetMillisecond=makeGetSet("Milliseconds",!1);addFormatToken("z",0,0,"zoneAbbr"),addFormatToken("zz",0,0,"zoneName");var proto=Moment.prototype;function preParsePostFormat(string){return string}proto.add=add,proto.calendar=function(time,formats){var now=time||createLocal(),sod=cloneWithOffset(now,this).startOf("day"),format=hooks.calendarFormat(this,sod)||"sameElse",output=formats&&(isFunction(formats[format])?formats[format].call(this,now):formats[format]);return this.format(output||this.localeData().calendar(format,this,createLocal(now)))},proto.clone=function(){return new Moment(this)},proto.diff=function(input,units,asFloat){var that,zoneDelta,output;if(!this.isValid())return NaN;if(!(that=cloneWithOffset(input,this)).isValid())return NaN;switch(zoneDelta=6e4*(that.utcOffset()-this.utcOffset()),units=normalizeUnits(units)){case"year":output=monthDiff(this,that)/12;break;case"month":output=monthDiff(this,that);break;case"quarter":output=monthDiff(this,that)/3;break;case"second":output=(this-that)/1e3;break;case"minute":output=(this-that)/6e4;break;case"hour":output=(this-that)/36e5;break;case"day":output=(this-that-zoneDelta)/864e5;break;case"week":output=(this-that-zoneDelta)/6048e5;break;default:output=this-that}return asFloat?output:absFloor(output)},proto.endOf=function(units){return void 0===(units=normalizeUnits(units))||"millisecond"===units?this:("date"===units&&(units="day"),this.startOf(units).add(1,"isoWeek"===units?"week":units).subtract(1,"ms"))},proto.format=function(inputString){inputString||(inputString=this.isUtc()?hooks.defaultFormatUtc:hooks.defaultFormat);var output=formatMoment(this,inputString);return this.localeData().postformat(output)},proto.from=function(time,withoutSuffix){return this.isValid()&&(isMoment(time)&&time.isValid()||createLocal(time).isValid())?createDuration({to:this,from:time}).locale(this.locale()).humanize(!withoutSuffix):this.localeData().invalidDate()},proto.fromNow=function(withoutSuffix){return this.from(createLocal(),withoutSuffix)},proto.to=function(time,withoutSuffix){return this.isValid()&&(isMoment(time)&&time.isValid()||createLocal(time).isValid())?createDuration({from:this,to:time}).locale(this.locale()).humanize(!withoutSuffix):this.localeData().invalidDate()},proto.toNow=function(withoutSuffix){return this.to(createLocal(),withoutSuffix)},proto.get=function(units){return isFunction(this[units=normalizeUnits(units)])?this[units]():this},proto.invalidAt=function(){return getParsingFlags(this).overflow},proto.isAfter=function(input,units){var localInput=isMoment(input)?input:createLocal(input);return!(!this.isValid()||!localInput.isValid())&&("millisecond"===(units=normalizeUnits(isUndefined(units)?"millisecond":units))?this.valueOf()>localInput.valueOf():localInput.valueOf()<this.clone().startOf(units).valueOf())},proto.isBefore=function(input,units){var localInput=isMoment(input)?input:createLocal(input);return!(!this.isValid()||!localInput.isValid())&&("millisecond"===(units=normalizeUnits(isUndefined(units)?"millisecond":units))?this.valueOf()<localInput.valueOf():this.clone().endOf(units).valueOf()<localInput.valueOf())},proto.isBetween=function(from,to,units,inclusivity){return("("===(inclusivity=inclusivity||"()")[0]?this.isAfter(from,units):!this.isBefore(from,units))&&(")"===inclusivity[1]?this.isBefore(to,units):!this.isAfter(to,units))},proto.isSame=function(input,units){var inputMs,localInput=isMoment(input)?input:createLocal(input);return!(!this.isValid()||!localInput.isValid())&&("millisecond"===(units=normalizeUnits(units||"millisecond"))?this.valueOf()===localInput.valueOf():(inputMs=localInput.valueOf(),this.clone().startOf(units).valueOf()<=inputMs&&inputMs<=this.clone().endOf(units).valueOf()))},proto.isSameOrAfter=function(input,units){return this.isSame(input,units)||this.isAfter(input,units)},proto.isSameOrBefore=function(input,units){return this.isSame(input,units)||this.isBefore(input,units)},proto.isValid=function(){return isValid(this)},proto.lang=lang,proto.locale=locale,proto.localeData=localeData,proto.max=prototypeMax,proto.min=prototypeMin,proto.parsingFlags=function(){return extend({},getParsingFlags(this))},proto.set=function(units,value){if("object"==typeof units)for(var prioritized=function(unitsObj){var units=[];for(var u in unitsObj)units.push({unit:u,priority:priorities[u]});return units.sort(function(a,b){return a.priority-b.priority}),units}(units=normalizeObjectUnits(units)),i=0;i<prioritized.length;i++)this[prioritized[i].unit](units[prioritized[i].unit]);else if(isFunction(this[units=normalizeUnits(units)]))return this[units](value);return this},proto.startOf=function(units){switch(units=normalizeUnits(units)){case"year":this.month(0);case"quarter":case"month":this.date(1);case"week":case"isoWeek":case"day":case"date":this.hours(0);case"hour":this.minutes(0);case"minute":this.seconds(0);case"second":this.milliseconds(0)}return"week"===units&&this.weekday(0),"isoWeek"===units&&this.isoWeekday(1),"quarter"===units&&this.month(3*Math.floor(this.month()/3)),this},proto.subtract=subtract,proto.toArray=function(){var m=this;return[m.year(),m.month(),m.date(),m.hour(),m.minute(),m.second(),m.millisecond()]},proto.toObject=function(){var m=this;return{years:m.year(),months:m.month(),date:m.date(),hours:m.hours(),minutes:m.minutes(),seconds:m.seconds(),milliseconds:m.milliseconds()}},proto.toDate=function(){return new Date(this.valueOf())},proto.toISOString=function(keepOffset){if(!this.isValid())return null;var utc=!0!==keepOffset,m=utc?this.clone().utc():this;return m.year()<0||m.year()>9999?formatMoment(m,utc?"YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]":"YYYYYY-MM-DD[T]HH:mm:ss.SSSZ"):isFunction(Date.prototype.toISOString)?utc?this.toDate().toISOString():new Date(this.valueOf()+60*this.utcOffset()*1e3).toISOString().replace("Z",formatMoment(m,"Z")):formatMoment(m,utc?"YYYY-MM-DD[T]HH:mm:ss.SSS[Z]":"YYYY-MM-DD[T]HH:mm:ss.SSSZ")},proto.inspect=function(){if(!this.isValid())return"moment.invalid(/* "+this._i+" */)";var func="moment",zone="";this.isLocal()||(func=0===this.utcOffset()?"moment.utc":"moment.parseZone",zone="Z");var prefix="["+func+'("]',year=0<=this.year()&&this.year()<=9999?"YYYY":"YYYYYY",suffix=zone+'[")]';return this.format(prefix+year+"-MM-DD[T]HH:mm:ss.SSS"+suffix)},proto.toJSON=function(){return this.isValid()?this.toISOString():null},proto.toString=function(){return this.clone().locale("en").format("ddd MMM DD YYYY HH:mm:ss [GMT]ZZ")},proto.unix=function(){return Math.floor(this.valueOf()/1e3)},proto.valueOf=function(){return this._d.valueOf()-6e4*(this._offset||0)},proto.creationData=function(){return{input:this._i,format:this._f,locale:this._locale,isUTC:this._isUTC,strict:this._strict}},proto.year=getSetYear,proto.isLeapYear=function(){return isLeapYear(this.year())},proto.weekYear=function(input){return getSetWeekYearHelper.call(this,input,this.week(),this.weekday(),this.localeData()._week.dow,this.localeData()._week.doy)},proto.isoWeekYear=function(input){return getSetWeekYearHelper.call(this,input,this.isoWeek(),this.isoWeekday(),1,4)},proto.quarter=proto.quarters=function(input){return null==input?Math.ceil((this.month()+1)/3):this.month(3*(input-1)+this.month()%3)},proto.month=getSetMonth,proto.daysInMonth=function(){return daysInMonth(this.year(),this.month())},proto.week=proto.weeks=function(input){var week=this.localeData().week(this);return null==input?week:this.add(7*(input-week),"d")},proto.isoWeek=proto.isoWeeks=function(input){var week=weekOfYear(this,1,4).week;return null==input?week:this.add(7*(input-week),"d")},proto.weeksInYear=function(){var weekInfo=this.localeData()._week;return weeksInYear(this.year(),weekInfo.dow,weekInfo.doy)},proto.isoWeeksInYear=function(){return weeksInYear(this.year(),1,4)},proto.date=getSetDayOfMonth,proto.day=proto.days=function(input){if(!this.isValid())return null!=input?this:NaN;var day=this._isUTC?this._d.getUTCDay():this._d.getDay();return null!=input?(input=function(input,locale){return"string"!=typeof input?input:isNaN(input)?"number"==typeof(input=locale.weekdaysParse(input))?input:null:parseInt(input,10)}(input,this.localeData()),this.add(input-day,"d")):day},proto.weekday=function(input){if(!this.isValid())return null!=input?this:NaN;var weekday=(this.day()+7-this.localeData()._week.dow)%7;return null==input?weekday:this.add(input-weekday,"d")},proto.isoWeekday=function(input){if(!this.isValid())return null!=input?this:NaN;if(null!=input){var weekday=function(input,locale){return"string"==typeof input?locale.weekdaysParse(input)%7||7:isNaN(input)?null:input}(input,this.localeData());return this.day(this.day()%7?weekday:weekday-7)}return this.day()||7},proto.dayOfYear=function(input){var dayOfYear=Math.round((this.clone().startOf("day")-this.clone().startOf("year"))/864e5)+1;return null==input?dayOfYear:this.add(input-dayOfYear,"d")},proto.hour=proto.hours=getSetHour,proto.minute=proto.minutes=getSetMinute,proto.second=proto.seconds=getSetSecond,proto.millisecond=proto.milliseconds=getSetMillisecond,proto.utcOffset=function(input,keepLocalTime,keepMinutes){var localAdjust,offset=this._offset||0;if(!this.isValid())return null!=input?this:NaN;if(null!=input){if("string"==typeof input){if(null===(input=offsetFromString(matchShortOffset,input)))return this}else Math.abs(input)<16&&!keepMinutes&&(input*=60);return!this._isUTC&&keepLocalTime&&(localAdjust=getDateOffset(this)),this._offset=input,this._isUTC=!0,null!=localAdjust&&this.add(localAdjust,"m"),offset!==input&&(!keepLocalTime||this._changeInProgress?addSubtract(this,createDuration(input-offset,"m"),1,!1):this._changeInProgress||(this._changeInProgress=!0,hooks.updateOffset(this,!0),this._changeInProgress=null)),this}return this._isUTC?offset:getDateOffset(this)},proto.utc=function(keepLocalTime){return this.utcOffset(0,keepLocalTime)},proto.local=function(keepLocalTime){return this._isUTC&&(this.utcOffset(0,keepLocalTime),this._isUTC=!1,keepLocalTime&&this.subtract(getDateOffset(this),"m")),this},proto.parseZone=function(){if(null!=this._tzm)this.utcOffset(this._tzm,!1,!0);else if("string"==typeof this._i){var tZone=offsetFromString(matchOffset,this._i);null!=tZone?this.utcOffset(tZone):this.utcOffset(0,!0)}return this},proto.hasAlignedHourOffset=function(input){return!!this.isValid()&&(input=input?createLocal(input).utcOffset():0,(this.utcOffset()-input)%60==0)},proto.isDST=function(){return this.utcOffset()>this.clone().month(0).utcOffset()||this.utcOffset()>this.clone().month(5).utcOffset()},proto.isLocal=function(){return!!this.isValid()&&!this._isUTC},proto.isUtcOffset=function(){return!!this.isValid()&&this._isUTC},proto.isUtc=isUtc,proto.isUTC=isUtc,proto.zoneAbbr=function(){return this._isUTC?"UTC":""},proto.zoneName=function(){return this._isUTC?"Coordinated Universal Time":""},proto.dates=deprecate("dates accessor is deprecated. Use date instead.",getSetDayOfMonth),proto.months=deprecate("months accessor is deprecated. Use month instead",getSetMonth),proto.years=deprecate("years accessor is deprecated. Use year instead",getSetYear),proto.zone=deprecate("moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/",function(input,keepLocalTime){return null!=input?("string"!=typeof input&&(input=-input),this.utcOffset(input,keepLocalTime),this):-this.utcOffset()}),proto.isDSTShifted=deprecate("isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information",function(){if(!isUndefined(this._isDSTShifted))return this._isDSTShifted;var c={};if(copyConfig(c,this),(c=prepareConfig(c))._a){var other=c._isUTC?createUTC(c._a):createLocal(c._a);this._isDSTShifted=this.isValid()&&compareArrays(c._a,other.toArray())>0}else this._isDSTShifted=!1;return this._isDSTShifted});var proto$1=Locale.prototype;function get$1(format,index,field,setter){var locale=getLocale(),utc=createUTC().set(setter,index);return locale[field](utc,format)}function listMonthsImpl(format,index,field){if(isNumber(format)&&(index=format,format=void 0),format=format||"",null!=index)return get$1(format,index,field,"month");var i,out=[];for(i=0;i<12;i++)out[i]=get$1(format,i,field,"month");return out}function listWeekdaysImpl(localeSorted,format,index,field){"boolean"==typeof localeSorted?(isNumber(format)&&(index=format,format=void 0),format=format||""):(index=format=localeSorted,localeSorted=!1,isNumber(format)&&(index=format,format=void 0),format=format||"");var i,locale=getLocale(),shift=localeSorted?locale._week.dow:0;if(null!=index)return get$1(format,(index+shift)%7,field,"day");var out=[];for(i=0;i<7;i++)out[i]=get$1(format,(i+shift)%7,field,"day");return out}proto$1.calendar=function(key,mom,now){var output=this._calendar[key]||this._calendar.sameElse;return isFunction(output)?output.call(mom,now):output},proto$1.longDateFormat=function(key){var format=this._longDateFormat[key],formatUpper=this._longDateFormat[key.toUpperCase()];return format||!formatUpper?format:(this._longDateFormat[key]=formatUpper.replace(/MMMM|MM|DD|dddd/g,function(val){return val.slice(1)}),this._longDateFormat[key])},proto$1.invalidDate=function(){return this._invalidDate},proto$1.ordinal=function(number){return this._ordinal.replace("%d",number)},proto$1.preparse=preParsePostFormat,proto$1.postformat=preParsePostFormat,proto$1.relativeTime=function(number,withoutSuffix,string,isFuture){var output=this._relativeTime[string];return isFunction(output)?output(number,withoutSuffix,string,isFuture):output.replace(/%d/i,number)},proto$1.pastFuture=function(diff,output){var format=this._relativeTime[diff>0?"future":"past"];return isFunction(format)?format(output):format.replace(/%s/i,output)},proto$1.set=function(config){var prop,i;for(i in config)isFunction(prop=config[i])?this[i]=prop:this["_"+i]=prop;this._config=config,this._dayOfMonthOrdinalParseLenient=new RegExp((this._dayOfMonthOrdinalParse.source||this._ordinalParse.source)+"|"+/\d{1,2}/.source)},proto$1.months=function(m,format){return m?isArray(this._months)?this._months[m.month()]:this._months[(this._months.isFormat||MONTHS_IN_FORMAT).test(format)?"format":"standalone"][m.month()]:isArray(this._months)?this._months:this._months.standalone},proto$1.monthsShort=function(m,format){return m?isArray(this._monthsShort)?this._monthsShort[m.month()]:this._monthsShort[MONTHS_IN_FORMAT.test(format)?"format":"standalone"][m.month()]:isArray(this._monthsShort)?this._monthsShort:this._monthsShort.standalone},proto$1.monthsParse=function(monthName,format,strict){var i,mom,regex;if(this._monthsParseExact)return function(monthName,format,strict){var i,ii,mom,llc=monthName.toLocaleLowerCase();if(!this._monthsParse)for(this._monthsParse=[],this._longMonthsParse=[],this._shortMonthsParse=[],i=0;i<12;++i)mom=createUTC([2e3,i]),this._shortMonthsParse[i]=this.monthsShort(mom,"").toLocaleLowerCase(),this._longMonthsParse[i]=this.months(mom,"").toLocaleLowerCase();return strict?"MMM"===format?-1!==(ii=indexOf.call(this._shortMonthsParse,llc))?ii:null:-1!==(ii=indexOf.call(this._longMonthsParse,llc))?ii:null:"MMM"===format?-1!==(ii=indexOf.call(this._shortMonthsParse,llc))?ii:-1!==(ii=indexOf.call(this._longMonthsParse,llc))?ii:null:-1!==(ii=indexOf.call(this._longMonthsParse,llc))?ii:-1!==(ii=indexOf.call(this._shortMonthsParse,llc))?ii:null}.call(this,monthName,format,strict);for(this._monthsParse||(this._monthsParse=[],this._longMonthsParse=[],this._shortMonthsParse=[]),i=0;i<12;i++){if(mom=createUTC([2e3,i]),strict&&!this._longMonthsParse[i]&&(this._longMonthsParse[i]=new RegExp("^"+this.months(mom,"").replace(".","")+"$","i"),this._shortMonthsParse[i]=new RegExp("^"+this.monthsShort(mom,"").replace(".","")+"$","i")),strict||this._monthsParse[i]||(regex="^"+this.months(mom,"")+"|^"+this.monthsShort(mom,""),this._monthsParse[i]=new RegExp(regex.replace(".",""),"i")),strict&&"MMMM"===format&&this._longMonthsParse[i].test(monthName))return i;if(strict&&"MMM"===format&&this._shortMonthsParse[i].test(monthName))return i;if(!strict&&this._monthsParse[i].test(monthName))return i}},proto$1.monthsRegex=function(isStrict){return this._monthsParseExact?(hasOwnProp(this,"_monthsRegex")||computeMonthsParse.call(this),isStrict?this._monthsStrictRegex:this._monthsRegex):(hasOwnProp(this,"_monthsRegex")||(this._monthsRegex=defaultMonthsRegex),this._monthsStrictRegex&&isStrict?this._monthsStrictRegex:this._monthsRegex)},proto$1.monthsShortRegex=function(isStrict){return this._monthsParseExact?(hasOwnProp(this,"_monthsRegex")||computeMonthsParse.call(this),isStrict?this._monthsShortStrictRegex:this._monthsShortRegex):(hasOwnProp(this,"_monthsShortRegex")||(this._monthsShortRegex=defaultMonthsShortRegex),this._monthsShortStrictRegex&&isStrict?this._monthsShortStrictRegex:this._monthsShortRegex)},proto$1.week=function(mom){return weekOfYear(mom,this._week.dow,this._week.doy).week},proto$1.firstDayOfYear=function(){return this._week.doy},proto$1.firstDayOfWeek=function(){return this._week.dow},proto$1.weekdays=function(m,format){return m?isArray(this._weekdays)?this._weekdays[m.day()]:this._weekdays[this._weekdays.isFormat.test(format)?"format":"standalone"][m.day()]:isArray(this._weekdays)?this._weekdays:this._weekdays.standalone},proto$1.weekdaysMin=function(m){return m?this._weekdaysMin[m.day()]:this._weekdaysMin},proto$1.weekdaysShort=function(m){return m?this._weekdaysShort[m.day()]:this._weekdaysShort},proto$1.weekdaysParse=function(weekdayName,format,strict){var i,mom,regex;if(this._weekdaysParseExact)return function(weekdayName,format,strict){var i,ii,mom,llc=weekdayName.toLocaleLowerCase();if(!this._weekdaysParse)for(this._weekdaysParse=[],this._shortWeekdaysParse=[],this._minWeekdaysParse=[],i=0;i<7;++i)mom=createUTC([2e3,1]).day(i),this._minWeekdaysParse[i]=this.weekdaysMin(mom,"").toLocaleLowerCase(),this._shortWeekdaysParse[i]=this.weekdaysShort(mom,"").toLocaleLowerCase(),this._weekdaysParse[i]=this.weekdays(mom,"").toLocaleLowerCase();return strict?"dddd"===format?-1!==(ii=indexOf.call(this._weekdaysParse,llc))?ii:null:"ddd"===format?-1!==(ii=indexOf.call(this._shortWeekdaysParse,llc))?ii:null:-1!==(ii=indexOf.call(this._minWeekdaysParse,llc))?ii:null:"dddd"===format?-1!==(ii=indexOf.call(this._weekdaysParse,llc))?ii:-1!==(ii=indexOf.call(this._shortWeekdaysParse,llc))?ii:-1!==(ii=indexOf.call(this._minWeekdaysParse,llc))?ii:null:"ddd"===format?-1!==(ii=indexOf.call(this._shortWeekdaysParse,llc))?ii:-1!==(ii=indexOf.call(this._weekdaysParse,llc))?ii:-1!==(ii=indexOf.call(this._minWeekdaysParse,llc))?ii:null:-1!==(ii=indexOf.call(this._minWeekdaysParse,llc))?ii:-1!==(ii=indexOf.call(this._weekdaysParse,llc))?ii:-1!==(ii=indexOf.call(this._shortWeekdaysParse,llc))?ii:null}.call(this,weekdayName,format,strict);for(this._weekdaysParse||(this._weekdaysParse=[],this._minWeekdaysParse=[],this._shortWeekdaysParse=[],this._fullWeekdaysParse=[]),i=0;i<7;i++){if(mom=createUTC([2e3,1]).day(i),strict&&!this._fullWeekdaysParse[i]&&(this._fullWeekdaysParse[i]=new RegExp("^"+this.weekdays(mom,"").replace(".","\\.?")+"$","i"),this._shortWeekdaysParse[i]=new RegExp("^"+this.weekdaysShort(mom,"").replace(".","\\.?")+"$","i"),this._minWeekdaysParse[i]=new RegExp("^"+this.weekdaysMin(mom,"").replace(".","\\.?")+"$","i")),this._weekdaysParse[i]||(regex="^"+this.weekdays(mom,"")+"|^"+this.weekdaysShort(mom,"")+"|^"+this.weekdaysMin(mom,""),this._weekdaysParse[i]=new RegExp(regex.replace(".",""),"i")),strict&&"dddd"===format&&this._fullWeekdaysParse[i].test(weekdayName))return i;if(strict&&"ddd"===format&&this._shortWeekdaysParse[i].test(weekdayName))return i;if(strict&&"dd"===format&&this._minWeekdaysParse[i].test(weekdayName))return i;if(!strict&&this._weekdaysParse[i].test(weekdayName))return i}},proto$1.weekdaysRegex=function(isStrict){return this._weekdaysParseExact?(hasOwnProp(this,"_weekdaysRegex")||computeWeekdaysParse.call(this),isStrict?this._weekdaysStrictRegex:this._weekdaysRegex):(hasOwnProp(this,"_weekdaysRegex")||(this._weekdaysRegex=defaultWeekdaysRegex),this._weekdaysStrictRegex&&isStrict?this._weekdaysStrictRegex:this._weekdaysRegex)},proto$1.weekdaysShortRegex=function(isStrict){return this._weekdaysParseExact?(hasOwnProp(this,"_weekdaysRegex")||computeWeekdaysParse.call(this),isStrict?this._weekdaysShortStrictRegex:this._weekdaysShortRegex):(hasOwnProp(this,"_weekdaysShortRegex")||(this._weekdaysShortRegex=defaultWeekdaysShortRegex),this._weekdaysShortStrictRegex&&isStrict?this._weekdaysShortStrictRegex:this._weekdaysShortRegex)},proto$1.weekdaysMinRegex=function(isStrict){return this._weekdaysParseExact?(hasOwnProp(this,"_weekdaysRegex")||computeWeekdaysParse.call(this),isStrict?this._weekdaysMinStrictRegex:this._weekdaysMinRegex):(hasOwnProp(this,"_weekdaysMinRegex")||(this._weekdaysMinRegex=defaultWeekdaysMinRegex),this._weekdaysMinStrictRegex&&isStrict?this._weekdaysMinStrictRegex:this._weekdaysMinRegex)},proto$1.isPM=function(input){return"p"===(input+"").toLowerCase().charAt(0)},proto$1.meridiem=function(hours,minutes,isLower){return hours>11?isLower?"pm":"PM":isLower?"am":"AM"},getSetGlobalLocale("en",{dayOfMonthOrdinalParse:/\d{1,2}(th|st|nd|rd)/,ordinal:function(number){var b=number%10;return number+(1===toInt(number%100/10)?"th":1===b?"st":2===b?"nd":3===b?"rd":"th")}}),hooks.lang=deprecate("moment.lang is deprecated. Use moment.locale instead.",getSetGlobalLocale),hooks.langData=deprecate("moment.langData is deprecated. Use moment.localeData instead.",getLocale);var mathAbs=Math.abs;function addSubtract$1(duration,input,value,direction){var other=createDuration(input,value);return duration._milliseconds+=direction*other._milliseconds,duration._days+=direction*other._days,duration._months+=direction*other._months,duration._bubble()}function absCeil(number){return number<0?Math.floor(number):Math.ceil(number)}function daysToMonths(days){return 4800*days/146097}function monthsToDays(months){return 146097*months/4800}function makeAs(alias){return function(){return this.as(alias)}}var asMilliseconds=makeAs("ms"),asSeconds=makeAs("s"),asMinutes=makeAs("m"),asHours=makeAs("h"),asDays=makeAs("d"),asWeeks=makeAs("w"),asMonths=makeAs("M"),asYears=makeAs("y");function makeGetter(name){return function(){return this.isValid()?this._data[name]:NaN}}var milliseconds=makeGetter("milliseconds"),seconds=makeGetter("seconds"),minutes=makeGetter("minutes"),hours=makeGetter("hours"),days=makeGetter("days"),months=makeGetter("months"),years=makeGetter("years");var round=Math.round,thresholds={ss:44,s:45,m:45,h:22,d:26,M:11};var abs$1=Math.abs;function sign(x){return(x>0)-(x<0)||+x}function toISOString$1(){if(!this.isValid())return this.localeData().invalidDate();var minutes,hours,seconds=abs$1(this._milliseconds)/1e3,days=abs$1(this._days),months=abs$1(this._months);hours=absFloor((minutes=absFloor(seconds/60))/60),seconds%=60,minutes%=60;var Y=absFloor(months/12),M=months%=12,D=days,h=hours,m=minutes,s=seconds?seconds.toFixed(3).replace(/\.?0+$/,""):"",total=this.asSeconds();if(!total)return"P0D";var totalSign=total<0?"-":"",ymSign=sign(this._months)!==sign(total)?"-":"",daysSign=sign(this._days)!==sign(total)?"-":"",hmsSign=sign(this._milliseconds)!==sign(total)?"-":"";return totalSign+"P"+(Y?ymSign+Y+"Y":"")+(M?ymSign+M+"M":"")+(D?daysSign+D+"D":"")+(h||m||s?"T":"")+(h?hmsSign+h+"H":"")+(m?hmsSign+m+"M":"")+(s?hmsSign+s+"S":"")}var proto$2=Duration.prototype;return proto$2.isValid=function(){return this._isValid},proto$2.abs=function(){var data=this._data;return this._milliseconds=mathAbs(this._milliseconds),this._days=mathAbs(this._days),this._months=mathAbs(this._months),data.milliseconds=mathAbs(data.milliseconds),data.seconds=mathAbs(data.seconds),data.minutes=mathAbs(data.minutes),data.hours=mathAbs(data.hours),data.months=mathAbs(data.months),data.years=mathAbs(data.years),this},proto$2.add=function(input,value){return addSubtract$1(this,input,value,1)},proto$2.subtract=function(input,value){return addSubtract$1(this,input,value,-1)},proto$2.as=function(units){if(!this.isValid())return NaN;var days,months,milliseconds=this._milliseconds;if("month"===(units=normalizeUnits(units))||"year"===units)return days=this._days+milliseconds/864e5,months=this._months+daysToMonths(days),"month"===units?months:months/12;switch(days=this._days+Math.round(monthsToDays(this._months)),units){case"week":return days/7+milliseconds/6048e5;case"day":return days+milliseconds/864e5;case"hour":return 24*days+milliseconds/36e5;case"minute":return 1440*days+milliseconds/6e4;case"second":return 86400*days+milliseconds/1e3;case"millisecond":return Math.floor(864e5*days)+milliseconds;default:throw new Error("Unknown unit "+units)}},proto$2.asMilliseconds=asMilliseconds,proto$2.asSeconds=asSeconds,proto$2.asMinutes=asMinutes,proto$2.asHours=asHours,proto$2.asDays=asDays,proto$2.asWeeks=asWeeks,proto$2.asMonths=asMonths,proto$2.asYears=asYears,proto$2.valueOf=function(){return this.isValid()?this._milliseconds+864e5*this._days+this._months%12*2592e6+31536e6*toInt(this._months/12):NaN},proto$2._bubble=function(){var seconds,minutes,hours,years,monthsFromDays,milliseconds=this._milliseconds,days=this._days,months=this._months,data=this._data;return milliseconds>=0&&days>=0&&months>=0||milliseconds<=0&&days<=0&&months<=0||(milliseconds+=864e5*absCeil(monthsToDays(months)+days),days=0,months=0),data.milliseconds=milliseconds%1e3,seconds=absFloor(milliseconds/1e3),data.seconds=seconds%60,minutes=absFloor(seconds/60),data.minutes=minutes%60,hours=absFloor(minutes/60),data.hours=hours%24,months+=monthsFromDays=absFloor(daysToMonths(days+=absFloor(hours/24))),days-=absCeil(monthsToDays(monthsFromDays)),years=absFloor(months/12),months%=12,data.days=days,data.months=months,data.years=years,this},proto$2.clone=function(){return createDuration(this)},proto$2.get=function(units){return units=normalizeUnits(units),this.isValid()?this[units+"s"]():NaN},proto$2.milliseconds=milliseconds,proto$2.seconds=seconds,proto$2.minutes=minutes,proto$2.hours=hours,proto$2.days=days,proto$2.weeks=function(){return absFloor(this.days()/7)},proto$2.months=months,proto$2.years=years,proto$2.humanize=function(withSuffix){if(!this.isValid())return this.localeData().invalidDate();var locale=this.localeData(),output=function(posNegDuration,withoutSuffix,locale){var duration=createDuration(posNegDuration).abs(),seconds=round(duration.as("s")),minutes=round(duration.as("m")),hours=round(duration.as("h")),days=round(duration.as("d")),months=round(duration.as("M")),years=round(duration.as("y")),a=seconds<=thresholds.ss&&["s",seconds]||seconds<thresholds.s&&["ss",seconds]||minutes<=1&&["m"]||minutes<thresholds.m&&["mm",minutes]||hours<=1&&["h"]||hours<thresholds.h&&["hh",hours]||days<=1&&["d"]||days<thresholds.d&&["dd",days]||months<=1&&["M"]||months<thresholds.M&&["MM",months]||years<=1&&["y"]||["yy",years];return a[2]=withoutSuffix,a[3]=+posNegDuration>0,a[4]=locale,function(string,number,withoutSuffix,isFuture,locale){return locale.relativeTime(number||1,!!withoutSuffix,string,isFuture)}.apply(null,a)}(this,!withSuffix,locale);return withSuffix&&(output=locale.pastFuture(+this,output)),locale.postformat(output)},proto$2.toISOString=toISOString$1,proto$2.toString=toISOString$1,proto$2.toJSON=toISOString$1,proto$2.locale=locale,proto$2.localeData=localeData,proto$2.toIsoString=deprecate("toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)",toISOString$1),proto$2.lang=lang,addFormatToken("X",0,0,"unix"),addFormatToken("x",0,0,"valueOf"),addRegexToken("x",matchSigned),addRegexToken("X",/[+-]?\d+(\.\d{1,3})?/),addParseToken("X",function(input,array,config){config._d=new Date(1e3*parseFloat(input,10))}),addParseToken("x",function(input,array,config){config._d=new Date(toInt(input))}),hooks.version="2.22.2",hookCallback=createLocal,hooks.fn=proto,hooks.min=function(){return pickBy("isBefore",[].slice.call(arguments,0))},hooks.max=function(){return pickBy("isAfter",[].slice.call(arguments,0))},hooks.now=function(){return Date.now?Date.now():+new Date},hooks.utc=createUTC,hooks.unix=function(input){return createLocal(1e3*input)},hooks.months=function(format,index){return listMonthsImpl(format,index,"months")},hooks.isDate=isDate,hooks.locale=getSetGlobalLocale,hooks.invalid=createInvalid,hooks.duration=createDuration,hooks.isMoment=isMoment,hooks.weekdays=function(localeSorted,format,index){return listWeekdaysImpl(localeSorted,format,index,"weekdays")},hooks.parseZone=function(){return createLocal.apply(null,arguments).parseZone()},hooks.localeData=getLocale,hooks.isDuration=isDuration,hooks.monthsShort=function(format,index){return listMonthsImpl(format,index,"monthsShort")},hooks.weekdaysMin=function(localeSorted,format,index){return listWeekdaysImpl(localeSorted,format,index,"weekdaysMin")},hooks.defineLocale=defineLocale,hooks.updateLocale=function(name,config){if(null!=config){var locale,tmpLocale,parentConfig=baseConfig;null!=(tmpLocale=loadLocale(name))&&(parentConfig=tmpLocale._config),(locale=new Locale(config=mergeConfigs(parentConfig,config))).parentLocale=locales[name],locales[name]=locale,getSetGlobalLocale(name)}else null!=locales[name]&&(null!=locales[name].parentLocale?locales[name]=locales[name].parentLocale:null!=locales[name]&&delete locales[name]);return locales[name]},hooks.locales=function(){return keys(locales)},hooks.weekdaysShort=function(localeSorted,format,index){return listWeekdaysImpl(localeSorted,format,index,"weekdaysShort")},hooks.normalizeUnits=normalizeUnits,hooks.relativeTimeRounding=function(roundingFunction){return void 0===roundingFunction?round:"function"==typeof roundingFunction&&(round=roundingFunction,!0)},hooks.relativeTimeThreshold=function(threshold,limit){return void 0!==thresholds[threshold]&&(void 0===limit?thresholds[threshold]:(thresholds[threshold]=limit,"s"===threshold&&(thresholds.ss=limit-1),!0))},hooks.calendarFormat=function(myMoment,now){var diff=myMoment.diff(now,"days",!0);return diff<-6?"sameElse":diff<-1?"lastWeek":diff<0?"lastDay":diff<1?"sameDay":diff<2?"nextDay":diff<7?"nextWeek":"sameElse"},hooks.prototype=proto,hooks.HTML5_FMT={DATETIME_LOCAL:"YYYY-MM-DDTHH:mm",DATETIME_LOCAL_SECONDS:"YYYY-MM-DDTHH:mm:ss",DATETIME_LOCAL_MS:"YYYY-MM-DDTHH:mm:ss.SSS",DATE:"YYYY-MM-DD",TIME:"HH:mm",TIME_SECONDS:"HH:mm:ss",TIME_MS:"HH:mm:ss.SSS",WEEK:"YYYY-[W]WW",MONTH:"YYYY-MM"},hooks}),function(global,factory){"object"==typeof module&&"object"==typeof module.exports?module.exports=global.document?factory(global,!0):function(w){if(!w.document)throw new Error("jQuery requires a window with a document");return factory(w)}:factory(global)}("undefined"!=typeof window?window:this,function(window,noGlobal){var arr=[],document=window.document,getProto=Object.getPrototypeOf,slice=arr.slice,concat=arr.concat,push=arr.push,indexOf=arr.indexOf,class2type={},toString=class2type.toString,hasOwn=class2type.hasOwnProperty,fnToString=hasOwn.toString,ObjectFunctionString=fnToString.call(Object),support={},isFunction=function(obj){return"function"==typeof obj&&"number"!=typeof obj.nodeType},isWindow=function(obj){return null!=obj&&obj===obj.window},preservedScriptAttributes={type:!0,src:!0,noModule:!0};function DOMEval(code,doc,node){var i,script=(doc=doc||document).createElement("script");if(script.text=code,node)for(i in preservedScriptAttributes)node[i]&&(script[i]=node[i]);doc.head.appendChild(script).parentNode.removeChild(script)}function toType(obj){return null==obj?obj+"":"object"==typeof obj||"function"==typeof obj?class2type[toString.call(obj)]||"object":typeof obj}var jQuery=function(selector,context){return new jQuery.fn.init(selector,context)},rtrim=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;function isArrayLike(obj){var length=!!obj&&"length"in obj&&obj.length,type=toType(obj);return!isFunction(obj)&&!isWindow(obj)&&("array"===type||0===length||"number"==typeof length&&length>0&&length-1 in obj)}jQuery.fn=jQuery.prototype={jquery:"3.3.1",constructor:jQuery,length:0,toArray:function(){return slice.call(this)},get:function(num){return null==num?slice.call(this):num<0?this[num+this.length]:this[num]},pushStack:function(elems){var ret=jQuery.merge(this.constructor(),elems);return ret.prevObject=this,ret},each:function(callback){return jQuery.each(this,callback)},map:function(callback){return this.pushStack(jQuery.map(this,function(elem,i){return callback.call(elem,i,elem)}))},slice:function(){return this.pushStack(slice.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(i){var len=this.length,j=+i+(i<0?len:0);return this.pushStack(j>=0&&j<len?[this[j]]:[])},end:function(){return this.prevObject||this.constructor()},push:push,sort:arr.sort,splice:arr.splice},jQuery.extend=jQuery.fn.extend=function(){var options,name,src,copy,copyIsArray,clone,target=arguments[0]||{},i=1,length=arguments.length,deep=!1;for("boolean"==typeof target&&(deep=target,target=arguments[i]||{},i++),"object"==typeof target||isFunction(target)||(target={}),i===length&&(target=this,i--);i<length;i++)if(null!=(options=arguments[i]))for(name in options)src=target[name],target!==(copy=options[name])&&(deep&©&&(jQuery.isPlainObject(copy)||(copyIsArray=Array.isArray(copy)))?(copyIsArray?(copyIsArray=!1,clone=src&&Array.isArray(src)?src:[]):clone=src&&jQuery.isPlainObject(src)?src:{},target[name]=jQuery.extend(deep,clone,copy)):void 0!==copy&&(target[name]=copy));return target},jQuery.extend({expando:"jQuery"+("3.3.1"+Math.random()).replace(/\D/g,""),isReady:!0,error:function(msg){throw new Error(msg)},noop:function(){},isPlainObject:function(obj){var proto,Ctor;return!(!obj||"[object Object]"!==toString.call(obj))&&(!(proto=getProto(obj))||"function"==typeof(Ctor=hasOwn.call(proto,"constructor")&&proto.constructor)&&fnToString.call(Ctor)===ObjectFunctionString)},isEmptyObject:function(obj){var name;for(name in obj)return!1;return!0},globalEval:function(code){DOMEval(code)},each:function(obj,callback){var length,i=0;if(isArrayLike(obj))for(length=obj.length;i<length&&!1!==callback.call(obj[i],i,obj[i]);i++);else for(i in obj)if(!1===callback.call(obj[i],i,obj[i]))break;return obj},trim:function(text){return null==text?"":(text+"").replace(rtrim,"")},makeArray:function(arr,results){var ret=results||[];return null!=arr&&(isArrayLike(Object(arr))?jQuery.merge(ret,"string"==typeof arr?[arr]:arr):push.call(ret,arr)),ret},inArray:function(elem,arr,i){return null==arr?-1:indexOf.call(arr,elem,i)},merge:function(first,second){for(var len=+second.length,j=0,i=first.length;j<len;j++)first[i++]=second[j];return first.length=i,first},grep:function(elems,callback,invert){for(var matches=[],i=0,length=elems.length,callbackExpect=!invert;i<length;i++)!callback(elems[i],i)!==callbackExpect&&matches.push(elems[i]);return matches},map:function(elems,callback,arg){var length,value,i=0,ret=[];if(isArrayLike(elems))for(length=elems.length;i<length;i++)null!=(value=callback(elems[i],i,arg))&&ret.push(value);else for(i in elems)null!=(value=callback(elems[i],i,arg))&&ret.push(value);return concat.apply([],ret)},guid:1,support:support}),"function"==typeof Symbol&&(jQuery.fn[Symbol.iterator]=arr[Symbol.iterator]),jQuery.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "),function(i,name){class2type["[object "+name+"]"]=name.toLowerCase()});var Sizzle=function(window){var i,support,Expr,getText,isXML,tokenize,compile,select,outermostContext,sortInput,hasDuplicate,setDocument,document,docElem,documentIsHTML,rbuggyQSA,rbuggyMatches,matches,contains,expando="sizzle"+1*new Date,preferredDoc=window.document,dirruns=0,done=0,classCache=createCache(),tokenCache=createCache(),compilerCache=createCache(),sortOrder=function(a,b){return a===b&&(hasDuplicate=!0),0},hasOwn={}.hasOwnProperty,arr=[],pop=arr.pop,push_native=arr.push,push=arr.push,slice=arr.slice,indexOf=function(list,elem){for(var i=0,len=list.length;i<len;i++)if(list[i]===elem)return i;return-1},booleans="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",whitespace="[\\x20\\t\\r\\n\\f]",identifier="(?:\\\\.|[\\w-]|[^\0-\\xa0])+",attributes="\\["+whitespace+"*("+identifier+")(?:"+whitespace+"*([*^$|!~]?=)"+whitespace+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+identifier+"))|)"+whitespace+"*\\]",pseudos=":("+identifier+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+attributes+")*)|.*)\\)|)",rwhitespace=new RegExp(whitespace+"+","g"),rtrim=new RegExp("^"+whitespace+"+|((?:^|[^\\\\])(?:\\\\.)*)"+whitespace+"+$","g"),rcomma=new RegExp("^"+whitespace+"*,"+whitespace+"*"),rcombinators=new RegExp("^"+whitespace+"*([>+~]|"+whitespace+")"+whitespace+"*"),rattributeQuotes=new RegExp("="+whitespace+"*([^\\]'\"]*?)"+whitespace+"*\\]","g"),rpseudo=new RegExp(pseudos),ridentifier=new RegExp("^"+identifier+"$"),matchExpr={ID:new RegExp("^#("+identifier+")"),CLASS:new RegExp("^\\.("+identifier+")"),TAG:new RegExp("^("+identifier+"|[*])"),ATTR:new RegExp("^"+attributes),PSEUDO:new RegExp("^"+pseudos),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+whitespace+"*(even|odd|(([+-]|)(\\d*)n|)"+whitespace+"*(?:([+-]|)"+whitespace+"*(\\d+)|))"+whitespace+"*\\)|)","i"),bool:new RegExp("^(?:"+booleans+")$","i"),needsContext:new RegExp("^"+whitespace+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+whitespace+"*((?:-\\d)?\\d*)"+whitespace+"*\\)|)(?=[^-]|$)","i")},rinputs=/^(?:input|select|textarea|button)$/i,rheader=/^h\d$/i,rnative=/^[^{]+\{\s*\[native \w/,rquickExpr=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,rsibling=/[+~]/,runescape=new RegExp("\\\\([\\da-f]{1,6}"+whitespace+"?|("+whitespace+")|.)","ig"),funescape=function(_,escaped,escapedWhitespace){var high="0x"+escaped-65536;return high!=high||escapedWhitespace?escaped:high<0?String.fromCharCode(high+65536):String.fromCharCode(high>>10|55296,1023&high|56320)},rcssescape=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,fcssescape=function(ch,asCodePoint){return asCodePoint?"\0"===ch?"�":ch.slice(0,-1)+"\\"+ch.charCodeAt(ch.length-1).toString(16)+" ":"\\"+ch},unloadHandler=function(){setDocument()},disabledAncestor=addCombinator(function(elem){return!0===elem.disabled&&("form"in elem||"label"in elem)},{dir:"parentNode",next:"legend"});try{push.apply(arr=slice.call(preferredDoc.childNodes),preferredDoc.childNodes),arr[preferredDoc.childNodes.length].nodeType}catch(e){push={apply:arr.length?function(target,els){push_native.apply(target,slice.call(els))}:function(target,els){for(var j=target.length,i=0;target[j++]=els[i++];);target.length=j-1}}}function Sizzle(selector,context,results,seed){var m,i,elem,nid,match,groups,newSelector,newContext=context&&context.ownerDocument,nodeType=context?context.nodeType:9;if(results=results||[],"string"!=typeof selector||!selector||1!==nodeType&&9!==nodeType&&11!==nodeType)return results;if(!seed&&((context?context.ownerDocument||context:preferredDoc)!==document&&setDocument(context),context=context||document,documentIsHTML)){if(11!==nodeType&&(match=rquickExpr.exec(selector)))if(m=match[1]){if(9===nodeType){if(!(elem=context.getElementById(m)))return results;if(elem.id===m)return results.push(elem),results}else if(newContext&&(elem=newContext.getElementById(m))&&contains(context,elem)&&elem.id===m)return results.push(elem),results}else{if(match[2])return push.apply(results,context.getElementsByTagName(selector)),results;if((m=match[3])&&support.getElementsByClassName&&context.getElementsByClassName)return push.apply(results,context.getElementsByClassName(m)),results}if(support.qsa&&!compilerCache[selector+" "]&&(!rbuggyQSA||!rbuggyQSA.test(selector))){if(1!==nodeType)newContext=context,newSelector=selector;else if("object"!==context.nodeName.toLowerCase()){for((nid=context.getAttribute("id"))?nid=nid.replace(rcssescape,fcssescape):context.setAttribute("id",nid=expando),i=(groups=tokenize(selector)).length;i--;)groups[i]="#"+nid+" "+toSelector(groups[i]);newSelector=groups.join(","),newContext=rsibling.test(selector)&&testContext(context.parentNode)||context}if(newSelector)try{return push.apply(results,newContext.querySelectorAll(newSelector)),results}catch(qsaError){}finally{nid===expando&&context.removeAttribute("id")}}}return select(selector.replace(rtrim,"$1"),context,results,seed)}function createCache(){var keys=[];return function cache(key,value){return keys.push(key+" ")>Expr.cacheLength&&delete cache[keys.shift()],cache[key+" "]=value}}function markFunction(fn){return fn[expando]=!0,fn}function assert(fn){var el=document.createElement("fieldset");try{return!!fn(el)}catch(e){return!1}finally{el.parentNode&&el.parentNode.removeChild(el),el=null}}function addHandle(attrs,handler){for(var arr=attrs.split("|"),i=arr.length;i--;)Expr.attrHandle[arr[i]]=handler}function siblingCheck(a,b){var cur=b&&a,diff=cur&&1===a.nodeType&&1===b.nodeType&&a.sourceIndex-b.sourceIndex;if(diff)return diff;if(cur)for(;cur=cur.nextSibling;)if(cur===b)return-1;return a?1:-1}function createInputPseudo(type){return function(elem){return"input"===elem.nodeName.toLowerCase()&&elem.type===type}}function createButtonPseudo(type){return function(elem){var name=elem.nodeName.toLowerCase();return("input"===name||"button"===name)&&elem.type===type}}function createDisabledPseudo(disabled){return function(elem){return"form"in elem?elem.parentNode&&!1===elem.disabled?"label"in elem?"label"in elem.parentNode?elem.parentNode.disabled===disabled:elem.disabled===disabled:elem.isDisabled===disabled||elem.isDisabled!==!disabled&&disabledAncestor(elem)===disabled:elem.disabled===disabled:"label"in elem&&elem.disabled===disabled}}function createPositionalPseudo(fn){return markFunction(function(argument){return argument=+argument,markFunction(function(seed,matches){for(var j,matchIndexes=fn([],seed.length,argument),i=matchIndexes.length;i--;)seed[j=matchIndexes[i]]&&(seed[j]=!(matches[j]=seed[j]))})})}function testContext(context){return context&&void 0!==context.getElementsByTagName&&context}for(i in support=Sizzle.support={},isXML=Sizzle.isXML=function(elem){var documentElement=elem&&(elem.ownerDocument||elem).documentElement;return!!documentElement&&"HTML"!==documentElement.nodeName},setDocument=Sizzle.setDocument=function(node){var hasCompare,subWindow,doc=node?node.ownerDocument||node:preferredDoc;return doc!==document&&9===doc.nodeType&&doc.documentElement?(docElem=(document=doc).documentElement,documentIsHTML=!isXML(document),preferredDoc!==document&&(subWindow=document.defaultView)&&subWindow.top!==subWindow&&(subWindow.addEventListener?subWindow.addEventListener("unload",unloadHandler,!1):subWindow.attachEvent&&subWindow.attachEvent("onunload",unloadHandler)),support.attributes=assert(function(el){return el.className="i",!el.getAttribute("className")}),support.getElementsByTagName=assert(function(el){return el.appendChild(document.createComment("")),!el.getElementsByTagName("*").length}),support.getElementsByClassName=rnative.test(document.getElementsByClassName),support.getById=assert(function(el){return docElem.appendChild(el).id=expando,!document.getElementsByName||!document.getElementsByName(expando).length}),support.getById?(Expr.filter.ID=function(id){var attrId=id.replace(runescape,funescape);return function(elem){return elem.getAttribute("id")===attrId}},Expr.find.ID=function(id,context){if(void 0!==context.getElementById&&documentIsHTML){var elem=context.getElementById(id);return elem?[elem]:[]}}):(Expr.filter.ID=function(id){var attrId=id.replace(runescape,funescape);return function(elem){var node=void 0!==elem.getAttributeNode&&elem.getAttributeNode("id");return node&&node.value===attrId}},Expr.find.ID=function(id,context){if(void 0!==context.getElementById&&documentIsHTML){var node,i,elems,elem=context.getElementById(id);if(elem){if((node=elem.getAttributeNode("id"))&&node.value===id)return[elem];for(elems=context.getElementsByName(id),i=0;elem=elems[i++];)if((node=elem.getAttributeNode("id"))&&node.value===id)return[elem]}return[]}}),Expr.find.TAG=support.getElementsByTagName?function(tag,context){return void 0!==context.getElementsByTagName?context.getElementsByTagName(tag):support.qsa?context.querySelectorAll(tag):void 0}:function(tag,context){var elem,tmp=[],i=0,results=context.getElementsByTagName(tag);if("*"===tag){for(;elem=results[i++];)1===elem.nodeType&&tmp.push(elem);return tmp}return results},Expr.find.CLASS=support.getElementsByClassName&&function(className,context){if(void 0!==context.getElementsByClassName&&documentIsHTML)return context.getElementsByClassName(className)},rbuggyMatches=[],rbuggyQSA=[],(support.qsa=rnative.test(document.querySelectorAll))&&(assert(function(el){docElem.appendChild(el).innerHTML="<a id='"+expando+"'></a><select id='"+expando+"-\r\\' msallowcapture=''><option selected=''></option></select>",el.querySelectorAll("[msallowcapture^='']").length&&rbuggyQSA.push("[*^$]="+whitespace+"*(?:''|\"\")"),el.querySelectorAll("[selected]").length||rbuggyQSA.push("\\["+whitespace+"*(?:value|"+booleans+")"),el.querySelectorAll("[id~="+expando+"-]").length||rbuggyQSA.push("~="),el.querySelectorAll(":checked").length||rbuggyQSA.push(":checked"),el.querySelectorAll("a#"+expando+"+*").length||rbuggyQSA.push(".#.+[+~]")}),assert(function(el){el.innerHTML="<a href='' disabled='disabled'></a><select disabled='disabled'><option/></select>";var input=document.createElement("input");input.setAttribute("type","hidden"),el.appendChild(input).setAttribute("name","D"),el.querySelectorAll("[name=d]").length&&rbuggyQSA.push("name"+whitespace+"*[*^$|!~]?="),2!==el.querySelectorAll(":enabled").length&&rbuggyQSA.push(":enabled",":disabled"),docElem.appendChild(el).disabled=!0,2!==el.querySelectorAll(":disabled").length&&rbuggyQSA.push(":enabled",":disabled"),el.querySelectorAll("*,:x"),rbuggyQSA.push(",.*:")})),(support.matchesSelector=rnative.test(matches=docElem.matches||docElem.webkitMatchesSelector||docElem.mozMatchesSelector||docElem.oMatchesSelector||docElem.msMatchesSelector))&&assert(function(el){support.disconnectedMatch=matches.call(el,"*"),matches.call(el,"[s!='']:x"),rbuggyMatches.push("!=",pseudos)}),rbuggyQSA=rbuggyQSA.length&&new RegExp(rbuggyQSA.join("|")),rbuggyMatches=rbuggyMatches.length&&new RegExp(rbuggyMatches.join("|")),hasCompare=rnative.test(docElem.compareDocumentPosition),contains=hasCompare||rnative.test(docElem.contains)?function(a,b){var adown=9===a.nodeType?a.documentElement:a,bup=b&&b.parentNode;return a===bup||!(!bup||1!==bup.nodeType||!(adown.contains?adown.contains(bup):a.compareDocumentPosition&&16&a.compareDocumentPosition(bup)))}:function(a,b){if(b)for(;b=b.parentNode;)if(b===a)return!0;return!1},sortOrder=hasCompare?function(a,b){if(a===b)return hasDuplicate=!0,0;var compare=!a.compareDocumentPosition-!b.compareDocumentPosition;return compare||(1&(compare=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1)||!support.sortDetached&&b.compareDocumentPosition(a)===compare?a===document||a.ownerDocument===preferredDoc&&contains(preferredDoc,a)?-1:b===document||b.ownerDocument===preferredDoc&&contains(preferredDoc,b)?1:sortInput?indexOf(sortInput,a)-indexOf(sortInput,b):0:4&compare?-1:1)}:function(a,b){if(a===b)return hasDuplicate=!0,0;var cur,i=0,aup=a.parentNode,bup=b.parentNode,ap=[a],bp=[b];if(!aup||!bup)return a===document?-1:b===document?1:aup?-1:bup?1:sortInput?indexOf(sortInput,a)-indexOf(sortInput,b):0;if(aup===bup)return siblingCheck(a,b);for(cur=a;cur=cur.parentNode;)ap.unshift(cur);for(cur=b;cur=cur.parentNode;)bp.unshift(cur);for(;ap[i]===bp[i];)i++;return i?siblingCheck(ap[i],bp[i]):ap[i]===preferredDoc?-1:bp[i]===preferredDoc?1:0},document):document},Sizzle.matches=function(expr,elements){return Sizzle(expr,null,null,elements)},Sizzle.matchesSelector=function(elem,expr){if((elem.ownerDocument||elem)!==document&&setDocument(elem),expr=expr.replace(rattributeQuotes,"='$1']"),support.matchesSelector&&documentIsHTML&&!compilerCache[expr+" "]&&(!rbuggyMatches||!rbuggyMatches.test(expr))&&(!rbuggyQSA||!rbuggyQSA.test(expr)))try{var ret=matches.call(elem,expr);if(ret||support.disconnectedMatch||elem.document&&11!==elem.document.nodeType)return ret}catch(e){}return Sizzle(expr,document,null,[elem]).length>0},Sizzle.contains=function(context,elem){return(context.ownerDocument||context)!==document&&setDocument(context),contains(context,elem)},Sizzle.attr=function(elem,name){(elem.ownerDocument||elem)!==document&&setDocument(elem);var fn=Expr.attrHandle[name.toLowerCase()],val=fn&&hasOwn.call(Expr.attrHandle,name.toLowerCase())?fn(elem,name,!documentIsHTML):void 0;return void 0!==val?val:support.attributes||!documentIsHTML?elem.getAttribute(name):(val=elem.getAttributeNode(name))&&val.specified?val.value:null},Sizzle.escape=function(sel){return(sel+"").replace(rcssescape,fcssescape)},Sizzle.error=function(msg){throw new Error("Syntax error, unrecognized expression: "+msg)},Sizzle.uniqueSort=function(results){var elem,duplicates=[],j=0,i=0;if(hasDuplicate=!support.detectDuplicates,sortInput=!support.sortStable&&results.slice(0),results.sort(sortOrder),hasDuplicate){for(;elem=results[i++];)elem===results[i]&&(j=duplicates.push(i));for(;j--;)results.splice(duplicates[j],1)}return sortInput=null,results},getText=Sizzle.getText=function(elem){var node,ret="",i=0,nodeType=elem.nodeType;if(nodeType){if(1===nodeType||9===nodeType||11===nodeType){if("string"==typeof elem.textContent)return elem.textContent;for(elem=elem.firstChild;elem;elem=elem.nextSibling)ret+=getText(elem)}else if(3===nodeType||4===nodeType)return elem.nodeValue}else for(;node=elem[i++];)ret+=getText(node);return ret},(Expr=Sizzle.selectors={cacheLength:50,createPseudo:markFunction,match:matchExpr,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(match){return match[1]=match[1].replace(runescape,funescape),match[3]=(match[3]||match[4]||match[5]||"").replace(runescape,funescape),"~="===match[2]&&(match[3]=" "+match[3]+" "),match.slice(0,4)},CHILD:function(match){return match[1]=match[1].toLowerCase(),"nth"===match[1].slice(0,3)?(match[3]||Sizzle.error(match[0]),match[4]=+(match[4]?match[5]+(match[6]||1):2*("even"===match[3]||"odd"===match[3])),match[5]=+(match[7]+match[8]||"odd"===match[3])):match[3]&&Sizzle.error(match[0]),match},PSEUDO:function(match){var excess,unquoted=!match[6]&&match[2];return matchExpr.CHILD.test(match[0])?null:(match[3]?match[2]=match[4]||match[5]||"":unquoted&&rpseudo.test(unquoted)&&(excess=tokenize(unquoted,!0))&&(excess=unquoted.indexOf(")",unquoted.length-excess)-unquoted.length)&&(match[0]=match[0].slice(0,excess),match[2]=unquoted.slice(0,excess)),match.slice(0,3))}},filter:{TAG:function(nodeNameSelector){var nodeName=nodeNameSelector.replace(runescape,funescape).toLowerCase();return"*"===nodeNameSelector?function(){return!0}:function(elem){return elem.nodeName&&elem.nodeName.toLowerCase()===nodeName}},CLASS:function(className){var pattern=classCache[className+" "];return pattern||(pattern=new RegExp("(^|"+whitespace+")"+className+"("+whitespace+"|$)"))&&classCache(className,function(elem){return pattern.test("string"==typeof elem.className&&elem.className||void 0!==elem.getAttribute&&elem.getAttribute("class")||"")})},ATTR:function(name,operator,check){return function(elem){var result=Sizzle.attr(elem,name);return null==result?"!="===operator:!operator||(result+="","="===operator?result===check:"!="===operator?result!==check:"^="===operator?check&&0===result.indexOf(check):"*="===operator?check&&result.indexOf(check)>-1:"$="===operator?check&&result.slice(-check.length)===check:"~="===operator?(" "+result.replace(rwhitespace," ")+" ").indexOf(check)>-1:"|="===operator&&(result===check||result.slice(0,check.length+1)===check+"-"))}},CHILD:function(type,what,argument,first,last){var simple="nth"!==type.slice(0,3),forward="last"!==type.slice(-4),ofType="of-type"===what;return 1===first&&0===last?function(elem){return!!elem.parentNode}:function(elem,context,xml){var cache,uniqueCache,outerCache,node,nodeIndex,start,dir=simple!==forward?"nextSibling":"previousSibling",parent=elem.parentNode,name=ofType&&elem.nodeName.toLowerCase(),useCache=!xml&&!ofType,diff=!1;if(parent){if(simple){for(;dir;){for(node=elem;node=node[dir];)if(ofType?node.nodeName.toLowerCase()===name:1===node.nodeType)return!1;start=dir="only"===type&&!start&&"nextSibling"}return!0}if(start=[forward?parent.firstChild:parent.lastChild],forward&&useCache){for(diff=(nodeIndex=(cache=(uniqueCache=(outerCache=(node=parent)[expando]||(node[expando]={}))[node.uniqueID]||(outerCache[node.uniqueID]={}))[type]||[])[0]===dirruns&&cache[1])&&cache[2],node=nodeIndex&&parent.childNodes[nodeIndex];node=++nodeIndex&&node&&node[dir]||(diff=nodeIndex=0)||start.pop();)if(1===node.nodeType&&++diff&&node===elem){uniqueCache[type]=[dirruns,nodeIndex,diff];break}}else if(useCache&&(diff=nodeIndex=(cache=(uniqueCache=(outerCache=(node=elem)[expando]||(node[expando]={}))[node.uniqueID]||(outerCache[node.uniqueID]={}))[type]||[])[0]===dirruns&&cache[1]),!1===diff)for(;(node=++nodeIndex&&node&&node[dir]||(diff=nodeIndex=0)||start.pop())&&((ofType?node.nodeName.toLowerCase()!==name:1!==node.nodeType)||!++diff||(useCache&&((uniqueCache=(outerCache=node[expando]||(node[expando]={}))[node.uniqueID]||(outerCache[node.uniqueID]={}))[type]=[dirruns,diff]),node!==elem)););return(diff-=last)===first||diff%first==0&&diff/first>=0}}},PSEUDO:function(pseudo,argument){var args,fn=Expr.pseudos[pseudo]||Expr.setFilters[pseudo.toLowerCase()]||Sizzle.error("unsupported pseudo: "+pseudo);return fn[expando]?fn(argument):fn.length>1?(args=[pseudo,pseudo,"",argument],Expr.setFilters.hasOwnProperty(pseudo.toLowerCase())?markFunction(function(seed,matches){for(var idx,matched=fn(seed,argument),i=matched.length;i--;)seed[idx=indexOf(seed,matched[i])]=!(matches[idx]=matched[i])}):function(elem){return fn(elem,0,args)}):fn}},pseudos:{not:markFunction(function(selector){var input=[],results=[],matcher=compile(selector.replace(rtrim,"$1"));return matcher[expando]?markFunction(function(seed,matches,context,xml){for(var elem,unmatched=matcher(seed,null,xml,[]),i=seed.length;i--;)(elem=unmatched[i])&&(seed[i]=!(matches[i]=elem))}):function(elem,context,xml){return input[0]=elem,matcher(input,null,xml,results),input[0]=null,!results.pop()}}),has:markFunction(function(selector){return function(elem){return Sizzle(selector,elem).length>0}}),contains:markFunction(function(text){return text=text.replace(runescape,funescape),function(elem){return(elem.textContent||elem.innerText||getText(elem)).indexOf(text)>-1}}),lang:markFunction(function(lang){return ridentifier.test(lang||"")||Sizzle.error("unsupported lang: "+lang),lang=lang.replace(runescape,funescape).toLowerCase(),function(elem){var elemLang;do{if(elemLang=documentIsHTML?elem.lang:elem.getAttribute("xml:lang")||elem.getAttribute("lang"))return(elemLang=elemLang.toLowerCase())===lang||0===elemLang.indexOf(lang+"-")}while((elem=elem.parentNode)&&1===elem.nodeType);return!1}}),target:function(elem){var hash=window.location&&window.location.hash;return hash&&hash.slice(1)===elem.id},root:function(elem){return elem===docElem},focus:function(elem){return elem===document.activeElement&&(!document.hasFocus||document.hasFocus())&&!!(elem.type||elem.href||~elem.tabIndex)},enabled:createDisabledPseudo(!1),disabled:createDisabledPseudo(!0),checked:function(elem){var nodeName=elem.nodeName.toLowerCase();return"input"===nodeName&&!!elem.checked||"option"===nodeName&&!!elem.selected},selected:function(elem){return elem.parentNode&&elem.parentNode.selectedIndex,!0===elem.selected},empty:function(elem){for(elem=elem.firstChild;elem;elem=elem.nextSibling)if(elem.nodeType<6)return!1;return!0},parent:function(elem){return!Expr.pseudos.empty(elem)},header:function(elem){return rheader.test(elem.nodeName)},input:function(elem){return rinputs.test(elem.nodeName)},button:function(elem){var name=elem.nodeName.toLowerCase();return"input"===name&&"button"===elem.type||"button"===name},text:function(elem){var attr;return"input"===elem.nodeName.toLowerCase()&&"text"===elem.type&&(null==(attr=elem.getAttribute("type"))||"text"===attr.toLowerCase())},first:createPositionalPseudo(function(){return[0]}),last:createPositionalPseudo(function(matchIndexes,length){return[length-1]}),eq:createPositionalPseudo(function(matchIndexes,length,argument){return[argument<0?argument+length:argument]}),even:createPositionalPseudo(function(matchIndexes,length){for(var i=0;i<length;i+=2)matchIndexes.push(i);return matchIndexes}),odd:createPositionalPseudo(function(matchIndexes,length){for(var i=1;i<length;i+=2)matchIndexes.push(i);return matchIndexes}),lt:createPositionalPseudo(function(matchIndexes,length,argument){for(var i=argument<0?argument+length:argument;--i>=0;)matchIndexes.push(i);return matchIndexes}),gt:createPositionalPseudo(function(matchIndexes,length,argument){for(var i=argument<0?argument+length:argument;++i<length;)matchIndexes.push(i);return matchIndexes})}}).pseudos.nth=Expr.pseudos.eq,{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})Expr.pseudos[i]=createInputPseudo(i);for(i in{submit:!0,reset:!0})Expr.pseudos[i]=createButtonPseudo(i);function setFilters(){}function toSelector(tokens){for(var i=0,len=tokens.length,selector="";i<len;i++)selector+=tokens[i].value;return selector}function addCombinator(matcher,combinator,base){var dir=combinator.dir,skip=combinator.next,key=skip||dir,checkNonElements=base&&"parentNode"===key,doneName=done++;return combinator.first?function(elem,context,xml){for(;elem=elem[dir];)if(1===elem.nodeType||checkNonElements)return matcher(elem,context,xml);return!1}:function(elem,context,xml){var oldCache,uniqueCache,outerCache,newCache=[dirruns,doneName];if(xml){for(;elem=elem[dir];)if((1===elem.nodeType||checkNonElements)&&matcher(elem,context,xml))return!0}else for(;elem=elem[dir];)if(1===elem.nodeType||checkNonElements)if(uniqueCache=(outerCache=elem[expando]||(elem[expando]={}))[elem.uniqueID]||(outerCache[elem.uniqueID]={}),skip&&skip===elem.nodeName.toLowerCase())elem=elem[dir]||elem;else{if((oldCache=uniqueCache[key])&&oldCache[0]===dirruns&&oldCache[1]===doneName)return newCache[2]=oldCache[2];if(uniqueCache[key]=newCache,newCache[2]=matcher(elem,context,xml))return!0}return!1}}function elementMatcher(matchers){return matchers.length>1?function(elem,context,xml){for(var i=matchers.length;i--;)if(!matchers[i](elem,context,xml))return!1;return!0}:matchers[0]}function condense(unmatched,map,filter,context,xml){for(var elem,newUnmatched=[],i=0,len=unmatched.length,mapped=null!=map;i<len;i++)(elem=unmatched[i])&&(filter&&!filter(elem,context,xml)||(newUnmatched.push(elem),mapped&&map.push(i)));return newUnmatched}function setMatcher(preFilter,selector,matcher,postFilter,postFinder,postSelector){return postFilter&&!postFilter[expando]&&(postFilter=setMatcher(postFilter)),postFinder&&!postFinder[expando]&&(postFinder=setMatcher(postFinder,postSelector)),markFunction(function(seed,results,context,xml){var temp,i,elem,preMap=[],postMap=[],preexisting=results.length,elems=seed||function(selector,contexts,results){for(var i=0,len=contexts.length;i<len;i++)Sizzle(selector,contexts[i],results);return results}(selector||"*",context.nodeType?[context]:context,[]),matcherIn=!preFilter||!seed&&selector?elems:condense(elems,preMap,preFilter,context,xml),matcherOut=matcher?postFinder||(seed?preFilter:preexisting||postFilter)?[]:results:matcherIn;if(matcher&&matcher(matcherIn,matcherOut,context,xml),postFilter)for(temp=condense(matcherOut,postMap),postFilter(temp,[],context,xml),i=temp.length;i--;)(elem=temp[i])&&(matcherOut[postMap[i]]=!(matcherIn[postMap[i]]=elem));if(seed){if(postFinder||preFilter){if(postFinder){for(temp=[],i=matcherOut.length;i--;)(elem=matcherOut[i])&&temp.push(matcherIn[i]=elem);postFinder(null,matcherOut=[],temp,xml)}for(i=matcherOut.length;i--;)(elem=matcherOut[i])&&(temp=postFinder?indexOf(seed,elem):preMap[i])>-1&&(seed[temp]=!(results[temp]=elem))}}else matcherOut=condense(matcherOut===results?matcherOut.splice(preexisting,matcherOut.length):matcherOut),postFinder?postFinder(null,results,matcherOut,xml):push.apply(results,matcherOut)})}function matcherFromTokens(tokens){for(var checkContext,matcher,j,len=tokens.length,leadingRelative=Expr.relative[tokens[0].type],implicitRelative=leadingRelative||Expr.relative[" "],i=leadingRelative?1:0,matchContext=addCombinator(function(elem){return elem===checkContext},implicitRelative,!0),matchAnyContext=addCombinator(function(elem){return indexOf(checkContext,elem)>-1},implicitRelative,!0),matchers=[function(elem,context,xml){var ret=!leadingRelative&&(xml||context!==outermostContext)||((checkContext=context).nodeType?matchContext(elem,context,xml):matchAnyContext(elem,context,xml));return checkContext=null,ret}];i<len;i++)if(matcher=Expr.relative[tokens[i].type])matchers=[addCombinator(elementMatcher(matchers),matcher)];else{if((matcher=Expr.filter[tokens[i].type].apply(null,tokens[i].matches))[expando]){for(j=++i;j<len&&!Expr.relative[tokens[j].type];j++);return setMatcher(i>1&&elementMatcher(matchers),i>1&&toSelector(tokens.slice(0,i-1).concat({value:" "===tokens[i-2].type?"*":""})).replace(rtrim,"$1"),matcher,i<j&&matcherFromTokens(tokens.slice(i,j)),j<len&&matcherFromTokens(tokens=tokens.slice(j)),j<len&&toSelector(tokens))}matchers.push(matcher)}return elementMatcher(matchers)}return setFilters.prototype=Expr.filters=Expr.pseudos,Expr.setFilters=new setFilters,tokenize=Sizzle.tokenize=function(selector,parseOnly){var matched,match,tokens,type,soFar,groups,preFilters,cached=tokenCache[selector+" "];if(cached)return parseOnly?0:cached.slice(0);for(soFar=selector,groups=[],preFilters=Expr.preFilter;soFar;){for(type in matched&&!(match=rcomma.exec(soFar))||(match&&(soFar=soFar.slice(match[0].length)||soFar),groups.push(tokens=[])),matched=!1,(match=rcombinators.exec(soFar))&&(matched=match.shift(),tokens.push({value:matched,type:match[0].replace(rtrim," ")}),soFar=soFar.slice(matched.length)),Expr.filter)!(match=matchExpr[type].exec(soFar))||preFilters[type]&&!(match=preFilters[type](match))||(matched=match.shift(),tokens.push({value:matched,type:type,matches:match}),soFar=soFar.slice(matched.length));if(!matched)break}return parseOnly?soFar.length:soFar?Sizzle.error(selector):tokenCache(selector,groups).slice(0)},compile=Sizzle.compile=function(selector,match){var i,setMatchers=[],elementMatchers=[],cached=compilerCache[selector+" "];if(!cached){for(match||(match=tokenize(selector)),i=match.length;i--;)(cached=matcherFromTokens(match[i]))[expando]?setMatchers.push(cached):elementMatchers.push(cached);(cached=compilerCache(selector,function(elementMatchers,setMatchers){var bySet=setMatchers.length>0,byElement=elementMatchers.length>0,superMatcher=function(seed,context,xml,results,outermost){var elem,j,matcher,matchedCount=0,i="0",unmatched=seed&&[],setMatched=[],contextBackup=outermostContext,elems=seed||byElement&&Expr.find.TAG("*",outermost),dirrunsUnique=dirruns+=null==contextBackup?1:Math.random()||.1,len=elems.length;for(outermost&&(outermostContext=context===document||context||outermost);i!==len&&null!=(elem=elems[i]);i++){if(byElement&&elem){for(j=0,context||elem.ownerDocument===document||(setDocument(elem),xml=!documentIsHTML);matcher=elementMatchers[j++];)if(matcher(elem,context||document,xml)){results.push(elem);break}outermost&&(dirruns=dirrunsUnique)}bySet&&((elem=!matcher&&elem)&&matchedCount--,seed&&unmatched.push(elem))}if(matchedCount+=i,bySet&&i!==matchedCount){for(j=0;matcher=setMatchers[j++];)matcher(unmatched,setMatched,context,xml);if(seed){if(matchedCount>0)for(;i--;)unmatched[i]||setMatched[i]||(setMatched[i]=pop.call(results));setMatched=condense(setMatched)}push.apply(results,setMatched),outermost&&!seed&&setMatched.length>0&&matchedCount+setMatchers.length>1&&Sizzle.uniqueSort(results)}return outermost&&(dirruns=dirrunsUnique,outermostContext=contextBackup),unmatched};return bySet?markFunction(superMatcher):superMatcher}(elementMatchers,setMatchers))).selector=selector}return cached},select=Sizzle.select=function(selector,context,results,seed){var i,tokens,token,type,find,compiled="function"==typeof selector&&selector,match=!seed&&tokenize(selector=compiled.selector||selector);if(results=results||[],1===match.length){if((tokens=match[0]=match[0].slice(0)).length>2&&"ID"===(token=tokens[0]).type&&9===context.nodeType&&documentIsHTML&&Expr.relative[tokens[1].type]){if(!(context=(Expr.find.ID(token.matches[0].replace(runescape,funescape),context)||[])[0]))return results;compiled&&(context=context.parentNode),selector=selector.slice(tokens.shift().value.length)}for(i=matchExpr.needsContext.test(selector)?0:tokens.length;i--&&(token=tokens[i],!Expr.relative[type=token.type]);)if((find=Expr.find[type])&&(seed=find(token.matches[0].replace(runescape,funescape),rsibling.test(tokens[0].type)&&testContext(context.parentNode)||context))){if(tokens.splice(i,1),!(selector=seed.length&&toSelector(tokens)))return push.apply(results,seed),results;break}}return(compiled||compile(selector,match))(seed,context,!documentIsHTML,results,!context||rsibling.test(selector)&&testContext(context.parentNode)||context),results},support.sortStable=expando.split("").sort(sortOrder).join("")===expando,support.detectDuplicates=!!hasDuplicate,setDocument(),support.sortDetached=assert(function(el){return 1&el.compareDocumentPosition(document.createElement("fieldset"))}),assert(function(el){return el.innerHTML="<a href='#'></a>","#"===el.firstChild.getAttribute("href")})||addHandle("type|href|height|width",function(elem,name,isXML){if(!isXML)return elem.getAttribute(name,"type"===name.toLowerCase()?1:2)}),support.attributes&&assert(function(el){return el.innerHTML="<input/>",el.firstChild.setAttribute("value",""),""===el.firstChild.getAttribute("value")})||addHandle("value",function(elem,name,isXML){if(!isXML&&"input"===elem.nodeName.toLowerCase())return elem.defaultValue}),assert(function(el){return null==el.getAttribute("disabled")})||addHandle(booleans,function(elem,name,isXML){var val;if(!isXML)return!0===elem[name]?name.toLowerCase():(val=elem.getAttributeNode(name))&&val.specified?val.value:null}),Sizzle}(window);jQuery.find=Sizzle,jQuery.expr=Sizzle.selectors,jQuery.expr[":"]=jQuery.expr.pseudos,jQuery.uniqueSort=jQuery.unique=Sizzle.uniqueSort,jQuery.text=Sizzle.getText,jQuery.isXMLDoc=Sizzle.isXML,jQuery.contains=Sizzle.contains,jQuery.escapeSelector=Sizzle.escape;var dir=function(elem,dir,until){for(var matched=[],truncate=void 0!==until;(elem=elem[dir])&&9!==elem.nodeType;)if(1===elem.nodeType){if(truncate&&jQuery(elem).is(until))break;matched.push(elem)}return matched},siblings=function(n,elem){for(var matched=[];n;n=n.nextSibling)1===n.nodeType&&n!==elem&&matched.push(n);return matched},rneedsContext=jQuery.expr.match.needsContext;function nodeName(elem,name){return elem.nodeName&&elem.nodeName.toLowerCase()===name.toLowerCase()}var rsingleTag=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function winnow(elements,qualifier,not){return isFunction(qualifier)?jQuery.grep(elements,function(elem,i){return!!qualifier.call(elem,i,elem)!==not}):qualifier.nodeType?jQuery.grep(elements,function(elem){return elem===qualifier!==not}):"string"!=typeof qualifier?jQuery.grep(elements,function(elem){return indexOf.call(qualifier,elem)>-1!==not}):jQuery.filter(qualifier,elements,not)}jQuery.filter=function(expr,elems,not){var elem=elems[0];return not&&(expr=":not("+expr+")"),1===elems.length&&1===elem.nodeType?jQuery.find.matchesSelector(elem,expr)?[elem]:[]:jQuery.find.matches(expr,jQuery.grep(elems,function(elem){return 1===elem.nodeType}))},jQuery.fn.extend({find:function(selector){var i,ret,len=this.length,self=this;if("string"!=typeof selector)return this.pushStack(jQuery(selector).filter(function(){for(i=0;i<len;i++)if(jQuery.contains(self[i],this))return!0}));for(ret=this.pushStack([]),i=0;i<len;i++)jQuery.find(selector,self[i],ret);return len>1?jQuery.uniqueSort(ret):ret},filter:function(selector){return this.pushStack(winnow(this,selector||[],!1))},not:function(selector){return this.pushStack(winnow(this,selector||[],!0))},is:function(selector){return!!winnow(this,"string"==typeof selector&&rneedsContext.test(selector)?jQuery(selector):selector||[],!1).length}});var rootjQuery,rquickExpr=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/;(jQuery.fn.init=function(selector,context,root){var match,elem;if(!selector)return this;if(root=root||rootjQuery,"string"==typeof selector){if(!(match="<"===selector[0]&&">"===selector[selector.length-1]&&selector.length>=3?[null,selector,null]:rquickExpr.exec(selector))||!match[1]&&context)return!context||context.jquery?(context||root).find(selector):this.constructor(context).find(selector);if(match[1]){if(context=context instanceof jQuery?context[0]:context,jQuery.merge(this,jQuery.parseHTML(match[1],context&&context.nodeType?context.ownerDocument||context:document,!0)),rsingleTag.test(match[1])&&jQuery.isPlainObject(context))for(match in context)isFunction(this[match])?this[match](context[match]):this.attr(match,context[match]);return this}return(elem=document.getElementById(match[2]))&&(this[0]=elem,this.length=1),this}return selector.nodeType?(this[0]=selector,this.length=1,this):isFunction(selector)?void 0!==root.ready?root.ready(selector):selector(jQuery):jQuery.makeArray(selector,this)}).prototype=jQuery.fn,rootjQuery=jQuery(document);var rparentsprev=/^(?:parents|prev(?:Until|All))/,guaranteedUnique={children:!0,contents:!0,next:!0,prev:!0};function sibling(cur,dir){for(;(cur=cur[dir])&&1!==cur.nodeType;);return cur}jQuery.fn.extend({has:function(target){var targets=jQuery(target,this),l=targets.length;return this.filter(function(){for(var i=0;i<l;i++)if(jQuery.contains(this,targets[i]))return!0})},closest:function(selectors,context){var cur,i=0,l=this.length,matched=[],targets="string"!=typeof selectors&&jQuery(selectors);if(!rneedsContext.test(selectors))for(;i<l;i++)for(cur=this[i];cur&&cur!==context;cur=cur.parentNode)if(cur.nodeType<11&&(targets?targets.index(cur)>-1:1===cur.nodeType&&jQuery.find.matchesSelector(cur,selectors))){matched.push(cur);break}return this.pushStack(matched.length>1?jQuery.uniqueSort(matched):matched)},index:function(elem){return elem?"string"==typeof elem?indexOf.call(jQuery(elem),this[0]):indexOf.call(this,elem.jquery?elem[0]:elem):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(selector,context){return this.pushStack(jQuery.uniqueSort(jQuery.merge(this.get(),jQuery(selector,context))))},addBack:function(selector){return this.add(null==selector?this.prevObject:this.prevObject.filter(selector))}}),jQuery.each({parent:function(elem){var parent=elem.parentNode;return parent&&11!==parent.nodeType?parent:null},parents:function(elem){return dir(elem,"parentNode")},parentsUntil:function(elem,i,until){return dir(elem,"parentNode",until)},next:function(elem){return sibling(elem,"nextSibling")},prev:function(elem){return sibling(elem,"previousSibling")},nextAll:function(elem){return dir(elem,"nextSibling")},prevAll:function(elem){return dir(elem,"previousSibling")},nextUntil:function(elem,i,until){return dir(elem,"nextSibling",until)},prevUntil:function(elem,i,until){return dir(elem,"previousSibling",until)},siblings:function(elem){return siblings((elem.parentNode||{}).firstChild,elem)},children:function(elem){return siblings(elem.firstChild)},contents:function(elem){return nodeName(elem,"iframe")?elem.contentDocument:(nodeName(elem,"template")&&(elem=elem.content||elem),jQuery.merge([],elem.childNodes))}},function(name,fn){jQuery.fn[name]=function(until,selector){var matched=jQuery.map(this,fn,until);return"Until"!==name.slice(-5)&&(selector=until),selector&&"string"==typeof selector&&(matched=jQuery.filter(selector,matched)),this.length>1&&(guaranteedUnique[name]||jQuery.uniqueSort(matched),rparentsprev.test(name)&&matched.reverse()),this.pushStack(matched)}});var rnothtmlwhite=/[^\x20\t\r\n\f]+/g;function Identity(v){return v}function Thrower(ex){throw ex}function adoptValue(value,resolve,reject,noValue){var method;try{value&&isFunction(method=value.promise)?method.call(value).done(resolve).fail(reject):value&&isFunction(method=value.then)?method.call(value,resolve,reject):resolve.apply(void 0,[value].slice(noValue))}catch(value){reject.apply(void 0,[value])}}jQuery.Callbacks=function(options){options="string"==typeof options?function(options){var object={};return jQuery.each(options.match(rnothtmlwhite)||[],function(_,flag){object[flag]=!0}),object}(options):jQuery.extend({},options);var firing,memory,fired,locked,list=[],queue=[],firingIndex=-1,fire=function(){for(locked=locked||options.once,fired=firing=!0;queue.length;firingIndex=-1)for(memory=queue.shift();++firingIndex<list.length;)!1===list[firingIndex].apply(memory[0],memory[1])&&options.stopOnFalse&&(firingIndex=list.length,memory=!1);options.memory||(memory=!1),firing=!1,locked&&(list=memory?[]:"")},self={add:function(){return list&&(memory&&!firing&&(firingIndex=list.length-1,queue.push(memory)),function add(args){jQuery.each(args,function(_,arg){isFunction(arg)?options.unique&&self.has(arg)||list.push(arg):arg&&arg.length&&"string"!==toType(arg)&&add(arg)})}(arguments),memory&&!firing&&fire()),this},remove:function(){return jQuery.each(arguments,function(_,arg){for(var index;(index=jQuery.inArray(arg,list,index))>-1;)list.splice(index,1),index<=firingIndex&&firingIndex--}),this},has:function(fn){return fn?jQuery.inArray(fn,list)>-1:list.length>0},empty:function(){return list&&(list=[]),this},disable:function(){return locked=queue=[],list=memory="",this},disabled:function(){return!list},lock:function(){return locked=queue=[],memory||firing||(list=memory=""),this},locked:function(){return!!locked},fireWith:function(context,args){return locked||(args=[context,(args=args||[]).slice?args.slice():args],queue.push(args),firing||fire()),this},fire:function(){return self.fireWith(this,arguments),this},fired:function(){return!!fired}};return self},jQuery.extend({Deferred:function(func){var tuples=[["notify","progress",jQuery.Callbacks("memory"),jQuery.Callbacks("memory"),2],["resolve","done",jQuery.Callbacks("once memory"),jQuery.Callbacks("once memory"),0,"resolved"],["reject","fail",jQuery.Callbacks("once memory"),jQuery.Callbacks("once memory"),1,"rejected"]],state="pending",promise={state:function(){return state},always:function(){return deferred.done(arguments).fail(arguments),this},catch:function(fn){return promise.then(null,fn)},pipe:function(){var fns=arguments;return jQuery.Deferred(function(newDefer){jQuery.each(tuples,function(i,tuple){var fn=isFunction(fns[tuple[4]])&&fns[tuple[4]];deferred[tuple[1]](function(){var returned=fn&&fn.apply(this,arguments);returned&&isFunction(returned.promise)?returned.promise().progress(newDefer.notify).done(newDefer.resolve).fail(newDefer.reject):newDefer[tuple[0]+"With"](this,fn?[returned]:arguments)})}),fns=null}).promise()},then:function(onFulfilled,onRejected,onProgress){var maxDepth=0;function resolve(depth,deferred,handler,special){return function(){var that=this,args=arguments,mightThrow=function(){var returned,then;if(!(depth<maxDepth)){if((returned=handler.apply(that,args))===deferred.promise())throw new TypeError("Thenable self-resolution");then=returned&&("object"==typeof returned||"function"==typeof returned)&&returned.then,isFunction(then)?special?then.call(returned,resolve(maxDepth,deferred,Identity,special),resolve(maxDepth,deferred,Thrower,special)):(maxDepth++,then.call(returned,resolve(maxDepth,deferred,Identity,special),resolve(maxDepth,deferred,Thrower,special),resolve(maxDepth,deferred,Identity,deferred.notifyWith))):(handler!==Identity&&(that=void 0,args=[returned]),(special||deferred.resolveWith)(that,args))}},process=special?mightThrow:function(){try{mightThrow()}catch(e){jQuery.Deferred.exceptionHook&&jQuery.Deferred.exceptionHook(e,process.stackTrace),depth+1>=maxDepth&&(handler!==Thrower&&(that=void 0,args=[e]),deferred.rejectWith(that,args))}};depth?process():(jQuery.Deferred.getStackHook&&(process.stackTrace=jQuery.Deferred.getStackHook()),window.setTimeout(process))}}return jQuery.Deferred(function(newDefer){tuples[0][3].add(resolve(0,newDefer,isFunction(onProgress)?onProgress:Identity,newDefer.notifyWith)),tuples[1][3].add(resolve(0,newDefer,isFunction(onFulfilled)?onFulfilled:Identity)),tuples[2][3].add(resolve(0,newDefer,isFunction(onRejected)?onRejected:Thrower))}).promise()},promise:function(obj){return null!=obj?jQuery.extend(obj,promise):promise}},deferred={};return jQuery.each(tuples,function(i,tuple){var list=tuple[2],stateString=tuple[5];promise[tuple[1]]=list.add,stateString&&list.add(function(){state=stateString},tuples[3-i][2].disable,tuples[3-i][3].disable,tuples[0][2].lock,tuples[0][3].lock),list.add(tuple[3].fire),deferred[tuple[0]]=function(){return deferred[tuple[0]+"With"](this===deferred?void 0:this,arguments),this},deferred[tuple[0]+"With"]=list.fireWith}),promise.promise(deferred),func&&func.call(deferred,deferred),deferred},when:function(singleValue){var remaining=arguments.length,i=remaining,resolveContexts=Array(i),resolveValues=slice.call(arguments),master=jQuery.Deferred(),updateFunc=function(i){return function(value){resolveContexts[i]=this,resolveValues[i]=arguments.length>1?slice.call(arguments):value,--remaining||master.resolveWith(resolveContexts,resolveValues)}};if(remaining<=1&&(adoptValue(singleValue,master.done(updateFunc(i)).resolve,master.reject,!remaining),"pending"===master.state()||isFunction(resolveValues[i]&&resolveValues[i].then)))return master.then();for(;i--;)adoptValue(resolveValues[i],updateFunc(i),master.reject);return master.promise()}});var rerrorNames=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;jQuery.Deferred.exceptionHook=function(error,stack){window.console&&window.console.warn&&error&&rerrorNames.test(error.name)&&window.console.warn("jQuery.Deferred exception: "+error.message,error.stack,stack)},jQuery.readyException=function(error){window.setTimeout(function(){throw error})};var readyList=jQuery.Deferred();function completed(){document.removeEventListener("DOMContentLoaded",completed),window.removeEventListener("load",completed),jQuery.ready()}jQuery.fn.ready=function(fn){return readyList.then(fn).catch(function(error){jQuery.readyException(error)}),this},jQuery.extend({isReady:!1,readyWait:1,ready:function(wait){(!0===wait?--jQuery.readyWait:jQuery.isReady)||(jQuery.isReady=!0,!0!==wait&&--jQuery.readyWait>0||readyList.resolveWith(document,[jQuery]))}}),jQuery.ready.then=readyList.then,"complete"===document.readyState||"loading"!==document.readyState&&!document.documentElement.doScroll?window.setTimeout(jQuery.ready):(document.addEventListener("DOMContentLoaded",completed),window.addEventListener("load",completed));var access=function(elems,fn,key,value,chainable,emptyGet,raw){var i=0,len=elems.length,bulk=null==key;if("object"===toType(key))for(i in chainable=!0,key)access(elems,fn,i,key[i],!0,emptyGet,raw);else if(void 0!==value&&(chainable=!0,isFunction(value)||(raw=!0),bulk&&(raw?(fn.call(elems,value),fn=null):(bulk=fn,fn=function(elem,key,value){return bulk.call(jQuery(elem),value)})),fn))for(;i<len;i++)fn(elems[i],key,raw?value:value.call(elems[i],i,fn(elems[i],key)));return chainable?elems:bulk?fn.call(elems):len?fn(elems[0],key):emptyGet},rmsPrefix=/^-ms-/,rdashAlpha=/-([a-z])/g;function fcamelCase(all,letter){return letter.toUpperCase()}function camelCase(string){return string.replace(rmsPrefix,"ms-").replace(rdashAlpha,fcamelCase)}var acceptData=function(owner){return 1===owner.nodeType||9===owner.nodeType||!+owner.nodeType};function Data(){this.expando=jQuery.expando+Data.uid++}Data.uid=1,Data.prototype={cache:function(owner){var value=owner[this.expando];return value||(value={},acceptData(owner)&&(owner.nodeType?owner[this.expando]=value:Object.defineProperty(owner,this.expando,{value:value,configurable:!0}))),value},set:function(owner,data,value){var prop,cache=this.cache(owner);if("string"==typeof data)cache[camelCase(data)]=value;else for(prop in data)cache[camelCase(prop)]=data[prop];return cache},get:function(owner,key){return void 0===key?this.cache(owner):owner[this.expando]&&owner[this.expando][camelCase(key)]},access:function(owner,key,value){return void 0===key||key&&"string"==typeof key&&void 0===value?this.get(owner,key):(this.set(owner,key,value),void 0!==value?value:key)},remove:function(owner,key){var i,cache=owner[this.expando];if(void 0!==cache){if(void 0!==key){i=(key=Array.isArray(key)?key.map(camelCase):(key=camelCase(key))in cache?[key]:key.match(rnothtmlwhite)||[]).length;for(;i--;)delete cache[key[i]]}(void 0===key||jQuery.isEmptyObject(cache))&&(owner.nodeType?owner[this.expando]=void 0:delete owner[this.expando])}},hasData:function(owner){var cache=owner[this.expando];return void 0!==cache&&!jQuery.isEmptyObject(cache)}};var dataPriv=new Data,dataUser=new Data,rbrace=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,rmultiDash=/[A-Z]/g;function dataAttr(elem,key,data){var name;if(void 0===data&&1===elem.nodeType)if(name="data-"+key.replace(rmultiDash,"-$&").toLowerCase(),"string"==typeof(data=elem.getAttribute(name))){try{data=function(data){return"true"===data||"false"!==data&&("null"===data?null:data===+data+""?+data:rbrace.test(data)?JSON.parse(data):data)}(data)}catch(e){}dataUser.set(elem,key,data)}else data=void 0;return data}jQuery.extend({hasData:function(elem){return dataUser.hasData(elem)||dataPriv.hasData(elem)},data:function(elem,name,data){return dataUser.access(elem,name,data)},removeData:function(elem,name){dataUser.remove(elem,name)},_data:function(elem,name,data){return dataPriv.access(elem,name,data)},_removeData:function(elem,name){dataPriv.remove(elem,name)}}),jQuery.fn.extend({data:function(key,value){var i,name,data,elem=this[0],attrs=elem&&elem.attributes;if(void 0===key){if(this.length&&(data=dataUser.get(elem),1===elem.nodeType&&!dataPriv.get(elem,"hasDataAttrs"))){for(i=attrs.length;i--;)attrs[i]&&0===(name=attrs[i].name).indexOf("data-")&&(name=camelCase(name.slice(5)),dataAttr(elem,name,data[name]));dataPriv.set(elem,"hasDataAttrs",!0)}return data}return"object"==typeof key?this.each(function(){dataUser.set(this,key)}):access(this,function(value){var data;if(elem&&void 0===value)return void 0!==(data=dataUser.get(elem,key))?data:void 0!==(data=dataAttr(elem,key))?data:void 0;this.each(function(){dataUser.set(this,key,value)})},null,value,arguments.length>1,null,!0)},removeData:function(key){return this.each(function(){dataUser.remove(this,key)})}}),jQuery.extend({queue:function(elem,type,data){var queue;if(elem)return type=(type||"fx")+"queue",queue=dataPriv.get(elem,type),data&&(!queue||Array.isArray(data)?queue=dataPriv.access(elem,type,jQuery.makeArray(data)):queue.push(data)),queue||[]},dequeue:function(elem,type){type=type||"fx";var queue=jQuery.queue(elem,type),startLength=queue.length,fn=queue.shift(),hooks=jQuery._queueHooks(elem,type);"inprogress"===fn&&(fn=queue.shift(),startLength--),fn&&("fx"===type&&queue.unshift("inprogress"),delete hooks.stop,fn.call(elem,function(){jQuery.dequeue(elem,type)},hooks)),!startLength&&hooks&&hooks.empty.fire()},_queueHooks:function(elem,type){var key=type+"queueHooks";return dataPriv.get(elem,key)||dataPriv.access(elem,key,{empty:jQuery.Callbacks("once memory").add(function(){dataPriv.remove(elem,[type+"queue",key])})})}}),jQuery.fn.extend({queue:function(type,data){var setter=2;return"string"!=typeof type&&(data=type,type="fx",setter--),arguments.length<setter?jQuery.queue(this[0],type):void 0===data?this:this.each(function(){var queue=jQuery.queue(this,type,data);jQuery._queueHooks(this,type),"fx"===type&&"inprogress"!==queue[0]&&jQuery.dequeue(this,type)})},dequeue:function(type){return this.each(function(){jQuery.dequeue(this,type)})},clearQueue:function(type){return this.queue(type||"fx",[])},promise:function(type,obj){var tmp,count=1,defer=jQuery.Deferred(),elements=this,i=this.length,resolve=function(){--count||defer.resolveWith(elements,[elements])};for("string"!=typeof type&&(obj=type,type=void 0),type=type||"fx";i--;)(tmp=dataPriv.get(elements[i],type+"queueHooks"))&&tmp.empty&&(count++,tmp.empty.add(resolve));return resolve(),defer.promise(obj)}});var pnum=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,rcssNum=new RegExp("^(?:([+-])=|)("+pnum+")([a-z%]*)$","i"),cssExpand=["Top","Right","Bottom","Left"],isHiddenWithinTree=function(elem,el){return"none"===(elem=el||elem).style.display||""===elem.style.display&&jQuery.contains(elem.ownerDocument,elem)&&"none"===jQuery.css(elem,"display")},swap=function(elem,options,callback,args){var ret,name,old={};for(name in options)old[name]=elem.style[name],elem.style[name]=options[name];for(name in ret=callback.apply(elem,args||[]),options)elem.style[name]=old[name];return ret};function adjustCSS(elem,prop,valueParts,tween){var adjusted,scale,maxIterations=20,currentValue=tween?function(){return tween.cur()}:function(){return jQuery.css(elem,prop,"")},initial=currentValue(),unit=valueParts&&valueParts[3]||(jQuery.cssNumber[prop]?"":"px"),initialInUnit=(jQuery.cssNumber[prop]||"px"!==unit&&+initial)&&rcssNum.exec(jQuery.css(elem,prop));if(initialInUnit&&initialInUnit[3]!==unit){for(initial/=2,unit=unit||initialInUnit[3],initialInUnit=+initial||1;maxIterations--;)jQuery.style(elem,prop,initialInUnit+unit),(1-scale)*(1-(scale=currentValue()/initial||.5))<=0&&(maxIterations=0),initialInUnit/=scale;initialInUnit*=2,jQuery.style(elem,prop,initialInUnit+unit),valueParts=valueParts||[]}return valueParts&&(initialInUnit=+initialInUnit||+initial||0,adjusted=valueParts[1]?initialInUnit+(valueParts[1]+1)*valueParts[2]:+valueParts[2],tween&&(tween.unit=unit,tween.start=initialInUnit,tween.end=adjusted)),adjusted}var defaultDisplayMap={};function getDefaultDisplay(elem){var temp,doc=elem.ownerDocument,nodeName=elem.nodeName,display=defaultDisplayMap[nodeName];return display||(temp=doc.body.appendChild(doc.createElement(nodeName)),display=jQuery.css(temp,"display"),temp.parentNode.removeChild(temp),"none"===display&&(display="block"),defaultDisplayMap[nodeName]=display,display)}function showHide(elements,show){for(var display,elem,values=[],index=0,length=elements.length;index<length;index++)(elem=elements[index]).style&&(display=elem.style.display,show?("none"===display&&(values[index]=dataPriv.get(elem,"display")||null,values[index]||(elem.style.display="")),""===elem.style.display&&isHiddenWithinTree(elem)&&(values[index]=getDefaultDisplay(elem))):"none"!==display&&(values[index]="none",dataPriv.set(elem,"display",display)));for(index=0;index<length;index++)null!=values[index]&&(elements[index].style.display=values[index]);return elements}jQuery.fn.extend({show:function(){return showHide(this,!0)},hide:function(){return showHide(this)},toggle:function(state){return"boolean"==typeof state?state?this.show():this.hide():this.each(function(){isHiddenWithinTree(this)?jQuery(this).show():jQuery(this).hide()})}});var rcheckableType=/^(?:checkbox|radio)$/i,rtagName=/<([a-z][^\/\0>\x20\t\r\n\f]+)/i,rscriptType=/^$|^module$|\/(?:java|ecma)script/i,wrapMap={option:[1,"<select multiple='multiple'>","</select>"],thead:[1,"<table>","</table>"],col:[2,"<table><colgroup>","</colgroup></table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:[0,"",""]};function getAll(context,tag){var ret;return ret=void 0!==context.getElementsByTagName?context.getElementsByTagName(tag||"*"):void 0!==context.querySelectorAll?context.querySelectorAll(tag||"*"):[],void 0===tag||tag&&nodeName(context,tag)?jQuery.merge([context],ret):ret}function setGlobalEval(elems,refElements){for(var i=0,l=elems.length;i<l;i++)dataPriv.set(elems[i],"globalEval",!refElements||dataPriv.get(refElements[i],"globalEval"))}wrapMap.optgroup=wrapMap.option,wrapMap.tbody=wrapMap.tfoot=wrapMap.colgroup=wrapMap.caption=wrapMap.thead,wrapMap.th=wrapMap.td;var div,input,rhtml=/<|&#?\w+;/;function buildFragment(elems,context,scripts,selection,ignored){for(var elem,tmp,tag,wrap,contains,j,fragment=context.createDocumentFragment(),nodes=[],i=0,l=elems.length;i<l;i++)if((elem=elems[i])||0===elem)if("object"===toType(elem))jQuery.merge(nodes,elem.nodeType?[elem]:elem);else if(rhtml.test(elem)){for(tmp=tmp||fragment.appendChild(context.createElement("div")),tag=(rtagName.exec(elem)||["",""])[1].toLowerCase(),wrap=wrapMap[tag]||wrapMap._default,tmp.innerHTML=wrap[1]+jQuery.htmlPrefilter(elem)+wrap[2],j=wrap[0];j--;)tmp=tmp.lastChild;jQuery.merge(nodes,tmp.childNodes),(tmp=fragment.firstChild).textContent=""}else nodes.push(context.createTextNode(elem));for(fragment.textContent="",i=0;elem=nodes[i++];)if(selection&&jQuery.inArray(elem,selection)>-1)ignored&&ignored.push(elem);else if(contains=jQuery.contains(elem.ownerDocument,elem),tmp=getAll(fragment.appendChild(elem),"script"),contains&&setGlobalEval(tmp),scripts)for(j=0;elem=tmp[j++];)rscriptType.test(elem.type||"")&&scripts.push(elem);return fragment}div=document.createDocumentFragment().appendChild(document.createElement("div")),(input=document.createElement("input")).setAttribute("type","radio"),input.setAttribute("checked","checked"),input.setAttribute("name","t"),div.appendChild(input),support.checkClone=div.cloneNode(!0).cloneNode(!0).lastChild.checked,div.innerHTML="<textarea>x</textarea>",support.noCloneChecked=!!div.cloneNode(!0).lastChild.defaultValue;var documentElement=document.documentElement,rkeyEvent=/^key/,rmouseEvent=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,rtypenamespace=/^([^.]*)(?:\.(.+)|)/;function returnTrue(){return!0}function returnFalse(){return!1}function safeActiveElement(){try{return document.activeElement}catch(err){}}function on(elem,types,selector,data,fn,one){var origFn,type;if("object"==typeof types){for(type in"string"!=typeof selector&&(data=data||selector,selector=void 0),types)on(elem,type,selector,data,types[type],one);return elem}if(null==data&&null==fn?(fn=selector,data=selector=void 0):null==fn&&("string"==typeof selector?(fn=data,data=void 0):(fn=data,data=selector,selector=void 0)),!1===fn)fn=returnFalse;else if(!fn)return elem;return 1===one&&(origFn=fn,(fn=function(event){return jQuery().off(event),origFn.apply(this,arguments)}).guid=origFn.guid||(origFn.guid=jQuery.guid++)),elem.each(function(){jQuery.event.add(this,types,fn,data,selector)})}jQuery.event={global:{},add:function(elem,types,handler,data,selector){var handleObjIn,eventHandle,tmp,events,t,handleObj,special,handlers,type,namespaces,origType,elemData=dataPriv.get(elem);if(elemData)for(handler.handler&&(handler=(handleObjIn=handler).handler,selector=handleObjIn.selector),selector&&jQuery.find.matchesSelector(documentElement,selector),handler.guid||(handler.guid=jQuery.guid++),(events=elemData.events)||(events=elemData.events={}),(eventHandle=elemData.handle)||(eventHandle=elemData.handle=function(e){return void 0!==jQuery&&jQuery.event.triggered!==e.type?jQuery.event.dispatch.apply(elem,arguments):void 0}),t=(types=(types||"").match(rnothtmlwhite)||[""]).length;t--;)type=origType=(tmp=rtypenamespace.exec(types[t])||[])[1],namespaces=(tmp[2]||"").split(".").sort(),type&&(special=jQuery.event.special[type]||{},type=(selector?special.delegateType:special.bindType)||type,special=jQuery.event.special[type]||{},handleObj=jQuery.extend({type:type,origType:origType,data:data,handler:handler,guid:handler.guid,selector:selector,needsContext:selector&&jQuery.expr.match.needsContext.test(selector),namespace:namespaces.join(".")},handleObjIn),(handlers=events[type])||((handlers=events[type]=[]).delegateCount=0,special.setup&&!1!==special.setup.call(elem,data,namespaces,eventHandle)||elem.addEventListener&&elem.addEventListener(type,eventHandle)),special.add&&(special.add.call(elem,handleObj),handleObj.handler.guid||(handleObj.handler.guid=handler.guid)),selector?handlers.splice(handlers.delegateCount++,0,handleObj):handlers.push(handleObj),jQuery.event.global[type]=!0)},remove:function(elem,types,handler,selector,mappedTypes){var j,origCount,tmp,events,t,handleObj,special,handlers,type,namespaces,origType,elemData=dataPriv.hasData(elem)&&dataPriv.get(elem);if(elemData&&(events=elemData.events)){for(t=(types=(types||"").match(rnothtmlwhite)||[""]).length;t--;)if(type=origType=(tmp=rtypenamespace.exec(types[t])||[])[1],namespaces=(tmp[2]||"").split(".").sort(),type){for(special=jQuery.event.special[type]||{},handlers=events[type=(selector?special.delegateType:special.bindType)||type]||[],tmp=tmp[2]&&new RegExp("(^|\\.)"+namespaces.join("\\.(?:.*\\.|)")+"(\\.|$)"),origCount=j=handlers.length;j--;)handleObj=handlers[j],!mappedTypes&&origType!==handleObj.origType||handler&&handler.guid!==handleObj.guid||tmp&&!tmp.test(handleObj.namespace)||selector&&selector!==handleObj.selector&&("**"!==selector||!handleObj.selector)||(handlers.splice(j,1),handleObj.selector&&handlers.delegateCount--,special.remove&&special.remove.call(elem,handleObj));origCount&&!handlers.length&&(special.teardown&&!1!==special.teardown.call(elem,namespaces,elemData.handle)||jQuery.removeEvent(elem,type,elemData.handle),delete events[type])}else for(type in events)jQuery.event.remove(elem,type+types[t],handler,selector,!0);jQuery.isEmptyObject(events)&&dataPriv.remove(elem,"handle events")}},dispatch:function(nativeEvent){var i,j,ret,matched,handleObj,handlerQueue,event=jQuery.event.fix(nativeEvent),args=new Array(arguments.length),handlers=(dataPriv.get(this,"events")||{})[event.type]||[],special=jQuery.event.special[event.type]||{};for(args[0]=event,i=1;i<arguments.length;i++)args[i]=arguments[i];if(event.delegateTarget=this,!special.preDispatch||!1!==special.preDispatch.call(this,event)){for(handlerQueue=jQuery.event.handlers.call(this,event,handlers),i=0;(matched=handlerQueue[i++])&&!event.isPropagationStopped();)for(event.currentTarget=matched.elem,j=0;(handleObj=matched.handlers[j++])&&!event.isImmediatePropagationStopped();)event.rnamespace&&!event.rnamespace.test(handleObj.namespace)||(event.handleObj=handleObj,event.data=handleObj.data,void 0!==(ret=((jQuery.event.special[handleObj.origType]||{}).handle||handleObj.handler).apply(matched.elem,args))&&!1===(event.result=ret)&&(event.preventDefault(),event.stopPropagation()));return special.postDispatch&&special.postDispatch.call(this,event),event.result}},handlers:function(event,handlers){var i,handleObj,sel,matchedHandlers,matchedSelectors,handlerQueue=[],delegateCount=handlers.delegateCount,cur=event.target;if(delegateCount&&cur.nodeType&&!("click"===event.type&&event.button>=1))for(;cur!==this;cur=cur.parentNode||this)if(1===cur.nodeType&&("click"!==event.type||!0!==cur.disabled)){for(matchedHandlers=[],matchedSelectors={},i=0;i<delegateCount;i++)void 0===matchedSelectors[sel=(handleObj=handlers[i]).selector+" "]&&(matchedSelectors[sel]=handleObj.needsContext?jQuery(sel,this).index(cur)>-1:jQuery.find(sel,this,null,[cur]).length),matchedSelectors[sel]&&matchedHandlers.push(handleObj);matchedHandlers.length&&handlerQueue.push({elem:cur,handlers:matchedHandlers})}return cur=this,delegateCount<handlers.length&&handlerQueue.push({elem:cur,handlers:handlers.slice(delegateCount)}),handlerQueue},addProp:function(name,hook){Object.defineProperty(jQuery.Event.prototype,name,{enumerable:!0,configurable:!0,get:isFunction(hook)?function(){if(this.originalEvent)return hook(this.originalEvent)}:function(){if(this.originalEvent)return this.originalEvent[name]},set:function(value){Object.defineProperty(this,name,{enumerable:!0,configurable:!0,writable:!0,value:value})}})},fix:function(originalEvent){return originalEvent[jQuery.expando]?originalEvent:new jQuery.Event(originalEvent)},special:{load:{noBubble:!0},focus:{trigger:function(){if(this!==safeActiveElement()&&this.focus)return this.focus(),!1},delegateType:"focusin"},blur:{trigger:function(){if(this===safeActiveElement()&&this.blur)return this.blur(),!1},delegateType:"focusout"},click:{trigger:function(){if("checkbox"===this.type&&this.click&&nodeName(this,"input"))return this.click(),!1},_default:function(event){return nodeName(event.target,"a")}},beforeunload:{postDispatch:function(event){void 0!==event.result&&event.originalEvent&&(event.originalEvent.returnValue=event.result)}}}},jQuery.removeEvent=function(elem,type,handle){elem.removeEventListener&&elem.removeEventListener(type,handle)},jQuery.Event=function(src,props){if(!(this instanceof jQuery.Event))return new jQuery.Event(src,props);src&&src.type?(this.originalEvent=src,this.type=src.type,this.isDefaultPrevented=src.defaultPrevented||void 0===src.defaultPrevented&&!1===src.returnValue?returnTrue:returnFalse,this.target=src.target&&3===src.target.nodeType?src.target.parentNode:src.target,this.currentTarget=src.currentTarget,this.relatedTarget=src.relatedTarget):this.type=src,props&&jQuery.extend(this,props),this.timeStamp=src&&src.timeStamp||Date.now(),this[jQuery.expando]=!0},jQuery.Event.prototype={constructor:jQuery.Event,isDefaultPrevented:returnFalse,isPropagationStopped:returnFalse,isImmediatePropagationStopped:returnFalse,isSimulated:!1,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=returnTrue,e&&!this.isSimulated&&e.preventDefault()},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=returnTrue,e&&!this.isSimulated&&e.stopPropagation()},stopImmediatePropagation:function(){var e=this.originalEvent;this.isImmediatePropagationStopped=returnTrue,e&&!this.isSimulated&&e.stopImmediatePropagation(),this.stopPropagation()}},jQuery.each({altKey:!0,bubbles:!0,cancelable:!0,changedTouches:!0,ctrlKey:!0,detail:!0,eventPhase:!0,metaKey:!0,pageX:!0,pageY:!0,shiftKey:!0,view:!0,char:!0,charCode:!0,key:!0,keyCode:!0,button:!0,buttons:!0,clientX:!0,clientY:!0,offsetX:!0,offsetY:!0,pointerId:!0,pointerType:!0,screenX:!0,screenY:!0,targetTouches:!0,toElement:!0,touches:!0,which:function(event){var button=event.button;return null==event.which&&rkeyEvent.test(event.type)?null!=event.charCode?event.charCode:event.keyCode:!event.which&&void 0!==button&&rmouseEvent.test(event.type)?1&button?1:2&button?3:4&button?2:0:event.which}},jQuery.event.addProp),jQuery.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(orig,fix){jQuery.event.special[orig]={delegateType:fix,bindType:fix,handle:function(event){var ret,related=event.relatedTarget,handleObj=event.handleObj;return related&&(related===this||jQuery.contains(this,related))||(event.type=handleObj.origType,ret=handleObj.handler.apply(this,arguments),event.type=fix),ret}}}),jQuery.fn.extend({on:function(types,selector,data,fn){return on(this,types,selector,data,fn)},one:function(types,selector,data,fn){return on(this,types,selector,data,fn,1)},off:function(types,selector,fn){var handleObj,type;if(types&&types.preventDefault&&types.handleObj)return handleObj=types.handleObj,jQuery(types.delegateTarget).off(handleObj.namespace?handleObj.origType+"."+handleObj.namespace:handleObj.origType,handleObj.selector,handleObj.handler),this;if("object"==typeof types){for(type in types)this.off(type,selector,types[type]);return this}return!1!==selector&&"function"!=typeof selector||(fn=selector,selector=void 0),!1===fn&&(fn=returnFalse),this.each(function(){jQuery.event.remove(this,types,fn,selector)})}});var rxhtmlTag=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\/\0>\x20\t\r\n\f]*)[^>]*)\/>/gi,rnoInnerhtml=/<script|<style|<link/i,rchecked=/checked\s*(?:[^=]|=\s*.checked.)/i,rcleanScript=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g;function manipulationTarget(elem,content){return nodeName(elem,"table")&&nodeName(11!==content.nodeType?content:content.firstChild,"tr")&&jQuery(elem).children("tbody")[0]||elem}function disableScript(elem){return elem.type=(null!==elem.getAttribute("type"))+"/"+elem.type,elem}function restoreScript(elem){return"true/"===(elem.type||"").slice(0,5)?elem.type=elem.type.slice(5):elem.removeAttribute("type"),elem}function cloneCopyEvent(src,dest){var i,l,type,pdataOld,pdataCur,udataOld,udataCur,events;if(1===dest.nodeType){if(dataPriv.hasData(src)&&(pdataOld=dataPriv.access(src),pdataCur=dataPriv.set(dest,pdataOld),events=pdataOld.events))for(type in delete pdataCur.handle,pdataCur.events={},events)for(i=0,l=events[type].length;i<l;i++)jQuery.event.add(dest,type,events[type][i]);dataUser.hasData(src)&&(udataOld=dataUser.access(src),udataCur=jQuery.extend({},udataOld),dataUser.set(dest,udataCur))}}function domManip(collection,args,callback,ignored){args=concat.apply([],args);var fragment,first,scripts,hasScripts,node,doc,i=0,l=collection.length,iNoClone=l-1,value=args[0],valueIsFunction=isFunction(value);if(valueIsFunction||l>1&&"string"==typeof value&&!support.checkClone&&rchecked.test(value))return collection.each(function(index){var self=collection.eq(index);valueIsFunction&&(args[0]=value.call(this,index,self.html())),domManip(self,args,callback,ignored)});if(l&&(first=(fragment=buildFragment(args,collection[0].ownerDocument,!1,collection,ignored)).firstChild,1===fragment.childNodes.length&&(fragment=first),first||ignored)){for(hasScripts=(scripts=jQuery.map(getAll(fragment,"script"),disableScript)).length;i<l;i++)node=fragment,i!==iNoClone&&(node=jQuery.clone(node,!0,!0),hasScripts&&jQuery.merge(scripts,getAll(node,"script"))),callback.call(collection[i],node,i);if(hasScripts)for(doc=scripts[scripts.length-1].ownerDocument,jQuery.map(scripts,restoreScript),i=0;i<hasScripts;i++)node=scripts[i],rscriptType.test(node.type||"")&&!dataPriv.access(node,"globalEval")&&jQuery.contains(doc,node)&&(node.src&&"module"!==(node.type||"").toLowerCase()?jQuery._evalUrl&&jQuery._evalUrl(node.src):DOMEval(node.textContent.replace(rcleanScript,""),doc,node))}return collection}function remove(elem,selector,keepData){for(var node,nodes=selector?jQuery.filter(selector,elem):elem,i=0;null!=(node=nodes[i]);i++)keepData||1!==node.nodeType||jQuery.cleanData(getAll(node)),node.parentNode&&(keepData&&jQuery.contains(node.ownerDocument,node)&&setGlobalEval(getAll(node,"script")),node.parentNode.removeChild(node));return elem}jQuery.extend({htmlPrefilter:function(html){return html.replace(rxhtmlTag,"<$1></$2>")},clone:function(elem,dataAndEvents,deepDataAndEvents){var i,l,srcElements,destElements,src,dest,nodeName,clone=elem.cloneNode(!0),inPage=jQuery.contains(elem.ownerDocument,elem);if(!(support.noCloneChecked||1!==elem.nodeType&&11!==elem.nodeType||jQuery.isXMLDoc(elem)))for(destElements=getAll(clone),i=0,l=(srcElements=getAll(elem)).length;i<l;i++)src=srcElements[i],dest=destElements[i],void 0,"input"===(nodeName=dest.nodeName.toLowerCase())&&rcheckableType.test(src.type)?dest.checked=src.checked:"input"!==nodeName&&"textarea"!==nodeName||(dest.defaultValue=src.defaultValue);if(dataAndEvents)if(deepDataAndEvents)for(srcElements=srcElements||getAll(elem),destElements=destElements||getAll(clone),i=0,l=srcElements.length;i<l;i++)cloneCopyEvent(srcElements[i],destElements[i]);else cloneCopyEvent(elem,clone);return(destElements=getAll(clone,"script")).length>0&&setGlobalEval(destElements,!inPage&&getAll(elem,"script")),clone},cleanData:function(elems){for(var data,elem,type,special=jQuery.event.special,i=0;void 0!==(elem=elems[i]);i++)if(acceptData(elem)){if(data=elem[dataPriv.expando]){if(data.events)for(type in data.events)special[type]?jQuery.event.remove(elem,type):jQuery.removeEvent(elem,type,data.handle);elem[dataPriv.expando]=void 0}elem[dataUser.expando]&&(elem[dataUser.expando]=void 0)}}}),jQuery.fn.extend({detach:function(selector){return remove(this,selector,!0)},remove:function(selector){return remove(this,selector)},text:function(value){return access(this,function(value){return void 0===value?jQuery.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=value)})},null,value,arguments.length)},append:function(){return domManip(this,arguments,function(elem){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||manipulationTarget(this,elem).appendChild(elem)})},prepend:function(){return domManip(this,arguments,function(elem){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var target=manipulationTarget(this,elem);target.insertBefore(elem,target.firstChild)}})},before:function(){return domManip(this,arguments,function(elem){this.parentNode&&this.parentNode.insertBefore(elem,this)})},after:function(){return domManip(this,arguments,function(elem){this.parentNode&&this.parentNode.insertBefore(elem,this.nextSibling)})},empty:function(){for(var elem,i=0;null!=(elem=this[i]);i++)1===elem.nodeType&&(jQuery.cleanData(getAll(elem,!1)),elem.textContent="");return this},clone:function(dataAndEvents,deepDataAndEvents){return dataAndEvents=null!=dataAndEvents&&dataAndEvents,deepDataAndEvents=null==deepDataAndEvents?dataAndEvents:deepDataAndEvents,this.map(function(){return jQuery.clone(this,dataAndEvents,deepDataAndEvents)})},html:function(value){return access(this,function(value){var elem=this[0]||{},i=0,l=this.length;if(void 0===value&&1===elem.nodeType)return elem.innerHTML;if("string"==typeof value&&!rnoInnerhtml.test(value)&&!wrapMap[(rtagName.exec(value)||["",""])[1].toLowerCase()]){value=jQuery.htmlPrefilter(value);try{for(;i<l;i++)1===(elem=this[i]||{}).nodeType&&(jQuery.cleanData(getAll(elem,!1)),elem.innerHTML=value);elem=0}catch(e){}}elem&&this.empty().append(value)},null,value,arguments.length)},replaceWith:function(){var ignored=[];return domManip(this,arguments,function(elem){var parent=this.parentNode;jQuery.inArray(this,ignored)<0&&(jQuery.cleanData(getAll(this)),parent&&parent.replaceChild(elem,this))},ignored)}}),jQuery.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(name,original){jQuery.fn[name]=function(selector){for(var elems,ret=[],insert=jQuery(selector),last=insert.length-1,i=0;i<=last;i++)elems=i===last?this:this.clone(!0),jQuery(insert[i])[original](elems),push.apply(ret,elems.get());return this.pushStack(ret)}});var rnumnonpx=new RegExp("^("+pnum+")(?!px)[a-z%]+$","i"),getStyles=function(elem){var view=elem.ownerDocument.defaultView;return view&&view.opener||(view=window),view.getComputedStyle(elem)},rboxStyle=new RegExp(cssExpand.join("|"),"i");function curCSS(elem,name,computed){var width,minWidth,maxWidth,ret,style=elem.style;return(computed=computed||getStyles(elem))&&(""!==(ret=computed.getPropertyValue(name)||computed[name])||jQuery.contains(elem.ownerDocument,elem)||(ret=jQuery.style(elem,name)),!support.pixelBoxStyles()&&rnumnonpx.test(ret)&&rboxStyle.test(name)&&(width=style.width,minWidth=style.minWidth,maxWidth=style.maxWidth,style.minWidth=style.maxWidth=style.width=ret,ret=computed.width,style.width=width,style.minWidth=minWidth,style.maxWidth=maxWidth)),void 0!==ret?ret+"":ret}function addGetHookIf(conditionFn,hookFn){return{get:function(){if(!conditionFn())return(this.get=hookFn).apply(this,arguments);delete this.get}}}!function(){function computeStyleTests(){if(div){container.style.cssText="position:absolute;left:-11111px;width:60px;margin-top:1px;padding:0;border:0",div.style.cssText="position:relative;display:block;box-sizing:border-box;overflow:scroll;margin:auto;border:1px;padding:1px;width:60%;top:1%",documentElement.appendChild(container).appendChild(div);var divStyle=window.getComputedStyle(div);pixelPositionVal="1%"!==divStyle.top,reliableMarginLeftVal=12===roundPixelMeasures(divStyle.marginLeft),div.style.right="60%",pixelBoxStylesVal=36===roundPixelMeasures(divStyle.right),boxSizingReliableVal=36===roundPixelMeasures(divStyle.width),div.style.position="absolute",scrollboxSizeVal=36===div.offsetWidth||"absolute",documentElement.removeChild(container),div=null}}function roundPixelMeasures(measure){return Math.round(parseFloat(measure))}var pixelPositionVal,boxSizingReliableVal,scrollboxSizeVal,pixelBoxStylesVal,reliableMarginLeftVal,container=document.createElement("div"),div=document.createElement("div");div.style&&(div.style.backgroundClip="content-box",div.cloneNode(!0).style.backgroundClip="",support.clearCloneStyle="content-box"===div.style.backgroundClip,jQuery.extend(support,{boxSizingReliable:function(){return computeStyleTests(),boxSizingReliableVal},pixelBoxStyles:function(){return computeStyleTests(),pixelBoxStylesVal},pixelPosition:function(){return computeStyleTests(),pixelPositionVal},reliableMarginLeft:function(){return computeStyleTests(),reliableMarginLeftVal},scrollboxSize:function(){return computeStyleTests(),scrollboxSizeVal}}))}();var rdisplayswap=/^(none|table(?!-c[ea]).+)/,rcustomProp=/^--/,cssShow={position:"absolute",visibility:"hidden",display:"block"},cssNormalTransform={letterSpacing:"0",fontWeight:"400"},cssPrefixes=["Webkit","Moz","ms"],emptyStyle=document.createElement("div").style;function finalPropName(name){var ret=jQuery.cssProps[name];return ret||(ret=jQuery.cssProps[name]=function(name){if(name in emptyStyle)return name;for(var capName=name[0].toUpperCase()+name.slice(1),i=cssPrefixes.length;i--;)if((name=cssPrefixes[i]+capName)in emptyStyle)return name}(name)||name),ret}function setPositiveNumber(elem,value,subtract){var matches=rcssNum.exec(value);return matches?Math.max(0,matches[2]-(subtract||0))+(matches[3]||"px"):value}function boxModelAdjustment(elem,dimension,box,isBorderBox,styles,computedVal){var i="width"===dimension?1:0,extra=0,delta=0;if(box===(isBorderBox?"border":"content"))return 0;for(;i<4;i+=2)"margin"===box&&(delta+=jQuery.css(elem,box+cssExpand[i],!0,styles)),isBorderBox?("content"===box&&(delta-=jQuery.css(elem,"padding"+cssExpand[i],!0,styles)),"margin"!==box&&(delta-=jQuery.css(elem,"border"+cssExpand[i]+"Width",!0,styles))):(delta+=jQuery.css(elem,"padding"+cssExpand[i],!0,styles),"padding"!==box?delta+=jQuery.css(elem,"border"+cssExpand[i]+"Width",!0,styles):extra+=jQuery.css(elem,"border"+cssExpand[i]+"Width",!0,styles));return!isBorderBox&&computedVal>=0&&(delta+=Math.max(0,Math.ceil(elem["offset"+dimension[0].toUpperCase()+dimension.slice(1)]-computedVal-delta-extra-.5))),delta}function getWidthOrHeight(elem,dimension,extra){var styles=getStyles(elem),val=curCSS(elem,dimension,styles),isBorderBox="border-box"===jQuery.css(elem,"boxSizing",!1,styles),valueIsBorderBox=isBorderBox;if(rnumnonpx.test(val)){if(!extra)return val;val="auto"}return valueIsBorderBox=valueIsBorderBox&&(support.boxSizingReliable()||val===elem.style[dimension]),("auto"===val||!parseFloat(val)&&"inline"===jQuery.css(elem,"display",!1,styles))&&(val=elem["offset"+dimension[0].toUpperCase()+dimension.slice(1)],valueIsBorderBox=!0),(val=parseFloat(val)||0)+boxModelAdjustment(elem,dimension,extra||(isBorderBox?"border":"content"),valueIsBorderBox,styles,val)+"px"}function Tween(elem,options,prop,end,easing){return new Tween.prototype.init(elem,options,prop,end,easing)}jQuery.extend({cssHooks:{opacity:{get:function(elem,computed){if(computed){var ret=curCSS(elem,"opacity");return""===ret?"1":ret}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{},style:function(elem,name,value,extra){if(elem&&3!==elem.nodeType&&8!==elem.nodeType&&elem.style){var ret,type,hooks,origName=camelCase(name),isCustomProp=rcustomProp.test(name),style=elem.style;if(isCustomProp||(name=finalPropName(origName)),hooks=jQuery.cssHooks[name]||jQuery.cssHooks[origName],void 0===value)return hooks&&"get"in hooks&&void 0!==(ret=hooks.get(elem,!1,extra))?ret:style[name];"string"===(type=typeof value)&&(ret=rcssNum.exec(value))&&ret[1]&&(value=adjustCSS(elem,name,ret),type="number"),null!=value&&value==value&&("number"===type&&(value+=ret&&ret[3]||(jQuery.cssNumber[origName]?"":"px")),support.clearCloneStyle||""!==value||0!==name.indexOf("background")||(style[name]="inherit"),hooks&&"set"in hooks&&void 0===(value=hooks.set(elem,value,extra))||(isCustomProp?style.setProperty(name,value):style[name]=value))}},css:function(elem,name,extra,styles){var val,num,hooks,origName=camelCase(name);return rcustomProp.test(name)||(name=finalPropName(origName)),(hooks=jQuery.cssHooks[name]||jQuery.cssHooks[origName])&&"get"in hooks&&(val=hooks.get(elem,!0,extra)),void 0===val&&(val=curCSS(elem,name,styles)),"normal"===val&&name in cssNormalTransform&&(val=cssNormalTransform[name]),""===extra||extra?(num=parseFloat(val),!0===extra||isFinite(num)?num||0:val):val}}),jQuery.each(["height","width"],function(i,dimension){jQuery.cssHooks[dimension]={get:function(elem,computed,extra){if(computed)return!rdisplayswap.test(jQuery.css(elem,"display"))||elem.getClientRects().length&&elem.getBoundingClientRect().width?getWidthOrHeight(elem,dimension,extra):swap(elem,cssShow,function(){return getWidthOrHeight(elem,dimension,extra)})},set:function(elem,value,extra){var matches,styles=getStyles(elem),isBorderBox="border-box"===jQuery.css(elem,"boxSizing",!1,styles),subtract=extra&&boxModelAdjustment(elem,dimension,extra,isBorderBox,styles);return isBorderBox&&support.scrollboxSize()===styles.position&&(subtract-=Math.ceil(elem["offset"+dimension[0].toUpperCase()+dimension.slice(1)]-parseFloat(styles[dimension])-boxModelAdjustment(elem,dimension,"border",!1,styles)-.5)),subtract&&(matches=rcssNum.exec(value))&&"px"!==(matches[3]||"px")&&(elem.style[dimension]=value,value=jQuery.css(elem,dimension)),setPositiveNumber(0,value,subtract)}}}),jQuery.cssHooks.marginLeft=addGetHookIf(support.reliableMarginLeft,function(elem,computed){if(computed)return(parseFloat(curCSS(elem,"marginLeft"))||elem.getBoundingClientRect().left-swap(elem,{marginLeft:0},function(){return elem.getBoundingClientRect().left}))+"px"}),jQuery.each({margin:"",padding:"",border:"Width"},function(prefix,suffix){jQuery.cssHooks[prefix+suffix]={expand:function(value){for(var i=0,expanded={},parts="string"==typeof value?value.split(" "):[value];i<4;i++)expanded[prefix+cssExpand[i]+suffix]=parts[i]||parts[i-2]||parts[0];return expanded}},"margin"!==prefix&&(jQuery.cssHooks[prefix+suffix].set=setPositiveNumber)}),jQuery.fn.extend({css:function(name,value){return access(this,function(elem,name,value){var styles,len,map={},i=0;if(Array.isArray(name)){for(styles=getStyles(elem),len=name.length;i<len;i++)map[name[i]]=jQuery.css(elem,name[i],!1,styles);return map}return void 0!==value?jQuery.style(elem,name,value):jQuery.css(elem,name)},name,value,arguments.length>1)}}),jQuery.Tween=Tween,Tween.prototype={constructor:Tween,init:function(elem,options,prop,end,easing,unit){this.elem=elem,this.prop=prop,this.easing=easing||jQuery.easing._default,this.options=options,this.start=this.now=this.cur(),this.end=end,this.unit=unit||(jQuery.cssNumber[prop]?"":"px")},cur:function(){var hooks=Tween.propHooks[this.prop];return hooks&&hooks.get?hooks.get(this):Tween.propHooks._default.get(this)},run:function(percent){var eased,hooks=Tween.propHooks[this.prop];return this.options.duration?this.pos=eased=jQuery.easing[this.easing](percent,this.options.duration*percent,0,1,this.options.duration):this.pos=eased=percent,this.now=(this.end-this.start)*eased+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),hooks&&hooks.set?hooks.set(this):Tween.propHooks._default.set(this),this}},Tween.prototype.init.prototype=Tween.prototype,Tween.propHooks={_default:{get:function(tween){var result;return 1!==tween.elem.nodeType||null!=tween.elem[tween.prop]&&null==tween.elem.style[tween.prop]?tween.elem[tween.prop]:(result=jQuery.css(tween.elem,tween.prop,""))&&"auto"!==result?result:0},set:function(tween){jQuery.fx.step[tween.prop]?jQuery.fx.step[tween.prop](tween):1!==tween.elem.nodeType||null==tween.elem.style[jQuery.cssProps[tween.prop]]&&!jQuery.cssHooks[tween.prop]?tween.elem[tween.prop]=tween.now:jQuery.style(tween.elem,tween.prop,tween.now+tween.unit)}}},Tween.propHooks.scrollTop=Tween.propHooks.scrollLeft={set:function(tween){tween.elem.nodeType&&tween.elem.parentNode&&(tween.elem[tween.prop]=tween.now)}},jQuery.easing={linear:function(p){return p},swing:function(p){return.5-Math.cos(p*Math.PI)/2},_default:"swing"},jQuery.fx=Tween.prototype.init,jQuery.fx.step={};var fxNow,inProgress,rfxtypes=/^(?:toggle|show|hide)$/,rrun=/queueHooks$/;function schedule(){inProgress&&(!1===document.hidden&&window.requestAnimationFrame?window.requestAnimationFrame(schedule):window.setTimeout(schedule,jQuery.fx.interval),jQuery.fx.tick())}function createFxNow(){return window.setTimeout(function(){fxNow=void 0}),fxNow=Date.now()}function genFx(type,includeWidth){var which,i=0,attrs={height:type};for(includeWidth=includeWidth?1:0;i<4;i+=2-includeWidth)attrs["margin"+(which=cssExpand[i])]=attrs["padding"+which]=type;return includeWidth&&(attrs.opacity=attrs.width=type),attrs}function createTween(value,prop,animation){for(var tween,collection=(Animation.tweeners[prop]||[]).concat(Animation.tweeners["*"]),index=0,length=collection.length;index<length;index++)if(tween=collection[index].call(animation,prop,value))return tween}function Animation(elem,properties,options){var result,stopped,index=0,length=Animation.prefilters.length,deferred=jQuery.Deferred().always(function(){delete tick.elem}),tick=function(){if(stopped)return!1;for(var currentTime=fxNow||createFxNow(),remaining=Math.max(0,animation.startTime+animation.duration-currentTime),percent=1-(remaining/animation.duration||0),index=0,length=animation.tweens.length;index<length;index++)animation.tweens[index].run(percent);return deferred.notifyWith(elem,[animation,percent,remaining]),percent<1&&length?remaining:(length||deferred.notifyWith(elem,[animation,1,0]),deferred.resolveWith(elem,[animation]),!1)},animation=deferred.promise({elem:elem,props:jQuery.extend({},properties),opts:jQuery.extend(!0,{specialEasing:{},easing:jQuery.easing._default},options),originalProperties:properties,originalOptions:options,startTime:fxNow||createFxNow(),duration:options.duration,tweens:[],createTween:function(prop,end){var tween=jQuery.Tween(elem,animation.opts,prop,end,animation.opts.specialEasing[prop]||animation.opts.easing);return animation.tweens.push(tween),tween},stop:function(gotoEnd){var index=0,length=gotoEnd?animation.tweens.length:0;if(stopped)return this;for(stopped=!0;index<length;index++)animation.tweens[index].run(1);return gotoEnd?(deferred.notifyWith(elem,[animation,1,0]),deferred.resolveWith(elem,[animation,gotoEnd])):deferred.rejectWith(elem,[animation,gotoEnd]),this}}),props=animation.props;for(!function(props,specialEasing){var index,name,easing,value,hooks;for(index in props)if(easing=specialEasing[name=camelCase(index)],value=props[index],Array.isArray(value)&&(easing=value[1],value=props[index]=value[0]),index!==name&&(props[name]=value,delete props[index]),(hooks=jQuery.cssHooks[name])&&"expand"in hooks)for(index in value=hooks.expand(value),delete props[name],value)index in props||(props[index]=value[index],specialEasing[index]=easing);else specialEasing[name]=easing}(props,animation.opts.specialEasing);index<length;index++)if(result=Animation.prefilters[index].call(animation,elem,props,animation.opts))return isFunction(result.stop)&&(jQuery._queueHooks(animation.elem,animation.opts.queue).stop=result.stop.bind(result)),result;return jQuery.map(props,createTween,animation),isFunction(animation.opts.start)&&animation.opts.start.call(elem,animation),animation.progress(animation.opts.progress).done(animation.opts.done,animation.opts.complete).fail(animation.opts.fail).always(animation.opts.always),jQuery.fx.timer(jQuery.extend(tick,{elem:elem,anim:animation,queue:animation.opts.queue})),animation}jQuery.Animation=jQuery.extend(Animation,{tweeners:{"*":[function(prop,value){var tween=this.createTween(prop,value);return adjustCSS(tween.elem,prop,rcssNum.exec(value),tween),tween}]},tweener:function(props,callback){isFunction(props)?(callback=props,props=["*"]):props=props.match(rnothtmlwhite);for(var prop,index=0,length=props.length;index<length;index++)prop=props[index],Animation.tweeners[prop]=Animation.tweeners[prop]||[],Animation.tweeners[prop].unshift(callback)},prefilters:[function(elem,props,opts){var prop,value,toggle,hooks,oldfire,propTween,restoreDisplay,display,isBox="width"in props||"height"in props,anim=this,orig={},style=elem.style,hidden=elem.nodeType&&isHiddenWithinTree(elem),dataShow=dataPriv.get(elem,"fxshow");for(prop in opts.queue||(null==(hooks=jQuery._queueHooks(elem,"fx")).unqueued&&(hooks.unqueued=0,oldfire=hooks.empty.fire,hooks.empty.fire=function(){hooks.unqueued||oldfire()}),hooks.unqueued++,anim.always(function(){anim.always(function(){hooks.unqueued--,jQuery.queue(elem,"fx").length||hooks.empty.fire()})})),props)if(value=props[prop],rfxtypes.test(value)){if(delete props[prop],toggle=toggle||"toggle"===value,value===(hidden?"hide":"show")){if("show"!==value||!dataShow||void 0===dataShow[prop])continue;hidden=!0}orig[prop]=dataShow&&dataShow[prop]||jQuery.style(elem,prop)}if((propTween=!jQuery.isEmptyObject(props))||!jQuery.isEmptyObject(orig))for(prop in isBox&&1===elem.nodeType&&(opts.overflow=[style.overflow,style.overflowX,style.overflowY],null==(restoreDisplay=dataShow&&dataShow.display)&&(restoreDisplay=dataPriv.get(elem,"display")),"none"===(display=jQuery.css(elem,"display"))&&(restoreDisplay?display=restoreDisplay:(showHide([elem],!0),restoreDisplay=elem.style.display||restoreDisplay,display=jQuery.css(elem,"display"),showHide([elem]))),("inline"===display||"inline-block"===display&&null!=restoreDisplay)&&"none"===jQuery.css(elem,"float")&&(propTween||(anim.done(function(){style.display=restoreDisplay}),null==restoreDisplay&&(display=style.display,restoreDisplay="none"===display?"":display)),style.display="inline-block")),opts.overflow&&(style.overflow="hidden",anim.always(function(){style.overflow=opts.overflow[0],style.overflowX=opts.overflow[1],style.overflowY=opts.overflow[2]})),propTween=!1,orig)propTween||(dataShow?"hidden"in dataShow&&(hidden=dataShow.hidden):dataShow=dataPriv.access(elem,"fxshow",{display:restoreDisplay}),toggle&&(dataShow.hidden=!hidden),hidden&&showHide([elem],!0),anim.done(function(){for(prop in hidden||showHide([elem]),dataPriv.remove(elem,"fxshow"),orig)jQuery.style(elem,prop,orig[prop])})),propTween=createTween(hidden?dataShow[prop]:0,prop,anim),prop in dataShow||(dataShow[prop]=propTween.start,hidden&&(propTween.end=propTween.start,propTween.start=0))}],prefilter:function(callback,prepend){prepend?Animation.prefilters.unshift(callback):Animation.prefilters.push(callback)}}),jQuery.speed=function(speed,easing,fn){var opt=speed&&"object"==typeof speed?jQuery.extend({},speed):{complete:fn||!fn&&easing||isFunction(speed)&&speed,duration:speed,easing:fn&&easing||easing&&!isFunction(easing)&&easing};return jQuery.fx.off?opt.duration=0:"number"!=typeof opt.duration&&(opt.duration in jQuery.fx.speeds?opt.duration=jQuery.fx.speeds[opt.duration]:opt.duration=jQuery.fx.speeds._default),null!=opt.queue&&!0!==opt.queue||(opt.queue="fx"),opt.old=opt.complete,opt.complete=function(){isFunction(opt.old)&&opt.old.call(this),opt.queue&&jQuery.dequeue(this,opt.queue)},opt},jQuery.fn.extend({fadeTo:function(speed,to,easing,callback){return this.filter(isHiddenWithinTree).css("opacity",0).show().end().animate({opacity:to},speed,easing,callback)},animate:function(prop,speed,easing,callback){var empty=jQuery.isEmptyObject(prop),optall=jQuery.speed(speed,easing,callback),doAnimation=function(){var anim=Animation(this,jQuery.extend({},prop),optall);(empty||dataPriv.get(this,"finish"))&&anim.stop(!0)};return doAnimation.finish=doAnimation,empty||!1===optall.queue?this.each(doAnimation):this.queue(optall.queue,doAnimation)},stop:function(type,clearQueue,gotoEnd){var stopQueue=function(hooks){var stop=hooks.stop;delete hooks.stop,stop(gotoEnd)};return"string"!=typeof type&&(gotoEnd=clearQueue,clearQueue=type,type=void 0),clearQueue&&!1!==type&&this.queue(type||"fx",[]),this.each(function(){var dequeue=!0,index=null!=type&&type+"queueHooks",timers=jQuery.timers,data=dataPriv.get(this);if(index)data[index]&&data[index].stop&&stopQueue(data[index]);else for(index in data)data[index]&&data[index].stop&&rrun.test(index)&&stopQueue(data[index]);for(index=timers.length;index--;)timers[index].elem!==this||null!=type&&timers[index].queue!==type||(timers[index].anim.stop(gotoEnd),dequeue=!1,timers.splice(index,1));!dequeue&&gotoEnd||jQuery.dequeue(this,type)})},finish:function(type){return!1!==type&&(type=type||"fx"),this.each(function(){var index,data=dataPriv.get(this),queue=data[type+"queue"],hooks=data[type+"queueHooks"],timers=jQuery.timers,length=queue?queue.length:0;for(data.finish=!0,jQuery.queue(this,type,[]),hooks&&hooks.stop&&hooks.stop.call(this,!0),index=timers.length;index--;)timers[index].elem===this&&timers[index].queue===type&&(timers[index].anim.stop(!0),timers.splice(index,1));for(index=0;index<length;index++)queue[index]&&queue[index].finish&&queue[index].finish.call(this);delete data.finish})}}),jQuery.each(["toggle","show","hide"],function(i,name){var cssFn=jQuery.fn[name];jQuery.fn[name]=function(speed,easing,callback){return null==speed||"boolean"==typeof speed?cssFn.apply(this,arguments):this.animate(genFx(name,!0),speed,easing,callback)}}),jQuery.each({slideDown:genFx("show"),slideUp:genFx("hide"),slideToggle:genFx("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(name,props){jQuery.fn[name]=function(speed,easing,callback){return this.animate(props,speed,easing,callback)}}),jQuery.timers=[],jQuery.fx.tick=function(){var timer,i=0,timers=jQuery.timers;for(fxNow=Date.now();i<timers.length;i++)(timer=timers[i])()||timers[i]!==timer||timers.splice(i--,1);timers.length||jQuery.fx.stop(),fxNow=void 0},jQuery.fx.timer=function(timer){jQuery.timers.push(timer),jQuery.fx.start()},jQuery.fx.interval=13,jQuery.fx.start=function(){inProgress||(inProgress=!0,schedule())},jQuery.fx.stop=function(){inProgress=null},jQuery.fx.speeds={slow:600,fast:200,_default:400},jQuery.fn.delay=function(time,type){return time=jQuery.fx&&jQuery.fx.speeds[time]||time,type=type||"fx",this.queue(type,function(next,hooks){var timeout=window.setTimeout(next,time);hooks.stop=function(){window.clearTimeout(timeout)}})},function(){var input=document.createElement("input"),opt=document.createElement("select").appendChild(document.createElement("option"));input.type="checkbox",support.checkOn=""!==input.value,support.optSelected=opt.selected,(input=document.createElement("input")).value="t",input.type="radio",support.radioValue="t"===input.value}();var boolHook,attrHandle=jQuery.expr.attrHandle;jQuery.fn.extend({attr:function(name,value){return access(this,jQuery.attr,name,value,arguments.length>1)},removeAttr:function(name){return this.each(function(){jQuery.removeAttr(this,name)})}}),jQuery.extend({attr:function(elem,name,value){var ret,hooks,nType=elem.nodeType;if(3!==nType&&8!==nType&&2!==nType)return void 0===elem.getAttribute?jQuery.prop(elem,name,value):(1===nType&&jQuery.isXMLDoc(elem)||(hooks=jQuery.attrHooks[name.toLowerCase()]||(jQuery.expr.match.bool.test(name)?boolHook:void 0)),void 0!==value?null===value?void jQuery.removeAttr(elem,name):hooks&&"set"in hooks&&void 0!==(ret=hooks.set(elem,value,name))?ret:(elem.setAttribute(name,value+""),value):hooks&&"get"in hooks&&null!==(ret=hooks.get(elem,name))?ret:null==(ret=jQuery.find.attr(elem,name))?void 0:ret)},attrHooks:{type:{set:function(elem,value){if(!support.radioValue&&"radio"===value&&nodeName(elem,"input")){var val=elem.value;return elem.setAttribute("type",value),val&&(elem.value=val),value}}}},removeAttr:function(elem,value){var name,i=0,attrNames=value&&value.match(rnothtmlwhite);if(attrNames&&1===elem.nodeType)for(;name=attrNames[i++];)elem.removeAttribute(name)}}),boolHook={set:function(elem,value,name){return!1===value?jQuery.removeAttr(elem,name):elem.setAttribute(name,name),name}},jQuery.each(jQuery.expr.match.bool.source.match(/\w+/g),function(i,name){var getter=attrHandle[name]||jQuery.find.attr;attrHandle[name]=function(elem,name,isXML){var ret,handle,lowercaseName=name.toLowerCase();return isXML||(handle=attrHandle[lowercaseName],attrHandle[lowercaseName]=ret,ret=null!=getter(elem,name,isXML)?lowercaseName:null,attrHandle[lowercaseName]=handle),ret}});var rfocusable=/^(?:input|select|textarea|button)$/i,rclickable=/^(?:a|area)$/i;function stripAndCollapse(value){return(value.match(rnothtmlwhite)||[]).join(" ")}function getClass(elem){return elem.getAttribute&&elem.getAttribute("class")||""}function classesToArray(value){return Array.isArray(value)?value:"string"==typeof value&&value.match(rnothtmlwhite)||[]}jQuery.fn.extend({prop:function(name,value){return access(this,jQuery.prop,name,value,arguments.length>1)},removeProp:function(name){return this.each(function(){delete this[jQuery.propFix[name]||name]})}}),jQuery.extend({prop:function(elem,name,value){var ret,hooks,nType=elem.nodeType;if(3!==nType&&8!==nType&&2!==nType)return 1===nType&&jQuery.isXMLDoc(elem)||(name=jQuery.propFix[name]||name,hooks=jQuery.propHooks[name]),void 0!==value?hooks&&"set"in hooks&&void 0!==(ret=hooks.set(elem,value,name))?ret:elem[name]=value:hooks&&"get"in hooks&&null!==(ret=hooks.get(elem,name))?ret:elem[name]},propHooks:{tabIndex:{get:function(elem){var tabindex=jQuery.find.attr(elem,"tabindex");return tabindex?parseInt(tabindex,10):rfocusable.test(elem.nodeName)||rclickable.test(elem.nodeName)&&elem.href?0:-1}}},propFix:{for:"htmlFor",class:"className"}}),support.optSelected||(jQuery.propHooks.selected={get:function(elem){var parent=elem.parentNode;return parent&&parent.parentNode&&parent.parentNode.selectedIndex,null},set:function(elem){var parent=elem.parentNode;parent&&(parent.selectedIndex,parent.parentNode&&parent.parentNode.selectedIndex)}}),jQuery.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){jQuery.propFix[this.toLowerCase()]=this}),jQuery.fn.extend({addClass:function(value){var classes,elem,cur,curValue,clazz,j,finalValue,i=0;if(isFunction(value))return this.each(function(j){jQuery(this).addClass(value.call(this,j,getClass(this)))});if((classes=classesToArray(value)).length)for(;elem=this[i++];)if(curValue=getClass(elem),cur=1===elem.nodeType&&" "+stripAndCollapse(curValue)+" "){for(j=0;clazz=classes[j++];)cur.indexOf(" "+clazz+" ")<0&&(cur+=clazz+" ");curValue!==(finalValue=stripAndCollapse(cur))&&elem.setAttribute("class",finalValue)}return this},removeClass:function(value){var classes,elem,cur,curValue,clazz,j,finalValue,i=0;if(isFunction(value))return this.each(function(j){jQuery(this).removeClass(value.call(this,j,getClass(this)))});if(!arguments.length)return this.attr("class","");if((classes=classesToArray(value)).length)for(;elem=this[i++];)if(curValue=getClass(elem),cur=1===elem.nodeType&&" "+stripAndCollapse(curValue)+" "){for(j=0;clazz=classes[j++];)for(;cur.indexOf(" "+clazz+" ")>-1;)cur=cur.replace(" "+clazz+" "," ");curValue!==(finalValue=stripAndCollapse(cur))&&elem.setAttribute("class",finalValue)}return this},toggleClass:function(value,stateVal){var type=typeof value,isValidValue="string"===type||Array.isArray(value);return"boolean"==typeof stateVal&&isValidValue?stateVal?this.addClass(value):this.removeClass(value):isFunction(value)?this.each(function(i){jQuery(this).toggleClass(value.call(this,i,getClass(this),stateVal),stateVal)}):this.each(function(){var className,i,self,classNames;if(isValidValue)for(i=0,self=jQuery(this),classNames=classesToArray(value);className=classNames[i++];)self.hasClass(className)?self.removeClass(className):self.addClass(className);else void 0!==value&&"boolean"!==type||((className=getClass(this))&&dataPriv.set(this,"__className__",className),this.setAttribute&&this.setAttribute("class",className||!1===value?"":dataPriv.get(this,"__className__")||""))})},hasClass:function(selector){var className,elem,i=0;for(className=" "+selector+" ";elem=this[i++];)if(1===elem.nodeType&&(" "+stripAndCollapse(getClass(elem))+" ").indexOf(className)>-1)return!0;return!1}});var rreturn=/\r/g;jQuery.fn.extend({val:function(value){var hooks,ret,valueIsFunction,elem=this[0];return arguments.length?(valueIsFunction=isFunction(value),this.each(function(i){var val;1===this.nodeType&&(null==(val=valueIsFunction?value.call(this,i,jQuery(this).val()):value)?val="":"number"==typeof val?val+="":Array.isArray(val)&&(val=jQuery.map(val,function(value){return null==value?"":value+""})),(hooks=jQuery.valHooks[this.type]||jQuery.valHooks[this.nodeName.toLowerCase()])&&"set"in hooks&&void 0!==hooks.set(this,val,"value")||(this.value=val))})):elem?(hooks=jQuery.valHooks[elem.type]||jQuery.valHooks[elem.nodeName.toLowerCase()])&&"get"in hooks&&void 0!==(ret=hooks.get(elem,"value"))?ret:"string"==typeof(ret=elem.value)?ret.replace(rreturn,""):null==ret?"":ret:void 0}}),jQuery.extend({valHooks:{option:{get:function(elem){var val=jQuery.find.attr(elem,"value");return null!=val?val:stripAndCollapse(jQuery.text(elem))}},select:{get:function(elem){var value,option,i,options=elem.options,index=elem.selectedIndex,one="select-one"===elem.type,values=one?null:[],max=one?index+1:options.length;for(i=index<0?max:one?index:0;i<max;i++)if(((option=options[i]).selected||i===index)&&!option.disabled&&(!option.parentNode.disabled||!nodeName(option.parentNode,"optgroup"))){if(value=jQuery(option).val(),one)return value;values.push(value)}return values},set:function(elem,value){for(var optionSet,option,options=elem.options,values=jQuery.makeArray(value),i=options.length;i--;)((option=options[i]).selected=jQuery.inArray(jQuery.valHooks.option.get(option),values)>-1)&&(optionSet=!0);return optionSet||(elem.selectedIndex=-1),values}}}}),jQuery.each(["radio","checkbox"],function(){jQuery.valHooks[this]={set:function(elem,value){if(Array.isArray(value))return elem.checked=jQuery.inArray(jQuery(elem).val(),value)>-1}},support.checkOn||(jQuery.valHooks[this].get=function(elem){return null===elem.getAttribute("value")?"on":elem.value})}),support.focusin="onfocusin"in window;var rfocusMorph=/^(?:focusinfocus|focusoutblur)$/,stopPropagationCallback=function(e){e.stopPropagation()};jQuery.extend(jQuery.event,{trigger:function(event,data,elem,onlyHandlers){var i,cur,tmp,bubbleType,ontype,handle,special,lastElement,eventPath=[elem||document],type=hasOwn.call(event,"type")?event.type:event,namespaces=hasOwn.call(event,"namespace")?event.namespace.split("."):[];if(cur=lastElement=tmp=elem=elem||document,3!==elem.nodeType&&8!==elem.nodeType&&!rfocusMorph.test(type+jQuery.event.triggered)&&(type.indexOf(".")>-1&&(type=(namespaces=type.split(".")).shift(),namespaces.sort()),ontype=type.indexOf(":")<0&&"on"+type,(event=event[jQuery.expando]?event:new jQuery.Event(type,"object"==typeof event&&event)).isTrigger=onlyHandlers?2:3,event.namespace=namespaces.join("."),event.rnamespace=event.namespace?new RegExp("(^|\\.)"+namespaces.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,event.result=void 0,event.target||(event.target=elem),data=null==data?[event]:jQuery.makeArray(data,[event]),special=jQuery.event.special[type]||{},onlyHandlers||!special.trigger||!1!==special.trigger.apply(elem,data))){if(!onlyHandlers&&!special.noBubble&&!isWindow(elem)){for(bubbleType=special.delegateType||type,rfocusMorph.test(bubbleType+type)||(cur=cur.parentNode);cur;cur=cur.parentNode)eventPath.push(cur),tmp=cur;tmp===(elem.ownerDocument||document)&&eventPath.push(tmp.defaultView||tmp.parentWindow||window)}for(i=0;(cur=eventPath[i++])&&!event.isPropagationStopped();)lastElement=cur,event.type=i>1?bubbleType:special.bindType||type,(handle=(dataPriv.get(cur,"events")||{})[event.type]&&dataPriv.get(cur,"handle"))&&handle.apply(cur,data),(handle=ontype&&cur[ontype])&&handle.apply&&acceptData(cur)&&(event.result=handle.apply(cur,data),!1===event.result&&event.preventDefault());return event.type=type,onlyHandlers||event.isDefaultPrevented()||special._default&&!1!==special._default.apply(eventPath.pop(),data)||!acceptData(elem)||ontype&&isFunction(elem[type])&&!isWindow(elem)&&((tmp=elem[ontype])&&(elem[ontype]=null),jQuery.event.triggered=type,event.isPropagationStopped()&&lastElement.addEventListener(type,stopPropagationCallback),elem[type](),event.isPropagationStopped()&&lastElement.removeEventListener(type,stopPropagationCallback),jQuery.event.triggered=void 0,tmp&&(elem[ontype]=tmp)),event.result}},simulate:function(type,elem,event){var e=jQuery.extend(new jQuery.Event,event,{type:type,isSimulated:!0});jQuery.event.trigger(e,null,elem)}}),jQuery.fn.extend({trigger:function(type,data){return this.each(function(){jQuery.event.trigger(type,data,this)})},triggerHandler:function(type,data){var elem=this[0];if(elem)return jQuery.event.trigger(type,data,elem,!0)}}),support.focusin||jQuery.each({focus:"focusin",blur:"focusout"},function(orig,fix){var handler=function(event){jQuery.event.simulate(fix,event.target,jQuery.event.fix(event))};jQuery.event.special[fix]={setup:function(){var doc=this.ownerDocument||this,attaches=dataPriv.access(doc,fix);attaches||doc.addEventListener(orig,handler,!0),dataPriv.access(doc,fix,(attaches||0)+1)},teardown:function(){var doc=this.ownerDocument||this,attaches=dataPriv.access(doc,fix)-1;attaches?dataPriv.access(doc,fix,attaches):(doc.removeEventListener(orig,handler,!0),dataPriv.remove(doc,fix))}}});var location=window.location,nonce=Date.now(),rquery=/\?/;jQuery.parseXML=function(data){var xml;if(!data||"string"!=typeof data)return null;try{xml=(new window.DOMParser).parseFromString(data,"text/xml")}catch(e){xml=void 0}return xml&&!xml.getElementsByTagName("parsererror").length||jQuery.error("Invalid XML: "+data),xml};var rbracket=/\[\]$/,rCRLF=/\r?\n/g,rsubmitterTypes=/^(?:submit|button|image|reset|file)$/i,rsubmittable=/^(?:input|select|textarea|keygen)/i;function buildParams(prefix,obj,traditional,add){var name;if(Array.isArray(obj))jQuery.each(obj,function(i,v){traditional||rbracket.test(prefix)?add(prefix,v):buildParams(prefix+"["+("object"==typeof v&&null!=v?i:"")+"]",v,traditional,add)});else if(traditional||"object"!==toType(obj))add(prefix,obj);else for(name in obj)buildParams(prefix+"["+name+"]",obj[name],traditional,add)}jQuery.param=function(a,traditional){var prefix,s=[],add=function(key,valueOrFunction){var value=isFunction(valueOrFunction)?valueOrFunction():valueOrFunction;s[s.length]=encodeURIComponent(key)+"="+encodeURIComponent(null==value?"":value)};if(Array.isArray(a)||a.jquery&&!jQuery.isPlainObject(a))jQuery.each(a,function(){add(this.name,this.value)});else for(prefix in a)buildParams(prefix,a[prefix],traditional,add);return s.join("&")},jQuery.fn.extend({serialize:function(){return jQuery.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var elements=jQuery.prop(this,"elements");return elements?jQuery.makeArray(elements):this}).filter(function(){var type=this.type;return this.name&&!jQuery(this).is(":disabled")&&rsubmittable.test(this.nodeName)&&!rsubmitterTypes.test(type)&&(this.checked||!rcheckableType.test(type))}).map(function(i,elem){var val=jQuery(this).val();return null==val?null:Array.isArray(val)?jQuery.map(val,function(val){return{name:elem.name,value:val.replace(rCRLF,"\r\n")}}):{name:elem.name,value:val.replace(rCRLF,"\r\n")}}).get()}});var r20=/%20/g,rhash=/#.*$/,rantiCache=/([?&])_=[^&]*/,rheaders=/^(.*?):[ \t]*([^\r\n]*)$/gm,rnoContent=/^(?:GET|HEAD)$/,rprotocol=/^\/\//,prefilters={},transports={},allTypes="*/".concat("*"),originAnchor=document.createElement("a");function addToPrefiltersOrTransports(structure){return function(dataTypeExpression,func){"string"!=typeof dataTypeExpression&&(func=dataTypeExpression,dataTypeExpression="*");var dataType,i=0,dataTypes=dataTypeExpression.toLowerCase().match(rnothtmlwhite)||[];if(isFunction(func))for(;dataType=dataTypes[i++];)"+"===dataType[0]?(dataType=dataType.slice(1)||"*",(structure[dataType]=structure[dataType]||[]).unshift(func)):(structure[dataType]=structure[dataType]||[]).push(func)}}function inspectPrefiltersOrTransports(structure,options,originalOptions,jqXHR){var inspected={},seekingTransport=structure===transports;function inspect(dataType){var selected;return inspected[dataType]=!0,jQuery.each(structure[dataType]||[],function(_,prefilterOrFactory){var dataTypeOrTransport=prefilterOrFactory(options,originalOptions,jqXHR);return"string"!=typeof dataTypeOrTransport||seekingTransport||inspected[dataTypeOrTransport]?seekingTransport?!(selected=dataTypeOrTransport):void 0:(options.dataTypes.unshift(dataTypeOrTransport),inspect(dataTypeOrTransport),!1)}),selected}return inspect(options.dataTypes[0])||!inspected["*"]&&inspect("*")}function ajaxExtend(target,src){var key,deep,flatOptions=jQuery.ajaxSettings.flatOptions||{};for(key in src)void 0!==src[key]&&((flatOptions[key]?target:deep||(deep={}))[key]=src[key]);return deep&&jQuery.extend(!0,target,deep),target}originAnchor.href=location.href,jQuery.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:location.href,type:"GET",isLocal:/^(?:about|app|app-storage|.+-extension|file|res|widget):$/.test(location.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":allTypes,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":JSON.parse,"text xml":jQuery.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(target,settings){return settings?ajaxExtend(ajaxExtend(target,jQuery.ajaxSettings),settings):ajaxExtend(jQuery.ajaxSettings,target)},ajaxPrefilter:addToPrefiltersOrTransports(prefilters),ajaxTransport:addToPrefiltersOrTransports(transports),ajax:function(url,options){"object"==typeof url&&(options=url,url=void 0),options=options||{};var transport,cacheURL,responseHeadersString,responseHeaders,timeoutTimer,urlAnchor,completed,fireGlobals,i,uncached,s=jQuery.ajaxSetup({},options),callbackContext=s.context||s,globalEventContext=s.context&&(callbackContext.nodeType||callbackContext.jquery)?jQuery(callbackContext):jQuery.event,deferred=jQuery.Deferred(),completeDeferred=jQuery.Callbacks("once memory"),statusCode=s.statusCode||{},requestHeaders={},requestHeadersNames={},strAbort="canceled",jqXHR={readyState:0,getResponseHeader:function(key){var match;if(completed){if(!responseHeaders)for(responseHeaders={};match=rheaders.exec(responseHeadersString);)responseHeaders[match[1].toLowerCase()]=match[2];match=responseHeaders[key.toLowerCase()]}return null==match?null:match},getAllResponseHeaders:function(){return completed?responseHeadersString:null},setRequestHeader:function(name,value){return null==completed&&(name=requestHeadersNames[name.toLowerCase()]=requestHeadersNames[name.toLowerCase()]||name,requestHeaders[name]=value),this},overrideMimeType:function(type){return null==completed&&(s.mimeType=type),this},statusCode:function(map){var code;if(map)if(completed)jqXHR.always(map[jqXHR.status]);else for(code in map)statusCode[code]=[statusCode[code],map[code]];return this},abort:function(statusText){var finalText=statusText||strAbort;return transport&&transport.abort(finalText),done(0,finalText),this}};if(deferred.promise(jqXHR),s.url=((url||s.url||location.href)+"").replace(rprotocol,location.protocol+"//"),s.type=options.method||options.type||s.method||s.type,s.dataTypes=(s.dataType||"*").toLowerCase().match(rnothtmlwhite)||[""],null==s.crossDomain){urlAnchor=document.createElement("a");try{urlAnchor.href=s.url,urlAnchor.href=urlAnchor.href,s.crossDomain=originAnchor.protocol+"//"+originAnchor.host!=urlAnchor.protocol+"//"+urlAnchor.host}catch(e){s.crossDomain=!0}}if(s.data&&s.processData&&"string"!=typeof s.data&&(s.data=jQuery.param(s.data,s.traditional)),inspectPrefiltersOrTransports(prefilters,s,options,jqXHR),completed)return jqXHR;for(i in(fireGlobals=jQuery.event&&s.global)&&0==jQuery.active++&&jQuery.event.trigger("ajaxStart"),s.type=s.type.toUpperCase(),s.hasContent=!rnoContent.test(s.type),cacheURL=s.url.replace(rhash,""),s.hasContent?s.data&&s.processData&&0===(s.contentType||"").indexOf("application/x-www-form-urlencoded")&&(s.data=s.data.replace(r20,"+")):(uncached=s.url.slice(cacheURL.length),s.data&&(s.processData||"string"==typeof s.data)&&(cacheURL+=(rquery.test(cacheURL)?"&":"?")+s.data,delete s.data),!1===s.cache&&(cacheURL=cacheURL.replace(rantiCache,"$1"),uncached=(rquery.test(cacheURL)?"&":"?")+"_="+nonce+++uncached),s.url=cacheURL+uncached),s.ifModified&&(jQuery.lastModified[cacheURL]&&jqXHR.setRequestHeader("If-Modified-Since",jQuery.lastModified[cacheURL]),jQuery.etag[cacheURL]&&jqXHR.setRequestHeader("If-None-Match",jQuery.etag[cacheURL])),(s.data&&s.hasContent&&!1!==s.contentType||options.contentType)&&jqXHR.setRequestHeader("Content-Type",s.contentType),jqXHR.setRequestHeader("Accept",s.dataTypes[0]&&s.accepts[s.dataTypes[0]]?s.accepts[s.dataTypes[0]]+("*"!==s.dataTypes[0]?", "+allTypes+"; q=0.01":""):s.accepts["*"]),s.headers)jqXHR.setRequestHeader(i,s.headers[i]);if(s.beforeSend&&(!1===s.beforeSend.call(callbackContext,jqXHR,s)||completed))return jqXHR.abort();if(strAbort="abort",completeDeferred.add(s.complete),jqXHR.done(s.success),jqXHR.fail(s.error),transport=inspectPrefiltersOrTransports(transports,s,options,jqXHR)){if(jqXHR.readyState=1,fireGlobals&&globalEventContext.trigger("ajaxSend",[jqXHR,s]),completed)return jqXHR;s.async&&s.timeout>0&&(timeoutTimer=window.setTimeout(function(){jqXHR.abort("timeout")},s.timeout));try{completed=!1,transport.send(requestHeaders,done)}catch(e){if(completed)throw e;done(-1,e)}}else done(-1,"No Transport");function done(status,nativeStatusText,responses,headers){var isSuccess,success,error,response,modified,statusText=nativeStatusText;completed||(completed=!0,timeoutTimer&&window.clearTimeout(timeoutTimer),transport=void 0,responseHeadersString=headers||"",jqXHR.readyState=status>0?4:0,isSuccess=status>=200&&status<300||304===status,responses&&(response=function(s,jqXHR,responses){for(var ct,type,finalDataType,firstDataType,contents=s.contents,dataTypes=s.dataTypes;"*"===dataTypes[0];)dataTypes.shift(),void 0===ct&&(ct=s.mimeType||jqXHR.getResponseHeader("Content-Type"));if(ct)for(type in contents)if(contents[type]&&contents[type].test(ct)){dataTypes.unshift(type);break}if(dataTypes[0]in responses)finalDataType=dataTypes[0];else{for(type in responses){if(!dataTypes[0]||s.converters[type+" "+dataTypes[0]]){finalDataType=type;break}firstDataType||(firstDataType=type)}finalDataType=finalDataType||firstDataType}if(finalDataType)return finalDataType!==dataTypes[0]&&dataTypes.unshift(finalDataType),responses[finalDataType]}(s,jqXHR,responses)),response=function(s,response,jqXHR,isSuccess){var conv2,current,conv,tmp,prev,converters={},dataTypes=s.dataTypes.slice();if(dataTypes[1])for(conv in s.converters)converters[conv.toLowerCase()]=s.converters[conv];for(current=dataTypes.shift();current;)if(s.responseFields[current]&&(jqXHR[s.responseFields[current]]=response),!prev&&isSuccess&&s.dataFilter&&(response=s.dataFilter(response,s.dataType)),prev=current,current=dataTypes.shift())if("*"===current)current=prev;else if("*"!==prev&&prev!==current){if(!(conv=converters[prev+" "+current]||converters["* "+current]))for(conv2 in converters)if((tmp=conv2.split(" "))[1]===current&&(conv=converters[prev+" "+tmp[0]]||converters["* "+tmp[0]])){!0===conv?conv=converters[conv2]:!0!==converters[conv2]&&(current=tmp[0],dataTypes.unshift(tmp[1]));break}if(!0!==conv)if(conv&&s.throws)response=conv(response);else try{response=conv(response)}catch(e){return{state:"parsererror",error:conv?e:"No conversion from "+prev+" to "+current}}}return{state:"success",data:response}}(s,response,jqXHR,isSuccess),isSuccess?(s.ifModified&&((modified=jqXHR.getResponseHeader("Last-Modified"))&&(jQuery.lastModified[cacheURL]=modified),(modified=jqXHR.getResponseHeader("etag"))&&(jQuery.etag[cacheURL]=modified)),204===status||"HEAD"===s.type?statusText="nocontent":304===status?statusText="notmodified":(statusText=response.state,success=response.data,isSuccess=!(error=response.error))):(error=statusText,!status&&statusText||(statusText="error",status<0&&(status=0))),jqXHR.status=status,jqXHR.statusText=(nativeStatusText||statusText)+"",isSuccess?deferred.resolveWith(callbackContext,[success,statusText,jqXHR]):deferred.rejectWith(callbackContext,[jqXHR,statusText,error]),jqXHR.statusCode(statusCode),statusCode=void 0,fireGlobals&&globalEventContext.trigger(isSuccess?"ajaxSuccess":"ajaxError",[jqXHR,s,isSuccess?success:error]),completeDeferred.fireWith(callbackContext,[jqXHR,statusText]),fireGlobals&&(globalEventContext.trigger("ajaxComplete",[jqXHR,s]),--jQuery.active||jQuery.event.trigger("ajaxStop")))}return jqXHR},getJSON:function(url,data,callback){return jQuery.get(url,data,callback,"json")},getScript:function(url,callback){return jQuery.get(url,void 0,callback,"script")}}),jQuery.each(["get","post"],function(i,method){jQuery[method]=function(url,data,callback,type){return isFunction(data)&&(type=type||callback,callback=data,data=void 0),jQuery.ajax(jQuery.extend({url:url,type:method,dataType:type,data:data,success:callback},jQuery.isPlainObject(url)&&url))}}),jQuery._evalUrl=function(url){return jQuery.ajax({url:url,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,throws:!0})},jQuery.fn.extend({wrapAll:function(html){var wrap;return this[0]&&(isFunction(html)&&(html=html.call(this[0])),wrap=jQuery(html,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&wrap.insertBefore(this[0]),wrap.map(function(){for(var elem=this;elem.firstElementChild;)elem=elem.firstElementChild;return elem}).append(this)),this},wrapInner:function(html){return isFunction(html)?this.each(function(i){jQuery(this).wrapInner(html.call(this,i))}):this.each(function(){var self=jQuery(this),contents=self.contents();contents.length?contents.wrapAll(html):self.append(html)})},wrap:function(html){var htmlIsFunction=isFunction(html);return this.each(function(i){jQuery(this).wrapAll(htmlIsFunction?html.call(this,i):html)})},unwrap:function(selector){return this.parent(selector).not("body").each(function(){jQuery(this).replaceWith(this.childNodes)}),this}}),jQuery.expr.pseudos.hidden=function(elem){return!jQuery.expr.pseudos.visible(elem)},jQuery.expr.pseudos.visible=function(elem){return!!(elem.offsetWidth||elem.offsetHeight||elem.getClientRects().length)},jQuery.ajaxSettings.xhr=function(){try{return new window.XMLHttpRequest}catch(e){}};var xhrSuccessStatus={0:200,1223:204},xhrSupported=jQuery.ajaxSettings.xhr();support.cors=!!xhrSupported&&"withCredentials"in xhrSupported,support.ajax=xhrSupported=!!xhrSupported,jQuery.ajaxTransport(function(options){var callback,errorCallback;if(support.cors||xhrSupported&&!options.crossDomain)return{send:function(headers,complete){var i,xhr=options.xhr();if(xhr.open(options.type,options.url,options.async,options.username,options.password),options.xhrFields)for(i in options.xhrFields)xhr[i]=options.xhrFields[i];for(i in options.mimeType&&xhr.overrideMimeType&&xhr.overrideMimeType(options.mimeType),options.crossDomain||headers["X-Requested-With"]||(headers["X-Requested-With"]="XMLHttpRequest"),headers)xhr.setRequestHeader(i,headers[i]);callback=function(type){return function(){callback&&(callback=errorCallback=xhr.onload=xhr.onerror=xhr.onabort=xhr.ontimeout=xhr.onreadystatechange=null,"abort"===type?xhr.abort():"error"===type?"number"!=typeof xhr.status?complete(0,"error"):complete(xhr.status,xhr.statusText):complete(xhrSuccessStatus[xhr.status]||xhr.status,xhr.statusText,"text"!==(xhr.responseType||"text")||"string"!=typeof xhr.responseText?{binary:xhr.response}:{text:xhr.responseText},xhr.getAllResponseHeaders()))}},xhr.onload=callback(),errorCallback=xhr.onerror=xhr.ontimeout=callback("error"),void 0!==xhr.onabort?xhr.onabort=errorCallback:xhr.onreadystatechange=function(){4===xhr.readyState&&window.setTimeout(function(){callback&&errorCallback()})},callback=callback("abort");try{xhr.send(options.hasContent&&options.data||null)}catch(e){if(callback)throw e}},abort:function(){callback&&callback()}}}),jQuery.ajaxPrefilter(function(s){s.crossDomain&&(s.contents.script=!1)}),jQuery.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(text){return jQuery.globalEval(text),text}}}),jQuery.ajaxPrefilter("script",function(s){void 0===s.cache&&(s.cache=!1),s.crossDomain&&(s.type="GET")}),jQuery.ajaxTransport("script",function(s){var script,callback;if(s.crossDomain)return{send:function(_,complete){script=jQuery("<script>").prop({charset:s.scriptCharset,src:s.url}).on("load error",callback=function(evt){script.remove(),callback=null,evt&&complete("error"===evt.type?404:200,evt.type)}),document.head.appendChild(script[0])},abort:function(){callback&&callback()}}});var body,oldCallbacks=[],rjsonp=/(=)\?(?=&|$)|\?\?/;jQuery.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var callback=oldCallbacks.pop()||jQuery.expando+"_"+nonce++;return this[callback]=!0,callback}}),jQuery.ajaxPrefilter("json jsonp",function(s,originalSettings,jqXHR){var callbackName,overwritten,responseContainer,jsonProp=!1!==s.jsonp&&(rjsonp.test(s.url)?"url":"string"==typeof s.data&&0===(s.contentType||"").indexOf("application/x-www-form-urlencoded")&&rjsonp.test(s.data)&&"data");if(jsonProp||"jsonp"===s.dataTypes[0])return callbackName=s.jsonpCallback=isFunction(s.jsonpCallback)?s.jsonpCallback():s.jsonpCallback,jsonProp?s[jsonProp]=s[jsonProp].replace(rjsonp,"$1"+callbackName):!1!==s.jsonp&&(s.url+=(rquery.test(s.url)?"&":"?")+s.jsonp+"="+callbackName),s.converters["script json"]=function(){return responseContainer||jQuery.error(callbackName+" was not called"),responseContainer[0]},s.dataTypes[0]="json",overwritten=window[callbackName],window[callbackName]=function(){responseContainer=arguments},jqXHR.always(function(){void 0===overwritten?jQuery(window).removeProp(callbackName):window[callbackName]=overwritten,s[callbackName]&&(s.jsonpCallback=originalSettings.jsonpCallback,oldCallbacks.push(callbackName)),responseContainer&&isFunction(overwritten)&&overwritten(responseContainer[0]),responseContainer=overwritten=void 0}),"script"}),support.createHTMLDocument=((body=document.implementation.createHTMLDocument("").body).innerHTML="<form></form><form></form>",2===body.childNodes.length),jQuery.parseHTML=function(data,context,keepScripts){return"string"!=typeof data?[]:("boolean"==typeof context&&(keepScripts=context,context=!1),context||(support.createHTMLDocument?((base=(context=document.implementation.createHTMLDocument("")).createElement("base")).href=document.location.href,context.head.appendChild(base)):context=document),parsed=rsingleTag.exec(data),scripts=!keepScripts&&[],parsed?[context.createElement(parsed[1])]:(parsed=buildFragment([data],context,scripts),scripts&&scripts.length&&jQuery(scripts).remove(),jQuery.merge([],parsed.childNodes)));var base,parsed,scripts},jQuery.fn.load=function(url,params,callback){var selector,type,response,self=this,off=url.indexOf(" ");return off>-1&&(selector=stripAndCollapse(url.slice(off)),url=url.slice(0,off)),isFunction(params)?(callback=params,params=void 0):params&&"object"==typeof params&&(type="POST"),self.length>0&&jQuery.ajax({url:url,type:type||"GET",dataType:"html",data:params}).done(function(responseText){response=arguments,self.html(selector?jQuery("<div>").append(jQuery.parseHTML(responseText)).find(selector):responseText)}).always(callback&&function(jqXHR,status){self.each(function(){callback.apply(this,response||[jqXHR.responseText,status,jqXHR])})}),this},jQuery.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(i,type){jQuery.fn[type]=function(fn){return this.on(type,fn)}}),jQuery.expr.pseudos.animated=function(elem){return jQuery.grep(jQuery.timers,function(fn){return elem===fn.elem}).length},jQuery.offset={setOffset:function(elem,options,i){var curPosition,curLeft,curCSSTop,curTop,curOffset,curCSSLeft,position=jQuery.css(elem,"position"),curElem=jQuery(elem),props={};"static"===position&&(elem.style.position="relative"),curOffset=curElem.offset(),curCSSTop=jQuery.css(elem,"top"),curCSSLeft=jQuery.css(elem,"left"),("absolute"===position||"fixed"===position)&&(curCSSTop+curCSSLeft).indexOf("auto")>-1?(curTop=(curPosition=curElem.position()).top,curLeft=curPosition.left):(curTop=parseFloat(curCSSTop)||0,curLeft=parseFloat(curCSSLeft)||0),isFunction(options)&&(options=options.call(elem,i,jQuery.extend({},curOffset))),null!=options.top&&(props.top=options.top-curOffset.top+curTop),null!=options.left&&(props.left=options.left-curOffset.left+curLeft),"using"in options?options.using.call(elem,props):curElem.css(props)}},jQuery.fn.extend({offset:function(options){if(arguments.length)return void 0===options?this:this.each(function(i){jQuery.offset.setOffset(this,options,i)});var rect,win,elem=this[0];return elem?elem.getClientRects().length?(rect=elem.getBoundingClientRect(),win=elem.ownerDocument.defaultView,{top:rect.top+win.pageYOffset,left:rect.left+win.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var offsetParent,offset,doc,elem=this[0],parentOffset={top:0,left:0};if("fixed"===jQuery.css(elem,"position"))offset=elem.getBoundingClientRect();else{for(offset=this.offset(),doc=elem.ownerDocument,offsetParent=elem.offsetParent||doc.documentElement;offsetParent&&(offsetParent===doc.body||offsetParent===doc.documentElement)&&"static"===jQuery.css(offsetParent,"position");)offsetParent=offsetParent.parentNode;offsetParent&&offsetParent!==elem&&1===offsetParent.nodeType&&((parentOffset=jQuery(offsetParent).offset()).top+=jQuery.css(offsetParent,"borderTopWidth",!0),parentOffset.left+=jQuery.css(offsetParent,"borderLeftWidth",!0))}return{top:offset.top-parentOffset.top-jQuery.css(elem,"marginTop",!0),left:offset.left-parentOffset.left-jQuery.css(elem,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){for(var offsetParent=this.offsetParent;offsetParent&&"static"===jQuery.css(offsetParent,"position");)offsetParent=offsetParent.offsetParent;return offsetParent||documentElement})}}),jQuery.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(method,prop){var top="pageYOffset"===prop;jQuery.fn[method]=function(val){return access(this,function(elem,method,val){var win;if(isWindow(elem)?win=elem:9===elem.nodeType&&(win=elem.defaultView),void 0===val)return win?win[prop]:elem[method];win?win.scrollTo(top?win.pageXOffset:val,top?val:win.pageYOffset):elem[method]=val},method,val,arguments.length)}}),jQuery.each(["top","left"],function(i,prop){jQuery.cssHooks[prop]=addGetHookIf(support.pixelPosition,function(elem,computed){if(computed)return computed=curCSS(elem,prop),rnumnonpx.test(computed)?jQuery(elem).position()[prop]+"px":computed})}),jQuery.each({Height:"height",Width:"width"},function(name,type){jQuery.each({padding:"inner"+name,content:type,"":"outer"+name},function(defaultExtra,funcName){jQuery.fn[funcName]=function(margin,value){var chainable=arguments.length&&(defaultExtra||"boolean"!=typeof margin),extra=defaultExtra||(!0===margin||!0===value?"margin":"border");return access(this,function(elem,type,value){var doc;return isWindow(elem)?0===funcName.indexOf("outer")?elem["inner"+name]:elem.document.documentElement["client"+name]:9===elem.nodeType?(doc=elem.documentElement,Math.max(elem.body["scroll"+name],doc["scroll"+name],elem.body["offset"+name],doc["offset"+name],doc["client"+name])):void 0===value?jQuery.css(elem,type,extra):jQuery.style(elem,type,value,extra)},type,chainable?margin:void 0,chainable)}})}),jQuery.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(i,name){jQuery.fn[name]=function(data,fn){return arguments.length>0?this.on(name,null,data,fn):this.trigger(name)}}),jQuery.fn.extend({hover:function(fnOver,fnOut){return this.mouseenter(fnOver).mouseleave(fnOut||fnOver)}}),jQuery.fn.extend({bind:function(types,data,fn){return this.on(types,null,data,fn)},unbind:function(types,fn){return this.off(types,null,fn)},delegate:function(selector,types,data,fn){return this.on(types,selector,data,fn)},undelegate:function(selector,types,fn){return 1===arguments.length?this.off(selector,"**"):this.off(types,selector||"**",fn)}}),jQuery.proxy=function(fn,context){var tmp,args,proxy;if("string"==typeof context&&(tmp=fn[context],context=fn,fn=tmp),isFunction(fn))return args=slice.call(arguments,2),(proxy=function(){return fn.apply(context||this,args.concat(slice.call(arguments)))}).guid=fn.guid=fn.guid||jQuery.guid++,proxy},jQuery.holdReady=function(hold){hold?jQuery.readyWait++:jQuery.ready(!0)},jQuery.isArray=Array.isArray,jQuery.parseJSON=JSON.parse,jQuery.nodeName=nodeName,jQuery.isFunction=isFunction,jQuery.isWindow=isWindow,jQuery.camelCase=camelCase,jQuery.type=toType,jQuery.now=Date.now,jQuery.isNumeric=function(obj){var type=jQuery.type(obj);return("number"===type||"string"===type)&&!isNaN(obj-parseFloat(obj))},"function"==typeof define&&define.amd&&define("jquery",[],function(){return jQuery});var _jQuery=window.jQuery,_$=window.$;return jQuery.noConflict=function(deep){return window.$===jQuery&&(window.$=_$),deep&&window.jQuery===jQuery&&(window.jQuery=_jQuery),jQuery},noGlobal||(window.jQuery=window.$=jQuery),jQuery}),function(root,factory){"function"==typeof define&&define.amd?define(["moment"],factory):"object"==typeof module&&module.exports?module.exports=factory(require("moment")):factory(root.moment)}(this,function(moment){var cachedGuess,zones={},links={},names={},guesses={},momentVersion=moment.version.split("."),major=+momentVersion[0],minor=+momentVersion[1];function charCodeToInt(charCode){return charCode>96?charCode-87:charCode>64?charCode-29:charCode-48}function unpackBase60(string){var i=0,parts=string.split("."),whole=parts[0],fractional=parts[1]||"",multiplier=1,out=0,sign=1;for(45===string.charCodeAt(0)&&(i=1,sign=-1);i<whole.length;i++)out=60*out+charCodeToInt(whole.charCodeAt(i));for(i=0;i<fractional.length;i++)multiplier/=60,out+=charCodeToInt(fractional.charCodeAt(i))*multiplier;return out*sign}function arrayToInt(array){for(var i=0;i<array.length;i++)array[i]=unpackBase60(array[i])}function mapIndices(source,indices){var i,out=[];for(i=0;i<indices.length;i++)out[i]=source[indices[i]];return out}function unpack(string){var data=string.split("|"),offsets=data[2].split(" "),indices=data[3].split(""),untils=data[4].split(" ");return arrayToInt(offsets),arrayToInt(indices),arrayToInt(untils),function(array,length){for(var i=0;i<length;i++)array[i]=Math.round((array[i-1]||0)+6e4*array[i]);array[length-1]=1/0}(untils,indices.length),{name:data[0],abbrs:mapIndices(data[1].split(" "),indices),offsets:mapIndices(offsets,indices),untils:untils,population:0|data[5]}}function Zone(packedString){packedString&&this._set(unpack(packedString))}function OffsetAt(at){var timeString=at.toTimeString(),abbr=timeString.match(/\([a-z ]+\)/i);"GMT"===(abbr=abbr&&abbr[0]?(abbr=abbr[0].match(/[A-Z]/g))?abbr.join(""):void 0:(abbr=timeString.match(/[A-Z]{3,5}/g))?abbr[0]:void 0)&&(abbr=void 0),this.at=+at,this.abbr=abbr,this.offset=at.getTimezoneOffset()}function ZoneScore(zone){this.zone=zone,this.offsetScore=0,this.abbrScore=0}function findChange(low,high){for(var mid,diff;diff=6e4*((high.at-low.at)/12e4|0);)(mid=new OffsetAt(new Date(low.at+diff))).offset===low.offset?low=mid:high=mid;return low}function sortZoneScores(a,b){return a.offsetScore!==b.offsetScore?a.offsetScore-b.offsetScore:a.abbrScore!==b.abbrScore?a.abbrScore-b.abbrScore:b.zone.population-a.zone.population}function addToGuesses(name,offsets){var i,offset;for(arrayToInt(offsets),i=0;i<offsets.length;i++)offset=offsets[i],guesses[offset]=guesses[offset]||{},guesses[offset][name]=!0}function guessesForUserOffsets(offsets){var i,j,guessesOffset,offsetsLength=offsets.length,filteredGuesses={},out=[];for(i=0;i<offsetsLength;i++)for(j in guessesOffset=guesses[offsets[i].offset]||{})guessesOffset.hasOwnProperty(j)&&(filteredGuesses[j]=!0);for(i in filteredGuesses)filteredGuesses.hasOwnProperty(i)&&out.push(names[i]);return out}function rebuildGuess(){try{var intlName=Intl.DateTimeFormat().resolvedOptions().timeZone;if(intlName&&intlName.length>3){var name=names[normalizeName(intlName)];if(name)return name;logError("Moment Timezone found "+intlName+" from the Intl api, but did not have that data loaded.")}}catch(e){}var zoneScore,i,j,offsets=function(){var change,next,i,startYear=(new Date).getFullYear()-2,last=new OffsetAt(new Date(startYear,0,1)),offsets=[last];for(i=1;i<48;i++)(next=new OffsetAt(new Date(startYear,i,1))).offset!==last.offset&&(change=findChange(last,next),offsets.push(change),offsets.push(new OffsetAt(new Date(change.at+6e4)))),last=next;for(i=0;i<4;i++)offsets.push(new OffsetAt(new Date(startYear+i,0,1))),offsets.push(new OffsetAt(new Date(startYear+i,6,1)));return offsets}(),offsetsLength=offsets.length,guesses=guessesForUserOffsets(offsets),zoneScores=[];for(i=0;i<guesses.length;i++){for(zoneScore=new ZoneScore(getZone(guesses[i]),offsetsLength),j=0;j<offsetsLength;j++)zoneScore.scoreOffsetAt(offsets[j]);zoneScores.push(zoneScore)}return zoneScores.sort(sortZoneScores),zoneScores.length>0?zoneScores[0].zone.name:void 0}function normalizeName(name){return(name||"").toLowerCase().replace(/\//g,"_")}function addZone(packed){var i,name,split,normalized;for("string"==typeof packed&&(packed=[packed]),i=0;i<packed.length;i++)normalized=normalizeName(name=(split=packed[i].split("|"))[0]),zones[normalized]=packed[i],names[normalized]=name,addToGuesses(normalized,split[2].split(" "))}function getZone(name,caller){name=normalizeName(name);var link,zone=zones[name];return zone instanceof Zone?zone:"string"==typeof zone?(zone=new Zone(zone),zones[name]=zone,zone):links[name]&&caller!==getZone&&(link=getZone(links[name],getZone))?((zone=zones[name]=new Zone)._set(link),zone.name=names[name],zone):null}function addLink(aliases){var i,alias,normal0,normal1;for("string"==typeof aliases&&(aliases=[aliases]),i=0;i<aliases.length;i++)normal0=normalizeName((alias=aliases[i].split("|"))[0]),normal1=normalizeName(alias[1]),links[normal0]=normal1,names[normal0]=alias[0],links[normal1]=normal0,names[normal1]=alias[1]}function loadData(data){addZone(data.zones),addLink(data.links),tz.dataVersion=data.version}function needsOffset(m){var isUnixTimestamp="X"===m._f||"x"===m._f;return!(!m._a||void 0!==m._tzm||isUnixTimestamp)}function logError(message){"undefined"!=typeof console&&"function"==typeof console.error&&console.error(message)}function tz(input){var args=Array.prototype.slice.call(arguments,0,-1),name=arguments[arguments.length-1],zone=getZone(name),out=moment.utc.apply(null,args);return zone&&!moment.isMoment(input)&&needsOffset(out)&&out.add(zone.parse(out),"minutes"),out.tz(name),out}(major<2||2===major&&minor<6)&&logError("Moment Timezone requires Moment.js >= 2.6.0. You are using Moment.js "+moment.version+". See momentjs.com"),Zone.prototype={_set:function(unpacked){this.name=unpacked.name,this.abbrs=unpacked.abbrs,this.untils=unpacked.untils,this.offsets=unpacked.offsets,this.population=unpacked.population},_index:function(timestamp){var i,target=+timestamp,untils=this.untils;for(i=0;i<untils.length;i++)if(target<untils[i])return i},parse:function(timestamp){var offset,offsetNext,offsetPrev,i,target=+timestamp,offsets=this.offsets,untils=this.untils,max=untils.length-1;for(i=0;i<max;i++)if(offset=offsets[i],offsetNext=offsets[i+1],offsetPrev=offsets[i?i-1:i],offset<offsetNext&&tz.moveAmbiguousForward?offset=offsetNext:offset>offsetPrev&&tz.moveInvalidForward&&(offset=offsetPrev),target<untils[i]-6e4*offset)return offsets[i];return offsets[max]},abbr:function(mom){return this.abbrs[this._index(mom)]},offset:function(mom){return logError("zone.offset has been deprecated in favor of zone.utcOffset"),this.offsets[this._index(mom)]},utcOffset:function(mom){return this.offsets[this._index(mom)]}},ZoneScore.prototype.scoreOffsetAt=function(offsetAt){this.offsetScore+=Math.abs(this.zone.utcOffset(offsetAt.at)-offsetAt.offset),this.zone.abbr(offsetAt.at).replace(/[^A-Z]/g,"")!==offsetAt.abbr&&this.abbrScore++},tz.version="0.5.17",tz.dataVersion="",tz._zones=zones,tz._links=links,tz._names=names,tz.add=addZone,tz.link=addLink,tz.load=loadData,tz.zone=getZone,tz.zoneExists=function zoneExists(name){return zoneExists.didShowError||(zoneExists.didShowError=!0,logError("moment.tz.zoneExists('"+name+"') has been deprecated in favor of !moment.tz.zone('"+name+"')")),!!getZone(name)},tz.guess=function(ignoreCache){return cachedGuess&&!ignoreCache||(cachedGuess=rebuildGuess()),cachedGuess},tz.names=function(){var i,out=[];for(i in names)names.hasOwnProperty(i)&&(zones[i]||zones[links[i]])&&names[i]&&out.push(names[i]);return out.sort()},tz.Zone=Zone,tz.unpack=unpack,tz.unpackBase60=unpackBase60,tz.needsOffset=needsOffset,tz.moveInvalidForward=!0,tz.moveAmbiguousForward=!1;var old,fn=moment.fn;function abbrWrap(old){return function(){return this._z?this._z.abbr(this):old.call(this)}}moment.tz=tz,moment.defaultZone=null,moment.updateOffset=function(mom,keepTime){var offset,zone=moment.defaultZone;void 0===mom._z&&(zone&&needsOffset(mom)&&!mom._isUTC&&(mom._d=moment.utc(mom._a)._d,mom.utc().add(zone.parse(mom),"minutes")),mom._z=zone),mom._z&&(offset=mom._z.utcOffset(mom),Math.abs(offset)<16&&(offset/=60),void 0!==mom.utcOffset?mom.utcOffset(-offset,keepTime):mom.zone(offset,keepTime))},fn.tz=function(name,keepTime){return name?(this._z=getZone(name),this._z?moment.updateOffset(this,keepTime):logError("Moment Timezone has no data for "+name+". See http://momentjs.com/timezone/docs/#/data-loading/."),this):this._z?this._z.name:void 0},fn.zoneName=abbrWrap(fn.zoneName),fn.zoneAbbr=abbrWrap(fn.zoneAbbr),fn.utc=(old=fn.utc,function(){return this._z=null,old.apply(this,arguments)}),moment.tz.setDefault=function(name){return(major<2||2===major&&minor<9)&&logError("Moment Timezone setDefault() requires Moment.js >= 2.9.0. You are using Moment.js "+moment.version+"."),moment.defaultZone=name?getZone(name):null,moment};var momentProperties=moment.momentProperties;return"[object Array]"===Object.prototype.toString.call(momentProperties)?(momentProperties.push("_z"),momentProperties.push("_a")):momentProperties&&(momentProperties._z=null),loadData({version:"2018e",zones:["Africa/Abidjan|LMT GMT|g.8 0|01|-2ldXH.Q|48e5","Africa/Accra|LMT GMT +0020|.Q 0 -k|012121212121212121212121212121212121212121212121|-26BbX.8 6tzX.8 MnE 1BAk MnE 1BAk MnE 1BAk MnE 1C0k MnE 1BAk MnE 1BAk MnE 1BAk MnE 1C0k MnE 1BAk MnE 1BAk MnE 1BAk MnE 1C0k MnE 1BAk MnE 1BAk MnE 1BAk MnE 1C0k MnE 1BAk MnE 1BAk MnE 1BAk MnE 1C0k MnE 1BAk MnE 1BAk MnE|41e5","Africa/Nairobi|LMT EAT +0230 +0245|-2r.g -30 -2u -2J|01231|-1F3Cr.g 3Dzr.g okMu MFXJ|47e5","Africa/Algiers|PMT WET WEST CET CEST|-9.l 0 -10 -10 -20|0121212121212121343431312123431213|-2nco9.l cNb9.l HA0 19A0 1iM0 11c0 1oo0 Wo0 1rc0 QM0 1EM0 UM0 DA0 Imo0 rd0 De0 9Xz0 1fb0 1ap0 16K0 2yo0 mEp0 hwL0 jxA0 11A0 dDd0 17b0 11B0 1cN0 2Dy0 1cN0 1fB0 1cL0|26e5","Africa/Lagos|LMT WAT|-d.A -10|01|-22y0d.A|17e6","Africa/Bissau|LMT -01 GMT|12.k 10 0|012|-2ldX0 2xoo0|39e4","Africa/Maputo|LMT CAT|-2a.k -20|01|-2GJea.k|26e5","Africa/Cairo|EET EEST|-20 -30|0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-1bIO0 vb0 1ip0 11z0 1iN0 1nz0 12p0 1pz0 10N0 1pz0 16p0 1jz0 s3d0 Vz0 1oN0 11b0 1oO0 10N0 1pz0 10N0 1pb0 10N0 1pb0 10N0 1pb0 10N0 1pz0 10N0 1pb0 10N0 1pb0 11d0 1oL0 11d0 1pb0 11d0 1oL0 11d0 1oL0 11d0 1oL0 11d0 1pb0 11d0 1oL0 11d0 1oL0 11d0 1oL0 11d0 1pb0 11d0 1oL0 11d0 1oL0 11d0 1oL0 11d0 1pb0 11d0 1oL0 11d0 1WL0 rd0 1Rz0 wp0 1pb0 11d0 1oL0 11d0 1oL0 11d0 1oL0 11d0 1pb0 11d0 1qL0 Xd0 1oL0 11d0 1oL0 11d0 1pb0 11d0 1oL0 11d0 1oL0 11d0 1ny0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 WL0 1qN0 Rb0 1wp0 On0 1zd0 Lz0 1EN0 Fb0 c10 8n0 8Nd0 gL0 e10 mn0|15e6","Africa/Casablanca|LMT WET WEST CET|u.k 0 -10 -10|0121212121212121213121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2gMnt.E 130Lt.E rb0 Dd0 dVb0 b6p0 TX0 EoB0 LL0 gnd0 rz0 43d0 AL0 1Nd0 XX0 1Cp0 pz0 dEp0 4mn0 SyN0 AL0 1Nd0 wn0 1FB0 Db0 1zd0 Lz0 1Nf0 wM0 co0 go0 1o00 s00 dA0 vc0 11A0 A00 e00 y00 11A0 uM0 e00 Dc0 11A0 s00 e00 IM0 WM0 mo0 gM0 LA0 WM0 jA0 e00 Rc0 11A0 e00 e00 U00 11A0 8o0 e00 11A0 11A0 5A0 e00 17c0 1fA0 1a00 1a00 1fA0 17c0 1io0 14o0 1lc0 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1lc0 14o0 1fA0|32e5","Africa/Ceuta|WET WEST CET CEST|0 -10 -10 -20|010101010101010101010232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-25KN0 11z0 drd0 18p0 3HX0 17d0 1fz0 1a10 1io0 1a00 1y7o0 LL0 gnd0 rz0 43d0 AL0 1Nd0 XX0 1Cp0 pz0 dEp0 4VB0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|85e3","Africa/El_Aaiun|LMT -01 WET WEST|Q.M 10 0 -10|01232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-1rDz7.c 1GVA7.c 6L0 AL0 1Nd0 XX0 1Cp0 pz0 1cBB0 AL0 1Nd0 wn0 1FB0 Db0 1zd0 Lz0 1Nf0 wM0 co0 go0 1o00 s00 dA0 vc0 11A0 A00 e00 y00 11A0 uM0 e00 Dc0 11A0 s00 e00 IM0 WM0 mo0 gM0 LA0 WM0 jA0 e00 Rc0 11A0 e00 e00 U00 11A0 8o0 e00 11A0 11A0 5A0 e00 17c0 1fA0 1a00 1a00 1fA0 17c0 1io0 14o0 1lc0 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1lc0 14o0 1fA0|20e4","Africa/Johannesburg|SAST SAST SAST|-1u -20 -30|012121|-2GJdu 1Ajdu 1cL0 1cN0 1cL0|84e5","Africa/Juba|LMT CAT CAST EAT|-26.s -20 -30 -30|01212121212121212121212121212121213|-1yW26.s 1zK06.s 16L0 1iN0 17b0 1jd0 17b0 1ip0 17z0 1i10 17X0 1hB0 18n0 1hd0 19b0 1gp0 19z0 1iN0 17b0 1ip0 17z0 1i10 18n0 1hd0 18L0 1gN0 19b0 1gp0 19z0 1iN0 17z0 1i10 17X0 yGd0","Africa/Khartoum|LMT CAT CAST EAT|-2a.8 -20 -30 -30|012121212121212121212121212121212131|-1yW2a.8 1zK0a.8 16L0 1iN0 17b0 1jd0 17b0 1ip0 17z0 1i10 17X0 1hB0 18n0 1hd0 19b0 1gp0 19z0 1iN0 17b0 1ip0 17z0 1i10 18n0 1hd0 18L0 1gN0 19b0 1gp0 19z0 1iN0 17z0 1i10 17X0 yGd0 HjL0|51e5","Africa/Monrovia|MMT MMT GMT|H.8 I.u 0|012|-23Lzg.Q 28G01.m|11e5","Africa/Ndjamena|LMT WAT WAST|-10.c -10 -20|0121|-2le10.c 2J3c0.c Wn0|13e5","Africa/Sao_Tome|LMT GMT WAT|A.J 0 -10|012|-2le00 4i6N0","Africa/Tripoli|LMT CET CEST EET|-Q.I -10 -20 -20|012121213121212121212121213123123|-21JcQ.I 1hnBQ.I vx0 4iP0 xx0 4eN0 Bb0 7ip0 U0n0 A10 1db0 1cN0 1db0 1dd0 1db0 1eN0 1bb0 1e10 1cL0 1c10 1db0 1dd0 1db0 1cN0 1db0 1q10 fAn0 1ep0 1db0 AKq0 TA0 1o00|11e5","Africa/Tunis|PMT CET CEST|-9.l -10 -20|0121212121212121212121212121212121|-2nco9.l 18pa9.l 1qM0 DA0 3Tc0 11B0 1ze0 WM0 7z0 3d0 14L0 1cN0 1f90 1ar0 16J0 1gXB0 WM0 1rA0 11c0 nwo0 Ko0 1cM0 1cM0 1rA0 10M0 zuM0 10N0 1aN0 1qM0 WM0 1qM0 11A0 1o00|20e5","Africa/Windhoek|+0130 SAST SAST CAT WAT|-1u -20 -30 -20 -10|01213434343434343434343434343434343434343434343434343|-2GJdu 1Ajdu 1cL0 1SqL0 9Io0 16P0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0|32e4","America/Adak|NST NWT NPT BST BDT AHST HST HDT|b0 a0 a0 b0 a0 a0 a0 90|012034343434343434343434343434343456767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676|-17SX0 8wW0 iB0 Qlb0 52O0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 cm0 10q0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|326","America/Anchorage|AST AWT APT AHST AHDT YST AKST AKDT|a0 90 90 a0 90 90 90 80|012034343434343434343434343434343456767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676|-17T00 8wX0 iA0 Qlb0 52O0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 cm0 10q0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|30e4","America/Port_of_Spain|LMT AST|46.4 40|01|-2kNvR.U|43e3","America/Araguaina|LMT -03 -02|3c.M 30 20|0121212121212121212121212121212121212121212121212121|-2glwL.c HdKL.c 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 dMN0 Lz0 1zd0 Rb0 1wN0 Wn0 1tB0 Rb0 1tB0 WL0 1tB0 Rb0 1zd0 On0 1HB0 FX0 ny10 Lz0|14e4","America/Argentina/Buenos_Aires|CMT -04 -03 -02|4g.M 40 30 20|01212121212121212121212121212121212121212123232323232323232|-20UHH.c pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Rb0 1wp0 Rb0 1wp0 TX0 A4p0 uL0 1qN0 WL0","America/Argentina/Catamarca|CMT -04 -03 -02|4g.M 40 30 20|01212121212121212121212121212121212121212123232323132321232|-20UHH.c pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Rb0 1wq0 Ra0 1wp0 TX0 rlB0 7B0 8zb0 uL0","America/Argentina/Cordoba|CMT -04 -03 -02|4g.M 40 30 20|01212121212121212121212121212121212121212123232323132323232|-20UHH.c pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Rb0 1wq0 Ra0 1wp0 TX0 A4p0 uL0 1qN0 WL0","America/Argentina/Jujuy|CMT -04 -03 -02|4g.M 40 30 20|012121212121212121212121212121212121212121232323121323232|-20UHH.c pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1ze0 TX0 1ld0 WK0 1wp0 TX0 A4p0 uL0","America/Argentina/La_Rioja|CMT -04 -03 -02|4g.M 40 30 20|012121212121212121212121212121212121212121232323231232321232|-20UHH.c pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Qn0 qO0 16n0 Rb0 1wp0 TX0 rlB0 7B0 8zb0 uL0","America/Argentina/Mendoza|CMT -04 -03 -02|4g.M 40 30 20|01212121212121212121212121212121212121212123232312121321232|-20UHH.c pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1u20 SL0 1vd0 Tb0 1wp0 TW0 ri10 Op0 7TX0 uL0","America/Argentina/Rio_Gallegos|CMT -04 -03 -02|4g.M 40 30 20|01212121212121212121212121212121212121212123232323232321232|-20UHH.c pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Rb0 1wp0 Rb0 1wp0 TX0 rlB0 7B0 8zb0 uL0","America/Argentina/Salta|CMT -04 -03 -02|4g.M 40 30 20|012121212121212121212121212121212121212121232323231323232|-20UHH.c pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Rb0 1wq0 Ra0 1wp0 TX0 A4p0 uL0","America/Argentina/San_Juan|CMT -04 -03 -02|4g.M 40 30 20|012121212121212121212121212121212121212121232323231232321232|-20UHH.c pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Qn0 qO0 16n0 Rb0 1wp0 TX0 rld0 m10 8lb0 uL0","America/Argentina/San_Luis|CMT -04 -03 -02|4g.M 40 30 20|012121212121212121212121212121212121212121232323121212321212|-20UHH.c pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 XX0 1q20 SL0 AN0 vDb0 m10 8lb0 8L0 jd0 1qN0 WL0 1qN0","America/Argentina/Tucuman|CMT -04 -03 -02|4g.M 40 30 20|0121212121212121212121212121212121212121212323232313232123232|-20UHH.c pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Rb0 1wq0 Ra0 1wp0 TX0 rlB0 4N0 8BX0 uL0 1qN0 WL0","America/Argentina/Ushuaia|CMT -04 -03 -02|4g.M 40 30 20|01212121212121212121212121212121212121212123232323232321232|-20UHH.c pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Rb0 1wp0 Rb0 1wp0 TX0 rkN0 8p0 8zb0 uL0","America/Curacao|LMT -0430 AST|4z.L 4u 40|012|-2kV7o.d 28KLS.d|15e4","America/Asuncion|AMT -04 -03|3O.E 40 30|012121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212|-1x589.k 1DKM9.k 3CL0 3Dd0 10L0 1pB0 10n0 1pB0 10n0 1pB0 1cL0 1dd0 1db0 1dd0 1cL0 1dd0 1cL0 1dd0 1cL0 1dd0 1db0 1dd0 1cL0 1dd0 1cL0 1dd0 1cL0 1dd0 1db0 1dd0 1cL0 1lB0 14n0 1dd0 1cL0 1fd0 WL0 1rd0 1aL0 1dB0 Xz0 1qp0 Xb0 1qN0 10L0 1rB0 TX0 1tB0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 1cL0 WN0 1qL0 11B0 1nX0 1ip0 WL0 1qN0 WL0 1qN0 WL0 1tB0 TX0 1tB0 TX0 1tB0 19X0 1a10 1fz0 1a10 1fz0 1cN0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0|28e5","America/Atikokan|CST CDT CWT CPT EST|60 50 50 50 50|0101234|-25TQ0 1in0 Rnb0 3je0 8x30 iw0|28e2","America/Bahia_Banderas|LMT MST CST PST MDT CDT|71 70 60 80 60 50|0121212131414141414141414141414141414152525252525252525252525252525252525252525252525252525252|-1UQF0 deL0 8lc0 17c0 10M0 1dd0 otX0 gmN0 P2N0 13Vd0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nW0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0|84e3","America/Bahia|LMT -03 -02|2y.4 30 20|01212121212121212121212121212121212121212121212121212121212121|-2glxp.U HdLp.U 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 1EN0 Lz0 1C10 IL0 1HB0 Db0 1HB0 On0 1zd0 On0 1zd0 Lz0 1zd0 Rb0 1wN0 Wn0 1tB0 Rb0 1tB0 WL0 1tB0 Rb0 1zd0 On0 1HB0 FX0 l5B0 Rb0|27e5","America/Barbados|LMT BMT AST ADT|3W.t 3W.t 40 30|01232323232|-1Q0I1.v jsM0 1ODC1.v IL0 1ip0 17b0 1ip0 17b0 1ld0 13b0|28e4","America/Belem|LMT -03 -02|3d.U 30 20|012121212121212121212121212121|-2glwK.4 HdKK.4 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0|20e5","America/Belize|LMT CST -0530 CDT|5Q.M 60 5u 50|01212121212121212121212121212121212121212121212121213131|-2kBu7.c fPA7.c Onu 1zcu Rbu 1wou Rbu 1wou Rbu 1zcu Onu 1zcu Onu 1zcu Rbu 1wou Rbu 1wou Rbu 1wou Rbu 1zcu Onu 1zcu Onu 1zcu Rbu 1wou Rbu 1wou Rbu 1zcu Onu 1zcu Onu 1zcu Onu 1zcu Rbu 1wou Rbu 1wou Rbu 1zcu Onu 1zcu Onu 1zcu Rbu 1wou Rbu 1f0Mu qn0 lxB0 mn0|57e3","America/Blanc-Sablon|AST ADT AWT APT|40 30 30 30|010230|-25TS0 1in0 UGp0 8x50 iu0|11e2","America/Boa_Vista|LMT -04 -03|42.E 40 30|0121212121212121212121212121212121|-2glvV.k HdKV.k 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 smp0 WL0 1tB0 2L0|62e2","America/Bogota|BMT -05 -04|4U.g 50 40|0121|-2eb73.I 38yo3.I 2en0|90e5","America/Boise|PST PDT MST MWT MPT MDT|80 70 70 60 60 60|0101023425252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252|-261q0 1nX0 11B0 1nX0 8C10 JCL0 8x20 ix0 QwN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 Dd0 1Kn0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|21e4","America/Cambridge_Bay|-00 MST MWT MPT MDDT MDT CST CDT EST|0 70 60 60 50 60 60 50 50|0123141515151515151515151515151515151515151515678651515151515151515151515151515151515151515151515151515151515151515151515151|-21Jc0 RO90 8x20 ix0 LCL0 1fA0 zgO0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11A0 1nX0 2K0 WQ0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|15e2","America/Campo_Grande|LMT -04 -03|3C.s 40 30|012121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212|-2glwl.w HdLl.w 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 1EN0 Lz0 1C10 IL0 1HB0 Db0 1HB0 On0 1zd0 On0 1zd0 Lz0 1zd0 Rb0 1wN0 Wn0 1tB0 Rb0 1tB0 WL0 1tB0 Rb0 1zd0 On0 1HB0 FX0 1C10 Lz0 1Ip0 HX0 1zd0 On0 1HB0 IL0 1wp0 On0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 Rb0 1zd0 Lz0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 On0 1zd0 On0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 IL0 1EN0 FX0 1HB0 FX0 1HB0 IL0 1EN0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1Kp0 FX0 1HB0 IL0 1EN0 FX0 1HB0 FX0 1HB0 IL0 1EN0|77e4","America/Cancun|LMT CST EST EDT CDT|5L.4 60 50 40 50|0123232341414141414141414141414141414141412|-1UQG0 2q2o0 yLB0 1lb0 14p0 1lb0 14p0 Lz0 xB0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 Dd0|63e4","America/Caracas|CMT -0430 -04|4r.E 4u 40|01212|-2kV7w.k 28KM2.k 1IwOu kqo0|29e5","America/Cayenne|LMT -04 -03|3t.k 40 30|012|-2mrwu.E 2gWou.E|58e3","America/Panama|CMT EST|5j.A 50|01|-2uduE.o|15e5","America/Chicago|CST CDT EST CWT CPT|60 50 50 50 50|01010101010101010101010101010101010102010101010103401010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-261s0 1nX0 11B0 1nX0 1wp0 TX0 WN0 1qL0 1cN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 11B0 1Hz0 14p0 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 RB0 8x30 iw0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|92e5","America/Chihuahua|LMT MST CST CDT MDT|74.k 70 60 50 60|0121212323241414141414141414141414141414141414141414141414141414141414141414141414141414141|-1UQF0 deL0 8lc0 17c0 10M0 1dd0 2zQN0 1lb0 14p0 1lb0 14q0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0|81e4","America/Costa_Rica|SJMT CST CDT|5A.d 60 50|0121212121|-1Xd6n.L 2lu0n.L Db0 1Kp0 Db0 pRB0 15b0 1kp0 mL0|12e5","America/Creston|MST PST|70 80|010|-29DR0 43B0|53e2","America/Cuiaba|LMT -04 -03|3I.k 40 30|0121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212|-2glwf.E HdLf.E 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 1EN0 Lz0 1C10 IL0 1HB0 Db0 1HB0 On0 1zd0 On0 1zd0 Lz0 1zd0 Rb0 1wN0 Wn0 1tB0 Rb0 1tB0 WL0 1tB0 Rb0 1zd0 On0 1HB0 FX0 4a10 HX0 1zd0 On0 1HB0 IL0 1wp0 On0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 Rb0 1zd0 Lz0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 On0 1zd0 On0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 IL0 1EN0 FX0 1HB0 FX0 1HB0 IL0 1EN0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1Kp0 FX0 1HB0 IL0 1EN0 FX0 1HB0 FX0 1HB0 IL0 1EN0|54e4","America/Danmarkshavn|LMT -03 -02 GMT|1e.E 30 20 0|01212121212121212121212121212121213|-2a5WJ.k 2z5fJ.k 19U0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 DC0|8","America/Dawson_Creek|PST PDT PWT PPT MST|80 70 70 70 70|0102301010101010101010101010101010101010101010101010101014|-25TO0 1in0 UGp0 8x10 iy0 3NB0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 ML0|12e3","America/Dawson|YST YDT YWT YPT YDDT PST PDT|90 80 80 80 70 80 70|0101023040565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565|-25TN0 1in0 1o10 13V0 Ser0 8x00 iz0 LCL0 1fA0 jrA0 fNd0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|13e2","America/Denver|MST MDT MWT MPT|70 60 60 60|01010101023010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-261r0 1nX0 11B0 1nX0 11B0 1qL0 WN0 mn0 Ord0 8x20 ix0 LCN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|26e5","America/Detroit|LMT CST EST EWT EPT EDT|5w.b 60 50 40 40 40|012342525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252|-2Cgir.N peqr.N 156L0 8x40 iv0 6fd0 11z0 XQp0 1cL0 s10 1Vz0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|37e5","America/Edmonton|LMT MST MDT MWT MPT|7x.Q 70 60 60 60|01212121212121341212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2yd4q.8 shdq.8 1in0 17d0 hz0 2dB0 1fz0 1a10 11z0 1qN0 WL0 1qN0 11z0 IGN0 8x20 ix0 3NB0 11z0 LFB0 1cL0 3Cp0 1cL0 66N0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|10e5","America/Eirunepe|LMT -05 -04|4D.s 50 40|0121212121212121212121212121212121|-2glvk.w HdLk.w 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 dPB0 On0 yTd0 d5X0|31e3","America/El_Salvador|LMT CST CDT|5U.M 60 50|012121|-1XiG3.c 2Fvc3.c WL0 1qN0 WL0|11e5","America/Tijuana|LMT MST PST PDT PWT PPT|7M.4 70 80 70 70 70|012123245232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-1UQE0 4PX0 8mM0 8lc0 SN0 1cL0 pHB0 83r0 zI0 5O10 1Rz0 cOO0 11A0 1o00 11A0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 BUp0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 U10 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|20e5","America/Fort_Nelson|PST PDT PWT PPT MST|80 70 70 70 70|01023010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010104|-25TO0 1in0 UGp0 8x10 iy0 3NB0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0|39e2","America/Fort_Wayne|CST CDT CWT CPT EST EDT|60 50 50 50 50 40|010101023010101010101010101040454545454545454545454545454545454545454545454545454545454545454545454|-261s0 1nX0 11B0 1nX0 QI10 Db0 RB0 8x30 iw0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 5Tz0 1o10 qLb0 1cL0 1cN0 1cL0 1qhd0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0","America/Fortaleza|LMT -03 -02|2y 30 20|0121212121212121212121212121212121212121|-2glxq HdLq 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 nsp0 WL0 1tB0 5z0 2mN0 On0|34e5","America/Glace_Bay|LMT AST ADT AWT APT|3X.M 40 30 30 30|012134121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2IsI0.c CwO0.c 1in0 UGp0 8x50 iu0 iq10 11z0 Jg10 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|19e3","America/Godthab|LMT -03 -02|3q.U 30 20|0121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2a5Ux.4 2z5dx.4 19U0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|17e3","America/Goose_Bay|NST NDT NST NDT NWT NPT AST ADT ADDT|3u.Q 2u.Q 3u 2u 2u 2u 40 30 20|010232323232323245232323232323232323232323232323232323232326767676767676767676767676767676767676767676768676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676|-25TSt.8 1in0 DXb0 2HbX.8 WL0 1qN0 WL0 1qN0 WL0 1tB0 TX0 1tB0 WL0 1qN0 WL0 1qN0 7UHu itu 1tB0 WL0 1qN0 WL0 1qN0 WL0 1qN0 WL0 1tB0 WL0 1ld0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 S10 g0u 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14n1 1lb0 14p0 1nW0 11C0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zcX Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|76e2","America/Grand_Turk|KMT EST EDT AST|57.a 50 40 40|01212121212121212121212121212121212121212121212121212121212121212121212121232121212121212121212121212121212121212121|-2l1uQ.O 2HHBQ.O 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 5Ip0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|37e2","America/Guatemala|LMT CST CDT|62.4 60 50|0121212121|-24KhV.U 2efXV.U An0 mtd0 Nz0 ifB0 17b0 zDB0 11z0|13e5","America/Guayaquil|QMT -05 -04|5e 50 40|0121|-1yVSK 2uILK rz0|27e5","America/Guyana|LMT -0345 -03 -04|3Q.E 3J 30 40|0123|-2dvU7.k 2r6LQ.k Bxbf|80e4","America/Halifax|LMT AST ADT AWT APT|4e.o 40 30 30 30|0121212121212121212121212121212121212121212121212134121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2IsHJ.A xzzJ.A 1db0 3I30 1in0 3HX0 IL0 1E10 ML0 1yN0 Pb0 1Bd0 Mn0 1Bd0 Rz0 1w10 Xb0 1w10 LX0 1w10 Xb0 1w10 Lz0 1C10 Jz0 1E10 OL0 1yN0 Un0 1qp0 Xb0 1qp0 11X0 1w10 Lz0 1HB0 LX0 1C10 FX0 1w10 Xb0 1qp0 Xb0 1BB0 LX0 1td0 Xb0 1qp0 Xb0 Rf0 8x50 iu0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 3Qp0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 3Qp0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 6i10 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|39e4","America/Havana|HMT CST CDT|5t.A 50 40|012121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-1Meuu.o 72zu.o ML0 sld0 An0 1Nd0 Db0 1Nd0 An0 6Ep0 An0 1Nd0 An0 JDd0 Mn0 1Ap0 On0 1fd0 11X0 1qN0 WL0 1wp0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 14n0 1ld0 14L0 1kN0 15b0 1kp0 1cL0 1cN0 1fz0 1a10 1fz0 1fB0 11z0 14p0 1nX0 11B0 1nX0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 14n0 1ld0 14n0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 1a10 1in0 1a10 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 17c0 1o00 11A0 1qM0 11A0 1o00 11A0 1o00 14o0 1lc0 14o0 1lc0 11A0 6i00 Rc0 1wo0 U00 1tA0 Rc0 1wo0 U00 1wo0 U00 1zc0 U00 1qM0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0|21e5","America/Hermosillo|LMT MST CST PST MDT|7n.Q 70 60 80 60|0121212131414141|-1UQF0 deL0 8lc0 17c0 10M0 1dd0 otX0 gmN0 P2N0 13Vd0 1lb0 14p0 1lb0 14p0 1lb0|64e4","America/Indiana/Knox|CST CDT CWT CPT EST|60 50 50 50 50|0101023010101010101010101010101010101040101010101010101010101010101010101010101010101010141010101010101010101010101010101010101010101010101010101010101010|-261s0 1nX0 11B0 1nX0 SgN0 8x30 iw0 3NB0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1fz0 1cN0 1cL0 1cN0 11z0 1o10 11z0 1o10 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 3Cn0 8wp0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 z8o0 1o00 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0","America/Indiana/Marengo|CST CDT CWT CPT EST EDT|60 50 50 50 50 40|0101023010101010101010104545454545414545454545454545454545454545454545454545454545454545454545454545454|-261s0 1nX0 11B0 1nX0 SgN0 8x30 iw0 dyN0 11z0 6fd0 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 jrz0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1VA0 LA0 1BX0 1e6p0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0","America/Indiana/Petersburg|CST CDT CWT CPT EST EDT|60 50 50 50 50 40|01010230101010101010101010104010101010101010101010141014545454545454545454545454545454545454545454545454545454545454|-261s0 1nX0 11B0 1nX0 SgN0 8x30 iw0 njX0 WN0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 3Fb0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 19co0 1o00 Rd0 1zb0 Oo0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0","America/Indiana/Tell_City|CST CDT CWT CPT EST EDT|60 50 50 50 50 40|01010230101010101010101010101010454541010101010101010101010101010101010101010101010101010101010101010|-261s0 1nX0 11B0 1nX0 SgN0 8x30 iw0 1o10 11z0 g0p0 11z0 1o10 11z0 1qL0 WN0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1fz0 1cN0 WL0 1qN0 1cL0 1cN0 1cL0 1cN0 caL0 1cL0 1cN0 1cL0 1qhd0 1o00 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0","America/Indiana/Vevay|CST CDT CWT CPT EST EDT|60 50 50 50 50 40|010102304545454545454545454545454545454545454545454545454545454545454545454545454|-261s0 1nX0 11B0 1nX0 SgN0 8x30 iw0 kPB0 Awn0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1lnd0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0","America/Indiana/Vincennes|CST CDT CWT CPT EST EDT|60 50 50 50 50 40|01010230101010101010101010101010454541014545454545454545454545454545454545454545454545454545454545454|-261s0 1nX0 11B0 1nX0 SgN0 8x30 iw0 1o10 11z0 g0p0 11z0 1o10 11z0 1qL0 WN0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1fz0 1cN0 WL0 1qN0 1cL0 1cN0 1cL0 1cN0 caL0 1cL0 1cN0 1cL0 1qhd0 1o00 Rd0 1zb0 Oo0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0","America/Indiana/Winamac|CST CDT CWT CPT EST EDT|60 50 50 50 50 40|01010230101010101010101010101010101010454541054545454545454545454545454545454545454545454545454545454545454|-261s0 1nX0 11B0 1nX0 SgN0 8x30 iw0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1fz0 1cN0 1cL0 1cN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 jrz0 1cL0 1cN0 1cL0 1qhd0 1o00 Rd0 1za0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0","America/Inuvik|-00 PST PDDT MST MDT|0 80 60 70 60|0121343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343|-FnA0 tWU0 1fA0 wPe0 2pz0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|35e2","America/Iqaluit|-00 EWT EPT EST EDDT EDT CST CDT|0 40 40 50 30 40 60 50|01234353535353535353535353535353535353535353567353535353535353535353535353535353535353535353535353535353535353535353535353|-16K00 7nX0 iv0 LCL0 1fA0 zgO0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11C0 1nX0 11A0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|67e2","America/Jamaica|KMT EST EDT|57.a 50 40|0121212121212121212121|-2l1uQ.O 2uM1Q.O 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0|94e4","America/Juneau|PST PWT PPT PDT YDT YST AKST AKDT|80 70 70 70 80 90 90 80|01203030303030303030303030403030356767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676|-17T20 8x10 iy0 Vo10 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cM0 1cM0 1cL0 1cN0 1fz0 1a10 1fz0 co0 10q0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|33e3","America/Kentucky/Louisville|CST CDT CWT CPT EST EDT|60 50 50 50 50 40|0101010102301010101010101010101010101454545454545414545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454|-261s0 1nX0 11B0 1nX0 3Fd0 Nb0 LPd0 11z0 RB0 8x30 iw0 Bb0 10N0 2bB0 8in0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 xz0 gso0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1VA0 LA0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0","America/Kentucky/Monticello|CST CDT CWT CPT EST EDT|60 50 50 50 50 40|0101023010101010101010101010101010101010101010101010101010101010101010101454545454545454545454545454545454545454545454545454545454545454545454545454|-261s0 1nX0 11B0 1nX0 SgN0 8x30 iw0 SWp0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11A0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0","America/La_Paz|CMT BST -04|4w.A 3w.A 40|012|-1x37r.o 13b0|19e5","America/Lima|LMT -05 -04|58.A 50 40|0121212121212121|-2tyGP.o 1bDzP.o zX0 1aN0 1cL0 1cN0 1cL0 1PrB0 zX0 1O10 zX0 6Gp0 zX0 98p0 zX0|11e6","America/Los_Angeles|PST PDT PWT PPT|80 70 70 70|010102301010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-261q0 1nX0 11B0 1nX0 SgN0 8x10 iy0 5Wp1 1VaX 3dA0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1a00 1fA0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|15e6","America/Maceio|LMT -03 -02|2m.Q 30 20|012121212121212121212121212121212121212121|-2glxB.8 HdLB.8 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 dMN0 Lz0 8Q10 WL0 1tB0 5z0 2mN0 On0|93e4","America/Managua|MMT CST EST CDT|5J.c 60 50 50|0121313121213131|-1quie.M 1yAMe.M 4mn0 9Up0 Dz0 1K10 Dz0 s3F0 1KH0 DB0 9In0 k8p0 19X0 1o30 11y0|22e5","America/Manaus|LMT -04 -03|40.4 40 30|01212121212121212121212121212121|-2glvX.U HdKX.U 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 dPB0 On0|19e5","America/Martinique|FFMT AST ADT|44.k 40 30|0121|-2mPTT.E 2LPbT.E 19X0|39e4","America/Matamoros|LMT CST CDT|6E 60 50|0121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-1UQG0 2FjC0 1nX0 i6p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 U10 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|45e4","America/Mazatlan|LMT MST CST PST MDT|75.E 70 60 80 60|0121212131414141414141414141414141414141414141414141414141414141414141414141414141414141414141|-1UQF0 deL0 8lc0 17c0 10M0 1dd0 otX0 gmN0 P2N0 13Vd0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0|44e4","America/Menominee|CST CDT CWT CPT EST|60 50 50 50 50|01010230101041010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-261s0 1nX0 11B0 1nX0 SgN0 8x30 iw0 1o10 11z0 LCN0 1fz0 6410 9Jb0 1cM0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|85e2","America/Merida|LMT CST EST CDT|5W.s 60 50 50|0121313131313131313131313131313131313131313131313131313131313131313131313131313131313131|-1UQG0 2q2o0 2hz0 wu30 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0|11e5","America/Metlakatla|PST PWT PPT PDT AKST AKDT|80 70 70 70 90 80|0120303030303030303030303030303030454545454545454545454545454545454545454545454|-17T20 8x10 iy0 Vo10 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1hU10 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|14e2","America/Mexico_City|LMT MST CST CDT CWT|6A.A 70 60 50 50|012121232324232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-1UQF0 deL0 8lc0 17c0 10M0 1dd0 gEn0 TX0 3xd0 Jb0 6zB0 SL0 e5d0 17b0 1Pff0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0|20e6","America/Miquelon|LMT AST -03 -02|3I.E 40 30 20|012323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-2mKkf.k 2LTAf.k gQ10 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|61e2","America/Moncton|EST AST ADT AWT APT|50 40 30 30 30|012121212121212121212134121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2IsH0 CwN0 1in0 zAo0 An0 1Nd0 An0 1Nd0 An0 1Nd0 An0 1Nd0 An0 1Nd0 An0 1K10 Lz0 1zB0 NX0 1u10 Wn0 S20 8x50 iu0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 3Cp0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14n1 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 ReX 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|64e3","America/Monterrey|LMT CST CDT|6F.g 60 50|0121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-1UQG0 2FjC0 1nX0 i6p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0|41e5","America/Montevideo|LMT MMT -04 -03 -0330 -0230 -02 -0130|3I.P 3I.P 40 30 3u 2u 20 1u|012343434343434343434343435353636353636375363636363636363636363636363636363636363636363|-2tRUf.9 sVc0 8jcf.9 1db0 1dcu 1cLu 1dcu 1cLu ircu 11zu 1o0u 11zu 1o0u 11zu 1o0u 11zu 1qMu WLu 1qMu WLu 1fAu 1cLu 1o0u 11zu NAu 3jXu zXu Dq0u 19Xu pcu jz0 cm10 19X0 6tB0 1fbu 3o0u jX0 4vB0 xz0 3Cp0 mmu 1a10 IMu Db0 4c10 uL0 1Nd0 An0 1SN0 uL0 mp0 28L0 iPB0 un0 1SN0 xz0 1zd0 Lz0 1zd0 Rb0 1zd0 On0 1wp0 Rb0 s8p0 1fB0 1ip0 11z0 1ld0 14n0 1o10 11z0 1o10 11z0 1o10 14n0 1ld0 14n0 1ld0 14n0 1o10 11z0 1o10 11z0 1o10 11z0|17e5","America/Toronto|EST EDT EWT EPT|50 40 40 40|01010101010101010101010101010101010101010101012301010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-25TR0 1in0 11Wu 1nzu 1fD0 WJ0 1wr0 Nb0 1Ap0 On0 1zd0 On0 1wp0 TX0 1tB0 TX0 1tB0 TX0 1tB0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 4kM0 8x40 iv0 1o10 11z0 1nX0 11z0 1o10 11z0 1o10 1qL0 11D0 1nX0 11B0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|65e5","America/Nassau|LMT EST EDT|59.u 50 40|012121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2kNuO.u 26XdO.u 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|24e4","America/New_York|EST EDT EWT EPT|50 40 40 40|01010101010101010101010101010101010101010101010102301010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-261t0 1nX0 11B0 1nX0 11B0 1qL0 1a10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 RB0 8x40 iv0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|21e6","America/Nipigon|EST EDT EWT EPT|50 40 40 40|010123010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-25TR0 1in0 Rnb0 3je0 8x40 iv0 19yN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|16e2","America/Nome|NST NWT NPT BST BDT YST AKST AKDT|b0 a0 a0 b0 a0 90 90 80|012034343434343434343434343434343456767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676|-17SX0 8wW0 iB0 Qlb0 52O0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 cl0 10q0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|38e2","America/Noronha|LMT -02 -01|29.E 20 10|0121212121212121212121212121212121212121|-2glxO.k HdKO.k 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 nsp0 WL0 1tB0 2L0 2pB0 On0|30e2","America/North_Dakota/Beulah|MST MDT MWT MPT CST CDT|70 60 60 60 60 50|010102301010101010101010101010101010101010101010101010101010101010101010101010101010101010101014545454545454545454545454545454545454545454545454545454|-261r0 1nX0 11B0 1nX0 SgN0 8x20 ix0 QwN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Oo0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0","America/North_Dakota/Center|MST MDT MWT MPT CST CDT|70 60 60 60 60 50|010102301010101010101010101010101010101010101010101010101014545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454|-261r0 1nX0 11B0 1nX0 SgN0 8x20 ix0 QwN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14o0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0","America/North_Dakota/New_Salem|MST MDT MWT MPT CST CDT|70 60 60 60 60 50|010102301010101010101010101010101010101010101010101010101010101010101010101010101454545454545454545454545454545454545454545454545454545454545454545454|-261r0 1nX0 11B0 1nX0 SgN0 8x20 ix0 QwN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14o0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0","America/Ojinaga|LMT MST CST CDT MDT|6V.E 70 60 50 60|0121212323241414141414141414141414141414141414141414141414141414141414141414141414141414141|-1UQF0 deL0 8lc0 17c0 10M0 1dd0 2zQN0 1lb0 14p0 1lb0 14q0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 U10 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|23e3","America/Pangnirtung|-00 AST AWT APT ADDT ADT EDT EST CST CDT|0 40 30 30 20 30 40 50 60 50|012314151515151515151515151515151515167676767689767676767676767676767676767676767676767676767676767676767676767676767676767|-1XiM0 PnG0 8x50 iu0 LCL0 1fA0 zgO0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1o00 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11C0 1nX0 11A0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|14e2","America/Paramaribo|LMT PMT PMT -0330 -03|3E.E 3E.Q 3E.A 3u 30|01234|-2nDUj.k Wqo0.c qanX.I 1yVXN.o|24e4","America/Phoenix|MST MDT MWT|70 60 60|01010202010|-261r0 1nX0 11B0 1nX0 SgN0 4Al1 Ap0 1db0 SWqX 1cL0|42e5","America/Port-au-Prince|PPMT EST EDT|4N 50 40|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-28RHb 2FnMb 19X0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14q0 1o00 11A0 1o00 11A0 1o00 14o0 1lc0 14o0 1lc0 14o0 1o00 11A0 1o00 11A0 1o00 14o0 1lc0 14o0 1lc0 i6n0 1nX0 11B0 1nX0 d430 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 3iN0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|23e5","America/Rio_Branco|LMT -05 -04|4v.c 50 40|01212121212121212121212121212121|-2glvs.M HdLs.M 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 NBd0 d5X0|31e4","America/Porto_Velho|LMT -04 -03|4f.A 40 30|012121212121212121212121212121|-2glvI.o HdKI.o 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0|37e4","America/Puerto_Rico|AST AWT APT|40 30 30|0120|-17lU0 7XT0 iu0|24e5","America/Punta_Arenas|SMT -05 -04 -03|4G.K 50 40 30|0102021212121212121232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323|-2q2jh.e fJAh.e 5knG.K 1Vzh.e jRAG.K 1pbh.e 11d0 1oL0 11d0 1oL0 11d0 1oL0 11d0 1pb0 11d0 nHX0 op0 blz0 ko0 Qeo0 WL0 1zd0 On0 1ip0 11z0 1o10 11z0 1qN0 WL0 1ld0 14n0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 WL0 1qN0 1cL0 1cN0 11z0 1o10 11z0 1qN0 WL0 1fB0 19X0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1ip0 1fz0 1fB0 11z0 1qN0 WL0 1qN0 WL0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1o10 19X0 1fB0 1nX0 G10 1EL0 Op0 1zb0 Rd0 1wn0 Rd0 46n0 Ap0","America/Rainy_River|CST CDT CWT CPT|60 50 50 50|010123010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-25TQ0 1in0 Rnb0 3je0 8x30 iw0 19yN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|842","America/Rankin_Inlet|-00 CST CDDT CDT EST|0 60 40 50 50|012131313131313131313131313131313131313131313431313131313131313131313131313131313131313131313131313131313131313131313131|-vDc0 keu0 1fA0 zgO0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|26e2","America/Recife|LMT -03 -02|2j.A 30 20|0121212121212121212121212121212121212121|-2glxE.o HdLE.o 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 nsp0 WL0 1tB0 2L0 2pB0 On0|33e5","America/Regina|LMT MST MDT MWT MPT CST|6W.A 70 60 60 60 60|012121212121212121212121341212121212121212121212121215|-2AD51.o uHe1.o 1in0 s2L0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 66N0 1cL0 1cN0 19X0 1fB0 1cL0 1fB0 1cL0 1cN0 1cL0 M30 8x20 ix0 1ip0 1cL0 1ip0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 3NB0 1cL0 1cN0|19e4","America/Resolute|-00 CST CDDT CDT EST|0 60 40 50 50|012131313131313131313131313131313131313131313431313131313431313131313131313131313131313131313131313131313131313131313131|-SnA0 GWS0 1fA0 zgO0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|229","America/Santarem|LMT -04 -03|3C.M 40 30|0121212121212121212121212121212|-2glwl.c HdLl.c 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 NBd0|21e4","America/Santiago|SMT -05 -04 -03|4G.K 50 40 30|010202121212121212321232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323|-2q2jh.e fJAh.e 5knG.K 1Vzh.e jRAG.K 1pbh.e 11d0 1oL0 11d0 1oL0 11d0 1oL0 11d0 1pb0 11d0 nHX0 op0 9Bz0 jb0 1oN0 ko0 Qeo0 WL0 1zd0 On0 1ip0 11z0 1o10 11z0 1qN0 WL0 1ld0 14n0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 WL0 1qN0 1cL0 1cN0 11z0 1o10 11z0 1qN0 WL0 1fB0 19X0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1ip0 1fz0 1fB0 11z0 1qN0 WL0 1qN0 WL0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1o10 19X0 1fB0 1nX0 G10 1EL0 Op0 1zb0 Rd0 1wn0 Rd0 46n0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Dd0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Dd0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Dd0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0|62e5","America/Santo_Domingo|SDMT EST EDT -0430 AST|4E 50 40 4u 40|01213131313131414|-1ttjk 1lJMk Mn0 6sp0 Lbu 1Cou yLu 1RAu wLu 1QMu xzu 1Q0u xXu 1PAu 13jB0 e00|29e5","America/Sao_Paulo|LMT -03 -02|36.s 30 20|012121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212|-2glwR.w HdKR.w 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 pTd0 PX0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 1EN0 Lz0 1C10 IL0 1HB0 Db0 1HB0 On0 1zd0 On0 1zd0 Lz0 1zd0 Rb0 1wN0 Wn0 1tB0 Rb0 1tB0 WL0 1tB0 Rb0 1zd0 On0 1HB0 FX0 1C10 Lz0 1Ip0 HX0 1zd0 On0 1HB0 IL0 1wp0 On0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 Rb0 1zd0 Lz0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 On0 1zd0 On0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 IL0 1EN0 FX0 1HB0 FX0 1HB0 IL0 1EN0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1Kp0 FX0 1HB0 IL0 1EN0 FX0 1HB0 FX0 1HB0 IL0 1EN0|20e6","America/Scoresbysund|LMT -02 -01 +00|1r.Q 20 10 0|0121323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-2a5Ww.8 2z5ew.8 1a00 1cK0 1cL0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|452","America/Sitka|PST PWT PPT PDT YST AKST AKDT|80 70 70 70 90 90 80|01203030303030303030303030303030345656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565|-17T20 8x10 iy0 Vo10 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 co0 10q0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|90e2","America/St_Johns|NST NDT NST NDT NWT NPT NDDT|3u.Q 2u.Q 3u 2u 2u 2u 1u|01010101010101010101010101010101010102323232323232324523232323232323232323232323232323232323232323232323232323232323232323232323232323232326232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-28oit.8 14L0 1nB0 1in0 1gm0 Dz0 1JB0 1cL0 1cN0 1cL0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1fB0 1cL0 1cN0 1cL0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1fB0 1cL0 1fB0 19X0 1fB0 19X0 10O0 eKX.8 19X0 1iq0 WL0 1qN0 WL0 1qN0 WL0 1tB0 TX0 1tB0 WL0 1qN0 WL0 1qN0 7UHu itu 1tB0 WL0 1qN0 WL0 1qN0 WL0 1qN0 WL0 1tB0 WL0 1ld0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14n1 1lb0 14p0 1nW0 11C0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zcX Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|11e4","America/Swift_Current|LMT MST MDT MWT MPT CST|7b.k 70 60 60 60 60|012134121212121212121215|-2AD4M.E uHdM.E 1in0 UGp0 8x20 ix0 1o10 17b0 1ip0 11z0 1o10 11z0 1o10 11z0 isN0 1cL0 3Cp0 1cL0 1cN0 11z0 1qN0 WL0 pMp0|16e3","America/Tegucigalpa|LMT CST CDT|5M.Q 60 50|01212121|-1WGGb.8 2ETcb.8 WL0 1qN0 WL0 GRd0 AL0|11e5","America/Thule|LMT AST ADT|4z.8 40 30|012121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2a5To.Q 31NBo.Q 1cL0 1cN0 1cL0 1fB0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|656","America/Thunder_Bay|CST EST EWT EPT EDT|60 50 40 40 40|0123141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141|-2q5S0 1iaN0 8x40 iv0 XNB0 1cL0 1cN0 1fz0 1cN0 1cL0 3Cp0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|11e4","America/Vancouver|PST PDT PWT PPT|80 70 70 70|0102301010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-25TO0 1in0 UGp0 8x10 iy0 1o10 17b0 1ip0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|23e5","America/Whitehorse|YST YDT YWT YPT YDDT PST PDT|90 80 80 80 70 80 70|0101023040565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565|-25TN0 1in0 1o10 13V0 Ser0 8x00 iz0 LCL0 1fA0 3NA0 vrd0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|23e3","America/Winnipeg|CST CDT CWT CPT|60 50 50 50|010101023010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-2aIi0 WL0 3ND0 1in0 Jap0 Rb0 aCN0 8x30 iw0 1tB0 11z0 1ip0 11z0 1o10 11z0 1o10 11z0 1rd0 10L0 1op0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 1cL0 1cN0 11z0 6i10 WL0 6i10 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1a00 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1a00 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 14o0 1lc0 14o0 1o00 11A0 1o00 11A0 1o00 14o0 1lc0 14o0 1lc0 14o0 1o00 11A0 1o00 11A0 1o00 14o0 1lc0 14o0 1lc0 14o0 1lc0 14o0 1o00 11A0 1o00 11A0 1o00 14o0 1lc0 14o0 1lc0 14o0 1o00 11A0 1o00 11A0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|66e4","America/Yakutat|YST YWT YPT YDT AKST AKDT|90 80 80 80 90 80|01203030303030303030303030303030304545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454|-17T10 8x00 iz0 Vo10 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 cn0 10q0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|642","America/Yellowknife|-00 MST MWT MPT MDDT MDT|0 70 60 60 50 60|012314151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151|-1pdA0 hix0 8x20 ix0 LCL0 1fA0 zgO0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|19e3","Antarctica/Casey|-00 +08 +11|0 -80 -b0|01212121|-2q00 1DjS0 T90 40P0 KL0 blz0 3m10|10","Antarctica/Davis|-00 +07 +05|0 -70 -50|01012121|-vyo0 iXt0 alj0 1D7v0 VB0 3Wn0 KN0|70","Antarctica/DumontDUrville|-00 +10|0 -a0|0101|-U0o0 cfq0 bFm0|80","Antarctica/Macquarie|AEST AEDT -00 +11|-a0 -b0 0 -b0|0102010101010101010101010101010101010101010101010101010101010101010101010101010101010101013|-29E80 19X0 4SL0 1ayy0 Lvs0 1cM0 1o00 Rc0 1wo0 Rc0 1wo0 U00 1wo0 LA0 1C00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 11A0 1qM0 WM0 1qM0 Oo0 1zc0 Oo0 1zc0 Oo0 1wo0 WM0 1tA0 WM0 1tA0 U00 1tA0 U00 1tA0 11A0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 11A0 1o00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1cM0 1a00 1io0 1cM0 1cM0 1cM0 1cM0 1cM0|1","Antarctica/Mawson|-00 +06 +05|0 -60 -50|012|-CEo0 2fyk0|60","Pacific/Auckland|NZMT NZST NZST NZDT|-bu -cu -c0 -d0|01020202020202020202020202023232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323|-1GCVu Lz0 1tB0 11zu 1o0u 11zu 1o0u 11zu 1o0u 14nu 1lcu 14nu 1lcu 1lbu 11Au 1nXu 11Au 1nXu 11Au 1nXu 11Au 1nXu 11Au 1qLu WMu 1qLu 11Au 1n1bu IM0 1C00 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1qM0 14o0 1lc0 14o0 1lc0 14o0 1lc0 17c0 1io0 17c0 1io0 17c0 1io0 17c0 1lc0 14o0 1lc0 14o0 1lc0 17c0 1io0 17c0 1io0 17c0 1lc0 14o0 1lc0 14o0 1lc0 17c0 1io0 17c0 1io0 17c0 1io0 17c0 1io0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00|14e5","Antarctica/Palmer|-00 -03 -04 -02|0 30 40 20|0121212121213121212121212121212121212121212121212121212121212121212121212121212121|-cao0 nD0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 jsN0 14N0 11z0 1o10 11z0 1qN0 WL0 1qN0 WL0 1qN0 1cL0 1cN0 11z0 1o10 11z0 1qN0 WL0 1fB0 19X0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1ip0 1fz0 1fB0 11z0 1qN0 WL0 1qN0 WL0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1o10 19X0 1fB0 1nX0 G10 1EL0 Op0 1zb0 Rd0 1wn0 Rd0 46n0 Ap0|40","Antarctica/Rothera|-00 -03|0 30|01|gOo0|130","Antarctica/Syowa|-00 +03|0 -30|01|-vs00|20","Antarctica/Troll|-00 +00 +02|0 0 -20|01212121212121212121212121212121212121212121212121212121212121212121|1puo0 hd0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|40","Antarctica/Vostok|-00 +06|0 -60|01|-tjA0|25","Europe/Oslo|CET CEST|-10 -20|010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-2awM0 Qm0 W6o0 5pf0 WM0 1fA0 1cM0 1cM0 1cM0 1cM0 wJc0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1qM0 WM0 zpc0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|62e4","Asia/Riyadh|LMT +03|-36.Q -30|01|-TvD6.Q|57e5","Asia/Almaty|LMT +05 +06 +07|-57.M -50 -60 -70|012323232323232323232321232323232323232323232323232|-1Pc57.M eUo7.M 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0|15e5","Asia/Amman|LMT EET EEST|-2n.I -20 -30|0121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-1yW2n.I 1HiMn.I KL0 1oN0 11b0 1oN0 11b0 1pd0 1dz0 1cp0 11b0 1op0 11b0 fO10 1db0 1e10 1cL0 1cN0 1cL0 1cN0 1fz0 1pd0 10n0 1ld0 14n0 1hB0 15b0 1ip0 19X0 1cN0 1cL0 1cN0 17b0 1ld0 14o0 1lc0 17c0 1io0 17c0 1io0 17c0 1So0 y00 1fc0 1dc0 1co0 1dc0 1cM0 1cM0 1cM0 1o00 11A0 1lc0 17c0 1cM0 1cM0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 4bX0 Dd0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0|25e5","Asia/Anadyr|LMT +12 +13 +14 +11|-bN.U -c0 -d0 -e0 -b0|01232121212121212121214121212121212121212121212121212121212141|-1PcbN.U eUnN.U 23CL0 1db0 2q10 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 2sp0 WM0|13e3","Asia/Aqtau|LMT +04 +05 +06|-3l.4 -40 -50 -60|012323232323232323232123232312121212121212121212|-1Pc3l.4 eUnl.4 24PX0 2pX0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cN0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0|15e4","Asia/Aqtobe|LMT +04 +05 +06|-3M.E -40 -50 -60|0123232323232323232321232323232323232323232323232|-1Pc3M.E eUnM.E 23CL0 3Db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0|27e4","Asia/Ashgabat|LMT +04 +05 +06|-3R.w -40 -50 -60|0123232323232323232323212|-1Pc3R.w eUnR.w 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0|41e4","Asia/Atyrau|LMT +03 +05 +06 +04|-3r.I -30 -50 -60 -40|01232323232323232323242323232323232324242424242|-1Pc3r.I eUor.I 24PW0 2pX0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 2sp0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0","Asia/Baghdad|BMT +03 +04|-2V.A -30 -40|012121212121212121212121212121212121212121212121212121|-26BeV.A 2ACnV.A 11b0 1cp0 1dz0 1dd0 1db0 1cN0 1cp0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1de0 1dc0 1dc0 1dc0 1cM0 1dc0 1cM0 1dc0 1cM0 1dc0 1dc0 1dc0 1cM0 1dc0 1cM0 1dc0 1cM0 1dc0 1dc0 1dc0 1cM0 1dc0 1cM0 1dc0 1cM0 1dc0 1dc0 1dc0 1cM0 1dc0 1cM0 1dc0 1cM0 1dc0|66e5","Asia/Qatar|LMT +04 +03|-3q.8 -40 -30|012|-21Jfq.8 27BXq.8|96e4","Asia/Baku|LMT +03 +04 +05|-3j.o -30 -40 -50|01232323232323232323232123232323232323232323232323232323232323232|-1Pc3j.o 1jUoj.o WCL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 1cM0 9Je0 1o00 11z0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|27e5","Asia/Bangkok|BMT +07|-6G.4 -70|01|-218SG.4|15e6","Asia/Barnaul|LMT +06 +07 +08|-5z -60 -70 -80|0123232323232323232323212323232321212121212121212121212121212121212|-21S5z pCnz 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 p90 LE0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 3rd0","Asia/Beirut|EET EEST|-20 -30|010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-21aq0 1on0 1410 1db0 19B0 1in0 1ip0 WL0 1lQp0 11b0 1oN0 11b0 1oN0 11b0 1pd0 11b0 1oN0 11b0 q6N0 En0 1oN0 11b0 1oN0 11b0 1oN0 11b0 1pd0 11b0 1oN0 11b0 1op0 11b0 dA10 17b0 1iN0 17b0 1iN0 17b0 1iN0 17b0 1vB0 SL0 1mp0 13z0 1iN0 17b0 1iN0 17b0 1jd0 12n0 1a10 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0|22e5","Asia/Bishkek|LMT +05 +06 +07|-4W.o -50 -60 -70|012323232323232323232321212121212121212121212121212|-1Pc4W.o eUnW.o 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2e00 1tX0 17b0 1ip0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1cPu 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0|87e4","Asia/Brunei|LMT +0730 +08|-7D.E -7u -80|012|-1KITD.E gDc9.E|42e4","Asia/Kolkata|MMT IST +0630|-5l.a -5u -6u|012121|-2zOtl.a 1r2LP.a 1un0 HB0 7zX0|15e6","Asia/Chita|LMT +08 +09 +10|-7x.Q -80 -90 -a0|012323232323232323232321232323232323232323232323232323232323232312|-21Q7x.Q pAnx.Q 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 3re0|33e4","Asia/Choibalsan|LMT +07 +08 +10 +09|-7C -70 -80 -a0 -90|0123434343434343434343434343434343434343434343424242|-2APHC 2UkoC cKn0 1da0 1dd0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1cL0 6hD0 11z0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 3Db0 h1f0 1cJ0 1cP0 1cJ0|38e3","Asia/Shanghai|CST CDT|-80 -90|01010101010101010|-1c1I0 LX0 16p0 1jz0 1Myp0 Rb0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0|23e6","Asia/Colombo|MMT +0530 +06 +0630|-5j.w -5u -60 -6u|01231321|-2zOtj.w 1rFbN.w 1zzu 7Apu 23dz0 11zu n3cu|22e5","Asia/Dhaka|HMT +0630 +0530 +06 +07|-5R.k -6u -5u -60 -70|0121343|-18LFR.k 1unn.k HB0 m6n0 2kxbu 1i00|16e6","Asia/Damascus|LMT EET EEST|-2p.c -20 -30|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-21Jep.c Hep.c 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1xRB0 11X0 1oN0 10L0 1pB0 11b0 1oN0 10L0 1mp0 13X0 1oN0 11b0 1pd0 11b0 1oN0 11b0 1oN0 11b0 1oN0 11b0 1pd0 11b0 1oN0 11b0 1oN0 11b0 1oN0 11b0 1pd0 11b0 1oN0 Nb0 1AN0 Nb0 bcp0 19X0 1gp0 19X0 3ld0 1xX0 Vd0 1Bz0 Sp0 1vX0 10p0 1dz0 1cN0 1cL0 1db0 1db0 1g10 1an0 1ap0 1db0 1fd0 1db0 1cN0 1db0 1dd0 1db0 1cp0 1dz0 1c10 1dX0 1cN0 1db0 1dd0 1db0 1cN0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1db0 1cN0 1db0 1cN0 19z0 1fB0 1qL0 11B0 1on0 Wp0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0|26e5","Asia/Dili|LMT +08 +09|-8m.k -80 -90|01212|-2le8m.k 1dnXm.k 1nfA0 Xld0|19e4","Asia/Dubai|LMT +04|-3F.c -40|01|-21JfF.c|39e5","Asia/Dushanbe|LMT +05 +06 +07|-4z.c -50 -60 -70|012323232323232323232321|-1Pc4z.c eUnz.c 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2hB0|76e4","Asia/Famagusta|LMT EET EEST +03|-2f.M -20 -30 -30|0121212121212121212121212121212121212121212121212121212121212121212121212121212121212312121212121212121212121212121212121212121|-1Vc2f.M 2a3cf.M 1cL0 1qp0 Xz0 19B0 19X0 1fB0 1db0 1cp0 1cL0 1fB0 19X0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1o30 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 15U0 2Ks0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00","Asia/Gaza|EET EEST IST IDT|-20 -30 -20 -30|010101010101010101010101010101012323232323232323232323232320101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-1c2q0 5Rb0 10r0 1px0 10N0 1pz0 16p0 1jB0 16p0 1jx0 pBd0 Vz0 1oN0 11b0 1oO0 10N0 1pz0 10N0 1pb0 10N0 1pb0 10N0 1pb0 10N0 1pz0 10N0 1pb0 10N0 1pb0 11d0 1oL0 dW0 hfB0 Db0 1fB0 Rb0 npB0 11z0 1C10 IL0 1s10 10n0 1o10 WL0 1zd0 On0 1ld0 11z0 1o10 14n0 1o10 14n0 1nd0 12n0 1nd0 Xz0 1q10 12n0 M10 C00 17c0 1io0 17c0 1io0 17c0 1o00 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 17c0 1io0 18N0 1bz0 19z0 1gp0 1610 1iL0 11z0 1o10 14o0 1lA1 SKX 1xd1 MKX 1AN0 1a00 1fA0 1cL0 1cN0 1nX0 1210 1nz0 1220 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1qL0|18e5","Asia/Hebron|EET EEST IST IDT|-20 -30 -20 -30|01010101010101010101010101010101232323232323232323232323232010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-1c2q0 5Rb0 10r0 1px0 10N0 1pz0 16p0 1jB0 16p0 1jx0 pBd0 Vz0 1oN0 11b0 1oO0 10N0 1pz0 10N0 1pb0 10N0 1pb0 10N0 1pb0 10N0 1pz0 10N0 1pb0 10N0 1pb0 11d0 1oL0 dW0 hfB0 Db0 1fB0 Rb0 npB0 11z0 1C10 IL0 1s10 10n0 1o10 WL0 1zd0 On0 1ld0 11z0 1o10 14n0 1o10 14n0 1nd0 12n0 1nd0 Xz0 1q10 12n0 M10 C00 17c0 1io0 17c0 1io0 17c0 1o00 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 17c0 1io0 18N0 1bz0 19z0 1gp0 1610 1iL0 12L0 1mN0 14o0 1lc0 Tb0 1xd1 MKX bB0 cn0 1cN0 1a00 1fA0 1cL0 1cN0 1nX0 1210 1nz0 1220 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1qL0|25e4","Asia/Ho_Chi_Minh|LMT PLMT +07 +08 +09|-76.E -76.u -70 -80 -90|0123423232|-2yC76.E bK00.a 1h7b6.u 5lz0 18o0 3Oq0 k5b0 aW00 BAM0|90e5","Asia/Hong_Kong|LMT HKT HKST JST|-7A.G -80 -90 -90|0121312121212121212121212121212121212121212121212121212121212121212121|-2CFHA.G 1sEP6.G 1cL0 ylu 93X0 1qQu 1tX0 Rd0 1In0 NB0 1cL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1kL0 14N0 1nX0 U10 1tz0 U10 1wn0 Rd0 1wn0 U10 1tz0 U10 1tz0 U10 1tz0 U10 1wn0 Rd0 1wn0 Rd0 1wn0 U10 1tz0 U10 1tz0 17d0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 s10 1Vz0 1cN0 1cL0 1cN0 1cL0 6fd0 14n0|73e5","Asia/Hovd|LMT +06 +07 +08|-66.A -60 -70 -80|012323232323232323232323232323232323232323232323232|-2APG6.A 2Uko6.A cKn0 1db0 1dd0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1cL0 6hD0 11z0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 kEp0 1cJ0 1cP0 1cJ0|81e3","Asia/Irkutsk|IMT +07 +08 +09|-6V.5 -70 -80 -90|01232323232323232323232123232323232323232323232323232323232323232|-21zGV.5 pjXV.5 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|60e4","Europe/Istanbul|IMT EET EEST +04 +03|-1U.U -20 -30 -40 -30|012121212121212121212121212121212121212121212121212121234343434342121212121212121212121212121212121212121212121212121212121212124|-2ogNU.U dzzU.U 11b0 8tB0 1on0 1410 1db0 19B0 1in0 3Rd0 Un0 1oN0 11b0 zSp0 CL0 mN0 1Vz0 1gN0 1pz0 5Rd0 1fz0 1yp0 ML0 1kp0 17b0 1ip0 17b0 1fB0 19X0 1jB0 18L0 1ip0 17z0 qdd0 xX0 3S10 Tz0 dA10 11z0 1o10 11z0 1qN0 11z0 1ze0 11B0 WM0 1qO0 WI0 1nX0 1rB0 10L0 11B0 1in0 17d0 1in0 2pX0 19E0 1fU0 16Q0 1iI0 16Q0 1iI0 1Vd0 pb0 3Kp0 14o0 1de0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1a00 1fA0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WO0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 Xc0 1qo0 WM0 1qM0 11A0 1o00 1200 1nA0 11A0 1tA0 U00 15w0|13e6","Asia/Jakarta|BMT +0720 +0730 +09 +08 WIB|-77.c -7k -7u -90 -80 -70|01232425|-1Q0Tk luM0 mPzO 8vWu 6kpu 4PXu xhcu|31e6","Asia/Jayapura|LMT +09 +0930 WIT|-9m.M -90 -9u -90|0123|-1uu9m.M sMMm.M L4nu|26e4","Asia/Jerusalem|JMT IST IDT IDDT|-2k.E -20 -30 -40|01212121212132121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-26Bek.E SyMk.E 5Rb0 10r0 1px0 10N0 1pz0 16p0 1jB0 16p0 1jx0 3LB0 Em0 or0 1cn0 1dB0 16n0 10O0 1ja0 1tC0 14o0 1cM0 1a00 11A0 1Na0 An0 1MP0 AJ0 1Kp0 LC0 1oo0 Wl0 EQN0 Db0 1fB0 Rb0 npB0 11z0 1C10 IL0 1s10 10n0 1o10 WL0 1zd0 On0 1ld0 11z0 1o10 14n0 1o10 14n0 1nd0 12n0 1nd0 Xz0 1q10 12n0 1hB0 1dX0 1ep0 1aL0 1eN0 17X0 1nf0 11z0 1tB0 19W0 1e10 17b0 1ep0 1gL0 18N0 1fz0 1eN0 17b0 1gq0 1gn0 19d0 1dz0 1c10 17X0 1hB0 1gn0 19d0 1dz0 1c10 17X0 1kp0 1dz0 1c10 1aL0 1eN0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0|81e4","Asia/Kabul|+04 +0430|-40 -4u|01|-10Qs0|46e5","Asia/Kamchatka|LMT +11 +12 +13|-ay.A -b0 -c0 -d0|012323232323232323232321232323232323232323232323232323232323212|-1SLKy.A ivXy.A 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 2sp0 WM0|18e4","Asia/Karachi|LMT +0530 +0630 +05 PKT PKST|-4s.c -5u -6u -50 -50 -60|012134545454|-2xoss.c 1qOKW.c 7zX0 eup0 LqMu 1fy00 1cL0 dK10 11b0 1610 1jX0|24e6","Asia/Urumqi|LMT +06|-5O.k -60|01|-1GgtO.k|32e5","Asia/Kathmandu|LMT +0530 +0545|-5F.g -5u -5J|012|-21JhF.g 2EGMb.g|12e5","Asia/Khandyga|LMT +08 +09 +10 +11|-92.d -80 -90 -a0 -b0|0123232323232323232323212323232323232323232323232343434343434343432|-21Q92.d pAp2.d 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 qK0 yN0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 17V0 7zD0|66e2","Asia/Krasnoyarsk|LMT +06 +07 +08|-6b.q -60 -70 -80|01232323232323232323232123232323232323232323232323232323232323232|-21Hib.q prAb.q 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|10e5","Asia/Kuala_Lumpur|SMT +07 +0720 +0730 +09 +08|-6T.p -70 -7k -7u -90 -80|0123435|-2Bg6T.p 17anT.p l5XE 17bO 8Fyu 1so1u|71e5","Asia/Kuching|LMT +0730 +08 +0820 +09|-7l.k -7u -80 -8k -90|0123232323232323242|-1KITl.k gDbP.k 6ynu AnE 1O0k AnE 1NAk AnE 1NAk AnE 1NAk AnE 1O0k AnE 1NAk AnE pAk 8Fz0|13e4","Asia/Macau|LMT CST CDT|-7y.k -80 -90|012121212121212121212121212121212121212121|-2le80 1XO3u 1wn0 Rd0 1wn0 R9u 1wqu U10 1tz0 TVu 1tz0 17gu 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cJu 1cL0 1cN0 1fz0 1cN0 1cOu 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cJu 1cL0 1cN0 1fz0 1cN0 1cL0|57e4","Asia/Magadan|LMT +10 +11 +12|-a3.c -a0 -b0 -c0|012323232323232323232321232323232323232323232323232323232323232312|-1Pca3.c eUo3.c 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 3Cq0|95e3","Asia/Makassar|LMT MMT +08 +09 WITA|-7V.A -7V.A -80 -90 -80|01234|-21JjV.A vfc0 myLV.A 8ML0|15e5","Asia/Manila|+08 +09|-80 -90|010101010|-1kJI0 AL0 cK10 65X0 mXB0 vX0 VK10 1db0|24e6","Asia/Nicosia|LMT EET EEST|-2d.s -20 -30|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-1Vc2d.s 2a3cd.s 1cL0 1qp0 Xz0 19B0 19X0 1fB0 1db0 1cp0 1cL0 1fB0 19X0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1o30 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|32e4","Asia/Novokuznetsk|LMT +06 +07 +08|-5M.M -60 -70 -80|012323232323232323232321232323232323232323232323232323232323212|-1PctM.M eULM.M 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 2sp0 WM0|55e4","Asia/Novosibirsk|LMT +06 +07 +08|-5v.E -60 -70 -80|0123232323232323232323212323212121212121212121212121212121212121212|-21Qnv.E pAFv.E 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 ml0 Os0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 4eN0|15e5","Asia/Omsk|LMT +05 +06 +07|-4R.u -50 -60 -70|01232323232323232323232123232323232323232323232323232323232323232|-224sR.u pMLR.u 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|12e5","Asia/Oral|LMT +03 +05 +06 +04|-3p.o -30 -50 -60 -40|01232323232323232424242424242424242424242424242|-1Pc3p.o eUop.o 23CK0 3Db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 2pB0 1cM0 1fA0 1cM0 1cM0 IM0 1EM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0|27e4","Asia/Pontianak|LMT PMT +0730 +09 +08 WITA WIB|-7h.k -7h.k -7u -90 -80 -80 -70|012324256|-2ua7h.k XE00 munL.k 8Rau 6kpu 4PXu xhcu Wqnu|23e4","Asia/Pyongyang|LMT KST JST KST|-8n -8u -90 -90|012313|-2um8n 97XR 1lTzu 2Onc0 6BAu|29e5","Asia/Qyzylorda|LMT +04 +05 +06|-4l.Q -40 -50 -60|0123232323232323232323232323232323232323232323|-1Pc4l.Q eUol.Q 23CL0 3Db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 3ao0 1EM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0|73e4","Asia/Rangoon|RMT +0630 +09|-6o.L -6u -90|0121|-21Jio.L SmnS.L 7j9u|48e5","Asia/Sakhalin|LMT +09 +11 +12 +10|-9u.M -90 -b0 -c0 -a0|01232323232323232323232423232323232424242424242424242424242424242|-2AGVu.M 1BoMu.M 1qFa0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 2pB0 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 3rd0|58e4","Asia/Samarkand|LMT +04 +05 +06|-4r.R -40 -50 -60|01232323232323232323232|-1Pc4r.R eUor.R 23CL0 3Db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0|36e4","Asia/Seoul|LMT KST JST KST KDT KDT|-8r.Q -8u -90 -90 -9u -a0|0123141414141414135353|-2um8r.Q 97XV.Q 1m1zu kKo0 2I0u OL0 1FB0 Rb0 1qN0 TX0 1tB0 TX0 1tB0 TX0 1tB0 TX0 2ap0 12FBu 11A0 1o00 11A0|23e6","Asia/Srednekolymsk|LMT +10 +11 +12|-ae.Q -a0 -b0 -c0|01232323232323232323232123232323232323232323232323232323232323232|-1Pcae.Q eUoe.Q 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|35e2","Asia/Taipei|CST JST CDT|-80 -90 -90|01020202020202020202020202020202020202020|-1iw80 joM0 1yo0 Tz0 1ip0 1jX0 1cN0 11b0 1oN0 11b0 1oN0 11b0 1oN0 11b0 10N0 1BX0 10p0 1pz0 10p0 1pz0 10p0 1db0 1dd0 1db0 1cN0 1db0 1cN0 1db0 1cN0 1db0 1BB0 ML0 1Bd0 ML0 uq10 1db0 1cN0 1db0 97B0 AL0|74e5","Asia/Tashkent|LMT +05 +06 +07|-4B.b -50 -60 -70|012323232323232323232321|-1Pc4B.b eUnB.b 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0|23e5","Asia/Tbilisi|TBMT +03 +04 +05|-2X.b -30 -40 -50|0123232323232323232323212121232323232323232323212|-1Pc2X.b 1jUnX.b WCL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 1cK0 1cL0 1cN0 1cL0 1cN0 2pz0 1cL0 1fB0 3Nz0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 An0 Os0 WM0|11e5","Asia/Tehran|LMT TMT +0330 +04 +05 +0430|-3p.I -3p.I -3u -40 -50 -4u|01234325252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252|-2btDp.I 1d3c0 1huLT.I TXu 1pz0 sN0 vAu 1cL0 1dB0 1en0 pNB0 UL0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 64p0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0|14e6","Asia/Thimphu|LMT +0530 +06|-5W.A -5u -60|012|-Su5W.A 1BGMs.A|79e3","Asia/Tokyo|JST JDT|-90 -a0|010101010|-QJJ0 Rb0 1ld0 14n0 1zd0 On0 1zd0 On0|38e6","Asia/Tomsk|LMT +06 +07 +08|-5D.P -60 -70 -80|0123232323232323232323212323232323232323232323212121212121212121212|-21NhD.P pxzD.P 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 co0 1bB0 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 3Qp0|10e5","Asia/Ulaanbaatar|LMT +07 +08 +09|-77.w -70 -80 -90|012323232323232323232323232323232323232323232323232|-2APH7.w 2Uko7.w cKn0 1db0 1dd0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1cL0 6hD0 11z0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 kEp0 1cJ0 1cP0 1cJ0|12e5","Asia/Ust-Nera|LMT +08 +09 +12 +11 +10|-9w.S -80 -90 -c0 -b0 -a0|012343434343434343434345434343434343434343434343434343434343434345|-21Q9w.S pApw.S 23CL0 1d90 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 17V0 7zD0|65e2","Asia/Vladivostok|LMT +09 +10 +11|-8L.v -90 -a0 -b0|01232323232323232323232123232323232323232323232323232323232323232|-1SJIL.v itXL.v 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|60e4","Asia/Yakutsk|LMT +08 +09 +10|-8C.W -80 -90 -a0|01232323232323232323232123232323232323232323232323232323232323232|-21Q8C.W pAoC.W 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|28e4","Asia/Yekaterinburg|LMT PMT +04 +05 +06|-42.x -3J.5 -40 -50 -60|012343434343434343434343234343434343434343434343434343434343434343|-2ag42.x 7mQh.s qBvJ.5 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|14e5","Asia/Yerevan|LMT +03 +04 +05|-2W -30 -40 -50|0123232323232323232323212121212323232323232323232323232323232|-1Pc2W 1jUnW WCL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 4RX0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0|13e5","Atlantic/Azores|HMT -02 -01 +00 WET|1S.w 20 10 0 0|01212121212121212121212121212121212121212121232123212321232121212121212121212121212121212121212121232323232323232323232323232323234323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-2ldW0 aPX0 Sp0 LX0 1vc0 Tc0 1uM0 SM0 1vc0 Tc0 1vc0 SM0 1vc0 6600 1co0 3E00 17c0 1fA0 1a00 1io0 1a00 1io0 17c0 3I00 17c0 1cM0 1cM0 3Fc0 1cM0 1a00 1fA0 1io0 17c0 1cM0 1cM0 1a00 1fA0 1io0 1qM0 Dc0 1tA0 1cM0 1dc0 1400 gL0 IM0 s10 U00 dX0 Rc0 pd0 Rc0 gL0 Oo0 pd0 Rc0 gL0 Oo0 pd0 14o0 1cM0 1cP0 1cM0 1cM0 1cM0 1cM0 1cM0 3Co0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 qIl0 1cM0 1fA0 1cM0 1cM0 1cN0 1cL0 1cN0 1cM0 1cM0 1cM0 1cM0 1cN0 1cL0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cL0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|25e4","Atlantic/Bermuda|LMT AST ADT|4j.i 40 30|0121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-1BnRE.G 1LTbE.G 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|65e3","Atlantic/Canary|LMT -01 WET WEST|11.A 10 0 -10|01232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-1UtaW.o XPAW.o 1lAK0 1a10 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|54e4","Atlantic/Cape_Verde|LMT -02 -01|1y.4 20 10|01212|-2ldW0 1eEo0 7zX0 1djf0|50e4","Atlantic/Faroe|LMT WET WEST|r.4 0 -10|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2uSnw.U 2Wgow.U 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|49e3","Atlantic/Madeira|FMT -01 +00 +01 WET WEST|17.A 10 0 -10 0 -10|01212121212121212121212121212121212121212121232123212321232121212121212121212121212121212121212121454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454|-2ldX0 aPX0 Sp0 LX0 1vc0 Tc0 1uM0 SM0 1vc0 Tc0 1vc0 SM0 1vc0 6600 1co0 3E00 17c0 1fA0 1a00 1io0 1a00 1io0 17c0 3I00 17c0 1cM0 1cM0 3Fc0 1cM0 1a00 1fA0 1io0 17c0 1cM0 1cM0 1a00 1fA0 1io0 1qM0 Dc0 1tA0 1cM0 1dc0 1400 gL0 IM0 s10 U00 dX0 Rc0 pd0 Rc0 gL0 Oo0 pd0 Rc0 gL0 Oo0 pd0 14o0 1cM0 1cP0 1cM0 1cM0 1cM0 1cM0 1cM0 3Co0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 qIl0 1cM0 1fA0 1cM0 1cM0 1cN0 1cL0 1cN0 1cM0 1cM0 1cM0 1cM0 1cN0 1cL0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|27e4","Atlantic/Reykjavik|LMT -01 +00 GMT|1s 10 0 0|012121212121212121212121212121212121212121212121212121212121212121213|-2uWmw mfaw 1Bd0 ML0 1LB0 Cn0 1LB0 3fX0 C10 HrX0 1cO0 LB0 1EL0 LA0 1C00 Oo0 1wo0 Rc0 1wo0 Rc0 1wo0 Rc0 1zc0 Oo0 1zc0 14o0 1lc0 14o0 1lc0 14o0 1o00 11A0 1lc0 14o0 1o00 14o0 1lc0 14o0 1lc0 14o0 1lc0 14o0 1lc0 14o0 1o00 14o0 1lc0 14o0 1lc0 14o0 1lc0 14o0 1lc0 14o0 1lc0 14o0 1o00 14o0 1lc0 14o0 1lc0 14o0 1lc0 14o0 1lc0 14o0 1o00 14o0|12e4","Atlantic/South_Georgia|-02|20|0||30","Atlantic/Stanley|SMT -04 -03 -02|3P.o 40 30 20|012121212121212323212121212121212121212121212121212121212121212121212|-2kJw8.A 12bA8.A 19X0 1fB0 19X0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 Cn0 1Cc10 WL0 1qL0 U10 1tz0 2mN0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1tz0 U10 1tz0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1tz0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qN0 U10 1wn0 Rd0 1wn0 U10 1tz0 U10 1tz0 U10 1tz0 U10 1tz0 U10 1wn0 U10 1tz0 U10 1tz0 U10|21e2","Australia/Sydney|AEST AEDT|-a0 -b0|0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101|-293lX xcX 10jd0 yL0 1cN0 1cL0 1fB0 19X0 17c10 LA0 1C00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 14o0 1o00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 U00 1qM0 WM0 1tA0 WM0 1tA0 U00 1tA0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 11A0 1o00 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 WM0 1qM0 14o0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0|40e5","Australia/Adelaide|ACST ACDT|-9u -au|0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101|-293lt xcX 10jd0 yL0 1cN0 1cL0 1fB0 19X0 17c10 LA0 1C00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 U00 1qM0 WM0 1tA0 WM0 1tA0 U00 1tA0 U00 1tA0 Oo0 1zc0 WM0 1qM0 Rc0 1zc0 U00 1tA0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 WM0 1qM0 14o0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0|11e5","Australia/Brisbane|AEST AEDT|-a0 -b0|01010101010101010|-293lX xcX 10jd0 yL0 1cN0 1cL0 1fB0 19X0 17c10 LA0 H1A0 Oo0 1zc0 Oo0 1zc0 Oo0|20e5","Australia/Broken_Hill|ACST ACDT|-9u -au|0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101|-293lt xcX 10jd0 yL0 1cN0 1cL0 1fB0 19X0 17c10 LA0 1C00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 14o0 1o00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 U00 1qM0 WM0 1tA0 WM0 1tA0 U00 1tA0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 WM0 1qM0 14o0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0|18e3","Australia/Currie|AEST AEDT|-a0 -b0|0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101|-29E80 19X0 10jd0 yL0 1cN0 1cL0 1fB0 19X0 17c10 LA0 1C00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 11A0 1qM0 WM0 1qM0 Oo0 1zc0 Oo0 1zc0 Oo0 1wo0 WM0 1tA0 WM0 1tA0 U00 1tA0 U00 1tA0 11A0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 11A0 1o00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1cM0 1a00 1io0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0|746","Australia/Darwin|ACST ACDT|-9u -au|010101010|-293lt xcX 10jd0 yL0 1cN0 1cL0 1fB0 19X0|12e4","Australia/Eucla|+0845 +0945|-8J -9J|0101010101010101010|-293kI xcX 10jd0 yL0 1cN0 1cL0 1gSp0 Oo0 l5A0 Oo0 iJA0 G00 zU00 IM0 1qM0 11A0 1o00 11A0|368","Australia/Hobart|AEST AEDT|-a0 -b0|010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101|-29E80 19X0 10jd0 yL0 1cN0 1cL0 1fB0 19X0 VfB0 1cM0 1o00 Rc0 1wo0 Rc0 1wo0 U00 1wo0 LA0 1C00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 11A0 1qM0 WM0 1qM0 Oo0 1zc0 Oo0 1zc0 Oo0 1wo0 WM0 1tA0 WM0 1tA0 U00 1tA0 U00 1tA0 11A0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 11A0 1o00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1cM0 1a00 1io0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0|21e4","Australia/Lord_Howe|AEST +1030 +1130 +11|-a0 -au -bu -b0|0121212121313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313|raC0 1zdu Rb0 1zd0 On0 1zd0 On0 1zd0 On0 1zd0 TXu 1qMu WLu 1tAu WLu 1tAu TXu 1tAu Onu 1zcu Onu 1zcu Onu 1zcu Rbu 1zcu Onu 1zcu Onu 1zcu 11zu 1o0u 11zu 1o0u 11zu 1o0u 11zu 1qMu WLu 11Au 1nXu 1qMu 11zu 1o0u 11zu 1o0u 11zu 1qMu WLu 1qMu 11zu 1o0u WLu 1qMu 14nu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu|347","Australia/Lindeman|AEST AEDT|-a0 -b0|010101010101010101010|-293lX xcX 10jd0 yL0 1cN0 1cL0 1fB0 19X0 17c10 LA0 H1A0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0|10","Australia/Melbourne|AEST AEDT|-a0 -b0|0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101|-293lX xcX 10jd0 yL0 1cN0 1cL0 1fB0 19X0 17c10 LA0 1C00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 U00 1qM0 WM0 1qM0 11A0 1tA0 U00 1tA0 U00 1tA0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 11A0 1o00 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 WM0 1qM0 14o0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0|39e5","Australia/Perth|AWST AWDT|-80 -90|0101010101010101010|-293jX xcX 10jd0 yL0 1cN0 1cL0 1gSp0 Oo0 l5A0 Oo0 iJA0 G00 zU00 IM0 1qM0 11A0 1o00 11A0|18e5","CET|CET CEST|-10 -20|01010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-2aFe0 11d0 1iO0 11A0 1o00 11A0 Qrc0 6i00 WM0 1fA0 1cM0 1cM0 1cM0 16M0 1gMM0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00","Pacific/Easter|EMT -07 -06 -05|7h.s 70 60 50|012121212121212121212121212123232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323|-1uSgG.w 1s4IG.w WL0 1zd0 On0 1ip0 11z0 1o10 11z0 1qN0 WL0 1ld0 14n0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 WL0 1qN0 11z0 1o10 2pA0 11z0 1o10 11z0 1qN0 WL0 1qN0 WL0 1qN0 1cL0 1cN0 11z0 1o10 11z0 1qN0 WL0 1fB0 19X0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1ip0 1fz0 1fB0 11z0 1qN0 WL0 1qN0 WL0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1o10 19X0 1fB0 1nX0 G10 1EL0 Op0 1zb0 Rd0 1wn0 Rd0 46n0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Dd0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Dd0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Dd0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0|30e2","CST6CDT|CST CDT CWT CPT|60 50 50 50|010102301010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-261s0 1nX0 11B0 1nX0 SgN0 8x30 iw0 QwN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0","EET|EET EEST|-20 -30|010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|hDB0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00","Europe/Dublin|DMT IST GMT BST IST|p.l -y.D 0 -10 -10|01232323232324242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242|-2ax9y.D Rc0 1fzy.D 14M0 1fc0 1g00 1co0 1dc0 1co0 1oo0 1400 1dc0 19A0 1io0 1io0 WM0 1o00 14o0 1o00 17c0 1io0 17c0 1fA0 1a00 1lc0 17c0 1io0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1cM0 1io0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1a00 1io0 1qM0 Dc0 g600 14o0 1wo0 17c0 1io0 11A0 1o00 17c0 1fA0 1a00 1fA0 1cM0 1fA0 1a00 17c0 1fA0 1a00 1io0 17c0 1lc0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1a00 1a00 1qM0 WM0 1qM0 11A0 1o00 WM0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1tA0 IM0 90o0 U00 1tA0 U00 1tA0 U00 1tA0 U00 1tA0 WM0 1qM0 WM0 1qM0 WM0 1tA0 U00 1tA0 U00 1tA0 11z0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 14o0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|12e5","EST|EST|50|0|","EST5EDT|EST EDT EWT EPT|50 40 40 40|010102301010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-261t0 1nX0 11B0 1nX0 SgN0 8x40 iv0 QwN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0","Etc/GMT-0|GMT|0|0|","Etc/GMT-1|+01|-10|0|","Pacific/Port_Moresby|+10|-a0|0||25e4","Pacific/Pohnpei|+11|-b0|0||34e3","Pacific/Tarawa|+12|-c0|0||29e3","Etc/GMT-13|+13|-d0|0|","Etc/GMT-14|+14|-e0|0|","Etc/GMT-2|+02|-20|0|","Etc/GMT-3|+03|-30|0|","Etc/GMT-4|+04|-40|0|","Etc/GMT-5|+05|-50|0|","Etc/GMT-6|+06|-60|0|","Indian/Christmas|+07|-70|0||21e2","Etc/GMT-8|+08|-80|0|","Pacific/Palau|+09|-90|0||21e3","Etc/GMT+1|-01|10|0|","Etc/GMT+10|-10|a0|0|","Etc/GMT+11|-11|b0|0|","Etc/GMT+12|-12|c0|0|","Etc/GMT+3|-03|30|0|","Etc/GMT+4|-04|40|0|","Etc/GMT+5|-05|50|0|","Etc/GMT+6|-06|60|0|","Etc/GMT+7|-07|70|0|","Etc/GMT+8|-08|80|0|","Etc/GMT+9|-09|90|0|","Etc/UCT|UCT|0|0|","Etc/UTC|UTC|0|0|","Europe/Amsterdam|AMT NST +0120 +0020 CEST CET|-j.w -1j.w -1k -k -20 -10|010101010101010101010101010101010101010101012323234545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545|-2aFcj.w 11b0 1iP0 11A0 1io0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1co0 1io0 1yo0 Pc0 1a00 1fA0 1Bc0 Mo0 1tc0 Uo0 1tA0 U00 1uo0 W00 1s00 VA0 1so0 Vc0 1sM0 UM0 1wo0 Rc0 1u00 Wo0 1rA0 W00 1s00 VA0 1sM0 UM0 1w00 fV0 BCX.w 1tA0 U00 1u00 Wo0 1sm0 601k WM0 1fA0 1cM0 1cM0 1cM0 16M0 1gMM0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|16e5","Europe/Andorra|WET CET CEST|0 -10 -20|012121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-UBA0 1xIN0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|79e3","Europe/Astrakhan|LMT +03 +04 +05|-3c.c -30 -40 -50|012323232323232323212121212121212121212121212121212121212121212|-1Pcrc.c eUMc.c 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 2pB0 1cM0 1fA0 1cM0 3Co0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 3rd0","Europe/Athens|AMT EET EEST CEST CET|-1y.Q -20 -30 -20 -10|012123434121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2a61x.Q CNbx.Q mn0 kU10 9b0 3Es0 Xa0 1fb0 1dd0 k3X0 Nz0 SCp0 1vc0 SO0 1cM0 1a00 1ao0 1fc0 1a10 1fG0 1cg0 1dX0 1bX0 1cQ0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|35e5","Europe/London|GMT BST BDST|0 -10 -20|0101010101010101010101010101010101010101010101010121212121210101210101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-2axa0 Rc0 1fA0 14M0 1fc0 1g00 1co0 1dc0 1co0 1oo0 1400 1dc0 19A0 1io0 1io0 WM0 1o00 14o0 1o00 17c0 1io0 17c0 1fA0 1a00 1lc0 17c0 1io0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1cM0 1io0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1a00 1io0 1qM0 Dc0 2Rz0 Dc0 1zc0 Oo0 1zc0 Rc0 1wo0 17c0 1iM0 FA0 xB0 1fA0 1a00 14o0 bb0 LA0 xB0 Rc0 1wo0 11A0 1o00 17c0 1fA0 1a00 1fA0 1cM0 1fA0 1a00 17c0 1fA0 1a00 1io0 17c0 1lc0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1a00 1a00 1qM0 WM0 1qM0 11A0 1o00 WM0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1tA0 IM0 90o0 U00 1tA0 U00 1tA0 U00 1tA0 U00 1tA0 WM0 1qM0 WM0 1qM0 WM0 1tA0 U00 1tA0 U00 1tA0 11z0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 14o0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|10e6","Europe/Belgrade|CET CEST|-10 -20|01010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-19RC0 3IP0 WM0 1fA0 1cM0 1cM0 1rc0 Qo0 1vmo0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|12e5","Europe/Berlin|CET CEST CEMT|-10 -20 -30|01010101010101210101210101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-2aFe0 11d0 1iO0 11A0 1o00 11A0 Qrc0 6i00 WM0 1fA0 1cM0 1cM0 1cM0 kL0 Nc0 m10 WM0 1ao0 1cp0 dX0 jz0 Dd0 1io0 17c0 1fA0 1a00 1ehA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|41e5","Europe/Prague|CET CEST GMT|-10 -20 0|01010101010101010201010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-2aFe0 11d0 1iO0 11A0 1o00 11A0 Qrc0 6i00 WM0 1fA0 1cM0 1cM0 1cM0 1cM0 1qM0 11c0 mp0 xA0 mn0 17c0 1io0 17c0 1fc0 1ao0 1bNc0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|13e5","Europe/Brussels|WET CET CEST WEST|0 -10 -20 -10|0121212103030303030303030303030303030303030303030303212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2ehc0 3zX0 11c0 1iO0 11A0 1o00 11A0 my0 Ic0 1qM0 Rc0 1EM0 UM0 1u00 10o0 1io0 1io0 17c0 1a00 1fA0 1cM0 1cM0 1io0 17c0 1fA0 1a00 1io0 1a30 1io0 17c0 1fA0 1a00 1io0 17c0 1cM0 1cM0 1a00 1io0 1cM0 1cM0 1a00 1fA0 1io0 17c0 1cM0 1cM0 1a00 1fA0 1io0 1qM0 Dc0 y00 5Wn0 WM0 1fA0 1cM0 16M0 1iM0 16M0 1C00 Uo0 1eeo0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|21e5","Europe/Bucharest|BMT EET EEST|-1I.o -20 -30|0121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-1xApI.o 20LI.o RA0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1Axc0 On0 1fA0 1a10 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cK0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cL0 1cN0 1cL0 1fB0 1nX0 11E0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|19e5","Europe/Budapest|CET CEST|-10 -20|0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-2aFe0 11d0 1iO0 11A0 1ip0 17b0 1op0 1tb0 Q2m0 3Ne0 WM0 1fA0 1cM0 1cM0 1oJ0 1dc0 1030 1fA0 1cM0 1cM0 1cM0 1cM0 1fA0 1a00 1iM0 1fA0 8Ha0 Rb0 1wN0 Rb0 1BB0 Lz0 1C20 LB0 SNX0 1a10 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|17e5","Europe/Zurich|CET CEST|-10 -20|01010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-19Lc0 11A0 1o00 11A0 1xG10 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|38e4","Europe/Chisinau|CMT BMT EET EEST CEST CET MSK MSD|-1T -1I.o -20 -30 -20 -10 -30 -40|012323232323232323234545467676767676767676767323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-26jdT wGMa.A 20LI.o RA0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 27A0 2en0 39g0 WM0 1fA0 1cM0 V90 1t7z0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 gL0 WO0 1cM0 1cM0 1cK0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1nX0 11D0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|67e4","Europe/Copenhagen|CET CEST|-10 -20|0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-2azC0 Tz0 VuO0 60q0 WM0 1fA0 1cM0 1cM0 1cM0 S00 1HA0 Nc0 1C00 Dc0 1Nc0 Ao0 1h5A0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|12e5","Europe/Gibraltar|GMT BST BDST CET CEST|0 -10 -20 -10 -20|010101010101010101010101010101010101010101010101012121212121010121010101010101010101034343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343|-2axa0 Rc0 1fA0 14M0 1fc0 1g00 1co0 1dc0 1co0 1oo0 1400 1dc0 19A0 1io0 1io0 WM0 1o00 14o0 1o00 17c0 1io0 17c0 1fA0 1a00 1lc0 17c0 1io0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1cM0 1io0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1a00 1io0 1qM0 Dc0 2Rz0 Dc0 1zc0 Oo0 1zc0 Rc0 1wo0 17c0 1iM0 FA0 xB0 1fA0 1a00 14o0 bb0 LA0 xB0 Rc0 1wo0 11A0 1o00 17c0 1fA0 1a00 1fA0 1cM0 1fA0 1a00 17c0 1fA0 1a00 1io0 17c0 1lc0 17c0 1fA0 10Jz0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|30e3","Europe/Helsinki|HMT EET EEST|-1D.N -20 -30|0121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-1WuND.N OULD.N 1dA0 1xGq0 1cM0 1cM0 1cM0 1cN0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|12e5","Europe/Kaliningrad|CET CEST CET CEST MSK MSD EEST EET +03|-10 -20 -20 -30 -30 -40 -30 -20 -30|0101010101010232454545454545454546767676767676767676767676767676767676767676787|-2aFe0 11d0 1iO0 11A0 1o00 11A0 Qrc0 6i00 WM0 1fA0 1cM0 1cM0 Am0 Lb0 1en0 op0 1pNz0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cN0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|44e4","Europe/Kiev|KMT EET MSK CEST CET MSD EEST|-22.4 -20 -30 -20 -10 -40 -30|0123434252525252525252525256161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161|-1Pc22.4 eUo2.4 rnz0 2Hg0 WM0 1fA0 da0 1v4m0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 Db0 3220 1cK0 1cL0 1cN0 1cL0 1cN0 1cL0 1cQ0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|34e5","Europe/Kirov|LMT +03 +04 +05|-3i.M -30 -40 -50|01232323232323232321212121212121212121212121212121212121212121|-22WM0 qH90 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 2pB0 1cM0 1fA0 1cM0 3Co0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|48e4","Europe/Lisbon|LMT WET WEST WEMT CET CEST|A.J 0 -10 -20 -10 -20|012121212121212121212121212121212121212121212321232123212321212121212121212121212121212121212121214121212121212121212121212121212124545454212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2le00 aPX0 Sp0 LX0 1vc0 Tc0 1uM0 SM0 1vc0 Tc0 1vc0 SM0 1vc0 6600 1co0 3E00 17c0 1fA0 1a00 1io0 1a00 1io0 17c0 3I00 17c0 1cM0 1cM0 3Fc0 1cM0 1a00 1fA0 1io0 17c0 1cM0 1cM0 1a00 1fA0 1io0 1qM0 Dc0 1tA0 1cM0 1dc0 1400 gL0 IM0 s10 U00 dX0 Rc0 pd0 Rc0 gL0 Oo0 pd0 Rc0 gL0 Oo0 pd0 14o0 1cM0 1cP0 1cM0 1cM0 1cM0 1cM0 1cM0 3Co0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 pvy0 1cM0 1cM0 1fA0 1cM0 1cM0 1cN0 1cL0 1cN0 1cM0 1cM0 1cM0 1cM0 1cN0 1cL0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|27e5","Europe/Luxembourg|LMT CET CEST WET WEST WEST WET|-o.A -10 -20 0 -10 -20 -10|0121212134343434343434343434343434343434343434343434565651212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2DG0o.A t6mo.A TB0 1nX0 Up0 1o20 11A0 rW0 CM0 1qP0 R90 1EO0 UK0 1u20 10m0 1ip0 1in0 17e0 19W0 1fB0 1db0 1cp0 1in0 17d0 1fz0 1a10 1in0 1a10 1in0 17f0 1fA0 1a00 1io0 17c0 1cM0 1cM0 1a00 1io0 1cM0 1cM0 1a00 1fA0 1io0 17c0 1cM0 1cM0 1a00 1fA0 1io0 1qM0 Dc0 vA0 60L0 WM0 1fA0 1cM0 17c0 1io0 16M0 1C00 Uo0 1eeo0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|54e4","Europe/Madrid|WET WEST WEMT CET CEST|0 -10 -20 -10 -20|010101010101010101210343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343|-25Td0 19B0 1cL0 1dd0 b1z0 18p0 3HX0 17d0 1fz0 1a10 1io0 1a00 1in0 17d0 iIn0 Hd0 1cL0 bb0 1200 2s20 14n0 5aL0 Mp0 1vz0 17d0 1in0 17d0 1in0 17d0 1in0 17d0 6hX0 11B0 XHX0 1a10 1fz0 1a10 19X0 1cN0 1fz0 1a10 1fC0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|62e5","Europe/Malta|CET CEST|-10 -20|0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-2arB0 Lz0 1cN0 1db0 1410 1on0 Wp0 1qL0 17d0 1cL0 M3B0 5M20 WM0 1fA0 1co0 17c0 1iM0 16m0 1de0 1lc0 14m0 1lc0 WO0 1qM0 GTW0 On0 1C10 LA0 1C00 LA0 1EM0 LA0 1C00 LA0 1zc0 Oo0 1C00 Oo0 1co0 1cM0 1lA0 Xc0 1qq0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1iN0 19z0 1fB0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|42e4","Europe/Minsk|MMT EET MSK CEST CET MSD EEST +03|-1O -20 -30 -20 -10 -40 -30 -30|01234343252525252525252525261616161616161616161616161616161616161617|-1Pc1O eUnO qNX0 3gQ0 WM0 1fA0 1cM0 Al0 1tsn0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 3Fc0 1cN0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0|19e5","Europe/Monaco|PMT WET WEST WEMT CET CEST|-9.l 0 -10 -20 -10 -20|01212121212121212121212121212121212121212121212121232323232345454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454|-2nco9.l cNb9.l HA0 19A0 1iM0 11c0 1oo0 Wo0 1rc0 QM0 1EM0 UM0 1u00 10o0 1io0 1wo0 Rc0 1a00 1fA0 1cM0 1cM0 1io0 17c0 1fA0 1a00 1io0 1a00 1io0 17c0 1fA0 1a00 1io0 17c0 1cM0 1cM0 1a00 1io0 1cM0 1cM0 1a00 1fA0 1io0 17c0 1cM0 1cM0 1a00 1fA0 1io0 1qM0 Df0 2RV0 11z0 11B0 1ze0 WM0 1fA0 1cM0 1fa0 1aq0 16M0 1ekn0 1cL0 1fC0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|38e3","Europe/Moscow|MMT MMT MST MDST MSD MSK +05 EET EEST MSK|-2u.h -2v.j -3v.j -4v.j -40 -30 -50 -20 -30 -40|012132345464575454545454545454545458754545454545454545454545454545454545454595|-2ag2u.h 2pyW.W 1bA0 11X0 GN0 1Hb0 c4v.j ik0 3DA0 dz0 15A0 c10 2q10 iM10 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cN0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|16e6","Europe/Paris|PMT WET WEST CEST CET WEMT|-9.l 0 -10 -20 -10 -20|0121212121212121212121212121212121212121212121212123434352543434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434|-2nco8.l cNb8.l HA0 19A0 1iM0 11c0 1oo0 Wo0 1rc0 QM0 1EM0 UM0 1u00 10o0 1io0 1wo0 Rc0 1a00 1fA0 1cM0 1cM0 1io0 17c0 1fA0 1a00 1io0 1a00 1io0 17c0 1fA0 1a00 1io0 17c0 1cM0 1cM0 1a00 1io0 1cM0 1cM0 1a00 1fA0 1io0 17c0 1cM0 1cM0 1a00 1fA0 1io0 1qM0 Df0 Ik0 5M30 WM0 1fA0 1cM0 Vx0 hB0 1aq0 16M0 1ekn0 1cL0 1fC0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|11e6","Europe/Riga|RMT LST EET MSK CEST CET MSD EEST|-1A.y -2A.y -20 -30 -20 -10 -40 -30|010102345454536363636363636363727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272|-25TzA.y 11A0 1iM0 ko0 gWm0 yDXA.y 2bX0 3fE0 WM0 1fA0 1cM0 1cM0 4m0 1sLy0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cN0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cN0 1o00 11A0 1o00 11A0 1qM0 3oo0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|64e4","Europe/Rome|CET CEST|-10 -20|0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-2arB0 Lz0 1cN0 1db0 1410 1on0 Wp0 1qL0 17d0 1cL0 M3B0 5M20 WM0 1fA0 1cM0 16M0 1iM0 16m0 1de0 1lc0 14m0 1lc0 WO0 1qM0 GTW0 On0 1C10 LA0 1C00 LA0 1EM0 LA0 1C00 LA0 1zc0 Oo0 1C00 Oo0 1C00 LA0 1zc0 Oo0 1C00 LA0 1C00 LA0 1zc0 Oo0 1C00 Oo0 1zc0 Oo0 1fC0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|39e5","Europe/Samara|LMT +03 +04 +05|-3k.k -30 -40 -50|0123232323232323232121232323232323232323232323232323232323212|-22WM0 qH90 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 2pB0 1cM0 1fA0 2y10 14m0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 2sp0 WM0|12e5","Europe/Saratov|LMT +03 +04 +05|-34.i -30 -40 -50|012323232323232321212121212121212121212121212121212121212121212|-22WM0 qH90 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 2pB0 1cM0 1cM0 1cM0 1fA0 1cM0 3Co0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 5810","Europe/Simferopol|SMT EET MSK CEST CET MSD EEST MSK|-2g -20 -30 -20 -10 -40 -30 -40|012343432525252525252525252161616525252616161616161616161616161616161616172|-1Pc2g eUog rEn0 2qs0 WM0 1fA0 1cM0 3V0 1u0L0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1Q00 4eL0 1cL0 1cN0 1cL0 1cN0 dX0 WL0 1cN0 1cL0 1fB0 1o30 11B0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11z0 1nW0|33e4","Europe/Sofia|EET CET CEST EEST|-20 -10 -20 -30|01212103030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030|-168L0 WM0 1fA0 1cM0 1cM0 1cN0 1mKH0 1dd0 1fb0 1ap0 1fb0 1a20 1fy0 1a30 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cK0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1nX0 11E0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|12e5","Europe/Stockholm|CET CEST|-10 -20|01010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-2azC0 TB0 2yDe0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|15e5","Europe/Tallinn|TMT CET CEST EET MSK MSD EEST|-1D -10 -20 -20 -30 -40 -30|012103421212454545454545454546363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363|-26oND teD 11A0 1Ta0 4rXl KSLD 2FX0 2Jg0 WM0 1fA0 1cM0 18J0 1sTX0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cN0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o10 11A0 1qM0 5QM0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|41e4","Europe/Tirane|LMT CET CEST|-1j.k -10 -20|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2glBj.k 14pcj.k 5LC0 WM0 4M0 1fCK0 10n0 1op0 11z0 1pd0 11z0 1qN0 WL0 1qp0 Xb0 1qp0 Xb0 1qp0 11z0 1lB0 11z0 1qN0 11z0 1iN0 16n0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|42e4","Europe/Ulyanovsk|LMT +03 +04 +05 +02|-3d.A -30 -40 -50 -20|01232323232323232321214121212121212121212121212121212121212121212|-22WM0 qH90 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 2pB0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 3rd0","Europe/Uzhgorod|CET CEST MSK MSD EET EEST|-10 -20 -30 -40 -20 -30|010101023232323232323232320454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454|-1cqL0 6i00 WM0 1fA0 1cM0 1ml0 1Cp0 1r3W0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1Q00 1Nf0 2pw0 1cL0 1cN0 1cL0 1cN0 1cL0 1cQ0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|11e4","Europe/Vienna|CET CEST|-10 -20|0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-2aFe0 11d0 1iO0 11A0 1o00 11A0 3KM0 14o0 LA00 6i00 WM0 1fA0 1cM0 1cM0 1cM0 400 2qM0 1a00 1cM0 1cM0 1io0 17c0 1gHa0 19X0 1cP0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|18e5","Europe/Vilnius|WMT KMT CET EET MSK CEST MSD EEST|-1o -1z.A -10 -20 -30 -20 -40 -30|012324525254646464646464646473737373737373737352537373737373737373737373737373737373737373737373737373737373737373737373|-293do 6ILM.o 1Ooz.A zz0 Mfd0 29W0 3is0 WM0 1fA0 1cM0 LV0 1tgL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cN0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11B0 1o00 11A0 1qM0 8io0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|54e4","Europe/Volgograd|LMT +03 +04 +05|-2V.E -30 -40 -50|01232323232323232121212121212121212121212121212121212121212121|-21IqV.E psLV.E 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 2pB0 1cM0 1cM0 1cM0 1fA0 1cM0 3Co0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|10e5","Europe/Warsaw|WMT CET CEST EET EEST|-1o -10 -20 -20 -30|012121234312121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2ctdo 1LXo 11d0 1iO0 11A0 1o00 11A0 1on0 11A0 6zy0 HWP0 5IM0 WM0 1fA0 1cM0 1dz0 1mL0 1en0 15B0 1aq0 1nA0 11A0 1io0 17c0 1fA0 1a00 iDX0 LA0 1cM0 1cM0 1C00 Oo0 1cM0 1cM0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1C00 LA0 uso0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cN0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|17e5","Europe/Zaporozhye|+0220 EET MSK CEST CET MSD EEST|-2k -20 -30 -20 -10 -40 -30|01234342525252525252525252526161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161|-1Pc2k eUok rdb0 2RE0 WM0 1fA0 8m0 1v9a0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cK0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cQ0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|77e4","HST|HST|a0|0|","Indian/Chagos|LMT +05 +06|-4N.E -50 -60|012|-2xosN.E 3AGLN.E|30e2","Indian/Cocos|+0630|-6u|0||596","Indian/Kerguelen|-00 +05|0 -50|01|-MG00|130","Indian/Mahe|LMT +04|-3F.M -40|01|-2yO3F.M|79e3","Indian/Maldives|MMT +05|-4S -50|01|-olgS|35e4","Indian/Mauritius|LMT +04 +05|-3O -40 -50|012121|-2xorO 34unO 14L0 12kr0 11z0|15e4","Indian/Reunion|LMT +04|-3F.Q -40|01|-2mDDF.Q|84e4","Pacific/Kwajalein|+11 -12 +12|-b0 c0 -c0|012|-AX0 W9X0|14e3","MET|MET MEST|-10 -20|01010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-2aFe0 11d0 1iO0 11A0 1o00 11A0 Qrc0 6i00 WM0 1fA0 1cM0 1cM0 1cM0 16M0 1gMM0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00","MST|MST|70|0|","MST7MDT|MST MDT MWT MPT|70 60 60 60|010102301010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-261r0 1nX0 11B0 1nX0 SgN0 8x20 ix0 QwN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0","Pacific/Chatham|+1215 +1245 +1345|-cf -cJ -dJ|012121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212|-WqAf 1adef IM0 1C00 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1qM0 14o0 1lc0 14o0 1lc0 14o0 1lc0 17c0 1io0 17c0 1io0 17c0 1io0 17c0 1lc0 14o0 1lc0 14o0 1lc0 17c0 1io0 17c0 1io0 17c0 1lc0 14o0 1lc0 14o0 1lc0 17c0 1io0 17c0 1io0 17c0 1io0 17c0 1io0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00|600","Pacific/Apia|LMT -1130 -11 -10 +14 +13|bq.U bu b0 a0 -e0 -d0|01232345454545454545454545454545454545454545454545454545454|-2nDMx.4 1yW03.4 2rRbu 1ff0 1a00 CI0 AQ0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00|37e3","Pacific/Bougainville|+10 +09 +11|-a0 -90 -b0|0102|-16Wy0 7CN0 2MQp0|18e4","Pacific/Efate|LMT +11 +12|-bd.g -b0 -c0|0121212121212121212121|-2l9nd.g 2Szcd.g 1cL0 1oN0 10L0 1fB0 19X0 1fB0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 Lz0 1Nd0 An0|66e3","Pacific/Enderbury|-12 -11 +13|c0 b0 -d0|012|nIc0 B7X0|1","Pacific/Fakaofo|-11 +13|b0 -d0|01|1Gfn0|483","Pacific/Fiji|LMT +12 +13|-bT.I -c0 -d0|0121212121212121212121212121212121212121212121212121212121212121|-2bUzT.I 3m8NT.I LA0 1EM0 IM0 nJc0 LA0 1o00 Rc0 1wo0 Ao0 1Nc0 Ao0 1Q00 xz0 1SN0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 uM0 1SM0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 s00 1VA0 uM0 1SM0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 uM0 1SM0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 s00 1VA0 uM0 1SM0 uM0 1SM0 uM0|88e4","Pacific/Galapagos|LMT -05 -06|5W.o 50 60|01212|-1yVS1.A 2dTz1.A gNd0 rz0|25e3","Pacific/Gambier|LMT -09|8X.M 90|01|-2jof0.c|125","Pacific/Guadalcanal|LMT +11|-aD.M -b0|01|-2joyD.M|11e4","Pacific/Guam|GST ChST|-a0 -a0|01|1fpq0|17e4","Pacific/Honolulu|HST HDT HST|au 9u a0|010102|-1thLu 8x0 lef0 8Pz0 46p0|37e4","Pacific/Kiritimati|-1040 -10 +14|aE a0 -e0|012|nIaE B7Xk|51e2","Pacific/Kosrae|+11 +12|-b0 -c0|010|-AX0 1bdz0|66e2","Pacific/Majuro|+11 +12|-b0 -c0|01|-AX0|28e3","Pacific/Marquesas|LMT -0930|9i 9u|01|-2joeG|86e2","Pacific/Pago_Pago|LMT SST|bm.M b0|01|-2nDMB.c|37e2","Pacific/Nauru|LMT +1130 +09 +12|-b7.E -bu -90 -c0|01213|-1Xdn7.E PvzB.E 5RCu 1ouJu|10e3","Pacific/Niue|-1120 -1130 -11|bk bu b0|012|-KfME 17y0a|12e2","Pacific/Norfolk|+1112 +1130 +1230 +11|-bc -bu -cu -b0|01213|-Kgbc W01G On0 1COp0|25e4","Pacific/Noumea|LMT +11 +12|-b5.M -b0 -c0|01212121|-2l9n5.M 2EqM5.M xX0 1PB0 yn0 HeP0 Ao0|98e3","Pacific/Pitcairn|-0830 -08|8u 80|01|18Vku|56","Pacific/Rarotonga|-1030 -0930 -10|au 9u a0|012121212121212121212121212|lyWu IL0 1zcu Onu 1zcu Onu 1zcu Rbu 1zcu Onu 1zcu Onu 1zcu Onu 1zcu Onu 1zcu Onu 1zcu Rbu 1zcu Onu 1zcu Onu 1zcu Onu|13e3","Pacific/Tahiti|LMT -10|9W.g a0|01|-2joe1.I|18e4","Pacific/Tongatapu|+1220 +13 +14|-ck -d0 -e0|0121212121|-1aB0k 2n5dk 15A0 1wo0 xz0 1Q10 xz0 zWN0 s00|75e3","PST8PDT|PST PDT PWT PPT|80 70 70 70|010102301010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-261q0 1nX0 11B0 1nX0 SgN0 8x10 iy0 QwN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0","WET|WET WEST|0 -10|010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|hDB0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00"],links:["Africa/Abidjan|Africa/Bamako","Africa/Abidjan|Africa/Banjul","Africa/Abidjan|Africa/Conakry","Africa/Abidjan|Africa/Dakar","Africa/Abidjan|Africa/Freetown","Africa/Abidjan|Africa/Lome","Africa/Abidjan|Africa/Nouakchott","Africa/Abidjan|Africa/Ouagadougou","Africa/Abidjan|Africa/Timbuktu","Africa/Abidjan|Atlantic/St_Helena","Africa/Cairo|Egypt","Africa/Johannesburg|Africa/Maseru","Africa/Johannesburg|Africa/Mbabane","Africa/Lagos|Africa/Bangui","Africa/Lagos|Africa/Brazzaville","Africa/Lagos|Africa/Douala","Africa/Lagos|Africa/Kinshasa","Africa/Lagos|Africa/Libreville","Africa/Lagos|Africa/Luanda","Africa/Lagos|Africa/Malabo","Africa/Lagos|Africa/Niamey","Africa/Lagos|Africa/Porto-Novo","Africa/Maputo|Africa/Blantyre","Africa/Maputo|Africa/Bujumbura","Africa/Maputo|Africa/Gaborone","Africa/Maputo|Africa/Harare","Africa/Maputo|Africa/Kigali","Africa/Maputo|Africa/Lubumbashi","Africa/Maputo|Africa/Lusaka","Africa/Nairobi|Africa/Addis_Ababa","Africa/Nairobi|Africa/Asmara","Africa/Nairobi|Africa/Asmera","Africa/Nairobi|Africa/Dar_es_Salaam","Africa/Nairobi|Africa/Djibouti","Africa/Nairobi|Africa/Kampala","Africa/Nairobi|Africa/Mogadishu","Africa/Nairobi|Indian/Antananarivo","Africa/Nairobi|Indian/Comoro","Africa/Nairobi|Indian/Mayotte","Africa/Tripoli|Libya","America/Adak|America/Atka","America/Adak|US/Aleutian","America/Anchorage|US/Alaska","America/Argentina/Buenos_Aires|America/Buenos_Aires","America/Argentina/Catamarca|America/Argentina/ComodRivadavia","America/Argentina/Catamarca|America/Catamarca","America/Argentina/Cordoba|America/Cordoba","America/Argentina/Cordoba|America/Rosario","America/Argentina/Jujuy|America/Jujuy","America/Argentina/Mendoza|America/Mendoza","America/Atikokan|America/Coral_Harbour","America/Chicago|US/Central","America/Curacao|America/Aruba","America/Curacao|America/Kralendijk","America/Curacao|America/Lower_Princes","America/Denver|America/Shiprock","America/Denver|Navajo","America/Denver|US/Mountain","America/Detroit|US/Michigan","America/Edmonton|Canada/Mountain","America/Fort_Wayne|America/Indiana/Indianapolis","America/Fort_Wayne|America/Indianapolis","America/Fort_Wayne|US/East-Indiana","America/Halifax|Canada/Atlantic","America/Havana|Cuba","America/Indiana/Knox|America/Knox_IN","America/Indiana/Knox|US/Indiana-Starke","America/Jamaica|Jamaica","America/Kentucky/Louisville|America/Louisville","America/Los_Angeles|US/Pacific","America/Los_Angeles|US/Pacific-New","America/Manaus|Brazil/West","America/Mazatlan|Mexico/BajaSur","America/Mexico_City|Mexico/General","America/New_York|US/Eastern","America/Noronha|Brazil/DeNoronha","America/Panama|America/Cayman","America/Phoenix|US/Arizona","America/Port_of_Spain|America/Anguilla","America/Port_of_Spain|America/Antigua","America/Port_of_Spain|America/Dominica","America/Port_of_Spain|America/Grenada","America/Port_of_Spain|America/Guadeloupe","America/Port_of_Spain|America/Marigot","America/Port_of_Spain|America/Montserrat","America/Port_of_Spain|America/St_Barthelemy","America/Port_of_Spain|America/St_Kitts","America/Port_of_Spain|America/St_Lucia","America/Port_of_Spain|America/St_Thomas","America/Port_of_Spain|America/St_Vincent","America/Port_of_Spain|America/Tortola","America/Port_of_Spain|America/Virgin","America/Regina|Canada/Saskatchewan","America/Rio_Branco|America/Porto_Acre","America/Rio_Branco|Brazil/Acre","America/Santiago|Chile/Continental","America/Sao_Paulo|Brazil/East","America/St_Johns|Canada/Newfoundland","America/Tijuana|America/Ensenada","America/Tijuana|America/Santa_Isabel","America/Tijuana|Mexico/BajaNorte","America/Toronto|America/Montreal","America/Toronto|Canada/Eastern","America/Vancouver|Canada/Pacific","America/Whitehorse|Canada/Yukon","America/Winnipeg|Canada/Central","Asia/Ashgabat|Asia/Ashkhabad","Asia/Bangkok|Asia/Phnom_Penh","Asia/Bangkok|Asia/Vientiane","Asia/Dhaka|Asia/Dacca","Asia/Dubai|Asia/Muscat","Asia/Ho_Chi_Minh|Asia/Saigon","Asia/Hong_Kong|Hongkong","Asia/Jerusalem|Asia/Tel_Aviv","Asia/Jerusalem|Israel","Asia/Kathmandu|Asia/Katmandu","Asia/Kolkata|Asia/Calcutta","Asia/Kuala_Lumpur|Asia/Singapore","Asia/Kuala_Lumpur|Singapore","Asia/Macau|Asia/Macao","Asia/Makassar|Asia/Ujung_Pandang","Asia/Nicosia|Europe/Nicosia","Asia/Qatar|Asia/Bahrain","Asia/Rangoon|Asia/Yangon","Asia/Riyadh|Asia/Aden","Asia/Riyadh|Asia/Kuwait","Asia/Seoul|ROK","Asia/Shanghai|Asia/Chongqing","Asia/Shanghai|Asia/Chungking","Asia/Shanghai|Asia/Harbin","Asia/Shanghai|PRC","Asia/Taipei|ROC","Asia/Tehran|Iran","Asia/Thimphu|Asia/Thimbu","Asia/Tokyo|Japan","Asia/Ulaanbaatar|Asia/Ulan_Bator","Asia/Urumqi|Asia/Kashgar","Atlantic/Faroe|Atlantic/Faeroe","Atlantic/Reykjavik|Iceland","Atlantic/South_Georgia|Etc/GMT+2","Australia/Adelaide|Australia/South","Australia/Brisbane|Australia/Queensland","Australia/Broken_Hill|Australia/Yancowinna","Australia/Darwin|Australia/North","Australia/Hobart|Australia/Tasmania","Australia/Lord_Howe|Australia/LHI","Australia/Melbourne|Australia/Victoria","Australia/Perth|Australia/West","Australia/Sydney|Australia/ACT","Australia/Sydney|Australia/Canberra","Australia/Sydney|Australia/NSW","Etc/GMT-0|Etc/GMT","Etc/GMT-0|Etc/GMT+0","Etc/GMT-0|Etc/GMT0","Etc/GMT-0|Etc/Greenwich","Etc/GMT-0|GMT","Etc/GMT-0|GMT+0","Etc/GMT-0|GMT-0","Etc/GMT-0|GMT0","Etc/GMT-0|Greenwich","Etc/UCT|UCT","Etc/UTC|Etc/Universal","Etc/UTC|Etc/Zulu","Etc/UTC|UTC","Etc/UTC|Universal","Etc/UTC|Zulu","Europe/Belgrade|Europe/Ljubljana","Europe/Belgrade|Europe/Podgorica","Europe/Belgrade|Europe/Sarajevo","Europe/Belgrade|Europe/Skopje","Europe/Belgrade|Europe/Zagreb","Europe/Chisinau|Europe/Tiraspol","Europe/Dublin|Eire","Europe/Helsinki|Europe/Mariehamn","Europe/Istanbul|Asia/Istanbul","Europe/Istanbul|Turkey","Europe/Lisbon|Portugal","Europe/London|Europe/Belfast","Europe/London|Europe/Guernsey","Europe/London|Europe/Isle_of_Man","Europe/London|Europe/Jersey","Europe/London|GB","Europe/London|GB-Eire","Europe/Moscow|W-SU","Europe/Oslo|Arctic/Longyearbyen","Europe/Oslo|Atlantic/Jan_Mayen","Europe/Prague|Europe/Bratislava","Europe/Rome|Europe/San_Marino","Europe/Rome|Europe/Vatican","Europe/Warsaw|Poland","Europe/Zurich|Europe/Busingen","Europe/Zurich|Europe/Vaduz","Indian/Christmas|Etc/GMT-7","Pacific/Auckland|Antarctica/McMurdo","Pacific/Auckland|Antarctica/South_Pole","Pacific/Auckland|NZ","Pacific/Chatham|NZ-CHAT","Pacific/Easter|Chile/EasterIsland","Pacific/Guam|Pacific/Saipan","Pacific/Honolulu|Pacific/Johnston","Pacific/Honolulu|US/Hawaii","Pacific/Kwajalein|Kwajalein","Pacific/Pago_Pago|Pacific/Midway","Pacific/Pago_Pago|Pacific/Samoa","Pacific/Pago_Pago|US/Samoa","Pacific/Palau|Etc/GMT-9","Pacific/Pohnpei|Etc/GMT-11","Pacific/Pohnpei|Pacific/Ponape","Pacific/Port_Moresby|Etc/GMT-10","Pacific/Port_Moresby|Pacific/Chuuk","Pacific/Port_Moresby|Pacific/Truk","Pacific/Port_Moresby|Pacific/Yap","Pacific/Tarawa|Etc/GMT-12","Pacific/Tarawa|Pacific/Funafuti","Pacific/Tarawa|Pacific/Wake","Pacific/Tarawa|Pacific/Wallis"]}),moment}),function(){!function(){for(var lastTime=0,vendors=["ms","moz","webkit","o"],x=0;x<vendors.length&&!window.requestAnimationFrame;++x)window.requestAnimationFrame=window[vendors[x]+"RequestAnimationFrame"],window.cancelAnimationFrame=window[vendors[x]+"CancelAnimationFrame"]||window[vendors[x]+"CancelRequestAnimationFrame"];window.requestAnimationFrame||(window.requestAnimationFrame=function(callback,element){var currTime=(new Date).getTime(),timeToCall=Math.max(0,16-(currTime-lastTime)),id=window.setTimeout(function(){callback(currTime+timeToCall)},timeToCall);return lastTime=currTime+timeToCall,id}),window.cancelAnimationFrame||(window.cancelAnimationFrame=function(id){clearTimeout(id)})}(),window.Typewriter=function(element,options){return this._settings={cursorAnimationPaused:!1,opacityIncreasing:!1,currentOpacity:1,delayedQue:[],delayItemsCount:0,eventQue:[],calledEvents:[],eventRunning:!1,timeout:!1,delayExecution:!1,fps:.06,typingFrameCount:0,stringToTypeHTMLArray:[],currentTypedCharacters:[],typing:!1,usedIDs:[],charAmountToDelete:!1,userOptions:{},eventLoopRerun:0},element?"object"!=typeof options?console.error("Typewriter only accepts the options as an object."):(this._settings.userOptions=options,this.default_options={strings:!1,cursorClassName:"typewriter-cursor",cursor:"|",animateCursor:!0,blinkSpeed:50,typingSpeed:"natural",deleteSpeed:"natural",charSpanClassName:"typewriter-char",wrapperClassName:"typewriter-wrapper",loop:!1,autoStart:!1,devMode:!1},this.options=this._setupOptions(options),this.el=element,this._setupTypwriterWrapper(),this._startCursorAnimation(),void(!0===this.options.autoStart&&this.options.strings&&this.typeOutAllStrings())):console.error("Please choose an DOM element so that type writer can display itself.")};var TypewriterPrototype=window.Typewriter.prototype;TypewriterPrototype.stop=function(){return this._addToEventQue(this._stopEventLoop),this},TypewriterPrototype.start=function(){return this._startEventLoop(),this},TypewriterPrototype.rerun=function(){return this._addToEventQue(this._rerunCalledEvents),this},TypewriterPrototype.typeString=function(string){if(!string||"string"!=typeof string)return console.error("Please enter a string as the paramater.");var string_chars=this._getCharacters(string);return this._addToEventQue([this._typeCharacters,[string_chars]]),this},TypewriterPrototype.deleteAll=function(){return this._addToEventQue([this._deleteChars,["all"]]),this},TypewriterPrototype.deleteChars=function(amount){return this._addToEventQue([this._deleteChars,[amount]]),this},TypewriterPrototype.pauseFor=function(ms){return this._addToEventQue([this._pauseFor,[ms]]),this},TypewriterPrototype.typeOutAllStrings=function(){var characters_array=this._getStringsAsCharsArray();if(1===characters_array.length)this._typeCharacters(characters_array[0]);else for(var i=0,length=characters_array.length;i<length;i++)this._addToEventQue([this._typeCharacters,[characters_array[i]]]),this.pauseFor(this._randomInteger(1500,2500)),this.deleteAll(),this.pauseFor(this._randomInteger(1500,2500));return this},TypewriterPrototype.changeSettings=function(new_settings){return new_settings||"object"==typeof new_settings?(this._addToEventQue([this._changeSettings,[JSON.stringify(new_settings)]]),this):console.error("Typewriter will only accept an object as the settings.")},TypewriterPrototype.changeBlinkSpeed=function(new_speed){return new_speed||"number"==typeof new_speed?(this.changeSettings({blinkSpeed:new_speed}),this):console.error("Please enter a number for the new blink speed.")},TypewriterPrototype.changeTypingSpeed=function(new_speed){if(!new_speed&&"number"!=typeof new_speed)return console.error("Please enter a number for the new typing speed.");return this.changeSettings({typingSpeed:new_speed}),this},TypewriterPrototype.changeDeleteSpeed=function(new_speed){return new_speed||"number"==typeof new_speed?(this.changeSettings({changeDeleteSpeed:new_speed}),this):console.error("Please enter a number for the new delete speed.")},TypewriterPrototype._rerunCalledEvents=function(){this._settings.currentTypedCharacters.length>0?(this.deleteAll(),this._resetEventLoop("rerunCalledEvents")):(this._settings.eventQue=this._settings.calledEvents,this._settings.calledEvents=[],this.options=this._setupOptions(this._settings.userOptions),this._settings.usedIDs=[],this.charAmountToDelete=!1,this._startEventLoop())},TypewriterPrototype._deleteChars=function(amount){return amount&&(this._settings.charAmountToDelete=amount),this._deletingCharIdsAnimation=window.requestAnimationFrame(this._deletingCharAnimationFrame.bind(this)),this},TypewriterPrototype._pauseFor=function(ms){var self=this;self._settings.eventRunning=!0,setTimeout(function(){self._resetEventLoop("pauseFor")},ms)},TypewriterPrototype._changeSettings=function(new_settings){this.options=this._setupOptions(JSON.parse(new_settings[0])),this._resetEventLoop("changeSettings"),this.options.devMode&&console.log("New settings",this.options)},TypewriterPrototype._deletingCharAnimationFrame=function(){var self=this,delete_speed=this.options.deleteSpeed,typewriter_wrapper_class_name=self.options.wrapperClassName,current_typed_char_ids=self._settings.currentTypedCharacters,char_amount_to_delete=self._settings.charAmountToDelete;if(!self._settings.charAmountToDelete||0===self._settings.charAmountToDelete||0===current_typed_char_ids)return self._resetEventLoop("deletingCharAnimationFrame"),!0;"natural"==delete_speed&&(delete_speed=self._randomInteger(50,150)),"all"==char_amount_to_delete&&(char_amount_to_delete=current_typed_char_ids.length,self._settings.charAmountToDelete=char_amount_to_delete),setTimeout(function(){if(self._settings.charAmountToDelete){var last_typed_char_index=current_typed_char_ids.length-1,get_last_typed_char=current_typed_char_ids[last_typed_char_index];self._settings.currentTypedCharacters.splice(last_typed_char_index,1);var char_to_delete_el=document.getElementById(get_last_typed_char);if(char_to_delete_el)self.el.querySelector("."+typewriter_wrapper_class_name).removeChild(char_to_delete_el),self._settings.charAmountToDelete=char_amount_to_delete-1,self.options.devMode&&console.log("Deleted char with ID",get_last_typed_char)}self._deletingCharIdsAnimation=window.requestAnimationFrame(self._deletingCharAnimationFrame.bind(self))},delete_speed)},TypewriterPrototype._setupOptions=function(new_options){var merged_options={};for(var attrname in this.default_options)merged_options[attrname]=this.default_options[attrname];if(this._settings.userOptions)for(var attrname in this._settings.userOptions)merged_options[attrname]=this._settings.userOptions[attrname];for(var attrname in new_options)merged_options[attrname]=new_options[attrname];return merged_options},TypewriterPrototype._addToEventQue=function(event){this._settings.eventQue.push(event),this._settings.eventQue.length>0&&!this._settings.eventRunning&&this.options.autoStart&&this._startEventLoop()},TypewriterPrototype._startEventLoop=function(){if(this.options.devMode&&console.log("Event loop started."),!this._settings.eventRunning){if(this._settings.eventQue.length>0){this.eventLoopRerun=0;var first_event=this._settings.eventQue[0];"function"==typeof first_event?(this._settings.eventRunning=!0,this._settings.calledEvents.push(first_event),this._settings.eventQue.splice(0,1),first_event.call(this),this.options.devMode&&console.log("Event started.")):first_event instanceof Array&&"function"==typeof first_event[0]&&first_event[1]instanceof Array&&(this._settings.eventRunning=!0,this._settings.calledEvents.push(first_event),this._settings.eventQue.splice(0,1),first_event[0].call(this,first_event[1]),this.options.devMode&&console.log("Event started."))}this._eventQueAnimation=window.requestAnimationFrame(this._startEventLoop.bind(this))}if(!this._settings.eventRunning&&this._settings.eventQue.length<=0){var self=this;return self._stopEventLoop(),void setTimeout(function(){self.options.loop&&(self.eventLoopRerun++,self.options.devMode&&console.log("Before Loop State",self._settings),self.eventLoopRerun>4?(console.error("Maximum amount of loop retries reached."),self._stopEventLoop()):(self.options.devMode&&console.log("Looping events."),self._rerunCalledEvents()))},1e3)}},TypewriterPrototype._resetEventLoop=function(name){var event_name=name||"Event";this._settings.eventRunning=!1,this._startEventLoop(),this.options.devMode&&console.log(event_name,"Finished")},TypewriterPrototype._stopEventLoop=function(){window.cancelAnimationFrame(this._eventQueAnimation),this.options.devMode&&console.log("Event loop stopped.")},TypewriterPrototype._setupTypwriterWrapper=function(){var typewriter_wrapper_class_name=this.options.wrapperClassName,typewriter_wrapper=document.createElement("span");typewriter_wrapper.className=typewriter_wrapper_class_name,this.el.innerHTML="",this.el.appendChild(typewriter_wrapper)},TypewriterPrototype._typeCharacters=function(characters_array){return this._settings.stringToTypeHTMLArray=this._convertCharsToHTML(characters_array),this._typingAnimation=window.requestAnimationFrame(this._typingAnimationFrame.bind(this,characters_array.length)),this},TypewriterPrototype._typingAnimationFrame=function(total_items){var self=this,typing_speed=this.options.typingSpeed,typewriter_wrapper_class_name=self.options.wrapperClassName;if(0==self._settings.stringToTypeHTMLArray.length)return window.cancelAnimationFrame(self._typingAnimation),this._resetEventLoop("typingAnimationFrame"),!0;"natural"==typing_speed&&(typing_speed=this._randomInteger(50,150)),setTimeout(function(){self.el.innerHTML;var item_to_type=self._settings.stringToTypeHTMLArray[0];self.el.querySelector("."+typewriter_wrapper_class_name).appendChild(item_to_type.el),self._settings.currentTypedCharacters.push(item_to_type.id),self._settings.stringToTypeHTMLArray.splice(0,1),self._typingAnimation=window.requestAnimationFrame(self._typingAnimationFrame.bind(self,total_items)),self.options.devMode&&console.log("Typed",item_to_type)},typing_speed)},TypewriterPrototype._convertCharsToHTML=function(chars){for(var chars_html_wrap_array=[],char_class_name=this.options.charSpanClassName,chars_array=chars[0],i=0,length=chars_array.length;i<length;i++){var char_element=document.createElement("span"),char_id=this._generateUniqueID();char_element.id=char_id,char_element.className=char_class_name+" typewriter-item-"+i,char_element.innerHTML=chars_array[i],chars_html_wrap_array.push({id:char_id,el:char_element})}return chars_html_wrap_array},TypewriterPrototype._getCharacters=function(string){return"string"==typeof string&&string.split("")},TypewriterPrototype._getStringsAsCharsArray=function(){var strings_array_check=this.options.strings instanceof Array,strings_string_check="string"==typeof this.options.strings;if(!strings_array_check)return strings_string_check?[this.options.strings.split("")]:console.error("Typewriter only accepts strings or an array of strings as the input.");for(var strings_chars_array=[],i=0,length=this.options.strings.length;i<length;i++){var string_chars=this._getCharacters(this.options.strings[i]);if(!string_chars){console.error("Please enter only strings.");break}strings_chars_array.push(string_chars)}return strings_chars_array},TypewriterPrototype._cursorAnimationFrame=function(){if(!this._settings.cursorAnimationPaused){var opacity_amount=.001*this.options.blinkSpeed,cursor_el=this.el.querySelector(".typewriter-cursor");1==this._settings.opacityIncreasing&&(this._settings.currentOpacity>=1&&(this._settings.opacityIncreasing=!1,this._settings.currentOpacity=1),this._settings.currentOpacity+=opacity_amount),0==this._settings.opacityIncreasing&&(this._settings.currentOpacity<=0&&(this._settings.opacityIncreasing=!0,this._settings.currentOpacity=0),this._settings.currentOpacity-=opacity_amount),cursor_el.style.opacity=this._settings.currentOpacity,this._cursorAnimation=window.requestAnimationFrame(this._cursorAnimationFrame.bind(this))}},TypewriterPrototype.appendText=function(text){return this._addToEventQue([this._appendText,[text]]),this},TypewriterPrototype._appendText=function(text){var char_class_name=this.options.charSpanClassName,char_element=document.createElement("span"),char_id=this._generateUniqueID();char_element.id=char_id,char_element.className=char_class_name+" dom-appended",char_element.innerHTML=text;var items=[];items.push({id:char_id,el:char_element}),this._settings.stringToTypeHTMLArray=items,window.requestAnimationFrame(this._typingAnimationFrame.bind(this,1))},TypewriterPrototype._startCursorAnimation=function(){var cursor=this.options.cursor,cursor_class_name=this.options.cursorClassName,cursor_element=document.createElement("span");cursor_element.className=cursor_class_name,cursor_element.innerHTML=cursor,this.el.appendChild(cursor_element),this.options.animateCursor&&(this._cursorAnimation=window.requestAnimationFrame(this._cursorAnimationFrame.bind(this)))},TypewriterPrototype._pauseCursorAnimation=function(){this._settings.cursorAnimationPaused||(window.cancelAnimationFrame(this._cursorAnimation),this._settings.cursorAnimationPaused=!0)},TypewriterPrototype._restartCursorAnimation=function(){if(!this._settings.cursorAnimationPaused)return console.error("Cursor animation is already running.");this._settings.cursorAnimationPaused=!1,this._cursorAnimation=window.requestAnimationFrame(this._cursorAnimationFrame.bind(this))},TypewriterPrototype._randomInteger=function(min,max){return Math.floor(Math.random()*(max-min+1))+min},TypewriterPrototype._randomID=function(){for(var text="",possible="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789",i=0;i<this._randomInteger(5,15);i++)text+=possible.charAt(Math.floor(Math.random()*possible.length));return text},TypewriterPrototype._generateUniqueID=function(){var temp_id=this._randomID();return-1==this._settings.usedIDs.indexOf(temp_id)?(this._settings.usedIDs.push(temp_id),temp_id):this._generateUniqueID.call(this)}}(),function(global,factory){"object"==typeof exports&&"undefined"!=typeof module?module.exports=factory():"function"==typeof define&&define.amd?define("uikit",factory):global.UIkit=factory()}(this,function(){function bind(fn,context){return function(a){var l=arguments.length;return l?l>1?fn.apply(context,arguments):fn.call(context,a):fn.call(context)}}var hasOwnProperty=Object.prototype.hasOwnProperty;function hasOwn(obj,key){return hasOwnProperty.call(obj,key)}var hyphenateCache={},hyphenateRe=/([a-z\d])([A-Z])/g;function hyphenate(str){return str in hyphenateCache||(hyphenateCache[str]=str.replace(hyphenateRe,"$1-$2").toLowerCase()),hyphenateCache[str]}var camelizeRe=/-(\w)/g;function camelize(str){return str.replace(camelizeRe,toUpper)}function toUpper(_,c){return c?c.toUpperCase():""}function ucfirst(str){return str.length?toUpper(0,str.charAt(0))+str.slice(1):""}var strPrototype=String.prototype,startsWithFn=strPrototype.startsWith||function(search){return 0===this.lastIndexOf(search,0)};function startsWith(str,search){return startsWithFn.call(str,search)}var endsWithFn=strPrototype.endsWith||function(search){return this.substr(-search.length)===search};function endsWith(str,search){return endsWithFn.call(str,search)}var includesFn=function(search){return~this.indexOf(search)},includesStr=strPrototype.includes||includesFn,includesArray=Array.prototype.includes||includesFn;function includes(obj,search){return obj&&(isString(obj)?includesStr:includesArray).call(obj,search)}var isArray=Array.isArray;function isFunction(obj){return"function"==typeof obj}function isObject(obj){return null!==obj&&"object"==typeof obj}function isPlainObject(obj){return isObject(obj)&&Object.getPrototypeOf(obj)===Object.prototype}function isWindow(obj){return isObject(obj)&&obj===obj.window}function isDocument(obj){return isObject(obj)&&9===obj.nodeType}function isJQuery(obj){return isObject(obj)&&!!obj.jquery}function isNode(element){return element instanceof Node||isObject(element)&&1===element.nodeType}function isNodeCollection(element){return element instanceof NodeList||element instanceof HTMLCollection}function isBoolean(value){return"boolean"==typeof value}function isString(value){return"string"==typeof value}function isNumber(value){return"number"==typeof value}function isNumeric(value){return isNumber(value)||isString(value)&&!isNaN(value-parseFloat(value))}function isUndefined(value){return void 0===value}function toBoolean(value){return isBoolean(value)?value:"true"===value||"1"===value||""===value||"false"!==value&&"0"!==value&&value}function toNumber(value){var number=Number(value);return!isNaN(number)&&number}function toFloat(value){return parseFloat(value)||0}function toNode(element){return isNode(element)||isWindow(element)||isDocument(element)?element:isNodeCollection(element)||isJQuery(element)?element[0]:isArray(element)?toNode(element[0]):null}var arrayProto=Array.prototype;function toNodes(element){return isNode(element)?[element]:isNodeCollection(element)?arrayProto.slice.call(element):isArray(element)?element.map(toNode).filter(Boolean):isJQuery(element)?element.toArray():[]}function toList(value){return isArray(value)?value:isString(value)?value.split(/,(?![^(]*\))/).map(function(value){return isNumeric(value)?toNumber(value):toBoolean(value.trim())}):[value]}function toMs(time){return time?endsWith(time,"ms")?toFloat(time):1e3*toFloat(time):0}function swap(value,a,b){return value.replace(new RegExp(a+"|"+b,"mg"),function(match){return match===a?b:a})}var assign=Object.assign||function(target){for(var args=[],len=arguments.length-1;len-- >0;)args[len]=arguments[len+1];target=Object(target);for(var i=0;i<args.length;i++){var source=args[i];if(null!==source)for(var key in source)hasOwn(source,key)&&(target[key]=source[key])}return target};function each(obj,cb){for(var key in obj)cb.call(obj[key],obj[key],key)}function sortBy(collection,prop){return collection.sort(function(a,b){return a[prop]>b[prop]?1:b[prop]>a[prop]?-1:0})}function clamp(number,min,max){return void 0===min&&(min=0),void 0===max&&(max=1),Math.min(Math.max(number,min),max)}function noop(){}function intersectRect(r1,r2){return r1.left<=r2.right&&r2.left<=r1.right&&r1.top<=r2.bottom&&r2.top<=r1.bottom}function pointInRect(point,rect){return intersectRect({top:point.y,bottom:point.y,left:point.x,right:point.x},rect)}var Dimensions={ratio:function(dimensions,prop,value){var obj,aProp="width"===prop?"height":"width";return(obj={})[aProp]=Math.round(value*dimensions[aProp]/dimensions[prop]),obj[prop]=value,obj},contain:function(dimensions,maxDimensions){var this$1=this;return each(dimensions=assign({},dimensions),function(_,prop){return dimensions=dimensions[prop]>maxDimensions[prop]?this$1.ratio(dimensions,prop,maxDimensions[prop]):dimensions}),dimensions},cover:function(dimensions,maxDimensions){var this$1=this;return each(dimensions=this.contain(dimensions,maxDimensions),function(_,prop){return dimensions=dimensions[prop]<maxDimensions[prop]?this$1.ratio(dimensions,prop,maxDimensions[prop]):dimensions}),dimensions}};function attr(element,name,value){if(isObject(name))for(var key in name)attr(element,key,name[key]);else{if(isUndefined(value))return(element=toNode(element))&&element.getAttribute(name);toNodes(element).forEach(function(element){isFunction(value)&&(value=value.call(element,attr(element,name))),null===value?removeAttr(element,name):element.setAttribute(name,value)})}}function hasAttr(element,name){return toNodes(element).some(function(element){return element.hasAttribute(name)})}function removeAttr(element,name){element=toNodes(element),name.split(" ").forEach(function(name){return element.forEach(function(element){return element.removeAttribute(name)})})}function filterAttr(element,attribute,pattern,replacement){attr(element,attribute,function(value){return value?value.replace(pattern,replacement):value})}function data(element,attribute){for(var i=0,attrs=[attribute,"data-"+attribute];i<attrs.length;i++)if(hasAttr(element,attrs[i]))return attr(element,attrs[i])}function query(selector,context){return toNode(selector)||find(selector,isContextSelector(selector)?context:document)}function queryAll(selector,context){var nodes=toNodes(selector);return nodes.length&&nodes||findAll(selector,isContextSelector(selector)?context:document)}function find(selector,context){return toNode(_query(selector,context,"querySelector"))}function findAll(selector,context){return toNodes(_query(selector,context,"querySelectorAll"))}function _query(selector,context,queryFn){if(void 0===context&&(context=document),!selector||!isString(selector))return null;var removes;isContextSelector(selector=selector.replace(contextSanitizeRe,"$1 *"))&&(removes=[],selector=selector.split(",").map(function(selector,i){var ctx=context;if("!"===(selector=selector.trim())[0]){var selectors=selector.substr(1).trim().split(" ");ctx=closest(context.parentNode,selectors[0]),selector=selectors.slice(1).join(" ").trim()}if("-"===selector[0]){var selectors$1=selector.substr(1).trim().split(" "),prev=(ctx||context).previousElementSibling;ctx=matches(prev,selector.substr(1))?prev:null,selector=selectors$1.slice(1).join(" ")}return ctx?(ctx.id||(ctx.id="uk-"+Date.now()+i,removes.push(function(){return removeAttr(ctx,"id")})),"#"+escape(ctx.id)+" "+selector):null}).filter(Boolean).join(","),context=document);try{return context[queryFn](selector)}catch(e){return null}finally{removes&&removes.forEach(function(remove){return remove()})}}var contextSelectorRe=/(^|,)\s*[!>+~-]/,contextSanitizeRe=/([!>+~-])(?=\s+[!>+~-]|\s*$)/g;function isContextSelector(selector){return isString(selector)&&selector.match(contextSelectorRe)}var elProto=Element.prototype,matchesFn=elProto.matches||elProto.webkitMatchesSelector||elProto.msMatchesSelector;function matches(element,selector){return toNodes(element).some(function(element){return matchesFn.call(element,selector)})}var closestFn=elProto.closest||function(selector){var ancestor=this;do{if(matches(ancestor,selector))return ancestor;ancestor=ancestor.parentNode}while(ancestor&&1===ancestor.nodeType)};function closest(element,selector){return startsWith(selector,">")&&(selector=selector.slice(1)),isNode(element)?element.parentNode&&closestFn.call(element,selector):toNodes(element).map(function(element){return element.parentNode&&closestFn.call(element,selector)}).filter(Boolean)}function parents(element,selector){for(var elements=[],parent=toNode(element).parentNode;parent&&1===parent.nodeType;)matches(parent,selector)&&elements.push(parent),parent=parent.parentNode;return elements}var escapeFn=window.CSS&&CSS.escape||function(css){return css.replace(/([^\x7f-\uFFFF\w-])/g,function(match){return"\\"+match})};function escape(css){return isString(css)?escapeFn.call(null,css):""}var voidElements={area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,menuitem:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0};function isVoidElement(element){return toNodes(element).some(function(element){return voidElements[element.tagName.toLowerCase()]})}function isVisible(element){return toNodes(element).some(function(element){return element.offsetWidth||element.offsetHeight||element.getClientRects().length})}var selInput="input,select,textarea,button";function isInput(element){return toNodes(element).some(function(element){return matches(element,selInput)})}function filter(element,selector){return toNodes(element).filter(function(element){return matches(element,selector)})}function within(element,selector){return isString(selector)?matches(element,selector)||closest(element,selector):element===selector||(isDocument(selector)?selector.documentElement:toNode(selector)).contains(toNode(element))}function on(){for(var args=[],len=arguments.length;len--;)args[len]=arguments[len];var ref=getArgs(args),target=ref[0],type=ref[1],selector=ref[2],listener=ref[3],useCapture=ref[4];return target=toEventTarget(target),selector&&(listener=function(element,selector,listener){var this$1=this;return function(e){var target=e.target,current=">"===selector[0]?findAll(selector,element).reverse().filter(function(element){return within(target,element)})[0]:closest(target,selector);current&&(e.delegate=element,e.current=current,listener.call(this$1,e))}}(target,selector,listener)),listener.length>1&&(listener=function(listener){return function(e){return isArray(e.detail)?listener.apply(void 0,[e].concat(e.detail)):listener(e)}}(listener)),type.split(" ").forEach(function(type){return target&&target.addEventListener(type,listener,useCapture)}),function(){return off(target,type,listener,useCapture)}}function off(target,type,listener,useCapture){void 0===useCapture&&(useCapture=!1),(target=toEventTarget(target))&&type.split(" ").forEach(function(type){return target.removeEventListener(type,listener,useCapture)})}function once(){for(var args=[],len=arguments.length;len--;)args[len]=arguments[len];var ref=getArgs(args),element=ref[0],type=ref[1],selector=ref[2],listener=ref[3],useCapture=ref[4],condition=ref[5],off=on(element,type,selector,function(e){var result=!condition||condition(e);result&&(off(),listener(e,result))},useCapture);return off}function trigger(target,event,detail){return toEventTargets(target).reduce(function(notCanceled,target){return notCanceled&&target.dispatchEvent(createEvent(event,!0,!0,detail))},!0)}function createEvent(e,bubbles,cancelable,detail){if(void 0===bubbles&&(bubbles=!0),void 0===cancelable&&(cancelable=!1),isString(e)){var event=document.createEvent("CustomEvent");event.initCustomEvent(e,bubbles,cancelable,detail),e=event}return e}function getArgs(args){return isString(args[0])&&(args[0]=find(args[0])),isFunction(args[2])&&args.splice(2,0,!1),args}function isEventTarget(target){return"EventTarget"in window?target instanceof EventTarget:target&&"addEventListener"in target}function toEventTarget(target){return isEventTarget(target)?target:toNode(target)}function toEventTargets(target){return isEventTarget(target)?[target]:isArray(target)?target.map(toEventTarget).filter(Boolean):toNodes(target)}function preventClick(){var timer=setTimeout(once(document,"click",function(e){e.preventDefault(),e.stopImmediatePropagation(),clearTimeout(timer)},!0));trigger(document,"touchcancel")}var Promise$1="Promise"in window?window.Promise:PromiseFn,Deferred=function(){var this$1=this;this.promise=new Promise$1(function(resolve,reject){this$1.reject=reject,this$1.resolve=resolve})},PENDING=2,async="setImmediate"in window?setImmediate:setTimeout;function PromiseFn(executor){this.state=PENDING,this.value=void 0,this.deferred=[];var promise=this;try{executor(function(x){promise.resolve(x)},function(r){promise.reject(r)})}catch(e){promise.reject(e)}}PromiseFn.reject=function(r){return new PromiseFn(function(resolve,reject){reject(r)})},PromiseFn.resolve=function(x){return new PromiseFn(function(resolve,reject){resolve(x)})},PromiseFn.all=function(iterable){return new PromiseFn(function(resolve,reject){var result=[],count=0;function resolver(i){return function(x){result[i]=x,(count+=1)===iterable.length&&resolve(result)}}0===iterable.length&&resolve(result);for(var i=0;i<iterable.length;i+=1)PromiseFn.resolve(iterable[i]).then(resolver(i),reject)})},PromiseFn.race=function(iterable){return new PromiseFn(function(resolve,reject){for(var i=0;i<iterable.length;i+=1)PromiseFn.resolve(iterable[i]).then(resolve,reject)})};var p=PromiseFn.prototype;function ajax(url,options){return new Promise$1(function(resolve,reject){var env=assign({data:null,method:"GET",headers:{},xhr:new XMLHttpRequest,beforeSend:noop,responseType:""},options);env.beforeSend(env);var xhr=env.xhr;for(var prop in env)if(prop in xhr)try{xhr[prop]=env[prop]}catch(e){}for(var header in xhr.open(env.method.toUpperCase(),url),env.headers)xhr.setRequestHeader(header,env.headers[header]);on(xhr,"load",function(){0===xhr.status||xhr.status>=200&&xhr.status<300||304===xhr.status?resolve(xhr):reject(assign(Error(xhr.statusText),{xhr:xhr,status:xhr.status}))}),on(xhr,"error",function(){return reject(assign(Error("Network Error"),{xhr:xhr}))}),on(xhr,"timeout",function(){return reject(assign(Error("Network Timeout"),{xhr:xhr}))}),xhr.send(env.data)})}function getImage(src,srcset,sizes){return new Promise$1(function(resolve,reject){var img=new Image;img.onerror=reject,img.onload=function(){return resolve(img)},img.src=src,srcset&&(img.srcset=srcset),sizes&&(img.sizes=sizes)})}function isReady(){return"complete"===document.readyState||"loading"!==document.readyState&&!document.documentElement.doScroll}function ready(fn){if(isReady())fn();else var handle=function(){unbind1(),unbind2(),fn()},unbind1=on(document,"DOMContentLoaded",handle),unbind2=on(window,"load",handle)}function index(element,ref){return ref?toNodes(element).indexOf(toNode(ref)):toNodes((element=toNode(element))&&element.parentNode.children).indexOf(element)}function getIndex(i,elements,current,finite){void 0===current&&(current=0),void 0===finite&&(finite=!1);var length=(elements=toNodes(elements)).length;return i=isNumeric(i)?toNumber(i):"next"===i?current+1:"previous"===i?current-1:index(elements,i),finite?clamp(i,0,length-1):(i%=length)<0?i+length:i}function empty(element){return(element=toNode(element)).innerHTML="",element}function html(parent,html){return parent=toNode(parent),isUndefined(html)?parent.innerHTML:append(parent.hasChildNodes()?empty(parent):parent,html)}function append(parent,element){return parent=toNode(parent),insertNodes(element,function(element){return parent.appendChild(element)})}function before(ref,element){return ref=toNode(ref),insertNodes(element,function(element){return ref.parentNode.insertBefore(element,ref)})}function after(ref,element){return ref=toNode(ref),insertNodes(element,function(element){return ref.nextSibling?before(ref.nextSibling,element):append(ref.parentNode,element)})}function insertNodes(element,fn){return(element=isString(element)?fragment(element):element)?"length"in element?toNodes(element).map(fn):fn(element):null}function remove(element){toNodes(element).map(function(element){return element.parentNode&&element.parentNode.removeChild(element)})}function wrapAll(element,structure){for(structure=toNode(before(element,structure));structure.firstChild;)structure=structure.firstChild;return append(structure,element),structure}function wrapInner(element,structure){return toNodes(toNodes(element).map(function(element){return element.hasChildNodes?wrapAll(toNodes(element.childNodes),structure):append(element,structure)}))}function unwrap(element){toNodes(element).map(function(element){return element.parentNode}).filter(function(value,index,self){return self.indexOf(value)===index}).forEach(function(parent){before(parent,parent.childNodes),remove(parent)})}p.resolve=function(x){var promise=this;if(promise.state===PENDING){if(x===promise)throw new TypeError("Promise settled with itself.");var called=!1;try{var then=x&&x.then;if(null!==x&&isObject(x)&&isFunction(then))return void then.call(x,function(x){called||promise.resolve(x),called=!0},function(r){called||promise.reject(r),called=!0})}catch(e){return void(called||promise.reject(e))}promise.state=0,promise.value=x,promise.notify()}},p.reject=function(reason){if(this.state===PENDING){if(reason===this)throw new TypeError("Promise settled with itself.");this.state=1,this.value=reason,this.notify()}},p.notify=function(){var this$1=this;async(function(){if(this$1.state!==PENDING)for(;this$1.deferred.length;){var ref=this$1.deferred.shift(),onResolved=ref[0],onRejected=ref[1],resolve=ref[2],reject=ref[3];try{0===this$1.state?isFunction(onResolved)?resolve(onResolved.call(void 0,this$1.value)):resolve(this$1.value):1===this$1.state&&(isFunction(onRejected)?resolve(onRejected.call(void 0,this$1.value)):reject(this$1.value))}catch(e){reject(e)}}})},p.then=function(onResolved,onRejected){var this$1=this;return new PromiseFn(function(resolve,reject){this$1.deferred.push([onResolved,onRejected,resolve,reject]),this$1.notify()})},p.catch=function(onRejected){return this.then(void 0,onRejected)};var fragmentRe=/^\s*<(\w+|!)[^>]*>/,singleTagRe=/^<(\w+)\s*\/?>(?:<\/\1>)?$/;function fragment(html){var matches=singleTagRe.exec(html);if(matches)return document.createElement(matches[1]);var container=document.createElement("div");return fragmentRe.test(html)?container.insertAdjacentHTML("beforeend",html.trim()):container.textContent=html,container.childNodes.length>1?toNodes(container.childNodes):container.firstChild}function apply(node,fn){if(node&&1===node.nodeType)for(fn(node),node=node.firstElementChild;node;)apply(node,fn),node=node.nextElementSibling}function addClass(element){for(var args=[],len=arguments.length-1;len-- >0;)args[len]=arguments[len+1];apply$1(element,args,"add")}function removeClass(element){for(var args=[],len=arguments.length-1;len-- >0;)args[len]=arguments[len+1];apply$1(element,args,"remove")}function removeClasses(element,cls){filterAttr(element,"class",new RegExp("(^|\\s)"+cls+"(?!\\S)","g"),"")}function replaceClass(element){for(var args=[],len=arguments.length-1;len-- >0;)args[len]=arguments[len+1];args[0]&&removeClass(element,args[0]),args[1]&&addClass(element,args[1])}function hasClass(element,cls){return toNodes(element).some(function(element){return element.classList.contains(cls)})}function toggleClass(element){for(var args=[],len=arguments.length-1;len-- >0;)args[len]=arguments[len+1];if(args.length){var force=isString((args=getArgs$1(args))[args.length-1])?[]:args.pop();args=args.filter(Boolean),toNodes(element).forEach(function(ref){for(var classList=ref.classList,i=0;i<args.length;i++)supports.Force?classList.toggle.apply(classList,[args[i]].concat(force)):classList[(isUndefined(force)?!classList.contains(args[i]):force)?"add":"remove"](args[i])})}}function apply$1(element,args,fn){(args=getArgs$1(args).filter(Boolean)).length&&toNodes(element).forEach(function(ref){var classList=ref.classList;supports.Multiple?classList[fn].apply(classList,args):args.forEach(function(cls){return classList[fn](cls)})})}function getArgs$1(args){return args.reduce(function(args,arg){return args.concat.call(args,isString(arg)&&includes(arg," ")?arg.trim().split(" "):arg)},[])}var list,supports={};(list=document.createElement("_").classList)&&(list.add("a","b"),list.toggle("c",!1),supports.Multiple=list.contains("b"),supports.Force=!list.contains("c")),list=null;var cssNumber={"animation-iteration-count":!0,"column-count":!0,"fill-opacity":!0,"flex-grow":!0,"flex-shrink":!0,"font-weight":!0,"line-height":!0,opacity:!0,order:!0,orphans:!0,widows:!0,"z-index":!0,zoom:!0};function css(element,property,value){return toNodes(element).map(function(element){if(isString(property)){if(property=propName(property),isUndefined(value))return getStyle(element,property);value||0===value?element.style[property]=isNumeric(value)&&!cssNumber[property]?value+"px":value:element.style.removeProperty(property)}else{if(isArray(property)){var styles=getStyles(element);return property.reduce(function(props,property){return props[property]=styles[propName(property)],props},{})}isObject(property)&&each(property,function(value,property){return css(element,property,value)})}return element})[0]}function getStyles(element,pseudoElt){return(element=toNode(element)).ownerDocument.defaultView.getComputedStyle(element,pseudoElt)}function getStyle(element,property,pseudoElt){return getStyles(element,pseudoElt)[property]}var vars={};function getCssVar(name){if(!(name in vars)){var element=append(document.documentElement,document.createElement("div"));addClass(element,"var-"+name);try{vars[name]=getStyle(element,"content",":before").replace(/^["'](.*)["']$/,"$1"),vars[name]=JSON.parse(vars[name])}catch(e){}document.documentElement.removeChild(element)}return vars[name]}var cssProps={};function propName(name){var ret=cssProps[name];return ret||(ret=cssProps[name]=function(name){if((name=hyphenate(name))in style)return name;var prefixedName,i=cssPrefixes.length;for(;i--;)if((prefixedName="-"+cssPrefixes[i]+"-"+name)in style)return prefixedName}(name)||name),ret}var cssPrefixes=["webkit","moz","ms"],style=document.createElement("_").style;function transition(element,props,duration,timing){return void 0===duration&&(duration=400),void 0===timing&&(timing="linear"),Promise$1.all(toNodes(element).map(function(element){return new Promise$1(function(resolve,reject){for(var name in props){var value=css(element,name);""===value&&css(element,name,value)}var timer=setTimeout(function(){return trigger(element,"transitionend")},duration);once(element,"transitionend transitioncanceled",function(ref){var type=ref.type;clearTimeout(timer),removeClass(element,"uk-transition"),css(element,{"transition-property":"","transition-duration":"","transition-timing-function":""}),"transitioncanceled"===type?reject():resolve()},!1,function(ref){var target=ref.target;return element===target}),addClass(element,"uk-transition"),css(element,assign({"transition-property":Object.keys(props).map(propName).join(","),"transition-duration":duration+"ms","transition-timing-function":timing},props))})}))}var Transition={start:transition,stop:function(element){return trigger(element,"transitionend"),Promise$1.resolve()},cancel:function(element){trigger(element,"transitioncanceled")},inProgress:function(element){return hasClass(element,"uk-transition")}},animationPrefix="uk-animation-",clsCancelAnimation="uk-cancel-animation";function animate(element,animation,duration,origin,out){var arguments$1=arguments;return void 0===duration&&(duration=200),Promise$1.all(toNodes(element).map(function(element){return new Promise$1(function(resolve,reject){if(hasClass(element,clsCancelAnimation))requestAnimationFrame(function(){return Promise$1.resolve().then(function(){return animate.apply(void 0,arguments$1).then(resolve,reject)})});else{var cls=animation+" "+animationPrefix+(out?"leave":"enter");startsWith(animation,animationPrefix)&&(origin&&(cls+=" uk-transform-origin-"+origin),out&&(cls+=" "+animationPrefix+"reverse")),reset(),once(element,"animationend animationcancel",function(ref){var hasReset=!1;"animationcancel"===ref.type?(reject(),reset()):(resolve(),Promise$1.resolve().then(function(){hasReset=!0,reset()})),requestAnimationFrame(function(){hasReset||(addClass(element,clsCancelAnimation),requestAnimationFrame(function(){return removeClass(element,clsCancelAnimation)}))})},!1,function(ref){var target=ref.target;return element===target}),css(element,"animationDuration",duration+"ms"),addClass(element,cls)}function reset(){css(element,"animationDuration",""),removeClasses(element,animationPrefix+"\\S*")}})}))}var inProgress=new RegExp(animationPrefix+"(enter|leave)"),Animation={in:function(element,animation,duration,origin){return animate(element,animation,duration,origin,!1)},out:function(element,animation,duration,origin){return animate(element,animation,duration,origin,!0)},inProgress:function(element){return inProgress.test(attr(element,"class"))},cancel:function(element){trigger(element,"animationcancel")}};function $(selector,context){return isString(selector)?isHtml(selector)?toNode(fragment(selector)):find(selector,context):toNode(selector)}function $$(selector,context){return isString(selector)?isHtml(selector)?toNodes(fragment(selector)):findAll(selector,context):toNodes(selector)}function isHtml(str){return"<"===str[0]||str.match(/^\s*</)}var dirs={width:["x","left","right"],height:["y","top","bottom"]};function positionAt(element,target,elAttach,targetAttach,elOffset,targetOffset,flip,boundary){elAttach=getPos(elAttach),targetAttach=getPos(targetAttach);var flipped={element:elAttach,target:targetAttach};if(!element||!target)return flipped;var dim=getDimensions(element),targetDim=getDimensions(target),position=targetDim;return moveTo(position,elAttach,dim,-1),moveTo(position,targetAttach,targetDim,1),elOffset=getOffsets(elOffset,dim.width,dim.height),targetOffset=getOffsets(targetOffset,targetDim.width,targetDim.height),elOffset.x+=targetOffset.x,elOffset.y+=targetOffset.y,position.left+=elOffset.x,position.top+=elOffset.y,boundary=getDimensions(boundary||window$1(element)),flip&&each(dirs,function(ref,prop){var dir=ref[0],align=ref[1],alignFlip=ref[2];if(!0===flip||includes(flip,dir)){var elemOffset=elAttach[dir]===align?-dim[prop]:elAttach[dir]===alignFlip?dim[prop]:0,targetOffset=targetAttach[dir]===align?targetDim[prop]:targetAttach[dir]===alignFlip?-targetDim[prop]:0;if(position[align]<boundary[align]||position[align]+dim[prop]>boundary[alignFlip]){var centerOffset=dim[prop]/2,centerTargetOffset="center"===targetAttach[dir]?-targetDim[prop]/2:0;"center"===elAttach[dir]&&(apply(centerOffset,centerTargetOffset)||apply(-centerOffset,-centerTargetOffset))||apply(elemOffset,targetOffset)}}function apply(elemOffset,targetOffset){var newVal=position[align]+elemOffset+targetOffset-2*elOffset[dir];if(newVal>=boundary[align]&&newVal+dim[prop]<=boundary[alignFlip])return position[align]=newVal,["element","target"].forEach(function(el){flipped[el][dir]=elemOffset?flipped[el][dir]===dirs[prop][1]?dirs[prop][2]:dirs[prop][1]:flipped[el][dir]}),!0}}),offset(element,position),flipped}function offset(element,coordinates){if(element=toNode(element),!coordinates)return getDimensions(element);var currentOffset=offset(element),pos=css(element,"position");["left","top"].forEach(function(prop){if(prop in coordinates){var value=css(element,prop);css(element,prop,coordinates[prop]-currentOffset[prop]+toFloat("absolute"===pos&&"auto"===value?position(element)[prop]:value))}})}function getDimensions(element){var style,hidden,ref=window$1(element=toNode(element)),top=ref.pageYOffset,left=ref.pageXOffset;if(isWindow(element)){var height=element.innerHeight,width=element.innerWidth;return{top:top,left:left,height:height,width:width,bottom:top+height,right:left+width}}isVisible(element)||(style=attr(element,"style"),hidden=attr(element,"hidden"),attr(element,{style:(style||"")+";display:block !important;",hidden:null}));var rect=element.getBoundingClientRect();return isUndefined(style)||attr(element,{style:style,hidden:hidden}),{height:rect.height,width:rect.width,top:rect.top+top,left:rect.left+left,bottom:rect.bottom+top,right:rect.right+left}}function position(element){var parent=function(element){var parent=toNode(element).offsetParent;for(;parent&&"static"===css(parent,"position");)parent=parent.offsetParent;return parent||docEl(element)}(element=toNode(element)),parentOffset=parent===docEl(element)?{top:0,left:0}:offset(parent),ref=["top","left"].reduce(function(props,prop){var propName$$1=ucfirst(prop);return props[prop]-=parentOffset[prop]+(toFloat(css(element,"margin"+propName$$1))||0)+(toFloat(css(parent,"border"+propName$$1+"Width"))||0),props},offset(element));return{top:ref.top,left:ref.left}}var height=dimension("height"),width=dimension("width");function dimension(prop){var propName$$1=ucfirst(prop);return function(element,value){if(element=toNode(element),isUndefined(value)){if(isWindow(element))return element["inner"+propName$$1];if(isDocument(element)){var doc=element.documentElement;return Math.max(doc["offset"+propName$$1],doc["scroll"+propName$$1])}return(value="auto"===(value=css(element,prop))?element["offset"+propName$$1]:toFloat(value)||0)-boxModelAdjust(prop,element)}css(element,prop,value||0===value?+value+boxModelAdjust(prop,element)+"px":"")}}function boxModelAdjust(prop,element){return"border-box"===css(element,"boxSizing")?dirs[prop].slice(1).map(ucfirst).reduce(function(value,prop){return value+toFloat(css(element,"padding"+prop))+toFloat(css(element,"border"+prop+"Width"))},0):0}function moveTo(position,attach,dim,factor){each(dirs,function(ref,prop){var dir=ref[0],align=ref[1],alignFlip=ref[2];attach[dir]===alignFlip?position[align]+=dim[prop]*factor:"center"===attach[dir]&&(position[align]+=dim[prop]*factor/2)})}function getPos(pos){var x=/left|center|right/,y=/top|center|bottom/;return 1===(pos=(pos||"").split(" ")).length&&(pos=x.test(pos[0])?pos.concat(["center"]):y.test(pos[0])?["center"].concat(pos):["center","center"]),{x:x.test(pos[0])?pos[0]:"center",y:y.test(pos[1])?pos[1]:"center"}}function getOffsets(offsets,width,height){var ref=(offsets||"").split(" "),x=ref[0],y=ref[1];return{x:x?toFloat(x)*(endsWith(x,"%")?width/100:1):0,y:y?toFloat(y)*(endsWith(y,"%")?height/100:1):0}}function flipPosition(pos){switch(pos){case"left":return"right";case"right":return"left";case"top":return"bottom";case"bottom":return"top";default:return pos}}function isInView(element,topOffset,leftOffset,relativeToViewport){if(void 0===topOffset&&(topOffset=0),void 0===leftOffset&&(leftOffset=0),!isVisible(element))return!1;var win=window$1(element=toNode(element));if(relativeToViewport)return intersectRect(element.getBoundingClientRect(),{top:-topOffset,left:-leftOffset,bottom:topOffset+height(win),right:leftOffset+width(win)});var ref=offsetPosition(element),elTop=ref[0],elLeft=ref[1],top=win.pageYOffset,left=win.pageXOffset;return intersectRect({top:elTop,left:elLeft,bottom:elTop+element.offsetHeight,right:elTop+element.offsetWidth},{top:top-topOffset,left:left-leftOffset,bottom:top+topOffset+height(win),right:left+leftOffset+width(win)})}function scrolledOver(element,heightOffset){if(void 0===heightOffset&&(heightOffset=0),!isVisible(element))return 0;var win=window$1(element=toNode(element)),doc=document$1(element),elHeight=element.offsetHeight+heightOffset,top=offsetPosition(element)[0],vp=height(win),vh=vp+Math.min(0,top-vp),diff=Math.max(0,vp-(height(doc)+heightOffset-(top+elHeight)));return clamp((vh+win.pageYOffset-top)/((vh+(elHeight-(diff<vp?diff:0)))/100)/100)}function offsetPosition(element){var offset=[0,0];do{if(offset[0]+=element.offsetTop,offset[1]+=element.offsetLeft,"fixed"===css(element,"position")){var win=window$1(element);return offset[0]+=win.pageYOffset,offset[1]+=win.pageXOffset,offset}}while(element=element.offsetParent);return offset}function window$1(element){return isWindow(element)?element:document$1(element).defaultView}function document$1(element){return toNode(element).ownerDocument}function docEl(element){return document$1(element).documentElement}var isRtl="rtl"===attr(document.documentElement,"dir"),hasTouchEvents="ontouchstart"in window,hasPointerEvents=window.PointerEvent,hasTouch=hasTouchEvents||window.DocumentTouch&&document instanceof DocumentTouch||navigator.maxTouchPoints,pointerDown=hasTouch?"mousedown "+(hasTouchEvents?"touchstart":"pointerdown"):"mousedown",pointerMove=hasTouch?"mousemove "+(hasTouchEvents?"touchmove":"pointermove"):"mousemove",pointerUp=hasTouch?"mouseup "+(hasTouchEvents?"touchend":"pointerup"):"mouseup",pointerEnter=hasTouch&&hasPointerEvents?"pointerenter":"mouseenter",pointerLeave=hasTouch&&hasPointerEvents?"pointerleave":"mouseleave",fastdom={reads:[],writes:[],read:function(task){return this.reads.push(task),scheduleFlush(),task},write:function(task){return this.writes.push(task),scheduleFlush(),task},clear:function(task){return remove$1(this.reads,task)||remove$1(this.writes,task)},flush:function(){runTasks(this.reads),runTasks(this.writes.splice(0,this.writes.length)),this.scheduled=!1,(this.reads.length||this.writes.length)&&scheduleFlush()}};function scheduleFlush(){fastdom.scheduled||(fastdom.scheduled=!0,requestAnimationFrame(fastdom.flush.bind(fastdom)))}function runTasks(tasks){for(var task;task=tasks.shift();)task()}function remove$1(array,item){var index=array.indexOf(item);return!!~index&&!!array.splice(index,1)}function MouseTracker(){}function slope(a,b){return(b.y-a.y)/(b.x-a.x)}MouseTracker.prototype={positions:[],position:null,init:function(){var this$1=this;this.positions=[],this.position=null;var ticking=!1;this.unbind=on(document,"mousemove",function(e){ticking||(setTimeout(function(){var time=Date.now(),length=this$1.positions.length;length&&time-this$1.positions[length-1].time>100&&this$1.positions.splice(0,length),this$1.positions.push({time:time,x:e.pageX,y:e.pageY}),this$1.positions.length>5&&this$1.positions.shift(),ticking=!1},5),ticking=!0)})},cancel:function(){this.unbind&&this.unbind()},movesTo:function(target){if(this.positions.length<2)return!1;var p=offset(target),position$$1=this.positions[this.positions.length-1],prevPos=this.positions[0];if(p.left<=position$$1.x&&position$$1.x<=p.right&&p.top<=position$$1.y&&position$$1.y<=p.bottom)return!1;var points=[[{x:p.left,y:p.top},{x:p.right,y:p.bottom}],[{x:p.right,y:p.top},{x:p.left,y:p.bottom}]];return p.right<=position$$1.x||(p.left>=position$$1.x?(points[0].reverse(),points[1].reverse()):p.bottom<=position$$1.y?points[0].reverse():p.top>=position$$1.y&&points[1].reverse()),!!points.reduce(function(result,point){return result+(slope(prevPos,point[0])<slope(position$$1,point[0])&&slope(prevPos,point[1])>slope(position$$1,point[1]))},0)}};var strats={};function mergeFnData(parentVal,childVal,vm){return strats.computed(isFunction(parentVal)?parentVal.call(vm,vm):parentVal,isFunction(childVal)?childVal.call(vm,vm):childVal)}strats.args=strats.events=strats.init=strats.created=strats.beforeConnect=strats.connected=strats.ready=strats.beforeDisconnect=strats.disconnected=strats.destroy=function(parentVal,childVal){return parentVal=parentVal&&!isArray(parentVal)?[parentVal]:parentVal,childVal?parentVal?parentVal.concat(childVal):isArray(childVal)?childVal:[childVal]:parentVal},strats.update=function(parentVal,childVal){return strats.args(parentVal,isFunction(childVal)?{read:childVal}:childVal)},strats.props=function(parentVal,childVal){return isArray(childVal)&&(childVal=childVal.reduce(function(value,key){return value[key]=String,value},{})),strats.methods(parentVal,childVal)},strats.computed=strats.methods=function(parentVal,childVal){return childVal?parentVal?assign({},parentVal,childVal):childVal:parentVal},strats.data=function(parentVal,childVal,vm){return vm?mergeFnData(parentVal,childVal,vm):childVal?parentVal?function(vm){return mergeFnData(parentVal,childVal,vm)}:childVal:parentVal};var defaultStrat=function(parentVal,childVal){return isUndefined(childVal)?parentVal:childVal};function mergeOptions(parent,child,vm){var options={};if(isFunction(child)&&(child=child.options),child.extends&&(parent=mergeOptions(parent,child.extends,vm)),child.mixins)for(var i=0,l=child.mixins.length;i<l;i++)parent=mergeOptions(parent,child.mixins[i],vm);for(var key in parent)mergeKey(key);for(var key$1 in child)hasOwn(parent,key$1)||mergeKey(key$1);function mergeKey(key){options[key]=(strats[key]||defaultStrat)(parent[key],child[key],vm)}return options}function parseOptions(options,args){var obj;void 0===args&&(args=[]);try{return options?startsWith(options,"{")?JSON.parse(options):args.length&&!includes(options,":")?((obj={})[args[0]]=options,obj):options.split(";").reduce(function(options,option){var ref=option.split(/:(.*)/),key=ref[0],value=ref[1];return key&&!isUndefined(value)&&(options[key.trim()]=value.trim()),options},{}):{}}catch(e){return{}}}var id=0,Player=function(el){this.id=++id,this.el=toNode(el)};function post(el,cmd){try{el.contentWindow.postMessage(JSON.stringify(assign({event:"command"},cmd)),"*")}catch(e){}}Player.prototype.isVideo=function(){return this.isYoutube()||this.isVimeo()||this.isHTML5()},Player.prototype.isHTML5=function(){return"VIDEO"===this.el.tagName},Player.prototype.isIFrame=function(){return"IFRAME"===this.el.tagName},Player.prototype.isYoutube=function(){return this.isIFrame()&&!!this.el.src.match(/\/\/.*?youtube(-nocookie)?\.[a-z]+\/(watch\?v=[^&\s]+|embed)|youtu\.be\/.*/)},Player.prototype.isVimeo=function(){return this.isIFrame()&&!!this.el.src.match(/vimeo\.com\/video\/.*/)},Player.prototype.enableApi=function(){var this$1=this;if(this.ready)return this.ready;var poller,youtube=this.isYoutube(),vimeo=this.isVimeo();return youtube||vimeo?this.ready=new Promise$1(function(resolve){var cb;once(this$1.el,"load",function(){if(youtube){var listener=function(){return post(this$1.el,{event:"listening",id:this$1.id})};poller=setInterval(listener,100),listener()}}),(cb=function(data$$1){return youtube&&data$$1.id===this$1.id&&"onReady"===data$$1.event||vimeo&&Number(data$$1.player_id)===this$1.id},new Promise$1(function(resolve){once(window,"message",function(_,data$$1){return resolve(data$$1)},!1,function(ref){var data$$1=ref.data;if(data$$1&&isString(data$$1)){try{data$$1=JSON.parse(data$$1)}catch(e){return}return data$$1&&cb(data$$1)}})})).then(function(){resolve(),poller&&clearInterval(poller)}),attr(this$1.el,"src",this$1.el.src+(includes(this$1.el.src,"?")?"&":"?")+(youtube?"enablejsapi=1":"api=1&player_id="+this$1.id))}):Promise$1.resolve()},Player.prototype.play=function(){var this$1=this;if(this.isVideo())if(this.isIFrame())this.enableApi().then(function(){return post(this$1.el,{func:"playVideo",method:"play"})});else if(this.isHTML5())try{var promise=this.el.play();promise&&promise.catch(noop)}catch(e){}},Player.prototype.pause=function(){var this$1=this;this.isVideo()&&(this.isIFrame()?this.enableApi().then(function(){return post(this$1.el,{func:"pauseVideo",method:"pause"})}):this.isHTML5()&&this.el.pause())},Player.prototype.mute=function(){var this$1=this;this.isVideo()&&(this.isIFrame()?this.enableApi().then(function(){return post(this$1.el,{func:"mute",method:"setVolume",value:0})}):this.isHTML5()&&(this.el.muted=!0,attr(this.el,"muted","")))};var clickTimeout,swipeTimeout,tapTimeout,clicked,touch={};function cancelAll(){clickTimeout&&clearTimeout(clickTimeout),swipeTimeout&&clearTimeout(swipeTimeout),tapTimeout&&clearTimeout(tapTimeout),clickTimeout=swipeTimeout=tapTimeout=null,touch={}}ready(function(){on(document,"click",function(){return clicked=!0},!0),on(document,pointerDown,function(e){var target=e.target,ref=getPos$1(e),x=ref.x,y=ref.y,now=Date.now(),type=getType(e.type);touch.type&&touch.type!==type||(touch.el="tagName"in target?target:target.parentNode,clickTimeout&&clearTimeout(clickTimeout),touch.x1=x,touch.y1=y,touch.last&&now-touch.last<=250&&(touch={}),touch.type=type,touch.last=now,clicked=e.button>0)}),on(document,pointerMove,function(e){if(!e.defaultPrevented){var ref=getPos$1(e),x=ref.x,y=ref.y;touch.x2=x,touch.y2=y}}),on(document,pointerUp,function(ref){var type=ref.type,target=ref.target;touch.type===getType(type)&&(touch.x2&&Math.abs(touch.x1-touch.x2)>30||touch.y2&&Math.abs(touch.y1-touch.y2)>30?swipeTimeout=setTimeout(function(){var ref,x1,x2,y1,y2;touch.el&&(trigger(touch.el,"swipe"),trigger(touch.el,"swipe"+(x1=(ref=touch).x1,x2=ref.x2,y1=ref.y1,y2=ref.y2,Math.abs(x1-x2)>=Math.abs(y1-y2)?x1-x2>0?"Left":"Right":y1-y2>0?"Up":"Down"))),touch={}}):"last"in touch?(tapTimeout=setTimeout(function(){return trigger(touch.el,"tap")}),touch.el&&"mouseup"!==type&&within(target,touch.el)&&(clickTimeout=setTimeout(function(){clickTimeout=null,touch.el&&!clicked&&trigger(touch.el,"click"),touch={}},350))):touch={})}),on(document,"touchcancel",cancelAll),on(window,"scroll",cancelAll)});var touching=!1;function isTouch(e){return touching||"touch"===e.pointerType}function getPos$1(e){var touches=e.touches,changedTouches=e.changedTouches,ref=touches&&touches[0]||changedTouches&&changedTouches[0]||e;return{x:ref.pageX,y:ref.pageY}}function getType(type){return type.slice(0,5)}function getComponentName(attribute){return!(!startsWith(attribute,"uk-")&&!startsWith(attribute,"data-uk-"))&&camelize(attribute.replace("data-uk-","").replace("uk-",""))}on(document,"touchstart",function(){return touching=!0},!0),on(document,"click",function(){touching=!1}),on(document,"touchcancel",function(){return touching=!1},!0);var UIkit=function(options){this._init(options)};UIkit.util=Object.freeze({ajax:ajax,getImage:getImage,transition:transition,Transition:Transition,animate:animate,Animation:Animation,attr:attr,hasAttr:hasAttr,removeAttr:removeAttr,filterAttr:filterAttr,data:data,addClass:addClass,removeClass:removeClass,removeClasses:removeClasses,replaceClass:replaceClass,hasClass:hasClass,toggleClass:toggleClass,$:$,$$:$$,positionAt:positionAt,offset:offset,position:position,height:height,width:width,flipPosition:flipPosition,isInView:isInView,scrolledOver:scrolledOver,isReady:isReady,ready:ready,index:index,getIndex:getIndex,empty:empty,html:html,prepend:function(parent,element){return(parent=toNode(parent)).hasChildNodes()?insertNodes(element,function(element){return parent.insertBefore(element,parent.firstChild)}):append(parent,element)},append:append,before:before,after:after,remove:remove,wrapAll:wrapAll,wrapInner:wrapInner,unwrap:unwrap,fragment:fragment,apply:apply,isRtl:isRtl,hasTouch:hasTouch,pointerDown:pointerDown,pointerMove:pointerMove,pointerUp:pointerUp,pointerEnter:pointerEnter,pointerLeave:pointerLeave,on:on,off:off,once:once,trigger:trigger,createEvent:createEvent,toEventTargets:toEventTargets,preventClick:preventClick,fastdom:fastdom,isVoidElement:isVoidElement,isVisible:isVisible,selInput:selInput,isInput:isInput,filter:filter,within:within,bind:bind,hasOwn:hasOwn,hyphenate:hyphenate,camelize:camelize,ucfirst:ucfirst,startsWith:startsWith,endsWith:endsWith,includes:includes,isArray:isArray,isFunction:isFunction,isObject:isObject,isPlainObject:isPlainObject,isWindow:isWindow,isDocument:isDocument,isJQuery:isJQuery,isNode:isNode,isNodeCollection:isNodeCollection,isBoolean:isBoolean,isString:isString,isNumber:isNumber,isNumeric:isNumeric,isUndefined:isUndefined,toBoolean:toBoolean,toNumber:toNumber,toFloat:toFloat,toNode:toNode,toNodes:toNodes,toList:toList,toMs:toMs,swap:swap,assign:assign,each:each,sortBy:sortBy,clamp:clamp,noop:noop,intersectRect:intersectRect,pointInRect:pointInRect,Dimensions:Dimensions,MouseTracker:MouseTracker,mergeOptions:mergeOptions,parseOptions:parseOptions,Player:Player,Promise:Promise$1,Deferred:Deferred,query:query,queryAll:queryAll,find:find,findAll:findAll,matches:matches,closest:closest,parents:parents,escape:escape,css:css,getStyles:getStyles,getStyle:getStyle,getCssVar:getCssVar,propName:propName,isTouch:isTouch,getPos:getPos$1}),UIkit.data="__uikit__",UIkit.prefix="uk-",UIkit.options={},function(UIkit){var container,DATA=UIkit.data;function update(data$$1,e){if(data$$1)for(var name in data$$1)data$$1[name]._isReady&&data$$1[name]._callUpdate(e)}UIkit.use=function(plugin){if(!plugin.installed)return plugin.call(null,this),plugin.installed=!0,this},UIkit.mixin=function(mixin,component){component=(isString(component)?UIkit.component(component):component)||this,(mixin=mergeOptions({},mixin)).mixins=component.options.mixins,delete component.options.mixins,component.options=mergeOptions(mixin,component.options)},UIkit.extend=function(options){options=options||{};var Sub=function(options){this._init(options)};return(Sub.prototype=Object.create(this.prototype)).constructor=Sub,Sub.options=mergeOptions(this.options,options),Sub.super=this,Sub.extend=this.extend,Sub},UIkit.update=function(element,e){e=createEvent(e||"update"),function(element){for(var path=[];element&&element!==document.body&&element.parentNode;)element=element.parentNode,path.unshift(element);return path}(element=element?toNode(element):document.body).map(function(element){return update(element[DATA],e)}),apply(element,function(element){return update(element[DATA],e)})},Object.defineProperty(UIkit,"container",{get:function(){return container||document.body},set:function(element){container=$(element)}})}(UIkit),function(UIkit){UIkit.prototype._callHook=function(hook){var this$1=this,handlers=this.$options[hook];handlers&&handlers.forEach(function(handler){return handler.call(this$1)})},UIkit.prototype._callConnected=function(){var this$1=this;this._connected||(this._data={},this._initProps(),this._callHook("beforeConnect"),this._connected=!0,this._initEvents(),this._initObserver(),this._callHook("connected"),this._isReady||ready(function(){return this$1._callReady()}),this._callUpdate())},UIkit.prototype._callDisconnected=function(){this._connected&&(this._callHook("beforeDisconnect"),this._observer&&(this._observer.disconnect(),this._observer=null),this._unbindEvents(),this._callHook("disconnected"),this._connected=!1)},UIkit.prototype._callReady=function(){this._isReady||(this._isReady=!0,this._callHook("ready"),this._resetComputeds(),this._callUpdate())},UIkit.prototype._callUpdate=function(e){var this$1=this,type=(e=createEvent(e||"update")).type;includes(["update","load","resize"],type)&&this._resetComputeds();var updates=this.$options.update,ref=this._frames,reads=ref.reads,writes=ref.writes;updates&&updates.forEach(function(ref,i){var read=ref.read,write=ref.write,events=ref.events;("update"===type||includes(events,type))&&(read&&!includes(fastdom.reads,reads[i])&&(reads[i]=fastdom.read(function(){var result=this$1._connected&&read.call(this$1,this$1._data,e);!1===result&&write?(fastdom.clear(writes[i]),delete writes[i]):isPlainObject(result)&&assign(this$1._data,result),delete reads[i]})),write&&!includes(fastdom.writes,writes[i])&&(writes[i]=fastdom.write(function(){this$1._connected&&write.call(this$1,this$1._data,e),delete writes[i]})))})}}(UIkit),function(UIkit){var uid=0;function getProps(opts,name){var data$$1={},args=opts.args;void 0===args&&(args=[]);var props=opts.props;void 0===props&&(props={});var el=opts.el;if(!props)return data$$1;for(var key in props){var prop=hyphenate(key);if(hasAttr(el,prop)){var value=coerce(props[key],attr(el,prop));if("target"===prop&&(!value||startsWith(value,"_")))continue;data$$1[key]=value}}var options=parseOptions(data(el,name),args);for(var key$1 in options){var prop$1=camelize(key$1);void 0!==props[prop$1]&&(data$$1[prop$1]=coerce(props[prop$1],options[key$1]))}return data$$1}function registerComputed(component,key,cb){Object.defineProperty(component,key,{enumerable:!0,get:function(){var _computeds=component._computeds,$props=component.$props,$el=component.$el;return hasOwn(_computeds,key)||(_computeds[key]=cb.call(component,$props,$el)),_computeds[key]},set:function(value){component._computeds[key]=value}})}function registerEvent(component,event,key){isPlainObject(event)||(event={name:key,handler:event});var listener,name=event.name,el=event.el,handler=event.handler,capture=event.capture,delegate=event.delegate,filter$$1=event.filter,self=event.self;el=isFunction(el)?el.call(component):el||component.$el,isArray(el)?el.forEach(function(el){return registerEvent(component,assign({},event,{el:el}),key)}):!el||filter$$1&&!filter$$1.call(component)||(listener=isString(handler)?component[handler]:bind(handler,component),handler=function(e){return isArray(e.detail)?listener.apply(void 0,[e].concat(e.detail)):listener(e)},self&&(handler=function(handler){return function(e){if(e.target===e.currentTarget||e.target===e.current)return handler.call(null,e)}}(handler)),component._events.push(on(el,name,delegate?isString(delegate)?delegate:delegate.call(component):null,handler,capture)))}function notIn(options,key){return options.every(function(arr){return!arr||!hasOwn(arr,key)})}function coerce(type,value){return type===Boolean?toBoolean(value):type===Number?toNumber(value):"list"===type?toList(value):"media"===type?function(value){if(isString(value))if("@"===value[0]){var name="media-"+value.substr(1);value=toFloat(getCssVar(name))}else if(isNaN(value))return value;return!(!value||isNaN(value))&&"(min-width: "+value+"px)"}(value):type?type(value):value}UIkit.prototype._init=function(options){(options=options||{}).data=function(ref,ref$1){var data$$1=ref.data,args=(ref.el,ref$1.args),props=ref$1.props;if(void 0===props&&(props={}),data$$1=isArray(data$$1)?args&&args.length?data$$1.slice(0,args.length).reduce(function(data$$1,value,index$$1){return isPlainObject(value)?assign(data$$1,value):data$$1[args[index$$1]]=value,data$$1},{}):void 0:data$$1)for(var key in data$$1)isUndefined(data$$1[key])?delete data$$1[key]:data$$1[key]=props[key]?coerce(props[key],data$$1[key]):data$$1[key];return data$$1}(options,this.constructor.options),this.$options=mergeOptions(this.constructor.options,options,this),this.$el=null,this.$props={},this._frames={reads:{},writes:{}},this._events=[],this._uid=uid++,this._initData(),this._initMethods(),this._initComputeds(),this._callHook("created"),options.el&&this.$mount(options.el)},UIkit.prototype._initData=function(){var data$$1=this.$options.data;for(var key in void 0===data$$1&&(data$$1={}),data$$1)this.$props[key]=this[key]=data$$1[key]},UIkit.prototype._initMethods=function(){var methods=this.$options.methods;if(methods)for(var key in methods)this[key]=bind(methods[key],this)},UIkit.prototype._initComputeds=function(){var computed=this.$options.computed;if(this._resetComputeds(),computed)for(var key in computed)registerComputed(this,key,computed[key])},UIkit.prototype._resetComputeds=function(){this._computeds={}},UIkit.prototype._initProps=function(props){var key;for(key in this._resetComputeds(),props=props||getProps(this.$options,this.$name))isUndefined(props[key])||(this.$props[key]=props[key]);var exclude=[this.$options.computed,this.$options.methods];for(key in this.$props)key in props&¬In(exclude,key)&&(this[key]=this.$props[key])},UIkit.prototype._initEvents=function(){var this$1=this,events=this.$options.events;events&&events.forEach(function(event){if(hasOwn(event,"handler"))registerEvent(this$1,event);else for(var key in event)registerEvent(this$1,event[key],key)})},UIkit.prototype._unbindEvents=function(){this._events.forEach(function(unbind){return unbind()}),this._events=[]},UIkit.prototype._initObserver=function(){var this$1=this,ref=this.$options,attrs=ref.attrs,props=ref.props,el=ref.el;!this._observer&&props&&attrs&&(attrs=isArray(attrs)?attrs:Object.keys(props).map(function(key){return hyphenate(key)}),this._observer=new MutationObserver(function(){var data$$1=getProps(this$1.$options,this$1.$name);attrs.some(function(key){return!isUndefined(data$$1[key])&&data$$1[key]!==this$1.$props[key]})&&this$1.$reset()}),this._observer.observe(el,{attributes:!0,attributeFilter:attrs.concat([this.$name,"data-"+this.$name])}))}}(UIkit),function(UIkit){var DATA=UIkit.data,components={};UIkit.component=function(name,options){if(!options)return isPlainObject(components[name])&&(components[name]=UIkit.extend(components[name])),components[name];UIkit[name]=function(element,data$$1){for(var i=arguments.length,argsArray=Array(i);i--;)argsArray[i]=arguments[i];var component=UIkit.component(name);return isPlainObject(element)?new component({data:element}):component.options.functional?new component({data:[].concat(argsArray)}):element&&element.nodeType?init(element):$$(element).map(init)[0];function init(element){var instance=UIkit.getComponent(element,name);if(instance){if(!data$$1)return instance;instance.$destroy()}return new component({el:element,data:data$$1})}};var opt=isPlainObject(options)?assign({},options):options.options;if(opt.name=name,opt.install&&opt.install(UIkit,opt,name),UIkit._initialized&&!opt.functional){var id=hyphenate(name);fastdom.read(function(){return UIkit[name]("[uk-"+id+"],[data-uk-"+id+"]")})}return components[name]=isPlainObject(options)?opt:options},UIkit.getComponents=function(element){return element&&element[DATA]||{}},UIkit.getComponent=function(element,name){return UIkit.getComponents(element)[name]},UIkit.connect=function(node){if(node[DATA])for(var name in node[DATA])node[DATA][name]._callConnected();for(var i=0;i<node.attributes.length;i++){var name$1=getComponentName(node.attributes[i].name);name$1&&name$1 in components&&UIkit[name$1](node)}},UIkit.disconnect=function(node){for(var name in node[DATA])node[DATA][name]._callDisconnected()}}(UIkit),function(UIkit){var DATA=UIkit.data;UIkit.prototype.$mount=function(el){var name=this.$options.name;el[DATA]||(el[DATA]={}),el[DATA][name]||(el[DATA][name]=this,this.$el=this.$options.el=this.$options.el||el,this._callHook("init"),within(el,document)&&this._callConnected())},UIkit.prototype.$emit=function(e){this._callUpdate(e)},UIkit.prototype.$reset=function(){this._callDisconnected(),this._callConnected()},UIkit.prototype.$destroy=function(removeEl){void 0===removeEl&&(removeEl=!1);var ref=this.$options,el=ref.el,name=ref.name;el&&this._callDisconnected(),this._callHook("destroy"),el&&el[DATA]&&(delete el[DATA][name],Object.keys(el[DATA]).length||delete el[DATA],removeEl&&remove(this.$el))},UIkit.prototype.$create=function(component,element,data$$1){return UIkit[component](element,data$$1)},UIkit.prototype.$update=UIkit.update,UIkit.prototype.$getComponent=UIkit.getComponent;var names={};Object.defineProperties(UIkit.prototype,{$container:Object.getOwnPropertyDescriptor(UIkit,"container"),$name:{get:function(){var name=this.$options.name;return names[name]||(names[name]=UIkit.prefix+hyphenate(name)),names[name]}}})}(UIkit);var Class={connected:function(){addClass(this.$el,this.$name)}},Togglable={props:{cls:Boolean,animation:"list",duration:Number,origin:String,transition:String,queued:Boolean},data:{cls:!1,animation:[!1],duration:200,origin:!1,transition:"linear",queued:!1,initProps:{overflow:"",height:"",paddingTop:"",paddingBottom:"",marginTop:"",marginBottom:""},hideProps:{overflow:"hidden",height:0,paddingTop:0,paddingBottom:0,marginTop:0,marginBottom:0}},computed:{hasAnimation:function(ref){return!!ref.animation[0]},hasTransition:function(ref){var animation=ref.animation;return this.hasAnimation&&!0===animation[0]}},methods:{toggleElement:function(targets,show,animate$$1){var this$1=this;return new Promise$1(function(resolve){var p,all=function(targets){return Promise$1.all(targets.map(function(el){return this$1._toggleElement(el,show,animate$$1)}))},toggled=(targets=toNodes(targets)).filter(function(el){return this$1.isToggled(el)}),untoggled=targets.filter(function(el){return!includes(toggled,el)});if(this$1.queued&&isUndefined(animate$$1)&&isUndefined(show)&&this$1.hasAnimation&&!(targets.length<2)){var body=document.body,scroll=body.scrollTop,el=toggled[0],inProgress=Animation.inProgress(el)&&hasClass(el,"uk-animation-leave")||Transition.inProgress(el)&&"0px"===el.style.height;p=all(toggled),inProgress||(p=p.then(function(){var p=all(untoggled);return body.scrollTop=scroll,p}))}else p=all(untoggled.concat(toggled));p.then(resolve,noop)})},toggleNow:function(targets,show){var this$1=this;return new Promise$1(function(resolve){return Promise$1.all(toNodes(targets).map(function(el){return this$1._toggleElement(el,show,!1)})).then(resolve,noop)})},isToggled:function(el){var nodes=toNodes(el||this.$el);return this.cls?hasClass(nodes,this.cls.split(" ")[0]):!hasAttr(nodes,"hidden")},updateAria:function(el){!1===this.cls&&attr(el,"aria-hidden",!this.isToggled(el))},_toggleElement:function(el,show,animate$$1){var this$1=this;if(show=isBoolean(show)?show:Animation.inProgress(el)?hasClass(el,"uk-animation-leave"):Transition.inProgress(el)?"0px"===el.style.height:!this.isToggled(el),!trigger(el,"before"+(show?"show":"hide"),[this]))return Promise$1.reject();var promise=(!1!==animate$$1&&this.hasAnimation?this.hasTransition?this._toggleHeight:this._toggleAnimation:this._toggleImmediate)(el,show);return trigger(el,show?"show":"hide",[this]),promise.then(function(){trigger(el,show?"shown":"hidden",[this$1]),this$1.$update(el)})},_toggle:function(el,toggled){var changed;el&&(this.cls?(changed=includes(this.cls," ")||Boolean(toggled)!==hasClass(el,this.cls))&&toggleClass(el,this.cls,includes(this.cls," ")?void 0:toggled):(changed=Boolean(toggled)===hasAttr(el,"hidden"))&&attr(el,"hidden",toggled?null:""),$$("[autofocus]",el).some(function(el){return isVisible(el)&&(el.focus()||!0)}),this.updateAria(el),changed&&this.$update(el))},_toggleImmediate:function(el,show){return this._toggle(el,show),Promise$1.resolve()},_toggleHeight:function(el,show){var this$1=this,inProgress=Transition.inProgress(el),inner=el.hasChildNodes?toFloat(css(el.firstElementChild,"marginTop"))+toFloat(css(el.lastElementChild,"marginBottom")):0,currentHeight=isVisible(el)?height(el)+(inProgress?0:inner):0;Transition.cancel(el),this.isToggled(el)||this._toggle(el,!0),height(el,""),fastdom.flush();var endHeight=height(el)+(inProgress?0:inner);return height(el,currentHeight),(show?Transition.start(el,assign({},this.initProps,{overflow:"hidden",height:endHeight}),Math.round(this.duration*(1-currentHeight/endHeight)),this.transition):Transition.start(el,this.hideProps,Math.round(this.duration*(currentHeight/endHeight)),this.transition).then(function(){return this$1._toggle(el,!1)})).then(function(){return css(el,this$1.initProps)})},_toggleAnimation:function(el,show){var this$1=this;return Animation.cancel(el),show?(this._toggle(el,!0),Animation.in(el,this.animation[0],this.duration,this.origin)):Animation.out(el,this.animation[1]||this.animation[0],this.duration,this.origin).then(function(){return this$1._toggle(el,!1)})}}},Accordion={mixins:[Class,Togglable],props:{targets:String,active:null,collapsible:Boolean,multiple:Boolean,toggle:String,content:String,transition:String},data:{targets:"> *",active:!1,animation:[!0],collapsible:!0,multiple:!1,clsOpen:"uk-open",toggle:"> .uk-accordion-title",content:"> .uk-accordion-content",transition:"ease"},computed:{items:function(ref,$el){return $$(ref.targets,$el)}},events:[{name:"click",delegate:function(){return this.targets+" "+this.$props.toggle},handler:function(e){e.preventDefault(),this.toggle(index($$(this.targets+" "+this.$props.toggle,this.$el),e.current))}}],connected:function(){if(!1!==this.active){var active=this.items[Number(this.active)];active&&!hasClass(active,this.clsOpen)&&this.toggle(active,!1)}},update:function(){var this$1=this;this.items.forEach(function(el){return this$1._toggleImmediate($(this$1.content,el),hasClass(el,this$1.clsOpen))});var active=!this.collapsible&&!hasClass(this.items,this.clsOpen)&&this.items[0];active&&this.toggle(active,!1)},methods:{toggle:function(item,animate$$1){var this$1=this,index$$1=getIndex(item,this.items),active=filter(this.items,"."+this.clsOpen);(item=this.items[index$$1])&&[item].concat(!this.multiple&&!includes(active,item)&&active||[]).forEach(function(el){var isItem=el===item,state=isItem&&!hasClass(el,this$1.clsOpen);if(state||!isItem||this$1.collapsible||!(active.length<2)){toggleClass(el,this$1.clsOpen,state);var content=el._wrapper?el._wrapper.firstElementChild:$(this$1.content,el);el._wrapper||(el._wrapper=wrapAll(content,"<div>"),attr(el._wrapper,"hidden",state?"":null)),this$1._toggleImmediate(content,!0),this$1.toggleElement(el._wrapper,state,animate$$1).then(function(){hasClass(el,this$1.clsOpen)===state&&(state||this$1._toggleImmediate(content,!1),el._wrapper=null,unwrap(content))})}})}}},Alert={attrs:!0,mixins:[Class,Togglable],args:"animation",props:{close:String},data:{animation:[!0],selClose:".uk-alert-close",duration:150,hideProps:assign({opacity:0},Togglable.data.hideProps)},events:[{name:"click",delegate:function(){return this.selClose},handler:function(e){e.preventDefault(),this.close()}}],methods:{close:function(){var this$1=this;this.toggleElement(this.$el).then(function(){return this$1.$destroy(!0)})}}};function Core(UIkit){ready(function(){var scroll=0,started=0;if(on(window,"load resize",function(e){return UIkit.update(null,e)}),on(window,"scroll",function(e){e.dir=scroll<=window.pageYOffset?"down":"up",e.pageYOffset=scroll=window.pageYOffset,UIkit.update(null,e)},{capture:!0,passive:!1}),on(document,"animationstart",function(ref){var target=ref.target;(css(target,"animationName")||"").match(/^uk-.*(left|right)/)&&(started++,css(document.body,"overflowX","hidden"),setTimeout(function(){--started||css(document.body,"overflowX","")},toMs(css(target,"animationDuration"))+100))},!0),hasTouch){var cls="uk-hover";on(document,"tap",function(ref){var target=ref.target;return $$("."+cls).forEach(function(el){return!within(target,el)&&removeClass(el,cls)})}),Object.defineProperty(UIkit,"hoverSelector",{set:function(selector){on(document,"tap",selector,function(ref){return addClass(ref.current,cls)})}}),UIkit.hoverSelector=".uk-animation-toggle, .uk-transition-toggle, [uk-hover]"}})}var active,registered,Video={args:"autoplay",props:{automute:Boolean,autoplay:Boolean},data:{automute:!1,autoplay:!0},computed:{inView:function(ref){return"inview"===ref.autoplay}},connected:function(){this.inView&&!hasAttr(this.$el,"preload")&&(this.$el.preload="none")},ready:function(){this.player=new Player(this.$el),this.automute&&this.player.mute()},update:[{read:function(_,ref){var type=ref.type;return!(!this.player||!("scroll"!==type&&"resize"!==type||this.inView))&&{visible:isVisible(this.$el)&&"hidden"!==css(this.$el,"visibility"),inView:this.inView&&isInView(this.$el)}},write:function(ref){var visible=ref.visible,inView=ref.inView;!visible||this.inView&&!inView?this.player.pause():(!0===this.autoplay||this.inView&&inView)&&this.player.play()},events:["load","resize","scroll"]}]},Cover={mixins:[Class,Video],props:{width:Number,height:Number},data:{automute:!0},update:{write:function(){var el=this.$el;if(isVisible(el)){var ref=el.parentNode,height$$1=ref.offsetHeight,width$$1=ref.offsetWidth;css(css(el,{width:"",height:""}),Dimensions.cover({width:this.width||el.clientWidth,height:this.height||el.clientHeight},{width:width$$1+(width$$1%2?1:0),height:height$$1+(height$$1%2?1:0)}))}},events:["load","resize"]},events:{loadedmetadata:function(){this.$emit()}}},Position={props:{pos:String,offset:null,flip:Boolean,clsPos:String},data:{pos:"bottom-"+(isRtl?"right":"left"),flip:!0,offset:!1,clsPos:""},computed:{pos:function(ref){var pos=ref.pos;return(pos+(includes(pos,"-")?"":"-center")).split("-")},dir:function(){return this.pos[0]},align:function(){return this.pos[1]}},methods:{positionAt:function(element,target,boundary){var node;removeClasses(element,this.clsPos+"-(top|bottom|left|right)(-[a-z]+)?"),css(element,{top:"",left:""});var offset$$1=this.offset;offset$$1=isNumeric(offset$$1)?offset$$1:(node=$(offset$$1))?offset(node)["x"===axis?"left":"top"]-offset(target)["x"===axis?"right":"bottom"]:0;var axis=this.getAxis(),ref$1=positionAt(element,target,"x"===axis?flipPosition(this.dir)+" "+this.align:this.align+" "+flipPosition(this.dir),"x"===axis?this.dir+" "+this.align:this.align+" "+this.dir,"x"===axis?""+("left"===this.dir?-offset$$1:offset$$1):" "+("top"===this.dir?-offset$$1:offset$$1),null,this.flip,boundary).target,x=ref$1.x,y=ref$1.y;this.dir="x"===axis?x:y,this.align="x"===axis?y:x,toggleClass(element,this.clsPos+"-"+this.dir+"-"+this.align,!1===this.offset)},getAxis:function(){return"top"===this.dir||"bottom"===this.dir?"y":"x"}}},Drop={mixins:[Position,Togglable],args:"pos",props:{mode:"list",toggle:Boolean,boundary:Boolean,boundaryAlign:Boolean,delayShow:Number,delayHide:Number,clsDrop:String},data:{mode:["click","hover"],toggle:"- *",boundary:window,boundaryAlign:!1,delayShow:0,delayHide:800,clsDrop:!1,hoverIdle:200,animation:["uk-animation-fade"],cls:"uk-open"},computed:{boundary:function(ref,$el){return query(ref.boundary,$el)},clsDrop:function(ref){return ref.clsDrop||"uk-"+this.$options.name},clsPos:function(){return this.clsDrop}},init:function(){this.tracker=new MouseTracker},connected:function(){addClass(this.$el,this.clsDrop);var toggle=this.$props.toggle;this.toggle=toggle&&this.$create("toggle",query(toggle,this.$el),{target:this.$el,mode:this.mode}),this.updateAria(this.$el)},events:[{name:"click",delegate:function(){return"."+this.clsDrop+"-close"},handler:function(e){e.preventDefault(),this.hide(!1)}},{name:"click",delegate:function(){return'a[href^="#"]'},handler:function(e){if(!e.defaultPrevented){var id=e.target.hash;id||e.preventDefault(),id&&within(id,this.$el)||this.hide(!1)}}},{name:"beforescroll",handler:function(){this.hide(!1)}},{name:"toggle",self:!0,handler:function(e,toggle){e.preventDefault(),this.isToggled()?this.hide(!1):this.show(toggle,!1)}},{name:pointerEnter,filter:function(){return includes(this.mode,"hover")},handler:function(e){isTouch(e)||(active&&active!==this&&active.toggle&&includes(active.toggle.mode,"hover")&&!within(e.target,active.toggle.$el)&&!pointInRect({x:e.pageX,y:e.pageY},offset(active.$el))&&active.hide(!1),e.preventDefault(),this.show(this.toggle))}},{name:"toggleshow",handler:function(e,toggle){toggle&&!includes(toggle.target,this.$el)||(e.preventDefault(),this.show(toggle||this.toggle))}},{name:"togglehide "+pointerLeave,handler:function(e,toggle){isTouch(e)||toggle&&!includes(toggle.target,this.$el)||(e.preventDefault(),this.toggle&&includes(this.toggle.mode,"hover")&&this.hide())}},{name:"beforeshow",self:!0,handler:function(){this.clearTimers(),Animation.cancel(this.$el),this.position()}},{name:"show",self:!0,handler:function(){this.tracker.init(),this.toggle&&(addClass(this.toggle.$el,this.cls),attr(this.toggle.$el,"aria-expanded","true")),function(){if(registered)return;registered=!0,on(document,"click",function(ref){var prev,target=ref.target,defaultPrevented=ref.defaultPrevented;if(!defaultPrevented)for(;active&&active!==prev&&!within(target,active.$el)&&(!active.toggle||!within(target,active.toggle.$el));)prev=active,active.hide(!1)})}()}},{name:"beforehide",self:!0,handler:function(){this.clearTimers()}},{name:"hide",handler:function(ref){var target=ref.target;this.$el===target?(active=this.isActive()?null:active,this.toggle&&(removeClass(this.toggle.$el,this.cls),attr(this.toggle.$el,"aria-expanded","false"),this.toggle.$el.blur(),$$("a, button",this.toggle.$el).forEach(function(el){return el.blur()})),this.tracker.cancel()):active=null===active&&within(target,this.$el)&&this.isToggled()?this:active}}],update:{write:function(){this.isToggled()&&!Animation.inProgress(this.$el)&&this.position()},events:["resize"]},methods:{show:function(toggle,delay){var this$1=this;void 0===delay&&(delay=!0);var show=function(){return!this$1.isToggled()&&this$1.toggleElement(this$1.$el,!0)},tryShow=function(){if(this$1.toggle=toggle||this$1.toggle,this$1.clearTimers(),!this$1.isActive())if(delay&&active&&active!==this$1&&active.isDelaying)this$1.showTimer=setTimeout(this$1.show,10);else{if(this$1.isParentOf(active)){if(!active.hideTimer)return;active.hide(!1)}else if(active&&!this$1.isChildOf(active)&&!this$1.isParentOf(active))for(var prev;active&&active!==prev&&!this$1.isChildOf(active);)prev=active,active.hide(!1);delay&&this$1.delayShow?this$1.showTimer=setTimeout(show,this$1.delayShow):show(),active=this$1}};toggle&&this.toggle&&toggle.$el!==this.toggle.$el?(once(this.$el,"hide",tryShow),this.hide(!1)):tryShow()},hide:function(delay){var this$1=this;void 0===delay&&(delay=!0);var hide=function(){return this$1.toggleNow(this$1.$el,!1)};this.clearTimers(),this.isDelaying=this.tracker.movesTo(this.$el),delay&&this.isDelaying?this.hideTimer=setTimeout(this.hide,this.hoverIdle):delay&&this.delayHide?this.hideTimer=setTimeout(hide,this.delayHide):hide()},clearTimers:function(){clearTimeout(this.showTimer),clearTimeout(this.hideTimer),this.showTimer=null,this.hideTimer=null,this.isDelaying=!1},isActive:function(){return active===this},isChildOf:function(drop){return drop&&drop!==this&&within(this.$el,drop.$el)},isParentOf:function(drop){return drop&&drop!==this&&within(drop.$el,this.$el)},position:function(){removeClasses(this.$el,this.clsDrop+"-(stack|boundary)"),css(this.$el,{top:"",left:"",display:"block"}),toggleClass(this.$el,this.clsDrop+"-boundary",this.boundaryAlign);var boundary=offset(this.boundary),alignTo=this.boundaryAlign?boundary:offset(this.toggle.$el);if("justify"===this.align){var prop="y"===this.getAxis()?"width":"height";css(this.$el,prop,alignTo[prop])}else this.$el.offsetWidth>Math.max(boundary.right-alignTo.left,alignTo.right-boundary.left)&&addClass(this.$el,this.clsDrop+"-stack");this.positionAt(this.$el,this.boundaryAlign?this.boundary:this.toggle.$el,this.boundary),css(this.$el,"display","")}}};var Dropdown={extends:Drop},FormCustom={mixins:[Class],args:"target",props:{target:Boolean},data:{target:!1},computed:{input:function(_,$el){return $(selInput,$el)},state:function(){return this.input.nextElementSibling},target:function(ref,$el){var target=ref.target;return target&&(!0===target&&this.input.parentNode===$el&&this.input.nextElementSibling||query(target,$el))}},update:function(){var target=this.target,input=this.input;if(target){var option,prop=isInput(target)?"value":"textContent",prev=target[prop],value=input.files&&input.files[0]?input.files[0].name:matches(input,"select")&&(option=$$("option",input).filter(function(el){return el.selected})[0])?option.textContent:input.value;prev!==value&&(target[prop]=value)}},events:[{name:"focusin focusout mouseenter mouseleave",delegate:selInput,handler:function(ref){var type=ref.type;ref.current===this.input&&toggleClass(this.state,"uk-"+(includes(type,"focus")?"focus":"hover"),includes(["focusin","mouseenter"],type))}},{name:"change",handler:function(){this.$emit()}}]},Gif={update:{read:function(data$$1){var inview=isInView(this.$el);if(!inview||data$$1.isInView===inview)return!1;data$$1.isInView=inview},write:function(){this.$el.src=this.$el.src},events:["scroll","load","resize"]}},Margin={props:{margin:String,firstColumn:Boolean},data:{margin:"uk-margin-small-top",firstColumn:"uk-first-column"},update:{read:function(data$$1){var items=this.$el.children;if(!items.length||!isVisible(this.$el))return data$$1.rows=[[]];data$$1.rows=getRows(items),data$$1.stacks=!data$$1.rows.some(function(row){return row.length>1})},write:function(ref){var this$1=this;ref.rows.forEach(function(row,i){return row.forEach(function(el,j){toggleClass(el,this$1.margin,0!==i),toggleClass(el,this$1.firstColumn,0===j)})})},events:["load","resize"]}};function getRows(items){for(var rows=[[]],i=0;i<items.length;i++){var el=items[i],dim=getOffset(el);if(dim.height)for(var j=rows.length-1;j>=0;j--){var row=rows[j];if(!row[0]){row.push(el);break}var leftDim=getOffset(row[0]);if(dim.top>=leftDim.bottom-1){rows.push([el]);break}if(dim.bottom>leftDim.top){if(dim.left<leftDim.left&&!isRtl){row.unshift(el);break}row.push(el);break}if(0===j){rows.unshift([el]);break}}}return rows}function getOffset(element){var offsetTop=element.offsetTop,offsetLeft=element.offsetLeft,offsetHeight=element.offsetHeight;return{top:offsetTop,left:offsetLeft,height:offsetHeight,bottom:offsetTop+offsetHeight}}var Grid={extends:Margin,mixins:[Class],attrs:!0,name:"grid",props:{masonry:Boolean,parallax:Number},data:{margin:"uk-grid-margin",clsStack:"uk-grid-stack",masonry:!1,parallax:0},computed:{parallax:function(ref){var parallax=ref.parallax;return Math.abs(parallax)}},connected:function(){this.masonry&&addClass(this.$el,"uk-flex-top uk-flex-wrap-top")},update:[{read:function(ref){var rows=ref.rows;(this.masonry||this.parallax)&&(rows=rows.map(function(elements){return sortBy(elements,"offsetLeft")}));var root,cls,nodes,node,translates=!1,elHeight=!1;if(this.masonry){var height$$1=0;translates=rows.reduce(function(translates,row,i){return translates[i]=row.map(function(_,j){return 0===i?0:toFloat(translates[i-1][j])+(height$$1-toFloat(rows[i-1][j]&&rows[i-1][j].offsetHeight))}),height$$1=row.reduce(function(height$$1,el){return Math.max(height$$1,el.offsetHeight)},0),translates},[]),elHeight=function(rows){return Math.max.apply(Math,rows.reduce(function(sum,row){return row.forEach(function(el,i){return sum[i]=(sum[i]||0)+el.offsetHeight}),sum},[]))}(rows)+(root=this.$el,cls=this.margin,nodes=toNodes(root.children),toFloat((node=nodes.filter(function(el){return hasClass(el,cls)})[0])?css(node,"marginTop"):css(nodes[0],"paddingLeft"))*(rows.length-1))}return{rows:rows,translates:translates,height:elHeight}},write:function(ref){var rows=ref.rows,stacks=ref.stacks,height$$1=ref.height;toggleClass(this.$el,this.clsStack,stacks),css(this.$el,"paddingBottom",this.parallax&&rows.some(function(row){return row.length>1})?this.parallax:""),height$$1&&css(this.$el,"minHeight",height$$1)},events:["load","resize"]},{read:function(ref){var rows=ref.rows,height$$1=ref.height;return{scrolled:!(!this.parallax||!rows.some(function(row){return row.length>1}))&&scrolledOver(this.$el,height$$1?height$$1-height(this.$el):0)*this.parallax}},write:function(ref){var rows=ref.rows,scrolled=ref.scrolled,translates=ref.translates;(!1!==scrolled||translates)&&rows.forEach(function(row,i){return row.forEach(function(el,j){return css(el,"transform",scrolled||translates?"translateY("+((translates&&-translates[i][j])+(scrolled?j%2?scrolled:scrolled/8:0))+"px)":"")})})},events:["scroll","load","resize"]}]};var HeightMatch={args:"target",props:{target:String,row:Boolean},data:{target:"> *",row:!0},computed:{elements:function(ref,$el){return $$(ref.target,$el)}},update:{read:function(){var this$1=this;return css(this.elements,{minHeight:"",boxSizing:""}),{rows:this.row?getRows(this.elements).map(function(elements){return this$1.match(elements)}):[this.match(this.elements)]}},write:function(ref){ref.rows.forEach(function(ref){var height$$1=ref.height;return css(ref.elements,{minHeight:height$$1,boxSizing:"border-box"})})},events:["load","resize"]},methods:{match:function(elements){if(elements.length<2)return{};var heights=[],max=0;return elements.forEach(function(el){var height$$1=offset(el).height;max=Math.max(max,height$$1),heights.push(height$$1)}),elements=elements.filter(function(el,i){return heights[i]<max}),{height:max,elements:elements}}}},HeightViewport={props:{expand:Boolean,offsetTop:Boolean,offsetBottom:Boolean,minHeight:Number},data:{expand:!1,offsetTop:!1,offsetBottom:!1,minHeight:0},update:{write:function(){css(this.$el,"boxSizing","border-box");var minHeight,viewport=height(window),offsetTop=0;if(this.expand){css(this.$el,{height:"",minHeight:""});var diff=viewport-offsetHeight(document.documentElement);diff>0&&(minHeight=offsetHeight(this.$el)+diff)}else{var top=offset(this.$el).top;top<viewport/2&&this.offsetTop&&(offsetTop+=top),!0===this.offsetBottom?offsetTop+=offsetHeight(this.$el.nextElementSibling):isNumeric(this.offsetBottom)?offsetTop+=viewport/100*this.offsetBottom:this.offsetBottom&&endsWith(this.offsetBottom,"px")?offsetTop+=toFloat(this.offsetBottom):isString(this.offsetBottom)&&(offsetTop+=offsetHeight(query(this.offsetBottom,this.$el))),minHeight=offsetTop?"calc(100vh - "+offsetTop+"px)":"100vh"}if(minHeight){css(this.$el,{height:"",minHeight:minHeight});var elHeight=this.$el.offsetHeight;this.minHeight&&this.minHeight>elHeight&&css(this.$el,"minHeight",this.minHeight),viewport-offsetTop>=elHeight&&css(this.$el,"height",minHeight)}},events:["load","resize"]}};function offsetHeight(el){return el&&el.offsetHeight||0}var svgs={},SVG={attrs:!0,props:{id:String,icon:String,src:String,style:String,width:Number,height:Number,ratio:Number,class:String},data:{ratio:1,id:!1,exclude:["ratio","src","icon"],class:""},connected:function(){var assign$$1,this$1=this;if(this.class+=" uk-svg",!this.icon&&includes(this.src,"#")){var parts=this.src.split("#");parts.length>1&&(assign$$1=parts,this.src=assign$$1[0],this.icon=assign$$1[1])}this.svg=this.getSvg().then(function(svg){var el;if(isString(svg)?(this$1.icon&&includes(svg,"<symbol")&&(svg=function(svg,icon){if(!symbols[svg]){var match;for(symbols[svg]={};match=symbolRe.exec(svg);)symbols[svg][match[3]]='<svg xmlns="http://www.w3.org/2000/svg"'+match[1]+"svg>";symbolRe.lastIndex=0}return symbols[svg][icon]}(svg,this$1.icon)||svg),el=$(svg.substr(svg.indexOf("<svg")))):el=svg.cloneNode(!0),!el)return Promise$1.reject("SVG not found.");var dimensions=attr(el,"viewBox");for(var prop in dimensions&&(dimensions=dimensions.split(" "),this$1.width=this$1.$props.width||dimensions[2],this$1.height=this$1.$props.height||dimensions[3]),this$1.width*=this$1.ratio,this$1.height*=this$1.ratio,this$1.$options.props)this$1[prop]&&!includes(this$1.exclude,prop)&&attr(el,prop,this$1[prop]);this$1.id||removeAttr(el,"id"),this$1.width&&!this$1.height&&removeAttr(el,"height"),this$1.height&&!this$1.width&&removeAttr(el,"width");var root=this$1.$el;if(isVoidElement(root)||"CANVAS"===root.tagName){attr(root,{hidden:!0,id:null});var next=root.nextElementSibling;next&&el.isEqualNode(next)?el=next:after(root,el)}else{var last=root.lastElementChild;last&&el.isEqualNode(last)?el=last:append(root,el)}return this$1.svgEl=el,el},noop)},disconnected:function(){var this$1=this;isVoidElement(this.$el)&&attr(this.$el,{hidden:null,id:this.id||null}),this.svg&&this.svg.then(function(svg){return(!this$1._connected||svg!==this$1.svgEl)&&remove(svg)},noop),this.svg=this.svgEl=null},methods:{getSvg:function(){var this$1=this;return this.src?svgs[this.src]?svgs[this.src]:(svgs[this.src]=new Promise$1(function(resolve,reject){startsWith(this$1.src,"data:")?resolve(decodeURIComponent(this$1.src.split(",")[1])):ajax(this$1.src).then(function(xhr){return resolve(xhr.response)},function(){return reject("SVG not found.")})}),svgs[this.src]):Promise$1.reject()}}},symbolRe=/<symbol(.*?id=(['"])(.*?)\2[^]*?<\/)symbol>/g,symbols={};var parsed={},icons={spinner:'<svg width="30" height="30" viewBox="0 0 30 30" xmlns="http://www.w3.org/2000/svg"><circle fill="none" stroke="#000" cx="15" cy="15" r="14"/></svg>',totop:'<svg width="18" height="10" viewBox="0 0 18 10" xmlns="http://www.w3.org/2000/svg"><polyline fill="none" stroke="#000" stroke-width="1.2" points="1 9 9 1 17 9 "/></svg>',marker:'<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"><rect x="9" y="4" width="1" height="11"/><rect x="4" y="9" width="11" height="1"/></svg>',"close-icon":'<svg width="14" height="14" viewBox="0 0 14 14" xmlns="http://www.w3.org/2000/svg"><line fill="none" stroke="#000" stroke-width="1.1" x1="1" y1="1" x2="13" y2="13"/><line fill="none" stroke="#000" stroke-width="1.1" x1="13" y1="1" x2="1" y2="13"/></svg>',"close-large":'<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"><line fill="none" stroke="#000" stroke-width="1.4" x1="1" y1="1" x2="19" y2="19"/><line fill="none" stroke="#000" stroke-width="1.4" x1="19" y1="1" x2="1" y2="19"/></svg>',"navbar-toggle-icon":'<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"><rect y="9" width="20" height="2"/><rect y="3" width="20" height="2"/><rect y="15" width="20" height="2"/></svg>',"overlay-icon":'<svg width="40" height="40" viewBox="0 0 40 40" xmlns="http://www.w3.org/2000/svg"><rect x="19" y="0" width="1" height="40"/><rect x="0" y="19" width="40" height="1"/></svg>',"pagination-next":'<svg width="7" height="12" viewBox="0 0 7 12" xmlns="http://www.w3.org/2000/svg"><polyline fill="none" stroke="#000" stroke-width="1.2" points="1 1 6 6 1 11"/></svg>',"pagination-previous":'<svg width="7" height="12" viewBox="0 0 7 12" xmlns="http://www.w3.org/2000/svg"><polyline fill="none" stroke="#000" stroke-width="1.2" points="6 1 1 6 6 11"/></svg>',"search-icon":'<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"><circle fill="none" stroke="#000" stroke-width="1.1" cx="9" cy="9" r="7"/><path fill="none" stroke="#000" stroke-width="1.1" d="M14,14 L18,18 L14,14 Z"/></svg>',"search-large":'<svg width="40" height="40" viewBox="0 0 40 40" xmlns="http://www.w3.org/2000/svg"><circle fill="none" stroke="#000" stroke-width="1.8" cx="17.5" cy="17.5" r="16.5"/><line fill="none" stroke="#000" stroke-width="1.8" x1="38" y1="39" x2="29" y2="30"/></svg>',"search-navbar":'<svg width="24" height="24" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><circle fill="none" stroke="#000" stroke-width="1.1" cx="10.5" cy="10.5" r="9.5"/><line fill="none" stroke="#000" stroke-width="1.1" x1="23" y1="23" x2="17" y2="17"/></svg>',"slidenav-next":'<svg width="14px" height="24px" viewBox="0 0 14 24" xmlns="http://www.w3.org/2000/svg"><polyline fill="none" stroke="#000" stroke-width="1.4" points="1.225,23 12.775,12 1.225,1 "/></svg>',"slidenav-next-large":'<svg width="25px" height="40px" viewBox="0 0 25 40" xmlns="http://www.w3.org/2000/svg"><polyline fill="none" stroke="#000" stroke-width="2" points="4.002,38.547 22.527,20.024 4,1.5 "/></svg>',"slidenav-previous":'<svg width="14px" height="24px" viewBox="0 0 14 24" xmlns="http://www.w3.org/2000/svg"><polyline fill="none" stroke="#000" stroke-width="1.4" points="12.775,1 1.225,12 12.775,23 "/></svg>',"slidenav-previous-large":'<svg width="25px" height="40px" viewBox="0 0 25 40" xmlns="http://www.w3.org/2000/svg"><polyline fill="none" stroke="#000" stroke-width="2" points="20.527,1.5 2,20.024 20.525,38.547 "/></svg>'},Icon={install:function(UIkit){UIkit.icon.add=function(name,svg){var obj,added=isString(name)?((obj={})[name]=svg,obj):name;each(added,function(svg,name){icons[name]=svg,delete parsed[name]}),UIkit._initialized&&apply(document.body,function(el){return each(UIkit.getComponents(el),function(cmp){return cmp.$options.isIcon&&cmp.icon in added&&cmp.$reset()})})}},attrs:["icon","ratio"],mixins:[Class,SVG],args:"icon",props:["icon"],data:{exclude:["id","style","class","src","icon","ratio"]},isIcon:!0,connected:function(){addClass(this.$el,"uk-icon")},methods:{getSvg:function(){var icon=function(icon){if(!icons[icon])return null;parsed[icon]||(parsed[icon]=$(icons[icon].trim()));return parsed[icon]}(function(icon){return isRtl?swap(swap(icon,"left","right"),"previous","next"):icon}(this.icon));return icon?Promise$1.resolve(icon):Promise$1.reject("Icon not found.")}}},IconComponent={extends:Icon,data:function(vm){return{icon:hyphenate(vm.constructor.options.name)}}},Slidenav={extends:IconComponent,connected:function(){addClass(this.$el,"uk-slidenav")},computed:{icon:function(ref,$el){var icon=ref.icon;return hasClass($el,"uk-slidenav-large")?icon+"-large":icon}}},Search={extends:IconComponent,computed:{icon:function(ref,$el){var icon=ref.icon;return hasClass($el,"uk-search-icon")&&parents($el,".uk-search-large").length?"search-large":parents($el,".uk-search-navbar").length?"search-navbar":icon}}},Close={extends:IconComponent,computed:{icon:function(){return"close-"+(hasClass(this.$el,"uk-close-large")?"large":"icon")}}},Spinner={extends:IconComponent,connected:function(){var this$1=this;this.svg.then(function(svg){return 1!==this$1.ratio&&css($("circle",svg),"strokeWidth",1/this$1.ratio)},noop)}};var Img={attrs:!0,props:{dataSrc:String,dataSrcset:Boolean,dataSizes:Boolean,sizes:String,width:Number,height:Number,dataWidth:Number,dataHeight:Number,offsetTop:String,offsetLeft:String,target:String},data:{dataSrc:"",dataSrcset:!1,dataSizes:!1,sizes:!1,width:!1,height:!1,offsetTop:"50vh",offsetLeft:0,target:!1},computed:{cacheKey:function(ref){var dataSrc=ref.dataSrc;return this.$name+"."+dataSrc},width:function(ref){var width$$1=ref.width,dataWidth=ref.dataWidth;return width$$1||dataWidth},height:function(ref){var height$$1=ref.height,dataHeight=ref.dataHeight;return height$$1||dataHeight},sizes:function(ref){var sizes=ref.sizes,dataSizes=ref.dataSizes;return sizes||dataSizes},isImg:function(_,$el){return isImg($el)},target:function(ref){var target=ref.target;return[this.$el].concat(queryAll(target,this.$el))},offsetTop:function(ref){return toPx(ref.offsetTop,"height")},offsetLeft:function(ref){return toPx(ref.offsetLeft,"width")}},connected:function(){storage[this.cacheKey]?setSrcAttrs(this.$el,storage[this.cacheKey]||this.dataSrc,this.dataSrcset,this.sizes):this.isImg&&this.width&&this.height&&setSrcAttrs(this.$el,function(width$$1,height$$1,sizes,color){var assign$$1;void 0===color&&(color="transparent");if(sizes){for(var matches$$1;matches$$1=sizesRe.exec(sizes);)if(!matches$$1[1]||window.matchMedia(matches$$1[1]).matches){size=matches$$1[2],matches$$1=startsWith(size,"calc")?size.substring(5,size.length-1).replace(sizeRe,function(size){return toPx(size)}).replace(/ /g,"").match(additionRe).reduce(function(a,b){return a+ +b},0):size;break}sizesRe.lastIndex=0,assign$$1=Dimensions.ratio({width:width$$1,height:height$$1},"width",toPx(matches$$1||"100vw")),width$$1=assign$$1.width,height$$1=assign$$1.height}var size;var key=width$$1+"."+height$$1+"."+color;if(urlCache[key])return urlCache[key];var canvas=fragment("<canvas>");canvas.width=width$$1,canvas.height=height$$1;var context=canvas.getContext("2d");return context.fillStyle=color,context.fillRect(0,0,width$$1,height$$1),urlCache[key]=canvas.toDataURL("image/png")}(this.width,this.height,this.sizes))},update:[{read:function(ref){var this$1=this,delay=ref.delay,image=ref.image;if(delay){if(!image&&this.target.some(function(el){return isInView(el,this$1.offsetTop,this$1.offsetLeft,!0)}))return{image:getImage(this.dataSrc,this.dataSrcset,this.sizes).then(function(img){return setSrcAttrs(this$1.$el,currentSrc(img),img.srcset,img.sizes),storage[this$1.cacheKey]=currentSrc(img),img},noop)};!this.isImg&&image&&image.then(function(img){return img&&setSrcAttrs(this$1.$el,currentSrc(img))})}},write:function(data$$1){if(!data$$1.delay)return this.$emit(),data$$1.delay=!0},events:["scroll","load","resize"]}]};function setSrcAttrs(el,src,srcset,sizes){isImg(el)?(src&&(el.src=src),srcset&&(el.srcset=srcset),sizes&&(el.sizes=sizes)):src&&css(el,"backgroundImage","url("+src+")")}var urlCache={},sizesRe=/\s*(.*?)\s*(\w+|calc\(.*?\))\s*(?:,|$)/g;var sizeRe=/\d+(?:\w+|%)/g,additionRe=/[+-]?(\d+)/g;function toPx(value,property,element){return void 0===property&&(property="width"),void 0===element&&(element=window),isNumeric(value)?+value:endsWith(value,"vw")?percent(element,"width",value):endsWith(value,"vh")?percent(element,"height",value):endsWith(value,"%")?percent(element,property,value):toFloat(value)}var dimensions={height:height,width:width};function percent(element,property,value){return dimensions[property](element)*toFloat(value)/100}function isImg(el){return"IMG"===el.tagName}function currentSrc(el){return el.currentSrc||el.src}var storage;try{(storage=window.sessionStorage||{}).__test__=1,delete storage.__test__}catch(e){storage={}}var active$1,events,Leader={mixins:[Class],props:{fill:String,media:"media"},data:{fill:"",media:!1,clsWrapper:"uk-leader-fill",clsHide:"uk-leader-hide",attrFill:"data-fill"},computed:{fill:function(ref){return ref.fill||getCssVar("leader-fill")}},connected:function(){var assign$$1;assign$$1=wrapInner(this.$el,'<span class="'+this.clsWrapper+'">'),this.wrapper=assign$$1[0]},disconnected:function(){unwrap(this.wrapper.childNodes)},update:[{read:function(ref){var changed=ref.changed,width$$1=ref.width,prev=width$$1;return{width:width$$1=Math.floor(this.$el.offsetWidth/2),changed:changed||prev!==width$$1,hide:this.media&&!window.matchMedia(this.media).matches}},write:function(data$$1){toggleClass(this.wrapper,this.clsHide,data$$1.hide),data$$1.changed&&(data$$1.changed=!1,attr(this.wrapper,this.attrFill,new Array(data$$1.width).join(this.fill)))},events:["load","resize"]}]},Container={props:{container:Boolean},data:{container:!0},computed:{container:function(ref){var container=ref.container;return!0===container&&this.$container||container&&$(container)}}},Modal={mixins:[Class,Container,Togglable],props:{selPanel:String,selClose:String,escClose:Boolean,bgClose:Boolean,stack:Boolean},data:{cls:"uk-open",escClose:!0,bgClose:!0,overlay:!0,stack:!1},computed:{panel:function(ref,$el){return $(ref.selPanel,$el)},transitionElement:function(){return this.panel},transitionDuration:function(){return toMs(css(this.transitionElement,"transitionDuration"))},bgClose:function(ref){return ref.bgClose&&this.panel}},events:[{name:"click",delegate:function(){return this.selClose},handler:function(e){e.preventDefault(),this.hide()}},{name:"toggle",self:!0,handler:function(e){e.defaultPrevented||(e.preventDefault(),this.toggle())}},{name:"beforeshow",self:!0,handler:function(e){var prev=active$1&&active$1!==this&&active$1;if(active$1=this,prev){if(!this.stack)return prev.hide().then(this.show),void e.preventDefault();this.prev=prev}!function(){if(events)return;events=[on(document,"click",function(ref){var target=ref.target,defaultPrevented=ref.defaultPrevented;!active$1||!active$1.bgClose||defaultPrevented||active$1.overlay&&!within(target,active$1.$el)||within(target,active$1.panel)||active$1.hide()}),on(document,"keydown",function(e){27===e.keyCode&&active$1&&active$1.escClose&&(e.preventDefault(),active$1.hide())})]}()}},{name:"beforehide",self:!0,handler:function(){(active$1=active$1&&active$1!==this&&active$1||this.prev)||(events&&events.forEach(function(unbind){return unbind()}),events=null)}},{name:"show",self:!0,handler:function(){hasClass(document.documentElement,this.clsPage)||(this.scrollbarWidth=width(window)-width(document),css(document.body,"overflowY",this.scrollbarWidth&&this.overlay?"scroll":"")),addClass(document.documentElement,this.clsPage)}},{name:"hidden",self:!0,handler:function(){for(var found,prev=this.prev;prev;){if(prev.clsPage===this.clsPage){found=!0;break}prev=prev.prev}found||removeClass(document.documentElement,this.clsPage),!this.prev&&css(document.body,"overflowY","")}}],methods:{toggle:function(){return this.isToggled()?this.hide():this.show()},show:function(){return this.isToggled()?Promise$1.resolve():(this.container&&this.$el.parentNode!==this.container&&(append(this.container,this.$el),this._callConnected()),this.toggleNow(this.$el,!0))},hide:function(){return this.isToggled()?this.toggleNow(this.$el,!1):Promise$1.resolve()},getActive:function(){return active$1},_toggleImmediate:function(el,show){var this$1=this;return new Promise$1(function(resolve){return requestAnimationFrame(function(){this$1._toggle(el,show),this$1.transitionDuration?once(this$1.transitionElement,"transitionend",resolve,!1,function(e){return e.target===this$1.transitionElement}):resolve()})})}}};var Modal$1={install:function(UIkit){UIkit.modal.dialog=function(content,options){var dialog=UIkit.modal(' <div class="uk-modal"> <div class="uk-modal-dialog">'+content+"</div> </div> ",options);return dialog.show(),on(dialog.$el,"hidden",function(ref){var target=ref.target,currentTarget=ref.currentTarget;target===currentTarget&&dialog.$destroy(!0)}),dialog},UIkit.modal.alert=function(message,options){return options=assign({bgClose:!1,escClose:!1,labels:UIkit.modal.labels},options),new Promise$1(function(resolve){return on(UIkit.modal.dialog(' <div class="uk-modal-body">'+(isString(message)?message:html(message))+'</div> <div class="uk-modal-footer uk-text-right"> <button class="uk-button uk-button-primary uk-modal-close" autofocus>'+options.labels.ok+"</button> </div> ",options).$el,"hide",resolve)})},UIkit.modal.confirm=function(message,options){return options=assign({bgClose:!1,escClose:!0,labels:UIkit.modal.labels},options),new Promise$1(function(resolve,reject){var confirm=UIkit.modal.dialog(' <form> <div class="uk-modal-body">'+(isString(message)?message:html(message))+'</div> <div class="uk-modal-footer uk-text-right"> <button class="uk-button uk-button-default uk-modal-close" type="button">'+options.labels.cancel+'</button> <button class="uk-button uk-button-primary" autofocus>'+options.labels.ok+"</button> </div> </form> ",options),resolved=!1;on(confirm.$el,"submit","form",function(e){e.preventDefault(),resolve(),resolved=!0,confirm.hide()}),on(confirm.$el,"hide",function(){resolved||reject()})})},UIkit.modal.prompt=function(message,value,options){return options=assign({bgClose:!1,escClose:!0,labels:UIkit.modal.labels},options),new Promise$1(function(resolve){var prompt=UIkit.modal.dialog(' <form class="uk-form-stacked"> <div class="uk-modal-body"> <label>'+(isString(message)?message:html(message))+'</label> <input class="uk-input" autofocus> </div> <div class="uk-modal-footer uk-text-right"> <button class="uk-button uk-button-default uk-modal-close" type="button">'+options.labels.cancel+'</button> <button class="uk-button uk-button-primary">'+options.labels.ok+"</button> </div> </form> ",options),input=$("input",prompt.$el);input.value=value;var resolved=!1;on(prompt.$el,"submit","form",function(e){e.preventDefault(),resolve(input.value),resolved=!0,prompt.hide()}),on(prompt.$el,"hide",function(){resolved||resolve(null)})})},UIkit.modal.labels={ok:"Ok",cancel:"Cancel"}},mixins:[Modal],data:{clsPage:"uk-modal-page",selPanel:".uk-modal-dialog",selClose:".uk-modal-close, .uk-modal-close-default, .uk-modal-close-outside, .uk-modal-close-full"},events:[{name:"show",self:!0,handler:function(){hasClass(this.panel,"uk-margin-auto-vertical")?addClass(this.$el,"uk-flex"):css(this.$el,"display","block"),height(this.$el)}},{name:"hidden",self:!0,handler:function(){css(this.$el,"display",""),removeClass(this.$el,"uk-flex")}}]};var scroll,Nav={extends:Accordion,data:{targets:"> .uk-parent",toggle:"> a",content:"> ul"}},Navbar={mixins:[Class],props:{dropdown:String,mode:"list",align:String,offset:Number,boundary:Boolean,boundaryAlign:Boolean,clsDrop:String,delayShow:Number,delayHide:Number,dropbar:Boolean,dropbarMode:String,dropbarAnchor:Boolean,duration:Number},data:{dropdown:".uk-navbar-nav > li",align:isRtl?"right":"left",clsDrop:"uk-navbar-dropdown",mode:void 0,offset:void 0,delayShow:void 0,delayHide:void 0,boundaryAlign:void 0,flip:"x",boundary:!0,dropbar:!1,dropbarMode:"slide",dropbarAnchor:!1,duration:200},computed:{boundary:function(ref,$el){var boundary=ref.boundary,boundaryAlign=ref.boundaryAlign;return!0===boundary||boundaryAlign?$el:boundary},dropbarAnchor:function(ref,$el){return query(ref.dropbarAnchor,$el)},pos:function(ref){return"bottom-"+ref.align},dropdowns:function(ref,$el){return $$(ref.dropdown+" ."+ref.clsDrop,$el)}},beforeConnect:function(){var dropbar=this.$props.dropbar;this.dropbar=dropbar&&(query(dropbar,this.$el)||$("+ .uk-navbar-dropbar",this.$el)||$("<div></div>")),this.dropbar&&(addClass(this.dropbar,"uk-navbar-dropbar"),"slide"===this.dropbarMode&&addClass(this.dropbar,"uk-navbar-dropbar-slide"))},disconnected:function(){this.dropbar&&remove(this.dropbar)},update:function(){var this$1=this;this.$create("drop",this.dropdowns.filter(function(el){return!this$1.getDropdown(el)}),assign({},this.$props,{boundary:this.boundary,pos:this.pos,offset:this.dropbar||this.offset}))},events:[{name:"mouseover",delegate:function(){return this.dropdown},handler:function(ref){var current=ref.current,active=this.getActive();active&&active.toggle&&!within(active.toggle.$el,current)&&!active.tracker.movesTo(active.$el)&&active.hide(!1)}},{name:"mouseleave",el:function(){return this.dropbar},handler:function(){var active=this.getActive();active&&!matches(this.dropbar,":hover")&&active.hide()}},{name:"beforeshow",capture:!0,filter:function(){return this.dropbar},handler:function(){this.dropbar.parentNode||after(this.dropbarAnchor||this.$el,this.dropbar)}},{name:"show",capture:!0,filter:function(){return this.dropbar},handler:function(_,drop){var $el=drop.$el,dir=drop.dir;this.clsDrop&&addClass($el,this.clsDrop+"-dropbar"),"bottom"===dir&&this.transitionTo($el.offsetHeight+toFloat(css($el,"marginTop"))+toFloat(css($el,"marginBottom")),$el)}},{name:"beforehide",filter:function(){return this.dropbar},handler:function(e,ref){var $el=ref.$el,active=this.getActive();matches(this.dropbar,":hover")&&active&&active.$el===$el&&e.preventDefault()}},{name:"hide",filter:function(){return this.dropbar},handler:function(_,ref){var $el=ref.$el,active=this.getActive();(!active||active&&active.$el===$el)&&this.transitionTo(0)}}],methods:{getActive:function(){var active=this.dropdowns.map(this.getDropdown).filter(function(drop){return drop.isActive()})[0];return active&&includes(active.mode,"hover")&&within(active.toggle.$el,this.$el)&&active},transitionTo:function(newHeight,el){var dropbar=this.dropbar,oldHeight=isVisible(dropbar)?height(dropbar):0;return css(el=oldHeight<newHeight&&el,"clip","rect(0,"+el.offsetWidth+"px,"+oldHeight+"px,0)"),height(dropbar,oldHeight),Transition.cancel([el,dropbar]),Promise.all([Transition.start(dropbar,{height:newHeight},this.duration),Transition.start(el,{clip:"rect(0,"+el.offsetWidth+"px,"+newHeight+"px,0)"},this.duration)]).catch(noop).then(function(){return css(el,{clip:""})})},getDropdown:function(el){return this.$getComponent(el,"drop")||this.$getComponent(el,"dropdown")}}},Offcanvas={mixins:[Modal],args:"mode",props:{content:String,mode:String,flip:Boolean,overlay:Boolean},data:{content:".uk-offcanvas-content",mode:"slide",flip:!1,overlay:!1,clsPage:"uk-offcanvas-page",clsContainer:"uk-offcanvas-container",selPanel:".uk-offcanvas-bar",clsFlip:"uk-offcanvas-flip",clsContent:"uk-offcanvas-content",clsContentAnimation:"uk-offcanvas-content-animation",clsSidebarAnimation:"uk-offcanvas-bar-animation",clsMode:"uk-offcanvas",clsOverlay:"uk-offcanvas-overlay",selClose:".uk-offcanvas-close"},computed:{content:function(ref){return $(ref.content)||document.body},clsFlip:function(ref){var flip=ref.flip,clsFlip=ref.clsFlip;return flip?clsFlip:""},clsOverlay:function(ref){var overlay=ref.overlay,clsOverlay=ref.clsOverlay;return overlay?clsOverlay:""},clsMode:function(ref){var mode=ref.mode;return ref.clsMode+"-"+mode},clsSidebarAnimation:function(ref){var mode=ref.mode,clsSidebarAnimation=ref.clsSidebarAnimation;return"none"===mode||"reveal"===mode?"":clsSidebarAnimation},clsContentAnimation:function(ref){var mode=ref.mode,clsContentAnimation=ref.clsContentAnimation;return"push"!==mode&&"reveal"!==mode?"":clsContentAnimation},transitionElement:function(ref){return"reveal"===ref.mode?this.panel.parentNode:this.panel}},update:{write:function(){this.getActive()===this&&((this.overlay||this.clsContentAnimation)&&width(this.content,width(window)-this.scrollbarWidth),this.overlay&&(height(this.content,height(window)),scroll&&(this.content.scrollTop=scroll.y)))},events:["resize"]},events:[{name:"click",delegate:function(){return'a[href^="#"]'},handler:function(ref){var current=ref.current;current.hash&&$(current.hash,this.content)&&(scroll=null,this.hide())}},{name:"beforescroll",filter:function(){return this.overlay},handler:function(e,scroll,target){scroll&&target&&this.isToggled()&&$(target,this.content)&&(once(this.$el,"hidden",function(){return scroll.scrollTo(target)}),e.preventDefault())}},{name:"show",self:!0,handler:function(){scroll=scroll||{x:window.pageXOffset,y:window.pageYOffset},"reveal"!==this.mode||hasClass(this.panel,this.clsMode)||(wrapAll(this.panel,"<div>"),addClass(this.panel.parentNode,this.clsMode)),css(document.documentElement,"overflowY",(!this.clsContentAnimation||this.flip)&&this.scrollbarWidth&&this.overlay?"scroll":""),addClass(document.body,this.clsContainer,this.clsFlip,this.clsOverlay),height(document.body),addClass(this.content,this.clsContentAnimation),addClass(this.panel,this.clsSidebarAnimation,"reveal"!==this.mode?this.clsMode:""),addClass(this.$el,this.clsOverlay),css(this.$el,"display","block"),height(this.$el)}},{name:"hide",self:!0,handler:function(){removeClass(this.content,this.clsContentAnimation);var active=this.getActive();("none"===this.mode||active&&active!==this&&active!==this.prev)&&trigger(this.panel,"transitionend")}},{name:"hidden",self:!0,handler:function(){if("reveal"===this.mode&&unwrap(this.panel),this.overlay){if(!scroll){var ref=this.content,x=ref.scrollLeft,y=ref.scrollTop;scroll={x:x,y:y}}}else scroll={x:window.pageXOffset,y:window.pageYOffset};removeClass(this.panel,this.clsSidebarAnimation,this.clsMode),removeClass(this.$el,this.clsOverlay),css(this.$el,"display",""),removeClass(document.body,this.clsContainer,this.clsFlip,this.clsOverlay),document.body.scrollTop=scroll.y,css(document.documentElement,"overflowY",""),width(this.content,""),height(this.content,""),window.scroll(scroll.x,scroll.y),scroll=null}},{name:"swipeLeft swipeRight",handler:function(e){this.isToggled()&&isTouch(e)&&("swipeLeft"===e.type&&!this.flip||"swipeRight"===e.type&&this.flip)&&this.hide()}}]},OverflowAuto={mixins:[Class],computed:{modal:function(_,$el){return closest($el,".uk-modal")},panel:function(_,$el){return closest($el,".uk-modal-dialog")}},connected:function(){css(this.$el,"minHeight",150)},update:{write:function(){if(this.panel&&this.modal){var current=css(this.$el,"maxHeight");css(css(this.$el,"maxHeight",150),"maxHeight",Math.max(150,150+height(this.modal)-this.panel.offsetHeight)),current!==css(this.$el,"maxHeight")&&trigger(this.$el,"resize")}},events:["load","resize"]}},Responsive={props:["width","height"],connected:function(){addClass(this.$el,"uk-responsive-width")},update:{read:function(){return!!(isVisible(this.$el)&&this.width&&this.height)&&{width:width(this.$el.parentNode),height:this.height}},write:function(dim){height(this.$el,Dimensions.contain({height:this.height,width:this.width},dim).height)},events:["load","resize"]}},Scroll={props:{duration:Number,offset:Number},data:{duration:1e3,offset:0},methods:{scrollTo:function(el){var this$1=this;el=el&&$(el)||document.body;var docHeight=height(document),winHeight=height(window),target=offset(el).top-this.offset;if(target+winHeight>docHeight&&(target=docHeight-winHeight),trigger(this.$el,"beforescroll",[this,el])){var start=Date.now(),startY=window.pageYOffset,step=function(){var k,currentY=startY+(target-startY)*(k=clamp((Date.now()-start)/this$1.duration),.5*(1-Math.cos(Math.PI*k)));window.scroll(window.pageXOffset,currentY),currentY!==target?requestAnimationFrame(step):trigger(this$1.$el,"scrolled",[this$1,el])};step()}}},events:{click:function(e){e.defaultPrevented||(e.preventDefault(),this.scrollTo(escape(this.$el.hash).substr(1)))}}};var Scrollspy={args:"cls",props:{cls:"list",target:String,hidden:Boolean,offsetTop:Number,offsetLeft:Number,repeat:Boolean,delay:Number},data:function(){return{cls:[],target:!1,hidden:!0,offsetTop:0,offsetLeft:0,repeat:!1,delay:0,inViewClass:"uk-scrollspy-inview"}},computed:{elements:function(ref,$el){var target=ref.target;return target?$$(target,$el):[$el]}},update:[{write:function(){this.hidden&&css(filter(this.elements,":not(."+this.inViewClass+")"),"visibility","hidden")}},{read:function(els){var this$1=this;els.delay&&this.elements.forEach(function(el,i){var elData=els[i];if(!elData||elData.el!==el){var cls=data(el,"uk-scrollspy-class");elData={el:el,toggles:cls&&cls.split(",")||this$1.cls}}elData.show=isInView(el,this$1.offsetTop,this$1.offsetLeft),els[i]=elData})},write:function(els){var this$1=this;if(!els.delay)return this.$emit(),els.delay=!0;var index$$1=1===this.elements.length?1:0;this.elements.forEach(function(el,i){var elData=els[i],cls=elData.toggles[i]||elData.toggles[0];if(!elData.show||elData.inview||elData.timer)!elData.show&&elData.inview&&this$1.repeat&&(elData.timer&&(clearTimeout(elData.timer),delete elData.timer),css(el,"visibility",this$1.hidden?"hidden":""),removeClass(el,this$1.inViewClass),toggleClass(el,cls),trigger(el,"outview"),this$1.$update(el),elData.inview=!1);else{var show=function(){css(el,"visibility",""),addClass(el,this$1.inViewClass),toggleClass(el,cls),trigger(el,"inview"),this$1.$update(el),elData.inview=!0,delete elData.timer};this$1.delay&&index$$1?elData.timer=setTimeout(show,this$1.delay*index$$1):show(),index$$1++}})},events:["scroll","load","resize"]}]},ScrollspyNav={props:{cls:String,closest:String,scroll:Boolean,overflow:Boolean,offset:Number},data:{cls:"uk-active",closest:!1,scroll:!1,overflow:!0,offset:0},computed:{links:function(_,$el){return $$('a[href^="#"]',$el).filter(function(el){return el.hash})},elements:function(){return this.closest?closest(this.links,this.closest):this.links},targets:function(){return $$(this.links.map(function(el){return el.hash}).join(","))}},update:[{read:function(){this.scroll&&this.$create("scroll",this.links,{offset:this.offset||0})}},{read:function(data$$1){var this$1=this,scroll=window.pageYOffset+this.offset+1,max=height(document)-height(window)+this.offset;data$$1.active=!1,this.targets.every(function(el,i){var top=offset(el).top,last=i+1===this$1.targets.length;if(!this$1.overflow&&(0===i&&top>scroll||last&&top+el.offsetTop<scroll))return!1;if(!last&&offset(this$1.targets[i+1]).top<=scroll)return!0;if(scroll>=max)for(var j=this$1.targets.length-1;j>i;j--)if(isInView(this$1.targets[j])){el=this$1.targets[j];break}return!(data$$1.active=$(filter(this$1.links,'[href="#'+el.id+'"]')))})},write:function(ref){var active=ref.active;this.links.forEach(function(el){return el.blur()}),removeClass(this.elements,this.cls),active&&trigger(this.$el,"active",[active,addClass(this.closest?closest(active,this.closest):active,this.cls)])},events:["scroll","load","resize"]}]},Sticky={mixins:[Class],attrs:!0,props:{top:null,bottom:Boolean,offset:Number,animation:String,clsActive:String,clsInactive:String,clsFixed:String,clsBelow:String,selTarget:String,widthElement:Boolean,showOnUp:Boolean,media:"media",targetOffset:Number},data:{top:0,bottom:!1,offset:0,animation:"",clsActive:"uk-active",clsInactive:"",clsFixed:"uk-sticky-fixed",clsBelow:"uk-sticky-below",selTarget:"",widthElement:!1,showOnUp:!1,media:!1,targetOffset:!1},computed:{selTarget:function(ref,$el){var selTarget=ref.selTarget;return selTarget&&$(selTarget,$el)||$el},widthElement:function(ref,$el){return query(ref.widthElement,$el)||this.placeholder}},connected:function(){this.placeholder=$("+ .uk-sticky-placeholder",this.$el)||$('<div class="uk-sticky-placeholder"></div>'),this.isActive||this.hide()},disconnected:function(){this.isActive&&(this.isActive=!1,this.hide(),removeClass(this.selTarget,this.clsInactive)),remove(this.placeholder),this.placeholder=null,this.widthElement=null},events:[{name:"active",self:!0,handler:function(){replaceClass(this.selTarget,this.clsInactive,this.clsActive)}},{name:"inactive",self:!0,handler:function(){replaceClass(this.selTarget,this.clsActive,this.clsInactive)}},{name:"load hashchange popstate",el:window,handler:function(){var this$1=this;if(!1!==this.targetOffset&&location.hash&&window.pageYOffset>0){var target=$(location.hash);target&&fastdom.read(function(){var top=offset(target).top,elTop=offset(this$1.$el).top,elHeight=this$1.$el.offsetHeight;this$1.isActive&&elTop+elHeight>=top&&elTop<=top+target.offsetHeight&&window.scroll(0,top-elHeight-(isNumeric(this$1.targetOffset)?this$1.targetOffset:0)-this$1.offset)})}}}],update:[{write:function(){var placeholder=this.placeholder,offsetHeight=this.$el.offsetHeight;css(placeholder,assign({height:"absolute"!==css(this.$el,"position")?offsetHeight:""},css(this.$el,["marginTop","marginBottom","marginLeft","marginRight"]))),within(placeholder,document)||(after(this.$el,placeholder),attr(placeholder,"hidden","")),this.topOffset=offset(this.isActive?placeholder:this.$el).top,this.bottomOffset=this.topOffset+offsetHeight;var bottom=parseProp("bottom",this);this.top=Math.max(toFloat(parseProp("top",this)),this.topOffset)-this.offset,this.bottom=bottom&&bottom-offsetHeight,this.inactive=this.media&&!window.matchMedia(this.media).matches},events:["load","resize"]},{read:function(_,ref){var scrollY=ref.scrollY;return void 0===scrollY&&(scrollY=window.pageYOffset),this.width=(isVisible(this.widthElement)?this.widthElement:this.$el).offsetWidth,{scroll:this.scroll=scrollY,visible:isVisible(this.$el)}},write:function(ref,ref$1){var this$1=this,visible=ref.visible,scroll=ref.scroll;void 0===ref$1&&(ref$1={});var dir=ref$1.dir;if(!(scroll<0||!visible||this.disabled||this.showOnUp&&!dir))if(this.inactive||scroll<this.top||this.showOnUp&&(scroll<=this.top||"down"===dir||"up"===dir&&!this.isActive&&scroll<=this.bottomOffset)){if(!this.isActive)return;this.isActive=!1,this.animation&&scroll>this.topOffset?(Animation.cancel(this.$el),Animation.out(this.$el,this.animation).then(function(){return this$1.hide()},noop)):this.hide()}else this.isActive?this.update():this.animation?(Animation.cancel(this.$el),this.show(),Animation.in(this.$el,this.animation).catch(noop)):this.show()},events:["load","resize","scroll"]}],methods:{show:function(){this.isActive=!0,this.update(),attr(this.placeholder,"hidden",null)},hide:function(){this.isActive&&!hasClass(this.selTarget,this.clsActive)||trigger(this.$el,"inactive"),removeClass(this.$el,this.clsFixed,this.clsBelow),css(this.$el,{position:"",top:"",width:""}),attr(this.placeholder,"hidden","")},update:function(){var active=0!==this.top||this.scroll>this.top,top=Math.max(0,this.offset);this.bottom&&this.scroll>this.bottom-this.offset&&(top=this.bottom-this.scroll),css(this.$el,{position:"fixed",top:top+"px",width:this.width}),hasClass(this.selTarget,this.clsActive)?active||trigger(this.$el,"inactive"):active&&trigger(this.$el,"active"),toggleClass(this.$el,this.clsBelow,this.scroll>this.bottomOffset),addClass(this.$el,this.clsFixed)}}};function parseProp(prop,ref){var $props=ref.$props,$el=ref.$el,propOffset=ref[prop+"Offset"],value=$props[prop];if(value){if(isNumeric(value))return propOffset+toFloat(value);if(isString(value)&&value.match(/^-?\d+vh$/))return height(window)*toFloat(value)/100;var el=!0===value?$el.parentNode:query(value,$el);return el?offset(el).top+el.offsetHeight:void 0}}var Switcher={mixins:[Togglable],args:"connect",props:{connect:String,toggle:String,active:Number,swiping:Boolean},data:{connect:"~.uk-switcher",toggle:"> *",active:0,swiping:!0,cls:"uk-active",clsContainer:"uk-switcher",attrItem:"uk-switcher-item",queued:!0},computed:{connects:function(ref,$el){return queryAll(ref.connect,$el)},toggles:function(ref,$el){return $$(ref.toggle,$el)}},events:[{name:"click",delegate:function(){return this.toggle+":not(.uk-disabled)"},handler:function(e){e.preventDefault(),this.show(e.current)}},{name:"click",el:function(){return this.connects},delegate:function(){return"["+this.attrItem+"],[data-"+this.attrItem+"]"},handler:function(e){e.preventDefault(),this.show(data(e.current,this.attrItem))}},{name:"swipeRight swipeLeft",filter:function(){return this.swiping},el:function(){return this.connects},handler:function(e){isTouch(e)&&(e.preventDefault(),window.getSelection().toString()||this.show("swipeLeft"===e.type?"next":"previous"))}}],update:function(){var this$1=this;this.connects.forEach(function(list){return this$1.updateAria(list.children)}),this.show(filter(this.toggles,"."+this.cls)[0]||this.toggles[this.active]||this.toggles[0])},methods:{show:function(item){for(var toggle,this$1=this,length=this.toggles.length,prev=!!this.connects.length&&index(filter(this.connects[0].children,"."+this.cls)[0]),hasPrev=prev>=0,dir="previous"===item?-1:1,next=getIndex(item,this.toggles,prev),i=0;i<length;i++,next=(next+dir+length)%length)if(!matches(this$1.toggles[next],".uk-disabled, [disabled]")){toggle=this$1.toggles[next];break}!toggle||prev>=0&&hasClass(toggle,this.cls)||prev===next||(removeClass(this.toggles,this.cls),attr(this.toggles,"aria-expanded",!1),addClass(toggle,this.cls),attr(toggle,"aria-expanded",!0),this.connects.forEach(function(list){hasPrev?this$1.toggleElement([list.children[prev],list.children[next]]):this$1.toggleNow(list.children[next])}))}}},Tab={mixins:[Class],extends:Switcher,props:{media:"media"},data:{media:960,attrItem:"uk-tab-item"},connected:function(){var cls=hasClass(this.$el,"uk-tab-left")?"uk-tab-left":!!hasClass(this.$el,"uk-tab-right")&&"uk-tab-right";cls&&this.$create("toggle",this.$el,{cls:cls,mode:"media",media:this.media})}},Toggle={mixins:[Togglable],args:"target",props:{href:String,target:null,mode:"list",media:"media"},data:{href:!1,target:!1,mode:"click",queued:!0,media:!1},computed:{target:function(ref,$el){var href=ref.href,target=ref.target;return(target=queryAll(target||href,$el)).length&&target||[$el]}},events:[{name:pointerEnter+" "+pointerLeave,filter:function(){return includes(this.mode,"hover")},handler:function(e){isTouch(e)||this.toggle("toggle"+(e.type===pointerEnter?"show":"hide"))}},{name:"click",filter:function(){return includes(this.mode,"click")||hasTouch&&includes(this.mode,"hover")},handler:function(e){var link;(isTouch(e)||includes(this.mode,"click"))&&((closest(e.target,'a[href="#"], button')||(link=closest(e.target,"a[href]"))&&(this.cls||!isVisible(this.target)||link.hash&&matches(this.target,link.hash)))&&once(document,"click",function(e){return e.preventDefault()}),this.toggle())}}],update:{write:function(){if(includes(this.mode,"media")&&this.media){var toggled=this.isToggled(this.target);(window.matchMedia(this.media).matches?!toggled:toggled)&&this.toggle()}},events:["load","resize"]},methods:{toggle:function(type){trigger(this.target,type||"toggle",[this])&&this.toggleElement(this.target)}}};UIkit.version="3.0.0-rc.5",function(UIkit){UIkit.component("accordion",Accordion),UIkit.component("alert",Alert),UIkit.component("cover",Cover),UIkit.component("drop",Drop),UIkit.component("dropdown",Dropdown),UIkit.component("formCustom",FormCustom),UIkit.component("gif",Gif),UIkit.component("grid",Grid),UIkit.component("heightMatch",HeightMatch),UIkit.component("heightViewport",HeightViewport),UIkit.component("icon",Icon),UIkit.component("img",Img),UIkit.component("leader",Leader),UIkit.component("margin",Margin),UIkit.component("modal",Modal$1),UIkit.component("nav",Nav),UIkit.component("navbar",Navbar),UIkit.component("offcanvas",Offcanvas),UIkit.component("overflowAuto",OverflowAuto),UIkit.component("responsive",Responsive),UIkit.component("scroll",Scroll),UIkit.component("scrollspy",Scrollspy),UIkit.component("scrollspyNav",ScrollspyNav),UIkit.component("sticky",Sticky),UIkit.component("svg",SVG),UIkit.component("switcher",Switcher),UIkit.component("tab",Tab),UIkit.component("toggle",Toggle),UIkit.component("video",Video),UIkit.component("close",Close),UIkit.component("marker",IconComponent),UIkit.component("navbarToggleIcon",IconComponent),UIkit.component("overlayIcon",IconComponent),UIkit.component("paginationNext",IconComponent),UIkit.component("paginationPrevious",IconComponent),UIkit.component("searchIcon",Search),UIkit.component("slidenavNext",Slidenav),UIkit.component("slidenavPrevious",Slidenav),UIkit.component("spinner",Spinner),UIkit.component("totop",IconComponent),UIkit.use(Core)}(UIkit);var Countdown={mixins:[Class],attrs:!0,props:{date:String,clsWrapper:String},data:{date:"",clsWrapper:".uk-countdown-%unit%"},computed:{date:function(ref){var date=ref.date;return Date.parse(date)},days:function(ref,$el){return $(ref.clsWrapper.replace("%unit%","days"),$el)},hours:function(ref,$el){return $(ref.clsWrapper.replace("%unit%","hours"),$el)},minutes:function(ref,$el){return $(ref.clsWrapper.replace("%unit%","minutes"),$el)},seconds:function(ref,$el){return $(ref.clsWrapper.replace("%unit%","seconds"),$el)},units:function(){var this$1=this;return["days","hours","minutes","seconds"].filter(function(unit){return this$1[unit]})}},connected:function(){this.start()},disconnected:function(){var this$1=this;this.stop(),this.units.forEach(function(unit){return empty(this$1[unit])})},events:[{name:"visibilitychange",el:document,handler:function(){document.hidden?this.stop():this.start()}}],update:{write:function(){var date,total,this$1=this,timespan=(date=this.date,{total:total=date-Date.now(),seconds:total/1e3%60,minutes:total/1e3/60%60,hours:total/1e3/60/60%24,days:total/1e3/60/60/24});timespan.total<=0&&(this.stop(),timespan.days=timespan.hours=timespan.minutes=timespan.seconds=0),this.units.forEach(function(unit){var digits=String(Math.floor(timespan[unit]));digits=digits.length<2?"0"+digits:digits;var el=this$1[unit];el.textContent!==digits&&((digits=digits.split("")).length!==el.children.length&&html(el,digits.map(function(){return"<span></span>"}).join("")),digits.forEach(function(digit,i){return el.children[i].textContent=digit}))})}},methods:{start:function(){var this$1=this;this.stop(),this.date&&this.units.length&&(this.$emit(),this.timer=setInterval(function(){return this$1.$emit()},1e3))},stop:function(){this.timer&&(clearInterval(this.timer),this.timer=null)}}};var style$1,targetClass="uk-animation-target",Animate={props:{animation:Number},data:{animation:150},computed:{target:function(){return this.$el}},methods:{animate:function(action){var this$1=this;style$1||(style$1=append(document.head,"<style>").sheet).insertRule("."+targetClass+" > * {\n margin-top: 0 !important;\n transform: none !important;\n }");var children=toNodes(this.target.children),propsFrom=children.map(function(el){return getProps(el,!0)}),oldHeight=height(this.target),oldScrollY=window.pageYOffset;action(),Transition.cancel(this.target),children.forEach(Transition.cancel),reset(this.target),this.$update(this.target),fastdom.flush();var newHeight=height(this.target),propsTo=(children=children.concat(toNodes(this.target.children).filter(function(el){return!includes(children,el)}))).map(function(el,i){return!!(el.parentNode&&i in propsFrom)&&(propsFrom[i]?isVisible(el)?getPositionWithMargin(el):{opacity:0}:{opacity:isVisible(el)?1:0})});return propsFrom=propsTo.map(function(props,i){var from=children[i].parentNode===this$1.target&&(propsFrom[i]||getProps(children[i]));if(from)if(props){if(!("opacity"in props)){from.opacity%1?props.opacity=1:delete from.opacity}}else delete from.opacity;return from}),addClass(this.target,targetClass),children.forEach(function(el,i){return propsFrom[i]&&css(el,propsFrom[i])}),css(this.target,"minHeight",oldHeight),window.scroll(window.pageXOffset,oldScrollY),Promise$1.all(children.map(function(el,i){return propsFrom[i]&&propsTo[i]?Transition.start(el,propsTo[i],this$1.animation,"ease"):Promise$1.resolve()}).concat(Transition.start(this.target,{minHeight:newHeight},this.animation,"ease"))).then(function(){children.forEach(function(el,i){return css(el,{display:0===propsTo[i].opacity?"none":"",zIndex:""})}),reset(this$1.target),this$1.$update(this$1.target)},noop)}}};function getProps(el,opacity){var zIndex=css(el,"zIndex");return!!isVisible(el)&&assign({display:"",opacity:opacity?css(el,"opacity"):"0",pointerEvents:"none",position:"absolute",zIndex:"auto"===zIndex?index(el):zIndex},getPositionWithMargin(el))}function reset(el){css(el.children,{height:"",left:"",opacity:"",pointerEvents:"",position:"",top:"",width:""}),removeClass(el,targetClass),css(el,"minHeight","")}function getPositionWithMargin(el){var ref=el.getBoundingClientRect(),height$$1=ref.height,width$$1=ref.width,ref$1=position(el),top=ref$1.top,left=ref$1.left;return{top:top+=toFloat(css(el,"marginTop")),left:left,height:height$$1,width:width$$1}}var Filter={mixins:[Animate],args:"target",props:{target:Boolean,selActive:Boolean},data:{target:null,selActive:!1,attrItem:"uk-filter-control",cls:"uk-active",animation:250},computed:{toggles:function(ref,$el){ref.attrItem;return $$("["+this.attrItem+"],[data-"+this.attrItem+"]",$el)},target:function(ref,$el){return $(ref.target,$el)}},events:[{name:"click",delegate:function(){return"["+this.attrItem+"],[data-"+this.attrItem+"]"},handler:function(e){e.preventDefault(),this.apply(e.current)}}],connected:function(){var this$1=this;if(!1!==this.selActive){var actives=$$(this.selActive,this.$el);this.toggles.forEach(function(el){return toggleClass(el,this$1.cls,includes(actives,el))})}},update:function(data$$1){var toggles=data$$1.toggles,children=data$$1.children;isEqualList(toggles,this.toggles,!1)&&isEqualList(children,this.target.children,!1)||(data$$1.toggles=this.toggles,data$$1.children=this.target.children,this.setState(this.getState(),!1))},methods:{apply:function(el){this.setState(mergeState(el,this.attrItem,this.getState()))},getState:function(){var this$1=this;return this.toggles.filter(function(item){return hasClass(item,this$1.cls)}).reduce(function(state,el){return mergeState(el,this$1.attrItem,state)},{filter:{"":""},sort:[]})},setState:function(state,animate$$1){var this$1=this;void 0===animate$$1&&(animate$$1=!0),state=assign({filter:{"":""},sort:[]},state),trigger(this.$el,"beforeFilter",[this,state]);var children=toNodes(this.target.children);this.toggles.forEach(function(el){return toggleClass(el,this$1.cls,function(el,attr$$1,ref){var stateFilter=ref.filter,ref_sort=ref.sort,stateSort=ref_sort[0],stateOrder=ref_sort[1],ref$1=getFilter(el,attr$$1),filter$$1=ref$1.filter,group=ref$1.group;void 0===group&&(group="");var sort=ref$1.sort,order=ref$1.order;void 0===order&&(order="asc");return Boolean((filter$$1||isUndefined(sort))&&group in stateFilter&&(filter$$1===stateFilter[group]||isUndefined(filter$$1)&&!stateFilter[group])||stateSort&&sort&&stateSort===sort&&stateOrder===order)}(el,this$1.attrItem,state))});var apply$$1=function(){var selector=function(ref){var selector="";return each(ref.filter,function(value){return selector+=value||""}),selector}(state);children.forEach(function(el){return css(el,"display",selector&&!matches(el,selector)?"none":"")});var ref=state.sort,sort=ref[0],order=ref[1];if(sort){var sorted=function(nodes,sort,order){return toNodes(nodes).sort(function(a,b){return data(a,sort).localeCompare(data(b,sort))*("asc"===order||-1)})}(children,sort,order);isEqualList(sorted,children)||sorted.forEach(function(el){return append(this$1.target,el)})}};animate$$1?this.animate(apply$$1).then(function(){return trigger(this$1.$el,"afterFilter",[this$1])}):(apply$$1(),trigger(this.$el,"afterFilter",[this]))}}};function getFilter(el,attr$$1){return parseOptions(data(el,attr$$1),["filter"])}function mergeState(el,attr$$1,state){return toNodes(el).forEach(function(el){var filterBy=getFilter(el,attr$$1),filter$$1=filterBy.filter,group=filterBy.group,sort=filterBy.sort,order=filterBy.order;void 0===order&&(order="asc"),(filter$$1||isUndefined(sort))&&(group?(delete state.filter[""],state.filter[group]=filter$$1):state.filter={"":filter$$1}),isUndefined(sort)||(state.sort=[sort,order])}),state}function isEqualList(listA,listB,strict){return void 0===strict&&(strict=!0),listA=toNodes(listA),listB=toNodes(listB),listA.length===listB.length&&listA.every(function(el,i){return strict?el===listB[i]:~listB.indexOf(el)})}var Animations={slide:{show:function(dir){return[{transform:translate(-100*dir)},{transform:translate()}]},percent:function(current){return translated(current)},translate:function(percent,dir){return[{transform:translate(-100*dir*percent)},{transform:translate(100*dir*(1-percent))}]}}};function translated(el){return Math.abs(css(el,"transform").split(",")[4]/el.offsetWidth)||0}function translate(value,unit){return void 0===value&&(value=0),void 0===unit&&(unit="%"),"translateX("+value+(value?unit:"")+")"}function scale3d(value){return"scale3d("+value+", "+value+", 1)"}var Animations$1=assign({},Animations,{fade:{show:function(){return[{opacity:0},{opacity:1}]},percent:function(current){return 1-css(current,"opacity")},translate:function(percent){return[{opacity:1-percent},{opacity:percent}]}},scale:{show:function(){return[{opacity:0,transform:scale3d(.8)},{opacity:1,transform:scale3d(1)}]},percent:function(current){return 1-css(current,"opacity")},translate:function(percent){return[{opacity:1-percent,transform:scale3d(1-.2*percent)},{opacity:percent,transform:scale3d(.8+.2*percent)}]}}});function triggerUpdate(el,type,data$$1){trigger(el,createEvent(type,!1,!1,data$$1))}var Slider={attrs:!0,mixins:[{props:{autoplay:Boolean,autoplayInterval:Number,pauseOnHover:Boolean},data:{autoplay:!1,autoplayInterval:7e3,pauseOnHover:!0},connected:function(){this.startAutoplay()},disconnected:function(){this.stopAutoplay()},events:[{name:"visibilitychange",el:document,handler:function(){document.hidden?this.stopAutoplay():this.startAutoplay()}},{name:pointerDown,handler:"stopAutoplay"},{name:"mouseenter",filter:function(){return this.autoplay},handler:function(){this.isHovering=!0}},{name:"mouseleave",filter:function(){return this.autoplay},handler:function(){this.isHovering=!1}}],methods:{startAutoplay:function(){var this$1=this;this.stopAutoplay(),this.autoplay&&(this.interval=setInterval(function(){return!(this$1.isHovering&&this$1.pauseOnHover)&&!this$1.stack.length&&this$1.show("next")},this.autoplayInterval))},stopAutoplay:function(){this.interval&&clearInterval(this.interval)}}},{data:{threshold:10,preventCatch:!1},init:function(){var this$1=this;["start","move","end"].forEach(function(key){var fn=this$1[key];this$1[key]=function(e){var pos=getPos$1(e).x*(isRtl?-1:1);this$1.prevPos=pos!==this$1.pos?this$1.pos:this$1.prevPos,this$1.pos=pos,fn(e)}})},events:[{name:pointerDown,delegate:function(){return this.slidesSelector},handler:function(e){var el;!isTouch(e)&&(el=e.target,!el.children.length&&el.childNodes.length)||e.button>0||this.length<2||this.preventCatch||this.start(e)}},{name:"dragstart",handler:function(e){e.preventDefault()}}],methods:{start:function(){this.drag=this.pos,this._transitioner?(this.percent=this._transitioner.percent(),this.drag+=this._transitioner.getDistance()*this.percent*this.dir,this._transitioner.translate(this.percent),this._transitioner.cancel(),this.dragging=!0,this.stack=[]):this.prevIndex=this.index,this.unbindMove=on(document,pointerMove,this.move,{capture:!0,passive:!1}),on(window,"scroll",this.unbindMove),on(document,pointerUp,this.end,!0)},move:function(e){var this$1=this,distance=this.pos-this.drag;if(!(0===distance||this.prevPos===this.pos||!this.dragging&&Math.abs(distance)<this.threshold)){e.cancelable&&e.preventDefault(),this.dragging=!0,this.dir=distance<0?1:-1;for(var slides=this.slides,prevIndex=this.prevIndex,dis=Math.abs(distance),nextIndex=this.getIndex(prevIndex+this.dir,prevIndex),width$$1=this._getDistance(prevIndex,nextIndex)||slides[prevIndex].offsetWidth;nextIndex!==prevIndex&&dis>width$$1;)this$1.drag-=width$$1*this$1.dir,prevIndex=nextIndex,dis-=width$$1,nextIndex=this$1.getIndex(prevIndex+this$1.dir,prevIndex),width$$1=this$1._getDistance(prevIndex,nextIndex)||slides[prevIndex].offsetWidth;this.percent=dis/width$$1;var itemShown,prev=slides[prevIndex],next=slides[nextIndex],changed=this.index!==nextIndex,edge=prevIndex===nextIndex;[this.index,this.prevIndex].filter(function(i){return!includes([nextIndex,prevIndex],i)}).forEach(function(i){trigger(slides[i],"itemhidden",[this$1]),edge&&(itemShown=!0,this$1.prevIndex=prevIndex)}),(this.index===prevIndex&&this.prevIndex!==prevIndex||itemShown)&&trigger(slides[this.index],"itemshown",[this]),changed&&(this.prevIndex=prevIndex,this.index=nextIndex,!edge&&trigger(prev,"beforeitemhide",[this]),trigger(next,"beforeitemshow",[this])),this._transitioner=this._translate(Math.abs(this.percent),prev,!edge&&next),changed&&(!edge&&trigger(prev,"itemhide",[this]),trigger(next,"itemshow",[this]))}},end:function(){if(off(window,"scroll",this.unbindMove),this.unbindMove(),off(document,pointerUp,this.end,!0),this.dragging){if(this.dragging=null,this.index===this.prevIndex)this.percent=1-this.percent,this.dir*=-1,this._show(!1,this.index,!0),this._transitioner=null;else{var dirChange=(isRtl?this.dir*(isRtl?1:-1):this.dir)<0==this.prevPos>this.pos;this.index=dirChange?this.index:this.prevIndex,dirChange&&(this.percent=1-this.percent),this.show(this.dir>0&&!dirChange||this.dir<0&&dirChange?"next":"previous",!0)}preventClick()}this.drag=this.percent=null}}},{data:{selNav:!1},computed:{nav:function(ref,$el){return $(ref.selNav,$el)},navItemSelector:function(ref){var attrItem=ref.attrItem;return"["+attrItem+"],[data-"+attrItem+"]"},navItems:function(_,$el){return $$(this.navItemSelector,$el)}},update:[{write:function(){var this$1=this;this.nav&&this.length!==this.nav.children.length&&html(this.nav,this.slides.map(function(_,i){return"<li "+this$1.attrItem+'="'+i+'"><a href="#"></a></li>'}).join("")),toggleClass($$(this.navItemSelector,this.$el).concat(this.nav),"uk-hidden",!this.maxIndex),this.updateNav()},events:["load","resize"]}],events:[{name:"click",delegate:function(){return this.navItemSelector},handler:function(e){e.preventDefault(),e.current.blur(),this.show(data(e.current,this.attrItem))}},{name:"itemshow",handler:"updateNav"}],methods:{updateNav:function(){var this$1=this,i=this.getValidIndex();this.navItems.forEach(function(el){var cmd=data(el,this$1.attrItem);toggleClass(el,this$1.clsActive,toNumber(cmd)===i),toggleClass(el,"uk-invisible",this$1.finite&&("previous"===cmd&&0===i||"next"===cmd&&i>=this$1.maxIndex))})}}}],props:{clsActivated:Boolean,easing:String,index:Number,finite:Boolean,velocity:Number},data:function(){return{easing:"ease",finite:!1,velocity:1,index:0,stack:[],percent:0,clsActive:"uk-active",clsActivated:!1,Transitioner:!1,transitionOptions:{}}},computed:{duration:function(ref,$el){var velocity=ref.velocity;return speedUp($el.offsetWidth/velocity)},length:function(){return this.slides.length},list:function(ref,$el){return $(ref.selList,$el)},maxIndex:function(){return this.length-1},slidesSelector:function(ref){return ref.selList+" > *"},slides:function(){return toNodes(this.list.children)}},events:{itemshown:function(){this.$update(this.list)}},methods:{show:function(index$$1,force){var this$1=this;if(void 0===force&&(force=!1),!this.dragging&&this.length){var stack=this.stack,queueIndex=force?0:stack.length,reset=function(){stack.splice(queueIndex,1),stack.length&&this$1.show(stack.shift(),!0)};if(stack[force?"unshift":"push"](index$$1),!force&&stack.length>1)2===stack.length&&this._transitioner.forward(Math.min(this.duration,200));else{var prevIndex=this.index,prev=hasClass(this.slides,this.clsActive)&&this.slides[prevIndex],nextIndex=this.getIndex(index$$1,this.index),next=this.slides[nextIndex];if(prev!==next){if(this.dir=function(index$$1,prevIndex){return"next"===index$$1?1:"previous"===index$$1?-1:index$$1<prevIndex?-1:1}(index$$1,prevIndex),this.prevIndex=prevIndex,this.index=nextIndex,prev&&trigger(prev,"beforeitemhide",[this]),!trigger(next,"beforeitemshow",[this,prev]))return this.index=this.prevIndex,void reset();var promise=this._show(prev,next,force).then(function(){return prev&&trigger(prev,"itemhidden",[this$1]),trigger(next,"itemshown",[this$1]),new Promise$1(function(resolve){fastdom.write(function(){stack.shift(),stack.length?this$1.show(stack.shift(),!0):this$1._transitioner=null,resolve()})})});return prev&&trigger(prev,"itemhide",[this]),trigger(next,"itemshow",[this]),promise}reset()}}},getIndex:function(index$$1,prev){return void 0===index$$1&&(index$$1=this.index),void 0===prev&&(prev=this.index),clamp(getIndex(index$$1,this.slides,prev,this.finite),0,this.maxIndex)},getValidIndex:function(index$$1,prevIndex){return void 0===index$$1&&(index$$1=this.index),void 0===prevIndex&&(prevIndex=this.prevIndex),this.getIndex(index$$1,prevIndex)},_show:function(prev,next,force){if(this._transitioner=this._getTransitioner(prev,next,this.dir,assign({easing:force?next.offsetWidth<600?"cubic-bezier(0.25, 0.46, 0.45, 0.94)":"cubic-bezier(0.165, 0.84, 0.44, 1)":this.easing},this.transitionOptions)),!force&&!prev)return this._transitioner.translate(1),Promise$1.resolve();var length=this.stack.length;return this._transitioner[length>1?"forward":"show"](length>1?Math.min(this.duration,75+75/(length-1)):this.duration,this.percent)},_getDistance:function(prev,next){return new this._getTransitioner(prev,prev!==next&&next).getDistance()},_translate:function(percent,prev,next){void 0===prev&&(prev=this.prevIndex),void 0===next&&(next=this.index);var transitioner=this._getTransitioner(prev!==next&&prev,next);return transitioner.translate(percent),transitioner},_getTransitioner:function(prev,next,dir,options){return void 0===prev&&(prev=this.prevIndex),void 0===next&&(next=this.index),void 0===dir&&(dir=this.dir||1),void 0===options&&(options=this.transitionOptions),new this.Transitioner(isNumber(prev)?this.slides[prev]:prev,isNumber(next)?this.slides[next]:next,dir*(isRtl?-1:1),options)}}};function speedUp(x){return.5*x+300}var Slideshow={mixins:[Slider],props:{animation:String},data:{animation:"slide",clsActivated:"uk-transition-active",Animations:Animations,Transitioner:function(prev,next,dir,ref){var animation=ref.animation,easing=ref.easing,percent=animation.percent,translate=animation.translate,show=animation.show;void 0===show&&(show=noop);var props=show(dir),deferred=new Deferred;return{dir:dir,show:function(duration,percent,linear){var this$1=this;void 0===percent&&(percent=0);var timing=linear?"linear":easing;return duration-=Math.round(duration*clamp(percent,-1,1)),this.translate(percent),triggerUpdate(next,"itemin",{percent:percent,duration:duration,timing:timing,dir:dir}),triggerUpdate(prev,"itemout",{percent:1-percent,duration:duration,timing:timing,dir:dir}),Promise$1.all([Transition.start(next,props[1],duration,timing),Transition.start(prev,props[0],duration,timing)]).then(function(){this$1.reset(),deferred.resolve()},noop),deferred.promise},stop:function(){return Transition.stop([next,prev])},cancel:function(){Transition.cancel([next,prev])},reset:function(){for(var prop in props[0])css([next,prev],prop,"")},forward:function(duration,percent){return void 0===percent&&(percent=this.percent()),Transition.cancel([next,prev]),this.show(duration,percent,!0)},translate:function(percent){this.reset();var props=translate(percent,dir);css(next,props[1]),css(prev,props[0]),triggerUpdate(next,"itemtranslatein",{percent:percent,dir:dir}),triggerUpdate(prev,"itemtranslateout",{percent:1-percent,dir:dir})},percent:function(){return percent(prev||next,next,dir)},getDistance:function(){return prev.offsetWidth}}}},computed:{animation:function(ref){var animation=ref.animation,Animations$$1=ref.Animations;return assign(animation in Animations$$1?Animations$$1[animation]:Animations$$1.slide,{name:animation})},transitionOptions:function(){return{animation:this.animation}}},events:{"itemshow itemhide itemshown itemhidden":function(ref){var target=ref.target;this.$update(target)},itemshow:function(){isNumber(this.prevIndex)&&fastdom.flush()},beforeitemshow:function(ref){addClass(ref.target,this.clsActive)},itemshown:function(ref){addClass(ref.target,this.clsActivated)},itemhidden:function(ref){removeClass(ref.target,this.clsActive,this.clsActivated)}}},LightboxPanel={mixins:[Container,Modal,Togglable,Slideshow],functional:!0,props:{delayControls:Number,preload:Number,videoAutoplay:Boolean,template:String},data:function(){return{preload:1,videoAutoplay:!1,delayControls:3e3,items:[],cls:"uk-open",clsPage:"uk-lightbox-page",selList:".uk-lightbox-items",attrItem:"uk-lightbox-item",selClose:".uk-close-large",pauseOnHover:!1,velocity:2,Animations:Animations$1,template:'<div class="uk-lightbox uk-overflow-hidden"> <ul class="uk-lightbox-items"></ul> <div class="uk-lightbox-toolbar uk-position-top uk-text-right uk-transition-slide-top uk-transition-opaque"> <button class="uk-lightbox-toolbar-icon uk-close-large" type="button" uk-close></button> </div> <a class="uk-lightbox-button uk-position-center-left uk-position-medium uk-transition-fade" href="#" uk-slidenav-previous uk-lightbox-item="previous"></a> <a class="uk-lightbox-button uk-position-center-right uk-position-medium uk-transition-fade" href="#" uk-slidenav-next uk-lightbox-item="next"></a> <div class="uk-lightbox-toolbar uk-lightbox-caption uk-position-bottom uk-text-center uk-transition-slide-bottom uk-transition-opaque"></div> </div>'}},created:function(){var this$1=this;this.$mount(append(this.container,this.template)),this.caption=$(".uk-lightbox-caption",this.$el),this.items.forEach(function(){return append(this$1.list,"<li></li>")})},events:[{name:pointerMove+" "+pointerDown+" keydown",handler:"showControls"},{name:"click",self:!0,delegate:function(){return this.slidesSelector},handler:function(e){e.preventDefault(),this.hide()}},{name:"shown",self:!0,handler:"showControls"},{name:"hide",self:!0,handler:function(){this.hideControls(),removeClass(this.slides,this.clsActive),Transition.stop(this.slides)}},{name:"keyup",el:document,handler:function(e){if(this.isToggled(this.$el))switch(e.keyCode){case 37:this.show("previous");break;case 39:this.show("next")}}},{name:"beforeitemshow",handler:function(e){this.isToggled()||(this.preventCatch=!0,e.preventDefault(),this.toggleNow(this.$el,!0),this.animation=Animations$1.scale,removeClass(e.target,this.clsActive),this.stack.splice(1,0,this.index))}},{name:"itemshow",handler:function(ref){var i=index(ref.target),caption=this.getItem(i).caption;css(this.caption,"display",caption?"":"none"),html(this.caption,caption);for(var j=0;j<=this.preload;j++)this.loadItem(this.getIndex(i+j)),this.loadItem(this.getIndex(i-j))}},{name:"itemshown",handler:function(){this.preventCatch=!1}},{name:"itemload",handler:function(_,item){var matches$$1,this$1=this,source=item.source,type=item.type,alt=item.alt;if(this.setItem(item,"<span uk-spinner></span>"),source)if("image"===type||source.match(/\.(jp(e)?g|png|gif|svg)($|\?)/i))getImage(source).then(function(img){return this$1.setItem(item,'<img width="'+img.width+'" height="'+img.height+'" src="'+source+'" alt="'+(alt||"")+'">')},function(){return this$1.setError(item)});else if("video"===type||source.match(/\.(mp4|webm|ogv)($|\?)/i)){var video=$("<video controls playsinline"+(item.poster?' poster="'+item.poster+'"':"")+' uk-video="'+this.videoAutoplay+'"></video>');attr(video,"src",source),on(video,"error",function(){return this$1.setError(item)}),on(video,"loadedmetadata",function(){attr(video,{width:video.videoWidth,height:video.videoHeight}),this$1.setItem(item,video)})}else if("iframe"===type||source.match(/\.(html|php)($|\?)/i))this.setItem(item,'<iframe class="uk-lightbox-iframe" src="'+source+'" frameborder="0" allowfullscreen></iframe>');else if(matches$$1=source.match(/\/\/.*?youtube(-nocookie)?\.[a-z]+\/watch\?v=([^&\s]+)/)||source.match(/()youtu\.be\/(.*)/)){var id=matches$$1[2],setIframe=function(width$$1,height$$1){return void 0===width$$1&&(width$$1=640),void 0===height$$1&&(height$$1=450),this$1.setItem(item,getIframe("https://www.youtube"+(matches$$1[1]||"")+".com/embed/"+id,width$$1,height$$1,this$1.videoAutoplay))};getImage("https://img.youtube.com/vi/"+id+"/maxresdefault.jpg").then(function(ref){var width$$1=ref.width,height$$1=ref.height;120===width$$1&&90===height$$1?getImage("https://img.youtube.com/vi/"+id+"/0.jpg").then(function(ref){var width$$1=ref.width,height$$1=ref.height;return setIframe(width$$1,height$$1)},setIframe):setIframe(width$$1,height$$1)},setIframe)}else(matches$$1=source.match(/(\/\/.*?)vimeo\.[a-z]+\/([0-9]+).*?/))&&ajax("https://vimeo.com/api/oembed.json?maxwidth=1920&url="+encodeURI(source),{responseType:"json",withCredentials:!1}).then(function(ref){var ref_response=ref.response,height$$1=ref_response.height,width$$1=ref_response.width;return this$1.setItem(item,getIframe("https://player.vimeo.com/video/"+matches$$1[2],width$$1,height$$1,this$1.videoAutoplay))},function(){return this$1.setError(item)})}}],methods:{loadItem:function(index$$1){void 0===index$$1&&(index$$1=this.index);var item=this.getItem(index$$1);item.content||trigger(this.$el,"itemload",[item])},getItem:function(index$$1){return void 0===index$$1&&(index$$1=this.index),this.items[index$$1]||{}},setItem:function(item,content){assign(item,{content:content});var el=html(this.slides[this.items.indexOf(item)],content);trigger(this.$el,"itemloaded",[this,el]),this.$update(el)},setError:function(item){this.setItem(item,'<span uk-icon="icon: bolt; ratio: 2"></span>')},showControls:function(){clearTimeout(this.controlsTimer),this.controlsTimer=setTimeout(this.hideControls,this.delayControls),addClass(this.$el,"uk-active","uk-transition-active")},hideControls:function(){removeClass(this.$el,"uk-active","uk-transition-active")}}};function getIframe(src,width$$1,height$$1,autoplay){return'<iframe src="'+src+'" width="'+width$$1+'" height="'+height$$1+'" style="max-width: 100%; box-sizing: border-box;" frameborder="0" allowfullscreen uk-video="autoplay: '+autoplay+'" uk-responsive></iframe>'}var obj,props=merge(LightboxPanel,"props"),defaults=merge(LightboxPanel,"data"),Lightbox={install:function(UIkit){UIkit.lightboxPanel||UIkit.component("lightboxPanel",LightboxPanel)},attrs:!0,props:assign({toggle:String},props),data:assign({toggle:"a"},Object.keys(props).reduce(function(data$$1,key){return data$$1[key]=defaults[key],data$$1},{})),computed:{toggles:function(ref,$el){return $$(ref.toggle,$el)}},disconnected:function(){this._destroy()},events:[{name:"click",delegate:function(){return this.toggle+":not(.uk-disabled)"},handler:function(e){e.preventDefault(),e.current.blur(),this.show(index(this.toggles,e.current))}}],update:function(data$$1){var listA,listB;(data$$1.toggles=data$$1.toggles||this.toggles,this.panel&&this.animation&&(this.panel.$props.animation=this.animation,this.panel.$emit()),this.panel&&(listA=data$$1.toggles,listB=this.toggles,listA.length!==listB.length||!listA.every(function(el,i){return el===listB[i]})))&&(data$$1.toggles=this.toggles,this._destroy(),this._init())},methods:{_init:function(){return this.panel=this.panel||this.$create("lightboxPanel",assign({},this.$props,{items:this.toggles.reduce(function(items,el){return items.push(["href","caption","type","poster","alt"].reduce(function(obj,attr$$1){return obj["href"===attr$$1?"source":attr$$1]=data(el,attr$$1),obj},{})),items},[])}))},_destroy:function(){this.panel&&(this.panel.$destroy(!0),this.panel=null)},show:function(index$$1){return this.panel||this._init(),this.panel.show(index$$1)},hide:function(){return this.panel&&this.panel.hide()}}};function merge(options,prop){return assign.apply(void 0,[{}].concat(options.mixins?options.mixins.map(function(mixin){return merge(mixin,prop)}):[],[isFunction(options[prop])?options[prop]():options[prop]]))}var containers={},Notification={functional:!0,args:["message","status"],data:{message:"",status:"",timeout:5e3,group:null,pos:"top-center",clsClose:"uk-notification-close",clsMsg:"uk-notification-message"},install:function(UIkit){UIkit.notification.closeAll=function(group,immediate){apply(document.body,function(el){var notification=UIkit.getComponent(el,"notification");!notification||group&&group!==notification.group||notification.close(immediate)})}},created:function(){containers[this.pos]||(containers[this.pos]=append(this.$container,'<div class="uk-notification uk-notification-'+this.pos+'"></div>'));var container=css(containers[this.pos],"display","block");this.$mount(append(container,'<div class="'+this.clsMsg+(this.status?" "+this.clsMsg+"-"+this.status:"")+'"> <a href="#" class="'+this.clsClose+'" data-uk-close></a> <div>'+this.message+"</div> </div>"))},ready:function(){var this$1=this,marginBottom=toFloat(css(this.$el,"marginBottom"));Transition.start(css(this.$el,{opacity:0,marginTop:-this.$el.offsetHeight,marginBottom:0}),{opacity:1,marginTop:0,marginBottom:marginBottom}).then(function(){this$1.timeout&&(this$1.timer=setTimeout(this$1.close,this$1.timeout))})},events:(obj={click:function(e){closest(e.target,'a[href="#"]')&&e.preventDefault(),this.close()}},obj[pointerEnter]=function(){this.timer&&clearTimeout(this.timer)},obj[pointerLeave]=function(){this.timeout&&(this.timer=setTimeout(this.close,this.timeout))},obj),methods:{close:function(immediate){var this$1=this,removeFn=function(){trigger(this$1.$el,"close",[this$1]),remove(this$1.$el),containers[this$1.pos].children.length||css(containers[this$1.pos],"display","none")};this.timer&&clearTimeout(this.timer),immediate?removeFn():Transition.start(this.$el,{opacity:0,marginTop:-this.$el.offsetHeight,marginBottom:0}).then(removeFn)}}};var props$1=["x","y","bgx","bgy","rotate","scale","color","backgroundColor","borderColor","opacity","blur","hue","grayscale","invert","saturate","sepia","fopacity"],Parallax={props:props$1.reduce(function(props,prop){return props[prop]="list",props},{media:"media"}),data:props$1.reduce(function(data$$1,prop){return data$$1[prop]=void 0,data$$1},{media:!1}),computed:{props:function(properties,$el){var this$1=this;return props$1.reduce(function(props,prop){if(isUndefined(properties[prop]))return props;var pos,bgPos,diff,isColor=prop.match(/color/i),isCssProp=isColor||"opacity"===prop,steps=properties[prop].slice(0);isCssProp&&css($el,prop,""),steps.length<2&&steps.unshift(("scale"===prop?1:isCssProp?css($el,prop):0)||0);var unit=includes(steps.join(""),"%")?"%":"px";if(isColor){var color=$el.style.color;steps=steps.map(function(step){return css(css($el,"color",step),"color").split(/[(),]/g).slice(1,-1).concat(1).slice(0,4).map(function(n){return toFloat(n)})}),$el.style.color=color}else steps=steps.map(toFloat);if(prop.match(/^bg/))if(css($el,"background-position-"+prop[2],""),bgPos=css($el,"backgroundPosition").split(" ")["x"===prop[2]?0:1],this$1.covers){var min=Math.min.apply(Math,steps),max=Math.max.apply(Math,steps),down=steps.indexOf(min)<steps.indexOf(max);diff=max-min,steps=steps.map(function(step){return step-(down?min:max)}),pos=(down?-diff:0)+"px"}else pos=bgPos;return props[prop]={steps:steps,unit:unit,pos:pos,bgPos:bgPos,diff:diff},props},{})},bgProps:function(){var this$1=this;return["bgx","bgy"].filter(function(bg){return bg in this$1.props})},covers:function(_,$el){return function(el){var backgroundSize=el.style.backgroundSize,covers="cover"===css(css(el,"backgroundSize",""),"backgroundSize");return el.style.backgroundSize=backgroundSize,covers}($el)}},disconnected:function(){delete this._image},update:[{read:function(data$$1){var this$1=this;if(data$$1.active=!this.media||window.matchMedia(this.media).matches,data$$1.image&&(data$$1.image.dimEl={width:this.$el.offsetWidth,height:this.$el.offsetHeight}),!("image"in data$$1)&&this.covers&&this.bgProps.length){var src=css(this.$el,"backgroundImage").replace(/^none|url\(["']?(.+?)["']?\)$/,"$1");src&&(data$$1.image=!1,getImage(src).then(function(img){data$$1.image={width:img.naturalWidth,height:img.naturalHeight},this$1.$emit()}))}},write:function(ref){var this$1=this,image=ref.image,active=ref.active;if(image)if(active){var dimEl=image.dimEl,dim=Dimensions.cover(image,dimEl);this.bgProps.forEach(function(prop){var ref=this$1.props[prop],diff=ref.diff,bgPos=ref.bgPos,steps=ref.steps,attr$$1="bgy"===prop?"height":"width",span=dim[attr$$1]-dimEl[attr$$1];if(bgPos.match(/%$|0px/)){if(span<diff)dimEl[attr$$1]=dim[attr$$1]+diff-span;else if(span>diff){var bgPosFloat=parseFloat(bgPos);bgPosFloat&&(this$1.props[prop].steps=steps.map(function(step){return step-(span-diff)/(100/bgPosFloat)}))}dim=Dimensions.cover(image,dimEl)}}),css(this.$el,{backgroundSize:dim.width+"px "+dim.height+"px",backgroundRepeat:"no-repeat"})}else css(this.$el,{backgroundSize:"",backgroundRepeat:""})},events:["load","resize"]}],methods:{reset:function(){var this$1=this;each(this.getCss(0),function(_,prop){return css(this$1.$el,prop,"")})},getCss:function(percent){var props=this.props,translated=!1;return Object.keys(props).reduce(function(css$$1,prop){var ref=props[prop],steps=ref.steps,unit=ref.unit,pos=ref.pos,value=getValue(steps,percent);switch(prop){case"x":case"y":if(translated)break;var ref$1=["x","y"].map(function(dir){return prop===dir?value+unit:props[dir]?getValue(props[dir].steps,percent)+props[dir].unit:0}),x=ref$1[0],y=ref$1[1];translated=css$$1.transform+=" translate3d("+x+", "+y+", 0)";break;case"rotate":css$$1.transform+=" rotate("+value+"deg)";break;case"scale":css$$1.transform+=" scale("+value+")";break;case"bgy":case"bgx":css$$1["background-position-"+prop[2]]="calc("+pos+" + "+(value+unit)+")";break;case"color":case"backgroundColor":case"borderColor":var ref$2=getStep(steps,percent),start=ref$2[0],end=ref$2[1],p=ref$2[2];css$$1[prop]="rgba("+start.map(function(value,i){return value+=p*(end[i]-value),3===i?toFloat(value):parseInt(value,10)}).join(",")+")";break;case"blur":css$$1.filter+=" blur("+value+"px)";break;case"hue":css$$1.filter+=" hue-rotate("+value+"deg)";break;case"fopacity":css$$1.filter+=" opacity("+value+"%)";break;case"grayscale":case"invert":case"saturate":case"sepia":css$$1.filter+=" "+prop+"("+value+"%)";break;default:css$$1[prop]=value}return css$$1},{transform:"",filter:""})}}};function getStep(steps,percent){var count=steps.length-1,index$$1=Math.min(Math.floor(count*percent),count-1),step=steps.slice(index$$1,index$$1+2);return step.push(1===percent?1:percent%(1/count)*count),step}function getValue(steps,percent){var ref=getStep(steps,percent),start=ref[0],end=ref[1],p=ref[2];return(isNumber(start)?start+Math.abs(start-end)*p*(start<end?1:-1):+end).toFixed(2)}var Parallax$1={mixins:[Parallax],props:{target:String,viewport:Number,easing:Number},data:{target:!1,viewport:1,easing:1},computed:{target:function(ref,$el){var target=ref.target;return target&&query(target,$el)||$el}},update:[{read:function(ref){return{prev:ref.percent,percent:function(percent,easing){return clamp(percent*(1-(easing-easing*percent)))}(scrolledOver(this.target)/(this.viewport||1),this.easing)}},write:function(ref,ref$1){var prev=ref.prev,percent=ref.percent,active=ref.active;"scroll"!==ref$1.type&&(prev=!1),active?prev!==percent&&css(this.$el,this.getCss(percent)):this.reset()},events:["scroll","load","resize"]}]};var SliderReactive={update:[{write:function(){if(!this.stack.length&&!this.dragging){var index$$1=this.getValidIndex();delete this.index,removeClass(this.slides,this.clsActive,this.clsActivated),this.show(index$$1)}},events:["load","resize"]}]};function getLeft(el,list,center){var left=getElLeft(el,list);return center?left-function(el,list){return list.offsetWidth/2-el.offsetWidth/2}(el,list):Math.min(left,getMax(list))}function getMax(list){return Math.max(0,getWidth(list)-list.offsetWidth)}function getWidth(list){return slides(list).reduce(function(right,el){return el.offsetWidth+right},0)}function getElLeft(el,list){return(el.offsetLeft+(isRtl?el.offsetWidth-list.offsetWidth:0))*(isRtl?-1:1)}function triggerUpdate$1(el,type,data$$1){trigger(el,createEvent(type,!1,!1,data$$1))}function slides(list){return toNodes(list.children)}var Slider$1={mixins:[Class,Slider,SliderReactive],props:{center:Boolean,sets:Boolean},data:{center:!1,sets:!1,attrItem:"uk-slider-item",selList:".uk-slider-items",selNav:".uk-slider-nav",clsContainer:"uk-slider-container",Transitioner:function(prev,next,dir,ref){var center=ref.center,easing=ref.easing,list=ref.list,deferred=new Deferred,from=prev?getLeft(prev,list,center):getLeft(next,list,center)+next.offsetWidth*dir,to=next?getLeft(next,list,center):from+prev.offsetWidth*dir*(isRtl?-1:1);return{dir:dir,show:function(duration,percent,linear){void 0===percent&&(percent=0);var timing=linear?"linear":easing;return duration-=Math.round(duration*clamp(percent,-1,1)),this.translate(percent),prev&&this.updateTranslates(),percent=prev?percent:clamp(percent,0,1),triggerUpdate$1(this.getItemIn(),"itemin",{percent:percent,duration:duration,timing:timing,dir:dir}),prev&&triggerUpdate$1(this.getItemIn(!0),"itemout",{percent:1-percent,duration:duration,timing:timing,dir:dir}),Transition.start(list,{transform:translate(-to*(isRtl?-1:1),"px")},duration,timing).then(deferred.resolve,noop),deferred.promise},stop:function(){return Transition.stop(list)},cancel:function(){Transition.cancel(list)},reset:function(){css(list,"transform","")},forward:function(duration,percent){return void 0===percent&&(percent=this.percent()),Transition.cancel(list),this.show(duration,percent,!0)},translate:function(percent){var distance=this.getDistance()*dir*(isRtl?-1:1);css(list,"transform",translate(clamp(distance-distance*percent-to,-getWidth(list),list.offsetWidth)*(isRtl?-1:1),"px")),this.updateTranslates(),prev&&(percent=clamp(percent,-1,1),triggerUpdate$1(this.getItemIn(),"itemtranslatein",{percent:percent,dir:dir}),triggerUpdate$1(this.getItemIn(!0),"itemtranslateout",{percent:1-percent,dir:dir}))},percent:function(){return Math.abs((css(list,"transform").split(",")[4]*(isRtl?-1:1)+from)/(to-from))},getDistance:function(){return Math.abs(to-from)},getItemIn:function(out){void 0===out&&(out=!1);var actives=this.getActives(),all=sortBy(slides(list),"offsetLeft"),i=index(all,actives[dir*(out?-1:1)>0?actives.length-1:0]);return~i&&all[i+(prev&&!out?dir:0)]},getActives:function(){var left=getLeft(prev||next,list,center);return sortBy(slides(list).filter(function(slide){var slideLeft=getElLeft(slide,list);return slideLeft>=left&&slideLeft+slide.offsetWidth<=list.offsetWidth+left}),"offsetLeft")},updateTranslates:function(){var actives=this.getActives();slides(list).forEach(function(slide){var isActive=includes(actives,slide);triggerUpdate$1(slide,"itemtranslate"+(isActive?"in":"out"),{percent:isActive?1:0,dir:slide.offsetLeft<=next.offsetLeft?1:-1})})}}}},computed:{avgWidth:function(){return getWidth(this.list)/this.length},finite:function(ref){return ref.finite||getWidth(this.list)<this.list.offsetWidth+slides(this.list).reduce(function(right,el){return Math.max(right,el.offsetWidth)},0)+this.center},maxIndex:function(){if(!this.finite||this.center&&!this.sets)return this.length-1;if(this.center)return this.sets[this.sets.length-1];css(this.slides,"order","");for(var max=getMax(this.list),i=this.length;i--;)if(getElLeft(this.list.children[i],this.list)<max)return Math.min(i+1,this.length-1);return 0},sets:function(ref){var this$1=this,sets=ref.sets,width$$1=this.list.offsetWidth/(this.center?2:1),left=0,leftCenter=width$$1,slideLeft=0;return(sets=sets&&this.slides.reduce(function(sets,slide,i){var slideWidth=offset(slide).width;if(slideLeft+slideWidth>left&&(!this$1.center&&i>this$1.maxIndex&&(i=this$1.maxIndex),!includes(sets,i))){var cmp=this$1.slides[i+1];this$1.center&&cmp&&slideWidth<leftCenter-offset(cmp).width/2?leftCenter-=slideWidth:(leftCenter=width$$1,sets.push(i),left=slideLeft+width$$1+(this$1.center?slideWidth/2:0))}return slideLeft+=slideWidth,sets},[]))&&sets.length&&sets},transitionOptions:function(){return{center:this.center,list:this.list}}},connected:function(){toggleClass(this.$el,this.clsContainer,!$("."+this.clsContainer,this.$el))},update:{write:function(){var this$1=this;$$("["+this.attrItem+"],[data-"+this.attrItem+"]",this.$el).forEach(function(el){var index$$1=data(el,this$1.attrItem);this$1.maxIndex&&toggleClass(el,"uk-hidden",isNumeric(index$$1)&&(this$1.sets&&!includes(this$1.sets,toFloat(index$$1))||index$$1>this$1.maxIndex))})},events:["load","resize"]},events:{beforeitemshow:function(e){!this.dragging&&this.sets&&this.stack.length<2&&!includes(this.sets,this.index)&&(this.index=this.getValidIndex());var diff=Math.abs(this.index-this.prevIndex+(this.dir>0&&this.index<this.prevIndex||this.dir<0&&this.index>this.prevIndex?(this.maxIndex+1)*this.dir:0));if(!this.dragging&&diff>1){for(var i=0;i<diff;i++)this.stack.splice(1,0,this.dir>0?"next":"previous");e.preventDefault()}else this.duration=speedUp(this.avgWidth/this.velocity)*((this.dir<0||!this.slides[this.prevIndex]?this.slides[this.index]:this.slides[this.prevIndex]).offsetWidth/this.avgWidth),this.reorder()},itemshow:function(){!isUndefined(this.prevIndex)&&addClass(this._getTransitioner().getItemIn(),this.clsActive)},itemshown:function(){var this$1=this,actives=this._getTransitioner(this.index).getActives();this.slides.forEach(function(slide){return toggleClass(slide,this$1.clsActive,includes(actives,slide))}),(!this.sets||includes(this.sets,toFloat(this.index)))&&this.slides.forEach(function(slide){return toggleClass(slide,this$1.clsActivated,includes(actives,slide))})}},methods:{reorder:function(){var this$1=this;if(css(this.slides,"order",""),!this.finite){var index$$1=this.dir>0&&this.slides[this.prevIndex]?this.prevIndex:this.index;if(this.slides.forEach(function(slide,i){return css(slide,"order",this$1.dir>0&&i<index$$1?1:this$1.dir<0&&i>=this$1.index?-1:"")}),this.center)for(var next=this.slides[index$$1],width$$1=this.list.offsetWidth/2-next.offsetWidth/2,j=0;width$$1>0;){var slideIndex=this$1.getIndex(--j+index$$1,index$$1),slide=this$1.slides[slideIndex];css(slide,"order",slideIndex>index$$1?-2:-1),width$$1-=slide.offsetWidth}}},getValidIndex:function(index$$1,prevIndex){var prev;if(void 0===index$$1&&(index$$1=this.index),void 0===prevIndex&&(prevIndex=this.prevIndex),index$$1=this.getIndex(index$$1,prevIndex),!this.sets)return index$$1;do{if(includes(this.sets,index$$1))return index$$1;prev=index$$1,index$$1=this.getIndex(index$$1+this.dir,prevIndex)}while(index$$1!==prev);return index$$1}}},SliderParallax={mixins:[Parallax],data:{selItem:"!li"},computed:{item:function(ref,$el){return query(ref.selItem,$el)}},events:[{name:"itemshown",self:!0,el:function(){return this.item},handler:function(){css(this.$el,this.getCss(.5))}},{name:"itemin itemout",self:!0,el:function(){return this.item},handler:function(ref){var type=ref.type,ref_detail=ref.detail,percent=ref_detail.percent,duration=ref_detail.duration,timing=ref_detail.timing,dir=ref_detail.dir;Transition.cancel(this.$el),css(this.$el,this.getCss(getCurrent(type,dir,percent))),Transition.start(this.$el,this.getCss(isIn(type)?.5:dir>0?1:0),duration,timing).catch(noop)}},{name:"transitioncanceled transitionend",self:!0,el:function(){return this.item},handler:function(){Transition.cancel(this.$el)}},{name:"itemtranslatein itemtranslateout",self:!0,el:function(){return this.item},handler:function(ref){var type=ref.type,ref_detail=ref.detail,percent=ref_detail.percent,dir=ref_detail.dir;Transition.cancel(this.$el),css(this.$el,this.getCss(getCurrent(type,dir,percent)))}}]};function isIn(type){return endsWith(type,"in")}function getCurrent(type,dir,percent){return percent/=2,isIn(type)?dir<0?1-percent:percent:dir<0?percent:1-percent}var obj$1,obj$2,Animations$2=assign({},Animations,{fade:{show:function(){return[{opacity:0,zIndex:0},{zIndex:-1}]},percent:function(current){return 1-css(current,"opacity")},translate:function(percent){return[{opacity:1-percent,zIndex:0},{zIndex:-1}]}},scale:{show:function(){return[{opacity:0,transform:scale3d(1.5),zIndex:0},{zIndex:-1}]},percent:function(current){return 1-css(current,"opacity")},translate:function(percent){return[{opacity:1-percent,transform:scale3d(1+.5*percent),zIndex:0},{zIndex:-1}]}},pull:{show:function(dir){return dir<0?[{transform:translate(30),zIndex:-1},{transform:translate(),zIndex:0}]:[{transform:translate(-100),zIndex:0},{transform:translate(),zIndex:-1}]},percent:function(current,next,dir){return dir<0?1-translated(next):translated(current)},translate:function(percent,dir){return dir<0?[{transform:translate(30*percent),zIndex:-1},{transform:translate(-100*(1-percent)),zIndex:0}]:[{transform:translate(100*-percent),zIndex:0},{transform:translate(30*(1-percent)),zIndex:-1}]}},push:{show:function(dir){return dir<0?[{transform:translate(100),zIndex:0},{transform:translate(),zIndex:-1}]:[{transform:translate(-30),zIndex:-1},{transform:translate(),zIndex:0}]},percent:function(current,next,dir){return dir>0?1-translated(next):translated(current)},translate:function(percent,dir){return dir<0?[{transform:translate(100*percent),zIndex:0},{transform:translate(-30*(1-percent)),zIndex:-1}]:[{transform:translate(-30*percent),zIndex:-1},{transform:translate(100*(1-percent)),zIndex:0}]}}}),Slideshow$1={mixins:[Class,Slideshow,SliderReactive],props:{ratio:String,minHeight:Boolean,maxHeight:Boolean},data:{ratio:"16:9",minHeight:!1,maxHeight:!1,selList:".uk-slideshow-items",attrItem:"uk-slideshow-item",selNav:".uk-slideshow-nav",Animations:Animations$2},update:{read:function(){var ref=this.ratio.split(":").map(Number),width$$1=ref[0],height$$1=ref[1];return height$$1=height$$1*this.$el.offsetWidth/width$$1,this.minHeight&&(height$$1=Math.max(this.minHeight,height$$1)),this.maxHeight&&(height$$1=Math.min(this.maxHeight,height$$1)),{height:height$$1}},write:function(ref){var hgt=ref.height;height(this.list,Math.floor(hgt))},events:["load","resize"]}},Sortable={mixins:[Class,Animate],props:{group:String,threshold:Number,clsItem:String,clsPlaceholder:String,clsDrag:String,clsDragState:String,clsBase:String,clsNoDrag:String,clsEmpty:String,clsCustom:String,handle:String},data:{group:!1,threshold:5,clsItem:"uk-sortable-item",clsPlaceholder:"uk-sortable-placeholder",clsDrag:"uk-sortable-drag",clsDragState:"uk-drag",clsBase:"uk-sortable",clsNoDrag:"uk-sortable-nodrag",clsEmpty:"uk-sortable-empty",clsCustom:"",handle:!1},init:function(){var this$1=this;["init","start","move","end"].forEach(function(key){var fn=this$1[key];this$1[key]=function(e){this$1.scrollY=window.pageYOffset;var ref=getPos$1(e),x=ref.x,y=ref.y;this$1.pos={x:x,y:y},fn(e)}})},events:(obj$1={},obj$1[pointerDown]="init",obj$1),update:{write:function(){if(this.clsEmpty&&toggleClass(this.$el,this.clsEmpty,!this.$el.children.length),this.drag){offset(this.drag,{top:this.pos.y+this.origin.top,left:this.pos.x+this.origin.left});var scroll,top=offset(this.drag).top,bottom=top+this.drag.offsetHeight;top>0&&top<this.scrollY?scroll=this.scrollY-5:bottom<height(document)&&bottom>height(window)+this.scrollY&&(scroll=this.scrollY+5),scroll&&setTimeout(function(){return window.scroll(window.pageXOffset,scroll)},5)}}},methods:{init:function(e){var target=e.target,button=e.button,defaultPrevented=e.defaultPrevented,placeholder=toNodes(this.$el.children).filter(function(el){return within(target,el)})[0];!placeholder||isInput(e.target)||this.handle&&!within(target,this.handle)||button>0||within(target,"."+this.clsNoDrag)||defaultPrevented||(e.preventDefault(),this.touched=[this],this.placeholder=placeholder,this.origin=assign({target:target,index:index(placeholder)},this.pos),on(document,pointerMove,this.move),on(document,pointerUp,this.end),on(window,"scroll",this.scroll),this.threshold||this.start(e))},start:function(e){this.drag=append(this.$container,this.placeholder.outerHTML.replace(/^<li/i,"<div").replace(/li>$/i,"div>")),css(this.drag,assign({boxSizing:"border-box",width:this.placeholder.offsetWidth,height:this.placeholder.offsetHeight},css(this.placeholder,["paddingLeft","paddingRight","paddingTop","paddingBottom"]))),attr(this.drag,"uk-no-boot",""),addClass(this.drag,this.clsDrag,this.clsCustom),height(this.drag.firstElementChild,height(this.placeholder.firstElementChild));var ref=offset(this.placeholder),left=ref.left,top=ref.top;assign(this.origin,{left:left-this.pos.x,top:top-this.pos.y}),addClass(this.placeholder,this.clsPlaceholder),addClass(this.$el.children,this.clsItem),addClass(document.documentElement,this.clsDragState),trigger(this.$el,"start",[this,this.placeholder]),this.move(e)},move:function(e){if(this.drag){this.$emit();var target="mousemove"===e.type?e.target:document.elementFromPoint(this.pos.x-document.body.scrollLeft,this.pos.y-document.body.scrollTop),sortable=this.getSortable(target),previous=this.getSortable(this.placeholder),move=sortable!==previous;if(sortable&&!within(target,this.placeholder)&&(!move||sortable.group&&sortable.group===previous.group)){if(target=sortable.$el===target.parentNode&&target||toNodes(sortable.$el.children).filter(function(element){return within(target,element)})[0],move)previous.remove(this.placeholder);else if(!target)return;sortable.insert(this.placeholder,target),includes(this.touched,sortable)||this.touched.push(sortable)}}else(Math.abs(this.pos.x-this.origin.x)>this.threshold||Math.abs(this.pos.y-this.origin.y)>this.threshold)&&this.start(e)},scroll:function(){var scroll=window.pageYOffset;scroll!==this.scrollY&&(this.pos.y+=scroll-this.scrollY,this.scrollY=scroll,this.$emit())},end:function(e){if(off(document,pointerMove,this.move),off(document,pointerUp,this.end),off(window,"scroll",this.scroll),this.drag){preventClick();var sortable=this.getSortable(this.placeholder);this===sortable?this.origin.index!==index(this.placeholder)&&trigger(this.$el,"moved",[this,this.placeholder]):(trigger(sortable.$el,"added",[sortable,this.placeholder]),trigger(this.$el,"removed",[this,this.placeholder])),trigger(this.$el,"stop",[this,this.placeholder]),remove(this.drag),this.drag=null;var classes=this.touched.map(function(sortable){return sortable.clsPlaceholder+" "+sortable.clsItem}).join(" ");this.touched.forEach(function(sortable){return removeClass(sortable.$el.children,classes)}),removeClass(document.documentElement,this.clsDragState)}else"mouseup"!==e.type&&within(e.target,"a[href]")&&(location.href=closest(e.target,"a[href]").href)},insert:function(element,target){var this$1=this;addClass(this.$el.children,this.clsItem);var insert=function(){target?!within(element,this$1.$el)||function(element,target){return element.parentNode===target.parentNode&&index(element)>index(target)}(element,target)?before(target,element):after(target,element):append(this$1.$el,element)};this.animation?this.animate(insert):insert()},remove:function(element){within(element,this.$el)&&(this.animation?this.animate(function(){return remove(element)}):remove(element))},getSortable:function(element){return element&&(this.$getComponent(element,"sortable")||this.getSortable(element.parentNode))}}};var actives=[],Tooltip={attrs:!0,args:"title",mixins:[Container,Togglable,Position],props:{delay:Number,title:String},data:{pos:"top",title:"",delay:0,animation:["uk-animation-scale-up"],duration:100,cls:"uk-active",clsPos:"uk-tooltip"},beforeConnect:function(){this._hasTitle=hasAttr(this.$el,"title"),attr(this.$el,{title:"","aria-expanded":!1})},disconnected:function(){this.hide(),attr(this.$el,{title:this._hasTitle?this.title:null,"aria-expanded":null})},methods:{show:function(){var this$1=this;includes(actives,this)||(actives.forEach(function(active){return active.hide()}),actives.push(this),this._unbind=on(document,"click",function(e){return!within(e.target,this$1.$el)&&this$1.hide()}),clearTimeout(this.showTimer),this.tooltip=append(this.container,'<div class="'+this.clsPos+'" aria-hidden><div class="'+this.clsPos+'-inner">'+this.title+"</div></div>"),attr(this.$el,"aria-expanded",!0),this.positionAt(this.tooltip,this.$el),this.origin="y"===this.getAxis()?flipPosition(this.dir)+"-"+this.align:this.align+"-"+flipPosition(this.dir),this.showTimer=setTimeout(function(){this$1.toggleElement(this$1.tooltip,!0),this$1.hideTimer=setInterval(function(){isVisible(this$1.$el)||this$1.hide()},150)},this.delay))},hide:function(){var index$$1=actives.indexOf(this);!~index$$1||matches(this.$el,"input")&&this.$el===document.activeElement||(actives.splice(index$$1,1),clearTimeout(this.showTimer),clearInterval(this.hideTimer),attr(this.$el,"aria-expanded",!1),this.toggleElement(this.tooltip,!1),this.tooltip&&remove(this.tooltip),this.tooltip=!1,this._unbind())}},events:(obj$2={},obj$2["focus "+pointerEnter+" "+pointerDown]=function(e){e.type===pointerDown&&isTouch(e)||this.show()},obj$2.blur="hide",obj$2[pointerLeave]=function(e){isTouch(e)||this.hide()},obj$2)},Upload={props:{allow:String,clsDragover:String,concurrent:Number,maxSize:Number,method:String,mime:String,msgInvalidMime:String,msgInvalidName:String,msgInvalidSize:String,multiple:Boolean,name:String,params:Object,type:String,url:String},data:{allow:!1,clsDragover:"uk-dragover",concurrent:1,maxSize:0,method:"POST",mime:!1,msgInvalidMime:"Invalid File Type: %s",msgInvalidName:"Invalid File Name: %s",msgInvalidSize:"Invalid File Size: %s Kilobytes Max",multiple:!1,name:"files[]",params:{},type:"",url:"",abort:noop,beforeAll:noop,beforeSend:noop,complete:noop,completeAll:noop,error:noop,fail:noop,load:noop,loadEnd:noop,loadStart:noop,progress:noop},events:{change:function(e){matches(e.target,'input[type="file"]')&&(e.preventDefault(),e.target.files&&this.upload(e.target.files),e.target.value="")},drop:function(e){stop(e);var transfer=e.dataTransfer;transfer&&transfer.files&&(removeClass(this.$el,this.clsDragover),this.upload(transfer.files))},dragenter:function(e){stop(e)},dragover:function(e){stop(e),addClass(this.$el,this.clsDragover)},dragleave:function(e){stop(e),removeClass(this.$el,this.clsDragover)}},methods:{upload:function(files){var this$1=this;if(files.length){trigger(this.$el,"upload",[files]);for(var i=0;i<files.length;i++){if(this$1.maxSize&&1e3*this$1.maxSize<files[i].size)return void this$1.fail(this$1.msgInvalidSize.replace("%s",this$1.maxSize));if(this$1.allow&&!match(this$1.allow,files[i].name))return void this$1.fail(this$1.msgInvalidName.replace("%s",this$1.allow));if(this$1.mime&&!match(this$1.mime,files[i].type))return void this$1.fail(this$1.msgInvalidMime.replace("%s",this$1.mime))}this.multiple||(files=[files[0]]),this.beforeAll(this,files);var chunks=function(files,size){for(var chunks=[],i=0;i<files.length;i+=size){for(var chunk=[],j=0;j<size;j++)chunk.push(files[i+j]);chunks.push(chunk)}return chunks}(files,this.concurrent),upload=function(files){var data$$1=new FormData;for(var key in files.forEach(function(file){return data$$1.append(this$1.name,file)}),this$1.params)data$$1.append(key,this$1.params[key]);ajax(this$1.url,{data:data$$1,method:this$1.method,responseType:this$1.type,beforeSend:function(env){var xhr=env.xhr;xhr.upload&&on(xhr.upload,"progress",this$1.progress),["loadStart","load","loadEnd","abort"].forEach(function(type){return on(xhr,type.toLowerCase(),this$1[type])}),this$1.beforeSend(env)}}).then(function(xhr){this$1.complete(xhr),chunks.length?upload(chunks.shift()):this$1.completeAll(xhr)},function(e){return this$1.error(e.message)})};upload(chunks.shift())}}}};function match(pattern,path){return path.match(new RegExp("^"+pattern.replace(/\//g,"\\/").replace(/\*\*/g,"(\\/[^\\/]+)*").replace(/\*/g,"[^\\/]+").replace(/((?!\\))\?/g,"$1.")+"$","i"))}function stop(e){e.preventDefault(),e.stopPropagation()}return UIkit.component("countdown",Countdown),UIkit.component("filter",Filter),UIkit.component("lightbox",Lightbox),UIkit.component("lightboxPanel",LightboxPanel),UIkit.component("notification",Notification),UIkit.component("parallax",Parallax$1),UIkit.component("slider",Slider$1),UIkit.component("sliderParallax",SliderParallax),UIkit.component("slideshow",Slideshow$1),UIkit.component("slideshowParallax",SliderParallax),UIkit.component("sortable",Sortable),UIkit.component("tooltip",Tooltip),UIkit.component("upload",Upload),function(UIkit){var connect=UIkit.connect,disconnect=UIkit.disconnect;function init(){apply$$1(document.body,connect),fastdom.flush(),new MutationObserver(function(mutations){return mutations.forEach(applyMutation)}).observe(document,{childList:!0,subtree:!0,characterData:!0,attributes:!0}),UIkit._initialized=!0}function applyMutation(mutation){var target=mutation.target;("attributes"!==mutation.type?function(ref){for(var addedNodes=ref.addedNodes,removedNodes=ref.removedNodes,i=0;i<addedNodes.length;i++)apply$$1(addedNodes[i],connect);for(var i$1=0;i$1<removedNodes.length;i$1++)apply$$1(removedNodes[i$1],disconnect);return!0}(mutation):function(ref){var target=ref.target,attributeName=ref.attributeName;if("href"===attributeName)return!0;var name=getComponentName(attributeName);if(name&&name in UIkit){if(hasAttr(target,attributeName))return UIkit[name](target),!0;var component=UIkit.getComponent(target,name);return component?(component.$destroy(),!0):void 0}}(mutation))&&UIkit.update(target)}function apply$$1(node,fn){if(1===node.nodeType&&!hasAttr(node,"uk-no-boot"))for(fn(node),node=node.firstElementChild;node;){var next=node.nextElementSibling;apply$$1(node,fn),node=next}}"MutationObserver"in window&&(document.body?init():new MutationObserver(function(){document.body&&(this.disconnect(),init())}).observe(document,{childList:!0,subtree:!0}))}(UIkit),UIkit}); -//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL2pzL3NyYy9mb3VjLmpzIiwiLi4vanMvc3JjL2Vycm9ycy5qcyIsIi4uL2pzL3NyYy9jb3VudGRvd24uanMiLCIuLi9qcy9zcmMvamFtcy5qcyIsIi4uL2pzL3NyYy9yZXZpc2lvbl9kaWZmLmpzIiwiLi4vanMvc3JjL3dpa2kuanMiLCIuLi9qcy92ZW5kb3IvbW9tZW50L21vbWVudC5qcyIsIi4uL2pzL3ZlbmRvci9qcXVlcnkvanF1ZXJ5LTMuMy4xLmpzIiwiLi4vanMvdmVuZG9yL21vbWVudC9tb21lbnQtdGltZXpvbmUuanMiLCIuLi9qcy92ZW5kb3IvdHlwZXdyaXRlci90eXBld3JpdGVyLmpzIiwiLi4vanMvdmVuZG9yL3Vpa2l0L3Vpa2l0LmpzIl0sIm5hbWVzIjpbImdldFNjcmlwdCIsInVybCIsImludGVncml0eSIsImNyb3NzX29yaWdpbiIsInNjcmlwdCIsImRvY3VtZW50IiwiY3JlYXRlRWxlbWVudCIsInR5cGUiLCJzcmMiLCJkZWZlciIsInVuZGVmaW5lZCIsImNyb3NzT3JpZ2luIiwiZ2V0RWxlbWVudHNCeVRhZ05hbWUiLCJhcHBlbmRDaGlsZCIsInNldENsYXNzIiwic2VsZWN0b3IiLCJteV9jbGFzcyIsInF1ZXJ5U2VsZWN0b3IiLCJjbGFzc05hbWUiLCJyZW1vdmVDbGFzcyIsImVsZW1lbnQiLCJyZWciLCJSZWdFeHAiLCJyZXBsYWNlIiwiZXJyb3JfdHlwZXdyaXRlciIsImFwcCIsImdldEVsZW1lbnRCeUlkIiwidHlwZXdyaXRlciIsIlR5cGV3cml0ZXIiLCJsb29wIiwiZGVsZXRlU3BlZWQiLCJ0eXBpbmdTcGVlZCIsImRldk1vZGUiLCJvbmNsaWNrIiwiY3VycmVudF9jbGFzcyIsImdldEF0dHJpYnV0ZSIsInNldEF0dHJpYnV0ZSIsInN0b3AiLCJhcHBlbmRUZXh0IiwicGF1c2VGb3IiLCJ0eXBlU3RyaW5nIiwiZGVsZXRlQ2hhcnMiLCJjaGFuZ2VTZXR0aW5ncyIsIndpbmRvdyIsIl9SZXF1ZXN0TWV0aG9kIiwiX1BhdGgiLCJfQ29kZSIsIl9FcnJvck1zZyIsInN0YXJ0Iiwib25yZWFkeXN0YXRlY2hhbmdlIiwicmVhZHlTdGF0ZSIsInN0YXJ0amFtIiwiRGF0ZSIsIlVUQyIsImVuZGphbSIsIm5vdyIsImdvYWwiLCJnZXRUaW1lIiwiVUlraXQiLCJub3RpZmljYXRpb24iLCJtZXNzYWdlIiwicG9zIiwidGltZW91dCIsImhlYWRpbmciLCJpbm5lckhUTUwiLCJyZWZyZXNoQ291bnRkb3duIiwic2V0SW50ZXJ2YWwiLCJkZWx0YSIsImNsZWFySW50ZXJ2YWwiLCJsb2NhdGlvbiIsInJlbG9hZCIsImRheXMiLCJNYXRoIiwiZmxvb3IiLCJob3VycyIsIm1pbnV0ZXMiLCJzZWNvbmRzIiwiZSIsIkphbUFjdGlvbnMiLCJbb2JqZWN0IE9iamVjdF0iLCJjc3JmX3Rva2VuIiwidGhpcyIsImFjdGlvbiIsIm1ldGhvZCIsImRhdGEiLCJjYWxsYmFjayIsIiQiLCJhamF4IiwiZGF0YVR5cGUiLCJoZWFkZXJzIiwiWC1DU1JGVG9rZW4iLCJkb25lIiwiZmFpbCIsIkpTT04iLCJzdHJpbmdpZnkiLCJjb250ZW50VHlwZSIsImphbSIsInN0YXRlIiwic2VuZCIsInNlbmRfanNvbiIsImlkIiwiZm9ybSIsInF1ZXN0aW9uIiwicmVhc29uIiwibnVtYmVyIiwicGFydGljaXBhbnQiLCJ0ZWFtIiwibWVtYmVyIiwicmV2aXNpb25fZGlmZiIsInJldmlzaW9ucyIsImJ1dHRvbnMiLCJxdWVyeVNlbGVjdG9yQWxsIiwiaWRfcmVnIiwiZ2V0UmV2aXNpb25JZCIsIm1hdGNoIiwiZ2V0UmV2aXNpb24iLCJmaWx0ZXIiLCJ4IiwiZm9yRWFjaCIsImJ1dHRvbiIsImNoZWNrZWQiLCJvbmNoYW5nZSIsInJldiIsImFmdCIsImJlZiIsImRhdGUiLCJyZW1vdmVBdHRyaWJ1dGUiLCJocmVmIiwicmFkaW9CdXR0b25DaGVja2VkIiwid2lraV9zaWRlYmFyIiwic2lkZWJhciIsImNsYXNzTGlzdCIsImNvbnRhaW5zIiwicmVtb3ZlIiwiYWRkIiwiZ2xvYmFsIiwiZmFjdG9yeSIsImV4cG9ydHMiLCJtb2R1bGUiLCJkZWZpbmUiLCJhbWQiLCJtb21lbnQiLCJob29rQ2FsbGJhY2siLCJzb21lIiwiaG9va3MiLCJhcHBseSIsImFyZ3VtZW50cyIsImlzQXJyYXkiLCJpbnB1dCIsIkFycmF5IiwiT2JqZWN0IiwicHJvdG90eXBlIiwidG9TdHJpbmciLCJjYWxsIiwiaXNPYmplY3QiLCJpc1VuZGVmaW5lZCIsImlzTnVtYmVyIiwiaXNEYXRlIiwibWFwIiwiYXJyIiwiZm4iLCJpIiwicmVzIiwibGVuZ3RoIiwicHVzaCIsImhhc093blByb3AiLCJhIiwiYiIsImhhc093blByb3BlcnR5IiwiZXh0ZW5kIiwidmFsdWVPZiIsImNyZWF0ZVVUQyIsImZvcm1hdCIsImxvY2FsZSIsInN0cmljdCIsImNyZWF0ZUxvY2FsT3JVVEMiLCJ1dGMiLCJnZXRQYXJzaW5nRmxhZ3MiLCJtIiwiX3BmIiwiZW1wdHkiLCJ1bnVzZWRUb2tlbnMiLCJ1bnVzZWRJbnB1dCIsIm92ZXJmbG93IiwiY2hhcnNMZWZ0T3ZlciIsIm51bGxJbnB1dCIsImludmFsaWRNb250aCIsImludmFsaWRGb3JtYXQiLCJ1c2VySW52YWxpZGF0ZWQiLCJpc28iLCJwYXJzZWREYXRlUGFydHMiLCJtZXJpZGllbSIsInJmYzI4MjIiLCJ3ZWVrZGF5TWlzbWF0Y2giLCJpc1ZhbGlkIiwiX2lzVmFsaWQiLCJmbGFncyIsInBhcnNlZFBhcnRzIiwiaXNOb3dWYWxpZCIsImlzTmFOIiwiX2QiLCJpbnZhbGlkV2Vla2RheSIsIl9zdHJpY3QiLCJiaWdIb3VyIiwiaXNGcm96ZW4iLCJjcmVhdGVJbnZhbGlkIiwiTmFOIiwiZnVuIiwidCIsImxlbiIsIm1vbWVudFByb3BlcnRpZXMiLCJjb3B5Q29uZmlnIiwidG8iLCJmcm9tIiwicHJvcCIsInZhbCIsIl9pc0FNb21lbnRPYmplY3QiLCJfaSIsIl9mIiwiX2wiLCJfdHptIiwiX2lzVVRDIiwiX29mZnNldCIsIl9sb2NhbGUiLCJ1cGRhdGVJblByb2dyZXNzIiwiTW9tZW50IiwiY29uZmlnIiwidXBkYXRlT2Zmc2V0IiwiaXNNb21lbnQiLCJvYmoiLCJhYnNGbG9vciIsImNlaWwiLCJ0b0ludCIsImFyZ3VtZW50Rm9yQ29lcmNpb24iLCJjb2VyY2VkTnVtYmVyIiwidmFsdWUiLCJpc0Zpbml0ZSIsImNvbXBhcmVBcnJheXMiLCJhcnJheTEiLCJhcnJheTIiLCJkb250Q29udmVydCIsIm1pbiIsImxlbmd0aERpZmYiLCJhYnMiLCJkaWZmcyIsIndhcm4iLCJtc2ciLCJzdXBwcmVzc0RlcHJlY2F0aW9uV2FybmluZ3MiLCJjb25zb2xlIiwiZGVwcmVjYXRlIiwiZmlyc3RUaW1lIiwiZGVwcmVjYXRpb25IYW5kbGVyIiwiYXJnIiwiYXJncyIsImtleSIsInNsaWNlIiwiam9pbiIsIkVycm9yIiwic3RhY2siLCJrZXlzIiwiZGVwcmVjYXRpb25zIiwiZGVwcmVjYXRlU2ltcGxlIiwibmFtZSIsImlzRnVuY3Rpb24iLCJGdW5jdGlvbiIsIm1lcmdlQ29uZmlncyIsInBhcmVudENvbmZpZyIsImNoaWxkQ29uZmlnIiwiTG9jYWxlIiwic2V0IiwiYWxpYXNlcyIsImFkZFVuaXRBbGlhcyIsInVuaXQiLCJzaG9ydGhhbmQiLCJsb3dlckNhc2UiLCJ0b0xvd2VyQ2FzZSIsIm5vcm1hbGl6ZVVuaXRzIiwidW5pdHMiLCJub3JtYWxpemVPYmplY3RVbml0cyIsImlucHV0T2JqZWN0Iiwibm9ybWFsaXplZFByb3AiLCJub3JtYWxpemVkSW5wdXQiLCJwcmlvcml0aWVzIiwiYWRkVW5pdFByaW9yaXR5IiwicHJpb3JpdHkiLCJ6ZXJvRmlsbCIsInRhcmdldExlbmd0aCIsImZvcmNlU2lnbiIsImFic051bWJlciIsInplcm9zVG9GaWxsIiwicG93IiwibWF4Iiwic3Vic3RyIiwiZm9ybWF0dGluZ1Rva2VucyIsImxvY2FsRm9ybWF0dGluZ1Rva2VucyIsImZvcm1hdEZ1bmN0aW9ucyIsImZvcm1hdFRva2VuRnVuY3Rpb25zIiwiYWRkRm9ybWF0VG9rZW4iLCJ0b2tlbiIsInBhZGRlZCIsIm9yZGluYWwiLCJmdW5jIiwibG9jYWxlRGF0YSIsImZvcm1hdE1vbWVudCIsImV4cGFuZEZvcm1hdCIsImFycmF5IiwibW9tIiwib3V0cHV0IiwibWFrZUZvcm1hdEZ1bmN0aW9uIiwiaW52YWxpZERhdGUiLCJyZXBsYWNlTG9uZ0RhdGVGb3JtYXRUb2tlbnMiLCJsb25nRGF0ZUZvcm1hdCIsImxhc3RJbmRleCIsInRlc3QiLCJtYXRjaDEiLCJtYXRjaDIiLCJtYXRjaDMiLCJtYXRjaDQiLCJtYXRjaDYiLCJtYXRjaDF0bzIiLCJtYXRjaDN0bzQiLCJtYXRjaDV0bzYiLCJtYXRjaDF0bzMiLCJtYXRjaDF0bzQiLCJtYXRjaDF0bzYiLCJtYXRjaFVuc2lnbmVkIiwibWF0Y2hTaWduZWQiLCJtYXRjaE9mZnNldCIsIm1hdGNoU2hvcnRPZmZzZXQiLCJtYXRjaFdvcmQiLCJyZWdleGVzIiwiYWRkUmVnZXhUb2tlbiIsInJlZ2V4Iiwic3RyaWN0UmVnZXgiLCJpc1N0cmljdCIsImdldFBhcnNlUmVnZXhGb3JUb2tlbiIsInJlZ2V4RXNjYXBlIiwibWF0Y2hlZCIsInAxIiwicDIiLCJwMyIsInA0IiwicyIsInRva2VucyIsImFkZFBhcnNlVG9rZW4iLCJhZGRXZWVrUGFyc2VUb2tlbiIsIl93IiwiYWRkVGltZVRvQXJyYXlGcm9tVG9rZW4iLCJfYSIsIllFQVIiLCJNT05USCIsIkRBVEUiLCJIT1VSIiwiTUlOVVRFIiwiU0VDT05EIiwiTUlMTElTRUNPTkQiLCJXRUVLIiwiV0VFS0RBWSIsImRheXNJblllYXIiLCJ5ZWFyIiwiaXNMZWFwWWVhciIsInkiLCJwYXJzZVR3b0RpZ2l0WWVhciIsInBhcnNlSW50IiwiaW5kZXhPZiIsImdldFNldFllYXIiLCJtYWtlR2V0U2V0Iiwia2VlcFRpbWUiLCJzZXQkMSIsImdldCIsIm1vbnRoIiwiZGF5c0luTW9udGgiLCJtb2RNb250aCIsIm8iLCJtb250aHNTaG9ydCIsIm1vbnRocyIsIm1vbnRoc1Nob3J0UmVnZXgiLCJtb250aHNSZWdleCIsIm1vbnRoc1BhcnNlIiwiTU9OVEhTX0lOX0ZPUk1BVCIsImRlZmF1bHRMb2NhbGVNb250aHMiLCJzcGxpdCIsImRlZmF1bHRMb2NhbGVNb250aHNTaG9ydCIsInNldE1vbnRoIiwiZGF5T2ZNb250aCIsImdldFNldE1vbnRoIiwiZGVmYXVsdE1vbnRoc1Nob3J0UmVnZXgiLCJkZWZhdWx0TW9udGhzUmVnZXgiLCJjb21wdXRlTW9udGhzUGFyc2UiLCJjbXBMZW5SZXYiLCJzaG9ydFBpZWNlcyIsImxvbmdQaWVjZXMiLCJtaXhlZFBpZWNlcyIsInNvcnQiLCJfbW9udGhzUmVnZXgiLCJfbW9udGhzU2hvcnRSZWdleCIsIl9tb250aHNTdHJpY3RSZWdleCIsIl9tb250aHNTaG9ydFN0cmljdFJlZ2V4IiwiY3JlYXRlVVRDRGF0ZSIsImdldFVUQ0Z1bGxZZWFyIiwic2V0VVRDRnVsbFllYXIiLCJmaXJzdFdlZWtPZmZzZXQiLCJkb3ciLCJkb3kiLCJmd2QiLCJnZXRVVENEYXkiLCJkYXlPZlllYXJGcm9tV2Vla3MiLCJ3ZWVrIiwid2Vla2RheSIsInJlc1llYXIiLCJyZXNEYXlPZlllYXIiLCJkYXlPZlllYXIiLCJ3ZWVrT2ZZZWFyIiwicmVzV2VlayIsIndlZWtPZmZzZXQiLCJ3ZWVrc0luWWVhciIsIndlZWtPZmZzZXROZXh0Iiwid2Vla2RheXNNaW4iLCJ3ZWVrZGF5c1Nob3J0Iiwid2Vla2RheXMiLCJ3ZWVrZGF5c01pblJlZ2V4Iiwid2Vla2RheXNTaG9ydFJlZ2V4Iiwid2Vla2RheXNSZWdleCIsIndlZWtkYXlzUGFyc2UiLCJkIiwiZGVmYXVsdExvY2FsZVdlZWtkYXlzIiwiZGVmYXVsdExvY2FsZVdlZWtkYXlzU2hvcnQiLCJkZWZhdWx0TG9jYWxlV2Vla2RheXNNaW4iLCJkZWZhdWx0V2Vla2RheXNSZWdleCIsImRlZmF1bHRXZWVrZGF5c1Nob3J0UmVnZXgiLCJkZWZhdWx0V2Vla2RheXNNaW5SZWdleCIsImNvbXB1dGVXZWVrZGF5c1BhcnNlIiwibWlucCIsInNob3J0cCIsImxvbmdwIiwibWluUGllY2VzIiwiZGF5IiwiX3dlZWtkYXlzUmVnZXgiLCJfd2Vla2RheXNTaG9ydFJlZ2V4IiwiX3dlZWtkYXlzTWluUmVnZXgiLCJfd2Vla2RheXNTdHJpY3RSZWdleCIsIl93ZWVrZGF5c1Nob3J0U3RyaWN0UmVnZXgiLCJfd2Vla2RheXNNaW5TdHJpY3RSZWdleCIsImhGb3JtYXQiLCJsb3dlcmNhc2UiLCJtYXRjaE1lcmlkaWVtIiwiX21lcmlkaWVtUGFyc2UiLCJrSW5wdXQiLCJfaXNQbSIsImlzUE0iLCJfbWVyaWRpZW0iLCJwb3MxIiwicG9zMiIsImdsb2JhbExvY2FsZSIsImdldFNldEhvdXIiLCJiYXNlQ29uZmlnIiwiY2FsZW5kYXIiLCJzYW1lRGF5IiwibmV4dERheSIsIm5leHRXZWVrIiwibGFzdERheSIsImxhc3RXZWVrIiwic2FtZUVsc2UiLCJMVFMiLCJMVCIsIkwiLCJMTCIsIkxMTCIsIkxMTEwiLCJkYXlPZk1vbnRoT3JkaW5hbFBhcnNlIiwicmVsYXRpdmVUaW1lIiwiZnV0dXJlIiwicGFzdCIsInNzIiwibW0iLCJoIiwiaGgiLCJkZCIsIk0iLCJNTSIsInl5IiwibWVyaWRpZW1QYXJzZSIsImxvY2FsZXMiLCJsb2NhbGVGYW1pbGllcyIsIm5vcm1hbGl6ZUxvY2FsZSIsImxvYWRMb2NhbGUiLCJvbGRMb2NhbGUiLCJfYWJiciIsInJlcXVpcmUiLCJnZXRTZXRHbG9iYWxMb2NhbGUiLCJ2YWx1ZXMiLCJnZXRMb2NhbGUiLCJkZWZpbmVMb2NhbGUiLCJhYmJyIiwiX2NvbmZpZyIsInBhcmVudExvY2FsZSIsIm5hbWVzIiwiaiIsIm5leHQiLCJjaG9vc2VMb2NhbGUiLCJjaGVja092ZXJmbG93IiwiX292ZXJmbG93RGF5T2ZZZWFyIiwiX292ZXJmbG93V2Vla3MiLCJfb3ZlcmZsb3dXZWVrZGF5IiwiZGVmYXVsdHMiLCJjIiwiY29uZmlnRnJvbUFycmF5IiwiY3VycmVudERhdGUiLCJleHBlY3RlZFdlZWtkYXkiLCJ5ZWFyVG9Vc2UiLCJub3dWYWx1ZSIsIl91c2VVVEMiLCJnZXRVVENNb250aCIsImdldFVUQ0RhdGUiLCJnZXRGdWxsWWVhciIsImdldE1vbnRoIiwiZ2V0RGF0ZSIsImN1cnJlbnREYXRlQXJyYXkiLCJ3Iiwid2Vla1llYXIiLCJ0ZW1wIiwid2Vla2RheU92ZXJmbG93IiwiR0ciLCJXIiwiRSIsImNyZWF0ZUxvY2FsIiwiX3dlZWsiLCJjdXJXZWVrIiwiZ2ciLCJfZGF5T2ZZZWFyIiwiZGF5T2ZZZWFyRnJvbVdlZWtJbmZvIiwiX25leHREYXkiLCJtcyIsInNldEZ1bGxZZWFyIiwiZ2V0RGF5Iiwic2V0VVRDTWludXRlcyIsImdldFVUQ01pbnV0ZXMiLCJleHRlbmRlZElzb1JlZ2V4IiwiYmFzaWNJc29SZWdleCIsInR6UmVnZXgiLCJpc29EYXRlcyIsImlzb1RpbWVzIiwiYXNwTmV0SnNvblJlZ2V4IiwiY29uZmlnRnJvbUlTTyIsImwiLCJhbGxvd1RpbWUiLCJkYXRlRm9ybWF0IiwidGltZUZvcm1hdCIsInR6Rm9ybWF0Iiwic3RyaW5nIiwiZXhlYyIsImNvbmZpZ0Zyb21TdHJpbmdBbmRGb3JtYXQiLCJleHRyYWN0RnJvbVJGQzI4MjJTdHJpbmdzIiwieWVhclN0ciIsIm1vbnRoU3RyIiwiZGF5U3RyIiwiaG91clN0ciIsIm1pbnV0ZVN0ciIsInNlY29uZFN0ciIsInJlc3VsdCIsInVudHJ1bmNhdGVZZWFyIiwib2JzT2Zmc2V0cyIsIlVUIiwiR01UIiwiRURUIiwiRVNUIiwiQ0RUIiwiQ1NUIiwiTURUIiwiTVNUIiwiUERUIiwiUFNUIiwiY29uZmlnRnJvbVJGQzI4MjIiLCJwYXJzZWRBcnJheSIsIndlZWtkYXlTdHIiLCJwYXJzZWRJbnB1dCIsImNoZWNrV2Vla2RheSIsIm9ic09mZnNldCIsIm1pbGl0YXJ5T2Zmc2V0IiwibnVtT2Zmc2V0IiwiaG0iLCJjYWxjdWxhdGVPZmZzZXQiLCJJU09fODYwMSIsIlJGQ18yODIyIiwic2tpcHBlZCIsInN0cmluZ0xlbmd0aCIsInRvdGFsUGFyc2VkSW5wdXRMZW5ndGgiLCJob3VyIiwiaXNQbSIsIm1lcmlkaWVtSG91ciIsIm1lcmlkaWVtRml4V3JhcCIsInByZXBhcmVDb25maWciLCJwcmVwYXJzZSIsInRlbXBDb25maWciLCJiZXN0TW9tZW50Iiwic2NvcmVUb0JlYXQiLCJjdXJyZW50U2NvcmUiLCJzY29yZSIsImNvbmZpZ0Zyb21TdHJpbmdBbmRBcnJheSIsImNyZWF0ZUZyb21JbnB1dEZhbGxiYWNrIiwiY29uZmlnRnJvbVN0cmluZyIsIm1pbnV0ZSIsInNlY29uZCIsIm1pbGxpc2Vjb25kIiwiY29uZmlnRnJvbU9iamVjdCIsImNvbmZpZ0Zyb21JbnB1dCIsImlzVVRDIiwiZ2V0T3duUHJvcGVydHlOYW1lcyIsImsiLCJpc09iamVjdEVtcHR5IiwicHJvdG90eXBlTWluIiwib3RoZXIiLCJwcm90b3R5cGVNYXgiLCJwaWNrQnkiLCJtb21lbnRzIiwib3JkZXJpbmciLCJEdXJhdGlvbiIsImR1cmF0aW9uIiwieWVhcnMiLCJxdWFydGVycyIsInF1YXJ0ZXIiLCJ3ZWVrcyIsIm1pbGxpc2Vjb25kcyIsInVuaXRIYXNEZWNpbWFsIiwicGFyc2VGbG9hdCIsImlzRHVyYXRpb25WYWxpZCIsIl9taWxsaXNlY29uZHMiLCJfZGF5cyIsIl9tb250aHMiLCJfZGF0YSIsIl9idWJibGUiLCJpc0R1cmF0aW9uIiwiYWJzUm91bmQiLCJyb3VuZCIsIm9mZnNldCIsInNlcGFyYXRvciIsInV0Y09mZnNldCIsInNpZ24iLCJvZmZzZXRGcm9tU3RyaW5nIiwiY2h1bmtPZmZzZXQiLCJtYXRjaGVyIiwibWF0Y2hlcyIsInBhcnRzIiwiY2xvbmVXaXRoT2Zmc2V0IiwibW9kZWwiLCJkaWZmIiwiY2xvbmUiLCJzZXRUaW1lIiwibG9jYWwiLCJnZXREYXRlT2Zmc2V0IiwiZ2V0VGltZXpvbmVPZmZzZXQiLCJpc1V0YyIsImFzcE5ldFJlZ2V4IiwiaXNvUmVnZXgiLCJjcmVhdGVEdXJhdGlvbiIsInJldCIsImRpZmZSZXMiLCJwYXJzZUlzbyIsImJhc2UiLCJpc0JlZm9yZSIsInBvc2l0aXZlTW9tZW50c0RpZmZlcmVuY2UiLCJtb21lbnRzRGlmZmVyZW5jZSIsImlucCIsImlzQWZ0ZXIiLCJjcmVhdGVBZGRlciIsImRpcmVjdGlvbiIsInBlcmlvZCIsInRtcCIsImFkZFN1YnRyYWN0IiwiaXNBZGRpbmciLCJpbnZhbGlkIiwic3VidHJhY3QiLCJtb250aERpZmYiLCJ3aG9sZU1vbnRoRGlmZiIsImFuY2hvciIsIm5ld0xvY2FsZURhdGEiLCJkZWZhdWx0Rm9ybWF0IiwiZGVmYXVsdEZvcm1hdFV0YyIsImxhbmciLCJhZGRXZWVrWWVhckZvcm1hdFRva2VuIiwiZ2V0dGVyIiwiZ2V0U2V0V2Vla1llYXJIZWxwZXIiLCJ3ZWVrc1RhcmdldCIsImRheU9mWWVhckRhdGEiLCJpc29XZWVrWWVhciIsIl9kYXlPZk1vbnRoT3JkaW5hbFBhcnNlIiwiX29yZGluYWxQYXJzZSIsIl9kYXlPZk1vbnRoT3JkaW5hbFBhcnNlTGVuaWVudCIsImdldFNldERheU9mTW9udGgiLCJnZXRTZXRNaW51dGUiLCJnZXRTZXRTZWNvbmQiLCJwYXJzZU1zIiwiZ2V0U2V0TWlsbGlzZWNvbmQiLCJwcm90byIsInByZVBhcnNlUG9zdEZvcm1hdCIsInRpbWUiLCJmb3JtYXRzIiwic29kIiwic3RhcnRPZiIsImNhbGVuZGFyRm9ybWF0IiwiYXNGbG9hdCIsInRoYXQiLCJ6b25lRGVsdGEiLCJlbmRPZiIsImlucHV0U3RyaW5nIiwicG9zdGZvcm1hdCIsIndpdGhvdXRTdWZmaXgiLCJodW1hbml6ZSIsImZyb21Ob3ciLCJ0b05vdyIsImludmFsaWRBdCIsImxvY2FsSW5wdXQiLCJpc0JldHdlZW4iLCJpbmNsdXNpdml0eSIsImlzU2FtZSIsImlucHV0TXMiLCJpc1NhbWVPckFmdGVyIiwiaXNTYW1lT3JCZWZvcmUiLCJwYXJzaW5nRmxhZ3MiLCJwcmlvcml0aXplZCIsInVuaXRzT2JqIiwidSIsImdldFByaW9yaXRpemVkVW5pdHMiLCJpc29XZWVrZGF5IiwidG9BcnJheSIsInRvT2JqZWN0IiwidG9EYXRlIiwidG9JU09TdHJpbmciLCJrZWVwT2Zmc2V0IiwiaW5zcGVjdCIsInpvbmUiLCJpc0xvY2FsIiwicHJlZml4Iiwic3VmZml4IiwidG9KU09OIiwidW5peCIsImNyZWF0aW9uRGF0YSIsImlzb1dlZWsiLCJpc29XZWVrcyIsIndlZWtJbmZvIiwiaXNvV2Vla3NJblllYXIiLCJwYXJzZVdlZWtkYXkiLCJwYXJzZUlzb1dlZWtkYXkiLCJrZWVwTG9jYWxUaW1lIiwia2VlcE1pbnV0ZXMiLCJsb2NhbEFkanVzdCIsIl9jaGFuZ2VJblByb2dyZXNzIiwicGFyc2Vab25lIiwidFpvbmUiLCJoYXNBbGlnbmVkSG91ck9mZnNldCIsImlzRFNUIiwiaXNVdGNPZmZzZXQiLCJ6b25lQWJiciIsInpvbmVOYW1lIiwiZGF0ZXMiLCJpc0RTVFNoaWZ0ZWQiLCJfaXNEU1RTaGlmdGVkIiwicHJvdG8kMSIsImdldCQxIiwiaW5kZXgiLCJmaWVsZCIsInNldHRlciIsImxpc3RNb250aHNJbXBsIiwib3V0IiwibGlzdFdlZWtkYXlzSW1wbCIsImxvY2FsZVNvcnRlZCIsInNoaWZ0IiwiX2NhbGVuZGFyIiwiX2xvbmdEYXRlRm9ybWF0IiwiZm9ybWF0VXBwZXIiLCJ0b1VwcGVyQ2FzZSIsIl9pbnZhbGlkRGF0ZSIsIl9vcmRpbmFsIiwiaXNGdXR1cmUiLCJfcmVsYXRpdmVUaW1lIiwicGFzdEZ1dHVyZSIsInNvdXJjZSIsImlzRm9ybWF0IiwiX21vbnRoc1Nob3J0IiwibW9udGhOYW1lIiwiX21vbnRoc1BhcnNlRXhhY3QiLCJpaSIsImxsYyIsInRvTG9jYWxlTG93ZXJDYXNlIiwiX21vbnRoc1BhcnNlIiwiX2xvbmdNb250aHNQYXJzZSIsIl9zaG9ydE1vbnRoc1BhcnNlIiwiZmlyc3REYXlPZlllYXIiLCJmaXJzdERheU9mV2VlayIsIl93ZWVrZGF5cyIsIl93ZWVrZGF5c01pbiIsIl93ZWVrZGF5c1Nob3J0Iiwid2Vla2RheU5hbWUiLCJfd2Vla2RheXNQYXJzZUV4YWN0IiwiX3dlZWtkYXlzUGFyc2UiLCJfc2hvcnRXZWVrZGF5c1BhcnNlIiwiX21pbldlZWtkYXlzUGFyc2UiLCJfZnVsbFdlZWtkYXlzUGFyc2UiLCJjaGFyQXQiLCJpc0xvd2VyIiwibGFuZ0RhdGEiLCJtYXRoQWJzIiwiYWRkU3VidHJhY3QkMSIsImFic0NlaWwiLCJkYXlzVG9Nb250aHMiLCJtb250aHNUb0RheXMiLCJtYWtlQXMiLCJhbGlhcyIsImFzIiwiYXNNaWxsaXNlY29uZHMiLCJhc1NlY29uZHMiLCJhc01pbnV0ZXMiLCJhc0hvdXJzIiwiYXNEYXlzIiwiYXNXZWVrcyIsImFzTW9udGhzIiwiYXNZZWFycyIsIm1ha2VHZXR0ZXIiLCJ0aHJlc2hvbGRzIiwiYWJzJDEiLCJ0b0lTT1N0cmluZyQxIiwiWSIsIkQiLCJ0b0ZpeGVkIiwidG90YWwiLCJ0b3RhbFNpZ24iLCJ5bVNpZ24iLCJkYXlzU2lnbiIsImhtc1NpZ24iLCJwcm90byQyIiwibW9udGhzRnJvbURheXMiLCJ3aXRoU3VmZml4IiwicG9zTmVnRHVyYXRpb24iLCJyZWxhdGl2ZVRpbWUkMSIsInRvSXNvU3RyaW5nIiwidmVyc2lvbiIsInVwZGF0ZUxvY2FsZSIsInRtcExvY2FsZSIsInJlbGF0aXZlVGltZVJvdW5kaW5nIiwicm91bmRpbmdGdW5jdGlvbiIsInJlbGF0aXZlVGltZVRocmVzaG9sZCIsInRocmVzaG9sZCIsImxpbWl0IiwibXlNb21lbnQiLCJIVE1MNV9GTVQiLCJEQVRFVElNRV9MT0NBTCIsIkRBVEVUSU1FX0xPQ0FMX1NFQ09ORFMiLCJEQVRFVElNRV9MT0NBTF9NUyIsIlRJTUUiLCJUSU1FX1NFQ09ORFMiLCJUSU1FX01TIiwibm9HbG9iYWwiLCJnZXRQcm90byIsImdldFByb3RvdHlwZU9mIiwiY29uY2F0IiwiY2xhc3MydHlwZSIsImhhc093biIsImZuVG9TdHJpbmciLCJPYmplY3RGdW5jdGlvblN0cmluZyIsInN1cHBvcnQiLCJub2RlVHlwZSIsImlzV2luZG93IiwicHJlc2VydmVkU2NyaXB0QXR0cmlidXRlcyIsIm5vTW9kdWxlIiwiRE9NRXZhbCIsImNvZGUiLCJkb2MiLCJub2RlIiwidGV4dCIsImhlYWQiLCJwYXJlbnROb2RlIiwicmVtb3ZlQ2hpbGQiLCJ0b1R5cGUiLCJqUXVlcnkiLCJjb250ZXh0IiwiaW5pdCIsInJ0cmltIiwiaXNBcnJheUxpa2UiLCJqcXVlcnkiLCJjb25zdHJ1Y3RvciIsIm51bSIsInB1c2hTdGFjayIsImVsZW1zIiwibWVyZ2UiLCJwcmV2T2JqZWN0IiwiZWFjaCIsImVsZW0iLCJmaXJzdCIsImVxIiwibGFzdCIsImVuZCIsInNwbGljZSIsIm9wdGlvbnMiLCJjb3B5IiwiY29weUlzQXJyYXkiLCJ0YXJnZXQiLCJkZWVwIiwiaXNQbGFpbk9iamVjdCIsImV4cGFuZG8iLCJyYW5kb20iLCJpc1JlYWR5IiwiZXJyb3IiLCJub29wIiwiQ3RvciIsImlzRW1wdHlPYmplY3QiLCJnbG9iYWxFdmFsIiwidHJpbSIsIm1ha2VBcnJheSIsInJlc3VsdHMiLCJpbkFycmF5IiwiZ3JlcCIsImludmVydCIsImNhbGxiYWNrRXhwZWN0IiwiZ3VpZCIsIlN5bWJvbCIsIml0ZXJhdG9yIiwiU2l6emxlIiwiRXhwciIsImdldFRleHQiLCJpc1hNTCIsInRva2VuaXplIiwiY29tcGlsZSIsInNlbGVjdCIsIm91dGVybW9zdENvbnRleHQiLCJzb3J0SW5wdXQiLCJoYXNEdXBsaWNhdGUiLCJzZXREb2N1bWVudCIsImRvY0VsZW0iLCJkb2N1bWVudElzSFRNTCIsInJidWdneVFTQSIsInJidWdneU1hdGNoZXMiLCJwcmVmZXJyZWREb2MiLCJkaXJydW5zIiwiY2xhc3NDYWNoZSIsImNyZWF0ZUNhY2hlIiwidG9rZW5DYWNoZSIsImNvbXBpbGVyQ2FjaGUiLCJzb3J0T3JkZXIiLCJwb3AiLCJwdXNoX25hdGl2ZSIsImxpc3QiLCJib29sZWFucyIsIndoaXRlc3BhY2UiLCJpZGVudGlmaWVyIiwiYXR0cmlidXRlcyIsInBzZXVkb3MiLCJyd2hpdGVzcGFjZSIsInJjb21tYSIsInJjb21iaW5hdG9ycyIsInJhdHRyaWJ1dGVRdW90ZXMiLCJycHNldWRvIiwicmlkZW50aWZpZXIiLCJtYXRjaEV4cHIiLCJJRCIsIkNMQVNTIiwiVEFHIiwiQVRUUiIsIlBTRVVETyIsIkNISUxEIiwiYm9vbCIsIm5lZWRzQ29udGV4dCIsInJpbnB1dHMiLCJyaGVhZGVyIiwicm5hdGl2ZSIsInJxdWlja0V4cHIiLCJyc2libGluZyIsInJ1bmVzY2FwZSIsImZ1bmVzY2FwZSIsIl8iLCJlc2NhcGVkIiwiZXNjYXBlZFdoaXRlc3BhY2UiLCJoaWdoIiwiU3RyaW5nIiwiZnJvbUNoYXJDb2RlIiwicmNzc2VzY2FwZSIsImZjc3Nlc2NhcGUiLCJjaCIsImFzQ29kZVBvaW50IiwiY2hhckNvZGVBdCIsInVubG9hZEhhbmRsZXIiLCJkaXNhYmxlZEFuY2VzdG9yIiwiYWRkQ29tYmluYXRvciIsImRpc2FibGVkIiwiZGlyIiwiY2hpbGROb2RlcyIsImVscyIsInNlZWQiLCJuaWQiLCJncm91cHMiLCJuZXdTZWxlY3RvciIsIm5ld0NvbnRleHQiLCJvd25lckRvY3VtZW50IiwiZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSIsInFzYSIsIm5vZGVOYW1lIiwidG9TZWxlY3RvciIsInRlc3RDb250ZXh0IiwicXNhRXJyb3IiLCJjYWNoZSIsImNhY2hlTGVuZ3RoIiwibWFya0Z1bmN0aW9uIiwiYXNzZXJ0IiwiZWwiLCJhZGRIYW5kbGUiLCJhdHRycyIsImhhbmRsZXIiLCJhdHRySGFuZGxlIiwic2libGluZ0NoZWNrIiwiY3VyIiwic291cmNlSW5kZXgiLCJuZXh0U2libGluZyIsImNyZWF0ZUlucHV0UHNldWRvIiwiY3JlYXRlQnV0dG9uUHNldWRvIiwiY3JlYXRlRGlzYWJsZWRQc2V1ZG8iLCJpc0Rpc2FibGVkIiwiY3JlYXRlUG9zaXRpb25hbFBzZXVkbyIsImFyZ3VtZW50IiwibWF0Y2hJbmRleGVzIiwiZG9jdW1lbnRFbGVtZW50IiwiaGFzQ29tcGFyZSIsInN1YldpbmRvdyIsImRlZmF1bHRWaWV3IiwidG9wIiwiYWRkRXZlbnRMaXN0ZW5lciIsImF0dGFjaEV2ZW50IiwiY3JlYXRlQ29tbWVudCIsImdldEJ5SWQiLCJnZXRFbGVtZW50c0J5TmFtZSIsImF0dHJJZCIsImZpbmQiLCJnZXRBdHRyaWJ1dGVOb2RlIiwidGFnIiwibWF0Y2hlc1NlbGVjdG9yIiwid2Via2l0TWF0Y2hlc1NlbGVjdG9yIiwibW96TWF0Y2hlc1NlbGVjdG9yIiwib01hdGNoZXNTZWxlY3RvciIsIm1zTWF0Y2hlc1NlbGVjdG9yIiwiZGlzY29ubmVjdGVkTWF0Y2giLCJjb21wYXJlRG9jdW1lbnRQb3NpdGlvbiIsImFkb3duIiwiYnVwIiwiY29tcGFyZSIsInNvcnREZXRhY2hlZCIsImF1cCIsImFwIiwiYnAiLCJ1bnNoaWZ0IiwiZXhwciIsImVsZW1lbnRzIiwiYXR0ciIsInNwZWNpZmllZCIsImVzY2FwZSIsInNlbCIsInVuaXF1ZVNvcnQiLCJkdXBsaWNhdGVzIiwiZGV0ZWN0RHVwbGljYXRlcyIsInNvcnRTdGFibGUiLCJ0ZXh0Q29udGVudCIsImZpcnN0Q2hpbGQiLCJub2RlVmFsdWUiLCJzZWxlY3RvcnMiLCJjcmVhdGVQc2V1ZG8iLCJyZWxhdGl2ZSIsIj4iLCIgIiwiKyIsIn4iLCJwcmVGaWx0ZXIiLCJleGNlc3MiLCJ1bnF1b3RlZCIsIm5vZGVOYW1lU2VsZWN0b3IiLCJwYXR0ZXJuIiwib3BlcmF0b3IiLCJjaGVjayIsIndoYXQiLCJzaW1wbGUiLCJmb3J3YXJkIiwib2ZUeXBlIiwieG1sIiwidW5pcXVlQ2FjaGUiLCJvdXRlckNhY2hlIiwibm9kZUluZGV4IiwicGFyZW50IiwidXNlQ2FjaGUiLCJsYXN0Q2hpbGQiLCJ1bmlxdWVJRCIsInBzZXVkbyIsInNldEZpbHRlcnMiLCJpZHgiLCJub3QiLCJ1bm1hdGNoZWQiLCJoYXMiLCJpbm5lclRleHQiLCJlbGVtTGFuZyIsImhhc2giLCJyb290IiwiZm9jdXMiLCJhY3RpdmVFbGVtZW50IiwiaGFzRm9jdXMiLCJ0YWJJbmRleCIsImVuYWJsZWQiLCJzZWxlY3RlZCIsInNlbGVjdGVkSW5kZXgiLCJoZWFkZXIiLCJldmVuIiwib2RkIiwibHQiLCJndCIsInJhZGlvIiwiY2hlY2tib3giLCJmaWxlIiwicGFzc3dvcmQiLCJpbWFnZSIsInN1Ym1pdCIsInJlc2V0IiwiY29tYmluYXRvciIsInNraXAiLCJjaGVja05vbkVsZW1lbnRzIiwiZG9uZU5hbWUiLCJvbGRDYWNoZSIsIm5ld0NhY2hlIiwiZWxlbWVudE1hdGNoZXIiLCJtYXRjaGVycyIsImNvbmRlbnNlIiwibmV3VW5tYXRjaGVkIiwibWFwcGVkIiwic2V0TWF0Y2hlciIsInBvc3RGaWx0ZXIiLCJwb3N0RmluZGVyIiwicG9zdFNlbGVjdG9yIiwicHJlTWFwIiwicG9zdE1hcCIsInByZWV4aXN0aW5nIiwiY29udGV4dHMiLCJtdWx0aXBsZUNvbnRleHRzIiwibWF0Y2hlckluIiwibWF0Y2hlck91dCIsIm1hdGNoZXJGcm9tVG9rZW5zIiwiY2hlY2tDb250ZXh0IiwibGVhZGluZ1JlbGF0aXZlIiwiaW1wbGljaXRSZWxhdGl2ZSIsIm1hdGNoQ29udGV4dCIsIm1hdGNoQW55Q29udGV4dCIsImZpbHRlcnMiLCJwYXJzZU9ubHkiLCJzb0ZhciIsInByZUZpbHRlcnMiLCJjYWNoZWQiLCJzZXRNYXRjaGVycyIsImVsZW1lbnRNYXRjaGVycyIsImJ5U2V0IiwiYnlFbGVtZW50Iiwic3VwZXJNYXRjaGVyIiwib3V0ZXJtb3N0IiwibWF0Y2hlZENvdW50Iiwic2V0TWF0Y2hlZCIsImNvbnRleHRCYWNrdXAiLCJkaXJydW5zVW5pcXVlIiwibWF0Y2hlckZyb21Hcm91cE1hdGNoZXJzIiwiY29tcGlsZWQiLCJkZWZhdWx0VmFsdWUiLCJ1bmlxdWUiLCJpc1hNTERvYyIsImVzY2FwZVNlbGVjdG9yIiwidW50aWwiLCJ0cnVuY2F0ZSIsImlzIiwic2libGluZ3MiLCJuIiwicm5lZWRzQ29udGV4dCIsInJzaW5nbGVUYWciLCJ3aW5ub3ciLCJxdWFsaWZpZXIiLCJzZWxmIiwicm9vdGpRdWVyeSIsInBhcnNlSFRNTCIsInJlYWR5IiwicnBhcmVudHNwcmV2IiwiZ3VhcmFudGVlZFVuaXF1ZSIsImNoaWxkcmVuIiwiY29udGVudHMiLCJwcmV2Iiwic2libGluZyIsInRhcmdldHMiLCJjbG9zZXN0IiwicHJldkFsbCIsImFkZEJhY2siLCJwYXJlbnRzIiwicGFyZW50c1VudGlsIiwibmV4dEFsbCIsIm5leHRVbnRpbCIsInByZXZVbnRpbCIsImNvbnRlbnREb2N1bWVudCIsImNvbnRlbnQiLCJyZXZlcnNlIiwicm5vdGh0bWx3aGl0ZSIsIklkZW50aXR5IiwidiIsIlRocm93ZXIiLCJleCIsImFkb3B0VmFsdWUiLCJyZXNvbHZlIiwicmVqZWN0Iiwibm9WYWx1ZSIsInByb21pc2UiLCJ0aGVuIiwiQ2FsbGJhY2tzIiwib2JqZWN0IiwiZmxhZyIsImNyZWF0ZU9wdGlvbnMiLCJmaXJpbmciLCJtZW1vcnkiLCJmaXJlZCIsImxvY2tlZCIsInF1ZXVlIiwiZmlyaW5nSW5kZXgiLCJmaXJlIiwib25jZSIsInN0b3BPbkZhbHNlIiwiZGlzYWJsZSIsImxvY2siLCJmaXJlV2l0aCIsIkRlZmVycmVkIiwidHVwbGVzIiwiYWx3YXlzIiwiZGVmZXJyZWQiLCJjYXRjaCIsInBpcGUiLCJmbnMiLCJuZXdEZWZlciIsInR1cGxlIiwicmV0dXJuZWQiLCJwcm9ncmVzcyIsIm5vdGlmeSIsIm9uRnVsZmlsbGVkIiwib25SZWplY3RlZCIsIm9uUHJvZ3Jlc3MiLCJtYXhEZXB0aCIsImRlcHRoIiwic3BlY2lhbCIsIm1pZ2h0VGhyb3ciLCJUeXBlRXJyb3IiLCJub3RpZnlXaXRoIiwicmVzb2x2ZVdpdGgiLCJwcm9jZXNzIiwiZXhjZXB0aW9uSG9vayIsInN0YWNrVHJhY2UiLCJyZWplY3RXaXRoIiwiZ2V0U3RhY2tIb29rIiwic2V0VGltZW91dCIsInN0YXRlU3RyaW5nIiwid2hlbiIsInNpbmdsZVZhbHVlIiwicmVtYWluaW5nIiwicmVzb2x2ZUNvbnRleHRzIiwicmVzb2x2ZVZhbHVlcyIsIm1hc3RlciIsInVwZGF0ZUZ1bmMiLCJyZXJyb3JOYW1lcyIsInJlYWR5RXhjZXB0aW9uIiwicmVhZHlMaXN0IiwiY29tcGxldGVkIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsInJlYWR5V2FpdCIsIndhaXQiLCJkb1Njcm9sbCIsImFjY2VzcyIsImNoYWluYWJsZSIsImVtcHR5R2V0IiwicmF3IiwiYnVsayIsInJtc1ByZWZpeCIsInJkYXNoQWxwaGEiLCJmY2FtZWxDYXNlIiwiYWxsIiwibGV0dGVyIiwiY2FtZWxDYXNlIiwiYWNjZXB0RGF0YSIsIm93bmVyIiwiRGF0YSIsInVpZCIsImRlZmluZVByb3BlcnR5IiwiY29uZmlndXJhYmxlIiwiaGFzRGF0YSIsImRhdGFQcml2IiwiZGF0YVVzZXIiLCJyYnJhY2UiLCJybXVsdGlEYXNoIiwiZGF0YUF0dHIiLCJwYXJzZSIsImdldERhdGEiLCJyZW1vdmVEYXRhIiwiX3JlbW92ZURhdGEiLCJkZXF1ZXVlIiwic3RhcnRMZW5ndGgiLCJfcXVldWVIb29rcyIsImNsZWFyUXVldWUiLCJjb3VudCIsInBudW0iLCJyY3NzTnVtIiwiY3NzRXhwYW5kIiwiaXNIaWRkZW5XaXRoaW5UcmVlIiwic3R5bGUiLCJkaXNwbGF5IiwiY3NzIiwic3dhcCIsIm9sZCIsImFkanVzdENTUyIsInZhbHVlUGFydHMiLCJ0d2VlbiIsImFkanVzdGVkIiwic2NhbGUiLCJtYXhJdGVyYXRpb25zIiwiY3VycmVudFZhbHVlIiwiaW5pdGlhbCIsImNzc051bWJlciIsImluaXRpYWxJblVuaXQiLCJkZWZhdWx0RGlzcGxheU1hcCIsImdldERlZmF1bHREaXNwbGF5IiwiYm9keSIsInNob3dIaWRlIiwic2hvdyIsImhpZGUiLCJ0b2dnbGUiLCJyY2hlY2thYmxlVHlwZSIsInJ0YWdOYW1lIiwicnNjcmlwdFR5cGUiLCJ3cmFwTWFwIiwib3B0aW9uIiwidGhlYWQiLCJjb2wiLCJ0ciIsInRkIiwiX2RlZmF1bHQiLCJnZXRBbGwiLCJzZXRHbG9iYWxFdmFsIiwicmVmRWxlbWVudHMiLCJvcHRncm91cCIsInRib2R5IiwidGZvb3QiLCJjb2xncm91cCIsImNhcHRpb24iLCJ0aCIsImRpdiIsInJodG1sIiwiYnVpbGRGcmFnbWVudCIsInNjcmlwdHMiLCJzZWxlY3Rpb24iLCJpZ25vcmVkIiwid3JhcCIsImZyYWdtZW50IiwiY3JlYXRlRG9jdW1lbnRGcmFnbWVudCIsIm5vZGVzIiwiaHRtbFByZWZpbHRlciIsImNyZWF0ZVRleHROb2RlIiwiY2hlY2tDbG9uZSIsImNsb25lTm9kZSIsIm5vQ2xvbmVDaGVja2VkIiwicmtleUV2ZW50Iiwicm1vdXNlRXZlbnQiLCJydHlwZW5hbWVzcGFjZSIsInJldHVyblRydWUiLCJyZXR1cm5GYWxzZSIsInNhZmVBY3RpdmVFbGVtZW50IiwiZXJyIiwib24iLCJ0eXBlcyIsIm9uZSIsIm9yaWdGbiIsImV2ZW50Iiwib2ZmIiwiaGFuZGxlT2JqSW4iLCJldmVudEhhbmRsZSIsImV2ZW50cyIsImhhbmRsZU9iaiIsImhhbmRsZXJzIiwibmFtZXNwYWNlcyIsIm9yaWdUeXBlIiwiZWxlbURhdGEiLCJoYW5kbGUiLCJ0cmlnZ2VyZWQiLCJkaXNwYXRjaCIsImRlbGVnYXRlVHlwZSIsImJpbmRUeXBlIiwibmFtZXNwYWNlIiwiZGVsZWdhdGVDb3VudCIsInNldHVwIiwibWFwcGVkVHlwZXMiLCJvcmlnQ291bnQiLCJ0ZWFyZG93biIsInJlbW92ZUV2ZW50IiwibmF0aXZlRXZlbnQiLCJoYW5kbGVyUXVldWUiLCJmaXgiLCJkZWxlZ2F0ZVRhcmdldCIsInByZURpc3BhdGNoIiwiaXNQcm9wYWdhdGlvblN0b3BwZWQiLCJjdXJyZW50VGFyZ2V0IiwiaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQiLCJybmFtZXNwYWNlIiwicHJldmVudERlZmF1bHQiLCJzdG9wUHJvcGFnYXRpb24iLCJwb3N0RGlzcGF0Y2giLCJtYXRjaGVkSGFuZGxlcnMiLCJtYXRjaGVkU2VsZWN0b3JzIiwiYWRkUHJvcCIsImhvb2siLCJFdmVudCIsImVudW1lcmFibGUiLCJvcmlnaW5hbEV2ZW50Iiwid3JpdGFibGUiLCJsb2FkIiwibm9CdWJibGUiLCJ0cmlnZ2VyIiwiYmx1ciIsImNsaWNrIiwiYmVmb3JldW5sb2FkIiwicmV0dXJuVmFsdWUiLCJwcm9wcyIsImlzRGVmYXVsdFByZXZlbnRlZCIsImRlZmF1bHRQcmV2ZW50ZWQiLCJyZWxhdGVkVGFyZ2V0IiwidGltZVN0YW1wIiwiaXNTaW11bGF0ZWQiLCJzdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24iLCJhbHRLZXkiLCJidWJibGVzIiwiY2FuY2VsYWJsZSIsImNoYW5nZWRUb3VjaGVzIiwiY3RybEtleSIsImRldGFpbCIsImV2ZW50UGhhc2UiLCJtZXRhS2V5IiwicGFnZVgiLCJwYWdlWSIsInNoaWZ0S2V5IiwidmlldyIsImNoYXIiLCJjaGFyQ29kZSIsImtleUNvZGUiLCJjbGllbnRYIiwiY2xpZW50WSIsIm9mZnNldFgiLCJvZmZzZXRZIiwicG9pbnRlcklkIiwicG9pbnRlclR5cGUiLCJzY3JlZW5YIiwic2NyZWVuWSIsInRhcmdldFRvdWNoZXMiLCJ0b0VsZW1lbnQiLCJ0b3VjaGVzIiwid2hpY2giLCJtb3VzZWVudGVyIiwibW91c2VsZWF2ZSIsInBvaW50ZXJlbnRlciIsInBvaW50ZXJsZWF2ZSIsIm9yaWciLCJyZWxhdGVkIiwicnhodG1sVGFnIiwicm5vSW5uZXJodG1sIiwicmNoZWNrZWQiLCJyY2xlYW5TY3JpcHQiLCJtYW5pcHVsYXRpb25UYXJnZXQiLCJkaXNhYmxlU2NyaXB0IiwicmVzdG9yZVNjcmlwdCIsImNsb25lQ29weUV2ZW50IiwiZGVzdCIsInBkYXRhT2xkIiwicGRhdGFDdXIiLCJ1ZGF0YU9sZCIsInVkYXRhQ3VyIiwiZG9tTWFuaXAiLCJjb2xsZWN0aW9uIiwiaGFzU2NyaXB0cyIsImlOb0Nsb25lIiwidmFsdWVJc0Z1bmN0aW9uIiwiaHRtbCIsIl9ldmFsVXJsIiwia2VlcERhdGEiLCJjbGVhbkRhdGEiLCJkYXRhQW5kRXZlbnRzIiwiZGVlcERhdGFBbmRFdmVudHMiLCJzcmNFbGVtZW50cyIsImRlc3RFbGVtZW50cyIsImluUGFnZSIsImRldGFjaCIsImFwcGVuZCIsInByZXBlbmQiLCJpbnNlcnRCZWZvcmUiLCJiZWZvcmUiLCJhZnRlciIsInJlcGxhY2VXaXRoIiwicmVwbGFjZUNoaWxkIiwiYXBwZW5kVG8iLCJwcmVwZW5kVG8iLCJpbnNlcnRBZnRlciIsInJlcGxhY2VBbGwiLCJvcmlnaW5hbCIsImluc2VydCIsInJudW1ub25weCIsImdldFN0eWxlcyIsIm9wZW5lciIsImdldENvbXB1dGVkU3R5bGUiLCJyYm94U3R5bGUiLCJjdXJDU1MiLCJjb21wdXRlZCIsIndpZHRoIiwibWluV2lkdGgiLCJtYXhXaWR0aCIsImdldFByb3BlcnR5VmFsdWUiLCJwaXhlbEJveFN0eWxlcyIsImFkZEdldEhvb2tJZiIsImNvbmRpdGlvbkZuIiwiaG9va0ZuIiwiY29tcHV0ZVN0eWxlVGVzdHMiLCJjb250YWluZXIiLCJjc3NUZXh0IiwiZGl2U3R5bGUiLCJwaXhlbFBvc2l0aW9uVmFsIiwicmVsaWFibGVNYXJnaW5MZWZ0VmFsIiwicm91bmRQaXhlbE1lYXN1cmVzIiwibWFyZ2luTGVmdCIsInJpZ2h0IiwicGl4ZWxCb3hTdHlsZXNWYWwiLCJib3hTaXppbmdSZWxpYWJsZVZhbCIsInBvc2l0aW9uIiwic2Nyb2xsYm94U2l6ZVZhbCIsIm9mZnNldFdpZHRoIiwibWVhc3VyZSIsImJhY2tncm91bmRDbGlwIiwiY2xlYXJDbG9uZVN0eWxlIiwiYm94U2l6aW5nUmVsaWFibGUiLCJwaXhlbFBvc2l0aW9uIiwicmVsaWFibGVNYXJnaW5MZWZ0Iiwic2Nyb2xsYm94U2l6ZSIsInJkaXNwbGF5c3dhcCIsInJjdXN0b21Qcm9wIiwiY3NzU2hvdyIsInZpc2liaWxpdHkiLCJjc3NOb3JtYWxUcmFuc2Zvcm0iLCJsZXR0ZXJTcGFjaW5nIiwiZm9udFdlaWdodCIsImNzc1ByZWZpeGVzIiwiZW1wdHlTdHlsZSIsImZpbmFsUHJvcE5hbWUiLCJjc3NQcm9wcyIsImNhcE5hbWUiLCJ2ZW5kb3JQcm9wTmFtZSIsInNldFBvc2l0aXZlTnVtYmVyIiwiYm94TW9kZWxBZGp1c3RtZW50IiwiZGltZW5zaW9uIiwiYm94IiwiaXNCb3JkZXJCb3giLCJzdHlsZXMiLCJjb21wdXRlZFZhbCIsImV4dHJhIiwiZ2V0V2lkdGhPckhlaWdodCIsInZhbHVlSXNCb3JkZXJCb3giLCJUd2VlbiIsImVhc2luZyIsImNzc0hvb2tzIiwib3BhY2l0eSIsImFuaW1hdGlvbkl0ZXJhdGlvbkNvdW50IiwiY29sdW1uQ291bnQiLCJmaWxsT3BhY2l0eSIsImZsZXhHcm93IiwiZmxleFNocmluayIsImxpbmVIZWlnaHQiLCJvcmRlciIsIm9ycGhhbnMiLCJ3aWRvd3MiLCJ6SW5kZXgiLCJ6b29tIiwib3JpZ05hbWUiLCJpc0N1c3RvbVByb3AiLCJzZXRQcm9wZXJ0eSIsImdldENsaWVudFJlY3RzIiwiZ2V0Qm91bmRpbmdDbGllbnRSZWN0IiwibGVmdCIsIm1hcmdpbiIsInBhZGRpbmciLCJib3JkZXIiLCJleHBhbmQiLCJleHBhbmRlZCIsInByb3BIb29rcyIsInJ1biIsInBlcmNlbnQiLCJlYXNlZCIsInN0ZXAiLCJmeCIsInNjcm9sbFRvcCIsInNjcm9sbExlZnQiLCJsaW5lYXIiLCJwIiwic3dpbmciLCJjb3MiLCJQSSIsImZ4Tm93IiwiaW5Qcm9ncmVzcyIsInJmeHR5cGVzIiwicnJ1biIsInNjaGVkdWxlIiwiaGlkZGVuIiwicmVxdWVzdEFuaW1hdGlvbkZyYW1lIiwiaW50ZXJ2YWwiLCJ0aWNrIiwiY3JlYXRlRnhOb3ciLCJnZW5GeCIsImluY2x1ZGVXaWR0aCIsImhlaWdodCIsImNyZWF0ZVR3ZWVuIiwiYW5pbWF0aW9uIiwiQW5pbWF0aW9uIiwidHdlZW5lcnMiLCJwcm9wZXJ0aWVzIiwic3RvcHBlZCIsInByZWZpbHRlcnMiLCJjdXJyZW50VGltZSIsInN0YXJ0VGltZSIsInR3ZWVucyIsIm9wdHMiLCJzcGVjaWFsRWFzaW5nIiwib3JpZ2luYWxQcm9wZXJ0aWVzIiwib3JpZ2luYWxPcHRpb25zIiwiZ290b0VuZCIsInByb3BGaWx0ZXIiLCJiaW5kIiwiY29tcGxldGUiLCJ0aW1lciIsImFuaW0iLCIqIiwidHdlZW5lciIsIm9sZGZpcmUiLCJwcm9wVHdlZW4iLCJyZXN0b3JlRGlzcGxheSIsImlzQm94IiwiZGF0YVNob3ciLCJ1bnF1ZXVlZCIsIm92ZXJmbG93WCIsIm92ZXJmbG93WSIsInByZWZpbHRlciIsInNwZWVkIiwib3B0Iiwic3BlZWRzIiwiZmFkZVRvIiwiYW5pbWF0ZSIsIm9wdGFsbCIsImRvQW5pbWF0aW9uIiwiZmluaXNoIiwic3RvcFF1ZXVlIiwidGltZXJzIiwiY3NzRm4iLCJzbGlkZURvd24iLCJzbGlkZVVwIiwic2xpZGVUb2dnbGUiLCJmYWRlSW4iLCJmYWRlT3V0IiwiZmFkZVRvZ2dsZSIsInNsb3ciLCJmYXN0IiwiZGVsYXkiLCJjbGVhclRpbWVvdXQiLCJjaGVja09uIiwib3B0U2VsZWN0ZWQiLCJyYWRpb1ZhbHVlIiwiYm9vbEhvb2siLCJyZW1vdmVBdHRyIiwiblR5cGUiLCJhdHRySG9va3MiLCJhdHRyTmFtZXMiLCJsb3dlcmNhc2VOYW1lIiwicmZvY3VzYWJsZSIsInJjbGlja2FibGUiLCJzdHJpcEFuZENvbGxhcHNlIiwiZ2V0Q2xhc3MiLCJjbGFzc2VzVG9BcnJheSIsInJlbW92ZVByb3AiLCJwcm9wRml4IiwidGFiaW5kZXgiLCJmb3IiLCJjbGFzcyIsImFkZENsYXNzIiwiY2xhc3NlcyIsImN1clZhbHVlIiwiY2xhenoiLCJmaW5hbFZhbHVlIiwidG9nZ2xlQ2xhc3MiLCJzdGF0ZVZhbCIsImlzVmFsaWRWYWx1ZSIsImNsYXNzTmFtZXMiLCJoYXNDbGFzcyIsInJyZXR1cm4iLCJ2YWxIb29rcyIsIm9wdGlvblNldCIsImZvY3VzaW4iLCJyZm9jdXNNb3JwaCIsInN0b3BQcm9wYWdhdGlvbkNhbGxiYWNrIiwib25seUhhbmRsZXJzIiwiYnViYmxlVHlwZSIsIm9udHlwZSIsImxhc3RFbGVtZW50IiwiZXZlbnRQYXRoIiwiaXNUcmlnZ2VyIiwicGFyZW50V2luZG93Iiwic2ltdWxhdGUiLCJ0cmlnZ2VySGFuZGxlciIsImF0dGFjaGVzIiwibm9uY2UiLCJycXVlcnkiLCJwYXJzZVhNTCIsIkRPTVBhcnNlciIsInBhcnNlRnJvbVN0cmluZyIsInJicmFja2V0IiwickNSTEYiLCJyc3VibWl0dGVyVHlwZXMiLCJyc3VibWl0dGFibGUiLCJidWlsZFBhcmFtcyIsInRyYWRpdGlvbmFsIiwicGFyYW0iLCJ2YWx1ZU9yRnVuY3Rpb24iLCJlbmNvZGVVUklDb21wb25lbnQiLCJzZXJpYWxpemUiLCJzZXJpYWxpemVBcnJheSIsInIyMCIsInJoYXNoIiwicmFudGlDYWNoZSIsInJoZWFkZXJzIiwicm5vQ29udGVudCIsInJwcm90b2NvbCIsInRyYW5zcG9ydHMiLCJhbGxUeXBlcyIsIm9yaWdpbkFuY2hvciIsImFkZFRvUHJlZmlsdGVyc09yVHJhbnNwb3J0cyIsInN0cnVjdHVyZSIsImRhdGFUeXBlRXhwcmVzc2lvbiIsImRhdGFUeXBlcyIsImluc3BlY3RQcmVmaWx0ZXJzT3JUcmFuc3BvcnRzIiwianFYSFIiLCJpbnNwZWN0ZWQiLCJzZWVraW5nVHJhbnNwb3J0IiwicHJlZmlsdGVyT3JGYWN0b3J5IiwiZGF0YVR5cGVPclRyYW5zcG9ydCIsImFqYXhFeHRlbmQiLCJmbGF0T3B0aW9ucyIsImFqYXhTZXR0aW5ncyIsImFjdGl2ZSIsImxhc3RNb2RpZmllZCIsImV0YWciLCJwcm90b2NvbCIsInByb2Nlc3NEYXRhIiwiYXN5bmMiLCJhY2NlcHRzIiwianNvbiIsInJlc3BvbnNlRmllbGRzIiwiY29udmVydGVycyIsIiogdGV4dCIsInRleHQgaHRtbCIsInRleHQganNvbiIsInRleHQgeG1sIiwiYWpheFNldHVwIiwic2V0dGluZ3MiLCJhamF4UHJlZmlsdGVyIiwiYWpheFRyYW5zcG9ydCIsInRyYW5zcG9ydCIsImNhY2hlVVJMIiwicmVzcG9uc2VIZWFkZXJzU3RyaW5nIiwicmVzcG9uc2VIZWFkZXJzIiwidGltZW91dFRpbWVyIiwidXJsQW5jaG9yIiwiZmlyZUdsb2JhbHMiLCJ1bmNhY2hlZCIsImNhbGxiYWNrQ29udGV4dCIsImdsb2JhbEV2ZW50Q29udGV4dCIsImNvbXBsZXRlRGVmZXJyZWQiLCJzdGF0dXNDb2RlIiwicmVxdWVzdEhlYWRlcnMiLCJyZXF1ZXN0SGVhZGVyc05hbWVzIiwic3RyQWJvcnQiLCJnZXRSZXNwb25zZUhlYWRlciIsImdldEFsbFJlc3BvbnNlSGVhZGVycyIsInNldFJlcXVlc3RIZWFkZXIiLCJvdmVycmlkZU1pbWVUeXBlIiwibWltZVR5cGUiLCJzdGF0dXMiLCJhYm9ydCIsInN0YXR1c1RleHQiLCJmaW5hbFRleHQiLCJjcm9zc0RvbWFpbiIsImhvc3QiLCJoYXNDb250ZW50IiwiaWZNb2RpZmllZCIsImJlZm9yZVNlbmQiLCJzdWNjZXNzIiwibmF0aXZlU3RhdHVzVGV4dCIsInJlc3BvbnNlcyIsImlzU3VjY2VzcyIsInJlc3BvbnNlIiwibW9kaWZpZWQiLCJjdCIsImZpbmFsRGF0YVR5cGUiLCJmaXJzdERhdGFUeXBlIiwiYWpheEhhbmRsZVJlc3BvbnNlcyIsImNvbnYyIiwiY3VycmVudCIsImNvbnYiLCJkYXRhRmlsdGVyIiwidGhyb3dzIiwiYWpheENvbnZlcnQiLCJnZXRKU09OIiwid3JhcEFsbCIsImZpcnN0RWxlbWVudENoaWxkIiwid3JhcElubmVyIiwiaHRtbElzRnVuY3Rpb24iLCJ1bndyYXAiLCJ2aXNpYmxlIiwib2Zmc2V0SGVpZ2h0IiwieGhyIiwiWE1MSHR0cFJlcXVlc3QiLCJ4aHJTdWNjZXNzU3RhdHVzIiwiMCIsIjEyMjMiLCJ4aHJTdXBwb3J0ZWQiLCJjb3JzIiwiZXJyb3JDYWxsYmFjayIsIm9wZW4iLCJ1c2VybmFtZSIsInhockZpZWxkcyIsIm9ubG9hZCIsIm9uZXJyb3IiLCJvbmFib3J0Iiwib250aW1lb3V0IiwicmVzcG9uc2VUeXBlIiwicmVzcG9uc2VUZXh0IiwiYmluYXJ5IiwidGV4dCBzY3JpcHQiLCJjaGFyc2V0Iiwic2NyaXB0Q2hhcnNldCIsImV2dCIsIm9sZENhbGxiYWNrcyIsInJqc29ucCIsImpzb25wIiwianNvbnBDYWxsYmFjayIsIm9yaWdpbmFsU2V0dGluZ3MiLCJjYWxsYmFja05hbWUiLCJvdmVyd3JpdHRlbiIsInJlc3BvbnNlQ29udGFpbmVyIiwianNvblByb3AiLCJjcmVhdGVIVE1MRG9jdW1lbnQiLCJpbXBsZW1lbnRhdGlvbiIsImtlZXBTY3JpcHRzIiwicGFyc2VkIiwicGFyYW1zIiwiYW5pbWF0ZWQiLCJzZXRPZmZzZXQiLCJjdXJQb3NpdGlvbiIsImN1ckxlZnQiLCJjdXJDU1NUb3AiLCJjdXJUb3AiLCJjdXJPZmZzZXQiLCJjdXJDU1NMZWZ0IiwiY3VyRWxlbSIsInVzaW5nIiwicmVjdCIsIndpbiIsInBhZ2VZT2Zmc2V0IiwicGFnZVhPZmZzZXQiLCJvZmZzZXRQYXJlbnQiLCJwYXJlbnRPZmZzZXQiLCJzY3JvbGxUbyIsIkhlaWdodCIsIldpZHRoIiwiIiwiZGVmYXVsdEV4dHJhIiwiZnVuY05hbWUiLCJob3ZlciIsImZuT3ZlciIsImZuT3V0IiwidW5iaW5kIiwiZGVsZWdhdGUiLCJ1bmRlbGVnYXRlIiwicHJveHkiLCJob2xkUmVhZHkiLCJob2xkIiwicGFyc2VKU09OIiwiaXNOdW1lcmljIiwiX2pRdWVyeSIsIl8kIiwibm9Db25mbGljdCIsImNhY2hlZEd1ZXNzIiwiem9uZXMiLCJsaW5rcyIsImd1ZXNzZXMiLCJtb21lbnRWZXJzaW9uIiwibWFqb3IiLCJtaW5vciIsImNoYXJDb2RlVG9JbnQiLCJ1bnBhY2tCYXNlNjAiLCJ3aG9sZSIsImZyYWN0aW9uYWwiLCJtdWx0aXBsaWVyIiwiYXJyYXlUb0ludCIsIm1hcEluZGljZXMiLCJpbmRpY2VzIiwidW5wYWNrIiwib2Zmc2V0cyIsInVudGlscyIsIkluZmluaXR5IiwiaW50VG9VbnRpbCIsImFiYnJzIiwicG9wdWxhdGlvbiIsIlpvbmUiLCJwYWNrZWRTdHJpbmciLCJfc2V0IiwiT2Zmc2V0QXQiLCJhdCIsInRpbWVTdHJpbmciLCJ0b1RpbWVTdHJpbmciLCJab25lU2NvcmUiLCJvZmZzZXRTY29yZSIsImFiYnJTY29yZSIsImZpbmRDaGFuZ2UiLCJsb3ciLCJtaWQiLCJzb3J0Wm9uZVNjb3JlcyIsImFkZFRvR3Vlc3NlcyIsImd1ZXNzZXNGb3JVc2VyT2Zmc2V0cyIsImd1ZXNzZXNPZmZzZXQiLCJvZmZzZXRzTGVuZ3RoIiwiZmlsdGVyZWRHdWVzc2VzIiwicmVidWlsZEd1ZXNzIiwiaW50bE5hbWUiLCJJbnRsIiwiRGF0ZVRpbWVGb3JtYXQiLCJyZXNvbHZlZE9wdGlvbnMiLCJ0aW1lWm9uZSIsIm5vcm1hbGl6ZU5hbWUiLCJsb2dFcnJvciIsInpvbmVTY29yZSIsImNoYW5nZSIsInN0YXJ0WWVhciIsInVzZXJPZmZzZXRzIiwiem9uZVNjb3JlcyIsImdldFpvbmUiLCJzY29yZU9mZnNldEF0IiwiYWRkWm9uZSIsInBhY2tlZCIsIm5vcm1hbGl6ZWQiLCJjYWxsZXIiLCJsaW5rIiwiYWRkTGluayIsIm5vcm1hbDAiLCJub3JtYWwxIiwibG9hZERhdGEiLCJ0eiIsImRhdGFWZXJzaW9uIiwibmVlZHNPZmZzZXQiLCJpc1VuaXhUaW1lc3RhbXAiLCJ1bnBhY2tlZCIsIl9pbmRleCIsInRpbWVzdGFtcCIsIm9mZnNldE5leHQiLCJvZmZzZXRQcmV2IiwibW92ZUFtYmlndW91c0ZvcndhcmQiLCJtb3ZlSW52YWxpZEZvcndhcmQiLCJvZmZzZXRBdCIsIl96b25lcyIsIl9saW5rcyIsIl9uYW1lcyIsInpvbmVFeGlzdHMiLCJkaWRTaG93RXJyb3IiLCJndWVzcyIsImlnbm9yZUNhY2hlIiwiYWJicldyYXAiLCJfeiIsImRlZmF1bHRab25lIiwic2V0RGVmYXVsdCIsImxhc3RUaW1lIiwidmVuZG9ycyIsImNhbmNlbEFuaW1hdGlvbkZyYW1lIiwiY3VyclRpbWUiLCJ0aW1lVG9DYWxsIiwiX3NldHRpbmdzIiwiY3Vyc29yQW5pbWF0aW9uUGF1c2VkIiwib3BhY2l0eUluY3JlYXNpbmciLCJjdXJyZW50T3BhY2l0eSIsImRlbGF5ZWRRdWUiLCJkZWxheUl0ZW1zQ291bnQiLCJldmVudFF1ZSIsImNhbGxlZEV2ZW50cyIsImV2ZW50UnVubmluZyIsImRlbGF5RXhlY3V0aW9uIiwiZnBzIiwidHlwaW5nRnJhbWVDb3VudCIsInN0cmluZ1RvVHlwZUhUTUxBcnJheSIsImN1cnJlbnRUeXBlZENoYXJhY3RlcnMiLCJ0eXBpbmciLCJ1c2VkSURzIiwiY2hhckFtb3VudFRvRGVsZXRlIiwidXNlck9wdGlvbnMiLCJldmVudExvb3BSZXJ1biIsImRlZmF1bHRfb3B0aW9ucyIsInN0cmluZ3MiLCJjdXJzb3JDbGFzc05hbWUiLCJjdXJzb3IiLCJhbmltYXRlQ3Vyc29yIiwiYmxpbmtTcGVlZCIsImNoYXJTcGFuQ2xhc3NOYW1lIiwid3JhcHBlckNsYXNzTmFtZSIsImF1dG9TdGFydCIsIl9zZXR1cE9wdGlvbnMiLCJfc2V0dXBUeXB3cml0ZXJXcmFwcGVyIiwiX3N0YXJ0Q3Vyc29yQW5pbWF0aW9uIiwidHlwZU91dEFsbFN0cmluZ3MiLCJUeXBld3JpdGVyUHJvdG90eXBlIiwiX2FkZFRvRXZlbnRRdWUiLCJfc3RvcEV2ZW50TG9vcCIsIl9zdGFydEV2ZW50TG9vcCIsInJlcnVuIiwiX3JlcnVuQ2FsbGVkRXZlbnRzIiwic3RyaW5nX2NoYXJzIiwiX2dldENoYXJhY3RlcnMiLCJfdHlwZUNoYXJhY3RlcnMiLCJkZWxldGVBbGwiLCJfZGVsZXRlQ2hhcnMiLCJhbW91bnQiLCJfcGF1c2VGb3IiLCJjaGFyYWN0ZXJzX2FycmF5IiwiX2dldFN0cmluZ3NBc0NoYXJzQXJyYXkiLCJfcmFuZG9tSW50ZWdlciIsIm5ld19zZXR0aW5ncyIsIl9jaGFuZ2VTZXR0aW5ncyIsImNoYW5nZUJsaW5rU3BlZWQiLCJuZXdfc3BlZWQiLCJjaGFuZ2VUeXBpbmdTcGVlZCIsImNoYW5nZURlbGV0ZVNwZWVkIiwiX3Jlc2V0RXZlbnRMb29wIiwiX2RlbGV0aW5nQ2hhcklkc0FuaW1hdGlvbiIsIl9kZWxldGluZ0NoYXJBbmltYXRpb25GcmFtZSIsImxvZyIsImRlbGV0ZV9zcGVlZCIsInR5cGV3cml0ZXJfd3JhcHBlcl9jbGFzc19uYW1lIiwiY3VycmVudF90eXBlZF9jaGFyX2lkcyIsImNoYXJfYW1vdW50X3RvX2RlbGV0ZSIsImxhc3RfdHlwZWRfY2hhcl9pbmRleCIsImdldF9sYXN0X3R5cGVkX2NoYXIiLCJjaGFyX3RvX2RlbGV0ZV9lbCIsIm5ld19vcHRpb25zIiwibWVyZ2VkX29wdGlvbnMiLCJhdHRybmFtZSIsImZpcnN0X2V2ZW50IiwiX2V2ZW50UXVlQW5pbWF0aW9uIiwiZXZlbnRfbmFtZSIsInR5cGV3cml0ZXJfd3JhcHBlciIsIl9jb252ZXJ0Q2hhcnNUb0hUTUwiLCJfdHlwaW5nQW5pbWF0aW9uIiwiX3R5cGluZ0FuaW1hdGlvbkZyYW1lIiwidG90YWxfaXRlbXMiLCJ0eXBpbmdfc3BlZWQiLCJpdGVtX3RvX3R5cGUiLCJjaGFycyIsImNoYXJzX2h0bWxfd3JhcF9hcnJheSIsImNoYXJfY2xhc3NfbmFtZSIsImNoYXJzX2FycmF5IiwiY2hhcl9lbGVtZW50IiwiY2hhcl9pZCIsIl9nZW5lcmF0ZVVuaXF1ZUlEIiwic3RyaW5nc19hcnJheV9jaGVjayIsInN0cmluZ3Nfc3RyaW5nX2NoZWNrIiwic3RyaW5nc19jaGFyc19hcnJheSIsIl9jdXJzb3JBbmltYXRpb25GcmFtZSIsIm9wYWNpdHlfYW1vdW50IiwiY3Vyc29yX2VsIiwiX2N1cnNvckFuaW1hdGlvbiIsIl9hcHBlbmRUZXh0IiwiaXRlbXMiLCJjdXJzb3JfY2xhc3NfbmFtZSIsImN1cnNvcl9lbGVtZW50IiwiX3BhdXNlQ3Vyc29yQW5pbWF0aW9uIiwiX3Jlc3RhcnRDdXJzb3JBbmltYXRpb24iLCJfcmFuZG9tSUQiLCJwb3NzaWJsZSIsInRlbXBfaWQiLCJoeXBoZW5hdGVDYWNoZSIsImh5cGhlbmF0ZVJlIiwiaHlwaGVuYXRlIiwic3RyIiwiY2FtZWxpemVSZSIsImNhbWVsaXplIiwidG9VcHBlciIsInVjZmlyc3QiLCJzdHJQcm90b3R5cGUiLCJzdGFydHNXaXRoRm4iLCJzdGFydHNXaXRoIiwic2VhcmNoIiwibGFzdEluZGV4T2YiLCJlbmRzV2l0aEZuIiwiZW5kc1dpdGgiLCJpbmNsdWRlc0ZuIiwiaW5jbHVkZXNTdHIiLCJpbmNsdWRlcyIsImluY2x1ZGVzQXJyYXkiLCJpc1N0cmluZyIsImlzRG9jdW1lbnQiLCJpc0pRdWVyeSIsImlzTm9kZSIsIk5vZGUiLCJpc05vZGVDb2xsZWN0aW9uIiwiTm9kZUxpc3QiLCJIVE1MQ29sbGVjdGlvbiIsImlzQm9vbGVhbiIsInRvQm9vbGVhbiIsInRvTnVtYmVyIiwiTnVtYmVyIiwidG9GbG9hdCIsInRvTm9kZSIsImFycmF5UHJvdG8iLCJ0b05vZGVzIiwiQm9vbGVhbiIsInRvTGlzdCIsInRvTXMiLCJhc3NpZ24iLCJjYiIsInNvcnRCeSIsImNsYW1wIiwiaW50ZXJzZWN0UmVjdCIsInIxIiwicjIiLCJib3R0b20iLCJwb2ludEluUmVjdCIsInBvaW50IiwiRGltZW5zaW9ucyIsInJhdGlvIiwiZGltZW5zaW9ucyIsImFQcm9wIiwiY29udGFpbiIsIm1heERpbWVuc2lvbnMiLCJ0aGlzJDEiLCJjb3ZlciIsImhhc0F0dHIiLCJoYXNBdHRyaWJ1dGUiLCJmaWx0ZXJBdHRyIiwiYXR0cmlidXRlIiwicmVwbGFjZW1lbnQiLCJxdWVyeSIsImlzQ29udGV4dFNlbGVjdG9yIiwicXVlcnlBbGwiLCJmaW5kQWxsIiwiX3F1ZXJ5IiwicXVlcnlGbiIsInJlbW92ZXMiLCJjb250ZXh0U2FuaXRpemVSZSIsImN0eCIsInNlbGVjdG9ycyQxIiwicHJldmlvdXNFbGVtZW50U2libGluZyIsImNvbnRleHRTZWxlY3RvclJlIiwiZWxQcm90byIsIkVsZW1lbnQiLCJtYXRjaGVzRm4iLCJjbG9zZXN0Rm4iLCJhbmNlc3RvciIsImVzY2FwZUZuIiwiQ1NTIiwidm9pZEVsZW1lbnRzIiwiYXJlYSIsImJyIiwiZW1iZWQiLCJociIsImltZyIsImtleWdlbiIsIm1lbnVpdGVtIiwibWV0YSIsInRyYWNrIiwid2JyIiwiaXNWb2lkRWxlbWVudCIsInRhZ05hbWUiLCJpc1Zpc2libGUiLCJzZWxJbnB1dCIsImlzSW5wdXQiLCJ3aXRoaW4iLCJyZWYiLCJnZXRBcmdzIiwibGlzdGVuZXIiLCJ1c2VDYXB0dXJlIiwidG9FdmVudFRhcmdldCIsImNvbmRpdGlvbiIsInRvRXZlbnRUYXJnZXRzIiwicmVkdWNlIiwibm90Q2FuY2VsZWQiLCJkaXNwYXRjaEV2ZW50IiwiY3JlYXRlRXZlbnQiLCJpbml0Q3VzdG9tRXZlbnQiLCJpc0V2ZW50VGFyZ2V0IiwiRXZlbnRUYXJnZXQiLCJwcmV2ZW50Q2xpY2siLCJQcm9taXNlJDEiLCJQcm9taXNlIiwiUHJvbWlzZUZuIiwiUEVORElORyIsInNldEltbWVkaWF0ZSIsImV4ZWN1dG9yIiwiciIsIml0ZXJhYmxlIiwicmVzb2x2ZXIiLCJyYWNlIiwiZW52IiwiZ2V0SW1hZ2UiLCJzcmNzZXQiLCJzaXplcyIsIkltYWdlIiwidW5iaW5kMSIsInVuYmluZDIiLCJnZXRJbmRleCIsImZpbml0ZSIsImhhc0NoaWxkTm9kZXMiLCJpbnNlcnROb2RlcyIsImNhbGxlZCIsIm9uUmVzb2x2ZWQiLCJmcmFnbWVudFJlIiwic2luZ2xlVGFnUmUiLCJpbnNlcnRBZGphY2VudEhUTUwiLCJuZXh0RWxlbWVudFNpYmxpbmciLCJhcHBseSQxIiwicmVtb3ZlQ2xhc3NlcyIsImNscyIsInJlcGxhY2VDbGFzcyIsImZvcmNlIiwiZ2V0QXJncyQxIiwic3VwcG9ydHMiLCJGb3JjZSIsIk11bHRpcGxlIiwiYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudCIsImNvbHVtbi1jb3VudCIsImZpbGwtb3BhY2l0eSIsImZsZXgtZ3JvdyIsImZsZXgtc2hyaW5rIiwiZm9udC13ZWlnaHQiLCJsaW5lLWhlaWdodCIsInotaW5kZXgiLCJwcm9wZXJ0eSIsInByb3BOYW1lIiwiZ2V0U3R5bGUiLCJyZW1vdmVQcm9wZXJ0eSIsInBzZXVkb0VsdCIsInZhcnMiLCJnZXRDc3NWYXIiLCJwcmVmaXhlZE5hbWUiLCJ0cmFuc2l0aW9uIiwidGltaW5nIiwidHJhbnNpdGlvbi1wcm9wZXJ0eSIsInRyYW5zaXRpb24tZHVyYXRpb24iLCJ0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbiIsIlRyYW5zaXRpb24iLCJjYW5jZWwiLCJhbmltYXRpb25QcmVmaXgiLCJjbHNDYW5jZWxBbmltYXRpb24iLCJvcmlnaW4iLCJhcmd1bWVudHMkMSIsImhhc1Jlc2V0IiwiaW4iLCJpc0h0bWwiLCIkJCIsImRpcnMiLCJwb3NpdGlvbkF0IiwiZWxBdHRhY2giLCJ0YXJnZXRBdHRhY2giLCJlbE9mZnNldCIsInRhcmdldE9mZnNldCIsImZsaXAiLCJib3VuZGFyeSIsImdldFBvcyIsImZsaXBwZWQiLCJkaW0iLCJnZXREaW1lbnNpb25zIiwidGFyZ2V0RGltIiwibW92ZVRvIiwiZ2V0T2Zmc2V0cyIsIndpbmRvdyQxIiwiYWxpZ24iLCJhbGlnbkZsaXAiLCJlbGVtT2Zmc2V0IiwiY2VudGVyT2Zmc2V0IiwiY2VudGVyVGFyZ2V0T2Zmc2V0IiwibmV3VmFsIiwiY29vcmRpbmF0ZXMiLCJjdXJyZW50T2Zmc2V0IiwiaW5uZXJIZWlnaHQiLCJpbm5lcldpZHRoIiwiZG9jRWwiLCJwcm9wTmFtZSQkMSIsImJveE1vZGVsQWRqdXN0IiwiYXR0YWNoIiwiZmFjdG9yIiwiZmxpcFBvc2l0aW9uIiwiaXNJblZpZXciLCJ0b3BPZmZzZXQiLCJsZWZ0T2Zmc2V0IiwicmVsYXRpdmVUb1ZpZXdwb3J0Iiwib2Zmc2V0UG9zaXRpb24iLCJlbFRvcCIsImVsTGVmdCIsInNjcm9sbGVkT3ZlciIsImhlaWdodE9mZnNldCIsImRvY3VtZW50JDEiLCJlbEhlaWdodCIsInZwIiwidmgiLCJvZmZzZXRUb3AiLCJvZmZzZXRMZWZ0IiwiaXNSdGwiLCJoYXNUb3VjaEV2ZW50cyIsImhhc1BvaW50ZXJFdmVudHMiLCJQb2ludGVyRXZlbnQiLCJoYXNUb3VjaCIsIkRvY3VtZW50VG91Y2giLCJuYXZpZ2F0b3IiLCJtYXhUb3VjaFBvaW50cyIsInBvaW50ZXJEb3duIiwicG9pbnRlck1vdmUiLCJwb2ludGVyVXAiLCJwb2ludGVyRW50ZXIiLCJwb2ludGVyTGVhdmUiLCJmYXN0ZG9tIiwicmVhZHMiLCJ3cml0ZXMiLCJyZWFkIiwidGFzayIsInNjaGVkdWxlRmx1c2giLCJ3cml0ZSIsImNsZWFyIiwicmVtb3ZlJDEiLCJmbHVzaCIsInJ1blRhc2tzIiwic2NoZWR1bGVkIiwidGFza3MiLCJpdGVtIiwiTW91c2VUcmFja2VyIiwic2xvcGUiLCJwb3NpdGlvbnMiLCJ0aWNraW5nIiwibW92ZXNUbyIsInBvc2l0aW9uJCQxIiwicHJldlBvcyIsInBvaW50cyIsInN0cmF0cyIsIm1lcmdlRm5EYXRhIiwicGFyZW50VmFsIiwiY2hpbGRWYWwiLCJ2bSIsImNyZWF0ZWQiLCJiZWZvcmVDb25uZWN0IiwiY29ubmVjdGVkIiwiYmVmb3JlRGlzY29ubmVjdCIsImRpc2Nvbm5lY3RlZCIsImRlc3Ryb3kiLCJ1cGRhdGUiLCJtZXRob2RzIiwiZGVmYXVsdFN0cmF0IiwibWVyZ2VPcHRpb25zIiwiY2hpbGQiLCJleHRlbmRzIiwibWl4aW5zIiwibWVyZ2VLZXkiLCJrZXkkMSIsInBhcnNlT3B0aW9ucyIsIlBsYXllciIsInBvc3QiLCJjbWQiLCJjb250ZW50V2luZG93IiwicG9zdE1lc3NhZ2UiLCJpc1ZpZGVvIiwiaXNZb3V0dWJlIiwiaXNWaW1lbyIsImlzSFRNTDUiLCJpc0lGcmFtZSIsImVuYWJsZUFwaSIsInBvbGxlciIsInlvdXR1YmUiLCJ2aW1lbyIsImRhdGEkJDEiLCJwbGF5ZXJfaWQiLCJwbGF5IiwicGF1c2UiLCJtdXRlIiwibXV0ZWQiLCJjbGlja1RpbWVvdXQiLCJzd2lwZVRpbWVvdXQiLCJ0YXBUaW1lb3V0IiwiY2xpY2tlZCIsInRvdWNoIiwiY2FuY2VsQWxsIiwiZ2V0UG9zJDEiLCJnZXRUeXBlIiwieDEiLCJ5MSIsIngyIiwieTIiLCJ0b3VjaGluZyIsImlzVG91Y2giLCJnZXRDb21wb25lbnROYW1lIiwiX2luaXQiLCJ1dGlsIiwiZnJlZXplIiwiREFUQSIsIl9pc1JlYWR5IiwiX2NhbGxVcGRhdGUiLCJ1c2UiLCJwbHVnaW4iLCJpbnN0YWxsZWQiLCJtaXhpbiIsImNvbXBvbmVudCIsIlN1YiIsImNyZWF0ZSIsInBhdGgiLCJnbG9iYWxBUEkiLCJfY2FsbEhvb2siLCIkb3B0aW9ucyIsIl9jYWxsQ29ubmVjdGVkIiwiX2Nvbm5lY3RlZCIsIl9pbml0UHJvcHMiLCJfaW5pdEV2ZW50cyIsIl9pbml0T2JzZXJ2ZXIiLCJfY2FsbFJlYWR5IiwiX2NhbGxEaXNjb25uZWN0ZWQiLCJfb2JzZXJ2ZXIiLCJkaXNjb25uZWN0IiwiX3VuYmluZEV2ZW50cyIsIl9yZXNldENvbXB1dGVkcyIsInVwZGF0ZXMiLCJfZnJhbWVzIiwiaG9va3NBUEkiLCJnZXRQcm9wcyIsImNvZXJjZSIsInByb3AkMSIsInJlZ2lzdGVyQ29tcHV0ZWQiLCJfY29tcHV0ZWRzIiwiJHByb3BzIiwiJGVsIiwicmVnaXN0ZXJFdmVudCIsImNhcHR1cmUiLCJmaWx0ZXIkJDEiLCJzZWxmRmlsdGVyIiwiX2V2ZW50cyIsIm5vdEluIiwiZXZlcnkiLCJ0b01lZGlhIiwicmVmJDEiLCJpbmRleCQkMSIsIm5vcm1hbGl6ZURhdGEiLCJfdWlkIiwiX2luaXREYXRhIiwiX2luaXRNZXRob2RzIiwiX2luaXRDb21wdXRlZHMiLCIkbW91bnQiLCIkbmFtZSIsImV4Y2x1ZGUiLCJNdXRhdGlvbk9ic2VydmVyIiwiJHJlc2V0Iiwib2JzZXJ2ZSIsImF0dHJpYnV0ZUZpbHRlciIsInN0YXRlQVBJIiwiY29tcG9uZW50cyIsImFyZ3NBcnJheSIsImZ1bmN0aW9uYWwiLCJpbnN0YW5jZSIsImdldENvbXBvbmVudCIsIiRkZXN0cm95IiwiaW5zdGFsbCIsIl9pbml0aWFsaXplZCIsImdldENvbXBvbmVudHMiLCJjb25uZWN0IiwibmFtZSQxIiwiY29tcG9uZW50QVBJIiwiJGVtaXQiLCJyZW1vdmVFbCIsIiRjcmVhdGUiLCIkdXBkYXRlIiwiJGdldENvbXBvbmVudCIsImRlZmluZVByb3BlcnRpZXMiLCIkY29udGFpbmVyIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwiaW5zdGFuY2VBUEkiLCJDbGFzcyIsIlRvZ2dsYWJsZSIsInF1ZXVlZCIsImluaXRQcm9wcyIsInBhZGRpbmdUb3AiLCJwYWRkaW5nQm90dG9tIiwibWFyZ2luVG9wIiwibWFyZ2luQm90dG9tIiwiaGlkZVByb3BzIiwiaGFzQW5pbWF0aW9uIiwiaGFzVHJhbnNpdGlvbiIsInRvZ2dsZUVsZW1lbnQiLCJhbmltYXRlJCQxIiwiX3RvZ2dsZUVsZW1lbnQiLCJ0b2dnbGVkIiwiaXNUb2dnbGVkIiwidW50b2dnbGVkIiwic2Nyb2xsIiwidG9nZ2xlTm93IiwidXBkYXRlQXJpYSIsIl90b2dnbGVIZWlnaHQiLCJfdG9nZ2xlQW5pbWF0aW9uIiwiX3RvZ2dsZUltbWVkaWF0ZSIsIl90b2dnbGUiLCJjaGFuZ2VkIiwiaW5uZXIiLCJsYXN0RWxlbWVudENoaWxkIiwiY3VycmVudEhlaWdodCIsImVuZEhlaWdodCIsIkFjY29yZGlvbiIsImNvbGxhcHNpYmxlIiwibXVsdGlwbGUiLCJjbHNPcGVuIiwiaXNJdGVtIiwiX3dyYXBwZXIiLCJBbGVydCIsImNsb3NlIiwic2VsQ2xvc2UiLCJDb3JlIiwic3RhcnRlZCIsInBhc3NpdmUiLCJob3ZlclNlbGVjdG9yIiwicmVnaXN0ZXJlZCIsIlZpZGVvIiwiYXV0b211dGUiLCJhdXRvcGxheSIsImluVmlldyIsInByZWxvYWQiLCJwbGF5ZXIiLCJDb3ZlciIsImhlaWdodCQkMSIsIndpZHRoJCQxIiwiY2xpZW50V2lkdGgiLCJjbGllbnRIZWlnaHQiLCJsb2FkZWRtZXRhZGF0YSIsIlBvc2l0aW9uIiwiY2xzUG9zIiwib2Zmc2V0JCQxIiwiYXhpcyIsImdldEF4aXMiLCJEcm9wIiwibW9kZSIsImJvdW5kYXJ5QWxpZ24iLCJkZWxheVNob3ciLCJkZWxheUhpZGUiLCJjbHNEcm9wIiwiaG92ZXJJZGxlIiwidHJhY2tlciIsImNsZWFyVGltZXJzIiwiaXNBY3RpdmUiLCJ0cnlTaG93IiwiaXNEZWxheWluZyIsInNob3dUaW1lciIsImlzUGFyZW50T2YiLCJoaWRlVGltZXIiLCJpc0NoaWxkT2YiLCJkcm9wIiwiYWxpZ25UbyIsIkRyb3Bkb3duIiwiRm9ybUN1c3RvbSIsImZpbGVzIiwiR2lmIiwiaW52aWV3IiwiTWFyZ2luIiwiZmlyc3RDb2x1bW4iLCJyb3dzIiwiZ2V0Um93cyIsInN0YWNrcyIsInJvdyIsImdldE9mZnNldCIsImxlZnREaW0iLCJHcmlkIiwibWFzb25yeSIsInBhcmFsbGF4IiwiY2xzU3RhY2siLCJ0cmFuc2xhdGVzIiwic3VtIiwibWF4Q29sdW1uSGVpZ2h0Iiwic2Nyb2xsZWQiLCJIZWlnaHRNYXRjaCIsIm1pbkhlaWdodCIsImJveFNpemluZyIsImhlaWdodHMiLCJIZWlnaHRWaWV3cG9ydCIsIm9mZnNldEJvdHRvbSIsInZpZXdwb3J0Iiwic3ZncyIsIlNWRyIsImljb24iLCJhc3NpZ24kJDEiLCJzdmciLCJnZXRTdmciLCJzeW1ib2xzIiwic3ltYm9sUmUiLCJwYXJzZVN5bWJvbHMiLCJpc0VxdWFsTm9kZSIsInN2Z0VsIiwiZGVjb2RlVVJJQ29tcG9uZW50IiwiaWNvbnMiLCJzcGlubmVyIiwidG90b3AiLCJtYXJrZXIiLCJjbG9zZS1pY29uIiwiY2xvc2UtbGFyZ2UiLCJuYXZiYXItdG9nZ2xlLWljb24iLCJvdmVybGF5LWljb24iLCJwYWdpbmF0aW9uLW5leHQiLCJwYWdpbmF0aW9uLXByZXZpb3VzIiwic2VhcmNoLWljb24iLCJzZWFyY2gtbGFyZ2UiLCJzZWFyY2gtbmF2YmFyIiwic2xpZGVuYXYtbmV4dCIsInNsaWRlbmF2LW5leHQtbGFyZ2UiLCJzbGlkZW5hdi1wcmV2aW91cyIsInNsaWRlbmF2LXByZXZpb3VzLWxhcmdlIiwiSWNvbiIsImFkZGVkIiwiY21wIiwiaXNJY29uIiwiZ2V0SWNvbiIsImFwcGx5UnRsIiwiSWNvbkNvbXBvbmVudCIsIlNsaWRlbmF2IiwiU2VhcmNoIiwiQ2xvc2UiLCJTcGlubmVyIiwiSW1nIiwiZGF0YVNyYyIsImRhdGFTcmNzZXQiLCJkYXRhU2l6ZXMiLCJkYXRhV2lkdGgiLCJkYXRhSGVpZ2h0IiwiY2FjaGVLZXkiLCJpc0ltZyIsInRvUHgiLCJzdG9yYWdlIiwic2V0U3JjQXR0cnMiLCJjb2xvciIsIm1hdGNoZXMkJDEiLCJzaXplc1JlIiwibWF0Y2hNZWRpYSIsInNpemUiLCJzdWJzdHJpbmciLCJzaXplUmUiLCJhZGRpdGlvblJlIiwidXJsQ2FjaGUiLCJjYW52YXMiLCJnZXRDb250ZXh0IiwiZmlsbFN0eWxlIiwiZmlsbFJlY3QiLCJ0b0RhdGFVUkwiLCJnZXRQbGFjZWhvbGRlckltYWdlIiwiY3VycmVudFNyYyIsInNlc3Npb25TdG9yYWdlIiwiYWN0aXZlJDEiLCJMZWFkZXIiLCJmaWxsIiwibWVkaWEiLCJjbHNXcmFwcGVyIiwiY2xzSGlkZSIsImF0dHJGaWxsIiwid3JhcHBlciIsIkNvbnRhaW5lciIsIk1vZGFsIiwic2VsUGFuZWwiLCJlc2NDbG9zZSIsImJnQ2xvc2UiLCJvdmVybGF5IiwicGFuZWwiLCJ0cmFuc2l0aW9uRWxlbWVudCIsInRyYW5zaXRpb25EdXJhdGlvbiIsInJlZ2lzdGVyRXZlbnRzIiwiY2xzUGFnZSIsInNjcm9sbGJhcldpZHRoIiwiZm91bmQiLCJnZXRBY3RpdmUiLCJNb2RhbCQxIiwibW9kYWwiLCJkaWFsb2ciLCJhbGVydCIsImxhYmVscyIsImNvbmZpcm0iLCJyZXNvbHZlZCIsInByb21wdCIsIm9rIiwiTmF2IiwiTmF2YmFyIiwiZHJvcGRvd24iLCJkcm9wYmFyIiwiZHJvcGJhck1vZGUiLCJkcm9wYmFyQW5jaG9yIiwiZHJvcGRvd25zIiwiZ2V0RHJvcGRvd24iLCJ0cmFuc2l0aW9uVG8iLCJuZXdIZWlnaHQiLCJvbGRIZWlnaHQiLCJjbGlwIiwiT2ZmY2FudmFzIiwiY2xzQ29udGFpbmVyIiwiY2xzRmxpcCIsImNsc0NvbnRlbnQiLCJjbHNDb250ZW50QW5pbWF0aW9uIiwiY2xzU2lkZWJhckFuaW1hdGlvbiIsImNsc01vZGUiLCJjbHNPdmVybGF5IiwiT3ZlcmZsb3dBdXRvIiwiUmVzcG9uc2l2ZSIsIlNjcm9sbCIsImRvY0hlaWdodCIsIndpbkhlaWdodCIsInN0YXJ0WSIsImN1cnJlbnRZIiwiU2Nyb2xsc3B5IiwicmVwZWF0IiwiaW5WaWV3Q2xhc3MiLCJlbERhdGEiLCJ0b2dnbGVzIiwiU2Nyb2xsc3B5TmF2IiwiU3RpY2t5IiwiY2xzQWN0aXZlIiwiY2xzSW5hY3RpdmUiLCJjbHNGaXhlZCIsImNsc0JlbG93Iiwic2VsVGFyZ2V0Iiwid2lkdGhFbGVtZW50Iiwic2hvd09uVXAiLCJwbGFjZWhvbGRlciIsImJvdHRvbU9mZnNldCIsInBhcnNlUHJvcCIsImluYWN0aXZlIiwic2Nyb2xsWSIsInByb3BPZmZzZXQiLCJTd2l0Y2hlciIsInN3aXBpbmciLCJhdHRySXRlbSIsImNvbm5lY3RzIiwiZ2V0U2VsZWN0aW9uIiwiaGFzUHJldiIsIlRhYiIsIlRvZ2dsZSIsImNvcmUiLCJDb3VudGRvd24iLCJ0aW1lc3BhbiIsImRpZ2l0cyIsImRpZ2l0Iiwic3R5bGUkMSIsInRhcmdldENsYXNzIiwiQW5pbWF0ZSIsInNoZWV0IiwiaW5zZXJ0UnVsZSIsInByb3BzRnJvbSIsIm9sZFNjcm9sbFkiLCJwcm9wc1RvIiwiZ2V0UG9zaXRpb25XaXRoTWFyZ2luIiwicG9pbnRlckV2ZW50cyIsIkZpbHRlciIsInNlbEFjdGl2ZSIsImFjdGl2ZXMiLCJpc0VxdWFsTGlzdCIsInNldFN0YXRlIiwiZ2V0U3RhdGUiLCJtZXJnZVN0YXRlIiwiYXR0ciQkMSIsInN0YXRlRmlsdGVyIiwicmVmX3NvcnQiLCJzdGF0ZVNvcnQiLCJzdGF0ZU9yZGVyIiwiZ2V0RmlsdGVyIiwiZ3JvdXAiLCJtYXRjaEZpbHRlciIsImFwcGx5JCQxIiwiZ2V0U2VsZWN0b3IiLCJzb3J0ZWQiLCJsb2NhbGVDb21wYXJlIiwic29ydEl0ZW1zIiwiZmlsdGVyQnkiLCJsaXN0QSIsImxpc3RCIiwiQW5pbWF0aW9ucyIsInNsaWRlIiwidHJhbnNmb3JtIiwidHJhbnNsYXRlIiwidHJhbnNsYXRlZCIsInNjYWxlM2QiLCJBbmltYXRpb25zJDEiLCJmYWRlIiwidHJpZ2dlclVwZGF0ZSIsIlNsaWRlciIsImF1dG9wbGF5SW50ZXJ2YWwiLCJwYXVzZU9uSG92ZXIiLCJzdGFydEF1dG9wbGF5Iiwic3RvcEF1dG9wbGF5IiwiaXNIb3ZlcmluZyIsInByZXZlbnRDYXRjaCIsInNsaWRlc1NlbGVjdG9yIiwiZHJhZyIsIl90cmFuc2l0aW9uZXIiLCJnZXREaXN0YW5jZSIsImRyYWdnaW5nIiwicHJldkluZGV4IiwidW5iaW5kTW92ZSIsIm1vdmUiLCJkaXN0YW5jZSIsInNsaWRlcyIsImRpcyIsIm5leHRJbmRleCIsIl9nZXREaXN0YW5jZSIsIml0ZW1TaG93biIsImVkZ2UiLCJfdHJhbnNsYXRlIiwiX3Nob3ciLCJkaXJDaGFuZ2UiLCJzZWxOYXYiLCJuYXYiLCJuYXZJdGVtU2VsZWN0b3IiLCJuYXZJdGVtcyIsIm1heEluZGV4IiwidXBkYXRlTmF2IiwiZ2V0VmFsaWRJbmRleCIsImNsc0FjdGl2YXRlZCIsInZlbG9jaXR5IiwiVHJhbnNpdGlvbmVyIiwidHJhbnNpdGlvbk9wdGlvbnMiLCJzcGVlZFVwIiwic2VsTGlzdCIsIml0ZW1zaG93biIsInF1ZXVlSW5kZXgiLCJnZXREaXJlY3Rpb24iLCJfZ2V0VHJhbnNpdGlvbmVyIiwidHJhbnNpdGlvbmVyIiwiU2xpZGVzaG93IiwiQW5pbWF0aW9ucyQkMSIsIml0ZW1zaG93IGl0ZW1oaWRlIGl0ZW1zaG93biBpdGVtaGlkZGVuIiwiaXRlbXNob3ciLCJiZWZvcmVpdGVtc2hvdyIsIml0ZW1oaWRkZW4iLCJMaWdodGJveFBhbmVsIiwiZGVsYXlDb250cm9scyIsInZpZGVvQXV0b3BsYXkiLCJ0ZW1wbGF0ZSIsImhpZGVDb250cm9scyIsImdldEl0ZW0iLCJsb2FkSXRlbSIsImFsdCIsInNldEl0ZW0iLCJzZXRFcnJvciIsInZpZGVvIiwicG9zdGVyIiwidmlkZW9XaWR0aCIsInZpZGVvSGVpZ2h0Iiwic2V0SWZyYW1lIiwiZ2V0SWZyYW1lIiwiZW5jb2RlVVJJIiwid2l0aENyZWRlbnRpYWxzIiwicmVmX3Jlc3BvbnNlIiwic2hvd0NvbnRyb2xzIiwiY29udHJvbHNUaW1lciIsIkxpZ2h0Ym94IiwibGlnaHRib3hQYW5lbCIsIl9kZXN0cm95IiwiY29udGFpbmVycyIsIk5vdGlmaWNhdGlvbiIsImNsc0Nsb3NlIiwiY2xzTXNnIiwiY2xvc2VBbGwiLCJpbW1lZGlhdGUiLCJyZW1vdmVGbiIsInByb3BzJDEiLCJQYXJhbGxheCIsImJnUG9zIiwiaXNDb2xvciIsImlzQ3NzUHJvcCIsInN0ZXBzIiwiY292ZXJzIiwiZG93biIsImJnUHJvcHMiLCJiZyIsImJhY2tncm91bmRTaXplIiwiX2ltYWdlIiwiZGltRWwiLCJuYXR1cmFsV2lkdGgiLCJuYXR1cmFsSGVpZ2h0Iiwic3BhbiIsImJnUG9zRmxvYXQiLCJiYWNrZ3JvdW5kUmVwZWF0IiwiZ2V0Q3NzIiwiY3NzJCQxIiwiZ2V0VmFsdWUiLCJyZWYkMiIsImdldFN0ZXAiLCJQYXJhbGxheCQxIiwiZWFzZSQxIiwiU2xpZGVyUmVhY3RpdmUiLCJnZXRMZWZ0IiwiY2VudGVyIiwiZ2V0RWxMZWZ0IiwiY2VudGVyRWwiLCJnZXRNYXgiLCJnZXRXaWR0aCIsInRyaWdnZXJVcGRhdGUkMSIsIlNsaWRlciQxIiwic2V0cyIsInVwZGF0ZVRyYW5zbGF0ZXMiLCJnZXRJdGVtSW4iLCJnZXRBY3RpdmVzIiwic2xpZGVMZWZ0IiwiYXZnV2lkdGgiLCJsZWZ0Q2VudGVyIiwic2xpZGVXaWR0aCIsInJlb3JkZXIiLCJzbGlkZUluZGV4IiwiU2xpZGVyUGFyYWxsYXgiLCJzZWxJdGVtIiwicmVmX2RldGFpbCIsImdldEN1cnJlbnQiLCJpc0luIiwib2JqJDEiLCJvYmokMiIsIkFuaW1hdGlvbnMkMiIsInB1bGwiLCJTbGlkZXNob3ckMSIsIm1heEhlaWdodCIsImhndCIsIlNvcnRhYmxlIiwiY2xzSXRlbSIsImNsc1BsYWNlaG9sZGVyIiwiY2xzRHJhZyIsImNsc0RyYWdTdGF0ZSIsImNsc0Jhc2UiLCJjbHNOb0RyYWciLCJjbHNFbXB0eSIsImNsc0N1c3RvbSIsInRvdWNoZWQiLCJvdXRlckhUTUwiLCJlbGVtZW50RnJvbVBvaW50Iiwic29ydGFibGUiLCJnZXRTb3J0YWJsZSIsInByZXZpb3VzIiwiaXNQcmVkZWNlc3NvciIsIlRvb2x0aXAiLCJ0aXRsZSIsIl9oYXNUaXRsZSIsImFyaWEtZXhwYW5kZWQiLCJfdW5iaW5kIiwidG9vbHRpcCIsIlVwbG9hZCIsImFsbG93IiwiY2xzRHJhZ292ZXIiLCJjb25jdXJyZW50IiwibWF4U2l6ZSIsIm1pbWUiLCJtc2dJbnZhbGlkTWltZSIsIm1zZ0ludmFsaWROYW1lIiwibXNnSW52YWxpZFNpemUiLCJiZWZvcmVBbGwiLCJjb21wbGV0ZUFsbCIsImxvYWRFbmQiLCJsb2FkU3RhcnQiLCJ1cGxvYWQiLCJ0cmFuc2ZlciIsImRhdGFUcmFuc2ZlciIsImRyYWdlbnRlciIsImRyYWdvdmVyIiwiZHJhZ2xlYXZlIiwiY2h1bmtzIiwiY2h1bmsiLCJGb3JtRGF0YSIsIm11dGF0aW9ucyIsImFwcGx5TXV0YXRpb24iLCJjaGlsZExpc3QiLCJzdWJ0cmVlIiwiY2hhcmFjdGVyRGF0YSIsIm11dGF0aW9uIiwiYWRkZWROb2RlcyIsInJlbW92ZWROb2RlcyIsImkkMSIsImFwcGx5Q2hpbGRMaXN0IiwiYXR0cmlidXRlTmFtZSIsImFwcGx5QXR0cmlidXRlIiwiYm9vdCJdLCJtYXBwaW5ncyI6IkFBQUEsYUFFQSxTQUFBQSxVQUFBQyxJQUFBQyxVQUFBQyxjQUNBLE1BQUFDLE9BQUFDLFNBQUFDLGNBQUEsVUFDQUYsT0FBQUcsS0FBQSxrQkFDQUgsT0FBQUksSUFBQVAsSUFDQUcsT0FBQUssT0FBQSxPQUVBQyxJQUFBUixZQUNBRSxPQUFBRixVQUFBQSxnQkFHQVEsSUFBQVAsZUFDQUMsT0FBQU8sWUFBQVIsY0FHQUUsU0FBQU8scUJBQUEsUUFBQSxHQUFBQyxZQUFBVCxRQUdBLFNBQUFVLFNBQUFDLFNBQUFDLFVBQ0FYLFNBQUFZLGNBQUFGLFVBRUFHLFVBQUFGLFNBR0EsU0FBQUcsWUFBQUosU0FBQUMsVUFDQSxNQUFBSSxRQUFBZixTQUFBWSxjQUFBRixVQUNBTSxJQUFBLElBQUFDLGVBQUFOLGdCQUFBLEtBQ0FJLFFBQUFGLFVBQUFFLFFBQUFGLFVBQUFLLFFBQUFGLElBQUEsS0N4QkEsU0FBQUcsbUJBQ0EsTUFBQUMsSUFBQXBCLFNBQUFxQixlQUFBLFNBRUFDLFdBQUEsSUFBQUMsV0FBQUgsS0FDQUksTUFBQSxFQUNBQyxZQUFBLEdBQ0FDLFlBQUEsVUFDQUMsU0FBQSxJQVVBM0IsU0FBQXFCLGVBQUEsa0JBQUFPLFFBUEEsV0FDQSxN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QUNBLHFDQUNBLDZCQUNBLGtDQUNBLHFDQUNBLDhCQUNBLG1DQUNBLGdDQUNBLDZCQUNBLHlDQUNBLHdDQUNBLHlDQUNBLHdDQUNBLDJDQUNBLHdDQUNBLDJDQUNBLDhDQUNBLHlDQUNBLHlDQUNBLDBDQUNBLDJDQUNBLHdDQUNBLHVDQUNBLHFDQUNBLHdDQUNBLGlDQUNBLHFDQUNBLGdDQUNBLHVDQUNBLG1DQUNBLHVDQUNBLG1DQUNBLG1DQUNBLGlDQUNBLG1DQUNBLGtDQUNBLGtDQUNBLCtCQUNBLCtCQUNBLDhCQUNBLHdCQUNBLHlCQUNBLCtCQUNBLDBCQUNBLCtCQUNBLHdCQUNBLCtCQUNBLDZCQUNBLG1DQUNBLDhCQUNBLHdCQUNBLG1DQUNBLDhCQUNBLDBCQUNBLDJCQUNBLHdCQUNBLDBCQUNBLGlCQUNBLCtCQUNBLCtCQUNBLDRCQUNBLG9CQUNBLGtCQUNBLG1CQUNBLDJCQUNBLG1CQUNBLG1DQUNBLDJCQUNBLGlDQUNBLDZCQUNBLG1DQUNBLHFDQUNBLDBDQUNBLDZDQUNBLG1DQUNBLHNDQUNBLG9DQUNBLHlDQUNBLGlDQUNBLGlDQUNBLHNDQUNBLGlDQUNBLG9CQUNBLHNCQUNBLHFCQUNBLDBCQUNBLGdCQUNBLGtCQUNBLGtCQUNBLGlCQUNBLHNCQUNBLGNBQ0Esd0JBQ0EsbUJBQ0EsY0FDQSxvQkFDQSxlQUNBLG1DQUNBLG1DQUNBLGtDQUNBLGdDQUNBLGdDQUNBLGtDQUNBLHFCQUNBLG1DQUNBLGdDQUNBLHlCQUNBLHlCQUNBLCtCQUNBLGdDQUNBLG1DQUNBLDhCQUNBLG1CQUNBLHdCQUNBLHFCQUNBLGtDQUNBLGlDQUNBLGtDQUNBLGdDQUNBLDZCQUNBLHVCQUNBLGdDQUNBLDZCQUNBLDZCQUNBLHNDQUNBLHlDQUNBLHNCQUNBLDBCQUNBLG9DQUNBLDhCQUNBLG9DQUNBLDZCQUNBLDhCQUNBLG1DQUNBLGtDQUNBLDZCQUNBLDBCQUNBLDZCQUNBLGlDQUNBLGtDQUNBLHFDQUNBLG9DQUNBLG1DQUNBLDRCQUNBLGtDQUNBLDhCQUNBLG1DQUtBcnRELFNDMXFDQSxZQVFBLFdBR0EsSUFG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LFFBQUEzdEMsT0FBQW1pRSxlQUVBLE9BREF4MkYsTUFBQTRNLE1BQUF5bkIsU0FDQSxFQUdBLElBQUEwK0MsVUFBQS95RSxNQUFBczJFLGFBQUFqaUQsT0FBQXpuQixNQUVBLE9BQUFtbUUsV0FDQUEsVUFBQXdELFlBQ0EsUUFGQSxHQTVCQWtnQixDQUFBTixZQUVBbjJGLE1BQUF3dkUsT0FBQW43QyxRQWlEQSxTQUFBbzFELFNBQUFoM0QsS0FBQW5zQixJQUVBLEdBQUEsSUFBQW1zQixLQUFBUCxXQUFBOHZDLFFBQUF2dkMsS0FBQSxjQU1BLElBRkFuc0IsR0FBQW1zQixNQUNBQSxLQUFBQSxLQUFBKzZCLGtCQUNBLzZCLE1BQUEsQ0FDQSxJQUFBalgsS0FBQWlYLEtBQUF5MEMsbUJBQ0F1aUIsU0FBQWgzRCxLQUFBbnNCLElBQ0Ftc0IsS0FBQWpYLE1BMUdBLHFCQUFBdmMsU0FJQXRDLFNBQUFreUMsS0FFQTViLE9BSUEsSUFBQTRpRCxpQkFBQSxXQUVBbDVFLFNBQUFreUMsT0FDQXR0QyxLQUFBdXlFLGFBQ0E3Z0QsVUFHQThpRCxRQUFBcDVFLFVBQUFxNUYsV0FBQSxFQUFBQyxTQUFBLEtBOHZSQVMsQ0FBQTEyRixPQUdBQSIsImZpbGUiOiJzY3JpcHQuanMiLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuZnVuY3Rpb24gZ2V0U2NyaXB0KHVybCwgaW50ZWdyaXR5LCBjcm9zc19vcmlnaW4pIHtcbiAgICBjb25zdCBzY3JpcHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic2NyaXB0XCIpO1xuICAgIHNjcmlwdC50eXBlID0gXCJ0ZXh0L2phdmFzY3JpcHRcIjtcbiAgICBzY3JpcHQuc3JjID0gdXJsO1xuICAgIHNjcmlwdC5kZWZlciA9IHRydWU7XG5cbiAgICBpZiAoaW50ZWdyaXR5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgc2NyaXB0LmludGVncml0eSA9IGludGVncml0eTtcbiAgICB9XG5cbiAgICBpZiAoY3Jvc3Nfb3JpZ2luICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgc2NyaXB0LmNyb3NzT3JpZ2luID0gY3Jvc3Nfb3JpZ2luO1xuICAgIH1cblxuICAgIGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKFwiaGVhZFwiKVswXS5hcHBlbmRDaGlsZChzY3JpcHQpO1xufVxuXG5mdW5jdGlvbiBzZXRDbGFzcyhzZWxlY3RvciwgbXlfY2xhc3MpIHtcbiAgICBjb25zdCBlbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihzZWxlY3Rvcik7XG4gICAgLy8gY29uc29sZS5sb2coZWxlbWVudCk7XG4gICAgZWxlbWVudC5jbGFzc05hbWUgPSBteV9jbGFzcztcbn1cblxuZnVuY3Rpb24gcmVtb3ZlQ2xhc3Moc2VsZWN0b3IsIG15X2NsYXNzKSB7XG4gICAgY29uc3QgZWxlbWVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3Ioc2VsZWN0b3IpO1xuICAgIGNvbnN0IHJlZyA9IG5ldyBSZWdFeHAoYChefCApJHtteV9jbGFzc30oJHwgKWAsIFwiZ1wiKTtcbiAgICBlbGVtZW50LmNsYXNzTmFtZSA9IGVsZW1lbnQuY2xhc3NOYW1lLnJlcGxhY2UocmVnLCBcIiBcIik7XG59XG5cbi8vIGhpZGUgdGhlIGh0bWwgd2hlbiB0aGUgcGFnZSBsb2FkcywgYnV0IG9ubHkgaWYganMgaXMgdHVybmVkIG9uLlxuc2V0Q2xhc3MoXCJodG1sXCIsIFwicHJldmVudC1mb3VjXCIpO1xuXG4vLyB3aGVuIHRoZSBET00gaGFzIGZpbmlzaGVkIGxvYWRpbmcsIHVuaGlkZSB0aGUgaHRtbFxuZG9jdW1lbnQub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24gKCkge1xuICAgIGlmIChkb2N1bWVudC5yZWFkeVN0YXRlID09PSBcImludGVyYWN0aXZlXCIpIHtcbiAgICAgICAgcmVtb3ZlQ2xhc3MoXCJodG1sXCIsIFwicHJldmVudC1mb3VjXCIpO1xuICAgICAgICBnZXRTY3JpcHQoXG4gICAgICAgICAgICBcImh0dHBzOi8vcHJvLmZvbnRhd2Vzb21lLmNvbS9yZWxlYXNlcy92NS4xLjAvanMvYWxsLmpzXCIsIC8vIFVSTFxuICAgICAgICAgICAgXCJzaGEzODQtRTVTcGdhWmNiU0p4MElhYmIzSnIyQWZUUmlGbnJkT3cxbWhPMTlEenpyVDlMK3dDcER5SFVHMnEwN2FRZE82RVwiLCAvLyBJbnRlZ3JpdHlcbiAgICAgICAgICAgIFwiYW5vbnltb3VzXCIgLy8gQ3Jvc3Mtb3JpZ2luXG4gICAgICAgICk7XG4gICAgICAgIGdldFNjcmlwdChcbiAgICAgICAgICAgIFwiaHR0cHM6Ly9jZG5qcy5jbG91ZGZsYXJlLmNvbS9hamF4L2xpYnMvYWNlLzEuMy4zL2FjZS5qc1wiXG4gICAgICAgICk7XG4gICAgICAgIGdldFNjcmlwdChcbiAgICAgICAgICAgIFwiaHR0cHM6Ly9jZG4uanNkZWxpdnIubmV0L25wbS9mbGF0cGlja3JcIlxuICAgICAgICApO1xuICAgIH1cbn07XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuLyogZXhwb3J0ZWQgZXJyb3JfdHlwZXdyaXRlciAqL1xuXG5mdW5jdGlvbiBlcnJvcl90eXBld3JpdGVyKCkge1xuICAgIGNvbnN0IGFwcCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiZXJyb3JcIik7XG5cbiAgICBjb25zdCB0eXBld3JpdGVyID0gbmV3IFR5cGV3cml0ZXIoYXBwLCB7XG4gICAgICAgIFwibG9vcFwiOiBmYWxzZSxcbiAgICAgICAgXCJkZWxldGVTcGVlZFwiOiA0MCxcbiAgICAgICAgXCJ0eXBpbmdTcGVlZFwiOiBcIm5hdHVyYWxcIixcbiAgICAgICAgXCJkZXZNb2RlXCI6IGZhbHNlXG4gICAgfSk7XG5cbiAgICBmdW5jdGlvbiBjbG9zZVdpbmRvdygpIHtcbiAgICAgICAgY29uc3QgYXBwID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJ3aW5cIik7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRfY2xhc3MgPSBhcHAuZ2V0QXR0cmlidXRlKFwiY2xhc3NcIik7XG4gICAgICAgIGFwcC5zZXRBdHRyaWJ1dGUoXCJjbGFzc1wiLCBgJHtjdXJyZW50X2NsYXNzIH0gdWstYW5pbWF0aW9uLXNjYWxlLXVwIHVrLWFuaW1hdGlvbi1yZXZlcnNlYCk7XG4gICAgICAgIHR5cGV3cml0ZXIuc3RvcCgpO1xuICAgIH1cblxuICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwidGVybWluYWwtY2xvc2VcIikub25jbGljayA9IGNsb3NlV2luZG93O1xuXG4gICAgdHlwZXdyaXRlci5hcHBlbmRUZXh0KFwiUHl0aG9uIDMuNi40IChkZWZhdWx0LCBKYW4gIDUgMjAxOCwgMDI6MzU6NDApXFxuXCIpXG4gICAgICAgIC5hcHBlbmRUZXh0KFwiW0dDQyA3LjIuMSAyMDE3MTIyNF0gb24gZGFyd2luXFxuXCIpXG4gICAgICAgIC5hcHBlbmRUZXh0KFwiVHlwZSBcXFwiaGVscFxcXCIsIFxcXCJjb3B5cmlnaHRcXFwiLCBcXFwiY3JlZGl0c1xcXCIgb3IgXFxcImxpY2Vuc2VcXFwiIGZvciBtb3JlIGluZm9ybWF0aW9uLlxcblwiKVxuICAgICAgICAuYXBwZW5kVGV4dChcIj4+PiBcIilcbiAgICAgICAgLnBhdXNlRm9yKDEwMDApXG4gICAgICAgIC50eXBlU3RyaW5nKFwiaW1wb3IgcmVxdWVzdHNcIilcbiAgICAgICAgLmRlbGV0ZUNoYXJzKDkpXG4gICAgICAgIC50eXBlU3RyaW5nKFwidCByZXF1ZXN0c1xcblwiKVxuICAgICAgICAuYXBwZW5kVGV4dChcIj4+PiBcIilcbiAgICAgICAgLnBhdXNlRm9yKDc1MClcbiAgICAgICAgLmNoYW5nZVNldHRpbmdzKHtcInR5cGluZ1NwZWVkXCI6IFwibmF0dXJhbFwifSlcbiAgICAgICAgLnR5cGVTdHJpbmcoYHJlc3BvbnNlID0gcmVxdWVzdHMuJHsgd2luZG93Ll9SZXF1ZXN0TWV0aG9kIH0oJ2h0dHBzOi8vcHl0aGltYClcbiAgICAgICAgLmRlbGV0ZUNoYXJzKDIpXG4gICAgICAgIC50eXBlU3RyaW5nKFwib25kaXNjb3JkLmNvbi9cIilcbiAgICAgICAgLmRlbGV0ZUNoYXJzKDIpXG4gICAgICAgIC50eXBlU3RyaW5nKGBtJHsgd2luZG93Ll9QYXRoIH0nKVxcbmApXG4gICAgICAgIC5wYXVzZUZvcigxMDAwKVxuICAgICAgICAuYXBwZW5kVGV4dChgJmx0O1Jlc3BvbnNlIFskeyB3aW5kb3cuX0NvZGUgfV0mZ3Q7XFxuPj4+IGApXG4gICAgICAgIC50eXBlU3RyaW5nKFwiIyBobW1tbVwiKVxuICAgICAgICAucGF1c2VGb3IoMTAwMClcbiAgICAgICAgLmRlbGV0ZUNoYXJzKDcpXG4gICAgICAgIC5wYXVzZUZvcigxMDAwKVxuICAgICAgICAudHlwZVN0cmluZyhcInJlc3BvbnNlLnRleHRcXG5cIilcbiAgICAgICAgLmFwcGVuZFRleHQoYCR7IHdpbmRvdy5fRXJyb3JNc2cgfVxcbj4+PiBgKVxuICAgICAgICAuc3RhcnQoKTtcbn1cbiIsIlwidXNlIHN0cmljdFwiO1xuXG4oZnVuY3Rpb24oKXsgLy8gVXNlIGEgY2xvc3VyZSB0byBhdm9pZCBwb2xsdXRpbmcgZ2xvYmFsIHNjb3BlXG4gICAgLy8gVE9ETzogVGhpcyBuZWVkcyB0byBiZSBidWlsdCBpbnRvIHRoZSBqYW1zIHN5c3RlbVxuICAgIGNvbnN0IHN0YXJ0amFtID0gbmV3IERhdGUoRGF0ZS5VVEMoMjAxOCwgMiwgMjMpKTtcbiAgICBjb25zdCBlbmRqYW0gPSBuZXcgRGF0ZShEYXRlLlVUQygyMDE4LCAyLCAyNikpO1xuXG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICBsZXQgZ29hbDtcblxuICAgIGlmIChub3cgKyAxMDAwIDwgZW5kamFtLmdldFRpbWUoKSkgeyAvLyBPbmx5IGRvIGFueXRoaW5nIGlmIHRoZSBqYW0gaGFzbid0IGVuZGVkXG4gICAgICAgIFVJa2l0Lm5vdGlmaWNhdGlvbiggLy8gU3Bhd24gdGhlIG5vdGlmaWNhdGlvblxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIFwibWVzc2FnZVwiOiBcIlwiXG4gICAgICAgICAgICAgICAgICArIFwiPGRpdiBjbGFzcz0ndWstdGV4dC1jZW50ZXInPlwiXG4gICAgICAgICAgICAgICAgICArIFwiICAgIDxzcGFuIGlkPVxcXCJjb3VudGRvd24tdGl0bGVcXFwiIGNsYXNzPVxcXCJ1ay10ZXh0LWNlbnRlclxcXCI+XCJcbiAgICAgICAgICAgICAgICAgICsgXCIgICAgICAgIDxhIGhyZWY9XFxcIi9pbmZvL2phbXNcXFwiPkNvZGUgSmFtPC9hPiBDb3VudGRvd25cIlxuICAgICAgICAgICAgICAgICAgKyBcIiAgICA8L3NwYW4+XCJcbiAgICAgICAgICAgICAgICAgICsgXCIgICAgPHAgY2xhc3M9J3VrLXRleHQtbGFyZ2UnIGlkPVxcXCJjb3VudGRvd24tcmVtYWluaW5nXFxcIj4uLi48L3A+XCJcbiAgICAgICAgICAgICAgICAgICsgXCI8c21hbGwgc3R5bGU9J2ZvbnQtc2l6ZTogMC42ZW07Jz4oVGFwL2NsaWNrIHRvIGRpc21pc3MpPC9zbWFsbD5cIlxuICAgICAgICAgICAgICAgICAgKyBcIjwvZGl2PlwiLFxuICAgICAgICAgICAgICAgIFwicG9zXCI6IFwiYm90dG9tLXJpZ2h0XCIsXG4gICAgICAgICAgICAgICAgXCJ0aW1lb3V0XCI6IGVuZGphbSAtIG5vd1xuICAgICAgICAgICAgfVxuICAgICAgICApO1xuXG4gICAgICAgIGNvbnN0IGhlYWRpbmcgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImNvdW50ZG93bi10aXRsZVwiKTtcblxuICAgICAgICBpZiAobm93ID4gc3RhcnRqYW0uZ2V0VGltZSgpKSB7IC8vIEphbSdzIGFscmVhZHkgc3RhcnRlZFxuICAgICAgICAgICAgaGVhZGluZy5pbm5lckhUTUwgPSBcIkN1cnJlbnQgPGEgaHJlZj1cXFwiL2luZm8vamFtc1xcXCI+Y29kZSBqYW08L2E+IGVuZHMgaW4uLi5cIjtcbiAgICAgICAgICAgIGdvYWwgPSBlbmRqYW0uZ2V0VGltZSgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaGVhZGluZy5pbm5lckhUTUwgPSBcIk5leHQgPGEgaHJlZj1cXFwiL2luZm8vamFtc1xcXCI+Y29kZSBqYW08L2E+IHN0YXJ0cyBpbi4uLlwiO1xuICAgICAgICAgICAgZ29hbCA9IHN0YXJ0amFtLmdldFRpbWUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJlZnJlc2hDb3VudGRvd24gPSBzZXRJbnRlcnZhbCgoKSA9PiB7IC8vIENyZWF0ZSBhIHJlcGVhdGluZyB0YXNrXG4gICAgICAgICAgICBsZXQgZGVsdGEgPSBnb2FsIC0gRGF0ZS5ub3coKTsgLy8gVGltZSB1bnRpbCB0aGUgZ29hbCBpcyBtZXRcblxuICAgICAgICAgICAgaWYgKGRlbHRhIDw9IDEwMDApIHsgLy8gR29hbCBoYXMgYmVlbiBtZXQsIGJlc3QgcmVsb2FkXG4gICAgICAgICAgICAgICAgY2xlYXJJbnRlcnZhbChyZWZyZXNoQ291bnRkb3duKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbG9jYXRpb24ucmVsb2FkKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGxldCBkYXlzID0gTWF0aC5mbG9vcihkZWx0YSAvICgyNCAqIDYwICogNjAgKiAxMDAwKSk7XG4gICAgICAgICAgICBkZWx0YSAtPSBkYXlzICogKDI0ICogNjAgKiA2MCAqIDEwMDApO1xuXG4gICAgICAgICAgICBsZXQgaG91cnMgPSBNYXRoLmZsb29yKGRlbHRhIC8gKDYwICogNjAgKiAxMDAwKSk7XG4gICAgICAgICAgICBkZWx0YSAtPSBob3VycyAqICg2MCAqIDYwICogMTAwMCk7XG5cbiAgICAgICAgICAgIGxldCBtaW51dGVzID0gTWF0aC5mbG9vcihkZWx0YSAvICg2MCAqIDEwMDApKTtcbiAgICAgICAgICAgIGRlbHRhIC09IG1pbnV0ZXMgKiAoNjAgKiAxMDAwKTtcblxuICAgICAgICAgICAgbGV0IHNlY29uZHMgPSBNYXRoLmZsb29yKGRlbHRhIC8gMTAwMCk7XG5cbiAgICAgICAgICAgIGlmIChkYXlzIDwgMTApIHtcbiAgICAgICAgICAgICAgICBkYXlzID0gYDAke2RheXN9YDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGhvdXJzIDwgMTApIHtcbiAgICAgICAgICAgICAgICBob3VycyA9IGAwJHtob3Vyc31gO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAobWludXRlcyA8IDEwKSB7XG4gICAgICAgICAgICAgICAgbWludXRlcyA9IGAwJHttaW51dGVzfWA7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChzZWNvbmRzIDwgMTApIHtcbiAgICAgICAgICAgICAgICBzZWNvbmRzID0gYDAke3NlY29uZHN9YDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImNvdW50ZG93bi1yZW1haW5pbmdcIikuaW5uZXJIVE1MID0gYCR7ZGF5c306JHtob3Vyc306JHttaW51dGVzfToke3NlY29uZHN9YDtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHsgLy8gTm90aWZpY2F0aW9uIHdhcyBwcm9iYWJseSBjbG9zZWQsIHNvIHdlIGNhbiBzdG9wIGNvdW50aW5nXG4gICAgICAgICAgICAgICAgcmV0dXJuIGNsZWFySW50ZXJ2YWwocmVmcmVzaENvdW50ZG93bik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIDUwMCk7XG4gICAgfVxufSkoKTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG4vKiBleHBvcnRlZCBKYW1BY3Rpb25zICovXG5cbmNsYXNzIEphbUFjdGlvbnMge1xuICAgIGNvbnN0cnVjdG9yKHVybCwgY3NyZl90b2tlbikge1xuICAgICAgICB0aGlzLnVybCA9IHVybDtcbiAgICAgICAgdGhpcy5jc3JmX3Rva2VuID0gY3NyZl90b2tlbjtcbiAgICB9XG5cbiAgICBzZW5kKGFjdGlvbiwgbWV0aG9kLCBkYXRhLCBjYWxsYmFjaykge1xuICAgICAgICBkYXRhW1wiYWN0aW9uXCJdID0gYWN0aW9uO1xuXG4gICAgICAgICQuYWpheCh0aGlzLnVybCwge1xuICAgICAgICAgICAgXCJkYXRhXCI6IGRhdGEsXG4gICAgICAgICAgICBcImRhdGFUeXBlXCI6IFwianNvblwiLFxuICAgICAgICAgICAgXCJoZWFkZXJzXCI6IHtcIlgtQ1NSRlRva2VuXCI6IHRoaXMuY3NyZl90b2tlbn0sXG4gICAgICAgICAgICBcIm1ldGhvZFwiOiBtZXRob2QsXG4gICAgICAgIH0pLmRvbmUoZGF0YSA9PiB7XG4gICAgICAgICAgICBpZiAoXCJlcnJvcl9jb2RlXCIgaW4gZGF0YSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhmYWxzZSwgZGF0YSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayh0cnVlLCBkYXRhKTtcbiAgICAgICAgfSkuZmFpbCgoKSA9PiBjYWxsYmFjayhmYWxzZSkpO1xuICAgIH1cblxuICAgIHNlbmRfanNvbihhY3Rpb24sIG1ldGhvZCwgZGF0YSwgY2FsbGJhY2spIHtcbiAgICAgICAgZGF0YVtcImFjdGlvblwiXSA9IGFjdGlvbjtcblxuICAgICAgICAkLmFqYXgodGhpcy51cmwsIHtcbiAgICAgICAgICAgIFwiZGF0YVwiOiBKU09OLnN0cmluZ2lmeShkYXRhKSxcbiAgICAgICAgICAgIFwiZGF0YVR5cGVcIjogXCJqc29uXCIsXG4gICAgICAgICAgICBcImhlYWRlcnNcIjoge1wiWC1DU1JGVG9rZW5cIjogdGhpcy5jc3JmX3Rva2VufSxcbiAgICAgICAgICAgIFwiY29udGVudFR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uXCIsXG4gICAgICAgICAgICBcIm1ldGhvZFwiOiBtZXRob2RcbiAgICAgICAgfSkuZG9uZShkYXRhID0+IHtcbiAgICAgICAgICAgIGlmIChcImVycm9yX2NvZGVcIiBpbiBkYXRhKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGZhbHNlLCBkYXRhKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKHRydWUsIGRhdGEpO1xuICAgICAgICB9KS5mYWlsKCgpID0+IGNhbGxiYWNrKGZhbHNlKSk7XG4gICAgfVxuXG4gICAgc2V0X3N0YXRlKGphbSwgc3RhdGUsIGNhbGxiYWNrKSB7XG4gICAgICAgIHRoaXMuc2VuZChcbiAgICAgICAgICAgIFwic3RhdGVcIixcbiAgICAgICAgICAgIFwiUE9TVFwiLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIFwiamFtXCI6IGphbSxcbiAgICAgICAgICAgICAgICBcInN0YXRlXCI6IHN0YXRlXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY2FsbGJhY2tcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBnZXRfcXVlc3Rpb25zKGNhbGxiYWNrKSB7XG4gICAgICAgIHRoaXMuc2VuZChcbiAgICAgICAgICAgIFwicXVlc3Rpb25zXCIsXG4gICAgICAgICAgICBcIkdFVFwiLFxuICAgICAgICAgICAge30sXG4gICAgICAgICAgICBjYWxsYmFja1xuICAgICAgICApO1xuICAgIH1cblxuICAgIGNyZWF0ZV9xdWVzdGlvbihkYXRhLCBjYWxsYmFjaykge1xuICAgICAgICB0aGlzLnNlbmRfanNvbihcbiAgICAgICAgICAgIFwicXVlc3Rpb25zXCIsXG4gICAgICAgICAgICBcIlBPU1RcIixcbiAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICBjYWxsYmFja1xuICAgICAgICApO1xuICAgIH1cblxuICAgIGRlbGV0ZV9xdWVzdGlvbihpZCwgY2FsbGJhY2spIHtcbiAgICAgICAgdGhpcy5zZW5kKFxuICAgICAgICAgICAgXCJxdWVzdGlvblwiLFxuICAgICAgICAgICAgXCJERUxFVEVcIixcbiAgICAgICAgICAgIHtcImlkXCI6IGlkfSxcbiAgICAgICAgICAgIGNhbGxiYWNrXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgYXNzb2NpYXRlX3F1ZXN0aW9uKGZvcm0sIHF1ZXN0aW9uLCBjYWxsYmFjaykge1xuICAgICAgICB0aGlzLnNlbmQoXG4gICAgICAgICAgICBcImFzc29jaWF0ZV9xdWVzdGlvblwiLFxuICAgICAgICAgICAgXCJQT1NUXCIsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgXCJmb3JtXCI6IGZvcm0sXG4gICAgICAgICAgICAgICAgXCJxdWVzdGlvblwiOiBxdWVzdGlvbixcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjYWxsYmFja1xuICAgICAgICApO1xuICAgIH1cblxuICAgIGRpc2Fzc29jaWF0ZV9xdWVzdGlvbihmb3JtLCBxdWVzdGlvbiwgY2FsbGJhY2spIHtcbiAgICAgICAgdGhpcy5zZW5kKFxuICAgICAgICAgICAgXCJkaXNhc3NvY2lhdGVfcXVlc3Rpb25cIixcbiAgICAgICAgICAgIFwiUE9TVFwiLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIFwiZm9ybVwiOiBmb3JtLFxuICAgICAgICAgICAgICAgIFwicXVlc3Rpb25cIjogcXVlc3Rpb24sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY2FsbGJhY2tcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBjcmVhdGVfaW5mcmFjdGlvbihpZCwgcmVhc29uLCBudW1iZXIsIGNhbGxiYWNrKSB7XG4gICAgICAgIHRoaXMuc2VuZChcbiAgICAgICAgICAgIFwiaW5mcmFjdGlvblwiLFxuICAgICAgICAgICAgXCJQT1NUXCIsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgXCJwYXJ0aWNpcGFudFwiOiBpZCxcbiAgICAgICAgICAgICAgICBcInJlYXNvblwiOiByZWFzb24sXG4gICAgICAgICAgICAgICAgXCJudW1iZXJcIjogbnVtYmVyXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY2FsbGJhY2tcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBkZWxldGVfaW5mcmFjdGlvbihpZCwgY2FsbGJhY2spIHtcbiAgICAgICAgdGhpcy5zZW5kKFxuICAgICAgICAgICAgXCJpbmZyYWN0aW9uXCIsXG4gICAgICAgICAgICBcIkRFTEVURVwiLFxuICAgICAgICAgICAge1wiaWRcIjogaWR9LFxuICAgICAgICAgICAgY2FsbGJhY2tcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBhcHByb3ZlX2FwcGxpY2F0aW9uKGlkLCBjYWxsYmFjaykge1xuICAgICAgICB0aGlzLnNlbmQoXG4gICAgICAgICAgICBcImFwcHJvdmVfYXBwbGljYXRpb25cIixcbiAgICAgICAgICAgIFwiUE9TVFwiLFxuICAgICAgICAgICAge1wiaWRcIjogaWR9LFxuICAgICAgICAgICAgY2FsbGJhY2tcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICB1bmFwcHJvdmVfYXBwbGljYXRpb24oaWQsIGNhbGxiYWNrKSB7XG4gICAgICAgIHRoaXMuc2VuZChcbiAgICAgICAgICAgIFwidW5hcHByb3ZlX2FwcGxpY2F0aW9uXCIsXG4gICAgICAgICAgICBcIlBPU1RcIixcbiAgICAgICAgICAgIHtcImlkXCI6IGlkfSxcbiAgICAgICAgICAgIGNhbGxiYWNrXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZ2VuZXJhdGVfdGVhbXMoamFtLCBjYWxsYmFjaykge1xuICAgICAgICB0aGlzLnNlbmQoXG4gICAgICAgICAgICBcImdlbmVyYXRlX3RlYW1zXCIsXG4gICAgICAgICAgICBcIlBPU1RcIixcbiAgICAgICAgICAgIHtcImphbVwiOiBqYW19LFxuICAgICAgICAgICAgY2FsbGJhY2tcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBjcmVhdGVfdGVhbShqYW0sIGNhbGxiYWNrKSB7XG4gICAgICAgIHRoaXMuc2VuZChcbiAgICAgICAgICAgIFwiY3JlYXRlX3RlYW1cIixcbiAgICAgICAgICAgIFwiUE9TVFwiLFxuICAgICAgICAgICAge1wiamFtXCI6IGphbX0sXG4gICAgICAgICAgICBjYWxsYmFja1xuICAgICAgICApO1xuICAgIH1cblxuICAgIHJlcm9sbF90ZWFtKHRlYW0sIGNhbGxiYWNrKSB7XG4gICAgICAgIHRoaXMuc2VuZChcbiAgICAgICAgICAgIFwicmVyb2xsX3RlYW1cIixcbiAgICAgICAgICAgIFwiUE9TVFwiLFxuICAgICAgICAgICAge1widGVhbVwiOiB0ZWFtfSxcbiAgICAgICAgICAgIGNhbGxiYWNrXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZGVsZXRlX3RlYW0odGVhbSwgY2FsbGJhY2spIHtcbiAgICAgICAgdGhpcy5zZW5kKFxuICAgICAgICAgICAgXCJ0ZWFtXCIsXG4gICAgICAgICAgICBcIkRFTEVURVwiLFxuICAgICAgICAgICAge1widGVhbVwiOiB0ZWFtfSxcbiAgICAgICAgICAgIGNhbGxiYWNrXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgc2V0X3RlYW1fbWVtYmVyKGphbSwgbWVtYmVyLCB0ZWFtLCBjYWxsYmFjaykge1xuICAgICAgICB0aGlzLnNlbmQoXG4gICAgICAgICAgICBcInNldF90ZWFtX21lbWJlclwiLFxuICAgICAgICAgICAgXCJQT1NUXCIsXG4gICAgICAgICAgICB7XCJqYW1cIjogamFtLCBcIm1lbWJlclwiOiBtZW1iZXIsIFwidGVhbVwiOiB0ZWFtfSxcbiAgICAgICAgICAgIGNhbGxiYWNrXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgc2V0X3dpbm5pbmdfdGVhbSh0ZWFtLCBjYWxsYmFjaykge1xuICAgICAgICB0aGlzLnNlbmQoXG4gICAgICAgICAgICBcInNldF93aW5uaW5nX3RlYW1cIixcbiAgICAgICAgICAgIFwiUE9TVFwiLFxuICAgICAgICAgICAge1widGVhbVwiOiB0ZWFtfSxcbiAgICAgICAgICAgIGNhbGxiYWNrXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgdW5zZXRfd2lubmluZ190ZWFtKGphbSwgY2FsbGJhY2spIHtcbiAgICAgICAgdGhpcy5zZW5kKFxuICAgICAgICAgICAgXCJ1bnNldF93aW5uaW5nX3RlYW1cIixcbiAgICAgICAgICAgIFwiUE9TVFwiLFxuICAgICAgICAgICAge1wiamFtXCI6IGphbX0sXG4gICAgICAgICAgICBjYWxsYmFja1xuICAgICAgICApO1xuICAgIH1cbn1cbiIsIlwidXNlIHN0cmljdFwiO1xuXG4vKiBleHBvcnRlZCByZXZpc2lvbl9kaWZmICovXG5cbmZ1bmN0aW9uIHJldmlzaW9uX2RpZmYocmV2aXNpb25zKSB7XG4gICAgY29uc3QgYnV0dG9ucyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCJ0ZCBpbnB1dFwiKTsgLy8gRmV0Y2ggYWxsIHJhZGlvIGJ1dHRvbnNcbiAgICBjb25zdCBpZF9yZWcgPSAvY29tcGFyZS0oYmVmb3JlfGFmdGVyKS0oW1xcd3wtXSspLzsgLy8gTWF0Y2hlcyBjb21wYXJlLWFmdGVyL2JlZm9yZS1JRFxuXG5cbiAgICBmdW5jdGlvbiBnZXRSZXZpc2lvbklkKGVsZW1lbnQpe1xuICAgICAgICBjb25zdCBlID0gZWxlbWVudC5pZC5tYXRjaChpZF9yZWcpOyAvLyBNYXRjaCBJRCB3aXRoIFJlZ0V4cFxuICAgICAgICByZXR1cm4gW2VbMV0sIGVbMl1dOyAvLyBlIGlzIGluIGZvcm1hdCBvZiBbZnVsbCBpZCwgYWZ0ZXIvYmVmb3JlLCBJRF0gd2Ugb25seSB3YW50IElEICYgbW9kZVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldFJldmlzaW9uKGlkKSB7XG4gICAgICAgIGNvbnN0IGUgPSByZXZpc2lvbnMuZmlsdGVyKCh4KSA9PiB7XG4gICAgICAgICAgICAvLyBGaWx0ZXIgdGhyb3VnaCBhbGwgcmV2aXNpb25zIHRvIGZpbmQgdGhlIHNlbGVjdGVkIG9uZSAocmV2aXNpb25zIGluIGRlY2xhcmVkIGluIHRoZSB0ZW1wbGF0ZSlcbiAgICAgICAgICAgIHJldHVybiB4LmlkID09PSBpZDtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBlWzBdO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJhZGlvQnV0dG9uQ2hlY2tlZChlbGVtZW50KSB7XG4gICAgICAgIGNvbnN0IGlkID0gZ2V0UmV2aXNpb25JZChlbGVtZW50KTtcbiAgICAgICAgY29uc3QgcmV2ID0gZ2V0UmV2aXNpb24oaWRbMV0pO1xuICAgICAgICBpZiAoaWRbMF0gPT09IFwiYWZ0ZXJcIil7XG4gICAgICAgICAgICAvKlxuICAgICAgICAgICAgICogRGVzZWxlY3QgdGhlIG9wcG9zaXRlIGNoZWNrYm94IHRvIHRoZSBvbmUgd2hpY2ggaGFzIGJlZW4gY2hlY2tlZFxuICAgICAgICAgICAgICogYmVjYXVzZSB3ZSBkb24ndCB3YW50IGNoZWNraW5nIG9mIHRoZSBzYW1lIHJldmlzaW9uXG4gICAgICAgICAgICAgKi9cblxuICAgICAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgI2NvbXBhcmUtYmVmb3JlLSR7aWRbMV19YCkuY2hlY2tlZCA9IGZhbHNlO1xuXG4gICAgICAgICAgICBidXR0b25zLmZvckVhY2goKGUpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZ2V0UmV2aXNpb25JZChlKVswXSA9PT0gXCJhZnRlclwiICYmIGUuaWQgIT09IGVsZW1lbnQuaWQpIHsgLy8gRGVzZWxlY3QgYWxsIGNoZWNrYm94ZXMgaW4gdGhlIHNhbWUgcm93XG4gICAgICAgICAgICAgICAgICAgIGUuY2hlY2tlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2UgeyAvLyBUaGlzIGVsc2UgZG9lcyB0aGUgc2FtZSBhcyBhYm92ZSBidXQgZm9yIHRoZSBiZWZvcmUgY29sdW1uXG4gICAgICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGAjY29tcGFyZS1hZnRlci0ke2lkWzFdfWApLmNoZWNrZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIGJ1dHRvbnMuZm9yRWFjaCgoZSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChnZXRSZXZpc2lvbklkKGUpWzBdID09PSBcImJlZm9yZVwiICYmIGUuaWQgIT09IGVsZW1lbnQuaWQpIHtcbiAgICAgICAgICAgICAgICAgICAgZS5jaGVja2VkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLy8gVGhpcyBtYWtlcyBzdXJlIHRoYXQgeW91IGRvIG5vdCBjb21wYXJlIGEgbmV3IHJldmlzaW9uIHdpdGggYW4gb2xkIG9uZVxuICAgICAgICAgICAgICAgIGlmIChnZXRSZXZpc2lvbklkKGUpWzBdID09PSBcImFmdGVyXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdG1wcmV2ID0gZ2V0UmV2aXNpb24oZ2V0UmV2aXNpb25JZChlKVsxXSk7XG4gICAgICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKHRtcHJldik7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0bXByZXYuZGF0ZSA8PSByZXYuZGF0ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgIyR7ZS5pZH1gKS5zZXRBdHRyaWJ1dGUoXCJkaXNhYmxlZFwiLCBcIlwiKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYCMke2UuaWR9YCkucmVtb3ZlQXR0cmlidXRlKFwiZGlzYWJsZWRcIik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBhZnQsIGJlZjtcblxuICAgICAgICBidXR0b25zLmZvckVhY2goKGJ1dHRvbikgPT4geyAvLyBGaW5kIHRoZSBzZWxlY3RlZCBwb3N0c1xuICAgICAgICAgICAgY29uc3QgaWQgPSBnZXRSZXZpc2lvbklkKGJ1dHRvbik7XG4gICAgICAgICAgICBpZiAoYnV0dG9uLmNoZWNrZWQgJiYgaWRbMF0gPT09IFwiYmVmb3JlXCIpIHtcbiAgICAgICAgICAgICAgICBiZWYgPSBpZFsxXTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGJ1dHRvbi5jaGVja2VkICYmIGlkWzBdID09PSBcImFmdGVyXCIpIHtcbiAgICAgICAgICAgICAgICBhZnQgPSBpZFsxXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gU3dpdGNoIHRoZSBidXR0b25zIEhSRUYgdG8gcG9pbnQgdG8gdGhlIGNvcnJlY3QgY29tcGFyZSBVUkxcbiAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJjb21wYXJlLXN1Ym1pdFwiKS5ocmVmID0gYC9oaXN0b3J5L2NvbXBhcmUvJHtiZWZ9LyR7YWZ0fWA7XG5cbiAgICB9XG5cbiAgICBidXR0b25zLmZvckVhY2goKGJ1dHRvbikgPT4ge1xuICAgICAgICBidXR0b24uY2hlY2tlZCA9IGZhbHNlOyAvLyBTb21lIGJyb3dzZXJzIHJlbWVtYmVyIGlmIGEgYnV0dG9uIGlzIGNoZWNrZWQuXG4gICAgICAgIGJ1dHRvbi5vbmNoYW5nZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmFkaW9CdXR0b25DaGVja2VkKGJ1dHRvbik7XG4gICAgICAgIH07XG4gICAgfSk7XG59XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuLyogZXhwb3J0ZWQgd2lraV9zaWRlYmFyICovXG5cbmZ1bmN0aW9uIHdpa2lfc2lkZWJhcigpe1xuICAgIGNvbnN0IHZpc2libGVfY2xhc3MgPSBcInVrLXZpc2libGVAc1wiO1xuICAgIGNvbnN0IHNpZGViYXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcIndpa2ktc2lkZWJhclwiKTtcbiAgICBjb25zdCBkaXNwbGF5X2J1dHRvbiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwid2lraS1zaWRlYmFyLWJ1dHRvblwiKTtcblxuICAgIGRpc3BsYXlfYnV0dG9uLm9uY2xpY2sgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgaWYgKHNpZGViYXIuY2xhc3NMaXN0LmNvbnRhaW5zKHZpc2libGVfY2xhc3MpKSB7XG4gICAgICAgICAgICBzaWRlYmFyLmNsYXNzTGlzdC5yZW1vdmUodmlzaWJsZV9jbGFzcyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzaWRlYmFyLmNsYXNzTGlzdC5hZGQodmlzaWJsZV9jbGFzcyk7XG4gICAgICAgIH1cbiAgICB9O1xufVxuIiwiLy8hIG1vbWVudC5qc1xuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgPyBtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkoKSA6XG4gICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKGZhY3RvcnkpIDpcbiAgICBnbG9iYWwubW9tZW50ID0gZmFjdG9yeSgpXG59KHRoaXMsIChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIHZhciBob29rQ2FsbGJhY2s7XG5cbiAgICBmdW5jdGlvbiBob29rcyAoKSB7XG4gICAgICAgIHJldHVybiBob29rQ2FsbGJhY2suYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICB9XG5cbiAgICAvLyBUaGlzIGlzIGRvbmUgdG8gcmVnaXN0ZXIgdGhlIG1ldGhvZCBjYWxsZWQgd2l0aCBtb21lbnQoKVxuICAgIC8vIHdpdGhvdXQgY3JlYXRpbmcgY2lyY3VsYXIgZGVwZW5kZW5jaWVzLlxuICAgIGZ1bmN0aW9uIHNldEhvb2tDYWxsYmFjayAoY2FsbGJhY2spIHtcbiAgICAgICAgaG9va0NhbGxiYWNrID0gY2FsbGJhY2s7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNBcnJheShpbnB1dCkge1xuICAgICAgICByZXR1cm4gaW5wdXQgaW5zdGFuY2VvZiBBcnJheSB8fCBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoaW5wdXQpID09PSAnW29iamVjdCBBcnJheV0nO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzT2JqZWN0KGlucHV0KSB7XG4gICAgICAgIC8vIElFOCB3aWxsIHRyZWF0IHVuZGVmaW5lZCBhbmQgbnVsbCBhcyBvYmplY3QgaWYgaXQgd2Fzbid0IGZvclxuICAgICAgICAvLyBpbnB1dCAhPSBudWxsXG4gICAgICAgIHJldHVybiBpbnB1dCAhPSBudWxsICYmIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChpbnB1dCkgPT09ICdbb2JqZWN0IE9iamVjdF0nO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzT2JqZWN0RW1wdHkob2JqKSB7XG4gICAgICAgIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcykge1xuICAgICAgICAgICAgcmV0dXJuIChPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhvYmopLmxlbmd0aCA9PT0gMCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YXIgaztcbiAgICAgICAgICAgIGZvciAoayBpbiBvYmopIHtcbiAgICAgICAgICAgICAgICBpZiAob2JqLmhhc093blByb3BlcnR5KGspKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzVW5kZWZpbmVkKGlucHV0KSB7XG4gICAgICAgIHJldHVybiBpbnB1dCA9PT0gdm9pZCAwO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzTnVtYmVyKGlucHV0KSB7XG4gICAgICAgIHJldHVybiB0eXBlb2YgaW5wdXQgPT09ICdudW1iZXInIHx8IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChpbnB1dCkgPT09ICdbb2JqZWN0IE51bWJlcl0nO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzRGF0ZShpbnB1dCkge1xuICAgICAgICByZXR1cm4gaW5wdXQgaW5zdGFuY2VvZiBEYXRlIHx8IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChpbnB1dCkgPT09ICdbb2JqZWN0IERhdGVdJztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtYXAoYXJyLCBmbikge1xuICAgICAgICB2YXIgcmVzID0gW10sIGk7XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgIHJlcy5wdXNoKGZuKGFycltpXSwgaSkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaGFzT3duUHJvcChhLCBiKSB7XG4gICAgICAgIHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYSwgYik7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZXh0ZW5kKGEsIGIpIHtcbiAgICAgICAgZm9yICh2YXIgaSBpbiBiKSB7XG4gICAgICAgICAgICBpZiAoaGFzT3duUHJvcChiLCBpKSkge1xuICAgICAgICAgICAgICAgIGFbaV0gPSBiW2ldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGhhc093blByb3AoYiwgJ3RvU3RyaW5nJykpIHtcbiAgICAgICAgICAgIGEudG9TdHJpbmcgPSBiLnRvU3RyaW5nO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGhhc093blByb3AoYiwgJ3ZhbHVlT2YnKSkge1xuICAgICAgICAgICAgYS52YWx1ZU9mID0gYi52YWx1ZU9mO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGE7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY3JlYXRlVVRDIChpbnB1dCwgZm9ybWF0LCBsb2NhbGUsIHN0cmljdCkge1xuICAgICAgICByZXR1cm4gY3JlYXRlTG9jYWxPclVUQyhpbnB1dCwgZm9ybWF0LCBsb2NhbGUsIHN0cmljdCwgdHJ1ZSkudXRjKCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZGVmYXVsdFBhcnNpbmdGbGFncygpIHtcbiAgICAgICAgLy8gV2UgbmVlZCB0byBkZWVwIGNsb25lIHRoaXMgb2JqZWN0LlxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZW1wdHkgICAgICAgICAgIDogZmFsc2UsXG4gICAgICAgICAgICB1bnVzZWRUb2tlbnMgICAgOiBbXSxcbiAgICAgICAgICAgIHVudXNlZElucHV0ICAgICA6IFtdLFxuICAgICAgICAgICAgb3ZlcmZsb3cgICAgICAgIDogLTIsXG4gICAgICAgICAgICBjaGFyc0xlZnRPdmVyICAgOiAwLFxuICAgICAgICAgICAgbnVsbElucHV0ICAgICAgIDogZmFsc2UsXG4gICAgICAgICAgICBpbnZhbGlkTW9udGggICAgOiBudWxsLFxuICAgICAgICAgICAgaW52YWxpZEZvcm1hdCAgIDogZmFsc2UsXG4gICAgICAgICAgICB1c2VySW52YWxpZGF0ZWQgOiBmYWxzZSxcbiAgICAgICAgICAgIGlzbyAgICAgICAgICAgICA6IGZhbHNlLFxuICAgICAgICAgICAgcGFyc2VkRGF0ZVBhcnRzIDogW10sXG4gICAgICAgICAgICBtZXJpZGllbSAgICAgICAgOiBudWxsLFxuICAgICAgICAgICAgcmZjMjgyMiAgICAgICAgIDogZmFsc2UsXG4gICAgICAgICAgICB3ZWVrZGF5TWlzbWF0Y2ggOiBmYWxzZVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldFBhcnNpbmdGbGFncyhtKSB7XG4gICAgICAgIGlmIChtLl9wZiA9PSBudWxsKSB7XG4gICAgICAgICAgICBtLl9wZiA9IGRlZmF1bHRQYXJzaW5nRmxhZ3MoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbS5fcGY7XG4gICAgfVxuXG4gICAgdmFyIHNvbWU7XG4gICAgaWYgKEFycmF5LnByb3RvdHlwZS5zb21lKSB7XG4gICAgICAgIHNvbWUgPSBBcnJheS5wcm90b3R5cGUuc29tZTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBzb21lID0gZnVuY3Rpb24gKGZ1bikge1xuICAgICAgICAgICAgdmFyIHQgPSBPYmplY3QodGhpcyk7XG4gICAgICAgICAgICB2YXIgbGVuID0gdC5sZW5ndGggPj4+IDA7XG5cbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgICAgICAgICBpZiAoaSBpbiB0ICYmIGZ1bi5jYWxsKHRoaXMsIHRbaV0sIGksIHQpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzVmFsaWQobSkge1xuICAgICAgICBpZiAobS5faXNWYWxpZCA9PSBudWxsKSB7XG4gICAgICAgICAgICB2YXIgZmxhZ3MgPSBnZXRQYXJzaW5nRmxhZ3MobSk7XG4gICAgICAgICAgICB2YXIgcGFyc2VkUGFydHMgPSBzb21lLmNhbGwoZmxhZ3MucGFyc2VkRGF0ZVBhcnRzLCBmdW5jdGlvbiAoaSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpICE9IG51bGw7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHZhciBpc05vd1ZhbGlkID0gIWlzTmFOKG0uX2QuZ2V0VGltZSgpKSAmJlxuICAgICAgICAgICAgICAgIGZsYWdzLm92ZXJmbG93IDwgMCAmJlxuICAgICAgICAgICAgICAgICFmbGFncy5lbXB0eSAmJlxuICAgICAgICAgICAgICAgICFmbGFncy5pbnZhbGlkTW9udGggJiZcbiAgICAgICAgICAgICAgICAhZmxhZ3MuaW52YWxpZFdlZWtkYXkgJiZcbiAgICAgICAgICAgICAgICAhZmxhZ3Mud2Vla2RheU1pc21hdGNoICYmXG4gICAgICAgICAgICAgICAgIWZsYWdzLm51bGxJbnB1dCAmJlxuICAgICAgICAgICAgICAgICFmbGFncy5pbnZhbGlkRm9ybWF0ICYmXG4gICAgICAgICAgICAgICAgIWZsYWdzLnVzZXJJbnZhbGlkYXRlZCAmJlxuICAgICAgICAgICAgICAgICghZmxhZ3MubWVyaWRpZW0gfHwgKGZsYWdzLm1lcmlkaWVtICYmIHBhcnNlZFBhcnRzKSk7XG5cbiAgICAgICAgICAgIGlmIChtLl9zdHJpY3QpIHtcbiAgICAgICAgICAgICAgICBpc05vd1ZhbGlkID0gaXNOb3dWYWxpZCAmJlxuICAgICAgICAgICAgICAgICAgICBmbGFncy5jaGFyc0xlZnRPdmVyID09PSAwICYmXG4gICAgICAgICAgICAgICAgICAgIGZsYWdzLnVudXNlZFRva2Vucy5sZW5ndGggPT09IDAgJiZcbiAgICAgICAgICAgICAgICAgICAgZmxhZ3MuYmlnSG91ciA9PT0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoT2JqZWN0LmlzRnJvemVuID09IG51bGwgfHwgIU9iamVjdC5pc0Zyb3plbihtKSkge1xuICAgICAgICAgICAgICAgIG0uX2lzVmFsaWQgPSBpc05vd1ZhbGlkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlzTm93VmFsaWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG0uX2lzVmFsaWQ7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY3JlYXRlSW52YWxpZCAoZmxhZ3MpIHtcbiAgICAgICAgdmFyIG0gPSBjcmVhdGVVVEMoTmFOKTtcbiAgICAgICAgaWYgKGZsYWdzICE9IG51bGwpIHtcbiAgICAgICAgICAgIGV4dGVuZChnZXRQYXJzaW5nRmxhZ3MobSksIGZsYWdzKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhtKS51c2VySW52YWxpZGF0ZWQgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgLy8gUGx1Z2lucyB0aGF0IGFkZCBwcm9wZXJ0aWVzIHNob3VsZCBhbHNvIGFkZCB0aGUga2V5IGhlcmUgKG51bGwgdmFsdWUpLFxuICAgIC8vIHNvIHdlIGNhbiBwcm9wZXJseSBjbG9uZSBvdXJzZWx2ZXMuXG4gICAgdmFyIG1vbWVudFByb3BlcnRpZXMgPSBob29rcy5tb21lbnRQcm9wZXJ0aWVzID0gW107XG5cbiAgICBmdW5jdGlvbiBjb3B5Q29uZmlnKHRvLCBmcm9tKSB7XG4gICAgICAgIHZhciBpLCBwcm9wLCB2YWw7XG5cbiAgICAgICAgaWYgKCFpc1VuZGVmaW5lZChmcm9tLl9pc0FNb21lbnRPYmplY3QpKSB7XG4gICAgICAgICAgICB0by5faXNBTW9tZW50T2JqZWN0ID0gZnJvbS5faXNBTW9tZW50T2JqZWN0O1xuICAgICAgICB9XG4gICAgICAgIGlmICghaXNVbmRlZmluZWQoZnJvbS5faSkpIHtcbiAgICAgICAgICAgIHRvLl9pID0gZnJvbS5faTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKGZyb20uX2YpKSB7XG4gICAgICAgICAgICB0by5fZiA9IGZyb20uX2Y7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpc1VuZGVmaW5lZChmcm9tLl9sKSkge1xuICAgICAgICAgICAgdG8uX2wgPSBmcm9tLl9sO1xuICAgICAgICB9XG4gICAgICAgIGlmICghaXNVbmRlZmluZWQoZnJvbS5fc3RyaWN0KSkge1xuICAgICAgICAgICAgdG8uX3N0cmljdCA9IGZyb20uX3N0cmljdDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKGZyb20uX3R6bSkpIHtcbiAgICAgICAgICAgIHRvLl90em0gPSBmcm9tLl90em07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpc1VuZGVmaW5lZChmcm9tLl9pc1VUQykpIHtcbiAgICAgICAgICAgIHRvLl9pc1VUQyA9IGZyb20uX2lzVVRDO1xuICAgICAgICB9XG4gICAgICAgIGlmICghaXNVbmRlZmluZWQoZnJvbS5fb2Zmc2V0KSkge1xuICAgICAgICAgICAgdG8uX29mZnNldCA9IGZyb20uX29mZnNldDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKGZyb20uX3BmKSkge1xuICAgICAgICAgICAgdG8uX3BmID0gZ2V0UGFyc2luZ0ZsYWdzKGZyb20pO1xuICAgICAgICB9XG4gICAgICAgIGlmICghaXNVbmRlZmluZWQoZnJvbS5fbG9jYWxlKSkge1xuICAgICAgICAgICAgdG8uX2xvY2FsZSA9IGZyb20uX2xvY2FsZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChtb21lbnRQcm9wZXJ0aWVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBtb21lbnRQcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgcHJvcCA9IG1vbWVudFByb3BlcnRpZXNbaV07XG4gICAgICAgICAgICAgICAgdmFsID0gZnJvbVtwcm9wXTtcbiAgICAgICAgICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKHZhbCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdG9bcHJvcF0gPSB2YWw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRvO1xuICAgIH1cblxuICAgIHZhciB1cGRhdGVJblByb2dyZXNzID0gZmFsc2U7XG5cbiAgICAvLyBNb21lbnQgcHJvdG90eXBlIG9iamVjdFxuICAgIGZ1bmN0aW9uIE1vbWVudChjb25maWcpIHtcbiAgICAgICAgY29weUNvbmZpZyh0aGlzLCBjb25maWcpO1xuICAgICAgICB0aGlzLl9kID0gbmV3IERhdGUoY29uZmlnLl9kICE9IG51bGwgPyBjb25maWcuX2QuZ2V0VGltZSgpIDogTmFOKTtcbiAgICAgICAgaWYgKCF0aGlzLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgdGhpcy5fZCA9IG5ldyBEYXRlKE5hTik7XG4gICAgICAgIH1cbiAgICAgICAgLy8gUHJldmVudCBpbmZpbml0ZSBsb29wIGluIGNhc2UgdXBkYXRlT2Zmc2V0IGNyZWF0ZXMgbmV3IG1vbWVudFxuICAgICAgICAvLyBvYmplY3RzLlxuICAgICAgICBpZiAodXBkYXRlSW5Qcm9ncmVzcyA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIHVwZGF0ZUluUHJvZ3Jlc3MgPSB0cnVlO1xuICAgICAgICAgICAgaG9va3MudXBkYXRlT2Zmc2V0KHRoaXMpO1xuICAgICAgICAgICAgdXBkYXRlSW5Qcm9ncmVzcyA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNNb21lbnQgKG9iaikge1xuICAgICAgICByZXR1cm4gb2JqIGluc3RhbmNlb2YgTW9tZW50IHx8IChvYmogIT0gbnVsbCAmJiBvYmouX2lzQU1vbWVudE9iamVjdCAhPSBudWxsKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBhYnNGbG9vciAobnVtYmVyKSB7XG4gICAgICAgIGlmIChudW1iZXIgPCAwKSB7XG4gICAgICAgICAgICAvLyAtMCAtPiAwXG4gICAgICAgICAgICByZXR1cm4gTWF0aC5jZWlsKG51bWJlcikgfHwgMDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBNYXRoLmZsb29yKG51bWJlcik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiB0b0ludChhcmd1bWVudEZvckNvZXJjaW9uKSB7XG4gICAgICAgIHZhciBjb2VyY2VkTnVtYmVyID0gK2FyZ3VtZW50Rm9yQ29lcmNpb24sXG4gICAgICAgICAgICB2YWx1ZSA9IDA7XG5cbiAgICAgICAgaWYgKGNvZXJjZWROdW1iZXIgIT09IDAgJiYgaXNGaW5pdGUoY29lcmNlZE51bWJlcikpIHtcbiAgICAgICAgICAgIHZhbHVlID0gYWJzRmxvb3IoY29lcmNlZE51bWJlcik7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuXG4gICAgLy8gY29tcGFyZSB0d28gYXJyYXlzLCByZXR1cm4gdGhlIG51bWJlciBvZiBkaWZmZXJlbmNlc1xuICAgIGZ1bmN0aW9uIGNvbXBhcmVBcnJheXMoYXJyYXkxLCBhcnJheTIsIGRvbnRDb252ZXJ0KSB7XG4gICAgICAgIHZhciBsZW4gPSBNYXRoLm1pbihhcnJheTEubGVuZ3RoLCBhcnJheTIubGVuZ3RoKSxcbiAgICAgICAgICAgIGxlbmd0aERpZmYgPSBNYXRoLmFicyhhcnJheTEubGVuZ3RoIC0gYXJyYXkyLmxlbmd0aCksXG4gICAgICAgICAgICBkaWZmcyA9IDAsXG4gICAgICAgICAgICBpO1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgICAgIGlmICgoZG9udENvbnZlcnQgJiYgYXJyYXkxW2ldICE9PSBhcnJheTJbaV0pIHx8XG4gICAgICAgICAgICAgICAgKCFkb250Q29udmVydCAmJiB0b0ludChhcnJheTFbaV0pICE9PSB0b0ludChhcnJheTJbaV0pKSkge1xuICAgICAgICAgICAgICAgIGRpZmZzKys7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRpZmZzICsgbGVuZ3RoRGlmZjtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB3YXJuKG1zZykge1xuICAgICAgICBpZiAoaG9va3Muc3VwcHJlc3NEZXByZWNhdGlvbldhcm5pbmdzID09PSBmYWxzZSAmJlxuICAgICAgICAgICAgICAgICh0eXBlb2YgY29uc29sZSAhPT0gICd1bmRlZmluZWQnKSAmJiBjb25zb2xlLndhcm4pIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignRGVwcmVjYXRpb24gd2FybmluZzogJyArIG1zZyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBkZXByZWNhdGUobXNnLCBmbikge1xuICAgICAgICB2YXIgZmlyc3RUaW1lID0gdHJ1ZTtcblxuICAgICAgICByZXR1cm4gZXh0ZW5kKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmIChob29rcy5kZXByZWNhdGlvbkhhbmRsZXIgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGhvb2tzLmRlcHJlY2F0aW9uSGFuZGxlcihudWxsLCBtc2cpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGZpcnN0VGltZSkge1xuICAgICAgICAgICAgICAgIHZhciBhcmdzID0gW107XG4gICAgICAgICAgICAgICAgdmFyIGFyZztcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICBhcmcgPSAnJztcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBhcmd1bWVudHNbaV0gPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmcgKz0gJ1xcblsnICsgaSArICddICc7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBrZXkgaW4gYXJndW1lbnRzWzBdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnICs9IGtleSArICc6ICcgKyBhcmd1bWVudHNbMF1ba2V5XSArICcsICc7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmcgPSBhcmcuc2xpY2UoMCwgLTIpOyAvLyBSZW1vdmUgdHJhaWxpbmcgY29tbWEgYW5kIHNwYWNlXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmcgPSBhcmd1bWVudHNbaV07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYXJncy5wdXNoKGFyZyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHdhcm4obXNnICsgJ1xcbkFyZ3VtZW50czogJyArIEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3MpLmpvaW4oJycpICsgJ1xcbicgKyAobmV3IEVycm9yKCkpLnN0YWNrKTtcbiAgICAgICAgICAgICAgICBmaXJzdFRpbWUgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBmbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICB9LCBmbik7XG4gICAgfVxuXG4gICAgdmFyIGRlcHJlY2F0aW9ucyA9IHt9O1xuXG4gICAgZnVuY3Rpb24gZGVwcmVjYXRlU2ltcGxlKG5hbWUsIG1zZykge1xuICAgICAgICBpZiAoaG9va3MuZGVwcmVjYXRpb25IYW5kbGVyICE9IG51bGwpIHtcbiAgICAgICAgICAgIGhvb2tzLmRlcHJlY2F0aW9uSGFuZGxlcihuYW1lLCBtc2cpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghZGVwcmVjYXRpb25zW25hbWVdKSB7XG4gICAgICAgICAgICB3YXJuKG1zZyk7XG4gICAgICAgICAgICBkZXByZWNhdGlvbnNbbmFtZV0gPSB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaG9va3Muc3VwcHJlc3NEZXByZWNhdGlvbldhcm5pbmdzID0gZmFsc2U7XG4gICAgaG9va3MuZGVwcmVjYXRpb25IYW5kbGVyID0gbnVsbDtcblxuICAgIGZ1bmN0aW9uIGlzRnVuY3Rpb24oaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIGlucHV0IGluc3RhbmNlb2YgRnVuY3Rpb24gfHwgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGlucHV0KSA9PT0gJ1tvYmplY3QgRnVuY3Rpb25dJztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzZXQgKGNvbmZpZykge1xuICAgICAgICB2YXIgcHJvcCwgaTtcbiAgICAgICAgZm9yIChpIGluIGNvbmZpZykge1xuICAgICAgICAgICAgcHJvcCA9IGNvbmZpZ1tpXTtcbiAgICAgICAgICAgIGlmIChpc0Z1bmN0aW9uKHByb3ApKSB7XG4gICAgICAgICAgICAgICAgdGhpc1tpXSA9IHByb3A7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXNbJ18nICsgaV0gPSBwcm9wO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2NvbmZpZyA9IGNvbmZpZztcbiAgICAgICAgLy8gTGVuaWVudCBvcmRpbmFsIHBhcnNpbmcgYWNjZXB0cyBqdXN0IGEgbnVtYmVyIGluIGFkZGl0aW9uIHRvXG4gICAgICAgIC8vIG51bWJlciArIChwb3NzaWJseSkgc3R1ZmYgY29taW5nIGZyb20gX2RheU9mTW9udGhPcmRpbmFsUGFyc2UuXG4gICAgICAgIC8vIFRPRE86IFJlbW92ZSBcIm9yZGluYWxQYXJzZVwiIGZhbGxiYWNrIGluIG5leHQgbWFqb3IgcmVsZWFzZS5cbiAgICAgICAgdGhpcy5fZGF5T2ZNb250aE9yZGluYWxQYXJzZUxlbmllbnQgPSBuZXcgUmVnRXhwKFxuICAgICAgICAgICAgKHRoaXMuX2RheU9mTW9udGhPcmRpbmFsUGFyc2Uuc291cmNlIHx8IHRoaXMuX29yZGluYWxQYXJzZS5zb3VyY2UpICtcbiAgICAgICAgICAgICAgICAnfCcgKyAoL1xcZHsxLDJ9Lykuc291cmNlKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtZXJnZUNvbmZpZ3MocGFyZW50Q29uZmlnLCBjaGlsZENvbmZpZykge1xuICAgICAgICB2YXIgcmVzID0gZXh0ZW5kKHt9LCBwYXJlbnRDb25maWcpLCBwcm9wO1xuICAgICAgICBmb3IgKHByb3AgaW4gY2hpbGRDb25maWcpIHtcbiAgICAgICAgICAgIGlmIChoYXNPd25Qcm9wKGNoaWxkQ29uZmlnLCBwcm9wKSkge1xuICAgICAgICAgICAgICAgIGlmIChpc09iamVjdChwYXJlbnRDb25maWdbcHJvcF0pICYmIGlzT2JqZWN0KGNoaWxkQ29uZmlnW3Byb3BdKSkge1xuICAgICAgICAgICAgICAgICAgICByZXNbcHJvcF0gPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgZXh0ZW5kKHJlc1twcm9wXSwgcGFyZW50Q29uZmlnW3Byb3BdKTtcbiAgICAgICAgICAgICAgICAgICAgZXh0ZW5kKHJlc1twcm9wXSwgY2hpbGRDb25maWdbcHJvcF0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY2hpbGRDb25maWdbcHJvcF0gIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICByZXNbcHJvcF0gPSBjaGlsZENvbmZpZ1twcm9wXTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBkZWxldGUgcmVzW3Byb3BdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmb3IgKHByb3AgaW4gcGFyZW50Q29uZmlnKSB7XG4gICAgICAgICAgICBpZiAoaGFzT3duUHJvcChwYXJlbnRDb25maWcsIHByb3ApICYmXG4gICAgICAgICAgICAgICAgICAgICFoYXNPd25Qcm9wKGNoaWxkQ29uZmlnLCBwcm9wKSAmJlxuICAgICAgICAgICAgICAgICAgICBpc09iamVjdChwYXJlbnRDb25maWdbcHJvcF0pKSB7XG4gICAgICAgICAgICAgICAgLy8gbWFrZSBzdXJlIGNoYW5nZXMgdG8gcHJvcGVydGllcyBkb24ndCBtb2RpZnkgcGFyZW50IGNvbmZpZ1xuICAgICAgICAgICAgICAgIHJlc1twcm9wXSA9IGV4dGVuZCh7fSwgcmVzW3Byb3BdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIExvY2FsZShjb25maWcpIHtcbiAgICAgICAgaWYgKGNvbmZpZyAhPSBudWxsKSB7XG4gICAgICAgICAgICB0aGlzLnNldChjb25maWcpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGtleXM7XG5cbiAgICBpZiAoT2JqZWN0LmtleXMpIHtcbiAgICAgICAga2V5cyA9IE9iamVjdC5rZXlzO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGtleXMgPSBmdW5jdGlvbiAob2JqKSB7XG4gICAgICAgICAgICB2YXIgaSwgcmVzID0gW107XG4gICAgICAgICAgICBmb3IgKGkgaW4gb2JqKSB7XG4gICAgICAgICAgICAgICAgaWYgKGhhc093blByb3Aob2JqLCBpKSkge1xuICAgICAgICAgICAgICAgICAgICByZXMucHVzaChpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIHZhciBkZWZhdWx0Q2FsZW5kYXIgPSB7XG4gICAgICAgIHNhbWVEYXkgOiAnW1RvZGF5IGF0XSBMVCcsXG4gICAgICAgIG5leHREYXkgOiAnW1RvbW9ycm93IGF0XSBMVCcsXG4gICAgICAgIG5leHRXZWVrIDogJ2RkZGQgW2F0XSBMVCcsXG4gICAgICAgIGxhc3REYXkgOiAnW1llc3RlcmRheSBhdF0gTFQnLFxuICAgICAgICBsYXN0V2VlayA6ICdbTGFzdF0gZGRkZCBbYXRdIExUJyxcbiAgICAgICAgc2FtZUVsc2UgOiAnTCdcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gY2FsZW5kYXIgKGtleSwgbW9tLCBub3cpIHtcbiAgICAgICAgdmFyIG91dHB1dCA9IHRoaXMuX2NhbGVuZGFyW2tleV0gfHwgdGhpcy5fY2FsZW5kYXJbJ3NhbWVFbHNlJ107XG4gICAgICAgIHJldHVybiBpc0Z1bmN0aW9uKG91dHB1dCkgPyBvdXRwdXQuY2FsbChtb20sIG5vdykgOiBvdXRwdXQ7XG4gICAgfVxuXG4gICAgdmFyIGRlZmF1bHRMb25nRGF0ZUZvcm1hdCA9IHtcbiAgICAgICAgTFRTICA6ICdoOm1tOnNzIEEnLFxuICAgICAgICBMVCAgIDogJ2g6bW0gQScsXG4gICAgICAgIEwgICAgOiAnTU0vREQvWVlZWScsXG4gICAgICAgIExMICAgOiAnTU1NTSBELCBZWVlZJyxcbiAgICAgICAgTExMICA6ICdNTU1NIEQsIFlZWVkgaDptbSBBJyxcbiAgICAgICAgTExMTCA6ICdkZGRkLCBNTU1NIEQsIFlZWVkgaDptbSBBJ1xuICAgIH07XG5cbiAgICBmdW5jdGlvbiBsb25nRGF0ZUZvcm1hdCAoa2V5KSB7XG4gICAgICAgIHZhciBmb3JtYXQgPSB0aGlzLl9sb25nRGF0ZUZvcm1hdFtrZXldLFxuICAgICAgICAgICAgZm9ybWF0VXBwZXIgPSB0aGlzLl9sb25nRGF0ZUZvcm1hdFtrZXkudG9VcHBlckNhc2UoKV07XG5cbiAgICAgICAgaWYgKGZvcm1hdCB8fCAhZm9ybWF0VXBwZXIpIHtcbiAgICAgICAgICAgIHJldHVybiBmb3JtYXQ7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9sb25nRGF0ZUZvcm1hdFtrZXldID0gZm9ybWF0VXBwZXIucmVwbGFjZSgvTU1NTXxNTXxERHxkZGRkL2csIGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgICAgIHJldHVybiB2YWwuc2xpY2UoMSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiB0aGlzLl9sb25nRGF0ZUZvcm1hdFtrZXldO1xuICAgIH1cblxuICAgIHZhciBkZWZhdWx0SW52YWxpZERhdGUgPSAnSW52YWxpZCBkYXRlJztcblxuICAgIGZ1bmN0aW9uIGludmFsaWREYXRlICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ludmFsaWREYXRlO1xuICAgIH1cblxuICAgIHZhciBkZWZhdWx0T3JkaW5hbCA9ICclZCc7XG4gICAgdmFyIGRlZmF1bHREYXlPZk1vbnRoT3JkaW5hbFBhcnNlID0gL1xcZHsxLDJ9LztcblxuICAgIGZ1bmN0aW9uIG9yZGluYWwgKG51bWJlcikge1xuICAgICAgICByZXR1cm4gdGhpcy5fb3JkaW5hbC5yZXBsYWNlKCclZCcsIG51bWJlcik7XG4gICAgfVxuXG4gICAgdmFyIGRlZmF1bHRSZWxhdGl2ZVRpbWUgPSB7XG4gICAgICAgIGZ1dHVyZSA6ICdpbiAlcycsXG4gICAgICAgIHBhc3QgICA6ICclcyBhZ28nLFxuICAgICAgICBzICA6ICdhIGZldyBzZWNvbmRzJyxcbiAgICAgICAgc3MgOiAnJWQgc2Vjb25kcycsXG4gICAgICAgIG0gIDogJ2EgbWludXRlJyxcbiAgICAgICAgbW0gOiAnJWQgbWludXRlcycsXG4gICAgICAgIGggIDogJ2FuIGhvdXInLFxuICAgICAgICBoaCA6ICclZCBob3VycycsXG4gICAgICAgIGQgIDogJ2EgZGF5JyxcbiAgICAgICAgZGQgOiAnJWQgZGF5cycsXG4gICAgICAgIE0gIDogJ2EgbW9udGgnLFxuICAgICAgICBNTSA6ICclZCBtb250aHMnLFxuICAgICAgICB5ICA6ICdhIHllYXInLFxuICAgICAgICB5eSA6ICclZCB5ZWFycydcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gcmVsYXRpdmVUaW1lIChudW1iZXIsIHdpdGhvdXRTdWZmaXgsIHN0cmluZywgaXNGdXR1cmUpIHtcbiAgICAgICAgdmFyIG91dHB1dCA9IHRoaXMuX3JlbGF0aXZlVGltZVtzdHJpbmddO1xuICAgICAgICByZXR1cm4gKGlzRnVuY3Rpb24ob3V0cHV0KSkgP1xuICAgICAgICAgICAgb3V0cHV0KG51bWJlciwgd2l0aG91dFN1ZmZpeCwgc3RyaW5nLCBpc0Z1dHVyZSkgOlxuICAgICAgICAgICAgb3V0cHV0LnJlcGxhY2UoLyVkL2ksIG51bWJlcik7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcGFzdEZ1dHVyZSAoZGlmZiwgb3V0cHV0KSB7XG4gICAgICAgIHZhciBmb3JtYXQgPSB0aGlzLl9yZWxhdGl2ZVRpbWVbZGlmZiA+IDAgPyAnZnV0dXJlJyA6ICdwYXN0J107XG4gICAgICAgIHJldHVybiBpc0Z1bmN0aW9uKGZvcm1hdCkgPyBmb3JtYXQob3V0cHV0KSA6IGZvcm1hdC5yZXBsYWNlKC8lcy9pLCBvdXRwdXQpO1xuICAgIH1cblxuICAgIHZhciBhbGlhc2VzID0ge307XG5cbiAgICBmdW5jdGlvbiBhZGRVbml0QWxpYXMgKHVuaXQsIHNob3J0aGFuZCkge1xuICAgICAgICB2YXIgbG93ZXJDYXNlID0gdW5pdC50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBhbGlhc2VzW2xvd2VyQ2FzZV0gPSBhbGlhc2VzW2xvd2VyQ2FzZSArICdzJ10gPSBhbGlhc2VzW3Nob3J0aGFuZF0gPSB1bml0O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG5vcm1hbGl6ZVVuaXRzKHVuaXRzKSB7XG4gICAgICAgIHJldHVybiB0eXBlb2YgdW5pdHMgPT09ICdzdHJpbmcnID8gYWxpYXNlc1t1bml0c10gfHwgYWxpYXNlc1t1bml0cy50b0xvd2VyQ2FzZSgpXSA6IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBub3JtYWxpemVPYmplY3RVbml0cyhpbnB1dE9iamVjdCkge1xuICAgICAgICB2YXIgbm9ybWFsaXplZElucHV0ID0ge30sXG4gICAgICAgICAgICBub3JtYWxpemVkUHJvcCxcbiAgICAgICAgICAgIHByb3A7XG5cbiAgICAgICAgZm9yIChwcm9wIGluIGlucHV0T2JqZWN0KSB7XG4gICAgICAgICAgICBpZiAoaGFzT3duUHJvcChpbnB1dE9iamVjdCwgcHJvcCkpIHtcbiAgICAgICAgICAgICAgICBub3JtYWxpemVkUHJvcCA9IG5vcm1hbGl6ZVVuaXRzKHByb3ApO1xuICAgICAgICAgICAgICAgIGlmIChub3JtYWxpemVkUHJvcCkge1xuICAgICAgICAgICAgICAgICAgICBub3JtYWxpemVkSW5wdXRbbm9ybWFsaXplZFByb3BdID0gaW5wdXRPYmplY3RbcHJvcF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5vcm1hbGl6ZWRJbnB1dDtcbiAgICB9XG5cbiAgICB2YXIgcHJpb3JpdGllcyA9IHt9O1xuXG4gICAgZnVuY3Rpb24gYWRkVW5pdFByaW9yaXR5KHVuaXQsIHByaW9yaXR5KSB7XG4gICAgICAgIHByaW9yaXRpZXNbdW5pdF0gPSBwcmlvcml0eTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRQcmlvcml0aXplZFVuaXRzKHVuaXRzT2JqKSB7XG4gICAgICAgIHZhciB1bml0cyA9IFtdO1xuICAgICAgICBmb3IgKHZhciB1IGluIHVuaXRzT2JqKSB7XG4gICAgICAgICAgICB1bml0cy5wdXNoKHt1bml0OiB1LCBwcmlvcml0eTogcHJpb3JpdGllc1t1XX0pO1xuICAgICAgICB9XG4gICAgICAgIHVuaXRzLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgICAgICAgIHJldHVybiBhLnByaW9yaXR5IC0gYi5wcmlvcml0eTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB1bml0cztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB6ZXJvRmlsbChudW1iZXIsIHRhcmdldExlbmd0aCwgZm9yY2VTaWduKSB7XG4gICAgICAgIHZhciBhYnNOdW1iZXIgPSAnJyArIE1hdGguYWJzKG51bWJlciksXG4gICAgICAgICAgICB6ZXJvc1RvRmlsbCA9IHRhcmdldExlbmd0aCAtIGFic051bWJlci5sZW5ndGgsXG4gICAgICAgICAgICBzaWduID0gbnVtYmVyID49IDA7XG4gICAgICAgIHJldHVybiAoc2lnbiA/IChmb3JjZVNpZ24gPyAnKycgOiAnJykgOiAnLScpICtcbiAgICAgICAgICAgIE1hdGgucG93KDEwLCBNYXRoLm1heCgwLCB6ZXJvc1RvRmlsbCkpLnRvU3RyaW5nKCkuc3Vic3RyKDEpICsgYWJzTnVtYmVyO1xuICAgIH1cblxuICAgIHZhciBmb3JtYXR0aW5nVG9rZW5zID0gLyhcXFtbXlxcW10qXFxdKXwoXFxcXCk/KFtIaF1tbShzcyk/fE1vfE1NP00/TT98RG98REREb3xERD9EP0Q/fGRkZD9kP3xkbz98d1tvfHddP3xXW298V10/fFFvP3xZWVlZWVl8WVlZWVl8WVlZWXxZWXxnZyhnZ2c/KT98R0coR0dHPyk/fGV8RXxhfEF8aGg/fEhIP3xraz98bW0/fHNzP3xTezEsOX18eHxYfHp6P3xaWj98LikvZztcblxuICAgIHZhciBsb2NhbEZvcm1hdHRpbmdUb2tlbnMgPSAvKFxcW1teXFxbXSpcXF0pfChcXFxcKT8oTFRTfExUfExMP0w/TD98bHsxLDR9KS9nO1xuXG4gICAgdmFyIGZvcm1hdEZ1bmN0aW9ucyA9IHt9O1xuXG4gICAgdmFyIGZvcm1hdFRva2VuRnVuY3Rpb25zID0ge307XG5cbiAgICAvLyB0b2tlbjogICAgJ00nXG4gICAgLy8gcGFkZGVkOiAgIFsnTU0nLCAyXVxuICAgIC8vIG9yZGluYWw6ICAnTW8nXG4gICAgLy8gY2FsbGJhY2s6IGZ1bmN0aW9uICgpIHsgdGhpcy5tb250aCgpICsgMSB9XG4gICAgZnVuY3Rpb24gYWRkRm9ybWF0VG9rZW4gKHRva2VuLCBwYWRkZWQsIG9yZGluYWwsIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciBmdW5jID0gY2FsbGJhY2s7XG4gICAgICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBmdW5jID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzW2NhbGxiYWNrXSgpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodG9rZW4pIHtcbiAgICAgICAgICAgIGZvcm1hdFRva2VuRnVuY3Rpb25zW3Rva2VuXSA9IGZ1bmM7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBhZGRlZCkge1xuICAgICAgICAgICAgZm9ybWF0VG9rZW5GdW5jdGlvbnNbcGFkZGVkWzBdXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gemVyb0ZpbGwoZnVuYy5hcHBseSh0aGlzLCBhcmd1bWVudHMpLCBwYWRkZWRbMV0sIHBhZGRlZFsyXSk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcmRpbmFsKSB7XG4gICAgICAgICAgICBmb3JtYXRUb2tlbkZ1bmN0aW9uc1tvcmRpbmFsXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkub3JkaW5hbChmdW5jLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyksIHRva2VuKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiByZW1vdmVGb3JtYXR0aW5nVG9rZW5zKGlucHV0KSB7XG4gICAgICAgIGlmIChpbnB1dC5tYXRjaCgvXFxbW1xcc1xcU10vKSkge1xuICAgICAgICAgICAgcmV0dXJuIGlucHV0LnJlcGxhY2UoL15cXFt8XFxdJC9nLCAnJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGlucHV0LnJlcGxhY2UoL1xcXFwvZywgJycpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1ha2VGb3JtYXRGdW5jdGlvbihmb3JtYXQpIHtcbiAgICAgICAgdmFyIGFycmF5ID0gZm9ybWF0Lm1hdGNoKGZvcm1hdHRpbmdUb2tlbnMpLCBpLCBsZW5ndGg7XG5cbiAgICAgICAgZm9yIChpID0gMCwgbGVuZ3RoID0gYXJyYXkubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChmb3JtYXRUb2tlbkZ1bmN0aW9uc1thcnJheVtpXV0pIHtcbiAgICAgICAgICAgICAgICBhcnJheVtpXSA9IGZvcm1hdFRva2VuRnVuY3Rpb25zW2FycmF5W2ldXTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgYXJyYXlbaV0gPSByZW1vdmVGb3JtYXR0aW5nVG9rZW5zKGFycmF5W2ldKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAobW9tKSB7XG4gICAgICAgICAgICB2YXIgb3V0cHV0ID0gJycsIGk7XG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBvdXRwdXQgKz0gaXNGdW5jdGlvbihhcnJheVtpXSkgPyBhcnJheVtpXS5jYWxsKG1vbSwgZm9ybWF0KSA6IGFycmF5W2ldO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG91dHB1dDtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyBmb3JtYXQgZGF0ZSB1c2luZyBuYXRpdmUgZGF0ZSBvYmplY3RcbiAgICBmdW5jdGlvbiBmb3JtYXRNb21lbnQobSwgZm9ybWF0KSB7XG4gICAgICAgIGlmICghbS5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBtLmxvY2FsZURhdGEoKS5pbnZhbGlkRGF0ZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9ybWF0ID0gZXhwYW5kRm9ybWF0KGZvcm1hdCwgbS5sb2NhbGVEYXRhKCkpO1xuICAgICAgICBmb3JtYXRGdW5jdGlvbnNbZm9ybWF0XSA9IGZvcm1hdEZ1bmN0aW9uc1tmb3JtYXRdIHx8IG1ha2VGb3JtYXRGdW5jdGlvbihmb3JtYXQpO1xuXG4gICAgICAgIHJldHVybiBmb3JtYXRGdW5jdGlvbnNbZm9ybWF0XShtKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBleHBhbmRGb3JtYXQoZm9ybWF0LCBsb2NhbGUpIHtcbiAgICAgICAgdmFyIGkgPSA1O1xuXG4gICAgICAgIGZ1bmN0aW9uIHJlcGxhY2VMb25nRGF0ZUZvcm1hdFRva2VucyhpbnB1dCkge1xuICAgICAgICAgICAgcmV0dXJuIGxvY2FsZS5sb25nRGF0ZUZvcm1hdChpbnB1dCkgfHwgaW5wdXQ7XG4gICAgICAgIH1cblxuICAgICAgICBsb2NhbEZvcm1hdHRpbmdUb2tlbnMubGFzdEluZGV4ID0gMDtcbiAgICAgICAgd2hpbGUgKGkgPj0gMCAmJiBsb2NhbEZvcm1hdHRpbmdUb2tlbnMudGVzdChmb3JtYXQpKSB7XG4gICAgICAgICAgICBmb3JtYXQgPSBmb3JtYXQucmVwbGFjZShsb2NhbEZvcm1hdHRpbmdUb2tlbnMsIHJlcGxhY2VMb25nRGF0ZUZvcm1hdFRva2Vucyk7XG4gICAgICAgICAgICBsb2NhbEZvcm1hdHRpbmdUb2tlbnMubGFzdEluZGV4ID0gMDtcbiAgICAgICAgICAgIGkgLT0gMTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmb3JtYXQ7XG4gICAgfVxuXG4gICAgdmFyIG1hdGNoMSAgICAgICAgID0gL1xcZC87ICAgICAgICAgICAgLy8gICAgICAgMCAtIDlcbiAgICB2YXIgbWF0Y2gyICAgICAgICAgPSAvXFxkXFxkLzsgICAgICAgICAgLy8gICAgICAwMCAtIDk5XG4gICAgdmFyIG1hdGNoMyAgICAgICAgID0gL1xcZHszfS87ICAgICAgICAgLy8gICAgIDAwMCAtIDk5OVxuICAgIHZhciBtYXRjaDQgICAgICAgICA9IC9cXGR7NH0vOyAgICAgICAgIC8vICAgIDAwMDAgLSA5OTk5XG4gICAgdmFyIG1hdGNoNiAgICAgICAgID0gL1srLV0/XFxkezZ9LzsgICAgLy8gLTk5OTk5OSAtIDk5OTk5OVxuICAgIHZhciBtYXRjaDF0bzIgICAgICA9IC9cXGRcXGQ/LzsgICAgICAgICAvLyAgICAgICAwIC0gOTlcbiAgICB2YXIgbWF0Y2gzdG80ICAgICAgPSAvXFxkXFxkXFxkXFxkPy87ICAgICAvLyAgICAgOTk5IC0gOTk5OVxuICAgIHZhciBtYXRjaDV0bzYgICAgICA9IC9cXGRcXGRcXGRcXGRcXGRcXGQ/LzsgLy8gICA5OTk5OSAtIDk5OTk5OVxuICAgIHZhciBtYXRjaDF0bzMgICAgICA9IC9cXGR7MSwzfS87ICAgICAgIC8vICAgICAgIDAgLSA5OTlcbiAgICB2YXIgbWF0Y2gxdG80ICAgICAgPSAvXFxkezEsNH0vOyAgICAgICAvLyAgICAgICAwIC0gOTk5OVxuICAgIHZhciBtYXRjaDF0bzYgICAgICA9IC9bKy1dP1xcZHsxLDZ9LzsgIC8vIC05OTk5OTkgLSA5OTk5OTlcblxuICAgIHZhciBtYXRjaFVuc2lnbmVkICA9IC9cXGQrLzsgICAgICAgICAgIC8vICAgICAgIDAgLSBpbmZcbiAgICB2YXIgbWF0Y2hTaWduZWQgICAgPSAvWystXT9cXGQrLzsgICAgICAvLyAgICAtaW5mIC0gaW5mXG5cbiAgICB2YXIgbWF0Y2hPZmZzZXQgICAgPSAvWnxbKy1dXFxkXFxkOj9cXGRcXGQvZ2k7IC8vICswMDowMCAtMDA6MDAgKzAwMDAgLTAwMDAgb3IgWlxuICAgIHZhciBtYXRjaFNob3J0T2Zmc2V0ID0gL1p8WystXVxcZFxcZCg/Ojo/XFxkXFxkKT8vZ2k7IC8vICswMCAtMDAgKzAwOjAwIC0wMDowMCArMDAwMCAtMDAwMCBvciBaXG5cbiAgICB2YXIgbWF0Y2hUaW1lc3RhbXAgPSAvWystXT9cXGQrKFxcLlxcZHsxLDN9KT8vOyAvLyAxMjM0NTY3ODkgMTIzNDU2Nzg5LjEyM1xuXG4gICAgLy8gYW55IHdvcmQgKG9yIHR3bykgY2hhcmFjdGVycyBvciBudW1iZXJzIGluY2x1ZGluZyB0d28vdGhyZWUgd29yZCBtb250aCBpbiBhcmFiaWMuXG4gICAgLy8gaW5jbHVkZXMgc2NvdHRpc2ggZ2FlbGljIHR3byB3b3JkIGFuZCBoeXBoZW5hdGVkIG1vbnRoc1xuICAgIHZhciBtYXRjaFdvcmQgPSAvWzAtOV17MCwyNTZ9WydhLXpcXHUwMEEwLVxcdTA1RkZcXHUwNzAwLVxcdUQ3RkZcXHVGOTAwLVxcdUZEQ0ZcXHVGREYwLVxcdUZGMDdcXHVGRjEwLVxcdUZGRUZdezEsMjU2fXxbXFx1MDYwMC1cXHUwNkZGXFwvXXsxLDI1Nn0oXFxzKj9bXFx1MDYwMC1cXHUwNkZGXXsxLDI1Nn0pezEsMn0vaTtcblxuICAgIHZhciByZWdleGVzID0ge307XG5cbiAgICBmdW5jdGlvbiBhZGRSZWdleFRva2VuICh0b2tlbiwgcmVnZXgsIHN0cmljdFJlZ2V4KSB7XG4gICAgICAgIHJlZ2V4ZXNbdG9rZW5dID0gaXNGdW5jdGlvbihyZWdleCkgPyByZWdleCA6IGZ1bmN0aW9uIChpc1N0cmljdCwgbG9jYWxlRGF0YSkge1xuICAgICAgICAgICAgcmV0dXJuIChpc1N0cmljdCAmJiBzdHJpY3RSZWdleCkgPyBzdHJpY3RSZWdleCA6IHJlZ2V4O1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldFBhcnNlUmVnZXhGb3JUb2tlbiAodG9rZW4sIGNvbmZpZykge1xuICAgICAgICBpZiAoIWhhc093blByb3AocmVnZXhlcywgdG9rZW4pKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFJlZ0V4cCh1bmVzY2FwZUZvcm1hdCh0b2tlbikpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlZ2V4ZXNbdG9rZW5dKGNvbmZpZy5fc3RyaWN0LCBjb25maWcuX2xvY2FsZSk7XG4gICAgfVxuXG4gICAgLy8gQ29kZSBmcm9tIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMzU2MTQ5My9pcy10aGVyZS1hLXJlZ2V4cC1lc2NhcGUtZnVuY3Rpb24taW4tamF2YXNjcmlwdFxuICAgIGZ1bmN0aW9uIHVuZXNjYXBlRm9ybWF0KHMpIHtcbiAgICAgICAgcmV0dXJuIHJlZ2V4RXNjYXBlKHMucmVwbGFjZSgnXFxcXCcsICcnKS5yZXBsYWNlKC9cXFxcKFxcWyl8XFxcXChcXF0pfFxcWyhbXlxcXVxcW10qKVxcXXxcXFxcKC4pL2csIGZ1bmN0aW9uIChtYXRjaGVkLCBwMSwgcDIsIHAzLCBwNCkge1xuICAgICAgICAgICAgcmV0dXJuIHAxIHx8IHAyIHx8IHAzIHx8IHA0O1xuICAgICAgICB9KSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcmVnZXhFc2NhcGUocykge1xuICAgICAgICByZXR1cm4gcy5yZXBsYWNlKC9bLVxcL1xcXFxeJCorPy4oKXxbXFxde31dL2csICdcXFxcJCYnKTtcbiAgICB9XG5cbiAgICB2YXIgdG9rZW5zID0ge307XG5cbiAgICBmdW5jdGlvbiBhZGRQYXJzZVRva2VuICh0b2tlbiwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIGksIGZ1bmMgPSBjYWxsYmFjaztcbiAgICAgICAgaWYgKHR5cGVvZiB0b2tlbiA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHRva2VuID0gW3Rva2VuXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNOdW1iZXIoY2FsbGJhY2spKSB7XG4gICAgICAgICAgICBmdW5jID0gZnVuY3Rpb24gKGlucHV0LCBhcnJheSkge1xuICAgICAgICAgICAgICAgIGFycmF5W2NhbGxiYWNrXSA9IHRvSW50KGlucHV0KTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHRva2VuLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB0b2tlbnNbdG9rZW5baV1dID0gZnVuYztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGFkZFdlZWtQYXJzZVRva2VuICh0b2tlbiwgY2FsbGJhY2spIHtcbiAgICAgICAgYWRkUGFyc2VUb2tlbih0b2tlbiwgZnVuY3Rpb24gKGlucHV0LCBhcnJheSwgY29uZmlnLCB0b2tlbikge1xuICAgICAgICAgICAgY29uZmlnLl93ID0gY29uZmlnLl93IHx8IHt9O1xuICAgICAgICAgICAgY2FsbGJhY2soaW5wdXQsIGNvbmZpZy5fdywgY29uZmlnLCB0b2tlbik7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGFkZFRpbWVUb0FycmF5RnJvbVRva2VuKHRva2VuLCBpbnB1dCwgY29uZmlnKSB7XG4gICAgICAgIGlmIChpbnB1dCAhPSBudWxsICYmIGhhc093blByb3AodG9rZW5zLCB0b2tlbikpIHtcbiAgICAgICAgICAgIHRva2Vuc1t0b2tlbl0oaW5wdXQsIGNvbmZpZy5fYSwgY29uZmlnLCB0b2tlbik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgWUVBUiA9IDA7XG4gICAgdmFyIE1PTlRIID0gMTtcbiAgICB2YXIgREFURSA9IDI7XG4gICAgdmFyIEhPVVIgPSAzO1xuICAgIHZhciBNSU5VVEUgPSA0O1xuICAgIHZhciBTRUNPTkQgPSA1O1xuICAgIHZhciBNSUxMSVNFQ09ORCA9IDY7XG4gICAgdmFyIFdFRUsgPSA3O1xuICAgIHZhciBXRUVLREFZID0gODtcblxuICAgIC8vIEZPUk1BVFRJTkdcblxuICAgIGFkZEZvcm1hdFRva2VuKCdZJywgMCwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgeSA9IHRoaXMueWVhcigpO1xuICAgICAgICByZXR1cm4geSA8PSA5OTk5ID8gJycgKyB5IDogJysnICsgeTtcbiAgICB9KTtcblxuICAgIGFkZEZvcm1hdFRva2VuKDAsIFsnWVknLCAyXSwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy55ZWFyKCkgJSAxMDA7XG4gICAgfSk7XG5cbiAgICBhZGRGb3JtYXRUb2tlbigwLCBbJ1lZWVknLCAgIDRdLCAgICAgICAwLCAneWVhcicpO1xuICAgIGFkZEZvcm1hdFRva2VuKDAsIFsnWVlZWVknLCAgNV0sICAgICAgIDAsICd5ZWFyJyk7XG4gICAgYWRkRm9ybWF0VG9rZW4oMCwgWydZWVlZWVknLCA2LCB0cnVlXSwgMCwgJ3llYXInKTtcblxuICAgIC8vIEFMSUFTRVNcblxuICAgIGFkZFVuaXRBbGlhcygneWVhcicsICd5Jyk7XG5cbiAgICAvLyBQUklPUklUSUVTXG5cbiAgICBhZGRVbml0UHJpb3JpdHkoJ3llYXInLCAxKTtcblxuICAgIC8vIFBBUlNJTkdcblxuICAgIGFkZFJlZ2V4VG9rZW4oJ1knLCAgICAgIG1hdGNoU2lnbmVkKTtcbiAgICBhZGRSZWdleFRva2VuKCdZWScsICAgICBtYXRjaDF0bzIsIG1hdGNoMik7XG4gICAgYWRkUmVnZXhUb2tlbignWVlZWScsICAgbWF0Y2gxdG80LCBtYXRjaDQpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ1lZWVlZJywgIG1hdGNoMXRvNiwgbWF0Y2g2KTtcbiAgICBhZGRSZWdleFRva2VuKCdZWVlZWVknLCBtYXRjaDF0bzYsIG1hdGNoNik7XG5cbiAgICBhZGRQYXJzZVRva2VuKFsnWVlZWVknLCAnWVlZWVlZJ10sIFlFQVIpO1xuICAgIGFkZFBhcnNlVG9rZW4oJ1lZWVknLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5KSB7XG4gICAgICAgIGFycmF5W1lFQVJdID0gaW5wdXQubGVuZ3RoID09PSAyID8gaG9va3MucGFyc2VUd29EaWdpdFllYXIoaW5wdXQpIDogdG9JbnQoaW5wdXQpO1xuICAgIH0pO1xuICAgIGFkZFBhcnNlVG9rZW4oJ1lZJywgZnVuY3Rpb24gKGlucHV0LCBhcnJheSkge1xuICAgICAgICBhcnJheVtZRUFSXSA9IGhvb2tzLnBhcnNlVHdvRGlnaXRZZWFyKGlucHV0KTtcbiAgICB9KTtcbiAgICBhZGRQYXJzZVRva2VuKCdZJywgZnVuY3Rpb24gKGlucHV0LCBhcnJheSkge1xuICAgICAgICBhcnJheVtZRUFSXSA9IHBhcnNlSW50KGlucHV0LCAxMCk7XG4gICAgfSk7XG5cbiAgICAvLyBIRUxQRVJTXG5cbiAgICBmdW5jdGlvbiBkYXlzSW5ZZWFyKHllYXIpIHtcbiAgICAgICAgcmV0dXJuIGlzTGVhcFllYXIoeWVhcikgPyAzNjYgOiAzNjU7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNMZWFwWWVhcih5ZWFyKSB7XG4gICAgICAgIHJldHVybiAoeWVhciAlIDQgPT09IDAgJiYgeWVhciAlIDEwMCAhPT0gMCkgfHwgeWVhciAlIDQwMCA9PT0gMDtcbiAgICB9XG5cbiAgICAvLyBIT09LU1xuXG4gICAgaG9va3MucGFyc2VUd29EaWdpdFllYXIgPSBmdW5jdGlvbiAoaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIHRvSW50KGlucHV0KSArICh0b0ludChpbnB1dCkgPiA2OCA/IDE5MDAgOiAyMDAwKTtcbiAgICB9O1xuXG4gICAgLy8gTU9NRU5UU1xuXG4gICAgdmFyIGdldFNldFllYXIgPSBtYWtlR2V0U2V0KCdGdWxsWWVhcicsIHRydWUpO1xuXG4gICAgZnVuY3Rpb24gZ2V0SXNMZWFwWWVhciAoKSB7XG4gICAgICAgIHJldHVybiBpc0xlYXBZZWFyKHRoaXMueWVhcigpKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtYWtlR2V0U2V0ICh1bml0LCBrZWVwVGltZSkge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICBpZiAodmFsdWUgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHNldCQxKHRoaXMsIHVuaXQsIHZhbHVlKTtcbiAgICAgICAgICAgICAgICBob29rcy51cGRhdGVPZmZzZXQodGhpcywga2VlcFRpbWUpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZ2V0KHRoaXMsIHVuaXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldCAobW9tLCB1bml0KSB7XG4gICAgICAgIHJldHVybiBtb20uaXNWYWxpZCgpID9cbiAgICAgICAgICAgIG1vbS5fZFsnZ2V0JyArIChtb20uX2lzVVRDID8gJ1VUQycgOiAnJykgKyB1bml0XSgpIDogTmFOO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHNldCQxIChtb20sIHVuaXQsIHZhbHVlKSB7XG4gICAgICAgIGlmIChtb20uaXNWYWxpZCgpICYmICFpc05hTih2YWx1ZSkpIHtcbiAgICAgICAgICAgIGlmICh1bml0ID09PSAnRnVsbFllYXInICYmIGlzTGVhcFllYXIobW9tLnllYXIoKSkgJiYgbW9tLm1vbnRoKCkgPT09IDEgJiYgbW9tLmRhdGUoKSA9PT0gMjkpIHtcbiAgICAgICAgICAgICAgICBtb20uX2RbJ3NldCcgKyAobW9tLl9pc1VUQyA/ICdVVEMnIDogJycpICsgdW5pdF0odmFsdWUsIG1vbS5tb250aCgpLCBkYXlzSW5Nb250aCh2YWx1ZSwgbW9tLm1vbnRoKCkpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIG1vbS5fZFsnc2V0JyArIChtb20uX2lzVVRDID8gJ1VUQycgOiAnJykgKyB1bml0XSh2YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBNT01FTlRTXG5cbiAgICBmdW5jdGlvbiBzdHJpbmdHZXQgKHVuaXRzKSB7XG4gICAgICAgIHVuaXRzID0gbm9ybWFsaXplVW5pdHModW5pdHMpO1xuICAgICAgICBpZiAoaXNGdW5jdGlvbih0aGlzW3VuaXRzXSkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzW3VuaXRzXSgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuXG4gICAgZnVuY3Rpb24gc3RyaW5nU2V0ICh1bml0cywgdmFsdWUpIHtcbiAgICAgICAgaWYgKHR5cGVvZiB1bml0cyA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIHVuaXRzID0gbm9ybWFsaXplT2JqZWN0VW5pdHModW5pdHMpO1xuICAgICAgICAgICAgdmFyIHByaW9yaXRpemVkID0gZ2V0UHJpb3JpdGl6ZWRVbml0cyh1bml0cyk7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByaW9yaXRpemVkLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgdGhpc1twcmlvcml0aXplZFtpXS51bml0XSh1bml0c1twcmlvcml0aXplZFtpXS51bml0XSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB1bml0cyA9IG5vcm1hbGl6ZVVuaXRzKHVuaXRzKTtcbiAgICAgICAgICAgIGlmIChpc0Z1bmN0aW9uKHRoaXNbdW5pdHNdKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzW3VuaXRzXSh2YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbW9kKG4sIHgpIHtcbiAgICAgICAgcmV0dXJuICgobiAlIHgpICsgeCkgJSB4O1xuICAgIH1cblxuICAgIHZhciBpbmRleE9mO1xuXG4gICAgaWYgKEFycmF5LnByb3RvdHlwZS5pbmRleE9mKSB7XG4gICAgICAgIGluZGV4T2YgPSBBcnJheS5wcm90b3R5cGUuaW5kZXhPZjtcbiAgICB9IGVsc2Uge1xuICAgICAgICBpbmRleE9mID0gZnVuY3Rpb24gKG8pIHtcbiAgICAgICAgICAgIC8vIEkga25vd1xuICAgICAgICAgICAgdmFyIGk7XG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzW2ldID09PSBvKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiAtMTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBkYXlzSW5Nb250aCh5ZWFyLCBtb250aCkge1xuICAgICAgICBpZiAoaXNOYU4oeWVhcikgfHwgaXNOYU4obW9udGgpKSB7XG4gICAgICAgICAgICByZXR1cm4gTmFOO1xuICAgICAgICB9XG4gICAgICAgIHZhciBtb2RNb250aCA9IG1vZChtb250aCwgMTIpO1xuICAgICAgICB5ZWFyICs9IChtb250aCAtIG1vZE1vbnRoKSAvIDEyO1xuICAgICAgICByZXR1cm4gbW9kTW9udGggPT09IDEgPyAoaXNMZWFwWWVhcih5ZWFyKSA/IDI5IDogMjgpIDogKDMxIC0gbW9kTW9udGggJSA3ICUgMik7XG4gICAgfVxuXG4gICAgLy8gRk9STUFUVElOR1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ00nLCBbJ01NJywgMl0sICdNbycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubW9udGgoKSArIDE7XG4gICAgfSk7XG5cbiAgICBhZGRGb3JtYXRUb2tlbignTU1NJywgMCwgMCwgZnVuY3Rpb24gKGZvcm1hdCkge1xuICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkubW9udGhzU2hvcnQodGhpcywgZm9ybWF0KTtcbiAgICB9KTtcblxuICAgIGFkZEZvcm1hdFRva2VuKCdNTU1NJywgMCwgMCwgZnVuY3Rpb24gKGZvcm1hdCkge1xuICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkubW9udGhzKHRoaXMsIGZvcm1hdCk7XG4gICAgfSk7XG5cbiAgICAvLyBBTElBU0VTXG5cbiAgICBhZGRVbml0QWxpYXMoJ21vbnRoJywgJ00nKTtcblxuICAgIC8vIFBSSU9SSVRZXG5cbiAgICBhZGRVbml0UHJpb3JpdHkoJ21vbnRoJywgOCk7XG5cbiAgICAvLyBQQVJTSU5HXG5cbiAgICBhZGRSZWdleFRva2VuKCdNJywgICAgbWF0Y2gxdG8yKTtcbiAgICBhZGRSZWdleFRva2VuKCdNTScsICAgbWF0Y2gxdG8yLCBtYXRjaDIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ01NTScsICBmdW5jdGlvbiAoaXNTdHJpY3QsIGxvY2FsZSkge1xuICAgICAgICByZXR1cm4gbG9jYWxlLm1vbnRoc1Nob3J0UmVnZXgoaXNTdHJpY3QpO1xuICAgIH0pO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ01NTU0nLCBmdW5jdGlvbiAoaXNTdHJpY3QsIGxvY2FsZSkge1xuICAgICAgICByZXR1cm4gbG9jYWxlLm1vbnRoc1JlZ2V4KGlzU3RyaWN0KTtcbiAgICB9KTtcblxuICAgIGFkZFBhcnNlVG9rZW4oWydNJywgJ01NJ10sIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXkpIHtcbiAgICAgICAgYXJyYXlbTU9OVEhdID0gdG9JbnQoaW5wdXQpIC0gMTtcbiAgICB9KTtcblxuICAgIGFkZFBhcnNlVG9rZW4oWydNTU0nLCAnTU1NTSddLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5LCBjb25maWcsIHRva2VuKSB7XG4gICAgICAgIHZhciBtb250aCA9IGNvbmZpZy5fbG9jYWxlLm1vbnRoc1BhcnNlKGlucHV0LCB0b2tlbiwgY29uZmlnLl9zdHJpY3QpO1xuICAgICAgICAvLyBpZiB3ZSBkaWRuJ3QgZmluZCBhIG1vbnRoIG5hbWUsIG1hcmsgdGhlIGRhdGUgYXMgaW52YWxpZC5cbiAgICAgICAgaWYgKG1vbnRoICE9IG51bGwpIHtcbiAgICAgICAgICAgIGFycmF5W01PTlRIXSA9IG1vbnRoO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuaW52YWxpZE1vbnRoID0gaW5wdXQ7XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIC8vIExPQ0FMRVNcblxuICAgIHZhciBNT05USFNfSU5fRk9STUFUID0gL0Rbb0RdPyhcXFtbXlxcW1xcXV0qXFxdfFxccykrTU1NTT8vO1xuICAgIHZhciBkZWZhdWx0TG9jYWxlTW9udGhzID0gJ0phbnVhcnlfRmVicnVhcnlfTWFyY2hfQXByaWxfTWF5X0p1bmVfSnVseV9BdWd1c3RfU2VwdGVtYmVyX09jdG9iZXJfTm92ZW1iZXJfRGVjZW1iZXInLnNwbGl0KCdfJyk7XG4gICAgZnVuY3Rpb24gbG9jYWxlTW9udGhzIChtLCBmb3JtYXQpIHtcbiAgICAgICAgaWYgKCFtKSB7XG4gICAgICAgICAgICByZXR1cm4gaXNBcnJheSh0aGlzLl9tb250aHMpID8gdGhpcy5fbW9udGhzIDpcbiAgICAgICAgICAgICAgICB0aGlzLl9tb250aHNbJ3N0YW5kYWxvbmUnXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaXNBcnJheSh0aGlzLl9tb250aHMpID8gdGhpcy5fbW9udGhzW20ubW9udGgoKV0gOlxuICAgICAgICAgICAgdGhpcy5fbW9udGhzWyh0aGlzLl9tb250aHMuaXNGb3JtYXQgfHwgTU9OVEhTX0lOX0ZPUk1BVCkudGVzdChmb3JtYXQpID8gJ2Zvcm1hdCcgOiAnc3RhbmRhbG9uZSddW20ubW9udGgoKV07XG4gICAgfVxuXG4gICAgdmFyIGRlZmF1bHRMb2NhbGVNb250aHNTaG9ydCA9ICdKYW5fRmViX01hcl9BcHJfTWF5X0p1bl9KdWxfQXVnX1NlcF9PY3RfTm92X0RlYycuc3BsaXQoJ18nKTtcbiAgICBmdW5jdGlvbiBsb2NhbGVNb250aHNTaG9ydCAobSwgZm9ybWF0KSB7XG4gICAgICAgIGlmICghbSkge1xuICAgICAgICAgICAgcmV0dXJuIGlzQXJyYXkodGhpcy5fbW9udGhzU2hvcnQpID8gdGhpcy5fbW9udGhzU2hvcnQgOlxuICAgICAgICAgICAgICAgIHRoaXMuX21vbnRoc1Nob3J0WydzdGFuZGFsb25lJ107XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGlzQXJyYXkodGhpcy5fbW9udGhzU2hvcnQpID8gdGhpcy5fbW9udGhzU2hvcnRbbS5tb250aCgpXSA6XG4gICAgICAgICAgICB0aGlzLl9tb250aHNTaG9ydFtNT05USFNfSU5fRk9STUFULnRlc3QoZm9ybWF0KSA/ICdmb3JtYXQnIDogJ3N0YW5kYWxvbmUnXVttLm1vbnRoKCldO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGhhbmRsZVN0cmljdFBhcnNlKG1vbnRoTmFtZSwgZm9ybWF0LCBzdHJpY3QpIHtcbiAgICAgICAgdmFyIGksIGlpLCBtb20sIGxsYyA9IG1vbnRoTmFtZS50b0xvY2FsZUxvd2VyQ2FzZSgpO1xuICAgICAgICBpZiAoIXRoaXMuX21vbnRoc1BhcnNlKSB7XG4gICAgICAgICAgICAvLyB0aGlzIGlzIG5vdCB1c2VkXG4gICAgICAgICAgICB0aGlzLl9tb250aHNQYXJzZSA9IFtdO1xuICAgICAgICAgICAgdGhpcy5fbG9uZ01vbnRoc1BhcnNlID0gW107XG4gICAgICAgICAgICB0aGlzLl9zaG9ydE1vbnRoc1BhcnNlID0gW107XG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMTI7ICsraSkge1xuICAgICAgICAgICAgICAgIG1vbSA9IGNyZWF0ZVVUQyhbMjAwMCwgaV0pO1xuICAgICAgICAgICAgICAgIHRoaXMuX3Nob3J0TW9udGhzUGFyc2VbaV0gPSB0aGlzLm1vbnRoc1Nob3J0KG1vbSwgJycpLnRvTG9jYWxlTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fbG9uZ01vbnRoc1BhcnNlW2ldID0gdGhpcy5tb250aHMobW9tLCAnJykudG9Mb2NhbGVMb3dlckNhc2UoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzdHJpY3QpIHtcbiAgICAgICAgICAgIGlmIChmb3JtYXQgPT09ICdNTU0nKSB7XG4gICAgICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fc2hvcnRNb250aHNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gaWkgIT09IC0xID8gaWkgOiBudWxsO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl9sb25nTW9udGhzUGFyc2UsIGxsYyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlpICE9PSAtMSA/IGlpIDogbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChmb3JtYXQgPT09ICdNTU0nKSB7XG4gICAgICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fc2hvcnRNb250aHNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICBpZiAoaWkgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpaTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fbG9uZ01vbnRoc1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgICAgIHJldHVybiBpaSAhPT0gLTEgPyBpaSA6IG51bGw7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX2xvbmdNb250aHNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICBpZiAoaWkgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpaTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fc2hvcnRNb250aHNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gaWkgIT09IC0xID8gaWkgOiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbG9jYWxlTW9udGhzUGFyc2UgKG1vbnRoTmFtZSwgZm9ybWF0LCBzdHJpY3QpIHtcbiAgICAgICAgdmFyIGksIG1vbSwgcmVnZXg7XG5cbiAgICAgICAgaWYgKHRoaXMuX21vbnRoc1BhcnNlRXhhY3QpIHtcbiAgICAgICAgICAgIHJldHVybiBoYW5kbGVTdHJpY3RQYXJzZS5jYWxsKHRoaXMsIG1vbnRoTmFtZSwgZm9ybWF0LCBzdHJpY3QpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLl9tb250aHNQYXJzZSkge1xuICAgICAgICAgICAgdGhpcy5fbW9udGhzUGFyc2UgPSBbXTtcbiAgICAgICAgICAgIHRoaXMuX2xvbmdNb250aHNQYXJzZSA9IFtdO1xuICAgICAgICAgICAgdGhpcy5fc2hvcnRNb250aHNQYXJzZSA9IFtdO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gVE9ETzogYWRkIHNvcnRpbmdcbiAgICAgICAgLy8gU29ydGluZyBtYWtlcyBzdXJlIGlmIG9uZSBtb250aCAob3IgYWJicikgaXMgYSBwcmVmaXggb2YgYW5vdGhlclxuICAgICAgICAvLyBzZWUgc29ydGluZyBpbiBjb21wdXRlTW9udGhzUGFyc2VcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IDEyOyBpKyspIHtcbiAgICAgICAgICAgIC8vIG1ha2UgdGhlIHJlZ2V4IGlmIHdlIGRvbid0IGhhdmUgaXQgYWxyZWFkeVxuICAgICAgICAgICAgbW9tID0gY3JlYXRlVVRDKFsyMDAwLCBpXSk7XG4gICAgICAgICAgICBpZiAoc3RyaWN0ICYmICF0aGlzLl9sb25nTW9udGhzUGFyc2VbaV0pIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9sb25nTW9udGhzUGFyc2VbaV0gPSBuZXcgUmVnRXhwKCdeJyArIHRoaXMubW9udGhzKG1vbSwgJycpLnJlcGxhY2UoJy4nLCAnJykgKyAnJCcsICdpJyk7XG4gICAgICAgICAgICAgICAgdGhpcy5fc2hvcnRNb250aHNQYXJzZVtpXSA9IG5ldyBSZWdFeHAoJ14nICsgdGhpcy5tb250aHNTaG9ydChtb20sICcnKS5yZXBsYWNlKCcuJywgJycpICsgJyQnLCAnaScpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFzdHJpY3QgJiYgIXRoaXMuX21vbnRoc1BhcnNlW2ldKSB7XG4gICAgICAgICAgICAgICAgcmVnZXggPSAnXicgKyB0aGlzLm1vbnRocyhtb20sICcnKSArICd8XicgKyB0aGlzLm1vbnRoc1Nob3J0KG1vbSwgJycpO1xuICAgICAgICAgICAgICAgIHRoaXMuX21vbnRoc1BhcnNlW2ldID0gbmV3IFJlZ0V4cChyZWdleC5yZXBsYWNlKCcuJywgJycpLCAnaScpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gdGVzdCB0aGUgcmVnZXhcbiAgICAgICAgICAgIGlmIChzdHJpY3QgJiYgZm9ybWF0ID09PSAnTU1NTScgJiYgdGhpcy5fbG9uZ01vbnRoc1BhcnNlW2ldLnRlc3QobW9udGhOYW1lKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChzdHJpY3QgJiYgZm9ybWF0ID09PSAnTU1NJyAmJiB0aGlzLl9zaG9ydE1vbnRoc1BhcnNlW2ldLnRlc3QobW9udGhOYW1lKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICghc3RyaWN0ICYmIHRoaXMuX21vbnRoc1BhcnNlW2ldLnRlc3QobW9udGhOYW1lKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gTU9NRU5UU1xuXG4gICAgZnVuY3Rpb24gc2V0TW9udGggKG1vbSwgdmFsdWUpIHtcbiAgICAgICAgdmFyIGRheU9mTW9udGg7XG5cbiAgICAgICAgaWYgKCFtb20uaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICAvLyBObyBvcFxuICAgICAgICAgICAgcmV0dXJuIG1vbTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBpZiAoL15cXGQrJC8udGVzdCh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IHRvSW50KHZhbHVlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSBtb20ubG9jYWxlRGF0YSgpLm1vbnRoc1BhcnNlKHZhbHVlKTtcbiAgICAgICAgICAgICAgICAvLyBUT0RPOiBBbm90aGVyIHNpbGVudCBmYWlsdXJlP1xuICAgICAgICAgICAgICAgIGlmICghaXNOdW1iZXIodmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBtb207XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZGF5T2ZNb250aCA9IE1hdGgubWluKG1vbS5kYXRlKCksIGRheXNJbk1vbnRoKG1vbS55ZWFyKCksIHZhbHVlKSk7XG4gICAgICAgIG1vbS5fZFsnc2V0JyArIChtb20uX2lzVVRDID8gJ1VUQycgOiAnJykgKyAnTW9udGgnXSh2YWx1ZSwgZGF5T2ZNb250aCk7XG4gICAgICAgIHJldHVybiBtb207XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0U2V0TW9udGggKHZhbHVlKSB7XG4gICAgICAgIGlmICh2YWx1ZSAhPSBudWxsKSB7XG4gICAgICAgICAgICBzZXRNb250aCh0aGlzLCB2YWx1ZSk7XG4gICAgICAgICAgICBob29rcy51cGRhdGVPZmZzZXQodGhpcywgdHJ1ZSk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBnZXQodGhpcywgJ01vbnRoJyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXREYXlzSW5Nb250aCAoKSB7XG4gICAgICAgIHJldHVybiBkYXlzSW5Nb250aCh0aGlzLnllYXIoKSwgdGhpcy5tb250aCgpKTtcbiAgICB9XG5cbiAgICB2YXIgZGVmYXVsdE1vbnRoc1Nob3J0UmVnZXggPSBtYXRjaFdvcmQ7XG4gICAgZnVuY3Rpb24gbW9udGhzU2hvcnRSZWdleCAoaXNTdHJpY3QpIHtcbiAgICAgICAgaWYgKHRoaXMuX21vbnRoc1BhcnNlRXhhY3QpIHtcbiAgICAgICAgICAgIGlmICghaGFzT3duUHJvcCh0aGlzLCAnX21vbnRoc1JlZ2V4JykpIHtcbiAgICAgICAgICAgICAgICBjb21wdXRlTW9udGhzUGFyc2UuY2FsbCh0aGlzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpc1N0cmljdCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9tb250aHNTaG9ydFN0cmljdFJlZ2V4O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fbW9udGhzU2hvcnRSZWdleDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICghaGFzT3duUHJvcCh0aGlzLCAnX21vbnRoc1Nob3J0UmVnZXgnKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX21vbnRoc1Nob3J0UmVnZXggPSBkZWZhdWx0TW9udGhzU2hvcnRSZWdleDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9tb250aHNTaG9ydFN0cmljdFJlZ2V4ICYmIGlzU3RyaWN0ID9cbiAgICAgICAgICAgICAgICB0aGlzLl9tb250aHNTaG9ydFN0cmljdFJlZ2V4IDogdGhpcy5fbW9udGhzU2hvcnRSZWdleDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHZhciBkZWZhdWx0TW9udGhzUmVnZXggPSBtYXRjaFdvcmQ7XG4gICAgZnVuY3Rpb24gbW9udGhzUmVnZXggKGlzU3RyaWN0KSB7XG4gICAgICAgIGlmICh0aGlzLl9tb250aHNQYXJzZUV4YWN0KSB7XG4gICAgICAgICAgICBpZiAoIWhhc093blByb3AodGhpcywgJ19tb250aHNSZWdleCcpKSB7XG4gICAgICAgICAgICAgICAgY29tcHV0ZU1vbnRoc1BhcnNlLmNhbGwodGhpcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXNTdHJpY3QpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fbW9udGhzU3RyaWN0UmVnZXg7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9tb250aHNSZWdleDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICghaGFzT3duUHJvcCh0aGlzLCAnX21vbnRoc1JlZ2V4JykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9tb250aHNSZWdleCA9IGRlZmF1bHRNb250aHNSZWdleDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9tb250aHNTdHJpY3RSZWdleCAmJiBpc1N0cmljdCA/XG4gICAgICAgICAgICAgICAgdGhpcy5fbW9udGhzU3RyaWN0UmVnZXggOiB0aGlzLl9tb250aHNSZWdleDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNvbXB1dGVNb250aHNQYXJzZSAoKSB7XG4gICAgICAgIGZ1bmN0aW9uIGNtcExlblJldihhLCBiKSB7XG4gICAgICAgICAgICByZXR1cm4gYi5sZW5ndGggLSBhLmxlbmd0aDtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBzaG9ydFBpZWNlcyA9IFtdLCBsb25nUGllY2VzID0gW10sIG1peGVkUGllY2VzID0gW10sXG4gICAgICAgICAgICBpLCBtb207XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCAxMjsgaSsrKSB7XG4gICAgICAgICAgICAvLyBtYWtlIHRoZSByZWdleCBpZiB3ZSBkb24ndCBoYXZlIGl0IGFscmVhZHlcbiAgICAgICAgICAgIG1vbSA9IGNyZWF0ZVVUQyhbMjAwMCwgaV0pO1xuICAgICAgICAgICAgc2hvcnRQaWVjZXMucHVzaCh0aGlzLm1vbnRoc1Nob3J0KG1vbSwgJycpKTtcbiAgICAgICAgICAgIGxvbmdQaWVjZXMucHVzaCh0aGlzLm1vbnRocyhtb20sICcnKSk7XG4gICAgICAgICAgICBtaXhlZFBpZWNlcy5wdXNoKHRoaXMubW9udGhzKG1vbSwgJycpKTtcbiAgICAgICAgICAgIG1peGVkUGllY2VzLnB1c2godGhpcy5tb250aHNTaG9ydChtb20sICcnKSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gU29ydGluZyBtYWtlcyBzdXJlIGlmIG9uZSBtb250aCAob3IgYWJicikgaXMgYSBwcmVmaXggb2YgYW5vdGhlciBpdFxuICAgICAgICAvLyB3aWxsIG1hdGNoIHRoZSBsb25nZXIgcGllY2UuXG4gICAgICAgIHNob3J0UGllY2VzLnNvcnQoY21wTGVuUmV2KTtcbiAgICAgICAgbG9uZ1BpZWNlcy5zb3J0KGNtcExlblJldik7XG4gICAgICAgIG1peGVkUGllY2VzLnNvcnQoY21wTGVuUmV2KTtcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IDEyOyBpKyspIHtcbiAgICAgICAgICAgIHNob3J0UGllY2VzW2ldID0gcmVnZXhFc2NhcGUoc2hvcnRQaWVjZXNbaV0pO1xuICAgICAgICAgICAgbG9uZ1BpZWNlc1tpXSA9IHJlZ2V4RXNjYXBlKGxvbmdQaWVjZXNbaV0pO1xuICAgICAgICB9XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCAyNDsgaSsrKSB7XG4gICAgICAgICAgICBtaXhlZFBpZWNlc1tpXSA9IHJlZ2V4RXNjYXBlKG1peGVkUGllY2VzW2ldKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX21vbnRoc1JlZ2V4ID0gbmV3IFJlZ0V4cCgnXignICsgbWl4ZWRQaWVjZXMuam9pbignfCcpICsgJyknLCAnaScpO1xuICAgICAgICB0aGlzLl9tb250aHNTaG9ydFJlZ2V4ID0gdGhpcy5fbW9udGhzUmVnZXg7XG4gICAgICAgIHRoaXMuX21vbnRoc1N0cmljdFJlZ2V4ID0gbmV3IFJlZ0V4cCgnXignICsgbG9uZ1BpZWNlcy5qb2luKCd8JykgKyAnKScsICdpJyk7XG4gICAgICAgIHRoaXMuX21vbnRoc1Nob3J0U3RyaWN0UmVnZXggPSBuZXcgUmVnRXhwKCdeKCcgKyBzaG9ydFBpZWNlcy5qb2luKCd8JykgKyAnKScsICdpJyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY3JlYXRlRGF0ZSAoeSwgbSwgZCwgaCwgTSwgcywgbXMpIHtcbiAgICAgICAgLy8gY2FuJ3QganVzdCBhcHBseSgpIHRvIGNyZWF0ZSBhIGRhdGU6XG4gICAgICAgIC8vIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcS8xODEzNDhcbiAgICAgICAgdmFyIGRhdGUgPSBuZXcgRGF0ZSh5LCBtLCBkLCBoLCBNLCBzLCBtcyk7XG5cbiAgICAgICAgLy8gdGhlIGRhdGUgY29uc3RydWN0b3IgcmVtYXBzIHllYXJzIDAtOTkgdG8gMTkwMC0xOTk5XG4gICAgICAgIGlmICh5IDwgMTAwICYmIHkgPj0gMCAmJiBpc0Zpbml0ZShkYXRlLmdldEZ1bGxZZWFyKCkpKSB7XG4gICAgICAgICAgICBkYXRlLnNldEZ1bGxZZWFyKHkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkYXRlO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNyZWF0ZVVUQ0RhdGUgKHkpIHtcbiAgICAgICAgdmFyIGRhdGUgPSBuZXcgRGF0ZShEYXRlLlVUQy5hcHBseShudWxsLCBhcmd1bWVudHMpKTtcblxuICAgICAgICAvLyB0aGUgRGF0ZS5VVEMgZnVuY3Rpb24gcmVtYXBzIHllYXJzIDAtOTkgdG8gMTkwMC0xOTk5XG4gICAgICAgIGlmICh5IDwgMTAwICYmIHkgPj0gMCAmJiBpc0Zpbml0ZShkYXRlLmdldFVUQ0Z1bGxZZWFyKCkpKSB7XG4gICAgICAgICAgICBkYXRlLnNldFVUQ0Z1bGxZZWFyKHkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkYXRlO1xuICAgIH1cblxuICAgIC8vIHN0YXJ0LW9mLWZpcnN0LXdlZWsgLSBzdGFydC1vZi15ZWFyXG4gICAgZnVuY3Rpb24gZmlyc3RXZWVrT2Zmc2V0KHllYXIsIGRvdywgZG95KSB7XG4gICAgICAgIHZhciAvLyBmaXJzdC13ZWVrIGRheSAtLSB3aGljaCBqYW51YXJ5IGlzIGFsd2F5cyBpbiB0aGUgZmlyc3Qgd2VlayAoNCBmb3IgaXNvLCAxIGZvciBvdGhlcilcbiAgICAgICAgICAgIGZ3ZCA9IDcgKyBkb3cgLSBkb3ksXG4gICAgICAgICAgICAvLyBmaXJzdC13ZWVrIGRheSBsb2NhbCB3ZWVrZGF5IC0tIHdoaWNoIGxvY2FsIHdlZWtkYXkgaXMgZndkXG4gICAgICAgICAgICBmd2RsdyA9ICg3ICsgY3JlYXRlVVRDRGF0ZSh5ZWFyLCAwLCBmd2QpLmdldFVUQ0RheSgpIC0gZG93KSAlIDc7XG5cbiAgICAgICAgcmV0dXJuIC1md2RsdyArIGZ3ZCAtIDE7XG4gICAgfVxuXG4gICAgLy8gaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvSVNPX3dlZWtfZGF0ZSNDYWxjdWxhdGluZ19hX2RhdGVfZ2l2ZW5fdGhlX3llYXIuMkNfd2Vla19udW1iZXJfYW5kX3dlZWtkYXlcbiAgICBmdW5jdGlvbiBkYXlPZlllYXJGcm9tV2Vla3MoeWVhciwgd2Vlaywgd2Vla2RheSwgZG93LCBkb3kpIHtcbiAgICAgICAgdmFyIGxvY2FsV2Vla2RheSA9ICg3ICsgd2Vla2RheSAtIGRvdykgJSA3LFxuICAgICAgICAgICAgd2Vla09mZnNldCA9IGZpcnN0V2Vla09mZnNldCh5ZWFyLCBkb3csIGRveSksXG4gICAgICAgICAgICBkYXlPZlllYXIgPSAxICsgNyAqICh3ZWVrIC0gMSkgKyBsb2NhbFdlZWtkYXkgKyB3ZWVrT2Zmc2V0LFxuICAgICAgICAgICAgcmVzWWVhciwgcmVzRGF5T2ZZZWFyO1xuXG4gICAgICAgIGlmIChkYXlPZlllYXIgPD0gMCkge1xuICAgICAgICAgICAgcmVzWWVhciA9IHllYXIgLSAxO1xuICAgICAgICAgICAgcmVzRGF5T2ZZZWFyID0gZGF5c0luWWVhcihyZXNZZWFyKSArIGRheU9mWWVhcjtcbiAgICAgICAgfSBlbHNlIGlmIChkYXlPZlllYXIgPiBkYXlzSW5ZZWFyKHllYXIpKSB7XG4gICAgICAgICAgICByZXNZZWFyID0geWVhciArIDE7XG4gICAgICAgICAgICByZXNEYXlPZlllYXIgPSBkYXlPZlllYXIgLSBkYXlzSW5ZZWFyKHllYXIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVzWWVhciA9IHllYXI7XG4gICAgICAgICAgICByZXNEYXlPZlllYXIgPSBkYXlPZlllYXI7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgeWVhcjogcmVzWWVhcixcbiAgICAgICAgICAgIGRheU9mWWVhcjogcmVzRGF5T2ZZZWFyXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gd2Vla09mWWVhcihtb20sIGRvdywgZG95KSB7XG4gICAgICAgIHZhciB3ZWVrT2Zmc2V0ID0gZmlyc3RXZWVrT2Zmc2V0KG1vbS55ZWFyKCksIGRvdywgZG95KSxcbiAgICAgICAgICAgIHdlZWsgPSBNYXRoLmZsb29yKChtb20uZGF5T2ZZZWFyKCkgLSB3ZWVrT2Zmc2V0IC0gMSkgLyA3KSArIDEsXG4gICAgICAgICAgICByZXNXZWVrLCByZXNZZWFyO1xuXG4gICAgICAgIGlmICh3ZWVrIDwgMSkge1xuICAgICAgICAgICAgcmVzWWVhciA9IG1vbS55ZWFyKCkgLSAxO1xuICAgICAgICAgICAgcmVzV2VlayA9IHdlZWsgKyB3ZWVrc0luWWVhcihyZXNZZWFyLCBkb3csIGRveSk7XG4gICAgICAgIH0gZWxzZSBpZiAod2VlayA+IHdlZWtzSW5ZZWFyKG1vbS55ZWFyKCksIGRvdywgZG95KSkge1xuICAgICAgICAgICAgcmVzV2VlayA9IHdlZWsgLSB3ZWVrc0luWWVhcihtb20ueWVhcigpLCBkb3csIGRveSk7XG4gICAgICAgICAgICByZXNZZWFyID0gbW9tLnllYXIoKSArIDE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXNZZWFyID0gbW9tLnllYXIoKTtcbiAgICAgICAgICAgIHJlc1dlZWsgPSB3ZWVrO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHdlZWs6IHJlc1dlZWssXG4gICAgICAgICAgICB5ZWFyOiByZXNZZWFyXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gd2Vla3NJblllYXIoeWVhciwgZG93LCBkb3kpIHtcbiAgICAgICAgdmFyIHdlZWtPZmZzZXQgPSBmaXJzdFdlZWtPZmZzZXQoeWVhciwgZG93LCBkb3kpLFxuICAgICAgICAgICAgd2Vla09mZnNldE5leHQgPSBmaXJzdFdlZWtPZmZzZXQoeWVhciArIDEsIGRvdywgZG95KTtcbiAgICAgICAgcmV0dXJuIChkYXlzSW5ZZWFyKHllYXIpIC0gd2Vla09mZnNldCArIHdlZWtPZmZzZXROZXh0KSAvIDc7XG4gICAgfVxuXG4gICAgLy8gRk9STUFUVElOR1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ3cnLCBbJ3d3JywgMl0sICd3bycsICd3ZWVrJyk7XG4gICAgYWRkRm9ybWF0VG9rZW4oJ1cnLCBbJ1dXJywgMl0sICdXbycsICdpc29XZWVrJyk7XG5cbiAgICAvLyBBTElBU0VTXG5cbiAgICBhZGRVbml0QWxpYXMoJ3dlZWsnLCAndycpO1xuICAgIGFkZFVuaXRBbGlhcygnaXNvV2VlaycsICdXJyk7XG5cbiAgICAvLyBQUklPUklUSUVTXG5cbiAgICBhZGRVbml0UHJpb3JpdHkoJ3dlZWsnLCA1KTtcbiAgICBhZGRVbml0UHJpb3JpdHkoJ2lzb1dlZWsnLCA1KTtcblxuICAgIC8vIFBBUlNJTkdcblxuICAgIGFkZFJlZ2V4VG9rZW4oJ3cnLCAgbWF0Y2gxdG8yKTtcbiAgICBhZGRSZWdleFRva2VuKCd3dycsIG1hdGNoMXRvMiwgbWF0Y2gyKTtcbiAgICBhZGRSZWdleFRva2VuKCdXJywgIG1hdGNoMXRvMik7XG4gICAgYWRkUmVnZXhUb2tlbignV1cnLCBtYXRjaDF0bzIsIG1hdGNoMik7XG5cbiAgICBhZGRXZWVrUGFyc2VUb2tlbihbJ3cnLCAnd3cnLCAnVycsICdXVyddLCBmdW5jdGlvbiAoaW5wdXQsIHdlZWssIGNvbmZpZywgdG9rZW4pIHtcbiAgICAgICAgd2Vla1t0b2tlbi5zdWJzdHIoMCwgMSldID0gdG9JbnQoaW5wdXQpO1xuICAgIH0pO1xuXG4gICAgLy8gSEVMUEVSU1xuXG4gICAgLy8gTE9DQUxFU1xuXG4gICAgZnVuY3Rpb24gbG9jYWxlV2VlayAobW9tKSB7XG4gICAgICAgIHJldHVybiB3ZWVrT2ZZZWFyKG1vbSwgdGhpcy5fd2Vlay5kb3csIHRoaXMuX3dlZWsuZG95KS53ZWVrO1xuICAgIH1cblxuICAgIHZhciBkZWZhdWx0TG9jYWxlV2VlayA9IHtcbiAgICAgICAgZG93IDogMCwgLy8gU3VuZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgIGRveSA6IDYgIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDFzdCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gbG9jYWxlRmlyc3REYXlPZldlZWsgKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fd2Vlay5kb3c7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbG9jYWxlRmlyc3REYXlPZlllYXIgKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fd2Vlay5kb3k7XG4gICAgfVxuXG4gICAgLy8gTU9NRU5UU1xuXG4gICAgZnVuY3Rpb24gZ2V0U2V0V2VlayAoaW5wdXQpIHtcbiAgICAgICAgdmFyIHdlZWsgPSB0aGlzLmxvY2FsZURhdGEoKS53ZWVrKHRoaXMpO1xuICAgICAgICByZXR1cm4gaW5wdXQgPT0gbnVsbCA/IHdlZWsgOiB0aGlzLmFkZCgoaW5wdXQgLSB3ZWVrKSAqIDcsICdkJyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0U2V0SVNPV2VlayAoaW5wdXQpIHtcbiAgICAgICAgdmFyIHdlZWsgPSB3ZWVrT2ZZZWFyKHRoaXMsIDEsIDQpLndlZWs7XG4gICAgICAgIHJldHVybiBpbnB1dCA9PSBudWxsID8gd2VlayA6IHRoaXMuYWRkKChpbnB1dCAtIHdlZWspICogNywgJ2QnKTtcbiAgICB9XG5cbiAgICAvLyBGT1JNQVRUSU5HXG5cbiAgICBhZGRGb3JtYXRUb2tlbignZCcsIDAsICdkbycsICdkYXknKTtcblxuICAgIGFkZEZvcm1hdFRva2VuKCdkZCcsIDAsIDAsIGZ1bmN0aW9uIChmb3JtYXQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLndlZWtkYXlzTWluKHRoaXMsIGZvcm1hdCk7XG4gICAgfSk7XG5cbiAgICBhZGRGb3JtYXRUb2tlbignZGRkJywgMCwgMCwgZnVuY3Rpb24gKGZvcm1hdCkge1xuICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkud2Vla2RheXNTaG9ydCh0aGlzLCBmb3JtYXQpO1xuICAgIH0pO1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ2RkZGQnLCAwLCAwLCBmdW5jdGlvbiAoZm9ybWF0KSB7XG4gICAgICAgIHJldHVybiB0aGlzLmxvY2FsZURhdGEoKS53ZWVrZGF5cyh0aGlzLCBmb3JtYXQpO1xuICAgIH0pO1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ2UnLCAwLCAwLCAnd2Vla2RheScpO1xuICAgIGFkZEZvcm1hdFRva2VuKCdFJywgMCwgMCwgJ2lzb1dlZWtkYXknKTtcblxuICAgIC8vIEFMSUFTRVNcblxuICAgIGFkZFVuaXRBbGlhcygnZGF5JywgJ2QnKTtcbiAgICBhZGRVbml0QWxpYXMoJ3dlZWtkYXknLCAnZScpO1xuICAgIGFkZFVuaXRBbGlhcygnaXNvV2Vla2RheScsICdFJyk7XG5cbiAgICAvLyBQUklPUklUWVxuICAgIGFkZFVuaXRQcmlvcml0eSgnZGF5JywgMTEpO1xuICAgIGFkZFVuaXRQcmlvcml0eSgnd2Vla2RheScsIDExKTtcbiAgICBhZGRVbml0UHJpb3JpdHkoJ2lzb1dlZWtkYXknLCAxMSk7XG5cbiAgICAvLyBQQVJTSU5HXG5cbiAgICBhZGRSZWdleFRva2VuKCdkJywgICAgbWF0Y2gxdG8yKTtcbiAgICBhZGRSZWdleFRva2VuKCdlJywgICAgbWF0Y2gxdG8yKTtcbiAgICBhZGRSZWdleFRva2VuKCdFJywgICAgbWF0Y2gxdG8yKTtcbiAgICBhZGRSZWdleFRva2VuKCdkZCcsICAgZnVuY3Rpb24gKGlzU3RyaWN0LCBsb2NhbGUpIHtcbiAgICAgICAgcmV0dXJuIGxvY2FsZS53ZWVrZGF5c01pblJlZ2V4KGlzU3RyaWN0KTtcbiAgICB9KTtcbiAgICBhZGRSZWdleFRva2VuKCdkZGQnLCAgIGZ1bmN0aW9uIChpc1N0cmljdCwgbG9jYWxlKSB7XG4gICAgICAgIHJldHVybiBsb2NhbGUud2Vla2RheXNTaG9ydFJlZ2V4KGlzU3RyaWN0KTtcbiAgICB9KTtcbiAgICBhZGRSZWdleFRva2VuKCdkZGRkJywgICBmdW5jdGlvbiAoaXNTdHJpY3QsIGxvY2FsZSkge1xuICAgICAgICByZXR1cm4gbG9jYWxlLndlZWtkYXlzUmVnZXgoaXNTdHJpY3QpO1xuICAgIH0pO1xuXG4gICAgYWRkV2Vla1BhcnNlVG9rZW4oWydkZCcsICdkZGQnLCAnZGRkZCddLCBmdW5jdGlvbiAoaW5wdXQsIHdlZWssIGNvbmZpZywgdG9rZW4pIHtcbiAgICAgICAgdmFyIHdlZWtkYXkgPSBjb25maWcuX2xvY2FsZS53ZWVrZGF5c1BhcnNlKGlucHV0LCB0b2tlbiwgY29uZmlnLl9zdHJpY3QpO1xuICAgICAgICAvLyBpZiB3ZSBkaWRuJ3QgZ2V0IGEgd2Vla2RheSBuYW1lLCBtYXJrIHRoZSBkYXRlIGFzIGludmFsaWRcbiAgICAgICAgaWYgKHdlZWtkYXkgIT0gbnVsbCkge1xuICAgICAgICAgICAgd2Vlay5kID0gd2Vla2RheTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLmludmFsaWRXZWVrZGF5ID0gaW5wdXQ7XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIGFkZFdlZWtQYXJzZVRva2VuKFsnZCcsICdlJywgJ0UnXSwgZnVuY3Rpb24gKGlucHV0LCB3ZWVrLCBjb25maWcsIHRva2VuKSB7XG4gICAgICAgIHdlZWtbdG9rZW5dID0gdG9JbnQoaW5wdXQpO1xuICAgIH0pO1xuXG4gICAgLy8gSEVMUEVSU1xuXG4gICAgZnVuY3Rpb24gcGFyc2VXZWVrZGF5KGlucHV0LCBsb2NhbGUpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBpbnB1dCAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHJldHVybiBpbnB1dDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghaXNOYU4oaW5wdXQpKSB7XG4gICAgICAgICAgICByZXR1cm4gcGFyc2VJbnQoaW5wdXQsIDEwKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlucHV0ID0gbG9jYWxlLndlZWtkYXlzUGFyc2UoaW5wdXQpO1xuICAgICAgICBpZiAodHlwZW9mIGlucHV0ID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgcmV0dXJuIGlucHV0O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcGFyc2VJc29XZWVrZGF5KGlucHV0LCBsb2NhbGUpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBpbnB1dCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHJldHVybiBsb2NhbGUud2Vla2RheXNQYXJzZShpbnB1dCkgJSA3IHx8IDc7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGlzTmFOKGlucHV0KSA/IG51bGwgOiBpbnB1dDtcbiAgICB9XG5cbiAgICAvLyBMT0NBTEVTXG5cbiAgICB2YXIgZGVmYXVsdExvY2FsZVdlZWtkYXlzID0gJ1N1bmRheV9Nb25kYXlfVHVlc2RheV9XZWRuZXNkYXlfVGh1cnNkYXlfRnJpZGF5X1NhdHVyZGF5Jy5zcGxpdCgnXycpO1xuICAgIGZ1bmN0aW9uIGxvY2FsZVdlZWtkYXlzIChtLCBmb3JtYXQpIHtcbiAgICAgICAgaWYgKCFtKSB7XG4gICAgICAgICAgICByZXR1cm4gaXNBcnJheSh0aGlzLl93ZWVrZGF5cykgPyB0aGlzLl93ZWVrZGF5cyA6XG4gICAgICAgICAgICAgICAgdGhpcy5fd2Vla2RheXNbJ3N0YW5kYWxvbmUnXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaXNBcnJheSh0aGlzLl93ZWVrZGF5cykgPyB0aGlzLl93ZWVrZGF5c1ttLmRheSgpXSA6XG4gICAgICAgICAgICB0aGlzLl93ZWVrZGF5c1t0aGlzLl93ZWVrZGF5cy5pc0Zvcm1hdC50ZXN0KGZvcm1hdCkgPyAnZm9ybWF0JyA6ICdzdGFuZGFsb25lJ11bbS5kYXkoKV07XG4gICAgfVxuXG4gICAgdmFyIGRlZmF1bHRMb2NhbGVXZWVrZGF5c1Nob3J0ID0gJ1N1bl9Nb25fVHVlX1dlZF9UaHVfRnJpX1NhdCcuc3BsaXQoJ18nKTtcbiAgICBmdW5jdGlvbiBsb2NhbGVXZWVrZGF5c1Nob3J0IChtKSB7XG4gICAgICAgIHJldHVybiAobSkgPyB0aGlzLl93ZWVrZGF5c1Nob3J0W20uZGF5KCldIDogdGhpcy5fd2Vla2RheXNTaG9ydDtcbiAgICB9XG5cbiAgICB2YXIgZGVmYXVsdExvY2FsZVdlZWtkYXlzTWluID0gJ1N1X01vX1R1X1dlX1RoX0ZyX1NhJy5zcGxpdCgnXycpO1xuICAgIGZ1bmN0aW9uIGxvY2FsZVdlZWtkYXlzTWluIChtKSB7XG4gICAgICAgIHJldHVybiAobSkgPyB0aGlzLl93ZWVrZGF5c01pblttLmRheSgpXSA6IHRoaXMuX3dlZWtkYXlzTWluO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGhhbmRsZVN0cmljdFBhcnNlJDEod2Vla2RheU5hbWUsIGZvcm1hdCwgc3RyaWN0KSB7XG4gICAgICAgIHZhciBpLCBpaSwgbW9tLCBsbGMgPSB3ZWVrZGF5TmFtZS50b0xvY2FsZUxvd2VyQ2FzZSgpO1xuICAgICAgICBpZiAoIXRoaXMuX3dlZWtkYXlzUGFyc2UpIHtcbiAgICAgICAgICAgIHRoaXMuX3dlZWtkYXlzUGFyc2UgPSBbXTtcbiAgICAgICAgICAgIHRoaXMuX3Nob3J0V2Vla2RheXNQYXJzZSA9IFtdO1xuICAgICAgICAgICAgdGhpcy5fbWluV2Vla2RheXNQYXJzZSA9IFtdO1xuXG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgNzsgKytpKSB7XG4gICAgICAgICAgICAgICAgbW9tID0gY3JlYXRlVVRDKFsyMDAwLCAxXSkuZGF5KGkpO1xuICAgICAgICAgICAgICAgIHRoaXMuX21pbldlZWtkYXlzUGFyc2VbaV0gPSB0aGlzLndlZWtkYXlzTWluKG1vbSwgJycpLnRvTG9jYWxlTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fc2hvcnRXZWVrZGF5c1BhcnNlW2ldID0gdGhpcy53ZWVrZGF5c1Nob3J0KG1vbSwgJycpLnRvTG9jYWxlTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fd2Vla2RheXNQYXJzZVtpXSA9IHRoaXMud2Vla2RheXMobW9tLCAnJykudG9Mb2NhbGVMb3dlckNhc2UoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzdHJpY3QpIHtcbiAgICAgICAgICAgIGlmIChmb3JtYXQgPT09ICdkZGRkJykge1xuICAgICAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX3dlZWtkYXlzUGFyc2UsIGxsYyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlpICE9PSAtMSA/IGlpIDogbnVsbDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZm9ybWF0ID09PSAnZGRkJykge1xuICAgICAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX3Nob3J0V2Vla2RheXNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gaWkgIT09IC0xID8gaWkgOiBudWxsO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl9taW5XZWVrZGF5c1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgICAgIHJldHVybiBpaSAhPT0gLTEgPyBpaSA6IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoZm9ybWF0ID09PSAnZGRkZCcpIHtcbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl93ZWVrZGF5c1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgICAgIGlmIChpaSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl9zaG9ydFdlZWtkYXlzUGFyc2UsIGxsYyk7XG4gICAgICAgICAgICAgICAgaWYgKGlpICE9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaWk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX21pbldlZWtkYXlzUGFyc2UsIGxsYyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlpICE9PSAtMSA/IGlpIDogbnVsbDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZm9ybWF0ID09PSAnZGRkJykge1xuICAgICAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX3Nob3J0V2Vla2RheXNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICBpZiAoaWkgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpaTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fd2Vla2RheXNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICBpZiAoaWkgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpaTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fbWluV2Vla2RheXNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gaWkgIT09IC0xID8gaWkgOiBudWxsO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl9taW5XZWVrZGF5c1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgICAgIGlmIChpaSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl93ZWVrZGF5c1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgICAgIGlmIChpaSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl9zaG9ydFdlZWtkYXlzUGFyc2UsIGxsYyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlpICE9PSAtMSA/IGlpIDogbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxvY2FsZVdlZWtkYXlzUGFyc2UgKHdlZWtkYXlOYW1lLCBmb3JtYXQsIHN0cmljdCkge1xuICAgICAgICB2YXIgaSwgbW9tLCByZWdleDtcblxuICAgICAgICBpZiAodGhpcy5fd2Vla2RheXNQYXJzZUV4YWN0KSB7XG4gICAgICAgICAgICByZXR1cm4gaGFuZGxlU3RyaWN0UGFyc2UkMS5jYWxsKHRoaXMsIHdlZWtkYXlOYW1lLCBmb3JtYXQsIHN0cmljdCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRoaXMuX3dlZWtkYXlzUGFyc2UpIHtcbiAgICAgICAgICAgIHRoaXMuX3dlZWtkYXlzUGFyc2UgPSBbXTtcbiAgICAgICAgICAgIHRoaXMuX21pbldlZWtkYXlzUGFyc2UgPSBbXTtcbiAgICAgICAgICAgIHRoaXMuX3Nob3J0V2Vla2RheXNQYXJzZSA9IFtdO1xuICAgICAgICAgICAgdGhpcy5fZnVsbFdlZWtkYXlzUGFyc2UgPSBbXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCA3OyBpKyspIHtcbiAgICAgICAgICAgIC8vIG1ha2UgdGhlIHJlZ2V4IGlmIHdlIGRvbid0IGhhdmUgaXQgYWxyZWFkeVxuXG4gICAgICAgICAgICBtb20gPSBjcmVhdGVVVEMoWzIwMDAsIDFdKS5kYXkoaSk7XG4gICAgICAgICAgICBpZiAoc3RyaWN0ICYmICF0aGlzLl9mdWxsV2Vla2RheXNQYXJzZVtpXSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2Z1bGxXZWVrZGF5c1BhcnNlW2ldID0gbmV3IFJlZ0V4cCgnXicgKyB0aGlzLndlZWtkYXlzKG1vbSwgJycpLnJlcGxhY2UoJy4nLCAnXFxcXC4/JykgKyAnJCcsICdpJyk7XG4gICAgICAgICAgICAgICAgdGhpcy5fc2hvcnRXZWVrZGF5c1BhcnNlW2ldID0gbmV3IFJlZ0V4cCgnXicgKyB0aGlzLndlZWtkYXlzU2hvcnQobW9tLCAnJykucmVwbGFjZSgnLicsICdcXFxcLj8nKSArICckJywgJ2knKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9taW5XZWVrZGF5c1BhcnNlW2ldID0gbmV3IFJlZ0V4cCgnXicgKyB0aGlzLndlZWtkYXlzTWluKG1vbSwgJycpLnJlcGxhY2UoJy4nLCAnXFxcXC4/JykgKyAnJCcsICdpJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXRoaXMuX3dlZWtkYXlzUGFyc2VbaV0pIHtcbiAgICAgICAgICAgICAgICByZWdleCA9ICdeJyArIHRoaXMud2Vla2RheXMobW9tLCAnJykgKyAnfF4nICsgdGhpcy53ZWVrZGF5c1Nob3J0KG1vbSwgJycpICsgJ3xeJyArIHRoaXMud2Vla2RheXNNaW4obW9tLCAnJyk7XG4gICAgICAgICAgICAgICAgdGhpcy5fd2Vla2RheXNQYXJzZVtpXSA9IG5ldyBSZWdFeHAocmVnZXgucmVwbGFjZSgnLicsICcnKSwgJ2knKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIHRlc3QgdGhlIHJlZ2V4XG4gICAgICAgICAgICBpZiAoc3RyaWN0ICYmIGZvcm1hdCA9PT0gJ2RkZGQnICYmIHRoaXMuX2Z1bGxXZWVrZGF5c1BhcnNlW2ldLnRlc3Qod2Vla2RheU5hbWUpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHN0cmljdCAmJiBmb3JtYXQgPT09ICdkZGQnICYmIHRoaXMuX3Nob3J0V2Vla2RheXNQYXJzZVtpXS50ZXN0KHdlZWtkYXlOYW1lKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChzdHJpY3QgJiYgZm9ybWF0ID09PSAnZGQnICYmIHRoaXMuX21pbldlZWtkYXlzUGFyc2VbaV0udGVzdCh3ZWVrZGF5TmFtZSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoIXN0cmljdCAmJiB0aGlzLl93ZWVrZGF5c1BhcnNlW2ldLnRlc3Qod2Vla2RheU5hbWUpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBNT01FTlRTXG5cbiAgICBmdW5jdGlvbiBnZXRTZXREYXlPZldlZWsgKGlucHV0KSB7XG4gICAgICAgIGlmICghdGhpcy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBpbnB1dCAhPSBudWxsID8gdGhpcyA6IE5hTjtcbiAgICAgICAgfVxuICAgICAgICB2YXIgZGF5ID0gdGhpcy5faXNVVEMgPyB0aGlzLl9kLmdldFVUQ0RheSgpIDogdGhpcy5fZC5nZXREYXkoKTtcbiAgICAgICAgaWYgKGlucHV0ICE9IG51bGwpIHtcbiAgICAgICAgICAgIGlucHV0ID0gcGFyc2VXZWVrZGF5KGlucHV0LCB0aGlzLmxvY2FsZURhdGEoKSk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5hZGQoaW5wdXQgLSBkYXksICdkJyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gZGF5O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0U2V0TG9jYWxlRGF5T2ZXZWVrIChpbnB1dCkge1xuICAgICAgICBpZiAoIXRoaXMuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gaW5wdXQgIT0gbnVsbCA/IHRoaXMgOiBOYU47XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHdlZWtkYXkgPSAodGhpcy5kYXkoKSArIDcgLSB0aGlzLmxvY2FsZURhdGEoKS5fd2Vlay5kb3cpICUgNztcbiAgICAgICAgcmV0dXJuIGlucHV0ID09IG51bGwgPyB3ZWVrZGF5IDogdGhpcy5hZGQoaW5wdXQgLSB3ZWVrZGF5LCAnZCcpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldFNldElTT0RheU9mV2VlayAoaW5wdXQpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuIGlucHV0ICE9IG51bGwgPyB0aGlzIDogTmFOO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gYmVoYXZlcyB0aGUgc2FtZSBhcyBtb21lbnQjZGF5IGV4Y2VwdFxuICAgICAgICAvLyBhcyBhIGdldHRlciwgcmV0dXJucyA3IGluc3RlYWQgb2YgMCAoMS03IHJhbmdlIGluc3RlYWQgb2YgMC02KVxuICAgICAgICAvLyBhcyBhIHNldHRlciwgc3VuZGF5IHNob3VsZCBiZWxvbmcgdG8gdGhlIHByZXZpb3VzIHdlZWsuXG5cbiAgICAgICAgaWYgKGlucHV0ICE9IG51bGwpIHtcbiAgICAgICAgICAgIHZhciB3ZWVrZGF5ID0gcGFyc2VJc29XZWVrZGF5KGlucHV0LCB0aGlzLmxvY2FsZURhdGEoKSk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5kYXkodGhpcy5kYXkoKSAlIDcgPyB3ZWVrZGF5IDogd2Vla2RheSAtIDcpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGF5KCkgfHwgNztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHZhciBkZWZhdWx0V2Vla2RheXNSZWdleCA9IG1hdGNoV29yZDtcbiAgICBmdW5jdGlvbiB3ZWVrZGF5c1JlZ2V4IChpc1N0cmljdCkge1xuICAgICAgICBpZiAodGhpcy5fd2Vla2RheXNQYXJzZUV4YWN0KSB7XG4gICAgICAgICAgICBpZiAoIWhhc093blByb3AodGhpcywgJ193ZWVrZGF5c1JlZ2V4JykpIHtcbiAgICAgICAgICAgICAgICBjb21wdXRlV2Vla2RheXNQYXJzZS5jYWxsKHRoaXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGlzU3RyaWN0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3dlZWtkYXlzU3RyaWN0UmVnZXg7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl93ZWVrZGF5c1JlZ2V4O1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKCFoYXNPd25Qcm9wKHRoaXMsICdfd2Vla2RheXNSZWdleCcpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fd2Vla2RheXNSZWdleCA9IGRlZmF1bHRXZWVrZGF5c1JlZ2V4O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3dlZWtkYXlzU3RyaWN0UmVnZXggJiYgaXNTdHJpY3QgP1xuICAgICAgICAgICAgICAgIHRoaXMuX3dlZWtkYXlzU3RyaWN0UmVnZXggOiB0aGlzLl93ZWVrZGF5c1JlZ2V4O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGRlZmF1bHRXZWVrZGF5c1Nob3J0UmVnZXggPSBtYXRjaFdvcmQ7XG4gICAgZnVuY3Rpb24gd2Vla2RheXNTaG9ydFJlZ2V4IChpc1N0cmljdCkge1xuICAgICAgICBpZiAodGhpcy5fd2Vla2RheXNQYXJzZUV4YWN0KSB7XG4gICAgICAgICAgICBpZiAoIWhhc093blByb3AodGhpcywgJ193ZWVrZGF5c1JlZ2V4JykpIHtcbiAgICAgICAgICAgICAgICBjb21wdXRlV2Vla2RheXNQYXJzZS5jYWxsKHRoaXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGlzU3RyaWN0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3dlZWtkYXlzU2hvcnRTdHJpY3RSZWdleDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3dlZWtkYXlzU2hvcnRSZWdleDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICghaGFzT3duUHJvcCh0aGlzLCAnX3dlZWtkYXlzU2hvcnRSZWdleCcpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fd2Vla2RheXNTaG9ydFJlZ2V4ID0gZGVmYXVsdFdlZWtkYXlzU2hvcnRSZWdleDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0aGlzLl93ZWVrZGF5c1Nob3J0U3RyaWN0UmVnZXggJiYgaXNTdHJpY3QgP1xuICAgICAgICAgICAgICAgIHRoaXMuX3dlZWtkYXlzU2hvcnRTdHJpY3RSZWdleCA6IHRoaXMuX3dlZWtkYXlzU2hvcnRSZWdleDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHZhciBkZWZhdWx0V2Vla2RheXNNaW5SZWdleCA9IG1hdGNoV29yZDtcbiAgICBmdW5jdGlvbiB3ZWVrZGF5c01pblJlZ2V4IChpc1N0cmljdCkge1xuICAgICAgICBpZiAodGhpcy5fd2Vla2RheXNQYXJzZUV4YWN0KSB7XG4gICAgICAgICAgICBpZiAoIWhhc093blByb3AodGhpcywgJ193ZWVrZGF5c1JlZ2V4JykpIHtcbiAgICAgICAgICAgICAgICBjb21wdXRlV2Vla2RheXNQYXJzZS5jYWxsKHRoaXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGlzU3RyaWN0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3dlZWtkYXlzTWluU3RyaWN0UmVnZXg7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl93ZWVrZGF5c01pblJlZ2V4O1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKCFoYXNPd25Qcm9wKHRoaXMsICdfd2Vla2RheXNNaW5SZWdleCcpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fd2Vla2RheXNNaW5SZWdleCA9IGRlZmF1bHRXZWVrZGF5c01pblJlZ2V4O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3dlZWtkYXlzTWluU3RyaWN0UmVnZXggJiYgaXNTdHJpY3QgP1xuICAgICAgICAgICAgICAgIHRoaXMuX3dlZWtkYXlzTWluU3RyaWN0UmVnZXggOiB0aGlzLl93ZWVrZGF5c01pblJlZ2V4O1xuICAgICAgICB9XG4gICAgfVxuXG5cbiAgICBmdW5jdGlvbiBjb21wdXRlV2Vla2RheXNQYXJzZSAoKSB7XG4gICAgICAgIGZ1bmN0aW9uIGNtcExlblJldihhLCBiKSB7XG4gICAgICAgICAgICByZXR1cm4gYi5sZW5ndGggLSBhLmxlbmd0aDtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBtaW5QaWVjZXMgPSBbXSwgc2hvcnRQaWVjZXMgPSBbXSwgbG9uZ1BpZWNlcyA9IFtdLCBtaXhlZFBpZWNlcyA9IFtdLFxuICAgICAgICAgICAgaSwgbW9tLCBtaW5wLCBzaG9ydHAsIGxvbmdwO1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgNzsgaSsrKSB7XG4gICAgICAgICAgICAvLyBtYWtlIHRoZSByZWdleCBpZiB3ZSBkb24ndCBoYXZlIGl0IGFscmVhZHlcbiAgICAgICAgICAgIG1vbSA9IGNyZWF0ZVVUQyhbMjAwMCwgMV0pLmRheShpKTtcbiAgICAgICAgICAgIG1pbnAgPSB0aGlzLndlZWtkYXlzTWluKG1vbSwgJycpO1xuICAgICAgICAgICAgc2hvcnRwID0gdGhpcy53ZWVrZGF5c1Nob3J0KG1vbSwgJycpO1xuICAgICAgICAgICAgbG9uZ3AgPSB0aGlzLndlZWtkYXlzKG1vbSwgJycpO1xuICAgICAgICAgICAgbWluUGllY2VzLnB1c2gobWlucCk7XG4gICAgICAgICAgICBzaG9ydFBpZWNlcy5wdXNoKHNob3J0cCk7XG4gICAgICAgICAgICBsb25nUGllY2VzLnB1c2gobG9uZ3ApO1xuICAgICAgICAgICAgbWl4ZWRQaWVjZXMucHVzaChtaW5wKTtcbiAgICAgICAgICAgIG1peGVkUGllY2VzLnB1c2goc2hvcnRwKTtcbiAgICAgICAgICAgIG1peGVkUGllY2VzLnB1c2gobG9uZ3ApO1xuICAgICAgICB9XG4gICAgICAgIC8vIFNvcnRpbmcgbWFrZXMgc3VyZSBpZiBvbmUgd2Vla2RheSAob3IgYWJicikgaXMgYSBwcmVmaXggb2YgYW5vdGhlciBpdFxuICAgICAgICAvLyB3aWxsIG1hdGNoIHRoZSBsb25nZXIgcGllY2UuXG4gICAgICAgIG1pblBpZWNlcy5zb3J0KGNtcExlblJldik7XG4gICAgICAgIHNob3J0UGllY2VzLnNvcnQoY21wTGVuUmV2KTtcbiAgICAgICAgbG9uZ1BpZWNlcy5zb3J0KGNtcExlblJldik7XG4gICAgICAgIG1peGVkUGllY2VzLnNvcnQoY21wTGVuUmV2KTtcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IDc7IGkrKykge1xuICAgICAgICAgICAgc2hvcnRQaWVjZXNbaV0gPSByZWdleEVzY2FwZShzaG9ydFBpZWNlc1tpXSk7XG4gICAgICAgICAgICBsb25nUGllY2VzW2ldID0gcmVnZXhFc2NhcGUobG9uZ1BpZWNlc1tpXSk7XG4gICAgICAgICAgICBtaXhlZFBpZWNlc1tpXSA9IHJlZ2V4RXNjYXBlKG1peGVkUGllY2VzW2ldKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX3dlZWtkYXlzUmVnZXggPSBuZXcgUmVnRXhwKCdeKCcgKyBtaXhlZFBpZWNlcy5qb2luKCd8JykgKyAnKScsICdpJyk7XG4gICAgICAgIHRoaXMuX3dlZWtkYXlzU2hvcnRSZWdleCA9IHRoaXMuX3dlZWtkYXlzUmVnZXg7XG4gICAgICAgIHRoaXMuX3dlZWtkYXlzTWluUmVnZXggPSB0aGlzLl93ZWVrZGF5c1JlZ2V4O1xuXG4gICAgICAgIHRoaXMuX3dlZWtkYXlzU3RyaWN0UmVnZXggPSBuZXcgUmVnRXhwKCdeKCcgKyBsb25nUGllY2VzLmpvaW4oJ3wnKSArICcpJywgJ2knKTtcbiAgICAgICAgdGhpcy5fd2Vla2RheXNTaG9ydFN0cmljdFJlZ2V4ID0gbmV3IFJlZ0V4cCgnXignICsgc2hvcnRQaWVjZXMuam9pbignfCcpICsgJyknLCAnaScpO1xuICAgICAgICB0aGlzLl93ZWVrZGF5c01pblN0cmljdFJlZ2V4ID0gbmV3IFJlZ0V4cCgnXignICsgbWluUGllY2VzLmpvaW4oJ3wnKSArICcpJywgJ2knKTtcbiAgICB9XG5cbiAgICAvLyBGT1JNQVRUSU5HXG5cbiAgICBmdW5jdGlvbiBoRm9ybWF0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5ob3VycygpICUgMTIgfHwgMTI7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24ga0Zvcm1hdCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaG91cnMoKSB8fCAyNDtcbiAgICB9XG5cbiAgICBhZGRGb3JtYXRUb2tlbignSCcsIFsnSEgnLCAyXSwgMCwgJ2hvdXInKTtcbiAgICBhZGRGb3JtYXRUb2tlbignaCcsIFsnaGgnLCAyXSwgMCwgaEZvcm1hdCk7XG4gICAgYWRkRm9ybWF0VG9rZW4oJ2snLCBbJ2trJywgMl0sIDAsIGtGb3JtYXQpO1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ2htbScsIDAsIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuICcnICsgaEZvcm1hdC5hcHBseSh0aGlzKSArIHplcm9GaWxsKHRoaXMubWludXRlcygpLCAyKTtcbiAgICB9KTtcblxuICAgIGFkZEZvcm1hdFRva2VuKCdobW1zcycsIDAsIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuICcnICsgaEZvcm1hdC5hcHBseSh0aGlzKSArIHplcm9GaWxsKHRoaXMubWludXRlcygpLCAyKSArXG4gICAgICAgICAgICB6ZXJvRmlsbCh0aGlzLnNlY29uZHMoKSwgMik7XG4gICAgfSk7XG5cbiAgICBhZGRGb3JtYXRUb2tlbignSG1tJywgMCwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gJycgKyB0aGlzLmhvdXJzKCkgKyB6ZXJvRmlsbCh0aGlzLm1pbnV0ZXMoKSwgMik7XG4gICAgfSk7XG5cbiAgICBhZGRGb3JtYXRUb2tlbignSG1tc3MnLCAwLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiAnJyArIHRoaXMuaG91cnMoKSArIHplcm9GaWxsKHRoaXMubWludXRlcygpLCAyKSArXG4gICAgICAgICAgICB6ZXJvRmlsbCh0aGlzLnNlY29uZHMoKSwgMik7XG4gICAgfSk7XG5cbiAgICBmdW5jdGlvbiBtZXJpZGllbSAodG9rZW4sIGxvd2VyY2FzZSkge1xuICAgICAgICBhZGRGb3JtYXRUb2tlbih0b2tlbiwgMCwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLm1lcmlkaWVtKHRoaXMuaG91cnMoKSwgdGhpcy5taW51dGVzKCksIGxvd2VyY2FzZSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG1lcmlkaWVtKCdhJywgdHJ1ZSk7XG4gICAgbWVyaWRpZW0oJ0EnLCBmYWxzZSk7XG5cbiAgICAvLyBBTElBU0VTXG5cbiAgICBhZGRVbml0QWxpYXMoJ2hvdXInLCAnaCcpO1xuXG4gICAgLy8gUFJJT1JJVFlcbiAgICBhZGRVbml0UHJpb3JpdHkoJ2hvdXInLCAxMyk7XG5cbiAgICAvLyBQQVJTSU5HXG5cbiAgICBmdW5jdGlvbiBtYXRjaE1lcmlkaWVtIChpc1N0cmljdCwgbG9jYWxlKSB7XG4gICAgICAgIHJldHVybiBsb2NhbGUuX21lcmlkaWVtUGFyc2U7XG4gICAgfVxuXG4gICAgYWRkUmVnZXhUb2tlbignYScsICBtYXRjaE1lcmlkaWVtKTtcbiAgICBhZGRSZWdleFRva2VuKCdBJywgIG1hdGNoTWVyaWRpZW0pO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ0gnLCAgbWF0Y2gxdG8yKTtcbiAgICBhZGRSZWdleFRva2VuKCdoJywgIG1hdGNoMXRvMik7XG4gICAgYWRkUmVnZXhUb2tlbignaycsICBtYXRjaDF0bzIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ0hIJywgbWF0Y2gxdG8yLCBtYXRjaDIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ2hoJywgbWF0Y2gxdG8yLCBtYXRjaDIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ2trJywgbWF0Y2gxdG8yLCBtYXRjaDIpO1xuXG4gICAgYWRkUmVnZXhUb2tlbignaG1tJywgbWF0Y2gzdG80KTtcbiAgICBhZGRSZWdleFRva2VuKCdobW1zcycsIG1hdGNoNXRvNik7XG4gICAgYWRkUmVnZXhUb2tlbignSG1tJywgbWF0Y2gzdG80KTtcbiAgICBhZGRSZWdleFRva2VuKCdIbW1zcycsIG1hdGNoNXRvNik7XG5cbiAgICBhZGRQYXJzZVRva2VuKFsnSCcsICdISCddLCBIT1VSKTtcbiAgICBhZGRQYXJzZVRva2VuKFsnaycsICdrayddLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5LCBjb25maWcpIHtcbiAgICAgICAgdmFyIGtJbnB1dCA9IHRvSW50KGlucHV0KTtcbiAgICAgICAgYXJyYXlbSE9VUl0gPSBrSW5wdXQgPT09IDI0ID8gMCA6IGtJbnB1dDtcbiAgICB9KTtcbiAgICBhZGRQYXJzZVRva2VuKFsnYScsICdBJ10sIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXksIGNvbmZpZykge1xuICAgICAgICBjb25maWcuX2lzUG0gPSBjb25maWcuX2xvY2FsZS5pc1BNKGlucHV0KTtcbiAgICAgICAgY29uZmlnLl9tZXJpZGllbSA9IGlucHV0O1xuICAgIH0pO1xuICAgIGFkZFBhcnNlVG9rZW4oWydoJywgJ2hoJ10sIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXksIGNvbmZpZykge1xuICAgICAgICBhcnJheVtIT1VSXSA9IHRvSW50KGlucHV0KTtcbiAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuYmlnSG91ciA9IHRydWU7XG4gICAgfSk7XG4gICAgYWRkUGFyc2VUb2tlbignaG1tJywgZnVuY3Rpb24gKGlucHV0LCBhcnJheSwgY29uZmlnKSB7XG4gICAgICAgIHZhciBwb3MgPSBpbnB1dC5sZW5ndGggLSAyO1xuICAgICAgICBhcnJheVtIT1VSXSA9IHRvSW50KGlucHV0LnN1YnN0cigwLCBwb3MpKTtcbiAgICAgICAgYXJyYXlbTUlOVVRFXSA9IHRvSW50KGlucHV0LnN1YnN0cihwb3MpKTtcbiAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuYmlnSG91ciA9IHRydWU7XG4gICAgfSk7XG4gICAgYWRkUGFyc2VUb2tlbignaG1tc3MnLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5LCBjb25maWcpIHtcbiAgICAgICAgdmFyIHBvczEgPSBpbnB1dC5sZW5ndGggLSA0O1xuICAgICAgICB2YXIgcG9zMiA9IGlucHV0Lmxlbmd0aCAtIDI7XG4gICAgICAgIGFycmF5W0hPVVJdID0gdG9JbnQoaW5wdXQuc3Vic3RyKDAsIHBvczEpKTtcbiAgICAgICAgYXJyYXlbTUlOVVRFXSA9IHRvSW50KGlucHV0LnN1YnN0cihwb3MxLCAyKSk7XG4gICAgICAgIGFycmF5W1NFQ09ORF0gPSB0b0ludChpbnB1dC5zdWJzdHIocG9zMikpO1xuICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5iaWdIb3VyID0gdHJ1ZTtcbiAgICB9KTtcbiAgICBhZGRQYXJzZVRva2VuKCdIbW0nLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5LCBjb25maWcpIHtcbiAgICAgICAgdmFyIHBvcyA9IGlucHV0Lmxlbmd0aCAtIDI7XG4gICAgICAgIGFycmF5W0hPVVJdID0gdG9JbnQoaW5wdXQuc3Vic3RyKDAsIHBvcykpO1xuICAgICAgICBhcnJheVtNSU5VVEVdID0gdG9JbnQoaW5wdXQuc3Vic3RyKHBvcykpO1xuICAgIH0pO1xuICAgIGFkZFBhcnNlVG9rZW4oJ0htbXNzJywgZnVuY3Rpb24gKGlucHV0LCBhcnJheSwgY29uZmlnKSB7XG4gICAgICAgIHZhciBwb3MxID0gaW5wdXQubGVuZ3RoIC0gNDtcbiAgICAgICAgdmFyIHBvczIgPSBpbnB1dC5sZW5ndGggLSAyO1xuICAgICAgICBhcnJheVtIT1VSXSA9IHRvSW50KGlucHV0LnN1YnN0cigwLCBwb3MxKSk7XG4gICAgICAgIGFycmF5W01JTlVURV0gPSB0b0ludChpbnB1dC5zdWJzdHIocG9zMSwgMikpO1xuICAgICAgICBhcnJheVtTRUNPTkRdID0gdG9JbnQoaW5wdXQuc3Vic3RyKHBvczIpKTtcbiAgICB9KTtcblxuICAgIC8vIExPQ0FMRVNcblxuICAgIGZ1bmN0aW9uIGxvY2FsZUlzUE0gKGlucHV0KSB7XG4gICAgICAgIC8vIElFOCBRdWlya3MgTW9kZSAmIElFNyBTdGFuZGFyZHMgTW9kZSBkbyBub3QgYWxsb3cgYWNjZXNzaW5nIHN0cmluZ3MgbGlrZSBhcnJheXNcbiAgICAgICAgLy8gVXNpbmcgY2hhckF0IHNob3VsZCBiZSBtb3JlIGNvbXBhdGlibGUuXG4gICAgICAgIHJldHVybiAoKGlucHV0ICsgJycpLnRvTG93ZXJDYXNlKCkuY2hhckF0KDApID09PSAncCcpO1xuICAgIH1cblxuICAgIHZhciBkZWZhdWx0TG9jYWxlTWVyaWRpZW1QYXJzZSA9IC9bYXBdXFwuP20/XFwuPy9pO1xuICAgIGZ1bmN0aW9uIGxvY2FsZU1lcmlkaWVtIChob3VycywgbWludXRlcywgaXNMb3dlcikge1xuICAgICAgICBpZiAoaG91cnMgPiAxMSkge1xuICAgICAgICAgICAgcmV0dXJuIGlzTG93ZXIgPyAncG0nIDogJ1BNJztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBpc0xvd2VyID8gJ2FtJyA6ICdBTSc7XG4gICAgICAgIH1cbiAgICB9XG5cblxuICAgIC8vIE1PTUVOVFNcblxuICAgIC8vIFNldHRpbmcgdGhlIGhvdXIgc2hvdWxkIGtlZXAgdGhlIHRpbWUsIGJlY2F1c2UgdGhlIHVzZXIgZXhwbGljaXRseVxuICAgIC8vIHNwZWNpZmllZCB3aGljaCBob3VyIHRoZXkgd2FudC4gU28gdHJ5aW5nIHRvIG1haW50YWluIHRoZSBzYW1lIGhvdXIgKGluXG4gICAgLy8gYSBuZXcgdGltZXpvbmUpIG1ha2VzIHNlbnNlLiBBZGRpbmcvc3VidHJhY3RpbmcgaG91cnMgZG9lcyBub3QgZm9sbG93XG4gICAgLy8gdGhpcyBydWxlLlxuICAgIHZhciBnZXRTZXRIb3VyID0gbWFrZUdldFNldCgnSG91cnMnLCB0cnVlKTtcblxuICAgIHZhciBiYXNlQ29uZmlnID0ge1xuICAgICAgICBjYWxlbmRhcjogZGVmYXVsdENhbGVuZGFyLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDogZGVmYXVsdExvbmdEYXRlRm9ybWF0LFxuICAgICAgICBpbnZhbGlkRGF0ZTogZGVmYXVsdEludmFsaWREYXRlLFxuICAgICAgICBvcmRpbmFsOiBkZWZhdWx0T3JkaW5hbCxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogZGVmYXVsdERheU9mTW9udGhPcmRpbmFsUGFyc2UsXG4gICAgICAgIHJlbGF0aXZlVGltZTogZGVmYXVsdFJlbGF0aXZlVGltZSxcblxuICAgICAgICBtb250aHM6IGRlZmF1bHRMb2NhbGVNb250aHMsXG4gICAgICAgIG1vbnRoc1Nob3J0OiBkZWZhdWx0TG9jYWxlTW9udGhzU2hvcnQsXG5cbiAgICAgICAgd2VlazogZGVmYXVsdExvY2FsZVdlZWssXG5cbiAgICAgICAgd2Vla2RheXM6IGRlZmF1bHRMb2NhbGVXZWVrZGF5cyxcbiAgICAgICAgd2Vla2RheXNNaW46IGRlZmF1bHRMb2NhbGVXZWVrZGF5c01pbixcbiAgICAgICAgd2Vla2RheXNTaG9ydDogZGVmYXVsdExvY2FsZVdlZWtkYXlzU2hvcnQsXG5cbiAgICAgICAgbWVyaWRpZW1QYXJzZTogZGVmYXVsdExvY2FsZU1lcmlkaWVtUGFyc2VcbiAgICB9O1xuXG4gICAgLy8gaW50ZXJuYWwgc3RvcmFnZSBmb3IgbG9jYWxlIGNvbmZpZyBmaWxlc1xuICAgIHZhciBsb2NhbGVzID0ge307XG4gICAgdmFyIGxvY2FsZUZhbWlsaWVzID0ge307XG4gICAgdmFyIGdsb2JhbExvY2FsZTtcblxuICAgIGZ1bmN0aW9uIG5vcm1hbGl6ZUxvY2FsZShrZXkpIHtcbiAgICAgICAgcmV0dXJuIGtleSA/IGtleS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoJ18nLCAnLScpIDoga2V5O1xuICAgIH1cblxuICAgIC8vIHBpY2sgdGhlIGxvY2FsZSBmcm9tIHRoZSBhcnJheVxuICAgIC8vIHRyeSBbJ2VuLWF1JywgJ2VuLWdiJ10gYXMgJ2VuLWF1JywgJ2VuLWdiJywgJ2VuJywgYXMgaW4gbW92ZSB0aHJvdWdoIHRoZSBsaXN0IHRyeWluZyBlYWNoXG4gICAgLy8gc3Vic3RyaW5nIGZyb20gbW9zdCBzcGVjaWZpYyB0byBsZWFzdCwgYnV0IG1vdmUgdG8gdGhlIG5leHQgYXJyYXkgaXRlbSBpZiBpdCdzIGEgbW9yZSBzcGVjaWZpYyB2YXJpYW50IHRoYW4gdGhlIGN1cnJlbnQgcm9vdFxuICAgIGZ1bmN0aW9uIGNob29zZUxvY2FsZShuYW1lcykge1xuICAgICAgICB2YXIgaSA9IDAsIGosIG5leHQsIGxvY2FsZSwgc3BsaXQ7XG5cbiAgICAgICAgd2hpbGUgKGkgPCBuYW1lcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHNwbGl0ID0gbm9ybWFsaXplTG9jYWxlKG5hbWVzW2ldKS5zcGxpdCgnLScpO1xuICAgICAgICAgICAgaiA9IHNwbGl0Lmxlbmd0aDtcbiAgICAgICAgICAgIG5leHQgPSBub3JtYWxpemVMb2NhbGUobmFtZXNbaSArIDFdKTtcbiAgICAgICAgICAgIG5leHQgPSBuZXh0ID8gbmV4dC5zcGxpdCgnLScpIDogbnVsbDtcbiAgICAgICAgICAgIHdoaWxlIChqID4gMCkge1xuICAgICAgICAgICAgICAgIGxvY2FsZSA9IGxvYWRMb2NhbGUoc3BsaXQuc2xpY2UoMCwgaikuam9pbignLScpKTtcbiAgICAgICAgICAgICAgICBpZiAobG9jYWxlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBsb2NhbGU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChuZXh0ICYmIG5leHQubGVuZ3RoID49IGogJiYgY29tcGFyZUFycmF5cyhzcGxpdCwgbmV4dCwgdHJ1ZSkgPj0gaiAtIDEpIHtcbiAgICAgICAgICAgICAgICAgICAgLy90aGUgbmV4dCBhcnJheSBpdGVtIGlzIGJldHRlciB0aGFuIGEgc2hhbGxvd2VyIHN1YnN0cmluZyBvZiB0aGlzIG9uZVxuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgai0tO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaSsrO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBnbG9iYWxMb2NhbGU7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbG9hZExvY2FsZShuYW1lKSB7XG4gICAgICAgIHZhciBvbGRMb2NhbGUgPSBudWxsO1xuICAgICAgICAvLyBUT0RPOiBGaW5kIGEgYmV0dGVyIHdheSB0byByZWdpc3RlciBhbmQgbG9hZCBhbGwgdGhlIGxvY2FsZXMgaW4gTm9kZVxuICAgICAgICBpZiAoIWxvY2FsZXNbbmFtZV0gJiYgKHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnKSAmJlxuICAgICAgICAgICAgICAgIG1vZHVsZSAmJiBtb2R1bGUuZXhwb3J0cykge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBvbGRMb2NhbGUgPSBnbG9iYWxMb2NhbGUuX2FiYnI7XG4gICAgICAgICAgICAgICAgdmFyIGFsaWFzZWRSZXF1aXJlID0gcmVxdWlyZTtcbiAgICAgICAgICAgICAgICBhbGlhc2VkUmVxdWlyZSgnLi9sb2NhbGUvJyArIG5hbWUpO1xuICAgICAgICAgICAgICAgIGdldFNldEdsb2JhbExvY2FsZShvbGRMb2NhbGUpO1xuICAgICAgICAgICAgfSBjYXRjaCAoZSkge31cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbG9jYWxlc1tuYW1lXTtcbiAgICB9XG5cbiAgICAvLyBUaGlzIGZ1bmN0aW9uIHdpbGwgbG9hZCBsb2NhbGUgYW5kIHRoZW4gc2V0IHRoZSBnbG9iYWwgbG9jYWxlLiAgSWZcbiAgICAvLyBubyBhcmd1bWVudHMgYXJlIHBhc3NlZCBpbiwgaXQgd2lsbCBzaW1wbHkgcmV0dXJuIHRoZSBjdXJyZW50IGdsb2JhbFxuICAgIC8vIGxvY2FsZSBrZXkuXG4gICAgZnVuY3Rpb24gZ2V0U2V0R2xvYmFsTG9jYWxlIChrZXksIHZhbHVlcykge1xuICAgICAgICB2YXIgZGF0YTtcbiAgICAgICAgaWYgKGtleSkge1xuICAgICAgICAgICAgaWYgKGlzVW5kZWZpbmVkKHZhbHVlcykpIHtcbiAgICAgICAgICAgICAgICBkYXRhID0gZ2V0TG9jYWxlKGtleSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBkYXRhID0gZGVmaW5lTG9jYWxlKGtleSwgdmFsdWVzKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgICAgICAvLyBtb21lbnQuZHVyYXRpb24uX2xvY2FsZSA9IG1vbWVudC5fbG9jYWxlID0gZGF0YTtcbiAgICAgICAgICAgICAgICBnbG9iYWxMb2NhbGUgPSBkYXRhO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKCh0eXBlb2YgY29uc29sZSAhPT0gICd1bmRlZmluZWQnKSAmJiBjb25zb2xlLndhcm4pIHtcbiAgICAgICAgICAgICAgICAgICAgLy93YXJuIHVzZXIgaWYgYXJndW1lbnRzIGFyZSBwYXNzZWQgYnV0IHRoZSBsb2NhbGUgY291bGQgbm90IGJlIHNldFxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ0xvY2FsZSAnICsga2V5ICsgICcgbm90IGZvdW5kLiBEaWQgeW91IGZvcmdldCB0byBsb2FkIGl0PycpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBnbG9iYWxMb2NhbGUuX2FiYnI7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZGVmaW5lTG9jYWxlIChuYW1lLCBjb25maWcpIHtcbiAgICAgICAgaWYgKGNvbmZpZyAhPT0gbnVsbCkge1xuICAgICAgICAgICAgdmFyIGxvY2FsZSwgcGFyZW50Q29uZmlnID0gYmFzZUNvbmZpZztcbiAgICAgICAgICAgIGNvbmZpZy5hYmJyID0gbmFtZTtcbiAgICAgICAgICAgIGlmIChsb2NhbGVzW25hbWVdICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICBkZXByZWNhdGVTaW1wbGUoJ2RlZmluZUxvY2FsZU92ZXJyaWRlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICd1c2UgbW9tZW50LnVwZGF0ZUxvY2FsZShsb2NhbGVOYW1lLCBjb25maWcpIHRvIGNoYW5nZSAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICdhbiBleGlzdGluZyBsb2NhbGUuIG1vbWVudC5kZWZpbmVMb2NhbGUobG9jYWxlTmFtZSwgJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAnY29uZmlnKSBzaG91bGQgb25seSBiZSB1c2VkIGZvciBjcmVhdGluZyBhIG5ldyBsb2NhbGUgJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAnU2VlIGh0dHA6Ly9tb21lbnRqcy5jb20vZ3VpZGVzLyMvd2FybmluZ3MvZGVmaW5lLWxvY2FsZS8gZm9yIG1vcmUgaW5mby4nKTtcbiAgICAgICAgICAgICAgICBwYXJlbnRDb25maWcgPSBsb2NhbGVzW25hbWVdLl9jb25maWc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGNvbmZpZy5wYXJlbnRMb2NhbGUgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGlmIChsb2NhbGVzW2NvbmZpZy5wYXJlbnRMb2NhbGVdICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50Q29uZmlnID0gbG9jYWxlc1tjb25maWcucGFyZW50TG9jYWxlXS5fY29uZmlnO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGxvY2FsZSA9IGxvYWRMb2NhbGUoY29uZmlnLnBhcmVudExvY2FsZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChsb2NhbGUgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50Q29uZmlnID0gbG9jYWxlLl9jb25maWc7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWxvY2FsZUZhbWlsaWVzW2NvbmZpZy5wYXJlbnRMb2NhbGVdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWxlRmFtaWxpZXNbY29uZmlnLnBhcmVudExvY2FsZV0gPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsZUZhbWlsaWVzW2NvbmZpZy5wYXJlbnRMb2NhbGVdLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IG5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnOiBjb25maWdcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsb2NhbGVzW25hbWVdID0gbmV3IExvY2FsZShtZXJnZUNvbmZpZ3MocGFyZW50Q29uZmlnLCBjb25maWcpKTtcblxuICAgICAgICAgICAgaWYgKGxvY2FsZUZhbWlsaWVzW25hbWVdKSB7XG4gICAgICAgICAgICAgICAgbG9jYWxlRmFtaWxpZXNbbmFtZV0uZm9yRWFjaChmdW5jdGlvbiAoeCkge1xuICAgICAgICAgICAgICAgICAgICBkZWZpbmVMb2NhbGUoeC5uYW1lLCB4LmNvbmZpZyk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGJhY2t3YXJkcyBjb21wYXQgZm9yIG5vdzogYWxzbyBzZXQgdGhlIGxvY2FsZVxuICAgICAgICAgICAgLy8gbWFrZSBzdXJlIHdlIHNldCB0aGUgbG9jYWxlIEFGVEVSIGFsbCBjaGlsZCBsb2NhbGVzIGhhdmUgYmVlblxuICAgICAgICAgICAgLy8gY3JlYXRlZCwgc28gd2Ugd29uJ3QgZW5kIHVwIHdpdGggdGhlIGNoaWxkIGxvY2FsZSBzZXQuXG4gICAgICAgICAgICBnZXRTZXRHbG9iYWxMb2NhbGUobmFtZSk7XG5cblxuICAgICAgICAgICAgcmV0dXJuIGxvY2FsZXNbbmFtZV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyB1c2VmdWwgZm9yIHRlc3RpbmdcbiAgICAgICAgICAgIGRlbGV0ZSBsb2NhbGVzW25hbWVdO1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiB1cGRhdGVMb2NhbGUobmFtZSwgY29uZmlnKSB7XG4gICAgICAgIGlmIChjb25maWcgIT0gbnVsbCkge1xuICAgICAgICAgICAgdmFyIGxvY2FsZSwgdG1wTG9jYWxlLCBwYXJlbnRDb25maWcgPSBiYXNlQ29uZmlnO1xuICAgICAgICAgICAgLy8gTUVSR0VcbiAgICAgICAgICAgIHRtcExvY2FsZSA9IGxvYWRMb2NhbGUobmFtZSk7XG4gICAgICAgICAgICBpZiAodG1wTG9jYWxlICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICBwYXJlbnRDb25maWcgPSB0bXBMb2NhbGUuX2NvbmZpZztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbmZpZyA9IG1lcmdlQ29uZmlncyhwYXJlbnRDb25maWcsIGNvbmZpZyk7XG4gICAgICAgICAgICBsb2NhbGUgPSBuZXcgTG9jYWxlKGNvbmZpZyk7XG4gICAgICAgICAgICBsb2NhbGUucGFyZW50TG9jYWxlID0gbG9jYWxlc1tuYW1lXTtcbiAgICAgICAgICAgIGxvY2FsZXNbbmFtZV0gPSBsb2NhbGU7XG5cbiAgICAgICAgICAgIC8vIGJhY2t3YXJkcyBjb21wYXQgZm9yIG5vdzogYWxzbyBzZXQgdGhlIGxvY2FsZVxuICAgICAgICAgICAgZ2V0U2V0R2xvYmFsTG9jYWxlKG5hbWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gcGFzcyBudWxsIGZvciBjb25maWcgdG8gdW51cGRhdGUsIHVzZWZ1bCBmb3IgdGVzdHNcbiAgICAgICAgICAgIGlmIChsb2NhbGVzW25hbWVdICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICBpZiAobG9jYWxlc1tuYW1lXS5wYXJlbnRMb2NhbGUgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBsb2NhbGVzW25hbWVdID0gbG9jYWxlc1tuYW1lXS5wYXJlbnRMb2NhbGU7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChsb2NhbGVzW25hbWVdICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIGxvY2FsZXNbbmFtZV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBsb2NhbGVzW25hbWVdO1xuICAgIH1cblxuICAgIC8vIHJldHVybnMgbG9jYWxlIGRhdGFcbiAgICBmdW5jdGlvbiBnZXRMb2NhbGUgKGtleSkge1xuICAgICAgICB2YXIgbG9jYWxlO1xuXG4gICAgICAgIGlmIChrZXkgJiYga2V5Ll9sb2NhbGUgJiYga2V5Ll9sb2NhbGUuX2FiYnIpIHtcbiAgICAgICAgICAgIGtleSA9IGtleS5fbG9jYWxlLl9hYmJyO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFrZXkpIHtcbiAgICAgICAgICAgIHJldHVybiBnbG9iYWxMb2NhbGU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWlzQXJyYXkoa2V5KSkge1xuICAgICAgICAgICAgLy9zaG9ydC1jaXJjdWl0IGV2ZXJ5dGhpbmcgZWxzZVxuICAgICAgICAgICAgbG9jYWxlID0gbG9hZExvY2FsZShrZXkpO1xuICAgICAgICAgICAgaWYgKGxvY2FsZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBsb2NhbGU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBrZXkgPSBba2V5XTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjaG9vc2VMb2NhbGUoa2V5KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsaXN0TG9jYWxlcygpIHtcbiAgICAgICAgcmV0dXJuIGtleXMobG9jYWxlcyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY2hlY2tPdmVyZmxvdyAobSkge1xuICAgICAgICB2YXIgb3ZlcmZsb3c7XG4gICAgICAgIHZhciBhID0gbS5fYTtcblxuICAgICAgICBpZiAoYSAmJiBnZXRQYXJzaW5nRmxhZ3MobSkub3ZlcmZsb3cgPT09IC0yKSB7XG4gICAgICAgICAgICBvdmVyZmxvdyA9XG4gICAgICAgICAgICAgICAgYVtNT05USF0gICAgICAgPCAwIHx8IGFbTU9OVEhdICAgICAgID4gMTEgID8gTU9OVEggOlxuICAgICAgICAgICAgICAgIGFbREFURV0gICAgICAgIDwgMSB8fCBhW0RBVEVdICAgICAgICA+IGRheXNJbk1vbnRoKGFbWUVBUl0sIGFbTU9OVEhdKSA/IERBVEUgOlxuICAgICAgICAgICAgICAgIGFbSE9VUl0gICAgICAgIDwgMCB8fCBhW0hPVVJdICAgICAgICA+IDI0IHx8IChhW0hPVVJdID09PSAyNCAmJiAoYVtNSU5VVEVdICE9PSAwIHx8IGFbU0VDT05EXSAhPT0gMCB8fCBhW01JTExJU0VDT05EXSAhPT0gMCkpID8gSE9VUiA6XG4gICAgICAgICAgICAgICAgYVtNSU5VVEVdICAgICAgPCAwIHx8IGFbTUlOVVRFXSAgICAgID4gNTkgID8gTUlOVVRFIDpcbiAgICAgICAgICAgICAgICBhW1NFQ09ORF0gICAgICA8IDAgfHwgYVtTRUNPTkRdICAgICAgPiA1OSAgPyBTRUNPTkQgOlxuICAgICAgICAgICAgICAgIGFbTUlMTElTRUNPTkRdIDwgMCB8fCBhW01JTExJU0VDT05EXSA+IDk5OSA/IE1JTExJU0VDT05EIDpcbiAgICAgICAgICAgICAgICAtMTtcblxuICAgICAgICAgICAgaWYgKGdldFBhcnNpbmdGbGFncyhtKS5fb3ZlcmZsb3dEYXlPZlllYXIgJiYgKG92ZXJmbG93IDwgWUVBUiB8fCBvdmVyZmxvdyA+IERBVEUpKSB7XG4gICAgICAgICAgICAgICAgb3ZlcmZsb3cgPSBEQVRFO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGdldFBhcnNpbmdGbGFncyhtKS5fb3ZlcmZsb3dXZWVrcyAmJiBvdmVyZmxvdyA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICBvdmVyZmxvdyA9IFdFRUs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZ2V0UGFyc2luZ0ZsYWdzKG0pLl9vdmVyZmxvd1dlZWtkYXkgJiYgb3ZlcmZsb3cgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgb3ZlcmZsb3cgPSBXRUVLREFZO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MobSkub3ZlcmZsb3cgPSBvdmVyZmxvdztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIC8vIFBpY2sgdGhlIGZpcnN0IGRlZmluZWQgb2YgdHdvIG9yIHRocmVlIGFyZ3VtZW50cy5cbiAgICBmdW5jdGlvbiBkZWZhdWx0cyhhLCBiLCBjKSB7XG4gICAgICAgIGlmIChhICE9IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBhO1xuICAgICAgICB9XG4gICAgICAgIGlmIChiICE9IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBiO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGN1cnJlbnREYXRlQXJyYXkoY29uZmlnKSB7XG4gICAgICAgIC8vIGhvb2tzIGlzIGFjdHVhbGx5IHRoZSBleHBvcnRlZCBtb21lbnQgb2JqZWN0XG4gICAgICAgIHZhciBub3dWYWx1ZSA9IG5ldyBEYXRlKGhvb2tzLm5vdygpKTtcbiAgICAgICAgaWYgKGNvbmZpZy5fdXNlVVRDKSB7XG4gICAgICAgICAgICByZXR1cm4gW25vd1ZhbHVlLmdldFVUQ0Z1bGxZZWFyKCksIG5vd1ZhbHVlLmdldFVUQ01vbnRoKCksIG5vd1ZhbHVlLmdldFVUQ0RhdGUoKV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFtub3dWYWx1ZS5nZXRGdWxsWWVhcigpLCBub3dWYWx1ZS5nZXRNb250aCgpLCBub3dWYWx1ZS5nZXREYXRlKCldO1xuICAgIH1cblxuICAgIC8vIGNvbnZlcnQgYW4gYXJyYXkgdG8gYSBkYXRlLlxuICAgIC8vIHRoZSBhcnJheSBzaG91bGQgbWlycm9yIHRoZSBwYXJhbWV0ZXJzIGJlbG93XG4gICAgLy8gbm90ZTogYWxsIHZhbHVlcyBwYXN0IHRoZSB5ZWFyIGFyZSBvcHRpb25hbCBhbmQgd2lsbCBkZWZhdWx0IHRvIHRoZSBsb3dlc3QgcG9zc2libGUgdmFsdWUuXG4gICAgLy8gW3llYXIsIG1vbnRoLCBkYXkgLCBob3VyLCBtaW51dGUsIHNlY29uZCwgbWlsbGlzZWNvbmRdXG4gICAgZnVuY3Rpb24gY29uZmlnRnJvbUFycmF5IChjb25maWcpIHtcbiAgICAgICAgdmFyIGksIGRhdGUsIGlucHV0ID0gW10sIGN1cnJlbnREYXRlLCBleHBlY3RlZFdlZWtkYXksIHllYXJUb1VzZTtcblxuICAgICAgICBpZiAoY29uZmlnLl9kKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjdXJyZW50RGF0ZSA9IGN1cnJlbnREYXRlQXJyYXkoY29uZmlnKTtcblxuICAgICAgICAvL2NvbXB1dGUgZGF5IG9mIHRoZSB5ZWFyIGZyb20gd2Vla3MgYW5kIHdlZWtkYXlzXG4gICAgICAgIGlmIChjb25maWcuX3cgJiYgY29uZmlnLl9hW0RBVEVdID09IG51bGwgJiYgY29uZmlnLl9hW01PTlRIXSA9PSBudWxsKSB7XG4gICAgICAgICAgICBkYXlPZlllYXJGcm9tV2Vla0luZm8oY29uZmlnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vaWYgdGhlIGRheSBvZiB0aGUgeWVhciBpcyBzZXQsIGZpZ3VyZSBvdXQgd2hhdCBpdCBpc1xuICAgICAgICBpZiAoY29uZmlnLl9kYXlPZlllYXIgIT0gbnVsbCkge1xuICAgICAgICAgICAgeWVhclRvVXNlID0gZGVmYXVsdHMoY29uZmlnLl9hW1lFQVJdLCBjdXJyZW50RGF0ZVtZRUFSXSk7XG5cbiAgICAgICAgICAgIGlmIChjb25maWcuX2RheU9mWWVhciA+IGRheXNJblllYXIoeWVhclRvVXNlKSB8fCBjb25maWcuX2RheU9mWWVhciA9PT0gMCkge1xuICAgICAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLl9vdmVyZmxvd0RheU9mWWVhciA9IHRydWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGRhdGUgPSBjcmVhdGVVVENEYXRlKHllYXJUb1VzZSwgMCwgY29uZmlnLl9kYXlPZlllYXIpO1xuICAgICAgICAgICAgY29uZmlnLl9hW01PTlRIXSA9IGRhdGUuZ2V0VVRDTW9udGgoKTtcbiAgICAgICAgICAgIGNvbmZpZy5fYVtEQVRFXSA9IGRhdGUuZ2V0VVRDRGF0ZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gRGVmYXVsdCB0byBjdXJyZW50IGRhdGUuXG4gICAgICAgIC8vICogaWYgbm8geWVhciwgbW9udGgsIGRheSBvZiBtb250aCBhcmUgZ2l2ZW4sIGRlZmF1bHQgdG8gdG9kYXlcbiAgICAgICAgLy8gKiBpZiBkYXkgb2YgbW9udGggaXMgZ2l2ZW4sIGRlZmF1bHQgbW9udGggYW5kIHllYXJcbiAgICAgICAgLy8gKiBpZiBtb250aCBpcyBnaXZlbiwgZGVmYXVsdCBvbmx5IHllYXJcbiAgICAgICAgLy8gKiBpZiB5ZWFyIGlzIGdpdmVuLCBkb24ndCBkZWZhdWx0IGFueXRoaW5nXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCAzICYmIGNvbmZpZy5fYVtpXSA9PSBudWxsOyArK2kpIHtcbiAgICAgICAgICAgIGNvbmZpZy5fYVtpXSA9IGlucHV0W2ldID0gY3VycmVudERhdGVbaV07XG4gICAgICAgIH1cblxuICAgICAgICAvLyBaZXJvIG91dCB3aGF0ZXZlciB3YXMgbm90IGRlZmF1bHRlZCwgaW5jbHVkaW5nIHRpbWVcbiAgICAgICAgZm9yICg7IGkgPCA3OyBpKyspIHtcbiAgICAgICAgICAgIGNvbmZpZy5fYVtpXSA9IGlucHV0W2ldID0gKGNvbmZpZy5fYVtpXSA9PSBudWxsKSA/IChpID09PSAyID8gMSA6IDApIDogY29uZmlnLl9hW2ldO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQ2hlY2sgZm9yIDI0OjAwOjAwLjAwMFxuICAgICAgICBpZiAoY29uZmlnLl9hW0hPVVJdID09PSAyNCAmJlxuICAgICAgICAgICAgICAgIGNvbmZpZy5fYVtNSU5VVEVdID09PSAwICYmXG4gICAgICAgICAgICAgICAgY29uZmlnLl9hW1NFQ09ORF0gPT09IDAgJiZcbiAgICAgICAgICAgICAgICBjb25maWcuX2FbTUlMTElTRUNPTkRdID09PSAwKSB7XG4gICAgICAgICAgICBjb25maWcuX25leHREYXkgPSB0cnVlO1xuICAgICAgICAgICAgY29uZmlnLl9hW0hPVVJdID0gMDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbmZpZy5fZCA9IChjb25maWcuX3VzZVVUQyA/IGNyZWF0ZVVUQ0RhdGUgOiBjcmVhdGVEYXRlKS5hcHBseShudWxsLCBpbnB1dCk7XG4gICAgICAgIGV4cGVjdGVkV2Vla2RheSA9IGNvbmZpZy5fdXNlVVRDID8gY29uZmlnLl9kLmdldFVUQ0RheSgpIDogY29uZmlnLl9kLmdldERheSgpO1xuXG4gICAgICAgIC8vIEFwcGx5IHRpbWV6b25lIG9mZnNldCBmcm9tIGlucHV0LiBUaGUgYWN0dWFsIHV0Y09mZnNldCBjYW4gYmUgY2hhbmdlZFxuICAgICAgICAvLyB3aXRoIHBhcnNlWm9uZS5cbiAgICAgICAgaWYgKGNvbmZpZy5fdHptICE9IG51bGwpIHtcbiAgICAgICAgICAgIGNvbmZpZy5fZC5zZXRVVENNaW51dGVzKGNvbmZpZy5fZC5nZXRVVENNaW51dGVzKCkgLSBjb25maWcuX3R6bSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY29uZmlnLl9uZXh0RGF5KSB7XG4gICAgICAgICAgICBjb25maWcuX2FbSE9VUl0gPSAyNDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGNoZWNrIGZvciBtaXNtYXRjaGluZyBkYXkgb2Ygd2Vla1xuICAgICAgICBpZiAoY29uZmlnLl93ICYmIHR5cGVvZiBjb25maWcuX3cuZCAhPT0gJ3VuZGVmaW5lZCcgJiYgY29uZmlnLl93LmQgIT09IGV4cGVjdGVkV2Vla2RheSkge1xuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykud2Vla2RheU1pc21hdGNoID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGRheU9mWWVhckZyb21XZWVrSW5mbyhjb25maWcpIHtcbiAgICAgICAgdmFyIHcsIHdlZWtZZWFyLCB3ZWVrLCB3ZWVrZGF5LCBkb3csIGRveSwgdGVtcCwgd2Vla2RheU92ZXJmbG93O1xuXG4gICAgICAgIHcgPSBjb25maWcuX3c7XG4gICAgICAgIGlmICh3LkdHICE9IG51bGwgfHwgdy5XICE9IG51bGwgfHwgdy5FICE9IG51bGwpIHtcbiAgICAgICAgICAgIGRvdyA9IDE7XG4gICAgICAgICAgICBkb3kgPSA0O1xuXG4gICAgICAgICAgICAvLyBUT0RPOiBXZSBuZWVkIHRvIHRha2UgdGhlIGN1cnJlbnQgaXNvV2Vla1llYXIsIGJ1dCB0aGF0IGRlcGVuZHMgb25cbiAgICAgICAgICAgIC8vIGhvdyB3ZSBpbnRlcnByZXQgbm93IChsb2NhbCwgdXRjLCBmaXhlZCBvZmZzZXQpLiBTbyBjcmVhdGVcbiAgICAgICAgICAgIC8vIGEgbm93IHZlcnNpb24gb2YgY3VycmVudCBjb25maWcgKHRha2UgbG9jYWwvdXRjL29mZnNldCBmbGFncywgYW5kXG4gICAgICAgICAgICAvLyBjcmVhdGUgbm93KS5cbiAgICAgICAgICAgIHdlZWtZZWFyID0gZGVmYXVsdHMody5HRywgY29uZmlnLl9hW1lFQVJdLCB3ZWVrT2ZZZWFyKGNyZWF0ZUxvY2FsKCksIDEsIDQpLnllYXIpO1xuICAgICAgICAgICAgd2VlayA9IGRlZmF1bHRzKHcuVywgMSk7XG4gICAgICAgICAgICB3ZWVrZGF5ID0gZGVmYXVsdHMody5FLCAxKTtcbiAgICAgICAgICAgIGlmICh3ZWVrZGF5IDwgMSB8fCB3ZWVrZGF5ID4gNykge1xuICAgICAgICAgICAgICAgIHdlZWtkYXlPdmVyZmxvdyA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBkb3cgPSBjb25maWcuX2xvY2FsZS5fd2Vlay5kb3c7XG4gICAgICAgICAgICBkb3kgPSBjb25maWcuX2xvY2FsZS5fd2Vlay5kb3k7XG5cbiAgICAgICAgICAgIHZhciBjdXJXZWVrID0gd2Vla09mWWVhcihjcmVhdGVMb2NhbCgpLCBkb3csIGRveSk7XG5cbiAgICAgICAgICAgIHdlZWtZZWFyID0gZGVmYXVsdHMody5nZywgY29uZmlnLl9hW1lFQVJdLCBjdXJXZWVrLnllYXIpO1xuXG4gICAgICAgICAgICAvLyBEZWZhdWx0IHRvIGN1cnJlbnQgd2Vlay5cbiAgICAgICAgICAgIHdlZWsgPSBkZWZhdWx0cyh3LncsIGN1cldlZWsud2Vlayk7XG5cbiAgICAgICAgICAgIGlmICh3LmQgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIC8vIHdlZWtkYXkgLS0gbG93IGRheSBudW1iZXJzIGFyZSBjb25zaWRlcmVkIG5leHQgd2Vla1xuICAgICAgICAgICAgICAgIHdlZWtkYXkgPSB3LmQ7XG4gICAgICAgICAgICAgICAgaWYgKHdlZWtkYXkgPCAwIHx8IHdlZWtkYXkgPiA2KSB7XG4gICAgICAgICAgICAgICAgICAgIHdlZWtkYXlPdmVyZmxvdyA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmICh3LmUgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIC8vIGxvY2FsIHdlZWtkYXkgLS0gY291bnRpbmcgc3RhcnRzIGZyb20gYmVnaW5pbmcgb2Ygd2Vla1xuICAgICAgICAgICAgICAgIHdlZWtkYXkgPSB3LmUgKyBkb3c7XG4gICAgICAgICAgICAgICAgaWYgKHcuZSA8IDAgfHwgdy5lID4gNikge1xuICAgICAgICAgICAgICAgICAgICB3ZWVrZGF5T3ZlcmZsb3cgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gZGVmYXVsdCB0byBiZWdpbmluZyBvZiB3ZWVrXG4gICAgICAgICAgICAgICAgd2Vla2RheSA9IGRvdztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAod2VlayA8IDEgfHwgd2VlayA+IHdlZWtzSW5ZZWFyKHdlZWtZZWFyLCBkb3csIGRveSkpIHtcbiAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLl9vdmVyZmxvd1dlZWtzID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIGlmICh3ZWVrZGF5T3ZlcmZsb3cgIT0gbnVsbCkge1xuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuX292ZXJmbG93V2Vla2RheSA9IHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0ZW1wID0gZGF5T2ZZZWFyRnJvbVdlZWtzKHdlZWtZZWFyLCB3ZWVrLCB3ZWVrZGF5LCBkb3csIGRveSk7XG4gICAgICAgICAgICBjb25maWcuX2FbWUVBUl0gPSB0ZW1wLnllYXI7XG4gICAgICAgICAgICBjb25maWcuX2RheU9mWWVhciA9IHRlbXAuZGF5T2ZZZWFyO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gaXNvIDg2MDEgcmVnZXhcbiAgICAvLyAwMDAwLTAwLTAwIDAwMDAtVzAwIG9yIDAwMDAtVzAwLTAgKyBUICsgMDAgb3IgMDA6MDAgb3IgMDA6MDA6MDAgb3IgMDA6MDA6MDAuMDAwICsgKzAwOjAwIG9yICswMDAwIG9yICswMClcbiAgICB2YXIgZXh0ZW5kZWRJc29SZWdleCA9IC9eXFxzKigoPzpbKy1dXFxkezZ9fFxcZHs0fSktKD86XFxkXFxkLVxcZFxcZHxXXFxkXFxkLVxcZHxXXFxkXFxkfFxcZFxcZFxcZHxcXGRcXGQpKSg/OihUfCApKFxcZFxcZCg/OjpcXGRcXGQoPzo6XFxkXFxkKD86Wy4sXVxcZCspPyk/KT8pKFtcXCtcXC1dXFxkXFxkKD86Oj9cXGRcXGQpP3xcXHMqWik/KT8kLztcbiAgICB2YXIgYmFzaWNJc29SZWdleCA9IC9eXFxzKigoPzpbKy1dXFxkezZ9fFxcZHs0fSkoPzpcXGRcXGRcXGRcXGR8V1xcZFxcZFxcZHxXXFxkXFxkfFxcZFxcZFxcZHxcXGRcXGQpKSg/OihUfCApKFxcZFxcZCg/OlxcZFxcZCg/OlxcZFxcZCg/OlsuLF1cXGQrKT8pPyk/KShbXFwrXFwtXVxcZFxcZCg/Ojo/XFxkXFxkKT98XFxzKlopPyk/JC87XG5cbiAgICB2YXIgdHpSZWdleCA9IC9afFsrLV1cXGRcXGQoPzo6P1xcZFxcZCk/LztcblxuICAgIHZhciBpc29EYXRlcyA9IFtcbiAgICAgICAgWydZWVlZWVktTU0tREQnLCAvWystXVxcZHs2fS1cXGRcXGQtXFxkXFxkL10sXG4gICAgICAgIFsnWVlZWS1NTS1ERCcsIC9cXGR7NH0tXFxkXFxkLVxcZFxcZC9dLFxuICAgICAgICBbJ0dHR0ctW1ddV1ctRScsIC9cXGR7NH0tV1xcZFxcZC1cXGQvXSxcbiAgICAgICAgWydHR0dHLVtXXVdXJywgL1xcZHs0fS1XXFxkXFxkLywgZmFsc2VdLFxuICAgICAgICBbJ1lZWVktREREJywgL1xcZHs0fS1cXGR7M30vXSxcbiAgICAgICAgWydZWVlZLU1NJywgL1xcZHs0fS1cXGRcXGQvLCBmYWxzZV0sXG4gICAgICAgIFsnWVlZWVlZTU1ERCcsIC9bKy1dXFxkezEwfS9dLFxuICAgICAgICBbJ1lZWVlNTUREJywgL1xcZHs4fS9dLFxuICAgICAgICAvLyBZWVlZTU0gaXMgTk9UIGFsbG93ZWQgYnkgdGhlIHN0YW5kYXJkXG4gICAgICAgIFsnR0dHR1tXXVdXRScsIC9cXGR7NH1XXFxkezN9L10sXG4gICAgICAgIFsnR0dHR1tXXVdXJywgL1xcZHs0fVdcXGR7Mn0vLCBmYWxzZV0sXG4gICAgICAgIFsnWVlZWURERCcsIC9cXGR7N30vXVxuICAgIF07XG5cbiAgICAvLyBpc28gdGltZSBmb3JtYXRzIGFuZCByZWdleGVzXG4gICAgdmFyIGlzb1RpbWVzID0gW1xuICAgICAgICBbJ0hIOm1tOnNzLlNTU1MnLCAvXFxkXFxkOlxcZFxcZDpcXGRcXGRcXC5cXGQrL10sXG4gICAgICAgIFsnSEg6bW06c3MsU1NTUycsIC9cXGRcXGQ6XFxkXFxkOlxcZFxcZCxcXGQrL10sXG4gICAgICAgIFsnSEg6bW06c3MnLCAvXFxkXFxkOlxcZFxcZDpcXGRcXGQvXSxcbiAgICAgICAgWydISDptbScsIC9cXGRcXGQ6XFxkXFxkL10sXG4gICAgICAgIFsnSEhtbXNzLlNTU1MnLCAvXFxkXFxkXFxkXFxkXFxkXFxkXFwuXFxkKy9dLFxuICAgICAgICBbJ0hIbW1zcyxTU1NTJywgL1xcZFxcZFxcZFxcZFxcZFxcZCxcXGQrL10sXG4gICAgICAgIFsnSEhtbXNzJywgL1xcZFxcZFxcZFxcZFxcZFxcZC9dLFxuICAgICAgICBbJ0hIbW0nLCAvXFxkXFxkXFxkXFxkL10sXG4gICAgICAgIFsnSEgnLCAvXFxkXFxkL11cbiAgICBdO1xuXG4gICAgdmFyIGFzcE5ldEpzb25SZWdleCA9IC9eXFwvP0RhdGVcXCgoXFwtP1xcZCspL2k7XG5cbiAgICAvLyBkYXRlIGZyb20gaXNvIGZvcm1hdFxuICAgIGZ1bmN0aW9uIGNvbmZpZ0Zyb21JU08oY29uZmlnKSB7XG4gICAgICAgIHZhciBpLCBsLFxuICAgICAgICAgICAgc3RyaW5nID0gY29uZmlnLl9pLFxuICAgICAgICAgICAgbWF0Y2ggPSBleHRlbmRlZElzb1JlZ2V4LmV4ZWMoc3RyaW5nKSB8fCBiYXNpY0lzb1JlZ2V4LmV4ZWMoc3RyaW5nKSxcbiAgICAgICAgICAgIGFsbG93VGltZSwgZGF0ZUZvcm1hdCwgdGltZUZvcm1hdCwgdHpGb3JtYXQ7XG5cbiAgICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5pc28gPSB0cnVlO1xuXG4gICAgICAgICAgICBmb3IgKGkgPSAwLCBsID0gaXNvRGF0ZXMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgaWYgKGlzb0RhdGVzW2ldWzFdLmV4ZWMobWF0Y2hbMV0pKSB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGVGb3JtYXQgPSBpc29EYXRlc1tpXVswXTtcbiAgICAgICAgICAgICAgICAgICAgYWxsb3dUaW1lID0gaXNvRGF0ZXNbaV1bMl0gIT09IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZGF0ZUZvcm1hdCA9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgY29uZmlnLl9pc1ZhbGlkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG1hdGNoWzNdKSB7XG4gICAgICAgICAgICAgICAgZm9yIChpID0gMCwgbCA9IGlzb1RpbWVzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXNvVGltZXNbaV1bMV0uZXhlYyhtYXRjaFszXSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIG1hdGNoWzJdIHNob3VsZCBiZSAnVCcgb3Igc3BhY2VcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVGb3JtYXQgPSAobWF0Y2hbMl0gfHwgJyAnKSArIGlzb1RpbWVzW2ldWzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHRpbWVGb3JtYXQgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBjb25maWcuX2lzVmFsaWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghYWxsb3dUaW1lICYmIHRpbWVGb3JtYXQgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGNvbmZpZy5faXNWYWxpZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChtYXRjaFs0XSkge1xuICAgICAgICAgICAgICAgIGlmICh0elJlZ2V4LmV4ZWMobWF0Y2hbNF0pKSB7XG4gICAgICAgICAgICAgICAgICAgIHR6Rm9ybWF0ID0gJ1onO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbmZpZy5faXNWYWxpZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uZmlnLl9mID0gZGF0ZUZvcm1hdCArICh0aW1lRm9ybWF0IHx8ICcnKSArICh0ekZvcm1hdCB8fCAnJyk7XG4gICAgICAgICAgICBjb25maWdGcm9tU3RyaW5nQW5kRm9ybWF0KGNvbmZpZyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25maWcuX2lzVmFsaWQgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIFJGQyAyODIyIHJlZ2V4OiBGb3IgZGV0YWlscyBzZWUgaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzI4MjIjc2VjdGlvbi0zLjNcbiAgICB2YXIgcmZjMjgyMiA9IC9eKD86KE1vbnxUdWV8V2VkfFRodXxGcml8U2F0fFN1biksP1xccyk/KFxcZHsxLDJ9KVxccyhKYW58RmVifE1hcnxBcHJ8TWF5fEp1bnxKdWx8QXVnfFNlcHxPY3R8Tm92fERlYylcXHMoXFxkezIsNH0pXFxzKFxcZFxcZCk6KFxcZFxcZCkoPzo6KFxcZFxcZCkpP1xccyg/OihVVHxHTVR8W0VDTVBdW1NEXVQpfChbWnpdKXwoWystXVxcZHs0fSkpJC87XG5cbiAgICBmdW5jdGlvbiBleHRyYWN0RnJvbVJGQzI4MjJTdHJpbmdzKHllYXJTdHIsIG1vbnRoU3RyLCBkYXlTdHIsIGhvdXJTdHIsIG1pbnV0ZVN0ciwgc2Vjb25kU3RyKSB7XG4gICAgICAgIHZhciByZXN1bHQgPSBbXG4gICAgICAgICAgICB1bnRydW5jYXRlWWVhcih5ZWFyU3RyKSxcbiAgICAgICAgICAgIGRlZmF1bHRMb2NhbGVNb250aHNTaG9ydC5pbmRleE9mKG1vbnRoU3RyKSxcbiAgICAgICAgICAgIHBhcnNlSW50KGRheVN0ciwgMTApLFxuICAgICAgICAgICAgcGFyc2VJbnQoaG91clN0ciwgMTApLFxuICAgICAgICAgICAgcGFyc2VJbnQobWludXRlU3RyLCAxMClcbiAgICAgICAgXTtcblxuICAgICAgICBpZiAoc2Vjb25kU3RyKSB7XG4gICAgICAgICAgICByZXN1bHQucHVzaChwYXJzZUludChzZWNvbmRTdHIsIDEwKSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHVudHJ1bmNhdGVZZWFyKHllYXJTdHIpIHtcbiAgICAgICAgdmFyIHllYXIgPSBwYXJzZUludCh5ZWFyU3RyLCAxMCk7XG4gICAgICAgIGlmICh5ZWFyIDw9IDQ5KSB7XG4gICAgICAgICAgICByZXR1cm4gMjAwMCArIHllYXI7XG4gICAgICAgIH0gZWxzZSBpZiAoeWVhciA8PSA5OTkpIHtcbiAgICAgICAgICAgIHJldHVybiAxOTAwICsgeWVhcjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geWVhcjtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwcmVwcm9jZXNzUkZDMjgyMihzKSB7XG4gICAgICAgIC8vIFJlbW92ZSBjb21tZW50cyBhbmQgZm9sZGluZyB3aGl0ZXNwYWNlIGFuZCByZXBsYWNlIG11bHRpcGxlLXNwYWNlcyB3aXRoIGEgc2luZ2xlIHNwYWNlXG4gICAgICAgIHJldHVybiBzLnJlcGxhY2UoL1xcKFteKV0qXFwpfFtcXG5cXHRdL2csICcgJykucmVwbGFjZSgvKFxcc1xccyspL2csICcgJykucmVwbGFjZSgvXlxcc1xccyovLCAnJykucmVwbGFjZSgvXFxzXFxzKiQvLCAnJyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY2hlY2tXZWVrZGF5KHdlZWtkYXlTdHIsIHBhcnNlZElucHV0LCBjb25maWcpIHtcbiAgICAgICAgaWYgKHdlZWtkYXlTdHIpIHtcbiAgICAgICAgICAgIC8vIFRPRE86IFJlcGxhY2UgdGhlIHZhbmlsbGEgSlMgRGF0ZSBvYmplY3Qgd2l0aCBhbiBpbmRlcGVudGVudCBkYXktb2Ytd2VlayBjaGVjay5cbiAgICAgICAgICAgIHZhciB3ZWVrZGF5UHJvdmlkZWQgPSBkZWZhdWx0TG9jYWxlV2Vla2RheXNTaG9ydC5pbmRleE9mKHdlZWtkYXlTdHIpLFxuICAgICAgICAgICAgICAgIHdlZWtkYXlBY3R1YWwgPSBuZXcgRGF0ZShwYXJzZWRJbnB1dFswXSwgcGFyc2VkSW5wdXRbMV0sIHBhcnNlZElucHV0WzJdKS5nZXREYXkoKTtcbiAgICAgICAgICAgIGlmICh3ZWVrZGF5UHJvdmlkZWQgIT09IHdlZWtkYXlBY3R1YWwpIHtcbiAgICAgICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS53ZWVrZGF5TWlzbWF0Y2ggPSB0cnVlO1xuICAgICAgICAgICAgICAgIGNvbmZpZy5faXNWYWxpZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICB2YXIgb2JzT2Zmc2V0cyA9IHtcbiAgICAgICAgVVQ6IDAsXG4gICAgICAgIEdNVDogMCxcbiAgICAgICAgRURUOiAtNCAqIDYwLFxuICAgICAgICBFU1Q6IC01ICogNjAsXG4gICAgICAgIENEVDogLTUgKiA2MCxcbiAgICAgICAgQ1NUOiAtNiAqIDYwLFxuICAgICAgICBNRFQ6IC02ICogNjAsXG4gICAgICAgIE1TVDogLTcgKiA2MCxcbiAgICAgICAgUERUOiAtNyAqIDYwLFxuICAgICAgICBQU1Q6IC04ICogNjBcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gY2FsY3VsYXRlT2Zmc2V0KG9ic09mZnNldCwgbWlsaXRhcnlPZmZzZXQsIG51bU9mZnNldCkge1xuICAgICAgICBpZiAob2JzT2Zmc2V0KSB7XG4gICAgICAgICAgICByZXR1cm4gb2JzT2Zmc2V0c1tvYnNPZmZzZXRdO1xuICAgICAgICB9IGVsc2UgaWYgKG1pbGl0YXJ5T2Zmc2V0KSB7XG4gICAgICAgICAgICAvLyB0aGUgb25seSBhbGxvd2VkIG1pbGl0YXJ5IHR6IGlzIFpcbiAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFyIGhtID0gcGFyc2VJbnQobnVtT2Zmc2V0LCAxMCk7XG4gICAgICAgICAgICB2YXIgbSA9IGhtICUgMTAwLCBoID0gKGhtIC0gbSkgLyAxMDA7XG4gICAgICAgICAgICByZXR1cm4gaCAqIDYwICsgbTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIGRhdGUgYW5kIHRpbWUgZnJvbSByZWYgMjgyMiBmb3JtYXRcbiAgICBmdW5jdGlvbiBjb25maWdGcm9tUkZDMjgyMihjb25maWcpIHtcbiAgICAgICAgdmFyIG1hdGNoID0gcmZjMjgyMi5leGVjKHByZXByb2Nlc3NSRkMyODIyKGNvbmZpZy5faSkpO1xuICAgICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgICAgIHZhciBwYXJzZWRBcnJheSA9IGV4dHJhY3RGcm9tUkZDMjgyMlN0cmluZ3MobWF0Y2hbNF0sIG1hdGNoWzNdLCBtYXRjaFsyXSwgbWF0Y2hbNV0sIG1hdGNoWzZdLCBtYXRjaFs3XSk7XG4gICAgICAgICAgICBpZiAoIWNoZWNrV2Vla2RheShtYXRjaFsxXSwgcGFyc2VkQXJyYXksIGNvbmZpZykpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbmZpZy5fYSA9IHBhcnNlZEFycmF5O1xuICAgICAgICAgICAgY29uZmlnLl90em0gPSBjYWxjdWxhdGVPZmZzZXQobWF0Y2hbOF0sIG1hdGNoWzldLCBtYXRjaFsxMF0pO1xuXG4gICAgICAgICAgICBjb25maWcuX2QgPSBjcmVhdGVVVENEYXRlLmFwcGx5KG51bGwsIGNvbmZpZy5fYSk7XG4gICAgICAgICAgICBjb25maWcuX2Quc2V0VVRDTWludXRlcyhjb25maWcuX2QuZ2V0VVRDTWludXRlcygpIC0gY29uZmlnLl90em0pO1xuXG4gICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5yZmMyODIyID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbmZpZy5faXNWYWxpZCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gZGF0ZSBmcm9tIGlzbyBmb3JtYXQgb3IgZmFsbGJhY2tcbiAgICBmdW5jdGlvbiBjb25maWdGcm9tU3RyaW5nKGNvbmZpZykge1xuICAgICAgICB2YXIgbWF0Y2hlZCA9IGFzcE5ldEpzb25SZWdleC5leGVjKGNvbmZpZy5faSk7XG5cbiAgICAgICAgaWYgKG1hdGNoZWQgIT09IG51bGwpIHtcbiAgICAgICAgICAgIGNvbmZpZy5fZCA9IG5ldyBEYXRlKCttYXRjaGVkWzFdKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbmZpZ0Zyb21JU08oY29uZmlnKTtcbiAgICAgICAgaWYgKGNvbmZpZy5faXNWYWxpZCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIGRlbGV0ZSBjb25maWcuX2lzVmFsaWQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25maWdGcm9tUkZDMjgyMihjb25maWcpO1xuICAgICAgICBpZiAoY29uZmlnLl9pc1ZhbGlkID09PSBmYWxzZSkge1xuICAgICAgICAgICAgZGVsZXRlIGNvbmZpZy5faXNWYWxpZDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEZpbmFsIGF0dGVtcHQsIHVzZSBJbnB1dCBGYWxsYmFja1xuICAgICAgICBob29rcy5jcmVhdGVGcm9tSW5wdXRGYWxsYmFjayhjb25maWcpO1xuICAgIH1cblxuICAgIGhvb2tzLmNyZWF0ZUZyb21JbnB1dEZhbGxiYWNrID0gZGVwcmVjYXRlKFxuICAgICAgICAndmFsdWUgcHJvdmlkZWQgaXMgbm90IGluIGEgcmVjb2duaXplZCBSRkMyODIyIG9yIElTTyBmb3JtYXQuIG1vbWVudCBjb25zdHJ1Y3Rpb24gZmFsbHMgYmFjayB0byBqcyBEYXRlKCksICcgK1xuICAgICAgICAnd2hpY2ggaXMgbm90IHJlbGlhYmxlIGFjcm9zcyBhbGwgYnJvd3NlcnMgYW5kIHZlcnNpb25zLiBOb24gUkZDMjgyMi9JU08gZGF0ZSBmb3JtYXRzIGFyZSAnICtcbiAgICAgICAgJ2Rpc2NvdXJhZ2VkIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gYW4gdXBjb21pbmcgbWFqb3IgcmVsZWFzZS4gUGxlYXNlIHJlZmVyIHRvICcgK1xuICAgICAgICAnaHR0cDovL21vbWVudGpzLmNvbS9ndWlkZXMvIy93YXJuaW5ncy9qcy1kYXRlLyBmb3IgbW9yZSBpbmZvLicsXG4gICAgICAgIGZ1bmN0aW9uIChjb25maWcpIHtcbiAgICAgICAgICAgIGNvbmZpZy5fZCA9IG5ldyBEYXRlKGNvbmZpZy5faSArIChjb25maWcuX3VzZVVUQyA/ICcgVVRDJyA6ICcnKSk7XG4gICAgICAgIH1cbiAgICApO1xuXG4gICAgLy8gY29uc3RhbnQgdGhhdCByZWZlcnMgdG8gdGhlIElTTyBzdGFuZGFyZFxuICAgIGhvb2tzLklTT184NjAxID0gZnVuY3Rpb24gKCkge307XG5cbiAgICAvLyBjb25zdGFudCB0aGF0IHJlZmVycyB0byB0aGUgUkZDIDI4MjIgZm9ybVxuICAgIGhvb2tzLlJGQ18yODIyID0gZnVuY3Rpb24gKCkge307XG5cbiAgICAvLyBkYXRlIGZyb20gc3RyaW5nIGFuZCBmb3JtYXQgc3RyaW5nXG4gICAgZnVuY3Rpb24gY29uZmlnRnJvbVN0cmluZ0FuZEZvcm1hdChjb25maWcpIHtcbiAgICAgICAgLy8gVE9ETzogTW92ZSB0aGlzIHRvIGFub3RoZXIgcGFydCBvZiB0aGUgY3JlYXRpb24gZmxvdyB0byBwcmV2ZW50IGNpcmN1bGFyIGRlcHNcbiAgICAgICAgaWYgKGNvbmZpZy5fZiA9PT0gaG9va3MuSVNPXzg2MDEpIHtcbiAgICAgICAgICAgIGNvbmZpZ0Zyb21JU08oY29uZmlnKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY29uZmlnLl9mID09PSBob29rcy5SRkNfMjgyMikge1xuICAgICAgICAgICAgY29uZmlnRnJvbVJGQzI4MjIoY29uZmlnKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25maWcuX2EgPSBbXTtcbiAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuZW1wdHkgPSB0cnVlO1xuXG4gICAgICAgIC8vIFRoaXMgYXJyYXkgaXMgdXNlZCB0byBtYWtlIGEgRGF0ZSwgZWl0aGVyIHdpdGggYG5ldyBEYXRlYCBvciBgRGF0ZS5VVENgXG4gICAgICAgIHZhciBzdHJpbmcgPSAnJyArIGNvbmZpZy5faSxcbiAgICAgICAgICAgIGksIHBhcnNlZElucHV0LCB0b2tlbnMsIHRva2VuLCBza2lwcGVkLFxuICAgICAgICAgICAgc3RyaW5nTGVuZ3RoID0gc3RyaW5nLmxlbmd0aCxcbiAgICAgICAgICAgIHRvdGFsUGFyc2VkSW5wdXRMZW5ndGggPSAwO1xuXG4gICAgICAgIHRva2VucyA9IGV4cGFuZEZvcm1hdChjb25maWcuX2YsIGNvbmZpZy5fbG9jYWxlKS5tYXRjaChmb3JtYXR0aW5nVG9rZW5zKSB8fCBbXTtcblxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgdG9rZW5zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB0b2tlbiA9IHRva2Vuc1tpXTtcbiAgICAgICAgICAgIHBhcnNlZElucHV0ID0gKHN0cmluZy5tYXRjaChnZXRQYXJzZVJlZ2V4Rm9yVG9rZW4odG9rZW4sIGNvbmZpZykpIHx8IFtdKVswXTtcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCd0b2tlbicsIHRva2VuLCAncGFyc2VkSW5wdXQnLCBwYXJzZWRJbnB1dCxcbiAgICAgICAgICAgIC8vICAgICAgICAgJ3JlZ2V4JywgZ2V0UGFyc2VSZWdleEZvclRva2VuKHRva2VuLCBjb25maWcpKTtcbiAgICAgICAgICAgIGlmIChwYXJzZWRJbnB1dCkge1xuICAgICAgICAgICAgICAgIHNraXBwZWQgPSBzdHJpbmcuc3Vic3RyKDAsIHN0cmluZy5pbmRleE9mKHBhcnNlZElucHV0KSk7XG4gICAgICAgICAgICAgICAgaWYgKHNraXBwZWQubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS51bnVzZWRJbnB1dC5wdXNoKHNraXBwZWQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBzdHJpbmcgPSBzdHJpbmcuc2xpY2Uoc3RyaW5nLmluZGV4T2YocGFyc2VkSW5wdXQpICsgcGFyc2VkSW5wdXQubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICB0b3RhbFBhcnNlZElucHV0TGVuZ3RoICs9IHBhcnNlZElucHV0Lmxlbmd0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGRvbid0IHBhcnNlIGlmIGl0J3Mgbm90IGEga25vd24gdG9rZW5cbiAgICAgICAgICAgIGlmIChmb3JtYXRUb2tlbkZ1bmN0aW9uc1t0b2tlbl0pIHtcbiAgICAgICAgICAgICAgICBpZiAocGFyc2VkSW5wdXQpIHtcbiAgICAgICAgICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuZW1wdHkgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLnVudXNlZFRva2Vucy5wdXNoKHRva2VuKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYWRkVGltZVRvQXJyYXlGcm9tVG9rZW4odG9rZW4sIHBhcnNlZElucHV0LCBjb25maWcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoY29uZmlnLl9zdHJpY3QgJiYgIXBhcnNlZElucHV0KSB7XG4gICAgICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykudW51c2VkVG9rZW5zLnB1c2godG9rZW4pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gYWRkIHJlbWFpbmluZyB1bnBhcnNlZCBpbnB1dCBsZW5ndGggdG8gdGhlIHN0cmluZ1xuICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5jaGFyc0xlZnRPdmVyID0gc3RyaW5nTGVuZ3RoIC0gdG90YWxQYXJzZWRJbnB1dExlbmd0aDtcbiAgICAgICAgaWYgKHN0cmluZy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS51bnVzZWRJbnB1dC5wdXNoKHN0cmluZyk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBjbGVhciBfMTJoIGZsYWcgaWYgaG91ciBpcyA8PSAxMlxuICAgICAgICBpZiAoY29uZmlnLl9hW0hPVVJdIDw9IDEyICYmXG4gICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5iaWdIb3VyID09PSB0cnVlICYmXG4gICAgICAgICAgICBjb25maWcuX2FbSE9VUl0gPiAwKSB7XG4gICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5iaWdIb3VyID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG5cbiAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykucGFyc2VkRGF0ZVBhcnRzID0gY29uZmlnLl9hLnNsaWNlKDApO1xuICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5tZXJpZGllbSA9IGNvbmZpZy5fbWVyaWRpZW07XG4gICAgICAgIC8vIGhhbmRsZSBtZXJpZGllbVxuICAgICAgICBjb25maWcuX2FbSE9VUl0gPSBtZXJpZGllbUZpeFdyYXAoY29uZmlnLl9sb2NhbGUsIGNvbmZpZy5fYVtIT1VSXSwgY29uZmlnLl9tZXJpZGllbSk7XG5cbiAgICAgICAgY29uZmlnRnJvbUFycmF5KGNvbmZpZyk7XG4gICAgICAgIGNoZWNrT3ZlcmZsb3coY29uZmlnKTtcbiAgICB9XG5cblxuICAgIGZ1bmN0aW9uIG1lcmlkaWVtRml4V3JhcCAobG9jYWxlLCBob3VyLCBtZXJpZGllbSkge1xuICAgICAgICB2YXIgaXNQbTtcblxuICAgICAgICBpZiAobWVyaWRpZW0gPT0gbnVsbCkge1xuICAgICAgICAgICAgLy8gbm90aGluZyB0byBkb1xuICAgICAgICAgICAgcmV0dXJuIGhvdXI7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGxvY2FsZS5tZXJpZGllbUhvdXIgIT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIGxvY2FsZS5tZXJpZGllbUhvdXIoaG91ciwgbWVyaWRpZW0pO1xuICAgICAgICB9IGVsc2UgaWYgKGxvY2FsZS5pc1BNICE9IG51bGwpIHtcbiAgICAgICAgICAgIC8vIEZhbGxiYWNrXG4gICAgICAgICAgICBpc1BtID0gbG9jYWxlLmlzUE0obWVyaWRpZW0pO1xuICAgICAgICAgICAgaWYgKGlzUG0gJiYgaG91ciA8IDEyKSB7XG4gICAgICAgICAgICAgICAgaG91ciArPSAxMjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghaXNQbSAmJiBob3VyID09PSAxMikge1xuICAgICAgICAgICAgICAgIGhvdXIgPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGhvdXI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyB0aGlzIGlzIG5vdCBzdXBwb3NlZCB0byBoYXBwZW5cbiAgICAgICAgICAgIHJldHVybiBob3VyO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gZGF0ZSBmcm9tIHN0cmluZyBhbmQgYXJyYXkgb2YgZm9ybWF0IHN0cmluZ3NcbiAgICBmdW5jdGlvbiBjb25maWdGcm9tU3RyaW5nQW5kQXJyYXkoY29uZmlnKSB7XG4gICAgICAgIHZhciB0ZW1wQ29uZmlnLFxuICAgICAgICAgICAgYmVzdE1vbWVudCxcblxuICAgICAgICAgICAgc2NvcmVUb0JlYXQsXG4gICAgICAgICAgICBpLFxuICAgICAgICAgICAgY3VycmVudFNjb3JlO1xuXG4gICAgICAgIGlmIChjb25maWcuX2YubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5pbnZhbGlkRm9ybWF0ID0gdHJ1ZTtcbiAgICAgICAgICAgIGNvbmZpZy5fZCA9IG5ldyBEYXRlKE5hTik7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgY29uZmlnLl9mLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjdXJyZW50U2NvcmUgPSAwO1xuICAgICAgICAgICAgdGVtcENvbmZpZyA9IGNvcHlDb25maWcoe30sIGNvbmZpZyk7XG4gICAgICAgICAgICBpZiAoY29uZmlnLl91c2VVVEMgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRlbXBDb25maWcuX3VzZVVUQyA9IGNvbmZpZy5fdXNlVVRDO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGVtcENvbmZpZy5fZiA9IGNvbmZpZy5fZltpXTtcbiAgICAgICAgICAgIGNvbmZpZ0Zyb21TdHJpbmdBbmRGb3JtYXQodGVtcENvbmZpZyk7XG5cbiAgICAgICAgICAgIGlmICghaXNWYWxpZCh0ZW1wQ29uZmlnKSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBpZiB0aGVyZSBpcyBhbnkgaW5wdXQgdGhhdCB3YXMgbm90IHBhcnNlZCBhZGQgYSBwZW5hbHR5IGZvciB0aGF0IGZvcm1hdFxuICAgICAgICAgICAgY3VycmVudFNjb3JlICs9IGdldFBhcnNpbmdGbGFncyh0ZW1wQ29uZmlnKS5jaGFyc0xlZnRPdmVyO1xuXG4gICAgICAgICAgICAvL29yIHRva2Vuc1xuICAgICAgICAgICAgY3VycmVudFNjb3JlICs9IGdldFBhcnNpbmdGbGFncyh0ZW1wQ29uZmlnKS51bnVzZWRUb2tlbnMubGVuZ3RoICogMTA7XG5cbiAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyh0ZW1wQ29uZmlnKS5zY29yZSA9IGN1cnJlbnRTY29yZTtcblxuICAgICAgICAgICAgaWYgKHNjb3JlVG9CZWF0ID09IG51bGwgfHwgY3VycmVudFNjb3JlIDwgc2NvcmVUb0JlYXQpIHtcbiAgICAgICAgICAgICAgICBzY29yZVRvQmVhdCA9IGN1cnJlbnRTY29yZTtcbiAgICAgICAgICAgICAgICBiZXN0TW9tZW50ID0gdGVtcENvbmZpZztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGV4dGVuZChjb25maWcsIGJlc3RNb21lbnQgfHwgdGVtcENvbmZpZyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY29uZmlnRnJvbU9iamVjdChjb25maWcpIHtcbiAgICAgICAgaWYgKGNvbmZpZy5fZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGkgPSBub3JtYWxpemVPYmplY3RVbml0cyhjb25maWcuX2kpO1xuICAgICAgICBjb25maWcuX2EgPSBtYXAoW2kueWVhciwgaS5tb250aCwgaS5kYXkgfHwgaS5kYXRlLCBpLmhvdXIsIGkubWludXRlLCBpLnNlY29uZCwgaS5taWxsaXNlY29uZF0sIGZ1bmN0aW9uIChvYmopIHtcbiAgICAgICAgICAgIHJldHVybiBvYmogJiYgcGFyc2VJbnQob2JqLCAxMCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbmZpZ0Zyb21BcnJheShjb25maWcpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNyZWF0ZUZyb21Db25maWcgKGNvbmZpZykge1xuICAgICAgICB2YXIgcmVzID0gbmV3IE1vbWVudChjaGVja092ZXJmbG93KHByZXBhcmVDb25maWcoY29uZmlnKSkpO1xuICAgICAgICBpZiAocmVzLl9uZXh0RGF5KSB7XG4gICAgICAgICAgICAvLyBBZGRpbmcgaXMgc21hcnQgZW5vdWdoIGFyb3VuZCBEU1RcbiAgICAgICAgICAgIHJlcy5hZGQoMSwgJ2QnKTtcbiAgICAgICAgICAgIHJlcy5fbmV4dERheSA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcHJlcGFyZUNvbmZpZyAoY29uZmlnKSB7XG4gICAgICAgIHZhciBpbnB1dCA9IGNvbmZpZy5faSxcbiAgICAgICAgICAgIGZvcm1hdCA9IGNvbmZpZy5fZjtcblxuICAgICAgICBjb25maWcuX2xvY2FsZSA9IGNvbmZpZy5fbG9jYWxlIHx8IGdldExvY2FsZShjb25maWcuX2wpO1xuXG4gICAgICAgIGlmIChpbnB1dCA9PT0gbnVsbCB8fCAoZm9ybWF0ID09PSB1bmRlZmluZWQgJiYgaW5wdXQgPT09ICcnKSkge1xuICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUludmFsaWQoe251bGxJbnB1dDogdHJ1ZX0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGVvZiBpbnB1dCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGNvbmZpZy5faSA9IGlucHV0ID0gY29uZmlnLl9sb2NhbGUucHJlcGFyc2UoaW5wdXQpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGlzTW9tZW50KGlucHV0KSkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBNb21lbnQoY2hlY2tPdmVyZmxvdyhpbnB1dCkpO1xuICAgICAgICB9IGVsc2UgaWYgKGlzRGF0ZShpbnB1dCkpIHtcbiAgICAgICAgICAgIGNvbmZpZy5fZCA9IGlucHV0O1xuICAgICAgICB9IGVsc2UgaWYgKGlzQXJyYXkoZm9ybWF0KSkge1xuICAgICAgICAgICAgY29uZmlnRnJvbVN0cmluZ0FuZEFycmF5KGNvbmZpZyk7XG4gICAgICAgIH0gZWxzZSBpZiAoZm9ybWF0KSB7XG4gICAgICAgICAgICBjb25maWdGcm9tU3RyaW5nQW5kRm9ybWF0KGNvbmZpZyk7XG4gICAgICAgIH0gIGVsc2Uge1xuICAgICAgICAgICAgY29uZmlnRnJvbUlucHV0KGNvbmZpZyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWlzVmFsaWQoY29uZmlnKSkge1xuICAgICAgICAgICAgY29uZmlnLl9kID0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjb25maWc7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY29uZmlnRnJvbUlucHV0KGNvbmZpZykge1xuICAgICAgICB2YXIgaW5wdXQgPSBjb25maWcuX2k7XG4gICAgICAgIGlmIChpc1VuZGVmaW5lZChpbnB1dCkpIHtcbiAgICAgICAgICAgIGNvbmZpZy5fZCA9IG5ldyBEYXRlKGhvb2tzLm5vdygpKTtcbiAgICAgICAgfSBlbHNlIGlmIChpc0RhdGUoaW5wdXQpKSB7XG4gICAgICAgICAgICBjb25maWcuX2QgPSBuZXcgRGF0ZShpbnB1dC52YWx1ZU9mKCkpO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBpbnB1dCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGNvbmZpZ0Zyb21TdHJpbmcoY29uZmlnKTtcbiAgICAgICAgfSBlbHNlIGlmIChpc0FycmF5KGlucHV0KSkge1xuICAgICAgICAgICAgY29uZmlnLl9hID0gbWFwKGlucHV0LnNsaWNlKDApLCBmdW5jdGlvbiAob2JqKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlSW50KG9iaiwgMTApO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjb25maWdGcm9tQXJyYXkoY29uZmlnKTtcbiAgICAgICAgfSBlbHNlIGlmIChpc09iamVjdChpbnB1dCkpIHtcbiAgICAgICAgICAgIGNvbmZpZ0Zyb21PYmplY3QoY29uZmlnKTtcbiAgICAgICAgfSBlbHNlIGlmIChpc051bWJlcihpbnB1dCkpIHtcbiAgICAgICAgICAgIC8vIGZyb20gbWlsbGlzZWNvbmRzXG4gICAgICAgICAgICBjb25maWcuX2QgPSBuZXcgRGF0ZShpbnB1dCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBob29rcy5jcmVhdGVGcm9tSW5wdXRGYWxsYmFjayhjb25maWcpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY3JlYXRlTG9jYWxPclVUQyAoaW5wdXQsIGZvcm1hdCwgbG9jYWxlLCBzdHJpY3QsIGlzVVRDKSB7XG4gICAgICAgIHZhciBjID0ge307XG5cbiAgICAgICAgaWYgKGxvY2FsZSA9PT0gdHJ1ZSB8fCBsb2NhbGUgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICBzdHJpY3QgPSBsb2NhbGU7XG4gICAgICAgICAgICBsb2NhbGUgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoKGlzT2JqZWN0KGlucHV0KSAmJiBpc09iamVjdEVtcHR5KGlucHV0KSkgfHxcbiAgICAgICAgICAgICAgICAoaXNBcnJheShpbnB1dCkgJiYgaW5wdXQubGVuZ3RoID09PSAwKSkge1xuICAgICAgICAgICAgaW5wdXQgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgLy8gb2JqZWN0IGNvbnN0cnVjdGlvbiBtdXN0IGJlIGRvbmUgdGhpcyB3YXkuXG4gICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9tb21lbnQvbW9tZW50L2lzc3Vlcy8xNDIzXG4gICAgICAgIGMuX2lzQU1vbWVudE9iamVjdCA9IHRydWU7XG4gICAgICAgIGMuX3VzZVVUQyA9IGMuX2lzVVRDID0gaXNVVEM7XG4gICAgICAgIGMuX2wgPSBsb2NhbGU7XG4gICAgICAgIGMuX2kgPSBpbnB1dDtcbiAgICAgICAgYy5fZiA9IGZvcm1hdDtcbiAgICAgICAgYy5fc3RyaWN0ID0gc3RyaWN0O1xuXG4gICAgICAgIHJldHVybiBjcmVhdGVGcm9tQ29uZmlnKGMpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNyZWF0ZUxvY2FsIChpbnB1dCwgZm9ybWF0LCBsb2NhbGUsIHN0cmljdCkge1xuICAgICAgICByZXR1cm4gY3JlYXRlTG9jYWxPclVUQyhpbnB1dCwgZm9ybWF0LCBsb2NhbGUsIHN0cmljdCwgZmFsc2UpO1xuICAgIH1cblxuICAgIHZhciBwcm90b3R5cGVNaW4gPSBkZXByZWNhdGUoXG4gICAgICAgICdtb21lbnQoKS5taW4gaXMgZGVwcmVjYXRlZCwgdXNlIG1vbWVudC5tYXggaW5zdGVhZC4gaHR0cDovL21vbWVudGpzLmNvbS9ndWlkZXMvIy93YXJuaW5ncy9taW4tbWF4LycsXG4gICAgICAgIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBvdGhlciA9IGNyZWF0ZUxvY2FsLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICBpZiAodGhpcy5pc1ZhbGlkKCkgJiYgb3RoZXIuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG90aGVyIDwgdGhpcyA/IHRoaXMgOiBvdGhlcjtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUludmFsaWQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICk7XG5cbiAgICB2YXIgcHJvdG90eXBlTWF4ID0gZGVwcmVjYXRlKFxuICAgICAgICAnbW9tZW50KCkubWF4IGlzIGRlcHJlY2F0ZWQsIHVzZSBtb21lbnQubWluIGluc3RlYWQuIGh0dHA6Ly9tb21lbnRqcy5jb20vZ3VpZGVzLyMvd2FybmluZ3MvbWluLW1heC8nLFxuICAgICAgICBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgb3RoZXIgPSBjcmVhdGVMb2NhbC5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgaWYgKHRoaXMuaXNWYWxpZCgpICYmIG90aGVyLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBvdGhlciA+IHRoaXMgPyB0aGlzIDogb3RoZXI7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBjcmVhdGVJbnZhbGlkKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICApO1xuXG4gICAgLy8gUGljayBhIG1vbWVudCBtIGZyb20gbW9tZW50cyBzbyB0aGF0IG1bZm5dKG90aGVyKSBpcyB0cnVlIGZvciBhbGxcbiAgICAvLyBvdGhlci4gVGhpcyByZWxpZXMgb24gdGhlIGZ1bmN0aW9uIGZuIHRvIGJlIHRyYW5zaXRpdmUuXG4gICAgLy9cbiAgICAvLyBtb21lbnRzIHNob3VsZCBlaXRoZXIgYmUgYW4gYXJyYXkgb2YgbW9tZW50IG9iamVjdHMgb3IgYW4gYXJyYXksIHdob3NlXG4gICAgLy8gZmlyc3QgZWxlbWVudCBpcyBhbiBhcnJheSBvZiBtb21lbnQgb2JqZWN0cy5cbiAgICBmdW5jdGlvbiBwaWNrQnkoZm4sIG1vbWVudHMpIHtcbiAgICAgICAgdmFyIHJlcywgaTtcbiAgICAgICAgaWYgKG1vbWVudHMubGVuZ3RoID09PSAxICYmIGlzQXJyYXkobW9tZW50c1swXSkpIHtcbiAgICAgICAgICAgIG1vbWVudHMgPSBtb21lbnRzWzBdO1xuICAgICAgICB9XG4gICAgICAgIGlmICghbW9tZW50cy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBjcmVhdGVMb2NhbCgpO1xuICAgICAgICB9XG4gICAgICAgIHJlcyA9IG1vbWVudHNbMF07XG4gICAgICAgIGZvciAoaSA9IDE7IGkgPCBtb21lbnRzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICBpZiAoIW1vbWVudHNbaV0uaXNWYWxpZCgpIHx8IG1vbWVudHNbaV1bZm5dKHJlcykpIHtcbiAgICAgICAgICAgICAgICByZXMgPSBtb21lbnRzW2ldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuXG4gICAgLy8gVE9ETzogVXNlIFtdLnNvcnQgaW5zdGVhZD9cbiAgICBmdW5jdGlvbiBtaW4gKCkge1xuICAgICAgICB2YXIgYXJncyA9IFtdLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAwKTtcblxuICAgICAgICByZXR1cm4gcGlja0J5KCdpc0JlZm9yZScsIGFyZ3MpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1heCAoKSB7XG4gICAgICAgIHZhciBhcmdzID0gW10uc2xpY2UuY2FsbChhcmd1bWVudHMsIDApO1xuXG4gICAgICAgIHJldHVybiBwaWNrQnkoJ2lzQWZ0ZXInLCBhcmdzKTtcbiAgICB9XG5cbiAgICB2YXIgbm93ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gRGF0ZS5ub3cgPyBEYXRlLm5vdygpIDogKyhuZXcgRGF0ZSgpKTtcbiAgICB9O1xuXG4gICAgdmFyIG9yZGVyaW5nID0gWyd5ZWFyJywgJ3F1YXJ0ZXInLCAnbW9udGgnLCAnd2VlaycsICdkYXknLCAnaG91cicsICdtaW51dGUnLCAnc2Vjb25kJywgJ21pbGxpc2Vjb25kJ107XG5cbiAgICBmdW5jdGlvbiBpc0R1cmF0aW9uVmFsaWQobSkge1xuICAgICAgICBmb3IgKHZhciBrZXkgaW4gbSkge1xuICAgICAgICAgICAgaWYgKCEoaW5kZXhPZi5jYWxsKG9yZGVyaW5nLCBrZXkpICE9PSAtMSAmJiAobVtrZXldID09IG51bGwgfHwgIWlzTmFOKG1ba2V5XSkpKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHZhciB1bml0SGFzRGVjaW1hbCA9IGZhbHNlO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG9yZGVyaW5nLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICBpZiAobVtvcmRlcmluZ1tpXV0pIHtcbiAgICAgICAgICAgICAgICBpZiAodW5pdEhhc0RlY2ltYWwpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBvbmx5IGFsbG93IG5vbi1pbnRlZ2VycyBmb3Igc21hbGxlc3QgdW5pdFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAocGFyc2VGbG9hdChtW29yZGVyaW5nW2ldXSkgIT09IHRvSW50KG1bb3JkZXJpbmdbaV1dKSkge1xuICAgICAgICAgICAgICAgICAgICB1bml0SGFzRGVjaW1hbCA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNWYWxpZCQxKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faXNWYWxpZDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVJbnZhbGlkJDEoKSB7XG4gICAgICAgIHJldHVybiBjcmVhdGVEdXJhdGlvbihOYU4pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIER1cmF0aW9uIChkdXJhdGlvbikge1xuICAgICAgICB2YXIgbm9ybWFsaXplZElucHV0ID0gbm9ybWFsaXplT2JqZWN0VW5pdHMoZHVyYXRpb24pLFxuICAgICAgICAgICAgeWVhcnMgPSBub3JtYWxpemVkSW5wdXQueWVhciB8fCAwLFxuICAgICAgICAgICAgcXVhcnRlcnMgPSBub3JtYWxpemVkSW5wdXQucXVhcnRlciB8fCAwLFxuICAgICAgICAgICAgbW9udGhzID0gbm9ybWFsaXplZElucHV0Lm1vbnRoIHx8IDAsXG4gICAgICAgICAgICB3ZWVrcyA9IG5vcm1hbGl6ZWRJbnB1dC53ZWVrIHx8IDAsXG4gICAgICAgICAgICBkYXlzID0gbm9ybWFsaXplZElucHV0LmRheSB8fCAwLFxuICAgICAgICAgICAgaG91cnMgPSBub3JtYWxpemVkSW5wdXQuaG91ciB8fCAwLFxuICAgICAgICAgICAgbWludXRlcyA9IG5vcm1hbGl6ZWRJbnB1dC5taW51dGUgfHwgMCxcbiAgICAgICAgICAgIHNlY29uZHMgPSBub3JtYWxpemVkSW5wdXQuc2Vjb25kIHx8IDAsXG4gICAgICAgICAgICBtaWxsaXNlY29uZHMgPSBub3JtYWxpemVkSW5wdXQubWlsbGlzZWNvbmQgfHwgMDtcblxuICAgICAgICB0aGlzLl9pc1ZhbGlkID0gaXNEdXJhdGlvblZhbGlkKG5vcm1hbGl6ZWRJbnB1dCk7XG5cbiAgICAgICAgLy8gcmVwcmVzZW50YXRpb24gZm9yIGRhdGVBZGRSZW1vdmVcbiAgICAgICAgdGhpcy5fbWlsbGlzZWNvbmRzID0gK21pbGxpc2Vjb25kcyArXG4gICAgICAgICAgICBzZWNvbmRzICogMWUzICsgLy8gMTAwMFxuICAgICAgICAgICAgbWludXRlcyAqIDZlNCArIC8vIDEwMDAgKiA2MFxuICAgICAgICAgICAgaG91cnMgKiAxMDAwICogNjAgKiA2MDsgLy91c2luZyAxMDAwICogNjAgKiA2MCBpbnN0ZWFkIG9mIDM2ZTUgdG8gYXZvaWQgZmxvYXRpbmcgcG9pbnQgcm91bmRpbmcgZXJyb3JzIGh0dHBzOi8vZ2l0aHViLmNvbS9tb21lbnQvbW9tZW50L2lzc3Vlcy8yOTc4XG4gICAgICAgIC8vIEJlY2F1c2Ugb2YgZGF0ZUFkZFJlbW92ZSB0cmVhdHMgMjQgaG91cnMgYXMgZGlmZmVyZW50IGZyb20gYVxuICAgICAgICAvLyBkYXkgd2hlbiB3b3JraW5nIGFyb3VuZCBEU1QsIHdlIG5lZWQgdG8gc3RvcmUgdGhlbSBzZXBhcmF0ZWx5XG4gICAgICAgIHRoaXMuX2RheXMgPSArZGF5cyArXG4gICAgICAgICAgICB3ZWVrcyAqIDc7XG4gICAgICAgIC8vIEl0IGlzIGltcG9zc2libGUgdG8gdHJhbnNsYXRlIG1vbnRocyBpbnRvIGRheXMgd2l0aG91dCBrbm93aW5nXG4gICAgICAgIC8vIHdoaWNoIG1vbnRocyB5b3UgYXJlIGFyZSB0YWxraW5nIGFib3V0LCBzbyB3ZSBoYXZlIHRvIHN0b3JlXG4gICAgICAgIC8vIGl0IHNlcGFyYXRlbHkuXG4gICAgICAgIHRoaXMuX21vbnRocyA9ICttb250aHMgK1xuICAgICAgICAgICAgcXVhcnRlcnMgKiAzICtcbiAgICAgICAgICAgIHllYXJzICogMTI7XG5cbiAgICAgICAgdGhpcy5fZGF0YSA9IHt9O1xuXG4gICAgICAgIHRoaXMuX2xvY2FsZSA9IGdldExvY2FsZSgpO1xuXG4gICAgICAgIHRoaXMuX2J1YmJsZSgpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzRHVyYXRpb24gKG9iaikge1xuICAgICAgICByZXR1cm4gb2JqIGluc3RhbmNlb2YgRHVyYXRpb247XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYWJzUm91bmQgKG51bWJlcikge1xuICAgICAgICBpZiAobnVtYmVyIDwgMCkge1xuICAgICAgICAgICAgcmV0dXJuIE1hdGgucm91bmQoLTEgKiBudW1iZXIpICogLTE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gTWF0aC5yb3VuZChudW1iZXIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gRk9STUFUVElOR1xuXG4gICAgZnVuY3Rpb24gb2Zmc2V0ICh0b2tlbiwgc2VwYXJhdG9yKSB7XG4gICAgICAgIGFkZEZvcm1hdFRva2VuKHRva2VuLCAwLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgb2Zmc2V0ID0gdGhpcy51dGNPZmZzZXQoKTtcbiAgICAgICAgICAgIHZhciBzaWduID0gJysnO1xuICAgICAgICAgICAgaWYgKG9mZnNldCA8IDApIHtcbiAgICAgICAgICAgICAgICBvZmZzZXQgPSAtb2Zmc2V0O1xuICAgICAgICAgICAgICAgIHNpZ24gPSAnLSc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gc2lnbiArIHplcm9GaWxsKH5+KG9mZnNldCAvIDYwKSwgMikgKyBzZXBhcmF0b3IgKyB6ZXJvRmlsbCh+fihvZmZzZXQpICUgNjAsIDIpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBvZmZzZXQoJ1onLCAnOicpO1xuICAgIG9mZnNldCgnWlonLCAnJyk7XG5cbiAgICAvLyBQQVJTSU5HXG5cbiAgICBhZGRSZWdleFRva2VuKCdaJywgIG1hdGNoU2hvcnRPZmZzZXQpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ1paJywgbWF0Y2hTaG9ydE9mZnNldCk7XG4gICAgYWRkUGFyc2VUb2tlbihbJ1onLCAnWlonXSwgZnVuY3Rpb24gKGlucHV0LCBhcnJheSwgY29uZmlnKSB7XG4gICAgICAgIGNvbmZpZy5fdXNlVVRDID0gdHJ1ZTtcbiAgICAgICAgY29uZmlnLl90em0gPSBvZmZzZXRGcm9tU3RyaW5nKG1hdGNoU2hvcnRPZmZzZXQsIGlucHV0KTtcbiAgICB9KTtcblxuICAgIC8vIEhFTFBFUlNcblxuICAgIC8vIHRpbWV6b25lIGNodW5rZXJcbiAgICAvLyAnKzEwOjAwJyA+IFsnMTAnLCAgJzAwJ11cbiAgICAvLyAnLTE1MzAnICA+IFsnLTE1JywgJzMwJ11cbiAgICB2YXIgY2h1bmtPZmZzZXQgPSAvKFtcXCtcXC1dfFxcZFxcZCkvZ2k7XG5cbiAgICBmdW5jdGlvbiBvZmZzZXRGcm9tU3RyaW5nKG1hdGNoZXIsIHN0cmluZykge1xuICAgICAgICB2YXIgbWF0Y2hlcyA9IChzdHJpbmcgfHwgJycpLm1hdGNoKG1hdGNoZXIpO1xuXG4gICAgICAgIGlmIChtYXRjaGVzID09PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBjaHVuayAgID0gbWF0Y2hlc1ttYXRjaGVzLmxlbmd0aCAtIDFdIHx8IFtdO1xuICAgICAgICB2YXIgcGFydHMgICA9IChjaHVuayArICcnKS5tYXRjaChjaHVua09mZnNldCkgfHwgWyctJywgMCwgMF07XG4gICAgICAgIHZhciBtaW51dGVzID0gKyhwYXJ0c1sxXSAqIDYwKSArIHRvSW50KHBhcnRzWzJdKTtcblxuICAgICAgICByZXR1cm4gbWludXRlcyA9PT0gMCA/XG4gICAgICAgICAgMCA6XG4gICAgICAgICAgcGFydHNbMF0gPT09ICcrJyA/IG1pbnV0ZXMgOiAtbWludXRlcztcbiAgICB9XG5cbiAgICAvLyBSZXR1cm4gYSBtb21lbnQgZnJvbSBpbnB1dCwgdGhhdCBpcyBsb2NhbC91dGMvem9uZSBlcXVpdmFsZW50IHRvIG1vZGVsLlxuICAgIGZ1bmN0aW9uIGNsb25lV2l0aE9mZnNldChpbnB1dCwgbW9kZWwpIHtcbiAgICAgICAgdmFyIHJlcywgZGlmZjtcbiAgICAgICAgaWYgKG1vZGVsLl9pc1VUQykge1xuICAgICAgICAgICAgcmVzID0gbW9kZWwuY2xvbmUoKTtcbiAgICAgICAgICAgIGRpZmYgPSAoaXNNb21lbnQoaW5wdXQpIHx8IGlzRGF0ZShpbnB1dCkgPyBpbnB1dC52YWx1ZU9mKCkgOiBjcmVhdGVMb2NhbChpbnB1dCkudmFsdWVPZigpKSAtIHJlcy52YWx1ZU9mKCk7XG4gICAgICAgICAgICAvLyBVc2UgbG93LWxldmVsIGFwaSwgYmVjYXVzZSB0aGlzIGZuIGlzIGxvdy1sZXZlbCBhcGkuXG4gICAgICAgICAgICByZXMuX2Quc2V0VGltZShyZXMuX2QudmFsdWVPZigpICsgZGlmZik7XG4gICAgICAgICAgICBob29rcy51cGRhdGVPZmZzZXQocmVzLCBmYWxzZSk7XG4gICAgICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUxvY2FsKGlucHV0KS5sb2NhbCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0RGF0ZU9mZnNldCAobSkge1xuICAgICAgICAvLyBPbiBGaXJlZm94LjI0IERhdGUjZ2V0VGltZXpvbmVPZmZzZXQgcmV0dXJucyBhIGZsb2F0aW5nIHBvaW50LlxuICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vbW9tZW50L21vbWVudC9wdWxsLzE4NzFcbiAgICAgICAgcmV0dXJuIC1NYXRoLnJvdW5kKG0uX2QuZ2V0VGltZXpvbmVPZmZzZXQoKSAvIDE1KSAqIDE1O1xuICAgIH1cblxuICAgIC8vIEhPT0tTXG5cbiAgICAvLyBUaGlzIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIHdoZW5ldmVyIGEgbW9tZW50IGlzIG11dGF0ZWQuXG4gICAgLy8gSXQgaXMgaW50ZW5kZWQgdG8ga2VlcCB0aGUgb2Zmc2V0IGluIHN5bmMgd2l0aCB0aGUgdGltZXpvbmUuXG4gICAgaG9va3MudXBkYXRlT2Zmc2V0ID0gZnVuY3Rpb24gKCkge307XG5cbiAgICAvLyBNT01FTlRTXG5cbiAgICAvLyBrZWVwTG9jYWxUaW1lID0gdHJ1ZSBtZWFucyBvbmx5IGNoYW5nZSB0aGUgdGltZXpvbmUsIHdpdGhvdXRcbiAgICAvLyBhZmZlY3RpbmcgdGhlIGxvY2FsIGhvdXIuIFNvIDU6MzE6MjYgKzAzMDAgLS1bdXRjT2Zmc2V0KDIsIHRydWUpXS0tPlxuICAgIC8vIDU6MzE6MjYgKzAyMDAgSXQgaXMgcG9zc2libGUgdGhhdCA1OjMxOjI2IGRvZXNuJ3QgZXhpc3Qgd2l0aCBvZmZzZXRcbiAgICAvLyArMDIwMCwgc28gd2UgYWRqdXN0IHRoZSB0aW1lIGFzIG5lZWRlZCwgdG8gYmUgdmFsaWQuXG4gICAgLy9cbiAgICAvLyBLZWVwaW5nIHRoZSB0aW1lIGFjdHVhbGx5IGFkZHMvc3VidHJhY3RzIChvbmUgaG91cilcbiAgICAvLyBmcm9tIHRoZSBhY3R1YWwgcmVwcmVzZW50ZWQgdGltZS4gVGhhdCBpcyB3aHkgd2UgY2FsbCB1cGRhdGVPZmZzZXRcbiAgICAvLyBhIHNlY29uZCB0aW1lLiBJbiBjYXNlIGl0IHdhbnRzIHVzIHRvIGNoYW5nZSB0aGUgb2Zmc2V0IGFnYWluXG4gICAgLy8gX2NoYW5nZUluUHJvZ3Jlc3MgPT0gdHJ1ZSBjYXNlLCB0aGVuIHdlIGhhdmUgdG8gYWRqdXN0LCBiZWNhdXNlXG4gICAgLy8gdGhlcmUgaXMgbm8gc3VjaCB0aW1lIGluIHRoZSBnaXZlbiB0aW1lem9uZS5cbiAgICBmdW5jdGlvbiBnZXRTZXRPZmZzZXQgKGlucHV0LCBrZWVwTG9jYWxUaW1lLCBrZWVwTWludXRlcykge1xuICAgICAgICB2YXIgb2Zmc2V0ID0gdGhpcy5fb2Zmc2V0IHx8IDAsXG4gICAgICAgICAgICBsb2NhbEFkanVzdDtcbiAgICAgICAgaWYgKCF0aGlzLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuIGlucHV0ICE9IG51bGwgPyB0aGlzIDogTmFOO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpbnB1dCAhPSBudWxsKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGlucHV0ID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIGlucHV0ID0gb2Zmc2V0RnJvbVN0cmluZyhtYXRjaFNob3J0T2Zmc2V0LCBpbnB1dCk7XG4gICAgICAgICAgICAgICAgaWYgKGlucHV0ID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoTWF0aC5hYnMoaW5wdXQpIDwgMTYgJiYgIWtlZXBNaW51dGVzKSB7XG4gICAgICAgICAgICAgICAgaW5wdXQgPSBpbnB1dCAqIDYwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCF0aGlzLl9pc1VUQyAmJiBrZWVwTG9jYWxUaW1lKSB7XG4gICAgICAgICAgICAgICAgbG9jYWxBZGp1c3QgPSBnZXREYXRlT2Zmc2V0KHRoaXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5fb2Zmc2V0ID0gaW5wdXQ7XG4gICAgICAgICAgICB0aGlzLl9pc1VUQyA9IHRydWU7XG4gICAgICAgICAgICBpZiAobG9jYWxBZGp1c3QgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRoaXMuYWRkKGxvY2FsQWRqdXN0LCAnbScpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG9mZnNldCAhPT0gaW5wdXQpIHtcbiAgICAgICAgICAgICAgICBpZiAoIWtlZXBMb2NhbFRpbWUgfHwgdGhpcy5fY2hhbmdlSW5Qcm9ncmVzcykge1xuICAgICAgICAgICAgICAgICAgICBhZGRTdWJ0cmFjdCh0aGlzLCBjcmVhdGVEdXJhdGlvbihpbnB1dCAtIG9mZnNldCwgJ20nKSwgMSwgZmFsc2UpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIXRoaXMuX2NoYW5nZUluUHJvZ3Jlc3MpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbmdlSW5Qcm9ncmVzcyA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGhvb2tzLnVwZGF0ZU9mZnNldCh0aGlzLCB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbmdlSW5Qcm9ncmVzcyA9IG51bGw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5faXNVVEMgPyBvZmZzZXQgOiBnZXREYXRlT2Zmc2V0KHRoaXMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0U2V0Wm9uZSAoaW5wdXQsIGtlZXBMb2NhbFRpbWUpIHtcbiAgICAgICAgaWYgKGlucHV0ICE9IG51bGwpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgaW5wdXQgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgaW5wdXQgPSAtaW5wdXQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMudXRjT2Zmc2V0KGlucHV0LCBrZWVwTG9jYWxUaW1lKTtcblxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gLXRoaXMudXRjT2Zmc2V0KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzZXRPZmZzZXRUb1VUQyAoa2VlcExvY2FsVGltZSkge1xuICAgICAgICByZXR1cm4gdGhpcy51dGNPZmZzZXQoMCwga2VlcExvY2FsVGltZSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc2V0T2Zmc2V0VG9Mb2NhbCAoa2VlcExvY2FsVGltZSkge1xuICAgICAgICBpZiAodGhpcy5faXNVVEMpIHtcbiAgICAgICAgICAgIHRoaXMudXRjT2Zmc2V0KDAsIGtlZXBMb2NhbFRpbWUpO1xuICAgICAgICAgICAgdGhpcy5faXNVVEMgPSBmYWxzZTtcblxuICAgICAgICAgICAgaWYgKGtlZXBMb2NhbFRpbWUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnN1YnRyYWN0KGdldERhdGVPZmZzZXQodGhpcyksICdtJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc2V0T2Zmc2V0VG9QYXJzZWRPZmZzZXQgKCkge1xuICAgICAgICBpZiAodGhpcy5fdHptICE9IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMudXRjT2Zmc2V0KHRoaXMuX3R6bSwgZmFsc2UsIHRydWUpO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB0aGlzLl9pID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgdmFyIHRab25lID0gb2Zmc2V0RnJvbVN0cmluZyhtYXRjaE9mZnNldCwgdGhpcy5faSk7XG4gICAgICAgICAgICBpZiAodFpvbmUgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRoaXMudXRjT2Zmc2V0KHRab25lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMudXRjT2Zmc2V0KDAsIHRydWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGhhc0FsaWduZWRIb3VyT2Zmc2V0IChpbnB1dCkge1xuICAgICAgICBpZiAoIXRoaXMuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaW5wdXQgPSBpbnB1dCA/IGNyZWF0ZUxvY2FsKGlucHV0KS51dGNPZmZzZXQoKSA6IDA7XG5cbiAgICAgICAgcmV0dXJuICh0aGlzLnV0Y09mZnNldCgpIC0gaW5wdXQpICUgNjAgPT09IDA7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNEYXlsaWdodFNhdmluZ1RpbWUgKCkge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgdGhpcy51dGNPZmZzZXQoKSA+IHRoaXMuY2xvbmUoKS5tb250aCgwKS51dGNPZmZzZXQoKSB8fFxuICAgICAgICAgICAgdGhpcy51dGNPZmZzZXQoKSA+IHRoaXMuY2xvbmUoKS5tb250aCg1KS51dGNPZmZzZXQoKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzRGF5bGlnaHRTYXZpbmdUaW1lU2hpZnRlZCAoKSB7XG4gICAgICAgIGlmICghaXNVbmRlZmluZWQodGhpcy5faXNEU1RTaGlmdGVkKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2lzRFNUU2hpZnRlZDtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBjID0ge307XG5cbiAgICAgICAgY29weUNvbmZpZyhjLCB0aGlzKTtcbiAgICAgICAgYyA9IHByZXBhcmVDb25maWcoYyk7XG5cbiAgICAgICAgaWYgKGMuX2EpIHtcbiAgICAgICAgICAgIHZhciBvdGhlciA9IGMuX2lzVVRDID8gY3JlYXRlVVRDKGMuX2EpIDogY3JlYXRlTG9jYWwoYy5fYSk7XG4gICAgICAgICAgICB0aGlzLl9pc0RTVFNoaWZ0ZWQgPSB0aGlzLmlzVmFsaWQoKSAmJlxuICAgICAgICAgICAgICAgIGNvbXBhcmVBcnJheXMoYy5fYSwgb3RoZXIudG9BcnJheSgpKSA+IDA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9pc0RTVFNoaWZ0ZWQgPSBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLl9pc0RTVFNoaWZ0ZWQ7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNMb2NhbCAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzVmFsaWQoKSA/ICF0aGlzLl9pc1VUQyA6IGZhbHNlO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzVXRjT2Zmc2V0ICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNWYWxpZCgpID8gdGhpcy5faXNVVEMgOiBmYWxzZTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc1V0YyAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzVmFsaWQoKSA/IHRoaXMuX2lzVVRDICYmIHRoaXMuX29mZnNldCA9PT0gMCA6IGZhbHNlO1xuICAgIH1cblxuICAgIC8vIEFTUC5ORVQganNvbiBkYXRlIGZvcm1hdCByZWdleFxuICAgIHZhciBhc3BOZXRSZWdleCA9IC9eKFxcLXxcXCspPyg/OihcXGQqKVsuIF0pPyhcXGQrKVxcOihcXGQrKSg/OlxcOihcXGQrKShcXC5cXGQqKT8pPyQvO1xuXG4gICAgLy8gZnJvbSBodHRwOi8vZG9jcy5jbG9zdXJlLWxpYnJhcnkuZ29vZ2xlY29kZS5jb20vZ2l0L2Nsb3N1cmVfZ29vZ19kYXRlX2RhdGUuanMuc291cmNlLmh0bWxcbiAgICAvLyBzb21ld2hhdCBtb3JlIGluIGxpbmUgd2l0aCA0LjQuMy4yIDIwMDQgc3BlYywgYnV0IGFsbG93cyBkZWNpbWFsIGFueXdoZXJlXG4gICAgLy8gYW5kIGZ1cnRoZXIgbW9kaWZpZWQgdG8gYWxsb3cgZm9yIHN0cmluZ3MgY29udGFpbmluZyBib3RoIHdlZWsgYW5kIGRheVxuICAgIHZhciBpc29SZWdleCA9IC9eKC18XFwrKT9QKD86KFstK10/WzAtOSwuXSopWSk/KD86KFstK10/WzAtOSwuXSopTSk/KD86KFstK10/WzAtOSwuXSopVyk/KD86KFstK10/WzAtOSwuXSopRCk/KD86VCg/OihbLStdP1swLTksLl0qKUgpPyg/OihbLStdP1swLTksLl0qKU0pPyg/OihbLStdP1swLTksLl0qKVMpPyk/JC87XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVEdXJhdGlvbiAoaW5wdXQsIGtleSkge1xuICAgICAgICB2YXIgZHVyYXRpb24gPSBpbnB1dCxcbiAgICAgICAgICAgIC8vIG1hdGNoaW5nIGFnYWluc3QgcmVnZXhwIGlzIGV4cGVuc2l2ZSwgZG8gaXQgb24gZGVtYW5kXG4gICAgICAgICAgICBtYXRjaCA9IG51bGwsXG4gICAgICAgICAgICBzaWduLFxuICAgICAgICAgICAgcmV0LFxuICAgICAgICAgICAgZGlmZlJlcztcblxuICAgICAgICBpZiAoaXNEdXJhdGlvbihpbnB1dCkpIHtcbiAgICAgICAgICAgIGR1cmF0aW9uID0ge1xuICAgICAgICAgICAgICAgIG1zIDogaW5wdXQuX21pbGxpc2Vjb25kcyxcbiAgICAgICAgICAgICAgICBkICA6IGlucHV0Ll9kYXlzLFxuICAgICAgICAgICAgICAgIE0gIDogaW5wdXQuX21vbnRoc1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIGlmIChpc051bWJlcihpbnB1dCkpIHtcbiAgICAgICAgICAgIGR1cmF0aW9uID0ge307XG4gICAgICAgICAgICBpZiAoa2V5KSB7XG4gICAgICAgICAgICAgICAgZHVyYXRpb25ba2V5XSA9IGlucHV0O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBkdXJhdGlvbi5taWxsaXNlY29uZHMgPSBpbnB1dDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmICghIShtYXRjaCA9IGFzcE5ldFJlZ2V4LmV4ZWMoaW5wdXQpKSkge1xuICAgICAgICAgICAgc2lnbiA9IChtYXRjaFsxXSA9PT0gJy0nKSA/IC0xIDogMTtcbiAgICAgICAgICAgIGR1cmF0aW9uID0ge1xuICAgICAgICAgICAgICAgIHkgIDogMCxcbiAgICAgICAgICAgICAgICBkICA6IHRvSW50KG1hdGNoW0RBVEVdKSAgICAgICAgICAgICAgICAgICAgICAgICAqIHNpZ24sXG4gICAgICAgICAgICAgICAgaCAgOiB0b0ludChtYXRjaFtIT1VSXSkgICAgICAgICAgICAgICAgICAgICAgICAgKiBzaWduLFxuICAgICAgICAgICAgICAgIG0gIDogdG9JbnQobWF0Y2hbTUlOVVRFXSkgICAgICAgICAgICAgICAgICAgICAgICogc2lnbixcbiAgICAgICAgICAgICAgICBzICA6IHRvSW50KG1hdGNoW1NFQ09ORF0pICAgICAgICAgICAgICAgICAgICAgICAqIHNpZ24sXG4gICAgICAgICAgICAgICAgbXMgOiB0b0ludChhYnNSb3VuZChtYXRjaFtNSUxMSVNFQ09ORF0gKiAxMDAwKSkgKiBzaWduIC8vIHRoZSBtaWxsaXNlY29uZCBkZWNpbWFsIHBvaW50IGlzIGluY2x1ZGVkIGluIHRoZSBtYXRjaFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIGlmICghIShtYXRjaCA9IGlzb1JlZ2V4LmV4ZWMoaW5wdXQpKSkge1xuICAgICAgICAgICAgc2lnbiA9IChtYXRjaFsxXSA9PT0gJy0nKSA/IC0xIDogKG1hdGNoWzFdID09PSAnKycpID8gMSA6IDE7XG4gICAgICAgICAgICBkdXJhdGlvbiA9IHtcbiAgICAgICAgICAgICAgICB5IDogcGFyc2VJc28obWF0Y2hbMl0sIHNpZ24pLFxuICAgICAgICAgICAgICAgIE0gOiBwYXJzZUlzbyhtYXRjaFszXSwgc2lnbiksXG4gICAgICAgICAgICAgICAgdyA6IHBhcnNlSXNvKG1hdGNoWzRdLCBzaWduKSxcbiAgICAgICAgICAgICAgICBkIDogcGFyc2VJc28obWF0Y2hbNV0sIHNpZ24pLFxuICAgICAgICAgICAgICAgIGggOiBwYXJzZUlzbyhtYXRjaFs2XSwgc2lnbiksXG4gICAgICAgICAgICAgICAgbSA6IHBhcnNlSXNvKG1hdGNoWzddLCBzaWduKSxcbiAgICAgICAgICAgICAgICBzIDogcGFyc2VJc28obWF0Y2hbOF0sIHNpZ24pXG4gICAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2UgaWYgKGR1cmF0aW9uID09IG51bGwpIHsvLyBjaGVja3MgZm9yIG51bGwgb3IgdW5kZWZpbmVkXG4gICAgICAgICAgICBkdXJhdGlvbiA9IHt9O1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBkdXJhdGlvbiA9PT0gJ29iamVjdCcgJiYgKCdmcm9tJyBpbiBkdXJhdGlvbiB8fCAndG8nIGluIGR1cmF0aW9uKSkge1xuICAgICAgICAgICAgZGlmZlJlcyA9IG1vbWVudHNEaWZmZXJlbmNlKGNyZWF0ZUxvY2FsKGR1cmF0aW9uLmZyb20pLCBjcmVhdGVMb2NhbChkdXJhdGlvbi50bykpO1xuXG4gICAgICAgICAgICBkdXJhdGlvbiA9IHt9O1xuICAgICAgICAgICAgZHVyYXRpb24ubXMgPSBkaWZmUmVzLm1pbGxpc2Vjb25kcztcbiAgICAgICAgICAgIGR1cmF0aW9uLk0gPSBkaWZmUmVzLm1vbnRocztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldCA9IG5ldyBEdXJhdGlvbihkdXJhdGlvbik7XG5cbiAgICAgICAgaWYgKGlzRHVyYXRpb24oaW5wdXQpICYmIGhhc093blByb3AoaW5wdXQsICdfbG9jYWxlJykpIHtcbiAgICAgICAgICAgIHJldC5fbG9jYWxlID0gaW5wdXQuX2xvY2FsZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXQ7XG4gICAgfVxuXG4gICAgY3JlYXRlRHVyYXRpb24uZm4gPSBEdXJhdGlvbi5wcm90b3R5cGU7XG4gICAgY3JlYXRlRHVyYXRpb24uaW52YWxpZCA9IGNyZWF0ZUludmFsaWQkMTtcblxuICAgIGZ1bmN0aW9uIHBhcnNlSXNvIChpbnAsIHNpZ24pIHtcbiAgICAgICAgLy8gV2UnZCBub3JtYWxseSB1c2Ugfn5pbnAgZm9yIHRoaXMsIGJ1dCB1bmZvcnR1bmF0ZWx5IGl0IGFsc29cbiAgICAgICAgLy8gY29udmVydHMgZmxvYXRzIHRvIGludHMuXG4gICAgICAgIC8vIGlucCBtYXkgYmUgdW5kZWZpbmVkLCBzbyBjYXJlZnVsIGNhbGxpbmcgcmVwbGFjZSBvbiBpdC5cbiAgICAgICAgdmFyIHJlcyA9IGlucCAmJiBwYXJzZUZsb2F0KGlucC5yZXBsYWNlKCcsJywgJy4nKSk7XG4gICAgICAgIC8vIGFwcGx5IHNpZ24gd2hpbGUgd2UncmUgYXQgaXRcbiAgICAgICAgcmV0dXJuIChpc05hTihyZXMpID8gMCA6IHJlcykgKiBzaWduO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHBvc2l0aXZlTW9tZW50c0RpZmZlcmVuY2UoYmFzZSwgb3RoZXIpIHtcbiAgICAgICAgdmFyIHJlcyA9IHttaWxsaXNlY29uZHM6IDAsIG1vbnRoczogMH07XG5cbiAgICAgICAgcmVzLm1vbnRocyA9IG90aGVyLm1vbnRoKCkgLSBiYXNlLm1vbnRoKCkgK1xuICAgICAgICAgICAgKG90aGVyLnllYXIoKSAtIGJhc2UueWVhcigpKSAqIDEyO1xuICAgICAgICBpZiAoYmFzZS5jbG9uZSgpLmFkZChyZXMubW9udGhzLCAnTScpLmlzQWZ0ZXIob3RoZXIpKSB7XG4gICAgICAgICAgICAtLXJlcy5tb250aHM7XG4gICAgICAgIH1cblxuICAgICAgICByZXMubWlsbGlzZWNvbmRzID0gK290aGVyIC0gKyhiYXNlLmNsb25lKCkuYWRkKHJlcy5tb250aHMsICdNJykpO1xuXG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbW9tZW50c0RpZmZlcmVuY2UoYmFzZSwgb3RoZXIpIHtcbiAgICAgICAgdmFyIHJlcztcbiAgICAgICAgaWYgKCEoYmFzZS5pc1ZhbGlkKCkgJiYgb3RoZXIuaXNWYWxpZCgpKSkge1xuICAgICAgICAgICAgcmV0dXJuIHttaWxsaXNlY29uZHM6IDAsIG1vbnRoczogMH07XG4gICAgICAgIH1cblxuICAgICAgICBvdGhlciA9IGNsb25lV2l0aE9mZnNldChvdGhlciwgYmFzZSk7XG4gICAgICAgIGlmIChiYXNlLmlzQmVmb3JlKG90aGVyKSkge1xuICAgICAgICAgICAgcmVzID0gcG9zaXRpdmVNb21lbnRzRGlmZmVyZW5jZShiYXNlLCBvdGhlcik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXMgPSBwb3NpdGl2ZU1vbWVudHNEaWZmZXJlbmNlKG90aGVyLCBiYXNlKTtcbiAgICAgICAgICAgIHJlcy5taWxsaXNlY29uZHMgPSAtcmVzLm1pbGxpc2Vjb25kcztcbiAgICAgICAgICAgIHJlcy5tb250aHMgPSAtcmVzLm1vbnRocztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuXG4gICAgLy8gVE9ETzogcmVtb3ZlICduYW1lJyBhcmcgYWZ0ZXIgZGVwcmVjYXRpb24gaXMgcmVtb3ZlZFxuICAgIGZ1bmN0aW9uIGNyZWF0ZUFkZGVyKGRpcmVjdGlvbiwgbmFtZSkge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKHZhbCwgcGVyaW9kKSB7XG4gICAgICAgICAgICB2YXIgZHVyLCB0bXA7XG4gICAgICAgICAgICAvL2ludmVydCB0aGUgYXJndW1lbnRzLCBidXQgY29tcGxhaW4gYWJvdXQgaXRcbiAgICAgICAgICAgIGlmIChwZXJpb2QgIT09IG51bGwgJiYgIWlzTmFOKCtwZXJpb2QpKSB7XG4gICAgICAgICAgICAgICAgZGVwcmVjYXRlU2ltcGxlKG5hbWUsICdtb21lbnQoKS4nICsgbmFtZSAgKyAnKHBlcmlvZCwgbnVtYmVyKSBpcyBkZXByZWNhdGVkLiBQbGVhc2UgdXNlIG1vbWVudCgpLicgKyBuYW1lICsgJyhudW1iZXIsIHBlcmlvZCkuICcgK1xuICAgICAgICAgICAgICAgICdTZWUgaHR0cDovL21vbWVudGpzLmNvbS9ndWlkZXMvIy93YXJuaW5ncy9hZGQtaW52ZXJ0ZWQtcGFyYW0vIGZvciBtb3JlIGluZm8uJyk7XG4gICAgICAgICAgICAgICAgdG1wID0gdmFsOyB2YWwgPSBwZXJpb2Q7IHBlcmlvZCA9IHRtcDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFsID0gdHlwZW9mIHZhbCA9PT0gJ3N0cmluZycgPyArdmFsIDogdmFsO1xuICAgICAgICAgICAgZHVyID0gY3JlYXRlRHVyYXRpb24odmFsLCBwZXJpb2QpO1xuICAgICAgICAgICAgYWRkU3VidHJhY3QodGhpcywgZHVyLCBkaXJlY3Rpb24pO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYWRkU3VidHJhY3QgKG1vbSwgZHVyYXRpb24sIGlzQWRkaW5nLCB1cGRhdGVPZmZzZXQpIHtcbiAgICAgICAgdmFyIG1pbGxpc2Vjb25kcyA9IGR1cmF0aW9uLl9taWxsaXNlY29uZHMsXG4gICAgICAgICAgICBkYXlzID0gYWJzUm91bmQoZHVyYXRpb24uX2RheXMpLFxuICAgICAgICAgICAgbW9udGhzID0gYWJzUm91bmQoZHVyYXRpb24uX21vbnRocyk7XG5cbiAgICAgICAgaWYgKCFtb20uaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICAvLyBObyBvcFxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdXBkYXRlT2Zmc2V0ID0gdXBkYXRlT2Zmc2V0ID09IG51bGwgPyB0cnVlIDogdXBkYXRlT2Zmc2V0O1xuXG4gICAgICAgIGlmIChtb250aHMpIHtcbiAgICAgICAgICAgIHNldE1vbnRoKG1vbSwgZ2V0KG1vbSwgJ01vbnRoJykgKyBtb250aHMgKiBpc0FkZGluZyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGRheXMpIHtcbiAgICAgICAgICAgIHNldCQxKG1vbSwgJ0RhdGUnLCBnZXQobW9tLCAnRGF0ZScpICsgZGF5cyAqIGlzQWRkaW5nKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobWlsbGlzZWNvbmRzKSB7XG4gICAgICAgICAgICBtb20uX2Quc2V0VGltZShtb20uX2QudmFsdWVPZigpICsgbWlsbGlzZWNvbmRzICogaXNBZGRpbmcpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh1cGRhdGVPZmZzZXQpIHtcbiAgICAgICAgICAgIGhvb2tzLnVwZGF0ZU9mZnNldChtb20sIGRheXMgfHwgbW9udGhzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHZhciBhZGQgICAgICA9IGNyZWF0ZUFkZGVyKDEsICdhZGQnKTtcbiAgICB2YXIgc3VidHJhY3QgPSBjcmVhdGVBZGRlcigtMSwgJ3N1YnRyYWN0Jyk7XG5cbiAgICBmdW5jdGlvbiBnZXRDYWxlbmRhckZvcm1hdChteU1vbWVudCwgbm93KSB7XG4gICAgICAgIHZhciBkaWZmID0gbXlNb21lbnQuZGlmZihub3csICdkYXlzJywgdHJ1ZSk7XG4gICAgICAgIHJldHVybiBkaWZmIDwgLTYgPyAnc2FtZUVsc2UnIDpcbiAgICAgICAgICAgICAgICBkaWZmIDwgLTEgPyAnbGFzdFdlZWsnIDpcbiAgICAgICAgICAgICAgICBkaWZmIDwgMCA/ICdsYXN0RGF5JyA6XG4gICAgICAgICAgICAgICAgZGlmZiA8IDEgPyAnc2FtZURheScgOlxuICAgICAgICAgICAgICAgIGRpZmYgPCAyID8gJ25leHREYXknIDpcbiAgICAgICAgICAgICAgICBkaWZmIDwgNyA/ICduZXh0V2VlaycgOiAnc2FtZUVsc2UnO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNhbGVuZGFyJDEgKHRpbWUsIGZvcm1hdHMpIHtcbiAgICAgICAgLy8gV2Ugd2FudCB0byBjb21wYXJlIHRoZSBzdGFydCBvZiB0b2RheSwgdnMgdGhpcy5cbiAgICAgICAgLy8gR2V0dGluZyBzdGFydC1vZi10b2RheSBkZXBlbmRzIG9uIHdoZXRoZXIgd2UncmUgbG9jYWwvdXRjL29mZnNldCBvciBub3QuXG4gICAgICAgIHZhciBub3cgPSB0aW1lIHx8IGNyZWF0ZUxvY2FsKCksXG4gICAgICAgICAgICBzb2QgPSBjbG9uZVdpdGhPZmZzZXQobm93LCB0aGlzKS5zdGFydE9mKCdkYXknKSxcbiAgICAgICAgICAgIGZvcm1hdCA9IGhvb2tzLmNhbGVuZGFyRm9ybWF0KHRoaXMsIHNvZCkgfHwgJ3NhbWVFbHNlJztcblxuICAgICAgICB2YXIgb3V0cHV0ID0gZm9ybWF0cyAmJiAoaXNGdW5jdGlvbihmb3JtYXRzW2Zvcm1hdF0pID8gZm9ybWF0c1tmb3JtYXRdLmNhbGwodGhpcywgbm93KSA6IGZvcm1hdHNbZm9ybWF0XSk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuZm9ybWF0KG91dHB1dCB8fCB0aGlzLmxvY2FsZURhdGEoKS5jYWxlbmRhcihmb3JtYXQsIHRoaXMsIGNyZWF0ZUxvY2FsKG5vdykpKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjbG9uZSAoKSB7XG4gICAgICAgIHJldHVybiBuZXcgTW9tZW50KHRoaXMpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzQWZ0ZXIgKGlucHV0LCB1bml0cykge1xuICAgICAgICB2YXIgbG9jYWxJbnB1dCA9IGlzTW9tZW50KGlucHV0KSA/IGlucHV0IDogY3JlYXRlTG9jYWwoaW5wdXQpO1xuICAgICAgICBpZiAoISh0aGlzLmlzVmFsaWQoKSAmJiBsb2NhbElucHV0LmlzVmFsaWQoKSkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICB1bml0cyA9IG5vcm1hbGl6ZVVuaXRzKCFpc1VuZGVmaW5lZCh1bml0cykgPyB1bml0cyA6ICdtaWxsaXNlY29uZCcpO1xuICAgICAgICBpZiAodW5pdHMgPT09ICdtaWxsaXNlY29uZCcpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnZhbHVlT2YoKSA+IGxvY2FsSW5wdXQudmFsdWVPZigpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGxvY2FsSW5wdXQudmFsdWVPZigpIDwgdGhpcy5jbG9uZSgpLnN0YXJ0T2YodW5pdHMpLnZhbHVlT2YoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzQmVmb3JlIChpbnB1dCwgdW5pdHMpIHtcbiAgICAgICAgdmFyIGxvY2FsSW5wdXQgPSBpc01vbWVudChpbnB1dCkgPyBpbnB1dCA6IGNyZWF0ZUxvY2FsKGlucHV0KTtcbiAgICAgICAgaWYgKCEodGhpcy5pc1ZhbGlkKCkgJiYgbG9jYWxJbnB1dC5pc1ZhbGlkKCkpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgdW5pdHMgPSBub3JtYWxpemVVbml0cyghaXNVbmRlZmluZWQodW5pdHMpID8gdW5pdHMgOiAnbWlsbGlzZWNvbmQnKTtcbiAgICAgICAgaWYgKHVuaXRzID09PSAnbWlsbGlzZWNvbmQnKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy52YWx1ZU9mKCkgPCBsb2NhbElucHV0LnZhbHVlT2YoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNsb25lKCkuZW5kT2YodW5pdHMpLnZhbHVlT2YoKSA8IGxvY2FsSW5wdXQudmFsdWVPZigpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNCZXR3ZWVuIChmcm9tLCB0bywgdW5pdHMsIGluY2x1c2l2aXR5KSB7XG4gICAgICAgIGluY2x1c2l2aXR5ID0gaW5jbHVzaXZpdHkgfHwgJygpJztcbiAgICAgICAgcmV0dXJuIChpbmNsdXNpdml0eVswXSA9PT0gJygnID8gdGhpcy5pc0FmdGVyKGZyb20sIHVuaXRzKSA6ICF0aGlzLmlzQmVmb3JlKGZyb20sIHVuaXRzKSkgJiZcbiAgICAgICAgICAgIChpbmNsdXNpdml0eVsxXSA9PT0gJyknID8gdGhpcy5pc0JlZm9yZSh0bywgdW5pdHMpIDogIXRoaXMuaXNBZnRlcih0bywgdW5pdHMpKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc1NhbWUgKGlucHV0LCB1bml0cykge1xuICAgICAgICB2YXIgbG9jYWxJbnB1dCA9IGlzTW9tZW50KGlucHV0KSA/IGlucHV0IDogY3JlYXRlTG9jYWwoaW5wdXQpLFxuICAgICAgICAgICAgaW5wdXRNcztcbiAgICAgICAgaWYgKCEodGhpcy5pc1ZhbGlkKCkgJiYgbG9jYWxJbnB1dC5pc1ZhbGlkKCkpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgdW5pdHMgPSBub3JtYWxpemVVbml0cyh1bml0cyB8fCAnbWlsbGlzZWNvbmQnKTtcbiAgICAgICAgaWYgKHVuaXRzID09PSAnbWlsbGlzZWNvbmQnKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy52YWx1ZU9mKCkgPT09IGxvY2FsSW5wdXQudmFsdWVPZigpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaW5wdXRNcyA9IGxvY2FsSW5wdXQudmFsdWVPZigpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2xvbmUoKS5zdGFydE9mKHVuaXRzKS52YWx1ZU9mKCkgPD0gaW5wdXRNcyAmJiBpbnB1dE1zIDw9IHRoaXMuY2xvbmUoKS5lbmRPZih1bml0cykudmFsdWVPZigpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNTYW1lT3JBZnRlciAoaW5wdXQsIHVuaXRzKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzU2FtZShpbnB1dCwgdW5pdHMpIHx8IHRoaXMuaXNBZnRlcihpbnB1dCx1bml0cyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNTYW1lT3JCZWZvcmUgKGlucHV0LCB1bml0cykge1xuICAgICAgICByZXR1cm4gdGhpcy5pc1NhbWUoaW5wdXQsIHVuaXRzKSB8fCB0aGlzLmlzQmVmb3JlKGlucHV0LHVuaXRzKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBkaWZmIChpbnB1dCwgdW5pdHMsIGFzRmxvYXQpIHtcbiAgICAgICAgdmFyIHRoYXQsXG4gICAgICAgICAgICB6b25lRGVsdGEsXG4gICAgICAgICAgICBvdXRwdXQ7XG5cbiAgICAgICAgaWYgKCF0aGlzLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuIE5hTjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoYXQgPSBjbG9uZVdpdGhPZmZzZXQoaW5wdXQsIHRoaXMpO1xuXG4gICAgICAgIGlmICghdGhhdC5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBOYU47XG4gICAgICAgIH1cblxuICAgICAgICB6b25lRGVsdGEgPSAodGhhdC51dGNPZmZzZXQoKSAtIHRoaXMudXRjT2Zmc2V0KCkpICogNmU0O1xuXG4gICAgICAgIHVuaXRzID0gbm9ybWFsaXplVW5pdHModW5pdHMpO1xuXG4gICAgICAgIHN3aXRjaCAodW5pdHMpIHtcbiAgICAgICAgICAgIGNhc2UgJ3llYXInOiBvdXRwdXQgPSBtb250aERpZmYodGhpcywgdGhhdCkgLyAxMjsgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdtb250aCc6IG91dHB1dCA9IG1vbnRoRGlmZih0aGlzLCB0aGF0KTsgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdxdWFydGVyJzogb3V0cHV0ID0gbW9udGhEaWZmKHRoaXMsIHRoYXQpIC8gMzsgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdzZWNvbmQnOiBvdXRwdXQgPSAodGhpcyAtIHRoYXQpIC8gMWUzOyBicmVhazsgLy8gMTAwMFxuICAgICAgICAgICAgY2FzZSAnbWludXRlJzogb3V0cHV0ID0gKHRoaXMgLSB0aGF0KSAvIDZlNDsgYnJlYWs7IC8vIDEwMDAgKiA2MFxuICAgICAgICAgICAgY2FzZSAnaG91cic6IG91dHB1dCA9ICh0aGlzIC0gdGhhdCkgLyAzNmU1OyBicmVhazsgLy8gMTAwMCAqIDYwICogNjBcbiAgICAgICAgICAgIGNhc2UgJ2RheSc6IG91dHB1dCA9ICh0aGlzIC0gdGhhdCAtIHpvbmVEZWx0YSkgLyA4NjRlNTsgYnJlYWs7IC8vIDEwMDAgKiA2MCAqIDYwICogMjQsIG5lZ2F0ZSBkc3RcbiAgICAgICAgICAgIGNhc2UgJ3dlZWsnOiBvdXRwdXQgPSAodGhpcyAtIHRoYXQgLSB6b25lRGVsdGEpIC8gNjA0OGU1OyBicmVhazsgLy8gMTAwMCAqIDYwICogNjAgKiAyNCAqIDcsIG5lZ2F0ZSBkc3RcbiAgICAgICAgICAgIGRlZmF1bHQ6IG91dHB1dCA9IHRoaXMgLSB0aGF0O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGFzRmxvYXQgPyBvdXRwdXQgOiBhYnNGbG9vcihvdXRwdXQpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1vbnRoRGlmZiAoYSwgYikge1xuICAgICAgICAvLyBkaWZmZXJlbmNlIGluIG1vbnRoc1xuICAgICAgICB2YXIgd2hvbGVNb250aERpZmYgPSAoKGIueWVhcigpIC0gYS55ZWFyKCkpICogMTIpICsgKGIubW9udGgoKSAtIGEubW9udGgoKSksXG4gICAgICAgICAgICAvLyBiIGlzIGluIChhbmNob3IgLSAxIG1vbnRoLCBhbmNob3IgKyAxIG1vbnRoKVxuICAgICAgICAgICAgYW5jaG9yID0gYS5jbG9uZSgpLmFkZCh3aG9sZU1vbnRoRGlmZiwgJ21vbnRocycpLFxuICAgICAgICAgICAgYW5jaG9yMiwgYWRqdXN0O1xuXG4gICAgICAgIGlmIChiIC0gYW5jaG9yIDwgMCkge1xuICAgICAgICAgICAgYW5jaG9yMiA9IGEuY2xvbmUoKS5hZGQod2hvbGVNb250aERpZmYgLSAxLCAnbW9udGhzJyk7XG4gICAgICAgICAgICAvLyBsaW5lYXIgYWNyb3NzIHRoZSBtb250aFxuICAgICAgICAgICAgYWRqdXN0ID0gKGIgLSBhbmNob3IpIC8gKGFuY2hvciAtIGFuY2hvcjIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYW5jaG9yMiA9IGEuY2xvbmUoKS5hZGQod2hvbGVNb250aERpZmYgKyAxLCAnbW9udGhzJyk7XG4gICAgICAgICAgICAvLyBsaW5lYXIgYWNyb3NzIHRoZSBtb250aFxuICAgICAgICAgICAgYWRqdXN0ID0gKGIgLSBhbmNob3IpIC8gKGFuY2hvcjIgLSBhbmNob3IpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy9jaGVjayBmb3IgbmVnYXRpdmUgemVybywgcmV0dXJuIHplcm8gaWYgbmVnYXRpdmUgemVyb1xuICAgICAgICByZXR1cm4gLSh3aG9sZU1vbnRoRGlmZiArIGFkanVzdCkgfHwgMDtcbiAgICB9XG5cbiAgICBob29rcy5kZWZhdWx0Rm9ybWF0ID0gJ1lZWVktTU0tRERUSEg6bW06c3NaJztcbiAgICBob29rcy5kZWZhdWx0Rm9ybWF0VXRjID0gJ1lZWVktTU0tRERUSEg6bW06c3NbWl0nO1xuXG4gICAgZnVuY3Rpb24gdG9TdHJpbmcgKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jbG9uZSgpLmxvY2FsZSgnZW4nKS5mb3JtYXQoJ2RkZCBNTU0gREQgWVlZWSBISDptbTpzcyBbR01UXVpaJyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdG9JU09TdHJpbmcoa2VlcE9mZnNldCkge1xuICAgICAgICBpZiAoIXRoaXMuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICB2YXIgdXRjID0ga2VlcE9mZnNldCAhPT0gdHJ1ZTtcbiAgICAgICAgdmFyIG0gPSB1dGMgPyB0aGlzLmNsb25lKCkudXRjKCkgOiB0aGlzO1xuICAgICAgICBpZiAobS55ZWFyKCkgPCAwIHx8IG0ueWVhcigpID4gOTk5OSkge1xuICAgICAgICAgICAgcmV0dXJuIGZvcm1hdE1vbWVudChtLCB1dGMgPyAnWVlZWVlZLU1NLUREW1RdSEg6bW06c3MuU1NTW1pdJyA6ICdZWVlZWVktTU0tRERbVF1ISDptbTpzcy5TU1NaJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzRnVuY3Rpb24oRGF0ZS5wcm90b3R5cGUudG9JU09TdHJpbmcpKSB7XG4gICAgICAgICAgICAvLyBuYXRpdmUgaW1wbGVtZW50YXRpb24gaXMgfjUweCBmYXN0ZXIsIHVzZSBpdCB3aGVuIHdlIGNhblxuICAgICAgICAgICAgaWYgKHV0Yykge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnRvRGF0ZSgpLnRvSVNPU3RyaW5nKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRGF0ZSh0aGlzLnZhbHVlT2YoKSArIHRoaXMudXRjT2Zmc2V0KCkgKiA2MCAqIDEwMDApLnRvSVNPU3RyaW5nKCkucmVwbGFjZSgnWicsIGZvcm1hdE1vbWVudChtLCAnWicpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZm9ybWF0TW9tZW50KG0sIHV0YyA/ICdZWVlZLU1NLUREW1RdSEg6bW06c3MuU1NTW1pdJyA6ICdZWVlZLU1NLUREW1RdSEg6bW06c3MuU1NTWicpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybiBhIGh1bWFuIHJlYWRhYmxlIHJlcHJlc2VudGF0aW9uIG9mIGEgbW9tZW50IHRoYXQgY2FuXG4gICAgICogYWxzbyBiZSBldmFsdWF0ZWQgdG8gZ2V0IGEgbmV3IG1vbWVudCB3aGljaCBpcyB0aGUgc2FtZVxuICAgICAqXG4gICAgICogQGxpbmsgaHR0cHM6Ly9ub2RlanMub3JnL2Rpc3QvbGF0ZXN0L2RvY3MvYXBpL3V0aWwuaHRtbCN1dGlsX2N1c3RvbV9pbnNwZWN0X2Z1bmN0aW9uX29uX29iamVjdHNcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBpbnNwZWN0ICgpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuICdtb21lbnQuaW52YWxpZCgvKiAnICsgdGhpcy5faSArICcgKi8pJztcbiAgICAgICAgfVxuICAgICAgICB2YXIgZnVuYyA9ICdtb21lbnQnO1xuICAgICAgICB2YXIgem9uZSA9ICcnO1xuICAgICAgICBpZiAoIXRoaXMuaXNMb2NhbCgpKSB7XG4gICAgICAgICAgICBmdW5jID0gdGhpcy51dGNPZmZzZXQoKSA9PT0gMCA/ICdtb21lbnQudXRjJyA6ICdtb21lbnQucGFyc2Vab25lJztcbiAgICAgICAgICAgIHpvbmUgPSAnWic7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHByZWZpeCA9ICdbJyArIGZ1bmMgKyAnKFwiXSc7XG4gICAgICAgIHZhciB5ZWFyID0gKDAgPD0gdGhpcy55ZWFyKCkgJiYgdGhpcy55ZWFyKCkgPD0gOTk5OSkgPyAnWVlZWScgOiAnWVlZWVlZJztcbiAgICAgICAgdmFyIGRhdGV0aW1lID0gJy1NTS1ERFtUXUhIOm1tOnNzLlNTUyc7XG4gICAgICAgIHZhciBzdWZmaXggPSB6b25lICsgJ1tcIildJztcblxuICAgICAgICByZXR1cm4gdGhpcy5mb3JtYXQocHJlZml4ICsgeWVhciArIGRhdGV0aW1lICsgc3VmZml4KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBmb3JtYXQgKGlucHV0U3RyaW5nKSB7XG4gICAgICAgIGlmICghaW5wdXRTdHJpbmcpIHtcbiAgICAgICAgICAgIGlucHV0U3RyaW5nID0gdGhpcy5pc1V0YygpID8gaG9va3MuZGVmYXVsdEZvcm1hdFV0YyA6IGhvb2tzLmRlZmF1bHRGb3JtYXQ7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIG91dHB1dCA9IGZvcm1hdE1vbWVudCh0aGlzLCBpbnB1dFN0cmluZyk7XG4gICAgICAgIHJldHVybiB0aGlzLmxvY2FsZURhdGEoKS5wb3N0Zm9ybWF0KG91dHB1dCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZnJvbSAodGltZSwgd2l0aG91dFN1ZmZpeCkge1xuICAgICAgICBpZiAodGhpcy5pc1ZhbGlkKCkgJiZcbiAgICAgICAgICAgICAgICAoKGlzTW9tZW50KHRpbWUpICYmIHRpbWUuaXNWYWxpZCgpKSB8fFxuICAgICAgICAgICAgICAgICBjcmVhdGVMb2NhbCh0aW1lKS5pc1ZhbGlkKCkpKSB7XG4gICAgICAgICAgICByZXR1cm4gY3JlYXRlRHVyYXRpb24oe3RvOiB0aGlzLCBmcm9tOiB0aW1lfSkubG9jYWxlKHRoaXMubG9jYWxlKCkpLmh1bWFuaXplKCF3aXRob3V0U3VmZml4KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmxvY2FsZURhdGEoKS5pbnZhbGlkRGF0ZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZnJvbU5vdyAod2l0aG91dFN1ZmZpeCkge1xuICAgICAgICByZXR1cm4gdGhpcy5mcm9tKGNyZWF0ZUxvY2FsKCksIHdpdGhvdXRTdWZmaXgpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHRvICh0aW1lLCB3aXRob3V0U3VmZml4KSB7XG4gICAgICAgIGlmICh0aGlzLmlzVmFsaWQoKSAmJlxuICAgICAgICAgICAgICAgICgoaXNNb21lbnQodGltZSkgJiYgdGltZS5pc1ZhbGlkKCkpIHx8XG4gICAgICAgICAgICAgICAgIGNyZWF0ZUxvY2FsKHRpbWUpLmlzVmFsaWQoKSkpIHtcbiAgICAgICAgICAgIHJldHVybiBjcmVhdGVEdXJhdGlvbih7ZnJvbTogdGhpcywgdG86IHRpbWV9KS5sb2NhbGUodGhpcy5sb2NhbGUoKSkuaHVtYW5pemUoIXdpdGhvdXRTdWZmaXgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLmludmFsaWREYXRlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiB0b05vdyAod2l0aG91dFN1ZmZpeCkge1xuICAgICAgICByZXR1cm4gdGhpcy50byhjcmVhdGVMb2NhbCgpLCB3aXRob3V0U3VmZml4KTtcbiAgICB9XG5cbiAgICAvLyBJZiBwYXNzZWQgYSBsb2NhbGUga2V5LCBpdCB3aWxsIHNldCB0aGUgbG9jYWxlIGZvciB0aGlzXG4gICAgLy8gaW5zdGFuY2UuICBPdGhlcndpc2UsIGl0IHdpbGwgcmV0dXJuIHRoZSBsb2NhbGUgY29uZmlndXJhdGlvblxuICAgIC8vIHZhcmlhYmxlcyBmb3IgdGhpcyBpbnN0YW5jZS5cbiAgICBmdW5jdGlvbiBsb2NhbGUgKGtleSkge1xuICAgICAgICB2YXIgbmV3TG9jYWxlRGF0YTtcblxuICAgICAgICBpZiAoa2V5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9sb2NhbGUuX2FiYnI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBuZXdMb2NhbGVEYXRhID0gZ2V0TG9jYWxlKGtleSk7XG4gICAgICAgICAgICBpZiAobmV3TG9jYWxlRGF0YSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbG9jYWxlID0gbmV3TG9jYWxlRGF0YTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGxhbmcgPSBkZXByZWNhdGUoXG4gICAgICAgICdtb21lbnQoKS5sYW5nKCkgaXMgZGVwcmVjYXRlZC4gSW5zdGVhZCwgdXNlIG1vbWVudCgpLmxvY2FsZURhdGEoKSB0byBnZXQgdGhlIGxhbmd1YWdlIGNvbmZpZ3VyYXRpb24uIFVzZSBtb21lbnQoKS5sb2NhbGUoKSB0byBjaGFuZ2UgbGFuZ3VhZ2VzLicsXG4gICAgICAgIGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICAgIGlmIChrZXkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmxvY2FsZURhdGEoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubG9jYWxlKGtleSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICApO1xuXG4gICAgZnVuY3Rpb24gbG9jYWxlRGF0YSAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9sb2NhbGU7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc3RhcnRPZiAodW5pdHMpIHtcbiAgICAgICAgdW5pdHMgPSBub3JtYWxpemVVbml0cyh1bml0cyk7XG4gICAgICAgIC8vIHRoZSBmb2xsb3dpbmcgc3dpdGNoIGludGVudGlvbmFsbHkgb21pdHMgYnJlYWsga2V5d29yZHNcbiAgICAgICAgLy8gdG8gdXRpbGl6ZSBmYWxsaW5nIHRocm91Z2ggdGhlIGNhc2VzLlxuICAgICAgICBzd2l0Y2ggKHVuaXRzKSB7XG4gICAgICAgICAgICBjYXNlICd5ZWFyJzpcbiAgICAgICAgICAgICAgICB0aGlzLm1vbnRoKDApO1xuICAgICAgICAgICAgICAgIC8qIGZhbGxzIHRocm91Z2ggKi9cbiAgICAgICAgICAgIGNhc2UgJ3F1YXJ0ZXInOlxuICAgICAgICAgICAgY2FzZSAnbW9udGgnOlxuICAgICAgICAgICAgICAgIHRoaXMuZGF0ZSgxKTtcbiAgICAgICAgICAgICAgICAvKiBmYWxscyB0aHJvdWdoICovXG4gICAgICAgICAgICBjYXNlICd3ZWVrJzpcbiAgICAgICAgICAgIGNhc2UgJ2lzb1dlZWsnOlxuICAgICAgICAgICAgY2FzZSAnZGF5JzpcbiAgICAgICAgICAgIGNhc2UgJ2RhdGUnOlxuICAgICAgICAgICAgICAgIHRoaXMuaG91cnMoMCk7XG4gICAgICAgICAgICAgICAgLyogZmFsbHMgdGhyb3VnaCAqL1xuICAgICAgICAgICAgY2FzZSAnaG91cic6XG4gICAgICAgICAgICAgICAgdGhpcy5taW51dGVzKDApO1xuICAgICAgICAgICAgICAgIC8qIGZhbGxzIHRocm91Z2ggKi9cbiAgICAgICAgICAgIGNhc2UgJ21pbnV0ZSc6XG4gICAgICAgICAgICAgICAgdGhpcy5zZWNvbmRzKDApO1xuICAgICAgICAgICAgICAgIC8qIGZhbGxzIHRocm91Z2ggKi9cbiAgICAgICAgICAgIGNhc2UgJ3NlY29uZCc6XG4gICAgICAgICAgICAgICAgdGhpcy5taWxsaXNlY29uZHMoMCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyB3ZWVrcyBhcmUgYSBzcGVjaWFsIGNhc2VcbiAgICAgICAgaWYgKHVuaXRzID09PSAnd2VlaycpIHtcbiAgICAgICAgICAgIHRoaXMud2Vla2RheSgwKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodW5pdHMgPT09ICdpc29XZWVrJykge1xuICAgICAgICAgICAgdGhpcy5pc29XZWVrZGF5KDEpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gcXVhcnRlcnMgYXJlIGFsc28gc3BlY2lhbFxuICAgICAgICBpZiAodW5pdHMgPT09ICdxdWFydGVyJykge1xuICAgICAgICAgICAgdGhpcy5tb250aChNYXRoLmZsb29yKHRoaXMubW9udGgoKSAvIDMpICogMyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBlbmRPZiAodW5pdHMpIHtcbiAgICAgICAgdW5pdHMgPSBub3JtYWxpemVVbml0cyh1bml0cyk7XG4gICAgICAgIGlmICh1bml0cyA9PT0gdW5kZWZpbmVkIHx8IHVuaXRzID09PSAnbWlsbGlzZWNvbmQnKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuXG4gICAgICAgIC8vICdkYXRlJyBpcyBhbiBhbGlhcyBmb3IgJ2RheScsIHNvIGl0IHNob3VsZCBiZSBjb25zaWRlcmVkIGFzIHN1Y2guXG4gICAgICAgIGlmICh1bml0cyA9PT0gJ2RhdGUnKSB7XG4gICAgICAgICAgICB1bml0cyA9ICdkYXknO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuc3RhcnRPZih1bml0cykuYWRkKDEsICh1bml0cyA9PT0gJ2lzb1dlZWsnID8gJ3dlZWsnIDogdW5pdHMpKS5zdWJ0cmFjdCgxLCAnbXMnKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB2YWx1ZU9mICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2QudmFsdWVPZigpIC0gKCh0aGlzLl9vZmZzZXQgfHwgMCkgKiA2MDAwMCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdW5peCAoKSB7XG4gICAgICAgIHJldHVybiBNYXRoLmZsb29yKHRoaXMudmFsdWVPZigpIC8gMTAwMCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdG9EYXRlICgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBEYXRlKHRoaXMudmFsdWVPZigpKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB0b0FycmF5ICgpIHtcbiAgICAgICAgdmFyIG0gPSB0aGlzO1xuICAgICAgICByZXR1cm4gW20ueWVhcigpLCBtLm1vbnRoKCksIG0uZGF0ZSgpLCBtLmhvdXIoKSwgbS5taW51dGUoKSwgbS5zZWNvbmQoKSwgbS5taWxsaXNlY29uZCgpXTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB0b09iamVjdCAoKSB7XG4gICAgICAgIHZhciBtID0gdGhpcztcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHllYXJzOiBtLnllYXIoKSxcbiAgICAgICAgICAgIG1vbnRoczogbS5tb250aCgpLFxuICAgICAgICAgICAgZGF0ZTogbS5kYXRlKCksXG4gICAgICAgICAgICBob3VyczogbS5ob3VycygpLFxuICAgICAgICAgICAgbWludXRlczogbS5taW51dGVzKCksXG4gICAgICAgICAgICBzZWNvbmRzOiBtLnNlY29uZHMoKSxcbiAgICAgICAgICAgIG1pbGxpc2Vjb25kczogbS5taWxsaXNlY29uZHMoKVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHRvSlNPTiAoKSB7XG4gICAgICAgIC8vIG5ldyBEYXRlKE5hTikudG9KU09OKCkgPT09IG51bGxcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNWYWxpZCgpID8gdGhpcy50b0lTT1N0cmluZygpIDogbnVsbDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc1ZhbGlkJDIgKCkge1xuICAgICAgICByZXR1cm4gaXNWYWxpZCh0aGlzKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwYXJzaW5nRmxhZ3MgKCkge1xuICAgICAgICByZXR1cm4gZXh0ZW5kKHt9LCBnZXRQYXJzaW5nRmxhZ3ModGhpcykpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGludmFsaWRBdCAoKSB7XG4gICAgICAgIHJldHVybiBnZXRQYXJzaW5nRmxhZ3ModGhpcykub3ZlcmZsb3c7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY3JlYXRpb25EYXRhKCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgaW5wdXQ6IHRoaXMuX2ksXG4gICAgICAgICAgICBmb3JtYXQ6IHRoaXMuX2YsXG4gICAgICAgICAgICBsb2NhbGU6IHRoaXMuX2xvY2FsZSxcbiAgICAgICAgICAgIGlzVVRDOiB0aGlzLl9pc1VUQyxcbiAgICAgICAgICAgIHN0cmljdDogdGhpcy5fc3RyaWN0XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gRk9STUFUVElOR1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oMCwgWydnZycsIDJdLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLndlZWtZZWFyKCkgJSAxMDA7XG4gICAgfSk7XG5cbiAgICBhZGRGb3JtYXRUb2tlbigwLCBbJ0dHJywgMl0sIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNvV2Vla1llYXIoKSAlIDEwMDtcbiAgICB9KTtcblxuICAgIGZ1bmN0aW9uIGFkZFdlZWtZZWFyRm9ybWF0VG9rZW4gKHRva2VuLCBnZXR0ZXIpIHtcbiAgICAgICAgYWRkRm9ybWF0VG9rZW4oMCwgW3Rva2VuLCB0b2tlbi5sZW5ndGhdLCAwLCBnZXR0ZXIpO1xuICAgIH1cblxuICAgIGFkZFdlZWtZZWFyRm9ybWF0VG9rZW4oJ2dnZ2cnLCAgICAgJ3dlZWtZZWFyJyk7XG4gICAgYWRkV2Vla1llYXJGb3JtYXRUb2tlbignZ2dnZ2cnLCAgICAnd2Vla1llYXInKTtcbiAgICBhZGRXZWVrWWVhckZvcm1hdFRva2VuKCdHR0dHJywgICdpc29XZWVrWWVhcicpO1xuICAgIGFkZFdlZWtZZWFyRm9ybWF0VG9rZW4oJ0dHR0dHJywgJ2lzb1dlZWtZZWFyJyk7XG5cbiAgICAvLyBBTElBU0VTXG5cbiAgICBhZGRVbml0QWxpYXMoJ3dlZWtZZWFyJywgJ2dnJyk7XG4gICAgYWRkVW5pdEFsaWFzKCdpc29XZWVrWWVhcicsICdHRycpO1xuXG4gICAgLy8gUFJJT1JJVFlcblxuICAgIGFkZFVuaXRQcmlvcml0eSgnd2Vla1llYXInLCAxKTtcbiAgICBhZGRVbml0UHJpb3JpdHkoJ2lzb1dlZWtZZWFyJywgMSk7XG5cblxuICAgIC8vIFBBUlNJTkdcblxuICAgIGFkZFJlZ2V4VG9rZW4oJ0cnLCAgICAgIG1hdGNoU2lnbmVkKTtcbiAgICBhZGRSZWdleFRva2VuKCdnJywgICAgICBtYXRjaFNpZ25lZCk7XG4gICAgYWRkUmVnZXhUb2tlbignR0cnLCAgICAgbWF0Y2gxdG8yLCBtYXRjaDIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ2dnJywgICAgIG1hdGNoMXRvMiwgbWF0Y2gyKTtcbiAgICBhZGRSZWdleFRva2VuKCdHR0dHJywgICBtYXRjaDF0bzQsIG1hdGNoNCk7XG4gICAgYWRkUmVnZXhUb2tlbignZ2dnZycsICAgbWF0Y2gxdG80LCBtYXRjaDQpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ0dHR0dHJywgIG1hdGNoMXRvNiwgbWF0Y2g2KTtcbiAgICBhZGRSZWdleFRva2VuKCdnZ2dnZycsICBtYXRjaDF0bzYsIG1hdGNoNik7XG5cbiAgICBhZGRXZWVrUGFyc2VUb2tlbihbJ2dnZ2cnLCAnZ2dnZ2cnLCAnR0dHRycsICdHR0dHRyddLCBmdW5jdGlvbiAoaW5wdXQsIHdlZWssIGNvbmZpZywgdG9rZW4pIHtcbiAgICAgICAgd2Vla1t0b2tlbi5zdWJzdHIoMCwgMildID0gdG9JbnQoaW5wdXQpO1xuICAgIH0pO1xuXG4gICAgYWRkV2Vla1BhcnNlVG9rZW4oWydnZycsICdHRyddLCBmdW5jdGlvbiAoaW5wdXQsIHdlZWssIGNvbmZpZywgdG9rZW4pIHtcbiAgICAgICAgd2Vla1t0b2tlbl0gPSBob29rcy5wYXJzZVR3b0RpZ2l0WWVhcihpbnB1dCk7XG4gICAgfSk7XG5cbiAgICAvLyBNT01FTlRTXG5cbiAgICBmdW5jdGlvbiBnZXRTZXRXZWVrWWVhciAoaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIGdldFNldFdlZWtZZWFySGVscGVyLmNhbGwodGhpcyxcbiAgICAgICAgICAgICAgICBpbnB1dCxcbiAgICAgICAgICAgICAgICB0aGlzLndlZWsoKSxcbiAgICAgICAgICAgICAgICB0aGlzLndlZWtkYXkoKSxcbiAgICAgICAgICAgICAgICB0aGlzLmxvY2FsZURhdGEoKS5fd2Vlay5kb3csXG4gICAgICAgICAgICAgICAgdGhpcy5sb2NhbGVEYXRhKCkuX3dlZWsuZG95KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRTZXRJU09XZWVrWWVhciAoaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIGdldFNldFdlZWtZZWFySGVscGVyLmNhbGwodGhpcyxcbiAgICAgICAgICAgICAgICBpbnB1dCwgdGhpcy5pc29XZWVrKCksIHRoaXMuaXNvV2Vla2RheSgpLCAxLCA0KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRJU09XZWVrc0luWWVhciAoKSB7XG4gICAgICAgIHJldHVybiB3ZWVrc0luWWVhcih0aGlzLnllYXIoKSwgMSwgNCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0V2Vla3NJblllYXIgKCkge1xuICAgICAgICB2YXIgd2Vla0luZm8gPSB0aGlzLmxvY2FsZURhdGEoKS5fd2VlaztcbiAgICAgICAgcmV0dXJuIHdlZWtzSW5ZZWFyKHRoaXMueWVhcigpLCB3ZWVrSW5mby5kb3csIHdlZWtJbmZvLmRveSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0U2V0V2Vla1llYXJIZWxwZXIoaW5wdXQsIHdlZWssIHdlZWtkYXksIGRvdywgZG95KSB7XG4gICAgICAgIHZhciB3ZWVrc1RhcmdldDtcbiAgICAgICAgaWYgKGlucHV0ID09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiB3ZWVrT2ZZZWFyKHRoaXMsIGRvdywgZG95KS55ZWFyO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgd2Vla3NUYXJnZXQgPSB3ZWVrc0luWWVhcihpbnB1dCwgZG93LCBkb3kpO1xuICAgICAgICAgICAgaWYgKHdlZWsgPiB3ZWVrc1RhcmdldCkge1xuICAgICAgICAgICAgICAgIHdlZWsgPSB3ZWVrc1RhcmdldDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBzZXRXZWVrQWxsLmNhbGwodGhpcywgaW5wdXQsIHdlZWssIHdlZWtkYXksIGRvdywgZG95KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHNldFdlZWtBbGwod2Vla1llYXIsIHdlZWssIHdlZWtkYXksIGRvdywgZG95KSB7XG4gICAgICAgIHZhciBkYXlPZlllYXJEYXRhID0gZGF5T2ZZZWFyRnJvbVdlZWtzKHdlZWtZZWFyLCB3ZWVrLCB3ZWVrZGF5LCBkb3csIGRveSksXG4gICAgICAgICAgICBkYXRlID0gY3JlYXRlVVRDRGF0ZShkYXlPZlllYXJEYXRhLnllYXIsIDAsIGRheU9mWWVhckRhdGEuZGF5T2ZZZWFyKTtcblxuICAgICAgICB0aGlzLnllYXIoZGF0ZS5nZXRVVENGdWxsWWVhcigpKTtcbiAgICAgICAgdGhpcy5tb250aChkYXRlLmdldFVUQ01vbnRoKCkpO1xuICAgICAgICB0aGlzLmRhdGUoZGF0ZS5nZXRVVENEYXRlKCkpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvLyBGT1JNQVRUSU5HXG5cbiAgICBhZGRGb3JtYXRUb2tlbignUScsIDAsICdRbycsICdxdWFydGVyJyk7XG5cbiAgICAvLyBBTElBU0VTXG5cbiAgICBhZGRVbml0QWxpYXMoJ3F1YXJ0ZXInLCAnUScpO1xuXG4gICAgLy8gUFJJT1JJVFlcblxuICAgIGFkZFVuaXRQcmlvcml0eSgncXVhcnRlcicsIDcpO1xuXG4gICAgLy8gUEFSU0lOR1xuXG4gICAgYWRkUmVnZXhUb2tlbignUScsIG1hdGNoMSk7XG4gICAgYWRkUGFyc2VUb2tlbignUScsIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXkpIHtcbiAgICAgICAgYXJyYXlbTU9OVEhdID0gKHRvSW50KGlucHV0KSAtIDEpICogMztcbiAgICB9KTtcblxuICAgIC8vIE1PTUVOVFNcblxuICAgIGZ1bmN0aW9uIGdldFNldFF1YXJ0ZXIgKGlucHV0KSB7XG4gICAgICAgIHJldHVybiBpbnB1dCA9PSBudWxsID8gTWF0aC5jZWlsKCh0aGlzLm1vbnRoKCkgKyAxKSAvIDMpIDogdGhpcy5tb250aCgoaW5wdXQgLSAxKSAqIDMgKyB0aGlzLm1vbnRoKCkgJSAzKTtcbiAgICB9XG5cbiAgICAvLyBGT1JNQVRUSU5HXG5cbiAgICBhZGRGb3JtYXRUb2tlbignRCcsIFsnREQnLCAyXSwgJ0RvJywgJ2RhdGUnKTtcblxuICAgIC8vIEFMSUFTRVNcblxuICAgIGFkZFVuaXRBbGlhcygnZGF0ZScsICdEJyk7XG5cbiAgICAvLyBQUklPUklUWVxuICAgIGFkZFVuaXRQcmlvcml0eSgnZGF0ZScsIDkpO1xuXG4gICAgLy8gUEFSU0lOR1xuXG4gICAgYWRkUmVnZXhUb2tlbignRCcsICBtYXRjaDF0bzIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ0REJywgbWF0Y2gxdG8yLCBtYXRjaDIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ0RvJywgZnVuY3Rpb24gKGlzU3RyaWN0LCBsb2NhbGUpIHtcbiAgICAgICAgLy8gVE9ETzogUmVtb3ZlIFwib3JkaW5hbFBhcnNlXCIgZmFsbGJhY2sgaW4gbmV4dCBtYWpvciByZWxlYXNlLlxuICAgICAgICByZXR1cm4gaXNTdHJpY3QgP1xuICAgICAgICAgIChsb2NhbGUuX2RheU9mTW9udGhPcmRpbmFsUGFyc2UgfHwgbG9jYWxlLl9vcmRpbmFsUGFyc2UpIDpcbiAgICAgICAgICBsb2NhbGUuX2RheU9mTW9udGhPcmRpbmFsUGFyc2VMZW5pZW50O1xuICAgIH0pO1xuXG4gICAgYWRkUGFyc2VUb2tlbihbJ0QnLCAnREQnXSwgREFURSk7XG4gICAgYWRkUGFyc2VUb2tlbignRG8nLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5KSB7XG4gICAgICAgIGFycmF5W0RBVEVdID0gdG9JbnQoaW5wdXQubWF0Y2gobWF0Y2gxdG8yKVswXSk7XG4gICAgfSk7XG5cbiAgICAvLyBNT01FTlRTXG5cbiAgICB2YXIgZ2V0U2V0RGF5T2ZNb250aCA9IG1ha2VHZXRTZXQoJ0RhdGUnLCB0cnVlKTtcblxuICAgIC8vIEZPUk1BVFRJTkdcblxuICAgIGFkZEZvcm1hdFRva2VuKCdEREQnLCBbJ0REREQnLCAzXSwgJ0RERG8nLCAnZGF5T2ZZZWFyJyk7XG5cbiAgICAvLyBBTElBU0VTXG5cbiAgICBhZGRVbml0QWxpYXMoJ2RheU9mWWVhcicsICdEREQnKTtcblxuICAgIC8vIFBSSU9SSVRZXG4gICAgYWRkVW5pdFByaW9yaXR5KCdkYXlPZlllYXInLCA0KTtcblxuICAgIC8vIFBBUlNJTkdcblxuICAgIGFkZFJlZ2V4VG9rZW4oJ0RERCcsICBtYXRjaDF0bzMpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ0REREQnLCBtYXRjaDMpO1xuICAgIGFkZFBhcnNlVG9rZW4oWydEREQnLCAnRERERCddLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5LCBjb25maWcpIHtcbiAgICAgICAgY29uZmlnLl9kYXlPZlllYXIgPSB0b0ludChpbnB1dCk7XG4gICAgfSk7XG5cbiAgICAvLyBIRUxQRVJTXG5cbiAgICAvLyBNT01FTlRTXG5cbiAgICBmdW5jdGlvbiBnZXRTZXREYXlPZlllYXIgKGlucHV0KSB7XG4gICAgICAgIHZhciBkYXlPZlllYXIgPSBNYXRoLnJvdW5kKCh0aGlzLmNsb25lKCkuc3RhcnRPZignZGF5JykgLSB0aGlzLmNsb25lKCkuc3RhcnRPZigneWVhcicpKSAvIDg2NGU1KSArIDE7XG4gICAgICAgIHJldHVybiBpbnB1dCA9PSBudWxsID8gZGF5T2ZZZWFyIDogdGhpcy5hZGQoKGlucHV0IC0gZGF5T2ZZZWFyKSwgJ2QnKTtcbiAgICB9XG5cbiAgICAvLyBGT1JNQVRUSU5HXG5cbiAgICBhZGRGb3JtYXRUb2tlbignbScsIFsnbW0nLCAyXSwgMCwgJ21pbnV0ZScpO1xuXG4gICAgLy8gQUxJQVNFU1xuXG4gICAgYWRkVW5pdEFsaWFzKCdtaW51dGUnLCAnbScpO1xuXG4gICAgLy8gUFJJT1JJVFlcblxuICAgIGFkZFVuaXRQcmlvcml0eSgnbWludXRlJywgMTQpO1xuXG4gICAgLy8gUEFSU0lOR1xuXG4gICAgYWRkUmVnZXhUb2tlbignbScsICBtYXRjaDF0bzIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ21tJywgbWF0Y2gxdG8yLCBtYXRjaDIpO1xuICAgIGFkZFBhcnNlVG9rZW4oWydtJywgJ21tJ10sIE1JTlVURSk7XG5cbiAgICAvLyBNT01FTlRTXG5cbiAgICB2YXIgZ2V0U2V0TWludXRlID0gbWFrZUdldFNldCgnTWludXRlcycsIGZhbHNlKTtcblxuICAgIC8vIEZPUk1BVFRJTkdcblxuICAgIGFkZEZvcm1hdFRva2VuKCdzJywgWydzcycsIDJdLCAwLCAnc2Vjb25kJyk7XG5cbiAgICAvLyBBTElBU0VTXG5cbiAgICBhZGRVbml0QWxpYXMoJ3NlY29uZCcsICdzJyk7XG5cbiAgICAvLyBQUklPUklUWVxuXG4gICAgYWRkVW5pdFByaW9yaXR5KCdzZWNvbmQnLCAxNSk7XG5cbiAgICAvLyBQQVJTSU5HXG5cbiAgICBhZGRSZWdleFRva2VuKCdzJywgIG1hdGNoMXRvMik7XG4gICAgYWRkUmVnZXhUb2tlbignc3MnLCBtYXRjaDF0bzIsIG1hdGNoMik7XG4gICAgYWRkUGFyc2VUb2tlbihbJ3MnLCAnc3MnXSwgU0VDT05EKTtcblxuICAgIC8vIE1PTUVOVFNcblxuICAgIHZhciBnZXRTZXRTZWNvbmQgPSBtYWtlR2V0U2V0KCdTZWNvbmRzJywgZmFsc2UpO1xuXG4gICAgLy8gRk9STUFUVElOR1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ1MnLCAwLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB+fih0aGlzLm1pbGxpc2Vjb25kKCkgLyAxMDApO1xuICAgIH0pO1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oMCwgWydTUycsIDJdLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB+fih0aGlzLm1pbGxpc2Vjb25kKCkgLyAxMCk7XG4gICAgfSk7XG5cbiAgICBhZGRGb3JtYXRUb2tlbigwLCBbJ1NTUycsIDNdLCAwLCAnbWlsbGlzZWNvbmQnKTtcbiAgICBhZGRGb3JtYXRUb2tlbigwLCBbJ1NTU1MnLCA0XSwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5taWxsaXNlY29uZCgpICogMTA7XG4gICAgfSk7XG4gICAgYWRkRm9ybWF0VG9rZW4oMCwgWydTU1NTUycsIDVdLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1pbGxpc2Vjb25kKCkgKiAxMDA7XG4gICAgfSk7XG4gICAgYWRkRm9ybWF0VG9rZW4oMCwgWydTU1NTU1MnLCA2XSwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5taWxsaXNlY29uZCgpICogMTAwMDtcbiAgICB9KTtcbiAgICBhZGRGb3JtYXRUb2tlbigwLCBbJ1NTU1NTU1MnLCA3XSwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5taWxsaXNlY29uZCgpICogMTAwMDA7XG4gICAgfSk7XG4gICAgYWRkRm9ybWF0VG9rZW4oMCwgWydTU1NTU1NTUycsIDhdLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1pbGxpc2Vjb25kKCkgKiAxMDAwMDA7XG4gICAgfSk7XG4gICAgYWRkRm9ybWF0VG9rZW4oMCwgWydTU1NTU1NTU1MnLCA5XSwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5taWxsaXNlY29uZCgpICogMTAwMDAwMDtcbiAgICB9KTtcblxuXG4gICAgLy8gQUxJQVNFU1xuXG4gICAgYWRkVW5pdEFsaWFzKCdtaWxsaXNlY29uZCcsICdtcycpO1xuXG4gICAgLy8gUFJJT1JJVFlcblxuICAgIGFkZFVuaXRQcmlvcml0eSgnbWlsbGlzZWNvbmQnLCAxNik7XG5cbiAgICAvLyBQQVJTSU5HXG5cbiAgICBhZGRSZWdleFRva2VuKCdTJywgICAgbWF0Y2gxdG8zLCBtYXRjaDEpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ1NTJywgICBtYXRjaDF0bzMsIG1hdGNoMik7XG4gICAgYWRkUmVnZXhUb2tlbignU1NTJywgIG1hdGNoMXRvMywgbWF0Y2gzKTtcblxuICAgIHZhciB0b2tlbjtcbiAgICBmb3IgKHRva2VuID0gJ1NTU1MnOyB0b2tlbi5sZW5ndGggPD0gOTsgdG9rZW4gKz0gJ1MnKSB7XG4gICAgICAgIGFkZFJlZ2V4VG9rZW4odG9rZW4sIG1hdGNoVW5zaWduZWQpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHBhcnNlTXMoaW5wdXQsIGFycmF5KSB7XG4gICAgICAgIGFycmF5W01JTExJU0VDT05EXSA9IHRvSW50KCgnMC4nICsgaW5wdXQpICogMTAwMCk7XG4gICAgfVxuXG4gICAgZm9yICh0b2tlbiA9ICdTJzsgdG9rZW4ubGVuZ3RoIDw9IDk7IHRva2VuICs9ICdTJykge1xuICAgICAgICBhZGRQYXJzZVRva2VuKHRva2VuLCBwYXJzZU1zKTtcbiAgICB9XG4gICAgLy8gTU9NRU5UU1xuXG4gICAgdmFyIGdldFNldE1pbGxpc2Vjb25kID0gbWFrZUdldFNldCgnTWlsbGlzZWNvbmRzJywgZmFsc2UpO1xuXG4gICAgLy8gRk9STUFUVElOR1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ3onLCAgMCwgMCwgJ3pvbmVBYmJyJyk7XG4gICAgYWRkRm9ybWF0VG9rZW4oJ3p6JywgMCwgMCwgJ3pvbmVOYW1lJyk7XG5cbiAgICAvLyBNT01FTlRTXG5cbiAgICBmdW5jdGlvbiBnZXRab25lQWJiciAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pc1VUQyA/ICdVVEMnIDogJyc7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0Wm9uZU5hbWUgKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faXNVVEMgPyAnQ29vcmRpbmF0ZWQgVW5pdmVyc2FsIFRpbWUnIDogJyc7XG4gICAgfVxuXG4gICAgdmFyIHByb3RvID0gTW9tZW50LnByb3RvdHlwZTtcblxuICAgIHByb3RvLmFkZCAgICAgICAgICAgICAgID0gYWRkO1xuICAgIHByb3RvLmNhbGVuZGFyICAgICAgICAgID0gY2FsZW5kYXIkMTtcbiAgICBwcm90by5jbG9uZSAgICAgICAgICAgICA9IGNsb25lO1xuICAgIHByb3RvLmRpZmYgICAgICAgICAgICAgID0gZGlmZjtcbiAgICBwcm90by5lbmRPZiAgICAgICAgICAgICA9IGVuZE9mO1xuICAgIHByb3RvLmZvcm1hdCAgICAgICAgICAgID0gZm9ybWF0O1xuICAgIHByb3RvLmZyb20gICAgICAgICAgICAgID0gZnJvbTtcbiAgICBwcm90by5mcm9tTm93ICAgICAgICAgICA9IGZyb21Ob3c7XG4gICAgcHJvdG8udG8gICAgICAgICAgICAgICAgPSB0bztcbiAgICBwcm90by50b05vdyAgICAgICAgICAgICA9IHRvTm93O1xuICAgIHByb3RvLmdldCAgICAgICAgICAgICAgID0gc3RyaW5nR2V0O1xuICAgIHByb3RvLmludmFsaWRBdCAgICAgICAgID0gaW52YWxpZEF0O1xuICAgIHByb3RvLmlzQWZ0ZXIgICAgICAgICAgID0gaXNBZnRlcjtcbiAgICBwcm90by5pc0JlZm9yZSAgICAgICAgICA9IGlzQmVmb3JlO1xuICAgIHByb3RvLmlzQmV0d2VlbiAgICAgICAgID0gaXNCZXR3ZWVuO1xuICAgIHByb3RvLmlzU2FtZSAgICAgICAgICAgID0gaXNTYW1lO1xuICAgIHByb3RvLmlzU2FtZU9yQWZ0ZXIgICAgID0gaXNTYW1lT3JBZnRlcjtcbiAgICBwcm90by5pc1NhbWVPckJlZm9yZSAgICA9IGlzU2FtZU9yQmVmb3JlO1xuICAgIHByb3RvLmlzVmFsaWQgICAgICAgICAgID0gaXNWYWxpZCQyO1xuICAgIHByb3RvLmxhbmcgICAgICAgICAgICAgID0gbGFuZztcbiAgICBwcm90by5sb2NhbGUgICAgICAgICAgICA9IGxvY2FsZTtcbiAgICBwcm90by5sb2NhbGVEYXRhICAgICAgICA9IGxvY2FsZURhdGE7XG4gICAgcHJvdG8ubWF4ICAgICAgICAgICAgICAgPSBwcm90b3R5cGVNYXg7XG4gICAgcHJvdG8ubWluICAgICAgICAgICAgICAgPSBwcm90b3R5cGVNaW47XG4gICAgcHJvdG8ucGFyc2luZ0ZsYWdzICAgICAgPSBwYXJzaW5nRmxhZ3M7XG4gICAgcHJvdG8uc2V0ICAgICAgICAgICAgICAgPSBzdHJpbmdTZXQ7XG4gICAgcHJvdG8uc3RhcnRPZiAgICAgICAgICAgPSBzdGFydE9mO1xuICAgIHByb3RvLnN1YnRyYWN0ICAgICAgICAgID0gc3VidHJhY3Q7XG4gICAgcHJvdG8udG9BcnJheSAgICAgICAgICAgPSB0b0FycmF5O1xuICAgIHByb3RvLnRvT2JqZWN0ICAgICAgICAgID0gdG9PYmplY3Q7XG4gICAgcHJvdG8udG9EYXRlICAgICAgICAgICAgPSB0b0RhdGU7XG4gICAgcHJvdG8udG9JU09TdHJpbmcgICAgICAgPSB0b0lTT1N0cmluZztcbiAgICBwcm90by5pbnNwZWN0ICAgICAgICAgICA9IGluc3BlY3Q7XG4gICAgcHJvdG8udG9KU09OICAgICAgICAgICAgPSB0b0pTT047XG4gICAgcHJvdG8udG9TdHJpbmcgICAgICAgICAgPSB0b1N0cmluZztcbiAgICBwcm90by51bml4ICAgICAgICAgICAgICA9IHVuaXg7XG4gICAgcHJvdG8udmFsdWVPZiAgICAgICAgICAgPSB2YWx1ZU9mO1xuICAgIHByb3RvLmNyZWF0aW9uRGF0YSAgICAgID0gY3JlYXRpb25EYXRhO1xuICAgIHByb3RvLnllYXIgICAgICAgPSBnZXRTZXRZZWFyO1xuICAgIHByb3RvLmlzTGVhcFllYXIgPSBnZXRJc0xlYXBZZWFyO1xuICAgIHByb3RvLndlZWtZZWFyICAgID0gZ2V0U2V0V2Vla1llYXI7XG4gICAgcHJvdG8uaXNvV2Vla1llYXIgPSBnZXRTZXRJU09XZWVrWWVhcjtcbiAgICBwcm90by5xdWFydGVyID0gcHJvdG8ucXVhcnRlcnMgPSBnZXRTZXRRdWFydGVyO1xuICAgIHByb3RvLm1vbnRoICAgICAgID0gZ2V0U2V0TW9udGg7XG4gICAgcHJvdG8uZGF5c0luTW9udGggPSBnZXREYXlzSW5Nb250aDtcbiAgICBwcm90by53ZWVrICAgICAgICAgICA9IHByb3RvLndlZWtzICAgICAgICA9IGdldFNldFdlZWs7XG4gICAgcHJvdG8uaXNvV2VlayAgICAgICAgPSBwcm90by5pc29XZWVrcyAgICAgPSBnZXRTZXRJU09XZWVrO1xuICAgIHByb3RvLndlZWtzSW5ZZWFyICAgID0gZ2V0V2Vla3NJblllYXI7XG4gICAgcHJvdG8uaXNvV2Vla3NJblllYXIgPSBnZXRJU09XZWVrc0luWWVhcjtcbiAgICBwcm90by5kYXRlICAgICAgID0gZ2V0U2V0RGF5T2ZNb250aDtcbiAgICBwcm90by5kYXkgICAgICAgID0gcHJvdG8uZGF5cyAgICAgICAgICAgICA9IGdldFNldERheU9mV2VlaztcbiAgICBwcm90by53ZWVrZGF5ICAgID0gZ2V0U2V0TG9jYWxlRGF5T2ZXZWVrO1xuICAgIHByb3RvLmlzb1dlZWtkYXkgPSBnZXRTZXRJU09EYXlPZldlZWs7XG4gICAgcHJvdG8uZGF5T2ZZZWFyICA9IGdldFNldERheU9mWWVhcjtcbiAgICBwcm90by5ob3VyID0gcHJvdG8uaG91cnMgPSBnZXRTZXRIb3VyO1xuICAgIHByb3RvLm1pbnV0ZSA9IHByb3RvLm1pbnV0ZXMgPSBnZXRTZXRNaW51dGU7XG4gICAgcHJvdG8uc2Vjb25kID0gcHJvdG8uc2Vjb25kcyA9IGdldFNldFNlY29uZDtcbiAgICBwcm90by5taWxsaXNlY29uZCA9IHByb3RvLm1pbGxpc2Vjb25kcyA9IGdldFNldE1pbGxpc2Vjb25kO1xuICAgIHByb3RvLnV0Y09mZnNldCAgICAgICAgICAgID0gZ2V0U2V0T2Zmc2V0O1xuICAgIHByb3RvLnV0YyAgICAgICAgICAgICAgICAgID0gc2V0T2Zmc2V0VG9VVEM7XG4gICAgcHJvdG8ubG9jYWwgICAgICAgICAgICAgICAgPSBzZXRPZmZzZXRUb0xvY2FsO1xuICAgIHByb3RvLnBhcnNlWm9uZSAgICAgICAgICAgID0gc2V0T2Zmc2V0VG9QYXJzZWRPZmZzZXQ7XG4gICAgcHJvdG8uaGFzQWxpZ25lZEhvdXJPZmZzZXQgPSBoYXNBbGlnbmVkSG91ck9mZnNldDtcbiAgICBwcm90by5pc0RTVCAgICAgICAgICAgICAgICA9IGlzRGF5bGlnaHRTYXZpbmdUaW1lO1xuICAgIHByb3RvLmlzTG9jYWwgICAgICAgICAgICAgID0gaXNMb2NhbDtcbiAgICBwcm90by5pc1V0Y09mZnNldCAgICAgICAgICA9IGlzVXRjT2Zmc2V0O1xuICAgIHByb3RvLmlzVXRjICAgICAgICAgICAgICAgID0gaXNVdGM7XG4gICAgcHJvdG8uaXNVVEMgICAgICAgICAgICAgICAgPSBpc1V0YztcbiAgICBwcm90by56b25lQWJiciA9IGdldFpvbmVBYmJyO1xuICAgIHByb3RvLnpvbmVOYW1lID0gZ2V0Wm9uZU5hbWU7XG4gICAgcHJvdG8uZGF0ZXMgID0gZGVwcmVjYXRlKCdkYXRlcyBhY2Nlc3NvciBpcyBkZXByZWNhdGVkLiBVc2UgZGF0ZSBpbnN0ZWFkLicsIGdldFNldERheU9mTW9udGgpO1xuICAgIHByb3RvLm1vbnRocyA9IGRlcHJlY2F0ZSgnbW9udGhzIGFjY2Vzc29yIGlzIGRlcHJlY2F0ZWQuIFVzZSBtb250aCBpbnN0ZWFkJywgZ2V0U2V0TW9udGgpO1xuICAgIHByb3RvLnllYXJzICA9IGRlcHJlY2F0ZSgneWVhcnMgYWNjZXNzb3IgaXMgZGVwcmVjYXRlZC4gVXNlIHllYXIgaW5zdGVhZCcsIGdldFNldFllYXIpO1xuICAgIHByb3RvLnpvbmUgICA9IGRlcHJlY2F0ZSgnbW9tZW50KCkuem9uZSBpcyBkZXByZWNhdGVkLCB1c2UgbW9tZW50KCkudXRjT2Zmc2V0IGluc3RlYWQuIGh0dHA6Ly9tb21lbnRqcy5jb20vZ3VpZGVzLyMvd2FybmluZ3Mvem9uZS8nLCBnZXRTZXRab25lKTtcbiAgICBwcm90by5pc0RTVFNoaWZ0ZWQgPSBkZXByZWNhdGUoJ2lzRFNUU2hpZnRlZCBpcyBkZXByZWNhdGVkLiBTZWUgaHR0cDovL21vbWVudGpzLmNvbS9ndWlkZXMvIy93YXJuaW5ncy9kc3Qtc2hpZnRlZC8gZm9yIG1vcmUgaW5mb3JtYXRpb24nLCBpc0RheWxpZ2h0U2F2aW5nVGltZVNoaWZ0ZWQpO1xuXG4gICAgZnVuY3Rpb24gY3JlYXRlVW5peCAoaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUxvY2FsKGlucHV0ICogMTAwMCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY3JlYXRlSW5ab25lICgpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUxvY2FsLmFwcGx5KG51bGwsIGFyZ3VtZW50cykucGFyc2Vab25lKCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcHJlUGFyc2VQb3N0Rm9ybWF0IChzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIHN0cmluZztcbiAgICB9XG5cbiAgICB2YXIgcHJvdG8kMSA9IExvY2FsZS5wcm90b3R5cGU7XG5cbiAgICBwcm90byQxLmNhbGVuZGFyICAgICAgICA9IGNhbGVuZGFyO1xuICAgIHByb3RvJDEubG9uZ0RhdGVGb3JtYXQgID0gbG9uZ0RhdGVGb3JtYXQ7XG4gICAgcHJvdG8kMS5pbnZhbGlkRGF0ZSAgICAgPSBpbnZhbGlkRGF0ZTtcbiAgICBwcm90byQxLm9yZGluYWwgICAgICAgICA9IG9yZGluYWw7XG4gICAgcHJvdG8kMS5wcmVwYXJzZSAgICAgICAgPSBwcmVQYXJzZVBvc3RGb3JtYXQ7XG4gICAgcHJvdG8kMS5wb3N0Zm9ybWF0ICAgICAgPSBwcmVQYXJzZVBvc3RGb3JtYXQ7XG4gICAgcHJvdG8kMS5yZWxhdGl2ZVRpbWUgICAgPSByZWxhdGl2ZVRpbWU7XG4gICAgcHJvdG8kMS5wYXN0RnV0dXJlICAgICAgPSBwYXN0RnV0dXJlO1xuICAgIHByb3RvJDEuc2V0ICAgICAgICAgICAgID0gc2V0O1xuXG4gICAgcHJvdG8kMS5tb250aHMgICAgICAgICAgICA9ICAgICAgICBsb2NhbGVNb250aHM7XG4gICAgcHJvdG8kMS5tb250aHNTaG9ydCAgICAgICA9ICAgICAgICBsb2NhbGVNb250aHNTaG9ydDtcbiAgICBwcm90byQxLm1vbnRoc1BhcnNlICAgICAgID0gICAgICAgIGxvY2FsZU1vbnRoc1BhcnNlO1xuICAgIHByb3RvJDEubW9udGhzUmVnZXggICAgICAgPSBtb250aHNSZWdleDtcbiAgICBwcm90byQxLm1vbnRoc1Nob3J0UmVnZXggID0gbW9udGhzU2hvcnRSZWdleDtcbiAgICBwcm90byQxLndlZWsgPSBsb2NhbGVXZWVrO1xuICAgIHByb3RvJDEuZmlyc3REYXlPZlllYXIgPSBsb2NhbGVGaXJzdERheU9mWWVhcjtcbiAgICBwcm90byQxLmZpcnN0RGF5T2ZXZWVrID0gbG9jYWxlRmlyc3REYXlPZldlZWs7XG5cbiAgICBwcm90byQxLndlZWtkYXlzICAgICAgID0gICAgICAgIGxvY2FsZVdlZWtkYXlzO1xuICAgIHByb3RvJDEud2Vla2RheXNNaW4gICAgPSAgICAgICAgbG9jYWxlV2Vla2RheXNNaW47XG4gICAgcHJvdG8kMS53ZWVrZGF5c1Nob3J0ICA9ICAgICAgICBsb2NhbGVXZWVrZGF5c1Nob3J0O1xuICAgIHByb3RvJDEud2Vla2RheXNQYXJzZSAgPSAgICAgICAgbG9jYWxlV2Vla2RheXNQYXJzZTtcblxuICAgIHByb3RvJDEud2Vla2RheXNSZWdleCAgICAgICA9ICAgICAgICB3ZWVrZGF5c1JlZ2V4O1xuICAgIHByb3RvJDEud2Vla2RheXNTaG9ydFJlZ2V4ICA9ICAgICAgICB3ZWVrZGF5c1Nob3J0UmVnZXg7XG4gICAgcHJvdG8kMS53ZWVrZGF5c01pblJlZ2V4ICAgID0gICAgICAgIHdlZWtkYXlzTWluUmVnZXg7XG5cbiAgICBwcm90byQxLmlzUE0gPSBsb2NhbGVJc1BNO1xuICAgIHByb3RvJDEubWVyaWRpZW0gPSBsb2NhbGVNZXJpZGllbTtcblxuICAgIGZ1bmN0aW9uIGdldCQxIChmb3JtYXQsIGluZGV4LCBmaWVsZCwgc2V0dGVyKSB7XG4gICAgICAgIHZhciBsb2NhbGUgPSBnZXRMb2NhbGUoKTtcbiAgICAgICAgdmFyIHV0YyA9IGNyZWF0ZVVUQygpLnNldChzZXR0ZXIsIGluZGV4KTtcbiAgICAgICAgcmV0dXJuIGxvY2FsZVtmaWVsZF0odXRjLCBmb3JtYXQpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxpc3RNb250aHNJbXBsIChmb3JtYXQsIGluZGV4LCBmaWVsZCkge1xuICAgICAgICBpZiAoaXNOdW1iZXIoZm9ybWF0KSkge1xuICAgICAgICAgICAgaW5kZXggPSBmb3JtYXQ7XG4gICAgICAgICAgICBmb3JtYXQgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cblxuICAgICAgICBmb3JtYXQgPSBmb3JtYXQgfHwgJyc7XG5cbiAgICAgICAgaWYgKGluZGV4ICE9IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBnZXQkMShmb3JtYXQsIGluZGV4LCBmaWVsZCwgJ21vbnRoJyk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgaTtcbiAgICAgICAgdmFyIG91dCA9IFtdO1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMTI7IGkrKykge1xuICAgICAgICAgICAgb3V0W2ldID0gZ2V0JDEoZm9ybWF0LCBpLCBmaWVsZCwgJ21vbnRoJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG91dDtcbiAgICB9XG5cbiAgICAvLyAoKVxuICAgIC8vICg1KVxuICAgIC8vIChmbXQsIDUpXG4gICAgLy8gKGZtdClcbiAgICAvLyAodHJ1ZSlcbiAgICAvLyAodHJ1ZSwgNSlcbiAgICAvLyAodHJ1ZSwgZm10LCA1KVxuICAgIC8vICh0cnVlLCBmbXQpXG4gICAgZnVuY3Rpb24gbGlzdFdlZWtkYXlzSW1wbCAobG9jYWxlU29ydGVkLCBmb3JtYXQsIGluZGV4LCBmaWVsZCkge1xuICAgICAgICBpZiAodHlwZW9mIGxvY2FsZVNvcnRlZCA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgICAgICBpZiAoaXNOdW1iZXIoZm9ybWF0KSkge1xuICAgICAgICAgICAgICAgIGluZGV4ID0gZm9ybWF0O1xuICAgICAgICAgICAgICAgIGZvcm1hdCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9ybWF0ID0gZm9ybWF0IHx8ICcnO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZm9ybWF0ID0gbG9jYWxlU29ydGVkO1xuICAgICAgICAgICAgaW5kZXggPSBmb3JtYXQ7XG4gICAgICAgICAgICBsb2NhbGVTb3J0ZWQgPSBmYWxzZTtcblxuICAgICAgICAgICAgaWYgKGlzTnVtYmVyKGZvcm1hdCkpIHtcbiAgICAgICAgICAgICAgICBpbmRleCA9IGZvcm1hdDtcbiAgICAgICAgICAgICAgICBmb3JtYXQgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZvcm1hdCA9IGZvcm1hdCB8fCAnJztcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBsb2NhbGUgPSBnZXRMb2NhbGUoKSxcbiAgICAgICAgICAgIHNoaWZ0ID0gbG9jYWxlU29ydGVkID8gbG9jYWxlLl93ZWVrLmRvdyA6IDA7XG5cbiAgICAgICAgaWYgKGluZGV4ICE9IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBnZXQkMShmb3JtYXQsIChpbmRleCArIHNoaWZ0KSAlIDcsIGZpZWxkLCAnZGF5Jyk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgaTtcbiAgICAgICAgdmFyIG91dCA9IFtdO1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgNzsgaSsrKSB7XG4gICAgICAgICAgICBvdXRbaV0gPSBnZXQkMShmb3JtYXQsIChpICsgc2hpZnQpICUgNywgZmllbGQsICdkYXknKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb3V0O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxpc3RNb250aHMgKGZvcm1hdCwgaW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIGxpc3RNb250aHNJbXBsKGZvcm1hdCwgaW5kZXgsICdtb250aHMnKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsaXN0TW9udGhzU2hvcnQgKGZvcm1hdCwgaW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIGxpc3RNb250aHNJbXBsKGZvcm1hdCwgaW5kZXgsICdtb250aHNTaG9ydCcpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxpc3RXZWVrZGF5cyAobG9jYWxlU29ydGVkLCBmb3JtYXQsIGluZGV4KSB7XG4gICAgICAgIHJldHVybiBsaXN0V2Vla2RheXNJbXBsKGxvY2FsZVNvcnRlZCwgZm9ybWF0LCBpbmRleCwgJ3dlZWtkYXlzJyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbGlzdFdlZWtkYXlzU2hvcnQgKGxvY2FsZVNvcnRlZCwgZm9ybWF0LCBpbmRleCkge1xuICAgICAgICByZXR1cm4gbGlzdFdlZWtkYXlzSW1wbChsb2NhbGVTb3J0ZWQsIGZvcm1hdCwgaW5kZXgsICd3ZWVrZGF5c1Nob3J0Jyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbGlzdFdlZWtkYXlzTWluIChsb2NhbGVTb3J0ZWQsIGZvcm1hdCwgaW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIGxpc3RXZWVrZGF5c0ltcGwobG9jYWxlU29ydGVkLCBmb3JtYXQsIGluZGV4LCAnd2Vla2RheXNNaW4nKTtcbiAgICB9XG5cbiAgICBnZXRTZXRHbG9iYWxMb2NhbGUoJ2VuJywge1xuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn0odGh8c3R8bmR8cmQpLyxcbiAgICAgICAgb3JkaW5hbCA6IGZ1bmN0aW9uIChudW1iZXIpIHtcbiAgICAgICAgICAgIHZhciBiID0gbnVtYmVyICUgMTAsXG4gICAgICAgICAgICAgICAgb3V0cHV0ID0gKHRvSW50KG51bWJlciAlIDEwMCAvIDEwKSA9PT0gMSkgPyAndGgnIDpcbiAgICAgICAgICAgICAgICAoYiA9PT0gMSkgPyAnc3QnIDpcbiAgICAgICAgICAgICAgICAoYiA9PT0gMikgPyAnbmQnIDpcbiAgICAgICAgICAgICAgICAoYiA9PT0gMykgPyAncmQnIDogJ3RoJztcbiAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyBvdXRwdXQ7XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIC8vIFNpZGUgZWZmZWN0IGltcG9ydHNcblxuICAgIGhvb2tzLmxhbmcgPSBkZXByZWNhdGUoJ21vbWVudC5sYW5nIGlzIGRlcHJlY2F0ZWQuIFVzZSBtb21lbnQubG9jYWxlIGluc3RlYWQuJywgZ2V0U2V0R2xvYmFsTG9jYWxlKTtcbiAgICBob29rcy5sYW5nRGF0YSA9IGRlcHJlY2F0ZSgnbW9tZW50LmxhbmdEYXRhIGlzIGRlcHJlY2F0ZWQuIFVzZSBtb21lbnQubG9jYWxlRGF0YSBpbnN0ZWFkLicsIGdldExvY2FsZSk7XG5cbiAgICB2YXIgbWF0aEFicyA9IE1hdGguYWJzO1xuXG4gICAgZnVuY3Rpb24gYWJzICgpIHtcbiAgICAgICAgdmFyIGRhdGEgICAgICAgICAgID0gdGhpcy5fZGF0YTtcblxuICAgICAgICB0aGlzLl9taWxsaXNlY29uZHMgPSBtYXRoQWJzKHRoaXMuX21pbGxpc2Vjb25kcyk7XG4gICAgICAgIHRoaXMuX2RheXMgICAgICAgICA9IG1hdGhBYnModGhpcy5fZGF5cyk7XG4gICAgICAgIHRoaXMuX21vbnRocyAgICAgICA9IG1hdGhBYnModGhpcy5fbW9udGhzKTtcblxuICAgICAgICBkYXRhLm1pbGxpc2Vjb25kcyAgPSBtYXRoQWJzKGRhdGEubWlsbGlzZWNvbmRzKTtcbiAgICAgICAgZGF0YS5zZWNvbmRzICAgICAgID0gbWF0aEFicyhkYXRhLnNlY29uZHMpO1xuICAgICAgICBkYXRhLm1pbnV0ZXMgICAgICAgPSBtYXRoQWJzKGRhdGEubWludXRlcyk7XG4gICAgICAgIGRhdGEuaG91cnMgICAgICAgICA9IG1hdGhBYnMoZGF0YS5ob3Vycyk7XG4gICAgICAgIGRhdGEubW9udGhzICAgICAgICA9IG1hdGhBYnMoZGF0YS5tb250aHMpO1xuICAgICAgICBkYXRhLnllYXJzICAgICAgICAgPSBtYXRoQWJzKGRhdGEueWVhcnMpO1xuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGFkZFN1YnRyYWN0JDEgKGR1cmF0aW9uLCBpbnB1dCwgdmFsdWUsIGRpcmVjdGlvbikge1xuICAgICAgICB2YXIgb3RoZXIgPSBjcmVhdGVEdXJhdGlvbihpbnB1dCwgdmFsdWUpO1xuXG4gICAgICAgIGR1cmF0aW9uLl9taWxsaXNlY29uZHMgKz0gZGlyZWN0aW9uICogb3RoZXIuX21pbGxpc2Vjb25kcztcbiAgICAgICAgZHVyYXRpb24uX2RheXMgICAgICAgICArPSBkaXJlY3Rpb24gKiBvdGhlci5fZGF5cztcbiAgICAgICAgZHVyYXRpb24uX21vbnRocyAgICAgICArPSBkaXJlY3Rpb24gKiBvdGhlci5fbW9udGhzO1xuXG4gICAgICAgIHJldHVybiBkdXJhdGlvbi5fYnViYmxlKCk7XG4gICAgfVxuXG4gICAgLy8gc3VwcG9ydHMgb25seSAyLjAtc3R5bGUgYWRkKDEsICdzJykgb3IgYWRkKGR1cmF0aW9uKVxuICAgIGZ1bmN0aW9uIGFkZCQxIChpbnB1dCwgdmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIGFkZFN1YnRyYWN0JDEodGhpcywgaW5wdXQsIHZhbHVlLCAxKTtcbiAgICB9XG5cbiAgICAvLyBzdXBwb3J0cyBvbmx5IDIuMC1zdHlsZSBzdWJ0cmFjdCgxLCAncycpIG9yIHN1YnRyYWN0KGR1cmF0aW9uKVxuICAgIGZ1bmN0aW9uIHN1YnRyYWN0JDEgKGlucHV0LCB2YWx1ZSkge1xuICAgICAgICByZXR1cm4gYWRkU3VidHJhY3QkMSh0aGlzLCBpbnB1dCwgdmFsdWUsIC0xKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBhYnNDZWlsIChudW1iZXIpIHtcbiAgICAgICAgaWYgKG51bWJlciA8IDApIHtcbiAgICAgICAgICAgIHJldHVybiBNYXRoLmZsb29yKG51bWJlcik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gTWF0aC5jZWlsKG51bWJlcik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBidWJibGUgKCkge1xuICAgICAgICB2YXIgbWlsbGlzZWNvbmRzID0gdGhpcy5fbWlsbGlzZWNvbmRzO1xuICAgICAgICB2YXIgZGF5cyAgICAgICAgID0gdGhpcy5fZGF5cztcbiAgICAgICAgdmFyIG1vbnRocyAgICAgICA9IHRoaXMuX21vbnRocztcbiAgICAgICAgdmFyIGRhdGEgICAgICAgICA9IHRoaXMuX2RhdGE7XG4gICAgICAgIHZhciBzZWNvbmRzLCBtaW51dGVzLCBob3VycywgeWVhcnMsIG1vbnRoc0Zyb21EYXlzO1xuXG4gICAgICAgIC8vIGlmIHdlIGhhdmUgYSBtaXggb2YgcG9zaXRpdmUgYW5kIG5lZ2F0aXZlIHZhbHVlcywgYnViYmxlIGRvd24gZmlyc3RcbiAgICAgICAgLy8gY2hlY2s6IGh0dHBzOi8vZ2l0aHViLmNvbS9tb21lbnQvbW9tZW50L2lzc3Vlcy8yMTY2XG4gICAgICAgIGlmICghKChtaWxsaXNlY29uZHMgPj0gMCAmJiBkYXlzID49IDAgJiYgbW9udGhzID49IDApIHx8XG4gICAgICAgICAgICAgICAgKG1pbGxpc2Vjb25kcyA8PSAwICYmIGRheXMgPD0gMCAmJiBtb250aHMgPD0gMCkpKSB7XG4gICAgICAgICAgICBtaWxsaXNlY29uZHMgKz0gYWJzQ2VpbChtb250aHNUb0RheXMobW9udGhzKSArIGRheXMpICogODY0ZTU7XG4gICAgICAgICAgICBkYXlzID0gMDtcbiAgICAgICAgICAgIG1vbnRocyA9IDA7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBUaGUgZm9sbG93aW5nIGNvZGUgYnViYmxlcyB1cCB2YWx1ZXMsIHNlZSB0aGUgdGVzdHMgZm9yXG4gICAgICAgIC8vIGV4YW1wbGVzIG9mIHdoYXQgdGhhdCBtZWFucy5cbiAgICAgICAgZGF0YS5taWxsaXNlY29uZHMgPSBtaWxsaXNlY29uZHMgJSAxMDAwO1xuXG4gICAgICAgIHNlY29uZHMgICAgICAgICAgID0gYWJzRmxvb3IobWlsbGlzZWNvbmRzIC8gMTAwMCk7XG4gICAgICAgIGRhdGEuc2Vjb25kcyAgICAgID0gc2Vjb25kcyAlIDYwO1xuXG4gICAgICAgIG1pbnV0ZXMgICAgICAgICAgID0gYWJzRmxvb3Ioc2Vjb25kcyAvIDYwKTtcbiAgICAgICAgZGF0YS5taW51dGVzICAgICAgPSBtaW51dGVzICUgNjA7XG5cbiAgICAgICAgaG91cnMgICAgICAgICAgICAgPSBhYnNGbG9vcihtaW51dGVzIC8gNjApO1xuICAgICAgICBkYXRhLmhvdXJzICAgICAgICA9IGhvdXJzICUgMjQ7XG5cbiAgICAgICAgZGF5cyArPSBhYnNGbG9vcihob3VycyAvIDI0KTtcblxuICAgICAgICAvLyBjb252ZXJ0IGRheXMgdG8gbW9udGhzXG4gICAgICAgIG1vbnRoc0Zyb21EYXlzID0gYWJzRmxvb3IoZGF5c1RvTW9udGhzKGRheXMpKTtcbiAgICAgICAgbW9udGhzICs9IG1vbnRoc0Zyb21EYXlzO1xuICAgICAgICBkYXlzIC09IGFic0NlaWwobW9udGhzVG9EYXlzKG1vbnRoc0Zyb21EYXlzKSk7XG5cbiAgICAgICAgLy8gMTIgbW9udGhzIC0+IDEgeWVhclxuICAgICAgICB5ZWFycyA9IGFic0Zsb29yKG1vbnRocyAvIDEyKTtcbiAgICAgICAgbW9udGhzICU9IDEyO1xuXG4gICAgICAgIGRhdGEuZGF5cyAgID0gZGF5cztcbiAgICAgICAgZGF0YS5tb250aHMgPSBtb250aHM7XG4gICAgICAgIGRhdGEueWVhcnMgID0geWVhcnM7XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZGF5c1RvTW9udGhzIChkYXlzKSB7XG4gICAgICAgIC8vIDQwMCB5ZWFycyBoYXZlIDE0NjA5NyBkYXlzICh0YWtpbmcgaW50byBhY2NvdW50IGxlYXAgeWVhciBydWxlcylcbiAgICAgICAgLy8gNDAwIHllYXJzIGhhdmUgMTIgbW9udGhzID09PSA0ODAwXG4gICAgICAgIHJldHVybiBkYXlzICogNDgwMCAvIDE0NjA5NztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtb250aHNUb0RheXMgKG1vbnRocykge1xuICAgICAgICAvLyB0aGUgcmV2ZXJzZSBvZiBkYXlzVG9Nb250aHNcbiAgICAgICAgcmV0dXJuIG1vbnRocyAqIDE0NjA5NyAvIDQ4MDA7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYXMgKHVuaXRzKSB7XG4gICAgICAgIGlmICghdGhpcy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBOYU47XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGRheXM7XG4gICAgICAgIHZhciBtb250aHM7XG4gICAgICAgIHZhciBtaWxsaXNlY29uZHMgPSB0aGlzLl9taWxsaXNlY29uZHM7XG5cbiAgICAgICAgdW5pdHMgPSBub3JtYWxpemVVbml0cyh1bml0cyk7XG5cbiAgICAgICAgaWYgKHVuaXRzID09PSAnbW9udGgnIHx8IHVuaXRzID09PSAneWVhcicpIHtcbiAgICAgICAgICAgIGRheXMgICA9IHRoaXMuX2RheXMgICArIG1pbGxpc2Vjb25kcyAvIDg2NGU1O1xuICAgICAgICAgICAgbW9udGhzID0gdGhpcy5fbW9udGhzICsgZGF5c1RvTW9udGhzKGRheXMpO1xuICAgICAgICAgICAgcmV0dXJuIHVuaXRzID09PSAnbW9udGgnID8gbW9udGhzIDogbW9udGhzIC8gMTI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBoYW5kbGUgbWlsbGlzZWNvbmRzIHNlcGFyYXRlbHkgYmVjYXVzZSBvZiBmbG9hdGluZyBwb2ludCBtYXRoIGVycm9ycyAoaXNzdWUgIzE4NjcpXG4gICAgICAgICAgICBkYXlzID0gdGhpcy5fZGF5cyArIE1hdGgucm91bmQobW9udGhzVG9EYXlzKHRoaXMuX21vbnRocykpO1xuICAgICAgICAgICAgc3dpdGNoICh1bml0cykge1xuICAgICAgICAgICAgICAgIGNhc2UgJ3dlZWsnICAgOiByZXR1cm4gZGF5cyAvIDcgICAgICsgbWlsbGlzZWNvbmRzIC8gNjA0OGU1O1xuICAgICAgICAgICAgICAgIGNhc2UgJ2RheScgICAgOiByZXR1cm4gZGF5cyAgICAgICAgICsgbWlsbGlzZWNvbmRzIC8gODY0ZTU7XG4gICAgICAgICAgICAgICAgY2FzZSAnaG91cicgICA6IHJldHVybiBkYXlzICogMjQgICAgKyBtaWxsaXNlY29uZHMgLyAzNmU1O1xuICAgICAgICAgICAgICAgIGNhc2UgJ21pbnV0ZScgOiByZXR1cm4gZGF5cyAqIDE0NDAgICsgbWlsbGlzZWNvbmRzIC8gNmU0O1xuICAgICAgICAgICAgICAgIGNhc2UgJ3NlY29uZCcgOiByZXR1cm4gZGF5cyAqIDg2NDAwICsgbWlsbGlzZWNvbmRzIC8gMTAwMDtcbiAgICAgICAgICAgICAgICAvLyBNYXRoLmZsb29yIHByZXZlbnRzIGZsb2F0aW5nIHBvaW50IG1hdGggZXJyb3JzIGhlcmVcbiAgICAgICAgICAgICAgICBjYXNlICdtaWxsaXNlY29uZCc6IHJldHVybiBNYXRoLmZsb29yKGRheXMgKiA4NjRlNSkgKyBtaWxsaXNlY29uZHM7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDogdGhyb3cgbmV3IEVycm9yKCdVbmtub3duIHVuaXQgJyArIHVuaXRzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIFRPRE86IFVzZSB0aGlzLmFzKCdtcycpP1xuICAgIGZ1bmN0aW9uIHZhbHVlT2YkMSAoKSB7XG4gICAgICAgIGlmICghdGhpcy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBOYU47XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIHRoaXMuX21pbGxpc2Vjb25kcyArXG4gICAgICAgICAgICB0aGlzLl9kYXlzICogODY0ZTUgK1xuICAgICAgICAgICAgKHRoaXMuX21vbnRocyAlIDEyKSAqIDI1OTJlNiArXG4gICAgICAgICAgICB0b0ludCh0aGlzLl9tb250aHMgLyAxMikgKiAzMTUzNmU2XG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbWFrZUFzIChhbGlhcykge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYXMoYWxpYXMpO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIHZhciBhc01pbGxpc2Vjb25kcyA9IG1ha2VBcygnbXMnKTtcbiAgICB2YXIgYXNTZWNvbmRzICAgICAgPSBtYWtlQXMoJ3MnKTtcbiAgICB2YXIgYXNNaW51dGVzICAgICAgPSBtYWtlQXMoJ20nKTtcbiAgICB2YXIgYXNIb3VycyAgICAgICAgPSBtYWtlQXMoJ2gnKTtcbiAgICB2YXIgYXNEYXlzICAgICAgICAgPSBtYWtlQXMoJ2QnKTtcbiAgICB2YXIgYXNXZWVrcyAgICAgICAgPSBtYWtlQXMoJ3cnKTtcbiAgICB2YXIgYXNNb250aHMgICAgICAgPSBtYWtlQXMoJ00nKTtcbiAgICB2YXIgYXNZZWFycyAgICAgICAgPSBtYWtlQXMoJ3knKTtcblxuICAgIGZ1bmN0aW9uIGNsb25lJDEgKCkge1xuICAgICAgICByZXR1cm4gY3JlYXRlRHVyYXRpb24odGhpcyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0JDIgKHVuaXRzKSB7XG4gICAgICAgIHVuaXRzID0gbm9ybWFsaXplVW5pdHModW5pdHMpO1xuICAgICAgICByZXR1cm4gdGhpcy5pc1ZhbGlkKCkgPyB0aGlzW3VuaXRzICsgJ3MnXSgpIDogTmFOO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1ha2VHZXR0ZXIobmFtZSkge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaXNWYWxpZCgpID8gdGhpcy5fZGF0YVtuYW1lXSA6IE5hTjtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICB2YXIgbWlsbGlzZWNvbmRzID0gbWFrZUdldHRlcignbWlsbGlzZWNvbmRzJyk7XG4gICAgdmFyIHNlY29uZHMgICAgICA9IG1ha2VHZXR0ZXIoJ3NlY29uZHMnKTtcbiAgICB2YXIgbWludXRlcyAgICAgID0gbWFrZUdldHRlcignbWludXRlcycpO1xuICAgIHZhciBob3VycyAgICAgICAgPSBtYWtlR2V0dGVyKCdob3VycycpO1xuICAgIHZhciBkYXlzICAgICAgICAgPSBtYWtlR2V0dGVyKCdkYXlzJyk7XG4gICAgdmFyIG1vbnRocyAgICAgICA9IG1ha2VHZXR0ZXIoJ21vbnRocycpO1xuICAgIHZhciB5ZWFycyAgICAgICAgPSBtYWtlR2V0dGVyKCd5ZWFycycpO1xuXG4gICAgZnVuY3Rpb24gd2Vla3MgKCkge1xuICAgICAgICByZXR1cm4gYWJzRmxvb3IodGhpcy5kYXlzKCkgLyA3KTtcbiAgICB9XG5cbiAgICB2YXIgcm91bmQgPSBNYXRoLnJvdW5kO1xuICAgIHZhciB0aHJlc2hvbGRzID0ge1xuICAgICAgICBzczogNDQsICAgICAgICAgLy8gYSBmZXcgc2Vjb25kcyB0byBzZWNvbmRzXG4gICAgICAgIHMgOiA0NSwgICAgICAgICAvLyBzZWNvbmRzIHRvIG1pbnV0ZVxuICAgICAgICBtIDogNDUsICAgICAgICAgLy8gbWludXRlcyB0byBob3VyXG4gICAgICAgIGggOiAyMiwgICAgICAgICAvLyBob3VycyB0byBkYXlcbiAgICAgICAgZCA6IDI2LCAgICAgICAgIC8vIGRheXMgdG8gbW9udGhcbiAgICAgICAgTSA6IDExICAgICAgICAgIC8vIG1vbnRocyB0byB5ZWFyXG4gICAgfTtcblxuICAgIC8vIGhlbHBlciBmdW5jdGlvbiBmb3IgbW9tZW50LmZuLmZyb20sIG1vbWVudC5mbi5mcm9tTm93LCBhbmQgbW9tZW50LmR1cmF0aW9uLmZuLmh1bWFuaXplXG4gICAgZnVuY3Rpb24gc3Vic3RpdHV0ZVRpbWVBZ28oc3RyaW5nLCBudW1iZXIsIHdpdGhvdXRTdWZmaXgsIGlzRnV0dXJlLCBsb2NhbGUpIHtcbiAgICAgICAgcmV0dXJuIGxvY2FsZS5yZWxhdGl2ZVRpbWUobnVtYmVyIHx8IDEsICEhd2l0aG91dFN1ZmZpeCwgc3RyaW5nLCBpc0Z1dHVyZSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcmVsYXRpdmVUaW1lJDEgKHBvc05lZ0R1cmF0aW9uLCB3aXRob3V0U3VmZml4LCBsb2NhbGUpIHtcbiAgICAgICAgdmFyIGR1cmF0aW9uID0gY3JlYXRlRHVyYXRpb24ocG9zTmVnRHVyYXRpb24pLmFicygpO1xuICAgICAgICB2YXIgc2Vjb25kcyAgPSByb3VuZChkdXJhdGlvbi5hcygncycpKTtcbiAgICAgICAgdmFyIG1pbnV0ZXMgID0gcm91bmQoZHVyYXRpb24uYXMoJ20nKSk7XG4gICAgICAgIHZhciBob3VycyAgICA9IHJvdW5kKGR1cmF0aW9uLmFzKCdoJykpO1xuICAgICAgICB2YXIgZGF5cyAgICAgPSByb3VuZChkdXJhdGlvbi5hcygnZCcpKTtcbiAgICAgICAgdmFyIG1vbnRocyAgID0gcm91bmQoZHVyYXRpb24uYXMoJ00nKSk7XG4gICAgICAgIHZhciB5ZWFycyAgICA9IHJvdW5kKGR1cmF0aW9uLmFzKCd5JykpO1xuXG4gICAgICAgIHZhciBhID0gc2Vjb25kcyA8PSB0aHJlc2hvbGRzLnNzICYmIFsncycsIHNlY29uZHNdICB8fFxuICAgICAgICAgICAgICAgIHNlY29uZHMgPCB0aHJlc2hvbGRzLnMgICAmJiBbJ3NzJywgc2Vjb25kc10gfHxcbiAgICAgICAgICAgICAgICBtaW51dGVzIDw9IDEgICAgICAgICAgICAgJiYgWydtJ10gICAgICAgICAgIHx8XG4gICAgICAgICAgICAgICAgbWludXRlcyA8IHRocmVzaG9sZHMubSAgICYmIFsnbW0nLCBtaW51dGVzXSB8fFxuICAgICAgICAgICAgICAgIGhvdXJzICAgPD0gMSAgICAgICAgICAgICAmJiBbJ2gnXSAgICAgICAgICAgfHxcbiAgICAgICAgICAgICAgICBob3VycyAgIDwgdGhyZXNob2xkcy5oICAgJiYgWydoaCcsIGhvdXJzXSAgIHx8XG4gICAgICAgICAgICAgICAgZGF5cyAgICA8PSAxICAgICAgICAgICAgICYmIFsnZCddICAgICAgICAgICB8fFxuICAgICAgICAgICAgICAgIGRheXMgICAgPCB0aHJlc2hvbGRzLmQgICAmJiBbJ2RkJywgZGF5c10gICAgfHxcbiAgICAgICAgICAgICAgICBtb250aHMgIDw9IDEgICAgICAgICAgICAgJiYgWydNJ10gICAgICAgICAgIHx8XG4gICAgICAgICAgICAgICAgbW9udGhzICA8IHRocmVzaG9sZHMuTSAgICYmIFsnTU0nLCBtb250aHNdICB8fFxuICAgICAgICAgICAgICAgIHllYXJzICAgPD0gMSAgICAgICAgICAgICAmJiBbJ3knXSAgICAgICAgICAgfHwgWyd5eScsIHllYXJzXTtcblxuICAgICAgICBhWzJdID0gd2l0aG91dFN1ZmZpeDtcbiAgICAgICAgYVszXSA9ICtwb3NOZWdEdXJhdGlvbiA+IDA7XG4gICAgICAgIGFbNF0gPSBsb2NhbGU7XG4gICAgICAgIHJldHVybiBzdWJzdGl0dXRlVGltZUFnby5hcHBseShudWxsLCBhKTtcbiAgICB9XG5cbiAgICAvLyBUaGlzIGZ1bmN0aW9uIGFsbG93cyB5b3UgdG8gc2V0IHRoZSByb3VuZGluZyBmdW5jdGlvbiBmb3IgcmVsYXRpdmUgdGltZSBzdHJpbmdzXG4gICAgZnVuY3Rpb24gZ2V0U2V0UmVsYXRpdmVUaW1lUm91bmRpbmcgKHJvdW5kaW5nRnVuY3Rpb24pIHtcbiAgICAgICAgaWYgKHJvdW5kaW5nRnVuY3Rpb24gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIHJvdW5kO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2Yocm91bmRpbmdGdW5jdGlvbikgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHJvdW5kID0gcm91bmRpbmdGdW5jdGlvbjtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBUaGlzIGZ1bmN0aW9uIGFsbG93cyB5b3UgdG8gc2V0IGEgdGhyZXNob2xkIGZvciByZWxhdGl2ZSB0aW1lIHN0cmluZ3NcbiAgICBmdW5jdGlvbiBnZXRTZXRSZWxhdGl2ZVRpbWVUaHJlc2hvbGQgKHRocmVzaG9sZCwgbGltaXQpIHtcbiAgICAgICAgaWYgKHRocmVzaG9sZHNbdGhyZXNob2xkXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGxpbWl0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiB0aHJlc2hvbGRzW3RocmVzaG9sZF07XG4gICAgICAgIH1cbiAgICAgICAgdGhyZXNob2xkc1t0aHJlc2hvbGRdID0gbGltaXQ7XG4gICAgICAgIGlmICh0aHJlc2hvbGQgPT09ICdzJykge1xuICAgICAgICAgICAgdGhyZXNob2xkcy5zcyA9IGxpbWl0IC0gMTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBodW1hbml6ZSAod2l0aFN1ZmZpeCkge1xuICAgICAgICBpZiAoIXRoaXMuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkuaW52YWxpZERhdGUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBsb2NhbGUgPSB0aGlzLmxvY2FsZURhdGEoKTtcbiAgICAgICAgdmFyIG91dHB1dCA9IHJlbGF0aXZlVGltZSQxKHRoaXMsICF3aXRoU3VmZml4LCBsb2NhbGUpO1xuXG4gICAgICAgIGlmICh3aXRoU3VmZml4KSB7XG4gICAgICAgICAgICBvdXRwdXQgPSBsb2NhbGUucGFzdEZ1dHVyZSgrdGhpcywgb3V0cHV0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBsb2NhbGUucG9zdGZvcm1hdChvdXRwdXQpO1xuICAgIH1cblxuICAgIHZhciBhYnMkMSA9IE1hdGguYWJzO1xuXG4gICAgZnVuY3Rpb24gc2lnbih4KSB7XG4gICAgICAgIHJldHVybiAoKHggPiAwKSAtICh4IDwgMCkpIHx8ICt4O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHRvSVNPU3RyaW5nJDEoKSB7XG4gICAgICAgIC8vIGZvciBJU08gc3RyaW5ncyB3ZSBkbyBub3QgdXNlIHRoZSBub3JtYWwgYnViYmxpbmcgcnVsZXM6XG4gICAgICAgIC8vICAqIG1pbGxpc2Vjb25kcyBidWJibGUgdXAgdW50aWwgdGhleSBiZWNvbWUgaG91cnNcbiAgICAgICAgLy8gICogZGF5cyBkbyBub3QgYnViYmxlIGF0IGFsbFxuICAgICAgICAvLyAgKiBtb250aHMgYnViYmxlIHVwIHVudGlsIHRoZXkgYmVjb21lIHllYXJzXG4gICAgICAgIC8vIFRoaXMgaXMgYmVjYXVzZSB0aGVyZSBpcyBubyBjb250ZXh0LWZyZWUgY29udmVyc2lvbiBiZXR3ZWVuIGhvdXJzIGFuZCBkYXlzXG4gICAgICAgIC8vICh0aGluayBvZiBjbG9jayBjaGFuZ2VzKVxuICAgICAgICAvLyBhbmQgYWxzbyBub3QgYmV0d2VlbiBkYXlzIGFuZCBtb250aHMgKDI4LTMxIGRheXMgcGVyIG1vbnRoKVxuICAgICAgICBpZiAoIXRoaXMuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkuaW52YWxpZERhdGUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBzZWNvbmRzID0gYWJzJDEodGhpcy5fbWlsbGlzZWNvbmRzKSAvIDEwMDA7XG4gICAgICAgIHZhciBkYXlzICAgICAgICAgPSBhYnMkMSh0aGlzLl9kYXlzKTtcbiAgICAgICAgdmFyIG1vbnRocyAgICAgICA9IGFicyQxKHRoaXMuX21vbnRocyk7XG4gICAgICAgIHZhciBtaW51dGVzLCBob3VycywgeWVhcnM7XG5cbiAgICAgICAgLy8gMzYwMCBzZWNvbmRzIC0+IDYwIG1pbnV0ZXMgLT4gMSBob3VyXG4gICAgICAgIG1pbnV0ZXMgICAgICAgICAgID0gYWJzRmxvb3Ioc2Vjb25kcyAvIDYwKTtcbiAgICAgICAgaG91cnMgICAgICAgICAgICAgPSBhYnNGbG9vcihtaW51dGVzIC8gNjApO1xuICAgICAgICBzZWNvbmRzICU9IDYwO1xuICAgICAgICBtaW51dGVzICU9IDYwO1xuXG4gICAgICAgIC8vIDEyIG1vbnRocyAtPiAxIHllYXJcbiAgICAgICAgeWVhcnMgID0gYWJzRmxvb3IobW9udGhzIC8gMTIpO1xuICAgICAgICBtb250aHMgJT0gMTI7XG5cblxuICAgICAgICAvLyBpbnNwaXJlZCBieSBodHRwczovL2dpdGh1Yi5jb20vZG9yZGlsbGUvbW9tZW50LWlzb2R1cmF0aW9uL2Jsb2IvbWFzdGVyL21vbWVudC5pc29kdXJhdGlvbi5qc1xuICAgICAgICB2YXIgWSA9IHllYXJzO1xuICAgICAgICB2YXIgTSA9IG1vbnRocztcbiAgICAgICAgdmFyIEQgPSBkYXlzO1xuICAgICAgICB2YXIgaCA9IGhvdXJzO1xuICAgICAgICB2YXIgbSA9IG1pbnV0ZXM7XG4gICAgICAgIHZhciBzID0gc2Vjb25kcyA/IHNlY29uZHMudG9GaXhlZCgzKS5yZXBsYWNlKC9cXC4/MCskLywgJycpIDogJyc7XG4gICAgICAgIHZhciB0b3RhbCA9IHRoaXMuYXNTZWNvbmRzKCk7XG5cbiAgICAgICAgaWYgKCF0b3RhbCkge1xuICAgICAgICAgICAgLy8gdGhpcyBpcyB0aGUgc2FtZSBhcyBDIydzIChOb2RhKSBhbmQgcHl0aG9uIChpc29kYXRlKS4uLlxuICAgICAgICAgICAgLy8gYnV0IG5vdCBvdGhlciBKUyAoZ29vZy5kYXRlKVxuICAgICAgICAgICAgcmV0dXJuICdQMEQnO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHRvdGFsU2lnbiA9IHRvdGFsIDwgMCA/ICctJyA6ICcnO1xuICAgICAgICB2YXIgeW1TaWduID0gc2lnbih0aGlzLl9tb250aHMpICE9PSBzaWduKHRvdGFsKSA/ICctJyA6ICcnO1xuICAgICAgICB2YXIgZGF5c1NpZ24gPSBzaWduKHRoaXMuX2RheXMpICE9PSBzaWduKHRvdGFsKSA/ICctJyA6ICcnO1xuICAgICAgICB2YXIgaG1zU2lnbiA9IHNpZ24odGhpcy5fbWlsbGlzZWNvbmRzKSAhPT0gc2lnbih0b3RhbCkgPyAnLScgOiAnJztcblxuICAgICAgICByZXR1cm4gdG90YWxTaWduICsgJ1AnICtcbiAgICAgICAgICAgIChZID8geW1TaWduICsgWSArICdZJyA6ICcnKSArXG4gICAgICAgICAgICAoTSA/IHltU2lnbiArIE0gKyAnTScgOiAnJykgK1xuICAgICAgICAgICAgKEQgPyBkYXlzU2lnbiArIEQgKyAnRCcgOiAnJykgK1xuICAgICAgICAgICAgKChoIHx8IG0gfHwgcykgPyAnVCcgOiAnJykgK1xuICAgICAgICAgICAgKGggPyBobXNTaWduICsgaCArICdIJyA6ICcnKSArXG4gICAgICAgICAgICAobSA/IGhtc1NpZ24gKyBtICsgJ00nIDogJycpICtcbiAgICAgICAgICAgIChzID8gaG1zU2lnbiArIHMgKyAnUycgOiAnJyk7XG4gICAgfVxuXG4gICAgdmFyIHByb3RvJDIgPSBEdXJhdGlvbi5wcm90b3R5cGU7XG5cbiAgICBwcm90byQyLmlzVmFsaWQgICAgICAgID0gaXNWYWxpZCQxO1xuICAgIHByb3RvJDIuYWJzICAgICAgICAgICAgPSBhYnM7XG4gICAgcHJvdG8kMi5hZGQgICAgICAgICAgICA9IGFkZCQxO1xuICAgIHByb3RvJDIuc3VidHJhY3QgICAgICAgPSBzdWJ0cmFjdCQxO1xuICAgIHByb3RvJDIuYXMgICAgICAgICAgICAgPSBhcztcbiAgICBwcm90byQyLmFzTWlsbGlzZWNvbmRzID0gYXNNaWxsaXNlY29uZHM7XG4gICAgcHJvdG8kMi5hc1NlY29uZHMgICAgICA9IGFzU2Vjb25kcztcbiAgICBwcm90byQyLmFzTWludXRlcyAgICAgID0gYXNNaW51dGVzO1xuICAgIHByb3RvJDIuYXNIb3VycyAgICAgICAgPSBhc0hvdXJzO1xuICAgIHByb3RvJDIuYXNEYXlzICAgICAgICAgPSBhc0RheXM7XG4gICAgcHJvdG8kMi5hc1dlZWtzICAgICAgICA9IGFzV2Vla3M7XG4gICAgcHJvdG8kMi5hc01vbnRocyAgICAgICA9IGFzTW9udGhzO1xuICAgIHByb3RvJDIuYXNZZWFycyAgICAgICAgPSBhc1llYXJzO1xuICAgIHByb3RvJDIudmFsdWVPZiAgICAgICAgPSB2YWx1ZU9mJDE7XG4gICAgcHJvdG8kMi5fYnViYmxlICAgICAgICA9IGJ1YmJsZTtcbiAgICBwcm90byQyLmNsb25lICAgICAgICAgID0gY2xvbmUkMTtcbiAgICBwcm90byQyLmdldCAgICAgICAgICAgID0gZ2V0JDI7XG4gICAgcHJvdG8kMi5taWxsaXNlY29uZHMgICA9IG1pbGxpc2Vjb25kcztcbiAgICBwcm90byQyLnNlY29uZHMgICAgICAgID0gc2Vjb25kcztcbiAgICBwcm90byQyLm1pbnV0ZXMgICAgICAgID0gbWludXRlcztcbiAgICBwcm90byQyLmhvdXJzICAgICAgICAgID0gaG91cnM7XG4gICAgcHJvdG8kMi5kYXlzICAgICAgICAgICA9IGRheXM7XG4gICAgcHJvdG8kMi53ZWVrcyAgICAgICAgICA9IHdlZWtzO1xuICAgIHByb3RvJDIubW9udGhzICAgICAgICAgPSBtb250aHM7XG4gICAgcHJvdG8kMi55ZWFycyAgICAgICAgICA9IHllYXJzO1xuICAgIHByb3RvJDIuaHVtYW5pemUgICAgICAgPSBodW1hbml6ZTtcbiAgICBwcm90byQyLnRvSVNPU3RyaW5nICAgID0gdG9JU09TdHJpbmckMTtcbiAgICBwcm90byQyLnRvU3RyaW5nICAgICAgID0gdG9JU09TdHJpbmckMTtcbiAgICBwcm90byQyLnRvSlNPTiAgICAgICAgID0gdG9JU09TdHJpbmckMTtcbiAgICBwcm90byQyLmxvY2FsZSAgICAgICAgID0gbG9jYWxlO1xuICAgIHByb3RvJDIubG9jYWxlRGF0YSAgICAgPSBsb2NhbGVEYXRhO1xuXG4gICAgcHJvdG8kMi50b0lzb1N0cmluZyA9IGRlcHJlY2F0ZSgndG9Jc29TdHJpbmcoKSBpcyBkZXByZWNhdGVkLiBQbGVhc2UgdXNlIHRvSVNPU3RyaW5nKCkgaW5zdGVhZCAobm90aWNlIHRoZSBjYXBpdGFscyknLCB0b0lTT1N0cmluZyQxKTtcbiAgICBwcm90byQyLmxhbmcgPSBsYW5nO1xuXG4gICAgLy8gU2lkZSBlZmZlY3QgaW1wb3J0c1xuXG4gICAgLy8gRk9STUFUVElOR1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ1gnLCAwLCAwLCAndW5peCcpO1xuICAgIGFkZEZvcm1hdFRva2VuKCd4JywgMCwgMCwgJ3ZhbHVlT2YnKTtcblxuICAgIC8vIFBBUlNJTkdcblxuICAgIGFkZFJlZ2V4VG9rZW4oJ3gnLCBtYXRjaFNpZ25lZCk7XG4gICAgYWRkUmVnZXhUb2tlbignWCcsIG1hdGNoVGltZXN0YW1wKTtcbiAgICBhZGRQYXJzZVRva2VuKCdYJywgZnVuY3Rpb24gKGlucHV0LCBhcnJheSwgY29uZmlnKSB7XG4gICAgICAgIGNvbmZpZy5fZCA9IG5ldyBEYXRlKHBhcnNlRmxvYXQoaW5wdXQsIDEwKSAqIDEwMDApO1xuICAgIH0pO1xuICAgIGFkZFBhcnNlVG9rZW4oJ3gnLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5LCBjb25maWcpIHtcbiAgICAgICAgY29uZmlnLl9kID0gbmV3IERhdGUodG9JbnQoaW5wdXQpKTtcbiAgICB9KTtcblxuICAgIC8vIFNpZGUgZWZmZWN0IGltcG9ydHNcblxuXG4gICAgaG9va3MudmVyc2lvbiA9ICcyLjIyLjInO1xuXG4gICAgc2V0SG9va0NhbGxiYWNrKGNyZWF0ZUxvY2FsKTtcblxuICAgIGhvb2tzLmZuICAgICAgICAgICAgICAgICAgICA9IHByb3RvO1xuICAgIGhvb2tzLm1pbiAgICAgICAgICAgICAgICAgICA9IG1pbjtcbiAgICBob29rcy5tYXggICAgICAgICAgICAgICAgICAgPSBtYXg7XG4gICAgaG9va3Mubm93ICAgICAgICAgICAgICAgICAgID0gbm93O1xuICAgIGhvb2tzLnV0YyAgICAgICAgICAgICAgICAgICA9IGNyZWF0ZVVUQztcbiAgICBob29rcy51bml4ICAgICAgICAgICAgICAgICAgPSBjcmVhdGVVbml4O1xuICAgIGhvb2tzLm1vbnRocyAgICAgICAgICAgICAgICA9IGxpc3RNb250aHM7XG4gICAgaG9va3MuaXNEYXRlICAgICAgICAgICAgICAgID0gaXNEYXRlO1xuICAgIGhvb2tzLmxvY2FsZSAgICAgICAgICAgICAgICA9IGdldFNldEdsb2JhbExvY2FsZTtcbiAgICBob29rcy5pbnZhbGlkICAgICAgICAgICAgICAgPSBjcmVhdGVJbnZhbGlkO1xuICAgIGhvb2tzLmR1cmF0aW9uICAgICAgICAgICAgICA9IGNyZWF0ZUR1cmF0aW9uO1xuICAgIGhvb2tzLmlzTW9tZW50ICAgICAgICAgICAgICA9IGlzTW9tZW50O1xuICAgIGhvb2tzLndlZWtkYXlzICAgICAgICAgICAgICA9IGxpc3RXZWVrZGF5cztcbiAgICBob29rcy5wYXJzZVpvbmUgICAgICAgICAgICAgPSBjcmVhdGVJblpvbmU7XG4gICAgaG9va3MubG9jYWxlRGF0YSAgICAgICAgICAgID0gZ2V0TG9jYWxlO1xuICAgIGhvb2tzLmlzRHVyYXRpb24gICAgICAgICAgICA9IGlzRHVyYXRpb247XG4gICAgaG9va3MubW9udGhzU2hvcnQgICAgICAgICAgID0gbGlzdE1vbnRoc1Nob3J0O1xuICAgIGhvb2tzLndlZWtkYXlzTWluICAgICAgICAgICA9IGxpc3RXZWVrZGF5c01pbjtcbiAgICBob29rcy5kZWZpbmVMb2NhbGUgICAgICAgICAgPSBkZWZpbmVMb2NhbGU7XG4gICAgaG9va3MudXBkYXRlTG9jYWxlICAgICAgICAgID0gdXBkYXRlTG9jYWxlO1xuICAgIGhvb2tzLmxvY2FsZXMgICAgICAgICAgICAgICA9IGxpc3RMb2NhbGVzO1xuICAgIGhvb2tzLndlZWtkYXlzU2hvcnQgICAgICAgICA9IGxpc3RXZWVrZGF5c1Nob3J0O1xuICAgIGhvb2tzLm5vcm1hbGl6ZVVuaXRzICAgICAgICA9IG5vcm1hbGl6ZVVuaXRzO1xuICAgIGhvb2tzLnJlbGF0aXZlVGltZVJvdW5kaW5nICA9IGdldFNldFJlbGF0aXZlVGltZVJvdW5kaW5nO1xuICAgIGhvb2tzLnJlbGF0aXZlVGltZVRocmVzaG9sZCA9IGdldFNldFJlbGF0aXZlVGltZVRocmVzaG9sZDtcbiAgICBob29rcy5jYWxlbmRhckZvcm1hdCAgICAgICAgPSBnZXRDYWxlbmRhckZvcm1hdDtcbiAgICBob29rcy5wcm90b3R5cGUgICAgICAgICAgICAgPSBwcm90bztcblxuICAgIC8vIGN1cnJlbnRseSBIVE1MNSBpbnB1dCB0eXBlIG9ubHkgc3VwcG9ydHMgMjQtaG91ciBmb3JtYXRzXG4gICAgaG9va3MuSFRNTDVfRk1UID0ge1xuICAgICAgICBEQVRFVElNRV9MT0NBTDogJ1lZWVktTU0tRERUSEg6bW0nLCAgICAgICAgICAgICAvLyA8aW5wdXQgdHlwZT1cImRhdGV0aW1lLWxvY2FsXCIgLz5cbiAgICAgICAgREFURVRJTUVfTE9DQUxfU0VDT05EUzogJ1lZWVktTU0tRERUSEg6bW06c3MnLCAgLy8gPGlucHV0IHR5cGU9XCJkYXRldGltZS1sb2NhbFwiIHN0ZXA9XCIxXCIgLz5cbiAgICAgICAgREFURVRJTUVfTE9DQUxfTVM6ICdZWVlZLU1NLUREVEhIOm1tOnNzLlNTUycsICAgLy8gPGlucHV0IHR5cGU9XCJkYXRldGltZS1sb2NhbFwiIHN0ZXA9XCIwLjAwMVwiIC8+XG4gICAgICAgIERBVEU6ICdZWVlZLU1NLUREJywgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDxpbnB1dCB0eXBlPVwiZGF0ZVwiIC8+XG4gICAgICAgIFRJTUU6ICdISDptbScsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDxpbnB1dCB0eXBlPVwidGltZVwiIC8+XG4gICAgICAgIFRJTUVfU0VDT05EUzogJ0hIOm1tOnNzJywgICAgICAgICAgICAgICAgICAgICAgIC8vIDxpbnB1dCB0eXBlPVwidGltZVwiIHN0ZXA9XCIxXCIgLz5cbiAgICAgICAgVElNRV9NUzogJ0hIOm1tOnNzLlNTUycsICAgICAgICAgICAgICAgICAgICAgICAgLy8gPGlucHV0IHR5cGU9XCJ0aW1lXCIgc3RlcD1cIjAuMDAxXCIgLz5cbiAgICAgICAgV0VFSzogJ1lZWVktW1ddV1cnLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gPGlucHV0IHR5cGU9XCJ3ZWVrXCIgLz5cbiAgICAgICAgTU9OVEg6ICdZWVlZLU1NJyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gPGlucHV0IHR5cGU9XCJtb250aFwiIC8+XG4gICAgfTtcblxuICAgIHJldHVybiBob29rcztcblxufSkpKTsiLCIvKiFcbiAqIGpRdWVyeSBKYXZhU2NyaXB0IExpYnJhcnkgdjMuMy4xXG4gKiBodHRwczovL2pxdWVyeS5jb20vXG4gKlxuICogSW5jbHVkZXMgU2l6emxlLmpzXG4gKiBodHRwczovL3NpenpsZWpzLmNvbS9cbiAqXG4gKiBDb3B5cmlnaHQgSlMgRm91bmRhdGlvbiBhbmQgb3RoZXIgY29udHJpYnV0b3JzXG4gKiBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2VcbiAqIGh0dHBzOi8vanF1ZXJ5Lm9yZy9saWNlbnNlXG4gKlxuICogRGF0ZTogMjAxOC0wMS0yMFQxNzoyNFpcbiAqL1xuKCBmdW5jdGlvbiggZ2xvYmFsLCBmYWN0b3J5ICkge1xuXG5cdFwidXNlIHN0cmljdFwiO1xuXG5cdGlmICggdHlwZW9mIG1vZHVsZSA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgbW9kdWxlLmV4cG9ydHMgPT09IFwib2JqZWN0XCIgKSB7XG5cblx0XHQvLyBGb3IgQ29tbW9uSlMgYW5kIENvbW1vbkpTLWxpa2UgZW52aXJvbm1lbnRzIHdoZXJlIGEgcHJvcGVyIGB3aW5kb3dgXG5cdFx0Ly8gaXMgcHJlc2VudCwgZXhlY3V0ZSB0aGUgZmFjdG9yeSBhbmQgZ2V0IGpRdWVyeS5cblx0XHQvLyBGb3IgZW52aXJvbm1lbnRzIHRoYXQgZG8gbm90IGhhdmUgYSBgd2luZG93YCB3aXRoIGEgYGRvY3VtZW50YFxuXHRcdC8vIChzdWNoIGFzIE5vZGUuanMpLCBleHBvc2UgYSBmYWN0b3J5IGFzIG1vZHVsZS5leHBvcnRzLlxuXHRcdC8vIFRoaXMgYWNjZW50dWF0ZXMgdGhlIG5lZWQgZm9yIHRoZSBjcmVhdGlvbiBvZiBhIHJlYWwgYHdpbmRvd2AuXG5cdFx0Ly8gZS5nLiB2YXIgalF1ZXJ5ID0gcmVxdWlyZShcImpxdWVyeVwiKSh3aW5kb3cpO1xuXHRcdC8vIFNlZSB0aWNrZXQgIzE0NTQ5IGZvciBtb3JlIGluZm8uXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBnbG9iYWwuZG9jdW1lbnQgP1xuXHRcdFx0ZmFjdG9yeSggZ2xvYmFsLCB0cnVlICkgOlxuXHRcdFx0ZnVuY3Rpb24oIHcgKSB7XG5cdFx0XHRcdGlmICggIXcuZG9jdW1lbnQgKSB7XG5cdFx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKCBcImpRdWVyeSByZXF1aXJlcyBhIHdpbmRvdyB3aXRoIGEgZG9jdW1lbnRcIiApO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBmYWN0b3J5KCB3ICk7XG5cdFx0XHR9O1xuXHR9IGVsc2Uge1xuXHRcdGZhY3RvcnkoIGdsb2JhbCApO1xuXHR9XG5cbi8vIFBhc3MgdGhpcyBpZiB3aW5kb3cgaXMgbm90IGRlZmluZWQgeWV0XG59ICkoIHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgPyB3aW5kb3cgOiB0aGlzLCBmdW5jdGlvbiggd2luZG93LCBub0dsb2JhbCApIHtcblxuLy8gRWRnZSA8PSAxMiAtIDEzKywgRmlyZWZveCA8PTE4IC0gNDUrLCBJRSAxMCAtIDExLCBTYWZhcmkgNS4xIC0gOSssIGlPUyA2IC0gOS4xXG4vLyB0aHJvdyBleGNlcHRpb25zIHdoZW4gbm9uLXN0cmljdCBjb2RlIChlLmcuLCBBU1AuTkVUIDQuNSkgYWNjZXNzZXMgc3RyaWN0IG1vZGVcbi8vIGFyZ3VtZW50cy5jYWxsZWUuY2FsbGVyICh0cmFjLTEzMzM1KS4gQnV0IGFzIG9mIGpRdWVyeSAzLjAgKDIwMTYpLCBzdHJpY3QgbW9kZSBzaG91bGQgYmUgY29tbW9uXG4vLyBlbm91Z2ggdGhhdCBhbGwgc3VjaCBhdHRlbXB0cyBhcmUgZ3VhcmRlZCBpbiBhIHRyeSBibG9jay5cblwidXNlIHN0cmljdFwiO1xuXG52YXIgYXJyID0gW107XG5cbnZhciBkb2N1bWVudCA9IHdpbmRvdy5kb2N1bWVudDtcblxudmFyIGdldFByb3RvID0gT2JqZWN0LmdldFByb3RvdHlwZU9mO1xuXG52YXIgc2xpY2UgPSBhcnIuc2xpY2U7XG5cbnZhciBjb25jYXQgPSBhcnIuY29uY2F0O1xuXG52YXIgcHVzaCA9IGFyci5wdXNoO1xuXG52YXIgaW5kZXhPZiA9IGFyci5pbmRleE9mO1xuXG52YXIgY2xhc3MydHlwZSA9IHt9O1xuXG52YXIgdG9TdHJpbmcgPSBjbGFzczJ0eXBlLnRvU3RyaW5nO1xuXG52YXIgaGFzT3duID0gY2xhc3MydHlwZS5oYXNPd25Qcm9wZXJ0eTtcblxudmFyIGZuVG9TdHJpbmcgPSBoYXNPd24udG9TdHJpbmc7XG5cbnZhciBPYmplY3RGdW5jdGlvblN0cmluZyA9IGZuVG9TdHJpbmcuY2FsbCggT2JqZWN0ICk7XG5cbnZhciBzdXBwb3J0ID0ge307XG5cbnZhciBpc0Z1bmN0aW9uID0gZnVuY3Rpb24gaXNGdW5jdGlvbiggb2JqICkge1xuXG4gICAgICAvLyBTdXBwb3J0OiBDaHJvbWUgPD01NywgRmlyZWZveCA8PTUyXG4gICAgICAvLyBJbiBzb21lIGJyb3dzZXJzLCB0eXBlb2YgcmV0dXJucyBcImZ1bmN0aW9uXCIgZm9yIEhUTUwgPG9iamVjdD4gZWxlbWVudHNcbiAgICAgIC8vIChpLmUuLCBgdHlwZW9mIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwib2JqZWN0XCIgKSA9PT0gXCJmdW5jdGlvblwiYCkuXG4gICAgICAvLyBXZSBkb24ndCB3YW50IHRvIGNsYXNzaWZ5ICphbnkqIERPTSBub2RlIGFzIGEgZnVuY3Rpb24uXG4gICAgICByZXR1cm4gdHlwZW9mIG9iaiA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBvYmoubm9kZVR5cGUgIT09IFwibnVtYmVyXCI7XG4gIH07XG5cblxudmFyIGlzV2luZG93ID0gZnVuY3Rpb24gaXNXaW5kb3coIG9iaiApIHtcblx0XHRyZXR1cm4gb2JqICE9IG51bGwgJiYgb2JqID09PSBvYmoud2luZG93O1xuXHR9O1xuXG5cblxuXG5cdHZhciBwcmVzZXJ2ZWRTY3JpcHRBdHRyaWJ1dGVzID0ge1xuXHRcdHR5cGU6IHRydWUsXG5cdFx0c3JjOiB0cnVlLFxuXHRcdG5vTW9kdWxlOiB0cnVlXG5cdH07XG5cblx0ZnVuY3Rpb24gRE9NRXZhbCggY29kZSwgZG9jLCBub2RlICkge1xuXHRcdGRvYyA9IGRvYyB8fCBkb2N1bWVudDtcblxuXHRcdHZhciBpLFxuXHRcdFx0c2NyaXB0ID0gZG9jLmNyZWF0ZUVsZW1lbnQoIFwic2NyaXB0XCIgKTtcblxuXHRcdHNjcmlwdC50ZXh0ID0gY29kZTtcblx0XHRpZiAoIG5vZGUgKSB7XG5cdFx0XHRmb3IgKCBpIGluIHByZXNlcnZlZFNjcmlwdEF0dHJpYnV0ZXMgKSB7XG5cdFx0XHRcdGlmICggbm9kZVsgaSBdICkge1xuXHRcdFx0XHRcdHNjcmlwdFsgaSBdID0gbm9kZVsgaSBdO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGRvYy5oZWFkLmFwcGVuZENoaWxkKCBzY3JpcHQgKS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKCBzY3JpcHQgKTtcblx0fVxuXG5cbmZ1bmN0aW9uIHRvVHlwZSggb2JqICkge1xuXHRpZiAoIG9iaiA9PSBudWxsICkge1xuXHRcdHJldHVybiBvYmogKyBcIlwiO1xuXHR9XG5cblx0Ly8gU3VwcG9ydDogQW5kcm9pZCA8PTIuMyBvbmx5IChmdW5jdGlvbmlzaCBSZWdFeHApXG5cdHJldHVybiB0eXBlb2Ygb2JqID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBvYmogPT09IFwiZnVuY3Rpb25cIiA/XG5cdFx0Y2xhc3MydHlwZVsgdG9TdHJpbmcuY2FsbCggb2JqICkgXSB8fCBcIm9iamVjdFwiIDpcblx0XHR0eXBlb2Ygb2JqO1xufVxuLyogZ2xvYmFsIFN5bWJvbCAqL1xuLy8gRGVmaW5pbmcgdGhpcyBnbG9iYWwgaW4gLmVzbGludHJjLmpzb24gd291bGQgY3JlYXRlIGEgZGFuZ2VyIG9mIHVzaW5nIHRoZSBnbG9iYWxcbi8vIHVuZ3VhcmRlZCBpbiBhbm90aGVyIHBsYWNlLCBpdCBzZWVtcyBzYWZlciB0byBkZWZpbmUgZ2xvYmFsIG9ubHkgZm9yIHRoaXMgbW9kdWxlXG5cblxuXG52YXJcblx0dmVyc2lvbiA9IFwiMy4zLjFcIixcblxuXHQvLyBEZWZpbmUgYSBsb2NhbCBjb3B5IG9mIGpRdWVyeVxuXHRqUXVlcnkgPSBmdW5jdGlvbiggc2VsZWN0b3IsIGNvbnRleHQgKSB7XG5cblx0XHQvLyBUaGUgalF1ZXJ5IG9iamVjdCBpcyBhY3R1YWxseSBqdXN0IHRoZSBpbml0IGNvbnN0cnVjdG9yICdlbmhhbmNlZCdcblx0XHQvLyBOZWVkIGluaXQgaWYgalF1ZXJ5IGlzIGNhbGxlZCAoanVzdCBhbGxvdyBlcnJvciB0byBiZSB0aHJvd24gaWYgbm90IGluY2x1ZGVkKVxuXHRcdHJldHVybiBuZXcgalF1ZXJ5LmZuLmluaXQoIHNlbGVjdG9yLCBjb250ZXh0ICk7XG5cdH0sXG5cblx0Ly8gU3VwcG9ydDogQW5kcm9pZCA8PTQuMCBvbmx5XG5cdC8vIE1ha2Ugc3VyZSB3ZSB0cmltIEJPTSBhbmQgTkJTUFxuXHRydHJpbSA9IC9eW1xcc1xcdUZFRkZcXHhBMF0rfFtcXHNcXHVGRUZGXFx4QTBdKyQvZztcblxualF1ZXJ5LmZuID0galF1ZXJ5LnByb3RvdHlwZSA9IHtcblxuXHQvLyBUaGUgY3VycmVudCB2ZXJzaW9uIG9mIGpRdWVyeSBiZWluZyB1c2VkXG5cdGpxdWVyeTogdmVyc2lvbixcblxuXHRjb25zdHJ1Y3RvcjogalF1ZXJ5LFxuXG5cdC8vIFRoZSBkZWZhdWx0IGxlbmd0aCBvZiBhIGpRdWVyeSBvYmplY3QgaXMgMFxuXHRsZW5ndGg6IDAsXG5cblx0dG9BcnJheTogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHNsaWNlLmNhbGwoIHRoaXMgKTtcblx0fSxcblxuXHQvLyBHZXQgdGhlIE50aCBlbGVtZW50IGluIHRoZSBtYXRjaGVkIGVsZW1lbnQgc2V0IE9SXG5cdC8vIEdldCB0aGUgd2hvbGUgbWF0Y2hlZCBlbGVtZW50IHNldCBhcyBhIGNsZWFuIGFycmF5XG5cdGdldDogZnVuY3Rpb24oIG51bSApIHtcblxuXHRcdC8vIFJldHVybiBhbGwgdGhlIGVsZW1lbnRzIGluIGEgY2xlYW4gYXJyYXlcblx0XHRpZiAoIG51bSA9PSBudWxsICkge1xuXHRcdFx0cmV0dXJuIHNsaWNlLmNhbGwoIHRoaXMgKTtcblx0XHR9XG5cblx0XHQvLyBSZXR1cm4ganVzdCB0aGUgb25lIGVsZW1lbnQgZnJvbSB0aGUgc2V0XG5cdFx0cmV0dXJuIG51bSA8IDAgPyB0aGlzWyBudW0gKyB0aGlzLmxlbmd0aCBdIDogdGhpc1sgbnVtIF07XG5cdH0sXG5cblx0Ly8gVGFrZSBhbiBhcnJheSBvZiBlbGVtZW50cyBhbmQgcHVzaCBpdCBvbnRvIHRoZSBzdGFja1xuXHQvLyAocmV0dXJuaW5nIHRoZSBuZXcgbWF0Y2hlZCBlbGVtZW50IHNldClcblx0cHVzaFN0YWNrOiBmdW5jdGlvbiggZWxlbXMgKSB7XG5cblx0XHQvLyBCdWlsZCBhIG5ldyBqUXVlcnkgbWF0Y2hlZCBlbGVtZW50IHNldFxuXHRcdHZhciByZXQgPSBqUXVlcnkubWVyZ2UoIHRoaXMuY29uc3RydWN0b3IoKSwgZWxlbXMgKTtcblxuXHRcdC8vIEFkZCB0aGUgb2xkIG9iamVjdCBvbnRvIHRoZSBzdGFjayAoYXMgYSByZWZlcmVuY2UpXG5cdFx0cmV0LnByZXZPYmplY3QgPSB0aGlzO1xuXG5cdFx0Ly8gUmV0dXJuIHRoZSBuZXdseS1mb3JtZWQgZWxlbWVudCBzZXRcblx0XHRyZXR1cm4gcmV0O1xuXHR9LFxuXG5cdC8vIEV4ZWN1dGUgYSBjYWxsYmFjayBmb3IgZXZlcnkgZWxlbWVudCBpbiB0aGUgbWF0Y2hlZCBzZXQuXG5cdGVhY2g6IGZ1bmN0aW9uKCBjYWxsYmFjayApIHtcblx0XHRyZXR1cm4galF1ZXJ5LmVhY2goIHRoaXMsIGNhbGxiYWNrICk7XG5cdH0sXG5cblx0bWFwOiBmdW5jdGlvbiggY2FsbGJhY2sgKSB7XG5cdFx0cmV0dXJuIHRoaXMucHVzaFN0YWNrKCBqUXVlcnkubWFwKCB0aGlzLCBmdW5jdGlvbiggZWxlbSwgaSApIHtcblx0XHRcdHJldHVybiBjYWxsYmFjay5jYWxsKCBlbGVtLCBpLCBlbGVtICk7XG5cdFx0fSApICk7XG5cdH0sXG5cblx0c2xpY2U6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiB0aGlzLnB1c2hTdGFjayggc2xpY2UuYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApICk7XG5cdH0sXG5cblx0Zmlyc3Q6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiB0aGlzLmVxKCAwICk7XG5cdH0sXG5cblx0bGFzdDogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHRoaXMuZXEoIC0xICk7XG5cdH0sXG5cblx0ZXE6IGZ1bmN0aW9uKCBpICkge1xuXHRcdHZhciBsZW4gPSB0aGlzLmxlbmd0aCxcblx0XHRcdGogPSAraSArICggaSA8IDAgPyBsZW4gOiAwICk7XG5cdFx0cmV0dXJuIHRoaXMucHVzaFN0YWNrKCBqID49IDAgJiYgaiA8IGxlbiA/IFsgdGhpc1sgaiBdIF0gOiBbXSApO1xuXHR9LFxuXG5cdGVuZDogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHRoaXMucHJldk9iamVjdCB8fCB0aGlzLmNvbnN0cnVjdG9yKCk7XG5cdH0sXG5cblx0Ly8gRm9yIGludGVybmFsIHVzZSBvbmx5LlxuXHQvLyBCZWhhdmVzIGxpa2UgYW4gQXJyYXkncyBtZXRob2QsIG5vdCBsaWtlIGEgalF1ZXJ5IG1ldGhvZC5cblx0cHVzaDogcHVzaCxcblx0c29ydDogYXJyLnNvcnQsXG5cdHNwbGljZTogYXJyLnNwbGljZVxufTtcblxualF1ZXJ5LmV4dGVuZCA9IGpRdWVyeS5mbi5leHRlbmQgPSBmdW5jdGlvbigpIHtcblx0dmFyIG9wdGlvbnMsIG5hbWUsIHNyYywgY29weSwgY29weUlzQXJyYXksIGNsb25lLFxuXHRcdHRhcmdldCA9IGFyZ3VtZW50c1sgMCBdIHx8IHt9LFxuXHRcdGkgPSAxLFxuXHRcdGxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGgsXG5cdFx0ZGVlcCA9IGZhbHNlO1xuXG5cdC8vIEhhbmRsZSBhIGRlZXAgY29weSBzaXR1YXRpb25cblx0aWYgKCB0eXBlb2YgdGFyZ2V0ID09PSBcImJvb2xlYW5cIiApIHtcblx0XHRkZWVwID0gdGFyZ2V0O1xuXG5cdFx0Ly8gU2tpcCB0aGUgYm9vbGVhbiBhbmQgdGhlIHRhcmdldFxuXHRcdHRhcmdldCA9IGFyZ3VtZW50c1sgaSBdIHx8IHt9O1xuXHRcdGkrKztcblx0fVxuXG5cdC8vIEhhbmRsZSBjYXNlIHdoZW4gdGFyZ2V0IGlzIGEgc3RyaW5nIG9yIHNvbWV0aGluZyAocG9zc2libGUgaW4gZGVlcCBjb3B5KVxuXHRpZiAoIHR5cGVvZiB0YXJnZXQgIT09IFwib2JqZWN0XCIgJiYgIWlzRnVuY3Rpb24oIHRhcmdldCApICkge1xuXHRcdHRhcmdldCA9IHt9O1xuXHR9XG5cblx0Ly8gRXh0ZW5kIGpRdWVyeSBpdHNlbGYgaWYgb25seSBvbmUgYXJndW1lbnQgaXMgcGFzc2VkXG5cdGlmICggaSA9PT0gbGVuZ3RoICkge1xuXHRcdHRhcmdldCA9IHRoaXM7XG5cdFx0aS0tO1xuXHR9XG5cblx0Zm9yICggOyBpIDwgbGVuZ3RoOyBpKysgKSB7XG5cblx0XHQvLyBPbmx5IGRlYWwgd2l0aCBub24tbnVsbC91bmRlZmluZWQgdmFsdWVzXG5cdFx0aWYgKCAoIG9wdGlvbnMgPSBhcmd1bWVudHNbIGkgXSApICE9IG51bGwgKSB7XG5cblx0XHRcdC8vIEV4dGVuZCB0aGUgYmFzZSBvYmplY3Rcblx0XHRcdGZvciAoIG5hbWUgaW4gb3B0aW9ucyApIHtcblx0XHRcdFx0c3JjID0gdGFyZ2V0WyBuYW1lIF07XG5cdFx0XHRcdGNvcHkgPSBvcHRpb25zWyBuYW1lIF07XG5cblx0XHRcdFx0Ly8gUHJldmVudCBuZXZlci1lbmRpbmcgbG9vcFxuXHRcdFx0XHRpZiAoIHRhcmdldCA9PT0gY29weSApIHtcblx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIFJlY3Vyc2UgaWYgd2UncmUgbWVyZ2luZyBwbGFpbiBvYmplY3RzIG9yIGFycmF5c1xuXHRcdFx0XHRpZiAoIGRlZXAgJiYgY29weSAmJiAoIGpRdWVyeS5pc1BsYWluT2JqZWN0KCBjb3B5ICkgfHxcblx0XHRcdFx0XHQoIGNvcHlJc0FycmF5ID0gQXJyYXkuaXNBcnJheSggY29weSApICkgKSApIHtcblxuXHRcdFx0XHRcdGlmICggY29weUlzQXJyYXkgKSB7XG5cdFx0XHRcdFx0XHRjb3B5SXNBcnJheSA9IGZhbHNlO1xuXHRcdFx0XHRcdFx0Y2xvbmUgPSBzcmMgJiYgQXJyYXkuaXNBcnJheSggc3JjICkgPyBzcmMgOiBbXTtcblxuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRjbG9uZSA9IHNyYyAmJiBqUXVlcnkuaXNQbGFpbk9iamVjdCggc3JjICkgPyBzcmMgOiB7fTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBOZXZlciBtb3ZlIG9yaWdpbmFsIG9iamVjdHMsIGNsb25lIHRoZW1cblx0XHRcdFx0XHR0YXJnZXRbIG5hbWUgXSA9IGpRdWVyeS5leHRlbmQoIGRlZXAsIGNsb25lLCBjb3B5ICk7XG5cblx0XHRcdFx0Ly8gRG9uJ3QgYnJpbmcgaW4gdW5kZWZpbmVkIHZhbHVlc1xuXHRcdFx0XHR9IGVsc2UgaWYgKCBjb3B5ICE9PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRcdFx0dGFyZ2V0WyBuYW1lIF0gPSBjb3B5O1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Ly8gUmV0dXJuIHRoZSBtb2RpZmllZCBvYmplY3Rcblx0cmV0dXJuIHRhcmdldDtcbn07XG5cbmpRdWVyeS5leHRlbmQoIHtcblxuXHQvLyBVbmlxdWUgZm9yIGVhY2ggY29weSBvZiBqUXVlcnkgb24gdGhlIHBhZ2Vcblx0ZXhwYW5kbzogXCJqUXVlcnlcIiArICggdmVyc2lvbiArIE1hdGgucmFuZG9tKCkgKS5yZXBsYWNlKCAvXFxEL2csIFwiXCIgKSxcblxuXHQvLyBBc3N1bWUgalF1ZXJ5IGlzIHJlYWR5IHdpdGhvdXQgdGhlIHJlYWR5IG1vZHVsZVxuXHRpc1JlYWR5OiB0cnVlLFxuXG5cdGVycm9yOiBmdW5jdGlvbiggbXNnICkge1xuXHRcdHRocm93IG5ldyBFcnJvciggbXNnICk7XG5cdH0sXG5cblx0bm9vcDogZnVuY3Rpb24oKSB7fSxcblxuXHRpc1BsYWluT2JqZWN0OiBmdW5jdGlvbiggb2JqICkge1xuXHRcdHZhciBwcm90bywgQ3RvcjtcblxuXHRcdC8vIERldGVjdCBvYnZpb3VzIG5lZ2F0aXZlc1xuXHRcdC8vIFVzZSB0b1N0cmluZyBpbnN0ZWFkIG9mIGpRdWVyeS50eXBlIHRvIGNhdGNoIGhvc3Qgb2JqZWN0c1xuXHRcdGlmICggIW9iaiB8fCB0b1N0cmluZy5jYWxsKCBvYmogKSAhPT0gXCJbb2JqZWN0IE9iamVjdF1cIiApIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHRwcm90byA9IGdldFByb3RvKCBvYmogKTtcblxuXHRcdC8vIE9iamVjdHMgd2l0aCBubyBwcm90b3R5cGUgKGUuZy4sIGBPYmplY3QuY3JlYXRlKCBudWxsIClgKSBhcmUgcGxhaW5cblx0XHRpZiAoICFwcm90byApIHtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblxuXHRcdC8vIE9iamVjdHMgd2l0aCBwcm90b3R5cGUgYXJlIHBsYWluIGlmZiB0aGV5IHdlcmUgY29uc3RydWN0ZWQgYnkgYSBnbG9iYWwgT2JqZWN0IGZ1bmN0aW9uXG5cdFx0Q3RvciA9IGhhc093bi5jYWxsKCBwcm90bywgXCJjb25zdHJ1Y3RvclwiICkgJiYgcHJvdG8uY29uc3RydWN0b3I7XG5cdFx0cmV0dXJuIHR5cGVvZiBDdG9yID09PSBcImZ1bmN0aW9uXCIgJiYgZm5Ub1N0cmluZy5jYWxsKCBDdG9yICkgPT09IE9iamVjdEZ1bmN0aW9uU3RyaW5nO1xuXHR9LFxuXG5cdGlzRW1wdHlPYmplY3Q6IGZ1bmN0aW9uKCBvYmogKSB7XG5cblx0XHQvKiBlc2xpbnQtZGlzYWJsZSBuby11bnVzZWQtdmFycyAqL1xuXHRcdC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vZXNsaW50L2VzbGludC9pc3N1ZXMvNjEyNVxuXHRcdHZhciBuYW1lO1xuXG5cdFx0Zm9yICggbmFtZSBpbiBvYmogKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHRcdHJldHVybiB0cnVlO1xuXHR9LFxuXG5cdC8vIEV2YWx1YXRlcyBhIHNjcmlwdCBpbiBhIGdsb2JhbCBjb250ZXh0XG5cdGdsb2JhbEV2YWw6IGZ1bmN0aW9uKCBjb2RlICkge1xuXHRcdERPTUV2YWwoIGNvZGUgKTtcblx0fSxcblxuXHRlYWNoOiBmdW5jdGlvbiggb2JqLCBjYWxsYmFjayApIHtcblx0XHR2YXIgbGVuZ3RoLCBpID0gMDtcblxuXHRcdGlmICggaXNBcnJheUxpa2UoIG9iaiApICkge1xuXHRcdFx0bGVuZ3RoID0gb2JqLmxlbmd0aDtcblx0XHRcdGZvciAoIDsgaSA8IGxlbmd0aDsgaSsrICkge1xuXHRcdFx0XHRpZiAoIGNhbGxiYWNrLmNhbGwoIG9ialsgaSBdLCBpLCBvYmpbIGkgXSApID09PSBmYWxzZSApIHtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRmb3IgKCBpIGluIG9iaiApIHtcblx0XHRcdFx0aWYgKCBjYWxsYmFjay5jYWxsKCBvYmpbIGkgXSwgaSwgb2JqWyBpIF0gKSA9PT0gZmFsc2UgKSB7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gb2JqO1xuXHR9LFxuXG5cdC8vIFN1cHBvcnQ6IEFuZHJvaWQgPD00LjAgb25seVxuXHR0cmltOiBmdW5jdGlvbiggdGV4dCApIHtcblx0XHRyZXR1cm4gdGV4dCA9PSBudWxsID9cblx0XHRcdFwiXCIgOlxuXHRcdFx0KCB0ZXh0ICsgXCJcIiApLnJlcGxhY2UoIHJ0cmltLCBcIlwiICk7XG5cdH0sXG5cblx0Ly8gcmVzdWx0cyBpcyBmb3IgaW50ZXJuYWwgdXNhZ2Ugb25seVxuXHRtYWtlQXJyYXk6IGZ1bmN0aW9uKCBhcnIsIHJlc3VsdHMgKSB7XG5cdFx0dmFyIHJldCA9IHJlc3VsdHMgfHwgW107XG5cblx0XHRpZiAoIGFyciAhPSBudWxsICkge1xuXHRcdFx0aWYgKCBpc0FycmF5TGlrZSggT2JqZWN0KCBhcnIgKSApICkge1xuXHRcdFx0XHRqUXVlcnkubWVyZ2UoIHJldCxcblx0XHRcdFx0XHR0eXBlb2YgYXJyID09PSBcInN0cmluZ1wiID9cblx0XHRcdFx0XHRbIGFyciBdIDogYXJyXG5cdFx0XHRcdCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRwdXNoLmNhbGwoIHJldCwgYXJyICk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJldDtcblx0fSxcblxuXHRpbkFycmF5OiBmdW5jdGlvbiggZWxlbSwgYXJyLCBpICkge1xuXHRcdHJldHVybiBhcnIgPT0gbnVsbCA/IC0xIDogaW5kZXhPZi5jYWxsKCBhcnIsIGVsZW0sIGkgKTtcblx0fSxcblxuXHQvLyBTdXBwb3J0OiBBbmRyb2lkIDw9NC4wIG9ubHksIFBoYW50b21KUyAxIG9ubHlcblx0Ly8gcHVzaC5hcHBseShfLCBhcnJheWxpa2UpIHRocm93cyBvbiBhbmNpZW50IFdlYktpdFxuXHRtZXJnZTogZnVuY3Rpb24oIGZpcnN0LCBzZWNvbmQgKSB7XG5cdFx0dmFyIGxlbiA9ICtzZWNvbmQubGVuZ3RoLFxuXHRcdFx0aiA9IDAsXG5cdFx0XHRpID0gZmlyc3QubGVuZ3RoO1xuXG5cdFx0Zm9yICggOyBqIDwgbGVuOyBqKysgKSB7XG5cdFx0XHRmaXJzdFsgaSsrIF0gPSBzZWNvbmRbIGogXTtcblx0XHR9XG5cblx0XHRmaXJzdC5sZW5ndGggPSBpO1xuXG5cdFx0cmV0dXJuIGZpcnN0O1xuXHR9LFxuXG5cdGdyZXA6IGZ1bmN0aW9uKCBlbGVtcywgY2FsbGJhY2ssIGludmVydCApIHtcblx0XHR2YXIgY2FsbGJhY2tJbnZlcnNlLFxuXHRcdFx0bWF0Y2hlcyA9IFtdLFxuXHRcdFx0aSA9IDAsXG5cdFx0XHRsZW5ndGggPSBlbGVtcy5sZW5ndGgsXG5cdFx0XHRjYWxsYmFja0V4cGVjdCA9ICFpbnZlcnQ7XG5cblx0XHQvLyBHbyB0aHJvdWdoIHRoZSBhcnJheSwgb25seSBzYXZpbmcgdGhlIGl0ZW1zXG5cdFx0Ly8gdGhhdCBwYXNzIHRoZSB2YWxpZGF0b3IgZnVuY3Rpb25cblx0XHRmb3IgKCA7IGkgPCBsZW5ndGg7IGkrKyApIHtcblx0XHRcdGNhbGxiYWNrSW52ZXJzZSA9ICFjYWxsYmFjayggZWxlbXNbIGkgXSwgaSApO1xuXHRcdFx0aWYgKCBjYWxsYmFja0ludmVyc2UgIT09IGNhbGxiYWNrRXhwZWN0ICkge1xuXHRcdFx0XHRtYXRjaGVzLnB1c2goIGVsZW1zWyBpIF0gKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gbWF0Y2hlcztcblx0fSxcblxuXHQvLyBhcmcgaXMgZm9yIGludGVybmFsIHVzYWdlIG9ubHlcblx0bWFwOiBmdW5jdGlvbiggZWxlbXMsIGNhbGxiYWNrLCBhcmcgKSB7XG5cdFx0dmFyIGxlbmd0aCwgdmFsdWUsXG5cdFx0XHRpID0gMCxcblx0XHRcdHJldCA9IFtdO1xuXG5cdFx0Ly8gR28gdGhyb3VnaCB0aGUgYXJyYXksIHRyYW5zbGF0aW5nIGVhY2ggb2YgdGhlIGl0ZW1zIHRvIHRoZWlyIG5ldyB2YWx1ZXNcblx0XHRpZiAoIGlzQXJyYXlMaWtlKCBlbGVtcyApICkge1xuXHRcdFx0bGVuZ3RoID0gZWxlbXMubGVuZ3RoO1xuXHRcdFx0Zm9yICggOyBpIDwgbGVuZ3RoOyBpKysgKSB7XG5cdFx0XHRcdHZhbHVlID0gY2FsbGJhY2soIGVsZW1zWyBpIF0sIGksIGFyZyApO1xuXG5cdFx0XHRcdGlmICggdmFsdWUgIT0gbnVsbCApIHtcblx0XHRcdFx0XHRyZXQucHVzaCggdmFsdWUgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0Ly8gR28gdGhyb3VnaCBldmVyeSBrZXkgb24gdGhlIG9iamVjdCxcblx0XHR9IGVsc2Uge1xuXHRcdFx0Zm9yICggaSBpbiBlbGVtcyApIHtcblx0XHRcdFx0dmFsdWUgPSBjYWxsYmFjayggZWxlbXNbIGkgXSwgaSwgYXJnICk7XG5cblx0XHRcdFx0aWYgKCB2YWx1ZSAhPSBudWxsICkge1xuXHRcdFx0XHRcdHJldC5wdXNoKCB2YWx1ZSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gRmxhdHRlbiBhbnkgbmVzdGVkIGFycmF5c1xuXHRcdHJldHVybiBjb25jYXQuYXBwbHkoIFtdLCByZXQgKTtcblx0fSxcblxuXHQvLyBBIGdsb2JhbCBHVUlEIGNvdW50ZXIgZm9yIG9iamVjdHNcblx0Z3VpZDogMSxcblxuXHQvLyBqUXVlcnkuc3VwcG9ydCBpcyBub3QgdXNlZCBpbiBDb3JlIGJ1dCBvdGhlciBwcm9qZWN0cyBhdHRhY2ggdGhlaXJcblx0Ly8gcHJvcGVydGllcyB0byBpdCBzbyBpdCBuZWVkcyB0byBleGlzdC5cblx0c3VwcG9ydDogc3VwcG9ydFxufSApO1xuXG5pZiAoIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiApIHtcblx0alF1ZXJ5LmZuWyBTeW1ib2wuaXRlcmF0b3IgXSA9IGFyclsgU3ltYm9sLml0ZXJhdG9yIF07XG59XG5cbi8vIFBvcHVsYXRlIHRoZSBjbGFzczJ0eXBlIG1hcFxualF1ZXJ5LmVhY2goIFwiQm9vbGVhbiBOdW1iZXIgU3RyaW5nIEZ1bmN0aW9uIEFycmF5IERhdGUgUmVnRXhwIE9iamVjdCBFcnJvciBTeW1ib2xcIi5zcGxpdCggXCIgXCIgKSxcbmZ1bmN0aW9uKCBpLCBuYW1lICkge1xuXHRjbGFzczJ0eXBlWyBcIltvYmplY3QgXCIgKyBuYW1lICsgXCJdXCIgXSA9IG5hbWUudG9Mb3dlckNhc2UoKTtcbn0gKTtcblxuZnVuY3Rpb24gaXNBcnJheUxpa2UoIG9iaiApIHtcblxuXHQvLyBTdXBwb3J0OiByZWFsIGlPUyA4LjIgb25seSAobm90IHJlcHJvZHVjaWJsZSBpbiBzaW11bGF0b3IpXG5cdC8vIGBpbmAgY2hlY2sgdXNlZCB0byBwcmV2ZW50IEpJVCBlcnJvciAoZ2gtMjE0NSlcblx0Ly8gaGFzT3duIGlzbid0IHVzZWQgaGVyZSBkdWUgdG8gZmFsc2UgbmVnYXRpdmVzXG5cdC8vIHJlZ2FyZGluZyBOb2RlbGlzdCBsZW5ndGggaW4gSUVcblx0dmFyIGxlbmd0aCA9ICEhb2JqICYmIFwibGVuZ3RoXCIgaW4gb2JqICYmIG9iai5sZW5ndGgsXG5cdFx0dHlwZSA9IHRvVHlwZSggb2JqICk7XG5cblx0aWYgKCBpc0Z1bmN0aW9uKCBvYmogKSB8fCBpc1dpbmRvdyggb2JqICkgKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0cmV0dXJuIHR5cGUgPT09IFwiYXJyYXlcIiB8fCBsZW5ndGggPT09IDAgfHxcblx0XHR0eXBlb2YgbGVuZ3RoID09PSBcIm51bWJlclwiICYmIGxlbmd0aCA+IDAgJiYgKCBsZW5ndGggLSAxICkgaW4gb2JqO1xufVxudmFyIFNpenpsZSA9XG4vKiFcbiAqIFNpenpsZSBDU1MgU2VsZWN0b3IgRW5naW5lIHYyLjMuM1xuICogaHR0cHM6Ly9zaXp6bGVqcy5jb20vXG4gKlxuICogQ29weXJpZ2h0IGpRdWVyeSBGb3VuZGF0aW9uIGFuZCBvdGhlciBjb250cmlidXRvcnNcbiAqIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZVxuICogaHR0cDovL2pxdWVyeS5vcmcvbGljZW5zZVxuICpcbiAqIERhdGU6IDIwMTYtMDgtMDhcbiAqL1xuKGZ1bmN0aW9uKCB3aW5kb3cgKSB7XG5cbnZhciBpLFxuXHRzdXBwb3J0LFxuXHRFeHByLFxuXHRnZXRUZXh0LFxuXHRpc1hNTCxcblx0dG9rZW5pemUsXG5cdGNvbXBpbGUsXG5cdHNlbGVjdCxcblx0b3V0ZXJtb3N0Q29udGV4dCxcblx0c29ydElucHV0LFxuXHRoYXNEdXBsaWNhdGUsXG5cblx0Ly8gTG9jYWwgZG9jdW1lbnQgdmFyc1xuXHRzZXREb2N1bWVudCxcblx0ZG9jdW1lbnQsXG5cdGRvY0VsZW0sXG5cdGRvY3VtZW50SXNIVE1MLFxuXHRyYnVnZ3lRU0EsXG5cdHJidWdneU1hdGNoZXMsXG5cdG1hdGNoZXMsXG5cdGNvbnRhaW5zLFxuXG5cdC8vIEluc3RhbmNlLXNwZWNpZmljIGRhdGFcblx0ZXhwYW5kbyA9IFwic2l6emxlXCIgKyAxICogbmV3IERhdGUoKSxcblx0cHJlZmVycmVkRG9jID0gd2luZG93LmRvY3VtZW50LFxuXHRkaXJydW5zID0gMCxcblx0ZG9uZSA9IDAsXG5cdGNsYXNzQ2FjaGUgPSBjcmVhdGVDYWNoZSgpLFxuXHR0b2tlbkNhY2hlID0gY3JlYXRlQ2FjaGUoKSxcblx0Y29tcGlsZXJDYWNoZSA9IGNyZWF0ZUNhY2hlKCksXG5cdHNvcnRPcmRlciA9IGZ1bmN0aW9uKCBhLCBiICkge1xuXHRcdGlmICggYSA9PT0gYiApIHtcblx0XHRcdGhhc0R1cGxpY2F0ZSA9IHRydWU7XG5cdFx0fVxuXHRcdHJldHVybiAwO1xuXHR9LFxuXG5cdC8vIEluc3RhbmNlIG1ldGhvZHNcblx0aGFzT3duID0gKHt9KS5oYXNPd25Qcm9wZXJ0eSxcblx0YXJyID0gW10sXG5cdHBvcCA9IGFyci5wb3AsXG5cdHB1c2hfbmF0aXZlID0gYXJyLnB1c2gsXG5cdHB1c2ggPSBhcnIucHVzaCxcblx0c2xpY2UgPSBhcnIuc2xpY2UsXG5cdC8vIFVzZSBhIHN0cmlwcGVkLWRvd24gaW5kZXhPZiBhcyBpdCdzIGZhc3RlciB0aGFuIG5hdGl2ZVxuXHQvLyBodHRwczovL2pzcGVyZi5jb20vdGhvci1pbmRleG9mLXZzLWZvci81XG5cdGluZGV4T2YgPSBmdW5jdGlvbiggbGlzdCwgZWxlbSApIHtcblx0XHR2YXIgaSA9IDAsXG5cdFx0XHRsZW4gPSBsaXN0Lmxlbmd0aDtcblx0XHRmb3IgKCA7IGkgPCBsZW47IGkrKyApIHtcblx0XHRcdGlmICggbGlzdFtpXSA9PT0gZWxlbSApIHtcblx0XHRcdFx0cmV0dXJuIGk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiAtMTtcblx0fSxcblxuXHRib29sZWFucyA9IFwiY2hlY2tlZHxzZWxlY3RlZHxhc3luY3xhdXRvZm9jdXN8YXV0b3BsYXl8Y29udHJvbHN8ZGVmZXJ8ZGlzYWJsZWR8aGlkZGVufGlzbWFwfGxvb3B8bXVsdGlwbGV8b3BlbnxyZWFkb25seXxyZXF1aXJlZHxzY29wZWRcIixcblxuXHQvLyBSZWd1bGFyIGV4cHJlc3Npb25zXG5cblx0Ly8gaHR0cDovL3d3dy53My5vcmcvVFIvY3NzMy1zZWxlY3RvcnMvI3doaXRlc3BhY2Vcblx0d2hpdGVzcGFjZSA9IFwiW1xcXFx4MjBcXFxcdFxcXFxyXFxcXG5cXFxcZl1cIixcblxuXHQvLyBodHRwOi8vd3d3LnczLm9yZy9UUi9DU1MyMS9zeW5kYXRhLmh0bWwjdmFsdWUtZGVmLWlkZW50aWZpZXJcblx0aWRlbnRpZmllciA9IFwiKD86XFxcXFxcXFwufFtcXFxcdy1dfFteXFwwLVxcXFx4YTBdKStcIixcblxuXHQvLyBBdHRyaWJ1dGUgc2VsZWN0b3JzOiBodHRwOi8vd3d3LnczLm9yZy9UUi9zZWxlY3RvcnMvI2F0dHJpYnV0ZS1zZWxlY3RvcnNcblx0YXR0cmlidXRlcyA9IFwiXFxcXFtcIiArIHdoaXRlc3BhY2UgKyBcIiooXCIgKyBpZGVudGlmaWVyICsgXCIpKD86XCIgKyB3aGl0ZXNwYWNlICtcblx0XHQvLyBPcGVyYXRvciAoY2FwdHVyZSAyKVxuXHRcdFwiKihbKl4kfCF+XT89KVwiICsgd2hpdGVzcGFjZSArXG5cdFx0Ly8gXCJBdHRyaWJ1dGUgdmFsdWVzIG11c3QgYmUgQ1NTIGlkZW50aWZpZXJzIFtjYXB0dXJlIDVdIG9yIHN0cmluZ3MgW2NhcHR1cmUgMyBvciBjYXB0dXJlIDRdXCJcblx0XHRcIiooPzonKCg/OlxcXFxcXFxcLnxbXlxcXFxcXFxcJ10pKiknfFxcXCIoKD86XFxcXFxcXFwufFteXFxcXFxcXFxcXFwiXSkqKVxcXCJ8KFwiICsgaWRlbnRpZmllciArIFwiKSl8KVwiICsgd2hpdGVzcGFjZSArXG5cdFx0XCIqXFxcXF1cIixcblxuXHRwc2V1ZG9zID0gXCI6KFwiICsgaWRlbnRpZmllciArIFwiKSg/OlxcXFwoKFwiICtcblx0XHQvLyBUbyByZWR1Y2UgdGhlIG51bWJlciBvZiBzZWxlY3RvcnMgbmVlZGluZyB0b2tlbml6ZSBpbiB0aGUgcHJlRmlsdGVyLCBwcmVmZXIgYXJndW1lbnRzOlxuXHRcdC8vIDEuIHF1b3RlZCAoY2FwdHVyZSAzOyBjYXB0dXJlIDQgb3IgY2FwdHVyZSA1KVxuXHRcdFwiKCcoKD86XFxcXFxcXFwufFteXFxcXFxcXFwnXSkqKSd8XFxcIigoPzpcXFxcXFxcXC58W15cXFxcXFxcXFxcXCJdKSopXFxcIil8XCIgK1xuXHRcdC8vIDIuIHNpbXBsZSAoY2FwdHVyZSA2KVxuXHRcdFwiKCg/OlxcXFxcXFxcLnxbXlxcXFxcXFxcKClbXFxcXF1dfFwiICsgYXR0cmlidXRlcyArIFwiKSopfFwiICtcblx0XHQvLyAzLiBhbnl0aGluZyBlbHNlIChjYXB0dXJlIDIpXG5cdFx0XCIuKlwiICtcblx0XHRcIilcXFxcKXwpXCIsXG5cblx0Ly8gTGVhZGluZyBhbmQgbm9uLWVzY2FwZWQgdHJhaWxpbmcgd2hpdGVzcGFjZSwgY2FwdHVyaW5nIHNvbWUgbm9uLXdoaXRlc3BhY2UgY2hhcmFjdGVycyBwcmVjZWRpbmcgdGhlIGxhdHRlclxuXHRyd2hpdGVzcGFjZSA9IG5ldyBSZWdFeHAoIHdoaXRlc3BhY2UgKyBcIitcIiwgXCJnXCIgKSxcblx0cnRyaW0gPSBuZXcgUmVnRXhwKCBcIl5cIiArIHdoaXRlc3BhY2UgKyBcIit8KCg/Ol58W15cXFxcXFxcXF0pKD86XFxcXFxcXFwuKSopXCIgKyB3aGl0ZXNwYWNlICsgXCIrJFwiLCBcImdcIiApLFxuXG5cdHJjb21tYSA9IG5ldyBSZWdFeHAoIFwiXlwiICsgd2hpdGVzcGFjZSArIFwiKixcIiArIHdoaXRlc3BhY2UgKyBcIipcIiApLFxuXHRyY29tYmluYXRvcnMgPSBuZXcgUmVnRXhwKCBcIl5cIiArIHdoaXRlc3BhY2UgKyBcIiooWz4rfl18XCIgKyB3aGl0ZXNwYWNlICsgXCIpXCIgKyB3aGl0ZXNwYWNlICsgXCIqXCIgKSxcblxuXHRyYXR0cmlidXRlUXVvdGVzID0gbmV3IFJlZ0V4cCggXCI9XCIgKyB3aGl0ZXNwYWNlICsgXCIqKFteXFxcXF0nXFxcIl0qPylcIiArIHdoaXRlc3BhY2UgKyBcIipcXFxcXVwiLCBcImdcIiApLFxuXG5cdHJwc2V1ZG8gPSBuZXcgUmVnRXhwKCBwc2V1ZG9zICksXG5cdHJpZGVudGlmaWVyID0gbmV3IFJlZ0V4cCggXCJeXCIgKyBpZGVudGlmaWVyICsgXCIkXCIgKSxcblxuXHRtYXRjaEV4cHIgPSB7XG5cdFx0XCJJRFwiOiBuZXcgUmVnRXhwKCBcIl4jKFwiICsgaWRlbnRpZmllciArIFwiKVwiICksXG5cdFx0XCJDTEFTU1wiOiBuZXcgUmVnRXhwKCBcIl5cXFxcLihcIiArIGlkZW50aWZpZXIgKyBcIilcIiApLFxuXHRcdFwiVEFHXCI6IG5ldyBSZWdFeHAoIFwiXihcIiArIGlkZW50aWZpZXIgKyBcInxbKl0pXCIgKSxcblx0XHRcIkFUVFJcIjogbmV3IFJlZ0V4cCggXCJeXCIgKyBhdHRyaWJ1dGVzICksXG5cdFx0XCJQU0VVRE9cIjogbmV3IFJlZ0V4cCggXCJeXCIgKyBwc2V1ZG9zICksXG5cdFx0XCJDSElMRFwiOiBuZXcgUmVnRXhwKCBcIl46KG9ubHl8Zmlyc3R8bGFzdHxudGh8bnRoLWxhc3QpLShjaGlsZHxvZi10eXBlKSg/OlxcXFwoXCIgKyB3aGl0ZXNwYWNlICtcblx0XHRcdFwiKihldmVufG9kZHwoKFsrLV18KShcXFxcZCopbnwpXCIgKyB3aGl0ZXNwYWNlICsgXCIqKD86KFsrLV18KVwiICsgd2hpdGVzcGFjZSArXG5cdFx0XHRcIiooXFxcXGQrKXwpKVwiICsgd2hpdGVzcGFjZSArIFwiKlxcXFwpfClcIiwgXCJpXCIgKSxcblx0XHRcImJvb2xcIjogbmV3IFJlZ0V4cCggXCJeKD86XCIgKyBib29sZWFucyArIFwiKSRcIiwgXCJpXCIgKSxcblx0XHQvLyBGb3IgdXNlIGluIGxpYnJhcmllcyBpbXBsZW1lbnRpbmcgLmlzKClcblx0XHQvLyBXZSB1c2UgdGhpcyBmb3IgUE9TIG1hdGNoaW5nIGluIGBzZWxlY3RgXG5cdFx0XCJuZWVkc0NvbnRleHRcIjogbmV3IFJlZ0V4cCggXCJeXCIgKyB3aGl0ZXNwYWNlICsgXCIqWz4rfl18OihldmVufG9kZHxlcXxndHxsdHxudGh8Zmlyc3R8bGFzdCkoPzpcXFxcKFwiICtcblx0XHRcdHdoaXRlc3BhY2UgKyBcIiooKD86LVxcXFxkKT9cXFxcZCopXCIgKyB3aGl0ZXNwYWNlICsgXCIqXFxcXCl8KSg/PVteLV18JClcIiwgXCJpXCIgKVxuXHR9LFxuXG5cdHJpbnB1dHMgPSAvXig/OmlucHV0fHNlbGVjdHx0ZXh0YXJlYXxidXR0b24pJC9pLFxuXHRyaGVhZGVyID0gL15oXFxkJC9pLFxuXG5cdHJuYXRpdmUgPSAvXltee10rXFx7XFxzKlxcW25hdGl2ZSBcXHcvLFxuXG5cdC8vIEVhc2lseS1wYXJzZWFibGUvcmV0cmlldmFibGUgSUQgb3IgVEFHIG9yIENMQVNTIHNlbGVjdG9yc1xuXHRycXVpY2tFeHByID0gL14oPzojKFtcXHctXSspfChcXHcrKXxcXC4oW1xcdy1dKykpJC8sXG5cblx0cnNpYmxpbmcgPSAvWyt+XS8sXG5cblx0Ly8gQ1NTIGVzY2FwZXNcblx0Ly8gaHR0cDovL3d3dy53My5vcmcvVFIvQ1NTMjEvc3luZGF0YS5odG1sI2VzY2FwZWQtY2hhcmFjdGVyc1xuXHRydW5lc2NhcGUgPSBuZXcgUmVnRXhwKCBcIlxcXFxcXFxcKFtcXFxcZGEtZl17MSw2fVwiICsgd2hpdGVzcGFjZSArIFwiP3woXCIgKyB3aGl0ZXNwYWNlICsgXCIpfC4pXCIsIFwiaWdcIiApLFxuXHRmdW5lc2NhcGUgPSBmdW5jdGlvbiggXywgZXNjYXBlZCwgZXNjYXBlZFdoaXRlc3BhY2UgKSB7XG5cdFx0dmFyIGhpZ2ggPSBcIjB4XCIgKyBlc2NhcGVkIC0gMHgxMDAwMDtcblx0XHQvLyBOYU4gbWVhbnMgbm9uLWNvZGVwb2ludFxuXHRcdC8vIFN1cHBvcnQ6IEZpcmVmb3g8MjRcblx0XHQvLyBXb3JrYXJvdW5kIGVycm9uZW91cyBudW1lcmljIGludGVycHJldGF0aW9uIG9mICtcIjB4XCJcblx0XHRyZXR1cm4gaGlnaCAhPT0gaGlnaCB8fCBlc2NhcGVkV2hpdGVzcGFjZSA/XG5cdFx0XHRlc2NhcGVkIDpcblx0XHRcdGhpZ2ggPCAwID9cblx0XHRcdFx0Ly8gQk1QIGNvZGVwb2ludFxuXHRcdFx0XHRTdHJpbmcuZnJvbUNoYXJDb2RlKCBoaWdoICsgMHgxMDAwMCApIDpcblx0XHRcdFx0Ly8gU3VwcGxlbWVudGFsIFBsYW5lIGNvZGVwb2ludCAoc3Vycm9nYXRlIHBhaXIpXG5cdFx0XHRcdFN0cmluZy5mcm9tQ2hhckNvZGUoIGhpZ2ggPj4gMTAgfCAweEQ4MDAsIGhpZ2ggJiAweDNGRiB8IDB4REMwMCApO1xuXHR9LFxuXG5cdC8vIENTUyBzdHJpbmcvaWRlbnRpZmllciBzZXJpYWxpemF0aW9uXG5cdC8vIGh0dHBzOi8vZHJhZnRzLmNzc3dnLm9yZy9jc3NvbS8jY29tbW9uLXNlcmlhbGl6aW5nLWlkaW9tc1xuXHRyY3NzZXNjYXBlID0gLyhbXFwwLVxceDFmXFx4N2ZdfF4tP1xcZCl8Xi0kfFteXFwwLVxceDFmXFx4N2YtXFx1RkZGRlxcdy1dL2csXG5cdGZjc3Nlc2NhcGUgPSBmdW5jdGlvbiggY2gsIGFzQ29kZVBvaW50ICkge1xuXHRcdGlmICggYXNDb2RlUG9pbnQgKSB7XG5cblx0XHRcdC8vIFUrMDAwMCBOVUxMIGJlY29tZXMgVStGRkZEIFJFUExBQ0VNRU5UIENIQVJBQ1RFUlxuXHRcdFx0aWYgKCBjaCA9PT0gXCJcXDBcIiApIHtcblx0XHRcdFx0cmV0dXJuIFwiXFx1RkZGRFwiO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBDb250cm9sIGNoYXJhY3RlcnMgYW5kIChkZXBlbmRlbnQgdXBvbiBwb3NpdGlvbikgbnVtYmVycyBnZXQgZXNjYXBlZCBhcyBjb2RlIHBvaW50c1xuXHRcdFx0cmV0dXJuIGNoLnNsaWNlKCAwLCAtMSApICsgXCJcXFxcXCIgKyBjaC5jaGFyQ29kZUF0KCBjaC5sZW5ndGggLSAxICkudG9TdHJpbmcoIDE2ICkgKyBcIiBcIjtcblx0XHR9XG5cblx0XHQvLyBPdGhlciBwb3RlbnRpYWxseS1zcGVjaWFsIEFTQ0lJIGNoYXJhY3RlcnMgZ2V0IGJhY2tzbGFzaC1lc2NhcGVkXG5cdFx0cmV0dXJuIFwiXFxcXFwiICsgY2g7XG5cdH0sXG5cblx0Ly8gVXNlZCBmb3IgaWZyYW1lc1xuXHQvLyBTZWUgc2V0RG9jdW1lbnQoKVxuXHQvLyBSZW1vdmluZyB0aGUgZnVuY3Rpb24gd3JhcHBlciBjYXVzZXMgYSBcIlBlcm1pc3Npb24gRGVuaWVkXCJcblx0Ly8gZXJyb3IgaW4gSUVcblx0dW5sb2FkSGFuZGxlciA9IGZ1bmN0aW9uKCkge1xuXHRcdHNldERvY3VtZW50KCk7XG5cdH0sXG5cblx0ZGlzYWJsZWRBbmNlc3RvciA9IGFkZENvbWJpbmF0b3IoXG5cdFx0ZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRyZXR1cm4gZWxlbS5kaXNhYmxlZCA9PT0gdHJ1ZSAmJiAoXCJmb3JtXCIgaW4gZWxlbSB8fCBcImxhYmVsXCIgaW4gZWxlbSk7XG5cdFx0fSxcblx0XHR7IGRpcjogXCJwYXJlbnROb2RlXCIsIG5leHQ6IFwibGVnZW5kXCIgfVxuXHQpO1xuXG4vLyBPcHRpbWl6ZSBmb3IgcHVzaC5hcHBseSggXywgTm9kZUxpc3QgKVxudHJ5IHtcblx0cHVzaC5hcHBseShcblx0XHQoYXJyID0gc2xpY2UuY2FsbCggcHJlZmVycmVkRG9jLmNoaWxkTm9kZXMgKSksXG5cdFx0cHJlZmVycmVkRG9jLmNoaWxkTm9kZXNcblx0KTtcblx0Ly8gU3VwcG9ydDogQW5kcm9pZDw0LjBcblx0Ly8gRGV0ZWN0IHNpbGVudGx5IGZhaWxpbmcgcHVzaC5hcHBseVxuXHRhcnJbIHByZWZlcnJlZERvYy5jaGlsZE5vZGVzLmxlbmd0aCBdLm5vZGVUeXBlO1xufSBjYXRjaCAoIGUgKSB7XG5cdHB1c2ggPSB7IGFwcGx5OiBhcnIubGVuZ3RoID9cblxuXHRcdC8vIExldmVyYWdlIHNsaWNlIGlmIHBvc3NpYmxlXG5cdFx0ZnVuY3Rpb24oIHRhcmdldCwgZWxzICkge1xuXHRcdFx0cHVzaF9uYXRpdmUuYXBwbHkoIHRhcmdldCwgc2xpY2UuY2FsbChlbHMpICk7XG5cdFx0fSA6XG5cblx0XHQvLyBTdXBwb3J0OiBJRTw5XG5cdFx0Ly8gT3RoZXJ3aXNlIGFwcGVuZCBkaXJlY3RseVxuXHRcdGZ1bmN0aW9uKCB0YXJnZXQsIGVscyApIHtcblx0XHRcdHZhciBqID0gdGFyZ2V0Lmxlbmd0aCxcblx0XHRcdFx0aSA9IDA7XG5cdFx0XHQvLyBDYW4ndCB0cnVzdCBOb2RlTGlzdC5sZW5ndGhcblx0XHRcdHdoaWxlICggKHRhcmdldFtqKytdID0gZWxzW2krK10pICkge31cblx0XHRcdHRhcmdldC5sZW5ndGggPSBqIC0gMTtcblx0XHR9XG5cdH07XG59XG5cbmZ1bmN0aW9uIFNpenpsZSggc2VsZWN0b3IsIGNvbnRleHQsIHJlc3VsdHMsIHNlZWQgKSB7XG5cdHZhciBtLCBpLCBlbGVtLCBuaWQsIG1hdGNoLCBncm91cHMsIG5ld1NlbGVjdG9yLFxuXHRcdG5ld0NvbnRleHQgPSBjb250ZXh0ICYmIGNvbnRleHQub3duZXJEb2N1bWVudCxcblxuXHRcdC8vIG5vZGVUeXBlIGRlZmF1bHRzIHRvIDksIHNpbmNlIGNvbnRleHQgZGVmYXVsdHMgdG8gZG9jdW1lbnRcblx0XHRub2RlVHlwZSA9IGNvbnRleHQgPyBjb250ZXh0Lm5vZGVUeXBlIDogOTtcblxuXHRyZXN1bHRzID0gcmVzdWx0cyB8fCBbXTtcblxuXHQvLyBSZXR1cm4gZWFybHkgZnJvbSBjYWxscyB3aXRoIGludmFsaWQgc2VsZWN0b3Igb3IgY29udGV4dFxuXHRpZiAoIHR5cGVvZiBzZWxlY3RvciAhPT0gXCJzdHJpbmdcIiB8fCAhc2VsZWN0b3IgfHxcblx0XHRub2RlVHlwZSAhPT0gMSAmJiBub2RlVHlwZSAhPT0gOSAmJiBub2RlVHlwZSAhPT0gMTEgKSB7XG5cblx0XHRyZXR1cm4gcmVzdWx0cztcblx0fVxuXG5cdC8vIFRyeSB0byBzaG9ydGN1dCBmaW5kIG9wZXJhdGlvbnMgKGFzIG9wcG9zZWQgdG8gZmlsdGVycykgaW4gSFRNTCBkb2N1bWVudHNcblx0aWYgKCAhc2VlZCApIHtcblxuXHRcdGlmICggKCBjb250ZXh0ID8gY29udGV4dC5vd25lckRvY3VtZW50IHx8IGNvbnRleHQgOiBwcmVmZXJyZWREb2MgKSAhPT0gZG9jdW1lbnQgKSB7XG5cdFx0XHRzZXREb2N1bWVudCggY29udGV4dCApO1xuXHRcdH1cblx0XHRjb250ZXh0ID0gY29udGV4dCB8fCBkb2N1bWVudDtcblxuXHRcdGlmICggZG9jdW1lbnRJc0hUTUwgKSB7XG5cblx0XHRcdC8vIElmIHRoZSBzZWxlY3RvciBpcyBzdWZmaWNpZW50bHkgc2ltcGxlLCB0cnkgdXNpbmcgYSBcImdldCpCeSpcIiBET00gbWV0aG9kXG5cdFx0XHQvLyAoZXhjZXB0aW5nIERvY3VtZW50RnJhZ21lbnQgY29udGV4dCwgd2hlcmUgdGhlIG1ldGhvZHMgZG9uJ3QgZXhpc3QpXG5cdFx0XHRpZiAoIG5vZGVUeXBlICE9PSAxMSAmJiAobWF0Y2ggPSBycXVpY2tFeHByLmV4ZWMoIHNlbGVjdG9yICkpICkge1xuXG5cdFx0XHRcdC8vIElEIHNlbGVjdG9yXG5cdFx0XHRcdGlmICggKG0gPSBtYXRjaFsxXSkgKSB7XG5cblx0XHRcdFx0XHQvLyBEb2N1bWVudCBjb250ZXh0XG5cdFx0XHRcdFx0aWYgKCBub2RlVHlwZSA9PT0gOSApIHtcblx0XHRcdFx0XHRcdGlmICggKGVsZW0gPSBjb250ZXh0LmdldEVsZW1lbnRCeUlkKCBtICkpICkge1xuXG5cdFx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IElFLCBPcGVyYSwgV2Via2l0XG5cdFx0XHRcdFx0XHRcdC8vIFRPRE86IGlkZW50aWZ5IHZlcnNpb25zXG5cdFx0XHRcdFx0XHRcdC8vIGdldEVsZW1lbnRCeUlkIGNhbiBtYXRjaCBlbGVtZW50cyBieSBuYW1lIGluc3RlYWQgb2YgSURcblx0XHRcdFx0XHRcdFx0aWYgKCBlbGVtLmlkID09PSBtICkge1xuXHRcdFx0XHRcdFx0XHRcdHJlc3VsdHMucHVzaCggZWxlbSApO1xuXHRcdFx0XHRcdFx0XHRcdHJldHVybiByZXN1bHRzO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gcmVzdWx0cztcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIEVsZW1lbnQgY29udGV4dFxuXHRcdFx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IElFLCBPcGVyYSwgV2Via2l0XG5cdFx0XHRcdFx0XHQvLyBUT0RPOiBpZGVudGlmeSB2ZXJzaW9uc1xuXHRcdFx0XHRcdFx0Ly8gZ2V0RWxlbWVudEJ5SWQgY2FuIG1hdGNoIGVsZW1lbnRzIGJ5IG5hbWUgaW5zdGVhZCBvZiBJRFxuXHRcdFx0XHRcdFx0aWYgKCBuZXdDb250ZXh0ICYmIChlbGVtID0gbmV3Q29udGV4dC5nZXRFbGVtZW50QnlJZCggbSApKSAmJlxuXHRcdFx0XHRcdFx0XHRjb250YWlucyggY29udGV4dCwgZWxlbSApICYmXG5cdFx0XHRcdFx0XHRcdGVsZW0uaWQgPT09IG0gKSB7XG5cblx0XHRcdFx0XHRcdFx0cmVzdWx0cy5wdXNoKCBlbGVtICk7XG5cdFx0XHRcdFx0XHRcdHJldHVybiByZXN1bHRzO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBUeXBlIHNlbGVjdG9yXG5cdFx0XHRcdH0gZWxzZSBpZiAoIG1hdGNoWzJdICkge1xuXHRcdFx0XHRcdHB1c2guYXBwbHkoIHJlc3VsdHMsIGNvbnRleHQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIHNlbGVjdG9yICkgKTtcblx0XHRcdFx0XHRyZXR1cm4gcmVzdWx0cztcblxuXHRcdFx0XHQvLyBDbGFzcyBzZWxlY3RvclxuXHRcdFx0XHR9IGVsc2UgaWYgKCAobSA9IG1hdGNoWzNdKSAmJiBzdXBwb3J0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUgJiZcblx0XHRcdFx0XHRjb250ZXh0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUgKSB7XG5cblx0XHRcdFx0XHRwdXNoLmFwcGx5KCByZXN1bHRzLCBjb250ZXh0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoIG0gKSApO1xuXHRcdFx0XHRcdHJldHVybiByZXN1bHRzO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIFRha2UgYWR2YW50YWdlIG9mIHF1ZXJ5U2VsZWN0b3JBbGxcblx0XHRcdGlmICggc3VwcG9ydC5xc2EgJiZcblx0XHRcdFx0IWNvbXBpbGVyQ2FjaGVbIHNlbGVjdG9yICsgXCIgXCIgXSAmJlxuXHRcdFx0XHQoIXJidWdneVFTQSB8fCAhcmJ1Z2d5UVNBLnRlc3QoIHNlbGVjdG9yICkpICkge1xuXG5cdFx0XHRcdGlmICggbm9kZVR5cGUgIT09IDEgKSB7XG5cdFx0XHRcdFx0bmV3Q29udGV4dCA9IGNvbnRleHQ7XG5cdFx0XHRcdFx0bmV3U2VsZWN0b3IgPSBzZWxlY3RvcjtcblxuXHRcdFx0XHQvLyBxU0EgbG9va3Mgb3V0c2lkZSBFbGVtZW50IGNvbnRleHQsIHdoaWNoIGlzIG5vdCB3aGF0IHdlIHdhbnRcblx0XHRcdFx0Ly8gVGhhbmtzIHRvIEFuZHJldyBEdXBvbnQgZm9yIHRoaXMgd29ya2Fyb3VuZCB0ZWNobmlxdWVcblx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgPD04XG5cdFx0XHRcdC8vIEV4Y2x1ZGUgb2JqZWN0IGVsZW1lbnRzXG5cdFx0XHRcdH0gZWxzZSBpZiAoIGNvbnRleHQubm9kZU5hbWUudG9Mb3dlckNhc2UoKSAhPT0gXCJvYmplY3RcIiApIHtcblxuXHRcdFx0XHRcdC8vIENhcHR1cmUgdGhlIGNvbnRleHQgSUQsIHNldHRpbmcgaXQgZmlyc3QgaWYgbmVjZXNzYXJ5XG5cdFx0XHRcdFx0aWYgKCAobmlkID0gY29udGV4dC5nZXRBdHRyaWJ1dGUoIFwiaWRcIiApKSApIHtcblx0XHRcdFx0XHRcdG5pZCA9IG5pZC5yZXBsYWNlKCByY3NzZXNjYXBlLCBmY3NzZXNjYXBlICk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdGNvbnRleHQuc2V0QXR0cmlidXRlKCBcImlkXCIsIChuaWQgPSBleHBhbmRvKSApO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIFByZWZpeCBldmVyeSBzZWxlY3RvciBpbiB0aGUgbGlzdFxuXHRcdFx0XHRcdGdyb3VwcyA9IHRva2VuaXplKCBzZWxlY3RvciApO1xuXHRcdFx0XHRcdGkgPSBncm91cHMubGVuZ3RoO1xuXHRcdFx0XHRcdHdoaWxlICggaS0tICkge1xuXHRcdFx0XHRcdFx0Z3JvdXBzW2ldID0gXCIjXCIgKyBuaWQgKyBcIiBcIiArIHRvU2VsZWN0b3IoIGdyb3Vwc1tpXSApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRuZXdTZWxlY3RvciA9IGdyb3Vwcy5qb2luKCBcIixcIiApO1xuXG5cdFx0XHRcdFx0Ly8gRXhwYW5kIGNvbnRleHQgZm9yIHNpYmxpbmcgc2VsZWN0b3JzXG5cdFx0XHRcdFx0bmV3Q29udGV4dCA9IHJzaWJsaW5nLnRlc3QoIHNlbGVjdG9yICkgJiYgdGVzdENvbnRleHQoIGNvbnRleHQucGFyZW50Tm9kZSApIHx8XG5cdFx0XHRcdFx0XHRjb250ZXh0O1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKCBuZXdTZWxlY3RvciApIHtcblx0XHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdFx0cHVzaC5hcHBseSggcmVzdWx0cyxcblx0XHRcdFx0XHRcdFx0bmV3Q29udGV4dC5xdWVyeVNlbGVjdG9yQWxsKCBuZXdTZWxlY3RvciApXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0cmV0dXJuIHJlc3VsdHM7XG5cdFx0XHRcdFx0fSBjYXRjaCAoIHFzYUVycm9yICkge1xuXHRcdFx0XHRcdH0gZmluYWxseSB7XG5cdFx0XHRcdFx0XHRpZiAoIG5pZCA9PT0gZXhwYW5kbyApIHtcblx0XHRcdFx0XHRcdFx0Y29udGV4dC5yZW1vdmVBdHRyaWJ1dGUoIFwiaWRcIiApO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8vIEFsbCBvdGhlcnNcblx0cmV0dXJuIHNlbGVjdCggc2VsZWN0b3IucmVwbGFjZSggcnRyaW0sIFwiJDFcIiApLCBjb250ZXh0LCByZXN1bHRzLCBzZWVkICk7XG59XG5cbi8qKlxuICogQ3JlYXRlIGtleS12YWx1ZSBjYWNoZXMgb2YgbGltaXRlZCBzaXplXG4gKiBAcmV0dXJucyB7ZnVuY3Rpb24oc3RyaW5nLCBvYmplY3QpfSBSZXR1cm5zIHRoZSBPYmplY3QgZGF0YSBhZnRlciBzdG9yaW5nIGl0IG9uIGl0c2VsZiB3aXRoXG4gKlx0cHJvcGVydHkgbmFtZSB0aGUgKHNwYWNlLXN1ZmZpeGVkKSBzdHJpbmcgYW5kIChpZiB0aGUgY2FjaGUgaXMgbGFyZ2VyIHRoYW4gRXhwci5jYWNoZUxlbmd0aClcbiAqXHRkZWxldGluZyB0aGUgb2xkZXN0IGVudHJ5XG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUNhY2hlKCkge1xuXHR2YXIga2V5cyA9IFtdO1xuXG5cdGZ1bmN0aW9uIGNhY2hlKCBrZXksIHZhbHVlICkge1xuXHRcdC8vIFVzZSAoa2V5ICsgXCIgXCIpIHRvIGF2b2lkIGNvbGxpc2lvbiB3aXRoIG5hdGl2ZSBwcm90b3R5cGUgcHJvcGVydGllcyAoc2VlIElzc3VlICMxNTcpXG5cdFx0aWYgKCBrZXlzLnB1c2goIGtleSArIFwiIFwiICkgPiBFeHByLmNhY2hlTGVuZ3RoICkge1xuXHRcdFx0Ly8gT25seSBrZWVwIHRoZSBtb3N0IHJlY2VudCBlbnRyaWVzXG5cdFx0XHRkZWxldGUgY2FjaGVbIGtleXMuc2hpZnQoKSBdO1xuXHRcdH1cblx0XHRyZXR1cm4gKGNhY2hlWyBrZXkgKyBcIiBcIiBdID0gdmFsdWUpO1xuXHR9XG5cdHJldHVybiBjYWNoZTtcbn1cblxuLyoqXG4gKiBNYXJrIGEgZnVuY3Rpb24gZm9yIHNwZWNpYWwgdXNlIGJ5IFNpenpsZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gVGhlIGZ1bmN0aW9uIHRvIG1hcmtcbiAqL1xuZnVuY3Rpb24gbWFya0Z1bmN0aW9uKCBmbiApIHtcblx0Zm5bIGV4cGFuZG8gXSA9IHRydWU7XG5cdHJldHVybiBmbjtcbn1cblxuLyoqXG4gKiBTdXBwb3J0IHRlc3RpbmcgdXNpbmcgYW4gZWxlbWVudFxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gUGFzc2VkIHRoZSBjcmVhdGVkIGVsZW1lbnQgYW5kIHJldHVybnMgYSBib29sZWFuIHJlc3VsdFxuICovXG5mdW5jdGlvbiBhc3NlcnQoIGZuICkge1xuXHR2YXIgZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZmllbGRzZXRcIik7XG5cblx0dHJ5IHtcblx0XHRyZXR1cm4gISFmbiggZWwgKTtcblx0fSBjYXRjaCAoZSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fSBmaW5hbGx5IHtcblx0XHQvLyBSZW1vdmUgZnJvbSBpdHMgcGFyZW50IGJ5IGRlZmF1bHRcblx0XHRpZiAoIGVsLnBhcmVudE5vZGUgKSB7XG5cdFx0XHRlbC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKCBlbCApO1xuXHRcdH1cblx0XHQvLyByZWxlYXNlIG1lbW9yeSBpbiBJRVxuXHRcdGVsID0gbnVsbDtcblx0fVxufVxuXG4vKipcbiAqIEFkZHMgdGhlIHNhbWUgaGFuZGxlciBmb3IgYWxsIG9mIHRoZSBzcGVjaWZpZWQgYXR0cnNcbiAqIEBwYXJhbSB7U3RyaW5nfSBhdHRycyBQaXBlLXNlcGFyYXRlZCBsaXN0IG9mIGF0dHJpYnV0ZXNcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGhhbmRsZXIgVGhlIG1ldGhvZCB0aGF0IHdpbGwgYmUgYXBwbGllZFxuICovXG5mdW5jdGlvbiBhZGRIYW5kbGUoIGF0dHJzLCBoYW5kbGVyICkge1xuXHR2YXIgYXJyID0gYXR0cnMuc3BsaXQoXCJ8XCIpLFxuXHRcdGkgPSBhcnIubGVuZ3RoO1xuXG5cdHdoaWxlICggaS0tICkge1xuXHRcdEV4cHIuYXR0ckhhbmRsZVsgYXJyW2ldIF0gPSBoYW5kbGVyO1xuXHR9XG59XG5cbi8qKlxuICogQ2hlY2tzIGRvY3VtZW50IG9yZGVyIG9mIHR3byBzaWJsaW5nc1xuICogQHBhcmFtIHtFbGVtZW50fSBhXG4gKiBAcGFyYW0ge0VsZW1lbnR9IGJcbiAqIEByZXR1cm5zIHtOdW1iZXJ9IFJldHVybnMgbGVzcyB0aGFuIDAgaWYgYSBwcmVjZWRlcyBiLCBncmVhdGVyIHRoYW4gMCBpZiBhIGZvbGxvd3MgYlxuICovXG5mdW5jdGlvbiBzaWJsaW5nQ2hlY2soIGEsIGIgKSB7XG5cdHZhciBjdXIgPSBiICYmIGEsXG5cdFx0ZGlmZiA9IGN1ciAmJiBhLm5vZGVUeXBlID09PSAxICYmIGIubm9kZVR5cGUgPT09IDEgJiZcblx0XHRcdGEuc291cmNlSW5kZXggLSBiLnNvdXJjZUluZGV4O1xuXG5cdC8vIFVzZSBJRSBzb3VyY2VJbmRleCBpZiBhdmFpbGFibGUgb24gYm90aCBub2Rlc1xuXHRpZiAoIGRpZmYgKSB7XG5cdFx0cmV0dXJuIGRpZmY7XG5cdH1cblxuXHQvLyBDaGVjayBpZiBiIGZvbGxvd3MgYVxuXHRpZiAoIGN1ciApIHtcblx0XHR3aGlsZSAoIChjdXIgPSBjdXIubmV4dFNpYmxpbmcpICkge1xuXHRcdFx0aWYgKCBjdXIgPT09IGIgKSB7XG5cdFx0XHRcdHJldHVybiAtMTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gYSA/IDEgOiAtMTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgZnVuY3Rpb24gdG8gdXNlIGluIHBzZXVkb3MgZm9yIGlucHV0IHR5cGVzXG4gKiBAcGFyYW0ge1N0cmluZ30gdHlwZVxuICovXG5mdW5jdGlvbiBjcmVhdGVJbnB1dFBzZXVkbyggdHlwZSApIHtcblx0cmV0dXJuIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdHZhciBuYW1lID0gZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO1xuXHRcdHJldHVybiBuYW1lID09PSBcImlucHV0XCIgJiYgZWxlbS50eXBlID09PSB0eXBlO1xuXHR9O1xufVxuXG4vKipcbiAqIFJldHVybnMgYSBmdW5jdGlvbiB0byB1c2UgaW4gcHNldWRvcyBmb3IgYnV0dG9uc1xuICogQHBhcmFtIHtTdHJpbmd9IHR5cGVcbiAqL1xuZnVuY3Rpb24gY3JlYXRlQnV0dG9uUHNldWRvKCB0eXBlICkge1xuXHRyZXR1cm4gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0dmFyIG5hbWUgPSBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7XG5cdFx0cmV0dXJuIChuYW1lID09PSBcImlucHV0XCIgfHwgbmFtZSA9PT0gXCJidXR0b25cIikgJiYgZWxlbS50eXBlID09PSB0eXBlO1xuXHR9O1xufVxuXG4vKipcbiAqIFJldHVybnMgYSBmdW5jdGlvbiB0byB1c2UgaW4gcHNldWRvcyBmb3IgOmVuYWJsZWQvOmRpc2FibGVkXG4gKiBAcGFyYW0ge0Jvb2xlYW59IGRpc2FibGVkIHRydWUgZm9yIDpkaXNhYmxlZDsgZmFsc2UgZm9yIDplbmFibGVkXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZURpc2FibGVkUHNldWRvKCBkaXNhYmxlZCApIHtcblxuXHQvLyBLbm93biA6ZGlzYWJsZWQgZmFsc2UgcG9zaXRpdmVzOiBmaWVsZHNldFtkaXNhYmxlZF0gPiBsZWdlbmQ6bnRoLW9mLXR5cGUobisyKSA6Y2FuLWRpc2FibGVcblx0cmV0dXJuIGZ1bmN0aW9uKCBlbGVtICkge1xuXG5cdFx0Ly8gT25seSBjZXJ0YWluIGVsZW1lbnRzIGNhbiBtYXRjaCA6ZW5hYmxlZCBvciA6ZGlzYWJsZWRcblx0XHQvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9zY3JpcHRpbmcuaHRtbCNzZWxlY3Rvci1lbmFibGVkXG5cdFx0Ly8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvc2NyaXB0aW5nLmh0bWwjc2VsZWN0b3ItZGlzYWJsZWRcblx0XHRpZiAoIFwiZm9ybVwiIGluIGVsZW0gKSB7XG5cblx0XHRcdC8vIENoZWNrIGZvciBpbmhlcml0ZWQgZGlzYWJsZWRuZXNzIG9uIHJlbGV2YW50IG5vbi1kaXNhYmxlZCBlbGVtZW50czpcblx0XHRcdC8vICogbGlzdGVkIGZvcm0tYXNzb2NpYXRlZCBlbGVtZW50cyBpbiBhIGRpc2FibGVkIGZpZWxkc2V0XG5cdFx0XHQvLyAgIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL2Zvcm1zLmh0bWwjY2F0ZWdvcnktbGlzdGVkXG5cdFx0XHQvLyAgIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL2Zvcm1zLmh0bWwjY29uY2VwdC1mZS1kaXNhYmxlZFxuXHRcdFx0Ly8gKiBvcHRpb24gZWxlbWVudHMgaW4gYSBkaXNhYmxlZCBvcHRncm91cFxuXHRcdFx0Ly8gICBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9mb3Jtcy5odG1sI2NvbmNlcHQtb3B0aW9uLWRpc2FibGVkXG5cdFx0XHQvLyBBbGwgc3VjaCBlbGVtZW50cyBoYXZlIGEgXCJmb3JtXCIgcHJvcGVydHkuXG5cdFx0XHRpZiAoIGVsZW0ucGFyZW50Tm9kZSAmJiBlbGVtLmRpc2FibGVkID09PSBmYWxzZSApIHtcblxuXHRcdFx0XHQvLyBPcHRpb24gZWxlbWVudHMgZGVmZXIgdG8gYSBwYXJlbnQgb3B0Z3JvdXAgaWYgcHJlc2VudFxuXHRcdFx0XHRpZiAoIFwibGFiZWxcIiBpbiBlbGVtICkge1xuXHRcdFx0XHRcdGlmICggXCJsYWJlbFwiIGluIGVsZW0ucGFyZW50Tm9kZSApIHtcblx0XHRcdFx0XHRcdHJldHVybiBlbGVtLnBhcmVudE5vZGUuZGlzYWJsZWQgPT09IGRpc2FibGVkO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZWxlbS5kaXNhYmxlZCA9PT0gZGlzYWJsZWQ7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgNiAtIDExXG5cdFx0XHRcdC8vIFVzZSB0aGUgaXNEaXNhYmxlZCBzaG9ydGN1dCBwcm9wZXJ0eSB0byBjaGVjayBmb3IgZGlzYWJsZWQgZmllbGRzZXQgYW5jZXN0b3JzXG5cdFx0XHRcdHJldHVybiBlbGVtLmlzRGlzYWJsZWQgPT09IGRpc2FibGVkIHx8XG5cblx0XHRcdFx0XHQvLyBXaGVyZSB0aGVyZSBpcyBubyBpc0Rpc2FibGVkLCBjaGVjayBtYW51YWxseVxuXHRcdFx0XHRcdC8qIGpzaGludCAtVzAxOCAqL1xuXHRcdFx0XHRcdGVsZW0uaXNEaXNhYmxlZCAhPT0gIWRpc2FibGVkICYmXG5cdFx0XHRcdFx0XHRkaXNhYmxlZEFuY2VzdG9yKCBlbGVtICkgPT09IGRpc2FibGVkO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gZWxlbS5kaXNhYmxlZCA9PT0gZGlzYWJsZWQ7XG5cblx0XHQvLyBUcnkgdG8gd2lubm93IG91dCBlbGVtZW50cyB0aGF0IGNhbid0IGJlIGRpc2FibGVkIGJlZm9yZSB0cnVzdGluZyB0aGUgZGlzYWJsZWQgcHJvcGVydHkuXG5cdFx0Ly8gU29tZSB2aWN0aW1zIGdldCBjYXVnaHQgaW4gb3VyIG5ldCAobGFiZWwsIGxlZ2VuZCwgbWVudSwgdHJhY2spLCBidXQgaXQgc2hvdWxkbid0XG5cdFx0Ly8gZXZlbiBleGlzdCBvbiB0aGVtLCBsZXQgYWxvbmUgaGF2ZSBhIGJvb2xlYW4gdmFsdWUuXG5cdFx0fSBlbHNlIGlmICggXCJsYWJlbFwiIGluIGVsZW0gKSB7XG5cdFx0XHRyZXR1cm4gZWxlbS5kaXNhYmxlZCA9PT0gZGlzYWJsZWQ7XG5cdFx0fVxuXG5cdFx0Ly8gUmVtYWluaW5nIGVsZW1lbnRzIGFyZSBuZWl0aGVyIDplbmFibGVkIG5vciA6ZGlzYWJsZWRcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH07XG59XG5cbi8qKlxuICogUmV0dXJucyBhIGZ1bmN0aW9uIHRvIHVzZSBpbiBwc2V1ZG9zIGZvciBwb3NpdGlvbmFsc1xuICogQHBhcmFtIHtGdW5jdGlvbn0gZm5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlUG9zaXRpb25hbFBzZXVkbyggZm4gKSB7XG5cdHJldHVybiBtYXJrRnVuY3Rpb24oZnVuY3Rpb24oIGFyZ3VtZW50ICkge1xuXHRcdGFyZ3VtZW50ID0gK2FyZ3VtZW50O1xuXHRcdHJldHVybiBtYXJrRnVuY3Rpb24oZnVuY3Rpb24oIHNlZWQsIG1hdGNoZXMgKSB7XG5cdFx0XHR2YXIgaixcblx0XHRcdFx0bWF0Y2hJbmRleGVzID0gZm4oIFtdLCBzZWVkLmxlbmd0aCwgYXJndW1lbnQgKSxcblx0XHRcdFx0aSA9IG1hdGNoSW5kZXhlcy5sZW5ndGg7XG5cblx0XHRcdC8vIE1hdGNoIGVsZW1lbnRzIGZvdW5kIGF0IHRoZSBzcGVjaWZpZWQgaW5kZXhlc1xuXHRcdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHRcdGlmICggc2VlZFsgKGogPSBtYXRjaEluZGV4ZXNbaV0pIF0gKSB7XG5cdFx0XHRcdFx0c2VlZFtqXSA9ICEobWF0Y2hlc1tqXSA9IHNlZWRbal0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH0pO1xufVxuXG4vKipcbiAqIENoZWNrcyBhIG5vZGUgZm9yIHZhbGlkaXR5IGFzIGEgU2l6emxlIGNvbnRleHRcbiAqIEBwYXJhbSB7RWxlbWVudHxPYmplY3Q9fSBjb250ZXh0XG4gKiBAcmV0dXJucyB7RWxlbWVudHxPYmplY3R8Qm9vbGVhbn0gVGhlIGlucHV0IG5vZGUgaWYgYWNjZXB0YWJsZSwgb3RoZXJ3aXNlIGEgZmFsc3kgdmFsdWVcbiAqL1xuZnVuY3Rpb24gdGVzdENvbnRleHQoIGNvbnRleHQgKSB7XG5cdHJldHVybiBjb250ZXh0ICYmIHR5cGVvZiBjb250ZXh0LmdldEVsZW1lbnRzQnlUYWdOYW1lICE9PSBcInVuZGVmaW5lZFwiICYmIGNvbnRleHQ7XG59XG5cbi8vIEV4cG9zZSBzdXBwb3J0IHZhcnMgZm9yIGNvbnZlbmllbmNlXG5zdXBwb3J0ID0gU2l6emxlLnN1cHBvcnQgPSB7fTtcblxuLyoqXG4gKiBEZXRlY3RzIFhNTCBub2Rlc1xuICogQHBhcmFtIHtFbGVtZW50fE9iamVjdH0gZWxlbSBBbiBlbGVtZW50IG9yIGEgZG9jdW1lbnRcbiAqIEByZXR1cm5zIHtCb29sZWFufSBUcnVlIGlmZiBlbGVtIGlzIGEgbm9uLUhUTUwgWE1MIG5vZGVcbiAqL1xuaXNYTUwgPSBTaXp6bGUuaXNYTUwgPSBmdW5jdGlvbiggZWxlbSApIHtcblx0Ly8gZG9jdW1lbnRFbGVtZW50IGlzIHZlcmlmaWVkIGZvciBjYXNlcyB3aGVyZSBpdCBkb2Vzbid0IHlldCBleGlzdFxuXHQvLyAoc3VjaCBhcyBsb2FkaW5nIGlmcmFtZXMgaW4gSUUgLSAjNDgzMylcblx0dmFyIGRvY3VtZW50RWxlbWVudCA9IGVsZW0gJiYgKGVsZW0ub3duZXJEb2N1bWVudCB8fCBlbGVtKS5kb2N1bWVudEVsZW1lbnQ7XG5cdHJldHVybiBkb2N1bWVudEVsZW1lbnQgPyBkb2N1bWVudEVsZW1lbnQubm9kZU5hbWUgIT09IFwiSFRNTFwiIDogZmFsc2U7XG59O1xuXG4vKipcbiAqIFNldHMgZG9jdW1lbnQtcmVsYXRlZCB2YXJpYWJsZXMgb25jZSBiYXNlZCBvbiB0aGUgY3VycmVudCBkb2N1bWVudFxuICogQHBhcmFtIHtFbGVtZW50fE9iamVjdH0gW2RvY10gQW4gZWxlbWVudCBvciBkb2N1bWVudCBvYmplY3QgdG8gdXNlIHRvIHNldCB0aGUgZG9jdW1lbnRcbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGN1cnJlbnQgZG9jdW1lbnRcbiAqL1xuc2V0RG9jdW1lbnQgPSBTaXp6bGUuc2V0RG9jdW1lbnQgPSBmdW5jdGlvbiggbm9kZSApIHtcblx0dmFyIGhhc0NvbXBhcmUsIHN1YldpbmRvdyxcblx0XHRkb2MgPSBub2RlID8gbm9kZS5vd25lckRvY3VtZW50IHx8IG5vZGUgOiBwcmVmZXJyZWREb2M7XG5cblx0Ly8gUmV0dXJuIGVhcmx5IGlmIGRvYyBpcyBpbnZhbGlkIG9yIGFscmVhZHkgc2VsZWN0ZWRcblx0aWYgKCBkb2MgPT09IGRvY3VtZW50IHx8IGRvYy5ub2RlVHlwZSAhPT0gOSB8fCAhZG9jLmRvY3VtZW50RWxlbWVudCApIHtcblx0XHRyZXR1cm4gZG9jdW1lbnQ7XG5cdH1cblxuXHQvLyBVcGRhdGUgZ2xvYmFsIHZhcmlhYmxlc1xuXHRkb2N1bWVudCA9IGRvYztcblx0ZG9jRWxlbSA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcblx0ZG9jdW1lbnRJc0hUTUwgPSAhaXNYTUwoIGRvY3VtZW50ICk7XG5cblx0Ly8gU3VwcG9ydDogSUUgOS0xMSwgRWRnZVxuXHQvLyBBY2Nlc3NpbmcgaWZyYW1lIGRvY3VtZW50cyBhZnRlciB1bmxvYWQgdGhyb3dzIFwicGVybWlzc2lvbiBkZW5pZWRcIiBlcnJvcnMgKGpRdWVyeSAjMTM5MzYpXG5cdGlmICggcHJlZmVycmVkRG9jICE9PSBkb2N1bWVudCAmJlxuXHRcdChzdWJXaW5kb3cgPSBkb2N1bWVudC5kZWZhdWx0VmlldykgJiYgc3ViV2luZG93LnRvcCAhPT0gc3ViV2luZG93ICkge1xuXG5cdFx0Ly8gU3VwcG9ydDogSUUgMTEsIEVkZ2Vcblx0XHRpZiAoIHN1YldpbmRvdy5hZGRFdmVudExpc3RlbmVyICkge1xuXHRcdFx0c3ViV2luZG93LmFkZEV2ZW50TGlzdGVuZXIoIFwidW5sb2FkXCIsIHVubG9hZEhhbmRsZXIsIGZhbHNlICk7XG5cblx0XHQvLyBTdXBwb3J0OiBJRSA5IC0gMTAgb25seVxuXHRcdH0gZWxzZSBpZiAoIHN1YldpbmRvdy5hdHRhY2hFdmVudCApIHtcblx0XHRcdHN1YldpbmRvdy5hdHRhY2hFdmVudCggXCJvbnVubG9hZFwiLCB1bmxvYWRIYW5kbGVyICk7XG5cdFx0fVxuXHR9XG5cblx0LyogQXR0cmlidXRlc1xuXHQtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG5cblx0Ly8gU3VwcG9ydDogSUU8OFxuXHQvLyBWZXJpZnkgdGhhdCBnZXRBdHRyaWJ1dGUgcmVhbGx5IHJldHVybnMgYXR0cmlidXRlcyBhbmQgbm90IHByb3BlcnRpZXNcblx0Ly8gKGV4Y2VwdGluZyBJRTggYm9vbGVhbnMpXG5cdHN1cHBvcnQuYXR0cmlidXRlcyA9IGFzc2VydChmdW5jdGlvbiggZWwgKSB7XG5cdFx0ZWwuY2xhc3NOYW1lID0gXCJpXCI7XG5cdFx0cmV0dXJuICFlbC5nZXRBdHRyaWJ1dGUoXCJjbGFzc05hbWVcIik7XG5cdH0pO1xuXG5cdC8qIGdldEVsZW1lbnQocylCeSpcblx0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuXG5cdC8vIENoZWNrIGlmIGdldEVsZW1lbnRzQnlUYWdOYW1lKFwiKlwiKSByZXR1cm5zIG9ubHkgZWxlbWVudHNcblx0c3VwcG9ydC5nZXRFbGVtZW50c0J5VGFnTmFtZSA9IGFzc2VydChmdW5jdGlvbiggZWwgKSB7XG5cdFx0ZWwuYXBwZW5kQ2hpbGQoIGRvY3VtZW50LmNyZWF0ZUNvbW1lbnQoXCJcIikgKTtcblx0XHRyZXR1cm4gIWVsLmdldEVsZW1lbnRzQnlUYWdOYW1lKFwiKlwiKS5sZW5ndGg7XG5cdH0pO1xuXG5cdC8vIFN1cHBvcnQ6IElFPDlcblx0c3VwcG9ydC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lID0gcm5hdGl2ZS50ZXN0KCBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lICk7XG5cblx0Ly8gU3VwcG9ydDogSUU8MTBcblx0Ly8gQ2hlY2sgaWYgZ2V0RWxlbWVudEJ5SWQgcmV0dXJucyBlbGVtZW50cyBieSBuYW1lXG5cdC8vIFRoZSBicm9rZW4gZ2V0RWxlbWVudEJ5SWQgbWV0aG9kcyBkb24ndCBwaWNrIHVwIHByb2dyYW1tYXRpY2FsbHktc2V0IG5hbWVzLFxuXHQvLyBzbyB1c2UgYSByb3VuZGFib3V0IGdldEVsZW1lbnRzQnlOYW1lIHRlc3Rcblx0c3VwcG9ydC5nZXRCeUlkID0gYXNzZXJ0KGZ1bmN0aW9uKCBlbCApIHtcblx0XHRkb2NFbGVtLmFwcGVuZENoaWxkKCBlbCApLmlkID0gZXhwYW5kbztcblx0XHRyZXR1cm4gIWRvY3VtZW50LmdldEVsZW1lbnRzQnlOYW1lIHx8ICFkb2N1bWVudC5nZXRFbGVtZW50c0J5TmFtZSggZXhwYW5kbyApLmxlbmd0aDtcblx0fSk7XG5cblx0Ly8gSUQgZmlsdGVyIGFuZCBmaW5kXG5cdGlmICggc3VwcG9ydC5nZXRCeUlkICkge1xuXHRcdEV4cHIuZmlsdGVyW1wiSURcIl0gPSBmdW5jdGlvbiggaWQgKSB7XG5cdFx0XHR2YXIgYXR0cklkID0gaWQucmVwbGFjZSggcnVuZXNjYXBlLCBmdW5lc2NhcGUgKTtcblx0XHRcdHJldHVybiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdFx0cmV0dXJuIGVsZW0uZ2V0QXR0cmlidXRlKFwiaWRcIikgPT09IGF0dHJJZDtcblx0XHRcdH07XG5cdFx0fTtcblx0XHRFeHByLmZpbmRbXCJJRFwiXSA9IGZ1bmN0aW9uKCBpZCwgY29udGV4dCApIHtcblx0XHRcdGlmICggdHlwZW9mIGNvbnRleHQuZ2V0RWxlbWVudEJ5SWQgIT09IFwidW5kZWZpbmVkXCIgJiYgZG9jdW1lbnRJc0hUTUwgKSB7XG5cdFx0XHRcdHZhciBlbGVtID0gY29udGV4dC5nZXRFbGVtZW50QnlJZCggaWQgKTtcblx0XHRcdFx0cmV0dXJuIGVsZW0gPyBbIGVsZW0gXSA6IFtdO1xuXHRcdFx0fVxuXHRcdH07XG5cdH0gZWxzZSB7XG5cdFx0RXhwci5maWx0ZXJbXCJJRFwiXSA9ICBmdW5jdGlvbiggaWQgKSB7XG5cdFx0XHR2YXIgYXR0cklkID0gaWQucmVwbGFjZSggcnVuZXNjYXBlLCBmdW5lc2NhcGUgKTtcblx0XHRcdHJldHVybiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdFx0dmFyIG5vZGUgPSB0eXBlb2YgZWxlbS5nZXRBdHRyaWJ1dGVOb2RlICE9PSBcInVuZGVmaW5lZFwiICYmXG5cdFx0XHRcdFx0ZWxlbS5nZXRBdHRyaWJ1dGVOb2RlKFwiaWRcIik7XG5cdFx0XHRcdHJldHVybiBub2RlICYmIG5vZGUudmFsdWUgPT09IGF0dHJJZDtcblx0XHRcdH07XG5cdFx0fTtcblxuXHRcdC8vIFN1cHBvcnQ6IElFIDYgLSA3IG9ubHlcblx0XHQvLyBnZXRFbGVtZW50QnlJZCBpcyBub3QgcmVsaWFibGUgYXMgYSBmaW5kIHNob3J0Y3V0XG5cdFx0RXhwci5maW5kW1wiSURcIl0gPSBmdW5jdGlvbiggaWQsIGNvbnRleHQgKSB7XG5cdFx0XHRpZiAoIHR5cGVvZiBjb250ZXh0LmdldEVsZW1lbnRCeUlkICE9PSBcInVuZGVmaW5lZFwiICYmIGRvY3VtZW50SXNIVE1MICkge1xuXHRcdFx0XHR2YXIgbm9kZSwgaSwgZWxlbXMsXG5cdFx0XHRcdFx0ZWxlbSA9IGNvbnRleHQuZ2V0RWxlbWVudEJ5SWQoIGlkICk7XG5cblx0XHRcdFx0aWYgKCBlbGVtICkge1xuXG5cdFx0XHRcdFx0Ly8gVmVyaWZ5IHRoZSBpZCBhdHRyaWJ1dGVcblx0XHRcdFx0XHRub2RlID0gZWxlbS5nZXRBdHRyaWJ1dGVOb2RlKFwiaWRcIik7XG5cdFx0XHRcdFx0aWYgKCBub2RlICYmIG5vZGUudmFsdWUgPT09IGlkICkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIFsgZWxlbSBdO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIEZhbGwgYmFjayBvbiBnZXRFbGVtZW50c0J5TmFtZVxuXHRcdFx0XHRcdGVsZW1zID0gY29udGV4dC5nZXRFbGVtZW50c0J5TmFtZSggaWQgKTtcblx0XHRcdFx0XHRpID0gMDtcblx0XHRcdFx0XHR3aGlsZSAoIChlbGVtID0gZWxlbXNbaSsrXSkgKSB7XG5cdFx0XHRcdFx0XHRub2RlID0gZWxlbS5nZXRBdHRyaWJ1dGVOb2RlKFwiaWRcIik7XG5cdFx0XHRcdFx0XHRpZiAoIG5vZGUgJiYgbm9kZS52YWx1ZSA9PT0gaWQgKSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiBbIGVsZW0gXTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gW107XG5cdFx0XHR9XG5cdFx0fTtcblx0fVxuXG5cdC8vIFRhZ1xuXHRFeHByLmZpbmRbXCJUQUdcIl0gPSBzdXBwb3J0LmdldEVsZW1lbnRzQnlUYWdOYW1lID9cblx0XHRmdW5jdGlvbiggdGFnLCBjb250ZXh0ICkge1xuXHRcdFx0aWYgKCB0eXBlb2YgY29udGV4dC5nZXRFbGVtZW50c0J5VGFnTmFtZSAhPT0gXCJ1bmRlZmluZWRcIiApIHtcblx0XHRcdFx0cmV0dXJuIGNvbnRleHQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIHRhZyApO1xuXG5cdFx0XHQvLyBEb2N1bWVudEZyYWdtZW50IG5vZGVzIGRvbid0IGhhdmUgZ0VCVE5cblx0XHRcdH0gZWxzZSBpZiAoIHN1cHBvcnQucXNhICkge1xuXHRcdFx0XHRyZXR1cm4gY29udGV4dC5xdWVyeVNlbGVjdG9yQWxsKCB0YWcgKTtcblx0XHRcdH1cblx0XHR9IDpcblxuXHRcdGZ1bmN0aW9uKCB0YWcsIGNvbnRleHQgKSB7XG5cdFx0XHR2YXIgZWxlbSxcblx0XHRcdFx0dG1wID0gW10sXG5cdFx0XHRcdGkgPSAwLFxuXHRcdFx0XHQvLyBCeSBoYXBweSBjb2luY2lkZW5jZSwgYSAoYnJva2VuKSBnRUJUTiBhcHBlYXJzIG9uIERvY3VtZW50RnJhZ21lbnQgbm9kZXMgdG9vXG5cdFx0XHRcdHJlc3VsdHMgPSBjb250ZXh0LmdldEVsZW1lbnRzQnlUYWdOYW1lKCB0YWcgKTtcblxuXHRcdFx0Ly8gRmlsdGVyIG91dCBwb3NzaWJsZSBjb21tZW50c1xuXHRcdFx0aWYgKCB0YWcgPT09IFwiKlwiICkge1xuXHRcdFx0XHR3aGlsZSAoIChlbGVtID0gcmVzdWx0c1tpKytdKSApIHtcblx0XHRcdFx0XHRpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgKSB7XG5cdFx0XHRcdFx0XHR0bXAucHVzaCggZWxlbSApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiB0bXA7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gcmVzdWx0cztcblx0XHR9O1xuXG5cdC8vIENsYXNzXG5cdEV4cHIuZmluZFtcIkNMQVNTXCJdID0gc3VwcG9ydC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lICYmIGZ1bmN0aW9uKCBjbGFzc05hbWUsIGNvbnRleHQgKSB7XG5cdFx0aWYgKCB0eXBlb2YgY29udGV4dC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lICE9PSBcInVuZGVmaW5lZFwiICYmIGRvY3VtZW50SXNIVE1MICkge1xuXHRcdFx0cmV0dXJuIGNvbnRleHQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSggY2xhc3NOYW1lICk7XG5cdFx0fVxuXHR9O1xuXG5cdC8qIFFTQS9tYXRjaGVzU2VsZWN0b3Jcblx0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuXG5cdC8vIFFTQSBhbmQgbWF0Y2hlc1NlbGVjdG9yIHN1cHBvcnRcblxuXHQvLyBtYXRjaGVzU2VsZWN0b3IoOmFjdGl2ZSkgcmVwb3J0cyBmYWxzZSB3aGVuIHRydWUgKElFOS9PcGVyYSAxMS41KVxuXHRyYnVnZ3lNYXRjaGVzID0gW107XG5cblx0Ly8gcVNhKDpmb2N1cykgcmVwb3J0cyBmYWxzZSB3aGVuIHRydWUgKENocm9tZSAyMSlcblx0Ly8gV2UgYWxsb3cgdGhpcyBiZWNhdXNlIG9mIGEgYnVnIGluIElFOC85IHRoYXQgdGhyb3dzIGFuIGVycm9yXG5cdC8vIHdoZW5ldmVyIGBkb2N1bWVudC5hY3RpdmVFbGVtZW50YCBpcyBhY2Nlc3NlZCBvbiBhbiBpZnJhbWVcblx0Ly8gU28sIHdlIGFsbG93IDpmb2N1cyB0byBwYXNzIHRocm91Z2ggUVNBIGFsbCB0aGUgdGltZSB0byBhdm9pZCB0aGUgSUUgZXJyb3Jcblx0Ly8gU2VlIGh0dHBzOi8vYnVncy5qcXVlcnkuY29tL3RpY2tldC8xMzM3OFxuXHRyYnVnZ3lRU0EgPSBbXTtcblxuXHRpZiAoIChzdXBwb3J0LnFzYSA9IHJuYXRpdmUudGVzdCggZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCApKSApIHtcblx0XHQvLyBCdWlsZCBRU0EgcmVnZXhcblx0XHQvLyBSZWdleCBzdHJhdGVneSBhZG9wdGVkIGZyb20gRGllZ28gUGVyaW5pXG5cdFx0YXNzZXJ0KGZ1bmN0aW9uKCBlbCApIHtcblx0XHRcdC8vIFNlbGVjdCBpcyBzZXQgdG8gZW1wdHkgc3RyaW5nIG9uIHB1cnBvc2Vcblx0XHRcdC8vIFRoaXMgaXMgdG8gdGVzdCBJRSdzIHRyZWF0bWVudCBvZiBub3QgZXhwbGljaXRseVxuXHRcdFx0Ly8gc2V0dGluZyBhIGJvb2xlYW4gY29udGVudCBhdHRyaWJ1dGUsXG5cdFx0XHQvLyBzaW5jZSBpdHMgcHJlc2VuY2Ugc2hvdWxkIGJlIGVub3VnaFxuXHRcdFx0Ly8gaHR0cHM6Ly9idWdzLmpxdWVyeS5jb20vdGlja2V0LzEyMzU5XG5cdFx0XHRkb2NFbGVtLmFwcGVuZENoaWxkKCBlbCApLmlubmVySFRNTCA9IFwiPGEgaWQ9J1wiICsgZXhwYW5kbyArIFwiJz48L2E+XCIgK1xuXHRcdFx0XHRcIjxzZWxlY3QgaWQ9J1wiICsgZXhwYW5kbyArIFwiLVxcclxcXFwnIG1zYWxsb3djYXB0dXJlPScnPlwiICtcblx0XHRcdFx0XCI8b3B0aW9uIHNlbGVjdGVkPScnPjwvb3B0aW9uPjwvc2VsZWN0PlwiO1xuXG5cdFx0XHQvLyBTdXBwb3J0OiBJRTgsIE9wZXJhIDExLTEyLjE2XG5cdFx0XHQvLyBOb3RoaW5nIHNob3VsZCBiZSBzZWxlY3RlZCB3aGVuIGVtcHR5IHN0cmluZ3MgZm9sbG93IF49IG9yICQ9IG9yICo9XG5cdFx0XHQvLyBUaGUgdGVzdCBhdHRyaWJ1dGUgbXVzdCBiZSB1bmtub3duIGluIE9wZXJhIGJ1dCBcInNhZmVcIiBmb3IgV2luUlRcblx0XHRcdC8vIGh0dHBzOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvaWUvaGg0NjUzODguYXNweCNhdHRyaWJ1dGVfc2VjdGlvblxuXHRcdFx0aWYgKCBlbC5xdWVyeVNlbGVjdG9yQWxsKFwiW21zYWxsb3djYXB0dXJlXj0nJ11cIikubGVuZ3RoICkge1xuXHRcdFx0XHRyYnVnZ3lRU0EucHVzaCggXCJbKl4kXT1cIiArIHdoaXRlc3BhY2UgKyBcIiooPzonJ3xcXFwiXFxcIilcIiApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBTdXBwb3J0OiBJRThcblx0XHRcdC8vIEJvb2xlYW4gYXR0cmlidXRlcyBhbmQgXCJ2YWx1ZVwiIGFyZSBub3QgdHJlYXRlZCBjb3JyZWN0bHlcblx0XHRcdGlmICggIWVsLnF1ZXJ5U2VsZWN0b3JBbGwoXCJbc2VsZWN0ZWRdXCIpLmxlbmd0aCApIHtcblx0XHRcdFx0cmJ1Z2d5UVNBLnB1c2goIFwiXFxcXFtcIiArIHdoaXRlc3BhY2UgKyBcIiooPzp2YWx1ZXxcIiArIGJvb2xlYW5zICsgXCIpXCIgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gU3VwcG9ydDogQ2hyb21lPDI5LCBBbmRyb2lkPDQuNCwgU2FmYXJpPDcuMCssIGlPUzw3LjArLCBQaGFudG9tSlM8MS45LjgrXG5cdFx0XHRpZiAoICFlbC5xdWVyeVNlbGVjdG9yQWxsKCBcIltpZH49XCIgKyBleHBhbmRvICsgXCItXVwiICkubGVuZ3RoICkge1xuXHRcdFx0XHRyYnVnZ3lRU0EucHVzaChcIn49XCIpO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBXZWJraXQvT3BlcmEgLSA6Y2hlY2tlZCBzaG91bGQgcmV0dXJuIHNlbGVjdGVkIG9wdGlvbiBlbGVtZW50c1xuXHRcdFx0Ly8gaHR0cDovL3d3dy53My5vcmcvVFIvMjAxMS9SRUMtY3NzMy1zZWxlY3RvcnMtMjAxMTA5MjkvI2NoZWNrZWRcblx0XHRcdC8vIElFOCB0aHJvd3MgZXJyb3IgaGVyZSBhbmQgd2lsbCBub3Qgc2VlIGxhdGVyIHRlc3RzXG5cdFx0XHRpZiAoICFlbC5xdWVyeVNlbGVjdG9yQWxsKFwiOmNoZWNrZWRcIikubGVuZ3RoICkge1xuXHRcdFx0XHRyYnVnZ3lRU0EucHVzaChcIjpjaGVja2VkXCIpO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBTdXBwb3J0OiBTYWZhcmkgOCssIGlPUyA4K1xuXHRcdFx0Ly8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNjg1MVxuXHRcdFx0Ly8gSW4tcGFnZSBgc2VsZWN0b3IjaWQgc2libGluZy1jb21iaW5hdG9yIHNlbGVjdG9yYCBmYWlsc1xuXHRcdFx0aWYgKCAhZWwucXVlcnlTZWxlY3RvckFsbCggXCJhI1wiICsgZXhwYW5kbyArIFwiKypcIiApLmxlbmd0aCApIHtcblx0XHRcdFx0cmJ1Z2d5UVNBLnB1c2goXCIuIy4rWyt+XVwiKTtcblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdGFzc2VydChmdW5jdGlvbiggZWwgKSB7XG5cdFx0XHRlbC5pbm5lckhUTUwgPSBcIjxhIGhyZWY9JycgZGlzYWJsZWQ9J2Rpc2FibGVkJz48L2E+XCIgK1xuXHRcdFx0XHRcIjxzZWxlY3QgZGlzYWJsZWQ9J2Rpc2FibGVkJz48b3B0aW9uLz48L3NlbGVjdD5cIjtcblxuXHRcdFx0Ly8gU3VwcG9ydDogV2luZG93cyA4IE5hdGl2ZSBBcHBzXG5cdFx0XHQvLyBUaGUgdHlwZSBhbmQgbmFtZSBhdHRyaWJ1dGVzIGFyZSByZXN0cmljdGVkIGR1cmluZyAuaW5uZXJIVE1MIGFzc2lnbm1lbnRcblx0XHRcdHZhciBpbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpbnB1dFwiKTtcblx0XHRcdGlucHV0LnNldEF0dHJpYnV0ZSggXCJ0eXBlXCIsIFwiaGlkZGVuXCIgKTtcblx0XHRcdGVsLmFwcGVuZENoaWxkKCBpbnB1dCApLnNldEF0dHJpYnV0ZSggXCJuYW1lXCIsIFwiRFwiICk7XG5cblx0XHRcdC8vIFN1cHBvcnQ6IElFOFxuXHRcdFx0Ly8gRW5mb3JjZSBjYXNlLXNlbnNpdGl2aXR5IG9mIG5hbWUgYXR0cmlidXRlXG5cdFx0XHRpZiAoIGVsLnF1ZXJ5U2VsZWN0b3JBbGwoXCJbbmFtZT1kXVwiKS5sZW5ndGggKSB7XG5cdFx0XHRcdHJidWdneVFTQS5wdXNoKCBcIm5hbWVcIiArIHdoaXRlc3BhY2UgKyBcIipbKl4kfCF+XT89XCIgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gRkYgMy41IC0gOmVuYWJsZWQvOmRpc2FibGVkIGFuZCBoaWRkZW4gZWxlbWVudHMgKGhpZGRlbiBlbGVtZW50cyBhcmUgc3RpbGwgZW5hYmxlZClcblx0XHRcdC8vIElFOCB0aHJvd3MgZXJyb3IgaGVyZSBhbmQgd2lsbCBub3Qgc2VlIGxhdGVyIHRlc3RzXG5cdFx0XHRpZiAoIGVsLnF1ZXJ5U2VsZWN0b3JBbGwoXCI6ZW5hYmxlZFwiKS5sZW5ndGggIT09IDIgKSB7XG5cdFx0XHRcdHJidWdneVFTQS5wdXNoKCBcIjplbmFibGVkXCIsIFwiOmRpc2FibGVkXCIgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gU3VwcG9ydDogSUU5LTExK1xuXHRcdFx0Ly8gSUUncyA6ZGlzYWJsZWQgc2VsZWN0b3IgZG9lcyBub3QgcGljayB1cCB0aGUgY2hpbGRyZW4gb2YgZGlzYWJsZWQgZmllbGRzZXRzXG5cdFx0XHRkb2NFbGVtLmFwcGVuZENoaWxkKCBlbCApLmRpc2FibGVkID0gdHJ1ZTtcblx0XHRcdGlmICggZWwucXVlcnlTZWxlY3RvckFsbChcIjpkaXNhYmxlZFwiKS5sZW5ndGggIT09IDIgKSB7XG5cdFx0XHRcdHJidWdneVFTQS5wdXNoKCBcIjplbmFibGVkXCIsIFwiOmRpc2FibGVkXCIgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gT3BlcmEgMTAtMTEgZG9lcyBub3QgdGhyb3cgb24gcG9zdC1jb21tYSBpbnZhbGlkIHBzZXVkb3Ncblx0XHRcdGVsLnF1ZXJ5U2VsZWN0b3JBbGwoXCIqLDp4XCIpO1xuXHRcdFx0cmJ1Z2d5UVNBLnB1c2goXCIsLio6XCIpO1xuXHRcdH0pO1xuXHR9XG5cblx0aWYgKCAoc3VwcG9ydC5tYXRjaGVzU2VsZWN0b3IgPSBybmF0aXZlLnRlc3QoIChtYXRjaGVzID0gZG9jRWxlbS5tYXRjaGVzIHx8XG5cdFx0ZG9jRWxlbS53ZWJraXRNYXRjaGVzU2VsZWN0b3IgfHxcblx0XHRkb2NFbGVtLm1vek1hdGNoZXNTZWxlY3RvciB8fFxuXHRcdGRvY0VsZW0ub01hdGNoZXNTZWxlY3RvciB8fFxuXHRcdGRvY0VsZW0ubXNNYXRjaGVzU2VsZWN0b3IpICkpICkge1xuXG5cdFx0YXNzZXJ0KGZ1bmN0aW9uKCBlbCApIHtcblx0XHRcdC8vIENoZWNrIHRvIHNlZSBpZiBpdCdzIHBvc3NpYmxlIHRvIGRvIG1hdGNoZXNTZWxlY3RvclxuXHRcdFx0Ly8gb24gYSBkaXNjb25uZWN0ZWQgbm9kZSAoSUUgOSlcblx0XHRcdHN1cHBvcnQuZGlzY29ubmVjdGVkTWF0Y2ggPSBtYXRjaGVzLmNhbGwoIGVsLCBcIipcIiApO1xuXG5cdFx0XHQvLyBUaGlzIHNob3VsZCBmYWlsIHdpdGggYW4gZXhjZXB0aW9uXG5cdFx0XHQvLyBHZWNrbyBkb2VzIG5vdCBlcnJvciwgcmV0dXJucyBmYWxzZSBpbnN0ZWFkXG5cdFx0XHRtYXRjaGVzLmNhbGwoIGVsLCBcIltzIT0nJ106eFwiICk7XG5cdFx0XHRyYnVnZ3lNYXRjaGVzLnB1c2goIFwiIT1cIiwgcHNldWRvcyApO1xuXHRcdH0pO1xuXHR9XG5cblx0cmJ1Z2d5UVNBID0gcmJ1Z2d5UVNBLmxlbmd0aCAmJiBuZXcgUmVnRXhwKCByYnVnZ3lRU0Euam9pbihcInxcIikgKTtcblx0cmJ1Z2d5TWF0Y2hlcyA9IHJidWdneU1hdGNoZXMubGVuZ3RoICYmIG5ldyBSZWdFeHAoIHJidWdneU1hdGNoZXMuam9pbihcInxcIikgKTtcblxuXHQvKiBDb250YWluc1xuXHQtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG5cdGhhc0NvbXBhcmUgPSBybmF0aXZlLnRlc3QoIGRvY0VsZW0uY29tcGFyZURvY3VtZW50UG9zaXRpb24gKTtcblxuXHQvLyBFbGVtZW50IGNvbnRhaW5zIGFub3RoZXJcblx0Ly8gUHVycG9zZWZ1bGx5IHNlbGYtZXhjbHVzaXZlXG5cdC8vIEFzIGluLCBhbiBlbGVtZW50IGRvZXMgbm90IGNvbnRhaW4gaXRzZWxmXG5cdGNvbnRhaW5zID0gaGFzQ29tcGFyZSB8fCBybmF0aXZlLnRlc3QoIGRvY0VsZW0uY29udGFpbnMgKSA/XG5cdFx0ZnVuY3Rpb24oIGEsIGIgKSB7XG5cdFx0XHR2YXIgYWRvd24gPSBhLm5vZGVUeXBlID09PSA5ID8gYS5kb2N1bWVudEVsZW1lbnQgOiBhLFxuXHRcdFx0XHRidXAgPSBiICYmIGIucGFyZW50Tm9kZTtcblx0XHRcdHJldHVybiBhID09PSBidXAgfHwgISEoIGJ1cCAmJiBidXAubm9kZVR5cGUgPT09IDEgJiYgKFxuXHRcdFx0XHRhZG93bi5jb250YWlucyA/XG5cdFx0XHRcdFx0YWRvd24uY29udGFpbnMoIGJ1cCApIDpcblx0XHRcdFx0XHRhLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uICYmIGEuY29tcGFyZURvY3VtZW50UG9zaXRpb24oIGJ1cCApICYgMTZcblx0XHRcdCkpO1xuXHRcdH0gOlxuXHRcdGZ1bmN0aW9uKCBhLCBiICkge1xuXHRcdFx0aWYgKCBiICkge1xuXHRcdFx0XHR3aGlsZSAoIChiID0gYi5wYXJlbnROb2RlKSApIHtcblx0XHRcdFx0XHRpZiAoIGIgPT09IGEgKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9O1xuXG5cdC8qIFNvcnRpbmdcblx0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuXG5cdC8vIERvY3VtZW50IG9yZGVyIHNvcnRpbmdcblx0c29ydE9yZGVyID0gaGFzQ29tcGFyZSA/XG5cdGZ1bmN0aW9uKCBhLCBiICkge1xuXG5cdFx0Ly8gRmxhZyBmb3IgZHVwbGljYXRlIHJlbW92YWxcblx0XHRpZiAoIGEgPT09IGIgKSB7XG5cdFx0XHRoYXNEdXBsaWNhdGUgPSB0cnVlO1xuXHRcdFx0cmV0dXJuIDA7XG5cdFx0fVxuXG5cdFx0Ly8gU29ydCBvbiBtZXRob2QgZXhpc3RlbmNlIGlmIG9ubHkgb25lIGlucHV0IGhhcyBjb21wYXJlRG9jdW1lbnRQb3NpdGlvblxuXHRcdHZhciBjb21wYXJlID0gIWEuY29tcGFyZURvY3VtZW50UG9zaXRpb24gLSAhYi5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbjtcblx0XHRpZiAoIGNvbXBhcmUgKSB7XG5cdFx0XHRyZXR1cm4gY29tcGFyZTtcblx0XHR9XG5cblx0XHQvLyBDYWxjdWxhdGUgcG9zaXRpb24gaWYgYm90aCBpbnB1dHMgYmVsb25nIHRvIHRoZSBzYW1lIGRvY3VtZW50XG5cdFx0Y29tcGFyZSA9ICggYS5vd25lckRvY3VtZW50IHx8IGEgKSA9PT0gKCBiLm93bmVyRG9jdW1lbnQgfHwgYiApID9cblx0XHRcdGEuY29tcGFyZURvY3VtZW50UG9zaXRpb24oIGIgKSA6XG5cblx0XHRcdC8vIE90aGVyd2lzZSB3ZSBrbm93IHRoZXkgYXJlIGRpc2Nvbm5lY3RlZFxuXHRcdFx0MTtcblxuXHRcdC8vIERpc2Nvbm5lY3RlZCBub2Rlc1xuXHRcdGlmICggY29tcGFyZSAmIDEgfHxcblx0XHRcdCghc3VwcG9ydC5zb3J0RGV0YWNoZWQgJiYgYi5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiggYSApID09PSBjb21wYXJlKSApIHtcblxuXHRcdFx0Ly8gQ2hvb3NlIHRoZSBmaXJzdCBlbGVtZW50IHRoYXQgaXMgcmVsYXRlZCB0byBvdXIgcHJlZmVycmVkIGRvY3VtZW50XG5cdFx0XHRpZiAoIGEgPT09IGRvY3VtZW50IHx8IGEub3duZXJEb2N1bWVudCA9PT0gcHJlZmVycmVkRG9jICYmIGNvbnRhaW5zKHByZWZlcnJlZERvYywgYSkgKSB7XG5cdFx0XHRcdHJldHVybiAtMTtcblx0XHRcdH1cblx0XHRcdGlmICggYiA9PT0gZG9jdW1lbnQgfHwgYi5vd25lckRvY3VtZW50ID09PSBwcmVmZXJyZWREb2MgJiYgY29udGFpbnMocHJlZmVycmVkRG9jLCBiKSApIHtcblx0XHRcdFx0cmV0dXJuIDE7XG5cdFx0XHR9XG5cblx0XHRcdC8vIE1haW50YWluIG9yaWdpbmFsIG9yZGVyXG5cdFx0XHRyZXR1cm4gc29ydElucHV0ID9cblx0XHRcdFx0KCBpbmRleE9mKCBzb3J0SW5wdXQsIGEgKSAtIGluZGV4T2YoIHNvcnRJbnB1dCwgYiApICkgOlxuXHRcdFx0XHQwO1xuXHRcdH1cblxuXHRcdHJldHVybiBjb21wYXJlICYgNCA/IC0xIDogMTtcblx0fSA6XG5cdGZ1bmN0aW9uKCBhLCBiICkge1xuXHRcdC8vIEV4aXQgZWFybHkgaWYgdGhlIG5vZGVzIGFyZSBpZGVudGljYWxcblx0XHRpZiAoIGEgPT09IGIgKSB7XG5cdFx0XHRoYXNEdXBsaWNhdGUgPSB0cnVlO1xuXHRcdFx0cmV0dXJuIDA7XG5cdFx0fVxuXG5cdFx0dmFyIGN1cixcblx0XHRcdGkgPSAwLFxuXHRcdFx0YXVwID0gYS5wYXJlbnROb2RlLFxuXHRcdFx0YnVwID0gYi5wYXJlbnROb2RlLFxuXHRcdFx0YXAgPSBbIGEgXSxcblx0XHRcdGJwID0gWyBiIF07XG5cblx0XHQvLyBQYXJlbnRsZXNzIG5vZGVzIGFyZSBlaXRoZXIgZG9jdW1lbnRzIG9yIGRpc2Nvbm5lY3RlZFxuXHRcdGlmICggIWF1cCB8fCAhYnVwICkge1xuXHRcdFx0cmV0dXJuIGEgPT09IGRvY3VtZW50ID8gLTEgOlxuXHRcdFx0XHRiID09PSBkb2N1bWVudCA/IDEgOlxuXHRcdFx0XHRhdXAgPyAtMSA6XG5cdFx0XHRcdGJ1cCA/IDEgOlxuXHRcdFx0XHRzb3J0SW5wdXQgP1xuXHRcdFx0XHQoIGluZGV4T2YoIHNvcnRJbnB1dCwgYSApIC0gaW5kZXhPZiggc29ydElucHV0LCBiICkgKSA6XG5cdFx0XHRcdDA7XG5cblx0XHQvLyBJZiB0aGUgbm9kZXMgYXJlIHNpYmxpbmdzLCB3ZSBjYW4gZG8gYSBxdWljayBjaGVja1xuXHRcdH0gZWxzZSBpZiAoIGF1cCA9PT0gYnVwICkge1xuXHRcdFx0cmV0dXJuIHNpYmxpbmdDaGVjayggYSwgYiApO1xuXHRcdH1cblxuXHRcdC8vIE90aGVyd2lzZSB3ZSBuZWVkIGZ1bGwgbGlzdHMgb2YgdGhlaXIgYW5jZXN0b3JzIGZvciBjb21wYXJpc29uXG5cdFx0Y3VyID0gYTtcblx0XHR3aGlsZSAoIChjdXIgPSBjdXIucGFyZW50Tm9kZSkgKSB7XG5cdFx0XHRhcC51bnNoaWZ0KCBjdXIgKTtcblx0XHR9XG5cdFx0Y3VyID0gYjtcblx0XHR3aGlsZSAoIChjdXIgPSBjdXIucGFyZW50Tm9kZSkgKSB7XG5cdFx0XHRicC51bnNoaWZ0KCBjdXIgKTtcblx0XHR9XG5cblx0XHQvLyBXYWxrIGRvd24gdGhlIHRyZWUgbG9va2luZyBmb3IgYSBkaXNjcmVwYW5jeVxuXHRcdHdoaWxlICggYXBbaV0gPT09IGJwW2ldICkge1xuXHRcdFx0aSsrO1xuXHRcdH1cblxuXHRcdHJldHVybiBpID9cblx0XHRcdC8vIERvIGEgc2libGluZyBjaGVjayBpZiB0aGUgbm9kZXMgaGF2ZSBhIGNvbW1vbiBhbmNlc3RvclxuXHRcdFx0c2libGluZ0NoZWNrKCBhcFtpXSwgYnBbaV0gKSA6XG5cblx0XHRcdC8vIE90aGVyd2lzZSBub2RlcyBpbiBvdXIgZG9jdW1lbnQgc29ydCBmaXJzdFxuXHRcdFx0YXBbaV0gPT09IHByZWZlcnJlZERvYyA/IC0xIDpcblx0XHRcdGJwW2ldID09PSBwcmVmZXJyZWREb2MgPyAxIDpcblx0XHRcdDA7XG5cdH07XG5cblx0cmV0dXJuIGRvY3VtZW50O1xufTtcblxuU2l6emxlLm1hdGNoZXMgPSBmdW5jdGlvbiggZXhwciwgZWxlbWVudHMgKSB7XG5cdHJldHVybiBTaXp6bGUoIGV4cHIsIG51bGwsIG51bGwsIGVsZW1lbnRzICk7XG59O1xuXG5TaXp6bGUubWF0Y2hlc1NlbGVjdG9yID0gZnVuY3Rpb24oIGVsZW0sIGV4cHIgKSB7XG5cdC8vIFNldCBkb2N1bWVudCB2YXJzIGlmIG5lZWRlZFxuXHRpZiAoICggZWxlbS5vd25lckRvY3VtZW50IHx8IGVsZW0gKSAhPT0gZG9jdW1lbnQgKSB7XG5cdFx0c2V0RG9jdW1lbnQoIGVsZW0gKTtcblx0fVxuXG5cdC8vIE1ha2Ugc3VyZSB0aGF0IGF0dHJpYnV0ZSBzZWxlY3RvcnMgYXJlIHF1b3RlZFxuXHRleHByID0gZXhwci5yZXBsYWNlKCByYXR0cmlidXRlUXVvdGVzLCBcIj0nJDEnXVwiICk7XG5cblx0aWYgKCBzdXBwb3J0Lm1hdGNoZXNTZWxlY3RvciAmJiBkb2N1bWVudElzSFRNTCAmJlxuXHRcdCFjb21waWxlckNhY2hlWyBleHByICsgXCIgXCIgXSAmJlxuXHRcdCggIXJidWdneU1hdGNoZXMgfHwgIXJidWdneU1hdGNoZXMudGVzdCggZXhwciApICkgJiZcblx0XHQoICFyYnVnZ3lRU0EgICAgIHx8ICFyYnVnZ3lRU0EudGVzdCggZXhwciApICkgKSB7XG5cblx0XHR0cnkge1xuXHRcdFx0dmFyIHJldCA9IG1hdGNoZXMuY2FsbCggZWxlbSwgZXhwciApO1xuXG5cdFx0XHQvLyBJRSA5J3MgbWF0Y2hlc1NlbGVjdG9yIHJldHVybnMgZmFsc2Ugb24gZGlzY29ubmVjdGVkIG5vZGVzXG5cdFx0XHRpZiAoIHJldCB8fCBzdXBwb3J0LmRpc2Nvbm5lY3RlZE1hdGNoIHx8XG5cdFx0XHRcdFx0Ly8gQXMgd2VsbCwgZGlzY29ubmVjdGVkIG5vZGVzIGFyZSBzYWlkIHRvIGJlIGluIGEgZG9jdW1lbnRcblx0XHRcdFx0XHQvLyBmcmFnbWVudCBpbiBJRSA5XG5cdFx0XHRcdFx0ZWxlbS5kb2N1bWVudCAmJiBlbGVtLmRvY3VtZW50Lm5vZGVUeXBlICE9PSAxMSApIHtcblx0XHRcdFx0cmV0dXJuIHJldDtcblx0XHRcdH1cblx0XHR9IGNhdGNoIChlKSB7fVxuXHR9XG5cblx0cmV0dXJuIFNpenpsZSggZXhwciwgZG9jdW1lbnQsIG51bGwsIFsgZWxlbSBdICkubGVuZ3RoID4gMDtcbn07XG5cblNpenpsZS5jb250YWlucyA9IGZ1bmN0aW9uKCBjb250ZXh0LCBlbGVtICkge1xuXHQvLyBTZXQgZG9jdW1lbnQgdmFycyBpZiBuZWVkZWRcblx0aWYgKCAoIGNvbnRleHQub3duZXJEb2N1bWVudCB8fCBjb250ZXh0ICkgIT09IGRvY3VtZW50ICkge1xuXHRcdHNldERvY3VtZW50KCBjb250ZXh0ICk7XG5cdH1cblx0cmV0dXJuIGNvbnRhaW5zKCBjb250ZXh0LCBlbGVtICk7XG59O1xuXG5TaXp6bGUuYXR0ciA9IGZ1bmN0aW9uKCBlbGVtLCBuYW1lICkge1xuXHQvLyBTZXQgZG9jdW1lbnQgdmFycyBpZiBuZWVkZWRcblx0aWYgKCAoIGVsZW0ub3duZXJEb2N1bWVudCB8fCBlbGVtICkgIT09IGRvY3VtZW50ICkge1xuXHRcdHNldERvY3VtZW50KCBlbGVtICk7XG5cdH1cblxuXHR2YXIgZm4gPSBFeHByLmF0dHJIYW5kbGVbIG5hbWUudG9Mb3dlckNhc2UoKSBdLFxuXHRcdC8vIERvbid0IGdldCBmb29sZWQgYnkgT2JqZWN0LnByb3RvdHlwZSBwcm9wZXJ0aWVzIChqUXVlcnkgIzEzODA3KVxuXHRcdHZhbCA9IGZuICYmIGhhc093bi5jYWxsKCBFeHByLmF0dHJIYW5kbGUsIG5hbWUudG9Mb3dlckNhc2UoKSApID9cblx0XHRcdGZuKCBlbGVtLCBuYW1lLCAhZG9jdW1lbnRJc0hUTUwgKSA6XG5cdFx0XHR1bmRlZmluZWQ7XG5cblx0cmV0dXJuIHZhbCAhPT0gdW5kZWZpbmVkID9cblx0XHR2YWwgOlxuXHRcdHN1cHBvcnQuYXR0cmlidXRlcyB8fCAhZG9jdW1lbnRJc0hUTUwgP1xuXHRcdFx0ZWxlbS5nZXRBdHRyaWJ1dGUoIG5hbWUgKSA6XG5cdFx0XHQodmFsID0gZWxlbS5nZXRBdHRyaWJ1dGVOb2RlKG5hbWUpKSAmJiB2YWwuc3BlY2lmaWVkID9cblx0XHRcdFx0dmFsLnZhbHVlIDpcblx0XHRcdFx0bnVsbDtcbn07XG5cblNpenpsZS5lc2NhcGUgPSBmdW5jdGlvbiggc2VsICkge1xuXHRyZXR1cm4gKHNlbCArIFwiXCIpLnJlcGxhY2UoIHJjc3Nlc2NhcGUsIGZjc3Nlc2NhcGUgKTtcbn07XG5cblNpenpsZS5lcnJvciA9IGZ1bmN0aW9uKCBtc2cgKSB7XG5cdHRocm93IG5ldyBFcnJvciggXCJTeW50YXggZXJyb3IsIHVucmVjb2duaXplZCBleHByZXNzaW9uOiBcIiArIG1zZyApO1xufTtcblxuLyoqXG4gKiBEb2N1bWVudCBzb3J0aW5nIGFuZCByZW1vdmluZyBkdXBsaWNhdGVzXG4gKiBAcGFyYW0ge0FycmF5TGlrZX0gcmVzdWx0c1xuICovXG5TaXp6bGUudW5pcXVlU29ydCA9IGZ1bmN0aW9uKCByZXN1bHRzICkge1xuXHR2YXIgZWxlbSxcblx0XHRkdXBsaWNhdGVzID0gW10sXG5cdFx0aiA9IDAsXG5cdFx0aSA9IDA7XG5cblx0Ly8gVW5sZXNzIHdlICprbm93KiB3ZSBjYW4gZGV0ZWN0IGR1cGxpY2F0ZXMsIGFzc3VtZSB0aGVpciBwcmVzZW5jZVxuXHRoYXNEdXBsaWNhdGUgPSAhc3VwcG9ydC5kZXRlY3REdXBsaWNhdGVzO1xuXHRzb3J0SW5wdXQgPSAhc3VwcG9ydC5zb3J0U3RhYmxlICYmIHJlc3VsdHMuc2xpY2UoIDAgKTtcblx0cmVzdWx0cy5zb3J0KCBzb3J0T3JkZXIgKTtcblxuXHRpZiAoIGhhc0R1cGxpY2F0ZSApIHtcblx0XHR3aGlsZSAoIChlbGVtID0gcmVzdWx0c1tpKytdKSApIHtcblx0XHRcdGlmICggZWxlbSA9PT0gcmVzdWx0c1sgaSBdICkge1xuXHRcdFx0XHRqID0gZHVwbGljYXRlcy5wdXNoKCBpICk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHdoaWxlICggai0tICkge1xuXHRcdFx0cmVzdWx0cy5zcGxpY2UoIGR1cGxpY2F0ZXNbIGogXSwgMSApO1xuXHRcdH1cblx0fVxuXG5cdC8vIENsZWFyIGlucHV0IGFmdGVyIHNvcnRpbmcgdG8gcmVsZWFzZSBvYmplY3RzXG5cdC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vanF1ZXJ5L3NpenpsZS9wdWxsLzIyNVxuXHRzb3J0SW5wdXQgPSBudWxsO1xuXG5cdHJldHVybiByZXN1bHRzO1xufTtcblxuLyoqXG4gKiBVdGlsaXR5IGZ1bmN0aW9uIGZvciByZXRyaWV2aW5nIHRoZSB0ZXh0IHZhbHVlIG9mIGFuIGFycmF5IG9mIERPTSBub2Rlc1xuICogQHBhcmFtIHtBcnJheXxFbGVtZW50fSBlbGVtXG4gKi9cbmdldFRleHQgPSBTaXp6bGUuZ2V0VGV4dCA9IGZ1bmN0aW9uKCBlbGVtICkge1xuXHR2YXIgbm9kZSxcblx0XHRyZXQgPSBcIlwiLFxuXHRcdGkgPSAwLFxuXHRcdG5vZGVUeXBlID0gZWxlbS5ub2RlVHlwZTtcblxuXHRpZiAoICFub2RlVHlwZSApIHtcblx0XHQvLyBJZiBubyBub2RlVHlwZSwgdGhpcyBpcyBleHBlY3RlZCB0byBiZSBhbiBhcnJheVxuXHRcdHdoaWxlICggKG5vZGUgPSBlbGVtW2krK10pICkge1xuXHRcdFx0Ly8gRG8gbm90IHRyYXZlcnNlIGNvbW1lbnQgbm9kZXNcblx0XHRcdHJldCArPSBnZXRUZXh0KCBub2RlICk7XG5cdFx0fVxuXHR9IGVsc2UgaWYgKCBub2RlVHlwZSA9PT0gMSB8fCBub2RlVHlwZSA9PT0gOSB8fCBub2RlVHlwZSA9PT0gMTEgKSB7XG5cdFx0Ly8gVXNlIHRleHRDb250ZW50IGZvciBlbGVtZW50c1xuXHRcdC8vIGlubmVyVGV4dCB1c2FnZSByZW1vdmVkIGZvciBjb25zaXN0ZW5jeSBvZiBuZXcgbGluZXMgKGpRdWVyeSAjMTExNTMpXG5cdFx0aWYgKCB0eXBlb2YgZWxlbS50ZXh0Q29udGVudCA9PT0gXCJzdHJpbmdcIiApIHtcblx0XHRcdHJldHVybiBlbGVtLnRleHRDb250ZW50O1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBUcmF2ZXJzZSBpdHMgY2hpbGRyZW5cblx0XHRcdGZvciAoIGVsZW0gPSBlbGVtLmZpcnN0Q2hpbGQ7IGVsZW07IGVsZW0gPSBlbGVtLm5leHRTaWJsaW5nICkge1xuXHRcdFx0XHRyZXQgKz0gZ2V0VGV4dCggZWxlbSApO1xuXHRcdFx0fVxuXHRcdH1cblx0fSBlbHNlIGlmICggbm9kZVR5cGUgPT09IDMgfHwgbm9kZVR5cGUgPT09IDQgKSB7XG5cdFx0cmV0dXJuIGVsZW0ubm9kZVZhbHVlO1xuXHR9XG5cdC8vIERvIG5vdCBpbmNsdWRlIGNvbW1lbnQgb3IgcHJvY2Vzc2luZyBpbnN0cnVjdGlvbiBub2Rlc1xuXG5cdHJldHVybiByZXQ7XG59O1xuXG5FeHByID0gU2l6emxlLnNlbGVjdG9ycyA9IHtcblxuXHQvLyBDYW4gYmUgYWRqdXN0ZWQgYnkgdGhlIHVzZXJcblx0Y2FjaGVMZW5ndGg6IDUwLFxuXG5cdGNyZWF0ZVBzZXVkbzogbWFya0Z1bmN0aW9uLFxuXG5cdG1hdGNoOiBtYXRjaEV4cHIsXG5cblx0YXR0ckhhbmRsZToge30sXG5cblx0ZmluZDoge30sXG5cblx0cmVsYXRpdmU6IHtcblx0XHRcIj5cIjogeyBkaXI6IFwicGFyZW50Tm9kZVwiLCBmaXJzdDogdHJ1ZSB9LFxuXHRcdFwiIFwiOiB7IGRpcjogXCJwYXJlbnROb2RlXCIgfSxcblx0XHRcIitcIjogeyBkaXI6IFwicHJldmlvdXNTaWJsaW5nXCIsIGZpcnN0OiB0cnVlIH0sXG5cdFx0XCJ+XCI6IHsgZGlyOiBcInByZXZpb3VzU2libGluZ1wiIH1cblx0fSxcblxuXHRwcmVGaWx0ZXI6IHtcblx0XHRcIkFUVFJcIjogZnVuY3Rpb24oIG1hdGNoICkge1xuXHRcdFx0bWF0Y2hbMV0gPSBtYXRjaFsxXS5yZXBsYWNlKCBydW5lc2NhcGUsIGZ1bmVzY2FwZSApO1xuXG5cdFx0XHQvLyBNb3ZlIHRoZSBnaXZlbiB2YWx1ZSB0byBtYXRjaFszXSB3aGV0aGVyIHF1b3RlZCBvciB1bnF1b3RlZFxuXHRcdFx0bWF0Y2hbM10gPSAoIG1hdGNoWzNdIHx8IG1hdGNoWzRdIHx8IG1hdGNoWzVdIHx8IFwiXCIgKS5yZXBsYWNlKCBydW5lc2NhcGUsIGZ1bmVzY2FwZSApO1xuXG5cdFx0XHRpZiAoIG1hdGNoWzJdID09PSBcIn49XCIgKSB7XG5cdFx0XHRcdG1hdGNoWzNdID0gXCIgXCIgKyBtYXRjaFszXSArIFwiIFwiO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gbWF0Y2guc2xpY2UoIDAsIDQgKTtcblx0XHR9LFxuXG5cdFx0XCJDSElMRFwiOiBmdW5jdGlvbiggbWF0Y2ggKSB7XG5cdFx0XHQvKiBtYXRjaGVzIGZyb20gbWF0Y2hFeHByW1wiQ0hJTERcIl1cblx0XHRcdFx0MSB0eXBlIChvbmx5fG50aHwuLi4pXG5cdFx0XHRcdDIgd2hhdCAoY2hpbGR8b2YtdHlwZSlcblx0XHRcdFx0MyBhcmd1bWVudCAoZXZlbnxvZGR8XFxkKnxcXGQqbihbKy1dXFxkKyk/fC4uLilcblx0XHRcdFx0NCB4bi1jb21wb25lbnQgb2YgeG4reSBhcmd1bWVudCAoWystXT9cXGQqbnwpXG5cdFx0XHRcdDUgc2lnbiBvZiB4bi1jb21wb25lbnRcblx0XHRcdFx0NiB4IG9mIHhuLWNvbXBvbmVudFxuXHRcdFx0XHQ3IHNpZ24gb2YgeS1jb21wb25lbnRcblx0XHRcdFx0OCB5IG9mIHktY29tcG9uZW50XG5cdFx0XHQqL1xuXHRcdFx0bWF0Y2hbMV0gPSBtYXRjaFsxXS50b0xvd2VyQ2FzZSgpO1xuXG5cdFx0XHRpZiAoIG1hdGNoWzFdLnNsaWNlKCAwLCAzICkgPT09IFwibnRoXCIgKSB7XG5cdFx0XHRcdC8vIG50aC0qIHJlcXVpcmVzIGFyZ3VtZW50XG5cdFx0XHRcdGlmICggIW1hdGNoWzNdICkge1xuXHRcdFx0XHRcdFNpenpsZS5lcnJvciggbWF0Y2hbMF0gKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIG51bWVyaWMgeCBhbmQgeSBwYXJhbWV0ZXJzIGZvciBFeHByLmZpbHRlci5DSElMRFxuXHRcdFx0XHQvLyByZW1lbWJlciB0aGF0IGZhbHNlL3RydWUgY2FzdCByZXNwZWN0aXZlbHkgdG8gMC8xXG5cdFx0XHRcdG1hdGNoWzRdID0gKyggbWF0Y2hbNF0gPyBtYXRjaFs1XSArIChtYXRjaFs2XSB8fCAxKSA6IDIgKiAoIG1hdGNoWzNdID09PSBcImV2ZW5cIiB8fCBtYXRjaFszXSA9PT0gXCJvZGRcIiApICk7XG5cdFx0XHRcdG1hdGNoWzVdID0gKyggKCBtYXRjaFs3XSArIG1hdGNoWzhdICkgfHwgbWF0Y2hbM10gPT09IFwib2RkXCIgKTtcblxuXHRcdFx0Ly8gb3RoZXIgdHlwZXMgcHJvaGliaXQgYXJndW1lbnRzXG5cdFx0XHR9IGVsc2UgaWYgKCBtYXRjaFszXSApIHtcblx0XHRcdFx0U2l6emxlLmVycm9yKCBtYXRjaFswXSApO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gbWF0Y2g7XG5cdFx0fSxcblxuXHRcdFwiUFNFVURPXCI6IGZ1bmN0aW9uKCBtYXRjaCApIHtcblx0XHRcdHZhciBleGNlc3MsXG5cdFx0XHRcdHVucXVvdGVkID0gIW1hdGNoWzZdICYmIG1hdGNoWzJdO1xuXG5cdFx0XHRpZiAoIG1hdGNoRXhwcltcIkNISUxEXCJdLnRlc3QoIG1hdGNoWzBdICkgKSB7XG5cdFx0XHRcdHJldHVybiBudWxsO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBBY2NlcHQgcXVvdGVkIGFyZ3VtZW50cyBhcy1pc1xuXHRcdFx0aWYgKCBtYXRjaFszXSApIHtcblx0XHRcdFx0bWF0Y2hbMl0gPSBtYXRjaFs0XSB8fCBtYXRjaFs1XSB8fCBcIlwiO1xuXG5cdFx0XHQvLyBTdHJpcCBleGNlc3MgY2hhcmFjdGVycyBmcm9tIHVucXVvdGVkIGFyZ3VtZW50c1xuXHRcdFx0fSBlbHNlIGlmICggdW5xdW90ZWQgJiYgcnBzZXVkby50ZXN0KCB1bnF1b3RlZCApICYmXG5cdFx0XHRcdC8vIEdldCBleGNlc3MgZnJvbSB0b2tlbml6ZSAocmVjdXJzaXZlbHkpXG5cdFx0XHRcdChleGNlc3MgPSB0b2tlbml6ZSggdW5xdW90ZWQsIHRydWUgKSkgJiZcblx0XHRcdFx0Ly8gYWR2YW5jZSB0byB0aGUgbmV4dCBjbG9zaW5nIHBhcmVudGhlc2lzXG5cdFx0XHRcdChleGNlc3MgPSB1bnF1b3RlZC5pbmRleE9mKCBcIilcIiwgdW5xdW90ZWQubGVuZ3RoIC0gZXhjZXNzICkgLSB1bnF1b3RlZC5sZW5ndGgpICkge1xuXG5cdFx0XHRcdC8vIGV4Y2VzcyBpcyBhIG5lZ2F0aXZlIGluZGV4XG5cdFx0XHRcdG1hdGNoWzBdID0gbWF0Y2hbMF0uc2xpY2UoIDAsIGV4Y2VzcyApO1xuXHRcdFx0XHRtYXRjaFsyXSA9IHVucXVvdGVkLnNsaWNlKCAwLCBleGNlc3MgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gUmV0dXJuIG9ubHkgY2FwdHVyZXMgbmVlZGVkIGJ5IHRoZSBwc2V1ZG8gZmlsdGVyIG1ldGhvZCAodHlwZSBhbmQgYXJndW1lbnQpXG5cdFx0XHRyZXR1cm4gbWF0Y2guc2xpY2UoIDAsIDMgKTtcblx0XHR9XG5cdH0sXG5cblx0ZmlsdGVyOiB7XG5cblx0XHRcIlRBR1wiOiBmdW5jdGlvbiggbm9kZU5hbWVTZWxlY3RvciApIHtcblx0XHRcdHZhciBub2RlTmFtZSA9IG5vZGVOYW1lU2VsZWN0b3IucmVwbGFjZSggcnVuZXNjYXBlLCBmdW5lc2NhcGUgKS50b0xvd2VyQ2FzZSgpO1xuXHRcdFx0cmV0dXJuIG5vZGVOYW1lU2VsZWN0b3IgPT09IFwiKlwiID9cblx0XHRcdFx0ZnVuY3Rpb24oKSB7IHJldHVybiB0cnVlOyB9IDpcblx0XHRcdFx0ZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGVsZW0ubm9kZU5hbWUgJiYgZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpID09PSBub2RlTmFtZTtcblx0XHRcdFx0fTtcblx0XHR9LFxuXG5cdFx0XCJDTEFTU1wiOiBmdW5jdGlvbiggY2xhc3NOYW1lICkge1xuXHRcdFx0dmFyIHBhdHRlcm4gPSBjbGFzc0NhY2hlWyBjbGFzc05hbWUgKyBcIiBcIiBdO1xuXG5cdFx0XHRyZXR1cm4gcGF0dGVybiB8fFxuXHRcdFx0XHQocGF0dGVybiA9IG5ldyBSZWdFeHAoIFwiKF58XCIgKyB3aGl0ZXNwYWNlICsgXCIpXCIgKyBjbGFzc05hbWUgKyBcIihcIiArIHdoaXRlc3BhY2UgKyBcInwkKVwiICkpICYmXG5cdFx0XHRcdGNsYXNzQ2FjaGUoIGNsYXNzTmFtZSwgZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHBhdHRlcm4udGVzdCggdHlwZW9mIGVsZW0uY2xhc3NOYW1lID09PSBcInN0cmluZ1wiICYmIGVsZW0uY2xhc3NOYW1lIHx8IHR5cGVvZiBlbGVtLmdldEF0dHJpYnV0ZSAhPT0gXCJ1bmRlZmluZWRcIiAmJiBlbGVtLmdldEF0dHJpYnV0ZShcImNsYXNzXCIpIHx8IFwiXCIgKTtcblx0XHRcdFx0fSk7XG5cdFx0fSxcblxuXHRcdFwiQVRUUlwiOiBmdW5jdGlvbiggbmFtZSwgb3BlcmF0b3IsIGNoZWNrICkge1xuXHRcdFx0cmV0dXJuIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0XHR2YXIgcmVzdWx0ID0gU2l6emxlLmF0dHIoIGVsZW0sIG5hbWUgKTtcblxuXHRcdFx0XHRpZiAoIHJlc3VsdCA9PSBudWxsICkge1xuXHRcdFx0XHRcdHJldHVybiBvcGVyYXRvciA9PT0gXCIhPVwiO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmICggIW9wZXJhdG9yICkge1xuXHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmVzdWx0ICs9IFwiXCI7XG5cblx0XHRcdFx0cmV0dXJuIG9wZXJhdG9yID09PSBcIj1cIiA/IHJlc3VsdCA9PT0gY2hlY2sgOlxuXHRcdFx0XHRcdG9wZXJhdG9yID09PSBcIiE9XCIgPyByZXN1bHQgIT09IGNoZWNrIDpcblx0XHRcdFx0XHRvcGVyYXRvciA9PT0gXCJePVwiID8gY2hlY2sgJiYgcmVzdWx0LmluZGV4T2YoIGNoZWNrICkgPT09IDAgOlxuXHRcdFx0XHRcdG9wZXJhdG9yID09PSBcIio9XCIgPyBjaGVjayAmJiByZXN1bHQuaW5kZXhPZiggY2hlY2sgKSA+IC0xIDpcblx0XHRcdFx0XHRvcGVyYXRvciA9PT0gXCIkPVwiID8gY2hlY2sgJiYgcmVzdWx0LnNsaWNlKCAtY2hlY2subGVuZ3RoICkgPT09IGNoZWNrIDpcblx0XHRcdFx0XHRvcGVyYXRvciA9PT0gXCJ+PVwiID8gKCBcIiBcIiArIHJlc3VsdC5yZXBsYWNlKCByd2hpdGVzcGFjZSwgXCIgXCIgKSArIFwiIFwiICkuaW5kZXhPZiggY2hlY2sgKSA+IC0xIDpcblx0XHRcdFx0XHRvcGVyYXRvciA9PT0gXCJ8PVwiID8gcmVzdWx0ID09PSBjaGVjayB8fCByZXN1bHQuc2xpY2UoIDAsIGNoZWNrLmxlbmd0aCArIDEgKSA9PT0gY2hlY2sgKyBcIi1cIiA6XG5cdFx0XHRcdFx0ZmFsc2U7XG5cdFx0XHR9O1xuXHRcdH0sXG5cblx0XHRcIkNISUxEXCI6IGZ1bmN0aW9uKCB0eXBlLCB3aGF0LCBhcmd1bWVudCwgZmlyc3QsIGxhc3QgKSB7XG5cdFx0XHR2YXIgc2ltcGxlID0gdHlwZS5zbGljZSggMCwgMyApICE9PSBcIm50aFwiLFxuXHRcdFx0XHRmb3J3YXJkID0gdHlwZS5zbGljZSggLTQgKSAhPT0gXCJsYXN0XCIsXG5cdFx0XHRcdG9mVHlwZSA9IHdoYXQgPT09IFwib2YtdHlwZVwiO1xuXG5cdFx0XHRyZXR1cm4gZmlyc3QgPT09IDEgJiYgbGFzdCA9PT0gMCA/XG5cblx0XHRcdFx0Ly8gU2hvcnRjdXQgZm9yIDpudGgtKihuKVxuXHRcdFx0XHRmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdFx0XHRyZXR1cm4gISFlbGVtLnBhcmVudE5vZGU7XG5cdFx0XHRcdH0gOlxuXG5cdFx0XHRcdGZ1bmN0aW9uKCBlbGVtLCBjb250ZXh0LCB4bWwgKSB7XG5cdFx0XHRcdFx0dmFyIGNhY2hlLCB1bmlxdWVDYWNoZSwgb3V0ZXJDYWNoZSwgbm9kZSwgbm9kZUluZGV4LCBzdGFydCxcblx0XHRcdFx0XHRcdGRpciA9IHNpbXBsZSAhPT0gZm9yd2FyZCA/IFwibmV4dFNpYmxpbmdcIiA6IFwicHJldmlvdXNTaWJsaW5nXCIsXG5cdFx0XHRcdFx0XHRwYXJlbnQgPSBlbGVtLnBhcmVudE5vZGUsXG5cdFx0XHRcdFx0XHRuYW1lID0gb2ZUeXBlICYmIGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSxcblx0XHRcdFx0XHRcdHVzZUNhY2hlID0gIXhtbCAmJiAhb2ZUeXBlLFxuXHRcdFx0XHRcdFx0ZGlmZiA9IGZhbHNlO1xuXG5cdFx0XHRcdFx0aWYgKCBwYXJlbnQgKSB7XG5cblx0XHRcdFx0XHRcdC8vIDooZmlyc3R8bGFzdHxvbmx5KS0oY2hpbGR8b2YtdHlwZSlcblx0XHRcdFx0XHRcdGlmICggc2ltcGxlICkge1xuXHRcdFx0XHRcdFx0XHR3aGlsZSAoIGRpciApIHtcblx0XHRcdFx0XHRcdFx0XHRub2RlID0gZWxlbTtcblx0XHRcdFx0XHRcdFx0XHR3aGlsZSAoIChub2RlID0gbm9kZVsgZGlyIF0pICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKCBvZlR5cGUgP1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRub2RlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT09IG5hbWUgOlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRub2RlLm5vZGVUeXBlID09PSAxICkge1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0Ly8gUmV2ZXJzZSBkaXJlY3Rpb24gZm9yIDpvbmx5LSogKGlmIHdlIGhhdmVuJ3QgeWV0IGRvbmUgc28pXG5cdFx0XHRcdFx0XHRcdFx0c3RhcnQgPSBkaXIgPSB0eXBlID09PSBcIm9ubHlcIiAmJiAhc3RhcnQgJiYgXCJuZXh0U2libGluZ1wiO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRzdGFydCA9IFsgZm9yd2FyZCA/IHBhcmVudC5maXJzdENoaWxkIDogcGFyZW50Lmxhc3RDaGlsZCBdO1xuXG5cdFx0XHRcdFx0XHQvLyBub24teG1sIDpudGgtY2hpbGQoLi4uKSBzdG9yZXMgY2FjaGUgZGF0YSBvbiBgcGFyZW50YFxuXHRcdFx0XHRcdFx0aWYgKCBmb3J3YXJkICYmIHVzZUNhY2hlICkge1xuXG5cdFx0XHRcdFx0XHRcdC8vIFNlZWsgYGVsZW1gIGZyb20gYSBwcmV2aW91c2x5LWNhY2hlZCBpbmRleFxuXG5cdFx0XHRcdFx0XHRcdC8vIC4uLmluIGEgZ3ppcC1mcmllbmRseSB3YXlcblx0XHRcdFx0XHRcdFx0bm9kZSA9IHBhcmVudDtcblx0XHRcdFx0XHRcdFx0b3V0ZXJDYWNoZSA9IG5vZGVbIGV4cGFuZG8gXSB8fCAobm9kZVsgZXhwYW5kbyBdID0ge30pO1xuXG5cdFx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDw5IG9ubHlcblx0XHRcdFx0XHRcdFx0Ly8gRGVmZW5kIGFnYWluc3QgY2xvbmVkIGF0dHJvcGVydGllcyAoalF1ZXJ5IGdoLTE3MDkpXG5cdFx0XHRcdFx0XHRcdHVuaXF1ZUNhY2hlID0gb3V0ZXJDYWNoZVsgbm9kZS51bmlxdWVJRCBdIHx8XG5cdFx0XHRcdFx0XHRcdFx0KG91dGVyQ2FjaGVbIG5vZGUudW5pcXVlSUQgXSA9IHt9KTtcblxuXHRcdFx0XHRcdFx0XHRjYWNoZSA9IHVuaXF1ZUNhY2hlWyB0eXBlIF0gfHwgW107XG5cdFx0XHRcdFx0XHRcdG5vZGVJbmRleCA9IGNhY2hlWyAwIF0gPT09IGRpcnJ1bnMgJiYgY2FjaGVbIDEgXTtcblx0XHRcdFx0XHRcdFx0ZGlmZiA9IG5vZGVJbmRleCAmJiBjYWNoZVsgMiBdO1xuXHRcdFx0XHRcdFx0XHRub2RlID0gbm9kZUluZGV4ICYmIHBhcmVudC5jaGlsZE5vZGVzWyBub2RlSW5kZXggXTtcblxuXHRcdFx0XHRcdFx0XHR3aGlsZSAoIChub2RlID0gKytub2RlSW5kZXggJiYgbm9kZSAmJiBub2RlWyBkaXIgXSB8fFxuXG5cdFx0XHRcdFx0XHRcdFx0Ly8gRmFsbGJhY2sgdG8gc2Vla2luZyBgZWxlbWAgZnJvbSB0aGUgc3RhcnRcblx0XHRcdFx0XHRcdFx0XHQoZGlmZiA9IG5vZGVJbmRleCA9IDApIHx8IHN0YXJ0LnBvcCgpKSApIHtcblxuXHRcdFx0XHRcdFx0XHRcdC8vIFdoZW4gZm91bmQsIGNhY2hlIGluZGV4ZXMgb24gYHBhcmVudGAgYW5kIGJyZWFrXG5cdFx0XHRcdFx0XHRcdFx0aWYgKCBub2RlLm5vZGVUeXBlID09PSAxICYmICsrZGlmZiAmJiBub2RlID09PSBlbGVtICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0dW5pcXVlQ2FjaGVbIHR5cGUgXSA9IFsgZGlycnVucywgbm9kZUluZGV4LCBkaWZmIF07XG5cdFx0XHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0Ly8gVXNlIHByZXZpb3VzbHktY2FjaGVkIGVsZW1lbnQgaW5kZXggaWYgYXZhaWxhYmxlXG5cdFx0XHRcdFx0XHRcdGlmICggdXNlQ2FjaGUgKSB7XG5cdFx0XHRcdFx0XHRcdFx0Ly8gLi4uaW4gYSBnemlwLWZyaWVuZGx5IHdheVxuXHRcdFx0XHRcdFx0XHRcdG5vZGUgPSBlbGVtO1xuXHRcdFx0XHRcdFx0XHRcdG91dGVyQ2FjaGUgPSBub2RlWyBleHBhbmRvIF0gfHwgKG5vZGVbIGV4cGFuZG8gXSA9IHt9KTtcblxuXHRcdFx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDw5IG9ubHlcblx0XHRcdFx0XHRcdFx0XHQvLyBEZWZlbmQgYWdhaW5zdCBjbG9uZWQgYXR0cm9wZXJ0aWVzIChqUXVlcnkgZ2gtMTcwOSlcblx0XHRcdFx0XHRcdFx0XHR1bmlxdWVDYWNoZSA9IG91dGVyQ2FjaGVbIG5vZGUudW5pcXVlSUQgXSB8fFxuXHRcdFx0XHRcdFx0XHRcdFx0KG91dGVyQ2FjaGVbIG5vZGUudW5pcXVlSUQgXSA9IHt9KTtcblxuXHRcdFx0XHRcdFx0XHRcdGNhY2hlID0gdW5pcXVlQ2FjaGVbIHR5cGUgXSB8fCBbXTtcblx0XHRcdFx0XHRcdFx0XHRub2RlSW5kZXggPSBjYWNoZVsgMCBdID09PSBkaXJydW5zICYmIGNhY2hlWyAxIF07XG5cdFx0XHRcdFx0XHRcdFx0ZGlmZiA9IG5vZGVJbmRleDtcblx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdC8vIHhtbCA6bnRoLWNoaWxkKC4uLilcblx0XHRcdFx0XHRcdFx0Ly8gb3IgOm50aC1sYXN0LWNoaWxkKC4uLikgb3IgOm50aCgtbGFzdCk/LW9mLXR5cGUoLi4uKVxuXHRcdFx0XHRcdFx0XHRpZiAoIGRpZmYgPT09IGZhbHNlICkge1xuXHRcdFx0XHRcdFx0XHRcdC8vIFVzZSB0aGUgc2FtZSBsb29wIGFzIGFib3ZlIHRvIHNlZWsgYGVsZW1gIGZyb20gdGhlIHN0YXJ0XG5cdFx0XHRcdFx0XHRcdFx0d2hpbGUgKCAobm9kZSA9ICsrbm9kZUluZGV4ICYmIG5vZGUgJiYgbm9kZVsgZGlyIF0gfHxcblx0XHRcdFx0XHRcdFx0XHRcdChkaWZmID0gbm9kZUluZGV4ID0gMCkgfHwgc3RhcnQucG9wKCkpICkge1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoICggb2ZUeXBlID9cblx0XHRcdFx0XHRcdFx0XHRcdFx0bm9kZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpID09PSBuYW1lIDpcblx0XHRcdFx0XHRcdFx0XHRcdFx0bm9kZS5ub2RlVHlwZSA9PT0gMSApICYmXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCsrZGlmZiApIHtcblxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBDYWNoZSB0aGUgaW5kZXggb2YgZWFjaCBlbmNvdW50ZXJlZCBlbGVtZW50XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmICggdXNlQ2FjaGUgKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0b3V0ZXJDYWNoZSA9IG5vZGVbIGV4cGFuZG8gXSB8fCAobm9kZVsgZXhwYW5kbyBdID0ge30pO1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgPDkgb25seVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vIERlZmVuZCBhZ2FpbnN0IGNsb25lZCBhdHRyb3BlcnRpZXMgKGpRdWVyeSBnaC0xNzA5KVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHVuaXF1ZUNhY2hlID0gb3V0ZXJDYWNoZVsgbm9kZS51bmlxdWVJRCBdIHx8XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQob3V0ZXJDYWNoZVsgbm9kZS51bmlxdWVJRCBdID0ge30pO1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dW5pcXVlQ2FjaGVbIHR5cGUgXSA9IFsgZGlycnVucywgZGlmZiBdO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKCBub2RlID09PSBlbGVtICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdC8vIEluY29ycG9yYXRlIHRoZSBvZmZzZXQsIHRoZW4gY2hlY2sgYWdhaW5zdCBjeWNsZSBzaXplXG5cdFx0XHRcdFx0XHRkaWZmIC09IGxhc3Q7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZGlmZiA9PT0gZmlyc3QgfHwgKCBkaWZmICUgZmlyc3QgPT09IDAgJiYgZGlmZiAvIGZpcnN0ID49IDAgKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH07XG5cdFx0fSxcblxuXHRcdFwiUFNFVURPXCI6IGZ1bmN0aW9uKCBwc2V1ZG8sIGFyZ3VtZW50ICkge1xuXHRcdFx0Ly8gcHNldWRvLWNsYXNzIG5hbWVzIGFyZSBjYXNlLWluc2Vuc2l0aXZlXG5cdFx0XHQvLyBodHRwOi8vd3d3LnczLm9yZy9UUi9zZWxlY3RvcnMvI3BzZXVkby1jbGFzc2VzXG5cdFx0XHQvLyBQcmlvcml0aXplIGJ5IGNhc2Ugc2Vuc2l0aXZpdHkgaW4gY2FzZSBjdXN0b20gcHNldWRvcyBhcmUgYWRkZWQgd2l0aCB1cHBlcmNhc2UgbGV0dGVyc1xuXHRcdFx0Ly8gUmVtZW1iZXIgdGhhdCBzZXRGaWx0ZXJzIGluaGVyaXRzIGZyb20gcHNldWRvc1xuXHRcdFx0dmFyIGFyZ3MsXG5cdFx0XHRcdGZuID0gRXhwci5wc2V1ZG9zWyBwc2V1ZG8gXSB8fCBFeHByLnNldEZpbHRlcnNbIHBzZXVkby50b0xvd2VyQ2FzZSgpIF0gfHxcblx0XHRcdFx0XHRTaXp6bGUuZXJyb3IoIFwidW5zdXBwb3J0ZWQgcHNldWRvOiBcIiArIHBzZXVkbyApO1xuXG5cdFx0XHQvLyBUaGUgdXNlciBtYXkgdXNlIGNyZWF0ZVBzZXVkbyB0byBpbmRpY2F0ZSB0aGF0XG5cdFx0XHQvLyBhcmd1bWVudHMgYXJlIG5lZWRlZCB0byBjcmVhdGUgdGhlIGZpbHRlciBmdW5jdGlvblxuXHRcdFx0Ly8ganVzdCBhcyBTaXp6bGUgZG9lc1xuXHRcdFx0aWYgKCBmblsgZXhwYW5kbyBdICkge1xuXHRcdFx0XHRyZXR1cm4gZm4oIGFyZ3VtZW50ICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIEJ1dCBtYWludGFpbiBzdXBwb3J0IGZvciBvbGQgc2lnbmF0dXJlc1xuXHRcdFx0aWYgKCBmbi5sZW5ndGggPiAxICkge1xuXHRcdFx0XHRhcmdzID0gWyBwc2V1ZG8sIHBzZXVkbywgXCJcIiwgYXJndW1lbnQgXTtcblx0XHRcdFx0cmV0dXJuIEV4cHIuc2V0RmlsdGVycy5oYXNPd25Qcm9wZXJ0eSggcHNldWRvLnRvTG93ZXJDYXNlKCkgKSA/XG5cdFx0XHRcdFx0bWFya0Z1bmN0aW9uKGZ1bmN0aW9uKCBzZWVkLCBtYXRjaGVzICkge1xuXHRcdFx0XHRcdFx0dmFyIGlkeCxcblx0XHRcdFx0XHRcdFx0bWF0Y2hlZCA9IGZuKCBzZWVkLCBhcmd1bWVudCApLFxuXHRcdFx0XHRcdFx0XHRpID0gbWF0Y2hlZC5sZW5ndGg7XG5cdFx0XHRcdFx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdFx0XHRcdFx0aWR4ID0gaW5kZXhPZiggc2VlZCwgbWF0Y2hlZFtpXSApO1xuXHRcdFx0XHRcdFx0XHRzZWVkWyBpZHggXSA9ICEoIG1hdGNoZXNbIGlkeCBdID0gbWF0Y2hlZFtpXSApO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0pIDpcblx0XHRcdFx0XHRmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdFx0XHRcdHJldHVybiBmbiggZWxlbSwgMCwgYXJncyApO1xuXHRcdFx0XHRcdH07XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBmbjtcblx0XHR9XG5cdH0sXG5cblx0cHNldWRvczoge1xuXHRcdC8vIFBvdGVudGlhbGx5IGNvbXBsZXggcHNldWRvc1xuXHRcdFwibm90XCI6IG1hcmtGdW5jdGlvbihmdW5jdGlvbiggc2VsZWN0b3IgKSB7XG5cdFx0XHQvLyBUcmltIHRoZSBzZWxlY3RvciBwYXNzZWQgdG8gY29tcGlsZVxuXHRcdFx0Ly8gdG8gYXZvaWQgdHJlYXRpbmcgbGVhZGluZyBhbmQgdHJhaWxpbmdcblx0XHRcdC8vIHNwYWNlcyBhcyBjb21iaW5hdG9yc1xuXHRcdFx0dmFyIGlucHV0ID0gW10sXG5cdFx0XHRcdHJlc3VsdHMgPSBbXSxcblx0XHRcdFx0bWF0Y2hlciA9IGNvbXBpbGUoIHNlbGVjdG9yLnJlcGxhY2UoIHJ0cmltLCBcIiQxXCIgKSApO1xuXG5cdFx0XHRyZXR1cm4gbWF0Y2hlclsgZXhwYW5kbyBdID9cblx0XHRcdFx0bWFya0Z1bmN0aW9uKGZ1bmN0aW9uKCBzZWVkLCBtYXRjaGVzLCBjb250ZXh0LCB4bWwgKSB7XG5cdFx0XHRcdFx0dmFyIGVsZW0sXG5cdFx0XHRcdFx0XHR1bm1hdGNoZWQgPSBtYXRjaGVyKCBzZWVkLCBudWxsLCB4bWwsIFtdICksXG5cdFx0XHRcdFx0XHRpID0gc2VlZC5sZW5ndGg7XG5cblx0XHRcdFx0XHQvLyBNYXRjaCBlbGVtZW50cyB1bm1hdGNoZWQgYnkgYG1hdGNoZXJgXG5cdFx0XHRcdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHRcdFx0XHRpZiAoIChlbGVtID0gdW5tYXRjaGVkW2ldKSApIHtcblx0XHRcdFx0XHRcdFx0c2VlZFtpXSA9ICEobWF0Y2hlc1tpXSA9IGVsZW0pO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSkgOlxuXHRcdFx0XHRmdW5jdGlvbiggZWxlbSwgY29udGV4dCwgeG1sICkge1xuXHRcdFx0XHRcdGlucHV0WzBdID0gZWxlbTtcblx0XHRcdFx0XHRtYXRjaGVyKCBpbnB1dCwgbnVsbCwgeG1sLCByZXN1bHRzICk7XG5cdFx0XHRcdFx0Ly8gRG9uJ3Qga2VlcCB0aGUgZWxlbWVudCAoaXNzdWUgIzI5OSlcblx0XHRcdFx0XHRpbnB1dFswXSA9IG51bGw7XG5cdFx0XHRcdFx0cmV0dXJuICFyZXN1bHRzLnBvcCgpO1xuXHRcdFx0XHR9O1xuXHRcdH0pLFxuXG5cdFx0XCJoYXNcIjogbWFya0Z1bmN0aW9uKGZ1bmN0aW9uKCBzZWxlY3RvciApIHtcblx0XHRcdHJldHVybiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdFx0cmV0dXJuIFNpenpsZSggc2VsZWN0b3IsIGVsZW0gKS5sZW5ndGggPiAwO1xuXHRcdFx0fTtcblx0XHR9KSxcblxuXHRcdFwiY29udGFpbnNcIjogbWFya0Z1bmN0aW9uKGZ1bmN0aW9uKCB0ZXh0ICkge1xuXHRcdFx0dGV4dCA9IHRleHQucmVwbGFjZSggcnVuZXNjYXBlLCBmdW5lc2NhcGUgKTtcblx0XHRcdHJldHVybiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdFx0cmV0dXJuICggZWxlbS50ZXh0Q29udGVudCB8fCBlbGVtLmlubmVyVGV4dCB8fCBnZXRUZXh0KCBlbGVtICkgKS5pbmRleE9mKCB0ZXh0ICkgPiAtMTtcblx0XHRcdH07XG5cdFx0fSksXG5cblx0XHQvLyBcIldoZXRoZXIgYW4gZWxlbWVudCBpcyByZXByZXNlbnRlZCBieSBhIDpsYW5nKCkgc2VsZWN0b3Jcblx0XHQvLyBpcyBiYXNlZCBzb2xlbHkgb24gdGhlIGVsZW1lbnQncyBsYW5ndWFnZSB2YWx1ZVxuXHRcdC8vIGJlaW5nIGVxdWFsIHRvIHRoZSBpZGVudGlmaWVyIEMsXG5cdFx0Ly8gb3IgYmVnaW5uaW5nIHdpdGggdGhlIGlkZW50aWZpZXIgQyBpbW1lZGlhdGVseSBmb2xsb3dlZCBieSBcIi1cIi5cblx0XHQvLyBUaGUgbWF0Y2hpbmcgb2YgQyBhZ2FpbnN0IHRoZSBlbGVtZW50J3MgbGFuZ3VhZ2UgdmFsdWUgaXMgcGVyZm9ybWVkIGNhc2UtaW5zZW5zaXRpdmVseS5cblx0XHQvLyBUaGUgaWRlbnRpZmllciBDIGRvZXMgbm90IGhhdmUgdG8gYmUgYSB2YWxpZCBsYW5ndWFnZSBuYW1lLlwiXG5cdFx0Ly8gaHR0cDovL3d3dy53My5vcmcvVFIvc2VsZWN0b3JzLyNsYW5nLXBzZXVkb1xuXHRcdFwibGFuZ1wiOiBtYXJrRnVuY3Rpb24oIGZ1bmN0aW9uKCBsYW5nICkge1xuXHRcdFx0Ly8gbGFuZyB2YWx1ZSBtdXN0IGJlIGEgdmFsaWQgaWRlbnRpZmllclxuXHRcdFx0aWYgKCAhcmlkZW50aWZpZXIudGVzdChsYW5nIHx8IFwiXCIpICkge1xuXHRcdFx0XHRTaXp6bGUuZXJyb3IoIFwidW5zdXBwb3J0ZWQgbGFuZzogXCIgKyBsYW5nICk7XG5cdFx0XHR9XG5cdFx0XHRsYW5nID0gbGFuZy5yZXBsYWNlKCBydW5lc2NhcGUsIGZ1bmVzY2FwZSApLnRvTG93ZXJDYXNlKCk7XG5cdFx0XHRyZXR1cm4gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRcdHZhciBlbGVtTGFuZztcblx0XHRcdFx0ZG8ge1xuXHRcdFx0XHRcdGlmICggKGVsZW1MYW5nID0gZG9jdW1lbnRJc0hUTUwgP1xuXHRcdFx0XHRcdFx0ZWxlbS5sYW5nIDpcblx0XHRcdFx0XHRcdGVsZW0uZ2V0QXR0cmlidXRlKFwieG1sOmxhbmdcIikgfHwgZWxlbS5nZXRBdHRyaWJ1dGUoXCJsYW5nXCIpKSApIHtcblxuXHRcdFx0XHRcdFx0ZWxlbUxhbmcgPSBlbGVtTGFuZy50b0xvd2VyQ2FzZSgpO1xuXHRcdFx0XHRcdFx0cmV0dXJuIGVsZW1MYW5nID09PSBsYW5nIHx8IGVsZW1MYW5nLmluZGV4T2YoIGxhbmcgKyBcIi1cIiApID09PSAwO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSB3aGlsZSAoIChlbGVtID0gZWxlbS5wYXJlbnROb2RlKSAmJiBlbGVtLm5vZGVUeXBlID09PSAxICk7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH07XG5cdFx0fSksXG5cblx0XHQvLyBNaXNjZWxsYW5lb3VzXG5cdFx0XCJ0YXJnZXRcIjogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHR2YXIgaGFzaCA9IHdpbmRvdy5sb2NhdGlvbiAmJiB3aW5kb3cubG9jYXRpb24uaGFzaDtcblx0XHRcdHJldHVybiBoYXNoICYmIGhhc2guc2xpY2UoIDEgKSA9PT0gZWxlbS5pZDtcblx0XHR9LFxuXG5cdFx0XCJyb290XCI6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0cmV0dXJuIGVsZW0gPT09IGRvY0VsZW07XG5cdFx0fSxcblxuXHRcdFwiZm9jdXNcIjogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRyZXR1cm4gZWxlbSA9PT0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudCAmJiAoIWRvY3VtZW50Lmhhc0ZvY3VzIHx8IGRvY3VtZW50Lmhhc0ZvY3VzKCkpICYmICEhKGVsZW0udHlwZSB8fCBlbGVtLmhyZWYgfHwgfmVsZW0udGFiSW5kZXgpO1xuXHRcdH0sXG5cblx0XHQvLyBCb29sZWFuIHByb3BlcnRpZXNcblx0XHRcImVuYWJsZWRcIjogY3JlYXRlRGlzYWJsZWRQc2V1ZG8oIGZhbHNlICksXG5cdFx0XCJkaXNhYmxlZFwiOiBjcmVhdGVEaXNhYmxlZFBzZXVkbyggdHJ1ZSApLFxuXG5cdFx0XCJjaGVja2VkXCI6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0Ly8gSW4gQ1NTMywgOmNoZWNrZWQgc2hvdWxkIHJldHVybiBib3RoIGNoZWNrZWQgYW5kIHNlbGVjdGVkIGVsZW1lbnRzXG5cdFx0XHQvLyBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDExL1JFQy1jc3MzLXNlbGVjdG9ycy0yMDExMDkyOS8jY2hlY2tlZFxuXHRcdFx0dmFyIG5vZGVOYW1lID0gZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO1xuXHRcdFx0cmV0dXJuIChub2RlTmFtZSA9PT0gXCJpbnB1dFwiICYmICEhZWxlbS5jaGVja2VkKSB8fCAobm9kZU5hbWUgPT09IFwib3B0aW9uXCIgJiYgISFlbGVtLnNlbGVjdGVkKTtcblx0XHR9LFxuXG5cdFx0XCJzZWxlY3RlZFwiOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdC8vIEFjY2Vzc2luZyB0aGlzIHByb3BlcnR5IG1ha2VzIHNlbGVjdGVkLWJ5LWRlZmF1bHRcblx0XHRcdC8vIG9wdGlvbnMgaW4gU2FmYXJpIHdvcmsgcHJvcGVybHlcblx0XHRcdGlmICggZWxlbS5wYXJlbnROb2RlICkge1xuXHRcdFx0XHRlbGVtLnBhcmVudE5vZGUuc2VsZWN0ZWRJbmRleDtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGVsZW0uc2VsZWN0ZWQgPT09IHRydWU7XG5cdFx0fSxcblxuXHRcdC8vIENvbnRlbnRzXG5cdFx0XCJlbXB0eVwiOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdC8vIGh0dHA6Ly93d3cudzMub3JnL1RSL3NlbGVjdG9ycy8jZW1wdHktcHNldWRvXG5cdFx0XHQvLyA6ZW1wdHkgaXMgbmVnYXRlZCBieSBlbGVtZW50ICgxKSBvciBjb250ZW50IG5vZGVzICh0ZXh0OiAzOyBjZGF0YTogNDsgZW50aXR5IHJlZjogNSksXG5cdFx0XHQvLyAgIGJ1dCBub3QgYnkgb3RoZXJzIChjb21tZW50OiA4OyBwcm9jZXNzaW5nIGluc3RydWN0aW9uOiA3OyBldGMuKVxuXHRcdFx0Ly8gbm9kZVR5cGUgPCA2IHdvcmtzIGJlY2F1c2UgYXR0cmlidXRlcyAoMikgZG8gbm90IGFwcGVhciBhcyBjaGlsZHJlblxuXHRcdFx0Zm9yICggZWxlbSA9IGVsZW0uZmlyc3RDaGlsZDsgZWxlbTsgZWxlbSA9IGVsZW0ubmV4dFNpYmxpbmcgKSB7XG5cdFx0XHRcdGlmICggZWxlbS5ub2RlVHlwZSA8IDYgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9LFxuXG5cdFx0XCJwYXJlbnRcIjogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRyZXR1cm4gIUV4cHIucHNldWRvc1tcImVtcHR5XCJdKCBlbGVtICk7XG5cdFx0fSxcblxuXHRcdC8vIEVsZW1lbnQvaW5wdXQgdHlwZXNcblx0XHRcImhlYWRlclwiOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHJldHVybiByaGVhZGVyLnRlc3QoIGVsZW0ubm9kZU5hbWUgKTtcblx0XHR9LFxuXG5cdFx0XCJpbnB1dFwiOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHJldHVybiByaW5wdXRzLnRlc3QoIGVsZW0ubm9kZU5hbWUgKTtcblx0XHR9LFxuXG5cdFx0XCJidXR0b25cIjogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHR2YXIgbmFtZSA9IGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtcblx0XHRcdHJldHVybiBuYW1lID09PSBcImlucHV0XCIgJiYgZWxlbS50eXBlID09PSBcImJ1dHRvblwiIHx8IG5hbWUgPT09IFwiYnV0dG9uXCI7XG5cdFx0fSxcblxuXHRcdFwidGV4dFwiOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHZhciBhdHRyO1xuXHRcdFx0cmV0dXJuIGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gXCJpbnB1dFwiICYmXG5cdFx0XHRcdGVsZW0udHlwZSA9PT0gXCJ0ZXh0XCIgJiZcblxuXHRcdFx0XHQvLyBTdXBwb3J0OiBJRTw4XG5cdFx0XHRcdC8vIE5ldyBIVE1MNSBhdHRyaWJ1dGUgdmFsdWVzIChlLmcuLCBcInNlYXJjaFwiKSBhcHBlYXIgd2l0aCBlbGVtLnR5cGUgPT09IFwidGV4dFwiXG5cdFx0XHRcdCggKGF0dHIgPSBlbGVtLmdldEF0dHJpYnV0ZShcInR5cGVcIikpID09IG51bGwgfHwgYXR0ci50b0xvd2VyQ2FzZSgpID09PSBcInRleHRcIiApO1xuXHRcdH0sXG5cblx0XHQvLyBQb3NpdGlvbi1pbi1jb2xsZWN0aW9uXG5cdFx0XCJmaXJzdFwiOiBjcmVhdGVQb3NpdGlvbmFsUHNldWRvKGZ1bmN0aW9uKCkge1xuXHRcdFx0cmV0dXJuIFsgMCBdO1xuXHRcdH0pLFxuXG5cdFx0XCJsYXN0XCI6IGNyZWF0ZVBvc2l0aW9uYWxQc2V1ZG8oZnVuY3Rpb24oIG1hdGNoSW5kZXhlcywgbGVuZ3RoICkge1xuXHRcdFx0cmV0dXJuIFsgbGVuZ3RoIC0gMSBdO1xuXHRcdH0pLFxuXG5cdFx0XCJlcVwiOiBjcmVhdGVQb3NpdGlvbmFsUHNldWRvKGZ1bmN0aW9uKCBtYXRjaEluZGV4ZXMsIGxlbmd0aCwgYXJndW1lbnQgKSB7XG5cdFx0XHRyZXR1cm4gWyBhcmd1bWVudCA8IDAgPyBhcmd1bWVudCArIGxlbmd0aCA6IGFyZ3VtZW50IF07XG5cdFx0fSksXG5cblx0XHRcImV2ZW5cIjogY3JlYXRlUG9zaXRpb25hbFBzZXVkbyhmdW5jdGlvbiggbWF0Y2hJbmRleGVzLCBsZW5ndGggKSB7XG5cdFx0XHR2YXIgaSA9IDA7XG5cdFx0XHRmb3IgKCA7IGkgPCBsZW5ndGg7IGkgKz0gMiApIHtcblx0XHRcdFx0bWF0Y2hJbmRleGVzLnB1c2goIGkgKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBtYXRjaEluZGV4ZXM7XG5cdFx0fSksXG5cblx0XHRcIm9kZFwiOiBjcmVhdGVQb3NpdGlvbmFsUHNldWRvKGZ1bmN0aW9uKCBtYXRjaEluZGV4ZXMsIGxlbmd0aCApIHtcblx0XHRcdHZhciBpID0gMTtcblx0XHRcdGZvciAoIDsgaSA8IGxlbmd0aDsgaSArPSAyICkge1xuXHRcdFx0XHRtYXRjaEluZGV4ZXMucHVzaCggaSApO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIG1hdGNoSW5kZXhlcztcblx0XHR9KSxcblxuXHRcdFwibHRcIjogY3JlYXRlUG9zaXRpb25hbFBzZXVkbyhmdW5jdGlvbiggbWF0Y2hJbmRleGVzLCBsZW5ndGgsIGFyZ3VtZW50ICkge1xuXHRcdFx0dmFyIGkgPSBhcmd1bWVudCA8IDAgPyBhcmd1bWVudCArIGxlbmd0aCA6IGFyZ3VtZW50O1xuXHRcdFx0Zm9yICggOyAtLWkgPj0gMDsgKSB7XG5cdFx0XHRcdG1hdGNoSW5kZXhlcy5wdXNoKCBpICk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gbWF0Y2hJbmRleGVzO1xuXHRcdH0pLFxuXG5cdFx0XCJndFwiOiBjcmVhdGVQb3NpdGlvbmFsUHNldWRvKGZ1bmN0aW9uKCBtYXRjaEluZGV4ZXMsIGxlbmd0aCwgYXJndW1lbnQgKSB7XG5cdFx0XHR2YXIgaSA9IGFyZ3VtZW50IDwgMCA/IGFyZ3VtZW50ICsgbGVuZ3RoIDogYXJndW1lbnQ7XG5cdFx0XHRmb3IgKCA7ICsraSA8IGxlbmd0aDsgKSB7XG5cdFx0XHRcdG1hdGNoSW5kZXhlcy5wdXNoKCBpICk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gbWF0Y2hJbmRleGVzO1xuXHRcdH0pXG5cdH1cbn07XG5cbkV4cHIucHNldWRvc1tcIm50aFwiXSA9IEV4cHIucHNldWRvc1tcImVxXCJdO1xuXG4vLyBBZGQgYnV0dG9uL2lucHV0IHR5cGUgcHNldWRvc1xuZm9yICggaSBpbiB7IHJhZGlvOiB0cnVlLCBjaGVja2JveDogdHJ1ZSwgZmlsZTogdHJ1ZSwgcGFzc3dvcmQ6IHRydWUsIGltYWdlOiB0cnVlIH0gKSB7XG5cdEV4cHIucHNldWRvc1sgaSBdID0gY3JlYXRlSW5wdXRQc2V1ZG8oIGkgKTtcbn1cbmZvciAoIGkgaW4geyBzdWJtaXQ6IHRydWUsIHJlc2V0OiB0cnVlIH0gKSB7XG5cdEV4cHIucHNldWRvc1sgaSBdID0gY3JlYXRlQnV0dG9uUHNldWRvKCBpICk7XG59XG5cbi8vIEVhc3kgQVBJIGZvciBjcmVhdGluZyBuZXcgc2V0RmlsdGVyc1xuZnVuY3Rpb24gc2V0RmlsdGVycygpIHt9XG5zZXRGaWx0ZXJzLnByb3RvdHlwZSA9IEV4cHIuZmlsdGVycyA9IEV4cHIucHNldWRvcztcbkV4cHIuc2V0RmlsdGVycyA9IG5ldyBzZXRGaWx0ZXJzKCk7XG5cbnRva2VuaXplID0gU2l6emxlLnRva2VuaXplID0gZnVuY3Rpb24oIHNlbGVjdG9yLCBwYXJzZU9ubHkgKSB7XG5cdHZhciBtYXRjaGVkLCBtYXRjaCwgdG9rZW5zLCB0eXBlLFxuXHRcdHNvRmFyLCBncm91cHMsIHByZUZpbHRlcnMsXG5cdFx0Y2FjaGVkID0gdG9rZW5DYWNoZVsgc2VsZWN0b3IgKyBcIiBcIiBdO1xuXG5cdGlmICggY2FjaGVkICkge1xuXHRcdHJldHVybiBwYXJzZU9ubHkgPyAwIDogY2FjaGVkLnNsaWNlKCAwICk7XG5cdH1cblxuXHRzb0ZhciA9IHNlbGVjdG9yO1xuXHRncm91cHMgPSBbXTtcblx0cHJlRmlsdGVycyA9IEV4cHIucHJlRmlsdGVyO1xuXG5cdHdoaWxlICggc29GYXIgKSB7XG5cblx0XHQvLyBDb21tYSBhbmQgZmlyc3QgcnVuXG5cdFx0aWYgKCAhbWF0Y2hlZCB8fCAobWF0Y2ggPSByY29tbWEuZXhlYyggc29GYXIgKSkgKSB7XG5cdFx0XHRpZiAoIG1hdGNoICkge1xuXHRcdFx0XHQvLyBEb24ndCBjb25zdW1lIHRyYWlsaW5nIGNvbW1hcyBhcyB2YWxpZFxuXHRcdFx0XHRzb0ZhciA9IHNvRmFyLnNsaWNlKCBtYXRjaFswXS5sZW5ndGggKSB8fCBzb0Zhcjtcblx0XHRcdH1cblx0XHRcdGdyb3Vwcy5wdXNoKCAodG9rZW5zID0gW10pICk7XG5cdFx0fVxuXG5cdFx0bWF0Y2hlZCA9IGZhbHNlO1xuXG5cdFx0Ly8gQ29tYmluYXRvcnNcblx0XHRpZiAoIChtYXRjaCA9IHJjb21iaW5hdG9ycy5leGVjKCBzb0ZhciApKSApIHtcblx0XHRcdG1hdGNoZWQgPSBtYXRjaC5zaGlmdCgpO1xuXHRcdFx0dG9rZW5zLnB1c2goe1xuXHRcdFx0XHR2YWx1ZTogbWF0Y2hlZCxcblx0XHRcdFx0Ly8gQ2FzdCBkZXNjZW5kYW50IGNvbWJpbmF0b3JzIHRvIHNwYWNlXG5cdFx0XHRcdHR5cGU6IG1hdGNoWzBdLnJlcGxhY2UoIHJ0cmltLCBcIiBcIiApXG5cdFx0XHR9KTtcblx0XHRcdHNvRmFyID0gc29GYXIuc2xpY2UoIG1hdGNoZWQubGVuZ3RoICk7XG5cdFx0fVxuXG5cdFx0Ly8gRmlsdGVyc1xuXHRcdGZvciAoIHR5cGUgaW4gRXhwci5maWx0ZXIgKSB7XG5cdFx0XHRpZiAoIChtYXRjaCA9IG1hdGNoRXhwclsgdHlwZSBdLmV4ZWMoIHNvRmFyICkpICYmICghcHJlRmlsdGVyc1sgdHlwZSBdIHx8XG5cdFx0XHRcdChtYXRjaCA9IHByZUZpbHRlcnNbIHR5cGUgXSggbWF0Y2ggKSkpICkge1xuXHRcdFx0XHRtYXRjaGVkID0gbWF0Y2guc2hpZnQoKTtcblx0XHRcdFx0dG9rZW5zLnB1c2goe1xuXHRcdFx0XHRcdHZhbHVlOiBtYXRjaGVkLFxuXHRcdFx0XHRcdHR5cGU6IHR5cGUsXG5cdFx0XHRcdFx0bWF0Y2hlczogbWF0Y2hcblx0XHRcdFx0fSk7XG5cdFx0XHRcdHNvRmFyID0gc29GYXIuc2xpY2UoIG1hdGNoZWQubGVuZ3RoICk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKCAhbWF0Y2hlZCApIHtcblx0XHRcdGJyZWFrO1xuXHRcdH1cblx0fVxuXG5cdC8vIFJldHVybiB0aGUgbGVuZ3RoIG9mIHRoZSBpbnZhbGlkIGV4Y2Vzc1xuXHQvLyBpZiB3ZSdyZSBqdXN0IHBhcnNpbmdcblx0Ly8gT3RoZXJ3aXNlLCB0aHJvdyBhbiBlcnJvciBvciByZXR1cm4gdG9rZW5zXG5cdHJldHVybiBwYXJzZU9ubHkgP1xuXHRcdHNvRmFyLmxlbmd0aCA6XG5cdFx0c29GYXIgP1xuXHRcdFx0U2l6emxlLmVycm9yKCBzZWxlY3RvciApIDpcblx0XHRcdC8vIENhY2hlIHRoZSB0b2tlbnNcblx0XHRcdHRva2VuQ2FjaGUoIHNlbGVjdG9yLCBncm91cHMgKS5zbGljZSggMCApO1xufTtcblxuZnVuY3Rpb24gdG9TZWxlY3RvciggdG9rZW5zICkge1xuXHR2YXIgaSA9IDAsXG5cdFx0bGVuID0gdG9rZW5zLmxlbmd0aCxcblx0XHRzZWxlY3RvciA9IFwiXCI7XG5cdGZvciAoIDsgaSA8IGxlbjsgaSsrICkge1xuXHRcdHNlbGVjdG9yICs9IHRva2Vuc1tpXS52YWx1ZTtcblx0fVxuXHRyZXR1cm4gc2VsZWN0b3I7XG59XG5cbmZ1bmN0aW9uIGFkZENvbWJpbmF0b3IoIG1hdGNoZXIsIGNvbWJpbmF0b3IsIGJhc2UgKSB7XG5cdHZhciBkaXIgPSBjb21iaW5hdG9yLmRpcixcblx0XHRza2lwID0gY29tYmluYXRvci5uZXh0LFxuXHRcdGtleSA9IHNraXAgfHwgZGlyLFxuXHRcdGNoZWNrTm9uRWxlbWVudHMgPSBiYXNlICYmIGtleSA9PT0gXCJwYXJlbnROb2RlXCIsXG5cdFx0ZG9uZU5hbWUgPSBkb25lKys7XG5cblx0cmV0dXJuIGNvbWJpbmF0b3IuZmlyc3QgP1xuXHRcdC8vIENoZWNrIGFnYWluc3QgY2xvc2VzdCBhbmNlc3Rvci9wcmVjZWRpbmcgZWxlbWVudFxuXHRcdGZ1bmN0aW9uKCBlbGVtLCBjb250ZXh0LCB4bWwgKSB7XG5cdFx0XHR3aGlsZSAoIChlbGVtID0gZWxlbVsgZGlyIF0pICkge1xuXHRcdFx0XHRpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgfHwgY2hlY2tOb25FbGVtZW50cyApIHtcblx0XHRcdFx0XHRyZXR1cm4gbWF0Y2hlciggZWxlbSwgY29udGV4dCwgeG1sICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9IDpcblxuXHRcdC8vIENoZWNrIGFnYWluc3QgYWxsIGFuY2VzdG9yL3ByZWNlZGluZyBlbGVtZW50c1xuXHRcdGZ1bmN0aW9uKCBlbGVtLCBjb250ZXh0LCB4bWwgKSB7XG5cdFx0XHR2YXIgb2xkQ2FjaGUsIHVuaXF1ZUNhY2hlLCBvdXRlckNhY2hlLFxuXHRcdFx0XHRuZXdDYWNoZSA9IFsgZGlycnVucywgZG9uZU5hbWUgXTtcblxuXHRcdFx0Ly8gV2UgY2FuJ3Qgc2V0IGFyYml0cmFyeSBkYXRhIG9uIFhNTCBub2Rlcywgc28gdGhleSBkb24ndCBiZW5lZml0IGZyb20gY29tYmluYXRvciBjYWNoaW5nXG5cdFx0XHRpZiAoIHhtbCApIHtcblx0XHRcdFx0d2hpbGUgKCAoZWxlbSA9IGVsZW1bIGRpciBdKSApIHtcblx0XHRcdFx0XHRpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgfHwgY2hlY2tOb25FbGVtZW50cyApIHtcblx0XHRcdFx0XHRcdGlmICggbWF0Y2hlciggZWxlbSwgY29udGV4dCwgeG1sICkgKSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0d2hpbGUgKCAoZWxlbSA9IGVsZW1bIGRpciBdKSApIHtcblx0XHRcdFx0XHRpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgfHwgY2hlY2tOb25FbGVtZW50cyApIHtcblx0XHRcdFx0XHRcdG91dGVyQ2FjaGUgPSBlbGVtWyBleHBhbmRvIF0gfHwgKGVsZW1bIGV4cGFuZG8gXSA9IHt9KTtcblxuXHRcdFx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgPDkgb25seVxuXHRcdFx0XHRcdFx0Ly8gRGVmZW5kIGFnYWluc3QgY2xvbmVkIGF0dHJvcGVydGllcyAoalF1ZXJ5IGdoLTE3MDkpXG5cdFx0XHRcdFx0XHR1bmlxdWVDYWNoZSA9IG91dGVyQ2FjaGVbIGVsZW0udW5pcXVlSUQgXSB8fCAob3V0ZXJDYWNoZVsgZWxlbS51bmlxdWVJRCBdID0ge30pO1xuXG5cdFx0XHRcdFx0XHRpZiAoIHNraXAgJiYgc2tpcCA9PT0gZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpICkge1xuXHRcdFx0XHRcdFx0XHRlbGVtID0gZWxlbVsgZGlyIF0gfHwgZWxlbTtcblx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoIChvbGRDYWNoZSA9IHVuaXF1ZUNhY2hlWyBrZXkgXSkgJiZcblx0XHRcdFx0XHRcdFx0b2xkQ2FjaGVbIDAgXSA9PT0gZGlycnVucyAmJiBvbGRDYWNoZVsgMSBdID09PSBkb25lTmFtZSApIHtcblxuXHRcdFx0XHRcdFx0XHQvLyBBc3NpZ24gdG8gbmV3Q2FjaGUgc28gcmVzdWx0cyBiYWNrLXByb3BhZ2F0ZSB0byBwcmV2aW91cyBlbGVtZW50c1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gKG5ld0NhY2hlWyAyIF0gPSBvbGRDYWNoZVsgMiBdKTtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdC8vIFJldXNlIG5ld2NhY2hlIHNvIHJlc3VsdHMgYmFjay1wcm9wYWdhdGUgdG8gcHJldmlvdXMgZWxlbWVudHNcblx0XHRcdFx0XHRcdFx0dW5pcXVlQ2FjaGVbIGtleSBdID0gbmV3Q2FjaGU7XG5cblx0XHRcdFx0XHRcdFx0Ly8gQSBtYXRjaCBtZWFucyB3ZSdyZSBkb25lOyBhIGZhaWwgbWVhbnMgd2UgaGF2ZSB0byBrZWVwIGNoZWNraW5nXG5cdFx0XHRcdFx0XHRcdGlmICggKG5ld0NhY2hlWyAyIF0gPSBtYXRjaGVyKCBlbGVtLCBjb250ZXh0LCB4bWwgKSkgKSB7XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9O1xufVxuXG5mdW5jdGlvbiBlbGVtZW50TWF0Y2hlciggbWF0Y2hlcnMgKSB7XG5cdHJldHVybiBtYXRjaGVycy5sZW5ndGggPiAxID9cblx0XHRmdW5jdGlvbiggZWxlbSwgY29udGV4dCwgeG1sICkge1xuXHRcdFx0dmFyIGkgPSBtYXRjaGVycy5sZW5ndGg7XG5cdFx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdFx0aWYgKCAhbWF0Y2hlcnNbaV0oIGVsZW0sIGNvbnRleHQsIHhtbCApICkge1xuXHRcdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fSA6XG5cdFx0bWF0Y2hlcnNbMF07XG59XG5cbmZ1bmN0aW9uIG11bHRpcGxlQ29udGV4dHMoIHNlbGVjdG9yLCBjb250ZXh0cywgcmVzdWx0cyApIHtcblx0dmFyIGkgPSAwLFxuXHRcdGxlbiA9IGNvbnRleHRzLmxlbmd0aDtcblx0Zm9yICggOyBpIDwgbGVuOyBpKysgKSB7XG5cdFx0U2l6emxlKCBzZWxlY3RvciwgY29udGV4dHNbaV0sIHJlc3VsdHMgKTtcblx0fVxuXHRyZXR1cm4gcmVzdWx0cztcbn1cblxuZnVuY3Rpb24gY29uZGVuc2UoIHVubWF0Y2hlZCwgbWFwLCBmaWx0ZXIsIGNvbnRleHQsIHhtbCApIHtcblx0dmFyIGVsZW0sXG5cdFx0bmV3VW5tYXRjaGVkID0gW10sXG5cdFx0aSA9IDAsXG5cdFx0bGVuID0gdW5tYXRjaGVkLmxlbmd0aCxcblx0XHRtYXBwZWQgPSBtYXAgIT0gbnVsbDtcblxuXHRmb3IgKCA7IGkgPCBsZW47IGkrKyApIHtcblx0XHRpZiAoIChlbGVtID0gdW5tYXRjaGVkW2ldKSApIHtcblx0XHRcdGlmICggIWZpbHRlciB8fCBmaWx0ZXIoIGVsZW0sIGNvbnRleHQsIHhtbCApICkge1xuXHRcdFx0XHRuZXdVbm1hdGNoZWQucHVzaCggZWxlbSApO1xuXHRcdFx0XHRpZiAoIG1hcHBlZCApIHtcblx0XHRcdFx0XHRtYXAucHVzaCggaSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIG5ld1VubWF0Y2hlZDtcbn1cblxuZnVuY3Rpb24gc2V0TWF0Y2hlciggcHJlRmlsdGVyLCBzZWxlY3RvciwgbWF0Y2hlciwgcG9zdEZpbHRlciwgcG9zdEZpbmRlciwgcG9zdFNlbGVjdG9yICkge1xuXHRpZiAoIHBvc3RGaWx0ZXIgJiYgIXBvc3RGaWx0ZXJbIGV4cGFuZG8gXSApIHtcblx0XHRwb3N0RmlsdGVyID0gc2V0TWF0Y2hlciggcG9zdEZpbHRlciApO1xuXHR9XG5cdGlmICggcG9zdEZpbmRlciAmJiAhcG9zdEZpbmRlclsgZXhwYW5kbyBdICkge1xuXHRcdHBvc3RGaW5kZXIgPSBzZXRNYXRjaGVyKCBwb3N0RmluZGVyLCBwb3N0U2VsZWN0b3IgKTtcblx0fVxuXHRyZXR1cm4gbWFya0Z1bmN0aW9uKGZ1bmN0aW9uKCBzZWVkLCByZXN1bHRzLCBjb250ZXh0LCB4bWwgKSB7XG5cdFx0dmFyIHRlbXAsIGksIGVsZW0sXG5cdFx0XHRwcmVNYXAgPSBbXSxcblx0XHRcdHBvc3RNYXAgPSBbXSxcblx0XHRcdHByZWV4aXN0aW5nID0gcmVzdWx0cy5sZW5ndGgsXG5cblx0XHRcdC8vIEdldCBpbml0aWFsIGVsZW1lbnRzIGZyb20gc2VlZCBvciBjb250ZXh0XG5cdFx0XHRlbGVtcyA9IHNlZWQgfHwgbXVsdGlwbGVDb250ZXh0cyggc2VsZWN0b3IgfHwgXCIqXCIsIGNvbnRleHQubm9kZVR5cGUgPyBbIGNvbnRleHQgXSA6IGNvbnRleHQsIFtdICksXG5cblx0XHRcdC8vIFByZWZpbHRlciB0byBnZXQgbWF0Y2hlciBpbnB1dCwgcHJlc2VydmluZyBhIG1hcCBmb3Igc2VlZC1yZXN1bHRzIHN5bmNocm9uaXphdGlvblxuXHRcdFx0bWF0Y2hlckluID0gcHJlRmlsdGVyICYmICggc2VlZCB8fCAhc2VsZWN0b3IgKSA/XG5cdFx0XHRcdGNvbmRlbnNlKCBlbGVtcywgcHJlTWFwLCBwcmVGaWx0ZXIsIGNvbnRleHQsIHhtbCApIDpcblx0XHRcdFx0ZWxlbXMsXG5cblx0XHRcdG1hdGNoZXJPdXQgPSBtYXRjaGVyID9cblx0XHRcdFx0Ly8gSWYgd2UgaGF2ZSBhIHBvc3RGaW5kZXIsIG9yIGZpbHRlcmVkIHNlZWQsIG9yIG5vbi1zZWVkIHBvc3RGaWx0ZXIgb3IgcHJlZXhpc3RpbmcgcmVzdWx0cyxcblx0XHRcdFx0cG9zdEZpbmRlciB8fCAoIHNlZWQgPyBwcmVGaWx0ZXIgOiBwcmVleGlzdGluZyB8fCBwb3N0RmlsdGVyICkgP1xuXG5cdFx0XHRcdFx0Ly8gLi4uaW50ZXJtZWRpYXRlIHByb2Nlc3NpbmcgaXMgbmVjZXNzYXJ5XG5cdFx0XHRcdFx0W10gOlxuXG5cdFx0XHRcdFx0Ly8gLi4ub3RoZXJ3aXNlIHVzZSByZXN1bHRzIGRpcmVjdGx5XG5cdFx0XHRcdFx0cmVzdWx0cyA6XG5cdFx0XHRcdG1hdGNoZXJJbjtcblxuXHRcdC8vIEZpbmQgcHJpbWFyeSBtYXRjaGVzXG5cdFx0aWYgKCBtYXRjaGVyICkge1xuXHRcdFx0bWF0Y2hlciggbWF0Y2hlckluLCBtYXRjaGVyT3V0LCBjb250ZXh0LCB4bWwgKTtcblx0XHR9XG5cblx0XHQvLyBBcHBseSBwb3N0RmlsdGVyXG5cdFx0aWYgKCBwb3N0RmlsdGVyICkge1xuXHRcdFx0dGVtcCA9IGNvbmRlbnNlKCBtYXRjaGVyT3V0LCBwb3N0TWFwICk7XG5cdFx0XHRwb3N0RmlsdGVyKCB0ZW1wLCBbXSwgY29udGV4dCwgeG1sICk7XG5cblx0XHRcdC8vIFVuLW1hdGNoIGZhaWxpbmcgZWxlbWVudHMgYnkgbW92aW5nIHRoZW0gYmFjayB0byBtYXRjaGVySW5cblx0XHRcdGkgPSB0ZW1wLmxlbmd0aDtcblx0XHRcdHdoaWxlICggaS0tICkge1xuXHRcdFx0XHRpZiAoIChlbGVtID0gdGVtcFtpXSkgKSB7XG5cdFx0XHRcdFx0bWF0Y2hlck91dFsgcG9zdE1hcFtpXSBdID0gIShtYXRjaGVySW5bIHBvc3RNYXBbaV0gXSA9IGVsZW0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKCBzZWVkICkge1xuXHRcdFx0aWYgKCBwb3N0RmluZGVyIHx8IHByZUZpbHRlciApIHtcblx0XHRcdFx0aWYgKCBwb3N0RmluZGVyICkge1xuXHRcdFx0XHRcdC8vIEdldCB0aGUgZmluYWwgbWF0Y2hlck91dCBieSBjb25kZW5zaW5nIHRoaXMgaW50ZXJtZWRpYXRlIGludG8gcG9zdEZpbmRlciBjb250ZXh0c1xuXHRcdFx0XHRcdHRlbXAgPSBbXTtcblx0XHRcdFx0XHRpID0gbWF0Y2hlck91dC5sZW5ndGg7XG5cdFx0XHRcdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHRcdFx0XHRpZiAoIChlbGVtID0gbWF0Y2hlck91dFtpXSkgKSB7XG5cdFx0XHRcdFx0XHRcdC8vIFJlc3RvcmUgbWF0Y2hlckluIHNpbmNlIGVsZW0gaXMgbm90IHlldCBhIGZpbmFsIG1hdGNoXG5cdFx0XHRcdFx0XHRcdHRlbXAucHVzaCggKG1hdGNoZXJJbltpXSA9IGVsZW0pICk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHBvc3RGaW5kZXIoIG51bGwsIChtYXRjaGVyT3V0ID0gW10pLCB0ZW1wLCB4bWwgKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIE1vdmUgbWF0Y2hlZCBlbGVtZW50cyBmcm9tIHNlZWQgdG8gcmVzdWx0cyB0byBrZWVwIHRoZW0gc3luY2hyb25pemVkXG5cdFx0XHRcdGkgPSBtYXRjaGVyT3V0Lmxlbmd0aDtcblx0XHRcdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHRcdFx0aWYgKCAoZWxlbSA9IG1hdGNoZXJPdXRbaV0pICYmXG5cdFx0XHRcdFx0XHQodGVtcCA9IHBvc3RGaW5kZXIgPyBpbmRleE9mKCBzZWVkLCBlbGVtICkgOiBwcmVNYXBbaV0pID4gLTEgKSB7XG5cblx0XHRcdFx0XHRcdHNlZWRbdGVtcF0gPSAhKHJlc3VsdHNbdGVtcF0gPSBlbGVtKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdC8vIEFkZCBlbGVtZW50cyB0byByZXN1bHRzLCB0aHJvdWdoIHBvc3RGaW5kZXIgaWYgZGVmaW5lZFxuXHRcdH0gZWxzZSB7XG5cdFx0XHRtYXRjaGVyT3V0ID0gY29uZGVuc2UoXG5cdFx0XHRcdG1hdGNoZXJPdXQgPT09IHJlc3VsdHMgP1xuXHRcdFx0XHRcdG1hdGNoZXJPdXQuc3BsaWNlKCBwcmVleGlzdGluZywgbWF0Y2hlck91dC5sZW5ndGggKSA6XG5cdFx0XHRcdFx0bWF0Y2hlck91dFxuXHRcdFx0KTtcblx0XHRcdGlmICggcG9zdEZpbmRlciApIHtcblx0XHRcdFx0cG9zdEZpbmRlciggbnVsbCwgcmVzdWx0cywgbWF0Y2hlck91dCwgeG1sICk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRwdXNoLmFwcGx5KCByZXN1bHRzLCBtYXRjaGVyT3V0ICk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9KTtcbn1cblxuZnVuY3Rpb24gbWF0Y2hlckZyb21Ub2tlbnMoIHRva2VucyApIHtcblx0dmFyIGNoZWNrQ29udGV4dCwgbWF0Y2hlciwgaixcblx0XHRsZW4gPSB0b2tlbnMubGVuZ3RoLFxuXHRcdGxlYWRpbmdSZWxhdGl2ZSA9IEV4cHIucmVsYXRpdmVbIHRva2Vuc1swXS50eXBlIF0sXG5cdFx0aW1wbGljaXRSZWxhdGl2ZSA9IGxlYWRpbmdSZWxhdGl2ZSB8fCBFeHByLnJlbGF0aXZlW1wiIFwiXSxcblx0XHRpID0gbGVhZGluZ1JlbGF0aXZlID8gMSA6IDAsXG5cblx0XHQvLyBUaGUgZm91bmRhdGlvbmFsIG1hdGNoZXIgZW5zdXJlcyB0aGF0IGVsZW1lbnRzIGFyZSByZWFjaGFibGUgZnJvbSB0b3AtbGV2ZWwgY29udGV4dChzKVxuXHRcdG1hdGNoQ29udGV4dCA9IGFkZENvbWJpbmF0b3IoIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0cmV0dXJuIGVsZW0gPT09IGNoZWNrQ29udGV4dDtcblx0XHR9LCBpbXBsaWNpdFJlbGF0aXZlLCB0cnVlICksXG5cdFx0bWF0Y2hBbnlDb250ZXh0ID0gYWRkQ29tYmluYXRvciggZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRyZXR1cm4gaW5kZXhPZiggY2hlY2tDb250ZXh0LCBlbGVtICkgPiAtMTtcblx0XHR9LCBpbXBsaWNpdFJlbGF0aXZlLCB0cnVlICksXG5cdFx0bWF0Y2hlcnMgPSBbIGZ1bmN0aW9uKCBlbGVtLCBjb250ZXh0LCB4bWwgKSB7XG5cdFx0XHR2YXIgcmV0ID0gKCAhbGVhZGluZ1JlbGF0aXZlICYmICggeG1sIHx8IGNvbnRleHQgIT09IG91dGVybW9zdENvbnRleHQgKSApIHx8IChcblx0XHRcdFx0KGNoZWNrQ29udGV4dCA9IGNvbnRleHQpLm5vZGVUeXBlID9cblx0XHRcdFx0XHRtYXRjaENvbnRleHQoIGVsZW0sIGNvbnRleHQsIHhtbCApIDpcblx0XHRcdFx0XHRtYXRjaEFueUNvbnRleHQoIGVsZW0sIGNvbnRleHQsIHhtbCApICk7XG5cdFx0XHQvLyBBdm9pZCBoYW5naW5nIG9udG8gZWxlbWVudCAoaXNzdWUgIzI5OSlcblx0XHRcdGNoZWNrQ29udGV4dCA9IG51bGw7XG5cdFx0XHRyZXR1cm4gcmV0O1xuXHRcdH0gXTtcblxuXHRmb3IgKCA7IGkgPCBsZW47IGkrKyApIHtcblx0XHRpZiAoIChtYXRjaGVyID0gRXhwci5yZWxhdGl2ZVsgdG9rZW5zW2ldLnR5cGUgXSkgKSB7XG5cdFx0XHRtYXRjaGVycyA9IFsgYWRkQ29tYmluYXRvcihlbGVtZW50TWF0Y2hlciggbWF0Y2hlcnMgKSwgbWF0Y2hlcikgXTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0bWF0Y2hlciA9IEV4cHIuZmlsdGVyWyB0b2tlbnNbaV0udHlwZSBdLmFwcGx5KCBudWxsLCB0b2tlbnNbaV0ubWF0Y2hlcyApO1xuXG5cdFx0XHQvLyBSZXR1cm4gc3BlY2lhbCB1cG9uIHNlZWluZyBhIHBvc2l0aW9uYWwgbWF0Y2hlclxuXHRcdFx0aWYgKCBtYXRjaGVyWyBleHBhbmRvIF0gKSB7XG5cdFx0XHRcdC8vIEZpbmQgdGhlIG5leHQgcmVsYXRpdmUgb3BlcmF0b3IgKGlmIGFueSkgZm9yIHByb3BlciBoYW5kbGluZ1xuXHRcdFx0XHRqID0gKytpO1xuXHRcdFx0XHRmb3IgKCA7IGogPCBsZW47IGorKyApIHtcblx0XHRcdFx0XHRpZiAoIEV4cHIucmVsYXRpdmVbIHRva2Vuc1tqXS50eXBlIF0gKSB7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIHNldE1hdGNoZXIoXG5cdFx0XHRcdFx0aSA+IDEgJiYgZWxlbWVudE1hdGNoZXIoIG1hdGNoZXJzICksXG5cdFx0XHRcdFx0aSA+IDEgJiYgdG9TZWxlY3Rvcihcblx0XHRcdFx0XHRcdC8vIElmIHRoZSBwcmVjZWRpbmcgdG9rZW4gd2FzIGEgZGVzY2VuZGFudCBjb21iaW5hdG9yLCBpbnNlcnQgYW4gaW1wbGljaXQgYW55LWVsZW1lbnQgYCpgXG5cdFx0XHRcdFx0XHR0b2tlbnMuc2xpY2UoIDAsIGkgLSAxICkuY29uY2F0KHsgdmFsdWU6IHRva2Vuc1sgaSAtIDIgXS50eXBlID09PSBcIiBcIiA/IFwiKlwiIDogXCJcIiB9KVxuXHRcdFx0XHRcdCkucmVwbGFjZSggcnRyaW0sIFwiJDFcIiApLFxuXHRcdFx0XHRcdG1hdGNoZXIsXG5cdFx0XHRcdFx0aSA8IGogJiYgbWF0Y2hlckZyb21Ub2tlbnMoIHRva2Vucy5zbGljZSggaSwgaiApICksXG5cdFx0XHRcdFx0aiA8IGxlbiAmJiBtYXRjaGVyRnJvbVRva2VucyggKHRva2VucyA9IHRva2Vucy5zbGljZSggaiApKSApLFxuXHRcdFx0XHRcdGogPCBsZW4gJiYgdG9TZWxlY3RvciggdG9rZW5zIClcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHRcdG1hdGNoZXJzLnB1c2goIG1hdGNoZXIgKTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gZWxlbWVudE1hdGNoZXIoIG1hdGNoZXJzICk7XG59XG5cbmZ1bmN0aW9uIG1hdGNoZXJGcm9tR3JvdXBNYXRjaGVycyggZWxlbWVudE1hdGNoZXJzLCBzZXRNYXRjaGVycyApIHtcblx0dmFyIGJ5U2V0ID0gc2V0TWF0Y2hlcnMubGVuZ3RoID4gMCxcblx0XHRieUVsZW1lbnQgPSBlbGVtZW50TWF0Y2hlcnMubGVuZ3RoID4gMCxcblx0XHRzdXBlck1hdGNoZXIgPSBmdW5jdGlvbiggc2VlZCwgY29udGV4dCwgeG1sLCByZXN1bHRzLCBvdXRlcm1vc3QgKSB7XG5cdFx0XHR2YXIgZWxlbSwgaiwgbWF0Y2hlcixcblx0XHRcdFx0bWF0Y2hlZENvdW50ID0gMCxcblx0XHRcdFx0aSA9IFwiMFwiLFxuXHRcdFx0XHR1bm1hdGNoZWQgPSBzZWVkICYmIFtdLFxuXHRcdFx0XHRzZXRNYXRjaGVkID0gW10sXG5cdFx0XHRcdGNvbnRleHRCYWNrdXAgPSBvdXRlcm1vc3RDb250ZXh0LFxuXHRcdFx0XHQvLyBXZSBtdXN0IGFsd2F5cyBoYXZlIGVpdGhlciBzZWVkIGVsZW1lbnRzIG9yIG91dGVybW9zdCBjb250ZXh0XG5cdFx0XHRcdGVsZW1zID0gc2VlZCB8fCBieUVsZW1lbnQgJiYgRXhwci5maW5kW1wiVEFHXCJdKCBcIipcIiwgb3V0ZXJtb3N0ICksXG5cdFx0XHRcdC8vIFVzZSBpbnRlZ2VyIGRpcnJ1bnMgaWZmIHRoaXMgaXMgdGhlIG91dGVybW9zdCBtYXRjaGVyXG5cdFx0XHRcdGRpcnJ1bnNVbmlxdWUgPSAoZGlycnVucyArPSBjb250ZXh0QmFja3VwID09IG51bGwgPyAxIDogTWF0aC5yYW5kb20oKSB8fCAwLjEpLFxuXHRcdFx0XHRsZW4gPSBlbGVtcy5sZW5ndGg7XG5cblx0XHRcdGlmICggb3V0ZXJtb3N0ICkge1xuXHRcdFx0XHRvdXRlcm1vc3RDb250ZXh0ID0gY29udGV4dCA9PT0gZG9jdW1lbnQgfHwgY29udGV4dCB8fCBvdXRlcm1vc3Q7XG5cdFx0XHR9XG5cblx0XHRcdC8vIEFkZCBlbGVtZW50cyBwYXNzaW5nIGVsZW1lbnRNYXRjaGVycyBkaXJlY3RseSB0byByZXN1bHRzXG5cdFx0XHQvLyBTdXBwb3J0OiBJRTw5LCBTYWZhcmlcblx0XHRcdC8vIFRvbGVyYXRlIE5vZGVMaXN0IHByb3BlcnRpZXMgKElFOiBcImxlbmd0aFwiOyBTYWZhcmk6IDxudW1iZXI+KSBtYXRjaGluZyBlbGVtZW50cyBieSBpZFxuXHRcdFx0Zm9yICggOyBpICE9PSBsZW4gJiYgKGVsZW0gPSBlbGVtc1tpXSkgIT0gbnVsbDsgaSsrICkge1xuXHRcdFx0XHRpZiAoIGJ5RWxlbWVudCAmJiBlbGVtICkge1xuXHRcdFx0XHRcdGogPSAwO1xuXHRcdFx0XHRcdGlmICggIWNvbnRleHQgJiYgZWxlbS5vd25lckRvY3VtZW50ICE9PSBkb2N1bWVudCApIHtcblx0XHRcdFx0XHRcdHNldERvY3VtZW50KCBlbGVtICk7XG5cdFx0XHRcdFx0XHR4bWwgPSAhZG9jdW1lbnRJc0hUTUw7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHdoaWxlICggKG1hdGNoZXIgPSBlbGVtZW50TWF0Y2hlcnNbaisrXSkgKSB7XG5cdFx0XHRcdFx0XHRpZiAoIG1hdGNoZXIoIGVsZW0sIGNvbnRleHQgfHwgZG9jdW1lbnQsIHhtbCkgKSB7XG5cdFx0XHRcdFx0XHRcdHJlc3VsdHMucHVzaCggZWxlbSApO1xuXHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0aWYgKCBvdXRlcm1vc3QgKSB7XG5cdFx0XHRcdFx0XHRkaXJydW5zID0gZGlycnVuc1VuaXF1ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBUcmFjayB1bm1hdGNoZWQgZWxlbWVudHMgZm9yIHNldCBmaWx0ZXJzXG5cdFx0XHRcdGlmICggYnlTZXQgKSB7XG5cdFx0XHRcdFx0Ly8gVGhleSB3aWxsIGhhdmUgZ29uZSB0aHJvdWdoIGFsbCBwb3NzaWJsZSBtYXRjaGVyc1xuXHRcdFx0XHRcdGlmICggKGVsZW0gPSAhbWF0Y2hlciAmJiBlbGVtKSApIHtcblx0XHRcdFx0XHRcdG1hdGNoZWRDb3VudC0tO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIExlbmd0aGVuIHRoZSBhcnJheSBmb3IgZXZlcnkgZWxlbWVudCwgbWF0Y2hlZCBvciBub3Rcblx0XHRcdFx0XHRpZiAoIHNlZWQgKSB7XG5cdFx0XHRcdFx0XHR1bm1hdGNoZWQucHVzaCggZWxlbSApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBgaWAgaXMgbm93IHRoZSBjb3VudCBvZiBlbGVtZW50cyB2aXNpdGVkIGFib3ZlLCBhbmQgYWRkaW5nIGl0IHRvIGBtYXRjaGVkQ291bnRgXG5cdFx0XHQvLyBtYWtlcyB0aGUgbGF0dGVyIG5vbm5lZ2F0aXZlLlxuXHRcdFx0bWF0Y2hlZENvdW50ICs9IGk7XG5cblx0XHRcdC8vIEFwcGx5IHNldCBmaWx0ZXJzIHRvIHVubWF0Y2hlZCBlbGVtZW50c1xuXHRcdFx0Ly8gTk9URTogVGhpcyBjYW4gYmUgc2tpcHBlZCBpZiB0aGVyZSBhcmUgbm8gdW5tYXRjaGVkIGVsZW1lbnRzIChpLmUuLCBgbWF0Y2hlZENvdW50YFxuXHRcdFx0Ly8gZXF1YWxzIGBpYCksIHVubGVzcyB3ZSBkaWRuJ3QgdmlzaXQgX2FueV8gZWxlbWVudHMgaW4gdGhlIGFib3ZlIGxvb3AgYmVjYXVzZSB3ZSBoYXZlXG5cdFx0XHQvLyBubyBlbGVtZW50IG1hdGNoZXJzIGFuZCBubyBzZWVkLlxuXHRcdFx0Ly8gSW5jcmVtZW50aW5nIGFuIGluaXRpYWxseS1zdHJpbmcgXCIwXCIgYGlgIGFsbG93cyBgaWAgdG8gcmVtYWluIGEgc3RyaW5nIG9ubHkgaW4gdGhhdFxuXHRcdFx0Ly8gY2FzZSwgd2hpY2ggd2lsbCByZXN1bHQgaW4gYSBcIjAwXCIgYG1hdGNoZWRDb3VudGAgdGhhdCBkaWZmZXJzIGZyb20gYGlgIGJ1dCBpcyBhbHNvXG5cdFx0XHQvLyBudW1lcmljYWxseSB6ZXJvLlxuXHRcdFx0aWYgKCBieVNldCAmJiBpICE9PSBtYXRjaGVkQ291bnQgKSB7XG5cdFx0XHRcdGogPSAwO1xuXHRcdFx0XHR3aGlsZSAoIChtYXRjaGVyID0gc2V0TWF0Y2hlcnNbaisrXSkgKSB7XG5cdFx0XHRcdFx0bWF0Y2hlciggdW5tYXRjaGVkLCBzZXRNYXRjaGVkLCBjb250ZXh0LCB4bWwgKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmICggc2VlZCApIHtcblx0XHRcdFx0XHQvLyBSZWludGVncmF0ZSBlbGVtZW50IG1hdGNoZXMgdG8gZWxpbWluYXRlIHRoZSBuZWVkIGZvciBzb3J0aW5nXG5cdFx0XHRcdFx0aWYgKCBtYXRjaGVkQ291bnQgPiAwICkge1xuXHRcdFx0XHRcdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHRcdFx0XHRcdGlmICggISh1bm1hdGNoZWRbaV0gfHwgc2V0TWF0Y2hlZFtpXSkgKSB7XG5cdFx0XHRcdFx0XHRcdFx0c2V0TWF0Y2hlZFtpXSA9IHBvcC5jYWxsKCByZXN1bHRzICk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBEaXNjYXJkIGluZGV4IHBsYWNlaG9sZGVyIHZhbHVlcyB0byBnZXQgb25seSBhY3R1YWwgbWF0Y2hlc1xuXHRcdFx0XHRcdHNldE1hdGNoZWQgPSBjb25kZW5zZSggc2V0TWF0Y2hlZCApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gQWRkIG1hdGNoZXMgdG8gcmVzdWx0c1xuXHRcdFx0XHRwdXNoLmFwcGx5KCByZXN1bHRzLCBzZXRNYXRjaGVkICk7XG5cblx0XHRcdFx0Ly8gU2VlZGxlc3Mgc2V0IG1hdGNoZXMgc3VjY2VlZGluZyBtdWx0aXBsZSBzdWNjZXNzZnVsIG1hdGNoZXJzIHN0aXB1bGF0ZSBzb3J0aW5nXG5cdFx0XHRcdGlmICggb3V0ZXJtb3N0ICYmICFzZWVkICYmIHNldE1hdGNoZWQubGVuZ3RoID4gMCAmJlxuXHRcdFx0XHRcdCggbWF0Y2hlZENvdW50ICsgc2V0TWF0Y2hlcnMubGVuZ3RoICkgPiAxICkge1xuXG5cdFx0XHRcdFx0U2l6emxlLnVuaXF1ZVNvcnQoIHJlc3VsdHMgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBPdmVycmlkZSBtYW5pcHVsYXRpb24gb2YgZ2xvYmFscyBieSBuZXN0ZWQgbWF0Y2hlcnNcblx0XHRcdGlmICggb3V0ZXJtb3N0ICkge1xuXHRcdFx0XHRkaXJydW5zID0gZGlycnVuc1VuaXF1ZTtcblx0XHRcdFx0b3V0ZXJtb3N0Q29udGV4dCA9IGNvbnRleHRCYWNrdXA7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiB1bm1hdGNoZWQ7XG5cdFx0fTtcblxuXHRyZXR1cm4gYnlTZXQgP1xuXHRcdG1hcmtGdW5jdGlvbiggc3VwZXJNYXRjaGVyICkgOlxuXHRcdHN1cGVyTWF0Y2hlcjtcbn1cblxuY29tcGlsZSA9IFNpenpsZS5jb21waWxlID0gZnVuY3Rpb24oIHNlbGVjdG9yLCBtYXRjaCAvKiBJbnRlcm5hbCBVc2UgT25seSAqLyApIHtcblx0dmFyIGksXG5cdFx0c2V0TWF0Y2hlcnMgPSBbXSxcblx0XHRlbGVtZW50TWF0Y2hlcnMgPSBbXSxcblx0XHRjYWNoZWQgPSBjb21waWxlckNhY2hlWyBzZWxlY3RvciArIFwiIFwiIF07XG5cblx0aWYgKCAhY2FjaGVkICkge1xuXHRcdC8vIEdlbmVyYXRlIGEgZnVuY3Rpb24gb2YgcmVjdXJzaXZlIGZ1bmN0aW9ucyB0aGF0IGNhbiBiZSB1c2VkIHRvIGNoZWNrIGVhY2ggZWxlbWVudFxuXHRcdGlmICggIW1hdGNoICkge1xuXHRcdFx0bWF0Y2ggPSB0b2tlbml6ZSggc2VsZWN0b3IgKTtcblx0XHR9XG5cdFx0aSA9IG1hdGNoLmxlbmd0aDtcblx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdGNhY2hlZCA9IG1hdGNoZXJGcm9tVG9rZW5zKCBtYXRjaFtpXSApO1xuXHRcdFx0aWYgKCBjYWNoZWRbIGV4cGFuZG8gXSApIHtcblx0XHRcdFx0c2V0TWF0Y2hlcnMucHVzaCggY2FjaGVkICk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRlbGVtZW50TWF0Y2hlcnMucHVzaCggY2FjaGVkICk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gQ2FjaGUgdGhlIGNvbXBpbGVkIGZ1bmN0aW9uXG5cdFx0Y2FjaGVkID0gY29tcGlsZXJDYWNoZSggc2VsZWN0b3IsIG1hdGNoZXJGcm9tR3JvdXBNYXRjaGVycyggZWxlbWVudE1hdGNoZXJzLCBzZXRNYXRjaGVycyApICk7XG5cblx0XHQvLyBTYXZlIHNlbGVjdG9yIGFuZCB0b2tlbml6YXRpb25cblx0XHRjYWNoZWQuc2VsZWN0b3IgPSBzZWxlY3Rvcjtcblx0fVxuXHRyZXR1cm4gY2FjaGVkO1xufTtcblxuLyoqXG4gKiBBIGxvdy1sZXZlbCBzZWxlY3Rpb24gZnVuY3Rpb24gdGhhdCB3b3JrcyB3aXRoIFNpenpsZSdzIGNvbXBpbGVkXG4gKiAgc2VsZWN0b3IgZnVuY3Rpb25zXG4gKiBAcGFyYW0ge1N0cmluZ3xGdW5jdGlvbn0gc2VsZWN0b3IgQSBzZWxlY3RvciBvciBhIHByZS1jb21waWxlZFxuICogIHNlbGVjdG9yIGZ1bmN0aW9uIGJ1aWx0IHdpdGggU2l6emxlLmNvbXBpbGVcbiAqIEBwYXJhbSB7RWxlbWVudH0gY29udGV4dFxuICogQHBhcmFtIHtBcnJheX0gW3Jlc3VsdHNdXG4gKiBAcGFyYW0ge0FycmF5fSBbc2VlZF0gQSBzZXQgb2YgZWxlbWVudHMgdG8gbWF0Y2ggYWdhaW5zdFxuICovXG5zZWxlY3QgPSBTaXp6bGUuc2VsZWN0ID0gZnVuY3Rpb24oIHNlbGVjdG9yLCBjb250ZXh0LCByZXN1bHRzLCBzZWVkICkge1xuXHR2YXIgaSwgdG9rZW5zLCB0b2tlbiwgdHlwZSwgZmluZCxcblx0XHRjb21waWxlZCA9IHR5cGVvZiBzZWxlY3RvciA9PT0gXCJmdW5jdGlvblwiICYmIHNlbGVjdG9yLFxuXHRcdG1hdGNoID0gIXNlZWQgJiYgdG9rZW5pemUoIChzZWxlY3RvciA9IGNvbXBpbGVkLnNlbGVjdG9yIHx8IHNlbGVjdG9yKSApO1xuXG5cdHJlc3VsdHMgPSByZXN1bHRzIHx8IFtdO1xuXG5cdC8vIFRyeSB0byBtaW5pbWl6ZSBvcGVyYXRpb25zIGlmIHRoZXJlIGlzIG9ubHkgb25lIHNlbGVjdG9yIGluIHRoZSBsaXN0IGFuZCBubyBzZWVkXG5cdC8vICh0aGUgbGF0dGVyIG9mIHdoaWNoIGd1YXJhbnRlZXMgdXMgY29udGV4dClcblx0aWYgKCBtYXRjaC5sZW5ndGggPT09IDEgKSB7XG5cblx0XHQvLyBSZWR1Y2UgY29udGV4dCBpZiB0aGUgbGVhZGluZyBjb21wb3VuZCBzZWxlY3RvciBpcyBhbiBJRFxuXHRcdHRva2VucyA9IG1hdGNoWzBdID0gbWF0Y2hbMF0uc2xpY2UoIDAgKTtcblx0XHRpZiAoIHRva2Vucy5sZW5ndGggPiAyICYmICh0b2tlbiA9IHRva2Vuc1swXSkudHlwZSA9PT0gXCJJRFwiICYmXG5cdFx0XHRcdGNvbnRleHQubm9kZVR5cGUgPT09IDkgJiYgZG9jdW1lbnRJc0hUTUwgJiYgRXhwci5yZWxhdGl2ZVsgdG9rZW5zWzFdLnR5cGUgXSApIHtcblxuXHRcdFx0Y29udGV4dCA9ICggRXhwci5maW5kW1wiSURcIl0oIHRva2VuLm1hdGNoZXNbMF0ucmVwbGFjZShydW5lc2NhcGUsIGZ1bmVzY2FwZSksIGNvbnRleHQgKSB8fCBbXSApWzBdO1xuXHRcdFx0aWYgKCAhY29udGV4dCApIHtcblx0XHRcdFx0cmV0dXJuIHJlc3VsdHM7XG5cblx0XHRcdC8vIFByZWNvbXBpbGVkIG1hdGNoZXJzIHdpbGwgc3RpbGwgdmVyaWZ5IGFuY2VzdHJ5LCBzbyBzdGVwIHVwIGEgbGV2ZWxcblx0XHRcdH0gZWxzZSBpZiAoIGNvbXBpbGVkICkge1xuXHRcdFx0XHRjb250ZXh0ID0gY29udGV4dC5wYXJlbnROb2RlO1xuXHRcdFx0fVxuXG5cdFx0XHRzZWxlY3RvciA9IHNlbGVjdG9yLnNsaWNlKCB0b2tlbnMuc2hpZnQoKS52YWx1ZS5sZW5ndGggKTtcblx0XHR9XG5cblx0XHQvLyBGZXRjaCBhIHNlZWQgc2V0IGZvciByaWdodC10by1sZWZ0IG1hdGNoaW5nXG5cdFx0aSA9IG1hdGNoRXhwcltcIm5lZWRzQ29udGV4dFwiXS50ZXN0KCBzZWxlY3RvciApID8gMCA6IHRva2Vucy5sZW5ndGg7XG5cdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHR0b2tlbiA9IHRva2Vuc1tpXTtcblxuXHRcdFx0Ly8gQWJvcnQgaWYgd2UgaGl0IGEgY29tYmluYXRvclxuXHRcdFx0aWYgKCBFeHByLnJlbGF0aXZlWyAodHlwZSA9IHRva2VuLnR5cGUpIF0gKSB7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdFx0aWYgKCAoZmluZCA9IEV4cHIuZmluZFsgdHlwZSBdKSApIHtcblx0XHRcdFx0Ly8gU2VhcmNoLCBleHBhbmRpbmcgY29udGV4dCBmb3IgbGVhZGluZyBzaWJsaW5nIGNvbWJpbmF0b3JzXG5cdFx0XHRcdGlmICggKHNlZWQgPSBmaW5kKFxuXHRcdFx0XHRcdHRva2VuLm1hdGNoZXNbMF0ucmVwbGFjZSggcnVuZXNjYXBlLCBmdW5lc2NhcGUgKSxcblx0XHRcdFx0XHRyc2libGluZy50ZXN0KCB0b2tlbnNbMF0udHlwZSApICYmIHRlc3RDb250ZXh0KCBjb250ZXh0LnBhcmVudE5vZGUgKSB8fCBjb250ZXh0XG5cdFx0XHRcdCkpICkge1xuXG5cdFx0XHRcdFx0Ly8gSWYgc2VlZCBpcyBlbXB0eSBvciBubyB0b2tlbnMgcmVtYWluLCB3ZSBjYW4gcmV0dXJuIGVhcmx5XG5cdFx0XHRcdFx0dG9rZW5zLnNwbGljZSggaSwgMSApO1xuXHRcdFx0XHRcdHNlbGVjdG9yID0gc2VlZC5sZW5ndGggJiYgdG9TZWxlY3RvciggdG9rZW5zICk7XG5cdFx0XHRcdFx0aWYgKCAhc2VsZWN0b3IgKSB7XG5cdFx0XHRcdFx0XHRwdXNoLmFwcGx5KCByZXN1bHRzLCBzZWVkICk7XG5cdFx0XHRcdFx0XHRyZXR1cm4gcmVzdWx0cztcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8vIENvbXBpbGUgYW5kIGV4ZWN1dGUgYSBmaWx0ZXJpbmcgZnVuY3Rpb24gaWYgb25lIGlzIG5vdCBwcm92aWRlZFxuXHQvLyBQcm92aWRlIGBtYXRjaGAgdG8gYXZvaWQgcmV0b2tlbml6YXRpb24gaWYgd2UgbW9kaWZpZWQgdGhlIHNlbGVjdG9yIGFib3ZlXG5cdCggY29tcGlsZWQgfHwgY29tcGlsZSggc2VsZWN0b3IsIG1hdGNoICkgKShcblx0XHRzZWVkLFxuXHRcdGNvbnRleHQsXG5cdFx0IWRvY3VtZW50SXNIVE1MLFxuXHRcdHJlc3VsdHMsXG5cdFx0IWNvbnRleHQgfHwgcnNpYmxpbmcudGVzdCggc2VsZWN0b3IgKSAmJiB0ZXN0Q29udGV4dCggY29udGV4dC5wYXJlbnROb2RlICkgfHwgY29udGV4dFxuXHQpO1xuXHRyZXR1cm4gcmVzdWx0cztcbn07XG5cbi8vIE9uZS10aW1lIGFzc2lnbm1lbnRzXG5cbi8vIFNvcnQgc3RhYmlsaXR5XG5zdXBwb3J0LnNvcnRTdGFibGUgPSBleHBhbmRvLnNwbGl0KFwiXCIpLnNvcnQoIHNvcnRPcmRlciApLmpvaW4oXCJcIikgPT09IGV4cGFuZG87XG5cbi8vIFN1cHBvcnQ6IENocm9tZSAxNC0zNStcbi8vIEFsd2F5cyBhc3N1bWUgZHVwbGljYXRlcyBpZiB0aGV5IGFyZW4ndCBwYXNzZWQgdG8gdGhlIGNvbXBhcmlzb24gZnVuY3Rpb25cbnN1cHBvcnQuZGV0ZWN0RHVwbGljYXRlcyA9ICEhaGFzRHVwbGljYXRlO1xuXG4vLyBJbml0aWFsaXplIGFnYWluc3QgdGhlIGRlZmF1bHQgZG9jdW1lbnRcbnNldERvY3VtZW50KCk7XG5cbi8vIFN1cHBvcnQ6IFdlYmtpdDw1MzcuMzIgLSBTYWZhcmkgNi4wLjMvQ2hyb21lIDI1IChmaXhlZCBpbiBDaHJvbWUgMjcpXG4vLyBEZXRhY2hlZCBub2RlcyBjb25mb3VuZGluZ2x5IGZvbGxvdyAqZWFjaCBvdGhlcipcbnN1cHBvcnQuc29ydERldGFjaGVkID0gYXNzZXJ0KGZ1bmN0aW9uKCBlbCApIHtcblx0Ly8gU2hvdWxkIHJldHVybiAxLCBidXQgcmV0dXJucyA0IChmb2xsb3dpbmcpXG5cdHJldHVybiBlbC5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiggZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImZpZWxkc2V0XCIpICkgJiAxO1xufSk7XG5cbi8vIFN1cHBvcnQ6IElFPDhcbi8vIFByZXZlbnQgYXR0cmlidXRlL3Byb3BlcnR5IFwiaW50ZXJwb2xhdGlvblwiXG4vLyBodHRwczovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L21zNTM2NDI5JTI4VlMuODUlMjkuYXNweFxuaWYgKCAhYXNzZXJ0KGZ1bmN0aW9uKCBlbCApIHtcblx0ZWwuaW5uZXJIVE1MID0gXCI8YSBocmVmPScjJz48L2E+XCI7XG5cdHJldHVybiBlbC5maXJzdENoaWxkLmdldEF0dHJpYnV0ZShcImhyZWZcIikgPT09IFwiI1wiIDtcbn0pICkge1xuXHRhZGRIYW5kbGUoIFwidHlwZXxocmVmfGhlaWdodHx3aWR0aFwiLCBmdW5jdGlvbiggZWxlbSwgbmFtZSwgaXNYTUwgKSB7XG5cdFx0aWYgKCAhaXNYTUwgKSB7XG5cdFx0XHRyZXR1cm4gZWxlbS5nZXRBdHRyaWJ1dGUoIG5hbWUsIG5hbWUudG9Mb3dlckNhc2UoKSA9PT0gXCJ0eXBlXCIgPyAxIDogMiApO1xuXHRcdH1cblx0fSk7XG59XG5cbi8vIFN1cHBvcnQ6IElFPDlcbi8vIFVzZSBkZWZhdWx0VmFsdWUgaW4gcGxhY2Ugb2YgZ2V0QXR0cmlidXRlKFwidmFsdWVcIilcbmlmICggIXN1cHBvcnQuYXR0cmlidXRlcyB8fCAhYXNzZXJ0KGZ1bmN0aW9uKCBlbCApIHtcblx0ZWwuaW5uZXJIVE1MID0gXCI8aW5wdXQvPlwiO1xuXHRlbC5maXJzdENoaWxkLnNldEF0dHJpYnV0ZSggXCJ2YWx1ZVwiLCBcIlwiICk7XG5cdHJldHVybiBlbC5maXJzdENoaWxkLmdldEF0dHJpYnV0ZSggXCJ2YWx1ZVwiICkgPT09IFwiXCI7XG59KSApIHtcblx0YWRkSGFuZGxlKCBcInZhbHVlXCIsIGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCBpc1hNTCApIHtcblx0XHRpZiAoICFpc1hNTCAmJiBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT09IFwiaW5wdXRcIiApIHtcblx0XHRcdHJldHVybiBlbGVtLmRlZmF1bHRWYWx1ZTtcblx0XHR9XG5cdH0pO1xufVxuXG4vLyBTdXBwb3J0OiBJRTw5XG4vLyBVc2UgZ2V0QXR0cmlidXRlTm9kZSB0byBmZXRjaCBib29sZWFucyB3aGVuIGdldEF0dHJpYnV0ZSBsaWVzXG5pZiAoICFhc3NlcnQoZnVuY3Rpb24oIGVsICkge1xuXHRyZXR1cm4gZWwuZ2V0QXR0cmlidXRlKFwiZGlzYWJsZWRcIikgPT0gbnVsbDtcbn0pICkge1xuXHRhZGRIYW5kbGUoIGJvb2xlYW5zLCBmdW5jdGlvbiggZWxlbSwgbmFtZSwgaXNYTUwgKSB7XG5cdFx0dmFyIHZhbDtcblx0XHRpZiAoICFpc1hNTCApIHtcblx0XHRcdHJldHVybiBlbGVtWyBuYW1lIF0gPT09IHRydWUgPyBuYW1lLnRvTG93ZXJDYXNlKCkgOlxuXHRcdFx0XHRcdCh2YWwgPSBlbGVtLmdldEF0dHJpYnV0ZU5vZGUoIG5hbWUgKSkgJiYgdmFsLnNwZWNpZmllZCA/XG5cdFx0XHRcdFx0dmFsLnZhbHVlIDpcblx0XHRcdFx0bnVsbDtcblx0XHR9XG5cdH0pO1xufVxuXG5yZXR1cm4gU2l6emxlO1xuXG59KSggd2luZG93ICk7XG5cblxuXG5qUXVlcnkuZmluZCA9IFNpenpsZTtcbmpRdWVyeS5leHByID0gU2l6emxlLnNlbGVjdG9ycztcblxuLy8gRGVwcmVjYXRlZFxualF1ZXJ5LmV4cHJbIFwiOlwiIF0gPSBqUXVlcnkuZXhwci5wc2V1ZG9zO1xualF1ZXJ5LnVuaXF1ZVNvcnQgPSBqUXVlcnkudW5pcXVlID0gU2l6emxlLnVuaXF1ZVNvcnQ7XG5qUXVlcnkudGV4dCA9IFNpenpsZS5nZXRUZXh0O1xualF1ZXJ5LmlzWE1MRG9jID0gU2l6emxlLmlzWE1MO1xualF1ZXJ5LmNvbnRhaW5zID0gU2l6emxlLmNvbnRhaW5zO1xualF1ZXJ5LmVzY2FwZVNlbGVjdG9yID0gU2l6emxlLmVzY2FwZTtcblxuXG5cblxudmFyIGRpciA9IGZ1bmN0aW9uKCBlbGVtLCBkaXIsIHVudGlsICkge1xuXHR2YXIgbWF0Y2hlZCA9IFtdLFxuXHRcdHRydW5jYXRlID0gdW50aWwgIT09IHVuZGVmaW5lZDtcblxuXHR3aGlsZSAoICggZWxlbSA9IGVsZW1bIGRpciBdICkgJiYgZWxlbS5ub2RlVHlwZSAhPT0gOSApIHtcblx0XHRpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgKSB7XG5cdFx0XHRpZiAoIHRydW5jYXRlICYmIGpRdWVyeSggZWxlbSApLmlzKCB1bnRpbCApICkge1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHRcdG1hdGNoZWQucHVzaCggZWxlbSApO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gbWF0Y2hlZDtcbn07XG5cblxudmFyIHNpYmxpbmdzID0gZnVuY3Rpb24oIG4sIGVsZW0gKSB7XG5cdHZhciBtYXRjaGVkID0gW107XG5cblx0Zm9yICggOyBuOyBuID0gbi5uZXh0U2libGluZyApIHtcblx0XHRpZiAoIG4ubm9kZVR5cGUgPT09IDEgJiYgbiAhPT0gZWxlbSApIHtcblx0XHRcdG1hdGNoZWQucHVzaCggbiApO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiBtYXRjaGVkO1xufTtcblxuXG52YXIgcm5lZWRzQ29udGV4dCA9IGpRdWVyeS5leHByLm1hdGNoLm5lZWRzQ29udGV4dDtcblxuXG5cbmZ1bmN0aW9uIG5vZGVOYW1lKCBlbGVtLCBuYW1lICkge1xuXG4gIHJldHVybiBlbGVtLm5vZGVOYW1lICYmIGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gbmFtZS50b0xvd2VyQ2FzZSgpO1xuXG59O1xudmFyIHJzaW5nbGVUYWcgPSAoIC9ePChbYS16XVteXFwvXFwwPjpcXHgyMFxcdFxcclxcblxcZl0qKVtcXHgyMFxcdFxcclxcblxcZl0qXFwvPz4oPzo8XFwvXFwxPnwpJC9pICk7XG5cblxuXG4vLyBJbXBsZW1lbnQgdGhlIGlkZW50aWNhbCBmdW5jdGlvbmFsaXR5IGZvciBmaWx0ZXIgYW5kIG5vdFxuZnVuY3Rpb24gd2lubm93KCBlbGVtZW50cywgcXVhbGlmaWVyLCBub3QgKSB7XG5cdGlmICggaXNGdW5jdGlvbiggcXVhbGlmaWVyICkgKSB7XG5cdFx0cmV0dXJuIGpRdWVyeS5ncmVwKCBlbGVtZW50cywgZnVuY3Rpb24oIGVsZW0sIGkgKSB7XG5cdFx0XHRyZXR1cm4gISFxdWFsaWZpZXIuY2FsbCggZWxlbSwgaSwgZWxlbSApICE9PSBub3Q7XG5cdFx0fSApO1xuXHR9XG5cblx0Ly8gU2luZ2xlIGVsZW1lbnRcblx0aWYgKCBxdWFsaWZpZXIubm9kZVR5cGUgKSB7XG5cdFx0cmV0dXJuIGpRdWVyeS5ncmVwKCBlbGVtZW50cywgZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRyZXR1cm4gKCBlbGVtID09PSBxdWFsaWZpZXIgKSAhPT0gbm90O1xuXHRcdH0gKTtcblx0fVxuXG5cdC8vIEFycmF5bGlrZSBvZiBlbGVtZW50cyAoalF1ZXJ5LCBhcmd1bWVudHMsIEFycmF5KVxuXHRpZiAoIHR5cGVvZiBxdWFsaWZpZXIgIT09IFwic3RyaW5nXCIgKSB7XG5cdFx0cmV0dXJuIGpRdWVyeS5ncmVwKCBlbGVtZW50cywgZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRyZXR1cm4gKCBpbmRleE9mLmNhbGwoIHF1YWxpZmllciwgZWxlbSApID4gLTEgKSAhPT0gbm90O1xuXHRcdH0gKTtcblx0fVxuXG5cdC8vIEZpbHRlcmVkIGRpcmVjdGx5IGZvciBib3RoIHNpbXBsZSBhbmQgY29tcGxleCBzZWxlY3RvcnNcblx0cmV0dXJuIGpRdWVyeS5maWx0ZXIoIHF1YWxpZmllciwgZWxlbWVudHMsIG5vdCApO1xufVxuXG5qUXVlcnkuZmlsdGVyID0gZnVuY3Rpb24oIGV4cHIsIGVsZW1zLCBub3QgKSB7XG5cdHZhciBlbGVtID0gZWxlbXNbIDAgXTtcblxuXHRpZiAoIG5vdCApIHtcblx0XHRleHByID0gXCI6bm90KFwiICsgZXhwciArIFwiKVwiO1xuXHR9XG5cblx0aWYgKCBlbGVtcy5sZW5ndGggPT09IDEgJiYgZWxlbS5ub2RlVHlwZSA9PT0gMSApIHtcblx0XHRyZXR1cm4galF1ZXJ5LmZpbmQubWF0Y2hlc1NlbGVjdG9yKCBlbGVtLCBleHByICkgPyBbIGVsZW0gXSA6IFtdO1xuXHR9XG5cblx0cmV0dXJuIGpRdWVyeS5maW5kLm1hdGNoZXMoIGV4cHIsIGpRdWVyeS5ncmVwKCBlbGVtcywgZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0cmV0dXJuIGVsZW0ubm9kZVR5cGUgPT09IDE7XG5cdH0gKSApO1xufTtcblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXHRmaW5kOiBmdW5jdGlvbiggc2VsZWN0b3IgKSB7XG5cdFx0dmFyIGksIHJldCxcblx0XHRcdGxlbiA9IHRoaXMubGVuZ3RoLFxuXHRcdFx0c2VsZiA9IHRoaXM7XG5cblx0XHRpZiAoIHR5cGVvZiBzZWxlY3RvciAhPT0gXCJzdHJpbmdcIiApIHtcblx0XHRcdHJldHVybiB0aGlzLnB1c2hTdGFjayggalF1ZXJ5KCBzZWxlY3RvciApLmZpbHRlciggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGZvciAoIGkgPSAwOyBpIDwgbGVuOyBpKysgKSB7XG5cdFx0XHRcdFx0aWYgKCBqUXVlcnkuY29udGFpbnMoIHNlbGZbIGkgXSwgdGhpcyApICkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9ICkgKTtcblx0XHR9XG5cblx0XHRyZXQgPSB0aGlzLnB1c2hTdGFjayggW10gKTtcblxuXHRcdGZvciAoIGkgPSAwOyBpIDwgbGVuOyBpKysgKSB7XG5cdFx0XHRqUXVlcnkuZmluZCggc2VsZWN0b3IsIHNlbGZbIGkgXSwgcmV0ICk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGxlbiA+IDEgPyBqUXVlcnkudW5pcXVlU29ydCggcmV0ICkgOiByZXQ7XG5cdH0sXG5cdGZpbHRlcjogZnVuY3Rpb24oIHNlbGVjdG9yICkge1xuXHRcdHJldHVybiB0aGlzLnB1c2hTdGFjayggd2lubm93KCB0aGlzLCBzZWxlY3RvciB8fCBbXSwgZmFsc2UgKSApO1xuXHR9LFxuXHRub3Q6IGZ1bmN0aW9uKCBzZWxlY3RvciApIHtcblx0XHRyZXR1cm4gdGhpcy5wdXNoU3RhY2soIHdpbm5vdyggdGhpcywgc2VsZWN0b3IgfHwgW10sIHRydWUgKSApO1xuXHR9LFxuXHRpczogZnVuY3Rpb24oIHNlbGVjdG9yICkge1xuXHRcdHJldHVybiAhIXdpbm5vdyhcblx0XHRcdHRoaXMsXG5cblx0XHRcdC8vIElmIHRoaXMgaXMgYSBwb3NpdGlvbmFsL3JlbGF0aXZlIHNlbGVjdG9yLCBjaGVjayBtZW1iZXJzaGlwIGluIHRoZSByZXR1cm5lZCBzZXRcblx0XHRcdC8vIHNvICQoXCJwOmZpcnN0XCIpLmlzKFwicDpsYXN0XCIpIHdvbid0IHJldHVybiB0cnVlIGZvciBhIGRvYyB3aXRoIHR3byBcInBcIi5cblx0XHRcdHR5cGVvZiBzZWxlY3RvciA9PT0gXCJzdHJpbmdcIiAmJiBybmVlZHNDb250ZXh0LnRlc3QoIHNlbGVjdG9yICkgP1xuXHRcdFx0XHRqUXVlcnkoIHNlbGVjdG9yICkgOlxuXHRcdFx0XHRzZWxlY3RvciB8fCBbXSxcblx0XHRcdGZhbHNlXG5cdFx0KS5sZW5ndGg7XG5cdH1cbn0gKTtcblxuXG4vLyBJbml0aWFsaXplIGEgalF1ZXJ5IG9iamVjdFxuXG5cbi8vIEEgY2VudHJhbCByZWZlcmVuY2UgdG8gdGhlIHJvb3QgalF1ZXJ5KGRvY3VtZW50KVxudmFyIHJvb3RqUXVlcnksXG5cblx0Ly8gQSBzaW1wbGUgd2F5IHRvIGNoZWNrIGZvciBIVE1MIHN0cmluZ3Ncblx0Ly8gUHJpb3JpdGl6ZSAjaWQgb3ZlciA8dGFnPiB0byBhdm9pZCBYU1MgdmlhIGxvY2F0aW9uLmhhc2ggKCM5NTIxKVxuXHQvLyBTdHJpY3QgSFRNTCByZWNvZ25pdGlvbiAoIzExMjkwOiBtdXN0IHN0YXJ0IHdpdGggPClcblx0Ly8gU2hvcnRjdXQgc2ltcGxlICNpZCBjYXNlIGZvciBzcGVlZFxuXHRycXVpY2tFeHByID0gL14oPzpcXHMqKDxbXFx3XFxXXSs+KVtePl0qfCMoW1xcdy1dKykpJC8sXG5cblx0aW5pdCA9IGpRdWVyeS5mbi5pbml0ID0gZnVuY3Rpb24oIHNlbGVjdG9yLCBjb250ZXh0LCByb290ICkge1xuXHRcdHZhciBtYXRjaCwgZWxlbTtcblxuXHRcdC8vIEhBTkRMRTogJChcIlwiKSwgJChudWxsKSwgJCh1bmRlZmluZWQpLCAkKGZhbHNlKVxuXHRcdGlmICggIXNlbGVjdG9yICkge1xuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fVxuXG5cdFx0Ly8gTWV0aG9kIGluaXQoKSBhY2NlcHRzIGFuIGFsdGVybmF0ZSByb290alF1ZXJ5XG5cdFx0Ly8gc28gbWlncmF0ZSBjYW4gc3VwcG9ydCBqUXVlcnkuc3ViIChnaC0yMTAxKVxuXHRcdHJvb3QgPSByb290IHx8IHJvb3RqUXVlcnk7XG5cblx0XHQvLyBIYW5kbGUgSFRNTCBzdHJpbmdzXG5cdFx0aWYgKCB0eXBlb2Ygc2VsZWN0b3IgPT09IFwic3RyaW5nXCIgKSB7XG5cdFx0XHRpZiAoIHNlbGVjdG9yWyAwIF0gPT09IFwiPFwiICYmXG5cdFx0XHRcdHNlbGVjdG9yWyBzZWxlY3Rvci5sZW5ndGggLSAxIF0gPT09IFwiPlwiICYmXG5cdFx0XHRcdHNlbGVjdG9yLmxlbmd0aCA+PSAzICkge1xuXG5cdFx0XHRcdC8vIEFzc3VtZSB0aGF0IHN0cmluZ3MgdGhhdCBzdGFydCBhbmQgZW5kIHdpdGggPD4gYXJlIEhUTUwgYW5kIHNraXAgdGhlIHJlZ2V4IGNoZWNrXG5cdFx0XHRcdG1hdGNoID0gWyBudWxsLCBzZWxlY3RvciwgbnVsbCBdO1xuXG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRtYXRjaCA9IHJxdWlja0V4cHIuZXhlYyggc2VsZWN0b3IgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gTWF0Y2ggaHRtbCBvciBtYWtlIHN1cmUgbm8gY29udGV4dCBpcyBzcGVjaWZpZWQgZm9yICNpZFxuXHRcdFx0aWYgKCBtYXRjaCAmJiAoIG1hdGNoWyAxIF0gfHwgIWNvbnRleHQgKSApIHtcblxuXHRcdFx0XHQvLyBIQU5ETEU6ICQoaHRtbCkgLT4gJChhcnJheSlcblx0XHRcdFx0aWYgKCBtYXRjaFsgMSBdICkge1xuXHRcdFx0XHRcdGNvbnRleHQgPSBjb250ZXh0IGluc3RhbmNlb2YgalF1ZXJ5ID8gY29udGV4dFsgMCBdIDogY29udGV4dDtcblxuXHRcdFx0XHRcdC8vIE9wdGlvbiB0byBydW4gc2NyaXB0cyBpcyB0cnVlIGZvciBiYWNrLWNvbXBhdFxuXHRcdFx0XHRcdC8vIEludGVudGlvbmFsbHkgbGV0IHRoZSBlcnJvciBiZSB0aHJvd24gaWYgcGFyc2VIVE1MIGlzIG5vdCBwcmVzZW50XG5cdFx0XHRcdFx0alF1ZXJ5Lm1lcmdlKCB0aGlzLCBqUXVlcnkucGFyc2VIVE1MKFxuXHRcdFx0XHRcdFx0bWF0Y2hbIDEgXSxcblx0XHRcdFx0XHRcdGNvbnRleHQgJiYgY29udGV4dC5ub2RlVHlwZSA/IGNvbnRleHQub3duZXJEb2N1bWVudCB8fCBjb250ZXh0IDogZG9jdW1lbnQsXG5cdFx0XHRcdFx0XHR0cnVlXG5cdFx0XHRcdFx0KSApO1xuXG5cdFx0XHRcdFx0Ly8gSEFORExFOiAkKGh0bWwsIHByb3BzKVxuXHRcdFx0XHRcdGlmICggcnNpbmdsZVRhZy50ZXN0KCBtYXRjaFsgMSBdICkgJiYgalF1ZXJ5LmlzUGxhaW5PYmplY3QoIGNvbnRleHQgKSApIHtcblx0XHRcdFx0XHRcdGZvciAoIG1hdGNoIGluIGNvbnRleHQgKSB7XG5cblx0XHRcdFx0XHRcdFx0Ly8gUHJvcGVydGllcyBvZiBjb250ZXh0IGFyZSBjYWxsZWQgYXMgbWV0aG9kcyBpZiBwb3NzaWJsZVxuXHRcdFx0XHRcdFx0XHRpZiAoIGlzRnVuY3Rpb24oIHRoaXNbIG1hdGNoIF0gKSApIHtcblx0XHRcdFx0XHRcdFx0XHR0aGlzWyBtYXRjaCBdKCBjb250ZXh0WyBtYXRjaCBdICk7XG5cblx0XHRcdFx0XHRcdFx0Ly8gLi4uYW5kIG90aGVyd2lzZSBzZXQgYXMgYXR0cmlidXRlc1xuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdHRoaXMuYXR0ciggbWF0Y2gsIGNvbnRleHRbIG1hdGNoIF0gKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdHJldHVybiB0aGlzO1xuXG5cdFx0XHRcdC8vIEhBTkRMRTogJCgjaWQpXG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0ZWxlbSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCBtYXRjaFsgMiBdICk7XG5cblx0XHRcdFx0XHRpZiAoIGVsZW0gKSB7XG5cblx0XHRcdFx0XHRcdC8vIEluamVjdCB0aGUgZWxlbWVudCBkaXJlY3RseSBpbnRvIHRoZSBqUXVlcnkgb2JqZWN0XG5cdFx0XHRcdFx0XHR0aGlzWyAwIF0gPSBlbGVtO1xuXHRcdFx0XHRcdFx0dGhpcy5sZW5ndGggPSAxO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdFx0fVxuXG5cdFx0XHQvLyBIQU5ETEU6ICQoZXhwciwgJCguLi4pKVxuXHRcdFx0fSBlbHNlIGlmICggIWNvbnRleHQgfHwgY29udGV4dC5qcXVlcnkgKSB7XG5cdFx0XHRcdHJldHVybiAoIGNvbnRleHQgfHwgcm9vdCApLmZpbmQoIHNlbGVjdG9yICk7XG5cblx0XHRcdC8vIEhBTkRMRTogJChleHByLCBjb250ZXh0KVxuXHRcdFx0Ly8gKHdoaWNoIGlzIGp1c3QgZXF1aXZhbGVudCB0bzogJChjb250ZXh0KS5maW5kKGV4cHIpXG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5jb25zdHJ1Y3RvciggY29udGV4dCApLmZpbmQoIHNlbGVjdG9yICk7XG5cdFx0XHR9XG5cblx0XHQvLyBIQU5ETEU6ICQoRE9NRWxlbWVudClcblx0XHR9IGVsc2UgaWYgKCBzZWxlY3Rvci5ub2RlVHlwZSApIHtcblx0XHRcdHRoaXNbIDAgXSA9IHNlbGVjdG9yO1xuXHRcdFx0dGhpcy5sZW5ndGggPSAxO1xuXHRcdFx0cmV0dXJuIHRoaXM7XG5cblx0XHQvLyBIQU5ETEU6ICQoZnVuY3Rpb24pXG5cdFx0Ly8gU2hvcnRjdXQgZm9yIGRvY3VtZW50IHJlYWR5XG5cdFx0fSBlbHNlIGlmICggaXNGdW5jdGlvbiggc2VsZWN0b3IgKSApIHtcblx0XHRcdHJldHVybiByb290LnJlYWR5ICE9PSB1bmRlZmluZWQgP1xuXHRcdFx0XHRyb290LnJlYWR5KCBzZWxlY3RvciApIDpcblxuXHRcdFx0XHQvLyBFeGVjdXRlIGltbWVkaWF0ZWx5IGlmIHJlYWR5IGlzIG5vdCBwcmVzZW50XG5cdFx0XHRcdHNlbGVjdG9yKCBqUXVlcnkgKTtcblx0XHR9XG5cblx0XHRyZXR1cm4galF1ZXJ5Lm1ha2VBcnJheSggc2VsZWN0b3IsIHRoaXMgKTtcblx0fTtcblxuLy8gR2l2ZSB0aGUgaW5pdCBmdW5jdGlvbiB0aGUgalF1ZXJ5IHByb3RvdHlwZSBmb3IgbGF0ZXIgaW5zdGFudGlhdGlvblxuaW5pdC5wcm90b3R5cGUgPSBqUXVlcnkuZm47XG5cbi8vIEluaXRpYWxpemUgY2VudHJhbCByZWZlcmVuY2VcbnJvb3RqUXVlcnkgPSBqUXVlcnkoIGRvY3VtZW50ICk7XG5cblxudmFyIHJwYXJlbnRzcHJldiA9IC9eKD86cGFyZW50c3xwcmV2KD86VW50aWx8QWxsKSkvLFxuXG5cdC8vIE1ldGhvZHMgZ3VhcmFudGVlZCB0byBwcm9kdWNlIGEgdW5pcXVlIHNldCB3aGVuIHN0YXJ0aW5nIGZyb20gYSB1bmlxdWUgc2V0XG5cdGd1YXJhbnRlZWRVbmlxdWUgPSB7XG5cdFx0Y2hpbGRyZW46IHRydWUsXG5cdFx0Y29udGVudHM6IHRydWUsXG5cdFx0bmV4dDogdHJ1ZSxcblx0XHRwcmV2OiB0cnVlXG5cdH07XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblx0aGFzOiBmdW5jdGlvbiggdGFyZ2V0ICkge1xuXHRcdHZhciB0YXJnZXRzID0galF1ZXJ5KCB0YXJnZXQsIHRoaXMgKSxcblx0XHRcdGwgPSB0YXJnZXRzLmxlbmd0aDtcblxuXHRcdHJldHVybiB0aGlzLmZpbHRlciggZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgaSA9IDA7XG5cdFx0XHRmb3IgKCA7IGkgPCBsOyBpKysgKSB7XG5cdFx0XHRcdGlmICggalF1ZXJ5LmNvbnRhaW5zKCB0aGlzLCB0YXJnZXRzWyBpIF0gKSApIHtcblx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0gKTtcblx0fSxcblxuXHRjbG9zZXN0OiBmdW5jdGlvbiggc2VsZWN0b3JzLCBjb250ZXh0ICkge1xuXHRcdHZhciBjdXIsXG5cdFx0XHRpID0gMCxcblx0XHRcdGwgPSB0aGlzLmxlbmd0aCxcblx0XHRcdG1hdGNoZWQgPSBbXSxcblx0XHRcdHRhcmdldHMgPSB0eXBlb2Ygc2VsZWN0b3JzICE9PSBcInN0cmluZ1wiICYmIGpRdWVyeSggc2VsZWN0b3JzICk7XG5cblx0XHQvLyBQb3NpdGlvbmFsIHNlbGVjdG9ycyBuZXZlciBtYXRjaCwgc2luY2UgdGhlcmUncyBubyBfc2VsZWN0aW9uXyBjb250ZXh0XG5cdFx0aWYgKCAhcm5lZWRzQ29udGV4dC50ZXN0KCBzZWxlY3RvcnMgKSApIHtcblx0XHRcdGZvciAoIDsgaSA8IGw7IGkrKyApIHtcblx0XHRcdFx0Zm9yICggY3VyID0gdGhpc1sgaSBdOyBjdXIgJiYgY3VyICE9PSBjb250ZXh0OyBjdXIgPSBjdXIucGFyZW50Tm9kZSApIHtcblxuXHRcdFx0XHRcdC8vIEFsd2F5cyBza2lwIGRvY3VtZW50IGZyYWdtZW50c1xuXHRcdFx0XHRcdGlmICggY3VyLm5vZGVUeXBlIDwgMTEgJiYgKCB0YXJnZXRzID9cblx0XHRcdFx0XHRcdHRhcmdldHMuaW5kZXgoIGN1ciApID4gLTEgOlxuXG5cdFx0XHRcdFx0XHQvLyBEb24ndCBwYXNzIG5vbi1lbGVtZW50cyB0byBTaXp6bGVcblx0XHRcdFx0XHRcdGN1ci5ub2RlVHlwZSA9PT0gMSAmJlxuXHRcdFx0XHRcdFx0XHRqUXVlcnkuZmluZC5tYXRjaGVzU2VsZWN0b3IoIGN1ciwgc2VsZWN0b3JzICkgKSApIHtcblxuXHRcdFx0XHRcdFx0bWF0Y2hlZC5wdXNoKCBjdXIgKTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLnB1c2hTdGFjayggbWF0Y2hlZC5sZW5ndGggPiAxID8galF1ZXJ5LnVuaXF1ZVNvcnQoIG1hdGNoZWQgKSA6IG1hdGNoZWQgKTtcblx0fSxcblxuXHQvLyBEZXRlcm1pbmUgdGhlIHBvc2l0aW9uIG9mIGFuIGVsZW1lbnQgd2l0aGluIHRoZSBzZXRcblx0aW5kZXg6IGZ1bmN0aW9uKCBlbGVtICkge1xuXG5cdFx0Ly8gTm8gYXJndW1lbnQsIHJldHVybiBpbmRleCBpbiBwYXJlbnRcblx0XHRpZiAoICFlbGVtICkge1xuXHRcdFx0cmV0dXJuICggdGhpc1sgMCBdICYmIHRoaXNbIDAgXS5wYXJlbnROb2RlICkgPyB0aGlzLmZpcnN0KCkucHJldkFsbCgpLmxlbmd0aCA6IC0xO1xuXHRcdH1cblxuXHRcdC8vIEluZGV4IGluIHNlbGVjdG9yXG5cdFx0aWYgKCB0eXBlb2YgZWxlbSA9PT0gXCJzdHJpbmdcIiApIHtcblx0XHRcdHJldHVybiBpbmRleE9mLmNhbGwoIGpRdWVyeSggZWxlbSApLCB0aGlzWyAwIF0gKTtcblx0XHR9XG5cblx0XHQvLyBMb2NhdGUgdGhlIHBvc2l0aW9uIG9mIHRoZSBkZXNpcmVkIGVsZW1lbnRcblx0XHRyZXR1cm4gaW5kZXhPZi5jYWxsKCB0aGlzLFxuXG5cdFx0XHQvLyBJZiBpdCByZWNlaXZlcyBhIGpRdWVyeSBvYmplY3QsIHRoZSBmaXJzdCBlbGVtZW50IGlzIHVzZWRcblx0XHRcdGVsZW0uanF1ZXJ5ID8gZWxlbVsgMCBdIDogZWxlbVxuXHRcdCk7XG5cdH0sXG5cblx0YWRkOiBmdW5jdGlvbiggc2VsZWN0b3IsIGNvbnRleHQgKSB7XG5cdFx0cmV0dXJuIHRoaXMucHVzaFN0YWNrKFxuXHRcdFx0alF1ZXJ5LnVuaXF1ZVNvcnQoXG5cdFx0XHRcdGpRdWVyeS5tZXJnZSggdGhpcy5nZXQoKSwgalF1ZXJ5KCBzZWxlY3RvciwgY29udGV4dCApIClcblx0XHRcdClcblx0XHQpO1xuXHR9LFxuXG5cdGFkZEJhY2s6IGZ1bmN0aW9uKCBzZWxlY3RvciApIHtcblx0XHRyZXR1cm4gdGhpcy5hZGQoIHNlbGVjdG9yID09IG51bGwgP1xuXHRcdFx0dGhpcy5wcmV2T2JqZWN0IDogdGhpcy5wcmV2T2JqZWN0LmZpbHRlciggc2VsZWN0b3IgKVxuXHRcdCk7XG5cdH1cbn0gKTtcblxuZnVuY3Rpb24gc2libGluZyggY3VyLCBkaXIgKSB7XG5cdHdoaWxlICggKCBjdXIgPSBjdXJbIGRpciBdICkgJiYgY3VyLm5vZGVUeXBlICE9PSAxICkge31cblx0cmV0dXJuIGN1cjtcbn1cblxualF1ZXJ5LmVhY2goIHtcblx0cGFyZW50OiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHR2YXIgcGFyZW50ID0gZWxlbS5wYXJlbnROb2RlO1xuXHRcdHJldHVybiBwYXJlbnQgJiYgcGFyZW50Lm5vZGVUeXBlICE9PSAxMSA/IHBhcmVudCA6IG51bGw7XG5cdH0sXG5cdHBhcmVudHM6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdHJldHVybiBkaXIoIGVsZW0sIFwicGFyZW50Tm9kZVwiICk7XG5cdH0sXG5cdHBhcmVudHNVbnRpbDogZnVuY3Rpb24oIGVsZW0sIGksIHVudGlsICkge1xuXHRcdHJldHVybiBkaXIoIGVsZW0sIFwicGFyZW50Tm9kZVwiLCB1bnRpbCApO1xuXHR9LFxuXHRuZXh0OiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRyZXR1cm4gc2libGluZyggZWxlbSwgXCJuZXh0U2libGluZ1wiICk7XG5cdH0sXG5cdHByZXY6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdHJldHVybiBzaWJsaW5nKCBlbGVtLCBcInByZXZpb3VzU2libGluZ1wiICk7XG5cdH0sXG5cdG5leHRBbGw6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdHJldHVybiBkaXIoIGVsZW0sIFwibmV4dFNpYmxpbmdcIiApO1xuXHR9LFxuXHRwcmV2QWxsOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRyZXR1cm4gZGlyKCBlbGVtLCBcInByZXZpb3VzU2libGluZ1wiICk7XG5cdH0sXG5cdG5leHRVbnRpbDogZnVuY3Rpb24oIGVsZW0sIGksIHVudGlsICkge1xuXHRcdHJldHVybiBkaXIoIGVsZW0sIFwibmV4dFNpYmxpbmdcIiwgdW50aWwgKTtcblx0fSxcblx0cHJldlVudGlsOiBmdW5jdGlvbiggZWxlbSwgaSwgdW50aWwgKSB7XG5cdFx0cmV0dXJuIGRpciggZWxlbSwgXCJwcmV2aW91c1NpYmxpbmdcIiwgdW50aWwgKTtcblx0fSxcblx0c2libGluZ3M6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdHJldHVybiBzaWJsaW5ncyggKCBlbGVtLnBhcmVudE5vZGUgfHwge30gKS5maXJzdENoaWxkLCBlbGVtICk7XG5cdH0sXG5cdGNoaWxkcmVuOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRyZXR1cm4gc2libGluZ3MoIGVsZW0uZmlyc3RDaGlsZCApO1xuXHR9LFxuXHRjb250ZW50czogZnVuY3Rpb24oIGVsZW0gKSB7XG4gICAgICAgIGlmICggbm9kZU5hbWUoIGVsZW0sIFwiaWZyYW1lXCIgKSApIHtcbiAgICAgICAgICAgIHJldHVybiBlbGVtLmNvbnRlbnREb2N1bWVudDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFN1cHBvcnQ6IElFIDkgLSAxMSBvbmx5LCBpT1MgNyBvbmx5LCBBbmRyb2lkIEJyb3dzZXIgPD00LjMgb25seVxuICAgICAgICAvLyBUcmVhdCB0aGUgdGVtcGxhdGUgZWxlbWVudCBhcyBhIHJlZ3VsYXIgb25lIGluIGJyb3dzZXJzIHRoYXRcbiAgICAgICAgLy8gZG9uJ3Qgc3VwcG9ydCBpdC5cbiAgICAgICAgaWYgKCBub2RlTmFtZSggZWxlbSwgXCJ0ZW1wbGF0ZVwiICkgKSB7XG4gICAgICAgICAgICBlbGVtID0gZWxlbS5jb250ZW50IHx8IGVsZW07XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4galF1ZXJ5Lm1lcmdlKCBbXSwgZWxlbS5jaGlsZE5vZGVzICk7XG5cdH1cbn0sIGZ1bmN0aW9uKCBuYW1lLCBmbiApIHtcblx0alF1ZXJ5LmZuWyBuYW1lIF0gPSBmdW5jdGlvbiggdW50aWwsIHNlbGVjdG9yICkge1xuXHRcdHZhciBtYXRjaGVkID0galF1ZXJ5Lm1hcCggdGhpcywgZm4sIHVudGlsICk7XG5cblx0XHRpZiAoIG5hbWUuc2xpY2UoIC01ICkgIT09IFwiVW50aWxcIiApIHtcblx0XHRcdHNlbGVjdG9yID0gdW50aWw7XG5cdFx0fVxuXG5cdFx0aWYgKCBzZWxlY3RvciAmJiB0eXBlb2Ygc2VsZWN0b3IgPT09IFwic3RyaW5nXCIgKSB7XG5cdFx0XHRtYXRjaGVkID0galF1ZXJ5LmZpbHRlciggc2VsZWN0b3IsIG1hdGNoZWQgKTtcblx0XHR9XG5cblx0XHRpZiAoIHRoaXMubGVuZ3RoID4gMSApIHtcblxuXHRcdFx0Ly8gUmVtb3ZlIGR1cGxpY2F0ZXNcblx0XHRcdGlmICggIWd1YXJhbnRlZWRVbmlxdWVbIG5hbWUgXSApIHtcblx0XHRcdFx0alF1ZXJ5LnVuaXF1ZVNvcnQoIG1hdGNoZWQgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gUmV2ZXJzZSBvcmRlciBmb3IgcGFyZW50cyogYW5kIHByZXYtZGVyaXZhdGl2ZXNcblx0XHRcdGlmICggcnBhcmVudHNwcmV2LnRlc3QoIG5hbWUgKSApIHtcblx0XHRcdFx0bWF0Y2hlZC5yZXZlcnNlKCk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMucHVzaFN0YWNrKCBtYXRjaGVkICk7XG5cdH07XG59ICk7XG52YXIgcm5vdGh0bWx3aGl0ZSA9ICggL1teXFx4MjBcXHRcXHJcXG5cXGZdKy9nICk7XG5cblxuXG4vLyBDb252ZXJ0IFN0cmluZy1mb3JtYXR0ZWQgb3B0aW9ucyBpbnRvIE9iamVjdC1mb3JtYXR0ZWQgb25lc1xuZnVuY3Rpb24gY3JlYXRlT3B0aW9ucyggb3B0aW9ucyApIHtcblx0dmFyIG9iamVjdCA9IHt9O1xuXHRqUXVlcnkuZWFjaCggb3B0aW9ucy5tYXRjaCggcm5vdGh0bWx3aGl0ZSApIHx8IFtdLCBmdW5jdGlvbiggXywgZmxhZyApIHtcblx0XHRvYmplY3RbIGZsYWcgXSA9IHRydWU7XG5cdH0gKTtcblx0cmV0dXJuIG9iamVjdDtcbn1cblxuLypcbiAqIENyZWF0ZSBhIGNhbGxiYWNrIGxpc3QgdXNpbmcgdGhlIGZvbGxvd2luZyBwYXJhbWV0ZXJzOlxuICpcbiAqXHRvcHRpb25zOiBhbiBvcHRpb25hbCBsaXN0IG9mIHNwYWNlLXNlcGFyYXRlZCBvcHRpb25zIHRoYXQgd2lsbCBjaGFuZ2UgaG93XG4gKlx0XHRcdHRoZSBjYWxsYmFjayBsaXN0IGJlaGF2ZXMgb3IgYSBtb3JlIHRyYWRpdGlvbmFsIG9wdGlvbiBvYmplY3RcbiAqXG4gKiBCeSBkZWZhdWx0IGEgY2FsbGJhY2sgbGlzdCB3aWxsIGFjdCBsaWtlIGFuIGV2ZW50IGNhbGxiYWNrIGxpc3QgYW5kIGNhbiBiZVxuICogXCJmaXJlZFwiIG11bHRpcGxlIHRpbWVzLlxuICpcbiAqIFBvc3NpYmxlIG9wdGlvbnM6XG4gKlxuICpcdG9uY2U6XHRcdFx0d2lsbCBlbnN1cmUgdGhlIGNhbGxiYWNrIGxpc3QgY2FuIG9ubHkgYmUgZmlyZWQgb25jZSAobGlrZSBhIERlZmVycmVkKVxuICpcbiAqXHRtZW1vcnk6XHRcdFx0d2lsbCBrZWVwIHRyYWNrIG9mIHByZXZpb3VzIHZhbHVlcyBhbmQgd2lsbCBjYWxsIGFueSBjYWxsYmFjayBhZGRlZFxuICpcdFx0XHRcdFx0YWZ0ZXIgdGhlIGxpc3QgaGFzIGJlZW4gZmlyZWQgcmlnaHQgYXdheSB3aXRoIHRoZSBsYXRlc3QgXCJtZW1vcml6ZWRcIlxuICpcdFx0XHRcdFx0dmFsdWVzIChsaWtlIGEgRGVmZXJyZWQpXG4gKlxuICpcdHVuaXF1ZTpcdFx0XHR3aWxsIGVuc3VyZSBhIGNhbGxiYWNrIGNhbiBvbmx5IGJlIGFkZGVkIG9uY2UgKG5vIGR1cGxpY2F0ZSBpbiB0aGUgbGlzdClcbiAqXG4gKlx0c3RvcE9uRmFsc2U6XHRpbnRlcnJ1cHQgY2FsbGluZ3Mgd2hlbiBhIGNhbGxiYWNrIHJldHVybnMgZmFsc2VcbiAqXG4gKi9cbmpRdWVyeS5DYWxsYmFja3MgPSBmdW5jdGlvbiggb3B0aW9ucyApIHtcblxuXHQvLyBDb252ZXJ0IG9wdGlvbnMgZnJvbSBTdHJpbmctZm9ybWF0dGVkIHRvIE9iamVjdC1mb3JtYXR0ZWQgaWYgbmVlZGVkXG5cdC8vICh3ZSBjaGVjayBpbiBjYWNoZSBmaXJzdClcblx0b3B0aW9ucyA9IHR5cGVvZiBvcHRpb25zID09PSBcInN0cmluZ1wiID9cblx0XHRjcmVhdGVPcHRpb25zKCBvcHRpb25zICkgOlxuXHRcdGpRdWVyeS5leHRlbmQoIHt9LCBvcHRpb25zICk7XG5cblx0dmFyIC8vIEZsYWcgdG8ga25vdyBpZiBsaXN0IGlzIGN1cnJlbnRseSBmaXJpbmdcblx0XHRmaXJpbmcsXG5cblx0XHQvLyBMYXN0IGZpcmUgdmFsdWUgZm9yIG5vbi1mb3JnZXR0YWJsZSBsaXN0c1xuXHRcdG1lbW9yeSxcblxuXHRcdC8vIEZsYWcgdG8ga25vdyBpZiBsaXN0IHdhcyBhbHJlYWR5IGZpcmVkXG5cdFx0ZmlyZWQsXG5cblx0XHQvLyBGbGFnIHRvIHByZXZlbnQgZmlyaW5nXG5cdFx0bG9ja2VkLFxuXG5cdFx0Ly8gQWN0dWFsIGNhbGxiYWNrIGxpc3Rcblx0XHRsaXN0ID0gW10sXG5cblx0XHQvLyBRdWV1ZSBvZiBleGVjdXRpb24gZGF0YSBmb3IgcmVwZWF0YWJsZSBsaXN0c1xuXHRcdHF1ZXVlID0gW10sXG5cblx0XHQvLyBJbmRleCBvZiBjdXJyZW50bHkgZmlyaW5nIGNhbGxiYWNrIChtb2RpZmllZCBieSBhZGQvcmVtb3ZlIGFzIG5lZWRlZClcblx0XHRmaXJpbmdJbmRleCA9IC0xLFxuXG5cdFx0Ly8gRmlyZSBjYWxsYmFja3Ncblx0XHRmaXJlID0gZnVuY3Rpb24oKSB7XG5cblx0XHRcdC8vIEVuZm9yY2Ugc2luZ2xlLWZpcmluZ1xuXHRcdFx0bG9ja2VkID0gbG9ja2VkIHx8IG9wdGlvbnMub25jZTtcblxuXHRcdFx0Ly8gRXhlY3V0ZSBjYWxsYmFja3MgZm9yIGFsbCBwZW5kaW5nIGV4ZWN1dGlvbnMsXG5cdFx0XHQvLyByZXNwZWN0aW5nIGZpcmluZ0luZGV4IG92ZXJyaWRlcyBhbmQgcnVudGltZSBjaGFuZ2VzXG5cdFx0XHRmaXJlZCA9IGZpcmluZyA9IHRydWU7XG5cdFx0XHRmb3IgKCA7IHF1ZXVlLmxlbmd0aDsgZmlyaW5nSW5kZXggPSAtMSApIHtcblx0XHRcdFx0bWVtb3J5ID0gcXVldWUuc2hpZnQoKTtcblx0XHRcdFx0d2hpbGUgKCArK2ZpcmluZ0luZGV4IDwgbGlzdC5sZW5ndGggKSB7XG5cblx0XHRcdFx0XHQvLyBSdW4gY2FsbGJhY2sgYW5kIGNoZWNrIGZvciBlYXJseSB0ZXJtaW5hdGlvblxuXHRcdFx0XHRcdGlmICggbGlzdFsgZmlyaW5nSW5kZXggXS5hcHBseSggbWVtb3J5WyAwIF0sIG1lbW9yeVsgMSBdICkgPT09IGZhbHNlICYmXG5cdFx0XHRcdFx0XHRvcHRpb25zLnN0b3BPbkZhbHNlICkge1xuXG5cdFx0XHRcdFx0XHQvLyBKdW1wIHRvIGVuZCBhbmQgZm9yZ2V0IHRoZSBkYXRhIHNvIC5hZGQgZG9lc24ndCByZS1maXJlXG5cdFx0XHRcdFx0XHRmaXJpbmdJbmRleCA9IGxpc3QubGVuZ3RoO1xuXHRcdFx0XHRcdFx0bWVtb3J5ID0gZmFsc2U7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIEZvcmdldCB0aGUgZGF0YSBpZiB3ZSdyZSBkb25lIHdpdGggaXRcblx0XHRcdGlmICggIW9wdGlvbnMubWVtb3J5ICkge1xuXHRcdFx0XHRtZW1vcnkgPSBmYWxzZTtcblx0XHRcdH1cblxuXHRcdFx0ZmlyaW5nID0gZmFsc2U7XG5cblx0XHRcdC8vIENsZWFuIHVwIGlmIHdlJ3JlIGRvbmUgZmlyaW5nIGZvciBnb29kXG5cdFx0XHRpZiAoIGxvY2tlZCApIHtcblxuXHRcdFx0XHQvLyBLZWVwIGFuIGVtcHR5IGxpc3QgaWYgd2UgaGF2ZSBkYXRhIGZvciBmdXR1cmUgYWRkIGNhbGxzXG5cdFx0XHRcdGlmICggbWVtb3J5ICkge1xuXHRcdFx0XHRcdGxpc3QgPSBbXTtcblxuXHRcdFx0XHQvLyBPdGhlcndpc2UsIHRoaXMgb2JqZWN0IGlzIHNwZW50XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0bGlzdCA9IFwiXCI7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0Ly8gQWN0dWFsIENhbGxiYWNrcyBvYmplY3Rcblx0XHRzZWxmID0ge1xuXG5cdFx0XHQvLyBBZGQgYSBjYWxsYmFjayBvciBhIGNvbGxlY3Rpb24gb2YgY2FsbGJhY2tzIHRvIHRoZSBsaXN0XG5cdFx0XHRhZGQ6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRpZiAoIGxpc3QgKSB7XG5cblx0XHRcdFx0XHQvLyBJZiB3ZSBoYXZlIG1lbW9yeSBmcm9tIGEgcGFzdCBydW4sIHdlIHNob3VsZCBmaXJlIGFmdGVyIGFkZGluZ1xuXHRcdFx0XHRcdGlmICggbWVtb3J5ICYmICFmaXJpbmcgKSB7XG5cdFx0XHRcdFx0XHRmaXJpbmdJbmRleCA9IGxpc3QubGVuZ3RoIC0gMTtcblx0XHRcdFx0XHRcdHF1ZXVlLnB1c2goIG1lbW9yeSApO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdCggZnVuY3Rpb24gYWRkKCBhcmdzICkge1xuXHRcdFx0XHRcdFx0alF1ZXJ5LmVhY2goIGFyZ3MsIGZ1bmN0aW9uKCBfLCBhcmcgKSB7XG5cdFx0XHRcdFx0XHRcdGlmICggaXNGdW5jdGlvbiggYXJnICkgKSB7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKCAhb3B0aW9ucy51bmlxdWUgfHwgIXNlbGYuaGFzKCBhcmcgKSApIHtcblx0XHRcdFx0XHRcdFx0XHRcdGxpc3QucHVzaCggYXJnICk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9IGVsc2UgaWYgKCBhcmcgJiYgYXJnLmxlbmd0aCAmJiB0b1R5cGUoIGFyZyApICE9PSBcInN0cmluZ1wiICkge1xuXG5cdFx0XHRcdFx0XHRcdFx0Ly8gSW5zcGVjdCByZWN1cnNpdmVseVxuXHRcdFx0XHRcdFx0XHRcdGFkZCggYXJnICk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH0gKTtcblx0XHRcdFx0XHR9ICkoIGFyZ3VtZW50cyApO1xuXG5cdFx0XHRcdFx0aWYgKCBtZW1vcnkgJiYgIWZpcmluZyApIHtcblx0XHRcdFx0XHRcdGZpcmUoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHR9LFxuXG5cdFx0XHQvLyBSZW1vdmUgYSBjYWxsYmFjayBmcm9tIHRoZSBsaXN0XG5cdFx0XHRyZW1vdmU6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRqUXVlcnkuZWFjaCggYXJndW1lbnRzLCBmdW5jdGlvbiggXywgYXJnICkge1xuXHRcdFx0XHRcdHZhciBpbmRleDtcblx0XHRcdFx0XHR3aGlsZSAoICggaW5kZXggPSBqUXVlcnkuaW5BcnJheSggYXJnLCBsaXN0LCBpbmRleCApICkgPiAtMSApIHtcblx0XHRcdFx0XHRcdGxpc3Quc3BsaWNlKCBpbmRleCwgMSApO1xuXG5cdFx0XHRcdFx0XHQvLyBIYW5kbGUgZmlyaW5nIGluZGV4ZXNcblx0XHRcdFx0XHRcdGlmICggaW5kZXggPD0gZmlyaW5nSW5kZXggKSB7XG5cdFx0XHRcdFx0XHRcdGZpcmluZ0luZGV4LS07XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9ICk7XG5cdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0fSxcblxuXHRcdFx0Ly8gQ2hlY2sgaWYgYSBnaXZlbiBjYWxsYmFjayBpcyBpbiB0aGUgbGlzdC5cblx0XHRcdC8vIElmIG5vIGFyZ3VtZW50IGlzIGdpdmVuLCByZXR1cm4gd2hldGhlciBvciBub3QgbGlzdCBoYXMgY2FsbGJhY2tzIGF0dGFjaGVkLlxuXHRcdFx0aGFzOiBmdW5jdGlvbiggZm4gKSB7XG5cdFx0XHRcdHJldHVybiBmbiA/XG5cdFx0XHRcdFx0alF1ZXJ5LmluQXJyYXkoIGZuLCBsaXN0ICkgPiAtMSA6XG5cdFx0XHRcdFx0bGlzdC5sZW5ndGggPiAwO1xuXHRcdFx0fSxcblxuXHRcdFx0Ly8gUmVtb3ZlIGFsbCBjYWxsYmFja3MgZnJvbSB0aGUgbGlzdFxuXHRcdFx0ZW1wdHk6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRpZiAoIGxpc3QgKSB7XG5cdFx0XHRcdFx0bGlzdCA9IFtdO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0fSxcblxuXHRcdFx0Ly8gRGlzYWJsZSAuZmlyZSBhbmQgLmFkZFxuXHRcdFx0Ly8gQWJvcnQgYW55IGN1cnJlbnQvcGVuZGluZyBleGVjdXRpb25zXG5cdFx0XHQvLyBDbGVhciBhbGwgY2FsbGJhY2tzIGFuZCB2YWx1ZXNcblx0XHRcdGRpc2FibGU6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRsb2NrZWQgPSBxdWV1ZSA9IFtdO1xuXHRcdFx0XHRsaXN0ID0gbWVtb3J5ID0gXCJcIjtcblx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHR9LFxuXHRcdFx0ZGlzYWJsZWQ6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRyZXR1cm4gIWxpc3Q7XG5cdFx0XHR9LFxuXG5cdFx0XHQvLyBEaXNhYmxlIC5maXJlXG5cdFx0XHQvLyBBbHNvIGRpc2FibGUgLmFkZCB1bmxlc3Mgd2UgaGF2ZSBtZW1vcnkgKHNpbmNlIGl0IHdvdWxkIGhhdmUgbm8gZWZmZWN0KVxuXHRcdFx0Ly8gQWJvcnQgYW55IHBlbmRpbmcgZXhlY3V0aW9uc1xuXHRcdFx0bG9jazogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGxvY2tlZCA9IHF1ZXVlID0gW107XG5cdFx0XHRcdGlmICggIW1lbW9yeSAmJiAhZmlyaW5nICkge1xuXHRcdFx0XHRcdGxpc3QgPSBtZW1vcnkgPSBcIlwiO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0fSxcblx0XHRcdGxvY2tlZDogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHJldHVybiAhIWxvY2tlZDtcblx0XHRcdH0sXG5cblx0XHRcdC8vIENhbGwgYWxsIGNhbGxiYWNrcyB3aXRoIHRoZSBnaXZlbiBjb250ZXh0IGFuZCBhcmd1bWVudHNcblx0XHRcdGZpcmVXaXRoOiBmdW5jdGlvbiggY29udGV4dCwgYXJncyApIHtcblx0XHRcdFx0aWYgKCAhbG9ja2VkICkge1xuXHRcdFx0XHRcdGFyZ3MgPSBhcmdzIHx8IFtdO1xuXHRcdFx0XHRcdGFyZ3MgPSBbIGNvbnRleHQsIGFyZ3Muc2xpY2UgPyBhcmdzLnNsaWNlKCkgOiBhcmdzIF07XG5cdFx0XHRcdFx0cXVldWUucHVzaCggYXJncyApO1xuXHRcdFx0XHRcdGlmICggIWZpcmluZyApIHtcblx0XHRcdFx0XHRcdGZpcmUoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHR9LFxuXG5cdFx0XHQvLyBDYWxsIGFsbCB0aGUgY2FsbGJhY2tzIHdpdGggdGhlIGdpdmVuIGFyZ3VtZW50c1xuXHRcdFx0ZmlyZTogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHNlbGYuZmlyZVdpdGgoIHRoaXMsIGFyZ3VtZW50cyApO1xuXHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdH0sXG5cblx0XHRcdC8vIFRvIGtub3cgaWYgdGhlIGNhbGxiYWNrcyBoYXZlIGFscmVhZHkgYmVlbiBjYWxsZWQgYXQgbGVhc3Qgb25jZVxuXHRcdFx0ZmlyZWQ6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRyZXR1cm4gISFmaXJlZDtcblx0XHRcdH1cblx0XHR9O1xuXG5cdHJldHVybiBzZWxmO1xufTtcblxuXG5mdW5jdGlvbiBJZGVudGl0eSggdiApIHtcblx0cmV0dXJuIHY7XG59XG5mdW5jdGlvbiBUaHJvd2VyKCBleCApIHtcblx0dGhyb3cgZXg7XG59XG5cbmZ1bmN0aW9uIGFkb3B0VmFsdWUoIHZhbHVlLCByZXNvbHZlLCByZWplY3QsIG5vVmFsdWUgKSB7XG5cdHZhciBtZXRob2Q7XG5cblx0dHJ5IHtcblxuXHRcdC8vIENoZWNrIGZvciBwcm9taXNlIGFzcGVjdCBmaXJzdCB0byBwcml2aWxlZ2Ugc3luY2hyb25vdXMgYmVoYXZpb3Jcblx0XHRpZiAoIHZhbHVlICYmIGlzRnVuY3Rpb24oICggbWV0aG9kID0gdmFsdWUucHJvbWlzZSApICkgKSB7XG5cdFx0XHRtZXRob2QuY2FsbCggdmFsdWUgKS5kb25lKCByZXNvbHZlICkuZmFpbCggcmVqZWN0ICk7XG5cblx0XHQvLyBPdGhlciB0aGVuYWJsZXNcblx0XHR9IGVsc2UgaWYgKCB2YWx1ZSAmJiBpc0Z1bmN0aW9uKCAoIG1ldGhvZCA9IHZhbHVlLnRoZW4gKSApICkge1xuXHRcdFx0bWV0aG9kLmNhbGwoIHZhbHVlLCByZXNvbHZlLCByZWplY3QgKTtcblxuXHRcdC8vIE90aGVyIG5vbi10aGVuYWJsZXNcblx0XHR9IGVsc2Uge1xuXG5cdFx0XHQvLyBDb250cm9sIGByZXNvbHZlYCBhcmd1bWVudHMgYnkgbGV0dGluZyBBcnJheSNzbGljZSBjYXN0IGJvb2xlYW4gYG5vVmFsdWVgIHRvIGludGVnZXI6XG5cdFx0XHQvLyAqIGZhbHNlOiBbIHZhbHVlIF0uc2xpY2UoIDAgKSA9PiByZXNvbHZlKCB2YWx1ZSApXG5cdFx0XHQvLyAqIHRydWU6IFsgdmFsdWUgXS5zbGljZSggMSApID0+IHJlc29sdmUoKVxuXHRcdFx0cmVzb2x2ZS5hcHBseSggdW5kZWZpbmVkLCBbIHZhbHVlIF0uc2xpY2UoIG5vVmFsdWUgKSApO1xuXHRcdH1cblxuXHQvLyBGb3IgUHJvbWlzZXMvQSssIGNvbnZlcnQgZXhjZXB0aW9ucyBpbnRvIHJlamVjdGlvbnNcblx0Ly8gU2luY2UgalF1ZXJ5LndoZW4gZG9lc24ndCB1bndyYXAgdGhlbmFibGVzLCB3ZSBjYW4gc2tpcCB0aGUgZXh0cmEgY2hlY2tzIGFwcGVhcmluZyBpblxuXHQvLyBEZWZlcnJlZCN0aGVuIHRvIGNvbmRpdGlvbmFsbHkgc3VwcHJlc3MgcmVqZWN0aW9uLlxuXHR9IGNhdGNoICggdmFsdWUgKSB7XG5cblx0XHQvLyBTdXBwb3J0OiBBbmRyb2lkIDQuMCBvbmx5XG5cdFx0Ly8gU3RyaWN0IG1vZGUgZnVuY3Rpb25zIGludm9rZWQgd2l0aG91dCAuY2FsbC8uYXBwbHkgZ2V0IGdsb2JhbC1vYmplY3QgY29udGV4dFxuXHRcdHJlamVjdC5hcHBseSggdW5kZWZpbmVkLCBbIHZhbHVlIF0gKTtcblx0fVxufVxuXG5qUXVlcnkuZXh0ZW5kKCB7XG5cblx0RGVmZXJyZWQ6IGZ1bmN0aW9uKCBmdW5jICkge1xuXHRcdHZhciB0dXBsZXMgPSBbXG5cblx0XHRcdFx0Ly8gYWN0aW9uLCBhZGQgbGlzdGVuZXIsIGNhbGxiYWNrcyxcblx0XHRcdFx0Ly8gLi4uIC50aGVuIGhhbmRsZXJzLCBhcmd1bWVudCBpbmRleCwgW2ZpbmFsIHN0YXRlXVxuXHRcdFx0XHRbIFwibm90aWZ5XCIsIFwicHJvZ3Jlc3NcIiwgalF1ZXJ5LkNhbGxiYWNrcyggXCJtZW1vcnlcIiApLFxuXHRcdFx0XHRcdGpRdWVyeS5DYWxsYmFja3MoIFwibWVtb3J5XCIgKSwgMiBdLFxuXHRcdFx0XHRbIFwicmVzb2x2ZVwiLCBcImRvbmVcIiwgalF1ZXJ5LkNhbGxiYWNrcyggXCJvbmNlIG1lbW9yeVwiICksXG5cdFx0XHRcdFx0alF1ZXJ5LkNhbGxiYWNrcyggXCJvbmNlIG1lbW9yeVwiICksIDAsIFwicmVzb2x2ZWRcIiBdLFxuXHRcdFx0XHRbIFwicmVqZWN0XCIsIFwiZmFpbFwiLCBqUXVlcnkuQ2FsbGJhY2tzKCBcIm9uY2UgbWVtb3J5XCIgKSxcblx0XHRcdFx0XHRqUXVlcnkuQ2FsbGJhY2tzKCBcIm9uY2UgbWVtb3J5XCIgKSwgMSwgXCJyZWplY3RlZFwiIF1cblx0XHRcdF0sXG5cdFx0XHRzdGF0ZSA9IFwicGVuZGluZ1wiLFxuXHRcdFx0cHJvbWlzZSA9IHtcblx0XHRcdFx0c3RhdGU6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdHJldHVybiBzdGF0ZTtcblx0XHRcdFx0fSxcblx0XHRcdFx0YWx3YXlzOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRkZWZlcnJlZC5kb25lKCBhcmd1bWVudHMgKS5mYWlsKCBhcmd1bWVudHMgKTtcblx0XHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdFx0fSxcblx0XHRcdFx0XCJjYXRjaFwiOiBmdW5jdGlvbiggZm4gKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHByb21pc2UudGhlbiggbnVsbCwgZm4gKTtcblx0XHRcdFx0fSxcblxuXHRcdFx0XHQvLyBLZWVwIHBpcGUgZm9yIGJhY2stY29tcGF0XG5cdFx0XHRcdHBpcGU6IGZ1bmN0aW9uKCAvKiBmbkRvbmUsIGZuRmFpbCwgZm5Qcm9ncmVzcyAqLyApIHtcblx0XHRcdFx0XHR2YXIgZm5zID0gYXJndW1lbnRzO1xuXG5cdFx0XHRcdFx0cmV0dXJuIGpRdWVyeS5EZWZlcnJlZCggZnVuY3Rpb24oIG5ld0RlZmVyICkge1xuXHRcdFx0XHRcdFx0alF1ZXJ5LmVhY2goIHR1cGxlcywgZnVuY3Rpb24oIGksIHR1cGxlICkge1xuXG5cdFx0XHRcdFx0XHRcdC8vIE1hcCB0dXBsZXMgKHByb2dyZXNzLCBkb25lLCBmYWlsKSB0byBhcmd1bWVudHMgKGRvbmUsIGZhaWwsIHByb2dyZXNzKVxuXHRcdFx0XHRcdFx0XHR2YXIgZm4gPSBpc0Z1bmN0aW9uKCBmbnNbIHR1cGxlWyA0IF0gXSApICYmIGZuc1sgdHVwbGVbIDQgXSBdO1xuXG5cdFx0XHRcdFx0XHRcdC8vIGRlZmVycmVkLnByb2dyZXNzKGZ1bmN0aW9uKCkgeyBiaW5kIHRvIG5ld0RlZmVyIG9yIG5ld0RlZmVyLm5vdGlmeSB9KVxuXHRcdFx0XHRcdFx0XHQvLyBkZWZlcnJlZC5kb25lKGZ1bmN0aW9uKCkgeyBiaW5kIHRvIG5ld0RlZmVyIG9yIG5ld0RlZmVyLnJlc29sdmUgfSlcblx0XHRcdFx0XHRcdFx0Ly8gZGVmZXJyZWQuZmFpbChmdW5jdGlvbigpIHsgYmluZCB0byBuZXdEZWZlciBvciBuZXdEZWZlci5yZWplY3QgfSlcblx0XHRcdFx0XHRcdFx0ZGVmZXJyZWRbIHR1cGxlWyAxIF0gXSggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRcdFx0dmFyIHJldHVybmVkID0gZm4gJiYgZm4uYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApO1xuXHRcdFx0XHRcdFx0XHRcdGlmICggcmV0dXJuZWQgJiYgaXNGdW5jdGlvbiggcmV0dXJuZWQucHJvbWlzZSApICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuZWQucHJvbWlzZSgpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC5wcm9ncmVzcyggbmV3RGVmZXIubm90aWZ5IClcblx0XHRcdFx0XHRcdFx0XHRcdFx0LmRvbmUoIG5ld0RlZmVyLnJlc29sdmUgKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHQuZmFpbCggbmV3RGVmZXIucmVqZWN0ICk7XG5cdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRcdG5ld0RlZmVyWyB0dXBsZVsgMCBdICsgXCJXaXRoXCIgXShcblx0XHRcdFx0XHRcdFx0XHRcdFx0dGhpcyxcblx0XHRcdFx0XHRcdFx0XHRcdFx0Zm4gPyBbIHJldHVybmVkIF0gOiBhcmd1bWVudHNcblx0XHRcdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9ICk7XG5cdFx0XHRcdFx0XHR9ICk7XG5cdFx0XHRcdFx0XHRmbnMgPSBudWxsO1xuXHRcdFx0XHRcdH0gKS5wcm9taXNlKCk7XG5cdFx0XHRcdH0sXG5cdFx0XHRcdHRoZW46IGZ1bmN0aW9uKCBvbkZ1bGZpbGxlZCwgb25SZWplY3RlZCwgb25Qcm9ncmVzcyApIHtcblx0XHRcdFx0XHR2YXIgbWF4RGVwdGggPSAwO1xuXHRcdFx0XHRcdGZ1bmN0aW9uIHJlc29sdmUoIGRlcHRoLCBkZWZlcnJlZCwgaGFuZGxlciwgc3BlY2lhbCApIHtcblx0XHRcdFx0XHRcdHJldHVybiBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdFx0dmFyIHRoYXQgPSB0aGlzLFxuXHRcdFx0XHRcdFx0XHRcdGFyZ3MgPSBhcmd1bWVudHMsXG5cdFx0XHRcdFx0XHRcdFx0bWlnaHRUaHJvdyA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0dmFyIHJldHVybmVkLCB0aGVuO1xuXG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBQcm9taXNlcy9BKyBzZWN0aW9uIDIuMy4zLjMuM1xuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gaHR0cHM6Ly9wcm9taXNlc2FwbHVzLmNvbS8jcG9pbnQtNTlcblx0XHRcdFx0XHRcdFx0XHRcdC8vIElnbm9yZSBkb3VibGUtcmVzb2x1dGlvbiBhdHRlbXB0c1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKCBkZXB0aCA8IG1heERlcHRoICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0XHRcdHJldHVybmVkID0gaGFuZGxlci5hcHBseSggdGhhdCwgYXJncyApO1xuXG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBQcm9taXNlcy9BKyBzZWN0aW9uIDIuMy4xXG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBodHRwczovL3Byb21pc2VzYXBsdXMuY29tLyNwb2ludC00OFxuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKCByZXR1cm5lZCA9PT0gZGVmZXJyZWQucHJvbWlzZSgpICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCBcIlRoZW5hYmxlIHNlbGYtcmVzb2x1dGlvblwiICk7XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IFByb21pc2VzL0ErIHNlY3Rpb25zIDIuMy4zLjEsIDMuNVxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gaHR0cHM6Ly9wcm9taXNlc2FwbHVzLmNvbS8jcG9pbnQtNTRcblx0XHRcdFx0XHRcdFx0XHRcdC8vIGh0dHBzOi8vcHJvbWlzZXNhcGx1cy5jb20vI3BvaW50LTc1XG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBSZXRyaWV2ZSBgdGhlbmAgb25seSBvbmNlXG5cdFx0XHRcdFx0XHRcdFx0XHR0aGVuID0gcmV0dXJuZWQgJiZcblxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBQcm9taXNlcy9BKyBzZWN0aW9uIDIuMy40XG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIGh0dHBzOi8vcHJvbWlzZXNhcGx1cy5jb20vI3BvaW50LTY0XG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIE9ubHkgY2hlY2sgb2JqZWN0cyBhbmQgZnVuY3Rpb25zIGZvciB0aGVuYWJpbGl0eVxuXHRcdFx0XHRcdFx0XHRcdFx0XHQoIHR5cGVvZiByZXR1cm5lZCA9PT0gXCJvYmplY3RcIiB8fFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHR5cGVvZiByZXR1cm5lZCA9PT0gXCJmdW5jdGlvblwiICkgJiZcblx0XHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuZWQudGhlbjtcblxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gSGFuZGxlIGEgcmV0dXJuZWQgdGhlbmFibGVcblx0XHRcdFx0XHRcdFx0XHRcdGlmICggaXNGdW5jdGlvbiggdGhlbiApICkge1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIFNwZWNpYWwgcHJvY2Vzc29ycyAobm90aWZ5KSBqdXN0IHdhaXQgZm9yIHJlc29sdXRpb25cblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKCBzcGVjaWFsICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRoZW4uY2FsbChcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJldHVybmVkLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmVzb2x2ZSggbWF4RGVwdGgsIGRlZmVycmVkLCBJZGVudGl0eSwgc3BlY2lhbCApLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmVzb2x2ZSggbWF4RGVwdGgsIGRlZmVycmVkLCBUaHJvd2VyLCBzcGVjaWFsIClcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQpO1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIE5vcm1hbCBwcm9jZXNzb3JzIChyZXNvbHZlKSBhbHNvIGhvb2sgaW50byBwcm9ncmVzc1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gLi4uYW5kIGRpc3JlZ2FyZCBvbGRlciByZXNvbHV0aW9uIHZhbHVlc1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdG1heERlcHRoKys7XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0aGVuLmNhbGwoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm5lZCxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJlc29sdmUoIG1heERlcHRoLCBkZWZlcnJlZCwgSWRlbnRpdHksIHNwZWNpYWwgKSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJlc29sdmUoIG1heERlcHRoLCBkZWZlcnJlZCwgVGhyb3dlciwgc3BlY2lhbCApLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmVzb2x2ZSggbWF4RGVwdGgsIGRlZmVycmVkLCBJZGVudGl0eSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZGVmZXJyZWQubm90aWZ5V2l0aCApXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBIYW5kbGUgYWxsIG90aGVyIHJldHVybmVkIHZhbHVlc1xuXHRcdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBPbmx5IHN1YnN0aXR1dGUgaGFuZGxlcnMgcGFzcyBvbiBjb250ZXh0XG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIGFuZCBtdWx0aXBsZSB2YWx1ZXMgKG5vbi1zcGVjIGJlaGF2aW9yKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoIGhhbmRsZXIgIT09IElkZW50aXR5ICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRoYXQgPSB1bmRlZmluZWQ7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0YXJncyA9IFsgcmV0dXJuZWQgXTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIFByb2Nlc3MgdGhlIHZhbHVlKHMpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIERlZmF1bHQgcHJvY2VzcyBpcyByZXNvbHZlXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCggc3BlY2lhbCB8fCBkZWZlcnJlZC5yZXNvbHZlV2l0aCApKCB0aGF0LCBhcmdzICk7XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0fSxcblxuXHRcdFx0XHRcdFx0XHRcdC8vIE9ubHkgbm9ybWFsIHByb2Nlc3NvcnMgKHJlc29sdmUpIGNhdGNoIGFuZCByZWplY3QgZXhjZXB0aW9uc1xuXHRcdFx0XHRcdFx0XHRcdHByb2Nlc3MgPSBzcGVjaWFsID9cblx0XHRcdFx0XHRcdFx0XHRcdG1pZ2h0VGhyb3cgOlxuXHRcdFx0XHRcdFx0XHRcdFx0ZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0bWlnaHRUaHJvdygpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9IGNhdGNoICggZSApIHtcblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmICggalF1ZXJ5LkRlZmVycmVkLmV4Y2VwdGlvbkhvb2sgKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRqUXVlcnkuRGVmZXJyZWQuZXhjZXB0aW9uSG9vayggZSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cHJvY2Vzcy5zdGFja1RyYWNlICk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gU3VwcG9ydDogUHJvbWlzZXMvQSsgc2VjdGlvbiAyLjMuMy4zLjQuMVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vIGh0dHBzOi8vcHJvbWlzZXNhcGx1cy5jb20vI3BvaW50LTYxXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gSWdub3JlIHBvc3QtcmVzb2x1dGlvbiBleGNlcHRpb25zXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKCBkZXB0aCArIDEgPj0gbWF4RGVwdGggKSB7XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vIE9ubHkgc3Vic3RpdHV0ZSBoYW5kbGVycyBwYXNzIG9uIGNvbnRleHRcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vIGFuZCBtdWx0aXBsZSB2YWx1ZXMgKG5vbi1zcGVjIGJlaGF2aW9yKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKCBoYW5kbGVyICE9PSBUaHJvd2VyICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0aGF0ID0gdW5kZWZpbmVkO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRhcmdzID0gWyBlIF07XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGRlZmVycmVkLnJlamVjdFdpdGgoIHRoYXQsIGFyZ3MgKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdH07XG5cblx0XHRcdFx0XHRcdFx0Ly8gU3VwcG9ydDogUHJvbWlzZXMvQSsgc2VjdGlvbiAyLjMuMy4zLjFcblx0XHRcdFx0XHRcdFx0Ly8gaHR0cHM6Ly9wcm9taXNlc2FwbHVzLmNvbS8jcG9pbnQtNTdcblx0XHRcdFx0XHRcdFx0Ly8gUmUtcmVzb2x2ZSBwcm9taXNlcyBpbW1lZGlhdGVseSB0byBkb2RnZSBmYWxzZSByZWplY3Rpb24gZnJvbVxuXHRcdFx0XHRcdFx0XHQvLyBzdWJzZXF1ZW50IGVycm9yc1xuXHRcdFx0XHRcdFx0XHRpZiAoIGRlcHRoICkge1xuXHRcdFx0XHRcdFx0XHRcdHByb2Nlc3MoKTtcblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRcdFx0XHRcdC8vIENhbGwgYW4gb3B0aW9uYWwgaG9vayB0byByZWNvcmQgdGhlIHN0YWNrLCBpbiBjYXNlIG9mIGV4Y2VwdGlvblxuXHRcdFx0XHRcdFx0XHRcdC8vIHNpbmNlIGl0J3Mgb3RoZXJ3aXNlIGxvc3Qgd2hlbiBleGVjdXRpb24gZ29lcyBhc3luY1xuXHRcdFx0XHRcdFx0XHRcdGlmICggalF1ZXJ5LkRlZmVycmVkLmdldFN0YWNrSG9vayApIHtcblx0XHRcdFx0XHRcdFx0XHRcdHByb2Nlc3Muc3RhY2tUcmFjZSA9IGpRdWVyeS5EZWZlcnJlZC5nZXRTdGFja0hvb2soKTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0d2luZG93LnNldFRpbWVvdXQoIHByb2Nlc3MgKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRyZXR1cm4galF1ZXJ5LkRlZmVycmVkKCBmdW5jdGlvbiggbmV3RGVmZXIgKSB7XG5cblx0XHRcdFx0XHRcdC8vIHByb2dyZXNzX2hhbmRsZXJzLmFkZCggLi4uIClcblx0XHRcdFx0XHRcdHR1cGxlc1sgMCBdWyAzIF0uYWRkKFxuXHRcdFx0XHRcdFx0XHRyZXNvbHZlKFxuXHRcdFx0XHRcdFx0XHRcdDAsXG5cdFx0XHRcdFx0XHRcdFx0bmV3RGVmZXIsXG5cdFx0XHRcdFx0XHRcdFx0aXNGdW5jdGlvbiggb25Qcm9ncmVzcyApID9cblx0XHRcdFx0XHRcdFx0XHRcdG9uUHJvZ3Jlc3MgOlxuXHRcdFx0XHRcdFx0XHRcdFx0SWRlbnRpdHksXG5cdFx0XHRcdFx0XHRcdFx0bmV3RGVmZXIubm90aWZ5V2l0aFxuXHRcdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0XHQpO1xuXG5cdFx0XHRcdFx0XHQvLyBmdWxmaWxsZWRfaGFuZGxlcnMuYWRkKCAuLi4gKVxuXHRcdFx0XHRcdFx0dHVwbGVzWyAxIF1bIDMgXS5hZGQoXG5cdFx0XHRcdFx0XHRcdHJlc29sdmUoXG5cdFx0XHRcdFx0XHRcdFx0MCxcblx0XHRcdFx0XHRcdFx0XHRuZXdEZWZlcixcblx0XHRcdFx0XHRcdFx0XHRpc0Z1bmN0aW9uKCBvbkZ1bGZpbGxlZCApID9cblx0XHRcdFx0XHRcdFx0XHRcdG9uRnVsZmlsbGVkIDpcblx0XHRcdFx0XHRcdFx0XHRcdElkZW50aXR5XG5cdFx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHRcdCk7XG5cblx0XHRcdFx0XHRcdC8vIHJlamVjdGVkX2hhbmRsZXJzLmFkZCggLi4uIClcblx0XHRcdFx0XHRcdHR1cGxlc1sgMiBdWyAzIF0uYWRkKFxuXHRcdFx0XHRcdFx0XHRyZXNvbHZlKFxuXHRcdFx0XHRcdFx0XHRcdDAsXG5cdFx0XHRcdFx0XHRcdFx0bmV3RGVmZXIsXG5cdFx0XHRcdFx0XHRcdFx0aXNGdW5jdGlvbiggb25SZWplY3RlZCApID9cblx0XHRcdFx0XHRcdFx0XHRcdG9uUmVqZWN0ZWQgOlxuXHRcdFx0XHRcdFx0XHRcdFx0VGhyb3dlclxuXHRcdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdH0gKS5wcm9taXNlKCk7XG5cdFx0XHRcdH0sXG5cblx0XHRcdFx0Ly8gR2V0IGEgcHJvbWlzZSBmb3IgdGhpcyBkZWZlcnJlZFxuXHRcdFx0XHQvLyBJZiBvYmogaXMgcHJvdmlkZWQsIHRoZSBwcm9taXNlIGFzcGVjdCBpcyBhZGRlZCB0byB0aGUgb2JqZWN0XG5cdFx0XHRcdHByb21pc2U6IGZ1bmN0aW9uKCBvYmogKSB7XG5cdFx0XHRcdFx0cmV0dXJuIG9iaiAhPSBudWxsID8galF1ZXJ5LmV4dGVuZCggb2JqLCBwcm9taXNlICkgOiBwcm9taXNlO1xuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0ZGVmZXJyZWQgPSB7fTtcblxuXHRcdC8vIEFkZCBsaXN0LXNwZWNpZmljIG1ldGhvZHNcblx0XHRqUXVlcnkuZWFjaCggdHVwbGVzLCBmdW5jdGlvbiggaSwgdHVwbGUgKSB7XG5cdFx0XHR2YXIgbGlzdCA9IHR1cGxlWyAyIF0sXG5cdFx0XHRcdHN0YXRlU3RyaW5nID0gdHVwbGVbIDUgXTtcblxuXHRcdFx0Ly8gcHJvbWlzZS5wcm9ncmVzcyA9IGxpc3QuYWRkXG5cdFx0XHQvLyBwcm9taXNlLmRvbmUgPSBsaXN0LmFkZFxuXHRcdFx0Ly8gcHJvbWlzZS5mYWlsID0gbGlzdC5hZGRcblx0XHRcdHByb21pc2VbIHR1cGxlWyAxIF0gXSA9IGxpc3QuYWRkO1xuXG5cdFx0XHQvLyBIYW5kbGUgc3RhdGVcblx0XHRcdGlmICggc3RhdGVTdHJpbmcgKSB7XG5cdFx0XHRcdGxpc3QuYWRkKFxuXHRcdFx0XHRcdGZ1bmN0aW9uKCkge1xuXG5cdFx0XHRcdFx0XHQvLyBzdGF0ZSA9IFwicmVzb2x2ZWRcIiAoaS5lLiwgZnVsZmlsbGVkKVxuXHRcdFx0XHRcdFx0Ly8gc3RhdGUgPSBcInJlamVjdGVkXCJcblx0XHRcdFx0XHRcdHN0YXRlID0gc3RhdGVTdHJpbmc7XG5cdFx0XHRcdFx0fSxcblxuXHRcdFx0XHRcdC8vIHJlamVjdGVkX2NhbGxiYWNrcy5kaXNhYmxlXG5cdFx0XHRcdFx0Ly8gZnVsZmlsbGVkX2NhbGxiYWNrcy5kaXNhYmxlXG5cdFx0XHRcdFx0dHVwbGVzWyAzIC0gaSBdWyAyIF0uZGlzYWJsZSxcblxuXHRcdFx0XHRcdC8vIHJlamVjdGVkX2hhbmRsZXJzLmRpc2FibGVcblx0XHRcdFx0XHQvLyBmdWxmaWxsZWRfaGFuZGxlcnMuZGlzYWJsZVxuXHRcdFx0XHRcdHR1cGxlc1sgMyAtIGkgXVsgMyBdLmRpc2FibGUsXG5cblx0XHRcdFx0XHQvLyBwcm9ncmVzc19jYWxsYmFja3MubG9ja1xuXHRcdFx0XHRcdHR1cGxlc1sgMCBdWyAyIF0ubG9jayxcblxuXHRcdFx0XHRcdC8vIHByb2dyZXNzX2hhbmRsZXJzLmxvY2tcblx0XHRcdFx0XHR0dXBsZXNbIDAgXVsgMyBdLmxvY2tcblx0XHRcdFx0KTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gcHJvZ3Jlc3NfaGFuZGxlcnMuZmlyZVxuXHRcdFx0Ly8gZnVsZmlsbGVkX2hhbmRsZXJzLmZpcmVcblx0XHRcdC8vIHJlamVjdGVkX2hhbmRsZXJzLmZpcmVcblx0XHRcdGxpc3QuYWRkKCB0dXBsZVsgMyBdLmZpcmUgKTtcblxuXHRcdFx0Ly8gZGVmZXJyZWQubm90aWZ5ID0gZnVuY3Rpb24oKSB7IGRlZmVycmVkLm5vdGlmeVdpdGgoLi4uKSB9XG5cdFx0XHQvLyBkZWZlcnJlZC5yZXNvbHZlID0gZnVuY3Rpb24oKSB7IGRlZmVycmVkLnJlc29sdmVXaXRoKC4uLikgfVxuXHRcdFx0Ly8gZGVmZXJyZWQucmVqZWN0ID0gZnVuY3Rpb24oKSB7IGRlZmVycmVkLnJlamVjdFdpdGgoLi4uKSB9XG5cdFx0XHRkZWZlcnJlZFsgdHVwbGVbIDAgXSBdID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGRlZmVycmVkWyB0dXBsZVsgMCBdICsgXCJXaXRoXCIgXSggdGhpcyA9PT0gZGVmZXJyZWQgPyB1bmRlZmluZWQgOiB0aGlzLCBhcmd1bWVudHMgKTtcblx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHR9O1xuXG5cdFx0XHQvLyBkZWZlcnJlZC5ub3RpZnlXaXRoID0gbGlzdC5maXJlV2l0aFxuXHRcdFx0Ly8gZGVmZXJyZWQucmVzb2x2ZVdpdGggPSBsaXN0LmZpcmVXaXRoXG5cdFx0XHQvLyBkZWZlcnJlZC5yZWplY3RXaXRoID0gbGlzdC5maXJlV2l0aFxuXHRcdFx0ZGVmZXJyZWRbIHR1cGxlWyAwIF0gKyBcIldpdGhcIiBdID0gbGlzdC5maXJlV2l0aDtcblx0XHR9ICk7XG5cblx0XHQvLyBNYWtlIHRoZSBkZWZlcnJlZCBhIHByb21pc2Vcblx0XHRwcm9taXNlLnByb21pc2UoIGRlZmVycmVkICk7XG5cblx0XHQvLyBDYWxsIGdpdmVuIGZ1bmMgaWYgYW55XG5cdFx0aWYgKCBmdW5jICkge1xuXHRcdFx0ZnVuYy5jYWxsKCBkZWZlcnJlZCwgZGVmZXJyZWQgKTtcblx0XHR9XG5cblx0XHQvLyBBbGwgZG9uZSFcblx0XHRyZXR1cm4gZGVmZXJyZWQ7XG5cdH0sXG5cblx0Ly8gRGVmZXJyZWQgaGVscGVyXG5cdHdoZW46IGZ1bmN0aW9uKCBzaW5nbGVWYWx1ZSApIHtcblx0XHR2YXJcblxuXHRcdFx0Ly8gY291bnQgb2YgdW5jb21wbGV0ZWQgc3Vib3JkaW5hdGVzXG5cdFx0XHRyZW1haW5pbmcgPSBhcmd1bWVudHMubGVuZ3RoLFxuXG5cdFx0XHQvLyBjb3VudCBvZiB1bnByb2Nlc3NlZCBhcmd1bWVudHNcblx0XHRcdGkgPSByZW1haW5pbmcsXG5cblx0XHRcdC8vIHN1Ym9yZGluYXRlIGZ1bGZpbGxtZW50IGRhdGFcblx0XHRcdHJlc29sdmVDb250ZXh0cyA9IEFycmF5KCBpICksXG5cdFx0XHRyZXNvbHZlVmFsdWVzID0gc2xpY2UuY2FsbCggYXJndW1lbnRzICksXG5cblx0XHRcdC8vIHRoZSBtYXN0ZXIgRGVmZXJyZWRcblx0XHRcdG1hc3RlciA9IGpRdWVyeS5EZWZlcnJlZCgpLFxuXG5cdFx0XHQvLyBzdWJvcmRpbmF0ZSBjYWxsYmFjayBmYWN0b3J5XG5cdFx0XHR1cGRhdGVGdW5jID0gZnVuY3Rpb24oIGkgKSB7XG5cdFx0XHRcdHJldHVybiBmdW5jdGlvbiggdmFsdWUgKSB7XG5cdFx0XHRcdFx0cmVzb2x2ZUNvbnRleHRzWyBpIF0gPSB0aGlzO1xuXHRcdFx0XHRcdHJlc29sdmVWYWx1ZXNbIGkgXSA9IGFyZ3VtZW50cy5sZW5ndGggPiAxID8gc2xpY2UuY2FsbCggYXJndW1lbnRzICkgOiB2YWx1ZTtcblx0XHRcdFx0XHRpZiAoICEoIC0tcmVtYWluaW5nICkgKSB7XG5cdFx0XHRcdFx0XHRtYXN0ZXIucmVzb2x2ZVdpdGgoIHJlc29sdmVDb250ZXh0cywgcmVzb2x2ZVZhbHVlcyApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fTtcblx0XHRcdH07XG5cblx0XHQvLyBTaW5nbGUtIGFuZCBlbXB0eSBhcmd1bWVudHMgYXJlIGFkb3B0ZWQgbGlrZSBQcm9taXNlLnJlc29sdmVcblx0XHRpZiAoIHJlbWFpbmluZyA8PSAxICkge1xuXHRcdFx0YWRvcHRWYWx1ZSggc2luZ2xlVmFsdWUsIG1hc3Rlci5kb25lKCB1cGRhdGVGdW5jKCBpICkgKS5yZXNvbHZlLCBtYXN0ZXIucmVqZWN0LFxuXHRcdFx0XHQhcmVtYWluaW5nICk7XG5cblx0XHRcdC8vIFVzZSAudGhlbigpIHRvIHVud3JhcCBzZWNvbmRhcnkgdGhlbmFibGVzIChjZi4gZ2gtMzAwMClcblx0XHRcdGlmICggbWFzdGVyLnN0YXRlKCkgPT09IFwicGVuZGluZ1wiIHx8XG5cdFx0XHRcdGlzRnVuY3Rpb24oIHJlc29sdmVWYWx1ZXNbIGkgXSAmJiByZXNvbHZlVmFsdWVzWyBpIF0udGhlbiApICkge1xuXG5cdFx0XHRcdHJldHVybiBtYXN0ZXIudGhlbigpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIE11bHRpcGxlIGFyZ3VtZW50cyBhcmUgYWdncmVnYXRlZCBsaWtlIFByb21pc2UuYWxsIGFycmF5IGVsZW1lbnRzXG5cdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHRhZG9wdFZhbHVlKCByZXNvbHZlVmFsdWVzWyBpIF0sIHVwZGF0ZUZ1bmMoIGkgKSwgbWFzdGVyLnJlamVjdCApO1xuXHRcdH1cblxuXHRcdHJldHVybiBtYXN0ZXIucHJvbWlzZSgpO1xuXHR9XG59ICk7XG5cblxuLy8gVGhlc2UgdXN1YWxseSBpbmRpY2F0ZSBhIHByb2dyYW1tZXIgbWlzdGFrZSBkdXJpbmcgZGV2ZWxvcG1lbnQsXG4vLyB3YXJuIGFib3V0IHRoZW0gQVNBUCByYXRoZXIgdGhhbiBzd2FsbG93aW5nIHRoZW0gYnkgZGVmYXVsdC5cbnZhciByZXJyb3JOYW1lcyA9IC9eKEV2YWx8SW50ZXJuYWx8UmFuZ2V8UmVmZXJlbmNlfFN5bnRheHxUeXBlfFVSSSlFcnJvciQvO1xuXG5qUXVlcnkuRGVmZXJyZWQuZXhjZXB0aW9uSG9vayA9IGZ1bmN0aW9uKCBlcnJvciwgc3RhY2sgKSB7XG5cblx0Ly8gU3VwcG9ydDogSUUgOCAtIDkgb25seVxuXHQvLyBDb25zb2xlIGV4aXN0cyB3aGVuIGRldiB0b29scyBhcmUgb3Blbiwgd2hpY2ggY2FuIGhhcHBlbiBhdCBhbnkgdGltZVxuXHRpZiAoIHdpbmRvdy5jb25zb2xlICYmIHdpbmRvdy5jb25zb2xlLndhcm4gJiYgZXJyb3IgJiYgcmVycm9yTmFtZXMudGVzdCggZXJyb3IubmFtZSApICkge1xuXHRcdHdpbmRvdy5jb25zb2xlLndhcm4oIFwialF1ZXJ5LkRlZmVycmVkIGV4Y2VwdGlvbjogXCIgKyBlcnJvci5tZXNzYWdlLCBlcnJvci5zdGFjaywgc3RhY2sgKTtcblx0fVxufTtcblxuXG5cblxualF1ZXJ5LnJlYWR5RXhjZXB0aW9uID0gZnVuY3Rpb24oIGVycm9yICkge1xuXHR3aW5kb3cuc2V0VGltZW91dCggZnVuY3Rpb24oKSB7XG5cdFx0dGhyb3cgZXJyb3I7XG5cdH0gKTtcbn07XG5cblxuXG5cbi8vIFRoZSBkZWZlcnJlZCB1c2VkIG9uIERPTSByZWFkeVxudmFyIHJlYWR5TGlzdCA9IGpRdWVyeS5EZWZlcnJlZCgpO1xuXG5qUXVlcnkuZm4ucmVhZHkgPSBmdW5jdGlvbiggZm4gKSB7XG5cblx0cmVhZHlMaXN0XG5cdFx0LnRoZW4oIGZuIClcblxuXHRcdC8vIFdyYXAgalF1ZXJ5LnJlYWR5RXhjZXB0aW9uIGluIGEgZnVuY3Rpb24gc28gdGhhdCB0aGUgbG9va3VwXG5cdFx0Ly8gaGFwcGVucyBhdCB0aGUgdGltZSBvZiBlcnJvciBoYW5kbGluZyBpbnN0ZWFkIG9mIGNhbGxiYWNrXG5cdFx0Ly8gcmVnaXN0cmF0aW9uLlxuXHRcdC5jYXRjaCggZnVuY3Rpb24oIGVycm9yICkge1xuXHRcdFx0alF1ZXJ5LnJlYWR5RXhjZXB0aW9uKCBlcnJvciApO1xuXHRcdH0gKTtcblxuXHRyZXR1cm4gdGhpcztcbn07XG5cbmpRdWVyeS5leHRlbmQoIHtcblxuXHQvLyBJcyB0aGUgRE9NIHJlYWR5IHRvIGJlIHVzZWQ/IFNldCB0byB0cnVlIG9uY2UgaXQgb2NjdXJzLlxuXHRpc1JlYWR5OiBmYWxzZSxcblxuXHQvLyBBIGNvdW50ZXIgdG8gdHJhY2sgaG93IG1hbnkgaXRlbXMgdG8gd2FpdCBmb3IgYmVmb3JlXG5cdC8vIHRoZSByZWFkeSBldmVudCBmaXJlcy4gU2VlICM2NzgxXG5cdHJlYWR5V2FpdDogMSxcblxuXHQvLyBIYW5kbGUgd2hlbiB0aGUgRE9NIGlzIHJlYWR5XG5cdHJlYWR5OiBmdW5jdGlvbiggd2FpdCApIHtcblxuXHRcdC8vIEFib3J0IGlmIHRoZXJlIGFyZSBwZW5kaW5nIGhvbGRzIG9yIHdlJ3JlIGFscmVhZHkgcmVhZHlcblx0XHRpZiAoIHdhaXQgPT09IHRydWUgPyAtLWpRdWVyeS5yZWFkeVdhaXQgOiBqUXVlcnkuaXNSZWFkeSApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBSZW1lbWJlciB0aGF0IHRoZSBET00gaXMgcmVhZHlcblx0XHRqUXVlcnkuaXNSZWFkeSA9IHRydWU7XG5cblx0XHQvLyBJZiBhIG5vcm1hbCBET00gUmVhZHkgZXZlbnQgZmlyZWQsIGRlY3JlbWVudCwgYW5kIHdhaXQgaWYgbmVlZCBiZVxuXHRcdGlmICggd2FpdCAhPT0gdHJ1ZSAmJiAtLWpRdWVyeS5yZWFkeVdhaXQgPiAwICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIElmIHRoZXJlIGFyZSBmdW5jdGlvbnMgYm91bmQsIHRvIGV4ZWN1dGVcblx0XHRyZWFkeUxpc3QucmVzb2x2ZVdpdGgoIGRvY3VtZW50LCBbIGpRdWVyeSBdICk7XG5cdH1cbn0gKTtcblxualF1ZXJ5LnJlYWR5LnRoZW4gPSByZWFkeUxpc3QudGhlbjtcblxuLy8gVGhlIHJlYWR5IGV2ZW50IGhhbmRsZXIgYW5kIHNlbGYgY2xlYW51cCBtZXRob2RcbmZ1bmN0aW9uIGNvbXBsZXRlZCgpIHtcblx0ZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lciggXCJET01Db250ZW50TG9hZGVkXCIsIGNvbXBsZXRlZCApO1xuXHR3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lciggXCJsb2FkXCIsIGNvbXBsZXRlZCApO1xuXHRqUXVlcnkucmVhZHkoKTtcbn1cblxuLy8gQ2F0Y2ggY2FzZXMgd2hlcmUgJChkb2N1bWVudCkucmVhZHkoKSBpcyBjYWxsZWRcbi8vIGFmdGVyIHRoZSBicm93c2VyIGV2ZW50IGhhcyBhbHJlYWR5IG9jY3VycmVkLlxuLy8gU3VwcG9ydDogSUUgPD05IC0gMTAgb25seVxuLy8gT2xkZXIgSUUgc29tZXRpbWVzIHNpZ25hbHMgXCJpbnRlcmFjdGl2ZVwiIHRvbyBzb29uXG5pZiAoIGRvY3VtZW50LnJlYWR5U3RhdGUgPT09IFwiY29tcGxldGVcIiB8fFxuXHQoIGRvY3VtZW50LnJlYWR5U3RhdGUgIT09IFwibG9hZGluZ1wiICYmICFkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuZG9TY3JvbGwgKSApIHtcblxuXHQvLyBIYW5kbGUgaXQgYXN5bmNocm9ub3VzbHkgdG8gYWxsb3cgc2NyaXB0cyB0aGUgb3Bwb3J0dW5pdHkgdG8gZGVsYXkgcmVhZHlcblx0d2luZG93LnNldFRpbWVvdXQoIGpRdWVyeS5yZWFkeSApO1xuXG59IGVsc2Uge1xuXG5cdC8vIFVzZSB0aGUgaGFuZHkgZXZlbnQgY2FsbGJhY2tcblx0ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lciggXCJET01Db250ZW50TG9hZGVkXCIsIGNvbXBsZXRlZCApO1xuXG5cdC8vIEEgZmFsbGJhY2sgdG8gd2luZG93Lm9ubG9hZCwgdGhhdCB3aWxsIGFsd2F5cyB3b3JrXG5cdHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCBcImxvYWRcIiwgY29tcGxldGVkICk7XG59XG5cblxuXG5cbi8vIE11bHRpZnVuY3Rpb25hbCBtZXRob2QgdG8gZ2V0IGFuZCBzZXQgdmFsdWVzIG9mIGEgY29sbGVjdGlvblxuLy8gVGhlIHZhbHVlL3MgY2FuIG9wdGlvbmFsbHkgYmUgZXhlY3V0ZWQgaWYgaXQncyBhIGZ1bmN0aW9uXG52YXIgYWNjZXNzID0gZnVuY3Rpb24oIGVsZW1zLCBmbiwga2V5LCB2YWx1ZSwgY2hhaW5hYmxlLCBlbXB0eUdldCwgcmF3ICkge1xuXHR2YXIgaSA9IDAsXG5cdFx0bGVuID0gZWxlbXMubGVuZ3RoLFxuXHRcdGJ1bGsgPSBrZXkgPT0gbnVsbDtcblxuXHQvLyBTZXRzIG1hbnkgdmFsdWVzXG5cdGlmICggdG9UeXBlKCBrZXkgKSA9PT0gXCJvYmplY3RcIiApIHtcblx0XHRjaGFpbmFibGUgPSB0cnVlO1xuXHRcdGZvciAoIGkgaW4ga2V5ICkge1xuXHRcdFx0YWNjZXNzKCBlbGVtcywgZm4sIGksIGtleVsgaSBdLCB0cnVlLCBlbXB0eUdldCwgcmF3ICk7XG5cdFx0fVxuXG5cdC8vIFNldHMgb25lIHZhbHVlXG5cdH0gZWxzZSBpZiAoIHZhbHVlICE9PSB1bmRlZmluZWQgKSB7XG5cdFx0Y2hhaW5hYmxlID0gdHJ1ZTtcblxuXHRcdGlmICggIWlzRnVuY3Rpb24oIHZhbHVlICkgKSB7XG5cdFx0XHRyYXcgPSB0cnVlO1xuXHRcdH1cblxuXHRcdGlmICggYnVsayApIHtcblxuXHRcdFx0Ly8gQnVsayBvcGVyYXRpb25zIHJ1biBhZ2FpbnN0IHRoZSBlbnRpcmUgc2V0XG5cdFx0XHRpZiAoIHJhdyApIHtcblx0XHRcdFx0Zm4uY2FsbCggZWxlbXMsIHZhbHVlICk7XG5cdFx0XHRcdGZuID0gbnVsbDtcblxuXHRcdFx0Ly8gLi4uZXhjZXB0IHdoZW4gZXhlY3V0aW5nIGZ1bmN0aW9uIHZhbHVlc1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0YnVsayA9IGZuO1xuXHRcdFx0XHRmbiA9IGZ1bmN0aW9uKCBlbGVtLCBrZXksIHZhbHVlICkge1xuXHRcdFx0XHRcdHJldHVybiBidWxrLmNhbGwoIGpRdWVyeSggZWxlbSApLCB2YWx1ZSApO1xuXHRcdFx0XHR9O1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmICggZm4gKSB7XG5cdFx0XHRmb3IgKCA7IGkgPCBsZW47IGkrKyApIHtcblx0XHRcdFx0Zm4oXG5cdFx0XHRcdFx0ZWxlbXNbIGkgXSwga2V5LCByYXcgP1xuXHRcdFx0XHRcdHZhbHVlIDpcblx0XHRcdFx0XHR2YWx1ZS5jYWxsKCBlbGVtc1sgaSBdLCBpLCBmbiggZWxlbXNbIGkgXSwga2V5ICkgKVxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGlmICggY2hhaW5hYmxlICkge1xuXHRcdHJldHVybiBlbGVtcztcblx0fVxuXG5cdC8vIEdldHNcblx0aWYgKCBidWxrICkge1xuXHRcdHJldHVybiBmbi5jYWxsKCBlbGVtcyApO1xuXHR9XG5cblx0cmV0dXJuIGxlbiA/IGZuKCBlbGVtc1sgMCBdLCBrZXkgKSA6IGVtcHR5R2V0O1xufTtcblxuXG4vLyBNYXRjaGVzIGRhc2hlZCBzdHJpbmcgZm9yIGNhbWVsaXppbmdcbnZhciBybXNQcmVmaXggPSAvXi1tcy0vLFxuXHRyZGFzaEFscGhhID0gLy0oW2Etel0pL2c7XG5cbi8vIFVzZWQgYnkgY2FtZWxDYXNlIGFzIGNhbGxiYWNrIHRvIHJlcGxhY2UoKVxuZnVuY3Rpb24gZmNhbWVsQ2FzZSggYWxsLCBsZXR0ZXIgKSB7XG5cdHJldHVybiBsZXR0ZXIudG9VcHBlckNhc2UoKTtcbn1cblxuLy8gQ29udmVydCBkYXNoZWQgdG8gY2FtZWxDYXNlOyB1c2VkIGJ5IHRoZSBjc3MgYW5kIGRhdGEgbW9kdWxlc1xuLy8gU3VwcG9ydDogSUUgPD05IC0gMTEsIEVkZ2UgMTIgLSAxNVxuLy8gTWljcm9zb2Z0IGZvcmdvdCB0byBodW1wIHRoZWlyIHZlbmRvciBwcmVmaXggKCM5NTcyKVxuZnVuY3Rpb24gY2FtZWxDYXNlKCBzdHJpbmcgKSB7XG5cdHJldHVybiBzdHJpbmcucmVwbGFjZSggcm1zUHJlZml4LCBcIm1zLVwiICkucmVwbGFjZSggcmRhc2hBbHBoYSwgZmNhbWVsQ2FzZSApO1xufVxudmFyIGFjY2VwdERhdGEgPSBmdW5jdGlvbiggb3duZXIgKSB7XG5cblx0Ly8gQWNjZXB0cyBvbmx5OlxuXHQvLyAgLSBOb2RlXG5cdC8vICAgIC0gTm9kZS5FTEVNRU5UX05PREVcblx0Ly8gICAgLSBOb2RlLkRPQ1VNRU5UX05PREVcblx0Ly8gIC0gT2JqZWN0XG5cdC8vICAgIC0gQW55XG5cdHJldHVybiBvd25lci5ub2RlVHlwZSA9PT0gMSB8fCBvd25lci5ub2RlVHlwZSA9PT0gOSB8fCAhKCArb3duZXIubm9kZVR5cGUgKTtcbn07XG5cblxuXG5cbmZ1bmN0aW9uIERhdGEoKSB7XG5cdHRoaXMuZXhwYW5kbyA9IGpRdWVyeS5leHBhbmRvICsgRGF0YS51aWQrKztcbn1cblxuRGF0YS51aWQgPSAxO1xuXG5EYXRhLnByb3RvdHlwZSA9IHtcblxuXHRjYWNoZTogZnVuY3Rpb24oIG93bmVyICkge1xuXG5cdFx0Ly8gQ2hlY2sgaWYgdGhlIG93bmVyIG9iamVjdCBhbHJlYWR5IGhhcyBhIGNhY2hlXG5cdFx0dmFyIHZhbHVlID0gb3duZXJbIHRoaXMuZXhwYW5kbyBdO1xuXG5cdFx0Ly8gSWYgbm90LCBjcmVhdGUgb25lXG5cdFx0aWYgKCAhdmFsdWUgKSB7XG5cdFx0XHR2YWx1ZSA9IHt9O1xuXG5cdFx0XHQvLyBXZSBjYW4gYWNjZXB0IGRhdGEgZm9yIG5vbi1lbGVtZW50IG5vZGVzIGluIG1vZGVybiBicm93c2Vycyxcblx0XHRcdC8vIGJ1dCB3ZSBzaG91bGQgbm90LCBzZWUgIzgzMzUuXG5cdFx0XHQvLyBBbHdheXMgcmV0dXJuIGFuIGVtcHR5IG9iamVjdC5cblx0XHRcdGlmICggYWNjZXB0RGF0YSggb3duZXIgKSApIHtcblxuXHRcdFx0XHQvLyBJZiBpdCBpcyBhIG5vZGUgdW5saWtlbHkgdG8gYmUgc3RyaW5naWZ5LWVkIG9yIGxvb3BlZCBvdmVyXG5cdFx0XHRcdC8vIHVzZSBwbGFpbiBhc3NpZ25tZW50XG5cdFx0XHRcdGlmICggb3duZXIubm9kZVR5cGUgKSB7XG5cdFx0XHRcdFx0b3duZXJbIHRoaXMuZXhwYW5kbyBdID0gdmFsdWU7XG5cblx0XHRcdFx0Ly8gT3RoZXJ3aXNlIHNlY3VyZSBpdCBpbiBhIG5vbi1lbnVtZXJhYmxlIHByb3BlcnR5XG5cdFx0XHRcdC8vIGNvbmZpZ3VyYWJsZSBtdXN0IGJlIHRydWUgdG8gYWxsb3cgdGhlIHByb3BlcnR5IHRvIGJlXG5cdFx0XHRcdC8vIGRlbGV0ZWQgd2hlbiBkYXRhIGlzIHJlbW92ZWRcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoIG93bmVyLCB0aGlzLmV4cGFuZG8sIHtcblx0XHRcdFx0XHRcdHZhbHVlOiB2YWx1ZSxcblx0XHRcdFx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZVxuXHRcdFx0XHRcdH0gKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiB2YWx1ZTtcblx0fSxcblx0c2V0OiBmdW5jdGlvbiggb3duZXIsIGRhdGEsIHZhbHVlICkge1xuXHRcdHZhciBwcm9wLFxuXHRcdFx0Y2FjaGUgPSB0aGlzLmNhY2hlKCBvd25lciApO1xuXG5cdFx0Ly8gSGFuZGxlOiBbIG93bmVyLCBrZXksIHZhbHVlIF0gYXJnc1xuXHRcdC8vIEFsd2F5cyB1c2UgY2FtZWxDYXNlIGtleSAoZ2gtMjI1Nylcblx0XHRpZiAoIHR5cGVvZiBkYXRhID09PSBcInN0cmluZ1wiICkge1xuXHRcdFx0Y2FjaGVbIGNhbWVsQ2FzZSggZGF0YSApIF0gPSB2YWx1ZTtcblxuXHRcdC8vIEhhbmRsZTogWyBvd25lciwgeyBwcm9wZXJ0aWVzIH0gXSBhcmdzXG5cdFx0fSBlbHNlIHtcblxuXHRcdFx0Ly8gQ29weSB0aGUgcHJvcGVydGllcyBvbmUtYnktb25lIHRvIHRoZSBjYWNoZSBvYmplY3Rcblx0XHRcdGZvciAoIHByb3AgaW4gZGF0YSApIHtcblx0XHRcdFx0Y2FjaGVbIGNhbWVsQ2FzZSggcHJvcCApIF0gPSBkYXRhWyBwcm9wIF07XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBjYWNoZTtcblx0fSxcblx0Z2V0OiBmdW5jdGlvbiggb3duZXIsIGtleSApIHtcblx0XHRyZXR1cm4ga2V5ID09PSB1bmRlZmluZWQgP1xuXHRcdFx0dGhpcy5jYWNoZSggb3duZXIgKSA6XG5cblx0XHRcdC8vIEFsd2F5cyB1c2UgY2FtZWxDYXNlIGtleSAoZ2gtMjI1Nylcblx0XHRcdG93bmVyWyB0aGlzLmV4cGFuZG8gXSAmJiBvd25lclsgdGhpcy5leHBhbmRvIF1bIGNhbWVsQ2FzZSgga2V5ICkgXTtcblx0fSxcblx0YWNjZXNzOiBmdW5jdGlvbiggb3duZXIsIGtleSwgdmFsdWUgKSB7XG5cblx0XHQvLyBJbiBjYXNlcyB3aGVyZSBlaXRoZXI6XG5cdFx0Ly9cblx0XHQvLyAgIDEuIE5vIGtleSB3YXMgc3BlY2lmaWVkXG5cdFx0Ly8gICAyLiBBIHN0cmluZyBrZXkgd2FzIHNwZWNpZmllZCwgYnV0IG5vIHZhbHVlIHByb3ZpZGVkXG5cdFx0Ly9cblx0XHQvLyBUYWtlIHRoZSBcInJlYWRcIiBwYXRoIGFuZCBhbGxvdyB0aGUgZ2V0IG1ldGhvZCB0byBkZXRlcm1pbmVcblx0XHQvLyB3aGljaCB2YWx1ZSB0byByZXR1cm4sIHJlc3BlY3RpdmVseSBlaXRoZXI6XG5cdFx0Ly9cblx0XHQvLyAgIDEuIFRoZSBlbnRpcmUgY2FjaGUgb2JqZWN0XG5cdFx0Ly8gICAyLiBUaGUgZGF0YSBzdG9yZWQgYXQgdGhlIGtleVxuXHRcdC8vXG5cdFx0aWYgKCBrZXkgPT09IHVuZGVmaW5lZCB8fFxuXHRcdFx0XHQoICgga2V5ICYmIHR5cGVvZiBrZXkgPT09IFwic3RyaW5nXCIgKSAmJiB2YWx1ZSA9PT0gdW5kZWZpbmVkICkgKSB7XG5cblx0XHRcdHJldHVybiB0aGlzLmdldCggb3duZXIsIGtleSApO1xuXHRcdH1cblxuXHRcdC8vIFdoZW4gdGhlIGtleSBpcyBub3QgYSBzdHJpbmcsIG9yIGJvdGggYSBrZXkgYW5kIHZhbHVlXG5cdFx0Ly8gYXJlIHNwZWNpZmllZCwgc2V0IG9yIGV4dGVuZCAoZXhpc3Rpbmcgb2JqZWN0cykgd2l0aCBlaXRoZXI6XG5cdFx0Ly9cblx0XHQvLyAgIDEuIEFuIG9iamVjdCBvZiBwcm9wZXJ0aWVzXG5cdFx0Ly8gICAyLiBBIGtleSBhbmQgdmFsdWVcblx0XHQvL1xuXHRcdHRoaXMuc2V0KCBvd25lciwga2V5LCB2YWx1ZSApO1xuXG5cdFx0Ly8gU2luY2UgdGhlIFwic2V0XCIgcGF0aCBjYW4gaGF2ZSB0d28gcG9zc2libGUgZW50cnkgcG9pbnRzXG5cdFx0Ly8gcmV0dXJuIHRoZSBleHBlY3RlZCBkYXRhIGJhc2VkIG9uIHdoaWNoIHBhdGggd2FzIHRha2VuWypdXG5cdFx0cmV0dXJuIHZhbHVlICE9PSB1bmRlZmluZWQgPyB2YWx1ZSA6IGtleTtcblx0fSxcblx0cmVtb3ZlOiBmdW5jdGlvbiggb3duZXIsIGtleSApIHtcblx0XHR2YXIgaSxcblx0XHRcdGNhY2hlID0gb3duZXJbIHRoaXMuZXhwYW5kbyBdO1xuXG5cdFx0aWYgKCBjYWNoZSA9PT0gdW5kZWZpbmVkICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGlmICgga2V5ICE9PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdC8vIFN1cHBvcnQgYXJyYXkgb3Igc3BhY2Ugc2VwYXJhdGVkIHN0cmluZyBvZiBrZXlzXG5cdFx0XHRpZiAoIEFycmF5LmlzQXJyYXkoIGtleSApICkge1xuXG5cdFx0XHRcdC8vIElmIGtleSBpcyBhbiBhcnJheSBvZiBrZXlzLi4uXG5cdFx0XHRcdC8vIFdlIGFsd2F5cyBzZXQgY2FtZWxDYXNlIGtleXMsIHNvIHJlbW92ZSB0aGF0LlxuXHRcdFx0XHRrZXkgPSBrZXkubWFwKCBjYW1lbENhc2UgKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGtleSA9IGNhbWVsQ2FzZSgga2V5ICk7XG5cblx0XHRcdFx0Ly8gSWYgYSBrZXkgd2l0aCB0aGUgc3BhY2VzIGV4aXN0cywgdXNlIGl0LlxuXHRcdFx0XHQvLyBPdGhlcndpc2UsIGNyZWF0ZSBhbiBhcnJheSBieSBtYXRjaGluZyBub24td2hpdGVzcGFjZVxuXHRcdFx0XHRrZXkgPSBrZXkgaW4gY2FjaGUgP1xuXHRcdFx0XHRcdFsga2V5IF0gOlxuXHRcdFx0XHRcdCgga2V5Lm1hdGNoKCBybm90aHRtbHdoaXRlICkgfHwgW10gKTtcblx0XHRcdH1cblxuXHRcdFx0aSA9IGtleS5sZW5ndGg7XG5cblx0XHRcdHdoaWxlICggaS0tICkge1xuXHRcdFx0XHRkZWxldGUgY2FjaGVbIGtleVsgaSBdIF07XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gUmVtb3ZlIHRoZSBleHBhbmRvIGlmIHRoZXJlJ3Mgbm8gbW9yZSBkYXRhXG5cdFx0aWYgKCBrZXkgPT09IHVuZGVmaW5lZCB8fCBqUXVlcnkuaXNFbXB0eU9iamVjdCggY2FjaGUgKSApIHtcblxuXHRcdFx0Ly8gU3VwcG9ydDogQ2hyb21lIDw9MzUgLSA0NVxuXHRcdFx0Ly8gV2Via2l0ICYgQmxpbmsgcGVyZm9ybWFuY2Ugc3VmZmVycyB3aGVuIGRlbGV0aW5nIHByb3BlcnRpZXNcblx0XHRcdC8vIGZyb20gRE9NIG5vZGVzLCBzbyBzZXQgdG8gdW5kZWZpbmVkIGluc3RlYWRcblx0XHRcdC8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTM3ODYwNyAoYnVnIHJlc3RyaWN0ZWQpXG5cdFx0XHRpZiAoIG93bmVyLm5vZGVUeXBlICkge1xuXHRcdFx0XHRvd25lclsgdGhpcy5leHBhbmRvIF0gPSB1bmRlZmluZWQ7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRkZWxldGUgb3duZXJbIHRoaXMuZXhwYW5kbyBdO1xuXHRcdFx0fVxuXHRcdH1cblx0fSxcblx0aGFzRGF0YTogZnVuY3Rpb24oIG93bmVyICkge1xuXHRcdHZhciBjYWNoZSA9IG93bmVyWyB0aGlzLmV4cGFuZG8gXTtcblx0XHRyZXR1cm4gY2FjaGUgIT09IHVuZGVmaW5lZCAmJiAhalF1ZXJ5LmlzRW1wdHlPYmplY3QoIGNhY2hlICk7XG5cdH1cbn07XG52YXIgZGF0YVByaXYgPSBuZXcgRGF0YSgpO1xuXG52YXIgZGF0YVVzZXIgPSBuZXcgRGF0YSgpO1xuXG5cblxuLy9cdEltcGxlbWVudGF0aW9uIFN1bW1hcnlcbi8vXG4vL1x0MS4gRW5mb3JjZSBBUEkgc3VyZmFjZSBhbmQgc2VtYW50aWMgY29tcGF0aWJpbGl0eSB3aXRoIDEuOS54IGJyYW5jaFxuLy9cdDIuIEltcHJvdmUgdGhlIG1vZHVsZSdzIG1haW50YWluYWJpbGl0eSBieSByZWR1Y2luZyB0aGUgc3RvcmFnZVxuLy9cdFx0cGF0aHMgdG8gYSBzaW5nbGUgbWVjaGFuaXNtLlxuLy9cdDMuIFVzZSB0aGUgc2FtZSBzaW5nbGUgbWVjaGFuaXNtIHRvIHN1cHBvcnQgXCJwcml2YXRlXCIgYW5kIFwidXNlclwiIGRhdGEuXG4vL1x0NC4gX05ldmVyXyBleHBvc2UgXCJwcml2YXRlXCIgZGF0YSB0byB1c2VyIGNvZGUgKFRPRE86IERyb3AgX2RhdGEsIF9yZW1vdmVEYXRhKVxuLy9cdDUuIEF2b2lkIGV4cG9zaW5nIGltcGxlbWVudGF0aW9uIGRldGFpbHMgb24gdXNlciBvYmplY3RzIChlZy4gZXhwYW5kbyBwcm9wZXJ0aWVzKVxuLy9cdDYuIFByb3ZpZGUgYSBjbGVhciBwYXRoIGZvciBpbXBsZW1lbnRhdGlvbiB1cGdyYWRlIHRvIFdlYWtNYXAgaW4gMjAxNFxuXG52YXIgcmJyYWNlID0gL14oPzpcXHtbXFx3XFxXXSpcXH18XFxbW1xcd1xcV10qXFxdKSQvLFxuXHRybXVsdGlEYXNoID0gL1tBLVpdL2c7XG5cbmZ1bmN0aW9uIGdldERhdGEoIGRhdGEgKSB7XG5cdGlmICggZGF0YSA9PT0gXCJ0cnVlXCIgKSB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblxuXHRpZiAoIGRhdGEgPT09IFwiZmFsc2VcIiApIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHRpZiAoIGRhdGEgPT09IFwibnVsbFwiICkge1xuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cblx0Ly8gT25seSBjb252ZXJ0IHRvIGEgbnVtYmVyIGlmIGl0IGRvZXNuJ3QgY2hhbmdlIHRoZSBzdHJpbmdcblx0aWYgKCBkYXRhID09PSArZGF0YSArIFwiXCIgKSB7XG5cdFx0cmV0dXJuICtkYXRhO1xuXHR9XG5cblx0aWYgKCByYnJhY2UudGVzdCggZGF0YSApICkge1xuXHRcdHJldHVybiBKU09OLnBhcnNlKCBkYXRhICk7XG5cdH1cblxuXHRyZXR1cm4gZGF0YTtcbn1cblxuZnVuY3Rpb24gZGF0YUF0dHIoIGVsZW0sIGtleSwgZGF0YSApIHtcblx0dmFyIG5hbWU7XG5cblx0Ly8gSWYgbm90aGluZyB3YXMgZm91bmQgaW50ZXJuYWxseSwgdHJ5IHRvIGZldGNoIGFueVxuXHQvLyBkYXRhIGZyb20gdGhlIEhUTUw1IGRhdGEtKiBhdHRyaWJ1dGVcblx0aWYgKCBkYXRhID09PSB1bmRlZmluZWQgJiYgZWxlbS5ub2RlVHlwZSA9PT0gMSApIHtcblx0XHRuYW1lID0gXCJkYXRhLVwiICsga2V5LnJlcGxhY2UoIHJtdWx0aURhc2gsIFwiLSQmXCIgKS50b0xvd2VyQ2FzZSgpO1xuXHRcdGRhdGEgPSBlbGVtLmdldEF0dHJpYnV0ZSggbmFtZSApO1xuXG5cdFx0aWYgKCB0eXBlb2YgZGF0YSA9PT0gXCJzdHJpbmdcIiApIHtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdGRhdGEgPSBnZXREYXRhKCBkYXRhICk7XG5cdFx0XHR9IGNhdGNoICggZSApIHt9XG5cblx0XHRcdC8vIE1ha2Ugc3VyZSB3ZSBzZXQgdGhlIGRhdGEgc28gaXQgaXNuJ3QgY2hhbmdlZCBsYXRlclxuXHRcdFx0ZGF0YVVzZXIuc2V0KCBlbGVtLCBrZXksIGRhdGEgKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0ZGF0YSA9IHVuZGVmaW5lZDtcblx0XHR9XG5cdH1cblx0cmV0dXJuIGRhdGE7XG59XG5cbmpRdWVyeS5leHRlbmQoIHtcblx0aGFzRGF0YTogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0cmV0dXJuIGRhdGFVc2VyLmhhc0RhdGEoIGVsZW0gKSB8fCBkYXRhUHJpdi5oYXNEYXRhKCBlbGVtICk7XG5cdH0sXG5cblx0ZGF0YTogZnVuY3Rpb24oIGVsZW0sIG5hbWUsIGRhdGEgKSB7XG5cdFx0cmV0dXJuIGRhdGFVc2VyLmFjY2VzcyggZWxlbSwgbmFtZSwgZGF0YSApO1xuXHR9LFxuXG5cdHJlbW92ZURhdGE6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lICkge1xuXHRcdGRhdGFVc2VyLnJlbW92ZSggZWxlbSwgbmFtZSApO1xuXHR9LFxuXG5cdC8vIFRPRE86IE5vdyB0aGF0IGFsbCBjYWxscyB0byBfZGF0YSBhbmQgX3JlbW92ZURhdGEgaGF2ZSBiZWVuIHJlcGxhY2VkXG5cdC8vIHdpdGggZGlyZWN0IGNhbGxzIHRvIGRhdGFQcml2IG1ldGhvZHMsIHRoZXNlIGNhbiBiZSBkZXByZWNhdGVkLlxuXHRfZGF0YTogZnVuY3Rpb24oIGVsZW0sIG5hbWUsIGRhdGEgKSB7XG5cdFx0cmV0dXJuIGRhdGFQcml2LmFjY2VzcyggZWxlbSwgbmFtZSwgZGF0YSApO1xuXHR9LFxuXG5cdF9yZW1vdmVEYXRhOiBmdW5jdGlvbiggZWxlbSwgbmFtZSApIHtcblx0XHRkYXRhUHJpdi5yZW1vdmUoIGVsZW0sIG5hbWUgKTtcblx0fVxufSApO1xuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cdGRhdGE6IGZ1bmN0aW9uKCBrZXksIHZhbHVlICkge1xuXHRcdHZhciBpLCBuYW1lLCBkYXRhLFxuXHRcdFx0ZWxlbSA9IHRoaXNbIDAgXSxcblx0XHRcdGF0dHJzID0gZWxlbSAmJiBlbGVtLmF0dHJpYnV0ZXM7XG5cblx0XHQvLyBHZXRzIGFsbCB2YWx1ZXNcblx0XHRpZiAoIGtleSA9PT0gdW5kZWZpbmVkICkge1xuXHRcdFx0aWYgKCB0aGlzLmxlbmd0aCApIHtcblx0XHRcdFx0ZGF0YSA9IGRhdGFVc2VyLmdldCggZWxlbSApO1xuXG5cdFx0XHRcdGlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSAmJiAhZGF0YVByaXYuZ2V0KCBlbGVtLCBcImhhc0RhdGFBdHRyc1wiICkgKSB7XG5cdFx0XHRcdFx0aSA9IGF0dHJzLmxlbmd0aDtcblx0XHRcdFx0XHR3aGlsZSAoIGktLSApIHtcblxuXHRcdFx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgMTEgb25seVxuXHRcdFx0XHRcdFx0Ly8gVGhlIGF0dHJzIGVsZW1lbnRzIGNhbiBiZSBudWxsICgjMTQ4OTQpXG5cdFx0XHRcdFx0XHRpZiAoIGF0dHJzWyBpIF0gKSB7XG5cdFx0XHRcdFx0XHRcdG5hbWUgPSBhdHRyc1sgaSBdLm5hbWU7XG5cdFx0XHRcdFx0XHRcdGlmICggbmFtZS5pbmRleE9mKCBcImRhdGEtXCIgKSA9PT0gMCApIHtcblx0XHRcdFx0XHRcdFx0XHRuYW1lID0gY2FtZWxDYXNlKCBuYW1lLnNsaWNlKCA1ICkgKTtcblx0XHRcdFx0XHRcdFx0XHRkYXRhQXR0ciggZWxlbSwgbmFtZSwgZGF0YVsgbmFtZSBdICk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0ZGF0YVByaXYuc2V0KCBlbGVtLCBcImhhc0RhdGFBdHRyc1wiLCB0cnVlICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGRhdGE7XG5cdFx0fVxuXG5cdFx0Ly8gU2V0cyBtdWx0aXBsZSB2YWx1ZXNcblx0XHRpZiAoIHR5cGVvZiBrZXkgPT09IFwib2JqZWN0XCIgKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdFx0ZGF0YVVzZXIuc2V0KCB0aGlzLCBrZXkgKTtcblx0XHRcdH0gKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gYWNjZXNzKCB0aGlzLCBmdW5jdGlvbiggdmFsdWUgKSB7XG5cdFx0XHR2YXIgZGF0YTtcblxuXHRcdFx0Ly8gVGhlIGNhbGxpbmcgalF1ZXJ5IG9iamVjdCAoZWxlbWVudCBtYXRjaGVzKSBpcyBub3QgZW1wdHlcblx0XHRcdC8vIChhbmQgdGhlcmVmb3JlIGhhcyBhbiBlbGVtZW50IGFwcGVhcnMgYXQgdGhpc1sgMCBdKSBhbmQgdGhlXG5cdFx0XHQvLyBgdmFsdWVgIHBhcmFtZXRlciB3YXMgbm90IHVuZGVmaW5lZC4gQW4gZW1wdHkgalF1ZXJ5IG9iamVjdFxuXHRcdFx0Ly8gd2lsbCByZXN1bHQgaW4gYHVuZGVmaW5lZGAgZm9yIGVsZW0gPSB0aGlzWyAwIF0gd2hpY2ggd2lsbFxuXHRcdFx0Ly8gdGhyb3cgYW4gZXhjZXB0aW9uIGlmIGFuIGF0dGVtcHQgdG8gcmVhZCBhIGRhdGEgY2FjaGUgaXMgbWFkZS5cblx0XHRcdGlmICggZWxlbSAmJiB2YWx1ZSA9PT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHRcdC8vIEF0dGVtcHQgdG8gZ2V0IGRhdGEgZnJvbSB0aGUgY2FjaGVcblx0XHRcdFx0Ly8gVGhlIGtleSB3aWxsIGFsd2F5cyBiZSBjYW1lbENhc2VkIGluIERhdGFcblx0XHRcdFx0ZGF0YSA9IGRhdGFVc2VyLmdldCggZWxlbSwga2V5ICk7XG5cdFx0XHRcdGlmICggZGF0YSAhPT0gdW5kZWZpbmVkICkge1xuXHRcdFx0XHRcdHJldHVybiBkYXRhO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gQXR0ZW1wdCB0byBcImRpc2NvdmVyXCIgdGhlIGRhdGEgaW5cblx0XHRcdFx0Ly8gSFRNTDUgY3VzdG9tIGRhdGEtKiBhdHRyc1xuXHRcdFx0XHRkYXRhID0gZGF0YUF0dHIoIGVsZW0sIGtleSApO1xuXHRcdFx0XHRpZiAoIGRhdGEgIT09IHVuZGVmaW5lZCApIHtcblx0XHRcdFx0XHRyZXR1cm4gZGF0YTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIFdlIHRyaWVkIHJlYWxseSBoYXJkLCBidXQgdGhlIGRhdGEgZG9lc24ndCBleGlzdC5cblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBTZXQgdGhlIGRhdGEuLi5cblx0XHRcdHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7XG5cblx0XHRcdFx0Ly8gV2UgYWx3YXlzIHN0b3JlIHRoZSBjYW1lbENhc2VkIGtleVxuXHRcdFx0XHRkYXRhVXNlci5zZXQoIHRoaXMsIGtleSwgdmFsdWUgKTtcblx0XHRcdH0gKTtcblx0XHR9LCBudWxsLCB2YWx1ZSwgYXJndW1lbnRzLmxlbmd0aCA+IDEsIG51bGwsIHRydWUgKTtcblx0fSxcblxuXHRyZW1vdmVEYXRhOiBmdW5jdGlvbigga2V5ICkge1xuXHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0ZGF0YVVzZXIucmVtb3ZlKCB0aGlzLCBrZXkgKTtcblx0XHR9ICk7XG5cdH1cbn0gKTtcblxuXG5qUXVlcnkuZXh0ZW5kKCB7XG5cdHF1ZXVlOiBmdW5jdGlvbiggZWxlbSwgdHlwZSwgZGF0YSApIHtcblx0XHR2YXIgcXVldWU7XG5cblx0XHRpZiAoIGVsZW0gKSB7XG5cdFx0XHR0eXBlID0gKCB0eXBlIHx8IFwiZnhcIiApICsgXCJxdWV1ZVwiO1xuXHRcdFx0cXVldWUgPSBkYXRhUHJpdi5nZXQoIGVsZW0sIHR5cGUgKTtcblxuXHRcdFx0Ly8gU3BlZWQgdXAgZGVxdWV1ZSBieSBnZXR0aW5nIG91dCBxdWlja2x5IGlmIHRoaXMgaXMganVzdCBhIGxvb2t1cFxuXHRcdFx0aWYgKCBkYXRhICkge1xuXHRcdFx0XHRpZiAoICFxdWV1ZSB8fCBBcnJheS5pc0FycmF5KCBkYXRhICkgKSB7XG5cdFx0XHRcdFx0cXVldWUgPSBkYXRhUHJpdi5hY2Nlc3MoIGVsZW0sIHR5cGUsIGpRdWVyeS5tYWtlQXJyYXkoIGRhdGEgKSApO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHF1ZXVlLnB1c2goIGRhdGEgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHF1ZXVlIHx8IFtdO1xuXHRcdH1cblx0fSxcblxuXHRkZXF1ZXVlOiBmdW5jdGlvbiggZWxlbSwgdHlwZSApIHtcblx0XHR0eXBlID0gdHlwZSB8fCBcImZ4XCI7XG5cblx0XHR2YXIgcXVldWUgPSBqUXVlcnkucXVldWUoIGVsZW0sIHR5cGUgKSxcblx0XHRcdHN0YXJ0TGVuZ3RoID0gcXVldWUubGVuZ3RoLFxuXHRcdFx0Zm4gPSBxdWV1ZS5zaGlmdCgpLFxuXHRcdFx0aG9va3MgPSBqUXVlcnkuX3F1ZXVlSG9va3MoIGVsZW0sIHR5cGUgKSxcblx0XHRcdG5leHQgPSBmdW5jdGlvbigpIHtcblx0XHRcdFx0alF1ZXJ5LmRlcXVldWUoIGVsZW0sIHR5cGUgKTtcblx0XHRcdH07XG5cblx0XHQvLyBJZiB0aGUgZnggcXVldWUgaXMgZGVxdWV1ZWQsIGFsd2F5cyByZW1vdmUgdGhlIHByb2dyZXNzIHNlbnRpbmVsXG5cdFx0aWYgKCBmbiA9PT0gXCJpbnByb2dyZXNzXCIgKSB7XG5cdFx0XHRmbiA9IHF1ZXVlLnNoaWZ0KCk7XG5cdFx0XHRzdGFydExlbmd0aC0tO1xuXHRcdH1cblxuXHRcdGlmICggZm4gKSB7XG5cblx0XHRcdC8vIEFkZCBhIHByb2dyZXNzIHNlbnRpbmVsIHRvIHByZXZlbnQgdGhlIGZ4IHF1ZXVlIGZyb20gYmVpbmdcblx0XHRcdC8vIGF1dG9tYXRpY2FsbHkgZGVxdWV1ZWRcblx0XHRcdGlmICggdHlwZSA9PT0gXCJmeFwiICkge1xuXHRcdFx0XHRxdWV1ZS51bnNoaWZ0KCBcImlucHJvZ3Jlc3NcIiApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBDbGVhciB1cCB0aGUgbGFzdCBxdWV1ZSBzdG9wIGZ1bmN0aW9uXG5cdFx0XHRkZWxldGUgaG9va3Muc3RvcDtcblx0XHRcdGZuLmNhbGwoIGVsZW0sIG5leHQsIGhvb2tzICk7XG5cdFx0fVxuXG5cdFx0aWYgKCAhc3RhcnRMZW5ndGggJiYgaG9va3MgKSB7XG5cdFx0XHRob29rcy5lbXB0eS5maXJlKCk7XG5cdFx0fVxuXHR9LFxuXG5cdC8vIE5vdCBwdWJsaWMgLSBnZW5lcmF0ZSBhIHF1ZXVlSG9va3Mgb2JqZWN0LCBvciByZXR1cm4gdGhlIGN1cnJlbnQgb25lXG5cdF9xdWV1ZUhvb2tzOiBmdW5jdGlvbiggZWxlbSwgdHlwZSApIHtcblx0XHR2YXIga2V5ID0gdHlwZSArIFwicXVldWVIb29rc1wiO1xuXHRcdHJldHVybiBkYXRhUHJpdi5nZXQoIGVsZW0sIGtleSApIHx8IGRhdGFQcml2LmFjY2VzcyggZWxlbSwga2V5LCB7XG5cdFx0XHRlbXB0eTogalF1ZXJ5LkNhbGxiYWNrcyggXCJvbmNlIG1lbW9yeVwiICkuYWRkKCBmdW5jdGlvbigpIHtcblx0XHRcdFx0ZGF0YVByaXYucmVtb3ZlKCBlbGVtLCBbIHR5cGUgKyBcInF1ZXVlXCIsIGtleSBdICk7XG5cdFx0XHR9IClcblx0XHR9ICk7XG5cdH1cbn0gKTtcblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXHRxdWV1ZTogZnVuY3Rpb24oIHR5cGUsIGRhdGEgKSB7XG5cdFx0dmFyIHNldHRlciA9IDI7XG5cblx0XHRpZiAoIHR5cGVvZiB0eXBlICE9PSBcInN0cmluZ1wiICkge1xuXHRcdFx0ZGF0YSA9IHR5cGU7XG5cdFx0XHR0eXBlID0gXCJmeFwiO1xuXHRcdFx0c2V0dGVyLS07XG5cdFx0fVxuXG5cdFx0aWYgKCBhcmd1bWVudHMubGVuZ3RoIDwgc2V0dGVyICkge1xuXHRcdFx0cmV0dXJuIGpRdWVyeS5xdWV1ZSggdGhpc1sgMCBdLCB0eXBlICk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGRhdGEgPT09IHVuZGVmaW5lZCA/XG5cdFx0XHR0aGlzIDpcblx0XHRcdHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHZhciBxdWV1ZSA9IGpRdWVyeS5xdWV1ZSggdGhpcywgdHlwZSwgZGF0YSApO1xuXG5cdFx0XHRcdC8vIEVuc3VyZSBhIGhvb2tzIGZvciB0aGlzIHF1ZXVlXG5cdFx0XHRcdGpRdWVyeS5fcXVldWVIb29rcyggdGhpcywgdHlwZSApO1xuXG5cdFx0XHRcdGlmICggdHlwZSA9PT0gXCJmeFwiICYmIHF1ZXVlWyAwIF0gIT09IFwiaW5wcm9ncmVzc1wiICkge1xuXHRcdFx0XHRcdGpRdWVyeS5kZXF1ZXVlKCB0aGlzLCB0eXBlICk7XG5cdFx0XHRcdH1cblx0XHRcdH0gKTtcblx0fSxcblx0ZGVxdWV1ZTogZnVuY3Rpb24oIHR5cGUgKSB7XG5cdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHRqUXVlcnkuZGVxdWV1ZSggdGhpcywgdHlwZSApO1xuXHRcdH0gKTtcblx0fSxcblx0Y2xlYXJRdWV1ZTogZnVuY3Rpb24oIHR5cGUgKSB7XG5cdFx0cmV0dXJuIHRoaXMucXVldWUoIHR5cGUgfHwgXCJmeFwiLCBbXSApO1xuXHR9LFxuXG5cdC8vIEdldCBhIHByb21pc2UgcmVzb2x2ZWQgd2hlbiBxdWV1ZXMgb2YgYSBjZXJ0YWluIHR5cGVcblx0Ly8gYXJlIGVtcHRpZWQgKGZ4IGlzIHRoZSB0eXBlIGJ5IGRlZmF1bHQpXG5cdHByb21pc2U6IGZ1bmN0aW9uKCB0eXBlLCBvYmogKSB7XG5cdFx0dmFyIHRtcCxcblx0XHRcdGNvdW50ID0gMSxcblx0XHRcdGRlZmVyID0galF1ZXJ5LkRlZmVycmVkKCksXG5cdFx0XHRlbGVtZW50cyA9IHRoaXMsXG5cdFx0XHRpID0gdGhpcy5sZW5ndGgsXG5cdFx0XHRyZXNvbHZlID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGlmICggISggLS1jb3VudCApICkge1xuXHRcdFx0XHRcdGRlZmVyLnJlc29sdmVXaXRoKCBlbGVtZW50cywgWyBlbGVtZW50cyBdICk7XG5cdFx0XHRcdH1cblx0XHRcdH07XG5cblx0XHRpZiAoIHR5cGVvZiB0eXBlICE9PSBcInN0cmluZ1wiICkge1xuXHRcdFx0b2JqID0gdHlwZTtcblx0XHRcdHR5cGUgPSB1bmRlZmluZWQ7XG5cdFx0fVxuXHRcdHR5cGUgPSB0eXBlIHx8IFwiZnhcIjtcblxuXHRcdHdoaWxlICggaS0tICkge1xuXHRcdFx0dG1wID0gZGF0YVByaXYuZ2V0KCBlbGVtZW50c1sgaSBdLCB0eXBlICsgXCJxdWV1ZUhvb2tzXCIgKTtcblx0XHRcdGlmICggdG1wICYmIHRtcC5lbXB0eSApIHtcblx0XHRcdFx0Y291bnQrKztcblx0XHRcdFx0dG1wLmVtcHR5LmFkZCggcmVzb2x2ZSApO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXNvbHZlKCk7XG5cdFx0cmV0dXJuIGRlZmVyLnByb21pc2UoIG9iaiApO1xuXHR9XG59ICk7XG52YXIgcG51bSA9ICggL1srLV0/KD86XFxkKlxcLnwpXFxkKyg/OltlRV1bKy1dP1xcZCt8KS8gKS5zb3VyY2U7XG5cbnZhciByY3NzTnVtID0gbmV3IFJlZ0V4cCggXCJeKD86KFsrLV0pPXwpKFwiICsgcG51bSArIFwiKShbYS16JV0qKSRcIiwgXCJpXCIgKTtcblxuXG52YXIgY3NzRXhwYW5kID0gWyBcIlRvcFwiLCBcIlJpZ2h0XCIsIFwiQm90dG9tXCIsIFwiTGVmdFwiIF07XG5cbnZhciBpc0hpZGRlbldpdGhpblRyZWUgPSBmdW5jdGlvbiggZWxlbSwgZWwgKSB7XG5cblx0XHQvLyBpc0hpZGRlbldpdGhpblRyZWUgbWlnaHQgYmUgY2FsbGVkIGZyb20galF1ZXJ5I2ZpbHRlciBmdW5jdGlvbjtcblx0XHQvLyBpbiB0aGF0IGNhc2UsIGVsZW1lbnQgd2lsbCBiZSBzZWNvbmQgYXJndW1lbnRcblx0XHRlbGVtID0gZWwgfHwgZWxlbTtcblxuXHRcdC8vIElubGluZSBzdHlsZSB0cnVtcHMgYWxsXG5cdFx0cmV0dXJuIGVsZW0uc3R5bGUuZGlzcGxheSA9PT0gXCJub25lXCIgfHxcblx0XHRcdGVsZW0uc3R5bGUuZGlzcGxheSA9PT0gXCJcIiAmJlxuXG5cdFx0XHQvLyBPdGhlcndpc2UsIGNoZWNrIGNvbXB1dGVkIHN0eWxlXG5cdFx0XHQvLyBTdXBwb3J0OiBGaXJlZm94IDw9NDMgLSA0NVxuXHRcdFx0Ly8gRGlzY29ubmVjdGVkIGVsZW1lbnRzIGNhbiBoYXZlIGNvbXB1dGVkIGRpc3BsYXk6IG5vbmUsIHNvIGZpcnN0IGNvbmZpcm0gdGhhdCBlbGVtIGlzXG5cdFx0XHQvLyBpbiB0aGUgZG9jdW1lbnQuXG5cdFx0XHRqUXVlcnkuY29udGFpbnMoIGVsZW0ub3duZXJEb2N1bWVudCwgZWxlbSApICYmXG5cblx0XHRcdGpRdWVyeS5jc3MoIGVsZW0sIFwiZGlzcGxheVwiICkgPT09IFwibm9uZVwiO1xuXHR9O1xuXG52YXIgc3dhcCA9IGZ1bmN0aW9uKCBlbGVtLCBvcHRpb25zLCBjYWxsYmFjaywgYXJncyApIHtcblx0dmFyIHJldCwgbmFtZSxcblx0XHRvbGQgPSB7fTtcblxuXHQvLyBSZW1lbWJlciB0aGUgb2xkIHZhbHVlcywgYW5kIGluc2VydCB0aGUgbmV3IG9uZXNcblx0Zm9yICggbmFtZSBpbiBvcHRpb25zICkge1xuXHRcdG9sZFsgbmFtZSBdID0gZWxlbS5zdHlsZVsgbmFtZSBdO1xuXHRcdGVsZW0uc3R5bGVbIG5hbWUgXSA9IG9wdGlvbnNbIG5hbWUgXTtcblx0fVxuXG5cdHJldCA9IGNhbGxiYWNrLmFwcGx5KCBlbGVtLCBhcmdzIHx8IFtdICk7XG5cblx0Ly8gUmV2ZXJ0IHRoZSBvbGQgdmFsdWVzXG5cdGZvciAoIG5hbWUgaW4gb3B0aW9ucyApIHtcblx0XHRlbGVtLnN0eWxlWyBuYW1lIF0gPSBvbGRbIG5hbWUgXTtcblx0fVxuXG5cdHJldHVybiByZXQ7XG59O1xuXG5cblxuXG5mdW5jdGlvbiBhZGp1c3RDU1MoIGVsZW0sIHByb3AsIHZhbHVlUGFydHMsIHR3ZWVuICkge1xuXHR2YXIgYWRqdXN0ZWQsIHNjYWxlLFxuXHRcdG1heEl0ZXJhdGlvbnMgPSAyMCxcblx0XHRjdXJyZW50VmFsdWUgPSB0d2VlbiA/XG5cdFx0XHRmdW5jdGlvbigpIHtcblx0XHRcdFx0cmV0dXJuIHR3ZWVuLmN1cigpO1xuXHRcdFx0fSA6XG5cdFx0XHRmdW5jdGlvbigpIHtcblx0XHRcdFx0cmV0dXJuIGpRdWVyeS5jc3MoIGVsZW0sIHByb3AsIFwiXCIgKTtcblx0XHRcdH0sXG5cdFx0aW5pdGlhbCA9IGN1cnJlbnRWYWx1ZSgpLFxuXHRcdHVuaXQgPSB2YWx1ZVBhcnRzICYmIHZhbHVlUGFydHNbIDMgXSB8fCAoIGpRdWVyeS5jc3NOdW1iZXJbIHByb3AgXSA/IFwiXCIgOiBcInB4XCIgKSxcblxuXHRcdC8vIFN0YXJ0aW5nIHZhbHVlIGNvbXB1dGF0aW9uIGlzIHJlcXVpcmVkIGZvciBwb3RlbnRpYWwgdW5pdCBtaXNtYXRjaGVzXG5cdFx0aW5pdGlhbEluVW5pdCA9ICggalF1ZXJ5LmNzc051bWJlclsgcHJvcCBdIHx8IHVuaXQgIT09IFwicHhcIiAmJiAraW5pdGlhbCApICYmXG5cdFx0XHRyY3NzTnVtLmV4ZWMoIGpRdWVyeS5jc3MoIGVsZW0sIHByb3AgKSApO1xuXG5cdGlmICggaW5pdGlhbEluVW5pdCAmJiBpbml0aWFsSW5Vbml0WyAzIF0gIT09IHVuaXQgKSB7XG5cblx0XHQvLyBTdXBwb3J0OiBGaXJlZm94IDw9NTRcblx0XHQvLyBIYWx2ZSB0aGUgaXRlcmF0aW9uIHRhcmdldCB2YWx1ZSB0byBwcmV2ZW50IGludGVyZmVyZW5jZSBmcm9tIENTUyB1cHBlciBib3VuZHMgKGdoLTIxNDQpXG5cdFx0aW5pdGlhbCA9IGluaXRpYWwgLyAyO1xuXG5cdFx0Ly8gVHJ1c3QgdW5pdHMgcmVwb3J0ZWQgYnkgalF1ZXJ5LmNzc1xuXHRcdHVuaXQgPSB1bml0IHx8IGluaXRpYWxJblVuaXRbIDMgXTtcblxuXHRcdC8vIEl0ZXJhdGl2ZWx5IGFwcHJveGltYXRlIGZyb20gYSBub256ZXJvIHN0YXJ0aW5nIHBvaW50XG5cdFx0aW5pdGlhbEluVW5pdCA9ICtpbml0aWFsIHx8IDE7XG5cblx0XHR3aGlsZSAoIG1heEl0ZXJhdGlvbnMtLSApIHtcblxuXHRcdFx0Ly8gRXZhbHVhdGUgYW5kIHVwZGF0ZSBvdXIgYmVzdCBndWVzcyAoZG91YmxpbmcgZ3Vlc3NlcyB0aGF0IHplcm8gb3V0KS5cblx0XHRcdC8vIEZpbmlzaCBpZiB0aGUgc2NhbGUgZXF1YWxzIG9yIGNyb3NzZXMgMSAobWFraW5nIHRoZSBvbGQqbmV3IHByb2R1Y3Qgbm9uLXBvc2l0aXZlKS5cblx0XHRcdGpRdWVyeS5zdHlsZSggZWxlbSwgcHJvcCwgaW5pdGlhbEluVW5pdCArIHVuaXQgKTtcblx0XHRcdGlmICggKCAxIC0gc2NhbGUgKSAqICggMSAtICggc2NhbGUgPSBjdXJyZW50VmFsdWUoKSAvIGluaXRpYWwgfHwgMC41ICkgKSA8PSAwICkge1xuXHRcdFx0XHRtYXhJdGVyYXRpb25zID0gMDtcblx0XHRcdH1cblx0XHRcdGluaXRpYWxJblVuaXQgPSBpbml0aWFsSW5Vbml0IC8gc2NhbGU7XG5cblx0XHR9XG5cblx0XHRpbml0aWFsSW5Vbml0ID0gaW5pdGlhbEluVW5pdCAqIDI7XG5cdFx0alF1ZXJ5LnN0eWxlKCBlbGVtLCBwcm9wLCBpbml0aWFsSW5Vbml0ICsgdW5pdCApO1xuXG5cdFx0Ly8gTWFrZSBzdXJlIHdlIHVwZGF0ZSB0aGUgdHdlZW4gcHJvcGVydGllcyBsYXRlciBvblxuXHRcdHZhbHVlUGFydHMgPSB2YWx1ZVBhcnRzIHx8IFtdO1xuXHR9XG5cblx0aWYgKCB2YWx1ZVBhcnRzICkge1xuXHRcdGluaXRpYWxJblVuaXQgPSAraW5pdGlhbEluVW5pdCB8fCAraW5pdGlhbCB8fCAwO1xuXG5cdFx0Ly8gQXBwbHkgcmVsYXRpdmUgb2Zmc2V0ICgrPS8tPSkgaWYgc3BlY2lmaWVkXG5cdFx0YWRqdXN0ZWQgPSB2YWx1ZVBhcnRzWyAxIF0gP1xuXHRcdFx0aW5pdGlhbEluVW5pdCArICggdmFsdWVQYXJ0c1sgMSBdICsgMSApICogdmFsdWVQYXJ0c1sgMiBdIDpcblx0XHRcdCt2YWx1ZVBhcnRzWyAyIF07XG5cdFx0aWYgKCB0d2VlbiApIHtcblx0XHRcdHR3ZWVuLnVuaXQgPSB1bml0O1xuXHRcdFx0dHdlZW4uc3RhcnQgPSBpbml0aWFsSW5Vbml0O1xuXHRcdFx0dHdlZW4uZW5kID0gYWRqdXN0ZWQ7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBhZGp1c3RlZDtcbn1cblxuXG52YXIgZGVmYXVsdERpc3BsYXlNYXAgPSB7fTtcblxuZnVuY3Rpb24gZ2V0RGVmYXVsdERpc3BsYXkoIGVsZW0gKSB7XG5cdHZhciB0ZW1wLFxuXHRcdGRvYyA9IGVsZW0ub3duZXJEb2N1bWVudCxcblx0XHRub2RlTmFtZSA9IGVsZW0ubm9kZU5hbWUsXG5cdFx0ZGlzcGxheSA9IGRlZmF1bHREaXNwbGF5TWFwWyBub2RlTmFtZSBdO1xuXG5cdGlmICggZGlzcGxheSApIHtcblx0XHRyZXR1cm4gZGlzcGxheTtcblx0fVxuXG5cdHRlbXAgPSBkb2MuYm9keS5hcHBlbmRDaGlsZCggZG9jLmNyZWF0ZUVsZW1lbnQoIG5vZGVOYW1lICkgKTtcblx0ZGlzcGxheSA9IGpRdWVyeS5jc3MoIHRlbXAsIFwiZGlzcGxheVwiICk7XG5cblx0dGVtcC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKCB0ZW1wICk7XG5cblx0aWYgKCBkaXNwbGF5ID09PSBcIm5vbmVcIiApIHtcblx0XHRkaXNwbGF5ID0gXCJibG9ja1wiO1xuXHR9XG5cdGRlZmF1bHREaXNwbGF5TWFwWyBub2RlTmFtZSBdID0gZGlzcGxheTtcblxuXHRyZXR1cm4gZGlzcGxheTtcbn1cblxuZnVuY3Rpb24gc2hvd0hpZGUoIGVsZW1lbnRzLCBzaG93ICkge1xuXHR2YXIgZGlzcGxheSwgZWxlbSxcblx0XHR2YWx1ZXMgPSBbXSxcblx0XHRpbmRleCA9IDAsXG5cdFx0bGVuZ3RoID0gZWxlbWVudHMubGVuZ3RoO1xuXG5cdC8vIERldGVybWluZSBuZXcgZGlzcGxheSB2YWx1ZSBmb3IgZWxlbWVudHMgdGhhdCBuZWVkIHRvIGNoYW5nZVxuXHRmb3IgKCA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrICkge1xuXHRcdGVsZW0gPSBlbGVtZW50c1sgaW5kZXggXTtcblx0XHRpZiAoICFlbGVtLnN0eWxlICkge1xuXHRcdFx0Y29udGludWU7XG5cdFx0fVxuXG5cdFx0ZGlzcGxheSA9IGVsZW0uc3R5bGUuZGlzcGxheTtcblx0XHRpZiAoIHNob3cgKSB7XG5cblx0XHRcdC8vIFNpbmNlIHdlIGZvcmNlIHZpc2liaWxpdHkgdXBvbiBjYXNjYWRlLWhpZGRlbiBlbGVtZW50cywgYW4gaW1tZWRpYXRlIChhbmQgc2xvdylcblx0XHRcdC8vIGNoZWNrIGlzIHJlcXVpcmVkIGluIHRoaXMgZmlyc3QgbG9vcCB1bmxlc3Mgd2UgaGF2ZSBhIG5vbmVtcHR5IGRpc3BsYXkgdmFsdWUgKGVpdGhlclxuXHRcdFx0Ly8gaW5saW5lIG9yIGFib3V0LXRvLWJlLXJlc3RvcmVkKVxuXHRcdFx0aWYgKCBkaXNwbGF5ID09PSBcIm5vbmVcIiApIHtcblx0XHRcdFx0dmFsdWVzWyBpbmRleCBdID0gZGF0YVByaXYuZ2V0KCBlbGVtLCBcImRpc3BsYXlcIiApIHx8IG51bGw7XG5cdFx0XHRcdGlmICggIXZhbHVlc1sgaW5kZXggXSApIHtcblx0XHRcdFx0XHRlbGVtLnN0eWxlLmRpc3BsYXkgPSBcIlwiO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRpZiAoIGVsZW0uc3R5bGUuZGlzcGxheSA9PT0gXCJcIiAmJiBpc0hpZGRlbldpdGhpblRyZWUoIGVsZW0gKSApIHtcblx0XHRcdFx0dmFsdWVzWyBpbmRleCBdID0gZ2V0RGVmYXVsdERpc3BsYXkoIGVsZW0gKTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0aWYgKCBkaXNwbGF5ICE9PSBcIm5vbmVcIiApIHtcblx0XHRcdFx0dmFsdWVzWyBpbmRleCBdID0gXCJub25lXCI7XG5cblx0XHRcdFx0Ly8gUmVtZW1iZXIgd2hhdCB3ZSdyZSBvdmVyd3JpdGluZ1xuXHRcdFx0XHRkYXRhUHJpdi5zZXQoIGVsZW0sIFwiZGlzcGxheVwiLCBkaXNwbGF5ICk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Ly8gU2V0IHRoZSBkaXNwbGF5IG9mIHRoZSBlbGVtZW50cyBpbiBhIHNlY29uZCBsb29wIHRvIGF2b2lkIGNvbnN0YW50IHJlZmxvd1xuXHRmb3IgKCBpbmRleCA9IDA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrICkge1xuXHRcdGlmICggdmFsdWVzWyBpbmRleCBdICE9IG51bGwgKSB7XG5cdFx0XHRlbGVtZW50c1sgaW5kZXggXS5zdHlsZS5kaXNwbGF5ID0gdmFsdWVzWyBpbmRleCBdO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiBlbGVtZW50cztcbn1cblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXHRzaG93OiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gc2hvd0hpZGUoIHRoaXMsIHRydWUgKTtcblx0fSxcblx0aGlkZTogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHNob3dIaWRlKCB0aGlzICk7XG5cdH0sXG5cdHRvZ2dsZTogZnVuY3Rpb24oIHN0YXRlICkge1xuXHRcdGlmICggdHlwZW9mIHN0YXRlID09PSBcImJvb2xlYW5cIiApIHtcblx0XHRcdHJldHVybiBzdGF0ZSA/IHRoaXMuc2hvdygpIDogdGhpcy5oaWRlKCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHRpZiAoIGlzSGlkZGVuV2l0aGluVHJlZSggdGhpcyApICkge1xuXHRcdFx0XHRqUXVlcnkoIHRoaXMgKS5zaG93KCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRqUXVlcnkoIHRoaXMgKS5oaWRlKCk7XG5cdFx0XHR9XG5cdFx0fSApO1xuXHR9XG59ICk7XG52YXIgcmNoZWNrYWJsZVR5cGUgPSAoIC9eKD86Y2hlY2tib3h8cmFkaW8pJC9pICk7XG5cbnZhciBydGFnTmFtZSA9ICggLzwoW2Etel1bXlxcL1xcMD5cXHgyMFxcdFxcclxcblxcZl0rKS9pICk7XG5cbnZhciByc2NyaXB0VHlwZSA9ICggL14kfF5tb2R1bGUkfFxcLyg/OmphdmF8ZWNtYSlzY3JpcHQvaSApO1xuXG5cblxuLy8gV2UgaGF2ZSB0byBjbG9zZSB0aGVzZSB0YWdzIHRvIHN1cHBvcnQgWEhUTUwgKCMxMzIwMClcbnZhciB3cmFwTWFwID0ge1xuXG5cdC8vIFN1cHBvcnQ6IElFIDw9OSBvbmx5XG5cdG9wdGlvbjogWyAxLCBcIjxzZWxlY3QgbXVsdGlwbGU9J211bHRpcGxlJz5cIiwgXCI8L3NlbGVjdD5cIiBdLFxuXG5cdC8vIFhIVE1MIHBhcnNlcnMgZG8gbm90IG1hZ2ljYWxseSBpbnNlcnQgZWxlbWVudHMgaW4gdGhlXG5cdC8vIHNhbWUgd2F5IHRoYXQgdGFnIHNvdXAgcGFyc2VycyBkby4gU28gd2UgY2Fubm90IHNob3J0ZW5cblx0Ly8gdGhpcyBieSBvbWl0dGluZyA8dGJvZHk+IG9yIG90aGVyIHJlcXVpcmVkIGVsZW1lbnRzLlxuXHR0aGVhZDogWyAxLCBcIjx0YWJsZT5cIiwgXCI8L3RhYmxlPlwiIF0sXG5cdGNvbDogWyAyLCBcIjx0YWJsZT48Y29sZ3JvdXA+XCIsIFwiPC9jb2xncm91cD48L3RhYmxlPlwiIF0sXG5cdHRyOiBbIDIsIFwiPHRhYmxlPjx0Ym9keT5cIiwgXCI8L3Rib2R5PjwvdGFibGU+XCIgXSxcblx0dGQ6IFsgMywgXCI8dGFibGU+PHRib2R5Pjx0cj5cIiwgXCI8L3RyPjwvdGJvZHk+PC90YWJsZT5cIiBdLFxuXG5cdF9kZWZhdWx0OiBbIDAsIFwiXCIsIFwiXCIgXVxufTtcblxuLy8gU3VwcG9ydDogSUUgPD05IG9ubHlcbndyYXBNYXAub3B0Z3JvdXAgPSB3cmFwTWFwLm9wdGlvbjtcblxud3JhcE1hcC50Ym9keSA9IHdyYXBNYXAudGZvb3QgPSB3cmFwTWFwLmNvbGdyb3VwID0gd3JhcE1hcC5jYXB0aW9uID0gd3JhcE1hcC50aGVhZDtcbndyYXBNYXAudGggPSB3cmFwTWFwLnRkO1xuXG5cbmZ1bmN0aW9uIGdldEFsbCggY29udGV4dCwgdGFnICkge1xuXG5cdC8vIFN1cHBvcnQ6IElFIDw9OSAtIDExIG9ubHlcblx0Ly8gVXNlIHR5cGVvZiB0byBhdm9pZCB6ZXJvLWFyZ3VtZW50IG1ldGhvZCBpbnZvY2F0aW9uIG9uIGhvc3Qgb2JqZWN0cyAoIzE1MTUxKVxuXHR2YXIgcmV0O1xuXG5cdGlmICggdHlwZW9mIGNvbnRleHQuZ2V0RWxlbWVudHNCeVRhZ05hbWUgIT09IFwidW5kZWZpbmVkXCIgKSB7XG5cdFx0cmV0ID0gY29udGV4dC5nZXRFbGVtZW50c0J5VGFnTmFtZSggdGFnIHx8IFwiKlwiICk7XG5cblx0fSBlbHNlIGlmICggdHlwZW9mIGNvbnRleHQucXVlcnlTZWxlY3RvckFsbCAhPT0gXCJ1bmRlZmluZWRcIiApIHtcblx0XHRyZXQgPSBjb250ZXh0LnF1ZXJ5U2VsZWN0b3JBbGwoIHRhZyB8fCBcIipcIiApO1xuXG5cdH0gZWxzZSB7XG5cdFx0cmV0ID0gW107XG5cdH1cblxuXHRpZiAoIHRhZyA9PT0gdW5kZWZpbmVkIHx8IHRhZyAmJiBub2RlTmFtZSggY29udGV4dCwgdGFnICkgKSB7XG5cdFx0cmV0dXJuIGpRdWVyeS5tZXJnZSggWyBjb250ZXh0IF0sIHJldCApO1xuXHR9XG5cblx0cmV0dXJuIHJldDtcbn1cblxuXG4vLyBNYXJrIHNjcmlwdHMgYXMgaGF2aW5nIGFscmVhZHkgYmVlbiBldmFsdWF0ZWRcbmZ1bmN0aW9uIHNldEdsb2JhbEV2YWwoIGVsZW1zLCByZWZFbGVtZW50cyApIHtcblx0dmFyIGkgPSAwLFxuXHRcdGwgPSBlbGVtcy5sZW5ndGg7XG5cblx0Zm9yICggOyBpIDwgbDsgaSsrICkge1xuXHRcdGRhdGFQcml2LnNldChcblx0XHRcdGVsZW1zWyBpIF0sXG5cdFx0XHRcImdsb2JhbEV2YWxcIixcblx0XHRcdCFyZWZFbGVtZW50cyB8fCBkYXRhUHJpdi5nZXQoIHJlZkVsZW1lbnRzWyBpIF0sIFwiZ2xvYmFsRXZhbFwiIClcblx0XHQpO1xuXHR9XG59XG5cblxudmFyIHJodG1sID0gLzx8JiM/XFx3KzsvO1xuXG5mdW5jdGlvbiBidWlsZEZyYWdtZW50KCBlbGVtcywgY29udGV4dCwgc2NyaXB0cywgc2VsZWN0aW9uLCBpZ25vcmVkICkge1xuXHR2YXIgZWxlbSwgdG1wLCB0YWcsIHdyYXAsIGNvbnRhaW5zLCBqLFxuXHRcdGZyYWdtZW50ID0gY29udGV4dC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCksXG5cdFx0bm9kZXMgPSBbXSxcblx0XHRpID0gMCxcblx0XHRsID0gZWxlbXMubGVuZ3RoO1xuXG5cdGZvciAoIDsgaSA8IGw7IGkrKyApIHtcblx0XHRlbGVtID0gZWxlbXNbIGkgXTtcblxuXHRcdGlmICggZWxlbSB8fCBlbGVtID09PSAwICkge1xuXG5cdFx0XHQvLyBBZGQgbm9kZXMgZGlyZWN0bHlcblx0XHRcdGlmICggdG9UeXBlKCBlbGVtICkgPT09IFwib2JqZWN0XCIgKSB7XG5cblx0XHRcdFx0Ly8gU3VwcG9ydDogQW5kcm9pZCA8PTQuMCBvbmx5LCBQaGFudG9tSlMgMSBvbmx5XG5cdFx0XHRcdC8vIHB1c2guYXBwbHkoXywgYXJyYXlsaWtlKSB0aHJvd3Mgb24gYW5jaWVudCBXZWJLaXRcblx0XHRcdFx0alF1ZXJ5Lm1lcmdlKCBub2RlcywgZWxlbS5ub2RlVHlwZSA/IFsgZWxlbSBdIDogZWxlbSApO1xuXG5cdFx0XHQvLyBDb252ZXJ0IG5vbi1odG1sIGludG8gYSB0ZXh0IG5vZGVcblx0XHRcdH0gZWxzZSBpZiAoICFyaHRtbC50ZXN0KCBlbGVtICkgKSB7XG5cdFx0XHRcdG5vZGVzLnB1c2goIGNvbnRleHQuY3JlYXRlVGV4dE5vZGUoIGVsZW0gKSApO1xuXG5cdFx0XHQvLyBDb252ZXJ0IGh0bWwgaW50byBET00gbm9kZXNcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRtcCA9IHRtcCB8fCBmcmFnbWVudC5hcHBlbmRDaGlsZCggY29udGV4dC5jcmVhdGVFbGVtZW50KCBcImRpdlwiICkgKTtcblxuXHRcdFx0XHQvLyBEZXNlcmlhbGl6ZSBhIHN0YW5kYXJkIHJlcHJlc2VudGF0aW9uXG5cdFx0XHRcdHRhZyA9ICggcnRhZ05hbWUuZXhlYyggZWxlbSApIHx8IFsgXCJcIiwgXCJcIiBdIClbIDEgXS50b0xvd2VyQ2FzZSgpO1xuXHRcdFx0XHR3cmFwID0gd3JhcE1hcFsgdGFnIF0gfHwgd3JhcE1hcC5fZGVmYXVsdDtcblx0XHRcdFx0dG1wLmlubmVySFRNTCA9IHdyYXBbIDEgXSArIGpRdWVyeS5odG1sUHJlZmlsdGVyKCBlbGVtICkgKyB3cmFwWyAyIF07XG5cblx0XHRcdFx0Ly8gRGVzY2VuZCB0aHJvdWdoIHdyYXBwZXJzIHRvIHRoZSByaWdodCBjb250ZW50XG5cdFx0XHRcdGogPSB3cmFwWyAwIF07XG5cdFx0XHRcdHdoaWxlICggai0tICkge1xuXHRcdFx0XHRcdHRtcCA9IHRtcC5sYXN0Q2hpbGQ7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBTdXBwb3J0OiBBbmRyb2lkIDw9NC4wIG9ubHksIFBoYW50b21KUyAxIG9ubHlcblx0XHRcdFx0Ly8gcHVzaC5hcHBseShfLCBhcnJheWxpa2UpIHRocm93cyBvbiBhbmNpZW50IFdlYktpdFxuXHRcdFx0XHRqUXVlcnkubWVyZ2UoIG5vZGVzLCB0bXAuY2hpbGROb2RlcyApO1xuXG5cdFx0XHRcdC8vIFJlbWVtYmVyIHRoZSB0b3AtbGV2ZWwgY29udGFpbmVyXG5cdFx0XHRcdHRtcCA9IGZyYWdtZW50LmZpcnN0Q2hpbGQ7XG5cblx0XHRcdFx0Ly8gRW5zdXJlIHRoZSBjcmVhdGVkIG5vZGVzIGFyZSBvcnBoYW5lZCAoIzEyMzkyKVxuXHRcdFx0XHR0bXAudGV4dENvbnRlbnQgPSBcIlwiO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8vIFJlbW92ZSB3cmFwcGVyIGZyb20gZnJhZ21lbnRcblx0ZnJhZ21lbnQudGV4dENvbnRlbnQgPSBcIlwiO1xuXG5cdGkgPSAwO1xuXHR3aGlsZSAoICggZWxlbSA9IG5vZGVzWyBpKysgXSApICkge1xuXG5cdFx0Ly8gU2tpcCBlbGVtZW50cyBhbHJlYWR5IGluIHRoZSBjb250ZXh0IGNvbGxlY3Rpb24gKHRyYWMtNDA4Nylcblx0XHRpZiAoIHNlbGVjdGlvbiAmJiBqUXVlcnkuaW5BcnJheSggZWxlbSwgc2VsZWN0aW9uICkgPiAtMSApIHtcblx0XHRcdGlmICggaWdub3JlZCApIHtcblx0XHRcdFx0aWdub3JlZC5wdXNoKCBlbGVtICk7XG5cdFx0XHR9XG5cdFx0XHRjb250aW51ZTtcblx0XHR9XG5cblx0XHRjb250YWlucyA9IGpRdWVyeS5jb250YWlucyggZWxlbS5vd25lckRvY3VtZW50LCBlbGVtICk7XG5cblx0XHQvLyBBcHBlbmQgdG8gZnJhZ21lbnRcblx0XHR0bXAgPSBnZXRBbGwoIGZyYWdtZW50LmFwcGVuZENoaWxkKCBlbGVtICksIFwic2NyaXB0XCIgKTtcblxuXHRcdC8vIFByZXNlcnZlIHNjcmlwdCBldmFsdWF0aW9uIGhpc3Rvcnlcblx0XHRpZiAoIGNvbnRhaW5zICkge1xuXHRcdFx0c2V0R2xvYmFsRXZhbCggdG1wICk7XG5cdFx0fVxuXG5cdFx0Ly8gQ2FwdHVyZSBleGVjdXRhYmxlc1xuXHRcdGlmICggc2NyaXB0cyApIHtcblx0XHRcdGogPSAwO1xuXHRcdFx0d2hpbGUgKCAoIGVsZW0gPSB0bXBbIGorKyBdICkgKSB7XG5cdFx0XHRcdGlmICggcnNjcmlwdFR5cGUudGVzdCggZWxlbS50eXBlIHx8IFwiXCIgKSApIHtcblx0XHRcdFx0XHRzY3JpcHRzLnB1c2goIGVsZW0gKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiBmcmFnbWVudDtcbn1cblxuXG4oIGZ1bmN0aW9uKCkge1xuXHR2YXIgZnJhZ21lbnQgPSBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCksXG5cdFx0ZGl2ID0gZnJhZ21lbnQuYXBwZW5kQ2hpbGQoIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwiZGl2XCIgKSApLFxuXHRcdGlucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJpbnB1dFwiICk7XG5cblx0Ly8gU3VwcG9ydDogQW5kcm9pZCA0LjAgLSA0LjMgb25seVxuXHQvLyBDaGVjayBzdGF0ZSBsb3N0IGlmIHRoZSBuYW1lIGlzIHNldCAoIzExMjE3KVxuXHQvLyBTdXBwb3J0OiBXaW5kb3dzIFdlYiBBcHBzIChXV0EpXG5cdC8vIGBuYW1lYCBhbmQgYHR5cGVgIG11c3QgdXNlIC5zZXRBdHRyaWJ1dGUgZm9yIFdXQSAoIzE0OTAxKVxuXHRpbnB1dC5zZXRBdHRyaWJ1dGUoIFwidHlwZVwiLCBcInJhZGlvXCIgKTtcblx0aW5wdXQuc2V0QXR0cmlidXRlKCBcImNoZWNrZWRcIiwgXCJjaGVja2VkXCIgKTtcblx0aW5wdXQuc2V0QXR0cmlidXRlKCBcIm5hbWVcIiwgXCJ0XCIgKTtcblxuXHRkaXYuYXBwZW5kQ2hpbGQoIGlucHV0ICk7XG5cblx0Ly8gU3VwcG9ydDogQW5kcm9pZCA8PTQuMSBvbmx5XG5cdC8vIE9sZGVyIFdlYktpdCBkb2Vzbid0IGNsb25lIGNoZWNrZWQgc3RhdGUgY29ycmVjdGx5IGluIGZyYWdtZW50c1xuXHRzdXBwb3J0LmNoZWNrQ2xvbmUgPSBkaXYuY2xvbmVOb2RlKCB0cnVlICkuY2xvbmVOb2RlKCB0cnVlICkubGFzdENoaWxkLmNoZWNrZWQ7XG5cblx0Ly8gU3VwcG9ydDogSUUgPD0xMSBvbmx5XG5cdC8vIE1ha2Ugc3VyZSB0ZXh0YXJlYSAoYW5kIGNoZWNrYm94KSBkZWZhdWx0VmFsdWUgaXMgcHJvcGVybHkgY2xvbmVkXG5cdGRpdi5pbm5lckhUTUwgPSBcIjx0ZXh0YXJlYT54PC90ZXh0YXJlYT5cIjtcblx0c3VwcG9ydC5ub0Nsb25lQ2hlY2tlZCA9ICEhZGl2LmNsb25lTm9kZSggdHJ1ZSApLmxhc3RDaGlsZC5kZWZhdWx0VmFsdWU7XG59ICkoKTtcbnZhciBkb2N1bWVudEVsZW1lbnQgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG5cblxuXG52YXJcblx0cmtleUV2ZW50ID0gL15rZXkvLFxuXHRybW91c2VFdmVudCA9IC9eKD86bW91c2V8cG9pbnRlcnxjb250ZXh0bWVudXxkcmFnfGRyb3ApfGNsaWNrLyxcblx0cnR5cGVuYW1lc3BhY2UgPSAvXihbXi5dKikoPzpcXC4oLispfCkvO1xuXG5mdW5jdGlvbiByZXR1cm5UcnVlKCkge1xuXHRyZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gcmV0dXJuRmFsc2UoKSB7XG5cdHJldHVybiBmYWxzZTtcbn1cblxuLy8gU3VwcG9ydDogSUUgPD05IG9ubHlcbi8vIFNlZSAjMTMzOTMgZm9yIG1vcmUgaW5mb1xuZnVuY3Rpb24gc2FmZUFjdGl2ZUVsZW1lbnQoKSB7XG5cdHRyeSB7XG5cdFx0cmV0dXJuIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7XG5cdH0gY2F0Y2ggKCBlcnIgKSB7IH1cbn1cblxuZnVuY3Rpb24gb24oIGVsZW0sIHR5cGVzLCBzZWxlY3RvciwgZGF0YSwgZm4sIG9uZSApIHtcblx0dmFyIG9yaWdGbiwgdHlwZTtcblxuXHQvLyBUeXBlcyBjYW4gYmUgYSBtYXAgb2YgdHlwZXMvaGFuZGxlcnNcblx0aWYgKCB0eXBlb2YgdHlwZXMgPT09IFwib2JqZWN0XCIgKSB7XG5cblx0XHQvLyAoIHR5cGVzLU9iamVjdCwgc2VsZWN0b3IsIGRhdGEgKVxuXHRcdGlmICggdHlwZW9mIHNlbGVjdG9yICE9PSBcInN0cmluZ1wiICkge1xuXG5cdFx0XHQvLyAoIHR5cGVzLU9iamVjdCwgZGF0YSApXG5cdFx0XHRkYXRhID0gZGF0YSB8fCBzZWxlY3Rvcjtcblx0XHRcdHNlbGVjdG9yID0gdW5kZWZpbmVkO1xuXHRcdH1cblx0XHRmb3IgKCB0eXBlIGluIHR5cGVzICkge1xuXHRcdFx0b24oIGVsZW0sIHR5cGUsIHNlbGVjdG9yLCBkYXRhLCB0eXBlc1sgdHlwZSBdLCBvbmUgKTtcblx0XHR9XG5cdFx0cmV0dXJuIGVsZW07XG5cdH1cblxuXHRpZiAoIGRhdGEgPT0gbnVsbCAmJiBmbiA9PSBudWxsICkge1xuXG5cdFx0Ly8gKCB0eXBlcywgZm4gKVxuXHRcdGZuID0gc2VsZWN0b3I7XG5cdFx0ZGF0YSA9IHNlbGVjdG9yID0gdW5kZWZpbmVkO1xuXHR9IGVsc2UgaWYgKCBmbiA9PSBudWxsICkge1xuXHRcdGlmICggdHlwZW9mIHNlbGVjdG9yID09PSBcInN0cmluZ1wiICkge1xuXG5cdFx0XHQvLyAoIHR5cGVzLCBzZWxlY3RvciwgZm4gKVxuXHRcdFx0Zm4gPSBkYXRhO1xuXHRcdFx0ZGF0YSA9IHVuZGVmaW5lZDtcblx0XHR9IGVsc2Uge1xuXG5cdFx0XHQvLyAoIHR5cGVzLCBkYXRhLCBmbiApXG5cdFx0XHRmbiA9IGRhdGE7XG5cdFx0XHRkYXRhID0gc2VsZWN0b3I7XG5cdFx0XHRzZWxlY3RvciA9IHVuZGVmaW5lZDtcblx0XHR9XG5cdH1cblx0aWYgKCBmbiA9PT0gZmFsc2UgKSB7XG5cdFx0Zm4gPSByZXR1cm5GYWxzZTtcblx0fSBlbHNlIGlmICggIWZuICkge1xuXHRcdHJldHVybiBlbGVtO1xuXHR9XG5cblx0aWYgKCBvbmUgPT09IDEgKSB7XG5cdFx0b3JpZ0ZuID0gZm47XG5cdFx0Zm4gPSBmdW5jdGlvbiggZXZlbnQgKSB7XG5cblx0XHRcdC8vIENhbiB1c2UgYW4gZW1wdHkgc2V0LCBzaW5jZSBldmVudCBjb250YWlucyB0aGUgaW5mb1xuXHRcdFx0alF1ZXJ5KCkub2ZmKCBldmVudCApO1xuXHRcdFx0cmV0dXJuIG9yaWdGbi5hcHBseSggdGhpcywgYXJndW1lbnRzICk7XG5cdFx0fTtcblxuXHRcdC8vIFVzZSBzYW1lIGd1aWQgc28gY2FsbGVyIGNhbiByZW1vdmUgdXNpbmcgb3JpZ0ZuXG5cdFx0Zm4uZ3VpZCA9IG9yaWdGbi5ndWlkIHx8ICggb3JpZ0ZuLmd1aWQgPSBqUXVlcnkuZ3VpZCsrICk7XG5cdH1cblx0cmV0dXJuIGVsZW0uZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0alF1ZXJ5LmV2ZW50LmFkZCggdGhpcywgdHlwZXMsIGZuLCBkYXRhLCBzZWxlY3RvciApO1xuXHR9ICk7XG59XG5cbi8qXG4gKiBIZWxwZXIgZnVuY3Rpb25zIGZvciBtYW5hZ2luZyBldmVudHMgLS0gbm90IHBhcnQgb2YgdGhlIHB1YmxpYyBpbnRlcmZhY2UuXG4gKiBQcm9wcyB0byBEZWFuIEVkd2FyZHMnIGFkZEV2ZW50IGxpYnJhcnkgZm9yIG1hbnkgb2YgdGhlIGlkZWFzLlxuICovXG5qUXVlcnkuZXZlbnQgPSB7XG5cblx0Z2xvYmFsOiB7fSxcblxuXHRhZGQ6IGZ1bmN0aW9uKCBlbGVtLCB0eXBlcywgaGFuZGxlciwgZGF0YSwgc2VsZWN0b3IgKSB7XG5cblx0XHR2YXIgaGFuZGxlT2JqSW4sIGV2ZW50SGFuZGxlLCB0bXAsXG5cdFx0XHRldmVudHMsIHQsIGhhbmRsZU9iaixcblx0XHRcdHNwZWNpYWwsIGhhbmRsZXJzLCB0eXBlLCBuYW1lc3BhY2VzLCBvcmlnVHlwZSxcblx0XHRcdGVsZW1EYXRhID0gZGF0YVByaXYuZ2V0KCBlbGVtICk7XG5cblx0XHQvLyBEb24ndCBhdHRhY2ggZXZlbnRzIHRvIG5vRGF0YSBvciB0ZXh0L2NvbW1lbnQgbm9kZXMgKGJ1dCBhbGxvdyBwbGFpbiBvYmplY3RzKVxuXHRcdGlmICggIWVsZW1EYXRhICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIENhbGxlciBjYW4gcGFzcyBpbiBhbiBvYmplY3Qgb2YgY3VzdG9tIGRhdGEgaW4gbGlldSBvZiB0aGUgaGFuZGxlclxuXHRcdGlmICggaGFuZGxlci5oYW5kbGVyICkge1xuXHRcdFx0aGFuZGxlT2JqSW4gPSBoYW5kbGVyO1xuXHRcdFx0aGFuZGxlciA9IGhhbmRsZU9iakluLmhhbmRsZXI7XG5cdFx0XHRzZWxlY3RvciA9IGhhbmRsZU9iakluLnNlbGVjdG9yO1xuXHRcdH1cblxuXHRcdC8vIEVuc3VyZSB0aGF0IGludmFsaWQgc2VsZWN0b3JzIHRocm93IGV4Y2VwdGlvbnMgYXQgYXR0YWNoIHRpbWVcblx0XHQvLyBFdmFsdWF0ZSBhZ2FpbnN0IGRvY3VtZW50RWxlbWVudCBpbiBjYXNlIGVsZW0gaXMgYSBub24tZWxlbWVudCBub2RlIChlLmcuLCBkb2N1bWVudClcblx0XHRpZiAoIHNlbGVjdG9yICkge1xuXHRcdFx0alF1ZXJ5LmZpbmQubWF0Y2hlc1NlbGVjdG9yKCBkb2N1bWVudEVsZW1lbnQsIHNlbGVjdG9yICk7XG5cdFx0fVxuXG5cdFx0Ly8gTWFrZSBzdXJlIHRoYXQgdGhlIGhhbmRsZXIgaGFzIGEgdW5pcXVlIElELCB1c2VkIHRvIGZpbmQvcmVtb3ZlIGl0IGxhdGVyXG5cdFx0aWYgKCAhaGFuZGxlci5ndWlkICkge1xuXHRcdFx0aGFuZGxlci5ndWlkID0galF1ZXJ5Lmd1aWQrKztcblx0XHR9XG5cblx0XHQvLyBJbml0IHRoZSBlbGVtZW50J3MgZXZlbnQgc3RydWN0dXJlIGFuZCBtYWluIGhhbmRsZXIsIGlmIHRoaXMgaXMgdGhlIGZpcnN0XG5cdFx0aWYgKCAhKCBldmVudHMgPSBlbGVtRGF0YS5ldmVudHMgKSApIHtcblx0XHRcdGV2ZW50cyA9IGVsZW1EYXRhLmV2ZW50cyA9IHt9O1xuXHRcdH1cblx0XHRpZiAoICEoIGV2ZW50SGFuZGxlID0gZWxlbURhdGEuaGFuZGxlICkgKSB7XG5cdFx0XHRldmVudEhhbmRsZSA9IGVsZW1EYXRhLmhhbmRsZSA9IGZ1bmN0aW9uKCBlICkge1xuXG5cdFx0XHRcdC8vIERpc2NhcmQgdGhlIHNlY29uZCBldmVudCBvZiBhIGpRdWVyeS5ldmVudC50cmlnZ2VyKCkgYW5kXG5cdFx0XHRcdC8vIHdoZW4gYW4gZXZlbnQgaXMgY2FsbGVkIGFmdGVyIGEgcGFnZSBoYXMgdW5sb2FkZWRcblx0XHRcdFx0cmV0dXJuIHR5cGVvZiBqUXVlcnkgIT09IFwidW5kZWZpbmVkXCIgJiYgalF1ZXJ5LmV2ZW50LnRyaWdnZXJlZCAhPT0gZS50eXBlID9cblx0XHRcdFx0XHRqUXVlcnkuZXZlbnQuZGlzcGF0Y2guYXBwbHkoIGVsZW0sIGFyZ3VtZW50cyApIDogdW5kZWZpbmVkO1xuXHRcdFx0fTtcblx0XHR9XG5cblx0XHQvLyBIYW5kbGUgbXVsdGlwbGUgZXZlbnRzIHNlcGFyYXRlZCBieSBhIHNwYWNlXG5cdFx0dHlwZXMgPSAoIHR5cGVzIHx8IFwiXCIgKS5tYXRjaCggcm5vdGh0bWx3aGl0ZSApIHx8IFsgXCJcIiBdO1xuXHRcdHQgPSB0eXBlcy5sZW5ndGg7XG5cdFx0d2hpbGUgKCB0LS0gKSB7XG5cdFx0XHR0bXAgPSBydHlwZW5hbWVzcGFjZS5leGVjKCB0eXBlc1sgdCBdICkgfHwgW107XG5cdFx0XHR0eXBlID0gb3JpZ1R5cGUgPSB0bXBbIDEgXTtcblx0XHRcdG5hbWVzcGFjZXMgPSAoIHRtcFsgMiBdIHx8IFwiXCIgKS5zcGxpdCggXCIuXCIgKS5zb3J0KCk7XG5cblx0XHRcdC8vIFRoZXJlICptdXN0KiBiZSBhIHR5cGUsIG5vIGF0dGFjaGluZyBuYW1lc3BhY2Utb25seSBoYW5kbGVyc1xuXHRcdFx0aWYgKCAhdHlwZSApIHtcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cblx0XHRcdC8vIElmIGV2ZW50IGNoYW5nZXMgaXRzIHR5cGUsIHVzZSB0aGUgc3BlY2lhbCBldmVudCBoYW5kbGVycyBmb3IgdGhlIGNoYW5nZWQgdHlwZVxuXHRcdFx0c3BlY2lhbCA9IGpRdWVyeS5ldmVudC5zcGVjaWFsWyB0eXBlIF0gfHwge307XG5cblx0XHRcdC8vIElmIHNlbGVjdG9yIGRlZmluZWQsIGRldGVybWluZSBzcGVjaWFsIGV2ZW50IGFwaSB0eXBlLCBvdGhlcndpc2UgZ2l2ZW4gdHlwZVxuXHRcdFx0dHlwZSA9ICggc2VsZWN0b3IgPyBzcGVjaWFsLmRlbGVnYXRlVHlwZSA6IHNwZWNpYWwuYmluZFR5cGUgKSB8fCB0eXBlO1xuXG5cdFx0XHQvLyBVcGRhdGUgc3BlY2lhbCBiYXNlZCBvbiBuZXdseSByZXNldCB0eXBlXG5cdFx0XHRzcGVjaWFsID0galF1ZXJ5LmV2ZW50LnNwZWNpYWxbIHR5cGUgXSB8fCB7fTtcblxuXHRcdFx0Ly8gaGFuZGxlT2JqIGlzIHBhc3NlZCB0byBhbGwgZXZlbnQgaGFuZGxlcnNcblx0XHRcdGhhbmRsZU9iaiA9IGpRdWVyeS5leHRlbmQoIHtcblx0XHRcdFx0dHlwZTogdHlwZSxcblx0XHRcdFx0b3JpZ1R5cGU6IG9yaWdUeXBlLFxuXHRcdFx0XHRkYXRhOiBkYXRhLFxuXHRcdFx0XHRoYW5kbGVyOiBoYW5kbGVyLFxuXHRcdFx0XHRndWlkOiBoYW5kbGVyLmd1aWQsXG5cdFx0XHRcdHNlbGVjdG9yOiBzZWxlY3Rvcixcblx0XHRcdFx0bmVlZHNDb250ZXh0OiBzZWxlY3RvciAmJiBqUXVlcnkuZXhwci5tYXRjaC5uZWVkc0NvbnRleHQudGVzdCggc2VsZWN0b3IgKSxcblx0XHRcdFx0bmFtZXNwYWNlOiBuYW1lc3BhY2VzLmpvaW4oIFwiLlwiIClcblx0XHRcdH0sIGhhbmRsZU9iakluICk7XG5cblx0XHRcdC8vIEluaXQgdGhlIGV2ZW50IGhhbmRsZXIgcXVldWUgaWYgd2UncmUgdGhlIGZpcnN0XG5cdFx0XHRpZiAoICEoIGhhbmRsZXJzID0gZXZlbnRzWyB0eXBlIF0gKSApIHtcblx0XHRcdFx0aGFuZGxlcnMgPSBldmVudHNbIHR5cGUgXSA9IFtdO1xuXHRcdFx0XHRoYW5kbGVycy5kZWxlZ2F0ZUNvdW50ID0gMDtcblxuXHRcdFx0XHQvLyBPbmx5IHVzZSBhZGRFdmVudExpc3RlbmVyIGlmIHRoZSBzcGVjaWFsIGV2ZW50cyBoYW5kbGVyIHJldHVybnMgZmFsc2Vcblx0XHRcdFx0aWYgKCAhc3BlY2lhbC5zZXR1cCB8fFxuXHRcdFx0XHRcdHNwZWNpYWwuc2V0dXAuY2FsbCggZWxlbSwgZGF0YSwgbmFtZXNwYWNlcywgZXZlbnRIYW5kbGUgKSA9PT0gZmFsc2UgKSB7XG5cblx0XHRcdFx0XHRpZiAoIGVsZW0uYWRkRXZlbnRMaXN0ZW5lciApIHtcblx0XHRcdFx0XHRcdGVsZW0uYWRkRXZlbnRMaXN0ZW5lciggdHlwZSwgZXZlbnRIYW5kbGUgKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0aWYgKCBzcGVjaWFsLmFkZCApIHtcblx0XHRcdFx0c3BlY2lhbC5hZGQuY2FsbCggZWxlbSwgaGFuZGxlT2JqICk7XG5cblx0XHRcdFx0aWYgKCAhaGFuZGxlT2JqLmhhbmRsZXIuZ3VpZCApIHtcblx0XHRcdFx0XHRoYW5kbGVPYmouaGFuZGxlci5ndWlkID0gaGFuZGxlci5ndWlkO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIEFkZCB0byB0aGUgZWxlbWVudCdzIGhhbmRsZXIgbGlzdCwgZGVsZWdhdGVzIGluIGZyb250XG5cdFx0XHRpZiAoIHNlbGVjdG9yICkge1xuXHRcdFx0XHRoYW5kbGVycy5zcGxpY2UoIGhhbmRsZXJzLmRlbGVnYXRlQ291bnQrKywgMCwgaGFuZGxlT2JqICk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRoYW5kbGVycy5wdXNoKCBoYW5kbGVPYmogKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gS2VlcCB0cmFjayBvZiB3aGljaCBldmVudHMgaGF2ZSBldmVyIGJlZW4gdXNlZCwgZm9yIGV2ZW50IG9wdGltaXphdGlvblxuXHRcdFx0alF1ZXJ5LmV2ZW50Lmdsb2JhbFsgdHlwZSBdID0gdHJ1ZTtcblx0XHR9XG5cblx0fSxcblxuXHQvLyBEZXRhY2ggYW4gZXZlbnQgb3Igc2V0IG9mIGV2ZW50cyBmcm9tIGFuIGVsZW1lbnRcblx0cmVtb3ZlOiBmdW5jdGlvbiggZWxlbSwgdHlwZXMsIGhhbmRsZXIsIHNlbGVjdG9yLCBtYXBwZWRUeXBlcyApIHtcblxuXHRcdHZhciBqLCBvcmlnQ291bnQsIHRtcCxcblx0XHRcdGV2ZW50cywgdCwgaGFuZGxlT2JqLFxuXHRcdFx0c3BlY2lhbCwgaGFuZGxlcnMsIHR5cGUsIG5hbWVzcGFjZXMsIG9yaWdUeXBlLFxuXHRcdFx0ZWxlbURhdGEgPSBkYXRhUHJpdi5oYXNEYXRhKCBlbGVtICkgJiYgZGF0YVByaXYuZ2V0KCBlbGVtICk7XG5cblx0XHRpZiAoICFlbGVtRGF0YSB8fCAhKCBldmVudHMgPSBlbGVtRGF0YS5ldmVudHMgKSApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBPbmNlIGZvciBlYWNoIHR5cGUubmFtZXNwYWNlIGluIHR5cGVzOyB0eXBlIG1heSBiZSBvbWl0dGVkXG5cdFx0dHlwZXMgPSAoIHR5cGVzIHx8IFwiXCIgKS5tYXRjaCggcm5vdGh0bWx3aGl0ZSApIHx8IFsgXCJcIiBdO1xuXHRcdHQgPSB0eXBlcy5sZW5ndGg7XG5cdFx0d2hpbGUgKCB0LS0gKSB7XG5cdFx0XHR0bXAgPSBydHlwZW5hbWVzcGFjZS5leGVjKCB0eXBlc1sgdCBdICkgfHwgW107XG5cdFx0XHR0eXBlID0gb3JpZ1R5cGUgPSB0bXBbIDEgXTtcblx0XHRcdG5hbWVzcGFjZXMgPSAoIHRtcFsgMiBdIHx8IFwiXCIgKS5zcGxpdCggXCIuXCIgKS5zb3J0KCk7XG5cblx0XHRcdC8vIFVuYmluZCBhbGwgZXZlbnRzIChvbiB0aGlzIG5hbWVzcGFjZSwgaWYgcHJvdmlkZWQpIGZvciB0aGUgZWxlbWVudFxuXHRcdFx0aWYgKCAhdHlwZSApIHtcblx0XHRcdFx0Zm9yICggdHlwZSBpbiBldmVudHMgKSB7XG5cdFx0XHRcdFx0alF1ZXJ5LmV2ZW50LnJlbW92ZSggZWxlbSwgdHlwZSArIHR5cGVzWyB0IF0sIGhhbmRsZXIsIHNlbGVjdG9yLCB0cnVlICk7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cblx0XHRcdHNwZWNpYWwgPSBqUXVlcnkuZXZlbnQuc3BlY2lhbFsgdHlwZSBdIHx8IHt9O1xuXHRcdFx0dHlwZSA9ICggc2VsZWN0b3IgPyBzcGVjaWFsLmRlbGVnYXRlVHlwZSA6IHNwZWNpYWwuYmluZFR5cGUgKSB8fCB0eXBlO1xuXHRcdFx0aGFuZGxlcnMgPSBldmVudHNbIHR5cGUgXSB8fCBbXTtcblx0XHRcdHRtcCA9IHRtcFsgMiBdICYmXG5cdFx0XHRcdG5ldyBSZWdFeHAoIFwiKF58XFxcXC4pXCIgKyBuYW1lc3BhY2VzLmpvaW4oIFwiXFxcXC4oPzouKlxcXFwufClcIiApICsgXCIoXFxcXC58JClcIiApO1xuXG5cdFx0XHQvLyBSZW1vdmUgbWF0Y2hpbmcgZXZlbnRzXG5cdFx0XHRvcmlnQ291bnQgPSBqID0gaGFuZGxlcnMubGVuZ3RoO1xuXHRcdFx0d2hpbGUgKCBqLS0gKSB7XG5cdFx0XHRcdGhhbmRsZU9iaiA9IGhhbmRsZXJzWyBqIF07XG5cblx0XHRcdFx0aWYgKCAoIG1hcHBlZFR5cGVzIHx8IG9yaWdUeXBlID09PSBoYW5kbGVPYmoub3JpZ1R5cGUgKSAmJlxuXHRcdFx0XHRcdCggIWhhbmRsZXIgfHwgaGFuZGxlci5ndWlkID09PSBoYW5kbGVPYmouZ3VpZCApICYmXG5cdFx0XHRcdFx0KCAhdG1wIHx8IHRtcC50ZXN0KCBoYW5kbGVPYmoubmFtZXNwYWNlICkgKSAmJlxuXHRcdFx0XHRcdCggIXNlbGVjdG9yIHx8IHNlbGVjdG9yID09PSBoYW5kbGVPYmouc2VsZWN0b3IgfHxcblx0XHRcdFx0XHRcdHNlbGVjdG9yID09PSBcIioqXCIgJiYgaGFuZGxlT2JqLnNlbGVjdG9yICkgKSB7XG5cdFx0XHRcdFx0aGFuZGxlcnMuc3BsaWNlKCBqLCAxICk7XG5cblx0XHRcdFx0XHRpZiAoIGhhbmRsZU9iai5zZWxlY3RvciApIHtcblx0XHRcdFx0XHRcdGhhbmRsZXJzLmRlbGVnYXRlQ291bnQtLTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0aWYgKCBzcGVjaWFsLnJlbW92ZSApIHtcblx0XHRcdFx0XHRcdHNwZWNpYWwucmVtb3ZlLmNhbGwoIGVsZW0sIGhhbmRsZU9iaiApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBSZW1vdmUgZ2VuZXJpYyBldmVudCBoYW5kbGVyIGlmIHdlIHJlbW92ZWQgc29tZXRoaW5nIGFuZCBubyBtb3JlIGhhbmRsZXJzIGV4aXN0XG5cdFx0XHQvLyAoYXZvaWRzIHBvdGVudGlhbCBmb3IgZW5kbGVzcyByZWN1cnNpb24gZHVyaW5nIHJlbW92YWwgb2Ygc3BlY2lhbCBldmVudCBoYW5kbGVycylcblx0XHRcdGlmICggb3JpZ0NvdW50ICYmICFoYW5kbGVycy5sZW5ndGggKSB7XG5cdFx0XHRcdGlmICggIXNwZWNpYWwudGVhcmRvd24gfHxcblx0XHRcdFx0XHRzcGVjaWFsLnRlYXJkb3duLmNhbGwoIGVsZW0sIG5hbWVzcGFjZXMsIGVsZW1EYXRhLmhhbmRsZSApID09PSBmYWxzZSApIHtcblxuXHRcdFx0XHRcdGpRdWVyeS5yZW1vdmVFdmVudCggZWxlbSwgdHlwZSwgZWxlbURhdGEuaGFuZGxlICk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRkZWxldGUgZXZlbnRzWyB0eXBlIF07XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gUmVtb3ZlIGRhdGEgYW5kIHRoZSBleHBhbmRvIGlmIGl0J3Mgbm8gbG9uZ2VyIHVzZWRcblx0XHRpZiAoIGpRdWVyeS5pc0VtcHR5T2JqZWN0KCBldmVudHMgKSApIHtcblx0XHRcdGRhdGFQcml2LnJlbW92ZSggZWxlbSwgXCJoYW5kbGUgZXZlbnRzXCIgKTtcblx0XHR9XG5cdH0sXG5cblx0ZGlzcGF0Y2g6IGZ1bmN0aW9uKCBuYXRpdmVFdmVudCApIHtcblxuXHRcdC8vIE1ha2UgYSB3cml0YWJsZSBqUXVlcnkuRXZlbnQgZnJvbSB0aGUgbmF0aXZlIGV2ZW50IG9iamVjdFxuXHRcdHZhciBldmVudCA9IGpRdWVyeS5ldmVudC5maXgoIG5hdGl2ZUV2ZW50ICk7XG5cblx0XHR2YXIgaSwgaiwgcmV0LCBtYXRjaGVkLCBoYW5kbGVPYmosIGhhbmRsZXJRdWV1ZSxcblx0XHRcdGFyZ3MgPSBuZXcgQXJyYXkoIGFyZ3VtZW50cy5sZW5ndGggKSxcblx0XHRcdGhhbmRsZXJzID0gKCBkYXRhUHJpdi5nZXQoIHRoaXMsIFwiZXZlbnRzXCIgKSB8fCB7fSApWyBldmVudC50eXBlIF0gfHwgW10sXG5cdFx0XHRzcGVjaWFsID0galF1ZXJ5LmV2ZW50LnNwZWNpYWxbIGV2ZW50LnR5cGUgXSB8fCB7fTtcblxuXHRcdC8vIFVzZSB0aGUgZml4LWVkIGpRdWVyeS5FdmVudCByYXRoZXIgdGhhbiB0aGUgKHJlYWQtb25seSkgbmF0aXZlIGV2ZW50XG5cdFx0YXJnc1sgMCBdID0gZXZlbnQ7XG5cblx0XHRmb3IgKCBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKyApIHtcblx0XHRcdGFyZ3NbIGkgXSA9IGFyZ3VtZW50c1sgaSBdO1xuXHRcdH1cblxuXHRcdGV2ZW50LmRlbGVnYXRlVGFyZ2V0ID0gdGhpcztcblxuXHRcdC8vIENhbGwgdGhlIHByZURpc3BhdGNoIGhvb2sgZm9yIHRoZSBtYXBwZWQgdHlwZSwgYW5kIGxldCBpdCBiYWlsIGlmIGRlc2lyZWRcblx0XHRpZiAoIHNwZWNpYWwucHJlRGlzcGF0Y2ggJiYgc3BlY2lhbC5wcmVEaXNwYXRjaC5jYWxsKCB0aGlzLCBldmVudCApID09PSBmYWxzZSApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBEZXRlcm1pbmUgaGFuZGxlcnNcblx0XHRoYW5kbGVyUXVldWUgPSBqUXVlcnkuZXZlbnQuaGFuZGxlcnMuY2FsbCggdGhpcywgZXZlbnQsIGhhbmRsZXJzICk7XG5cblx0XHQvLyBSdW4gZGVsZWdhdGVzIGZpcnN0OyB0aGV5IG1heSB3YW50IHRvIHN0b3AgcHJvcGFnYXRpb24gYmVuZWF0aCB1c1xuXHRcdGkgPSAwO1xuXHRcdHdoaWxlICggKCBtYXRjaGVkID0gaGFuZGxlclF1ZXVlWyBpKysgXSApICYmICFldmVudC5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpICkge1xuXHRcdFx0ZXZlbnQuY3VycmVudFRhcmdldCA9IG1hdGNoZWQuZWxlbTtcblxuXHRcdFx0aiA9IDA7XG5cdFx0XHR3aGlsZSAoICggaGFuZGxlT2JqID0gbWF0Y2hlZC5oYW5kbGVyc1sgaisrIF0gKSAmJlxuXHRcdFx0XHQhZXZlbnQuaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQoKSApIHtcblxuXHRcdFx0XHQvLyBUcmlnZ2VyZWQgZXZlbnQgbXVzdCBlaXRoZXIgMSkgaGF2ZSBubyBuYW1lc3BhY2UsIG9yIDIpIGhhdmUgbmFtZXNwYWNlKHMpXG5cdFx0XHRcdC8vIGEgc3Vic2V0IG9yIGVxdWFsIHRvIHRob3NlIGluIHRoZSBib3VuZCBldmVudCAoYm90aCBjYW4gaGF2ZSBubyBuYW1lc3BhY2UpLlxuXHRcdFx0XHRpZiAoICFldmVudC5ybmFtZXNwYWNlIHx8IGV2ZW50LnJuYW1lc3BhY2UudGVzdCggaGFuZGxlT2JqLm5hbWVzcGFjZSApICkge1xuXG5cdFx0XHRcdFx0ZXZlbnQuaGFuZGxlT2JqID0gaGFuZGxlT2JqO1xuXHRcdFx0XHRcdGV2ZW50LmRhdGEgPSBoYW5kbGVPYmouZGF0YTtcblxuXHRcdFx0XHRcdHJldCA9ICggKCBqUXVlcnkuZXZlbnQuc3BlY2lhbFsgaGFuZGxlT2JqLm9yaWdUeXBlIF0gfHwge30gKS5oYW5kbGUgfHxcblx0XHRcdFx0XHRcdGhhbmRsZU9iai5oYW5kbGVyICkuYXBwbHkoIG1hdGNoZWQuZWxlbSwgYXJncyApO1xuXG5cdFx0XHRcdFx0aWYgKCByZXQgIT09IHVuZGVmaW5lZCApIHtcblx0XHRcdFx0XHRcdGlmICggKCBldmVudC5yZXN1bHQgPSByZXQgKSA9PT0gZmFsc2UgKSB7XG5cdFx0XHRcdFx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHRcdFx0XHRcdGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIENhbGwgdGhlIHBvc3REaXNwYXRjaCBob29rIGZvciB0aGUgbWFwcGVkIHR5cGVcblx0XHRpZiAoIHNwZWNpYWwucG9zdERpc3BhdGNoICkge1xuXHRcdFx0c3BlY2lhbC5wb3N0RGlzcGF0Y2guY2FsbCggdGhpcywgZXZlbnQgKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gZXZlbnQucmVzdWx0O1xuXHR9LFxuXG5cdGhhbmRsZXJzOiBmdW5jdGlvbiggZXZlbnQsIGhhbmRsZXJzICkge1xuXHRcdHZhciBpLCBoYW5kbGVPYmosIHNlbCwgbWF0Y2hlZEhhbmRsZXJzLCBtYXRjaGVkU2VsZWN0b3JzLFxuXHRcdFx0aGFuZGxlclF1ZXVlID0gW10sXG5cdFx0XHRkZWxlZ2F0ZUNvdW50ID0gaGFuZGxlcnMuZGVsZWdhdGVDb3VudCxcblx0XHRcdGN1ciA9IGV2ZW50LnRhcmdldDtcblxuXHRcdC8vIEZpbmQgZGVsZWdhdGUgaGFuZGxlcnNcblx0XHRpZiAoIGRlbGVnYXRlQ291bnQgJiZcblxuXHRcdFx0Ly8gU3VwcG9ydDogSUUgPD05XG5cdFx0XHQvLyBCbGFjay1ob2xlIFNWRyA8dXNlPiBpbnN0YW5jZSB0cmVlcyAodHJhYy0xMzE4MClcblx0XHRcdGN1ci5ub2RlVHlwZSAmJlxuXG5cdFx0XHQvLyBTdXBwb3J0OiBGaXJlZm94IDw9NDJcblx0XHRcdC8vIFN1cHByZXNzIHNwZWMtdmlvbGF0aW5nIGNsaWNrcyBpbmRpY2F0aW5nIGEgbm9uLXByaW1hcnkgcG9pbnRlciBidXR0b24gKHRyYWMtMzg2MSlcblx0XHRcdC8vIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9ET00tTGV2ZWwtMy1FdmVudHMvI2V2ZW50LXR5cGUtY2xpY2tcblx0XHRcdC8vIFN1cHBvcnQ6IElFIDExIG9ubHlcblx0XHRcdC8vIC4uLmJ1dCBub3QgYXJyb3cga2V5IFwiY2xpY2tzXCIgb2YgcmFkaW8gaW5wdXRzLCB3aGljaCBjYW4gaGF2ZSBgYnV0dG9uYCAtMSAoZ2gtMjM0Mylcblx0XHRcdCEoIGV2ZW50LnR5cGUgPT09IFwiY2xpY2tcIiAmJiBldmVudC5idXR0b24gPj0gMSApICkge1xuXG5cdFx0XHRmb3IgKCA7IGN1ciAhPT0gdGhpczsgY3VyID0gY3VyLnBhcmVudE5vZGUgfHwgdGhpcyApIHtcblxuXHRcdFx0XHQvLyBEb24ndCBjaGVjayBub24tZWxlbWVudHMgKCMxMzIwOClcblx0XHRcdFx0Ly8gRG9uJ3QgcHJvY2VzcyBjbGlja3Mgb24gZGlzYWJsZWQgZWxlbWVudHMgKCM2OTExLCAjODE2NSwgIzExMzgyLCAjMTE3NjQpXG5cdFx0XHRcdGlmICggY3VyLm5vZGVUeXBlID09PSAxICYmICEoIGV2ZW50LnR5cGUgPT09IFwiY2xpY2tcIiAmJiBjdXIuZGlzYWJsZWQgPT09IHRydWUgKSApIHtcblx0XHRcdFx0XHRtYXRjaGVkSGFuZGxlcnMgPSBbXTtcblx0XHRcdFx0XHRtYXRjaGVkU2VsZWN0b3JzID0ge307XG5cdFx0XHRcdFx0Zm9yICggaSA9IDA7IGkgPCBkZWxlZ2F0ZUNvdW50OyBpKysgKSB7XG5cdFx0XHRcdFx0XHRoYW5kbGVPYmogPSBoYW5kbGVyc1sgaSBdO1xuXG5cdFx0XHRcdFx0XHQvLyBEb24ndCBjb25mbGljdCB3aXRoIE9iamVjdC5wcm90b3R5cGUgcHJvcGVydGllcyAoIzEzMjAzKVxuXHRcdFx0XHRcdFx0c2VsID0gaGFuZGxlT2JqLnNlbGVjdG9yICsgXCIgXCI7XG5cblx0XHRcdFx0XHRcdGlmICggbWF0Y2hlZFNlbGVjdG9yc1sgc2VsIF0gPT09IHVuZGVmaW5lZCApIHtcblx0XHRcdFx0XHRcdFx0bWF0Y2hlZFNlbGVjdG9yc1sgc2VsIF0gPSBoYW5kbGVPYmoubmVlZHNDb250ZXh0ID9cblx0XHRcdFx0XHRcdFx0XHRqUXVlcnkoIHNlbCwgdGhpcyApLmluZGV4KCBjdXIgKSA+IC0xIDpcblx0XHRcdFx0XHRcdFx0XHRqUXVlcnkuZmluZCggc2VsLCB0aGlzLCBudWxsLCBbIGN1ciBdICkubGVuZ3RoO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0aWYgKCBtYXRjaGVkU2VsZWN0b3JzWyBzZWwgXSApIHtcblx0XHRcdFx0XHRcdFx0bWF0Y2hlZEhhbmRsZXJzLnB1c2goIGhhbmRsZU9iaiApO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpZiAoIG1hdGNoZWRIYW5kbGVycy5sZW5ndGggKSB7XG5cdFx0XHRcdFx0XHRoYW5kbGVyUXVldWUucHVzaCggeyBlbGVtOiBjdXIsIGhhbmRsZXJzOiBtYXRjaGVkSGFuZGxlcnMgfSApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIEFkZCB0aGUgcmVtYWluaW5nIChkaXJlY3RseS1ib3VuZCkgaGFuZGxlcnNcblx0XHRjdXIgPSB0aGlzO1xuXHRcdGlmICggZGVsZWdhdGVDb3VudCA8IGhhbmRsZXJzLmxlbmd0aCApIHtcblx0XHRcdGhhbmRsZXJRdWV1ZS5wdXNoKCB7IGVsZW06IGN1ciwgaGFuZGxlcnM6IGhhbmRsZXJzLnNsaWNlKCBkZWxlZ2F0ZUNvdW50ICkgfSApO1xuXHRcdH1cblxuXHRcdHJldHVybiBoYW5kbGVyUXVldWU7XG5cdH0sXG5cblx0YWRkUHJvcDogZnVuY3Rpb24oIG5hbWUsIGhvb2sgKSB7XG5cdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KCBqUXVlcnkuRXZlbnQucHJvdG90eXBlLCBuYW1lLCB7XG5cdFx0XHRlbnVtZXJhYmxlOiB0cnVlLFxuXHRcdFx0Y29uZmlndXJhYmxlOiB0cnVlLFxuXG5cdFx0XHRnZXQ6IGlzRnVuY3Rpb24oIGhvb2sgKSA/XG5cdFx0XHRcdGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdGlmICggdGhpcy5vcmlnaW5hbEV2ZW50ICkge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gaG9vayggdGhpcy5vcmlnaW5hbEV2ZW50ICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IDpcblx0XHRcdFx0ZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0aWYgKCB0aGlzLm9yaWdpbmFsRXZlbnQgKSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiB0aGlzLm9yaWdpbmFsRXZlbnRbIG5hbWUgXTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0sXG5cblx0XHRcdHNldDogZnVuY3Rpb24oIHZhbHVlICkge1xuXHRcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoIHRoaXMsIG5hbWUsIHtcblx0XHRcdFx0XHRlbnVtZXJhYmxlOiB0cnVlLFxuXHRcdFx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHRcdFx0XHR3cml0YWJsZTogdHJ1ZSxcblx0XHRcdFx0XHR2YWx1ZTogdmFsdWVcblx0XHRcdFx0fSApO1xuXHRcdFx0fVxuXHRcdH0gKTtcblx0fSxcblxuXHRmaXg6IGZ1bmN0aW9uKCBvcmlnaW5hbEV2ZW50ICkge1xuXHRcdHJldHVybiBvcmlnaW5hbEV2ZW50WyBqUXVlcnkuZXhwYW5kbyBdID9cblx0XHRcdG9yaWdpbmFsRXZlbnQgOlxuXHRcdFx0bmV3IGpRdWVyeS5FdmVudCggb3JpZ2luYWxFdmVudCApO1xuXHR9LFxuXG5cdHNwZWNpYWw6IHtcblx0XHRsb2FkOiB7XG5cblx0XHRcdC8vIFByZXZlbnQgdHJpZ2dlcmVkIGltYWdlLmxvYWQgZXZlbnRzIGZyb20gYnViYmxpbmcgdG8gd2luZG93LmxvYWRcblx0XHRcdG5vQnViYmxlOiB0cnVlXG5cdFx0fSxcblx0XHRmb2N1czoge1xuXG5cdFx0XHQvLyBGaXJlIG5hdGl2ZSBldmVudCBpZiBwb3NzaWJsZSBzbyBibHVyL2ZvY3VzIHNlcXVlbmNlIGlzIGNvcnJlY3Rcblx0XHRcdHRyaWdnZXI6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRpZiAoIHRoaXMgIT09IHNhZmVBY3RpdmVFbGVtZW50KCkgJiYgdGhpcy5mb2N1cyApIHtcblx0XHRcdFx0XHR0aGlzLmZvY3VzKCk7XG5cdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0ZGVsZWdhdGVUeXBlOiBcImZvY3VzaW5cIlxuXHRcdH0sXG5cdFx0Ymx1cjoge1xuXHRcdFx0dHJpZ2dlcjogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGlmICggdGhpcyA9PT0gc2FmZUFjdGl2ZUVsZW1lbnQoKSAmJiB0aGlzLmJsdXIgKSB7XG5cdFx0XHRcdFx0dGhpcy5ibHVyKCk7XG5cdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0ZGVsZWdhdGVUeXBlOiBcImZvY3Vzb3V0XCJcblx0XHR9LFxuXHRcdGNsaWNrOiB7XG5cblx0XHRcdC8vIEZvciBjaGVja2JveCwgZmlyZSBuYXRpdmUgZXZlbnQgc28gY2hlY2tlZCBzdGF0ZSB3aWxsIGJlIHJpZ2h0XG5cdFx0XHR0cmlnZ2VyOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0aWYgKCB0aGlzLnR5cGUgPT09IFwiY2hlY2tib3hcIiAmJiB0aGlzLmNsaWNrICYmIG5vZGVOYW1lKCB0aGlzLCBcImlucHV0XCIgKSApIHtcblx0XHRcdFx0XHR0aGlzLmNsaWNrKCk7XG5cdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXG5cdFx0XHQvLyBGb3IgY3Jvc3MtYnJvd3NlciBjb25zaXN0ZW5jeSwgZG9uJ3QgZmlyZSBuYXRpdmUgLmNsaWNrKCkgb24gbGlua3Ncblx0XHRcdF9kZWZhdWx0OiBmdW5jdGlvbiggZXZlbnQgKSB7XG5cdFx0XHRcdHJldHVybiBub2RlTmFtZSggZXZlbnQudGFyZ2V0LCBcImFcIiApO1xuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHRiZWZvcmV1bmxvYWQ6IHtcblx0XHRcdHBvc3REaXNwYXRjaDogZnVuY3Rpb24oIGV2ZW50ICkge1xuXG5cdFx0XHRcdC8vIFN1cHBvcnQ6IEZpcmVmb3ggMjArXG5cdFx0XHRcdC8vIEZpcmVmb3ggZG9lc24ndCBhbGVydCBpZiB0aGUgcmV0dXJuVmFsdWUgZmllbGQgaXMgbm90IHNldC5cblx0XHRcdFx0aWYgKCBldmVudC5yZXN1bHQgIT09IHVuZGVmaW5lZCAmJiBldmVudC5vcmlnaW5hbEV2ZW50ICkge1xuXHRcdFx0XHRcdGV2ZW50Lm9yaWdpbmFsRXZlbnQucmV0dXJuVmFsdWUgPSBldmVudC5yZXN1bHQ7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cbn07XG5cbmpRdWVyeS5yZW1vdmVFdmVudCA9IGZ1bmN0aW9uKCBlbGVtLCB0eXBlLCBoYW5kbGUgKSB7XG5cblx0Ly8gVGhpcyBcImlmXCIgaXMgbmVlZGVkIGZvciBwbGFpbiBvYmplY3RzXG5cdGlmICggZWxlbS5yZW1vdmVFdmVudExpc3RlbmVyICkge1xuXHRcdGVsZW0ucmVtb3ZlRXZlbnRMaXN0ZW5lciggdHlwZSwgaGFuZGxlICk7XG5cdH1cbn07XG5cbmpRdWVyeS5FdmVudCA9IGZ1bmN0aW9uKCBzcmMsIHByb3BzICkge1xuXG5cdC8vIEFsbG93IGluc3RhbnRpYXRpb24gd2l0aG91dCB0aGUgJ25ldycga2V5d29yZFxuXHRpZiAoICEoIHRoaXMgaW5zdGFuY2VvZiBqUXVlcnkuRXZlbnQgKSApIHtcblx0XHRyZXR1cm4gbmV3IGpRdWVyeS5FdmVudCggc3JjLCBwcm9wcyApO1xuXHR9XG5cblx0Ly8gRXZlbnQgb2JqZWN0XG5cdGlmICggc3JjICYmIHNyYy50eXBlICkge1xuXHRcdHRoaXMub3JpZ2luYWxFdmVudCA9IHNyYztcblx0XHR0aGlzLnR5cGUgPSBzcmMudHlwZTtcblxuXHRcdC8vIEV2ZW50cyBidWJibGluZyB1cCB0aGUgZG9jdW1lbnQgbWF5IGhhdmUgYmVlbiBtYXJrZWQgYXMgcHJldmVudGVkXG5cdFx0Ly8gYnkgYSBoYW5kbGVyIGxvd2VyIGRvd24gdGhlIHRyZWU7IHJlZmxlY3QgdGhlIGNvcnJlY3QgdmFsdWUuXG5cdFx0dGhpcy5pc0RlZmF1bHRQcmV2ZW50ZWQgPSBzcmMuZGVmYXVsdFByZXZlbnRlZCB8fFxuXHRcdFx0XHRzcmMuZGVmYXVsdFByZXZlbnRlZCA9PT0gdW5kZWZpbmVkICYmXG5cblx0XHRcdFx0Ly8gU3VwcG9ydDogQW5kcm9pZCA8PTIuMyBvbmx5XG5cdFx0XHRcdHNyYy5yZXR1cm5WYWx1ZSA9PT0gZmFsc2UgP1xuXHRcdFx0cmV0dXJuVHJ1ZSA6XG5cdFx0XHRyZXR1cm5GYWxzZTtcblxuXHRcdC8vIENyZWF0ZSB0YXJnZXQgcHJvcGVydGllc1xuXHRcdC8vIFN1cHBvcnQ6IFNhZmFyaSA8PTYgLSA3IG9ubHlcblx0XHQvLyBUYXJnZXQgc2hvdWxkIG5vdCBiZSBhIHRleHQgbm9kZSAoIzUwNCwgIzEzMTQzKVxuXHRcdHRoaXMudGFyZ2V0ID0gKCBzcmMudGFyZ2V0ICYmIHNyYy50YXJnZXQubm9kZVR5cGUgPT09IDMgKSA/XG5cdFx0XHRzcmMudGFyZ2V0LnBhcmVudE5vZGUgOlxuXHRcdFx0c3JjLnRhcmdldDtcblxuXHRcdHRoaXMuY3VycmVudFRhcmdldCA9IHNyYy5jdXJyZW50VGFyZ2V0O1xuXHRcdHRoaXMucmVsYXRlZFRhcmdldCA9IHNyYy5yZWxhdGVkVGFyZ2V0O1xuXG5cdC8vIEV2ZW50IHR5cGVcblx0fSBlbHNlIHtcblx0XHR0aGlzLnR5cGUgPSBzcmM7XG5cdH1cblxuXHQvLyBQdXQgZXhwbGljaXRseSBwcm92aWRlZCBwcm9wZXJ0aWVzIG9udG8gdGhlIGV2ZW50IG9iamVjdFxuXHRpZiAoIHByb3BzICkge1xuXHRcdGpRdWVyeS5leHRlbmQoIHRoaXMsIHByb3BzICk7XG5cdH1cblxuXHQvLyBDcmVhdGUgYSB0aW1lc3RhbXAgaWYgaW5jb21pbmcgZXZlbnQgZG9lc24ndCBoYXZlIG9uZVxuXHR0aGlzLnRpbWVTdGFtcCA9IHNyYyAmJiBzcmMudGltZVN0YW1wIHx8IERhdGUubm93KCk7XG5cblx0Ly8gTWFyayBpdCBhcyBmaXhlZFxuXHR0aGlzWyBqUXVlcnkuZXhwYW5kbyBdID0gdHJ1ZTtcbn07XG5cbi8vIGpRdWVyeS5FdmVudCBpcyBiYXNlZCBvbiBET00zIEV2ZW50cyBhcyBzcGVjaWZpZWQgYnkgdGhlIEVDTUFTY3JpcHQgTGFuZ3VhZ2UgQmluZGluZ1xuLy8gaHR0cHM6Ly93d3cudzMub3JnL1RSLzIwMDMvV0QtRE9NLUxldmVsLTMtRXZlbnRzLTIwMDMwMzMxL2VjbWEtc2NyaXB0LWJpbmRpbmcuaHRtbFxualF1ZXJ5LkV2ZW50LnByb3RvdHlwZSA9IHtcblx0Y29uc3RydWN0b3I6IGpRdWVyeS5FdmVudCxcblx0aXNEZWZhdWx0UHJldmVudGVkOiByZXR1cm5GYWxzZSxcblx0aXNQcm9wYWdhdGlvblN0b3BwZWQ6IHJldHVybkZhbHNlLFxuXHRpc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZDogcmV0dXJuRmFsc2UsXG5cdGlzU2ltdWxhdGVkOiBmYWxzZSxcblxuXHRwcmV2ZW50RGVmYXVsdDogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIGUgPSB0aGlzLm9yaWdpbmFsRXZlbnQ7XG5cblx0XHR0aGlzLmlzRGVmYXVsdFByZXZlbnRlZCA9IHJldHVyblRydWU7XG5cblx0XHRpZiAoIGUgJiYgIXRoaXMuaXNTaW11bGF0ZWQgKSB7XG5cdFx0XHRlLnByZXZlbnREZWZhdWx0KCk7XG5cdFx0fVxuXHR9LFxuXHRzdG9wUHJvcGFnYXRpb246IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBlID0gdGhpcy5vcmlnaW5hbEV2ZW50O1xuXG5cdFx0dGhpcy5pc1Byb3BhZ2F0aW9uU3RvcHBlZCA9IHJldHVyblRydWU7XG5cblx0XHRpZiAoIGUgJiYgIXRoaXMuaXNTaW11bGF0ZWQgKSB7XG5cdFx0XHRlLnN0b3BQcm9wYWdhdGlvbigpO1xuXHRcdH1cblx0fSxcblx0c3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uOiBmdW5jdGlvbigpIHtcblx0XHR2YXIgZSA9IHRoaXMub3JpZ2luYWxFdmVudDtcblxuXHRcdHRoaXMuaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQgPSByZXR1cm5UcnVlO1xuXG5cdFx0aWYgKCBlICYmICF0aGlzLmlzU2ltdWxhdGVkICkge1xuXHRcdFx0ZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcblx0XHR9XG5cblx0XHR0aGlzLnN0b3BQcm9wYWdhdGlvbigpO1xuXHR9XG59O1xuXG4vLyBJbmNsdWRlcyBhbGwgY29tbW9uIGV2ZW50IHByb3BzIGluY2x1ZGluZyBLZXlFdmVudCBhbmQgTW91c2VFdmVudCBzcGVjaWZpYyBwcm9wc1xualF1ZXJ5LmVhY2goIHtcblx0YWx0S2V5OiB0cnVlLFxuXHRidWJibGVzOiB0cnVlLFxuXHRjYW5jZWxhYmxlOiB0cnVlLFxuXHRjaGFuZ2VkVG91Y2hlczogdHJ1ZSxcblx0Y3RybEtleTogdHJ1ZSxcblx0ZGV0YWlsOiB0cnVlLFxuXHRldmVudFBoYXNlOiB0cnVlLFxuXHRtZXRhS2V5OiB0cnVlLFxuXHRwYWdlWDogdHJ1ZSxcblx0cGFnZVk6IHRydWUsXG5cdHNoaWZ0S2V5OiB0cnVlLFxuXHR2aWV3OiB0cnVlLFxuXHRcImNoYXJcIjogdHJ1ZSxcblx0Y2hhckNvZGU6IHRydWUsXG5cdGtleTogdHJ1ZSxcblx0a2V5Q29kZTogdHJ1ZSxcblx0YnV0dG9uOiB0cnVlLFxuXHRidXR0b25zOiB0cnVlLFxuXHRjbGllbnRYOiB0cnVlLFxuXHRjbGllbnRZOiB0cnVlLFxuXHRvZmZzZXRYOiB0cnVlLFxuXHRvZmZzZXRZOiB0cnVlLFxuXHRwb2ludGVySWQ6IHRydWUsXG5cdHBvaW50ZXJUeXBlOiB0cnVlLFxuXHRzY3JlZW5YOiB0cnVlLFxuXHRzY3JlZW5ZOiB0cnVlLFxuXHR0YXJnZXRUb3VjaGVzOiB0cnVlLFxuXHR0b0VsZW1lbnQ6IHRydWUsXG5cdHRvdWNoZXM6IHRydWUsXG5cblx0d2hpY2g6IGZ1bmN0aW9uKCBldmVudCApIHtcblx0XHR2YXIgYnV0dG9uID0gZXZlbnQuYnV0dG9uO1xuXG5cdFx0Ly8gQWRkIHdoaWNoIGZvciBrZXkgZXZlbnRzXG5cdFx0aWYgKCBldmVudC53aGljaCA9PSBudWxsICYmIHJrZXlFdmVudC50ZXN0KCBldmVudC50eXBlICkgKSB7XG5cdFx0XHRyZXR1cm4gZXZlbnQuY2hhckNvZGUgIT0gbnVsbCA/IGV2ZW50LmNoYXJDb2RlIDogZXZlbnQua2V5Q29kZTtcblx0XHR9XG5cblx0XHQvLyBBZGQgd2hpY2ggZm9yIGNsaWNrOiAxID09PSBsZWZ0OyAyID09PSBtaWRkbGU7IDMgPT09IHJpZ2h0XG5cdFx0aWYgKCAhZXZlbnQud2hpY2ggJiYgYnV0dG9uICE9PSB1bmRlZmluZWQgJiYgcm1vdXNlRXZlbnQudGVzdCggZXZlbnQudHlwZSApICkge1xuXHRcdFx0aWYgKCBidXR0b24gJiAxICkge1xuXHRcdFx0XHRyZXR1cm4gMTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKCBidXR0b24gJiAyICkge1xuXHRcdFx0XHRyZXR1cm4gMztcblx0XHRcdH1cblxuXHRcdFx0aWYgKCBidXR0b24gJiA0ICkge1xuXHRcdFx0XHRyZXR1cm4gMjtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIDA7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGV2ZW50LndoaWNoO1xuXHR9XG59LCBqUXVlcnkuZXZlbnQuYWRkUHJvcCApO1xuXG4vLyBDcmVhdGUgbW91c2VlbnRlci9sZWF2ZSBldmVudHMgdXNpbmcgbW91c2VvdmVyL291dCBhbmQgZXZlbnQtdGltZSBjaGVja3Ncbi8vIHNvIHRoYXQgZXZlbnQgZGVsZWdhdGlvbiB3b3JrcyBpbiBqUXVlcnkuXG4vLyBEbyB0aGUgc2FtZSBmb3IgcG9pbnRlcmVudGVyL3BvaW50ZXJsZWF2ZSBhbmQgcG9pbnRlcm92ZXIvcG9pbnRlcm91dFxuLy9cbi8vIFN1cHBvcnQ6IFNhZmFyaSA3IG9ubHlcbi8vIFNhZmFyaSBzZW5kcyBtb3VzZWVudGVyIHRvbyBvZnRlbjsgc2VlOlxuLy8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9NDcwMjU4XG4vLyBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBidWcgKGl0IGV4aXN0ZWQgaW4gb2xkZXIgQ2hyb21lIHZlcnNpb25zIGFzIHdlbGwpLlxualF1ZXJ5LmVhY2goIHtcblx0bW91c2VlbnRlcjogXCJtb3VzZW92ZXJcIixcblx0bW91c2VsZWF2ZTogXCJtb3VzZW91dFwiLFxuXHRwb2ludGVyZW50ZXI6IFwicG9pbnRlcm92ZXJcIixcblx0cG9pbnRlcmxlYXZlOiBcInBvaW50ZXJvdXRcIlxufSwgZnVuY3Rpb24oIG9yaWcsIGZpeCApIHtcblx0alF1ZXJ5LmV2ZW50LnNwZWNpYWxbIG9yaWcgXSA9IHtcblx0XHRkZWxlZ2F0ZVR5cGU6IGZpeCxcblx0XHRiaW5kVHlwZTogZml4LFxuXG5cdFx0aGFuZGxlOiBmdW5jdGlvbiggZXZlbnQgKSB7XG5cdFx0XHR2YXIgcmV0LFxuXHRcdFx0XHR0YXJnZXQgPSB0aGlzLFxuXHRcdFx0XHRyZWxhdGVkID0gZXZlbnQucmVsYXRlZFRhcmdldCxcblx0XHRcdFx0aGFuZGxlT2JqID0gZXZlbnQuaGFuZGxlT2JqO1xuXG5cdFx0XHQvLyBGb3IgbW91c2VlbnRlci9sZWF2ZSBjYWxsIHRoZSBoYW5kbGVyIGlmIHJlbGF0ZWQgaXMgb3V0c2lkZSB0aGUgdGFyZ2V0LlxuXHRcdFx0Ly8gTkI6IE5vIHJlbGF0ZWRUYXJnZXQgaWYgdGhlIG1vdXNlIGxlZnQvZW50ZXJlZCB0aGUgYnJvd3NlciB3aW5kb3dcblx0XHRcdGlmICggIXJlbGF0ZWQgfHwgKCByZWxhdGVkICE9PSB0YXJnZXQgJiYgIWpRdWVyeS5jb250YWlucyggdGFyZ2V0LCByZWxhdGVkICkgKSApIHtcblx0XHRcdFx0ZXZlbnQudHlwZSA9IGhhbmRsZU9iai5vcmlnVHlwZTtcblx0XHRcdFx0cmV0ID0gaGFuZGxlT2JqLmhhbmRsZXIuYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApO1xuXHRcdFx0XHRldmVudC50eXBlID0gZml4O1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHJldDtcblx0XHR9XG5cdH07XG59ICk7XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblxuXHRvbjogZnVuY3Rpb24oIHR5cGVzLCBzZWxlY3RvciwgZGF0YSwgZm4gKSB7XG5cdFx0cmV0dXJuIG9uKCB0aGlzLCB0eXBlcywgc2VsZWN0b3IsIGRhdGEsIGZuICk7XG5cdH0sXG5cdG9uZTogZnVuY3Rpb24oIHR5cGVzLCBzZWxlY3RvciwgZGF0YSwgZm4gKSB7XG5cdFx0cmV0dXJuIG9uKCB0aGlzLCB0eXBlcywgc2VsZWN0b3IsIGRhdGEsIGZuLCAxICk7XG5cdH0sXG5cdG9mZjogZnVuY3Rpb24oIHR5cGVzLCBzZWxlY3RvciwgZm4gKSB7XG5cdFx0dmFyIGhhbmRsZU9iaiwgdHlwZTtcblx0XHRpZiAoIHR5cGVzICYmIHR5cGVzLnByZXZlbnREZWZhdWx0ICYmIHR5cGVzLmhhbmRsZU9iaiApIHtcblxuXHRcdFx0Ly8gKCBldmVudCApICBkaXNwYXRjaGVkIGpRdWVyeS5FdmVudFxuXHRcdFx0aGFuZGxlT2JqID0gdHlwZXMuaGFuZGxlT2JqO1xuXHRcdFx0alF1ZXJ5KCB0eXBlcy5kZWxlZ2F0ZVRhcmdldCApLm9mZihcblx0XHRcdFx0aGFuZGxlT2JqLm5hbWVzcGFjZSA/XG5cdFx0XHRcdFx0aGFuZGxlT2JqLm9yaWdUeXBlICsgXCIuXCIgKyBoYW5kbGVPYmoubmFtZXNwYWNlIDpcblx0XHRcdFx0XHRoYW5kbGVPYmoub3JpZ1R5cGUsXG5cdFx0XHRcdGhhbmRsZU9iai5zZWxlY3Rvcixcblx0XHRcdFx0aGFuZGxlT2JqLmhhbmRsZXJcblx0XHRcdCk7XG5cdFx0XHRyZXR1cm4gdGhpcztcblx0XHR9XG5cdFx0aWYgKCB0eXBlb2YgdHlwZXMgPT09IFwib2JqZWN0XCIgKSB7XG5cblx0XHRcdC8vICggdHlwZXMtb2JqZWN0IFssIHNlbGVjdG9yXSApXG5cdFx0XHRmb3IgKCB0eXBlIGluIHR5cGVzICkge1xuXHRcdFx0XHR0aGlzLm9mZiggdHlwZSwgc2VsZWN0b3IsIHR5cGVzWyB0eXBlIF0gKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH1cblx0XHRpZiAoIHNlbGVjdG9yID09PSBmYWxzZSB8fCB0eXBlb2Ygc2VsZWN0b3IgPT09IFwiZnVuY3Rpb25cIiApIHtcblxuXHRcdFx0Ly8gKCB0eXBlcyBbLCBmbl0gKVxuXHRcdFx0Zm4gPSBzZWxlY3Rvcjtcblx0XHRcdHNlbGVjdG9yID0gdW5kZWZpbmVkO1xuXHRcdH1cblx0XHRpZiAoIGZuID09PSBmYWxzZSApIHtcblx0XHRcdGZuID0gcmV0dXJuRmFsc2U7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0alF1ZXJ5LmV2ZW50LnJlbW92ZSggdGhpcywgdHlwZXMsIGZuLCBzZWxlY3RvciApO1xuXHRcdH0gKTtcblx0fVxufSApO1xuXG5cbnZhclxuXG5cdC8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4gKi9cblxuXHQvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2VzbGludC9lc2xpbnQvaXNzdWVzLzMyMjlcblx0cnhodG1sVGFnID0gLzwoPyFhcmVhfGJyfGNvbHxlbWJlZHxocnxpbWd8aW5wdXR8bGlua3xtZXRhfHBhcmFtKSgoW2Etel1bXlxcL1xcMD5cXHgyMFxcdFxcclxcblxcZl0qKVtePl0qKVxcLz4vZ2ksXG5cblx0LyogZXNsaW50LWVuYWJsZSAqL1xuXG5cdC8vIFN1cHBvcnQ6IElFIDw9MTAgLSAxMSwgRWRnZSAxMiAtIDEzIG9ubHlcblx0Ly8gSW4gSUUvRWRnZSB1c2luZyByZWdleCBncm91cHMgaGVyZSBjYXVzZXMgc2V2ZXJlIHNsb3dkb3ducy5cblx0Ly8gU2VlIGh0dHBzOi8vY29ubmVjdC5taWNyb3NvZnQuY29tL0lFL2ZlZWRiYWNrL2RldGFpbHMvMTczNjUxMi9cblx0cm5vSW5uZXJodG1sID0gLzxzY3JpcHR8PHN0eWxlfDxsaW5rL2ksXG5cblx0Ly8gY2hlY2tlZD1cImNoZWNrZWRcIiBvciBjaGVja2VkXG5cdHJjaGVja2VkID0gL2NoZWNrZWRcXHMqKD86W149XXw9XFxzKi5jaGVja2VkLikvaSxcblx0cmNsZWFuU2NyaXB0ID0gL15cXHMqPCEoPzpcXFtDREFUQVxcW3wtLSl8KD86XFxdXFxdfC0tKT5cXHMqJC9nO1xuXG4vLyBQcmVmZXIgYSB0Ym9keSBvdmVyIGl0cyBwYXJlbnQgdGFibGUgZm9yIGNvbnRhaW5pbmcgbmV3IHJvd3NcbmZ1bmN0aW9uIG1hbmlwdWxhdGlvblRhcmdldCggZWxlbSwgY29udGVudCApIHtcblx0aWYgKCBub2RlTmFtZSggZWxlbSwgXCJ0YWJsZVwiICkgJiZcblx0XHRub2RlTmFtZSggY29udGVudC5ub2RlVHlwZSAhPT0gMTEgPyBjb250ZW50IDogY29udGVudC5maXJzdENoaWxkLCBcInRyXCIgKSApIHtcblxuXHRcdHJldHVybiBqUXVlcnkoIGVsZW0gKS5jaGlsZHJlbiggXCJ0Ym9keVwiIClbIDAgXSB8fCBlbGVtO1xuXHR9XG5cblx0cmV0dXJuIGVsZW07XG59XG5cbi8vIFJlcGxhY2UvcmVzdG9yZSB0aGUgdHlwZSBhdHRyaWJ1dGUgb2Ygc2NyaXB0IGVsZW1lbnRzIGZvciBzYWZlIERPTSBtYW5pcHVsYXRpb25cbmZ1bmN0aW9uIGRpc2FibGVTY3JpcHQoIGVsZW0gKSB7XG5cdGVsZW0udHlwZSA9ICggZWxlbS5nZXRBdHRyaWJ1dGUoIFwidHlwZVwiICkgIT09IG51bGwgKSArIFwiL1wiICsgZWxlbS50eXBlO1xuXHRyZXR1cm4gZWxlbTtcbn1cbmZ1bmN0aW9uIHJlc3RvcmVTY3JpcHQoIGVsZW0gKSB7XG5cdGlmICggKCBlbGVtLnR5cGUgfHwgXCJcIiApLnNsaWNlKCAwLCA1ICkgPT09IFwidHJ1ZS9cIiApIHtcblx0XHRlbGVtLnR5cGUgPSBlbGVtLnR5cGUuc2xpY2UoIDUgKTtcblx0fSBlbHNlIHtcblx0XHRlbGVtLnJlbW92ZUF0dHJpYnV0ZSggXCJ0eXBlXCIgKTtcblx0fVxuXG5cdHJldHVybiBlbGVtO1xufVxuXG5mdW5jdGlvbiBjbG9uZUNvcHlFdmVudCggc3JjLCBkZXN0ICkge1xuXHR2YXIgaSwgbCwgdHlwZSwgcGRhdGFPbGQsIHBkYXRhQ3VyLCB1ZGF0YU9sZCwgdWRhdGFDdXIsIGV2ZW50cztcblxuXHRpZiAoIGRlc3Qubm9kZVR5cGUgIT09IDEgKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0Ly8gMS4gQ29weSBwcml2YXRlIGRhdGE6IGV2ZW50cywgaGFuZGxlcnMsIGV0Yy5cblx0aWYgKCBkYXRhUHJpdi5oYXNEYXRhKCBzcmMgKSApIHtcblx0XHRwZGF0YU9sZCA9IGRhdGFQcml2LmFjY2Vzcyggc3JjICk7XG5cdFx0cGRhdGFDdXIgPSBkYXRhUHJpdi5zZXQoIGRlc3QsIHBkYXRhT2xkICk7XG5cdFx0ZXZlbnRzID0gcGRhdGFPbGQuZXZlbnRzO1xuXG5cdFx0aWYgKCBldmVudHMgKSB7XG5cdFx0XHRkZWxldGUgcGRhdGFDdXIuaGFuZGxlO1xuXHRcdFx0cGRhdGFDdXIuZXZlbnRzID0ge307XG5cblx0XHRcdGZvciAoIHR5cGUgaW4gZXZlbnRzICkge1xuXHRcdFx0XHRmb3IgKCBpID0gMCwgbCA9IGV2ZW50c1sgdHlwZSBdLmxlbmd0aDsgaSA8IGw7IGkrKyApIHtcblx0XHRcdFx0XHRqUXVlcnkuZXZlbnQuYWRkKCBkZXN0LCB0eXBlLCBldmVudHNbIHR5cGUgXVsgaSBdICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvLyAyLiBDb3B5IHVzZXIgZGF0YVxuXHRpZiAoIGRhdGFVc2VyLmhhc0RhdGEoIHNyYyApICkge1xuXHRcdHVkYXRhT2xkID0gZGF0YVVzZXIuYWNjZXNzKCBzcmMgKTtcblx0XHR1ZGF0YUN1ciA9IGpRdWVyeS5leHRlbmQoIHt9LCB1ZGF0YU9sZCApO1xuXG5cdFx0ZGF0YVVzZXIuc2V0KCBkZXN0LCB1ZGF0YUN1ciApO1xuXHR9XG59XG5cbi8vIEZpeCBJRSBidWdzLCBzZWUgc3VwcG9ydCB0ZXN0c1xuZnVuY3Rpb24gZml4SW5wdXQoIHNyYywgZGVzdCApIHtcblx0dmFyIG5vZGVOYW1lID0gZGVzdC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO1xuXG5cdC8vIEZhaWxzIHRvIHBlcnNpc3QgdGhlIGNoZWNrZWQgc3RhdGUgb2YgYSBjbG9uZWQgY2hlY2tib3ggb3IgcmFkaW8gYnV0dG9uLlxuXHRpZiAoIG5vZGVOYW1lID09PSBcImlucHV0XCIgJiYgcmNoZWNrYWJsZVR5cGUudGVzdCggc3JjLnR5cGUgKSApIHtcblx0XHRkZXN0LmNoZWNrZWQgPSBzcmMuY2hlY2tlZDtcblxuXHQvLyBGYWlscyB0byByZXR1cm4gdGhlIHNlbGVjdGVkIG9wdGlvbiB0byB0aGUgZGVmYXVsdCBzZWxlY3RlZCBzdGF0ZSB3aGVuIGNsb25pbmcgb3B0aW9uc1xuXHR9IGVsc2UgaWYgKCBub2RlTmFtZSA9PT0gXCJpbnB1dFwiIHx8IG5vZGVOYW1lID09PSBcInRleHRhcmVhXCIgKSB7XG5cdFx0ZGVzdC5kZWZhdWx0VmFsdWUgPSBzcmMuZGVmYXVsdFZhbHVlO1xuXHR9XG59XG5cbmZ1bmN0aW9uIGRvbU1hbmlwKCBjb2xsZWN0aW9uLCBhcmdzLCBjYWxsYmFjaywgaWdub3JlZCApIHtcblxuXHQvLyBGbGF0dGVuIGFueSBuZXN0ZWQgYXJyYXlzXG5cdGFyZ3MgPSBjb25jYXQuYXBwbHkoIFtdLCBhcmdzICk7XG5cblx0dmFyIGZyYWdtZW50LCBmaXJzdCwgc2NyaXB0cywgaGFzU2NyaXB0cywgbm9kZSwgZG9jLFxuXHRcdGkgPSAwLFxuXHRcdGwgPSBjb2xsZWN0aW9uLmxlbmd0aCxcblx0XHRpTm9DbG9uZSA9IGwgLSAxLFxuXHRcdHZhbHVlID0gYXJnc1sgMCBdLFxuXHRcdHZhbHVlSXNGdW5jdGlvbiA9IGlzRnVuY3Rpb24oIHZhbHVlICk7XG5cblx0Ly8gV2UgY2FuJ3QgY2xvbmVOb2RlIGZyYWdtZW50cyB0aGF0IGNvbnRhaW4gY2hlY2tlZCwgaW4gV2ViS2l0XG5cdGlmICggdmFsdWVJc0Z1bmN0aW9uIHx8XG5cdFx0XHQoIGwgPiAxICYmIHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIiAmJlxuXHRcdFx0XHQhc3VwcG9ydC5jaGVja0Nsb25lICYmIHJjaGVja2VkLnRlc3QoIHZhbHVlICkgKSApIHtcblx0XHRyZXR1cm4gY29sbGVjdGlvbi5lYWNoKCBmdW5jdGlvbiggaW5kZXggKSB7XG5cdFx0XHR2YXIgc2VsZiA9IGNvbGxlY3Rpb24uZXEoIGluZGV4ICk7XG5cdFx0XHRpZiAoIHZhbHVlSXNGdW5jdGlvbiApIHtcblx0XHRcdFx0YXJnc1sgMCBdID0gdmFsdWUuY2FsbCggdGhpcywgaW5kZXgsIHNlbGYuaHRtbCgpICk7XG5cdFx0XHR9XG5cdFx0XHRkb21NYW5pcCggc2VsZiwgYXJncywgY2FsbGJhY2ssIGlnbm9yZWQgKTtcblx0XHR9ICk7XG5cdH1cblxuXHRpZiAoIGwgKSB7XG5cdFx0ZnJhZ21lbnQgPSBidWlsZEZyYWdtZW50KCBhcmdzLCBjb2xsZWN0aW9uWyAwIF0ub3duZXJEb2N1bWVudCwgZmFsc2UsIGNvbGxlY3Rpb24sIGlnbm9yZWQgKTtcblx0XHRmaXJzdCA9IGZyYWdtZW50LmZpcnN0Q2hpbGQ7XG5cblx0XHRpZiAoIGZyYWdtZW50LmNoaWxkTm9kZXMubGVuZ3RoID09PSAxICkge1xuXHRcdFx0ZnJhZ21lbnQgPSBmaXJzdDtcblx0XHR9XG5cblx0XHQvLyBSZXF1aXJlIGVpdGhlciBuZXcgY29udGVudCBvciBhbiBpbnRlcmVzdCBpbiBpZ25vcmVkIGVsZW1lbnRzIHRvIGludm9rZSB0aGUgY2FsbGJhY2tcblx0XHRpZiAoIGZpcnN0IHx8IGlnbm9yZWQgKSB7XG5cdFx0XHRzY3JpcHRzID0galF1ZXJ5Lm1hcCggZ2V0QWxsKCBmcmFnbWVudCwgXCJzY3JpcHRcIiApLCBkaXNhYmxlU2NyaXB0ICk7XG5cdFx0XHRoYXNTY3JpcHRzID0gc2NyaXB0cy5sZW5ndGg7XG5cblx0XHRcdC8vIFVzZSB0aGUgb3JpZ2luYWwgZnJhZ21lbnQgZm9yIHRoZSBsYXN0IGl0ZW1cblx0XHRcdC8vIGluc3RlYWQgb2YgdGhlIGZpcnN0IGJlY2F1c2UgaXQgY2FuIGVuZCB1cFxuXHRcdFx0Ly8gYmVpbmcgZW1wdGllZCBpbmNvcnJlY3RseSBpbiBjZXJ0YWluIHNpdHVhdGlvbnMgKCM4MDcwKS5cblx0XHRcdGZvciAoIDsgaSA8IGw7IGkrKyApIHtcblx0XHRcdFx0bm9kZSA9IGZyYWdtZW50O1xuXG5cdFx0XHRcdGlmICggaSAhPT0gaU5vQ2xvbmUgKSB7XG5cdFx0XHRcdFx0bm9kZSA9IGpRdWVyeS5jbG9uZSggbm9kZSwgdHJ1ZSwgdHJ1ZSApO1xuXG5cdFx0XHRcdFx0Ly8gS2VlcCByZWZlcmVuY2VzIHRvIGNsb25lZCBzY3JpcHRzIGZvciBsYXRlciByZXN0b3JhdGlvblxuXHRcdFx0XHRcdGlmICggaGFzU2NyaXB0cyApIHtcblxuXHRcdFx0XHRcdFx0Ly8gU3VwcG9ydDogQW5kcm9pZCA8PTQuMCBvbmx5LCBQaGFudG9tSlMgMSBvbmx5XG5cdFx0XHRcdFx0XHQvLyBwdXNoLmFwcGx5KF8sIGFycmF5bGlrZSkgdGhyb3dzIG9uIGFuY2llbnQgV2ViS2l0XG5cdFx0XHRcdFx0XHRqUXVlcnkubWVyZ2UoIHNjcmlwdHMsIGdldEFsbCggbm9kZSwgXCJzY3JpcHRcIiApICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0Y2FsbGJhY2suY2FsbCggY29sbGVjdGlvblsgaSBdLCBub2RlLCBpICk7XG5cdFx0XHR9XG5cblx0XHRcdGlmICggaGFzU2NyaXB0cyApIHtcblx0XHRcdFx0ZG9jID0gc2NyaXB0c1sgc2NyaXB0cy5sZW5ndGggLSAxIF0ub3duZXJEb2N1bWVudDtcblxuXHRcdFx0XHQvLyBSZWVuYWJsZSBzY3JpcHRzXG5cdFx0XHRcdGpRdWVyeS5tYXAoIHNjcmlwdHMsIHJlc3RvcmVTY3JpcHQgKTtcblxuXHRcdFx0XHQvLyBFdmFsdWF0ZSBleGVjdXRhYmxlIHNjcmlwdHMgb24gZmlyc3QgZG9jdW1lbnQgaW5zZXJ0aW9uXG5cdFx0XHRcdGZvciAoIGkgPSAwOyBpIDwgaGFzU2NyaXB0czsgaSsrICkge1xuXHRcdFx0XHRcdG5vZGUgPSBzY3JpcHRzWyBpIF07XG5cdFx0XHRcdFx0aWYgKCByc2NyaXB0VHlwZS50ZXN0KCBub2RlLnR5cGUgfHwgXCJcIiApICYmXG5cdFx0XHRcdFx0XHQhZGF0YVByaXYuYWNjZXNzKCBub2RlLCBcImdsb2JhbEV2YWxcIiApICYmXG5cdFx0XHRcdFx0XHRqUXVlcnkuY29udGFpbnMoIGRvYywgbm9kZSApICkge1xuXG5cdFx0XHRcdFx0XHRpZiAoIG5vZGUuc3JjICYmICggbm9kZS50eXBlIHx8IFwiXCIgKS50b0xvd2VyQ2FzZSgpICAhPT0gXCJtb2R1bGVcIiApIHtcblxuXHRcdFx0XHRcdFx0XHQvLyBPcHRpb25hbCBBSkFYIGRlcGVuZGVuY3ksIGJ1dCB3b24ndCBydW4gc2NyaXB0cyBpZiBub3QgcHJlc2VudFxuXHRcdFx0XHRcdFx0XHRpZiAoIGpRdWVyeS5fZXZhbFVybCApIHtcblx0XHRcdFx0XHRcdFx0XHRqUXVlcnkuX2V2YWxVcmwoIG5vZGUuc3JjICk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdERPTUV2YWwoIG5vZGUudGV4dENvbnRlbnQucmVwbGFjZSggcmNsZWFuU2NyaXB0LCBcIlwiICksIGRvYywgbm9kZSApO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiBjb2xsZWN0aW9uO1xufVxuXG5mdW5jdGlvbiByZW1vdmUoIGVsZW0sIHNlbGVjdG9yLCBrZWVwRGF0YSApIHtcblx0dmFyIG5vZGUsXG5cdFx0bm9kZXMgPSBzZWxlY3RvciA/IGpRdWVyeS5maWx0ZXIoIHNlbGVjdG9yLCBlbGVtICkgOiBlbGVtLFxuXHRcdGkgPSAwO1xuXG5cdGZvciAoIDsgKCBub2RlID0gbm9kZXNbIGkgXSApICE9IG51bGw7IGkrKyApIHtcblx0XHRpZiAoICFrZWVwRGF0YSAmJiBub2RlLm5vZGVUeXBlID09PSAxICkge1xuXHRcdFx0alF1ZXJ5LmNsZWFuRGF0YSggZ2V0QWxsKCBub2RlICkgKTtcblx0XHR9XG5cblx0XHRpZiAoIG5vZGUucGFyZW50Tm9kZSApIHtcblx0XHRcdGlmICgga2VlcERhdGEgJiYgalF1ZXJ5LmNvbnRhaW5zKCBub2RlLm93bmVyRG9jdW1lbnQsIG5vZGUgKSApIHtcblx0XHRcdFx0c2V0R2xvYmFsRXZhbCggZ2V0QWxsKCBub2RlLCBcInNjcmlwdFwiICkgKTtcblx0XHRcdH1cblx0XHRcdG5vZGUucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCggbm9kZSApO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiBlbGVtO1xufVxuXG5qUXVlcnkuZXh0ZW5kKCB7XG5cdGh0bWxQcmVmaWx0ZXI6IGZ1bmN0aW9uKCBodG1sICkge1xuXHRcdHJldHVybiBodG1sLnJlcGxhY2UoIHJ4aHRtbFRhZywgXCI8JDE+PC8kMj5cIiApO1xuXHR9LFxuXG5cdGNsb25lOiBmdW5jdGlvbiggZWxlbSwgZGF0YUFuZEV2ZW50cywgZGVlcERhdGFBbmRFdmVudHMgKSB7XG5cdFx0dmFyIGksIGwsIHNyY0VsZW1lbnRzLCBkZXN0RWxlbWVudHMsXG5cdFx0XHRjbG9uZSA9IGVsZW0uY2xvbmVOb2RlKCB0cnVlICksXG5cdFx0XHRpblBhZ2UgPSBqUXVlcnkuY29udGFpbnMoIGVsZW0ub3duZXJEb2N1bWVudCwgZWxlbSApO1xuXG5cdFx0Ly8gRml4IElFIGNsb25pbmcgaXNzdWVzXG5cdFx0aWYgKCAhc3VwcG9ydC5ub0Nsb25lQ2hlY2tlZCAmJiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgfHwgZWxlbS5ub2RlVHlwZSA9PT0gMTEgKSAmJlxuXHRcdFx0XHQhalF1ZXJ5LmlzWE1MRG9jKCBlbGVtICkgKSB7XG5cblx0XHRcdC8vIFdlIGVzY2hldyBTaXp6bGUgaGVyZSBmb3IgcGVyZm9ybWFuY2UgcmVhc29uczogaHR0cHM6Ly9qc3BlcmYuY29tL2dldGFsbC12cy1zaXp6bGUvMlxuXHRcdFx0ZGVzdEVsZW1lbnRzID0gZ2V0QWxsKCBjbG9uZSApO1xuXHRcdFx0c3JjRWxlbWVudHMgPSBnZXRBbGwoIGVsZW0gKTtcblxuXHRcdFx0Zm9yICggaSA9IDAsIGwgPSBzcmNFbGVtZW50cy5sZW5ndGg7IGkgPCBsOyBpKysgKSB7XG5cdFx0XHRcdGZpeElucHV0KCBzcmNFbGVtZW50c1sgaSBdLCBkZXN0RWxlbWVudHNbIGkgXSApO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIENvcHkgdGhlIGV2ZW50cyBmcm9tIHRoZSBvcmlnaW5hbCB0byB0aGUgY2xvbmVcblx0XHRpZiAoIGRhdGFBbmRFdmVudHMgKSB7XG5cdFx0XHRpZiAoIGRlZXBEYXRhQW5kRXZlbnRzICkge1xuXHRcdFx0XHRzcmNFbGVtZW50cyA9IHNyY0VsZW1lbnRzIHx8IGdldEFsbCggZWxlbSApO1xuXHRcdFx0XHRkZXN0RWxlbWVudHMgPSBkZXN0RWxlbWVudHMgfHwgZ2V0QWxsKCBjbG9uZSApO1xuXG5cdFx0XHRcdGZvciAoIGkgPSAwLCBsID0gc3JjRWxlbWVudHMubGVuZ3RoOyBpIDwgbDsgaSsrICkge1xuXHRcdFx0XHRcdGNsb25lQ29weUV2ZW50KCBzcmNFbGVtZW50c1sgaSBdLCBkZXN0RWxlbWVudHNbIGkgXSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjbG9uZUNvcHlFdmVudCggZWxlbSwgY2xvbmUgKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBQcmVzZXJ2ZSBzY3JpcHQgZXZhbHVhdGlvbiBoaXN0b3J5XG5cdFx0ZGVzdEVsZW1lbnRzID0gZ2V0QWxsKCBjbG9uZSwgXCJzY3JpcHRcIiApO1xuXHRcdGlmICggZGVzdEVsZW1lbnRzLmxlbmd0aCA+IDAgKSB7XG5cdFx0XHRzZXRHbG9iYWxFdmFsKCBkZXN0RWxlbWVudHMsICFpblBhZ2UgJiYgZ2V0QWxsKCBlbGVtLCBcInNjcmlwdFwiICkgKTtcblx0XHR9XG5cblx0XHQvLyBSZXR1cm4gdGhlIGNsb25lZCBzZXRcblx0XHRyZXR1cm4gY2xvbmU7XG5cdH0sXG5cblx0Y2xlYW5EYXRhOiBmdW5jdGlvbiggZWxlbXMgKSB7XG5cdFx0dmFyIGRhdGEsIGVsZW0sIHR5cGUsXG5cdFx0XHRzcGVjaWFsID0galF1ZXJ5LmV2ZW50LnNwZWNpYWwsXG5cdFx0XHRpID0gMDtcblxuXHRcdGZvciAoIDsgKCBlbGVtID0gZWxlbXNbIGkgXSApICE9PSB1bmRlZmluZWQ7IGkrKyApIHtcblx0XHRcdGlmICggYWNjZXB0RGF0YSggZWxlbSApICkge1xuXHRcdFx0XHRpZiAoICggZGF0YSA9IGVsZW1bIGRhdGFQcml2LmV4cGFuZG8gXSApICkge1xuXHRcdFx0XHRcdGlmICggZGF0YS5ldmVudHMgKSB7XG5cdFx0XHRcdFx0XHRmb3IgKCB0eXBlIGluIGRhdGEuZXZlbnRzICkge1xuXHRcdFx0XHRcdFx0XHRpZiAoIHNwZWNpYWxbIHR5cGUgXSApIHtcblx0XHRcdFx0XHRcdFx0XHRqUXVlcnkuZXZlbnQucmVtb3ZlKCBlbGVtLCB0eXBlICk7XG5cblx0XHRcdFx0XHRcdFx0Ly8gVGhpcyBpcyBhIHNob3J0Y3V0IHRvIGF2b2lkIGpRdWVyeS5ldmVudC5yZW1vdmUncyBvdmVyaGVhZFxuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdGpRdWVyeS5yZW1vdmVFdmVudCggZWxlbSwgdHlwZSwgZGF0YS5oYW5kbGUgKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIFN1cHBvcnQ6IENocm9tZSA8PTM1IC0gNDUrXG5cdFx0XHRcdFx0Ly8gQXNzaWduIHVuZGVmaW5lZCBpbnN0ZWFkIG9mIHVzaW5nIGRlbGV0ZSwgc2VlIERhdGEjcmVtb3ZlXG5cdFx0XHRcdFx0ZWxlbVsgZGF0YVByaXYuZXhwYW5kbyBdID0gdW5kZWZpbmVkO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmICggZWxlbVsgZGF0YVVzZXIuZXhwYW5kbyBdICkge1xuXG5cdFx0XHRcdFx0Ly8gU3VwcG9ydDogQ2hyb21lIDw9MzUgLSA0NStcblx0XHRcdFx0XHQvLyBBc3NpZ24gdW5kZWZpbmVkIGluc3RlYWQgb2YgdXNpbmcgZGVsZXRlLCBzZWUgRGF0YSNyZW1vdmVcblx0XHRcdFx0XHRlbGVtWyBkYXRhVXNlci5leHBhbmRvIF0gPSB1bmRlZmluZWQ7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cbn0gKTtcblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXHRkZXRhY2g6IGZ1bmN0aW9uKCBzZWxlY3RvciApIHtcblx0XHRyZXR1cm4gcmVtb3ZlKCB0aGlzLCBzZWxlY3RvciwgdHJ1ZSApO1xuXHR9LFxuXG5cdHJlbW92ZTogZnVuY3Rpb24oIHNlbGVjdG9yICkge1xuXHRcdHJldHVybiByZW1vdmUoIHRoaXMsIHNlbGVjdG9yICk7XG5cdH0sXG5cblx0dGV4dDogZnVuY3Rpb24oIHZhbHVlICkge1xuXHRcdHJldHVybiBhY2Nlc3MoIHRoaXMsIGZ1bmN0aW9uKCB2YWx1ZSApIHtcblx0XHRcdHJldHVybiB2YWx1ZSA9PT0gdW5kZWZpbmVkID9cblx0XHRcdFx0alF1ZXJ5LnRleHQoIHRoaXMgKSA6XG5cdFx0XHRcdHRoaXMuZW1wdHkoKS5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRpZiAoIHRoaXMubm9kZVR5cGUgPT09IDEgfHwgdGhpcy5ub2RlVHlwZSA9PT0gMTEgfHwgdGhpcy5ub2RlVHlwZSA9PT0gOSApIHtcblx0XHRcdFx0XHRcdHRoaXMudGV4dENvbnRlbnQgPSB2YWx1ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gKTtcblx0XHR9LCBudWxsLCB2YWx1ZSwgYXJndW1lbnRzLmxlbmd0aCApO1xuXHR9LFxuXG5cdGFwcGVuZDogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIGRvbU1hbmlwKCB0aGlzLCBhcmd1bWVudHMsIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0aWYgKCB0aGlzLm5vZGVUeXBlID09PSAxIHx8IHRoaXMubm9kZVR5cGUgPT09IDExIHx8IHRoaXMubm9kZVR5cGUgPT09IDkgKSB7XG5cdFx0XHRcdHZhciB0YXJnZXQgPSBtYW5pcHVsYXRpb25UYXJnZXQoIHRoaXMsIGVsZW0gKTtcblx0XHRcdFx0dGFyZ2V0LmFwcGVuZENoaWxkKCBlbGVtICk7XG5cdFx0XHR9XG5cdFx0fSApO1xuXHR9LFxuXG5cdHByZXBlbmQ6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiBkb21NYW5pcCggdGhpcywgYXJndW1lbnRzLCBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdGlmICggdGhpcy5ub2RlVHlwZSA9PT0gMSB8fCB0aGlzLm5vZGVUeXBlID09PSAxMSB8fCB0aGlzLm5vZGVUeXBlID09PSA5ICkge1xuXHRcdFx0XHR2YXIgdGFyZ2V0ID0gbWFuaXB1bGF0aW9uVGFyZ2V0KCB0aGlzLCBlbGVtICk7XG5cdFx0XHRcdHRhcmdldC5pbnNlcnRCZWZvcmUoIGVsZW0sIHRhcmdldC5maXJzdENoaWxkICk7XG5cdFx0XHR9XG5cdFx0fSApO1xuXHR9LFxuXG5cdGJlZm9yZTogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIGRvbU1hbmlwKCB0aGlzLCBhcmd1bWVudHMsIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0aWYgKCB0aGlzLnBhcmVudE5vZGUgKSB7XG5cdFx0XHRcdHRoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoIGVsZW0sIHRoaXMgKTtcblx0XHRcdH1cblx0XHR9ICk7XG5cdH0sXG5cblx0YWZ0ZXI6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiBkb21NYW5pcCggdGhpcywgYXJndW1lbnRzLCBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdGlmICggdGhpcy5wYXJlbnROb2RlICkge1xuXHRcdFx0XHR0aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKCBlbGVtLCB0aGlzLm5leHRTaWJsaW5nICk7XG5cdFx0XHR9XG5cdFx0fSApO1xuXHR9LFxuXG5cdGVtcHR5OiBmdW5jdGlvbigpIHtcblx0XHR2YXIgZWxlbSxcblx0XHRcdGkgPSAwO1xuXG5cdFx0Zm9yICggOyAoIGVsZW0gPSB0aGlzWyBpIF0gKSAhPSBudWxsOyBpKysgKSB7XG5cdFx0XHRpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgKSB7XG5cblx0XHRcdFx0Ly8gUHJldmVudCBtZW1vcnkgbGVha3Ncblx0XHRcdFx0alF1ZXJ5LmNsZWFuRGF0YSggZ2V0QWxsKCBlbGVtLCBmYWxzZSApICk7XG5cblx0XHRcdFx0Ly8gUmVtb3ZlIGFueSByZW1haW5pbmcgbm9kZXNcblx0XHRcdFx0ZWxlbS50ZXh0Q29udGVudCA9IFwiXCI7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0Y2xvbmU6IGZ1bmN0aW9uKCBkYXRhQW5kRXZlbnRzLCBkZWVwRGF0YUFuZEV2ZW50cyApIHtcblx0XHRkYXRhQW5kRXZlbnRzID0gZGF0YUFuZEV2ZW50cyA9PSBudWxsID8gZmFsc2UgOiBkYXRhQW5kRXZlbnRzO1xuXHRcdGRlZXBEYXRhQW5kRXZlbnRzID0gZGVlcERhdGFBbmRFdmVudHMgPT0gbnVsbCA/IGRhdGFBbmRFdmVudHMgOiBkZWVwRGF0YUFuZEV2ZW50cztcblxuXHRcdHJldHVybiB0aGlzLm1hcCggZnVuY3Rpb24oKSB7XG5cdFx0XHRyZXR1cm4galF1ZXJ5LmNsb25lKCB0aGlzLCBkYXRhQW5kRXZlbnRzLCBkZWVwRGF0YUFuZEV2ZW50cyApO1xuXHRcdH0gKTtcblx0fSxcblxuXHRodG1sOiBmdW5jdGlvbiggdmFsdWUgKSB7XG5cdFx0cmV0dXJuIGFjY2VzcyggdGhpcywgZnVuY3Rpb24oIHZhbHVlICkge1xuXHRcdFx0dmFyIGVsZW0gPSB0aGlzWyAwIF0gfHwge30sXG5cdFx0XHRcdGkgPSAwLFxuXHRcdFx0XHRsID0gdGhpcy5sZW5ndGg7XG5cblx0XHRcdGlmICggdmFsdWUgPT09IHVuZGVmaW5lZCAmJiBlbGVtLm5vZGVUeXBlID09PSAxICkge1xuXHRcdFx0XHRyZXR1cm4gZWxlbS5pbm5lckhUTUw7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFNlZSBpZiB3ZSBjYW4gdGFrZSBhIHNob3J0Y3V0IGFuZCBqdXN0IHVzZSBpbm5lckhUTUxcblx0XHRcdGlmICggdHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiICYmICFybm9Jbm5lcmh0bWwudGVzdCggdmFsdWUgKSAmJlxuXHRcdFx0XHQhd3JhcE1hcFsgKCBydGFnTmFtZS5leGVjKCB2YWx1ZSApIHx8IFsgXCJcIiwgXCJcIiBdIClbIDEgXS50b0xvd2VyQ2FzZSgpIF0gKSB7XG5cblx0XHRcdFx0dmFsdWUgPSBqUXVlcnkuaHRtbFByZWZpbHRlciggdmFsdWUgKTtcblxuXHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdGZvciAoIDsgaSA8IGw7IGkrKyApIHtcblx0XHRcdFx0XHRcdGVsZW0gPSB0aGlzWyBpIF0gfHwge307XG5cblx0XHRcdFx0XHRcdC8vIFJlbW92ZSBlbGVtZW50IG5vZGVzIGFuZCBwcmV2ZW50IG1lbW9yeSBsZWFrc1xuXHRcdFx0XHRcdFx0aWYgKCBlbGVtLm5vZGVUeXBlID09PSAxICkge1xuXHRcdFx0XHRcdFx0XHRqUXVlcnkuY2xlYW5EYXRhKCBnZXRBbGwoIGVsZW0sIGZhbHNlICkgKTtcblx0XHRcdFx0XHRcdFx0ZWxlbS5pbm5lckhUTUwgPSB2YWx1ZTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRlbGVtID0gMDtcblxuXHRcdFx0XHQvLyBJZiB1c2luZyBpbm5lckhUTUwgdGhyb3dzIGFuIGV4Y2VwdGlvbiwgdXNlIHRoZSBmYWxsYmFjayBtZXRob2Rcblx0XHRcdFx0fSBjYXRjaCAoIGUgKSB7fVxuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIGVsZW0gKSB7XG5cdFx0XHRcdHRoaXMuZW1wdHkoKS5hcHBlbmQoIHZhbHVlICk7XG5cdFx0XHR9XG5cdFx0fSwgbnVsbCwgdmFsdWUsIGFyZ3VtZW50cy5sZW5ndGggKTtcblx0fSxcblxuXHRyZXBsYWNlV2l0aDogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIGlnbm9yZWQgPSBbXTtcblxuXHRcdC8vIE1ha2UgdGhlIGNoYW5nZXMsIHJlcGxhY2luZyBlYWNoIG5vbi1pZ25vcmVkIGNvbnRleHQgZWxlbWVudCB3aXRoIHRoZSBuZXcgY29udGVudFxuXHRcdHJldHVybiBkb21NYW5pcCggdGhpcywgYXJndW1lbnRzLCBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHZhciBwYXJlbnQgPSB0aGlzLnBhcmVudE5vZGU7XG5cblx0XHRcdGlmICggalF1ZXJ5LmluQXJyYXkoIHRoaXMsIGlnbm9yZWQgKSA8IDAgKSB7XG5cdFx0XHRcdGpRdWVyeS5jbGVhbkRhdGEoIGdldEFsbCggdGhpcyApICk7XG5cdFx0XHRcdGlmICggcGFyZW50ICkge1xuXHRcdFx0XHRcdHBhcmVudC5yZXBsYWNlQ2hpbGQoIGVsZW0sIHRoaXMgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0Ly8gRm9yY2UgY2FsbGJhY2sgaW52b2NhdGlvblxuXHRcdH0sIGlnbm9yZWQgKTtcblx0fVxufSApO1xuXG5qUXVlcnkuZWFjaCgge1xuXHRhcHBlbmRUbzogXCJhcHBlbmRcIixcblx0cHJlcGVuZFRvOiBcInByZXBlbmRcIixcblx0aW5zZXJ0QmVmb3JlOiBcImJlZm9yZVwiLFxuXHRpbnNlcnRBZnRlcjogXCJhZnRlclwiLFxuXHRyZXBsYWNlQWxsOiBcInJlcGxhY2VXaXRoXCJcbn0sIGZ1bmN0aW9uKCBuYW1lLCBvcmlnaW5hbCApIHtcblx0alF1ZXJ5LmZuWyBuYW1lIF0gPSBmdW5jdGlvbiggc2VsZWN0b3IgKSB7XG5cdFx0dmFyIGVsZW1zLFxuXHRcdFx0cmV0ID0gW10sXG5cdFx0XHRpbnNlcnQgPSBqUXVlcnkoIHNlbGVjdG9yICksXG5cdFx0XHRsYXN0ID0gaW5zZXJ0Lmxlbmd0aCAtIDEsXG5cdFx0XHRpID0gMDtcblxuXHRcdGZvciAoIDsgaSA8PSBsYXN0OyBpKysgKSB7XG5cdFx0XHRlbGVtcyA9IGkgPT09IGxhc3QgPyB0aGlzIDogdGhpcy5jbG9uZSggdHJ1ZSApO1xuXHRcdFx0alF1ZXJ5KCBpbnNlcnRbIGkgXSApWyBvcmlnaW5hbCBdKCBlbGVtcyApO1xuXG5cdFx0XHQvLyBTdXBwb3J0OiBBbmRyb2lkIDw9NC4wIG9ubHksIFBoYW50b21KUyAxIG9ubHlcblx0XHRcdC8vIC5nZXQoKSBiZWNhdXNlIHB1c2guYXBwbHkoXywgYXJyYXlsaWtlKSB0aHJvd3Mgb24gYW5jaWVudCBXZWJLaXRcblx0XHRcdHB1c2guYXBwbHkoIHJldCwgZWxlbXMuZ2V0KCkgKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5wdXNoU3RhY2soIHJldCApO1xuXHR9O1xufSApO1xudmFyIHJudW1ub25weCA9IG5ldyBSZWdFeHAoIFwiXihcIiArIHBudW0gKyBcIikoPyFweClbYS16JV0rJFwiLCBcImlcIiApO1xuXG52YXIgZ2V0U3R5bGVzID0gZnVuY3Rpb24oIGVsZW0gKSB7XG5cblx0XHQvLyBTdXBwb3J0OiBJRSA8PTExIG9ubHksIEZpcmVmb3ggPD0zMCAoIzE1MDk4LCAjMTQxNTApXG5cdFx0Ly8gSUUgdGhyb3dzIG9uIGVsZW1lbnRzIGNyZWF0ZWQgaW4gcG9wdXBzXG5cdFx0Ly8gRkYgbWVhbndoaWxlIHRocm93cyBvbiBmcmFtZSBlbGVtZW50cyB0aHJvdWdoIFwiZGVmYXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZVwiXG5cdFx0dmFyIHZpZXcgPSBlbGVtLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXc7XG5cblx0XHRpZiAoICF2aWV3IHx8ICF2aWV3Lm9wZW5lciApIHtcblx0XHRcdHZpZXcgPSB3aW5kb3c7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHZpZXcuZ2V0Q29tcHV0ZWRTdHlsZSggZWxlbSApO1xuXHR9O1xuXG52YXIgcmJveFN0eWxlID0gbmV3IFJlZ0V4cCggY3NzRXhwYW5kLmpvaW4oIFwifFwiICksIFwiaVwiICk7XG5cblxuXG4oIGZ1bmN0aW9uKCkge1xuXG5cdC8vIEV4ZWN1dGluZyBib3RoIHBpeGVsUG9zaXRpb24gJiBib3hTaXppbmdSZWxpYWJsZSB0ZXN0cyByZXF1aXJlIG9ubHkgb25lIGxheW91dFxuXHQvLyBzbyB0aGV5J3JlIGV4ZWN1dGVkIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSB0aGUgc2Vjb25kIGNvbXB1dGF0aW9uLlxuXHRmdW5jdGlvbiBjb21wdXRlU3R5bGVUZXN0cygpIHtcblxuXHRcdC8vIFRoaXMgaXMgYSBzaW5nbGV0b24sIHdlIG5lZWQgdG8gZXhlY3V0ZSBpdCBvbmx5IG9uY2Vcblx0XHRpZiAoICFkaXYgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Y29udGFpbmVyLnN0eWxlLmNzc1RleHQgPSBcInBvc2l0aW9uOmFic29sdXRlO2xlZnQ6LTExMTExcHg7d2lkdGg6NjBweDtcIiArXG5cdFx0XHRcIm1hcmdpbi10b3A6MXB4O3BhZGRpbmc6MDtib3JkZXI6MFwiO1xuXHRcdGRpdi5zdHlsZS5jc3NUZXh0ID1cblx0XHRcdFwicG9zaXRpb246cmVsYXRpdmU7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3g7b3ZlcmZsb3c6c2Nyb2xsO1wiICtcblx0XHRcdFwibWFyZ2luOmF1dG87Ym9yZGVyOjFweDtwYWRkaW5nOjFweDtcIiArXG5cdFx0XHRcIndpZHRoOjYwJTt0b3A6MSVcIjtcblx0XHRkb2N1bWVudEVsZW1lbnQuYXBwZW5kQ2hpbGQoIGNvbnRhaW5lciApLmFwcGVuZENoaWxkKCBkaXYgKTtcblxuXHRcdHZhciBkaXZTdHlsZSA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKCBkaXYgKTtcblx0XHRwaXhlbFBvc2l0aW9uVmFsID0gZGl2U3R5bGUudG9wICE9PSBcIjElXCI7XG5cblx0XHQvLyBTdXBwb3J0OiBBbmRyb2lkIDQuMCAtIDQuMyBvbmx5LCBGaXJlZm94IDw9MyAtIDQ0XG5cdFx0cmVsaWFibGVNYXJnaW5MZWZ0VmFsID0gcm91bmRQaXhlbE1lYXN1cmVzKCBkaXZTdHlsZS5tYXJnaW5MZWZ0ICkgPT09IDEyO1xuXG5cdFx0Ly8gU3VwcG9ydDogQW5kcm9pZCA0LjAgLSA0LjMgb25seSwgU2FmYXJpIDw9OS4xIC0gMTAuMSwgaU9TIDw9Ny4wIC0gOS4zXG5cdFx0Ly8gU29tZSBzdHlsZXMgY29tZSBiYWNrIHdpdGggcGVyY2VudGFnZSB2YWx1ZXMsIGV2ZW4gdGhvdWdoIHRoZXkgc2hvdWxkbid0XG5cdFx0ZGl2LnN0eWxlLnJpZ2h0ID0gXCI2MCVcIjtcblx0XHRwaXhlbEJveFN0eWxlc1ZhbCA9IHJvdW5kUGl4ZWxNZWFzdXJlcyggZGl2U3R5bGUucmlnaHQgKSA9PT0gMzY7XG5cblx0XHQvLyBTdXBwb3J0OiBJRSA5IC0gMTEgb25seVxuXHRcdC8vIERldGVjdCBtaXNyZXBvcnRpbmcgb2YgY29udGVudCBkaW1lbnNpb25zIGZvciBib3gtc2l6aW5nOmJvcmRlci1ib3ggZWxlbWVudHNcblx0XHRib3hTaXppbmdSZWxpYWJsZVZhbCA9IHJvdW5kUGl4ZWxNZWFzdXJlcyggZGl2U3R5bGUud2lkdGggKSA9PT0gMzY7XG5cblx0XHQvLyBTdXBwb3J0OiBJRSA5IG9ubHlcblx0XHQvLyBEZXRlY3Qgb3ZlcmZsb3c6c2Nyb2xsIHNjcmV3aW5lc3MgKGdoLTM2OTkpXG5cdFx0ZGl2LnN0eWxlLnBvc2l0aW9uID0gXCJhYnNvbHV0ZVwiO1xuXHRcdHNjcm9sbGJveFNpemVWYWwgPSBkaXYub2Zmc2V0V2lkdGggPT09IDM2IHx8IFwiYWJzb2x1dGVcIjtcblxuXHRcdGRvY3VtZW50RWxlbWVudC5yZW1vdmVDaGlsZCggY29udGFpbmVyICk7XG5cblx0XHQvLyBOdWxsaWZ5IHRoZSBkaXYgc28gaXQgd291bGRuJ3QgYmUgc3RvcmVkIGluIHRoZSBtZW1vcnkgYW5kXG5cdFx0Ly8gaXQgd2lsbCBhbHNvIGJlIGEgc2lnbiB0aGF0IGNoZWNrcyBhbHJlYWR5IHBlcmZvcm1lZFxuXHRcdGRpdiA9IG51bGw7XG5cdH1cblxuXHRmdW5jdGlvbiByb3VuZFBpeGVsTWVhc3VyZXMoIG1lYXN1cmUgKSB7XG5cdFx0cmV0dXJuIE1hdGgucm91bmQoIHBhcnNlRmxvYXQoIG1lYXN1cmUgKSApO1xuXHR9XG5cblx0dmFyIHBpeGVsUG9zaXRpb25WYWwsIGJveFNpemluZ1JlbGlhYmxlVmFsLCBzY3JvbGxib3hTaXplVmFsLCBwaXhlbEJveFN0eWxlc1ZhbCxcblx0XHRyZWxpYWJsZU1hcmdpbkxlZnRWYWwsXG5cdFx0Y29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJkaXZcIiApLFxuXHRcdGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwiZGl2XCIgKTtcblxuXHQvLyBGaW5pc2ggZWFybHkgaW4gbGltaXRlZCAobm9uLWJyb3dzZXIpIGVudmlyb25tZW50c1xuXHRpZiAoICFkaXYuc3R5bGUgKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0Ly8gU3VwcG9ydDogSUUgPD05IC0gMTEgb25seVxuXHQvLyBTdHlsZSBvZiBjbG9uZWQgZWxlbWVudCBhZmZlY3RzIHNvdXJjZSBlbGVtZW50IGNsb25lZCAoIzg5MDgpXG5cdGRpdi5zdHlsZS5iYWNrZ3JvdW5kQ2xpcCA9IFwiY29udGVudC1ib3hcIjtcblx0ZGl2LmNsb25lTm9kZSggdHJ1ZSApLnN0eWxlLmJhY2tncm91bmRDbGlwID0gXCJcIjtcblx0c3VwcG9ydC5jbGVhckNsb25lU3R5bGUgPSBkaXYuc3R5bGUuYmFja2dyb3VuZENsaXAgPT09IFwiY29udGVudC1ib3hcIjtcblxuXHRqUXVlcnkuZXh0ZW5kKCBzdXBwb3J0LCB7XG5cdFx0Ym94U2l6aW5nUmVsaWFibGU6IGZ1bmN0aW9uKCkge1xuXHRcdFx0Y29tcHV0ZVN0eWxlVGVzdHMoKTtcblx0XHRcdHJldHVybiBib3hTaXppbmdSZWxpYWJsZVZhbDtcblx0XHR9LFxuXHRcdHBpeGVsQm94U3R5bGVzOiBmdW5jdGlvbigpIHtcblx0XHRcdGNvbXB1dGVTdHlsZVRlc3RzKCk7XG5cdFx0XHRyZXR1cm4gcGl4ZWxCb3hTdHlsZXNWYWw7XG5cdFx0fSxcblx0XHRwaXhlbFBvc2l0aW9uOiBmdW5jdGlvbigpIHtcblx0XHRcdGNvbXB1dGVTdHlsZVRlc3RzKCk7XG5cdFx0XHRyZXR1cm4gcGl4ZWxQb3NpdGlvblZhbDtcblx0XHR9LFxuXHRcdHJlbGlhYmxlTWFyZ2luTGVmdDogZnVuY3Rpb24oKSB7XG5cdFx0XHRjb21wdXRlU3R5bGVUZXN0cygpO1xuXHRcdFx0cmV0dXJuIHJlbGlhYmxlTWFyZ2luTGVmdFZhbDtcblx0XHR9LFxuXHRcdHNjcm9sbGJveFNpemU6IGZ1bmN0aW9uKCkge1xuXHRcdFx0Y29tcHV0ZVN0eWxlVGVzdHMoKTtcblx0XHRcdHJldHVybiBzY3JvbGxib3hTaXplVmFsO1xuXHRcdH1cblx0fSApO1xufSApKCk7XG5cblxuZnVuY3Rpb24gY3VyQ1NTKCBlbGVtLCBuYW1lLCBjb21wdXRlZCApIHtcblx0dmFyIHdpZHRoLCBtaW5XaWR0aCwgbWF4V2lkdGgsIHJldCxcblxuXHRcdC8vIFN1cHBvcnQ6IEZpcmVmb3ggNTErXG5cdFx0Ly8gUmV0cmlldmluZyBzdHlsZSBiZWZvcmUgY29tcHV0ZWQgc29tZWhvd1xuXHRcdC8vIGZpeGVzIGFuIGlzc3VlIHdpdGggZ2V0dGluZyB3cm9uZyB2YWx1ZXNcblx0XHQvLyBvbiBkZXRhY2hlZCBlbGVtZW50c1xuXHRcdHN0eWxlID0gZWxlbS5zdHlsZTtcblxuXHRjb21wdXRlZCA9IGNvbXB1dGVkIHx8IGdldFN0eWxlcyggZWxlbSApO1xuXG5cdC8vIGdldFByb3BlcnR5VmFsdWUgaXMgbmVlZGVkIGZvcjpcblx0Ly8gICAuY3NzKCdmaWx0ZXInKSAoSUUgOSBvbmx5LCAjMTI1MzcpXG5cdC8vICAgLmNzcygnLS1jdXN0b21Qcm9wZXJ0eSkgKCMzMTQ0KVxuXHRpZiAoIGNvbXB1dGVkICkge1xuXHRcdHJldCA9IGNvbXB1dGVkLmdldFByb3BlcnR5VmFsdWUoIG5hbWUgKSB8fCBjb21wdXRlZFsgbmFtZSBdO1xuXG5cdFx0aWYgKCByZXQgPT09IFwiXCIgJiYgIWpRdWVyeS5jb250YWlucyggZWxlbS5vd25lckRvY3VtZW50LCBlbGVtICkgKSB7XG5cdFx0XHRyZXQgPSBqUXVlcnkuc3R5bGUoIGVsZW0sIG5hbWUgKTtcblx0XHR9XG5cblx0XHQvLyBBIHRyaWJ1dGUgdG8gdGhlIFwiYXdlc29tZSBoYWNrIGJ5IERlYW4gRWR3YXJkc1wiXG5cdFx0Ly8gQW5kcm9pZCBCcm93c2VyIHJldHVybnMgcGVyY2VudGFnZSBmb3Igc29tZSB2YWx1ZXMsXG5cdFx0Ly8gYnV0IHdpZHRoIHNlZW1zIHRvIGJlIHJlbGlhYmx5IHBpeGVscy5cblx0XHQvLyBUaGlzIGlzIGFnYWluc3QgdGhlIENTU09NIGRyYWZ0IHNwZWM6XG5cdFx0Ly8gaHR0cHM6Ly9kcmFmdHMuY3Nzd2cub3JnL2Nzc29tLyNyZXNvbHZlZC12YWx1ZXNcblx0XHRpZiAoICFzdXBwb3J0LnBpeGVsQm94U3R5bGVzKCkgJiYgcm51bW5vbnB4LnRlc3QoIHJldCApICYmIHJib3hTdHlsZS50ZXN0KCBuYW1lICkgKSB7XG5cblx0XHRcdC8vIFJlbWVtYmVyIHRoZSBvcmlnaW5hbCB2YWx1ZXNcblx0XHRcdHdpZHRoID0gc3R5bGUud2lkdGg7XG5cdFx0XHRtaW5XaWR0aCA9IHN0eWxlLm1pbldpZHRoO1xuXHRcdFx0bWF4V2lkdGggPSBzdHlsZS5tYXhXaWR0aDtcblxuXHRcdFx0Ly8gUHV0IGluIHRoZSBuZXcgdmFsdWVzIHRvIGdldCBhIGNvbXB1dGVkIHZhbHVlIG91dFxuXHRcdFx0c3R5bGUubWluV2lkdGggPSBzdHlsZS5tYXhXaWR0aCA9IHN0eWxlLndpZHRoID0gcmV0O1xuXHRcdFx0cmV0ID0gY29tcHV0ZWQud2lkdGg7XG5cblx0XHRcdC8vIFJldmVydCB0aGUgY2hhbmdlZCB2YWx1ZXNcblx0XHRcdHN0eWxlLndpZHRoID0gd2lkdGg7XG5cdFx0XHRzdHlsZS5taW5XaWR0aCA9IG1pbldpZHRoO1xuXHRcdFx0c3R5bGUubWF4V2lkdGggPSBtYXhXaWR0aDtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gcmV0ICE9PSB1bmRlZmluZWQgP1xuXG5cdFx0Ly8gU3VwcG9ydDogSUUgPD05IC0gMTEgb25seVxuXHRcdC8vIElFIHJldHVybnMgekluZGV4IHZhbHVlIGFzIGFuIGludGVnZXIuXG5cdFx0cmV0ICsgXCJcIiA6XG5cdFx0cmV0O1xufVxuXG5cbmZ1bmN0aW9uIGFkZEdldEhvb2tJZiggY29uZGl0aW9uRm4sIGhvb2tGbiApIHtcblxuXHQvLyBEZWZpbmUgdGhlIGhvb2ssIHdlJ2xsIGNoZWNrIG9uIHRoZSBmaXJzdCBydW4gaWYgaXQncyByZWFsbHkgbmVlZGVkLlxuXHRyZXR1cm4ge1xuXHRcdGdldDogZnVuY3Rpb24oKSB7XG5cdFx0XHRpZiAoIGNvbmRpdGlvbkZuKCkgKSB7XG5cblx0XHRcdFx0Ly8gSG9vayBub3QgbmVlZGVkIChvciBpdCdzIG5vdCBwb3NzaWJsZSB0byB1c2UgaXQgZHVlXG5cdFx0XHRcdC8vIHRvIG1pc3NpbmcgZGVwZW5kZW5jeSksIHJlbW92ZSBpdC5cblx0XHRcdFx0ZGVsZXRlIHRoaXMuZ2V0O1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdC8vIEhvb2sgbmVlZGVkOyByZWRlZmluZSBpdCBzbyB0aGF0IHRoZSBzdXBwb3J0IHRlc3QgaXMgbm90IGV4ZWN1dGVkIGFnYWluLlxuXHRcdFx0cmV0dXJuICggdGhpcy5nZXQgPSBob29rRm4gKS5hcHBseSggdGhpcywgYXJndW1lbnRzICk7XG5cdFx0fVxuXHR9O1xufVxuXG5cbnZhclxuXG5cdC8vIFN3YXBwYWJsZSBpZiBkaXNwbGF5IGlzIG5vbmUgb3Igc3RhcnRzIHdpdGggdGFibGVcblx0Ly8gZXhjZXB0IFwidGFibGVcIiwgXCJ0YWJsZS1jZWxsXCIsIG9yIFwidGFibGUtY2FwdGlvblwiXG5cdC8vIFNlZSBoZXJlIGZvciBkaXNwbGF5IHZhbHVlczogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9DU1MvZGlzcGxheVxuXHRyZGlzcGxheXN3YXAgPSAvXihub25lfHRhYmxlKD8hLWNbZWFdKS4rKS8sXG5cdHJjdXN0b21Qcm9wID0gL14tLS8sXG5cdGNzc1Nob3cgPSB7IHBvc2l0aW9uOiBcImFic29sdXRlXCIsIHZpc2liaWxpdHk6IFwiaGlkZGVuXCIsIGRpc3BsYXk6IFwiYmxvY2tcIiB9LFxuXHRjc3NOb3JtYWxUcmFuc2Zvcm0gPSB7XG5cdFx0bGV0dGVyU3BhY2luZzogXCIwXCIsXG5cdFx0Zm9udFdlaWdodDogXCI0MDBcIlxuXHR9LFxuXG5cdGNzc1ByZWZpeGVzID0gWyBcIldlYmtpdFwiLCBcIk1velwiLCBcIm1zXCIgXSxcblx0ZW1wdHlTdHlsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwiZGl2XCIgKS5zdHlsZTtcblxuLy8gUmV0dXJuIGEgY3NzIHByb3BlcnR5IG1hcHBlZCB0byBhIHBvdGVudGlhbGx5IHZlbmRvciBwcmVmaXhlZCBwcm9wZXJ0eVxuZnVuY3Rpb24gdmVuZG9yUHJvcE5hbWUoIG5hbWUgKSB7XG5cblx0Ly8gU2hvcnRjdXQgZm9yIG5hbWVzIHRoYXQgYXJlIG5vdCB2ZW5kb3IgcHJlZml4ZWRcblx0aWYgKCBuYW1lIGluIGVtcHR5U3R5bGUgKSB7XG5cdFx0cmV0dXJuIG5hbWU7XG5cdH1cblxuXHQvLyBDaGVjayBmb3IgdmVuZG9yIHByZWZpeGVkIG5hbWVzXG5cdHZhciBjYXBOYW1lID0gbmFtZVsgMCBdLnRvVXBwZXJDYXNlKCkgKyBuYW1lLnNsaWNlKCAxICksXG5cdFx0aSA9IGNzc1ByZWZpeGVzLmxlbmd0aDtcblxuXHR3aGlsZSAoIGktLSApIHtcblx0XHRuYW1lID0gY3NzUHJlZml4ZXNbIGkgXSArIGNhcE5hbWU7XG5cdFx0aWYgKCBuYW1lIGluIGVtcHR5U3R5bGUgKSB7XG5cdFx0XHRyZXR1cm4gbmFtZTtcblx0XHR9XG5cdH1cbn1cblxuLy8gUmV0dXJuIGEgcHJvcGVydHkgbWFwcGVkIGFsb25nIHdoYXQgalF1ZXJ5LmNzc1Byb3BzIHN1Z2dlc3RzIG9yIHRvXG4vLyBhIHZlbmRvciBwcmVmaXhlZCBwcm9wZXJ0eS5cbmZ1bmN0aW9uIGZpbmFsUHJvcE5hbWUoIG5hbWUgKSB7XG5cdHZhciByZXQgPSBqUXVlcnkuY3NzUHJvcHNbIG5hbWUgXTtcblx0aWYgKCAhcmV0ICkge1xuXHRcdHJldCA9IGpRdWVyeS5jc3NQcm9wc1sgbmFtZSBdID0gdmVuZG9yUHJvcE5hbWUoIG5hbWUgKSB8fCBuYW1lO1xuXHR9XG5cdHJldHVybiByZXQ7XG59XG5cbmZ1bmN0aW9uIHNldFBvc2l0aXZlTnVtYmVyKCBlbGVtLCB2YWx1ZSwgc3VidHJhY3QgKSB7XG5cblx0Ly8gQW55IHJlbGF0aXZlICgrLy0pIHZhbHVlcyBoYXZlIGFscmVhZHkgYmVlblxuXHQvLyBub3JtYWxpemVkIGF0IHRoaXMgcG9pbnRcblx0dmFyIG1hdGNoZXMgPSByY3NzTnVtLmV4ZWMoIHZhbHVlICk7XG5cdHJldHVybiBtYXRjaGVzID9cblxuXHRcdC8vIEd1YXJkIGFnYWluc3QgdW5kZWZpbmVkIFwic3VidHJhY3RcIiwgZS5nLiwgd2hlbiB1c2VkIGFzIGluIGNzc0hvb2tzXG5cdFx0TWF0aC5tYXgoIDAsIG1hdGNoZXNbIDIgXSAtICggc3VidHJhY3QgfHwgMCApICkgKyAoIG1hdGNoZXNbIDMgXSB8fCBcInB4XCIgKSA6XG5cdFx0dmFsdWU7XG59XG5cbmZ1bmN0aW9uIGJveE1vZGVsQWRqdXN0bWVudCggZWxlbSwgZGltZW5zaW9uLCBib3gsIGlzQm9yZGVyQm94LCBzdHlsZXMsIGNvbXB1dGVkVmFsICkge1xuXHR2YXIgaSA9IGRpbWVuc2lvbiA9PT0gXCJ3aWR0aFwiID8gMSA6IDAsXG5cdFx0ZXh0cmEgPSAwLFxuXHRcdGRlbHRhID0gMDtcblxuXHQvLyBBZGp1c3RtZW50IG1heSBub3QgYmUgbmVjZXNzYXJ5XG5cdGlmICggYm94ID09PSAoIGlzQm9yZGVyQm94ID8gXCJib3JkZXJcIiA6IFwiY29udGVudFwiICkgKSB7XG5cdFx0cmV0dXJuIDA7XG5cdH1cblxuXHRmb3IgKCA7IGkgPCA0OyBpICs9IDIgKSB7XG5cblx0XHQvLyBCb3RoIGJveCBtb2RlbHMgZXhjbHVkZSBtYXJnaW5cblx0XHRpZiAoIGJveCA9PT0gXCJtYXJnaW5cIiApIHtcblx0XHRcdGRlbHRhICs9IGpRdWVyeS5jc3MoIGVsZW0sIGJveCArIGNzc0V4cGFuZFsgaSBdLCB0cnVlLCBzdHlsZXMgKTtcblx0XHR9XG5cblx0XHQvLyBJZiB3ZSBnZXQgaGVyZSB3aXRoIGEgY29udGVudC1ib3gsIHdlJ3JlIHNlZWtpbmcgXCJwYWRkaW5nXCIgb3IgXCJib3JkZXJcIiBvciBcIm1hcmdpblwiXG5cdFx0aWYgKCAhaXNCb3JkZXJCb3ggKSB7XG5cblx0XHRcdC8vIEFkZCBwYWRkaW5nXG5cdFx0XHRkZWx0YSArPSBqUXVlcnkuY3NzKCBlbGVtLCBcInBhZGRpbmdcIiArIGNzc0V4cGFuZFsgaSBdLCB0cnVlLCBzdHlsZXMgKTtcblxuXHRcdFx0Ly8gRm9yIFwiYm9yZGVyXCIgb3IgXCJtYXJnaW5cIiwgYWRkIGJvcmRlclxuXHRcdFx0aWYgKCBib3ggIT09IFwicGFkZGluZ1wiICkge1xuXHRcdFx0XHRkZWx0YSArPSBqUXVlcnkuY3NzKCBlbGVtLCBcImJvcmRlclwiICsgY3NzRXhwYW5kWyBpIF0gKyBcIldpZHRoXCIsIHRydWUsIHN0eWxlcyApO1xuXG5cdFx0XHQvLyBCdXQgc3RpbGwga2VlcCB0cmFjayBvZiBpdCBvdGhlcndpc2Vcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGV4dHJhICs9IGpRdWVyeS5jc3MoIGVsZW0sIFwiYm9yZGVyXCIgKyBjc3NFeHBhbmRbIGkgXSArIFwiV2lkdGhcIiwgdHJ1ZSwgc3R5bGVzICk7XG5cdFx0XHR9XG5cblx0XHQvLyBJZiB3ZSBnZXQgaGVyZSB3aXRoIGEgYm9yZGVyLWJveCAoY29udGVudCArIHBhZGRpbmcgKyBib3JkZXIpLCB3ZSdyZSBzZWVraW5nIFwiY29udGVudFwiIG9yXG5cdFx0Ly8gXCJwYWRkaW5nXCIgb3IgXCJtYXJnaW5cIlxuXHRcdH0gZWxzZSB7XG5cblx0XHRcdC8vIEZvciBcImNvbnRlbnRcIiwgc3VidHJhY3QgcGFkZGluZ1xuXHRcdFx0aWYgKCBib3ggPT09IFwiY29udGVudFwiICkge1xuXHRcdFx0XHRkZWx0YSAtPSBqUXVlcnkuY3NzKCBlbGVtLCBcInBhZGRpbmdcIiArIGNzc0V4cGFuZFsgaSBdLCB0cnVlLCBzdHlsZXMgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gRm9yIFwiY29udGVudFwiIG9yIFwicGFkZGluZ1wiLCBzdWJ0cmFjdCBib3JkZXJcblx0XHRcdGlmICggYm94ICE9PSBcIm1hcmdpblwiICkge1xuXHRcdFx0XHRkZWx0YSAtPSBqUXVlcnkuY3NzKCBlbGVtLCBcImJvcmRlclwiICsgY3NzRXhwYW5kWyBpIF0gKyBcIldpZHRoXCIsIHRydWUsIHN0eWxlcyApO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8vIEFjY291bnQgZm9yIHBvc2l0aXZlIGNvbnRlbnQtYm94IHNjcm9sbCBndXR0ZXIgd2hlbiByZXF1ZXN0ZWQgYnkgcHJvdmlkaW5nIGNvbXB1dGVkVmFsXG5cdGlmICggIWlzQm9yZGVyQm94ICYmIGNvbXB1dGVkVmFsID49IDAgKSB7XG5cblx0XHQvLyBvZmZzZXRXaWR0aC9vZmZzZXRIZWlnaHQgaXMgYSByb3VuZGVkIHN1bSBvZiBjb250ZW50LCBwYWRkaW5nLCBzY3JvbGwgZ3V0dGVyLCBhbmQgYm9yZGVyXG5cdFx0Ly8gQXNzdW1pbmcgaW50ZWdlciBzY3JvbGwgZ3V0dGVyLCBzdWJ0cmFjdCB0aGUgcmVzdCBhbmQgcm91bmQgZG93blxuXHRcdGRlbHRhICs9IE1hdGgubWF4KCAwLCBNYXRoLmNlaWwoXG5cdFx0XHRlbGVtWyBcIm9mZnNldFwiICsgZGltZW5zaW9uWyAwIF0udG9VcHBlckNhc2UoKSArIGRpbWVuc2lvbi5zbGljZSggMSApIF0gLVxuXHRcdFx0Y29tcHV0ZWRWYWwgLVxuXHRcdFx0ZGVsdGEgLVxuXHRcdFx0ZXh0cmEgLVxuXHRcdFx0MC41XG5cdFx0KSApO1xuXHR9XG5cblx0cmV0dXJuIGRlbHRhO1xufVxuXG5mdW5jdGlvbiBnZXRXaWR0aE9ySGVpZ2h0KCBlbGVtLCBkaW1lbnNpb24sIGV4dHJhICkge1xuXG5cdC8vIFN0YXJ0IHdpdGggY29tcHV0ZWQgc3R5bGVcblx0dmFyIHN0eWxlcyA9IGdldFN0eWxlcyggZWxlbSApLFxuXHRcdHZhbCA9IGN1ckNTUyggZWxlbSwgZGltZW5zaW9uLCBzdHlsZXMgKSxcblx0XHRpc0JvcmRlckJveCA9IGpRdWVyeS5jc3MoIGVsZW0sIFwiYm94U2l6aW5nXCIsIGZhbHNlLCBzdHlsZXMgKSA9PT0gXCJib3JkZXItYm94XCIsXG5cdFx0dmFsdWVJc0JvcmRlckJveCA9IGlzQm9yZGVyQm94O1xuXG5cdC8vIFN1cHBvcnQ6IEZpcmVmb3ggPD01NFxuXHQvLyBSZXR1cm4gYSBjb25mb3VuZGluZyBub24tcGl4ZWwgdmFsdWUgb3IgZmVpZ24gaWdub3JhbmNlLCBhcyBhcHByb3ByaWF0ZS5cblx0aWYgKCBybnVtbm9ucHgudGVzdCggdmFsICkgKSB7XG5cdFx0aWYgKCAhZXh0cmEgKSB7XG5cdFx0XHRyZXR1cm4gdmFsO1xuXHRcdH1cblx0XHR2YWwgPSBcImF1dG9cIjtcblx0fVxuXG5cdC8vIENoZWNrIGZvciBzdHlsZSBpbiBjYXNlIGEgYnJvd3NlciB3aGljaCByZXR1cm5zIHVucmVsaWFibGUgdmFsdWVzXG5cdC8vIGZvciBnZXRDb21wdXRlZFN0eWxlIHNpbGVudGx5IGZhbGxzIGJhY2sgdG8gdGhlIHJlbGlhYmxlIGVsZW0uc3R5bGVcblx0dmFsdWVJc0JvcmRlckJveCA9IHZhbHVlSXNCb3JkZXJCb3ggJiZcblx0XHQoIHN1cHBvcnQuYm94U2l6aW5nUmVsaWFibGUoKSB8fCB2YWwgPT09IGVsZW0uc3R5bGVbIGRpbWVuc2lvbiBdICk7XG5cblx0Ly8gRmFsbCBiYWNrIHRvIG9mZnNldFdpZHRoL29mZnNldEhlaWdodCB3aGVuIHZhbHVlIGlzIFwiYXV0b1wiXG5cdC8vIFRoaXMgaGFwcGVucyBmb3IgaW5saW5lIGVsZW1lbnRzIHdpdGggbm8gZXhwbGljaXQgc2V0dGluZyAoZ2gtMzU3MSlcblx0Ly8gU3VwcG9ydDogQW5kcm9pZCA8PTQuMSAtIDQuMyBvbmx5XG5cdC8vIEFsc28gdXNlIG9mZnNldFdpZHRoL29mZnNldEhlaWdodCBmb3IgbWlzcmVwb3J0ZWQgaW5saW5lIGRpbWVuc2lvbnMgKGdoLTM2MDIpXG5cdGlmICggdmFsID09PSBcImF1dG9cIiB8fFxuXHRcdCFwYXJzZUZsb2F0KCB2YWwgKSAmJiBqUXVlcnkuY3NzKCBlbGVtLCBcImRpc3BsYXlcIiwgZmFsc2UsIHN0eWxlcyApID09PSBcImlubGluZVwiICkge1xuXG5cdFx0dmFsID0gZWxlbVsgXCJvZmZzZXRcIiArIGRpbWVuc2lvblsgMCBdLnRvVXBwZXJDYXNlKCkgKyBkaW1lbnNpb24uc2xpY2UoIDEgKSBdO1xuXG5cdFx0Ly8gb2Zmc2V0V2lkdGgvb2Zmc2V0SGVpZ2h0IHByb3ZpZGUgYm9yZGVyLWJveCB2YWx1ZXNcblx0XHR2YWx1ZUlzQm9yZGVyQm94ID0gdHJ1ZTtcblx0fVxuXG5cdC8vIE5vcm1hbGl6ZSBcIlwiIGFuZCBhdXRvXG5cdHZhbCA9IHBhcnNlRmxvYXQoIHZhbCApIHx8IDA7XG5cblx0Ly8gQWRqdXN0IGZvciB0aGUgZWxlbWVudCdzIGJveCBtb2RlbFxuXHRyZXR1cm4gKCB2YWwgK1xuXHRcdGJveE1vZGVsQWRqdXN0bWVudChcblx0XHRcdGVsZW0sXG5cdFx0XHRkaW1lbnNpb24sXG5cdFx0XHRleHRyYSB8fCAoIGlzQm9yZGVyQm94ID8gXCJib3JkZXJcIiA6IFwiY29udGVudFwiICksXG5cdFx0XHR2YWx1ZUlzQm9yZGVyQm94LFxuXHRcdFx0c3R5bGVzLFxuXG5cdFx0XHQvLyBQcm92aWRlIHRoZSBjdXJyZW50IGNvbXB1dGVkIHNpemUgdG8gcmVxdWVzdCBzY3JvbGwgZ3V0dGVyIGNhbGN1bGF0aW9uIChnaC0zNTg5KVxuXHRcdFx0dmFsXG5cdFx0KVxuXHQpICsgXCJweFwiO1xufVxuXG5qUXVlcnkuZXh0ZW5kKCB7XG5cblx0Ly8gQWRkIGluIHN0eWxlIHByb3BlcnR5IGhvb2tzIGZvciBvdmVycmlkaW5nIHRoZSBkZWZhdWx0XG5cdC8vIGJlaGF2aW9yIG9mIGdldHRpbmcgYW5kIHNldHRpbmcgYSBzdHlsZSBwcm9wZXJ0eVxuXHRjc3NIb29rczoge1xuXHRcdG9wYWNpdHk6IHtcblx0XHRcdGdldDogZnVuY3Rpb24oIGVsZW0sIGNvbXB1dGVkICkge1xuXHRcdFx0XHRpZiAoIGNvbXB1dGVkICkge1xuXG5cdFx0XHRcdFx0Ly8gV2Ugc2hvdWxkIGFsd2F5cyBnZXQgYSBudW1iZXIgYmFjayBmcm9tIG9wYWNpdHlcblx0XHRcdFx0XHR2YXIgcmV0ID0gY3VyQ1NTKCBlbGVtLCBcIm9wYWNpdHlcIiApO1xuXHRcdFx0XHRcdHJldHVybiByZXQgPT09IFwiXCIgPyBcIjFcIiA6IHJldDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fSxcblxuXHQvLyBEb24ndCBhdXRvbWF0aWNhbGx5IGFkZCBcInB4XCIgdG8gdGhlc2UgcG9zc2libHktdW5pdGxlc3MgcHJvcGVydGllc1xuXHRjc3NOdW1iZXI6IHtcblx0XHRcImFuaW1hdGlvbkl0ZXJhdGlvbkNvdW50XCI6IHRydWUsXG5cdFx0XCJjb2x1bW5Db3VudFwiOiB0cnVlLFxuXHRcdFwiZmlsbE9wYWNpdHlcIjogdHJ1ZSxcblx0XHRcImZsZXhHcm93XCI6IHRydWUsXG5cdFx0XCJmbGV4U2hyaW5rXCI6IHRydWUsXG5cdFx0XCJmb250V2VpZ2h0XCI6IHRydWUsXG5cdFx0XCJsaW5lSGVpZ2h0XCI6IHRydWUsXG5cdFx0XCJvcGFjaXR5XCI6IHRydWUsXG5cdFx0XCJvcmRlclwiOiB0cnVlLFxuXHRcdFwib3JwaGFuc1wiOiB0cnVlLFxuXHRcdFwid2lkb3dzXCI6IHRydWUsXG5cdFx0XCJ6SW5kZXhcIjogdHJ1ZSxcblx0XHRcInpvb21cIjogdHJ1ZVxuXHR9LFxuXG5cdC8vIEFkZCBpbiBwcm9wZXJ0aWVzIHdob3NlIG5hbWVzIHlvdSB3aXNoIHRvIGZpeCBiZWZvcmVcblx0Ly8gc2V0dGluZyBvciBnZXR0aW5nIHRoZSB2YWx1ZVxuXHRjc3NQcm9wczoge30sXG5cblx0Ly8gR2V0IGFuZCBzZXQgdGhlIHN0eWxlIHByb3BlcnR5IG9uIGEgRE9NIE5vZGVcblx0c3R5bGU6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCB2YWx1ZSwgZXh0cmEgKSB7XG5cblx0XHQvLyBEb24ndCBzZXQgc3R5bGVzIG9uIHRleHQgYW5kIGNvbW1lbnQgbm9kZXNcblx0XHRpZiAoICFlbGVtIHx8IGVsZW0ubm9kZVR5cGUgPT09IDMgfHwgZWxlbS5ub2RlVHlwZSA9PT0gOCB8fCAhZWxlbS5zdHlsZSApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBNYWtlIHN1cmUgdGhhdCB3ZSdyZSB3b3JraW5nIHdpdGggdGhlIHJpZ2h0IG5hbWVcblx0XHR2YXIgcmV0LCB0eXBlLCBob29rcyxcblx0XHRcdG9yaWdOYW1lID0gY2FtZWxDYXNlKCBuYW1lICksXG5cdFx0XHRpc0N1c3RvbVByb3AgPSByY3VzdG9tUHJvcC50ZXN0KCBuYW1lICksXG5cdFx0XHRzdHlsZSA9IGVsZW0uc3R5bGU7XG5cblx0XHQvLyBNYWtlIHN1cmUgdGhhdCB3ZSdyZSB3b3JraW5nIHdpdGggdGhlIHJpZ2h0IG5hbWUuIFdlIGRvbid0XG5cdFx0Ly8gd2FudCB0byBxdWVyeSB0aGUgdmFsdWUgaWYgaXQgaXMgYSBDU1MgY3VzdG9tIHByb3BlcnR5XG5cdFx0Ly8gc2luY2UgdGhleSBhcmUgdXNlci1kZWZpbmVkLlxuXHRcdGlmICggIWlzQ3VzdG9tUHJvcCApIHtcblx0XHRcdG5hbWUgPSBmaW5hbFByb3BOYW1lKCBvcmlnTmFtZSApO1xuXHRcdH1cblxuXHRcdC8vIEdldHMgaG9vayBmb3IgdGhlIHByZWZpeGVkIHZlcnNpb24sIHRoZW4gdW5wcmVmaXhlZCB2ZXJzaW9uXG5cdFx0aG9va3MgPSBqUXVlcnkuY3NzSG9va3NbIG5hbWUgXSB8fCBqUXVlcnkuY3NzSG9va3NbIG9yaWdOYW1lIF07XG5cblx0XHQvLyBDaGVjayBpZiB3ZSdyZSBzZXR0aW5nIGEgdmFsdWVcblx0XHRpZiAoIHZhbHVlICE9PSB1bmRlZmluZWQgKSB7XG5cdFx0XHR0eXBlID0gdHlwZW9mIHZhbHVlO1xuXG5cdFx0XHQvLyBDb252ZXJ0IFwiKz1cIiBvciBcIi09XCIgdG8gcmVsYXRpdmUgbnVtYmVycyAoIzczNDUpXG5cdFx0XHRpZiAoIHR5cGUgPT09IFwic3RyaW5nXCIgJiYgKCByZXQgPSByY3NzTnVtLmV4ZWMoIHZhbHVlICkgKSAmJiByZXRbIDEgXSApIHtcblx0XHRcdFx0dmFsdWUgPSBhZGp1c3RDU1MoIGVsZW0sIG5hbWUsIHJldCApO1xuXG5cdFx0XHRcdC8vIEZpeGVzIGJ1ZyAjOTIzN1xuXHRcdFx0XHR0eXBlID0gXCJudW1iZXJcIjtcblx0XHRcdH1cblxuXHRcdFx0Ly8gTWFrZSBzdXJlIHRoYXQgbnVsbCBhbmQgTmFOIHZhbHVlcyBhcmVuJ3Qgc2V0ICgjNzExNilcblx0XHRcdGlmICggdmFsdWUgPT0gbnVsbCB8fCB2YWx1ZSAhPT0gdmFsdWUgKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0Ly8gSWYgYSBudW1iZXIgd2FzIHBhc3NlZCBpbiwgYWRkIHRoZSB1bml0IChleGNlcHQgZm9yIGNlcnRhaW4gQ1NTIHByb3BlcnRpZXMpXG5cdFx0XHRpZiAoIHR5cGUgPT09IFwibnVtYmVyXCIgKSB7XG5cdFx0XHRcdHZhbHVlICs9IHJldCAmJiByZXRbIDMgXSB8fCAoIGpRdWVyeS5jc3NOdW1iZXJbIG9yaWdOYW1lIF0gPyBcIlwiIDogXCJweFwiICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIGJhY2tncm91bmQtKiBwcm9wcyBhZmZlY3Qgb3JpZ2luYWwgY2xvbmUncyB2YWx1ZXNcblx0XHRcdGlmICggIXN1cHBvcnQuY2xlYXJDbG9uZVN0eWxlICYmIHZhbHVlID09PSBcIlwiICYmIG5hbWUuaW5kZXhPZiggXCJiYWNrZ3JvdW5kXCIgKSA9PT0gMCApIHtcblx0XHRcdFx0c3R5bGVbIG5hbWUgXSA9IFwiaW5oZXJpdFwiO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBJZiBhIGhvb2sgd2FzIHByb3ZpZGVkLCB1c2UgdGhhdCB2YWx1ZSwgb3RoZXJ3aXNlIGp1c3Qgc2V0IHRoZSBzcGVjaWZpZWQgdmFsdWVcblx0XHRcdGlmICggIWhvb2tzIHx8ICEoIFwic2V0XCIgaW4gaG9va3MgKSB8fFxuXHRcdFx0XHQoIHZhbHVlID0gaG9va3Muc2V0KCBlbGVtLCB2YWx1ZSwgZXh0cmEgKSApICE9PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdFx0aWYgKCBpc0N1c3RvbVByb3AgKSB7XG5cdFx0XHRcdFx0c3R5bGUuc2V0UHJvcGVydHkoIG5hbWUsIHZhbHVlICk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0c3R5bGVbIG5hbWUgXSA9IHZhbHVlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHR9IGVsc2Uge1xuXG5cdFx0XHQvLyBJZiBhIGhvb2sgd2FzIHByb3ZpZGVkIGdldCB0aGUgbm9uLWNvbXB1dGVkIHZhbHVlIGZyb20gdGhlcmVcblx0XHRcdGlmICggaG9va3MgJiYgXCJnZXRcIiBpbiBob29rcyAmJlxuXHRcdFx0XHQoIHJldCA9IGhvb2tzLmdldCggZWxlbSwgZmFsc2UsIGV4dHJhICkgKSAhPT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHRcdHJldHVybiByZXQ7XG5cdFx0XHR9XG5cblx0XHRcdC8vIE90aGVyd2lzZSBqdXN0IGdldCB0aGUgdmFsdWUgZnJvbSB0aGUgc3R5bGUgb2JqZWN0XG5cdFx0XHRyZXR1cm4gc3R5bGVbIG5hbWUgXTtcblx0XHR9XG5cdH0sXG5cblx0Y3NzOiBmdW5jdGlvbiggZWxlbSwgbmFtZSwgZXh0cmEsIHN0eWxlcyApIHtcblx0XHR2YXIgdmFsLCBudW0sIGhvb2tzLFxuXHRcdFx0b3JpZ05hbWUgPSBjYW1lbENhc2UoIG5hbWUgKSxcblx0XHRcdGlzQ3VzdG9tUHJvcCA9IHJjdXN0b21Qcm9wLnRlc3QoIG5hbWUgKTtcblxuXHRcdC8vIE1ha2Ugc3VyZSB0aGF0IHdlJ3JlIHdvcmtpbmcgd2l0aCB0aGUgcmlnaHQgbmFtZS4gV2UgZG9uJ3Rcblx0XHQvLyB3YW50IHRvIG1vZGlmeSB0aGUgdmFsdWUgaWYgaXQgaXMgYSBDU1MgY3VzdG9tIHByb3BlcnR5XG5cdFx0Ly8gc2luY2UgdGhleSBhcmUgdXNlci1kZWZpbmVkLlxuXHRcdGlmICggIWlzQ3VzdG9tUHJvcCApIHtcblx0XHRcdG5hbWUgPSBmaW5hbFByb3BOYW1lKCBvcmlnTmFtZSApO1xuXHRcdH1cblxuXHRcdC8vIFRyeSBwcmVmaXhlZCBuYW1lIGZvbGxvd2VkIGJ5IHRoZSB1bnByZWZpeGVkIG5hbWVcblx0XHRob29rcyA9IGpRdWVyeS5jc3NIb29rc1sgbmFtZSBdIHx8IGpRdWVyeS5jc3NIb29rc1sgb3JpZ05hbWUgXTtcblxuXHRcdC8vIElmIGEgaG9vayB3YXMgcHJvdmlkZWQgZ2V0IHRoZSBjb21wdXRlZCB2YWx1ZSBmcm9tIHRoZXJlXG5cdFx0aWYgKCBob29rcyAmJiBcImdldFwiIGluIGhvb2tzICkge1xuXHRcdFx0dmFsID0gaG9va3MuZ2V0KCBlbGVtLCB0cnVlLCBleHRyYSApO1xuXHRcdH1cblxuXHRcdC8vIE90aGVyd2lzZSwgaWYgYSB3YXkgdG8gZ2V0IHRoZSBjb21wdXRlZCB2YWx1ZSBleGlzdHMsIHVzZSB0aGF0XG5cdFx0aWYgKCB2YWwgPT09IHVuZGVmaW5lZCApIHtcblx0XHRcdHZhbCA9IGN1ckNTUyggZWxlbSwgbmFtZSwgc3R5bGVzICk7XG5cdFx0fVxuXG5cdFx0Ly8gQ29udmVydCBcIm5vcm1hbFwiIHRvIGNvbXB1dGVkIHZhbHVlXG5cdFx0aWYgKCB2YWwgPT09IFwibm9ybWFsXCIgJiYgbmFtZSBpbiBjc3NOb3JtYWxUcmFuc2Zvcm0gKSB7XG5cdFx0XHR2YWwgPSBjc3NOb3JtYWxUcmFuc2Zvcm1bIG5hbWUgXTtcblx0XHR9XG5cblx0XHQvLyBNYWtlIG51bWVyaWMgaWYgZm9yY2VkIG9yIGEgcXVhbGlmaWVyIHdhcyBwcm92aWRlZCBhbmQgdmFsIGxvb2tzIG51bWVyaWNcblx0XHRpZiAoIGV4dHJhID09PSBcIlwiIHx8IGV4dHJhICkge1xuXHRcdFx0bnVtID0gcGFyc2VGbG9hdCggdmFsICk7XG5cdFx0XHRyZXR1cm4gZXh0cmEgPT09IHRydWUgfHwgaXNGaW5pdGUoIG51bSApID8gbnVtIHx8IDAgOiB2YWw7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHZhbDtcblx0fVxufSApO1xuXG5qUXVlcnkuZWFjaCggWyBcImhlaWdodFwiLCBcIndpZHRoXCIgXSwgZnVuY3Rpb24oIGksIGRpbWVuc2lvbiApIHtcblx0alF1ZXJ5LmNzc0hvb2tzWyBkaW1lbnNpb24gXSA9IHtcblx0XHRnZXQ6IGZ1bmN0aW9uKCBlbGVtLCBjb21wdXRlZCwgZXh0cmEgKSB7XG5cdFx0XHRpZiAoIGNvbXB1dGVkICkge1xuXG5cdFx0XHRcdC8vIENlcnRhaW4gZWxlbWVudHMgY2FuIGhhdmUgZGltZW5zaW9uIGluZm8gaWYgd2UgaW52aXNpYmx5IHNob3cgdGhlbVxuXHRcdFx0XHQvLyBidXQgaXQgbXVzdCBoYXZlIGEgY3VycmVudCBkaXNwbGF5IHN0eWxlIHRoYXQgd291bGQgYmVuZWZpdFxuXHRcdFx0XHRyZXR1cm4gcmRpc3BsYXlzd2FwLnRlc3QoIGpRdWVyeS5jc3MoIGVsZW0sIFwiZGlzcGxheVwiICkgKSAmJlxuXG5cdFx0XHRcdFx0Ly8gU3VwcG9ydDogU2FmYXJpIDgrXG5cdFx0XHRcdFx0Ly8gVGFibGUgY29sdW1ucyBpbiBTYWZhcmkgaGF2ZSBub24temVybyBvZmZzZXRXaWR0aCAmIHplcm9cblx0XHRcdFx0XHQvLyBnZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aCB1bmxlc3MgZGlzcGxheSBpcyBjaGFuZ2VkLlxuXHRcdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDw9MTEgb25seVxuXHRcdFx0XHRcdC8vIFJ1bm5pbmcgZ2V0Qm91bmRpbmdDbGllbnRSZWN0IG9uIGEgZGlzY29ubmVjdGVkIG5vZGVcblx0XHRcdFx0XHQvLyBpbiBJRSB0aHJvd3MgYW4gZXJyb3IuXG5cdFx0XHRcdFx0KCAhZWxlbS5nZXRDbGllbnRSZWN0cygpLmxlbmd0aCB8fCAhZWxlbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aCApID9cblx0XHRcdFx0XHRcdHN3YXAoIGVsZW0sIGNzc1Nob3csIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gZ2V0V2lkdGhPckhlaWdodCggZWxlbSwgZGltZW5zaW9uLCBleHRyYSApO1xuXHRcdFx0XHRcdFx0fSApIDpcblx0XHRcdFx0XHRcdGdldFdpZHRoT3JIZWlnaHQoIGVsZW0sIGRpbWVuc2lvbiwgZXh0cmEgKTtcblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0c2V0OiBmdW5jdGlvbiggZWxlbSwgdmFsdWUsIGV4dHJhICkge1xuXHRcdFx0dmFyIG1hdGNoZXMsXG5cdFx0XHRcdHN0eWxlcyA9IGdldFN0eWxlcyggZWxlbSApLFxuXHRcdFx0XHRpc0JvcmRlckJveCA9IGpRdWVyeS5jc3MoIGVsZW0sIFwiYm94U2l6aW5nXCIsIGZhbHNlLCBzdHlsZXMgKSA9PT0gXCJib3JkZXItYm94XCIsXG5cdFx0XHRcdHN1YnRyYWN0ID0gZXh0cmEgJiYgYm94TW9kZWxBZGp1c3RtZW50KFxuXHRcdFx0XHRcdGVsZW0sXG5cdFx0XHRcdFx0ZGltZW5zaW9uLFxuXHRcdFx0XHRcdGV4dHJhLFxuXHRcdFx0XHRcdGlzQm9yZGVyQm94LFxuXHRcdFx0XHRcdHN0eWxlc1xuXHRcdFx0XHQpO1xuXG5cdFx0XHQvLyBBY2NvdW50IGZvciB1bnJlbGlhYmxlIGJvcmRlci1ib3ggZGltZW5zaW9ucyBieSBjb21wYXJpbmcgb2Zmc2V0KiB0byBjb21wdXRlZCBhbmRcblx0XHRcdC8vIGZha2luZyBhIGNvbnRlbnQtYm94IHRvIGdldCBib3JkZXIgYW5kIHBhZGRpbmcgKGdoLTM2OTkpXG5cdFx0XHRpZiAoIGlzQm9yZGVyQm94ICYmIHN1cHBvcnQuc2Nyb2xsYm94U2l6ZSgpID09PSBzdHlsZXMucG9zaXRpb24gKSB7XG5cdFx0XHRcdHN1YnRyYWN0IC09IE1hdGguY2VpbChcblx0XHRcdFx0XHRlbGVtWyBcIm9mZnNldFwiICsgZGltZW5zaW9uWyAwIF0udG9VcHBlckNhc2UoKSArIGRpbWVuc2lvbi5zbGljZSggMSApIF0gLVxuXHRcdFx0XHRcdHBhcnNlRmxvYXQoIHN0eWxlc1sgZGltZW5zaW9uIF0gKSAtXG5cdFx0XHRcdFx0Ym94TW9kZWxBZGp1c3RtZW50KCBlbGVtLCBkaW1lbnNpb24sIFwiYm9yZGVyXCIsIGZhbHNlLCBzdHlsZXMgKSAtXG5cdFx0XHRcdFx0MC41XG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIENvbnZlcnQgdG8gcGl4ZWxzIGlmIHZhbHVlIGFkanVzdG1lbnQgaXMgbmVlZGVkXG5cdFx0XHRpZiAoIHN1YnRyYWN0ICYmICggbWF0Y2hlcyA9IHJjc3NOdW0uZXhlYyggdmFsdWUgKSApICYmXG5cdFx0XHRcdCggbWF0Y2hlc1sgMyBdIHx8IFwicHhcIiApICE9PSBcInB4XCIgKSB7XG5cblx0XHRcdFx0ZWxlbS5zdHlsZVsgZGltZW5zaW9uIF0gPSB2YWx1ZTtcblx0XHRcdFx0dmFsdWUgPSBqUXVlcnkuY3NzKCBlbGVtLCBkaW1lbnNpb24gKTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHNldFBvc2l0aXZlTnVtYmVyKCBlbGVtLCB2YWx1ZSwgc3VidHJhY3QgKTtcblx0XHR9XG5cdH07XG59ICk7XG5cbmpRdWVyeS5jc3NIb29rcy5tYXJnaW5MZWZ0ID0gYWRkR2V0SG9va0lmKCBzdXBwb3J0LnJlbGlhYmxlTWFyZ2luTGVmdCxcblx0ZnVuY3Rpb24oIGVsZW0sIGNvbXB1dGVkICkge1xuXHRcdGlmICggY29tcHV0ZWQgKSB7XG5cdFx0XHRyZXR1cm4gKCBwYXJzZUZsb2F0KCBjdXJDU1MoIGVsZW0sIFwibWFyZ2luTGVmdFwiICkgKSB8fFxuXHRcdFx0XHRlbGVtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQgLVxuXHRcdFx0XHRcdHN3YXAoIGVsZW0sIHsgbWFyZ2luTGVmdDogMCB9LCBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdHJldHVybiBlbGVtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQ7XG5cdFx0XHRcdFx0fSApXG5cdFx0XHRcdCkgKyBcInB4XCI7XG5cdFx0fVxuXHR9XG4pO1xuXG4vLyBUaGVzZSBob29rcyBhcmUgdXNlZCBieSBhbmltYXRlIHRvIGV4cGFuZCBwcm9wZXJ0aWVzXG5qUXVlcnkuZWFjaCgge1xuXHRtYXJnaW46IFwiXCIsXG5cdHBhZGRpbmc6IFwiXCIsXG5cdGJvcmRlcjogXCJXaWR0aFwiXG59LCBmdW5jdGlvbiggcHJlZml4LCBzdWZmaXggKSB7XG5cdGpRdWVyeS5jc3NIb29rc1sgcHJlZml4ICsgc3VmZml4IF0gPSB7XG5cdFx0ZXhwYW5kOiBmdW5jdGlvbiggdmFsdWUgKSB7XG5cdFx0XHR2YXIgaSA9IDAsXG5cdFx0XHRcdGV4cGFuZGVkID0ge30sXG5cblx0XHRcdFx0Ly8gQXNzdW1lcyBhIHNpbmdsZSBudW1iZXIgaWYgbm90IGEgc3RyaW5nXG5cdFx0XHRcdHBhcnRzID0gdHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiID8gdmFsdWUuc3BsaXQoIFwiIFwiICkgOiBbIHZhbHVlIF07XG5cblx0XHRcdGZvciAoIDsgaSA8IDQ7IGkrKyApIHtcblx0XHRcdFx0ZXhwYW5kZWRbIHByZWZpeCArIGNzc0V4cGFuZFsgaSBdICsgc3VmZml4IF0gPVxuXHRcdFx0XHRcdHBhcnRzWyBpIF0gfHwgcGFydHNbIGkgLSAyIF0gfHwgcGFydHNbIDAgXTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGV4cGFuZGVkO1xuXHRcdH1cblx0fTtcblxuXHRpZiAoIHByZWZpeCAhPT0gXCJtYXJnaW5cIiApIHtcblx0XHRqUXVlcnkuY3NzSG9va3NbIHByZWZpeCArIHN1ZmZpeCBdLnNldCA9IHNldFBvc2l0aXZlTnVtYmVyO1xuXHR9XG59ICk7XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblx0Y3NzOiBmdW5jdGlvbiggbmFtZSwgdmFsdWUgKSB7XG5cdFx0cmV0dXJuIGFjY2VzcyggdGhpcywgZnVuY3Rpb24oIGVsZW0sIG5hbWUsIHZhbHVlICkge1xuXHRcdFx0dmFyIHN0eWxlcywgbGVuLFxuXHRcdFx0XHRtYXAgPSB7fSxcblx0XHRcdFx0aSA9IDA7XG5cblx0XHRcdGlmICggQXJyYXkuaXNBcnJheSggbmFtZSApICkge1xuXHRcdFx0XHRzdHlsZXMgPSBnZXRTdHlsZXMoIGVsZW0gKTtcblx0XHRcdFx0bGVuID0gbmFtZS5sZW5ndGg7XG5cblx0XHRcdFx0Zm9yICggOyBpIDwgbGVuOyBpKysgKSB7XG5cdFx0XHRcdFx0bWFwWyBuYW1lWyBpIF0gXSA9IGpRdWVyeS5jc3MoIGVsZW0sIG5hbWVbIGkgXSwgZmFsc2UsIHN0eWxlcyApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIG1hcDtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHZhbHVlICE9PSB1bmRlZmluZWQgP1xuXHRcdFx0XHRqUXVlcnkuc3R5bGUoIGVsZW0sIG5hbWUsIHZhbHVlICkgOlxuXHRcdFx0XHRqUXVlcnkuY3NzKCBlbGVtLCBuYW1lICk7XG5cdFx0fSwgbmFtZSwgdmFsdWUsIGFyZ3VtZW50cy5sZW5ndGggPiAxICk7XG5cdH1cbn0gKTtcblxuXG5mdW5jdGlvbiBUd2VlbiggZWxlbSwgb3B0aW9ucywgcHJvcCwgZW5kLCBlYXNpbmcgKSB7XG5cdHJldHVybiBuZXcgVHdlZW4ucHJvdG90eXBlLmluaXQoIGVsZW0sIG9wdGlvbnMsIHByb3AsIGVuZCwgZWFzaW5nICk7XG59XG5qUXVlcnkuVHdlZW4gPSBUd2VlbjtcblxuVHdlZW4ucHJvdG90eXBlID0ge1xuXHRjb25zdHJ1Y3RvcjogVHdlZW4sXG5cdGluaXQ6IGZ1bmN0aW9uKCBlbGVtLCBvcHRpb25zLCBwcm9wLCBlbmQsIGVhc2luZywgdW5pdCApIHtcblx0XHR0aGlzLmVsZW0gPSBlbGVtO1xuXHRcdHRoaXMucHJvcCA9IHByb3A7XG5cdFx0dGhpcy5lYXNpbmcgPSBlYXNpbmcgfHwgalF1ZXJ5LmVhc2luZy5fZGVmYXVsdDtcblx0XHR0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuXHRcdHRoaXMuc3RhcnQgPSB0aGlzLm5vdyA9IHRoaXMuY3VyKCk7XG5cdFx0dGhpcy5lbmQgPSBlbmQ7XG5cdFx0dGhpcy51bml0ID0gdW5pdCB8fCAoIGpRdWVyeS5jc3NOdW1iZXJbIHByb3AgXSA/IFwiXCIgOiBcInB4XCIgKTtcblx0fSxcblx0Y3VyOiBmdW5jdGlvbigpIHtcblx0XHR2YXIgaG9va3MgPSBUd2Vlbi5wcm9wSG9va3NbIHRoaXMucHJvcCBdO1xuXG5cdFx0cmV0dXJuIGhvb2tzICYmIGhvb2tzLmdldCA/XG5cdFx0XHRob29rcy5nZXQoIHRoaXMgKSA6XG5cdFx0XHRUd2Vlbi5wcm9wSG9va3MuX2RlZmF1bHQuZ2V0KCB0aGlzICk7XG5cdH0sXG5cdHJ1bjogZnVuY3Rpb24oIHBlcmNlbnQgKSB7XG5cdFx0dmFyIGVhc2VkLFxuXHRcdFx0aG9va3MgPSBUd2Vlbi5wcm9wSG9va3NbIHRoaXMucHJvcCBdO1xuXG5cdFx0aWYgKCB0aGlzLm9wdGlvbnMuZHVyYXRpb24gKSB7XG5cdFx0XHR0aGlzLnBvcyA9IGVhc2VkID0galF1ZXJ5LmVhc2luZ1sgdGhpcy5lYXNpbmcgXShcblx0XHRcdFx0cGVyY2VudCwgdGhpcy5vcHRpb25zLmR1cmF0aW9uICogcGVyY2VudCwgMCwgMSwgdGhpcy5vcHRpb25zLmR1cmF0aW9uXG5cdFx0XHQpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLnBvcyA9IGVhc2VkID0gcGVyY2VudDtcblx0XHR9XG5cdFx0dGhpcy5ub3cgPSAoIHRoaXMuZW5kIC0gdGhpcy5zdGFydCApICogZWFzZWQgKyB0aGlzLnN0YXJ0O1xuXG5cdFx0aWYgKCB0aGlzLm9wdGlvbnMuc3RlcCApIHtcblx0XHRcdHRoaXMub3B0aW9ucy5zdGVwLmNhbGwoIHRoaXMuZWxlbSwgdGhpcy5ub3csIHRoaXMgKTtcblx0XHR9XG5cblx0XHRpZiAoIGhvb2tzICYmIGhvb2tzLnNldCApIHtcblx0XHRcdGhvb2tzLnNldCggdGhpcyApO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRUd2Vlbi5wcm9wSG9va3MuX2RlZmF1bHQuc2V0KCB0aGlzICk7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG59O1xuXG5Ud2Vlbi5wcm90b3R5cGUuaW5pdC5wcm90b3R5cGUgPSBUd2Vlbi5wcm90b3R5cGU7XG5cblR3ZWVuLnByb3BIb29rcyA9IHtcblx0X2RlZmF1bHQ6IHtcblx0XHRnZXQ6IGZ1bmN0aW9uKCB0d2VlbiApIHtcblx0XHRcdHZhciByZXN1bHQ7XG5cblx0XHRcdC8vIFVzZSBhIHByb3BlcnR5IG9uIHRoZSBlbGVtZW50IGRpcmVjdGx5IHdoZW4gaXQgaXMgbm90IGEgRE9NIGVsZW1lbnQsXG5cdFx0XHQvLyBvciB3aGVuIHRoZXJlIGlzIG5vIG1hdGNoaW5nIHN0eWxlIHByb3BlcnR5IHRoYXQgZXhpc3RzLlxuXHRcdFx0aWYgKCB0d2Vlbi5lbGVtLm5vZGVUeXBlICE9PSAxIHx8XG5cdFx0XHRcdHR3ZWVuLmVsZW1bIHR3ZWVuLnByb3AgXSAhPSBudWxsICYmIHR3ZWVuLmVsZW0uc3R5bGVbIHR3ZWVuLnByb3AgXSA9PSBudWxsICkge1xuXHRcdFx0XHRyZXR1cm4gdHdlZW4uZWxlbVsgdHdlZW4ucHJvcCBdO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBQYXNzaW5nIGFuIGVtcHR5IHN0cmluZyBhcyBhIDNyZCBwYXJhbWV0ZXIgdG8gLmNzcyB3aWxsIGF1dG9tYXRpY2FsbHlcblx0XHRcdC8vIGF0dGVtcHQgYSBwYXJzZUZsb2F0IGFuZCBmYWxsYmFjayB0byBhIHN0cmluZyBpZiB0aGUgcGFyc2UgZmFpbHMuXG5cdFx0XHQvLyBTaW1wbGUgdmFsdWVzIHN1Y2ggYXMgXCIxMHB4XCIgYXJlIHBhcnNlZCB0byBGbG9hdDtcblx0XHRcdC8vIGNvbXBsZXggdmFsdWVzIHN1Y2ggYXMgXCJyb3RhdGUoMXJhZClcIiBhcmUgcmV0dXJuZWQgYXMtaXMuXG5cdFx0XHRyZXN1bHQgPSBqUXVlcnkuY3NzKCB0d2Vlbi5lbGVtLCB0d2Vlbi5wcm9wLCBcIlwiICk7XG5cblx0XHRcdC8vIEVtcHR5IHN0cmluZ3MsIG51bGwsIHVuZGVmaW5lZCBhbmQgXCJhdXRvXCIgYXJlIGNvbnZlcnRlZCB0byAwLlxuXHRcdFx0cmV0dXJuICFyZXN1bHQgfHwgcmVzdWx0ID09PSBcImF1dG9cIiA/IDAgOiByZXN1bHQ7XG5cdFx0fSxcblx0XHRzZXQ6IGZ1bmN0aW9uKCB0d2VlbiApIHtcblxuXHRcdFx0Ly8gVXNlIHN0ZXAgaG9vayBmb3IgYmFjayBjb21wYXQuXG5cdFx0XHQvLyBVc2UgY3NzSG9vayBpZiBpdHMgdGhlcmUuXG5cdFx0XHQvLyBVc2UgLnN0eWxlIGlmIGF2YWlsYWJsZSBhbmQgdXNlIHBsYWluIHByb3BlcnRpZXMgd2hlcmUgYXZhaWxhYmxlLlxuXHRcdFx0aWYgKCBqUXVlcnkuZnguc3RlcFsgdHdlZW4ucHJvcCBdICkge1xuXHRcdFx0XHRqUXVlcnkuZnguc3RlcFsgdHdlZW4ucHJvcCBdKCB0d2VlbiApO1xuXHRcdFx0fSBlbHNlIGlmICggdHdlZW4uZWxlbS5ub2RlVHlwZSA9PT0gMSAmJlxuXHRcdFx0XHQoIHR3ZWVuLmVsZW0uc3R5bGVbIGpRdWVyeS5jc3NQcm9wc1sgdHdlZW4ucHJvcCBdIF0gIT0gbnVsbCB8fFxuXHRcdFx0XHRcdGpRdWVyeS5jc3NIb29rc1sgdHdlZW4ucHJvcCBdICkgKSB7XG5cdFx0XHRcdGpRdWVyeS5zdHlsZSggdHdlZW4uZWxlbSwgdHdlZW4ucHJvcCwgdHdlZW4ubm93ICsgdHdlZW4udW5pdCApO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dHdlZW4uZWxlbVsgdHdlZW4ucHJvcCBdID0gdHdlZW4ubm93O1xuXHRcdFx0fVxuXHRcdH1cblx0fVxufTtcblxuLy8gU3VwcG9ydDogSUUgPD05IG9ubHlcbi8vIFBhbmljIGJhc2VkIGFwcHJvYWNoIHRvIHNldHRpbmcgdGhpbmdzIG9uIGRpc2Nvbm5lY3RlZCBub2Rlc1xuVHdlZW4ucHJvcEhvb2tzLnNjcm9sbFRvcCA9IFR3ZWVuLnByb3BIb29rcy5zY3JvbGxMZWZ0ID0ge1xuXHRzZXQ6IGZ1bmN0aW9uKCB0d2VlbiApIHtcblx0XHRpZiAoIHR3ZWVuLmVsZW0ubm9kZVR5cGUgJiYgdHdlZW4uZWxlbS5wYXJlbnROb2RlICkge1xuXHRcdFx0dHdlZW4uZWxlbVsgdHdlZW4ucHJvcCBdID0gdHdlZW4ubm93O1xuXHRcdH1cblx0fVxufTtcblxualF1ZXJ5LmVhc2luZyA9IHtcblx0bGluZWFyOiBmdW5jdGlvbiggcCApIHtcblx0XHRyZXR1cm4gcDtcblx0fSxcblx0c3dpbmc6IGZ1bmN0aW9uKCBwICkge1xuXHRcdHJldHVybiAwLjUgLSBNYXRoLmNvcyggcCAqIE1hdGguUEkgKSAvIDI7XG5cdH0sXG5cdF9kZWZhdWx0OiBcInN3aW5nXCJcbn07XG5cbmpRdWVyeS5meCA9IFR3ZWVuLnByb3RvdHlwZS5pbml0O1xuXG4vLyBCYWNrIGNvbXBhdCA8MS44IGV4dGVuc2lvbiBwb2ludFxualF1ZXJ5LmZ4LnN0ZXAgPSB7fTtcblxuXG5cblxudmFyXG5cdGZ4Tm93LCBpblByb2dyZXNzLFxuXHRyZnh0eXBlcyA9IC9eKD86dG9nZ2xlfHNob3d8aGlkZSkkLyxcblx0cnJ1biA9IC9xdWV1ZUhvb2tzJC87XG5cbmZ1bmN0aW9uIHNjaGVkdWxlKCkge1xuXHRpZiAoIGluUHJvZ3Jlc3MgKSB7XG5cdFx0aWYgKCBkb2N1bWVudC5oaWRkZW4gPT09IGZhbHNlICYmIHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUgKSB7XG5cdFx0XHR3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKCBzY2hlZHVsZSApO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR3aW5kb3cuc2V0VGltZW91dCggc2NoZWR1bGUsIGpRdWVyeS5meC5pbnRlcnZhbCApO1xuXHRcdH1cblxuXHRcdGpRdWVyeS5meC50aWNrKCk7XG5cdH1cbn1cblxuLy8gQW5pbWF0aW9ucyBjcmVhdGVkIHN5bmNocm9ub3VzbHkgd2lsbCBydW4gc3luY2hyb25vdXNseVxuZnVuY3Rpb24gY3JlYXRlRnhOb3coKSB7XG5cdHdpbmRvdy5zZXRUaW1lb3V0KCBmdW5jdGlvbigpIHtcblx0XHRmeE5vdyA9IHVuZGVmaW5lZDtcblx0fSApO1xuXHRyZXR1cm4gKCBmeE5vdyA9IERhdGUubm93KCkgKTtcbn1cblxuLy8gR2VuZXJhdGUgcGFyYW1ldGVycyB0byBjcmVhdGUgYSBzdGFuZGFyZCBhbmltYXRpb25cbmZ1bmN0aW9uIGdlbkZ4KCB0eXBlLCBpbmNsdWRlV2lkdGggKSB7XG5cdHZhciB3aGljaCxcblx0XHRpID0gMCxcblx0XHRhdHRycyA9IHsgaGVpZ2h0OiB0eXBlIH07XG5cblx0Ly8gSWYgd2UgaW5jbHVkZSB3aWR0aCwgc3RlcCB2YWx1ZSBpcyAxIHRvIGRvIGFsbCBjc3NFeHBhbmQgdmFsdWVzLFxuXHQvLyBvdGhlcndpc2Ugc3RlcCB2YWx1ZSBpcyAyIHRvIHNraXAgb3ZlciBMZWZ0IGFuZCBSaWdodFxuXHRpbmNsdWRlV2lkdGggPSBpbmNsdWRlV2lkdGggPyAxIDogMDtcblx0Zm9yICggOyBpIDwgNDsgaSArPSAyIC0gaW5jbHVkZVdpZHRoICkge1xuXHRcdHdoaWNoID0gY3NzRXhwYW5kWyBpIF07XG5cdFx0YXR0cnNbIFwibWFyZ2luXCIgKyB3aGljaCBdID0gYXR0cnNbIFwicGFkZGluZ1wiICsgd2hpY2ggXSA9IHR5cGU7XG5cdH1cblxuXHRpZiAoIGluY2x1ZGVXaWR0aCApIHtcblx0XHRhdHRycy5vcGFjaXR5ID0gYXR0cnMud2lkdGggPSB0eXBlO1xuXHR9XG5cblx0cmV0dXJuIGF0dHJzO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVUd2VlbiggdmFsdWUsIHByb3AsIGFuaW1hdGlvbiApIHtcblx0dmFyIHR3ZWVuLFxuXHRcdGNvbGxlY3Rpb24gPSAoIEFuaW1hdGlvbi50d2VlbmVyc1sgcHJvcCBdIHx8IFtdICkuY29uY2F0KCBBbmltYXRpb24udHdlZW5lcnNbIFwiKlwiIF0gKSxcblx0XHRpbmRleCA9IDAsXG5cdFx0bGVuZ3RoID0gY29sbGVjdGlvbi5sZW5ndGg7XG5cdGZvciAoIDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KysgKSB7XG5cdFx0aWYgKCAoIHR3ZWVuID0gY29sbGVjdGlvblsgaW5kZXggXS5jYWxsKCBhbmltYXRpb24sIHByb3AsIHZhbHVlICkgKSApIHtcblxuXHRcdFx0Ly8gV2UncmUgZG9uZSB3aXRoIHRoaXMgcHJvcGVydHlcblx0XHRcdHJldHVybiB0d2Vlbjtcblx0XHR9XG5cdH1cbn1cblxuZnVuY3Rpb24gZGVmYXVsdFByZWZpbHRlciggZWxlbSwgcHJvcHMsIG9wdHMgKSB7XG5cdHZhciBwcm9wLCB2YWx1ZSwgdG9nZ2xlLCBob29rcywgb2xkZmlyZSwgcHJvcFR3ZWVuLCByZXN0b3JlRGlzcGxheSwgZGlzcGxheSxcblx0XHRpc0JveCA9IFwid2lkdGhcIiBpbiBwcm9wcyB8fCBcImhlaWdodFwiIGluIHByb3BzLFxuXHRcdGFuaW0gPSB0aGlzLFxuXHRcdG9yaWcgPSB7fSxcblx0XHRzdHlsZSA9IGVsZW0uc3R5bGUsXG5cdFx0aGlkZGVuID0gZWxlbS5ub2RlVHlwZSAmJiBpc0hpZGRlbldpdGhpblRyZWUoIGVsZW0gKSxcblx0XHRkYXRhU2hvdyA9IGRhdGFQcml2LmdldCggZWxlbSwgXCJmeHNob3dcIiApO1xuXG5cdC8vIFF1ZXVlLXNraXBwaW5nIGFuaW1hdGlvbnMgaGlqYWNrIHRoZSBmeCBob29rc1xuXHRpZiAoICFvcHRzLnF1ZXVlICkge1xuXHRcdGhvb2tzID0galF1ZXJ5Ll9xdWV1ZUhvb2tzKCBlbGVtLCBcImZ4XCIgKTtcblx0XHRpZiAoIGhvb2tzLnVucXVldWVkID09IG51bGwgKSB7XG5cdFx0XHRob29rcy51bnF1ZXVlZCA9IDA7XG5cdFx0XHRvbGRmaXJlID0gaG9va3MuZW1wdHkuZmlyZTtcblx0XHRcdGhvb2tzLmVtcHR5LmZpcmUgPSBmdW5jdGlvbigpIHtcblx0XHRcdFx0aWYgKCAhaG9va3MudW5xdWV1ZWQgKSB7XG5cdFx0XHRcdFx0b2xkZmlyZSgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXHRcdH1cblx0XHRob29rcy51bnF1ZXVlZCsrO1xuXG5cdFx0YW5pbS5hbHdheXMoIGZ1bmN0aW9uKCkge1xuXG5cdFx0XHQvLyBFbnN1cmUgdGhlIGNvbXBsZXRlIGhhbmRsZXIgaXMgY2FsbGVkIGJlZm9yZSB0aGlzIGNvbXBsZXRlc1xuXHRcdFx0YW5pbS5hbHdheXMoIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRob29rcy51bnF1ZXVlZC0tO1xuXHRcdFx0XHRpZiAoICFqUXVlcnkucXVldWUoIGVsZW0sIFwiZnhcIiApLmxlbmd0aCApIHtcblx0XHRcdFx0XHRob29rcy5lbXB0eS5maXJlKCk7XG5cdFx0XHRcdH1cblx0XHRcdH0gKTtcblx0XHR9ICk7XG5cdH1cblxuXHQvLyBEZXRlY3Qgc2hvdy9oaWRlIGFuaW1hdGlvbnNcblx0Zm9yICggcHJvcCBpbiBwcm9wcyApIHtcblx0XHR2YWx1ZSA9IHByb3BzWyBwcm9wIF07XG5cdFx0aWYgKCByZnh0eXBlcy50ZXN0KCB2YWx1ZSApICkge1xuXHRcdFx0ZGVsZXRlIHByb3BzWyBwcm9wIF07XG5cdFx0XHR0b2dnbGUgPSB0b2dnbGUgfHwgdmFsdWUgPT09IFwidG9nZ2xlXCI7XG5cdFx0XHRpZiAoIHZhbHVlID09PSAoIGhpZGRlbiA/IFwiaGlkZVwiIDogXCJzaG93XCIgKSApIHtcblxuXHRcdFx0XHQvLyBQcmV0ZW5kIHRvIGJlIGhpZGRlbiBpZiB0aGlzIGlzIGEgXCJzaG93XCIgYW5kXG5cdFx0XHRcdC8vIHRoZXJlIGlzIHN0aWxsIGRhdGEgZnJvbSBhIHN0b3BwZWQgc2hvdy9oaWRlXG5cdFx0XHRcdGlmICggdmFsdWUgPT09IFwic2hvd1wiICYmIGRhdGFTaG93ICYmIGRhdGFTaG93WyBwcm9wIF0gIT09IHVuZGVmaW5lZCApIHtcblx0XHRcdFx0XHRoaWRkZW4gPSB0cnVlO1xuXG5cdFx0XHRcdC8vIElnbm9yZSBhbGwgb3RoZXIgbm8tb3Agc2hvdy9oaWRlIGRhdGFcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0b3JpZ1sgcHJvcCBdID0gZGF0YVNob3cgJiYgZGF0YVNob3dbIHByb3AgXSB8fCBqUXVlcnkuc3R5bGUoIGVsZW0sIHByb3AgKTtcblx0XHR9XG5cdH1cblxuXHQvLyBCYWlsIG91dCBpZiB0aGlzIGlzIGEgbm8tb3AgbGlrZSAuaGlkZSgpLmhpZGUoKVxuXHRwcm9wVHdlZW4gPSAhalF1ZXJ5LmlzRW1wdHlPYmplY3QoIHByb3BzICk7XG5cdGlmICggIXByb3BUd2VlbiAmJiBqUXVlcnkuaXNFbXB0eU9iamVjdCggb3JpZyApICkge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdC8vIFJlc3RyaWN0IFwib3ZlcmZsb3dcIiBhbmQgXCJkaXNwbGF5XCIgc3R5bGVzIGR1cmluZyBib3ggYW5pbWF0aW9uc1xuXHRpZiAoIGlzQm94ICYmIGVsZW0ubm9kZVR5cGUgPT09IDEgKSB7XG5cblx0XHQvLyBTdXBwb3J0OiBJRSA8PTkgLSAxMSwgRWRnZSAxMiAtIDE1XG5cdFx0Ly8gUmVjb3JkIGFsbCAzIG92ZXJmbG93IGF0dHJpYnV0ZXMgYmVjYXVzZSBJRSBkb2VzIG5vdCBpbmZlciB0aGUgc2hvcnRoYW5kXG5cdFx0Ly8gZnJvbSBpZGVudGljYWxseS12YWx1ZWQgb3ZlcmZsb3dYIGFuZCBvdmVyZmxvd1kgYW5kIEVkZ2UganVzdCBtaXJyb3JzXG5cdFx0Ly8gdGhlIG92ZXJmbG93WCB2YWx1ZSB0aGVyZS5cblx0XHRvcHRzLm92ZXJmbG93ID0gWyBzdHlsZS5vdmVyZmxvdywgc3R5bGUub3ZlcmZsb3dYLCBzdHlsZS5vdmVyZmxvd1kgXTtcblxuXHRcdC8vIElkZW50aWZ5IGEgZGlzcGxheSB0eXBlLCBwcmVmZXJyaW5nIG9sZCBzaG93L2hpZGUgZGF0YSBvdmVyIHRoZSBDU1MgY2FzY2FkZVxuXHRcdHJlc3RvcmVEaXNwbGF5ID0gZGF0YVNob3cgJiYgZGF0YVNob3cuZGlzcGxheTtcblx0XHRpZiAoIHJlc3RvcmVEaXNwbGF5ID09IG51bGwgKSB7XG5cdFx0XHRyZXN0b3JlRGlzcGxheSA9IGRhdGFQcml2LmdldCggZWxlbSwgXCJkaXNwbGF5XCIgKTtcblx0XHR9XG5cdFx0ZGlzcGxheSA9IGpRdWVyeS5jc3MoIGVsZW0sIFwiZGlzcGxheVwiICk7XG5cdFx0aWYgKCBkaXNwbGF5ID09PSBcIm5vbmVcIiApIHtcblx0XHRcdGlmICggcmVzdG9yZURpc3BsYXkgKSB7XG5cdFx0XHRcdGRpc3BsYXkgPSByZXN0b3JlRGlzcGxheTtcblx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0Ly8gR2V0IG5vbmVtcHR5IHZhbHVlKHMpIGJ5IHRlbXBvcmFyaWx5IGZvcmNpbmcgdmlzaWJpbGl0eVxuXHRcdFx0XHRzaG93SGlkZSggWyBlbGVtIF0sIHRydWUgKTtcblx0XHRcdFx0cmVzdG9yZURpc3BsYXkgPSBlbGVtLnN0eWxlLmRpc3BsYXkgfHwgcmVzdG9yZURpc3BsYXk7XG5cdFx0XHRcdGRpc3BsYXkgPSBqUXVlcnkuY3NzKCBlbGVtLCBcImRpc3BsYXlcIiApO1xuXHRcdFx0XHRzaG93SGlkZSggWyBlbGVtIF0gKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBBbmltYXRlIGlubGluZSBlbGVtZW50cyBhcyBpbmxpbmUtYmxvY2tcblx0XHRpZiAoIGRpc3BsYXkgPT09IFwiaW5saW5lXCIgfHwgZGlzcGxheSA9PT0gXCJpbmxpbmUtYmxvY2tcIiAmJiByZXN0b3JlRGlzcGxheSAhPSBudWxsICkge1xuXHRcdFx0aWYgKCBqUXVlcnkuY3NzKCBlbGVtLCBcImZsb2F0XCIgKSA9PT0gXCJub25lXCIgKSB7XG5cblx0XHRcdFx0Ly8gUmVzdG9yZSB0aGUgb3JpZ2luYWwgZGlzcGxheSB2YWx1ZSBhdCB0aGUgZW5kIG9mIHB1cmUgc2hvdy9oaWRlIGFuaW1hdGlvbnNcblx0XHRcdFx0aWYgKCAhcHJvcFR3ZWVuICkge1xuXHRcdFx0XHRcdGFuaW0uZG9uZSggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRzdHlsZS5kaXNwbGF5ID0gcmVzdG9yZURpc3BsYXk7XG5cdFx0XHRcdFx0fSApO1xuXHRcdFx0XHRcdGlmICggcmVzdG9yZURpc3BsYXkgPT0gbnVsbCApIHtcblx0XHRcdFx0XHRcdGRpc3BsYXkgPSBzdHlsZS5kaXNwbGF5O1xuXHRcdFx0XHRcdFx0cmVzdG9yZURpc3BsYXkgPSBkaXNwbGF5ID09PSBcIm5vbmVcIiA/IFwiXCIgOiBkaXNwbGF5O1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRzdHlsZS5kaXNwbGF5ID0gXCJpbmxpbmUtYmxvY2tcIjtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRpZiAoIG9wdHMub3ZlcmZsb3cgKSB7XG5cdFx0c3R5bGUub3ZlcmZsb3cgPSBcImhpZGRlblwiO1xuXHRcdGFuaW0uYWx3YXlzKCBmdW5jdGlvbigpIHtcblx0XHRcdHN0eWxlLm92ZXJmbG93ID0gb3B0cy5vdmVyZmxvd1sgMCBdO1xuXHRcdFx0c3R5bGUub3ZlcmZsb3dYID0gb3B0cy5vdmVyZmxvd1sgMSBdO1xuXHRcdFx0c3R5bGUub3ZlcmZsb3dZID0gb3B0cy5vdmVyZmxvd1sgMiBdO1xuXHRcdH0gKTtcblx0fVxuXG5cdC8vIEltcGxlbWVudCBzaG93L2hpZGUgYW5pbWF0aW9uc1xuXHRwcm9wVHdlZW4gPSBmYWxzZTtcblx0Zm9yICggcHJvcCBpbiBvcmlnICkge1xuXG5cdFx0Ly8gR2VuZXJhbCBzaG93L2hpZGUgc2V0dXAgZm9yIHRoaXMgZWxlbWVudCBhbmltYXRpb25cblx0XHRpZiAoICFwcm9wVHdlZW4gKSB7XG5cdFx0XHRpZiAoIGRhdGFTaG93ICkge1xuXHRcdFx0XHRpZiAoIFwiaGlkZGVuXCIgaW4gZGF0YVNob3cgKSB7XG5cdFx0XHRcdFx0aGlkZGVuID0gZGF0YVNob3cuaGlkZGVuO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRkYXRhU2hvdyA9IGRhdGFQcml2LmFjY2VzcyggZWxlbSwgXCJmeHNob3dcIiwgeyBkaXNwbGF5OiByZXN0b3JlRGlzcGxheSB9ICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFN0b3JlIGhpZGRlbi92aXNpYmxlIGZvciB0b2dnbGUgc28gYC5zdG9wKCkudG9nZ2xlKClgIFwicmV2ZXJzZXNcIlxuXHRcdFx0aWYgKCB0b2dnbGUgKSB7XG5cdFx0XHRcdGRhdGFTaG93LmhpZGRlbiA9ICFoaWRkZW47XG5cdFx0XHR9XG5cblx0XHRcdC8vIFNob3cgZWxlbWVudHMgYmVmb3JlIGFuaW1hdGluZyB0aGVtXG5cdFx0XHRpZiAoIGhpZGRlbiApIHtcblx0XHRcdFx0c2hvd0hpZGUoIFsgZWxlbSBdLCB0cnVlICk7XG5cdFx0XHR9XG5cblx0XHRcdC8qIGVzbGludC1kaXNhYmxlIG5vLWxvb3AtZnVuYyAqL1xuXG5cdFx0XHRhbmltLmRvbmUoIGZ1bmN0aW9uKCkge1xuXG5cdFx0XHQvKiBlc2xpbnQtZW5hYmxlIG5vLWxvb3AtZnVuYyAqL1xuXG5cdFx0XHRcdC8vIFRoZSBmaW5hbCBzdGVwIG9mIGEgXCJoaWRlXCIgYW5pbWF0aW9uIGlzIGFjdHVhbGx5IGhpZGluZyB0aGUgZWxlbWVudFxuXHRcdFx0XHRpZiAoICFoaWRkZW4gKSB7XG5cdFx0XHRcdFx0c2hvd0hpZGUoIFsgZWxlbSBdICk7XG5cdFx0XHRcdH1cblx0XHRcdFx0ZGF0YVByaXYucmVtb3ZlKCBlbGVtLCBcImZ4c2hvd1wiICk7XG5cdFx0XHRcdGZvciAoIHByb3AgaW4gb3JpZyApIHtcblx0XHRcdFx0XHRqUXVlcnkuc3R5bGUoIGVsZW0sIHByb3AsIG9yaWdbIHByb3AgXSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9ICk7XG5cdFx0fVxuXG5cdFx0Ly8gUGVyLXByb3BlcnR5IHNldHVwXG5cdFx0cHJvcFR3ZWVuID0gY3JlYXRlVHdlZW4oIGhpZGRlbiA/IGRhdGFTaG93WyBwcm9wIF0gOiAwLCBwcm9wLCBhbmltICk7XG5cdFx0aWYgKCAhKCBwcm9wIGluIGRhdGFTaG93ICkgKSB7XG5cdFx0XHRkYXRhU2hvd1sgcHJvcCBdID0gcHJvcFR3ZWVuLnN0YXJ0O1xuXHRcdFx0aWYgKCBoaWRkZW4gKSB7XG5cdFx0XHRcdHByb3BUd2Vlbi5lbmQgPSBwcm9wVHdlZW4uc3RhcnQ7XG5cdFx0XHRcdHByb3BUd2Vlbi5zdGFydCA9IDA7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59XG5cbmZ1bmN0aW9uIHByb3BGaWx0ZXIoIHByb3BzLCBzcGVjaWFsRWFzaW5nICkge1xuXHR2YXIgaW5kZXgsIG5hbWUsIGVhc2luZywgdmFsdWUsIGhvb2tzO1xuXG5cdC8vIGNhbWVsQ2FzZSwgc3BlY2lhbEVhc2luZyBhbmQgZXhwYW5kIGNzc0hvb2sgcGFzc1xuXHRmb3IgKCBpbmRleCBpbiBwcm9wcyApIHtcblx0XHRuYW1lID0gY2FtZWxDYXNlKCBpbmRleCApO1xuXHRcdGVhc2luZyA9IHNwZWNpYWxFYXNpbmdbIG5hbWUgXTtcblx0XHR2YWx1ZSA9IHByb3BzWyBpbmRleCBdO1xuXHRcdGlmICggQXJyYXkuaXNBcnJheSggdmFsdWUgKSApIHtcblx0XHRcdGVhc2luZyA9IHZhbHVlWyAxIF07XG5cdFx0XHR2YWx1ZSA9IHByb3BzWyBpbmRleCBdID0gdmFsdWVbIDAgXTtcblx0XHR9XG5cblx0XHRpZiAoIGluZGV4ICE9PSBuYW1lICkge1xuXHRcdFx0cHJvcHNbIG5hbWUgXSA9IHZhbHVlO1xuXHRcdFx0ZGVsZXRlIHByb3BzWyBpbmRleCBdO1xuXHRcdH1cblxuXHRcdGhvb2tzID0galF1ZXJ5LmNzc0hvb2tzWyBuYW1lIF07XG5cdFx0aWYgKCBob29rcyAmJiBcImV4cGFuZFwiIGluIGhvb2tzICkge1xuXHRcdFx0dmFsdWUgPSBob29rcy5leHBhbmQoIHZhbHVlICk7XG5cdFx0XHRkZWxldGUgcHJvcHNbIG5hbWUgXTtcblxuXHRcdFx0Ly8gTm90IHF1aXRlICQuZXh0ZW5kLCB0aGlzIHdvbid0IG92ZXJ3cml0ZSBleGlzdGluZyBrZXlzLlxuXHRcdFx0Ly8gUmV1c2luZyAnaW5kZXgnIGJlY2F1c2Ugd2UgaGF2ZSB0aGUgY29ycmVjdCBcIm5hbWVcIlxuXHRcdFx0Zm9yICggaW5kZXggaW4gdmFsdWUgKSB7XG5cdFx0XHRcdGlmICggISggaW5kZXggaW4gcHJvcHMgKSApIHtcblx0XHRcdFx0XHRwcm9wc1sgaW5kZXggXSA9IHZhbHVlWyBpbmRleCBdO1xuXHRcdFx0XHRcdHNwZWNpYWxFYXNpbmdbIGluZGV4IF0gPSBlYXNpbmc7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0c3BlY2lhbEVhc2luZ1sgbmFtZSBdID0gZWFzaW5nO1xuXHRcdH1cblx0fVxufVxuXG5mdW5jdGlvbiBBbmltYXRpb24oIGVsZW0sIHByb3BlcnRpZXMsIG9wdGlvbnMgKSB7XG5cdHZhciByZXN1bHQsXG5cdFx0c3RvcHBlZCxcblx0XHRpbmRleCA9IDAsXG5cdFx0bGVuZ3RoID0gQW5pbWF0aW9uLnByZWZpbHRlcnMubGVuZ3RoLFxuXHRcdGRlZmVycmVkID0galF1ZXJ5LkRlZmVycmVkKCkuYWx3YXlzKCBmdW5jdGlvbigpIHtcblxuXHRcdFx0Ly8gRG9uJ3QgbWF0Y2ggZWxlbSBpbiB0aGUgOmFuaW1hdGVkIHNlbGVjdG9yXG5cdFx0XHRkZWxldGUgdGljay5lbGVtO1xuXHRcdH0gKSxcblx0XHR0aWNrID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRpZiAoIHN0b3BwZWQgKSB7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblx0XHRcdHZhciBjdXJyZW50VGltZSA9IGZ4Tm93IHx8IGNyZWF0ZUZ4Tm93KCksXG5cdFx0XHRcdHJlbWFpbmluZyA9IE1hdGgubWF4KCAwLCBhbmltYXRpb24uc3RhcnRUaW1lICsgYW5pbWF0aW9uLmR1cmF0aW9uIC0gY3VycmVudFRpbWUgKSxcblxuXHRcdFx0XHQvLyBTdXBwb3J0OiBBbmRyb2lkIDIuMyBvbmx5XG5cdFx0XHRcdC8vIEFyY2hhaWMgY3Jhc2ggYnVnIHdvbid0IGFsbG93IHVzIHRvIHVzZSBgMSAtICggMC41IHx8IDAgKWAgKCMxMjQ5Nylcblx0XHRcdFx0dGVtcCA9IHJlbWFpbmluZyAvIGFuaW1hdGlvbi5kdXJhdGlvbiB8fCAwLFxuXHRcdFx0XHRwZXJjZW50ID0gMSAtIHRlbXAsXG5cdFx0XHRcdGluZGV4ID0gMCxcblx0XHRcdFx0bGVuZ3RoID0gYW5pbWF0aW9uLnR3ZWVucy5sZW5ndGg7XG5cblx0XHRcdGZvciAoIDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KysgKSB7XG5cdFx0XHRcdGFuaW1hdGlvbi50d2VlbnNbIGluZGV4IF0ucnVuKCBwZXJjZW50ICk7XG5cdFx0XHR9XG5cblx0XHRcdGRlZmVycmVkLm5vdGlmeVdpdGgoIGVsZW0sIFsgYW5pbWF0aW9uLCBwZXJjZW50LCByZW1haW5pbmcgXSApO1xuXG5cdFx0XHQvLyBJZiB0aGVyZSdzIG1vcmUgdG8gZG8sIHlpZWxkXG5cdFx0XHRpZiAoIHBlcmNlbnQgPCAxICYmIGxlbmd0aCApIHtcblx0XHRcdFx0cmV0dXJuIHJlbWFpbmluZztcblx0XHRcdH1cblxuXHRcdFx0Ly8gSWYgdGhpcyB3YXMgYW4gZW1wdHkgYW5pbWF0aW9uLCBzeW50aGVzaXplIGEgZmluYWwgcHJvZ3Jlc3Mgbm90aWZpY2F0aW9uXG5cdFx0XHRpZiAoICFsZW5ndGggKSB7XG5cdFx0XHRcdGRlZmVycmVkLm5vdGlmeVdpdGgoIGVsZW0sIFsgYW5pbWF0aW9uLCAxLCAwIF0gKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gUmVzb2x2ZSB0aGUgYW5pbWF0aW9uIGFuZCByZXBvcnQgaXRzIGNvbmNsdXNpb25cblx0XHRcdGRlZmVycmVkLnJlc29sdmVXaXRoKCBlbGVtLCBbIGFuaW1hdGlvbiBdICk7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fSxcblx0XHRhbmltYXRpb24gPSBkZWZlcnJlZC5wcm9taXNlKCB7XG5cdFx0XHRlbGVtOiBlbGVtLFxuXHRcdFx0cHJvcHM6IGpRdWVyeS5leHRlbmQoIHt9LCBwcm9wZXJ0aWVzICksXG5cdFx0XHRvcHRzOiBqUXVlcnkuZXh0ZW5kKCB0cnVlLCB7XG5cdFx0XHRcdHNwZWNpYWxFYXNpbmc6IHt9LFxuXHRcdFx0XHRlYXNpbmc6IGpRdWVyeS5lYXNpbmcuX2RlZmF1bHRcblx0XHRcdH0sIG9wdGlvbnMgKSxcblx0XHRcdG9yaWdpbmFsUHJvcGVydGllczogcHJvcGVydGllcyxcblx0XHRcdG9yaWdpbmFsT3B0aW9uczogb3B0aW9ucyxcblx0XHRcdHN0YXJ0VGltZTogZnhOb3cgfHwgY3JlYXRlRnhOb3coKSxcblx0XHRcdGR1cmF0aW9uOiBvcHRpb25zLmR1cmF0aW9uLFxuXHRcdFx0dHdlZW5zOiBbXSxcblx0XHRcdGNyZWF0ZVR3ZWVuOiBmdW5jdGlvbiggcHJvcCwgZW5kICkge1xuXHRcdFx0XHR2YXIgdHdlZW4gPSBqUXVlcnkuVHdlZW4oIGVsZW0sIGFuaW1hdGlvbi5vcHRzLCBwcm9wLCBlbmQsXG5cdFx0XHRcdFx0XHRhbmltYXRpb24ub3B0cy5zcGVjaWFsRWFzaW5nWyBwcm9wIF0gfHwgYW5pbWF0aW9uLm9wdHMuZWFzaW5nICk7XG5cdFx0XHRcdGFuaW1hdGlvbi50d2VlbnMucHVzaCggdHdlZW4gKTtcblx0XHRcdFx0cmV0dXJuIHR3ZWVuO1xuXHRcdFx0fSxcblx0XHRcdHN0b3A6IGZ1bmN0aW9uKCBnb3RvRW5kICkge1xuXHRcdFx0XHR2YXIgaW5kZXggPSAwLFxuXG5cdFx0XHRcdFx0Ly8gSWYgd2UgYXJlIGdvaW5nIHRvIHRoZSBlbmQsIHdlIHdhbnQgdG8gcnVuIGFsbCB0aGUgdHdlZW5zXG5cdFx0XHRcdFx0Ly8gb3RoZXJ3aXNlIHdlIHNraXAgdGhpcyBwYXJ0XG5cdFx0XHRcdFx0bGVuZ3RoID0gZ290b0VuZCA/IGFuaW1hdGlvbi50d2VlbnMubGVuZ3RoIDogMDtcblx0XHRcdFx0aWYgKCBzdG9wcGVkICkge1xuXHRcdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHN0b3BwZWQgPSB0cnVlO1xuXHRcdFx0XHRmb3IgKCA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrICkge1xuXHRcdFx0XHRcdGFuaW1hdGlvbi50d2VlbnNbIGluZGV4IF0ucnVuKCAxICk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBSZXNvbHZlIHdoZW4gd2UgcGxheWVkIHRoZSBsYXN0IGZyYW1lOyBvdGhlcndpc2UsIHJlamVjdFxuXHRcdFx0XHRpZiAoIGdvdG9FbmQgKSB7XG5cdFx0XHRcdFx0ZGVmZXJyZWQubm90aWZ5V2l0aCggZWxlbSwgWyBhbmltYXRpb24sIDEsIDAgXSApO1xuXHRcdFx0XHRcdGRlZmVycmVkLnJlc29sdmVXaXRoKCBlbGVtLCBbIGFuaW1hdGlvbiwgZ290b0VuZCBdICk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0ZGVmZXJyZWQucmVqZWN0V2l0aCggZWxlbSwgWyBhbmltYXRpb24sIGdvdG9FbmQgXSApO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0fVxuXHRcdH0gKSxcblx0XHRwcm9wcyA9IGFuaW1hdGlvbi5wcm9wcztcblxuXHRwcm9wRmlsdGVyKCBwcm9wcywgYW5pbWF0aW9uLm9wdHMuc3BlY2lhbEVhc2luZyApO1xuXG5cdGZvciAoIDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KysgKSB7XG5cdFx0cmVzdWx0ID0gQW5pbWF0aW9uLnByZWZpbHRlcnNbIGluZGV4IF0uY2FsbCggYW5pbWF0aW9uLCBlbGVtLCBwcm9wcywgYW5pbWF0aW9uLm9wdHMgKTtcblx0XHRpZiAoIHJlc3VsdCApIHtcblx0XHRcdGlmICggaXNGdW5jdGlvbiggcmVzdWx0LnN0b3AgKSApIHtcblx0XHRcdFx0alF1ZXJ5Ll9xdWV1ZUhvb2tzKCBhbmltYXRpb24uZWxlbSwgYW5pbWF0aW9uLm9wdHMucXVldWUgKS5zdG9wID1cblx0XHRcdFx0XHRyZXN1bHQuc3RvcC5iaW5kKCByZXN1bHQgKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiByZXN1bHQ7XG5cdFx0fVxuXHR9XG5cblx0alF1ZXJ5Lm1hcCggcHJvcHMsIGNyZWF0ZVR3ZWVuLCBhbmltYXRpb24gKTtcblxuXHRpZiAoIGlzRnVuY3Rpb24oIGFuaW1hdGlvbi5vcHRzLnN0YXJ0ICkgKSB7XG5cdFx0YW5pbWF0aW9uLm9wdHMuc3RhcnQuY2FsbCggZWxlbSwgYW5pbWF0aW9uICk7XG5cdH1cblxuXHQvLyBBdHRhY2ggY2FsbGJhY2tzIGZyb20gb3B0aW9uc1xuXHRhbmltYXRpb25cblx0XHQucHJvZ3Jlc3MoIGFuaW1hdGlvbi5vcHRzLnByb2dyZXNzIClcblx0XHQuZG9uZSggYW5pbWF0aW9uLm9wdHMuZG9uZSwgYW5pbWF0aW9uLm9wdHMuY29tcGxldGUgKVxuXHRcdC5mYWlsKCBhbmltYXRpb24ub3B0cy5mYWlsIClcblx0XHQuYWx3YXlzKCBhbmltYXRpb24ub3B0cy5hbHdheXMgKTtcblxuXHRqUXVlcnkuZngudGltZXIoXG5cdFx0alF1ZXJ5LmV4dGVuZCggdGljaywge1xuXHRcdFx0ZWxlbTogZWxlbSxcblx0XHRcdGFuaW06IGFuaW1hdGlvbixcblx0XHRcdHF1ZXVlOiBhbmltYXRpb24ub3B0cy5xdWV1ZVxuXHRcdH0gKVxuXHQpO1xuXG5cdHJldHVybiBhbmltYXRpb247XG59XG5cbmpRdWVyeS5BbmltYXRpb24gPSBqUXVlcnkuZXh0ZW5kKCBBbmltYXRpb24sIHtcblxuXHR0d2VlbmVyczoge1xuXHRcdFwiKlwiOiBbIGZ1bmN0aW9uKCBwcm9wLCB2YWx1ZSApIHtcblx0XHRcdHZhciB0d2VlbiA9IHRoaXMuY3JlYXRlVHdlZW4oIHByb3AsIHZhbHVlICk7XG5cdFx0XHRhZGp1c3RDU1MoIHR3ZWVuLmVsZW0sIHByb3AsIHJjc3NOdW0uZXhlYyggdmFsdWUgKSwgdHdlZW4gKTtcblx0XHRcdHJldHVybiB0d2Vlbjtcblx0XHR9IF1cblx0fSxcblxuXHR0d2VlbmVyOiBmdW5jdGlvbiggcHJvcHMsIGNhbGxiYWNrICkge1xuXHRcdGlmICggaXNGdW5jdGlvbiggcHJvcHMgKSApIHtcblx0XHRcdGNhbGxiYWNrID0gcHJvcHM7XG5cdFx0XHRwcm9wcyA9IFsgXCIqXCIgXTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cHJvcHMgPSBwcm9wcy5tYXRjaCggcm5vdGh0bWx3aGl0ZSApO1xuXHRcdH1cblxuXHRcdHZhciBwcm9wLFxuXHRcdFx0aW5kZXggPSAwLFxuXHRcdFx0bGVuZ3RoID0gcHJvcHMubGVuZ3RoO1xuXG5cdFx0Zm9yICggOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKyApIHtcblx0XHRcdHByb3AgPSBwcm9wc1sgaW5kZXggXTtcblx0XHRcdEFuaW1hdGlvbi50d2VlbmVyc1sgcHJvcCBdID0gQW5pbWF0aW9uLnR3ZWVuZXJzWyBwcm9wIF0gfHwgW107XG5cdFx0XHRBbmltYXRpb24udHdlZW5lcnNbIHByb3AgXS51bnNoaWZ0KCBjYWxsYmFjayApO1xuXHRcdH1cblx0fSxcblxuXHRwcmVmaWx0ZXJzOiBbIGRlZmF1bHRQcmVmaWx0ZXIgXSxcblxuXHRwcmVmaWx0ZXI6IGZ1bmN0aW9uKCBjYWxsYmFjaywgcHJlcGVuZCApIHtcblx0XHRpZiAoIHByZXBlbmQgKSB7XG5cdFx0XHRBbmltYXRpb24ucHJlZmlsdGVycy51bnNoaWZ0KCBjYWxsYmFjayApO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRBbmltYXRpb24ucHJlZmlsdGVycy5wdXNoKCBjYWxsYmFjayApO1xuXHRcdH1cblx0fVxufSApO1xuXG5qUXVlcnkuc3BlZWQgPSBmdW5jdGlvbiggc3BlZWQsIGVhc2luZywgZm4gKSB7XG5cdHZhciBvcHQgPSBzcGVlZCAmJiB0eXBlb2Ygc3BlZWQgPT09IFwib2JqZWN0XCIgPyBqUXVlcnkuZXh0ZW5kKCB7fSwgc3BlZWQgKSA6IHtcblx0XHRjb21wbGV0ZTogZm4gfHwgIWZuICYmIGVhc2luZyB8fFxuXHRcdFx0aXNGdW5jdGlvbiggc3BlZWQgKSAmJiBzcGVlZCxcblx0XHRkdXJhdGlvbjogc3BlZWQsXG5cdFx0ZWFzaW5nOiBmbiAmJiBlYXNpbmcgfHwgZWFzaW5nICYmICFpc0Z1bmN0aW9uKCBlYXNpbmcgKSAmJiBlYXNpbmdcblx0fTtcblxuXHQvLyBHbyB0byB0aGUgZW5kIHN0YXRlIGlmIGZ4IGFyZSBvZmZcblx0aWYgKCBqUXVlcnkuZngub2ZmICkge1xuXHRcdG9wdC5kdXJhdGlvbiA9IDA7XG5cblx0fSBlbHNlIHtcblx0XHRpZiAoIHR5cGVvZiBvcHQuZHVyYXRpb24gIT09IFwibnVtYmVyXCIgKSB7XG5cdFx0XHRpZiAoIG9wdC5kdXJhdGlvbiBpbiBqUXVlcnkuZnguc3BlZWRzICkge1xuXHRcdFx0XHRvcHQuZHVyYXRpb24gPSBqUXVlcnkuZnguc3BlZWRzWyBvcHQuZHVyYXRpb24gXTtcblxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0b3B0LmR1cmF0aW9uID0galF1ZXJ5LmZ4LnNwZWVkcy5fZGVmYXVsdDtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvLyBOb3JtYWxpemUgb3B0LnF1ZXVlIC0gdHJ1ZS91bmRlZmluZWQvbnVsbCAtPiBcImZ4XCJcblx0aWYgKCBvcHQucXVldWUgPT0gbnVsbCB8fCBvcHQucXVldWUgPT09IHRydWUgKSB7XG5cdFx0b3B0LnF1ZXVlID0gXCJmeFwiO1xuXHR9XG5cblx0Ly8gUXVldWVpbmdcblx0b3B0Lm9sZCA9IG9wdC5jb21wbGV0ZTtcblxuXHRvcHQuY29tcGxldGUgPSBmdW5jdGlvbigpIHtcblx0XHRpZiAoIGlzRnVuY3Rpb24oIG9wdC5vbGQgKSApIHtcblx0XHRcdG9wdC5vbGQuY2FsbCggdGhpcyApO1xuXHRcdH1cblxuXHRcdGlmICggb3B0LnF1ZXVlICkge1xuXHRcdFx0alF1ZXJ5LmRlcXVldWUoIHRoaXMsIG9wdC5xdWV1ZSApO1xuXHRcdH1cblx0fTtcblxuXHRyZXR1cm4gb3B0O1xufTtcblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXHRmYWRlVG86IGZ1bmN0aW9uKCBzcGVlZCwgdG8sIGVhc2luZywgY2FsbGJhY2sgKSB7XG5cblx0XHQvLyBTaG93IGFueSBoaWRkZW4gZWxlbWVudHMgYWZ0ZXIgc2V0dGluZyBvcGFjaXR5IHRvIDBcblx0XHRyZXR1cm4gdGhpcy5maWx0ZXIoIGlzSGlkZGVuV2l0aGluVHJlZSApLmNzcyggXCJvcGFjaXR5XCIsIDAgKS5zaG93KClcblxuXHRcdFx0Ly8gQW5pbWF0ZSB0byB0aGUgdmFsdWUgc3BlY2lmaWVkXG5cdFx0XHQuZW5kKCkuYW5pbWF0ZSggeyBvcGFjaXR5OiB0byB9LCBzcGVlZCwgZWFzaW5nLCBjYWxsYmFjayApO1xuXHR9LFxuXHRhbmltYXRlOiBmdW5jdGlvbiggcHJvcCwgc3BlZWQsIGVhc2luZywgY2FsbGJhY2sgKSB7XG5cdFx0dmFyIGVtcHR5ID0galF1ZXJ5LmlzRW1wdHlPYmplY3QoIHByb3AgKSxcblx0XHRcdG9wdGFsbCA9IGpRdWVyeS5zcGVlZCggc3BlZWQsIGVhc2luZywgY2FsbGJhY2sgKSxcblx0XHRcdGRvQW5pbWF0aW9uID0gZnVuY3Rpb24oKSB7XG5cblx0XHRcdFx0Ly8gT3BlcmF0ZSBvbiBhIGNvcHkgb2YgcHJvcCBzbyBwZXItcHJvcGVydHkgZWFzaW5nIHdvbid0IGJlIGxvc3Rcblx0XHRcdFx0dmFyIGFuaW0gPSBBbmltYXRpb24oIHRoaXMsIGpRdWVyeS5leHRlbmQoIHt9LCBwcm9wICksIG9wdGFsbCApO1xuXG5cdFx0XHRcdC8vIEVtcHR5IGFuaW1hdGlvbnMsIG9yIGZpbmlzaGluZyByZXNvbHZlcyBpbW1lZGlhdGVseVxuXHRcdFx0XHRpZiAoIGVtcHR5IHx8IGRhdGFQcml2LmdldCggdGhpcywgXCJmaW5pc2hcIiApICkge1xuXHRcdFx0XHRcdGFuaW0uc3RvcCggdHJ1ZSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXHRcdFx0ZG9BbmltYXRpb24uZmluaXNoID0gZG9BbmltYXRpb247XG5cblx0XHRyZXR1cm4gZW1wdHkgfHwgb3B0YWxsLnF1ZXVlID09PSBmYWxzZSA/XG5cdFx0XHR0aGlzLmVhY2goIGRvQW5pbWF0aW9uICkgOlxuXHRcdFx0dGhpcy5xdWV1ZSggb3B0YWxsLnF1ZXVlLCBkb0FuaW1hdGlvbiApO1xuXHR9LFxuXHRzdG9wOiBmdW5jdGlvbiggdHlwZSwgY2xlYXJRdWV1ZSwgZ290b0VuZCApIHtcblx0XHR2YXIgc3RvcFF1ZXVlID0gZnVuY3Rpb24oIGhvb2tzICkge1xuXHRcdFx0dmFyIHN0b3AgPSBob29rcy5zdG9wO1xuXHRcdFx0ZGVsZXRlIGhvb2tzLnN0b3A7XG5cdFx0XHRzdG9wKCBnb3RvRW5kICk7XG5cdFx0fTtcblxuXHRcdGlmICggdHlwZW9mIHR5cGUgIT09IFwic3RyaW5nXCIgKSB7XG5cdFx0XHRnb3RvRW5kID0gY2xlYXJRdWV1ZTtcblx0XHRcdGNsZWFyUXVldWUgPSB0eXBlO1xuXHRcdFx0dHlwZSA9IHVuZGVmaW5lZDtcblx0XHR9XG5cdFx0aWYgKCBjbGVhclF1ZXVlICYmIHR5cGUgIT09IGZhbHNlICkge1xuXHRcdFx0dGhpcy5xdWV1ZSggdHlwZSB8fCBcImZ4XCIsIFtdICk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgZGVxdWV1ZSA9IHRydWUsXG5cdFx0XHRcdGluZGV4ID0gdHlwZSAhPSBudWxsICYmIHR5cGUgKyBcInF1ZXVlSG9va3NcIixcblx0XHRcdFx0dGltZXJzID0galF1ZXJ5LnRpbWVycyxcblx0XHRcdFx0ZGF0YSA9IGRhdGFQcml2LmdldCggdGhpcyApO1xuXG5cdFx0XHRpZiAoIGluZGV4ICkge1xuXHRcdFx0XHRpZiAoIGRhdGFbIGluZGV4IF0gJiYgZGF0YVsgaW5kZXggXS5zdG9wICkge1xuXHRcdFx0XHRcdHN0b3BRdWV1ZSggZGF0YVsgaW5kZXggXSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRmb3IgKCBpbmRleCBpbiBkYXRhICkge1xuXHRcdFx0XHRcdGlmICggZGF0YVsgaW5kZXggXSAmJiBkYXRhWyBpbmRleCBdLnN0b3AgJiYgcnJ1bi50ZXN0KCBpbmRleCApICkge1xuXHRcdFx0XHRcdFx0c3RvcFF1ZXVlKCBkYXRhWyBpbmRleCBdICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGZvciAoIGluZGV4ID0gdGltZXJzLmxlbmd0aDsgaW5kZXgtLTsgKSB7XG5cdFx0XHRcdGlmICggdGltZXJzWyBpbmRleCBdLmVsZW0gPT09IHRoaXMgJiZcblx0XHRcdFx0XHQoIHR5cGUgPT0gbnVsbCB8fCB0aW1lcnNbIGluZGV4IF0ucXVldWUgPT09IHR5cGUgKSApIHtcblxuXHRcdFx0XHRcdHRpbWVyc1sgaW5kZXggXS5hbmltLnN0b3AoIGdvdG9FbmQgKTtcblx0XHRcdFx0XHRkZXF1ZXVlID0gZmFsc2U7XG5cdFx0XHRcdFx0dGltZXJzLnNwbGljZSggaW5kZXgsIDEgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBTdGFydCB0aGUgbmV4dCBpbiB0aGUgcXVldWUgaWYgdGhlIGxhc3Qgc3RlcCB3YXNuJ3QgZm9yY2VkLlxuXHRcdFx0Ly8gVGltZXJzIGN1cnJlbnRseSB3aWxsIGNhbGwgdGhlaXIgY29tcGxldGUgY2FsbGJhY2tzLCB3aGljaFxuXHRcdFx0Ly8gd2lsbCBkZXF1ZXVlIGJ1dCBvbmx5IGlmIHRoZXkgd2VyZSBnb3RvRW5kLlxuXHRcdFx0aWYgKCBkZXF1ZXVlIHx8ICFnb3RvRW5kICkge1xuXHRcdFx0XHRqUXVlcnkuZGVxdWV1ZSggdGhpcywgdHlwZSApO1xuXHRcdFx0fVxuXHRcdH0gKTtcblx0fSxcblx0ZmluaXNoOiBmdW5jdGlvbiggdHlwZSApIHtcblx0XHRpZiAoIHR5cGUgIT09IGZhbHNlICkge1xuXHRcdFx0dHlwZSA9IHR5cGUgfHwgXCJmeFwiO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdHZhciBpbmRleCxcblx0XHRcdFx0ZGF0YSA9IGRhdGFQcml2LmdldCggdGhpcyApLFxuXHRcdFx0XHRxdWV1ZSA9IGRhdGFbIHR5cGUgKyBcInF1ZXVlXCIgXSxcblx0XHRcdFx0aG9va3MgPSBkYXRhWyB0eXBlICsgXCJxdWV1ZUhvb2tzXCIgXSxcblx0XHRcdFx0dGltZXJzID0galF1ZXJ5LnRpbWVycyxcblx0XHRcdFx0bGVuZ3RoID0gcXVldWUgPyBxdWV1ZS5sZW5ndGggOiAwO1xuXG5cdFx0XHQvLyBFbmFibGUgZmluaXNoaW5nIGZsYWcgb24gcHJpdmF0ZSBkYXRhXG5cdFx0XHRkYXRhLmZpbmlzaCA9IHRydWU7XG5cblx0XHRcdC8vIEVtcHR5IHRoZSBxdWV1ZSBmaXJzdFxuXHRcdFx0alF1ZXJ5LnF1ZXVlKCB0aGlzLCB0eXBlLCBbXSApO1xuXG5cdFx0XHRpZiAoIGhvb2tzICYmIGhvb2tzLnN0b3AgKSB7XG5cdFx0XHRcdGhvb2tzLnN0b3AuY2FsbCggdGhpcywgdHJ1ZSApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBMb29rIGZvciBhbnkgYWN0aXZlIGFuaW1hdGlvbnMsIGFuZCBmaW5pc2ggdGhlbVxuXHRcdFx0Zm9yICggaW5kZXggPSB0aW1lcnMubGVuZ3RoOyBpbmRleC0tOyApIHtcblx0XHRcdFx0aWYgKCB0aW1lcnNbIGluZGV4IF0uZWxlbSA9PT0gdGhpcyAmJiB0aW1lcnNbIGluZGV4IF0ucXVldWUgPT09IHR5cGUgKSB7XG5cdFx0XHRcdFx0dGltZXJzWyBpbmRleCBdLmFuaW0uc3RvcCggdHJ1ZSApO1xuXHRcdFx0XHRcdHRpbWVycy5zcGxpY2UoIGluZGV4LCAxICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gTG9vayBmb3IgYW55IGFuaW1hdGlvbnMgaW4gdGhlIG9sZCBxdWV1ZSBhbmQgZmluaXNoIHRoZW1cblx0XHRcdGZvciAoIGluZGV4ID0gMDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KysgKSB7XG5cdFx0XHRcdGlmICggcXVldWVbIGluZGV4IF0gJiYgcXVldWVbIGluZGV4IF0uZmluaXNoICkge1xuXHRcdFx0XHRcdHF1ZXVlWyBpbmRleCBdLmZpbmlzaC5jYWxsKCB0aGlzICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gVHVybiBvZmYgZmluaXNoaW5nIGZsYWdcblx0XHRcdGRlbGV0ZSBkYXRhLmZpbmlzaDtcblx0XHR9ICk7XG5cdH1cbn0gKTtcblxualF1ZXJ5LmVhY2goIFsgXCJ0b2dnbGVcIiwgXCJzaG93XCIsIFwiaGlkZVwiIF0sIGZ1bmN0aW9uKCBpLCBuYW1lICkge1xuXHR2YXIgY3NzRm4gPSBqUXVlcnkuZm5bIG5hbWUgXTtcblx0alF1ZXJ5LmZuWyBuYW1lIF0gPSBmdW5jdGlvbiggc3BlZWQsIGVhc2luZywgY2FsbGJhY2sgKSB7XG5cdFx0cmV0dXJuIHNwZWVkID09IG51bGwgfHwgdHlwZW9mIHNwZWVkID09PSBcImJvb2xlYW5cIiA/XG5cdFx0XHRjc3NGbi5hcHBseSggdGhpcywgYXJndW1lbnRzICkgOlxuXHRcdFx0dGhpcy5hbmltYXRlKCBnZW5GeCggbmFtZSwgdHJ1ZSApLCBzcGVlZCwgZWFzaW5nLCBjYWxsYmFjayApO1xuXHR9O1xufSApO1xuXG4vLyBHZW5lcmF0ZSBzaG9ydGN1dHMgZm9yIGN1c3RvbSBhbmltYXRpb25zXG5qUXVlcnkuZWFjaCgge1xuXHRzbGlkZURvd246IGdlbkZ4KCBcInNob3dcIiApLFxuXHRzbGlkZVVwOiBnZW5GeCggXCJoaWRlXCIgKSxcblx0c2xpZGVUb2dnbGU6IGdlbkZ4KCBcInRvZ2dsZVwiICksXG5cdGZhZGVJbjogeyBvcGFjaXR5OiBcInNob3dcIiB9LFxuXHRmYWRlT3V0OiB7IG9wYWNpdHk6IFwiaGlkZVwiIH0sXG5cdGZhZGVUb2dnbGU6IHsgb3BhY2l0eTogXCJ0b2dnbGVcIiB9XG59LCBmdW5jdGlvbiggbmFtZSwgcHJvcHMgKSB7XG5cdGpRdWVyeS5mblsgbmFtZSBdID0gZnVuY3Rpb24oIHNwZWVkLCBlYXNpbmcsIGNhbGxiYWNrICkge1xuXHRcdHJldHVybiB0aGlzLmFuaW1hdGUoIHByb3BzLCBzcGVlZCwgZWFzaW5nLCBjYWxsYmFjayApO1xuXHR9O1xufSApO1xuXG5qUXVlcnkudGltZXJzID0gW107XG5qUXVlcnkuZngudGljayA9IGZ1bmN0aW9uKCkge1xuXHR2YXIgdGltZXIsXG5cdFx0aSA9IDAsXG5cdFx0dGltZXJzID0galF1ZXJ5LnRpbWVycztcblxuXHRmeE5vdyA9IERhdGUubm93KCk7XG5cblx0Zm9yICggOyBpIDwgdGltZXJzLmxlbmd0aDsgaSsrICkge1xuXHRcdHRpbWVyID0gdGltZXJzWyBpIF07XG5cblx0XHQvLyBSdW4gdGhlIHRpbWVyIGFuZCBzYWZlbHkgcmVtb3ZlIGl0IHdoZW4gZG9uZSAoYWxsb3dpbmcgZm9yIGV4dGVybmFsIHJlbW92YWwpXG5cdFx0aWYgKCAhdGltZXIoKSAmJiB0aW1lcnNbIGkgXSA9PT0gdGltZXIgKSB7XG5cdFx0XHR0aW1lcnMuc3BsaWNlKCBpLS0sIDEgKTtcblx0XHR9XG5cdH1cblxuXHRpZiAoICF0aW1lcnMubGVuZ3RoICkge1xuXHRcdGpRdWVyeS5meC5zdG9wKCk7XG5cdH1cblx0ZnhOb3cgPSB1bmRlZmluZWQ7XG59O1xuXG5qUXVlcnkuZngudGltZXIgPSBmdW5jdGlvbiggdGltZXIgKSB7XG5cdGpRdWVyeS50aW1lcnMucHVzaCggdGltZXIgKTtcblx0alF1ZXJ5LmZ4LnN0YXJ0KCk7XG59O1xuXG5qUXVlcnkuZnguaW50ZXJ2YWwgPSAxMztcbmpRdWVyeS5meC5zdGFydCA9IGZ1bmN0aW9uKCkge1xuXHRpZiAoIGluUHJvZ3Jlc3MgKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0aW5Qcm9ncmVzcyA9IHRydWU7XG5cdHNjaGVkdWxlKCk7XG59O1xuXG5qUXVlcnkuZnguc3RvcCA9IGZ1bmN0aW9uKCkge1xuXHRpblByb2dyZXNzID0gbnVsbDtcbn07XG5cbmpRdWVyeS5meC5zcGVlZHMgPSB7XG5cdHNsb3c6IDYwMCxcblx0ZmFzdDogMjAwLFxuXG5cdC8vIERlZmF1bHQgc3BlZWRcblx0X2RlZmF1bHQ6IDQwMFxufTtcblxuXG4vLyBCYXNlZCBvZmYgb2YgdGhlIHBsdWdpbiBieSBDbGludCBIZWxmZXJzLCB3aXRoIHBlcm1pc3Npb24uXG4vLyBodHRwczovL3dlYi5hcmNoaXZlLm9yZy93ZWIvMjAxMDAzMjQwMTQ3NDcvaHR0cDovL2JsaW5kc2lnbmFscy5jb20vaW5kZXgucGhwLzIwMDkvMDcvanF1ZXJ5LWRlbGF5L1xualF1ZXJ5LmZuLmRlbGF5ID0gZnVuY3Rpb24oIHRpbWUsIHR5cGUgKSB7XG5cdHRpbWUgPSBqUXVlcnkuZnggPyBqUXVlcnkuZnguc3BlZWRzWyB0aW1lIF0gfHwgdGltZSA6IHRpbWU7XG5cdHR5cGUgPSB0eXBlIHx8IFwiZnhcIjtcblxuXHRyZXR1cm4gdGhpcy5xdWV1ZSggdHlwZSwgZnVuY3Rpb24oIG5leHQsIGhvb2tzICkge1xuXHRcdHZhciB0aW1lb3V0ID0gd2luZG93LnNldFRpbWVvdXQoIG5leHQsIHRpbWUgKTtcblx0XHRob29rcy5zdG9wID0gZnVuY3Rpb24oKSB7XG5cdFx0XHR3aW5kb3cuY2xlYXJUaW1lb3V0KCB0aW1lb3V0ICk7XG5cdFx0fTtcblx0fSApO1xufTtcblxuXG4oIGZ1bmN0aW9uKCkge1xuXHR2YXIgaW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcImlucHV0XCIgKSxcblx0XHRzZWxlY3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcInNlbGVjdFwiICksXG5cdFx0b3B0ID0gc2VsZWN0LmFwcGVuZENoaWxkKCBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcIm9wdGlvblwiICkgKTtcblxuXHRpbnB1dC50eXBlID0gXCJjaGVja2JveFwiO1xuXG5cdC8vIFN1cHBvcnQ6IEFuZHJvaWQgPD00LjMgb25seVxuXHQvLyBEZWZhdWx0IHZhbHVlIGZvciBhIGNoZWNrYm94IHNob3VsZCBiZSBcIm9uXCJcblx0c3VwcG9ydC5jaGVja09uID0gaW5wdXQudmFsdWUgIT09IFwiXCI7XG5cblx0Ly8gU3VwcG9ydDogSUUgPD0xMSBvbmx5XG5cdC8vIE11c3QgYWNjZXNzIHNlbGVjdGVkSW5kZXggdG8gbWFrZSBkZWZhdWx0IG9wdGlvbnMgc2VsZWN0XG5cdHN1cHBvcnQub3B0U2VsZWN0ZWQgPSBvcHQuc2VsZWN0ZWQ7XG5cblx0Ly8gU3VwcG9ydDogSUUgPD0xMSBvbmx5XG5cdC8vIEFuIGlucHV0IGxvc2VzIGl0cyB2YWx1ZSBhZnRlciBiZWNvbWluZyBhIHJhZGlvXG5cdGlucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJpbnB1dFwiICk7XG5cdGlucHV0LnZhbHVlID0gXCJ0XCI7XG5cdGlucHV0LnR5cGUgPSBcInJhZGlvXCI7XG5cdHN1cHBvcnQucmFkaW9WYWx1ZSA9IGlucHV0LnZhbHVlID09PSBcInRcIjtcbn0gKSgpO1xuXG5cbnZhciBib29sSG9vayxcblx0YXR0ckhhbmRsZSA9IGpRdWVyeS5leHByLmF0dHJIYW5kbGU7XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblx0YXR0cjogZnVuY3Rpb24oIG5hbWUsIHZhbHVlICkge1xuXHRcdHJldHVybiBhY2Nlc3MoIHRoaXMsIGpRdWVyeS5hdHRyLCBuYW1lLCB2YWx1ZSwgYXJndW1lbnRzLmxlbmd0aCA+IDEgKTtcblx0fSxcblxuXHRyZW1vdmVBdHRyOiBmdW5jdGlvbiggbmFtZSApIHtcblx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdGpRdWVyeS5yZW1vdmVBdHRyKCB0aGlzLCBuYW1lICk7XG5cdFx0fSApO1xuXHR9XG59ICk7XG5cbmpRdWVyeS5leHRlbmQoIHtcblx0YXR0cjogZnVuY3Rpb24oIGVsZW0sIG5hbWUsIHZhbHVlICkge1xuXHRcdHZhciByZXQsIGhvb2tzLFxuXHRcdFx0blR5cGUgPSBlbGVtLm5vZGVUeXBlO1xuXG5cdFx0Ly8gRG9uJ3QgZ2V0L3NldCBhdHRyaWJ1dGVzIG9uIHRleHQsIGNvbW1lbnQgYW5kIGF0dHJpYnV0ZSBub2Rlc1xuXHRcdGlmICggblR5cGUgPT09IDMgfHwgblR5cGUgPT09IDggfHwgblR5cGUgPT09IDIgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gRmFsbGJhY2sgdG8gcHJvcCB3aGVuIGF0dHJpYnV0ZXMgYXJlIG5vdCBzdXBwb3J0ZWRcblx0XHRpZiAoIHR5cGVvZiBlbGVtLmdldEF0dHJpYnV0ZSA9PT0gXCJ1bmRlZmluZWRcIiApIHtcblx0XHRcdHJldHVybiBqUXVlcnkucHJvcCggZWxlbSwgbmFtZSwgdmFsdWUgKTtcblx0XHR9XG5cblx0XHQvLyBBdHRyaWJ1dGUgaG9va3MgYXJlIGRldGVybWluZWQgYnkgdGhlIGxvd2VyY2FzZSB2ZXJzaW9uXG5cdFx0Ly8gR3JhYiBuZWNlc3NhcnkgaG9vayBpZiBvbmUgaXMgZGVmaW5lZFxuXHRcdGlmICggblR5cGUgIT09IDEgfHwgIWpRdWVyeS5pc1hNTERvYyggZWxlbSApICkge1xuXHRcdFx0aG9va3MgPSBqUXVlcnkuYXR0ckhvb2tzWyBuYW1lLnRvTG93ZXJDYXNlKCkgXSB8fFxuXHRcdFx0XHQoIGpRdWVyeS5leHByLm1hdGNoLmJvb2wudGVzdCggbmFtZSApID8gYm9vbEhvb2sgOiB1bmRlZmluZWQgKTtcblx0XHR9XG5cblx0XHRpZiAoIHZhbHVlICE9PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRpZiAoIHZhbHVlID09PSBudWxsICkge1xuXHRcdFx0XHRqUXVlcnkucmVtb3ZlQXR0ciggZWxlbSwgbmFtZSApO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdGlmICggaG9va3MgJiYgXCJzZXRcIiBpbiBob29rcyAmJlxuXHRcdFx0XHQoIHJldCA9IGhvb2tzLnNldCggZWxlbSwgdmFsdWUsIG5hbWUgKSApICE9PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRcdHJldHVybiByZXQ7XG5cdFx0XHR9XG5cblx0XHRcdGVsZW0uc2V0QXR0cmlidXRlKCBuYW1lLCB2YWx1ZSArIFwiXCIgKTtcblx0XHRcdHJldHVybiB2YWx1ZTtcblx0XHR9XG5cblx0XHRpZiAoIGhvb2tzICYmIFwiZ2V0XCIgaW4gaG9va3MgJiYgKCByZXQgPSBob29rcy5nZXQoIGVsZW0sIG5hbWUgKSApICE9PSBudWxsICkge1xuXHRcdFx0cmV0dXJuIHJldDtcblx0XHR9XG5cblx0XHRyZXQgPSBqUXVlcnkuZmluZC5hdHRyKCBlbGVtLCBuYW1lICk7XG5cblx0XHQvLyBOb24tZXhpc3RlbnQgYXR0cmlidXRlcyByZXR1cm4gbnVsbCwgd2Ugbm9ybWFsaXplIHRvIHVuZGVmaW5lZFxuXHRcdHJldHVybiByZXQgPT0gbnVsbCA/IHVuZGVmaW5lZCA6IHJldDtcblx0fSxcblxuXHRhdHRySG9va3M6IHtcblx0XHR0eXBlOiB7XG5cdFx0XHRzZXQ6IGZ1bmN0aW9uKCBlbGVtLCB2YWx1ZSApIHtcblx0XHRcdFx0aWYgKCAhc3VwcG9ydC5yYWRpb1ZhbHVlICYmIHZhbHVlID09PSBcInJhZGlvXCIgJiZcblx0XHRcdFx0XHRub2RlTmFtZSggZWxlbSwgXCJpbnB1dFwiICkgKSB7XG5cdFx0XHRcdFx0dmFyIHZhbCA9IGVsZW0udmFsdWU7XG5cdFx0XHRcdFx0ZWxlbS5zZXRBdHRyaWJ1dGUoIFwidHlwZVwiLCB2YWx1ZSApO1xuXHRcdFx0XHRcdGlmICggdmFsICkge1xuXHRcdFx0XHRcdFx0ZWxlbS52YWx1ZSA9IHZhbDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cmV0dXJuIHZhbHVlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9LFxuXG5cdHJlbW92ZUF0dHI6IGZ1bmN0aW9uKCBlbGVtLCB2YWx1ZSApIHtcblx0XHR2YXIgbmFtZSxcblx0XHRcdGkgPSAwLFxuXG5cdFx0XHQvLyBBdHRyaWJ1dGUgbmFtZXMgY2FuIGNvbnRhaW4gbm9uLUhUTUwgd2hpdGVzcGFjZSBjaGFyYWN0ZXJzXG5cdFx0XHQvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9zeW50YXguaHRtbCNhdHRyaWJ1dGVzLTJcblx0XHRcdGF0dHJOYW1lcyA9IHZhbHVlICYmIHZhbHVlLm1hdGNoKCBybm90aHRtbHdoaXRlICk7XG5cblx0XHRpZiAoIGF0dHJOYW1lcyAmJiBlbGVtLm5vZGVUeXBlID09PSAxICkge1xuXHRcdFx0d2hpbGUgKCAoIG5hbWUgPSBhdHRyTmFtZXNbIGkrKyBdICkgKSB7XG5cdFx0XHRcdGVsZW0ucmVtb3ZlQXR0cmlidXRlKCBuYW1lICk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59ICk7XG5cbi8vIEhvb2tzIGZvciBib29sZWFuIGF0dHJpYnV0ZXNcbmJvb2xIb29rID0ge1xuXHRzZXQ6IGZ1bmN0aW9uKCBlbGVtLCB2YWx1ZSwgbmFtZSApIHtcblx0XHRpZiAoIHZhbHVlID09PSBmYWxzZSApIHtcblxuXHRcdFx0Ly8gUmVtb3ZlIGJvb2xlYW4gYXR0cmlidXRlcyB3aGVuIHNldCB0byBmYWxzZVxuXHRcdFx0alF1ZXJ5LnJlbW92ZUF0dHIoIGVsZW0sIG5hbWUgKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0ZWxlbS5zZXRBdHRyaWJ1dGUoIG5hbWUsIG5hbWUgKTtcblx0XHR9XG5cdFx0cmV0dXJuIG5hbWU7XG5cdH1cbn07XG5cbmpRdWVyeS5lYWNoKCBqUXVlcnkuZXhwci5tYXRjaC5ib29sLnNvdXJjZS5tYXRjaCggL1xcdysvZyApLCBmdW5jdGlvbiggaSwgbmFtZSApIHtcblx0dmFyIGdldHRlciA9IGF0dHJIYW5kbGVbIG5hbWUgXSB8fCBqUXVlcnkuZmluZC5hdHRyO1xuXG5cdGF0dHJIYW5kbGVbIG5hbWUgXSA9IGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCBpc1hNTCApIHtcblx0XHR2YXIgcmV0LCBoYW5kbGUsXG5cdFx0XHRsb3dlcmNhc2VOYW1lID0gbmFtZS50b0xvd2VyQ2FzZSgpO1xuXG5cdFx0aWYgKCAhaXNYTUwgKSB7XG5cblx0XHRcdC8vIEF2b2lkIGFuIGluZmluaXRlIGxvb3AgYnkgdGVtcG9yYXJpbHkgcmVtb3ZpbmcgdGhpcyBmdW5jdGlvbiBmcm9tIHRoZSBnZXR0ZXJcblx0XHRcdGhhbmRsZSA9IGF0dHJIYW5kbGVbIGxvd2VyY2FzZU5hbWUgXTtcblx0XHRcdGF0dHJIYW5kbGVbIGxvd2VyY2FzZU5hbWUgXSA9IHJldDtcblx0XHRcdHJldCA9IGdldHRlciggZWxlbSwgbmFtZSwgaXNYTUwgKSAhPSBudWxsID9cblx0XHRcdFx0bG93ZXJjYXNlTmFtZSA6XG5cdFx0XHRcdG51bGw7XG5cdFx0XHRhdHRySGFuZGxlWyBsb3dlcmNhc2VOYW1lIF0gPSBoYW5kbGU7XG5cdFx0fVxuXHRcdHJldHVybiByZXQ7XG5cdH07XG59ICk7XG5cblxuXG5cbnZhciByZm9jdXNhYmxlID0gL14oPzppbnB1dHxzZWxlY3R8dGV4dGFyZWF8YnV0dG9uKSQvaSxcblx0cmNsaWNrYWJsZSA9IC9eKD86YXxhcmVhKSQvaTtcblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXHRwcm9wOiBmdW5jdGlvbiggbmFtZSwgdmFsdWUgKSB7XG5cdFx0cmV0dXJuIGFjY2VzcyggdGhpcywgalF1ZXJ5LnByb3AsIG5hbWUsIHZhbHVlLCBhcmd1bWVudHMubGVuZ3RoID4gMSApO1xuXHR9LFxuXG5cdHJlbW92ZVByb3A6IGZ1bmN0aW9uKCBuYW1lICkge1xuXHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0ZGVsZXRlIHRoaXNbIGpRdWVyeS5wcm9wRml4WyBuYW1lIF0gfHwgbmFtZSBdO1xuXHRcdH0gKTtcblx0fVxufSApO1xuXG5qUXVlcnkuZXh0ZW5kKCB7XG5cdHByb3A6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCB2YWx1ZSApIHtcblx0XHR2YXIgcmV0LCBob29rcyxcblx0XHRcdG5UeXBlID0gZWxlbS5ub2RlVHlwZTtcblxuXHRcdC8vIERvbid0IGdldC9zZXQgcHJvcGVydGllcyBvbiB0ZXh0LCBjb21tZW50IGFuZCBhdHRyaWJ1dGUgbm9kZXNcblx0XHRpZiAoIG5UeXBlID09PSAzIHx8IG5UeXBlID09PSA4IHx8IG5UeXBlID09PSAyICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGlmICggblR5cGUgIT09IDEgfHwgIWpRdWVyeS5pc1hNTERvYyggZWxlbSApICkge1xuXG5cdFx0XHQvLyBGaXggbmFtZSBhbmQgYXR0YWNoIGhvb2tzXG5cdFx0XHRuYW1lID0galF1ZXJ5LnByb3BGaXhbIG5hbWUgXSB8fCBuYW1lO1xuXHRcdFx0aG9va3MgPSBqUXVlcnkucHJvcEhvb2tzWyBuYW1lIF07XG5cdFx0fVxuXG5cdFx0aWYgKCB2YWx1ZSAhPT0gdW5kZWZpbmVkICkge1xuXHRcdFx0aWYgKCBob29rcyAmJiBcInNldFwiIGluIGhvb2tzICYmXG5cdFx0XHRcdCggcmV0ID0gaG9va3Muc2V0KCBlbGVtLCB2YWx1ZSwgbmFtZSApICkgIT09IHVuZGVmaW5lZCApIHtcblx0XHRcdFx0cmV0dXJuIHJldDtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuICggZWxlbVsgbmFtZSBdID0gdmFsdWUgKTtcblx0XHR9XG5cblx0XHRpZiAoIGhvb2tzICYmIFwiZ2V0XCIgaW4gaG9va3MgJiYgKCByZXQgPSBob29rcy5nZXQoIGVsZW0sIG5hbWUgKSApICE9PSBudWxsICkge1xuXHRcdFx0cmV0dXJuIHJldDtcblx0XHR9XG5cblx0XHRyZXR1cm4gZWxlbVsgbmFtZSBdO1xuXHR9LFxuXG5cdHByb3BIb29rczoge1xuXHRcdHRhYkluZGV4OiB7XG5cdFx0XHRnZXQ6IGZ1bmN0aW9uKCBlbGVtICkge1xuXG5cdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDw9OSAtIDExIG9ubHlcblx0XHRcdFx0Ly8gZWxlbS50YWJJbmRleCBkb2Vzbid0IGFsd2F5cyByZXR1cm4gdGhlXG5cdFx0XHRcdC8vIGNvcnJlY3QgdmFsdWUgd2hlbiBpdCBoYXNuJ3QgYmVlbiBleHBsaWNpdGx5IHNldFxuXHRcdFx0XHQvLyBodHRwczovL3dlYi5hcmNoaXZlLm9yZy93ZWIvMjAxNDExMTYyMzMzNDcvaHR0cDovL2ZsdWlkcHJvamVjdC5vcmcvYmxvZy8yMDA4LzAxLzA5L2dldHRpbmctc2V0dGluZy1hbmQtcmVtb3ZpbmctdGFiaW5kZXgtdmFsdWVzLXdpdGgtamF2YXNjcmlwdC9cblx0XHRcdFx0Ly8gVXNlIHByb3BlciBhdHRyaWJ1dGUgcmV0cmlldmFsKCMxMjA3Milcblx0XHRcdFx0dmFyIHRhYmluZGV4ID0galF1ZXJ5LmZpbmQuYXR0ciggZWxlbSwgXCJ0YWJpbmRleFwiICk7XG5cblx0XHRcdFx0aWYgKCB0YWJpbmRleCApIHtcblx0XHRcdFx0XHRyZXR1cm4gcGFyc2VJbnQoIHRhYmluZGV4LCAxMCApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdHJmb2N1c2FibGUudGVzdCggZWxlbS5ub2RlTmFtZSApIHx8XG5cdFx0XHRcdFx0cmNsaWNrYWJsZS50ZXN0KCBlbGVtLm5vZGVOYW1lICkgJiZcblx0XHRcdFx0XHRlbGVtLmhyZWZcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0cmV0dXJuIDA7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gLTE7XG5cdFx0XHR9XG5cdFx0fVxuXHR9LFxuXG5cdHByb3BGaXg6IHtcblx0XHRcImZvclwiOiBcImh0bWxGb3JcIixcblx0XHRcImNsYXNzXCI6IFwiY2xhc3NOYW1lXCJcblx0fVxufSApO1xuXG4vLyBTdXBwb3J0OiBJRSA8PTExIG9ubHlcbi8vIEFjY2Vzc2luZyB0aGUgc2VsZWN0ZWRJbmRleCBwcm9wZXJ0eVxuLy8gZm9yY2VzIHRoZSBicm93c2VyIHRvIHJlc3BlY3Qgc2V0dGluZyBzZWxlY3RlZFxuLy8gb24gdGhlIG9wdGlvblxuLy8gVGhlIGdldHRlciBlbnN1cmVzIGEgZGVmYXVsdCBvcHRpb24gaXMgc2VsZWN0ZWRcbi8vIHdoZW4gaW4gYW4gb3B0Z3JvdXBcbi8vIGVzbGludCBydWxlIFwibm8tdW51c2VkLWV4cHJlc3Npb25zXCIgaXMgZGlzYWJsZWQgZm9yIHRoaXMgY29kZVxuLy8gc2luY2UgaXQgY29uc2lkZXJzIHN1Y2ggYWNjZXNzaW9ucyBub29wXG5pZiAoICFzdXBwb3J0Lm9wdFNlbGVjdGVkICkge1xuXHRqUXVlcnkucHJvcEhvb2tzLnNlbGVjdGVkID0ge1xuXHRcdGdldDogZnVuY3Rpb24oIGVsZW0gKSB7XG5cblx0XHRcdC8qIGVzbGludCBuby11bnVzZWQtZXhwcmVzc2lvbnM6IFwib2ZmXCIgKi9cblxuXHRcdFx0dmFyIHBhcmVudCA9IGVsZW0ucGFyZW50Tm9kZTtcblx0XHRcdGlmICggcGFyZW50ICYmIHBhcmVudC5wYXJlbnROb2RlICkge1xuXHRcdFx0XHRwYXJlbnQucGFyZW50Tm9kZS5zZWxlY3RlZEluZGV4O1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0fSxcblx0XHRzZXQ6IGZ1bmN0aW9uKCBlbGVtICkge1xuXG5cdFx0XHQvKiBlc2xpbnQgbm8tdW51c2VkLWV4cHJlc3Npb25zOiBcIm9mZlwiICovXG5cblx0XHRcdHZhciBwYXJlbnQgPSBlbGVtLnBhcmVudE5vZGU7XG5cdFx0XHRpZiAoIHBhcmVudCApIHtcblx0XHRcdFx0cGFyZW50LnNlbGVjdGVkSW5kZXg7XG5cblx0XHRcdFx0aWYgKCBwYXJlbnQucGFyZW50Tm9kZSApIHtcblx0XHRcdFx0XHRwYXJlbnQucGFyZW50Tm9kZS5zZWxlY3RlZEluZGV4O1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xufVxuXG5qUXVlcnkuZWFjaCggW1xuXHRcInRhYkluZGV4XCIsXG5cdFwicmVhZE9ubHlcIixcblx0XCJtYXhMZW5ndGhcIixcblx0XCJjZWxsU3BhY2luZ1wiLFxuXHRcImNlbGxQYWRkaW5nXCIsXG5cdFwicm93U3BhblwiLFxuXHRcImNvbFNwYW5cIixcblx0XCJ1c2VNYXBcIixcblx0XCJmcmFtZUJvcmRlclwiLFxuXHRcImNvbnRlbnRFZGl0YWJsZVwiXG5dLCBmdW5jdGlvbigpIHtcblx0alF1ZXJ5LnByb3BGaXhbIHRoaXMudG9Mb3dlckNhc2UoKSBdID0gdGhpcztcbn0gKTtcblxuXG5cblxuXHQvLyBTdHJpcCBhbmQgY29sbGFwc2Ugd2hpdGVzcGFjZSBhY2NvcmRpbmcgdG8gSFRNTCBzcGVjXG5cdC8vIGh0dHBzOi8vaW5mcmEuc3BlYy53aGF0d2cub3JnLyNzdHJpcC1hbmQtY29sbGFwc2UtYXNjaWktd2hpdGVzcGFjZVxuXHRmdW5jdGlvbiBzdHJpcEFuZENvbGxhcHNlKCB2YWx1ZSApIHtcblx0XHR2YXIgdG9rZW5zID0gdmFsdWUubWF0Y2goIHJub3RodG1sd2hpdGUgKSB8fCBbXTtcblx0XHRyZXR1cm4gdG9rZW5zLmpvaW4oIFwiIFwiICk7XG5cdH1cblxuXG5mdW5jdGlvbiBnZXRDbGFzcyggZWxlbSApIHtcblx0cmV0dXJuIGVsZW0uZ2V0QXR0cmlidXRlICYmIGVsZW0uZ2V0QXR0cmlidXRlKCBcImNsYXNzXCIgKSB8fCBcIlwiO1xufVxuXG5mdW5jdGlvbiBjbGFzc2VzVG9BcnJheSggdmFsdWUgKSB7XG5cdGlmICggQXJyYXkuaXNBcnJheSggdmFsdWUgKSApIHtcblx0XHRyZXR1cm4gdmFsdWU7XG5cdH1cblx0aWYgKCB0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgKSB7XG5cdFx0cmV0dXJuIHZhbHVlLm1hdGNoKCBybm90aHRtbHdoaXRlICkgfHwgW107XG5cdH1cblx0cmV0dXJuIFtdO1xufVxuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cdGFkZENsYXNzOiBmdW5jdGlvbiggdmFsdWUgKSB7XG5cdFx0dmFyIGNsYXNzZXMsIGVsZW0sIGN1ciwgY3VyVmFsdWUsIGNsYXp6LCBqLCBmaW5hbFZhbHVlLFxuXHRcdFx0aSA9IDA7XG5cblx0XHRpZiAoIGlzRnVuY3Rpb24oIHZhbHVlICkgKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbiggaiApIHtcblx0XHRcdFx0alF1ZXJ5KCB0aGlzICkuYWRkQ2xhc3MoIHZhbHVlLmNhbGwoIHRoaXMsIGosIGdldENsYXNzKCB0aGlzICkgKSApO1xuXHRcdFx0fSApO1xuXHRcdH1cblxuXHRcdGNsYXNzZXMgPSBjbGFzc2VzVG9BcnJheSggdmFsdWUgKTtcblxuXHRcdGlmICggY2xhc3Nlcy5sZW5ndGggKSB7XG5cdFx0XHR3aGlsZSAoICggZWxlbSA9IHRoaXNbIGkrKyBdICkgKSB7XG5cdFx0XHRcdGN1clZhbHVlID0gZ2V0Q2xhc3MoIGVsZW0gKTtcblx0XHRcdFx0Y3VyID0gZWxlbS5ub2RlVHlwZSA9PT0gMSAmJiAoIFwiIFwiICsgc3RyaXBBbmRDb2xsYXBzZSggY3VyVmFsdWUgKSArIFwiIFwiICk7XG5cblx0XHRcdFx0aWYgKCBjdXIgKSB7XG5cdFx0XHRcdFx0aiA9IDA7XG5cdFx0XHRcdFx0d2hpbGUgKCAoIGNsYXp6ID0gY2xhc3Nlc1sgaisrIF0gKSApIHtcblx0XHRcdFx0XHRcdGlmICggY3VyLmluZGV4T2YoIFwiIFwiICsgY2xhenogKyBcIiBcIiApIDwgMCApIHtcblx0XHRcdFx0XHRcdFx0Y3VyICs9IGNsYXp6ICsgXCIgXCI7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ly8gT25seSBhc3NpZ24gaWYgZGlmZmVyZW50IHRvIGF2b2lkIHVubmVlZGVkIHJlbmRlcmluZy5cblx0XHRcdFx0XHRmaW5hbFZhbHVlID0gc3RyaXBBbmRDb2xsYXBzZSggY3VyICk7XG5cdFx0XHRcdFx0aWYgKCBjdXJWYWx1ZSAhPT0gZmluYWxWYWx1ZSApIHtcblx0XHRcdFx0XHRcdGVsZW0uc2V0QXR0cmlidXRlKCBcImNsYXNzXCIsIGZpbmFsVmFsdWUgKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRyZW1vdmVDbGFzczogZnVuY3Rpb24oIHZhbHVlICkge1xuXHRcdHZhciBjbGFzc2VzLCBlbGVtLCBjdXIsIGN1clZhbHVlLCBjbGF6eiwgaiwgZmluYWxWYWx1ZSxcblx0XHRcdGkgPSAwO1xuXG5cdFx0aWYgKCBpc0Z1bmN0aW9uKCB2YWx1ZSApICkge1xuXHRcdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oIGogKSB7XG5cdFx0XHRcdGpRdWVyeSggdGhpcyApLnJlbW92ZUNsYXNzKCB2YWx1ZS5jYWxsKCB0aGlzLCBqLCBnZXRDbGFzcyggdGhpcyApICkgKTtcblx0XHRcdH0gKTtcblx0XHR9XG5cblx0XHRpZiAoICFhcmd1bWVudHMubGVuZ3RoICkge1xuXHRcdFx0cmV0dXJuIHRoaXMuYXR0ciggXCJjbGFzc1wiLCBcIlwiICk7XG5cdFx0fVxuXG5cdFx0Y2xhc3NlcyA9IGNsYXNzZXNUb0FycmF5KCB2YWx1ZSApO1xuXG5cdFx0aWYgKCBjbGFzc2VzLmxlbmd0aCApIHtcblx0XHRcdHdoaWxlICggKCBlbGVtID0gdGhpc1sgaSsrIF0gKSApIHtcblx0XHRcdFx0Y3VyVmFsdWUgPSBnZXRDbGFzcyggZWxlbSApO1xuXG5cdFx0XHRcdC8vIFRoaXMgZXhwcmVzc2lvbiBpcyBoZXJlIGZvciBiZXR0ZXIgY29tcHJlc3NpYmlsaXR5IChzZWUgYWRkQ2xhc3MpXG5cdFx0XHRcdGN1ciA9IGVsZW0ubm9kZVR5cGUgPT09IDEgJiYgKCBcIiBcIiArIHN0cmlwQW5kQ29sbGFwc2UoIGN1clZhbHVlICkgKyBcIiBcIiApO1xuXG5cdFx0XHRcdGlmICggY3VyICkge1xuXHRcdFx0XHRcdGogPSAwO1xuXHRcdFx0XHRcdHdoaWxlICggKCBjbGF6eiA9IGNsYXNzZXNbIGorKyBdICkgKSB7XG5cblx0XHRcdFx0XHRcdC8vIFJlbW92ZSAqYWxsKiBpbnN0YW5jZXNcblx0XHRcdFx0XHRcdHdoaWxlICggY3VyLmluZGV4T2YoIFwiIFwiICsgY2xhenogKyBcIiBcIiApID4gLTEgKSB7XG5cdFx0XHRcdFx0XHRcdGN1ciA9IGN1ci5yZXBsYWNlKCBcIiBcIiArIGNsYXp6ICsgXCIgXCIsIFwiIFwiICk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ly8gT25seSBhc3NpZ24gaWYgZGlmZmVyZW50IHRvIGF2b2lkIHVubmVlZGVkIHJlbmRlcmluZy5cblx0XHRcdFx0XHRmaW5hbFZhbHVlID0gc3RyaXBBbmRDb2xsYXBzZSggY3VyICk7XG5cdFx0XHRcdFx0aWYgKCBjdXJWYWx1ZSAhPT0gZmluYWxWYWx1ZSApIHtcblx0XHRcdFx0XHRcdGVsZW0uc2V0QXR0cmlidXRlKCBcImNsYXNzXCIsIGZpbmFsVmFsdWUgKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHR0b2dnbGVDbGFzczogZnVuY3Rpb24oIHZhbHVlLCBzdGF0ZVZhbCApIHtcblx0XHR2YXIgdHlwZSA9IHR5cGVvZiB2YWx1ZSxcblx0XHRcdGlzVmFsaWRWYWx1ZSA9IHR5cGUgPT09IFwic3RyaW5nXCIgfHwgQXJyYXkuaXNBcnJheSggdmFsdWUgKTtcblxuXHRcdGlmICggdHlwZW9mIHN0YXRlVmFsID09PSBcImJvb2xlYW5cIiAmJiBpc1ZhbGlkVmFsdWUgKSB7XG5cdFx0XHRyZXR1cm4gc3RhdGVWYWwgPyB0aGlzLmFkZENsYXNzKCB2YWx1ZSApIDogdGhpcy5yZW1vdmVDbGFzcyggdmFsdWUgKTtcblx0XHR9XG5cblx0XHRpZiAoIGlzRnVuY3Rpb24oIHZhbHVlICkgKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbiggaSApIHtcblx0XHRcdFx0alF1ZXJ5KCB0aGlzICkudG9nZ2xlQ2xhc3MoXG5cdFx0XHRcdFx0dmFsdWUuY2FsbCggdGhpcywgaSwgZ2V0Q2xhc3MoIHRoaXMgKSwgc3RhdGVWYWwgKSxcblx0XHRcdFx0XHRzdGF0ZVZhbFxuXHRcdFx0XHQpO1xuXHRcdFx0fSApO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIGNsYXNzTmFtZSwgaSwgc2VsZiwgY2xhc3NOYW1lcztcblxuXHRcdFx0aWYgKCBpc1ZhbGlkVmFsdWUgKSB7XG5cblx0XHRcdFx0Ly8gVG9nZ2xlIGluZGl2aWR1YWwgY2xhc3MgbmFtZXNcblx0XHRcdFx0aSA9IDA7XG5cdFx0XHRcdHNlbGYgPSBqUXVlcnkoIHRoaXMgKTtcblx0XHRcdFx0Y2xhc3NOYW1lcyA9IGNsYXNzZXNUb0FycmF5KCB2YWx1ZSApO1xuXG5cdFx0XHRcdHdoaWxlICggKCBjbGFzc05hbWUgPSBjbGFzc05hbWVzWyBpKysgXSApICkge1xuXG5cdFx0XHRcdFx0Ly8gQ2hlY2sgZWFjaCBjbGFzc05hbWUgZ2l2ZW4sIHNwYWNlIHNlcGFyYXRlZCBsaXN0XG5cdFx0XHRcdFx0aWYgKCBzZWxmLmhhc0NsYXNzKCBjbGFzc05hbWUgKSApIHtcblx0XHRcdFx0XHRcdHNlbGYucmVtb3ZlQ2xhc3MoIGNsYXNzTmFtZSApO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRzZWxmLmFkZENsYXNzKCBjbGFzc05hbWUgKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0Ly8gVG9nZ2xlIHdob2xlIGNsYXNzIG5hbWVcblx0XHRcdH0gZWxzZSBpZiAoIHZhbHVlID09PSB1bmRlZmluZWQgfHwgdHlwZSA9PT0gXCJib29sZWFuXCIgKSB7XG5cdFx0XHRcdGNsYXNzTmFtZSA9IGdldENsYXNzKCB0aGlzICk7XG5cdFx0XHRcdGlmICggY2xhc3NOYW1lICkge1xuXG5cdFx0XHRcdFx0Ly8gU3RvcmUgY2xhc3NOYW1lIGlmIHNldFxuXHRcdFx0XHRcdGRhdGFQcml2LnNldCggdGhpcywgXCJfX2NsYXNzTmFtZV9fXCIsIGNsYXNzTmFtZSApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gSWYgdGhlIGVsZW1lbnQgaGFzIGEgY2xhc3MgbmFtZSBvciBpZiB3ZSdyZSBwYXNzZWQgYGZhbHNlYCxcblx0XHRcdFx0Ly8gdGhlbiByZW1vdmUgdGhlIHdob2xlIGNsYXNzbmFtZSAoaWYgdGhlcmUgd2FzIG9uZSwgdGhlIGFib3ZlIHNhdmVkIGl0KS5cblx0XHRcdFx0Ly8gT3RoZXJ3aXNlIGJyaW5nIGJhY2sgd2hhdGV2ZXIgd2FzIHByZXZpb3VzbHkgc2F2ZWQgKGlmIGFueXRoaW5nKSxcblx0XHRcdFx0Ly8gZmFsbGluZyBiYWNrIHRvIHRoZSBlbXB0eSBzdHJpbmcgaWYgbm90aGluZyB3YXMgc3RvcmVkLlxuXHRcdFx0XHRpZiAoIHRoaXMuc2V0QXR0cmlidXRlICkge1xuXHRcdFx0XHRcdHRoaXMuc2V0QXR0cmlidXRlKCBcImNsYXNzXCIsXG5cdFx0XHRcdFx0XHRjbGFzc05hbWUgfHwgdmFsdWUgPT09IGZhbHNlID9cblx0XHRcdFx0XHRcdFwiXCIgOlxuXHRcdFx0XHRcdFx0ZGF0YVByaXYuZ2V0KCB0aGlzLCBcIl9fY2xhc3NOYW1lX19cIiApIHx8IFwiXCJcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSApO1xuXHR9LFxuXG5cdGhhc0NsYXNzOiBmdW5jdGlvbiggc2VsZWN0b3IgKSB7XG5cdFx0dmFyIGNsYXNzTmFtZSwgZWxlbSxcblx0XHRcdGkgPSAwO1xuXG5cdFx0Y2xhc3NOYW1lID0gXCIgXCIgKyBzZWxlY3RvciArIFwiIFwiO1xuXHRcdHdoaWxlICggKCBlbGVtID0gdGhpc1sgaSsrIF0gKSApIHtcblx0XHRcdGlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSAmJlxuXHRcdFx0XHQoIFwiIFwiICsgc3RyaXBBbmRDb2xsYXBzZSggZ2V0Q2xhc3MoIGVsZW0gKSApICsgXCIgXCIgKS5pbmRleE9mKCBjbGFzc05hbWUgKSA+IC0xICkge1xuXHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxufSApO1xuXG5cblxuXG52YXIgcnJldHVybiA9IC9cXHIvZztcblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXHR2YWw6IGZ1bmN0aW9uKCB2YWx1ZSApIHtcblx0XHR2YXIgaG9va3MsIHJldCwgdmFsdWVJc0Z1bmN0aW9uLFxuXHRcdFx0ZWxlbSA9IHRoaXNbIDAgXTtcblxuXHRcdGlmICggIWFyZ3VtZW50cy5sZW5ndGggKSB7XG5cdFx0XHRpZiAoIGVsZW0gKSB7XG5cdFx0XHRcdGhvb2tzID0galF1ZXJ5LnZhbEhvb2tzWyBlbGVtLnR5cGUgXSB8fFxuXHRcdFx0XHRcdGpRdWVyeS52YWxIb29rc1sgZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpIF07XG5cblx0XHRcdFx0aWYgKCBob29rcyAmJlxuXHRcdFx0XHRcdFwiZ2V0XCIgaW4gaG9va3MgJiZcblx0XHRcdFx0XHQoIHJldCA9IGhvb2tzLmdldCggZWxlbSwgXCJ2YWx1ZVwiICkgKSAhPT0gdW5kZWZpbmVkXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdHJldHVybiByZXQ7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXQgPSBlbGVtLnZhbHVlO1xuXG5cdFx0XHRcdC8vIEhhbmRsZSBtb3N0IGNvbW1vbiBzdHJpbmcgY2FzZXNcblx0XHRcdFx0aWYgKCB0eXBlb2YgcmV0ID09PSBcInN0cmluZ1wiICkge1xuXHRcdFx0XHRcdHJldHVybiByZXQucmVwbGFjZSggcnJldHVybiwgXCJcIiApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gSGFuZGxlIGNhc2VzIHdoZXJlIHZhbHVlIGlzIG51bGwvdW5kZWYgb3IgbnVtYmVyXG5cdFx0XHRcdHJldHVybiByZXQgPT0gbnVsbCA/IFwiXCIgOiByZXQ7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHR2YWx1ZUlzRnVuY3Rpb24gPSBpc0Z1bmN0aW9uKCB2YWx1ZSApO1xuXG5cdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oIGkgKSB7XG5cdFx0XHR2YXIgdmFsO1xuXG5cdFx0XHRpZiAoIHRoaXMubm9kZVR5cGUgIT09IDEgKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0aWYgKCB2YWx1ZUlzRnVuY3Rpb24gKSB7XG5cdFx0XHRcdHZhbCA9IHZhbHVlLmNhbGwoIHRoaXMsIGksIGpRdWVyeSggdGhpcyApLnZhbCgpICk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR2YWwgPSB2YWx1ZTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gVHJlYXQgbnVsbC91bmRlZmluZWQgYXMgXCJcIjsgY29udmVydCBudW1iZXJzIHRvIHN0cmluZ1xuXHRcdFx0aWYgKCB2YWwgPT0gbnVsbCApIHtcblx0XHRcdFx0dmFsID0gXCJcIjtcblxuXHRcdFx0fSBlbHNlIGlmICggdHlwZW9mIHZhbCA9PT0gXCJudW1iZXJcIiApIHtcblx0XHRcdFx0dmFsICs9IFwiXCI7XG5cblx0XHRcdH0gZWxzZSBpZiAoIEFycmF5LmlzQXJyYXkoIHZhbCApICkge1xuXHRcdFx0XHR2YWwgPSBqUXVlcnkubWFwKCB2YWwsIGZ1bmN0aW9uKCB2YWx1ZSApIHtcblx0XHRcdFx0XHRyZXR1cm4gdmFsdWUgPT0gbnVsbCA/IFwiXCIgOiB2YWx1ZSArIFwiXCI7XG5cdFx0XHRcdH0gKTtcblx0XHRcdH1cblxuXHRcdFx0aG9va3MgPSBqUXVlcnkudmFsSG9va3NbIHRoaXMudHlwZSBdIHx8IGpRdWVyeS52YWxIb29rc1sgdGhpcy5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpIF07XG5cblx0XHRcdC8vIElmIHNldCByZXR1cm5zIHVuZGVmaW5lZCwgZmFsbCBiYWNrIHRvIG5vcm1hbCBzZXR0aW5nXG5cdFx0XHRpZiAoICFob29rcyB8fCAhKCBcInNldFwiIGluIGhvb2tzICkgfHwgaG9va3Muc2V0KCB0aGlzLCB2YWwsIFwidmFsdWVcIiApID09PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRcdHRoaXMudmFsdWUgPSB2YWw7XG5cdFx0XHR9XG5cdFx0fSApO1xuXHR9XG59ICk7XG5cbmpRdWVyeS5leHRlbmQoIHtcblx0dmFsSG9va3M6IHtcblx0XHRvcHRpb246IHtcblx0XHRcdGdldDogZnVuY3Rpb24oIGVsZW0gKSB7XG5cblx0XHRcdFx0dmFyIHZhbCA9IGpRdWVyeS5maW5kLmF0dHIoIGVsZW0sIFwidmFsdWVcIiApO1xuXHRcdFx0XHRyZXR1cm4gdmFsICE9IG51bGwgP1xuXHRcdFx0XHRcdHZhbCA6XG5cblx0XHRcdFx0XHQvLyBTdXBwb3J0OiBJRSA8PTEwIC0gMTEgb25seVxuXHRcdFx0XHRcdC8vIG9wdGlvbi50ZXh0IHRocm93cyBleGNlcHRpb25zICgjMTQ2ODYsICMxNDg1OClcblx0XHRcdFx0XHQvLyBTdHJpcCBhbmQgY29sbGFwc2Ugd2hpdGVzcGFjZVxuXHRcdFx0XHRcdC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvI3N0cmlwLWFuZC1jb2xsYXBzZS13aGl0ZXNwYWNlXG5cdFx0XHRcdFx0c3RyaXBBbmRDb2xsYXBzZSggalF1ZXJ5LnRleHQoIGVsZW0gKSApO1xuXHRcdFx0fVxuXHRcdH0sXG5cdFx0c2VsZWN0OiB7XG5cdFx0XHRnZXQ6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0XHR2YXIgdmFsdWUsIG9wdGlvbiwgaSxcblx0XHRcdFx0XHRvcHRpb25zID0gZWxlbS5vcHRpb25zLFxuXHRcdFx0XHRcdGluZGV4ID0gZWxlbS5zZWxlY3RlZEluZGV4LFxuXHRcdFx0XHRcdG9uZSA9IGVsZW0udHlwZSA9PT0gXCJzZWxlY3Qtb25lXCIsXG5cdFx0XHRcdFx0dmFsdWVzID0gb25lID8gbnVsbCA6IFtdLFxuXHRcdFx0XHRcdG1heCA9IG9uZSA/IGluZGV4ICsgMSA6IG9wdGlvbnMubGVuZ3RoO1xuXG5cdFx0XHRcdGlmICggaW5kZXggPCAwICkge1xuXHRcdFx0XHRcdGkgPSBtYXg7XG5cblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRpID0gb25lID8gaW5kZXggOiAwO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gTG9vcCB0aHJvdWdoIGFsbCB0aGUgc2VsZWN0ZWQgb3B0aW9uc1xuXHRcdFx0XHRmb3IgKCA7IGkgPCBtYXg7IGkrKyApIHtcblx0XHRcdFx0XHRvcHRpb24gPSBvcHRpb25zWyBpIF07XG5cblx0XHRcdFx0XHQvLyBTdXBwb3J0OiBJRSA8PTkgb25seVxuXHRcdFx0XHRcdC8vIElFOC05IGRvZXNuJ3QgdXBkYXRlIHNlbGVjdGVkIGFmdGVyIGZvcm0gcmVzZXQgKCMyNTUxKVxuXHRcdFx0XHRcdGlmICggKCBvcHRpb24uc2VsZWN0ZWQgfHwgaSA9PT0gaW5kZXggKSAmJlxuXG5cdFx0XHRcdFx0XHRcdC8vIERvbid0IHJldHVybiBvcHRpb25zIHRoYXQgYXJlIGRpc2FibGVkIG9yIGluIGEgZGlzYWJsZWQgb3B0Z3JvdXBcblx0XHRcdFx0XHRcdFx0IW9wdGlvbi5kaXNhYmxlZCAmJlxuXHRcdFx0XHRcdFx0XHQoICFvcHRpb24ucGFyZW50Tm9kZS5kaXNhYmxlZCB8fFxuXHRcdFx0XHRcdFx0XHRcdCFub2RlTmFtZSggb3B0aW9uLnBhcmVudE5vZGUsIFwib3B0Z3JvdXBcIiApICkgKSB7XG5cblx0XHRcdFx0XHRcdC8vIEdldCB0aGUgc3BlY2lmaWMgdmFsdWUgZm9yIHRoZSBvcHRpb25cblx0XHRcdFx0XHRcdHZhbHVlID0galF1ZXJ5KCBvcHRpb24gKS52YWwoKTtcblxuXHRcdFx0XHRcdFx0Ly8gV2UgZG9uJ3QgbmVlZCBhbiBhcnJheSBmb3Igb25lIHNlbGVjdHNcblx0XHRcdFx0XHRcdGlmICggb25lICkge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gdmFsdWU7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdC8vIE11bHRpLVNlbGVjdHMgcmV0dXJuIGFuIGFycmF5XG5cdFx0XHRcdFx0XHR2YWx1ZXMucHVzaCggdmFsdWUgKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gdmFsdWVzO1xuXHRcdFx0fSxcblxuXHRcdFx0c2V0OiBmdW5jdGlvbiggZWxlbSwgdmFsdWUgKSB7XG5cdFx0XHRcdHZhciBvcHRpb25TZXQsIG9wdGlvbixcblx0XHRcdFx0XHRvcHRpb25zID0gZWxlbS5vcHRpb25zLFxuXHRcdFx0XHRcdHZhbHVlcyA9IGpRdWVyeS5tYWtlQXJyYXkoIHZhbHVlICksXG5cdFx0XHRcdFx0aSA9IG9wdGlvbnMubGVuZ3RoO1xuXG5cdFx0XHRcdHdoaWxlICggaS0tICkge1xuXHRcdFx0XHRcdG9wdGlvbiA9IG9wdGlvbnNbIGkgXTtcblxuXHRcdFx0XHRcdC8qIGVzbGludC1kaXNhYmxlIG5vLWNvbmQtYXNzaWduICovXG5cblx0XHRcdFx0XHRpZiAoIG9wdGlvbi5zZWxlY3RlZCA9XG5cdFx0XHRcdFx0XHRqUXVlcnkuaW5BcnJheSggalF1ZXJ5LnZhbEhvb2tzLm9wdGlvbi5nZXQoIG9wdGlvbiApLCB2YWx1ZXMgKSA+IC0xXG5cdFx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0XHRvcHRpb25TZXQgPSB0cnVlO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8qIGVzbGludC1lbmFibGUgbm8tY29uZC1hc3NpZ24gKi9cblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIEZvcmNlIGJyb3dzZXJzIHRvIGJlaGF2ZSBjb25zaXN0ZW50bHkgd2hlbiBub24tbWF0Y2hpbmcgdmFsdWUgaXMgc2V0XG5cdFx0XHRcdGlmICggIW9wdGlvblNldCApIHtcblx0XHRcdFx0XHRlbGVtLnNlbGVjdGVkSW5kZXggPSAtMTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gdmFsdWVzO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxufSApO1xuXG4vLyBSYWRpb3MgYW5kIGNoZWNrYm94ZXMgZ2V0dGVyL3NldHRlclxualF1ZXJ5LmVhY2goIFsgXCJyYWRpb1wiLCBcImNoZWNrYm94XCIgXSwgZnVuY3Rpb24oKSB7XG5cdGpRdWVyeS52YWxIb29rc1sgdGhpcyBdID0ge1xuXHRcdHNldDogZnVuY3Rpb24oIGVsZW0sIHZhbHVlICkge1xuXHRcdFx0aWYgKCBBcnJheS5pc0FycmF5KCB2YWx1ZSApICkge1xuXHRcdFx0XHRyZXR1cm4gKCBlbGVtLmNoZWNrZWQgPSBqUXVlcnkuaW5BcnJheSggalF1ZXJ5KCBlbGVtICkudmFsKCksIHZhbHVlICkgPiAtMSApO1xuXHRcdFx0fVxuXHRcdH1cblx0fTtcblx0aWYgKCAhc3VwcG9ydC5jaGVja09uICkge1xuXHRcdGpRdWVyeS52YWxIb29rc1sgdGhpcyBdLmdldCA9IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0cmV0dXJuIGVsZW0uZ2V0QXR0cmlidXRlKCBcInZhbHVlXCIgKSA9PT0gbnVsbCA/IFwib25cIiA6IGVsZW0udmFsdWU7XG5cdFx0fTtcblx0fVxufSApO1xuXG5cblxuXG4vLyBSZXR1cm4galF1ZXJ5IGZvciBhdHRyaWJ1dGVzLW9ubHkgaW5jbHVzaW9uXG5cblxuc3VwcG9ydC5mb2N1c2luID0gXCJvbmZvY3VzaW5cIiBpbiB3aW5kb3c7XG5cblxudmFyIHJmb2N1c01vcnBoID0gL14oPzpmb2N1c2luZm9jdXN8Zm9jdXNvdXRibHVyKSQvLFxuXHRzdG9wUHJvcGFnYXRpb25DYWxsYmFjayA9IGZ1bmN0aW9uKCBlICkge1xuXHRcdGUuc3RvcFByb3BhZ2F0aW9uKCk7XG5cdH07XG5cbmpRdWVyeS5leHRlbmQoIGpRdWVyeS5ldmVudCwge1xuXG5cdHRyaWdnZXI6IGZ1bmN0aW9uKCBldmVudCwgZGF0YSwgZWxlbSwgb25seUhhbmRsZXJzICkge1xuXG5cdFx0dmFyIGksIGN1ciwgdG1wLCBidWJibGVUeXBlLCBvbnR5cGUsIGhhbmRsZSwgc3BlY2lhbCwgbGFzdEVsZW1lbnQsXG5cdFx0XHRldmVudFBhdGggPSBbIGVsZW0gfHwgZG9jdW1lbnQgXSxcblx0XHRcdHR5cGUgPSBoYXNPd24uY2FsbCggZXZlbnQsIFwidHlwZVwiICkgPyBldmVudC50eXBlIDogZXZlbnQsXG5cdFx0XHRuYW1lc3BhY2VzID0gaGFzT3duLmNhbGwoIGV2ZW50LCBcIm5hbWVzcGFjZVwiICkgPyBldmVudC5uYW1lc3BhY2Uuc3BsaXQoIFwiLlwiICkgOiBbXTtcblxuXHRcdGN1ciA9IGxhc3RFbGVtZW50ID0gdG1wID0gZWxlbSA9IGVsZW0gfHwgZG9jdW1lbnQ7XG5cblx0XHQvLyBEb24ndCBkbyBldmVudHMgb24gdGV4dCBhbmQgY29tbWVudCBub2Rlc1xuXHRcdGlmICggZWxlbS5ub2RlVHlwZSA9PT0gMyB8fCBlbGVtLm5vZGVUeXBlID09PSA4ICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIGZvY3VzL2JsdXIgbW9ycGhzIHRvIGZvY3VzaW4vb3V0OyBlbnN1cmUgd2UncmUgbm90IGZpcmluZyB0aGVtIHJpZ2h0IG5vd1xuXHRcdGlmICggcmZvY3VzTW9ycGgudGVzdCggdHlwZSArIGpRdWVyeS5ldmVudC50cmlnZ2VyZWQgKSApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRpZiAoIHR5cGUuaW5kZXhPZiggXCIuXCIgKSA+IC0xICkge1xuXG5cdFx0XHQvLyBOYW1lc3BhY2VkIHRyaWdnZXI7IGNyZWF0ZSBhIHJlZ2V4cCB0byBtYXRjaCBldmVudCB0eXBlIGluIGhhbmRsZSgpXG5cdFx0XHRuYW1lc3BhY2VzID0gdHlwZS5zcGxpdCggXCIuXCIgKTtcblx0XHRcdHR5cGUgPSBuYW1lc3BhY2VzLnNoaWZ0KCk7XG5cdFx0XHRuYW1lc3BhY2VzLnNvcnQoKTtcblx0XHR9XG5cdFx0b250eXBlID0gdHlwZS5pbmRleE9mKCBcIjpcIiApIDwgMCAmJiBcIm9uXCIgKyB0eXBlO1xuXG5cdFx0Ly8gQ2FsbGVyIGNhbiBwYXNzIGluIGEgalF1ZXJ5LkV2ZW50IG9iamVjdCwgT2JqZWN0LCBvciBqdXN0IGFuIGV2ZW50IHR5cGUgc3RyaW5nXG5cdFx0ZXZlbnQgPSBldmVudFsgalF1ZXJ5LmV4cGFuZG8gXSA/XG5cdFx0XHRldmVudCA6XG5cdFx0XHRuZXcgalF1ZXJ5LkV2ZW50KCB0eXBlLCB0eXBlb2YgZXZlbnQgPT09IFwib2JqZWN0XCIgJiYgZXZlbnQgKTtcblxuXHRcdC8vIFRyaWdnZXIgYml0bWFzazogJiAxIGZvciBuYXRpdmUgaGFuZGxlcnM7ICYgMiBmb3IgalF1ZXJ5IChhbHdheXMgdHJ1ZSlcblx0XHRldmVudC5pc1RyaWdnZXIgPSBvbmx5SGFuZGxlcnMgPyAyIDogMztcblx0XHRldmVudC5uYW1lc3BhY2UgPSBuYW1lc3BhY2VzLmpvaW4oIFwiLlwiICk7XG5cdFx0ZXZlbnQucm5hbWVzcGFjZSA9IGV2ZW50Lm5hbWVzcGFjZSA/XG5cdFx0XHRuZXcgUmVnRXhwKCBcIihefFxcXFwuKVwiICsgbmFtZXNwYWNlcy5qb2luKCBcIlxcXFwuKD86LipcXFxcLnwpXCIgKSArIFwiKFxcXFwufCQpXCIgKSA6XG5cdFx0XHRudWxsO1xuXG5cdFx0Ly8gQ2xlYW4gdXAgdGhlIGV2ZW50IGluIGNhc2UgaXQgaXMgYmVpbmcgcmV1c2VkXG5cdFx0ZXZlbnQucmVzdWx0ID0gdW5kZWZpbmVkO1xuXHRcdGlmICggIWV2ZW50LnRhcmdldCApIHtcblx0XHRcdGV2ZW50LnRhcmdldCA9IGVsZW07XG5cdFx0fVxuXG5cdFx0Ly8gQ2xvbmUgYW55IGluY29taW5nIGRhdGEgYW5kIHByZXBlbmQgdGhlIGV2ZW50LCBjcmVhdGluZyB0aGUgaGFuZGxlciBhcmcgbGlzdFxuXHRcdGRhdGEgPSBkYXRhID09IG51bGwgP1xuXHRcdFx0WyBldmVudCBdIDpcblx0XHRcdGpRdWVyeS5tYWtlQXJyYXkoIGRhdGEsIFsgZXZlbnQgXSApO1xuXG5cdFx0Ly8gQWxsb3cgc3BlY2lhbCBldmVudHMgdG8gZHJhdyBvdXRzaWRlIHRoZSBsaW5lc1xuXHRcdHNwZWNpYWwgPSBqUXVlcnkuZXZlbnQuc3BlY2lhbFsgdHlwZSBdIHx8IHt9O1xuXHRcdGlmICggIW9ubHlIYW5kbGVycyAmJiBzcGVjaWFsLnRyaWdnZXIgJiYgc3BlY2lhbC50cmlnZ2VyLmFwcGx5KCBlbGVtLCBkYXRhICkgPT09IGZhbHNlICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIERldGVybWluZSBldmVudCBwcm9wYWdhdGlvbiBwYXRoIGluIGFkdmFuY2UsIHBlciBXM0MgZXZlbnRzIHNwZWMgKCM5OTUxKVxuXHRcdC8vIEJ1YmJsZSB1cCB0byBkb2N1bWVudCwgdGhlbiB0byB3aW5kb3c7IHdhdGNoIGZvciBhIGdsb2JhbCBvd25lckRvY3VtZW50IHZhciAoIzk3MjQpXG5cdFx0aWYgKCAhb25seUhhbmRsZXJzICYmICFzcGVjaWFsLm5vQnViYmxlICYmICFpc1dpbmRvdyggZWxlbSApICkge1xuXG5cdFx0XHRidWJibGVUeXBlID0gc3BlY2lhbC5kZWxlZ2F0ZVR5cGUgfHwgdHlwZTtcblx0XHRcdGlmICggIXJmb2N1c01vcnBoLnRlc3QoIGJ1YmJsZVR5cGUgKyB0eXBlICkgKSB7XG5cdFx0XHRcdGN1ciA9IGN1ci5wYXJlbnROb2RlO1xuXHRcdFx0fVxuXHRcdFx0Zm9yICggOyBjdXI7IGN1ciA9IGN1ci5wYXJlbnROb2RlICkge1xuXHRcdFx0XHRldmVudFBhdGgucHVzaCggY3VyICk7XG5cdFx0XHRcdHRtcCA9IGN1cjtcblx0XHRcdH1cblxuXHRcdFx0Ly8gT25seSBhZGQgd2luZG93IGlmIHdlIGdvdCB0byBkb2N1bWVudCAoZS5nLiwgbm90IHBsYWluIG9iaiBvciBkZXRhY2hlZCBET00pXG5cdFx0XHRpZiAoIHRtcCA9PT0gKCBlbGVtLm93bmVyRG9jdW1lbnQgfHwgZG9jdW1lbnQgKSApIHtcblx0XHRcdFx0ZXZlbnRQYXRoLnB1c2goIHRtcC5kZWZhdWx0VmlldyB8fCB0bXAucGFyZW50V2luZG93IHx8IHdpbmRvdyApO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIEZpcmUgaGFuZGxlcnMgb24gdGhlIGV2ZW50IHBhdGhcblx0XHRpID0gMDtcblx0XHR3aGlsZSAoICggY3VyID0gZXZlbnRQYXRoWyBpKysgXSApICYmICFldmVudC5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpICkge1xuXHRcdFx0bGFzdEVsZW1lbnQgPSBjdXI7XG5cdFx0XHRldmVudC50eXBlID0gaSA+IDEgP1xuXHRcdFx0XHRidWJibGVUeXBlIDpcblx0XHRcdFx0c3BlY2lhbC5iaW5kVHlwZSB8fCB0eXBlO1xuXG5cdFx0XHQvLyBqUXVlcnkgaGFuZGxlclxuXHRcdFx0aGFuZGxlID0gKCBkYXRhUHJpdi5nZXQoIGN1ciwgXCJldmVudHNcIiApIHx8IHt9IClbIGV2ZW50LnR5cGUgXSAmJlxuXHRcdFx0XHRkYXRhUHJpdi5nZXQoIGN1ciwgXCJoYW5kbGVcIiApO1xuXHRcdFx0aWYgKCBoYW5kbGUgKSB7XG5cdFx0XHRcdGhhbmRsZS5hcHBseSggY3VyLCBkYXRhICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIE5hdGl2ZSBoYW5kbGVyXG5cdFx0XHRoYW5kbGUgPSBvbnR5cGUgJiYgY3VyWyBvbnR5cGUgXTtcblx0XHRcdGlmICggaGFuZGxlICYmIGhhbmRsZS5hcHBseSAmJiBhY2NlcHREYXRhKCBjdXIgKSApIHtcblx0XHRcdFx0ZXZlbnQucmVzdWx0ID0gaGFuZGxlLmFwcGx5KCBjdXIsIGRhdGEgKTtcblx0XHRcdFx0aWYgKCBldmVudC5yZXN1bHQgPT09IGZhbHNlICkge1xuXHRcdFx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0ZXZlbnQudHlwZSA9IHR5cGU7XG5cblx0XHQvLyBJZiBub2JvZHkgcHJldmVudGVkIHRoZSBkZWZhdWx0IGFjdGlvbiwgZG8gaXQgbm93XG5cdFx0aWYgKCAhb25seUhhbmRsZXJzICYmICFldmVudC5pc0RlZmF1bHRQcmV2ZW50ZWQoKSApIHtcblxuXHRcdFx0aWYgKCAoICFzcGVjaWFsLl9kZWZhdWx0IHx8XG5cdFx0XHRcdHNwZWNpYWwuX2RlZmF1bHQuYXBwbHkoIGV2ZW50UGF0aC5wb3AoKSwgZGF0YSApID09PSBmYWxzZSApICYmXG5cdFx0XHRcdGFjY2VwdERhdGEoIGVsZW0gKSApIHtcblxuXHRcdFx0XHQvLyBDYWxsIGEgbmF0aXZlIERPTSBtZXRob2Qgb24gdGhlIHRhcmdldCB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgdGhlIGV2ZW50LlxuXHRcdFx0XHQvLyBEb24ndCBkbyBkZWZhdWx0IGFjdGlvbnMgb24gd2luZG93LCB0aGF0J3Mgd2hlcmUgZ2xvYmFsIHZhcmlhYmxlcyBiZSAoIzYxNzApXG5cdFx0XHRcdGlmICggb250eXBlICYmIGlzRnVuY3Rpb24oIGVsZW1bIHR5cGUgXSApICYmICFpc1dpbmRvdyggZWxlbSApICkge1xuXG5cdFx0XHRcdFx0Ly8gRG9uJ3QgcmUtdHJpZ2dlciBhbiBvbkZPTyBldmVudCB3aGVuIHdlIGNhbGwgaXRzIEZPTygpIG1ldGhvZFxuXHRcdFx0XHRcdHRtcCA9IGVsZW1bIG9udHlwZSBdO1xuXG5cdFx0XHRcdFx0aWYgKCB0bXAgKSB7XG5cdFx0XHRcdFx0XHRlbGVtWyBvbnR5cGUgXSA9IG51bGw7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ly8gUHJldmVudCByZS10cmlnZ2VyaW5nIG9mIHRoZSBzYW1lIGV2ZW50LCBzaW5jZSB3ZSBhbHJlYWR5IGJ1YmJsZWQgaXQgYWJvdmVcblx0XHRcdFx0XHRqUXVlcnkuZXZlbnQudHJpZ2dlcmVkID0gdHlwZTtcblxuXHRcdFx0XHRcdGlmICggZXZlbnQuaXNQcm9wYWdhdGlvblN0b3BwZWQoKSApIHtcblx0XHRcdFx0XHRcdGxhc3RFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoIHR5cGUsIHN0b3BQcm9wYWdhdGlvbkNhbGxiYWNrICk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0ZWxlbVsgdHlwZSBdKCk7XG5cblx0XHRcdFx0XHRpZiAoIGV2ZW50LmlzUHJvcGFnYXRpb25TdG9wcGVkKCkgKSB7XG5cdFx0XHRcdFx0XHRsYXN0RWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCB0eXBlLCBzdG9wUHJvcGFnYXRpb25DYWxsYmFjayApO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGpRdWVyeS5ldmVudC50cmlnZ2VyZWQgPSB1bmRlZmluZWQ7XG5cblx0XHRcdFx0XHRpZiAoIHRtcCApIHtcblx0XHRcdFx0XHRcdGVsZW1bIG9udHlwZSBdID0gdG1wO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBldmVudC5yZXN1bHQ7XG5cdH0sXG5cblx0Ly8gUGlnZ3liYWNrIG9uIGEgZG9ub3IgZXZlbnQgdG8gc2ltdWxhdGUgYSBkaWZmZXJlbnQgb25lXG5cdC8vIFVzZWQgb25seSBmb3IgYGZvY3VzKGluIHwgb3V0KWAgZXZlbnRzXG5cdHNpbXVsYXRlOiBmdW5jdGlvbiggdHlwZSwgZWxlbSwgZXZlbnQgKSB7XG5cdFx0dmFyIGUgPSBqUXVlcnkuZXh0ZW5kKFxuXHRcdFx0bmV3IGpRdWVyeS5FdmVudCgpLFxuXHRcdFx0ZXZlbnQsXG5cdFx0XHR7XG5cdFx0XHRcdHR5cGU6IHR5cGUsXG5cdFx0XHRcdGlzU2ltdWxhdGVkOiB0cnVlXG5cdFx0XHR9XG5cdFx0KTtcblxuXHRcdGpRdWVyeS5ldmVudC50cmlnZ2VyKCBlLCBudWxsLCBlbGVtICk7XG5cdH1cblxufSApO1xuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cblx0dHJpZ2dlcjogZnVuY3Rpb24oIHR5cGUsIGRhdGEgKSB7XG5cdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHRqUXVlcnkuZXZlbnQudHJpZ2dlciggdHlwZSwgZGF0YSwgdGhpcyApO1xuXHRcdH0gKTtcblx0fSxcblx0dHJpZ2dlckhhbmRsZXI6IGZ1bmN0aW9uKCB0eXBlLCBkYXRhICkge1xuXHRcdHZhciBlbGVtID0gdGhpc1sgMCBdO1xuXHRcdGlmICggZWxlbSApIHtcblx0XHRcdHJldHVybiBqUXVlcnkuZXZlbnQudHJpZ2dlciggdHlwZSwgZGF0YSwgZWxlbSwgdHJ1ZSApO1xuXHRcdH1cblx0fVxufSApO1xuXG5cbi8vIFN1cHBvcnQ6IEZpcmVmb3ggPD00NFxuLy8gRmlyZWZveCBkb2Vzbid0IGhhdmUgZm9jdXMoaW4gfCBvdXQpIGV2ZW50c1xuLy8gUmVsYXRlZCB0aWNrZXQgLSBodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnL3Nob3dfYnVnLmNnaT9pZD02ODc3ODdcbi8vXG4vLyBTdXBwb3J0OiBDaHJvbWUgPD00OCAtIDQ5LCBTYWZhcmkgPD05LjAgLSA5LjFcbi8vIGZvY3VzKGluIHwgb3V0KSBldmVudHMgZmlyZSBhZnRlciBmb2N1cyAmIGJsdXIgZXZlbnRzLFxuLy8gd2hpY2ggaXMgc3BlYyB2aW9sYXRpb24gLSBodHRwOi8vd3d3LnczLm9yZy9UUi9ET00tTGV2ZWwtMy1FdmVudHMvI2V2ZW50cy1mb2N1c2V2ZW50LWV2ZW50LW9yZGVyXG4vLyBSZWxhdGVkIHRpY2tldCAtIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTQ0OTg1N1xuaWYgKCAhc3VwcG9ydC5mb2N1c2luICkge1xuXHRqUXVlcnkuZWFjaCggeyBmb2N1czogXCJmb2N1c2luXCIsIGJsdXI6IFwiZm9jdXNvdXRcIiB9LCBmdW5jdGlvbiggb3JpZywgZml4ICkge1xuXG5cdFx0Ly8gQXR0YWNoIGEgc2luZ2xlIGNhcHR1cmluZyBoYW5kbGVyIG9uIHRoZSBkb2N1bWVudCB3aGlsZSBzb21lb25lIHdhbnRzIGZvY3VzaW4vZm9jdXNvdXRcblx0XHR2YXIgaGFuZGxlciA9IGZ1bmN0aW9uKCBldmVudCApIHtcblx0XHRcdGpRdWVyeS5ldmVudC5zaW11bGF0ZSggZml4LCBldmVudC50YXJnZXQsIGpRdWVyeS5ldmVudC5maXgoIGV2ZW50ICkgKTtcblx0XHR9O1xuXG5cdFx0alF1ZXJ5LmV2ZW50LnNwZWNpYWxbIGZpeCBdID0ge1xuXHRcdFx0c2V0dXA6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHR2YXIgZG9jID0gdGhpcy5vd25lckRvY3VtZW50IHx8IHRoaXMsXG5cdFx0XHRcdFx0YXR0YWNoZXMgPSBkYXRhUHJpdi5hY2Nlc3MoIGRvYywgZml4ICk7XG5cblx0XHRcdFx0aWYgKCAhYXR0YWNoZXMgKSB7XG5cdFx0XHRcdFx0ZG9jLmFkZEV2ZW50TGlzdGVuZXIoIG9yaWcsIGhhbmRsZXIsIHRydWUgKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRkYXRhUHJpdi5hY2Nlc3MoIGRvYywgZml4LCAoIGF0dGFjaGVzIHx8IDAgKSArIDEgKTtcblx0XHRcdH0sXG5cdFx0XHR0ZWFyZG93bjogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHZhciBkb2MgPSB0aGlzLm93bmVyRG9jdW1lbnQgfHwgdGhpcyxcblx0XHRcdFx0XHRhdHRhY2hlcyA9IGRhdGFQcml2LmFjY2VzcyggZG9jLCBmaXggKSAtIDE7XG5cblx0XHRcdFx0aWYgKCAhYXR0YWNoZXMgKSB7XG5cdFx0XHRcdFx0ZG9jLnJlbW92ZUV2ZW50TGlzdGVuZXIoIG9yaWcsIGhhbmRsZXIsIHRydWUgKTtcblx0XHRcdFx0XHRkYXRhUHJpdi5yZW1vdmUoIGRvYywgZml4ICk7XG5cblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRkYXRhUHJpdi5hY2Nlc3MoIGRvYywgZml4LCBhdHRhY2hlcyApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fTtcblx0fSApO1xufVxudmFyIGxvY2F0aW9uID0gd2luZG93LmxvY2F0aW9uO1xuXG52YXIgbm9uY2UgPSBEYXRlLm5vdygpO1xuXG52YXIgcnF1ZXJ5ID0gKCAvXFw/LyApO1xuXG5cblxuLy8gQ3Jvc3MtYnJvd3NlciB4bWwgcGFyc2luZ1xualF1ZXJ5LnBhcnNlWE1MID0gZnVuY3Rpb24oIGRhdGEgKSB7XG5cdHZhciB4bWw7XG5cdGlmICggIWRhdGEgfHwgdHlwZW9mIGRhdGEgIT09IFwic3RyaW5nXCIgKSB7XG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblxuXHQvLyBTdXBwb3J0OiBJRSA5IC0gMTEgb25seVxuXHQvLyBJRSB0aHJvd3Mgb24gcGFyc2VGcm9tU3RyaW5nIHdpdGggaW52YWxpZCBpbnB1dC5cblx0dHJ5IHtcblx0XHR4bWwgPSAoIG5ldyB3aW5kb3cuRE9NUGFyc2VyKCkgKS5wYXJzZUZyb21TdHJpbmcoIGRhdGEsIFwidGV4dC94bWxcIiApO1xuXHR9IGNhdGNoICggZSApIHtcblx0XHR4bWwgPSB1bmRlZmluZWQ7XG5cdH1cblxuXHRpZiAoICF4bWwgfHwgeG1sLmdldEVsZW1lbnRzQnlUYWdOYW1lKCBcInBhcnNlcmVycm9yXCIgKS5sZW5ndGggKSB7XG5cdFx0alF1ZXJ5LmVycm9yKCBcIkludmFsaWQgWE1MOiBcIiArIGRhdGEgKTtcblx0fVxuXHRyZXR1cm4geG1sO1xufTtcblxuXG52YXJcblx0cmJyYWNrZXQgPSAvXFxbXFxdJC8sXG5cdHJDUkxGID0gL1xccj9cXG4vZyxcblx0cnN1Ym1pdHRlclR5cGVzID0gL14oPzpzdWJtaXR8YnV0dG9ufGltYWdlfHJlc2V0fGZpbGUpJC9pLFxuXHRyc3VibWl0dGFibGUgPSAvXig/OmlucHV0fHNlbGVjdHx0ZXh0YXJlYXxrZXlnZW4pL2k7XG5cbmZ1bmN0aW9uIGJ1aWxkUGFyYW1zKCBwcmVmaXgsIG9iaiwgdHJhZGl0aW9uYWwsIGFkZCApIHtcblx0dmFyIG5hbWU7XG5cblx0aWYgKCBBcnJheS5pc0FycmF5KCBvYmogKSApIHtcblxuXHRcdC8vIFNlcmlhbGl6ZSBhcnJheSBpdGVtLlxuXHRcdGpRdWVyeS5lYWNoKCBvYmosIGZ1bmN0aW9uKCBpLCB2ICkge1xuXHRcdFx0aWYgKCB0cmFkaXRpb25hbCB8fCByYnJhY2tldC50ZXN0KCBwcmVmaXggKSApIHtcblxuXHRcdFx0XHQvLyBUcmVhdCBlYWNoIGFycmF5IGl0ZW0gYXMgYSBzY2FsYXIuXG5cdFx0XHRcdGFkZCggcHJlZml4LCB2ICk7XG5cblx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0Ly8gSXRlbSBpcyBub24tc2NhbGFyIChhcnJheSBvciBvYmplY3QpLCBlbmNvZGUgaXRzIG51bWVyaWMgaW5kZXguXG5cdFx0XHRcdGJ1aWxkUGFyYW1zKFxuXHRcdFx0XHRcdHByZWZpeCArIFwiW1wiICsgKCB0eXBlb2YgdiA9PT0gXCJvYmplY3RcIiAmJiB2ICE9IG51bGwgPyBpIDogXCJcIiApICsgXCJdXCIsXG5cdFx0XHRcdFx0dixcblx0XHRcdFx0XHR0cmFkaXRpb25hbCxcblx0XHRcdFx0XHRhZGRcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHR9ICk7XG5cblx0fSBlbHNlIGlmICggIXRyYWRpdGlvbmFsICYmIHRvVHlwZSggb2JqICkgPT09IFwib2JqZWN0XCIgKSB7XG5cblx0XHQvLyBTZXJpYWxpemUgb2JqZWN0IGl0ZW0uXG5cdFx0Zm9yICggbmFtZSBpbiBvYmogKSB7XG5cdFx0XHRidWlsZFBhcmFtcyggcHJlZml4ICsgXCJbXCIgKyBuYW1lICsgXCJdXCIsIG9ialsgbmFtZSBdLCB0cmFkaXRpb25hbCwgYWRkICk7XG5cdFx0fVxuXG5cdH0gZWxzZSB7XG5cblx0XHQvLyBTZXJpYWxpemUgc2NhbGFyIGl0ZW0uXG5cdFx0YWRkKCBwcmVmaXgsIG9iaiApO1xuXHR9XG59XG5cbi8vIFNlcmlhbGl6ZSBhbiBhcnJheSBvZiBmb3JtIGVsZW1lbnRzIG9yIGEgc2V0IG9mXG4vLyBrZXkvdmFsdWVzIGludG8gYSBxdWVyeSBzdHJpbmdcbmpRdWVyeS5wYXJhbSA9IGZ1bmN0aW9uKCBhLCB0cmFkaXRpb25hbCApIHtcblx0dmFyIHByZWZpeCxcblx0XHRzID0gW10sXG5cdFx0YWRkID0gZnVuY3Rpb24oIGtleSwgdmFsdWVPckZ1bmN0aW9uICkge1xuXG5cdFx0XHQvLyBJZiB2YWx1ZSBpcyBhIGZ1bmN0aW9uLCBpbnZva2UgaXQgYW5kIHVzZSBpdHMgcmV0dXJuIHZhbHVlXG5cdFx0XHR2YXIgdmFsdWUgPSBpc0Z1bmN0aW9uKCB2YWx1ZU9yRnVuY3Rpb24gKSA/XG5cdFx0XHRcdHZhbHVlT3JGdW5jdGlvbigpIDpcblx0XHRcdFx0dmFsdWVPckZ1bmN0aW9uO1xuXG5cdFx0XHRzWyBzLmxlbmd0aCBdID0gZW5jb2RlVVJJQ29tcG9uZW50KCBrZXkgKSArIFwiPVwiICtcblx0XHRcdFx0ZW5jb2RlVVJJQ29tcG9uZW50KCB2YWx1ZSA9PSBudWxsID8gXCJcIiA6IHZhbHVlICk7XG5cdFx0fTtcblxuXHQvLyBJZiBhbiBhcnJheSB3YXMgcGFzc2VkIGluLCBhc3N1bWUgdGhhdCBpdCBpcyBhbiBhcnJheSBvZiBmb3JtIGVsZW1lbnRzLlxuXHRpZiAoIEFycmF5LmlzQXJyYXkoIGEgKSB8fCAoIGEuanF1ZXJ5ICYmICFqUXVlcnkuaXNQbGFpbk9iamVjdCggYSApICkgKSB7XG5cblx0XHQvLyBTZXJpYWxpemUgdGhlIGZvcm0gZWxlbWVudHNcblx0XHRqUXVlcnkuZWFjaCggYSwgZnVuY3Rpb24oKSB7XG5cdFx0XHRhZGQoIHRoaXMubmFtZSwgdGhpcy52YWx1ZSApO1xuXHRcdH0gKTtcblxuXHR9IGVsc2Uge1xuXG5cdFx0Ly8gSWYgdHJhZGl0aW9uYWwsIGVuY29kZSB0aGUgXCJvbGRcIiB3YXkgKHRoZSB3YXkgMS4zLjIgb3Igb2xkZXJcblx0XHQvLyBkaWQgaXQpLCBvdGhlcndpc2UgZW5jb2RlIHBhcmFtcyByZWN1cnNpdmVseS5cblx0XHRmb3IgKCBwcmVmaXggaW4gYSApIHtcblx0XHRcdGJ1aWxkUGFyYW1zKCBwcmVmaXgsIGFbIHByZWZpeCBdLCB0cmFkaXRpb25hbCwgYWRkICk7XG5cdFx0fVxuXHR9XG5cblx0Ly8gUmV0dXJuIHRoZSByZXN1bHRpbmcgc2VyaWFsaXphdGlvblxuXHRyZXR1cm4gcy5qb2luKCBcIiZcIiApO1xufTtcblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXHRzZXJpYWxpemU6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiBqUXVlcnkucGFyYW0oIHRoaXMuc2VyaWFsaXplQXJyYXkoKSApO1xuXHR9LFxuXHRzZXJpYWxpemVBcnJheTogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHRoaXMubWFwKCBmdW5jdGlvbigpIHtcblxuXHRcdFx0Ly8gQ2FuIGFkZCBwcm9wSG9vayBmb3IgXCJlbGVtZW50c1wiIHRvIGZpbHRlciBvciBhZGQgZm9ybSBlbGVtZW50c1xuXHRcdFx0dmFyIGVsZW1lbnRzID0galF1ZXJ5LnByb3AoIHRoaXMsIFwiZWxlbWVudHNcIiApO1xuXHRcdFx0cmV0dXJuIGVsZW1lbnRzID8galF1ZXJ5Lm1ha2VBcnJheSggZWxlbWVudHMgKSA6IHRoaXM7XG5cdFx0fSApXG5cdFx0LmZpbHRlciggZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgdHlwZSA9IHRoaXMudHlwZTtcblxuXHRcdFx0Ly8gVXNlIC5pcyggXCI6ZGlzYWJsZWRcIiApIHNvIHRoYXQgZmllbGRzZXRbZGlzYWJsZWRdIHdvcmtzXG5cdFx0XHRyZXR1cm4gdGhpcy5uYW1lICYmICFqUXVlcnkoIHRoaXMgKS5pcyggXCI6ZGlzYWJsZWRcIiApICYmXG5cdFx0XHRcdHJzdWJtaXR0YWJsZS50ZXN0KCB0aGlzLm5vZGVOYW1lICkgJiYgIXJzdWJtaXR0ZXJUeXBlcy50ZXN0KCB0eXBlICkgJiZcblx0XHRcdFx0KCB0aGlzLmNoZWNrZWQgfHwgIXJjaGVja2FibGVUeXBlLnRlc3QoIHR5cGUgKSApO1xuXHRcdH0gKVxuXHRcdC5tYXAoIGZ1bmN0aW9uKCBpLCBlbGVtICkge1xuXHRcdFx0dmFyIHZhbCA9IGpRdWVyeSggdGhpcyApLnZhbCgpO1xuXG5cdFx0XHRpZiAoIHZhbCA9PSBudWxsICkge1xuXHRcdFx0XHRyZXR1cm4gbnVsbDtcblx0XHRcdH1cblxuXHRcdFx0aWYgKCBBcnJheS5pc0FycmF5KCB2YWwgKSApIHtcblx0XHRcdFx0cmV0dXJuIGpRdWVyeS5tYXAoIHZhbCwgZnVuY3Rpb24oIHZhbCApIHtcblx0XHRcdFx0XHRyZXR1cm4geyBuYW1lOiBlbGVtLm5hbWUsIHZhbHVlOiB2YWwucmVwbGFjZSggckNSTEYsIFwiXFxyXFxuXCIgKSB9O1xuXHRcdFx0XHR9ICk7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiB7IG5hbWU6IGVsZW0ubmFtZSwgdmFsdWU6IHZhbC5yZXBsYWNlKCByQ1JMRiwgXCJcXHJcXG5cIiApIH07XG5cdFx0fSApLmdldCgpO1xuXHR9XG59ICk7XG5cblxudmFyXG5cdHIyMCA9IC8lMjAvZyxcblx0cmhhc2ggPSAvIy4qJC8sXG5cdHJhbnRpQ2FjaGUgPSAvKFs/Jl0pXz1bXiZdKi8sXG5cdHJoZWFkZXJzID0gL14oLio/KTpbIFxcdF0qKFteXFxyXFxuXSopJC9tZyxcblxuXHQvLyAjNzY1MywgIzgxMjUsICM4MTUyOiBsb2NhbCBwcm90b2NvbCBkZXRlY3Rpb25cblx0cmxvY2FsUHJvdG9jb2wgPSAvXig/OmFib3V0fGFwcHxhcHAtc3RvcmFnZXwuKy1leHRlbnNpb258ZmlsZXxyZXN8d2lkZ2V0KTokLyxcblx0cm5vQ29udGVudCA9IC9eKD86R0VUfEhFQUQpJC8sXG5cdHJwcm90b2NvbCA9IC9eXFwvXFwvLyxcblxuXHQvKiBQcmVmaWx0ZXJzXG5cdCAqIDEpIFRoZXkgYXJlIHVzZWZ1bCB0byBpbnRyb2R1Y2UgY3VzdG9tIGRhdGFUeXBlcyAoc2VlIGFqYXgvanNvbnAuanMgZm9yIGFuIGV4YW1wbGUpXG5cdCAqIDIpIFRoZXNlIGFyZSBjYWxsZWQ6XG5cdCAqICAgIC0gQkVGT1JFIGFza2luZyBmb3IgYSB0cmFuc3BvcnRcblx0ICogICAgLSBBRlRFUiBwYXJhbSBzZXJpYWxpemF0aW9uIChzLmRhdGEgaXMgYSBzdHJpbmcgaWYgcy5wcm9jZXNzRGF0YSBpcyB0cnVlKVxuXHQgKiAzKSBrZXkgaXMgdGhlIGRhdGFUeXBlXG5cdCAqIDQpIHRoZSBjYXRjaGFsbCBzeW1ib2wgXCIqXCIgY2FuIGJlIHVzZWRcblx0ICogNSkgZXhlY3V0aW9uIHdpbGwgc3RhcnQgd2l0aCB0cmFuc3BvcnQgZGF0YVR5cGUgYW5kIFRIRU4gY29udGludWUgZG93biB0byBcIipcIiBpZiBuZWVkZWRcblx0ICovXG5cdHByZWZpbHRlcnMgPSB7fSxcblxuXHQvKiBUcmFuc3BvcnRzIGJpbmRpbmdzXG5cdCAqIDEpIGtleSBpcyB0aGUgZGF0YVR5cGVcblx0ICogMikgdGhlIGNhdGNoYWxsIHN5bWJvbCBcIipcIiBjYW4gYmUgdXNlZFxuXHQgKiAzKSBzZWxlY3Rpb24gd2lsbCBzdGFydCB3aXRoIHRyYW5zcG9ydCBkYXRhVHlwZSBhbmQgVEhFTiBnbyB0byBcIipcIiBpZiBuZWVkZWRcblx0ICovXG5cdHRyYW5zcG9ydHMgPSB7fSxcblxuXHQvLyBBdm9pZCBjb21tZW50LXByb2xvZyBjaGFyIHNlcXVlbmNlICgjMTAwOTgpOyBtdXN0IGFwcGVhc2UgbGludCBhbmQgZXZhZGUgY29tcHJlc3Npb25cblx0YWxsVHlwZXMgPSBcIiovXCIuY29uY2F0KCBcIipcIiApLFxuXG5cdC8vIEFuY2hvciB0YWcgZm9yIHBhcnNpbmcgdGhlIGRvY3VtZW50IG9yaWdpblxuXHRvcmlnaW5BbmNob3IgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcImFcIiApO1xuXHRvcmlnaW5BbmNob3IuaHJlZiA9IGxvY2F0aW9uLmhyZWY7XG5cbi8vIEJhc2UgXCJjb25zdHJ1Y3RvclwiIGZvciBqUXVlcnkuYWpheFByZWZpbHRlciBhbmQgalF1ZXJ5LmFqYXhUcmFuc3BvcnRcbmZ1bmN0aW9uIGFkZFRvUHJlZmlsdGVyc09yVHJhbnNwb3J0cyggc3RydWN0dXJlICkge1xuXG5cdC8vIGRhdGFUeXBlRXhwcmVzc2lvbiBpcyBvcHRpb25hbCBhbmQgZGVmYXVsdHMgdG8gXCIqXCJcblx0cmV0dXJuIGZ1bmN0aW9uKCBkYXRhVHlwZUV4cHJlc3Npb24sIGZ1bmMgKSB7XG5cblx0XHRpZiAoIHR5cGVvZiBkYXRhVHlwZUV4cHJlc3Npb24gIT09IFwic3RyaW5nXCIgKSB7XG5cdFx0XHRmdW5jID0gZGF0YVR5cGVFeHByZXNzaW9uO1xuXHRcdFx0ZGF0YVR5cGVFeHByZXNzaW9uID0gXCIqXCI7XG5cdFx0fVxuXG5cdFx0dmFyIGRhdGFUeXBlLFxuXHRcdFx0aSA9IDAsXG5cdFx0XHRkYXRhVHlwZXMgPSBkYXRhVHlwZUV4cHJlc3Npb24udG9Mb3dlckNhc2UoKS5tYXRjaCggcm5vdGh0bWx3aGl0ZSApIHx8IFtdO1xuXG5cdFx0aWYgKCBpc0Z1bmN0aW9uKCBmdW5jICkgKSB7XG5cblx0XHRcdC8vIEZvciBlYWNoIGRhdGFUeXBlIGluIHRoZSBkYXRhVHlwZUV4cHJlc3Npb25cblx0XHRcdHdoaWxlICggKCBkYXRhVHlwZSA9IGRhdGFUeXBlc1sgaSsrIF0gKSApIHtcblxuXHRcdFx0XHQvLyBQcmVwZW5kIGlmIHJlcXVlc3RlZFxuXHRcdFx0XHRpZiAoIGRhdGFUeXBlWyAwIF0gPT09IFwiK1wiICkge1xuXHRcdFx0XHRcdGRhdGFUeXBlID0gZGF0YVR5cGUuc2xpY2UoIDEgKSB8fCBcIipcIjtcblx0XHRcdFx0XHQoIHN0cnVjdHVyZVsgZGF0YVR5cGUgXSA9IHN0cnVjdHVyZVsgZGF0YVR5cGUgXSB8fCBbXSApLnVuc2hpZnQoIGZ1bmMgKTtcblxuXHRcdFx0XHQvLyBPdGhlcndpc2UgYXBwZW5kXG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0KCBzdHJ1Y3R1cmVbIGRhdGFUeXBlIF0gPSBzdHJ1Y3R1cmVbIGRhdGFUeXBlIF0gfHwgW10gKS5wdXNoKCBmdW5jICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH07XG59XG5cbi8vIEJhc2UgaW5zcGVjdGlvbiBmdW5jdGlvbiBmb3IgcHJlZmlsdGVycyBhbmQgdHJhbnNwb3J0c1xuZnVuY3Rpb24gaW5zcGVjdFByZWZpbHRlcnNPclRyYW5zcG9ydHMoIHN0cnVjdHVyZSwgb3B0aW9ucywgb3JpZ2luYWxPcHRpb25zLCBqcVhIUiApIHtcblxuXHR2YXIgaW5zcGVjdGVkID0ge30sXG5cdFx0c2Vla2luZ1RyYW5zcG9ydCA9ICggc3RydWN0dXJlID09PSB0cmFuc3BvcnRzICk7XG5cblx0ZnVuY3Rpb24gaW5zcGVjdCggZGF0YVR5cGUgKSB7XG5cdFx0dmFyIHNlbGVjdGVkO1xuXHRcdGluc3BlY3RlZFsgZGF0YVR5cGUgXSA9IHRydWU7XG5cdFx0alF1ZXJ5LmVhY2goIHN0cnVjdHVyZVsgZGF0YVR5cGUgXSB8fCBbXSwgZnVuY3Rpb24oIF8sIHByZWZpbHRlck9yRmFjdG9yeSApIHtcblx0XHRcdHZhciBkYXRhVHlwZU9yVHJhbnNwb3J0ID0gcHJlZmlsdGVyT3JGYWN0b3J5KCBvcHRpb25zLCBvcmlnaW5hbE9wdGlvbnMsIGpxWEhSICk7XG5cdFx0XHRpZiAoIHR5cGVvZiBkYXRhVHlwZU9yVHJhbnNwb3J0ID09PSBcInN0cmluZ1wiICYmXG5cdFx0XHRcdCFzZWVraW5nVHJhbnNwb3J0ICYmICFpbnNwZWN0ZWRbIGRhdGFUeXBlT3JUcmFuc3BvcnQgXSApIHtcblxuXHRcdFx0XHRvcHRpb25zLmRhdGFUeXBlcy51bnNoaWZ0KCBkYXRhVHlwZU9yVHJhbnNwb3J0ICk7XG5cdFx0XHRcdGluc3BlY3QoIGRhdGFUeXBlT3JUcmFuc3BvcnQgKTtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fSBlbHNlIGlmICggc2Vla2luZ1RyYW5zcG9ydCApIHtcblx0XHRcdFx0cmV0dXJuICEoIHNlbGVjdGVkID0gZGF0YVR5cGVPclRyYW5zcG9ydCApO1xuXHRcdFx0fVxuXHRcdH0gKTtcblx0XHRyZXR1cm4gc2VsZWN0ZWQ7XG5cdH1cblxuXHRyZXR1cm4gaW5zcGVjdCggb3B0aW9ucy5kYXRhVHlwZXNbIDAgXSApIHx8ICFpbnNwZWN0ZWRbIFwiKlwiIF0gJiYgaW5zcGVjdCggXCIqXCIgKTtcbn1cblxuLy8gQSBzcGVjaWFsIGV4dGVuZCBmb3IgYWpheCBvcHRpb25zXG4vLyB0aGF0IHRha2VzIFwiZmxhdFwiIG9wdGlvbnMgKG5vdCB0byBiZSBkZWVwIGV4dGVuZGVkKVxuLy8gRml4ZXMgIzk4ODdcbmZ1bmN0aW9uIGFqYXhFeHRlbmQoIHRhcmdldCwgc3JjICkge1xuXHR2YXIga2V5LCBkZWVwLFxuXHRcdGZsYXRPcHRpb25zID0galF1ZXJ5LmFqYXhTZXR0aW5ncy5mbGF0T3B0aW9ucyB8fCB7fTtcblxuXHRmb3IgKCBrZXkgaW4gc3JjICkge1xuXHRcdGlmICggc3JjWyBrZXkgXSAhPT0gdW5kZWZpbmVkICkge1xuXHRcdFx0KCBmbGF0T3B0aW9uc1sga2V5IF0gPyB0YXJnZXQgOiAoIGRlZXAgfHwgKCBkZWVwID0ge30gKSApIClbIGtleSBdID0gc3JjWyBrZXkgXTtcblx0XHR9XG5cdH1cblx0aWYgKCBkZWVwICkge1xuXHRcdGpRdWVyeS5leHRlbmQoIHRydWUsIHRhcmdldCwgZGVlcCApO1xuXHR9XG5cblx0cmV0dXJuIHRhcmdldDtcbn1cblxuLyogSGFuZGxlcyByZXNwb25zZXMgdG8gYW4gYWpheCByZXF1ZXN0OlxuICogLSBmaW5kcyB0aGUgcmlnaHQgZGF0YVR5cGUgKG1lZGlhdGVzIGJldHdlZW4gY29udGVudC10eXBlIGFuZCBleHBlY3RlZCBkYXRhVHlwZSlcbiAqIC0gcmV0dXJucyB0aGUgY29ycmVzcG9uZGluZyByZXNwb25zZVxuICovXG5mdW5jdGlvbiBhamF4SGFuZGxlUmVzcG9uc2VzKCBzLCBqcVhIUiwgcmVzcG9uc2VzICkge1xuXG5cdHZhciBjdCwgdHlwZSwgZmluYWxEYXRhVHlwZSwgZmlyc3REYXRhVHlwZSxcblx0XHRjb250ZW50cyA9IHMuY29udGVudHMsXG5cdFx0ZGF0YVR5cGVzID0gcy5kYXRhVHlwZXM7XG5cblx0Ly8gUmVtb3ZlIGF1dG8gZGF0YVR5cGUgYW5kIGdldCBjb250ZW50LXR5cGUgaW4gdGhlIHByb2Nlc3Ncblx0d2hpbGUgKCBkYXRhVHlwZXNbIDAgXSA9PT0gXCIqXCIgKSB7XG5cdFx0ZGF0YVR5cGVzLnNoaWZ0KCk7XG5cdFx0aWYgKCBjdCA9PT0gdW5kZWZpbmVkICkge1xuXHRcdFx0Y3QgPSBzLm1pbWVUeXBlIHx8IGpxWEhSLmdldFJlc3BvbnNlSGVhZGVyKCBcIkNvbnRlbnQtVHlwZVwiICk7XG5cdFx0fVxuXHR9XG5cblx0Ly8gQ2hlY2sgaWYgd2UncmUgZGVhbGluZyB3aXRoIGEga25vd24gY29udGVudC10eXBlXG5cdGlmICggY3QgKSB7XG5cdFx0Zm9yICggdHlwZSBpbiBjb250ZW50cyApIHtcblx0XHRcdGlmICggY29udGVudHNbIHR5cGUgXSAmJiBjb250ZW50c1sgdHlwZSBdLnRlc3QoIGN0ICkgKSB7XG5cdFx0XHRcdGRhdGFUeXBlcy51bnNoaWZ0KCB0eXBlICk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8vIENoZWNrIHRvIHNlZSBpZiB3ZSBoYXZlIGEgcmVzcG9uc2UgZm9yIHRoZSBleHBlY3RlZCBkYXRhVHlwZVxuXHRpZiAoIGRhdGFUeXBlc1sgMCBdIGluIHJlc3BvbnNlcyApIHtcblx0XHRmaW5hbERhdGFUeXBlID0gZGF0YVR5cGVzWyAwIF07XG5cdH0gZWxzZSB7XG5cblx0XHQvLyBUcnkgY29udmVydGlibGUgZGF0YVR5cGVzXG5cdFx0Zm9yICggdHlwZSBpbiByZXNwb25zZXMgKSB7XG5cdFx0XHRpZiAoICFkYXRhVHlwZXNbIDAgXSB8fCBzLmNvbnZlcnRlcnNbIHR5cGUgKyBcIiBcIiArIGRhdGFUeXBlc1sgMCBdIF0gKSB7XG5cdFx0XHRcdGZpbmFsRGF0YVR5cGUgPSB0eXBlO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHRcdGlmICggIWZpcnN0RGF0YVR5cGUgKSB7XG5cdFx0XHRcdGZpcnN0RGF0YVR5cGUgPSB0eXBlO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIE9yIGp1c3QgdXNlIGZpcnN0IG9uZVxuXHRcdGZpbmFsRGF0YVR5cGUgPSBmaW5hbERhdGFUeXBlIHx8IGZpcnN0RGF0YVR5cGU7XG5cdH1cblxuXHQvLyBJZiB3ZSBmb3VuZCBhIGRhdGFUeXBlXG5cdC8vIFdlIGFkZCB0aGUgZGF0YVR5cGUgdG8gdGhlIGxpc3QgaWYgbmVlZGVkXG5cdC8vIGFuZCByZXR1cm4gdGhlIGNvcnJlc3BvbmRpbmcgcmVzcG9uc2Vcblx0aWYgKCBmaW5hbERhdGFUeXBlICkge1xuXHRcdGlmICggZmluYWxEYXRhVHlwZSAhPT0gZGF0YVR5cGVzWyAwIF0gKSB7XG5cdFx0XHRkYXRhVHlwZXMudW5zaGlmdCggZmluYWxEYXRhVHlwZSApO1xuXHRcdH1cblx0XHRyZXR1cm4gcmVzcG9uc2VzWyBmaW5hbERhdGFUeXBlIF07XG5cdH1cbn1cblxuLyogQ2hhaW4gY29udmVyc2lvbnMgZ2l2ZW4gdGhlIHJlcXVlc3QgYW5kIHRoZSBvcmlnaW5hbCByZXNwb25zZVxuICogQWxzbyBzZXRzIHRoZSByZXNwb25zZVhYWCBmaWVsZHMgb24gdGhlIGpxWEhSIGluc3RhbmNlXG4gKi9cbmZ1bmN0aW9uIGFqYXhDb252ZXJ0KCBzLCByZXNwb25zZSwganFYSFIsIGlzU3VjY2VzcyApIHtcblx0dmFyIGNvbnYyLCBjdXJyZW50LCBjb252LCB0bXAsIHByZXYsXG5cdFx0Y29udmVydGVycyA9IHt9LFxuXG5cdFx0Ly8gV29yayB3aXRoIGEgY29weSBvZiBkYXRhVHlwZXMgaW4gY2FzZSB3ZSBuZWVkIHRvIG1vZGlmeSBpdCBmb3IgY29udmVyc2lvblxuXHRcdGRhdGFUeXBlcyA9IHMuZGF0YVR5cGVzLnNsaWNlKCk7XG5cblx0Ly8gQ3JlYXRlIGNvbnZlcnRlcnMgbWFwIHdpdGggbG93ZXJjYXNlZCBrZXlzXG5cdGlmICggZGF0YVR5cGVzWyAxIF0gKSB7XG5cdFx0Zm9yICggY29udiBpbiBzLmNvbnZlcnRlcnMgKSB7XG5cdFx0XHRjb252ZXJ0ZXJzWyBjb252LnRvTG93ZXJDYXNlKCkgXSA9IHMuY29udmVydGVyc1sgY29udiBdO1xuXHRcdH1cblx0fVxuXG5cdGN1cnJlbnQgPSBkYXRhVHlwZXMuc2hpZnQoKTtcblxuXHQvLyBDb252ZXJ0IHRvIGVhY2ggc2VxdWVudGlhbCBkYXRhVHlwZVxuXHR3aGlsZSAoIGN1cnJlbnQgKSB7XG5cblx0XHRpZiAoIHMucmVzcG9uc2VGaWVsZHNbIGN1cnJlbnQgXSApIHtcblx0XHRcdGpxWEhSWyBzLnJlc3BvbnNlRmllbGRzWyBjdXJyZW50IF0gXSA9IHJlc3BvbnNlO1xuXHRcdH1cblxuXHRcdC8vIEFwcGx5IHRoZSBkYXRhRmlsdGVyIGlmIHByb3ZpZGVkXG5cdFx0aWYgKCAhcHJldiAmJiBpc1N1Y2Nlc3MgJiYgcy5kYXRhRmlsdGVyICkge1xuXHRcdFx0cmVzcG9uc2UgPSBzLmRhdGFGaWx0ZXIoIHJlc3BvbnNlLCBzLmRhdGFUeXBlICk7XG5cdFx0fVxuXG5cdFx0cHJldiA9IGN1cnJlbnQ7XG5cdFx0Y3VycmVudCA9IGRhdGFUeXBlcy5zaGlmdCgpO1xuXG5cdFx0aWYgKCBjdXJyZW50ICkge1xuXG5cdFx0XHQvLyBUaGVyZSdzIG9ubHkgd29yayB0byBkbyBpZiBjdXJyZW50IGRhdGFUeXBlIGlzIG5vbi1hdXRvXG5cdFx0XHRpZiAoIGN1cnJlbnQgPT09IFwiKlwiICkge1xuXG5cdFx0XHRcdGN1cnJlbnQgPSBwcmV2O1xuXG5cdFx0XHQvLyBDb252ZXJ0IHJlc3BvbnNlIGlmIHByZXYgZGF0YVR5cGUgaXMgbm9uLWF1dG8gYW5kIGRpZmZlcnMgZnJvbSBjdXJyZW50XG5cdFx0XHR9IGVsc2UgaWYgKCBwcmV2ICE9PSBcIipcIiAmJiBwcmV2ICE9PSBjdXJyZW50ICkge1xuXG5cdFx0XHRcdC8vIFNlZWsgYSBkaXJlY3QgY29udmVydGVyXG5cdFx0XHRcdGNvbnYgPSBjb252ZXJ0ZXJzWyBwcmV2ICsgXCIgXCIgKyBjdXJyZW50IF0gfHwgY29udmVydGVyc1sgXCIqIFwiICsgY3VycmVudCBdO1xuXG5cdFx0XHRcdC8vIElmIG5vbmUgZm91bmQsIHNlZWsgYSBwYWlyXG5cdFx0XHRcdGlmICggIWNvbnYgKSB7XG5cdFx0XHRcdFx0Zm9yICggY29udjIgaW4gY29udmVydGVycyApIHtcblxuXHRcdFx0XHRcdFx0Ly8gSWYgY29udjIgb3V0cHV0cyBjdXJyZW50XG5cdFx0XHRcdFx0XHR0bXAgPSBjb252Mi5zcGxpdCggXCIgXCIgKTtcblx0XHRcdFx0XHRcdGlmICggdG1wWyAxIF0gPT09IGN1cnJlbnQgKSB7XG5cblx0XHRcdFx0XHRcdFx0Ly8gSWYgcHJldiBjYW4gYmUgY29udmVydGVkIHRvIGFjY2VwdGVkIGlucHV0XG5cdFx0XHRcdFx0XHRcdGNvbnYgPSBjb252ZXJ0ZXJzWyBwcmV2ICsgXCIgXCIgKyB0bXBbIDAgXSBdIHx8XG5cdFx0XHRcdFx0XHRcdFx0Y29udmVydGVyc1sgXCIqIFwiICsgdG1wWyAwIF0gXTtcblx0XHRcdFx0XHRcdFx0aWYgKCBjb252ICkge1xuXG5cdFx0XHRcdFx0XHRcdFx0Ly8gQ29uZGVuc2UgZXF1aXZhbGVuY2UgY29udmVydGVyc1xuXHRcdFx0XHRcdFx0XHRcdGlmICggY29udiA9PT0gdHJ1ZSApIHtcblx0XHRcdFx0XHRcdFx0XHRcdGNvbnYgPSBjb252ZXJ0ZXJzWyBjb252MiBdO1xuXG5cdFx0XHRcdFx0XHRcdFx0Ly8gT3RoZXJ3aXNlLCBpbnNlcnQgdGhlIGludGVybWVkaWF0ZSBkYXRhVHlwZVxuXHRcdFx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoIGNvbnZlcnRlcnNbIGNvbnYyIF0gIT09IHRydWUgKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRjdXJyZW50ID0gdG1wWyAwIF07XG5cdFx0XHRcdFx0XHRcdFx0XHRkYXRhVHlwZXMudW5zaGlmdCggdG1wWyAxIF0gKTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBBcHBseSBjb252ZXJ0ZXIgKGlmIG5vdCBhbiBlcXVpdmFsZW5jZSlcblx0XHRcdFx0aWYgKCBjb252ICE9PSB0cnVlICkge1xuXG5cdFx0XHRcdFx0Ly8gVW5sZXNzIGVycm9ycyBhcmUgYWxsb3dlZCB0byBidWJibGUsIGNhdGNoIGFuZCByZXR1cm4gdGhlbVxuXHRcdFx0XHRcdGlmICggY29udiAmJiBzLnRocm93cyApIHtcblx0XHRcdFx0XHRcdHJlc3BvbnNlID0gY29udiggcmVzcG9uc2UgKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRcdFx0cmVzcG9uc2UgPSBjb252KCByZXNwb25zZSApO1xuXHRcdFx0XHRcdFx0fSBjYXRjaCAoIGUgKSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0XHRcdFx0c3RhdGU6IFwicGFyc2VyZXJyb3JcIixcblx0XHRcdFx0XHRcdFx0XHRlcnJvcjogY29udiA/IGUgOiBcIk5vIGNvbnZlcnNpb24gZnJvbSBcIiArIHByZXYgKyBcIiB0byBcIiArIGN1cnJlbnRcblx0XHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4geyBzdGF0ZTogXCJzdWNjZXNzXCIsIGRhdGE6IHJlc3BvbnNlIH07XG59XG5cbmpRdWVyeS5leHRlbmQoIHtcblxuXHQvLyBDb3VudGVyIGZvciBob2xkaW5nIHRoZSBudW1iZXIgb2YgYWN0aXZlIHF1ZXJpZXNcblx0YWN0aXZlOiAwLFxuXG5cdC8vIExhc3QtTW9kaWZpZWQgaGVhZGVyIGNhY2hlIGZvciBuZXh0IHJlcXVlc3Rcblx0bGFzdE1vZGlmaWVkOiB7fSxcblx0ZXRhZzoge30sXG5cblx0YWpheFNldHRpbmdzOiB7XG5cdFx0dXJsOiBsb2NhdGlvbi5ocmVmLFxuXHRcdHR5cGU6IFwiR0VUXCIsXG5cdFx0aXNMb2NhbDogcmxvY2FsUHJvdG9jb2wudGVzdCggbG9jYXRpb24ucHJvdG9jb2wgKSxcblx0XHRnbG9iYWw6IHRydWUsXG5cdFx0cHJvY2Vzc0RhdGE6IHRydWUsXG5cdFx0YXN5bmM6IHRydWUsXG5cdFx0Y29udGVudFR5cGU6IFwiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkOyBjaGFyc2V0PVVURi04XCIsXG5cblx0XHQvKlxuXHRcdHRpbWVvdXQ6IDAsXG5cdFx0ZGF0YTogbnVsbCxcblx0XHRkYXRhVHlwZTogbnVsbCxcblx0XHR1c2VybmFtZTogbnVsbCxcblx0XHRwYXNzd29yZDogbnVsbCxcblx0XHRjYWNoZTogbnVsbCxcblx0XHR0aHJvd3M6IGZhbHNlLFxuXHRcdHRyYWRpdGlvbmFsOiBmYWxzZSxcblx0XHRoZWFkZXJzOiB7fSxcblx0XHQqL1xuXG5cdFx0YWNjZXB0czoge1xuXHRcdFx0XCIqXCI6IGFsbFR5cGVzLFxuXHRcdFx0dGV4dDogXCJ0ZXh0L3BsYWluXCIsXG5cdFx0XHRodG1sOiBcInRleHQvaHRtbFwiLFxuXHRcdFx0eG1sOiBcImFwcGxpY2F0aW9uL3htbCwgdGV4dC94bWxcIixcblx0XHRcdGpzb246IFwiYXBwbGljYXRpb24vanNvbiwgdGV4dC9qYXZhc2NyaXB0XCJcblx0XHR9LFxuXG5cdFx0Y29udGVudHM6IHtcblx0XHRcdHhtbDogL1xcYnhtbFxcYi8sXG5cdFx0XHRodG1sOiAvXFxiaHRtbC8sXG5cdFx0XHRqc29uOiAvXFxianNvblxcYi9cblx0XHR9LFxuXG5cdFx0cmVzcG9uc2VGaWVsZHM6IHtcblx0XHRcdHhtbDogXCJyZXNwb25zZVhNTFwiLFxuXHRcdFx0dGV4dDogXCJyZXNwb25zZVRleHRcIixcblx0XHRcdGpzb246IFwicmVzcG9uc2VKU09OXCJcblx0XHR9LFxuXG5cdFx0Ly8gRGF0YSBjb252ZXJ0ZXJzXG5cdFx0Ly8gS2V5cyBzZXBhcmF0ZSBzb3VyY2UgKG9yIGNhdGNoYWxsIFwiKlwiKSBhbmQgZGVzdGluYXRpb24gdHlwZXMgd2l0aCBhIHNpbmdsZSBzcGFjZVxuXHRcdGNvbnZlcnRlcnM6IHtcblxuXHRcdFx0Ly8gQ29udmVydCBhbnl0aGluZyB0byB0ZXh0XG5cdFx0XHRcIiogdGV4dFwiOiBTdHJpbmcsXG5cblx0XHRcdC8vIFRleHQgdG8gaHRtbCAodHJ1ZSA9IG5vIHRyYW5zZm9ybWF0aW9uKVxuXHRcdFx0XCJ0ZXh0IGh0bWxcIjogdHJ1ZSxcblxuXHRcdFx0Ly8gRXZhbHVhdGUgdGV4dCBhcyBhIGpzb24gZXhwcmVzc2lvblxuXHRcdFx0XCJ0ZXh0IGpzb25cIjogSlNPTi5wYXJzZSxcblxuXHRcdFx0Ly8gUGFyc2UgdGV4dCBhcyB4bWxcblx0XHRcdFwidGV4dCB4bWxcIjogalF1ZXJ5LnBhcnNlWE1MXG5cdFx0fSxcblxuXHRcdC8vIEZvciBvcHRpb25zIHRoYXQgc2hvdWxkbid0IGJlIGRlZXAgZXh0ZW5kZWQ6XG5cdFx0Ly8geW91IGNhbiBhZGQgeW91ciBvd24gY3VzdG9tIG9wdGlvbnMgaGVyZSBpZlxuXHRcdC8vIGFuZCB3aGVuIHlvdSBjcmVhdGUgb25lIHRoYXQgc2hvdWxkbid0IGJlXG5cdFx0Ly8gZGVlcCBleHRlbmRlZCAoc2VlIGFqYXhFeHRlbmQpXG5cdFx0ZmxhdE9wdGlvbnM6IHtcblx0XHRcdHVybDogdHJ1ZSxcblx0XHRcdGNvbnRleHQ6IHRydWVcblx0XHR9XG5cdH0sXG5cblx0Ly8gQ3JlYXRlcyBhIGZ1bGwgZmxlZGdlZCBzZXR0aW5ncyBvYmplY3QgaW50byB0YXJnZXRcblx0Ly8gd2l0aCBib3RoIGFqYXhTZXR0aW5ncyBhbmQgc2V0dGluZ3MgZmllbGRzLlxuXHQvLyBJZiB0YXJnZXQgaXMgb21pdHRlZCwgd3JpdGVzIGludG8gYWpheFNldHRpbmdzLlxuXHRhamF4U2V0dXA6IGZ1bmN0aW9uKCB0YXJnZXQsIHNldHRpbmdzICkge1xuXHRcdHJldHVybiBzZXR0aW5ncyA/XG5cblx0XHRcdC8vIEJ1aWxkaW5nIGEgc2V0dGluZ3Mgb2JqZWN0XG5cdFx0XHRhamF4RXh0ZW5kKCBhamF4RXh0ZW5kKCB0YXJnZXQsIGpRdWVyeS5hamF4U2V0dGluZ3MgKSwgc2V0dGluZ3MgKSA6XG5cblx0XHRcdC8vIEV4dGVuZGluZyBhamF4U2V0dGluZ3Ncblx0XHRcdGFqYXhFeHRlbmQoIGpRdWVyeS5hamF4U2V0dGluZ3MsIHRhcmdldCApO1xuXHR9LFxuXG5cdGFqYXhQcmVmaWx0ZXI6IGFkZFRvUHJlZmlsdGVyc09yVHJhbnNwb3J0cyggcHJlZmlsdGVycyApLFxuXHRhamF4VHJhbnNwb3J0OiBhZGRUb1ByZWZpbHRlcnNPclRyYW5zcG9ydHMoIHRyYW5zcG9ydHMgKSxcblxuXHQvLyBNYWluIG1ldGhvZFxuXHRhamF4OiBmdW5jdGlvbiggdXJsLCBvcHRpb25zICkge1xuXG5cdFx0Ly8gSWYgdXJsIGlzIGFuIG9iamVjdCwgc2ltdWxhdGUgcHJlLTEuNSBzaWduYXR1cmVcblx0XHRpZiAoIHR5cGVvZiB1cmwgPT09IFwib2JqZWN0XCIgKSB7XG5cdFx0XHRvcHRpb25zID0gdXJsO1xuXHRcdFx0dXJsID0gdW5kZWZpbmVkO1xuXHRcdH1cblxuXHRcdC8vIEZvcmNlIG9wdGlvbnMgdG8gYmUgYW4gb2JqZWN0XG5cdFx0b3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cblx0XHR2YXIgdHJhbnNwb3J0LFxuXG5cdFx0XHQvLyBVUkwgd2l0aG91dCBhbnRpLWNhY2hlIHBhcmFtXG5cdFx0XHRjYWNoZVVSTCxcblxuXHRcdFx0Ly8gUmVzcG9uc2UgaGVhZGVyc1xuXHRcdFx0cmVzcG9uc2VIZWFkZXJzU3RyaW5nLFxuXHRcdFx0cmVzcG9uc2VIZWFkZXJzLFxuXG5cdFx0XHQvLyB0aW1lb3V0IGhhbmRsZVxuXHRcdFx0dGltZW91dFRpbWVyLFxuXG5cdFx0XHQvLyBVcmwgY2xlYW51cCB2YXJcblx0XHRcdHVybEFuY2hvcixcblxuXHRcdFx0Ly8gUmVxdWVzdCBzdGF0ZSAoYmVjb21lcyBmYWxzZSB1cG9uIHNlbmQgYW5kIHRydWUgdXBvbiBjb21wbGV0aW9uKVxuXHRcdFx0Y29tcGxldGVkLFxuXG5cdFx0XHQvLyBUbyBrbm93IGlmIGdsb2JhbCBldmVudHMgYXJlIHRvIGJlIGRpc3BhdGNoZWRcblx0XHRcdGZpcmVHbG9iYWxzLFxuXG5cdFx0XHQvLyBMb29wIHZhcmlhYmxlXG5cdFx0XHRpLFxuXG5cdFx0XHQvLyB1bmNhY2hlZCBwYXJ0IG9mIHRoZSB1cmxcblx0XHRcdHVuY2FjaGVkLFxuXG5cdFx0XHQvLyBDcmVhdGUgdGhlIGZpbmFsIG9wdGlvbnMgb2JqZWN0XG5cdFx0XHRzID0galF1ZXJ5LmFqYXhTZXR1cCgge30sIG9wdGlvbnMgKSxcblxuXHRcdFx0Ly8gQ2FsbGJhY2tzIGNvbnRleHRcblx0XHRcdGNhbGxiYWNrQ29udGV4dCA9IHMuY29udGV4dCB8fCBzLFxuXG5cdFx0XHQvLyBDb250ZXh0IGZvciBnbG9iYWwgZXZlbnRzIGlzIGNhbGxiYWNrQ29udGV4dCBpZiBpdCBpcyBhIERPTSBub2RlIG9yIGpRdWVyeSBjb2xsZWN0aW9uXG5cdFx0XHRnbG9iYWxFdmVudENvbnRleHQgPSBzLmNvbnRleHQgJiZcblx0XHRcdFx0KCBjYWxsYmFja0NvbnRleHQubm9kZVR5cGUgfHwgY2FsbGJhY2tDb250ZXh0LmpxdWVyeSApID9cblx0XHRcdFx0XHRqUXVlcnkoIGNhbGxiYWNrQ29udGV4dCApIDpcblx0XHRcdFx0XHRqUXVlcnkuZXZlbnQsXG5cblx0XHRcdC8vIERlZmVycmVkc1xuXHRcdFx0ZGVmZXJyZWQgPSBqUXVlcnkuRGVmZXJyZWQoKSxcblx0XHRcdGNvbXBsZXRlRGVmZXJyZWQgPSBqUXVlcnkuQ2FsbGJhY2tzKCBcIm9uY2UgbWVtb3J5XCIgKSxcblxuXHRcdFx0Ly8gU3RhdHVzLWRlcGVuZGVudCBjYWxsYmFja3Ncblx0XHRcdHN0YXR1c0NvZGUgPSBzLnN0YXR1c0NvZGUgfHwge30sXG5cblx0XHRcdC8vIEhlYWRlcnMgKHRoZXkgYXJlIHNlbnQgYWxsIGF0IG9uY2UpXG5cdFx0XHRyZXF1ZXN0SGVhZGVycyA9IHt9LFxuXHRcdFx0cmVxdWVzdEhlYWRlcnNOYW1lcyA9IHt9LFxuXG5cdFx0XHQvLyBEZWZhdWx0IGFib3J0IG1lc3NhZ2Vcblx0XHRcdHN0ckFib3J0ID0gXCJjYW5jZWxlZFwiLFxuXG5cdFx0XHQvLyBGYWtlIHhoclxuXHRcdFx0anFYSFIgPSB7XG5cdFx0XHRcdHJlYWR5U3RhdGU6IDAsXG5cblx0XHRcdFx0Ly8gQnVpbGRzIGhlYWRlcnMgaGFzaHRhYmxlIGlmIG5lZWRlZFxuXHRcdFx0XHRnZXRSZXNwb25zZUhlYWRlcjogZnVuY3Rpb24oIGtleSApIHtcblx0XHRcdFx0XHR2YXIgbWF0Y2g7XG5cdFx0XHRcdFx0aWYgKCBjb21wbGV0ZWQgKSB7XG5cdFx0XHRcdFx0XHRpZiAoICFyZXNwb25zZUhlYWRlcnMgKSB7XG5cdFx0XHRcdFx0XHRcdHJlc3BvbnNlSGVhZGVycyA9IHt9O1xuXHRcdFx0XHRcdFx0XHR3aGlsZSAoICggbWF0Y2ggPSByaGVhZGVycy5leGVjKCByZXNwb25zZUhlYWRlcnNTdHJpbmcgKSApICkge1xuXHRcdFx0XHRcdFx0XHRcdHJlc3BvbnNlSGVhZGVyc1sgbWF0Y2hbIDEgXS50b0xvd2VyQ2FzZSgpIF0gPSBtYXRjaFsgMiBdO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRtYXRjaCA9IHJlc3BvbnNlSGVhZGVyc1sga2V5LnRvTG93ZXJDYXNlKCkgXTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cmV0dXJuIG1hdGNoID09IG51bGwgPyBudWxsIDogbWF0Y2g7XG5cdFx0XHRcdH0sXG5cblx0XHRcdFx0Ly8gUmF3IHN0cmluZ1xuXHRcdFx0XHRnZXRBbGxSZXNwb25zZUhlYWRlcnM6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdHJldHVybiBjb21wbGV0ZWQgPyByZXNwb25zZUhlYWRlcnNTdHJpbmcgOiBudWxsO1xuXHRcdFx0XHR9LFxuXG5cdFx0XHRcdC8vIENhY2hlcyB0aGUgaGVhZGVyXG5cdFx0XHRcdHNldFJlcXVlc3RIZWFkZXI6IGZ1bmN0aW9uKCBuYW1lLCB2YWx1ZSApIHtcblx0XHRcdFx0XHRpZiAoIGNvbXBsZXRlZCA9PSBudWxsICkge1xuXHRcdFx0XHRcdFx0bmFtZSA9IHJlcXVlc3RIZWFkZXJzTmFtZXNbIG5hbWUudG9Mb3dlckNhc2UoKSBdID1cblx0XHRcdFx0XHRcdFx0cmVxdWVzdEhlYWRlcnNOYW1lc1sgbmFtZS50b0xvd2VyQ2FzZSgpIF0gfHwgbmFtZTtcblx0XHRcdFx0XHRcdHJlcXVlc3RIZWFkZXJzWyBuYW1lIF0gPSB2YWx1ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHRcdH0sXG5cblx0XHRcdFx0Ly8gT3ZlcnJpZGVzIHJlc3BvbnNlIGNvbnRlbnQtdHlwZSBoZWFkZXJcblx0XHRcdFx0b3ZlcnJpZGVNaW1lVHlwZTogZnVuY3Rpb24oIHR5cGUgKSB7XG5cdFx0XHRcdFx0aWYgKCBjb21wbGV0ZWQgPT0gbnVsbCApIHtcblx0XHRcdFx0XHRcdHMubWltZVR5cGUgPSB0eXBlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdFx0fSxcblxuXHRcdFx0XHQvLyBTdGF0dXMtZGVwZW5kZW50IGNhbGxiYWNrc1xuXHRcdFx0XHRzdGF0dXNDb2RlOiBmdW5jdGlvbiggbWFwICkge1xuXHRcdFx0XHRcdHZhciBjb2RlO1xuXHRcdFx0XHRcdGlmICggbWFwICkge1xuXHRcdFx0XHRcdFx0aWYgKCBjb21wbGV0ZWQgKSB7XG5cblx0XHRcdFx0XHRcdFx0Ly8gRXhlY3V0ZSB0aGUgYXBwcm9wcmlhdGUgY2FsbGJhY2tzXG5cdFx0XHRcdFx0XHRcdGpxWEhSLmFsd2F5cyggbWFwWyBqcVhIUi5zdGF0dXMgXSApO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRcdFx0XHQvLyBMYXp5LWFkZCB0aGUgbmV3IGNhbGxiYWNrcyBpbiBhIHdheSB0aGF0IHByZXNlcnZlcyBvbGQgb25lc1xuXHRcdFx0XHRcdFx0XHRmb3IgKCBjb2RlIGluIG1hcCApIHtcblx0XHRcdFx0XHRcdFx0XHRzdGF0dXNDb2RlWyBjb2RlIF0gPSBbIHN0YXR1c0NvZGVbIGNvZGUgXSwgbWFwWyBjb2RlIF0gXTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdFx0fSxcblxuXHRcdFx0XHQvLyBDYW5jZWwgdGhlIHJlcXVlc3Rcblx0XHRcdFx0YWJvcnQ6IGZ1bmN0aW9uKCBzdGF0dXNUZXh0ICkge1xuXHRcdFx0XHRcdHZhciBmaW5hbFRleHQgPSBzdGF0dXNUZXh0IHx8IHN0ckFib3J0O1xuXHRcdFx0XHRcdGlmICggdHJhbnNwb3J0ICkge1xuXHRcdFx0XHRcdFx0dHJhbnNwb3J0LmFib3J0KCBmaW5hbFRleHQgKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0ZG9uZSggMCwgZmluYWxUZXh0ICk7XG5cdFx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHRcdH1cblx0XHRcdH07XG5cblx0XHQvLyBBdHRhY2ggZGVmZXJyZWRzXG5cdFx0ZGVmZXJyZWQucHJvbWlzZSgganFYSFIgKTtcblxuXHRcdC8vIEFkZCBwcm90b2NvbCBpZiBub3QgcHJvdmlkZWQgKHByZWZpbHRlcnMgbWlnaHQgZXhwZWN0IGl0KVxuXHRcdC8vIEhhbmRsZSBmYWxzeSB1cmwgaW4gdGhlIHNldHRpbmdzIG9iamVjdCAoIzEwMDkzOiBjb25zaXN0ZW5jeSB3aXRoIG9sZCBzaWduYXR1cmUpXG5cdFx0Ly8gV2UgYWxzbyB1c2UgdGhlIHVybCBwYXJhbWV0ZXIgaWYgYXZhaWxhYmxlXG5cdFx0cy51cmwgPSAoICggdXJsIHx8IHMudXJsIHx8IGxvY2F0aW9uLmhyZWYgKSArIFwiXCIgKVxuXHRcdFx0LnJlcGxhY2UoIHJwcm90b2NvbCwgbG9jYXRpb24ucHJvdG9jb2wgKyBcIi8vXCIgKTtcblxuXHRcdC8vIEFsaWFzIG1ldGhvZCBvcHRpb24gdG8gdHlwZSBhcyBwZXIgdGlja2V0ICMxMjAwNFxuXHRcdHMudHlwZSA9IG9wdGlvbnMubWV0aG9kIHx8IG9wdGlvbnMudHlwZSB8fCBzLm1ldGhvZCB8fCBzLnR5cGU7XG5cblx0XHQvLyBFeHRyYWN0IGRhdGFUeXBlcyBsaXN0XG5cdFx0cy5kYXRhVHlwZXMgPSAoIHMuZGF0YVR5cGUgfHwgXCIqXCIgKS50b0xvd2VyQ2FzZSgpLm1hdGNoKCBybm90aHRtbHdoaXRlICkgfHwgWyBcIlwiIF07XG5cblx0XHQvLyBBIGNyb3NzLWRvbWFpbiByZXF1ZXN0IGlzIGluIG9yZGVyIHdoZW4gdGhlIG9yaWdpbiBkb2Vzbid0IG1hdGNoIHRoZSBjdXJyZW50IG9yaWdpbi5cblx0XHRpZiAoIHMuY3Jvc3NEb21haW4gPT0gbnVsbCApIHtcblx0XHRcdHVybEFuY2hvciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwiYVwiICk7XG5cblx0XHRcdC8vIFN1cHBvcnQ6IElFIDw9OCAtIDExLCBFZGdlIDEyIC0gMTVcblx0XHRcdC8vIElFIHRocm93cyBleGNlcHRpb24gb24gYWNjZXNzaW5nIHRoZSBocmVmIHByb3BlcnR5IGlmIHVybCBpcyBtYWxmb3JtZWQsXG5cdFx0XHQvLyBlLmcuIGh0dHA6Ly9leGFtcGxlLmNvbTo4MHgvXG5cdFx0XHR0cnkge1xuXHRcdFx0XHR1cmxBbmNob3IuaHJlZiA9IHMudXJsO1xuXG5cdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDw9OCAtIDExIG9ubHlcblx0XHRcdFx0Ly8gQW5jaG9yJ3MgaG9zdCBwcm9wZXJ0eSBpc24ndCBjb3JyZWN0bHkgc2V0IHdoZW4gcy51cmwgaXMgcmVsYXRpdmVcblx0XHRcdFx0dXJsQW5jaG9yLmhyZWYgPSB1cmxBbmNob3IuaHJlZjtcblx0XHRcdFx0cy5jcm9zc0RvbWFpbiA9IG9yaWdpbkFuY2hvci5wcm90b2NvbCArIFwiLy9cIiArIG9yaWdpbkFuY2hvci5ob3N0ICE9PVxuXHRcdFx0XHRcdHVybEFuY2hvci5wcm90b2NvbCArIFwiLy9cIiArIHVybEFuY2hvci5ob3N0O1xuXHRcdFx0fSBjYXRjaCAoIGUgKSB7XG5cblx0XHRcdFx0Ly8gSWYgdGhlcmUgaXMgYW4gZXJyb3IgcGFyc2luZyB0aGUgVVJMLCBhc3N1bWUgaXQgaXMgY3Jvc3NEb21haW4sXG5cdFx0XHRcdC8vIGl0IGNhbiBiZSByZWplY3RlZCBieSB0aGUgdHJhbnNwb3J0IGlmIGl0IGlzIGludmFsaWRcblx0XHRcdFx0cy5jcm9zc0RvbWFpbiA9IHRydWU7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gQ29udmVydCBkYXRhIGlmIG5vdCBhbHJlYWR5IGEgc3RyaW5nXG5cdFx0aWYgKCBzLmRhdGEgJiYgcy5wcm9jZXNzRGF0YSAmJiB0eXBlb2Ygcy5kYXRhICE9PSBcInN0cmluZ1wiICkge1xuXHRcdFx0cy5kYXRhID0galF1ZXJ5LnBhcmFtKCBzLmRhdGEsIHMudHJhZGl0aW9uYWwgKTtcblx0XHR9XG5cblx0XHQvLyBBcHBseSBwcmVmaWx0ZXJzXG5cdFx0aW5zcGVjdFByZWZpbHRlcnNPclRyYW5zcG9ydHMoIHByZWZpbHRlcnMsIHMsIG9wdGlvbnMsIGpxWEhSICk7XG5cblx0XHQvLyBJZiByZXF1ZXN0IHdhcyBhYm9ydGVkIGluc2lkZSBhIHByZWZpbHRlciwgc3RvcCB0aGVyZVxuXHRcdGlmICggY29tcGxldGVkICkge1xuXHRcdFx0cmV0dXJuIGpxWEhSO1xuXHRcdH1cblxuXHRcdC8vIFdlIGNhbiBmaXJlIGdsb2JhbCBldmVudHMgYXMgb2Ygbm93IGlmIGFza2VkIHRvXG5cdFx0Ly8gRG9uJ3QgZmlyZSBldmVudHMgaWYgalF1ZXJ5LmV2ZW50IGlzIHVuZGVmaW5lZCBpbiBhbiBBTUQtdXNhZ2Ugc2NlbmFyaW8gKCMxNTExOClcblx0XHRmaXJlR2xvYmFscyA9IGpRdWVyeS5ldmVudCAmJiBzLmdsb2JhbDtcblxuXHRcdC8vIFdhdGNoIGZvciBhIG5ldyBzZXQgb2YgcmVxdWVzdHNcblx0XHRpZiAoIGZpcmVHbG9iYWxzICYmIGpRdWVyeS5hY3RpdmUrKyA9PT0gMCApIHtcblx0XHRcdGpRdWVyeS5ldmVudC50cmlnZ2VyKCBcImFqYXhTdGFydFwiICk7XG5cdFx0fVxuXG5cdFx0Ly8gVXBwZXJjYXNlIHRoZSB0eXBlXG5cdFx0cy50eXBlID0gcy50eXBlLnRvVXBwZXJDYXNlKCk7XG5cblx0XHQvLyBEZXRlcm1pbmUgaWYgcmVxdWVzdCBoYXMgY29udGVudFxuXHRcdHMuaGFzQ29udGVudCA9ICFybm9Db250ZW50LnRlc3QoIHMudHlwZSApO1xuXG5cdFx0Ly8gU2F2ZSB0aGUgVVJMIGluIGNhc2Ugd2UncmUgdG95aW5nIHdpdGggdGhlIElmLU1vZGlmaWVkLVNpbmNlXG5cdFx0Ly8gYW5kL29yIElmLU5vbmUtTWF0Y2ggaGVhZGVyIGxhdGVyIG9uXG5cdFx0Ly8gUmVtb3ZlIGhhc2ggdG8gc2ltcGxpZnkgdXJsIG1hbmlwdWxhdGlvblxuXHRcdGNhY2hlVVJMID0gcy51cmwucmVwbGFjZSggcmhhc2gsIFwiXCIgKTtcblxuXHRcdC8vIE1vcmUgb3B0aW9ucyBoYW5kbGluZyBmb3IgcmVxdWVzdHMgd2l0aCBubyBjb250ZW50XG5cdFx0aWYgKCAhcy5oYXNDb250ZW50ICkge1xuXG5cdFx0XHQvLyBSZW1lbWJlciB0aGUgaGFzaCBzbyB3ZSBjYW4gcHV0IGl0IGJhY2tcblx0XHRcdHVuY2FjaGVkID0gcy51cmwuc2xpY2UoIGNhY2hlVVJMLmxlbmd0aCApO1xuXG5cdFx0XHQvLyBJZiBkYXRhIGlzIGF2YWlsYWJsZSBhbmQgc2hvdWxkIGJlIHByb2Nlc3NlZCwgYXBwZW5kIGRhdGEgdG8gdXJsXG5cdFx0XHRpZiAoIHMuZGF0YSAmJiAoIHMucHJvY2Vzc0RhdGEgfHwgdHlwZW9mIHMuZGF0YSA9PT0gXCJzdHJpbmdcIiApICkge1xuXHRcdFx0XHRjYWNoZVVSTCArPSAoIHJxdWVyeS50ZXN0KCBjYWNoZVVSTCApID8gXCImXCIgOiBcIj9cIiApICsgcy5kYXRhO1xuXG5cdFx0XHRcdC8vICM5NjgyOiByZW1vdmUgZGF0YSBzbyB0aGF0IGl0J3Mgbm90IHVzZWQgaW4gYW4gZXZlbnR1YWwgcmV0cnlcblx0XHRcdFx0ZGVsZXRlIHMuZGF0YTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gQWRkIG9yIHVwZGF0ZSBhbnRpLWNhY2hlIHBhcmFtIGlmIG5lZWRlZFxuXHRcdFx0aWYgKCBzLmNhY2hlID09PSBmYWxzZSApIHtcblx0XHRcdFx0Y2FjaGVVUkwgPSBjYWNoZVVSTC5yZXBsYWNlKCByYW50aUNhY2hlLCBcIiQxXCIgKTtcblx0XHRcdFx0dW5jYWNoZWQgPSAoIHJxdWVyeS50ZXN0KCBjYWNoZVVSTCApID8gXCImXCIgOiBcIj9cIiApICsgXCJfPVwiICsgKCBub25jZSsrICkgKyB1bmNhY2hlZDtcblx0XHRcdH1cblxuXHRcdFx0Ly8gUHV0IGhhc2ggYW5kIGFudGktY2FjaGUgb24gdGhlIFVSTCB0aGF0IHdpbGwgYmUgcmVxdWVzdGVkIChnaC0xNzMyKVxuXHRcdFx0cy51cmwgPSBjYWNoZVVSTCArIHVuY2FjaGVkO1xuXG5cdFx0Ly8gQ2hhbmdlICclMjAnIHRvICcrJyBpZiB0aGlzIGlzIGVuY29kZWQgZm9ybSBib2R5IGNvbnRlbnQgKGdoLTI2NTgpXG5cdFx0fSBlbHNlIGlmICggcy5kYXRhICYmIHMucHJvY2Vzc0RhdGEgJiZcblx0XHRcdCggcy5jb250ZW50VHlwZSB8fCBcIlwiICkuaW5kZXhPZiggXCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWRcIiApID09PSAwICkge1xuXHRcdFx0cy5kYXRhID0gcy5kYXRhLnJlcGxhY2UoIHIyMCwgXCIrXCIgKTtcblx0XHR9XG5cblx0XHQvLyBTZXQgdGhlIElmLU1vZGlmaWVkLVNpbmNlIGFuZC9vciBJZi1Ob25lLU1hdGNoIGhlYWRlciwgaWYgaW4gaWZNb2RpZmllZCBtb2RlLlxuXHRcdGlmICggcy5pZk1vZGlmaWVkICkge1xuXHRcdFx0aWYgKCBqUXVlcnkubGFzdE1vZGlmaWVkWyBjYWNoZVVSTCBdICkge1xuXHRcdFx0XHRqcVhIUi5zZXRSZXF1ZXN0SGVhZGVyKCBcIklmLU1vZGlmaWVkLVNpbmNlXCIsIGpRdWVyeS5sYXN0TW9kaWZpZWRbIGNhY2hlVVJMIF0gKTtcblx0XHRcdH1cblx0XHRcdGlmICggalF1ZXJ5LmV0YWdbIGNhY2hlVVJMIF0gKSB7XG5cdFx0XHRcdGpxWEhSLnNldFJlcXVlc3RIZWFkZXIoIFwiSWYtTm9uZS1NYXRjaFwiLCBqUXVlcnkuZXRhZ1sgY2FjaGVVUkwgXSApO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIFNldCB0aGUgY29ycmVjdCBoZWFkZXIsIGlmIGRhdGEgaXMgYmVpbmcgc2VudFxuXHRcdGlmICggcy5kYXRhICYmIHMuaGFzQ29udGVudCAmJiBzLmNvbnRlbnRUeXBlICE9PSBmYWxzZSB8fCBvcHRpb25zLmNvbnRlbnRUeXBlICkge1xuXHRcdFx0anFYSFIuc2V0UmVxdWVzdEhlYWRlciggXCJDb250ZW50LVR5cGVcIiwgcy5jb250ZW50VHlwZSApO1xuXHRcdH1cblxuXHRcdC8vIFNldCB0aGUgQWNjZXB0cyBoZWFkZXIgZm9yIHRoZSBzZXJ2ZXIsIGRlcGVuZGluZyBvbiB0aGUgZGF0YVR5cGVcblx0XHRqcVhIUi5zZXRSZXF1ZXN0SGVhZGVyKFxuXHRcdFx0XCJBY2NlcHRcIixcblx0XHRcdHMuZGF0YVR5cGVzWyAwIF0gJiYgcy5hY2NlcHRzWyBzLmRhdGFUeXBlc1sgMCBdIF0gP1xuXHRcdFx0XHRzLmFjY2VwdHNbIHMuZGF0YVR5cGVzWyAwIF0gXSArXG5cdFx0XHRcdFx0KCBzLmRhdGFUeXBlc1sgMCBdICE9PSBcIipcIiA/IFwiLCBcIiArIGFsbFR5cGVzICsgXCI7IHE9MC4wMVwiIDogXCJcIiApIDpcblx0XHRcdFx0cy5hY2NlcHRzWyBcIipcIiBdXG5cdFx0KTtcblxuXHRcdC8vIENoZWNrIGZvciBoZWFkZXJzIG9wdGlvblxuXHRcdGZvciAoIGkgaW4gcy5oZWFkZXJzICkge1xuXHRcdFx0anFYSFIuc2V0UmVxdWVzdEhlYWRlciggaSwgcy5oZWFkZXJzWyBpIF0gKTtcblx0XHR9XG5cblx0XHQvLyBBbGxvdyBjdXN0b20gaGVhZGVycy9taW1ldHlwZXMgYW5kIGVhcmx5IGFib3J0XG5cdFx0aWYgKCBzLmJlZm9yZVNlbmQgJiZcblx0XHRcdCggcy5iZWZvcmVTZW5kLmNhbGwoIGNhbGxiYWNrQ29udGV4dCwganFYSFIsIHMgKSA9PT0gZmFsc2UgfHwgY29tcGxldGVkICkgKSB7XG5cblx0XHRcdC8vIEFib3J0IGlmIG5vdCBkb25lIGFscmVhZHkgYW5kIHJldHVyblxuXHRcdFx0cmV0dXJuIGpxWEhSLmFib3J0KCk7XG5cdFx0fVxuXG5cdFx0Ly8gQWJvcnRpbmcgaXMgbm8gbG9uZ2VyIGEgY2FuY2VsbGF0aW9uXG5cdFx0c3RyQWJvcnQgPSBcImFib3J0XCI7XG5cblx0XHQvLyBJbnN0YWxsIGNhbGxiYWNrcyBvbiBkZWZlcnJlZHNcblx0XHRjb21wbGV0ZURlZmVycmVkLmFkZCggcy5jb21wbGV0ZSApO1xuXHRcdGpxWEhSLmRvbmUoIHMuc3VjY2VzcyApO1xuXHRcdGpxWEhSLmZhaWwoIHMuZXJyb3IgKTtcblxuXHRcdC8vIEdldCB0cmFuc3BvcnRcblx0XHR0cmFuc3BvcnQgPSBpbnNwZWN0UHJlZmlsdGVyc09yVHJhbnNwb3J0cyggdHJhbnNwb3J0cywgcywgb3B0aW9ucywganFYSFIgKTtcblxuXHRcdC8vIElmIG5vIHRyYW5zcG9ydCwgd2UgYXV0by1hYm9ydFxuXHRcdGlmICggIXRyYW5zcG9ydCApIHtcblx0XHRcdGRvbmUoIC0xLCBcIk5vIFRyYW5zcG9ydFwiICk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGpxWEhSLnJlYWR5U3RhdGUgPSAxO1xuXG5cdFx0XHQvLyBTZW5kIGdsb2JhbCBldmVudFxuXHRcdFx0aWYgKCBmaXJlR2xvYmFscyApIHtcblx0XHRcdFx0Z2xvYmFsRXZlbnRDb250ZXh0LnRyaWdnZXIoIFwiYWpheFNlbmRcIiwgWyBqcVhIUiwgcyBdICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIElmIHJlcXVlc3Qgd2FzIGFib3J0ZWQgaW5zaWRlIGFqYXhTZW5kLCBzdG9wIHRoZXJlXG5cdFx0XHRpZiAoIGNvbXBsZXRlZCApIHtcblx0XHRcdFx0cmV0dXJuIGpxWEhSO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBUaW1lb3V0XG5cdFx0XHRpZiAoIHMuYXN5bmMgJiYgcy50aW1lb3V0ID4gMCApIHtcblx0XHRcdFx0dGltZW91dFRpbWVyID0gd2luZG93LnNldFRpbWVvdXQoIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdGpxWEhSLmFib3J0KCBcInRpbWVvdXRcIiApO1xuXHRcdFx0XHR9LCBzLnRpbWVvdXQgKTtcblx0XHRcdH1cblxuXHRcdFx0dHJ5IHtcblx0XHRcdFx0Y29tcGxldGVkID0gZmFsc2U7XG5cdFx0XHRcdHRyYW5zcG9ydC5zZW5kKCByZXF1ZXN0SGVhZGVycywgZG9uZSApO1xuXHRcdFx0fSBjYXRjaCAoIGUgKSB7XG5cblx0XHRcdFx0Ly8gUmV0aHJvdyBwb3N0LWNvbXBsZXRpb24gZXhjZXB0aW9uc1xuXHRcdFx0XHRpZiAoIGNvbXBsZXRlZCApIHtcblx0XHRcdFx0XHR0aHJvdyBlO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gUHJvcGFnYXRlIG90aGVycyBhcyByZXN1bHRzXG5cdFx0XHRcdGRvbmUoIC0xLCBlICk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gQ2FsbGJhY2sgZm9yIHdoZW4gZXZlcnl0aGluZyBpcyBkb25lXG5cdFx0ZnVuY3Rpb24gZG9uZSggc3RhdHVzLCBuYXRpdmVTdGF0dXNUZXh0LCByZXNwb25zZXMsIGhlYWRlcnMgKSB7XG5cdFx0XHR2YXIgaXNTdWNjZXNzLCBzdWNjZXNzLCBlcnJvciwgcmVzcG9uc2UsIG1vZGlmaWVkLFxuXHRcdFx0XHRzdGF0dXNUZXh0ID0gbmF0aXZlU3RhdHVzVGV4dDtcblxuXHRcdFx0Ly8gSWdub3JlIHJlcGVhdCBpbnZvY2F0aW9uc1xuXHRcdFx0aWYgKCBjb21wbGV0ZWQgKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0Y29tcGxldGVkID0gdHJ1ZTtcblxuXHRcdFx0Ly8gQ2xlYXIgdGltZW91dCBpZiBpdCBleGlzdHNcblx0XHRcdGlmICggdGltZW91dFRpbWVyICkge1xuXHRcdFx0XHR3aW5kb3cuY2xlYXJUaW1lb3V0KCB0aW1lb3V0VGltZXIgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gRGVyZWZlcmVuY2UgdHJhbnNwb3J0IGZvciBlYXJseSBnYXJiYWdlIGNvbGxlY3Rpb25cblx0XHRcdC8vIChubyBtYXR0ZXIgaG93IGxvbmcgdGhlIGpxWEhSIG9iamVjdCB3aWxsIGJlIHVzZWQpXG5cdFx0XHR0cmFuc3BvcnQgPSB1bmRlZmluZWQ7XG5cblx0XHRcdC8vIENhY2hlIHJlc3BvbnNlIGhlYWRlcnNcblx0XHRcdHJlc3BvbnNlSGVhZGVyc1N0cmluZyA9IGhlYWRlcnMgfHwgXCJcIjtcblxuXHRcdFx0Ly8gU2V0IHJlYWR5U3RhdGVcblx0XHRcdGpxWEhSLnJlYWR5U3RhdGUgPSBzdGF0dXMgPiAwID8gNCA6IDA7XG5cblx0XHRcdC8vIERldGVybWluZSBpZiBzdWNjZXNzZnVsXG5cdFx0XHRpc1N1Y2Nlc3MgPSBzdGF0dXMgPj0gMjAwICYmIHN0YXR1cyA8IDMwMCB8fCBzdGF0dXMgPT09IDMwNDtcblxuXHRcdFx0Ly8gR2V0IHJlc3BvbnNlIGRhdGFcblx0XHRcdGlmICggcmVzcG9uc2VzICkge1xuXHRcdFx0XHRyZXNwb25zZSA9IGFqYXhIYW5kbGVSZXNwb25zZXMoIHMsIGpxWEhSLCByZXNwb25zZXMgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gQ29udmVydCBubyBtYXR0ZXIgd2hhdCAodGhhdCB3YXkgcmVzcG9uc2VYWFggZmllbGRzIGFyZSBhbHdheXMgc2V0KVxuXHRcdFx0cmVzcG9uc2UgPSBhamF4Q29udmVydCggcywgcmVzcG9uc2UsIGpxWEhSLCBpc1N1Y2Nlc3MgKTtcblxuXHRcdFx0Ly8gSWYgc3VjY2Vzc2Z1bCwgaGFuZGxlIHR5cGUgY2hhaW5pbmdcblx0XHRcdGlmICggaXNTdWNjZXNzICkge1xuXG5cdFx0XHRcdC8vIFNldCB0aGUgSWYtTW9kaWZpZWQtU2luY2UgYW5kL29yIElmLU5vbmUtTWF0Y2ggaGVhZGVyLCBpZiBpbiBpZk1vZGlmaWVkIG1vZGUuXG5cdFx0XHRcdGlmICggcy5pZk1vZGlmaWVkICkge1xuXHRcdFx0XHRcdG1vZGlmaWVkID0ganFYSFIuZ2V0UmVzcG9uc2VIZWFkZXIoIFwiTGFzdC1Nb2RpZmllZFwiICk7XG5cdFx0XHRcdFx0aWYgKCBtb2RpZmllZCApIHtcblx0XHRcdFx0XHRcdGpRdWVyeS5sYXN0TW9kaWZpZWRbIGNhY2hlVVJMIF0gPSBtb2RpZmllZDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0bW9kaWZpZWQgPSBqcVhIUi5nZXRSZXNwb25zZUhlYWRlciggXCJldGFnXCIgKTtcblx0XHRcdFx0XHRpZiAoIG1vZGlmaWVkICkge1xuXHRcdFx0XHRcdFx0alF1ZXJ5LmV0YWdbIGNhY2hlVVJMIF0gPSBtb2RpZmllZDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBpZiBubyBjb250ZW50XG5cdFx0XHRcdGlmICggc3RhdHVzID09PSAyMDQgfHwgcy50eXBlID09PSBcIkhFQURcIiApIHtcblx0XHRcdFx0XHRzdGF0dXNUZXh0ID0gXCJub2NvbnRlbnRcIjtcblxuXHRcdFx0XHQvLyBpZiBub3QgbW9kaWZpZWRcblx0XHRcdFx0fSBlbHNlIGlmICggc3RhdHVzID09PSAzMDQgKSB7XG5cdFx0XHRcdFx0c3RhdHVzVGV4dCA9IFwibm90bW9kaWZpZWRcIjtcblxuXHRcdFx0XHQvLyBJZiB3ZSBoYXZlIGRhdGEsIGxldCdzIGNvbnZlcnQgaXRcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRzdGF0dXNUZXh0ID0gcmVzcG9uc2Uuc3RhdGU7XG5cdFx0XHRcdFx0c3VjY2VzcyA9IHJlc3BvbnNlLmRhdGE7XG5cdFx0XHRcdFx0ZXJyb3IgPSByZXNwb25zZS5lcnJvcjtcblx0XHRcdFx0XHRpc1N1Y2Nlc3MgPSAhZXJyb3I7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0Ly8gRXh0cmFjdCBlcnJvciBmcm9tIHN0YXR1c1RleHQgYW5kIG5vcm1hbGl6ZSBmb3Igbm9uLWFib3J0c1xuXHRcdFx0XHRlcnJvciA9IHN0YXR1c1RleHQ7XG5cdFx0XHRcdGlmICggc3RhdHVzIHx8ICFzdGF0dXNUZXh0ICkge1xuXHRcdFx0XHRcdHN0YXR1c1RleHQgPSBcImVycm9yXCI7XG5cdFx0XHRcdFx0aWYgKCBzdGF0dXMgPCAwICkge1xuXHRcdFx0XHRcdFx0c3RhdHVzID0gMDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gU2V0IGRhdGEgZm9yIHRoZSBmYWtlIHhociBvYmplY3Rcblx0XHRcdGpxWEhSLnN0YXR1cyA9IHN0YXR1cztcblx0XHRcdGpxWEhSLnN0YXR1c1RleHQgPSAoIG5hdGl2ZVN0YXR1c1RleHQgfHwgc3RhdHVzVGV4dCApICsgXCJcIjtcblxuXHRcdFx0Ly8gU3VjY2Vzcy9FcnJvclxuXHRcdFx0aWYgKCBpc1N1Y2Nlc3MgKSB7XG5cdFx0XHRcdGRlZmVycmVkLnJlc29sdmVXaXRoKCBjYWxsYmFja0NvbnRleHQsIFsgc3VjY2Vzcywgc3RhdHVzVGV4dCwganFYSFIgXSApO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0ZGVmZXJyZWQucmVqZWN0V2l0aCggY2FsbGJhY2tDb250ZXh0LCBbIGpxWEhSLCBzdGF0dXNUZXh0LCBlcnJvciBdICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFN0YXR1cy1kZXBlbmRlbnQgY2FsbGJhY2tzXG5cdFx0XHRqcVhIUi5zdGF0dXNDb2RlKCBzdGF0dXNDb2RlICk7XG5cdFx0XHRzdGF0dXNDb2RlID0gdW5kZWZpbmVkO1xuXG5cdFx0XHRpZiAoIGZpcmVHbG9iYWxzICkge1xuXHRcdFx0XHRnbG9iYWxFdmVudENvbnRleHQudHJpZ2dlciggaXNTdWNjZXNzID8gXCJhamF4U3VjY2Vzc1wiIDogXCJhamF4RXJyb3JcIixcblx0XHRcdFx0XHRbIGpxWEhSLCBzLCBpc1N1Y2Nlc3MgPyBzdWNjZXNzIDogZXJyb3IgXSApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBDb21wbGV0ZVxuXHRcdFx0Y29tcGxldGVEZWZlcnJlZC5maXJlV2l0aCggY2FsbGJhY2tDb250ZXh0LCBbIGpxWEhSLCBzdGF0dXNUZXh0IF0gKTtcblxuXHRcdFx0aWYgKCBmaXJlR2xvYmFscyApIHtcblx0XHRcdFx0Z2xvYmFsRXZlbnRDb250ZXh0LnRyaWdnZXIoIFwiYWpheENvbXBsZXRlXCIsIFsganFYSFIsIHMgXSApO1xuXG5cdFx0XHRcdC8vIEhhbmRsZSB0aGUgZ2xvYmFsIEFKQVggY291bnRlclxuXHRcdFx0XHRpZiAoICEoIC0talF1ZXJ5LmFjdGl2ZSApICkge1xuXHRcdFx0XHRcdGpRdWVyeS5ldmVudC50cmlnZ2VyKCBcImFqYXhTdG9wXCIgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBqcVhIUjtcblx0fSxcblxuXHRnZXRKU09OOiBmdW5jdGlvbiggdXJsLCBkYXRhLCBjYWxsYmFjayApIHtcblx0XHRyZXR1cm4galF1ZXJ5LmdldCggdXJsLCBkYXRhLCBjYWxsYmFjaywgXCJqc29uXCIgKTtcblx0fSxcblxuXHRnZXRTY3JpcHQ6IGZ1bmN0aW9uKCB1cmwsIGNhbGxiYWNrICkge1xuXHRcdHJldHVybiBqUXVlcnkuZ2V0KCB1cmwsIHVuZGVmaW5lZCwgY2FsbGJhY2ssIFwic2NyaXB0XCIgKTtcblx0fVxufSApO1xuXG5qUXVlcnkuZWFjaCggWyBcImdldFwiLCBcInBvc3RcIiBdLCBmdW5jdGlvbiggaSwgbWV0aG9kICkge1xuXHRqUXVlcnlbIG1ldGhvZCBdID0gZnVuY3Rpb24oIHVybCwgZGF0YSwgY2FsbGJhY2ssIHR5cGUgKSB7XG5cblx0XHQvLyBTaGlmdCBhcmd1bWVudHMgaWYgZGF0YSBhcmd1bWVudCB3YXMgb21pdHRlZFxuXHRcdGlmICggaXNGdW5jdGlvbiggZGF0YSApICkge1xuXHRcdFx0dHlwZSA9IHR5cGUgfHwgY2FsbGJhY2s7XG5cdFx0XHRjYWxsYmFjayA9IGRhdGE7XG5cdFx0XHRkYXRhID0gdW5kZWZpbmVkO1xuXHRcdH1cblxuXHRcdC8vIFRoZSB1cmwgY2FuIGJlIGFuIG9wdGlvbnMgb2JqZWN0ICh3aGljaCB0aGVuIG11c3QgaGF2ZSAudXJsKVxuXHRcdHJldHVybiBqUXVlcnkuYWpheCggalF1ZXJ5LmV4dGVuZCgge1xuXHRcdFx0dXJsOiB1cmwsXG5cdFx0XHR0eXBlOiBtZXRob2QsXG5cdFx0XHRkYXRhVHlwZTogdHlwZSxcblx0XHRcdGRhdGE6IGRhdGEsXG5cdFx0XHRzdWNjZXNzOiBjYWxsYmFja1xuXHRcdH0sIGpRdWVyeS5pc1BsYWluT2JqZWN0KCB1cmwgKSAmJiB1cmwgKSApO1xuXHR9O1xufSApO1xuXG5cbmpRdWVyeS5fZXZhbFVybCA9IGZ1bmN0aW9uKCB1cmwgKSB7XG5cdHJldHVybiBqUXVlcnkuYWpheCgge1xuXHRcdHVybDogdXJsLFxuXG5cdFx0Ly8gTWFrZSB0aGlzIGV4cGxpY2l0LCBzaW5jZSB1c2VyIGNhbiBvdmVycmlkZSB0aGlzIHRocm91Z2ggYWpheFNldHVwICgjMTEyNjQpXG5cdFx0dHlwZTogXCJHRVRcIixcblx0XHRkYXRhVHlwZTogXCJzY3JpcHRcIixcblx0XHRjYWNoZTogdHJ1ZSxcblx0XHRhc3luYzogZmFsc2UsXG5cdFx0Z2xvYmFsOiBmYWxzZSxcblx0XHRcInRocm93c1wiOiB0cnVlXG5cdH0gKTtcbn07XG5cblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXHR3cmFwQWxsOiBmdW5jdGlvbiggaHRtbCApIHtcblx0XHR2YXIgd3JhcDtcblxuXHRcdGlmICggdGhpc1sgMCBdICkge1xuXHRcdFx0aWYgKCBpc0Z1bmN0aW9uKCBodG1sICkgKSB7XG5cdFx0XHRcdGh0bWwgPSBodG1sLmNhbGwoIHRoaXNbIDAgXSApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBUaGUgZWxlbWVudHMgdG8gd3JhcCB0aGUgdGFyZ2V0IGFyb3VuZFxuXHRcdFx0d3JhcCA9IGpRdWVyeSggaHRtbCwgdGhpc1sgMCBdLm93bmVyRG9jdW1lbnQgKS5lcSggMCApLmNsb25lKCB0cnVlICk7XG5cblx0XHRcdGlmICggdGhpc1sgMCBdLnBhcmVudE5vZGUgKSB7XG5cdFx0XHRcdHdyYXAuaW5zZXJ0QmVmb3JlKCB0aGlzWyAwIF0gKTtcblx0XHRcdH1cblxuXHRcdFx0d3JhcC5tYXAoIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHR2YXIgZWxlbSA9IHRoaXM7XG5cblx0XHRcdFx0d2hpbGUgKCBlbGVtLmZpcnN0RWxlbWVudENoaWxkICkge1xuXHRcdFx0XHRcdGVsZW0gPSBlbGVtLmZpcnN0RWxlbWVudENoaWxkO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIGVsZW07XG5cdFx0XHR9ICkuYXBwZW5kKCB0aGlzICk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0d3JhcElubmVyOiBmdW5jdGlvbiggaHRtbCApIHtcblx0XHRpZiAoIGlzRnVuY3Rpb24oIGh0bWwgKSApIHtcblx0XHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCBpICkge1xuXHRcdFx0XHRqUXVlcnkoIHRoaXMgKS53cmFwSW5uZXIoIGh0bWwuY2FsbCggdGhpcywgaSApICk7XG5cdFx0XHR9ICk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgc2VsZiA9IGpRdWVyeSggdGhpcyApLFxuXHRcdFx0XHRjb250ZW50cyA9IHNlbGYuY29udGVudHMoKTtcblxuXHRcdFx0aWYgKCBjb250ZW50cy5sZW5ndGggKSB7XG5cdFx0XHRcdGNvbnRlbnRzLndyYXBBbGwoIGh0bWwgKTtcblxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0c2VsZi5hcHBlbmQoIGh0bWwgKTtcblx0XHRcdH1cblx0XHR9ICk7XG5cdH0sXG5cblx0d3JhcDogZnVuY3Rpb24oIGh0bWwgKSB7XG5cdFx0dmFyIGh0bWxJc0Z1bmN0aW9uID0gaXNGdW5jdGlvbiggaHRtbCApO1xuXG5cdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oIGkgKSB7XG5cdFx0XHRqUXVlcnkoIHRoaXMgKS53cmFwQWxsKCBodG1sSXNGdW5jdGlvbiA/IGh0bWwuY2FsbCggdGhpcywgaSApIDogaHRtbCApO1xuXHRcdH0gKTtcblx0fSxcblxuXHR1bndyYXA6IGZ1bmN0aW9uKCBzZWxlY3RvciApIHtcblx0XHR0aGlzLnBhcmVudCggc2VsZWN0b3IgKS5ub3QoIFwiYm9keVwiICkuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHRqUXVlcnkoIHRoaXMgKS5yZXBsYWNlV2l0aCggdGhpcy5jaGlsZE5vZGVzICk7XG5cdFx0fSApO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG59ICk7XG5cblxualF1ZXJ5LmV4cHIucHNldWRvcy5oaWRkZW4gPSBmdW5jdGlvbiggZWxlbSApIHtcblx0cmV0dXJuICFqUXVlcnkuZXhwci5wc2V1ZG9zLnZpc2libGUoIGVsZW0gKTtcbn07XG5qUXVlcnkuZXhwci5wc2V1ZG9zLnZpc2libGUgPSBmdW5jdGlvbiggZWxlbSApIHtcblx0cmV0dXJuICEhKCBlbGVtLm9mZnNldFdpZHRoIHx8IGVsZW0ub2Zmc2V0SGVpZ2h0IHx8IGVsZW0uZ2V0Q2xpZW50UmVjdHMoKS5sZW5ndGggKTtcbn07XG5cblxuXG5cbmpRdWVyeS5hamF4U2V0dGluZ3MueGhyID0gZnVuY3Rpb24oKSB7XG5cdHRyeSB7XG5cdFx0cmV0dXJuIG5ldyB3aW5kb3cuWE1MSHR0cFJlcXVlc3QoKTtcblx0fSBjYXRjaCAoIGUgKSB7fVxufTtcblxudmFyIHhoclN1Y2Nlc3NTdGF0dXMgPSB7XG5cblx0XHQvLyBGaWxlIHByb3RvY29sIGFsd2F5cyB5aWVsZHMgc3RhdHVzIGNvZGUgMCwgYXNzdW1lIDIwMFxuXHRcdDA6IDIwMCxcblxuXHRcdC8vIFN1cHBvcnQ6IElFIDw9OSBvbmx5XG5cdFx0Ly8gIzE0NTA6IHNvbWV0aW1lcyBJRSByZXR1cm5zIDEyMjMgd2hlbiBpdCBzaG91bGQgYmUgMjA0XG5cdFx0MTIyMzogMjA0XG5cdH0sXG5cdHhoclN1cHBvcnRlZCA9IGpRdWVyeS5hamF4U2V0dGluZ3MueGhyKCk7XG5cbnN1cHBvcnQuY29ycyA9ICEheGhyU3VwcG9ydGVkICYmICggXCJ3aXRoQ3JlZGVudGlhbHNcIiBpbiB4aHJTdXBwb3J0ZWQgKTtcbnN1cHBvcnQuYWpheCA9IHhoclN1cHBvcnRlZCA9ICEheGhyU3VwcG9ydGVkO1xuXG5qUXVlcnkuYWpheFRyYW5zcG9ydCggZnVuY3Rpb24oIG9wdGlvbnMgKSB7XG5cdHZhciBjYWxsYmFjaywgZXJyb3JDYWxsYmFjaztcblxuXHQvLyBDcm9zcyBkb21haW4gb25seSBhbGxvd2VkIGlmIHN1cHBvcnRlZCB0aHJvdWdoIFhNTEh0dHBSZXF1ZXN0XG5cdGlmICggc3VwcG9ydC5jb3JzIHx8IHhoclN1cHBvcnRlZCAmJiAhb3B0aW9ucy5jcm9zc0RvbWFpbiApIHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0c2VuZDogZnVuY3Rpb24oIGhlYWRlcnMsIGNvbXBsZXRlICkge1xuXHRcdFx0XHR2YXIgaSxcblx0XHRcdFx0XHR4aHIgPSBvcHRpb25zLnhocigpO1xuXG5cdFx0XHRcdHhoci5vcGVuKFxuXHRcdFx0XHRcdG9wdGlvbnMudHlwZSxcblx0XHRcdFx0XHRvcHRpb25zLnVybCxcblx0XHRcdFx0XHRvcHRpb25zLmFzeW5jLFxuXHRcdFx0XHRcdG9wdGlvbnMudXNlcm5hbWUsXG5cdFx0XHRcdFx0b3B0aW9ucy5wYXNzd29yZFxuXHRcdFx0XHQpO1xuXG5cdFx0XHRcdC8vIEFwcGx5IGN1c3RvbSBmaWVsZHMgaWYgcHJvdmlkZWRcblx0XHRcdFx0aWYgKCBvcHRpb25zLnhockZpZWxkcyApIHtcblx0XHRcdFx0XHRmb3IgKCBpIGluIG9wdGlvbnMueGhyRmllbGRzICkge1xuXHRcdFx0XHRcdFx0eGhyWyBpIF0gPSBvcHRpb25zLnhockZpZWxkc1sgaSBdO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIE92ZXJyaWRlIG1pbWUgdHlwZSBpZiBuZWVkZWRcblx0XHRcdFx0aWYgKCBvcHRpb25zLm1pbWVUeXBlICYmIHhoci5vdmVycmlkZU1pbWVUeXBlICkge1xuXHRcdFx0XHRcdHhoci5vdmVycmlkZU1pbWVUeXBlKCBvcHRpb25zLm1pbWVUeXBlICk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBYLVJlcXVlc3RlZC1XaXRoIGhlYWRlclxuXHRcdFx0XHQvLyBGb3IgY3Jvc3MtZG9tYWluIHJlcXVlc3RzLCBzZWVpbmcgYXMgY29uZGl0aW9ucyBmb3IgYSBwcmVmbGlnaHQgYXJlXG5cdFx0XHRcdC8vIGFraW4gdG8gYSBqaWdzYXcgcHV6emxlLCB3ZSBzaW1wbHkgbmV2ZXIgc2V0IGl0IHRvIGJlIHN1cmUuXG5cdFx0XHRcdC8vIChpdCBjYW4gYWx3YXlzIGJlIHNldCBvbiBhIHBlci1yZXF1ZXN0IGJhc2lzIG9yIGV2ZW4gdXNpbmcgYWpheFNldHVwKVxuXHRcdFx0XHQvLyBGb3Igc2FtZS1kb21haW4gcmVxdWVzdHMsIHdvbid0IGNoYW5nZSBoZWFkZXIgaWYgYWxyZWFkeSBwcm92aWRlZC5cblx0XHRcdFx0aWYgKCAhb3B0aW9ucy5jcm9zc0RvbWFpbiAmJiAhaGVhZGVyc1sgXCJYLVJlcXVlc3RlZC1XaXRoXCIgXSApIHtcblx0XHRcdFx0XHRoZWFkZXJzWyBcIlgtUmVxdWVzdGVkLVdpdGhcIiBdID0gXCJYTUxIdHRwUmVxdWVzdFwiO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gU2V0IGhlYWRlcnNcblx0XHRcdFx0Zm9yICggaSBpbiBoZWFkZXJzICkge1xuXHRcdFx0XHRcdHhoci5zZXRSZXF1ZXN0SGVhZGVyKCBpLCBoZWFkZXJzWyBpIF0gKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIENhbGxiYWNrXG5cdFx0XHRcdGNhbGxiYWNrID0gZnVuY3Rpb24oIHR5cGUgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0aWYgKCBjYWxsYmFjayApIHtcblx0XHRcdFx0XHRcdFx0Y2FsbGJhY2sgPSBlcnJvckNhbGxiYWNrID0geGhyLm9ubG9hZCA9XG5cdFx0XHRcdFx0XHRcdFx0eGhyLm9uZXJyb3IgPSB4aHIub25hYm9ydCA9IHhoci5vbnRpbWVvdXQgPVxuXHRcdFx0XHRcdFx0XHRcdFx0eGhyLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IG51bGw7XG5cblx0XHRcdFx0XHRcdFx0aWYgKCB0eXBlID09PSBcImFib3J0XCIgKSB7XG5cdFx0XHRcdFx0XHRcdFx0eGhyLmFib3J0KCk7XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoIHR5cGUgPT09IFwiZXJyb3JcIiApIHtcblxuXHRcdFx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDw9OSBvbmx5XG5cdFx0XHRcdFx0XHRcdFx0Ly8gT24gYSBtYW51YWwgbmF0aXZlIGFib3J0LCBJRTkgdGhyb3dzXG5cdFx0XHRcdFx0XHRcdFx0Ly8gZXJyb3JzIG9uIGFueSBwcm9wZXJ0eSBhY2Nlc3MgdGhhdCBpcyBub3QgcmVhZHlTdGF0ZVxuXHRcdFx0XHRcdFx0XHRcdGlmICggdHlwZW9mIHhoci5zdGF0dXMgIT09IFwibnVtYmVyXCIgKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRjb21wbGV0ZSggMCwgXCJlcnJvclwiICk7XG5cdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRcdGNvbXBsZXRlKFxuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIEZpbGU6IHByb3RvY29sIGFsd2F5cyB5aWVsZHMgc3RhdHVzIDA7IHNlZSAjODYwNSwgIzE0MjA3XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHhoci5zdGF0dXMsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHhoci5zdGF0dXNUZXh0XG5cdFx0XHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRjb21wbGV0ZShcblx0XHRcdFx0XHRcdFx0XHRcdHhoclN1Y2Nlc3NTdGF0dXNbIHhoci5zdGF0dXMgXSB8fCB4aHIuc3RhdHVzLFxuXHRcdFx0XHRcdFx0XHRcdFx0eGhyLnN0YXR1c1RleHQsXG5cblx0XHRcdFx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDw9OSBvbmx5XG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBJRTkgaGFzIG5vIFhIUjIgYnV0IHRocm93cyBvbiBiaW5hcnkgKHRyYWMtMTE0MjYpXG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBGb3IgWEhSMiBub24tdGV4dCwgbGV0IHRoZSBjYWxsZXIgaGFuZGxlIGl0IChnaC0yNDk4KVxuXHRcdFx0XHRcdFx0XHRcdFx0KCB4aHIucmVzcG9uc2VUeXBlIHx8IFwidGV4dFwiICkgIT09IFwidGV4dFwiICB8fFxuXHRcdFx0XHRcdFx0XHRcdFx0dHlwZW9mIHhoci5yZXNwb25zZVRleHQgIT09IFwic3RyaW5nXCIgP1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR7IGJpbmFyeTogeGhyLnJlc3BvbnNlIH0gOlxuXHRcdFx0XHRcdFx0XHRcdFx0XHR7IHRleHQ6IHhoci5yZXNwb25zZVRleHQgfSxcblx0XHRcdFx0XHRcdFx0XHRcdHhoci5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKVxuXHRcdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9O1xuXHRcdFx0XHR9O1xuXG5cdFx0XHRcdC8vIExpc3RlbiB0byBldmVudHNcblx0XHRcdFx0eGhyLm9ubG9hZCA9IGNhbGxiYWNrKCk7XG5cdFx0XHRcdGVycm9yQ2FsbGJhY2sgPSB4aHIub25lcnJvciA9IHhoci5vbnRpbWVvdXQgPSBjYWxsYmFjayggXCJlcnJvclwiICk7XG5cblx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgOSBvbmx5XG5cdFx0XHRcdC8vIFVzZSBvbnJlYWR5c3RhdGVjaGFuZ2UgdG8gcmVwbGFjZSBvbmFib3J0XG5cdFx0XHRcdC8vIHRvIGhhbmRsZSB1bmNhdWdodCBhYm9ydHNcblx0XHRcdFx0aWYgKCB4aHIub25hYm9ydCAhPT0gdW5kZWZpbmVkICkge1xuXHRcdFx0XHRcdHhoci5vbmFib3J0ID0gZXJyb3JDYWxsYmFjaztcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR4aHIub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24oKSB7XG5cblx0XHRcdFx0XHRcdC8vIENoZWNrIHJlYWR5U3RhdGUgYmVmb3JlIHRpbWVvdXQgYXMgaXQgY2hhbmdlc1xuXHRcdFx0XHRcdFx0aWYgKCB4aHIucmVhZHlTdGF0ZSA9PT0gNCApIHtcblxuXHRcdFx0XHRcdFx0XHQvLyBBbGxvdyBvbmVycm9yIHRvIGJlIGNhbGxlZCBmaXJzdCxcblx0XHRcdFx0XHRcdFx0Ly8gYnV0IHRoYXQgd2lsbCBub3QgaGFuZGxlIGEgbmF0aXZlIGFib3J0XG5cdFx0XHRcdFx0XHRcdC8vIEFsc28sIHNhdmUgZXJyb3JDYWxsYmFjayB0byBhIHZhcmlhYmxlXG5cdFx0XHRcdFx0XHRcdC8vIGFzIHhoci5vbmVycm9yIGNhbm5vdCBiZSBhY2Nlc3NlZFxuXHRcdFx0XHRcdFx0XHR3aW5kb3cuc2V0VGltZW91dCggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKCBjYWxsYmFjayApIHtcblx0XHRcdFx0XHRcdFx0XHRcdGVycm9yQ2FsbGJhY2soKTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH0gKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9O1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gQ3JlYXRlIHRoZSBhYm9ydCBjYWxsYmFja1xuXHRcdFx0XHRjYWxsYmFjayA9IGNhbGxiYWNrKCBcImFib3J0XCIgKTtcblxuXHRcdFx0XHR0cnkge1xuXG5cdFx0XHRcdFx0Ly8gRG8gc2VuZCB0aGUgcmVxdWVzdCAodGhpcyBtYXkgcmFpc2UgYW4gZXhjZXB0aW9uKVxuXHRcdFx0XHRcdHhoci5zZW5kKCBvcHRpb25zLmhhc0NvbnRlbnQgJiYgb3B0aW9ucy5kYXRhIHx8IG51bGwgKTtcblx0XHRcdFx0fSBjYXRjaCAoIGUgKSB7XG5cblx0XHRcdFx0XHQvLyAjMTQ2ODM6IE9ubHkgcmV0aHJvdyBpZiB0aGlzIGhhc24ndCBiZWVuIG5vdGlmaWVkIGFzIGFuIGVycm9yIHlldFxuXHRcdFx0XHRcdGlmICggY2FsbGJhY2sgKSB7XG5cdFx0XHRcdFx0XHR0aHJvdyBlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSxcblxuXHRcdFx0YWJvcnQ6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRpZiAoIGNhbGxiYWNrICkge1xuXHRcdFx0XHRcdGNhbGxiYWNrKCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9O1xuXHR9XG59ICk7XG5cblxuXG5cbi8vIFByZXZlbnQgYXV0by1leGVjdXRpb24gb2Ygc2NyaXB0cyB3aGVuIG5vIGV4cGxpY2l0IGRhdGFUeXBlIHdhcyBwcm92aWRlZCAoU2VlIGdoLTI0MzIpXG5qUXVlcnkuYWpheFByZWZpbHRlciggZnVuY3Rpb24oIHMgKSB7XG5cdGlmICggcy5jcm9zc0RvbWFpbiApIHtcblx0XHRzLmNvbnRlbnRzLnNjcmlwdCA9IGZhbHNlO1xuXHR9XG59ICk7XG5cbi8vIEluc3RhbGwgc2NyaXB0IGRhdGFUeXBlXG5qUXVlcnkuYWpheFNldHVwKCB7XG5cdGFjY2VwdHM6IHtcblx0XHRzY3JpcHQ6IFwidGV4dC9qYXZhc2NyaXB0LCBhcHBsaWNhdGlvbi9qYXZhc2NyaXB0LCBcIiArXG5cdFx0XHRcImFwcGxpY2F0aW9uL2VjbWFzY3JpcHQsIGFwcGxpY2F0aW9uL3gtZWNtYXNjcmlwdFwiXG5cdH0sXG5cdGNvbnRlbnRzOiB7XG5cdFx0c2NyaXB0OiAvXFxiKD86amF2YXxlY21hKXNjcmlwdFxcYi9cblx0fSxcblx0Y29udmVydGVyczoge1xuXHRcdFwidGV4dCBzY3JpcHRcIjogZnVuY3Rpb24oIHRleHQgKSB7XG5cdFx0XHRqUXVlcnkuZ2xvYmFsRXZhbCggdGV4dCApO1xuXHRcdFx0cmV0dXJuIHRleHQ7XG5cdFx0fVxuXHR9XG59ICk7XG5cbi8vIEhhbmRsZSBjYWNoZSdzIHNwZWNpYWwgY2FzZSBhbmQgY3Jvc3NEb21haW5cbmpRdWVyeS5hamF4UHJlZmlsdGVyKCBcInNjcmlwdFwiLCBmdW5jdGlvbiggcyApIHtcblx0aWYgKCBzLmNhY2hlID09PSB1bmRlZmluZWQgKSB7XG5cdFx0cy5jYWNoZSA9IGZhbHNlO1xuXHR9XG5cdGlmICggcy5jcm9zc0RvbWFpbiApIHtcblx0XHRzLnR5cGUgPSBcIkdFVFwiO1xuXHR9XG59ICk7XG5cbi8vIEJpbmQgc2NyaXB0IHRhZyBoYWNrIHRyYW5zcG9ydFxualF1ZXJ5LmFqYXhUcmFuc3BvcnQoIFwic2NyaXB0XCIsIGZ1bmN0aW9uKCBzICkge1xuXG5cdC8vIFRoaXMgdHJhbnNwb3J0IG9ubHkgZGVhbHMgd2l0aCBjcm9zcyBkb21haW4gcmVxdWVzdHNcblx0aWYgKCBzLmNyb3NzRG9tYWluICkge1xuXHRcdHZhciBzY3JpcHQsIGNhbGxiYWNrO1xuXHRcdHJldHVybiB7XG5cdFx0XHRzZW5kOiBmdW5jdGlvbiggXywgY29tcGxldGUgKSB7XG5cdFx0XHRcdHNjcmlwdCA9IGpRdWVyeSggXCI8c2NyaXB0PlwiICkucHJvcCgge1xuXHRcdFx0XHRcdGNoYXJzZXQ6IHMuc2NyaXB0Q2hhcnNldCxcblx0XHRcdFx0XHRzcmM6IHMudXJsXG5cdFx0XHRcdH0gKS5vbihcblx0XHRcdFx0XHRcImxvYWQgZXJyb3JcIixcblx0XHRcdFx0XHRjYWxsYmFjayA9IGZ1bmN0aW9uKCBldnQgKSB7XG5cdFx0XHRcdFx0XHRzY3JpcHQucmVtb3ZlKCk7XG5cdFx0XHRcdFx0XHRjYWxsYmFjayA9IG51bGw7XG5cdFx0XHRcdFx0XHRpZiAoIGV2dCApIHtcblx0XHRcdFx0XHRcdFx0Y29tcGxldGUoIGV2dC50eXBlID09PSBcImVycm9yXCIgPyA0MDQgOiAyMDAsIGV2dC50eXBlICk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHQpO1xuXG5cdFx0XHRcdC8vIFVzZSBuYXRpdmUgRE9NIG1hbmlwdWxhdGlvbiB0byBhdm9pZCBvdXIgZG9tTWFuaXAgQUpBWCB0cmlja2VyeVxuXHRcdFx0XHRkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKCBzY3JpcHRbIDAgXSApO1xuXHRcdFx0fSxcblx0XHRcdGFib3J0OiBmdW5jdGlvbigpIHtcblx0XHRcdFx0aWYgKCBjYWxsYmFjayApIHtcblx0XHRcdFx0XHRjYWxsYmFjaygpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fTtcblx0fVxufSApO1xuXG5cblxuXG52YXIgb2xkQ2FsbGJhY2tzID0gW10sXG5cdHJqc29ucCA9IC8oPSlcXD8oPz0mfCQpfFxcP1xcPy87XG5cbi8vIERlZmF1bHQganNvbnAgc2V0dGluZ3NcbmpRdWVyeS5hamF4U2V0dXAoIHtcblx0anNvbnA6IFwiY2FsbGJhY2tcIixcblx0anNvbnBDYWxsYmFjazogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIGNhbGxiYWNrID0gb2xkQ2FsbGJhY2tzLnBvcCgpIHx8ICggalF1ZXJ5LmV4cGFuZG8gKyBcIl9cIiArICggbm9uY2UrKyApICk7XG5cdFx0dGhpc1sgY2FsbGJhY2sgXSA9IHRydWU7XG5cdFx0cmV0dXJuIGNhbGxiYWNrO1xuXHR9XG59ICk7XG5cbi8vIERldGVjdCwgbm9ybWFsaXplIG9wdGlvbnMgYW5kIGluc3RhbGwgY2FsbGJhY2tzIGZvciBqc29ucCByZXF1ZXN0c1xualF1ZXJ5LmFqYXhQcmVmaWx0ZXIoIFwianNvbiBqc29ucFwiLCBmdW5jdGlvbiggcywgb3JpZ2luYWxTZXR0aW5ncywganFYSFIgKSB7XG5cblx0dmFyIGNhbGxiYWNrTmFtZSwgb3ZlcndyaXR0ZW4sIHJlc3BvbnNlQ29udGFpbmVyLFxuXHRcdGpzb25Qcm9wID0gcy5qc29ucCAhPT0gZmFsc2UgJiYgKCByanNvbnAudGVzdCggcy51cmwgKSA/XG5cdFx0XHRcInVybFwiIDpcblx0XHRcdHR5cGVvZiBzLmRhdGEgPT09IFwic3RyaW5nXCIgJiZcblx0XHRcdFx0KCBzLmNvbnRlbnRUeXBlIHx8IFwiXCIgKVxuXHRcdFx0XHRcdC5pbmRleE9mKCBcImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZFwiICkgPT09IDAgJiZcblx0XHRcdFx0cmpzb25wLnRlc3QoIHMuZGF0YSApICYmIFwiZGF0YVwiXG5cdFx0KTtcblxuXHQvLyBIYW5kbGUgaWZmIHRoZSBleHBlY3RlZCBkYXRhIHR5cGUgaXMgXCJqc29ucFwiIG9yIHdlIGhhdmUgYSBwYXJhbWV0ZXIgdG8gc2V0XG5cdGlmICgganNvblByb3AgfHwgcy5kYXRhVHlwZXNbIDAgXSA9PT0gXCJqc29ucFwiICkge1xuXG5cdFx0Ly8gR2V0IGNhbGxiYWNrIG5hbWUsIHJlbWVtYmVyaW5nIHByZWV4aXN0aW5nIHZhbHVlIGFzc29jaWF0ZWQgd2l0aCBpdFxuXHRcdGNhbGxiYWNrTmFtZSA9IHMuanNvbnBDYWxsYmFjayA9IGlzRnVuY3Rpb24oIHMuanNvbnBDYWxsYmFjayApID9cblx0XHRcdHMuanNvbnBDYWxsYmFjaygpIDpcblx0XHRcdHMuanNvbnBDYWxsYmFjaztcblxuXHRcdC8vIEluc2VydCBjYWxsYmFjayBpbnRvIHVybCBvciBmb3JtIGRhdGFcblx0XHRpZiAoIGpzb25Qcm9wICkge1xuXHRcdFx0c1sganNvblByb3AgXSA9IHNbIGpzb25Qcm9wIF0ucmVwbGFjZSggcmpzb25wLCBcIiQxXCIgKyBjYWxsYmFja05hbWUgKTtcblx0XHR9IGVsc2UgaWYgKCBzLmpzb25wICE9PSBmYWxzZSApIHtcblx0XHRcdHMudXJsICs9ICggcnF1ZXJ5LnRlc3QoIHMudXJsICkgPyBcIiZcIiA6IFwiP1wiICkgKyBzLmpzb25wICsgXCI9XCIgKyBjYWxsYmFja05hbWU7XG5cdFx0fVxuXG5cdFx0Ly8gVXNlIGRhdGEgY29udmVydGVyIHRvIHJldHJpZXZlIGpzb24gYWZ0ZXIgc2NyaXB0IGV4ZWN1dGlvblxuXHRcdHMuY29udmVydGVyc1sgXCJzY3JpcHQganNvblwiIF0gPSBmdW5jdGlvbigpIHtcblx0XHRcdGlmICggIXJlc3BvbnNlQ29udGFpbmVyICkge1xuXHRcdFx0XHRqUXVlcnkuZXJyb3IoIGNhbGxiYWNrTmFtZSArIFwiIHdhcyBub3QgY2FsbGVkXCIgKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiByZXNwb25zZUNvbnRhaW5lclsgMCBdO1xuXHRcdH07XG5cblx0XHQvLyBGb3JjZSBqc29uIGRhdGFUeXBlXG5cdFx0cy5kYXRhVHlwZXNbIDAgXSA9IFwianNvblwiO1xuXG5cdFx0Ly8gSW5zdGFsbCBjYWxsYmFja1xuXHRcdG92ZXJ3cml0dGVuID0gd2luZG93WyBjYWxsYmFja05hbWUgXTtcblx0XHR3aW5kb3dbIGNhbGxiYWNrTmFtZSBdID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRyZXNwb25zZUNvbnRhaW5lciA9IGFyZ3VtZW50cztcblx0XHR9O1xuXG5cdFx0Ly8gQ2xlYW4tdXAgZnVuY3Rpb24gKGZpcmVzIGFmdGVyIGNvbnZlcnRlcnMpXG5cdFx0anFYSFIuYWx3YXlzKCBmdW5jdGlvbigpIHtcblxuXHRcdFx0Ly8gSWYgcHJldmlvdXMgdmFsdWUgZGlkbid0IGV4aXN0IC0gcmVtb3ZlIGl0XG5cdFx0XHRpZiAoIG92ZXJ3cml0dGVuID09PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRcdGpRdWVyeSggd2luZG93ICkucmVtb3ZlUHJvcCggY2FsbGJhY2tOYW1lICk7XG5cblx0XHRcdC8vIE90aGVyd2lzZSByZXN0b3JlIHByZWV4aXN0aW5nIHZhbHVlXG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR3aW5kb3dbIGNhbGxiYWNrTmFtZSBdID0gb3ZlcndyaXR0ZW47XG5cdFx0XHR9XG5cblx0XHRcdC8vIFNhdmUgYmFjayBhcyBmcmVlXG5cdFx0XHRpZiAoIHNbIGNhbGxiYWNrTmFtZSBdICkge1xuXG5cdFx0XHRcdC8vIE1ha2Ugc3VyZSB0aGF0IHJlLXVzaW5nIHRoZSBvcHRpb25zIGRvZXNuJ3Qgc2NyZXcgdGhpbmdzIGFyb3VuZFxuXHRcdFx0XHRzLmpzb25wQ2FsbGJhY2sgPSBvcmlnaW5hbFNldHRpbmdzLmpzb25wQ2FsbGJhY2s7XG5cblx0XHRcdFx0Ly8gU2F2ZSB0aGUgY2FsbGJhY2sgbmFtZSBmb3IgZnV0dXJlIHVzZVxuXHRcdFx0XHRvbGRDYWxsYmFja3MucHVzaCggY2FsbGJhY2tOYW1lICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIENhbGwgaWYgaXQgd2FzIGEgZnVuY3Rpb24gYW5kIHdlIGhhdmUgYSByZXNwb25zZVxuXHRcdFx0aWYgKCByZXNwb25zZUNvbnRhaW5lciAmJiBpc0Z1bmN0aW9uKCBvdmVyd3JpdHRlbiApICkge1xuXHRcdFx0XHRvdmVyd3JpdHRlbiggcmVzcG9uc2VDb250YWluZXJbIDAgXSApO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXNwb25zZUNvbnRhaW5lciA9IG92ZXJ3cml0dGVuID0gdW5kZWZpbmVkO1xuXHRcdH0gKTtcblxuXHRcdC8vIERlbGVnYXRlIHRvIHNjcmlwdFxuXHRcdHJldHVybiBcInNjcmlwdFwiO1xuXHR9XG59ICk7XG5cblxuXG5cbi8vIFN1cHBvcnQ6IFNhZmFyaSA4IG9ubHlcbi8vIEluIFNhZmFyaSA4IGRvY3VtZW50cyBjcmVhdGVkIHZpYSBkb2N1bWVudC5pbXBsZW1lbnRhdGlvbi5jcmVhdGVIVE1MRG9jdW1lbnRcbi8vIGNvbGxhcHNlIHNpYmxpbmcgZm9ybXM6IHRoZSBzZWNvbmQgb25lIGJlY29tZXMgYSBjaGlsZCBvZiB0aGUgZmlyc3Qgb25lLlxuLy8gQmVjYXVzZSBvZiB0aGF0LCB0aGlzIHNlY3VyaXR5IG1lYXN1cmUgaGFzIHRvIGJlIGRpc2FibGVkIGluIFNhZmFyaSA4LlxuLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNzMzN1xuc3VwcG9ydC5jcmVhdGVIVE1MRG9jdW1lbnQgPSAoIGZ1bmN0aW9uKCkge1xuXHR2YXIgYm9keSA9IGRvY3VtZW50LmltcGxlbWVudGF0aW9uLmNyZWF0ZUhUTUxEb2N1bWVudCggXCJcIiApLmJvZHk7XG5cdGJvZHkuaW5uZXJIVE1MID0gXCI8Zm9ybT48L2Zvcm0+PGZvcm0+PC9mb3JtPlwiO1xuXHRyZXR1cm4gYm9keS5jaGlsZE5vZGVzLmxlbmd0aCA9PT0gMjtcbn0gKSgpO1xuXG5cbi8vIEFyZ3VtZW50IFwiZGF0YVwiIHNob3VsZCBiZSBzdHJpbmcgb2YgaHRtbFxuLy8gY29udGV4dCAob3B0aW9uYWwpOiBJZiBzcGVjaWZpZWQsIHRoZSBmcmFnbWVudCB3aWxsIGJlIGNyZWF0ZWQgaW4gdGhpcyBjb250ZXh0LFxuLy8gZGVmYXVsdHMgdG8gZG9jdW1lbnRcbi8vIGtlZXBTY3JpcHRzIChvcHRpb25hbCk6IElmIHRydWUsIHdpbGwgaW5jbHVkZSBzY3JpcHRzIHBhc3NlZCBpbiB0aGUgaHRtbCBzdHJpbmdcbmpRdWVyeS5wYXJzZUhUTUwgPSBmdW5jdGlvbiggZGF0YSwgY29udGV4dCwga2VlcFNjcmlwdHMgKSB7XG5cdGlmICggdHlwZW9mIGRhdGEgIT09IFwic3RyaW5nXCIgKSB7XG5cdFx0cmV0dXJuIFtdO1xuXHR9XG5cdGlmICggdHlwZW9mIGNvbnRleHQgPT09IFwiYm9vbGVhblwiICkge1xuXHRcdGtlZXBTY3JpcHRzID0gY29udGV4dDtcblx0XHRjb250ZXh0ID0gZmFsc2U7XG5cdH1cblxuXHR2YXIgYmFzZSwgcGFyc2VkLCBzY3JpcHRzO1xuXG5cdGlmICggIWNvbnRleHQgKSB7XG5cblx0XHQvLyBTdG9wIHNjcmlwdHMgb3IgaW5saW5lIGV2ZW50IGhhbmRsZXJzIGZyb20gYmVpbmcgZXhlY3V0ZWQgaW1tZWRpYXRlbHlcblx0XHQvLyBieSB1c2luZyBkb2N1bWVudC5pbXBsZW1lbnRhdGlvblxuXHRcdGlmICggc3VwcG9ydC5jcmVhdGVIVE1MRG9jdW1lbnQgKSB7XG5cdFx0XHRjb250ZXh0ID0gZG9jdW1lbnQuaW1wbGVtZW50YXRpb24uY3JlYXRlSFRNTERvY3VtZW50KCBcIlwiICk7XG5cblx0XHRcdC8vIFNldCB0aGUgYmFzZSBocmVmIGZvciB0aGUgY3JlYXRlZCBkb2N1bWVudFxuXHRcdFx0Ly8gc28gYW55IHBhcnNlZCBlbGVtZW50cyB3aXRoIFVSTHNcblx0XHRcdC8vIGFyZSBiYXNlZCBvbiB0aGUgZG9jdW1lbnQncyBVUkwgKGdoLTI5NjUpXG5cdFx0XHRiYXNlID0gY29udGV4dC5jcmVhdGVFbGVtZW50KCBcImJhc2VcIiApO1xuXHRcdFx0YmFzZS5ocmVmID0gZG9jdW1lbnQubG9jYXRpb24uaHJlZjtcblx0XHRcdGNvbnRleHQuaGVhZC5hcHBlbmRDaGlsZCggYmFzZSApO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRjb250ZXh0ID0gZG9jdW1lbnQ7XG5cdFx0fVxuXHR9XG5cblx0cGFyc2VkID0gcnNpbmdsZVRhZy5leGVjKCBkYXRhICk7XG5cdHNjcmlwdHMgPSAha2VlcFNjcmlwdHMgJiYgW107XG5cblx0Ly8gU2luZ2xlIHRhZ1xuXHRpZiAoIHBhcnNlZCApIHtcblx0XHRyZXR1cm4gWyBjb250ZXh0LmNyZWF0ZUVsZW1lbnQoIHBhcnNlZFsgMSBdICkgXTtcblx0fVxuXG5cdHBhcnNlZCA9IGJ1aWxkRnJhZ21lbnQoIFsgZGF0YSBdLCBjb250ZXh0LCBzY3JpcHRzICk7XG5cblx0aWYgKCBzY3JpcHRzICYmIHNjcmlwdHMubGVuZ3RoICkge1xuXHRcdGpRdWVyeSggc2NyaXB0cyApLnJlbW92ZSgpO1xuXHR9XG5cblx0cmV0dXJuIGpRdWVyeS5tZXJnZSggW10sIHBhcnNlZC5jaGlsZE5vZGVzICk7XG59O1xuXG5cbi8qKlxuICogTG9hZCBhIHVybCBpbnRvIGEgcGFnZVxuICovXG5qUXVlcnkuZm4ubG9hZCA9IGZ1bmN0aW9uKCB1cmwsIHBhcmFtcywgY2FsbGJhY2sgKSB7XG5cdHZhciBzZWxlY3RvciwgdHlwZSwgcmVzcG9uc2UsXG5cdFx0c2VsZiA9IHRoaXMsXG5cdFx0b2ZmID0gdXJsLmluZGV4T2YoIFwiIFwiICk7XG5cblx0aWYgKCBvZmYgPiAtMSApIHtcblx0XHRzZWxlY3RvciA9IHN0cmlwQW5kQ29sbGFwc2UoIHVybC5zbGljZSggb2ZmICkgKTtcblx0XHR1cmwgPSB1cmwuc2xpY2UoIDAsIG9mZiApO1xuXHR9XG5cblx0Ly8gSWYgaXQncyBhIGZ1bmN0aW9uXG5cdGlmICggaXNGdW5jdGlvbiggcGFyYW1zICkgKSB7XG5cblx0XHQvLyBXZSBhc3N1bWUgdGhhdCBpdCdzIHRoZSBjYWxsYmFja1xuXHRcdGNhbGxiYWNrID0gcGFyYW1zO1xuXHRcdHBhcmFtcyA9IHVuZGVmaW5lZDtcblxuXHQvLyBPdGhlcndpc2UsIGJ1aWxkIGEgcGFyYW0gc3RyaW5nXG5cdH0gZWxzZSBpZiAoIHBhcmFtcyAmJiB0eXBlb2YgcGFyYW1zID09PSBcIm9iamVjdFwiICkge1xuXHRcdHR5cGUgPSBcIlBPU1RcIjtcblx0fVxuXG5cdC8vIElmIHdlIGhhdmUgZWxlbWVudHMgdG8gbW9kaWZ5LCBtYWtlIHRoZSByZXF1ZXN0XG5cdGlmICggc2VsZi5sZW5ndGggPiAwICkge1xuXHRcdGpRdWVyeS5hamF4KCB7XG5cdFx0XHR1cmw6IHVybCxcblxuXHRcdFx0Ly8gSWYgXCJ0eXBlXCIgdmFyaWFibGUgaXMgdW5kZWZpbmVkLCB0aGVuIFwiR0VUXCIgbWV0aG9kIHdpbGwgYmUgdXNlZC5cblx0XHRcdC8vIE1ha2UgdmFsdWUgb2YgdGhpcyBmaWVsZCBleHBsaWNpdCBzaW5jZVxuXHRcdFx0Ly8gdXNlciBjYW4gb3ZlcnJpZGUgaXQgdGhyb3VnaCBhamF4U2V0dXAgbWV0aG9kXG5cdFx0XHR0eXBlOiB0eXBlIHx8IFwiR0VUXCIsXG5cdFx0XHRkYXRhVHlwZTogXCJodG1sXCIsXG5cdFx0XHRkYXRhOiBwYXJhbXNcblx0XHR9ICkuZG9uZSggZnVuY3Rpb24oIHJlc3BvbnNlVGV4dCApIHtcblxuXHRcdFx0Ly8gU2F2ZSByZXNwb25zZSBmb3IgdXNlIGluIGNvbXBsZXRlIGNhbGxiYWNrXG5cdFx0XHRyZXNwb25zZSA9IGFyZ3VtZW50cztcblxuXHRcdFx0c2VsZi5odG1sKCBzZWxlY3RvciA/XG5cblx0XHRcdFx0Ly8gSWYgYSBzZWxlY3RvciB3YXMgc3BlY2lmaWVkLCBsb2NhdGUgdGhlIHJpZ2h0IGVsZW1lbnRzIGluIGEgZHVtbXkgZGl2XG5cdFx0XHRcdC8vIEV4Y2x1ZGUgc2NyaXB0cyB0byBhdm9pZCBJRSAnUGVybWlzc2lvbiBEZW5pZWQnIGVycm9yc1xuXHRcdFx0XHRqUXVlcnkoIFwiPGRpdj5cIiApLmFwcGVuZCggalF1ZXJ5LnBhcnNlSFRNTCggcmVzcG9uc2VUZXh0ICkgKS5maW5kKCBzZWxlY3RvciApIDpcblxuXHRcdFx0XHQvLyBPdGhlcndpc2UgdXNlIHRoZSBmdWxsIHJlc3VsdFxuXHRcdFx0XHRyZXNwb25zZVRleHQgKTtcblxuXHRcdC8vIElmIHRoZSByZXF1ZXN0IHN1Y2NlZWRzLCB0aGlzIGZ1bmN0aW9uIGdldHMgXCJkYXRhXCIsIFwic3RhdHVzXCIsIFwianFYSFJcIlxuXHRcdC8vIGJ1dCB0aGV5IGFyZSBpZ25vcmVkIGJlY2F1c2UgcmVzcG9uc2Ugd2FzIHNldCBhYm92ZS5cblx0XHQvLyBJZiBpdCBmYWlscywgdGhpcyBmdW5jdGlvbiBnZXRzIFwianFYSFJcIiwgXCJzdGF0dXNcIiwgXCJlcnJvclwiXG5cdFx0fSApLmFsd2F5cyggY2FsbGJhY2sgJiYgZnVuY3Rpb24oIGpxWEhSLCBzdGF0dXMgKSB7XG5cdFx0XHRzZWxmLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRjYWxsYmFjay5hcHBseSggdGhpcywgcmVzcG9uc2UgfHwgWyBqcVhIUi5yZXNwb25zZVRleHQsIHN0YXR1cywganFYSFIgXSApO1xuXHRcdFx0fSApO1xuXHRcdH0gKTtcblx0fVxuXG5cdHJldHVybiB0aGlzO1xufTtcblxuXG5cblxuLy8gQXR0YWNoIGEgYnVuY2ggb2YgZnVuY3Rpb25zIGZvciBoYW5kbGluZyBjb21tb24gQUpBWCBldmVudHNcbmpRdWVyeS5lYWNoKCBbXG5cdFwiYWpheFN0YXJ0XCIsXG5cdFwiYWpheFN0b3BcIixcblx0XCJhamF4Q29tcGxldGVcIixcblx0XCJhamF4RXJyb3JcIixcblx0XCJhamF4U3VjY2Vzc1wiLFxuXHRcImFqYXhTZW5kXCJcbl0sIGZ1bmN0aW9uKCBpLCB0eXBlICkge1xuXHRqUXVlcnkuZm5bIHR5cGUgXSA9IGZ1bmN0aW9uKCBmbiApIHtcblx0XHRyZXR1cm4gdGhpcy5vbiggdHlwZSwgZm4gKTtcblx0fTtcbn0gKTtcblxuXG5cblxualF1ZXJ5LmV4cHIucHNldWRvcy5hbmltYXRlZCA9IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRyZXR1cm4galF1ZXJ5LmdyZXAoIGpRdWVyeS50aW1lcnMsIGZ1bmN0aW9uKCBmbiApIHtcblx0XHRyZXR1cm4gZWxlbSA9PT0gZm4uZWxlbTtcblx0fSApLmxlbmd0aDtcbn07XG5cblxuXG5cbmpRdWVyeS5vZmZzZXQgPSB7XG5cdHNldE9mZnNldDogZnVuY3Rpb24oIGVsZW0sIG9wdGlvbnMsIGkgKSB7XG5cdFx0dmFyIGN1clBvc2l0aW9uLCBjdXJMZWZ0LCBjdXJDU1NUb3AsIGN1clRvcCwgY3VyT2Zmc2V0LCBjdXJDU1NMZWZ0LCBjYWxjdWxhdGVQb3NpdGlvbixcblx0XHRcdHBvc2l0aW9uID0galF1ZXJ5LmNzcyggZWxlbSwgXCJwb3NpdGlvblwiICksXG5cdFx0XHRjdXJFbGVtID0galF1ZXJ5KCBlbGVtICksXG5cdFx0XHRwcm9wcyA9IHt9O1xuXG5cdFx0Ly8gU2V0IHBvc2l0aW9uIGZpcnN0LCBpbi1jYXNlIHRvcC9sZWZ0IGFyZSBzZXQgZXZlbiBvbiBzdGF0aWMgZWxlbVxuXHRcdGlmICggcG9zaXRpb24gPT09IFwic3RhdGljXCIgKSB7XG5cdFx0XHRlbGVtLnN0eWxlLnBvc2l0aW9uID0gXCJyZWxhdGl2ZVwiO1xuXHRcdH1cblxuXHRcdGN1ck9mZnNldCA9IGN1ckVsZW0ub2Zmc2V0KCk7XG5cdFx0Y3VyQ1NTVG9wID0galF1ZXJ5LmNzcyggZWxlbSwgXCJ0b3BcIiApO1xuXHRcdGN1ckNTU0xlZnQgPSBqUXVlcnkuY3NzKCBlbGVtLCBcImxlZnRcIiApO1xuXHRcdGNhbGN1bGF0ZVBvc2l0aW9uID0gKCBwb3NpdGlvbiA9PT0gXCJhYnNvbHV0ZVwiIHx8IHBvc2l0aW9uID09PSBcImZpeGVkXCIgKSAmJlxuXHRcdFx0KCBjdXJDU1NUb3AgKyBjdXJDU1NMZWZ0ICkuaW5kZXhPZiggXCJhdXRvXCIgKSA+IC0xO1xuXG5cdFx0Ly8gTmVlZCB0byBiZSBhYmxlIHRvIGNhbGN1bGF0ZSBwb3NpdGlvbiBpZiBlaXRoZXJcblx0XHQvLyB0b3Agb3IgbGVmdCBpcyBhdXRvIGFuZCBwb3NpdGlvbiBpcyBlaXRoZXIgYWJzb2x1dGUgb3IgZml4ZWRcblx0XHRpZiAoIGNhbGN1bGF0ZVBvc2l0aW9uICkge1xuXHRcdFx0Y3VyUG9zaXRpb24gPSBjdXJFbGVtLnBvc2l0aW9uKCk7XG5cdFx0XHRjdXJUb3AgPSBjdXJQb3NpdGlvbi50b3A7XG5cdFx0XHRjdXJMZWZ0ID0gY3VyUG9zaXRpb24ubGVmdDtcblxuXHRcdH0gZWxzZSB7XG5cdFx0XHRjdXJUb3AgPSBwYXJzZUZsb2F0KCBjdXJDU1NUb3AgKSB8fCAwO1xuXHRcdFx0Y3VyTGVmdCA9IHBhcnNlRmxvYXQoIGN1ckNTU0xlZnQgKSB8fCAwO1xuXHRcdH1cblxuXHRcdGlmICggaXNGdW5jdGlvbiggb3B0aW9ucyApICkge1xuXG5cdFx0XHQvLyBVc2UgalF1ZXJ5LmV4dGVuZCBoZXJlIHRvIGFsbG93IG1vZGlmaWNhdGlvbiBvZiBjb29yZGluYXRlcyBhcmd1bWVudCAoZ2gtMTg0OClcblx0XHRcdG9wdGlvbnMgPSBvcHRpb25zLmNhbGwoIGVsZW0sIGksIGpRdWVyeS5leHRlbmQoIHt9LCBjdXJPZmZzZXQgKSApO1xuXHRcdH1cblxuXHRcdGlmICggb3B0aW9ucy50b3AgIT0gbnVsbCApIHtcblx0XHRcdHByb3BzLnRvcCA9ICggb3B0aW9ucy50b3AgLSBjdXJPZmZzZXQudG9wICkgKyBjdXJUb3A7XG5cdFx0fVxuXHRcdGlmICggb3B0aW9ucy5sZWZ0ICE9IG51bGwgKSB7XG5cdFx0XHRwcm9wcy5sZWZ0ID0gKCBvcHRpb25zLmxlZnQgLSBjdXJPZmZzZXQubGVmdCApICsgY3VyTGVmdDtcblx0XHR9XG5cblx0XHRpZiAoIFwidXNpbmdcIiBpbiBvcHRpb25zICkge1xuXHRcdFx0b3B0aW9ucy51c2luZy5jYWxsKCBlbGVtLCBwcm9wcyApO1xuXG5cdFx0fSBlbHNlIHtcblx0XHRcdGN1ckVsZW0uY3NzKCBwcm9wcyApO1xuXHRcdH1cblx0fVxufTtcblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXG5cdC8vIG9mZnNldCgpIHJlbGF0ZXMgYW4gZWxlbWVudCdzIGJvcmRlciBib3ggdG8gdGhlIGRvY3VtZW50IG9yaWdpblxuXHRvZmZzZXQ6IGZ1bmN0aW9uKCBvcHRpb25zICkge1xuXG5cdFx0Ly8gUHJlc2VydmUgY2hhaW5pbmcgZm9yIHNldHRlclxuXHRcdGlmICggYXJndW1lbnRzLmxlbmd0aCApIHtcblx0XHRcdHJldHVybiBvcHRpb25zID09PSB1bmRlZmluZWQgP1xuXHRcdFx0XHR0aGlzIDpcblx0XHRcdFx0dGhpcy5lYWNoKCBmdW5jdGlvbiggaSApIHtcblx0XHRcdFx0XHRqUXVlcnkub2Zmc2V0LnNldE9mZnNldCggdGhpcywgb3B0aW9ucywgaSApO1xuXHRcdFx0XHR9ICk7XG5cdFx0fVxuXG5cdFx0dmFyIHJlY3QsIHdpbixcblx0XHRcdGVsZW0gPSB0aGlzWyAwIF07XG5cblx0XHRpZiAoICFlbGVtICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIFJldHVybiB6ZXJvcyBmb3IgZGlzY29ubmVjdGVkIGFuZCBoaWRkZW4gKGRpc3BsYXk6IG5vbmUpIGVsZW1lbnRzIChnaC0yMzEwKVxuXHRcdC8vIFN1cHBvcnQ6IElFIDw9MTEgb25seVxuXHRcdC8vIFJ1bm5pbmcgZ2V0Qm91bmRpbmdDbGllbnRSZWN0IG9uIGFcblx0XHQvLyBkaXNjb25uZWN0ZWQgbm9kZSBpbiBJRSB0aHJvd3MgYW4gZXJyb3Jcblx0XHRpZiAoICFlbGVtLmdldENsaWVudFJlY3RzKCkubGVuZ3RoICkge1xuXHRcdFx0cmV0dXJuIHsgdG9wOiAwLCBsZWZ0OiAwIH07XG5cdFx0fVxuXG5cdFx0Ly8gR2V0IGRvY3VtZW50LXJlbGF0aXZlIHBvc2l0aW9uIGJ5IGFkZGluZyB2aWV3cG9ydCBzY3JvbGwgdG8gdmlld3BvcnQtcmVsYXRpdmUgZ0JDUlxuXHRcdHJlY3QgPSBlbGVtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXHRcdHdpbiA9IGVsZW0ub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlldztcblx0XHRyZXR1cm4ge1xuXHRcdFx0dG9wOiByZWN0LnRvcCArIHdpbi5wYWdlWU9mZnNldCxcblx0XHRcdGxlZnQ6IHJlY3QubGVmdCArIHdpbi5wYWdlWE9mZnNldFxuXHRcdH07XG5cdH0sXG5cblx0Ly8gcG9zaXRpb24oKSByZWxhdGVzIGFuIGVsZW1lbnQncyBtYXJnaW4gYm94IHRvIGl0cyBvZmZzZXQgcGFyZW50J3MgcGFkZGluZyBib3hcblx0Ly8gVGhpcyBjb3JyZXNwb25kcyB0byB0aGUgYmVoYXZpb3Igb2YgQ1NTIGFic29sdXRlIHBvc2l0aW9uaW5nXG5cdHBvc2l0aW9uOiBmdW5jdGlvbigpIHtcblx0XHRpZiAoICF0aGlzWyAwIF0gKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0dmFyIG9mZnNldFBhcmVudCwgb2Zmc2V0LCBkb2MsXG5cdFx0XHRlbGVtID0gdGhpc1sgMCBdLFxuXHRcdFx0cGFyZW50T2Zmc2V0ID0geyB0b3A6IDAsIGxlZnQ6IDAgfTtcblxuXHRcdC8vIHBvc2l0aW9uOmZpeGVkIGVsZW1lbnRzIGFyZSBvZmZzZXQgZnJvbSB0aGUgdmlld3BvcnQsIHdoaWNoIGl0c2VsZiBhbHdheXMgaGFzIHplcm8gb2Zmc2V0XG5cdFx0aWYgKCBqUXVlcnkuY3NzKCBlbGVtLCBcInBvc2l0aW9uXCIgKSA9PT0gXCJmaXhlZFwiICkge1xuXG5cdFx0XHQvLyBBc3N1bWUgcG9zaXRpb246Zml4ZWQgaW1wbGllcyBhdmFpbGFiaWxpdHkgb2YgZ2V0Qm91bmRpbmdDbGllbnRSZWN0XG5cdFx0XHRvZmZzZXQgPSBlbGVtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG5cdFx0fSBlbHNlIHtcblx0XHRcdG9mZnNldCA9IHRoaXMub2Zmc2V0KCk7XG5cblx0XHRcdC8vIEFjY291bnQgZm9yIHRoZSAqcmVhbCogb2Zmc2V0IHBhcmVudCwgd2hpY2ggY2FuIGJlIHRoZSBkb2N1bWVudCBvciBpdHMgcm9vdCBlbGVtZW50XG5cdFx0XHQvLyB3aGVuIGEgc3RhdGljYWxseSBwb3NpdGlvbmVkIGVsZW1lbnQgaXMgaWRlbnRpZmllZFxuXHRcdFx0ZG9jID0gZWxlbS5vd25lckRvY3VtZW50O1xuXHRcdFx0b2Zmc2V0UGFyZW50ID0gZWxlbS5vZmZzZXRQYXJlbnQgfHwgZG9jLmRvY3VtZW50RWxlbWVudDtcblx0XHRcdHdoaWxlICggb2Zmc2V0UGFyZW50ICYmXG5cdFx0XHRcdCggb2Zmc2V0UGFyZW50ID09PSBkb2MuYm9keSB8fCBvZmZzZXRQYXJlbnQgPT09IGRvYy5kb2N1bWVudEVsZW1lbnQgKSAmJlxuXHRcdFx0XHRqUXVlcnkuY3NzKCBvZmZzZXRQYXJlbnQsIFwicG9zaXRpb25cIiApID09PSBcInN0YXRpY1wiICkge1xuXG5cdFx0XHRcdG9mZnNldFBhcmVudCA9IG9mZnNldFBhcmVudC5wYXJlbnROb2RlO1xuXHRcdFx0fVxuXHRcdFx0aWYgKCBvZmZzZXRQYXJlbnQgJiYgb2Zmc2V0UGFyZW50ICE9PSBlbGVtICYmIG9mZnNldFBhcmVudC5ub2RlVHlwZSA9PT0gMSApIHtcblxuXHRcdFx0XHQvLyBJbmNvcnBvcmF0ZSBib3JkZXJzIGludG8gaXRzIG9mZnNldCwgc2luY2UgdGhleSBhcmUgb3V0c2lkZSBpdHMgY29udGVudCBvcmlnaW5cblx0XHRcdFx0cGFyZW50T2Zmc2V0ID0galF1ZXJ5KCBvZmZzZXRQYXJlbnQgKS5vZmZzZXQoKTtcblx0XHRcdFx0cGFyZW50T2Zmc2V0LnRvcCArPSBqUXVlcnkuY3NzKCBvZmZzZXRQYXJlbnQsIFwiYm9yZGVyVG9wV2lkdGhcIiwgdHJ1ZSApO1xuXHRcdFx0XHRwYXJlbnRPZmZzZXQubGVmdCArPSBqUXVlcnkuY3NzKCBvZmZzZXRQYXJlbnQsIFwiYm9yZGVyTGVmdFdpZHRoXCIsIHRydWUgKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBTdWJ0cmFjdCBwYXJlbnQgb2Zmc2V0cyBhbmQgZWxlbWVudCBtYXJnaW5zXG5cdFx0cmV0dXJuIHtcblx0XHRcdHRvcDogb2Zmc2V0LnRvcCAtIHBhcmVudE9mZnNldC50b3AgLSBqUXVlcnkuY3NzKCBlbGVtLCBcIm1hcmdpblRvcFwiLCB0cnVlICksXG5cdFx0XHRsZWZ0OiBvZmZzZXQubGVmdCAtIHBhcmVudE9mZnNldC5sZWZ0IC0galF1ZXJ5LmNzcyggZWxlbSwgXCJtYXJnaW5MZWZ0XCIsIHRydWUgKVxuXHRcdH07XG5cdH0sXG5cblx0Ly8gVGhpcyBtZXRob2Qgd2lsbCByZXR1cm4gZG9jdW1lbnRFbGVtZW50IGluIHRoZSBmb2xsb3dpbmcgY2FzZXM6XG5cdC8vIDEpIEZvciB0aGUgZWxlbWVudCBpbnNpZGUgdGhlIGlmcmFtZSB3aXRob3V0IG9mZnNldFBhcmVudCwgdGhpcyBtZXRob2Qgd2lsbCByZXR1cm5cblx0Ly8gICAgZG9jdW1lbnRFbGVtZW50IG9mIHRoZSBwYXJlbnQgd2luZG93XG5cdC8vIDIpIEZvciB0aGUgaGlkZGVuIG9yIGRldGFjaGVkIGVsZW1lbnRcblx0Ly8gMykgRm9yIGJvZHkgb3IgaHRtbCBlbGVtZW50LCBpLmUuIGluIGNhc2Ugb2YgdGhlIGh0bWwgbm9kZSAtIGl0IHdpbGwgcmV0dXJuIGl0c2VsZlxuXHQvL1xuXHQvLyBidXQgdGhvc2UgZXhjZXB0aW9ucyB3ZXJlIG5ldmVyIHByZXNlbnRlZCBhcyBhIHJlYWwgbGlmZSB1c2UtY2FzZXNcblx0Ly8gYW5kIG1pZ2h0IGJlIGNvbnNpZGVyZWQgYXMgbW9yZSBwcmVmZXJhYmxlIHJlc3VsdHMuXG5cdC8vXG5cdC8vIFRoaXMgbG9naWMsIGhvd2V2ZXIsIGlzIG5vdCBndWFyYW50ZWVkIGFuZCBjYW4gY2hhbmdlIGF0IGFueSBwb2ludCBpbiB0aGUgZnV0dXJlXG5cdG9mZnNldFBhcmVudDogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHRoaXMubWFwKCBmdW5jdGlvbigpIHtcblx0XHRcdHZhciBvZmZzZXRQYXJlbnQgPSB0aGlzLm9mZnNldFBhcmVudDtcblxuXHRcdFx0d2hpbGUgKCBvZmZzZXRQYXJlbnQgJiYgalF1ZXJ5LmNzcyggb2Zmc2V0UGFyZW50LCBcInBvc2l0aW9uXCIgKSA9PT0gXCJzdGF0aWNcIiApIHtcblx0XHRcdFx0b2Zmc2V0UGFyZW50ID0gb2Zmc2V0UGFyZW50Lm9mZnNldFBhcmVudDtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIG9mZnNldFBhcmVudCB8fCBkb2N1bWVudEVsZW1lbnQ7XG5cdFx0fSApO1xuXHR9XG59ICk7XG5cbi8vIENyZWF0ZSBzY3JvbGxMZWZ0IGFuZCBzY3JvbGxUb3AgbWV0aG9kc1xualF1ZXJ5LmVhY2goIHsgc2Nyb2xsTGVmdDogXCJwYWdlWE9mZnNldFwiLCBzY3JvbGxUb3A6IFwicGFnZVlPZmZzZXRcIiB9LCBmdW5jdGlvbiggbWV0aG9kLCBwcm9wICkge1xuXHR2YXIgdG9wID0gXCJwYWdlWU9mZnNldFwiID09PSBwcm9wO1xuXG5cdGpRdWVyeS5mblsgbWV0aG9kIF0gPSBmdW5jdGlvbiggdmFsICkge1xuXHRcdHJldHVybiBhY2Nlc3MoIHRoaXMsIGZ1bmN0aW9uKCBlbGVtLCBtZXRob2QsIHZhbCApIHtcblxuXHRcdFx0Ly8gQ29hbGVzY2UgZG9jdW1lbnRzIGFuZCB3aW5kb3dzXG5cdFx0XHR2YXIgd2luO1xuXHRcdFx0aWYgKCBpc1dpbmRvdyggZWxlbSApICkge1xuXHRcdFx0XHR3aW4gPSBlbGVtO1xuXHRcdFx0fSBlbHNlIGlmICggZWxlbS5ub2RlVHlwZSA9PT0gOSApIHtcblx0XHRcdFx0d2luID0gZWxlbS5kZWZhdWx0Vmlldztcblx0XHRcdH1cblxuXHRcdFx0aWYgKCB2YWwgPT09IHVuZGVmaW5lZCApIHtcblx0XHRcdFx0cmV0dXJuIHdpbiA/IHdpblsgcHJvcCBdIDogZWxlbVsgbWV0aG9kIF07XG5cdFx0XHR9XG5cblx0XHRcdGlmICggd2luICkge1xuXHRcdFx0XHR3aW4uc2Nyb2xsVG8oXG5cdFx0XHRcdFx0IXRvcCA/IHZhbCA6IHdpbi5wYWdlWE9mZnNldCxcblx0XHRcdFx0XHR0b3AgPyB2YWwgOiB3aW4ucGFnZVlPZmZzZXRcblx0XHRcdFx0KTtcblxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0ZWxlbVsgbWV0aG9kIF0gPSB2YWw7XG5cdFx0XHR9XG5cdFx0fSwgbWV0aG9kLCB2YWwsIGFyZ3VtZW50cy5sZW5ndGggKTtcblx0fTtcbn0gKTtcblxuLy8gU3VwcG9ydDogU2FmYXJpIDw9NyAtIDkuMSwgQ2hyb21lIDw9MzcgLSA0OVxuLy8gQWRkIHRoZSB0b3AvbGVmdCBjc3NIb29rcyB1c2luZyBqUXVlcnkuZm4ucG9zaXRpb25cbi8vIFdlYmtpdCBidWc6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yOTA4NFxuLy8gQmxpbmsgYnVnOiBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD01ODkzNDdcbi8vIGdldENvbXB1dGVkU3R5bGUgcmV0dXJucyBwZXJjZW50IHdoZW4gc3BlY2lmaWVkIGZvciB0b3AvbGVmdC9ib3R0b20vcmlnaHQ7XG4vLyByYXRoZXIgdGhhbiBtYWtlIHRoZSBjc3MgbW9kdWxlIGRlcGVuZCBvbiB0aGUgb2Zmc2V0IG1vZHVsZSwganVzdCBjaGVjayBmb3IgaXQgaGVyZVxualF1ZXJ5LmVhY2goIFsgXCJ0b3BcIiwgXCJsZWZ0XCIgXSwgZnVuY3Rpb24oIGksIHByb3AgKSB7XG5cdGpRdWVyeS5jc3NIb29rc1sgcHJvcCBdID0gYWRkR2V0SG9va0lmKCBzdXBwb3J0LnBpeGVsUG9zaXRpb24sXG5cdFx0ZnVuY3Rpb24oIGVsZW0sIGNvbXB1dGVkICkge1xuXHRcdFx0aWYgKCBjb21wdXRlZCApIHtcblx0XHRcdFx0Y29tcHV0ZWQgPSBjdXJDU1MoIGVsZW0sIHByb3AgKTtcblxuXHRcdFx0XHQvLyBJZiBjdXJDU1MgcmV0dXJucyBwZXJjZW50YWdlLCBmYWxsYmFjayB0byBvZmZzZXRcblx0XHRcdFx0cmV0dXJuIHJudW1ub25weC50ZXN0KCBjb21wdXRlZCApID9cblx0XHRcdFx0XHRqUXVlcnkoIGVsZW0gKS5wb3NpdGlvbigpWyBwcm9wIF0gKyBcInB4XCIgOlxuXHRcdFx0XHRcdGNvbXB1dGVkO1xuXHRcdFx0fVxuXHRcdH1cblx0KTtcbn0gKTtcblxuXG4vLyBDcmVhdGUgaW5uZXJIZWlnaHQsIGlubmVyV2lkdGgsIGhlaWdodCwgd2lkdGgsIG91dGVySGVpZ2h0IGFuZCBvdXRlcldpZHRoIG1ldGhvZHNcbmpRdWVyeS5lYWNoKCB7IEhlaWdodDogXCJoZWlnaHRcIiwgV2lkdGg6IFwid2lkdGhcIiB9LCBmdW5jdGlvbiggbmFtZSwgdHlwZSApIHtcblx0alF1ZXJ5LmVhY2goIHsgcGFkZGluZzogXCJpbm5lclwiICsgbmFtZSwgY29udGVudDogdHlwZSwgXCJcIjogXCJvdXRlclwiICsgbmFtZSB9LFxuXHRcdGZ1bmN0aW9uKCBkZWZhdWx0RXh0cmEsIGZ1bmNOYW1lICkge1xuXG5cdFx0Ly8gTWFyZ2luIGlzIG9ubHkgZm9yIG91dGVySGVpZ2h0LCBvdXRlcldpZHRoXG5cdFx0alF1ZXJ5LmZuWyBmdW5jTmFtZSBdID0gZnVuY3Rpb24oIG1hcmdpbiwgdmFsdWUgKSB7XG5cdFx0XHR2YXIgY2hhaW5hYmxlID0gYXJndW1lbnRzLmxlbmd0aCAmJiAoIGRlZmF1bHRFeHRyYSB8fCB0eXBlb2YgbWFyZ2luICE9PSBcImJvb2xlYW5cIiApLFxuXHRcdFx0XHRleHRyYSA9IGRlZmF1bHRFeHRyYSB8fCAoIG1hcmdpbiA9PT0gdHJ1ZSB8fCB2YWx1ZSA9PT0gdHJ1ZSA/IFwibWFyZ2luXCIgOiBcImJvcmRlclwiICk7XG5cblx0XHRcdHJldHVybiBhY2Nlc3MoIHRoaXMsIGZ1bmN0aW9uKCBlbGVtLCB0eXBlLCB2YWx1ZSApIHtcblx0XHRcdFx0dmFyIGRvYztcblxuXHRcdFx0XHRpZiAoIGlzV2luZG93KCBlbGVtICkgKSB7XG5cblx0XHRcdFx0XHQvLyAkKCB3aW5kb3cgKS5vdXRlcldpZHRoL0hlaWdodCByZXR1cm4gdy9oIGluY2x1ZGluZyBzY3JvbGxiYXJzIChnaC0xNzI5KVxuXHRcdFx0XHRcdHJldHVybiBmdW5jTmFtZS5pbmRleE9mKCBcIm91dGVyXCIgKSA9PT0gMCA/XG5cdFx0XHRcdFx0XHRlbGVtWyBcImlubmVyXCIgKyBuYW1lIF0gOlxuXHRcdFx0XHRcdFx0ZWxlbS5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnRbIFwiY2xpZW50XCIgKyBuYW1lIF07XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBHZXQgZG9jdW1lbnQgd2lkdGggb3IgaGVpZ2h0XG5cdFx0XHRcdGlmICggZWxlbS5ub2RlVHlwZSA9PT0gOSApIHtcblx0XHRcdFx0XHRkb2MgPSBlbGVtLmRvY3VtZW50RWxlbWVudDtcblxuXHRcdFx0XHRcdC8vIEVpdGhlciBzY3JvbGxbV2lkdGgvSGVpZ2h0XSBvciBvZmZzZXRbV2lkdGgvSGVpZ2h0XSBvciBjbGllbnRbV2lkdGgvSGVpZ2h0XSxcblx0XHRcdFx0XHQvLyB3aGljaGV2ZXIgaXMgZ3JlYXRlc3Rcblx0XHRcdFx0XHRyZXR1cm4gTWF0aC5tYXgoXG5cdFx0XHRcdFx0XHRlbGVtLmJvZHlbIFwic2Nyb2xsXCIgKyBuYW1lIF0sIGRvY1sgXCJzY3JvbGxcIiArIG5hbWUgXSxcblx0XHRcdFx0XHRcdGVsZW0uYm9keVsgXCJvZmZzZXRcIiArIG5hbWUgXSwgZG9jWyBcIm9mZnNldFwiICsgbmFtZSBdLFxuXHRcdFx0XHRcdFx0ZG9jWyBcImNsaWVudFwiICsgbmFtZSBdXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiB2YWx1ZSA9PT0gdW5kZWZpbmVkID9cblxuXHRcdFx0XHRcdC8vIEdldCB3aWR0aCBvciBoZWlnaHQgb24gdGhlIGVsZW1lbnQsIHJlcXVlc3RpbmcgYnV0IG5vdCBmb3JjaW5nIHBhcnNlRmxvYXRcblx0XHRcdFx0XHRqUXVlcnkuY3NzKCBlbGVtLCB0eXBlLCBleHRyYSApIDpcblxuXHRcdFx0XHRcdC8vIFNldCB3aWR0aCBvciBoZWlnaHQgb24gdGhlIGVsZW1lbnRcblx0XHRcdFx0XHRqUXVlcnkuc3R5bGUoIGVsZW0sIHR5cGUsIHZhbHVlLCBleHRyYSApO1xuXHRcdFx0fSwgdHlwZSwgY2hhaW5hYmxlID8gbWFyZ2luIDogdW5kZWZpbmVkLCBjaGFpbmFibGUgKTtcblx0XHR9O1xuXHR9ICk7XG59ICk7XG5cblxualF1ZXJ5LmVhY2goICggXCJibHVyIGZvY3VzIGZvY3VzaW4gZm9jdXNvdXQgcmVzaXplIHNjcm9sbCBjbGljayBkYmxjbGljayBcIiArXG5cdFwibW91c2Vkb3duIG1vdXNldXAgbW91c2Vtb3ZlIG1vdXNlb3ZlciBtb3VzZW91dCBtb3VzZWVudGVyIG1vdXNlbGVhdmUgXCIgK1xuXHRcImNoYW5nZSBzZWxlY3Qgc3VibWl0IGtleWRvd24ga2V5cHJlc3Mga2V5dXAgY29udGV4dG1lbnVcIiApLnNwbGl0KCBcIiBcIiApLFxuXHRmdW5jdGlvbiggaSwgbmFtZSApIHtcblxuXHQvLyBIYW5kbGUgZXZlbnQgYmluZGluZ1xuXHRqUXVlcnkuZm5bIG5hbWUgXSA9IGZ1bmN0aW9uKCBkYXRhLCBmbiApIHtcblx0XHRyZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA+IDAgP1xuXHRcdFx0dGhpcy5vbiggbmFtZSwgbnVsbCwgZGF0YSwgZm4gKSA6XG5cdFx0XHR0aGlzLnRyaWdnZXIoIG5hbWUgKTtcblx0fTtcbn0gKTtcblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXHRob3ZlcjogZnVuY3Rpb24oIGZuT3ZlciwgZm5PdXQgKSB7XG5cdFx0cmV0dXJuIHRoaXMubW91c2VlbnRlciggZm5PdmVyICkubW91c2VsZWF2ZSggZm5PdXQgfHwgZm5PdmVyICk7XG5cdH1cbn0gKTtcblxuXG5cblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXG5cdGJpbmQ6IGZ1bmN0aW9uKCB0eXBlcywgZGF0YSwgZm4gKSB7XG5cdFx0cmV0dXJuIHRoaXMub24oIHR5cGVzLCBudWxsLCBkYXRhLCBmbiApO1xuXHR9LFxuXHR1bmJpbmQ6IGZ1bmN0aW9uKCB0eXBlcywgZm4gKSB7XG5cdFx0cmV0dXJuIHRoaXMub2ZmKCB0eXBlcywgbnVsbCwgZm4gKTtcblx0fSxcblxuXHRkZWxlZ2F0ZTogZnVuY3Rpb24oIHNlbGVjdG9yLCB0eXBlcywgZGF0YSwgZm4gKSB7XG5cdFx0cmV0dXJuIHRoaXMub24oIHR5cGVzLCBzZWxlY3RvciwgZGF0YSwgZm4gKTtcblx0fSxcblx0dW5kZWxlZ2F0ZTogZnVuY3Rpb24oIHNlbGVjdG9yLCB0eXBlcywgZm4gKSB7XG5cblx0XHQvLyAoIG5hbWVzcGFjZSApIG9yICggc2VsZWN0b3IsIHR5cGVzIFssIGZuXSApXG5cdFx0cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPT09IDEgP1xuXHRcdFx0dGhpcy5vZmYoIHNlbGVjdG9yLCBcIioqXCIgKSA6XG5cdFx0XHR0aGlzLm9mZiggdHlwZXMsIHNlbGVjdG9yIHx8IFwiKipcIiwgZm4gKTtcblx0fVxufSApO1xuXG4vLyBCaW5kIGEgZnVuY3Rpb24gdG8gYSBjb250ZXh0LCBvcHRpb25hbGx5IHBhcnRpYWxseSBhcHBseWluZyBhbnlcbi8vIGFyZ3VtZW50cy5cbi8vIGpRdWVyeS5wcm94eSBpcyBkZXByZWNhdGVkIHRvIHByb21vdGUgc3RhbmRhcmRzIChzcGVjaWZpY2FsbHkgRnVuY3Rpb24jYmluZClcbi8vIEhvd2V2ZXIsIGl0IGlzIG5vdCBzbGF0ZWQgZm9yIHJlbW92YWwgYW55IHRpbWUgc29vblxualF1ZXJ5LnByb3h5ID0gZnVuY3Rpb24oIGZuLCBjb250ZXh0ICkge1xuXHR2YXIgdG1wLCBhcmdzLCBwcm94eTtcblxuXHRpZiAoIHR5cGVvZiBjb250ZXh0ID09PSBcInN0cmluZ1wiICkge1xuXHRcdHRtcCA9IGZuWyBjb250ZXh0IF07XG5cdFx0Y29udGV4dCA9IGZuO1xuXHRcdGZuID0gdG1wO1xuXHR9XG5cblx0Ly8gUXVpY2sgY2hlY2sgdG8gZGV0ZXJtaW5lIGlmIHRhcmdldCBpcyBjYWxsYWJsZSwgaW4gdGhlIHNwZWNcblx0Ly8gdGhpcyB0aHJvd3MgYSBUeXBlRXJyb3IsIGJ1dCB3ZSB3aWxsIGp1c3QgcmV0dXJuIHVuZGVmaW5lZC5cblx0aWYgKCAhaXNGdW5jdGlvbiggZm4gKSApIHtcblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG5cblx0Ly8gU2ltdWxhdGVkIGJpbmRcblx0YXJncyA9IHNsaWNlLmNhbGwoIGFyZ3VtZW50cywgMiApO1xuXHRwcm94eSA9IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiBmbi5hcHBseSggY29udGV4dCB8fCB0aGlzLCBhcmdzLmNvbmNhdCggc2xpY2UuY2FsbCggYXJndW1lbnRzICkgKSApO1xuXHR9O1xuXG5cdC8vIFNldCB0aGUgZ3VpZCBvZiB1bmlxdWUgaGFuZGxlciB0byB0aGUgc2FtZSBvZiBvcmlnaW5hbCBoYW5kbGVyLCBzbyBpdCBjYW4gYmUgcmVtb3ZlZFxuXHRwcm94eS5ndWlkID0gZm4uZ3VpZCA9IGZuLmd1aWQgfHwgalF1ZXJ5Lmd1aWQrKztcblxuXHRyZXR1cm4gcHJveHk7XG59O1xuXG5qUXVlcnkuaG9sZFJlYWR5ID0gZnVuY3Rpb24oIGhvbGQgKSB7XG5cdGlmICggaG9sZCApIHtcblx0XHRqUXVlcnkucmVhZHlXYWl0Kys7XG5cdH0gZWxzZSB7XG5cdFx0alF1ZXJ5LnJlYWR5KCB0cnVlICk7XG5cdH1cbn07XG5qUXVlcnkuaXNBcnJheSA9IEFycmF5LmlzQXJyYXk7XG5qUXVlcnkucGFyc2VKU09OID0gSlNPTi5wYXJzZTtcbmpRdWVyeS5ub2RlTmFtZSA9IG5vZGVOYW1lO1xualF1ZXJ5LmlzRnVuY3Rpb24gPSBpc0Z1bmN0aW9uO1xualF1ZXJ5LmlzV2luZG93ID0gaXNXaW5kb3c7XG5qUXVlcnkuY2FtZWxDYXNlID0gY2FtZWxDYXNlO1xualF1ZXJ5LnR5cGUgPSB0b1R5cGU7XG5cbmpRdWVyeS5ub3cgPSBEYXRlLm5vdztcblxualF1ZXJ5LmlzTnVtZXJpYyA9IGZ1bmN0aW9uKCBvYmogKSB7XG5cblx0Ly8gQXMgb2YgalF1ZXJ5IDMuMCwgaXNOdW1lcmljIGlzIGxpbWl0ZWQgdG9cblx0Ly8gc3RyaW5ncyBhbmQgbnVtYmVycyAocHJpbWl0aXZlcyBvciBvYmplY3RzKVxuXHQvLyB0aGF0IGNhbiBiZSBjb2VyY2VkIHRvIGZpbml0ZSBudW1iZXJzIChnaC0yNjYyKVxuXHR2YXIgdHlwZSA9IGpRdWVyeS50eXBlKCBvYmogKTtcblx0cmV0dXJuICggdHlwZSA9PT0gXCJudW1iZXJcIiB8fCB0eXBlID09PSBcInN0cmluZ1wiICkgJiZcblxuXHRcdC8vIHBhcnNlRmxvYXQgTmFOcyBudW1lcmljLWNhc3QgZmFsc2UgcG9zaXRpdmVzIChcIlwiKVxuXHRcdC8vIC4uLmJ1dCBtaXNpbnRlcnByZXRzIGxlYWRpbmctbnVtYmVyIHN0cmluZ3MsIHBhcnRpY3VsYXJseSBoZXggbGl0ZXJhbHMgKFwiMHguLi5cIilcblx0XHQvLyBzdWJ0cmFjdGlvbiBmb3JjZXMgaW5maW5pdGllcyB0byBOYU5cblx0XHQhaXNOYU4oIG9iaiAtIHBhcnNlRmxvYXQoIG9iaiApICk7XG59O1xuXG5cblxuXG4vLyBSZWdpc3RlciBhcyBhIG5hbWVkIEFNRCBtb2R1bGUsIHNpbmNlIGpRdWVyeSBjYW4gYmUgY29uY2F0ZW5hdGVkIHdpdGggb3RoZXJcbi8vIGZpbGVzIHRoYXQgbWF5IHVzZSBkZWZpbmUsIGJ1dCBub3QgdmlhIGEgcHJvcGVyIGNvbmNhdGVuYXRpb24gc2NyaXB0IHRoYXRcbi8vIHVuZGVyc3RhbmRzIGFub255bW91cyBBTUQgbW9kdWxlcy4gQSBuYW1lZCBBTUQgaXMgc2FmZXN0IGFuZCBtb3N0IHJvYnVzdFxuLy8gd2F5IHRvIHJlZ2lzdGVyLiBMb3dlcmNhc2UganF1ZXJ5IGlzIHVzZWQgYmVjYXVzZSBBTUQgbW9kdWxlIG5hbWVzIGFyZVxuLy8gZGVyaXZlZCBmcm9tIGZpbGUgbmFtZXMsIGFuZCBqUXVlcnkgaXMgbm9ybWFsbHkgZGVsaXZlcmVkIGluIGEgbG93ZXJjYXNlXG4vLyBmaWxlIG5hbWUuIERvIHRoaXMgYWZ0ZXIgY3JlYXRpbmcgdGhlIGdsb2JhbCBzbyB0aGF0IGlmIGFuIEFNRCBtb2R1bGUgd2FudHNcbi8vIHRvIGNhbGwgbm9Db25mbGljdCB0byBoaWRlIHRoaXMgdmVyc2lvbiBvZiBqUXVlcnksIGl0IHdpbGwgd29yay5cblxuLy8gTm90ZSB0aGF0IGZvciBtYXhpbXVtIHBvcnRhYmlsaXR5LCBsaWJyYXJpZXMgdGhhdCBhcmUgbm90IGpRdWVyeSBzaG91bGRcbi8vIGRlY2xhcmUgdGhlbXNlbHZlcyBhcyBhbm9ueW1vdXMgbW9kdWxlcywgYW5kIGF2b2lkIHNldHRpbmcgYSBnbG9iYWwgaWYgYW5cbi8vIEFNRCBsb2FkZXIgaXMgcHJlc2VudC4galF1ZXJ5IGlzIGEgc3BlY2lhbCBjYXNlLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlXG4vLyBodHRwczovL2dpdGh1Yi5jb20vanJidXJrZS9yZXF1aXJlanMvd2lraS9VcGRhdGluZy1leGlzdGluZy1saWJyYXJpZXMjd2lraS1hbm9uXG5cbmlmICggdHlwZW9mIGRlZmluZSA9PT0gXCJmdW5jdGlvblwiICYmIGRlZmluZS5hbWQgKSB7XG5cdGRlZmluZSggXCJqcXVlcnlcIiwgW10sIGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiBqUXVlcnk7XG5cdH0gKTtcbn1cblxuXG5cblxudmFyXG5cblx0Ly8gTWFwIG92ZXIgalF1ZXJ5IGluIGNhc2Ugb2Ygb3ZlcndyaXRlXG5cdF9qUXVlcnkgPSB3aW5kb3cualF1ZXJ5LFxuXG5cdC8vIE1hcCBvdmVyIHRoZSAkIGluIGNhc2Ugb2Ygb3ZlcndyaXRlXG5cdF8kID0gd2luZG93LiQ7XG5cbmpRdWVyeS5ub0NvbmZsaWN0ID0gZnVuY3Rpb24oIGRlZXAgKSB7XG5cdGlmICggd2luZG93LiQgPT09IGpRdWVyeSApIHtcblx0XHR3aW5kb3cuJCA9IF8kO1xuXHR9XG5cblx0aWYgKCBkZWVwICYmIHdpbmRvdy5qUXVlcnkgPT09IGpRdWVyeSApIHtcblx0XHR3aW5kb3cualF1ZXJ5ID0gX2pRdWVyeTtcblx0fVxuXG5cdHJldHVybiBqUXVlcnk7XG59O1xuXG4vLyBFeHBvc2UgalF1ZXJ5IGFuZCAkIGlkZW50aWZpZXJzLCBldmVuIGluIEFNRFxuLy8gKCM3MTAyI2NvbW1lbnQ6MTAsIGh0dHBzOi8vZ2l0aHViLmNvbS9qcXVlcnkvanF1ZXJ5L3B1bGwvNTU3KVxuLy8gYW5kIENvbW1vbkpTIGZvciBicm93c2VyIGVtdWxhdG9ycyAoIzEzNTY2KVxuaWYgKCAhbm9HbG9iYWwgKSB7XG5cdHdpbmRvdy5qUXVlcnkgPSB3aW5kb3cuJCA9IGpRdWVyeTtcbn1cblxuXG5cblxucmV0dXJuIGpRdWVyeTtcbn0gKTtcbiIsIi8vISBtb21lbnQtdGltZXpvbmUuanNcbi8vISB2ZXJzaW9uIDogMC41LjE3XG4vLyEgQ29weXJpZ2h0IChjKSBKUyBGb3VuZGF0aW9uIGFuZCBvdGhlciBjb250cmlidXRvcnNcbi8vISBsaWNlbnNlIDogTUlUXG4vLyEgZ2l0aHViLmNvbS9tb21lbnQvbW9tZW50LXRpbWV6b25lXG5cbihmdW5jdGlvbiAocm9vdCwgZmFjdG9yeSkge1xuXHRcInVzZSBzdHJpY3RcIjtcblxuXHQvKmdsb2JhbCBkZWZpbmUqL1xuXHRpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKSB7XG5cdFx0ZGVmaW5lKFsnbW9tZW50J10sIGZhY3RvcnkpOyAgICAgICAgICAgICAgICAgLy8gQU1EXG5cdH0gZWxzZSBpZiAodHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcgJiYgbW9kdWxlLmV4cG9ydHMpIHtcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkocmVxdWlyZSgnbW9tZW50JykpOyAvLyBOb2RlXG5cdH0gZWxzZSB7XG5cdFx0ZmFjdG9yeShyb290Lm1vbWVudCk7ICAgICAgICAgICAgICAgICAgICAgICAgLy8gQnJvd3NlclxuXHR9XG59KHRoaXMsIGZ1bmN0aW9uIChtb21lbnQpIHtcblx0XCJ1c2Ugc3RyaWN0XCI7XG5cblx0Ly8gRG8gbm90IGxvYWQgbW9tZW50LXRpbWV6b25lIGEgc2Vjb25kIHRpbWUuXG5cdC8vIGlmIChtb21lbnQudHogIT09IHVuZGVmaW5lZCkge1xuXHQvLyBcdGxvZ0Vycm9yKCdNb21lbnQgVGltZXpvbmUgJyArIG1vbWVudC50ei52ZXJzaW9uICsgJyB3YXMgYWxyZWFkeSBsb2FkZWQgJyArIChtb21lbnQudHouZGF0YVZlcnNpb24gPyAnd2l0aCBkYXRhIGZyb20gJyA6ICd3aXRob3V0IGFueSBkYXRhJykgKyBtb21lbnQudHouZGF0YVZlcnNpb24pO1xuXHQvLyBcdHJldHVybiBtb21lbnQ7XG5cdC8vIH1cblxuXHR2YXIgVkVSU0lPTiA9IFwiMC41LjE3XCIsXG5cdFx0em9uZXMgPSB7fSxcblx0XHRsaW5rcyA9IHt9LFxuXHRcdG5hbWVzID0ge30sXG5cdFx0Z3Vlc3NlcyA9IHt9LFxuXHRcdGNhY2hlZEd1ZXNzLFxuXG5cdFx0bW9tZW50VmVyc2lvbiA9IG1vbWVudC52ZXJzaW9uLnNwbGl0KCcuJyksXG5cdFx0bWFqb3IgPSArbW9tZW50VmVyc2lvblswXSxcblx0XHRtaW5vciA9ICttb21lbnRWZXJzaW9uWzFdO1xuXG5cdC8vIE1vbWVudC5qcyB2ZXJzaW9uIGNoZWNrXG5cdGlmIChtYWpvciA8IDIgfHwgKG1ham9yID09PSAyICYmIG1pbm9yIDwgNikpIHtcblx0XHRsb2dFcnJvcignTW9tZW50IFRpbWV6b25lIHJlcXVpcmVzIE1vbWVudC5qcyA+PSAyLjYuMC4gWW91IGFyZSB1c2luZyBNb21lbnQuanMgJyArIG1vbWVudC52ZXJzaW9uICsgJy4gU2VlIG1vbWVudGpzLmNvbScpO1xuXHR9XG5cblx0LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuXHRcdFVucGFja2luZ1xuXHQqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cblx0ZnVuY3Rpb24gY2hhckNvZGVUb0ludChjaGFyQ29kZSkge1xuXHRcdGlmIChjaGFyQ29kZSA+IDk2KSB7XG5cdFx0XHRyZXR1cm4gY2hhckNvZGUgLSA4Nztcblx0XHR9IGVsc2UgaWYgKGNoYXJDb2RlID4gNjQpIHtcblx0XHRcdHJldHVybiBjaGFyQ29kZSAtIDI5O1xuXHRcdH1cblx0XHRyZXR1cm4gY2hhckNvZGUgLSA0ODtcblx0fVxuXG5cdGZ1bmN0aW9uIHVucGFja0Jhc2U2MChzdHJpbmcpIHtcblx0XHR2YXIgaSA9IDAsXG5cdFx0XHRwYXJ0cyA9IHN0cmluZy5zcGxpdCgnLicpLFxuXHRcdFx0d2hvbGUgPSBwYXJ0c1swXSxcblx0XHRcdGZyYWN0aW9uYWwgPSBwYXJ0c1sxXSB8fCAnJyxcblx0XHRcdG11bHRpcGxpZXIgPSAxLFxuXHRcdFx0bnVtLFxuXHRcdFx0b3V0ID0gMCxcblx0XHRcdHNpZ24gPSAxO1xuXG5cdFx0Ly8gaGFuZGxlIG5lZ2F0aXZlIG51bWJlcnNcblx0XHRpZiAoc3RyaW5nLmNoYXJDb2RlQXQoMCkgPT09IDQ1KSB7XG5cdFx0XHRpID0gMTtcblx0XHRcdHNpZ24gPSAtMTtcblx0XHR9XG5cblx0XHQvLyBoYW5kbGUgZGlnaXRzIGJlZm9yZSB0aGUgZGVjaW1hbFxuXHRcdGZvciAoaTsgaSA8IHdob2xlLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRudW0gPSBjaGFyQ29kZVRvSW50KHdob2xlLmNoYXJDb2RlQXQoaSkpO1xuXHRcdFx0b3V0ID0gNjAgKiBvdXQgKyBudW07XG5cdFx0fVxuXG5cdFx0Ly8gaGFuZGxlIGRpZ2l0cyBhZnRlciB0aGUgZGVjaW1hbFxuXHRcdGZvciAoaSA9IDA7IGkgPCBmcmFjdGlvbmFsLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRtdWx0aXBsaWVyID0gbXVsdGlwbGllciAvIDYwO1xuXHRcdFx0bnVtID0gY2hhckNvZGVUb0ludChmcmFjdGlvbmFsLmNoYXJDb2RlQXQoaSkpO1xuXHRcdFx0b3V0ICs9IG51bSAqIG11bHRpcGxpZXI7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG91dCAqIHNpZ247XG5cdH1cblxuXHRmdW5jdGlvbiBhcnJheVRvSW50IChhcnJheSkge1xuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyBpKyspIHtcblx0XHRcdGFycmF5W2ldID0gdW5wYWNrQmFzZTYwKGFycmF5W2ldKTtcblx0XHR9XG5cdH1cblxuXHRmdW5jdGlvbiBpbnRUb1VudGlsIChhcnJheSwgbGVuZ3RoKSB7XG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuXHRcdFx0YXJyYXlbaV0gPSBNYXRoLnJvdW5kKChhcnJheVtpIC0gMV0gfHwgMCkgKyAoYXJyYXlbaV0gKiA2MDAwMCkpOyAvLyBtaW51dGVzIHRvIG1pbGxpc2Vjb25kc1xuXHRcdH1cblxuXHRcdGFycmF5W2xlbmd0aCAtIDFdID0gSW5maW5pdHk7XG5cdH1cblxuXHRmdW5jdGlvbiBtYXBJbmRpY2VzIChzb3VyY2UsIGluZGljZXMpIHtcblx0XHR2YXIgb3V0ID0gW10sIGk7XG5cblx0XHRmb3IgKGkgPSAwOyBpIDwgaW5kaWNlcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0b3V0W2ldID0gc291cmNlW2luZGljZXNbaV1dO1xuXHRcdH1cblxuXHRcdHJldHVybiBvdXQ7XG5cdH1cblxuXHRmdW5jdGlvbiB1bnBhY2sgKHN0cmluZykge1xuXHRcdHZhciBkYXRhID0gc3RyaW5nLnNwbGl0KCd8JyksXG5cdFx0XHRvZmZzZXRzID0gZGF0YVsyXS5zcGxpdCgnICcpLFxuXHRcdFx0aW5kaWNlcyA9IGRhdGFbM10uc3BsaXQoJycpLFxuXHRcdFx0dW50aWxzICA9IGRhdGFbNF0uc3BsaXQoJyAnKTtcblxuXHRcdGFycmF5VG9JbnQob2Zmc2V0cyk7XG5cdFx0YXJyYXlUb0ludChpbmRpY2VzKTtcblx0XHRhcnJheVRvSW50KHVudGlscyk7XG5cblx0XHRpbnRUb1VudGlsKHVudGlscywgaW5kaWNlcy5sZW5ndGgpO1xuXG5cdFx0cmV0dXJuIHtcblx0XHRcdG5hbWUgICAgICAgOiBkYXRhWzBdLFxuXHRcdFx0YWJicnMgICAgICA6IG1hcEluZGljZXMoZGF0YVsxXS5zcGxpdCgnICcpLCBpbmRpY2VzKSxcblx0XHRcdG9mZnNldHMgICAgOiBtYXBJbmRpY2VzKG9mZnNldHMsIGluZGljZXMpLFxuXHRcdFx0dW50aWxzICAgICA6IHVudGlscyxcblx0XHRcdHBvcHVsYXRpb24gOiBkYXRhWzVdIHwgMFxuXHRcdH07XG5cdH1cblxuXHQvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG5cdFx0Wm9uZSBvYmplY3Rcblx0KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG5cdGZ1bmN0aW9uIFpvbmUgKHBhY2tlZFN0cmluZykge1xuXHRcdGlmIChwYWNrZWRTdHJpbmcpIHtcblx0XHRcdHRoaXMuX3NldCh1bnBhY2socGFja2VkU3RyaW5nKSk7XG5cdFx0fVxuXHR9XG5cblx0Wm9uZS5wcm90b3R5cGUgPSB7XG5cdFx0X3NldCA6IGZ1bmN0aW9uICh1bnBhY2tlZCkge1xuXHRcdFx0dGhpcy5uYW1lICAgICAgID0gdW5wYWNrZWQubmFtZTtcblx0XHRcdHRoaXMuYWJicnMgICAgICA9IHVucGFja2VkLmFiYnJzO1xuXHRcdFx0dGhpcy51bnRpbHMgICAgID0gdW5wYWNrZWQudW50aWxzO1xuXHRcdFx0dGhpcy5vZmZzZXRzICAgID0gdW5wYWNrZWQub2Zmc2V0cztcblx0XHRcdHRoaXMucG9wdWxhdGlvbiA9IHVucGFja2VkLnBvcHVsYXRpb247XG5cdFx0fSxcblxuXHRcdF9pbmRleCA6IGZ1bmN0aW9uICh0aW1lc3RhbXApIHtcblx0XHRcdHZhciB0YXJnZXQgPSArdGltZXN0YW1wLFxuXHRcdFx0XHR1bnRpbHMgPSB0aGlzLnVudGlscyxcblx0XHRcdFx0aTtcblxuXHRcdFx0Zm9yIChpID0gMDsgaSA8IHVudGlscy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRpZiAodGFyZ2V0IDwgdW50aWxzW2ldKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0cGFyc2UgOiBmdW5jdGlvbiAodGltZXN0YW1wKSB7XG5cdFx0XHR2YXIgdGFyZ2V0ICA9ICt0aW1lc3RhbXAsXG5cdFx0XHRcdG9mZnNldHMgPSB0aGlzLm9mZnNldHMsXG5cdFx0XHRcdHVudGlscyAgPSB0aGlzLnVudGlscyxcblx0XHRcdFx0bWF4ICAgICA9IHVudGlscy5sZW5ndGggLSAxLFxuXHRcdFx0XHRvZmZzZXQsIG9mZnNldE5leHQsIG9mZnNldFByZXYsIGk7XG5cblx0XHRcdGZvciAoaSA9IDA7IGkgPCBtYXg7IGkrKykge1xuXHRcdFx0XHRvZmZzZXQgICAgID0gb2Zmc2V0c1tpXTtcblx0XHRcdFx0b2Zmc2V0TmV4dCA9IG9mZnNldHNbaSArIDFdO1xuXHRcdFx0XHRvZmZzZXRQcmV2ID0gb2Zmc2V0c1tpID8gaSAtIDEgOiBpXTtcblxuXHRcdFx0XHRpZiAob2Zmc2V0IDwgb2Zmc2V0TmV4dCAmJiB0ei5tb3ZlQW1iaWd1b3VzRm9yd2FyZCkge1xuXHRcdFx0XHRcdG9mZnNldCA9IG9mZnNldE5leHQ7XG5cdFx0XHRcdH0gZWxzZSBpZiAob2Zmc2V0ID4gb2Zmc2V0UHJldiAmJiB0ei5tb3ZlSW52YWxpZEZvcndhcmQpIHtcblx0XHRcdFx0XHRvZmZzZXQgPSBvZmZzZXRQcmV2O1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKHRhcmdldCA8IHVudGlsc1tpXSAtIChvZmZzZXQgKiA2MDAwMCkpIHtcblx0XHRcdFx0XHRyZXR1cm4gb2Zmc2V0c1tpXTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gb2Zmc2V0c1ttYXhdO1xuXHRcdH0sXG5cblx0XHRhYmJyIDogZnVuY3Rpb24gKG1vbSkge1xuXHRcdFx0cmV0dXJuIHRoaXMuYWJicnNbdGhpcy5faW5kZXgobW9tKV07XG5cdFx0fSxcblxuXHRcdG9mZnNldCA6IGZ1bmN0aW9uIChtb20pIHtcblx0XHRcdGxvZ0Vycm9yKFwiem9uZS5vZmZzZXQgaGFzIGJlZW4gZGVwcmVjYXRlZCBpbiBmYXZvciBvZiB6b25lLnV0Y09mZnNldFwiKTtcblx0XHRcdHJldHVybiB0aGlzLm9mZnNldHNbdGhpcy5faW5kZXgobW9tKV07XG5cdFx0fSxcblxuXHRcdHV0Y09mZnNldCA6IGZ1bmN0aW9uIChtb20pIHtcblx0XHRcdHJldHVybiB0aGlzLm9mZnNldHNbdGhpcy5faW5kZXgobW9tKV07XG5cdFx0fVxuXHR9O1xuXG5cdC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcblx0XHRDdXJyZW50IFRpbWV6b25lXG5cdCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuXHRmdW5jdGlvbiBPZmZzZXRBdChhdCkge1xuXHRcdHZhciB0aW1lU3RyaW5nID0gYXQudG9UaW1lU3RyaW5nKCk7XG5cdFx0dmFyIGFiYnIgPSB0aW1lU3RyaW5nLm1hdGNoKC9cXChbYS16IF0rXFwpL2kpO1xuXHRcdGlmIChhYmJyICYmIGFiYnJbMF0pIHtcblx0XHRcdC8vIDE3OjU2OjMxIEdNVC0wNjAwIChDU1QpXG5cdFx0XHQvLyAxNzo1NjozMSBHTVQtMDYwMCAoQ2VudHJhbCBTdGFuZGFyZCBUaW1lKVxuXHRcdFx0YWJiciA9IGFiYnJbMF0ubWF0Y2goL1tBLVpdL2cpO1xuXHRcdFx0YWJiciA9IGFiYnIgPyBhYmJyLmpvaW4oJycpIDogdW5kZWZpbmVkO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyAxNzo1NjozMSBDU1Rcblx0XHRcdC8vIDE3OjU2OjMxIEdNVCswODAwICjlj7DljJfmqJnmupbmmYLplpMpXG5cdFx0XHRhYmJyID0gdGltZVN0cmluZy5tYXRjaCgvW0EtWl17Myw1fS9nKTtcblx0XHRcdGFiYnIgPSBhYmJyID8gYWJiclswXSA6IHVuZGVmaW5lZDtcblx0XHR9XG5cblx0XHRpZiAoYWJiciA9PT0gJ0dNVCcpIHtcblx0XHRcdGFiYnIgPSB1bmRlZmluZWQ7XG5cdFx0fVxuXG5cdFx0dGhpcy5hdCA9ICthdDtcblx0XHR0aGlzLmFiYnIgPSBhYmJyO1xuXHRcdHRoaXMub2Zmc2V0ID0gYXQuZ2V0VGltZXpvbmVPZmZzZXQoKTtcblx0fVxuXG5cdGZ1bmN0aW9uIFpvbmVTY29yZSh6b25lKSB7XG5cdFx0dGhpcy56b25lID0gem9uZTtcblx0XHR0aGlzLm9mZnNldFNjb3JlID0gMDtcblx0XHR0aGlzLmFiYnJTY29yZSA9IDA7XG5cdH1cblxuXHRab25lU2NvcmUucHJvdG90eXBlLnNjb3JlT2Zmc2V0QXQgPSBmdW5jdGlvbiAob2Zmc2V0QXQpIHtcblx0XHR0aGlzLm9mZnNldFNjb3JlICs9IE1hdGguYWJzKHRoaXMuem9uZS51dGNPZmZzZXQob2Zmc2V0QXQuYXQpIC0gb2Zmc2V0QXQub2Zmc2V0KTtcblx0XHRpZiAodGhpcy56b25lLmFiYnIob2Zmc2V0QXQuYXQpLnJlcGxhY2UoL1teQS1aXS9nLCAnJykgIT09IG9mZnNldEF0LmFiYnIpIHtcblx0XHRcdHRoaXMuYWJiclNjb3JlKys7XG5cdFx0fVxuXHR9O1xuXG5cdGZ1bmN0aW9uIGZpbmRDaGFuZ2UobG93LCBoaWdoKSB7XG5cdFx0dmFyIG1pZCwgZGlmZjtcblxuXHRcdHdoaWxlICgoZGlmZiA9ICgoaGlnaC5hdCAtIGxvdy5hdCkgLyAxMmU0IHwgMCkgKiA2ZTQpKSB7XG5cdFx0XHRtaWQgPSBuZXcgT2Zmc2V0QXQobmV3IERhdGUobG93LmF0ICsgZGlmZikpO1xuXHRcdFx0aWYgKG1pZC5vZmZzZXQgPT09IGxvdy5vZmZzZXQpIHtcblx0XHRcdFx0bG93ID0gbWlkO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aGlnaCA9IG1pZDtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gbG93O1xuXHR9XG5cblx0ZnVuY3Rpb24gdXNlck9mZnNldHMoKSB7XG5cdFx0dmFyIHN0YXJ0WWVhciA9IG5ldyBEYXRlKCkuZ2V0RnVsbFllYXIoKSAtIDIsXG5cdFx0XHRsYXN0ID0gbmV3IE9mZnNldEF0KG5ldyBEYXRlKHN0YXJ0WWVhciwgMCwgMSkpLFxuXHRcdFx0b2Zmc2V0cyA9IFtsYXN0XSxcblx0XHRcdGNoYW5nZSwgbmV4dCwgaTtcblxuXHRcdGZvciAoaSA9IDE7IGkgPCA0ODsgaSsrKSB7XG5cdFx0XHRuZXh0ID0gbmV3IE9mZnNldEF0KG5ldyBEYXRlKHN0YXJ0WWVhciwgaSwgMSkpO1xuXHRcdFx0aWYgKG5leHQub2Zmc2V0ICE9PSBsYXN0Lm9mZnNldCkge1xuXHRcdFx0XHRjaGFuZ2UgPSBmaW5kQ2hhbmdlKGxhc3QsIG5leHQpO1xuXHRcdFx0XHRvZmZzZXRzLnB1c2goY2hhbmdlKTtcblx0XHRcdFx0b2Zmc2V0cy5wdXNoKG5ldyBPZmZzZXRBdChuZXcgRGF0ZShjaGFuZ2UuYXQgKyA2ZTQpKSk7XG5cdFx0XHR9XG5cdFx0XHRsYXN0ID0gbmV4dDtcblx0XHR9XG5cblx0XHRmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7XG5cdFx0XHRvZmZzZXRzLnB1c2gobmV3IE9mZnNldEF0KG5ldyBEYXRlKHN0YXJ0WWVhciArIGksIDAsIDEpKSk7XG5cdFx0XHRvZmZzZXRzLnB1c2gobmV3IE9mZnNldEF0KG5ldyBEYXRlKHN0YXJ0WWVhciArIGksIDYsIDEpKSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG9mZnNldHM7XG5cdH1cblxuXHRmdW5jdGlvbiBzb3J0Wm9uZVNjb3JlcyAoYSwgYikge1xuXHRcdGlmIChhLm9mZnNldFNjb3JlICE9PSBiLm9mZnNldFNjb3JlKSB7XG5cdFx0XHRyZXR1cm4gYS5vZmZzZXRTY29yZSAtIGIub2Zmc2V0U2NvcmU7XG5cdFx0fVxuXHRcdGlmIChhLmFiYnJTY29yZSAhPT0gYi5hYmJyU2NvcmUpIHtcblx0XHRcdHJldHVybiBhLmFiYnJTY29yZSAtIGIuYWJiclNjb3JlO1xuXHRcdH1cblx0XHRyZXR1cm4gYi56b25lLnBvcHVsYXRpb24gLSBhLnpvbmUucG9wdWxhdGlvbjtcblx0fVxuXG5cdGZ1bmN0aW9uIGFkZFRvR3Vlc3NlcyAobmFtZSwgb2Zmc2V0cykge1xuXHRcdHZhciBpLCBvZmZzZXQ7XG5cdFx0YXJyYXlUb0ludChvZmZzZXRzKTtcblx0XHRmb3IgKGkgPSAwOyBpIDwgb2Zmc2V0cy5sZW5ndGg7IGkrKykge1xuXHRcdFx0b2Zmc2V0ID0gb2Zmc2V0c1tpXTtcblx0XHRcdGd1ZXNzZXNbb2Zmc2V0XSA9IGd1ZXNzZXNbb2Zmc2V0XSB8fCB7fTtcblx0XHRcdGd1ZXNzZXNbb2Zmc2V0XVtuYW1lXSA9IHRydWU7XG5cdFx0fVxuXHR9XG5cblx0ZnVuY3Rpb24gZ3Vlc3Nlc0ZvclVzZXJPZmZzZXRzIChvZmZzZXRzKSB7XG5cdFx0dmFyIG9mZnNldHNMZW5ndGggPSBvZmZzZXRzLmxlbmd0aCxcblx0XHRcdGZpbHRlcmVkR3Vlc3NlcyA9IHt9LFxuXHRcdFx0b3V0ID0gW10sXG5cdFx0XHRpLCBqLCBndWVzc2VzT2Zmc2V0O1xuXG5cdFx0Zm9yIChpID0gMDsgaSA8IG9mZnNldHNMZW5ndGg7IGkrKykge1xuXHRcdFx0Z3Vlc3Nlc09mZnNldCA9IGd1ZXNzZXNbb2Zmc2V0c1tpXS5vZmZzZXRdIHx8IHt9O1xuXHRcdFx0Zm9yIChqIGluIGd1ZXNzZXNPZmZzZXQpIHtcblx0XHRcdFx0aWYgKGd1ZXNzZXNPZmZzZXQuaGFzT3duUHJvcGVydHkoaikpIHtcblx0XHRcdFx0XHRmaWx0ZXJlZEd1ZXNzZXNbal0gPSB0cnVlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Zm9yIChpIGluIGZpbHRlcmVkR3Vlc3Nlcykge1xuXHRcdFx0aWYgKGZpbHRlcmVkR3Vlc3Nlcy5oYXNPd25Qcm9wZXJ0eShpKSkge1xuXHRcdFx0XHRvdXQucHVzaChuYW1lc1tpXSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG91dDtcblx0fVxuXG5cdGZ1bmN0aW9uIHJlYnVpbGRHdWVzcyAoKSB7XG5cblx0XHQvLyB1c2UgSW50bCBBUEkgd2hlbiBhdmFpbGFibGUgYW5kIHJldHVybmluZyB2YWxpZCB0aW1lIHpvbmVcblx0XHR0cnkge1xuXHRcdFx0dmFyIGludGxOYW1lID0gSW50bC5EYXRlVGltZUZvcm1hdCgpLnJlc29sdmVkT3B0aW9ucygpLnRpbWVab25lO1xuXHRcdFx0aWYgKGludGxOYW1lICYmIGludGxOYW1lLmxlbmd0aCA+IDMpIHtcblx0XHRcdFx0dmFyIG5hbWUgPSBuYW1lc1tub3JtYWxpemVOYW1lKGludGxOYW1lKV07XG5cdFx0XHRcdGlmIChuYW1lKSB7XG5cdFx0XHRcdFx0cmV0dXJuIG5hbWU7XG5cdFx0XHRcdH1cblx0XHRcdFx0bG9nRXJyb3IoXCJNb21lbnQgVGltZXpvbmUgZm91bmQgXCIgKyBpbnRsTmFtZSArIFwiIGZyb20gdGhlIEludGwgYXBpLCBidXQgZGlkIG5vdCBoYXZlIHRoYXQgZGF0YSBsb2FkZWQuXCIpO1xuXHRcdFx0fVxuXHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdC8vIEludGwgdW5hdmFpbGFibGUsIGZhbGwgYmFjayB0byBtYW51YWwgZ3Vlc3NpbmcuXG5cdFx0fVxuXG5cdFx0dmFyIG9mZnNldHMgPSB1c2VyT2Zmc2V0cygpLFxuXHRcdFx0b2Zmc2V0c0xlbmd0aCA9IG9mZnNldHMubGVuZ3RoLFxuXHRcdFx0Z3Vlc3NlcyA9IGd1ZXNzZXNGb3JVc2VyT2Zmc2V0cyhvZmZzZXRzKSxcblx0XHRcdHpvbmVTY29yZXMgPSBbXSxcblx0XHRcdHpvbmVTY29yZSwgaSwgajtcblxuXHRcdGZvciAoaSA9IDA7IGkgPCBndWVzc2VzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHR6b25lU2NvcmUgPSBuZXcgWm9uZVNjb3JlKGdldFpvbmUoZ3Vlc3Nlc1tpXSksIG9mZnNldHNMZW5ndGgpO1xuXHRcdFx0Zm9yIChqID0gMDsgaiA8IG9mZnNldHNMZW5ndGg7IGorKykge1xuXHRcdFx0XHR6b25lU2NvcmUuc2NvcmVPZmZzZXRBdChvZmZzZXRzW2pdKTtcblx0XHRcdH1cblx0XHRcdHpvbmVTY29yZXMucHVzaCh6b25lU2NvcmUpO1xuXHRcdH1cblxuXHRcdHpvbmVTY29yZXMuc29ydChzb3J0Wm9uZVNjb3Jlcyk7XG5cblx0XHRyZXR1cm4gem9uZVNjb3Jlcy5sZW5ndGggPiAwID8gem9uZVNjb3Jlc1swXS56b25lLm5hbWUgOiB1bmRlZmluZWQ7XG5cdH1cblxuXHRmdW5jdGlvbiBndWVzcyAoaWdub3JlQ2FjaGUpIHtcblx0XHRpZiAoIWNhY2hlZEd1ZXNzIHx8IGlnbm9yZUNhY2hlKSB7XG5cdFx0XHRjYWNoZWRHdWVzcyA9IHJlYnVpbGRHdWVzcygpO1xuXHRcdH1cblx0XHRyZXR1cm4gY2FjaGVkR3Vlc3M7XG5cdH1cblxuXHQvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG5cdFx0R2xvYmFsIE1ldGhvZHNcblx0KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG5cdGZ1bmN0aW9uIG5vcm1hbGl6ZU5hbWUgKG5hbWUpIHtcblx0XHRyZXR1cm4gKG5hbWUgfHwgJycpLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvXFwvL2csICdfJyk7XG5cdH1cblxuXHRmdW5jdGlvbiBhZGRab25lIChwYWNrZWQpIHtcblx0XHR2YXIgaSwgbmFtZSwgc3BsaXQsIG5vcm1hbGl6ZWQ7XG5cblx0XHRpZiAodHlwZW9mIHBhY2tlZCA9PT0gXCJzdHJpbmdcIikge1xuXHRcdFx0cGFja2VkID0gW3BhY2tlZF07XG5cdFx0fVxuXG5cdFx0Zm9yIChpID0gMDsgaSA8IHBhY2tlZC5sZW5ndGg7IGkrKykge1xuXHRcdFx0c3BsaXQgPSBwYWNrZWRbaV0uc3BsaXQoJ3wnKTtcblx0XHRcdG5hbWUgPSBzcGxpdFswXTtcblx0XHRcdG5vcm1hbGl6ZWQgPSBub3JtYWxpemVOYW1lKG5hbWUpO1xuXHRcdFx0em9uZXNbbm9ybWFsaXplZF0gPSBwYWNrZWRbaV07XG5cdFx0XHRuYW1lc1tub3JtYWxpemVkXSA9IG5hbWU7XG5cdFx0XHRhZGRUb0d1ZXNzZXMobm9ybWFsaXplZCwgc3BsaXRbMl0uc3BsaXQoJyAnKSk7XG5cdFx0fVxuXHR9XG5cblx0ZnVuY3Rpb24gZ2V0Wm9uZSAobmFtZSwgY2FsbGVyKSB7XG5cdFx0bmFtZSA9IG5vcm1hbGl6ZU5hbWUobmFtZSk7XG5cblx0XHR2YXIgem9uZSA9IHpvbmVzW25hbWVdO1xuXHRcdHZhciBsaW5rO1xuXG5cdFx0aWYgKHpvbmUgaW5zdGFuY2VvZiBab25lKSB7XG5cdFx0XHRyZXR1cm4gem9uZTtcblx0XHR9XG5cblx0XHRpZiAodHlwZW9mIHpvbmUgPT09ICdzdHJpbmcnKSB7XG5cdFx0XHR6b25lID0gbmV3IFpvbmUoem9uZSk7XG5cdFx0XHR6b25lc1tuYW1lXSA9IHpvbmU7XG5cdFx0XHRyZXR1cm4gem9uZTtcblx0XHR9XG5cblx0XHQvLyBQYXNzIGdldFpvbmUgdG8gcHJldmVudCByZWN1cnNpb24gbW9yZSB0aGFuIDEgbGV2ZWwgZGVlcFxuXHRcdGlmIChsaW5rc1tuYW1lXSAmJiBjYWxsZXIgIT09IGdldFpvbmUgJiYgKGxpbmsgPSBnZXRab25lKGxpbmtzW25hbWVdLCBnZXRab25lKSkpIHtcblx0XHRcdHpvbmUgPSB6b25lc1tuYW1lXSA9IG5ldyBab25lKCk7XG5cdFx0XHR6b25lLl9zZXQobGluayk7XG5cdFx0XHR6b25lLm5hbWUgPSBuYW1lc1tuYW1lXTtcblx0XHRcdHJldHVybiB6b25lO1xuXHRcdH1cblxuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cblx0ZnVuY3Rpb24gZ2V0TmFtZXMgKCkge1xuXHRcdHZhciBpLCBvdXQgPSBbXTtcblxuXHRcdGZvciAoaSBpbiBuYW1lcykge1xuXHRcdFx0aWYgKG5hbWVzLmhhc093blByb3BlcnR5KGkpICYmICh6b25lc1tpXSB8fCB6b25lc1tsaW5rc1tpXV0pICYmIG5hbWVzW2ldKSB7XG5cdFx0XHRcdG91dC5wdXNoKG5hbWVzW2ldKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gb3V0LnNvcnQoKTtcblx0fVxuXG5cdGZ1bmN0aW9uIGFkZExpbmsgKGFsaWFzZXMpIHtcblx0XHR2YXIgaSwgYWxpYXMsIG5vcm1hbDAsIG5vcm1hbDE7XG5cblx0XHRpZiAodHlwZW9mIGFsaWFzZXMgPT09IFwic3RyaW5nXCIpIHtcblx0XHRcdGFsaWFzZXMgPSBbYWxpYXNlc107XG5cdFx0fVxuXG5cdFx0Zm9yIChpID0gMDsgaSA8IGFsaWFzZXMubGVuZ3RoOyBpKyspIHtcblx0XHRcdGFsaWFzID0gYWxpYXNlc1tpXS5zcGxpdCgnfCcpO1xuXG5cdFx0XHRub3JtYWwwID0gbm9ybWFsaXplTmFtZShhbGlhc1swXSk7XG5cdFx0XHRub3JtYWwxID0gbm9ybWFsaXplTmFtZShhbGlhc1sxXSk7XG5cblx0XHRcdGxpbmtzW25vcm1hbDBdID0gbm9ybWFsMTtcblx0XHRcdG5hbWVzW25vcm1hbDBdID0gYWxpYXNbMF07XG5cblx0XHRcdGxpbmtzW25vcm1hbDFdID0gbm9ybWFsMDtcblx0XHRcdG5hbWVzW25vcm1hbDFdID0gYWxpYXNbMV07XG5cdFx0fVxuXHR9XG5cblx0ZnVuY3Rpb24gbG9hZERhdGEgKGRhdGEpIHtcblx0XHRhZGRab25lKGRhdGEuem9uZXMpO1xuXHRcdGFkZExpbmsoZGF0YS5saW5rcyk7XG5cdFx0dHouZGF0YVZlcnNpb24gPSBkYXRhLnZlcnNpb247XG5cdH1cblxuXHRmdW5jdGlvbiB6b25lRXhpc3RzIChuYW1lKSB7XG5cdFx0aWYgKCF6b25lRXhpc3RzLmRpZFNob3dFcnJvcikge1xuXHRcdFx0em9uZUV4aXN0cy5kaWRTaG93RXJyb3IgPSB0cnVlO1xuXHRcdFx0XHRsb2dFcnJvcihcIm1vbWVudC50ei56b25lRXhpc3RzKCdcIiArIG5hbWUgKyBcIicpIGhhcyBiZWVuIGRlcHJlY2F0ZWQgaW4gZmF2b3Igb2YgIW1vbWVudC50ei56b25lKCdcIiArIG5hbWUgKyBcIicpXCIpO1xuXHRcdH1cblx0XHRyZXR1cm4gISFnZXRab25lKG5hbWUpO1xuXHR9XG5cblx0ZnVuY3Rpb24gbmVlZHNPZmZzZXQgKG0pIHtcblx0XHR2YXIgaXNVbml4VGltZXN0YW1wID0gKG0uX2YgPT09ICdYJyB8fCBtLl9mID09PSAneCcpO1xuXHRcdHJldHVybiAhIShtLl9hICYmIChtLl90em0gPT09IHVuZGVmaW5lZCkgJiYgIWlzVW5peFRpbWVzdGFtcCk7XG5cdH1cblxuXHRmdW5jdGlvbiBsb2dFcnJvciAobWVzc2FnZSkge1xuXHRcdGlmICh0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIGNvbnNvbGUuZXJyb3IgPT09ICdmdW5jdGlvbicpIHtcblx0XHRcdGNvbnNvbGUuZXJyb3IobWVzc2FnZSk7XG5cdFx0fVxuXHR9XG5cblx0LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuXHRcdG1vbWVudC50eiBuYW1lc3BhY2Vcblx0KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG5cdGZ1bmN0aW9uIHR6IChpbnB1dCkge1xuXHRcdHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAwLCAtMSksXG5cdFx0XHRuYW1lID0gYXJndW1lbnRzW2FyZ3VtZW50cy5sZW5ndGggLSAxXSxcblx0XHRcdHpvbmUgPSBnZXRab25lKG5hbWUpLFxuXHRcdFx0b3V0ICA9IG1vbWVudC51dGMuYXBwbHkobnVsbCwgYXJncyk7XG5cblx0XHRpZiAoem9uZSAmJiAhbW9tZW50LmlzTW9tZW50KGlucHV0KSAmJiBuZWVkc09mZnNldChvdXQpKSB7XG5cdFx0XHRvdXQuYWRkKHpvbmUucGFyc2Uob3V0KSwgJ21pbnV0ZXMnKTtcblx0XHR9XG5cblx0XHRvdXQudHoobmFtZSk7XG5cblx0XHRyZXR1cm4gb3V0O1xuXHR9XG5cblx0dHoudmVyc2lvbiAgICAgID0gVkVSU0lPTjtcblx0dHouZGF0YVZlcnNpb24gID0gJyc7XG5cdHR6Ll96b25lcyAgICAgICA9IHpvbmVzO1xuXHR0ei5fbGlua3MgICAgICAgPSBsaW5rcztcblx0dHouX25hbWVzICAgICAgID0gbmFtZXM7XG5cdHR6LmFkZCAgICAgICAgICA9IGFkZFpvbmU7XG5cdHR6LmxpbmsgICAgICAgICA9IGFkZExpbms7XG5cdHR6LmxvYWQgICAgICAgICA9IGxvYWREYXRhO1xuXHR0ei56b25lICAgICAgICAgPSBnZXRab25lO1xuXHR0ei56b25lRXhpc3RzICAgPSB6b25lRXhpc3RzOyAvLyBkZXByZWNhdGVkIGluIDAuMS4wXG5cdHR6Lmd1ZXNzICAgICAgICA9IGd1ZXNzO1xuXHR0ei5uYW1lcyAgICAgICAgPSBnZXROYW1lcztcblx0dHouWm9uZSAgICAgICAgID0gWm9uZTtcblx0dHoudW5wYWNrICAgICAgID0gdW5wYWNrO1xuXHR0ei51bnBhY2tCYXNlNjAgPSB1bnBhY2tCYXNlNjA7XG5cdHR6Lm5lZWRzT2Zmc2V0ICA9IG5lZWRzT2Zmc2V0O1xuXHR0ei5tb3ZlSW52YWxpZEZvcndhcmQgICA9IHRydWU7XG5cdHR6Lm1vdmVBbWJpZ3VvdXNGb3J3YXJkID0gZmFsc2U7XG5cblx0LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuXHRcdEludGVyZmFjZSB3aXRoIE1vbWVudC5qc1xuXHQqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cblx0dmFyIGZuID0gbW9tZW50LmZuO1xuXG5cdG1vbWVudC50eiA9IHR6O1xuXG5cdG1vbWVudC5kZWZhdWx0Wm9uZSA9IG51bGw7XG5cblx0bW9tZW50LnVwZGF0ZU9mZnNldCA9IGZ1bmN0aW9uIChtb20sIGtlZXBUaW1lKSB7XG5cdFx0dmFyIHpvbmUgPSBtb21lbnQuZGVmYXVsdFpvbmUsXG5cdFx0XHRvZmZzZXQ7XG5cblx0XHRpZiAobW9tLl96ID09PSB1bmRlZmluZWQpIHtcblx0XHRcdGlmICh6b25lICYmIG5lZWRzT2Zmc2V0KG1vbSkgJiYgIW1vbS5faXNVVEMpIHtcblx0XHRcdFx0bW9tLl9kID0gbW9tZW50LnV0Yyhtb20uX2EpLl9kO1xuXHRcdFx0XHRtb20udXRjKCkuYWRkKHpvbmUucGFyc2UobW9tKSwgJ21pbnV0ZXMnKTtcblx0XHRcdH1cblx0XHRcdG1vbS5feiA9IHpvbmU7XG5cdFx0fVxuXHRcdGlmIChtb20uX3opIHtcblx0XHRcdG9mZnNldCA9IG1vbS5fei51dGNPZmZzZXQobW9tKTtcblx0XHRcdGlmIChNYXRoLmFicyhvZmZzZXQpIDwgMTYpIHtcblx0XHRcdFx0b2Zmc2V0ID0gb2Zmc2V0IC8gNjA7XG5cdFx0XHR9XG5cdFx0XHRpZiAobW9tLnV0Y09mZnNldCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdG1vbS51dGNPZmZzZXQoLW9mZnNldCwga2VlcFRpbWUpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0bW9tLnpvbmUob2Zmc2V0LCBrZWVwVGltZSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xuXG5cdGZuLnR6ID0gZnVuY3Rpb24gKG5hbWUsIGtlZXBUaW1lKSB7XG5cdFx0aWYgKG5hbWUpIHtcblx0XHRcdHRoaXMuX3ogPSBnZXRab25lKG5hbWUpO1xuXHRcdFx0aWYgKHRoaXMuX3opIHtcblx0XHRcdFx0bW9tZW50LnVwZGF0ZU9mZnNldCh0aGlzLCBrZWVwVGltZSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRsb2dFcnJvcihcIk1vbWVudCBUaW1lem9uZSBoYXMgbm8gZGF0YSBmb3IgXCIgKyBuYW1lICsgXCIuIFNlZSBodHRwOi8vbW9tZW50anMuY29tL3RpbWV6b25lL2RvY3MvIy9kYXRhLWxvYWRpbmcvLlwiKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH1cblx0XHRpZiAodGhpcy5feikgeyByZXR1cm4gdGhpcy5fei5uYW1lOyB9XG5cdH07XG5cblx0ZnVuY3Rpb24gYWJicldyYXAgKG9sZCkge1xuXHRcdHJldHVybiBmdW5jdGlvbiAoKSB7XG5cdFx0XHRpZiAodGhpcy5feikgeyByZXR1cm4gdGhpcy5fei5hYmJyKHRoaXMpOyB9XG5cdFx0XHRyZXR1cm4gb2xkLmNhbGwodGhpcyk7XG5cdFx0fTtcblx0fVxuXG5cdGZ1bmN0aW9uIHJlc2V0Wm9uZVdyYXAgKG9sZCkge1xuXHRcdHJldHVybiBmdW5jdGlvbiAoKSB7XG5cdFx0XHR0aGlzLl96ID0gbnVsbDtcblx0XHRcdHJldHVybiBvbGQuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcblx0XHR9O1xuXHR9XG5cblx0Zm4uem9uZU5hbWUgPSBhYmJyV3JhcChmbi56b25lTmFtZSk7XG5cdGZuLnpvbmVBYmJyID0gYWJicldyYXAoZm4uem9uZUFiYnIpO1xuXHRmbi51dGMgICAgICA9IHJlc2V0Wm9uZVdyYXAoZm4udXRjKTtcblxuXHRtb21lbnQudHouc2V0RGVmYXVsdCA9IGZ1bmN0aW9uKG5hbWUpIHtcblx0XHRpZiAobWFqb3IgPCAyIHx8IChtYWpvciA9PT0gMiAmJiBtaW5vciA8IDkpKSB7XG5cdFx0XHRsb2dFcnJvcignTW9tZW50IFRpbWV6b25lIHNldERlZmF1bHQoKSByZXF1aXJlcyBNb21lbnQuanMgPj0gMi45LjAuIFlvdSBhcmUgdXNpbmcgTW9tZW50LmpzICcgKyBtb21lbnQudmVyc2lvbiArICcuJyk7XG5cdFx0fVxuXHRcdG1vbWVudC5kZWZhdWx0Wm9uZSA9IG5hbWUgPyBnZXRab25lKG5hbWUpIDogbnVsbDtcblx0XHRyZXR1cm4gbW9tZW50O1xuXHR9O1xuXG5cdC8vIENsb25pbmcgYSBtb21lbnQgc2hvdWxkIGluY2x1ZGUgdGhlIF96IHByb3BlcnR5LlxuXHR2YXIgbW9tZW50UHJvcGVydGllcyA9IG1vbWVudC5tb21lbnRQcm9wZXJ0aWVzO1xuXHRpZiAoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG1vbWVudFByb3BlcnRpZXMpID09PSAnW29iamVjdCBBcnJheV0nKSB7XG5cdFx0Ly8gbW9tZW50IDIuOC4xK1xuXHRcdG1vbWVudFByb3BlcnRpZXMucHVzaCgnX3onKTtcblx0XHRtb21lbnRQcm9wZXJ0aWVzLnB1c2goJ19hJyk7XG5cdH0gZWxzZSBpZiAobW9tZW50UHJvcGVydGllcykge1xuXHRcdC8vIG1vbWVudCAyLjcuMFxuXHRcdG1vbWVudFByb3BlcnRpZXMuX3ogPSBudWxsO1xuXHR9XG5cblx0bG9hZERhdGEoe1xuXHRcdFwidmVyc2lvblwiOiBcIjIwMThlXCIsXG5cdFx0XCJ6b25lc1wiOiBbXG5cdFx0XHRcIkFmcmljYS9BYmlkamFufExNVCBHTVR8Zy44IDB8MDF8LTJsZFhILlF8NDhlNVwiLFxuXHRcdFx0XCJBZnJpY2EvQWNjcmF8TE1UIEdNVCArMDAyMHwuUSAwIC1rfDAxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMXwtMjZCYlguOCA2dHpYLjggTW5FIDFCQWsgTW5FIDFCQWsgTW5FIDFCQWsgTW5FIDFDMGsgTW5FIDFCQWsgTW5FIDFCQWsgTW5FIDFCQWsgTW5FIDFDMGsgTW5FIDFCQWsgTW5FIDFCQWsgTW5FIDFCQWsgTW5FIDFDMGsgTW5FIDFCQWsgTW5FIDFCQWsgTW5FIDFCQWsgTW5FIDFDMGsgTW5FIDFCQWsgTW5FIDFCQWsgTW5FIDFCQWsgTW5FIDFDMGsgTW5FIDFCQWsgTW5FIDFCQWsgTW5FfDQxZTVcIixcblx0XHRcdFwiQWZyaWNhL05haXJvYml8TE1UIEVBVCArMDIzMCArMDI0NXwtMnIuZyAtMzAgLTJ1IC0ySnwwMTIzMXwtMUYzQ3IuZyAzRHpyLmcgb2tNdSBNRlhKfDQ3ZTVcIixcblx0XHRcdFwiQWZyaWNhL0FsZ2llcnN8UE1UIFdFVCBXRVNUIENFVCBDRVNUfC05LmwgMCAtMTAgLTEwIC0yMHwwMTIxMjEyMTIxMjEyMTIxMzQzNDMxMzEyMTIzNDMxMjEzfC0ybmNvOS5sIGNOYjkubCBIQTAgMTlBMCAxaU0wIDExYzAgMW9vMCBXbzAgMXJjMCBRTTAgMUVNMCBVTTAgREEwIEltbzAgcmQwIERlMCA5WHowIDFmYjAgMWFwMCAxNkswIDJ5bzAgbUVwMCBod0wwIGp4QTAgMTFBMCBkRGQwIDE3YjAgMTFCMCAxY04wIDJEeTAgMWNOMCAxZkIwIDFjTDB8MjZlNVwiLFxuXHRcdFx0XCJBZnJpY2EvTGFnb3N8TE1UIFdBVHwtZC5BIC0xMHwwMXwtMjJ5MGQuQXwxN2U2XCIsXG5cdFx0XHRcIkFmcmljYS9CaXNzYXV8TE1UIC0wMSBHTVR8MTIuayAxMCAwfDAxMnwtMmxkWDAgMnhvbzB8MzllNFwiLFxuXHRcdFx0XCJBZnJpY2EvTWFwdXRvfExNVCBDQVR8LTJhLmsgLTIwfDAxfC0yR0plYS5rfDI2ZTVcIixcblx0XHRcdFwiQWZyaWNhL0NhaXJvfEVFVCBFRVNUfC0yMCAtMzB8MDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMHwtMWJJTzAgdmIwIDFpcDAgMTF6MCAxaU4wIDFuejAgMTJwMCAxcHowIDEwTjAgMXB6MCAxNnAwIDFqejAgczNkMCBWejAgMW9OMCAxMWIwIDFvTzAgMTBOMCAxcHowIDEwTjAgMXBiMCAxME4wIDFwYjAgMTBOMCAxcGIwIDEwTjAgMXB6MCAxME4wIDFwYjAgMTBOMCAxcGIwIDExZDAgMW9MMCAxMWQwIDFwYjAgMTFkMCAxb0wwIDExZDAgMW9MMCAxMWQwIDFvTDAgMTFkMCAxcGIwIDExZDAgMW9MMCAxMWQwIDFvTDAgMTFkMCAxb0wwIDExZDAgMXBiMCAxMWQwIDFvTDAgMTFkMCAxb0wwIDExZDAgMW9MMCAxMWQwIDFwYjAgMTFkMCAxb0wwIDExZDAgMVdMMCByZDAgMVJ6MCB3cDAgMXBiMCAxMWQwIDFvTDAgMTFkMCAxb0wwIDExZDAgMW9MMCAxMWQwIDFwYjAgMTFkMCAxcUwwIFhkMCAxb0wwIDExZDAgMW9MMCAxMWQwIDFwYjAgMTFkMCAxb0wwIDExZDAgMW9MMCAxMWQwIDFueTAgMTF6MCAxbzEwIDExejAgMW8xMCAxMXowIDFvMTAgMTF6MCAxcU4wIDExejAgMW8xMCAxMXowIDFvMTAgMTF6MCAxbzEwIDExejAgMW8xMCAxMXowIDFxTjAgMTF6MCAxbzEwIDExejAgMW8xMCBXTDAgMXFOMCBSYjAgMXdwMCBPbjAgMXpkMCBMejAgMUVOMCBGYjAgYzEwIDhuMCA4TmQwIGdMMCBlMTAgbW4wfDE1ZTZcIixcblx0XHRcdFwiQWZyaWNhL0Nhc2FibGFuY2F8TE1UIFdFVCBXRVNUIENFVHx1LmsgMCAtMTAgLTEwfDAxMjEyMTIxMjEyMTIxMjEyMTMxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjF8LTJnTW50LkUgMTMwTHQuRSByYjAgRGQwIGRWYjAgYjZwMCBUWDAgRW9CMCBMTDAgZ25kMCByejAgNDNkMCBBTDAgMU5kMCBYWDAgMUNwMCBwejAgZEVwMCA0bW4wIFN5TjAgQUwwIDFOZDAgd24wIDFGQjAgRGIwIDF6ZDAgTHowIDFOZjAgd00wIGNvMCBnbzAgMW8wMCBzMDAgZEEwIHZjMCAxMUEwIEEwMCBlMDAgeTAwIDExQTAgdU0wIGUwMCBEYzAgMTFBMCBzMDAgZTAwIElNMCBXTTAgbW8wIGdNMCBMQTAgV00wIGpBMCBlMDAgUmMwIDExQTAgZTAwIGUwMCBVMDAgMTFBMCA4bzAgZTAwIDExQTAgMTFBMCA1QTAgZTAwIDE3YzAgMWZBMCAxYTAwIDFhMDAgMWZBMCAxN2MwIDFpbzAgMTRvMCAxbGMwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbGMwIDE0bzAgMWZBMHwzMmU1XCIsXG5cdFx0XHRcIkFmcmljYS9DZXV0YXxXRVQgV0VTVCBDRVQgQ0VTVHwwIC0xMCAtMTAgLTIwfDAxMDEwMTAxMDEwMTAxMDEwMTAxMDIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMnwtMjVLTjAgMTF6MCBkcmQwIDE4cDAgM0hYMCAxN2QwIDFmejAgMWExMCAxaW8wIDFhMDAgMXk3bzAgTEwwIGduZDAgcnowIDQzZDAgQUwwIDFOZDAgWFgwIDFDcDAgcHowIGRFcDAgNFZCMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDB8ODVlM1wiLFxuXHRcdFx0XCJBZnJpY2EvRWxfQWFpdW58TE1UIC0wMSBXRVQgV0VTVHxRLk0gMTAgMCAtMTB8MDEyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzJ8LTFyRHo3LmMgMUdWQTcuYyA2TDAgQUwwIDFOZDAgWFgwIDFDcDAgcHowIDFjQkIwIEFMMCAxTmQwIHduMCAxRkIwIERiMCAxemQwIEx6MCAxTmYwIHdNMCBjbzAgZ28wIDFvMDAgczAwIGRBMCB2YzAgMTFBMCBBMDAgZTAwIHkwMCAxMUEwIHVNMCBlMDAgRGMwIDExQTAgczAwIGUwMCBJTTAgV00wIG1vMCBnTTAgTEEwIFdNMCBqQTAgZTAwIFJjMCAxMUEwIGUwMCBlMDAgVTAwIDExQTAgOG8wIGUwMCAxMUEwIDExQTAgNUEwIGUwMCAxN2MwIDFmQTAgMWEwMCAxYTAwIDFmQTAgMTdjMCAxaW8wIDE0bzAgMWxjMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMWxjMCAxNG8wIDFmQTB8MjBlNFwiLFxuXHRcdFx0XCJBZnJpY2EvSm9oYW5uZXNidXJnfFNBU1QgU0FTVCBTQVNUfC0xdSAtMjAgLTMwfDAxMjEyMXwtMkdKZHUgMUFqZHUgMWNMMCAxY04wIDFjTDB8ODRlNVwiLFxuXHRcdFx0XCJBZnJpY2EvSnViYXxMTVQgQ0FUIENBU1QgRUFUfC0yNi5zIC0yMCAtMzAgLTMwfDAxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEzfC0xeVcyNi5zIDF6SzA2LnMgMTZMMCAxaU4wIDE3YjAgMWpkMCAxN2IwIDFpcDAgMTd6MCAxaTEwIDE3WDAgMWhCMCAxOG4wIDFoZDAgMTliMCAxZ3AwIDE5ejAgMWlOMCAxN2IwIDFpcDAgMTd6MCAxaTEwIDE4bjAgMWhkMCAxOEwwIDFnTjAgMTliMCAxZ3AwIDE5ejAgMWlOMCAxN3owIDFpMTAgMTdYMCB5R2QwXCIsXG5cdFx0XHRcIkFmcmljYS9LaGFydG91bXxMTVQgQ0FUIENBU1QgRUFUfC0yYS44IC0yMCAtMzAgLTMwfDAxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEzMXwtMXlXMmEuOCAxekswYS44IDE2TDAgMWlOMCAxN2IwIDFqZDAgMTdiMCAxaXAwIDE3ejAgMWkxMCAxN1gwIDFoQjAgMThuMCAxaGQwIDE5YjAgMWdwMCAxOXowIDFpTjAgMTdiMCAxaXAwIDE3ejAgMWkxMCAxOG4wIDFoZDAgMThMMCAxZ04wIDE5YjAgMWdwMCAxOXowIDFpTjAgMTd6MCAxaTEwIDE3WDAgeUdkMCBIakwwfDUxZTVcIixcblx0XHRcdFwiQWZyaWNhL01vbnJvdmlhfE1NVCBNTVQgR01UfEguOCBJLnUgMHwwMTJ8LTIzTHpnLlEgMjhHMDEubXwxMWU1XCIsXG5cdFx0XHRcIkFmcmljYS9OZGphbWVuYXxMTVQgV0FUIFdBU1R8LTEwLmMgLTEwIC0yMHwwMTIxfC0ybGUxMC5jIDJKM2MwLmMgV24wfDEzZTVcIixcblx0XHRcdFwiQWZyaWNhL1Nhb19Ub21lfExNVCBHTVQgV0FUfEEuSiAwIC0xMHwwMTJ8LTJsZTAwIDRpNk4wXCIsXG5cdFx0XHRcIkFmcmljYS9Ucmlwb2xpfExNVCBDRVQgQ0VTVCBFRVR8LVEuSSAtMTAgLTIwIC0yMHwwMTIxMjEyMTMxMjEyMTIxMjEyMTIxMjEyMTMxMjMxMjN8LTIxSmNRLkkgMWhuQlEuSSB2eDAgNGlQMCB4eDAgNGVOMCBCYjAgN2lwMCBVMG4wIEExMCAxZGIwIDFjTjAgMWRiMCAxZGQwIDFkYjAgMWVOMCAxYmIwIDFlMTAgMWNMMCAxYzEwIDFkYjAgMWRkMCAxZGIwIDFjTjAgMWRiMCAxcTEwIGZBbjAgMWVwMCAxZGIwIEFLcTAgVEEwIDFvMDB8MTFlNVwiLFxuXHRcdFx0XCJBZnJpY2EvVHVuaXN8UE1UIENFVCBDRVNUfC05LmwgLTEwIC0yMHwwMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxfC0ybmNvOS5sIDE4cGE5LmwgMXFNMCBEQTAgM1RjMCAxMUIwIDF6ZTAgV00wIDd6MCAzZDAgMTRMMCAxY04wIDFmOTAgMWFyMCAxNkowIDFnWEIwIFdNMCAxckEwIDExYzAgbndvMCBLbzAgMWNNMCAxY00wIDFyQTAgMTBNMCB6dU0wIDEwTjAgMWFOMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMHwyMGU1XCIsXG5cdFx0XHRcIkFmcmljYS9XaW5kaG9la3wrMDEzMCBTQVNUIFNBU1QgQ0FUIFdBVHwtMXUgLTIwIC0zMCAtMjAgLTEwfDAxMjEzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzfC0yR0pkdSAxQWpkdSAxY0wwIDFTcUwwIDlJbzAgMTZQMCAxblgwIDExQjAgMXFMMCBXTjAgMXFMMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxcUwwIFdOMCAxcUwwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFxTDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMXFMMCBXTjAgMXFMMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwfDMyZTRcIixcblx0XHRcdFwiQW1lcmljYS9BZGFrfE5TVCBOV1QgTlBUIEJTVCBCRFQgQUhTVCBIU1QgSERUfGIwIGEwIGEwIGIwIGEwIGEwIGEwIDkwfDAxMjAzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQ1Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3NnwtMTdTWDAgOHdXMCBpQjAgUWxiMCA1Mk8wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWZ6MCAxY04wIDFjTDAgMWNOMCAxY0wwIHMxMCAxVnowIExCMCAxQlgwIDFjTjAgMWZ6MCAxYTEwIDFmejAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWZ6MCAxYTEwIDFmejAgY20wIDEwcTAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDE0cDAgMWxiMCAxNHAwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjB8MzI2XCIsXG5cdFx0XHRcIkFtZXJpY2EvQW5jaG9yYWdlfEFTVCBBV1QgQVBUIEFIU1QgQUhEVCBZU1QgQUtTVCBBS0RUfGEwIDkwIDkwIGEwIDkwIDkwIDkwIDgwfDAxMjAzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQ1Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3NnwtMTdUMDAgOHdYMCBpQTAgUWxiMCA1Mk8wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWZ6MCAxY04wIDFjTDAgMWNOMCAxY0wwIHMxMCAxVnowIExCMCAxQlgwIDFjTjAgMWZ6MCAxYTEwIDFmejAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWZ6MCAxYTEwIDFmejAgY20wIDEwcTAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDE0cDAgMWxiMCAxNHAwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjB8MzBlNFwiLFxuXHRcdFx0XCJBbWVyaWNhL1BvcnRfb2ZfU3BhaW58TE1UIEFTVHw0Ni40IDQwfDAxfC0ya052Ui5VfDQzZTNcIixcblx0XHRcdFwiQW1lcmljYS9BcmFndWFpbmF8TE1UIC0wMyAtMDJ8M2MuTSAzMCAyMHwwMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxfC0yZ2x3TC5jIEhkS0wuYyAxY2MwIDFlMTAgMWJYMCBFemQwIFNvMCAxdkEwIE1uMCAxQkIwIE1MMCAxQkIwIHpYMCBxZTEwIHhiMCAyZXAwIG56MCAxQzEwIHpYMCAxQzEwIExYMCAxQzEwIE1uMCBIMjEwIFJiMCAxdEIwIElMMCAxRmQwIEZYMCAxRU4wIEZYMCAxSEIwIEx6MCBkTU4wIEx6MCAxemQwIFJiMCAxd04wIFduMCAxdEIwIFJiMCAxdEIwIFdMMCAxdEIwIFJiMCAxemQwIE9uMCAxSEIwIEZYMCBueTEwIEx6MHwxNGU0XCIsXG5cdFx0XHRcIkFtZXJpY2EvQXJnZW50aW5hL0J1ZW5vc19BaXJlc3xDTVQgLTA0IC0wMyAtMDJ8NGcuTSA0MCAzMCAyMHwwMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMzIzMjMyMzIzMjMyMzIzMnwtMjBVSEguYyBwS25ILmMgTW4wIDFpTjAgVGIwIDFDMTAgTFgwIDFDMTAgTFgwIDFDMTAgTFgwIDFDMTAgTW4wIDFDMTAgTFgwIDFDMTAgTFgwIDFDMTAgTFgwIDFDMTAgTW4wIE1OMCAyanowIE1OMCA0bFgwIHUxMCA1TGIwIDFwQjAgRm56MCB1MTAgdUwwIDF2ZDAgU0wwIDF2ZDAgU0wwIDF2ZDAgMTd6MCAxY04wIDFmejAgMWNOMCAxY0wwIDFjTjAgYXNuMCBEYjAgenZkMCBCejAgMXRCMCBUWDAgMXdwMCBSYjAgMXdwMCBSYjAgMXdwMCBUWDAgQTRwMCB1TDAgMXFOMCBXTDBcIixcblx0XHRcdFwiQW1lcmljYS9BcmdlbnRpbmEvQ2F0YW1hcmNhfENNVCAtMDQgLTAzIC0wMnw0Zy5NIDQwIDMwIDIwfDAxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIzMjMyMzIzMTMyMzIxMjMyfC0yMFVISC5jIHBLbkguYyBNbjAgMWlOMCBUYjAgMUMxMCBMWDAgMUMxMCBMWDAgMUMxMCBMWDAgMUMxMCBNbjAgMUMxMCBMWDAgMUMxMCBMWDAgMUMxMCBMWDAgMUMxMCBNbjAgTU4wIDJqejAgTU4wIDRsWDAgdTEwIDVMYjAgMXBCMCBGbnowIHUxMCB1TDAgMXZkMCBTTDAgMXZkMCBTTDAgMXZkMCAxN3owIDFjTjAgMWZ6MCAxY04wIDFjTDAgMWNOMCBhc24wIERiMCB6dmQwIEJ6MCAxdEIwIFRYMCAxd3AwIFJiMCAxd3EwIFJhMCAxd3AwIFRYMCBybEIwIDdCMCA4emIwIHVMMFwiLFxuXHRcdFx0XCJBbWVyaWNhL0FyZ2VudGluYS9Db3Jkb2JhfENNVCAtMDQgLTAzIC0wMnw0Zy5NIDQwIDMwIDIwfDAxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIzMjMyMzIzMTMyMzIzMjMyfC0yMFVISC5jIHBLbkguYyBNbjAgMWlOMCBUYjAgMUMxMCBMWDAgMUMxMCBMWDAgMUMxMCBMWDAgMUMxMCBNbjAgMUMxMCBMWDAgMUMxMCBMWDAgMUMxMCBMWDAgMUMxMCBNbjAgTU4wIDJqejAgTU4wIDRsWDAgdTEwIDVMYjAgMXBCMCBGbnowIHUxMCB1TDAgMXZkMCBTTDAgMXZkMCBTTDAgMXZkMCAxN3owIDFjTjAgMWZ6MCAxY04wIDFjTDAgMWNOMCBhc24wIERiMCB6dmQwIEJ6MCAxdEIwIFRYMCAxd3AwIFJiMCAxd3EwIFJhMCAxd3AwIFRYMCBBNHAwIHVMMCAxcU4wIFdMMFwiLFxuXHRcdFx0XCJBbWVyaWNhL0FyZ2VudGluYS9KdWp1eXxDTVQgLTA0IC0wMyAtMDJ8NGcuTSA0MCAzMCAyMHwwMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMzIzMjMxMjEzMjMyMzJ8LTIwVUhILmMgcEtuSC5jIE1uMCAxaU4wIFRiMCAxQzEwIExYMCAxQzEwIExYMCAxQzEwIExYMCAxQzEwIE1uMCAxQzEwIExYMCAxQzEwIExYMCAxQzEwIExYMCAxQzEwIE1uMCBNTjAgMmp6MCBNTjAgNGxYMCB1MTAgNUxiMCAxcEIwIEZuejAgdTEwIHVMMCAxdmQwIFNMMCAxdmQwIFNMMCAxdmQwIDE3ejAgMWNOMCAxZnowIDFjTjAgMWNMMCAxY04wIGFzbjAgRGIwIHp2ZDAgQnowIDF0QjAgVFgwIDF6ZTAgVFgwIDFsZDAgV0swIDF3cDAgVFgwIEE0cDAgdUwwXCIsXG5cdFx0XHRcIkFtZXJpY2EvQXJnZW50aW5hL0xhX1Jpb2phfENNVCAtMDQgLTAzIC0wMnw0Zy5NIDQwIDMwIDIwfDAxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIzMjMyMzIzMTIzMjMyMTIzMnwtMjBVSEguYyBwS25ILmMgTW4wIDFpTjAgVGIwIDFDMTAgTFgwIDFDMTAgTFgwIDFDMTAgTFgwIDFDMTAgTW4wIDFDMTAgTFgwIDFDMTAgTFgwIDFDMTAgTFgwIDFDMTAgTW4wIE1OMCAyanowIE1OMCA0bFgwIHUxMCA1TGIwIDFwQjAgRm56MCB1MTAgdUwwIDF2ZDAgU0wwIDF2ZDAgU0wwIDF2ZDAgMTd6MCAxY04wIDFmejAgMWNOMCAxY0wwIDFjTjAgYXNuMCBEYjAgenZkMCBCejAgMXRCMCBUWDAgMXdwMCBRbjAgcU8wIDE2bjAgUmIwIDF3cDAgVFgwIHJsQjAgN0IwIDh6YjAgdUwwXCIsXG5cdFx0XHRcIkFtZXJpY2EvQXJnZW50aW5hL01lbmRvemF8Q01UIC0wNCAtMDMgLTAyfDRnLk0gNDAgMzAgMjB8MDEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjMyMzIzMTIxMjEzMjEyMzJ8LTIwVUhILmMgcEtuSC5jIE1uMCAxaU4wIFRiMCAxQzEwIExYMCAxQzEwIExYMCAxQzEwIExYMCAxQzEwIE1uMCAxQzEwIExYMCAxQzEwIExYMCAxQzEwIExYMCAxQzEwIE1uMCBNTjAgMmp6MCBNTjAgNGxYMCB1MTAgNUxiMCAxcEIwIEZuejAgdTEwIHVMMCAxdmQwIFNMMCAxdmQwIFNMMCAxdmQwIDE3ejAgMWNOMCAxZnowIDFjTjAgMWNMMCAxY04wIGFzbjAgRGIwIHp2ZDAgQnowIDF0QjAgVFgwIDF1MjAgU0wwIDF2ZDAgVGIwIDF3cDAgVFcwIHJpMTAgT3AwIDdUWDAgdUwwXCIsXG5cdFx0XHRcIkFtZXJpY2EvQXJnZW50aW5hL1Jpb19HYWxsZWdvc3xDTVQgLTA0IC0wMyAtMDJ8NGcuTSA0MCAzMCAyMHwwMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMzIzMjMyMzIzMjMyMTIzMnwtMjBVSEguYyBwS25ILmMgTW4wIDFpTjAgVGIwIDFDMTAgTFgwIDFDMTAgTFgwIDFDMTAgTFgwIDFDMTAgTW4wIDFDMTAgTFgwIDFDMTAgTFgwIDFDMTAgTFgwIDFDMTAgTW4wIE1OMCAyanowIE1OMCA0bFgwIHUxMCA1TGIwIDFwQjAgRm56MCB1MTAgdUwwIDF2ZDAgU0wwIDF2ZDAgU0wwIDF2ZDAgMTd6MCAxY04wIDFmejAgMWNOMCAxY0wwIDFjTjAgYXNuMCBEYjAgenZkMCBCejAgMXRCMCBUWDAgMXdwMCBSYjAgMXdwMCBSYjAgMXdwMCBUWDAgcmxCMCA3QjAgOHpiMCB1TDBcIixcblx0XHRcdFwiQW1lcmljYS9BcmdlbnRpbmEvU2FsdGF8Q01UIC0wNCAtMDMgLTAyfDRnLk0gNDAgMzAgMjB8MDEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjMyMzIzMjMxMzIzMjMyfC0yMFVISC5jIHBLbkguYyBNbjAgMWlOMCBUYjAgMUMxMCBMWDAgMUMxMCBMWDAgMUMxMCBMWDAgMUMxMCBNbjAgMUMxMCBMWDAgMUMxMCBMWDAgMUMxMCBMWDAgMUMxMCBNbjAgTU4wIDJqejAgTU4wIDRsWDAgdTEwIDVMYjAgMXBCMCBGbnowIHUxMCB1TDAgMXZkMCBTTDAgMXZkMCBTTDAgMXZkMCAxN3owIDFjTjAgMWZ6MCAxY04wIDFjTDAgMWNOMCBhc24wIERiMCB6dmQwIEJ6MCAxdEIwIFRYMCAxd3AwIFJiMCAxd3EwIFJhMCAxd3AwIFRYMCBBNHAwIHVMMFwiLFxuXHRcdFx0XCJBbWVyaWNhL0FyZ2VudGluYS9TYW5fSnVhbnxDTVQgLTA0IC0wMyAtMDJ8NGcuTSA0MCAzMCAyMHwwMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMzIzMjMyMzEyMzIzMjEyMzJ8LTIwVUhILmMgcEtuSC5jIE1uMCAxaU4wIFRiMCAxQzEwIExYMCAxQzEwIExYMCAxQzEwIExYMCAxQzEwIE1uMCAxQzEwIExYMCAxQzEwIExYMCAxQzEwIExYMCAxQzEwIE1uMCBNTjAgMmp6MCBNTjAgNGxYMCB1MTAgNUxiMCAxcEIwIEZuejAgdTEwIHVMMCAxdmQwIFNMMCAxdmQwIFNMMCAxdmQwIDE3ejAgMWNOMCAxZnowIDFjTjAgMWNMMCAxY04wIGFzbjAgRGIwIHp2ZDAgQnowIDF0QjAgVFgwIDF3cDAgUW4wIHFPMCAxNm4wIFJiMCAxd3AwIFRYMCBybGQwIG0xMCA4bGIwIHVMMFwiLFxuXHRcdFx0XCJBbWVyaWNhL0FyZ2VudGluYS9TYW5fTHVpc3xDTVQgLTA0IC0wMyAtMDJ8NGcuTSA0MCAzMCAyMHwwMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMzIzMjMxMjEyMTIzMjEyMTJ8LTIwVUhILmMgcEtuSC5jIE1uMCAxaU4wIFRiMCAxQzEwIExYMCAxQzEwIExYMCAxQzEwIExYMCAxQzEwIE1uMCAxQzEwIExYMCAxQzEwIExYMCAxQzEwIExYMCAxQzEwIE1uMCBNTjAgMmp6MCBNTjAgNGxYMCB1MTAgNUxiMCAxcEIwIEZuejAgdTEwIHVMMCAxdmQwIFNMMCAxdmQwIFNMMCAxdmQwIDE3ejAgMWNOMCAxZnowIDFjTjAgMWNMMCAxY04wIGFzbjAgRGIwIHp2ZDAgQnowIDF0QjAgWFgwIDFxMjAgU0wwIEFOMCB2RGIwIG0xMCA4bGIwIDhMMCBqZDAgMXFOMCBXTDAgMXFOMFwiLFxuXHRcdFx0XCJBbWVyaWNhL0FyZ2VudGluYS9UdWN1bWFufENNVCAtMDQgLTAzIC0wMnw0Zy5NIDQwIDMwIDIwfDAxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIzMjMyMzIzMTMyMzIxMjMyMzJ8LTIwVUhILmMgcEtuSC5jIE1uMCAxaU4wIFRiMCAxQzEwIExYMCAxQzEwIExYMCAxQzEwIExYMCAxQzEwIE1uMCAxQzEwIExYMCAxQzEwIExYMCAxQzEwIExYMCAxQzEwIE1uMCBNTjAgMmp6MCBNTjAgNGxYMCB1MTAgNUxiMCAxcEIwIEZuejAgdTEwIHVMMCAxdmQwIFNMMCAxdmQwIFNMMCAxdmQwIDE3ejAgMWNOMCAxZnowIDFjTjAgMWNMMCAxY04wIGFzbjAgRGIwIHp2ZDAgQnowIDF0QjAgVFgwIDF3cDAgUmIwIDF3cTAgUmEwIDF3cDAgVFgwIHJsQjAgNE4wIDhCWDAgdUwwIDFxTjAgV0wwXCIsXG5cdFx0XHRcIkFtZXJpY2EvQXJnZW50aW5hL1VzaHVhaWF8Q01UIC0wNCAtMDMgLTAyfDRnLk0gNDAgMzAgMjB8MDEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjMyMzIzMjMyMzIzMjEyMzJ8LTIwVUhILmMgcEtuSC5jIE1uMCAxaU4wIFRiMCAxQzEwIExYMCAxQzEwIExYMCAxQzEwIExYMCAxQzEwIE1uMCAxQzEwIExYMCAxQzEwIExYMCAxQzEwIExYMCAxQzEwIE1uMCBNTjAgMmp6MCBNTjAgNGxYMCB1MTAgNUxiMCAxcEIwIEZuejAgdTEwIHVMMCAxdmQwIFNMMCAxdmQwIFNMMCAxdmQwIDE3ejAgMWNOMCAxZnowIDFjTjAgMWNMMCAxY04wIGFzbjAgRGIwIHp2ZDAgQnowIDF0QjAgVFgwIDF3cDAgUmIwIDF3cDAgUmIwIDF3cDAgVFgwIHJrTjAgOHAwIDh6YjAgdUwwXCIsXG5cdFx0XHRcIkFtZXJpY2EvQ3VyYWNhb3xMTVQgLTA0MzAgQVNUfDR6LkwgNHUgNDB8MDEyfC0ya1Y3by5kIDI4S0xTLmR8MTVlNFwiLFxuXHRcdFx0XCJBbWVyaWNhL0FzdW5jaW9ufEFNVCAtMDQgLTAzfDNPLkUgNDAgMzB8MDEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyfC0xeDU4OS5rIDFES005LmsgM0NMMCAzRGQwIDEwTDAgMXBCMCAxMG4wIDFwQjAgMTBuMCAxcEIwIDFjTDAgMWRkMCAxZGIwIDFkZDAgMWNMMCAxZGQwIDFjTDAgMWRkMCAxY0wwIDFkZDAgMWRiMCAxZGQwIDFjTDAgMWRkMCAxY0wwIDFkZDAgMWNMMCAxZGQwIDFkYjAgMWRkMCAxY0wwIDFsQjAgMTRuMCAxZGQwIDFjTDAgMWZkMCBXTDAgMXJkMCAxYUwwIDFkQjAgWHowIDFxcDAgWGIwIDFxTjAgMTBMMCAxckIwIFRYMCAxdEIwIFdMMCAxcU4wIDExejAgMW8xMCAxMXowIDFvMTAgMTF6MCAxcU4wIDFjTDAgV04wIDFxTDAgMTFCMCAxblgwIDFpcDAgV0wwIDFxTjAgV0wwIDFxTjAgV0wwIDF0QjAgVFgwIDF0QjAgVFgwIDF0QjAgMTlYMCAxYTEwIDFmejAgMWExMCAxZnowIDFjTjAgMTdiMCAxaXAwIDE3YjAgMWlwMCAxN2IwIDFpcDAgMTlYMCAxZkIwIDE5WDAgMWZCMCAxOVgwIDFpcDAgMTdiMCAxaXAwIDE3YjAgMWlwMCAxOVgwIDFmQjAgMTlYMCAxZkIwIDE5WDAgMWZCMCAxOVgwIDFpcDAgMTdiMCAxaXAwIDE3YjAgMWlwMCAxOVgwIDFmQjAgMTlYMCAxZkIwIDE5WDAgMWlwMCAxN2IwIDFpcDAgMTdiMCAxaXAwIDE5WDAgMWZCMCAxOVgwIDFmQjAgMTlYMCAxZkIwIDE5WDAgMWlwMCAxN2IwIDFpcDAgMTdiMCAxaXAwfDI4ZTVcIixcblx0XHRcdFwiQW1lcmljYS9BdGlrb2thbnxDU1QgQ0RUIENXVCBDUFQgRVNUfDYwIDUwIDUwIDUwIDUwfDAxMDEyMzR8LTI1VFEwIDFpbjAgUm5iMCAzamUwIDh4MzAgaXcwfDI4ZTJcIixcblx0XHRcdFwiQW1lcmljYS9CYWhpYV9CYW5kZXJhc3xMTVQgTVNUIENTVCBQU1QgTURUIENEVHw3MSA3MCA2MCA4MCA2MCA1MHwwMTIxMjEyMTMxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyfC0xVVFGMCBkZUwwIDhsYzAgMTdjMCAxME0wIDFkZDAgb3RYMCBnbU4wIFAyTjAgMTNWZDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMWZCMCBXTDAgMWZCMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTRwMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFuVzAgMTFCMCAxblgwIDExQjAgMW5YMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDE0cDAgMWxiMCAxNHAwIDFsYjB8ODRlM1wiLFxuXHRcdFx0XCJBbWVyaWNhL0JhaGlhfExNVCAtMDMgLTAyfDJ5LjQgMzAgMjB8MDEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjF8LTJnbHhwLlUgSGRMcC5VIDFjYzAgMWUxMCAxYlgwIEV6ZDAgU28wIDF2QTAgTW4wIDFCQjAgTUwwIDFCQjAgelgwIHFlMTAgeGIwIDJlcDAgbnowIDFDMTAgelgwIDFDMTAgTFgwIDFDMTAgTW4wIEgyMTAgUmIwIDF0QjAgSUwwIDFGZDAgRlgwIDFFTjAgRlgwIDFIQjAgTHowIDFFTjAgTHowIDFDMTAgSUwwIDFIQjAgRGIwIDFIQjAgT24wIDF6ZDAgT24wIDF6ZDAgTHowIDF6ZDAgUmIwIDF3TjAgV24wIDF0QjAgUmIwIDF0QjAgV0wwIDF0QjAgUmIwIDF6ZDAgT24wIDFIQjAgRlgwIGw1QjAgUmIwfDI3ZTVcIixcblx0XHRcdFwiQW1lcmljYS9CYXJiYWRvc3xMTVQgQk1UIEFTVCBBRFR8M1cudCAzVy50IDQwIDMwfDAxMjMyMzIzMjMyfC0xUTBJMS52IGpzTTAgMU9EQzEudiBJTDAgMWlwMCAxN2IwIDFpcDAgMTdiMCAxbGQwIDEzYjB8MjhlNFwiLFxuXHRcdFx0XCJBbWVyaWNhL0JlbGVtfExNVCAtMDMgLTAyfDNkLlUgMzAgMjB8MDEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxfC0yZ2x3Sy40IEhkS0suNCAxY2MwIDFlMTAgMWJYMCBFemQwIFNvMCAxdkEwIE1uMCAxQkIwIE1MMCAxQkIwIHpYMCBxZTEwIHhiMCAyZXAwIG56MCAxQzEwIHpYMCAxQzEwIExYMCAxQzEwIE1uMCBIMjEwIFJiMCAxdEIwIElMMCAxRmQwIEZYMHwyMGU1XCIsXG5cdFx0XHRcIkFtZXJpY2EvQmVsaXplfExNVCBDU1QgLTA1MzAgQ0RUfDVRLk0gNjAgNXUgNTB8MDEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTMxMzF8LTJrQnU3LmMgZlBBNy5jIE9udSAxemN1IFJidSAxd291IFJidSAxd291IFJidSAxemN1IE9udSAxemN1IE9udSAxemN1IFJidSAxd291IFJidSAxd291IFJidSAxd291IFJidSAxemN1IE9udSAxemN1IE9udSAxemN1IFJidSAxd291IFJidSAxd291IFJidSAxemN1IE9udSAxemN1IE9udSAxemN1IE9udSAxemN1IFJidSAxd291IFJidSAxd291IFJidSAxemN1IE9udSAxemN1IE9udSAxemN1IFJidSAxd291IFJidSAxZjBNdSBxbjAgbHhCMCBtbjB8NTdlM1wiLFxuXHRcdFx0XCJBbWVyaWNhL0JsYW5jLVNhYmxvbnxBU1QgQURUIEFXVCBBUFR8NDAgMzAgMzAgMzB8MDEwMjMwfC0yNVRTMCAxaW4wIFVHcDAgOHg1MCBpdTB8MTFlMlwiLFxuXHRcdFx0XCJBbWVyaWNhL0JvYV9WaXN0YXxMTVQgLTA0IC0wM3w0Mi5FIDQwIDMwfDAxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjF8LTJnbHZWLmsgSGRLVi5rIDFjYzAgMWUxMCAxYlgwIEV6ZDAgU28wIDF2QTAgTW4wIDFCQjAgTUwwIDFCQjAgelgwIHFlMTAgeGIwIDJlcDAgbnowIDFDMTAgelgwIDFDMTAgTFgwIDFDMTAgTW4wIEgyMTAgUmIwIDF0QjAgSUwwIDFGZDAgRlgwIHNtcDAgV0wwIDF0QjAgMkwwfDYyZTJcIixcblx0XHRcdFwiQW1lcmljYS9Cb2dvdGF8Qk1UIC0wNSAtMDR8NFUuZyA1MCA0MHwwMTIxfC0yZWI3My5JIDM4eW8zLkkgMmVuMHw5MGU1XCIsXG5cdFx0XHRcIkFtZXJpY2EvQm9pc2V8UFNUIFBEVCBNU1QgTVdUIE1QVCBNRFR8ODAgNzAgNzAgNjAgNjAgNjB8MDEwMTAyMzQyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MnwtMjYxcTAgMW5YMCAxMUIwIDFuWDAgOEMxMCBKQ0wwIDh4MjAgaXgwIFF3TjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFmejAgMWNOMCAxY0wwIDFjTjAgMWNMMCBEZDAgMUtuMCBMQjAgMUJYMCAxY04wIDFmejAgMWExMCAxZnowIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFmejAgMWExMCAxZnowIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDE0cDAgMWxiMCAxNHAwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjB8MjFlNFwiLFxuXHRcdFx0XCJBbWVyaWNhL0NhbWJyaWRnZV9CYXl8LTAwIE1TVCBNV1QgTVBUIE1ERFQgTURUIENTVCBDRFQgRVNUfDAgNzAgNjAgNjAgNTAgNjAgNjAgNTAgNTB8MDEyMzE0MTUxNTE1MTUxNTE1MTUxNTE1MTUxNTE1MTUxNTE1MTUxNTE1MTUxNTY3ODY1MTUxNTE1MTUxNTE1MTUxNTE1MTUxNTE1MTUxNTE1MTUxNTE1MTUxNTE1MTUxNTE1MTUxNTE1MTUxNTE1MTUxNTE1MTUxNTE1MXwtMjFKYzAgUk85MCA4eDIwIGl4MCBMQ0wwIDFmQTAgemdPMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFmejAgMWExMCAxZnowIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDE0cDAgMWxiMCAxNHAwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUEwIDFuWDAgMkswIFdRMCAxblgwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjB8MTVlMlwiLFxuXHRcdFx0XCJBbWVyaWNhL0NhbXBvX0dyYW5kZXxMTVQgLTA0IC0wM3wzQy5zIDQwIDMwfDAxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMnwtMmdsd2wudyBIZExsLncgMWNjMCAxZTEwIDFiWDAgRXpkMCBTbzAgMXZBMCBNbjAgMUJCMCBNTDAgMUJCMCB6WDAgcWUxMCB4YjAgMmVwMCBuejAgMUMxMCB6WDAgMUMxMCBMWDAgMUMxMCBNbjAgSDIxMCBSYjAgMXRCMCBJTDAgMUZkMCBGWDAgMUVOMCBGWDAgMUhCMCBMejAgMUVOMCBMejAgMUMxMCBJTDAgMUhCMCBEYjAgMUhCMCBPbjAgMXpkMCBPbjAgMXpkMCBMejAgMXpkMCBSYjAgMXdOMCBXbjAgMXRCMCBSYjAgMXRCMCBXTDAgMXRCMCBSYjAgMXpkMCBPbjAgMUhCMCBGWDAgMUMxMCBMejAgMUlwMCBIWDAgMXpkMCBPbjAgMUhCMCBJTDAgMXdwMCBPbjAgMUMxMCBMejAgMUMxMCBPbjAgMXpkMCBPbjAgMXpkMCBSYjAgMXpkMCBMejAgMUMxMCBMejAgMUMxMCBPbjAgMXpkMCBPbjAgMXpkMCBPbjAgMXpkMCBPbjAgMUhCMCBGWDAgMUhCMCBGWDAgMUhCMCBJTDAgMUhCMCBGWDAgMUhCMCBJTDAgMUVOMCBGWDAgMUhCMCBGWDAgMUhCMCBJTDAgMUVOMCBJTDAgMUhCMCBGWDAgMUhCMCBGWDAgMUhCMCBGWDAgMUhCMCBGWDAgMUhCMCBGWDAgMUtwMCBGWDAgMUhCMCBJTDAgMUVOMCBGWDAgMUhCMCBGWDAgMUhCMCBJTDAgMUVOMHw3N2U0XCIsXG5cdFx0XHRcIkFtZXJpY2EvQ2FuY3VufExNVCBDU1QgRVNUIEVEVCBDRFR8NUwuNCA2MCA1MCA0MCA1MHwwMTIzMjMyMzQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDEyfC0xVVFHMCAycTJvMCB5TEIwIDFsYjAgMTRwMCAxbGIwIDE0cDAgTHowIHhCMCAxNHAwIDFuWDAgMTFCMCAxblgwIDFmQjAgV0wwIDFmQjAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTRwMCAxbGIwIDE0cDAgMWxiMCBEZDB8NjNlNFwiLFxuXHRcdFx0XCJBbWVyaWNhL0NhcmFjYXN8Q01UIC0wNDMwIC0wNHw0ci5FIDR1IDQwfDAxMjEyfC0ya1Y3dy5rIDI4S00yLmsgMUl3T3Uga3FvMHwyOWU1XCIsXG5cdFx0XHRcIkFtZXJpY2EvQ2F5ZW5uZXxMTVQgLTA0IC0wM3wzdC5rIDQwIDMwfDAxMnwtMm1yd3UuRSAyZ1dvdS5FfDU4ZTNcIixcblx0XHRcdFwiQW1lcmljYS9QYW5hbWF8Q01UIEVTVHw1ai5BIDUwfDAxfC0ydWR1RS5vfDE1ZTVcIixcblx0XHRcdFwiQW1lcmljYS9DaGljYWdvfENTVCBDRFQgRVNUIENXVCBDUFR8NjAgNTAgNTAgNTAgNTB8MDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDIwMTAxMDEwMTAxMDM0MDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTB8LTI2MXMwIDFuWDAgMTFCMCAxblgwIDF3cDAgVFgwIFdOMCAxcUwwIDFjTjAgV0wwIDFxTjAgMTF6MCAxbzEwIDExejAgMW8xMCAxMXowIDFvMTAgMTF6MCAxbzEwIDExejAgMXFOMCAxMXowIDFvMTAgMTF6MCAxbzEwIDExejAgMW8xMCAxMXowIDFvMTAgMTF6MCAxcU4wIFdMMCAxcU4wIDExejAgMW8xMCAxMXowIDExQjAgMUh6MCAxNHAwIDExejAgMW8xMCAxMXowIDFxTjAgV0wwIDFxTjAgMTF6MCAxbzEwIDExejAgUkIwIDh4MzAgaXcwIDFvMTAgMTF6MCAxbzEwIDExejAgMW8xMCAxMXowIDFvMTAgMTF6MCAxcU4wIFdMMCAxcU4wIDExejAgMW8xMCAxMXowIDFvMTAgMTF6MCAxbzEwIDExejAgMW8xMCAxZnowIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFmejAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWZ6MCAxYTEwIDFmejAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWZ6MCAxY04wIDFjTDAgMWNOMCAxY0wwIHMxMCAxVnowIExCMCAxQlgwIDFjTjAgMWZ6MCAxYTEwIDFmejAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWZ6MCAxYTEwIDFmejAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTRwMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTRwMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMHw5MmU1XCIsXG5cdFx0XHRcIkFtZXJpY2EvQ2hpaHVhaHVhfExNVCBNU1QgQ1NUIENEVCBNRFR8NzQuayA3MCA2MCA1MCA2MHwwMTIxMjEyMzIzMjQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxfC0xVVFGMCBkZUwwIDhsYzAgMTdjMCAxME0wIDFkZDAgMnpRTjAgMWxiMCAxNHAwIDFsYjAgMTRxMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMWZCMCBXTDAgMWZCMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTRwMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDE0cDAgMWxiMCAxNHAwIDFsYjB8ODFlNFwiLFxuXHRcdFx0XCJBbWVyaWNhL0Nvc3RhX1JpY2F8U0pNVCBDU1QgQ0RUfDVBLmQgNjAgNTB8MDEyMTIxMjEyMXwtMVhkNm4uTCAybHUwbi5MIERiMCAxS3AwIERiMCBwUkIwIDE1YjAgMWtwMCBtTDB8MTJlNVwiLFxuXHRcdFx0XCJBbWVyaWNhL0NyZXN0b258TVNUIFBTVHw3MCA4MHwwMTB8LTI5RFIwIDQzQjB8NTNlMlwiLFxuXHRcdFx0XCJBbWVyaWNhL0N1aWFiYXxMTVQgLTA0IC0wM3wzSS5rIDQwIDMwfDAxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTJ8LTJnbHdmLkUgSGRMZi5FIDFjYzAgMWUxMCAxYlgwIEV6ZDAgU28wIDF2QTAgTW4wIDFCQjAgTUwwIDFCQjAgelgwIHFlMTAgeGIwIDJlcDAgbnowIDFDMTAgelgwIDFDMTAgTFgwIDFDMTAgTW4wIEgyMTAgUmIwIDF0QjAgSUwwIDFGZDAgRlgwIDFFTjAgRlgwIDFIQjAgTHowIDFFTjAgTHowIDFDMTAgSUwwIDFIQjAgRGIwIDFIQjAgT24wIDF6ZDAgT24wIDF6ZDAgTHowIDF6ZDAgUmIwIDF3TjAgV24wIDF0QjAgUmIwIDF0QjAgV0wwIDF0QjAgUmIwIDF6ZDAgT24wIDFIQjAgRlgwIDRhMTAgSFgwIDF6ZDAgT24wIDFIQjAgSUwwIDF3cDAgT24wIDFDMTAgTHowIDFDMTAgT24wIDF6ZDAgT24wIDF6ZDAgUmIwIDF6ZDAgTHowIDFDMTAgTHowIDFDMTAgT24wIDF6ZDAgT24wIDF6ZDAgT24wIDF6ZDAgT24wIDFIQjAgRlgwIDFIQjAgRlgwIDFIQjAgSUwwIDFIQjAgRlgwIDFIQjAgSUwwIDFFTjAgRlgwIDFIQjAgRlgwIDFIQjAgSUwwIDFFTjAgSUwwIDFIQjAgRlgwIDFIQjAgRlgwIDFIQjAgRlgwIDFIQjAgRlgwIDFIQjAgRlgwIDFLcDAgRlgwIDFIQjAgSUwwIDFFTjAgRlgwIDFIQjAgRlgwIDFIQjAgSUwwIDFFTjB8NTRlNFwiLFxuXHRcdFx0XCJBbWVyaWNhL0Rhbm1hcmtzaGF2bnxMTVQgLTAzIC0wMiBHTVR8MWUuRSAzMCAyMCAwfDAxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEzfC0yYTVXSi5rIDJ6NWZKLmsgMTlVMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCBEQzB8OFwiLFxuXHRcdFx0XCJBbWVyaWNhL0Rhd3Nvbl9DcmVla3xQU1QgUERUIFBXVCBQUFQgTVNUfDgwIDcwIDcwIDcwIDcwfDAxMDIzMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTR8LTI1VE8wIDFpbjAgVUdwMCA4eDEwIGl5MCAzTkIwIDExejAgMW8xMCAxMXowIDFvMTAgMTF6MCAxcU4wIFdMMCAxcU4wIDExejAgMW8xMCAxMXowIDFvMTAgMTF6MCAxbzEwIDExejAgMW8xMCAxMXowIDFxTjAgMTF6MCAxbzEwIDExejAgMW8xMCAxMXowIDFvMTAgMTF6MCAxbzEwIDExejAgMXFOMCBXTDAgMXFOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxZnowIDFhMTAgMWZ6MCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxZnowIDFjTjAgTUwwfDEyZTNcIixcblx0XHRcdFwiQW1lcmljYS9EYXdzb258WVNUIFlEVCBZV1QgWVBUIFlERFQgUFNUIFBEVHw5MCA4MCA4MCA4MCA3MCA4MCA3MHwwMTAxMDIzMDQwNTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1fC0yNVROMCAxaW4wIDFvMTAgMTNWMCBTZXIwIDh4MDAgaXowIExDTDAgMWZBMCBqckEwIGZOZDAgMWNMMCAxY04wIDFjTDAgMWNOMCAxZnowIDFhMTAgMWZ6MCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTRwMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwfDEzZTJcIixcblx0XHRcdFwiQW1lcmljYS9EZW52ZXJ8TVNUIE1EVCBNV1QgTVBUfDcwIDYwIDYwIDYwfDAxMDEwMTAxMDIzMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwfC0yNjFyMCAxblgwIDExQjAgMW5YMCAxMUIwIDFxTDAgV04wIG1uMCBPcmQwIDh4MjAgaXgwIExDTjAgMWZ6MCAxYTEwIDFmejAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWZ6MCAxY04wIDFjTDAgMWNOMCAxY0wwIHMxMCAxVnowIExCMCAxQlgwIDFjTjAgMWZ6MCAxYTEwIDFmejAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWZ6MCAxYTEwIDFmejAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTRwMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTRwMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMHwyNmU1XCIsXG5cdFx0XHRcIkFtZXJpY2EvRGV0cm9pdHxMTVQgQ1NUIEVTVCBFV1QgRVBUIEVEVHw1dy5iIDYwIDUwIDQwIDQwIDQwfDAxMjM0MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MnwtMkNnaXIuTiBwZXFyLk4gMTU2TDAgOHg0MCBpdjAgNmZkMCAxMXowIFhRcDAgMWNMMCBzMTAgMVZ6MCAxY04wIDFjTDAgMWNOMCAxZnowIDFhMTAgMWZ6MCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxZnowIDFhMTAgMWZ6MCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTRwMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwfDM3ZTVcIixcblx0XHRcdFwiQW1lcmljYS9FZG1vbnRvbnxMTVQgTVNUIE1EVCBNV1QgTVBUfDd4LlEgNzAgNjAgNjAgNjB8MDEyMTIxMjEyMTIxMjEzNDEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjF8LTJ5ZDRxLjggc2hkcS44IDFpbjAgMTdkMCBoejAgMmRCMCAxZnowIDFhMTAgMTF6MCAxcU4wIFdMMCAxcU4wIDExejAgSUdOMCA4eDIwIGl4MCAzTkIwIDExejAgTEZCMCAxY0wwIDNDcDAgMWNMMCA2Nk4wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxZnowIDFhMTAgMWZ6MCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxZnowIDFhMTAgMWZ6MCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTRwMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwfDEwZTVcIixcblx0XHRcdFwiQW1lcmljYS9FaXJ1bmVwZXxMTVQgLTA1IC0wNHw0RC5zIDUwIDQwfDAxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjF8LTJnbHZrLncgSGRMay53IDFjYzAgMWUxMCAxYlgwIEV6ZDAgU28wIDF2QTAgTW4wIDFCQjAgTUwwIDFCQjAgelgwIHFlMTAgeGIwIDJlcDAgbnowIDFDMTAgelgwIDFDMTAgTFgwIDFDMTAgTW4wIEgyMTAgUmIwIDF0QjAgSUwwIDFGZDAgRlgwIGRQQjAgT24wIHlUZDAgZDVYMHwzMWUzXCIsXG5cdFx0XHRcIkFtZXJpY2EvRWxfU2FsdmFkb3J8TE1UIENTVCBDRFR8NVUuTSA2MCA1MHwwMTIxMjF8LTFYaUczLmMgMkZ2YzMuYyBXTDAgMXFOMCBXTDB8MTFlNVwiLFxuXHRcdFx0XCJBbWVyaWNhL1RpanVhbmF8TE1UIE1TVCBQU1QgUERUIFBXVCBQUFR8N00uNCA3MCA4MCA3MCA3MCA3MHwwMTIxMjMyNDUyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzJ8LTFVUUUwIDRQWDAgOG1NMCA4bGMwIFNOMCAxY0wwIHBIQjAgODNyMCB6STAgNU8xMCAxUnowIGNPTzAgMTFBMCAxbzAwIDExQTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCBCVXAwIDFmejAgMWExMCAxZnowIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFmejAgMWExMCAxZnowIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDE0cDAgMWxiMCAxNHAwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDE0cDAgMWxiMCAxNHAwIDFsYjAgVTEwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjB8MjBlNVwiLFxuXHRcdFx0XCJBbWVyaWNhL0ZvcnRfTmVsc29ufFBTVCBQRFQgUFdUIFBQVCBNU1R8ODAgNzAgNzAgNzAgNzB8MDEwMjMwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDR8LTI1VE8wIDFpbjAgVUdwMCA4eDEwIGl5MCAzTkIwIDExejAgMW8xMCAxMXowIDFvMTAgMTF6MCAxcU4wIFdMMCAxcU4wIDExejAgMW8xMCAxMXowIDFvMTAgMTF6MCAxbzEwIDExejAgMW8xMCAxMXowIDFxTjAgMTF6MCAxbzEwIDExejAgMW8xMCAxMXowIDFvMTAgMTF6MCAxbzEwIDExejAgMXFOMCBXTDAgMXFOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxZnowIDFhMTAgMWZ6MCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxZnowIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFmejAgMWExMCAxZnowIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFmejAgMWExMCAxZnowIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDE0cDAgMWxiMCAxNHAwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwfDM5ZTJcIixcblx0XHRcdFwiQW1lcmljYS9Gb3J0X1dheW5lfENTVCBDRFQgQ1dUIENQVCBFU1QgRURUfDYwIDUwIDUwIDUwIDUwIDQwfDAxMDEwMTAyMzAxMDEwMTAxMDEwMTAxMDEwMTA0MDQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NHwtMjYxczAgMW5YMCAxMUIwIDFuWDAgUUkxMCBEYjAgUkIwIDh4MzAgaXcwIDFvMTAgMTF6MCAxbzEwIDExejAgMW8xMCAxMXowIDFvMTAgMTF6MCAxcU4wIFdMMCAxcU4wIDExejAgMW8xMCAxMXowIDFvMTAgMTF6MCAxbzEwIDExejAgMW8xMCA1VHowIDFvMTAgcUxiMCAxY0wwIDFjTjAgMWNMMCAxcWhkMCAxblgwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwXCIsXG5cdFx0XHRcIkFtZXJpY2EvRm9ydGFsZXphfExNVCAtMDMgLTAyfDJ5IDMwIDIwfDAxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjF8LTJnbHhxIEhkTHEgMWNjMCAxZTEwIDFiWDAgRXpkMCBTbzAgMXZBMCBNbjAgMUJCMCBNTDAgMUJCMCB6WDAgcWUxMCB4YjAgMmVwMCBuejAgMUMxMCB6WDAgMUMxMCBMWDAgMUMxMCBNbjAgSDIxMCBSYjAgMXRCMCBJTDAgMUZkMCBGWDAgMUVOMCBGWDAgMUhCMCBMejAgbnNwMCBXTDAgMXRCMCA1ejAgMm1OMCBPbjB8MzRlNVwiLFxuXHRcdFx0XCJBbWVyaWNhL0dsYWNlX0JheXxMTVQgQVNUIEFEVCBBV1QgQVBUfDNYLk0gNDAgMzAgMzAgMzB8MDEyMTM0MTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxfC0ySXNJMC5jIEN3TzAuYyAxaW4wIFVHcDAgOHg1MCBpdTAgaXExMCAxMXowIEpnMTAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFmejAgMWExMCAxZnowIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFmejAgMWExMCAxZnowIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDE0cDAgMWxiMCAxNHAwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjB8MTllM1wiLFxuXHRcdFx0XCJBbWVyaWNhL0dvZHRoYWJ8TE1UIC0wMyAtMDJ8M3EuVSAzMCAyMHwwMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxfC0yYTVVeC40IDJ6NWR4LjQgMTlVMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwfDE3ZTNcIixcblx0XHRcdFwiQW1lcmljYS9Hb29zZV9CYXl8TlNUIE5EVCBOU1QgTkRUIE5XVCBOUFQgQVNUIEFEVCBBRERUfDN1LlEgMnUuUSAzdSAydSAydSAydSA0MCAzMCAyMHwwMTAyMzIzMjMyMzIzMjMyNDUyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njg2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzZ8LTI1VFN0LjggMWluMCBEWGIwIDJIYlguOCBXTDAgMXFOMCBXTDAgMXFOMCBXTDAgMXRCMCBUWDAgMXRCMCBXTDAgMXFOMCBXTDAgMXFOMCA3VUh1IGl0dSAxdEIwIFdMMCAxcU4wIFdMMCAxcU4wIFdMMCAxcU4wIFdMMCAxdEIwIFdMMCAxbGQwIDExejAgMW8xMCAxMXowIDFvMTAgMTF6MCAxbzEwIDExejAgMW8xMCAxMXowIDFxTjAgMTF6MCAxbzEwIDExejAgMW8xMCAxMXowIDFvMTAgMTF6MCAxbzEwIDFmejAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWZ6MCBTMTAgZzB1IDFmejAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWZ6MCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxZnowIDFhMTAgMWZ6MCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxZnowIDFhMTAgMWZ6MCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxNG4xIDFsYjAgMTRwMCAxblcwIDExQzAgMW5YMCAxMUIwIDFuWDAgMTRwMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemNYIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwfDc2ZTJcIixcblx0XHRcdFwiQW1lcmljYS9HcmFuZF9UdXJrfEtNVCBFU1QgRURUIEFTVHw1Ny5hIDUwIDQwIDQwfDAxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjMyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxfC0ybDF1US5PIDJISEJRLk8gMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWZ6MCAxYTEwIDFmejAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTRwMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTRwMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCA1SXAwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjB8MzdlMlwiLFxuXHRcdFx0XCJBbWVyaWNhL0d1YXRlbWFsYXxMTVQgQ1NUIENEVHw2Mi40IDYwIDUwfDAxMjEyMTIxMjF8LTI0S2hWLlUgMmVmWFYuVSBBbjAgbXRkMCBOejAgaWZCMCAxN2IwIHpEQjAgMTF6MHwxM2U1XCIsXG5cdFx0XHRcIkFtZXJpY2EvR3VheWFxdWlsfFFNVCAtMDUgLTA0fDVlIDUwIDQwfDAxMjF8LTF5VlNLIDJ1SUxLIHJ6MHwyN2U1XCIsXG5cdFx0XHRcIkFtZXJpY2EvR3V5YW5hfExNVCAtMDM0NSAtMDMgLTA0fDNRLkUgM0ogMzAgNDB8MDEyM3wtMmR2VTcuayAycjZMUS5rIEJ4YmZ8ODBlNFwiLFxuXHRcdFx0XCJBbWVyaWNhL0hhbGlmYXh8TE1UIEFTVCBBRFQgQVdUIEFQVHw0ZS5vIDQwIDMwIDMwIDMwfDAxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMzQxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjF8LTJJc0hKLkEgeHp6Si5BIDFkYjAgM0kzMCAxaW4wIDNIWDAgSUwwIDFFMTAgTUwwIDF5TjAgUGIwIDFCZDAgTW4wIDFCZDAgUnowIDF3MTAgWGIwIDF3MTAgTFgwIDF3MTAgWGIwIDF3MTAgTHowIDFDMTAgSnowIDFFMTAgT0wwIDF5TjAgVW4wIDFxcDAgWGIwIDFxcDAgMTFYMCAxdzEwIEx6MCAxSEIwIExYMCAxQzEwIEZYMCAxdzEwIFhiMCAxcXAwIFhiMCAxQkIwIExYMCAxdGQwIFhiMCAxcXAwIFhiMCBSZjAgOHg1MCBpdTAgMW8xMCAxMXowIDFvMTAgMTF6MCAxbzEwIDExejAgMW8xMCAxMXowIDNRcDAgMTF6MCAxbzEwIDExejAgMW8xMCAxMXowIDFvMTAgMTF6MCAzUXAwIDExejAgMW8xMCAxMXowIDFvMTAgMTF6MCAxbzEwIDExejAgNmkxMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxZnowIDFhMTAgMWZ6MCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxZnowIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFmejAgMWExMCAxZnowIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFmejAgMWExMCAxZnowIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDE0cDAgMWxiMCAxNHAwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjB8MzllNFwiLFxuXHRcdFx0XCJBbWVyaWNhL0hhdmFuYXxITVQgQ1NUIENEVHw1dC5BIDUwIDQwfDAxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMXwtMU1ldXUubyA3Mnp1Lm8gTUwwIHNsZDAgQW4wIDFOZDAgRGIwIDFOZDAgQW4wIDZFcDAgQW4wIDFOZDAgQW4wIEpEZDAgTW4wIDFBcDAgT24wIDFmZDAgMTFYMCAxcU4wIFdMMCAxd3AwIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWZ6MCAxY04wIDE0bjAgMWxkMCAxNEwwIDFrTjAgMTViMCAxa3AwIDFjTDAgMWNOMCAxZnowIDFhMTAgMWZ6MCAxZkIwIDExejAgMTRwMCAxblgwIDExQjAgMW5YMCAxbzEwIDExejAgMW8xMCAxMXowIDFvMTAgMTF6MCAxbzEwIDE0bjAgMWxkMCAxNG4wIDExQjAgMW5YMCAxMUIwIDFuWDAgMTRwMCAxbGIwIDE0cDAgMWxiMCAxYTEwIDFpbjAgMWExMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxY00wIDFjTTAgMWNNMCAxZkEwIDE3YzAgMW8wMCAxMUEwIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxNG8wIDFsYzAgMTRvMCAxbGMwIDExQTAgNmkwMCBSYzAgMXdvMCBVMDAgMXRBMCBSYzAgMXdvMCBVMDAgMXdvMCBVMDAgMXpjMCBVMDAgMXFNMCBPbzAgMXpjMCBPbzAgMXpjMCBPbzAgMXpjMCBSYzAgMXpjMCBPbzAgMXpjMCBPbzAgMXpjMCBPbzAgMXpjMCBPbzAgMXpjMCBSYzAgMXpjMCBPbzAgMXpjMCBPbzAgMXpjMCBPbzAgMXpjMCBPbzAgMXpjMCBPbzAgMXpjMCBSYzAgMXpjMCBPbzAgMXpjMCBPbzAgMXpjMCBPbzAgMXpjMCBPbzAgMXpjMCBSYzAgMXpjMCBPbzAgMXpjMCBPbzAgMXpjMCBPbzAgMXpjMCBPbzAgMXpjMCBPbzAgMXpjMHwyMWU1XCIsXG5cdFx0XHRcIkFtZXJpY2EvSGVybW9zaWxsb3xMTVQgTVNUIENTVCBQU1QgTURUfDduLlEgNzAgNjAgODAgNjB8MDEyMTIxMjEzMTQxNDE0MXwtMVVRRjAgZGVMMCA4bGMwIDE3YzAgMTBNMCAxZGQwIG90WDAgZ21OMCBQMk4wIDEzVmQwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMWxiMHw2NGU0XCIsXG5cdFx0XHRcIkFtZXJpY2EvSW5kaWFuYS9Lbm94fENTVCBDRFQgQ1dUIENQVCBFU1R8NjAgNTAgNTAgNTAgNTB8MDEwMTAyMzAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTA0MDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDE0MTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMHwtMjYxczAgMW5YMCAxMUIwIDFuWDAgU2dOMCA4eDMwIGl3MCAzTkIwIDExejAgMW8xMCAxMXowIDFvMTAgMTF6MCAxcU4wIFdMMCAxcU4wIDExejAgMW8xMCAxMXowIDFvMTAgMTF6MCAxbzEwIDExejAgMW8xMCAxZnowIDFjTjAgMWNMMCAxY04wIDExejAgMW8xMCAxMXowIDFvMTAgMWNMMCAxY04wIDFmejAgMWNOMCAxY0wwIDFjTjAgM0NuMCA4d3AwIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxZnowIDFjTjAgMWNMMCAxY04wIDFjTDAgczEwIDFWejAgTEIwIDFCWDAgMWNOMCAxZnowIDFhMTAgMWZ6MCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxZnowIDFhMTAgMWZ6MCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTRwMCAxbGIwIHo4bzAgMW8wMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMFwiLFxuXHRcdFx0XCJBbWVyaWNhL0luZGlhbmEvTWFyZW5nb3xDU1QgQ0RUIENXVCBDUFQgRVNUIEVEVHw2MCA1MCA1MCA1MCA1MCA0MHwwMTAxMDIzMDEwMTAxMDEwMTAxMDEwMTA0NTQ1NDU0NTQ1NDE0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0fC0yNjFzMCAxblgwIDExQjAgMW5YMCBTZ04wIDh4MzAgaXcwIGR5TjAgMTF6MCA2ZmQwIDExejAgMW8xMCAxMXowIDFxTjAgMTF6MCAxbzEwIDExejAgMW8xMCAxMXowIDFvMTAgMTF6MCAxbzEwIDExejAgMXFOMCBqcnowIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWZ6MCAxY04wIDFjTDAgMWNOMCAxY0wwIHMxMCAxVkEwIExBMCAxQlgwIDFlNnAwIDFuWDAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjBcIixcblx0XHRcdFwiQW1lcmljYS9JbmRpYW5hL1BldGVyc2J1cmd8Q1NUIENEVCBDV1QgQ1BUIEVTVCBFRFR8NjAgNTAgNTAgNTAgNTAgNDB8MDEwMTAyMzAxMDEwMTAxMDEwMTAxMDEwMTAxMDQwMTAxMDEwMTAxMDEwMTAxMDEwMTAxNDEwMTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTR8LTI2MXMwIDFuWDAgMTFCMCAxblgwIFNnTjAgOHgzMCBpdzAgbmpYMCBXTjAgMXFOMCAxMXowIDFvMTAgMTF6MCAxbzEwIDExejAgMW8xMCAxMXowIDFvMTAgMTF6MCAxcU4wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAzRmIwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFmejAgMWNOMCAxY0wwIDFjTjAgMWNMMCBzMTAgMVZ6MCBMQjAgMUJYMCAxY04wIDFmejAgMWExMCAxZnowIDE5Y28wIDFvMDAgUmQwIDF6YjAgT28wIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjBcIixcblx0XHRcdFwiQW1lcmljYS9JbmRpYW5hL1RlbGxfQ2l0eXxDU1QgQ0RUIENXVCBDUFQgRVNUIEVEVHw2MCA1MCA1MCA1MCA1MCA0MHwwMTAxMDIzMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDQ1NDU0MTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMHwtMjYxczAgMW5YMCAxMUIwIDFuWDAgU2dOMCA4eDMwIGl3MCAxbzEwIDExejAgZzBwMCAxMXowIDFvMTAgMTF6MCAxcUwwIFdOMCAxcU4wIDExejAgMW8xMCAxMXowIDFvMTAgMTF6MCAxbzEwIDExejAgMW8xMCAxZnowIDFjTjAgV0wwIDFxTjAgMWNMMCAxY04wIDFjTDAgMWNOMCBjYUwwIDFjTDAgMWNOMCAxY0wwIDFxaGQwIDFvMDAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjBcIixcblx0XHRcdFwiQW1lcmljYS9JbmRpYW5hL1ZldmF5fENTVCBDRFQgQ1dUIENQVCBFU1QgRURUfDYwIDUwIDUwIDUwIDUwIDQwfDAxMDEwMjMwNDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NHwtMjYxczAgMW5YMCAxMUIwIDFuWDAgU2dOMCA4eDMwIGl3MCBrUEIwIEF3bjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxZnowIDFjTjAgMWNMMCAxbG5kMCAxblgwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwXCIsXG5cdFx0XHRcIkFtZXJpY2EvSW5kaWFuYS9WaW5jZW5uZXN8Q1NUIENEVCBDV1QgQ1BUIEVTVCBFRFR8NjAgNTAgNTAgNTAgNTAgNDB8MDEwMTAyMzAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTA0NTQ1NDEwMTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTR8LTI2MXMwIDFuWDAgMTFCMCAxblgwIFNnTjAgOHgzMCBpdzAgMW8xMCAxMXowIGcwcDAgMTF6MCAxbzEwIDExejAgMXFMMCBXTjAgMXFOMCAxMXowIDFvMTAgMTF6MCAxbzEwIDExejAgMW8xMCAxMXowIDFvMTAgMWZ6MCAxY04wIFdMMCAxcU4wIDFjTDAgMWNOMCAxY0wwIDFjTjAgY2FMMCAxY0wwIDFjTjAgMWNMMCAxcWhkMCAxbzAwIFJkMCAxemIwIE9vMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwXCIsXG5cdFx0XHRcIkFtZXJpY2EvSW5kaWFuYS9XaW5hbWFjfENTVCBDRFQgQ1dUIENQVCBFU1QgRURUfDYwIDUwIDUwIDUwIDUwIDQwfDAxMDEwMjMwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwNDU0NTQxMDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0fC0yNjFzMCAxblgwIDExQjAgMW5YMCBTZ04wIDh4MzAgaXcwIDFvMTAgMTF6MCAxbzEwIDExejAgMW8xMCAxMXowIDFvMTAgMTF6MCAxcU4wIFdMMCAxcU4wIDExejAgMW8xMCAxMXowIDFvMTAgMTF6MCAxbzEwIDExejAgMW8xMCAxZnowIDFjTjAgMWNMMCAxY04wIDExejAgMW8xMCAxMXowIDFvMTAgMTF6MCAxbzEwIDExejAgMXFOMCBqcnowIDFjTDAgMWNOMCAxY0wwIDFxaGQwIDFvMDAgUmQwIDF6YTAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjBcIixcblx0XHRcdFwiQW1lcmljYS9JbnV2aWt8LTAwIFBTVCBQRERUIE1TVCBNRFR8MCA4MCA2MCA3MCA2MHwwMTIxMzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzfC1GbkEwIHRXVTAgMWZBMCB3UGUwIDJwejAgMWNMMCAxY04wIDFjTDAgMWNOMCAxZnowIDFhMTAgMWZ6MCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTRwMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwfDM1ZTJcIixcblx0XHRcdFwiQW1lcmljYS9JcWFsdWl0fC0wMCBFV1QgRVBUIEVTVCBFRERUIEVEVCBDU1QgQ0RUfDAgNDAgNDAgNTAgMzAgNDAgNjAgNTB8MDEyMzQzNTM1MzUzNTM1MzUzNTM1MzUzNTM1MzUzNTM1MzUzNTM1MzUzNTM1NjczNTM1MzUzNTM1MzUzNTM1MzUzNTM1MzUzNTM1MzUzNTM1MzUzNTM1MzUzNTM1MzUzNTM1MzUzNTM1MzUzNTM1MzUzNTM1MzUzNTN8LTE2SzAwIDduWDAgaXYwIExDTDAgMWZBMCB6Z08wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWZ6MCAxYTEwIDFmejAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTRwMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQzAgMW5YMCAxMUEwIDFuWDAgMTRwMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMHw2N2UyXCIsXG5cdFx0XHRcIkFtZXJpY2EvSmFtYWljYXxLTVQgRVNUIEVEVHw1Ny5hIDUwIDQwfDAxMjEyMTIxMjEyMTIxMjEyMTIxMjF8LTJsMXVRLk8gMnVNMVEuTyAxVnowIExCMCAxQlgwIDFjTjAgMWZ6MCAxYTEwIDFmejAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWZ6MCAxYTEwIDFmejB8OTRlNFwiLFxuXHRcdFx0XCJBbWVyaWNhL0p1bmVhdXxQU1QgUFdUIFBQVCBQRFQgWURUIFlTVCBBS1NUIEFLRFR8ODAgNzAgNzAgNzAgODAgOTAgOTAgODB8MDEyMDMwMzAzMDMwMzAzMDMwMzAzMDMwMzA0MDMwMzAzNTY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzZ8LTE3VDIwIDh4MTAgaXkwIFZvMTAgMWNMMCAxY04wIDFjTDAgMWNOMCAxZnowIDFjTjAgMWNMMCAxY04wIDFjTDAgczEwIDFWejAgTEIwIDFCWDAgMWNOMCAxZnowIDFhMTAgMWZ6MCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNNMCAxY00wIDFjTDAgMWNOMCAxZnowIDFhMTAgMWZ6MCBjbzAgMTBxMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTRwMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTRwMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMHwzM2UzXCIsXG5cdFx0XHRcIkFtZXJpY2EvS2VudHVja3kvTG91aXN2aWxsZXxDU1QgQ0RUIENXVCBDUFQgRVNUIEVEVHw2MCA1MCA1MCA1MCA1MCA0MHwwMTAxMDEwMTAyMzAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxNDU0NTQ1NDU0NTQ1NDE0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0fC0yNjFzMCAxblgwIDExQjAgMW5YMCAzRmQwIE5iMCBMUGQwIDExejAgUkIwIDh4MzAgaXcwIEJiMCAxME4wIDJiQjAgOGluMCAxcU4wIDExejAgMW8xMCAxMXowIDFvMTAgMTF6MCAxbzEwIDExejAgMW8xMCAxMXowIDFxTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFmejAgMWNOMCB4ejAgZ3NvMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxZnowIDFjTjAgMWNMMCAxY04wIDFjTDAgczEwIDFWQTAgTEEwIDFCWDAgMWNOMCAxZnowIDFhMTAgMWZ6MCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxZnowIDFhMTAgMWZ6MCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTRwMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwXCIsXG5cdFx0XHRcIkFtZXJpY2EvS2VudHVja3kvTW9udGljZWxsb3xDU1QgQ0RUIENXVCBDUFQgRVNUIEVEVHw2MCA1MCA1MCA1MCA1MCA0MHwwMTAxMDIzMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxNDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0fC0yNjFzMCAxblgwIDExQjAgMW5YMCBTZ04wIDh4MzAgaXcwIFNXcDAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWZ6MCAxY04wIDFjTDAgMWNOMCAxY0wwIHMxMCAxVnowIExCMCAxQlgwIDFjTjAgMWZ6MCAxYTEwIDFmejAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWZ6MCAxYTEwIDFmejAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTRwMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMCAxMUEwIDFuWDAgMTRwMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMFwiLFxuXHRcdFx0XCJBbWVyaWNhL0xhX1BhenxDTVQgQlNUIC0wNHw0dy5BIDN3LkEgNDB8MDEyfC0xeDM3ci5vIDEzYjB8MTllNVwiLFxuXHRcdFx0XCJBbWVyaWNhL0xpbWF8TE1UIC0wNSAtMDR8NTguQSA1MCA0MHwwMTIxMjEyMTIxMjEyMTIxfC0ydHlHUC5vIDFiRHpQLm8gelgwIDFhTjAgMWNMMCAxY04wIDFjTDAgMVByQjAgelgwIDFPMTAgelgwIDZHcDAgelgwIDk4cDAgelgwfDExZTZcIixcblx0XHRcdFwiQW1lcmljYS9Mb3NfQW5nZWxlc3xQU1QgUERUIFBXVCBQUFR8ODAgNzAgNzAgNzB8MDEwMTAyMzAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwfC0yNjFxMCAxblgwIDExQjAgMW5YMCBTZ04wIDh4MTAgaXkwIDVXcDEgMVZhWCAzZEEwIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFhMDAgMWZBMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxZnowIDFjTjAgMWNMMCAxY04wIDFjTDAgczEwIDFWejAgTEIwIDFCWDAgMWNOMCAxZnowIDFhMTAgMWZ6MCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxZnowIDFhMTAgMWZ6MCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTRwMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwfDE1ZTZcIixcblx0XHRcdFwiQW1lcmljYS9NYWNlaW98TE1UIC0wMyAtMDJ8Mm0uUSAzMCAyMHwwMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjF8LTJnbHhCLjggSGRMQi44IDFjYzAgMWUxMCAxYlgwIEV6ZDAgU28wIDF2QTAgTW4wIDFCQjAgTUwwIDFCQjAgelgwIHFlMTAgeGIwIDJlcDAgbnowIDFDMTAgelgwIDFDMTAgTFgwIDFDMTAgTW4wIEgyMTAgUmIwIDF0QjAgSUwwIDFGZDAgRlgwIDFFTjAgRlgwIDFIQjAgTHowIGRNTjAgTHowIDhRMTAgV0wwIDF0QjAgNXowIDJtTjAgT24wfDkzZTRcIixcblx0XHRcdFwiQW1lcmljYS9NYW5hZ3VhfE1NVCBDU1QgRVNUIENEVHw1Si5jIDYwIDUwIDUwfDAxMjEzMTMxMjEyMTMxMzF8LTFxdWllLk0gMXlBTWUuTSA0bW4wIDlVcDAgRHowIDFLMTAgRHowIHMzRjAgMUtIMCBEQjAgOUluMCBrOHAwIDE5WDAgMW8zMCAxMXkwfDIyZTVcIixcblx0XHRcdFwiQW1lcmljYS9NYW5hdXN8TE1UIC0wNCAtMDN8NDAuNCA0MCAzMHwwMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMXwtMmdsdlguVSBIZEtYLlUgMWNjMCAxZTEwIDFiWDAgRXpkMCBTbzAgMXZBMCBNbjAgMUJCMCBNTDAgMUJCMCB6WDAgcWUxMCB4YjAgMmVwMCBuejAgMUMxMCB6WDAgMUMxMCBMWDAgMUMxMCBNbjAgSDIxMCBSYjAgMXRCMCBJTDAgMUZkMCBGWDAgZFBCMCBPbjB8MTllNVwiLFxuXHRcdFx0XCJBbWVyaWNhL01hcnRpbmlxdWV8RkZNVCBBU1QgQURUfDQ0LmsgNDAgMzB8MDEyMXwtMm1QVFQuRSAyTFBiVC5FIDE5WDB8MzllNFwiLFxuXHRcdFx0XCJBbWVyaWNhL01hdGFtb3Jvc3xMTVQgQ1NUIENEVHw2RSA2MCA1MHwwMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxfC0xVVFHMCAyRmpDMCAxblgwIGk2cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMWZCMCBXTDAgMWZCMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTRwMCAxbGIwIDE0cDAgMWxiMCBVMTAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMHw0NWU0XCIsXG5cdFx0XHRcIkFtZXJpY2EvTWF6YXRsYW58TE1UIE1TVCBDU1QgUFNUIE1EVHw3NS5FIDcwIDYwIDgwIDYwfDAxMjEyMTIxMzE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDF8LTFVUUYwIGRlTDAgOGxjMCAxN2MwIDEwTTAgMWRkMCBvdFgwIGdtTjAgUDJOMCAxM1ZkMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMCAxZkIwIFdMMCAxZkIwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTRwMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTRwMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTRwMCAxbGIwIDE0cDAgMWxiMHw0NGU0XCIsXG5cdFx0XHRcIkFtZXJpY2EvTWVub21pbmVlfENTVCBDRFQgQ1dUIENQVCBFU1R8NjAgNTAgNTAgNTAgNTB8MDEwMTAyMzAxMDEwNDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTB8LTI2MXMwIDFuWDAgMTFCMCAxblgwIFNnTjAgOHgzMCBpdzAgMW8xMCAxMXowIExDTjAgMWZ6MCA2NDEwIDlKYjAgMWNNMCBzMTAgMVZ6MCBMQjAgMUJYMCAxY04wIDFmejAgMWExMCAxZnowIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFmejAgMWExMCAxZnowIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDE0cDAgMWxiMCAxNHAwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjB8ODVlMlwiLFxuXHRcdFx0XCJBbWVyaWNhL01lcmlkYXxMTVQgQ1NUIEVTVCBDRFR8NVcucyA2MCA1MCA1MHwwMTIxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxfC0xVVFHMCAycTJvMCAyaHowIHd1MzAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMWZCMCBXTDAgMWZCMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTRwMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDE0cDAgMWxiMCAxNHAwIDFsYjB8MTFlNVwiLFxuXHRcdFx0XCJBbWVyaWNhL01ldGxha2F0bGF8UFNUIFBXVCBQUFQgUERUIEFLU1QgQUtEVHw4MCA3MCA3MCA3MCA5MCA4MHwwMTIwMzAzMDMwMzAzMDMwMzAzMDMwMzAzMDMwMzAzMDMwNDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0fC0xN1QyMCA4eDEwIGl5MCBWbzEwIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWZ6MCAxY04wIDFjTDAgMWNOMCAxY0wwIHMxMCAxVnowIExCMCAxQlgwIDFjTjAgMWZ6MCAxYTEwIDFmejAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWZ6MCAxYTEwIDFmejAgMWhVMTAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjB8MTRlMlwiLFxuXHRcdFx0XCJBbWVyaWNhL01leGljb19DaXR5fExNVCBNU1QgQ1NUIENEVCBDV1R8NkEuQSA3MCA2MCA1MCA1MHwwMTIxMjEyMzIzMjQyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzJ8LTFVUUYwIGRlTDAgOGxjMCAxN2MwIDEwTTAgMWRkMCBnRW4wIFRYMCAzeGQwIEpiMCA2ekIwIFNMMCBlNWQwIDE3YjAgMVBmZjAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMWZCMCBXTDAgMWZCMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTRwMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDE0cDAgMWxiMCAxNHAwIDFsYjB8MjBlNlwiLFxuXHRcdFx0XCJBbWVyaWNhL01pcXVlbG9ufExNVCBBU1QgLTAzIC0wMnwzSS5FIDQwIDMwIDIwfDAxMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMnwtMm1La2YuayAyTFRBZi5rIGdRMTAgMWxiMCAxNHAwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjB8NjFlMlwiLFxuXHRcdFx0XCJBbWVyaWNhL01vbmN0b258RVNUIEFTVCBBRFQgQVdUIEFQVHw1MCA0MCAzMCAzMCAzMHwwMTIxMjEyMTIxMjEyMTIxMjEyMTIxMzQxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjF8LTJJc0gwIEN3TjAgMWluMCB6QW8wIEFuMCAxTmQwIEFuMCAxTmQwIEFuMCAxTmQwIEFuMCAxTmQwIEFuMCAxTmQwIEFuMCAxSzEwIEx6MCAxekIwIE5YMCAxdTEwIFduMCBTMjAgOHg1MCBpdTAgMW8xMCAxMXowIDFvMTAgMTF6MCAxbzEwIDExejAgMW8xMCAxMXowIDFxTjAgV0wwIDFxTjAgMTF6MCAxbzEwIDExejAgMW8xMCAxMXowIDFvMTAgMTF6MCAxbzEwIDExejAgMXFOMCAxMXowIDFvMTAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWZ6MCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxZnowIDFhMTAgMWZ6MCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxZnowIDFjTjAgMWNMMCAzQ3AwIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWZ6MCAxYTEwIDFmejAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWZ6MCAxYTEwIDFmejAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRuMSAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTRwMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTRwMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCBSZVggMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMHw2NGUzXCIsXG5cdFx0XHRcIkFtZXJpY2EvTW9udGVycmV5fExNVCBDU1QgQ0RUfDZGLmcgNjAgNTB8MDEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMXwtMVVRRzAgMkZqQzAgMW5YMCBpNnAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFuWDAgMTFCMCAxblgwIDFmQjAgV0wwIDFmQjAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTRwMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTRwMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxNHAwIDFsYjAgMTRwMCAxbGIwfDQxZTVcIixcblx0XHRcdFwiQW1lcmljYS9Nb250ZXZpZGVvfExNVCBNTVQgLTA0IC0wMyAtMDMzMCAtMDIzMCAtMDIgLTAxMzB8M0kuUCAzSS5QIDQwIDMwIDN1IDJ1IDIwIDF1fDAxMjM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNTM1MzYzNjM1MzYzNjM3NTM2MzYzNjM2MzYzNjM2MzYzNjM2MzYzNjM2MzYzNjM2MzYzNjM2MzYzNjM2M3wtMnRSVWYuOSBzVmMwIDhqY2YuOSAxZGIwIDFkY3UgMWNMdSAxZGN1IDFjTHUgaXJjdSAxMXp1IDFvMHUgMTF6dSAxbzB1IDExenUgMW8wdSAxMXp1IDFxTXUgV0x1IDFxTXUgV0x1IDFmQXUgMWNMdSAxbzB1IDExenUgTkF1IDNqWHUgelh1IERxMHUgMTlYdSBwY3UganowIGNtMTAgMTlYMCA2dEIwIDFmYnUgM28wdSBqWDAgNHZCMCB4ejAgM0NwMCBtbXUgMWExMCBJTXUgRGIwIDRjMTAgdUwwIDFOZDAgQW4wIDFTTjAgdUwwIG1wMCAyOEwwIGlQQjAgdW4wIDFTTjAgeHowIDF6ZDAgTHowIDF6ZDAgUmIwIDF6ZDAgT24wIDF3cDAgUmIwIHM4cDAgMWZCMCAxaXAwIDExejAgMWxkMCAxNG4wIDFvMTAgMTF6MCAxbzEwIDExejAgMW8xMCAxNG4wIDFsZDAgMTRuMCAxbGQwIDE0bjAgMW8xMCAxMXowIDFvMTAgMTF6MCAxbzEwIDExejB8MTdlNVwiLFxuXHRcdFx0XCJBbWVyaWNhL1Rvcm9udG98RVNUIEVEVCBFV1QgRVBUfDUwIDQwIDQwIDQwfDAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEyMzAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwfC0yNVRSMCAxaW4wIDExV3UgMW56dSAxZkQwIFdKMCAxd3IwIE5iMCAxQXAwIE9uMCAxemQwIE9uMCAxd3AwIFRYMCAxdEIwIFRYMCAxdEIwIFRYMCAxdEIwIFdMMCAxcU4wIDExejAgMW8xMCAxMXowIDFvMTAgMTF6MCAxbzEwIDExejAgMXFOMCBXTDAgMXFOMCAxMXowIDFvMTAgMTF6MCAxbzEwIDExejAgMW8xMCAxMXowIDFvMTAgMTF6MCAxbzEwIDExejAgMXFOMCBXTDAgMXFOMCA0a00wIDh4NDAgaXYwIDFvMTAgMTF6MCAxblgwIDExejAgMW8xMCAxMXowIDFvMTAgMXFMMCAxMUQwIDFuWDAgMTFCMCAxMXowIDFvMTAgMTF6MCAxbzEwIDExejAgMW8xMCAxMXowIDFvMTAgMTF6MCAxcU4wIDExejAgMW8xMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxZnowIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFmejAgMWExMCAxZnowIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFmejAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWZ6MCAxYTEwIDFmejAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWZ6MCAxYTEwIDFmejAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTRwMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTRwMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMHw2NWU1XCIsXG5cdFx0XHRcIkFtZXJpY2EvTmFzc2F1fExNVCBFU1QgRURUfDU5LnUgNTAgNDB8MDEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxfC0ya051Ty51IDI2WGRPLnUgMWNMMCAxY04wIDFmejAgMWExMCAxZnowIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFmejAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWZ6MCAxYTEwIDFmejAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWZ6MCAxYTEwIDFmejAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTRwMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTRwMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMHwyNGU0XCIsXG5cdFx0XHRcIkFtZXJpY2EvTmV3X1lvcmt8RVNUIEVEVCBFV1QgRVBUfDUwIDQwIDQwIDQwfDAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAyMzAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwfC0yNjF0MCAxblgwIDExQjAgMW5YMCAxMUIwIDFxTDAgMWExMCAxMXowIDFxTjAgV0wwIDFxTjAgMTF6MCAxbzEwIDExejAgMW8xMCAxMXowIDFvMTAgMTF6MCAxbzEwIDExejAgMXFOMCAxMXowIDFvMTAgMTF6MCAxbzEwIDExejAgMW8xMCAxMXowIDFvMTAgMTF6MCAxcU4wIFdMMCAxcU4wIDExejAgMW8xMCAxMXowIDFvMTAgMTF6MCAxbzEwIDExejAgMW8xMCAxMXowIDFxTjAgV0wwIDFxTjAgMTF6MCAxbzEwIDExejAgUkIwIDh4NDAgaXYwIDFvMTAgMTF6MCAxbzEwIDExejAgMW8xMCAxMXowIDFvMTAgMTF6MCAxcU4wIFdMMCAxcU4wIDExejAgMW8xMCAxMXowIDFvMTAgMTF6MCAxbzEwIDExejAgMW8xMCAxZnowIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFmejAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWZ6MCAxYTEwIDFmejAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWZ6MCAxY04wIDFjTDAgMWNOMCAxY0wwIHMxMCAxVnowIExCMCAxQlgwIDFjTjAgMWZ6MCAxYTEwIDFmejAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWZ6MCAxYTEwIDFmejAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTRwMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTRwMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMHwyMWU2XCIsXG5cdFx0XHRcIkFtZXJpY2EvTmlwaWdvbnxFU1QgRURUIEVXVCBFUFR8NTAgNDAgNDAgNDB8MDEwMTIzMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwfC0yNVRSMCAxaW4wIFJuYjAgM2plMCA4eDQwIGl2MCAxOXlOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFmejAgMWExMCAxZnowIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFmejAgMWExMCAxZnowIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDE0cDAgMWxiMCAxNHAwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjB8MTZlMlwiLFxuXHRcdFx0XCJBbWVyaWNhL05vbWV8TlNUIE5XVCBOUFQgQlNUIEJEVCBZU1QgQUtTVCBBS0RUfGIwIGEwIGEwIGIwIGEwIDkwIDkwIDgwfDAxMjAzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQ1Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3NnwtMTdTWDAgOHdXMCBpQjAgUWxiMCA1Mk8wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWZ6MCAxY04wIDFjTDAgMWNOMCAxY0wwIHMxMCAxVnowIExCMCAxQlgwIDFjTjAgMWZ6MCAxYTEwIDFmejAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWZ6MCAxYTEwIDFmejAgY2wwIDEwcTAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDE0cDAgMWxiMCAxNHAwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjB8MzhlMlwiLFxuXHRcdFx0XCJBbWVyaWNhL05vcm9uaGF8TE1UIC0wMiAtMDF8MjkuRSAyMCAxMHwwMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxfC0yZ2x4Ty5rIEhkS08uayAxY2MwIDFlMTAgMWJYMCBFemQwIFNvMCAxdkEwIE1uMCAxQkIwIE1MMCAxQkIwIHpYMCBxZTEwIHhiMCAyZXAwIG56MCAxQzEwIHpYMCAxQzEwIExYMCAxQzEwIE1uMCBIMjEwIFJiMCAxdEIwIElMMCAxRmQwIEZYMCAxRU4wIEZYMCAxSEIwIEx6MCBuc3AwIFdMMCAxdEIwIDJMMCAycEIwIE9uMHwzMGUyXCIsXG5cdFx0XHRcIkFtZXJpY2EvTm9ydGhfRGFrb3RhL0JldWxhaHxNU1QgTURUIE1XVCBNUFQgQ1NUIENEVHw3MCA2MCA2MCA2MCA2MCA1MHwwMTAxMDIzMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTR8LTI2MXIwIDFuWDAgMTFCMCAxblgwIFNnTjAgOHgyMCBpeDAgUXdOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWZ6MCAxY04wIDFjTDAgMWNOMCAxY0wwIHMxMCAxVnowIExCMCAxQlgwIDFjTjAgMWZ6MCAxYTEwIDFmejAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWZ6MCAxYTEwIDFmejAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTRwMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTRwMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPbzAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMFwiLFxuXHRcdFx0XCJBbWVyaWNhL05vcnRoX0Rha290YS9DZW50ZXJ8TVNUIE1EVCBNV1QgTVBUIENTVCBDRFR8NzAgNjAgNjAgNjAgNjAgNTB8MDEwMTAyMzAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDE0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0fC0yNjFyMCAxblgwIDExQjAgMW5YMCBTZ04wIDh4MjAgaXgwIFF3TjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFmejAgMWNOMCAxY0wwIDFjTjAgMWNMMCBzMTAgMVZ6MCBMQjAgMUJYMCAxY04wIDFmejAgMWExMCAxZnowIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFmejAgMWExMCAxZnowIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDE0cDAgMWxiMCAxNHAwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0bzAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjBcIixcblx0XHRcdFwiQW1lcmljYS9Ob3J0aF9EYWtvdGEvTmV3X1NhbGVtfE1TVCBNRFQgTVdUIE1QVCBDU1QgQ0RUfDcwIDYwIDYwIDYwIDYwIDUwfDAxMDEwMjMwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NHwtMjYxcjAgMW5YMCAxMUIwIDFuWDAgU2dOMCA4eDIwIGl4MCBRd04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxZnowIDFjTjAgMWNMMCAxY04wIDFjTDAgczEwIDFWejAgTEIwIDFCWDAgMWNOMCAxZnowIDFhMTAgMWZ6MCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxZnowIDFhMTAgMWZ6MCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTRwMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0bzAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwXCIsXG5cdFx0XHRcIkFtZXJpY2EvT2ppbmFnYXxMTVQgTVNUIENTVCBDRFQgTURUfDZWLkUgNzAgNjAgNTAgNjB8MDEyMTIxMjMyMzI0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MXwtMVVRRjAgZGVMMCA4bGMwIDE3YzAgMTBNMCAxZGQwIDJ6UU4wIDFsYjAgMTRwMCAxbGIwIDE0cTAgMWxiMCAxNHAwIDFuWDAgMTFCMCAxblgwIDFmQjAgV0wwIDFmQjAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDE0cDAgMWxiMCAxNHAwIDFsYjAgVTEwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjB8MjNlM1wiLFxuXHRcdFx0XCJBbWVyaWNhL1BhbmduaXJ0dW5nfC0wMCBBU1QgQVdUIEFQVCBBRERUIEFEVCBFRFQgRVNUIENTVCBDRFR8MCA0MCAzMCAzMCAyMCAzMCA0MCA1MCA2MCA1MHwwMTIzMTQxNTE1MTUxNTE1MTUxNTE1MTUxNTE1MTUxNTE1MTUxNjc2NzY3Njc2ODk3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njd8LTFYaU0wIFBuRzAgOHg1MCBpdTAgTENMMCAxZkEwIHpnTzAgMWNMMCAxY04wIDFjTDAgMWNOMCAxZnowIDFhMTAgMWZ6MCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTRwMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFuWDAgMTFCMCAxblgwIDExQjAgMW8wMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFuWDAgMTFDMCAxblgwIDExQTAgMW5YMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwfDE0ZTJcIixcblx0XHRcdFwiQW1lcmljYS9QYXJhbWFyaWJvfExNVCBQTVQgUE1UIC0wMzMwIC0wM3wzRS5FIDNFLlEgM0UuQSAzdSAzMHwwMTIzNHwtMm5EVWouayBXcW8wLmMgcWFuWC5JIDF5VlhOLm98MjRlNFwiLFxuXHRcdFx0XCJBbWVyaWNhL1Bob2VuaXh8TVNUIE1EVCBNV1R8NzAgNjAgNjB8MDEwMTAyMDIwMTB8LTI2MXIwIDFuWDAgMTFCMCAxblgwIFNnTjAgNEFsMSBBcDAgMWRiMCBTV3FYIDFjTDB8NDJlNVwiLFxuXHRcdFx0XCJBbWVyaWNhL1BvcnQtYXUtUHJpbmNlfFBQTVQgRVNUIEVEVHw0TiA1MCA0MHwwMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMXwtMjhSSGIgMkZuTWIgMTlYMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMTRxMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTRvMCAxbGMwIDE0bzAgMWxjMCAxNG8wIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxNG8wIDFsYzAgMTRvMCAxbGMwIGk2bjAgMW5YMCAxMUIwIDFuWDAgZDQzMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIDNpTjAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMHwyM2U1XCIsXG5cdFx0XHRcIkFtZXJpY2EvUmlvX0JyYW5jb3xMTVQgLTA1IC0wNHw0di5jIDUwIDQwfDAxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxfC0yZ2x2cy5NIEhkTHMuTSAxY2MwIDFlMTAgMWJYMCBFemQwIFNvMCAxdkEwIE1uMCAxQkIwIE1MMCAxQkIwIHpYMCBxZTEwIHhiMCAyZXAwIG56MCAxQzEwIHpYMCAxQzEwIExYMCAxQzEwIE1uMCBIMjEwIFJiMCAxdEIwIElMMCAxRmQwIEZYMCBOQmQwIGQ1WDB8MzFlNFwiLFxuXHRcdFx0XCJBbWVyaWNhL1BvcnRvX1ZlbGhvfExNVCAtMDQgLTAzfDRmLkEgNDAgMzB8MDEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxfC0yZ2x2SS5vIEhkS0kubyAxY2MwIDFlMTAgMWJYMCBFemQwIFNvMCAxdkEwIE1uMCAxQkIwIE1MMCAxQkIwIHpYMCBxZTEwIHhiMCAyZXAwIG56MCAxQzEwIHpYMCAxQzEwIExYMCAxQzEwIE1uMCBIMjEwIFJiMCAxdEIwIElMMCAxRmQwIEZYMHwzN2U0XCIsXG5cdFx0XHRcIkFtZXJpY2EvUHVlcnRvX1JpY298QVNUIEFXVCBBUFR8NDAgMzAgMzB8MDEyMHwtMTdsVTAgN1hUMCBpdTB8MjRlNVwiLFxuXHRcdFx0XCJBbWVyaWNhL1B1bnRhX0FyZW5hc3xTTVQgLTA1IC0wNCAtMDN8NEcuSyA1MCA0MCAzMHwwMTAyMDIxMjEyMTIxMjEyMTIxMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzfC0ycTJqaC5lIGZKQWguZSA1a25HLksgMVZ6aC5lIGpSQUcuSyAxcGJoLmUgMTFkMCAxb0wwIDExZDAgMW9MMCAxMWQwIDFvTDAgMTFkMCAxcGIwIDExZDAgbkhYMCBvcDAgYmx6MCBrbzAgUWVvMCBXTDAgMXpkMCBPbjAgMWlwMCAxMXowIDFvMTAgMTF6MCAxcU4wIFdMMCAxbGQwIDE0bjAgMXFOMCBXTDAgMXFOMCAxMXowIDFvMTAgMTF6MCAxbzEwIDExejAgMXFOMCBXTDAgMXFOMCBXTDAgMXFOMCAxMXowIDFvMTAgMTF6MCAxbzEwIDExejAgMW8xMCAxMXowIDFxTjAgV0wwIDFxTjAgV0wwIDFxTjAgMWNMMCAxY04wIDExejAgMW8xMCAxMXowIDFxTjAgV0wwIDFmQjAgMTlYMCAxcU4wIDExejAgMW8xMCAxMXowIDFvMTAgMTF6MCAxbzEwIDExejAgMXFOMCBXTDAgMXFOMCAxN2IwIDFpcDAgMTF6MCAxaXAwIDFmejAgMWZCMCAxMXowIDFxTjAgV0wwIDFxTjAgV0wwIDFxTjAgV0wwIDFxTjAgMTF6MCAxbzEwIDExejAgMW8xMCAxMXowIDFxTjAgV0wwIDFxTjAgMTdiMCAxaXAwIDExejAgMW8xMCAxOVgwIDFmQjAgMW5YMCBHMTAgMUVMMCBPcDAgMXpiMCBSZDAgMXduMCBSZDAgNDZuMCBBcDBcIixcblx0XHRcdFwiQW1lcmljYS9SYWlueV9SaXZlcnxDU1QgQ0RUIENXVCBDUFR8NjAgNTAgNTAgNTB8MDEwMTIzMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwfC0yNVRRMCAxaW4wIFJuYjAgM2plMCA4eDMwIGl3MCAxOXlOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFmejAgMWExMCAxZnowIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFmejAgMWExMCAxZnowIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDE0cDAgMWxiMCAxNHAwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjB8ODQyXCIsXG5cdFx0XHRcIkFtZXJpY2EvUmFua2luX0lubGV0fC0wMCBDU1QgQ0REVCBDRFQgRVNUfDAgNjAgNDAgNTAgNTB8MDEyMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzNDMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxfC12RGMwIGtldTAgMWZBMCB6Z08wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWZ6MCAxYTEwIDFmejAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTRwMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTRwMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMHwyNmUyXCIsXG5cdFx0XHRcIkFtZXJpY2EvUmVjaWZlfExNVCAtMDMgLTAyfDJqLkEgMzAgMjB8MDEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMXwtMmdseEUubyBIZExFLm8gMWNjMCAxZTEwIDFiWDAgRXpkMCBTbzAgMXZBMCBNbjAgMUJCMCBNTDAgMUJCMCB6WDAgcWUxMCB4YjAgMmVwMCBuejAgMUMxMCB6WDAgMUMxMCBMWDAgMUMxMCBNbjAgSDIxMCBSYjAgMXRCMCBJTDAgMUZkMCBGWDAgMUVOMCBGWDAgMUhCMCBMejAgbnNwMCBXTDAgMXRCMCAyTDAgMnBCMCBPbjB8MzNlNVwiLFxuXHRcdFx0XCJBbWVyaWNhL1JlZ2luYXxMTVQgTVNUIE1EVCBNV1QgTVBUIENTVHw2Vy5BIDcwIDYwIDYwIDYwIDYwfDAxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTM0MTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxNXwtMkFENTEubyB1SGUxLm8gMWluMCBzMkwwIDExejAgMW8xMCAxMXowIDFvMTAgMTF6MCAxcU4wIFdMMCAxcU4wIDExejAgNjZOMCAxY0wwIDFjTjAgMTlYMCAxZkIwIDFjTDAgMWZCMCAxY0wwIDFjTjAgMWNMMCBNMzAgOHgyMCBpeDAgMWlwMCAxY0wwIDFpcDAgMTF6MCAxbzEwIDExejAgMW8xMCAxMXowIDFxTjAgV0wwIDFxTjAgMTF6MCAxbzEwIDExejAgMW8xMCAxMXowIDFvMTAgMTF6MCAxbzEwIDExejAgMXFOMCAxMXowIDFvMTAgMTF6MCAzTkIwIDFjTDAgMWNOMHwxOWU0XCIsXG5cdFx0XHRcIkFtZXJpY2EvUmVzb2x1dGV8LTAwIENTVCBDRERUIENEVCBFU1R8MCA2MCA0MCA1MCA1MHwwMTIxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTM0MzEzMTMxMzEzMTM0MzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzF8LVNuQTAgR1dTMCAxZkEwIHpnTzAgMWNMMCAxY04wIDFjTDAgMWNOMCAxZnowIDFhMTAgMWZ6MCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTRwMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwfDIyOVwiLFxuXHRcdFx0XCJBbWVyaWNhL1NhbnRhcmVtfExNVCAtMDQgLTAzfDNDLk0gNDAgMzB8MDEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMnwtMmdsd2wuYyBIZExsLmMgMWNjMCAxZTEwIDFiWDAgRXpkMCBTbzAgMXZBMCBNbjAgMUJCMCBNTDAgMUJCMCB6WDAgcWUxMCB4YjAgMmVwMCBuejAgMUMxMCB6WDAgMUMxMCBMWDAgMUMxMCBNbjAgSDIxMCBSYjAgMXRCMCBJTDAgMUZkMCBGWDAgTkJkMHwyMWU0XCIsXG5cdFx0XHRcIkFtZXJpY2EvU2FudGlhZ298U01UIC0wNSAtMDQgLTAzfDRHLksgNTAgNDAgMzB8MDEwMjAyMTIxMjEyMTIxMjEyMzIxMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzfC0ycTJqaC5lIGZKQWguZSA1a25HLksgMVZ6aC5lIGpSQUcuSyAxcGJoLmUgMTFkMCAxb0wwIDExZDAgMW9MMCAxMWQwIDFvTDAgMTFkMCAxcGIwIDExZDAgbkhYMCBvcDAgOUJ6MCBqYjAgMW9OMCBrbzAgUWVvMCBXTDAgMXpkMCBPbjAgMWlwMCAxMXowIDFvMTAgMTF6MCAxcU4wIFdMMCAxbGQwIDE0bjAgMXFOMCBXTDAgMXFOMCAxMXowIDFvMTAgMTF6MCAxbzEwIDExejAgMXFOMCBXTDAgMXFOMCBXTDAgMXFOMCAxMXowIDFvMTAgMTF6MCAxbzEwIDExejAgMW8xMCAxMXowIDFxTjAgV0wwIDFxTjAgV0wwIDFxTjAgMWNMMCAxY04wIDExejAgMW8xMCAxMXowIDFxTjAgV0wwIDFmQjAgMTlYMCAxcU4wIDExejAgMW8xMCAxMXowIDFvMTAgMTF6MCAxbzEwIDExejAgMXFOMCBXTDAgMXFOMCAxN2IwIDFpcDAgMTF6MCAxaXAwIDFmejAgMWZCMCAxMXowIDFxTjAgV0wwIDFxTjAgV0wwIDFxTjAgV0wwIDFxTjAgMTF6MCAxbzEwIDExejAgMW8xMCAxMXowIDFxTjAgV0wwIDFxTjAgMTdiMCAxaXAwIDExejAgMW8xMCAxOVgwIDFmQjAgMW5YMCBHMTAgMUVMMCBPcDAgMXpiMCBSZDAgMXduMCBSZDAgNDZuMCBBcDAgMU5iMCBBcDAgMU5iMCBBcDAgMU5iMCBBcDAgMU5iMCBBcDAgMU5iMCBEZDAgMU5iMCBBcDAgMU5iMCBBcDAgMU5iMCBBcDAgMU5iMCBBcDAgMU5iMCBBcDAgMU5iMCBEZDAgMU5iMCBBcDAgMU5iMCBBcDAgMU5iMCBBcDAgMU5iMCBBcDAgMU5iMCBEZDAgMU5iMCBBcDAgMU5iMCBBcDAgMU5iMCBBcDAgMU5iMCBBcDAgMU5iMCBBcDB8NjJlNVwiLFxuXHRcdFx0XCJBbWVyaWNhL1NhbnRvX0RvbWluZ298U0RNVCBFU1QgRURUIC0wNDMwIEFTVHw0RSA1MCA0MCA0dSA0MHwwMTIxMzEzMTMxMzEzMTQxNHwtMXR0amsgMWxKTWsgTW4wIDZzcDAgTGJ1IDFDb3UgeUx1IDFSQXUgd0x1IDFRTXUgeHp1IDFRMHUgeFh1IDFQQXUgMTNqQjAgZTAwfDI5ZTVcIixcblx0XHRcdFwiQW1lcmljYS9TYW9fUGF1bG98TE1UIC0wMyAtMDJ8MzYucyAzMCAyMHwwMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTJ8LTJnbHdSLncgSGRLUi53IDFjYzAgMWUxMCAxYlgwIEV6ZDAgU28wIDF2QTAgTW4wIDFCQjAgTUwwIDFCQjAgelgwIHBUZDAgUFgwIDJlcDAgbnowIDFDMTAgelgwIDFDMTAgTFgwIDFDMTAgTW4wIEgyMTAgUmIwIDF0QjAgSUwwIDFGZDAgRlgwIDFFTjAgRlgwIDFIQjAgTHowIDFFTjAgTHowIDFDMTAgSUwwIDFIQjAgRGIwIDFIQjAgT24wIDF6ZDAgT24wIDF6ZDAgTHowIDF6ZDAgUmIwIDF3TjAgV24wIDF0QjAgUmIwIDF0QjAgV0wwIDF0QjAgUmIwIDF6ZDAgT24wIDFIQjAgRlgwIDFDMTAgTHowIDFJcDAgSFgwIDF6ZDAgT24wIDFIQjAgSUwwIDF3cDAgT24wIDFDMTAgTHowIDFDMTAgT24wIDF6ZDAgT24wIDF6ZDAgUmIwIDF6ZDAgTHowIDFDMTAgTHowIDFDMTAgT24wIDF6ZDAgT24wIDF6ZDAgT24wIDF6ZDAgT24wIDFIQjAgRlgwIDFIQjAgRlgwIDFIQjAgSUwwIDFIQjAgRlgwIDFIQjAgSUwwIDFFTjAgRlgwIDFIQjAgRlgwIDFIQjAgSUwwIDFFTjAgSUwwIDFIQjAgRlgwIDFIQjAgRlgwIDFIQjAgRlgwIDFIQjAgRlgwIDFIQjAgRlgwIDFLcDAgRlgwIDFIQjAgSUwwIDFFTjAgRlgwIDFIQjAgRlgwIDFIQjAgSUwwIDFFTjB8MjBlNlwiLFxuXHRcdFx0XCJBbWVyaWNhL1Njb3Jlc2J5c3VuZHxMTVQgLTAyIC0wMSArMDB8MXIuUSAyMCAxMCAwfDAxMjEzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzJ8LTJhNVd3LjggMno1ZXcuOCAxYTAwIDFjSzAgMWNMMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDB8NDUyXCIsXG5cdFx0XHRcIkFtZXJpY2EvU2l0a2F8UFNUIFBXVCBQUFQgUERUIFlTVCBBS1NUIEFLRFR8ODAgNzAgNzAgNzAgOTAgOTAgODB8MDEyMDMwMzAzMDMwMzAzMDMwMzAzMDMwMzAzMDMwMzAzNDU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjV8LTE3VDIwIDh4MTAgaXkwIFZvMTAgMWNMMCAxY04wIDFjTDAgMWNOMCAxZnowIDFjTjAgMWNMMCAxY04wIDFjTDAgczEwIDFWejAgTEIwIDFCWDAgMWNOMCAxZnowIDFhMTAgMWZ6MCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxZnowIDFhMTAgMWZ6MCBjbzAgMTBxMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTRwMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTRwMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMHw5MGUyXCIsXG5cdFx0XHRcIkFtZXJpY2EvU3RfSm9obnN8TlNUIE5EVCBOU1QgTkRUIE5XVCBOUFQgTkREVHwzdS5RIDJ1LlEgM3UgMnUgMnUgMnUgMXV8MDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDIzMjMyMzIzMjMyMzIzMjQ1MjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjYyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzJ8LTI4b2l0LjggMTRMMCAxbkIwIDFpbjAgMWdtMCBEejAgMUpCMCAxY0wwIDFjTjAgMWNMMCAxZkIwIDE5WDAgMWZCMCAxOVgwIDFmQjAgMTlYMCAxZkIwIDE5WDAgMWZCMCAxY0wwIDFjTjAgMWNMMCAxZkIwIDE5WDAgMWZCMCAxOVgwIDFmQjAgMTlYMCAxZkIwIDE5WDAgMWZCMCAxY0wwIDFmQjAgMTlYMCAxZkIwIDE5WDAgMTBPMCBlS1guOCAxOVgwIDFpcTAgV0wwIDFxTjAgV0wwIDFxTjAgV0wwIDF0QjAgVFgwIDF0QjAgV0wwIDFxTjAgV0wwIDFxTjAgN1VIdSBpdHUgMXRCMCBXTDAgMXFOMCBXTDAgMXFOMCBXTDAgMXFOMCBXTDAgMXRCMCBXTDAgMWxkMCAxMXowIDFvMTAgMTF6MCAxbzEwIDExejAgMW8xMCAxMXowIDFvMTAgMTF6MCAxcU4wIDExejAgMW8xMCAxMXowIDFvMTAgMTF6MCAxbzEwIDExejAgMW8xMCAxZnowIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFmejAgMWExMCAxZnowIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFmejAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWZ6MCAxYTEwIDFmejAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWZ6MCAxYTEwIDFmejAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMTRuMSAxbGIwIDE0cDAgMW5XMCAxMUMwIDFuWDAgMTFCMCAxblgwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTRwMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTRwMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpjWCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMHwxMWU0XCIsXG5cdFx0XHRcIkFtZXJpY2EvU3dpZnRfQ3VycmVudHxMTVQgTVNUIE1EVCBNV1QgTVBUIENTVHw3Yi5rIDcwIDYwIDYwIDYwIDYwfDAxMjEzNDEyMTIxMjEyMTIxMjEyMTIxNXwtMkFENE0uRSB1SGRNLkUgMWluMCBVR3AwIDh4MjAgaXgwIDFvMTAgMTdiMCAxaXAwIDExejAgMW8xMCAxMXowIDFvMTAgMTF6MCBpc04wIDFjTDAgM0NwMCAxY0wwIDFjTjAgMTF6MCAxcU4wIFdMMCBwTXAwfDE2ZTNcIixcblx0XHRcdFwiQW1lcmljYS9UZWd1Y2lnYWxwYXxMTVQgQ1NUIENEVHw1TS5RIDYwIDUwfDAxMjEyMTIxfC0xV0dHYi44IDJFVGNiLjggV0wwIDFxTjAgV0wwIEdSZDAgQUwwfDExZTVcIixcblx0XHRcdFwiQW1lcmljYS9UaHVsZXxMTVQgQVNUIEFEVHw0ei44IDQwIDMwfDAxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMXwtMmE1VG8uUSAzMU5Cby5RIDFjTDAgMWNOMCAxY0wwIDFmQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjB8NjU2XCIsXG5cdFx0XHRcIkFtZXJpY2EvVGh1bmRlcl9CYXl8Q1NUIEVTVCBFV1QgRVBUIEVEVHw2MCA1MCA0MCA0MCA0MHwwMTIzMTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxfC0ycTVTMCAxaWFOMCA4eDQwIGl2MCBYTkIwIDFjTDAgMWNOMCAxZnowIDFjTjAgMWNMMCAzQ3AwIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWZ6MCAxYTEwIDFmejAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWZ6MCAxYTEwIDFmejAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTRwMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTRwMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMHwxMWU0XCIsXG5cdFx0XHRcIkFtZXJpY2EvVmFuY291dmVyfFBTVCBQRFQgUFdUIFBQVHw4MCA3MCA3MCA3MHwwMTAyMzAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwfC0yNVRPMCAxaW4wIFVHcDAgOHgxMCBpeTAgMW8xMCAxN2IwIDFpcDAgMTF6MCAxbzEwIDExejAgMW8xMCAxMXowIDFxTjAgV0wwIDFxTjAgMTF6MCAxbzEwIDExejAgMW8xMCAxMXowIDFvMTAgMTF6MCAxbzEwIDExejAgMXFOMCAxMXowIDFvMTAgMTF6MCAxbzEwIDExejAgMW8xMCAxMXowIDFvMTAgMTF6MCAxcU4wIFdMMCAxcU4wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFmejAgMWExMCAxZnowIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFmejAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWZ6MCAxYTEwIDFmejAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWZ6MCAxYTEwIDFmejAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTRwMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTRwMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMHwyM2U1XCIsXG5cdFx0XHRcIkFtZXJpY2EvV2hpdGVob3JzZXxZU1QgWURUIFlXVCBZUFQgWUREVCBQU1QgUERUfDkwIDgwIDgwIDgwIDcwIDgwIDcwfDAxMDEwMjMwNDA1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjV8LTI1VE4wIDFpbjAgMW8xMCAxM1YwIFNlcjAgOHgwMCBpejAgTENMMCAxZkEwIDNOQTAgdnJkMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFmejAgMWExMCAxZnowIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDE0cDAgMWxiMCAxNHAwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjB8MjNlM1wiLFxuXHRcdFx0XCJBbWVyaWNhL1dpbm5pcGVnfENTVCBDRFQgQ1dUIENQVHw2MCA1MCA1MCA1MHwwMTAxMDEwMjMwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTB8LTJhSWkwIFdMMCAzTkQwIDFpbjAgSmFwMCBSYjAgYUNOMCA4eDMwIGl3MCAxdEIwIDExejAgMWlwMCAxMXowIDFvMTAgMTF6MCAxbzEwIDExejAgMXJkMCAxMEwwIDFvcDAgMTF6MCAxbzEwIDExejAgMW8xMCAxMXowIDFvMTAgMTF6MCAxbzEwIDExejAgMXFOMCAxMXowIDFvMTAgMTF6MCAxbzEwIDExejAgMW8xMCAxY0wwIDFjTjAgMTF6MCA2aTEwIFdMMCA2aTEwIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFhMDAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFhMDAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxNG8wIDFsYzAgMTRvMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTRvMCAxbGMwIDE0bzAgMWxjMCAxNG8wIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxNG8wIDFsYzAgMTRvMCAxbGMwIDE0bzAgMWxjMCAxNG8wIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxNG8wIDFsYzAgMTRvMCAxbGMwIDE0bzAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxblgwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwfDY2ZTRcIixcblx0XHRcdFwiQW1lcmljYS9ZYWt1dGF0fFlTVCBZV1QgWVBUIFlEVCBBS1NUIEFLRFR8OTAgODAgODAgODAgOTAgODB8MDEyMDMwMzAzMDMwMzAzMDMwMzAzMDMwMzAzMDMwMzAzMDQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTR8LTE3VDEwIDh4MDAgaXowIFZvMTAgMWNMMCAxY04wIDFjTDAgMWNOMCAxZnowIDFjTjAgMWNMMCAxY04wIDFjTDAgczEwIDFWejAgTEIwIDFCWDAgMWNOMCAxZnowIDFhMTAgMWZ6MCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxZnowIDFhMTAgMWZ6MCBjbjAgMTBxMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTRwMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTRwMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMHw2NDJcIixcblx0XHRcdFwiQW1lcmljYS9ZZWxsb3drbmlmZXwtMDAgTVNUIE1XVCBNUFQgTUREVCBNRFR8MCA3MCA2MCA2MCA1MCA2MHwwMTIzMTQxNTE1MTUxNTE1MTUxNTE1MTUxNTE1MTUxNTE1MTUxNTE1MTUxNTE1MTUxNTE1MTUxNTE1MTUxNTE1MTUxNTE1MTUxNTE1MTUxNTE1MTUxNTE1MTUxNTE1MTUxNTE1MTUxNTE1MTUxNTE1MTUxNTE1MTUxNTF8LTFwZEEwIGhpeDAgOHgyMCBpeDAgTENMMCAxZkEwIHpnTzAgMWNMMCAxY04wIDFjTDAgMWNOMCAxZnowIDFhMTAgMWZ6MCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTRwMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwfDE5ZTNcIixcblx0XHRcdFwiQW50YXJjdGljYS9DYXNleXwtMDAgKzA4ICsxMXwwIC04MCAtYjB8MDEyMTIxMjF8LTJxMDAgMURqUzAgVDkwIDQwUDAgS0wwIGJsejAgM20xMHwxMFwiLFxuXHRcdFx0XCJBbnRhcmN0aWNhL0RhdmlzfC0wMCArMDcgKzA1fDAgLTcwIC01MHwwMTAxMjEyMXwtdnlvMCBpWHQwIGFsajAgMUQ3djAgVkIwIDNXbjAgS04wfDcwXCIsXG5cdFx0XHRcIkFudGFyY3RpY2EvRHVtb250RFVydmlsbGV8LTAwICsxMHwwIC1hMHwwMTAxfC1VMG8wIGNmcTAgYkZtMHw4MFwiLFxuXHRcdFx0XCJBbnRhcmN0aWNhL01hY3F1YXJpZXxBRVNUIEFFRFQgLTAwICsxMXwtYTAgLWIwIDAgLWIwfDAxMDIwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTN8LTI5RTgwIDE5WDAgNFNMMCAxYXl5MCBMdnMwIDFjTTAgMW8wMCBSYzAgMXdvMCBSYzAgMXdvMCBVMDAgMXdvMCBMQTAgMUMwMCBPbzAgMXpjMCBPbzAgMXpjMCBPbzAgMXpjMCBSYzAgMXpjMCBPbzAgMXpjMCBPbzAgMXpjMCBPbzAgMXpjMCBPbzAgMXpjMCBPbzAgMXpjMCAxMUEwIDFxTTAgV00wIDFxTTAgT28wIDF6YzAgT28wIDF6YzAgT28wIDF3bzAgV00wIDF0QTAgV00wIDF0QTAgVTAwIDF0QTAgVTAwIDF0QTAgMTFBMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxY00wIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxMUEwIDFvMDAgMWlvMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWNNMCAxY00wIDFhMDAgMWlvMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTB8MVwiLFxuXHRcdFx0XCJBbnRhcmN0aWNhL01hd3NvbnwtMDAgKzA2ICswNXwwIC02MCAtNTB8MDEyfC1DRW8wIDJmeWswfDYwXCIsXG5cdFx0XHRcIlBhY2lmaWMvQXVja2xhbmR8TlpNVCBOWlNUIE5aU1QgTlpEVHwtYnUgLWN1IC1jMCAtZDB8MDEwMjAyMDIwMjAyMDIwMjAyMDIwMjAyMDIwMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjN8LTFHQ1Z1IEx6MCAxdEIwIDExenUgMW8wdSAxMXp1IDFvMHUgMTF6dSAxbzB1IDE0bnUgMWxjdSAxNG51IDFsY3UgMWxidSAxMUF1IDFuWHUgMTFBdSAxblh1IDExQXUgMW5YdSAxMUF1IDFuWHUgMTFBdSAxcUx1IFdNdSAxcUx1IDExQXUgMW4xYnUgSU0wIDFDMDAgUmMwIDF6YzAgT28wIDF6YzAgT28wIDF6YzAgT28wIDF6YzAgT28wIDF6YzAgT28wIDF6YzAgUmMwIDF6YzAgT28wIDF6YzAgT28wIDF6YzAgT28wIDF6YzAgT28wIDF6YzAgT28wIDF6YzAgUmMwIDF6YzAgT28wIDFxTTAgMTRvMCAxbGMwIDE0bzAgMWxjMCAxNG8wIDFsYzAgMTdjMCAxaW8wIDE3YzAgMWlvMCAxN2MwIDFpbzAgMTdjMCAxbGMwIDE0bzAgMWxjMCAxNG8wIDFsYzAgMTdjMCAxaW8wIDE3YzAgMWlvMCAxN2MwIDFsYzAgMTRvMCAxbGMwIDE0bzAgMWxjMCAxN2MwIDFpbzAgMTdjMCAxaW8wIDE3YzAgMWlvMCAxN2MwIDFpbzAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWNNMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWNNMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFpbzAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxY00wIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxY00wIDFmQTAgMWEwMCAxZkEwIDFhMDB8MTRlNVwiLFxuXHRcdFx0XCJBbnRhcmN0aWNhL1BhbG1lcnwtMDAgLTAzIC0wNCAtMDJ8MCAzMCA0MCAyMHwwMTIxMjEyMTIxMjEzMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxfC1jYW8wIG5EMCAxdmQwIFNMMCAxdmQwIDE3ejAgMWNOMCAxZnowIDFjTjAgMWNMMCAxY04wIGFzbjAgRGIwIGpzTjAgMTROMCAxMXowIDFvMTAgMTF6MCAxcU4wIFdMMCAxcU4wIFdMMCAxcU4wIDFjTDAgMWNOMCAxMXowIDFvMTAgMTF6MCAxcU4wIFdMMCAxZkIwIDE5WDAgMXFOMCAxMXowIDFvMTAgMTF6MCAxbzEwIDExejAgMW8xMCAxMXowIDFxTjAgV0wwIDFxTjAgMTdiMCAxaXAwIDExejAgMWlwMCAxZnowIDFmQjAgMTF6MCAxcU4wIFdMMCAxcU4wIFdMMCAxcU4wIFdMMCAxcU4wIDExejAgMW8xMCAxMXowIDFvMTAgMTF6MCAxcU4wIFdMMCAxcU4wIDE3YjAgMWlwMCAxMXowIDFvMTAgMTlYMCAxZkIwIDFuWDAgRzEwIDFFTDAgT3AwIDF6YjAgUmQwIDF3bjAgUmQwIDQ2bjAgQXAwfDQwXCIsXG5cdFx0XHRcIkFudGFyY3RpY2EvUm90aGVyYXwtMDAgLTAzfDAgMzB8MDF8Z09vMHwxMzBcIixcblx0XHRcdFwiQW50YXJjdGljYS9TeW93YXwtMDAgKzAzfDAgLTMwfDAxfC12czAwfDIwXCIsXG5cdFx0XHRcIkFudGFyY3RpY2EvVHJvbGx8LTAwICswMCArMDJ8MCAwIC0yMHwwMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMXwxcHVvMCBoZDAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDB8NDBcIixcblx0XHRcdFwiQW50YXJjdGljYS9Wb3N0b2t8LTAwICswNnwwIC02MHwwMXwtdGpBMHwyNVwiLFxuXHRcdFx0XCJFdXJvcGUvT3Nsb3xDRVQgQ0VTVHwtMTAgLTIwfDAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMHwtMmF3TTAgUW0wIFc2bzAgNXBmMCBXTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIHdKYzAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFxTTAgV00wIHpwYzAgMWEwMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwfDYyZTRcIixcblx0XHRcdFwiQXNpYS9SaXlhZGh8TE1UICswM3wtMzYuUSAtMzB8MDF8LVR2RDYuUXw1N2U1XCIsXG5cdFx0XHRcIkFzaWEvQWxtYXR5fExNVCArMDUgKzA2ICswN3wtNTcuTSAtNTAgLTYwIC03MHwwMTIzMjMyMzIzMjMyMzIzMjMyMzIzMjEyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzJ8LTFQYzU3Lk0gZVVvNy5NIDIzQ0wwIDFkYjAgMWNOMCAxZGIwIDFjTjAgMWRiMCAxZGQwIDFjTzAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMnBCMCBJTTAgclgwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wfDE1ZTVcIixcblx0XHRcdFwiQXNpYS9BbW1hbnxMTVQgRUVUIEVFU1R8LTJuLkkgLTIwIC0zMHwwMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxfC0xeVcybi5JIDFIaU1uLkkgS0wwIDFvTjAgMTFiMCAxb04wIDExYjAgMXBkMCAxZHowIDFjcDAgMTFiMCAxb3AwIDExYjAgZk8xMCAxZGIwIDFlMTAgMWNMMCAxY04wIDFjTDAgMWNOMCAxZnowIDFwZDAgMTBuMCAxbGQwIDE0bjAgMWhCMCAxNWIwIDFpcDAgMTlYMCAxY04wIDFjTDAgMWNOMCAxN2IwIDFsZDAgMTRvMCAxbGMwIDE3YzAgMWlvMCAxN2MwIDFpbzAgMTdjMCAxU28wIHkwMCAxZmMwIDFkYzAgMWNvMCAxZGMwIDFjTTAgMWNNMCAxY00wIDFvMDAgMTFBMCAxbGMwIDE3YzAgMWNNMCAxY00wIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCA0YlgwIERkMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTB8MjVlNVwiLFxuXHRcdFx0XCJBc2lhL0FuYWR5cnxMTVQgKzEyICsxMyArMTQgKzExfC1iTi5VIC1jMCAtZDAgLWUwIC1iMHwwMTIzMjEyMTIxMjEyMTIxMjEyMTIxNDEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjE0MXwtMVBjYk4uVSBlVW5OLlUgMjNDTDAgMWRiMCAycTEwIDFjTjAgMWRiMCAxZGQwIDFjTzAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMnBCMCBJTTAgclgwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMnNwMCBXTTB8MTNlM1wiLFxuXHRcdFx0XCJBc2lhL0FxdGF1fExNVCArMDQgKzA1ICswNnwtM2wuNCAtNDAgLTUwIC02MHwwMTIzMjMyMzIzMjMyMzIzMjMyMzIxMjMyMzIzMTIxMjEyMTIxMjEyMTIxMjEyMTJ8LTFQYzNsLjQgZVVubC40IDI0UFgwIDJwWDAgMWNOMCAxZGIwIDFkZDAgMWNPMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAycEIwIElNMCByWDAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTjAgMWNNMCAxZkEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwfDE1ZTRcIixcblx0XHRcdFwiQXNpYS9BcXRvYmV8TE1UICswNCArMDUgKzA2fC0zTS5FIC00MCAtNTAgLTYwfDAxMjMyMzIzMjMyMzIzMjMyMzIzMjEyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzJ8LTFQYzNNLkUgZVVuTS5FIDIzQ0wwIDNEYjAgMWNOMCAxZGIwIDFkZDAgMWNPMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAycEIwIElNMCByWDAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTB8MjdlNFwiLFxuXHRcdFx0XCJBc2lhL0FzaGdhYmF0fExNVCArMDQgKzA1ICswNnwtM1IudyAtNDAgLTUwIC02MHwwMTIzMjMyMzIzMjMyMzIzMjMyMzIzMjEyfC0xUGMzUi53IGVVblIudyAyM0NMMCAxZGIwIDFjTjAgMWRiMCAxY04wIDFkYjAgMWRkMCAxY08wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDJwQjAgSU0wfDQxZTRcIixcblx0XHRcdFwiQXNpYS9BdHlyYXV8TE1UICswMyArMDUgKzA2ICswNHwtM3IuSSAtMzAgLTUwIC02MCAtNDB8MDEyMzIzMjMyMzIzMjMyMzIzMjMyNDIzMjMyMzIzMjMyMzIzMjQyNDI0MjQyNDJ8LTFQYzNyLkkgZVVvci5JIDI0UFcwIDJwWDAgMWNOMCAxZGIwIDFkZDAgMWNPMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAycEIwIElNMCByWDAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAyc3AwIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMFwiLFxuXHRcdFx0XCJBc2lhL0JhZ2hkYWR8Qk1UICswMyArMDR8LTJWLkEgLTMwIC00MHwwMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjF8LTI2QmVWLkEgMkFDblYuQSAxMWIwIDFjcDAgMWR6MCAxZGQwIDFkYjAgMWNOMCAxY3AwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWRlMCAxZGMwIDFkYzAgMWRjMCAxY00wIDFkYzAgMWNNMCAxZGMwIDFjTTAgMWRjMCAxZGMwIDFkYzAgMWNNMCAxZGMwIDFjTTAgMWRjMCAxY00wIDFkYzAgMWRjMCAxZGMwIDFjTTAgMWRjMCAxY00wIDFkYzAgMWNNMCAxZGMwIDFkYzAgMWRjMCAxY00wIDFkYzAgMWNNMCAxZGMwIDFjTTAgMWRjMHw2NmU1XCIsXG5cdFx0XHRcIkFzaWEvUWF0YXJ8TE1UICswNCArMDN8LTNxLjggLTQwIC0zMHwwMTJ8LTIxSmZxLjggMjdCWHEuOHw5NmU0XCIsXG5cdFx0XHRcIkFzaWEvQmFrdXxMTVQgKzAzICswNCArMDV8LTNqLm8gLTMwIC00MCAtNTB8MDEyMzIzMjMyMzIzMjMyMzIzMjMyMzIxMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzJ8LTFQYzNqLm8gMWpVb2oubyBXQ0wwIDFkYjAgMWNOMCAxZGIwIDFjTjAgMWRiMCAxZGQwIDFjTzAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMnBCMCAxY00wIDlKZTAgMW8wMCAxMXowIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMHwyN2U1XCIsXG5cdFx0XHRcIkFzaWEvQmFuZ2tva3xCTVQgKzA3fC02Ry40IC03MHwwMXwtMjE4U0cuNHwxNWU2XCIsXG5cdFx0XHRcIkFzaWEvQmFybmF1bHxMTVQgKzA2ICswNyArMDh8LTV6IC02MCAtNzAgLTgwfDAxMjMyMzIzMjMyMzIzMjMyMzIzMjMyMTIzMjMyMzIzMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTJ8LTIxUzV6IHBDbnogMjNDTDAgMWRiMCAxY04wIDFkYjAgMWNOMCAxZGIwIDFkZDAgMWNPMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAycEIwIElNMCByWDAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgcDkwIExFMCAxZkEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDhIejAgM3JkMFwiLFxuXHRcdFx0XCJBc2lhL0JlaXJ1dHxFRVQgRUVTVHwtMjAgLTMwfDAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMHwtMjFhcTAgMW9uMCAxNDEwIDFkYjAgMTlCMCAxaW4wIDFpcDAgV0wwIDFsUXAwIDExYjAgMW9OMCAxMWIwIDFvTjAgMTFiMCAxcGQwIDExYjAgMW9OMCAxMWIwIHE2TjAgRW4wIDFvTjAgMTFiMCAxb04wIDExYjAgMW9OMCAxMWIwIDFwZDAgMTFiMCAxb04wIDExYjAgMW9wMCAxMWIwIGRBMTAgMTdiMCAxaU4wIDE3YjAgMWlOMCAxN2IwIDFpTjAgMTdiMCAxdkIwIFNMMCAxbXAwIDEzejAgMWlOMCAxN2IwIDFpTjAgMTdiMCAxamQwIDEybjAgMWExMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWZCMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxcUwwIFdOMCAxcUwwIFdOMCAxcUwwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxcUwwIFdOMCAxcUwwIFdOMCAxcUwwIFdOMCAxcUwwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxcUwwIFdOMCAxcUwwIFdOMCAxcUwwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMXFMMCBXTjAgMXFMMCBXTjAgMXFMMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMXFMMCBXTjAgMXFMMCBXTjAgMXFMMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFxTDAgV04wIDFxTDAgV04wIDFxTDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFxTDAgV04wIDFxTDAgV04wIDFxTDAgV04wIDFxTDAgMTFCMCAxblgwIDExQjAgMW5YMHwyMmU1XCIsXG5cdFx0XHRcIkFzaWEvQmlzaGtla3xMTVQgKzA1ICswNiArMDd8LTRXLm8gLTUwIC02MCAtNzB8MDEyMzIzMjMyMzIzMjMyMzIzMjMyMzIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyfC0xUGM0Vy5vIGVVblcubyAyM0NMMCAxZGIwIDFjTjAgMWRiMCAxY04wIDFkYjAgMWRkMCAxY08wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDJlMDAgMXRYMCAxN2IwIDFpcDAgMTdiMCAxaXAwIDE3YjAgMWlwMCAxN2IwIDFpcDAgMTlYMCAxY1B1IDFuWDAgMTFCMCAxblgwIDExQjAgMXFMMCBXTjAgMXFMMCBXTjAgMXFMMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMXFMMCBXTjB8ODdlNFwiLFxuXHRcdFx0XCJBc2lhL0JydW5laXxMTVQgKzA3MzAgKzA4fC03RC5FIC03dSAtODB8MDEyfC0xS0lURC5FIGdEYzkuRXw0MmU0XCIsXG5cdFx0XHRcIkFzaWEvS29sa2F0YXxNTVQgSVNUICswNjMwfC01bC5hIC01dSAtNnV8MDEyMTIxfC0yek90bC5hIDFyMkxQLmEgMXVuMCBIQjAgN3pYMHwxNWU2XCIsXG5cdFx0XHRcIkFzaWEvQ2hpdGF8TE1UICswOCArMDkgKzEwfC03eC5RIC04MCAtOTAgLWEwfDAxMjMyMzIzMjMyMzIzMjMyMzIzMjMyMTIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMxMnwtMjFRN3guUSBwQW54LlEgMjNDTDAgMWRiMCAxY04wIDFkYjAgMWNOMCAxZGIwIDFkZDAgMWNPMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAycEIwIElNMCByWDAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDhIejAgM3JlMHwzM2U0XCIsXG5cdFx0XHRcIkFzaWEvQ2hvaWJhbHNhbnxMTVQgKzA3ICswOCArMTAgKzA5fC03QyAtNzAgLTgwIC1hMCAtOTB8MDEyMzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQyNDI0MnwtMkFQSEMgMlVrb0MgY0tuMCAxZGEwIDFkZDAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWZ6MCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFmQjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDZoRDAgMTF6MCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxZnowIDNEYjAgaDFmMCAxY0owIDFjUDAgMWNKMHwzOGUzXCIsXG5cdFx0XHRcIkFzaWEvU2hhbmdoYWl8Q1NUIENEVHwtODAgLTkwfDAxMDEwMTAxMDEwMTAxMDEwfC0xYzFJMCBMWDAgMTZwMCAxanowIDFNeXAwIFJiMCAxbzEwIDExejAgMW8xMCAxMXowIDFxTjAgMTF6MCAxbzEwIDExejAgMW8xMCAxMXowfDIzZTZcIixcblx0XHRcdFwiQXNpYS9Db2xvbWJvfE1NVCArMDUzMCArMDYgKzA2MzB8LTVqLncgLTV1IC02MCAtNnV8MDEyMzEzMjF8LTJ6T3RqLncgMXJGYk4udyAxenp1IDdBcHUgMjNkejAgMTF6dSBuM2N1fDIyZTVcIixcblx0XHRcdFwiQXNpYS9EaGFrYXxITVQgKzA2MzAgKzA1MzAgKzA2ICswN3wtNVIuayAtNnUgLTV1IC02MCAtNzB8MDEyMTM0M3wtMThMRlIuayAxdW5uLmsgSEIwIG02bjAgMmt4YnUgMWkwMHwxNmU2XCIsXG5cdFx0XHRcIkFzaWEvRGFtYXNjdXN8TE1UIEVFVCBFRVNUfC0ycC5jIC0yMCAtMzB8MDEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjF8LTIxSmVwLmMgSGVwLmMgMTdiMCAxaXAwIDE3YjAgMWlwMCAxN2IwIDFpcDAgMTlYMCAxeFJCMCAxMVgwIDFvTjAgMTBMMCAxcEIwIDExYjAgMW9OMCAxMEwwIDFtcDAgMTNYMCAxb04wIDExYjAgMXBkMCAxMWIwIDFvTjAgMTFiMCAxb04wIDExYjAgMW9OMCAxMWIwIDFwZDAgMTFiMCAxb04wIDExYjAgMW9OMCAxMWIwIDFvTjAgMTFiMCAxcGQwIDExYjAgMW9OMCBOYjAgMUFOMCBOYjAgYmNwMCAxOVgwIDFncDAgMTlYMCAzbGQwIDF4WDAgVmQwIDFCejAgU3AwIDF2WDAgMTBwMCAxZHowIDFjTjAgMWNMMCAxZGIwIDFkYjAgMWcxMCAxYW4wIDFhcDAgMWRiMCAxZmQwIDFkYjAgMWNOMCAxZGIwIDFkZDAgMWRiMCAxY3AwIDFkejAgMWMxMCAxZFgwIDFjTjAgMWRiMCAxZGQwIDFkYjAgMWNOMCAxZGIwIDFjTjAgMWRiMCAxY04wIDFkYjAgMWRkMCAxZGIwIDFjTjAgMWRiMCAxY04wIDE5ejAgMWZCMCAxcUwwIDExQjAgMW9uMCBXcDAgMXFMMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxcUwwIFdOMCAxcUwwIFdOMCAxcUwwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMXFMMCBXTjAgMXFMMCBXTjAgMXFMMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMXFMMCBXTjAgMXFMMCBXTjAgMXFMMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFxTDAgV04wIDFxTDAgV04wIDFxTDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFxTDAgV04wIDFxTDB8MjZlNVwiLFxuXHRcdFx0XCJBc2lhL0RpbGl8TE1UICswOCArMDl8LThtLmsgLTgwIC05MHwwMTIxMnwtMmxlOG0uayAxZG5YbS5rIDFuZkEwIFhsZDB8MTllNFwiLFxuXHRcdFx0XCJBc2lhL0R1YmFpfExNVCArMDR8LTNGLmMgLTQwfDAxfC0yMUpmRi5jfDM5ZTVcIixcblx0XHRcdFwiQXNpYS9EdXNoYW5iZXxMTVQgKzA1ICswNiArMDd8LTR6LmMgLTUwIC02MCAtNzB8MDEyMzIzMjMyMzIzMjMyMzIzMjMyMzIxfC0xUGM0ei5jIGVVbnouYyAyM0NMMCAxZGIwIDFjTjAgMWRiMCAxY04wIDFkYjAgMWRkMCAxY08wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDJoQjB8NzZlNFwiLFxuXHRcdFx0XCJBc2lhL0ZhbWFndXN0YXxMTVQgRUVUIEVFU1QgKzAzfC0yZi5NIC0yMCAtMzAgLTMwfDAxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIzMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjF8LTFWYzJmLk0gMmEzY2YuTSAxY0wwIDFxcDAgWHowIDE5QjAgMTlYMCAxZkIwIDFkYjAgMWNwMCAxY0wwIDFmQjAgMTlYMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFmejAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFmejAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxZkIwIDFjTDAgMWNOMCAxY0wwIDFjTjAgMW8zMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxNVUwIDJLczAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDBcIixcblx0XHRcdFwiQXNpYS9HYXphfEVFVCBFRVNUIElTVCBJRFR8LTIwIC0zMCAtMjAgLTMwfDAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMHwtMWMycTAgNVJiMCAxMHIwIDFweDAgMTBOMCAxcHowIDE2cDAgMWpCMCAxNnAwIDFqeDAgcEJkMCBWejAgMW9OMCAxMWIwIDFvTzAgMTBOMCAxcHowIDEwTjAgMXBiMCAxME4wIDFwYjAgMTBOMCAxcGIwIDEwTjAgMXB6MCAxME4wIDFwYjAgMTBOMCAxcGIwIDExZDAgMW9MMCBkVzAgaGZCMCBEYjAgMWZCMCBSYjAgbnBCMCAxMXowIDFDMTAgSUwwIDFzMTAgMTBuMCAxbzEwIFdMMCAxemQwIE9uMCAxbGQwIDExejAgMW8xMCAxNG4wIDFvMTAgMTRuMCAxbmQwIDEybjAgMW5kMCBYejAgMXExMCAxMm4wIE0xMCBDMDAgMTdjMCAxaW8wIDE3YzAgMWlvMCAxN2MwIDFvMDAgMWNMMCAxZkIwIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxN2MwIDFpbzAgMThOMCAxYnowIDE5ejAgMWdwMCAxNjEwIDFpTDAgMTF6MCAxbzEwIDE0bzAgMWxBMSBTS1ggMXhkMSBNS1ggMUFOMCAxYTAwIDFmQTAgMWNMMCAxY04wIDFuWDAgMTIxMCAxbnowIDEyMjAgMXFMMCBXTjAgMXFMMCBXTjAgMXFMMCBXTjAgMXFMMCAxMUIwIDFxTDAgV04wIDFxTDAgV04wIDFxTDAgV04wIDFxTDAgV04wIDFxTDAgV04wIDFxTDAgMTFCMCAxcUwwIFdOMCAxcUwwIFdOMCAxcUwwIFdOMCAxcUwwIFdOMCAxcUwwIFdOMCAxcUwwIDExQjAgMXFMMCBXTjAgMXFMMCBXTjAgMXFMMCBXTjAgMXFMMCBXTjAgMXFMMCAxMUIwIDFxTDB8MThlNVwiLFxuXHRcdFx0XCJBc2lhL0hlYnJvbnxFRVQgRUVTVCBJU1QgSURUfC0yMCAtMzAgLTIwIC0zMHwwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMHwtMWMycTAgNVJiMCAxMHIwIDFweDAgMTBOMCAxcHowIDE2cDAgMWpCMCAxNnAwIDFqeDAgcEJkMCBWejAgMW9OMCAxMWIwIDFvTzAgMTBOMCAxcHowIDEwTjAgMXBiMCAxME4wIDFwYjAgMTBOMCAxcGIwIDEwTjAgMXB6MCAxME4wIDFwYjAgMTBOMCAxcGIwIDExZDAgMW9MMCBkVzAgaGZCMCBEYjAgMWZCMCBSYjAgbnBCMCAxMXowIDFDMTAgSUwwIDFzMTAgMTBuMCAxbzEwIFdMMCAxemQwIE9uMCAxbGQwIDExejAgMW8xMCAxNG4wIDFvMTAgMTRuMCAxbmQwIDEybjAgMW5kMCBYejAgMXExMCAxMm4wIE0xMCBDMDAgMTdjMCAxaW8wIDE3YzAgMWlvMCAxN2MwIDFvMDAgMWNMMCAxZkIwIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxN2MwIDFpbzAgMThOMCAxYnowIDE5ejAgMWdwMCAxNjEwIDFpTDAgMTJMMCAxbU4wIDE0bzAgMWxjMCBUYjAgMXhkMSBNS1ggYkIwIGNuMCAxY04wIDFhMDAgMWZBMCAxY0wwIDFjTjAgMW5YMCAxMjEwIDFuejAgMTIyMCAxcUwwIFdOMCAxcUwwIFdOMCAxcUwwIFdOMCAxcUwwIDExQjAgMXFMMCBXTjAgMXFMMCBXTjAgMXFMMCBXTjAgMXFMMCBXTjAgMXFMMCBXTjAgMXFMMCAxMUIwIDFxTDAgV04wIDFxTDAgV04wIDFxTDAgV04wIDFxTDAgV04wIDFxTDAgV04wIDFxTDAgMTFCMCAxcUwwIFdOMCAxcUwwIFdOMCAxcUwwIFdOMCAxcUwwIFdOMCAxcUwwIDExQjAgMXFMMHwyNWU0XCIsXG5cdFx0XHRcIkFzaWEvSG9fQ2hpX01pbmh8TE1UIFBMTVQgKzA3ICswOCArMDl8LTc2LkUgLTc2LnUgLTcwIC04MCAtOTB8MDEyMzQyMzIzMnwtMnlDNzYuRSBiSzAwLmEgMWg3YjYudSA1bHowIDE4bzAgM09xMCBrNWIwIGFXMDAgQkFNMHw5MGU1XCIsXG5cdFx0XHRcIkFzaWEvSG9uZ19Lb25nfExNVCBIS1QgSEtTVCBKU1R8LTdBLkcgLTgwIC05MCAtOTB8MDEyMTMxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMXwtMkNGSEEuRyAxc0VQNi5HIDFjTDAgeWx1IDkzWDAgMXFRdSAxdFgwIFJkMCAxSW4wIE5CMCAxY0wwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDE0cDAgMWtMMCAxNE4wIDFuWDAgVTEwIDF0ejAgVTEwIDF3bjAgUmQwIDF3bjAgVTEwIDF0ejAgVTEwIDF0ejAgVTEwIDF0ejAgVTEwIDF3bjAgUmQwIDF3bjAgUmQwIDF3bjAgVTEwIDF0ejAgVTEwIDF0ejAgMTdkMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFmejAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWZ6MCAxY04wIDFjTDAgczEwIDFWejAgMWNOMCAxY0wwIDFjTjAgMWNMMCA2ZmQwIDE0bjB8NzNlNVwiLFxuXHRcdFx0XCJBc2lhL0hvdmR8TE1UICswNiArMDcgKzA4fC02Ni5BIC02MCAtNzAgLTgwfDAxMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMnwtMkFQRzYuQSAyVWtvNi5BIGNLbjAgMWRiMCAxZGQwIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFmejAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxZkIwIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCA2aEQwIDExejAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWZ6MCBrRXAwIDFjSjAgMWNQMCAxY0owfDgxZTNcIixcblx0XHRcdFwiQXNpYS9Jcmt1dHNrfElNVCArMDcgKzA4ICswOXwtNlYuNSAtNzAgLTgwIC05MHwwMTIzMjMyMzIzMjMyMzIzMjMyMzIzMjEyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMnwtMjF6R1YuNSBwalhWLjUgMjNDTDAgMWRiMCAxY04wIDFkYjAgMWNOMCAxZGIwIDFkZDAgMWNPMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAycEIwIElNMCByWDAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDhIejB8NjBlNFwiLFxuXHRcdFx0XCJFdXJvcGUvSXN0YW5idWx8SU1UIEVFVCBFRVNUICswNCArMDN8LTFVLlUgLTIwIC0zMCAtNDAgLTMwfDAxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIzNDM0MzQzNDM0MjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyNHwtMm9nTlUuVSBkenpVLlUgMTFiMCA4dEIwIDFvbjAgMTQxMCAxZGIwIDE5QjAgMWluMCAzUmQwIFVuMCAxb04wIDExYjAgelNwMCBDTDAgbU4wIDFWejAgMWdOMCAxcHowIDVSZDAgMWZ6MCAxeXAwIE1MMCAxa3AwIDE3YjAgMWlwMCAxN2IwIDFmQjAgMTlYMCAxakIwIDE4TDAgMWlwMCAxN3owIHFkZDAgeFgwIDNTMTAgVHowIGRBMTAgMTF6MCAxbzEwIDExejAgMXFOMCAxMXowIDF6ZTAgMTFCMCBXTTAgMXFPMCBXSTAgMW5YMCAxckIwIDEwTDAgMTFCMCAxaW4wIDE3ZDAgMWluMCAycFgwIDE5RTAgMWZVMCAxNlEwIDFpSTAgMTZRMCAxaUkwIDFWZDAgcGIwIDNLcDAgMTRvMCAxZGUwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFhMDAgMWZBMCAxY00wIDFjTTAgMWZBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdPMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFhjMCAxcW8wIFdNMCAxcU0wIDExQTAgMW8wMCAxMjAwIDFuQTAgMTFBMCAxdEEwIFUwMCAxNXcwfDEzZTZcIixcblx0XHRcdFwiQXNpYS9KYWthcnRhfEJNVCArMDcyMCArMDczMCArMDkgKzA4IFdJQnwtNzcuYyAtN2sgLTd1IC05MCAtODAgLTcwfDAxMjMyNDI1fC0xUTBUayBsdU0wIG1Qek8gOHZXdSA2a3B1IDRQWHUgeGhjdXwzMWU2XCIsXG5cdFx0XHRcIkFzaWEvSmF5YXB1cmF8TE1UICswOSArMDkzMCBXSVR8LTltLk0gLTkwIC05dSAtOTB8MDEyM3wtMXV1OW0uTSBzTU1tLk0gTDRudXwyNmU0XCIsXG5cdFx0XHRcIkFzaWEvSmVydXNhbGVtfEpNVCBJU1QgSURUIElERFR8LTJrLkUgLTIwIC0zMCAtNDB8MDEyMTIxMjEyMTIxMzIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjF8LTI2QmVrLkUgU3lNay5FIDVSYjAgMTByMCAxcHgwIDEwTjAgMXB6MCAxNnAwIDFqQjAgMTZwMCAxangwIDNMQjAgRW0wIG9yMCAxY24wIDFkQjAgMTZuMCAxME8wIDFqYTAgMXRDMCAxNG8wIDFjTTAgMWEwMCAxMUEwIDFOYTAgQW4wIDFNUDAgQUowIDFLcDAgTEMwIDFvbzAgV2wwIEVRTjAgRGIwIDFmQjAgUmIwIG5wQjAgMTF6MCAxQzEwIElMMCAxczEwIDEwbjAgMW8xMCBXTDAgMXpkMCBPbjAgMWxkMCAxMXowIDFvMTAgMTRuMCAxbzEwIDE0bjAgMW5kMCAxMm4wIDFuZDAgWHowIDFxMTAgMTJuMCAxaEIwIDFkWDAgMWVwMCAxYUwwIDFlTjAgMTdYMCAxbmYwIDExejAgMXRCMCAxOVcwIDFlMTAgMTdiMCAxZXAwIDFnTDAgMThOMCAxZnowIDFlTjAgMTdiMCAxZ3EwIDFnbjAgMTlkMCAxZHowIDFjMTAgMTdYMCAxaEIwIDFnbjAgMTlkMCAxZHowIDFjMTAgMTdYMCAxa3AwIDFkejAgMWMxMCAxYUwwIDFlTjAgMW9MMCAxME4wIDFvTDAgMTBOMCAxb0wwIDEwTjAgMXJ6MCBXMTAgMXJ6MCBXMTAgMXJ6MCAxME4wIDFvTDAgMTBOMCAxb0wwIDEwTjAgMXJ6MCBXMTAgMXJ6MCBXMTAgMXJ6MCAxME4wIDFvTDAgMTBOMCAxb0wwIDEwTjAgMW9MMCAxME4wIDFyejAgVzEwIDFyejAgVzEwIDFyejAgMTBOMCAxb0wwIDEwTjAgMW9MMCAxME4wIDFyejAgVzEwIDFyejAgVzEwIDFyejAgVzEwIDFyejAgMTBOMCAxb0wwIDEwTjAgMW9MMHw4MWU0XCIsXG5cdFx0XHRcIkFzaWEvS2FidWx8KzA0ICswNDMwfC00MCAtNHV8MDF8LTEwUXMwfDQ2ZTVcIixcblx0XHRcdFwiQXNpYS9LYW1jaGF0a2F8TE1UICsxMSArMTIgKzEzfC1heS5BIC1iMCAtYzAgLWQwfDAxMjMyMzIzMjMyMzIzMjMyMzIzMjMyMTIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIxMnwtMVNMS3kuQSBpdlh5LkEgMjNDTDAgMWRiMCAxY04wIDFkYjAgMWNOMCAxZGIwIDFkZDAgMWNPMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAycEIwIElNMCByWDAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAyc3AwIFdNMHwxOGU0XCIsXG5cdFx0XHRcIkFzaWEvS2FyYWNoaXxMTVQgKzA1MzAgKzA2MzAgKzA1IFBLVCBQS1NUfC00cy5jIC01dSAtNnUgLTUwIC01MCAtNjB8MDEyMTM0NTQ1NDU0fC0yeG9zcy5jIDFxT0tXLmMgN3pYMCBldXAwIExxTXUgMWZ5MDAgMWNMMCBkSzEwIDExYjAgMTYxMCAxalgwfDI0ZTZcIixcblx0XHRcdFwiQXNpYS9VcnVtcWl8TE1UICswNnwtNU8uayAtNjB8MDF8LTFHZ3RPLmt8MzJlNVwiLFxuXHRcdFx0XCJBc2lhL0thdGhtYW5kdXxMTVQgKzA1MzAgKzA1NDV8LTVGLmcgLTV1IC01SnwwMTJ8LTIxSmhGLmcgMkVHTWIuZ3wxMmU1XCIsXG5cdFx0XHRcIkFzaWEvS2hhbmR5Z2F8TE1UICswOCArMDkgKzEwICsxMXwtOTIuZCAtODAgLTkwIC1hMCAtYjB8MDEyMzIzMjMyMzIzMjMyMzIzMjMyMzIxMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjM0MzQzNDM0MzQzNDM0MzQzMnwtMjFROTIuZCBwQXAyLmQgMjNDTDAgMWRiMCAxY04wIDFkYjAgMWNOMCAxZGIwIDFkZDAgMWNPMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAycEIwIElNMCByWDAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCBxSzAgeU4wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDE3VjAgN3pEMHw2NmUyXCIsXG5cdFx0XHRcIkFzaWEvS3Jhc25veWFyc2t8TE1UICswNiArMDcgKzA4fC02Yi5xIC02MCAtNzAgLTgwfDAxMjMyMzIzMjMyMzIzMjMyMzIzMjMyMTIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyfC0yMUhpYi5xIHByQWIucSAyM0NMMCAxZGIwIDFjTjAgMWRiMCAxY04wIDFkYjAgMWRkMCAxY08wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDJwQjAgSU0wIHJYMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgOEh6MHwxMGU1XCIsXG5cdFx0XHRcIkFzaWEvS3VhbGFfTHVtcHVyfFNNVCArMDcgKzA3MjAgKzA3MzAgKzA5ICswOHwtNlQucCAtNzAgLTdrIC03dSAtOTAgLTgwfDAxMjM0MzV8LTJCZzZULnAgMTdhblQucCBsNVhFIDE3Yk8gOEZ5dSAxc28xdXw3MWU1XCIsXG5cdFx0XHRcIkFzaWEvS3VjaGluZ3xMTVQgKzA3MzAgKzA4ICswODIwICswOXwtN2wuayAtN3UgLTgwIC04ayAtOTB8MDEyMzIzMjMyMzIzMjMyMzI0MnwtMUtJVGwuayBnRGJQLmsgNnludSBBbkUgMU8wayBBbkUgMU5BayBBbkUgMU5BayBBbkUgMU5BayBBbkUgMU8wayBBbkUgMU5BayBBbkUgcEFrIDhGejB8MTNlNFwiLFxuXHRcdFx0XCJBc2lhL01hY2F1fExNVCBDU1QgQ0RUfC03eS5rIC04MCAtOTB8MDEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxfC0ybGU4MCAxWE8zdSAxd24wIFJkMCAxd24wIFI5dSAxd3F1IFUxMCAxdHowIFRWdSAxdHowIDE3Z3UgMWNMMCAxY04wIDFmejAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjSnUgMWNMMCAxY04wIDFmejAgMWNOMCAxY091IDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjSnUgMWNMMCAxY04wIDFmejAgMWNOMCAxY0wwfDU3ZTRcIixcblx0XHRcdFwiQXNpYS9NYWdhZGFufExNVCArMTAgKzExICsxMnwtYTMuYyAtYTAgLWIwIC1jMHwwMTIzMjMyMzIzMjMyMzIzMjMyMzIzMjEyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMTJ8LTFQY2EzLmMgZVVvMy5jIDIzQ0wwIDFkYjAgMWNOMCAxZGIwIDFjTjAgMWRiMCAxZGQwIDFjTzAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMnBCMCBJTTAgclgwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCA4SHowIDNDcTB8OTVlM1wiLFxuXHRcdFx0XCJBc2lhL01ha2Fzc2FyfExNVCBNTVQgKzA4ICswOSBXSVRBfC03Vi5BIC03Vi5BIC04MCAtOTAgLTgwfDAxMjM0fC0yMUpqVi5BIHZmYzAgbXlMVi5BIDhNTDB8MTVlNVwiLFxuXHRcdFx0XCJBc2lhL01hbmlsYXwrMDggKzA5fC04MCAtOTB8MDEwMTAxMDEwfC0xa0pJMCBBTDAgY0sxMCA2NVgwIG1YQjAgdlgwIFZLMTAgMWRiMHwyNGU2XCIsXG5cdFx0XHRcIkFzaWEvTmljb3NpYXxMTVQgRUVUIEVFU1R8LTJkLnMgLTIwIC0zMHwwMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMXwtMVZjMmQucyAyYTNjZC5zIDFjTDAgMXFwMCBYejAgMTlCMCAxOVgwIDFmQjAgMWRiMCAxY3AwIDFjTDAgMWZCMCAxOVgwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWZ6MCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWZ6MCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFmQjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxbzMwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDB8MzJlNFwiLFxuXHRcdFx0XCJBc2lhL05vdm9rdXpuZXRza3xMTVQgKzA2ICswNyArMDh8LTVNLk0gLTYwIC03MCAtODB8MDEyMzIzMjMyMzIzMjMyMzIzMjMyMzIxMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjEyfC0xUGN0TS5NIGVVTE0uTSAyM0NMMCAxZGIwIDFjTjAgMWRiMCAxY04wIDFkYjAgMWRkMCAxY08wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDJwQjAgSU0wIHJYMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDJzcDAgV00wfDU1ZTRcIixcblx0XHRcdFwiQXNpYS9Ob3Zvc2liaXJza3xMTVQgKzA2ICswNyArMDh8LTV2LkUgLTYwIC03MCAtODB8MDEyMzIzMjMyMzIzMjMyMzIzMjMyMzIxMjMyMzIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMnwtMjFRbnYuRSBwQUZ2LkUgMjNDTDAgMWRiMCAxY04wIDFkYjAgMWNOMCAxZGIwIDFkZDAgMWNPMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAycEIwIElNMCByWDAgMWNNMCAxY00wIG1sMCBPczAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDhIejAgNGVOMHwxNWU1XCIsXG5cdFx0XHRcIkFzaWEvT21za3xMTVQgKzA1ICswNiArMDd8LTRSLnUgLTUwIC02MCAtNzB8MDEyMzIzMjMyMzIzMjMyMzIzMjMyMzIxMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzJ8LTIyNHNSLnUgcE1MUi51IDIzQ0wwIDFkYjAgMWNOMCAxZGIwIDFjTjAgMWRiMCAxZGQwIDFjTzAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMnBCMCBJTTAgclgwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCA4SHowfDEyZTVcIixcblx0XHRcdFwiQXNpYS9PcmFsfExNVCArMDMgKzA1ICswNiArMDR8LTNwLm8gLTMwIC01MCAtNjAgLTQwfDAxMjMyMzIzMjMyMzIzMjMyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyfC0xUGMzcC5vIGVVb3AubyAyM0NLMCAzRGIwIDFjTjAgMWRiMCAxZGQwIDFjTzAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDJwQjAgMWNNMCAxZkEwIDFjTTAgMWNNMCBJTTAgMUVNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwfDI3ZTRcIixcblx0XHRcdFwiQXNpYS9Qb250aWFuYWt8TE1UIFBNVCArMDczMCArMDkgKzA4IFdJVEEgV0lCfC03aC5rIC03aC5rIC03dSAtOTAgLTgwIC04MCAtNzB8MDEyMzI0MjU2fC0ydWE3aC5rIFhFMDAgbXVuTC5rIDhSYXUgNmtwdSA0UFh1IHhoY3UgV3FudXwyM2U0XCIsXG5cdFx0XHRcIkFzaWEvUHlvbmd5YW5nfExNVCBLU1QgSlNUIEtTVHwtOG4gLTh1IC05MCAtOTB8MDEyMzEzfC0ydW04biA5N1hSIDFsVHp1IDJPbmMwIDZCQXV8MjllNVwiLFxuXHRcdFx0XCJBc2lhL1F5enlsb3JkYXxMTVQgKzA0ICswNSArMDZ8LTRsLlEgLTQwIC01MCAtNjB8MDEyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyM3wtMVBjNGwuUSBlVW9sLlEgMjNDTDAgM0RiMCAxY04wIDFkYjAgMWRkMCAxY08wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDNhbzAgMUVNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwfDczZTRcIixcblx0XHRcdFwiQXNpYS9SYW5nb29ufFJNVCArMDYzMCArMDl8LTZvLkwgLTZ1IC05MHwwMTIxfC0yMUppby5MIFNtblMuTCA3ajl1fDQ4ZTVcIixcblx0XHRcdFwiQXNpYS9TYWtoYWxpbnxMTVQgKzA5ICsxMSArMTIgKzEwfC05dS5NIC05MCAtYjAgLWMwIC1hMHwwMTIzMjMyMzIzMjMyMzIzMjMyMzIzMjQyMzIzMjMyMzIzMjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MnwtMkFHVnUuTSAxQm9NdS5NIDFxRmEwIDFkYjAgMWNOMCAxZGIwIDFjTjAgMWRiMCAxZGQwIDFjTzAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMnBCMCBJTTAgclgwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxbzAwIDJwQjAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgOEh6MCAzcmQwfDU4ZTRcIixcblx0XHRcdFwiQXNpYS9TYW1hcmthbmR8TE1UICswNCArMDUgKzA2fC00ci5SIC00MCAtNTAgLTYwfDAxMjMyMzIzMjMyMzIzMjMyMzIzMjMyfC0xUGM0ci5SIGVVb3IuUiAyM0NMMCAzRGIwIDFjTjAgMWRiMCAxZGQwIDFjTzAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wfDM2ZTRcIixcblx0XHRcdFwiQXNpYS9TZW91bHxMTVQgS1NUIEpTVCBLU1QgS0RUIEtEVHwtOHIuUSAtOHUgLTkwIC05MCAtOXUgLWEwfDAxMjMxNDE0MTQxNDE0MTQxMzUzNTN8LTJ1bThyLlEgOTdYVi5RIDFtMXp1IGtLbzAgMkkwdSBPTDAgMUZCMCBSYjAgMXFOMCBUWDAgMXRCMCBUWDAgMXRCMCBUWDAgMXRCMCBUWDAgMmFwMCAxMkZCdSAxMUEwIDFvMDAgMTFBMHwyM2U2XCIsXG5cdFx0XHRcIkFzaWEvU3JlZG5la29seW1za3xMTVQgKzEwICsxMSArMTJ8LWFlLlEgLWEwIC1iMCAtYzB8MDEyMzIzMjMyMzIzMjMyMzIzMjMyMzIxMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzJ8LTFQY2FlLlEgZVVvZS5RIDIzQ0wwIDFkYjAgMWNOMCAxZGIwIDFjTjAgMWRiMCAxZGQwIDFjTzAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMnBCMCBJTTAgclgwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCA4SHowfDM1ZTJcIixcblx0XHRcdFwiQXNpYS9UYWlwZWl8Q1NUIEpTVCBDRFR8LTgwIC05MCAtOTB8MDEwMjAyMDIwMjAyMDIwMjAyMDIwMjAyMDIwMjAyMDIwMjAyMDIwMjB8LTFpdzgwIGpvTTAgMXlvMCBUejAgMWlwMCAxalgwIDFjTjAgMTFiMCAxb04wIDExYjAgMW9OMCAxMWIwIDFvTjAgMTFiMCAxME4wIDFCWDAgMTBwMCAxcHowIDEwcDAgMXB6MCAxMHAwIDFkYjAgMWRkMCAxZGIwIDFjTjAgMWRiMCAxY04wIDFkYjAgMWNOMCAxZGIwIDFCQjAgTUwwIDFCZDAgTUwwIHVxMTAgMWRiMCAxY04wIDFkYjAgOTdCMCBBTDB8NzRlNVwiLFxuXHRcdFx0XCJBc2lhL1Rhc2hrZW50fExNVCArMDUgKzA2ICswN3wtNEIuYiAtNTAgLTYwIC03MHwwMTIzMjMyMzIzMjMyMzIzMjMyMzIzMjF8LTFQYzRCLmIgZVVuQi5iIDIzQ0wwIDFkYjAgMWNOMCAxZGIwIDFjTjAgMWRiMCAxZGQwIDFjTzAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMnBCMHwyM2U1XCIsXG5cdFx0XHRcIkFzaWEvVGJpbGlzaXxUQk1UICswMyArMDQgKzA1fC0yWC5iIC0zMCAtNDAgLTUwfDAxMjMyMzIzMjMyMzIzMjMyMzIzMjMyMTIxMjEyMzIzMjMyMzIzMjMyMzIzMjMyMTJ8LTFQYzJYLmIgMWpVblguYiBXQ0wwIDFkYjAgMWNOMCAxZGIwIDFjTjAgMWRiMCAxZGQwIDFjTzAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMnBCMCAxY0swIDFjTDAgMWNOMCAxY0wwIDFjTjAgMnB6MCAxY0wwIDFmQjAgM056MCAxMUIwIDFuWDAgMTFCMCAxcUwwIFdOMCAxcUwwIFdOMCAxcUwwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCBBbjAgT3MwIFdNMHwxMWU1XCIsXG5cdFx0XHRcIkFzaWEvVGVocmFufExNVCBUTVQgKzAzMzAgKzA0ICswNSArMDQzMHwtM3AuSSAtM3AuSSAtM3UgLTQwIC01MCAtNHV8MDEyMzQzMjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTJ8LTJidERwLkkgMWQzYzAgMWh1TFQuSSBUWHUgMXB6MCBzTjAgdkF1IDFjTDAgMWRCMCAxZW4wIHBOQjAgVUwwIDFjTjAgMWR6MCAxY3AwIDFkejAgMWNwMCAxZHowIDFjcDAgMWR6MCAxY3AwIDFkejAgMWNOMCAxZHowIDFjcDAgMWR6MCAxY3AwIDFkejAgMWNwMCAxZHowIDFjTjAgMWR6MCAxY3AwIDFkejAgMWNwMCAxZHowIDFjcDAgMWR6MCAxY04wIDFkejAgNjRwMCAxZHowIDFjTjAgMWR6MCAxY3AwIDFkejAgMWNwMCAxZHowIDFjcDAgMWR6MCAxY04wIDFkejAgMWNwMCAxZHowIDFjcDAgMWR6MCAxY3AwIDFkejAgMWNOMCAxZHowIDFjcDAgMWR6MCAxY3AwIDFkejAgMWNwMCAxZHowIDFjTjAgMWR6MCAxY3AwIDFkejAgMWNwMCAxZHowIDFjcDAgMWR6MCAxY04wIDFkejAgMWNwMCAxZHowIDFjcDAgMWR6MCAxY3AwIDFkejAgMWNwMCAxZHowIDFjTjAgMWR6MCAxY3AwIDFkejAgMWNwMCAxZHowIDFjcDAgMWR6MCAxY04wIDFkejAgMWNwMCAxZHowIDFjcDAgMWR6MCAxY3AwIDFkejB8MTRlNlwiLFxuXHRcdFx0XCJBc2lhL1RoaW1waHV8TE1UICswNTMwICswNnwtNVcuQSAtNXUgLTYwfDAxMnwtU3U1Vy5BIDFCR01zLkF8NzllM1wiLFxuXHRcdFx0XCJBc2lhL1Rva3lvfEpTVCBKRFR8LTkwIC1hMHwwMTAxMDEwMTB8LVFKSjAgUmIwIDFsZDAgMTRuMCAxemQwIE9uMCAxemQwIE9uMHwzOGU2XCIsXG5cdFx0XHRcIkFzaWEvVG9tc2t8TE1UICswNiArMDcgKzA4fC01RC5QIC02MCAtNzAgLTgwfDAxMjMyMzIzMjMyMzIzMjMyMzIzMjMyMTIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMTIxMjEyMTIxMjEyMTIxMjEyMTJ8LTIxTmhELlAgcHh6RC5QIDIzQ0wwIDFkYjAgMWNOMCAxZGIwIDFjTjAgMWRiMCAxZGQwIDFjTzAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMnBCMCBJTTAgclgwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgY28wIDFiQjAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgOEh6MCAzUXAwfDEwZTVcIixcblx0XHRcdFwiQXNpYS9VbGFhbmJhYXRhcnxMTVQgKzA3ICswOCArMDl8LTc3LncgLTcwIC04MCAtOTB8MDEyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyfC0yQVBINy53IDJVa283LncgY0tuMCAxZGIwIDFkZDAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWZ6MCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFmQjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDZoRDAgMTF6MCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxZnowIGtFcDAgMWNKMCAxY1AwIDFjSjB8MTJlNVwiLFxuXHRcdFx0XCJBc2lhL1VzdC1OZXJhfExNVCArMDggKzA5ICsxMiArMTEgKzEwfC05dy5TIC04MCAtOTAgLWMwIC1iMCAtYTB8MDEyMzQzNDM0MzQzNDM0MzQzNDM0MzQ1NDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQ1fC0yMVE5dy5TIHBBcHcuUyAyM0NMMCAxZDkwIDFjTjAgMWRiMCAxY04wIDFkYjAgMWRkMCAxY08wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDJwQjAgSU0wIHJYMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMTdWMCA3ekQwfDY1ZTJcIixcblx0XHRcdFwiQXNpYS9WbGFkaXZvc3Rva3xMTVQgKzA5ICsxMCArMTF8LThMLnYgLTkwIC1hMCAtYjB8MDEyMzIzMjMyMzIzMjMyMzIzMjMyMzIxMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzJ8LTFTSklMLnYgaXRYTC52IDIzQ0wwIDFkYjAgMWNOMCAxZGIwIDFjTjAgMWRiMCAxZGQwIDFjTzAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMnBCMCBJTTAgclgwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCA4SHowfDYwZTRcIixcblx0XHRcdFwiQXNpYS9ZYWt1dHNrfExNVCArMDggKzA5ICsxMHwtOEMuVyAtODAgLTkwIC1hMHwwMTIzMjMyMzIzMjMyMzIzMjMyMzIzMjEyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMnwtMjFROEMuVyBwQW9DLlcgMjNDTDAgMWRiMCAxY04wIDFkYjAgMWNOMCAxZGIwIDFkZDAgMWNPMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAycEIwIElNMCByWDAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDhIejB8MjhlNFwiLFxuXHRcdFx0XCJBc2lhL1lla2F0ZXJpbmJ1cmd8TE1UIFBNVCArMDQgKzA1ICswNnwtNDIueCAtM0ouNSAtNDAgLTUwIC02MHwwMTIzNDM0MzQzNDM0MzQzNDM0MzQzNDMyMzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDN8LTJhZzQyLnggN21RaC5zIHFCdkouNSAyM0NMMCAxZGIwIDFjTjAgMWRiMCAxY04wIDFkYjAgMWRkMCAxY08wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDJwQjAgSU0wIHJYMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgOEh6MHwxNGU1XCIsXG5cdFx0XHRcIkFzaWEvWWVyZXZhbnxMTVQgKzAzICswNCArMDV8LTJXIC0zMCAtNDAgLTUwfDAxMjMyMzIzMjMyMzIzMjMyMzIzMjMyMTIxMjEyMTIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzJ8LTFQYzJXIDFqVW5XIFdDTDAgMWRiMCAxY04wIDFkYjAgMWNOMCAxZGIwIDFkZDAgMWNPMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAycEIwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgNFJYMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTB8MTNlNVwiLFxuXHRcdFx0XCJBdGxhbnRpYy9Bem9yZXN8SE1UIC0wMiAtMDEgKzAwIFdFVHwxUy53IDIwIDEwIDAgMHwwMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIzMjEyMzIxMjMyMTIzMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzNDMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMnwtMmxkVzAgYVBYMCBTcDAgTFgwIDF2YzAgVGMwIDF1TTAgU00wIDF2YzAgVGMwIDF2YzAgU00wIDF2YzAgNjYwMCAxY28wIDNFMDAgMTdjMCAxZkEwIDFhMDAgMWlvMCAxYTAwIDFpbzAgMTdjMCAzSTAwIDE3YzAgMWNNMCAxY00wIDNGYzAgMWNNMCAxYTAwIDFmQTAgMWlvMCAxN2MwIDFjTTAgMWNNMCAxYTAwIDFmQTAgMWlvMCAxcU0wIERjMCAxdEEwIDFjTTAgMWRjMCAxNDAwIGdMMCBJTTAgczEwIFUwMCBkWDAgUmMwIHBkMCBSYzAgZ0wwIE9vMCBwZDAgUmMwIGdMMCBPbzAgcGQwIDE0bzAgMWNNMCAxY1AwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAzQ28wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIHFJbDAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY04wIDFjTDAgMWNOMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTjAgMWNMMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY0wwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwfDI1ZTRcIixcblx0XHRcdFwiQXRsYW50aWMvQmVybXVkYXxMTVQgQVNUIEFEVHw0ai5pIDQwIDMwfDAxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjF8LTFCblJFLkcgMUxUYkUuRyAxY0wwIDFjTjAgMWNMMCAxY04wIDFmejAgMWExMCAxZnowIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFmejAgMWExMCAxZnowIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDE0cDAgMWxiMCAxNHAwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjB8NjVlM1wiLFxuXHRcdFx0XCJBdGxhbnRpYy9DYW5hcnl8TE1UIC0wMSBXRVQgV0VTVHwxMS5BIDEwIDAgLTEwfDAxMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyfC0xVXRhVy5vIFhQQVcubyAxbEFLMCAxYTEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDB8NTRlNFwiLFxuXHRcdFx0XCJBdGxhbnRpYy9DYXBlX1ZlcmRlfExNVCAtMDIgLTAxfDF5LjQgMjAgMTB8MDEyMTJ8LTJsZFcwIDFlRW8wIDd6WDAgMWRqZjB8NTBlNFwiLFxuXHRcdFx0XCJBdGxhbnRpYy9GYXJvZXxMTVQgV0VUIFdFU1R8ci40IDAgLTEwfDAxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxfC0ydVNudy5VIDJXZ293LlUgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDB8NDllM1wiLFxuXHRcdFx0XCJBdGxhbnRpYy9NYWRlaXJhfEZNVCAtMDEgKzAwICswMSBXRVQgV0VTVHwxNy5BIDEwIDAgLTEwIDAgLTEwfDAxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjMyMTIzMjEyMzIxMjMyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxNDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0fC0ybGRYMCBhUFgwIFNwMCBMWDAgMXZjMCBUYzAgMXVNMCBTTTAgMXZjMCBUYzAgMXZjMCBTTTAgMXZjMCA2NjAwIDFjbzAgM0UwMCAxN2MwIDFmQTAgMWEwMCAxaW8wIDFhMDAgMWlvMCAxN2MwIDNJMDAgMTdjMCAxY00wIDFjTTAgM0ZjMCAxY00wIDFhMDAgMWZBMCAxaW8wIDE3YzAgMWNNMCAxY00wIDFhMDAgMWZBMCAxaW8wIDFxTTAgRGMwIDF0QTAgMWNNMCAxZGMwIDE0MDAgZ0wwIElNMCBzMTAgVTAwIGRYMCBSYzAgcGQwIFJjMCBnTDAgT28wIHBkMCBSYzAgZ0wwIE9vMCBwZDAgMTRvMCAxY00wIDFjUDAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDNDbzAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgcUlsMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTjAgMWNMMCAxY04wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNOMCAxY0wwIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDB8MjdlNFwiLFxuXHRcdFx0XCJBdGxhbnRpYy9SZXlramF2aWt8TE1UIC0wMSArMDAgR01UfDFzIDEwIDAgMHwwMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTN8LTJ1V213IG1mYXcgMUJkMCBNTDAgMUxCMCBDbjAgMUxCMCAzZlgwIEMxMCBIclgwIDFjTzAgTEIwIDFFTDAgTEEwIDFDMDAgT28wIDF3bzAgUmMwIDF3bzAgUmMwIDF3bzAgUmMwIDF6YzAgT28wIDF6YzAgMTRvMCAxbGMwIDE0bzAgMWxjMCAxNG8wIDFvMDAgMTFBMCAxbGMwIDE0bzAgMW8wMCAxNG8wIDFsYzAgMTRvMCAxbGMwIDE0bzAgMWxjMCAxNG8wIDFsYzAgMTRvMCAxbzAwIDE0bzAgMWxjMCAxNG8wIDFsYzAgMTRvMCAxbGMwIDE0bzAgMWxjMCAxNG8wIDFsYzAgMTRvMCAxbzAwIDE0bzAgMWxjMCAxNG8wIDFsYzAgMTRvMCAxbGMwIDE0bzAgMWxjMCAxNG8wIDFvMDAgMTRvMHwxMmU0XCIsXG5cdFx0XHRcIkF0bGFudGljL1NvdXRoX0dlb3JnaWF8LTAyfDIwfDB8fDMwXCIsXG5cdFx0XHRcIkF0bGFudGljL1N0YW5sZXl8U01UIC0wNCAtMDMgLTAyfDNQLm8gNDAgMzAgMjB8MDEyMTIxMjEyMTIxMjEyMzIzMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyfC0ya0p3OC5BIDEyYkE4LkEgMTlYMCAxZkIwIDE5WDAgMWlwMCAxOVgwIDFmQjAgMTlYMCAxZkIwIDE5WDAgMWZCMCBDbjAgMUNjMTAgV0wwIDFxTDAgVTEwIDF0ejAgMm1OMCBXTjAgMXFMMCBXTjAgMXFMMCBXTjAgMXFMMCBXTjAgMXR6MCBVMTAgMXR6MCBXTjAgMXFMMCBXTjAgMXFMMCBXTjAgMXFMMCBXTjAgMXFMMCBXTjAgMXR6MCBXTjAgMXFMMCBXTjAgMXFMMCBXTjAgMXFMMCBXTjAgMXFMMCBXTjAgMXFOMCBVMTAgMXduMCBSZDAgMXduMCBVMTAgMXR6MCBVMTAgMXR6MCBVMTAgMXR6MCBVMTAgMXR6MCBVMTAgMXduMCBVMTAgMXR6MCBVMTAgMXR6MCBVMTB8MjFlMlwiLFxuXHRcdFx0XCJBdXN0cmFsaWEvU3lkbmV5fEFFU1QgQUVEVHwtYTAgLWIwfDAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDF8LTI5M2xYIHhjWCAxMGpkMCB5TDAgMWNOMCAxY0wwIDFmQjAgMTlYMCAxN2MxMCBMQTAgMUMwMCBPbzAgMXpjMCBPbzAgMXpjMCBPbzAgMXpjMCBSYzAgMXpjMCBPbzAgMXpjMCBPbzAgMXpjMCBPbzAgMXpjMCBPbzAgMXpjMCBPbzAgMXpjMCAxNG8wIDFvMDAgT28wIDF6YzAgT28wIDF6YzAgT28wIDF6YzAgVTAwIDFxTTAgV00wIDF0QTAgV00wIDF0QTAgVTAwIDF0QTAgT28wIDF6YzAgT28wIDF6YzAgT28wIDF6YzAgUmMwIDF6YzAgT28wIDF6YzAgT28wIDF6YzAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxMUEwIDFvMDAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgV00wIDFxTTAgMTRvMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTB8NDBlNVwiLFxuXHRcdFx0XCJBdXN0cmFsaWEvQWRlbGFpZGV8QUNTVCBBQ0RUfC05dSAtYXV8MDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMXwtMjkzbHQgeGNYIDEwamQwIHlMMCAxY04wIDFjTDAgMWZCMCAxOVgwIDE3YzEwIExBMCAxQzAwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIFJjMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIFJjMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIFUwMCAxcU0wIFdNMCAxdEEwIFdNMCAxdEEwIFUwMCAxdEEwIFUwMCAxdEEwIE9vMCAxemMwIFdNMCAxcU0wIFJjMCAxemMwIFUwMCAxdEEwIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgV00wIDFxTTAgMTRvMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTB8MTFlNVwiLFxuXHRcdFx0XCJBdXN0cmFsaWEvQnJpc2JhbmV8QUVTVCBBRURUfC1hMCAtYjB8MDEwMTAxMDEwMTAxMDEwMTB8LTI5M2xYIHhjWCAxMGpkMCB5TDAgMWNOMCAxY0wwIDFmQjAgMTlYMCAxN2MxMCBMQTAgSDFBMCBPbzAgMXpjMCBPbzAgMXpjMCBPbzB8MjBlNVwiLFxuXHRcdFx0XCJBdXN0cmFsaWEvQnJva2VuX0hpbGx8QUNTVCBBQ0RUfC05dSAtYXV8MDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMXwtMjkzbHQgeGNYIDEwamQwIHlMMCAxY04wIDFjTDAgMWZCMCAxOVgwIDE3YzEwIExBMCAxQzAwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIFJjMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIDE0bzAgMW8wMCBPbzAgMXpjMCBPbzAgMXpjMCBPbzAgMXpjMCBVMDAgMXFNMCBXTTAgMXRBMCBXTTAgMXRBMCBVMDAgMXRBMCBPbzAgMXpjMCBPbzAgMXpjMCBPbzAgMXpjMCBSYzAgMXpjMCBPbzAgMXpjMCBPbzAgMXpjMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIFdNMCAxcU0wIDE0bzAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wfDE4ZTNcIixcblx0XHRcdFwiQXVzdHJhbGlhL0N1cnJpZXxBRVNUIEFFRFR8LWEwIC1iMHwwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxfC0yOUU4MCAxOVgwIDEwamQwIHlMMCAxY04wIDFjTDAgMWZCMCAxOVgwIDE3YzEwIExBMCAxQzAwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIFJjMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIDExQTAgMXFNMCBXTTAgMXFNMCBPbzAgMXpjMCBPbzAgMXpjMCBPbzAgMXdvMCBXTTAgMXRBMCBXTTAgMXRBMCBVMDAgMXRBMCBVMDAgMXRBMCAxMUEwIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFjTTAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDExQTAgMW8wMCAxaW8wIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxY00wIDFjTTAgMWEwMCAxaW8wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wfDc0NlwiLFxuXHRcdFx0XCJBdXN0cmFsaWEvRGFyd2lufEFDU1QgQUNEVHwtOXUgLWF1fDAxMDEwMTAxMHwtMjkzbHQgeGNYIDEwamQwIHlMMCAxY04wIDFjTDAgMWZCMCAxOVgwfDEyZTRcIixcblx0XHRcdFwiQXVzdHJhbGlhL0V1Y2xhfCswODQ1ICswOTQ1fC04SiAtOUp8MDEwMTAxMDEwMTAxMDEwMTAxMHwtMjkza0kgeGNYIDEwamQwIHlMMCAxY04wIDFjTDAgMWdTcDAgT28wIGw1QTAgT28wIGlKQTAgRzAwIHpVMDAgSU0wIDFxTTAgMTFBMCAxbzAwIDExQTB8MzY4XCIsXG5cdFx0XHRcIkF1c3RyYWxpYS9Ib2JhcnR8QUVTVCBBRURUfC1hMCAtYjB8MDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxfC0yOUU4MCAxOVgwIDEwamQwIHlMMCAxY04wIDFjTDAgMWZCMCAxOVgwIFZmQjAgMWNNMCAxbzAwIFJjMCAxd28wIFJjMCAxd28wIFUwMCAxd28wIExBMCAxQzAwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIFJjMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIDExQTAgMXFNMCBXTTAgMXFNMCBPbzAgMXpjMCBPbzAgMXpjMCBPbzAgMXdvMCBXTTAgMXRBMCBXTTAgMXRBMCBVMDAgMXRBMCBVMDAgMXRBMCAxMUEwIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFjTTAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDExQTAgMW8wMCAxaW8wIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxY00wIDFjTTAgMWEwMCAxaW8wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wfDIxZTRcIixcblx0XHRcdFwiQXVzdHJhbGlhL0xvcmRfSG93ZXxBRVNUICsxMDMwICsxMTMwICsxMXwtYTAgLWF1IC1idSAtYjB8MDEyMTIxMjEyMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxM3xyYUMwIDF6ZHUgUmIwIDF6ZDAgT24wIDF6ZDAgT24wIDF6ZDAgT24wIDF6ZDAgVFh1IDFxTXUgV0x1IDF0QXUgV0x1IDF0QXUgVFh1IDF0QXUgT251IDF6Y3UgT251IDF6Y3UgT251IDF6Y3UgUmJ1IDF6Y3UgT251IDF6Y3UgT251IDF6Y3UgMTF6dSAxbzB1IDExenUgMW8wdSAxMXp1IDFvMHUgMTF6dSAxcU11IFdMdSAxMUF1IDFuWHUgMXFNdSAxMXp1IDFvMHUgMTF6dSAxbzB1IDExenUgMXFNdSBXTHUgMXFNdSAxMXp1IDFvMHUgV0x1IDFxTXUgMTRudSAxY011IDFjTHUgMWNNdSAxY0x1IDFjTXUgMWNMdSAxY011IDFjTHUgMWZBdSAxY0x1IDFjTXUgMWNMdSAxY011IDFjTHUgMWNNdSAxY0x1IDFjTXUgMWNMdSAxY011IDFjTHUgMWZBdSAxY0x1IDFjTXUgMWNMdSAxY011IDFjTHUgMWNNdSAxY0x1IDFjTXUgMWNMdSAxY011IDFmenUgMWNNdSAxY0x1IDFjTXUgMWNMdSAxY011IDFjTHUgMWNNdSAxY0x1IDFjTXUgMWNMdSAxZkF1IDFjTHUgMWNNdSAxY0x1IDFjTXUgMWNMdSAxY011IDFjTHUgMWNNdSAxY0x1IDFjTXUgMWNMdSAxZkF1IDFjTHUgMWNNdSAxY0x1IDFjTXV8MzQ3XCIsXG5cdFx0XHRcIkF1c3RyYWxpYS9MaW5kZW1hbnxBRVNUIEFFRFR8LWEwIC1iMHwwMTAxMDEwMTAxMDEwMTAxMDEwMTB8LTI5M2xYIHhjWCAxMGpkMCB5TDAgMWNOMCAxY0wwIDFmQjAgMTlYMCAxN2MxMCBMQTAgSDFBMCBPbzAgMXpjMCBPbzAgMXpjMCBPbzAgMXpjMCBSYzAgMXpjMCBPbzB8MTBcIixcblx0XHRcdFwiQXVzdHJhbGlhL01lbGJvdXJuZXxBRVNUIEFFRFR8LWEwIC1iMHwwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxfC0yOTNsWCB4Y1ggMTBqZDAgeUwwIDFjTjAgMWNMMCAxZkIwIDE5WDAgMTdjMTAgTEEwIDFDMDAgT28wIDF6YzAgT28wIDF6YzAgT28wIDF6YzAgUmMwIDF6YzAgT28wIDF6YzAgT28wIDF6YzAgT28wIDF6YzAgT28wIDF6YzAgT28wIDF6YzAgUmMwIDF6YzAgT28wIDF6YzAgT28wIDF6YzAgT28wIDF6YzAgVTAwIDFxTTAgV00wIDFxTTAgMTFBMCAxdEEwIFUwMCAxdEEwIFUwMCAxdEEwIE9vMCAxemMwIE9vMCAxemMwIFJjMCAxemMwIE9vMCAxemMwIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMTFBMCAxbzAwIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIFdNMCAxcU0wIDE0bzAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wfDM5ZTVcIixcblx0XHRcdFwiQXVzdHJhbGlhL1BlcnRofEFXU1QgQVdEVHwtODAgLTkwfDAxMDEwMTAxMDEwMTAxMDEwMTB8LTI5M2pYIHhjWCAxMGpkMCB5TDAgMWNOMCAxY0wwIDFnU3AwIE9vMCBsNUEwIE9vMCBpSkEwIEcwMCB6VTAwIElNMCAxcU0wIDExQTAgMW8wMCAxMUEwfDE4ZTVcIixcblx0XHRcdFwiQ0VUfENFVCBDRVNUfC0xMCAtMjB8MDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTB8LTJhRmUwIDExZDAgMWlPMCAxMUEwIDFvMDAgMTFBMCBRcmMwIDZpMDAgV00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMTZNMCAxZ01NMCAxYTAwIDFmQTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxYTAwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDBcIixcblx0XHRcdFwiUGFjaWZpYy9FYXN0ZXJ8RU1UIC0wNyAtMDYgLTA1fDdoLnMgNzAgNjAgNTB8MDEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzfC0xdVNnRy53IDFzNElHLncgV0wwIDF6ZDAgT24wIDFpcDAgMTF6MCAxbzEwIDExejAgMXFOMCBXTDAgMWxkMCAxNG4wIDFxTjAgV0wwIDFxTjAgMTF6MCAxbzEwIDExejAgMW8xMCAxMXowIDFxTjAgV0wwIDFxTjAgV0wwIDFxTjAgMTF6MCAxbzEwIDJwQTAgMTF6MCAxbzEwIDExejAgMXFOMCBXTDAgMXFOMCBXTDAgMXFOMCAxY0wwIDFjTjAgMTF6MCAxbzEwIDExejAgMXFOMCBXTDAgMWZCMCAxOVgwIDFxTjAgMTF6MCAxbzEwIDExejAgMW8xMCAxMXowIDFvMTAgMTF6MCAxcU4wIFdMMCAxcU4wIDE3YjAgMWlwMCAxMXowIDFpcDAgMWZ6MCAxZkIwIDExejAgMXFOMCBXTDAgMXFOMCBXTDAgMXFOMCBXTDAgMXFOMCAxMXowIDFvMTAgMTF6MCAxbzEwIDExejAgMXFOMCBXTDAgMXFOMCAxN2IwIDFpcDAgMTF6MCAxbzEwIDE5WDAgMWZCMCAxblgwIEcxMCAxRUwwIE9wMCAxemIwIFJkMCAxd24wIFJkMCA0Nm4wIEFwMCAxTmIwIEFwMCAxTmIwIEFwMCAxTmIwIEFwMCAxTmIwIEFwMCAxTmIwIERkMCAxTmIwIEFwMCAxTmIwIEFwMCAxTmIwIEFwMCAxTmIwIEFwMCAxTmIwIEFwMCAxTmIwIERkMCAxTmIwIEFwMCAxTmIwIEFwMCAxTmIwIEFwMCAxTmIwIEFwMCAxTmIwIERkMCAxTmIwIEFwMCAxTmIwIEFwMCAxTmIwIEFwMCAxTmIwIEFwMCAxTmIwIEFwMHwzMGUyXCIsXG5cdFx0XHRcIkNTVDZDRFR8Q1NUIENEVCBDV1QgQ1BUfDYwIDUwIDUwIDUwfDAxMDEwMjMwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMHwtMjYxczAgMW5YMCAxMUIwIDFuWDAgU2dOMCA4eDMwIGl3MCBRd04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxZnowIDFjTjAgMWNMMCAxY04wIDFjTDAgczEwIDFWejAgTEIwIDFCWDAgMWNOMCAxZnowIDFhMTAgMWZ6MCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxZnowIDFhMTAgMWZ6MCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTRwMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwXCIsXG5cdFx0XHRcIkVFVHxFRVQgRUVTVHwtMjAgLTMwfDAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMHxoREIwIDFhMDAgMWZBMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFhMDAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMFwiLFxuXHRcdFx0XCJFdXJvcGUvRHVibGlufERNVCBJU1QgR01UIEJTVCBJU1R8cC5sIC15LkQgMCAtMTAgLTEwfDAxMjMyMzIzMjMyMzI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyfC0yYXg5eS5EIFJjMCAxZnp5LkQgMTRNMCAxZmMwIDFnMDAgMWNvMCAxZGMwIDFjbzAgMW9vMCAxNDAwIDFkYzAgMTlBMCAxaW8wIDFpbzAgV00wIDFvMDAgMTRvMCAxbzAwIDE3YzAgMWlvMCAxN2MwIDFmQTAgMWEwMCAxbGMwIDE3YzAgMWlvMCAxN2MwIDFmQTAgMWEwMCAxaW8wIDE3YzAgMWlvMCAxN2MwIDFmQTAgMWNNMCAxaW8wIDE3YzAgMWZBMCAxYTAwIDFpbzAgMTdjMCAxaW8wIDE3YzAgMWZBMCAxYTAwIDFpbzAgMXFNMCBEYzAgZzYwMCAxNG8wIDF3bzAgMTdjMCAxaW8wIDExQTAgMW8wMCAxN2MwIDFmQTAgMWEwMCAxZkEwIDFjTTAgMWZBMCAxYTAwIDE3YzAgMWZBMCAxYTAwIDFpbzAgMTdjMCAxbGMwIDE3YzAgMWZBMCAxYTAwIDFpbzAgMTdjMCAxaW8wIDE3YzAgMWZBMCAxYTAwIDFhMDAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDF0QTAgSU0wIDkwbzAgVTAwIDF0QTAgVTAwIDF0QTAgVTAwIDF0QTAgVTAwIDF0QTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDF0QTAgVTAwIDF0QTAgVTAwIDF0QTAgMTF6MCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxNG8wIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwfDEyZTVcIixcblx0XHRcdFwiRVNUfEVTVHw1MHwwfFwiLFxuXHRcdFx0XCJFU1Q1RURUfEVTVCBFRFQgRVdUIEVQVHw1MCA0MCA0MCA0MHwwMTAxMDIzMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTB8LTI2MXQwIDFuWDAgMTFCMCAxblgwIFNnTjAgOHg0MCBpdjAgUXdOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWZ6MCAxY04wIDFjTDAgMWNOMCAxY0wwIHMxMCAxVnowIExCMCAxQlgwIDFjTjAgMWZ6MCAxYTEwIDFmejAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWZ6MCAxYTEwIDFmejAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTRwMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTRwMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMFwiLFxuXHRcdFx0XCJFdGMvR01ULTB8R01UfDB8MHxcIixcblx0XHRcdFwiRXRjL0dNVC0xfCswMXwtMTB8MHxcIixcblx0XHRcdFwiUGFjaWZpYy9Qb3J0X01vcmVzYnl8KzEwfC1hMHwwfHwyNWU0XCIsXG5cdFx0XHRcIlBhY2lmaWMvUG9obnBlaXwrMTF8LWIwfDB8fDM0ZTNcIixcblx0XHRcdFwiUGFjaWZpYy9UYXJhd2F8KzEyfC1jMHwwfHwyOWUzXCIsXG5cdFx0XHRcIkV0Yy9HTVQtMTN8KzEzfC1kMHwwfFwiLFxuXHRcdFx0XCJFdGMvR01ULTE0fCsxNHwtZTB8MHxcIixcblx0XHRcdFwiRXRjL0dNVC0yfCswMnwtMjB8MHxcIixcblx0XHRcdFwiRXRjL0dNVC0zfCswM3wtMzB8MHxcIixcblx0XHRcdFwiRXRjL0dNVC00fCswNHwtNDB8MHxcIixcblx0XHRcdFwiRXRjL0dNVC01fCswNXwtNTB8MHxcIixcblx0XHRcdFwiRXRjL0dNVC02fCswNnwtNjB8MHxcIixcblx0XHRcdFwiSW5kaWFuL0NocmlzdG1hc3wrMDd8LTcwfDB8fDIxZTJcIixcblx0XHRcdFwiRXRjL0dNVC04fCswOHwtODB8MHxcIixcblx0XHRcdFwiUGFjaWZpYy9QYWxhdXwrMDl8LTkwfDB8fDIxZTNcIixcblx0XHRcdFwiRXRjL0dNVCsxfC0wMXwxMHwwfFwiLFxuXHRcdFx0XCJFdGMvR01UKzEwfC0xMHxhMHwwfFwiLFxuXHRcdFx0XCJFdGMvR01UKzExfC0xMXxiMHwwfFwiLFxuXHRcdFx0XCJFdGMvR01UKzEyfC0xMnxjMHwwfFwiLFxuXHRcdFx0XCJFdGMvR01UKzN8LTAzfDMwfDB8XCIsXG5cdFx0XHRcIkV0Yy9HTVQrNHwtMDR8NDB8MHxcIixcblx0XHRcdFwiRXRjL0dNVCs1fC0wNXw1MHwwfFwiLFxuXHRcdFx0XCJFdGMvR01UKzZ8LTA2fDYwfDB8XCIsXG5cdFx0XHRcIkV0Yy9HTVQrN3wtMDd8NzB8MHxcIixcblx0XHRcdFwiRXRjL0dNVCs4fC0wOHw4MHwwfFwiLFxuXHRcdFx0XCJFdGMvR01UKzl8LTA5fDkwfDB8XCIsXG5cdFx0XHRcIkV0Yy9VQ1R8VUNUfDB8MHxcIixcblx0XHRcdFwiRXRjL1VUQ3xVVEN8MHwwfFwiLFxuXHRcdFx0XCJFdXJvcGUvQW1zdGVyZGFtfEFNVCBOU1QgKzAxMjAgKzAwMjAgQ0VTVCBDRVR8LWoudyAtMWoudyAtMWsgLWsgLTIwIC0xMHwwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTIzMjMyMzQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDV8LTJhRmNqLncgMTFiMCAxaVAwIDExQTAgMWlvMCAxY00wIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFjbzAgMWlvMCAxeW8wIFBjMCAxYTAwIDFmQTAgMUJjMCBNbzAgMXRjMCBVbzAgMXRBMCBVMDAgMXVvMCBXMDAgMXMwMCBWQTAgMXNvMCBWYzAgMXNNMCBVTTAgMXdvMCBSYzAgMXUwMCBXbzAgMXJBMCBXMDAgMXMwMCBWQTAgMXNNMCBVTTAgMXcwMCBmVjAgQkNYLncgMXRBMCBVMDAgMXUwMCBXbzAgMXNtMCA2MDFrIFdNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDE2TTAgMWdNTTAgMWEwMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFmQTAgMWEwMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwfDE2ZTVcIixcblx0XHRcdFwiRXVyb3BlL0FuZG9ycmF8V0VUIENFVCBDRVNUfDAgLTEwIC0yMHwwMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjF8LVVCQTAgMXhJTjAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMHw3OWUzXCIsXG5cdFx0XHRcIkV1cm9wZS9Bc3RyYWtoYW58TE1UICswMyArMDQgKzA1fC0zYy5jIC0zMCAtNDAgLTUwfDAxMjMyMzIzMjMyMzIzMjMyMzIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMnwtMVBjcmMuYyBlVU1jLmMgMjNDTDAgMWRiMCAxY04wIDFkYjAgMWNOMCAxZGIwIDFkZDAgMWNPMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMnBCMCAxY00wIDFmQTAgMWNNMCAzQ28wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgOEh6MCAzcmQwXCIsXG5cdFx0XHRcIkV1cm9wZS9BdGhlbnN8QU1UIEVFVCBFRVNUIENFU1QgQ0VUfC0xeS5RIC0yMCAtMzAgLTIwIC0xMHwwMTIxMjM0MzQxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjF8LTJhNjF4LlEgQ05ieC5RIG1uMCBrVTEwIDliMCAzRXMwIFhhMCAxZmIwIDFkZDAgazNYMCBOejAgU0NwMCAxdmMwIFNPMCAxY00wIDFhMDAgMWFvMCAxZmMwIDFhMTAgMWZHMCAxY2cwIDFkWDAgMWJYMCAxY1EwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwfDM1ZTVcIixcblx0XHRcdFwiRXVyb3BlL0xvbmRvbnxHTVQgQlNUIEJEU1R8MCAtMTAgLTIwfDAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMjEyMTIxMjEyMTAxMDEyMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTB8LTJheGEwIFJjMCAxZkEwIDE0TTAgMWZjMCAxZzAwIDFjbzAgMWRjMCAxY28wIDFvbzAgMTQwMCAxZGMwIDE5QTAgMWlvMCAxaW8wIFdNMCAxbzAwIDE0bzAgMW8wMCAxN2MwIDFpbzAgMTdjMCAxZkEwIDFhMDAgMWxjMCAxN2MwIDFpbzAgMTdjMCAxZkEwIDFhMDAgMWlvMCAxN2MwIDFpbzAgMTdjMCAxZkEwIDFjTTAgMWlvMCAxN2MwIDFmQTAgMWEwMCAxaW8wIDE3YzAgMWlvMCAxN2MwIDFmQTAgMWEwMCAxaW8wIDFxTTAgRGMwIDJSejAgRGMwIDF6YzAgT28wIDF6YzAgUmMwIDF3bzAgMTdjMCAxaU0wIEZBMCB4QjAgMWZBMCAxYTAwIDE0bzAgYmIwIExBMCB4QjAgUmMwIDF3bzAgMTFBMCAxbzAwIDE3YzAgMWZBMCAxYTAwIDFmQTAgMWNNMCAxZkEwIDFhMDAgMTdjMCAxZkEwIDFhMDAgMWlvMCAxN2MwIDFsYzAgMTdjMCAxZkEwIDFhMDAgMWlvMCAxN2MwIDFpbzAgMTdjMCAxZkEwIDFhMDAgMWEwMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXRBMCBJTTAgOTBvMCBVMDAgMXRBMCBVMDAgMXRBMCBVMDAgMXRBMCBVMDAgMXRBMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXRBMCBVMDAgMXRBMCBVMDAgMXRBMCAxMXowIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDE0bzAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDB8MTBlNlwiLFxuXHRcdFx0XCJFdXJvcGUvQmVsZ3JhZGV8Q0VUIENFU1R8LTEwIC0yMHwwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMHwtMTlSQzAgM0lQMCBXTTAgMWZBMCAxY00wIDFjTTAgMXJjMCBRbzAgMXZtbzAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwfDEyZTVcIixcblx0XHRcdFwiRXVyb3BlL0JlcmxpbnxDRVQgQ0VTVCBDRU1UfC0xMCAtMjAgLTMwfDAxMDEwMTAxMDEwMTAxMjEwMTAxMjEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwfC0yYUZlMCAxMWQwIDFpTzAgMTFBMCAxbzAwIDExQTAgUXJjMCA2aTAwIFdNMCAxZkEwIDFjTTAgMWNNMCAxY00wIGtMMCBOYzAgbTEwIFdNMCAxYW8wIDFjcDAgZFgwIGp6MCBEZDAgMWlvMCAxN2MwIDFmQTAgMWEwMCAxZWhBMCAxYTAwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDB8NDFlNVwiLFxuXHRcdFx0XCJFdXJvcGUvUHJhZ3VlfENFVCBDRVNUIEdNVHwtMTAgLTIwIDB8MDEwMTAxMDEwMTAxMDEwMTAyMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTB8LTJhRmUwIDExZDAgMWlPMCAxMUEwIDFvMDAgMTFBMCBRcmMwIDZpMDAgV00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxcU0wIDExYzAgbXAwIHhBMCBtbjAgMTdjMCAxaW8wIDE3YzAgMWZjMCAxYW8wIDFiTmMwIDFjTTAgMWZBMCAxYTAwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDB8MTNlNVwiLFxuXHRcdFx0XCJFdXJvcGUvQnJ1c3NlbHN8V0VUIENFVCBDRVNUIFdFU1R8MCAtMTAgLTIwIC0xMHwwMTIxMjEyMTAzMDMwMzAzMDMwMzAzMDMwMzAzMDMwMzAzMDMwMzAzMDMwMzAzMDMwMzAzMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxfC0yZWhjMCAzelgwIDExYzAgMWlPMCAxMUEwIDFvMDAgMTFBMCBteTAgSWMwIDFxTTAgUmMwIDFFTTAgVU0wIDF1MDAgMTBvMCAxaW8wIDFpbzAgMTdjMCAxYTAwIDFmQTAgMWNNMCAxY00wIDFpbzAgMTdjMCAxZkEwIDFhMDAgMWlvMCAxYTMwIDFpbzAgMTdjMCAxZkEwIDFhMDAgMWlvMCAxN2MwIDFjTTAgMWNNMCAxYTAwIDFpbzAgMWNNMCAxY00wIDFhMDAgMWZBMCAxaW8wIDE3YzAgMWNNMCAxY00wIDFhMDAgMWZBMCAxaW8wIDFxTTAgRGMwIHkwMCA1V24wIFdNMCAxZkEwIDFjTTAgMTZNMCAxaU0wIDE2TTAgMUMwMCBVbzAgMWVlbzAgMWEwMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFmQTAgMWEwMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwfDIxZTVcIixcblx0XHRcdFwiRXVyb3BlL0J1Y2hhcmVzdHxCTVQgRUVUIEVFU1R8LTFJLm8gLTIwIC0zMHwwMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxfC0xeEFwSS5vIDIwTEkubyBSQTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFBeGMwIE9uMCAxZkEwIDFhMTAgMWNPMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjSzAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNMMCAxY04wIDFjTDAgMWZCMCAxblgwIDExRTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMHwxOWU1XCIsXG5cdFx0XHRcIkV1cm9wZS9CdWRhcGVzdHxDRVQgQ0VTVHwtMTAgLTIwfDAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTB8LTJhRmUwIDExZDAgMWlPMCAxMUEwIDFpcDAgMTdiMCAxb3AwIDF0YjAgUTJtMCAzTmUwIFdNMCAxZkEwIDFjTTAgMWNNMCAxb0owIDFkYzAgMTAzMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxYTAwIDFpTTAgMWZBMCA4SGEwIFJiMCAxd04wIFJiMCAxQkIwIEx6MCAxQzIwIExCMCBTTlgwIDFhMTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMHwxN2U1XCIsXG5cdFx0XHRcIkV1cm9wZS9adXJpY2h8Q0VUIENFU1R8LTEwIC0yMHwwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMHwtMTlMYzAgMTFBMCAxbzAwIDExQTAgMXhHMTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDB8MzhlNFwiLFxuXHRcdFx0XCJFdXJvcGUvQ2hpc2luYXV8Q01UIEJNVCBFRVQgRUVTVCBDRVNUIENFVCBNU0sgTVNEfC0xVCAtMUkubyAtMjAgLTMwIC0yMCAtMTAgLTMwIC00MHwwMTIzMjMyMzIzMjMyMzIzMjMyMzQ1NDU0Njc2NzY3Njc2NzY3Njc2NzY3NjczMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzJ8LTI2amRUIHdHTWEuQSAyMExJLm8gUkEwIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAyN0EwIDJlbjAgMzlnMCBXTTAgMWZBMCAxY00wIFY5MCAxdDd6MCAxZGIwIDFjTjAgMWRiMCAxY04wIDFkYjAgMWRkMCAxY08wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCBnTDAgV08wIDFjTTAgMWNNMCAxY0swIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWZCMCAxblgwIDExRDAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMHw2N2U0XCIsXG5cdFx0XHRcIkV1cm9wZS9Db3BlbmhhZ2VufENFVCBDRVNUfC0xMCAtMjB8MDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMHwtMmF6QzAgVHowIFZ1TzAgNjBxMCBXTTAgMWZBMCAxY00wIDFjTTAgMWNNMCBTMDAgMUhBMCBOYzAgMUMwMCBEYzAgMU5jMCBBbzAgMWg1QTAgMWEwMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwfDEyZTVcIixcblx0XHRcdFwiRXVyb3BlL0dpYnJhbHRhcnxHTVQgQlNUIEJEU1QgQ0VUIENFU1R8MCAtMTAgLTIwIC0xMCAtMjB8MDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEyMTIxMjEyMTIxMDEwMTIxMDEwMTAxMDEwMTAxMDEwMTAxMDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzfC0yYXhhMCBSYzAgMWZBMCAxNE0wIDFmYzAgMWcwMCAxY28wIDFkYzAgMWNvMCAxb28wIDE0MDAgMWRjMCAxOUEwIDFpbzAgMWlvMCBXTTAgMW8wMCAxNG8wIDFvMDAgMTdjMCAxaW8wIDE3YzAgMWZBMCAxYTAwIDFsYzAgMTdjMCAxaW8wIDE3YzAgMWZBMCAxYTAwIDFpbzAgMTdjMCAxaW8wIDE3YzAgMWZBMCAxY00wIDFpbzAgMTdjMCAxZkEwIDFhMDAgMWlvMCAxN2MwIDFpbzAgMTdjMCAxZkEwIDFhMDAgMWlvMCAxcU0wIERjMCAyUnowIERjMCAxemMwIE9vMCAxemMwIFJjMCAxd28wIDE3YzAgMWlNMCBGQTAgeEIwIDFmQTAgMWEwMCAxNG8wIGJiMCBMQTAgeEIwIFJjMCAxd28wIDExQTAgMW8wMCAxN2MwIDFmQTAgMWEwMCAxZkEwIDFjTTAgMWZBMCAxYTAwIDE3YzAgMWZBMCAxYTAwIDFpbzAgMTdjMCAxbGMwIDE3YzAgMWZBMCAxMEp6MCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwfDMwZTNcIixcblx0XHRcdFwiRXVyb3BlL0hlbHNpbmtpfEhNVCBFRVQgRUVTVHwtMUQuTiAtMjAgLTMwfDAxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjF8LTFXdU5ELk4gT1VMRC5OIDFkQTAgMXhHcTAgMWNNMCAxY00wIDFjTTAgMWNOMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDB8MTJlNVwiLFxuXHRcdFx0XCJFdXJvcGUvS2FsaW5pbmdyYWR8Q0VUIENFU1QgQ0VUIENFU1QgTVNLIE1TRCBFRVNUIEVFVCArMDN8LTEwIC0yMCAtMjAgLTMwIC0zMCAtNDAgLTMwIC0yMCAtMzB8MDEwMTAxMDEwMTAxMDIzMjQ1NDU0NTQ1NDU0NTQ1NDU0Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc4N3wtMmFGZTAgMTFkMCAxaU8wIDExQTAgMW8wMCAxMUEwIFFyYzAgNmkwMCBXTTAgMWZBMCAxY00wIDFjTTAgQW0wIExiMCAxZW4wIG9wMCAxcE56MCAxZGIwIDFjTjAgMWRiMCAxY04wIDFkYjAgMWRkMCAxY08wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTjAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCA4SHowfDQ0ZTRcIixcblx0XHRcdFwiRXVyb3BlL0tpZXZ8S01UIEVFVCBNU0sgQ0VTVCBDRVQgTVNEIEVFU1R8LTIyLjQgLTIwIC0zMCAtMjAgLTEwIC00MCAtMzB8MDEyMzQzNDI1MjUyNTI1MjUyNTI1MjUyNTI1NjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MXwtMVBjMjIuNCBlVW8yLjQgcm56MCAySGcwIFdNMCAxZkEwIGRhMCAxdjRtMCAxZGIwIDFjTjAgMWRiMCAxY04wIDFkYjAgMWRkMCAxY08wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCBEYjAgMzIyMCAxY0swIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY1EwIDFjTTAgMWZBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMHwzNGU1XCIsXG5cdFx0XHRcIkV1cm9wZS9LaXJvdnxMTVQgKzAzICswNCArMDV8LTNpLk0gLTMwIC00MCAtNTB8MDEyMzIzMjMyMzIzMjMyMzIzMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjF8LTIyV00wIHFIOTAgMjNDTDAgMWRiMCAxY04wIDFkYjAgMWNOMCAxZGIwIDFkZDAgMWNPMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMnBCMCAxY00wIDFmQTAgMWNNMCAzQ28wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgOEh6MHw0OGU0XCIsXG5cdFx0XHRcIkV1cm9wZS9MaXNib258TE1UIFdFVCBXRVNUIFdFTVQgQ0VUIENFU1R8QS5KIDAgLTEwIC0yMCAtMTAgLTIwfDAxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjMyMTIzMjEyMzIxMjMyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxNDEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyNDU0NTQ1NDIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMXwtMmxlMDAgYVBYMCBTcDAgTFgwIDF2YzAgVGMwIDF1TTAgU00wIDF2YzAgVGMwIDF2YzAgU00wIDF2YzAgNjYwMCAxY28wIDNFMDAgMTdjMCAxZkEwIDFhMDAgMWlvMCAxYTAwIDFpbzAgMTdjMCAzSTAwIDE3YzAgMWNNMCAxY00wIDNGYzAgMWNNMCAxYTAwIDFmQTAgMWlvMCAxN2MwIDFjTTAgMWNNMCAxYTAwIDFmQTAgMWlvMCAxcU0wIERjMCAxdEEwIDFjTTAgMWRjMCAxNDAwIGdMMCBJTTAgczEwIFUwMCBkWDAgUmMwIHBkMCBSYzAgZ0wwIE9vMCBwZDAgUmMwIGdMMCBPbzAgcGQwIDE0bzAgMWNNMCAxY1AwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAzQ28wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIHB2eTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTjAgMWNMMCAxY04wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNOMCAxY0wwIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDB8MjdlNVwiLFxuXHRcdFx0XCJFdXJvcGUvTHV4ZW1ib3VyZ3xMTVQgQ0VUIENFU1QgV0VUIFdFU1QgV0VTVCBXRVR8LW8uQSAtMTAgLTIwIDAgLTEwIC0yMCAtMTB8MDEyMTIxMjEzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDU2NTY1MTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMXwtMkRHMG8uQSB0Nm1vLkEgVEIwIDFuWDAgVXAwIDFvMjAgMTFBMCByVzAgQ00wIDFxUDAgUjkwIDFFTzAgVUswIDF1MjAgMTBtMCAxaXAwIDFpbjAgMTdlMCAxOVcwIDFmQjAgMWRiMCAxY3AwIDFpbjAgMTdkMCAxZnowIDFhMTAgMWluMCAxYTEwIDFpbjAgMTdmMCAxZkEwIDFhMDAgMWlvMCAxN2MwIDFjTTAgMWNNMCAxYTAwIDFpbzAgMWNNMCAxY00wIDFhMDAgMWZBMCAxaW8wIDE3YzAgMWNNMCAxY00wIDFhMDAgMWZBMCAxaW8wIDFxTTAgRGMwIHZBMCA2MEwwIFdNMCAxZkEwIDFjTTAgMTdjMCAxaW8wIDE2TTAgMUMwMCBVbzAgMWVlbzAgMWEwMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFmQTAgMWEwMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwfDU0ZTRcIixcblx0XHRcdFwiRXVyb3BlL01hZHJpZHxXRVQgV0VTVCBXRU1UIENFVCBDRVNUfDAgLTEwIC0yMCAtMTAgLTIwfDAxMDEwMTAxMDEwMTAxMDEwMTIxMDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0M3wtMjVUZDAgMTlCMCAxY0wwIDFkZDAgYjF6MCAxOHAwIDNIWDAgMTdkMCAxZnowIDFhMTAgMWlvMCAxYTAwIDFpbjAgMTdkMCBpSW4wIEhkMCAxY0wwIGJiMCAxMjAwIDJzMjAgMTRuMCA1YUwwIE1wMCAxdnowIDE3ZDAgMWluMCAxN2QwIDFpbjAgMTdkMCAxaW4wIDE3ZDAgNmhYMCAxMUIwIFhIWDAgMWExMCAxZnowIDFhMTAgMTlYMCAxY04wIDFmejAgMWExMCAxZkMwIDFjTTAgMWNNMCAxY00wIDFmQTAgMWEwMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwfDYyZTVcIixcblx0XHRcdFwiRXVyb3BlL01hbHRhfENFVCBDRVNUfC0xMCAtMjB8MDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMHwtMmFyQjAgTHowIDFjTjAgMWRiMCAxNDEwIDFvbjAgV3AwIDFxTDAgMTdkMCAxY0wwIE0zQjAgNU0yMCBXTTAgMWZBMCAxY28wIDE3YzAgMWlNMCAxNm0wIDFkZTAgMWxjMCAxNG0wIDFsYzAgV08wIDFxTTAgR1RXMCBPbjAgMUMxMCBMQTAgMUMwMCBMQTAgMUVNMCBMQTAgMUMwMCBMQTAgMXpjMCBPbzAgMUMwMCBPbzAgMWNvMCAxY00wIDFsQTAgWGMwIDFxcTAgMTF6MCAxbzEwIDExejAgMW8xMCAxMXowIDFvMTAgMTF6MCAxbzEwIDExejAgMWlOMCAxOXowIDFmQjAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDB8NDJlNFwiLFxuXHRcdFx0XCJFdXJvcGUvTWluc2t8TU1UIEVFVCBNU0sgQ0VTVCBDRVQgTVNEIEVFU1QgKzAzfC0xTyAtMjAgLTMwIC0yMCAtMTAgLTQwIC0zMCAtMzB8MDEyMzQzNDMyNTI1MjUyNTI1MjUyNTI1MjUyNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTd8LTFQYzFPIGVVbk8gcU5YMCAzZ1EwIFdNMCAxZkEwIDFjTTAgQWwwIDF0c24wIDFkYjAgMWNOMCAxZGIwIDFjTjAgMWRiMCAxZGQwIDFjTzAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAzRmMwIDFjTjAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTB8MTllNVwiLFxuXHRcdFx0XCJFdXJvcGUvTW9uYWNvfFBNVCBXRVQgV0VTVCBXRU1UIENFVCBDRVNUfC05LmwgMCAtMTAgLTIwIC0xMCAtMjB8MDEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMzIzMjMyMzIzNDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTR8LTJuY285LmwgY05iOS5sIEhBMCAxOUEwIDFpTTAgMTFjMCAxb28wIFdvMCAxcmMwIFFNMCAxRU0wIFVNMCAxdTAwIDEwbzAgMWlvMCAxd28wIFJjMCAxYTAwIDFmQTAgMWNNMCAxY00wIDFpbzAgMTdjMCAxZkEwIDFhMDAgMWlvMCAxYTAwIDFpbzAgMTdjMCAxZkEwIDFhMDAgMWlvMCAxN2MwIDFjTTAgMWNNMCAxYTAwIDFpbzAgMWNNMCAxY00wIDFhMDAgMWZBMCAxaW8wIDE3YzAgMWNNMCAxY00wIDFhMDAgMWZBMCAxaW8wIDFxTTAgRGYwIDJSVjAgMTF6MCAxMUIwIDF6ZTAgV00wIDFmQTAgMWNNMCAxZmEwIDFhcTAgMTZNMCAxZWtuMCAxY0wwIDFmQzAgMWEwMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFmQTAgMWEwMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwfDM4ZTNcIixcblx0XHRcdFwiRXVyb3BlL01vc2Nvd3xNTVQgTU1UIE1TVCBNRFNUIE1TRCBNU0sgKzA1IEVFVCBFRVNUIE1TS3wtMnUuaCAtMnYuaiAtM3YuaiAtNHYuaiAtNDAgLTMwIC01MCAtMjAgLTMwIC00MHwwMTIxMzIzNDU0NjQ1NzU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTg3NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1OTV8LTJhZzJ1LmggMnB5Vy5XIDFiQTAgMTFYMCBHTjAgMUhiMCBjNHYuaiBpazAgM0RBMCBkejAgMTVBMCBjMTAgMnExMCBpTTEwIDIzQ0wwIDFkYjAgMWNOMCAxZGIwIDFjTjAgMWRiMCAxZGQwIDFjTzAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY04wIElNMCByWDAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDhIejB8MTZlNlwiLFxuXHRcdFx0XCJFdXJvcGUvUGFyaXN8UE1UIFdFVCBXRVNUIENFU1QgQ0VUIFdFTVR8LTkubCAwIC0xMCAtMjAgLTEwIC0yMHwwMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIzNDM0MzUyNTQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0fC0ybmNvOC5sIGNOYjgubCBIQTAgMTlBMCAxaU0wIDExYzAgMW9vMCBXbzAgMXJjMCBRTTAgMUVNMCBVTTAgMXUwMCAxMG8wIDFpbzAgMXdvMCBSYzAgMWEwMCAxZkEwIDFjTTAgMWNNMCAxaW8wIDE3YzAgMWZBMCAxYTAwIDFpbzAgMWEwMCAxaW8wIDE3YzAgMWZBMCAxYTAwIDFpbzAgMTdjMCAxY00wIDFjTTAgMWEwMCAxaW8wIDFjTTAgMWNNMCAxYTAwIDFmQTAgMWlvMCAxN2MwIDFjTTAgMWNNMCAxYTAwIDFmQTAgMWlvMCAxcU0wIERmMCBJazAgNU0zMCBXTTAgMWZBMCAxY00wIFZ4MCBoQjAgMWFxMCAxNk0wIDFla24wIDFjTDAgMWZDMCAxYTAwIDFmQTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxYTAwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDB8MTFlNlwiLFxuXHRcdFx0XCJFdXJvcGUvUmlnYXxSTVQgTFNUIEVFVCBNU0sgQ0VTVCBDRVQgTVNEIEVFU1R8LTFBLnkgLTJBLnkgLTIwIC0zMCAtMjAgLTEwIC00MCAtMzB8MDEwMTAyMzQ1NDU0NTM2MzYzNjM2MzYzNjM2MzYzNzI3MjcyNzI3MjcyNzI3MjcyNzI3MjcyNzI3MjcyNzI3MjcyNzI3MjcyNzI3MjcyNzI3MjcyNzI3MjcyNzI3MjcyNzI3MjcyNzI3MjcyNzI3MjcyNzI3MjcyNzI3MjcyfC0yNVR6QS55IDExQTAgMWlNMCBrbzAgZ1dtMCB5RFhBLnkgMmJYMCAzZkUwIFdNMCAxZkEwIDFjTTAgMWNNMCA0bTAgMXNMeTAgMWRiMCAxY04wIDFkYjAgMWNOMCAxZGIwIDFkZDAgMWNPMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY04wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY04wIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCAzb28wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwfDY0ZTRcIixcblx0XHRcdFwiRXVyb3BlL1JvbWV8Q0VUIENFU1R8LTEwIC0yMHwwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwfC0yYXJCMCBMejAgMWNOMCAxZGIwIDE0MTAgMW9uMCBXcDAgMXFMMCAxN2QwIDFjTDAgTTNCMCA1TTIwIFdNMCAxZkEwIDFjTTAgMTZNMCAxaU0wIDE2bTAgMWRlMCAxbGMwIDE0bTAgMWxjMCBXTzAgMXFNMCBHVFcwIE9uMCAxQzEwIExBMCAxQzAwIExBMCAxRU0wIExBMCAxQzAwIExBMCAxemMwIE9vMCAxQzAwIE9vMCAxQzAwIExBMCAxemMwIE9vMCAxQzAwIExBMCAxQzAwIExBMCAxemMwIE9vMCAxQzAwIE9vMCAxemMwIE9vMCAxZkMwIDFhMDAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMHwzOWU1XCIsXG5cdFx0XHRcIkV1cm9wZS9TYW1hcmF8TE1UICswMyArMDQgKzA1fC0zay5rIC0zMCAtNDAgLTUwfDAxMjMyMzIzMjMyMzIzMjMyMzIxMjEyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMTJ8LTIyV00wIHFIOTAgMjNDTDAgMWRiMCAxY04wIDFkYjAgMWNOMCAxZGIwIDFkZDAgMWNPMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMnBCMCAxY00wIDFmQTAgMnkxMCAxNG0wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMnNwMCBXTTB8MTJlNVwiLFxuXHRcdFx0XCJFdXJvcGUvU2FyYXRvdnxMTVQgKzAzICswNCArMDV8LTM0LmkgLTMwIC00MCAtNTB8MDEyMzIzMjMyMzIzMjMyMzIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyfC0yMldNMCBxSDkwIDIzQ0wwIDFkYjAgMWNOMCAxZGIwIDFjTjAgMWRiMCAxZGQwIDFjTzAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMnBCMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgM0NvMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDhIejAgNTgxMFwiLFxuXHRcdFx0XCJFdXJvcGUvU2ltZmVyb3BvbHxTTVQgRUVUIE1TSyBDRVNUIENFVCBNU0QgRUVTVCBNU0t8LTJnIC0yMCAtMzAgLTIwIC0xMCAtNDAgLTMwIC00MHwwMTIzNDM0MzI1MjUyNTI1MjUyNTI1MjUyNTIxNjE2MTY1MjUyNTI2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNzJ8LTFQYzJnIGVVb2cgckVuMCAycXMwIFdNMCAxZkEwIDFjTTAgM1YwIDF1MEwwIDFkYjAgMWNOMCAxZGIwIDFjTjAgMWRiMCAxZGQwIDFjTzAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxUTAwIDRlTDAgMWNMMCAxY04wIDFjTDAgMWNOMCBkWDAgV0wwIDFjTjAgMWNMMCAxZkIwIDFvMzAgMTFCMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExejAgMW5XMHwzM2U0XCIsXG5cdFx0XHRcIkV1cm9wZS9Tb2ZpYXxFRVQgQ0VUIENFU1QgRUVTVHwtMjAgLTEwIC0yMCAtMzB8MDEyMTIxMDMwMzAzMDMwMzAzMDMwMzAzMDMwMzAzMDMwMzAzMDMwMzAzMDMwMzAzMDMwMzAzMDMwMzAzMDMwMzAzMDMwMzAzMDMwMzAzMDMwMzAzMDMwMzAzMDMwMzAzMDMwMzAzMDMwMzAzMDMwMzAzMDMwMzAzMDMwMzB8LTE2OEwwIFdNMCAxZkEwIDFjTTAgMWNNMCAxY04wIDFtS0gwIDFkZDAgMWZiMCAxYXAwIDFmYjAgMWEyMCAxZnkwIDFhMzAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY0swIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFmQjAgMW5YMCAxMUUwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDB8MTJlNVwiLFxuXHRcdFx0XCJFdXJvcGUvU3RvY2tob2xtfENFVCBDRVNUfC0xMCAtMjB8MDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTB8LTJhekMwIFRCMCAyeURlMCAxYTAwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDB8MTVlNVwiLFxuXHRcdFx0XCJFdXJvcGUvVGFsbGlubnxUTVQgQ0VUIENFU1QgRUVUIE1TSyBNU0QgRUVTVHwtMUQgLTEwIC0yMCAtMjAgLTMwIC00MCAtMzB8MDEyMTAzNDIxMjEyNDU0NTQ1NDU0NTQ1NDU0NTQ2MzYzNjM2MzYzNjM2MzYzNjM2MzYzNjM2MzYzNjM2MzYzNjM2MzYzNjM2MzYzNjM2MzYzNjM2MzYzNjM2MzYzNjM2MzYzNjM2MzYzNjM2MzYzNjM2MzYzNjM2MzYzfC0yNm9ORCB0ZUQgMTFBMCAxVGEwIDRyWGwgS1NMRCAyRlgwIDJKZzAgV00wIDFmQTAgMWNNMCAxOEowIDFzVFgwIDFkYjAgMWNOMCAxZGIwIDFjTjAgMWRiMCAxZGQwIDFjTzAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNOMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8xMCAxMUEwIDFxTTAgNVFNMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwfDQxZTRcIixcblx0XHRcdFwiRXVyb3BlL1RpcmFuZXxMTVQgQ0VUIENFU1R8LTFqLmsgLTEwIC0yMHwwMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMXwtMmdsQmouayAxNHBjai5rIDVMQzAgV00wIDRNMCAxZkNLMCAxMG4wIDFvcDAgMTF6MCAxcGQwIDExejAgMXFOMCBXTDAgMXFwMCBYYjAgMXFwMCBYYjAgMXFwMCAxMXowIDFsQjAgMTF6MCAxcU4wIDExejAgMWlOMCAxNm4wIDFkZDAgMWNPMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDB8NDJlNFwiLFxuXHRcdFx0XCJFdXJvcGUvVWx5YW5vdnNrfExNVCArMDMgKzA0ICswNSArMDJ8LTNkLkEgLTMwIC00MCAtNTAgLTIwfDAxMjMyMzIzMjMyMzIzMjMyMzIxMjE0MTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyfC0yMldNMCBxSDkwIDIzQ0wwIDFkYjAgMWNOMCAxZGIwIDFjTjAgMWRiMCAxZGQwIDFjTzAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDJwQjAgMWNNMCAxZkEwIDJwQjAgSU0wIHJYMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgOEh6MCAzcmQwXCIsXG5cdFx0XHRcIkV1cm9wZS9Vemhnb3JvZHxDRVQgQ0VTVCBNU0sgTVNEIEVFVCBFRVNUfC0xMCAtMjAgLTMwIC00MCAtMjAgLTMwfDAxMDEwMTAyMzIzMjMyMzIzMjMyMzIzMjMyMDQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NHwtMWNxTDAgNmkwMCBXTTAgMWZBMCAxY00wIDFtbDAgMUNwMCAxcjNXMCAxZGIwIDFjTjAgMWRiMCAxY04wIDFkYjAgMWRkMCAxY08wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMVEwMCAxTmYwIDJwdzAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjUTAgMWNNMCAxZkEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwfDExZTRcIixcblx0XHRcdFwiRXVyb3BlL1ZpZW5uYXxDRVQgQ0VTVHwtMTAgLTIwfDAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTB8LTJhRmUwIDExZDAgMWlPMCAxMUEwIDFvMDAgMTFBMCAzS00wIDE0bzAgTEEwMCA2aTAwIFdNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDQwMCAycU0wIDFhMDAgMWNNMCAxY00wIDFpbzAgMTdjMCAxZ0hhMCAxOVgwIDFjUDAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDB8MThlNVwiLFxuXHRcdFx0XCJFdXJvcGUvVmlsbml1c3xXTVQgS01UIENFVCBFRVQgTVNLIENFU1QgTVNEIEVFU1R8LTFvIC0xei5BIC0xMCAtMjAgLTMwIC0yMCAtNDAgLTMwfDAxMjMyNDUyNTI1NDY0NjQ2NDY0NjQ2NDY0NjQ3MzczNzM3MzczNzM3MzczNzM1MjUzNzM3MzczNzM3MzczNzM3MzczNzM3MzczNzM3MzczNzM3MzczNzM3MzczNzM3MzczNzM3MzczNzM3MzczNzM3MzczNzM3M3wtMjkzZG8gNklMTS5vIDFPb3ouQSB6ejAgTWZkMCAyOVcwIDNpczAgV00wIDFmQTAgMWNNMCBMVjAgMXRnTDAgMWRiMCAxY04wIDFkYjAgMWNOMCAxZGIwIDFkZDAgMWNPMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY04wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMW8wMCAxMUEwIDFvMDAgMTFCMCAxbzAwIDExQTAgMXFNMCA4aW8wIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMHw1NGU0XCIsXG5cdFx0XHRcIkV1cm9wZS9Wb2xnb2dyYWR8TE1UICswMyArMDQgKzA1fC0yVi5FIC0zMCAtNDAgLTUwfDAxMjMyMzIzMjMyMzIzMjMyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxfC0yMUlxVi5FIHBzTFYuRSAyM0NMMCAxZGIwIDFjTjAgMWRiMCAxY04wIDFkYjAgMWRkMCAxY08wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDJwQjAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDNDbzAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCA4SHowfDEwZTVcIixcblx0XHRcdFwiRXVyb3BlL1dhcnNhd3xXTVQgQ0VUIENFU1QgRUVUIEVFU1R8LTFvIC0xMCAtMjAgLTIwIC0zMHwwMTIxMjEyMzQzMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjF8LTJjdGRvIDFMWG8gMTFkMCAxaU8wIDExQTAgMW8wMCAxMUEwIDFvbjAgMTFBMCA2enkwIEhXUDAgNUlNMCBXTTAgMWZBMCAxY00wIDFkejAgMW1MMCAxZW4wIDE1QjAgMWFxMCAxbkEwIDExQTAgMWlvMCAxN2MwIDFmQTAgMWEwMCBpRFgwIExBMCAxY00wIDFjTTAgMUMwMCBPbzAgMWNNMCAxY00wIDF6YzAgT28wIDF6YzAgT28wIDF6YzAgT28wIDFDMDAgTEEwIHVzbzAgMWEwMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFmQTAgMWEwMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNOMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwfDE3ZTVcIixcblx0XHRcdFwiRXVyb3BlL1phcG9yb3poeWV8KzAyMjAgRUVUIE1TSyBDRVNUIENFVCBNU0QgRUVTVHwtMmsgLTIwIC0zMCAtMjAgLTEwIC00MCAtMzB8MDEyMzQzNDI1MjUyNTI1MjUyNTI1MjUyNTI1MjYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjE2MTYxNjF8LTFQYzJrIGVVb2sgcmRiMCAyUkUwIFdNMCAxZkEwIDhtMCAxdjlhMCAxZGIwIDFjTjAgMWRiMCAxY04wIDFkYjAgMWRkMCAxY08wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNLMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY1EwIDFjTTAgMWZBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMHw3N2U0XCIsXG5cdFx0XHRcIkhTVHxIU1R8YTB8MHxcIixcblx0XHRcdFwiSW5kaWFuL0NoYWdvc3xMTVQgKzA1ICswNnwtNE4uRSAtNTAgLTYwfDAxMnwtMnhvc04uRSAzQUdMTi5FfDMwZTJcIixcblx0XHRcdFwiSW5kaWFuL0NvY29zfCswNjMwfC02dXwwfHw1OTZcIixcblx0XHRcdFwiSW5kaWFuL0tlcmd1ZWxlbnwtMDAgKzA1fDAgLTUwfDAxfC1NRzAwfDEzMFwiLFxuXHRcdFx0XCJJbmRpYW4vTWFoZXxMTVQgKzA0fC0zRi5NIC00MHwwMXwtMnlPM0YuTXw3OWUzXCIsXG5cdFx0XHRcIkluZGlhbi9NYWxkaXZlc3xNTVQgKzA1fC00UyAtNTB8MDF8LW9sZ1N8MzVlNFwiLFxuXHRcdFx0XCJJbmRpYW4vTWF1cml0aXVzfExNVCArMDQgKzA1fC0zTyAtNDAgLTUwfDAxMjEyMXwtMnhvck8gMzR1bk8gMTRMMCAxMmtyMCAxMXowfDE1ZTRcIixcblx0XHRcdFwiSW5kaWFuL1JldW5pb258TE1UICswNHwtM0YuUSAtNDB8MDF8LTJtRERGLlF8ODRlNFwiLFxuXHRcdFx0XCJQYWNpZmljL0t3YWphbGVpbnwrMTEgLTEyICsxMnwtYjAgYzAgLWMwfDAxMnwtQVgwIFc5WDB8MTRlM1wiLFxuXHRcdFx0XCJNRVR8TUVUIE1FU1R8LTEwIC0yMHwwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMHwtMmFGZTAgMTFkMCAxaU8wIDExQTAgMW8wMCAxMUEwIFFyYzAgNmkwMCBXTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxNk0wIDFnTU0wIDFhMDAgMWZBMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFhMDAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMFwiLFxuXHRcdFx0XCJNU1R8TVNUfDcwfDB8XCIsXG5cdFx0XHRcIk1TVDdNRFR8TVNUIE1EVCBNV1QgTVBUfDcwIDYwIDYwIDYwfDAxMDEwMjMwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMHwtMjYxcjAgMW5YMCAxMUIwIDFuWDAgU2dOMCA4eDIwIGl4MCBRd04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxZnowIDFjTjAgMWNMMCAxY04wIDFjTDAgczEwIDFWejAgTEIwIDFCWDAgMWNOMCAxZnowIDFhMTAgMWZ6MCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxZnowIDFhMTAgMWZ6MCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTRwMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwXCIsXG5cdFx0XHRcIlBhY2lmaWMvQ2hhdGhhbXwrMTIxNSArMTI0NSArMTM0NXwtY2YgLWNKIC1kSnwwMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTJ8LVdxQWYgMWFkZWYgSU0wIDFDMDAgUmMwIDF6YzAgT28wIDF6YzAgT28wIDF6YzAgT28wIDF6YzAgT28wIDF6YzAgT28wIDF6YzAgUmMwIDF6YzAgT28wIDF6YzAgT28wIDF6YzAgT28wIDF6YzAgT28wIDF6YzAgT28wIDF6YzAgUmMwIDF6YzAgT28wIDFxTTAgMTRvMCAxbGMwIDE0bzAgMWxjMCAxNG8wIDFsYzAgMTdjMCAxaW8wIDE3YzAgMWlvMCAxN2MwIDFpbzAgMTdjMCAxbGMwIDE0bzAgMWxjMCAxNG8wIDFsYzAgMTdjMCAxaW8wIDE3YzAgMWlvMCAxN2MwIDFsYzAgMTRvMCAxbGMwIDE0bzAgMWxjMCAxN2MwIDFpbzAgMTdjMCAxaW8wIDE3YzAgMWlvMCAxN2MwIDFpbzAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWNNMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWNNMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFpbzAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxY00wIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxY00wIDFmQTAgMWEwMCAxZkEwIDFhMDB8NjAwXCIsXG5cdFx0XHRcIlBhY2lmaWMvQXBpYXxMTVQgLTExMzAgLTExIC0xMCArMTQgKzEzfGJxLlUgYnUgYjAgYTAgLWUwIC1kMHwwMTIzMjM0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NHwtMm5ETXguNCAxeVcwMy40IDJyUmJ1IDFmZjAgMWEwMCBDSTAgQVEwIDFjTTAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFjTTAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxaW8wIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWNNMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWNNMCAxZkEwIDFhMDAgMWZBMCAxYTAwfDM3ZTNcIixcblx0XHRcdFwiUGFjaWZpYy9Cb3VnYWludmlsbGV8KzEwICswOSArMTF8LWEwIC05MCAtYjB8MDEwMnwtMTZXeTAgN0NOMCAyTVFwMHwxOGU0XCIsXG5cdFx0XHRcIlBhY2lmaWMvRWZhdGV8TE1UICsxMSArMTJ8LWJkLmcgLWIwIC1jMHwwMTIxMjEyMTIxMjEyMTIxMjEyMTIxfC0ybDluZC5nIDJTemNkLmcgMWNMMCAxb04wIDEwTDAgMWZCMCAxOVgwIDFmQjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWZCMCBMejAgMU5kMCBBbjB8NjZlM1wiLFxuXHRcdFx0XCJQYWNpZmljL0VuZGVyYnVyeXwtMTIgLTExICsxM3xjMCBiMCAtZDB8MDEyfG5JYzAgQjdYMHwxXCIsXG5cdFx0XHRcIlBhY2lmaWMvRmFrYW9mb3wtMTEgKzEzfGIwIC1kMHwwMXwxR2ZuMHw0ODNcIixcblx0XHRcdFwiUGFjaWZpYy9GaWppfExNVCArMTIgKzEzfC1iVC5JIC1jMCAtZDB8MDEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMXwtMmJVelQuSSAzbThOVC5JIExBMCAxRU0wIElNMCBuSmMwIExBMCAxbzAwIFJjMCAxd28wIEFvMCAxTmMwIEFvMCAxUTAwIHh6MCAxU04wIHVNMCAxU00wIHVNMCAxVkEwIHMwMCAxVkEwIHMwMCAxVkEwIHVNMCAxU00wIHVNMCAxU00wIHVNMCAxVkEwIHMwMCAxVkEwIHMwMCAxVkEwIHMwMCAxVkEwIHVNMCAxU00wIHVNMCAxU00wIHVNMCAxVkEwIHMwMCAxVkEwIHMwMCAxVkEwIHVNMCAxU00wIHVNMCAxU00wIHVNMCAxVkEwIHMwMCAxVkEwIHMwMCAxVkEwIHMwMCAxVkEwIHVNMCAxU00wIHVNMCAxU00wIHVNMHw4OGU0XCIsXG5cdFx0XHRcIlBhY2lmaWMvR2FsYXBhZ29zfExNVCAtMDUgLTA2fDVXLm8gNTAgNjB8MDEyMTJ8LTF5VlMxLkEgMmRUejEuQSBnTmQwIHJ6MHwyNWUzXCIsXG5cdFx0XHRcIlBhY2lmaWMvR2FtYmllcnxMTVQgLTA5fDhYLk0gOTB8MDF8LTJqb2YwLmN8MTI1XCIsXG5cdFx0XHRcIlBhY2lmaWMvR3VhZGFsY2FuYWx8TE1UICsxMXwtYUQuTSAtYjB8MDF8LTJqb3lELk18MTFlNFwiLFxuXHRcdFx0XCJQYWNpZmljL0d1YW18R1NUIENoU1R8LWEwIC1hMHwwMXwxZnBxMHwxN2U0XCIsXG5cdFx0XHRcIlBhY2lmaWMvSG9ub2x1bHV8SFNUIEhEVCBIU1R8YXUgOXUgYTB8MDEwMTAyfC0xdGhMdSA4eDAgbGVmMCA4UHowIDQ2cDB8MzdlNFwiLFxuXHRcdFx0XCJQYWNpZmljL0tpcml0aW1hdGl8LTEwNDAgLTEwICsxNHxhRSBhMCAtZTB8MDEyfG5JYUUgQjdYa3w1MWUyXCIsXG5cdFx0XHRcIlBhY2lmaWMvS29zcmFlfCsxMSArMTJ8LWIwIC1jMHwwMTB8LUFYMCAxYmR6MHw2NmUyXCIsXG5cdFx0XHRcIlBhY2lmaWMvTWFqdXJvfCsxMSArMTJ8LWIwIC1jMHwwMXwtQVgwfDI4ZTNcIixcblx0XHRcdFwiUGFjaWZpYy9NYXJxdWVzYXN8TE1UIC0wOTMwfDlpIDl1fDAxfC0yam9lR3w4NmUyXCIsXG5cdFx0XHRcIlBhY2lmaWMvUGFnb19QYWdvfExNVCBTU1R8Ym0uTSBiMHwwMXwtMm5ETUIuY3wzN2UyXCIsXG5cdFx0XHRcIlBhY2lmaWMvTmF1cnV8TE1UICsxMTMwICswOSArMTJ8LWI3LkUgLWJ1IC05MCAtYzB8MDEyMTN8LTFYZG43LkUgUHZ6Qi5FIDVSQ3UgMW91SnV8MTBlM1wiLFxuXHRcdFx0XCJQYWNpZmljL05pdWV8LTExMjAgLTExMzAgLTExfGJrIGJ1IGIwfDAxMnwtS2ZNRSAxN3kwYXwxMmUyXCIsXG5cdFx0XHRcIlBhY2lmaWMvTm9yZm9sa3wrMTExMiArMTEzMCArMTIzMCArMTF8LWJjIC1idSAtY3UgLWIwfDAxMjEzfC1LZ2JjIFcwMUcgT24wIDFDT3AwfDI1ZTRcIixcblx0XHRcdFwiUGFjaWZpYy9Ob3VtZWF8TE1UICsxMSArMTJ8LWI1Lk0gLWIwIC1jMHwwMTIxMjEyMXwtMmw5bjUuTSAyRXFNNS5NIHhYMCAxUEIwIHluMCBIZVAwIEFvMHw5OGUzXCIsXG5cdFx0XHRcIlBhY2lmaWMvUGl0Y2Fpcm58LTA4MzAgLTA4fDh1IDgwfDAxfDE4Vmt1fDU2XCIsXG5cdFx0XHRcIlBhY2lmaWMvUmFyb3RvbmdhfC0xMDMwIC0wOTMwIC0xMHxhdSA5dSBhMHwwMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTJ8bHlXdSBJTDAgMXpjdSBPbnUgMXpjdSBPbnUgMXpjdSBSYnUgMXpjdSBPbnUgMXpjdSBPbnUgMXpjdSBPbnUgMXpjdSBPbnUgMXpjdSBPbnUgMXpjdSBSYnUgMXpjdSBPbnUgMXpjdSBPbnUgMXpjdSBPbnV8MTNlM1wiLFxuXHRcdFx0XCJQYWNpZmljL1RhaGl0aXxMTVQgLTEwfDlXLmcgYTB8MDF8LTJqb2UxLkl8MThlNFwiLFxuXHRcdFx0XCJQYWNpZmljL1RvbmdhdGFwdXwrMTIyMCArMTMgKzE0fC1jayAtZDAgLWUwfDAxMjEyMTIxMjF8LTFhQjBrIDJuNWRrIDE1QTAgMXdvMCB4ejAgMVExMCB4ejAgeldOMCBzMDB8NzVlM1wiLFxuXHRcdFx0XCJQU1Q4UERUfFBTVCBQRFQgUFdUIFBQVHw4MCA3MCA3MCA3MHwwMTAxMDIzMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTB8LTI2MXEwIDFuWDAgMTFCMCAxblgwIFNnTjAgOHgxMCBpeTAgUXdOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWZ6MCAxY04wIDFjTDAgMWNOMCAxY0wwIHMxMCAxVnowIExCMCAxQlgwIDFjTjAgMWZ6MCAxYTEwIDFmejAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWZ6MCAxYTEwIDFmejAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTRwMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTRwMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMFwiLFxuXHRcdFx0XCJXRVR8V0VUIFdFU1R8MCAtMTB8MDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwfGhEQjAgMWEwMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFmQTAgMWEwMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwXCJcblx0XHRdLFxuXHRcdFwibGlua3NcIjogW1xuXHRcdFx0XCJBZnJpY2EvQWJpZGphbnxBZnJpY2EvQmFtYWtvXCIsXG5cdFx0XHRcIkFmcmljYS9BYmlkamFufEFmcmljYS9CYW5qdWxcIixcblx0XHRcdFwiQWZyaWNhL0FiaWRqYW58QWZyaWNhL0NvbmFrcnlcIixcblx0XHRcdFwiQWZyaWNhL0FiaWRqYW58QWZyaWNhL0Rha2FyXCIsXG5cdFx0XHRcIkFmcmljYS9BYmlkamFufEFmcmljYS9GcmVldG93blwiLFxuXHRcdFx0XCJBZnJpY2EvQWJpZGphbnxBZnJpY2EvTG9tZVwiLFxuXHRcdFx0XCJBZnJpY2EvQWJpZGphbnxBZnJpY2EvTm91YWtjaG90dFwiLFxuXHRcdFx0XCJBZnJpY2EvQWJpZGphbnxBZnJpY2EvT3VhZ2Fkb3Vnb3VcIixcblx0XHRcdFwiQWZyaWNhL0FiaWRqYW58QWZyaWNhL1RpbWJ1a3R1XCIsXG5cdFx0XHRcIkFmcmljYS9BYmlkamFufEF0bGFudGljL1N0X0hlbGVuYVwiLFxuXHRcdFx0XCJBZnJpY2EvQ2Fpcm98RWd5cHRcIixcblx0XHRcdFwiQWZyaWNhL0pvaGFubmVzYnVyZ3xBZnJpY2EvTWFzZXJ1XCIsXG5cdFx0XHRcIkFmcmljYS9Kb2hhbm5lc2J1cmd8QWZyaWNhL01iYWJhbmVcIixcblx0XHRcdFwiQWZyaWNhL0xhZ29zfEFmcmljYS9CYW5ndWlcIixcblx0XHRcdFwiQWZyaWNhL0xhZ29zfEFmcmljYS9CcmF6emF2aWxsZVwiLFxuXHRcdFx0XCJBZnJpY2EvTGFnb3N8QWZyaWNhL0RvdWFsYVwiLFxuXHRcdFx0XCJBZnJpY2EvTGFnb3N8QWZyaWNhL0tpbnNoYXNhXCIsXG5cdFx0XHRcIkFmcmljYS9MYWdvc3xBZnJpY2EvTGlicmV2aWxsZVwiLFxuXHRcdFx0XCJBZnJpY2EvTGFnb3N8QWZyaWNhL0x1YW5kYVwiLFxuXHRcdFx0XCJBZnJpY2EvTGFnb3N8QWZyaWNhL01hbGFib1wiLFxuXHRcdFx0XCJBZnJpY2EvTGFnb3N8QWZyaWNhL05pYW1leVwiLFxuXHRcdFx0XCJBZnJpY2EvTGFnb3N8QWZyaWNhL1BvcnRvLU5vdm9cIixcblx0XHRcdFwiQWZyaWNhL01hcHV0b3xBZnJpY2EvQmxhbnR5cmVcIixcblx0XHRcdFwiQWZyaWNhL01hcHV0b3xBZnJpY2EvQnVqdW1idXJhXCIsXG5cdFx0XHRcIkFmcmljYS9NYXB1dG98QWZyaWNhL0dhYm9yb25lXCIsXG5cdFx0XHRcIkFmcmljYS9NYXB1dG98QWZyaWNhL0hhcmFyZVwiLFxuXHRcdFx0XCJBZnJpY2EvTWFwdXRvfEFmcmljYS9LaWdhbGlcIixcblx0XHRcdFwiQWZyaWNhL01hcHV0b3xBZnJpY2EvTHVidW1iYXNoaVwiLFxuXHRcdFx0XCJBZnJpY2EvTWFwdXRvfEFmcmljYS9MdXNha2FcIixcblx0XHRcdFwiQWZyaWNhL05haXJvYml8QWZyaWNhL0FkZGlzX0FiYWJhXCIsXG5cdFx0XHRcIkFmcmljYS9OYWlyb2JpfEFmcmljYS9Bc21hcmFcIixcblx0XHRcdFwiQWZyaWNhL05haXJvYml8QWZyaWNhL0FzbWVyYVwiLFxuXHRcdFx0XCJBZnJpY2EvTmFpcm9iaXxBZnJpY2EvRGFyX2VzX1NhbGFhbVwiLFxuXHRcdFx0XCJBZnJpY2EvTmFpcm9iaXxBZnJpY2EvRGppYm91dGlcIixcblx0XHRcdFwiQWZyaWNhL05haXJvYml8QWZyaWNhL0thbXBhbGFcIixcblx0XHRcdFwiQWZyaWNhL05haXJvYml8QWZyaWNhL01vZ2FkaXNodVwiLFxuXHRcdFx0XCJBZnJpY2EvTmFpcm9iaXxJbmRpYW4vQW50YW5hbmFyaXZvXCIsXG5cdFx0XHRcIkFmcmljYS9OYWlyb2JpfEluZGlhbi9Db21vcm9cIixcblx0XHRcdFwiQWZyaWNhL05haXJvYml8SW5kaWFuL01heW90dGVcIixcblx0XHRcdFwiQWZyaWNhL1RyaXBvbGl8TGlieWFcIixcblx0XHRcdFwiQW1lcmljYS9BZGFrfEFtZXJpY2EvQXRrYVwiLFxuXHRcdFx0XCJBbWVyaWNhL0FkYWt8VVMvQWxldXRpYW5cIixcblx0XHRcdFwiQW1lcmljYS9BbmNob3JhZ2V8VVMvQWxhc2thXCIsXG5cdFx0XHRcIkFtZXJpY2EvQXJnZW50aW5hL0J1ZW5vc19BaXJlc3xBbWVyaWNhL0J1ZW5vc19BaXJlc1wiLFxuXHRcdFx0XCJBbWVyaWNhL0FyZ2VudGluYS9DYXRhbWFyY2F8QW1lcmljYS9BcmdlbnRpbmEvQ29tb2RSaXZhZGF2aWFcIixcblx0XHRcdFwiQW1lcmljYS9BcmdlbnRpbmEvQ2F0YW1hcmNhfEFtZXJpY2EvQ2F0YW1hcmNhXCIsXG5cdFx0XHRcIkFtZXJpY2EvQXJnZW50aW5hL0NvcmRvYmF8QW1lcmljYS9Db3Jkb2JhXCIsXG5cdFx0XHRcIkFtZXJpY2EvQXJnZW50aW5hL0NvcmRvYmF8QW1lcmljYS9Sb3NhcmlvXCIsXG5cdFx0XHRcIkFtZXJpY2EvQXJnZW50aW5hL0p1anV5fEFtZXJpY2EvSnVqdXlcIixcblx0XHRcdFwiQW1lcmljYS9BcmdlbnRpbmEvTWVuZG96YXxBbWVyaWNhL01lbmRvemFcIixcblx0XHRcdFwiQW1lcmljYS9BdGlrb2thbnxBbWVyaWNhL0NvcmFsX0hhcmJvdXJcIixcblx0XHRcdFwiQW1lcmljYS9DaGljYWdvfFVTL0NlbnRyYWxcIixcblx0XHRcdFwiQW1lcmljYS9DdXJhY2FvfEFtZXJpY2EvQXJ1YmFcIixcblx0XHRcdFwiQW1lcmljYS9DdXJhY2FvfEFtZXJpY2EvS3JhbGVuZGlqa1wiLFxuXHRcdFx0XCJBbWVyaWNhL0N1cmFjYW98QW1lcmljYS9Mb3dlcl9QcmluY2VzXCIsXG5cdFx0XHRcIkFtZXJpY2EvRGVudmVyfEFtZXJpY2EvU2hpcHJvY2tcIixcblx0XHRcdFwiQW1lcmljYS9EZW52ZXJ8TmF2YWpvXCIsXG5cdFx0XHRcIkFtZXJpY2EvRGVudmVyfFVTL01vdW50YWluXCIsXG5cdFx0XHRcIkFtZXJpY2EvRGV0cm9pdHxVUy9NaWNoaWdhblwiLFxuXHRcdFx0XCJBbWVyaWNhL0VkbW9udG9ufENhbmFkYS9Nb3VudGFpblwiLFxuXHRcdFx0XCJBbWVyaWNhL0ZvcnRfV2F5bmV8QW1lcmljYS9JbmRpYW5hL0luZGlhbmFwb2xpc1wiLFxuXHRcdFx0XCJBbWVyaWNhL0ZvcnRfV2F5bmV8QW1lcmljYS9JbmRpYW5hcG9saXNcIixcblx0XHRcdFwiQW1lcmljYS9Gb3J0X1dheW5lfFVTL0Vhc3QtSW5kaWFuYVwiLFxuXHRcdFx0XCJBbWVyaWNhL0hhbGlmYXh8Q2FuYWRhL0F0bGFudGljXCIsXG5cdFx0XHRcIkFtZXJpY2EvSGF2YW5hfEN1YmFcIixcblx0XHRcdFwiQW1lcmljYS9JbmRpYW5hL0tub3h8QW1lcmljYS9Lbm94X0lOXCIsXG5cdFx0XHRcIkFtZXJpY2EvSW5kaWFuYS9Lbm94fFVTL0luZGlhbmEtU3RhcmtlXCIsXG5cdFx0XHRcIkFtZXJpY2EvSmFtYWljYXxKYW1haWNhXCIsXG5cdFx0XHRcIkFtZXJpY2EvS2VudHVja3kvTG91aXN2aWxsZXxBbWVyaWNhL0xvdWlzdmlsbGVcIixcblx0XHRcdFwiQW1lcmljYS9Mb3NfQW5nZWxlc3xVUy9QYWNpZmljXCIsXG5cdFx0XHRcIkFtZXJpY2EvTG9zX0FuZ2VsZXN8VVMvUGFjaWZpYy1OZXdcIixcblx0XHRcdFwiQW1lcmljYS9NYW5hdXN8QnJhemlsL1dlc3RcIixcblx0XHRcdFwiQW1lcmljYS9NYXphdGxhbnxNZXhpY28vQmFqYVN1clwiLFxuXHRcdFx0XCJBbWVyaWNhL01leGljb19DaXR5fE1leGljby9HZW5lcmFsXCIsXG5cdFx0XHRcIkFtZXJpY2EvTmV3X1lvcmt8VVMvRWFzdGVyblwiLFxuXHRcdFx0XCJBbWVyaWNhL05vcm9uaGF8QnJhemlsL0RlTm9yb25oYVwiLFxuXHRcdFx0XCJBbWVyaWNhL1BhbmFtYXxBbWVyaWNhL0NheW1hblwiLFxuXHRcdFx0XCJBbWVyaWNhL1Bob2VuaXh8VVMvQXJpem9uYVwiLFxuXHRcdFx0XCJBbWVyaWNhL1BvcnRfb2ZfU3BhaW58QW1lcmljYS9Bbmd1aWxsYVwiLFxuXHRcdFx0XCJBbWVyaWNhL1BvcnRfb2ZfU3BhaW58QW1lcmljYS9BbnRpZ3VhXCIsXG5cdFx0XHRcIkFtZXJpY2EvUG9ydF9vZl9TcGFpbnxBbWVyaWNhL0RvbWluaWNhXCIsXG5cdFx0XHRcIkFtZXJpY2EvUG9ydF9vZl9TcGFpbnxBbWVyaWNhL0dyZW5hZGFcIixcblx0XHRcdFwiQW1lcmljYS9Qb3J0X29mX1NwYWlufEFtZXJpY2EvR3VhZGVsb3VwZVwiLFxuXHRcdFx0XCJBbWVyaWNhL1BvcnRfb2ZfU3BhaW58QW1lcmljYS9NYXJpZ290XCIsXG5cdFx0XHRcIkFtZXJpY2EvUG9ydF9vZl9TcGFpbnxBbWVyaWNhL01vbnRzZXJyYXRcIixcblx0XHRcdFwiQW1lcmljYS9Qb3J0X29mX1NwYWlufEFtZXJpY2EvU3RfQmFydGhlbGVteVwiLFxuXHRcdFx0XCJBbWVyaWNhL1BvcnRfb2ZfU3BhaW58QW1lcmljYS9TdF9LaXR0c1wiLFxuXHRcdFx0XCJBbWVyaWNhL1BvcnRfb2ZfU3BhaW58QW1lcmljYS9TdF9MdWNpYVwiLFxuXHRcdFx0XCJBbWVyaWNhL1BvcnRfb2ZfU3BhaW58QW1lcmljYS9TdF9UaG9tYXNcIixcblx0XHRcdFwiQW1lcmljYS9Qb3J0X29mX1NwYWlufEFtZXJpY2EvU3RfVmluY2VudFwiLFxuXHRcdFx0XCJBbWVyaWNhL1BvcnRfb2ZfU3BhaW58QW1lcmljYS9Ub3J0b2xhXCIsXG5cdFx0XHRcIkFtZXJpY2EvUG9ydF9vZl9TcGFpbnxBbWVyaWNhL1ZpcmdpblwiLFxuXHRcdFx0XCJBbWVyaWNhL1JlZ2luYXxDYW5hZGEvU2Fza2F0Y2hld2FuXCIsXG5cdFx0XHRcIkFtZXJpY2EvUmlvX0JyYW5jb3xBbWVyaWNhL1BvcnRvX0FjcmVcIixcblx0XHRcdFwiQW1lcmljYS9SaW9fQnJhbmNvfEJyYXppbC9BY3JlXCIsXG5cdFx0XHRcIkFtZXJpY2EvU2FudGlhZ298Q2hpbGUvQ29udGluZW50YWxcIixcblx0XHRcdFwiQW1lcmljYS9TYW9fUGF1bG98QnJhemlsL0Vhc3RcIixcblx0XHRcdFwiQW1lcmljYS9TdF9Kb2huc3xDYW5hZGEvTmV3Zm91bmRsYW5kXCIsXG5cdFx0XHRcIkFtZXJpY2EvVGlqdWFuYXxBbWVyaWNhL0Vuc2VuYWRhXCIsXG5cdFx0XHRcIkFtZXJpY2EvVGlqdWFuYXxBbWVyaWNhL1NhbnRhX0lzYWJlbFwiLFxuXHRcdFx0XCJBbWVyaWNhL1RpanVhbmF8TWV4aWNvL0JhamFOb3J0ZVwiLFxuXHRcdFx0XCJBbWVyaWNhL1Rvcm9udG98QW1lcmljYS9Nb250cmVhbFwiLFxuXHRcdFx0XCJBbWVyaWNhL1Rvcm9udG98Q2FuYWRhL0Vhc3Rlcm5cIixcblx0XHRcdFwiQW1lcmljYS9WYW5jb3V2ZXJ8Q2FuYWRhL1BhY2lmaWNcIixcblx0XHRcdFwiQW1lcmljYS9XaGl0ZWhvcnNlfENhbmFkYS9ZdWtvblwiLFxuXHRcdFx0XCJBbWVyaWNhL1dpbm5pcGVnfENhbmFkYS9DZW50cmFsXCIsXG5cdFx0XHRcIkFzaWEvQXNoZ2FiYXR8QXNpYS9Bc2hraGFiYWRcIixcblx0XHRcdFwiQXNpYS9CYW5na29rfEFzaWEvUGhub21fUGVuaFwiLFxuXHRcdFx0XCJBc2lhL0Jhbmdrb2t8QXNpYS9WaWVudGlhbmVcIixcblx0XHRcdFwiQXNpYS9EaGFrYXxBc2lhL0RhY2NhXCIsXG5cdFx0XHRcIkFzaWEvRHViYWl8QXNpYS9NdXNjYXRcIixcblx0XHRcdFwiQXNpYS9Ib19DaGlfTWluaHxBc2lhL1NhaWdvblwiLFxuXHRcdFx0XCJBc2lhL0hvbmdfS29uZ3xIb25na29uZ1wiLFxuXHRcdFx0XCJBc2lhL0plcnVzYWxlbXxBc2lhL1RlbF9Bdml2XCIsXG5cdFx0XHRcIkFzaWEvSmVydXNhbGVtfElzcmFlbFwiLFxuXHRcdFx0XCJBc2lhL0thdGhtYW5kdXxBc2lhL0thdG1hbmR1XCIsXG5cdFx0XHRcIkFzaWEvS29sa2F0YXxBc2lhL0NhbGN1dHRhXCIsXG5cdFx0XHRcIkFzaWEvS3VhbGFfTHVtcHVyfEFzaWEvU2luZ2Fwb3JlXCIsXG5cdFx0XHRcIkFzaWEvS3VhbGFfTHVtcHVyfFNpbmdhcG9yZVwiLFxuXHRcdFx0XCJBc2lhL01hY2F1fEFzaWEvTWFjYW9cIixcblx0XHRcdFwiQXNpYS9NYWthc3NhcnxBc2lhL1VqdW5nX1BhbmRhbmdcIixcblx0XHRcdFwiQXNpYS9OaWNvc2lhfEV1cm9wZS9OaWNvc2lhXCIsXG5cdFx0XHRcIkFzaWEvUWF0YXJ8QXNpYS9CYWhyYWluXCIsXG5cdFx0XHRcIkFzaWEvUmFuZ29vbnxBc2lhL1lhbmdvblwiLFxuXHRcdFx0XCJBc2lhL1JpeWFkaHxBc2lhL0FkZW5cIixcblx0XHRcdFwiQXNpYS9SaXlhZGh8QXNpYS9LdXdhaXRcIixcblx0XHRcdFwiQXNpYS9TZW91bHxST0tcIixcblx0XHRcdFwiQXNpYS9TaGFuZ2hhaXxBc2lhL0Nob25ncWluZ1wiLFxuXHRcdFx0XCJBc2lhL1NoYW5naGFpfEFzaWEvQ2h1bmdraW5nXCIsXG5cdFx0XHRcIkFzaWEvU2hhbmdoYWl8QXNpYS9IYXJiaW5cIixcblx0XHRcdFwiQXNpYS9TaGFuZ2hhaXxQUkNcIixcblx0XHRcdFwiQXNpYS9UYWlwZWl8Uk9DXCIsXG5cdFx0XHRcIkFzaWEvVGVocmFufElyYW5cIixcblx0XHRcdFwiQXNpYS9UaGltcGh1fEFzaWEvVGhpbWJ1XCIsXG5cdFx0XHRcIkFzaWEvVG9reW98SmFwYW5cIixcblx0XHRcdFwiQXNpYS9VbGFhbmJhYXRhcnxBc2lhL1VsYW5fQmF0b3JcIixcblx0XHRcdFwiQXNpYS9VcnVtcWl8QXNpYS9LYXNoZ2FyXCIsXG5cdFx0XHRcIkF0bGFudGljL0Zhcm9lfEF0bGFudGljL0ZhZXJvZVwiLFxuXHRcdFx0XCJBdGxhbnRpYy9SZXlramF2aWt8SWNlbGFuZFwiLFxuXHRcdFx0XCJBdGxhbnRpYy9Tb3V0aF9HZW9yZ2lhfEV0Yy9HTVQrMlwiLFxuXHRcdFx0XCJBdXN0cmFsaWEvQWRlbGFpZGV8QXVzdHJhbGlhL1NvdXRoXCIsXG5cdFx0XHRcIkF1c3RyYWxpYS9CcmlzYmFuZXxBdXN0cmFsaWEvUXVlZW5zbGFuZFwiLFxuXHRcdFx0XCJBdXN0cmFsaWEvQnJva2VuX0hpbGx8QXVzdHJhbGlhL1lhbmNvd2lubmFcIixcblx0XHRcdFwiQXVzdHJhbGlhL0RhcndpbnxBdXN0cmFsaWEvTm9ydGhcIixcblx0XHRcdFwiQXVzdHJhbGlhL0hvYmFydHxBdXN0cmFsaWEvVGFzbWFuaWFcIixcblx0XHRcdFwiQXVzdHJhbGlhL0xvcmRfSG93ZXxBdXN0cmFsaWEvTEhJXCIsXG5cdFx0XHRcIkF1c3RyYWxpYS9NZWxib3VybmV8QXVzdHJhbGlhL1ZpY3RvcmlhXCIsXG5cdFx0XHRcIkF1c3RyYWxpYS9QZXJ0aHxBdXN0cmFsaWEvV2VzdFwiLFxuXHRcdFx0XCJBdXN0cmFsaWEvU3lkbmV5fEF1c3RyYWxpYS9BQ1RcIixcblx0XHRcdFwiQXVzdHJhbGlhL1N5ZG5leXxBdXN0cmFsaWEvQ2FuYmVycmFcIixcblx0XHRcdFwiQXVzdHJhbGlhL1N5ZG5leXxBdXN0cmFsaWEvTlNXXCIsXG5cdFx0XHRcIkV0Yy9HTVQtMHxFdGMvR01UXCIsXG5cdFx0XHRcIkV0Yy9HTVQtMHxFdGMvR01UKzBcIixcblx0XHRcdFwiRXRjL0dNVC0wfEV0Yy9HTVQwXCIsXG5cdFx0XHRcIkV0Yy9HTVQtMHxFdGMvR3JlZW53aWNoXCIsXG5cdFx0XHRcIkV0Yy9HTVQtMHxHTVRcIixcblx0XHRcdFwiRXRjL0dNVC0wfEdNVCswXCIsXG5cdFx0XHRcIkV0Yy9HTVQtMHxHTVQtMFwiLFxuXHRcdFx0XCJFdGMvR01ULTB8R01UMFwiLFxuXHRcdFx0XCJFdGMvR01ULTB8R3JlZW53aWNoXCIsXG5cdFx0XHRcIkV0Yy9VQ1R8VUNUXCIsXG5cdFx0XHRcIkV0Yy9VVEN8RXRjL1VuaXZlcnNhbFwiLFxuXHRcdFx0XCJFdGMvVVRDfEV0Yy9adWx1XCIsXG5cdFx0XHRcIkV0Yy9VVEN8VVRDXCIsXG5cdFx0XHRcIkV0Yy9VVEN8VW5pdmVyc2FsXCIsXG5cdFx0XHRcIkV0Yy9VVEN8WnVsdVwiLFxuXHRcdFx0XCJFdXJvcGUvQmVsZ3JhZGV8RXVyb3BlL0xqdWJsamFuYVwiLFxuXHRcdFx0XCJFdXJvcGUvQmVsZ3JhZGV8RXVyb3BlL1BvZGdvcmljYVwiLFxuXHRcdFx0XCJFdXJvcGUvQmVsZ3JhZGV8RXVyb3BlL1NhcmFqZXZvXCIsXG5cdFx0XHRcIkV1cm9wZS9CZWxncmFkZXxFdXJvcGUvU2tvcGplXCIsXG5cdFx0XHRcIkV1cm9wZS9CZWxncmFkZXxFdXJvcGUvWmFncmViXCIsXG5cdFx0XHRcIkV1cm9wZS9DaGlzaW5hdXxFdXJvcGUvVGlyYXNwb2xcIixcblx0XHRcdFwiRXVyb3BlL0R1YmxpbnxFaXJlXCIsXG5cdFx0XHRcIkV1cm9wZS9IZWxzaW5raXxFdXJvcGUvTWFyaWVoYW1uXCIsXG5cdFx0XHRcIkV1cm9wZS9Jc3RhbmJ1bHxBc2lhL0lzdGFuYnVsXCIsXG5cdFx0XHRcIkV1cm9wZS9Jc3RhbmJ1bHxUdXJrZXlcIixcblx0XHRcdFwiRXVyb3BlL0xpc2JvbnxQb3J0dWdhbFwiLFxuXHRcdFx0XCJFdXJvcGUvTG9uZG9ufEV1cm9wZS9CZWxmYXN0XCIsXG5cdFx0XHRcIkV1cm9wZS9Mb25kb258RXVyb3BlL0d1ZXJuc2V5XCIsXG5cdFx0XHRcIkV1cm9wZS9Mb25kb258RXVyb3BlL0lzbGVfb2ZfTWFuXCIsXG5cdFx0XHRcIkV1cm9wZS9Mb25kb258RXVyb3BlL0plcnNleVwiLFxuXHRcdFx0XCJFdXJvcGUvTG9uZG9ufEdCXCIsXG5cdFx0XHRcIkV1cm9wZS9Mb25kb258R0ItRWlyZVwiLFxuXHRcdFx0XCJFdXJvcGUvTW9zY293fFctU1VcIixcblx0XHRcdFwiRXVyb3BlL09zbG98QXJjdGljL0xvbmd5ZWFyYnllblwiLFxuXHRcdFx0XCJFdXJvcGUvT3Nsb3xBdGxhbnRpYy9KYW5fTWF5ZW5cIixcblx0XHRcdFwiRXVyb3BlL1ByYWd1ZXxFdXJvcGUvQnJhdGlzbGF2YVwiLFxuXHRcdFx0XCJFdXJvcGUvUm9tZXxFdXJvcGUvU2FuX01hcmlub1wiLFxuXHRcdFx0XCJFdXJvcGUvUm9tZXxFdXJvcGUvVmF0aWNhblwiLFxuXHRcdFx0XCJFdXJvcGUvV2Fyc2F3fFBvbGFuZFwiLFxuXHRcdFx0XCJFdXJvcGUvWnVyaWNofEV1cm9wZS9CdXNpbmdlblwiLFxuXHRcdFx0XCJFdXJvcGUvWnVyaWNofEV1cm9wZS9WYWR1elwiLFxuXHRcdFx0XCJJbmRpYW4vQ2hyaXN0bWFzfEV0Yy9HTVQtN1wiLFxuXHRcdFx0XCJQYWNpZmljL0F1Y2tsYW5kfEFudGFyY3RpY2EvTWNNdXJkb1wiLFxuXHRcdFx0XCJQYWNpZmljL0F1Y2tsYW5kfEFudGFyY3RpY2EvU291dGhfUG9sZVwiLFxuXHRcdFx0XCJQYWNpZmljL0F1Y2tsYW5kfE5aXCIsXG5cdFx0XHRcIlBhY2lmaWMvQ2hhdGhhbXxOWi1DSEFUXCIsXG5cdFx0XHRcIlBhY2lmaWMvRWFzdGVyfENoaWxlL0Vhc3RlcklzbGFuZFwiLFxuXHRcdFx0XCJQYWNpZmljL0d1YW18UGFjaWZpYy9TYWlwYW5cIixcblx0XHRcdFwiUGFjaWZpYy9Ib25vbHVsdXxQYWNpZmljL0pvaG5zdG9uXCIsXG5cdFx0XHRcIlBhY2lmaWMvSG9ub2x1bHV8VVMvSGF3YWlpXCIsXG5cdFx0XHRcIlBhY2lmaWMvS3dhamFsZWlufEt3YWphbGVpblwiLFxuXHRcdFx0XCJQYWNpZmljL1BhZ29fUGFnb3xQYWNpZmljL01pZHdheVwiLFxuXHRcdFx0XCJQYWNpZmljL1BhZ29fUGFnb3xQYWNpZmljL1NhbW9hXCIsXG5cdFx0XHRcIlBhY2lmaWMvUGFnb19QYWdvfFVTL1NhbW9hXCIsXG5cdFx0XHRcIlBhY2lmaWMvUGFsYXV8RXRjL0dNVC05XCIsXG5cdFx0XHRcIlBhY2lmaWMvUG9obnBlaXxFdGMvR01ULTExXCIsXG5cdFx0XHRcIlBhY2lmaWMvUG9obnBlaXxQYWNpZmljL1BvbmFwZVwiLFxuXHRcdFx0XCJQYWNpZmljL1BvcnRfTW9yZXNieXxFdGMvR01ULTEwXCIsXG5cdFx0XHRcIlBhY2lmaWMvUG9ydF9Nb3Jlc2J5fFBhY2lmaWMvQ2h1dWtcIixcblx0XHRcdFwiUGFjaWZpYy9Qb3J0X01vcmVzYnl8UGFjaWZpYy9UcnVrXCIsXG5cdFx0XHRcIlBhY2lmaWMvUG9ydF9Nb3Jlc2J5fFBhY2lmaWMvWWFwXCIsXG5cdFx0XHRcIlBhY2lmaWMvVGFyYXdhfEV0Yy9HTVQtMTJcIixcblx0XHRcdFwiUGFjaWZpYy9UYXJhd2F8UGFjaWZpYy9GdW5hZnV0aVwiLFxuXHRcdFx0XCJQYWNpZmljL1RhcmF3YXxQYWNpZmljL1dha2VcIixcblx0XHRcdFwiUGFjaWZpYy9UYXJhd2F8UGFjaWZpYy9XYWxsaXNcIlxuXHRcdF1cblx0fSk7XG5cblxuXHRyZXR1cm4gbW9tZW50O1xufSkpOyIsIi8qXG4gKiBUaXRsZTogVHlwZXdyaXRlciBKU1xuICogRGVzY3JpcHRpb246IEEgbmF0aXZlIGphdmFzY3JpcHQgcGx1Z2luIHRoYXQgY2FuIGJlIHVzZWQgdG8gY3JlYXRlIGFuIGVsZWdlbnQgYXV0b21hdGljIHR5cGV3cml0ZXIgYW5pbWF0aW9uIGVmZmVjdCBvbiB3ZWJzaXRlcy5cbiAqIEF1dGhvcjogVGFtZWVtIFNhZmlcbiAqIFdlYnNpdGU6IGh0dHBzOi8vc2FmaS5tZS51a1xuICogVmVyc2lvbjogMS4wLjBcbiAqL1xuXG4oZnVuY3Rpb24oKSB7XG5cblx0XCJ1c2Ugc3RyaWN0XCI7XG5cblx0Ly8gaHR0cDovL3BhdWxpcmlzaC5jb20vMjAxMS9yZXF1ZXN0YW5pbWF0aW9uZnJhbWUtZm9yLXNtYXJ0LWFuaW1hdGluZy9cblx0Ly8gaHR0cDovL215Lm9wZXJhLmNvbS9lbW9sbGVyL2Jsb2cvMjAxMS8xMi8yMC9yZXF1ZXN0YW5pbWF0aW9uZnJhbWUtZm9yLXNtYXJ0LWVyLWFuaW1hdGluZ1xuXHQvLyByZXF1ZXN0QW5pbWF0aW9uRnJhbWUgcG9seWZpbGwgYnkgRXJpayBNw7ZsbGVyLiBmaXhlcyBmcm9tIFBhdWwgSXJpc2ggYW5kIFRpbm8gWmlqZGVsXG5cdC8vIE1JVCBsaWNlbnNlXG5cdChmdW5jdGlvbigpIHtcblx0ICAgIHZhciBsYXN0VGltZSA9IDA7XG5cdCAgICB2YXIgdmVuZG9ycyA9IFsnbXMnLCAnbW96JywgJ3dlYmtpdCcsICdvJ107XG5cdCAgICBmb3IodmFyIHggPSAwOyB4IDwgdmVuZG9ycy5sZW5ndGggJiYgIXdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWU7ICsreCkge1xuXHQgICAgICAgIHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUgPSB3aW5kb3dbdmVuZG9yc1t4XSsnUmVxdWVzdEFuaW1hdGlvbkZyYW1lJ107XG5cdCAgICAgICAgd2luZG93LmNhbmNlbEFuaW1hdGlvbkZyYW1lID0gd2luZG93W3ZlbmRvcnNbeF0rJ0NhbmNlbEFuaW1hdGlvbkZyYW1lJ11cblx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCB3aW5kb3dbdmVuZG9yc1t4XSsnQ2FuY2VsUmVxdWVzdEFuaW1hdGlvbkZyYW1lJ107XG5cdCAgICB9XG5cblx0ICAgIGlmICghd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSlcblx0ICAgICAgICB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lID0gZnVuY3Rpb24oY2FsbGJhY2ssIGVsZW1lbnQpIHtcblx0ICAgICAgICAgICAgdmFyIGN1cnJUaW1lID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XG5cdCAgICAgICAgICAgIHZhciB0aW1lVG9DYWxsID0gTWF0aC5tYXgoMCwgMTYgLSAoY3VyclRpbWUgLSBsYXN0VGltZSkpO1xuXHQgICAgICAgICAgICB2YXIgaWQgPSB3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpIHsgY2FsbGJhY2soY3VyclRpbWUgKyB0aW1lVG9DYWxsKTsgfSxcblx0ICAgICAgICAgICAgICB0aW1lVG9DYWxsKTtcblx0ICAgICAgICAgICAgbGFzdFRpbWUgPSBjdXJyVGltZSArIHRpbWVUb0NhbGw7XG5cdCAgICAgICAgICAgIHJldHVybiBpZDtcblx0ICAgICAgICB9O1xuXG5cdCAgICBpZiAoIXdpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZSlcblx0ICAgICAgICB3aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWUgPSBmdW5jdGlvbihpZCkge1xuXHQgICAgICAgICAgICBjbGVhclRpbWVvdXQoaWQpO1xuXHQgICAgICAgIH07XG5cdH0oKSk7XG5cblx0d2luZG93LlR5cGV3cml0ZXIgPSBmdW5jdGlvbiBUeXBld3JpdGVyKGVsZW1lbnQsIG9wdGlvbnMpIHtcblx0XHR0aGlzLl9zZXR0aW5ncyA9IHtcblx0XHRcdGN1cnNvckFuaW1hdGlvblBhdXNlZDogZmFsc2UsXG5cdFx0XHRvcGFjaXR5SW5jcmVhc2luZzogZmFsc2UsXG5cdFx0XHRjdXJyZW50T3BhY2l0eTogMSxcblx0XHRcdGRlbGF5ZWRRdWU6IFtdLFxuXHRcdFx0ZGVsYXlJdGVtc0NvdW50OiAwLFxuXHRcdFx0ZXZlbnRRdWU6IFtdLFxuXHRcdFx0Y2FsbGVkRXZlbnRzOiBbXSxcblx0XHRcdGV2ZW50UnVubmluZzogZmFsc2UsXG5cdFx0XHR0aW1lb3V0OiBmYWxzZSxcblx0XHRcdGRlbGF5RXhlY3V0aW9uOiBmYWxzZSxcblx0XHRcdGZwczogKDYwLzEwMDApLFxuXHRcdFx0dHlwaW5nRnJhbWVDb3VudDogMCxcblx0XHRcdHN0cmluZ1RvVHlwZUhUTUxBcnJheTogW10sXG5cdFx0XHRjdXJyZW50VHlwZWRDaGFyYWN0ZXJzOiBbXSxcblx0XHRcdHR5cGluZzogZmFsc2UsXG5cdFx0XHR1c2VkSURzOiBbXSxcblx0XHRcdGNoYXJBbW91bnRUb0RlbGV0ZTogZmFsc2UsXG5cdFx0XHR1c2VyT3B0aW9uczoge30sXG5cdFx0XHRldmVudExvb3BSZXJ1bjogMFxuXHRcdH07XG5cblx0XHRpZighZWxlbWVudCkge1xuXHRcdFx0cmV0dXJuIGNvbnNvbGUuZXJyb3IoJ1BsZWFzZSBjaG9vc2UgYW4gRE9NIGVsZW1lbnQgc28gdGhhdCB0eXBlIHdyaXRlciBjYW4gZGlzcGxheSBpdHNlbGYuJyk7XG5cdFx0fVxuXG5cdFx0Ly8gaWYoIW9wdGlvbnMuc3RyaW5ncyAmJiAhKG9wdGlvbnMuc3RyaW5ncyBpbnN0YW5jZW9mIEFycmF5IHx8IHR5cGVvZiBvcHRpb25zLnN0cmluZ3MgPT09ICdzdHJpbmcnKSkge1xuXHRcdC8vIFx0cmV0dXJuIGNvbnNvbGUuZXJyb3IoJ1BsZWFzZSBlbnRlciBhbiBhcnJheSBvZiBzdHJpbmdzIGZvciB0aGUgdHlwZXdyaXRlciBhbmltYXRpb24gdG8gd29yay4nKTtcblx0XHQvLyB9XG5cblx0XHRpZih0eXBlb2Ygb3B0aW9ucyAhPT0gJ29iamVjdCcpIHtcblx0XHRcdHJldHVybiBjb25zb2xlLmVycm9yKCdUeXBld3JpdGVyIG9ubHkgYWNjZXB0cyB0aGUgb3B0aW9ucyBhcyBhbiBvYmplY3QuJyk7XG5cdFx0fVxuXG5cdFx0dGhpcy5fc2V0dGluZ3MudXNlck9wdGlvbnMgPSBvcHRpb25zO1xuXG5cdFx0dGhpcy5kZWZhdWx0X29wdGlvbnMgPSB7XG5cdFx0XHRzdHJpbmdzOiBmYWxzZSxcblx0XHRcdGN1cnNvckNsYXNzTmFtZTogJ3R5cGV3cml0ZXItY3Vyc29yJyxcblx0XHRcdGN1cnNvcjogJ3wnLFxuXHRcdFx0YW5pbWF0ZUN1cnNvcjogdHJ1ZSxcblx0XHRcdGJsaW5rU3BlZWQ6IDUwLFxuXHRcdFx0dHlwaW5nU3BlZWQ6ICduYXR1cmFsJyxcblx0XHRcdGRlbGV0ZVNwZWVkOiAnbmF0dXJhbCcsXG5cdFx0XHRjaGFyU3BhbkNsYXNzTmFtZTogJ3R5cGV3cml0ZXItY2hhcicsXG5cdFx0XHR3cmFwcGVyQ2xhc3NOYW1lOiAndHlwZXdyaXRlci13cmFwcGVyJyxcblx0XHRcdGxvb3A6IGZhbHNlLFxuXHRcdFx0YXV0b1N0YXJ0OiBmYWxzZSxcblx0XHRcdGRldk1vZGU6IGZhbHNlXG5cdFx0fTtcblxuXHRcdHRoaXMub3B0aW9ucyA9IHRoaXMuX3NldHVwT3B0aW9ucyhvcHRpb25zKTtcblxuXHRcdHRoaXMuZWwgPSBlbGVtZW50O1xuXG5cdFx0dGhpcy5fc2V0dXBUeXB3cml0ZXJXcmFwcGVyKCk7XG5cblx0XHR0aGlzLl9zdGFydEN1cnNvckFuaW1hdGlvbigpO1xuXG5cdFx0aWYodGhpcy5vcHRpb25zLmF1dG9TdGFydCA9PT0gdHJ1ZSAmJiB0aGlzLm9wdGlvbnMuc3RyaW5ncykge1xuXHRcdFx0dGhpcy50eXBlT3V0QWxsU3RyaW5ncygpO1xuXHRcdH1cblxuXHR9O1xuXG5cdHZhciBUeXBld3JpdGVyUHJvdG90eXBlID0gd2luZG93LlR5cGV3cml0ZXIucHJvdG90eXBlO1xuXG5cdFR5cGV3cml0ZXJQcm90b3R5cGUuc3RvcCA9IGZ1bmN0aW9uKCkge1xuXHRcdHRoaXMuX2FkZFRvRXZlbnRRdWUodGhpcy5fc3RvcEV2ZW50TG9vcClcblx0XHRyZXR1cm4gdGhpcztcblx0fTtcblxuXHRUeXBld3JpdGVyUHJvdG90eXBlLnN0YXJ0ID0gZnVuY3Rpb24oKSB7XG5cdFx0dGhpcy5fc3RhcnRFdmVudExvb3AoKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fTtcblxuXHRUeXBld3JpdGVyUHJvdG90eXBlLnJlcnVuID0gZnVuY3Rpb24oKSB7XG5cdFx0dGhpcy5fYWRkVG9FdmVudFF1ZSh0aGlzLl9yZXJ1bkNhbGxlZEV2ZW50cyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH07XG5cblx0VHlwZXdyaXRlclByb3RvdHlwZS50eXBlU3RyaW5nID0gZnVuY3Rpb24oc3RyaW5nKSB7XG5cdFx0aWYoIXN0cmluZyB8fCB0eXBlb2Ygc3RyaW5nICE9ICdzdHJpbmcnKSB7XG5cdFx0XHRyZXR1cm4gY29uc29sZS5lcnJvcignUGxlYXNlIGVudGVyIGEgc3RyaW5nIGFzIHRoZSBwYXJhbWF0ZXIuJyk7XG5cdFx0fVxuXG5cdFx0dmFyIHN0cmluZ19jaGFycyA9IHRoaXMuX2dldENoYXJhY3RlcnMoc3RyaW5nKTtcblxuXHRcdHRoaXMuX2FkZFRvRXZlbnRRdWUoW3RoaXMuX3R5cGVDaGFyYWN0ZXJzLCBbc3RyaW5nX2NoYXJzXV0pO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9O1xuXG5cdFR5cGV3cml0ZXJQcm90b3R5cGUuZGVsZXRlQWxsID0gZnVuY3Rpb24oKSB7XG5cdFx0dGhpcy5fYWRkVG9FdmVudFF1ZShbdGhpcy5fZGVsZXRlQ2hhcnMsIFsnYWxsJ11dKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fTtcblxuXHRUeXBld3JpdGVyUHJvdG90eXBlLmRlbGV0ZUNoYXJzID0gZnVuY3Rpb24oYW1vdW50KSB7XG5cdFx0dGhpcy5fYWRkVG9FdmVudFF1ZShbdGhpcy5fZGVsZXRlQ2hhcnMsIFthbW91bnRdXSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH07XG5cblx0VHlwZXdyaXRlclByb3RvdHlwZS5wYXVzZUZvciA9IGZ1bmN0aW9uKG1zKSB7XG5cdFx0dGhpcy5fYWRkVG9FdmVudFF1ZShbdGhpcy5fcGF1c2VGb3IsIFttc11dKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fTtcblxuXHRUeXBld3JpdGVyUHJvdG90eXBlLnR5cGVPdXRBbGxTdHJpbmdzID0gZnVuY3Rpb24oKSB7XG5cdFx0dmFyIGNoYXJhY3RlcnNfYXJyYXkgPSB0aGlzLl9nZXRTdHJpbmdzQXNDaGFyc0FycmF5KCk7XG5cblx0XHRpZihjaGFyYWN0ZXJzX2FycmF5Lmxlbmd0aCA9PT0gMSkge1xuXHRcdFx0dGhpcy5fdHlwZUNoYXJhY3RlcnMoY2hhcmFjdGVyc19hcnJheVswXSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGZvcih2YXIgaSA9IDAsIGxlbmd0aCA9IGNoYXJhY3RlcnNfYXJyYXkubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0dGhpcy5fYWRkVG9FdmVudFF1ZShbdGhpcy5fdHlwZUNoYXJhY3RlcnMsIFtjaGFyYWN0ZXJzX2FycmF5W2ldXV0pO1xuXHRcdFx0XHR0aGlzLnBhdXNlRm9yKHRoaXMuX3JhbmRvbUludGVnZXIoMTUwMCwgMjUwMCkpO1xuXHRcdFx0XHR0aGlzLmRlbGV0ZUFsbCgpO1xuXHRcdFx0XHR0aGlzLnBhdXNlRm9yKHRoaXMuX3JhbmRvbUludGVnZXIoMTUwMCwgMjUwMCkpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH07XG5cblx0VHlwZXdyaXRlclByb3RvdHlwZS5jaGFuZ2VTZXR0aW5ncyA9IGZ1bmN0aW9uKG5ld19zZXR0aW5ncykge1xuXHRcdGlmKCFuZXdfc2V0dGluZ3MgJiYgdHlwZW9mIG5ld19zZXR0aW5ncyAhPT0gJ29iamVjdCcpIHtcblx0XHRcdHJldHVybiBjb25zb2xlLmVycm9yKCdUeXBld3JpdGVyIHdpbGwgb25seSBhY2NlcHQgYW4gb2JqZWN0IGFzIHRoZSBzZXR0aW5ncy4nKTtcblx0XHR9XG5cblx0XHR0aGlzLl9hZGRUb0V2ZW50UXVlKFt0aGlzLl9jaGFuZ2VTZXR0aW5ncywgW0pTT04uc3RyaW5naWZ5KG5ld19zZXR0aW5ncyldXSk7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9O1xuXG5cdFR5cGV3cml0ZXJQcm90b3R5cGUuY2hhbmdlQmxpbmtTcGVlZCA9IGZ1bmN0aW9uKG5ld19zcGVlZCkge1xuXHRcdGlmKCFuZXdfc3BlZWQgJiYgdHlwZW9mIG5ld19zcGVlZCAhPT0gJ251bWJlcicpIHtcblx0XHRcdHJldHVybiBjb25zb2xlLmVycm9yKCdQbGVhc2UgZW50ZXIgYSBudW1iZXIgZm9yIHRoZSBuZXcgYmxpbmsgc3BlZWQuJyk7XG5cdFx0fVxuXG5cdFx0dGhpcy5jaGFuZ2VTZXR0aW5ncyh7XG5cdFx0XHRibGlua1NwZWVkOiBuZXdfc3BlZWRcblx0XHR9KTtcblxuXHRcdHJldHVybiB0aGlzO1xuXHR9O1xuXG5cdFR5cGV3cml0ZXJQcm90b3R5cGUuY2hhbmdlVHlwaW5nU3BlZWQgPSBmdW5jdGlvbihuZXdfc3BlZWQpIHtcblx0XHRpZighbmV3X3NwZWVkICYmIHR5cGVvZiBuZXdfc3BlZWQgIT09ICdudW1iZXInKSB7XG5cdFx0XHRyZXR1cm4gY29uc29sZS5lcnJvcignUGxlYXNlIGVudGVyIGEgbnVtYmVyIGZvciB0aGUgbmV3IHR5cGluZyBzcGVlZC4nKTtcblx0XHR9XG5cblx0XHR2YXIgbmV3X3NldHRpbmdzID0ge1xuXHRcdFx0dHlwaW5nU3BlZWQ6IG5ld19zcGVlZFxuXHRcdH07XG5cblx0XHR0aGlzLmNoYW5nZVNldHRpbmdzKHtcblx0XHRcdHR5cGluZ1NwZWVkOiBuZXdfc3BlZWRcblx0XHR9KTtcblxuXHRcdHJldHVybiB0aGlzO1xuXHR9O1xuXG5cdFR5cGV3cml0ZXJQcm90b3R5cGUuY2hhbmdlRGVsZXRlU3BlZWQgPSBmdW5jdGlvbihuZXdfc3BlZWQpIHtcblx0XHRpZighbmV3X3NwZWVkICYmIHR5cGVvZiBuZXdfc3BlZWQgIT09ICdudW1iZXInKSB7XG5cdFx0XHRyZXR1cm4gY29uc29sZS5lcnJvcignUGxlYXNlIGVudGVyIGEgbnVtYmVyIGZvciB0aGUgbmV3IGRlbGV0ZSBzcGVlZC4nKTtcblx0XHR9XG5cblx0XHR0aGlzLmNoYW5nZVNldHRpbmdzKHtcblx0XHRcdGNoYW5nZURlbGV0ZVNwZWVkOiBuZXdfc3BlZWRcblx0XHR9KTtcblxuXHRcdHJldHVybiB0aGlzO1xuXHR9O1xuXG5cdFR5cGV3cml0ZXJQcm90b3R5cGUuX3JlcnVuQ2FsbGVkRXZlbnRzID0gZnVuY3Rpb24oKSB7XG5cdFx0aWYodGhpcy5fc2V0dGluZ3MuY3VycmVudFR5cGVkQ2hhcmFjdGVycy5sZW5ndGggPiAwKSB7XG5cdFx0XHR0aGlzLmRlbGV0ZUFsbCgpO1xuXHRcdFx0dGhpcy5fcmVzZXRFdmVudExvb3AoJ3JlcnVuQ2FsbGVkRXZlbnRzJyk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuX3NldHRpbmdzLmV2ZW50UXVlID0gdGhpcy5fc2V0dGluZ3MuY2FsbGVkRXZlbnRzO1xuXHRcdFx0dGhpcy5fc2V0dGluZ3MuY2FsbGVkRXZlbnRzID0gW107XG5cdFx0XHR0aGlzLm9wdGlvbnMgPSB0aGlzLl9zZXR1cE9wdGlvbnModGhpcy5fc2V0dGluZ3MudXNlck9wdGlvbnMpO1xuXHRcdFx0dGhpcy5fc2V0dGluZ3MudXNlZElEcyA9IFtdO1xuXHRcdFx0dGhpcy5jaGFyQW1vdW50VG9EZWxldGUgPSBmYWxzZTtcblx0XHRcdHRoaXMuX3N0YXJ0RXZlbnRMb29wKCk7XG5cdFx0fVxuXHR9O1xuXG5cdFR5cGV3cml0ZXJQcm90b3R5cGUuX2RlbGV0ZUNoYXJzID0gZnVuY3Rpb24oYW1vdW50KSB7XG5cblxuXHRcdGlmKGFtb3VudCkge1xuXHRcdFx0dGhpcy5fc2V0dGluZ3MuY2hhckFtb3VudFRvRGVsZXRlID0gYW1vdW50O1xuXHRcdH1cblx0XHR0aGlzLl9kZWxldGluZ0NoYXJJZHNBbmltYXRpb24gPSB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRoaXMuX2RlbGV0aW5nQ2hhckFuaW1hdGlvbkZyYW1lLmJpbmQodGhpcykpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9O1xuXG5cdFR5cGV3cml0ZXJQcm90b3R5cGUuX3BhdXNlRm9yID0gZnVuY3Rpb24obXMpIHtcblx0XHR2YXIgc2VsZiA9IHRoaXM7XG5cdFx0c2VsZi5fc2V0dGluZ3MuZXZlbnRSdW5uaW5nID0gdHJ1ZTtcblx0XHRzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuXHRcdFx0c2VsZi5fcmVzZXRFdmVudExvb3AoJ3BhdXNlRm9yJyk7XG5cdFx0fSwgbXMpO1xuXHR9O1xuXG5cdFR5cGV3cml0ZXJQcm90b3R5cGUuX2NoYW5nZVNldHRpbmdzID0gZnVuY3Rpb24obmV3X3NldHRpbmdzKSB7XG5cdFx0dGhpcy5vcHRpb25zID0gdGhpcy5fc2V0dXBPcHRpb25zKEpTT04ucGFyc2UobmV3X3NldHRpbmdzWzBdKSk7XG5cdFx0dGhpcy5fcmVzZXRFdmVudExvb3AoJ2NoYW5nZVNldHRpbmdzJyk7XG5cblx0XHRpZih0aGlzLm9wdGlvbnMuZGV2TW9kZSkge1xuXHRcdFx0Y29uc29sZS5sb2coJ05ldyBzZXR0aW5ncycsIHRoaXMub3B0aW9ucyk7XG5cdFx0fVxuXG5cdH07XG5cblx0VHlwZXdyaXRlclByb3RvdHlwZS5fZGVsZXRpbmdDaGFyQW5pbWF0aW9uRnJhbWUgPSBmdW5jdGlvbigpIHtcblx0XHR2YXIgc2VsZiA9IHRoaXM7XG5cdFx0dmFyIGRlbGV0ZV9zcGVlZCA9IHRoaXMub3B0aW9ucy5kZWxldGVTcGVlZDtcblx0XHR2YXIgdHlwZXdyaXRlcl93cmFwcGVyX2NsYXNzX25hbWUgPSBzZWxmLm9wdGlvbnMud3JhcHBlckNsYXNzTmFtZTtcblx0XHR2YXIgY3VycmVudF90eXBlZF9jaGFyX2lkcyA9IHNlbGYuX3NldHRpbmdzLmN1cnJlbnRUeXBlZENoYXJhY3RlcnM7XG5cdFx0dmFyIGNoYXJfYW1vdW50X3RvX2RlbGV0ZSA9IHNlbGYuX3NldHRpbmdzLmNoYXJBbW91bnRUb0RlbGV0ZTtcblxuXHRcdGlmKCFzZWxmLl9zZXR0aW5ncy5jaGFyQW1vdW50VG9EZWxldGUgfHwgc2VsZi5fc2V0dGluZ3MuY2hhckFtb3VudFRvRGVsZXRlID09PSAwIHx8IGN1cnJlbnRfdHlwZWRfY2hhcl9pZHMgPT09IDApIHtcblx0XHRcdHNlbGYuX3Jlc2V0RXZlbnRMb29wKCdkZWxldGluZ0NoYXJBbmltYXRpb25GcmFtZScpO1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXG5cdFx0aWYoZGVsZXRlX3NwZWVkID09ICduYXR1cmFsJykge1xuXHRcdFx0ZGVsZXRlX3NwZWVkID0gc2VsZi5fcmFuZG9tSW50ZWdlcig1MCwgMTUwKTtcblx0XHR9XG5cblx0XHRpZihjaGFyX2Ftb3VudF90b19kZWxldGUgPT0gJ2FsbCcpIHtcblx0XHRcdGNoYXJfYW1vdW50X3RvX2RlbGV0ZSA9IGN1cnJlbnRfdHlwZWRfY2hhcl9pZHMubGVuZ3RoO1xuXHRcdFx0c2VsZi5fc2V0dGluZ3MuY2hhckFtb3VudFRvRGVsZXRlID0gY2hhcl9hbW91bnRfdG9fZGVsZXRlO1xuXHRcdH1cblxuXHRcdHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG5cdFx0XHRpZihzZWxmLl9zZXR0aW5ncy5jaGFyQW1vdW50VG9EZWxldGUpIHtcblx0XHRcdFx0dmFyIGxhc3RfdHlwZWRfY2hhcl9pbmRleCA9IGN1cnJlbnRfdHlwZWRfY2hhcl9pZHMubGVuZ3RoIC0gMTtcblx0XHRcdFx0dmFyIGdldF9sYXN0X3R5cGVkX2NoYXIgPSBjdXJyZW50X3R5cGVkX2NoYXJfaWRzW2xhc3RfdHlwZWRfY2hhcl9pbmRleF07XG5cblx0XHRcdFx0c2VsZi5fc2V0dGluZ3MuY3VycmVudFR5cGVkQ2hhcmFjdGVycy5zcGxpY2UobGFzdF90eXBlZF9jaGFyX2luZGV4LCAxKTtcblxuXHRcdFx0XHR2YXIgY2hhcl90b19kZWxldGVfZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChnZXRfbGFzdF90eXBlZF9jaGFyKTtcblxuXHRcdFx0XHRpZihjaGFyX3RvX2RlbGV0ZV9lbCkge1xuXHRcdFx0XHRcdHZhciB0eXBld3JpdGVyX3dyYXBwZXJfZWwgPSBzZWxmLmVsLnF1ZXJ5U2VsZWN0b3IoJy4nICsgdHlwZXdyaXRlcl93cmFwcGVyX2NsYXNzX25hbWUpO1xuXHRcdFx0XHRcdHR5cGV3cml0ZXJfd3JhcHBlcl9lbC5yZW1vdmVDaGlsZChjaGFyX3RvX2RlbGV0ZV9lbCk7XG5cdFx0XHRcdFx0c2VsZi5fc2V0dGluZ3MuY2hhckFtb3VudFRvRGVsZXRlID0gY2hhcl9hbW91bnRfdG9fZGVsZXRlIC0gMTtcblxuXHRcdFx0XHRcdGlmKHNlbGYub3B0aW9ucy5kZXZNb2RlKSB7XG5cdFx0XHRcdFx0XHRjb25zb2xlLmxvZygnRGVsZXRlZCBjaGFyIHdpdGggSUQnLCBnZXRfbGFzdF90eXBlZF9jaGFyKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0fVxuXG5cdFx0XHRzZWxmLl9kZWxldGluZ0NoYXJJZHNBbmltYXRpb24gPSB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKHNlbGYuX2RlbGV0aW5nQ2hhckFuaW1hdGlvbkZyYW1lLmJpbmQoc2VsZikpO1xuXG5cdFx0fSwgZGVsZXRlX3NwZWVkKTtcblx0fTtcblxuXHRUeXBld3JpdGVyUHJvdG90eXBlLl9zZXR1cE9wdGlvbnMgPSBmdW5jdGlvbihuZXdfb3B0aW9ucykge1xuXHQgICAgdmFyIG1lcmdlZF9vcHRpb25zID0ge307XG5cblx0ICAgIGZvciAodmFyIGF0dHJuYW1lIGluIHRoaXMuZGVmYXVsdF9vcHRpb25zKSB7XG5cdCAgICBcdG1lcmdlZF9vcHRpb25zW2F0dHJuYW1lXSA9IHRoaXMuZGVmYXVsdF9vcHRpb25zW2F0dHJuYW1lXTtcblx0ICAgIH1cblxuXHQgICAgaWYodGhpcy5fc2V0dGluZ3MudXNlck9wdGlvbnMpIHtcblx0ICAgIFx0Zm9yICh2YXIgYXR0cm5hbWUgaW4gdGhpcy5fc2V0dGluZ3MudXNlck9wdGlvbnMpIHtcblx0XHQgICAgXHRtZXJnZWRfb3B0aW9uc1thdHRybmFtZV0gPSB0aGlzLl9zZXR0aW5ncy51c2VyT3B0aW9uc1thdHRybmFtZV07XG5cdFx0ICAgIH1cblx0ICAgIH1cblxuXHQgICAgZm9yICh2YXIgYXR0cm5hbWUgaW4gbmV3X29wdGlvbnMpIHtcblx0ICAgIFx0bWVyZ2VkX29wdGlvbnNbYXR0cm5hbWVdID0gbmV3X29wdGlvbnNbYXR0cm5hbWVdO1xuXHQgICAgfVxuXG5cdCAgICByZXR1cm4gbWVyZ2VkX29wdGlvbnM7XG5cdH1cblxuXHRUeXBld3JpdGVyUHJvdG90eXBlLl9hZGRUb0V2ZW50UXVlID0gZnVuY3Rpb24oZXZlbnQpIHtcblx0XHR0aGlzLl9zZXR0aW5ncy5ldmVudFF1ZS5wdXNoKGV2ZW50KTtcblx0XHRpZih0aGlzLl9zZXR0aW5ncy5ldmVudFF1ZS5sZW5ndGggPiAwICYmICF0aGlzLl9zZXR0aW5ncy5ldmVudFJ1bm5pbmcgJiYgdGhpcy5vcHRpb25zLmF1dG9TdGFydCkge1xuXHRcdFx0dGhpcy5fc3RhcnRFdmVudExvb3AoKTtcblx0XHR9XG5cdH07XG5cblx0VHlwZXdyaXRlclByb3RvdHlwZS5fc3RhcnRFdmVudExvb3AgPSBmdW5jdGlvbigpIHtcblx0XHRpZih0aGlzLm9wdGlvbnMuZGV2TW9kZSkge1xuXHRcdFx0Y29uc29sZS5sb2coJ0V2ZW50IGxvb3Agc3RhcnRlZC4nKTtcblx0XHR9XG5cblx0XHRpZighdGhpcy5fc2V0dGluZ3MuZXZlbnRSdW5uaW5nKSB7XG5cblx0XHRcdGlmKHRoaXMuX3NldHRpbmdzLmV2ZW50UXVlLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0dGhpcy5ldmVudExvb3BSZXJ1biA9IDA7XG5cdFx0XHRcdHZhciBmaXJzdF9ldmVudCA9IHRoaXMuX3NldHRpbmdzLmV2ZW50UXVlWzBdO1xuXHRcdFx0XHRpZih0eXBlb2YgZmlyc3RfZXZlbnQgPT0gJ2Z1bmN0aW9uJykge1xuXHRcdFx0XHRcdHRoaXMuX3NldHRpbmdzLmV2ZW50UnVubmluZyA9IHRydWU7XG5cdFx0XHRcdFx0dGhpcy5fc2V0dGluZ3MuY2FsbGVkRXZlbnRzLnB1c2goZmlyc3RfZXZlbnQpO1xuXHRcdFx0XHRcdHRoaXMuX3NldHRpbmdzLmV2ZW50UXVlLnNwbGljZSgwLCAxKTtcblx0XHRcdFx0XHRmaXJzdF9ldmVudC5jYWxsKHRoaXMpO1xuXHRcdFx0XHRcdGlmKHRoaXMub3B0aW9ucy5kZXZNb2RlKSB7XG5cdFx0XHRcdFx0XHRjb25zb2xlLmxvZygnRXZlbnQgc3RhcnRlZC4nKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSBpZihmaXJzdF9ldmVudCBpbnN0YW5jZW9mIEFycmF5KSB7XG5cdFx0XHRcdFx0aWYodHlwZW9mIGZpcnN0X2V2ZW50WzBdID09ICdmdW5jdGlvbicgJiYgZmlyc3RfZXZlbnRbMV0gaW5zdGFuY2VvZiBBcnJheSkge1xuXHRcdFx0XHRcdFx0dGhpcy5fc2V0dGluZ3MuZXZlbnRSdW5uaW5nID0gdHJ1ZTtcblx0XHRcdFx0XHRcdHRoaXMuX3NldHRpbmdzLmNhbGxlZEV2ZW50cy5wdXNoKGZpcnN0X2V2ZW50KTtcblx0XHRcdFx0XHRcdHRoaXMuX3NldHRpbmdzLmV2ZW50UXVlLnNwbGljZSgwLCAxKTtcblx0XHRcdFx0XHRcdGZpcnN0X2V2ZW50WzBdLmNhbGwodGhpcywgZmlyc3RfZXZlbnRbMV0pO1xuXHRcdFx0XHRcdFx0aWYodGhpcy5vcHRpb25zLmRldk1vZGUpIHtcblx0XHRcdFx0XHRcdFx0Y29uc29sZS5sb2coJ0V2ZW50IHN0YXJ0ZWQuJyk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHR0aGlzLl9ldmVudFF1ZUFuaW1hdGlvbiA9IHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGhpcy5fc3RhcnRFdmVudExvb3AuYmluZCh0aGlzKSk7XG5cdFx0fVxuXG5cdFx0aWYoIXRoaXMuX3NldHRpbmdzLmV2ZW50UnVubmluZyAmJiB0aGlzLl9zZXR0aW5ncy5ldmVudFF1ZS5sZW5ndGggPD0gMCkge1xuXHRcdFx0dmFyIHNlbGYgPSB0aGlzO1xuXHRcdFx0c2VsZi5fc3RvcEV2ZW50TG9vcCgpO1xuXHRcdFx0c2V0VGltZW91dChmdW5jdGlvbigpIHtcblx0XHRcdFx0aWYoc2VsZi5vcHRpb25zLmxvb3ApIHtcblx0XHRcdFx0XHRzZWxmLmV2ZW50TG9vcFJlcnVuKys7XG5cdFx0XHRcdFx0aWYoc2VsZi5vcHRpb25zLmRldk1vZGUpIHtcblx0XHRcdFx0XHRcdGNvbnNvbGUubG9nKCdCZWZvcmUgTG9vcCBTdGF0ZScsIHNlbGYuX3NldHRpbmdzKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0aWYoc2VsZi5ldmVudExvb3BSZXJ1biA+IDQpIHtcblx0XHRcdFx0XHRcdGNvbnNvbGUuZXJyb3IoJ01heGltdW0gYW1vdW50IG9mIGxvb3AgcmV0cmllcyByZWFjaGVkLicpO1xuXHRcdFx0XHRcdFx0c2VsZi5fc3RvcEV2ZW50TG9vcCgpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRpZihzZWxmLm9wdGlvbnMuZGV2TW9kZSkge1xuXHRcdFx0XHRcdFx0XHRjb25zb2xlLmxvZygnTG9vcGluZyBldmVudHMuJyk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRzZWxmLl9yZXJ1bkNhbGxlZEV2ZW50cygpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSwgMTAwMCk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdH07XG5cblx0VHlwZXdyaXRlclByb3RvdHlwZS5fcmVzZXRFdmVudExvb3AgPSBmdW5jdGlvbihuYW1lKSB7XG5cdFx0dmFyIGV2ZW50X25hbWUgPSBuYW1lIHx8ICdFdmVudCc7XG5cdFx0dGhpcy5fc2V0dGluZ3MuZXZlbnRSdW5uaW5nID0gZmFsc2U7XG5cdFx0dGhpcy5fc3RhcnRFdmVudExvb3AoKTtcblx0XHRpZih0aGlzLm9wdGlvbnMuZGV2TW9kZSkge1xuXHRcdFx0Y29uc29sZS5sb2coZXZlbnRfbmFtZSwgJ0ZpbmlzaGVkJyk7XG5cdFx0fVxuXHR9O1xuXG5cdFR5cGV3cml0ZXJQcm90b3R5cGUuX3N0b3BFdmVudExvb3AgPSBmdW5jdGlvbigpIHtcblx0XHR3aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWUodGhpcy5fZXZlbnRRdWVBbmltYXRpb24pO1xuXHRcdGlmKHRoaXMub3B0aW9ucy5kZXZNb2RlKSB7XG5cdFx0XHRjb25zb2xlLmxvZygnRXZlbnQgbG9vcCBzdG9wcGVkLicpO1xuXHRcdH1cblx0fTtcblxuXHRUeXBld3JpdGVyUHJvdG90eXBlLl9zZXR1cFR5cHdyaXRlcldyYXBwZXIgPSBmdW5jdGlvbigpIHtcblx0XHR2YXIgdHlwZXdyaXRlcl93cmFwcGVyX2NsYXNzX25hbWUgPSB0aGlzLm9wdGlvbnMud3JhcHBlckNsYXNzTmFtZTtcblx0XHR2YXIgdHlwZXdyaXRlcl93cmFwcGVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpO1xuXHRcdHR5cGV3cml0ZXJfd3JhcHBlci5jbGFzc05hbWUgPSB0eXBld3JpdGVyX3dyYXBwZXJfY2xhc3NfbmFtZTtcblx0XHR0aGlzLmVsLmlubmVySFRNTCA9ICcnO1xuXHRcdHRoaXMuZWwuYXBwZW5kQ2hpbGQodHlwZXdyaXRlcl93cmFwcGVyKTtcblx0fTtcblxuXHRUeXBld3JpdGVyUHJvdG90eXBlLl90eXBlQ2hhcmFjdGVycyA9IGZ1bmN0aW9uKGNoYXJhY3RlcnNfYXJyYXkpIHtcblx0XHR0aGlzLl9zZXR0aW5ncy5zdHJpbmdUb1R5cGVIVE1MQXJyYXkgPSB0aGlzLl9jb252ZXJ0Q2hhcnNUb0hUTUwoY2hhcmFjdGVyc19hcnJheSk7XG5cdFx0dGhpcy5fdHlwaW5nQW5pbWF0aW9uID0gd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSh0aGlzLl90eXBpbmdBbmltYXRpb25GcmFtZS5iaW5kKHRoaXMsIGNoYXJhY3RlcnNfYXJyYXkubGVuZ3RoKSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH07XG5cblx0VHlwZXdyaXRlclByb3RvdHlwZS5fdHlwaW5nQW5pbWF0aW9uRnJhbWUgPSBmdW5jdGlvbih0b3RhbF9pdGVtcykge1xuXHRcdHZhciBzZWxmID0gdGhpcztcblx0XHR2YXIgdHlwaW5nX3NwZWVkID0gdGhpcy5vcHRpb25zLnR5cGluZ1NwZWVkO1xuXHRcdHZhciB0eXBld3JpdGVyX3dyYXBwZXJfY2xhc3NfbmFtZSA9IHNlbGYub3B0aW9ucy53cmFwcGVyQ2xhc3NOYW1lO1xuXG5cdFx0aWYoc2VsZi5fc2V0dGluZ3Muc3RyaW5nVG9UeXBlSFRNTEFycmF5Lmxlbmd0aCA9PSAwKSB7XG5cdFx0XHR3aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWUoc2VsZi5fdHlwaW5nQW5pbWF0aW9uKTtcblx0XHRcdHRoaXMuX3Jlc2V0RXZlbnRMb29wKCd0eXBpbmdBbmltYXRpb25GcmFtZScpO1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXG5cdFx0aWYodHlwaW5nX3NwZWVkID09ICduYXR1cmFsJykge1xuXHRcdFx0dHlwaW5nX3NwZWVkID0gdGhpcy5fcmFuZG9tSW50ZWdlcig1MCwgMTUwKTtcblx0XHR9XG5cblx0XHRzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIGVsX2lubmVyX2h0bWwgPSBzZWxmLmVsLmlubmVySFRNTDtcblx0XHRcdHZhciBpdGVtX3RvX3R5cGUgPSBzZWxmLl9zZXR0aW5ncy5zdHJpbmdUb1R5cGVIVE1MQXJyYXlbMF07XG5cdFx0XHRzZWxmLmVsLnF1ZXJ5U2VsZWN0b3IoJy4nICsgdHlwZXdyaXRlcl93cmFwcGVyX2NsYXNzX25hbWUpLmFwcGVuZENoaWxkKGl0ZW1fdG9fdHlwZS5lbCk7XG5cdFx0XHRzZWxmLl9zZXR0aW5ncy5jdXJyZW50VHlwZWRDaGFyYWN0ZXJzLnB1c2goaXRlbV90b190eXBlLmlkKTtcblx0XHRcdHNlbGYuX3NldHRpbmdzLnN0cmluZ1RvVHlwZUhUTUxBcnJheS5zcGxpY2UoMCwgMSk7XG5cdFx0XHRzZWxmLl90eXBpbmdBbmltYXRpb24gPSB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKHNlbGYuX3R5cGluZ0FuaW1hdGlvbkZyYW1lLmJpbmQoc2VsZiwgdG90YWxfaXRlbXMpKTtcblx0XHRcdGlmKHNlbGYub3B0aW9ucy5kZXZNb2RlKSB7XG5cdFx0XHRcdGNvbnNvbGUubG9nKCdUeXBlZCcsIGl0ZW1fdG9fdHlwZSk7XG5cdFx0XHR9XG5cdFx0fSwgdHlwaW5nX3NwZWVkKTtcblx0fTtcblxuXHRUeXBld3JpdGVyUHJvdG90eXBlLl9jb252ZXJ0Q2hhcnNUb0hUTUwgPSBmdW5jdGlvbihjaGFycykge1xuXHRcdHZhciBjaGFyc19odG1sX3dyYXBfYXJyYXkgPSBbXTtcblx0XHR2YXIgY2hhcl9jbGFzc19uYW1lID0gdGhpcy5vcHRpb25zLmNoYXJTcGFuQ2xhc3NOYW1lO1xuXHRcdHZhciBjaGFyc19hcnJheSA9IGNoYXJzWzBdO1xuXG5cdFx0Zm9yKHZhciBpID0gMCwgbGVuZ3RoID0gY2hhcnNfYXJyYXkubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcblx0XHRcdHZhciBjaGFyX2VsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJyk7XG5cdFx0XHR2YXIgY2hhcl9pZCA9IHRoaXMuX2dlbmVyYXRlVW5pcXVlSUQoKTtcblx0XHRcdGNoYXJfZWxlbWVudC5pZCA9IGNoYXJfaWQ7XG5cdFx0XHRjaGFyX2VsZW1lbnQuY2xhc3NOYW1lID0gY2hhcl9jbGFzc19uYW1lICsgJyB0eXBld3JpdGVyLWl0ZW0tJyArIGk7XG5cdFx0XHRjaGFyX2VsZW1lbnQuaW5uZXJIVE1MID0gY2hhcnNfYXJyYXlbaV07XG5cdFx0XHRjaGFyc19odG1sX3dyYXBfYXJyYXkucHVzaCh7XG5cdFx0XHRcdGlkOiBjaGFyX2lkLFxuXHRcdFx0XHRlbDogY2hhcl9lbGVtZW50XG5cdFx0XHR9KTtcblx0XHR9XG5cblx0XHRyZXR1cm4gY2hhcnNfaHRtbF93cmFwX2FycmF5O1xuXHR9O1xuXG5cdFR5cGV3cml0ZXJQcm90b3R5cGUuX2dldENoYXJhY3RlcnMgPSBmdW5jdGlvbihzdHJpbmcpIHtcblx0XHRpZih0eXBlb2Ygc3RyaW5nICE9PSAnc3RyaW5nJykge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0XHRyZXR1cm4gc3RyaW5nLnNwbGl0KFwiXCIpO1xuXHR9O1xuXG5cdFR5cGV3cml0ZXJQcm90b3R5cGUuX2dldFN0cmluZ3NBc0NoYXJzQXJyYXkgPSBmdW5jdGlvbigpIHtcblx0XHR2YXIgc3RyaW5nc19hcnJheV9jaGVjayA9IHRoaXMub3B0aW9ucy5zdHJpbmdzIGluc3RhbmNlb2YgQXJyYXk7XG5cdFx0dmFyIHN0cmluZ3Nfc3RyaW5nX2NoZWNrID0gdHlwZW9mIHRoaXMub3B0aW9ucy5zdHJpbmdzID09PSAnc3RyaW5nJztcblx0XHRpZighc3RyaW5nc19hcnJheV9jaGVjaykge1xuXHRcdFx0aWYoIXN0cmluZ3Nfc3RyaW5nX2NoZWNrKSB7XG5cdFx0XHRcdHJldHVybiBjb25zb2xlLmVycm9yKCdUeXBld3JpdGVyIG9ubHkgYWNjZXB0cyBzdHJpbmdzIG9yIGFuIGFycmF5IG9mIHN0cmluZ3MgYXMgdGhlIGlucHV0LicpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIFt0aGlzLm9wdGlvbnMuc3RyaW5ncy5zcGxpdChcIlwiKV07XG5cdFx0fVxuXG5cdFx0dmFyIHN0cmluZ3NfY2hhcnNfYXJyYXkgPSBbXTtcblxuXHRcdGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSB0aGlzLm9wdGlvbnMuc3RyaW5ncy5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xuXHRcdFx0dmFyIHN0cmluZ19jaGFycyA9IHRoaXMuX2dldENoYXJhY3RlcnModGhpcy5vcHRpb25zLnN0cmluZ3NbaV0pO1xuXHRcdFx0aWYoIXN0cmluZ19jaGFycykge1xuXHRcdFx0XHRjb25zb2xlLmVycm9yKCdQbGVhc2UgZW50ZXIgb25seSBzdHJpbmdzLicpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHRcdHN0cmluZ3NfY2hhcnNfYXJyYXkucHVzaChzdHJpbmdfY2hhcnMpO1xuICAgIFx0fVxuXG4gICAgXHRyZXR1cm4gc3RyaW5nc19jaGFyc19hcnJheTtcblx0fTtcblxuXHRUeXBld3JpdGVyUHJvdG90eXBlLl9jdXJzb3JBbmltYXRpb25GcmFtZSA9IGZ1bmN0aW9uKCkge1xuXHRcdGlmKCF0aGlzLl9zZXR0aW5ncy5jdXJzb3JBbmltYXRpb25QYXVzZWQpIHtcblx0XHRcdHZhciBibGlua19zcGVlZCA9IHRoaXMub3B0aW9ucy5ibGlua1NwZWVkO1xuXHRcdFx0dmFyIG9wYWNpdHlfYW1vdW50ID0gKDEvMTAwMCkgKiBibGlua19zcGVlZDtcblxuXHRcdFx0dmFyIGN1cnNvcl9lbCA9IHRoaXMuZWwucXVlcnlTZWxlY3RvcignLnR5cGV3cml0ZXItY3Vyc29yJyk7XG5cblx0XHRcdGlmKHRoaXMuX3NldHRpbmdzLm9wYWNpdHlJbmNyZWFzaW5nID09IHRydWUpIHtcblx0XHRcdFx0aWYodGhpcy5fc2V0dGluZ3MuY3VycmVudE9wYWNpdHkgPj0gMSkge1xuXHRcdFx0XHRcdHRoaXMuX3NldHRpbmdzLm9wYWNpdHlJbmNyZWFzaW5nID0gZmFsc2U7XG5cdFx0XHRcdFx0dGhpcy5fc2V0dGluZ3MuY3VycmVudE9wYWNpdHkgPSAxO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0dGhpcy5fc2V0dGluZ3MuY3VycmVudE9wYWNpdHkgKz0gb3BhY2l0eV9hbW91bnQ7XG5cdFx0XHR9XG5cblx0XHRcdGlmKHRoaXMuX3NldHRpbmdzLm9wYWNpdHlJbmNyZWFzaW5nID09IGZhbHNlKSB7XG5cdFx0XHRcdGlmKHRoaXMuX3NldHRpbmdzLmN1cnJlbnRPcGFjaXR5IDw9IDApIHtcblx0XHRcdFx0XHR0aGlzLl9zZXR0aW5ncy5vcGFjaXR5SW5jcmVhc2luZyA9IHRydWU7XG5cdFx0XHRcdFx0dGhpcy5fc2V0dGluZ3MuY3VycmVudE9wYWNpdHkgPSAwO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0dGhpcy5fc2V0dGluZ3MuY3VycmVudE9wYWNpdHkgLT0gb3BhY2l0eV9hbW91bnQ7XG5cdFx0XHR9XG5cblx0XHRcdGN1cnNvcl9lbC5zdHlsZS5vcGFjaXR5ID0gdGhpcy5fc2V0dGluZ3MuY3VycmVudE9wYWNpdHk7XG5cdFx0XHR0aGlzLl9jdXJzb3JBbmltYXRpb24gPSB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRoaXMuX2N1cnNvckFuaW1hdGlvbkZyYW1lLmJpbmQodGhpcykpO1xuXHRcdH1cblx0fTtcblxuXHRUeXBld3JpdGVyUHJvdG90eXBlLmFwcGVuZFRleHQgPSBmdW5jdGlvbih0ZXh0KXtcblx0ICAgIHRoaXMuX2FkZFRvRXZlbnRRdWUoW3RoaXMuX2FwcGVuZFRleHQsIFt0ZXh0XV0pXG4gICAgICAgIHJldHVybiB0aGlzXG4gICAgfVxuXG5cdFR5cGV3cml0ZXJQcm90b3R5cGUuX2FwcGVuZFRleHQgPSBmdW5jdGlvbih0ZXh0KXtcbiAgICAgICAgICAgIHZhciBjaGFyX2NsYXNzX25hbWUgPSB0aGlzLm9wdGlvbnMuY2hhclNwYW5DbGFzc05hbWU7XG4gICAgICAgICAgICB2YXIgY2hhcl9lbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpO1xuICAgICAgICAgICAgdmFyIGNoYXJfaWQgPSB0aGlzLl9nZW5lcmF0ZVVuaXF1ZUlEKCk7XG4gICAgICAgICAgICBjaGFyX2VsZW1lbnQuaWQgPSBjaGFyX2lkO1xuICAgICAgICAgICAgY2hhcl9lbGVtZW50LmNsYXNzTmFtZSA9IGNoYXJfY2xhc3NfbmFtZSArICcgZG9tLWFwcGVuZGVkJ1xuICAgICAgICAgICAgY2hhcl9lbGVtZW50LmlubmVySFRNTCA9IHRleHRcbiAgICAgICAgICAgIHZhciBpdGVtcyA9ICBbXVxuICAgICAgICAgICAgaXRlbXMucHVzaCh7XG4gICAgICAgICAgICAgICAgaWQ6IGNoYXJfaWQsXG4gICAgICAgICAgICAgICAgZWw6IGNoYXJfZWxlbWVudFxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHRoaXMuX3NldHRpbmdzLnN0cmluZ1RvVHlwZUhUTUxBcnJheSA9IGl0ZW1zXG5cbiAgICAgICAgICAgIHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGhpcy5fdHlwaW5nQW5pbWF0aW9uRnJhbWUuYmluZCh0aGlzLCAxKSk7XG5cbiAgICB9XG5cblx0VHlwZXdyaXRlclByb3RvdHlwZS5fc3RhcnRDdXJzb3JBbmltYXRpb24gPSBmdW5jdGlvbigpIHtcblx0XHR2YXIgY3Vyc29yID0gdGhpcy5vcHRpb25zLmN1cnNvcjtcblx0XHR2YXIgY3Vyc29yX2NsYXNzX25hbWUgPSB0aGlzLm9wdGlvbnMuY3Vyc29yQ2xhc3NOYW1lO1xuXG5cdFx0dmFyIGN1cnNvcl9lbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpO1xuXHRcdGN1cnNvcl9lbGVtZW50LmNsYXNzTmFtZSA9IGN1cnNvcl9jbGFzc19uYW1lO1xuXHRcdGN1cnNvcl9lbGVtZW50LmlubmVySFRNTCA9IGN1cnNvcjtcblxuXHRcdHRoaXMuZWwuYXBwZW5kQ2hpbGQoY3Vyc29yX2VsZW1lbnQpO1xuXHRcdGlmKHRoaXMub3B0aW9ucy5hbmltYXRlQ3Vyc29yKSB7XG5cdFx0XHR0aGlzLl9jdXJzb3JBbmltYXRpb24gPSB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRoaXMuX2N1cnNvckFuaW1hdGlvbkZyYW1lLmJpbmQodGhpcykpO1xuXHRcdH1cblx0fTtcblxuXHRUeXBld3JpdGVyUHJvdG90eXBlLl9wYXVzZUN1cnNvckFuaW1hdGlvbiA9IGZ1bmN0aW9uKCkge1xuXHRcdGlmKCF0aGlzLl9zZXR0aW5ncy5jdXJzb3JBbmltYXRpb25QYXVzZWQpIHtcblx0XHRcdHdpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLl9jdXJzb3JBbmltYXRpb24pO1xuXHRcdFx0dGhpcy5fc2V0dGluZ3MuY3Vyc29yQW5pbWF0aW9uUGF1c2VkID0gdHJ1ZTtcblx0XHR9XG5cdH07XG5cblx0VHlwZXdyaXRlclByb3RvdHlwZS5fcmVzdGFydEN1cnNvckFuaW1hdGlvbiA9IGZ1bmN0aW9uKCkge1xuXHRcdGlmKCF0aGlzLl9zZXR0aW5ncy5jdXJzb3JBbmltYXRpb25QYXVzZWQpIHtcblx0XHRcdHJldHVybiBjb25zb2xlLmVycm9yKCdDdXJzb3IgYW5pbWF0aW9uIGlzIGFscmVhZHkgcnVubmluZy4nKVxuXHRcdH1cblxuXHRcdHRoaXMuX3NldHRpbmdzLmN1cnNvckFuaW1hdGlvblBhdXNlZCA9IGZhbHNlO1xuXHRcdHRoaXMuX2N1cnNvckFuaW1hdGlvbiA9IHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGhpcy5fY3Vyc29yQW5pbWF0aW9uRnJhbWUuYmluZCh0aGlzKSk7XG5cdH07XG5cblx0LyogVXRpbHMgKi9cblx0VHlwZXdyaXRlclByb3RvdHlwZS5fcmFuZG9tSW50ZWdlciA9IGZ1bmN0aW9uKG1pbiwgbWF4KSB7XG5cdFx0cmV0dXJuIE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIChtYXggLSBtaW4gKyAxKSkgKyBtaW47XG5cdH07XG5cblx0VHlwZXdyaXRlclByb3RvdHlwZS5fcmFuZG9tSUQgPSBmdW5jdGlvbigpIHtcblx0XHR2YXIgdGV4dCA9IFwiXCI7XG4gICAgXHR2YXIgcG9zc2libGUgPSBcIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5XCI7XG5cbiAgICBcdGZvciggdmFyIGk9MDsgaSA8IHRoaXMuX3JhbmRvbUludGVnZXIoNSwgMTUpOyBpKysgKSB7XG4gICAgXHRcdHRleHQgKz0gcG9zc2libGUuY2hhckF0KE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIHBvc3NpYmxlLmxlbmd0aCkpO1xuXHRcdH1cbiAgICBcdHJldHVybiB0ZXh0O1xuXHR9O1xuXG5cdFR5cGV3cml0ZXJQcm90b3R5cGUuX2dlbmVyYXRlVW5pcXVlSUQgPSBmdW5jdGlvbigpIHtcblx0XHR2YXIgdGVtcF9pZCA9IHRoaXMuX3JhbmRvbUlEKCk7XG5cdFx0aWYodGhpcy5fc2V0dGluZ3MudXNlZElEcy5pbmRleE9mKHRlbXBfaWQpID09IC0xKSB7XG5cdFx0XHR0aGlzLl9zZXR0aW5ncy51c2VkSURzLnB1c2godGVtcF9pZCk7XG5cdFx0XHRyZXR1cm4gdGVtcF9pZDtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXMuX2dlbmVyYXRlVW5pcXVlSUQuY2FsbCh0aGlzKTtcblx0fTtcblxuXG59KSgpOyIsIi8qISBVSWtpdCAzLjAuMC1yYy41IHwgaHR0cDovL3d3dy5nZXR1aWtpdC5jb20gfCAoYykgMjAxNCAtIDIwMTcgWU9PdGhlbWUgfCBNSVQgTGljZW5zZSAqL1xuXG4oZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJyA/IG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeSgpIDpcbiAgICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoJ3Vpa2l0JywgZmFjdG9yeSkgOlxuICAgIChnbG9iYWwuVUlraXQgPSBmYWN0b3J5KCkpO1xufSh0aGlzLCAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICBmdW5jdGlvbiBiaW5kKGZuLCBjb250ZXh0KSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoYSkge1xuICAgICAgICAgICAgdmFyIGwgPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgICAgICAgICAgcmV0dXJuIGwgPyBsID4gMSA/IGZuLmFwcGx5KGNvbnRleHQsIGFyZ3VtZW50cykgOiBmbi5jYWxsKGNvbnRleHQsIGEpIDogZm4uY2FsbChjb250ZXh0KTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICB2YXIgcmVmID0gT2JqZWN0LnByb3RvdHlwZTtcbiAgICB2YXIgaGFzT3duUHJvcGVydHkgPSByZWYuaGFzT3duUHJvcGVydHk7XG5cbiAgICBmdW5jdGlvbiBoYXNPd24ob2JqLCBrZXkpIHtcbiAgICAgICAgcmV0dXJuIGhhc093blByb3BlcnR5LmNhbGwob2JqLCBrZXkpO1xuICAgIH1cblxuICAgIHZhciBoeXBoZW5hdGVDYWNoZSA9IHt9O1xuICAgIHZhciBoeXBoZW5hdGVSZSA9IC8oW2EtelxcZF0pKFtBLVpdKS9nO1xuXG4gICAgZnVuY3Rpb24gaHlwaGVuYXRlKHN0cikge1xuXG4gICAgICAgIGlmICghKHN0ciBpbiBoeXBoZW5hdGVDYWNoZSkpIHtcbiAgICAgICAgICAgIGh5cGhlbmF0ZUNhY2hlW3N0cl0gPSBzdHJcbiAgICAgICAgICAgICAgICAucmVwbGFjZShoeXBoZW5hdGVSZSwgJyQxLSQyJylcbiAgICAgICAgICAgICAgICAudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBoeXBoZW5hdGVDYWNoZVtzdHJdO1xuICAgIH1cblxuICAgIHZhciBjYW1lbGl6ZVJlID0gLy0oXFx3KS9nO1xuXG4gICAgZnVuY3Rpb24gY2FtZWxpemUoc3RyKSB7XG4gICAgICAgIHJldHVybiBzdHIucmVwbGFjZShjYW1lbGl6ZVJlLCB0b1VwcGVyKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB0b1VwcGVyKF8sIGMpIHtcbiAgICAgICAgcmV0dXJuIGMgPyBjLnRvVXBwZXJDYXNlKCkgOiAnJztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB1Y2ZpcnN0KHN0cikge1xuICAgICAgICByZXR1cm4gc3RyLmxlbmd0aCA/IHRvVXBwZXIobnVsbCwgc3RyLmNoYXJBdCgwKSkgKyBzdHIuc2xpY2UoMSkgOiAnJztcbiAgICB9XG5cbiAgICB2YXIgc3RyUHJvdG90eXBlID0gU3RyaW5nLnByb3RvdHlwZTtcbiAgICB2YXIgc3RhcnRzV2l0aEZuID0gc3RyUHJvdG90eXBlLnN0YXJ0c1dpdGggfHwgZnVuY3Rpb24gKHNlYXJjaCkgeyByZXR1cm4gdGhpcy5sYXN0SW5kZXhPZihzZWFyY2gsIDApID09PSAwOyB9O1xuXG4gICAgZnVuY3Rpb24gc3RhcnRzV2l0aChzdHIsIHNlYXJjaCkge1xuICAgICAgICByZXR1cm4gc3RhcnRzV2l0aEZuLmNhbGwoc3RyLCBzZWFyY2gpO1xuICAgIH1cblxuICAgIHZhciBlbmRzV2l0aEZuID0gc3RyUHJvdG90eXBlLmVuZHNXaXRoIHx8IGZ1bmN0aW9uIChzZWFyY2gpIHsgcmV0dXJuIHRoaXMuc3Vic3RyKC1zZWFyY2gubGVuZ3RoKSA9PT0gc2VhcmNoOyB9O1xuXG4gICAgZnVuY3Rpb24gZW5kc1dpdGgoc3RyLCBzZWFyY2gpIHtcbiAgICAgICAgcmV0dXJuIGVuZHNXaXRoRm4uY2FsbChzdHIsIHNlYXJjaCk7XG4gICAgfVxuXG4gICAgdmFyIGluY2x1ZGVzRm4gPSBmdW5jdGlvbiAoc2VhcmNoKSB7IHJldHVybiB+dGhpcy5pbmRleE9mKHNlYXJjaCk7IH07XG4gICAgdmFyIGluY2x1ZGVzU3RyID0gc3RyUHJvdG90eXBlLmluY2x1ZGVzIHx8IGluY2x1ZGVzRm47XG4gICAgdmFyIGluY2x1ZGVzQXJyYXkgPSBBcnJheS5wcm90b3R5cGUuaW5jbHVkZXMgfHwgaW5jbHVkZXNGbjtcblxuICAgIGZ1bmN0aW9uIGluY2x1ZGVzKG9iaiwgc2VhcmNoKSB7XG4gICAgICAgIHJldHVybiBvYmogJiYgKGlzU3RyaW5nKG9iaikgPyBpbmNsdWRlc1N0ciA6IGluY2x1ZGVzQXJyYXkpLmNhbGwob2JqLCBzZWFyY2gpO1xuICAgIH1cblxuICAgIHZhciBpc0FycmF5ID0gQXJyYXkuaXNBcnJheTtcblxuICAgIGZ1bmN0aW9uIGlzRnVuY3Rpb24ob2JqKSB7XG4gICAgICAgIHJldHVybiB0eXBlb2Ygb2JqID09PSAnZnVuY3Rpb24nO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzT2JqZWN0KG9iaikge1xuICAgICAgICByZXR1cm4gb2JqICE9PSBudWxsICYmIHR5cGVvZiBvYmogPT09ICdvYmplY3QnO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzUGxhaW5PYmplY3Qob2JqKSB7XG4gICAgICAgIHJldHVybiBpc09iamVjdChvYmopICYmIE9iamVjdC5nZXRQcm90b3R5cGVPZihvYmopID09PSBPYmplY3QucHJvdG90eXBlO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzV2luZG93KG9iaikge1xuICAgICAgICByZXR1cm4gaXNPYmplY3Qob2JqKSAmJiBvYmogPT09IG9iai53aW5kb3c7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNEb2N1bWVudChvYmopIHtcbiAgICAgICAgcmV0dXJuIGlzT2JqZWN0KG9iaikgJiYgb2JqLm5vZGVUeXBlID09PSA5O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzSlF1ZXJ5KG9iaikge1xuICAgICAgICByZXR1cm4gaXNPYmplY3Qob2JqKSAmJiAhIW9iai5qcXVlcnk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNOb2RlKGVsZW1lbnQpIHtcbiAgICAgICAgcmV0dXJuIGVsZW1lbnQgaW5zdGFuY2VvZiBOb2RlIHx8IGlzT2JqZWN0KGVsZW1lbnQpICYmIGVsZW1lbnQubm9kZVR5cGUgPT09IDE7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNOb2RlQ29sbGVjdGlvbihlbGVtZW50KSB7XG4gICAgICAgIHJldHVybiBlbGVtZW50IGluc3RhbmNlb2YgTm9kZUxpc3QgfHwgZWxlbWVudCBpbnN0YW5jZW9mIEhUTUxDb2xsZWN0aW9uO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzQm9vbGVhbih2YWx1ZSkge1xuICAgICAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnYm9vbGVhbic7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNTdHJpbmcodmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZyc7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNOdW1iZXIodmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcic7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNOdW1lcmljKHZhbHVlKSB7XG4gICAgICAgIHJldHVybiBpc051bWJlcih2YWx1ZSkgfHwgaXNTdHJpbmcodmFsdWUpICYmICFpc05hTih2YWx1ZSAtIHBhcnNlRmxvYXQodmFsdWUpKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc1VuZGVmaW5lZCh2YWx1ZSkge1xuICAgICAgICByZXR1cm4gdmFsdWUgPT09IHZvaWQgMDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB0b0Jvb2xlYW4odmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIGlzQm9vbGVhbih2YWx1ZSlcbiAgICAgICAgICAgID8gdmFsdWVcbiAgICAgICAgICAgIDogdmFsdWUgPT09ICd0cnVlJyB8fCB2YWx1ZSA9PT0gJzEnIHx8IHZhbHVlID09PSAnJ1xuICAgICAgICAgICAgICAgID8gdHJ1ZVxuICAgICAgICAgICAgICAgIDogdmFsdWUgPT09ICdmYWxzZScgfHwgdmFsdWUgPT09ICcwJ1xuICAgICAgICAgICAgICAgICAgICA/IGZhbHNlXG4gICAgICAgICAgICAgICAgICAgIDogdmFsdWU7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdG9OdW1iZXIodmFsdWUpIHtcbiAgICAgICAgdmFyIG51bWJlciA9IE51bWJlcih2YWx1ZSk7XG4gICAgICAgIHJldHVybiAhaXNOYU4obnVtYmVyKSA/IG51bWJlciA6IGZhbHNlO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHRvRmxvYXQodmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIHBhcnNlRmxvYXQodmFsdWUpIHx8IDA7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdG9Ob2RlKGVsZW1lbnQpIHtcbiAgICAgICAgcmV0dXJuIGlzTm9kZShlbGVtZW50KSB8fCBpc1dpbmRvdyhlbGVtZW50KSB8fCBpc0RvY3VtZW50KGVsZW1lbnQpXG4gICAgICAgICAgICA/IGVsZW1lbnRcbiAgICAgICAgICAgIDogaXNOb2RlQ29sbGVjdGlvbihlbGVtZW50KSB8fCBpc0pRdWVyeShlbGVtZW50KVxuICAgICAgICAgICAgICAgID8gZWxlbWVudFswXVxuICAgICAgICAgICAgICAgIDogaXNBcnJheShlbGVtZW50KVxuICAgICAgICAgICAgICAgICAgICA/IHRvTm9kZShlbGVtZW50WzBdKVxuICAgICAgICAgICAgICAgICAgICA6IG51bGw7XG4gICAgfVxuXG4gICAgdmFyIGFycmF5UHJvdG8gPSBBcnJheS5wcm90b3R5cGU7XG4gICAgZnVuY3Rpb24gdG9Ob2RlcyhlbGVtZW50KSB7XG4gICAgICAgIHJldHVybiBpc05vZGUoZWxlbWVudClcbiAgICAgICAgICAgID8gW2VsZW1lbnRdXG4gICAgICAgICAgICA6IGlzTm9kZUNvbGxlY3Rpb24oZWxlbWVudClcbiAgICAgICAgICAgICAgICA/IGFycmF5UHJvdG8uc2xpY2UuY2FsbChlbGVtZW50KVxuICAgICAgICAgICAgICAgIDogaXNBcnJheShlbGVtZW50KVxuICAgICAgICAgICAgICAgICAgICA/IGVsZW1lbnQubWFwKHRvTm9kZSkuZmlsdGVyKEJvb2xlYW4pXG4gICAgICAgICAgICAgICAgICAgIDogaXNKUXVlcnkoZWxlbWVudClcbiAgICAgICAgICAgICAgICAgICAgICAgID8gZWxlbWVudC50b0FycmF5KClcbiAgICAgICAgICAgICAgICAgICAgICAgIDogW107XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdG9MaXN0KHZhbHVlKSB7XG4gICAgICAgIHJldHVybiBpc0FycmF5KHZhbHVlKVxuICAgICAgICAgICAgPyB2YWx1ZVxuICAgICAgICAgICAgOiBpc1N0cmluZyh2YWx1ZSlcbiAgICAgICAgICAgICAgICA/IHZhbHVlLnNwbGl0KC8sKD8hW14oXSpcXCkpLykubWFwKGZ1bmN0aW9uICh2YWx1ZSkgeyByZXR1cm4gaXNOdW1lcmljKHZhbHVlKVxuICAgICAgICAgICAgICAgICAgICA/IHRvTnVtYmVyKHZhbHVlKVxuICAgICAgICAgICAgICAgICAgICA6IHRvQm9vbGVhbih2YWx1ZS50cmltKCkpOyB9KVxuICAgICAgICAgICAgICAgIDogW3ZhbHVlXTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB0b01zKHRpbWUpIHtcbiAgICAgICAgcmV0dXJuICF0aW1lXG4gICAgICAgICAgICA/IDBcbiAgICAgICAgICAgIDogZW5kc1dpdGgodGltZSwgJ21zJylcbiAgICAgICAgICAgICAgICA/IHRvRmxvYXQodGltZSlcbiAgICAgICAgICAgICAgICA6IHRvRmxvYXQodGltZSkgKiAxMDAwO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHN3YXAodmFsdWUsIGEsIGIpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlLnJlcGxhY2UobmV3IFJlZ0V4cCgoYSArIFwifFwiICsgYiksICdtZycpLCBmdW5jdGlvbiAobWF0Y2gpIHtcbiAgICAgICAgICAgIHJldHVybiBtYXRjaCA9PT0gYSA/IGIgOiBhO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICB2YXIgYXNzaWduID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7XG4gICAgICAgIHZhciBhcmdzID0gW10sIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGggLSAxO1xuICAgICAgICB3aGlsZSAoIGxlbi0tID4gMCApIGFyZ3NbIGxlbiBdID0gYXJndW1lbnRzWyBsZW4gKyAxIF07XG5cbiAgICAgICAgdGFyZ2V0ID0gT2JqZWN0KHRhcmdldCk7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJncy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdmFyIHNvdXJjZSA9IGFyZ3NbaV07XG4gICAgICAgICAgICBpZiAoc291cmNlICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgZm9yICh2YXIga2V5IGluIHNvdXJjZSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaGFzT3duKHNvdXJjZSwga2V5KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGFyZ2V0O1xuICAgIH07XG5cbiAgICBmdW5jdGlvbiBlYWNoKG9iaiwgY2IpIHtcbiAgICAgICAgZm9yICh2YXIga2V5IGluIG9iaikge1xuICAgICAgICAgICAgY2IuY2FsbChvYmpba2V5XSwgb2JqW2tleV0sIGtleSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzb3J0QnkoY29sbGVjdGlvbiwgcHJvcCkge1xuICAgICAgICByZXR1cm4gY29sbGVjdGlvbi5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7IHJldHVybiBhW3Byb3BdID4gYltwcm9wXVxuICAgICAgICAgICAgICAgID8gMVxuICAgICAgICAgICAgICAgIDogYltwcm9wXSA+IGFbcHJvcF1cbiAgICAgICAgICAgICAgICAgICAgPyAtMVxuICAgICAgICAgICAgICAgICAgICA6IDA7IH1cbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjbGFtcChudW1iZXIsIG1pbiwgbWF4KSB7XG4gICAgICAgIGlmICggbWluID09PSB2b2lkIDAgKSBtaW4gPSAwO1xuICAgICAgICBpZiAoIG1heCA9PT0gdm9pZCAwICkgbWF4ID0gMTtcblxuICAgICAgICByZXR1cm4gTWF0aC5taW4oTWF0aC5tYXgobnVtYmVyLCBtaW4pLCBtYXgpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG5vb3AoKSB7fVxuXG4gICAgZnVuY3Rpb24gaW50ZXJzZWN0UmVjdChyMSwgcjIpIHtcbiAgICAgICAgcmV0dXJuIHIxLmxlZnQgPD0gcjIucmlnaHQgJiZcbiAgICAgICAgICAgIHIyLmxlZnQgPD0gcjEucmlnaHQgJiZcbiAgICAgICAgICAgIHIxLnRvcCA8PSByMi5ib3R0b20gJiZcbiAgICAgICAgICAgIHIyLnRvcCA8PSByMS5ib3R0b207XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcG9pbnRJblJlY3QocG9pbnQsIHJlY3QpIHtcbiAgICAgICAgcmV0dXJuIGludGVyc2VjdFJlY3Qoe3RvcDogcG9pbnQueSwgYm90dG9tOiBwb2ludC55LCBsZWZ0OiBwb2ludC54LCByaWdodDogcG9pbnQueH0sIHJlY3QpO1xuICAgIH1cblxuICAgIHZhciBEaW1lbnNpb25zID0ge1xuXG4gICAgICAgIHJhdGlvOiBmdW5jdGlvbihkaW1lbnNpb25zLCBwcm9wLCB2YWx1ZSkge1xuICAgICAgICAgICAgdmFyIG9iajtcblxuXG4gICAgICAgICAgICB2YXIgYVByb3AgPSBwcm9wID09PSAnd2lkdGgnID8gJ2hlaWdodCcgOiAnd2lkdGgnO1xuXG4gICAgICAgICAgICByZXR1cm4gKCBvYmogPSB7fSwgb2JqW2FQcm9wXSA9IE1hdGgucm91bmQodmFsdWUgKiBkaW1lbnNpb25zW2FQcm9wXSAvIGRpbWVuc2lvbnNbcHJvcF0pLCBvYmpbcHJvcF0gPSB2YWx1ZSwgb2JqICk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgY29udGFpbjogZnVuY3Rpb24oZGltZW5zaW9ucywgbWF4RGltZW5zaW9ucykge1xuICAgICAgICAgICAgdmFyIHRoaXMkMSA9IHRoaXM7XG5cbiAgICAgICAgICAgIGRpbWVuc2lvbnMgPSBhc3NpZ24oe30sIGRpbWVuc2lvbnMpO1xuXG4gICAgICAgICAgICBlYWNoKGRpbWVuc2lvbnMsIGZ1bmN0aW9uIChfLCBwcm9wKSB7IHJldHVybiBkaW1lbnNpb25zID0gZGltZW5zaW9uc1twcm9wXSA+IG1heERpbWVuc2lvbnNbcHJvcF1cbiAgICAgICAgICAgICAgICA/IHRoaXMkMS5yYXRpbyhkaW1lbnNpb25zLCBwcm9wLCBtYXhEaW1lbnNpb25zW3Byb3BdKVxuICAgICAgICAgICAgICAgIDogZGltZW5zaW9uczsgfVxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgcmV0dXJuIGRpbWVuc2lvbnM7XG4gICAgICAgIH0sXG5cbiAgICAgICAgY292ZXI6IGZ1bmN0aW9uKGRpbWVuc2lvbnMsIG1heERpbWVuc2lvbnMpIHtcbiAgICAgICAgICAgIHZhciB0aGlzJDEgPSB0aGlzO1xuXG4gICAgICAgICAgICBkaW1lbnNpb25zID0gdGhpcy5jb250YWluKGRpbWVuc2lvbnMsIG1heERpbWVuc2lvbnMpO1xuXG4gICAgICAgICAgICBlYWNoKGRpbWVuc2lvbnMsIGZ1bmN0aW9uIChfLCBwcm9wKSB7IHJldHVybiBkaW1lbnNpb25zID0gZGltZW5zaW9uc1twcm9wXSA8IG1heERpbWVuc2lvbnNbcHJvcF1cbiAgICAgICAgICAgICAgICA/IHRoaXMkMS5yYXRpbyhkaW1lbnNpb25zLCBwcm9wLCBtYXhEaW1lbnNpb25zW3Byb3BdKVxuICAgICAgICAgICAgICAgIDogZGltZW5zaW9uczsgfVxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgcmV0dXJuIGRpbWVuc2lvbnM7XG4gICAgICAgIH1cblxuICAgIH07XG5cbiAgICBmdW5jdGlvbiBhdHRyKGVsZW1lbnQsIG5hbWUsIHZhbHVlKSB7XG5cbiAgICAgICAgaWYgKGlzT2JqZWN0KG5hbWUpKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBrZXkgaW4gbmFtZSkge1xuICAgICAgICAgICAgICAgIGF0dHIoZWxlbWVudCwga2V5LCBuYW1lW2tleV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGlzVW5kZWZpbmVkKHZhbHVlKSkge1xuICAgICAgICAgICAgZWxlbWVudCA9IHRvTm9kZShlbGVtZW50KTtcbiAgICAgICAgICAgIHJldHVybiBlbGVtZW50ICYmIGVsZW1lbnQuZ2V0QXR0cmlidXRlKG5hbWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdG9Ob2RlcyhlbGVtZW50KS5mb3JFYWNoKGZ1bmN0aW9uIChlbGVtZW50KSB7XG5cbiAgICAgICAgICAgICAgICBpZiAoaXNGdW5jdGlvbih2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZS5jYWxsKGVsZW1lbnQsIGF0dHIoZWxlbWVudCwgbmFtZSkpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICByZW1vdmVBdHRyKGVsZW1lbnQsIG5hbWUpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKG5hbWUsIHZhbHVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaGFzQXR0cihlbGVtZW50LCBuYW1lKSB7XG4gICAgICAgIHJldHVybiB0b05vZGVzKGVsZW1lbnQpLnNvbWUoZnVuY3Rpb24gKGVsZW1lbnQpIHsgcmV0dXJuIGVsZW1lbnQuaGFzQXR0cmlidXRlKG5hbWUpOyB9KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiByZW1vdmVBdHRyKGVsZW1lbnQsIG5hbWUpIHtcbiAgICAgICAgZWxlbWVudCA9IHRvTm9kZXMoZWxlbWVudCk7XG4gICAgICAgIG5hbWUuc3BsaXQoJyAnKS5mb3JFYWNoKGZ1bmN0aW9uIChuYW1lKSB7IHJldHVybiBlbGVtZW50LmZvckVhY2goZnVuY3Rpb24gKGVsZW1lbnQpIHsgcmV0dXJuIGVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKG5hbWUpOyB9XG4gICAgICAgICAgICApOyB9XG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZmlsdGVyQXR0cihlbGVtZW50LCBhdHRyaWJ1dGUsIHBhdHRlcm4sIHJlcGxhY2VtZW50KSB7XG4gICAgICAgIGF0dHIoZWxlbWVudCwgYXR0cmlidXRlLCBmdW5jdGlvbiAodmFsdWUpIHsgcmV0dXJuIHZhbHVlID8gdmFsdWUucmVwbGFjZShwYXR0ZXJuLCByZXBsYWNlbWVudCkgOiB2YWx1ZTsgfSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZGF0YShlbGVtZW50LCBhdHRyaWJ1dGUpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIGF0dHJzID0gW2F0dHJpYnV0ZSwgKFwiZGF0YS1cIiArIGF0dHJpYnV0ZSldOyBpIDwgYXR0cnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChoYXNBdHRyKGVsZW1lbnQsIGF0dHJzW2ldKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBhdHRyKGVsZW1lbnQsIGF0dHJzW2ldKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHF1ZXJ5KHNlbGVjdG9yLCBjb250ZXh0KSB7XG4gICAgICAgIHJldHVybiB0b05vZGUoc2VsZWN0b3IpIHx8IGZpbmQoc2VsZWN0b3IsIGlzQ29udGV4dFNlbGVjdG9yKHNlbGVjdG9yKSA/IGNvbnRleHQgOiBkb2N1bWVudCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcXVlcnlBbGwoc2VsZWN0b3IsIGNvbnRleHQpIHtcbiAgICAgICAgdmFyIG5vZGVzID0gdG9Ob2RlcyhzZWxlY3Rvcik7XG4gICAgICAgIHJldHVybiBub2Rlcy5sZW5ndGggJiYgbm9kZXMgfHwgZmluZEFsbChzZWxlY3RvciwgaXNDb250ZXh0U2VsZWN0b3Ioc2VsZWN0b3IpID8gY29udGV4dCA6IGRvY3VtZW50KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBmaW5kKHNlbGVjdG9yLCBjb250ZXh0KSB7XG4gICAgICAgIHJldHVybiB0b05vZGUoX3F1ZXJ5KHNlbGVjdG9yLCBjb250ZXh0LCAncXVlcnlTZWxlY3RvcicpKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBmaW5kQWxsKHNlbGVjdG9yLCBjb250ZXh0KSB7XG4gICAgICAgIHJldHVybiB0b05vZGVzKF9xdWVyeShzZWxlY3RvciwgY29udGV4dCwgJ3F1ZXJ5U2VsZWN0b3JBbGwnKSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gX3F1ZXJ5KHNlbGVjdG9yLCBjb250ZXh0LCBxdWVyeUZuKSB7XG4gICAgICAgIGlmICggY29udGV4dCA9PT0gdm9pZCAwICkgY29udGV4dCA9IGRvY3VtZW50O1xuXG5cbiAgICAgICAgaWYgKCFzZWxlY3RvciB8fCAhaXNTdHJpbmcoc2VsZWN0b3IpKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHNlbGVjdG9yID0gc2VsZWN0b3IucmVwbGFjZShjb250ZXh0U2FuaXRpemVSZSwgJyQxIConKTtcblxuICAgICAgICB2YXIgcmVtb3ZlcztcblxuICAgICAgICBpZiAoaXNDb250ZXh0U2VsZWN0b3Ioc2VsZWN0b3IpKSB7XG5cbiAgICAgICAgICAgIHJlbW92ZXMgPSBbXTtcblxuICAgICAgICAgICAgc2VsZWN0b3IgPSBzZWxlY3Rvci5zcGxpdCgnLCcpLm1hcChmdW5jdGlvbiAoc2VsZWN0b3IsIGkpIHtcblxuICAgICAgICAgICAgICAgIHZhciBjdHggPSBjb250ZXh0O1xuXG4gICAgICAgICAgICAgICAgc2VsZWN0b3IgPSBzZWxlY3Rvci50cmltKCk7XG5cbiAgICAgICAgICAgICAgICBpZiAoc2VsZWN0b3JbMF0gPT09ICchJykge1xuXG4gICAgICAgICAgICAgICAgICAgIHZhciBzZWxlY3RvcnMgPSBzZWxlY3Rvci5zdWJzdHIoMSkudHJpbSgpLnNwbGl0KCcgJyk7XG4gICAgICAgICAgICAgICAgICAgIGN0eCA9IGNsb3Nlc3QoY29udGV4dC5wYXJlbnROb2RlLCBzZWxlY3RvcnNbMF0pO1xuICAgICAgICAgICAgICAgICAgICBzZWxlY3RvciA9IHNlbGVjdG9ycy5zbGljZSgxKS5qb2luKCcgJykudHJpbSgpO1xuXG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHNlbGVjdG9yWzBdID09PSAnLScpIHtcblxuICAgICAgICAgICAgICAgICAgICB2YXIgc2VsZWN0b3JzJDEgPSBzZWxlY3Rvci5zdWJzdHIoMSkudHJpbSgpLnNwbGl0KCcgJyk7XG4gICAgICAgICAgICAgICAgICAgIHZhciBwcmV2ID0gKGN0eCB8fCBjb250ZXh0KS5wcmV2aW91c0VsZW1lbnRTaWJsaW5nO1xuICAgICAgICAgICAgICAgICAgICBjdHggPSBtYXRjaGVzKHByZXYsIHNlbGVjdG9yLnN1YnN0cigxKSkgPyBwcmV2IDogbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0b3IgPSBzZWxlY3RvcnMkMS5zbGljZSgxKS5qb2luKCcgJyk7XG5cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoIWN0eCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoIWN0eC5pZCkge1xuICAgICAgICAgICAgICAgICAgICBjdHguaWQgPSBcInVrLVwiICsgKERhdGUubm93KCkpICsgaTtcbiAgICAgICAgICAgICAgICAgICAgcmVtb3Zlcy5wdXNoKGZ1bmN0aW9uICgpIHsgcmV0dXJuIHJlbW92ZUF0dHIoY3R4LCAnaWQnKTsgfSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIChcIiNcIiArIChlc2NhcGUoY3R4LmlkKSkgKyBcIiBcIiArIHNlbGVjdG9yKTtcblxuICAgICAgICAgICAgfSkuZmlsdGVyKEJvb2xlYW4pLmpvaW4oJywnKTtcblxuICAgICAgICAgICAgY29udGV4dCA9IGRvY3VtZW50O1xuXG4gICAgICAgIH1cblxuICAgICAgICB0cnkge1xuXG4gICAgICAgICAgICByZXR1cm4gY29udGV4dFtxdWVyeUZuXShzZWxlY3Rvcik7XG5cbiAgICAgICAgfSBjYXRjaCAoZSkge1xuXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcblxuICAgICAgICB9IGZpbmFsbHkge1xuXG4gICAgICAgICAgICByZW1vdmVzICYmIHJlbW92ZXMuZm9yRWFjaChmdW5jdGlvbiAocmVtb3ZlKSB7IHJldHVybiByZW1vdmUoKTsgfSk7XG5cbiAgICAgICAgfVxuXG4gICAgfVxuXG4gICAgdmFyIGNvbnRleHRTZWxlY3RvclJlID0gLyhefCwpXFxzKlshPit+LV0vO1xuICAgIHZhciBjb250ZXh0U2FuaXRpemVSZSA9IC8oWyE+K34tXSkoPz1cXHMrWyE+K34tXXxcXHMqJCkvZztcblxuICAgIGZ1bmN0aW9uIGlzQ29udGV4dFNlbGVjdG9yKHNlbGVjdG9yKSB7XG4gICAgICAgIHJldHVybiBpc1N0cmluZyhzZWxlY3RvcikgJiYgc2VsZWN0b3IubWF0Y2goY29udGV4dFNlbGVjdG9yUmUpO1xuICAgIH1cblxuICAgIHZhciBlbFByb3RvID0gRWxlbWVudC5wcm90b3R5cGU7XG4gICAgdmFyIG1hdGNoZXNGbiA9IGVsUHJvdG8ubWF0Y2hlcyB8fCBlbFByb3RvLndlYmtpdE1hdGNoZXNTZWxlY3RvciB8fCBlbFByb3RvLm1zTWF0Y2hlc1NlbGVjdG9yO1xuXG4gICAgZnVuY3Rpb24gbWF0Y2hlcyhlbGVtZW50LCBzZWxlY3Rvcikge1xuICAgICAgICByZXR1cm4gdG9Ob2RlcyhlbGVtZW50KS5zb21lKGZ1bmN0aW9uIChlbGVtZW50KSB7IHJldHVybiBtYXRjaGVzRm4uY2FsbChlbGVtZW50LCBzZWxlY3Rvcik7IH0pO1xuICAgIH1cblxuICAgIHZhciBjbG9zZXN0Rm4gPSBlbFByb3RvLmNsb3Nlc3QgfHwgZnVuY3Rpb24gKHNlbGVjdG9yKSB7XG4gICAgICAgIHZhciBhbmNlc3RvciA9IHRoaXM7XG5cbiAgICAgICAgZG8ge1xuXG4gICAgICAgICAgICBpZiAobWF0Y2hlcyhhbmNlc3Rvciwgc2VsZWN0b3IpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFuY2VzdG9yO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBhbmNlc3RvciA9IGFuY2VzdG9yLnBhcmVudE5vZGU7XG5cbiAgICAgICAgfSB3aGlsZSAoYW5jZXN0b3IgJiYgYW5jZXN0b3Iubm9kZVR5cGUgPT09IDEpO1xuICAgIH07XG5cbiAgICBmdW5jdGlvbiBjbG9zZXN0KGVsZW1lbnQsIHNlbGVjdG9yKSB7XG5cbiAgICAgICAgaWYgKHN0YXJ0c1dpdGgoc2VsZWN0b3IsICc+JykpIHtcbiAgICAgICAgICAgIHNlbGVjdG9yID0gc2VsZWN0b3Iuc2xpY2UoMSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gaXNOb2RlKGVsZW1lbnQpXG4gICAgICAgICAgICA/IGVsZW1lbnQucGFyZW50Tm9kZSAmJiBjbG9zZXN0Rm4uY2FsbChlbGVtZW50LCBzZWxlY3RvcilcbiAgICAgICAgICAgIDogdG9Ob2RlcyhlbGVtZW50KS5tYXAoZnVuY3Rpb24gKGVsZW1lbnQpIHsgcmV0dXJuIGVsZW1lbnQucGFyZW50Tm9kZSAmJiBjbG9zZXN0Rm4uY2FsbChlbGVtZW50LCBzZWxlY3Rvcik7IH0pLmZpbHRlcihCb29sZWFuKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwYXJlbnRzKGVsZW1lbnQsIHNlbGVjdG9yKSB7XG4gICAgICAgIHZhciBlbGVtZW50cyA9IFtdO1xuICAgICAgICB2YXIgcGFyZW50ID0gdG9Ob2RlKGVsZW1lbnQpLnBhcmVudE5vZGU7XG5cbiAgICAgICAgd2hpbGUgKHBhcmVudCAmJiBwYXJlbnQubm9kZVR5cGUgPT09IDEpIHtcblxuICAgICAgICAgICAgaWYgKG1hdGNoZXMocGFyZW50LCBzZWxlY3RvcikpIHtcbiAgICAgICAgICAgICAgICBlbGVtZW50cy5wdXNoKHBhcmVudCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHBhcmVudCA9IHBhcmVudC5wYXJlbnROb2RlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGVsZW1lbnRzO1xuICAgIH1cblxuICAgIHZhciBlc2NhcGVGbiA9IHdpbmRvdy5DU1MgJiYgQ1NTLmVzY2FwZSB8fCBmdW5jdGlvbiAoY3NzKSB7IHJldHVybiBjc3MucmVwbGFjZSgvKFteXFx4N2YtXFx1RkZGRlxcdy1dKS9nLCBmdW5jdGlvbiAobWF0Y2gpIHsgcmV0dXJuIChcIlxcXFxcIiArIG1hdGNoKTsgfSk7IH07XG4gICAgZnVuY3Rpb24gZXNjYXBlKGNzcykge1xuICAgICAgICByZXR1cm4gaXNTdHJpbmcoY3NzKSA/IGVzY2FwZUZuLmNhbGwobnVsbCwgY3NzKSA6ICcnO1xuICAgIH1cblxuICAgIHZhciB2b2lkRWxlbWVudHMgPSB7XG4gICAgICAgIGFyZWE6IHRydWUsXG4gICAgICAgIGJhc2U6IHRydWUsXG4gICAgICAgIGJyOiB0cnVlLFxuICAgICAgICBjb2w6IHRydWUsXG4gICAgICAgIGVtYmVkOiB0cnVlLFxuICAgICAgICBocjogdHJ1ZSxcbiAgICAgICAgaW1nOiB0cnVlLFxuICAgICAgICBpbnB1dDogdHJ1ZSxcbiAgICAgICAga2V5Z2VuOiB0cnVlLFxuICAgICAgICBsaW5rOiB0cnVlLFxuICAgICAgICBtZW51aXRlbTogdHJ1ZSxcbiAgICAgICAgbWV0YTogdHJ1ZSxcbiAgICAgICAgcGFyYW06IHRydWUsXG4gICAgICAgIHNvdXJjZTogdHJ1ZSxcbiAgICAgICAgdHJhY2s6IHRydWUsXG4gICAgICAgIHdicjogdHJ1ZVxuICAgIH07XG4gICAgZnVuY3Rpb24gaXNWb2lkRWxlbWVudChlbGVtZW50KSB7XG4gICAgICAgIHJldHVybiB0b05vZGVzKGVsZW1lbnQpLnNvbWUoZnVuY3Rpb24gKGVsZW1lbnQpIHsgcmV0dXJuIHZvaWRFbGVtZW50c1tlbGVtZW50LnRhZ05hbWUudG9Mb3dlckNhc2UoKV07IH0pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzVmlzaWJsZShlbGVtZW50KSB7XG4gICAgICAgIHJldHVybiB0b05vZGVzKGVsZW1lbnQpLnNvbWUoZnVuY3Rpb24gKGVsZW1lbnQpIHsgcmV0dXJuIGVsZW1lbnQub2Zmc2V0V2lkdGggfHwgZWxlbWVudC5vZmZzZXRIZWlnaHQgfHwgZWxlbWVudC5nZXRDbGllbnRSZWN0cygpLmxlbmd0aDsgfSk7XG4gICAgfVxuXG4gICAgdmFyIHNlbElucHV0ID0gJ2lucHV0LHNlbGVjdCx0ZXh0YXJlYSxidXR0b24nO1xuICAgIGZ1bmN0aW9uIGlzSW5wdXQoZWxlbWVudCkge1xuICAgICAgICByZXR1cm4gdG9Ob2RlcyhlbGVtZW50KS5zb21lKGZ1bmN0aW9uIChlbGVtZW50KSB7IHJldHVybiBtYXRjaGVzKGVsZW1lbnQsIHNlbElucHV0KTsgfSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZmlsdGVyKGVsZW1lbnQsIHNlbGVjdG9yKSB7XG4gICAgICAgIHJldHVybiB0b05vZGVzKGVsZW1lbnQpLmZpbHRlcihmdW5jdGlvbiAoZWxlbWVudCkgeyByZXR1cm4gbWF0Y2hlcyhlbGVtZW50LCBzZWxlY3Rvcik7IH0pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHdpdGhpbihlbGVtZW50LCBzZWxlY3Rvcikge1xuICAgICAgICByZXR1cm4gIWlzU3RyaW5nKHNlbGVjdG9yKVxuICAgICAgICAgICAgPyBlbGVtZW50ID09PSBzZWxlY3RvciB8fCAoaXNEb2N1bWVudChzZWxlY3RvcilcbiAgICAgICAgICAgICAgICA/IHNlbGVjdG9yLmRvY3VtZW50RWxlbWVudFxuICAgICAgICAgICAgICAgIDogdG9Ob2RlKHNlbGVjdG9yKSkuY29udGFpbnModG9Ob2RlKGVsZW1lbnQpKSAvLyBJRSAxMSBkb2N1bWVudCBkb2VzIG5vdCBpbXBsZW1lbnQgY29udGFpbnNcbiAgICAgICAgICAgIDogbWF0Y2hlcyhlbGVtZW50LCBzZWxlY3RvcikgfHwgY2xvc2VzdChlbGVtZW50LCBzZWxlY3Rvcik7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gb24oKSB7XG4gICAgICAgIHZhciBhcmdzID0gW10sIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgICAgIHdoaWxlICggbGVuLS0gKSBhcmdzWyBsZW4gXSA9IGFyZ3VtZW50c1sgbGVuIF07XG5cblxuICAgICAgICB2YXIgcmVmID0gZ2V0QXJncyhhcmdzKTtcbiAgICAgICAgdmFyIHRhcmdldCA9IHJlZlswXTtcbiAgICAgICAgdmFyIHR5cGUgPSByZWZbMV07XG4gICAgICAgIHZhciBzZWxlY3RvciA9IHJlZlsyXTtcbiAgICAgICAgdmFyIGxpc3RlbmVyID0gcmVmWzNdO1xuICAgICAgICB2YXIgdXNlQ2FwdHVyZSA9IHJlZls0XTtcblxuICAgICAgICB0YXJnZXQgPSB0b0V2ZW50VGFyZ2V0KHRhcmdldCk7XG5cbiAgICAgICAgaWYgKHNlbGVjdG9yKSB7XG4gICAgICAgICAgICBsaXN0ZW5lciA9IGRlbGVnYXRlKHRhcmdldCwgc2VsZWN0b3IsIGxpc3RlbmVyKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChsaXN0ZW5lci5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICBsaXN0ZW5lciA9IGRldGFpbChsaXN0ZW5lcik7XG4gICAgICAgIH1cblxuICAgICAgICB0eXBlLnNwbGl0KCcgJykuZm9yRWFjaChmdW5jdGlvbiAodHlwZSkgeyByZXR1cm4gdGFyZ2V0ICYmIHRhcmdldC5hZGRFdmVudExpc3RlbmVyKHR5cGUsIGxpc3RlbmVyLCB1c2VDYXB0dXJlKTsgfSk7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7IHJldHVybiBvZmYodGFyZ2V0LCB0eXBlLCBsaXN0ZW5lciwgdXNlQ2FwdHVyZSk7IH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gb2ZmKHRhcmdldCwgdHlwZSwgbGlzdGVuZXIsIHVzZUNhcHR1cmUpIHtcbiAgICAgICAgaWYgKCB1c2VDYXB0dXJlID09PSB2b2lkIDAgKSB1c2VDYXB0dXJlID0gZmFsc2U7XG5cbiAgICAgICAgdGFyZ2V0ID0gdG9FdmVudFRhcmdldCh0YXJnZXQpO1xuICAgICAgICB0YXJnZXQgJiYgdHlwZS5zcGxpdCgnICcpLmZvckVhY2goZnVuY3Rpb24gKHR5cGUpIHsgcmV0dXJuIHRhcmdldC5yZW1vdmVFdmVudExpc3RlbmVyKHR5cGUsIGxpc3RlbmVyLCB1c2VDYXB0dXJlKTsgfSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gb25jZSgpIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBbXSwgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICAgICAgd2hpbGUgKCBsZW4tLSApIGFyZ3NbIGxlbiBdID0gYXJndW1lbnRzWyBsZW4gXTtcblxuXG4gICAgICAgIHZhciByZWYgPSBnZXRBcmdzKGFyZ3MpO1xuICAgICAgICB2YXIgZWxlbWVudCA9IHJlZlswXTtcbiAgICAgICAgdmFyIHR5cGUgPSByZWZbMV07XG4gICAgICAgIHZhciBzZWxlY3RvciA9IHJlZlsyXTtcbiAgICAgICAgdmFyIGxpc3RlbmVyID0gcmVmWzNdO1xuICAgICAgICB2YXIgdXNlQ2FwdHVyZSA9IHJlZls0XTtcbiAgICAgICAgdmFyIGNvbmRpdGlvbiA9IHJlZls1XTtcbiAgICAgICAgdmFyIG9mZiA9IG9uKGVsZW1lbnQsIHR5cGUsIHNlbGVjdG9yLCBmdW5jdGlvbiAoZSkge1xuICAgICAgICAgICAgdmFyIHJlc3VsdCA9ICFjb25kaXRpb24gfHwgY29uZGl0aW9uKGUpO1xuICAgICAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgICAgICAgIG9mZigpO1xuICAgICAgICAgICAgICAgIGxpc3RlbmVyKGUsIHJlc3VsdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIHVzZUNhcHR1cmUpO1xuXG4gICAgICAgIHJldHVybiBvZmY7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdHJpZ2dlcih0YXJnZXQsIGV2ZW50LCBkZXRhaWwpIHtcbiAgICAgICAgcmV0dXJuIHRvRXZlbnRUYXJnZXRzKHRhcmdldCkucmVkdWNlKGZ1bmN0aW9uIChub3RDYW5jZWxlZCwgdGFyZ2V0KSB7IHJldHVybiBub3RDYW5jZWxlZCAmJiB0YXJnZXQuZGlzcGF0Y2hFdmVudChjcmVhdGVFdmVudChldmVudCwgdHJ1ZSwgdHJ1ZSwgZGV0YWlsKSk7IH1cbiAgICAgICAgICAgICwgdHJ1ZSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY3JlYXRlRXZlbnQoZSwgYnViYmxlcywgY2FuY2VsYWJsZSwgZGV0YWlsKSB7XG4gICAgICAgIGlmICggYnViYmxlcyA9PT0gdm9pZCAwICkgYnViYmxlcyA9IHRydWU7XG4gICAgICAgIGlmICggY2FuY2VsYWJsZSA9PT0gdm9pZCAwICkgY2FuY2VsYWJsZSA9IGZhbHNlO1xuXG4gICAgICAgIGlmIChpc1N0cmluZyhlKSkge1xuICAgICAgICAgICAgdmFyIGV2ZW50ID0gZG9jdW1lbnQuY3JlYXRlRXZlbnQoJ0N1c3RvbUV2ZW50Jyk7IC8vIElFIDExXG4gICAgICAgICAgICBldmVudC5pbml0Q3VzdG9tRXZlbnQoZSwgYnViYmxlcywgY2FuY2VsYWJsZSwgZGV0YWlsKTtcbiAgICAgICAgICAgIGUgPSBldmVudDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBlO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldEFyZ3MoYXJncykge1xuXG4gICAgICAgIGlmIChpc1N0cmluZyhhcmdzWzBdKSkge1xuICAgICAgICAgICAgYXJnc1swXSA9IGZpbmQoYXJnc1swXSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXNGdW5jdGlvbihhcmdzWzJdKSkge1xuICAgICAgICAgICAgYXJncy5zcGxpY2UoMiwgMCwgZmFsc2UpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhcmdzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGRlbGVnYXRlKGVsZW1lbnQsIHNlbGVjdG9yLCBsaXN0ZW5lcikge1xuICAgICAgICB2YXIgdGhpcyQxID0gdGhpcztcblxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGUpIHtcblxuICAgICAgICAgICAgdmFyIHRhcmdldCA9IGUudGFyZ2V0O1xuICAgICAgICAgICAgdmFyIGN1cnJlbnQgPSBzZWxlY3RvclswXSA9PT0gJz4nXG4gICAgICAgICAgICAgICAgPyBmaW5kQWxsKHNlbGVjdG9yLCBlbGVtZW50KS5yZXZlcnNlKCkuZmlsdGVyKGZ1bmN0aW9uIChlbGVtZW50KSB7IHJldHVybiB3aXRoaW4odGFyZ2V0LCBlbGVtZW50KTsgfSlbMF1cbiAgICAgICAgICAgICAgICA6IGNsb3Nlc3QodGFyZ2V0LCBzZWxlY3Rvcik7XG5cbiAgICAgICAgICAgIGlmIChjdXJyZW50KSB7XG4gICAgICAgICAgICAgICAgZS5kZWxlZ2F0ZSA9IGVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgZS5jdXJyZW50ID0gY3VycmVudDtcblxuICAgICAgICAgICAgICAgIGxpc3RlbmVyLmNhbGwodGhpcyQxLCBlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBkZXRhaWwobGlzdGVuZXIpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChlKSB7IHJldHVybiBpc0FycmF5KGUuZGV0YWlsKSA/IGxpc3RlbmVyLmFwcGx5KHZvaWQgMCwgW2VdLmNvbmNhdChlLmRldGFpbCkpIDogbGlzdGVuZXIoZSk7IH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNFdmVudFRhcmdldCh0YXJnZXQpIHtcbiAgICAgICAgcmV0dXJuICdFdmVudFRhcmdldCcgaW4gd2luZG93XG4gICAgICAgICAgICA/IHRhcmdldCBpbnN0YW5jZW9mIEV2ZW50VGFyZ2V0XG4gICAgICAgICAgICA6IHRhcmdldCAmJiAnYWRkRXZlbnRMaXN0ZW5lcicgaW4gdGFyZ2V0O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHRvRXZlbnRUYXJnZXQodGFyZ2V0KSB7XG4gICAgICAgIHJldHVybiBpc0V2ZW50VGFyZ2V0KHRhcmdldCkgPyB0YXJnZXQgOiB0b05vZGUodGFyZ2V0KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB0b0V2ZW50VGFyZ2V0cyh0YXJnZXQpIHtcbiAgICAgICAgcmV0dXJuIGlzRXZlbnRUYXJnZXQodGFyZ2V0KVxuICAgICAgICAgICAgPyBbdGFyZ2V0XVxuICAgICAgICAgICAgOiBpc0FycmF5KHRhcmdldClcbiAgICAgICAgICAgICAgICA/IHRhcmdldC5tYXAodG9FdmVudFRhcmdldCkuZmlsdGVyKEJvb2xlYW4pXG4gICAgICAgICAgICAgICAgOiB0b05vZGVzKHRhcmdldCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcHJldmVudENsaWNrKCkge1xuXG4gICAgICAgIHZhciB0aW1lciA9IHNldFRpbWVvdXQob25jZShkb2N1bWVudCwgJ2NsaWNrJywgZnVuY3Rpb24gKGUpIHtcblxuICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcblxuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVyKTtcblxuICAgICAgICB9LCB0cnVlKSk7XG5cbiAgICAgICAgdHJpZ2dlcihkb2N1bWVudCwgJ3RvdWNoY2FuY2VsJyk7XG5cbiAgICB9XG5cbiAgICAvKiBnbG9iYWwgc2V0SW1tZWRpYXRlICovXG5cbiAgICB2YXIgUHJvbWlzZSQxID0gJ1Byb21pc2UnIGluIHdpbmRvdyA/IHdpbmRvdy5Qcm9taXNlIDogUHJvbWlzZUZuO1xuXG4gICAgdmFyIERlZmVycmVkID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciB0aGlzJDEgPSB0aGlzO1xuXG4gICAgICAgIHRoaXMucHJvbWlzZSA9IG5ldyBQcm9taXNlJDEoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgICAgdGhpcyQxLnJlamVjdCA9IHJlamVjdDtcbiAgICAgICAgICAgIHRoaXMkMS5yZXNvbHZlID0gcmVzb2x2ZTtcbiAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIFByb21pc2VzL0ErIHBvbHlmaWxsIHYxLjEuNCAoaHR0cHM6Ly9naXRodWIuY29tL2JyYW1zdGVpbi9wcm9taXMpXG4gICAgICovXG5cbiAgICB2YXIgUkVTT0xWRUQgPSAwO1xuICAgIHZhciBSRUpFQ1RFRCA9IDE7XG4gICAgdmFyIFBFTkRJTkcgPSAyO1xuXG4gICAgdmFyIGFzeW5jID0gJ3NldEltbWVkaWF0ZScgaW4gd2luZG93ID8gc2V0SW1tZWRpYXRlIDogc2V0VGltZW91dDtcblxuICAgIGZ1bmN0aW9uIFByb21pc2VGbihleGVjdXRvcikge1xuXG4gICAgICAgIHRoaXMuc3RhdGUgPSBQRU5ESU5HO1xuICAgICAgICB0aGlzLnZhbHVlID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLmRlZmVycmVkID0gW107XG5cbiAgICAgICAgdmFyIHByb21pc2UgPSB0aGlzO1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBleGVjdXRvcihcbiAgICAgICAgICAgICAgICBmdW5jdGlvbiAoeCkge1xuICAgICAgICAgICAgICAgICAgICBwcm9taXNlLnJlc29sdmUoeCk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBmdW5jdGlvbiAocikge1xuICAgICAgICAgICAgICAgICAgICBwcm9taXNlLnJlamVjdChyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICApO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBwcm9taXNlLnJlamVjdChlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIFByb21pc2VGbi5yZWplY3QgPSBmdW5jdGlvbiAocikge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2VGbihmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgICByZWplY3Qocik7XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICBQcm9taXNlRm4ucmVzb2x2ZSA9IGZ1bmN0aW9uICh4KSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZUZuKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICAgIHJlc29sdmUoeCk7XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICBQcm9taXNlRm4uYWxsID0gZnVuY3Rpb24gYWxsKGl0ZXJhYmxlKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZUZuKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICAgIHZhciByZXN1bHQgPSBbXTtcbiAgICAgICAgICAgIHZhciBjb3VudCA9IDA7XG5cbiAgICAgICAgICAgIGlmIChpdGVyYWJsZS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICByZXNvbHZlKHJlc3VsdCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZ1bmN0aW9uIHJlc29sdmVyKGkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0W2ldID0geDtcbiAgICAgICAgICAgICAgICAgICAgY291bnQgKz0gMTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoY291bnQgPT09IGl0ZXJhYmxlLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShyZXN1bHQpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpdGVyYWJsZS5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICAgICAgICAgIFByb21pc2VGbi5yZXNvbHZlKGl0ZXJhYmxlW2ldKS50aGVuKHJlc29sdmVyKGkpLCByZWplY3QpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgUHJvbWlzZUZuLnJhY2UgPSBmdW5jdGlvbiByYWNlKGl0ZXJhYmxlKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZUZuKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaXRlcmFibGUubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgICAgICAgICBQcm9taXNlRm4ucmVzb2x2ZShpdGVyYWJsZVtpXSkudGhlbihyZXNvbHZlLCByZWplY3QpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgdmFyIHAgPSBQcm9taXNlRm4ucHJvdG90eXBlO1xuXG4gICAgcC5yZXNvbHZlID0gZnVuY3Rpb24gcmVzb2x2ZSh4KSB7XG4gICAgICAgIHZhciBwcm9taXNlID0gdGhpcztcblxuICAgICAgICBpZiAocHJvbWlzZS5zdGF0ZSA9PT0gUEVORElORykge1xuICAgICAgICAgICAgaWYgKHggPT09IHByb21pc2UpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdQcm9taXNlIHNldHRsZWQgd2l0aCBpdHNlbGYuJyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZhciBjYWxsZWQgPSBmYWxzZTtcblxuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICB2YXIgdGhlbiA9IHggJiYgeC50aGVuO1xuXG4gICAgICAgICAgICAgICAgaWYgKHggIT09IG51bGwgJiYgaXNPYmplY3QoeCkgJiYgaXNGdW5jdGlvbih0aGVuKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGVuLmNhbGwoXG4gICAgICAgICAgICAgICAgICAgICAgICB4LFxuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNhbGxlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9taXNlLnJlc29sdmUoeCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKHIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNhbGxlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9taXNlLnJlamVjdChyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICBpZiAoIWNhbGxlZCkge1xuICAgICAgICAgICAgICAgICAgICBwcm9taXNlLnJlamVjdChlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBwcm9taXNlLnN0YXRlID0gUkVTT0xWRUQ7XG4gICAgICAgICAgICBwcm9taXNlLnZhbHVlID0geDtcbiAgICAgICAgICAgIHByb21pc2Uubm90aWZ5KCk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgcC5yZWplY3QgPSBmdW5jdGlvbiByZWplY3QocmVhc29uKSB7XG4gICAgICAgIHZhciBwcm9taXNlID0gdGhpcztcblxuICAgICAgICBpZiAocHJvbWlzZS5zdGF0ZSA9PT0gUEVORElORykge1xuICAgICAgICAgICAgaWYgKHJlYXNvbiA9PT0gcHJvbWlzZSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1Byb21pc2Ugc2V0dGxlZCB3aXRoIGl0c2VsZi4nKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcHJvbWlzZS5zdGF0ZSA9IFJFSkVDVEVEO1xuICAgICAgICAgICAgcHJvbWlzZS52YWx1ZSA9IHJlYXNvbjtcbiAgICAgICAgICAgIHByb21pc2Uubm90aWZ5KCk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgcC5ub3RpZnkgPSBmdW5jdGlvbiBub3RpZnkoKSB7XG4gICAgICAgIHZhciB0aGlzJDEgPSB0aGlzO1xuXG4gICAgICAgIGFzeW5jKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmICh0aGlzJDEuc3RhdGUgIT09IFBFTkRJTkcpIHtcbiAgICAgICAgICAgICAgICB3aGlsZSAodGhpcyQxLmRlZmVycmVkLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgcmVmID0gdGhpcyQxLmRlZmVycmVkLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgICAgIHZhciBvblJlc29sdmVkID0gcmVmWzBdO1xuICAgICAgICAgICAgICAgICAgICB2YXIgb25SZWplY3RlZCA9IHJlZlsxXTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHJlc29sdmUgPSByZWZbMl07XG4gICAgICAgICAgICAgICAgICAgIHZhciByZWplY3QgPSByZWZbM107XG5cbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzJDEuc3RhdGUgPT09IFJFU09MVkVEKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzRnVuY3Rpb24ob25SZXNvbHZlZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShvblJlc29sdmVkLmNhbGwodW5kZWZpbmVkLCB0aGlzJDEudmFsdWUpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHRoaXMkMS52YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzJDEuc3RhdGUgPT09IFJFSkVDVEVEKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzRnVuY3Rpb24ob25SZWplY3RlZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShvblJlamVjdGVkLmNhbGwodW5kZWZpbmVkLCB0aGlzJDEudmFsdWUpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWplY3QodGhpcyQxLnZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIHAudGhlbiA9IGZ1bmN0aW9uIHRoZW4ob25SZXNvbHZlZCwgb25SZWplY3RlZCkge1xuICAgICAgICB2YXIgdGhpcyQxID0gdGhpcztcblxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2VGbihmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgICB0aGlzJDEuZGVmZXJyZWQucHVzaChbb25SZXNvbHZlZCwgb25SZWplY3RlZCwgcmVzb2x2ZSwgcmVqZWN0XSk7XG4gICAgICAgICAgICB0aGlzJDEubm90aWZ5KCk7XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICBwLmNhdGNoID0gZnVuY3Rpb24gKG9uUmVqZWN0ZWQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGhlbih1bmRlZmluZWQsIG9uUmVqZWN0ZWQpO1xuICAgIH07XG5cbiAgICBmdW5jdGlvbiBhamF4KHVybCwgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UkMShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG5cbiAgICAgICAgICAgIHZhciBlbnYgPSBhc3NpZ24oe1xuICAgICAgICAgICAgICAgIGRhdGE6IG51bGwsXG4gICAgICAgICAgICAgICAgbWV0aG9kOiAnR0VUJyxcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB7fSxcbiAgICAgICAgICAgICAgICB4aHI6IG5ldyBYTUxIdHRwUmVxdWVzdCgpLFxuICAgICAgICAgICAgICAgIGJlZm9yZVNlbmQ6IG5vb3AsXG4gICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlOiAnJ1xuICAgICAgICAgICAgfSwgb3B0aW9ucyk7XG5cbiAgICAgICAgICAgIGVudi5iZWZvcmVTZW5kKGVudik7XG5cbiAgICAgICAgICAgIHZhciB4aHIgPSBlbnYueGhyO1xuXG4gICAgICAgICAgICBmb3IgKHZhciBwcm9wIGluIGVudikge1xuICAgICAgICAgICAgICAgIGlmIChwcm9wIGluIHhocikge1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB4aHJbcHJvcF0gPSBlbnZbcHJvcF07XG5cbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge31cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHhoci5vcGVuKGVudi5tZXRob2QudG9VcHBlckNhc2UoKSwgdXJsKTtcblxuICAgICAgICAgICAgZm9yICh2YXIgaGVhZGVyIGluIGVudi5oZWFkZXJzKSB7XG4gICAgICAgICAgICAgICAgeGhyLnNldFJlcXVlc3RIZWFkZXIoaGVhZGVyLCBlbnYuaGVhZGVyc1toZWFkZXJdKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgb24oeGhyLCAnbG9hZCcsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgICAgIGlmICh4aHIuc3RhdHVzID09PSAwIHx8IHhoci5zdGF0dXMgPj0gMjAwICYmIHhoci5zdGF0dXMgPCAzMDAgfHwgeGhyLnN0YXR1cyA9PT0gMzA0KSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoeGhyKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZWplY3QoYXNzaWduKEVycm9yKHhoci5zdGF0dXNUZXh0KSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgeGhyOiB4aHIsXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXM6IHhoci5zdGF0dXNcbiAgICAgICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIG9uKHhociwgJ2Vycm9yJywgZnVuY3Rpb24gKCkgeyByZXR1cm4gcmVqZWN0KGFzc2lnbihFcnJvcignTmV0d29yayBFcnJvcicpLCB7eGhyOiB4aHJ9KSk7IH0pO1xuICAgICAgICAgICAgb24oeGhyLCAndGltZW91dCcsIGZ1bmN0aW9uICgpIHsgcmV0dXJuIHJlamVjdChhc3NpZ24oRXJyb3IoJ05ldHdvcmsgVGltZW91dCcpLCB7eGhyOiB4aHJ9KSk7IH0pO1xuXG4gICAgICAgICAgICB4aHIuc2VuZChlbnYuZGF0YSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldEltYWdlKHNyYywgc3Jjc2V0LCBzaXplcykge1xuXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSQxKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICAgIHZhciBpbWcgPSBuZXcgSW1hZ2UoKTtcblxuICAgICAgICAgICAgaW1nLm9uZXJyb3IgPSByZWplY3Q7XG4gICAgICAgICAgICBpbWcub25sb2FkID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gcmVzb2x2ZShpbWcpOyB9O1xuXG4gICAgICAgICAgICBpbWcuc3JjID0gc3JjO1xuICAgICAgICAgICAgc3Jjc2V0ICYmIChpbWcuc3Jjc2V0ID0gc3Jjc2V0KTtcbiAgICAgICAgICAgIHNpemVzICYmIChpbWcuc2l6ZXMgPSBzaXplcyk7XG4gICAgICAgIH0pO1xuXG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNSZWFkeSgpIHtcbiAgICAgICAgcmV0dXJuIGRvY3VtZW50LnJlYWR5U3RhdGUgPT09ICdjb21wbGV0ZScgfHwgZG9jdW1lbnQucmVhZHlTdGF0ZSAhPT0gJ2xvYWRpbmcnICYmICFkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuZG9TY3JvbGw7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcmVhZHkoZm4pIHtcblxuICAgICAgICBpZiAoaXNSZWFkeSgpKSB7XG4gICAgICAgICAgICBmbigpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGhhbmRsZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHVuYmluZDEoKTtcbiAgICAgICAgICAgIHVuYmluZDIoKTtcbiAgICAgICAgICAgIGZuKCk7XG4gICAgICAgIH07XG4gICAgICAgIHZhciB1bmJpbmQxID0gb24oZG9jdW1lbnQsICdET01Db250ZW50TG9hZGVkJywgaGFuZGxlKTtcbiAgICAgICAgdmFyIHVuYmluZDIgPSBvbih3aW5kb3csICdsb2FkJywgaGFuZGxlKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpbmRleChlbGVtZW50LCByZWYpIHtcbiAgICAgICAgcmV0dXJuIHJlZlxuICAgICAgICAgICAgPyB0b05vZGVzKGVsZW1lbnQpLmluZGV4T2YodG9Ob2RlKHJlZikpXG4gICAgICAgICAgICA6IHRvTm9kZXMoKGVsZW1lbnQgPSB0b05vZGUoZWxlbWVudCkpICYmIGVsZW1lbnQucGFyZW50Tm9kZS5jaGlsZHJlbikuaW5kZXhPZihlbGVtZW50KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRJbmRleChpLCBlbGVtZW50cywgY3VycmVudCwgZmluaXRlKSB7XG4gICAgICAgIGlmICggY3VycmVudCA9PT0gdm9pZCAwICkgY3VycmVudCA9IDA7XG4gICAgICAgIGlmICggZmluaXRlID09PSB2b2lkIDAgKSBmaW5pdGUgPSBmYWxzZTtcblxuXG4gICAgICAgIGVsZW1lbnRzID0gdG9Ob2RlcyhlbGVtZW50cyk7XG5cbiAgICAgICAgdmFyIGxlbmd0aCA9IGVsZW1lbnRzLmxlbmd0aDtcblxuICAgICAgICBpID0gaXNOdW1lcmljKGkpXG4gICAgICAgICAgICA/IHRvTnVtYmVyKGkpXG4gICAgICAgICAgICA6IGkgPT09ICduZXh0J1xuICAgICAgICAgICAgICAgID8gY3VycmVudCArIDFcbiAgICAgICAgICAgICAgICA6IGkgPT09ICdwcmV2aW91cydcbiAgICAgICAgICAgICAgICAgICAgPyBjdXJyZW50IC0gMVxuICAgICAgICAgICAgICAgICAgICA6IGluZGV4KGVsZW1lbnRzLCBpKTtcblxuICAgICAgICBpZiAoZmluaXRlKSB7XG4gICAgICAgICAgICByZXR1cm4gY2xhbXAoaSwgMCwgbGVuZ3RoIC0gMSk7XG4gICAgICAgIH1cblxuICAgICAgICBpICU9IGxlbmd0aDtcblxuICAgICAgICByZXR1cm4gaSA8IDAgPyBpICsgbGVuZ3RoIDogaTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBlbXB0eShlbGVtZW50KSB7XG4gICAgICAgIGVsZW1lbnQgPSB0b05vZGUoZWxlbWVudCk7XG4gICAgICAgIGVsZW1lbnQuaW5uZXJIVE1MID0gJyc7XG4gICAgICAgIHJldHVybiBlbGVtZW50O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGh0bWwocGFyZW50LCBodG1sKSB7XG4gICAgICAgIHBhcmVudCA9IHRvTm9kZShwYXJlbnQpO1xuICAgICAgICByZXR1cm4gaXNVbmRlZmluZWQoaHRtbClcbiAgICAgICAgICAgID8gcGFyZW50LmlubmVySFRNTFxuICAgICAgICAgICAgOiBhcHBlbmQocGFyZW50Lmhhc0NoaWxkTm9kZXMoKSA/IGVtcHR5KHBhcmVudCkgOiBwYXJlbnQsIGh0bWwpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHByZXBlbmQocGFyZW50LCBlbGVtZW50KSB7XG5cbiAgICAgICAgcGFyZW50ID0gdG9Ob2RlKHBhcmVudCk7XG5cbiAgICAgICAgaWYgKCFwYXJlbnQuaGFzQ2hpbGROb2RlcygpKSB7XG4gICAgICAgICAgICByZXR1cm4gYXBwZW5kKHBhcmVudCwgZWxlbWVudCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gaW5zZXJ0Tm9kZXMoZWxlbWVudCwgZnVuY3Rpb24gKGVsZW1lbnQpIHsgcmV0dXJuIHBhcmVudC5pbnNlcnRCZWZvcmUoZWxlbWVudCwgcGFyZW50LmZpcnN0Q2hpbGQpOyB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGFwcGVuZChwYXJlbnQsIGVsZW1lbnQpIHtcbiAgICAgICAgcGFyZW50ID0gdG9Ob2RlKHBhcmVudCk7XG4gICAgICAgIHJldHVybiBpbnNlcnROb2RlcyhlbGVtZW50LCBmdW5jdGlvbiAoZWxlbWVudCkgeyByZXR1cm4gcGFyZW50LmFwcGVuZENoaWxkKGVsZW1lbnQpOyB9KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBiZWZvcmUocmVmLCBlbGVtZW50KSB7XG4gICAgICAgIHJlZiA9IHRvTm9kZShyZWYpO1xuICAgICAgICByZXR1cm4gaW5zZXJ0Tm9kZXMoZWxlbWVudCwgZnVuY3Rpb24gKGVsZW1lbnQpIHsgcmV0dXJuIHJlZi5wYXJlbnROb2RlLmluc2VydEJlZm9yZShlbGVtZW50LCByZWYpOyB9KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBhZnRlcihyZWYsIGVsZW1lbnQpIHtcbiAgICAgICAgcmVmID0gdG9Ob2RlKHJlZik7XG4gICAgICAgIHJldHVybiBpbnNlcnROb2RlcyhlbGVtZW50LCBmdW5jdGlvbiAoZWxlbWVudCkgeyByZXR1cm4gcmVmLm5leHRTaWJsaW5nXG4gICAgICAgICAgICA/IGJlZm9yZShyZWYubmV4dFNpYmxpbmcsIGVsZW1lbnQpXG4gICAgICAgICAgICA6IGFwcGVuZChyZWYucGFyZW50Tm9kZSwgZWxlbWVudCk7IH1cbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpbnNlcnROb2RlcyhlbGVtZW50LCBmbikge1xuICAgICAgICBlbGVtZW50ID0gaXNTdHJpbmcoZWxlbWVudCkgPyBmcmFnbWVudChlbGVtZW50KSA6IGVsZW1lbnQ7XG4gICAgICAgIHJldHVybiBlbGVtZW50XG4gICAgICAgICAgICA/ICdsZW5ndGgnIGluIGVsZW1lbnRcbiAgICAgICAgICAgICAgICA/IHRvTm9kZXMoZWxlbWVudCkubWFwKGZuKVxuICAgICAgICAgICAgICAgIDogZm4oZWxlbWVudClcbiAgICAgICAgICAgIDogbnVsbDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiByZW1vdmUoZWxlbWVudCkge1xuICAgICAgICB0b05vZGVzKGVsZW1lbnQpLm1hcChmdW5jdGlvbiAoZWxlbWVudCkgeyByZXR1cm4gZWxlbWVudC5wYXJlbnROb2RlICYmIGVsZW1lbnQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChlbGVtZW50KTsgfSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gd3JhcEFsbChlbGVtZW50LCBzdHJ1Y3R1cmUpIHtcblxuICAgICAgICBzdHJ1Y3R1cmUgPSB0b05vZGUoYmVmb3JlKGVsZW1lbnQsIHN0cnVjdHVyZSkpO1xuXG4gICAgICAgIHdoaWxlIChzdHJ1Y3R1cmUuZmlyc3RDaGlsZCkge1xuICAgICAgICAgICAgc3RydWN0dXJlID0gc3RydWN0dXJlLmZpcnN0Q2hpbGQ7XG4gICAgICAgIH1cblxuICAgICAgICBhcHBlbmQoc3RydWN0dXJlLCBlbGVtZW50KTtcblxuICAgICAgICByZXR1cm4gc3RydWN0dXJlO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHdyYXBJbm5lcihlbGVtZW50LCBzdHJ1Y3R1cmUpIHtcbiAgICAgICAgcmV0dXJuIHRvTm9kZXModG9Ob2RlcyhlbGVtZW50KS5tYXAoZnVuY3Rpb24gKGVsZW1lbnQpIHsgcmV0dXJuIGVsZW1lbnQuaGFzQ2hpbGROb2RlcyA/IHdyYXBBbGwodG9Ob2RlcyhlbGVtZW50LmNoaWxkTm9kZXMpLCBzdHJ1Y3R1cmUpIDogYXBwZW5kKGVsZW1lbnQsIHN0cnVjdHVyZSk7IH1cbiAgICAgICAgKSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdW53cmFwKGVsZW1lbnQpIHtcbiAgICAgICAgdG9Ob2RlcyhlbGVtZW50KVxuICAgICAgICAgICAgLm1hcChmdW5jdGlvbiAoZWxlbWVudCkgeyByZXR1cm4gZWxlbWVudC5wYXJlbnROb2RlOyB9KVxuICAgICAgICAgICAgLmZpbHRlcihmdW5jdGlvbiAodmFsdWUsIGluZGV4LCBzZWxmKSB7IHJldHVybiBzZWxmLmluZGV4T2YodmFsdWUpID09PSBpbmRleDsgfSlcbiAgICAgICAgICAgIC5mb3JFYWNoKGZ1bmN0aW9uIChwYXJlbnQpIHtcbiAgICAgICAgICAgICAgICBiZWZvcmUocGFyZW50LCBwYXJlbnQuY2hpbGROb2Rlcyk7XG4gICAgICAgICAgICAgICAgcmVtb3ZlKHBhcmVudCk7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICB2YXIgZnJhZ21lbnRSZSA9IC9eXFxzKjwoXFx3K3whKVtePl0qPi87XG4gICAgdmFyIHNpbmdsZVRhZ1JlID0gL148KFxcdyspXFxzKlxcLz8+KD86PFxcL1xcMT4pPyQvO1xuXG4gICAgZnVuY3Rpb24gZnJhZ21lbnQoaHRtbCkge1xuXG4gICAgICAgIHZhciBtYXRjaGVzID0gc2luZ2xlVGFnUmUuZXhlYyhodG1sKTtcbiAgICAgICAgaWYgKG1hdGNoZXMpIHtcbiAgICAgICAgICAgIHJldHVybiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KG1hdGNoZXNbMV0pO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGNvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICBpZiAoZnJhZ21lbnRSZS50ZXN0KGh0bWwpKSB7XG4gICAgICAgICAgICBjb250YWluZXIuaW5zZXJ0QWRqYWNlbnRIVE1MKCdiZWZvcmVlbmQnLCBodG1sLnRyaW0oKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb250YWluZXIudGV4dENvbnRlbnQgPSBodG1sO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNvbnRhaW5lci5jaGlsZE5vZGVzLmxlbmd0aCA+IDEgPyB0b05vZGVzKGNvbnRhaW5lci5jaGlsZE5vZGVzKSA6IGNvbnRhaW5lci5maXJzdENoaWxkO1xuXG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYXBwbHkobm9kZSwgZm4pIHtcblxuICAgICAgICBpZiAoIW5vZGUgfHwgbm9kZS5ub2RlVHlwZSAhPT0gMSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgZm4obm9kZSk7XG4gICAgICAgIG5vZGUgPSBub2RlLmZpcnN0RWxlbWVudENoaWxkO1xuICAgICAgICB3aGlsZSAobm9kZSkge1xuICAgICAgICAgICAgYXBwbHkobm9kZSwgZm4pO1xuICAgICAgICAgICAgbm9kZSA9IG5vZGUubmV4dEVsZW1lbnRTaWJsaW5nO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYWRkQ2xhc3MoZWxlbWVudCkge1xuICAgICAgICB2YXIgYXJncyA9IFtdLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoIC0gMTtcbiAgICAgICAgd2hpbGUgKCBsZW4tLSA+IDAgKSBhcmdzWyBsZW4gXSA9IGFyZ3VtZW50c1sgbGVuICsgMSBdO1xuXG4gICAgICAgIGFwcGx5JDEoZWxlbWVudCwgYXJncywgJ2FkZCcpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJlbW92ZUNsYXNzKGVsZW1lbnQpIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBbXSwgbGVuID0gYXJndW1lbnRzLmxlbmd0aCAtIDE7XG4gICAgICAgIHdoaWxlICggbGVuLS0gPiAwICkgYXJnc1sgbGVuIF0gPSBhcmd1bWVudHNbIGxlbiArIDEgXTtcblxuICAgICAgICBhcHBseSQxKGVsZW1lbnQsIGFyZ3MsICdyZW1vdmUnKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiByZW1vdmVDbGFzc2VzKGVsZW1lbnQsIGNscykge1xuICAgICAgICBmaWx0ZXJBdHRyKGVsZW1lbnQsICdjbGFzcycsIG5ldyBSZWdFeHAoKFwiKF58XFxcXHMpXCIgKyBjbHMgKyBcIig/IVxcXFxTKVwiKSwgJ2cnKSwgJycpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJlcGxhY2VDbGFzcyhlbGVtZW50KSB7XG4gICAgICAgIHZhciBhcmdzID0gW10sIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGggLSAxO1xuICAgICAgICB3aGlsZSAoIGxlbi0tID4gMCApIGFyZ3NbIGxlbiBdID0gYXJndW1lbnRzWyBsZW4gKyAxIF07XG5cbiAgICAgICAgYXJnc1swXSAmJiByZW1vdmVDbGFzcyhlbGVtZW50LCBhcmdzWzBdKTtcbiAgICAgICAgYXJnc1sxXSAmJiBhZGRDbGFzcyhlbGVtZW50LCBhcmdzWzFdKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBoYXNDbGFzcyhlbGVtZW50LCBjbHMpIHtcbiAgICAgICAgcmV0dXJuIHRvTm9kZXMoZWxlbWVudCkuc29tZShmdW5jdGlvbiAoZWxlbWVudCkgeyByZXR1cm4gZWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoY2xzKTsgfSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdG9nZ2xlQ2xhc3MoZWxlbWVudCkge1xuICAgICAgICB2YXIgYXJncyA9IFtdLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoIC0gMTtcbiAgICAgICAgd2hpbGUgKCBsZW4tLSA+IDAgKSBhcmdzWyBsZW4gXSA9IGFyZ3VtZW50c1sgbGVuICsgMSBdO1xuXG5cbiAgICAgICAgaWYgKCFhcmdzLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgYXJncyA9IGdldEFyZ3MkMShhcmdzKTtcblxuICAgICAgICB2YXIgZm9yY2UgPSAhaXNTdHJpbmcoYXJnc1thcmdzLmxlbmd0aCAtIDFdKSA/IGFyZ3MucG9wKCkgOiBbXTsgLy8gaW4gaU9TIDkuMyBmb3JjZSA9PT0gdW5kZWZpbmVkIGV2YWx1YXRlcyB0byBmYWxzZVxuXG4gICAgICAgIGFyZ3MgPSBhcmdzLmZpbHRlcihCb29sZWFuKTtcblxuICAgICAgICB0b05vZGVzKGVsZW1lbnQpLmZvckVhY2goZnVuY3Rpb24gKHJlZikge1xuICAgICAgICAgICAgdmFyIGNsYXNzTGlzdCA9IHJlZi5jbGFzc0xpc3Q7XG5cbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJncy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIHN1cHBvcnRzLkZvcmNlXG4gICAgICAgICAgICAgICAgICAgID8gY2xhc3NMaXN0LnRvZ2dsZS5hcHBseShjbGFzc0xpc3QsIFthcmdzW2ldXS5jb25jYXQoZm9yY2UpKVxuICAgICAgICAgICAgICAgICAgICA6IChjbGFzc0xpc3RbKCFpc1VuZGVmaW5lZChmb3JjZSkgPyBmb3JjZSA6ICFjbGFzc0xpc3QuY29udGFpbnMoYXJnc1tpXSkpID8gJ2FkZCcgOiAncmVtb3ZlJ10oYXJnc1tpXSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGFwcGx5JDEoZWxlbWVudCwgYXJncywgZm4pIHtcbiAgICAgICAgYXJncyA9IGdldEFyZ3MkMShhcmdzKS5maWx0ZXIoQm9vbGVhbik7XG5cbiAgICAgICAgYXJncy5sZW5ndGggJiYgdG9Ob2RlcyhlbGVtZW50KS5mb3JFYWNoKGZ1bmN0aW9uIChyZWYpIHtcbiAgICAgICAgICAgIHZhciBjbGFzc0xpc3QgPSByZWYuY2xhc3NMaXN0O1xuXG4gICAgICAgICAgICBzdXBwb3J0cy5NdWx0aXBsZVxuICAgICAgICAgICAgICAgID8gY2xhc3NMaXN0W2ZuXS5hcHBseShjbGFzc0xpc3QsIGFyZ3MpXG4gICAgICAgICAgICAgICAgOiBhcmdzLmZvckVhY2goZnVuY3Rpb24gKGNscykgeyByZXR1cm4gY2xhc3NMaXN0W2ZuXShjbHMpOyB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0QXJncyQxKGFyZ3MpIHtcbiAgICAgICAgcmV0dXJuIGFyZ3MucmVkdWNlKGZ1bmN0aW9uIChhcmdzLCBhcmcpIHsgcmV0dXJuIGFyZ3MuY29uY2F0LmNhbGwoYXJncywgaXNTdHJpbmcoYXJnKSAmJiBpbmNsdWRlcyhhcmcsICcgJykgPyBhcmcudHJpbSgpLnNwbGl0KCcgJykgOiBhcmcpOyB9XG4gICAgICAgICAgICAsIFtdKTtcbiAgICB9XG5cbiAgICB2YXIgc3VwcG9ydHMgPSB7fTtcblxuICAgIC8vIElFIDExXG4gICAgKGZ1bmN0aW9uICgpIHtcblxuICAgICAgICB2YXIgbGlzdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ18nKS5jbGFzc0xpc3Q7XG4gICAgICAgIGlmIChsaXN0KSB7XG4gICAgICAgICAgICBsaXN0LmFkZCgnYScsICdiJyk7XG4gICAgICAgICAgICBsaXN0LnRvZ2dsZSgnYycsIGZhbHNlKTtcbiAgICAgICAgICAgIHN1cHBvcnRzLk11bHRpcGxlID0gbGlzdC5jb250YWlucygnYicpO1xuICAgICAgICAgICAgc3VwcG9ydHMuRm9yY2UgPSAhbGlzdC5jb250YWlucygnYycpO1xuICAgICAgICB9XG4gICAgICAgIGxpc3QgPSBudWxsO1xuXG4gICAgfSkoKTtcblxuICAgIHZhciBjc3NOdW1iZXIgPSB7XG4gICAgICAgICdhbmltYXRpb24taXRlcmF0aW9uLWNvdW50JzogdHJ1ZSxcbiAgICAgICAgJ2NvbHVtbi1jb3VudCc6IHRydWUsXG4gICAgICAgICdmaWxsLW9wYWNpdHknOiB0cnVlLFxuICAgICAgICAnZmxleC1ncm93JzogdHJ1ZSxcbiAgICAgICAgJ2ZsZXgtc2hyaW5rJzogdHJ1ZSxcbiAgICAgICAgJ2ZvbnQtd2VpZ2h0JzogdHJ1ZSxcbiAgICAgICAgJ2xpbmUtaGVpZ2h0JzogdHJ1ZSxcbiAgICAgICAgJ29wYWNpdHknOiB0cnVlLFxuICAgICAgICAnb3JkZXInOiB0cnVlLFxuICAgICAgICAnb3JwaGFucyc6IHRydWUsXG4gICAgICAgICd3aWRvd3MnOiB0cnVlLFxuICAgICAgICAnei1pbmRleCc6IHRydWUsXG4gICAgICAgICd6b29tJzogdHJ1ZVxuICAgIH07XG5cbiAgICBmdW5jdGlvbiBjc3MoZWxlbWVudCwgcHJvcGVydHksIHZhbHVlKSB7XG5cbiAgICAgICAgcmV0dXJuIHRvTm9kZXMoZWxlbWVudCkubWFwKGZ1bmN0aW9uIChlbGVtZW50KSB7XG5cbiAgICAgICAgICAgIGlmIChpc1N0cmluZyhwcm9wZXJ0eSkpIHtcblxuICAgICAgICAgICAgICAgIHByb3BlcnR5ID0gcHJvcE5hbWUocHJvcGVydHkpO1xuXG4gICAgICAgICAgICAgICAgaWYgKGlzVW5kZWZpbmVkKHZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2V0U3R5bGUoZWxlbWVudCwgcHJvcGVydHkpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIXZhbHVlICYmIHZhbHVlICE9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuc3R5bGUucmVtb3ZlUHJvcGVydHkocHJvcGVydHkpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuc3R5bGVbcHJvcGVydHldID0gaXNOdW1lcmljKHZhbHVlKSAmJiAhY3NzTnVtYmVyW3Byb3BlcnR5XSA/ICh2YWx1ZSArIFwicHhcIikgOiB2YWx1ZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNBcnJheShwcm9wZXJ0eSkpIHtcblxuICAgICAgICAgICAgICAgIHZhciBzdHlsZXMgPSBnZXRTdHlsZXMoZWxlbWVudCk7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gcHJvcGVydHkucmVkdWNlKGZ1bmN0aW9uIChwcm9wcywgcHJvcGVydHkpIHtcbiAgICAgICAgICAgICAgICAgICAgcHJvcHNbcHJvcGVydHldID0gc3R5bGVzW3Byb3BOYW1lKHByb3BlcnR5KV07XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBwcm9wcztcbiAgICAgICAgICAgICAgICB9LCB7fSk7XG5cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNPYmplY3QocHJvcGVydHkpKSB7XG4gICAgICAgICAgICAgICAgZWFjaChwcm9wZXJ0eSwgZnVuY3Rpb24gKHZhbHVlLCBwcm9wZXJ0eSkgeyByZXR1cm4gY3NzKGVsZW1lbnQsIHByb3BlcnR5LCB2YWx1ZSk7IH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gZWxlbWVudDtcblxuICAgICAgICB9KVswXTtcblxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldFN0eWxlcyhlbGVtZW50LCBwc2V1ZG9FbHQpIHtcbiAgICAgICAgZWxlbWVudCA9IHRvTm9kZShlbGVtZW50KTtcbiAgICAgICAgcmV0dXJuIGVsZW1lbnQub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlldy5nZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQsIHBzZXVkb0VsdCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0U3R5bGUoZWxlbWVudCwgcHJvcGVydHksIHBzZXVkb0VsdCkge1xuICAgICAgICByZXR1cm4gZ2V0U3R5bGVzKGVsZW1lbnQsIHBzZXVkb0VsdClbcHJvcGVydHldO1xuICAgIH1cblxuICAgIHZhciB2YXJzID0ge307XG5cbiAgICBmdW5jdGlvbiBnZXRDc3NWYXIobmFtZSkge1xuXG4gICAgICAgIGlmICghKG5hbWUgaW4gdmFycykpIHtcblxuICAgICAgICAgICAgLyogdXNhZ2UgaW4gY3NzOiAudmFyLW5hbWU6YmVmb3JlIHsgY29udGVudDpcInh5elwiIH0gKi9cblxuICAgICAgICAgICAgdmFyIGVsZW1lbnQgPSBhcHBlbmQoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LCBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKSk7XG5cbiAgICAgICAgICAgIGFkZENsYXNzKGVsZW1lbnQsIChcInZhci1cIiArIG5hbWUpKTtcblxuICAgICAgICAgICAgdHJ5IHtcblxuICAgICAgICAgICAgICAgIHZhcnNbbmFtZV0gPSBnZXRTdHlsZShlbGVtZW50LCAnY29udGVudCcsICc6YmVmb3JlJykucmVwbGFjZSgvXltcIiddKC4qKVtcIiddJC8sICckMScpO1xuICAgICAgICAgICAgICAgIHZhcnNbbmFtZV0gPSBKU09OLnBhcnNlKHZhcnNbbmFtZV0pO1xuXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7fVxuXG4gICAgICAgICAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQucmVtb3ZlQ2hpbGQoZWxlbWVudCk7XG5cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB2YXJzW25hbWVdO1xuXG4gICAgfVxuXG4gICAgdmFyIGNzc1Byb3BzID0ge307XG5cbiAgICBmdW5jdGlvbiBwcm9wTmFtZShuYW1lKSB7XG5cbiAgICAgICAgdmFyIHJldCA9IGNzc1Byb3BzW25hbWVdO1xuICAgICAgICBpZiAoIXJldCkge1xuICAgICAgICAgICAgcmV0ID0gY3NzUHJvcHNbbmFtZV0gPSB2ZW5kb3JQcm9wTmFtZShuYW1lKSB8fCBuYW1lO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXQ7XG4gICAgfVxuXG4gICAgdmFyIGNzc1ByZWZpeGVzID0gWyd3ZWJraXQnLCAnbW96JywgJ21zJ107XG4gICAgdmFyIHJlZiQxID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnXycpO1xuICAgIHZhciBzdHlsZSA9IHJlZiQxLnN0eWxlO1xuXG4gICAgZnVuY3Rpb24gdmVuZG9yUHJvcE5hbWUobmFtZSkge1xuXG4gICAgICAgIG5hbWUgPSBoeXBoZW5hdGUobmFtZSk7XG5cbiAgICAgICAgaWYgKG5hbWUgaW4gc3R5bGUpIHtcbiAgICAgICAgICAgIHJldHVybiBuYW1lO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGkgPSBjc3NQcmVmaXhlcy5sZW5ndGgsIHByZWZpeGVkTmFtZTtcblxuICAgICAgICB3aGlsZSAoaS0tKSB7XG4gICAgICAgICAgICBwcmVmaXhlZE5hbWUgPSBcIi1cIiArIChjc3NQcmVmaXhlc1tpXSkgKyBcIi1cIiArIG5hbWU7XG4gICAgICAgICAgICBpZiAocHJlZml4ZWROYW1lIGluIHN0eWxlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHByZWZpeGVkTmFtZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHRyYW5zaXRpb24oZWxlbWVudCwgcHJvcHMsIGR1cmF0aW9uLCB0aW1pbmcpIHtcbiAgICAgICAgaWYgKCBkdXJhdGlvbiA9PT0gdm9pZCAwICkgZHVyYXRpb24gPSA0MDA7XG4gICAgICAgIGlmICggdGltaW5nID09PSB2b2lkIDAgKSB0aW1pbmcgPSAnbGluZWFyJztcblxuXG4gICAgICAgIHJldHVybiBQcm9taXNlJDEuYWxsKHRvTm9kZXMoZWxlbWVudCkubWFwKGZ1bmN0aW9uIChlbGVtZW50KSB7IHJldHVybiBuZXcgUHJvbWlzZSQxKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcblxuICAgICAgICAgICAgICAgIGZvciAodmFyIG5hbWUgaW4gcHJvcHMpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHZhbHVlID0gY3NzKGVsZW1lbnQsIG5hbWUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT09ICcnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjc3MoZWxlbWVudCwgbmFtZSwgdmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdmFyIHRpbWVyID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7IHJldHVybiB0cmlnZ2VyKGVsZW1lbnQsICd0cmFuc2l0aW9uZW5kJyk7IH0sIGR1cmF0aW9uKTtcblxuICAgICAgICAgICAgICAgIG9uY2UoZWxlbWVudCwgJ3RyYW5zaXRpb25lbmQgdHJhbnNpdGlvbmNhbmNlbGVkJywgZnVuY3Rpb24gKHJlZikge1xuICAgICAgICAgICAgICAgICAgICB2YXIgdHlwZSA9IHJlZi50eXBlO1xuXG4gICAgICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lcik7XG4gICAgICAgICAgICAgICAgICAgIHJlbW92ZUNsYXNzKGVsZW1lbnQsICd1ay10cmFuc2l0aW9uJyk7XG4gICAgICAgICAgICAgICAgICAgIGNzcyhlbGVtZW50LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAndHJhbnNpdGlvbi1wcm9wZXJ0eSc6ICcnLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ3RyYW5zaXRpb24tZHVyYXRpb24nOiAnJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICd0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbic6ICcnXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB0eXBlID09PSAndHJhbnNpdGlvbmNhbmNlbGVkJyA/IHJlamVjdCgpIDogcmVzb2x2ZSgpO1xuICAgICAgICAgICAgICAgIH0sIGZhbHNlLCBmdW5jdGlvbiAocmVmKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciB0YXJnZXQgPSByZWYudGFyZ2V0O1xuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBlbGVtZW50ID09PSB0YXJnZXQ7XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICBhZGRDbGFzcyhlbGVtZW50LCAndWstdHJhbnNpdGlvbicpO1xuICAgICAgICAgICAgICAgIGNzcyhlbGVtZW50LCBhc3NpZ24oe1xuICAgICAgICAgICAgICAgICAgICAndHJhbnNpdGlvbi1wcm9wZXJ0eSc6IE9iamVjdC5rZXlzKHByb3BzKS5tYXAocHJvcE5hbWUpLmpvaW4oJywnKSxcbiAgICAgICAgICAgICAgICAgICAgJ3RyYW5zaXRpb24tZHVyYXRpb24nOiAoZHVyYXRpb24gKyBcIm1zXCIpLFxuICAgICAgICAgICAgICAgICAgICAndHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb24nOiB0aW1pbmdcbiAgICAgICAgICAgICAgICB9LCBwcm9wcykpO1xuXG4gICAgICAgICAgICB9KTsgfVxuICAgICAgICApKTtcblxuICAgIH1cblxuICAgIHZhciBUcmFuc2l0aW9uID0ge1xuXG4gICAgICAgIHN0YXJ0OiB0cmFuc2l0aW9uLFxuXG4gICAgICAgIHN0b3A6IGZ1bmN0aW9uKGVsZW1lbnQpIHtcbiAgICAgICAgICAgIHRyaWdnZXIoZWxlbWVudCwgJ3RyYW5zaXRpb25lbmQnKTtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlJDEucmVzb2x2ZSgpO1xuICAgICAgICB9LFxuXG4gICAgICAgIGNhbmNlbDogZnVuY3Rpb24oZWxlbWVudCkge1xuICAgICAgICAgICAgdHJpZ2dlcihlbGVtZW50LCAndHJhbnNpdGlvbmNhbmNlbGVkJyk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgaW5Qcm9ncmVzczogZnVuY3Rpb24oZWxlbWVudCkge1xuICAgICAgICAgICAgcmV0dXJuIGhhc0NsYXNzKGVsZW1lbnQsICd1ay10cmFuc2l0aW9uJyk7XG4gICAgICAgIH1cblxuICAgIH07XG5cbiAgICB2YXIgYW5pbWF0aW9uUHJlZml4ID0gJ3VrLWFuaW1hdGlvbi0nO1xuICAgIHZhciBjbHNDYW5jZWxBbmltYXRpb24gPSAndWstY2FuY2VsLWFuaW1hdGlvbic7XG5cbiAgICBmdW5jdGlvbiBhbmltYXRlKGVsZW1lbnQsIGFuaW1hdGlvbiwgZHVyYXRpb24sIG9yaWdpbiwgb3V0KSB7XG4gICAgICAgIHZhciBhcmd1bWVudHMkMSA9IGFyZ3VtZW50cztcbiAgICAgICAgaWYgKCBkdXJhdGlvbiA9PT0gdm9pZCAwICkgZHVyYXRpb24gPSAyMDA7XG5cblxuICAgICAgICByZXR1cm4gUHJvbWlzZSQxLmFsbCh0b05vZGVzKGVsZW1lbnQpLm1hcChmdW5jdGlvbiAoZWxlbWVudCkgeyByZXR1cm4gbmV3IFByb21pc2UkMShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG5cbiAgICAgICAgICAgICAgICBpZiAoaGFzQ2xhc3MoZWxlbWVudCwgY2xzQ2FuY2VsQW5pbWF0aW9uKSkge1xuICAgICAgICAgICAgICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZnVuY3Rpb24gKCkgeyByZXR1cm4gUHJvbWlzZSQxLnJlc29sdmUoKS50aGVuKGZ1bmN0aW9uICgpIHsgcmV0dXJuIGFuaW1hdGUuYXBwbHkodm9pZCAwLCBhcmd1bWVudHMkMSkudGhlbihyZXNvbHZlLCByZWplY3QpOyB9XG4gICAgICAgICAgICAgICAgICAgICAgICApOyB9XG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB2YXIgY2xzID0gYW5pbWF0aW9uICsgXCIgXCIgKyBhbmltYXRpb25QcmVmaXggKyAob3V0ID8gJ2xlYXZlJyA6ICdlbnRlcicpO1xuXG4gICAgICAgICAgICAgICAgaWYgKHN0YXJ0c1dpdGgoYW5pbWF0aW9uLCBhbmltYXRpb25QcmVmaXgpKSB7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKG9yaWdpbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2xzICs9IFwiIHVrLXRyYW5zZm9ybS1vcmlnaW4tXCIgKyBvcmlnaW47XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBpZiAob3V0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjbHMgKz0gXCIgXCIgKyBhbmltYXRpb25QcmVmaXggKyBcInJldmVyc2VcIjtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmVzZXQoKTtcblxuICAgICAgICAgICAgICAgIG9uY2UoZWxlbWVudCwgJ2FuaW1hdGlvbmVuZCBhbmltYXRpb25jYW5jZWwnLCBmdW5jdGlvbiAocmVmKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciB0eXBlID0gcmVmLnR5cGU7XG5cblxuICAgICAgICAgICAgICAgICAgICB2YXIgaGFzUmVzZXQgPSBmYWxzZTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZSA9PT0gJ2FuaW1hdGlvbmNhbmNlbCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzZXQoKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIFByb21pc2UkMS5yZXNvbHZlKCkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzUmVzZXQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc2V0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZShmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWhhc1Jlc2V0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkQ2xhc3MoZWxlbWVudCwgY2xzQ2FuY2VsQW5pbWF0aW9uKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZShmdW5jdGlvbiAoKSB7IHJldHVybiByZW1vdmVDbGFzcyhlbGVtZW50LCBjbHNDYW5jZWxBbmltYXRpb24pOyB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICB9LCBmYWxzZSwgZnVuY3Rpb24gKHJlZikge1xuICAgICAgICAgICAgICAgICAgICB2YXIgdGFyZ2V0ID0gcmVmLnRhcmdldDtcblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZWxlbWVudCA9PT0gdGFyZ2V0O1xuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgY3NzKGVsZW1lbnQsICdhbmltYXRpb25EdXJhdGlvbicsIChkdXJhdGlvbiArIFwibXNcIikpO1xuICAgICAgICAgICAgICAgIGFkZENsYXNzKGVsZW1lbnQsIGNscyk7XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiByZXNldCgpIHtcbiAgICAgICAgICAgICAgICAgICAgY3NzKGVsZW1lbnQsICdhbmltYXRpb25EdXJhdGlvbicsICcnKTtcbiAgICAgICAgICAgICAgICAgICAgcmVtb3ZlQ2xhc3NlcyhlbGVtZW50LCAoYW5pbWF0aW9uUHJlZml4ICsgXCJcXFxcUypcIikpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgfSk7IH1cbiAgICAgICAgKSk7XG5cbiAgICB9XG5cbiAgICB2YXIgaW5Qcm9ncmVzcyA9IG5ldyBSZWdFeHAoKGFuaW1hdGlvblByZWZpeCArIFwiKGVudGVyfGxlYXZlKVwiKSk7XG4gICAgdmFyIEFuaW1hdGlvbiA9IHtcblxuICAgICAgICBpbjogZnVuY3Rpb24oZWxlbWVudCwgYW5pbWF0aW9uLCBkdXJhdGlvbiwgb3JpZ2luKSB7XG4gICAgICAgICAgICByZXR1cm4gYW5pbWF0ZShlbGVtZW50LCBhbmltYXRpb24sIGR1cmF0aW9uLCBvcmlnaW4sIGZhbHNlKTtcbiAgICAgICAgfSxcblxuICAgICAgICBvdXQ6IGZ1bmN0aW9uKGVsZW1lbnQsIGFuaW1hdGlvbiwgZHVyYXRpb24sIG9yaWdpbikge1xuICAgICAgICAgICAgcmV0dXJuIGFuaW1hdGUoZWxlbWVudCwgYW5pbWF0aW9uLCBkdXJhdGlvbiwgb3JpZ2luLCB0cnVlKTtcbiAgICAgICAgfSxcblxuICAgICAgICBpblByb2dyZXNzOiBmdW5jdGlvbihlbGVtZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gaW5Qcm9ncmVzcy50ZXN0KGF0dHIoZWxlbWVudCwgJ2NsYXNzJykpO1xuICAgICAgICB9LFxuXG4gICAgICAgIGNhbmNlbDogZnVuY3Rpb24oZWxlbWVudCkge1xuICAgICAgICAgICAgdHJpZ2dlcihlbGVtZW50LCAnYW5pbWF0aW9uY2FuY2VsJyk7XG4gICAgICAgIH1cblxuICAgIH07XG5cbiAgICBmdW5jdGlvbiAkKHNlbGVjdG9yLCBjb250ZXh0KSB7XG4gICAgICAgIHJldHVybiAhaXNTdHJpbmcoc2VsZWN0b3IpXG4gICAgICAgICAgICA/IHRvTm9kZShzZWxlY3RvcilcbiAgICAgICAgICAgIDogaXNIdG1sKHNlbGVjdG9yKVxuICAgICAgICAgICAgICAgID8gdG9Ob2RlKGZyYWdtZW50KHNlbGVjdG9yKSlcbiAgICAgICAgICAgICAgICA6IGZpbmQoc2VsZWN0b3IsIGNvbnRleHQpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uICQkKHNlbGVjdG9yLCBjb250ZXh0KSB7XG4gICAgICAgIHJldHVybiAhaXNTdHJpbmcoc2VsZWN0b3IpXG4gICAgICAgICAgICA/IHRvTm9kZXMoc2VsZWN0b3IpXG4gICAgICAgICAgICA6IGlzSHRtbChzZWxlY3RvcilcbiAgICAgICAgICAgICAgICA/IHRvTm9kZXMoZnJhZ21lbnQoc2VsZWN0b3IpKVxuICAgICAgICAgICAgICAgIDogZmluZEFsbChzZWxlY3RvciwgY29udGV4dCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNIdG1sKHN0cikge1xuICAgICAgICByZXR1cm4gc3RyWzBdID09PSAnPCcgfHwgc3RyLm1hdGNoKC9eXFxzKjwvKTtcbiAgICB9XG5cbiAgICB2YXIgZGlycyA9IHtcbiAgICAgICAgd2lkdGg6IFsneCcsICdsZWZ0JywgJ3JpZ2h0J10sXG4gICAgICAgIGhlaWdodDogWyd5JywgJ3RvcCcsICdib3R0b20nXVxuICAgIH07XG5cbiAgICBmdW5jdGlvbiBwb3NpdGlvbkF0KGVsZW1lbnQsIHRhcmdldCwgZWxBdHRhY2gsIHRhcmdldEF0dGFjaCwgZWxPZmZzZXQsIHRhcmdldE9mZnNldCwgZmxpcCwgYm91bmRhcnkpIHtcblxuICAgICAgICBlbEF0dGFjaCA9IGdldFBvcyhlbEF0dGFjaCk7XG4gICAgICAgIHRhcmdldEF0dGFjaCA9IGdldFBvcyh0YXJnZXRBdHRhY2gpO1xuXG4gICAgICAgIHZhciBmbGlwcGVkID0ge2VsZW1lbnQ6IGVsQXR0YWNoLCB0YXJnZXQ6IHRhcmdldEF0dGFjaH07XG5cbiAgICAgICAgaWYgKCFlbGVtZW50IHx8ICF0YXJnZXQpIHtcbiAgICAgICAgICAgIHJldHVybiBmbGlwcGVkO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGRpbSA9IGdldERpbWVuc2lvbnMoZWxlbWVudCk7XG4gICAgICAgIHZhciB0YXJnZXREaW0gPSBnZXREaW1lbnNpb25zKHRhcmdldCk7XG4gICAgICAgIHZhciBwb3NpdGlvbiA9IHRhcmdldERpbTtcblxuICAgICAgICBtb3ZlVG8ocG9zaXRpb24sIGVsQXR0YWNoLCBkaW0sIC0xKTtcbiAgICAgICAgbW92ZVRvKHBvc2l0aW9uLCB0YXJnZXRBdHRhY2gsIHRhcmdldERpbSwgMSk7XG5cbiAgICAgICAgZWxPZmZzZXQgPSBnZXRPZmZzZXRzKGVsT2Zmc2V0LCBkaW0ud2lkdGgsIGRpbS5oZWlnaHQpO1xuICAgICAgICB0YXJnZXRPZmZzZXQgPSBnZXRPZmZzZXRzKHRhcmdldE9mZnNldCwgdGFyZ2V0RGltLndpZHRoLCB0YXJnZXREaW0uaGVpZ2h0KTtcblxuICAgICAgICBlbE9mZnNldFsneCddICs9IHRhcmdldE9mZnNldFsneCddO1xuICAgICAgICBlbE9mZnNldFsneSddICs9IHRhcmdldE9mZnNldFsneSddO1xuXG4gICAgICAgIHBvc2l0aW9uLmxlZnQgKz0gZWxPZmZzZXRbJ3gnXTtcbiAgICAgICAgcG9zaXRpb24udG9wICs9IGVsT2Zmc2V0Wyd5J107XG5cbiAgICAgICAgYm91bmRhcnkgPSBnZXREaW1lbnNpb25zKGJvdW5kYXJ5IHx8IHdpbmRvdyQxKGVsZW1lbnQpKTtcblxuICAgICAgICBpZiAoZmxpcCkge1xuICAgICAgICAgICAgZWFjaChkaXJzLCBmdW5jdGlvbiAocmVmLCBwcm9wKSB7XG4gICAgICAgICAgICAgICAgdmFyIGRpciA9IHJlZlswXTtcbiAgICAgICAgICAgICAgICB2YXIgYWxpZ24gPSByZWZbMV07XG4gICAgICAgICAgICAgICAgdmFyIGFsaWduRmxpcCA9IHJlZlsyXTtcblxuXG4gICAgICAgICAgICAgICAgaWYgKCEoZmxpcCA9PT0gdHJ1ZSB8fCBpbmNsdWRlcyhmbGlwLCBkaXIpKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdmFyIGVsZW1PZmZzZXQgPSBlbEF0dGFjaFtkaXJdID09PSBhbGlnblxuICAgICAgICAgICAgICAgICAgICA/IC1kaW1bcHJvcF1cbiAgICAgICAgICAgICAgICAgICAgOiBlbEF0dGFjaFtkaXJdID09PSBhbGlnbkZsaXBcbiAgICAgICAgICAgICAgICAgICAgICAgID8gZGltW3Byb3BdXG4gICAgICAgICAgICAgICAgICAgICAgICA6IDA7XG5cbiAgICAgICAgICAgICAgICB2YXIgdGFyZ2V0T2Zmc2V0ID0gdGFyZ2V0QXR0YWNoW2Rpcl0gPT09IGFsaWduXG4gICAgICAgICAgICAgICAgICAgID8gdGFyZ2V0RGltW3Byb3BdXG4gICAgICAgICAgICAgICAgICAgIDogdGFyZ2V0QXR0YWNoW2Rpcl0gPT09IGFsaWduRmxpcFxuICAgICAgICAgICAgICAgICAgICAgICAgPyAtdGFyZ2V0RGltW3Byb3BdXG4gICAgICAgICAgICAgICAgICAgICAgICA6IDA7XG5cbiAgICAgICAgICAgICAgICBpZiAocG9zaXRpb25bYWxpZ25dIDwgYm91bmRhcnlbYWxpZ25dIHx8IHBvc2l0aW9uW2FsaWduXSArIGRpbVtwcm9wXSA+IGJvdW5kYXJ5W2FsaWduRmxpcF0pIHtcblxuICAgICAgICAgICAgICAgICAgICB2YXIgY2VudGVyT2Zmc2V0ID0gZGltW3Byb3BdIC8gMjtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGNlbnRlclRhcmdldE9mZnNldCA9IHRhcmdldEF0dGFjaFtkaXJdID09PSAnY2VudGVyJyA/IC10YXJnZXREaW1bcHJvcF0gLyAyIDogMDtcblxuICAgICAgICAgICAgICAgICAgICBlbEF0dGFjaFtkaXJdID09PSAnY2VudGVyJyAmJiAoXG4gICAgICAgICAgICAgICAgICAgICAgICBhcHBseShjZW50ZXJPZmZzZXQsIGNlbnRlclRhcmdldE9mZnNldClcbiAgICAgICAgICAgICAgICAgICAgICAgIHx8IGFwcGx5KC1jZW50ZXJPZmZzZXQsIC1jZW50ZXJUYXJnZXRPZmZzZXQpXG4gICAgICAgICAgICAgICAgICAgICkgfHwgYXBwbHkoZWxlbU9mZnNldCwgdGFyZ2V0T2Zmc2V0KTtcblxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGFwcGx5KGVsZW1PZmZzZXQsIHRhcmdldE9mZnNldCkge1xuXG4gICAgICAgICAgICAgICAgICAgIHZhciBuZXdWYWwgPSBwb3NpdGlvblthbGlnbl0gKyBlbGVtT2Zmc2V0ICsgdGFyZ2V0T2Zmc2V0IC0gZWxPZmZzZXRbZGlyXSAqIDI7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKG5ld1ZhbCA+PSBib3VuZGFyeVthbGlnbl0gJiYgbmV3VmFsICsgZGltW3Byb3BdIDw9IGJvdW5kYXJ5W2FsaWduRmxpcF0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uW2FsaWduXSA9IG5ld1ZhbDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgWydlbGVtZW50JywgJ3RhcmdldCddLmZvckVhY2goZnVuY3Rpb24gKGVsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxpcHBlZFtlbF1bZGlyXSA9ICFlbGVtT2Zmc2V0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gZmxpcHBlZFtlbF1bZGlyXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGZsaXBwZWRbZWxdW2Rpcl0gPT09IGRpcnNbcHJvcF1bMV1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gZGlyc1twcm9wXVsyXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBkaXJzW3Byb3BdWzFdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgb2Zmc2V0KGVsZW1lbnQsIHBvc2l0aW9uKTtcblxuICAgICAgICByZXR1cm4gZmxpcHBlZDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBvZmZzZXQoZWxlbWVudCwgY29vcmRpbmF0ZXMpIHtcblxuICAgICAgICBlbGVtZW50ID0gdG9Ob2RlKGVsZW1lbnQpO1xuXG4gICAgICAgIGlmIChjb29yZGluYXRlcykge1xuXG4gICAgICAgICAgICB2YXIgY3VycmVudE9mZnNldCA9IG9mZnNldChlbGVtZW50KTtcbiAgICAgICAgICAgIHZhciBwb3MgPSBjc3MoZWxlbWVudCwgJ3Bvc2l0aW9uJyk7XG5cbiAgICAgICAgICAgIFsnbGVmdCcsICd0b3AnXS5mb3JFYWNoKGZ1bmN0aW9uIChwcm9wKSB7XG4gICAgICAgICAgICAgICAgaWYgKHByb3AgaW4gY29vcmRpbmF0ZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHZhbHVlID0gY3NzKGVsZW1lbnQsIHByb3ApO1xuICAgICAgICAgICAgICAgICAgICBjc3MoZWxlbWVudCwgcHJvcCwgY29vcmRpbmF0ZXNbcHJvcF0gLSBjdXJyZW50T2Zmc2V0W3Byb3BdXG4gICAgICAgICAgICAgICAgICAgICAgICArIHRvRmxvYXQocG9zID09PSAnYWJzb2x1dGUnICYmIHZhbHVlID09PSAnYXV0bydcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IHBvc2l0aW9uKGVsZW1lbnQpW3Byb3BdXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiB2YWx1ZSlcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGdldERpbWVuc2lvbnMoZWxlbWVudCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0RGltZW5zaW9ucyhlbGVtZW50KSB7XG5cbiAgICAgICAgZWxlbWVudCA9IHRvTm9kZShlbGVtZW50KTtcblxuICAgICAgICB2YXIgcmVmID0gd2luZG93JDEoZWxlbWVudCk7XG4gICAgICAgIHZhciB0b3AgPSByZWYucGFnZVlPZmZzZXQ7XG4gICAgICAgIHZhciBsZWZ0ID0gcmVmLnBhZ2VYT2Zmc2V0O1xuXG4gICAgICAgIGlmIChpc1dpbmRvdyhlbGVtZW50KSkge1xuXG4gICAgICAgICAgICB2YXIgaGVpZ2h0ID0gZWxlbWVudC5pbm5lckhlaWdodDtcbiAgICAgICAgICAgIHZhciB3aWR0aCA9IGVsZW1lbnQuaW5uZXJXaWR0aDtcblxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICB0b3A6IHRvcCxcbiAgICAgICAgICAgICAgICBsZWZ0OiBsZWZ0LFxuICAgICAgICAgICAgICAgIGhlaWdodDogaGVpZ2h0LFxuICAgICAgICAgICAgICAgIHdpZHRoOiB3aWR0aCxcbiAgICAgICAgICAgICAgICBib3R0b206IHRvcCArIGhlaWdodCxcbiAgICAgICAgICAgICAgICByaWdodDogbGVmdCArIHdpZHRoLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBzdHlsZSwgaGlkZGVuO1xuXG4gICAgICAgIGlmICghaXNWaXNpYmxlKGVsZW1lbnQpKSB7XG4gICAgICAgICAgICBzdHlsZSA9IGF0dHIoZWxlbWVudCwgJ3N0eWxlJyk7XG4gICAgICAgICAgICBoaWRkZW4gPSBhdHRyKGVsZW1lbnQsICdoaWRkZW4nKTtcblxuICAgICAgICAgICAgYXR0cihlbGVtZW50LCB7XG4gICAgICAgICAgICAgICAgc3R5bGU6ICgoc3R5bGUgfHwgJycpICsgXCI7ZGlzcGxheTpibG9jayAhaW1wb3J0YW50O1wiKSxcbiAgICAgICAgICAgICAgICBoaWRkZW46IG51bGxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHJlY3QgPSBlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG4gICAgICAgIGlmICghaXNVbmRlZmluZWQoc3R5bGUpKSB7XG4gICAgICAgICAgICBhdHRyKGVsZW1lbnQsIHtzdHlsZTogc3R5bGUsIGhpZGRlbjogaGlkZGVufSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgaGVpZ2h0OiByZWN0LmhlaWdodCxcbiAgICAgICAgICAgIHdpZHRoOiByZWN0LndpZHRoLFxuICAgICAgICAgICAgdG9wOiByZWN0LnRvcCArIHRvcCxcbiAgICAgICAgICAgIGxlZnQ6IHJlY3QubGVmdCArIGxlZnQsXG4gICAgICAgICAgICBib3R0b206IHJlY3QuYm90dG9tICsgdG9wLFxuICAgICAgICAgICAgcmlnaHQ6IHJlY3QucmlnaHQgKyBsZWZ0LFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHBvc2l0aW9uKGVsZW1lbnQpIHtcbiAgICAgICAgZWxlbWVudCA9IHRvTm9kZShlbGVtZW50KTtcblxuICAgICAgICB2YXIgcGFyZW50ID0gb2Zmc2V0UGFyZW50KGVsZW1lbnQpO1xuICAgICAgICB2YXIgcGFyZW50T2Zmc2V0ID0gcGFyZW50ID09PSBkb2NFbChlbGVtZW50KSA/IHt0b3A6IDAsIGxlZnQ6IDB9IDogb2Zmc2V0KHBhcmVudCk7XG4gICAgICAgIHZhciByZWYgPSBbJ3RvcCcsICdsZWZ0J10ucmVkdWNlKGZ1bmN0aW9uIChwcm9wcywgcHJvcCkge1xuICAgICAgICAgICAgdmFyIHByb3BOYW1lJCQxID0gdWNmaXJzdChwcm9wKTtcbiAgICAgICAgICAgIHByb3BzW3Byb3BdIC09IHBhcmVudE9mZnNldFtwcm9wXVxuICAgICAgICAgICAgICAgICsgKHRvRmxvYXQoY3NzKGVsZW1lbnQsIChcIm1hcmdpblwiICsgcHJvcE5hbWUkJDEpKSkgfHwgMClcbiAgICAgICAgICAgICAgICArICh0b0Zsb2F0KGNzcyhwYXJlbnQsIChcImJvcmRlclwiICsgcHJvcE5hbWUkJDEgKyBcIldpZHRoXCIpKSkgfHwgMCk7XG4gICAgICAgICAgICByZXR1cm4gcHJvcHM7XG4gICAgICAgIH0sIG9mZnNldChlbGVtZW50KSk7XG4gICAgICAgIHZhciB0b3AgPSByZWYudG9wO1xuICAgICAgICB2YXIgbGVmdCA9IHJlZi5sZWZ0O1xuXG4gICAgICAgIHJldHVybiB7dG9wOiB0b3AsIGxlZnQ6IGxlZnR9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG9mZnNldFBhcmVudChlbGVtZW50KSB7XG5cbiAgICAgICAgdmFyIHBhcmVudCA9IHRvTm9kZShlbGVtZW50KS5vZmZzZXRQYXJlbnQ7XG5cbiAgICAgICAgd2hpbGUgKHBhcmVudCAmJiBjc3MocGFyZW50LCAncG9zaXRpb24nKSA9PT0gJ3N0YXRpYycpIHtcbiAgICAgICAgICAgIHBhcmVudCA9IHBhcmVudC5vZmZzZXRQYXJlbnQ7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcGFyZW50IHx8IGRvY0VsKGVsZW1lbnQpO1xuICAgIH1cblxuICAgIHZhciBoZWlnaHQgPSBkaW1lbnNpb24oJ2hlaWdodCcpO1xuICAgIHZhciB3aWR0aCA9IGRpbWVuc2lvbignd2lkdGgnKTtcblxuICAgIGZ1bmN0aW9uIGRpbWVuc2lvbihwcm9wKSB7XG4gICAgICAgIHZhciBwcm9wTmFtZSQkMSA9IHVjZmlyc3QocHJvcCk7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoZWxlbWVudCwgdmFsdWUpIHtcblxuICAgICAgICAgICAgZWxlbWVudCA9IHRvTm9kZShlbGVtZW50KTtcblxuICAgICAgICAgICAgaWYgKGlzVW5kZWZpbmVkKHZhbHVlKSkge1xuXG4gICAgICAgICAgICAgICAgaWYgKGlzV2luZG93KGVsZW1lbnQpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBlbGVtZW50WyhcImlubmVyXCIgKyBwcm9wTmFtZSQkMSldO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChpc0RvY3VtZW50KGVsZW1lbnQpKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBkb2MgPSBlbGVtZW50LmRvY3VtZW50RWxlbWVudDtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE1hdGgubWF4KGRvY1soXCJvZmZzZXRcIiArIHByb3BOYW1lJCQxKV0sIGRvY1soXCJzY3JvbGxcIiArIHByb3BOYW1lJCQxKV0pO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHZhbHVlID0gY3NzKGVsZW1lbnQsIHByb3ApO1xuICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUgPT09ICdhdXRvJyA/IGVsZW1lbnRbKFwib2Zmc2V0XCIgKyBwcm9wTmFtZSQkMSldIDogdG9GbG9hdCh2YWx1ZSkgfHwgMDtcblxuICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZSAtIGJveE1vZGVsQWRqdXN0KHByb3AsIGVsZW1lbnQpO1xuXG4gICAgICAgICAgICB9IGVsc2Uge1xuXG4gICAgICAgICAgICAgICAgY3NzKGVsZW1lbnQsIHByb3AsICF2YWx1ZSAmJiB2YWx1ZSAhPT0gMFxuICAgICAgICAgICAgICAgICAgICA/ICcnXG4gICAgICAgICAgICAgICAgICAgIDogK3ZhbHVlICsgYm94TW9kZWxBZGp1c3QocHJvcCwgZWxlbWVudCkgKyAncHgnXG4gICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgfVxuXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYm94TW9kZWxBZGp1c3QocHJvcCwgZWxlbWVudCkge1xuICAgICAgICByZXR1cm4gY3NzKGVsZW1lbnQsICdib3hTaXppbmcnKSA9PT0gJ2JvcmRlci1ib3gnXG4gICAgICAgICAgICA/IGRpcnNbcHJvcF0uc2xpY2UoMSkubWFwKHVjZmlyc3QpLnJlZHVjZShmdW5jdGlvbiAodmFsdWUsIHByb3ApIHsgcmV0dXJuIHZhbHVlXG4gICAgICAgICAgICAgICAgKyB0b0Zsb2F0KGNzcyhlbGVtZW50LCAoXCJwYWRkaW5nXCIgKyBwcm9wKSkpXG4gICAgICAgICAgICAgICAgKyB0b0Zsb2F0KGNzcyhlbGVtZW50LCAoXCJib3JkZXJcIiArIHByb3AgKyBcIldpZHRoXCIpKSk7IH1cbiAgICAgICAgICAgICAgICAsIDApXG4gICAgICAgICAgICA6IDA7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbW92ZVRvKHBvc2l0aW9uLCBhdHRhY2gsIGRpbSwgZmFjdG9yKSB7XG4gICAgICAgIGVhY2goZGlycywgZnVuY3Rpb24gKHJlZiwgcHJvcCkge1xuICAgICAgICAgICAgdmFyIGRpciA9IHJlZlswXTtcbiAgICAgICAgICAgIHZhciBhbGlnbiA9IHJlZlsxXTtcbiAgICAgICAgICAgIHZhciBhbGlnbkZsaXAgPSByZWZbMl07XG5cbiAgICAgICAgICAgIGlmIChhdHRhY2hbZGlyXSA9PT0gYWxpZ25GbGlwKSB7XG4gICAgICAgICAgICAgICAgcG9zaXRpb25bYWxpZ25dICs9IGRpbVtwcm9wXSAqIGZhY3RvcjtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoYXR0YWNoW2Rpcl0gPT09ICdjZW50ZXInKSB7XG4gICAgICAgICAgICAgICAgcG9zaXRpb25bYWxpZ25dICs9IGRpbVtwcm9wXSAqIGZhY3RvciAvIDI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldFBvcyhwb3MpIHtcblxuICAgICAgICB2YXIgeCA9IC9sZWZ0fGNlbnRlcnxyaWdodC87XG4gICAgICAgIHZhciB5ID0gL3RvcHxjZW50ZXJ8Ym90dG9tLztcblxuICAgICAgICBwb3MgPSAocG9zIHx8ICcnKS5zcGxpdCgnICcpO1xuXG4gICAgICAgIGlmIChwb3MubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICBwb3MgPSB4LnRlc3QocG9zWzBdKVxuICAgICAgICAgICAgICAgID8gcG9zLmNvbmNhdChbJ2NlbnRlciddKVxuICAgICAgICAgICAgICAgIDogeS50ZXN0KHBvc1swXSlcbiAgICAgICAgICAgICAgICAgICAgPyBbJ2NlbnRlciddLmNvbmNhdChwb3MpXG4gICAgICAgICAgICAgICAgICAgIDogWydjZW50ZXInLCAnY2VudGVyJ107XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgeDogeC50ZXN0KHBvc1swXSkgPyBwb3NbMF0gOiAnY2VudGVyJyxcbiAgICAgICAgICAgIHk6IHkudGVzdChwb3NbMV0pID8gcG9zWzFdIDogJ2NlbnRlcidcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRPZmZzZXRzKG9mZnNldHMsIHdpZHRoLCBoZWlnaHQpIHtcblxuICAgICAgICB2YXIgcmVmID0gKG9mZnNldHMgfHwgJycpLnNwbGl0KCcgJyk7XG4gICAgICAgIHZhciB4ID0gcmVmWzBdO1xuICAgICAgICB2YXIgeSA9IHJlZlsxXTtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgeDogeCA/IHRvRmxvYXQoeCkgKiAoZW5kc1dpdGgoeCwgJyUnKSA/IHdpZHRoIC8gMTAwIDogMSkgOiAwLFxuICAgICAgICAgICAgeTogeSA/IHRvRmxvYXQoeSkgKiAoZW5kc1dpdGgoeSwgJyUnKSA/IGhlaWdodCAvIDEwMCA6IDEpIDogMFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGZsaXBQb3NpdGlvbihwb3MpIHtcbiAgICAgICAgc3dpdGNoIChwb3MpIHtcbiAgICAgICAgICAgIGNhc2UgJ2xlZnQnOlxuICAgICAgICAgICAgICAgIHJldHVybiAncmlnaHQnO1xuICAgICAgICAgICAgY2FzZSAncmlnaHQnOlxuICAgICAgICAgICAgICAgIHJldHVybiAnbGVmdCc7XG4gICAgICAgICAgICBjYXNlICd0b3AnOlxuICAgICAgICAgICAgICAgIHJldHVybiAnYm90dG9tJztcbiAgICAgICAgICAgIGNhc2UgJ2JvdHRvbSc6XG4gICAgICAgICAgICAgICAgcmV0dXJuICd0b3AnO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm4gcG9zO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNJblZpZXcoZWxlbWVudCwgdG9wT2Zmc2V0LCBsZWZ0T2Zmc2V0LCByZWxhdGl2ZVRvVmlld3BvcnQpIHtcbiAgICAgICAgaWYgKCB0b3BPZmZzZXQgPT09IHZvaWQgMCApIHRvcE9mZnNldCA9IDA7XG4gICAgICAgIGlmICggbGVmdE9mZnNldCA9PT0gdm9pZCAwICkgbGVmdE9mZnNldCA9IDA7XG5cblxuICAgICAgICBpZiAoIWlzVmlzaWJsZShlbGVtZW50KSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgZWxlbWVudCA9IHRvTm9kZShlbGVtZW50KTtcbiAgICAgICAgdmFyIHdpbiA9IHdpbmRvdyQxKGVsZW1lbnQpO1xuXG4gICAgICAgIGlmIChyZWxhdGl2ZVRvVmlld3BvcnQpIHtcblxuICAgICAgICAgICAgcmV0dXJuIGludGVyc2VjdFJlY3QoZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSwge1xuICAgICAgICAgICAgICAgIHRvcDogLXRvcE9mZnNldCxcbiAgICAgICAgICAgICAgICBsZWZ0OiAtbGVmdE9mZnNldCxcbiAgICAgICAgICAgICAgICBib3R0b206IHRvcE9mZnNldCArIGhlaWdodCh3aW4pLFxuICAgICAgICAgICAgICAgIHJpZ2h0OiBsZWZ0T2Zmc2V0ICsgd2lkdGgod2luKVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgfSBlbHNlIHtcblxuICAgICAgICAgICAgdmFyIHJlZiA9IG9mZnNldFBvc2l0aW9uKGVsZW1lbnQpO1xuICAgICAgICAgICAgdmFyIGVsVG9wID0gcmVmWzBdO1xuICAgICAgICAgICAgdmFyIGVsTGVmdCA9IHJlZlsxXTtcbiAgICAgICAgICAgIHZhciB0b3AgPSB3aW4ucGFnZVlPZmZzZXQ7XG4gICAgICAgICAgICB2YXIgbGVmdCA9IHdpbi5wYWdlWE9mZnNldDtcblxuICAgICAgICAgICAgcmV0dXJuIGludGVyc2VjdFJlY3QoXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB0b3A6IGVsVG9wLFxuICAgICAgICAgICAgICAgICAgICBsZWZ0OiBlbExlZnQsXG4gICAgICAgICAgICAgICAgICAgIGJvdHRvbTogZWxUb3AgKyBlbGVtZW50Lm9mZnNldEhlaWdodCxcbiAgICAgICAgICAgICAgICAgICAgcmlnaHQ6IGVsVG9wICsgZWxlbWVudC5vZmZzZXRXaWR0aFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB0b3A6IHRvcCAtIHRvcE9mZnNldCxcbiAgICAgICAgICAgICAgICAgICAgbGVmdDogbGVmdCAtIGxlZnRPZmZzZXQsXG4gICAgICAgICAgICAgICAgICAgIGJvdHRvbTogdG9wICsgdG9wT2Zmc2V0ICsgaGVpZ2h0KHdpbiksXG4gICAgICAgICAgICAgICAgICAgIHJpZ2h0OiBsZWZ0ICsgbGVmdE9mZnNldCArIHdpZHRoKHdpbilcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzY3JvbGxlZE92ZXIoZWxlbWVudCwgaGVpZ2h0T2Zmc2V0KSB7XG4gICAgICAgIGlmICggaGVpZ2h0T2Zmc2V0ID09PSB2b2lkIDAgKSBoZWlnaHRPZmZzZXQgPSAwO1xuXG5cbiAgICAgICAgaWYgKCFpc1Zpc2libGUoZWxlbWVudCkpIHtcbiAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICB9XG5cbiAgICAgICAgZWxlbWVudCA9IHRvTm9kZShlbGVtZW50KTtcblxuICAgICAgICB2YXIgd2luID0gd2luZG93JDEoZWxlbWVudCk7XG4gICAgICAgIHZhciBkb2MgPSBkb2N1bWVudCQxKGVsZW1lbnQpO1xuICAgICAgICB2YXIgZWxIZWlnaHQgPSBlbGVtZW50Lm9mZnNldEhlaWdodCArIGhlaWdodE9mZnNldDtcbiAgICAgICAgdmFyIHJlZiA9IG9mZnNldFBvc2l0aW9uKGVsZW1lbnQpO1xuICAgICAgICB2YXIgdG9wID0gcmVmWzBdO1xuICAgICAgICB2YXIgdnAgPSBoZWlnaHQod2luKTtcbiAgICAgICAgdmFyIHZoID0gdnAgKyBNYXRoLm1pbigwLCB0b3AgLSB2cCk7XG4gICAgICAgIHZhciBkaWZmID0gTWF0aC5tYXgoMCwgdnAgLSAoaGVpZ2h0KGRvYykgKyBoZWlnaHRPZmZzZXQgLSAodG9wICsgZWxIZWlnaHQpKSk7XG5cbiAgICAgICAgcmV0dXJuIGNsYW1wKCgodmggKyB3aW4ucGFnZVlPZmZzZXQgLSB0b3ApIC8gKCh2aCArIChlbEhlaWdodCAtIChkaWZmIDwgdnAgPyBkaWZmIDogMCkpKSAvIDEwMCkpIC8gMTAwKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBvZmZzZXRQb3NpdGlvbihlbGVtZW50KSB7XG4gICAgICAgIHZhciBvZmZzZXQgPSBbMCwgMF07XG5cbiAgICAgICAgZG8ge1xuXG4gICAgICAgICAgICBvZmZzZXRbMF0gKz0gZWxlbWVudC5vZmZzZXRUb3A7XG4gICAgICAgICAgICBvZmZzZXRbMV0gKz0gZWxlbWVudC5vZmZzZXRMZWZ0O1xuXG4gICAgICAgICAgICBpZiAoY3NzKGVsZW1lbnQsICdwb3NpdGlvbicpID09PSAnZml4ZWQnKSB7XG4gICAgICAgICAgICAgICAgdmFyIHdpbiA9IHdpbmRvdyQxKGVsZW1lbnQpO1xuICAgICAgICAgICAgICAgIG9mZnNldFswXSArPSB3aW4ucGFnZVlPZmZzZXQ7XG4gICAgICAgICAgICAgICAgb2Zmc2V0WzFdICs9IHdpbi5wYWdlWE9mZnNldDtcbiAgICAgICAgICAgICAgICByZXR1cm4gb2Zmc2V0O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIH0gd2hpbGUgKChlbGVtZW50ID0gZWxlbWVudC5vZmZzZXRQYXJlbnQpKTtcblxuICAgICAgICByZXR1cm4gb2Zmc2V0O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHdpbmRvdyQxKGVsZW1lbnQpIHtcbiAgICAgICAgcmV0dXJuIGlzV2luZG93KGVsZW1lbnQpID8gZWxlbWVudCA6IGRvY3VtZW50JDEoZWxlbWVudCkuZGVmYXVsdFZpZXc7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZG9jdW1lbnQkMShlbGVtZW50KSB7XG4gICAgICAgIHJldHVybiB0b05vZGUoZWxlbWVudCkub3duZXJEb2N1bWVudDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBkb2NFbChlbGVtZW50KSB7XG4gICAgICAgIHJldHVybiBkb2N1bWVudCQxKGVsZW1lbnQpLmRvY3VtZW50RWxlbWVudDtcbiAgICB9XG5cbiAgICAvKiBnbG9iYWwgRG9jdW1lbnRUb3VjaCAqL1xuXG4gICAgdmFyIGlzUnRsID0gYXR0cihkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsICdkaXInKSA9PT0gJ3J0bCc7XG5cbiAgICB2YXIgaGFzVG91Y2hFdmVudHMgPSAnb250b3VjaHN0YXJ0JyBpbiB3aW5kb3c7XG4gICAgdmFyIGhhc1BvaW50ZXJFdmVudHMgPSB3aW5kb3cuUG9pbnRlckV2ZW50O1xuICAgIHZhciBoYXNUb3VjaCA9IGhhc1RvdWNoRXZlbnRzXG4gICAgICAgIHx8IHdpbmRvdy5Eb2N1bWVudFRvdWNoICYmIGRvY3VtZW50IGluc3RhbmNlb2YgRG9jdW1lbnRUb3VjaFxuICAgICAgICB8fCBuYXZpZ2F0b3IubWF4VG91Y2hQb2ludHM7IC8vIElFID49MTFcblxuICAgIHZhciBwb2ludGVyRG93biA9ICFoYXNUb3VjaCA/ICdtb3VzZWRvd24nIDogKFwibW91c2Vkb3duIFwiICsgKGhhc1RvdWNoRXZlbnRzID8gJ3RvdWNoc3RhcnQnIDogJ3BvaW50ZXJkb3duJykpO1xuICAgIHZhciBwb2ludGVyTW92ZSA9ICFoYXNUb3VjaCA/ICdtb3VzZW1vdmUnIDogKFwibW91c2Vtb3ZlIFwiICsgKGhhc1RvdWNoRXZlbnRzID8gJ3RvdWNobW92ZScgOiAncG9pbnRlcm1vdmUnKSk7XG4gICAgdmFyIHBvaW50ZXJVcCA9ICFoYXNUb3VjaCA/ICdtb3VzZXVwJyA6IChcIm1vdXNldXAgXCIgKyAoaGFzVG91Y2hFdmVudHMgPyAndG91Y2hlbmQnIDogJ3BvaW50ZXJ1cCcpKTtcbiAgICB2YXIgcG9pbnRlckVudGVyID0gaGFzVG91Y2ggJiYgaGFzUG9pbnRlckV2ZW50cyA/ICdwb2ludGVyZW50ZXInIDogJ21vdXNlZW50ZXInO1xuICAgIHZhciBwb2ludGVyTGVhdmUgPSBoYXNUb3VjaCAmJiBoYXNQb2ludGVyRXZlbnRzID8gJ3BvaW50ZXJsZWF2ZScgOiAnbW91c2VsZWF2ZSc7XG5cbiAgICAvKlxuICAgICAgICBCYXNlZCBvbjpcbiAgICAgICAgQ29weXJpZ2h0IChjKSAyMDE2IFdpbHNvbiBQYWdlIHdpbHNvbnBhZ2VAbWUuY29tXG4gICAgICAgIGh0dHBzOi8vZ2l0aHViLmNvbS93aWxzb25wYWdlL2Zhc3Rkb21cbiAgICAqL1xuXG4gICAgdmFyIGZhc3Rkb20gPSB7XG5cbiAgICAgICAgcmVhZHM6IFtdLFxuICAgICAgICB3cml0ZXM6IFtdLFxuXG4gICAgICAgIHJlYWQ6IGZ1bmN0aW9uKHRhc2spIHtcbiAgICAgICAgICAgIHRoaXMucmVhZHMucHVzaCh0YXNrKTtcbiAgICAgICAgICAgIHNjaGVkdWxlRmx1c2goKTtcbiAgICAgICAgICAgIHJldHVybiB0YXNrO1xuICAgICAgICB9LFxuXG4gICAgICAgIHdyaXRlOiBmdW5jdGlvbih0YXNrKSB7XG4gICAgICAgICAgICB0aGlzLndyaXRlcy5wdXNoKHRhc2spO1xuICAgICAgICAgICAgc2NoZWR1bGVGbHVzaCgpO1xuICAgICAgICAgICAgcmV0dXJuIHRhc2s7XG4gICAgICAgIH0sXG5cbiAgICAgICAgY2xlYXI6IGZ1bmN0aW9uKHRhc2spIHtcbiAgICAgICAgICAgIHJldHVybiByZW1vdmUkMSh0aGlzLnJlYWRzLCB0YXNrKSB8fCByZW1vdmUkMSh0aGlzLndyaXRlcywgdGFzayk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgZmx1c2g6IGZ1bmN0aW9uKCkge1xuXG4gICAgICAgICAgICBydW5UYXNrcyh0aGlzLnJlYWRzKTtcbiAgICAgICAgICAgIHJ1blRhc2tzKHRoaXMud3JpdGVzLnNwbGljZSgwLCB0aGlzLndyaXRlcy5sZW5ndGgpKTtcblxuICAgICAgICAgICAgdGhpcy5zY2hlZHVsZWQgPSBmYWxzZTtcblxuICAgICAgICAgICAgaWYgKHRoaXMucmVhZHMubGVuZ3RoIHx8IHRoaXMud3JpdGVzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHNjaGVkdWxlRmx1c2goKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9XG5cbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gc2NoZWR1bGVGbHVzaCgpIHtcbiAgICAgICAgaWYgKCFmYXN0ZG9tLnNjaGVkdWxlZCkge1xuICAgICAgICAgICAgZmFzdGRvbS5zY2hlZHVsZWQgPSB0cnVlO1xuICAgICAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZhc3Rkb20uZmx1c2guYmluZChmYXN0ZG9tKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBydW5UYXNrcyh0YXNrcykge1xuICAgICAgICB2YXIgdGFzaztcbiAgICAgICAgd2hpbGUgKCh0YXNrID0gdGFza3Muc2hpZnQoKSkpIHtcbiAgICAgICAgICAgIHRhc2soKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJlbW92ZSQxKGFycmF5LCBpdGVtKSB7XG4gICAgICAgIHZhciBpbmRleCA9IGFycmF5LmluZGV4T2YoaXRlbSk7XG4gICAgICAgIHJldHVybiAhIX5pbmRleCAmJiAhIWFycmF5LnNwbGljZShpbmRleCwgMSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gTW91c2VUcmFja2VyKCkge31cblxuICAgIE1vdXNlVHJhY2tlci5wcm90b3R5cGUgPSB7XG5cbiAgICAgICAgcG9zaXRpb25zOiBbXSxcbiAgICAgICAgcG9zaXRpb246IG51bGwsXG5cbiAgICAgICAgaW5pdDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICB2YXIgdGhpcyQxID0gdGhpcztcblxuXG4gICAgICAgICAgICB0aGlzLnBvc2l0aW9ucyA9IFtdO1xuICAgICAgICAgICAgdGhpcy5wb3NpdGlvbiA9IG51bGw7XG5cbiAgICAgICAgICAgIHZhciB0aWNraW5nID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLnVuYmluZCA9IG9uKGRvY3VtZW50LCAnbW91c2Vtb3ZlJywgZnVuY3Rpb24gKGUpIHtcblxuICAgICAgICAgICAgICAgIGlmICh0aWNraW5nKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgICAgICAgICB2YXIgdGltZSA9IERhdGUubm93KCk7XG4gICAgICAgICAgICAgICAgICAgIHZhciByZWYgPSB0aGlzJDEucG9zaXRpb25zO1xuICAgICAgICAgICAgICAgICAgICB2YXIgbGVuZ3RoID0gcmVmLmxlbmd0aDtcblxuICAgICAgICAgICAgICAgICAgICBpZiAobGVuZ3RoICYmICh0aW1lIC0gdGhpcyQxLnBvc2l0aW9uc1tsZW5ndGggLSAxXS50aW1lID4gMTAwKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcyQxLnBvc2l0aW9ucy5zcGxpY2UoMCwgbGVuZ3RoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMkMS5wb3NpdGlvbnMucHVzaCh7dGltZTogdGltZSwgeDogZS5wYWdlWCwgeTogZS5wYWdlWX0pO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzJDEucG9zaXRpb25zLmxlbmd0aCA+IDUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMkMS5wb3NpdGlvbnMuc2hpZnQoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHRpY2tpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9LCA1KTtcblxuICAgICAgICAgICAgICAgIHRpY2tpbmcgPSB0cnVlO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgfSxcblxuICAgICAgICBjYW5jZWw6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgaWYgKHRoaXMudW5iaW5kKSB7XG4gICAgICAgICAgICAgICAgdGhpcy51bmJpbmQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcblxuICAgICAgICBtb3Zlc1RvOiBmdW5jdGlvbih0YXJnZXQpIHtcblxuICAgICAgICAgICAgaWYgKHRoaXMucG9zaXRpb25zLmxlbmd0aCA8IDIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZhciBwID0gb2Zmc2V0KHRhcmdldCk7XG4gICAgICAgICAgICB2YXIgcG9zaXRpb24kJDEgPSB0aGlzLnBvc2l0aW9uc1t0aGlzLnBvc2l0aW9ucy5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgIHZhciByZWYgPSB0aGlzLnBvc2l0aW9ucztcbiAgICAgICAgICAgIHZhciBwcmV2UG9zID0gcmVmWzBdO1xuXG4gICAgICAgICAgICBpZiAocC5sZWZ0IDw9IHBvc2l0aW9uJCQxLnggJiYgcG9zaXRpb24kJDEueCA8PSBwLnJpZ2h0ICYmIHAudG9wIDw9IHBvc2l0aW9uJCQxLnkgJiYgcG9zaXRpb24kJDEueSA8PSBwLmJvdHRvbSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIHBvaW50cyA9IFtcbiAgICAgICAgICAgICAgICBbe3g6IHAubGVmdCwgeTogcC50b3B9LCB7eDogcC5yaWdodCwgeTogcC5ib3R0b219XSxcbiAgICAgICAgICAgICAgICBbe3g6IHAucmlnaHQsIHk6IHAudG9wfSwge3g6IHAubGVmdCwgeTogcC5ib3R0b219XVxuICAgICAgICAgICAgXTtcblxuICAgICAgICAgICAgaWYgKHAucmlnaHQgPD0gcG9zaXRpb24kJDEueCkgOyBlbHNlIGlmIChwLmxlZnQgPj0gcG9zaXRpb24kJDEueCkge1xuICAgICAgICAgICAgICAgIHBvaW50c1swXS5yZXZlcnNlKCk7XG4gICAgICAgICAgICAgICAgcG9pbnRzWzFdLnJldmVyc2UoKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocC5ib3R0b20gPD0gcG9zaXRpb24kJDEueSkge1xuICAgICAgICAgICAgICAgIHBvaW50c1swXS5yZXZlcnNlKCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHAudG9wID49IHBvc2l0aW9uJCQxLnkpIHtcbiAgICAgICAgICAgICAgICBwb2ludHNbMV0ucmV2ZXJzZSgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gISFwb2ludHMucmVkdWNlKGZ1bmN0aW9uIChyZXN1bHQsIHBvaW50KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCArIChzbG9wZShwcmV2UG9zLCBwb2ludFswXSkgPCBzbG9wZShwb3NpdGlvbiQkMSwgcG9pbnRbMF0pICYmIHNsb3BlKHByZXZQb3MsIHBvaW50WzFdKSA+IHNsb3BlKHBvc2l0aW9uJCQxLCBwb2ludFsxXSkpO1xuICAgICAgICAgICAgfSwgMCk7XG4gICAgICAgIH1cblxuICAgIH07XG5cbiAgICBmdW5jdGlvbiBzbG9wZShhLCBiKSB7XG4gICAgICAgIHJldHVybiAoYi55IC0gYS55KSAvIChiLnggLSBhLngpO1xuICAgIH1cblxuICAgIHZhciBzdHJhdHMgPSB7fTtcblxuICAgIC8vIGNvbmNhdCBzdHJhdGVneVxuICAgIHN0cmF0cy5hcmdzID1cbiAgICBzdHJhdHMuZXZlbnRzID1cbiAgICBzdHJhdHMuaW5pdCA9XG4gICAgc3RyYXRzLmNyZWF0ZWQgPVxuICAgIHN0cmF0cy5iZWZvcmVDb25uZWN0ID1cbiAgICBzdHJhdHMuY29ubmVjdGVkID1cbiAgICBzdHJhdHMucmVhZHkgPVxuICAgIHN0cmF0cy5iZWZvcmVEaXNjb25uZWN0ID1cbiAgICBzdHJhdHMuZGlzY29ubmVjdGVkID1cbiAgICBzdHJhdHMuZGVzdHJveSA9IGZ1bmN0aW9uIChwYXJlbnRWYWwsIGNoaWxkVmFsKSB7XG5cbiAgICAgICAgcGFyZW50VmFsID0gcGFyZW50VmFsICYmICFpc0FycmF5KHBhcmVudFZhbCkgPyBbcGFyZW50VmFsXSA6IHBhcmVudFZhbDtcblxuICAgICAgICByZXR1cm4gY2hpbGRWYWxcbiAgICAgICAgICAgID8gcGFyZW50VmFsXG4gICAgICAgICAgICAgICAgPyBwYXJlbnRWYWwuY29uY2F0KGNoaWxkVmFsKVxuICAgICAgICAgICAgICAgIDogaXNBcnJheShjaGlsZFZhbClcbiAgICAgICAgICAgICAgICAgICAgPyBjaGlsZFZhbFxuICAgICAgICAgICAgICAgICAgICA6IFtjaGlsZFZhbF1cbiAgICAgICAgICAgIDogcGFyZW50VmFsO1xuICAgIH07XG5cbiAgICAvLyB1cGRhdGUgc3RyYXRlZ3lcbiAgICBzdHJhdHMudXBkYXRlID0gZnVuY3Rpb24gKHBhcmVudFZhbCwgY2hpbGRWYWwpIHtcbiAgICAgICAgcmV0dXJuIHN0cmF0cy5hcmdzKHBhcmVudFZhbCwgaXNGdW5jdGlvbihjaGlsZFZhbCkgPyB7cmVhZDogY2hpbGRWYWx9IDogY2hpbGRWYWwpO1xuICAgIH07XG5cbiAgICAvLyBwcm9wZXJ0eSBzdHJhdGVneVxuICAgIHN0cmF0cy5wcm9wcyA9IGZ1bmN0aW9uIChwYXJlbnRWYWwsIGNoaWxkVmFsKSB7XG5cbiAgICAgICAgaWYgKGlzQXJyYXkoY2hpbGRWYWwpKSB7XG4gICAgICAgICAgICBjaGlsZFZhbCA9IGNoaWxkVmFsLnJlZHVjZShmdW5jdGlvbiAodmFsdWUsIGtleSkge1xuICAgICAgICAgICAgICAgIHZhbHVlW2tleV0gPSBTdHJpbmc7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICAgICAgfSwge30pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHN0cmF0cy5tZXRob2RzKHBhcmVudFZhbCwgY2hpbGRWYWwpO1xuICAgIH07XG5cbiAgICAvLyBleHRlbmQgc3RyYXRlZ3lcbiAgICBzdHJhdHMuY29tcHV0ZWQgPVxuICAgIHN0cmF0cy5tZXRob2RzID0gZnVuY3Rpb24gKHBhcmVudFZhbCwgY2hpbGRWYWwpIHtcbiAgICAgICAgcmV0dXJuIGNoaWxkVmFsXG4gICAgICAgICAgICA/IHBhcmVudFZhbFxuICAgICAgICAgICAgICAgID8gYXNzaWduKHt9LCBwYXJlbnRWYWwsIGNoaWxkVmFsKVxuICAgICAgICAgICAgICAgIDogY2hpbGRWYWxcbiAgICAgICAgICAgIDogcGFyZW50VmFsO1xuICAgIH07XG5cbiAgICAvLyBkYXRhIHN0cmF0ZWd5XG4gICAgc3RyYXRzLmRhdGEgPSBmdW5jdGlvbiAocGFyZW50VmFsLCBjaGlsZFZhbCwgdm0pIHtcblxuICAgICAgICBpZiAoIXZtKSB7XG5cbiAgICAgICAgICAgIGlmICghY2hpbGRWYWwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcGFyZW50VmFsO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoIXBhcmVudFZhbCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBjaGlsZFZhbDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICh2bSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBtZXJnZUZuRGF0YShwYXJlbnRWYWwsIGNoaWxkVmFsLCB2bSk7XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbWVyZ2VGbkRhdGEocGFyZW50VmFsLCBjaGlsZFZhbCwgdm0pO1xuICAgIH07XG5cbiAgICBmdW5jdGlvbiBtZXJnZUZuRGF0YShwYXJlbnRWYWwsIGNoaWxkVmFsLCB2bSkge1xuICAgICAgICByZXR1cm4gc3RyYXRzLmNvbXB1dGVkKFxuICAgICAgICAgICAgaXNGdW5jdGlvbihwYXJlbnRWYWwpXG4gICAgICAgICAgICAgICAgPyBwYXJlbnRWYWwuY2FsbCh2bSwgdm0pXG4gICAgICAgICAgICAgICAgOiBwYXJlbnRWYWwsXG4gICAgICAgICAgICBpc0Z1bmN0aW9uKGNoaWxkVmFsKVxuICAgICAgICAgICAgICAgID8gY2hpbGRWYWwuY2FsbCh2bSwgdm0pXG4gICAgICAgICAgICAgICAgOiBjaGlsZFZhbFxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8vIGRlZmF1bHQgc3RyYXRlZ3lcbiAgICB2YXIgZGVmYXVsdFN0cmF0ID0gZnVuY3Rpb24gKHBhcmVudFZhbCwgY2hpbGRWYWwpIHtcbiAgICAgICAgcmV0dXJuIGlzVW5kZWZpbmVkKGNoaWxkVmFsKSA/IHBhcmVudFZhbCA6IGNoaWxkVmFsO1xuICAgIH07XG5cbiAgICBmdW5jdGlvbiBtZXJnZU9wdGlvbnMocGFyZW50LCBjaGlsZCwgdm0pIHtcblxuICAgICAgICB2YXIgb3B0aW9ucyA9IHt9O1xuXG4gICAgICAgIGlmIChpc0Z1bmN0aW9uKGNoaWxkKSkge1xuICAgICAgICAgICAgY2hpbGQgPSBjaGlsZC5vcHRpb25zO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNoaWxkLmV4dGVuZHMpIHtcbiAgICAgICAgICAgIHBhcmVudCA9IG1lcmdlT3B0aW9ucyhwYXJlbnQsIGNoaWxkLmV4dGVuZHMsIHZtKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjaGlsZC5taXhpbnMpIHtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gY2hpbGQubWl4aW5zLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICAgICAgICAgIHBhcmVudCA9IG1lcmdlT3B0aW9ucyhwYXJlbnQsIGNoaWxkLm1peGluc1tpXSwgdm0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZm9yICh2YXIga2V5IGluIHBhcmVudCkge1xuICAgICAgICAgICAgbWVyZ2VLZXkoa2V5KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAodmFyIGtleSQxIGluIGNoaWxkKSB7XG4gICAgICAgICAgICBpZiAoIWhhc093bihwYXJlbnQsIGtleSQxKSkge1xuICAgICAgICAgICAgICAgIG1lcmdlS2V5KGtleSQxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIG1lcmdlS2V5KGtleSkge1xuICAgICAgICAgICAgb3B0aW9uc1trZXldID0gKHN0cmF0c1trZXldIHx8IGRlZmF1bHRTdHJhdCkocGFyZW50W2tleV0sIGNoaWxkW2tleV0sIHZtKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBvcHRpb25zO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHBhcnNlT3B0aW9ucyhvcHRpb25zLCBhcmdzKSB7XG4gICAgICAgIHZhciBvYmo7XG5cbiAgICAgICAgaWYgKCBhcmdzID09PSB2b2lkIDAgKSBhcmdzID0gW107XG5cbiAgICAgICAgdHJ5IHtcblxuICAgICAgICAgICAgcmV0dXJuICFvcHRpb25zXG4gICAgICAgICAgICAgICAgPyB7fVxuICAgICAgICAgICAgICAgIDogc3RhcnRzV2l0aChvcHRpb25zLCAneycpXG4gICAgICAgICAgICAgICAgICAgID8gSlNPTi5wYXJzZShvcHRpb25zKVxuICAgICAgICAgICAgICAgICAgICA6IGFyZ3MubGVuZ3RoICYmICFpbmNsdWRlcyhvcHRpb25zLCAnOicpXG4gICAgICAgICAgICAgICAgICAgICAgICA/ICgoIG9iaiA9IHt9LCBvYmpbYXJnc1swXV0gPSBvcHRpb25zLCBvYmogKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIDogb3B0aW9ucy5zcGxpdCgnOycpLnJlZHVjZShmdW5jdGlvbiAob3B0aW9ucywgb3B0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlZiA9IG9wdGlvbi5zcGxpdCgvOiguKikvKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIga2V5ID0gcmVmWzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9IHJlZlsxXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoa2V5ICYmICFpc1VuZGVmaW5lZCh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uc1trZXkudHJpbSgpXSA9IHZhbHVlLnRyaW0oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9wdGlvbnM7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7fSk7XG5cbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgcmV0dXJuIHt9O1xuICAgICAgICB9XG5cbiAgICB9XG5cbiAgICB2YXIgaWQgPSAwO1xuXG4gICAgdmFyIFBsYXllciA9IGZ1bmN0aW9uKGVsKSB7XG4gICAgICAgIHRoaXMuaWQgPSArK2lkO1xuICAgICAgICB0aGlzLmVsID0gdG9Ob2RlKGVsKTtcbiAgICB9O1xuXG4gICAgUGxheWVyLnByb3RvdHlwZS5pc1ZpZGVvID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pc1lvdXR1YmUoKSB8fCB0aGlzLmlzVmltZW8oKSB8fCB0aGlzLmlzSFRNTDUoKTtcbiAgICB9O1xuXG4gICAgUGxheWVyLnByb3RvdHlwZS5pc0hUTUw1ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5lbC50YWdOYW1lID09PSAnVklERU8nO1xuICAgIH07XG5cbiAgICBQbGF5ZXIucHJvdG90eXBlLmlzSUZyYW1lID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5lbC50YWdOYW1lID09PSAnSUZSQU1FJztcbiAgICB9O1xuXG4gICAgUGxheWVyLnByb3RvdHlwZS5pc1lvdXR1YmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzSUZyYW1lKCkgJiYgISF0aGlzLmVsLnNyYy5tYXRjaCgvXFwvXFwvLio/eW91dHViZSgtbm9jb29raWUpP1xcLlthLXpdK1xcLyh3YXRjaFxcP3Y9W14mXFxzXSt8ZW1iZWQpfHlvdXR1XFwuYmVcXC8uKi8pO1xuICAgIH07XG5cbiAgICBQbGF5ZXIucHJvdG90eXBlLmlzVmltZW8gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzSUZyYW1lKCkgJiYgISF0aGlzLmVsLnNyYy5tYXRjaCgvdmltZW9cXC5jb21cXC92aWRlb1xcLy4qLyk7XG4gICAgfTtcblxuICAgIFBsYXllci5wcm90b3R5cGUuZW5hYmxlQXBpID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIHRoaXMkMSA9IHRoaXM7XG5cblxuICAgICAgICBpZiAodGhpcy5yZWFkeSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVhZHk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgeW91dHViZSA9IHRoaXMuaXNZb3V0dWJlKCk7XG4gICAgICAgIHZhciB2aW1lbyA9IHRoaXMuaXNWaW1lbygpO1xuXG4gICAgICAgIHZhciBwb2xsZXI7XG5cbiAgICAgICAgaWYgKHlvdXR1YmUgfHwgdmltZW8pIHtcblxuICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVhZHkgPSBuZXcgUHJvbWlzZSQxKGZ1bmN0aW9uIChyZXNvbHZlKSB7XG5cbiAgICAgICAgICAgICAgICBvbmNlKHRoaXMkMS5lbCwgJ2xvYWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh5b3V0dWJlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbGlzdGVuZXIgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBwb3N0KHRoaXMkMS5lbCwge2V2ZW50OiAnbGlzdGVuaW5nJywgaWQ6IHRoaXMkMS5pZH0pOyB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgcG9sbGVyID0gc2V0SW50ZXJ2YWwobGlzdGVuZXIsIDEwMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBsaXN0ZW5lcigpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICBsaXN0ZW4oZnVuY3Rpb24gKGRhdGEkJDEpIHsgcmV0dXJuIHlvdXR1YmUgJiYgZGF0YSQkMS5pZCA9PT0gdGhpcyQxLmlkICYmIGRhdGEkJDEuZXZlbnQgPT09ICdvblJlYWR5JyB8fCB2aW1lbyAmJiBOdW1iZXIoZGF0YSQkMS5wbGF5ZXJfaWQpID09PSB0aGlzJDEuaWQ7IH0pXG4gICAgICAgICAgICAgICAgICAgIC50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBvbGxlciAmJiBjbGVhckludGVydmFsKHBvbGxlcik7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgYXR0cih0aGlzJDEuZWwsICdzcmMnLCAoXCJcIiArICh0aGlzJDEuZWwuc3JjKSArIChpbmNsdWRlcyh0aGlzJDEuZWwuc3JjLCAnPycpID8gJyYnIDogJz8nKSArICh5b3V0dWJlID8gJ2VuYWJsZWpzYXBpPTEnIDogKFwiYXBpPTEmcGxheWVyX2lkPVwiICsgKHRoaXMkMS5pZCkpKSkpO1xuXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFByb21pc2UkMS5yZXNvbHZlKCk7XG5cbiAgICB9O1xuXG4gICAgUGxheWVyLnByb3RvdHlwZS5wbGF5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIHRoaXMkMSA9IHRoaXM7XG5cblxuICAgICAgICBpZiAoIXRoaXMuaXNWaWRlbygpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5pc0lGcmFtZSgpKSB7XG4gICAgICAgICAgICB0aGlzLmVuYWJsZUFwaSgpLnRoZW4oZnVuY3Rpb24gKCkgeyByZXR1cm4gcG9zdCh0aGlzJDEuZWwsIHtmdW5jOiAncGxheVZpZGVvJywgbWV0aG9kOiAncGxheSd9KTsgfSk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5pc0hUTUw1KCkpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgdmFyIHByb21pc2UgPSB0aGlzLmVsLnBsYXkoKTtcblxuICAgICAgICAgICAgICAgIGlmIChwcm9taXNlKSB7XG4gICAgICAgICAgICAgICAgICAgIHByb21pc2UuY2F0Y2gobm9vcCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge31cbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBQbGF5ZXIucHJvdG90eXBlLnBhdXNlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIHRoaXMkMSA9IHRoaXM7XG5cblxuICAgICAgICBpZiAoIXRoaXMuaXNWaWRlbygpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5pc0lGcmFtZSgpKSB7XG4gICAgICAgICAgICB0aGlzLmVuYWJsZUFwaSgpLnRoZW4oZnVuY3Rpb24gKCkgeyByZXR1cm4gcG9zdCh0aGlzJDEuZWwsIHtmdW5jOiAncGF1c2VWaWRlbycsIG1ldGhvZDogJ3BhdXNlJ30pOyB9KTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmlzSFRNTDUoKSkge1xuICAgICAgICAgICAgdGhpcy5lbC5wYXVzZSgpO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIFBsYXllci5wcm90b3R5cGUubXV0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciB0aGlzJDEgPSB0aGlzO1xuXG5cbiAgICAgICAgaWYgKCF0aGlzLmlzVmlkZW8oKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuaXNJRnJhbWUoKSkge1xuICAgICAgICAgICAgdGhpcy5lbmFibGVBcGkoKS50aGVuKGZ1bmN0aW9uICgpIHsgcmV0dXJuIHBvc3QodGhpcyQxLmVsLCB7ZnVuYzogJ211dGUnLCBtZXRob2Q6ICdzZXRWb2x1bWUnLCB2YWx1ZTogMH0pOyB9KTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmlzSFRNTDUoKSkge1xuICAgICAgICAgICAgdGhpcy5lbC5tdXRlZCA9IHRydWU7XG4gICAgICAgICAgICBhdHRyKHRoaXMuZWwsICdtdXRlZCcsICcnKTtcbiAgICAgICAgfVxuXG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIHBvc3QoZWwsIGNtZCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgZWwuY29udGVudFdpbmRvdy5wb3N0TWVzc2FnZShKU09OLnN0cmluZ2lmeShhc3NpZ24oe2V2ZW50OiAnY29tbWFuZCd9LCBjbWQpKSwgJyonKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge31cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsaXN0ZW4oY2IpIHtcblxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UkMShmdW5jdGlvbiAocmVzb2x2ZSkge1xuXG4gICAgICAgICAgICBvbmNlKHdpbmRvdywgJ21lc3NhZ2UnLCBmdW5jdGlvbiAoXywgZGF0YSQkMSkgeyByZXR1cm4gcmVzb2x2ZShkYXRhJCQxKTsgfSwgZmFsc2UsIGZ1bmN0aW9uIChyZWYpIHtcbiAgICAgICAgICAgICAgICB2YXIgZGF0YSQkMSA9IHJlZi5kYXRhO1xuXG5cbiAgICAgICAgICAgICAgICBpZiAoIWRhdGEkJDEgfHwgIWlzU3RyaW5nKGRhdGEkJDEpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBkYXRhJCQxID0gSlNPTi5wYXJzZShkYXRhJCQxKTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gZGF0YSQkMSAmJiBjYihkYXRhJCQxKTtcblxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgfSk7XG5cbiAgICB9XG5cbiAgICAvKlxuICAgICAgICBCYXNlZCBvbjpcbiAgICAgICAgQ29weXJpZ2h0IChjKSAyMDEwLTIwMTYgVGhvbWFzIEZ1Y2hzXG4gICAgICAgIGh0dHA6Ly96ZXB0b2pzLmNvbS9cbiAgICAqL1xuXG4gICAgdmFyIHRvdWNoID0ge30sIGNsaWNrVGltZW91dCwgc3dpcGVUaW1lb3V0LCB0YXBUaW1lb3V0LCBjbGlja2VkO1xuXG4gICAgZnVuY3Rpb24gc3dpcGVEaXJlY3Rpb24ocmVmKSB7XG4gICAgICAgIHZhciB4MSA9IHJlZi54MTtcbiAgICAgICAgdmFyIHgyID0gcmVmLngyO1xuICAgICAgICB2YXIgeTEgPSByZWYueTE7XG4gICAgICAgIHZhciB5MiA9IHJlZi55MjtcblxuICAgICAgICByZXR1cm4gTWF0aC5hYnMoeDEgLSB4MikgPj0gTWF0aC5hYnMoeTEgLSB5MikgPyAoeDEgLSB4MiA+IDAgPyAnTGVmdCcgOiAnUmlnaHQnKSA6ICh5MSAtIHkyID4gMCA/ICdVcCcgOiAnRG93bicpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNhbmNlbEFsbCgpIHtcbiAgICAgICAgY2xpY2tUaW1lb3V0ICYmIGNsZWFyVGltZW91dChjbGlja1RpbWVvdXQpO1xuICAgICAgICBzd2lwZVRpbWVvdXQgJiYgY2xlYXJUaW1lb3V0KHN3aXBlVGltZW91dCk7XG4gICAgICAgIHRhcFRpbWVvdXQgJiYgY2xlYXJUaW1lb3V0KHRhcFRpbWVvdXQpO1xuICAgICAgICBjbGlja1RpbWVvdXQgPSBzd2lwZVRpbWVvdXQgPSB0YXBUaW1lb3V0ID0gbnVsbDtcbiAgICAgICAgdG91Y2ggPSB7fTtcbiAgICB9XG5cbiAgICByZWFkeShmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgb24oZG9jdW1lbnQsICdjbGljaycsIGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNsaWNrZWQgPSB0cnVlOyB9LCB0cnVlKTtcblxuICAgICAgICBvbihkb2N1bWVudCwgcG9pbnRlckRvd24sIGZ1bmN0aW9uIChlKSB7XG5cbiAgICAgICAgICAgIHZhciB0YXJnZXQgPSBlLnRhcmdldDtcbiAgICAgICAgICAgIHZhciByZWYgPSBnZXRQb3MkMShlKTtcbiAgICAgICAgICAgIHZhciB4ID0gcmVmLng7XG4gICAgICAgICAgICB2YXIgeSA9IHJlZi55O1xuICAgICAgICAgICAgdmFyIG5vdyA9IERhdGUubm93KCk7XG4gICAgICAgICAgICB2YXIgdHlwZSA9IGdldFR5cGUoZS50eXBlKTtcblxuICAgICAgICAgICAgaWYgKHRvdWNoLnR5cGUgJiYgdG91Y2gudHlwZSAhPT0gdHlwZSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdG91Y2guZWwgPSAndGFnTmFtZScgaW4gdGFyZ2V0ID8gdGFyZ2V0IDogdGFyZ2V0LnBhcmVudE5vZGU7XG5cbiAgICAgICAgICAgIGNsaWNrVGltZW91dCAmJiBjbGVhclRpbWVvdXQoY2xpY2tUaW1lb3V0KTtcblxuICAgICAgICAgICAgdG91Y2gueDEgPSB4O1xuICAgICAgICAgICAgdG91Y2gueTEgPSB5O1xuXG4gICAgICAgICAgICBpZiAodG91Y2gubGFzdCAmJiBub3cgLSB0b3VjaC5sYXN0IDw9IDI1MCkge1xuICAgICAgICAgICAgICAgIHRvdWNoID0ge307XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRvdWNoLnR5cGUgPSB0eXBlO1xuICAgICAgICAgICAgdG91Y2gubGFzdCA9IG5vdztcblxuICAgICAgICAgICAgY2xpY2tlZCA9IGUuYnV0dG9uID4gMDtcblxuICAgICAgICB9KTtcblxuICAgICAgICBvbihkb2N1bWVudCwgcG9pbnRlck1vdmUsIGZ1bmN0aW9uIChlKSB7XG5cbiAgICAgICAgICAgIGlmIChlLmRlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZhciByZWYgPSBnZXRQb3MkMShlKTtcbiAgICAgICAgICAgIHZhciB4ID0gcmVmLng7XG4gICAgICAgICAgICB2YXIgeSA9IHJlZi55O1xuXG4gICAgICAgICAgICB0b3VjaC54MiA9IHg7XG4gICAgICAgICAgICB0b3VjaC55MiA9IHk7XG5cbiAgICAgICAgfSk7XG5cbiAgICAgICAgb24oZG9jdW1lbnQsIHBvaW50ZXJVcCwgZnVuY3Rpb24gKHJlZikge1xuICAgICAgICAgICAgdmFyIHR5cGUgPSByZWYudHlwZTtcbiAgICAgICAgICAgIHZhciB0YXJnZXQgPSByZWYudGFyZ2V0O1xuXG5cbiAgICAgICAgICAgIGlmICh0b3VjaC50eXBlICE9PSBnZXRUeXBlKHR5cGUpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBzd2lwZVxuICAgICAgICAgICAgaWYgKHRvdWNoLngyICYmIE1hdGguYWJzKHRvdWNoLngxIC0gdG91Y2gueDIpID4gMzAgfHwgdG91Y2gueTIgJiYgTWF0aC5hYnModG91Y2gueTEgLSB0b3VjaC55MikgPiAzMCkge1xuXG4gICAgICAgICAgICAgICAgc3dpcGVUaW1lb3V0ID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0b3VjaC5lbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHJpZ2dlcih0b3VjaC5lbCwgJ3N3aXBlJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0cmlnZ2VyKHRvdWNoLmVsLCAoXCJzd2lwZVwiICsgKHN3aXBlRGlyZWN0aW9uKHRvdWNoKSkpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0b3VjaCA9IHt9O1xuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAvLyBub3JtYWwgdGFwXG4gICAgICAgICAgICB9IGVsc2UgaWYgKCdsYXN0JyBpbiB0b3VjaCkge1xuXG4gICAgICAgICAgICAgICAgdGFwVGltZW91dCA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgeyByZXR1cm4gdHJpZ2dlcih0b3VjaC5lbCwgJ3RhcCcpOyB9KTtcblxuICAgICAgICAgICAgICAgIC8vIHRyaWdnZXIgc2luZ2xlIGNsaWNrIGFmdGVyIDM1MG1zIG9mIGluYWN0aXZpdHlcbiAgICAgICAgICAgICAgICBpZiAodG91Y2guZWwgJiYgdHlwZSAhPT0gJ21vdXNldXAnICYmIHdpdGhpbih0YXJnZXQsIHRvdWNoLmVsKSkge1xuICAgICAgICAgICAgICAgICAgICBjbGlja1RpbWVvdXQgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsaWNrVGltZW91dCA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodG91Y2guZWwgJiYgIWNsaWNrZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmlnZ2VyKHRvdWNoLmVsLCAnY2xpY2snKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHRvdWNoID0ge307XG4gICAgICAgICAgICAgICAgICAgIH0sIDM1MCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRvdWNoID0ge307XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfSk7XG5cbiAgICAgICAgb24oZG9jdW1lbnQsICd0b3VjaGNhbmNlbCcsIGNhbmNlbEFsbCk7XG4gICAgICAgIG9uKHdpbmRvdywgJ3Njcm9sbCcsIGNhbmNlbEFsbCk7XG5cbiAgICB9KTtcblxuICAgIHZhciB0b3VjaGluZyA9IGZhbHNlO1xuICAgIG9uKGRvY3VtZW50LCAndG91Y2hzdGFydCcsIGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRvdWNoaW5nID0gdHJ1ZTsgfSwgdHJ1ZSk7XG4gICAgb24oZG9jdW1lbnQsICdjbGljaycsIGZ1bmN0aW9uICgpIHt0b3VjaGluZyA9IGZhbHNlO30pO1xuICAgIG9uKGRvY3VtZW50LCAndG91Y2hjYW5jZWwnLCBmdW5jdGlvbiAoKSB7IHJldHVybiB0b3VjaGluZyA9IGZhbHNlOyB9LCB0cnVlKTtcblxuICAgIGZ1bmN0aW9uIGlzVG91Y2goZSkge1xuICAgICAgICByZXR1cm4gdG91Y2hpbmcgfHwgZS5wb2ludGVyVHlwZSA9PT0gJ3RvdWNoJztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRQb3MkMShlKSB7XG4gICAgICAgIHZhciB0b3VjaGVzID0gZS50b3VjaGVzO1xuICAgICAgICB2YXIgY2hhbmdlZFRvdWNoZXMgPSBlLmNoYW5nZWRUb3VjaGVzO1xuICAgICAgICB2YXIgcmVmID0gdG91Y2hlcyAmJiB0b3VjaGVzWzBdIHx8IGNoYW5nZWRUb3VjaGVzICYmIGNoYW5nZWRUb3VjaGVzWzBdIHx8IGU7XG4gICAgICAgIHZhciB4ID0gcmVmLnBhZ2VYO1xuICAgICAgICB2YXIgeSA9IHJlZi5wYWdlWTtcblxuICAgICAgICByZXR1cm4ge3g6IHgsIHk6IHl9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldFR5cGUodHlwZSkge1xuICAgICAgICByZXR1cm4gdHlwZS5zbGljZSgwLCA1KTtcbiAgICB9XG5cblxuXG4gICAgdmFyIHV0aWwgPSAvKiNfX1BVUkVfXyovT2JqZWN0LmZyZWV6ZSh7XG4gICAgICAgIGFqYXg6IGFqYXgsXG4gICAgICAgIGdldEltYWdlOiBnZXRJbWFnZSxcbiAgICAgICAgdHJhbnNpdGlvbjogdHJhbnNpdGlvbixcbiAgICAgICAgVHJhbnNpdGlvbjogVHJhbnNpdGlvbixcbiAgICAgICAgYW5pbWF0ZTogYW5pbWF0ZSxcbiAgICAgICAgQW5pbWF0aW9uOiBBbmltYXRpb24sXG4gICAgICAgIGF0dHI6IGF0dHIsXG4gICAgICAgIGhhc0F0dHI6IGhhc0F0dHIsXG4gICAgICAgIHJlbW92ZUF0dHI6IHJlbW92ZUF0dHIsXG4gICAgICAgIGZpbHRlckF0dHI6IGZpbHRlckF0dHIsXG4gICAgICAgIGRhdGE6IGRhdGEsXG4gICAgICAgIGFkZENsYXNzOiBhZGRDbGFzcyxcbiAgICAgICAgcmVtb3ZlQ2xhc3M6IHJlbW92ZUNsYXNzLFxuICAgICAgICByZW1vdmVDbGFzc2VzOiByZW1vdmVDbGFzc2VzLFxuICAgICAgICByZXBsYWNlQ2xhc3M6IHJlcGxhY2VDbGFzcyxcbiAgICAgICAgaGFzQ2xhc3M6IGhhc0NsYXNzLFxuICAgICAgICB0b2dnbGVDbGFzczogdG9nZ2xlQ2xhc3MsXG4gICAgICAgICQ6ICQsXG4gICAgICAgICQkOiAkJCxcbiAgICAgICAgcG9zaXRpb25BdDogcG9zaXRpb25BdCxcbiAgICAgICAgb2Zmc2V0OiBvZmZzZXQsXG4gICAgICAgIHBvc2l0aW9uOiBwb3NpdGlvbixcbiAgICAgICAgaGVpZ2h0OiBoZWlnaHQsXG4gICAgICAgIHdpZHRoOiB3aWR0aCxcbiAgICAgICAgZmxpcFBvc2l0aW9uOiBmbGlwUG9zaXRpb24sXG4gICAgICAgIGlzSW5WaWV3OiBpc0luVmlldyxcbiAgICAgICAgc2Nyb2xsZWRPdmVyOiBzY3JvbGxlZE92ZXIsXG4gICAgICAgIGlzUmVhZHk6IGlzUmVhZHksXG4gICAgICAgIHJlYWR5OiByZWFkeSxcbiAgICAgICAgaW5kZXg6IGluZGV4LFxuICAgICAgICBnZXRJbmRleDogZ2V0SW5kZXgsXG4gICAgICAgIGVtcHR5OiBlbXB0eSxcbiAgICAgICAgaHRtbDogaHRtbCxcbiAgICAgICAgcHJlcGVuZDogcHJlcGVuZCxcbiAgICAgICAgYXBwZW5kOiBhcHBlbmQsXG4gICAgICAgIGJlZm9yZTogYmVmb3JlLFxuICAgICAgICBhZnRlcjogYWZ0ZXIsXG4gICAgICAgIHJlbW92ZTogcmVtb3ZlLFxuICAgICAgICB3cmFwQWxsOiB3cmFwQWxsLFxuICAgICAgICB3cmFwSW5uZXI6IHdyYXBJbm5lcixcbiAgICAgICAgdW53cmFwOiB1bndyYXAsXG4gICAgICAgIGZyYWdtZW50OiBmcmFnbWVudCxcbiAgICAgICAgYXBwbHk6IGFwcGx5LFxuICAgICAgICBpc1J0bDogaXNSdGwsXG4gICAgICAgIGhhc1RvdWNoOiBoYXNUb3VjaCxcbiAgICAgICAgcG9pbnRlckRvd246IHBvaW50ZXJEb3duLFxuICAgICAgICBwb2ludGVyTW92ZTogcG9pbnRlck1vdmUsXG4gICAgICAgIHBvaW50ZXJVcDogcG9pbnRlclVwLFxuICAgICAgICBwb2ludGVyRW50ZXI6IHBvaW50ZXJFbnRlcixcbiAgICAgICAgcG9pbnRlckxlYXZlOiBwb2ludGVyTGVhdmUsXG4gICAgICAgIG9uOiBvbixcbiAgICAgICAgb2ZmOiBvZmYsXG4gICAgICAgIG9uY2U6IG9uY2UsXG4gICAgICAgIHRyaWdnZXI6IHRyaWdnZXIsXG4gICAgICAgIGNyZWF0ZUV2ZW50OiBjcmVhdGVFdmVudCxcbiAgICAgICAgdG9FdmVudFRhcmdldHM6IHRvRXZlbnRUYXJnZXRzLFxuICAgICAgICBwcmV2ZW50Q2xpY2s6IHByZXZlbnRDbGljayxcbiAgICAgICAgZmFzdGRvbTogZmFzdGRvbSxcbiAgICAgICAgaXNWb2lkRWxlbWVudDogaXNWb2lkRWxlbWVudCxcbiAgICAgICAgaXNWaXNpYmxlOiBpc1Zpc2libGUsXG4gICAgICAgIHNlbElucHV0OiBzZWxJbnB1dCxcbiAgICAgICAgaXNJbnB1dDogaXNJbnB1dCxcbiAgICAgICAgZmlsdGVyOiBmaWx0ZXIsXG4gICAgICAgIHdpdGhpbjogd2l0aGluLFxuICAgICAgICBiaW5kOiBiaW5kLFxuICAgICAgICBoYXNPd246IGhhc093bixcbiAgICAgICAgaHlwaGVuYXRlOiBoeXBoZW5hdGUsXG4gICAgICAgIGNhbWVsaXplOiBjYW1lbGl6ZSxcbiAgICAgICAgdWNmaXJzdDogdWNmaXJzdCxcbiAgICAgICAgc3RhcnRzV2l0aDogc3RhcnRzV2l0aCxcbiAgICAgICAgZW5kc1dpdGg6IGVuZHNXaXRoLFxuICAgICAgICBpbmNsdWRlczogaW5jbHVkZXMsXG4gICAgICAgIGlzQXJyYXk6IGlzQXJyYXksXG4gICAgICAgIGlzRnVuY3Rpb246IGlzRnVuY3Rpb24sXG4gICAgICAgIGlzT2JqZWN0OiBpc09iamVjdCxcbiAgICAgICAgaXNQbGFpbk9iamVjdDogaXNQbGFpbk9iamVjdCxcbiAgICAgICAgaXNXaW5kb3c6IGlzV2luZG93LFxuICAgICAgICBpc0RvY3VtZW50OiBpc0RvY3VtZW50LFxuICAgICAgICBpc0pRdWVyeTogaXNKUXVlcnksXG4gICAgICAgIGlzTm9kZTogaXNOb2RlLFxuICAgICAgICBpc05vZGVDb2xsZWN0aW9uOiBpc05vZGVDb2xsZWN0aW9uLFxuICAgICAgICBpc0Jvb2xlYW46IGlzQm9vbGVhbixcbiAgICAgICAgaXNTdHJpbmc6IGlzU3RyaW5nLFxuICAgICAgICBpc051bWJlcjogaXNOdW1iZXIsXG4gICAgICAgIGlzTnVtZXJpYzogaXNOdW1lcmljLFxuICAgICAgICBpc1VuZGVmaW5lZDogaXNVbmRlZmluZWQsXG4gICAgICAgIHRvQm9vbGVhbjogdG9Cb29sZWFuLFxuICAgICAgICB0b051bWJlcjogdG9OdW1iZXIsXG4gICAgICAgIHRvRmxvYXQ6IHRvRmxvYXQsXG4gICAgICAgIHRvTm9kZTogdG9Ob2RlLFxuICAgICAgICB0b05vZGVzOiB0b05vZGVzLFxuICAgICAgICB0b0xpc3Q6IHRvTGlzdCxcbiAgICAgICAgdG9NczogdG9NcyxcbiAgICAgICAgc3dhcDogc3dhcCxcbiAgICAgICAgYXNzaWduOiBhc3NpZ24sXG4gICAgICAgIGVhY2g6IGVhY2gsXG4gICAgICAgIHNvcnRCeTogc29ydEJ5LFxuICAgICAgICBjbGFtcDogY2xhbXAsXG4gICAgICAgIG5vb3A6IG5vb3AsXG4gICAgICAgIGludGVyc2VjdFJlY3Q6IGludGVyc2VjdFJlY3QsXG4gICAgICAgIHBvaW50SW5SZWN0OiBwb2ludEluUmVjdCxcbiAgICAgICAgRGltZW5zaW9uczogRGltZW5zaW9ucyxcbiAgICAgICAgTW91c2VUcmFja2VyOiBNb3VzZVRyYWNrZXIsXG4gICAgICAgIG1lcmdlT3B0aW9uczogbWVyZ2VPcHRpb25zLFxuICAgICAgICBwYXJzZU9wdGlvbnM6IHBhcnNlT3B0aW9ucyxcbiAgICAgICAgUGxheWVyOiBQbGF5ZXIsXG4gICAgICAgIFByb21pc2U6IFByb21pc2UkMSxcbiAgICAgICAgRGVmZXJyZWQ6IERlZmVycmVkLFxuICAgICAgICBxdWVyeTogcXVlcnksXG4gICAgICAgIHF1ZXJ5QWxsOiBxdWVyeUFsbCxcbiAgICAgICAgZmluZDogZmluZCxcbiAgICAgICAgZmluZEFsbDogZmluZEFsbCxcbiAgICAgICAgbWF0Y2hlczogbWF0Y2hlcyxcbiAgICAgICAgY2xvc2VzdDogY2xvc2VzdCxcbiAgICAgICAgcGFyZW50czogcGFyZW50cyxcbiAgICAgICAgZXNjYXBlOiBlc2NhcGUsXG4gICAgICAgIGNzczogY3NzLFxuICAgICAgICBnZXRTdHlsZXM6IGdldFN0eWxlcyxcbiAgICAgICAgZ2V0U3R5bGU6IGdldFN0eWxlLFxuICAgICAgICBnZXRDc3NWYXI6IGdldENzc1ZhcixcbiAgICAgICAgcHJvcE5hbWU6IHByb3BOYW1lLFxuICAgICAgICBpc1RvdWNoOiBpc1RvdWNoLFxuICAgICAgICBnZXRQb3M6IGdldFBvcyQxXG4gICAgfSk7XG5cbiAgICBmdW5jdGlvbiBjb21wb25lbnRBUEkgKFVJa2l0KSB7XG5cbiAgICAgICAgdmFyIERBVEEgPSBVSWtpdC5kYXRhO1xuXG4gICAgICAgIHZhciBjb21wb25lbnRzID0ge307XG5cbiAgICAgICAgVUlraXQuY29tcG9uZW50ID0gZnVuY3Rpb24gKG5hbWUsIG9wdGlvbnMpIHtcblxuICAgICAgICAgICAgaWYgKCFvcHRpb25zKSB7XG5cbiAgICAgICAgICAgICAgICBpZiAoaXNQbGFpbk9iamVjdChjb21wb25lbnRzW25hbWVdKSkge1xuICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRzW25hbWVdID0gVUlraXQuZXh0ZW5kKGNvbXBvbmVudHNbbmFtZV0pO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVybiBjb21wb25lbnRzW25hbWVdO1xuXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIFVJa2l0W25hbWVdID0gZnVuY3Rpb24gKGVsZW1lbnQsIGRhdGEkJDEpIHtcbiAgICAgICAgICAgICAgICB2YXIgaSA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3NBcnJheSA9IEFycmF5KGkpO1xuICAgICAgICAgICAgICAgIHdoaWxlICggaS0tICkgYXJnc0FycmF5W2ldID0gYXJndW1lbnRzW2ldO1xuXG5cbiAgICAgICAgICAgICAgICB2YXIgY29tcG9uZW50ID0gVUlraXQuY29tcG9uZW50KG5hbWUpO1xuXG4gICAgICAgICAgICAgICAgaWYgKGlzUGxhaW5PYmplY3QoZWxlbWVudCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBjb21wb25lbnQoe2RhdGE6IGVsZW1lbnR9KTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoY29tcG9uZW50Lm9wdGlvbnMuZnVuY3Rpb25hbCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IGNvbXBvbmVudCh7ZGF0YTogW10uY29uY2F0KCBhcmdzQXJyYXkgKX0pO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVybiBlbGVtZW50ICYmIGVsZW1lbnQubm9kZVR5cGUgPyBpbml0KGVsZW1lbnQpIDogJCQoZWxlbWVudCkubWFwKGluaXQpWzBdO1xuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gaW5pdChlbGVtZW50KSB7XG5cbiAgICAgICAgICAgICAgICAgICAgdmFyIGluc3RhbmNlID0gVUlraXQuZ2V0Q29tcG9uZW50KGVsZW1lbnQsIG5hbWUpO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChpbnN0YW5jZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFkYXRhJCQxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGluc3RhbmNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZS4kZGVzdHJveSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBjb21wb25lbnQoe2VsOiBlbGVtZW50LCBkYXRhOiBkYXRhJCQxfSk7XG5cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIHZhciBvcHQgPSBpc1BsYWluT2JqZWN0KG9wdGlvbnMpID8gYXNzaWduKHt9LCBvcHRpb25zKSA6IG9wdGlvbnMub3B0aW9ucztcblxuICAgICAgICAgICAgb3B0Lm5hbWUgPSBuYW1lO1xuXG4gICAgICAgICAgICBpZiAob3B0Lmluc3RhbGwpIHtcbiAgICAgICAgICAgICAgICBvcHQuaW5zdGFsbChVSWtpdCwgb3B0LCBuYW1lKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKFVJa2l0Ll9pbml0aWFsaXplZCAmJiAhb3B0LmZ1bmN0aW9uYWwpIHtcbiAgICAgICAgICAgICAgICB2YXIgaWQgPSBoeXBoZW5hdGUobmFtZSk7XG4gICAgICAgICAgICAgICAgZmFzdGRvbS5yZWFkKGZ1bmN0aW9uICgpIHsgcmV0dXJuIFVJa2l0W25hbWVdKChcIlt1ay1cIiArIGlkICsgXCJdLFtkYXRhLXVrLVwiICsgaWQgKyBcIl1cIikpOyB9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIGNvbXBvbmVudHNbbmFtZV0gPSBpc1BsYWluT2JqZWN0KG9wdGlvbnMpID8gb3B0IDogb3B0aW9ucztcbiAgICAgICAgfTtcblxuICAgICAgICBVSWtpdC5nZXRDb21wb25lbnRzID0gZnVuY3Rpb24gKGVsZW1lbnQpIHsgcmV0dXJuIGVsZW1lbnQgJiYgZWxlbWVudFtEQVRBXSB8fCB7fTsgfTtcbiAgICAgICAgVUlraXQuZ2V0Q29tcG9uZW50ID0gZnVuY3Rpb24gKGVsZW1lbnQsIG5hbWUpIHsgcmV0dXJuIFVJa2l0LmdldENvbXBvbmVudHMoZWxlbWVudClbbmFtZV07IH07XG5cbiAgICAgICAgVUlraXQuY29ubmVjdCA9IGZ1bmN0aW9uIChub2RlKSB7XG5cbiAgICAgICAgICAgIGlmIChub2RlW0RBVEFdKSB7XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgbmFtZSBpbiBub2RlW0RBVEFdKSB7XG4gICAgICAgICAgICAgICAgICAgIG5vZGVbREFUQV1bbmFtZV0uX2NhbGxDb25uZWN0ZWQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm9kZS5hdHRyaWJ1dGVzLmxlbmd0aDsgaSsrKSB7XG5cbiAgICAgICAgICAgICAgICB2YXIgbmFtZSQxID0gZ2V0Q29tcG9uZW50TmFtZShub2RlLmF0dHJpYnV0ZXNbaV0ubmFtZSk7XG5cbiAgICAgICAgICAgICAgICBpZiAobmFtZSQxICYmIG5hbWUkMSBpbiBjb21wb25lbnRzKSB7XG4gICAgICAgICAgICAgICAgICAgIFVJa2l0W25hbWUkMV0obm9kZSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfTtcblxuICAgICAgICBVSWtpdC5kaXNjb25uZWN0ID0gZnVuY3Rpb24gKG5vZGUpIHtcbiAgICAgICAgICAgIGZvciAodmFyIG5hbWUgaW4gbm9kZVtEQVRBXSkge1xuICAgICAgICAgICAgICAgIG5vZGVbREFUQV1bbmFtZV0uX2NhbGxEaXNjb25uZWN0ZWQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldENvbXBvbmVudE5hbWUoYXR0cmlidXRlKSB7XG4gICAgICAgIHJldHVybiBzdGFydHNXaXRoKGF0dHJpYnV0ZSwgJ3VrLScpIHx8IHN0YXJ0c1dpdGgoYXR0cmlidXRlLCAnZGF0YS11ay0nKVxuICAgICAgICAgICAgPyBjYW1lbGl6ZShhdHRyaWJ1dGUucmVwbGFjZSgnZGF0YS11ay0nLCAnJykucmVwbGFjZSgndWstJywgJycpKVxuICAgICAgICAgICAgOiBmYWxzZTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBib290IChVSWtpdCkge1xuXG4gICAgICAgIHZhciBjb25uZWN0ID0gVUlraXQuY29ubmVjdDtcbiAgICAgICAgdmFyIGRpc2Nvbm5lY3QgPSBVSWtpdC5kaXNjb25uZWN0O1xuXG4gICAgICAgIGlmICghKCdNdXRhdGlvbk9ic2VydmVyJyBpbiB3aW5kb3cpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZG9jdW1lbnQuYm9keSkge1xuXG4gICAgICAgICAgICBpbml0KCk7XG5cbiAgICAgICAgfSBlbHNlIHtcblxuICAgICAgICAgICAgKG5ldyBNdXRhdGlvbk9ic2VydmVyKGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgICAgIGlmIChkb2N1bWVudC5ib2R5KSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGlzY29ubmVjdCgpO1xuICAgICAgICAgICAgICAgICAgICBpbml0KCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB9KSkub2JzZXJ2ZShkb2N1bWVudCwge2NoaWxkTGlzdDogdHJ1ZSwgc3VidHJlZTogdHJ1ZX0pO1xuXG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBpbml0KCkge1xuXG4gICAgICAgICAgICBhcHBseSQkMShkb2N1bWVudC5ib2R5LCBjb25uZWN0KTtcblxuICAgICAgICAgICAgZmFzdGRvbS5mbHVzaCgpO1xuXG4gICAgICAgICAgICAobmV3IE11dGF0aW9uT2JzZXJ2ZXIoZnVuY3Rpb24gKG11dGF0aW9ucykgeyByZXR1cm4gbXV0YXRpb25zLmZvckVhY2goYXBwbHlNdXRhdGlvbik7IH0pKS5vYnNlcnZlKGRvY3VtZW50LCB7XG4gICAgICAgICAgICAgICAgY2hpbGRMaXN0OiB0cnVlLFxuICAgICAgICAgICAgICAgIHN1YnRyZWU6IHRydWUsXG4gICAgICAgICAgICAgICAgY2hhcmFjdGVyRGF0YTogdHJ1ZSxcbiAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzOiB0cnVlXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgVUlraXQuX2luaXRpYWxpemVkID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIGFwcGx5TXV0YXRpb24obXV0YXRpb24pIHtcblxuICAgICAgICAgICAgdmFyIHRhcmdldCA9IG11dGF0aW9uLnRhcmdldDtcbiAgICAgICAgICAgIHZhciB0eXBlID0gbXV0YXRpb24udHlwZTtcblxuICAgICAgICAgICAgdmFyIHVwZGF0ZSA9IHR5cGUgIT09ICdhdHRyaWJ1dGVzJ1xuICAgICAgICAgICAgICAgID8gYXBwbHlDaGlsZExpc3QobXV0YXRpb24pXG4gICAgICAgICAgICAgICAgOiBhcHBseUF0dHJpYnV0ZShtdXRhdGlvbik7XG5cbiAgICAgICAgICAgIHVwZGF0ZSAmJiBVSWtpdC51cGRhdGUodGFyZ2V0KTtcblxuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gYXBwbHlBdHRyaWJ1dGUocmVmKSB7XG4gICAgICAgICAgICB2YXIgdGFyZ2V0ID0gcmVmLnRhcmdldDtcbiAgICAgICAgICAgIHZhciBhdHRyaWJ1dGVOYW1lID0gcmVmLmF0dHJpYnV0ZU5hbWU7XG5cblxuICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZU5hbWUgPT09ICdocmVmJykge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB2YXIgbmFtZSA9IGdldENvbXBvbmVudE5hbWUoYXR0cmlidXRlTmFtZSk7XG5cbiAgICAgICAgICAgIGlmICghbmFtZSB8fCAhKG5hbWUgaW4gVUlraXQpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoaGFzQXR0cih0YXJnZXQsIGF0dHJpYnV0ZU5hbWUpKSB7XG4gICAgICAgICAgICAgICAgVUlraXRbbmFtZV0odGFyZ2V0KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIGNvbXBvbmVudCA9IFVJa2l0LmdldENvbXBvbmVudCh0YXJnZXQsIG5hbWUpO1xuXG4gICAgICAgICAgICBpZiAoY29tcG9uZW50KSB7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LiRkZXN0cm95KCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIGFwcGx5Q2hpbGRMaXN0KHJlZikge1xuICAgICAgICAgICAgdmFyIGFkZGVkTm9kZXMgPSByZWYuYWRkZWROb2RlcztcbiAgICAgICAgICAgIHZhciByZW1vdmVkTm9kZXMgPSByZWYucmVtb3ZlZE5vZGVzO1xuXG5cbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYWRkZWROb2Rlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGFwcGx5JCQxKGFkZGVkTm9kZXNbaV0sIGNvbm5lY3QpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmb3IgKHZhciBpJDEgPSAwOyBpJDEgPCByZW1vdmVkTm9kZXMubGVuZ3RoOyBpJDErKykge1xuICAgICAgICAgICAgICAgIGFwcGx5JCQxKHJlbW92ZWROb2Rlc1tpJDFdLCBkaXNjb25uZWN0KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBhcHBseSQkMShub2RlLCBmbikge1xuXG4gICAgICAgICAgICBpZiAobm9kZS5ub2RlVHlwZSAhPT0gMSB8fCBoYXNBdHRyKG5vZGUsICd1ay1uby1ib290JykpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZuKG5vZGUpO1xuICAgICAgICAgICAgbm9kZSA9IG5vZGUuZmlyc3RFbGVtZW50Q2hpbGQ7XG4gICAgICAgICAgICB3aGlsZSAobm9kZSkge1xuICAgICAgICAgICAgICAgIHZhciBuZXh0ID0gbm9kZS5uZXh0RWxlbWVudFNpYmxpbmc7XG4gICAgICAgICAgICAgICAgYXBwbHkkJDEobm9kZSwgZm4pO1xuICAgICAgICAgICAgICAgIG5vZGUgPSBuZXh0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnbG9iYWxBUEkgKFVJa2l0KSB7XG5cbiAgICAgICAgdmFyIERBVEEgPSBVSWtpdC5kYXRhO1xuXG4gICAgICAgIFVJa2l0LnVzZSA9IGZ1bmN0aW9uIChwbHVnaW4pIHtcblxuICAgICAgICAgICAgaWYgKHBsdWdpbi5pbnN0YWxsZWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHBsdWdpbi5jYWxsKG51bGwsIHRoaXMpO1xuICAgICAgICAgICAgcGx1Z2luLmluc3RhbGxlZCA9IHRydWU7XG5cbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9O1xuXG4gICAgICAgIFVJa2l0Lm1peGluID0gZnVuY3Rpb24gKG1peGluLCBjb21wb25lbnQpIHtcbiAgICAgICAgICAgIGNvbXBvbmVudCA9IChpc1N0cmluZyhjb21wb25lbnQpID8gVUlraXQuY29tcG9uZW50KGNvbXBvbmVudCkgOiBjb21wb25lbnQpIHx8IHRoaXM7XG4gICAgICAgICAgICBtaXhpbiA9IG1lcmdlT3B0aW9ucyh7fSwgbWl4aW4pO1xuICAgICAgICAgICAgbWl4aW4ubWl4aW5zID0gY29tcG9uZW50Lm9wdGlvbnMubWl4aW5zO1xuICAgICAgICAgICAgZGVsZXRlIGNvbXBvbmVudC5vcHRpb25zLm1peGlucztcbiAgICAgICAgICAgIGNvbXBvbmVudC5vcHRpb25zID0gbWVyZ2VPcHRpb25zKG1peGluLCBjb21wb25lbnQub3B0aW9ucyk7XG4gICAgICAgIH07XG5cbiAgICAgICAgVUlraXQuZXh0ZW5kID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcblxuICAgICAgICAgICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cbiAgICAgICAgICAgIHZhciBTdXBlciA9IHRoaXM7XG4gICAgICAgICAgICB2YXIgU3ViID0gZnVuY3Rpb24gVUlraXRDb21wb25lbnQgKG9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9pbml0KG9wdGlvbnMpO1xuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgU3ViLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoU3VwZXIucHJvdG90eXBlKTtcbiAgICAgICAgICAgIFN1Yi5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBTdWI7XG4gICAgICAgICAgICBTdWIub3B0aW9ucyA9IG1lcmdlT3B0aW9ucyhTdXBlci5vcHRpb25zLCBvcHRpb25zKTtcblxuICAgICAgICAgICAgU3ViWydzdXBlciddID0gU3VwZXI7XG4gICAgICAgICAgICBTdWIuZXh0ZW5kID0gU3VwZXIuZXh0ZW5kO1xuXG4gICAgICAgICAgICByZXR1cm4gU3ViO1xuICAgICAgICB9O1xuXG4gICAgICAgIFVJa2l0LnVwZGF0ZSA9IGZ1bmN0aW9uIChlbGVtZW50LCBlKSB7XG5cbiAgICAgICAgICAgIGUgPSBjcmVhdGVFdmVudChlIHx8ICd1cGRhdGUnKTtcbiAgICAgICAgICAgIGVsZW1lbnQgPSBlbGVtZW50ID8gdG9Ob2RlKGVsZW1lbnQpIDogZG9jdW1lbnQuYm9keTtcblxuICAgICAgICAgICAgcGF0aChlbGVtZW50KS5tYXAoZnVuY3Rpb24gKGVsZW1lbnQpIHsgcmV0dXJuIHVwZGF0ZShlbGVtZW50W0RBVEFdLCBlKTsgfSk7XG4gICAgICAgICAgICBhcHBseShlbGVtZW50LCBmdW5jdGlvbiAoZWxlbWVudCkgeyByZXR1cm4gdXBkYXRlKGVsZW1lbnRbREFUQV0sIGUpOyB9KTtcblxuICAgICAgICB9O1xuXG4gICAgICAgIHZhciBjb250YWluZXI7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShVSWtpdCwgJ2NvbnRhaW5lcicsIHtcblxuICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY29udGFpbmVyIHx8IGRvY3VtZW50LmJvZHk7XG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICBzZXQ6IGZ1bmN0aW9uKGVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICBjb250YWluZXIgPSAkKGVsZW1lbnQpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGZ1bmN0aW9uIHVwZGF0ZShkYXRhJCQxLCBlKSB7XG5cbiAgICAgICAgICAgIGlmICghZGF0YSQkMSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9yICh2YXIgbmFtZSBpbiBkYXRhJCQxKSB7XG4gICAgICAgICAgICAgICAgaWYgKGRhdGEkJDFbbmFtZV0uX2lzUmVhZHkpIHtcbiAgICAgICAgICAgICAgICAgICAgZGF0YSQkMVtuYW1lXS5fY2FsbFVwZGF0ZShlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIHBhdGgoZWxlbWVudCkge1xuICAgICAgICAgICAgdmFyIHBhdGggPSBbXTtcblxuICAgICAgICAgICAgd2hpbGUgKGVsZW1lbnQgJiYgZWxlbWVudCAhPT0gZG9jdW1lbnQuYm9keSAmJiBlbGVtZW50LnBhcmVudE5vZGUpIHtcblxuICAgICAgICAgICAgICAgIGVsZW1lbnQgPSBlbGVtZW50LnBhcmVudE5vZGU7XG4gICAgICAgICAgICAgICAgcGF0aC51bnNoaWZ0KGVsZW1lbnQpO1xuXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBwYXRoO1xuICAgICAgICB9XG5cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBob29rc0FQSSAoVUlraXQpIHtcblxuICAgICAgICBVSWtpdC5wcm90b3R5cGUuX2NhbGxIb29rID0gZnVuY3Rpb24gKGhvb2spIHtcbiAgICAgICAgICAgIHZhciB0aGlzJDEgPSB0aGlzO1xuXG5cbiAgICAgICAgICAgIHZhciBoYW5kbGVycyA9IHRoaXMuJG9wdGlvbnNbaG9va107XG5cbiAgICAgICAgICAgIGlmIChoYW5kbGVycykge1xuICAgICAgICAgICAgICAgIGhhbmRsZXJzLmZvckVhY2goZnVuY3Rpb24gKGhhbmRsZXIpIHsgcmV0dXJuIGhhbmRsZXIuY2FsbCh0aGlzJDEpOyB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICBVSWtpdC5wcm90b3R5cGUuX2NhbGxDb25uZWN0ZWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgdGhpcyQxID0gdGhpcztcblxuXG4gICAgICAgICAgICBpZiAodGhpcy5fY29ubmVjdGVkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLl9kYXRhID0ge307XG4gICAgICAgICAgICB0aGlzLl9pbml0UHJvcHMoKTtcblxuICAgICAgICAgICAgdGhpcy5fY2FsbEhvb2soJ2JlZm9yZUNvbm5lY3QnKTtcbiAgICAgICAgICAgIHRoaXMuX2Nvbm5lY3RlZCA9IHRydWU7XG5cbiAgICAgICAgICAgIHRoaXMuX2luaXRFdmVudHMoKTtcbiAgICAgICAgICAgIHRoaXMuX2luaXRPYnNlcnZlcigpO1xuXG4gICAgICAgICAgICB0aGlzLl9jYWxsSG9vaygnY29ubmVjdGVkJyk7XG5cbiAgICAgICAgICAgIGlmICghdGhpcy5faXNSZWFkeSkge1xuICAgICAgICAgICAgICAgIHJlYWR5KGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXMkMS5fY2FsbFJlYWR5KCk7IH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLl9jYWxsVXBkYXRlKCk7XG4gICAgICAgIH07XG5cbiAgICAgICAgVUlraXQucHJvdG90eXBlLl9jYWxsRGlzY29ubmVjdGVkID0gZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICBpZiAoIXRoaXMuX2Nvbm5lY3RlZCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5fY2FsbEhvb2soJ2JlZm9yZURpc2Nvbm5lY3QnKTtcblxuICAgICAgICAgICAgaWYgKHRoaXMuX29ic2VydmVyKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fb2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xuICAgICAgICAgICAgICAgIHRoaXMuX29ic2VydmVyID0gbnVsbDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5fdW5iaW5kRXZlbnRzKCk7XG4gICAgICAgICAgICB0aGlzLl9jYWxsSG9vaygnZGlzY29ubmVjdGVkJyk7XG5cbiAgICAgICAgICAgIHRoaXMuX2Nvbm5lY3RlZCA9IGZhbHNlO1xuXG4gICAgICAgIH07XG5cbiAgICAgICAgVUlraXQucHJvdG90eXBlLl9jYWxsUmVhZHkgPSBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLl9pc1JlYWR5KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLl9pc1JlYWR5ID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuX2NhbGxIb29rKCdyZWFkeScpO1xuICAgICAgICAgICAgdGhpcy5fcmVzZXRDb21wdXRlZHMoKTtcbiAgICAgICAgICAgIHRoaXMuX2NhbGxVcGRhdGUoKTtcbiAgICAgICAgfTtcblxuICAgICAgICBVSWtpdC5wcm90b3R5cGUuX2NhbGxVcGRhdGUgPSBmdW5jdGlvbiAoZSkge1xuICAgICAgICAgICAgdmFyIHRoaXMkMSA9IHRoaXM7XG5cblxuICAgICAgICAgICAgZSA9IGNyZWF0ZUV2ZW50KGUgfHwgJ3VwZGF0ZScpO1xuXG4gICAgICAgICAgICB2YXIgdHlwZSA9IGUudHlwZTtcblxuICAgICAgICAgICAgaWYgKGluY2x1ZGVzKFsndXBkYXRlJywgJ2xvYWQnLCAncmVzaXplJ10sIHR5cGUpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fcmVzZXRDb21wdXRlZHMoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIHVwZGF0ZXMgPSB0aGlzLiRvcHRpb25zLnVwZGF0ZTtcbiAgICAgICAgICAgIHZhciByZWYgPSB0aGlzLl9mcmFtZXM7XG4gICAgICAgICAgICB2YXIgcmVhZHMgPSByZWYucmVhZHM7XG4gICAgICAgICAgICB2YXIgd3JpdGVzID0gcmVmLndyaXRlcztcblxuICAgICAgICAgICAgaWYgKCF1cGRhdGVzKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB1cGRhdGVzLmZvckVhY2goZnVuY3Rpb24gKHJlZiwgaSkge1xuICAgICAgICAgICAgICAgIHZhciByZWFkID0gcmVmLnJlYWQ7XG4gICAgICAgICAgICAgICAgdmFyIHdyaXRlID0gcmVmLndyaXRlO1xuICAgICAgICAgICAgICAgIHZhciBldmVudHMgPSByZWYuZXZlbnRzO1xuXG5cbiAgICAgICAgICAgICAgICBpZiAodHlwZSAhPT0gJ3VwZGF0ZScgJiYgIWluY2x1ZGVzKGV2ZW50cywgdHlwZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChyZWFkICYmICFpbmNsdWRlcyhmYXN0ZG9tLnJlYWRzLCByZWFkc1tpXSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVhZHNbaV0gPSBmYXN0ZG9tLnJlYWQoZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVzdWx0ID0gdGhpcyQxLl9jb25uZWN0ZWQgJiYgcmVhZC5jYWxsKHRoaXMkMSwgdGhpcyQxLl9kYXRhLCBlKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdCA9PT0gZmFsc2UgJiYgd3JpdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYXN0ZG9tLmNsZWFyKHdyaXRlc1tpXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHdyaXRlc1tpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNQbGFpbk9iamVjdChyZXN1bHQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNzaWduKHRoaXMkMS5fZGF0YSwgcmVzdWx0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSByZWFkc1tpXTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHdyaXRlICYmICFpbmNsdWRlcyhmYXN0ZG9tLndyaXRlcywgd3JpdGVzW2ldKSkge1xuICAgICAgICAgICAgICAgICAgICB3cml0ZXNbaV0gPSBmYXN0ZG9tLndyaXRlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMkMS5fY29ubmVjdGVkICYmIHdyaXRlLmNhbGwodGhpcyQxLCB0aGlzJDEuX2RhdGEsIGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHdyaXRlc1tpXTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICB9O1xuXG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc3RhdGVBUEkgKFVJa2l0KSB7XG5cbiAgICAgICAgdmFyIHVpZCA9IDA7XG5cbiAgICAgICAgVUlraXQucHJvdG90eXBlLl9pbml0ID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcblxuICAgICAgICAgICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gICAgICAgICAgICBvcHRpb25zLmRhdGEgPSBub3JtYWxpemVEYXRhKG9wdGlvbnMsIHRoaXMuY29uc3RydWN0b3Iub3B0aW9ucyk7XG5cbiAgICAgICAgICAgIHRoaXMuJG9wdGlvbnMgPSBtZXJnZU9wdGlvbnModGhpcy5jb25zdHJ1Y3Rvci5vcHRpb25zLCBvcHRpb25zLCB0aGlzKTtcbiAgICAgICAgICAgIHRoaXMuJGVsID0gbnVsbDtcbiAgICAgICAgICAgIHRoaXMuJHByb3BzID0ge307XG5cbiAgICAgICAgICAgIHRoaXMuX2ZyYW1lcyA9IHtyZWFkczoge30sIHdyaXRlczoge319O1xuICAgICAgICAgICAgdGhpcy5fZXZlbnRzID0gW107XG5cbiAgICAgICAgICAgIHRoaXMuX3VpZCA9IHVpZCsrO1xuICAgICAgICAgICAgdGhpcy5faW5pdERhdGEoKTtcbiAgICAgICAgICAgIHRoaXMuX2luaXRNZXRob2RzKCk7XG4gICAgICAgICAgICB0aGlzLl9pbml0Q29tcHV0ZWRzKCk7XG4gICAgICAgICAgICB0aGlzLl9jYWxsSG9vaygnY3JlYXRlZCcpO1xuXG4gICAgICAgICAgICBpZiAob3B0aW9ucy5lbCkge1xuICAgICAgICAgICAgICAgIHRoaXMuJG1vdW50KG9wdGlvbnMuZWwpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIFVJa2l0LnByb3RvdHlwZS5faW5pdERhdGEgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgdGhpcyQxID0gdGhpcztcblxuXG4gICAgICAgICAgICB2YXIgcmVmID0gdGhpcy4kb3B0aW9ucztcbiAgICAgICAgICAgIHZhciBkYXRhJCQxID0gcmVmLmRhdGE7IGlmICggZGF0YSQkMSA9PT0gdm9pZCAwICkgZGF0YSQkMSA9IHt9O1xuXG4gICAgICAgICAgICBmb3IgKHZhciBrZXkgaW4gZGF0YSQkMSkge1xuICAgICAgICAgICAgICAgIHRoaXMkMS4kcHJvcHNba2V5XSA9IHRoaXMkMVtrZXldID0gZGF0YSQkMVtrZXldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIFVJa2l0LnByb3RvdHlwZS5faW5pdE1ldGhvZHMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgdGhpcyQxID0gdGhpcztcblxuXG4gICAgICAgICAgICB2YXIgcmVmID0gdGhpcy4kb3B0aW9ucztcbiAgICAgICAgICAgIHZhciBtZXRob2RzID0gcmVmLm1ldGhvZHM7XG5cbiAgICAgICAgICAgIGlmIChtZXRob2RzKSB7XG4gICAgICAgICAgICAgICAgZm9yICh2YXIga2V5IGluIG1ldGhvZHMpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcyQxW2tleV0gPSBiaW5kKG1ldGhvZHNba2V5XSwgdGhpcyQxKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgVUlraXQucHJvdG90eXBlLl9pbml0Q29tcHV0ZWRzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIHRoaXMkMSA9IHRoaXM7XG5cblxuICAgICAgICAgICAgdmFyIHJlZiA9IHRoaXMuJG9wdGlvbnM7XG4gICAgICAgICAgICB2YXIgY29tcHV0ZWQgPSByZWYuY29tcHV0ZWQ7XG5cbiAgICAgICAgICAgIHRoaXMuX3Jlc2V0Q29tcHV0ZWRzKCk7XG5cbiAgICAgICAgICAgIGlmIChjb21wdXRlZCkge1xuICAgICAgICAgICAgICAgIGZvciAodmFyIGtleSBpbiBjb21wdXRlZCkge1xuICAgICAgICAgICAgICAgICAgICByZWdpc3RlckNvbXB1dGVkKHRoaXMkMSwga2V5LCBjb21wdXRlZFtrZXldKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgVUlraXQucHJvdG90eXBlLl9yZXNldENvbXB1dGVkcyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHRoaXMuX2NvbXB1dGVkcyA9IHt9O1xuICAgICAgICB9O1xuXG4gICAgICAgIFVJa2l0LnByb3RvdHlwZS5faW5pdFByb3BzID0gZnVuY3Rpb24gKHByb3BzKSB7XG4gICAgICAgICAgICB2YXIgdGhpcyQxID0gdGhpcztcblxuXG4gICAgICAgICAgICB2YXIga2V5O1xuXG4gICAgICAgICAgICB0aGlzLl9yZXNldENvbXB1dGVkcygpO1xuXG4gICAgICAgICAgICBwcm9wcyA9IHByb3BzIHx8IGdldFByb3BzKHRoaXMuJG9wdGlvbnMsIHRoaXMuJG5hbWUpO1xuXG4gICAgICAgICAgICBmb3IgKGtleSBpbiBwcm9wcykge1xuICAgICAgICAgICAgICAgIGlmICghaXNVbmRlZmluZWQocHJvcHNba2V5XSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcyQxLiRwcm9wc1trZXldID0gcHJvcHNba2V5XTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZhciBleGNsdWRlID0gW3RoaXMuJG9wdGlvbnMuY29tcHV0ZWQsIHRoaXMuJG9wdGlvbnMubWV0aG9kc107XG4gICAgICAgICAgICBmb3IgKGtleSBpbiB0aGlzJDEuJHByb3BzKSB7XG4gICAgICAgICAgICAgICAgaWYgKGtleSBpbiBwcm9wcyAmJiBub3RJbihleGNsdWRlLCBrZXkpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMkMVtrZXldID0gdGhpcyQxLiRwcm9wc1trZXldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICBVSWtpdC5wcm90b3R5cGUuX2luaXRFdmVudHMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgdGhpcyQxID0gdGhpcztcblxuXG4gICAgICAgICAgICB2YXIgcmVmID0gdGhpcy4kb3B0aW9ucztcbiAgICAgICAgICAgIHZhciBldmVudHMgPSByZWYuZXZlbnRzO1xuXG4gICAgICAgICAgICBpZiAoZXZlbnRzKSB7XG5cbiAgICAgICAgICAgICAgICBldmVudHMuZm9yRWFjaChmdW5jdGlvbiAoZXZlbnQpIHtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoIWhhc093bihldmVudCwgJ2hhbmRsZXInKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIga2V5IGluIGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnaXN0ZXJFdmVudCh0aGlzJDEsIGV2ZW50W2tleV0sIGtleSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWdpc3RlckV2ZW50KHRoaXMkMSwgZXZlbnQpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICBVSWtpdC5wcm90b3R5cGUuX3VuYmluZEV2ZW50cyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHRoaXMuX2V2ZW50cy5mb3JFYWNoKGZ1bmN0aW9uICh1bmJpbmQpIHsgcmV0dXJuIHVuYmluZCgpOyB9KTtcbiAgICAgICAgICAgIHRoaXMuX2V2ZW50cyA9IFtdO1xuICAgICAgICB9O1xuXG4gICAgICAgIFVJa2l0LnByb3RvdHlwZS5faW5pdE9ic2VydmVyID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIHRoaXMkMSA9IHRoaXM7XG5cblxuICAgICAgICAgICAgdmFyIHJlZiA9IHRoaXMuJG9wdGlvbnM7XG4gICAgICAgICAgICB2YXIgYXR0cnMgPSByZWYuYXR0cnM7XG4gICAgICAgICAgICB2YXIgcHJvcHMgPSByZWYucHJvcHM7XG4gICAgICAgICAgICB2YXIgZWwgPSByZWYuZWw7XG4gICAgICAgICAgICBpZiAodGhpcy5fb2JzZXJ2ZXIgfHwgIXByb3BzIHx8ICFhdHRycykge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYXR0cnMgPSBpc0FycmF5KGF0dHJzKSA/IGF0dHJzIDogT2JqZWN0LmtleXMocHJvcHMpLm1hcChmdW5jdGlvbiAoa2V5KSB7IHJldHVybiBoeXBoZW5hdGUoa2V5KTsgfSk7XG5cbiAgICAgICAgICAgIHRoaXMuX29ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICAgICAgdmFyIGRhdGEkJDEgPSBnZXRQcm9wcyh0aGlzJDEuJG9wdGlvbnMsIHRoaXMkMS4kbmFtZSk7XG4gICAgICAgICAgICAgICAgaWYgKGF0dHJzLnNvbWUoZnVuY3Rpb24gKGtleSkgeyByZXR1cm4gIWlzVW5kZWZpbmVkKGRhdGEkJDFba2V5XSkgJiYgZGF0YSQkMVtrZXldICE9PSB0aGlzJDEuJHByb3BzW2tleV07IH0pKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMkMS4kcmVzZXQoKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICB0aGlzLl9vYnNlcnZlci5vYnNlcnZlKGVsLCB7YXR0cmlidXRlczogdHJ1ZSwgYXR0cmlidXRlRmlsdGVyOiBhdHRycy5jb25jYXQoW3RoaXMuJG5hbWUsIChcImRhdGEtXCIgKyAodGhpcy4kbmFtZSkpXSl9KTtcbiAgICAgICAgfTtcblxuICAgICAgICBmdW5jdGlvbiBnZXRQcm9wcyhvcHRzLCBuYW1lKSB7XG5cbiAgICAgICAgICAgIHZhciBkYXRhJCQxID0ge307XG4gICAgICAgICAgICB2YXIgYXJncyA9IG9wdHMuYXJnczsgaWYgKCBhcmdzID09PSB2b2lkIDAgKSBhcmdzID0gW107XG4gICAgICAgICAgICB2YXIgcHJvcHMgPSBvcHRzLnByb3BzOyBpZiAoIHByb3BzID09PSB2b2lkIDAgKSBwcm9wcyA9IHt9O1xuICAgICAgICAgICAgdmFyIGVsID0gb3B0cy5lbDtcblxuICAgICAgICAgICAgaWYgKCFwcm9wcykge1xuICAgICAgICAgICAgICAgIHJldHVybiBkYXRhJCQxO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmb3IgKHZhciBrZXkgaW4gcHJvcHMpIHtcbiAgICAgICAgICAgICAgICB2YXIgcHJvcCA9IGh5cGhlbmF0ZShrZXkpO1xuICAgICAgICAgICAgICAgIGlmIChoYXNBdHRyKGVsLCBwcm9wKSkge1xuXG4gICAgICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9IGNvZXJjZShwcm9wc1trZXldLCBhdHRyKGVsLCBwcm9wKSk7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHByb3AgPT09ICd0YXJnZXQnICYmICghdmFsdWUgfHwgc3RhcnRzV2l0aCh2YWx1ZSwgJ18nKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZGF0YSQkMVtrZXldID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB2YXIgb3B0aW9ucyA9IHBhcnNlT3B0aW9ucyhkYXRhKGVsLCBuYW1lKSwgYXJncyk7XG5cbiAgICAgICAgICAgIGZvciAodmFyIGtleSQxIGluIG9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgICB2YXIgcHJvcCQxID0gY2FtZWxpemUoa2V5JDEpO1xuICAgICAgICAgICAgICAgIGlmIChwcm9wc1twcm9wJDFdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgZGF0YSQkMVtwcm9wJDFdID0gY29lcmNlKHByb3BzW3Byb3AkMV0sIG9wdGlvbnNba2V5JDFdKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBkYXRhJCQxO1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gcmVnaXN0ZXJDb21wdXRlZChjb21wb25lbnQsIGtleSwgY2IpIHtcbiAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjb21wb25lbnQsIGtleSwge1xuXG4gICAgICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcblxuICAgICAgICAgICAgICAgIGdldDogZnVuY3Rpb24oKSB7XG5cbiAgICAgICAgICAgICAgICAgICAgdmFyIF9jb21wdXRlZHMgPSBjb21wb25lbnQuX2NvbXB1dGVkcztcbiAgICAgICAgICAgICAgICAgICAgdmFyICRwcm9wcyA9IGNvbXBvbmVudC4kcHJvcHM7XG4gICAgICAgICAgICAgICAgICAgIHZhciAkZWwgPSBjb21wb25lbnQuJGVsO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmICghaGFzT3duKF9jb21wdXRlZHMsIGtleSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIF9jb21wdXRlZHNba2V5XSA9IGNiLmNhbGwoY29tcG9uZW50LCAkcHJvcHMsICRlbCk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2NvbXB1dGVkc1trZXldO1xuICAgICAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgICAgICBzZXQ6IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudC5fY29tcHV0ZWRzW2tleV0gPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gcmVnaXN0ZXJFdmVudChjb21wb25lbnQsIGV2ZW50LCBrZXkpIHtcblxuICAgICAgICAgICAgaWYgKCFpc1BsYWluT2JqZWN0KGV2ZW50KSkge1xuICAgICAgICAgICAgICAgIGV2ZW50ID0gKHtuYW1lOiBrZXksIGhhbmRsZXI6IGV2ZW50fSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZhciBuYW1lID0gZXZlbnQubmFtZTtcbiAgICAgICAgICAgIHZhciBlbCA9IGV2ZW50LmVsO1xuICAgICAgICAgICAgdmFyIGhhbmRsZXIgPSBldmVudC5oYW5kbGVyO1xuICAgICAgICAgICAgdmFyIGNhcHR1cmUgPSBldmVudC5jYXB0dXJlO1xuICAgICAgICAgICAgdmFyIGRlbGVnYXRlID0gZXZlbnQuZGVsZWdhdGU7XG4gICAgICAgICAgICB2YXIgZmlsdGVyJCQxID0gZXZlbnQuZmlsdGVyO1xuICAgICAgICAgICAgdmFyIHNlbGYgPSBldmVudC5zZWxmO1xuICAgICAgICAgICAgZWwgPSBpc0Z1bmN0aW9uKGVsKVxuICAgICAgICAgICAgICAgID8gZWwuY2FsbChjb21wb25lbnQpXG4gICAgICAgICAgICAgICAgOiBlbCB8fCBjb21wb25lbnQuJGVsO1xuXG4gICAgICAgICAgICBpZiAoaXNBcnJheShlbCkpIHtcbiAgICAgICAgICAgICAgICBlbC5mb3JFYWNoKGZ1bmN0aW9uIChlbCkgeyByZXR1cm4gcmVnaXN0ZXJFdmVudChjb21wb25lbnQsIGFzc2lnbih7fSwgZXZlbnQsIHtlbDogZWx9KSwga2V5KTsgfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoIWVsIHx8IGZpbHRlciQkMSAmJiAhZmlsdGVyJCQxLmNhbGwoY29tcG9uZW50KSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaGFuZGxlciA9IGRldGFpbChpc1N0cmluZyhoYW5kbGVyKSA/IGNvbXBvbmVudFtoYW5kbGVyXSA6IGJpbmQoaGFuZGxlciwgY29tcG9uZW50KSk7XG5cbiAgICAgICAgICAgIGlmIChzZWxmKSB7XG4gICAgICAgICAgICAgICAgaGFuZGxlciA9IHNlbGZGaWx0ZXIoaGFuZGxlcik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbXBvbmVudC5fZXZlbnRzLnB1c2goXG4gICAgICAgICAgICAgICAgb24oXG4gICAgICAgICAgICAgICAgICAgIGVsLFxuICAgICAgICAgICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgICAgICAgICAhZGVsZWdhdGVcbiAgICAgICAgICAgICAgICAgICAgICAgID8gbnVsbFxuICAgICAgICAgICAgICAgICAgICAgICAgOiBpc1N0cmluZyhkZWxlZ2F0ZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGRlbGVnYXRlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBkZWxlZ2F0ZS5jYWxsKGNvbXBvbmVudCksXG4gICAgICAgICAgICAgICAgICAgIGhhbmRsZXIsXG4gICAgICAgICAgICAgICAgICAgIGNhcHR1cmVcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApO1xuXG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBzZWxmRmlsdGVyKGhhbmRsZXIpIHtcbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiBzZWxmSGFuZGxlcihlKSB7XG4gICAgICAgICAgICAgICAgaWYgKGUudGFyZ2V0ID09PSBlLmN1cnJlbnRUYXJnZXQgfHwgZS50YXJnZXQgPT09IGUuY3VycmVudCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaGFuZGxlci5jYWxsKG51bGwsIGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBub3RJbihvcHRpb25zLCBrZXkpIHtcbiAgICAgICAgICAgIHJldHVybiBvcHRpb25zLmV2ZXJ5KGZ1bmN0aW9uIChhcnIpIHsgcmV0dXJuICFhcnIgfHwgIWhhc093bihhcnIsIGtleSk7IH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gZGV0YWlsKGxpc3RlbmVyKSB7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGUpIHsgcmV0dXJuIGlzQXJyYXkoZS5kZXRhaWwpID8gbGlzdGVuZXIuYXBwbHkodm9pZCAwLCBbZV0uY29uY2F0KGUuZGV0YWlsKSkgOiBsaXN0ZW5lcihlKTsgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIGNvZXJjZSh0eXBlLCB2YWx1ZSkge1xuXG4gICAgICAgICAgICBpZiAodHlwZSA9PT0gQm9vbGVhbikge1xuICAgICAgICAgICAgICAgIHJldHVybiB0b0Jvb2xlYW4odmFsdWUpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlID09PSBOdW1iZXIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdG9OdW1iZXIodmFsdWUpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlID09PSAnbGlzdCcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdG9MaXN0KHZhbHVlKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ21lZGlhJykge1xuICAgICAgICAgICAgICAgIHJldHVybiB0b01lZGlhKHZhbHVlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHR5cGUgPyB0eXBlKHZhbHVlKSA6IHZhbHVlO1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gdG9NZWRpYSh2YWx1ZSkge1xuXG4gICAgICAgICAgICBpZiAoaXNTdHJpbmcodmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlWzBdID09PSAnQCcpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIG5hbWUgPSBcIm1lZGlhLVwiICsgKHZhbHVlLnN1YnN0cigxKSk7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gdG9GbG9hdChnZXRDc3NWYXIobmFtZSkpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNOYU4odmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiB2YWx1ZSAmJiAhaXNOYU4odmFsdWUpID8gKFwiKG1pbi13aWR0aDogXCIgKyB2YWx1ZSArIFwicHgpXCIpIDogZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBub3JtYWxpemVEYXRhKHJlZiwgcmVmJDEpIHtcbiAgICAgICAgICAgIHZhciBkYXRhJCQxID0gcmVmLmRhdGE7XG4gICAgICAgICAgICB2YXIgZWwgPSByZWYuZWw7XG4gICAgICAgICAgICB2YXIgYXJncyA9IHJlZiQxLmFyZ3M7XG4gICAgICAgICAgICB2YXIgcHJvcHMgPSByZWYkMS5wcm9wczsgaWYgKCBwcm9wcyA9PT0gdm9pZCAwICkgcHJvcHMgPSB7fTtcblxuICAgICAgICAgICAgZGF0YSQkMSA9IGlzQXJyYXkoZGF0YSQkMSlcbiAgICAgICAgICAgICAgICA/IGFyZ3MgJiYgYXJncy5sZW5ndGhcbiAgICAgICAgICAgICAgICAgICAgPyBkYXRhJCQxLnNsaWNlKDAsIGFyZ3MubGVuZ3RoKS5yZWR1Y2UoZnVuY3Rpb24gKGRhdGEkJDEsIHZhbHVlLCBpbmRleCQkMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzUGxhaW5PYmplY3QodmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNzaWduKGRhdGEkJDEsIHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSQkMVthcmdzW2luZGV4JCQxXV0gPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBkYXRhJCQxO1xuICAgICAgICAgICAgICAgICAgICB9LCB7fSlcbiAgICAgICAgICAgICAgICAgICAgOiB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICA6IGRhdGEkJDE7XG5cbiAgICAgICAgICAgIGlmIChkYXRhJCQxKSB7XG4gICAgICAgICAgICAgICAgZm9yICh2YXIga2V5IGluIGRhdGEkJDEpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzVW5kZWZpbmVkKGRhdGEkJDFba2V5XSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBkYXRhJCQxW2tleV07XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhJCQxW2tleV0gPSBwcm9wc1trZXldID8gY29lcmNlKHByb3BzW2tleV0sIGRhdGEkJDFba2V5XSwgZWwpIDogZGF0YSQkMVtrZXldO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gZGF0YSQkMTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGluc3RhbmNlQVBJIChVSWtpdCkge1xuXG4gICAgICAgIHZhciBEQVRBID0gVUlraXQuZGF0YTtcblxuICAgICAgICBVSWtpdC5wcm90b3R5cGUuJG1vdW50ID0gZnVuY3Rpb24gKGVsKSB7XG5cbiAgICAgICAgICAgIHZhciByZWYgPSB0aGlzLiRvcHRpb25zO1xuICAgICAgICAgICAgdmFyIG5hbWUgPSByZWYubmFtZTtcblxuICAgICAgICAgICAgaWYgKCFlbFtEQVRBXSkge1xuICAgICAgICAgICAgICAgIGVsW0RBVEFdID0ge307XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChlbFtEQVRBXVtuYW1lXSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZWxbREFUQV1bbmFtZV0gPSB0aGlzO1xuXG4gICAgICAgICAgICB0aGlzLiRlbCA9IHRoaXMuJG9wdGlvbnMuZWwgPSB0aGlzLiRvcHRpb25zLmVsIHx8IGVsO1xuXG4gICAgICAgICAgICB0aGlzLl9jYWxsSG9vaygnaW5pdCcpO1xuXG4gICAgICAgICAgICBpZiAod2l0aGluKGVsLCBkb2N1bWVudCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9jYWxsQ29ubmVjdGVkKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgVUlraXQucHJvdG90eXBlLiRlbWl0ID0gZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgICAgIHRoaXMuX2NhbGxVcGRhdGUoZSk7XG4gICAgICAgIH07XG5cbiAgICAgICAgVUlraXQucHJvdG90eXBlLiRyZXNldCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHRoaXMuX2NhbGxEaXNjb25uZWN0ZWQoKTtcbiAgICAgICAgICAgIHRoaXMuX2NhbGxDb25uZWN0ZWQoKTtcbiAgICAgICAgfTtcblxuICAgICAgICBVSWtpdC5wcm90b3R5cGUuJGRlc3Ryb3kgPSBmdW5jdGlvbiAocmVtb3ZlRWwpIHtcbiAgICAgICAgICAgIGlmICggcmVtb3ZlRWwgPT09IHZvaWQgMCApIHJlbW92ZUVsID0gZmFsc2U7XG5cblxuICAgICAgICAgICAgdmFyIHJlZiA9IHRoaXMuJG9wdGlvbnM7XG4gICAgICAgICAgICB2YXIgZWwgPSByZWYuZWw7XG4gICAgICAgICAgICB2YXIgbmFtZSA9IHJlZi5uYW1lO1xuXG4gICAgICAgICAgICBpZiAoZWwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9jYWxsRGlzY29ubmVjdGVkKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuX2NhbGxIb29rKCdkZXN0cm95Jyk7XG5cbiAgICAgICAgICAgIGlmICghZWwgfHwgIWVsW0RBVEFdKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBkZWxldGUgZWxbREFUQV1bbmFtZV07XG5cbiAgICAgICAgICAgIGlmICghT2JqZWN0LmtleXMoZWxbREFUQV0pLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIGRlbGV0ZSBlbFtEQVRBXTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHJlbW92ZUVsKSB7XG4gICAgICAgICAgICAgICAgcmVtb3ZlKHRoaXMuJGVsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICBVSWtpdC5wcm90b3R5cGUuJGNyZWF0ZSA9IGZ1bmN0aW9uIChjb21wb25lbnQsIGVsZW1lbnQsIGRhdGEkJDEpIHtcbiAgICAgICAgICAgIHJldHVybiBVSWtpdFtjb21wb25lbnRdKGVsZW1lbnQsIGRhdGEkJDEpO1xuICAgICAgICB9O1xuXG4gICAgICAgIFVJa2l0LnByb3RvdHlwZS4kdXBkYXRlID0gVUlraXQudXBkYXRlO1xuICAgICAgICBVSWtpdC5wcm90b3R5cGUuJGdldENvbXBvbmVudCA9IFVJa2l0LmdldENvbXBvbmVudDtcblxuICAgICAgICB2YXIgbmFtZXMgPSB7fTtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoVUlraXQucHJvdG90eXBlLCB7XG5cbiAgICAgICAgICAgICRjb250YWluZXI6IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoVUlraXQsICdjb250YWluZXInKSxcblxuICAgICAgICAgICAgJG5hbWU6IHtcblxuICAgICAgICAgICAgICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciByZWYgPSB0aGlzLiRvcHRpb25zO1xuICAgICAgICAgICAgICAgICAgICB2YXIgbmFtZSA9IHJlZi5uYW1lO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmICghbmFtZXNbbmFtZV0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWVzW25hbWVdID0gVUlraXQucHJlZml4ICsgaHlwaGVuYXRlKG5hbWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5hbWVzW25hbWVdO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgfVxuXG4gICAgICAgIH0pO1xuXG4gICAgfVxuXG4gICAgdmFyIFVJa2l0ID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICAgICAgdGhpcy5faW5pdChvcHRpb25zKTtcbiAgICB9O1xuXG4gICAgVUlraXQudXRpbCA9IHV0aWw7XG4gICAgVUlraXQuZGF0YSA9ICdfX3Vpa2l0X18nO1xuICAgIFVJa2l0LnByZWZpeCA9ICd1ay0nO1xuICAgIFVJa2l0Lm9wdGlvbnMgPSB7fTtcblxuICAgIGdsb2JhbEFQSShVSWtpdCk7XG4gICAgaG9va3NBUEkoVUlraXQpO1xuICAgIHN0YXRlQVBJKFVJa2l0KTtcbiAgICBjb21wb25lbnRBUEkoVUlraXQpO1xuICAgIGluc3RhbmNlQVBJKFVJa2l0KTtcblxuICAgIHZhciBDbGFzcyA9IHtcblxuICAgICAgICBjb25uZWN0ZWQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgYWRkQ2xhc3ModGhpcy4kZWwsIHRoaXMuJG5hbWUpO1xuICAgICAgICB9XG5cbiAgICB9O1xuXG4gICAgdmFyIFRvZ2dsYWJsZSA9IHtcblxuICAgICAgICBwcm9wczoge1xuICAgICAgICAgICAgY2xzOiBCb29sZWFuLFxuICAgICAgICAgICAgYW5pbWF0aW9uOiAnbGlzdCcsXG4gICAgICAgICAgICBkdXJhdGlvbjogTnVtYmVyLFxuICAgICAgICAgICAgb3JpZ2luOiBTdHJpbmcsXG4gICAgICAgICAgICB0cmFuc2l0aW9uOiBTdHJpbmcsXG4gICAgICAgICAgICBxdWV1ZWQ6IEJvb2xlYW5cbiAgICAgICAgfSxcblxuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICBjbHM6IGZhbHNlLFxuICAgICAgICAgICAgYW5pbWF0aW9uOiBbZmFsc2VdLFxuICAgICAgICAgICAgZHVyYXRpb246IDIwMCxcbiAgICAgICAgICAgIG9yaWdpbjogZmFsc2UsXG4gICAgICAgICAgICB0cmFuc2l0aW9uOiAnbGluZWFyJyxcbiAgICAgICAgICAgIHF1ZXVlZDogZmFsc2UsXG5cbiAgICAgICAgICAgIGluaXRQcm9wczoge1xuICAgICAgICAgICAgICAgIG92ZXJmbG93OiAnJyxcbiAgICAgICAgICAgICAgICBoZWlnaHQ6ICcnLFxuICAgICAgICAgICAgICAgIHBhZGRpbmdUb3A6ICcnLFxuICAgICAgICAgICAgICAgIHBhZGRpbmdCb3R0b206ICcnLFxuICAgICAgICAgICAgICAgIG1hcmdpblRvcDogJycsXG4gICAgICAgICAgICAgICAgbWFyZ2luQm90dG9tOiAnJ1xuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgaGlkZVByb3BzOiB7XG4gICAgICAgICAgICAgICAgb3ZlcmZsb3c6ICdoaWRkZW4nLFxuICAgICAgICAgICAgICAgIGhlaWdodDogMCxcbiAgICAgICAgICAgICAgICBwYWRkaW5nVG9wOiAwLFxuICAgICAgICAgICAgICAgIHBhZGRpbmdCb3R0b206IDAsXG4gICAgICAgICAgICAgICAgbWFyZ2luVG9wOiAwLFxuICAgICAgICAgICAgICAgIG1hcmdpbkJvdHRvbTogMFxuICAgICAgICAgICAgfVxuXG4gICAgICAgIH0sXG5cbiAgICAgICAgY29tcHV0ZWQ6IHtcblxuICAgICAgICAgICAgaGFzQW5pbWF0aW9uOiBmdW5jdGlvbihyZWYpIHtcbiAgICAgICAgICAgICAgICB2YXIgYW5pbWF0aW9uID0gcmVmLmFuaW1hdGlvbjtcblxuICAgICAgICAgICAgICAgIHJldHVybiAhIWFuaW1hdGlvblswXTtcbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIGhhc1RyYW5zaXRpb246IGZ1bmN0aW9uKHJlZikge1xuICAgICAgICAgICAgICAgIHZhciBhbmltYXRpb24gPSByZWYuYW5pbWF0aW9uO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuaGFzQW5pbWF0aW9uICYmIGFuaW1hdGlvblswXSA9PT0gdHJ1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9LFxuXG4gICAgICAgIG1ldGhvZHM6IHtcblxuICAgICAgICAgICAgdG9nZ2xlRWxlbWVudDogZnVuY3Rpb24odGFyZ2V0cywgc2hvdywgYW5pbWF0ZSQkMSkge1xuICAgICAgICAgICAgICAgIHZhciB0aGlzJDEgPSB0aGlzO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlJDEoZnVuY3Rpb24gKHJlc29sdmUpIHtcblxuICAgICAgICAgICAgICAgICAgICB0YXJnZXRzID0gdG9Ob2Rlcyh0YXJnZXRzKTtcblxuICAgICAgICAgICAgICAgICAgICB2YXIgYWxsID0gZnVuY3Rpb24gKHRhcmdldHMpIHsgcmV0dXJuIFByb21pc2UkMS5hbGwodGFyZ2V0cy5tYXAoZnVuY3Rpb24gKGVsKSB7IHJldHVybiB0aGlzJDEuX3RvZ2dsZUVsZW1lbnQoZWwsIHNob3csIGFuaW1hdGUkJDEpOyB9KSk7IH07XG4gICAgICAgICAgICAgICAgICAgIHZhciB0b2dnbGVkID0gdGFyZ2V0cy5maWx0ZXIoZnVuY3Rpb24gKGVsKSB7IHJldHVybiB0aGlzJDEuaXNUb2dnbGVkKGVsKTsgfSk7XG4gICAgICAgICAgICAgICAgICAgIHZhciB1bnRvZ2dsZWQgPSB0YXJnZXRzLmZpbHRlcihmdW5jdGlvbiAoZWwpIHsgcmV0dXJuICFpbmNsdWRlcyh0b2dnbGVkLCBlbCk7IH0pO1xuXG4gICAgICAgICAgICAgICAgICAgIHZhciBwO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmICghdGhpcyQxLnF1ZXVlZCB8fCAhaXNVbmRlZmluZWQoYW5pbWF0ZSQkMSkgfHwgIWlzVW5kZWZpbmVkKHNob3cpIHx8ICF0aGlzJDEuaGFzQW5pbWF0aW9uIHx8IHRhcmdldHMubGVuZ3RoIDwgMikge1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBwID0gYWxsKHVudG9nZ2xlZC5jb25jYXQodG9nZ2xlZCkpO1xuXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBib2R5ID0gZG9jdW1lbnQuYm9keTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzY3JvbGwgPSBib2R5LnNjcm9sbFRvcDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlbCA9IHRvZ2dsZWRbMF07XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgaW5Qcm9ncmVzcyA9IEFuaW1hdGlvbi5pblByb2dyZXNzKGVsKSAmJiBoYXNDbGFzcyhlbCwgJ3VrLWFuaW1hdGlvbi1sZWF2ZScpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IFRyYW5zaXRpb24uaW5Qcm9ncmVzcyhlbCkgJiYgZWwuc3R5bGUuaGVpZ2h0ID09PSAnMHB4JztcblxuICAgICAgICAgICAgICAgICAgICAgICAgcCA9IGFsbCh0b2dnbGVkKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFpblByb2dyZXNzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcCA9IHAudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwID0gYWxsKHVudG9nZ2xlZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvZHkuc2Nyb2xsVG9wID0gc2Nyb2xsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgcC50aGVuKHJlc29sdmUsIG5vb3ApO1xuXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICB0b2dnbGVOb3c6IGZ1bmN0aW9uKHRhcmdldHMsIHNob3cpIHtcbiAgICAgICAgICAgICAgICB2YXIgdGhpcyQxID0gdGhpcztcblxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSQxKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJldHVybiBQcm9taXNlJDEuYWxsKHRvTm9kZXModGFyZ2V0cykubWFwKGZ1bmN0aW9uIChlbCkgeyByZXR1cm4gdGhpcyQxLl90b2dnbGVFbGVtZW50KGVsLCBzaG93LCBmYWxzZSk7IH0pKS50aGVuKHJlc29sdmUsIG5vb3ApOyB9KTtcbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIGlzVG9nZ2xlZDogZnVuY3Rpb24oZWwpIHtcbiAgICAgICAgICAgICAgICB2YXIgbm9kZXMgPSB0b05vZGVzKGVsIHx8IHRoaXMuJGVsKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jbHNcbiAgICAgICAgICAgICAgICAgICAgPyBoYXNDbGFzcyhub2RlcywgdGhpcy5jbHMuc3BsaXQoJyAnKVswXSlcbiAgICAgICAgICAgICAgICAgICAgOiAhaGFzQXR0cihub2RlcywgJ2hpZGRlbicpO1xuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgdXBkYXRlQXJpYTogZnVuY3Rpb24oZWwpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5jbHMgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgIGF0dHIoZWwsICdhcmlhLWhpZGRlbicsICF0aGlzLmlzVG9nZ2xlZChlbCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIF90b2dnbGVFbGVtZW50OiBmdW5jdGlvbihlbCwgc2hvdywgYW5pbWF0ZSQkMSkge1xuICAgICAgICAgICAgICAgIHZhciB0aGlzJDEgPSB0aGlzO1xuXG5cbiAgICAgICAgICAgICAgICBzaG93ID0gaXNCb29sZWFuKHNob3cpXG4gICAgICAgICAgICAgICAgICAgID8gc2hvd1xuICAgICAgICAgICAgICAgICAgICA6IEFuaW1hdGlvbi5pblByb2dyZXNzKGVsKVxuICAgICAgICAgICAgICAgICAgICAgICAgPyBoYXNDbGFzcyhlbCwgJ3VrLWFuaW1hdGlvbi1sZWF2ZScpXG4gICAgICAgICAgICAgICAgICAgICAgICA6IFRyYW5zaXRpb24uaW5Qcm9ncmVzcyhlbClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGVsLnN0eWxlLmhlaWdodCA9PT0gJzBweCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICF0aGlzLmlzVG9nZ2xlZChlbCk7XG5cbiAgICAgICAgICAgICAgICBpZiAoIXRyaWdnZXIoZWwsIChcImJlZm9yZVwiICsgKHNob3cgPyAnc2hvdycgOiAnaGlkZScpKSwgW3RoaXNdKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZSQxLnJlamVjdCgpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHZhciBwcm9taXNlID0gKGFuaW1hdGUkJDEgPT09IGZhbHNlIHx8ICF0aGlzLmhhc0FuaW1hdGlvblxuICAgICAgICAgICAgICAgICAgICA/IHRoaXMuX3RvZ2dsZUltbWVkaWF0ZVxuICAgICAgICAgICAgICAgICAgICA6IHRoaXMuaGFzVHJhbnNpdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgPyB0aGlzLl90b2dnbGVIZWlnaHRcbiAgICAgICAgICAgICAgICAgICAgICAgIDogdGhpcy5fdG9nZ2xlQW5pbWF0aW9uXG4gICAgICAgICAgICAgICAgKShlbCwgc2hvdyk7XG5cbiAgICAgICAgICAgICAgICB0cmlnZ2VyKGVsLCBzaG93ID8gJ3Nob3cnIDogJ2hpZGUnLCBbdGhpc10pO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIHByb21pc2UudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIHRyaWdnZXIoZWwsIHNob3cgPyAnc2hvd24nIDogJ2hpZGRlbicsIFt0aGlzJDFdKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcyQxLiR1cGRhdGUoZWwpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgX3RvZ2dsZTogZnVuY3Rpb24oZWwsIHRvZ2dsZWQpIHtcblxuICAgICAgICAgICAgICAgIGlmICghZWwpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHZhciBjaGFuZ2VkO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmNscykge1xuICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkID0gaW5jbHVkZXModGhpcy5jbHMsICcgJykgfHwgQm9vbGVhbih0b2dnbGVkKSAhPT0gaGFzQ2xhc3MoZWwsIHRoaXMuY2xzKTtcbiAgICAgICAgICAgICAgICAgICAgY2hhbmdlZCAmJiB0b2dnbGVDbGFzcyhlbCwgdGhpcy5jbHMsIGluY2x1ZGVzKHRoaXMuY2xzLCAnICcpID8gdW5kZWZpbmVkIDogdG9nZ2xlZCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY2hhbmdlZCA9IEJvb2xlYW4odG9nZ2xlZCkgPT09IGhhc0F0dHIoZWwsICdoaWRkZW4nKTtcbiAgICAgICAgICAgICAgICAgICAgY2hhbmdlZCAmJiBhdHRyKGVsLCAnaGlkZGVuJywgIXRvZ2dsZWQgPyAnJyA6IG51bGwpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICQkKCdbYXV0b2ZvY3VzXScsIGVsKS5zb21lKGZ1bmN0aW9uIChlbCkgeyByZXR1cm4gaXNWaXNpYmxlKGVsKSAmJiAoZWwuZm9jdXMoKSB8fCB0cnVlKTsgfSk7XG5cbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUFyaWEoZWwpO1xuICAgICAgICAgICAgICAgIGNoYW5nZWQgJiYgdGhpcy4kdXBkYXRlKGVsKTtcbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIF90b2dnbGVJbW1lZGlhdGU6IGZ1bmN0aW9uKGVsLCBzaG93KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fdG9nZ2xlKGVsLCBzaG93KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZSQxLnJlc29sdmUoKTtcbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIF90b2dnbGVIZWlnaHQ6IGZ1bmN0aW9uKGVsLCBzaG93KSB7XG4gICAgICAgICAgICAgICAgdmFyIHRoaXMkMSA9IHRoaXM7XG5cblxuICAgICAgICAgICAgICAgIHZhciBpblByb2dyZXNzID0gVHJhbnNpdGlvbi5pblByb2dyZXNzKGVsKTtcbiAgICAgICAgICAgICAgICB2YXIgaW5uZXIgPSBlbC5oYXNDaGlsZE5vZGVzID8gdG9GbG9hdChjc3MoZWwuZmlyc3RFbGVtZW50Q2hpbGQsICdtYXJnaW5Ub3AnKSkgKyB0b0Zsb2F0KGNzcyhlbC5sYXN0RWxlbWVudENoaWxkLCAnbWFyZ2luQm90dG9tJykpIDogMDtcbiAgICAgICAgICAgICAgICB2YXIgY3VycmVudEhlaWdodCA9IGlzVmlzaWJsZShlbCkgPyBoZWlnaHQoZWwpICsgKGluUHJvZ3Jlc3MgPyAwIDogaW5uZXIpIDogMDtcblxuICAgICAgICAgICAgICAgIFRyYW5zaXRpb24uY2FuY2VsKGVsKTtcblxuICAgICAgICAgICAgICAgIGlmICghdGhpcy5pc1RvZ2dsZWQoZWwpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3RvZ2dsZShlbCwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaGVpZ2h0KGVsLCAnJyk7XG5cbiAgICAgICAgICAgICAgICAvLyBVcGRhdGUgY2hpbGQgY29tcG9uZW50cyBmaXJzdFxuICAgICAgICAgICAgICAgIGZhc3Rkb20uZmx1c2goKTtcblxuICAgICAgICAgICAgICAgIHZhciBlbmRIZWlnaHQgPSBoZWlnaHQoZWwpICsgKGluUHJvZ3Jlc3MgPyAwIDogaW5uZXIpO1xuICAgICAgICAgICAgICAgIGhlaWdodChlbCwgY3VycmVudEhlaWdodCk7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gKHNob3dcbiAgICAgICAgICAgICAgICAgICAgPyBUcmFuc2l0aW9uLnN0YXJ0KGVsLCBhc3NpZ24oe30sIHRoaXMuaW5pdFByb3BzLCB7b3ZlcmZsb3c6ICdoaWRkZW4nLCBoZWlnaHQ6IGVuZEhlaWdodH0pLCBNYXRoLnJvdW5kKHRoaXMuZHVyYXRpb24gKiAoMSAtIGN1cnJlbnRIZWlnaHQgLyBlbmRIZWlnaHQpKSwgdGhpcy50cmFuc2l0aW9uKVxuICAgICAgICAgICAgICAgICAgICA6IFRyYW5zaXRpb24uc3RhcnQoZWwsIHRoaXMuaGlkZVByb3BzLCBNYXRoLnJvdW5kKHRoaXMuZHVyYXRpb24gKiAoY3VycmVudEhlaWdodCAvIGVuZEhlaWdodCkpLCB0aGlzLnRyYW5zaXRpb24pLnRoZW4oZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpcyQxLl90b2dnbGUoZWwsIGZhbHNlKTsgfSlcbiAgICAgICAgICAgICAgICApLnRoZW4oZnVuY3Rpb24gKCkgeyByZXR1cm4gY3NzKGVsLCB0aGlzJDEuaW5pdFByb3BzKTsgfSk7XG5cbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIF90b2dnbGVBbmltYXRpb246IGZ1bmN0aW9uKGVsLCBzaG93KSB7XG4gICAgICAgICAgICAgICAgdmFyIHRoaXMkMSA9IHRoaXM7XG5cblxuICAgICAgICAgICAgICAgIEFuaW1hdGlvbi5jYW5jZWwoZWwpO1xuXG4gICAgICAgICAgICAgICAgaWYgKHNob3cpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fdG9nZ2xlKGVsLCB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEFuaW1hdGlvbi5pbihlbCwgdGhpcy5hbmltYXRpb25bMF0sIHRoaXMuZHVyYXRpb24sIHRoaXMub3JpZ2luKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gQW5pbWF0aW9uLm91dChlbCwgdGhpcy5hbmltYXRpb25bMV0gfHwgdGhpcy5hbmltYXRpb25bMF0sIHRoaXMuZHVyYXRpb24sIHRoaXMub3JpZ2luKS50aGVuKGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXMkMS5fdG9nZ2xlKGVsLCBmYWxzZSk7IH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIH1cblxuICAgIH07XG5cbiAgICB2YXIgQWNjb3JkaW9uID0ge1xuXG4gICAgICAgIG1peGluczogW0NsYXNzLCBUb2dnbGFibGVdLFxuXG4gICAgICAgIHByb3BzOiB7XG4gICAgICAgICAgICB0YXJnZXRzOiBTdHJpbmcsXG4gICAgICAgICAgICBhY3RpdmU6IG51bGwsXG4gICAgICAgICAgICBjb2xsYXBzaWJsZTogQm9vbGVhbixcbiAgICAgICAgICAgIG11bHRpcGxlOiBCb29sZWFuLFxuICAgICAgICAgICAgdG9nZ2xlOiBTdHJpbmcsXG4gICAgICAgICAgICBjb250ZW50OiBTdHJpbmcsXG4gICAgICAgICAgICB0cmFuc2l0aW9uOiBTdHJpbmdcbiAgICAgICAgfSxcblxuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICB0YXJnZXRzOiAnPiAqJyxcbiAgICAgICAgICAgIGFjdGl2ZTogZmFsc2UsXG4gICAgICAgICAgICBhbmltYXRpb246IFt0cnVlXSxcbiAgICAgICAgICAgIGNvbGxhcHNpYmxlOiB0cnVlLFxuICAgICAgICAgICAgbXVsdGlwbGU6IGZhbHNlLFxuICAgICAgICAgICAgY2xzT3BlbjogJ3VrLW9wZW4nLFxuICAgICAgICAgICAgdG9nZ2xlOiAnPiAudWstYWNjb3JkaW9uLXRpdGxlJyxcbiAgICAgICAgICAgIGNvbnRlbnQ6ICc+IC51ay1hY2NvcmRpb24tY29udGVudCcsXG4gICAgICAgICAgICB0cmFuc2l0aW9uOiAnZWFzZSdcbiAgICAgICAgfSxcblxuICAgICAgICBjb21wdXRlZDoge1xuXG4gICAgICAgICAgICBpdGVtczogZnVuY3Rpb24ocmVmLCAkZWwpIHtcbiAgICAgICAgICAgICAgICB2YXIgdGFyZ2V0cyA9IHJlZi50YXJnZXRzO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuICQkKHRhcmdldHMsICRlbCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfSxcblxuICAgICAgICBldmVudHM6IFtcblxuICAgICAgICAgICAge1xuXG4gICAgICAgICAgICAgICAgbmFtZTogJ2NsaWNrJyxcblxuICAgICAgICAgICAgICAgIGRlbGVnYXRlOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICgodGhpcy50YXJnZXRzKSArIFwiIFwiICsgKHRoaXMuJHByb3BzLnRvZ2dsZSkpO1xuICAgICAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgICAgICBoYW5kbGVyOiBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50b2dnbGUoaW5kZXgoJCQoKCh0aGlzLnRhcmdldHMpICsgXCIgXCIgKyAodGhpcy4kcHJvcHMudG9nZ2xlKSksIHRoaXMuJGVsKSwgZS5jdXJyZW50KSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgXSxcblxuICAgICAgICBjb25uZWN0ZWQ6IGZ1bmN0aW9uKCkge1xuXG4gICAgICAgICAgICBpZiAodGhpcy5hY3RpdmUgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB2YXIgYWN0aXZlID0gdGhpcy5pdGVtc1tOdW1iZXIodGhpcy5hY3RpdmUpXTtcbiAgICAgICAgICAgIGlmIChhY3RpdmUgJiYgIWhhc0NsYXNzKGFjdGl2ZSwgdGhpcy5jbHNPcGVuKSkge1xuICAgICAgICAgICAgICAgIHRoaXMudG9nZ2xlKGFjdGl2ZSwgZmFsc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuXG4gICAgICAgIHVwZGF0ZTogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICB2YXIgdGhpcyQxID0gdGhpcztcblxuXG4gICAgICAgICAgICB0aGlzLml0ZW1zLmZvckVhY2goZnVuY3Rpb24gKGVsKSB7IHJldHVybiB0aGlzJDEuX3RvZ2dsZUltbWVkaWF0ZSgkKHRoaXMkMS5jb250ZW50LCBlbCksIGhhc0NsYXNzKGVsLCB0aGlzJDEuY2xzT3BlbikpOyB9KTtcblxuICAgICAgICAgICAgdmFyIGFjdGl2ZSA9ICF0aGlzLmNvbGxhcHNpYmxlICYmICFoYXNDbGFzcyh0aGlzLml0ZW1zLCB0aGlzLmNsc09wZW4pICYmIHRoaXMuaXRlbXNbMF07XG4gICAgICAgICAgICBpZiAoYWN0aXZlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy50b2dnbGUoYWN0aXZlLCBmYWxzZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG5cbiAgICAgICAgbWV0aG9kczoge1xuXG4gICAgICAgICAgICB0b2dnbGU6IGZ1bmN0aW9uKGl0ZW0sIGFuaW1hdGUkJDEpIHtcbiAgICAgICAgICAgICAgICB2YXIgdGhpcyQxID0gdGhpcztcblxuXG4gICAgICAgICAgICAgICAgdmFyIGluZGV4JCQxID0gZ2V0SW5kZXgoaXRlbSwgdGhpcy5pdGVtcyk7XG4gICAgICAgICAgICAgICAgdmFyIGFjdGl2ZSA9IGZpbHRlcih0aGlzLml0ZW1zLCAoXCIuXCIgKyAodGhpcy5jbHNPcGVuKSkpO1xuXG4gICAgICAgICAgICAgICAgaXRlbSA9IHRoaXMuaXRlbXNbaW5kZXgkJDFdO1xuXG4gICAgICAgICAgICAgICAgaXRlbSAmJiBbaXRlbV1cbiAgICAgICAgICAgICAgICAgICAgLmNvbmNhdCghdGhpcy5tdWx0aXBsZSAmJiAhaW5jbHVkZXMoYWN0aXZlLCBpdGVtKSAmJiBhY3RpdmUgfHwgW10pXG4gICAgICAgICAgICAgICAgICAgIC5mb3JFYWNoKGZ1bmN0aW9uIChlbCkge1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgaXNJdGVtID0gZWwgPT09IGl0ZW07XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RhdGUgPSBpc0l0ZW0gJiYgIWhhc0NsYXNzKGVsLCB0aGlzJDEuY2xzT3Blbik7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghc3RhdGUgJiYgaXNJdGVtICYmICF0aGlzJDEuY29sbGFwc2libGUgJiYgYWN0aXZlLmxlbmd0aCA8IDIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHRvZ2dsZUNsYXNzKGVsLCB0aGlzJDEuY2xzT3Blbiwgc3RhdGUpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29udGVudCA9IGVsLl93cmFwcGVyID8gZWwuX3dyYXBwZXIuZmlyc3RFbGVtZW50Q2hpbGQgOiAkKHRoaXMkMS5jb250ZW50LCBlbCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZWwuX3dyYXBwZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbC5fd3JhcHBlciA9IHdyYXBBbGwoY29udGVudCwgJzxkaXY+Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cihlbC5fd3JhcHBlciwgJ2hpZGRlbicsIHN0YXRlID8gJycgOiBudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcyQxLl90b2dnbGVJbW1lZGlhdGUoY29udGVudCwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzJDEudG9nZ2xlRWxlbWVudChlbC5fd3JhcHBlciwgc3RhdGUsIGFuaW1hdGUkJDEpLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoYXNDbGFzcyhlbCwgdGhpcyQxLmNsc09wZW4pID09PSBzdGF0ZSkge1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghc3RhdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMkMS5fdG9nZ2xlSW1tZWRpYXRlKGNvbnRlbnQsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsLl93cmFwcGVyID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW53cmFwKGNvbnRlbnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIH1cblxuICAgIH07XG5cbiAgICB2YXIgQWxlcnQgPSB7XG5cbiAgICAgICAgYXR0cnM6IHRydWUsXG5cbiAgICAgICAgbWl4aW5zOiBbQ2xhc3MsIFRvZ2dsYWJsZV0sXG5cbiAgICAgICAgYXJnczogJ2FuaW1hdGlvbicsXG5cbiAgICAgICAgcHJvcHM6IHtcbiAgICAgICAgICAgIGNsb3NlOiBTdHJpbmdcbiAgICAgICAgfSxcblxuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICBhbmltYXRpb246IFt0cnVlXSxcbiAgICAgICAgICAgIHNlbENsb3NlOiAnLnVrLWFsZXJ0LWNsb3NlJyxcbiAgICAgICAgICAgIGR1cmF0aW9uOiAxNTAsXG4gICAgICAgICAgICBoaWRlUHJvcHM6IGFzc2lnbih7b3BhY2l0eTogMH0sIFRvZ2dsYWJsZS5kYXRhLmhpZGVQcm9wcylcbiAgICAgICAgfSxcblxuICAgICAgICBldmVudHM6IFtcblxuICAgICAgICAgICAge1xuXG4gICAgICAgICAgICAgICAgbmFtZTogJ2NsaWNrJyxcblxuICAgICAgICAgICAgICAgIGRlbGVnYXRlOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2VsQ2xvc2U7XG4gICAgICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgICAgIGhhbmRsZXI6IGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNsb3NlKCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgXSxcblxuICAgICAgICBtZXRob2RzOiB7XG5cbiAgICAgICAgICAgIGNsb3NlOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICB2YXIgdGhpcyQxID0gdGhpcztcblxuICAgICAgICAgICAgICAgIHRoaXMudG9nZ2xlRWxlbWVudCh0aGlzLiRlbCkudGhlbihmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzJDEuJGRlc3Ryb3kodHJ1ZSk7IH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIH1cblxuICAgIH07XG5cbiAgICBmdW5jdGlvbiBDb3JlIChVSWtpdCkge1xuXG4gICAgICAgIHJlYWR5KGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgdmFyIHNjcm9sbCA9IDA7XG4gICAgICAgICAgICB2YXIgc3RhcnRlZCA9IDA7XG5cbiAgICAgICAgICAgIG9uKHdpbmRvdywgJ2xvYWQgcmVzaXplJywgZnVuY3Rpb24gKGUpIHsgcmV0dXJuIFVJa2l0LnVwZGF0ZShudWxsLCBlKTsgfSk7XG4gICAgICAgICAgICBvbih3aW5kb3csICdzY3JvbGwnLCBmdW5jdGlvbiAoZSkge1xuICAgICAgICAgICAgICAgIGUuZGlyID0gc2Nyb2xsIDw9IHdpbmRvdy5wYWdlWU9mZnNldCA/ICdkb3duJyA6ICd1cCc7XG4gICAgICAgICAgICAgICAgZS5wYWdlWU9mZnNldCA9IHNjcm9sbCA9IHdpbmRvdy5wYWdlWU9mZnNldDtcbiAgICAgICAgICAgICAgICBVSWtpdC51cGRhdGUobnVsbCwgZSk7XG4gICAgICAgICAgICB9LCB7Y2FwdHVyZTogdHJ1ZSwgcGFzc2l2ZTogZmFsc2V9KTtcblxuICAgICAgICAgICAgb24oZG9jdW1lbnQsICdhbmltYXRpb25zdGFydCcsIGZ1bmN0aW9uIChyZWYpIHtcbiAgICAgICAgICAgICAgICB2YXIgdGFyZ2V0ID0gcmVmLnRhcmdldDtcblxuICAgICAgICAgICAgICAgIGlmICgoY3NzKHRhcmdldCwgJ2FuaW1hdGlvbk5hbWUnKSB8fCAnJykubWF0Y2goL151ay0uKihsZWZ0fHJpZ2h0KS8pKSB7XG5cbiAgICAgICAgICAgICAgICAgICAgc3RhcnRlZCsrO1xuICAgICAgICAgICAgICAgICAgICBjc3MoZG9jdW1lbnQuYm9keSwgJ292ZXJmbG93WCcsICdoaWRkZW4nKTtcbiAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIS0tc3RhcnRlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzcyhkb2N1bWVudC5ib2R5LCAnb3ZlcmZsb3dYJywgJycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9LCB0b01zKGNzcyh0YXJnZXQsICdhbmltYXRpb25EdXJhdGlvbicpKSArIDEwMCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgdHJ1ZSk7XG5cbiAgICAgICAgICAgIGlmICghaGFzVG91Y2gpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZhciBjbHMgPSAndWstaG92ZXInO1xuXG4gICAgICAgICAgICBvbihkb2N1bWVudCwgJ3RhcCcsIGZ1bmN0aW9uIChyZWYpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHRhcmdldCA9IHJlZi50YXJnZXQ7XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQkKChcIi5cIiArIGNscykpLmZvckVhY2goZnVuY3Rpb24gKGVsKSB7IHJldHVybiAhd2l0aGluKHRhcmdldCwgZWwpICYmIHJlbW92ZUNsYXNzKGVsLCBjbHMpOyB9XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShVSWtpdCwgJ2hvdmVyU2VsZWN0b3InLCB7XG5cbiAgICAgICAgICAgICAgICBzZXQ6IGZ1bmN0aW9uKHNlbGVjdG9yKSB7XG4gICAgICAgICAgICAgICAgICAgIG9uKGRvY3VtZW50LCAndGFwJywgc2VsZWN0b3IsIGZ1bmN0aW9uIChyZWYpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjdXJyZW50ID0gcmVmLmN1cnJlbnQ7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBhZGRDbGFzcyhjdXJyZW50LCBjbHMpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBVSWtpdC5ob3ZlclNlbGVjdG9yID0gJy51ay1hbmltYXRpb24tdG9nZ2xlLCAudWstdHJhbnNpdGlvbi10b2dnbGUsIFt1ay1ob3Zlcl0nO1xuXG4gICAgICAgIH0pO1xuXG4gICAgfVxuXG4gICAgdmFyIFZpZGVvID0ge1xuXG4gICAgICAgIGFyZ3M6ICdhdXRvcGxheScsXG5cbiAgICAgICAgcHJvcHM6IHtcbiAgICAgICAgICAgIGF1dG9tdXRlOiBCb29sZWFuLFxuICAgICAgICAgICAgYXV0b3BsYXk6IEJvb2xlYW4sXG4gICAgICAgIH0sXG5cbiAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgYXV0b211dGU6IGZhbHNlLFxuICAgICAgICAgICAgYXV0b3BsYXk6IHRydWVcbiAgICAgICAgfSxcblxuICAgICAgICBjb21wdXRlZDoge1xuXG4gICAgICAgICAgICBpblZpZXc6IGZ1bmN0aW9uKHJlZikge1xuICAgICAgICAgICAgICAgIHZhciBhdXRvcGxheSA9IHJlZi5hdXRvcGxheTtcblxuICAgICAgICAgICAgICAgIHJldHVybiBhdXRvcGxheSA9PT0gJ2ludmlldyc7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfSxcblxuICAgICAgICBjb25uZWN0ZWQ6IGZ1bmN0aW9uKCkge1xuXG4gICAgICAgICAgICBpZiAodGhpcy5pblZpZXcgJiYgIWhhc0F0dHIodGhpcy4kZWwsICdwcmVsb2FkJykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLiRlbC5wcmVsb2FkID0gJ25vbmUnO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIH0sXG5cbiAgICAgICAgcmVhZHk6IGZ1bmN0aW9uKCkge1xuXG4gICAgICAgICAgICB0aGlzLnBsYXllciA9IG5ldyBQbGF5ZXIodGhpcy4kZWwpO1xuXG4gICAgICAgICAgICBpZiAodGhpcy5hdXRvbXV0ZSkge1xuICAgICAgICAgICAgICAgIHRoaXMucGxheWVyLm11dGUoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9LFxuXG4gICAgICAgIHVwZGF0ZTogW1xuXG4gICAgICAgICAgICB7XG5cbiAgICAgICAgICAgICAgICByZWFkOiBmdW5jdGlvbihfLCByZWYpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHR5cGUgPSByZWYudHlwZTtcblxuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAhdGhpcy5wbGF5ZXIgfHwgKHR5cGUgPT09ICdzY3JvbGwnIHx8IHR5cGUgPT09ICdyZXNpemUnKSAmJiAhdGhpcy5pblZpZXdcbiAgICAgICAgICAgICAgICAgICAgICAgID8gZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpc2libGU6IGlzVmlzaWJsZSh0aGlzLiRlbCkgJiYgY3NzKHRoaXMuJGVsLCAndmlzaWJpbGl0eScpICE9PSAnaGlkZGVuJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpblZpZXc6IHRoaXMuaW5WaWV3ICYmIGlzSW5WaWV3KHRoaXMuJGVsKVxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICAgICAgd3JpdGU6IGZ1bmN0aW9uKHJlZikge1xuICAgICAgICAgICAgICAgICAgICB2YXIgdmlzaWJsZSA9IHJlZi52aXNpYmxlO1xuICAgICAgICAgICAgICAgICAgICB2YXIgaW5WaWV3ID0gcmVmLmluVmlldztcblxuXG4gICAgICAgICAgICAgICAgICAgIGlmICghdmlzaWJsZSB8fCB0aGlzLmluVmlldyAmJiAhaW5WaWV3KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBsYXllci5wYXVzZSgpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuYXV0b3BsYXkgPT09IHRydWUgfHwgdGhpcy5pblZpZXcgJiYgaW5WaWV3KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBsYXllci5wbGF5KCk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgICAgICBldmVudHM6IFsnbG9hZCcsICdyZXNpemUnLCAnc2Nyb2xsJ11cblxuICAgICAgICAgICAgfVxuXG4gICAgICAgIF1cblxuICAgIH07XG5cbiAgICB2YXIgQ292ZXIgPSB7XG5cbiAgICAgICAgbWl4aW5zOiBbQ2xhc3MsIFZpZGVvXSxcblxuICAgICAgICBwcm9wczoge1xuICAgICAgICAgICAgd2lkdGg6IE51bWJlcixcbiAgICAgICAgICAgIGhlaWdodDogTnVtYmVyXG4gICAgICAgIH0sXG5cbiAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgYXV0b211dGU6IHRydWVcbiAgICAgICAgfSxcblxuICAgICAgICB1cGRhdGU6IHtcblxuICAgICAgICAgICAgd3JpdGU6IGZ1bmN0aW9uKCkge1xuXG4gICAgICAgICAgICAgICAgdmFyIGVsID0gdGhpcy4kZWw7XG5cbiAgICAgICAgICAgICAgICBpZiAoIWlzVmlzaWJsZShlbCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHZhciByZWYgPSBlbC5wYXJlbnROb2RlO1xuICAgICAgICAgICAgICAgIHZhciBoZWlnaHQkJDEgPSByZWYub2Zmc2V0SGVpZ2h0O1xuICAgICAgICAgICAgICAgIHZhciB3aWR0aCQkMSA9IHJlZi5vZmZzZXRXaWR0aDtcblxuICAgICAgICAgICAgICAgIGNzcyhcbiAgICAgICAgICAgICAgICAgICAgY3NzKGVsLCB7d2lkdGg6ICcnLCBoZWlnaHQ6ICcnfSksXG4gICAgICAgICAgICAgICAgICAgIERpbWVuc2lvbnMuY292ZXIoXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IHRoaXMud2lkdGggfHwgZWwuY2xpZW50V2lkdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiB0aGlzLmhlaWdodCB8fCBlbC5jbGllbnRIZWlnaHRcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IHdpZHRoJCQxICsgKHdpZHRoJCQxICUgMiA/IDEgOiAwKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IGhlaWdodCQkMSArIChoZWlnaHQkJDEgJSAyID8gMSA6IDApXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICBldmVudHM6IFsnbG9hZCcsICdyZXNpemUnXVxuXG4gICAgICAgIH0sXG5cbiAgICAgICAgZXZlbnRzOiB7XG5cbiAgICAgICAgICAgIGxvYWRlZG1ldGFkYXRhOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICB0aGlzLiRlbWl0KCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfVxuXG4gICAgfTtcblxuICAgIHZhciBQb3NpdGlvbiA9IHtcblxuICAgICAgICBwcm9wczoge1xuICAgICAgICAgICAgcG9zOiBTdHJpbmcsXG4gICAgICAgICAgICBvZmZzZXQ6IG51bGwsXG4gICAgICAgICAgICBmbGlwOiBCb29sZWFuLFxuICAgICAgICAgICAgY2xzUG9zOiBTdHJpbmdcbiAgICAgICAgfSxcblxuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICBwb3M6IChcImJvdHRvbS1cIiArICghaXNSdGwgPyAnbGVmdCcgOiAncmlnaHQnKSksXG4gICAgICAgICAgICBmbGlwOiB0cnVlLFxuICAgICAgICAgICAgb2Zmc2V0OiBmYWxzZSxcbiAgICAgICAgICAgIGNsc1BvczogJydcbiAgICAgICAgfSxcblxuICAgICAgICBjb21wdXRlZDoge1xuXG4gICAgICAgICAgICBwb3M6IGZ1bmN0aW9uKHJlZikge1xuICAgICAgICAgICAgICAgIHZhciBwb3MgPSByZWYucG9zO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIChwb3MgKyAoIWluY2x1ZGVzKHBvcywgJy0nKSA/ICctY2VudGVyJyA6ICcnKSkuc3BsaXQoJy0nKTtcbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIGRpcjogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucG9zWzBdO1xuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgYWxpZ246IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnBvc1sxXTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9LFxuXG4gICAgICAgIG1ldGhvZHM6IHtcblxuICAgICAgICAgICAgcG9zaXRpb25BdDogZnVuY3Rpb24oZWxlbWVudCwgdGFyZ2V0LCBib3VuZGFyeSkge1xuXG4gICAgICAgICAgICAgICAgcmVtb3ZlQ2xhc3NlcyhlbGVtZW50LCAoKHRoaXMuY2xzUG9zKSArIFwiLSh0b3B8Ym90dG9tfGxlZnR8cmlnaHQpKC1bYS16XSspP1wiKSk7XG4gICAgICAgICAgICAgICAgY3NzKGVsZW1lbnQsIHt0b3A6ICcnLCBsZWZ0OiAnJ30pO1xuXG4gICAgICAgICAgICAgICAgdmFyIG5vZGU7XG4gICAgICAgICAgICAgICAgdmFyIHJlZiA9IHRoaXM7XG4gICAgICAgICAgICAgICAgdmFyIG9mZnNldCQkMSA9IHJlZi5vZmZzZXQ7XG5cbiAgICAgICAgICAgICAgICBvZmZzZXQkJDEgPSBpc051bWVyaWMob2Zmc2V0JCQxKVxuICAgICAgICAgICAgICAgICAgICA/IG9mZnNldCQkMVxuICAgICAgICAgICAgICAgICAgICA6IChub2RlID0gJChvZmZzZXQkJDEpKVxuICAgICAgICAgICAgICAgICAgICAgICAgPyBvZmZzZXQobm9kZSlbYXhpcyA9PT0gJ3gnID8gJ2xlZnQnIDogJ3RvcCddIC0gb2Zmc2V0KHRhcmdldClbYXhpcyA9PT0gJ3gnID8gJ3JpZ2h0JyA6ICdib3R0b20nXVxuICAgICAgICAgICAgICAgICAgICAgICAgOiAwO1xuXG4gICAgICAgICAgICAgICAgdmFyIGF4aXMgPSB0aGlzLmdldEF4aXMoKTtcbiAgICAgICAgICAgICAgICB2YXIgcmVmJDEgPSBwb3NpdGlvbkF0KFxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50LFxuICAgICAgICAgICAgICAgICAgICB0YXJnZXQsXG4gICAgICAgICAgICAgICAgICAgIGF4aXMgPT09ICd4JyA/ICgoZmxpcFBvc2l0aW9uKHRoaXMuZGlyKSkgKyBcIiBcIiArICh0aGlzLmFsaWduKSkgOiAoKHRoaXMuYWxpZ24pICsgXCIgXCIgKyAoZmxpcFBvc2l0aW9uKHRoaXMuZGlyKSkpLFxuICAgICAgICAgICAgICAgICAgICBheGlzID09PSAneCcgPyAoKHRoaXMuZGlyKSArIFwiIFwiICsgKHRoaXMuYWxpZ24pKSA6ICgodGhpcy5hbGlnbikgKyBcIiBcIiArICh0aGlzLmRpcikpLFxuICAgICAgICAgICAgICAgICAgICBheGlzID09PSAneCcgPyAoXCJcIiArICh0aGlzLmRpciA9PT0gJ2xlZnQnID8gLW9mZnNldCQkMSA6IG9mZnNldCQkMSkpIDogKFwiIFwiICsgKHRoaXMuZGlyID09PSAndG9wJyA/IC1vZmZzZXQkJDEgOiBvZmZzZXQkJDEpKSxcbiAgICAgICAgICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mbGlwLFxuICAgICAgICAgICAgICAgICAgICBib3VuZGFyeVxuICAgICAgICAgICAgICAgICkudGFyZ2V0O1xuICAgICAgICAgICAgICAgIHZhciB4ID0gcmVmJDEueDtcbiAgICAgICAgICAgICAgICB2YXIgeSA9IHJlZiQxLnk7XG5cbiAgICAgICAgICAgICAgICB0aGlzLmRpciA9IGF4aXMgPT09ICd4JyA/IHggOiB5O1xuICAgICAgICAgICAgICAgIHRoaXMuYWxpZ24gPSBheGlzID09PSAneCcgPyB5IDogeDtcblxuICAgICAgICAgICAgICAgIHRvZ2dsZUNsYXNzKGVsZW1lbnQsICgodGhpcy5jbHNQb3MpICsgXCItXCIgKyAodGhpcy5kaXIpICsgXCItXCIgKyAodGhpcy5hbGlnbikpLCB0aGlzLm9mZnNldCA9PT0gZmFsc2UpO1xuXG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICBnZXRBeGlzOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5kaXIgPT09ICd0b3AnIHx8IHRoaXMuZGlyID09PSAnYm90dG9tJyA/ICd5JyA6ICd4JztcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9XG5cbiAgICB9O1xuXG4gICAgdmFyIGFjdGl2ZTtcblxuICAgIHZhciBEcm9wID0ge1xuXG4gICAgICAgIG1peGluczogW1Bvc2l0aW9uLCBUb2dnbGFibGVdLFxuXG4gICAgICAgIGFyZ3M6ICdwb3MnLFxuXG4gICAgICAgIHByb3BzOiB7XG4gICAgICAgICAgICBtb2RlOiAnbGlzdCcsXG4gICAgICAgICAgICB0b2dnbGU6IEJvb2xlYW4sXG4gICAgICAgICAgICBib3VuZGFyeTogQm9vbGVhbixcbiAgICAgICAgICAgIGJvdW5kYXJ5QWxpZ246IEJvb2xlYW4sXG4gICAgICAgICAgICBkZWxheVNob3c6IE51bWJlcixcbiAgICAgICAgICAgIGRlbGF5SGlkZTogTnVtYmVyLFxuICAgICAgICAgICAgY2xzRHJvcDogU3RyaW5nXG4gICAgICAgIH0sXG5cbiAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgbW9kZTogWydjbGljaycsICdob3ZlciddLFxuICAgICAgICAgICAgdG9nZ2xlOiAnLSAqJyxcbiAgICAgICAgICAgIGJvdW5kYXJ5OiB3aW5kb3csXG4gICAgICAgICAgICBib3VuZGFyeUFsaWduOiBmYWxzZSxcbiAgICAgICAgICAgIGRlbGF5U2hvdzogMCxcbiAgICAgICAgICAgIGRlbGF5SGlkZTogODAwLFxuICAgICAgICAgICAgY2xzRHJvcDogZmFsc2UsXG4gICAgICAgICAgICBob3ZlcklkbGU6IDIwMCxcbiAgICAgICAgICAgIGFuaW1hdGlvbjogWyd1ay1hbmltYXRpb24tZmFkZSddLFxuICAgICAgICAgICAgY2xzOiAndWstb3BlbidcbiAgICAgICAgfSxcblxuICAgICAgICBjb21wdXRlZDoge1xuXG4gICAgICAgICAgICBib3VuZGFyeTogZnVuY3Rpb24ocmVmLCAkZWwpIHtcbiAgICAgICAgICAgICAgICB2YXIgYm91bmRhcnkgPSByZWYuYm91bmRhcnk7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gcXVlcnkoYm91bmRhcnksICRlbCk7XG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICBjbHNEcm9wOiBmdW5jdGlvbihyZWYpIHtcbiAgICAgICAgICAgICAgICB2YXIgY2xzRHJvcCA9IHJlZi5jbHNEcm9wO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIGNsc0Ryb3AgfHwgKFwidWstXCIgKyAodGhpcy4kb3B0aW9ucy5uYW1lKSk7XG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICBjbHNQb3M6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNsc0Ryb3A7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfSxcblxuICAgICAgICBpbml0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHRoaXMudHJhY2tlciA9IG5ldyBNb3VzZVRyYWNrZXIoKTtcbiAgICAgICAgfSxcblxuICAgICAgICBjb25uZWN0ZWQ6IGZ1bmN0aW9uKCkge1xuXG4gICAgICAgICAgICBhZGRDbGFzcyh0aGlzLiRlbCwgdGhpcy5jbHNEcm9wKTtcblxuICAgICAgICAgICAgdmFyIHJlZiA9IHRoaXMuJHByb3BzO1xuICAgICAgICAgICAgdmFyIHRvZ2dsZSA9IHJlZi50b2dnbGU7XG4gICAgICAgICAgICB0aGlzLnRvZ2dsZSA9IHRvZ2dsZSAmJiB0aGlzLiRjcmVhdGUoJ3RvZ2dsZScsIHF1ZXJ5KHRvZ2dsZSwgdGhpcy4kZWwpLCB7XG4gICAgICAgICAgICAgICAgdGFyZ2V0OiB0aGlzLiRlbCxcbiAgICAgICAgICAgICAgICBtb2RlOiB0aGlzLm1vZGVcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUFyaWEodGhpcy4kZWwpO1xuXG4gICAgICAgIH0sXG5cbiAgICAgICAgZXZlbnRzOiBbXG5cblxuICAgICAgICAgICAge1xuXG4gICAgICAgICAgICAgICAgbmFtZTogJ2NsaWNrJyxcblxuICAgICAgICAgICAgICAgIGRlbGVnYXRlOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChcIi5cIiArICh0aGlzLmNsc0Ryb3ApICsgXCItY2xvc2VcIik7XG4gICAgICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgICAgIGhhbmRsZXI6IGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmhpZGUoZmFsc2UpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAge1xuXG4gICAgICAgICAgICAgICAgbmFtZTogJ2NsaWNrJyxcblxuICAgICAgICAgICAgICAgIGRlbGVnYXRlOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdhW2hyZWZePVwiI1wiXSc7XG4gICAgICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgICAgIGhhbmRsZXI6IGZ1bmN0aW9uKGUpIHtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoZS5kZWZhdWx0UHJldmVudGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB2YXIgaWQgPSBlLnRhcmdldC5oYXNoO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmICghaWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGlmICghaWQgfHwgIXdpdGhpbihpZCwgdGhpcy4kZWwpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmhpZGUoZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICB7XG5cbiAgICAgICAgICAgICAgICBuYW1lOiAnYmVmb3Jlc2Nyb2xsJyxcblxuICAgICAgICAgICAgICAgIGhhbmRsZXI6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmhpZGUoZmFsc2UpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAge1xuXG4gICAgICAgICAgICAgICAgbmFtZTogJ3RvZ2dsZScsXG5cbiAgICAgICAgICAgICAgICBzZWxmOiB0cnVlLFxuXG4gICAgICAgICAgICAgICAgaGFuZGxlcjogZnVuY3Rpb24oZSwgdG9nZ2xlKSB7XG5cbiAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzVG9nZ2xlZCgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmhpZGUoZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG93KHRvZ2dsZSwgZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICB7XG5cbiAgICAgICAgICAgICAgICBuYW1lOiBwb2ludGVyRW50ZXIsXG5cbiAgICAgICAgICAgICAgICBmaWx0ZXI6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW5jbHVkZXModGhpcy5tb2RlLCAnaG92ZXInKTtcbiAgICAgICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICAgICAgaGFuZGxlcjogZnVuY3Rpb24oZSkge1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChpc1RvdWNoKGUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBpZiAoYWN0aXZlXG4gICAgICAgICAgICAgICAgICAgICAgICAmJiBhY3RpdmUgIT09IHRoaXNcbiAgICAgICAgICAgICAgICAgICAgICAgICYmIGFjdGl2ZS50b2dnbGVcbiAgICAgICAgICAgICAgICAgICAgICAgICYmIGluY2x1ZGVzKGFjdGl2ZS50b2dnbGUubW9kZSwgJ2hvdmVyJylcbiAgICAgICAgICAgICAgICAgICAgICAgICYmICF3aXRoaW4oZS50YXJnZXQsIGFjdGl2ZS50b2dnbGUuJGVsKVxuICAgICAgICAgICAgICAgICAgICAgICAgJiYgIXBvaW50SW5SZWN0KHt4OiBlLnBhZ2VYLCB5OiBlLnBhZ2VZfSwgb2Zmc2V0KGFjdGl2ZS4kZWwpKVxuICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFjdGl2ZS5oaWRlKGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG93KHRoaXMudG9nZ2xlKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIHtcblxuICAgICAgICAgICAgICAgIG5hbWU6ICd0b2dnbGVzaG93JyxcblxuICAgICAgICAgICAgICAgIGhhbmRsZXI6IGZ1bmN0aW9uKGUsIHRvZ2dsZSkge1xuXG4gICAgICAgICAgICAgICAgICAgIGlmICh0b2dnbGUgJiYgIWluY2x1ZGVzKHRvZ2dsZS50YXJnZXQsIHRoaXMuJGVsKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3codG9nZ2xlIHx8IHRoaXMudG9nZ2xlKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIHtcblxuICAgICAgICAgICAgICAgIG5hbWU6IChcInRvZ2dsZWhpZGUgXCIgKyBwb2ludGVyTGVhdmUpLFxuXG4gICAgICAgICAgICAgICAgaGFuZGxlcjogZnVuY3Rpb24oZSwgdG9nZ2xlKSB7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzVG91Y2goZSkgfHwgdG9nZ2xlICYmICFpbmNsdWRlcyh0b2dnbGUudGFyZ2V0LCB0aGlzLiRlbCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy50b2dnbGUgJiYgaW5jbHVkZXModGhpcy50b2dnbGUubW9kZSwgJ2hvdmVyJykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaGlkZSgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICB7XG5cbiAgICAgICAgICAgICAgICBuYW1lOiAnYmVmb3Jlc2hvdycsXG5cbiAgICAgICAgICAgICAgICBzZWxmOiB0cnVlLFxuXG4gICAgICAgICAgICAgICAgaGFuZGxlcjogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2xlYXJUaW1lcnMoKTtcbiAgICAgICAgICAgICAgICAgICAgQW5pbWF0aW9uLmNhbmNlbCh0aGlzLiRlbCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucG9zaXRpb24oKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIHtcblxuICAgICAgICAgICAgICAgIG5hbWU6ICdzaG93JyxcblxuICAgICAgICAgICAgICAgIHNlbGY6IHRydWUsXG5cbiAgICAgICAgICAgICAgICBoYW5kbGVyOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50cmFja2VyLmluaXQoKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMudG9nZ2xlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhZGRDbGFzcyh0aGlzLnRvZ2dsZS4kZWwsIHRoaXMuY2xzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGF0dHIodGhpcy50b2dnbGUuJGVsLCAnYXJpYS1leHBhbmRlZCcsICd0cnVlJyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmVnaXN0ZXJFdmVudCgpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAge1xuXG4gICAgICAgICAgICAgICAgbmFtZTogJ2JlZm9yZWhpZGUnLFxuXG4gICAgICAgICAgICAgICAgc2VsZjogdHJ1ZSxcblxuICAgICAgICAgICAgICAgIGhhbmRsZXI6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNsZWFyVGltZXJzKCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICB7XG5cbiAgICAgICAgICAgICAgICBuYW1lOiAnaGlkZScsXG5cbiAgICAgICAgICAgICAgICBoYW5kbGVyOiBmdW5jdGlvbihyZWYpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHRhcmdldCA9IHJlZi50YXJnZXQ7XG5cblxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy4kZWwgIT09IHRhcmdldCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYWN0aXZlID0gYWN0aXZlID09PSBudWxsICYmIHdpdGhpbih0YXJnZXQsIHRoaXMuJGVsKSAmJiB0aGlzLmlzVG9nZ2xlZCgpID8gdGhpcyA6IGFjdGl2ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGFjdGl2ZSA9IHRoaXMuaXNBY3RpdmUoKSA/IG51bGwgOiBhY3RpdmU7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMudG9nZ2xlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVDbGFzcyh0aGlzLnRvZ2dsZS4kZWwsIHRoaXMuY2xzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGF0dHIodGhpcy50b2dnbGUuJGVsLCAnYXJpYS1leHBhbmRlZCcsICdmYWxzZScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50b2dnbGUuJGVsLmJsdXIoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICQkKCdhLCBidXR0b24nLCB0aGlzLnRvZ2dsZS4kZWwpLmZvckVhY2goZnVuY3Rpb24gKGVsKSB7IHJldHVybiBlbC5ibHVyKCk7IH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy50cmFja2VyLmNhbmNlbCgpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgfVxuXG4gICAgICAgIF0sXG5cbiAgICAgICAgdXBkYXRlOiB7XG5cbiAgICAgICAgICAgIHdyaXRlOiBmdW5jdGlvbigpIHtcblxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzVG9nZ2xlZCgpICYmICFBbmltYXRpb24uaW5Qcm9ncmVzcyh0aGlzLiRlbCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wb3NpdGlvbigpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgZXZlbnRzOiBbJ3Jlc2l6ZSddXG5cbiAgICAgICAgfSxcblxuICAgICAgICBtZXRob2RzOiB7XG5cbiAgICAgICAgICAgIHNob3c6IGZ1bmN0aW9uKHRvZ2dsZSwgZGVsYXkpIHtcbiAgICAgICAgICAgICAgICB2YXIgdGhpcyQxID0gdGhpcztcbiAgICAgICAgICAgICAgICBpZiAoIGRlbGF5ID09PSB2b2lkIDAgKSBkZWxheSA9IHRydWU7XG5cblxuICAgICAgICAgICAgICAgIHZhciBzaG93ID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gIXRoaXMkMS5pc1RvZ2dsZWQoKSAmJiB0aGlzJDEudG9nZ2xlRWxlbWVudCh0aGlzJDEuJGVsLCB0cnVlKTsgfTtcbiAgICAgICAgICAgICAgICB2YXIgdHJ5U2hvdyA9IGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgICAgICAgICB0aGlzJDEudG9nZ2xlID0gdG9nZ2xlIHx8IHRoaXMkMS50b2dnbGU7XG5cbiAgICAgICAgICAgICAgICAgICAgdGhpcyQxLmNsZWFyVGltZXJzKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMkMS5pc0FjdGl2ZSgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZGVsYXkgJiYgYWN0aXZlICYmIGFjdGl2ZSAhPT0gdGhpcyQxICYmIGFjdGl2ZS5pc0RlbGF5aW5nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzJDEuc2hvd1RpbWVyID0gc2V0VGltZW91dCh0aGlzJDEuc2hvdywgMTApO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMkMS5pc1BhcmVudE9mKGFjdGl2ZSkpIHtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFjdGl2ZS5oaWRlVGltZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3RpdmUuaGlkZShmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGFjdGl2ZSAmJiAhdGhpcyQxLmlzQ2hpbGRPZihhY3RpdmUpICYmICF0aGlzJDEuaXNQYXJlbnRPZihhY3RpdmUpKSB7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwcmV2O1xuICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGFjdGl2ZSAmJiBhY3RpdmUgIT09IHByZXYgJiYgIXRoaXMkMS5pc0NoaWxkT2YoYWN0aXZlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXYgPSBhY3RpdmU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aXZlLmhpZGUoZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBpZiAoZGVsYXkgJiYgdGhpcyQxLmRlbGF5U2hvdykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcyQxLnNob3dUaW1lciA9IHNldFRpbWVvdXQoc2hvdywgdGhpcyQxLmRlbGF5U2hvdyk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzaG93KCk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBhY3RpdmUgPSB0aGlzJDE7XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIGlmICh0b2dnbGUgJiYgdGhpcy50b2dnbGUgJiYgdG9nZ2xlLiRlbCAhPT0gdGhpcy50b2dnbGUuJGVsKSB7XG5cbiAgICAgICAgICAgICAgICAgICAgb25jZSh0aGlzLiRlbCwgJ2hpZGUnLCB0cnlTaG93KTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5oaWRlKGZhbHNlKTtcblxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRyeVNob3coKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICBoaWRlOiBmdW5jdGlvbihkZWxheSkge1xuICAgICAgICAgICAgICAgIHZhciB0aGlzJDEgPSB0aGlzO1xuICAgICAgICAgICAgICAgIGlmICggZGVsYXkgPT09IHZvaWQgMCApIGRlbGF5ID0gdHJ1ZTtcblxuXG4gICAgICAgICAgICAgICAgdmFyIGhpZGUgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzJDEudG9nZ2xlTm93KHRoaXMkMS4kZWwsIGZhbHNlKTsgfTtcblxuICAgICAgICAgICAgICAgIHRoaXMuY2xlYXJUaW1lcnMoKTtcblxuICAgICAgICAgICAgICAgIHRoaXMuaXNEZWxheWluZyA9IHRoaXMudHJhY2tlci5tb3Zlc1RvKHRoaXMuJGVsKTtcblxuICAgICAgICAgICAgICAgIGlmIChkZWxheSAmJiB0aGlzLmlzRGVsYXlpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5oaWRlVGltZXIgPSBzZXRUaW1lb3V0KHRoaXMuaGlkZSwgdGhpcy5ob3ZlcklkbGUpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZGVsYXkgJiYgdGhpcy5kZWxheUhpZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5oaWRlVGltZXIgPSBzZXRUaW1lb3V0KGhpZGUsIHRoaXMuZGVsYXlIaWRlKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBoaWRlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgY2xlYXJUaW1lcnM6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLnNob3dUaW1lcik7XG4gICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuaGlkZVRpbWVyKTtcbiAgICAgICAgICAgICAgICB0aGlzLnNob3dUaW1lciA9IG51bGw7XG4gICAgICAgICAgICAgICAgdGhpcy5oaWRlVGltZXIgPSBudWxsO1xuICAgICAgICAgICAgICAgIHRoaXMuaXNEZWxheWluZyA9IGZhbHNlO1xuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgaXNBY3RpdmU6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBhY3RpdmUgPT09IHRoaXM7XG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICBpc0NoaWxkT2Y6IGZ1bmN0aW9uKGRyb3ApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZHJvcCAmJiBkcm9wICE9PSB0aGlzICYmIHdpdGhpbih0aGlzLiRlbCwgZHJvcC4kZWwpO1xuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgaXNQYXJlbnRPZjogZnVuY3Rpb24oZHJvcCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBkcm9wICYmIGRyb3AgIT09IHRoaXMgJiYgd2l0aGluKGRyb3AuJGVsLCB0aGlzLiRlbCk7XG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICBwb3NpdGlvbjogZnVuY3Rpb24oKSB7XG5cbiAgICAgICAgICAgICAgICByZW1vdmVDbGFzc2VzKHRoaXMuJGVsLCAoKHRoaXMuY2xzRHJvcCkgKyBcIi0oc3RhY2t8Ym91bmRhcnkpXCIpKTtcbiAgICAgICAgICAgICAgICBjc3ModGhpcy4kZWwsIHt0b3A6ICcnLCBsZWZ0OiAnJywgZGlzcGxheTogJ2Jsb2NrJ30pO1xuICAgICAgICAgICAgICAgIHRvZ2dsZUNsYXNzKHRoaXMuJGVsLCAoKHRoaXMuY2xzRHJvcCkgKyBcIi1ib3VuZGFyeVwiKSwgdGhpcy5ib3VuZGFyeUFsaWduKTtcblxuICAgICAgICAgICAgICAgIHZhciBib3VuZGFyeSA9IG9mZnNldCh0aGlzLmJvdW5kYXJ5KTtcbiAgICAgICAgICAgICAgICB2YXIgYWxpZ25UbyA9IHRoaXMuYm91bmRhcnlBbGlnbiA/IGJvdW5kYXJ5IDogb2Zmc2V0KHRoaXMudG9nZ2xlLiRlbCk7XG5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5hbGlnbiA9PT0gJ2p1c3RpZnknKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBwcm9wID0gdGhpcy5nZXRBeGlzKCkgPT09ICd5JyA/ICd3aWR0aCcgOiAnaGVpZ2h0JztcbiAgICAgICAgICAgICAgICAgICAgY3NzKHRoaXMuJGVsLCBwcm9wLCBhbGlnblRvW3Byb3BdKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuJGVsLm9mZnNldFdpZHRoID4gTWF0aC5tYXgoYm91bmRhcnkucmlnaHQgLSBhbGlnblRvLmxlZnQsIGFsaWduVG8ucmlnaHQgLSBib3VuZGFyeS5sZWZ0KSkge1xuICAgICAgICAgICAgICAgICAgICBhZGRDbGFzcyh0aGlzLiRlbCwgKCh0aGlzLmNsc0Ryb3ApICsgXCItc3RhY2tcIikpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRoaXMucG9zaXRpb25BdCh0aGlzLiRlbCwgdGhpcy5ib3VuZGFyeUFsaWduID8gdGhpcy5ib3VuZGFyeSA6IHRoaXMudG9nZ2xlLiRlbCwgdGhpcy5ib3VuZGFyeSk7XG5cbiAgICAgICAgICAgICAgICBjc3ModGhpcy4kZWwsICdkaXNwbGF5JywgJycpO1xuXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfVxuXG4gICAgfTtcblxuICAgIHZhciByZWdpc3RlcmVkO1xuXG4gICAgZnVuY3Rpb24gcmVnaXN0ZXJFdmVudCgpIHtcblxuICAgICAgICBpZiAocmVnaXN0ZXJlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVnaXN0ZXJlZCA9IHRydWU7XG4gICAgICAgIG9uKGRvY3VtZW50LCAnY2xpY2snLCBmdW5jdGlvbiAocmVmKSB7XG4gICAgICAgICAgICB2YXIgdGFyZ2V0ID0gcmVmLnRhcmdldDtcbiAgICAgICAgICAgIHZhciBkZWZhdWx0UHJldmVudGVkID0gcmVmLmRlZmF1bHRQcmV2ZW50ZWQ7XG5cbiAgICAgICAgICAgIHZhciBwcmV2O1xuXG4gICAgICAgICAgICBpZiAoZGVmYXVsdFByZXZlbnRlZCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgd2hpbGUgKGFjdGl2ZSAmJiBhY3RpdmUgIT09IHByZXYgJiYgIXdpdGhpbih0YXJnZXQsIGFjdGl2ZS4kZWwpICYmICEoYWN0aXZlLnRvZ2dsZSAmJiB3aXRoaW4odGFyZ2V0LCBhY3RpdmUudG9nZ2xlLiRlbCkpKSB7XG4gICAgICAgICAgICAgICAgcHJldiA9IGFjdGl2ZTtcbiAgICAgICAgICAgICAgICBhY3RpdmUuaGlkZShmYWxzZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHZhciBEcm9wZG93biA9IHtcblxuICAgICAgICBleHRlbmRzOiBEcm9wXG5cbiAgICB9O1xuXG4gICAgdmFyIEZvcm1DdXN0b20gPSB7XG5cbiAgICAgICAgbWl4aW5zOiBbQ2xhc3NdLFxuXG4gICAgICAgIGFyZ3M6ICd0YXJnZXQnLFxuXG4gICAgICAgIHByb3BzOiB7XG4gICAgICAgICAgICB0YXJnZXQ6IEJvb2xlYW5cbiAgICAgICAgfSxcblxuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICB0YXJnZXQ6IGZhbHNlXG4gICAgICAgIH0sXG5cbiAgICAgICAgY29tcHV0ZWQ6IHtcblxuICAgICAgICAgICAgaW5wdXQ6IGZ1bmN0aW9uKF8sICRlbCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAkKHNlbElucHV0LCAkZWwpO1xuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgc3RhdGU6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmlucHV0Lm5leHRFbGVtZW50U2libGluZztcbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIHRhcmdldDogZnVuY3Rpb24ocmVmLCAkZWwpIHtcbiAgICAgICAgICAgICAgICB2YXIgdGFyZ2V0ID0gcmVmLnRhcmdldDtcblxuICAgICAgICAgICAgICAgIHJldHVybiB0YXJnZXQgJiYgKHRhcmdldCA9PT0gdHJ1ZVxuICAgICAgICAgICAgICAgICAgICAmJiB0aGlzLmlucHV0LnBhcmVudE5vZGUgPT09ICRlbFxuICAgICAgICAgICAgICAgICAgICAmJiB0aGlzLmlucHV0Lm5leHRFbGVtZW50U2libGluZ1xuICAgICAgICAgICAgICAgICAgICB8fCBxdWVyeSh0YXJnZXQsICRlbCkpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIH0sXG5cbiAgICAgICAgdXBkYXRlOiBmdW5jdGlvbigpIHtcblxuICAgICAgICAgICAgdmFyIHJlZiA9IHRoaXM7XG4gICAgICAgICAgICB2YXIgdGFyZ2V0ID0gcmVmLnRhcmdldDtcbiAgICAgICAgICAgIHZhciBpbnB1dCA9IHJlZi5pbnB1dDtcblxuICAgICAgICAgICAgaWYgKCF0YXJnZXQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZhciBvcHRpb247XG4gICAgICAgICAgICB2YXIgcHJvcCA9IGlzSW5wdXQodGFyZ2V0KSA/ICd2YWx1ZScgOiAndGV4dENvbnRlbnQnO1xuICAgICAgICAgICAgdmFyIHByZXYgPSB0YXJnZXRbcHJvcF07XG4gICAgICAgICAgICB2YXIgdmFsdWUgPSBpbnB1dC5maWxlcyAmJiBpbnB1dC5maWxlc1swXVxuICAgICAgICAgICAgICAgID8gaW5wdXQuZmlsZXNbMF0ubmFtZVxuICAgICAgICAgICAgICAgIDogbWF0Y2hlcyhpbnB1dCwgJ3NlbGVjdCcpICYmIChvcHRpb24gPSAkJCgnb3B0aW9uJywgaW5wdXQpLmZpbHRlcihmdW5jdGlvbiAoZWwpIHsgcmV0dXJuIGVsLnNlbGVjdGVkOyB9KVswXSlcbiAgICAgICAgICAgICAgICAgICAgPyBvcHRpb24udGV4dENvbnRlbnRcbiAgICAgICAgICAgICAgICAgICAgOiBpbnB1dC52YWx1ZTtcblxuICAgICAgICAgICAgaWYgKHByZXYgIT09IHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgdGFyZ2V0W3Byb3BdID0gdmFsdWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfSxcblxuICAgICAgICBldmVudHM6IFtcblxuICAgICAgICAgICAge1xuXG4gICAgICAgICAgICAgICAgbmFtZTogJ2ZvY3VzaW4gZm9jdXNvdXQgbW91c2VlbnRlciBtb3VzZWxlYXZlJyxcblxuICAgICAgICAgICAgICAgIGRlbGVnYXRlOiBzZWxJbnB1dCxcblxuICAgICAgICAgICAgICAgIGhhbmRsZXI6IGZ1bmN0aW9uKHJlZikge1xuICAgICAgICAgICAgICAgICAgICB2YXIgdHlwZSA9IHJlZi50eXBlO1xuICAgICAgICAgICAgICAgICAgICB2YXIgY3VycmVudCA9IHJlZi5jdXJyZW50O1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChjdXJyZW50ID09PSB0aGlzLmlucHV0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0b2dnbGVDbGFzcyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChcInVrLVwiICsgKGluY2x1ZGVzKHR5cGUsICdmb2N1cycpID8gJ2ZvY3VzJyA6ICdob3ZlcicpKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmNsdWRlcyhbJ2ZvY3VzaW4nLCAnbW91c2VlbnRlciddLCB0eXBlKVxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAge1xuXG4gICAgICAgICAgICAgICAgbmFtZTogJ2NoYW5nZScsXG5cbiAgICAgICAgICAgICAgICBoYW5kbGVyOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4kZW1pdCgpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgfVxuXG4gICAgICAgIF1cblxuICAgIH07XG5cbiAgICAvLyBEZXByZWNhdGVkXG4gICAgdmFyIEdpZiA9IHtcblxuICAgICAgICB1cGRhdGU6IHtcblxuICAgICAgICAgICAgcmVhZDogZnVuY3Rpb24oZGF0YSQkMSkge1xuXG4gICAgICAgICAgICAgICAgdmFyIGludmlldyA9IGlzSW5WaWV3KHRoaXMuJGVsKTtcblxuICAgICAgICAgICAgICAgIGlmICghaW52aWV3IHx8IGRhdGEkJDEuaXNJblZpZXcgPT09IGludmlldykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZGF0YSQkMS5pc0luVmlldyA9IGludmlldztcbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIHdyaXRlOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICB0aGlzLiRlbC5zcmMgPSB0aGlzLiRlbC5zcmM7XG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICBldmVudHM6IFsnc2Nyb2xsJywgJ2xvYWQnLCAncmVzaXplJ11cbiAgICAgICAgfVxuXG4gICAgfTtcblxuICAgIHZhciBNYXJnaW4gPSB7XG5cbiAgICAgICAgcHJvcHM6IHtcbiAgICAgICAgICAgIG1hcmdpbjogU3RyaW5nLFxuICAgICAgICAgICAgZmlyc3RDb2x1bW46IEJvb2xlYW5cbiAgICAgICAgfSxcblxuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICBtYXJnaW46ICd1ay1tYXJnaW4tc21hbGwtdG9wJyxcbiAgICAgICAgICAgIGZpcnN0Q29sdW1uOiAndWstZmlyc3QtY29sdW1uJ1xuICAgICAgICB9LFxuXG4gICAgICAgIHVwZGF0ZToge1xuXG4gICAgICAgICAgICByZWFkOiBmdW5jdGlvbihkYXRhJCQxKSB7XG5cbiAgICAgICAgICAgICAgICB2YXIgaXRlbXMgPSB0aGlzLiRlbC5jaGlsZHJlbjtcbiAgICAgICAgICAgICAgICB2YXIgcm93cyA9IFtbXV07XG5cbiAgICAgICAgICAgICAgICBpZiAoIWl0ZW1zLmxlbmd0aCB8fCAhaXNWaXNpYmxlKHRoaXMuJGVsKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGF0YSQkMS5yb3dzID0gcm93cztcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBkYXRhJCQxLnJvd3MgPSBnZXRSb3dzKGl0ZW1zKTtcbiAgICAgICAgICAgICAgICBkYXRhJCQxLnN0YWNrcyA9ICFkYXRhJCQxLnJvd3Muc29tZShmdW5jdGlvbiAocm93KSB7IHJldHVybiByb3cubGVuZ3RoID4gMTsgfSk7XG5cbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIHdyaXRlOiBmdW5jdGlvbihyZWYpIHtcbiAgICAgICAgICAgICAgICB2YXIgdGhpcyQxID0gdGhpcztcbiAgICAgICAgICAgICAgICB2YXIgcm93cyA9IHJlZi5yb3dzO1xuXG5cbiAgICAgICAgICAgICAgICByb3dzLmZvckVhY2goZnVuY3Rpb24gKHJvdywgaSkgeyByZXR1cm4gcm93LmZvckVhY2goZnVuY3Rpb24gKGVsLCBqKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0b2dnbGVDbGFzcyhlbCwgdGhpcyQxLm1hcmdpbiwgaSAhPT0gMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0b2dnbGVDbGFzcyhlbCwgdGhpcyQxLmZpcnN0Q29sdW1uLCBqID09PSAwKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7IH1cbiAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICBldmVudHM6IFsnbG9hZCcsICdyZXNpemUnXVxuXG4gICAgICAgIH1cblxuICAgIH07XG5cbiAgICBmdW5jdGlvbiBnZXRSb3dzKGl0ZW1zKSB7XG4gICAgICAgIHZhciByb3dzID0gW1tdXTtcblxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrKSB7XG5cbiAgICAgICAgICAgIHZhciBlbCA9IGl0ZW1zW2ldO1xuICAgICAgICAgICAgdmFyIGRpbSA9IGdldE9mZnNldChlbCk7XG5cbiAgICAgICAgICAgIGlmICghZGltLmhlaWdodCkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmb3IgKHZhciBqID0gcm93cy5sZW5ndGggLSAxOyBqID49IDA7IGotLSkge1xuXG4gICAgICAgICAgICAgICAgdmFyIHJvdyA9IHJvd3Nbal07XG5cbiAgICAgICAgICAgICAgICBpZiAoIXJvd1swXSkge1xuICAgICAgICAgICAgICAgICAgICByb3cucHVzaChlbCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHZhciBsZWZ0RGltID0gZ2V0T2Zmc2V0KHJvd1swXSk7XG5cbiAgICAgICAgICAgICAgICBpZiAoZGltLnRvcCA+PSBsZWZ0RGltLmJvdHRvbSAtIDEpIHtcbiAgICAgICAgICAgICAgICAgICAgcm93cy5wdXNoKFtlbF0pO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoZGltLmJvdHRvbSA+IGxlZnREaW0udG9wKSB7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGRpbS5sZWZ0IDwgbGVmdERpbS5sZWZ0ICYmICFpc1J0bCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcm93LnVuc2hpZnQoZWwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICByb3cucHVzaChlbCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChqID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHJvd3MudW5zaGlmdChbZWxdKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByb3dzO1xuXG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0T2Zmc2V0KGVsZW1lbnQpIHtcblxuICAgICAgICB2YXIgb2Zmc2V0VG9wID0gZWxlbWVudC5vZmZzZXRUb3A7XG4gICAgICAgIHZhciBvZmZzZXRMZWZ0ID0gZWxlbWVudC5vZmZzZXRMZWZ0O1xuICAgICAgICB2YXIgb2Zmc2V0SGVpZ2h0ID0gZWxlbWVudC5vZmZzZXRIZWlnaHQ7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHRvcDogb2Zmc2V0VG9wLFxuICAgICAgICAgICAgbGVmdDogb2Zmc2V0TGVmdCxcbiAgICAgICAgICAgIGhlaWdodDogb2Zmc2V0SGVpZ2h0LFxuICAgICAgICAgICAgYm90dG9tOiBvZmZzZXRUb3AgKyBvZmZzZXRIZWlnaHRcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICB2YXIgR3JpZCA9IHtcblxuICAgICAgICBleHRlbmRzOiBNYXJnaW4sXG5cbiAgICAgICAgbWl4aW5zOiBbQ2xhc3NdLFxuXG4gICAgICAgIGF0dHJzOiB0cnVlLFxuXG4gICAgICAgIG5hbWU6ICdncmlkJyxcblxuICAgICAgICBwcm9wczoge1xuICAgICAgICAgICAgbWFzb25yeTogQm9vbGVhbixcbiAgICAgICAgICAgIHBhcmFsbGF4OiBOdW1iZXJcbiAgICAgICAgfSxcblxuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICBtYXJnaW46ICd1ay1ncmlkLW1hcmdpbicsXG4gICAgICAgICAgICBjbHNTdGFjazogJ3VrLWdyaWQtc3RhY2snLFxuICAgICAgICAgICAgbWFzb25yeTogZmFsc2UsXG4gICAgICAgICAgICBwYXJhbGxheDogMFxuICAgICAgICB9LFxuXG4gICAgICAgIGNvbXB1dGVkOiB7XG5cbiAgICAgICAgICAgIHBhcmFsbGF4OiBmdW5jdGlvbihyZWYpIHtcbiAgICAgICAgICAgICAgICB2YXIgcGFyYWxsYXggPSByZWYucGFyYWxsYXg7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gTWF0aC5hYnMocGFyYWxsYXgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIH0sXG5cbiAgICAgICAgY29ubmVjdGVkOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHRoaXMubWFzb25yeSAmJiBhZGRDbGFzcyh0aGlzLiRlbCwgJ3VrLWZsZXgtdG9wIHVrLWZsZXgtd3JhcC10b3AnKTtcbiAgICAgICAgfSxcblxuICAgICAgICB1cGRhdGU6IFtcblxuICAgICAgICAgICAge1xuXG4gICAgICAgICAgICAgICAgcmVhZDogZnVuY3Rpb24ocmVmKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciByb3dzID0gcmVmLnJvd3M7XG5cblxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5tYXNvbnJ5IHx8IHRoaXMucGFyYWxsYXgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvd3MgPSByb3dzLm1hcChmdW5jdGlvbiAoZWxlbWVudHMpIHsgcmV0dXJuIHNvcnRCeShlbGVtZW50cywgJ29mZnNldExlZnQnKTsgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB2YXIgdHJhbnNsYXRlcyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB2YXIgZWxIZWlnaHQgPSBmYWxzZTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5tYXNvbnJ5KSB7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBoZWlnaHQkJDEgPSAwO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2xhdGVzID0gcm93cy5yZWR1Y2UoZnVuY3Rpb24gKHRyYW5zbGF0ZXMsIHJvdywgaSkge1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNsYXRlc1tpXSA9IHJvdy5tYXAoZnVuY3Rpb24gKF8sIGopIHsgcmV0dXJuIGkgPT09IDAgPyAwIDogdG9GbG9hdCh0cmFuc2xhdGVzW2kgLSAxXVtqXSkgKyAoaGVpZ2h0JCQxIC0gdG9GbG9hdChyb3dzW2kgLSAxXVtqXSAmJiByb3dzW2kgLSAxXVtqXS5vZmZzZXRIZWlnaHQpKTsgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0JCQxID0gcm93LnJlZHVjZShmdW5jdGlvbiAoaGVpZ2h0JCQxLCBlbCkgeyByZXR1cm4gTWF0aC5tYXgoaGVpZ2h0JCQxLCBlbC5vZmZzZXRIZWlnaHQpOyB9LCAwKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cmFuc2xhdGVzO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB9LCBbXSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsSGVpZ2h0ID0gbWF4Q29sdW1uSGVpZ2h0KHJvd3MpICsgZ2V0TWFyZ2luVG9wKHRoaXMuJGVsLCB0aGlzLm1hcmdpbikgKiAocm93cy5sZW5ndGggLSAxKTtcblxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtyb3dzOiByb3dzLCB0cmFuc2xhdGVzOiB0cmFuc2xhdGVzLCBoZWlnaHQ6IGVsSGVpZ2h0fTtcblxuICAgICAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgICAgICB3cml0ZTogZnVuY3Rpb24ocmVmKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciByb3dzID0gcmVmLnJvd3M7XG4gICAgICAgICAgICAgICAgICAgIHZhciBzdGFja3MgPSByZWYuc3RhY2tzO1xuICAgICAgICAgICAgICAgICAgICB2YXIgaGVpZ2h0JCQxID0gcmVmLmhlaWdodDtcblxuXG4gICAgICAgICAgICAgICAgICAgIHRvZ2dsZUNsYXNzKHRoaXMuJGVsLCB0aGlzLmNsc1N0YWNrLCBzdGFja3MpO1xuXG4gICAgICAgICAgICAgICAgICAgIGNzcyh0aGlzLiRlbCwgJ3BhZGRpbmdCb3R0b20nLCB0aGlzLnBhcmFsbGF4ICYmIHJvd3Muc29tZShmdW5jdGlvbiAocm93KSB7IHJldHVybiByb3cubGVuZ3RoID4gMTsgfSkgPyB0aGlzLnBhcmFsbGF4IDogJycpO1xuXG4gICAgICAgICAgICAgICAgICAgIGhlaWdodCQkMSAmJiBjc3ModGhpcy4kZWwsICdtaW5IZWlnaHQnLCBoZWlnaHQkJDEpO1xuXG4gICAgICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgICAgIGV2ZW50czogWydsb2FkJywgJ3Jlc2l6ZSddXG5cbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIHtcblxuICAgICAgICAgICAgICAgIHJlYWQ6IGZ1bmN0aW9uKHJlZikge1xuICAgICAgICAgICAgICAgICAgICB2YXIgcm93cyA9IHJlZi5yb3dzO1xuICAgICAgICAgICAgICAgICAgICB2YXIgaGVpZ2h0JCQxID0gcmVmLmhlaWdodDtcblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2Nyb2xsZWQ6IHRoaXMucGFyYWxsYXggJiYgcm93cy5zb21lKGZ1bmN0aW9uIChyb3cpIHsgcmV0dXJuIHJvdy5sZW5ndGggPiAxOyB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gc2Nyb2xsZWRPdmVyKHRoaXMuJGVsLCBoZWlnaHQkJDEgPyBoZWlnaHQkJDEgLSBoZWlnaHQodGhpcy4kZWwpIDogMCkgKiB0aGlzLnBhcmFsbGF4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBmYWxzZVxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgICAgICB3cml0ZTogZnVuY3Rpb24ocmVmKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciByb3dzID0gcmVmLnJvd3M7XG4gICAgICAgICAgICAgICAgICAgIHZhciBzY3JvbGxlZCA9IHJlZi5zY3JvbGxlZDtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHRyYW5zbGF0ZXMgPSByZWYudHJhbnNsYXRlcztcblxuXG4gICAgICAgICAgICAgICAgICAgIGlmIChzY3JvbGxlZCA9PT0gZmFsc2UgJiYgIXRyYW5zbGF0ZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJvd3MuZm9yRWFjaChmdW5jdGlvbiAocm93LCBpKSB7IHJldHVybiByb3cuZm9yRWFjaChmdW5jdGlvbiAoZWwsIGopIHsgcmV0dXJuIGNzcyhlbCwgJ3RyYW5zZm9ybScsICFzY3JvbGxlZCAmJiAhdHJhbnNsYXRlcyA/ICcnIDogKFwidHJhbnNsYXRlWShcIiArICgodHJhbnNsYXRlcyAmJiAtdHJhbnNsYXRlc1tpXVtqXSkgKyAoc2Nyb2xsZWQgPyBqICUgMiA/IHNjcm9sbGVkIDogc2Nyb2xsZWQgLyA4IDogMCkpICsgXCJweClcIikpOyB9XG4gICAgICAgICAgICAgICAgICAgICAgICApOyB9XG4gICAgICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICAgICAgZXZlbnRzOiBbJ3Njcm9sbCcsICdsb2FkJywgJ3Jlc2l6ZSddXG5cbiAgICAgICAgICAgIH1cblxuICAgICAgICBdXG5cbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gZ2V0TWFyZ2luVG9wKHJvb3QsIGNscykge1xuXG4gICAgICAgIHZhciBub2RlcyA9IHRvTm9kZXMocm9vdC5jaGlsZHJlbik7XG4gICAgICAgIHZhciByZWYgPSBub2Rlcy5maWx0ZXIoZnVuY3Rpb24gKGVsKSB7IHJldHVybiBoYXNDbGFzcyhlbCwgY2xzKTsgfSk7XG4gICAgICAgIHZhciBub2RlID0gcmVmWzBdO1xuXG4gICAgICAgIHJldHVybiB0b0Zsb2F0KG5vZGVcbiAgICAgICAgICAgID8gY3NzKG5vZGUsICdtYXJnaW5Ub3AnKVxuICAgICAgICAgICAgOiBjc3Mobm9kZXNbMF0sICdwYWRkaW5nTGVmdCcpKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtYXhDb2x1bW5IZWlnaHQocm93cykge1xuICAgICAgICByZXR1cm4gTWF0aC5tYXguYXBwbHkoTWF0aCwgcm93cy5yZWR1Y2UoZnVuY3Rpb24gKHN1bSwgcm93KSB7XG4gICAgICAgICAgICByb3cuZm9yRWFjaChmdW5jdGlvbiAoZWwsIGkpIHsgcmV0dXJuIHN1bVtpXSA9IChzdW1baV0gfHwgMCkgKyBlbC5vZmZzZXRIZWlnaHQ7IH0pO1xuICAgICAgICAgICAgcmV0dXJuIHN1bTtcbiAgICAgICAgfSwgW10pKTtcbiAgICB9XG5cbiAgICB2YXIgSGVpZ2h0TWF0Y2ggPSB7XG5cbiAgICAgICAgYXJnczogJ3RhcmdldCcsXG5cbiAgICAgICAgcHJvcHM6IHtcbiAgICAgICAgICAgIHRhcmdldDogU3RyaW5nLFxuICAgICAgICAgICAgcm93OiBCb29sZWFuXG4gICAgICAgIH0sXG5cbiAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgdGFyZ2V0OiAnPiAqJyxcbiAgICAgICAgICAgIHJvdzogdHJ1ZVxuICAgICAgICB9LFxuXG4gICAgICAgIGNvbXB1dGVkOiB7XG5cbiAgICAgICAgICAgIGVsZW1lbnRzOiBmdW5jdGlvbihyZWYsICRlbCkge1xuICAgICAgICAgICAgICAgIHZhciB0YXJnZXQgPSByZWYudGFyZ2V0O1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuICQkKHRhcmdldCwgJGVsKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9LFxuXG4gICAgICAgIHVwZGF0ZToge1xuXG4gICAgICAgICAgICByZWFkOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICB2YXIgdGhpcyQxID0gdGhpcztcblxuXG4gICAgICAgICAgICAgICAgY3NzKHRoaXMuZWxlbWVudHMsIHtcbiAgICAgICAgICAgICAgICAgICAgbWluSGVpZ2h0OiAnJyxcbiAgICAgICAgICAgICAgICAgICAgYm94U2l6aW5nOiAnJ1xuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgcm93czogIXRoaXMucm93XG4gICAgICAgICAgICAgICAgICAgICAgICA/IFt0aGlzLm1hdGNoKHRoaXMuZWxlbWVudHMpXVxuICAgICAgICAgICAgICAgICAgICAgICAgOiBnZXRSb3dzKHRoaXMuZWxlbWVudHMpLm1hcChmdW5jdGlvbiAoZWxlbWVudHMpIHsgcmV0dXJuIHRoaXMkMS5tYXRjaChlbGVtZW50cyk7IH0pXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIHdyaXRlOiBmdW5jdGlvbihyZWYpIHtcbiAgICAgICAgICAgICAgICB2YXIgcm93cyA9IHJlZi5yb3dzO1xuXG5cbiAgICAgICAgICAgICAgICByb3dzLmZvckVhY2goZnVuY3Rpb24gKHJlZikge1xuICAgICAgICAgICAgICAgICAgICB2YXIgaGVpZ2h0JCQxID0gcmVmLmhlaWdodDtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGVsZW1lbnRzID0gcmVmLmVsZW1lbnRzO1xuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjc3MoZWxlbWVudHMsIHtcbiAgICAgICAgICAgICAgICAgICAgbWluSGVpZ2h0OiBoZWlnaHQkJDEsXG4gICAgICAgICAgICAgICAgICAgIGJveFNpemluZzogJ2JvcmRlci1ib3gnXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIGV2ZW50czogWydsb2FkJywgJ3Jlc2l6ZSddXG5cbiAgICAgICAgfSxcblxuICAgICAgICBtZXRob2RzOiB7XG5cbiAgICAgICAgICAgIG1hdGNoOiBmdW5jdGlvbihlbGVtZW50cykge1xuXG4gICAgICAgICAgICAgICAgaWYgKGVsZW1lbnRzLmxlbmd0aCA8IDIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHt9O1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHZhciBoZWlnaHRzID0gW107XG4gICAgICAgICAgICAgICAgdmFyIG1heCA9IDA7XG5cbiAgICAgICAgICAgICAgICBlbGVtZW50c1xuICAgICAgICAgICAgICAgICAgICAuZm9yRWFjaChmdW5jdGlvbiAoZWwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZWYgPSBvZmZzZXQoZWwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGhlaWdodCQkMSA9IHJlZi5oZWlnaHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBtYXggPSBNYXRoLm1heChtYXgsIGhlaWdodCQkMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHRzLnB1c2goaGVpZ2h0JCQxKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICBlbGVtZW50cyA9IGVsZW1lbnRzLmZpbHRlcihmdW5jdGlvbiAoZWwsIGkpIHsgcmV0dXJuIGhlaWdodHNbaV0gPCBtYXg7IH0pO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIHtoZWlnaHQ6IG1heCwgZWxlbWVudHM6IGVsZW1lbnRzfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgfTtcblxuICAgIHZhciBIZWlnaHRWaWV3cG9ydCA9IHtcblxuICAgICAgICBwcm9wczoge1xuICAgICAgICAgICAgZXhwYW5kOiBCb29sZWFuLFxuICAgICAgICAgICAgb2Zmc2V0VG9wOiBCb29sZWFuLFxuICAgICAgICAgICAgb2Zmc2V0Qm90dG9tOiBCb29sZWFuLFxuICAgICAgICAgICAgbWluSGVpZ2h0OiBOdW1iZXJcbiAgICAgICAgfSxcblxuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICBleHBhbmQ6IGZhbHNlLFxuICAgICAgICAgICAgb2Zmc2V0VG9wOiBmYWxzZSxcbiAgICAgICAgICAgIG9mZnNldEJvdHRvbTogZmFsc2UsXG4gICAgICAgICAgICBtaW5IZWlnaHQ6IDBcbiAgICAgICAgfSxcblxuICAgICAgICB1cGRhdGU6IHtcblxuICAgICAgICAgICAgd3JpdGU6IGZ1bmN0aW9uKCkge1xuXG4gICAgICAgICAgICAgICAgY3NzKHRoaXMuJGVsLCAnYm94U2l6aW5nJywgJ2JvcmRlci1ib3gnKTtcblxuICAgICAgICAgICAgICAgIHZhciB2aWV3cG9ydCA9IGhlaWdodCh3aW5kb3cpO1xuICAgICAgICAgICAgICAgIHZhciBtaW5IZWlnaHQsIG9mZnNldFRvcCA9IDA7XG5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5leHBhbmQpIHtcblxuICAgICAgICAgICAgICAgICAgICBjc3ModGhpcy4kZWwsIHtoZWlnaHQ6ICcnLCBtaW5IZWlnaHQ6ICcnfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgdmFyIGRpZmYgPSB2aWV3cG9ydCAtIG9mZnNldEhlaWdodChkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChkaWZmID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbWluSGVpZ2h0ID0gb2Zmc2V0SGVpZ2h0KHRoaXMuJGVsKSArIGRpZmY7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG5cbiAgICAgICAgICAgICAgICAgICAgdmFyIHJlZiA9IG9mZnNldCh0aGlzLiRlbCk7XG4gICAgICAgICAgICAgICAgICAgIHZhciB0b3AgPSByZWYudG9wO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmICh0b3AgPCB2aWV3cG9ydCAvIDIgJiYgdGhpcy5vZmZzZXRUb3ApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldFRvcCArPSB0b3A7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5vZmZzZXRCb3R0b20gPT09IHRydWUpIHtcblxuICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0VG9wICs9IG9mZnNldEhlaWdodCh0aGlzLiRlbC5uZXh0RWxlbWVudFNpYmxpbmcpO1xuXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNOdW1lcmljKHRoaXMub2Zmc2V0Qm90dG9tKSkge1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXRUb3AgKz0gKHZpZXdwb3J0IC8gMTAwKSAqIHRoaXMub2Zmc2V0Qm90dG9tO1xuXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5vZmZzZXRCb3R0b20gJiYgZW5kc1dpdGgodGhpcy5vZmZzZXRCb3R0b20sICdweCcpKSB7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldFRvcCArPSB0b0Zsb2F0KHRoaXMub2Zmc2V0Qm90dG9tKTtcblxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGlzU3RyaW5nKHRoaXMub2Zmc2V0Qm90dG9tKSkge1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXRUb3AgKz0gb2Zmc2V0SGVpZ2h0KHF1ZXJ5KHRoaXMub2Zmc2V0Qm90dG9tLCB0aGlzLiRlbCkpO1xuXG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAvLyBvbiBtb2JpbGUgZGV2aWNlcyAoaU9TIGFuZCBBbmRyb2lkKSB3aW5kb3cuaW5uZXJIZWlnaHQgIT09IDEwMHZoXG4gICAgICAgICAgICAgICAgICAgIG1pbkhlaWdodCA9IG9mZnNldFRvcCA/IChcImNhbGMoMTAwdmggLSBcIiArIG9mZnNldFRvcCArIFwicHgpXCIpIDogJzEwMHZoJztcblxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICghbWluSGVpZ2h0KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjc3ModGhpcy4kZWwsIHtoZWlnaHQ6ICcnLCBtaW5IZWlnaHQ6IG1pbkhlaWdodH0pO1xuXG4gICAgICAgICAgICAgICAgdmFyIGVsSGVpZ2h0ID0gdGhpcy4kZWwub2Zmc2V0SGVpZ2h0O1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLm1pbkhlaWdodCAmJiB0aGlzLm1pbkhlaWdodCA+IGVsSGVpZ2h0KSB7XG4gICAgICAgICAgICAgICAgICAgIGNzcyh0aGlzLiRlbCwgJ21pbkhlaWdodCcsIHRoaXMubWluSGVpZ2h0KTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvLyBJRSAxMSBmaXggKG1pbi1oZWlnaHQgb24gYSBmbGV4IGNvbnRhaW5lciB3b24ndCBhcHBseSB0byBpdHMgZmxleCBpdGVtcylcbiAgICAgICAgICAgICAgICBpZiAodmlld3BvcnQgLSBvZmZzZXRUb3AgPj0gZWxIZWlnaHQpIHtcbiAgICAgICAgICAgICAgICAgICAgY3NzKHRoaXMuJGVsLCAnaGVpZ2h0JywgbWluSGVpZ2h0KTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIGV2ZW50czogWydsb2FkJywgJ3Jlc2l6ZSddXG5cbiAgICAgICAgfVxuXG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIG9mZnNldEhlaWdodChlbCkge1xuICAgICAgICByZXR1cm4gZWwgJiYgZWwub2Zmc2V0SGVpZ2h0IHx8IDA7XG4gICAgfVxuXG4gICAgdmFyIHN2Z3MgPSB7fTtcblxuICAgIHZhciBTVkcgPSB7XG5cbiAgICAgICAgYXR0cnM6IHRydWUsXG5cbiAgICAgICAgcHJvcHM6IHtcbiAgICAgICAgICAgIGlkOiBTdHJpbmcsXG4gICAgICAgICAgICBpY29uOiBTdHJpbmcsXG4gICAgICAgICAgICBzcmM6IFN0cmluZyxcbiAgICAgICAgICAgIHN0eWxlOiBTdHJpbmcsXG4gICAgICAgICAgICB3aWR0aDogTnVtYmVyLFxuICAgICAgICAgICAgaGVpZ2h0OiBOdW1iZXIsXG4gICAgICAgICAgICByYXRpbzogTnVtYmVyLFxuICAgICAgICAgICAgJ2NsYXNzJzogU3RyaW5nXG4gICAgICAgIH0sXG5cbiAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgcmF0aW86IDEsXG4gICAgICAgICAgICBpZDogZmFsc2UsXG4gICAgICAgICAgICBleGNsdWRlOiBbJ3JhdGlvJywgJ3NyYycsICdpY29uJ10sXG4gICAgICAgICAgICAnY2xhc3MnOiAnJ1xuICAgICAgICB9LFxuXG4gICAgICAgIGNvbm5lY3RlZDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICB2YXIgdGhpcyQxID0gdGhpcztcbiAgICAgICAgICAgIHZhciBhc3NpZ24kJDE7XG5cblxuICAgICAgICAgICAgdGhpcy5jbGFzcyArPSAnIHVrLXN2Zyc7XG5cbiAgICAgICAgICAgIGlmICghdGhpcy5pY29uICYmIGluY2x1ZGVzKHRoaXMuc3JjLCAnIycpKSB7XG5cbiAgICAgICAgICAgICAgICB2YXIgcGFydHMgPSB0aGlzLnNyYy5zcGxpdCgnIycpO1xuXG4gICAgICAgICAgICAgICAgaWYgKHBhcnRzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgKGFzc2lnbiQkMSA9IHBhcnRzLCB0aGlzLnNyYyA9IGFzc2lnbiQkMVswXSwgdGhpcy5pY29uID0gYXNzaWduJCQxWzFdKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuc3ZnID0gdGhpcy5nZXRTdmcoKS50aGVuKGZ1bmN0aW9uIChzdmcpIHtcblxuICAgICAgICAgICAgICAgIHZhciBlbDtcblxuICAgICAgICAgICAgICAgIGlmIChpc1N0cmluZyhzdmcpKSB7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMkMS5pY29uICYmIGluY2x1ZGVzKHN2ZywgJzxzeW1ib2wnKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3ZnID0gcGFyc2VTeW1ib2xzKHN2ZywgdGhpcyQxLmljb24pIHx8IHN2ZztcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGVsID0gJChzdmcuc3Vic3RyKHN2Zy5pbmRleE9mKCc8c3ZnJykpKTtcblxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGVsID0gc3ZnLmNsb25lTm9kZSh0cnVlKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoIWVsKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlJDEucmVqZWN0KCdTVkcgbm90IGZvdW5kLicpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHZhciBkaW1lbnNpb25zID0gYXR0cihlbCwgJ3ZpZXdCb3gnKTtcblxuICAgICAgICAgICAgICAgIGlmIChkaW1lbnNpb25zKSB7XG4gICAgICAgICAgICAgICAgICAgIGRpbWVuc2lvbnMgPSBkaW1lbnNpb25zLnNwbGl0KCcgJyk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMkMS53aWR0aCA9IHRoaXMkMS4kcHJvcHMud2lkdGggfHwgZGltZW5zaW9uc1syXTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcyQxLmhlaWdodCA9IHRoaXMkMS4kcHJvcHMuaGVpZ2h0IHx8IGRpbWVuc2lvbnNbM107XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGhpcyQxLndpZHRoICo9IHRoaXMkMS5yYXRpbztcbiAgICAgICAgICAgICAgICB0aGlzJDEuaGVpZ2h0ICo9IHRoaXMkMS5yYXRpbztcblxuICAgICAgICAgICAgICAgIGZvciAodmFyIHByb3AgaW4gdGhpcyQxLiRvcHRpb25zLnByb3BzKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzJDFbcHJvcF0gJiYgIWluY2x1ZGVzKHRoaXMkMS5leGNsdWRlLCBwcm9wKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXR0cihlbCwgcHJvcCwgdGhpcyQxW3Byb3BdKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICghdGhpcyQxLmlkKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlbW92ZUF0dHIoZWwsICdpZCcpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICh0aGlzJDEud2lkdGggJiYgIXRoaXMkMS5oZWlnaHQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVtb3ZlQXR0cihlbCwgJ2hlaWdodCcpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICh0aGlzJDEuaGVpZ2h0ICYmICF0aGlzJDEud2lkdGgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVtb3ZlQXR0cihlbCwgJ3dpZHRoJyk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdmFyIHJvb3QgPSB0aGlzJDEuJGVsO1xuICAgICAgICAgICAgICAgIGlmIChpc1ZvaWRFbGVtZW50KHJvb3QpIHx8IHJvb3QudGFnTmFtZSA9PT0gJ0NBTlZBUycpIHtcblxuICAgICAgICAgICAgICAgICAgICBhdHRyKHJvb3QsIHtoaWRkZW46IHRydWUsIGlkOiBudWxsfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgdmFyIG5leHQgPSByb290Lm5leHRFbGVtZW50U2libGluZztcbiAgICAgICAgICAgICAgICAgICAgaWYgKG5leHQgJiYgZWwuaXNFcXVhbE5vZGUobmV4dCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsID0gbmV4dDtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFmdGVyKHJvb3QsIGVsKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcblxuICAgICAgICAgICAgICAgICAgICB2YXIgbGFzdCA9IHJvb3QubGFzdEVsZW1lbnRDaGlsZDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGxhc3QgJiYgZWwuaXNFcXVhbE5vZGUobGFzdCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsID0gbGFzdDtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZChyb290LCBlbCk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRoaXMkMS5zdmdFbCA9IGVsO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIGVsO1xuXG4gICAgICAgICAgICB9LCBub29wKTtcblxuICAgICAgICB9LFxuXG4gICAgICAgIGRpc2Nvbm5lY3RlZDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICB2YXIgdGhpcyQxID0gdGhpcztcblxuXG4gICAgICAgICAgICBpZiAoaXNWb2lkRWxlbWVudCh0aGlzLiRlbCkpIHtcbiAgICAgICAgICAgICAgICBhdHRyKHRoaXMuJGVsLCB7aGlkZGVuOiBudWxsLCBpZDogdGhpcy5pZCB8fCBudWxsfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0aGlzLnN2Zykge1xuICAgICAgICAgICAgICAgIHRoaXMuc3ZnLnRoZW4oZnVuY3Rpb24gKHN2ZykgeyByZXR1cm4gKCF0aGlzJDEuX2Nvbm5lY3RlZCB8fCBzdmcgIT09IHRoaXMkMS5zdmdFbCkgJiYgcmVtb3ZlKHN2Zyk7IH0sIG5vb3ApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLnN2ZyA9IHRoaXMuc3ZnRWwgPSBudWxsO1xuXG4gICAgICAgIH0sXG5cbiAgICAgICAgbWV0aG9kczoge1xuXG4gICAgICAgICAgICBnZXRTdmc6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIHZhciB0aGlzJDEgPSB0aGlzO1xuXG5cbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuc3JjKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlJDEucmVqZWN0KCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHN2Z3NbdGhpcy5zcmNdKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBzdmdzW3RoaXMuc3JjXTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBzdmdzW3RoaXMuc3JjXSA9IG5ldyBQcm9taXNlJDEoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChzdGFydHNXaXRoKHRoaXMkMS5zcmMsICdkYXRhOicpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGRlY29kZVVSSUNvbXBvbmVudCh0aGlzJDEuc3JjLnNwbGl0KCcsJylbMV0pKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcblxuICAgICAgICAgICAgICAgICAgICAgICAgYWpheCh0aGlzJDEuc3JjKS50aGVuKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uICh4aHIpIHsgcmV0dXJuIHJlc29sdmUoeGhyLnJlc3BvbnNlKTsgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiAoKSB7IHJldHVybiByZWplY3QoJ1NWRyBub3QgZm91bmQuJyk7IH1cbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gc3Znc1t0aGlzLnNyY107XG5cbiAgICAgICAgICAgIH1cblxuICAgICAgICB9XG5cbiAgICB9O1xuXG4gICAgdmFyIHN5bWJvbFJlID0gLzxzeW1ib2woLio/aWQ9KFsnXCJdKSguKj8pXFwyW15dKj88XFwvKXN5bWJvbD4vZztcbiAgICB2YXIgc3ltYm9scyA9IHt9O1xuXG4gICAgZnVuY3Rpb24gcGFyc2VTeW1ib2xzKHN2ZywgaWNvbikge1xuXG4gICAgICAgIGlmICghc3ltYm9sc1tzdmddKSB7XG5cbiAgICAgICAgICAgIHN5bWJvbHNbc3ZnXSA9IHt9O1xuXG4gICAgICAgICAgICB2YXIgbWF0Y2g7XG4gICAgICAgICAgICB3aGlsZSAoKG1hdGNoID0gc3ltYm9sUmUuZXhlYyhzdmcpKSkge1xuICAgICAgICAgICAgICAgIHN5bWJvbHNbc3ZnXVttYXRjaFszXV0gPSBcIjxzdmcgeG1sbnM9XFxcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXFxcIlwiICsgKG1hdGNoWzFdKSArIFwic3ZnPlwiO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBzeW1ib2xSZS5sYXN0SW5kZXggPSAwO1xuXG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gc3ltYm9sc1tzdmddW2ljb25dO1xuICAgIH1cblxuICAgIHZhciBjbG9zZUljb24gPSBcIjxzdmcgd2lkdGg9XFxcIjE0XFxcIiBoZWlnaHQ9XFxcIjE0XFxcIiB2aWV3Qm94PVxcXCIwIDAgMTQgMTRcXFwiIHhtbG5zPVxcXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1xcXCI+PGxpbmUgZmlsbD1cXFwibm9uZVxcXCIgc3Ryb2tlPVxcXCIjMDAwXFxcIiBzdHJva2Utd2lkdGg9XFxcIjEuMVxcXCIgeDE9XFxcIjFcXFwiIHkxPVxcXCIxXFxcIiB4Mj1cXFwiMTNcXFwiIHkyPVxcXCIxM1xcXCIvPjxsaW5lIGZpbGw9XFxcIm5vbmVcXFwiIHN0cm9rZT1cXFwiIzAwMFxcXCIgc3Ryb2tlLXdpZHRoPVxcXCIxLjFcXFwiIHgxPVxcXCIxM1xcXCIgeTE9XFxcIjFcXFwiIHgyPVxcXCIxXFxcIiB5Mj1cXFwiMTNcXFwiLz48L3N2Zz5cIjtcblxuICAgIHZhciBjbG9zZUxhcmdlID0gXCI8c3ZnIHdpZHRoPVxcXCIyMFxcXCIgaGVpZ2h0PVxcXCIyMFxcXCIgdmlld0JveD1cXFwiMCAwIDIwIDIwXFxcIiB4bWxucz1cXFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcXFwiPjxsaW5lIGZpbGw9XFxcIm5vbmVcXFwiIHN0cm9rZT1cXFwiIzAwMFxcXCIgc3Ryb2tlLXdpZHRoPVxcXCIxLjRcXFwiIHgxPVxcXCIxXFxcIiB5MT1cXFwiMVxcXCIgeDI9XFxcIjE5XFxcIiB5Mj1cXFwiMTlcXFwiLz48bGluZSBmaWxsPVxcXCJub25lXFxcIiBzdHJva2U9XFxcIiMwMDBcXFwiIHN0cm9rZS13aWR0aD1cXFwiMS40XFxcIiB4MT1cXFwiMTlcXFwiIHkxPVxcXCIxXFxcIiB4Mj1cXFwiMVxcXCIgeTI9XFxcIjE5XFxcIi8+PC9zdmc+XCI7XG5cbiAgICB2YXIgbWFya2VyID0gXCI8c3ZnIHdpZHRoPVxcXCIyMFxcXCIgaGVpZ2h0PVxcXCIyMFxcXCIgdmlld0JveD1cXFwiMCAwIDIwIDIwXFxcIiB4bWxucz1cXFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcXFwiPjxyZWN0IHg9XFxcIjlcXFwiIHk9XFxcIjRcXFwiIHdpZHRoPVxcXCIxXFxcIiBoZWlnaHQ9XFxcIjExXFxcIi8+PHJlY3QgeD1cXFwiNFxcXCIgeT1cXFwiOVxcXCIgd2lkdGg9XFxcIjExXFxcIiBoZWlnaHQ9XFxcIjFcXFwiLz48L3N2Zz5cIjtcblxuICAgIHZhciBuYXZiYXJUb2dnbGVJY29uID0gXCI8c3ZnIHdpZHRoPVxcXCIyMFxcXCIgaGVpZ2h0PVxcXCIyMFxcXCIgdmlld0JveD1cXFwiMCAwIDIwIDIwXFxcIiB4bWxucz1cXFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcXFwiPjxyZWN0IHk9XFxcIjlcXFwiIHdpZHRoPVxcXCIyMFxcXCIgaGVpZ2h0PVxcXCIyXFxcIi8+PHJlY3QgeT1cXFwiM1xcXCIgd2lkdGg9XFxcIjIwXFxcIiBoZWlnaHQ9XFxcIjJcXFwiLz48cmVjdCB5PVxcXCIxNVxcXCIgd2lkdGg9XFxcIjIwXFxcIiBoZWlnaHQ9XFxcIjJcXFwiLz48L3N2Zz5cIjtcblxuICAgIHZhciBvdmVybGF5SWNvbiA9IFwiPHN2ZyB3aWR0aD1cXFwiNDBcXFwiIGhlaWdodD1cXFwiNDBcXFwiIHZpZXdCb3g9XFxcIjAgMCA0MCA0MFxcXCIgeG1sbnM9XFxcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXFxcIj48cmVjdCB4PVxcXCIxOVxcXCIgeT1cXFwiMFxcXCIgd2lkdGg9XFxcIjFcXFwiIGhlaWdodD1cXFwiNDBcXFwiLz48cmVjdCB4PVxcXCIwXFxcIiB5PVxcXCIxOVxcXCIgd2lkdGg9XFxcIjQwXFxcIiBoZWlnaHQ9XFxcIjFcXFwiLz48L3N2Zz5cIjtcblxuICAgIHZhciBwYWdpbmF0aW9uTmV4dCA9IFwiPHN2ZyB3aWR0aD1cXFwiN1xcXCIgaGVpZ2h0PVxcXCIxMlxcXCIgdmlld0JveD1cXFwiMCAwIDcgMTJcXFwiIHhtbG5zPVxcXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1xcXCI+PHBvbHlsaW5lIGZpbGw9XFxcIm5vbmVcXFwiIHN0cm9rZT1cXFwiIzAwMFxcXCIgc3Ryb2tlLXdpZHRoPVxcXCIxLjJcXFwiIHBvaW50cz1cXFwiMSAxIDYgNiAxIDExXFxcIi8+PC9zdmc+XCI7XG5cbiAgICB2YXIgcGFnaW5hdGlvblByZXZpb3VzID0gXCI8c3ZnIHdpZHRoPVxcXCI3XFxcIiBoZWlnaHQ9XFxcIjEyXFxcIiB2aWV3Qm94PVxcXCIwIDAgNyAxMlxcXCIgeG1sbnM9XFxcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXFxcIj48cG9seWxpbmUgZmlsbD1cXFwibm9uZVxcXCIgc3Ryb2tlPVxcXCIjMDAwXFxcIiBzdHJva2Utd2lkdGg9XFxcIjEuMlxcXCIgcG9pbnRzPVxcXCI2IDEgMSA2IDYgMTFcXFwiLz48L3N2Zz5cIjtcblxuICAgIHZhciBzZWFyY2hJY29uID0gXCI8c3ZnIHdpZHRoPVxcXCIyMFxcXCIgaGVpZ2h0PVxcXCIyMFxcXCIgdmlld0JveD1cXFwiMCAwIDIwIDIwXFxcIiB4bWxucz1cXFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcXFwiPjxjaXJjbGUgZmlsbD1cXFwibm9uZVxcXCIgc3Ryb2tlPVxcXCIjMDAwXFxcIiBzdHJva2Utd2lkdGg9XFxcIjEuMVxcXCIgY3g9XFxcIjlcXFwiIGN5PVxcXCI5XFxcIiByPVxcXCI3XFxcIi8+PHBhdGggZmlsbD1cXFwibm9uZVxcXCIgc3Ryb2tlPVxcXCIjMDAwXFxcIiBzdHJva2Utd2lkdGg9XFxcIjEuMVxcXCIgZD1cXFwiTTE0LDE0IEwxOCwxOCBMMTQsMTQgWlxcXCIvPjwvc3ZnPlwiO1xuXG4gICAgdmFyIHNlYXJjaExhcmdlID0gXCI8c3ZnIHdpZHRoPVxcXCI0MFxcXCIgaGVpZ2h0PVxcXCI0MFxcXCIgdmlld0JveD1cXFwiMCAwIDQwIDQwXFxcIiB4bWxucz1cXFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcXFwiPjxjaXJjbGUgZmlsbD1cXFwibm9uZVxcXCIgc3Ryb2tlPVxcXCIjMDAwXFxcIiBzdHJva2Utd2lkdGg9XFxcIjEuOFxcXCIgY3g9XFxcIjE3LjVcXFwiIGN5PVxcXCIxNy41XFxcIiByPVxcXCIxNi41XFxcIi8+PGxpbmUgZmlsbD1cXFwibm9uZVxcXCIgc3Ryb2tlPVxcXCIjMDAwXFxcIiBzdHJva2Utd2lkdGg9XFxcIjEuOFxcXCIgeDE9XFxcIjM4XFxcIiB5MT1cXFwiMzlcXFwiIHgyPVxcXCIyOVxcXCIgeTI9XFxcIjMwXFxcIi8+PC9zdmc+XCI7XG5cbiAgICB2YXIgc2VhcmNoTmF2YmFyID0gXCI8c3ZnIHdpZHRoPVxcXCIyNFxcXCIgaGVpZ2h0PVxcXCIyNFxcXCIgdmlld0JveD1cXFwiMCAwIDI0IDI0XFxcIiB4bWxucz1cXFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcXFwiPjxjaXJjbGUgZmlsbD1cXFwibm9uZVxcXCIgc3Ryb2tlPVxcXCIjMDAwXFxcIiBzdHJva2Utd2lkdGg9XFxcIjEuMVxcXCIgY3g9XFxcIjEwLjVcXFwiIGN5PVxcXCIxMC41XFxcIiByPVxcXCI5LjVcXFwiLz48bGluZSBmaWxsPVxcXCJub25lXFxcIiBzdHJva2U9XFxcIiMwMDBcXFwiIHN0cm9rZS13aWR0aD1cXFwiMS4xXFxcIiB4MT1cXFwiMjNcXFwiIHkxPVxcXCIyM1xcXCIgeDI9XFxcIjE3XFxcIiB5Mj1cXFwiMTdcXFwiLz48L3N2Zz5cIjtcblxuICAgIHZhciBzbGlkZW5hdk5leHQgPSBcIjxzdmcgd2lkdGg9XFxcIjE0cHhcXFwiIGhlaWdodD1cXFwiMjRweFxcXCIgdmlld0JveD1cXFwiMCAwIDE0IDI0XFxcIiB4bWxucz1cXFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcXFwiPjxwb2x5bGluZSBmaWxsPVxcXCJub25lXFxcIiBzdHJva2U9XFxcIiMwMDBcXFwiIHN0cm9rZS13aWR0aD1cXFwiMS40XFxcIiBwb2ludHM9XFxcIjEuMjI1LDIzIDEyLjc3NSwxMiAxLjIyNSwxIFxcXCIvPjwvc3ZnPlwiO1xuXG4gICAgdmFyIHNsaWRlbmF2TmV4dExhcmdlID0gXCI8c3ZnIHdpZHRoPVxcXCIyNXB4XFxcIiBoZWlnaHQ9XFxcIjQwcHhcXFwiIHZpZXdCb3g9XFxcIjAgMCAyNSA0MFxcXCIgeG1sbnM9XFxcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXFxcIj48cG9seWxpbmUgZmlsbD1cXFwibm9uZVxcXCIgc3Ryb2tlPVxcXCIjMDAwXFxcIiBzdHJva2Utd2lkdGg9XFxcIjJcXFwiIHBvaW50cz1cXFwiNC4wMDIsMzguNTQ3IDIyLjUyNywyMC4wMjQgNCwxLjUgXFxcIi8+PC9zdmc+XCI7XG5cbiAgICB2YXIgc2xpZGVuYXZQcmV2aW91cyA9IFwiPHN2ZyB3aWR0aD1cXFwiMTRweFxcXCIgaGVpZ2h0PVxcXCIyNHB4XFxcIiB2aWV3Qm94PVxcXCIwIDAgMTQgMjRcXFwiIHhtbG5zPVxcXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1xcXCI+PHBvbHlsaW5lIGZpbGw9XFxcIm5vbmVcXFwiIHN0cm9rZT1cXFwiIzAwMFxcXCIgc3Ryb2tlLXdpZHRoPVxcXCIxLjRcXFwiIHBvaW50cz1cXFwiMTIuNzc1LDEgMS4yMjUsMTIgMTIuNzc1LDIzIFxcXCIvPjwvc3ZnPlwiO1xuXG4gICAgdmFyIHNsaWRlbmF2UHJldmlvdXNMYXJnZSA9IFwiPHN2ZyB3aWR0aD1cXFwiMjVweFxcXCIgaGVpZ2h0PVxcXCI0MHB4XFxcIiB2aWV3Qm94PVxcXCIwIDAgMjUgNDBcXFwiIHhtbG5zPVxcXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1xcXCI+PHBvbHlsaW5lIGZpbGw9XFxcIm5vbmVcXFwiIHN0cm9rZT1cXFwiIzAwMFxcXCIgc3Ryb2tlLXdpZHRoPVxcXCIyXFxcIiBwb2ludHM9XFxcIjIwLjUyNywxLjUgMiwyMC4wMjQgMjAuNTI1LDM4LjU0NyBcXFwiLz48L3N2Zz5cIjtcblxuICAgIHZhciBzcGlubmVyID0gXCI8c3ZnIHdpZHRoPVxcXCIzMFxcXCIgaGVpZ2h0PVxcXCIzMFxcXCIgdmlld0JveD1cXFwiMCAwIDMwIDMwXFxcIiB4bWxucz1cXFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcXFwiPjxjaXJjbGUgZmlsbD1cXFwibm9uZVxcXCIgc3Ryb2tlPVxcXCIjMDAwXFxcIiBjeD1cXFwiMTVcXFwiIGN5PVxcXCIxNVxcXCIgcj1cXFwiMTRcXFwiLz48L3N2Zz5cIjtcblxuICAgIHZhciB0b3RvcCA9IFwiPHN2ZyB3aWR0aD1cXFwiMThcXFwiIGhlaWdodD1cXFwiMTBcXFwiIHZpZXdCb3g9XFxcIjAgMCAxOCAxMFxcXCIgeG1sbnM9XFxcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXFxcIj48cG9seWxpbmUgZmlsbD1cXFwibm9uZVxcXCIgc3Ryb2tlPVxcXCIjMDAwXFxcIiBzdHJva2Utd2lkdGg9XFxcIjEuMlxcXCIgcG9pbnRzPVxcXCIxIDkgOSAxIDE3IDkgXFxcIi8+PC9zdmc+XCI7XG5cbiAgICB2YXIgcGFyc2VkID0ge307XG4gICAgdmFyIGljb25zID0ge1xuICAgICAgICBzcGlubmVyOiBzcGlubmVyLFxuICAgICAgICB0b3RvcDogdG90b3AsXG4gICAgICAgIG1hcmtlcjogbWFya2VyLFxuICAgICAgICAnY2xvc2UtaWNvbic6IGNsb3NlSWNvbixcbiAgICAgICAgJ2Nsb3NlLWxhcmdlJzogY2xvc2VMYXJnZSxcbiAgICAgICAgJ25hdmJhci10b2dnbGUtaWNvbic6IG5hdmJhclRvZ2dsZUljb24sXG4gICAgICAgICdvdmVybGF5LWljb24nOiBvdmVybGF5SWNvbixcbiAgICAgICAgJ3BhZ2luYXRpb24tbmV4dCc6IHBhZ2luYXRpb25OZXh0LFxuICAgICAgICAncGFnaW5hdGlvbi1wcmV2aW91cyc6IHBhZ2luYXRpb25QcmV2aW91cyxcbiAgICAgICAgJ3NlYXJjaC1pY29uJzogc2VhcmNoSWNvbixcbiAgICAgICAgJ3NlYXJjaC1sYXJnZSc6IHNlYXJjaExhcmdlLFxuICAgICAgICAnc2VhcmNoLW5hdmJhcic6IHNlYXJjaE5hdmJhcixcbiAgICAgICAgJ3NsaWRlbmF2LW5leHQnOiBzbGlkZW5hdk5leHQsXG4gICAgICAgICdzbGlkZW5hdi1uZXh0LWxhcmdlJzogc2xpZGVuYXZOZXh0TGFyZ2UsXG4gICAgICAgICdzbGlkZW5hdi1wcmV2aW91cyc6IHNsaWRlbmF2UHJldmlvdXMsXG4gICAgICAgICdzbGlkZW5hdi1wcmV2aW91cy1sYXJnZSc6IHNsaWRlbmF2UHJldmlvdXNMYXJnZVxuICAgIH07XG5cbiAgICB2YXIgSWNvbiA9IHtcblxuICAgICAgICBpbnN0YWxsOiBpbnN0YWxsLFxuXG4gICAgICAgIGF0dHJzOiBbJ2ljb24nLCAncmF0aW8nXSxcblxuICAgICAgICBtaXhpbnM6IFtDbGFzcywgU1ZHXSxcblxuICAgICAgICBhcmdzOiAnaWNvbicsXG5cbiAgICAgICAgcHJvcHM6IFsnaWNvbiddLFxuXG4gICAgICAgIGRhdGE6IHtleGNsdWRlOiBbJ2lkJywgJ3N0eWxlJywgJ2NsYXNzJywgJ3NyYycsICdpY29uJywgJ3JhdGlvJ119LFxuXG4gICAgICAgIGlzSWNvbjogdHJ1ZSxcblxuICAgICAgICBjb25uZWN0ZWQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgYWRkQ2xhc3ModGhpcy4kZWwsICd1ay1pY29uJyk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgbWV0aG9kczoge1xuXG4gICAgICAgICAgICBnZXRTdmc6IGZ1bmN0aW9uKCkge1xuXG4gICAgICAgICAgICAgICAgdmFyIGljb24gPSBnZXRJY29uKGFwcGx5UnRsKHRoaXMuaWNvbikpO1xuXG4gICAgICAgICAgICAgICAgaWYgKCFpY29uKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlJDEucmVqZWN0KCdJY29uIG5vdCBmb3VuZC4nKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZSQxLnJlc29sdmUoaWNvbik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfVxuXG4gICAgfTtcblxuICAgIHZhciBJY29uQ29tcG9uZW50ID0ge1xuXG4gICAgICAgIGV4dGVuZHM6IEljb24sXG5cbiAgICAgICAgZGF0YTogZnVuY3Rpb24gKHZtKSB7IHJldHVybiAoe1xuICAgICAgICAgICAgaWNvbjogaHlwaGVuYXRlKHZtLmNvbnN0cnVjdG9yLm9wdGlvbnMubmFtZSlcbiAgICAgICAgfSk7IH1cblxuICAgIH07XG5cbiAgICB2YXIgU2xpZGVuYXYgPSB7XG5cbiAgICAgICAgZXh0ZW5kczogSWNvbkNvbXBvbmVudCxcblxuICAgICAgICBjb25uZWN0ZWQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgYWRkQ2xhc3ModGhpcy4kZWwsICd1ay1zbGlkZW5hdicpO1xuICAgICAgICB9LFxuXG4gICAgICAgIGNvbXB1dGVkOiB7XG5cbiAgICAgICAgICAgIGljb246IGZ1bmN0aW9uKHJlZiwgJGVsKSB7XG4gICAgICAgICAgICAgICAgdmFyIGljb24gPSByZWYuaWNvbjtcblxuICAgICAgICAgICAgICAgIHJldHVybiBoYXNDbGFzcygkZWwsICd1ay1zbGlkZW5hdi1sYXJnZScpXG4gICAgICAgICAgICAgICAgICAgID8gKGljb24gKyBcIi1sYXJnZVwiKVxuICAgICAgICAgICAgICAgICAgICA6IGljb247XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfVxuXG4gICAgfTtcblxuICAgIHZhciBTZWFyY2ggPSB7XG5cbiAgICAgICAgZXh0ZW5kczogSWNvbkNvbXBvbmVudCxcblxuICAgICAgICBjb21wdXRlZDoge1xuXG4gICAgICAgICAgICBpY29uOiBmdW5jdGlvbihyZWYsICRlbCkge1xuICAgICAgICAgICAgICAgIHZhciBpY29uID0gcmVmLmljb247XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gaGFzQ2xhc3MoJGVsLCAndWstc2VhcmNoLWljb24nKSAmJiBwYXJlbnRzKCRlbCwgJy51ay1zZWFyY2gtbGFyZ2UnKS5sZW5ndGhcbiAgICAgICAgICAgICAgICAgICAgPyAnc2VhcmNoLWxhcmdlJ1xuICAgICAgICAgICAgICAgICAgICA6IHBhcmVudHMoJGVsLCAnLnVrLXNlYXJjaC1uYXZiYXInKS5sZW5ndGhcbiAgICAgICAgICAgICAgICAgICAgICAgID8gJ3NlYXJjaC1uYXZiYXInXG4gICAgICAgICAgICAgICAgICAgICAgICA6IGljb247XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfVxuXG4gICAgfTtcblxuICAgIHZhciBDbG9zZSA9IHtcblxuICAgICAgICBleHRlbmRzOiBJY29uQ29tcG9uZW50LFxuXG4gICAgICAgIGNvbXB1dGVkOiB7XG5cbiAgICAgICAgICAgIGljb246IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAoXCJjbG9zZS1cIiArIChoYXNDbGFzcyh0aGlzLiRlbCwgJ3VrLWNsb3NlLWxhcmdlJykgPyAnbGFyZ2UnIDogJ2ljb24nKSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfVxuXG4gICAgfTtcblxuICAgIHZhciBTcGlubmVyID0ge1xuXG4gICAgICAgIGV4dGVuZHM6IEljb25Db21wb25lbnQsXG5cbiAgICAgICAgY29ubmVjdGVkOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHZhciB0aGlzJDEgPSB0aGlzO1xuXG4gICAgICAgICAgICB0aGlzLnN2Zy50aGVuKGZ1bmN0aW9uIChzdmcpIHsgcmV0dXJuIHRoaXMkMS5yYXRpbyAhPT0gMSAmJiBjc3MoJCgnY2lyY2xlJywgc3ZnKSwgJ3N0cm9rZVdpZHRoJywgMSAvIHRoaXMkMS5yYXRpbyk7IH0sIG5vb3ApO1xuICAgICAgICB9XG5cbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gaW5zdGFsbChVSWtpdCkge1xuICAgICAgICBVSWtpdC5pY29uLmFkZCA9IGZ1bmN0aW9uIChuYW1lLCBzdmcpIHtcbiAgICAgICAgICAgIHZhciBvYmo7XG5cblxuICAgICAgICAgICAgdmFyIGFkZGVkID0gaXNTdHJpbmcobmFtZSkgPyAoKCBvYmogPSB7fSwgb2JqW25hbWVdID0gc3ZnLCBvYmogKSkgOiBuYW1lO1xuICAgICAgICAgICAgZWFjaChhZGRlZCwgZnVuY3Rpb24gKHN2ZywgbmFtZSkge1xuICAgICAgICAgICAgICAgIGljb25zW25hbWVdID0gc3ZnO1xuICAgICAgICAgICAgICAgIGRlbGV0ZSBwYXJzZWRbbmFtZV07XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaWYgKFVJa2l0Ll9pbml0aWFsaXplZCkge1xuICAgICAgICAgICAgICAgIGFwcGx5KGRvY3VtZW50LmJvZHksIGZ1bmN0aW9uIChlbCkgeyByZXR1cm4gZWFjaChVSWtpdC5nZXRDb21wb25lbnRzKGVsKSwgZnVuY3Rpb24gKGNtcCkgeyByZXR1cm4gY21wLiRvcHRpb25zLmlzSWNvbiAmJiBjbXAuaWNvbiBpbiBhZGRlZCAmJiBjbXAuJHJlc2V0KCk7IH1cbiAgICAgICAgICAgICAgICAgICAgKTsgfVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0SWNvbihpY29uKSB7XG5cbiAgICAgICAgaWYgKCFpY29uc1tpY29uXSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXBhcnNlZFtpY29uXSkge1xuICAgICAgICAgICAgcGFyc2VkW2ljb25dID0gJChpY29uc1tpY29uXS50cmltKCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHBhcnNlZFtpY29uXTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBhcHBseVJ0bChpY29uKSB7XG4gICAgICAgIHJldHVybiBpc1J0bCA/IHN3YXAoc3dhcChpY29uLCAnbGVmdCcsICdyaWdodCcpLCAncHJldmlvdXMnLCAnbmV4dCcpIDogaWNvbjtcbiAgICB9XG5cbiAgICB2YXIgSW1nID0ge1xuXG4gICAgICAgIGF0dHJzOiB0cnVlLFxuXG4gICAgICAgIHByb3BzOiB7XG4gICAgICAgICAgICBkYXRhU3JjOiBTdHJpbmcsXG4gICAgICAgICAgICBkYXRhU3Jjc2V0OiBCb29sZWFuLFxuICAgICAgICAgICAgZGF0YVNpemVzOiBCb29sZWFuLFxuICAgICAgICAgICAgc2l6ZXM6IFN0cmluZyxcbiAgICAgICAgICAgIHdpZHRoOiBOdW1iZXIsXG4gICAgICAgICAgICBoZWlnaHQ6IE51bWJlcixcbiAgICAgICAgICAgIGRhdGFXaWR0aDogTnVtYmVyLFxuICAgICAgICAgICAgZGF0YUhlaWdodDogTnVtYmVyLFxuICAgICAgICAgICAgb2Zmc2V0VG9wOiBTdHJpbmcsXG4gICAgICAgICAgICBvZmZzZXRMZWZ0OiBTdHJpbmcsXG4gICAgICAgICAgICB0YXJnZXQ6IFN0cmluZ1xuICAgICAgICB9LFxuXG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgIGRhdGFTcmM6ICcnLFxuICAgICAgICAgICAgZGF0YVNyY3NldDogZmFsc2UsXG4gICAgICAgICAgICBkYXRhU2l6ZXM6IGZhbHNlLFxuICAgICAgICAgICAgc2l6ZXM6IGZhbHNlLFxuICAgICAgICAgICAgd2lkdGg6IGZhbHNlLFxuICAgICAgICAgICAgaGVpZ2h0OiBmYWxzZSxcbiAgICAgICAgICAgIG9mZnNldFRvcDogJzUwdmgnLFxuICAgICAgICAgICAgb2Zmc2V0TGVmdDogMCxcbiAgICAgICAgICAgIHRhcmdldDogZmFsc2VcbiAgICAgICAgfSxcblxuICAgICAgICBjb21wdXRlZDoge1xuXG4gICAgICAgICAgICBjYWNoZUtleTogZnVuY3Rpb24ocmVmKSB7XG4gICAgICAgICAgICAgICAgdmFyIGRhdGFTcmMgPSByZWYuZGF0YVNyYztcblxuICAgICAgICAgICAgICAgIHJldHVybiAoKHRoaXMuJG5hbWUpICsgXCIuXCIgKyBkYXRhU3JjKTtcbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIHdpZHRoOiBmdW5jdGlvbihyZWYpIHtcbiAgICAgICAgICAgICAgICB2YXIgd2lkdGgkJDEgPSByZWYud2lkdGg7XG4gICAgICAgICAgICAgICAgdmFyIGRhdGFXaWR0aCA9IHJlZi5kYXRhV2lkdGg7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gd2lkdGgkJDEgfHwgZGF0YVdpZHRoO1xuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgaGVpZ2h0OiBmdW5jdGlvbihyZWYpIHtcbiAgICAgICAgICAgICAgICB2YXIgaGVpZ2h0JCQxID0gcmVmLmhlaWdodDtcbiAgICAgICAgICAgICAgICB2YXIgZGF0YUhlaWdodCA9IHJlZi5kYXRhSGVpZ2h0O1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIGhlaWdodCQkMSB8fCBkYXRhSGVpZ2h0O1xuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgc2l6ZXM6IGZ1bmN0aW9uKHJlZikge1xuICAgICAgICAgICAgICAgIHZhciBzaXplcyA9IHJlZi5zaXplcztcbiAgICAgICAgICAgICAgICB2YXIgZGF0YVNpemVzID0gcmVmLmRhdGFTaXplcztcblxuICAgICAgICAgICAgICAgIHJldHVybiBzaXplcyB8fCBkYXRhU2l6ZXM7XG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICBpc0ltZzogZnVuY3Rpb24oXywgJGVsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlzSW1nKCRlbCk7XG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICB0YXJnZXQ6IGZ1bmN0aW9uKHJlZikge1xuICAgICAgICAgICAgICAgIHZhciB0YXJnZXQgPSByZWYudGFyZ2V0O1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIFt0aGlzLiRlbF0uY29uY2F0KHF1ZXJ5QWxsKHRhcmdldCwgdGhpcy4kZWwpKTtcbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIG9mZnNldFRvcDogZnVuY3Rpb24ocmVmKSB7XG4gICAgICAgICAgICAgICAgdmFyIG9mZnNldFRvcCA9IHJlZi5vZmZzZXRUb3A7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gdG9QeChvZmZzZXRUb3AsICdoZWlnaHQnKTtcbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIG9mZnNldExlZnQ6IGZ1bmN0aW9uKHJlZikge1xuICAgICAgICAgICAgICAgIHZhciBvZmZzZXRMZWZ0ID0gcmVmLm9mZnNldExlZnQ7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gdG9QeChvZmZzZXRMZWZ0LCAnd2lkdGgnKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9LFxuXG4gICAgICAgIGNvbm5lY3RlZDogZnVuY3Rpb24oKSB7XG5cbiAgICAgICAgICAgIGlmIChzdG9yYWdlW3RoaXMuY2FjaGVLZXldKSB7XG4gICAgICAgICAgICAgICAgc2V0U3JjQXR0cnModGhpcy4kZWwsIHN0b3JhZ2VbdGhpcy5jYWNoZUtleV0gfHwgdGhpcy5kYXRhU3JjLCB0aGlzLmRhdGFTcmNzZXQsIHRoaXMuc2l6ZXMpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmlzSW1nICYmIHRoaXMud2lkdGggJiYgdGhpcy5oZWlnaHQpIHtcbiAgICAgICAgICAgICAgICBzZXRTcmNBdHRycyh0aGlzLiRlbCwgZ2V0UGxhY2Vob2xkZXJJbWFnZSh0aGlzLndpZHRoLCB0aGlzLmhlaWdodCwgdGhpcy5zaXplcykpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIH0sXG5cbiAgICAgICAgdXBkYXRlOiBbXG5cbiAgICAgICAgICAgIHtcblxuICAgICAgICAgICAgICAgIHJlYWQ6IGZ1bmN0aW9uKHJlZikge1xuICAgICAgICAgICAgICAgICAgICB2YXIgdGhpcyQxID0gdGhpcztcbiAgICAgICAgICAgICAgICAgICAgdmFyIGRlbGF5ID0gcmVmLmRlbGF5O1xuICAgICAgICAgICAgICAgICAgICB2YXIgaW1hZ2UgPSByZWYuaW1hZ2U7XG5cblxuICAgICAgICAgICAgICAgICAgICBpZiAoIWRlbGF5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBpZiAoaW1hZ2UgfHwgIXRoaXMudGFyZ2V0LnNvbWUoZnVuY3Rpb24gKGVsKSB7IHJldHVybiBpc0luVmlldyhlbCwgdGhpcyQxLm9mZnNldFRvcCwgdGhpcyQxLm9mZnNldExlZnQsIHRydWUpOyB9KSkge1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuaXNJbWcgJiYgaW1hZ2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWFnZS50aGVuKGZ1bmN0aW9uIChpbWcpIHsgcmV0dXJuIGltZyAmJiBzZXRTcmNBdHRycyh0aGlzJDEuJGVsLCBjdXJyZW50U3JjKGltZykpOyB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlOiBnZXRJbWFnZSh0aGlzLmRhdGFTcmMsIHRoaXMuZGF0YVNyY3NldCwgdGhpcy5zaXplcykudGhlbihmdW5jdGlvbiAoaW1nKSB7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRTcmNBdHRycyh0aGlzJDEuJGVsLCBjdXJyZW50U3JjKGltZyksIGltZy5zcmNzZXQsIGltZy5zaXplcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmFnZVt0aGlzJDEuY2FjaGVLZXldID0gY3VycmVudFNyYyhpbWcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpbWc7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIG5vb3ApXG4gICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICAgICAgd3JpdGU6IGZ1bmN0aW9uKGRhdGEkJDEpIHtcblxuICAgICAgICAgICAgICAgICAgICAvLyBHaXZlIHBsYWNlaG9sZGVyIGltYWdlcyB0aW1lIHRvIGFwcGx5IHRoZWlyIGRpbWVuc2lvbnNcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFkYXRhJCQxLmRlbGF5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiRlbWl0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGF0YSQkMS5kZWxheSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgICAgICBldmVudHM6IFsnc2Nyb2xsJywgJ2xvYWQnLCAncmVzaXplJ11cblxuICAgICAgICAgICAgfVxuXG4gICAgICAgIF1cblxuICAgIH07XG5cbiAgICBmdW5jdGlvbiBzZXRTcmNBdHRycyhlbCwgc3JjLCBzcmNzZXQsIHNpemVzKSB7XG5cbiAgICAgICAgaWYgKGlzSW1nKGVsKSkge1xuICAgICAgICAgICAgc3JjICYmIChlbC5zcmMgPSBzcmMpO1xuICAgICAgICAgICAgc3Jjc2V0ICYmIChlbC5zcmNzZXQgPSBzcmNzZXQpO1xuICAgICAgICAgICAgc2l6ZXMgJiYgKGVsLnNpemVzID0gc2l6ZXMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc3JjICYmIGNzcyhlbCwgJ2JhY2tncm91bmRJbWFnZScsIChcInVybChcIiArIHNyYyArIFwiKVwiKSk7XG4gICAgICAgIH1cblxuICAgIH1cblxuICAgIHZhciB1cmxDYWNoZSA9IHt9O1xuICAgIHZhciBzaXplc1JlID0gL1xccyooLio/KVxccyooXFx3K3xjYWxjXFwoLio/XFwpKVxccyooPzosfCQpL2c7XG4gICAgZnVuY3Rpb24gZ2V0UGxhY2Vob2xkZXJJbWFnZSh3aWR0aCQkMSwgaGVpZ2h0JCQxLCBzaXplcywgY29sb3IpIHtcbiAgICAgICAgdmFyIGFzc2lnbiQkMTtcblxuICAgICAgICBpZiAoIGNvbG9yID09PSB2b2lkIDAgKSBjb2xvciA9ICd0cmFuc3BhcmVudCc7XG5cbiAgICAgICAgaWYgKHNpemVzKSB7XG4gICAgICAgICAgICB2YXIgbWF0Y2hlcyQkMTtcblxuICAgICAgICAgICAgd2hpbGUgKChtYXRjaGVzJCQxID0gc2l6ZXNSZS5leGVjKHNpemVzKSkpIHtcbiAgICAgICAgICAgICAgICBpZiAoIW1hdGNoZXMkJDFbMV0gfHwgd2luZG93Lm1hdGNoTWVkaWEobWF0Y2hlcyQkMVsxXSkubWF0Y2hlcykge1xuICAgICAgICAgICAgICAgICAgICBtYXRjaGVzJCQxID0gZXZhbHVhdGVTaXplKG1hdGNoZXMkJDFbMl0pO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHNpemVzUmUubGFzdEluZGV4ID0gMDtcblxuICAgICAgICAgICAgKChhc3NpZ24kJDEgPSBEaW1lbnNpb25zLnJhdGlvKHt3aWR0aDogd2lkdGgkJDEsIGhlaWdodDogaGVpZ2h0JCQxfSwgJ3dpZHRoJywgdG9QeChtYXRjaGVzJCQxIHx8ICcxMDB2dycpKSwgd2lkdGgkJDEgPSBhc3NpZ24kJDEud2lkdGgsIGhlaWdodCQkMSA9IGFzc2lnbiQkMS5oZWlnaHQpKTtcblxuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGtleSA9IHdpZHRoJCQxICsgXCIuXCIgKyBoZWlnaHQkJDEgKyBcIi5cIiArIGNvbG9yO1xuICAgICAgICBpZiAodXJsQ2FjaGVba2V5XSkge1xuICAgICAgICAgICAgcmV0dXJuIHVybENhY2hlW2tleV07XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgY2FudmFzID0gZnJhZ21lbnQoJzxjYW52YXM+Jyk7XG4gICAgICAgIGNhbnZhcy53aWR0aCA9IHdpZHRoJCQxO1xuICAgICAgICBjYW52YXMuaGVpZ2h0ID0gaGVpZ2h0JCQxO1xuXG4gICAgICAgIHZhciBjb250ZXh0ID0gY2FudmFzLmdldENvbnRleHQoJzJkJyk7XG4gICAgICAgIGNvbnRleHQuZmlsbFN0eWxlID0gY29sb3I7XG4gICAgICAgIGNvbnRleHQuZmlsbFJlY3QoMCwgMCwgd2lkdGgkJDEsIGhlaWdodCQkMSk7XG5cbiAgICAgICAgcmV0dXJuIHVybENhY2hlW2tleV0gPSBjYW52YXMudG9EYXRhVVJMKCdpbWFnZS9wbmcnKTtcbiAgICB9XG5cbiAgICB2YXIgc2l6ZVJlID0gL1xcZCsoPzpcXHcrfCUpL2c7XG4gICAgdmFyIGFkZGl0aW9uUmUgPSAvWystXT8oXFxkKykvZztcbiAgICBmdW5jdGlvbiBldmFsdWF0ZVNpemUoc2l6ZSkge1xuICAgICAgICByZXR1cm4gc3RhcnRzV2l0aChzaXplLCAnY2FsYycpXG4gICAgICAgICAgICA/IHNpemVcbiAgICAgICAgICAgICAgICAuc3Vic3RyaW5nKDUsIHNpemUubGVuZ3RoIC0gMSlcbiAgICAgICAgICAgICAgICAucmVwbGFjZShzaXplUmUsIGZ1bmN0aW9uIChzaXplKSB7IHJldHVybiB0b1B4KHNpemUpOyB9KVxuICAgICAgICAgICAgICAgIC5yZXBsYWNlKC8gL2csICcnKVxuICAgICAgICAgICAgICAgIC5tYXRjaChhZGRpdGlvblJlKVxuICAgICAgICAgICAgICAgIC5yZWR1Y2UoZnVuY3Rpb24gKGEsIGIpIHsgcmV0dXJuIGEgKyArYjsgfSwgMClcbiAgICAgICAgICAgIDogc2l6ZTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB0b1B4KHZhbHVlLCBwcm9wZXJ0eSwgZWxlbWVudCkge1xuICAgICAgICBpZiAoIHByb3BlcnR5ID09PSB2b2lkIDAgKSBwcm9wZXJ0eSA9ICd3aWR0aCc7XG4gICAgICAgIGlmICggZWxlbWVudCA9PT0gdm9pZCAwICkgZWxlbWVudCA9IHdpbmRvdztcblxuICAgICAgICByZXR1cm4gaXNOdW1lcmljKHZhbHVlKVxuICAgICAgICAgICAgPyArdmFsdWVcbiAgICAgICAgICAgIDogZW5kc1dpdGgodmFsdWUsICd2dycpXG4gICAgICAgICAgICAgICAgPyBwZXJjZW50KGVsZW1lbnQsICd3aWR0aCcsIHZhbHVlKVxuICAgICAgICAgICAgICAgIDogZW5kc1dpdGgodmFsdWUsICd2aCcpXG4gICAgICAgICAgICAgICAgICAgID8gcGVyY2VudChlbGVtZW50LCAnaGVpZ2h0JywgdmFsdWUpXG4gICAgICAgICAgICAgICAgICAgIDogZW5kc1dpdGgodmFsdWUsICclJylcbiAgICAgICAgICAgICAgICAgICAgICAgID8gcGVyY2VudChlbGVtZW50LCBwcm9wZXJ0eSwgdmFsdWUpXG4gICAgICAgICAgICAgICAgICAgICAgICA6IHRvRmxvYXQodmFsdWUpO1xuICAgIH1cblxuICAgIHZhciBkaW1lbnNpb25zID0ge2hlaWdodDogaGVpZ2h0LCB3aWR0aDogd2lkdGh9O1xuICAgIGZ1bmN0aW9uIHBlcmNlbnQoZWxlbWVudCwgcHJvcGVydHksIHZhbHVlKSB7XG4gICAgICAgIHJldHVybiBkaW1lbnNpb25zW3Byb3BlcnR5XShlbGVtZW50KSAqIHRvRmxvYXQodmFsdWUpIC8gMTAwO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzSW1nKGVsKSB7XG4gICAgICAgIHJldHVybiBlbC50YWdOYW1lID09PSAnSU1HJztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjdXJyZW50U3JjKGVsKSB7XG4gICAgICAgIHJldHVybiBlbC5jdXJyZW50U3JjIHx8IGVsLnNyYztcbiAgICB9XG5cbiAgICB2YXIga2V5ID0gJ19fdGVzdF9fJztcbiAgICB2YXIgc3RvcmFnZTtcblxuICAgIC8vIHdvcmthcm91bmQgZm9yIFNhZmFyaSdzIHByaXZhdGUgYnJvd3NpbmcgbW9kZSBhbmQgYWNjZXNzaW5nIHNlc3Npb25TdG9yYWdlIGluIEJsaW5rXG4gICAgdHJ5IHtcbiAgICAgICAgc3RvcmFnZSA9IHdpbmRvdy5zZXNzaW9uU3RvcmFnZSB8fCB7fTtcbiAgICAgICAgc3RvcmFnZVtrZXldID0gMTtcbiAgICAgICAgZGVsZXRlIHN0b3JhZ2Vba2V5XTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHN0b3JhZ2UgPSB7fTtcbiAgICB9XG5cbiAgICB2YXIgTGVhZGVyID0ge1xuXG4gICAgICAgIG1peGluczogW0NsYXNzXSxcblxuICAgICAgICBwcm9wczoge1xuICAgICAgICAgICAgZmlsbDogU3RyaW5nLFxuICAgICAgICAgICAgbWVkaWE6ICdtZWRpYSdcbiAgICAgICAgfSxcblxuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICBmaWxsOiAnJyxcbiAgICAgICAgICAgIG1lZGlhOiBmYWxzZSxcbiAgICAgICAgICAgIGNsc1dyYXBwZXI6ICd1ay1sZWFkZXItZmlsbCcsXG4gICAgICAgICAgICBjbHNIaWRlOiAndWstbGVhZGVyLWhpZGUnLFxuICAgICAgICAgICAgYXR0ckZpbGw6ICdkYXRhLWZpbGwnXG4gICAgICAgIH0sXG5cbiAgICAgICAgY29tcHV0ZWQ6IHtcblxuICAgICAgICAgICAgZmlsbDogZnVuY3Rpb24ocmVmKSB7XG4gICAgICAgICAgICAgICAgdmFyIGZpbGwgPSByZWYuZmlsbDtcblxuICAgICAgICAgICAgICAgIHJldHVybiBmaWxsIHx8IGdldENzc1ZhcignbGVhZGVyLWZpbGwnKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9LFxuXG4gICAgICAgIGNvbm5lY3RlZDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICB2YXIgYXNzaWduJCQxO1xuXG4gICAgICAgICAgICAoYXNzaWduJCQxID0gd3JhcElubmVyKHRoaXMuJGVsLCAoXCI8c3BhbiBjbGFzcz1cXFwiXCIgKyAodGhpcy5jbHNXcmFwcGVyKSArIFwiXFxcIj5cIikpLCB0aGlzLndyYXBwZXIgPSBhc3NpZ24kJDFbMF0pO1xuICAgICAgICB9LFxuXG4gICAgICAgIGRpc2Nvbm5lY3RlZDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICB1bndyYXAodGhpcy53cmFwcGVyLmNoaWxkTm9kZXMpO1xuICAgICAgICB9LFxuXG4gICAgICAgIHVwZGF0ZTogW1xuXG4gICAgICAgICAgICB7XG5cbiAgICAgICAgICAgICAgICByZWFkOiBmdW5jdGlvbihyZWYpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGNoYW5nZWQgPSByZWYuY2hhbmdlZDtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHdpZHRoJCQxID0gcmVmLndpZHRoO1xuXG5cbiAgICAgICAgICAgICAgICAgICAgdmFyIHByZXYgPSB3aWR0aCQkMTtcblxuICAgICAgICAgICAgICAgICAgICB3aWR0aCQkMSA9IE1hdGguZmxvb3IodGhpcy4kZWwub2Zmc2V0V2lkdGggLyAyKTtcblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IHdpZHRoJCQxLFxuICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlZDogY2hhbmdlZCB8fCBwcmV2ICE9PSB3aWR0aCQkMSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGhpZGU6IHRoaXMubWVkaWEgJiYgIXdpbmRvdy5tYXRjaE1lZGlhKHRoaXMubWVkaWEpLm1hdGNoZXNcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICAgICAgd3JpdGU6IGZ1bmN0aW9uKGRhdGEkJDEpIHtcblxuICAgICAgICAgICAgICAgICAgICB0b2dnbGVDbGFzcyh0aGlzLndyYXBwZXIsIHRoaXMuY2xzSGlkZSwgZGF0YSQkMS5oaWRlKTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YSQkMS5jaGFuZ2VkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhJCQxLmNoYW5nZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGF0dHIodGhpcy53cmFwcGVyLCB0aGlzLmF0dHJGaWxsLCBuZXcgQXJyYXkoZGF0YSQkMS53aWR0aCkuam9pbih0aGlzLmZpbGwpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgICAgIGV2ZW50czogWydsb2FkJywgJ3Jlc2l6ZSddXG5cbiAgICAgICAgICAgIH1cbiAgICAgICAgXVxuXG4gICAgfTtcblxuICAgIHZhciBDb250YWluZXIgPSB7XG5cbiAgICAgICAgcHJvcHM6IHtcbiAgICAgICAgICAgIGNvbnRhaW5lcjogQm9vbGVhblxuICAgICAgICB9LFxuXG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgIGNvbnRhaW5lcjogdHJ1ZVxuICAgICAgICB9LFxuXG4gICAgICAgIGNvbXB1dGVkOiB7XG5cbiAgICAgICAgICAgIGNvbnRhaW5lcjogZnVuY3Rpb24ocmVmKSB7XG4gICAgICAgICAgICAgICAgdmFyIGNvbnRhaW5lciA9IHJlZi5jb250YWluZXI7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gY29udGFpbmVyID09PSB0cnVlICYmIHRoaXMuJGNvbnRhaW5lciB8fCBjb250YWluZXIgJiYgJChjb250YWluZXIpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIH1cblxuICAgIH07XG5cbiAgICB2YXIgYWN0aXZlJDE7XG5cbiAgICB2YXIgTW9kYWwgPSB7XG5cbiAgICAgICAgbWl4aW5zOiBbQ2xhc3MsIENvbnRhaW5lciwgVG9nZ2xhYmxlXSxcblxuICAgICAgICBwcm9wczoge1xuICAgICAgICAgICAgc2VsUGFuZWw6IFN0cmluZyxcbiAgICAgICAgICAgIHNlbENsb3NlOiBTdHJpbmcsXG4gICAgICAgICAgICBlc2NDbG9zZTogQm9vbGVhbixcbiAgICAgICAgICAgIGJnQ2xvc2U6IEJvb2xlYW4sXG4gICAgICAgICAgICBzdGFjazogQm9vbGVhblxuICAgICAgICB9LFxuXG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgIGNsczogJ3VrLW9wZW4nLFxuICAgICAgICAgICAgZXNjQ2xvc2U6IHRydWUsXG4gICAgICAgICAgICBiZ0Nsb3NlOiB0cnVlLFxuICAgICAgICAgICAgb3ZlcmxheTogdHJ1ZSxcbiAgICAgICAgICAgIHN0YWNrOiBmYWxzZVxuICAgICAgICB9LFxuXG4gICAgICAgIGNvbXB1dGVkOiB7XG5cbiAgICAgICAgICAgIHBhbmVsOiBmdW5jdGlvbihyZWYsICRlbCkge1xuICAgICAgICAgICAgICAgIHZhciBzZWxQYW5lbCA9IHJlZi5zZWxQYW5lbDtcblxuICAgICAgICAgICAgICAgIHJldHVybiAkKHNlbFBhbmVsLCAkZWwpO1xuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgdHJhbnNpdGlvbkVsZW1lbnQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnBhbmVsO1xuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgdHJhbnNpdGlvbkR1cmF0aW9uOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdG9Ncyhjc3ModGhpcy50cmFuc2l0aW9uRWxlbWVudCwgJ3RyYW5zaXRpb25EdXJhdGlvbicpKTtcbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIGJnQ2xvc2U6IGZ1bmN0aW9uKHJlZikge1xuICAgICAgICAgICAgICAgIHZhciBiZ0Nsb3NlID0gcmVmLmJnQ2xvc2U7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gYmdDbG9zZSAmJiB0aGlzLnBhbmVsO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIH0sXG5cbiAgICAgICAgZXZlbnRzOiBbXG5cbiAgICAgICAgICAgIHtcblxuICAgICAgICAgICAgICAgIG5hbWU6ICdjbGljaycsXG5cbiAgICAgICAgICAgICAgICBkZWxlZ2F0ZTogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnNlbENsb3NlO1xuICAgICAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgICAgICBoYW5kbGVyOiBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5oaWRlKCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICB7XG5cbiAgICAgICAgICAgICAgICBuYW1lOiAndG9nZ2xlJyxcblxuICAgICAgICAgICAgICAgIHNlbGY6IHRydWUsXG5cbiAgICAgICAgICAgICAgICBoYW5kbGVyOiBmdW5jdGlvbihlKSB7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGUuZGVmYXVsdFByZXZlbnRlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnRvZ2dsZSgpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdiZWZvcmVzaG93JyxcblxuICAgICAgICAgICAgICAgIHNlbGY6IHRydWUsXG5cbiAgICAgICAgICAgICAgICBoYW5kbGVyOiBmdW5jdGlvbihlKSB7XG5cbiAgICAgICAgICAgICAgICAgICAgdmFyIHByZXYgPSBhY3RpdmUkMSAmJiBhY3RpdmUkMSAhPT0gdGhpcyAmJiBhY3RpdmUkMTtcblxuICAgICAgICAgICAgICAgICAgICBhY3RpdmUkMSA9IHRoaXM7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHByZXYpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnN0YWNrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wcmV2ID0gcHJldjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldi5oaWRlKCkudGhlbih0aGlzLnNob3cpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICByZWdpc3RlckV2ZW50cygpO1xuXG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ2JlZm9yZWhpZGUnLFxuXG4gICAgICAgICAgICAgICAgc2VsZjogdHJ1ZSxcblxuICAgICAgICAgICAgICAgIGhhbmRsZXI6IGZ1bmN0aW9uKCkge1xuXG4gICAgICAgICAgICAgICAgICAgIGFjdGl2ZSQxID0gYWN0aXZlJDEgJiYgYWN0aXZlJDEgIT09IHRoaXMgJiYgYWN0aXZlJDEgfHwgdGhpcy5wcmV2O1xuXG4gICAgICAgICAgICAgICAgICAgIGlmICghYWN0aXZlJDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlcmVnaXN0ZXJFdmVudHMoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICB7XG5cbiAgICAgICAgICAgICAgICBuYW1lOiAnc2hvdycsXG5cbiAgICAgICAgICAgICAgICBzZWxmOiB0cnVlLFxuXG4gICAgICAgICAgICAgICAgaGFuZGxlcjogZnVuY3Rpb24oKSB7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKCFoYXNDbGFzcyhkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsIHRoaXMuY2xzUGFnZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2Nyb2xsYmFyV2lkdGggPSB3aWR0aCh3aW5kb3cpIC0gd2lkdGgoZG9jdW1lbnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY3NzKGRvY3VtZW50LmJvZHksICdvdmVyZmxvd1knLCB0aGlzLnNjcm9sbGJhcldpZHRoICYmIHRoaXMub3ZlcmxheSA/ICdzY3JvbGwnIDogJycpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgYWRkQ2xhc3MoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LCB0aGlzLmNsc1BhZ2UpO1xuXG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICB7XG5cbiAgICAgICAgICAgICAgICBuYW1lOiAnaGlkZGVuJyxcblxuICAgICAgICAgICAgICAgIHNlbGY6IHRydWUsXG5cbiAgICAgICAgICAgICAgICBoYW5kbGVyOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHRoaXMkMSA9IHRoaXM7XG5cblxuICAgICAgICAgICAgICAgICAgICB2YXIgZm91bmQ7XG4gICAgICAgICAgICAgICAgICAgIHZhciByZWYgPSB0aGlzO1xuICAgICAgICAgICAgICAgICAgICB2YXIgcHJldiA9IHJlZi5wcmV2O1xuXG4gICAgICAgICAgICAgICAgICAgIHdoaWxlIChwcmV2KSB7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcmV2LmNsc1BhZ2UgPT09IHRoaXMkMS5jbHNQYWdlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBwcmV2ID0gcHJldi5wcmV2O1xuXG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBpZiAoIWZvdW5kKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVDbGFzcyhkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsIHRoaXMuY2xzUGFnZSk7XG5cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICF0aGlzLnByZXYgJiYgY3NzKGRvY3VtZW50LmJvZHksICdvdmVyZmxvd1knLCAnJyk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgXSxcblxuICAgICAgICBtZXRob2RzOiB7XG5cbiAgICAgICAgICAgIHRvZ2dsZTogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuaXNUb2dnbGVkKCkgPyB0aGlzLmhpZGUoKSA6IHRoaXMuc2hvdygpO1xuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgc2hvdzogZnVuY3Rpb24oKSB7XG5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pc1RvZ2dsZWQoKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZSQxLnJlc29sdmUoKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5jb250YWluZXIgJiYgdGhpcy4kZWwucGFyZW50Tm9kZSAhPT0gdGhpcy5jb250YWluZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgYXBwZW5kKHRoaXMuY29udGFpbmVyLCB0aGlzLiRlbCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NhbGxDb25uZWN0ZWQoKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy50b2dnbGVOb3codGhpcy4kZWwsIHRydWUpO1xuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgaGlkZTogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuaXNUb2dnbGVkKClcbiAgICAgICAgICAgICAgICAgICAgPyB0aGlzLnRvZ2dsZU5vdyh0aGlzLiRlbCwgZmFsc2UpXG4gICAgICAgICAgICAgICAgICAgIDogUHJvbWlzZSQxLnJlc29sdmUoKTtcbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIGdldEFjdGl2ZTogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFjdGl2ZSQxO1xuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgX3RvZ2dsZUltbWVkaWF0ZTogZnVuY3Rpb24oZWwsIHNob3cpIHtcbiAgICAgICAgICAgICAgICB2YXIgdGhpcyQxID0gdGhpcztcblxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSQxKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJldHVybiByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcyQxLl90b2dnbGUoZWwsIHNob3cpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcyQxLnRyYW5zaXRpb25EdXJhdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uY2UodGhpcyQxLnRyYW5zaXRpb25FbGVtZW50LCAndHJhbnNpdGlvbmVuZCcsIHJlc29sdmUsIGZhbHNlLCBmdW5jdGlvbiAoZSkgeyByZXR1cm4gZS50YXJnZXQgPT09IHRoaXMkMS50cmFuc2l0aW9uRWxlbWVudDsgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7IH1cbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIH1cblxuICAgIH07XG5cbiAgICB2YXIgZXZlbnRzO1xuXG4gICAgZnVuY3Rpb24gcmVnaXN0ZXJFdmVudHMoKSB7XG5cbiAgICAgICAgaWYgKGV2ZW50cykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgZXZlbnRzID0gW1xuICAgICAgICAgICAgb24oZG9jdW1lbnQsICdjbGljaycsIGZ1bmN0aW9uIChyZWYpIHtcbiAgICAgICAgICAgICAgICB2YXIgdGFyZ2V0ID0gcmVmLnRhcmdldDtcbiAgICAgICAgICAgICAgICB2YXIgZGVmYXVsdFByZXZlbnRlZCA9IHJlZi5kZWZhdWx0UHJldmVudGVkO1xuXG4gICAgICAgICAgICAgICAgaWYgKGFjdGl2ZSQxICYmIGFjdGl2ZSQxLmJnQ2xvc2UgJiYgIWRlZmF1bHRQcmV2ZW50ZWQgJiYgKCFhY3RpdmUkMS5vdmVybGF5IHx8IHdpdGhpbih0YXJnZXQsIGFjdGl2ZSQxLiRlbCkpICYmICF3aXRoaW4odGFyZ2V0LCBhY3RpdmUkMS5wYW5lbCkpIHtcbiAgICAgICAgICAgICAgICAgICAgYWN0aXZlJDEuaGlkZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgb24oZG9jdW1lbnQsICdrZXlkb3duJywgZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgICAgICAgICBpZiAoZS5rZXlDb2RlID09PSAyNyAmJiBhY3RpdmUkMSAmJiBhY3RpdmUkMS5lc2NDbG9zZSkge1xuICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgICAgIGFjdGl2ZSQxLmhpZGUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuICAgICAgICBdO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGRlcmVnaXN0ZXJFdmVudHMoKSB7XG4gICAgICAgIGV2ZW50cyAmJiBldmVudHMuZm9yRWFjaChmdW5jdGlvbiAodW5iaW5kKSB7IHJldHVybiB1bmJpbmQoKTsgfSk7XG4gICAgICAgIGV2ZW50cyA9IG51bGw7XG4gICAgfVxuXG4gICAgdmFyIE1vZGFsJDEgPSB7XG5cbiAgICAgICAgaW5zdGFsbDogaW5zdGFsbCQxLFxuXG4gICAgICAgIG1peGluczogW01vZGFsXSxcblxuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICBjbHNQYWdlOiAndWstbW9kYWwtcGFnZScsXG4gICAgICAgICAgICBzZWxQYW5lbDogJy51ay1tb2RhbC1kaWFsb2cnLFxuICAgICAgICAgICAgc2VsQ2xvc2U6ICcudWstbW9kYWwtY2xvc2UsIC51ay1tb2RhbC1jbG9zZS1kZWZhdWx0LCAudWstbW9kYWwtY2xvc2Utb3V0c2lkZSwgLnVrLW1vZGFsLWNsb3NlLWZ1bGwnXG4gICAgICAgIH0sXG5cbiAgICAgICAgZXZlbnRzOiBbXG5cbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnc2hvdycsXG5cbiAgICAgICAgICAgICAgICBzZWxmOiB0cnVlLFxuXG4gICAgICAgICAgICAgICAgaGFuZGxlcjogZnVuY3Rpb24oKSB7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGhhc0NsYXNzKHRoaXMucGFuZWwsICd1ay1tYXJnaW4tYXV0by12ZXJ0aWNhbCcpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhZGRDbGFzcyh0aGlzLiRlbCwgJ3VrLWZsZXgnKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNzcyh0aGlzLiRlbCwgJ2Rpc3BsYXknLCAnYmxvY2snKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGhlaWdodCh0aGlzLiRlbCk7IC8vIGZvcmNlIHJlZmxvd1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnaGlkZGVuJyxcblxuICAgICAgICAgICAgICAgIHNlbGY6IHRydWUsXG5cbiAgICAgICAgICAgICAgICBoYW5kbGVyOiBmdW5jdGlvbigpIHtcblxuICAgICAgICAgICAgICAgICAgICBjc3ModGhpcy4kZWwsICdkaXNwbGF5JywgJycpO1xuICAgICAgICAgICAgICAgICAgICByZW1vdmVDbGFzcyh0aGlzLiRlbCwgJ3VrLWZsZXgnKTtcblxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICBdXG5cbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gaW5zdGFsbCQxIChVSWtpdCkge1xuXG4gICAgICAgIFVJa2l0Lm1vZGFsLmRpYWxvZyA9IGZ1bmN0aW9uIChjb250ZW50LCBvcHRpb25zKSB7XG5cbiAgICAgICAgICAgIHZhciBkaWFsb2cgPSBVSWtpdC5tb2RhbCgoXCIgPGRpdiBjbGFzcz1cXFwidWstbW9kYWxcXFwiPiA8ZGl2IGNsYXNzPVxcXCJ1ay1tb2RhbC1kaWFsb2dcXFwiPlwiICsgY29udGVudCArIFwiPC9kaXY+IDwvZGl2PiBcIiksIG9wdGlvbnMpO1xuXG4gICAgICAgICAgICBkaWFsb2cuc2hvdygpO1xuXG4gICAgICAgICAgICBvbihkaWFsb2cuJGVsLCAnaGlkZGVuJywgZnVuY3Rpb24gKHJlZikge1xuICAgICAgICAgICAgICAgIHZhciB0YXJnZXQgPSByZWYudGFyZ2V0O1xuICAgICAgICAgICAgICAgIHZhciBjdXJyZW50VGFyZ2V0ID0gcmVmLmN1cnJlbnRUYXJnZXQ7XG5cbiAgICAgICAgICAgICAgICBpZiAodGFyZ2V0ID09PSBjdXJyZW50VGFyZ2V0KSB7XG4gICAgICAgICAgICAgICAgICAgIGRpYWxvZy4kZGVzdHJveSh0cnVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgcmV0dXJuIGRpYWxvZztcbiAgICAgICAgfTtcblxuICAgICAgICBVSWtpdC5tb2RhbC5hbGVydCA9IGZ1bmN0aW9uIChtZXNzYWdlLCBvcHRpb25zKSB7XG5cbiAgICAgICAgICAgIG9wdGlvbnMgPSBhc3NpZ24oe2JnQ2xvc2U6IGZhbHNlLCBlc2NDbG9zZTogZmFsc2UsIGxhYmVsczogVUlraXQubW9kYWwubGFiZWxzfSwgb3B0aW9ucyk7XG5cbiAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSQxKFxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJldHVybiBvbihVSWtpdC5tb2RhbC5kaWFsb2coKFwiIDxkaXYgY2xhc3M9XFxcInVrLW1vZGFsLWJvZHlcXFwiPlwiICsgKGlzU3RyaW5nKG1lc3NhZ2UpID8gbWVzc2FnZSA6IGh0bWwobWVzc2FnZSkpICsgXCI8L2Rpdj4gPGRpdiBjbGFzcz1cXFwidWstbW9kYWwtZm9vdGVyIHVrLXRleHQtcmlnaHRcXFwiPiA8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLXByaW1hcnkgdWstbW9kYWwtY2xvc2VcXFwiIGF1dG9mb2N1cz5cIiArIChvcHRpb25zLmxhYmVscy5vaykgKyBcIjwvYnV0dG9uPiA8L2Rpdj4gXCIpLCBvcHRpb25zKS4kZWwsICdoaWRlJywgcmVzb2x2ZSk7IH1cbiAgICAgICAgICAgICk7XG4gICAgICAgIH07XG5cbiAgICAgICAgVUlraXQubW9kYWwuY29uZmlybSA9IGZ1bmN0aW9uIChtZXNzYWdlLCBvcHRpb25zKSB7XG5cbiAgICAgICAgICAgIG9wdGlvbnMgPSBhc3NpZ24oe2JnQ2xvc2U6IGZhbHNlLCBlc2NDbG9zZTogdHJ1ZSwgbGFiZWxzOiBVSWtpdC5tb2RhbC5sYWJlbHN9LCBvcHRpb25zKTtcblxuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlJDEoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuXG4gICAgICAgICAgICAgICAgdmFyIGNvbmZpcm0gPSBVSWtpdC5tb2RhbC5kaWFsb2coKFwiIDxmb3JtPiA8ZGl2IGNsYXNzPVxcXCJ1ay1tb2RhbC1ib2R5XFxcIj5cIiArIChpc1N0cmluZyhtZXNzYWdlKSA/IG1lc3NhZ2UgOiBodG1sKG1lc3NhZ2UpKSArIFwiPC9kaXY+IDxkaXYgY2xhc3M9XFxcInVrLW1vZGFsLWZvb3RlciB1ay10ZXh0LXJpZ2h0XFxcIj4gPGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1kZWZhdWx0IHVrLW1vZGFsLWNsb3NlXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiPlwiICsgKG9wdGlvbnMubGFiZWxzLmNhbmNlbCkgKyBcIjwvYnV0dG9uPiA8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLXByaW1hcnlcXFwiIGF1dG9mb2N1cz5cIiArIChvcHRpb25zLmxhYmVscy5vaykgKyBcIjwvYnV0dG9uPiA8L2Rpdj4gPC9mb3JtPiBcIiksIG9wdGlvbnMpO1xuXG4gICAgICAgICAgICAgICAgdmFyIHJlc29sdmVkID0gZmFsc2U7XG5cbiAgICAgICAgICAgICAgICBvbihjb25maXJtLiRlbCwgJ3N1Ym1pdCcsICdmb3JtJywgZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgY29uZmlybS5oaWRlKCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgb24oY29uZmlybS4kZWwsICdoaWRlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXJlc29sdmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWplY3QoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfTtcblxuICAgICAgICBVSWtpdC5tb2RhbC5wcm9tcHQgPSBmdW5jdGlvbiAobWVzc2FnZSwgdmFsdWUsIG9wdGlvbnMpIHtcblxuICAgICAgICAgICAgb3B0aW9ucyA9IGFzc2lnbih7YmdDbG9zZTogZmFsc2UsIGVzY0Nsb3NlOiB0cnVlLCBsYWJlbHM6IFVJa2l0Lm1vZGFsLmxhYmVsc30sIG9wdGlvbnMpO1xuXG4gICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UkMShmdW5jdGlvbiAocmVzb2x2ZSkge1xuXG4gICAgICAgICAgICAgICAgdmFyIHByb21wdCA9IFVJa2l0Lm1vZGFsLmRpYWxvZygoXCIgPGZvcm0gY2xhc3M9XFxcInVrLWZvcm0tc3RhY2tlZFxcXCI+IDxkaXYgY2xhc3M9XFxcInVrLW1vZGFsLWJvZHlcXFwiPiA8bGFiZWw+XCIgKyAoaXNTdHJpbmcobWVzc2FnZSkgPyBtZXNzYWdlIDogaHRtbChtZXNzYWdlKSkgKyBcIjwvbGFiZWw+IDxpbnB1dCBjbGFzcz1cXFwidWstaW5wdXRcXFwiIGF1dG9mb2N1cz4gPC9kaXY+IDxkaXYgY2xhc3M9XFxcInVrLW1vZGFsLWZvb3RlciB1ay10ZXh0LXJpZ2h0XFxcIj4gPGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1kZWZhdWx0IHVrLW1vZGFsLWNsb3NlXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiPlwiICsgKG9wdGlvbnMubGFiZWxzLmNhbmNlbCkgKyBcIjwvYnV0dG9uPiA8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLXByaW1hcnlcXFwiPlwiICsgKG9wdGlvbnMubGFiZWxzLm9rKSArIFwiPC9idXR0b24+IDwvZGl2PiA8L2Zvcm0+IFwiKSwgb3B0aW9ucyksXG4gICAgICAgICAgICAgICAgICAgIGlucHV0ID0gJCgnaW5wdXQnLCBwcm9tcHQuJGVsKTtcblxuICAgICAgICAgICAgICAgIGlucHV0LnZhbHVlID0gdmFsdWU7XG5cbiAgICAgICAgICAgICAgICB2YXIgcmVzb2x2ZWQgPSBmYWxzZTtcblxuICAgICAgICAgICAgICAgIG9uKHByb21wdC4kZWwsICdzdWJtaXQnLCAnZm9ybScsIGZ1bmN0aW9uIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShpbnB1dC52YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgcHJvbXB0LmhpZGUoKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBvbihwcm9tcHQuJGVsLCAnaGlkZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFyZXNvbHZlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfTtcblxuICAgICAgICBVSWtpdC5tb2RhbC5sYWJlbHMgPSB7XG4gICAgICAgICAgICBvazogJ09rJyxcbiAgICAgICAgICAgIGNhbmNlbDogJ0NhbmNlbCdcbiAgICAgICAgfTtcblxuICAgIH1cblxuICAgIHZhciBOYXYgPSB7XG5cbiAgICAgICAgZXh0ZW5kczogQWNjb3JkaW9uLFxuXG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgIHRhcmdldHM6ICc+IC51ay1wYXJlbnQnLFxuICAgICAgICAgICAgdG9nZ2xlOiAnPiBhJyxcbiAgICAgICAgICAgIGNvbnRlbnQ6ICc+IHVsJ1xuICAgICAgICB9XG5cbiAgICB9O1xuXG4gICAgdmFyIE5hdmJhciA9IHtcblxuICAgICAgICBtaXhpbnM6IFtDbGFzc10sXG5cbiAgICAgICAgcHJvcHM6IHtcbiAgICAgICAgICAgIGRyb3Bkb3duOiBTdHJpbmcsXG4gICAgICAgICAgICBtb2RlOiAnbGlzdCcsXG4gICAgICAgICAgICBhbGlnbjogU3RyaW5nLFxuICAgICAgICAgICAgb2Zmc2V0OiBOdW1iZXIsXG4gICAgICAgICAgICBib3VuZGFyeTogQm9vbGVhbixcbiAgICAgICAgICAgIGJvdW5kYXJ5QWxpZ246IEJvb2xlYW4sXG4gICAgICAgICAgICBjbHNEcm9wOiBTdHJpbmcsXG4gICAgICAgICAgICBkZWxheVNob3c6IE51bWJlcixcbiAgICAgICAgICAgIGRlbGF5SGlkZTogTnVtYmVyLFxuICAgICAgICAgICAgZHJvcGJhcjogQm9vbGVhbixcbiAgICAgICAgICAgIGRyb3BiYXJNb2RlOiBTdHJpbmcsXG4gICAgICAgICAgICBkcm9wYmFyQW5jaG9yOiBCb29sZWFuLFxuICAgICAgICAgICAgZHVyYXRpb246IE51bWJlclxuICAgICAgICB9LFxuXG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgIGRyb3Bkb3duOiAnLnVrLW5hdmJhci1uYXYgPiBsaScsXG4gICAgICAgICAgICBhbGlnbjogIWlzUnRsID8gJ2xlZnQnIDogJ3JpZ2h0JyxcbiAgICAgICAgICAgIGNsc0Ryb3A6ICd1ay1uYXZiYXItZHJvcGRvd24nLFxuICAgICAgICAgICAgbW9kZTogdW5kZWZpbmVkLFxuICAgICAgICAgICAgb2Zmc2V0OiB1bmRlZmluZWQsXG4gICAgICAgICAgICBkZWxheVNob3c6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIGRlbGF5SGlkZTogdW5kZWZpbmVkLFxuICAgICAgICAgICAgYm91bmRhcnlBbGlnbjogdW5kZWZpbmVkLFxuICAgICAgICAgICAgZmxpcDogJ3gnLFxuICAgICAgICAgICAgYm91bmRhcnk6IHRydWUsXG4gICAgICAgICAgICBkcm9wYmFyOiBmYWxzZSxcbiAgICAgICAgICAgIGRyb3BiYXJNb2RlOiAnc2xpZGUnLFxuICAgICAgICAgICAgZHJvcGJhckFuY2hvcjogZmFsc2UsXG4gICAgICAgICAgICBkdXJhdGlvbjogMjAwLFxuICAgICAgICB9LFxuXG4gICAgICAgIGNvbXB1dGVkOiB7XG5cbiAgICAgICAgICAgIGJvdW5kYXJ5OiBmdW5jdGlvbihyZWYsICRlbCkge1xuICAgICAgICAgICAgICAgIHZhciBib3VuZGFyeSA9IHJlZi5ib3VuZGFyeTtcbiAgICAgICAgICAgICAgICB2YXIgYm91bmRhcnlBbGlnbiA9IHJlZi5ib3VuZGFyeUFsaWduO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIChib3VuZGFyeSA9PT0gdHJ1ZSB8fCBib3VuZGFyeUFsaWduKSA/ICRlbCA6IGJvdW5kYXJ5O1xuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgZHJvcGJhckFuY2hvcjogZnVuY3Rpb24ocmVmLCAkZWwpIHtcbiAgICAgICAgICAgICAgICB2YXIgZHJvcGJhckFuY2hvciA9IHJlZi5kcm9wYmFyQW5jaG9yO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIHF1ZXJ5KGRyb3BiYXJBbmNob3IsICRlbCk7XG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICBwb3M6IGZ1bmN0aW9uKHJlZikge1xuICAgICAgICAgICAgICAgIHZhciBhbGlnbiA9IHJlZi5hbGlnbjtcblxuICAgICAgICAgICAgICAgIHJldHVybiAoXCJib3R0b20tXCIgKyBhbGlnbik7XG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICBkcm9wZG93bnM6IGZ1bmN0aW9uKHJlZiwgJGVsKSB7XG4gICAgICAgICAgICAgICAgdmFyIGRyb3Bkb3duID0gcmVmLmRyb3Bkb3duO1xuICAgICAgICAgICAgICAgIHZhciBjbHNEcm9wID0gcmVmLmNsc0Ryb3A7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gJCQoKGRyb3Bkb3duICsgXCIgLlwiICsgY2xzRHJvcCksICRlbCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfSxcblxuICAgICAgICBiZWZvcmVDb25uZWN0OiBmdW5jdGlvbigpIHtcblxuICAgICAgICAgICAgdmFyIHJlZiA9IHRoaXMuJHByb3BzO1xuICAgICAgICAgICAgdmFyIGRyb3BiYXIgPSByZWYuZHJvcGJhcjtcblxuICAgICAgICAgICAgdGhpcy5kcm9wYmFyID0gZHJvcGJhciAmJiAocXVlcnkoZHJvcGJhciwgdGhpcy4kZWwpIHx8ICQoJysgLnVrLW5hdmJhci1kcm9wYmFyJywgdGhpcy4kZWwpIHx8ICQoJzxkaXY+PC9kaXY+JykpO1xuXG4gICAgICAgICAgICBpZiAodGhpcy5kcm9wYmFyKSB7XG5cbiAgICAgICAgICAgICAgICBhZGRDbGFzcyh0aGlzLmRyb3BiYXIsICd1ay1uYXZiYXItZHJvcGJhcicpO1xuXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZHJvcGJhck1vZGUgPT09ICdzbGlkZScpIHtcbiAgICAgICAgICAgICAgICAgICAgYWRkQ2xhc3ModGhpcy5kcm9wYmFyLCAndWstbmF2YmFyLWRyb3BiYXItc2xpZGUnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfSxcblxuICAgICAgICBkaXNjb25uZWN0ZWQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgdGhpcy5kcm9wYmFyICYmIHJlbW92ZSh0aGlzLmRyb3BiYXIpO1xuICAgICAgICB9LFxuXG4gICAgICAgIHVwZGF0ZTogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICB2YXIgdGhpcyQxID0gdGhpcztcblxuXG4gICAgICAgICAgICB0aGlzLiRjcmVhdGUoXG4gICAgICAgICAgICAgICAgJ2Ryb3AnLFxuICAgICAgICAgICAgICAgIHRoaXMuZHJvcGRvd25zLmZpbHRlcihmdW5jdGlvbiAoZWwpIHsgcmV0dXJuICF0aGlzJDEuZ2V0RHJvcGRvd24oZWwpOyB9KSxcbiAgICAgICAgICAgICAgICBhc3NpZ24oe30sIHRoaXMuJHByb3BzLCB7Ym91bmRhcnk6IHRoaXMuYm91bmRhcnksIHBvczogdGhpcy5wb3MsIG9mZnNldDogdGhpcy5kcm9wYmFyIHx8IHRoaXMub2Zmc2V0fSlcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgfSxcblxuICAgICAgICBldmVudHM6IFtcblxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdtb3VzZW92ZXInLFxuXG4gICAgICAgICAgICAgICAgZGVsZWdhdGU6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5kcm9wZG93bjtcbiAgICAgICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICAgICAgaGFuZGxlcjogZnVuY3Rpb24ocmVmKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBjdXJyZW50ID0gcmVmLmN1cnJlbnQ7XG5cbiAgICAgICAgICAgICAgICAgICAgdmFyIGFjdGl2ZSA9IHRoaXMuZ2V0QWN0aXZlKCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChhY3RpdmUgJiYgYWN0aXZlLnRvZ2dsZSAmJiAhd2l0aGluKGFjdGl2ZS50b2dnbGUuJGVsLCBjdXJyZW50KSAmJiAhYWN0aXZlLnRyYWNrZXIubW92ZXNUbyhhY3RpdmUuJGVsKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYWN0aXZlLmhpZGUoZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ21vdXNlbGVhdmUnLFxuXG4gICAgICAgICAgICAgICAgZWw6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5kcm9wYmFyO1xuICAgICAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgICAgICBoYW5kbGVyOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGFjdGl2ZSA9IHRoaXMuZ2V0QWN0aXZlKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGFjdGl2ZSAmJiAhbWF0Y2hlcyh0aGlzLmRyb3BiYXIsICc6aG92ZXInKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYWN0aXZlLmhpZGUoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnYmVmb3Jlc2hvdycsXG5cbiAgICAgICAgICAgICAgICBjYXB0dXJlOiB0cnVlLFxuXG4gICAgICAgICAgICAgICAgZmlsdGVyOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZHJvcGJhcjtcbiAgICAgICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICAgICAgaGFuZGxlcjogZnVuY3Rpb24oKSB7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmRyb3BiYXIucGFyZW50Tm9kZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYWZ0ZXIodGhpcy5kcm9wYmFyQW5jaG9yIHx8IHRoaXMuJGVsLCB0aGlzLmRyb3BiYXIpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ3Nob3cnLFxuXG4gICAgICAgICAgICAgICAgY2FwdHVyZTogdHJ1ZSxcblxuICAgICAgICAgICAgICAgIGZpbHRlcjogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmRyb3BiYXI7XG4gICAgICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgICAgIGhhbmRsZXI6IGZ1bmN0aW9uKF8sIGRyb3ApIHtcblxuICAgICAgICAgICAgICAgICAgICB2YXIgJGVsID0gZHJvcC4kZWw7XG4gICAgICAgICAgICAgICAgICAgIHZhciBkaXIgPSBkcm9wLmRpcjtcblxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNsc0Ryb3AgJiYgYWRkQ2xhc3MoJGVsLCAoKHRoaXMuY2xzRHJvcCkgKyBcIi1kcm9wYmFyXCIpKTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoZGlyID09PSAnYm90dG9tJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50cmFuc2l0aW9uVG8oJGVsLm9mZnNldEhlaWdodCArIHRvRmxvYXQoY3NzKCRlbCwgJ21hcmdpblRvcCcpKSArIHRvRmxvYXQoY3NzKCRlbCwgJ21hcmdpbkJvdHRvbScpKSwgJGVsKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnYmVmb3JlaGlkZScsXG5cbiAgICAgICAgICAgICAgICBmaWx0ZXI6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5kcm9wYmFyO1xuICAgICAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgICAgICBoYW5kbGVyOiBmdW5jdGlvbihlLCByZWYpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyICRlbCA9IHJlZi4kZWw7XG5cblxuICAgICAgICAgICAgICAgICAgICB2YXIgYWN0aXZlID0gdGhpcy5nZXRBY3RpdmUoKTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAobWF0Y2hlcyh0aGlzLmRyb3BiYXIsICc6aG92ZXInKSAmJiBhY3RpdmUgJiYgYWN0aXZlLiRlbCA9PT0gJGVsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ2hpZGUnLFxuXG4gICAgICAgICAgICAgICAgZmlsdGVyOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZHJvcGJhcjtcbiAgICAgICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICAgICAgaGFuZGxlcjogZnVuY3Rpb24oXywgcmVmKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciAkZWwgPSByZWYuJGVsO1xuXG5cbiAgICAgICAgICAgICAgICAgICAgdmFyIGFjdGl2ZSA9IHRoaXMuZ2V0QWN0aXZlKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKCFhY3RpdmUgfHwgYWN0aXZlICYmIGFjdGl2ZS4kZWwgPT09ICRlbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50cmFuc2l0aW9uVG8oMCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgXSxcblxuICAgICAgICBtZXRob2RzOiB7XG5cbiAgICAgICAgICAgIGdldEFjdGl2ZTogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgdmFyIHJlZiA9IHRoaXMuZHJvcGRvd25zLm1hcCh0aGlzLmdldERyb3Bkb3duKS5maWx0ZXIoZnVuY3Rpb24gKGRyb3ApIHsgcmV0dXJuIGRyb3AuaXNBY3RpdmUoKTsgfSk7XG4gICAgICAgICAgICAgICAgdmFyIGFjdGl2ZSA9IHJlZlswXTtcbiAgICAgICAgICAgICAgICByZXR1cm4gYWN0aXZlICYmIGluY2x1ZGVzKGFjdGl2ZS5tb2RlLCAnaG92ZXInKSAmJiB3aXRoaW4oYWN0aXZlLnRvZ2dsZS4kZWwsIHRoaXMuJGVsKSAmJiBhY3RpdmU7XG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICB0cmFuc2l0aW9uVG86IGZ1bmN0aW9uKG5ld0hlaWdodCwgZWwpIHtcblxuICAgICAgICAgICAgICAgIHZhciByZWYgPSB0aGlzO1xuICAgICAgICAgICAgICAgIHZhciBkcm9wYmFyID0gcmVmLmRyb3BiYXI7XG4gICAgICAgICAgICAgICAgdmFyIG9sZEhlaWdodCA9IGlzVmlzaWJsZShkcm9wYmFyKSA/IGhlaWdodChkcm9wYmFyKSA6IDA7XG5cbiAgICAgICAgICAgICAgICBlbCA9IG9sZEhlaWdodCA8IG5ld0hlaWdodCAmJiBlbDtcblxuICAgICAgICAgICAgICAgIGNzcyhlbCwgJ2NsaXAnLCAoXCJyZWN0KDAsXCIgKyAoZWwub2Zmc2V0V2lkdGgpICsgXCJweCxcIiArIG9sZEhlaWdodCArIFwicHgsMClcIikpO1xuXG4gICAgICAgICAgICAgICAgaGVpZ2h0KGRyb3BiYXIsIG9sZEhlaWdodCk7XG5cbiAgICAgICAgICAgICAgICBUcmFuc2l0aW9uLmNhbmNlbChbZWwsIGRyb3BiYXJdKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGwoW1xuICAgICAgICAgICAgICAgICAgICBUcmFuc2l0aW9uLnN0YXJ0KGRyb3BiYXIsIHtoZWlnaHQ6IG5ld0hlaWdodH0sIHRoaXMuZHVyYXRpb24pLFxuICAgICAgICAgICAgICAgICAgICBUcmFuc2l0aW9uLnN0YXJ0KGVsLCB7Y2xpcDogKFwicmVjdCgwLFwiICsgKGVsLm9mZnNldFdpZHRoKSArIFwicHgsXCIgKyBuZXdIZWlnaHQgKyBcInB4LDApXCIpfSwgdGhpcy5kdXJhdGlvbilcbiAgICAgICAgICAgICAgICBdKVxuICAgICAgICAgICAgICAgICAgICAuY2F0Y2gobm9vcClcbiAgICAgICAgICAgICAgICAgICAgLnRoZW4oZnVuY3Rpb24gKCkgeyByZXR1cm4gY3NzKGVsLCB7Y2xpcDogJyd9KTsgfSk7XG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICBnZXREcm9wZG93bjogZnVuY3Rpb24oZWwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy4kZ2V0Q29tcG9uZW50KGVsLCAnZHJvcCcpIHx8IHRoaXMuJGdldENvbXBvbmVudChlbCwgJ2Ryb3Bkb3duJyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfVxuXG4gICAgfTtcblxuICAgIHZhciBzY3JvbGw7XG5cbiAgICB2YXIgT2ZmY2FudmFzID0ge1xuXG4gICAgICAgIG1peGluczogW01vZGFsXSxcblxuICAgICAgICBhcmdzOiAnbW9kZScsXG5cbiAgICAgICAgcHJvcHM6IHtcbiAgICAgICAgICAgIGNvbnRlbnQ6IFN0cmluZyxcbiAgICAgICAgICAgIG1vZGU6IFN0cmluZyxcbiAgICAgICAgICAgIGZsaXA6IEJvb2xlYW4sXG4gICAgICAgICAgICBvdmVybGF5OiBCb29sZWFuXG4gICAgICAgIH0sXG5cbiAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgY29udGVudDogJy51ay1vZmZjYW52YXMtY29udGVudCcsXG4gICAgICAgICAgICBtb2RlOiAnc2xpZGUnLFxuICAgICAgICAgICAgZmxpcDogZmFsc2UsXG4gICAgICAgICAgICBvdmVybGF5OiBmYWxzZSxcbiAgICAgICAgICAgIGNsc1BhZ2U6ICd1ay1vZmZjYW52YXMtcGFnZScsXG4gICAgICAgICAgICBjbHNDb250YWluZXI6ICd1ay1vZmZjYW52YXMtY29udGFpbmVyJyxcbiAgICAgICAgICAgIHNlbFBhbmVsOiAnLnVrLW9mZmNhbnZhcy1iYXInLFxuICAgICAgICAgICAgY2xzRmxpcDogJ3VrLW9mZmNhbnZhcy1mbGlwJyxcbiAgICAgICAgICAgIGNsc0NvbnRlbnQ6ICd1ay1vZmZjYW52YXMtY29udGVudCcsXG4gICAgICAgICAgICBjbHNDb250ZW50QW5pbWF0aW9uOiAndWstb2ZmY2FudmFzLWNvbnRlbnQtYW5pbWF0aW9uJyxcbiAgICAgICAgICAgIGNsc1NpZGViYXJBbmltYXRpb246ICd1ay1vZmZjYW52YXMtYmFyLWFuaW1hdGlvbicsXG4gICAgICAgICAgICBjbHNNb2RlOiAndWstb2ZmY2FudmFzJyxcbiAgICAgICAgICAgIGNsc092ZXJsYXk6ICd1ay1vZmZjYW52YXMtb3ZlcmxheScsXG4gICAgICAgICAgICBzZWxDbG9zZTogJy51ay1vZmZjYW52YXMtY2xvc2UnXG4gICAgICAgIH0sXG5cbiAgICAgICAgY29tcHV0ZWQ6IHtcblxuICAgICAgICAgICAgY29udGVudDogZnVuY3Rpb24ocmVmKSB7XG4gICAgICAgICAgICAgICAgdmFyIGNvbnRlbnQgPSByZWYuY29udGVudDtcblxuICAgICAgICAgICAgICAgIHJldHVybiAkKGNvbnRlbnQpIHx8IGRvY3VtZW50LmJvZHk7XG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICBjbHNGbGlwOiBmdW5jdGlvbihyZWYpIHtcbiAgICAgICAgICAgICAgICB2YXIgZmxpcCA9IHJlZi5mbGlwO1xuICAgICAgICAgICAgICAgIHZhciBjbHNGbGlwID0gcmVmLmNsc0ZsaXA7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gZmxpcCA/IGNsc0ZsaXAgOiAnJztcbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIGNsc092ZXJsYXk6IGZ1bmN0aW9uKHJlZikge1xuICAgICAgICAgICAgICAgIHZhciBvdmVybGF5ID0gcmVmLm92ZXJsYXk7XG4gICAgICAgICAgICAgICAgdmFyIGNsc092ZXJsYXkgPSByZWYuY2xzT3ZlcmxheTtcblxuICAgICAgICAgICAgICAgIHJldHVybiBvdmVybGF5ID8gY2xzT3ZlcmxheSA6ICcnO1xuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgY2xzTW9kZTogZnVuY3Rpb24ocmVmKSB7XG4gICAgICAgICAgICAgICAgdmFyIG1vZGUgPSByZWYubW9kZTtcbiAgICAgICAgICAgICAgICB2YXIgY2xzTW9kZSA9IHJlZi5jbHNNb2RlO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIChjbHNNb2RlICsgXCItXCIgKyBtb2RlKTtcbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIGNsc1NpZGViYXJBbmltYXRpb246IGZ1bmN0aW9uKHJlZikge1xuICAgICAgICAgICAgICAgIHZhciBtb2RlID0gcmVmLm1vZGU7XG4gICAgICAgICAgICAgICAgdmFyIGNsc1NpZGViYXJBbmltYXRpb24gPSByZWYuY2xzU2lkZWJhckFuaW1hdGlvbjtcblxuICAgICAgICAgICAgICAgIHJldHVybiBtb2RlID09PSAnbm9uZScgfHwgbW9kZSA9PT0gJ3JldmVhbCcgPyAnJyA6IGNsc1NpZGViYXJBbmltYXRpb247XG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICBjbHNDb250ZW50QW5pbWF0aW9uOiBmdW5jdGlvbihyZWYpIHtcbiAgICAgICAgICAgICAgICB2YXIgbW9kZSA9IHJlZi5tb2RlO1xuICAgICAgICAgICAgICAgIHZhciBjbHNDb250ZW50QW5pbWF0aW9uID0gcmVmLmNsc0NvbnRlbnRBbmltYXRpb247XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gbW9kZSAhPT0gJ3B1c2gnICYmIG1vZGUgIT09ICdyZXZlYWwnID8gJycgOiBjbHNDb250ZW50QW5pbWF0aW9uO1xuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgdHJhbnNpdGlvbkVsZW1lbnQ6IGZ1bmN0aW9uKHJlZikge1xuICAgICAgICAgICAgICAgIHZhciBtb2RlID0gcmVmLm1vZGU7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gbW9kZSA9PT0gJ3JldmVhbCcgPyB0aGlzLnBhbmVsLnBhcmVudE5vZGUgOiB0aGlzLnBhbmVsO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIH0sXG5cbiAgICAgICAgdXBkYXRlOiB7XG5cbiAgICAgICAgICAgIHdyaXRlOiBmdW5jdGlvbigpIHtcblxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmdldEFjdGl2ZSgpID09PSB0aGlzKSB7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMub3ZlcmxheSB8fCB0aGlzLmNsc0NvbnRlbnRBbmltYXRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoKHRoaXMuY29udGVudCwgd2lkdGgod2luZG93KSAtIHRoaXMuc2Nyb2xsYmFyV2lkdGgpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMub3ZlcmxheSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0KHRoaXMuY29udGVudCwgaGVpZ2h0KHdpbmRvdykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNjcm9sbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29udGVudC5zY3JvbGxUb3AgPSBzY3JvbGwueTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICBldmVudHM6IFsncmVzaXplJ11cblxuICAgICAgICB9LFxuXG4gICAgICAgIGV2ZW50czogW1xuXG4gICAgICAgICAgICB7XG5cbiAgICAgICAgICAgICAgICBuYW1lOiAnY2xpY2snLFxuXG4gICAgICAgICAgICAgICAgZGVsZWdhdGU6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ2FbaHJlZl49XCIjXCJdJztcbiAgICAgICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICAgICAgaGFuZGxlcjogZnVuY3Rpb24ocmVmKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBjdXJyZW50ID0gcmVmLmN1cnJlbnQ7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnQuaGFzaCAmJiAkKGN1cnJlbnQuaGFzaCwgdGhpcy5jb250ZW50KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2Nyb2xsID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaGlkZSgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICB7XG5cbiAgICAgICAgICAgICAgICBuYW1lOiAnYmVmb3Jlc2Nyb2xsJyxcblxuICAgICAgICAgICAgICAgIGZpbHRlcjogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm92ZXJsYXk7XG4gICAgICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgICAgIGhhbmRsZXI6IGZ1bmN0aW9uKGUsIHNjcm9sbCwgdGFyZ2V0KSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzY3JvbGwgJiYgdGFyZ2V0ICYmIHRoaXMuaXNUb2dnbGVkKCkgJiYgJCh0YXJnZXQsIHRoaXMuY29udGVudCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uY2UodGhpcy4kZWwsICdoaWRkZW4nLCBmdW5jdGlvbiAoKSB7IHJldHVybiBzY3JvbGwuc2Nyb2xsVG8odGFyZ2V0KTsgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnc2hvdycsXG5cbiAgICAgICAgICAgICAgICBzZWxmOiB0cnVlLFxuXG4gICAgICAgICAgICAgICAgaGFuZGxlcjogZnVuY3Rpb24oKSB7XG5cbiAgICAgICAgICAgICAgICAgICAgc2Nyb2xsID0gc2Nyb2xsIHx8IHt4OiB3aW5kb3cucGFnZVhPZmZzZXQsIHk6IHdpbmRvdy5wYWdlWU9mZnNldH07XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMubW9kZSA9PT0gJ3JldmVhbCcgJiYgIWhhc0NsYXNzKHRoaXMucGFuZWwsIHRoaXMuY2xzTW9kZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdyYXBBbGwodGhpcy5wYW5lbCwgJzxkaXY+Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBhZGRDbGFzcyh0aGlzLnBhbmVsLnBhcmVudE5vZGUsIHRoaXMuY2xzTW9kZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBjc3MoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LCAnb3ZlcmZsb3dZJywgKCF0aGlzLmNsc0NvbnRlbnRBbmltYXRpb24gfHwgdGhpcy5mbGlwKSAmJiB0aGlzLnNjcm9sbGJhcldpZHRoICYmIHRoaXMub3ZlcmxheSA/ICdzY3JvbGwnIDogJycpO1xuICAgICAgICAgICAgICAgICAgICBhZGRDbGFzcyhkb2N1bWVudC5ib2R5LCB0aGlzLmNsc0NvbnRhaW5lciwgdGhpcy5jbHNGbGlwLCB0aGlzLmNsc092ZXJsYXkpO1xuICAgICAgICAgICAgICAgICAgICBoZWlnaHQoZG9jdW1lbnQuYm9keSk7IC8vIGZvcmNlIHJlZmxvd1xuICAgICAgICAgICAgICAgICAgICBhZGRDbGFzcyh0aGlzLmNvbnRlbnQsIHRoaXMuY2xzQ29udGVudEFuaW1hdGlvbik7XG4gICAgICAgICAgICAgICAgICAgIGFkZENsYXNzKHRoaXMucGFuZWwsIHRoaXMuY2xzU2lkZWJhckFuaW1hdGlvbiwgdGhpcy5tb2RlICE9PSAncmV2ZWFsJyA/IHRoaXMuY2xzTW9kZSA6ICcnKTtcbiAgICAgICAgICAgICAgICAgICAgYWRkQ2xhc3ModGhpcy4kZWwsIHRoaXMuY2xzT3ZlcmxheSk7XG4gICAgICAgICAgICAgICAgICAgIGNzcyh0aGlzLiRlbCwgJ2Rpc3BsYXknLCAnYmxvY2snKTtcbiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0KHRoaXMuJGVsKTsgLy8gZm9yY2UgcmVmbG93XG5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ2hpZGUnLFxuXG4gICAgICAgICAgICAgICAgc2VsZjogdHJ1ZSxcblxuICAgICAgICAgICAgICAgIGhhbmRsZXI6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICByZW1vdmVDbGFzcyh0aGlzLmNvbnRlbnQsIHRoaXMuY2xzQ29udGVudEFuaW1hdGlvbik7XG5cbiAgICAgICAgICAgICAgICAgICAgdmFyIGFjdGl2ZSA9IHRoaXMuZ2V0QWN0aXZlKCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLm1vZGUgPT09ICdub25lJyB8fCBhY3RpdmUgJiYgYWN0aXZlICE9PSB0aGlzICYmIGFjdGl2ZSAhPT0gdGhpcy5wcmV2KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0cmlnZ2VyKHRoaXMucGFuZWwsICd0cmFuc2l0aW9uZW5kJyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ2hpZGRlbicsXG5cbiAgICAgICAgICAgICAgICBzZWxmOiB0cnVlLFxuXG4gICAgICAgICAgICAgICAgaGFuZGxlcjogZnVuY3Rpb24oKSB7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMubW9kZSA9PT0gJ3JldmVhbCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHVud3JhcCh0aGlzLnBhbmVsKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5vdmVybGF5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzY3JvbGwgPSB7eDogd2luZG93LnBhZ2VYT2Zmc2V0LCB5OiB3aW5kb3cucGFnZVlPZmZzZXR9O1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFzY3JvbGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZWYgPSB0aGlzLmNvbnRlbnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgeCA9IHJlZi5zY3JvbGxMZWZ0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHkgPSByZWYuc2Nyb2xsVG9wO1xuICAgICAgICAgICAgICAgICAgICAgICAgc2Nyb2xsID0ge3g6IHgsIHk6IHl9O1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgcmVtb3ZlQ2xhc3ModGhpcy5wYW5lbCwgdGhpcy5jbHNTaWRlYmFyQW5pbWF0aW9uLCB0aGlzLmNsc01vZGUpO1xuICAgICAgICAgICAgICAgICAgICByZW1vdmVDbGFzcyh0aGlzLiRlbCwgdGhpcy5jbHNPdmVybGF5KTtcbiAgICAgICAgICAgICAgICAgICAgY3NzKHRoaXMuJGVsLCAnZGlzcGxheScsICcnKTtcbiAgICAgICAgICAgICAgICAgICAgcmVtb3ZlQ2xhc3MoZG9jdW1lbnQuYm9keSwgdGhpcy5jbHNDb250YWluZXIsIHRoaXMuY2xzRmxpcCwgdGhpcy5jbHNPdmVybGF5KTtcbiAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5zY3JvbGxUb3AgPSBzY3JvbGwueTtcblxuICAgICAgICAgICAgICAgICAgICBjc3MoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LCAnb3ZlcmZsb3dZJywgJycpO1xuXG4gICAgICAgICAgICAgICAgICAgIHdpZHRoKHRoaXMuY29udGVudCwgJycpO1xuICAgICAgICAgICAgICAgICAgICBoZWlnaHQodGhpcy5jb250ZW50LCAnJyk7XG5cbiAgICAgICAgICAgICAgICAgICAgd2luZG93LnNjcm9sbChzY3JvbGwueCwgc2Nyb2xsLnkpO1xuXG4gICAgICAgICAgICAgICAgICAgIHNjcm9sbCA9IG51bGw7XG5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ3N3aXBlTGVmdCBzd2lwZVJpZ2h0JyxcblxuICAgICAgICAgICAgICAgIGhhbmRsZXI6IGZ1bmN0aW9uKGUpIHtcblxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5pc1RvZ2dsZWQoKSAmJiBpc1RvdWNoKGUpICYmIChlLnR5cGUgPT09ICdzd2lwZUxlZnQnICYmICF0aGlzLmZsaXAgfHwgZS50eXBlID09PSAnc3dpcGVSaWdodCcgJiYgdGhpcy5mbGlwKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5oaWRlKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICBdXG5cbiAgICB9O1xuXG4gICAgdmFyIE92ZXJmbG93QXV0byA9IHtcblxuICAgICAgICBtaXhpbnM6IFtDbGFzc10sXG5cbiAgICAgICAgY29tcHV0ZWQ6IHtcblxuICAgICAgICAgICAgbW9kYWw6IGZ1bmN0aW9uKF8sICRlbCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBjbG9zZXN0KCRlbCwgJy51ay1tb2RhbCcpO1xuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgcGFuZWw6IGZ1bmN0aW9uKF8sICRlbCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBjbG9zZXN0KCRlbCwgJy51ay1tb2RhbC1kaWFsb2cnKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9LFxuXG4gICAgICAgIGNvbm5lY3RlZDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBjc3ModGhpcy4kZWwsICdtaW5IZWlnaHQnLCAxNTApO1xuICAgICAgICB9LFxuXG4gICAgICAgIHVwZGF0ZToge1xuXG4gICAgICAgICAgICB3cml0ZTogZnVuY3Rpb24oKSB7XG5cbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMucGFuZWwgfHwgIXRoaXMubW9kYWwpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHZhciBjdXJyZW50ID0gY3NzKHRoaXMuJGVsLCAnbWF4SGVpZ2h0Jyk7XG5cbiAgICAgICAgICAgICAgICBjc3MoY3NzKHRoaXMuJGVsLCAnbWF4SGVpZ2h0JywgMTUwKSwgJ21heEhlaWdodCcsIE1hdGgubWF4KDE1MCwgMTUwICsgaGVpZ2h0KHRoaXMubW9kYWwpIC0gdGhpcy5wYW5lbC5vZmZzZXRIZWlnaHQpKTtcbiAgICAgICAgICAgICAgICBpZiAoY3VycmVudCAhPT0gY3NzKHRoaXMuJGVsLCAnbWF4SGVpZ2h0JykpIHtcbiAgICAgICAgICAgICAgICAgICAgdHJpZ2dlcih0aGlzLiRlbCwgJ3Jlc2l6ZScpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIGV2ZW50czogWydsb2FkJywgJ3Jlc2l6ZSddXG5cbiAgICAgICAgfVxuXG4gICAgfTtcblxuICAgIHZhciBSZXNwb25zaXZlID0ge1xuXG4gICAgICAgIHByb3BzOiBbJ3dpZHRoJywgJ2hlaWdodCddLFxuXG4gICAgICAgIGNvbm5lY3RlZDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBhZGRDbGFzcyh0aGlzLiRlbCwgJ3VrLXJlc3BvbnNpdmUtd2lkdGgnKTtcbiAgICAgICAgfSxcblxuICAgICAgICB1cGRhdGU6IHtcblxuICAgICAgICAgICAgcmVhZDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlzVmlzaWJsZSh0aGlzLiRlbCkgJiYgdGhpcy53aWR0aCAmJiB0aGlzLmhlaWdodFxuICAgICAgICAgICAgICAgICAgICA/IHt3aWR0aDogd2lkdGgodGhpcy4kZWwucGFyZW50Tm9kZSksIGhlaWdodDogdGhpcy5oZWlnaHR9XG4gICAgICAgICAgICAgICAgICAgIDogZmFsc2U7XG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICB3cml0ZTogZnVuY3Rpb24oZGltKSB7XG4gICAgICAgICAgICAgICAgaGVpZ2h0KHRoaXMuJGVsLCBEaW1lbnNpb25zLmNvbnRhaW4oe2hlaWdodDogdGhpcy5oZWlnaHQsIHdpZHRoOiB0aGlzLndpZHRofSwgZGltKS5oZWlnaHQpO1xuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgZXZlbnRzOiBbJ2xvYWQnLCAncmVzaXplJ11cblxuICAgICAgICB9XG5cbiAgICB9O1xuXG4gICAgdmFyIFNjcm9sbCA9IHtcblxuICAgICAgICBwcm9wczoge1xuICAgICAgICAgICAgZHVyYXRpb246IE51bWJlcixcbiAgICAgICAgICAgIG9mZnNldDogTnVtYmVyXG4gICAgICAgIH0sXG5cbiAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgZHVyYXRpb246IDEwMDAsXG4gICAgICAgICAgICBvZmZzZXQ6IDBcbiAgICAgICAgfSxcblxuICAgICAgICBtZXRob2RzOiB7XG5cbiAgICAgICAgICAgIHNjcm9sbFRvOiBmdW5jdGlvbihlbCkge1xuICAgICAgICAgICAgICAgIHZhciB0aGlzJDEgPSB0aGlzO1xuXG5cbiAgICAgICAgICAgICAgICBlbCA9IGVsICYmICQoZWwpIHx8IGRvY3VtZW50LmJvZHk7XG5cbiAgICAgICAgICAgICAgICB2YXIgZG9jSGVpZ2h0ID0gaGVpZ2h0KGRvY3VtZW50KTtcbiAgICAgICAgICAgICAgICB2YXIgd2luSGVpZ2h0ID0gaGVpZ2h0KHdpbmRvdyk7XG5cbiAgICAgICAgICAgICAgICB2YXIgdGFyZ2V0ID0gb2Zmc2V0KGVsKS50b3AgLSB0aGlzLm9mZnNldDtcbiAgICAgICAgICAgICAgICBpZiAodGFyZ2V0ICsgd2luSGVpZ2h0ID4gZG9jSGVpZ2h0KSB7XG4gICAgICAgICAgICAgICAgICAgIHRhcmdldCA9IGRvY0hlaWdodCAtIHdpbkhlaWdodDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoIXRyaWdnZXIodGhpcy4kZWwsICdiZWZvcmVzY3JvbGwnLCBbdGhpcywgZWxdKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdmFyIHN0YXJ0ID0gRGF0ZS5ub3coKTtcbiAgICAgICAgICAgICAgICB2YXIgc3RhcnRZID0gd2luZG93LnBhZ2VZT2Zmc2V0O1xuICAgICAgICAgICAgICAgIHZhciBzdGVwID0gZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICAgICAgICAgIHZhciBjdXJyZW50WSA9IHN0YXJ0WSArICh0YXJnZXQgLSBzdGFydFkpICogZWFzZShjbGFtcCgoRGF0ZS5ub3coKSAtIHN0YXJ0KSAvIHRoaXMkMS5kdXJhdGlvbikpO1xuXG4gICAgICAgICAgICAgICAgICAgIHdpbmRvdy5zY3JvbGwod2luZG93LnBhZ2VYT2Zmc2V0LCBjdXJyZW50WSk7XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gc2Nyb2xsIG1vcmUgaWYgd2UgaGF2ZSBub3QgcmVhY2hlZCBvdXIgZGVzdGluYXRpb25cbiAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRZICE9PSB0YXJnZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZShzdGVwKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyaWdnZXIodGhpcyQxLiRlbCwgJ3Njcm9sbGVkJywgW3RoaXMkMSwgZWxdKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIHN0ZXAoKTtcblxuICAgICAgICAgICAgfVxuXG4gICAgICAgIH0sXG5cbiAgICAgICAgZXZlbnRzOiB7XG5cbiAgICAgICAgICAgIGNsaWNrOiBmdW5jdGlvbihlKSB7XG5cbiAgICAgICAgICAgICAgICBpZiAoZS5kZWZhdWx0UHJldmVudGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgdGhpcy5zY3JvbGxUbyhlc2NhcGUodGhpcy4kZWwuaGFzaCkuc3Vic3RyKDEpKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9XG5cbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gZWFzZShrKSB7XG4gICAgICAgIHJldHVybiAwLjUgKiAoMSAtIE1hdGguY29zKE1hdGguUEkgKiBrKSk7XG4gICAgfVxuXG4gICAgdmFyIFNjcm9sbHNweSA9IHtcblxuICAgICAgICBhcmdzOiAnY2xzJyxcblxuICAgICAgICBwcm9wczoge1xuICAgICAgICAgICAgY2xzOiAnbGlzdCcsXG4gICAgICAgICAgICB0YXJnZXQ6IFN0cmluZyxcbiAgICAgICAgICAgIGhpZGRlbjogQm9vbGVhbixcbiAgICAgICAgICAgIG9mZnNldFRvcDogTnVtYmVyLFxuICAgICAgICAgICAgb2Zmc2V0TGVmdDogTnVtYmVyLFxuICAgICAgICAgICAgcmVwZWF0OiBCb29sZWFuLFxuICAgICAgICAgICAgZGVsYXk6IE51bWJlclxuICAgICAgICB9LFxuXG4gICAgICAgIGRhdGE6IGZ1bmN0aW9uICgpIHsgcmV0dXJuICh7XG4gICAgICAgICAgICBjbHM6IFtdLFxuICAgICAgICAgICAgdGFyZ2V0OiBmYWxzZSxcbiAgICAgICAgICAgIGhpZGRlbjogdHJ1ZSxcbiAgICAgICAgICAgIG9mZnNldFRvcDogMCxcbiAgICAgICAgICAgIG9mZnNldExlZnQ6IDAsXG4gICAgICAgICAgICByZXBlYXQ6IGZhbHNlLFxuICAgICAgICAgICAgZGVsYXk6IDAsXG4gICAgICAgICAgICBpblZpZXdDbGFzczogJ3VrLXNjcm9sbHNweS1pbnZpZXcnXG4gICAgICAgIH0pOyB9LFxuXG4gICAgICAgIGNvbXB1dGVkOiB7XG5cbiAgICAgICAgICAgIGVsZW1lbnRzOiBmdW5jdGlvbihyZWYsICRlbCkge1xuICAgICAgICAgICAgICAgIHZhciB0YXJnZXQgPSByZWYudGFyZ2V0O1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRhcmdldCA/ICQkKHRhcmdldCwgJGVsKSA6IFskZWxdO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIH0sXG5cbiAgICAgICAgdXBkYXRlOiBbXG5cbiAgICAgICAgICAgIHtcblxuICAgICAgICAgICAgICAgIHdyaXRlOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuaGlkZGVuKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjc3MoZmlsdGVyKHRoaXMuZWxlbWVudHMsIChcIjpub3QoLlwiICsgKHRoaXMuaW5WaWV3Q2xhc3MpICsgXCIpXCIpKSwgJ3Zpc2liaWxpdHknLCAnaGlkZGVuJyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIHtcblxuICAgICAgICAgICAgICAgIHJlYWQ6IGZ1bmN0aW9uKGVscykge1xuICAgICAgICAgICAgICAgICAgICB2YXIgdGhpcyQxID0gdGhpcztcblxuXG4gICAgICAgICAgICAgICAgICAgIGlmICghZWxzLmRlbGF5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB0aGlzLmVsZW1lbnRzLmZvckVhY2goZnVuY3Rpb24gKGVsLCBpKSB7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlbERhdGEgPSBlbHNbaV07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZWxEYXRhIHx8IGVsRGF0YS5lbCAhPT0gZWwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2xzID0gZGF0YShlbCwgJ3VrLXNjcm9sbHNweS1jbGFzcycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsRGF0YSA9IHtlbDogZWwsIHRvZ2dsZXM6IGNscyAmJiBjbHMuc3BsaXQoJywnKSB8fCB0aGlzJDEuY2xzfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgZWxEYXRhLnNob3cgPSBpc0luVmlldyhlbCwgdGhpcyQxLm9mZnNldFRvcCwgdGhpcyQxLm9mZnNldExlZnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZWxzW2ldID0gZWxEYXRhO1xuXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgICAgICB3cml0ZTogZnVuY3Rpb24oZWxzKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciB0aGlzJDEgPSB0aGlzO1xuXG5cbiAgICAgICAgICAgICAgICAgICAgLy8gTGV0IGNoaWxkIGNvbXBvbmVudHMgYmUgYXBwbGllZCBhdCBsZWFzdCBvbmNlIGZpcnN0XG4gICAgICAgICAgICAgICAgICAgIGlmICghZWxzLmRlbGF5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiRlbWl0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZWxzLmRlbGF5ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHZhciBpbmRleCQkMSA9IHRoaXMuZWxlbWVudHMubGVuZ3RoID09PSAxID8gMSA6IDA7XG5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lbGVtZW50cy5mb3JFYWNoKGZ1bmN0aW9uIChlbCwgaSkge1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZWxEYXRhID0gZWxzW2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNscyA9IGVsRGF0YS50b2dnbGVzW2ldIHx8IGVsRGF0YS50b2dnbGVzWzBdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZWxEYXRhLnNob3cgJiYgIWVsRGF0YS5pbnZpZXcgJiYgIWVsRGF0YS50aW1lcikge1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNob3cgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzcyhlbCwgJ3Zpc2liaWxpdHknLCAnJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZENsYXNzKGVsLCB0aGlzJDEuaW5WaWV3Q2xhc3MpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2dnbGVDbGFzcyhlbCwgY2xzKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmlnZ2VyKGVsLCAnaW52aWV3Jyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcyQxLiR1cGRhdGUoZWwpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsRGF0YS5pbnZpZXcgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgZWxEYXRhLnRpbWVyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcyQxLmRlbGF5ICYmIGluZGV4JCQxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsRGF0YS50aW1lciA9IHNldFRpbWVvdXQoc2hvdywgdGhpcyQxLmRlbGF5ICogaW5kZXgkJDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3coKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleCQkMSsrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFlbERhdGEuc2hvdyAmJiBlbERhdGEuaW52aWV3ICYmIHRoaXMkMS5yZXBlYXQpIHtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlbERhdGEudGltZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KGVsRGF0YS50aW1lcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBlbERhdGEudGltZXI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3NzKGVsLCAndmlzaWJpbGl0eScsIHRoaXMkMS5oaWRkZW4gPyAnaGlkZGVuJyA6ICcnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVDbGFzcyhlbCwgdGhpcyQxLmluVmlld0NsYXNzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2dnbGVDbGFzcyhlbCwgY2xzKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyaWdnZXIoZWwsICdvdXR2aWV3Jyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzJDEuJHVwZGF0ZShlbCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbERhdGEuaW52aWV3ID0gZmFsc2U7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgICAgIGV2ZW50czogWydzY3JvbGwnLCAnbG9hZCcsICdyZXNpemUnXVxuXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgXVxuXG4gICAgfTtcblxuICAgIHZhciBTY3JvbGxzcHlOYXYgPSB7XG5cbiAgICAgICAgcHJvcHM6IHtcbiAgICAgICAgICAgIGNsczogU3RyaW5nLFxuICAgICAgICAgICAgY2xvc2VzdDogU3RyaW5nLFxuICAgICAgICAgICAgc2Nyb2xsOiBCb29sZWFuLFxuICAgICAgICAgICAgb3ZlcmZsb3c6IEJvb2xlYW4sXG4gICAgICAgICAgICBvZmZzZXQ6IE51bWJlclxuICAgICAgICB9LFxuXG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgIGNsczogJ3VrLWFjdGl2ZScsXG4gICAgICAgICAgICBjbG9zZXN0OiBmYWxzZSxcbiAgICAgICAgICAgIHNjcm9sbDogZmFsc2UsXG4gICAgICAgICAgICBvdmVyZmxvdzogdHJ1ZSxcbiAgICAgICAgICAgIG9mZnNldDogMFxuICAgICAgICB9LFxuXG4gICAgICAgIGNvbXB1dGVkOiB7XG5cbiAgICAgICAgICAgIGxpbmtzOiBmdW5jdGlvbihfLCAkZWwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJCQoJ2FbaHJlZl49XCIjXCJdJywgJGVsKS5maWx0ZXIoZnVuY3Rpb24gKGVsKSB7IHJldHVybiBlbC5oYXNoOyB9KTtcbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIGVsZW1lbnRzOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jbG9zZXN0ID8gY2xvc2VzdCh0aGlzLmxpbmtzLCB0aGlzLmNsb3Nlc3QpIDogdGhpcy5saW5rcztcbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIHRhcmdldHM6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAkJCh0aGlzLmxpbmtzLm1hcChmdW5jdGlvbiAoZWwpIHsgcmV0dXJuIGVsLmhhc2g7IH0pLmpvaW4oJywnKSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfSxcblxuICAgICAgICB1cGRhdGU6IFtcblxuICAgICAgICAgICAge1xuXG4gICAgICAgICAgICAgICAgcmVhZDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnNjcm9sbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4kY3JlYXRlKCdzY3JvbGwnLCB0aGlzLmxpbmtzLCB7b2Zmc2V0OiB0aGlzLm9mZnNldCB8fCAwfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIHtcblxuICAgICAgICAgICAgICAgIHJlYWQ6IGZ1bmN0aW9uKGRhdGEkJDEpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHRoaXMkMSA9IHRoaXM7XG5cblxuICAgICAgICAgICAgICAgICAgICB2YXIgc2Nyb2xsID0gd2luZG93LnBhZ2VZT2Zmc2V0ICsgdGhpcy5vZmZzZXQgKyAxO1xuICAgICAgICAgICAgICAgICAgICB2YXIgbWF4ID0gaGVpZ2h0KGRvY3VtZW50KSAtIGhlaWdodCh3aW5kb3cpICsgdGhpcy5vZmZzZXQ7XG5cbiAgICAgICAgICAgICAgICAgICAgZGF0YSQkMS5hY3RpdmUgPSBmYWxzZTtcblxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRhcmdldHMuZXZlcnkoZnVuY3Rpb24gKGVsLCBpKSB7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZWYgPSBvZmZzZXQoZWwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRvcCA9IHJlZi50b3A7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbGFzdCA9IGkgKyAxID09PSB0aGlzJDEudGFyZ2V0cy5sZW5ndGg7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGhpcyQxLm92ZXJmbG93ICYmIChpID09PSAwICYmIHRvcCA+IHNjcm9sbCB8fCBsYXN0ICYmIHRvcCArIGVsLm9mZnNldFRvcCA8IHNjcm9sbCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbGFzdCAmJiBvZmZzZXQodGhpcyQxLnRhcmdldHNbaSArIDFdKS50b3AgPD0gc2Nyb2xsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzY3JvbGwgPj0gbWF4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IHRoaXMkMS50YXJnZXRzLmxlbmd0aCAtIDE7IGogPiBpOyBqLS0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzSW5WaWV3KHRoaXMkMS50YXJnZXRzW2pdKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWwgPSB0aGlzJDEudGFyZ2V0c1tqXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gIShkYXRhJCQxLmFjdGl2ZSA9ICQoZmlsdGVyKHRoaXMkMS5saW5rcywgKFwiW2hyZWY9XFxcIiNcIiArIChlbC5pZCkgKyBcIlxcXCJdXCIpKSkpO1xuXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgICAgIHdyaXRlOiBmdW5jdGlvbihyZWYpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGFjdGl2ZSA9IHJlZi5hY3RpdmU7XG5cblxuICAgICAgICAgICAgICAgICAgICB0aGlzLmxpbmtzLmZvckVhY2goZnVuY3Rpb24gKGVsKSB7IHJldHVybiBlbC5ibHVyKCk7IH0pO1xuICAgICAgICAgICAgICAgICAgICByZW1vdmVDbGFzcyh0aGlzLmVsZW1lbnRzLCB0aGlzLmNscyk7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGFjdGl2ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHJpZ2dlcih0aGlzLiRlbCwgJ2FjdGl2ZScsIFthY3RpdmUsIGFkZENsYXNzKHRoaXMuY2xvc2VzdCA/IGNsb3Nlc3QoYWN0aXZlLCB0aGlzLmNsb3Nlc3QpIDogYWN0aXZlLCB0aGlzLmNscyldKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgICAgIGV2ZW50czogWydzY3JvbGwnLCAnbG9hZCcsICdyZXNpemUnXVxuXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgXVxuXG4gICAgfTtcblxuICAgIHZhciBTdGlja3kgPSB7XG5cbiAgICAgICAgbWl4aW5zOiBbQ2xhc3NdLFxuXG4gICAgICAgIGF0dHJzOiB0cnVlLFxuXG4gICAgICAgIHByb3BzOiB7XG4gICAgICAgICAgICB0b3A6IG51bGwsXG4gICAgICAgICAgICBib3R0b206IEJvb2xlYW4sXG4gICAgICAgICAgICBvZmZzZXQ6IE51bWJlcixcbiAgICAgICAgICAgIGFuaW1hdGlvbjogU3RyaW5nLFxuICAgICAgICAgICAgY2xzQWN0aXZlOiBTdHJpbmcsXG4gICAgICAgICAgICBjbHNJbmFjdGl2ZTogU3RyaW5nLFxuICAgICAgICAgICAgY2xzRml4ZWQ6IFN0cmluZyxcbiAgICAgICAgICAgIGNsc0JlbG93OiBTdHJpbmcsXG4gICAgICAgICAgICBzZWxUYXJnZXQ6IFN0cmluZyxcbiAgICAgICAgICAgIHdpZHRoRWxlbWVudDogQm9vbGVhbixcbiAgICAgICAgICAgIHNob3dPblVwOiBCb29sZWFuLFxuICAgICAgICAgICAgbWVkaWE6ICdtZWRpYScsXG4gICAgICAgICAgICB0YXJnZXRPZmZzZXQ6IE51bWJlclxuICAgICAgICB9LFxuXG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgIHRvcDogMCxcbiAgICAgICAgICAgIGJvdHRvbTogZmFsc2UsXG4gICAgICAgICAgICBvZmZzZXQ6IDAsXG4gICAgICAgICAgICBhbmltYXRpb246ICcnLFxuICAgICAgICAgICAgY2xzQWN0aXZlOiAndWstYWN0aXZlJyxcbiAgICAgICAgICAgIGNsc0luYWN0aXZlOiAnJyxcbiAgICAgICAgICAgIGNsc0ZpeGVkOiAndWstc3RpY2t5LWZpeGVkJyxcbiAgICAgICAgICAgIGNsc0JlbG93OiAndWstc3RpY2t5LWJlbG93JyxcbiAgICAgICAgICAgIHNlbFRhcmdldDogJycsXG4gICAgICAgICAgICB3aWR0aEVsZW1lbnQ6IGZhbHNlLFxuICAgICAgICAgICAgc2hvd09uVXA6IGZhbHNlLFxuICAgICAgICAgICAgbWVkaWE6IGZhbHNlLFxuICAgICAgICAgICAgdGFyZ2V0T2Zmc2V0OiBmYWxzZVxuICAgICAgICB9LFxuXG4gICAgICAgIGNvbXB1dGVkOiB7XG5cbiAgICAgICAgICAgIHNlbFRhcmdldDogZnVuY3Rpb24ocmVmLCAkZWwpIHtcbiAgICAgICAgICAgICAgICB2YXIgc2VsVGFyZ2V0ID0gcmVmLnNlbFRhcmdldDtcblxuICAgICAgICAgICAgICAgIHJldHVybiBzZWxUYXJnZXQgJiYgJChzZWxUYXJnZXQsICRlbCkgfHwgJGVsO1xuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgd2lkdGhFbGVtZW50OiBmdW5jdGlvbihyZWYsICRlbCkge1xuICAgICAgICAgICAgICAgIHZhciB3aWR0aEVsZW1lbnQgPSByZWYud2lkdGhFbGVtZW50O1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIHF1ZXJ5KHdpZHRoRWxlbWVudCwgJGVsKSB8fCB0aGlzLnBsYWNlaG9sZGVyO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIH0sXG5cbiAgICAgICAgY29ubmVjdGVkOiBmdW5jdGlvbigpIHtcblxuICAgICAgICAgICAgdGhpcy5wbGFjZWhvbGRlciA9ICQoJysgLnVrLXN0aWNreS1wbGFjZWhvbGRlcicsIHRoaXMuJGVsKSB8fCAkKCc8ZGl2IGNsYXNzPVwidWstc3RpY2t5LXBsYWNlaG9sZGVyXCI+PC9kaXY+Jyk7XG5cbiAgICAgICAgICAgIGlmICghdGhpcy5pc0FjdGl2ZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuaGlkZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuXG4gICAgICAgIGRpc2Nvbm5lY3RlZDogZnVuY3Rpb24oKSB7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLmlzQWN0aXZlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pc0FjdGl2ZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuaGlkZSgpO1xuICAgICAgICAgICAgICAgIHJlbW92ZUNsYXNzKHRoaXMuc2VsVGFyZ2V0LCB0aGlzLmNsc0luYWN0aXZlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmVtb3ZlKHRoaXMucGxhY2Vob2xkZXIpO1xuICAgICAgICAgICAgdGhpcy5wbGFjZWhvbGRlciA9IG51bGw7XG4gICAgICAgICAgICB0aGlzLndpZHRoRWxlbWVudCA9IG51bGw7XG4gICAgICAgIH0sXG5cbiAgICAgICAgZXZlbnRzOiBbXG5cbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnYWN0aXZlJyxcblxuICAgICAgICAgICAgICAgIHNlbGY6IHRydWUsXG5cbiAgICAgICAgICAgICAgICBoYW5kbGVyOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVwbGFjZUNsYXNzKHRoaXMuc2VsVGFyZ2V0LCB0aGlzLmNsc0luYWN0aXZlLCB0aGlzLmNsc0FjdGl2ZSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ2luYWN0aXZlJyxcblxuICAgICAgICAgICAgICAgIHNlbGY6IHRydWUsXG5cbiAgICAgICAgICAgICAgICBoYW5kbGVyOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVwbGFjZUNsYXNzKHRoaXMuc2VsVGFyZ2V0LCB0aGlzLmNsc0FjdGl2ZSwgdGhpcy5jbHNJbmFjdGl2ZSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICB7XG5cbiAgICAgICAgICAgICAgICBuYW1lOiAnbG9hZCBoYXNoY2hhbmdlIHBvcHN0YXRlJyxcblxuICAgICAgICAgICAgICAgIGVsOiB3aW5kb3csXG5cbiAgICAgICAgICAgICAgICBoYW5kbGVyOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHRoaXMkMSA9IHRoaXM7XG5cblxuICAgICAgICAgICAgICAgICAgICBpZiAoISh0aGlzLnRhcmdldE9mZnNldCAhPT0gZmFsc2UgJiYgbG9jYXRpb24uaGFzaCAmJiB3aW5kb3cucGFnZVlPZmZzZXQgPiAwKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgdmFyIHRhcmdldCA9ICQobG9jYXRpb24uaGFzaCk7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHRhcmdldCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZmFzdGRvbS5yZWFkKGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZWYgPSBvZmZzZXQodGFyZ2V0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdG9wID0gcmVmLnRvcDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZWxUb3AgPSBvZmZzZXQodGhpcyQxLiRlbCkudG9wO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlbEhlaWdodCA9IHRoaXMkMS4kZWwub2Zmc2V0SGVpZ2h0O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMkMS5pc0FjdGl2ZSAmJiBlbFRvcCArIGVsSGVpZ2h0ID49IHRvcCAmJiBlbFRvcCA8PSB0b3AgKyB0YXJnZXQub2Zmc2V0SGVpZ2h0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5zY3JvbGwoMCwgdG9wIC0gZWxIZWlnaHQgLSAoaXNOdW1lcmljKHRoaXMkMS50YXJnZXRPZmZzZXQpID8gdGhpcyQxLnRhcmdldE9mZnNldCA6IDApIC0gdGhpcyQxLm9mZnNldCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgXSxcblxuICAgICAgICB1cGRhdGU6IFtcblxuICAgICAgICAgICAge1xuXG4gICAgICAgICAgICAgICAgd3JpdGU6IGZ1bmN0aW9uKCkge1xuXG4gICAgICAgICAgICAgICAgICAgIHZhciByZWYgPSB0aGlzO1xuICAgICAgICAgICAgICAgICAgICB2YXIgcGxhY2Vob2xkZXIgPSByZWYucGxhY2Vob2xkZXI7XG4gICAgICAgICAgICAgICAgICAgIHZhciBvZmZzZXRIZWlnaHQgPSByZWYuJGVsLm9mZnNldEhlaWdodDtcblxuICAgICAgICAgICAgICAgICAgICBjc3MocGxhY2Vob2xkZXIsIGFzc2lnbihcbiAgICAgICAgICAgICAgICAgICAgICAgIHtoZWlnaHQ6IGNzcyh0aGlzLiRlbCwgJ3Bvc2l0aW9uJykgIT09ICdhYnNvbHV0ZScgPyBvZmZzZXRIZWlnaHQgOiAnJ30sXG4gICAgICAgICAgICAgICAgICAgICAgICBjc3ModGhpcy4kZWwsIFsnbWFyZ2luVG9wJywgJ21hcmdpbkJvdHRvbScsICdtYXJnaW5MZWZ0JywgJ21hcmdpblJpZ2h0J10pXG4gICAgICAgICAgICAgICAgICAgICkpO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmICghd2l0aGluKHBsYWNlaG9sZGVyLCBkb2N1bWVudCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFmdGVyKHRoaXMuJGVsLCBwbGFjZWhvbGRlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICBhdHRyKHBsYWNlaG9sZGVyLCAnaGlkZGVuJywgJycpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy50b3BPZmZzZXQgPSBvZmZzZXQodGhpcy5pc0FjdGl2ZSA/IHBsYWNlaG9sZGVyIDogdGhpcy4kZWwpLnRvcDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ib3R0b21PZmZzZXQgPSB0aGlzLnRvcE9mZnNldCArIG9mZnNldEhlaWdodDtcblxuICAgICAgICAgICAgICAgICAgICB2YXIgYm90dG9tID0gcGFyc2VQcm9wKCdib3R0b20nLCB0aGlzKTtcblxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRvcCA9IE1hdGgubWF4KHRvRmxvYXQocGFyc2VQcm9wKCd0b3AnLCB0aGlzKSksIHRoaXMudG9wT2Zmc2V0KSAtIHRoaXMub2Zmc2V0O1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmJvdHRvbSA9IGJvdHRvbSAmJiBib3R0b20gLSBvZmZzZXRIZWlnaHQ7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaW5hY3RpdmUgPSB0aGlzLm1lZGlhICYmICF3aW5kb3cubWF0Y2hNZWRpYSh0aGlzLm1lZGlhKS5tYXRjaGVzO1xuXG4gICAgICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgICAgIGV2ZW50czogWydsb2FkJywgJ3Jlc2l6ZSddXG5cbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIHtcblxuICAgICAgICAgICAgICAgIHJlYWQ6IGZ1bmN0aW9uKF8sIHJlZikge1xuICAgICAgICAgICAgICAgICAgICB2YXIgc2Nyb2xsWSA9IHJlZi5zY3JvbGxZOyBpZiAoIHNjcm9sbFkgPT09IHZvaWQgMCApIHNjcm9sbFkgPSB3aW5kb3cucGFnZVlPZmZzZXQ7XG5cblxuICAgICAgICAgICAgICAgICAgICB0aGlzLndpZHRoID0gKGlzVmlzaWJsZSh0aGlzLndpZHRoRWxlbWVudCkgPyB0aGlzLndpZHRoRWxlbWVudCA6IHRoaXMuJGVsKS5vZmZzZXRXaWR0aDtcblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2Nyb2xsOiB0aGlzLnNjcm9sbCA9IHNjcm9sbFksXG4gICAgICAgICAgICAgICAgICAgICAgICB2aXNpYmxlOiBpc1Zpc2libGUodGhpcy4kZWwpXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgICAgIHdyaXRlOiBmdW5jdGlvbihyZWYsIHJlZiQxKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciB0aGlzJDEgPSB0aGlzO1xuICAgICAgICAgICAgICAgICAgICB2YXIgdmlzaWJsZSA9IHJlZi52aXNpYmxlO1xuICAgICAgICAgICAgICAgICAgICB2YXIgc2Nyb2xsID0gcmVmLnNjcm9sbDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCByZWYkMSA9PT0gdm9pZCAwICkgcmVmJDEgPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGRpciA9IHJlZiQxLmRpcjtcblxuXG4gICAgICAgICAgICAgICAgICAgIGlmIChzY3JvbGwgPCAwIHx8ICF2aXNpYmxlIHx8IHRoaXMuZGlzYWJsZWQgfHwgdGhpcy5zaG93T25VcCAmJiAhZGlyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5pbmFjdGl2ZVxuICAgICAgICAgICAgICAgICAgICAgICAgfHwgc2Nyb2xsIDwgdGhpcy50b3BcbiAgICAgICAgICAgICAgICAgICAgICAgIHx8IHRoaXMuc2hvd09uVXAgJiYgKHNjcm9sbCA8PSB0aGlzLnRvcCB8fCBkaXIgPT09ICdkb3duJyB8fCBkaXIgPT09ICd1cCcgJiYgIXRoaXMuaXNBY3RpdmUgJiYgc2Nyb2xsIDw9IHRoaXMuYm90dG9tT2Zmc2V0KVxuICAgICAgICAgICAgICAgICAgICApIHtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmlzQWN0aXZlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmlzQWN0aXZlID0gZmFsc2U7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmFuaW1hdGlvbiAmJiBzY3JvbGwgPiB0aGlzLnRvcE9mZnNldCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFuaW1hdGlvbi5jYW5jZWwodGhpcy4kZWwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFuaW1hdGlvbi5vdXQodGhpcy4kZWwsIHRoaXMuYW5pbWF0aW9uKS50aGVuKGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXMkMS5oaWRlKCk7IH0sIG5vb3ApO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmhpZGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuaXNBY3RpdmUpIHtcblxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy51cGRhdGUoKTtcblxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuYW5pbWF0aW9uKSB7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIEFuaW1hdGlvbi5jYW5jZWwodGhpcy4kZWwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG93KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBBbmltYXRpb24uaW4odGhpcy4kZWwsIHRoaXMuYW5pbWF0aW9uKS5jYXRjaChub29wKTtcblxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG93KCk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgICAgICBldmVudHM6IFsnbG9hZCcsICdyZXNpemUnLCAnc2Nyb2xsJ11cblxuICAgICAgICAgICAgfSBdLFxuXG4gICAgICAgIG1ldGhvZHM6IHtcblxuICAgICAgICAgICAgc2hvdzogZnVuY3Rpb24oKSB7XG5cbiAgICAgICAgICAgICAgICB0aGlzLmlzQWN0aXZlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZSgpO1xuICAgICAgICAgICAgICAgIGF0dHIodGhpcy5wbGFjZWhvbGRlciwgJ2hpZGRlbicsIG51bGwpO1xuXG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICBoaWRlOiBmdW5jdGlvbigpIHtcblxuICAgICAgICAgICAgICAgIGlmICghdGhpcy5pc0FjdGl2ZSB8fCBoYXNDbGFzcyh0aGlzLnNlbFRhcmdldCwgdGhpcy5jbHNBY3RpdmUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRyaWdnZXIodGhpcy4kZWwsICdpbmFjdGl2ZScpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJlbW92ZUNsYXNzKHRoaXMuJGVsLCB0aGlzLmNsc0ZpeGVkLCB0aGlzLmNsc0JlbG93KTtcbiAgICAgICAgICAgICAgICBjc3ModGhpcy4kZWwsIHtwb3NpdGlvbjogJycsIHRvcDogJycsIHdpZHRoOiAnJ30pO1xuICAgICAgICAgICAgICAgIGF0dHIodGhpcy5wbGFjZWhvbGRlciwgJ2hpZGRlbicsICcnKTtcblxuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgdXBkYXRlOiBmdW5jdGlvbigpIHtcblxuICAgICAgICAgICAgICAgIHZhciBhY3RpdmUgPSB0aGlzLnRvcCAhPT0gMCB8fCB0aGlzLnNjcm9sbCA+IHRoaXMudG9wO1xuICAgICAgICAgICAgICAgIHZhciB0b3AgPSBNYXRoLm1heCgwLCB0aGlzLm9mZnNldCk7XG5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5ib3R0b20gJiYgdGhpcy5zY3JvbGwgPiB0aGlzLmJvdHRvbSAtIHRoaXMub2Zmc2V0KSB7XG4gICAgICAgICAgICAgICAgICAgIHRvcCA9IHRoaXMuYm90dG9tIC0gdGhpcy5zY3JvbGw7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY3NzKHRoaXMuJGVsLCB7XG4gICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uOiAnZml4ZWQnLFxuICAgICAgICAgICAgICAgICAgICB0b3A6ICh0b3AgKyBcInB4XCIpLFxuICAgICAgICAgICAgICAgICAgICB3aWR0aDogdGhpcy53aWR0aFxuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgaWYgKGhhc0NsYXNzKHRoaXMuc2VsVGFyZ2V0LCB0aGlzLmNsc0FjdGl2ZSkpIHtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoIWFjdGl2ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHJpZ2dlcih0aGlzLiRlbCwgJ2luYWN0aXZlJyk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYWN0aXZlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRyaWdnZXIodGhpcy4kZWwsICdhY3RpdmUnKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0b2dnbGVDbGFzcyh0aGlzLiRlbCwgdGhpcy5jbHNCZWxvdywgdGhpcy5zY3JvbGwgPiB0aGlzLmJvdHRvbU9mZnNldCk7XG4gICAgICAgICAgICAgICAgYWRkQ2xhc3ModGhpcy4kZWwsIHRoaXMuY2xzRml4ZWQpO1xuXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfVxuXG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIHBhcnNlUHJvcChwcm9wLCByZWYpIHtcbiAgICAgICAgdmFyICRwcm9wcyA9IHJlZi4kcHJvcHM7XG4gICAgICAgIHZhciAkZWwgPSByZWYuJGVsO1xuICAgICAgICB2YXIgcHJvcE9mZnNldCA9IHJlZlsocHJvcCArIFwiT2Zmc2V0XCIpXTtcblxuXG4gICAgICAgIHZhciB2YWx1ZSA9ICRwcm9wc1twcm9wXTtcblxuICAgICAgICBpZiAoIXZhbHVlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXNOdW1lcmljKHZhbHVlKSkge1xuXG4gICAgICAgICAgICByZXR1cm4gcHJvcE9mZnNldCArIHRvRmxvYXQodmFsdWUpO1xuXG4gICAgICAgIH0gZWxzZSBpZiAoaXNTdHJpbmcodmFsdWUpICYmIHZhbHVlLm1hdGNoKC9eLT9cXGQrdmgkLykpIHtcblxuICAgICAgICAgICAgcmV0dXJuIGhlaWdodCh3aW5kb3cpICogdG9GbG9hdCh2YWx1ZSkgLyAxMDA7XG5cbiAgICAgICAgfSBlbHNlIHtcblxuICAgICAgICAgICAgdmFyIGVsID0gdmFsdWUgPT09IHRydWUgPyAkZWwucGFyZW50Tm9kZSA6IHF1ZXJ5KHZhbHVlLCAkZWwpO1xuXG4gICAgICAgICAgICBpZiAoZWwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gb2Zmc2V0KGVsKS50b3AgKyBlbC5vZmZzZXRIZWlnaHQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHZhciBTd2l0Y2hlciA9IHtcblxuICAgICAgICBtaXhpbnM6IFtUb2dnbGFibGVdLFxuXG4gICAgICAgIGFyZ3M6ICdjb25uZWN0JyxcblxuICAgICAgICBwcm9wczoge1xuICAgICAgICAgICAgY29ubmVjdDogU3RyaW5nLFxuICAgICAgICAgICAgdG9nZ2xlOiBTdHJpbmcsXG4gICAgICAgICAgICBhY3RpdmU6IE51bWJlcixcbiAgICAgICAgICAgIHN3aXBpbmc6IEJvb2xlYW5cbiAgICAgICAgfSxcblxuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICBjb25uZWN0OiAnfi51ay1zd2l0Y2hlcicsXG4gICAgICAgICAgICB0b2dnbGU6ICc+IConLFxuICAgICAgICAgICAgYWN0aXZlOiAwLFxuICAgICAgICAgICAgc3dpcGluZzogdHJ1ZSxcbiAgICAgICAgICAgIGNsczogJ3VrLWFjdGl2ZScsXG4gICAgICAgICAgICBjbHNDb250YWluZXI6ICd1ay1zd2l0Y2hlcicsXG4gICAgICAgICAgICBhdHRySXRlbTogJ3VrLXN3aXRjaGVyLWl0ZW0nLFxuICAgICAgICAgICAgcXVldWVkOiB0cnVlXG4gICAgICAgIH0sXG5cbiAgICAgICAgY29tcHV0ZWQ6IHtcblxuICAgICAgICAgICAgY29ubmVjdHM6IGZ1bmN0aW9uKHJlZiwgJGVsKSB7XG4gICAgICAgICAgICAgICAgdmFyIGNvbm5lY3QgPSByZWYuY29ubmVjdDtcblxuICAgICAgICAgICAgICAgIHJldHVybiBxdWVyeUFsbChjb25uZWN0LCAkZWwpO1xuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgdG9nZ2xlczogZnVuY3Rpb24ocmVmLCAkZWwpIHtcbiAgICAgICAgICAgICAgICB2YXIgdG9nZ2xlID0gcmVmLnRvZ2dsZTtcblxuICAgICAgICAgICAgICAgIHJldHVybiAkJCh0b2dnbGUsICRlbCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfSxcblxuICAgICAgICBldmVudHM6IFtcblxuICAgICAgICAgICAge1xuXG4gICAgICAgICAgICAgICAgbmFtZTogJ2NsaWNrJyxcblxuICAgICAgICAgICAgICAgIGRlbGVnYXRlOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICgodGhpcy50b2dnbGUpICsgXCI6bm90KC51ay1kaXNhYmxlZClcIik7XG4gICAgICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgICAgIGhhbmRsZXI6IGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3coZS5jdXJyZW50KTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnY2xpY2snLFxuXG4gICAgICAgICAgICAgICAgZWw6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jb25uZWN0cztcbiAgICAgICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICAgICAgZGVsZWdhdGU6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFwiW1wiICsgKHRoaXMuYXR0ckl0ZW0pICsgXCJdLFtkYXRhLVwiICsgKHRoaXMuYXR0ckl0ZW0pICsgXCJdXCIpO1xuICAgICAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgICAgICBoYW5kbGVyOiBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG93KGRhdGEoZS5jdXJyZW50LCB0aGlzLmF0dHJJdGVtKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdzd2lwZVJpZ2h0IHN3aXBlTGVmdCcsXG5cbiAgICAgICAgICAgICAgICBmaWx0ZXI6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zd2lwaW5nO1xuICAgICAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgICAgICBlbDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbm5lY3RzO1xuICAgICAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgICAgICBoYW5kbGVyOiBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghaXNUb3VjaChlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXdpbmRvdy5nZXRTZWxlY3Rpb24oKS50b1N0cmluZygpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3coZS50eXBlID09PSAnc3dpcGVMZWZ0JyA/ICduZXh0JyA6ICdwcmV2aW91cycpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgIF0sXG5cbiAgICAgICAgdXBkYXRlOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHZhciB0aGlzJDEgPSB0aGlzO1xuXG5cbiAgICAgICAgICAgIHRoaXMuY29ubmVjdHMuZm9yRWFjaChmdW5jdGlvbiAobGlzdCkgeyByZXR1cm4gdGhpcyQxLnVwZGF0ZUFyaWEobGlzdC5jaGlsZHJlbik7IH0pO1xuICAgICAgICAgICAgdGhpcy5zaG93KGZpbHRlcih0aGlzLnRvZ2dsZXMsIChcIi5cIiArICh0aGlzLmNscykpKVswXSB8fCB0aGlzLnRvZ2dsZXNbdGhpcy5hY3RpdmVdIHx8IHRoaXMudG9nZ2xlc1swXSk7XG5cbiAgICAgICAgfSxcblxuICAgICAgICBtZXRob2RzOiB7XG5cbiAgICAgICAgICAgIHNob3c6IGZ1bmN0aW9uKGl0ZW0pIHtcbiAgICAgICAgICAgICAgICB2YXIgdGhpcyQxID0gdGhpcztcblxuXG4gICAgICAgICAgICAgICAgdmFyIHJlZiA9IHRoaXMudG9nZ2xlcztcbiAgICAgICAgICAgICAgICB2YXIgbGVuZ3RoID0gcmVmLmxlbmd0aDtcbiAgICAgICAgICAgICAgICB2YXIgcHJldiA9ICEhdGhpcy5jb25uZWN0cy5sZW5ndGggJiYgaW5kZXgoZmlsdGVyKHRoaXMuY29ubmVjdHNbMF0uY2hpbGRyZW4sIChcIi5cIiArICh0aGlzLmNscykpKVswXSk7XG4gICAgICAgICAgICAgICAgdmFyIGhhc1ByZXYgPSBwcmV2ID49IDA7XG4gICAgICAgICAgICAgICAgdmFyIGRpciA9IGl0ZW0gPT09ICdwcmV2aW91cycgPyAtMSA6IDE7XG5cbiAgICAgICAgICAgICAgICB2YXIgdG9nZ2xlLCBuZXh0ID0gZ2V0SW5kZXgoaXRlbSwgdGhpcy50b2dnbGVzLCBwcmV2KTtcblxuICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyssIG5leHQgPSAobmV4dCArIGRpciArIGxlbmd0aCkgJSBsZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFtYXRjaGVzKHRoaXMkMS50b2dnbGVzW25leHRdLCAnLnVrLWRpc2FibGVkLCBbZGlzYWJsZWRdJykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRvZ2dsZSA9IHRoaXMkMS50b2dnbGVzW25leHRdO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoIXRvZ2dsZSB8fCBwcmV2ID49IDAgJiYgaGFzQ2xhc3ModG9nZ2xlLCB0aGlzLmNscykgfHwgcHJldiA9PT0gbmV4dCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmVtb3ZlQ2xhc3ModGhpcy50b2dnbGVzLCB0aGlzLmNscyk7XG4gICAgICAgICAgICAgICAgYXR0cih0aGlzLnRvZ2dsZXMsICdhcmlhLWV4cGFuZGVkJywgZmFsc2UpO1xuICAgICAgICAgICAgICAgIGFkZENsYXNzKHRvZ2dsZSwgdGhpcy5jbHMpO1xuICAgICAgICAgICAgICAgIGF0dHIodG9nZ2xlLCAnYXJpYS1leHBhbmRlZCcsIHRydWUpO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5jb25uZWN0cy5mb3JFYWNoKGZ1bmN0aW9uIChsaXN0KSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghaGFzUHJldikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcyQxLnRvZ2dsZU5vdyhsaXN0LmNoaWxkcmVuW25leHRdKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMkMS50b2dnbGVFbGVtZW50KFtsaXN0LmNoaWxkcmVuW3ByZXZdLCBsaXN0LmNoaWxkcmVuW25leHRdXSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgfVxuXG4gICAgICAgIH1cblxuICAgIH07XG5cbiAgICB2YXIgVGFiID0ge1xuXG4gICAgICAgIG1peGluczogW0NsYXNzXSxcblxuICAgICAgICBleHRlbmRzOiBTd2l0Y2hlcixcblxuICAgICAgICBwcm9wczoge1xuICAgICAgICAgICAgbWVkaWE6ICdtZWRpYSdcbiAgICAgICAgfSxcblxuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICBtZWRpYTogOTYwLFxuICAgICAgICAgICAgYXR0ckl0ZW06ICd1ay10YWItaXRlbSdcbiAgICAgICAgfSxcblxuICAgICAgICBjb25uZWN0ZWQ6IGZ1bmN0aW9uKCkge1xuXG4gICAgICAgICAgICB2YXIgY2xzID0gaGFzQ2xhc3ModGhpcy4kZWwsICd1ay10YWItbGVmdCcpXG4gICAgICAgICAgICAgICAgPyAndWstdGFiLWxlZnQnXG4gICAgICAgICAgICAgICAgOiBoYXNDbGFzcyh0aGlzLiRlbCwgJ3VrLXRhYi1yaWdodCcpXG4gICAgICAgICAgICAgICAgICAgID8gJ3VrLXRhYi1yaWdodCdcbiAgICAgICAgICAgICAgICAgICAgOiBmYWxzZTtcblxuICAgICAgICAgICAgaWYgKGNscykge1xuICAgICAgICAgICAgICAgIHRoaXMuJGNyZWF0ZSgndG9nZ2xlJywgdGhpcy4kZWwsIHtjbHM6IGNscywgbW9kZTogJ21lZGlhJywgbWVkaWE6IHRoaXMubWVkaWF9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgfTtcblxuICAgIHZhciBUb2dnbGUgPSB7XG5cbiAgICAgICAgbWl4aW5zOiBbVG9nZ2xhYmxlXSxcblxuICAgICAgICBhcmdzOiAndGFyZ2V0JyxcblxuICAgICAgICBwcm9wczoge1xuICAgICAgICAgICAgaHJlZjogU3RyaW5nLFxuICAgICAgICAgICAgdGFyZ2V0OiBudWxsLFxuICAgICAgICAgICAgbW9kZTogJ2xpc3QnLFxuICAgICAgICAgICAgbWVkaWE6ICdtZWRpYSdcbiAgICAgICAgfSxcblxuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICBocmVmOiBmYWxzZSxcbiAgICAgICAgICAgIHRhcmdldDogZmFsc2UsXG4gICAgICAgICAgICBtb2RlOiAnY2xpY2snLFxuICAgICAgICAgICAgcXVldWVkOiB0cnVlLFxuICAgICAgICAgICAgbWVkaWE6IGZhbHNlXG4gICAgICAgIH0sXG5cbiAgICAgICAgY29tcHV0ZWQ6IHtcblxuICAgICAgICAgICAgdGFyZ2V0OiBmdW5jdGlvbihyZWYsICRlbCkge1xuICAgICAgICAgICAgICAgIHZhciBocmVmID0gcmVmLmhyZWY7XG4gICAgICAgICAgICAgICAgdmFyIHRhcmdldCA9IHJlZi50YXJnZXQ7XG5cbiAgICAgICAgICAgICAgICB0YXJnZXQgPSBxdWVyeUFsbCh0YXJnZXQgfHwgaHJlZiwgJGVsKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGFyZ2V0Lmxlbmd0aCAmJiB0YXJnZXQgfHwgWyRlbF07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfSxcblxuICAgICAgICBldmVudHM6IFtcblxuICAgICAgICAgICAge1xuXG4gICAgICAgICAgICAgICAgbmFtZTogKHBvaW50ZXJFbnRlciArIFwiIFwiICsgcG9pbnRlckxlYXZlKSxcblxuICAgICAgICAgICAgICAgIGZpbHRlcjogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpbmNsdWRlcyh0aGlzLm1vZGUsICdob3ZlcicpO1xuICAgICAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgICAgICBoYW5kbGVyOiBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghaXNUb3VjaChlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50b2dnbGUoKFwidG9nZ2xlXCIgKyAoZS50eXBlID09PSBwb2ludGVyRW50ZXIgPyAnc2hvdycgOiAnaGlkZScpKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIHtcblxuICAgICAgICAgICAgICAgIG5hbWU6ICdjbGljaycsXG5cbiAgICAgICAgICAgICAgICBmaWx0ZXI6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW5jbHVkZXModGhpcy5tb2RlLCAnY2xpY2snKSB8fCBoYXNUb3VjaCAmJiBpbmNsdWRlcyh0aGlzLm1vZGUsICdob3ZlcicpO1xuICAgICAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgICAgICBoYW5kbGVyOiBmdW5jdGlvbihlKSB7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKCFpc1RvdWNoKGUpICYmICFpbmNsdWRlcyh0aGlzLm1vZGUsICdjbGljaycpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAvLyBUT0RPIGJldHRlciBpc1RvZ2dsZWQgaGFuZGxpbmdcbiAgICAgICAgICAgICAgICAgICAgdmFyIGxpbms7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjbG9zZXN0KGUudGFyZ2V0LCAnYVtocmVmPVwiI1wiXSwgYnV0dG9uJylcbiAgICAgICAgICAgICAgICAgICAgICAgIHx8IChsaW5rID0gY2xvc2VzdChlLnRhcmdldCwgJ2FbaHJlZl0nKSkgJiYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2xzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgIWlzVmlzaWJsZSh0aGlzLnRhcmdldClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBsaW5rLmhhc2ggJiYgbWF0Y2hlcyh0aGlzLnRhcmdldCwgbGluay5oYXNoKVxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uY2UoZG9jdW1lbnQsICdjbGljaycsIGZ1bmN0aW9uIChlKSB7IHJldHVybiBlLnByZXZlbnREZWZhdWx0KCk7IH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy50b2dnbGUoKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIH1cbiAgICAgICAgXSxcblxuICAgICAgICB1cGRhdGU6IHtcblxuICAgICAgICAgICAgd3JpdGU6IGZ1bmN0aW9uKCkge1xuXG4gICAgICAgICAgICAgICAgaWYgKCFpbmNsdWRlcyh0aGlzLm1vZGUsICdtZWRpYScpIHx8ICF0aGlzLm1lZGlhKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB2YXIgdG9nZ2xlZCA9IHRoaXMuaXNUb2dnbGVkKHRoaXMudGFyZ2V0KTtcbiAgICAgICAgICAgICAgICBpZiAod2luZG93Lm1hdGNoTWVkaWEodGhpcy5tZWRpYSkubWF0Y2hlcyA/ICF0b2dnbGVkIDogdG9nZ2xlZCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnRvZ2dsZSgpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgZXZlbnRzOiBbJ2xvYWQnLCAncmVzaXplJ11cblxuICAgICAgICB9LFxuXG4gICAgICAgIG1ldGhvZHM6IHtcblxuICAgICAgICAgICAgdG9nZ2xlOiBmdW5jdGlvbih0eXBlKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRyaWdnZXIodGhpcy50YXJnZXQsIHR5cGUgfHwgJ3RvZ2dsZScsIFt0aGlzXSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50b2dnbGVFbGVtZW50KHRoaXMudGFyZ2V0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfVxuXG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIGNvcmUgKFVJa2l0KSB7XG5cbiAgICAgICAgLy8gY29yZSBjb21wb25lbnRzXG4gICAgICAgIFVJa2l0LmNvbXBvbmVudCgnYWNjb3JkaW9uJywgQWNjb3JkaW9uKTtcbiAgICAgICAgVUlraXQuY29tcG9uZW50KCdhbGVydCcsIEFsZXJ0KTtcbiAgICAgICAgVUlraXQuY29tcG9uZW50KCdjb3ZlcicsIENvdmVyKTtcbiAgICAgICAgVUlraXQuY29tcG9uZW50KCdkcm9wJywgRHJvcCk7XG4gICAgICAgIFVJa2l0LmNvbXBvbmVudCgnZHJvcGRvd24nLCBEcm9wZG93bik7XG4gICAgICAgIFVJa2l0LmNvbXBvbmVudCgnZm9ybUN1c3RvbScsIEZvcm1DdXN0b20pO1xuICAgICAgICBVSWtpdC5jb21wb25lbnQoJ2dpZicsIEdpZik7XG4gICAgICAgIFVJa2l0LmNvbXBvbmVudCgnZ3JpZCcsIEdyaWQpO1xuICAgICAgICBVSWtpdC5jb21wb25lbnQoJ2hlaWdodE1hdGNoJywgSGVpZ2h0TWF0Y2gpO1xuICAgICAgICBVSWtpdC5jb21wb25lbnQoJ2hlaWdodFZpZXdwb3J0JywgSGVpZ2h0Vmlld3BvcnQpO1xuICAgICAgICBVSWtpdC5jb21wb25lbnQoJ2ljb24nLCBJY29uKTtcbiAgICAgICAgVUlraXQuY29tcG9uZW50KCdpbWcnLCBJbWcpO1xuICAgICAgICBVSWtpdC5jb21wb25lbnQoJ2xlYWRlcicsIExlYWRlcik7XG4gICAgICAgIFVJa2l0LmNvbXBvbmVudCgnbWFyZ2luJywgTWFyZ2luKTtcbiAgICAgICAgVUlraXQuY29tcG9uZW50KCdtb2RhbCcsIE1vZGFsJDEpO1xuICAgICAgICBVSWtpdC5jb21wb25lbnQoJ25hdicsIE5hdik7XG4gICAgICAgIFVJa2l0LmNvbXBvbmVudCgnbmF2YmFyJywgTmF2YmFyKTtcbiAgICAgICAgVUlraXQuY29tcG9uZW50KCdvZmZjYW52YXMnLCBPZmZjYW52YXMpO1xuICAgICAgICBVSWtpdC5jb21wb25lbnQoJ292ZXJmbG93QXV0bycsIE92ZXJmbG93QXV0byk7XG4gICAgICAgIFVJa2l0LmNvbXBvbmVudCgncmVzcG9uc2l2ZScsIFJlc3BvbnNpdmUpO1xuICAgICAgICBVSWtpdC5jb21wb25lbnQoJ3Njcm9sbCcsIFNjcm9sbCk7XG4gICAgICAgIFVJa2l0LmNvbXBvbmVudCgnc2Nyb2xsc3B5JywgU2Nyb2xsc3B5KTtcbiAgICAgICAgVUlraXQuY29tcG9uZW50KCdzY3JvbGxzcHlOYXYnLCBTY3JvbGxzcHlOYXYpO1xuICAgICAgICBVSWtpdC5jb21wb25lbnQoJ3N0aWNreScsIFN0aWNreSk7XG4gICAgICAgIFVJa2l0LmNvbXBvbmVudCgnc3ZnJywgU1ZHKTtcbiAgICAgICAgVUlraXQuY29tcG9uZW50KCdzd2l0Y2hlcicsIFN3aXRjaGVyKTtcbiAgICAgICAgVUlraXQuY29tcG9uZW50KCd0YWInLCBUYWIpO1xuICAgICAgICBVSWtpdC5jb21wb25lbnQoJ3RvZ2dsZScsIFRvZ2dsZSk7XG4gICAgICAgIFVJa2l0LmNvbXBvbmVudCgndmlkZW8nLCBWaWRlbyk7XG5cbiAgICAgICAgLy8gSWNvbiBjb21wb25lbnRzXG4gICAgICAgIFVJa2l0LmNvbXBvbmVudCgnY2xvc2UnLCBDbG9zZSk7XG4gICAgICAgIFVJa2l0LmNvbXBvbmVudCgnbWFya2VyJywgSWNvbkNvbXBvbmVudCk7XG4gICAgICAgIFVJa2l0LmNvbXBvbmVudCgnbmF2YmFyVG9nZ2xlSWNvbicsIEljb25Db21wb25lbnQpO1xuICAgICAgICBVSWtpdC5jb21wb25lbnQoJ292ZXJsYXlJY29uJywgSWNvbkNvbXBvbmVudCk7XG4gICAgICAgIFVJa2l0LmNvbXBvbmVudCgncGFnaW5hdGlvbk5leHQnLCBJY29uQ29tcG9uZW50KTtcbiAgICAgICAgVUlraXQuY29tcG9uZW50KCdwYWdpbmF0aW9uUHJldmlvdXMnLCBJY29uQ29tcG9uZW50KTtcbiAgICAgICAgVUlraXQuY29tcG9uZW50KCdzZWFyY2hJY29uJywgU2VhcmNoKTtcbiAgICAgICAgVUlraXQuY29tcG9uZW50KCdzbGlkZW5hdk5leHQnLCBTbGlkZW5hdik7XG4gICAgICAgIFVJa2l0LmNvbXBvbmVudCgnc2xpZGVuYXZQcmV2aW91cycsIFNsaWRlbmF2KTtcbiAgICAgICAgVUlraXQuY29tcG9uZW50KCdzcGlubmVyJywgU3Bpbm5lcik7XG4gICAgICAgIFVJa2l0LmNvbXBvbmVudCgndG90b3AnLCBJY29uQ29tcG9uZW50KTtcblxuICAgICAgICAvLyBjb3JlIGZ1bmN0aW9uYWxpdHlcbiAgICAgICAgVUlraXQudXNlKENvcmUpO1xuXG4gICAgfVxuXG4gICAgVUlraXQudmVyc2lvbiA9ICczLjAuMC1yYy41JztcblxuICAgIGNvcmUoVUlraXQpO1xuXG4gICAgdmFyIENvdW50ZG93biA9IHtcblxuICAgICAgICBtaXhpbnM6IFtDbGFzc10sXG5cbiAgICAgICAgYXR0cnM6IHRydWUsXG5cbiAgICAgICAgcHJvcHM6IHtcbiAgICAgICAgICAgIGRhdGU6IFN0cmluZyxcbiAgICAgICAgICAgIGNsc1dyYXBwZXI6IFN0cmluZ1xuICAgICAgICB9LFxuXG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgIGRhdGU6ICcnLFxuICAgICAgICAgICAgY2xzV3JhcHBlcjogJy51ay1jb3VudGRvd24tJXVuaXQlJ1xuICAgICAgICB9LFxuXG4gICAgICAgIGNvbXB1dGVkOiB7XG5cbiAgICAgICAgICAgIGRhdGU6IGZ1bmN0aW9uKHJlZikge1xuICAgICAgICAgICAgICAgIHZhciBkYXRlID0gcmVmLmRhdGU7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gRGF0ZS5wYXJzZShkYXRlKTtcbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIGRheXM6IGZ1bmN0aW9uKHJlZiwgJGVsKSB7XG4gICAgICAgICAgICAgICAgdmFyIGNsc1dyYXBwZXIgPSByZWYuY2xzV3JhcHBlcjtcblxuICAgICAgICAgICAgICAgIHJldHVybiAkKGNsc1dyYXBwZXIucmVwbGFjZSgnJXVuaXQlJywgJ2RheXMnKSwgJGVsKTtcbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIGhvdXJzOiBmdW5jdGlvbihyZWYsICRlbCkge1xuICAgICAgICAgICAgICAgIHZhciBjbHNXcmFwcGVyID0gcmVmLmNsc1dyYXBwZXI7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gJChjbHNXcmFwcGVyLnJlcGxhY2UoJyV1bml0JScsICdob3VycycpLCAkZWwpO1xuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgbWludXRlczogZnVuY3Rpb24ocmVmLCAkZWwpIHtcbiAgICAgICAgICAgICAgICB2YXIgY2xzV3JhcHBlciA9IHJlZi5jbHNXcmFwcGVyO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuICQoY2xzV3JhcHBlci5yZXBsYWNlKCcldW5pdCUnLCAnbWludXRlcycpLCAkZWwpO1xuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgc2Vjb25kczogZnVuY3Rpb24ocmVmLCAkZWwpIHtcbiAgICAgICAgICAgICAgICB2YXIgY2xzV3JhcHBlciA9IHJlZi5jbHNXcmFwcGVyO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuICQoY2xzV3JhcHBlci5yZXBsYWNlKCcldW5pdCUnLCAnc2Vjb25kcycpLCAkZWwpO1xuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgdW5pdHM6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIHZhciB0aGlzJDEgPSB0aGlzO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIFsnZGF5cycsICdob3VycycsICdtaW51dGVzJywgJ3NlY29uZHMnXS5maWx0ZXIoZnVuY3Rpb24gKHVuaXQpIHsgcmV0dXJuIHRoaXMkMVt1bml0XTsgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfSxcblxuICAgICAgICBjb25uZWN0ZWQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgdGhpcy5zdGFydCgpO1xuICAgICAgICB9LFxuXG4gICAgICAgIGRpc2Nvbm5lY3RlZDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICB2YXIgdGhpcyQxID0gdGhpcztcblxuICAgICAgICAgICAgdGhpcy5zdG9wKCk7XG4gICAgICAgICAgICB0aGlzLnVuaXRzLmZvckVhY2goZnVuY3Rpb24gKHVuaXQpIHsgcmV0dXJuIGVtcHR5KHRoaXMkMVt1bml0XSk7IH0pO1xuICAgICAgICB9LFxuXG4gICAgICAgIGV2ZW50czogW1xuXG4gICAgICAgICAgICB7XG5cbiAgICAgICAgICAgICAgICBuYW1lOiAndmlzaWJpbGl0eWNoYW5nZScsXG5cbiAgICAgICAgICAgICAgICBlbDogZG9jdW1lbnQsXG5cbiAgICAgICAgICAgICAgICBoYW5kbGVyOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGRvY3VtZW50LmhpZGRlbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdG9wKCk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXJ0KCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIH1cblxuICAgICAgICBdLFxuXG4gICAgICAgIHVwZGF0ZToge1xuXG4gICAgICAgICAgICB3cml0ZTogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgdmFyIHRoaXMkMSA9IHRoaXM7XG5cblxuICAgICAgICAgICAgICAgIHZhciB0aW1lc3BhbiA9IGdldFRpbWVTcGFuKHRoaXMuZGF0ZSk7XG5cbiAgICAgICAgICAgICAgICBpZiAodGltZXNwYW4udG90YWwgPD0gMCkge1xuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RvcCgpO1xuXG4gICAgICAgICAgICAgICAgICAgIHRpbWVzcGFuLmRheXNcbiAgICAgICAgICAgICAgICAgICAgICAgID0gdGltZXNwYW4uaG91cnNcbiAgICAgICAgICAgICAgICAgICAgICAgID0gdGltZXNwYW4ubWludXRlc1xuICAgICAgICAgICAgICAgICAgICAgICAgPSB0aW1lc3Bhbi5zZWNvbmRzXG4gICAgICAgICAgICAgICAgICAgICAgICA9IDA7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGhpcy51bml0cy5mb3JFYWNoKGZ1bmN0aW9uICh1bml0KSB7XG5cbiAgICAgICAgICAgICAgICAgICAgdmFyIGRpZ2l0cyA9IFN0cmluZyhNYXRoLmZsb29yKHRpbWVzcGFuW3VuaXRdKSk7XG5cbiAgICAgICAgICAgICAgICAgICAgZGlnaXRzID0gZGlnaXRzLmxlbmd0aCA8IDIgPyAoXCIwXCIgKyBkaWdpdHMpIDogZGlnaXRzO1xuXG4gICAgICAgICAgICAgICAgICAgIHZhciBlbCA9IHRoaXMkMVt1bml0XTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVsLnRleHRDb250ZW50ICE9PSBkaWdpdHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpZ2l0cyA9IGRpZ2l0cy5zcGxpdCgnJyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkaWdpdHMubGVuZ3RoICE9PSBlbC5jaGlsZHJlbi5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBodG1sKGVsLCBkaWdpdHMubWFwKGZ1bmN0aW9uICgpIHsgcmV0dXJuICc8c3Bhbj48L3NwYW4+JzsgfSkuam9pbignJykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBkaWdpdHMuZm9yRWFjaChmdW5jdGlvbiAoZGlnaXQsIGkpIHsgcmV0dXJuIGVsLmNoaWxkcmVuW2ldLnRleHRDb250ZW50ID0gZGlnaXQ7IH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgfVxuXG4gICAgICAgIH0sXG5cbiAgICAgICAgbWV0aG9kczoge1xuXG4gICAgICAgICAgICBzdGFydDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgdmFyIHRoaXMkMSA9IHRoaXM7XG5cblxuICAgICAgICAgICAgICAgIHRoaXMuc3RvcCgpO1xuXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZGF0ZSAmJiB0aGlzLnVuaXRzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLiRlbWl0KCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudGltZXIgPSBzZXRJbnRlcnZhbChmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzJDEuJGVtaXQoKTsgfSwgMTAwMCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICBzdG9wOiBmdW5jdGlvbigpIHtcblxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnRpbWVyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy50aW1lcik7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudGltZXIgPSBudWxsO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgfVxuXG4gICAgICAgIH1cblxuICAgIH07XG5cbiAgICBmdW5jdGlvbiBnZXRUaW1lU3BhbihkYXRlKSB7XG5cbiAgICAgICAgdmFyIHRvdGFsID0gZGF0ZSAtIERhdGUubm93KCk7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHRvdGFsOiB0b3RhbCxcbiAgICAgICAgICAgIHNlY29uZHM6IHRvdGFsIC8gMTAwMCAlIDYwLFxuICAgICAgICAgICAgbWludXRlczogdG90YWwgLyAxMDAwIC8gNjAgJSA2MCxcbiAgICAgICAgICAgIGhvdXJzOiB0b3RhbCAvIDEwMDAgLyA2MCAvIDYwICUgMjQsXG4gICAgICAgICAgICBkYXlzOiB0b3RhbCAvIDEwMDAgLyA2MCAvIDYwIC8gMjRcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICB2YXIgdGFyZ2V0Q2xhc3MgPSAndWstYW5pbWF0aW9uLXRhcmdldCc7XG5cbiAgICB2YXIgQW5pbWF0ZSA9IHtcblxuICAgICAgICBwcm9wczoge1xuICAgICAgICAgICAgYW5pbWF0aW9uOiBOdW1iZXJcbiAgICAgICAgfSxcblxuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICBhbmltYXRpb246IDE1MFxuICAgICAgICB9LFxuXG4gICAgICAgIGNvbXB1dGVkOiB7XG5cbiAgICAgICAgICAgIHRhcmdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuJGVsO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIH0sXG5cbiAgICAgICAgbWV0aG9kczoge1xuXG4gICAgICAgICAgICBhbmltYXRlOiBmdW5jdGlvbihhY3Rpb24pIHtcbiAgICAgICAgICAgICAgICB2YXIgdGhpcyQxID0gdGhpcztcblxuXG4gICAgICAgICAgICAgICAgYWRkU3R5bGUoKTtcblxuICAgICAgICAgICAgICAgIHZhciBjaGlsZHJlbiA9IHRvTm9kZXModGhpcy50YXJnZXQuY2hpbGRyZW4pO1xuICAgICAgICAgICAgICAgIHZhciBwcm9wc0Zyb20gPSBjaGlsZHJlbi5tYXAoZnVuY3Rpb24gKGVsKSB7IHJldHVybiBnZXRQcm9wcyhlbCwgdHJ1ZSk7IH0pO1xuXG4gICAgICAgICAgICAgICAgdmFyIG9sZEhlaWdodCA9IGhlaWdodCh0aGlzLnRhcmdldCk7XG4gICAgICAgICAgICAgICAgdmFyIG9sZFNjcm9sbFkgPSB3aW5kb3cucGFnZVlPZmZzZXQ7XG5cbiAgICAgICAgICAgICAgICBhY3Rpb24oKTtcblxuICAgICAgICAgICAgICAgIFRyYW5zaXRpb24uY2FuY2VsKHRoaXMudGFyZ2V0KTtcbiAgICAgICAgICAgICAgICBjaGlsZHJlbi5mb3JFYWNoKFRyYW5zaXRpb24uY2FuY2VsKTtcblxuICAgICAgICAgICAgICAgIHJlc2V0KHRoaXMudGFyZ2V0KTtcbiAgICAgICAgICAgICAgICB0aGlzLiR1cGRhdGUodGhpcy50YXJnZXQpO1xuICAgICAgICAgICAgICAgIGZhc3Rkb20uZmx1c2goKTtcblxuICAgICAgICAgICAgICAgIHZhciBuZXdIZWlnaHQgPSBoZWlnaHQodGhpcy50YXJnZXQpO1xuXG4gICAgICAgICAgICAgICAgY2hpbGRyZW4gPSBjaGlsZHJlbi5jb25jYXQodG9Ob2Rlcyh0aGlzLnRhcmdldC5jaGlsZHJlbikuZmlsdGVyKGZ1bmN0aW9uIChlbCkgeyByZXR1cm4gIWluY2x1ZGVzKGNoaWxkcmVuLCBlbCk7IH0pKTtcblxuICAgICAgICAgICAgICAgIHZhciBwcm9wc1RvID0gY2hpbGRyZW4ubWFwKGZ1bmN0aW9uIChlbCwgaSkgeyByZXR1cm4gZWwucGFyZW50Tm9kZSAmJiBpIGluIHByb3BzRnJvbVxuICAgICAgICAgICAgICAgICAgICAgICAgPyBwcm9wc0Zyb21baV1cbiAgICAgICAgICAgICAgICAgICAgICAgID8gaXNWaXNpYmxlKGVsKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gZ2V0UG9zaXRpb25XaXRoTWFyZ2luKGVsKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDoge29wYWNpdHk6IDB9XG4gICAgICAgICAgICAgICAgICAgICAgICA6IHtvcGFjaXR5OiBpc1Zpc2libGUoZWwpID8gMSA6IDB9XG4gICAgICAgICAgICAgICAgICAgICAgICA6IGZhbHNlOyB9XG4gICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgIHByb3BzRnJvbSA9IHByb3BzVG8ubWFwKGZ1bmN0aW9uIChwcm9wcywgaSkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgZnJvbSA9IGNoaWxkcmVuW2ldLnBhcmVudE5vZGUgPT09IHRoaXMkMS50YXJnZXRcbiAgICAgICAgICAgICAgICAgICAgICAgID8gcHJvcHNGcm9tW2ldIHx8IGdldFByb3BzKGNoaWxkcmVuW2ldKVxuICAgICAgICAgICAgICAgICAgICAgICAgOiBmYWxzZTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoZnJvbSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFwcm9wcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBmcm9tLm9wYWNpdHk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCEoJ29wYWNpdHknIGluIHByb3BzKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvcGFjaXR5ID0gZnJvbS5vcGFjaXR5O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wYWNpdHkgJSAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BzLm9wYWNpdHkgPSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBmcm9tLm9wYWNpdHk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZyb207XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICBhZGRDbGFzcyh0aGlzLnRhcmdldCwgdGFyZ2V0Q2xhc3MpO1xuICAgICAgICAgICAgICAgIGNoaWxkcmVuLmZvckVhY2goZnVuY3Rpb24gKGVsLCBpKSB7IHJldHVybiBwcm9wc0Zyb21baV0gJiYgY3NzKGVsLCBwcm9wc0Zyb21baV0pOyB9KTtcbiAgICAgICAgICAgICAgICBjc3ModGhpcy50YXJnZXQsICdtaW5IZWlnaHQnLCBvbGRIZWlnaHQpO1xuICAgICAgICAgICAgICAgIHdpbmRvdy5zY3JvbGwod2luZG93LnBhZ2VYT2Zmc2V0LCBvbGRTY3JvbGxZKTtcblxuICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlJDEuYWxsKGNoaWxkcmVuLm1hcChmdW5jdGlvbiAoZWwsIGkpIHsgcmV0dXJuIHByb3BzRnJvbVtpXSAmJiBwcm9wc1RvW2ldXG4gICAgICAgICAgICAgICAgICAgICAgICA/IFRyYW5zaXRpb24uc3RhcnQoZWwsIHByb3BzVG9baV0sIHRoaXMkMS5hbmltYXRpb24sICdlYXNlJylcbiAgICAgICAgICAgICAgICAgICAgICAgIDogUHJvbWlzZSQxLnJlc29sdmUoKTsgfVxuICAgICAgICAgICAgICAgICkuY29uY2F0KFRyYW5zaXRpb24uc3RhcnQodGhpcy50YXJnZXQsIHttaW5IZWlnaHQ6IG5ld0hlaWdodH0sIHRoaXMuYW5pbWF0aW9uLCAnZWFzZScpKSkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuLmZvckVhY2goZnVuY3Rpb24gKGVsLCBpKSB7IHJldHVybiBjc3MoZWwsIHtkaXNwbGF5OiBwcm9wc1RvW2ldLm9wYWNpdHkgPT09IDAgPyAnbm9uZScgOiAnJywgekluZGV4OiAnJ30pOyB9KTtcbiAgICAgICAgICAgICAgICAgICAgcmVzZXQodGhpcyQxLnRhcmdldCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMkMS4kdXBkYXRlKHRoaXMkMS50YXJnZXQpO1xuICAgICAgICAgICAgICAgIH0sIG5vb3ApO1xuXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gZ2V0UHJvcHMoZWwsIG9wYWNpdHkpIHtcblxuICAgICAgICB2YXIgekluZGV4ID0gY3NzKGVsLCAnekluZGV4Jyk7XG5cbiAgICAgICAgcmV0dXJuIGlzVmlzaWJsZShlbClcbiAgICAgICAgICAgID8gYXNzaWduKHtcbiAgICAgICAgICAgICAgICBkaXNwbGF5OiAnJyxcbiAgICAgICAgICAgICAgICBvcGFjaXR5OiBvcGFjaXR5ID8gY3NzKGVsLCAnb3BhY2l0eScpIDogJzAnLFxuICAgICAgICAgICAgICAgIHBvaW50ZXJFdmVudHM6ICdub25lJyxcbiAgICAgICAgICAgICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICAgICAgICAgICAgICB6SW5kZXg6IHpJbmRleCA9PT0gJ2F1dG8nID8gaW5kZXgoZWwpIDogekluZGV4XG4gICAgICAgICAgICB9LCBnZXRQb3NpdGlvbldpdGhNYXJnaW4oZWwpKVxuICAgICAgICAgICAgOiBmYWxzZTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiByZXNldChlbCkge1xuICAgICAgICBjc3MoZWwuY2hpbGRyZW4sIHtcbiAgICAgICAgICAgIGhlaWdodDogJycsXG4gICAgICAgICAgICBsZWZ0OiAnJyxcbiAgICAgICAgICAgIG9wYWNpdHk6ICcnLFxuICAgICAgICAgICAgcG9pbnRlckV2ZW50czogJycsXG4gICAgICAgICAgICBwb3NpdGlvbjogJycsXG4gICAgICAgICAgICB0b3A6ICcnLFxuICAgICAgICAgICAgd2lkdGg6ICcnXG4gICAgICAgIH0pO1xuICAgICAgICByZW1vdmVDbGFzcyhlbCwgdGFyZ2V0Q2xhc3MpO1xuICAgICAgICBjc3MoZWwsICdtaW5IZWlnaHQnLCAnJyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0UG9zaXRpb25XaXRoTWFyZ2luKGVsKSB7XG4gICAgICAgIHZhciByZWYgPSBlbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgdmFyIGhlaWdodCQkMSA9IHJlZi5oZWlnaHQ7XG4gICAgICAgIHZhciB3aWR0aCQkMSA9IHJlZi53aWR0aDtcbiAgICAgICAgdmFyIHJlZiQxID0gcG9zaXRpb24oZWwpO1xuICAgICAgICB2YXIgdG9wID0gcmVmJDEudG9wO1xuICAgICAgICB2YXIgbGVmdCA9IHJlZiQxLmxlZnQ7XG4gICAgICAgIHRvcCArPSB0b0Zsb2F0KGNzcyhlbCwgJ21hcmdpblRvcCcpKTtcblxuICAgICAgICByZXR1cm4ge3RvcDogdG9wLCBsZWZ0OiBsZWZ0LCBoZWlnaHQ6IGhlaWdodCQkMSwgd2lkdGg6IHdpZHRoJCQxfTtcbiAgICB9XG5cbiAgICB2YXIgc3R5bGUkMTtcblxuICAgIGZ1bmN0aW9uIGFkZFN0eWxlKCkge1xuICAgICAgICBpZiAoIXN0eWxlJDEpIHtcbiAgICAgICAgICAgIHN0eWxlJDEgPSBhcHBlbmQoZG9jdW1lbnQuaGVhZCwgJzxzdHlsZT4nKS5zaGVldDtcbiAgICAgICAgICAgIHN0eWxlJDEuaW5zZXJ0UnVsZShcbiAgICAgICAgICAgICAgICAoXCIuXCIgKyB0YXJnZXRDbGFzcyArIFwiID4gKiB7XFxuICAgICAgICAgICAgICAgICAgICBtYXJnaW4tdG9wOiAwICFpbXBvcnRhbnQ7XFxuICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm06IG5vbmUgIWltcG9ydGFudDtcXG4gICAgICAgICAgICAgICAgfVwiKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHZhciBGaWx0ZXIgPSB7XG5cbiAgICAgICAgbWl4aW5zOiBbQW5pbWF0ZV0sXG5cbiAgICAgICAgYXJnczogJ3RhcmdldCcsXG5cbiAgICAgICAgcHJvcHM6IHtcbiAgICAgICAgICAgIHRhcmdldDogQm9vbGVhbixcbiAgICAgICAgICAgIHNlbEFjdGl2ZTogQm9vbGVhblxuICAgICAgICB9LFxuXG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgIHRhcmdldDogbnVsbCxcbiAgICAgICAgICAgIHNlbEFjdGl2ZTogZmFsc2UsXG4gICAgICAgICAgICBhdHRySXRlbTogJ3VrLWZpbHRlci1jb250cm9sJyxcbiAgICAgICAgICAgIGNsczogJ3VrLWFjdGl2ZScsXG4gICAgICAgICAgICBhbmltYXRpb246IDI1MFxuICAgICAgICB9LFxuXG4gICAgICAgIGNvbXB1dGVkOiB7XG5cbiAgICAgICAgICAgIHRvZ2dsZXM6IGZ1bmN0aW9uKHJlZiwgJGVsKSB7XG4gICAgICAgICAgICAgICAgdmFyIGF0dHJJdGVtID0gcmVmLmF0dHJJdGVtO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuICQkKChcIltcIiArICh0aGlzLmF0dHJJdGVtKSArIFwiXSxbZGF0YS1cIiArICh0aGlzLmF0dHJJdGVtKSArIFwiXVwiKSwgJGVsKTtcbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIHRhcmdldDogZnVuY3Rpb24ocmVmLCAkZWwpIHtcbiAgICAgICAgICAgICAgICB2YXIgdGFyZ2V0ID0gcmVmLnRhcmdldDtcblxuICAgICAgICAgICAgICAgIHJldHVybiAkKHRhcmdldCwgJGVsKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9LFxuXG4gICAgICAgIGV2ZW50czogW1xuXG4gICAgICAgICAgICB7XG5cbiAgICAgICAgICAgICAgICBuYW1lOiAnY2xpY2snLFxuXG4gICAgICAgICAgICAgICAgZGVsZWdhdGU6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFwiW1wiICsgKHRoaXMuYXR0ckl0ZW0pICsgXCJdLFtkYXRhLVwiICsgKHRoaXMuYXR0ckl0ZW0pICsgXCJdXCIpO1xuICAgICAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgICAgICBoYW5kbGVyOiBmdW5jdGlvbihlKSB7XG5cbiAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmFwcGx5KGUuY3VycmVudCk7XG5cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIH1cblxuICAgICAgICBdLFxuXG4gICAgICAgIGNvbm5lY3RlZDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICB2YXIgdGhpcyQxID0gdGhpcztcblxuXG4gICAgICAgICAgICBpZiAodGhpcy5zZWxBY3RpdmUgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB2YXIgYWN0aXZlcyA9ICQkKHRoaXMuc2VsQWN0aXZlLCB0aGlzLiRlbCk7XG4gICAgICAgICAgICB0aGlzLnRvZ2dsZXMuZm9yRWFjaChmdW5jdGlvbiAoZWwpIHsgcmV0dXJuIHRvZ2dsZUNsYXNzKGVsLCB0aGlzJDEuY2xzLCBpbmNsdWRlcyhhY3RpdmVzLCBlbCkpOyB9KTtcbiAgICAgICAgfSxcblxuICAgICAgICB1cGRhdGU6IGZ1bmN0aW9uKGRhdGEkJDEpIHtcblxuICAgICAgICAgICAgdmFyIHRvZ2dsZXMgPSBkYXRhJCQxLnRvZ2dsZXM7XG4gICAgICAgICAgICB2YXIgY2hpbGRyZW4gPSBkYXRhJCQxLmNoaWxkcmVuO1xuICAgICAgICAgICAgaWYgKGlzRXF1YWxMaXN0KHRvZ2dsZXMsIHRoaXMudG9nZ2xlcywgZmFsc2UpICYmIGlzRXF1YWxMaXN0KGNoaWxkcmVuLCB0aGlzLnRhcmdldC5jaGlsZHJlbiwgZmFsc2UpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBkYXRhJCQxLnRvZ2dsZXMgPSB0aGlzLnRvZ2dsZXM7XG4gICAgICAgICAgICBkYXRhJCQxLmNoaWxkcmVuID0gdGhpcy50YXJnZXQuY2hpbGRyZW47XG5cbiAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUodGhpcy5nZXRTdGF0ZSgpLCBmYWxzZSk7XG5cbiAgICAgICAgfSxcblxuICAgICAgICBtZXRob2RzOiB7XG5cbiAgICAgICAgICAgIGFwcGx5OiBmdW5jdGlvbihlbCkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUobWVyZ2VTdGF0ZShlbCwgdGhpcy5hdHRySXRlbSwgdGhpcy5nZXRTdGF0ZSgpKSk7XG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICBnZXRTdGF0ZTogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgdmFyIHRoaXMkMSA9IHRoaXM7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy50b2dnbGVzXG4gICAgICAgICAgICAgICAgICAgIC5maWx0ZXIoZnVuY3Rpb24gKGl0ZW0pIHsgcmV0dXJuIGhhc0NsYXNzKGl0ZW0sIHRoaXMkMS5jbHMpOyB9KVxuICAgICAgICAgICAgICAgICAgICAucmVkdWNlKGZ1bmN0aW9uIChzdGF0ZSwgZWwpIHsgcmV0dXJuIG1lcmdlU3RhdGUoZWwsIHRoaXMkMS5hdHRySXRlbSwgc3RhdGUpOyB9LCB7ZmlsdGVyOiB7Jyc6ICcnfSwgc29ydDogW119KTtcbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIHNldFN0YXRlOiBmdW5jdGlvbihzdGF0ZSwgYW5pbWF0ZSQkMSkge1xuICAgICAgICAgICAgICAgIHZhciB0aGlzJDEgPSB0aGlzO1xuICAgICAgICAgICAgICAgIGlmICggYW5pbWF0ZSQkMSA9PT0gdm9pZCAwICkgYW5pbWF0ZSQkMSA9IHRydWU7XG5cblxuICAgICAgICAgICAgICAgIHN0YXRlID0gYXNzaWduKHtmaWx0ZXI6IHsnJzogJyd9LCBzb3J0OiBbXX0sIHN0YXRlKTtcblxuICAgICAgICAgICAgICAgIHRyaWdnZXIodGhpcy4kZWwsICdiZWZvcmVGaWx0ZXInLCBbdGhpcywgc3RhdGVdKTtcblxuICAgICAgICAgICAgICAgIHZhciBjaGlsZHJlbiA9IHRvTm9kZXModGhpcy50YXJnZXQuY2hpbGRyZW4pO1xuXG4gICAgICAgICAgICAgICAgdGhpcy50b2dnbGVzLmZvckVhY2goZnVuY3Rpb24gKGVsKSB7IHJldHVybiB0b2dnbGVDbGFzcyhlbCwgdGhpcyQxLmNscywgbWF0Y2hGaWx0ZXIoZWwsIHRoaXMkMS5hdHRySXRlbSwgc3RhdGUpKTsgfSk7XG5cbiAgICAgICAgICAgICAgICB2YXIgYXBwbHkkJDEgPSBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgICAgICAgICAgdmFyIHNlbGVjdG9yID0gZ2V0U2VsZWN0b3Ioc3RhdGUpO1xuXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuLmZvckVhY2goZnVuY3Rpb24gKGVsKSB7IHJldHVybiBjc3MoZWwsICdkaXNwbGF5Jywgc2VsZWN0b3IgJiYgIW1hdGNoZXMoZWwsIHNlbGVjdG9yKSA/ICdub25lJyA6ICcnKTsgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgdmFyIHJlZiA9IHN0YXRlLnNvcnQ7XG4gICAgICAgICAgICAgICAgICAgIHZhciBzb3J0ID0gcmVmWzBdO1xuICAgICAgICAgICAgICAgICAgICB2YXIgb3JkZXIgPSByZWZbMV07XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHNvcnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzb3J0ZWQgPSBzb3J0SXRlbXMoY2hpbGRyZW4sIHNvcnQsIG9yZGVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaXNFcXVhbExpc3Qoc29ydGVkLCBjaGlsZHJlbikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3J0ZWQuZm9yRWFjaChmdW5jdGlvbiAoZWwpIHsgcmV0dXJuIGFwcGVuZCh0aGlzJDEudGFyZ2V0LCBlbCk7IH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgaWYgKGFuaW1hdGUkJDEpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hbmltYXRlKGFwcGx5JCQxKS50aGVuKGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRyaWdnZXIodGhpcyQxLiRlbCwgJ2FmdGVyRmlsdGVyJywgW3RoaXMkMV0pOyB9KTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBhcHBseSQkMSgpO1xuICAgICAgICAgICAgICAgICAgICB0cmlnZ2VyKHRoaXMuJGVsLCAnYWZ0ZXJGaWx0ZXInLCBbdGhpc10pO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgfVxuXG4gICAgICAgIH1cblxuICAgIH07XG5cbiAgICBmdW5jdGlvbiBnZXRGaWx0ZXIoZWwsIGF0dHIkJDEpIHtcbiAgICAgICAgcmV0dXJuIHBhcnNlT3B0aW9ucyhkYXRhKGVsLCBhdHRyJCQxKSwgWydmaWx0ZXInXSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbWVyZ2VTdGF0ZShlbCwgYXR0ciQkMSwgc3RhdGUpIHtcblxuICAgICAgICB0b05vZGVzKGVsKS5mb3JFYWNoKGZ1bmN0aW9uIChlbCkge1xuICAgICAgICAgICAgdmFyIGZpbHRlckJ5ID0gZ2V0RmlsdGVyKGVsLCBhdHRyJCQxKTtcbiAgICAgICAgICAgIHZhciBmaWx0ZXIkJDEgPSBmaWx0ZXJCeS5maWx0ZXI7XG4gICAgICAgICAgICB2YXIgZ3JvdXAgPSBmaWx0ZXJCeS5ncm91cDtcbiAgICAgICAgICAgIHZhciBzb3J0ID0gZmlsdGVyQnkuc29ydDtcbiAgICAgICAgICAgIHZhciBvcmRlciA9IGZpbHRlckJ5Lm9yZGVyOyBpZiAoIG9yZGVyID09PSB2b2lkIDAgKSBvcmRlciA9ICdhc2MnO1xuXG4gICAgICAgICAgICBpZiAoZmlsdGVyJCQxIHx8IGlzVW5kZWZpbmVkKHNvcnQpKSB7XG5cbiAgICAgICAgICAgICAgICBpZiAoZ3JvdXApIHtcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHN0YXRlLmZpbHRlclsnJ107XG4gICAgICAgICAgICAgICAgICAgIHN0YXRlLmZpbHRlcltncm91cF0gPSBmaWx0ZXIkJDE7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgc3RhdGUuZmlsdGVyID0geycnOiBmaWx0ZXIkJDF9O1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKHNvcnQpKSB7XG4gICAgICAgICAgICAgICAgc3RhdGUuc29ydCA9IFtzb3J0LCBvcmRlcl07XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiBzdGF0ZTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtYXRjaEZpbHRlcihlbCwgYXR0ciQkMSwgcmVmKSB7XG4gICAgICAgIHZhciBzdGF0ZUZpbHRlciA9IHJlZi5maWx0ZXI7XG4gICAgICAgIHZhciByZWZfc29ydCA9IHJlZi5zb3J0O1xuICAgICAgICB2YXIgc3RhdGVTb3J0ID0gcmVmX3NvcnRbMF07XG4gICAgICAgIHZhciBzdGF0ZU9yZGVyID0gcmVmX3NvcnRbMV07XG5cbiAgICAgICAgdmFyIHJlZiQxID0gZ2V0RmlsdGVyKGVsLCBhdHRyJCQxKTtcbiAgICAgICAgdmFyIGZpbHRlciQkMSA9IHJlZiQxLmZpbHRlcjtcbiAgICAgICAgdmFyIGdyb3VwID0gcmVmJDEuZ3JvdXA7IGlmICggZ3JvdXAgPT09IHZvaWQgMCApIGdyb3VwID0gJyc7XG4gICAgICAgIHZhciBzb3J0ID0gcmVmJDEuc29ydDtcbiAgICAgICAgdmFyIG9yZGVyID0gcmVmJDEub3JkZXI7IGlmICggb3JkZXIgPT09IHZvaWQgMCApIG9yZGVyID0gJ2FzYyc7XG4gICAgICAgIHJldHVybiBCb29sZWFuKFxuICAgICAgICAgICAgKGZpbHRlciQkMSB8fCBpc1VuZGVmaW5lZChzb3J0KSkgJiYgZ3JvdXAgaW4gc3RhdGVGaWx0ZXIgJiYgKGZpbHRlciQkMSA9PT0gc3RhdGVGaWx0ZXJbZ3JvdXBdIHx8IGlzVW5kZWZpbmVkKGZpbHRlciQkMSkgJiYgIXN0YXRlRmlsdGVyW2dyb3VwXSlcbiAgICAgICAgICAgIHx8IHN0YXRlU29ydCAmJiBzb3J0ICYmIHN0YXRlU29ydCA9PT0gc29ydCAmJiBzdGF0ZU9yZGVyID09PSBvcmRlclxuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzRXF1YWxMaXN0KGxpc3RBLCBsaXN0Qiwgc3RyaWN0KSB7XG4gICAgICAgIGlmICggc3RyaWN0ID09PSB2b2lkIDAgKSBzdHJpY3QgPSB0cnVlO1xuXG5cbiAgICAgICAgbGlzdEEgPSB0b05vZGVzKGxpc3RBKTtcbiAgICAgICAgbGlzdEIgPSB0b05vZGVzKGxpc3RCKTtcblxuICAgICAgICByZXR1cm4gbGlzdEEubGVuZ3RoID09PSBsaXN0Qi5sZW5ndGhcbiAgICAgICAgICAgICYmIGxpc3RBLmV2ZXJ5KGZ1bmN0aW9uIChlbCwgaSkgeyByZXR1cm4gc3RyaWN0ID8gZWwgPT09IGxpc3RCW2ldIDogfmxpc3RCLmluZGV4T2YoZWwpOyB9KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRTZWxlY3RvcihyZWYpIHtcbiAgICAgICAgdmFyIGZpbHRlciQkMSA9IHJlZi5maWx0ZXI7XG5cbiAgICAgICAgdmFyIHNlbGVjdG9yID0gJyc7XG4gICAgICAgIGVhY2goZmlsdGVyJCQxLCBmdW5jdGlvbiAodmFsdWUpIHsgcmV0dXJuIHNlbGVjdG9yICs9IHZhbHVlIHx8ICcnOyB9KTtcbiAgICAgICAgcmV0dXJuIHNlbGVjdG9yO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHNvcnRJdGVtcyhub2Rlcywgc29ydCwgb3JkZXIpIHtcbiAgICAgICAgcmV0dXJuIHRvTm9kZXMobm9kZXMpLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHsgcmV0dXJuIGRhdGEoYSwgc29ydCkubG9jYWxlQ29tcGFyZShkYXRhKGIsIHNvcnQpKSAqIChvcmRlciA9PT0gJ2FzYycgfHwgLTEpOyB9KTtcbiAgICB9XG5cbiAgICB2YXIgQW5pbWF0aW9ucyA9IHtcblxuICAgICAgICBzbGlkZToge1xuXG4gICAgICAgICAgICBzaG93OiBmdW5jdGlvbihkaXIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgICAgICAgICB7dHJhbnNmb3JtOiB0cmFuc2xhdGUoZGlyICogLTEwMCl9LFxuICAgICAgICAgICAgICAgICAgICB7dHJhbnNmb3JtOiB0cmFuc2xhdGUoKX1cbiAgICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgcGVyY2VudDogZnVuY3Rpb24oY3VycmVudCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cmFuc2xhdGVkKGN1cnJlbnQpO1xuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgdHJhbnNsYXRlOiBmdW5jdGlvbihwZXJjZW50LCBkaXIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgICAgICAgICB7dHJhbnNmb3JtOiB0cmFuc2xhdGUoZGlyICogLTEwMCAqIHBlcmNlbnQpfSxcbiAgICAgICAgICAgICAgICAgICAge3RyYW5zZm9ybTogdHJhbnNsYXRlKGRpciAqIDEwMCAqICgxIC0gcGVyY2VudCkpfVxuICAgICAgICAgICAgICAgIF07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfVxuXG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIHRyYW5zbGF0ZWQoZWwpIHtcbiAgICAgICAgcmV0dXJuIE1hdGguYWJzKGNzcyhlbCwgJ3RyYW5zZm9ybScpLnNwbGl0KCcsJylbNF0gLyBlbC5vZmZzZXRXaWR0aCkgfHwgMDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB0cmFuc2xhdGUodmFsdWUsIHVuaXQpIHtcbiAgICAgICAgaWYgKCB2YWx1ZSA9PT0gdm9pZCAwICkgdmFsdWUgPSAwO1xuICAgICAgICBpZiAoIHVuaXQgPT09IHZvaWQgMCApIHVuaXQgPSAnJSc7XG5cbiAgICAgICAgcmV0dXJuIChcInRyYW5zbGF0ZVgoXCIgKyB2YWx1ZSArICh2YWx1ZSA/IHVuaXQgOiAnJykgKyBcIilcIik7IC8vIGN1cnJlbnRseSBub3QgdHJhbnNsYXRlM2QgdG8gc3VwcG9ydCBJRSwgdHJhbnNsYXRlM2Qgd2l0aGluIHRyYW5zbGF0ZTNkIGRvZXMgbm90IHdvcmsgd2hpbGUgdHJhbnNpdGlvbmluZ1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHNjYWxlM2QodmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIChcInNjYWxlM2QoXCIgKyB2YWx1ZSArIFwiLCBcIiArIHZhbHVlICsgXCIsIDEpXCIpO1xuICAgIH1cblxuICAgIHZhciBBbmltYXRpb25zJDEgPSBhc3NpZ24oe30sIEFuaW1hdGlvbnMsIHtcblxuICAgICAgICBmYWRlOiB7XG5cbiAgICAgICAgICAgIHNob3c6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAgICAgICAgIHtvcGFjaXR5OiAwfSxcbiAgICAgICAgICAgICAgICAgICAge29wYWNpdHk6IDF9XG4gICAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIHBlcmNlbnQ6IGZ1bmN0aW9uKGN1cnJlbnQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gMSAtIGNzcyhjdXJyZW50LCAnb3BhY2l0eScpO1xuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgdHJhbnNsYXRlOiBmdW5jdGlvbihwZXJjZW50KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICAgICAgICAge29wYWNpdHk6IDEgLSBwZXJjZW50fSxcbiAgICAgICAgICAgICAgICAgICAge29wYWNpdHk6IHBlcmNlbnR9XG4gICAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9LFxuXG4gICAgICAgIHNjYWxlOiB7XG5cbiAgICAgICAgICAgIHNob3c6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAgICAgICAgIHtvcGFjaXR5OiAwLCB0cmFuc2Zvcm06IHNjYWxlM2QoMSAtIC4yKX0sXG4gICAgICAgICAgICAgICAgICAgIHtvcGFjaXR5OiAxLCB0cmFuc2Zvcm06IHNjYWxlM2QoMSl9XG4gICAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIHBlcmNlbnQ6IGZ1bmN0aW9uKGN1cnJlbnQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gMSAtIGNzcyhjdXJyZW50LCAnb3BhY2l0eScpO1xuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgdHJhbnNsYXRlOiBmdW5jdGlvbihwZXJjZW50KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICAgICAgICAge29wYWNpdHk6IDEgLSBwZXJjZW50LCB0cmFuc2Zvcm06IHNjYWxlM2QoMSAtIC4yICogcGVyY2VudCl9LFxuICAgICAgICAgICAgICAgICAgICB7b3BhY2l0eTogcGVyY2VudCwgdHJhbnNmb3JtOiBzY2FsZTNkKDEgLSAuMiArIC4yICogcGVyY2VudCl9XG4gICAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9XG5cbiAgICB9KTtcblxuICAgIGZ1bmN0aW9uIFRyYW5zaXRpb25lcihwcmV2LCBuZXh0LCBkaXIsIHJlZikge1xuICAgICAgICB2YXIgYW5pbWF0aW9uID0gcmVmLmFuaW1hdGlvbjtcbiAgICAgICAgdmFyIGVhc2luZyA9IHJlZi5lYXNpbmc7XG5cblxuICAgICAgICB2YXIgcGVyY2VudCA9IGFuaW1hdGlvbi5wZXJjZW50O1xuICAgICAgICB2YXIgdHJhbnNsYXRlID0gYW5pbWF0aW9uLnRyYW5zbGF0ZTtcbiAgICAgICAgdmFyIHNob3cgPSBhbmltYXRpb24uc2hvdzsgaWYgKCBzaG93ID09PSB2b2lkIDAgKSBzaG93ID0gbm9vcDtcbiAgICAgICAgdmFyIHByb3BzID0gc2hvdyhkaXIpO1xuICAgICAgICB2YXIgZGVmZXJyZWQgPSBuZXcgRGVmZXJyZWQoKTtcblxuICAgICAgICByZXR1cm4ge1xuXG4gICAgICAgICAgICBkaXI6IGRpcixcblxuICAgICAgICAgICAgc2hvdzogZnVuY3Rpb24oZHVyYXRpb24sIHBlcmNlbnQsIGxpbmVhcikge1xuICAgICAgICAgICAgICAgIHZhciB0aGlzJDEgPSB0aGlzO1xuICAgICAgICAgICAgICAgIGlmICggcGVyY2VudCA9PT0gdm9pZCAwICkgcGVyY2VudCA9IDA7XG5cblxuICAgICAgICAgICAgICAgIHZhciB0aW1pbmcgPSBsaW5lYXIgPyAnbGluZWFyJyA6IGVhc2luZztcbiAgICAgICAgICAgICAgICBkdXJhdGlvbiAtPSBNYXRoLnJvdW5kKGR1cmF0aW9uICogY2xhbXAocGVyY2VudCwgLTEsIDEpKTtcblxuICAgICAgICAgICAgICAgIHRoaXMudHJhbnNsYXRlKHBlcmNlbnQpO1xuXG4gICAgICAgICAgICAgICAgdHJpZ2dlclVwZGF0ZShuZXh0LCAnaXRlbWluJywge3BlcmNlbnQ6IHBlcmNlbnQsIGR1cmF0aW9uOiBkdXJhdGlvbiwgdGltaW5nOiB0aW1pbmcsIGRpcjogZGlyfSk7XG4gICAgICAgICAgICAgICAgdHJpZ2dlclVwZGF0ZShwcmV2LCAnaXRlbW91dCcsIHtwZXJjZW50OiAxIC0gcGVyY2VudCwgZHVyYXRpb246IGR1cmF0aW9uLCB0aW1pbmc6IHRpbWluZywgZGlyOiBkaXJ9KTtcblxuICAgICAgICAgICAgICAgIFByb21pc2UkMS5hbGwoW1xuICAgICAgICAgICAgICAgICAgICBUcmFuc2l0aW9uLnN0YXJ0KG5leHQsIHByb3BzWzFdLCBkdXJhdGlvbiwgdGltaW5nKSxcbiAgICAgICAgICAgICAgICAgICAgVHJhbnNpdGlvbi5zdGFydChwcmV2LCBwcm9wc1swXSwgZHVyYXRpb24sIHRpbWluZylcbiAgICAgICAgICAgICAgICBdKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcyQxLnJlc2V0KCk7XG4gICAgICAgICAgICAgICAgICAgIGRlZmVycmVkLnJlc29sdmUoKTtcbiAgICAgICAgICAgICAgICB9LCBub29wKTtcblxuICAgICAgICAgICAgICAgIHJldHVybiBkZWZlcnJlZC5wcm9taXNlO1xuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgc3RvcDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFRyYW5zaXRpb24uc3RvcChbbmV4dCwgcHJldl0pO1xuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgY2FuY2VsOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICBUcmFuc2l0aW9uLmNhbmNlbChbbmV4dCwgcHJldl0pO1xuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgcmVzZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIGZvciAodmFyIHByb3AgaW4gcHJvcHNbMF0pIHtcbiAgICAgICAgICAgICAgICAgICAgY3NzKFtuZXh0LCBwcmV2XSwgcHJvcCwgJycpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIGZvcndhcmQ6IGZ1bmN0aW9uKGR1cmF0aW9uLCBwZXJjZW50KSB7XG4gICAgICAgICAgICAgICAgaWYgKCBwZXJjZW50ID09PSB2b2lkIDAgKSBwZXJjZW50ID0gdGhpcy5wZXJjZW50KCk7XG5cbiAgICAgICAgICAgICAgICBUcmFuc2l0aW9uLmNhbmNlbChbbmV4dCwgcHJldl0pO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnNob3coZHVyYXRpb24sIHBlcmNlbnQsIHRydWUpO1xuXG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICB0cmFuc2xhdGU6IGZ1bmN0aW9uKHBlcmNlbnQpIHtcblxuICAgICAgICAgICAgICAgIHRoaXMucmVzZXQoKTtcblxuICAgICAgICAgICAgICAgIHZhciBwcm9wcyA9IHRyYW5zbGF0ZShwZXJjZW50LCBkaXIpO1xuICAgICAgICAgICAgICAgIGNzcyhuZXh0LCBwcm9wc1sxXSk7XG4gICAgICAgICAgICAgICAgY3NzKHByZXYsIHByb3BzWzBdKTtcbiAgICAgICAgICAgICAgICB0cmlnZ2VyVXBkYXRlKG5leHQsICdpdGVtdHJhbnNsYXRlaW4nLCB7cGVyY2VudDogcGVyY2VudCwgZGlyOiBkaXJ9KTtcbiAgICAgICAgICAgICAgICB0cmlnZ2VyVXBkYXRlKHByZXYsICdpdGVtdHJhbnNsYXRlb3V0Jywge3BlcmNlbnQ6IDEgLSBwZXJjZW50LCBkaXI6IGRpcn0pO1xuXG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICBwZXJjZW50OiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcGVyY2VudChwcmV2IHx8IG5leHQsIG5leHQsIGRpcik7XG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICBnZXREaXN0YW5jZTogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHByZXYub2Zmc2V0V2lkdGg7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfTtcblxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHRyaWdnZXJVcGRhdGUoZWwsIHR5cGUsIGRhdGEkJDEpIHtcbiAgICAgICAgdHJpZ2dlcihlbCwgY3JlYXRlRXZlbnQodHlwZSwgZmFsc2UsIGZhbHNlLCBkYXRhJCQxKSk7XG4gICAgfVxuXG4gICAgdmFyIFNsaWRlckF1dG9wbGF5ID0ge1xuXG4gICAgICAgIHByb3BzOiB7XG4gICAgICAgICAgICBhdXRvcGxheTogQm9vbGVhbixcbiAgICAgICAgICAgIGF1dG9wbGF5SW50ZXJ2YWw6IE51bWJlcixcbiAgICAgICAgICAgIHBhdXNlT25Ib3ZlcjogQm9vbGVhblxuICAgICAgICB9LFxuXG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgIGF1dG9wbGF5OiBmYWxzZSxcbiAgICAgICAgICAgIGF1dG9wbGF5SW50ZXJ2YWw6IDcwMDAsXG4gICAgICAgICAgICBwYXVzZU9uSG92ZXI6IHRydWVcbiAgICAgICAgfSxcblxuICAgICAgICBjb25uZWN0ZWQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgdGhpcy5zdGFydEF1dG9wbGF5KCk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgZGlzY29ubmVjdGVkOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHRoaXMuc3RvcEF1dG9wbGF5KCk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgZXZlbnRzOiBbXG5cbiAgICAgICAgICAgIHtcblxuICAgICAgICAgICAgICAgIG5hbWU6ICd2aXNpYmlsaXR5Y2hhbmdlJyxcblxuICAgICAgICAgICAgICAgIGVsOiBkb2N1bWVudCxcblxuICAgICAgICAgICAgICAgIGhhbmRsZXI6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZG9jdW1lbnQuaGlkZGVuKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN0b3BBdXRvcGxheSgpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGFydEF1dG9wbGF5KCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIHtcblxuICAgICAgICAgICAgICAgIG5hbWU6IHBvaW50ZXJEb3duLFxuICAgICAgICAgICAgICAgIGhhbmRsZXI6ICdzdG9wQXV0b3BsYXknXG5cbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIHtcblxuICAgICAgICAgICAgICAgIG5hbWU6ICdtb3VzZWVudGVyJyxcblxuICAgICAgICAgICAgICAgIGZpbHRlcjogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmF1dG9wbGF5O1xuICAgICAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgICAgICBoYW5kbGVyOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pc0hvdmVyaW5nID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIHtcblxuICAgICAgICAgICAgICAgIG5hbWU6ICdtb3VzZWxlYXZlJyxcblxuICAgICAgICAgICAgICAgIGZpbHRlcjogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmF1dG9wbGF5O1xuICAgICAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgICAgICBoYW5kbGVyOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pc0hvdmVyaW5nID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgXSxcblxuICAgICAgICBtZXRob2RzOiB7XG5cbiAgICAgICAgICAgIHN0YXJ0QXV0b3BsYXk6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIHZhciB0aGlzJDEgPSB0aGlzO1xuXG5cbiAgICAgICAgICAgICAgICB0aGlzLnN0b3BBdXRvcGxheSgpO1xuXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuYXV0b3BsYXkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbnRlcnZhbCA9IHNldEludGVydmFsKFxuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKCkgeyByZXR1cm4gISh0aGlzJDEuaXNIb3ZlcmluZyAmJiB0aGlzJDEucGF1c2VPbkhvdmVyKSAmJiAhdGhpcyQxLnN0YWNrLmxlbmd0aCAmJiB0aGlzJDEuc2hvdygnbmV4dCcpOyB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hdXRvcGxheUludGVydmFsXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICBzdG9wQXV0b3BsYXk6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmludGVydmFsKSB7XG4gICAgICAgICAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy5pbnRlcnZhbCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgIH1cblxuICAgIH07XG5cbiAgICB2YXIgU2xpZGVyRHJhZyA9IHtcblxuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICB0aHJlc2hvbGQ6IDEwLFxuICAgICAgICAgICAgcHJldmVudENhdGNoOiBmYWxzZVxuICAgICAgICB9LFxuXG4gICAgICAgIGluaXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgdmFyIHRoaXMkMSA9IHRoaXM7XG5cblxuICAgICAgICAgICAgWydzdGFydCcsICdtb3ZlJywgJ2VuZCddLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuXG4gICAgICAgICAgICAgICAgdmFyIGZuID0gdGhpcyQxW2tleV07XG4gICAgICAgICAgICAgICAgdGhpcyQxW2tleV0gPSBmdW5jdGlvbiAoZSkge1xuXG4gICAgICAgICAgICAgICAgICAgIHZhciBwb3MgPSBnZXRQb3MkMShlKS54ICogKGlzUnRsID8gLTEgOiAxKTtcblxuICAgICAgICAgICAgICAgICAgICB0aGlzJDEucHJldlBvcyA9IHBvcyAhPT0gdGhpcyQxLnBvcyA/IHRoaXMkMS5wb3MgOiB0aGlzJDEucHJldlBvcztcbiAgICAgICAgICAgICAgICAgICAgdGhpcyQxLnBvcyA9IHBvcztcblxuICAgICAgICAgICAgICAgICAgICBmbihlKTtcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICB9LFxuXG4gICAgICAgIGV2ZW50czogW1xuXG4gICAgICAgICAgICB7XG5cbiAgICAgICAgICAgICAgICBuYW1lOiBwb2ludGVyRG93bixcblxuICAgICAgICAgICAgICAgIGRlbGVnYXRlOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2xpZGVzU2VsZWN0b3I7XG4gICAgICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgICAgIGhhbmRsZXI6IGZ1bmN0aW9uKGUpIHtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoIWlzVG91Y2goZSkgJiYgaGFzVGV4dE5vZGVzT25seShlLnRhcmdldClcbiAgICAgICAgICAgICAgICAgICAgICAgIHx8IGUuYnV0dG9uID4gMFxuICAgICAgICAgICAgICAgICAgICAgICAgfHwgdGhpcy5sZW5ndGggPCAyXG4gICAgICAgICAgICAgICAgICAgICAgICB8fCB0aGlzLnByZXZlbnRDYXRjaFxuICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhcnQoZSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ2RyYWdzdGFydCcsXG5cbiAgICAgICAgICAgICAgICBoYW5kbGVyOiBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgXSxcblxuICAgICAgICBtZXRob2RzOiB7XG5cbiAgICAgICAgICAgIHN0YXJ0OiBmdW5jdGlvbigpIHtcblxuICAgICAgICAgICAgICAgIHRoaXMuZHJhZyA9IHRoaXMucG9zO1xuXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX3RyYW5zaXRpb25lcikge1xuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGVyY2VudCA9IHRoaXMuX3RyYW5zaXRpb25lci5wZXJjZW50KCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZHJhZyArPSB0aGlzLl90cmFuc2l0aW9uZXIuZ2V0RGlzdGFuY2UoKSAqIHRoaXMucGVyY2VudCAqIHRoaXMuZGlyO1xuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3RyYW5zaXRpb25lci50cmFuc2xhdGUodGhpcy5wZXJjZW50KTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fdHJhbnNpdGlvbmVyLmNhbmNlbCgpO1xuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZHJhZ2dpbmcgPSB0cnVlO1xuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhY2sgPSBbXTtcblxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucHJldkluZGV4ID0gdGhpcy5pbmRleDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLnVuYmluZE1vdmUgPSBvbihkb2N1bWVudCwgcG9pbnRlck1vdmUsIHRoaXMubW92ZSwge2NhcHR1cmU6IHRydWUsIHBhc3NpdmU6IGZhbHNlfSk7XG4gICAgICAgICAgICAgICAgb24od2luZG93LCAnc2Nyb2xsJywgdGhpcy51bmJpbmRNb3ZlKTtcbiAgICAgICAgICAgICAgICBvbihkb2N1bWVudCwgcG9pbnRlclVwLCB0aGlzLmVuZCwgdHJ1ZSk7XG5cbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIG1vdmU6IGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgICAgICB2YXIgdGhpcyQxID0gdGhpcztcblxuXG4gICAgICAgICAgICAgICAgdmFyIGRpc3RhbmNlID0gdGhpcy5wb3MgLSB0aGlzLmRyYWc7XG5cbiAgICAgICAgICAgICAgICBpZiAoZGlzdGFuY2UgPT09IDAgfHwgdGhpcy5wcmV2UG9zID09PSB0aGlzLnBvcyB8fCAhdGhpcy5kcmFnZ2luZyAmJiBNYXRoLmFicyhkaXN0YW5jZSkgPCB0aGlzLnRocmVzaG9sZCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZS5jYW5jZWxhYmxlICYmIGUucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgICAgICAgICAgIHRoaXMuZHJhZ2dpbmcgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHRoaXMuZGlyID0gKGRpc3RhbmNlIDwgMCA/IDEgOiAtMSk7XG5cbiAgICAgICAgICAgICAgICB2YXIgcmVmID0gdGhpcztcbiAgICAgICAgICAgICAgICB2YXIgc2xpZGVzID0gcmVmLnNsaWRlcztcbiAgICAgICAgICAgICAgICB2YXIgcmVmJDEgPSB0aGlzO1xuICAgICAgICAgICAgICAgIHZhciBwcmV2SW5kZXggPSByZWYkMS5wcmV2SW5kZXg7XG4gICAgICAgICAgICAgICAgdmFyIGRpcyA9IE1hdGguYWJzKGRpc3RhbmNlKTtcbiAgICAgICAgICAgICAgICB2YXIgbmV4dEluZGV4ID0gdGhpcy5nZXRJbmRleChwcmV2SW5kZXggKyB0aGlzLmRpciwgcHJldkluZGV4KTtcbiAgICAgICAgICAgICAgICB2YXIgd2lkdGgkJDEgPSB0aGlzLl9nZXREaXN0YW5jZShwcmV2SW5kZXgsIG5leHRJbmRleCkgfHwgc2xpZGVzW3ByZXZJbmRleF0ub2Zmc2V0V2lkdGg7XG5cbiAgICAgICAgICAgICAgICB3aGlsZSAobmV4dEluZGV4ICE9PSBwcmV2SW5kZXggJiYgZGlzID4gd2lkdGgkJDEpIHtcblxuICAgICAgICAgICAgICAgICAgICB0aGlzJDEuZHJhZyAtPSB3aWR0aCQkMSAqIHRoaXMkMS5kaXI7XG5cbiAgICAgICAgICAgICAgICAgICAgcHJldkluZGV4ID0gbmV4dEluZGV4O1xuICAgICAgICAgICAgICAgICAgICBkaXMgLT0gd2lkdGgkJDE7XG4gICAgICAgICAgICAgICAgICAgIG5leHRJbmRleCA9IHRoaXMkMS5nZXRJbmRleChwcmV2SW5kZXggKyB0aGlzJDEuZGlyLCBwcmV2SW5kZXgpO1xuICAgICAgICAgICAgICAgICAgICB3aWR0aCQkMSA9IHRoaXMkMS5fZ2V0RGlzdGFuY2UocHJldkluZGV4LCBuZXh0SW5kZXgpIHx8IHNsaWRlc1twcmV2SW5kZXhdLm9mZnNldFdpZHRoO1xuXG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGhpcy5wZXJjZW50ID0gZGlzIC8gd2lkdGgkJDE7XG5cbiAgICAgICAgICAgICAgICB2YXIgcHJldiA9IHNsaWRlc1twcmV2SW5kZXhdO1xuICAgICAgICAgICAgICAgIHZhciBuZXh0ID0gc2xpZGVzW25leHRJbmRleF07XG4gICAgICAgICAgICAgICAgdmFyIGNoYW5nZWQgPSB0aGlzLmluZGV4ICE9PSBuZXh0SW5kZXg7XG4gICAgICAgICAgICAgICAgdmFyIGVkZ2UgPSBwcmV2SW5kZXggPT09IG5leHRJbmRleDtcblxuICAgICAgICAgICAgICAgIHZhciBpdGVtU2hvd247XG5cbiAgICAgICAgICAgICAgICBbdGhpcy5pbmRleCwgdGhpcy5wcmV2SW5kZXhdLmZpbHRlcihmdW5jdGlvbiAoaSkgeyByZXR1cm4gIWluY2x1ZGVzKFtuZXh0SW5kZXgsIHByZXZJbmRleF0sIGkpOyB9KS5mb3JFYWNoKGZ1bmN0aW9uIChpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRyaWdnZXIoc2xpZGVzW2ldLCAnaXRlbWhpZGRlbicsIFt0aGlzJDFdKTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoZWRnZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbVNob3duID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMkMS5wcmV2SW5kZXggPSBwcmV2SW5kZXg7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaW5kZXggPT09IHByZXZJbmRleCAmJiB0aGlzLnByZXZJbmRleCAhPT0gcHJldkluZGV4IHx8IGl0ZW1TaG93bikge1xuICAgICAgICAgICAgICAgICAgICB0cmlnZ2VyKHNsaWRlc1t0aGlzLmluZGV4XSwgJ2l0ZW1zaG93bicsIFt0aGlzXSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKGNoYW5nZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wcmV2SW5kZXggPSBwcmV2SW5kZXg7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaW5kZXggPSBuZXh0SW5kZXg7XG5cbiAgICAgICAgICAgICAgICAgICAgIWVkZ2UgJiYgdHJpZ2dlcihwcmV2LCAnYmVmb3JlaXRlbWhpZGUnLCBbdGhpc10pO1xuICAgICAgICAgICAgICAgICAgICB0cmlnZ2VyKG5leHQsICdiZWZvcmVpdGVtc2hvdycsIFt0aGlzXSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGhpcy5fdHJhbnNpdGlvbmVyID0gdGhpcy5fdHJhbnNsYXRlKE1hdGguYWJzKHRoaXMucGVyY2VudCksIHByZXYsICFlZGdlICYmIG5leHQpO1xuXG4gICAgICAgICAgICAgICAgaWYgKGNoYW5nZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgIWVkZ2UgJiYgdHJpZ2dlcihwcmV2LCAnaXRlbWhpZGUnLCBbdGhpc10pO1xuICAgICAgICAgICAgICAgICAgICB0cmlnZ2VyKG5leHQsICdpdGVtc2hvdycsIFt0aGlzXSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICBlbmQ6IGZ1bmN0aW9uKCkge1xuXG4gICAgICAgICAgICAgICAgb2ZmKHdpbmRvdywgJ3Njcm9sbCcsIHRoaXMudW5iaW5kTW92ZSk7XG4gICAgICAgICAgICAgICAgdGhpcy51bmJpbmRNb3ZlKCk7XG4gICAgICAgICAgICAgICAgb2ZmKGRvY3VtZW50LCBwb2ludGVyVXAsIHRoaXMuZW5kLCB0cnVlKTtcblxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmRyYWdnaW5nKSB7XG5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kcmFnZ2luZyA9IG51bGw7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuaW5kZXggPT09IHRoaXMucHJldkluZGV4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBlcmNlbnQgPSAxIC0gdGhpcy5wZXJjZW50O1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kaXIgKj0gLTE7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9zaG93KGZhbHNlLCB0aGlzLmluZGV4LCB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3RyYW5zaXRpb25lciA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkaXJDaGFuZ2UgPSAoaXNSdGwgPyB0aGlzLmRpciAqIChpc1J0bCA/IDEgOiAtMSkgOiB0aGlzLmRpcikgPCAwID09PSB0aGlzLnByZXZQb3MgPiB0aGlzLnBvcztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaW5kZXggPSBkaXJDaGFuZ2UgPyB0aGlzLmluZGV4IDogdGhpcy5wcmV2SW5kZXg7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkaXJDaGFuZ2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBlcmNlbnQgPSAxIC0gdGhpcy5wZXJjZW50O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3codGhpcy5kaXIgPiAwICYmICFkaXJDaGFuZ2UgfHwgdGhpcy5kaXIgPCAwICYmIGRpckNoYW5nZSA/ICduZXh0JyA6ICdwcmV2aW91cycsIHRydWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgcHJldmVudENsaWNrKCk7XG5cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLmRyYWdcbiAgICAgICAgICAgICAgICAgICAgPSB0aGlzLnBlcmNlbnRcbiAgICAgICAgICAgICAgICAgICAgPSBudWxsO1xuXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfVxuXG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIGhhc1RleHROb2Rlc09ubHkoZWwpIHtcbiAgICAgICAgcmV0dXJuICFlbC5jaGlsZHJlbi5sZW5ndGggJiYgZWwuY2hpbGROb2Rlcy5sZW5ndGg7XG4gICAgfVxuXG4gICAgdmFyIFNsaWRlck5hdiA9IHtcblxuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICBzZWxOYXY6IGZhbHNlXG4gICAgICAgIH0sXG5cbiAgICAgICAgY29tcHV0ZWQ6IHtcblxuICAgICAgICAgICAgbmF2OiBmdW5jdGlvbihyZWYsICRlbCkge1xuICAgICAgICAgICAgICAgIHZhciBzZWxOYXYgPSByZWYuc2VsTmF2O1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuICQoc2VsTmF2LCAkZWwpO1xuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgbmF2SXRlbVNlbGVjdG9yOiBmdW5jdGlvbihyZWYpIHtcbiAgICAgICAgICAgICAgICB2YXIgYXR0ckl0ZW0gPSByZWYuYXR0ckl0ZW07XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gKFwiW1wiICsgYXR0ckl0ZW0gKyBcIl0sW2RhdGEtXCIgKyBhdHRySXRlbSArIFwiXVwiKTtcbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIG5hdkl0ZW1zOiBmdW5jdGlvbihfLCAkZWwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJCQodGhpcy5uYXZJdGVtU2VsZWN0b3IsICRlbCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfSxcblxuICAgICAgICB1cGRhdGU6IFtcblxuICAgICAgICAgICAge1xuXG4gICAgICAgICAgICAgICAgd3JpdGU6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgdGhpcyQxID0gdGhpcztcblxuXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLm5hdiAmJiB0aGlzLmxlbmd0aCAhPT0gdGhpcy5uYXYuY2hpbGRyZW4ubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBodG1sKHRoaXMubmF2LCB0aGlzLnNsaWRlcy5tYXAoZnVuY3Rpb24gKF8sIGkpIHsgcmV0dXJuIChcIjxsaSBcIiArICh0aGlzJDEuYXR0ckl0ZW0pICsgXCI9XFxcIlwiICsgaSArIFwiXFxcIj48YSBocmVmPVxcXCIjXFxcIj48L2E+PC9saT5cIik7IH0pLmpvaW4oJycpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHRvZ2dsZUNsYXNzKCQkKHRoaXMubmF2SXRlbVNlbGVjdG9yLCB0aGlzLiRlbCkuY29uY2F0KHRoaXMubmF2KSwgJ3VrLWhpZGRlbicsICF0aGlzLm1heEluZGV4KTtcblxuICAgICAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZU5hdigpO1xuXG4gICAgICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgICAgIGV2ZW50czogWydsb2FkJywgJ3Jlc2l6ZSddXG5cbiAgICAgICAgICAgIH1cblxuICAgICAgICBdLFxuXG4gICAgICAgIGV2ZW50czogW1xuXG4gICAgICAgICAgICB7XG5cbiAgICAgICAgICAgICAgICBuYW1lOiAnY2xpY2snLFxuXG4gICAgICAgICAgICAgICAgZGVsZWdhdGU6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5uYXZJdGVtU2VsZWN0b3I7XG4gICAgICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgICAgIGhhbmRsZXI6IGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgICAgICBlLmN1cnJlbnQuYmx1cigpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3coZGF0YShlLmN1cnJlbnQsIHRoaXMuYXR0ckl0ZW0pKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIHtcblxuICAgICAgICAgICAgICAgIG5hbWU6ICdpdGVtc2hvdycsXG4gICAgICAgICAgICAgICAgaGFuZGxlcjogJ3VwZGF0ZU5hdidcblxuICAgICAgICAgICAgfVxuXG4gICAgICAgIF0sXG5cbiAgICAgICAgbWV0aG9kczoge1xuXG4gICAgICAgICAgICB1cGRhdGVOYXY6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIHZhciB0aGlzJDEgPSB0aGlzO1xuXG5cbiAgICAgICAgICAgICAgICB2YXIgaSA9IHRoaXMuZ2V0VmFsaWRJbmRleCgpO1xuICAgICAgICAgICAgICAgIHRoaXMubmF2SXRlbXMuZm9yRWFjaChmdW5jdGlvbiAoZWwpIHtcblxuICAgICAgICAgICAgICAgICAgICB2YXIgY21kID0gZGF0YShlbCwgdGhpcyQxLmF0dHJJdGVtKTtcblxuICAgICAgICAgICAgICAgICAgICB0b2dnbGVDbGFzcyhlbCwgdGhpcyQxLmNsc0FjdGl2ZSwgdG9OdW1iZXIoY21kKSA9PT0gaSk7XG4gICAgICAgICAgICAgICAgICAgIHRvZ2dsZUNsYXNzKGVsLCAndWstaW52aXNpYmxlJywgdGhpcyQxLmZpbml0ZSAmJiAoY21kID09PSAncHJldmlvdXMnICYmIGkgPT09IDAgfHwgY21kID09PSAnbmV4dCcgJiYgaSA+PSB0aGlzJDEubWF4SW5kZXgpKTtcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgfVxuXG4gICAgICAgIH1cblxuICAgIH07XG5cbiAgICB2YXIgU2xpZGVyID0ge1xuXG4gICAgICAgIGF0dHJzOiB0cnVlLFxuXG4gICAgICAgIG1peGluczogW1NsaWRlckF1dG9wbGF5LCBTbGlkZXJEcmFnLCBTbGlkZXJOYXZdLFxuXG4gICAgICAgIHByb3BzOiB7XG4gICAgICAgICAgICBjbHNBY3RpdmF0ZWQ6IEJvb2xlYW4sXG4gICAgICAgICAgICBlYXNpbmc6IFN0cmluZyxcbiAgICAgICAgICAgIGluZGV4OiBOdW1iZXIsXG4gICAgICAgICAgICBmaW5pdGU6IEJvb2xlYW4sXG4gICAgICAgICAgICB2ZWxvY2l0eTogTnVtYmVyXG4gICAgICAgIH0sXG5cbiAgICAgICAgZGF0YTogZnVuY3Rpb24gKCkgeyByZXR1cm4gKHtcbiAgICAgICAgICAgIGVhc2luZzogJ2Vhc2UnLFxuICAgICAgICAgICAgZmluaXRlOiBmYWxzZSxcbiAgICAgICAgICAgIHZlbG9jaXR5OiAxLFxuICAgICAgICAgICAgaW5kZXg6IDAsXG4gICAgICAgICAgICBzdGFjazogW10sXG4gICAgICAgICAgICBwZXJjZW50OiAwLFxuICAgICAgICAgICAgY2xzQWN0aXZlOiAndWstYWN0aXZlJyxcbiAgICAgICAgICAgIGNsc0FjdGl2YXRlZDogZmFsc2UsXG4gICAgICAgICAgICBUcmFuc2l0aW9uZXI6IGZhbHNlLFxuICAgICAgICAgICAgdHJhbnNpdGlvbk9wdGlvbnM6IHt9XG4gICAgICAgIH0pOyB9LFxuXG4gICAgICAgIGNvbXB1dGVkOiB7XG5cbiAgICAgICAgICAgIGR1cmF0aW9uOiBmdW5jdGlvbihyZWYsICRlbCkge1xuICAgICAgICAgICAgICAgIHZhciB2ZWxvY2l0eSA9IHJlZi52ZWxvY2l0eTtcblxuICAgICAgICAgICAgICAgIHJldHVybiBzcGVlZFVwKCRlbC5vZmZzZXRXaWR0aCAvIHZlbG9jaXR5KTtcbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIGxlbmd0aDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2xpZGVzLmxlbmd0aDtcbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIGxpc3Q6IGZ1bmN0aW9uKHJlZiwgJGVsKSB7XG4gICAgICAgICAgICAgICAgdmFyIHNlbExpc3QgPSByZWYuc2VsTGlzdDtcblxuICAgICAgICAgICAgICAgIHJldHVybiAkKHNlbExpc3QsICRlbCk7XG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICBtYXhJbmRleDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubGVuZ3RoIC0gMTtcbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIHNsaWRlc1NlbGVjdG9yOiBmdW5jdGlvbihyZWYpIHtcbiAgICAgICAgICAgICAgICB2YXIgc2VsTGlzdCA9IHJlZi5zZWxMaXN0O1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIChzZWxMaXN0ICsgXCIgPiAqXCIpO1xuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgc2xpZGVzOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdG9Ob2Rlcyh0aGlzLmxpc3QuY2hpbGRyZW4pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIH0sXG5cbiAgICAgICAgZXZlbnRzOiB7XG5cbiAgICAgICAgICAgIGl0ZW1zaG93bjogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgdGhpcy4kdXBkYXRlKHRoaXMubGlzdCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfSxcblxuICAgICAgICBtZXRob2RzOiB7XG5cbiAgICAgICAgICAgIHNob3c6IGZ1bmN0aW9uKGluZGV4JCQxLCBmb3JjZSkge1xuICAgICAgICAgICAgICAgIHZhciB0aGlzJDEgPSB0aGlzO1xuICAgICAgICAgICAgICAgIGlmICggZm9yY2UgPT09IHZvaWQgMCApIGZvcmNlID0gZmFsc2U7XG5cblxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmRyYWdnaW5nIHx8ICF0aGlzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdmFyIHJlZiA9IHRoaXM7XG4gICAgICAgICAgICAgICAgdmFyIHN0YWNrID0gcmVmLnN0YWNrO1xuICAgICAgICAgICAgICAgIHZhciBxdWV1ZUluZGV4ID0gZm9yY2UgPyAwIDogc3RhY2subGVuZ3RoO1xuICAgICAgICAgICAgICAgIHZhciByZXNldCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgc3RhY2suc3BsaWNlKHF1ZXVlSW5kZXgsIDEpO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChzdGFjay5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMkMS5zaG93KHN0YWNrLnNoaWZ0KCksIHRydWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIHN0YWNrW2ZvcmNlID8gJ3Vuc2hpZnQnIDogJ3B1c2gnXShpbmRleCQkMSk7XG5cbiAgICAgICAgICAgICAgICBpZiAoIWZvcmNlICYmIHN0YWNrLmxlbmd0aCA+IDEpIHtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoc3RhY2subGVuZ3RoID09PSAyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl90cmFuc2l0aW9uZXIuZm9yd2FyZChNYXRoLm1pbih0aGlzLmR1cmF0aW9uLCAyMDApKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB2YXIgcHJldkluZGV4ID0gdGhpcy5pbmRleDtcbiAgICAgICAgICAgICAgICB2YXIgcHJldiA9IGhhc0NsYXNzKHRoaXMuc2xpZGVzLCB0aGlzLmNsc0FjdGl2ZSkgJiYgdGhpcy5zbGlkZXNbcHJldkluZGV4XTtcbiAgICAgICAgICAgICAgICB2YXIgbmV4dEluZGV4ID0gdGhpcy5nZXRJbmRleChpbmRleCQkMSwgdGhpcy5pbmRleCk7XG4gICAgICAgICAgICAgICAgdmFyIG5leHQgPSB0aGlzLnNsaWRlc1tuZXh0SW5kZXhdO1xuXG4gICAgICAgICAgICAgICAgaWYgKHByZXYgPT09IG5leHQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzZXQoKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRoaXMuZGlyID0gZ2V0RGlyZWN0aW9uKGluZGV4JCQxLCBwcmV2SW5kZXgpO1xuICAgICAgICAgICAgICAgIHRoaXMucHJldkluZGV4ID0gcHJldkluZGV4O1xuICAgICAgICAgICAgICAgIHRoaXMuaW5kZXggPSBuZXh0SW5kZXg7XG5cbiAgICAgICAgICAgICAgICBwcmV2ICYmIHRyaWdnZXIocHJldiwgJ2JlZm9yZWl0ZW1oaWRlJywgW3RoaXNdKTtcbiAgICAgICAgICAgICAgICBpZiAoIXRyaWdnZXIobmV4dCwgJ2JlZm9yZWl0ZW1zaG93JywgW3RoaXMsIHByZXZdKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmluZGV4ID0gdGhpcy5wcmV2SW5kZXg7XG4gICAgICAgICAgICAgICAgICAgIHJlc2V0KCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB2YXIgcHJvbWlzZSA9IHRoaXMuX3Nob3cocHJldiwgbmV4dCwgZm9yY2UpLnRoZW4oZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICAgICAgICAgIHByZXYgJiYgdHJpZ2dlcihwcmV2LCAnaXRlbWhpZGRlbicsIFt0aGlzJDFdKTtcbiAgICAgICAgICAgICAgICAgICAgdHJpZ2dlcihuZXh0LCAnaXRlbXNob3duJywgW3RoaXMkMV0pO1xuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSQxKGZ1bmN0aW9uIChyZXNvbHZlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmYXN0ZG9tLndyaXRlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGFjay5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcyQxLnNob3coc3RhY2suc2hpZnQoKSwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcyQxLl90cmFuc2l0aW9uZXIgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIHByZXYgJiYgdHJpZ2dlcihwcmV2LCAnaXRlbWhpZGUnLCBbdGhpc10pO1xuICAgICAgICAgICAgICAgIHRyaWdnZXIobmV4dCwgJ2l0ZW1zaG93JywgW3RoaXNdKTtcblxuICAgICAgICAgICAgICAgIHJldHVybiBwcm9taXNlO1xuXG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICBnZXRJbmRleDogZnVuY3Rpb24oaW5kZXgkJDEsIHByZXYpIHtcbiAgICAgICAgICAgICAgICBpZiAoIGluZGV4JCQxID09PSB2b2lkIDAgKSBpbmRleCQkMSA9IHRoaXMuaW5kZXg7XG4gICAgICAgICAgICAgICAgaWYgKCBwcmV2ID09PSB2b2lkIDAgKSBwcmV2ID0gdGhpcy5pbmRleDtcblxuICAgICAgICAgICAgICAgIHJldHVybiBjbGFtcChnZXRJbmRleChpbmRleCQkMSwgdGhpcy5zbGlkZXMsIHByZXYsIHRoaXMuZmluaXRlKSwgMCwgdGhpcy5tYXhJbmRleCk7XG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICBnZXRWYWxpZEluZGV4OiBmdW5jdGlvbihpbmRleCQkMSwgcHJldkluZGV4KSB7XG4gICAgICAgICAgICAgICAgaWYgKCBpbmRleCQkMSA9PT0gdm9pZCAwICkgaW5kZXgkJDEgPSB0aGlzLmluZGV4O1xuICAgICAgICAgICAgICAgIGlmICggcHJldkluZGV4ID09PSB2b2lkIDAgKSBwcmV2SW5kZXggPSB0aGlzLnByZXZJbmRleDtcblxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmdldEluZGV4KGluZGV4JCQxLCBwcmV2SW5kZXgpO1xuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgX3Nob3c6IGZ1bmN0aW9uKHByZXYsIG5leHQsIGZvcmNlKSB7XG5cbiAgICAgICAgICAgICAgICB0aGlzLl90cmFuc2l0aW9uZXIgPSB0aGlzLl9nZXRUcmFuc2l0aW9uZXIoXG4gICAgICAgICAgICAgICAgICAgIHByZXYsXG4gICAgICAgICAgICAgICAgICAgIG5leHQsXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGlyLFxuICAgICAgICAgICAgICAgICAgICBhc3NpZ24oe1xuICAgICAgICAgICAgICAgICAgICAgICAgZWFzaW5nOiBmb3JjZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gbmV4dC5vZmZzZXRXaWR0aCA8IDYwMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/ICdjdWJpYy1iZXppZXIoMC4yNSwgMC40NiwgMC40NSwgMC45NCknIC8qIGVhc2VPdXRRdWFkICovXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJ2N1YmljLWJlemllcigwLjE2NSwgMC44NCwgMC40NCwgMSknIC8qIGVhc2VPdXRRdWFydCAqL1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogdGhpcy5lYXNpbmdcbiAgICAgICAgICAgICAgICAgICAgfSwgdGhpcy50cmFuc2l0aW9uT3B0aW9ucylcbiAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgaWYgKCFmb3JjZSAmJiAhcHJldikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl90cmFuc2l0aW9uZXIudHJhbnNsYXRlKDEpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZSQxLnJlc29sdmUoKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB2YXIgcmVmID0gdGhpcy5zdGFjaztcbiAgICAgICAgICAgICAgICB2YXIgbGVuZ3RoID0gcmVmLmxlbmd0aDtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fdHJhbnNpdGlvbmVyW2xlbmd0aCA+IDEgPyAnZm9yd2FyZCcgOiAnc2hvdyddKGxlbmd0aCA+IDEgPyBNYXRoLm1pbih0aGlzLmR1cmF0aW9uLCA3NSArIDc1IC8gKGxlbmd0aCAtIDEpKSA6IHRoaXMuZHVyYXRpb24sIHRoaXMucGVyY2VudCk7XG5cbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIF9nZXREaXN0YW5jZTogZnVuY3Rpb24ocHJldiwgbmV4dCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgdGhpcy5fZ2V0VHJhbnNpdGlvbmVyKHByZXYsIHByZXYgIT09IG5leHQgJiYgbmV4dCkuZ2V0RGlzdGFuY2UoKTtcbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIF90cmFuc2xhdGU6IGZ1bmN0aW9uKHBlcmNlbnQsIHByZXYsIG5leHQpIHtcbiAgICAgICAgICAgICAgICBpZiAoIHByZXYgPT09IHZvaWQgMCApIHByZXYgPSB0aGlzLnByZXZJbmRleDtcbiAgICAgICAgICAgICAgICBpZiAoIG5leHQgPT09IHZvaWQgMCApIG5leHQgPSB0aGlzLmluZGV4O1xuXG4gICAgICAgICAgICAgICAgdmFyIHRyYW5zaXRpb25lciA9IHRoaXMuX2dldFRyYW5zaXRpb25lcihwcmV2ICE9PSBuZXh0ID8gcHJldiA6IGZhbHNlLCBuZXh0KTtcbiAgICAgICAgICAgICAgICB0cmFuc2l0aW9uZXIudHJhbnNsYXRlKHBlcmNlbnQpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0cmFuc2l0aW9uZXI7XG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICBfZ2V0VHJhbnNpdGlvbmVyOiBmdW5jdGlvbihwcmV2LCBuZXh0LCBkaXIsIG9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgICBpZiAoIHByZXYgPT09IHZvaWQgMCApIHByZXYgPSB0aGlzLnByZXZJbmRleDtcbiAgICAgICAgICAgICAgICBpZiAoIG5leHQgPT09IHZvaWQgMCApIG5leHQgPSB0aGlzLmluZGV4O1xuICAgICAgICAgICAgICAgIGlmICggZGlyID09PSB2b2lkIDAgKSBkaXIgPSB0aGlzLmRpciB8fCAxO1xuICAgICAgICAgICAgICAgIGlmICggb3B0aW9ucyA9PT0gdm9pZCAwICkgb3B0aW9ucyA9IHRoaXMudHJhbnNpdGlvbk9wdGlvbnM7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IHRoaXMuVHJhbnNpdGlvbmVyKFxuICAgICAgICAgICAgICAgICAgICBpc051bWJlcihwcmV2KSA/IHRoaXMuc2xpZGVzW3ByZXZdIDogcHJldixcbiAgICAgICAgICAgICAgICAgICAgaXNOdW1iZXIobmV4dCkgPyB0aGlzLnNsaWRlc1tuZXh0XSA6IG5leHQsXG4gICAgICAgICAgICAgICAgICAgIGRpciAqIChpc1J0bCA/IC0xIDogMSksXG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnNcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIH1cblxuICAgIH07XG5cbiAgICBmdW5jdGlvbiBnZXREaXJlY3Rpb24oaW5kZXgkJDEsIHByZXZJbmRleCkge1xuICAgICAgICByZXR1cm4gaW5kZXgkJDEgPT09ICduZXh0J1xuICAgICAgICAgICAgPyAxXG4gICAgICAgICAgICA6IGluZGV4JCQxID09PSAncHJldmlvdXMnXG4gICAgICAgICAgICAgICAgPyAtMVxuICAgICAgICAgICAgICAgIDogaW5kZXgkJDEgPCBwcmV2SW5kZXhcbiAgICAgICAgICAgICAgICAgICAgPyAtMVxuICAgICAgICAgICAgICAgICAgICA6IDE7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc3BlZWRVcCh4KSB7XG4gICAgICAgIHJldHVybiAuNSAqIHggKyAzMDA7IC8vIHBhcmFib2xhIHRocm91Z2ggKDQwMCw1MDA7IDYwMCw2MDA7IDE4MDAsMTIwMClcbiAgICB9XG5cbiAgICB2YXIgU2xpZGVzaG93ID0ge1xuXG4gICAgICAgIG1peGluczogW1NsaWRlcl0sXG5cbiAgICAgICAgcHJvcHM6IHtcbiAgICAgICAgICAgIGFuaW1hdGlvbjogU3RyaW5nXG4gICAgICAgIH0sXG5cbiAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgYW5pbWF0aW9uOiAnc2xpZGUnLFxuICAgICAgICAgICAgY2xzQWN0aXZhdGVkOiAndWstdHJhbnNpdGlvbi1hY3RpdmUnLFxuICAgICAgICAgICAgQW5pbWF0aW9uczogQW5pbWF0aW9ucyxcbiAgICAgICAgICAgIFRyYW5zaXRpb25lcjogVHJhbnNpdGlvbmVyXG4gICAgICAgIH0sXG5cbiAgICAgICAgY29tcHV0ZWQ6IHtcblxuICAgICAgICAgICAgYW5pbWF0aW9uOiBmdW5jdGlvbihyZWYpIHtcbiAgICAgICAgICAgICAgICB2YXIgYW5pbWF0aW9uID0gcmVmLmFuaW1hdGlvbjtcbiAgICAgICAgICAgICAgICB2YXIgQW5pbWF0aW9ucyQkMSA9IHJlZi5BbmltYXRpb25zO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIGFzc2lnbihhbmltYXRpb24gaW4gQW5pbWF0aW9ucyQkMSA/IEFuaW1hdGlvbnMkJDFbYW5pbWF0aW9uXSA6IEFuaW1hdGlvbnMkJDEuc2xpZGUsIHtuYW1lOiBhbmltYXRpb259KTtcbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIHRyYW5zaXRpb25PcHRpb25zOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge2FuaW1hdGlvbjogdGhpcy5hbmltYXRpb259O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIH0sXG5cbiAgICAgICAgZXZlbnRzOiB7XG5cbiAgICAgICAgICAgICdpdGVtc2hvdyBpdGVtaGlkZSBpdGVtc2hvd24gaXRlbWhpZGRlbic6IGZ1bmN0aW9uKHJlZikge1xuICAgICAgICAgICAgICAgIHZhciB0YXJnZXQgPSByZWYudGFyZ2V0O1xuXG4gICAgICAgICAgICAgICAgdGhpcy4kdXBkYXRlKHRhcmdldCk7XG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICBpdGVtc2hvdzogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgaXNOdW1iZXIodGhpcy5wcmV2SW5kZXgpICYmIGZhc3Rkb20uZmx1c2goKTsgLy8gaU9TIDEwKyB3aWxsIGhvbm9yIHRoZSB2aWRlby5wbGF5IG9ubHkgaWYgY2FsbGVkIGZyb20gYSBnZXN0dXJlIGhhbmRsZXJcbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIGJlZm9yZWl0ZW1zaG93OiBmdW5jdGlvbihyZWYpIHtcbiAgICAgICAgICAgICAgICB2YXIgdGFyZ2V0ID0gcmVmLnRhcmdldDtcblxuICAgICAgICAgICAgICAgIGFkZENsYXNzKHRhcmdldCwgdGhpcy5jbHNBY3RpdmUpO1xuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgaXRlbXNob3duOiBmdW5jdGlvbihyZWYpIHtcbiAgICAgICAgICAgICAgICB2YXIgdGFyZ2V0ID0gcmVmLnRhcmdldDtcblxuICAgICAgICAgICAgICAgIGFkZENsYXNzKHRhcmdldCwgdGhpcy5jbHNBY3RpdmF0ZWQpO1xuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgaXRlbWhpZGRlbjogZnVuY3Rpb24ocmVmKSB7XG4gICAgICAgICAgICAgICAgdmFyIHRhcmdldCA9IHJlZi50YXJnZXQ7XG5cbiAgICAgICAgICAgICAgICByZW1vdmVDbGFzcyh0YXJnZXQsIHRoaXMuY2xzQWN0aXZlLCB0aGlzLmNsc0FjdGl2YXRlZCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfVxuXG4gICAgfTtcblxuICAgIHZhciBMaWdodGJveFBhbmVsID0ge1xuXG4gICAgICAgIG1peGluczogW0NvbnRhaW5lciwgTW9kYWwsIFRvZ2dsYWJsZSwgU2xpZGVzaG93XSxcblxuICAgICAgICBmdW5jdGlvbmFsOiB0cnVlLFxuXG4gICAgICAgIHByb3BzOiB7XG4gICAgICAgICAgICBkZWxheUNvbnRyb2xzOiBOdW1iZXIsXG4gICAgICAgICAgICBwcmVsb2FkOiBOdW1iZXIsXG4gICAgICAgICAgICB2aWRlb0F1dG9wbGF5OiBCb29sZWFuLFxuICAgICAgICAgICAgdGVtcGxhdGU6IFN0cmluZ1xuICAgICAgICB9LFxuXG4gICAgICAgIGRhdGE6IGZ1bmN0aW9uICgpIHsgcmV0dXJuICh7XG4gICAgICAgICAgICBwcmVsb2FkOiAxLFxuICAgICAgICAgICAgdmlkZW9BdXRvcGxheTogZmFsc2UsXG4gICAgICAgICAgICBkZWxheUNvbnRyb2xzOiAzMDAwLFxuICAgICAgICAgICAgaXRlbXM6IFtdLFxuICAgICAgICAgICAgY2xzOiAndWstb3BlbicsXG4gICAgICAgICAgICBjbHNQYWdlOiAndWstbGlnaHRib3gtcGFnZScsXG4gICAgICAgICAgICBzZWxMaXN0OiAnLnVrLWxpZ2h0Ym94LWl0ZW1zJyxcbiAgICAgICAgICAgIGF0dHJJdGVtOiAndWstbGlnaHRib3gtaXRlbScsXG4gICAgICAgICAgICBzZWxDbG9zZTogJy51ay1jbG9zZS1sYXJnZScsXG4gICAgICAgICAgICBwYXVzZU9uSG92ZXI6IGZhbHNlLFxuICAgICAgICAgICAgdmVsb2NpdHk6IDIsXG4gICAgICAgICAgICBBbmltYXRpb25zOiBBbmltYXRpb25zJDEsXG4gICAgICAgICAgICB0ZW1wbGF0ZTogXCI8ZGl2IGNsYXNzPVxcXCJ1ay1saWdodGJveCB1ay1vdmVyZmxvdy1oaWRkZW5cXFwiPiA8dWwgY2xhc3M9XFxcInVrLWxpZ2h0Ym94LWl0ZW1zXFxcIj48L3VsPiA8ZGl2IGNsYXNzPVxcXCJ1ay1saWdodGJveC10b29sYmFyIHVrLXBvc2l0aW9uLXRvcCB1ay10ZXh0LXJpZ2h0IHVrLXRyYW5zaXRpb24tc2xpZGUtdG9wIHVrLXRyYW5zaXRpb24tb3BhcXVlXFxcIj4gPGJ1dHRvbiBjbGFzcz1cXFwidWstbGlnaHRib3gtdG9vbGJhci1pY29uIHVrLWNsb3NlLWxhcmdlXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIHVrLWNsb3NlPjwvYnV0dG9uPiA8L2Rpdj4gPGEgY2xhc3M9XFxcInVrLWxpZ2h0Ym94LWJ1dHRvbiB1ay1wb3NpdGlvbi1jZW50ZXItbGVmdCB1ay1wb3NpdGlvbi1tZWRpdW0gdWstdHJhbnNpdGlvbi1mYWRlXFxcIiBocmVmPVxcXCIjXFxcIiB1ay1zbGlkZW5hdi1wcmV2aW91cyB1ay1saWdodGJveC1pdGVtPVxcXCJwcmV2aW91c1xcXCI+PC9hPiA8YSBjbGFzcz1cXFwidWstbGlnaHRib3gtYnV0dG9uIHVrLXBvc2l0aW9uLWNlbnRlci1yaWdodCB1ay1wb3NpdGlvbi1tZWRpdW0gdWstdHJhbnNpdGlvbi1mYWRlXFxcIiBocmVmPVxcXCIjXFxcIiB1ay1zbGlkZW5hdi1uZXh0IHVrLWxpZ2h0Ym94LWl0ZW09XFxcIm5leHRcXFwiPjwvYT4gPGRpdiBjbGFzcz1cXFwidWstbGlnaHRib3gtdG9vbGJhciB1ay1saWdodGJveC1jYXB0aW9uIHVrLXBvc2l0aW9uLWJvdHRvbSB1ay10ZXh0LWNlbnRlciB1ay10cmFuc2l0aW9uLXNsaWRlLWJvdHRvbSB1ay10cmFuc2l0aW9uLW9wYXF1ZVxcXCI+PC9kaXY+IDwvZGl2PlwiXG4gICAgICAgIH0pOyB9LFxuXG4gICAgICAgIGNyZWF0ZWQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgdmFyIHRoaXMkMSA9IHRoaXM7XG5cblxuICAgICAgICAgICAgdGhpcy4kbW91bnQoYXBwZW5kKHRoaXMuY29udGFpbmVyLCB0aGlzLnRlbXBsYXRlKSk7XG5cbiAgICAgICAgICAgIHRoaXMuY2FwdGlvbiA9ICQoJy51ay1saWdodGJveC1jYXB0aW9uJywgdGhpcy4kZWwpO1xuXG4gICAgICAgICAgICB0aGlzLml0ZW1zLmZvckVhY2goZnVuY3Rpb24gKCkgeyByZXR1cm4gYXBwZW5kKHRoaXMkMS5saXN0LCAnPGxpPjwvbGk+Jyk7IH0pO1xuXG4gICAgICAgIH0sXG5cbiAgICAgICAgZXZlbnRzOiBbXG5cbiAgICAgICAgICAgIHtcblxuICAgICAgICAgICAgICAgIG5hbWU6IChwb2ludGVyTW92ZSArIFwiIFwiICsgcG9pbnRlckRvd24gKyBcIiBrZXlkb3duXCIpLFxuXG4gICAgICAgICAgICAgICAgaGFuZGxlcjogJ3Nob3dDb250cm9scydcblxuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAge1xuXG4gICAgICAgICAgICAgICAgbmFtZTogJ2NsaWNrJyxcblxuICAgICAgICAgICAgICAgIHNlbGY6IHRydWUsXG5cbiAgICAgICAgICAgICAgICBkZWxlZ2F0ZTogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnNsaWRlc1NlbGVjdG9yO1xuICAgICAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgICAgICBoYW5kbGVyOiBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5oaWRlKCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICB7XG5cbiAgICAgICAgICAgICAgICBuYW1lOiAnc2hvd24nLFxuXG4gICAgICAgICAgICAgICAgc2VsZjogdHJ1ZSxcblxuICAgICAgICAgICAgICAgIGhhbmRsZXI6ICdzaG93Q29udHJvbHMnXG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICB7XG5cbiAgICAgICAgICAgICAgICBuYW1lOiAnaGlkZScsXG5cbiAgICAgICAgICAgICAgICBzZWxmOiB0cnVlLFxuXG4gICAgICAgICAgICAgICAgaGFuZGxlcjogZnVuY3Rpb24oKSB7XG5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5oaWRlQ29udHJvbHMoKTtcblxuICAgICAgICAgICAgICAgICAgICByZW1vdmVDbGFzcyh0aGlzLnNsaWRlcywgdGhpcy5jbHNBY3RpdmUpO1xuICAgICAgICAgICAgICAgICAgICBUcmFuc2l0aW9uLnN0b3AodGhpcy5zbGlkZXMpO1xuXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAge1xuXG4gICAgICAgICAgICAgICAgbmFtZTogJ2tleXVwJyxcblxuICAgICAgICAgICAgICAgIGVsOiBkb2N1bWVudCxcblxuICAgICAgICAgICAgICAgIGhhbmRsZXI6IGZ1bmN0aW9uKGUpIHtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuaXNUb2dnbGVkKHRoaXMuJGVsKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChlLmtleUNvZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMzc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG93KCdwcmV2aW91cycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAzOTpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3coJ25leHQnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIHtcblxuICAgICAgICAgICAgICAgIG5hbWU6ICdiZWZvcmVpdGVtc2hvdycsXG5cbiAgICAgICAgICAgICAgICBoYW5kbGVyOiBmdW5jdGlvbihlKSB7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNUb2dnbGVkKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucHJldmVudENhdGNoID0gdHJ1ZTtcblxuICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy50b2dnbGVOb3codGhpcy4kZWwsIHRydWUpO1xuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYW5pbWF0aW9uID0gQW5pbWF0aW9ucyQxWydzY2FsZSddO1xuICAgICAgICAgICAgICAgICAgICByZW1vdmVDbGFzcyhlLnRhcmdldCwgdGhpcy5jbHNBY3RpdmUpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YWNrLnNwbGljZSgxLCAwLCB0aGlzLmluZGV4KTtcblxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAge1xuXG4gICAgICAgICAgICAgICAgbmFtZTogJ2l0ZW1zaG93JyxcblxuICAgICAgICAgICAgICAgIGhhbmRsZXI6IGZ1bmN0aW9uKHJlZikge1xuICAgICAgICAgICAgICAgICAgICB2YXIgdGhpcyQxID0gdGhpcztcbiAgICAgICAgICAgICAgICAgICAgdmFyIHRhcmdldCA9IHJlZi50YXJnZXQ7XG5cblxuICAgICAgICAgICAgICAgICAgICB2YXIgaSA9IGluZGV4KHRhcmdldCk7XG4gICAgICAgICAgICAgICAgICAgIHZhciByZWYkMSA9IHRoaXMuZ2V0SXRlbShpKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGNhcHRpb24gPSByZWYkMS5jYXB0aW9uO1xuXG4gICAgICAgICAgICAgICAgICAgIGNzcyh0aGlzLmNhcHRpb24sICdkaXNwbGF5JywgY2FwdGlvbiA/ICcnIDogJ25vbmUnKTtcbiAgICAgICAgICAgICAgICAgICAgaHRtbCh0aGlzLmNhcHRpb24sIGNhcHRpb24pO1xuXG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDw9IHRoaXMucHJlbG9hZDsgaisrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzJDEubG9hZEl0ZW0odGhpcyQxLmdldEluZGV4KGkgKyBqKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzJDEubG9hZEl0ZW0odGhpcyQxLmdldEluZGV4KGkgLSBqKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAge1xuXG4gICAgICAgICAgICAgICAgbmFtZTogJ2l0ZW1zaG93bicsXG5cbiAgICAgICAgICAgICAgICBoYW5kbGVyOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wcmV2ZW50Q2F0Y2ggPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIHtcblxuICAgICAgICAgICAgICAgIG5hbWU6ICdpdGVtbG9hZCcsXG5cbiAgICAgICAgICAgICAgICBoYW5kbGVyOiBmdW5jdGlvbihfLCBpdGVtKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciB0aGlzJDEgPSB0aGlzO1xuXG5cbiAgICAgICAgICAgICAgICAgICAgdmFyIHNvdXJjZSA9IGl0ZW0uc291cmNlO1xuICAgICAgICAgICAgICAgICAgICB2YXIgdHlwZSA9IGl0ZW0udHlwZTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGFsdCA9IGl0ZW0uYWx0O1xuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0SXRlbShpdGVtLCAnPHNwYW4gdWstc3Bpbm5lcj48L3NwYW4+Jyk7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKCFzb3VyY2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHZhciBtYXRjaGVzJCQxO1xuXG4gICAgICAgICAgICAgICAgICAgIC8vIEltYWdlXG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlID09PSAnaW1hZ2UnIHx8IHNvdXJjZS5tYXRjaCgvXFwuKGpwKGUpP2d8cG5nfGdpZnxzdmcpKCR8XFw/KS9pKSkge1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBnZXRJbWFnZShzb3VyY2UpLnRoZW4oXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKGltZykgeyByZXR1cm4gdGhpcyQxLnNldEl0ZW0oaXRlbSwgKFwiPGltZyB3aWR0aD1cXFwiXCIgKyAoaW1nLndpZHRoKSArIFwiXFxcIiBoZWlnaHQ9XFxcIlwiICsgKGltZy5oZWlnaHQpICsgXCJcXFwiIHNyYz1cXFwiXCIgKyBzb3VyY2UgKyBcIlxcXCIgYWx0PVxcXCJcIiArIChhbHQgPyBhbHQgOiAnJykgKyBcIlxcXCI+XCIpKTsgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzJDEuc2V0RXJyb3IoaXRlbSk7IH1cbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFZpZGVvXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ3ZpZGVvJyB8fCBzb3VyY2UubWF0Y2goL1xcLihtcDR8d2VibXxvZ3YpKCR8XFw/KS9pKSkge1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdmlkZW8gPSAkKChcIjx2aWRlbyBjb250cm9scyBwbGF5c2lubGluZVwiICsgKGl0ZW0ucG9zdGVyID8gKFwiIHBvc3Rlcj1cXFwiXCIgKyAoaXRlbS5wb3N0ZXIpICsgXCJcXFwiXCIpIDogJycpICsgXCIgdWstdmlkZW89XFxcIlwiICsgKHRoaXMudmlkZW9BdXRvcGxheSkgKyBcIlxcXCI+PC92aWRlbz5cIikpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYXR0cih2aWRlbywgJ3NyYycsIHNvdXJjZSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIG9uKHZpZGVvLCAnZXJyb3InLCBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzJDEuc2V0RXJyb3IoaXRlbSk7IH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgb24odmlkZW8sICdsb2FkZWRtZXRhZGF0YScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyKHZpZGVvLCB7d2lkdGg6IHZpZGVvLnZpZGVvV2lkdGgsIGhlaWdodDogdmlkZW8udmlkZW9IZWlnaHR9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzJDEuc2V0SXRlbShpdGVtLCB2aWRlbyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWZyYW1lXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ2lmcmFtZScgfHwgc291cmNlLm1hdGNoKC9cXC4oaHRtbHxwaHApKCR8XFw/KS9pKSkge1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldEl0ZW0oaXRlbSwgKFwiPGlmcmFtZSBjbGFzcz1cXFwidWstbGlnaHRib3gtaWZyYW1lXFxcIiBzcmM9XFxcIlwiICsgc291cmNlICsgXCJcXFwiIGZyYW1lYm9yZGVyPVxcXCIwXFxcIiBhbGxvd2Z1bGxzY3JlZW4+PC9pZnJhbWU+XCIpKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gWW91VHViZVxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKChtYXRjaGVzJCQxID0gc291cmNlLm1hdGNoKC9cXC9cXC8uKj95b3V0dWJlKC1ub2Nvb2tpZSk/XFwuW2Etel0rXFwvd2F0Y2hcXD92PShbXiZcXHNdKykvKSB8fCBzb3VyY2UubWF0Y2goLygpeW91dHVcXC5iZVxcLyguKikvKSkpIHtcblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGlkID0gbWF0Y2hlcyQkMVsyXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzZXRJZnJhbWUgPSBmdW5jdGlvbiAod2lkdGgkJDEsIGhlaWdodCQkMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggd2lkdGgkJDEgPT09IHZvaWQgMCApIHdpZHRoJCQxID0gNjQwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggaGVpZ2h0JCQxID09PSB2b2lkIDAgKSBoZWlnaHQkJDEgPSA0NTA7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcyQxLnNldEl0ZW0oaXRlbSwgZ2V0SWZyYW1lKChcImh0dHBzOi8vd3d3LnlvdXR1YmVcIiArIChtYXRjaGVzJCQxWzFdIHx8ICcnKSArIFwiLmNvbS9lbWJlZC9cIiArIGlkKSwgd2lkdGgkJDEsIGhlaWdodCQkMSwgdGhpcyQxLnZpZGVvQXV0b3BsYXkpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGdldEltYWdlKChcImh0dHBzOi8vaW1nLnlvdXR1YmUuY29tL3ZpL1wiICsgaWQgKyBcIi9tYXhyZXNkZWZhdWx0LmpwZ1wiKSkudGhlbihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiAocmVmKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB3aWR0aCQkMSA9IHJlZi53aWR0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGhlaWdodCQkMSA9IHJlZi5oZWlnaHQ7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gWW91VHViZSBkZWZhdWx0IDQwNCB0aHVtYiwgZmFsbCBiYWNrIHRvIGxvdyByZXNvbHV0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh3aWR0aCQkMSA9PT0gMTIwICYmIGhlaWdodCQkMSA9PT0gOTApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldEltYWdlKChcImh0dHBzOi8vaW1nLnlvdXR1YmUuY29tL3ZpL1wiICsgaWQgKyBcIi8wLmpwZ1wiKSkudGhlbihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiAocmVmKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB3aWR0aCQkMSA9IHJlZi53aWR0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGhlaWdodCQkMSA9IHJlZi5oZWlnaHQ7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNldElmcmFtZSh3aWR0aCQkMSwgaGVpZ2h0JCQxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0SWZyYW1lXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0SWZyYW1lKHdpZHRoJCQxLCBoZWlnaHQkJDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRJZnJhbWVcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFZpbWVvXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoKG1hdGNoZXMkJDEgPSBzb3VyY2UubWF0Y2goLyhcXC9cXC8uKj8pdmltZW9cXC5bYS16XStcXC8oWzAtOV0rKS4qPy8pKSkge1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBhamF4KChcImh0dHBzOi8vdmltZW8uY29tL2FwaS9vZW1iZWQuanNvbj9tYXh3aWR0aD0xOTIwJnVybD1cIiArIChlbmNvZGVVUkkoc291cmNlKSkpLCB7cmVzcG9uc2VUeXBlOiAnanNvbicsIHdpdGhDcmVkZW50aWFsczogZmFsc2V9KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC50aGVuKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiAocmVmKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVmX3Jlc3BvbnNlID0gcmVmLnJlc3BvbnNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGhlaWdodCQkMSA9IHJlZl9yZXNwb25zZS5oZWlnaHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgd2lkdGgkJDEgPSByZWZfcmVzcG9uc2Uud2lkdGg7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzJDEuc2V0SXRlbShpdGVtLCBnZXRJZnJhbWUoKFwiaHR0cHM6Ly9wbGF5ZXIudmltZW8uY29tL3ZpZGVvL1wiICsgKG1hdGNoZXMkJDFbMl0pKSwgd2lkdGgkJDEsIGhlaWdodCQkMSwgdGhpcyQxLnZpZGVvQXV0b3BsYXkpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXMkMS5zZXRFcnJvcihpdGVtKTsgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgXSxcblxuICAgICAgICBtZXRob2RzOiB7XG5cbiAgICAgICAgICAgIGxvYWRJdGVtOiBmdW5jdGlvbihpbmRleCQkMSkge1xuICAgICAgICAgICAgICAgIGlmICggaW5kZXgkJDEgPT09IHZvaWQgMCApIGluZGV4JCQxID0gdGhpcy5pbmRleDtcblxuXG4gICAgICAgICAgICAgICAgdmFyIGl0ZW0gPSB0aGlzLmdldEl0ZW0oaW5kZXgkJDEpO1xuXG4gICAgICAgICAgICAgICAgaWYgKGl0ZW0uY29udGVudCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdHJpZ2dlcih0aGlzLiRlbCwgJ2l0ZW1sb2FkJywgW2l0ZW1dKTtcbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIGdldEl0ZW06IGZ1bmN0aW9uKGluZGV4JCQxKSB7XG4gICAgICAgICAgICAgICAgaWYgKCBpbmRleCQkMSA9PT0gdm9pZCAwICkgaW5kZXgkJDEgPSB0aGlzLmluZGV4O1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuaXRlbXNbaW5kZXgkJDFdIHx8IHt9O1xuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgc2V0SXRlbTogZnVuY3Rpb24oaXRlbSwgY29udGVudCkge1xuICAgICAgICAgICAgICAgIGFzc2lnbihpdGVtLCB7Y29udGVudDogY29udGVudH0pO1xuICAgICAgICAgICAgICAgIHZhciBlbCA9IGh0bWwodGhpcy5zbGlkZXNbdGhpcy5pdGVtcy5pbmRleE9mKGl0ZW0pXSwgY29udGVudCk7XG4gICAgICAgICAgICAgICAgdHJpZ2dlcih0aGlzLiRlbCwgJ2l0ZW1sb2FkZWQnLCBbdGhpcywgZWxdKTtcbiAgICAgICAgICAgICAgICB0aGlzLiR1cGRhdGUoZWwpO1xuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgc2V0RXJyb3I6IGZ1bmN0aW9uKGl0ZW0pIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldEl0ZW0oaXRlbSwgJzxzcGFuIHVrLWljb249XCJpY29uOiBib2x0OyByYXRpbzogMlwiPjwvc3Bhbj4nKTtcbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIHNob3dDb250cm9sczogZnVuY3Rpb24oKSB7XG5cbiAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5jb250cm9sc1RpbWVyKTtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbnRyb2xzVGltZXIgPSBzZXRUaW1lb3V0KHRoaXMuaGlkZUNvbnRyb2xzLCB0aGlzLmRlbGF5Q29udHJvbHMpO1xuXG4gICAgICAgICAgICAgICAgYWRkQ2xhc3ModGhpcy4kZWwsICd1ay1hY3RpdmUnLCAndWstdHJhbnNpdGlvbi1hY3RpdmUnKTtcblxuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgaGlkZUNvbnRyb2xzOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICByZW1vdmVDbGFzcyh0aGlzLiRlbCwgJ3VrLWFjdGl2ZScsICd1ay10cmFuc2l0aW9uLWFjdGl2ZScpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIH1cblxuICAgIH07XG5cbiAgICBmdW5jdGlvbiBnZXRJZnJhbWUoc3JjLCB3aWR0aCQkMSwgaGVpZ2h0JCQxLCBhdXRvcGxheSkge1xuICAgICAgICByZXR1cm4gKFwiPGlmcmFtZSBzcmM9XFxcIlwiICsgc3JjICsgXCJcXFwiIHdpZHRoPVxcXCJcIiArIHdpZHRoJCQxICsgXCJcXFwiIGhlaWdodD1cXFwiXCIgKyBoZWlnaHQkJDEgKyBcIlxcXCIgc3R5bGU9XFxcIm1heC13aWR0aDogMTAwJTsgYm94LXNpemluZzogYm9yZGVyLWJveDtcXFwiIGZyYW1lYm9yZGVyPVxcXCIwXFxcIiBhbGxvd2Z1bGxzY3JlZW4gdWstdmlkZW89XFxcImF1dG9wbGF5OiBcIiArIGF1dG9wbGF5ICsgXCJcXFwiIHVrLXJlc3BvbnNpdmU+PC9pZnJhbWU+XCIpO1xuICAgIH1cblxuICAgIHZhciBwcm9wcyA9IG1lcmdlKExpZ2h0Ym94UGFuZWwsICdwcm9wcycpO1xuICAgIHZhciBkZWZhdWx0cyA9IG1lcmdlKExpZ2h0Ym94UGFuZWwsICdkYXRhJyk7XG5cbiAgICB2YXIgTGlnaHRib3ggPSB7XG5cbiAgICAgICAgaW5zdGFsbDogaW5zdGFsbCQyLFxuXG4gICAgICAgIGF0dHJzOiB0cnVlLFxuXG4gICAgICAgIHByb3BzOiBhc3NpZ24oe3RvZ2dsZTogU3RyaW5nfSwgcHJvcHMpLFxuXG4gICAgICAgIGRhdGE6IGFzc2lnbih7dG9nZ2xlOiAnYSd9LCBPYmplY3Qua2V5cyhwcm9wcykucmVkdWNlKGZ1bmN0aW9uIChkYXRhJCQxLCBrZXkpIHtcbiAgICAgICAgICAgIGRhdGEkJDFba2V5XSA9IGRlZmF1bHRzW2tleV07XG4gICAgICAgICAgICByZXR1cm4gZGF0YSQkMTtcbiAgICAgICAgfSwge30pKSxcblxuICAgICAgICBjb21wdXRlZDoge1xuXG4gICAgICAgICAgICB0b2dnbGVzOiBmdW5jdGlvbihyZWYsICRlbCkge1xuICAgICAgICAgICAgICAgIHZhciB0b2dnbGUgPSByZWYudG9nZ2xlO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuICQkKHRvZ2dsZSwgJGVsKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9LFxuXG4gICAgICAgIGRpc2Nvbm5lY3RlZDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICB0aGlzLl9kZXN0cm95KCk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgZXZlbnRzOiBbXG5cbiAgICAgICAgICAgIHtcblxuICAgICAgICAgICAgICAgIG5hbWU6ICdjbGljaycsXG5cbiAgICAgICAgICAgICAgICBkZWxlZ2F0ZTogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAoKHRoaXMudG9nZ2xlKSArIFwiOm5vdCgudWstZGlzYWJsZWQpXCIpO1xuICAgICAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgICAgICBoYW5kbGVyOiBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICAgICAgZS5jdXJyZW50LmJsdXIoKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG93KGluZGV4KHRoaXMudG9nZ2xlcywgZS5jdXJyZW50KSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgXSxcblxuICAgICAgICB1cGRhdGU6IGZ1bmN0aW9uKGRhdGEkJDEpIHtcblxuICAgICAgICAgICAgZGF0YSQkMS50b2dnbGVzID0gZGF0YSQkMS50b2dnbGVzIHx8IHRoaXMudG9nZ2xlcztcblxuICAgICAgICAgICAgaWYgKHRoaXMucGFuZWwgJiYgdGhpcy5hbmltYXRpb24pIHtcbiAgICAgICAgICAgICAgICB0aGlzLnBhbmVsLiRwcm9wcy5hbmltYXRpb24gPSB0aGlzLmFuaW1hdGlvbjtcbiAgICAgICAgICAgICAgICB0aGlzLnBhbmVsLiRlbWl0KCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICghdGhpcy5wYW5lbCB8fCBpc0VxdWFsTGlzdCQxKGRhdGEkJDEudG9nZ2xlcywgdGhpcy50b2dnbGVzKSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZGF0YSQkMS50b2dnbGVzID0gdGhpcy50b2dnbGVzO1xuICAgICAgICAgICAgdGhpcy5fZGVzdHJveSgpO1xuICAgICAgICAgICAgdGhpcy5faW5pdCgpO1xuXG4gICAgICAgIH0sXG5cbiAgICAgICAgbWV0aG9kczoge1xuXG4gICAgICAgICAgICBfaW5pdDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucGFuZWwgPSB0aGlzLnBhbmVsIHx8IHRoaXMuJGNyZWF0ZSgnbGlnaHRib3hQYW5lbCcsIGFzc2lnbih7fSwgdGhpcy4kcHJvcHMsIHtcbiAgICAgICAgICAgICAgICAgICAgaXRlbXM6IHRoaXMudG9nZ2xlcy5yZWR1Y2UoZnVuY3Rpb24gKGl0ZW1zLCBlbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXMucHVzaChbJ2hyZWYnLCAnY2FwdGlvbicsICd0eXBlJywgJ3Bvc3RlcicsICdhbHQnXS5yZWR1Y2UoZnVuY3Rpb24gKG9iaiwgYXR0ciQkMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9ialthdHRyJCQxID09PSAnaHJlZicgPyAnc291cmNlJyA6IGF0dHIkJDFdID0gZGF0YShlbCwgYXR0ciQkMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9iajtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHt9KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaXRlbXM7XG4gICAgICAgICAgICAgICAgICAgIH0sIFtdKVxuICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIF9kZXN0cm95OiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5wYW5lbCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnBhbmVsLiRkZXN0cm95KHRydWUpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnBhbmVsID0gbnVsbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICBzaG93OiBmdW5jdGlvbihpbmRleCQkMSkge1xuXG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLnBhbmVsKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2luaXQoKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wYW5lbC5zaG93KGluZGV4JCQxKTtcblxuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgaGlkZTogZnVuY3Rpb24oKSB7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wYW5lbCAmJiB0aGlzLnBhbmVsLmhpZGUoKTtcblxuICAgICAgICAgICAgfVxuXG4gICAgICAgIH1cblxuICAgIH07XG5cbiAgICBmdW5jdGlvbiBpc0VxdWFsTGlzdCQxKGxpc3RBLCBsaXN0Qikge1xuICAgICAgICByZXR1cm4gbGlzdEEubGVuZ3RoID09PSBsaXN0Qi5sZW5ndGhcbiAgICAgICAgICAgICYmIGxpc3RBLmV2ZXJ5KGZ1bmN0aW9uIChlbCwgaSkgeyByZXR1cm4gZWwgPT09IGxpc3RCW2ldOyB9KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtZXJnZShvcHRpb25zLCBwcm9wKSB7XG4gICAgICAgIHJldHVybiBhc3NpZ24uYXBwbHkoXG4gICAgICAgICAgICB2b2lkIDAsIFsge30gXS5jb25jYXQoIChvcHRpb25zLm1peGlucyA/IG9wdGlvbnMubWl4aW5zLm1hcChmdW5jdGlvbiAobWl4aW4pIHsgcmV0dXJuIG1lcmdlKG1peGluLCBwcm9wKTsgfSkgOiBbXSksXG4gICAgICAgICAgICBbaXNGdW5jdGlvbihvcHRpb25zW3Byb3BdKSA/IG9wdGlvbnNbcHJvcF0oKSA6IG9wdGlvbnNbcHJvcF1dICkpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGluc3RhbGwkMihVSWtpdCkge1xuICAgICAgICBpZiAoIVVJa2l0LmxpZ2h0Ym94UGFuZWwpIHtcbiAgICAgICAgICAgIFVJa2l0LmNvbXBvbmVudCgnbGlnaHRib3hQYW5lbCcsIExpZ2h0Ym94UGFuZWwpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdmFyIG9iajtcblxuICAgIHZhciBjb250YWluZXJzID0ge307XG5cbiAgICB2YXIgTm90aWZpY2F0aW9uID0ge1xuXG4gICAgICAgIGZ1bmN0aW9uYWw6IHRydWUsXG5cbiAgICAgICAgYXJnczogWydtZXNzYWdlJywgJ3N0YXR1cyddLFxuXG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgIG1lc3NhZ2U6ICcnLFxuICAgICAgICAgICAgc3RhdHVzOiAnJyxcbiAgICAgICAgICAgIHRpbWVvdXQ6IDUwMDAsXG4gICAgICAgICAgICBncm91cDogbnVsbCxcbiAgICAgICAgICAgIHBvczogJ3RvcC1jZW50ZXInLFxuICAgICAgICAgICAgY2xzQ2xvc2U6ICd1ay1ub3RpZmljYXRpb24tY2xvc2UnLFxuICAgICAgICAgICAgY2xzTXNnOiAndWstbm90aWZpY2F0aW9uLW1lc3NhZ2UnXG4gICAgICAgIH0sXG5cbiAgICAgICAgaW5zdGFsbDogaW5zdGFsbCQzLFxuXG4gICAgICAgIGNyZWF0ZWQ6IGZ1bmN0aW9uKCkge1xuXG4gICAgICAgICAgICBpZiAoIWNvbnRhaW5lcnNbdGhpcy5wb3NdKSB7XG4gICAgICAgICAgICAgICAgY29udGFpbmVyc1t0aGlzLnBvc10gPSBhcHBlbmQodGhpcy4kY29udGFpbmVyLCAoXCI8ZGl2IGNsYXNzPVxcXCJ1ay1ub3RpZmljYXRpb24gdWstbm90aWZpY2F0aW9uLVwiICsgKHRoaXMucG9zKSArIFwiXFxcIj48L2Rpdj5cIikpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB2YXIgY29udGFpbmVyID0gY3NzKGNvbnRhaW5lcnNbdGhpcy5wb3NdLCAnZGlzcGxheScsICdibG9jaycpO1xuXG4gICAgICAgICAgICB0aGlzLiRtb3VudChhcHBlbmQoY29udGFpbmVyLFxuICAgICAgICAgICAgICAgIChcIjxkaXYgY2xhc3M9XFxcIlwiICsgKHRoaXMuY2xzTXNnKSArICh0aGlzLnN0YXR1cyA/IChcIiBcIiArICh0aGlzLmNsc01zZykgKyBcIi1cIiArICh0aGlzLnN0YXR1cykpIDogJycpICsgXCJcXFwiPiA8YSBocmVmPVxcXCIjXFxcIiBjbGFzcz1cXFwiXCIgKyAodGhpcy5jbHNDbG9zZSkgKyBcIlxcXCIgZGF0YS11ay1jbG9zZT48L2E+IDxkaXY+XCIgKyAodGhpcy5tZXNzYWdlKSArIFwiPC9kaXY+IDwvZGl2PlwiKVxuICAgICAgICAgICAgKSk7XG5cbiAgICAgICAgfSxcblxuICAgICAgICByZWFkeTogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICB2YXIgdGhpcyQxID0gdGhpcztcblxuXG4gICAgICAgICAgICB2YXIgbWFyZ2luQm90dG9tID0gdG9GbG9hdChjc3ModGhpcy4kZWwsICdtYXJnaW5Cb3R0b20nKSk7XG4gICAgICAgICAgICBUcmFuc2l0aW9uLnN0YXJ0KFxuICAgICAgICAgICAgICAgIGNzcyh0aGlzLiRlbCwge29wYWNpdHk6IDAsIG1hcmdpblRvcDogLXRoaXMuJGVsLm9mZnNldEhlaWdodCwgbWFyZ2luQm90dG9tOiAwfSksXG4gICAgICAgICAgICAgICAge29wYWNpdHk6IDEsIG1hcmdpblRvcDogMCwgbWFyZ2luQm90dG9tOiBtYXJnaW5Cb3R0b219XG4gICAgICAgICAgICApLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzJDEudGltZW91dCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzJDEudGltZXIgPSBzZXRUaW1lb3V0KHRoaXMkMS5jbG9zZSwgdGhpcyQxLnRpbWVvdXQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIH0sXG5cbiAgICAgICAgZXZlbnRzOiAoIG9iaiA9IHtcblxuICAgICAgICAgICAgY2xpY2s6IGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgICAgICBpZiAoY2xvc2VzdChlLnRhcmdldCwgJ2FbaHJlZj1cIiNcIl0nKSkge1xuICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9LCBvYmpbcG9pbnRlckVudGVyXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy50aW1lcikge1xuICAgICAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy50aW1lcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgb2JqW3BvaW50ZXJMZWF2ZV0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMudGltZW91dCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnRpbWVyID0gc2V0VGltZW91dCh0aGlzLmNsb3NlLCB0aGlzLnRpbWVvdXQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIG9iaiApLFxuXG4gICAgICAgIG1ldGhvZHM6IHtcblxuICAgICAgICAgICAgY2xvc2U6IGZ1bmN0aW9uKGltbWVkaWF0ZSkge1xuICAgICAgICAgICAgICAgIHZhciB0aGlzJDEgPSB0aGlzO1xuXG5cbiAgICAgICAgICAgICAgICB2YXIgcmVtb3ZlRm4gPSBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgICAgICAgICAgdHJpZ2dlcih0aGlzJDEuJGVsLCAnY2xvc2UnLCBbdGhpcyQxXSk7XG4gICAgICAgICAgICAgICAgICAgIHJlbW92ZSh0aGlzJDEuJGVsKTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoIWNvbnRhaW5lcnNbdGhpcyQxLnBvc10uY2hpbGRyZW4ubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjc3MoY29udGFpbmVyc1t0aGlzJDEucG9zXSwgJ2Rpc3BsYXknLCAnbm9uZScpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMudGltZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMudGltZXIpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChpbW1lZGlhdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVtb3ZlRm4oKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBUcmFuc2l0aW9uLnN0YXJ0KHRoaXMuJGVsLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBvcGFjaXR5OiAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luVG9wOiAtdGhpcy4kZWwub2Zmc2V0SGVpZ2h0LFxuICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luQm90dG9tOiAwXG4gICAgICAgICAgICAgICAgICAgIH0pLnRoZW4ocmVtb3ZlRm4pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICB9XG5cbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gaW5zdGFsbCQzKFVJa2l0KSB7XG4gICAgICAgIFVJa2l0Lm5vdGlmaWNhdGlvbi5jbG9zZUFsbCA9IGZ1bmN0aW9uIChncm91cCwgaW1tZWRpYXRlKSB7XG4gICAgICAgICAgICBhcHBseShkb2N1bWVudC5ib2R5LCBmdW5jdGlvbiAoZWwpIHtcbiAgICAgICAgICAgICAgICB2YXIgbm90aWZpY2F0aW9uID0gVUlraXQuZ2V0Q29tcG9uZW50KGVsLCAnbm90aWZpY2F0aW9uJyk7XG4gICAgICAgICAgICAgICAgaWYgKG5vdGlmaWNhdGlvbiAmJiAoIWdyb3VwIHx8IGdyb3VwID09PSBub3RpZmljYXRpb24uZ3JvdXApKSB7XG4gICAgICAgICAgICAgICAgICAgIG5vdGlmaWNhdGlvbi5jbG9zZShpbW1lZGlhdGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIHZhciBwcm9wcyQxID0gWyd4JywgJ3knLCAnYmd4JywgJ2JneScsICdyb3RhdGUnLCAnc2NhbGUnLCAnY29sb3InLCAnYmFja2dyb3VuZENvbG9yJywgJ2JvcmRlckNvbG9yJywgJ29wYWNpdHknLCAnYmx1cicsICdodWUnLCAnZ3JheXNjYWxlJywgJ2ludmVydCcsICdzYXR1cmF0ZScsICdzZXBpYScsICdmb3BhY2l0eSddO1xuXG4gICAgdmFyIFBhcmFsbGF4ID0ge1xuXG4gICAgICAgIHByb3BzOiBwcm9wcyQxLnJlZHVjZShmdW5jdGlvbiAocHJvcHMsIHByb3ApIHtcbiAgICAgICAgICAgIHByb3BzW3Byb3BdID0gJ2xpc3QnO1xuICAgICAgICAgICAgcmV0dXJuIHByb3BzO1xuICAgICAgICB9LCB7XG4gICAgICAgICAgICBtZWRpYTogJ21lZGlhJ1xuICAgICAgICB9KSxcblxuICAgICAgICBkYXRhOiBwcm9wcyQxLnJlZHVjZShmdW5jdGlvbiAoZGF0YSQkMSwgcHJvcCkge1xuICAgICAgICAgICAgZGF0YSQkMVtwcm9wXSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIHJldHVybiBkYXRhJCQxO1xuICAgICAgICB9LCB7XG4gICAgICAgICAgICBtZWRpYTogZmFsc2VcbiAgICAgICAgfSksXG5cbiAgICAgICAgY29tcHV0ZWQ6IHtcblxuICAgICAgICAgICAgcHJvcHM6IGZ1bmN0aW9uKHByb3BlcnRpZXMsICRlbCkge1xuICAgICAgICAgICAgICAgIHZhciB0aGlzJDEgPSB0aGlzO1xuXG5cbiAgICAgICAgICAgICAgICByZXR1cm4gcHJvcHMkMS5yZWR1Y2UoZnVuY3Rpb24gKHByb3BzLCBwcm9wKSB7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzVW5kZWZpbmVkKHByb3BlcnRpZXNbcHJvcF0pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcHJvcHM7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB2YXIgaXNDb2xvciA9IHByb3AubWF0Y2goL2NvbG9yL2kpO1xuICAgICAgICAgICAgICAgICAgICB2YXIgaXNDc3NQcm9wID0gaXNDb2xvciB8fCBwcm9wID09PSAnb3BhY2l0eSc7XG5cbiAgICAgICAgICAgICAgICAgICAgdmFyIHBvcywgYmdQb3MsIGRpZmY7XG4gICAgICAgICAgICAgICAgICAgIHZhciBzdGVwcyA9IHByb3BlcnRpZXNbcHJvcF0uc2xpY2UoMCk7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzQ3NzUHJvcCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY3NzKCRlbCwgcHJvcCwgJycpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHN0ZXBzLmxlbmd0aCA8IDIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0ZXBzLnVuc2hpZnQoKHByb3AgPT09ICdzY2FsZSdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IDFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGlzQ3NzUHJvcFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGNzcygkZWwsIHByb3ApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogMCkgfHwgMCk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB2YXIgdW5pdCA9IGluY2x1ZGVzKHN0ZXBzLmpvaW4oJycpLCAnJScpID8gJyUnIDogJ3B4JztcblxuICAgICAgICAgICAgICAgICAgICBpZiAoaXNDb2xvcikge1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVmID0gJGVsLnN0eWxlO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvbG9yID0gcmVmLmNvbG9yO1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RlcHMgPSBzdGVwcy5tYXAoZnVuY3Rpb24gKHN0ZXApIHsgcmV0dXJuIHBhcnNlQ29sb3IoJGVsLCBzdGVwKTsgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAkZWwuc3R5bGUuY29sb3IgPSBjb2xvcjtcblxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGVwcyA9IHN0ZXBzLm1hcCh0b0Zsb2F0KTtcblxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHByb3AubWF0Y2goL15iZy8pKSB7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNzcygkZWwsIChcImJhY2tncm91bmQtcG9zaXRpb24tXCIgKyAocHJvcFsyXSkpLCAnJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBiZ1BvcyA9IGNzcygkZWwsICdiYWNrZ3JvdW5kUG9zaXRpb24nKS5zcGxpdCgnICcpW3Byb3BbMl0gPT09ICd4JyA/IDAgOiAxXTsgLy8gSUUgMTEgY2FuJ3QgcmVhZCBiYWNrZ3JvdW5kLXBvc2l0aW9uLVt4fHldXG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzJDEuY292ZXJzKSB7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbWluID0gTWF0aC5taW4uYXBwbHkoTWF0aCwgc3RlcHMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtYXggPSBNYXRoLm1heC5hcHBseShNYXRoLCBzdGVwcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRvd24gPSBzdGVwcy5pbmRleE9mKG1pbikgPCBzdGVwcy5pbmRleE9mKG1heCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWZmID0gbWF4IC0gbWluO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RlcHMgPSBzdGVwcy5tYXAoZnVuY3Rpb24gKHN0ZXApIHsgcmV0dXJuIHN0ZXAgLSAoZG93biA/IG1pbiA6IG1heCk7IH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcyA9IChkb3duID8gLWRpZmYgOiAwKSArIFwicHhcIjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcyA9IGJnUG9zO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBwcm9wc1twcm9wXSA9IHtzdGVwczogc3RlcHMsIHVuaXQ6IHVuaXQsIHBvczogcG9zLCBiZ1BvczogYmdQb3MsIGRpZmY6IGRpZmZ9O1xuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBwcm9wcztcblxuICAgICAgICAgICAgICAgIH0sIHt9KTtcblxuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgYmdQcm9wczogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgdmFyIHRoaXMkMSA9IHRoaXM7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gWydiZ3gnLCAnYmd5J10uZmlsdGVyKGZ1bmN0aW9uIChiZykgeyByZXR1cm4gYmcgaW4gdGhpcyQxLnByb3BzOyB9KTtcbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIGNvdmVyczogZnVuY3Rpb24oXywgJGVsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvdmVycygkZWwpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIH0sXG5cbiAgICAgICAgZGlzY29ubmVjdGVkOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl9pbWFnZTtcbiAgICAgICAgfSxcblxuICAgICAgICB1cGRhdGU6IFtcblxuICAgICAgICAgICAge1xuXG4gICAgICAgICAgICAgICAgcmVhZDogZnVuY3Rpb24oZGF0YSQkMSkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgdGhpcyQxID0gdGhpcztcblxuXG4gICAgICAgICAgICAgICAgICAgIGRhdGEkJDEuYWN0aXZlID0gIXRoaXMubWVkaWEgfHwgd2luZG93Lm1hdGNoTWVkaWEodGhpcy5tZWRpYSkubWF0Y2hlcztcblxuICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YSQkMS5pbWFnZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSQkMS5pbWFnZS5kaW1FbCA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogdGhpcy4kZWwub2Zmc2V0V2lkdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiB0aGlzLiRlbC5vZmZzZXRIZWlnaHRcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBpZiAoJ2ltYWdlJyBpbiBkYXRhJCQxIHx8ICF0aGlzLmNvdmVycyB8fCAhdGhpcy5iZ1Byb3BzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgdmFyIHNyYyA9IGNzcyh0aGlzLiRlbCwgJ2JhY2tncm91bmRJbWFnZScpLnJlcGxhY2UoL15ub25lfHVybFxcKFtcIiddPyguKz8pW1wiJ10/XFwpJC8sICckMScpO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmICghc3JjKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBkYXRhJCQxLmltYWdlID0gZmFsc2U7XG5cbiAgICAgICAgICAgICAgICAgICAgZ2V0SW1hZ2Uoc3JjKS50aGVuKGZ1bmN0aW9uIChpbWcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEkJDEuaW1hZ2UgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IGltZy5uYXR1cmFsV2lkdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiBpbWcubmF0dXJhbEhlaWdodFxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcyQxLiRlbWl0KCk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgICAgIHdyaXRlOiBmdW5jdGlvbihyZWYpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHRoaXMkMSA9IHRoaXM7XG4gICAgICAgICAgICAgICAgICAgIHZhciBpbWFnZSA9IHJlZi5pbWFnZTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGFjdGl2ZSA9IHJlZi5hY3RpdmU7XG5cblxuICAgICAgICAgICAgICAgICAgICBpZiAoIWltYWdlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBpZiAoIWFjdGl2ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY3NzKHRoaXMuJGVsLCB7YmFja2dyb3VuZFNpemU6ICcnLCBiYWNrZ3JvdW5kUmVwZWF0OiAnJ30pO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgdmFyIGRpbUVsID0gaW1hZ2UuZGltRWw7XG5cbiAgICAgICAgICAgICAgICAgICAgdmFyIGRpbSA9IERpbWVuc2lvbnMuY292ZXIoaW1hZ2UsIGRpbUVsKTtcblxuICAgICAgICAgICAgICAgICAgICB0aGlzLmJnUHJvcHMuZm9yRWFjaChmdW5jdGlvbiAocHJvcCkge1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVmID0gdGhpcyQxLnByb3BzW3Byb3BdO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRpZmYgPSByZWYuZGlmZjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBiZ1BvcyA9IHJlZi5iZ1BvcztcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdGVwcyA9IHJlZi5zdGVwcztcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBhdHRyJCQxID0gcHJvcCA9PT0gJ2JneScgPyAnaGVpZ2h0JyA6ICd3aWR0aCc7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3BhbiA9IGRpbVthdHRyJCQxXSAtIGRpbUVsW2F0dHIkJDFdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWJnUG9zLm1hdGNoKC8lJHwwcHgvKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNwYW4gPCBkaWZmKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGltRWxbYXR0ciQkMV0gPSBkaW1bYXR0ciQkMV0gKyBkaWZmIC0gc3BhbjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3BhbiA+IGRpZmYpIHtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBiZ1Bvc0Zsb2F0ID0gcGFyc2VGbG9hdChiZ1Bvcyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYmdQb3NGbG9hdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzJDEucHJvcHNbcHJvcF0uc3RlcHMgPSBzdGVwcy5tYXAoZnVuY3Rpb24gKHN0ZXApIHsgcmV0dXJuIHN0ZXAgLSAoc3BhbiAtIGRpZmYpIC8gKDEwMCAvIGJnUG9zRmxvYXQpOyB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGRpbSA9IERpbWVuc2lvbnMuY292ZXIoaW1hZ2UsIGRpbUVsKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgY3NzKHRoaXMuJGVsLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kU2l6ZTogKChkaW0ud2lkdGgpICsgXCJweCBcIiArIChkaW0uaGVpZ2h0KSArIFwicHhcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kUmVwZWF0OiAnbm8tcmVwZWF0J1xuICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgICAgICBldmVudHM6IFsnbG9hZCcsICdyZXNpemUnXVxuXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgXSxcblxuICAgICAgICBtZXRob2RzOiB7XG5cbiAgICAgICAgICAgIHJlc2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICB2YXIgdGhpcyQxID0gdGhpcztcblxuICAgICAgICAgICAgICAgIGVhY2godGhpcy5nZXRDc3MoMCksIGZ1bmN0aW9uIChfLCBwcm9wKSB7IHJldHVybiBjc3ModGhpcyQxLiRlbCwgcHJvcCwgJycpOyB9KTtcbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIGdldENzczogZnVuY3Rpb24ocGVyY2VudCkge1xuXG4gICAgICAgICAgICAgICAgdmFyIHJlZiA9IHRoaXM7XG4gICAgICAgICAgICAgICAgdmFyIHByb3BzID0gcmVmLnByb3BzO1xuICAgICAgICAgICAgICAgIHZhciB0cmFuc2xhdGVkID0gZmFsc2U7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gT2JqZWN0LmtleXMocHJvcHMpLnJlZHVjZShmdW5jdGlvbiAoY3NzJCQxLCBwcm9wKSB7XG5cbiAgICAgICAgICAgICAgICAgICAgdmFyIHJlZiA9IHByb3BzW3Byb3BdO1xuICAgICAgICAgICAgICAgICAgICB2YXIgc3RlcHMgPSByZWYuc3RlcHM7XG4gICAgICAgICAgICAgICAgICAgIHZhciB1bml0ID0gcmVmLnVuaXQ7XG4gICAgICAgICAgICAgICAgICAgIHZhciBwb3MgPSByZWYucG9zO1xuICAgICAgICAgICAgICAgICAgICB2YXIgdmFsdWUgPSBnZXRWYWx1ZShzdGVwcywgcGVyY2VudCk7XG5cbiAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChwcm9wKSB7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRyYW5zZm9ybXNcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ3gnOlxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAneSc6XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHJhbnNsYXRlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVmJDEgPSBbJ3gnLCAneSddLm1hcChmdW5jdGlvbiAoZGlyKSB7IHJldHVybiBwcm9wID09PSBkaXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyB2YWx1ZSArIHVuaXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBwcm9wc1tkaXJdXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGdldFZhbHVlKHByb3BzW2Rpcl0uc3RlcHMsIHBlcmNlbnQpICsgcHJvcHNbZGlyXS51bml0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IDA7IH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB2YXIgeCA9IHJlZiQxWzBdO1xuICAgICAgICAgICAgICAgICAgICB2YXIgeSA9IHJlZiQxWzFdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNsYXRlZCA9IGNzcyQkMS50cmFuc2Zvcm0gKz0gXCIgdHJhbnNsYXRlM2QoXCIgKyB4ICsgXCIsIFwiICsgeSArIFwiLCAwKVwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAncm90YXRlJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc3MkJDEudHJhbnNmb3JtICs9IFwiIHJvdGF0ZShcIiArIHZhbHVlICsgXCJkZWcpXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdzY2FsZSc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3NzJCQxLnRyYW5zZm9ybSArPSBcIiBzY2FsZShcIiArIHZhbHVlICsgXCIpXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJnIGltYWdlXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdiZ3knOlxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnYmd4JzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc3MkJDFbKFwiYmFja2dyb3VuZC1wb3NpdGlvbi1cIiArIChwcm9wWzJdKSldID0gXCJjYWxjKFwiICsgcG9zICsgXCIgKyBcIiArICh2YWx1ZSArIHVuaXQpICsgXCIpXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbG9yXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdjb2xvcic6XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdiYWNrZ3JvdW5kQ29sb3InOlxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnYm9yZGVyQ29sb3InOlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlZiQyID0gZ2V0U3RlcChzdGVwcywgcGVyY2VudCk7XG4gICAgICAgICAgICAgICAgICAgIHZhciBzdGFydCA9IHJlZiQyWzBdO1xuICAgICAgICAgICAgICAgICAgICB2YXIgZW5kID0gcmVmJDJbMV07XG4gICAgICAgICAgICAgICAgICAgIHZhciBwID0gcmVmJDJbMl07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc3MkJDFbcHJvcF0gPSBcInJnYmEoXCIgKyAoc3RhcnQubWFwKGZ1bmN0aW9uICh2YWx1ZSwgaSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZSArIHAgKiAoZW5kW2ldIC0gdmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGkgPT09IDMgPyB0b0Zsb2F0KHZhbHVlKSA6IHBhcnNlSW50KHZhbHVlLCAxMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLmpvaW4oJywnKSkgKyBcIilcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ1NTIEZpbHRlclxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnYmx1cic6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3NzJCQxLmZpbHRlciArPSBcIiBibHVyKFwiICsgdmFsdWUgKyBcInB4KVwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnaHVlJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc3MkJDEuZmlsdGVyICs9IFwiIGh1ZS1yb3RhdGUoXCIgKyB2YWx1ZSArIFwiZGVnKVwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnZm9wYWNpdHknOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzcyQkMS5maWx0ZXIgKz0gXCIgb3BhY2l0eShcIiArIHZhbHVlICsgXCIlKVwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnZ3JheXNjYWxlJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2ludmVydCc6XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdzYXR1cmF0ZSc6XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdzZXBpYSc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3NzJCQxLmZpbHRlciArPSBcIiBcIiArIHByb3AgKyBcIihcIiArIHZhbHVlICsgXCIlKVwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzcyQkMVtwcm9wXSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNzcyQkMTtcblxuICAgICAgICAgICAgICAgIH0sIHt0cmFuc2Zvcm06ICcnLCBmaWx0ZXI6ICcnfSk7XG5cbiAgICAgICAgICAgIH1cblxuICAgICAgICB9XG5cbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gcGFyc2VDb2xvcihlbCwgY29sb3IpIHtcbiAgICAgICAgcmV0dXJuIGNzcyhjc3MoZWwsICdjb2xvcicsIGNvbG9yKSwgJ2NvbG9yJykuc3BsaXQoL1soKSxdL2cpLnNsaWNlKDEsIC0xKS5jb25jYXQoMSkuc2xpY2UoMCwgNCkubWFwKGZ1bmN0aW9uIChuKSB7IHJldHVybiB0b0Zsb2F0KG4pOyB9KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRTdGVwKHN0ZXBzLCBwZXJjZW50KSB7XG4gICAgICAgIHZhciBjb3VudCA9IHN0ZXBzLmxlbmd0aCAtIDE7XG4gICAgICAgIHZhciBpbmRleCQkMSA9IE1hdGgubWluKE1hdGguZmxvb3IoY291bnQgKiBwZXJjZW50KSwgY291bnQgLSAxKTtcbiAgICAgICAgdmFyIHN0ZXAgPSBzdGVwcy5zbGljZShpbmRleCQkMSwgaW5kZXgkJDEgKyAyKTtcblxuICAgICAgICBzdGVwLnB1c2gocGVyY2VudCA9PT0gMSA/IDEgOiBwZXJjZW50ICUgKDEgLyBjb3VudCkgKiBjb3VudCk7XG5cbiAgICAgICAgcmV0dXJuIHN0ZXA7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0VmFsdWUoc3RlcHMsIHBlcmNlbnQpIHtcbiAgICAgICAgdmFyIHJlZiA9IGdldFN0ZXAoc3RlcHMsIHBlcmNlbnQpO1xuICAgICAgICB2YXIgc3RhcnQgPSByZWZbMF07XG4gICAgICAgIHZhciBlbmQgPSByZWZbMV07XG4gICAgICAgIHZhciBwID0gcmVmWzJdO1xuICAgICAgICByZXR1cm4gKGlzTnVtYmVyKHN0YXJ0KVxuICAgICAgICAgICAgICAgID8gc3RhcnQgKyBNYXRoLmFicyhzdGFydCAtIGVuZCkgKiBwICogKHN0YXJ0IDwgZW5kID8gMSA6IC0xKVxuICAgICAgICAgICAgICAgIDogK2VuZFxuICAgICAgICApLnRvRml4ZWQoMik7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY292ZXJzKGVsKSB7XG4gICAgICAgIHZhciByZWYgPSBlbC5zdHlsZTtcbiAgICAgICAgdmFyIGJhY2tncm91bmRTaXplID0gcmVmLmJhY2tncm91bmRTaXplO1xuICAgICAgICB2YXIgY292ZXJzID0gY3NzKGNzcyhlbCwgJ2JhY2tncm91bmRTaXplJywgJycpLCAnYmFja2dyb3VuZFNpemUnKSA9PT0gJ2NvdmVyJztcbiAgICAgICAgZWwuc3R5bGUuYmFja2dyb3VuZFNpemUgPSBiYWNrZ3JvdW5kU2l6ZTtcbiAgICAgICAgcmV0dXJuIGNvdmVycztcbiAgICB9XG5cbiAgICB2YXIgUGFyYWxsYXgkMSA9IHtcblxuICAgICAgICBtaXhpbnM6IFtQYXJhbGxheF0sXG5cbiAgICAgICAgcHJvcHM6IHtcbiAgICAgICAgICAgIHRhcmdldDogU3RyaW5nLFxuICAgICAgICAgICAgdmlld3BvcnQ6IE51bWJlcixcbiAgICAgICAgICAgIGVhc2luZzogTnVtYmVyLFxuICAgICAgICB9LFxuXG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgIHRhcmdldDogZmFsc2UsXG4gICAgICAgICAgICB2aWV3cG9ydDogMSxcbiAgICAgICAgICAgIGVhc2luZzogMSxcbiAgICAgICAgfSxcblxuICAgICAgICBjb21wdXRlZDoge1xuXG4gICAgICAgICAgICB0YXJnZXQ6IGZ1bmN0aW9uKHJlZiwgJGVsKSB7XG4gICAgICAgICAgICAgICAgdmFyIHRhcmdldCA9IHJlZi50YXJnZXQ7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gdGFyZ2V0ICYmIHF1ZXJ5KHRhcmdldCwgJGVsKSB8fCAkZWw7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfSxcblxuICAgICAgICB1cGRhdGU6IFtcblxuICAgICAgICAgICAge1xuXG4gICAgICAgICAgICAgICAgcmVhZDogZnVuY3Rpb24ocmVmKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBwZXJjZW50ID0gcmVmLnBlcmNlbnQ7XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHByZXY6IHBlcmNlbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICBwZXJjZW50OiBlYXNlJDEoc2Nyb2xsZWRPdmVyKHRoaXMudGFyZ2V0KSAvICh0aGlzLnZpZXdwb3J0IHx8IDEpLCB0aGlzLmVhc2luZylcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICAgICAgd3JpdGU6IGZ1bmN0aW9uKHJlZiwgcmVmJDEpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHByZXYgPSByZWYucHJldjtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHBlcmNlbnQgPSByZWYucGVyY2VudDtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGFjdGl2ZSA9IHJlZi5hY3RpdmU7XG4gICAgICAgICAgICAgICAgICAgIHZhciB0eXBlID0gcmVmJDEudHlwZTtcblxuXG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlICE9PSAnc2Nyb2xsJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcHJldiA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKCFhY3RpdmUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVzZXQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGlmIChwcmV2ICE9PSBwZXJjZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjc3ModGhpcy4kZWwsIHRoaXMuZ2V0Q3NzKHBlcmNlbnQpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgICAgIGV2ZW50czogWydzY3JvbGwnLCAnbG9hZCcsICdyZXNpemUnXVxuICAgICAgICAgICAgfVxuXG4gICAgICAgIF1cblxuICAgIH07XG5cbiAgICBmdW5jdGlvbiBlYXNlJDEocGVyY2VudCwgZWFzaW5nKSB7XG4gICAgICAgIHJldHVybiBjbGFtcChwZXJjZW50ICogKDEgLSAoZWFzaW5nIC0gZWFzaW5nICogcGVyY2VudCkpKTtcbiAgICB9XG5cbiAgICB2YXIgU2xpZGVyUmVhY3RpdmUgPSB7XG5cbiAgICAgICAgdXBkYXRlOiBbXG5cbiAgICAgICAgICAgIHtcblxuICAgICAgICAgICAgICAgIHdyaXRlOiBmdW5jdGlvbigpIHtcblxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5zdGFjay5sZW5ndGggfHwgdGhpcy5kcmFnZ2luZykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgdmFyIGluZGV4JCQxID0gdGhpcy5nZXRWYWxpZEluZGV4KCk7XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLmluZGV4O1xuICAgICAgICAgICAgICAgICAgICByZW1vdmVDbGFzcyh0aGlzLnNsaWRlcywgdGhpcy5jbHNBY3RpdmUsIHRoaXMuY2xzQWN0aXZhdGVkKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG93KGluZGV4JCQxKTtcblxuICAgICAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgICAgICBldmVudHM6IFsnbG9hZCcsICdyZXNpemUnXVxuXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgXVxuXG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIFRyYW5zaXRpb25lciQxIChwcmV2LCBuZXh0LCBkaXIsIHJlZikge1xuICAgICAgICB2YXIgY2VudGVyID0gcmVmLmNlbnRlcjtcbiAgICAgICAgdmFyIGVhc2luZyA9IHJlZi5lYXNpbmc7XG4gICAgICAgIHZhciBsaXN0ID0gcmVmLmxpc3Q7XG5cblxuICAgICAgICB2YXIgZGVmZXJyZWQgPSBuZXcgRGVmZXJyZWQoKTtcblxuICAgICAgICB2YXIgZnJvbSA9IHByZXZcbiAgICAgICAgICAgID8gZ2V0TGVmdChwcmV2LCBsaXN0LCBjZW50ZXIpXG4gICAgICAgICAgICA6IGdldExlZnQobmV4dCwgbGlzdCwgY2VudGVyKSArIG5leHQub2Zmc2V0V2lkdGggKiBkaXI7XG4gICAgICAgIHZhciB0byA9IG5leHRcbiAgICAgICAgICAgID8gZ2V0TGVmdChuZXh0LCBsaXN0LCBjZW50ZXIpXG4gICAgICAgICAgICA6IGZyb20gKyBwcmV2Lm9mZnNldFdpZHRoICogZGlyICogKGlzUnRsID8gLTEgOiAxKTtcblxuICAgICAgICByZXR1cm4ge1xuXG4gICAgICAgICAgICBkaXI6IGRpcixcblxuICAgICAgICAgICAgc2hvdzogZnVuY3Rpb24oZHVyYXRpb24sIHBlcmNlbnQsIGxpbmVhcikge1xuICAgICAgICAgICAgICAgIGlmICggcGVyY2VudCA9PT0gdm9pZCAwICkgcGVyY2VudCA9IDA7XG5cblxuICAgICAgICAgICAgICAgIHZhciB0aW1pbmcgPSBsaW5lYXIgPyAnbGluZWFyJyA6IGVhc2luZztcbiAgICAgICAgICAgICAgICBkdXJhdGlvbiAtPSBNYXRoLnJvdW5kKGR1cmF0aW9uICogY2xhbXAocGVyY2VudCwgLTEsIDEpKTtcblxuICAgICAgICAgICAgICAgIHRoaXMudHJhbnNsYXRlKHBlcmNlbnQpO1xuXG4gICAgICAgICAgICAgICAgcHJldiAmJiB0aGlzLnVwZGF0ZVRyYW5zbGF0ZXMoKTtcbiAgICAgICAgICAgICAgICBwZXJjZW50ID0gcHJldiA/IHBlcmNlbnQgOiBjbGFtcChwZXJjZW50LCAwLCAxKTtcbiAgICAgICAgICAgICAgICB0cmlnZ2VyVXBkYXRlJDEodGhpcy5nZXRJdGVtSW4oKSwgJ2l0ZW1pbicsIHtwZXJjZW50OiBwZXJjZW50LCBkdXJhdGlvbjogZHVyYXRpb24sIHRpbWluZzogdGltaW5nLCBkaXI6IGRpcn0pO1xuICAgICAgICAgICAgICAgIHByZXYgJiYgdHJpZ2dlclVwZGF0ZSQxKHRoaXMuZ2V0SXRlbUluKHRydWUpLCAnaXRlbW91dCcsIHtwZXJjZW50OiAxIC0gcGVyY2VudCwgZHVyYXRpb246IGR1cmF0aW9uLCB0aW1pbmc6IHRpbWluZywgZGlyOiBkaXJ9KTtcblxuICAgICAgICAgICAgICAgIFRyYW5zaXRpb25cbiAgICAgICAgICAgICAgICAgICAgLnN0YXJ0KGxpc3QsIHt0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtdG8gKiAoaXNSdGwgPyAtMSA6IDEpLCAncHgnKX0sIGR1cmF0aW9uLCB0aW1pbmcpXG4gICAgICAgICAgICAgICAgICAgIC50aGVuKGRlZmVycmVkLnJlc29sdmUsIG5vb3ApO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIGRlZmVycmVkLnByb21pc2U7XG5cbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIHN0b3A6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBUcmFuc2l0aW9uLnN0b3AobGlzdCk7XG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICBjYW5jZWw6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIFRyYW5zaXRpb24uY2FuY2VsKGxpc3QpO1xuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgcmVzZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIGNzcyhsaXN0LCAndHJhbnNmb3JtJywgJycpO1xuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgZm9yd2FyZDogZnVuY3Rpb24oZHVyYXRpb24sIHBlcmNlbnQpIHtcbiAgICAgICAgICAgICAgICBpZiAoIHBlcmNlbnQgPT09IHZvaWQgMCApIHBlcmNlbnQgPSB0aGlzLnBlcmNlbnQoKTtcblxuICAgICAgICAgICAgICAgIFRyYW5zaXRpb24uY2FuY2VsKGxpc3QpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnNob3coZHVyYXRpb24sIHBlcmNlbnQsIHRydWUpO1xuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgdHJhbnNsYXRlOiBmdW5jdGlvbihwZXJjZW50KSB7XG5cbiAgICAgICAgICAgICAgICB2YXIgZGlzdGFuY2UgPSB0aGlzLmdldERpc3RhbmNlKCkgKiBkaXIgKiAoaXNSdGwgPyAtMSA6IDEpO1xuXG4gICAgICAgICAgICAgICAgY3NzKGxpc3QsICd0cmFuc2Zvcm0nLCB0cmFuc2xhdGUoY2xhbXAoXG4gICAgICAgICAgICAgICAgICAgIC10byArIChkaXN0YW5jZSAtIGRpc3RhbmNlICogcGVyY2VudCksXG4gICAgICAgICAgICAgICAgICAgIC1nZXRXaWR0aChsaXN0KSxcbiAgICAgICAgICAgICAgICAgICAgbGlzdC5vZmZzZXRXaWR0aFxuICAgICAgICAgICAgICAgICkgKiAoaXNSdGwgPyAtMSA6IDEpLCAncHgnKSk7XG5cbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVRyYW5zbGF0ZXMoKTtcblxuICAgICAgICAgICAgICAgIGlmIChwcmV2KSB7XG4gICAgICAgICAgICAgICAgICAgIHBlcmNlbnQgPSBjbGFtcChwZXJjZW50LCAtMSwgMSk7XG4gICAgICAgICAgICAgICAgICAgIHRyaWdnZXJVcGRhdGUkMSh0aGlzLmdldEl0ZW1JbigpLCAnaXRlbXRyYW5zbGF0ZWluJywge3BlcmNlbnQ6IHBlcmNlbnQsIGRpcjogZGlyfSk7XG4gICAgICAgICAgICAgICAgICAgIHRyaWdnZXJVcGRhdGUkMSh0aGlzLmdldEl0ZW1Jbih0cnVlKSwgJ2l0ZW10cmFuc2xhdGVvdXQnLCB7cGVyY2VudDogMSAtIHBlcmNlbnQsIGRpcjogZGlyfSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICBwZXJjZW50OiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gTWF0aC5hYnMoKGNzcyhsaXN0LCAndHJhbnNmb3JtJykuc3BsaXQoJywnKVs0XSAqIChpc1J0bCA/IC0xIDogMSkgKyBmcm9tKSAvICh0byAtIGZyb20pKTtcbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIGdldERpc3RhbmNlOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gTWF0aC5hYnModG8gLSBmcm9tKTtcbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIGdldEl0ZW1JbjogZnVuY3Rpb24ob3V0KSB7XG4gICAgICAgICAgICAgICAgaWYgKCBvdXQgPT09IHZvaWQgMCApIG91dCA9IGZhbHNlO1xuXG5cbiAgICAgICAgICAgICAgICB2YXIgYWN0aXZlcyA9IHRoaXMuZ2V0QWN0aXZlcygpO1xuICAgICAgICAgICAgICAgIHZhciBhbGwgPSBzb3J0Qnkoc2xpZGVzKGxpc3QpLCAnb2Zmc2V0TGVmdCcpO1xuICAgICAgICAgICAgICAgIHZhciBpID0gaW5kZXgoYWxsLCBhY3RpdmVzW2RpciAqIChvdXQgPyAtMSA6IDEpID4gMCA/IGFjdGl2ZXMubGVuZ3RoIC0gMSA6IDBdKTtcblxuICAgICAgICAgICAgICAgIHJldHVybiB+aSAmJiBhbGxbaSArIChwcmV2ICYmICFvdXQgPyBkaXIgOiAwKV07XG5cbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIGdldEFjdGl2ZXM6IGZ1bmN0aW9uKCkge1xuXG4gICAgICAgICAgICAgICAgdmFyIGxlZnQgPSBnZXRMZWZ0KHByZXYgfHwgbmV4dCwgbGlzdCwgY2VudGVyKTtcblxuICAgICAgICAgICAgICAgIHJldHVybiBzb3J0Qnkoc2xpZGVzKGxpc3QpLmZpbHRlcihmdW5jdGlvbiAoc2xpZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHNsaWRlTGVmdCA9IGdldEVsTGVmdChzbGlkZSwgbGlzdCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBzbGlkZUxlZnQgPj0gbGVmdCAmJiBzbGlkZUxlZnQgKyBzbGlkZS5vZmZzZXRXaWR0aCA8PSBsaXN0Lm9mZnNldFdpZHRoICsgbGVmdDtcbiAgICAgICAgICAgICAgICB9KSwgJ29mZnNldExlZnQnKTtcblxuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgdXBkYXRlVHJhbnNsYXRlczogZnVuY3Rpb24oKSB7XG5cbiAgICAgICAgICAgICAgICB2YXIgYWN0aXZlcyA9IHRoaXMuZ2V0QWN0aXZlcygpO1xuXG4gICAgICAgICAgICAgICAgc2xpZGVzKGxpc3QpLmZvckVhY2goZnVuY3Rpb24gKHNsaWRlKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBpc0FjdGl2ZSA9IGluY2x1ZGVzKGFjdGl2ZXMsIHNsaWRlKTtcblxuICAgICAgICAgICAgICAgICAgICB0cmlnZ2VyVXBkYXRlJDEoc2xpZGUsIChcIml0ZW10cmFuc2xhdGVcIiArIChpc0FjdGl2ZSA/ICdpbicgOiAnb3V0JykpLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwZXJjZW50OiBpc0FjdGl2ZSA/IDEgOiAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgZGlyOiBzbGlkZS5vZmZzZXRMZWZ0IDw9IG5leHQub2Zmc2V0TGVmdCA/IDEgOiAtMVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9O1xuXG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0TGVmdChlbCwgbGlzdCwgY2VudGVyKSB7XG5cbiAgICAgICAgdmFyIGxlZnQgPSBnZXRFbExlZnQoZWwsIGxpc3QpO1xuXG4gICAgICAgIHJldHVybiBjZW50ZXJcbiAgICAgICAgICAgID8gbGVmdCAtIGNlbnRlckVsKGVsLCBsaXN0KVxuICAgICAgICAgICAgOiBNYXRoLm1pbihsZWZ0LCBnZXRNYXgobGlzdCkpO1xuXG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0TWF4KGxpc3QpIHtcbiAgICAgICAgcmV0dXJuIE1hdGgubWF4KDAsIGdldFdpZHRoKGxpc3QpIC0gbGlzdC5vZmZzZXRXaWR0aCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0V2lkdGgobGlzdCkge1xuICAgICAgICByZXR1cm4gc2xpZGVzKGxpc3QpLnJlZHVjZShmdW5jdGlvbiAocmlnaHQsIGVsKSB7IHJldHVybiBlbC5vZmZzZXRXaWR0aCArIHJpZ2h0OyB9LCAwKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRNYXhXaWR0aChsaXN0KSB7XG4gICAgICAgIHJldHVybiBzbGlkZXMobGlzdCkucmVkdWNlKGZ1bmN0aW9uIChyaWdodCwgZWwpIHsgcmV0dXJuIE1hdGgubWF4KHJpZ2h0LCBlbC5vZmZzZXRXaWR0aCk7IH0sIDApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNlbnRlckVsKGVsLCBsaXN0KSB7XG4gICAgICAgIHJldHVybiBsaXN0Lm9mZnNldFdpZHRoIC8gMiAtIGVsLm9mZnNldFdpZHRoIC8gMjtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRFbExlZnQoZWwsIGxpc3QpIHtcbiAgICAgICAgcmV0dXJuIChlbC5vZmZzZXRMZWZ0ICsgKGlzUnRsID8gZWwub2Zmc2V0V2lkdGggLSBsaXN0Lm9mZnNldFdpZHRoIDogMCkpICogKGlzUnRsID8gLTEgOiAxKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB0cmlnZ2VyVXBkYXRlJDEoZWwsIHR5cGUsIGRhdGEkJDEpIHtcbiAgICAgICAgdHJpZ2dlcihlbCwgY3JlYXRlRXZlbnQodHlwZSwgZmFsc2UsIGZhbHNlLCBkYXRhJCQxKSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc2xpZGVzKGxpc3QpIHtcbiAgICAgICAgcmV0dXJuIHRvTm9kZXMobGlzdC5jaGlsZHJlbik7XG4gICAgfVxuXG4gICAgdmFyIFNsaWRlciQxID0ge1xuXG4gICAgICAgIG1peGluczogW0NsYXNzLCBTbGlkZXIsIFNsaWRlclJlYWN0aXZlXSxcblxuICAgICAgICBwcm9wczoge1xuICAgICAgICAgICAgY2VudGVyOiBCb29sZWFuLFxuICAgICAgICAgICAgc2V0czogQm9vbGVhbixcbiAgICAgICAgfSxcblxuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICBjZW50ZXI6IGZhbHNlLFxuICAgICAgICAgICAgc2V0czogZmFsc2UsXG4gICAgICAgICAgICBhdHRySXRlbTogJ3VrLXNsaWRlci1pdGVtJyxcbiAgICAgICAgICAgIHNlbExpc3Q6ICcudWstc2xpZGVyLWl0ZW1zJyxcbiAgICAgICAgICAgIHNlbE5hdjogJy51ay1zbGlkZXItbmF2JyxcbiAgICAgICAgICAgIGNsc0NvbnRhaW5lcjogJ3VrLXNsaWRlci1jb250YWluZXInLFxuICAgICAgICAgICAgVHJhbnNpdGlvbmVyOiBUcmFuc2l0aW9uZXIkMVxuICAgICAgICB9LFxuXG4gICAgICAgIGNvbXB1dGVkOiB7XG5cbiAgICAgICAgICAgIGF2Z1dpZHRoOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZ2V0V2lkdGgodGhpcy5saXN0KSAvIHRoaXMubGVuZ3RoO1xuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgZmluaXRlOiBmdW5jdGlvbihyZWYpIHtcbiAgICAgICAgICAgICAgICB2YXIgZmluaXRlID0gcmVmLmZpbml0ZTtcblxuICAgICAgICAgICAgICAgIHJldHVybiBmaW5pdGUgfHwgZ2V0V2lkdGgodGhpcy5saXN0KSA8IHRoaXMubGlzdC5vZmZzZXRXaWR0aCArIGdldE1heFdpZHRoKHRoaXMubGlzdCkgKyB0aGlzLmNlbnRlcjtcbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIG1heEluZGV4OiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICB2YXIgdGhpcyQxID0gdGhpcztcblxuXG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmZpbml0ZSB8fCB0aGlzLmNlbnRlciAmJiAhdGhpcy5zZXRzKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmxlbmd0aCAtIDE7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuY2VudGVyKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnNldHNbdGhpcy5zZXRzLmxlbmd0aCAtIDFdO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNzcyh0aGlzLnNsaWRlcywgJ29yZGVyJywgJycpO1xuXG4gICAgICAgICAgICAgICAgdmFyIG1heCA9IGdldE1heCh0aGlzLmxpc3QpO1xuICAgICAgICAgICAgICAgIHZhciBpID0gdGhpcy5sZW5ndGg7XG5cbiAgICAgICAgICAgICAgICB3aGlsZSAoaS0tKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChnZXRFbExlZnQodGhpcyQxLmxpc3QuY2hpbGRyZW5baV0sIHRoaXMkMS5saXN0KSA8IG1heCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE1hdGgubWluKGkgKyAxLCB0aGlzJDEubGVuZ3RoIC0gMSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIHNldHM6IGZ1bmN0aW9uKHJlZikge1xuICAgICAgICAgICAgICAgIHZhciB0aGlzJDEgPSB0aGlzO1xuICAgICAgICAgICAgICAgIHZhciBzZXRzID0gcmVmLnNldHM7XG5cblxuICAgICAgICAgICAgICAgIHZhciB3aWR0aCQkMSA9IHRoaXMubGlzdC5vZmZzZXRXaWR0aCAvICh0aGlzLmNlbnRlciA/IDIgOiAxKTtcblxuICAgICAgICAgICAgICAgIHZhciBsZWZ0ID0gMDtcbiAgICAgICAgICAgICAgICB2YXIgbGVmdENlbnRlciA9IHdpZHRoJCQxO1xuICAgICAgICAgICAgICAgIHZhciBzbGlkZUxlZnQgPSAwO1xuXG4gICAgICAgICAgICAgICAgc2V0cyA9IHNldHMgJiYgdGhpcy5zbGlkZXMucmVkdWNlKGZ1bmN0aW9uIChzZXRzLCBzbGlkZSwgaSkge1xuXG4gICAgICAgICAgICAgICAgICAgIHZhciByZWYgPSBvZmZzZXQoc2xpZGUpO1xuICAgICAgICAgICAgICAgICAgICB2YXIgc2xpZGVXaWR0aCA9IHJlZi53aWR0aDtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHNsaWRlUmlnaHQgPSBzbGlkZUxlZnQgKyBzbGlkZVdpZHRoO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChzbGlkZVJpZ2h0ID4gbGVmdCkge1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMkMS5jZW50ZXIgJiYgaSA+IHRoaXMkMS5tYXhJbmRleCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgPSB0aGlzJDEubWF4SW5kZXg7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaW5jbHVkZXMoc2V0cywgaSkpIHtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjbXAgPSB0aGlzJDEuc2xpZGVzW2kgKyAxXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcyQxLmNlbnRlciAmJiBjbXAgJiYgc2xpZGVXaWR0aCA8IGxlZnRDZW50ZXIgLSBvZmZzZXQoY21wKS53aWR0aCAvIDIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVmdENlbnRlciAtPSBzbGlkZVdpZHRoO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlZnRDZW50ZXIgPSB3aWR0aCQkMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0cy5wdXNoKGkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZWZ0ID0gc2xpZGVMZWZ0ICsgd2lkdGgkJDEgKyAodGhpcyQxLmNlbnRlciA/IHNsaWRlV2lkdGggLyAyIDogMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBzbGlkZUxlZnQgKz0gc2xpZGVXaWR0aDtcblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2V0cztcblxuICAgICAgICAgICAgICAgIH0sIFtdKTtcblxuICAgICAgICAgICAgICAgIHJldHVybiBzZXRzICYmIHNldHMubGVuZ3RoICYmIHNldHM7XG5cbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIHRyYW5zaXRpb25PcHRpb25zOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICBjZW50ZXI6IHRoaXMuY2VudGVyLFxuICAgICAgICAgICAgICAgICAgICBsaXN0OiB0aGlzLmxpc3RcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIH0sXG5cbiAgICAgICAgY29ubmVjdGVkOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHRvZ2dsZUNsYXNzKHRoaXMuJGVsLCB0aGlzLmNsc0NvbnRhaW5lciwgISQoKFwiLlwiICsgKHRoaXMuY2xzQ29udGFpbmVyKSksIHRoaXMuJGVsKSk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgdXBkYXRlOiB7XG5cbiAgICAgICAgICAgIHdyaXRlOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICB2YXIgdGhpcyQxID0gdGhpcztcblxuXG4gICAgICAgICAgICAgICAgJCQoKFwiW1wiICsgKHRoaXMuYXR0ckl0ZW0pICsgXCJdLFtkYXRhLVwiICsgKHRoaXMuYXR0ckl0ZW0pICsgXCJdXCIpLCB0aGlzLiRlbCkuZm9yRWFjaChmdW5jdGlvbiAoZWwpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGluZGV4JCQxID0gZGF0YShlbCwgdGhpcyQxLmF0dHJJdGVtKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcyQxLm1heEluZGV4ICYmIHRvZ2dsZUNsYXNzKGVsLCAndWstaGlkZGVuJywgaXNOdW1lcmljKGluZGV4JCQxKSAmJiAodGhpcyQxLnNldHMgJiYgIWluY2x1ZGVzKHRoaXMkMS5zZXRzLCB0b0Zsb2F0KGluZGV4JCQxKSkgfHwgaW5kZXgkJDEgPiB0aGlzJDEubWF4SW5kZXgpKTtcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgZXZlbnRzOiBbJ2xvYWQnLCAncmVzaXplJ11cblxuICAgICAgICB9LFxuXG4gICAgICAgIGV2ZW50czoge1xuXG4gICAgICAgICAgICBiZWZvcmVpdGVtc2hvdzogZnVuY3Rpb24oZSkge1xuICAgICAgICAgICAgICAgIHZhciB0aGlzJDEgPSB0aGlzO1xuXG5cbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuZHJhZ2dpbmcgJiYgdGhpcy5zZXRzICYmIHRoaXMuc3RhY2subGVuZ3RoIDwgMiAmJiAhaW5jbHVkZXModGhpcy5zZXRzLCB0aGlzLmluZGV4KSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmluZGV4ID0gdGhpcy5nZXRWYWxpZEluZGV4KCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdmFyIGRpZmYgPSBNYXRoLmFicyhcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbmRleFxuICAgICAgICAgICAgICAgICAgICAtIHRoaXMucHJldkluZGV4XG4gICAgICAgICAgICAgICAgICAgICsgKHRoaXMuZGlyID4gMCAmJiB0aGlzLmluZGV4IDwgdGhpcy5wcmV2SW5kZXggfHwgdGhpcy5kaXIgPCAwICYmIHRoaXMuaW5kZXggPiB0aGlzLnByZXZJbmRleCA/ICh0aGlzLm1heEluZGV4ICsgMSkgKiB0aGlzLmRpciA6IDApXG4gICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgIGlmICghdGhpcy5kcmFnZ2luZyAmJiBkaWZmID4gMSkge1xuXG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZGlmZjsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzJDEuc3RhY2suc3BsaWNlKDEsIDAsIHRoaXMkMS5kaXIgPiAwID8gJ25leHQnIDogJ3ByZXZpb3VzJyk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLmR1cmF0aW9uID0gc3BlZWRVcCh0aGlzLmF2Z1dpZHRoIC8gdGhpcy52ZWxvY2l0eSlcbiAgICAgICAgICAgICAgICAgICAgKiAoKFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kaXIgPCAwIHx8ICF0aGlzLnNsaWRlc1t0aGlzLnByZXZJbmRleF1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IHRoaXMuc2xpZGVzW3RoaXMuaW5kZXhdXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiB0aGlzLnNsaWRlc1t0aGlzLnByZXZJbmRleF1cbiAgICAgICAgICAgICAgICAgICAgKS5vZmZzZXRXaWR0aCAvIHRoaXMuYXZnV2lkdGgpO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5yZW9yZGVyKCk7XG5cbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIGl0ZW1zaG93OiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAhaXNVbmRlZmluZWQodGhpcy5wcmV2SW5kZXgpICYmIGFkZENsYXNzKHRoaXMuX2dldFRyYW5zaXRpb25lcigpLmdldEl0ZW1JbigpLCB0aGlzLmNsc0FjdGl2ZSk7XG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICBpdGVtc2hvd246IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIHZhciB0aGlzJDEgPSB0aGlzO1xuXG4gICAgICAgICAgICAgICAgdmFyIGFjdGl2ZXMgPSB0aGlzLl9nZXRUcmFuc2l0aW9uZXIodGhpcy5pbmRleCkuZ2V0QWN0aXZlcygpO1xuICAgICAgICAgICAgICAgIHRoaXMuc2xpZGVzLmZvckVhY2goZnVuY3Rpb24gKHNsaWRlKSB7IHJldHVybiB0b2dnbGVDbGFzcyhzbGlkZSwgdGhpcyQxLmNsc0FjdGl2ZSwgaW5jbHVkZXMoYWN0aXZlcywgc2xpZGUpKTsgfSk7XG4gICAgICAgICAgICAgICAgKCF0aGlzLnNldHMgfHwgaW5jbHVkZXModGhpcy5zZXRzLCB0b0Zsb2F0KHRoaXMuaW5kZXgpKSkgJiYgdGhpcy5zbGlkZXMuZm9yRWFjaChmdW5jdGlvbiAoc2xpZGUpIHsgcmV0dXJuIHRvZ2dsZUNsYXNzKHNsaWRlLCB0aGlzJDEuY2xzQWN0aXZhdGVkLCBpbmNsdWRlcyhhY3RpdmVzLCBzbGlkZSkpOyB9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9LFxuXG4gICAgICAgIG1ldGhvZHM6IHtcblxuICAgICAgICAgICAgcmVvcmRlcjogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgdmFyIHRoaXMkMSA9IHRoaXM7XG5cblxuICAgICAgICAgICAgICAgIGNzcyh0aGlzLnNsaWRlcywgJ29yZGVyJywgJycpO1xuXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZmluaXRlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB2YXIgaW5kZXgkJDEgPSB0aGlzLmRpciA+IDAgJiYgdGhpcy5zbGlkZXNbdGhpcy5wcmV2SW5kZXhdID8gdGhpcy5wcmV2SW5kZXggOiB0aGlzLmluZGV4O1xuXG4gICAgICAgICAgICAgICAgdGhpcy5zbGlkZXMuZm9yRWFjaChmdW5jdGlvbiAoc2xpZGUsIGkpIHsgcmV0dXJuIGNzcyhzbGlkZSwgJ29yZGVyJywgdGhpcyQxLmRpciA+IDAgJiYgaSA8IGluZGV4JCQxXG4gICAgICAgICAgICAgICAgICAgICAgICA/IDFcbiAgICAgICAgICAgICAgICAgICAgICAgIDogdGhpcyQxLmRpciA8IDAgJiYgaSA+PSB0aGlzJDEuaW5kZXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IC0xXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAnJ1xuICAgICAgICAgICAgICAgICAgICApOyB9XG4gICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgIGlmICghdGhpcy5jZW50ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHZhciBuZXh0ID0gdGhpcy5zbGlkZXNbaW5kZXgkJDFdO1xuICAgICAgICAgICAgICAgIHZhciB3aWR0aCQkMSA9IHRoaXMubGlzdC5vZmZzZXRXaWR0aCAvIDIgLSBuZXh0Lm9mZnNldFdpZHRoIC8gMjtcbiAgICAgICAgICAgICAgICB2YXIgaiA9IDA7XG5cbiAgICAgICAgICAgICAgICB3aGlsZSAod2lkdGgkJDEgPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBzbGlkZUluZGV4ID0gdGhpcyQxLmdldEluZGV4KC0taiArIGluZGV4JCQxLCBpbmRleCQkMSk7XG4gICAgICAgICAgICAgICAgICAgIHZhciBzbGlkZSA9IHRoaXMkMS5zbGlkZXNbc2xpZGVJbmRleF07XG5cbiAgICAgICAgICAgICAgICAgICAgY3NzKHNsaWRlLCAnb3JkZXInLCBzbGlkZUluZGV4ID4gaW5kZXgkJDEgPyAtMiA6IC0xKTtcbiAgICAgICAgICAgICAgICAgICAgd2lkdGgkJDEgLT0gc2xpZGUub2Zmc2V0V2lkdGg7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICBnZXRWYWxpZEluZGV4OiBmdW5jdGlvbihpbmRleCQkMSwgcHJldkluZGV4KSB7XG4gICAgICAgICAgICAgICAgdmFyIHRoaXMkMSA9IHRoaXM7XG4gICAgICAgICAgICAgICAgaWYgKCBpbmRleCQkMSA9PT0gdm9pZCAwICkgaW5kZXgkJDEgPSB0aGlzLmluZGV4O1xuICAgICAgICAgICAgICAgIGlmICggcHJldkluZGV4ID09PSB2b2lkIDAgKSBwcmV2SW5kZXggPSB0aGlzLnByZXZJbmRleDtcblxuXG4gICAgICAgICAgICAgICAgaW5kZXgkJDEgPSB0aGlzLmdldEluZGV4KGluZGV4JCQxLCBwcmV2SW5kZXgpO1xuXG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLnNldHMpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGluZGV4JCQxO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHZhciBwcmV2O1xuXG4gICAgICAgICAgICAgICAgZG8ge1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChpbmNsdWRlcyh0aGlzJDEuc2V0cywgaW5kZXgkJDEpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW5kZXgkJDE7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBwcmV2ID0gaW5kZXgkJDE7XG4gICAgICAgICAgICAgICAgICAgIGluZGV4JCQxID0gdGhpcyQxLmdldEluZGV4KGluZGV4JCQxICsgdGhpcyQxLmRpciwgcHJldkluZGV4KTtcblxuICAgICAgICAgICAgICAgIH0gd2hpbGUgKGluZGV4JCQxICE9PSBwcmV2KTtcblxuICAgICAgICAgICAgICAgIHJldHVybiBpbmRleCQkMTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9XG5cbiAgICB9O1xuXG4gICAgdmFyIFNsaWRlclBhcmFsbGF4ID0ge1xuXG4gICAgICAgIG1peGluczogW1BhcmFsbGF4XSxcblxuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICBzZWxJdGVtOiAnIWxpJ1xuICAgICAgICB9LFxuXG4gICAgICAgIGNvbXB1dGVkOiB7XG5cbiAgICAgICAgICAgIGl0ZW06IGZ1bmN0aW9uKHJlZiwgJGVsKSB7XG4gICAgICAgICAgICAgICAgdmFyIHNlbEl0ZW0gPSByZWYuc2VsSXRlbTtcblxuICAgICAgICAgICAgICAgIHJldHVybiBxdWVyeShzZWxJdGVtLCAkZWwpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIH0sXG5cbiAgICAgICAgZXZlbnRzOiBbXG5cbiAgICAgICAgICAgIHtcblxuICAgICAgICAgICAgICAgIG5hbWU6ICdpdGVtc2hvd24nLFxuXG4gICAgICAgICAgICAgICAgc2VsZjogdHJ1ZSxcblxuICAgICAgICAgICAgICAgIGVsOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuaXRlbTtcbiAgICAgICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICAgICAgaGFuZGxlcjogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgIGNzcyh0aGlzLiRlbCwgdGhpcy5nZXRDc3MoLjUpKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnaXRlbWluIGl0ZW1vdXQnLFxuXG4gICAgICAgICAgICAgICAgc2VsZjogdHJ1ZSxcblxuICAgICAgICAgICAgICAgIGVsOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuaXRlbTtcbiAgICAgICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICAgICAgaGFuZGxlcjogZnVuY3Rpb24ocmVmKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciB0eXBlID0gcmVmLnR5cGU7XG4gICAgICAgICAgICAgICAgICAgIHZhciByZWZfZGV0YWlsID0gcmVmLmRldGFpbDtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHBlcmNlbnQgPSByZWZfZGV0YWlsLnBlcmNlbnQ7XG4gICAgICAgICAgICAgICAgICAgIHZhciBkdXJhdGlvbiA9IHJlZl9kZXRhaWwuZHVyYXRpb247XG4gICAgICAgICAgICAgICAgICAgIHZhciB0aW1pbmcgPSByZWZfZGV0YWlsLnRpbWluZztcbiAgICAgICAgICAgICAgICAgICAgdmFyIGRpciA9IHJlZl9kZXRhaWwuZGlyO1xuXG5cbiAgICAgICAgICAgICAgICAgICAgVHJhbnNpdGlvbi5jYW5jZWwodGhpcy4kZWwpO1xuICAgICAgICAgICAgICAgICAgICBjc3ModGhpcy4kZWwsIHRoaXMuZ2V0Q3NzKGdldEN1cnJlbnQodHlwZSwgZGlyLCBwZXJjZW50KSkpO1xuXG4gICAgICAgICAgICAgICAgICAgIFRyYW5zaXRpb24uc3RhcnQodGhpcy4kZWwsIHRoaXMuZ2V0Q3NzKGlzSW4odHlwZSlcbiAgICAgICAgICAgICAgICAgICAgICAgID8gLjVcbiAgICAgICAgICAgICAgICAgICAgICAgIDogZGlyID4gMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gMVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogMFxuICAgICAgICAgICAgICAgICAgICApLCBkdXJhdGlvbiwgdGltaW5nKS5jYXRjaChub29wKTtcblxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAndHJhbnNpdGlvbmNhbmNlbGVkIHRyYW5zaXRpb25lbmQnLFxuXG4gICAgICAgICAgICAgICAgc2VsZjogdHJ1ZSxcblxuICAgICAgICAgICAgICAgIGVsOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuaXRlbTtcbiAgICAgICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICAgICAgaGFuZGxlcjogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgIFRyYW5zaXRpb24uY2FuY2VsKHRoaXMuJGVsKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnaXRlbXRyYW5zbGF0ZWluIGl0ZW10cmFuc2xhdGVvdXQnLFxuXG4gICAgICAgICAgICAgICAgc2VsZjogdHJ1ZSxcblxuICAgICAgICAgICAgICAgIGVsOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuaXRlbTtcbiAgICAgICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICAgICAgaGFuZGxlcjogZnVuY3Rpb24ocmVmKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciB0eXBlID0gcmVmLnR5cGU7XG4gICAgICAgICAgICAgICAgICAgIHZhciByZWZfZGV0YWlsID0gcmVmLmRldGFpbDtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHBlcmNlbnQgPSByZWZfZGV0YWlsLnBlcmNlbnQ7XG4gICAgICAgICAgICAgICAgICAgIHZhciBkaXIgPSByZWZfZGV0YWlsLmRpcjtcblxuICAgICAgICAgICAgICAgICAgICBUcmFuc2l0aW9uLmNhbmNlbCh0aGlzLiRlbCk7XG4gICAgICAgICAgICAgICAgICAgIGNzcyh0aGlzLiRlbCwgdGhpcy5nZXRDc3MoZ2V0Q3VycmVudCh0eXBlLCBkaXIsIHBlcmNlbnQpKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgIF1cblxuICAgIH07XG5cbiAgICBmdW5jdGlvbiBpc0luKHR5cGUpIHtcbiAgICAgICAgcmV0dXJuIGVuZHNXaXRoKHR5cGUsICdpbicpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldEN1cnJlbnQodHlwZSwgZGlyLCBwZXJjZW50KSB7XG5cbiAgICAgICAgcGVyY2VudCAvPSAyO1xuXG4gICAgICAgIHJldHVybiAhaXNJbih0eXBlKVxuICAgICAgICAgICAgPyBkaXIgPCAwXG4gICAgICAgICAgICAgICAgPyBwZXJjZW50XG4gICAgICAgICAgICAgICAgOiAxIC0gcGVyY2VudFxuICAgICAgICAgICAgOiBkaXIgPCAwXG4gICAgICAgICAgICAgICAgPyAxIC0gcGVyY2VudFxuICAgICAgICAgICAgICAgIDogcGVyY2VudDtcbiAgICB9XG5cbiAgICB2YXIgQW5pbWF0aW9ucyQyID0gYXNzaWduKHt9LCBBbmltYXRpb25zLCB7XG5cbiAgICAgICAgZmFkZToge1xuXG4gICAgICAgICAgICBzaG93OiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgICAgICAgICB7b3BhY2l0eTogMCwgekluZGV4OiAwfSxcbiAgICAgICAgICAgICAgICAgICAge3pJbmRleDogLTF9XG4gICAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIHBlcmNlbnQ6IGZ1bmN0aW9uKGN1cnJlbnQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gMSAtIGNzcyhjdXJyZW50LCAnb3BhY2l0eScpO1xuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgdHJhbnNsYXRlOiBmdW5jdGlvbihwZXJjZW50KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICAgICAgICAge29wYWNpdHk6IDEgLSBwZXJjZW50LCB6SW5kZXg6IDB9LFxuICAgICAgICAgICAgICAgICAgICB7ekluZGV4OiAtMX1cbiAgICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIH0sXG5cbiAgICAgICAgc2NhbGU6IHtcblxuICAgICAgICAgICAgc2hvdzogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICAgICAgICAge29wYWNpdHk6IDAsIHRyYW5zZm9ybTogc2NhbGUzZCgxICsgLjUpLCB6SW5kZXg6IDB9LFxuICAgICAgICAgICAgICAgICAgICB7ekluZGV4OiAtMX1cbiAgICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgcGVyY2VudDogZnVuY3Rpb24oY3VycmVudCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAxIC0gY3NzKGN1cnJlbnQsICdvcGFjaXR5Jyk7XG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICB0cmFuc2xhdGU6IGZ1bmN0aW9uKHBlcmNlbnQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgICAgICAgICB7b3BhY2l0eTogMSAtIHBlcmNlbnQsIHRyYW5zZm9ybTogc2NhbGUzZCgxICsgLjUgKiBwZXJjZW50KSwgekluZGV4OiAwfSxcbiAgICAgICAgICAgICAgICAgICAge3pJbmRleDogLTF9XG4gICAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9LFxuXG4gICAgICAgIHB1bGw6IHtcblxuICAgICAgICAgICAgc2hvdzogZnVuY3Rpb24oZGlyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGRpciA8IDBcbiAgICAgICAgICAgICAgICAgICAgPyBbXG4gICAgICAgICAgICAgICAgICAgICAgICB7dHJhbnNmb3JtOiB0cmFuc2xhdGUoMzApLCB6SW5kZXg6IC0xfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHt0cmFuc2Zvcm06IHRyYW5zbGF0ZSgpLCB6SW5kZXg6IDB9IF1cbiAgICAgICAgICAgICAgICAgICAgOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICB7dHJhbnNmb3JtOiB0cmFuc2xhdGUoLTEwMCksIHpJbmRleDogMH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB7dHJhbnNmb3JtOiB0cmFuc2xhdGUoKSwgekluZGV4OiAtMX1cbiAgICAgICAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIHBlcmNlbnQ6IGZ1bmN0aW9uKGN1cnJlbnQsIG5leHQsIGRpcikge1xuICAgICAgICAgICAgICAgIHJldHVybiBkaXIgPCAwXG4gICAgICAgICAgICAgICAgICAgID8gMSAtIHRyYW5zbGF0ZWQobmV4dClcbiAgICAgICAgICAgICAgICAgICAgOiB0cmFuc2xhdGVkKGN1cnJlbnQpO1xuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgdHJhbnNsYXRlOiBmdW5jdGlvbihwZXJjZW50LCBkaXIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZGlyIDwgMFxuICAgICAgICAgICAgICAgICAgICA/IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIHt0cmFuc2Zvcm06IHRyYW5zbGF0ZSgzMCAqIHBlcmNlbnQpLCB6SW5kZXg6IC0xfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHt0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtMTAwICogKDEgLSBwZXJjZW50KSksIHpJbmRleDogMH0gXVxuICAgICAgICAgICAgICAgICAgICA6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIHt0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtcGVyY2VudCAqIDEwMCksIHpJbmRleDogMH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB7dHJhbnNmb3JtOiB0cmFuc2xhdGUoMzAgKiAoMSAtIHBlcmNlbnQpKSwgekluZGV4OiAtMX1cbiAgICAgICAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9LFxuXG4gICAgICAgIHB1c2g6IHtcblxuICAgICAgICAgICAgc2hvdzogZnVuY3Rpb24oZGlyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGRpciA8IDBcbiAgICAgICAgICAgICAgICAgICAgPyBbXG4gICAgICAgICAgICAgICAgICAgICAgICB7dHJhbnNmb3JtOiB0cmFuc2xhdGUoMTAwKSwgekluZGV4OiAwfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHt0cmFuc2Zvcm06IHRyYW5zbGF0ZSgpLCB6SW5kZXg6IC0xfSBdXG4gICAgICAgICAgICAgICAgICAgIDogW1xuICAgICAgICAgICAgICAgICAgICAgICAge3RyYW5zZm9ybTogdHJhbnNsYXRlKC0zMCksIHpJbmRleDogLTF9LFxuICAgICAgICAgICAgICAgICAgICAgICAge3RyYW5zZm9ybTogdHJhbnNsYXRlKCksIHpJbmRleDogMH1cbiAgICAgICAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIHBlcmNlbnQ6IGZ1bmN0aW9uKGN1cnJlbnQsIG5leHQsIGRpcikge1xuICAgICAgICAgICAgICAgIHJldHVybiBkaXIgPiAwXG4gICAgICAgICAgICAgICAgICAgID8gMSAtIHRyYW5zbGF0ZWQobmV4dClcbiAgICAgICAgICAgICAgICAgICAgOiB0cmFuc2xhdGVkKGN1cnJlbnQpO1xuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgdHJhbnNsYXRlOiBmdW5jdGlvbihwZXJjZW50LCBkaXIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZGlyIDwgMFxuICAgICAgICAgICAgICAgICAgICA/IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIHt0cmFuc2Zvcm06IHRyYW5zbGF0ZShwZXJjZW50ICogMTAwKSwgekluZGV4OiAwfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHt0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtMzAgKiAoMSAtIHBlcmNlbnQpKSwgekluZGV4OiAtMX0gXVxuICAgICAgICAgICAgICAgICAgICA6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIHt0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtMzAgKiBwZXJjZW50KSwgekluZGV4OiAtMX0sXG4gICAgICAgICAgICAgICAgICAgICAgICB7dHJhbnNmb3JtOiB0cmFuc2xhdGUoMTAwICogKDEgLSBwZXJjZW50KSksIHpJbmRleDogMH1cbiAgICAgICAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9XG5cbiAgICB9KTtcblxuICAgIHZhciBTbGlkZXNob3ckMSA9IHtcblxuICAgICAgICBtaXhpbnM6IFtDbGFzcywgU2xpZGVzaG93LCBTbGlkZXJSZWFjdGl2ZV0sXG5cbiAgICAgICAgcHJvcHM6IHtcbiAgICAgICAgICAgIHJhdGlvOiBTdHJpbmcsXG4gICAgICAgICAgICBtaW5IZWlnaHQ6IEJvb2xlYW4sXG4gICAgICAgICAgICBtYXhIZWlnaHQ6IEJvb2xlYW4sXG4gICAgICAgIH0sXG5cbiAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgcmF0aW86ICcxNjo5JyxcbiAgICAgICAgICAgIG1pbkhlaWdodDogZmFsc2UsXG4gICAgICAgICAgICBtYXhIZWlnaHQ6IGZhbHNlLFxuICAgICAgICAgICAgc2VsTGlzdDogJy51ay1zbGlkZXNob3ctaXRlbXMnLFxuICAgICAgICAgICAgYXR0ckl0ZW06ICd1ay1zbGlkZXNob3ctaXRlbScsXG4gICAgICAgICAgICBzZWxOYXY6ICcudWstc2xpZGVzaG93LW5hdicsXG4gICAgICAgICAgICBBbmltYXRpb25zOiBBbmltYXRpb25zJDJcbiAgICAgICAgfSxcblxuICAgICAgICB1cGRhdGU6IHtcblxuICAgICAgICAgICAgcmVhZDogZnVuY3Rpb24oKSB7XG5cbiAgICAgICAgICAgICAgICB2YXIgcmVmID0gdGhpcy5yYXRpby5zcGxpdCgnOicpLm1hcChOdW1iZXIpO1xuICAgICAgICAgICAgICAgIHZhciB3aWR0aCQkMSA9IHJlZlswXTtcbiAgICAgICAgICAgICAgICB2YXIgaGVpZ2h0JCQxID0gcmVmWzFdO1xuXG4gICAgICAgICAgICAgICAgaGVpZ2h0JCQxID0gaGVpZ2h0JCQxICogdGhpcy4kZWwub2Zmc2V0V2lkdGggLyB3aWR0aCQkMTtcblxuICAgICAgICAgICAgICAgIGlmICh0aGlzLm1pbkhlaWdodCkge1xuICAgICAgICAgICAgICAgICAgICBoZWlnaHQkJDEgPSBNYXRoLm1heCh0aGlzLm1pbkhlaWdodCwgaGVpZ2h0JCQxKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5tYXhIZWlnaHQpIHtcbiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0JCQxID0gTWF0aC5taW4odGhpcy5tYXhIZWlnaHQsIGhlaWdodCQkMSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIHtoZWlnaHQ6IGhlaWdodCQkMX07XG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICB3cml0ZTogZnVuY3Rpb24ocmVmKSB7XG4gICAgICAgICAgICAgICAgdmFyIGhndCA9IHJlZi5oZWlnaHQ7XG5cbiAgICAgICAgICAgICAgICBoZWlnaHQodGhpcy5saXN0LCBNYXRoLmZsb29yKGhndCkpO1xuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgZXZlbnRzOiBbJ2xvYWQnLCAncmVzaXplJ11cblxuICAgICAgICB9XG5cbiAgICB9O1xuXG4gICAgdmFyIG9iaiQxO1xuXG4gICAgdmFyIFNvcnRhYmxlID0ge1xuXG4gICAgICAgIG1peGluczogW0NsYXNzLCBBbmltYXRlXSxcblxuICAgICAgICBwcm9wczoge1xuICAgICAgICAgICAgZ3JvdXA6IFN0cmluZyxcbiAgICAgICAgICAgIHRocmVzaG9sZDogTnVtYmVyLFxuICAgICAgICAgICAgY2xzSXRlbTogU3RyaW5nLFxuICAgICAgICAgICAgY2xzUGxhY2Vob2xkZXI6IFN0cmluZyxcbiAgICAgICAgICAgIGNsc0RyYWc6IFN0cmluZyxcbiAgICAgICAgICAgIGNsc0RyYWdTdGF0ZTogU3RyaW5nLFxuICAgICAgICAgICAgY2xzQmFzZTogU3RyaW5nLFxuICAgICAgICAgICAgY2xzTm9EcmFnOiBTdHJpbmcsXG4gICAgICAgICAgICBjbHNFbXB0eTogU3RyaW5nLFxuICAgICAgICAgICAgY2xzQ3VzdG9tOiBTdHJpbmcsXG4gICAgICAgICAgICBoYW5kbGU6IFN0cmluZ1xuICAgICAgICB9LFxuXG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgIGdyb3VwOiBmYWxzZSxcbiAgICAgICAgICAgIHRocmVzaG9sZDogNSxcbiAgICAgICAgICAgIGNsc0l0ZW06ICd1ay1zb3J0YWJsZS1pdGVtJyxcbiAgICAgICAgICAgIGNsc1BsYWNlaG9sZGVyOiAndWstc29ydGFibGUtcGxhY2Vob2xkZXInLFxuICAgICAgICAgICAgY2xzRHJhZzogJ3VrLXNvcnRhYmxlLWRyYWcnLFxuICAgICAgICAgICAgY2xzRHJhZ1N0YXRlOiAndWstZHJhZycsXG4gICAgICAgICAgICBjbHNCYXNlOiAndWstc29ydGFibGUnLFxuICAgICAgICAgICAgY2xzTm9EcmFnOiAndWstc29ydGFibGUtbm9kcmFnJyxcbiAgICAgICAgICAgIGNsc0VtcHR5OiAndWstc29ydGFibGUtZW1wdHknLFxuICAgICAgICAgICAgY2xzQ3VzdG9tOiAnJyxcbiAgICAgICAgICAgIGhhbmRsZTogZmFsc2VcbiAgICAgICAgfSxcblxuICAgICAgICBpbml0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHZhciB0aGlzJDEgPSB0aGlzO1xuXG4gICAgICAgICAgICBbJ2luaXQnLCAnc3RhcnQnLCAnbW92ZScsICdlbmQnXS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICAgICAgICB2YXIgZm4gPSB0aGlzJDFba2V5XTtcbiAgICAgICAgICAgICAgICB0aGlzJDFba2V5XSA9IGZ1bmN0aW9uIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMkMS5zY3JvbGxZID0gd2luZG93LnBhZ2VZT2Zmc2V0O1xuICAgICAgICAgICAgICAgICAgICB2YXIgcmVmID0gZ2V0UG9zJDEoZSk7XG4gICAgICAgICAgICAgICAgICAgIHZhciB4ID0gcmVmLng7XG4gICAgICAgICAgICAgICAgICAgIHZhciB5ID0gcmVmLnk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMkMS5wb3MgPSB7eDogeCwgeTogeX07XG5cbiAgICAgICAgICAgICAgICAgICAgZm4oZSk7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuXG4gICAgICAgIGV2ZW50czogKCBvYmokMSA9IHt9LCBvYmokMVtwb2ludGVyRG93bl0gPSAnaW5pdCcsIG9iaiQxICksXG5cbiAgICAgICAgdXBkYXRlOiB7XG5cbiAgICAgICAgICAgIHdyaXRlOiBmdW5jdGlvbigpIHtcblxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmNsc0VtcHR5KSB7XG4gICAgICAgICAgICAgICAgICAgIHRvZ2dsZUNsYXNzKHRoaXMuJGVsLCB0aGlzLmNsc0VtcHR5LCAhdGhpcy4kZWwuY2hpbGRyZW4ubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuZHJhZykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgb2Zmc2V0KHRoaXMuZHJhZywge3RvcDogdGhpcy5wb3MueSArIHRoaXMub3JpZ2luLnRvcCwgbGVmdDogdGhpcy5wb3MueCArIHRoaXMub3JpZ2luLmxlZnR9KTtcblxuICAgICAgICAgICAgICAgIHZhciByZWYgPSBvZmZzZXQodGhpcy5kcmFnKTtcbiAgICAgICAgICAgICAgICB2YXIgdG9wID0gcmVmLnRvcDtcbiAgICAgICAgICAgICAgICB2YXIgYm90dG9tID0gdG9wICsgdGhpcy5kcmFnLm9mZnNldEhlaWdodDtcbiAgICAgICAgICAgICAgICB2YXIgc2Nyb2xsO1xuXG4gICAgICAgICAgICAgICAgaWYgKHRvcCA+IDAgJiYgdG9wIDwgdGhpcy5zY3JvbGxZKSB7XG4gICAgICAgICAgICAgICAgICAgIHNjcm9sbCA9IHRoaXMuc2Nyb2xsWSAtIDU7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChib3R0b20gPCBoZWlnaHQoZG9jdW1lbnQpICYmIGJvdHRvbSA+IGhlaWdodCh3aW5kb3cpICsgdGhpcy5zY3JvbGxZKSB7XG4gICAgICAgICAgICAgICAgICAgIHNjcm9sbCA9IHRoaXMuc2Nyb2xsWSArIDU7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgc2Nyb2xsICYmIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgeyByZXR1cm4gd2luZG93LnNjcm9sbCh3aW5kb3cucGFnZVhPZmZzZXQsIHNjcm9sbCk7IH0sIDUpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIH0sXG5cbiAgICAgICAgbWV0aG9kczoge1xuXG4gICAgICAgICAgICBpbml0OiBmdW5jdGlvbihlKSB7XG5cbiAgICAgICAgICAgICAgICB2YXIgdGFyZ2V0ID0gZS50YXJnZXQ7XG4gICAgICAgICAgICAgICAgdmFyIGJ1dHRvbiA9IGUuYnV0dG9uO1xuICAgICAgICAgICAgICAgIHZhciBkZWZhdWx0UHJldmVudGVkID0gZS5kZWZhdWx0UHJldmVudGVkO1xuICAgICAgICAgICAgICAgIHZhciByZWYgPSB0b05vZGVzKHRoaXMuJGVsLmNoaWxkcmVuKS5maWx0ZXIoZnVuY3Rpb24gKGVsKSB7IHJldHVybiB3aXRoaW4odGFyZ2V0LCBlbCk7IH0pO1xuICAgICAgICAgICAgICAgIHZhciBwbGFjZWhvbGRlciA9IHJlZlswXTtcblxuICAgICAgICAgICAgICAgIGlmICghcGxhY2Vob2xkZXJcbiAgICAgICAgICAgICAgICAgICAgfHwgaXNJbnB1dChlLnRhcmdldClcbiAgICAgICAgICAgICAgICAgICAgfHwgdGhpcy5oYW5kbGUgJiYgIXdpdGhpbih0YXJnZXQsIHRoaXMuaGFuZGxlKVxuICAgICAgICAgICAgICAgICAgICB8fCBidXR0b24gPiAwXG4gICAgICAgICAgICAgICAgICAgIHx8IHdpdGhpbih0YXJnZXQsIChcIi5cIiArICh0aGlzLmNsc05vRHJhZykpKVxuICAgICAgICAgICAgICAgICAgICB8fCBkZWZhdWx0UHJldmVudGVkXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgICAgICAgICAgICB0aGlzLnRvdWNoZWQgPSBbdGhpc107XG4gICAgICAgICAgICAgICAgdGhpcy5wbGFjZWhvbGRlciA9IHBsYWNlaG9sZGVyO1xuICAgICAgICAgICAgICAgIHRoaXMub3JpZ2luID0gYXNzaWduKHt0YXJnZXQ6IHRhcmdldCwgaW5kZXg6IGluZGV4KHBsYWNlaG9sZGVyKX0sIHRoaXMucG9zKTtcblxuICAgICAgICAgICAgICAgIG9uKGRvY3VtZW50LCBwb2ludGVyTW92ZSwgdGhpcy5tb3ZlKTtcbiAgICAgICAgICAgICAgICBvbihkb2N1bWVudCwgcG9pbnRlclVwLCB0aGlzLmVuZCk7XG4gICAgICAgICAgICAgICAgb24od2luZG93LCAnc2Nyb2xsJywgdGhpcy5zY3JvbGwpO1xuXG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLnRocmVzaG9sZCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXJ0KGUpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgc3RhcnQ6IGZ1bmN0aW9uKGUpIHtcblxuICAgICAgICAgICAgICAgIHRoaXMuZHJhZyA9IGFwcGVuZCh0aGlzLiRjb250YWluZXIsIHRoaXMucGxhY2Vob2xkZXIub3V0ZXJIVE1MLnJlcGxhY2UoL148bGkvaSwgJzxkaXYnKS5yZXBsYWNlKC9saT4kL2ksICdkaXY+JykpO1xuXG4gICAgICAgICAgICAgICAgY3NzKHRoaXMuZHJhZywgYXNzaWduKHtcbiAgICAgICAgICAgICAgICAgICAgYm94U2l6aW5nOiAnYm9yZGVyLWJveCcsXG4gICAgICAgICAgICAgICAgICAgIHdpZHRoOiB0aGlzLnBsYWNlaG9sZGVyLm9mZnNldFdpZHRoLFxuICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IHRoaXMucGxhY2Vob2xkZXIub2Zmc2V0SGVpZ2h0XG4gICAgICAgICAgICAgICAgfSwgY3NzKHRoaXMucGxhY2Vob2xkZXIsIFsncGFkZGluZ0xlZnQnLCAncGFkZGluZ1JpZ2h0JywgJ3BhZGRpbmdUb3AnLCAncGFkZGluZ0JvdHRvbSddKSkpO1xuICAgICAgICAgICAgICAgIGF0dHIodGhpcy5kcmFnLCAndWstbm8tYm9vdCcsICcnKTtcbiAgICAgICAgICAgICAgICBhZGRDbGFzcyh0aGlzLmRyYWcsIHRoaXMuY2xzRHJhZywgdGhpcy5jbHNDdXN0b20pO1xuXG4gICAgICAgICAgICAgICAgaGVpZ2h0KHRoaXMuZHJhZy5maXJzdEVsZW1lbnRDaGlsZCwgaGVpZ2h0KHRoaXMucGxhY2Vob2xkZXIuZmlyc3RFbGVtZW50Q2hpbGQpKTtcblxuICAgICAgICAgICAgICAgIHZhciByZWYgPSBvZmZzZXQodGhpcy5wbGFjZWhvbGRlcik7XG4gICAgICAgICAgICAgICAgdmFyIGxlZnQgPSByZWYubGVmdDtcbiAgICAgICAgICAgICAgICB2YXIgdG9wID0gcmVmLnRvcDtcbiAgICAgICAgICAgICAgICBhc3NpZ24odGhpcy5vcmlnaW4sIHtsZWZ0OiBsZWZ0IC0gdGhpcy5wb3MueCwgdG9wOiB0b3AgLSB0aGlzLnBvcy55fSk7XG5cbiAgICAgICAgICAgICAgICBhZGRDbGFzcyh0aGlzLnBsYWNlaG9sZGVyLCB0aGlzLmNsc1BsYWNlaG9sZGVyKTtcbiAgICAgICAgICAgICAgICBhZGRDbGFzcyh0aGlzLiRlbC5jaGlsZHJlbiwgdGhpcy5jbHNJdGVtKTtcbiAgICAgICAgICAgICAgICBhZGRDbGFzcyhkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsIHRoaXMuY2xzRHJhZ1N0YXRlKTtcblxuICAgICAgICAgICAgICAgIHRyaWdnZXIodGhpcy4kZWwsICdzdGFydCcsIFt0aGlzLCB0aGlzLnBsYWNlaG9sZGVyXSk7XG5cbiAgICAgICAgICAgICAgICB0aGlzLm1vdmUoZSk7XG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICBtb3ZlOiBmdW5jdGlvbihlKSB7XG5cbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuZHJhZykge1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChNYXRoLmFicyh0aGlzLnBvcy54IC0gdGhpcy5vcmlnaW4ueCkgPiB0aGlzLnRocmVzaG9sZCB8fCBNYXRoLmFicyh0aGlzLnBvcy55IC0gdGhpcy5vcmlnaW4ueSkgPiB0aGlzLnRocmVzaG9sZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGFydChlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLiRlbWl0KCk7XG5cbiAgICAgICAgICAgICAgICB2YXIgdGFyZ2V0ID0gZS50eXBlID09PSAnbW91c2Vtb3ZlJyA/IGUudGFyZ2V0IDogZG9jdW1lbnQuZWxlbWVudEZyb21Qb2ludCh0aGlzLnBvcy54IC0gZG9jdW1lbnQuYm9keS5zY3JvbGxMZWZ0LCB0aGlzLnBvcy55IC0gZG9jdW1lbnQuYm9keS5zY3JvbGxUb3ApO1xuXG4gICAgICAgICAgICAgICAgdmFyIHNvcnRhYmxlID0gdGhpcy5nZXRTb3J0YWJsZSh0YXJnZXQpO1xuICAgICAgICAgICAgICAgIHZhciBwcmV2aW91cyA9IHRoaXMuZ2V0U29ydGFibGUodGhpcy5wbGFjZWhvbGRlcik7XG4gICAgICAgICAgICAgICAgdmFyIG1vdmUgPSBzb3J0YWJsZSAhPT0gcHJldmlvdXM7XG5cbiAgICAgICAgICAgICAgICBpZiAoIXNvcnRhYmxlIHx8IHdpdGhpbih0YXJnZXQsIHRoaXMucGxhY2Vob2xkZXIpIHx8IG1vdmUgJiYgKCFzb3J0YWJsZS5ncm91cCB8fCBzb3J0YWJsZS5ncm91cCAhPT0gcHJldmlvdXMuZ3JvdXApKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0YXJnZXQgPSBzb3J0YWJsZS4kZWwgPT09IHRhcmdldC5wYXJlbnROb2RlICYmIHRhcmdldCB8fCB0b05vZGVzKHNvcnRhYmxlLiRlbC5jaGlsZHJlbikuZmlsdGVyKGZ1bmN0aW9uIChlbGVtZW50KSB7IHJldHVybiB3aXRoaW4odGFyZ2V0LCBlbGVtZW50KTsgfSlbMF07XG5cbiAgICAgICAgICAgICAgICBpZiAobW92ZSkge1xuICAgICAgICAgICAgICAgICAgICBwcmV2aW91cy5yZW1vdmUodGhpcy5wbGFjZWhvbGRlcik7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICghdGFyZ2V0KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBzb3J0YWJsZS5pbnNlcnQodGhpcy5wbGFjZWhvbGRlciwgdGFyZ2V0KTtcblxuICAgICAgICAgICAgICAgIGlmICghaW5jbHVkZXModGhpcy50b3VjaGVkLCBzb3J0YWJsZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50b3VjaGVkLnB1c2goc29ydGFibGUpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgc2Nyb2xsOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICB2YXIgc2Nyb2xsID0gd2luZG93LnBhZ2VZT2Zmc2V0O1xuICAgICAgICAgICAgICAgIGlmIChzY3JvbGwgIT09IHRoaXMuc2Nyb2xsWSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnBvcy55ICs9IHNjcm9sbCAtIHRoaXMuc2Nyb2xsWTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zY3JvbGxZID0gc2Nyb2xsO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLiRlbWl0KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgZW5kOiBmdW5jdGlvbihlKSB7XG5cbiAgICAgICAgICAgICAgICBvZmYoZG9jdW1lbnQsIHBvaW50ZXJNb3ZlLCB0aGlzLm1vdmUpO1xuICAgICAgICAgICAgICAgIG9mZihkb2N1bWVudCwgcG9pbnRlclVwLCB0aGlzLmVuZCk7XG4gICAgICAgICAgICAgICAgb2ZmKHdpbmRvdywgJ3Njcm9sbCcsIHRoaXMuc2Nyb2xsKTtcblxuICAgICAgICAgICAgICAgIGlmICghdGhpcy5kcmFnKSB7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGUudHlwZSAhPT0gJ21vdXNldXAnICYmIHdpdGhpbihlLnRhcmdldCwgJ2FbaHJlZl0nKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbG9jYXRpb24uaHJlZiA9IGNsb3Nlc3QoZS50YXJnZXQsICdhW2hyZWZdJykuaHJlZjtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBwcmV2ZW50Q2xpY2soKTtcblxuICAgICAgICAgICAgICAgIHZhciBzb3J0YWJsZSA9IHRoaXMuZ2V0U29ydGFibGUodGhpcy5wbGFjZWhvbGRlcik7XG5cbiAgICAgICAgICAgICAgICBpZiAodGhpcyA9PT0gc29ydGFibGUpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMub3JpZ2luLmluZGV4ICE9PSBpbmRleCh0aGlzLnBsYWNlaG9sZGVyKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHJpZ2dlcih0aGlzLiRlbCwgJ21vdmVkJywgW3RoaXMsIHRoaXMucGxhY2Vob2xkZXJdKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRyaWdnZXIoc29ydGFibGUuJGVsLCAnYWRkZWQnLCBbc29ydGFibGUsIHRoaXMucGxhY2Vob2xkZXJdKTtcbiAgICAgICAgICAgICAgICAgICAgdHJpZ2dlcih0aGlzLiRlbCwgJ3JlbW92ZWQnLCBbdGhpcywgdGhpcy5wbGFjZWhvbGRlcl0pO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRyaWdnZXIodGhpcy4kZWwsICdzdG9wJywgW3RoaXMsIHRoaXMucGxhY2Vob2xkZXJdKTtcblxuICAgICAgICAgICAgICAgIHJlbW92ZSh0aGlzLmRyYWcpO1xuICAgICAgICAgICAgICAgIHRoaXMuZHJhZyA9IG51bGw7XG5cbiAgICAgICAgICAgICAgICB2YXIgY2xhc3NlcyA9IHRoaXMudG91Y2hlZC5tYXAoZnVuY3Rpb24gKHNvcnRhYmxlKSB7IHJldHVybiAoKHNvcnRhYmxlLmNsc1BsYWNlaG9sZGVyKSArIFwiIFwiICsgKHNvcnRhYmxlLmNsc0l0ZW0pKTsgfSkuam9pbignICcpO1xuICAgICAgICAgICAgICAgIHRoaXMudG91Y2hlZC5mb3JFYWNoKGZ1bmN0aW9uIChzb3J0YWJsZSkgeyByZXR1cm4gcmVtb3ZlQ2xhc3Moc29ydGFibGUuJGVsLmNoaWxkcmVuLCBjbGFzc2VzKTsgfSk7XG5cbiAgICAgICAgICAgICAgICByZW1vdmVDbGFzcyhkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsIHRoaXMuY2xzRHJhZ1N0YXRlKTtcblxuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgaW5zZXJ0OiBmdW5jdGlvbihlbGVtZW50LCB0YXJnZXQpIHtcbiAgICAgICAgICAgICAgICB2YXIgdGhpcyQxID0gdGhpcztcblxuXG4gICAgICAgICAgICAgICAgYWRkQ2xhc3ModGhpcy4kZWwuY2hpbGRyZW4sIHRoaXMuY2xzSXRlbSk7XG5cbiAgICAgICAgICAgICAgICB2YXIgaW5zZXJ0ID0gZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICAgICAgICAgIGlmICh0YXJnZXQpIHtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF3aXRoaW4oZWxlbWVudCwgdGhpcyQxLiRlbCkgfHwgaXNQcmVkZWNlc3NvcihlbGVtZW50LCB0YXJnZXQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVmb3JlKHRhcmdldCwgZWxlbWVudCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFmdGVyKHRhcmdldCwgZWxlbWVudCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZCh0aGlzJDEuJGVsLCBlbGVtZW50KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmFuaW1hdGlvbikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmFuaW1hdGUoaW5zZXJ0KTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpbnNlcnQoKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIHJlbW92ZTogZnVuY3Rpb24oZWxlbWVudCkge1xuXG4gICAgICAgICAgICAgICAgaWYgKCF3aXRoaW4oZWxlbWVudCwgdGhpcy4kZWwpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5hbmltYXRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hbmltYXRlKGZ1bmN0aW9uICgpIHsgcmV0dXJuIHJlbW92ZShlbGVtZW50KTsgfSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVtb3ZlKGVsZW1lbnQpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgZ2V0U29ydGFibGU6IGZ1bmN0aW9uKGVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZWxlbWVudCAmJiAodGhpcy4kZ2V0Q29tcG9uZW50KGVsZW1lbnQsICdzb3J0YWJsZScpIHx8IHRoaXMuZ2V0U29ydGFibGUoZWxlbWVudC5wYXJlbnROb2RlKSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfVxuXG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIGlzUHJlZGVjZXNzb3IoZWxlbWVudCwgdGFyZ2V0KSB7XG4gICAgICAgIHJldHVybiBlbGVtZW50LnBhcmVudE5vZGUgPT09IHRhcmdldC5wYXJlbnROb2RlICYmIGluZGV4KGVsZW1lbnQpID4gaW5kZXgodGFyZ2V0KTtcbiAgICB9XG5cbiAgICB2YXIgb2JqJDI7XG5cbiAgICB2YXIgYWN0aXZlcyA9IFtdO1xuXG4gICAgdmFyIFRvb2x0aXAgPSB7XG5cbiAgICAgICAgYXR0cnM6IHRydWUsXG5cbiAgICAgICAgYXJnczogJ3RpdGxlJyxcblxuICAgICAgICBtaXhpbnM6IFtDb250YWluZXIsIFRvZ2dsYWJsZSwgUG9zaXRpb25dLFxuXG4gICAgICAgIHByb3BzOiB7XG4gICAgICAgICAgICBkZWxheTogTnVtYmVyLFxuICAgICAgICAgICAgdGl0bGU6IFN0cmluZ1xuICAgICAgICB9LFxuXG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgIHBvczogJ3RvcCcsXG4gICAgICAgICAgICB0aXRsZTogJycsXG4gICAgICAgICAgICBkZWxheTogMCxcbiAgICAgICAgICAgIGFuaW1hdGlvbjogWyd1ay1hbmltYXRpb24tc2NhbGUtdXAnXSxcbiAgICAgICAgICAgIGR1cmF0aW9uOiAxMDAsXG4gICAgICAgICAgICBjbHM6ICd1ay1hY3RpdmUnLFxuICAgICAgICAgICAgY2xzUG9zOiAndWstdG9vbHRpcCdcbiAgICAgICAgfSxcblxuICAgICAgICBiZWZvcmVDb25uZWN0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHRoaXMuX2hhc1RpdGxlID0gaGFzQXR0cih0aGlzLiRlbCwgJ3RpdGxlJyk7XG4gICAgICAgICAgICBhdHRyKHRoaXMuJGVsLCB7dGl0bGU6ICcnLCAnYXJpYS1leHBhbmRlZCc6IGZhbHNlfSk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgZGlzY29ubmVjdGVkOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHRoaXMuaGlkZSgpO1xuICAgICAgICAgICAgYXR0cih0aGlzLiRlbCwge3RpdGxlOiB0aGlzLl9oYXNUaXRsZSA/IHRoaXMudGl0bGUgOiBudWxsLCAnYXJpYS1leHBhbmRlZCc6IG51bGx9KTtcbiAgICAgICAgfSxcblxuICAgICAgICBtZXRob2RzOiB7XG5cbiAgICAgICAgICAgIHNob3c6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIHZhciB0aGlzJDEgPSB0aGlzO1xuXG5cbiAgICAgICAgICAgICAgICBpZiAoaW5jbHVkZXMoYWN0aXZlcywgdGhpcykpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGFjdGl2ZXMuZm9yRWFjaChmdW5jdGlvbiAoYWN0aXZlKSB7IHJldHVybiBhY3RpdmUuaGlkZSgpOyB9KTtcbiAgICAgICAgICAgICAgICBhY3RpdmVzLnB1c2godGhpcyk7XG5cbiAgICAgICAgICAgICAgICB0aGlzLl91bmJpbmQgPSBvbihkb2N1bWVudCwgJ2NsaWNrJywgZnVuY3Rpb24gKGUpIHsgcmV0dXJuICF3aXRoaW4oZS50YXJnZXQsIHRoaXMkMS4kZWwpICYmIHRoaXMkMS5oaWRlKCk7IH0pO1xuXG4gICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuc2hvd1RpbWVyKTtcblxuICAgICAgICAgICAgICAgIHRoaXMudG9vbHRpcCA9IGFwcGVuZCh0aGlzLmNvbnRhaW5lciwgKFwiPGRpdiBjbGFzcz1cXFwiXCIgKyAodGhpcy5jbHNQb3MpICsgXCJcXFwiIGFyaWEtaGlkZGVuPjxkaXYgY2xhc3M9XFxcIlwiICsgKHRoaXMuY2xzUG9zKSArIFwiLWlubmVyXFxcIj5cIiArICh0aGlzLnRpdGxlKSArIFwiPC9kaXY+PC9kaXY+XCIpKTtcblxuICAgICAgICAgICAgICAgIGF0dHIodGhpcy4kZWwsICdhcmlhLWV4cGFuZGVkJywgdHJ1ZSk7XG5cbiAgICAgICAgICAgICAgICB0aGlzLnBvc2l0aW9uQXQodGhpcy50b29sdGlwLCB0aGlzLiRlbCk7XG5cbiAgICAgICAgICAgICAgICB0aGlzLm9yaWdpbiA9IHRoaXMuZ2V0QXhpcygpID09PSAneScgPyAoKGZsaXBQb3NpdGlvbih0aGlzLmRpcikpICsgXCItXCIgKyAodGhpcy5hbGlnbikpIDogKCh0aGlzLmFsaWduKSArIFwiLVwiICsgKGZsaXBQb3NpdGlvbih0aGlzLmRpcikpKTtcblxuICAgICAgICAgICAgICAgIHRoaXMuc2hvd1RpbWVyID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgICAgICAgICAgdGhpcyQxLnRvZ2dsZUVsZW1lbnQodGhpcyQxLnRvb2x0aXAsIHRydWUpO1xuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMkMS5oaWRlVGltZXIgPSBzZXRJbnRlcnZhbChmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaXNWaXNpYmxlKHRoaXMkMS4kZWwpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcyQxLmhpZGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB9LCAxNTApO1xuXG4gICAgICAgICAgICAgICAgfSwgdGhpcy5kZWxheSk7XG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICBoaWRlOiBmdW5jdGlvbigpIHtcblxuICAgICAgICAgICAgICAgIHZhciBpbmRleCQkMSA9IGFjdGl2ZXMuaW5kZXhPZih0aGlzKTtcblxuICAgICAgICAgICAgICAgIGlmICghfmluZGV4JCQxIHx8IG1hdGNoZXModGhpcy4kZWwsICdpbnB1dCcpICYmIHRoaXMuJGVsID09PSBkb2N1bWVudC5hY3RpdmVFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBhY3RpdmVzLnNwbGljZShpbmRleCQkMSwgMSk7XG5cbiAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5zaG93VGltZXIpO1xuICAgICAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy5oaWRlVGltZXIpO1xuICAgICAgICAgICAgICAgIGF0dHIodGhpcy4kZWwsICdhcmlhLWV4cGFuZGVkJywgZmFsc2UpO1xuICAgICAgICAgICAgICAgIHRoaXMudG9nZ2xlRWxlbWVudCh0aGlzLnRvb2x0aXAsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICB0aGlzLnRvb2x0aXAgJiYgcmVtb3ZlKHRoaXMudG9vbHRpcCk7XG4gICAgICAgICAgICAgICAgdGhpcy50b29sdGlwID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5fdW5iaW5kKCk7XG5cbiAgICAgICAgICAgIH1cblxuICAgICAgICB9LFxuXG4gICAgICAgIGV2ZW50czogKCBvYmokMiA9IHt9LCBvYmokMlsoXCJmb2N1cyBcIiArIHBvaW50ZXJFbnRlciArIFwiIFwiICsgcG9pbnRlckRvd24pXSA9IGZ1bmN0aW9uIChlKSB7XG4gICAgICAgICAgICAgICAgaWYgKGUudHlwZSAhPT0gcG9pbnRlckRvd24gfHwgIWlzVG91Y2goZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG93KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgb2JqJDIuYmx1ciA9ICdoaWRlJywgb2JqJDJbcG9pbnRlckxlYXZlXSA9IGZ1bmN0aW9uIChlKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFpc1RvdWNoKGUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaGlkZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIG9iaiQyIClcblxuICAgIH07XG5cbiAgICB2YXIgVXBsb2FkID0ge1xuXG4gICAgICAgIHByb3BzOiB7XG4gICAgICAgICAgICBhbGxvdzogU3RyaW5nLFxuICAgICAgICAgICAgY2xzRHJhZ292ZXI6IFN0cmluZyxcbiAgICAgICAgICAgIGNvbmN1cnJlbnQ6IE51bWJlcixcbiAgICAgICAgICAgIG1heFNpemU6IE51bWJlcixcbiAgICAgICAgICAgIG1ldGhvZDogU3RyaW5nLFxuICAgICAgICAgICAgbWltZTogU3RyaW5nLFxuICAgICAgICAgICAgbXNnSW52YWxpZE1pbWU6IFN0cmluZyxcbiAgICAgICAgICAgIG1zZ0ludmFsaWROYW1lOiBTdHJpbmcsXG4gICAgICAgICAgICBtc2dJbnZhbGlkU2l6ZTogU3RyaW5nLFxuICAgICAgICAgICAgbXVsdGlwbGU6IEJvb2xlYW4sXG4gICAgICAgICAgICBuYW1lOiBTdHJpbmcsXG4gICAgICAgICAgICBwYXJhbXM6IE9iamVjdCxcbiAgICAgICAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgICAgICAgIHVybDogU3RyaW5nLFxuICAgICAgICB9LFxuXG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgIGFsbG93OiBmYWxzZSxcbiAgICAgICAgICAgIGNsc0RyYWdvdmVyOiAndWstZHJhZ292ZXInLFxuICAgICAgICAgICAgY29uY3VycmVudDogMSxcbiAgICAgICAgICAgIG1heFNpemU6IDAsXG4gICAgICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgICAgIG1pbWU6IGZhbHNlLFxuICAgICAgICAgICAgbXNnSW52YWxpZE1pbWU6ICdJbnZhbGlkIEZpbGUgVHlwZTogJXMnLFxuICAgICAgICAgICAgbXNnSW52YWxpZE5hbWU6ICdJbnZhbGlkIEZpbGUgTmFtZTogJXMnLFxuICAgICAgICAgICAgbXNnSW52YWxpZFNpemU6ICdJbnZhbGlkIEZpbGUgU2l6ZTogJXMgS2lsb2J5dGVzIE1heCcsXG4gICAgICAgICAgICBtdWx0aXBsZTogZmFsc2UsXG4gICAgICAgICAgICBuYW1lOiAnZmlsZXNbXScsXG4gICAgICAgICAgICBwYXJhbXM6IHt9LFxuICAgICAgICAgICAgdHlwZTogJycsXG4gICAgICAgICAgICB1cmw6ICcnLFxuICAgICAgICAgICAgYWJvcnQ6IG5vb3AsXG4gICAgICAgICAgICBiZWZvcmVBbGw6IG5vb3AsXG4gICAgICAgICAgICBiZWZvcmVTZW5kOiBub29wLFxuICAgICAgICAgICAgY29tcGxldGU6IG5vb3AsXG4gICAgICAgICAgICBjb21wbGV0ZUFsbDogbm9vcCxcbiAgICAgICAgICAgIGVycm9yOiBub29wLFxuICAgICAgICAgICAgZmFpbDogbm9vcCxcbiAgICAgICAgICAgIGxvYWQ6IG5vb3AsXG4gICAgICAgICAgICBsb2FkRW5kOiBub29wLFxuICAgICAgICAgICAgbG9hZFN0YXJ0OiBub29wLFxuICAgICAgICAgICAgcHJvZ3Jlc3M6IG5vb3BcbiAgICAgICAgfSxcblxuICAgICAgICBldmVudHM6IHtcblxuICAgICAgICAgICAgY2hhbmdlOiBmdW5jdGlvbihlKSB7XG5cbiAgICAgICAgICAgICAgICBpZiAoIW1hdGNoZXMoZS50YXJnZXQsICdpbnB1dFt0eXBlPVwiZmlsZVwiXScpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgICAgICAgICAgICBpZiAoZS50YXJnZXQuZmlsZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51cGxvYWQoZS50YXJnZXQuZmlsZXMpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGUudGFyZ2V0LnZhbHVlID0gJyc7XG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICBkcm9wOiBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICAgICAgc3RvcChlKTtcblxuICAgICAgICAgICAgICAgIHZhciB0cmFuc2ZlciA9IGUuZGF0YVRyYW5zZmVyO1xuXG4gICAgICAgICAgICAgICAgaWYgKCF0cmFuc2ZlciB8fCAhdHJhbnNmZXIuZmlsZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJlbW92ZUNsYXNzKHRoaXMuJGVsLCB0aGlzLmNsc0RyYWdvdmVyKTtcblxuICAgICAgICAgICAgICAgIHRoaXMudXBsb2FkKHRyYW5zZmVyLmZpbGVzKTtcbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIGRyYWdlbnRlcjogZnVuY3Rpb24oZSkge1xuICAgICAgICAgICAgICAgIHN0b3AoZSk7XG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICBkcmFnb3ZlcjogZnVuY3Rpb24oZSkge1xuICAgICAgICAgICAgICAgIHN0b3AoZSk7XG4gICAgICAgICAgICAgICAgYWRkQ2xhc3ModGhpcy4kZWwsIHRoaXMuY2xzRHJhZ292ZXIpO1xuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgZHJhZ2xlYXZlOiBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICAgICAgc3RvcChlKTtcbiAgICAgICAgICAgICAgICByZW1vdmVDbGFzcyh0aGlzLiRlbCwgdGhpcy5jbHNEcmFnb3Zlcik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfSxcblxuICAgICAgICBtZXRob2RzOiB7XG5cbiAgICAgICAgICAgIHVwbG9hZDogZnVuY3Rpb24oZmlsZXMpIHtcbiAgICAgICAgICAgICAgICB2YXIgdGhpcyQxID0gdGhpcztcblxuXG4gICAgICAgICAgICAgICAgaWYgKCFmaWxlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRyaWdnZXIodGhpcy4kZWwsICd1cGxvYWQnLCBbZmlsZXNdKTtcblxuICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZmlsZXMubGVuZ3RoOyBpKyspIHtcblxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcyQxLm1heFNpemUgJiYgdGhpcyQxLm1heFNpemUgKiAxMDAwIDwgZmlsZXNbaV0uc2l6ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcyQxLmZhaWwodGhpcyQxLm1zZ0ludmFsaWRTaXplLnJlcGxhY2UoJyVzJywgdGhpcyQxLm1heFNpemUpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzJDEuYWxsb3cgJiYgIW1hdGNoKHRoaXMkMS5hbGxvdywgZmlsZXNbaV0ubmFtZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMkMS5mYWlsKHRoaXMkMS5tc2dJbnZhbGlkTmFtZS5yZXBsYWNlKCclcycsIHRoaXMkMS5hbGxvdykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMkMS5taW1lICYmICFtYXRjaCh0aGlzJDEubWltZSwgZmlsZXNbaV0udHlwZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMkMS5mYWlsKHRoaXMkMS5tc2dJbnZhbGlkTWltZS5yZXBsYWNlKCclcycsIHRoaXMkMS5taW1lKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICghdGhpcy5tdWx0aXBsZSkge1xuICAgICAgICAgICAgICAgICAgICBmaWxlcyA9IFtmaWxlc1swXV07XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGhpcy5iZWZvcmVBbGwodGhpcywgZmlsZXMpO1xuXG4gICAgICAgICAgICAgICAgdmFyIGNodW5rcyA9IGNodW5rKGZpbGVzLCB0aGlzLmNvbmN1cnJlbnQpO1xuICAgICAgICAgICAgICAgIHZhciB1cGxvYWQgPSBmdW5jdGlvbiAoZmlsZXMpIHtcblxuICAgICAgICAgICAgICAgICAgICB2YXIgZGF0YSQkMSA9IG5ldyBGb3JtRGF0YSgpO1xuXG4gICAgICAgICAgICAgICAgICAgIGZpbGVzLmZvckVhY2goZnVuY3Rpb24gKGZpbGUpIHsgcmV0dXJuIGRhdGEkJDEuYXBwZW5kKHRoaXMkMS5uYW1lLCBmaWxlKTsgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIga2V5IGluIHRoaXMkMS5wYXJhbXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEkJDEuYXBwZW5kKGtleSwgdGhpcyQxLnBhcmFtc1trZXldKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGFqYXgodGhpcyQxLnVybCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YTogZGF0YSQkMSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZDogdGhpcyQxLm1ldGhvZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlVHlwZTogdGhpcyQxLnR5cGUsXG4gICAgICAgICAgICAgICAgICAgICAgICBiZWZvcmVTZW5kOiBmdW5jdGlvbiAoZW52KSB7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgeGhyID0gZW52LnhocjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB4aHIudXBsb2FkICYmIG9uKHhoci51cGxvYWQsICdwcm9ncmVzcycsIHRoaXMkMS5wcm9ncmVzcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgWydsb2FkU3RhcnQnLCAnbG9hZCcsICdsb2FkRW5kJywgJ2Fib3J0J10uZm9yRWFjaChmdW5jdGlvbiAodHlwZSkgeyByZXR1cm4gb24oeGhyLCB0eXBlLnRvTG93ZXJDYXNlKCksIHRoaXMkMVt0eXBlXSk7IH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcyQxLmJlZm9yZVNlbmQoZW52KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KS50aGVuKFxuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKHhocikge1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcyQxLmNvbXBsZXRlKHhocik7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2h1bmtzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cGxvYWQoY2h1bmtzLnNoaWZ0KCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMkMS5jb21wbGV0ZUFsbCh4aHIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIChlKSB7IHJldHVybiB0aGlzJDEuZXJyb3IoZS5tZXNzYWdlKTsgfVxuICAgICAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIHVwbG9hZChjaHVua3Muc2hpZnQoKSk7XG5cbiAgICAgICAgICAgIH1cblxuICAgICAgICB9XG5cbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gbWF0Y2gocGF0dGVybiwgcGF0aCkge1xuICAgICAgICByZXR1cm4gcGF0aC5tYXRjaChuZXcgUmVnRXhwKChcIl5cIiArIChwYXR0ZXJuLnJlcGxhY2UoL1xcLy9nLCAnXFxcXC8nKS5yZXBsYWNlKC9cXCpcXCovZywgJyhcXFxcL1teXFxcXC9dKykqJykucmVwbGFjZSgvXFwqL2csICdbXlxcXFwvXSsnKS5yZXBsYWNlKC8oKD8hXFxcXCkpXFw/L2csICckMS4nKSkgKyBcIiRcIiksICdpJykpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNodW5rKGZpbGVzLCBzaXplKSB7XG4gICAgICAgIHZhciBjaHVua3MgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBmaWxlcy5sZW5ndGg7IGkgKz0gc2l6ZSkge1xuICAgICAgICAgICAgdmFyIGNodW5rID0gW107XG4gICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHNpemU7IGorKykge1xuICAgICAgICAgICAgICAgIGNodW5rLnB1c2goZmlsZXNbaSArIGpdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNodW5rcy5wdXNoKGNodW5rKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY2h1bmtzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHN0b3AoZSkge1xuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgfVxuXG4gICAgVUlraXQuY29tcG9uZW50KCdjb3VudGRvd24nLCBDb3VudGRvd24pO1xuICAgIFVJa2l0LmNvbXBvbmVudCgnZmlsdGVyJywgRmlsdGVyKTtcbiAgICBVSWtpdC5jb21wb25lbnQoJ2xpZ2h0Ym94JywgTGlnaHRib3gpO1xuICAgIFVJa2l0LmNvbXBvbmVudCgnbGlnaHRib3hQYW5lbCcsIExpZ2h0Ym94UGFuZWwpO1xuICAgIFVJa2l0LmNvbXBvbmVudCgnbm90aWZpY2F0aW9uJywgTm90aWZpY2F0aW9uKTtcbiAgICBVSWtpdC5jb21wb25lbnQoJ3BhcmFsbGF4JywgUGFyYWxsYXgkMSk7XG4gICAgVUlraXQuY29tcG9uZW50KCdzbGlkZXInLCBTbGlkZXIkMSk7XG4gICAgVUlraXQuY29tcG9uZW50KCdzbGlkZXJQYXJhbGxheCcsIFNsaWRlclBhcmFsbGF4KTtcbiAgICBVSWtpdC5jb21wb25lbnQoJ3NsaWRlc2hvdycsIFNsaWRlc2hvdyQxKTtcbiAgICBVSWtpdC5jb21wb25lbnQoJ3NsaWRlc2hvd1BhcmFsbGF4JywgU2xpZGVyUGFyYWxsYXgpO1xuICAgIFVJa2l0LmNvbXBvbmVudCgnc29ydGFibGUnLCBTb3J0YWJsZSk7XG4gICAgVUlraXQuY29tcG9uZW50KCd0b29sdGlwJywgVG9vbHRpcCk7XG4gICAgVUlraXQuY29tcG9uZW50KCd1cGxvYWQnLCBVcGxvYWQpO1xuXG4gICAge1xuICAgICAgICBib290KFVJa2l0KTtcbiAgICB9XG5cbiAgICByZXR1cm4gVUlraXQ7XG5cbn0pKSk7XG4iXX0= diff --git a/static/js/script.js.map b/static/js/script.js.map deleted file mode 100644 index 97dd2dee..00000000 --- a/static/js/script.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["500.js","fouc.js","jquery/jquery-3.3.1.js","moment/moment-timezone.js","moment/moment.js","typewriter/typewriter.js","uikit/uikit.js","countdown.js","jams.js","revision_diff.js","wiki.js"],"names":["error_typewriter","app","document","getElementById","typewriter","Typewriter","loop","deleteSpeed","typingSpeed","devMode","onclick","current_class","getAttribute","setAttribute","stop","appendText","pauseFor","typeString","deleteChars","changeSettings","window","_RequestMethod","_Path","_Code","_ErrorMsg","start","getScript","url","integrity","cross_origin","script","createElement","type","src","defer","undefined","crossOrigin","getElementsByTagName","appendChild","setClass","selector","my_class","querySelector","className","removeClass","element","reg","RegExp","replace","global","factory","module","exports","w","Error","this","noGlobal","arr","getProto","Object","getPrototypeOf","slice","concat","push","indexOf","class2type","toString","hasOwn","hasOwnProperty","fnToString","ObjectFunctionString","call","support","isFunction","obj","nodeType","isWindow","preservedScriptAttributes","noModule","DOMEval","code","doc","node","i","text","head","parentNode","removeChild","toType","jQuery","context","fn","init","rtrim","isArrayLike","length","prototype","jquery","constructor","toArray","get","num","pushStack","elems","ret","merge","prevObject","each","callback","map","elem","apply","arguments","first","eq","last","len","j","end","sort","splice","extend","options","name","copy","copyIsArray","clone","target","deep","isPlainObject","Array","isArray","expando","Math","random","isReady","error","msg","noop","proto","Ctor","isEmptyObject","globalEval","trim","makeArray","results","inArray","second","grep","invert","matches","callbackExpect","arg","value","guid","Symbol","iterator","split","toLowerCase","Sizzle","Expr","getText","isXML","tokenize","compile","select","outermostContext","sortInput","hasDuplicate","setDocument","docElem","documentIsHTML","rbuggyQSA","rbuggyMatches","contains","Date","preferredDoc","dirruns","done","classCache","createCache","tokenCache","compilerCache","sortOrder","a","b","pop","push_native","list","booleans","whitespace","identifier","attributes","pseudos","rwhitespace","rcomma","rcombinators","rattributeQuotes","rpseudo","ridentifier","matchExpr","ID","CLASS","TAG","ATTR","PSEUDO","CHILD","bool","needsContext","rinputs","rheader","rnative","rquickExpr","rsibling","runescape","funescape","_","escaped","escapedWhitespace","high","String","fromCharCode","rcssescape","fcssescape","ch","asCodePoint","charCodeAt","unloadHandler","disabledAncestor","addCombinator","disabled","dir","next","childNodes","e","els","seed","m","nid","match","groups","newSelector","newContext","ownerDocument","exec","id","getElementsByClassName","qsa","test","nodeName","toSelector","join","testContext","querySelectorAll","qsaError","removeAttribute","keys","cache","key","cacheLength","shift","markFunction","assert","el","addHandle","attrs","handler","attrHandle","siblingCheck","cur","diff","sourceIndex","nextSibling","createInputPseudo","createButtonPseudo","createDisabledPseudo","isDisabled","createPositionalPseudo","argument","matchIndexes","documentElement","hasCompare","subWindow","defaultView","top","addEventListener","attachEvent","createComment","getById","getElementsByName","filter","attrId","find","getAttributeNode","tag","tmp","innerHTML","input","matchesSelector","webkitMatchesSelector","mozMatchesSelector","oMatchesSelector","msMatchesSelector","disconnectedMatch","compareDocumentPosition","adown","bup","compare","sortDetached","aup","ap","bp","unshift","expr","elements","attr","val","specified","escape","sel","uniqueSort","duplicates","detectDuplicates","sortStable","textContent","firstChild","nodeValue","selectors","createPseudo","relative",">"," ","+","~","preFilter","excess","unquoted","nodeNameSelector","pattern","operator","check","result","what","simple","forward","ofType","xml","uniqueCache","outerCache","nodeIndex","parent","useCache","lastChild","uniqueID","pseudo","args","setFilters","idx","matched","not","matcher","unmatched","has","innerText","lang","elemLang","hash","location","root","focus","activeElement","hasFocus","href","tabIndex","enabled","checked","selected","selectedIndex","empty","header","button","even","odd","lt","gt","radio","checkbox","file","password","image","submit","reset","tokens","combinator","base","skip","checkNonElements","doneName","oldCache","newCache","elementMatcher","matchers","condense","newUnmatched","mapped","setMatcher","postFilter","postFinder","postSelector","temp","preMap","postMap","preexisting","contexts","multipleContexts","matcherIn","matcherOut","matcherFromTokens","checkContext","leadingRelative","implicitRelative","matchContext","matchAnyContext","filters","parseOnly","soFar","preFilters","cached","setMatchers","elementMatchers","bySet","byElement","superMatcher","outermost","matchedCount","setMatched","contextBackup","dirrunsUnique","matcherFromGroupMatchers","token","compiled","defaultValue","unique","isXMLDoc","escapeSelector","until","truncate","is","siblings","n","rneedsContext","rsingleTag","winnow","qualifier","self","rootjQuery","parseHTML","ready","rparentsprev","guaranteedUnique","children","contents","prev","sibling","targets","l","closest","index","prevAll","add","addBack","parents","parentsUntil","nextAll","nextUntil","prevUntil","contentDocument","content","reverse","rnothtmlwhite","Identity","v","Thrower","ex","adoptValue","resolve","reject","noValue","method","promise","fail","then","Callbacks","object","flag","createOptions","firing","memory","fired","locked","queue","firingIndex","fire","once","stopOnFalse","remove","disable","lock","fireWith","Deferred","func","tuples","state","always","deferred","catch","pipe","fns","newDefer","tuple","returned","progress","notify","onFulfilled","onRejected","onProgress","maxDepth","depth","special","that","mightThrow","TypeError","notifyWith","resolveWith","process","exceptionHook","stackTrace","rejectWith","getStackHook","setTimeout","stateString","when","singleValue","remaining","resolveContexts","resolveValues","master","updateFunc","rerrorNames","stack","console","warn","message","readyException","readyList","completed","removeEventListener","readyWait","wait","readyState","doScroll","access","chainable","emptyGet","raw","bulk","rmsPrefix","rdashAlpha","fcamelCase","all","letter","toUpperCase","camelCase","string","acceptData","owner","Data","uid","defineProperty","configurable","set","data","prop","hasData","dataPriv","dataUser","rbrace","rmultiDash","dataAttr","JSON","parse","getData","removeData","_data","_removeData","dequeue","startLength","hooks","_queueHooks","setter","clearQueue","count","pnum","source","rcssNum","cssExpand","isHiddenWithinTree","style","display","css","swap","old","adjustCSS","valueParts","tween","adjusted","scale","maxIterations","currentValue","initial","unit","cssNumber","initialInUnit","defaultDisplayMap","getDefaultDisplay","body","showHide","show","values","hide","toggle","rcheckableType","rtagName","rscriptType","wrapMap","option","thead","col","tr","td","_default","getAll","setGlobalEval","refElements","optgroup","tbody","tfoot","colgroup","caption","th","div","rhtml","buildFragment","scripts","selection","ignored","wrap","fragment","createDocumentFragment","nodes","htmlPrefilter","createTextNode","checkClone","cloneNode","noCloneChecked","rkeyEvent","rmouseEvent","rtypenamespace","returnTrue","returnFalse","safeActiveElement","err","on","types","one","origFn","event","off","handleObjIn","eventHandle","events","t","handleObj","handlers","namespaces","origType","elemData","handle","triggered","dispatch","delegateType","bindType","namespace","delegateCount","setup","mappedTypes","origCount","teardown","removeEvent","nativeEvent","handlerQueue","fix","delegateTarget","preDispatch","isPropagationStopped","currentTarget","isImmediatePropagationStopped","rnamespace","preventDefault","stopPropagation","postDispatch","matchedHandlers","matchedSelectors","addProp","hook","Event","enumerable","originalEvent","writable","load","noBubble","trigger","blur","click","beforeunload","returnValue","props","isDefaultPrevented","defaultPrevented","relatedTarget","timeStamp","now","isSimulated","stopImmediatePropagation","altKey","bubbles","cancelable","changedTouches","ctrlKey","detail","eventPhase","metaKey","pageX","pageY","shiftKey","view","char","charCode","keyCode","buttons","clientX","clientY","offsetX","offsetY","pointerId","pointerType","screenX","screenY","targetTouches","toElement","touches","which","mouseenter","mouseleave","pointerenter","pointerleave","orig","related","rxhtmlTag","rnoInnerhtml","rchecked","rcleanScript","manipulationTarget","disableScript","restoreScript","cloneCopyEvent","dest","pdataOld","pdataCur","udataOld","udataCur","domManip","collection","hasScripts","iNoClone","valueIsFunction","html","_evalUrl","keepData","cleanData","dataAndEvents","deepDataAndEvents","srcElements","destElements","inPage","detach","append","prepend","insertBefore","before","after","replaceWith","replaceChild","appendTo","prependTo","insertAfter","replaceAll","original","insert","rnumnonpx","getStyles","opener","getComputedStyle","rboxStyle","curCSS","computed","width","minWidth","maxWidth","getPropertyValue","pixelBoxStyles","addGetHookIf","conditionFn","hookFn","computeStyleTests","container","cssText","divStyle","pixelPositionVal","reliableMarginLeftVal","roundPixelMeasures","marginLeft","right","pixelBoxStylesVal","boxSizingReliableVal","position","scrollboxSizeVal","offsetWidth","measure","round","parseFloat","backgroundClip","clearCloneStyle","boxSizingReliable","pixelPosition","reliableMarginLeft","scrollboxSize","rdisplayswap","rcustomProp","cssShow","visibility","cssNormalTransform","letterSpacing","fontWeight","cssPrefixes","emptyStyle","finalPropName","cssProps","capName","vendorPropName","setPositiveNumber","subtract","max","boxModelAdjustment","dimension","box","isBorderBox","styles","computedVal","extra","delta","ceil","getWidthOrHeight","valueIsBorderBox","Tween","easing","cssHooks","opacity","animationIterationCount","columnCount","fillOpacity","flexGrow","flexShrink","lineHeight","order","orphans","widows","zIndex","zoom","origName","isCustomProp","setProperty","isFinite","getClientRects","getBoundingClientRect","left","margin","padding","border","prefix","suffix","expand","expanded","parts","propHooks","run","percent","eased","duration","pos","step","fx","scrollTop","scrollLeft","linear","p","swing","cos","PI","fxNow","inProgress","rfxtypes","rrun","schedule","hidden","requestAnimationFrame","interval","tick","createFxNow","genFx","includeWidth","height","createTween","animation","Animation","tweeners","properties","stopped","prefilters","currentTime","startTime","tweens","opts","specialEasing","originalProperties","originalOptions","gotoEnd","propFilter","bind","complete","timer","anim","*","tweener","oldfire","propTween","restoreDisplay","isBox","dataShow","unqueued","overflow","overflowX","overflowY","prefilter","speed","opt","speeds","fadeTo","to","animate","optall","doAnimation","finish","stopQueue","timers","cssFn","slideDown","slideUp","slideToggle","fadeIn","fadeOut","fadeToggle","slow","fast","delay","time","timeout","clearTimeout","checkOn","optSelected","radioValue","boolHook","removeAttr","nType","attrHooks","attrNames","getter","lowercaseName","rfocusable","rclickable","stripAndCollapse","getClass","classesToArray","removeProp","propFix","tabindex","parseInt","for","class","addClass","classes","curValue","clazz","finalValue","toggleClass","stateVal","isValidValue","classNames","hasClass","rreturn","valHooks","optionSet","focusin","rfocusMorph","stopPropagationCallback","onlyHandlers","bubbleType","ontype","lastElement","eventPath","isTrigger","parentWindow","simulate","triggerHandler","attaches","nonce","rquery","parseXML","DOMParser","parseFromString","rbracket","rCRLF","rsubmitterTypes","rsubmittable","buildParams","traditional","param","s","valueOrFunction","encodeURIComponent","serialize","serializeArray","r20","rhash","rantiCache","rheaders","rnoContent","rprotocol","transports","allTypes","originAnchor","addToPrefiltersOrTransports","structure","dataTypeExpression","dataType","dataTypes","inspectPrefiltersOrTransports","jqXHR","inspected","seekingTransport","inspect","prefilterOrFactory","dataTypeOrTransport","ajaxExtend","flatOptions","ajaxSettings","active","lastModified","etag","isLocal","protocol","processData","async","contentType","accepts","json","responseFields","converters","* text","text html","text json","text xml","ajaxSetup","settings","ajaxPrefilter","ajaxTransport","ajax","transport","cacheURL","responseHeadersString","responseHeaders","timeoutTimer","urlAnchor","fireGlobals","uncached","callbackContext","globalEventContext","completeDeferred","statusCode","requestHeaders","requestHeadersNames","strAbort","getResponseHeader","getAllResponseHeaders","setRequestHeader","overrideMimeType","mimeType","status","abort","statusText","finalText","crossDomain","host","hasContent","ifModified","headers","beforeSend","success","send","nativeStatusText","responses","isSuccess","response","modified","ct","finalDataType","firstDataType","ajaxHandleResponses","conv2","current","conv","dataFilter","throws","ajaxConvert","getJSON","wrapAll","firstElementChild","wrapInner","htmlIsFunction","unwrap","visible","offsetHeight","xhr","XMLHttpRequest","xhrSuccessStatus","0","1223","xhrSupported","cors","errorCallback","open","username","xhrFields","onload","onerror","onabort","ontimeout","onreadystatechange","responseType","responseText","binary","text script","charset","scriptCharset","evt","oldCallbacks","rjsonp","jsonp","jsonpCallback","originalSettings","callbackName","overwritten","responseContainer","jsonProp","createHTMLDocument","implementation","keepScripts","parsed","params","animated","offset","setOffset","curPosition","curLeft","curCSSTop","curTop","curOffset","curCSSLeft","curElem","using","rect","win","pageYOffset","pageXOffset","offsetParent","parentOffset","scrollTo","Height","Width","","defaultExtra","funcName","hover","fnOver","fnOut","unbind","delegate","undelegate","proxy","holdReady","hold","parseJSON","isNumeric","isNaN","define","amd","_jQuery","_$","$","noConflict","require","moment","cachedGuess","zones","links","names","guesses","momentVersion","version","major","minor","charCodeToInt","unpackBase60","whole","fractional","multiplier","out","sign","arrayToInt","array","mapIndices","indices","unpack","offsets","untils","Infinity","intToUntil","abbrs","population","Zone","packedString","_set","OffsetAt","at","timeString","toTimeString","abbr","getTimezoneOffset","ZoneScore","zone","offsetScore","abbrScore","findChange","low","mid","sortZoneScores","addToGuesses","guessesForUserOffsets","guessesOffset","offsetsLength","filteredGuesses","rebuildGuess","intlName","Intl","DateTimeFormat","resolvedOptions","timeZone","normalizeName","logError","zoneScore","change","startYear","getFullYear","userOffsets","zoneScores","getZone","scoreOffsetAt","addZone","packed","normalized","caller","link","addLink","aliases","alias","normal0","normal1","needsOffset","isUnixTimestamp","_f","_a","_tzm","tz","utc","isMoment","unpacked","_index","timestamp","offsetNext","offsetPrev","moveAmbiguousForward","moveInvalidForward","mom","utcOffset","offsetAt","abs","dataVersion","_zones","_links","_names","zoneExists","didShowError","guess","ignoreCache","abbrWrap","_z","defaultZone","updateOffset","keepTime","_isUTC","_d","zoneName","zoneAbbr","setDefault","momentProperties","hookCallback","some","isObject","isUndefined","isNumber","isDate","res","hasOwnProp","valueOf","createUTC","format","locale","strict","createLocalOrUTC","getParsingFlags","_pf","unusedTokens","unusedInput","charsLeftOver","nullInput","invalidMonth","invalidFormat","userInvalidated","iso","parsedDateParts","meridiem","rfc2822","weekdayMismatch","isValid","_isValid","flags","parsedParts","isNowValid","getTime","invalidWeekday","_strict","bigHour","isFrozen","createInvalid","NaN","fun","copyConfig","from","_isAMomentObject","_i","_l","_offset","_locale","updateInProgress","Moment","config","absFloor","number","floor","toInt","argumentForCoercion","coercedNumber","compareArrays","array1","array2","dontConvert","min","lengthDiff","diffs","suppressDeprecationWarnings","deprecate","firstTime","deprecationHandler","deprecations","deprecateSimple","Function","mergeConfigs","parentConfig","childConfig","Locale","addUnitAlias","shorthand","lowerCase","normalizeUnits","units","normalizeObjectUnits","inputObject","normalizedProp","normalizedInput","priorities","addUnitPriority","priority","zeroFill","targetLength","forceSign","absNumber","zerosToFill","pow","substr","formattingTokens","localFormattingTokens","formatFunctions","formatTokenFunctions","addFormatToken","padded","ordinal","localeData","formatMoment","expandFormat","output","makeFormatFunction","invalidDate","replaceLongDateFormatTokens","longDateFormat","lastIndex","match1","match2","match3","match4","match6","match1to2","match3to4","match5to6","match1to3","match1to4","match1to6","matchUnsigned","matchSigned","matchOffset","matchShortOffset","matchWord","regexes","addRegexToken","regex","strictRegex","isStrict","getParseRegexForToken","regexEscape","p1","p2","p3","p4","addParseToken","addWeekParseToken","_w","addTimeToArrayFromToken","YEAR","MONTH","DATE","HOUR","MINUTE","SECOND","MILLISECOND","WEEK","WEEKDAY","daysInYear","year","isLeapYear","y","parseTwoDigitYear","getSetYear","makeGetSet","set$1","month","date","daysInMonth","x","modMonth","o","monthsShort","months","monthsShortRegex","monthsRegex","monthsParse","MONTHS_IN_FORMAT","defaultLocaleMonths","defaultLocaleMonthsShort","setMonth","dayOfMonth","getSetMonth","defaultMonthsShortRegex","defaultMonthsRegex","computeMonthsParse","cmpLenRev","shortPieces","longPieces","mixedPieces","_monthsRegex","_monthsShortRegex","_monthsStrictRegex","_monthsShortStrictRegex","createUTCDate","UTC","getUTCFullYear","setUTCFullYear","firstWeekOffset","dow","doy","fwd","getUTCDay","dayOfYearFromWeeks","week","weekday","resYear","resDayOfYear","dayOfYear","weekOfYear","resWeek","weekOffset","weeksInYear","weekOffsetNext","weekdaysMin","weekdaysShort","weekdays","weekdaysMinRegex","weekdaysShortRegex","weekdaysRegex","weekdaysParse","d","defaultLocaleWeekdays","defaultLocaleWeekdaysShort","defaultLocaleWeekdaysMin","defaultWeekdaysRegex","defaultWeekdaysShortRegex","defaultWeekdaysMinRegex","computeWeekdaysParse","minp","shortp","longp","minPieces","day","_weekdaysRegex","_weekdaysShortRegex","_weekdaysMinRegex","_weekdaysStrictRegex","_weekdaysShortStrictRegex","_weekdaysMinStrictRegex","hFormat","hours","lowercase","minutes","matchMeridiem","_meridiemParse","seconds","kInput","_isPm","isPM","_meridiem","pos1","pos2","globalLocale","getSetHour","baseConfig","calendar","sameDay","nextDay","nextWeek","lastDay","lastWeek","sameElse","LTS","LT","L","LL","LLL","LLLL","dayOfMonthOrdinalParse","relativeTime","future","past","ss","mm","h","hh","dd","M","MM","yy","meridiemParse","locales","localeFamilies","normalizeLocale","loadLocale","oldLocale","_abbr","getSetGlobalLocale","getLocale","defineLocale","_config","parentLocale","forEach","chooseLocale","checkOverflow","_overflowDayOfYear","_overflowWeeks","_overflowWeekday","defaults","c","configFromArray","currentDate","expectedWeekday","yearToUse","nowValue","_useUTC","getUTCMonth","getUTCDate","getMonth","getDate","currentDateArray","weekYear","weekdayOverflow","GG","W","E","createLocal","_week","curWeek","gg","_dayOfYear","dayOfYearFromWeekInfo","_nextDay","ms","setFullYear","getDay","setUTCMinutes","getUTCMinutes","extendedIsoRegex","basicIsoRegex","tzRegex","isoDates","isoTimes","aspNetJsonRegex","configFromISO","allowTime","dateFormat","timeFormat","tzFormat","configFromStringAndFormat","extractFromRFC2822Strings","yearStr","monthStr","dayStr","hourStr","minuteStr","secondStr","untruncateYear","obsOffsets","UT","GMT","EDT","EST","CDT","CST","MDT","MST","PDT","PST","configFromRFC2822","parsedArray","weekdayStr","parsedInput","checkWeekday","obsOffset","militaryOffset","numOffset","hm","calculateOffset","ISO_8601","RFC_2822","skipped","stringLength","totalParsedInputLength","hour","isPm","meridiemHour","meridiemFixWrap","prepareConfig","preparse","tempConfig","bestMoment","scoreToBeat","currentScore","score","configFromStringAndArray","createFromInputFallback","configFromString","minute","millisecond","configFromObject","configFromInput","isUTC","getOwnPropertyNames","k","isObjectEmpty","prototypeMin","other","prototypeMax","pickBy","moments","ordering","Duration","years","quarters","quarter","weeks","days","milliseconds","unitHasDecimal","isDurationValid","_milliseconds","_days","_months","_bubble","isDuration","absRound","separator","offsetFromString","chunkOffset","cloneWithOffset","model","setTime","local","getDateOffset","isUtc","aspNetRegex","isoRegex","createDuration","diffRes","parseIso","isBefore","positiveMomentsDifference","momentsDifference","inp","isAfter","createAdder","direction","period","addSubtract","isAdding","invalid","monthDiff","wholeMonthDiff","anchor","newLocaleData","defaultFormat","defaultFormatUtc","addWeekYearFormatToken","getSetWeekYearHelper","weeksTarget","dayOfYearData","isoWeekYear","_dayOfMonthOrdinalParse","_ordinalParse","_dayOfMonthOrdinalParseLenient","getSetDayOfMonth","getSetMinute","getSetSecond","parseMs","getSetMillisecond","preParsePostFormat","formats","sod","startOf","calendarFormat","asFloat","zoneDelta","endOf","inputString","postformat","withoutSuffix","humanize","fromNow","toNow","invalidAt","localInput","isBetween","inclusivity","isSame","inputMs","isSameOrAfter","isSameOrBefore","parsingFlags","prioritized","unitsObj","u","getPrioritizedUnits","isoWeekday","toObject","toDate","toISOString","keepOffset","toJSON","unix","creationData","isoWeek","isoWeeks","weekInfo","isoWeeksInYear","parseWeekday","parseIsoWeekday","keepLocalTime","keepMinutes","localAdjust","_changeInProgress","parseZone","tZone","hasAlignedHourOffset","isDST","isUtcOffset","dates","isDSTShifted","_isDSTShifted","proto$1","get$1","field","listMonthsImpl","listWeekdaysImpl","localeSorted","_calendar","_longDateFormat","formatUpper","_invalidDate","_ordinal","isFuture","_relativeTime","pastFuture","isFormat","_monthsShort","monthName","_monthsParseExact","ii","llc","toLocaleLowerCase","_monthsParse","_longMonthsParse","_shortMonthsParse","firstDayOfYear","firstDayOfWeek","_weekdays","_weekdaysMin","_weekdaysShort","weekdayName","_weekdaysParseExact","_weekdaysParse","_shortWeekdaysParse","_minWeekdaysParse","_fullWeekdaysParse","charAt","isLower","langData","mathAbs","addSubtract$1","absCeil","daysToMonths","monthsToDays","makeAs","as","asMilliseconds","asSeconds","asMinutes","asHours","asDays","asWeeks","asMonths","asYears","makeGetter","thresholds","abs$1","toISOString$1","Y","D","toFixed","total","totalSign","ymSign","daysSign","hmsSign","proto$2","monthsFromDays","withSuffix","posNegDuration","relativeTime$1","toIsoString","updateLocale","tmpLocale","relativeTimeRounding","roundingFunction","relativeTimeThreshold","threshold","limit","myMoment","HTML5_FMT","DATETIME_LOCAL","DATETIME_LOCAL_SECONDS","DATETIME_LOCAL_MS","TIME","TIME_SECONDS","TIME_MS","lastTime","vendors","cancelAnimationFrame","currTime","timeToCall","_settings","cursorAnimationPaused","opacityIncreasing","currentOpacity","delayedQue","delayItemsCount","eventQue","calledEvents","eventRunning","delayExecution","fps","typingFrameCount","stringToTypeHTMLArray","currentTypedCharacters","typing","usedIDs","charAmountToDelete","userOptions","eventLoopRerun","default_options","strings","cursorClassName","cursor","animateCursor","blinkSpeed","charSpanClassName","wrapperClassName","autoStart","_setupOptions","_setupTypwriterWrapper","_startCursorAnimation","typeOutAllStrings","TypewriterPrototype","_addToEventQue","_stopEventLoop","_startEventLoop","rerun","_rerunCalledEvents","string_chars","_getCharacters","_typeCharacters","deleteAll","_deleteChars","amount","_pauseFor","characters_array","_getStringsAsCharsArray","_randomInteger","new_settings","_changeSettings","stringify","changeBlinkSpeed","new_speed","changeTypingSpeed","changeDeleteSpeed","_resetEventLoop","_deletingCharIdsAnimation","_deletingCharAnimationFrame","log","delete_speed","typewriter_wrapper_class_name","current_typed_char_ids","char_amount_to_delete","last_typed_char_index","get_last_typed_char","char_to_delete_el","new_options","merged_options","attrname","first_event","_eventQueAnimation","event_name","typewriter_wrapper","_convertCharsToHTML","_typingAnimation","_typingAnimationFrame","total_items","typing_speed","item_to_type","chars","chars_html_wrap_array","char_class_name","chars_array","char_element","char_id","_generateUniqueID","strings_array_check","strings_string_check","strings_chars_array","_cursorAnimationFrame","opacity_amount","cursor_el","_cursorAnimation","_appendText","items","cursor_class_name","cursor_element","_pauseCursorAnimation","_restartCursorAnimation","_randomID","possible","temp_id","UIkit","hyphenateCache","hyphenateRe","hyphenate","str","camelizeRe","camelize","toUpper","ucfirst","strPrototype","startsWithFn","startsWith","search","lastIndexOf","endsWithFn","endsWith","includesFn","includesStr","includes","includesArray","isString","isDocument","isJQuery","isNode","Node","isNodeCollection","NodeList","HTMLCollection","isBoolean","toBoolean","toNumber","Number","toFloat","toNode","arrayProto","toNodes","Boolean","toList","toMs","assign","cb","sortBy","clamp","intersectRect","r1","r2","bottom","pointInRect","point","Dimensions","ratio","dimensions","aProp","contain","maxDimensions","this$1","cover","hasAttr","hasAttribute","filterAttr","attribute","replacement","query","isContextSelector","queryAll","findAll","_query","queryFn","removes","contextSanitizeRe","ctx","selectors$1","previousElementSibling","contextSelectorRe","elProto","Element","matchesFn","closestFn","ancestor","escapeFn","CSS","voidElements","area","br","embed","hr","img","keygen","menuitem","meta","track","wbr","isVoidElement","tagName","isVisible","selInput","isInput","within","ref","getArgs","listener","useCapture","toEventTarget","condition","toEventTargets","reduce","notCanceled","dispatchEvent","createEvent","initCustomEvent","isEventTarget","EventTarget","preventClick","Promise$1","Promise","PromiseFn","PENDING","setImmediate","executor","r","iterable","resolver","race","env","getImage","srcset","sizes","Image","unbind1","unbind2","getIndex","finite","hasChildNodes","insertNodes","called","reason","onResolved","fragmentRe","singleTagRe","insertAdjacentHTML","nextElementSibling","apply$1","removeClasses","cls","replaceClass","classList","force","getArgs$1","supports","Force","Multiple","animation-iteration-count","column-count","fill-opacity","flex-grow","flex-shrink","font-weight","line-height","z-index","property","propName","getStyle","removeProperty","pseudoElt","vars","getCssVar","prefixedName","transition","timing","transition-property","transition-duration","transition-timing-function","Transition","cancel","animationPrefix","clsCancelAnimation","origin","arguments$1","hasReset","in","isHtml","$$","dirs","positionAt","elAttach","targetAttach","elOffset","targetOffset","flip","boundary","getPos","flipped","dim","getDimensions","targetDim","moveTo","getOffsets","window$1","align","alignFlip","elemOffset","centerOffset","centerTargetOffset","newVal","coordinates","currentOffset","innerHeight","innerWidth","docEl","propName$$1","boxModelAdjust","attach","factor","flipPosition","isInView","topOffset","leftOffset","relativeToViewport","offsetPosition","elTop","elLeft","scrolledOver","heightOffset","document$1","elHeight","vp","vh","offsetTop","offsetLeft","isRtl","hasTouchEvents","hasPointerEvents","PointerEvent","hasTouch","DocumentTouch","navigator","maxTouchPoints","pointerDown","pointerMove","pointerUp","pointerEnter","pointerLeave","fastdom","reads","writes","read","task","scheduleFlush","write","clear","remove$1","flush","runTasks","scheduled","tasks","item","MouseTracker","slope","positions","ticking","movesTo","position$$1","prevPos","points","strats","mergeFnData","parentVal","childVal","vm","created","beforeConnect","connected","beforeDisconnect","disconnected","destroy","update","methods","defaultStrat","mergeOptions","child","extends","mixins","mergeKey","key$1","parseOptions","Player","post","cmd","contentWindow","postMessage","isVideo","isYoutube","isVimeo","isHTML5","isIFrame","enableApi","poller","youtube","vimeo","setInterval","data$$1","player_id","clearInterval","play","pause","mute","muted","clickTimeout","swipeTimeout","tapTimeout","clicked","touch","cancelAll","getPos$1","getType","x1","y1","x2","y2","touching","isTouch","getComponentName","_init","util","freeze","DATA","_isReady","_callUpdate","use","plugin","installed","mixin","component","Sub","create","path","globalAPI","_callHook","$options","_callConnected","_connected","_initProps","_initEvents","_initObserver","_callReady","_callDisconnected","_observer","disconnect","_unbindEvents","_resetComputeds","updates","_frames","hooksAPI","getProps","coerce","prop$1","registerComputed","_computeds","$props","$el","registerEvent","capture","filter$$1","selfFilter","_events","notIn","every","toMedia","ref$1","index$$1","normalizeData","_uid","_initData","_initMethods","_initComputeds","$mount","$name","exclude","MutationObserver","$reset","observe","attributeFilter","stateAPI","components","argsArray","functional","instance","getComponent","$destroy","install","_initialized","getComponents","connect","name$1","componentAPI","$emit","removeEl","$create","$update","$getComponent","defineProperties","$container","getOwnPropertyDescriptor","instanceAPI","Class","Togglable","queued","initProps","paddingTop","paddingBottom","marginTop","marginBottom","hideProps","hasAnimation","hasTransition","toggleElement","animate$$1","_toggleElement","toggled","isToggled","untoggled","scroll","toggleNow","updateAria","_toggleHeight","_toggleAnimation","_toggleImmediate","_toggle","changed","inner","lastElementChild","currentHeight","endHeight","Accordion","collapsible","multiple","clsOpen","isItem","_wrapper","Alert","close","selClose","Core","started","passive","hoverSelector","registered","Video","automute","autoplay","inView","preload","player","Cover","height$$1","width$$1","clientWidth","clientHeight","loadedmetadata","Position","clsPos","offset$$1","axis","getAxis","Drop","mode","boundaryAlign","delayShow","delayHide","clsDrop","hoverIdle","tracker","clearTimers","isActive","tryShow","isDelaying","showTimer","isParentOf","hideTimer","isChildOf","drop","alignTo","Dropdown","FormCustom","files","Gif","inview","Margin","firstColumn","rows","getRows","stacks","row","getOffset","leftDim","Grid","masonry","parallax","clsStack","translates","sum","maxColumnHeight","scrolled","HeightMatch","minHeight","boxSizing","heights","HeightViewport","offsetBottom","viewport","svgs","SVG","icon","assign$$1","svg","getSvg","symbols","symbolRe","parseSymbols","isEqualNode","svgEl","decodeURIComponent","icons","spinner","totop","marker","close-icon","close-large","navbar-toggle-icon","overlay-icon","pagination-next","pagination-previous","search-icon","search-large","search-navbar","slidenav-next","slidenav-next-large","slidenav-previous","slidenav-previous-large","Icon","added","cmp","isIcon","getIcon","applyRtl","IconComponent","Slidenav","Search","Close","Spinner","Img","dataSrc","dataSrcset","dataSizes","dataWidth","dataHeight","cacheKey","isImg","toPx","storage","setSrcAttrs","color","matches$$1","sizesRe","matchMedia","size","substring","sizeRe","additionRe","urlCache","canvas","getContext","fillStyle","fillRect","toDataURL","getPlaceholderImage","currentSrc","sessionStorage","active$1","Leader","fill","media","clsWrapper","clsHide","attrFill","wrapper","Container","Modal","selPanel","escClose","bgClose","overlay","panel","transitionElement","transitionDuration","registerEvents","clsPage","scrollbarWidth","found","getActive","Modal$1","modal","dialog","alert","labels","confirm","resolved","prompt","ok","Nav","Navbar","dropdown","dropbar","dropbarMode","dropbarAnchor","dropdowns","getDropdown","transitionTo","newHeight","oldHeight","clip","Offcanvas","clsContainer","clsFlip","clsContent","clsContentAnimation","clsSidebarAnimation","clsMode","clsOverlay","OverflowAuto","Responsive","Scroll","docHeight","winHeight","startY","currentY","Scrollspy","repeat","inViewClass","elData","toggles","ScrollspyNav","Sticky","clsActive","clsInactive","clsFixed","clsBelow","selTarget","widthElement","showOnUp","placeholder","bottomOffset","parseProp","inactive","scrollY","propOffset","Switcher","swiping","attrItem","connects","getSelection","hasPrev","Tab","Toggle","core","Countdown","timespan","digits","digit","style$1","targetClass","Animate","action","sheet","insertRule","propsFrom","oldScrollY","propsTo","getPositionWithMargin","pointerEvents","Filter","selActive","actives","isEqualList","setState","getState","mergeState","attr$$1","stateFilter","ref_sort","stateSort","stateOrder","getFilter","group","matchFilter","apply$$1","getSelector","sorted","localeCompare","sortItems","filterBy","listA","listB","Animations","slide","transform","translate","translated","scale3d","Animations$1","fade","triggerUpdate","Slider","autoplayInterval","pauseOnHover","startAutoplay","stopAutoplay","isHovering","preventCatch","slidesSelector","drag","_transitioner","getDistance","dragging","prevIndex","unbindMove","move","distance","slides","dis","nextIndex","_getDistance","itemShown","edge","_translate","_show","dirChange","selNav","nav","navItemSelector","navItems","maxIndex","updateNav","getValidIndex","clsActivated","velocity","Transitioner","transitionOptions","speedUp","selList","itemshown","queueIndex","getDirection","_getTransitioner","transitioner","Slideshow","Animations$$1","itemshow itemhide itemshown itemhidden","itemshow","beforeitemshow","itemhidden","LightboxPanel","delayControls","videoAutoplay","template","hideControls","getItem","loadItem","alt","setItem","setError","video","poster","videoWidth","videoHeight","setIframe","getIframe","encodeURI","withCredentials","ref_response","showControls","controlsTimer","Lightbox","lightboxPanel","_destroy","containers","Notification","clsClose","clsMsg","notification","closeAll","immediate","removeFn","props$1","Parallax","bgPos","isColor","isCssProp","steps","covers","down","bgProps","bg","backgroundSize","_image","dimEl","naturalWidth","naturalHeight","span","bgPosFloat","backgroundRepeat","getCss","css$$1","getValue","ref$2","getStep","Parallax$1","ease$1","SliderReactive","getLeft","center","getElLeft","centerEl","getMax","getWidth","triggerUpdate$1","Slider$1","sets","updateTranslates","getItemIn","getActives","slideLeft","avgWidth","leftCenter","slideWidth","reorder","slideIndex","SliderParallax","selItem","ref_detail","getCurrent","isIn","obj$1","obj$2","Animations$2","pull","Slideshow$1","maxHeight","hgt","Sortable","clsItem","clsPlaceholder","clsDrag","clsDragState","clsBase","clsNoDrag","clsEmpty","clsCustom","touched","outerHTML","elementFromPoint","sortable","getSortable","previous","isPredecessor","Tooltip","title","_hasTitle","aria-expanded","_unbind","tooltip","Upload","allow","clsDragover","concurrent","maxSize","mime","msgInvalidMime","msgInvalidName","msgInvalidSize","beforeAll","completeAll","loadEnd","loadStart","upload","transfer","dataTransfer","dragenter","dragover","dragleave","chunks","chunk","FormData","mutations","applyMutation","childList","subtree","characterData","mutation","addedNodes","removedNodes","i$1","applyChildList","attributeName","applyAttribute","boot","startjam","endjam","goal","heading","refreshCountdown","reload","JamActions","[object Object]","csrf_token","X-CSRFToken","jam","send_json","form","question","participant","revision_diff","revisions","id_reg","getRevisionId","getRevision","onchange","rev","aft","bef","radioButtonChecked","sidebar"],"mappings":"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","file":"script.js","sourcesContent":["\"use strict\";\n\n/* exported error_typewriter */\n\nfunction error_typewriter() {\n const app = document.getElementById(\"error\");\n\n const typewriter = new Typewriter(app, {\n \"loop\": false,\n \"deleteSpeed\": 40,\n \"typingSpeed\": \"natural\",\n \"devMode\": false\n });\n\n function closeWindow() {\n const app = document.getElementById(\"win\");\n const current_class = app.getAttribute(\"class\");\n app.setAttribute(\"class\", `${current_class } uk-animation-scale-up uk-animation-reverse`);\n typewriter.stop();\n }\n\n document.getElementById(\"terminal-close\").onclick = closeWindow;\n\n typewriter.appendText(\"Python 3.6.4 (default, Jan 5 2018, 02:35:40)\\n\")\n .appendText(\"[GCC 7.2.1 20171224] on darwin\\n\")\n .appendText(\"Type \\\"help\\\", \\\"copyright\\\", \\\"credits\\\" or \\\"license\\\" for more information.\\n\")\n .appendText(\">>> \")\n .pauseFor(1000)\n .typeString(\"impor requests\")\n .deleteChars(9)\n .typeString(\"t requests\\n\")\n .appendText(\">>> \")\n .pauseFor(750)\n .changeSettings({\"typingSpeed\": \"natural\"})\n .typeString(`response = requests.${ window._RequestMethod }('https://pythim`)\n .deleteChars(2)\n .typeString(\"ondiscord.con/\")\n .deleteChars(2)\n .typeString(`m${ window._Path }')\\n`)\n .pauseFor(1000)\n .appendText(`<Response [${ window._Code }]>\\n>>> `)\n .typeString(\"# hmmmm\")\n .pauseFor(1000)\n .deleteChars(7)\n .pauseFor(1000)\n .typeString(\"response.text\\n\")\n .appendText(`${ window._ErrorMsg }\\n>>> `)\n .start();\n}\n","\"use strict\";\n\nfunction getScript(url, integrity, cross_origin) {\n const script = document.createElement(\"script\");\n script.type = \"text/javascript\";\n script.src = url;\n script.defer = true;\n\n if (integrity !== undefined) {\n script.integrity = integrity;\n }\n\n if (cross_origin !== undefined) {\n script.crossOrigin = cross_origin;\n }\n\n document.getElementsByTagName(\"head\")[0].appendChild(script);\n}\n\nfunction setClass(selector, my_class) {\n const element = document.querySelector(selector);\n // console.log(element);\n element.className = my_class;\n}\n\nfunction removeClass(selector, my_class) {\n const element = document.querySelector(selector);\n const reg = new RegExp(`(^| )${my_class}($| )`, \"g\");\n element.className = element.className.replace(reg, \" \");\n}\n\n// hide the html when the page loads, but only if js is turned on.\nsetClass(\"html\", \"prevent-fouc\");\n\n// when the DOM has finished loading, unhide the html\ndocument.onreadystatechange = function () {\n if (document.readyState === \"interactive\") {\n removeClass(\"html\", \"prevent-fouc\");\n getScript(\n \"https://pro.fontawesome.com/releases/v5.0.13/js/all.js\", // URL\n \"sha384-d84LGg2pm9KhR4mCAs3N29GQ4OYNy+K+FBHX8WhimHpPm86c839++MDABegrZ3gn\", // Integrity\n \"anonymous\" // Cross-origin\n );\n getScript(\n \"https://cdnjs.cloudflare.com/ajax/libs/ace/1.3.3/ace.js\"\n );\n getScript(\n \"https://cdn.jsdelivr.net/npm/flatpickr\"\n );\n }\n};\n","/*!\n * jQuery JavaScript Library v3.3.1\n * https://jquery.com/\n *\n * Includes Sizzle.js\n * https://sizzlejs.com/\n *\n * Copyright JS Foundation and other contributors\n * Released under the MIT license\n * https://jquery.org/license\n *\n * Date: 2018-01-20T17:24Z\n */\n( function( global, factory ) {\n\n\t\"use strict\";\n\n\tif ( typeof module === \"object\" && typeof module.exports === \"object\" ) {\n\n\t\t// For CommonJS and CommonJS-like environments where a proper `window`\n\t\t// is present, execute the factory and get jQuery.\n\t\t// For environments that do not have a `window` with a `document`\n\t\t// (such as Node.js), expose a factory as module.exports.\n\t\t// This accentuates the need for the creation of a real `window`.\n\t\t// e.g. var jQuery = require(\"jquery\")(window);\n\t\t// See ticket #14549 for more info.\n\t\tmodule.exports = global.document ?\n\t\t\tfactory( global, true ) :\n\t\t\tfunction( w ) {\n\t\t\t\tif ( !w.document ) {\n\t\t\t\t\tthrow new Error( \"jQuery requires a window with a document\" );\n\t\t\t\t}\n\t\t\t\treturn factory( w );\n\t\t\t};\n\t} else {\n\t\tfactory( global );\n\t}\n\n// Pass this if window is not defined yet\n} )( typeof window !== \"undefined\" ? window : this, function( window, noGlobal ) {\n\n// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1\n// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode\n// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common\n// enough that all such attempts are guarded in a try block.\n\"use strict\";\n\nvar arr = [];\n\nvar document = window.document;\n\nvar getProto = Object.getPrototypeOf;\n\nvar slice = arr.slice;\n\nvar concat = arr.concat;\n\nvar push = arr.push;\n\nvar indexOf = arr.indexOf;\n\nvar class2type = {};\n\nvar toString = class2type.toString;\n\nvar hasOwn = class2type.hasOwnProperty;\n\nvar fnToString = hasOwn.toString;\n\nvar ObjectFunctionString = fnToString.call( Object );\n\nvar support = {};\n\nvar isFunction = function isFunction( obj ) {\n\n // Support: Chrome <=57, Firefox <=52\n // In some browsers, typeof returns \"function\" for HTML <object> elements\n // (i.e., `typeof document.createElement( \"object\" ) === \"function\"`).\n // We don't want to classify *any* DOM node as a function.\n return typeof obj === \"function\" && typeof obj.nodeType !== \"number\";\n };\n\n\nvar isWindow = function isWindow( obj ) {\n\t\treturn obj != null && obj === obj.window;\n\t};\n\n\n\n\n\tvar preservedScriptAttributes = {\n\t\ttype: true,\n\t\tsrc: true,\n\t\tnoModule: true\n\t};\n\n\tfunction DOMEval( code, doc, node ) {\n\t\tdoc = doc || document;\n\n\t\tvar i,\n\t\t\tscript = doc.createElement( \"script\" );\n\n\t\tscript.text = code;\n\t\tif ( node ) {\n\t\t\tfor ( i in preservedScriptAttributes ) {\n\t\t\t\tif ( node[ i ] ) {\n\t\t\t\t\tscript[ i ] = node[ i ];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tdoc.head.appendChild( script ).parentNode.removeChild( script );\n\t}\n\n\nfunction toType( obj ) {\n\tif ( obj == null ) {\n\t\treturn obj + \"\";\n\t}\n\n\t// Support: Android <=2.3 only (functionish RegExp)\n\treturn typeof obj === \"object\" || typeof obj === \"function\" ?\n\t\tclass2type[ toString.call( obj ) ] || \"object\" :\n\t\ttypeof obj;\n}\n/* global Symbol */\n// Defining this global in .eslintrc.json would create a danger of using the global\n// unguarded in another place, it seems safer to define global only for this module\n\n\n\nvar\n\tversion = \"3.3.1\",\n\n\t// Define a local copy of jQuery\n\tjQuery = function( selector, context ) {\n\n\t\t// The jQuery object is actually just the init constructor 'enhanced'\n\t\t// Need init if jQuery is called (just allow error to be thrown if not included)\n\t\treturn new jQuery.fn.init( selector, context );\n\t},\n\n\t// Support: Android <=4.0 only\n\t// Make sure we trim BOM and NBSP\n\trtrim = /^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g;\n\njQuery.fn = jQuery.prototype = {\n\n\t// The current version of jQuery being used\n\tjquery: version,\n\n\tconstructor: jQuery,\n\n\t// The default length of a jQuery object is 0\n\tlength: 0,\n\n\ttoArray: function() {\n\t\treturn slice.call( this );\n\t},\n\n\t// Get the Nth element in the matched element set OR\n\t// Get the whole matched element set as a clean array\n\tget: function( num ) {\n\n\t\t// Return all the elements in a clean array\n\t\tif ( num == null ) {\n\t\t\treturn slice.call( this );\n\t\t}\n\n\t\t// Return just the one element from the set\n\t\treturn num < 0 ? this[ num + this.length ] : this[ num ];\n\t},\n\n\t// Take an array of elements and push it onto the stack\n\t// (returning the new matched element set)\n\tpushStack: function( elems ) {\n\n\t\t// Build a new jQuery matched element set\n\t\tvar ret = jQuery.merge( this.constructor(), elems );\n\n\t\t// Add the old object onto the stack (as a reference)\n\t\tret.prevObject = this;\n\n\t\t// Return the newly-formed element set\n\t\treturn ret;\n\t},\n\n\t// Execute a callback for every element in the matched set.\n\teach: function( callback ) {\n\t\treturn jQuery.each( this, callback );\n\t},\n\n\tmap: function( callback ) {\n\t\treturn this.pushStack( jQuery.map( this, function( elem, i ) {\n\t\t\treturn callback.call( elem, i, elem );\n\t\t} ) );\n\t},\n\n\tslice: function() {\n\t\treturn this.pushStack( slice.apply( this, arguments ) );\n\t},\n\n\tfirst: function() {\n\t\treturn this.eq( 0 );\n\t},\n\n\tlast: function() {\n\t\treturn this.eq( -1 );\n\t},\n\n\teq: function( i ) {\n\t\tvar len = this.length,\n\t\t\tj = +i + ( i < 0 ? len : 0 );\n\t\treturn this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] );\n\t},\n\n\tend: function() {\n\t\treturn this.prevObject || this.constructor();\n\t},\n\n\t// For internal use only.\n\t// Behaves like an Array's method, not like a jQuery method.\n\tpush: push,\n\tsort: arr.sort,\n\tsplice: arr.splice\n};\n\njQuery.extend = jQuery.fn.extend = function() {\n\tvar options, name, src, copy, copyIsArray, clone,\n\t\ttarget = arguments[ 0 ] || {},\n\t\ti = 1,\n\t\tlength = arguments.length,\n\t\tdeep = false;\n\n\t// Handle a deep copy situation\n\tif ( typeof target === \"boolean\" ) {\n\t\tdeep = target;\n\n\t\t// Skip the boolean and the target\n\t\ttarget = arguments[ i ] || {};\n\t\ti++;\n\t}\n\n\t// Handle case when target is a string or something (possible in deep copy)\n\tif ( typeof target !== \"object\" && !isFunction( target ) ) {\n\t\ttarget = {};\n\t}\n\n\t// Extend jQuery itself if only one argument is passed\n\tif ( i === length ) {\n\t\ttarget = this;\n\t\ti--;\n\t}\n\n\tfor ( ; i < length; i++ ) {\n\n\t\t// Only deal with non-null/undefined values\n\t\tif ( ( options = arguments[ i ] ) != null ) {\n\n\t\t\t// Extend the base object\n\t\t\tfor ( name in options ) {\n\t\t\t\tsrc = target[ name ];\n\t\t\t\tcopy = options[ name ];\n\n\t\t\t\t// Prevent never-ending loop\n\t\t\t\tif ( target === copy ) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// Recurse if we're merging plain objects or arrays\n\t\t\t\tif ( deep && copy && ( jQuery.isPlainObject( copy ) ||\n\t\t\t\t\t( copyIsArray = Array.isArray( copy ) ) ) ) {\n\n\t\t\t\t\tif ( copyIsArray ) {\n\t\t\t\t\t\tcopyIsArray = false;\n\t\t\t\t\t\tclone = src && Array.isArray( src ) ? src : [];\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tclone = src && jQuery.isPlainObject( src ) ? src : {};\n\t\t\t\t\t}\n\n\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\ttarget[ name ] = jQuery.extend( deep, clone, copy );\n\n\t\t\t\t// Don't bring in undefined values\n\t\t\t\t} else if ( copy !== undefined ) {\n\t\t\t\t\ttarget[ name ] = copy;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Return the modified object\n\treturn target;\n};\n\njQuery.extend( {\n\n\t// Unique for each copy of jQuery on the page\n\texpando: \"jQuery\" + ( version + Math.random() ).replace( /\\D/g, \"\" ),\n\n\t// Assume jQuery is ready without the ready module\n\tisReady: true,\n\n\terror: function( msg ) {\n\t\tthrow new Error( msg );\n\t},\n\n\tnoop: function() {},\n\n\tisPlainObject: function( obj ) {\n\t\tvar proto, Ctor;\n\n\t\t// Detect obvious negatives\n\t\t// Use toString instead of jQuery.type to catch host objects\n\t\tif ( !obj || toString.call( obj ) !== \"[object Object]\" ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tproto = getProto( obj );\n\n\t\t// Objects with no prototype (e.g., `Object.create( null )`) are plain\n\t\tif ( !proto ) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// Objects with prototype are plain iff they were constructed by a global Object function\n\t\tCtor = hasOwn.call( proto, \"constructor\" ) && proto.constructor;\n\t\treturn typeof Ctor === \"function\" && fnToString.call( Ctor ) === ObjectFunctionString;\n\t},\n\n\tisEmptyObject: function( obj ) {\n\n\t\t/* eslint-disable no-unused-vars */\n\t\t// See https://github.com/eslint/eslint/issues/6125\n\t\tvar name;\n\n\t\tfor ( name in obj ) {\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t},\n\n\t// Evaluates a script in a global context\n\tglobalEval: function( code ) {\n\t\tDOMEval( code );\n\t},\n\n\teach: function( obj, callback ) {\n\t\tvar length, i = 0;\n\n\t\tif ( isArrayLike( obj ) ) {\n\t\t\tlength = obj.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tfor ( i in obj ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn obj;\n\t},\n\n\t// Support: Android <=4.0 only\n\ttrim: function( text ) {\n\t\treturn text == null ?\n\t\t\t\"\" :\n\t\t\t( text + \"\" ).replace( rtrim, \"\" );\n\t},\n\n\t// results is for internal usage only\n\tmakeArray: function( arr, results ) {\n\t\tvar ret = results || [];\n\n\t\tif ( arr != null ) {\n\t\t\tif ( isArrayLike( Object( arr ) ) ) {\n\t\t\t\tjQuery.merge( ret,\n\t\t\t\t\ttypeof arr === \"string\" ?\n\t\t\t\t\t[ arr ] : arr\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tpush.call( ret, arr );\n\t\t\t}\n\t\t}\n\n\t\treturn ret;\n\t},\n\n\tinArray: function( elem, arr, i ) {\n\t\treturn arr == null ? -1 : indexOf.call( arr, elem, i );\n\t},\n\n\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t// push.apply(_, arraylike) throws on ancient WebKit\n\tmerge: function( first, second ) {\n\t\tvar len = +second.length,\n\t\t\tj = 0,\n\t\t\ti = first.length;\n\n\t\tfor ( ; j < len; j++ ) {\n\t\t\tfirst[ i++ ] = second[ j ];\n\t\t}\n\n\t\tfirst.length = i;\n\n\t\treturn first;\n\t},\n\n\tgrep: function( elems, callback, invert ) {\n\t\tvar callbackInverse,\n\t\t\tmatches = [],\n\t\t\ti = 0,\n\t\t\tlength = elems.length,\n\t\t\tcallbackExpect = !invert;\n\n\t\t// Go through the array, only saving the items\n\t\t// that pass the validator function\n\t\tfor ( ; i < length; i++ ) {\n\t\t\tcallbackInverse = !callback( elems[ i ], i );\n\t\t\tif ( callbackInverse !== callbackExpect ) {\n\t\t\t\tmatches.push( elems[ i ] );\n\t\t\t}\n\t\t}\n\n\t\treturn matches;\n\t},\n\n\t// arg is for internal usage only\n\tmap: function( elems, callback, arg ) {\n\t\tvar length, value,\n\t\t\ti = 0,\n\t\t\tret = [];\n\n\t\t// Go through the array, translating each of the items to their new values\n\t\tif ( isArrayLike( elems ) ) {\n\t\t\tlength = elems.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Go through every key on the object,\n\t\t} else {\n\t\t\tfor ( i in elems ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Flatten any nested arrays\n\t\treturn concat.apply( [], ret );\n\t},\n\n\t// A global GUID counter for objects\n\tguid: 1,\n\n\t// jQuery.support is not used in Core but other projects attach their\n\t// properties to it so it needs to exist.\n\tsupport: support\n} );\n\nif ( typeof Symbol === \"function\" ) {\n\tjQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ];\n}\n\n// Populate the class2type map\njQuery.each( \"Boolean Number String Function Array Date RegExp Object Error Symbol\".split( \" \" ),\nfunction( i, name ) {\n\tclass2type[ \"[object \" + name + \"]\" ] = name.toLowerCase();\n} );\n\nfunction isArrayLike( obj ) {\n\n\t// Support: real iOS 8.2 only (not reproducible in simulator)\n\t// `in` check used to prevent JIT error (gh-2145)\n\t// hasOwn isn't used here due to false negatives\n\t// regarding Nodelist length in IE\n\tvar length = !!obj && \"length\" in obj && obj.length,\n\t\ttype = toType( obj );\n\n\tif ( isFunction( obj ) || isWindow( obj ) ) {\n\t\treturn false;\n\t}\n\n\treturn type === \"array\" || length === 0 ||\n\t\ttypeof length === \"number\" && length > 0 && ( length - 1 ) in obj;\n}\nvar Sizzle =\n/*!\n * Sizzle CSS Selector Engine v2.3.3\n * https://sizzlejs.com/\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license\n * http://jquery.org/license\n *\n * Date: 2016-08-08\n */\n(function( window ) {\n\nvar i,\n\tsupport,\n\tExpr,\n\tgetText,\n\tisXML,\n\ttokenize,\n\tcompile,\n\tselect,\n\toutermostContext,\n\tsortInput,\n\thasDuplicate,\n\n\t// Local document vars\n\tsetDocument,\n\tdocument,\n\tdocElem,\n\tdocumentIsHTML,\n\trbuggyQSA,\n\trbuggyMatches,\n\tmatches,\n\tcontains,\n\n\t// Instance-specific data\n\texpando = \"sizzle\" + 1 * new Date(),\n\tpreferredDoc = window.document,\n\tdirruns = 0,\n\tdone = 0,\n\tclassCache = createCache(),\n\ttokenCache = createCache(),\n\tcompilerCache = createCache(),\n\tsortOrder = function( a, b ) {\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t}\n\t\treturn 0;\n\t},\n\n\t// Instance methods\n\thasOwn = ({}).hasOwnProperty,\n\tarr = [],\n\tpop = arr.pop,\n\tpush_native = arr.push,\n\tpush = arr.push,\n\tslice = arr.slice,\n\t// Use a stripped-down indexOf as it's faster than native\n\t// https://jsperf.com/thor-indexof-vs-for/5\n\tindexOf = function( list, elem ) {\n\t\tvar i = 0,\n\t\t\tlen = list.length;\n\t\tfor ( ; i < len; i++ ) {\n\t\t\tif ( list[i] === elem ) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t},\n\n\tbooleans = \"checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped\",\n\n\t// Regular expressions\n\n\t// http://www.w3.org/TR/css3-selectors/#whitespace\n\twhitespace = \"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\",\n\n\t// http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier\n\tidentifier = \"(?:\\\\\\\\.|[\\\\w-]|[^\\0-\\\\xa0])+\",\n\n\t// Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors\n\tattributes = \"\\\\[\" + whitespace + \"*(\" + identifier + \")(?:\" + whitespace +\n\t\t// Operator (capture 2)\n\t\t\"*([*^$|!~]?=)\" + whitespace +\n\t\t// \"Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]\"\n\t\t\"*(?:'((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\"|(\" + identifier + \"))|)\" + whitespace +\n\t\t\"*\\\\]\",\n\n\tpseudos = \":(\" + identifier + \")(?:\\\\((\" +\n\t\t// To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:\n\t\t// 1. quoted (capture 3; capture 4 or capture 5)\n\t\t\"('((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\")|\" +\n\t\t// 2. simple (capture 6)\n\t\t\"((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\" + attributes + \")*)|\" +\n\t\t// 3. anything else (capture 2)\n\t\t\".*\" +\n\t\t\")\\\\)|)\",\n\n\t// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter\n\trwhitespace = new RegExp( whitespace + \"+\", \"g\" ),\n\trtrim = new RegExp( \"^\" + whitespace + \"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\" + whitespace + \"+$\", \"g\" ),\n\n\trcomma = new RegExp( \"^\" + whitespace + \"*,\" + whitespace + \"*\" ),\n\trcombinators = new RegExp( \"^\" + whitespace + \"*([>+~]|\" + whitespace + \")\" + whitespace + \"*\" ),\n\n\trattributeQuotes = new RegExp( \"=\" + whitespace + \"*([^\\\\]'\\\"]*?)\" + whitespace + \"*\\\\]\", \"g\" ),\n\n\trpseudo = new RegExp( pseudos ),\n\tridentifier = new RegExp( \"^\" + identifier + \"$\" ),\n\n\tmatchExpr = {\n\t\t\"ID\": new RegExp( \"^#(\" + identifier + \")\" ),\n\t\t\"CLASS\": new RegExp( \"^\\\\.(\" + identifier + \")\" ),\n\t\t\"TAG\": new RegExp( \"^(\" + identifier + \"|[*])\" ),\n\t\t\"ATTR\": new RegExp( \"^\" + attributes ),\n\t\t\"PSEUDO\": new RegExp( \"^\" + pseudos ),\n\t\t\"CHILD\": new RegExp( \"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\" + whitespace +\n\t\t\t\"*(even|odd|(([+-]|)(\\\\d*)n|)\" + whitespace + \"*(?:([+-]|)\" + whitespace +\n\t\t\t\"*(\\\\d+)|))\" + whitespace + \"*\\\\)|)\", \"i\" ),\n\t\t\"bool\": new RegExp( \"^(?:\" + booleans + \")$\", \"i\" ),\n\t\t// For use in libraries implementing .is()\n\t\t// We use this for POS matching in `select`\n\t\t\"needsContext\": new RegExp( \"^\" + whitespace + \"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\" +\n\t\t\twhitespace + \"*((?:-\\\\d)?\\\\d*)\" + whitespace + \"*\\\\)|)(?=[^-]|$)\", \"i\" )\n\t},\n\n\trinputs = /^(?:input|select|textarea|button)$/i,\n\trheader = /^h\\d$/i,\n\n\trnative = /^[^{]+\\{\\s*\\[native \\w/,\n\n\t// Easily-parseable/retrievable ID or TAG or CLASS selectors\n\trquickExpr = /^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,\n\n\trsibling = /[+~]/,\n\n\t// CSS escapes\n\t// http://www.w3.org/TR/CSS21/syndata.html#escaped-characters\n\trunescape = new RegExp( \"\\\\\\\\([\\\\da-f]{1,6}\" + whitespace + \"?|(\" + whitespace + \")|.)\", \"ig\" ),\n\tfunescape = function( _, escaped, escapedWhitespace ) {\n\t\tvar high = \"0x\" + escaped - 0x10000;\n\t\t// NaN means non-codepoint\n\t\t// Support: Firefox<24\n\t\t// Workaround erroneous numeric interpretation of +\"0x\"\n\t\treturn high !== high || escapedWhitespace ?\n\t\t\tescaped :\n\t\t\thigh < 0 ?\n\t\t\t\t// BMP codepoint\n\t\t\t\tString.fromCharCode( high + 0x10000 ) :\n\t\t\t\t// Supplemental Plane codepoint (surrogate pair)\n\t\t\t\tString.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );\n\t},\n\n\t// CSS string/identifier serialization\n\t// https://drafts.csswg.org/cssom/#common-serializing-idioms\n\trcssescape = /([\\0-\\x1f\\x7f]|^-?\\d)|^-$|[^\\0-\\x1f\\x7f-\\uFFFF\\w-]/g,\n\tfcssescape = function( ch, asCodePoint ) {\n\t\tif ( asCodePoint ) {\n\n\t\t\t// U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER\n\t\t\tif ( ch === \"\\0\" ) {\n\t\t\t\treturn \"\\uFFFD\";\n\t\t\t}\n\n\t\t\t// Control characters and (dependent upon position) numbers get escaped as code points\n\t\t\treturn ch.slice( 0, -1 ) + \"\\\\\" + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + \" \";\n\t\t}\n\n\t\t// Other potentially-special ASCII characters get backslash-escaped\n\t\treturn \"\\\\\" + ch;\n\t},\n\n\t// Used for iframes\n\t// See setDocument()\n\t// Removing the function wrapper causes a \"Permission Denied\"\n\t// error in IE\n\tunloadHandler = function() {\n\t\tsetDocument();\n\t},\n\n\tdisabledAncestor = addCombinator(\n\t\tfunction( elem ) {\n\t\t\treturn elem.disabled === true && (\"form\" in elem || \"label\" in elem);\n\t\t},\n\t\t{ dir: \"parentNode\", next: \"legend\" }\n\t);\n\n// Optimize for push.apply( _, NodeList )\ntry {\n\tpush.apply(\n\t\t(arr = slice.call( preferredDoc.childNodes )),\n\t\tpreferredDoc.childNodes\n\t);\n\t// Support: Android<4.0\n\t// Detect silently failing push.apply\n\tarr[ preferredDoc.childNodes.length ].nodeType;\n} catch ( e ) {\n\tpush = { apply: arr.length ?\n\n\t\t// Leverage slice if possible\n\t\tfunction( target, els ) {\n\t\t\tpush_native.apply( target, slice.call(els) );\n\t\t} :\n\n\t\t// Support: IE<9\n\t\t// Otherwise append directly\n\t\tfunction( target, els ) {\n\t\t\tvar j = target.length,\n\t\t\t\ti = 0;\n\t\t\t// Can't trust NodeList.length\n\t\t\twhile ( (target[j++] = els[i++]) ) {}\n\t\t\ttarget.length = j - 1;\n\t\t}\n\t};\n}\n\nfunction Sizzle( selector, context, results, seed ) {\n\tvar m, i, elem, nid, match, groups, newSelector,\n\t\tnewContext = context && context.ownerDocument,\n\n\t\t// nodeType defaults to 9, since context defaults to document\n\t\tnodeType = context ? context.nodeType : 9;\n\n\tresults = results || [];\n\n\t// Return early from calls with invalid selector or context\n\tif ( typeof selector !== \"string\" || !selector ||\n\t\tnodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) {\n\n\t\treturn results;\n\t}\n\n\t// Try to shortcut find operations (as opposed to filters) in HTML documents\n\tif ( !seed ) {\n\n\t\tif ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) {\n\t\t\tsetDocument( context );\n\t\t}\n\t\tcontext = context || document;\n\n\t\tif ( documentIsHTML ) {\n\n\t\t\t// If the selector is sufficiently simple, try using a \"get*By*\" DOM method\n\t\t\t// (excepting DocumentFragment context, where the methods don't exist)\n\t\t\tif ( nodeType !== 11 && (match = rquickExpr.exec( selector )) ) {\n\n\t\t\t\t// ID selector\n\t\t\t\tif ( (m = match[1]) ) {\n\n\t\t\t\t\t// Document context\n\t\t\t\t\tif ( nodeType === 9 ) {\n\t\t\t\t\t\tif ( (elem = context.getElementById( m )) ) {\n\n\t\t\t\t\t\t\t// Support: IE, Opera, Webkit\n\t\t\t\t\t\t\t// TODO: identify versions\n\t\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\t\tif ( elem.id === m ) {\n\t\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t// Element context\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// Support: IE, Opera, Webkit\n\t\t\t\t\t\t// TODO: identify versions\n\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\tif ( newContext && (elem = newContext.getElementById( m )) &&\n\t\t\t\t\t\t\tcontains( context, elem ) &&\n\t\t\t\t\t\t\telem.id === m ) {\n\n\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t// Type selector\n\t\t\t\t} else if ( match[2] ) {\n\t\t\t\t\tpush.apply( results, context.getElementsByTagName( selector ) );\n\t\t\t\t\treturn results;\n\n\t\t\t\t// Class selector\n\t\t\t\t} else if ( (m = match[3]) && support.getElementsByClassName &&\n\t\t\t\t\tcontext.getElementsByClassName ) {\n\n\t\t\t\t\tpush.apply( results, context.getElementsByClassName( m ) );\n\t\t\t\t\treturn results;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Take advantage of querySelectorAll\n\t\t\tif ( support.qsa &&\n\t\t\t\t!compilerCache[ selector + \" \" ] &&\n\t\t\t\t(!rbuggyQSA || !rbuggyQSA.test( selector )) ) {\n\n\t\t\t\tif ( nodeType !== 1 ) {\n\t\t\t\t\tnewContext = context;\n\t\t\t\t\tnewSelector = selector;\n\n\t\t\t\t// qSA looks outside Element context, which is not what we want\n\t\t\t\t// Thanks to Andrew Dupont for this workaround technique\n\t\t\t\t// Support: IE <=8\n\t\t\t\t// Exclude object elements\n\t\t\t\t} else if ( context.nodeName.toLowerCase() !== \"object\" ) {\n\n\t\t\t\t\t// Capture the context ID, setting it first if necessary\n\t\t\t\t\tif ( (nid = context.getAttribute( \"id\" )) ) {\n\t\t\t\t\t\tnid = nid.replace( rcssescape, fcssescape );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcontext.setAttribute( \"id\", (nid = expando) );\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prefix every selector in the list\n\t\t\t\t\tgroups = tokenize( selector );\n\t\t\t\t\ti = groups.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tgroups[i] = \"#\" + nid + \" \" + toSelector( groups[i] );\n\t\t\t\t\t}\n\t\t\t\t\tnewSelector = groups.join( \",\" );\n\n\t\t\t\t\t// Expand context for sibling selectors\n\t\t\t\t\tnewContext = rsibling.test( selector ) && testContext( context.parentNode ) ||\n\t\t\t\t\t\tcontext;\n\t\t\t\t}\n\n\t\t\t\tif ( newSelector ) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tpush.apply( results,\n\t\t\t\t\t\t\tnewContext.querySelectorAll( newSelector )\n\t\t\t\t\t\t);\n\t\t\t\t\t\treturn results;\n\t\t\t\t\t} catch ( qsaError ) {\n\t\t\t\t\t} finally {\n\t\t\t\t\t\tif ( nid === expando ) {\n\t\t\t\t\t\t\tcontext.removeAttribute( \"id\" );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// All others\n\treturn select( selector.replace( rtrim, \"$1\" ), context, results, seed );\n}\n\n/**\n * Create key-value caches of limited size\n * @returns {function(string, object)} Returns the Object data after storing it on itself with\n *\tproperty name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)\n *\tdeleting the oldest entry\n */\nfunction createCache() {\n\tvar keys = [];\n\n\tfunction cache( key, value ) {\n\t\t// Use (key + \" \") to avoid collision with native prototype properties (see Issue #157)\n\t\tif ( keys.push( key + \" \" ) > Expr.cacheLength ) {\n\t\t\t// Only keep the most recent entries\n\t\t\tdelete cache[ keys.shift() ];\n\t\t}\n\t\treturn (cache[ key + \" \" ] = value);\n\t}\n\treturn cache;\n}\n\n/**\n * Mark a function for special use by Sizzle\n * @param {Function} fn The function to mark\n */\nfunction markFunction( fn ) {\n\tfn[ expando ] = true;\n\treturn fn;\n}\n\n/**\n * Support testing using an element\n * @param {Function} fn Passed the created element and returns a boolean result\n */\nfunction assert( fn ) {\n\tvar el = document.createElement(\"fieldset\");\n\n\ttry {\n\t\treturn !!fn( el );\n\t} catch (e) {\n\t\treturn false;\n\t} finally {\n\t\t// Remove from its parent by default\n\t\tif ( el.parentNode ) {\n\t\t\tel.parentNode.removeChild( el );\n\t\t}\n\t\t// release memory in IE\n\t\tel = null;\n\t}\n}\n\n/**\n * Adds the same handler for all of the specified attrs\n * @param {String} attrs Pipe-separated list of attributes\n * @param {Function} handler The method that will be applied\n */\nfunction addHandle( attrs, handler ) {\n\tvar arr = attrs.split(\"|\"),\n\t\ti = arr.length;\n\n\twhile ( i-- ) {\n\t\tExpr.attrHandle[ arr[i] ] = handler;\n\t}\n}\n\n/**\n * Checks document order of two siblings\n * @param {Element} a\n * @param {Element} b\n * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b\n */\nfunction siblingCheck( a, b ) {\n\tvar cur = b && a,\n\t\tdiff = cur && a.nodeType === 1 && b.nodeType === 1 &&\n\t\t\ta.sourceIndex - b.sourceIndex;\n\n\t// Use IE sourceIndex if available on both nodes\n\tif ( diff ) {\n\t\treturn diff;\n\t}\n\n\t// Check if b follows a\n\tif ( cur ) {\n\t\twhile ( (cur = cur.nextSibling) ) {\n\t\t\tif ( cur === b ) {\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn a ? 1 : -1;\n}\n\n/**\n * Returns a function to use in pseudos for input types\n * @param {String} type\n */\nfunction createInputPseudo( type ) {\n\treturn function( elem ) {\n\t\tvar name = elem.nodeName.toLowerCase();\n\t\treturn name === \"input\" && elem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for buttons\n * @param {String} type\n */\nfunction createButtonPseudo( type ) {\n\treturn function( elem ) {\n\t\tvar name = elem.nodeName.toLowerCase();\n\t\treturn (name === \"input\" || name === \"button\") && elem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for :enabled/:disabled\n * @param {Boolean} disabled true for :disabled; false for :enabled\n */\nfunction createDisabledPseudo( disabled ) {\n\n\t// Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable\n\treturn function( elem ) {\n\n\t\t// Only certain elements can match :enabled or :disabled\n\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled\n\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled\n\t\tif ( \"form\" in elem ) {\n\n\t\t\t// Check for inherited disabledness on relevant non-disabled elements:\n\t\t\t// * listed form-associated elements in a disabled fieldset\n\t\t\t// https://html.spec.whatwg.org/multipage/forms.html#category-listed\n\t\t\t// https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled\n\t\t\t// * option elements in a disabled optgroup\n\t\t\t// https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled\n\t\t\t// All such elements have a \"form\" property.\n\t\t\tif ( elem.parentNode && elem.disabled === false ) {\n\n\t\t\t\t// Option elements defer to a parent optgroup if present\n\t\t\t\tif ( \"label\" in elem ) {\n\t\t\t\t\tif ( \"label\" in elem.parentNode ) {\n\t\t\t\t\t\treturn elem.parentNode.disabled === disabled;\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn elem.disabled === disabled;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Support: IE 6 - 11\n\t\t\t\t// Use the isDisabled shortcut property to check for disabled fieldset ancestors\n\t\t\t\treturn elem.isDisabled === disabled ||\n\n\t\t\t\t\t// Where there is no isDisabled, check manually\n\t\t\t\t\t/* jshint -W018 */\n\t\t\t\t\telem.isDisabled !== !disabled &&\n\t\t\t\t\t\tdisabledAncestor( elem ) === disabled;\n\t\t\t}\n\n\t\t\treturn elem.disabled === disabled;\n\n\t\t// Try to winnow out elements that can't be disabled before trusting the disabled property.\n\t\t// Some victims get caught in our net (label, legend, menu, track), but it shouldn't\n\t\t// even exist on them, let alone have a boolean value.\n\t\t} else if ( \"label\" in elem ) {\n\t\t\treturn elem.disabled === disabled;\n\t\t}\n\n\t\t// Remaining elements are neither :enabled nor :disabled\n\t\treturn false;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for positionals\n * @param {Function} fn\n */\nfunction createPositionalPseudo( fn ) {\n\treturn markFunction(function( argument ) {\n\t\targument = +argument;\n\t\treturn markFunction(function( seed, matches ) {\n\t\t\tvar j,\n\t\t\t\tmatchIndexes = fn( [], seed.length, argument ),\n\t\t\t\ti = matchIndexes.length;\n\n\t\t\t// Match elements found at the specified indexes\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( seed[ (j = matchIndexes[i]) ] ) {\n\t\t\t\t\tseed[j] = !(matches[j] = seed[j]);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t});\n}\n\n/**\n * Checks a node for validity as a Sizzle context\n * @param {Element|Object=} context\n * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value\n */\nfunction testContext( context ) {\n\treturn context && typeof context.getElementsByTagName !== \"undefined\" && context;\n}\n\n// Expose support vars for convenience\nsupport = Sizzle.support = {};\n\n/**\n * Detects XML nodes\n * @param {Element|Object} elem An element or a document\n * @returns {Boolean} True iff elem is a non-HTML XML node\n */\nisXML = Sizzle.isXML = function( elem ) {\n\t// documentElement is verified for cases where it doesn't yet exist\n\t// (such as loading iframes in IE - #4833)\n\tvar documentElement = elem && (elem.ownerDocument || elem).documentElement;\n\treturn documentElement ? documentElement.nodeName !== \"HTML\" : false;\n};\n\n/**\n * Sets document-related variables once based on the current document\n * @param {Element|Object} [doc] An element or document object to use to set the document\n * @returns {Object} Returns the current document\n */\nsetDocument = Sizzle.setDocument = function( node ) {\n\tvar hasCompare, subWindow,\n\t\tdoc = node ? node.ownerDocument || node : preferredDoc;\n\n\t// Return early if doc is invalid or already selected\n\tif ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) {\n\t\treturn document;\n\t}\n\n\t// Update global variables\n\tdocument = doc;\n\tdocElem = document.documentElement;\n\tdocumentIsHTML = !isXML( document );\n\n\t// Support: IE 9-11, Edge\n\t// Accessing iframe documents after unload throws \"permission denied\" errors (jQuery #13936)\n\tif ( preferredDoc !== document &&\n\t\t(subWindow = document.defaultView) && subWindow.top !== subWindow ) {\n\n\t\t// Support: IE 11, Edge\n\t\tif ( subWindow.addEventListener ) {\n\t\t\tsubWindow.addEventListener( \"unload\", unloadHandler, false );\n\n\t\t// Support: IE 9 - 10 only\n\t\t} else if ( subWindow.attachEvent ) {\n\t\t\tsubWindow.attachEvent( \"onunload\", unloadHandler );\n\t\t}\n\t}\n\n\t/* Attributes\n\t---------------------------------------------------------------------- */\n\n\t// Support: IE<8\n\t// Verify that getAttribute really returns attributes and not properties\n\t// (excepting IE8 booleans)\n\tsupport.attributes = assert(function( el ) {\n\t\tel.className = \"i\";\n\t\treturn !el.getAttribute(\"className\");\n\t});\n\n\t/* getElement(s)By*\n\t---------------------------------------------------------------------- */\n\n\t// Check if getElementsByTagName(\"*\") returns only elements\n\tsupport.getElementsByTagName = assert(function( el ) {\n\t\tel.appendChild( document.createComment(\"\") );\n\t\treturn !el.getElementsByTagName(\"*\").length;\n\t});\n\n\t// Support: IE<9\n\tsupport.getElementsByClassName = rnative.test( document.getElementsByClassName );\n\n\t// Support: IE<10\n\t// Check if getElementById returns elements by name\n\t// The broken getElementById methods don't pick up programmatically-set names,\n\t// so use a roundabout getElementsByName test\n\tsupport.getById = assert(function( el ) {\n\t\tdocElem.appendChild( el ).id = expando;\n\t\treturn !document.getElementsByName || !document.getElementsByName( expando ).length;\n\t});\n\n\t// ID filter and find\n\tif ( support.getById ) {\n\t\tExpr.filter[\"ID\"] = function( id ) {\n\t\t\tvar attrId = id.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn elem.getAttribute(\"id\") === attrId;\n\t\t\t};\n\t\t};\n\t\tExpr.find[\"ID\"] = function( id, context ) {\n\t\t\tif ( typeof context.getElementById !== \"undefined\" && documentIsHTML ) {\n\t\t\t\tvar elem = context.getElementById( id );\n\t\t\t\treturn elem ? [ elem ] : [];\n\t\t\t}\n\t\t};\n\t} else {\n\t\tExpr.filter[\"ID\"] = function( id ) {\n\t\t\tvar attrId = id.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\tvar node = typeof elem.getAttributeNode !== \"undefined\" &&\n\t\t\t\t\telem.getAttributeNode(\"id\");\n\t\t\t\treturn node && node.value === attrId;\n\t\t\t};\n\t\t};\n\n\t\t// Support: IE 6 - 7 only\n\t\t// getElementById is not reliable as a find shortcut\n\t\tExpr.find[\"ID\"] = function( id, context ) {\n\t\t\tif ( typeof context.getElementById !== \"undefined\" && documentIsHTML ) {\n\t\t\t\tvar node, i, elems,\n\t\t\t\t\telem = context.getElementById( id );\n\n\t\t\t\tif ( elem ) {\n\n\t\t\t\t\t// Verify the id attribute\n\t\t\t\t\tnode = elem.getAttributeNode(\"id\");\n\t\t\t\t\tif ( node && node.value === id ) {\n\t\t\t\t\t\treturn [ elem ];\n\t\t\t\t\t}\n\n\t\t\t\t\t// Fall back on getElementsByName\n\t\t\t\t\telems = context.getElementsByName( id );\n\t\t\t\t\ti = 0;\n\t\t\t\t\twhile ( (elem = elems[i++]) ) {\n\t\t\t\t\t\tnode = elem.getAttributeNode(\"id\");\n\t\t\t\t\t\tif ( node && node.value === id ) {\n\t\t\t\t\t\t\treturn [ elem ];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn [];\n\t\t\t}\n\t\t};\n\t}\n\n\t// Tag\n\tExpr.find[\"TAG\"] = support.getElementsByTagName ?\n\t\tfunction( tag, context ) {\n\t\t\tif ( typeof context.getElementsByTagName !== \"undefined\" ) {\n\t\t\t\treturn context.getElementsByTagName( tag );\n\n\t\t\t// DocumentFragment nodes don't have gEBTN\n\t\t\t} else if ( support.qsa ) {\n\t\t\t\treturn context.querySelectorAll( tag );\n\t\t\t}\n\t\t} :\n\n\t\tfunction( tag, context ) {\n\t\t\tvar elem,\n\t\t\t\ttmp = [],\n\t\t\t\ti = 0,\n\t\t\t\t// By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too\n\t\t\t\tresults = context.getElementsByTagName( tag );\n\n\t\t\t// Filter out possible comments\n\t\t\tif ( tag === \"*\" ) {\n\t\t\t\twhile ( (elem = results[i++]) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\ttmp.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn tmp;\n\t\t\t}\n\t\t\treturn results;\n\t\t};\n\n\t// Class\n\tExpr.find[\"CLASS\"] = support.getElementsByClassName && function( className, context ) {\n\t\tif ( typeof context.getElementsByClassName !== \"undefined\" && documentIsHTML ) {\n\t\t\treturn context.getElementsByClassName( className );\n\t\t}\n\t};\n\n\t/* QSA/matchesSelector\n\t---------------------------------------------------------------------- */\n\n\t// QSA and matchesSelector support\n\n\t// matchesSelector(:active) reports false when true (IE9/Opera 11.5)\n\trbuggyMatches = [];\n\n\t// qSa(:focus) reports false when true (Chrome 21)\n\t// We allow this because of a bug in IE8/9 that throws an error\n\t// whenever `document.activeElement` is accessed on an iframe\n\t// So, we allow :focus to pass through QSA all the time to avoid the IE error\n\t// See https://bugs.jquery.com/ticket/13378\n\trbuggyQSA = [];\n\n\tif ( (support.qsa = rnative.test( document.querySelectorAll )) ) {\n\t\t// Build QSA regex\n\t\t// Regex strategy adopted from Diego Perini\n\t\tassert(function( el ) {\n\t\t\t// Select is set to empty string on purpose\n\t\t\t// This is to test IE's treatment of not explicitly\n\t\t\t// setting a boolean content attribute,\n\t\t\t// since its presence should be enough\n\t\t\t// https://bugs.jquery.com/ticket/12359\n\t\t\tdocElem.appendChild( el ).innerHTML = \"<a id='\" + expando + \"'></a>\" +\n\t\t\t\t\"<select id='\" + expando + \"-\\r\\\\' msallowcapture=''>\" +\n\t\t\t\t\"<option selected=''></option></select>\";\n\n\t\t\t// Support: IE8, Opera 11-12.16\n\t\t\t// Nothing should be selected when empty strings follow ^= or $= or *=\n\t\t\t// The test attribute must be unknown in Opera but \"safe\" for WinRT\n\t\t\t// https://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section\n\t\t\tif ( el.querySelectorAll(\"[msallowcapture^='']\").length ) {\n\t\t\t\trbuggyQSA.push( \"[*^$]=\" + whitespace + \"*(?:''|\\\"\\\")\" );\n\t\t\t}\n\n\t\t\t// Support: IE8\n\t\t\t// Boolean attributes and \"value\" are not treated correctly\n\t\t\tif ( !el.querySelectorAll(\"[selected]\").length ) {\n\t\t\t\trbuggyQSA.push( \"\\\\[\" + whitespace + \"*(?:value|\" + booleans + \")\" );\n\t\t\t}\n\n\t\t\t// Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+\n\t\t\tif ( !el.querySelectorAll( \"[id~=\" + expando + \"-]\" ).length ) {\n\t\t\t\trbuggyQSA.push(\"~=\");\n\t\t\t}\n\n\t\t\t// Webkit/Opera - :checked should return selected option elements\n\t\t\t// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\t// IE8 throws error here and will not see later tests\n\t\t\tif ( !el.querySelectorAll(\":checked\").length ) {\n\t\t\t\trbuggyQSA.push(\":checked\");\n\t\t\t}\n\n\t\t\t// Support: Safari 8+, iOS 8+\n\t\t\t// https://bugs.webkit.org/show_bug.cgi?id=136851\n\t\t\t// In-page `selector#id sibling-combinator selector` fails\n\t\t\tif ( !el.querySelectorAll( \"a#\" + expando + \"+*\" ).length ) {\n\t\t\t\trbuggyQSA.push(\".#.+[+~]\");\n\t\t\t}\n\t\t});\n\n\t\tassert(function( el ) {\n\t\t\tel.innerHTML = \"<a href='' disabled='disabled'></a>\" +\n\t\t\t\t\"<select disabled='disabled'><option/></select>\";\n\n\t\t\t// Support: Windows 8 Native Apps\n\t\t\t// The type and name attributes are restricted during .innerHTML assignment\n\t\t\tvar input = document.createElement(\"input\");\n\t\t\tinput.setAttribute( \"type\", \"hidden\" );\n\t\t\tel.appendChild( input ).setAttribute( \"name\", \"D\" );\n\n\t\t\t// Support: IE8\n\t\t\t// Enforce case-sensitivity of name attribute\n\t\t\tif ( el.querySelectorAll(\"[name=d]\").length ) {\n\t\t\t\trbuggyQSA.push( \"name\" + whitespace + \"*[*^$|!~]?=\" );\n\t\t\t}\n\n\t\t\t// FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)\n\t\t\t// IE8 throws error here and will not see later tests\n\t\t\tif ( el.querySelectorAll(\":enabled\").length !== 2 ) {\n\t\t\t\trbuggyQSA.push( \":enabled\", \":disabled\" );\n\t\t\t}\n\n\t\t\t// Support: IE9-11+\n\t\t\t// IE's :disabled selector does not pick up the children of disabled fieldsets\n\t\t\tdocElem.appendChild( el ).disabled = true;\n\t\t\tif ( el.querySelectorAll(\":disabled\").length !== 2 ) {\n\t\t\t\trbuggyQSA.push( \":enabled\", \":disabled\" );\n\t\t\t}\n\n\t\t\t// Opera 10-11 does not throw on post-comma invalid pseudos\n\t\t\tel.querySelectorAll(\"*,:x\");\n\t\t\trbuggyQSA.push(\",.*:\");\n\t\t});\n\t}\n\n\tif ( (support.matchesSelector = rnative.test( (matches = docElem.matches ||\n\t\tdocElem.webkitMatchesSelector ||\n\t\tdocElem.mozMatchesSelector ||\n\t\tdocElem.oMatchesSelector ||\n\t\tdocElem.msMatchesSelector) )) ) {\n\n\t\tassert(function( el ) {\n\t\t\t// Check to see if it's possible to do matchesSelector\n\t\t\t// on a disconnected node (IE 9)\n\t\t\tsupport.disconnectedMatch = matches.call( el, \"*\" );\n\n\t\t\t// This should fail with an exception\n\t\t\t// Gecko does not error, returns false instead\n\t\t\tmatches.call( el, \"[s!='']:x\" );\n\t\t\trbuggyMatches.push( \"!=\", pseudos );\n\t\t});\n\t}\n\n\trbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join(\"|\") );\n\trbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join(\"|\") );\n\n\t/* Contains\n\t---------------------------------------------------------------------- */\n\thasCompare = rnative.test( docElem.compareDocumentPosition );\n\n\t// Element contains another\n\t// Purposefully self-exclusive\n\t// As in, an element does not contain itself\n\tcontains = hasCompare || rnative.test( docElem.contains ) ?\n\t\tfunction( a, b ) {\n\t\t\tvar adown = a.nodeType === 9 ? a.documentElement : a,\n\t\t\t\tbup = b && b.parentNode;\n\t\t\treturn a === bup || !!( bup && bup.nodeType === 1 && (\n\t\t\t\tadown.contains ?\n\t\t\t\t\tadown.contains( bup ) :\n\t\t\t\t\ta.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16\n\t\t\t));\n\t\t} :\n\t\tfunction( a, b ) {\n\t\t\tif ( b ) {\n\t\t\t\twhile ( (b = b.parentNode) ) {\n\t\t\t\t\tif ( b === a ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n\n\t/* Sorting\n\t---------------------------------------------------------------------- */\n\n\t// Document order sorting\n\tsortOrder = hasCompare ?\n\tfunction( a, b ) {\n\n\t\t// Flag for duplicate removal\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t\treturn 0;\n\t\t}\n\n\t\t// Sort on method existence if only one input has compareDocumentPosition\n\t\tvar compare = !a.compareDocumentPosition - !b.compareDocumentPosition;\n\t\tif ( compare ) {\n\t\t\treturn compare;\n\t\t}\n\n\t\t// Calculate position if both inputs belong to the same document\n\t\tcompare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ?\n\t\t\ta.compareDocumentPosition( b ) :\n\n\t\t\t// Otherwise we know they are disconnected\n\t\t\t1;\n\n\t\t// Disconnected nodes\n\t\tif ( compare & 1 ||\n\t\t\t(!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) {\n\n\t\t\t// Choose the first element that is related to our preferred document\n\t\t\tif ( a === document || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) {\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t\tif ( b === document || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) {\n\t\t\t\treturn 1;\n\t\t\t}\n\n\t\t\t// Maintain original order\n\t\t\treturn sortInput ?\n\t\t\t\t( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :\n\t\t\t\t0;\n\t\t}\n\n\t\treturn compare & 4 ? -1 : 1;\n\t} :\n\tfunction( a, b ) {\n\t\t// Exit early if the nodes are identical\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t\treturn 0;\n\t\t}\n\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\taup = a.parentNode,\n\t\t\tbup = b.parentNode,\n\t\t\tap = [ a ],\n\t\t\tbp = [ b ];\n\n\t\t// Parentless nodes are either documents or disconnected\n\t\tif ( !aup || !bup ) {\n\t\t\treturn a === document ? -1 :\n\t\t\t\tb === document ? 1 :\n\t\t\t\taup ? -1 :\n\t\t\t\tbup ? 1 :\n\t\t\t\tsortInput ?\n\t\t\t\t( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :\n\t\t\t\t0;\n\n\t\t// If the nodes are siblings, we can do a quick check\n\t\t} else if ( aup === bup ) {\n\t\t\treturn siblingCheck( a, b );\n\t\t}\n\n\t\t// Otherwise we need full lists of their ancestors for comparison\n\t\tcur = a;\n\t\twhile ( (cur = cur.parentNode) ) {\n\t\t\tap.unshift( cur );\n\t\t}\n\t\tcur = b;\n\t\twhile ( (cur = cur.parentNode) ) {\n\t\t\tbp.unshift( cur );\n\t\t}\n\n\t\t// Walk down the tree looking for a discrepancy\n\t\twhile ( ap[i] === bp[i] ) {\n\t\t\ti++;\n\t\t}\n\n\t\treturn i ?\n\t\t\t// Do a sibling check if the nodes have a common ancestor\n\t\t\tsiblingCheck( ap[i], bp[i] ) :\n\n\t\t\t// Otherwise nodes in our document sort first\n\t\t\tap[i] === preferredDoc ? -1 :\n\t\t\tbp[i] === preferredDoc ? 1 :\n\t\t\t0;\n\t};\n\n\treturn document;\n};\n\nSizzle.matches = function( expr, elements ) {\n\treturn Sizzle( expr, null, null, elements );\n};\n\nSizzle.matchesSelector = function( elem, expr ) {\n\t// Set document vars if needed\n\tif ( ( elem.ownerDocument || elem ) !== document ) {\n\t\tsetDocument( elem );\n\t}\n\n\t// Make sure that attribute selectors are quoted\n\texpr = expr.replace( rattributeQuotes, \"='$1']\" );\n\n\tif ( support.matchesSelector && documentIsHTML &&\n\t\t!compilerCache[ expr + \" \" ] &&\n\t\t( !rbuggyMatches || !rbuggyMatches.test( expr ) ) &&\n\t\t( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) {\n\n\t\ttry {\n\t\t\tvar ret = matches.call( elem, expr );\n\n\t\t\t// IE 9's matchesSelector returns false on disconnected nodes\n\t\t\tif ( ret || support.disconnectedMatch ||\n\t\t\t\t\t// As well, disconnected nodes are said to be in a document\n\t\t\t\t\t// fragment in IE 9\n\t\t\t\t\telem.document && elem.document.nodeType !== 11 ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\t\t} catch (e) {}\n\t}\n\n\treturn Sizzle( expr, document, null, [ elem ] ).length > 0;\n};\n\nSizzle.contains = function( context, elem ) {\n\t// Set document vars if needed\n\tif ( ( context.ownerDocument || context ) !== document ) {\n\t\tsetDocument( context );\n\t}\n\treturn contains( context, elem );\n};\n\nSizzle.attr = function( elem, name ) {\n\t// Set document vars if needed\n\tif ( ( elem.ownerDocument || elem ) !== document ) {\n\t\tsetDocument( elem );\n\t}\n\n\tvar fn = Expr.attrHandle[ name.toLowerCase() ],\n\t\t// Don't get fooled by Object.prototype properties (jQuery #13807)\n\t\tval = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ?\n\t\t\tfn( elem, name, !documentIsHTML ) :\n\t\t\tundefined;\n\n\treturn val !== undefined ?\n\t\tval :\n\t\tsupport.attributes || !documentIsHTML ?\n\t\t\telem.getAttribute( name ) :\n\t\t\t(val = elem.getAttributeNode(name)) && val.specified ?\n\t\t\t\tval.value :\n\t\t\t\tnull;\n};\n\nSizzle.escape = function( sel ) {\n\treturn (sel + \"\").replace( rcssescape, fcssescape );\n};\n\nSizzle.error = function( msg ) {\n\tthrow new Error( \"Syntax error, unrecognized expression: \" + msg );\n};\n\n/**\n * Document sorting and removing duplicates\n * @param {ArrayLike} results\n */\nSizzle.uniqueSort = function( results ) {\n\tvar elem,\n\t\tduplicates = [],\n\t\tj = 0,\n\t\ti = 0;\n\n\t// Unless we *know* we can detect duplicates, assume their presence\n\thasDuplicate = !support.detectDuplicates;\n\tsortInput = !support.sortStable && results.slice( 0 );\n\tresults.sort( sortOrder );\n\n\tif ( hasDuplicate ) {\n\t\twhile ( (elem = results[i++]) ) {\n\t\t\tif ( elem === results[ i ] ) {\n\t\t\t\tj = duplicates.push( i );\n\t\t\t}\n\t\t}\n\t\twhile ( j-- ) {\n\t\t\tresults.splice( duplicates[ j ], 1 );\n\t\t}\n\t}\n\n\t// Clear input after sorting to release objects\n\t// See https://github.com/jquery/sizzle/pull/225\n\tsortInput = null;\n\n\treturn results;\n};\n\n/**\n * Utility function for retrieving the text value of an array of DOM nodes\n * @param {Array|Element} elem\n */\ngetText = Sizzle.getText = function( elem ) {\n\tvar node,\n\t\tret = \"\",\n\t\ti = 0,\n\t\tnodeType = elem.nodeType;\n\n\tif ( !nodeType ) {\n\t\t// If no nodeType, this is expected to be an array\n\t\twhile ( (node = elem[i++]) ) {\n\t\t\t// Do not traverse comment nodes\n\t\t\tret += getText( node );\n\t\t}\n\t} else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {\n\t\t// Use textContent for elements\n\t\t// innerText usage removed for consistency of new lines (jQuery #11153)\n\t\tif ( typeof elem.textContent === \"string\" ) {\n\t\t\treturn elem.textContent;\n\t\t} else {\n\t\t\t// Traverse its children\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tret += getText( elem );\n\t\t\t}\n\t\t}\n\t} else if ( nodeType === 3 || nodeType === 4 ) {\n\t\treturn elem.nodeValue;\n\t}\n\t// Do not include comment or processing instruction nodes\n\n\treturn ret;\n};\n\nExpr = Sizzle.selectors = {\n\n\t// Can be adjusted by the user\n\tcacheLength: 50,\n\n\tcreatePseudo: markFunction,\n\n\tmatch: matchExpr,\n\n\tattrHandle: {},\n\n\tfind: {},\n\n\trelative: {\n\t\t\">\": { dir: \"parentNode\", first: true },\n\t\t\" \": { dir: \"parentNode\" },\n\t\t\"+\": { dir: \"previousSibling\", first: true },\n\t\t\"~\": { dir: \"previousSibling\" }\n\t},\n\n\tpreFilter: {\n\t\t\"ATTR\": function( match ) {\n\t\t\tmatch[1] = match[1].replace( runescape, funescape );\n\n\t\t\t// Move the given value to match[3] whether quoted or unquoted\n\t\t\tmatch[3] = ( match[3] || match[4] || match[5] || \"\" ).replace( runescape, funescape );\n\n\t\t\tif ( match[2] === \"~=\" ) {\n\t\t\t\tmatch[3] = \" \" + match[3] + \" \";\n\t\t\t}\n\n\t\t\treturn match.slice( 0, 4 );\n\t\t},\n\n\t\t\"CHILD\": function( match ) {\n\t\t\t/* matches from matchExpr[\"CHILD\"]\n\t\t\t\t1 type (only|nth|...)\n\t\t\t\t2 what (child|of-type)\n\t\t\t\t3 argument (even|odd|\\d*|\\d*n([+-]\\d+)?|...)\n\t\t\t\t4 xn-component of xn+y argument ([+-]?\\d*n|)\n\t\t\t\t5 sign of xn-component\n\t\t\t\t6 x of xn-component\n\t\t\t\t7 sign of y-component\n\t\t\t\t8 y of y-component\n\t\t\t*/\n\t\t\tmatch[1] = match[1].toLowerCase();\n\n\t\t\tif ( match[1].slice( 0, 3 ) === \"nth\" ) {\n\t\t\t\t// nth-* requires argument\n\t\t\t\tif ( !match[3] ) {\n\t\t\t\t\tSizzle.error( match[0] );\n\t\t\t\t}\n\n\t\t\t\t// numeric x and y parameters for Expr.filter.CHILD\n\t\t\t\t// remember that false/true cast respectively to 0/1\n\t\t\t\tmatch[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === \"even\" || match[3] === \"odd\" ) );\n\t\t\t\tmatch[5] = +( ( match[7] + match[8] ) || match[3] === \"odd\" );\n\n\t\t\t// other types prohibit arguments\n\t\t\t} else if ( match[3] ) {\n\t\t\t\tSizzle.error( match[0] );\n\t\t\t}\n\n\t\t\treturn match;\n\t\t},\n\n\t\t\"PSEUDO\": function( match ) {\n\t\t\tvar excess,\n\t\t\t\tunquoted = !match[6] && match[2];\n\n\t\t\tif ( matchExpr[\"CHILD\"].test( match[0] ) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\t// Accept quoted arguments as-is\n\t\t\tif ( match[3] ) {\n\t\t\t\tmatch[2] = match[4] || match[5] || \"\";\n\n\t\t\t// Strip excess characters from unquoted arguments\n\t\t\t} else if ( unquoted && rpseudo.test( unquoted ) &&\n\t\t\t\t// Get excess from tokenize (recursively)\n\t\t\t\t(excess = tokenize( unquoted, true )) &&\n\t\t\t\t// advance to the next closing parenthesis\n\t\t\t\t(excess = unquoted.indexOf( \")\", unquoted.length - excess ) - unquoted.length) ) {\n\n\t\t\t\t// excess is a negative index\n\t\t\t\tmatch[0] = match[0].slice( 0, excess );\n\t\t\t\tmatch[2] = unquoted.slice( 0, excess );\n\t\t\t}\n\n\t\t\t// Return only captures needed by the pseudo filter method (type and argument)\n\t\t\treturn match.slice( 0, 3 );\n\t\t}\n\t},\n\n\tfilter: {\n\n\t\t\"TAG\": function( nodeNameSelector ) {\n\t\t\tvar nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase();\n\t\t\treturn nodeNameSelector === \"*\" ?\n\t\t\t\tfunction() { return true; } :\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn elem.nodeName && elem.nodeName.toLowerCase() === nodeName;\n\t\t\t\t};\n\t\t},\n\n\t\t\"CLASS\": function( className ) {\n\t\t\tvar pattern = classCache[ className + \" \" ];\n\n\t\t\treturn pattern ||\n\t\t\t\t(pattern = new RegExp( \"(^|\" + whitespace + \")\" + className + \"(\" + whitespace + \"|$)\" )) &&\n\t\t\t\tclassCache( className, function( elem ) {\n\t\t\t\t\treturn pattern.test( typeof elem.className === \"string\" && elem.className || typeof elem.getAttribute !== \"undefined\" && elem.getAttribute(\"class\") || \"\" );\n\t\t\t\t});\n\t\t},\n\n\t\t\"ATTR\": function( name, operator, check ) {\n\t\t\treturn function( elem ) {\n\t\t\t\tvar result = Sizzle.attr( elem, name );\n\n\t\t\t\tif ( result == null ) {\n\t\t\t\t\treturn operator === \"!=\";\n\t\t\t\t}\n\t\t\t\tif ( !operator ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\tresult += \"\";\n\n\t\t\t\treturn operator === \"=\" ? result === check :\n\t\t\t\t\toperator === \"!=\" ? result !== check :\n\t\t\t\t\toperator === \"^=\" ? check && result.indexOf( check ) === 0 :\n\t\t\t\t\toperator === \"*=\" ? check && result.indexOf( check ) > -1 :\n\t\t\t\t\toperator === \"$=\" ? check && result.slice( -check.length ) === check :\n\t\t\t\t\toperator === \"~=\" ? ( \" \" + result.replace( rwhitespace, \" \" ) + \" \" ).indexOf( check ) > -1 :\n\t\t\t\t\toperator === \"|=\" ? result === check || result.slice( 0, check.length + 1 ) === check + \"-\" :\n\t\t\t\t\tfalse;\n\t\t\t};\n\t\t},\n\n\t\t\"CHILD\": function( type, what, argument, first, last ) {\n\t\t\tvar simple = type.slice( 0, 3 ) !== \"nth\",\n\t\t\t\tforward = type.slice( -4 ) !== \"last\",\n\t\t\t\tofType = what === \"of-type\";\n\n\t\t\treturn first === 1 && last === 0 ?\n\n\t\t\t\t// Shortcut for :nth-*(n)\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn !!elem.parentNode;\n\t\t\t\t} :\n\n\t\t\t\tfunction( elem, context, xml ) {\n\t\t\t\t\tvar cache, uniqueCache, outerCache, node, nodeIndex, start,\n\t\t\t\t\t\tdir = simple !== forward ? \"nextSibling\" : \"previousSibling\",\n\t\t\t\t\t\tparent = elem.parentNode,\n\t\t\t\t\t\tname = ofType && elem.nodeName.toLowerCase(),\n\t\t\t\t\t\tuseCache = !xml && !ofType,\n\t\t\t\t\t\tdiff = false;\n\n\t\t\t\t\tif ( parent ) {\n\n\t\t\t\t\t\t// :(first|last|only)-(child|of-type)\n\t\t\t\t\t\tif ( simple ) {\n\t\t\t\t\t\t\twhile ( dir ) {\n\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\twhile ( (node = node[ dir ]) ) {\n\t\t\t\t\t\t\t\t\tif ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnode.nodeName.toLowerCase() === name :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) {\n\n\t\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t// Reverse direction for :only-* (if we haven't yet done so)\n\t\t\t\t\t\t\t\tstart = dir = type === \"only\" && !start && \"nextSibling\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tstart = [ forward ? parent.firstChild : parent.lastChild ];\n\n\t\t\t\t\t\t// non-xml :nth-child(...) stores cache data on `parent`\n\t\t\t\t\t\tif ( forward && useCache ) {\n\n\t\t\t\t\t\t\t// Seek `elem` from a previously-cached index\n\n\t\t\t\t\t\t\t// ...in a gzip-friendly way\n\t\t\t\t\t\t\tnode = parent;\n\t\t\t\t\t\t\touterCache = node[ expando ] || (node[ expando ] = {});\n\n\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t(outerCache[ node.uniqueID ] = {});\n\n\t\t\t\t\t\t\tcache = uniqueCache[ type ] || [];\n\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\tdiff = nodeIndex && cache[ 2 ];\n\t\t\t\t\t\t\tnode = nodeIndex && parent.childNodes[ nodeIndex ];\n\n\t\t\t\t\t\t\twhile ( (node = ++nodeIndex && node && node[ dir ] ||\n\n\t\t\t\t\t\t\t\t// Fallback to seeking `elem` from the start\n\t\t\t\t\t\t\t\t(diff = nodeIndex = 0) || start.pop()) ) {\n\n\t\t\t\t\t\t\t\t// When found, cache indexes on `parent` and break\n\t\t\t\t\t\t\t\tif ( node.nodeType === 1 && ++diff && node === elem ) {\n\t\t\t\t\t\t\t\t\tuniqueCache[ type ] = [ dirruns, nodeIndex, diff ];\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// Use previously-cached element index if available\n\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\t// ...in a gzip-friendly way\n\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\touterCache = node[ expando ] || (node[ expando ] = {});\n\n\t\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t\t(outerCache[ node.uniqueID ] = {});\n\n\t\t\t\t\t\t\t\tcache = uniqueCache[ type ] || [];\n\t\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\t\tdiff = nodeIndex;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// xml :nth-child(...)\n\t\t\t\t\t\t\t// or :nth-last-child(...) or :nth(-last)?-of-type(...)\n\t\t\t\t\t\t\tif ( diff === false ) {\n\t\t\t\t\t\t\t\t// Use the same loop as above to seek `elem` from the start\n\t\t\t\t\t\t\t\twhile ( (node = ++nodeIndex && node && node[ dir ] ||\n\t\t\t\t\t\t\t\t\t(diff = nodeIndex = 0) || start.pop()) ) {\n\n\t\t\t\t\t\t\t\t\tif ( ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnode.nodeName.toLowerCase() === name :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) &&\n\t\t\t\t\t\t\t\t\t\t++diff ) {\n\n\t\t\t\t\t\t\t\t\t\t// Cache the index of each encountered element\n\t\t\t\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\t\t\t\touterCache = node[ expando ] || (node[ expando ] = {});\n\n\t\t\t\t\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t\t\t\t\t(outerCache[ node.uniqueID ] = {});\n\n\t\t\t\t\t\t\t\t\t\t\tuniqueCache[ type ] = [ dirruns, diff ];\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tif ( node === elem ) {\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Incorporate the offset, then check against cycle size\n\t\t\t\t\t\tdiff -= last;\n\t\t\t\t\t\treturn diff === first || ( diff % first === 0 && diff / first >= 0 );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t},\n\n\t\t\"PSEUDO\": function( pseudo, argument ) {\n\t\t\t// pseudo-class names are case-insensitive\n\t\t\t// http://www.w3.org/TR/selectors/#pseudo-classes\n\t\t\t// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters\n\t\t\t// Remember that setFilters inherits from pseudos\n\t\t\tvar args,\n\t\t\t\tfn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||\n\t\t\t\t\tSizzle.error( \"unsupported pseudo: \" + pseudo );\n\n\t\t\t// The user may use createPseudo to indicate that\n\t\t\t// arguments are needed to create the filter function\n\t\t\t// just as Sizzle does\n\t\t\tif ( fn[ expando ] ) {\n\t\t\t\treturn fn( argument );\n\t\t\t}\n\n\t\t\t// But maintain support for old signatures\n\t\t\tif ( fn.length > 1 ) {\n\t\t\t\targs = [ pseudo, pseudo, \"\", argument ];\n\t\t\t\treturn Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?\n\t\t\t\t\tmarkFunction(function( seed, matches ) {\n\t\t\t\t\t\tvar idx,\n\t\t\t\t\t\t\tmatched = fn( seed, argument ),\n\t\t\t\t\t\t\ti = matched.length;\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tidx = indexOf( seed, matched[i] );\n\t\t\t\t\t\t\tseed[ idx ] = !( matches[ idx ] = matched[i] );\n\t\t\t\t\t\t}\n\t\t\t\t\t}) :\n\t\t\t\t\tfunction( elem ) {\n\t\t\t\t\t\treturn fn( elem, 0, args );\n\t\t\t\t\t};\n\t\t\t}\n\n\t\t\treturn fn;\n\t\t}\n\t},\n\n\tpseudos: {\n\t\t// Potentially complex pseudos\n\t\t\"not\": markFunction(function( selector ) {\n\t\t\t// Trim the selector passed to compile\n\t\t\t// to avoid treating leading and trailing\n\t\t\t// spaces as combinators\n\t\t\tvar input = [],\n\t\t\t\tresults = [],\n\t\t\t\tmatcher = compile( selector.replace( rtrim, \"$1\" ) );\n\n\t\t\treturn matcher[ expando ] ?\n\t\t\t\tmarkFunction(function( seed, matches, context, xml ) {\n\t\t\t\t\tvar elem,\n\t\t\t\t\t\tunmatched = matcher( seed, null, xml, [] ),\n\t\t\t\t\t\ti = seed.length;\n\n\t\t\t\t\t// Match elements unmatched by `matcher`\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( (elem = unmatched[i]) ) {\n\t\t\t\t\t\t\tseed[i] = !(matches[i] = elem);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}) :\n\t\t\t\tfunction( elem, context, xml ) {\n\t\t\t\t\tinput[0] = elem;\n\t\t\t\t\tmatcher( input, null, xml, results );\n\t\t\t\t\t// Don't keep the element (issue #299)\n\t\t\t\t\tinput[0] = null;\n\t\t\t\t\treturn !results.pop();\n\t\t\t\t};\n\t\t}),\n\n\t\t\"has\": markFunction(function( selector ) {\n\t\t\treturn function( elem ) {\n\t\t\t\treturn Sizzle( selector, elem ).length > 0;\n\t\t\t};\n\t\t}),\n\n\t\t\"contains\": markFunction(function( text ) {\n\t\t\ttext = text.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1;\n\t\t\t};\n\t\t}),\n\n\t\t// \"Whether an element is represented by a :lang() selector\n\t\t// is based solely on the element's language value\n\t\t// being equal to the identifier C,\n\t\t// or beginning with the identifier C immediately followed by \"-\".\n\t\t// The matching of C against the element's language value is performed case-insensitively.\n\t\t// The identifier C does not have to be a valid language name.\"\n\t\t// http://www.w3.org/TR/selectors/#lang-pseudo\n\t\t\"lang\": markFunction( function( lang ) {\n\t\t\t// lang value must be a valid identifier\n\t\t\tif ( !ridentifier.test(lang || \"\") ) {\n\t\t\t\tSizzle.error( \"unsupported lang: \" + lang );\n\t\t\t}\n\t\t\tlang = lang.replace( runescape, funescape ).toLowerCase();\n\t\t\treturn function( elem ) {\n\t\t\t\tvar elemLang;\n\t\t\t\tdo {\n\t\t\t\t\tif ( (elemLang = documentIsHTML ?\n\t\t\t\t\t\telem.lang :\n\t\t\t\t\t\telem.getAttribute(\"xml:lang\") || elem.getAttribute(\"lang\")) ) {\n\n\t\t\t\t\t\telemLang = elemLang.toLowerCase();\n\t\t\t\t\t\treturn elemLang === lang || elemLang.indexOf( lang + \"-\" ) === 0;\n\t\t\t\t\t}\n\t\t\t\t} while ( (elem = elem.parentNode) && elem.nodeType === 1 );\n\t\t\t\treturn false;\n\t\t\t};\n\t\t}),\n\n\t\t// Miscellaneous\n\t\t\"target\": function( elem ) {\n\t\t\tvar hash = window.location && window.location.hash;\n\t\t\treturn hash && hash.slice( 1 ) === elem.id;\n\t\t},\n\n\t\t\"root\": function( elem ) {\n\t\t\treturn elem === docElem;\n\t\t},\n\n\t\t\"focus\": function( elem ) {\n\t\t\treturn elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex);\n\t\t},\n\n\t\t// Boolean properties\n\t\t\"enabled\": createDisabledPseudo( false ),\n\t\t\"disabled\": createDisabledPseudo( true ),\n\n\t\t\"checked\": function( elem ) {\n\t\t\t// In CSS3, :checked should return both checked and selected elements\n\t\t\t// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\tvar nodeName = elem.nodeName.toLowerCase();\n\t\t\treturn (nodeName === \"input\" && !!elem.checked) || (nodeName === \"option\" && !!elem.selected);\n\t\t},\n\n\t\t\"selected\": function( elem ) {\n\t\t\t// Accessing this property makes selected-by-default\n\t\t\t// options in Safari work properly\n\t\t\tif ( elem.parentNode ) {\n\t\t\t\telem.parentNode.selectedIndex;\n\t\t\t}\n\n\t\t\treturn elem.selected === true;\n\t\t},\n\n\t\t// Contents\n\t\t\"empty\": function( elem ) {\n\t\t\t// http://www.w3.org/TR/selectors/#empty-pseudo\n\t\t\t// :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),\n\t\t\t// but not by others (comment: 8; processing instruction: 7; etc.)\n\t\t\t// nodeType < 6 works because attributes (2) do not appear as children\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tif ( elem.nodeType < 6 ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\n\t\t\"parent\": function( elem ) {\n\t\t\treturn !Expr.pseudos[\"empty\"]( elem );\n\t\t},\n\n\t\t// Element/input types\n\t\t\"header\": function( elem ) {\n\t\t\treturn rheader.test( elem.nodeName );\n\t\t},\n\n\t\t\"input\": function( elem ) {\n\t\t\treturn rinputs.test( elem.nodeName );\n\t\t},\n\n\t\t\"button\": function( elem ) {\n\t\t\tvar name = elem.nodeName.toLowerCase();\n\t\t\treturn name === \"input\" && elem.type === \"button\" || name === \"button\";\n\t\t},\n\n\t\t\"text\": function( elem ) {\n\t\t\tvar attr;\n\t\t\treturn elem.nodeName.toLowerCase() === \"input\" &&\n\t\t\t\telem.type === \"text\" &&\n\n\t\t\t\t// Support: IE<8\n\t\t\t\t// New HTML5 attribute values (e.g., \"search\") appear with elem.type === \"text\"\n\t\t\t\t( (attr = elem.getAttribute(\"type\")) == null || attr.toLowerCase() === \"text\" );\n\t\t},\n\n\t\t// Position-in-collection\n\t\t\"first\": createPositionalPseudo(function() {\n\t\t\treturn [ 0 ];\n\t\t}),\n\n\t\t\"last\": createPositionalPseudo(function( matchIndexes, length ) {\n\t\t\treturn [ length - 1 ];\n\t\t}),\n\n\t\t\"eq\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\treturn [ argument < 0 ? argument + length : argument ];\n\t\t}),\n\n\t\t\"even\": createPositionalPseudo(function( matchIndexes, length ) {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t}),\n\n\t\t\"odd\": createPositionalPseudo(function( matchIndexes, length ) {\n\t\t\tvar i = 1;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t}),\n\n\t\t\"lt\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ? argument + length : argument;\n\t\t\tfor ( ; --i >= 0; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t}),\n\n\t\t\"gt\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ? argument + length : argument;\n\t\t\tfor ( ; ++i < length; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t})\n\t}\n};\n\nExpr.pseudos[\"nth\"] = Expr.pseudos[\"eq\"];\n\n// Add button/input type pseudos\nfor ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {\n\tExpr.pseudos[ i ] = createInputPseudo( i );\n}\nfor ( i in { submit: true, reset: true } ) {\n\tExpr.pseudos[ i ] = createButtonPseudo( i );\n}\n\n// Easy API for creating new setFilters\nfunction setFilters() {}\nsetFilters.prototype = Expr.filters = Expr.pseudos;\nExpr.setFilters = new setFilters();\n\ntokenize = Sizzle.tokenize = function( selector, parseOnly ) {\n\tvar matched, match, tokens, type,\n\t\tsoFar, groups, preFilters,\n\t\tcached = tokenCache[ selector + \" \" ];\n\n\tif ( cached ) {\n\t\treturn parseOnly ? 0 : cached.slice( 0 );\n\t}\n\n\tsoFar = selector;\n\tgroups = [];\n\tpreFilters = Expr.preFilter;\n\n\twhile ( soFar ) {\n\n\t\t// Comma and first run\n\t\tif ( !matched || (match = rcomma.exec( soFar )) ) {\n\t\t\tif ( match ) {\n\t\t\t\t// Don't consume trailing commas as valid\n\t\t\t\tsoFar = soFar.slice( match[0].length ) || soFar;\n\t\t\t}\n\t\t\tgroups.push( (tokens = []) );\n\t\t}\n\n\t\tmatched = false;\n\n\t\t// Combinators\n\t\tif ( (match = rcombinators.exec( soFar )) ) {\n\t\t\tmatched = match.shift();\n\t\t\ttokens.push({\n\t\t\t\tvalue: matched,\n\t\t\t\t// Cast descendant combinators to space\n\t\t\t\ttype: match[0].replace( rtrim, \" \" )\n\t\t\t});\n\t\t\tsoFar = soFar.slice( matched.length );\n\t\t}\n\n\t\t// Filters\n\t\tfor ( type in Expr.filter ) {\n\t\t\tif ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] ||\n\t\t\t\t(match = preFilters[ type ]( match ))) ) {\n\t\t\t\tmatched = match.shift();\n\t\t\t\ttokens.push({\n\t\t\t\t\tvalue: matched,\n\t\t\t\t\ttype: type,\n\t\t\t\t\tmatches: match\n\t\t\t\t});\n\t\t\t\tsoFar = soFar.slice( matched.length );\n\t\t\t}\n\t\t}\n\n\t\tif ( !matched ) {\n\t\t\tbreak;\n\t\t}\n\t}\n\n\t// Return the length of the invalid excess\n\t// if we're just parsing\n\t// Otherwise, throw an error or return tokens\n\treturn parseOnly ?\n\t\tsoFar.length :\n\t\tsoFar ?\n\t\t\tSizzle.error( selector ) :\n\t\t\t// Cache the tokens\n\t\t\ttokenCache( selector, groups ).slice( 0 );\n};\n\nfunction toSelector( tokens ) {\n\tvar i = 0,\n\t\tlen = tokens.length,\n\t\tselector = \"\";\n\tfor ( ; i < len; i++ ) {\n\t\tselector += tokens[i].value;\n\t}\n\treturn selector;\n}\n\nfunction addCombinator( matcher, combinator, base ) {\n\tvar dir = combinator.dir,\n\t\tskip = combinator.next,\n\t\tkey = skip || dir,\n\t\tcheckNonElements = base && key === \"parentNode\",\n\t\tdoneName = done++;\n\n\treturn combinator.first ?\n\t\t// Check against closest ancestor/preceding element\n\t\tfunction( elem, context, xml ) {\n\t\t\twhile ( (elem = elem[ dir ]) ) {\n\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\treturn matcher( elem, context, xml );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t} :\n\n\t\t// Check against all ancestor/preceding elements\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar oldCache, uniqueCache, outerCache,\n\t\t\t\tnewCache = [ dirruns, doneName ];\n\n\t\t\t// We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching\n\t\t\tif ( xml ) {\n\t\t\t\twhile ( (elem = elem[ dir ]) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\tif ( matcher( elem, context, xml ) ) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\twhile ( (elem = elem[ dir ]) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\touterCache = elem[ expando ] || (elem[ expando ] = {});\n\n\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\tuniqueCache = outerCache[ elem.uniqueID ] || (outerCache[ elem.uniqueID ] = {});\n\n\t\t\t\t\t\tif ( skip && skip === elem.nodeName.toLowerCase() ) {\n\t\t\t\t\t\t\telem = elem[ dir ] || elem;\n\t\t\t\t\t\t} else if ( (oldCache = uniqueCache[ key ]) &&\n\t\t\t\t\t\t\toldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) {\n\n\t\t\t\t\t\t\t// Assign to newCache so results back-propagate to previous elements\n\t\t\t\t\t\t\treturn (newCache[ 2 ] = oldCache[ 2 ]);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// Reuse newcache so results back-propagate to previous elements\n\t\t\t\t\t\t\tuniqueCache[ key ] = newCache;\n\n\t\t\t\t\t\t\t// A match means we're done; a fail means we have to keep checking\n\t\t\t\t\t\t\tif ( (newCache[ 2 ] = matcher( elem, context, xml )) ) {\n\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n}\n\nfunction elementMatcher( matchers ) {\n\treturn matchers.length > 1 ?\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar i = matchers.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( !matchers[i]( elem, context, xml ) ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t} :\n\t\tmatchers[0];\n}\n\nfunction multipleContexts( selector, contexts, results ) {\n\tvar i = 0,\n\t\tlen = contexts.length;\n\tfor ( ; i < len; i++ ) {\n\t\tSizzle( selector, contexts[i], results );\n\t}\n\treturn results;\n}\n\nfunction condense( unmatched, map, filter, context, xml ) {\n\tvar elem,\n\t\tnewUnmatched = [],\n\t\ti = 0,\n\t\tlen = unmatched.length,\n\t\tmapped = map != null;\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( (elem = unmatched[i]) ) {\n\t\t\tif ( !filter || filter( elem, context, xml ) ) {\n\t\t\t\tnewUnmatched.push( elem );\n\t\t\t\tif ( mapped ) {\n\t\t\t\t\tmap.push( i );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn newUnmatched;\n}\n\nfunction setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {\n\tif ( postFilter && !postFilter[ expando ] ) {\n\t\tpostFilter = setMatcher( postFilter );\n\t}\n\tif ( postFinder && !postFinder[ expando ] ) {\n\t\tpostFinder = setMatcher( postFinder, postSelector );\n\t}\n\treturn markFunction(function( seed, results, context, xml ) {\n\t\tvar temp, i, elem,\n\t\t\tpreMap = [],\n\t\t\tpostMap = [],\n\t\t\tpreexisting = results.length,\n\n\t\t\t// Get initial elements from seed or context\n\t\t\telems = seed || multipleContexts( selector || \"*\", context.nodeType ? [ context ] : context, [] ),\n\n\t\t\t// Prefilter to get matcher input, preserving a map for seed-results synchronization\n\t\t\tmatcherIn = preFilter && ( seed || !selector ) ?\n\t\t\t\tcondense( elems, preMap, preFilter, context, xml ) :\n\t\t\t\telems,\n\n\t\t\tmatcherOut = matcher ?\n\t\t\t\t// If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,\n\t\t\t\tpostFinder || ( seed ? preFilter : preexisting || postFilter ) ?\n\n\t\t\t\t\t// ...intermediate processing is necessary\n\t\t\t\t\t[] :\n\n\t\t\t\t\t// ...otherwise use results directly\n\t\t\t\t\tresults :\n\t\t\t\tmatcherIn;\n\n\t\t// Find primary matches\n\t\tif ( matcher ) {\n\t\t\tmatcher( matcherIn, matcherOut, context, xml );\n\t\t}\n\n\t\t// Apply postFilter\n\t\tif ( postFilter ) {\n\t\t\ttemp = condense( matcherOut, postMap );\n\t\t\tpostFilter( temp, [], context, xml );\n\n\t\t\t// Un-match failing elements by moving them back to matcherIn\n\t\t\ti = temp.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( (elem = temp[i]) ) {\n\t\t\t\t\tmatcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ( seed ) {\n\t\t\tif ( postFinder || preFilter ) {\n\t\t\t\tif ( postFinder ) {\n\t\t\t\t\t// Get the final matcherOut by condensing this intermediate into postFinder contexts\n\t\t\t\t\ttemp = [];\n\t\t\t\t\ti = matcherOut.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( (elem = matcherOut[i]) ) {\n\t\t\t\t\t\t\t// Restore matcherIn since elem is not yet a final match\n\t\t\t\t\t\t\ttemp.push( (matcherIn[i] = elem) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tpostFinder( null, (matcherOut = []), temp, xml );\n\t\t\t\t}\n\n\t\t\t\t// Move matched elements from seed to results to keep them synchronized\n\t\t\t\ti = matcherOut.length;\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\tif ( (elem = matcherOut[i]) &&\n\t\t\t\t\t\t(temp = postFinder ? indexOf( seed, elem ) : preMap[i]) > -1 ) {\n\n\t\t\t\t\t\tseed[temp] = !(results[temp] = elem);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Add elements to results, through postFinder if defined\n\t\t} else {\n\t\t\tmatcherOut = condense(\n\t\t\t\tmatcherOut === results ?\n\t\t\t\t\tmatcherOut.splice( preexisting, matcherOut.length ) :\n\t\t\t\t\tmatcherOut\n\t\t\t);\n\t\t\tif ( postFinder ) {\n\t\t\t\tpostFinder( null, results, matcherOut, xml );\n\t\t\t} else {\n\t\t\t\tpush.apply( results, matcherOut );\n\t\t\t}\n\t\t}\n\t});\n}\n\nfunction matcherFromTokens( tokens ) {\n\tvar checkContext, matcher, j,\n\t\tlen = tokens.length,\n\t\tleadingRelative = Expr.relative[ tokens[0].type ],\n\t\timplicitRelative = leadingRelative || Expr.relative[\" \"],\n\t\ti = leadingRelative ? 1 : 0,\n\n\t\t// The foundational matcher ensures that elements are reachable from top-level context(s)\n\t\tmatchContext = addCombinator( function( elem ) {\n\t\t\treturn elem === checkContext;\n\t\t}, implicitRelative, true ),\n\t\tmatchAnyContext = addCombinator( function( elem ) {\n\t\t\treturn indexOf( checkContext, elem ) > -1;\n\t\t}, implicitRelative, true ),\n\t\tmatchers = [ function( elem, context, xml ) {\n\t\t\tvar ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || (\n\t\t\t\t(checkContext = context).nodeType ?\n\t\t\t\t\tmatchContext( elem, context, xml ) :\n\t\t\t\t\tmatchAnyContext( elem, context, xml ) );\n\t\t\t// Avoid hanging onto element (issue #299)\n\t\t\tcheckContext = null;\n\t\t\treturn ret;\n\t\t} ];\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( (matcher = Expr.relative[ tokens[i].type ]) ) {\n\t\t\tmatchers = [ addCombinator(elementMatcher( matchers ), matcher) ];\n\t\t} else {\n\t\t\tmatcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches );\n\n\t\t\t// Return special upon seeing a positional matcher\n\t\t\tif ( matcher[ expando ] ) {\n\t\t\t\t// Find the next relative operator (if any) for proper handling\n\t\t\t\tj = ++i;\n\t\t\t\tfor ( ; j < len; j++ ) {\n\t\t\t\t\tif ( Expr.relative[ tokens[j].type ] ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn setMatcher(\n\t\t\t\t\ti > 1 && elementMatcher( matchers ),\n\t\t\t\t\ti > 1 && toSelector(\n\t\t\t\t\t\t// If the preceding token was a descendant combinator, insert an implicit any-element `*`\n\t\t\t\t\t\ttokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === \" \" ? \"*\" : \"\" })\n\t\t\t\t\t).replace( rtrim, \"$1\" ),\n\t\t\t\t\tmatcher,\n\t\t\t\t\ti < j && matcherFromTokens( tokens.slice( i, j ) ),\n\t\t\t\t\tj < len && matcherFromTokens( (tokens = tokens.slice( j )) ),\n\t\t\t\t\tj < len && toSelector( tokens )\n\t\t\t\t);\n\t\t\t}\n\t\t\tmatchers.push( matcher );\n\t\t}\n\t}\n\n\treturn elementMatcher( matchers );\n}\n\nfunction matcherFromGroupMatchers( elementMatchers, setMatchers ) {\n\tvar bySet = setMatchers.length > 0,\n\t\tbyElement = elementMatchers.length > 0,\n\t\tsuperMatcher = function( seed, context, xml, results, outermost ) {\n\t\t\tvar elem, j, matcher,\n\t\t\t\tmatchedCount = 0,\n\t\t\t\ti = \"0\",\n\t\t\t\tunmatched = seed && [],\n\t\t\t\tsetMatched = [],\n\t\t\t\tcontextBackup = outermostContext,\n\t\t\t\t// We must always have either seed elements or outermost context\n\t\t\t\telems = seed || byElement && Expr.find[\"TAG\"]( \"*\", outermost ),\n\t\t\t\t// Use integer dirruns iff this is the outermost matcher\n\t\t\t\tdirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1),\n\t\t\t\tlen = elems.length;\n\n\t\t\tif ( outermost ) {\n\t\t\t\toutermostContext = context === document || context || outermost;\n\t\t\t}\n\n\t\t\t// Add elements passing elementMatchers directly to results\n\t\t\t// Support: IE<9, Safari\n\t\t\t// Tolerate NodeList properties (IE: \"length\"; Safari: <number>) matching elements by id\n\t\t\tfor ( ; i !== len && (elem = elems[i]) != null; i++ ) {\n\t\t\t\tif ( byElement && elem ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\tif ( !context && elem.ownerDocument !== document ) {\n\t\t\t\t\t\tsetDocument( elem );\n\t\t\t\t\t\txml = !documentIsHTML;\n\t\t\t\t\t}\n\t\t\t\t\twhile ( (matcher = elementMatchers[j++]) ) {\n\t\t\t\t\t\tif ( matcher( elem, context || document, xml) ) {\n\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( outermost ) {\n\t\t\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Track unmatched elements for set filters\n\t\t\t\tif ( bySet ) {\n\t\t\t\t\t// They will have gone through all possible matchers\n\t\t\t\t\tif ( (elem = !matcher && elem) ) {\n\t\t\t\t\t\tmatchedCount--;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Lengthen the array for every element, matched or not\n\t\t\t\t\tif ( seed ) {\n\t\t\t\t\t\tunmatched.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// `i` is now the count of elements visited above, and adding it to `matchedCount`\n\t\t\t// makes the latter nonnegative.\n\t\t\tmatchedCount += i;\n\n\t\t\t// Apply set filters to unmatched elements\n\t\t\t// NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount`\n\t\t\t// equals `i`), unless we didn't visit _any_ elements in the above loop because we have\n\t\t\t// no element matchers and no seed.\n\t\t\t// Incrementing an initially-string \"0\" `i` allows `i` to remain a string only in that\n\t\t\t// case, which will result in a \"00\" `matchedCount` that differs from `i` but is also\n\t\t\t// numerically zero.\n\t\t\tif ( bySet && i !== matchedCount ) {\n\t\t\t\tj = 0;\n\t\t\t\twhile ( (matcher = setMatchers[j++]) ) {\n\t\t\t\t\tmatcher( unmatched, setMatched, context, xml );\n\t\t\t\t}\n\n\t\t\t\tif ( seed ) {\n\t\t\t\t\t// Reintegrate element matches to eliminate the need for sorting\n\t\t\t\t\tif ( matchedCount > 0 ) {\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tif ( !(unmatched[i] || setMatched[i]) ) {\n\t\t\t\t\t\t\t\tsetMatched[i] = pop.call( results );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Discard index placeholder values to get only actual matches\n\t\t\t\t\tsetMatched = condense( setMatched );\n\t\t\t\t}\n\n\t\t\t\t// Add matches to results\n\t\t\t\tpush.apply( results, setMatched );\n\n\t\t\t\t// Seedless set matches succeeding multiple successful matchers stipulate sorting\n\t\t\t\tif ( outermost && !seed && setMatched.length > 0 &&\n\t\t\t\t\t( matchedCount + setMatchers.length ) > 1 ) {\n\n\t\t\t\t\tSizzle.uniqueSort( results );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Override manipulation of globals by nested matchers\n\t\t\tif ( outermost ) {\n\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\toutermostContext = contextBackup;\n\t\t\t}\n\n\t\t\treturn unmatched;\n\t\t};\n\n\treturn bySet ?\n\t\tmarkFunction( superMatcher ) :\n\t\tsuperMatcher;\n}\n\ncompile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) {\n\tvar i,\n\t\tsetMatchers = [],\n\t\telementMatchers = [],\n\t\tcached = compilerCache[ selector + \" \" ];\n\n\tif ( !cached ) {\n\t\t// Generate a function of recursive functions that can be used to check each element\n\t\tif ( !match ) {\n\t\t\tmatch = tokenize( selector );\n\t\t}\n\t\ti = match.length;\n\t\twhile ( i-- ) {\n\t\t\tcached = matcherFromTokens( match[i] );\n\t\t\tif ( cached[ expando ] ) {\n\t\t\t\tsetMatchers.push( cached );\n\t\t\t} else {\n\t\t\t\telementMatchers.push( cached );\n\t\t\t}\n\t\t}\n\n\t\t// Cache the compiled function\n\t\tcached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) );\n\n\t\t// Save selector and tokenization\n\t\tcached.selector = selector;\n\t}\n\treturn cached;\n};\n\n/**\n * A low-level selection function that works with Sizzle's compiled\n * selector functions\n * @param {String|Function} selector A selector or a pre-compiled\n * selector function built with Sizzle.compile\n * @param {Element} context\n * @param {Array} [results]\n * @param {Array} [seed] A set of elements to match against\n */\nselect = Sizzle.select = function( selector, context, results, seed ) {\n\tvar i, tokens, token, type, find,\n\t\tcompiled = typeof selector === \"function\" && selector,\n\t\tmatch = !seed && tokenize( (selector = compiled.selector || selector) );\n\n\tresults = results || [];\n\n\t// Try to minimize operations if there is only one selector in the list and no seed\n\t// (the latter of which guarantees us context)\n\tif ( match.length === 1 ) {\n\n\t\t// Reduce context if the leading compound selector is an ID\n\t\ttokens = match[0] = match[0].slice( 0 );\n\t\tif ( tokens.length > 2 && (token = tokens[0]).type === \"ID\" &&\n\t\t\t\tcontext.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[1].type ] ) {\n\n\t\t\tcontext = ( Expr.find[\"ID\"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0];\n\t\t\tif ( !context ) {\n\t\t\t\treturn results;\n\n\t\t\t// Precompiled matchers will still verify ancestry, so step up a level\n\t\t\t} else if ( compiled ) {\n\t\t\t\tcontext = context.parentNode;\n\t\t\t}\n\n\t\t\tselector = selector.slice( tokens.shift().value.length );\n\t\t}\n\n\t\t// Fetch a seed set for right-to-left matching\n\t\ti = matchExpr[\"needsContext\"].test( selector ) ? 0 : tokens.length;\n\t\twhile ( i-- ) {\n\t\t\ttoken = tokens[i];\n\n\t\t\t// Abort if we hit a combinator\n\t\t\tif ( Expr.relative[ (type = token.type) ] ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( (find = Expr.find[ type ]) ) {\n\t\t\t\t// Search, expanding context for leading sibling combinators\n\t\t\t\tif ( (seed = find(\n\t\t\t\t\ttoken.matches[0].replace( runescape, funescape ),\n\t\t\t\t\trsibling.test( tokens[0].type ) && testContext( context.parentNode ) || context\n\t\t\t\t)) ) {\n\n\t\t\t\t\t// If seed is empty or no tokens remain, we can return early\n\t\t\t\t\ttokens.splice( i, 1 );\n\t\t\t\t\tselector = seed.length && toSelector( tokens );\n\t\t\t\t\tif ( !selector ) {\n\t\t\t\t\t\tpush.apply( results, seed );\n\t\t\t\t\t\treturn results;\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Compile and execute a filtering function if one is not provided\n\t// Provide `match` to avoid retokenization if we modified the selector above\n\t( compiled || compile( selector, match ) )(\n\t\tseed,\n\t\tcontext,\n\t\t!documentIsHTML,\n\t\tresults,\n\t\t!context || rsibling.test( selector ) && testContext( context.parentNode ) || context\n\t);\n\treturn results;\n};\n\n// One-time assignments\n\n// Sort stability\nsupport.sortStable = expando.split(\"\").sort( sortOrder ).join(\"\") === expando;\n\n// Support: Chrome 14-35+\n// Always assume duplicates if they aren't passed to the comparison function\nsupport.detectDuplicates = !!hasDuplicate;\n\n// Initialize against the default document\nsetDocument();\n\n// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27)\n// Detached nodes confoundingly follow *each other*\nsupport.sortDetached = assert(function( el ) {\n\t// Should return 1, but returns 4 (following)\n\treturn el.compareDocumentPosition( document.createElement(\"fieldset\") ) & 1;\n});\n\n// Support: IE<8\n// Prevent attribute/property \"interpolation\"\n// https://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx\nif ( !assert(function( el ) {\n\tel.innerHTML = \"<a href='#'></a>\";\n\treturn el.firstChild.getAttribute(\"href\") === \"#\" ;\n}) ) {\n\taddHandle( \"type|href|height|width\", function( elem, name, isXML ) {\n\t\tif ( !isXML ) {\n\t\t\treturn elem.getAttribute( name, name.toLowerCase() === \"type\" ? 1 : 2 );\n\t\t}\n\t});\n}\n\n// Support: IE<9\n// Use defaultValue in place of getAttribute(\"value\")\nif ( !support.attributes || !assert(function( el ) {\n\tel.innerHTML = \"<input/>\";\n\tel.firstChild.setAttribute( \"value\", \"\" );\n\treturn el.firstChild.getAttribute( \"value\" ) === \"\";\n}) ) {\n\taddHandle( \"value\", function( elem, name, isXML ) {\n\t\tif ( !isXML && elem.nodeName.toLowerCase() === \"input\" ) {\n\t\t\treturn elem.defaultValue;\n\t\t}\n\t});\n}\n\n// Support: IE<9\n// Use getAttributeNode to fetch booleans when getAttribute lies\nif ( !assert(function( el ) {\n\treturn el.getAttribute(\"disabled\") == null;\n}) ) {\n\taddHandle( booleans, function( elem, name, isXML ) {\n\t\tvar val;\n\t\tif ( !isXML ) {\n\t\t\treturn elem[ name ] === true ? name.toLowerCase() :\n\t\t\t\t\t(val = elem.getAttributeNode( name )) && val.specified ?\n\t\t\t\t\tval.value :\n\t\t\t\tnull;\n\t\t}\n\t});\n}\n\nreturn Sizzle;\n\n})( window );\n\n\n\njQuery.find = Sizzle;\njQuery.expr = Sizzle.selectors;\n\n// Deprecated\njQuery.expr[ \":\" ] = jQuery.expr.pseudos;\njQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort;\njQuery.text = Sizzle.getText;\njQuery.isXMLDoc = Sizzle.isXML;\njQuery.contains = Sizzle.contains;\njQuery.escapeSelector = Sizzle.escape;\n\n\n\n\nvar dir = function( elem, dir, until ) {\n\tvar matched = [],\n\t\ttruncate = until !== undefined;\n\n\twhile ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) {\n\t\tif ( elem.nodeType === 1 ) {\n\t\t\tif ( truncate && jQuery( elem ).is( until ) ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tmatched.push( elem );\n\t\t}\n\t}\n\treturn matched;\n};\n\n\nvar siblings = function( n, elem ) {\n\tvar matched = [];\n\n\tfor ( ; n; n = n.nextSibling ) {\n\t\tif ( n.nodeType === 1 && n !== elem ) {\n\t\t\tmatched.push( n );\n\t\t}\n\t}\n\n\treturn matched;\n};\n\n\nvar rneedsContext = jQuery.expr.match.needsContext;\n\n\n\nfunction nodeName( elem, name ) {\n\n return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();\n\n};\nvar rsingleTag = ( /^<([a-z][^\\/\\0>:\\x20\\t\\r\\n\\f]*)[\\x20\\t\\r\\n\\f]*\\/?>(?:<\\/\\1>|)$/i );\n\n\n\n// Implement the identical functionality for filter and not\nfunction winnow( elements, qualifier, not ) {\n\tif ( isFunction( qualifier ) ) {\n\t\treturn jQuery.grep( elements, function( elem, i ) {\n\t\t\treturn !!qualifier.call( elem, i, elem ) !== not;\n\t\t} );\n\t}\n\n\t// Single element\n\tif ( qualifier.nodeType ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( elem === qualifier ) !== not;\n\t\t} );\n\t}\n\n\t// Arraylike of elements (jQuery, arguments, Array)\n\tif ( typeof qualifier !== \"string\" ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( indexOf.call( qualifier, elem ) > -1 ) !== not;\n\t\t} );\n\t}\n\n\t// Filtered directly for both simple and complex selectors\n\treturn jQuery.filter( qualifier, elements, not );\n}\n\njQuery.filter = function( expr, elems, not ) {\n\tvar elem = elems[ 0 ];\n\n\tif ( not ) {\n\t\texpr = \":not(\" + expr + \")\";\n\t}\n\n\tif ( elems.length === 1 && elem.nodeType === 1 ) {\n\t\treturn jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [];\n\t}\n\n\treturn jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {\n\t\treturn elem.nodeType === 1;\n\t} ) );\n};\n\njQuery.fn.extend( {\n\tfind: function( selector ) {\n\t\tvar i, ret,\n\t\t\tlen = this.length,\n\t\t\tself = this;\n\n\t\tif ( typeof selector !== \"string\" ) {\n\t\t\treturn this.pushStack( jQuery( selector ).filter( function() {\n\t\t\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\t\t\tif ( jQuery.contains( self[ i ], this ) ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} ) );\n\t\t}\n\n\t\tret = this.pushStack( [] );\n\n\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\tjQuery.find( selector, self[ i ], ret );\n\t\t}\n\n\t\treturn len > 1 ? jQuery.uniqueSort( ret ) : ret;\n\t},\n\tfilter: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], false ) );\n\t},\n\tnot: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], true ) );\n\t},\n\tis: function( selector ) {\n\t\treturn !!winnow(\n\t\t\tthis,\n\n\t\t\t// If this is a positional/relative selector, check membership in the returned set\n\t\t\t// so $(\"p:first\").is(\"p:last\") won't return true for a doc with two \"p\".\n\t\t\ttypeof selector === \"string\" && rneedsContext.test( selector ) ?\n\t\t\t\tjQuery( selector ) :\n\t\t\t\tselector || [],\n\t\t\tfalse\n\t\t).length;\n\t}\n} );\n\n\n// Initialize a jQuery object\n\n\n// A central reference to the root jQuery(document)\nvar rootjQuery,\n\n\t// A simple way to check for HTML strings\n\t// Prioritize #id over <tag> to avoid XSS via location.hash (#9521)\n\t// Strict HTML recognition (#11290: must start with <)\n\t// Shortcut simple #id case for speed\n\trquickExpr = /^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]+))$/,\n\n\tinit = jQuery.fn.init = function( selector, context, root ) {\n\t\tvar match, elem;\n\n\t\t// HANDLE: $(\"\"), $(null), $(undefined), $(false)\n\t\tif ( !selector ) {\n\t\t\treturn this;\n\t\t}\n\n\t\t// Method init() accepts an alternate rootjQuery\n\t\t// so migrate can support jQuery.sub (gh-2101)\n\t\troot = root || rootjQuery;\n\n\t\t// Handle HTML strings\n\t\tif ( typeof selector === \"string\" ) {\n\t\t\tif ( selector[ 0 ] === \"<\" &&\n\t\t\t\tselector[ selector.length - 1 ] === \">\" &&\n\t\t\t\tselector.length >= 3 ) {\n\n\t\t\t\t// Assume that strings that start and end with <> are HTML and skip the regex check\n\t\t\t\tmatch = [ null, selector, null ];\n\n\t\t\t} else {\n\t\t\t\tmatch = rquickExpr.exec( selector );\n\t\t\t}\n\n\t\t\t// Match html or make sure no context is specified for #id\n\t\t\tif ( match && ( match[ 1 ] || !context ) ) {\n\n\t\t\t\t// HANDLE: $(html) -> $(array)\n\t\t\t\tif ( match[ 1 ] ) {\n\t\t\t\t\tcontext = context instanceof jQuery ? context[ 0 ] : context;\n\n\t\t\t\t\t// Option to run scripts is true for back-compat\n\t\t\t\t\t// Intentionally let the error be thrown if parseHTML is not present\n\t\t\t\t\tjQuery.merge( this, jQuery.parseHTML(\n\t\t\t\t\t\tmatch[ 1 ],\n\t\t\t\t\t\tcontext && context.nodeType ? context.ownerDocument || context : document,\n\t\t\t\t\t\ttrue\n\t\t\t\t\t) );\n\n\t\t\t\t\t// HANDLE: $(html, props)\n\t\t\t\t\tif ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) {\n\t\t\t\t\t\tfor ( match in context ) {\n\n\t\t\t\t\t\t\t// Properties of context are called as methods if possible\n\t\t\t\t\t\t\tif ( isFunction( this[ match ] ) ) {\n\t\t\t\t\t\t\t\tthis[ match ]( context[ match ] );\n\n\t\t\t\t\t\t\t// ...and otherwise set as attributes\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthis.attr( match, context[ match ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn this;\n\n\t\t\t\t// HANDLE: $(#id)\n\t\t\t\t} else {\n\t\t\t\t\telem = document.getElementById( match[ 2 ] );\n\n\t\t\t\t\tif ( elem ) {\n\n\t\t\t\t\t\t// Inject the element directly into the jQuery object\n\t\t\t\t\t\tthis[ 0 ] = elem;\n\t\t\t\t\t\tthis.length = 1;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\n\t\t\t// HANDLE: $(expr, $(...))\n\t\t\t} else if ( !context || context.jquery ) {\n\t\t\t\treturn ( context || root ).find( selector );\n\n\t\t\t// HANDLE: $(expr, context)\n\t\t\t// (which is just equivalent to: $(context).find(expr)\n\t\t\t} else {\n\t\t\t\treturn this.constructor( context ).find( selector );\n\t\t\t}\n\n\t\t// HANDLE: $(DOMElement)\n\t\t} else if ( selector.nodeType ) {\n\t\t\tthis[ 0 ] = selector;\n\t\t\tthis.length = 1;\n\t\t\treturn this;\n\n\t\t// HANDLE: $(function)\n\t\t// Shortcut for document ready\n\t\t} else if ( isFunction( selector ) ) {\n\t\t\treturn root.ready !== undefined ?\n\t\t\t\troot.ready( selector ) :\n\n\t\t\t\t// Execute immediately if ready is not present\n\t\t\t\tselector( jQuery );\n\t\t}\n\n\t\treturn jQuery.makeArray( selector, this );\n\t};\n\n// Give the init function the jQuery prototype for later instantiation\ninit.prototype = jQuery.fn;\n\n// Initialize central reference\nrootjQuery = jQuery( document );\n\n\nvar rparentsprev = /^(?:parents|prev(?:Until|All))/,\n\n\t// Methods guaranteed to produce a unique set when starting from a unique set\n\tguaranteedUnique = {\n\t\tchildren: true,\n\t\tcontents: true,\n\t\tnext: true,\n\t\tprev: true\n\t};\n\njQuery.fn.extend( {\n\thas: function( target ) {\n\t\tvar targets = jQuery( target, this ),\n\t\t\tl = targets.length;\n\n\t\treturn this.filter( function() {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tif ( jQuery.contains( this, targets[ i ] ) ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t},\n\n\tclosest: function( selectors, context ) {\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\tl = this.length,\n\t\t\tmatched = [],\n\t\t\ttargets = typeof selectors !== \"string\" && jQuery( selectors );\n\n\t\t// Positional selectors never match, since there's no _selection_ context\n\t\tif ( !rneedsContext.test( selectors ) ) {\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tfor ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) {\n\n\t\t\t\t\t// Always skip document fragments\n\t\t\t\t\tif ( cur.nodeType < 11 && ( targets ?\n\t\t\t\t\t\ttargets.index( cur ) > -1 :\n\n\t\t\t\t\t\t// Don't pass non-elements to Sizzle\n\t\t\t\t\t\tcur.nodeType === 1 &&\n\t\t\t\t\t\t\tjQuery.find.matchesSelector( cur, selectors ) ) ) {\n\n\t\t\t\t\t\tmatched.push( cur );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched );\n\t},\n\n\t// Determine the position of an element within the set\n\tindex: function( elem ) {\n\n\t\t// No argument, return index in parent\n\t\tif ( !elem ) {\n\t\t\treturn ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1;\n\t\t}\n\n\t\t// Index in selector\n\t\tif ( typeof elem === \"string\" ) {\n\t\t\treturn indexOf.call( jQuery( elem ), this[ 0 ] );\n\t\t}\n\n\t\t// Locate the position of the desired element\n\t\treturn indexOf.call( this,\n\n\t\t\t// If it receives a jQuery object, the first element is used\n\t\t\telem.jquery ? elem[ 0 ] : elem\n\t\t);\n\t},\n\n\tadd: function( selector, context ) {\n\t\treturn this.pushStack(\n\t\t\tjQuery.uniqueSort(\n\t\t\t\tjQuery.merge( this.get(), jQuery( selector, context ) )\n\t\t\t)\n\t\t);\n\t},\n\n\taddBack: function( selector ) {\n\t\treturn this.add( selector == null ?\n\t\t\tthis.prevObject : this.prevObject.filter( selector )\n\t\t);\n\t}\n} );\n\nfunction sibling( cur, dir ) {\n\twhile ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {}\n\treturn cur;\n}\n\njQuery.each( {\n\tparent: function( elem ) {\n\t\tvar parent = elem.parentNode;\n\t\treturn parent && parent.nodeType !== 11 ? parent : null;\n\t},\n\tparents: function( elem ) {\n\t\treturn dir( elem, \"parentNode\" );\n\t},\n\tparentsUntil: function( elem, i, until ) {\n\t\treturn dir( elem, \"parentNode\", until );\n\t},\n\tnext: function( elem ) {\n\t\treturn sibling( elem, \"nextSibling\" );\n\t},\n\tprev: function( elem ) {\n\t\treturn sibling( elem, \"previousSibling\" );\n\t},\n\tnextAll: function( elem ) {\n\t\treturn dir( elem, \"nextSibling\" );\n\t},\n\tprevAll: function( elem ) {\n\t\treturn dir( elem, \"previousSibling\" );\n\t},\n\tnextUntil: function( elem, i, until ) {\n\t\treturn dir( elem, \"nextSibling\", until );\n\t},\n\tprevUntil: function( elem, i, until ) {\n\t\treturn dir( elem, \"previousSibling\", until );\n\t},\n\tsiblings: function( elem ) {\n\t\treturn siblings( ( elem.parentNode || {} ).firstChild, elem );\n\t},\n\tchildren: function( elem ) {\n\t\treturn siblings( elem.firstChild );\n\t},\n\tcontents: function( elem ) {\n if ( nodeName( elem, \"iframe\" ) ) {\n return elem.contentDocument;\n }\n\n // Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only\n // Treat the template element as a regular one in browsers that\n // don't support it.\n if ( nodeName( elem, \"template\" ) ) {\n elem = elem.content || elem;\n }\n\n return jQuery.merge( [], elem.childNodes );\n\t}\n}, function( name, fn ) {\n\tjQuery.fn[ name ] = function( until, selector ) {\n\t\tvar matched = jQuery.map( this, fn, until );\n\n\t\tif ( name.slice( -5 ) !== \"Until\" ) {\n\t\t\tselector = until;\n\t\t}\n\n\t\tif ( selector && typeof selector === \"string\" ) {\n\t\t\tmatched = jQuery.filter( selector, matched );\n\t\t}\n\n\t\tif ( this.length > 1 ) {\n\n\t\t\t// Remove duplicates\n\t\t\tif ( !guaranteedUnique[ name ] ) {\n\t\t\t\tjQuery.uniqueSort( matched );\n\t\t\t}\n\n\t\t\t// Reverse order for parents* and prev-derivatives\n\t\t\tif ( rparentsprev.test( name ) ) {\n\t\t\t\tmatched.reverse();\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched );\n\t};\n} );\nvar rnothtmlwhite = ( /[^\\x20\\t\\r\\n\\f]+/g );\n\n\n\n// Convert String-formatted options into Object-formatted ones\nfunction createOptions( options ) {\n\tvar object = {};\n\tjQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) {\n\t\tobject[ flag ] = true;\n\t} );\n\treturn object;\n}\n\n/*\n * Create a callback list using the following parameters:\n *\n *\toptions: an optional list of space-separated options that will change how\n *\t\t\tthe callback list behaves or a more traditional option object\n *\n * By default a callback list will act like an event callback list and can be\n * \"fired\" multiple times.\n *\n * Possible options:\n *\n *\tonce:\t\t\twill ensure the callback list can only be fired once (like a Deferred)\n *\n *\tmemory:\t\t\twill keep track of previous values and will call any callback added\n *\t\t\t\t\tafter the list has been fired right away with the latest \"memorized\"\n *\t\t\t\t\tvalues (like a Deferred)\n *\n *\tunique:\t\t\twill ensure a callback can only be added once (no duplicate in the list)\n *\n *\tstopOnFalse:\tinterrupt callings when a callback returns false\n *\n */\njQuery.Callbacks = function( options ) {\n\n\t// Convert options from String-formatted to Object-formatted if needed\n\t// (we check in cache first)\n\toptions = typeof options === \"string\" ?\n\t\tcreateOptions( options ) :\n\t\tjQuery.extend( {}, options );\n\n\tvar // Flag to know if list is currently firing\n\t\tfiring,\n\n\t\t// Last fire value for non-forgettable lists\n\t\tmemory,\n\n\t\t// Flag to know if list was already fired\n\t\tfired,\n\n\t\t// Flag to prevent firing\n\t\tlocked,\n\n\t\t// Actual callback list\n\t\tlist = [],\n\n\t\t// Queue of execution data for repeatable lists\n\t\tqueue = [],\n\n\t\t// Index of currently firing callback (modified by add/remove as needed)\n\t\tfiringIndex = -1,\n\n\t\t// Fire callbacks\n\t\tfire = function() {\n\n\t\t\t// Enforce single-firing\n\t\t\tlocked = locked || options.once;\n\n\t\t\t// Execute callbacks for all pending executions,\n\t\t\t// respecting firingIndex overrides and runtime changes\n\t\t\tfired = firing = true;\n\t\t\tfor ( ; queue.length; firingIndex = -1 ) {\n\t\t\t\tmemory = queue.shift();\n\t\t\t\twhile ( ++firingIndex < list.length ) {\n\n\t\t\t\t\t// Run callback and check for early termination\n\t\t\t\t\tif ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false &&\n\t\t\t\t\t\toptions.stopOnFalse ) {\n\n\t\t\t\t\t\t// Jump to end and forget the data so .add doesn't re-fire\n\t\t\t\t\t\tfiringIndex = list.length;\n\t\t\t\t\t\tmemory = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Forget the data if we're done with it\n\t\t\tif ( !options.memory ) {\n\t\t\t\tmemory = false;\n\t\t\t}\n\n\t\t\tfiring = false;\n\n\t\t\t// Clean up if we're done firing for good\n\t\t\tif ( locked ) {\n\n\t\t\t\t// Keep an empty list if we have data for future add calls\n\t\t\t\tif ( memory ) {\n\t\t\t\t\tlist = [];\n\n\t\t\t\t// Otherwise, this object is spent\n\t\t\t\t} else {\n\t\t\t\t\tlist = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t// Actual Callbacks object\n\t\tself = {\n\n\t\t\t// Add a callback or a collection of callbacks to the list\n\t\t\tadd: function() {\n\t\t\t\tif ( list ) {\n\n\t\t\t\t\t// If we have memory from a past run, we should fire after adding\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfiringIndex = list.length - 1;\n\t\t\t\t\t\tqueue.push( memory );\n\t\t\t\t\t}\n\n\t\t\t\t\t( function add( args ) {\n\t\t\t\t\t\tjQuery.each( args, function( _, arg ) {\n\t\t\t\t\t\t\tif ( isFunction( arg ) ) {\n\t\t\t\t\t\t\t\tif ( !options.unique || !self.has( arg ) ) {\n\t\t\t\t\t\t\t\t\tlist.push( arg );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else if ( arg && arg.length && toType( arg ) !== \"string\" ) {\n\n\t\t\t\t\t\t\t\t// Inspect recursively\n\t\t\t\t\t\t\t\tadd( arg );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} );\n\t\t\t\t\t} )( arguments );\n\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Remove a callback from the list\n\t\t\tremove: function() {\n\t\t\t\tjQuery.each( arguments, function( _, arg ) {\n\t\t\t\t\tvar index;\n\t\t\t\t\twhile ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {\n\t\t\t\t\t\tlist.splice( index, 1 );\n\n\t\t\t\t\t\t// Handle firing indexes\n\t\t\t\t\t\tif ( index <= firingIndex ) {\n\t\t\t\t\t\t\tfiringIndex--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Check if a given callback is in the list.\n\t\t\t// If no argument is given, return whether or not list has callbacks attached.\n\t\t\thas: function( fn ) {\n\t\t\t\treturn fn ?\n\t\t\t\t\tjQuery.inArray( fn, list ) > -1 :\n\t\t\t\t\tlist.length > 0;\n\t\t\t},\n\n\t\t\t// Remove all callbacks from the list\n\t\t\tempty: function() {\n\t\t\t\tif ( list ) {\n\t\t\t\t\tlist = [];\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Disable .fire and .add\n\t\t\t// Abort any current/pending executions\n\t\t\t// Clear all callbacks and values\n\t\t\tdisable: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tlist = memory = \"\";\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tdisabled: function() {\n\t\t\t\treturn !list;\n\t\t\t},\n\n\t\t\t// Disable .fire\n\t\t\t// Also disable .add unless we have memory (since it would have no effect)\n\t\t\t// Abort any pending executions\n\t\t\tlock: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tif ( !memory && !firing ) {\n\t\t\t\t\tlist = memory = \"\";\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tlocked: function() {\n\t\t\t\treturn !!locked;\n\t\t\t},\n\n\t\t\t// Call all callbacks with the given context and arguments\n\t\t\tfireWith: function( context, args ) {\n\t\t\t\tif ( !locked ) {\n\t\t\t\t\targs = args || [];\n\t\t\t\t\targs = [ context, args.slice ? args.slice() : args ];\n\t\t\t\t\tqueue.push( args );\n\t\t\t\t\tif ( !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Call all the callbacks with the given arguments\n\t\t\tfire: function() {\n\t\t\t\tself.fireWith( this, arguments );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// To know if the callbacks have already been called at least once\n\t\t\tfired: function() {\n\t\t\t\treturn !!fired;\n\t\t\t}\n\t\t};\n\n\treturn self;\n};\n\n\nfunction Identity( v ) {\n\treturn v;\n}\nfunction Thrower( ex ) {\n\tthrow ex;\n}\n\nfunction adoptValue( value, resolve, reject, noValue ) {\n\tvar method;\n\n\ttry {\n\n\t\t// Check for promise aspect first to privilege synchronous behavior\n\t\tif ( value && isFunction( ( method = value.promise ) ) ) {\n\t\t\tmethod.call( value ).done( resolve ).fail( reject );\n\n\t\t// Other thenables\n\t\t} else if ( value && isFunction( ( method = value.then ) ) ) {\n\t\t\tmethod.call( value, resolve, reject );\n\n\t\t// Other non-thenables\n\t\t} else {\n\n\t\t\t// Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer:\n\t\t\t// * false: [ value ].slice( 0 ) => resolve( value )\n\t\t\t// * true: [ value ].slice( 1 ) => resolve()\n\t\t\tresolve.apply( undefined, [ value ].slice( noValue ) );\n\t\t}\n\n\t// For Promises/A+, convert exceptions into rejections\n\t// Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in\n\t// Deferred#then to conditionally suppress rejection.\n\t} catch ( value ) {\n\n\t\t// Support: Android 4.0 only\n\t\t// Strict mode functions invoked without .call/.apply get global-object context\n\t\treject.apply( undefined, [ value ] );\n\t}\n}\n\njQuery.extend( {\n\n\tDeferred: function( func ) {\n\t\tvar tuples = [\n\n\t\t\t\t// action, add listener, callbacks,\n\t\t\t\t// ... .then handlers, argument index, [final state]\n\t\t\t\t[ \"notify\", \"progress\", jQuery.Callbacks( \"memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"memory\" ), 2 ],\n\t\t\t\t[ \"resolve\", \"done\", jQuery.Callbacks( \"once memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"once memory\" ), 0, \"resolved\" ],\n\t\t\t\t[ \"reject\", \"fail\", jQuery.Callbacks( \"once memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"once memory\" ), 1, \"rejected\" ]\n\t\t\t],\n\t\t\tstate = \"pending\",\n\t\t\tpromise = {\n\t\t\t\tstate: function() {\n\t\t\t\t\treturn state;\n\t\t\t\t},\n\t\t\t\talways: function() {\n\t\t\t\t\tdeferred.done( arguments ).fail( arguments );\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\t\t\t\t\"catch\": function( fn ) {\n\t\t\t\t\treturn promise.then( null, fn );\n\t\t\t\t},\n\n\t\t\t\t// Keep pipe for back-compat\n\t\t\t\tpipe: function( /* fnDone, fnFail, fnProgress */ ) {\n\t\t\t\t\tvar fns = arguments;\n\n\t\t\t\t\treturn jQuery.Deferred( function( newDefer ) {\n\t\t\t\t\t\tjQuery.each( tuples, function( i, tuple ) {\n\n\t\t\t\t\t\t\t// Map tuples (progress, done, fail) to arguments (done, fail, progress)\n\t\t\t\t\t\t\tvar fn = isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ];\n\n\t\t\t\t\t\t\t// deferred.progress(function() { bind to newDefer or newDefer.notify })\n\t\t\t\t\t\t\t// deferred.done(function() { bind to newDefer or newDefer.resolve })\n\t\t\t\t\t\t\t// deferred.fail(function() { bind to newDefer or newDefer.reject })\n\t\t\t\t\t\t\tdeferred[ tuple[ 1 ] ]( function() {\n\t\t\t\t\t\t\t\tvar returned = fn && fn.apply( this, arguments );\n\t\t\t\t\t\t\t\tif ( returned && isFunction( returned.promise ) ) {\n\t\t\t\t\t\t\t\t\treturned.promise()\n\t\t\t\t\t\t\t\t\t\t.progress( newDefer.notify )\n\t\t\t\t\t\t\t\t\t\t.done( newDefer.resolve )\n\t\t\t\t\t\t\t\t\t\t.fail( newDefer.reject );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tnewDefer[ tuple[ 0 ] + \"With\" ](\n\t\t\t\t\t\t\t\t\t\tthis,\n\t\t\t\t\t\t\t\t\t\tfn ? [ returned ] : arguments\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t} );\n\t\t\t\t\t\tfns = null;\n\t\t\t\t\t} ).promise();\n\t\t\t\t},\n\t\t\t\tthen: function( onFulfilled, onRejected, onProgress ) {\n\t\t\t\t\tvar maxDepth = 0;\n\t\t\t\t\tfunction resolve( depth, deferred, handler, special ) {\n\t\t\t\t\t\treturn function() {\n\t\t\t\t\t\t\tvar that = this,\n\t\t\t\t\t\t\t\targs = arguments,\n\t\t\t\t\t\t\t\tmightThrow = function() {\n\t\t\t\t\t\t\t\t\tvar returned, then;\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.3\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-59\n\t\t\t\t\t\t\t\t\t// Ignore double-resolution attempts\n\t\t\t\t\t\t\t\t\tif ( depth < maxDepth ) {\n\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\treturned = handler.apply( that, args );\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.1\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-48\n\t\t\t\t\t\t\t\t\tif ( returned === deferred.promise() ) {\n\t\t\t\t\t\t\t\t\t\tthrow new TypeError( \"Thenable self-resolution\" );\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ sections 2.3.3.1, 3.5\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-54\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-75\n\t\t\t\t\t\t\t\t\t// Retrieve `then` only once\n\t\t\t\t\t\t\t\t\tthen = returned &&\n\n\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.4\n\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-64\n\t\t\t\t\t\t\t\t\t\t// Only check objects and functions for thenability\n\t\t\t\t\t\t\t\t\t\t( typeof returned === \"object\" ||\n\t\t\t\t\t\t\t\t\t\t\ttypeof returned === \"function\" ) &&\n\t\t\t\t\t\t\t\t\t\treturned.then;\n\n\t\t\t\t\t\t\t\t\t// Handle a returned thenable\n\t\t\t\t\t\t\t\t\tif ( isFunction( then ) ) {\n\n\t\t\t\t\t\t\t\t\t\t// Special processors (notify) just wait for resolution\n\t\t\t\t\t\t\t\t\t\tif ( special ) {\n\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Thrower, special )\n\t\t\t\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\t\t\t// Normal processors (resolve) also hook into progress\n\t\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t\t// ...and disregard older resolution values\n\t\t\t\t\t\t\t\t\t\t\tmaxDepth++;\n\n\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Thrower, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity,\n\t\t\t\t\t\t\t\t\t\t\t\t\tdeferred.notifyWith )\n\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Handle all other returned values\n\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\tif ( handler !== Identity ) {\n\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\targs = [ returned ];\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t// Process the value(s)\n\t\t\t\t\t\t\t\t\t\t// Default process is resolve\n\t\t\t\t\t\t\t\t\t\t( special || deferred.resolveWith )( that, args );\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\n\t\t\t\t\t\t\t\t// Only normal processors (resolve) catch and reject exceptions\n\t\t\t\t\t\t\t\tprocess = special ?\n\t\t\t\t\t\t\t\t\tmightThrow :\n\t\t\t\t\t\t\t\t\tfunction() {\n\t\t\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t\t\tmightThrow();\n\t\t\t\t\t\t\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t\t\t\t\t\t\tif ( jQuery.Deferred.exceptionHook ) {\n\t\t\t\t\t\t\t\t\t\t\t\tjQuery.Deferred.exceptionHook( e,\n\t\t\t\t\t\t\t\t\t\t\t\t\tprocess.stackTrace );\n\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.4.1\n\t\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-61\n\t\t\t\t\t\t\t\t\t\t\t// Ignore post-resolution exceptions\n\t\t\t\t\t\t\t\t\t\t\tif ( depth + 1 >= maxDepth ) {\n\n\t\t\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\t\t\tif ( handler !== Thrower ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\t\t\targs = [ e ];\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t\tdeferred.rejectWith( that, args );\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.1\n\t\t\t\t\t\t\t// https://promisesaplus.com/#point-57\n\t\t\t\t\t\t\t// Re-resolve promises immediately to dodge false rejection from\n\t\t\t\t\t\t\t// subsequent errors\n\t\t\t\t\t\t\tif ( depth ) {\n\t\t\t\t\t\t\t\tprocess();\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t// Call an optional hook to record the stack, in case of exception\n\t\t\t\t\t\t\t\t// since it's otherwise lost when execution goes async\n\t\t\t\t\t\t\t\tif ( jQuery.Deferred.getStackHook ) {\n\t\t\t\t\t\t\t\t\tprocess.stackTrace = jQuery.Deferred.getStackHook();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\twindow.setTimeout( process );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\n\t\t\t\t\treturn jQuery.Deferred( function( newDefer ) {\n\n\t\t\t\t\t\t// progress_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 0 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\tisFunction( onProgress ) ?\n\t\t\t\t\t\t\t\t\tonProgress :\n\t\t\t\t\t\t\t\t\tIdentity,\n\t\t\t\t\t\t\t\tnewDefer.notifyWith\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t// fulfilled_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 1 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\tisFunction( onFulfilled ) ?\n\t\t\t\t\t\t\t\t\tonFulfilled :\n\t\t\t\t\t\t\t\t\tIdentity\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t// rejected_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 2 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\tisFunction( onRejected ) ?\n\t\t\t\t\t\t\t\t\tonRejected :\n\t\t\t\t\t\t\t\t\tThrower\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\t\t\t\t\t} ).promise();\n\t\t\t\t},\n\n\t\t\t\t// Get a promise for this deferred\n\t\t\t\t// If obj is provided, the promise aspect is added to the object\n\t\t\t\tpromise: function( obj ) {\n\t\t\t\t\treturn obj != null ? jQuery.extend( obj, promise ) : promise;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdeferred = {};\n\n\t\t// Add list-specific methods\n\t\tjQuery.each( tuples, function( i, tuple ) {\n\t\t\tvar list = tuple[ 2 ],\n\t\t\t\tstateString = tuple[ 5 ];\n\n\t\t\t// promise.progress = list.add\n\t\t\t// promise.done = list.add\n\t\t\t// promise.fail = list.add\n\t\t\tpromise[ tuple[ 1 ] ] = list.add;\n\n\t\t\t// Handle state\n\t\t\tif ( stateString ) {\n\t\t\t\tlist.add(\n\t\t\t\t\tfunction() {\n\n\t\t\t\t\t\t// state = \"resolved\" (i.e., fulfilled)\n\t\t\t\t\t\t// state = \"rejected\"\n\t\t\t\t\t\tstate = stateString;\n\t\t\t\t\t},\n\n\t\t\t\t\t// rejected_callbacks.disable\n\t\t\t\t\t// fulfilled_callbacks.disable\n\t\t\t\t\ttuples[ 3 - i ][ 2 ].disable,\n\n\t\t\t\t\t// rejected_handlers.disable\n\t\t\t\t\t// fulfilled_handlers.disable\n\t\t\t\t\ttuples[ 3 - i ][ 3 ].disable,\n\n\t\t\t\t\t// progress_callbacks.lock\n\t\t\t\t\ttuples[ 0 ][ 2 ].lock,\n\n\t\t\t\t\t// progress_handlers.lock\n\t\t\t\t\ttuples[ 0 ][ 3 ].lock\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// progress_handlers.fire\n\t\t\t// fulfilled_handlers.fire\n\t\t\t// rejected_handlers.fire\n\t\t\tlist.add( tuple[ 3 ].fire );\n\n\t\t\t// deferred.notify = function() { deferred.notifyWith(...) }\n\t\t\t// deferred.resolve = function() { deferred.resolveWith(...) }\n\t\t\t// deferred.reject = function() { deferred.rejectWith(...) }\n\t\t\tdeferred[ tuple[ 0 ] ] = function() {\n\t\t\t\tdeferred[ tuple[ 0 ] + \"With\" ]( this === deferred ? undefined : this, arguments );\n\t\t\t\treturn this;\n\t\t\t};\n\n\t\t\t// deferred.notifyWith = list.fireWith\n\t\t\t// deferred.resolveWith = list.fireWith\n\t\t\t// deferred.rejectWith = list.fireWith\n\t\t\tdeferred[ tuple[ 0 ] + \"With\" ] = list.fireWith;\n\t\t} );\n\n\t\t// Make the deferred a promise\n\t\tpromise.promise( deferred );\n\n\t\t// Call given func if any\n\t\tif ( func ) {\n\t\t\tfunc.call( deferred, deferred );\n\t\t}\n\n\t\t// All done!\n\t\treturn deferred;\n\t},\n\n\t// Deferred helper\n\twhen: function( singleValue ) {\n\t\tvar\n\n\t\t\t// count of uncompleted subordinates\n\t\t\tremaining = arguments.length,\n\n\t\t\t// count of unprocessed arguments\n\t\t\ti = remaining,\n\n\t\t\t// subordinate fulfillment data\n\t\t\tresolveContexts = Array( i ),\n\t\t\tresolveValues = slice.call( arguments ),\n\n\t\t\t// the master Deferred\n\t\t\tmaster = jQuery.Deferred(),\n\n\t\t\t// subordinate callback factory\n\t\t\tupdateFunc = function( i ) {\n\t\t\t\treturn function( value ) {\n\t\t\t\t\tresolveContexts[ i ] = this;\n\t\t\t\t\tresolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value;\n\t\t\t\t\tif ( !( --remaining ) ) {\n\t\t\t\t\t\tmaster.resolveWith( resolveContexts, resolveValues );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t};\n\n\t\t// Single- and empty arguments are adopted like Promise.resolve\n\t\tif ( remaining <= 1 ) {\n\t\t\tadoptValue( singleValue, master.done( updateFunc( i ) ).resolve, master.reject,\n\t\t\t\t!remaining );\n\n\t\t\t// Use .then() to unwrap secondary thenables (cf. gh-3000)\n\t\t\tif ( master.state() === \"pending\" ||\n\t\t\t\tisFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) {\n\n\t\t\t\treturn master.then();\n\t\t\t}\n\t\t}\n\n\t\t// Multiple arguments are aggregated like Promise.all array elements\n\t\twhile ( i-- ) {\n\t\t\tadoptValue( resolveValues[ i ], updateFunc( i ), master.reject );\n\t\t}\n\n\t\treturn master.promise();\n\t}\n} );\n\n\n// These usually indicate a programmer mistake during development,\n// warn about them ASAP rather than swallowing them by default.\nvar rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;\n\njQuery.Deferred.exceptionHook = function( error, stack ) {\n\n\t// Support: IE 8 - 9 only\n\t// Console exists when dev tools are open, which can happen at any time\n\tif ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) {\n\t\twindow.console.warn( \"jQuery.Deferred exception: \" + error.message, error.stack, stack );\n\t}\n};\n\n\n\n\njQuery.readyException = function( error ) {\n\twindow.setTimeout( function() {\n\t\tthrow error;\n\t} );\n};\n\n\n\n\n// The deferred used on DOM ready\nvar readyList = jQuery.Deferred();\n\njQuery.fn.ready = function( fn ) {\n\n\treadyList\n\t\t.then( fn )\n\n\t\t// Wrap jQuery.readyException in a function so that the lookup\n\t\t// happens at the time of error handling instead of callback\n\t\t// registration.\n\t\t.catch( function( error ) {\n\t\t\tjQuery.readyException( error );\n\t\t} );\n\n\treturn this;\n};\n\njQuery.extend( {\n\n\t// Is the DOM ready to be used? Set to true once it occurs.\n\tisReady: false,\n\n\t// A counter to track how many items to wait for before\n\t// the ready event fires. See #6781\n\treadyWait: 1,\n\n\t// Handle when the DOM is ready\n\tready: function( wait ) {\n\n\t\t// Abort if there are pending holds or we're already ready\n\t\tif ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Remember that the DOM is ready\n\t\tjQuery.isReady = true;\n\n\t\t// If a normal DOM Ready event fired, decrement, and wait if need be\n\t\tif ( wait !== true && --jQuery.readyWait > 0 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// If there are functions bound, to execute\n\t\treadyList.resolveWith( document, [ jQuery ] );\n\t}\n} );\n\njQuery.ready.then = readyList.then;\n\n// The ready event handler and self cleanup method\nfunction completed() {\n\tdocument.removeEventListener( \"DOMContentLoaded\", completed );\n\twindow.removeEventListener( \"load\", completed );\n\tjQuery.ready();\n}\n\n// Catch cases where $(document).ready() is called\n// after the browser event has already occurred.\n// Support: IE <=9 - 10 only\n// Older IE sometimes signals \"interactive\" too soon\nif ( document.readyState === \"complete\" ||\n\t( document.readyState !== \"loading\" && !document.documentElement.doScroll ) ) {\n\n\t// Handle it asynchronously to allow scripts the opportunity to delay ready\n\twindow.setTimeout( jQuery.ready );\n\n} else {\n\n\t// Use the handy event callback\n\tdocument.addEventListener( \"DOMContentLoaded\", completed );\n\n\t// A fallback to window.onload, that will always work\n\twindow.addEventListener( \"load\", completed );\n}\n\n\n\n\n// Multifunctional method to get and set values of a collection\n// The value/s can optionally be executed if it's a function\nvar access = function( elems, fn, key, value, chainable, emptyGet, raw ) {\n\tvar i = 0,\n\t\tlen = elems.length,\n\t\tbulk = key == null;\n\n\t// Sets many values\n\tif ( toType( key ) === \"object\" ) {\n\t\tchainable = true;\n\t\tfor ( i in key ) {\n\t\t\taccess( elems, fn, i, key[ i ], true, emptyGet, raw );\n\t\t}\n\n\t// Sets one value\n\t} else if ( value !== undefined ) {\n\t\tchainable = true;\n\n\t\tif ( !isFunction( value ) ) {\n\t\t\traw = true;\n\t\t}\n\n\t\tif ( bulk ) {\n\n\t\t\t// Bulk operations run against the entire set\n\t\t\tif ( raw ) {\n\t\t\t\tfn.call( elems, value );\n\t\t\t\tfn = null;\n\n\t\t\t// ...except when executing function values\n\t\t\t} else {\n\t\t\t\tbulk = fn;\n\t\t\t\tfn = function( elem, key, value ) {\n\t\t\t\t\treturn bulk.call( jQuery( elem ), value );\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\tif ( fn ) {\n\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\tfn(\n\t\t\t\t\telems[ i ], key, raw ?\n\t\t\t\t\tvalue :\n\t\t\t\t\tvalue.call( elems[ i ], i, fn( elems[ i ], key ) )\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( chainable ) {\n\t\treturn elems;\n\t}\n\n\t// Gets\n\tif ( bulk ) {\n\t\treturn fn.call( elems );\n\t}\n\n\treturn len ? fn( elems[ 0 ], key ) : emptyGet;\n};\n\n\n// Matches dashed string for camelizing\nvar rmsPrefix = /^-ms-/,\n\trdashAlpha = /-([a-z])/g;\n\n// Used by camelCase as callback to replace()\nfunction fcamelCase( all, letter ) {\n\treturn letter.toUpperCase();\n}\n\n// Convert dashed to camelCase; used by the css and data modules\n// Support: IE <=9 - 11, Edge 12 - 15\n// Microsoft forgot to hump their vendor prefix (#9572)\nfunction camelCase( string ) {\n\treturn string.replace( rmsPrefix, \"ms-\" ).replace( rdashAlpha, fcamelCase );\n}\nvar acceptData = function( owner ) {\n\n\t// Accepts only:\n\t// - Node\n\t// - Node.ELEMENT_NODE\n\t// - Node.DOCUMENT_NODE\n\t// - Object\n\t// - Any\n\treturn owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType );\n};\n\n\n\n\nfunction Data() {\n\tthis.expando = jQuery.expando + Data.uid++;\n}\n\nData.uid = 1;\n\nData.prototype = {\n\n\tcache: function( owner ) {\n\n\t\t// Check if the owner object already has a cache\n\t\tvar value = owner[ this.expando ];\n\n\t\t// If not, create one\n\t\tif ( !value ) {\n\t\t\tvalue = {};\n\n\t\t\t// We can accept data for non-element nodes in modern browsers,\n\t\t\t// but we should not, see #8335.\n\t\t\t// Always return an empty object.\n\t\t\tif ( acceptData( owner ) ) {\n\n\t\t\t\t// If it is a node unlikely to be stringify-ed or looped over\n\t\t\t\t// use plain assignment\n\t\t\t\tif ( owner.nodeType ) {\n\t\t\t\t\towner[ this.expando ] = value;\n\n\t\t\t\t// Otherwise secure it in a non-enumerable property\n\t\t\t\t// configurable must be true to allow the property to be\n\t\t\t\t// deleted when data is removed\n\t\t\t\t} else {\n\t\t\t\t\tObject.defineProperty( owner, this.expando, {\n\t\t\t\t\t\tvalue: value,\n\t\t\t\t\t\tconfigurable: true\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn value;\n\t},\n\tset: function( owner, data, value ) {\n\t\tvar prop,\n\t\t\tcache = this.cache( owner );\n\n\t\t// Handle: [ owner, key, value ] args\n\t\t// Always use camelCase key (gh-2257)\n\t\tif ( typeof data === \"string\" ) {\n\t\t\tcache[ camelCase( data ) ] = value;\n\n\t\t// Handle: [ owner, { properties } ] args\n\t\t} else {\n\n\t\t\t// Copy the properties one-by-one to the cache object\n\t\t\tfor ( prop in data ) {\n\t\t\t\tcache[ camelCase( prop ) ] = data[ prop ];\n\t\t\t}\n\t\t}\n\t\treturn cache;\n\t},\n\tget: function( owner, key ) {\n\t\treturn key === undefined ?\n\t\t\tthis.cache( owner ) :\n\n\t\t\t// Always use camelCase key (gh-2257)\n\t\t\towner[ this.expando ] && owner[ this.expando ][ camelCase( key ) ];\n\t},\n\taccess: function( owner, key, value ) {\n\n\t\t// In cases where either:\n\t\t//\n\t\t// 1. No key was specified\n\t\t// 2. A string key was specified, but no value provided\n\t\t//\n\t\t// Take the \"read\" path and allow the get method to determine\n\t\t// which value to return, respectively either:\n\t\t//\n\t\t// 1. The entire cache object\n\t\t// 2. The data stored at the key\n\t\t//\n\t\tif ( key === undefined ||\n\t\t\t\t( ( key && typeof key === \"string\" ) && value === undefined ) ) {\n\n\t\t\treturn this.get( owner, key );\n\t\t}\n\n\t\t// When the key is not a string, or both a key and value\n\t\t// are specified, set or extend (existing objects) with either:\n\t\t//\n\t\t// 1. An object of properties\n\t\t// 2. A key and value\n\t\t//\n\t\tthis.set( owner, key, value );\n\n\t\t// Since the \"set\" path can have two possible entry points\n\t\t// return the expected data based on which path was taken[*]\n\t\treturn value !== undefined ? value : key;\n\t},\n\tremove: function( owner, key ) {\n\t\tvar i,\n\t\t\tcache = owner[ this.expando ];\n\n\t\tif ( cache === undefined ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( key !== undefined ) {\n\n\t\t\t// Support array or space separated string of keys\n\t\t\tif ( Array.isArray( key ) ) {\n\n\t\t\t\t// If key is an array of keys...\n\t\t\t\t// We always set camelCase keys, so remove that.\n\t\t\t\tkey = key.map( camelCase );\n\t\t\t} else {\n\t\t\t\tkey = camelCase( key );\n\n\t\t\t\t// If a key with the spaces exists, use it.\n\t\t\t\t// Otherwise, create an array by matching non-whitespace\n\t\t\t\tkey = key in cache ?\n\t\t\t\t\t[ key ] :\n\t\t\t\t\t( key.match( rnothtmlwhite ) || [] );\n\t\t\t}\n\n\t\t\ti = key.length;\n\n\t\t\twhile ( i-- ) {\n\t\t\t\tdelete cache[ key[ i ] ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove the expando if there's no more data\n\t\tif ( key === undefined || jQuery.isEmptyObject( cache ) ) {\n\n\t\t\t// Support: Chrome <=35 - 45\n\t\t\t// Webkit & Blink performance suffers when deleting properties\n\t\t\t// from DOM nodes, so set to undefined instead\n\t\t\t// https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted)\n\t\t\tif ( owner.nodeType ) {\n\t\t\t\towner[ this.expando ] = undefined;\n\t\t\t} else {\n\t\t\t\tdelete owner[ this.expando ];\n\t\t\t}\n\t\t}\n\t},\n\thasData: function( owner ) {\n\t\tvar cache = owner[ this.expando ];\n\t\treturn cache !== undefined && !jQuery.isEmptyObject( cache );\n\t}\n};\nvar dataPriv = new Data();\n\nvar dataUser = new Data();\n\n\n\n//\tImplementation Summary\n//\n//\t1. Enforce API surface and semantic compatibility with 1.9.x branch\n//\t2. Improve the module's maintainability by reducing the storage\n//\t\tpaths to a single mechanism.\n//\t3. Use the same single mechanism to support \"private\" and \"user\" data.\n//\t4. _Never_ expose \"private\" data to user code (TODO: Drop _data, _removeData)\n//\t5. Avoid exposing implementation details on user objects (eg. expando properties)\n//\t6. Provide a clear path for implementation upgrade to WeakMap in 2014\n\nvar rbrace = /^(?:\\{[\\w\\W]*\\}|\\[[\\w\\W]*\\])$/,\n\trmultiDash = /[A-Z]/g;\n\nfunction getData( data ) {\n\tif ( data === \"true\" ) {\n\t\treturn true;\n\t}\n\n\tif ( data === \"false\" ) {\n\t\treturn false;\n\t}\n\n\tif ( data === \"null\" ) {\n\t\treturn null;\n\t}\n\n\t// Only convert to a number if it doesn't change the string\n\tif ( data === +data + \"\" ) {\n\t\treturn +data;\n\t}\n\n\tif ( rbrace.test( data ) ) {\n\t\treturn JSON.parse( data );\n\t}\n\n\treturn data;\n}\n\nfunction dataAttr( elem, key, data ) {\n\tvar name;\n\n\t// If nothing was found internally, try to fetch any\n\t// data from the HTML5 data-* attribute\n\tif ( data === undefined && elem.nodeType === 1 ) {\n\t\tname = \"data-\" + key.replace( rmultiDash, \"-$&\" ).toLowerCase();\n\t\tdata = elem.getAttribute( name );\n\n\t\tif ( typeof data === \"string\" ) {\n\t\t\ttry {\n\t\t\t\tdata = getData( data );\n\t\t\t} catch ( e ) {}\n\n\t\t\t// Make sure we set the data so it isn't changed later\n\t\t\tdataUser.set( elem, key, data );\n\t\t} else {\n\t\t\tdata = undefined;\n\t\t}\n\t}\n\treturn data;\n}\n\njQuery.extend( {\n\thasData: function( elem ) {\n\t\treturn dataUser.hasData( elem ) || dataPriv.hasData( elem );\n\t},\n\n\tdata: function( elem, name, data ) {\n\t\treturn dataUser.access( elem, name, data );\n\t},\n\n\tremoveData: function( elem, name ) {\n\t\tdataUser.remove( elem, name );\n\t},\n\n\t// TODO: Now that all calls to _data and _removeData have been replaced\n\t// with direct calls to dataPriv methods, these can be deprecated.\n\t_data: function( elem, name, data ) {\n\t\treturn dataPriv.access( elem, name, data );\n\t},\n\n\t_removeData: function( elem, name ) {\n\t\tdataPriv.remove( elem, name );\n\t}\n} );\n\njQuery.fn.extend( {\n\tdata: function( key, value ) {\n\t\tvar i, name, data,\n\t\t\telem = this[ 0 ],\n\t\t\tattrs = elem && elem.attributes;\n\n\t\t// Gets all values\n\t\tif ( key === undefined ) {\n\t\t\tif ( this.length ) {\n\t\t\t\tdata = dataUser.get( elem );\n\n\t\t\t\tif ( elem.nodeType === 1 && !dataPriv.get( elem, \"hasDataAttrs\" ) ) {\n\t\t\t\t\ti = attrs.length;\n\t\t\t\t\twhile ( i-- ) {\n\n\t\t\t\t\t\t// Support: IE 11 only\n\t\t\t\t\t\t// The attrs elements can be null (#14894)\n\t\t\t\t\t\tif ( attrs[ i ] ) {\n\t\t\t\t\t\t\tname = attrs[ i ].name;\n\t\t\t\t\t\t\tif ( name.indexOf( \"data-\" ) === 0 ) {\n\t\t\t\t\t\t\t\tname = camelCase( name.slice( 5 ) );\n\t\t\t\t\t\t\t\tdataAttr( elem, name, data[ name ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tdataPriv.set( elem, \"hasDataAttrs\", true );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn data;\n\t\t}\n\n\t\t// Sets multiple values\n\t\tif ( typeof key === \"object\" ) {\n\t\t\treturn this.each( function() {\n\t\t\t\tdataUser.set( this, key );\n\t\t\t} );\n\t\t}\n\n\t\treturn access( this, function( value ) {\n\t\t\tvar data;\n\n\t\t\t// The calling jQuery object (element matches) is not empty\n\t\t\t// (and therefore has an element appears at this[ 0 ]) and the\n\t\t\t// `value` parameter was not undefined. An empty jQuery object\n\t\t\t// will result in `undefined` for elem = this[ 0 ] which will\n\t\t\t// throw an exception if an attempt to read a data cache is made.\n\t\t\tif ( elem && value === undefined ) {\n\n\t\t\t\t// Attempt to get data from the cache\n\t\t\t\t// The key will always be camelCased in Data\n\t\t\t\tdata = dataUser.get( elem, key );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// Attempt to \"discover\" the data in\n\t\t\t\t// HTML5 custom data-* attrs\n\t\t\t\tdata = dataAttr( elem, key );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// We tried really hard, but the data doesn't exist.\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Set the data...\n\t\t\tthis.each( function() {\n\n\t\t\t\t// We always store the camelCased key\n\t\t\t\tdataUser.set( this, key, value );\n\t\t\t} );\n\t\t}, null, value, arguments.length > 1, null, true );\n\t},\n\n\tremoveData: function( key ) {\n\t\treturn this.each( function() {\n\t\t\tdataUser.remove( this, key );\n\t\t} );\n\t}\n} );\n\n\njQuery.extend( {\n\tqueue: function( elem, type, data ) {\n\t\tvar queue;\n\n\t\tif ( elem ) {\n\t\t\ttype = ( type || \"fx\" ) + \"queue\";\n\t\t\tqueue = dataPriv.get( elem, type );\n\n\t\t\t// Speed up dequeue by getting out quickly if this is just a lookup\n\t\t\tif ( data ) {\n\t\t\t\tif ( !queue || Array.isArray( data ) ) {\n\t\t\t\t\tqueue = dataPriv.access( elem, type, jQuery.makeArray( data ) );\n\t\t\t\t} else {\n\t\t\t\t\tqueue.push( data );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn queue || [];\n\t\t}\n\t},\n\n\tdequeue: function( elem, type ) {\n\t\ttype = type || \"fx\";\n\n\t\tvar queue = jQuery.queue( elem, type ),\n\t\t\tstartLength = queue.length,\n\t\t\tfn = queue.shift(),\n\t\t\thooks = jQuery._queueHooks( elem, type ),\n\t\t\tnext = function() {\n\t\t\t\tjQuery.dequeue( elem, type );\n\t\t\t};\n\n\t\t// If the fx queue is dequeued, always remove the progress sentinel\n\t\tif ( fn === \"inprogress\" ) {\n\t\t\tfn = queue.shift();\n\t\t\tstartLength--;\n\t\t}\n\n\t\tif ( fn ) {\n\n\t\t\t// Add a progress sentinel to prevent the fx queue from being\n\t\t\t// automatically dequeued\n\t\t\tif ( type === \"fx\" ) {\n\t\t\t\tqueue.unshift( \"inprogress\" );\n\t\t\t}\n\n\t\t\t// Clear up the last queue stop function\n\t\t\tdelete hooks.stop;\n\t\t\tfn.call( elem, next, hooks );\n\t\t}\n\n\t\tif ( !startLength && hooks ) {\n\t\t\thooks.empty.fire();\n\t\t}\n\t},\n\n\t// Not public - generate a queueHooks object, or return the current one\n\t_queueHooks: function( elem, type ) {\n\t\tvar key = type + \"queueHooks\";\n\t\treturn dataPriv.get( elem, key ) || dataPriv.access( elem, key, {\n\t\t\tempty: jQuery.Callbacks( \"once memory\" ).add( function() {\n\t\t\t\tdataPriv.remove( elem, [ type + \"queue\", key ] );\n\t\t\t} )\n\t\t} );\n\t}\n} );\n\njQuery.fn.extend( {\n\tqueue: function( type, data ) {\n\t\tvar setter = 2;\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tdata = type;\n\t\t\ttype = \"fx\";\n\t\t\tsetter--;\n\t\t}\n\n\t\tif ( arguments.length < setter ) {\n\t\t\treturn jQuery.queue( this[ 0 ], type );\n\t\t}\n\n\t\treturn data === undefined ?\n\t\t\tthis :\n\t\t\tthis.each( function() {\n\t\t\t\tvar queue = jQuery.queue( this, type, data );\n\n\t\t\t\t// Ensure a hooks for this queue\n\t\t\t\tjQuery._queueHooks( this, type );\n\n\t\t\t\tif ( type === \"fx\" && queue[ 0 ] !== \"inprogress\" ) {\n\t\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t\t}\n\t\t\t} );\n\t},\n\tdequeue: function( type ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.dequeue( this, type );\n\t\t} );\n\t},\n\tclearQueue: function( type ) {\n\t\treturn this.queue( type || \"fx\", [] );\n\t},\n\n\t// Get a promise resolved when queues of a certain type\n\t// are emptied (fx is the type by default)\n\tpromise: function( type, obj ) {\n\t\tvar tmp,\n\t\t\tcount = 1,\n\t\t\tdefer = jQuery.Deferred(),\n\t\t\telements = this,\n\t\t\ti = this.length,\n\t\t\tresolve = function() {\n\t\t\t\tif ( !( --count ) ) {\n\t\t\t\t\tdefer.resolveWith( elements, [ elements ] );\n\t\t\t\t}\n\t\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tobj = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\ttype = type || \"fx\";\n\n\t\twhile ( i-- ) {\n\t\t\ttmp = dataPriv.get( elements[ i ], type + \"queueHooks\" );\n\t\t\tif ( tmp && tmp.empty ) {\n\t\t\t\tcount++;\n\t\t\t\ttmp.empty.add( resolve );\n\t\t\t}\n\t\t}\n\t\tresolve();\n\t\treturn defer.promise( obj );\n\t}\n} );\nvar pnum = ( /[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/ ).source;\n\nvar rcssNum = new RegExp( \"^(?:([+-])=|)(\" + pnum + \")([a-z%]*)$\", \"i\" );\n\n\nvar cssExpand = [ \"Top\", \"Right\", \"Bottom\", \"Left\" ];\n\nvar isHiddenWithinTree = function( elem, el ) {\n\n\t\t// isHiddenWithinTree might be called from jQuery#filter function;\n\t\t// in that case, element will be second argument\n\t\telem = el || elem;\n\n\t\t// Inline style trumps all\n\t\treturn elem.style.display === \"none\" ||\n\t\t\telem.style.display === \"\" &&\n\n\t\t\t// Otherwise, check computed style\n\t\t\t// Support: Firefox <=43 - 45\n\t\t\t// Disconnected elements can have computed display: none, so first confirm that elem is\n\t\t\t// in the document.\n\t\t\tjQuery.contains( elem.ownerDocument, elem ) &&\n\n\t\t\tjQuery.css( elem, \"display\" ) === \"none\";\n\t};\n\nvar swap = function( elem, options, callback, args ) {\n\tvar ret, name,\n\t\told = {};\n\n\t// Remember the old values, and insert the new ones\n\tfor ( name in options ) {\n\t\told[ name ] = elem.style[ name ];\n\t\telem.style[ name ] = options[ name ];\n\t}\n\n\tret = callback.apply( elem, args || [] );\n\n\t// Revert the old values\n\tfor ( name in options ) {\n\t\telem.style[ name ] = old[ name ];\n\t}\n\n\treturn ret;\n};\n\n\n\n\nfunction adjustCSS( elem, prop, valueParts, tween ) {\n\tvar adjusted, scale,\n\t\tmaxIterations = 20,\n\t\tcurrentValue = tween ?\n\t\t\tfunction() {\n\t\t\t\treturn tween.cur();\n\t\t\t} :\n\t\t\tfunction() {\n\t\t\t\treturn jQuery.css( elem, prop, \"\" );\n\t\t\t},\n\t\tinitial = currentValue(),\n\t\tunit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? \"\" : \"px\" ),\n\n\t\t// Starting value computation is required for potential unit mismatches\n\t\tinitialInUnit = ( jQuery.cssNumber[ prop ] || unit !== \"px\" && +initial ) &&\n\t\t\trcssNum.exec( jQuery.css( elem, prop ) );\n\n\tif ( initialInUnit && initialInUnit[ 3 ] !== unit ) {\n\n\t\t// Support: Firefox <=54\n\t\t// Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144)\n\t\tinitial = initial / 2;\n\n\t\t// Trust units reported by jQuery.css\n\t\tunit = unit || initialInUnit[ 3 ];\n\n\t\t// Iteratively approximate from a nonzero starting point\n\t\tinitialInUnit = +initial || 1;\n\n\t\twhile ( maxIterations-- ) {\n\n\t\t\t// Evaluate and update our best guess (doubling guesses that zero out).\n\t\t\t// Finish if the scale equals or crosses 1 (making the old*new product non-positive).\n\t\t\tjQuery.style( elem, prop, initialInUnit + unit );\n\t\t\tif ( ( 1 - scale ) * ( 1 - ( scale = currentValue() / initial || 0.5 ) ) <= 0 ) {\n\t\t\t\tmaxIterations = 0;\n\t\t\t}\n\t\t\tinitialInUnit = initialInUnit / scale;\n\n\t\t}\n\n\t\tinitialInUnit = initialInUnit * 2;\n\t\tjQuery.style( elem, prop, initialInUnit + unit );\n\n\t\t// Make sure we update the tween properties later on\n\t\tvalueParts = valueParts || [];\n\t}\n\n\tif ( valueParts ) {\n\t\tinitialInUnit = +initialInUnit || +initial || 0;\n\n\t\t// Apply relative offset (+=/-=) if specified\n\t\tadjusted = valueParts[ 1 ] ?\n\t\t\tinitialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] :\n\t\t\t+valueParts[ 2 ];\n\t\tif ( tween ) {\n\t\t\ttween.unit = unit;\n\t\t\ttween.start = initialInUnit;\n\t\t\ttween.end = adjusted;\n\t\t}\n\t}\n\treturn adjusted;\n}\n\n\nvar defaultDisplayMap = {};\n\nfunction getDefaultDisplay( elem ) {\n\tvar temp,\n\t\tdoc = elem.ownerDocument,\n\t\tnodeName = elem.nodeName,\n\t\tdisplay = defaultDisplayMap[ nodeName ];\n\n\tif ( display ) {\n\t\treturn display;\n\t}\n\n\ttemp = doc.body.appendChild( doc.createElement( nodeName ) );\n\tdisplay = jQuery.css( temp, \"display\" );\n\n\ttemp.parentNode.removeChild( temp );\n\n\tif ( display === \"none\" ) {\n\t\tdisplay = \"block\";\n\t}\n\tdefaultDisplayMap[ nodeName ] = display;\n\n\treturn display;\n}\n\nfunction showHide( elements, show ) {\n\tvar display, elem,\n\t\tvalues = [],\n\t\tindex = 0,\n\t\tlength = elements.length;\n\n\t// Determine new display value for elements that need to change\n\tfor ( ; index < length; index++ ) {\n\t\telem = elements[ index ];\n\t\tif ( !elem.style ) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tdisplay = elem.style.display;\n\t\tif ( show ) {\n\n\t\t\t// Since we force visibility upon cascade-hidden elements, an immediate (and slow)\n\t\t\t// check is required in this first loop unless we have a nonempty display value (either\n\t\t\t// inline or about-to-be-restored)\n\t\t\tif ( display === \"none\" ) {\n\t\t\t\tvalues[ index ] = dataPriv.get( elem, \"display\" ) || null;\n\t\t\t\tif ( !values[ index ] ) {\n\t\t\t\t\telem.style.display = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ( elem.style.display === \"\" && isHiddenWithinTree( elem ) ) {\n\t\t\t\tvalues[ index ] = getDefaultDisplay( elem );\n\t\t\t}\n\t\t} else {\n\t\t\tif ( display !== \"none\" ) {\n\t\t\t\tvalues[ index ] = \"none\";\n\n\t\t\t\t// Remember what we're overwriting\n\t\t\t\tdataPriv.set( elem, \"display\", display );\n\t\t\t}\n\t\t}\n\t}\n\n\t// Set the display of the elements in a second loop to avoid constant reflow\n\tfor ( index = 0; index < length; index++ ) {\n\t\tif ( values[ index ] != null ) {\n\t\t\telements[ index ].style.display = values[ index ];\n\t\t}\n\t}\n\n\treturn elements;\n}\n\njQuery.fn.extend( {\n\tshow: function() {\n\t\treturn showHide( this, true );\n\t},\n\thide: function() {\n\t\treturn showHide( this );\n\t},\n\ttoggle: function( state ) {\n\t\tif ( typeof state === \"boolean\" ) {\n\t\t\treturn state ? this.show() : this.hide();\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tif ( isHiddenWithinTree( this ) ) {\n\t\t\t\tjQuery( this ).show();\n\t\t\t} else {\n\t\t\t\tjQuery( this ).hide();\n\t\t\t}\n\t\t} );\n\t}\n} );\nvar rcheckableType = ( /^(?:checkbox|radio)$/i );\n\nvar rtagName = ( /<([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]+)/i );\n\nvar rscriptType = ( /^$|^module$|\\/(?:java|ecma)script/i );\n\n\n\n// We have to close these tags to support XHTML (#13200)\nvar wrapMap = {\n\n\t// Support: IE <=9 only\n\toption: [ 1, \"<select multiple='multiple'>\", \"</select>\" ],\n\n\t// XHTML parsers do not magically insert elements in the\n\t// same way that tag soup parsers do. So we cannot shorten\n\t// this by omitting <tbody> or other required elements.\n\tthead: [ 1, \"<table>\", \"</table>\" ],\n\tcol: [ 2, \"<table><colgroup>\", \"</colgroup></table>\" ],\n\ttr: [ 2, \"<table><tbody>\", \"</tbody></table>\" ],\n\ttd: [ 3, \"<table><tbody><tr>\", \"</tr></tbody></table>\" ],\n\n\t_default: [ 0, \"\", \"\" ]\n};\n\n// Support: IE <=9 only\nwrapMap.optgroup = wrapMap.option;\n\nwrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;\nwrapMap.th = wrapMap.td;\n\n\nfunction getAll( context, tag ) {\n\n\t// Support: IE <=9 - 11 only\n\t// Use typeof to avoid zero-argument method invocation on host objects (#15151)\n\tvar ret;\n\n\tif ( typeof context.getElementsByTagName !== \"undefined\" ) {\n\t\tret = context.getElementsByTagName( tag || \"*\" );\n\n\t} else if ( typeof context.querySelectorAll !== \"undefined\" ) {\n\t\tret = context.querySelectorAll( tag || \"*\" );\n\n\t} else {\n\t\tret = [];\n\t}\n\n\tif ( tag === undefined || tag && nodeName( context, tag ) ) {\n\t\treturn jQuery.merge( [ context ], ret );\n\t}\n\n\treturn ret;\n}\n\n\n// Mark scripts as having already been evaluated\nfunction setGlobalEval( elems, refElements ) {\n\tvar i = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\tdataPriv.set(\n\t\t\telems[ i ],\n\t\t\t\"globalEval\",\n\t\t\t!refElements || dataPriv.get( refElements[ i ], \"globalEval\" )\n\t\t);\n\t}\n}\n\n\nvar rhtml = /<|&#?\\w+;/;\n\nfunction buildFragment( elems, context, scripts, selection, ignored ) {\n\tvar elem, tmp, tag, wrap, contains, j,\n\t\tfragment = context.createDocumentFragment(),\n\t\tnodes = [],\n\t\ti = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\telem = elems[ i ];\n\n\t\tif ( elem || elem === 0 ) {\n\n\t\t\t// Add nodes directly\n\t\t\tif ( toType( elem ) === \"object\" ) {\n\n\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\tjQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );\n\n\t\t\t// Convert non-html into a text node\n\t\t\t} else if ( !rhtml.test( elem ) ) {\n\t\t\t\tnodes.push( context.createTextNode( elem ) );\n\n\t\t\t// Convert html into DOM nodes\n\t\t\t} else {\n\t\t\t\ttmp = tmp || fragment.appendChild( context.createElement( \"div\" ) );\n\n\t\t\t\t// Deserialize a standard representation\n\t\t\t\ttag = ( rtagName.exec( elem ) || [ \"\", \"\" ] )[ 1 ].toLowerCase();\n\t\t\t\twrap = wrapMap[ tag ] || wrapMap._default;\n\t\t\t\ttmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ];\n\n\t\t\t\t// Descend through wrappers to the right content\n\t\t\t\tj = wrap[ 0 ];\n\t\t\t\twhile ( j-- ) {\n\t\t\t\t\ttmp = tmp.lastChild;\n\t\t\t\t}\n\n\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\tjQuery.merge( nodes, tmp.childNodes );\n\n\t\t\t\t// Remember the top-level container\n\t\t\t\ttmp = fragment.firstChild;\n\n\t\t\t\t// Ensure the created nodes are orphaned (#12392)\n\t\t\t\ttmp.textContent = \"\";\n\t\t\t}\n\t\t}\n\t}\n\n\t// Remove wrapper from fragment\n\tfragment.textContent = \"\";\n\n\ti = 0;\n\twhile ( ( elem = nodes[ i++ ] ) ) {\n\n\t\t// Skip elements already in the context collection (trac-4087)\n\t\tif ( selection && jQuery.inArray( elem, selection ) > -1 ) {\n\t\t\tif ( ignored ) {\n\t\t\t\tignored.push( elem );\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\n\t\tcontains = jQuery.contains( elem.ownerDocument, elem );\n\n\t\t// Append to fragment\n\t\ttmp = getAll( fragment.appendChild( elem ), \"script\" );\n\n\t\t// Preserve script evaluation history\n\t\tif ( contains ) {\n\t\t\tsetGlobalEval( tmp );\n\t\t}\n\n\t\t// Capture executables\n\t\tif ( scripts ) {\n\t\t\tj = 0;\n\t\t\twhile ( ( elem = tmp[ j++ ] ) ) {\n\t\t\t\tif ( rscriptType.test( elem.type || \"\" ) ) {\n\t\t\t\t\tscripts.push( elem );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn fragment;\n}\n\n\n( function() {\n\tvar fragment = document.createDocumentFragment(),\n\t\tdiv = fragment.appendChild( document.createElement( \"div\" ) ),\n\t\tinput = document.createElement( \"input\" );\n\n\t// Support: Android 4.0 - 4.3 only\n\t// Check state lost if the name is set (#11217)\n\t// Support: Windows Web Apps (WWA)\n\t// `name` and `type` must use .setAttribute for WWA (#14901)\n\tinput.setAttribute( \"type\", \"radio\" );\n\tinput.setAttribute( \"checked\", \"checked\" );\n\tinput.setAttribute( \"name\", \"t\" );\n\n\tdiv.appendChild( input );\n\n\t// Support: Android <=4.1 only\n\t// Older WebKit doesn't clone checked state correctly in fragments\n\tsupport.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked;\n\n\t// Support: IE <=11 only\n\t// Make sure textarea (and checkbox) defaultValue is properly cloned\n\tdiv.innerHTML = \"<textarea>x</textarea>\";\n\tsupport.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue;\n} )();\nvar documentElement = document.documentElement;\n\n\n\nvar\n\trkeyEvent = /^key/,\n\trmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/,\n\trtypenamespace = /^([^.]*)(?:\\.(.+)|)/;\n\nfunction returnTrue() {\n\treturn true;\n}\n\nfunction returnFalse() {\n\treturn false;\n}\n\n// Support: IE <=9 only\n// See #13393 for more info\nfunction safeActiveElement() {\n\ttry {\n\t\treturn document.activeElement;\n\t} catch ( err ) { }\n}\n\nfunction on( elem, types, selector, data, fn, one ) {\n\tvar origFn, type;\n\n\t// Types can be a map of types/handlers\n\tif ( typeof types === \"object\" ) {\n\n\t\t// ( types-Object, selector, data )\n\t\tif ( typeof selector !== \"string\" ) {\n\n\t\t\t// ( types-Object, data )\n\t\t\tdata = data || selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tfor ( type in types ) {\n\t\t\ton( elem, type, selector, data, types[ type ], one );\n\t\t}\n\t\treturn elem;\n\t}\n\n\tif ( data == null && fn == null ) {\n\n\t\t// ( types, fn )\n\t\tfn = selector;\n\t\tdata = selector = undefined;\n\t} else if ( fn == null ) {\n\t\tif ( typeof selector === \"string\" ) {\n\n\t\t\t// ( types, selector, fn )\n\t\t\tfn = data;\n\t\t\tdata = undefined;\n\t\t} else {\n\n\t\t\t// ( types, data, fn )\n\t\t\tfn = data;\n\t\t\tdata = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t}\n\tif ( fn === false ) {\n\t\tfn = returnFalse;\n\t} else if ( !fn ) {\n\t\treturn elem;\n\t}\n\n\tif ( one === 1 ) {\n\t\torigFn = fn;\n\t\tfn = function( event ) {\n\n\t\t\t// Can use an empty set, since event contains the info\n\t\t\tjQuery().off( event );\n\t\t\treturn origFn.apply( this, arguments );\n\t\t};\n\n\t\t// Use same guid so caller can remove using origFn\n\t\tfn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );\n\t}\n\treturn elem.each( function() {\n\t\tjQuery.event.add( this, types, fn, data, selector );\n\t} );\n}\n\n/*\n * Helper functions for managing events -- not part of the public interface.\n * Props to Dean Edwards' addEvent library for many of the ideas.\n */\njQuery.event = {\n\n\tglobal: {},\n\n\tadd: function( elem, types, handler, data, selector ) {\n\n\t\tvar handleObjIn, eventHandle, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = dataPriv.get( elem );\n\n\t\t// Don't attach events to noData or text/comment nodes (but allow plain objects)\n\t\tif ( !elemData ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Caller can pass in an object of custom data in lieu of the handler\n\t\tif ( handler.handler ) {\n\t\t\thandleObjIn = handler;\n\t\t\thandler = handleObjIn.handler;\n\t\t\tselector = handleObjIn.selector;\n\t\t}\n\n\t\t// Ensure that invalid selectors throw exceptions at attach time\n\t\t// Evaluate against documentElement in case elem is a non-element node (e.g., document)\n\t\tif ( selector ) {\n\t\t\tjQuery.find.matchesSelector( documentElement, selector );\n\t\t}\n\n\t\t// Make sure that the handler has a unique ID, used to find/remove it later\n\t\tif ( !handler.guid ) {\n\t\t\thandler.guid = jQuery.guid++;\n\t\t}\n\n\t\t// Init the element's event structure and main handler, if this is the first\n\t\tif ( !( events = elemData.events ) ) {\n\t\t\tevents = elemData.events = {};\n\t\t}\n\t\tif ( !( eventHandle = elemData.handle ) ) {\n\t\t\teventHandle = elemData.handle = function( e ) {\n\n\t\t\t\t// Discard the second event of a jQuery.event.trigger() and\n\t\t\t\t// when an event is called after a page has unloaded\n\t\t\t\treturn typeof jQuery !== \"undefined\" && jQuery.event.triggered !== e.type ?\n\t\t\t\t\tjQuery.event.dispatch.apply( elem, arguments ) : undefined;\n\t\t\t};\n\t\t}\n\n\t\t// Handle multiple events separated by a space\n\t\ttypes = ( types || \"\" ).match( rnothtmlwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// There *must* be a type, no attaching namespace-only handlers\n\t\t\tif ( !type ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// If event changes its type, use the special event handlers for the changed type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// If selector defined, determine special event api type, otherwise given type\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\n\t\t\t// Update special based on newly reset type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// handleObj is passed to all event handlers\n\t\t\thandleObj = jQuery.extend( {\n\t\t\t\ttype: type,\n\t\t\t\torigType: origType,\n\t\t\t\tdata: data,\n\t\t\t\thandler: handler,\n\t\t\t\tguid: handler.guid,\n\t\t\t\tselector: selector,\n\t\t\t\tneedsContext: selector && jQuery.expr.match.needsContext.test( selector ),\n\t\t\t\tnamespace: namespaces.join( \".\" )\n\t\t\t}, handleObjIn );\n\n\t\t\t// Init the event handler queue if we're the first\n\t\t\tif ( !( handlers = events[ type ] ) ) {\n\t\t\t\thandlers = events[ type ] = [];\n\t\t\t\thandlers.delegateCount = 0;\n\n\t\t\t\t// Only use addEventListener if the special events handler returns false\n\t\t\t\tif ( !special.setup ||\n\t\t\t\t\tspecial.setup.call( elem, data, namespaces, eventHandle ) === false ) {\n\n\t\t\t\t\tif ( elem.addEventListener ) {\n\t\t\t\t\t\telem.addEventListener( type, eventHandle );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( special.add ) {\n\t\t\t\tspecial.add.call( elem, handleObj );\n\n\t\t\t\tif ( !handleObj.handler.guid ) {\n\t\t\t\t\thandleObj.handler.guid = handler.guid;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Add to the element's handler list, delegates in front\n\t\t\tif ( selector ) {\n\t\t\t\thandlers.splice( handlers.delegateCount++, 0, handleObj );\n\t\t\t} else {\n\t\t\t\thandlers.push( handleObj );\n\t\t\t}\n\n\t\t\t// Keep track of which events have ever been used, for event optimization\n\t\t\tjQuery.event.global[ type ] = true;\n\t\t}\n\n\t},\n\n\t// Detach an event or set of events from an element\n\tremove: function( elem, types, handler, selector, mappedTypes ) {\n\n\t\tvar j, origCount, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = dataPriv.hasData( elem ) && dataPriv.get( elem );\n\n\t\tif ( !elemData || !( events = elemData.events ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Once for each type.namespace in types; type may be omitted\n\t\ttypes = ( types || \"\" ).match( rnothtmlwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// Unbind all events (on this namespace, if provided) for the element\n\t\t\tif ( !type ) {\n\t\t\t\tfor ( type in events ) {\n\t\t\t\t\tjQuery.event.remove( elem, type + types[ t ], handler, selector, true );\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\t\t\thandlers = events[ type ] || [];\n\t\t\ttmp = tmp[ 2 ] &&\n\t\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join( \"\\\\.(?:.*\\\\.|)\" ) + \"(\\\\.|$)\" );\n\n\t\t\t// Remove matching events\n\t\t\torigCount = j = handlers.length;\n\t\t\twhile ( j-- ) {\n\t\t\t\thandleObj = handlers[ j ];\n\n\t\t\t\tif ( ( mappedTypes || origType === handleObj.origType ) &&\n\t\t\t\t\t( !handler || handler.guid === handleObj.guid ) &&\n\t\t\t\t\t( !tmp || tmp.test( handleObj.namespace ) ) &&\n\t\t\t\t\t( !selector || selector === handleObj.selector ||\n\t\t\t\t\t\tselector === \"**\" && handleObj.selector ) ) {\n\t\t\t\t\thandlers.splice( j, 1 );\n\n\t\t\t\t\tif ( handleObj.selector ) {\n\t\t\t\t\t\thandlers.delegateCount--;\n\t\t\t\t\t}\n\t\t\t\t\tif ( special.remove ) {\n\t\t\t\t\t\tspecial.remove.call( elem, handleObj );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Remove generic event handler if we removed something and no more handlers exist\n\t\t\t// (avoids potential for endless recursion during removal of special event handlers)\n\t\t\tif ( origCount && !handlers.length ) {\n\t\t\t\tif ( !special.teardown ||\n\t\t\t\t\tspecial.teardown.call( elem, namespaces, elemData.handle ) === false ) {\n\n\t\t\t\t\tjQuery.removeEvent( elem, type, elemData.handle );\n\t\t\t\t}\n\n\t\t\t\tdelete events[ type ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove data and the expando if it's no longer used\n\t\tif ( jQuery.isEmptyObject( events ) ) {\n\t\t\tdataPriv.remove( elem, \"handle events\" );\n\t\t}\n\t},\n\n\tdispatch: function( nativeEvent ) {\n\n\t\t// Make a writable jQuery.Event from the native event object\n\t\tvar event = jQuery.event.fix( nativeEvent );\n\n\t\tvar i, j, ret, matched, handleObj, handlerQueue,\n\t\t\targs = new Array( arguments.length ),\n\t\t\thandlers = ( dataPriv.get( this, \"events\" ) || {} )[ event.type ] || [],\n\t\t\tspecial = jQuery.event.special[ event.type ] || {};\n\n\t\t// Use the fix-ed jQuery.Event rather than the (read-only) native event\n\t\targs[ 0 ] = event;\n\n\t\tfor ( i = 1; i < arguments.length; i++ ) {\n\t\t\targs[ i ] = arguments[ i ];\n\t\t}\n\n\t\tevent.delegateTarget = this;\n\n\t\t// Call the preDispatch hook for the mapped type, and let it bail if desired\n\t\tif ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine handlers\n\t\thandlerQueue = jQuery.event.handlers.call( this, event, handlers );\n\n\t\t// Run delegates first; they may want to stop propagation beneath us\n\t\ti = 0;\n\t\twhile ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) {\n\t\t\tevent.currentTarget = matched.elem;\n\n\t\t\tj = 0;\n\t\t\twhile ( ( handleObj = matched.handlers[ j++ ] ) &&\n\t\t\t\t!event.isImmediatePropagationStopped() ) {\n\n\t\t\t\t// Triggered event must either 1) have no namespace, or 2) have namespace(s)\n\t\t\t\t// a subset or equal to those in the bound event (both can have no namespace).\n\t\t\t\tif ( !event.rnamespace || event.rnamespace.test( handleObj.namespace ) ) {\n\n\t\t\t\t\tevent.handleObj = handleObj;\n\t\t\t\t\tevent.data = handleObj.data;\n\n\t\t\t\t\tret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle ||\n\t\t\t\t\t\thandleObj.handler ).apply( matched.elem, args );\n\n\t\t\t\t\tif ( ret !== undefined ) {\n\t\t\t\t\t\tif ( ( event.result = ret ) === false ) {\n\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Call the postDispatch hook for the mapped type\n\t\tif ( special.postDispatch ) {\n\t\t\tspecial.postDispatch.call( this, event );\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\thandlers: function( event, handlers ) {\n\t\tvar i, handleObj, sel, matchedHandlers, matchedSelectors,\n\t\t\thandlerQueue = [],\n\t\t\tdelegateCount = handlers.delegateCount,\n\t\t\tcur = event.target;\n\n\t\t// Find delegate handlers\n\t\tif ( delegateCount &&\n\n\t\t\t// Support: IE <=9\n\t\t\t// Black-hole SVG <use> instance trees (trac-13180)\n\t\t\tcur.nodeType &&\n\n\t\t\t// Support: Firefox <=42\n\t\t\t// Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861)\n\t\t\t// https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click\n\t\t\t// Support: IE 11 only\n\t\t\t// ...but not arrow key \"clicks\" of radio inputs, which can have `button` -1 (gh-2343)\n\t\t\t!( event.type === \"click\" && event.button >= 1 ) ) {\n\n\t\t\tfor ( ; cur !== this; cur = cur.parentNode || this ) {\n\n\t\t\t\t// Don't check non-elements (#13208)\n\t\t\t\t// Don't process clicks on disabled elements (#6911, #8165, #11382, #11764)\n\t\t\t\tif ( cur.nodeType === 1 && !( event.type === \"click\" && cur.disabled === true ) ) {\n\t\t\t\t\tmatchedHandlers = [];\n\t\t\t\t\tmatchedSelectors = {};\n\t\t\t\t\tfor ( i = 0; i < delegateCount; i++ ) {\n\t\t\t\t\t\thandleObj = handlers[ i ];\n\n\t\t\t\t\t\t// Don't conflict with Object.prototype properties (#13203)\n\t\t\t\t\t\tsel = handleObj.selector + \" \";\n\n\t\t\t\t\t\tif ( matchedSelectors[ sel ] === undefined ) {\n\t\t\t\t\t\t\tmatchedSelectors[ sel ] = handleObj.needsContext ?\n\t\t\t\t\t\t\t\tjQuery( sel, this ).index( cur ) > -1 :\n\t\t\t\t\t\t\t\tjQuery.find( sel, this, null, [ cur ] ).length;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ( matchedSelectors[ sel ] ) {\n\t\t\t\t\t\t\tmatchedHandlers.push( handleObj );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( matchedHandlers.length ) {\n\t\t\t\t\t\thandlerQueue.push( { elem: cur, handlers: matchedHandlers } );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Add the remaining (directly-bound) handlers\n\t\tcur = this;\n\t\tif ( delegateCount < handlers.length ) {\n\t\t\thandlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } );\n\t\t}\n\n\t\treturn handlerQueue;\n\t},\n\n\taddProp: function( name, hook ) {\n\t\tObject.defineProperty( jQuery.Event.prototype, name, {\n\t\t\tenumerable: true,\n\t\t\tconfigurable: true,\n\n\t\t\tget: isFunction( hook ) ?\n\t\t\t\tfunction() {\n\t\t\t\t\tif ( this.originalEvent ) {\n\t\t\t\t\t\t\treturn hook( this.originalEvent );\n\t\t\t\t\t}\n\t\t\t\t} :\n\t\t\t\tfunction() {\n\t\t\t\t\tif ( this.originalEvent ) {\n\t\t\t\t\t\t\treturn this.originalEvent[ name ];\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\tset: function( value ) {\n\t\t\t\tObject.defineProperty( this, name, {\n\t\t\t\t\tenumerable: true,\n\t\t\t\t\tconfigurable: true,\n\t\t\t\t\twritable: true,\n\t\t\t\t\tvalue: value\n\t\t\t\t} );\n\t\t\t}\n\t\t} );\n\t},\n\n\tfix: function( originalEvent ) {\n\t\treturn originalEvent[ jQuery.expando ] ?\n\t\t\toriginalEvent :\n\t\t\tnew jQuery.Event( originalEvent );\n\t},\n\n\tspecial: {\n\t\tload: {\n\n\t\t\t// Prevent triggered image.load events from bubbling to window.load\n\t\t\tnoBubble: true\n\t\t},\n\t\tfocus: {\n\n\t\t\t// Fire native event if possible so blur/focus sequence is correct\n\t\t\ttrigger: function() {\n\t\t\t\tif ( this !== safeActiveElement() && this.focus ) {\n\t\t\t\t\tthis.focus();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdelegateType: \"focusin\"\n\t\t},\n\t\tblur: {\n\t\t\ttrigger: function() {\n\t\t\t\tif ( this === safeActiveElement() && this.blur ) {\n\t\t\t\t\tthis.blur();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdelegateType: \"focusout\"\n\t\t},\n\t\tclick: {\n\n\t\t\t// For checkbox, fire native event so checked state will be right\n\t\t\ttrigger: function() {\n\t\t\t\tif ( this.type === \"checkbox\" && this.click && nodeName( this, \"input\" ) ) {\n\t\t\t\t\tthis.click();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// For cross-browser consistency, don't fire native .click() on links\n\t\t\t_default: function( event ) {\n\t\t\t\treturn nodeName( event.target, \"a\" );\n\t\t\t}\n\t\t},\n\n\t\tbeforeunload: {\n\t\t\tpostDispatch: function( event ) {\n\n\t\t\t\t// Support: Firefox 20+\n\t\t\t\t// Firefox doesn't alert if the returnValue field is not set.\n\t\t\t\tif ( event.result !== undefined && event.originalEvent ) {\n\t\t\t\t\tevent.originalEvent.returnValue = event.result;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n};\n\njQuery.removeEvent = function( elem, type, handle ) {\n\n\t// This \"if\" is needed for plain objects\n\tif ( elem.removeEventListener ) {\n\t\telem.removeEventListener( type, handle );\n\t}\n};\n\njQuery.Event = function( src, props ) {\n\n\t// Allow instantiation without the 'new' keyword\n\tif ( !( this instanceof jQuery.Event ) ) {\n\t\treturn new jQuery.Event( src, props );\n\t}\n\n\t// Event object\n\tif ( src && src.type ) {\n\t\tthis.originalEvent = src;\n\t\tthis.type = src.type;\n\n\t\t// Events bubbling up the document may have been marked as prevented\n\t\t// by a handler lower down the tree; reflect the correct value.\n\t\tthis.isDefaultPrevented = src.defaultPrevented ||\n\t\t\t\tsrc.defaultPrevented === undefined &&\n\n\t\t\t\t// Support: Android <=2.3 only\n\t\t\t\tsrc.returnValue === false ?\n\t\t\treturnTrue :\n\t\t\treturnFalse;\n\n\t\t// Create target properties\n\t\t// Support: Safari <=6 - 7 only\n\t\t// Target should not be a text node (#504, #13143)\n\t\tthis.target = ( src.target && src.target.nodeType === 3 ) ?\n\t\t\tsrc.target.parentNode :\n\t\t\tsrc.target;\n\n\t\tthis.currentTarget = src.currentTarget;\n\t\tthis.relatedTarget = src.relatedTarget;\n\n\t// Event type\n\t} else {\n\t\tthis.type = src;\n\t}\n\n\t// Put explicitly provided properties onto the event object\n\tif ( props ) {\n\t\tjQuery.extend( this, props );\n\t}\n\n\t// Create a timestamp if incoming event doesn't have one\n\tthis.timeStamp = src && src.timeStamp || Date.now();\n\n\t// Mark it as fixed\n\tthis[ jQuery.expando ] = true;\n};\n\n// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding\n// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html\njQuery.Event.prototype = {\n\tconstructor: jQuery.Event,\n\tisDefaultPrevented: returnFalse,\n\tisPropagationStopped: returnFalse,\n\tisImmediatePropagationStopped: returnFalse,\n\tisSimulated: false,\n\n\tpreventDefault: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isDefaultPrevented = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.preventDefault();\n\t\t}\n\t},\n\tstopPropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isPropagationStopped = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.stopPropagation();\n\t\t}\n\t},\n\tstopImmediatePropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isImmediatePropagationStopped = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.stopImmediatePropagation();\n\t\t}\n\n\t\tthis.stopPropagation();\n\t}\n};\n\n// Includes all common event props including KeyEvent and MouseEvent specific props\njQuery.each( {\n\taltKey: true,\n\tbubbles: true,\n\tcancelable: true,\n\tchangedTouches: true,\n\tctrlKey: true,\n\tdetail: true,\n\teventPhase: true,\n\tmetaKey: true,\n\tpageX: true,\n\tpageY: true,\n\tshiftKey: true,\n\tview: true,\n\t\"char\": true,\n\tcharCode: true,\n\tkey: true,\n\tkeyCode: true,\n\tbutton: true,\n\tbuttons: true,\n\tclientX: true,\n\tclientY: true,\n\toffsetX: true,\n\toffsetY: true,\n\tpointerId: true,\n\tpointerType: true,\n\tscreenX: true,\n\tscreenY: true,\n\ttargetTouches: true,\n\ttoElement: true,\n\ttouches: true,\n\n\twhich: function( event ) {\n\t\tvar button = event.button;\n\n\t\t// Add which for key events\n\t\tif ( event.which == null && rkeyEvent.test( event.type ) ) {\n\t\t\treturn event.charCode != null ? event.charCode : event.keyCode;\n\t\t}\n\n\t\t// Add which for click: 1 === left; 2 === middle; 3 === right\n\t\tif ( !event.which && button !== undefined && rmouseEvent.test( event.type ) ) {\n\t\t\tif ( button & 1 ) {\n\t\t\t\treturn 1;\n\t\t\t}\n\n\t\t\tif ( button & 2 ) {\n\t\t\t\treturn 3;\n\t\t\t}\n\n\t\t\tif ( button & 4 ) {\n\t\t\t\treturn 2;\n\t\t\t}\n\n\t\t\treturn 0;\n\t\t}\n\n\t\treturn event.which;\n\t}\n}, jQuery.event.addProp );\n\n// Create mouseenter/leave events using mouseover/out and event-time checks\n// so that event delegation works in jQuery.\n// Do the same for pointerenter/pointerleave and pointerover/pointerout\n//\n// Support: Safari 7 only\n// Safari sends mouseenter too often; see:\n// https://bugs.chromium.org/p/chromium/issues/detail?id=470258\n// for the description of the bug (it existed in older Chrome versions as well).\njQuery.each( {\n\tmouseenter: \"mouseover\",\n\tmouseleave: \"mouseout\",\n\tpointerenter: \"pointerover\",\n\tpointerleave: \"pointerout\"\n}, function( orig, fix ) {\n\tjQuery.event.special[ orig ] = {\n\t\tdelegateType: fix,\n\t\tbindType: fix,\n\n\t\thandle: function( event ) {\n\t\t\tvar ret,\n\t\t\t\ttarget = this,\n\t\t\t\trelated = event.relatedTarget,\n\t\t\t\thandleObj = event.handleObj;\n\n\t\t\t// For mouseenter/leave call the handler if related is outside the target.\n\t\t\t// NB: No relatedTarget if the mouse left/entered the browser window\n\t\t\tif ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) {\n\t\t\t\tevent.type = handleObj.origType;\n\t\t\t\tret = handleObj.handler.apply( this, arguments );\n\t\t\t\tevent.type = fix;\n\t\t\t}\n\t\t\treturn ret;\n\t\t}\n\t};\n} );\n\njQuery.fn.extend( {\n\n\ton: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn );\n\t},\n\tone: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn, 1 );\n\t},\n\toff: function( types, selector, fn ) {\n\t\tvar handleObj, type;\n\t\tif ( types && types.preventDefault && types.handleObj ) {\n\n\t\t\t// ( event ) dispatched jQuery.Event\n\t\t\thandleObj = types.handleObj;\n\t\t\tjQuery( types.delegateTarget ).off(\n\t\t\t\thandleObj.namespace ?\n\t\t\t\t\thandleObj.origType + \".\" + handleObj.namespace :\n\t\t\t\t\thandleObj.origType,\n\t\t\t\thandleObj.selector,\n\t\t\t\thandleObj.handler\n\t\t\t);\n\t\t\treturn this;\n\t\t}\n\t\tif ( typeof types === \"object\" ) {\n\n\t\t\t// ( types-object [, selector] )\n\t\t\tfor ( type in types ) {\n\t\t\t\tthis.off( type, selector, types[ type ] );\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\tif ( selector === false || typeof selector === \"function\" ) {\n\n\t\t\t// ( types [, fn] )\n\t\t\tfn = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tif ( fn === false ) {\n\t\t\tfn = returnFalse;\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.remove( this, types, fn, selector );\n\t\t} );\n\t}\n} );\n\n\nvar\n\n\t/* eslint-disable max-len */\n\n\t// See https://github.com/eslint/eslint/issues/3229\n\trxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]*)[^>]*)\\/>/gi,\n\n\t/* eslint-enable */\n\n\t// Support: IE <=10 - 11, Edge 12 - 13 only\n\t// In IE/Edge using regex groups here causes severe slowdowns.\n\t// See https://connect.microsoft.com/IE/feedback/details/1736512/\n\trnoInnerhtml = /<script|<style|<link/i,\n\n\t// checked=\"checked\" or checked\n\trchecked = /checked\\s*(?:[^=]|=\\s*.checked.)/i,\n\trcleanScript = /^\\s*<!(?:\\[CDATA\\[|--)|(?:\\]\\]|--)>\\s*$/g;\n\n// Prefer a tbody over its parent table for containing new rows\nfunction manipulationTarget( elem, content ) {\n\tif ( nodeName( elem, \"table\" ) &&\n\t\tnodeName( content.nodeType !== 11 ? content : content.firstChild, \"tr\" ) ) {\n\n\t\treturn jQuery( elem ).children( \"tbody\" )[ 0 ] || elem;\n\t}\n\n\treturn elem;\n}\n\n// Replace/restore the type attribute of script elements for safe DOM manipulation\nfunction disableScript( elem ) {\n\telem.type = ( elem.getAttribute( \"type\" ) !== null ) + \"/\" + elem.type;\n\treturn elem;\n}\nfunction restoreScript( elem ) {\n\tif ( ( elem.type || \"\" ).slice( 0, 5 ) === \"true/\" ) {\n\t\telem.type = elem.type.slice( 5 );\n\t} else {\n\t\telem.removeAttribute( \"type\" );\n\t}\n\n\treturn elem;\n}\n\nfunction cloneCopyEvent( src, dest ) {\n\tvar i, l, type, pdataOld, pdataCur, udataOld, udataCur, events;\n\n\tif ( dest.nodeType !== 1 ) {\n\t\treturn;\n\t}\n\n\t// 1. Copy private data: events, handlers, etc.\n\tif ( dataPriv.hasData( src ) ) {\n\t\tpdataOld = dataPriv.access( src );\n\t\tpdataCur = dataPriv.set( dest, pdataOld );\n\t\tevents = pdataOld.events;\n\n\t\tif ( events ) {\n\t\t\tdelete pdataCur.handle;\n\t\t\tpdataCur.events = {};\n\n\t\t\tfor ( type in events ) {\n\t\t\t\tfor ( i = 0, l = events[ type ].length; i < l; i++ ) {\n\t\t\t\t\tjQuery.event.add( dest, type, events[ type ][ i ] );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// 2. Copy user data\n\tif ( dataUser.hasData( src ) ) {\n\t\tudataOld = dataUser.access( src );\n\t\tudataCur = jQuery.extend( {}, udataOld );\n\n\t\tdataUser.set( dest, udataCur );\n\t}\n}\n\n// Fix IE bugs, see support tests\nfunction fixInput( src, dest ) {\n\tvar nodeName = dest.nodeName.toLowerCase();\n\n\t// Fails to persist the checked state of a cloned checkbox or radio button.\n\tif ( nodeName === \"input\" && rcheckableType.test( src.type ) ) {\n\t\tdest.checked = src.checked;\n\n\t// Fails to return the selected option to the default selected state when cloning options\n\t} else if ( nodeName === \"input\" || nodeName === \"textarea\" ) {\n\t\tdest.defaultValue = src.defaultValue;\n\t}\n}\n\nfunction domManip( collection, args, callback, ignored ) {\n\n\t// Flatten any nested arrays\n\targs = concat.apply( [], args );\n\n\tvar fragment, first, scripts, hasScripts, node, doc,\n\t\ti = 0,\n\t\tl = collection.length,\n\t\tiNoClone = l - 1,\n\t\tvalue = args[ 0 ],\n\t\tvalueIsFunction = isFunction( value );\n\n\t// We can't cloneNode fragments that contain checked, in WebKit\n\tif ( valueIsFunction ||\n\t\t\t( l > 1 && typeof value === \"string\" &&\n\t\t\t\t!support.checkClone && rchecked.test( value ) ) ) {\n\t\treturn collection.each( function( index ) {\n\t\t\tvar self = collection.eq( index );\n\t\t\tif ( valueIsFunction ) {\n\t\t\t\targs[ 0 ] = value.call( this, index, self.html() );\n\t\t\t}\n\t\t\tdomManip( self, args, callback, ignored );\n\t\t} );\n\t}\n\n\tif ( l ) {\n\t\tfragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored );\n\t\tfirst = fragment.firstChild;\n\n\t\tif ( fragment.childNodes.length === 1 ) {\n\t\t\tfragment = first;\n\t\t}\n\n\t\t// Require either new content or an interest in ignored elements to invoke the callback\n\t\tif ( first || ignored ) {\n\t\t\tscripts = jQuery.map( getAll( fragment, \"script\" ), disableScript );\n\t\t\thasScripts = scripts.length;\n\n\t\t\t// Use the original fragment for the last item\n\t\t\t// instead of the first because it can end up\n\t\t\t// being emptied incorrectly in certain situations (#8070).\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tnode = fragment;\n\n\t\t\t\tif ( i !== iNoClone ) {\n\t\t\t\t\tnode = jQuery.clone( node, true, true );\n\n\t\t\t\t\t// Keep references to cloned scripts for later restoration\n\t\t\t\t\tif ( hasScripts ) {\n\n\t\t\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\t\t\tjQuery.merge( scripts, getAll( node, \"script\" ) );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tcallback.call( collection[ i ], node, i );\n\t\t\t}\n\n\t\t\tif ( hasScripts ) {\n\t\t\t\tdoc = scripts[ scripts.length - 1 ].ownerDocument;\n\n\t\t\t\t// Reenable scripts\n\t\t\t\tjQuery.map( scripts, restoreScript );\n\n\t\t\t\t// Evaluate executable scripts on first document insertion\n\t\t\t\tfor ( i = 0; i < hasScripts; i++ ) {\n\t\t\t\t\tnode = scripts[ i ];\n\t\t\t\t\tif ( rscriptType.test( node.type || \"\" ) &&\n\t\t\t\t\t\t!dataPriv.access( node, \"globalEval\" ) &&\n\t\t\t\t\t\tjQuery.contains( doc, node ) ) {\n\n\t\t\t\t\t\tif ( node.src && ( node.type || \"\" ).toLowerCase() !== \"module\" ) {\n\n\t\t\t\t\t\t\t// Optional AJAX dependency, but won't run scripts if not present\n\t\t\t\t\t\t\tif ( jQuery._evalUrl ) {\n\t\t\t\t\t\t\t\tjQuery._evalUrl( node.src );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tDOMEval( node.textContent.replace( rcleanScript, \"\" ), doc, node );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn collection;\n}\n\nfunction remove( elem, selector, keepData ) {\n\tvar node,\n\t\tnodes = selector ? jQuery.filter( selector, elem ) : elem,\n\t\ti = 0;\n\n\tfor ( ; ( node = nodes[ i ] ) != null; i++ ) {\n\t\tif ( !keepData && node.nodeType === 1 ) {\n\t\t\tjQuery.cleanData( getAll( node ) );\n\t\t}\n\n\t\tif ( node.parentNode ) {\n\t\t\tif ( keepData && jQuery.contains( node.ownerDocument, node ) ) {\n\t\t\t\tsetGlobalEval( getAll( node, \"script\" ) );\n\t\t\t}\n\t\t\tnode.parentNode.removeChild( node );\n\t\t}\n\t}\n\n\treturn elem;\n}\n\njQuery.extend( {\n\thtmlPrefilter: function( html ) {\n\t\treturn html.replace( rxhtmlTag, \"<$1></$2>\" );\n\t},\n\n\tclone: function( elem, dataAndEvents, deepDataAndEvents ) {\n\t\tvar i, l, srcElements, destElements,\n\t\t\tclone = elem.cloneNode( true ),\n\t\t\tinPage = jQuery.contains( elem.ownerDocument, elem );\n\n\t\t// Fix IE cloning issues\n\t\tif ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) &&\n\t\t\t\t!jQuery.isXMLDoc( elem ) ) {\n\n\t\t\t// We eschew Sizzle here for performance reasons: https://jsperf.com/getall-vs-sizzle/2\n\t\t\tdestElements = getAll( clone );\n\t\t\tsrcElements = getAll( elem );\n\n\t\t\tfor ( i = 0, l = srcElements.length; i < l; i++ ) {\n\t\t\t\tfixInput( srcElements[ i ], destElements[ i ] );\n\t\t\t}\n\t\t}\n\n\t\t// Copy the events from the original to the clone\n\t\tif ( dataAndEvents ) {\n\t\t\tif ( deepDataAndEvents ) {\n\t\t\t\tsrcElements = srcElements || getAll( elem );\n\t\t\t\tdestElements = destElements || getAll( clone );\n\n\t\t\t\tfor ( i = 0, l = srcElements.length; i < l; i++ ) {\n\t\t\t\t\tcloneCopyEvent( srcElements[ i ], destElements[ i ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tcloneCopyEvent( elem, clone );\n\t\t\t}\n\t\t}\n\n\t\t// Preserve script evaluation history\n\t\tdestElements = getAll( clone, \"script\" );\n\t\tif ( destElements.length > 0 ) {\n\t\t\tsetGlobalEval( destElements, !inPage && getAll( elem, \"script\" ) );\n\t\t}\n\n\t\t// Return the cloned set\n\t\treturn clone;\n\t},\n\n\tcleanData: function( elems ) {\n\t\tvar data, elem, type,\n\t\t\tspecial = jQuery.event.special,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( elem = elems[ i ] ) !== undefined; i++ ) {\n\t\t\tif ( acceptData( elem ) ) {\n\t\t\t\tif ( ( data = elem[ dataPriv.expando ] ) ) {\n\t\t\t\t\tif ( data.events ) {\n\t\t\t\t\t\tfor ( type in data.events ) {\n\t\t\t\t\t\t\tif ( special[ type ] ) {\n\t\t\t\t\t\t\t\tjQuery.event.remove( elem, type );\n\n\t\t\t\t\t\t\t// This is a shortcut to avoid jQuery.event.remove's overhead\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tjQuery.removeEvent( elem, type, data.handle );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\telem[ dataPriv.expando ] = undefined;\n\t\t\t\t}\n\t\t\t\tif ( elem[ dataUser.expando ] ) {\n\n\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\telem[ dataUser.expando ] = undefined;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n} );\n\njQuery.fn.extend( {\n\tdetach: function( selector ) {\n\t\treturn remove( this, selector, true );\n\t},\n\n\tremove: function( selector ) {\n\t\treturn remove( this, selector );\n\t},\n\n\ttext: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\treturn value === undefined ?\n\t\t\t\tjQuery.text( this ) :\n\t\t\t\tthis.empty().each( function() {\n\t\t\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\t\t\tthis.textContent = value;\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t}, null, value, arguments.length );\n\t},\n\n\tappend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.appendChild( elem );\n\t\t\t}\n\t\t} );\n\t},\n\n\tprepend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.insertBefore( elem, target.firstChild );\n\t\t\t}\n\t\t} );\n\t},\n\n\tbefore: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this );\n\t\t\t}\n\t\t} );\n\t},\n\n\tafter: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this.nextSibling );\n\t\t\t}\n\t\t} );\n\t},\n\n\tempty: function() {\n\t\tvar elem,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( elem = this[ i ] ) != null; i++ ) {\n\t\t\tif ( elem.nodeType === 1 ) {\n\n\t\t\t\t// Prevent memory leaks\n\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\n\t\t\t\t// Remove any remaining nodes\n\t\t\t\telem.textContent = \"\";\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tclone: function( dataAndEvents, deepDataAndEvents ) {\n\t\tdataAndEvents = dataAndEvents == null ? false : dataAndEvents;\n\t\tdeepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;\n\n\t\treturn this.map( function() {\n\t\t\treturn jQuery.clone( this, dataAndEvents, deepDataAndEvents );\n\t\t} );\n\t},\n\n\thtml: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\tvar elem = this[ 0 ] || {},\n\t\t\t\ti = 0,\n\t\t\t\tl = this.length;\n\n\t\t\tif ( value === undefined && elem.nodeType === 1 ) {\n\t\t\t\treturn elem.innerHTML;\n\t\t\t}\n\n\t\t\t// See if we can take a shortcut and just use innerHTML\n\t\t\tif ( typeof value === \"string\" && !rnoInnerhtml.test( value ) &&\n\t\t\t\t!wrapMap[ ( rtagName.exec( value ) || [ \"\", \"\" ] )[ 1 ].toLowerCase() ] ) {\n\n\t\t\t\tvalue = jQuery.htmlPrefilter( value );\n\n\t\t\t\ttry {\n\t\t\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\t\t\telem = this[ i ] || {};\n\n\t\t\t\t\t\t// Remove element nodes and prevent memory leaks\n\t\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\t\t\t\t\t\t\telem.innerHTML = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\telem = 0;\n\n\t\t\t\t// If using innerHTML throws an exception, use the fallback method\n\t\t\t\t} catch ( e ) {}\n\t\t\t}\n\n\t\t\tif ( elem ) {\n\t\t\t\tthis.empty().append( value );\n\t\t\t}\n\t\t}, null, value, arguments.length );\n\t},\n\n\treplaceWith: function() {\n\t\tvar ignored = [];\n\n\t\t// Make the changes, replacing each non-ignored context element with the new content\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tvar parent = this.parentNode;\n\n\t\t\tif ( jQuery.inArray( this, ignored ) < 0 ) {\n\t\t\t\tjQuery.cleanData( getAll( this ) );\n\t\t\t\tif ( parent ) {\n\t\t\t\t\tparent.replaceChild( elem, this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Force callback invocation\n\t\t}, ignored );\n\t}\n} );\n\njQuery.each( {\n\tappendTo: \"append\",\n\tprependTo: \"prepend\",\n\tinsertBefore: \"before\",\n\tinsertAfter: \"after\",\n\treplaceAll: \"replaceWith\"\n}, function( name, original ) {\n\tjQuery.fn[ name ] = function( selector ) {\n\t\tvar elems,\n\t\t\tret = [],\n\t\t\tinsert = jQuery( selector ),\n\t\t\tlast = insert.length - 1,\n\t\t\ti = 0;\n\n\t\tfor ( ; i <= last; i++ ) {\n\t\t\telems = i === last ? this : this.clone( true );\n\t\t\tjQuery( insert[ i ] )[ original ]( elems );\n\n\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t// .get() because push.apply(_, arraylike) throws on ancient WebKit\n\t\t\tpush.apply( ret, elems.get() );\n\t\t}\n\n\t\treturn this.pushStack( ret );\n\t};\n} );\nvar rnumnonpx = new RegExp( \"^(\" + pnum + \")(?!px)[a-z%]+$\", \"i\" );\n\nvar getStyles = function( elem ) {\n\n\t\t// Support: IE <=11 only, Firefox <=30 (#15098, #14150)\n\t\t// IE throws on elements created in popups\n\t\t// FF meanwhile throws on frame elements through \"defaultView.getComputedStyle\"\n\t\tvar view = elem.ownerDocument.defaultView;\n\n\t\tif ( !view || !view.opener ) {\n\t\t\tview = window;\n\t\t}\n\n\t\treturn view.getComputedStyle( elem );\n\t};\n\nvar rboxStyle = new RegExp( cssExpand.join( \"|\" ), \"i\" );\n\n\n\n( function() {\n\n\t// Executing both pixelPosition & boxSizingReliable tests require only one layout\n\t// so they're executed at the same time to save the second computation.\n\tfunction computeStyleTests() {\n\n\t\t// This is a singleton, we need to execute it only once\n\t\tif ( !div ) {\n\t\t\treturn;\n\t\t}\n\n\t\tcontainer.style.cssText = \"position:absolute;left:-11111px;width:60px;\" +\n\t\t\t\"margin-top:1px;padding:0;border:0\";\n\t\tdiv.style.cssText =\n\t\t\t\"position:relative;display:block;box-sizing:border-box;overflow:scroll;\" +\n\t\t\t\"margin:auto;border:1px;padding:1px;\" +\n\t\t\t\"width:60%;top:1%\";\n\t\tdocumentElement.appendChild( container ).appendChild( div );\n\n\t\tvar divStyle = window.getComputedStyle( div );\n\t\tpixelPositionVal = divStyle.top !== \"1%\";\n\n\t\t// Support: Android 4.0 - 4.3 only, Firefox <=3 - 44\n\t\treliableMarginLeftVal = roundPixelMeasures( divStyle.marginLeft ) === 12;\n\n\t\t// Support: Android 4.0 - 4.3 only, Safari <=9.1 - 10.1, iOS <=7.0 - 9.3\n\t\t// Some styles come back with percentage values, even though they shouldn't\n\t\tdiv.style.right = \"60%\";\n\t\tpixelBoxStylesVal = roundPixelMeasures( divStyle.right ) === 36;\n\n\t\t// Support: IE 9 - 11 only\n\t\t// Detect misreporting of content dimensions for box-sizing:border-box elements\n\t\tboxSizingReliableVal = roundPixelMeasures( divStyle.width ) === 36;\n\n\t\t// Support: IE 9 only\n\t\t// Detect overflow:scroll screwiness (gh-3699)\n\t\tdiv.style.position = \"absolute\";\n\t\tscrollboxSizeVal = div.offsetWidth === 36 || \"absolute\";\n\n\t\tdocumentElement.removeChild( container );\n\n\t\t// Nullify the div so it wouldn't be stored in the memory and\n\t\t// it will also be a sign that checks already performed\n\t\tdiv = null;\n\t}\n\n\tfunction roundPixelMeasures( measure ) {\n\t\treturn Math.round( parseFloat( measure ) );\n\t}\n\n\tvar pixelPositionVal, boxSizingReliableVal, scrollboxSizeVal, pixelBoxStylesVal,\n\t\treliableMarginLeftVal,\n\t\tcontainer = document.createElement( \"div\" ),\n\t\tdiv = document.createElement( \"div\" );\n\n\t// Finish early in limited (non-browser) environments\n\tif ( !div.style ) {\n\t\treturn;\n\t}\n\n\t// Support: IE <=9 - 11 only\n\t// Style of cloned element affects source element cloned (#8908)\n\tdiv.style.backgroundClip = \"content-box\";\n\tdiv.cloneNode( true ).style.backgroundClip = \"\";\n\tsupport.clearCloneStyle = div.style.backgroundClip === \"content-box\";\n\n\tjQuery.extend( support, {\n\t\tboxSizingReliable: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn boxSizingReliableVal;\n\t\t},\n\t\tpixelBoxStyles: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn pixelBoxStylesVal;\n\t\t},\n\t\tpixelPosition: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn pixelPositionVal;\n\t\t},\n\t\treliableMarginLeft: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn reliableMarginLeftVal;\n\t\t},\n\t\tscrollboxSize: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn scrollboxSizeVal;\n\t\t}\n\t} );\n} )();\n\n\nfunction curCSS( elem, name, computed ) {\n\tvar width, minWidth, maxWidth, ret,\n\n\t\t// Support: Firefox 51+\n\t\t// Retrieving style before computed somehow\n\t\t// fixes an issue with getting wrong values\n\t\t// on detached elements\n\t\tstyle = elem.style;\n\n\tcomputed = computed || getStyles( elem );\n\n\t// getPropertyValue is needed for:\n\t// .css('filter') (IE 9 only, #12537)\n\t// .css('--customProperty) (#3144)\n\tif ( computed ) {\n\t\tret = computed.getPropertyValue( name ) || computed[ name ];\n\n\t\tif ( ret === \"\" && !jQuery.contains( elem.ownerDocument, elem ) ) {\n\t\t\tret = jQuery.style( elem, name );\n\t\t}\n\n\t\t// A tribute to the \"awesome hack by Dean Edwards\"\n\t\t// Android Browser returns percentage for some values,\n\t\t// but width seems to be reliably pixels.\n\t\t// This is against the CSSOM draft spec:\n\t\t// https://drafts.csswg.org/cssom/#resolved-values\n\t\tif ( !support.pixelBoxStyles() && rnumnonpx.test( ret ) && rboxStyle.test( name ) ) {\n\n\t\t\t// Remember the original values\n\t\t\twidth = style.width;\n\t\t\tminWidth = style.minWidth;\n\t\t\tmaxWidth = style.maxWidth;\n\n\t\t\t// Put in the new values to get a computed value out\n\t\t\tstyle.minWidth = style.maxWidth = style.width = ret;\n\t\t\tret = computed.width;\n\n\t\t\t// Revert the changed values\n\t\t\tstyle.width = width;\n\t\t\tstyle.minWidth = minWidth;\n\t\t\tstyle.maxWidth = maxWidth;\n\t\t}\n\t}\n\n\treturn ret !== undefined ?\n\n\t\t// Support: IE <=9 - 11 only\n\t\t// IE returns zIndex value as an integer.\n\t\tret + \"\" :\n\t\tret;\n}\n\n\nfunction addGetHookIf( conditionFn, hookFn ) {\n\n\t// Define the hook, we'll check on the first run if it's really needed.\n\treturn {\n\t\tget: function() {\n\t\t\tif ( conditionFn() ) {\n\n\t\t\t\t// Hook not needed (or it's not possible to use it due\n\t\t\t\t// to missing dependency), remove it.\n\t\t\t\tdelete this.get;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Hook needed; redefine it so that the support test is not executed again.\n\t\t\treturn ( this.get = hookFn ).apply( this, arguments );\n\t\t}\n\t};\n}\n\n\nvar\n\n\t// Swappable if display is none or starts with table\n\t// except \"table\", \"table-cell\", or \"table-caption\"\n\t// See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display\n\trdisplayswap = /^(none|table(?!-c[ea]).+)/,\n\trcustomProp = /^--/,\n\tcssShow = { position: \"absolute\", visibility: \"hidden\", display: \"block\" },\n\tcssNormalTransform = {\n\t\tletterSpacing: \"0\",\n\t\tfontWeight: \"400\"\n\t},\n\n\tcssPrefixes = [ \"Webkit\", \"Moz\", \"ms\" ],\n\temptyStyle = document.createElement( \"div\" ).style;\n\n// Return a css property mapped to a potentially vendor prefixed property\nfunction vendorPropName( name ) {\n\n\t// Shortcut for names that are not vendor prefixed\n\tif ( name in emptyStyle ) {\n\t\treturn name;\n\t}\n\n\t// Check for vendor prefixed names\n\tvar capName = name[ 0 ].toUpperCase() + name.slice( 1 ),\n\t\ti = cssPrefixes.length;\n\n\twhile ( i-- ) {\n\t\tname = cssPrefixes[ i ] + capName;\n\t\tif ( name in emptyStyle ) {\n\t\t\treturn name;\n\t\t}\n\t}\n}\n\n// Return a property mapped along what jQuery.cssProps suggests or to\n// a vendor prefixed property.\nfunction finalPropName( name ) {\n\tvar ret = jQuery.cssProps[ name ];\n\tif ( !ret ) {\n\t\tret = jQuery.cssProps[ name ] = vendorPropName( name ) || name;\n\t}\n\treturn ret;\n}\n\nfunction setPositiveNumber( elem, value, subtract ) {\n\n\t// Any relative (+/-) values have already been\n\t// normalized at this point\n\tvar matches = rcssNum.exec( value );\n\treturn matches ?\n\n\t\t// Guard against undefined \"subtract\", e.g., when used as in cssHooks\n\t\tMath.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || \"px\" ) :\n\t\tvalue;\n}\n\nfunction boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computedVal ) {\n\tvar i = dimension === \"width\" ? 1 : 0,\n\t\textra = 0,\n\t\tdelta = 0;\n\n\t// Adjustment may not be necessary\n\tif ( box === ( isBorderBox ? \"border\" : \"content\" ) ) {\n\t\treturn 0;\n\t}\n\n\tfor ( ; i < 4; i += 2 ) {\n\n\t\t// Both box models exclude margin\n\t\tif ( box === \"margin\" ) {\n\t\t\tdelta += jQuery.css( elem, box + cssExpand[ i ], true, styles );\n\t\t}\n\n\t\t// If we get here with a content-box, we're seeking \"padding\" or \"border\" or \"margin\"\n\t\tif ( !isBorderBox ) {\n\n\t\t\t// Add padding\n\t\t\tdelta += jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\n\t\t\t// For \"border\" or \"margin\", add border\n\t\t\tif ( box !== \"padding\" ) {\n\t\t\t\tdelta += jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\n\t\t\t// But still keep track of it otherwise\n\t\t\t} else {\n\t\t\t\textra += jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\n\t\t// If we get here with a border-box (content + padding + border), we're seeking \"content\" or\n\t\t// \"padding\" or \"margin\"\n\t\t} else {\n\n\t\t\t// For \"content\", subtract padding\n\t\t\tif ( box === \"content\" ) {\n\t\t\t\tdelta -= jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\t\t\t}\n\n\t\t\t// For \"content\" or \"padding\", subtract border\n\t\t\tif ( box !== \"margin\" ) {\n\t\t\t\tdelta -= jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\t\t}\n\t}\n\n\t// Account for positive content-box scroll gutter when requested by providing computedVal\n\tif ( !isBorderBox && computedVal >= 0 ) {\n\n\t\t// offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border\n\t\t// Assuming integer scroll gutter, subtract the rest and round down\n\t\tdelta += Math.max( 0, Math.ceil(\n\t\t\telem[ \"offset\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] -\n\t\t\tcomputedVal -\n\t\t\tdelta -\n\t\t\textra -\n\t\t\t0.5\n\t\t) );\n\t}\n\n\treturn delta;\n}\n\nfunction getWidthOrHeight( elem, dimension, extra ) {\n\n\t// Start with computed style\n\tvar styles = getStyles( elem ),\n\t\tval = curCSS( elem, dimension, styles ),\n\t\tisBorderBox = jQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\",\n\t\tvalueIsBorderBox = isBorderBox;\n\n\t// Support: Firefox <=54\n\t// Return a confounding non-pixel value or feign ignorance, as appropriate.\n\tif ( rnumnonpx.test( val ) ) {\n\t\tif ( !extra ) {\n\t\t\treturn val;\n\t\t}\n\t\tval = \"auto\";\n\t}\n\n\t// Check for style in case a browser which returns unreliable values\n\t// for getComputedStyle silently falls back to the reliable elem.style\n\tvalueIsBorderBox = valueIsBorderBox &&\n\t\t( support.boxSizingReliable() || val === elem.style[ dimension ] );\n\n\t// Fall back to offsetWidth/offsetHeight when value is \"auto\"\n\t// This happens for inline elements with no explicit setting (gh-3571)\n\t// Support: Android <=4.1 - 4.3 only\n\t// Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602)\n\tif ( val === \"auto\" ||\n\t\t!parseFloat( val ) && jQuery.css( elem, \"display\", false, styles ) === \"inline\" ) {\n\n\t\tval = elem[ \"offset\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ];\n\n\t\t// offsetWidth/offsetHeight provide border-box values\n\t\tvalueIsBorderBox = true;\n\t}\n\n\t// Normalize \"\" and auto\n\tval = parseFloat( val ) || 0;\n\n\t// Adjust for the element's box model\n\treturn ( val +\n\t\tboxModelAdjustment(\n\t\t\telem,\n\t\t\tdimension,\n\t\t\textra || ( isBorderBox ? \"border\" : \"content\" ),\n\t\t\tvalueIsBorderBox,\n\t\t\tstyles,\n\n\t\t\t// Provide the current computed size to request scroll gutter calculation (gh-3589)\n\t\t\tval\n\t\t)\n\t) + \"px\";\n}\n\njQuery.extend( {\n\n\t// Add in style property hooks for overriding the default\n\t// behavior of getting and setting a style property\n\tcssHooks: {\n\t\topacity: {\n\t\t\tget: function( elem, computed ) {\n\t\t\t\tif ( computed ) {\n\n\t\t\t\t\t// We should always get a number back from opacity\n\t\t\t\t\tvar ret = curCSS( elem, \"opacity\" );\n\t\t\t\t\treturn ret === \"\" ? \"1\" : ret;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\t// Don't automatically add \"px\" to these possibly-unitless properties\n\tcssNumber: {\n\t\t\"animationIterationCount\": true,\n\t\t\"columnCount\": true,\n\t\t\"fillOpacity\": true,\n\t\t\"flexGrow\": true,\n\t\t\"flexShrink\": true,\n\t\t\"fontWeight\": true,\n\t\t\"lineHeight\": true,\n\t\t\"opacity\": true,\n\t\t\"order\": true,\n\t\t\"orphans\": true,\n\t\t\"widows\": true,\n\t\t\"zIndex\": true,\n\t\t\"zoom\": true\n\t},\n\n\t// Add in properties whose names you wish to fix before\n\t// setting or getting the value\n\tcssProps: {},\n\n\t// Get and set the style property on a DOM Node\n\tstyle: function( elem, name, value, extra ) {\n\n\t\t// Don't set styles on text and comment nodes\n\t\tif ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Make sure that we're working with the right name\n\t\tvar ret, type, hooks,\n\t\t\torigName = camelCase( name ),\n\t\t\tisCustomProp = rcustomProp.test( name ),\n\t\t\tstyle = elem.style;\n\n\t\t// Make sure that we're working with the right name. We don't\n\t\t// want to query the value if it is a CSS custom property\n\t\t// since they are user-defined.\n\t\tif ( !isCustomProp ) {\n\t\t\tname = finalPropName( origName );\n\t\t}\n\n\t\t// Gets hook for the prefixed version, then unprefixed version\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// Check if we're setting a value\n\t\tif ( value !== undefined ) {\n\t\t\ttype = typeof value;\n\n\t\t\t// Convert \"+=\" or \"-=\" to relative numbers (#7345)\n\t\t\tif ( type === \"string\" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) {\n\t\t\t\tvalue = adjustCSS( elem, name, ret );\n\n\t\t\t\t// Fixes bug #9237\n\t\t\t\ttype = \"number\";\n\t\t\t}\n\n\t\t\t// Make sure that null and NaN values aren't set (#7116)\n\t\t\tif ( value == null || value !== value ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// If a number was passed in, add the unit (except for certain CSS properties)\n\t\t\tif ( type === \"number\" ) {\n\t\t\t\tvalue += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? \"\" : \"px\" );\n\t\t\t}\n\n\t\t\t// background-* props affect original clone's values\n\t\t\tif ( !support.clearCloneStyle && value === \"\" && name.indexOf( \"background\" ) === 0 ) {\n\t\t\t\tstyle[ name ] = \"inherit\";\n\t\t\t}\n\n\t\t\t// If a hook was provided, use that value, otherwise just set the specified value\n\t\t\tif ( !hooks || !( \"set\" in hooks ) ||\n\t\t\t\t( value = hooks.set( elem, value, extra ) ) !== undefined ) {\n\n\t\t\t\tif ( isCustomProp ) {\n\t\t\t\t\tstyle.setProperty( name, value );\n\t\t\t\t} else {\n\t\t\t\t\tstyle[ name ] = value;\n\t\t\t\t}\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// If a hook was provided get the non-computed value from there\n\t\t\tif ( hooks && \"get\" in hooks &&\n\t\t\t\t( ret = hooks.get( elem, false, extra ) ) !== undefined ) {\n\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\t// Otherwise just get the value from the style object\n\t\t\treturn style[ name ];\n\t\t}\n\t},\n\n\tcss: function( elem, name, extra, styles ) {\n\t\tvar val, num, hooks,\n\t\t\torigName = camelCase( name ),\n\t\t\tisCustomProp = rcustomProp.test( name );\n\n\t\t// Make sure that we're working with the right name. We don't\n\t\t// want to modify the value if it is a CSS custom property\n\t\t// since they are user-defined.\n\t\tif ( !isCustomProp ) {\n\t\t\tname = finalPropName( origName );\n\t\t}\n\n\t\t// Try prefixed name followed by the unprefixed name\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// If a hook was provided get the computed value from there\n\t\tif ( hooks && \"get\" in hooks ) {\n\t\t\tval = hooks.get( elem, true, extra );\n\t\t}\n\n\t\t// Otherwise, if a way to get the computed value exists, use that\n\t\tif ( val === undefined ) {\n\t\t\tval = curCSS( elem, name, styles );\n\t\t}\n\n\t\t// Convert \"normal\" to computed value\n\t\tif ( val === \"normal\" && name in cssNormalTransform ) {\n\t\t\tval = cssNormalTransform[ name ];\n\t\t}\n\n\t\t// Make numeric if forced or a qualifier was provided and val looks numeric\n\t\tif ( extra === \"\" || extra ) {\n\t\t\tnum = parseFloat( val );\n\t\t\treturn extra === true || isFinite( num ) ? num || 0 : val;\n\t\t}\n\n\t\treturn val;\n\t}\n} );\n\njQuery.each( [ \"height\", \"width\" ], function( i, dimension ) {\n\tjQuery.cssHooks[ dimension ] = {\n\t\tget: function( elem, computed, extra ) {\n\t\t\tif ( computed ) {\n\n\t\t\t\t// Certain elements can have dimension info if we invisibly show them\n\t\t\t\t// but it must have a current display style that would benefit\n\t\t\t\treturn rdisplayswap.test( jQuery.css( elem, \"display\" ) ) &&\n\n\t\t\t\t\t// Support: Safari 8+\n\t\t\t\t\t// Table columns in Safari have non-zero offsetWidth & zero\n\t\t\t\t\t// getBoundingClientRect().width unless display is changed.\n\t\t\t\t\t// Support: IE <=11 only\n\t\t\t\t\t// Running getBoundingClientRect on a disconnected node\n\t\t\t\t\t// in IE throws an error.\n\t\t\t\t\t( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ?\n\t\t\t\t\t\tswap( elem, cssShow, function() {\n\t\t\t\t\t\t\treturn getWidthOrHeight( elem, dimension, extra );\n\t\t\t\t\t\t} ) :\n\t\t\t\t\t\tgetWidthOrHeight( elem, dimension, extra );\n\t\t\t}\n\t\t},\n\n\t\tset: function( elem, value, extra ) {\n\t\t\tvar matches,\n\t\t\t\tstyles = getStyles( elem ),\n\t\t\t\tisBorderBox = jQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\",\n\t\t\t\tsubtract = extra && boxModelAdjustment(\n\t\t\t\t\telem,\n\t\t\t\t\tdimension,\n\t\t\t\t\textra,\n\t\t\t\t\tisBorderBox,\n\t\t\t\t\tstyles\n\t\t\t\t);\n\n\t\t\t// Account for unreliable border-box dimensions by comparing offset* to computed and\n\t\t\t// faking a content-box to get border and padding (gh-3699)\n\t\t\tif ( isBorderBox && support.scrollboxSize() === styles.position ) {\n\t\t\t\tsubtract -= Math.ceil(\n\t\t\t\t\telem[ \"offset\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] -\n\t\t\t\t\tparseFloat( styles[ dimension ] ) -\n\t\t\t\t\tboxModelAdjustment( elem, dimension, \"border\", false, styles ) -\n\t\t\t\t\t0.5\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// Convert to pixels if value adjustment is needed\n\t\t\tif ( subtract && ( matches = rcssNum.exec( value ) ) &&\n\t\t\t\t( matches[ 3 ] || \"px\" ) !== \"px\" ) {\n\n\t\t\t\telem.style[ dimension ] = value;\n\t\t\t\tvalue = jQuery.css( elem, dimension );\n\t\t\t}\n\n\t\t\treturn setPositiveNumber( elem, value, subtract );\n\t\t}\n\t};\n} );\n\njQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft,\n\tfunction( elem, computed ) {\n\t\tif ( computed ) {\n\t\t\treturn ( parseFloat( curCSS( elem, \"marginLeft\" ) ) ||\n\t\t\t\telem.getBoundingClientRect().left -\n\t\t\t\t\tswap( elem, { marginLeft: 0 }, function() {\n\t\t\t\t\t\treturn elem.getBoundingClientRect().left;\n\t\t\t\t\t} )\n\t\t\t\t) + \"px\";\n\t\t}\n\t}\n);\n\n// These hooks are used by animate to expand properties\njQuery.each( {\n\tmargin: \"\",\n\tpadding: \"\",\n\tborder: \"Width\"\n}, function( prefix, suffix ) {\n\tjQuery.cssHooks[ prefix + suffix ] = {\n\t\texpand: function( value ) {\n\t\t\tvar i = 0,\n\t\t\t\texpanded = {},\n\n\t\t\t\t// Assumes a single number if not a string\n\t\t\t\tparts = typeof value === \"string\" ? value.split( \" \" ) : [ value ];\n\n\t\t\tfor ( ; i < 4; i++ ) {\n\t\t\t\texpanded[ prefix + cssExpand[ i ] + suffix ] =\n\t\t\t\t\tparts[ i ] || parts[ i - 2 ] || parts[ 0 ];\n\t\t\t}\n\n\t\t\treturn expanded;\n\t\t}\n\t};\n\n\tif ( prefix !== \"margin\" ) {\n\t\tjQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;\n\t}\n} );\n\njQuery.fn.extend( {\n\tcss: function( name, value ) {\n\t\treturn access( this, function( elem, name, value ) {\n\t\t\tvar styles, len,\n\t\t\t\tmap = {},\n\t\t\t\ti = 0;\n\n\t\t\tif ( Array.isArray( name ) ) {\n\t\t\t\tstyles = getStyles( elem );\n\t\t\t\tlen = name.length;\n\n\t\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\t\tmap[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );\n\t\t\t\t}\n\n\t\t\t\treturn map;\n\t\t\t}\n\n\t\t\treturn value !== undefined ?\n\t\t\t\tjQuery.style( elem, name, value ) :\n\t\t\t\tjQuery.css( elem, name );\n\t\t}, name, value, arguments.length > 1 );\n\t}\n} );\n\n\nfunction Tween( elem, options, prop, end, easing ) {\n\treturn new Tween.prototype.init( elem, options, prop, end, easing );\n}\njQuery.Tween = Tween;\n\nTween.prototype = {\n\tconstructor: Tween,\n\tinit: function( elem, options, prop, end, easing, unit ) {\n\t\tthis.elem = elem;\n\t\tthis.prop = prop;\n\t\tthis.easing = easing || jQuery.easing._default;\n\t\tthis.options = options;\n\t\tthis.start = this.now = this.cur();\n\t\tthis.end = end;\n\t\tthis.unit = unit || ( jQuery.cssNumber[ prop ] ? \"\" : \"px\" );\n\t},\n\tcur: function() {\n\t\tvar hooks = Tween.propHooks[ this.prop ];\n\n\t\treturn hooks && hooks.get ?\n\t\t\thooks.get( this ) :\n\t\t\tTween.propHooks._default.get( this );\n\t},\n\trun: function( percent ) {\n\t\tvar eased,\n\t\t\thooks = Tween.propHooks[ this.prop ];\n\n\t\tif ( this.options.duration ) {\n\t\t\tthis.pos = eased = jQuery.easing[ this.easing ](\n\t\t\t\tpercent, this.options.duration * percent, 0, 1, this.options.duration\n\t\t\t);\n\t\t} else {\n\t\t\tthis.pos = eased = percent;\n\t\t}\n\t\tthis.now = ( this.end - this.start ) * eased + this.start;\n\n\t\tif ( this.options.step ) {\n\t\t\tthis.options.step.call( this.elem, this.now, this );\n\t\t}\n\n\t\tif ( hooks && hooks.set ) {\n\t\t\thooks.set( this );\n\t\t} else {\n\t\t\tTween.propHooks._default.set( this );\n\t\t}\n\t\treturn this;\n\t}\n};\n\nTween.prototype.init.prototype = Tween.prototype;\n\nTween.propHooks = {\n\t_default: {\n\t\tget: function( tween ) {\n\t\t\tvar result;\n\n\t\t\t// Use a property on the element directly when it is not a DOM element,\n\t\t\t// or when there is no matching style property that exists.\n\t\t\tif ( tween.elem.nodeType !== 1 ||\n\t\t\t\ttween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) {\n\t\t\t\treturn tween.elem[ tween.prop ];\n\t\t\t}\n\n\t\t\t// Passing an empty string as a 3rd parameter to .css will automatically\n\t\t\t// attempt a parseFloat and fallback to a string if the parse fails.\n\t\t\t// Simple values such as \"10px\" are parsed to Float;\n\t\t\t// complex values such as \"rotate(1rad)\" are returned as-is.\n\t\t\tresult = jQuery.css( tween.elem, tween.prop, \"\" );\n\n\t\t\t// Empty strings, null, undefined and \"auto\" are converted to 0.\n\t\t\treturn !result || result === \"auto\" ? 0 : result;\n\t\t},\n\t\tset: function( tween ) {\n\n\t\t\t// Use step hook for back compat.\n\t\t\t// Use cssHook if its there.\n\t\t\t// Use .style if available and use plain properties where available.\n\t\t\tif ( jQuery.fx.step[ tween.prop ] ) {\n\t\t\t\tjQuery.fx.step[ tween.prop ]( tween );\n\t\t\t} else if ( tween.elem.nodeType === 1 &&\n\t\t\t\t( tween.elem.style[ jQuery.cssProps[ tween.prop ] ] != null ||\n\t\t\t\t\tjQuery.cssHooks[ tween.prop ] ) ) {\n\t\t\t\tjQuery.style( tween.elem, tween.prop, tween.now + tween.unit );\n\t\t\t} else {\n\t\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t\t}\n\t\t}\n\t}\n};\n\n// Support: IE <=9 only\n// Panic based approach to setting things on disconnected nodes\nTween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {\n\tset: function( tween ) {\n\t\tif ( tween.elem.nodeType && tween.elem.parentNode ) {\n\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t}\n\t}\n};\n\njQuery.easing = {\n\tlinear: function( p ) {\n\t\treturn p;\n\t},\n\tswing: function( p ) {\n\t\treturn 0.5 - Math.cos( p * Math.PI ) / 2;\n\t},\n\t_default: \"swing\"\n};\n\njQuery.fx = Tween.prototype.init;\n\n// Back compat <1.8 extension point\njQuery.fx.step = {};\n\n\n\n\nvar\n\tfxNow, inProgress,\n\trfxtypes = /^(?:toggle|show|hide)$/,\n\trrun = /queueHooks$/;\n\nfunction schedule() {\n\tif ( inProgress ) {\n\t\tif ( document.hidden === false && window.requestAnimationFrame ) {\n\t\t\twindow.requestAnimationFrame( schedule );\n\t\t} else {\n\t\t\twindow.setTimeout( schedule, jQuery.fx.interval );\n\t\t}\n\n\t\tjQuery.fx.tick();\n\t}\n}\n\n// Animations created synchronously will run synchronously\nfunction createFxNow() {\n\twindow.setTimeout( function() {\n\t\tfxNow = undefined;\n\t} );\n\treturn ( fxNow = Date.now() );\n}\n\n// Generate parameters to create a standard animation\nfunction genFx( type, includeWidth ) {\n\tvar which,\n\t\ti = 0,\n\t\tattrs = { height: type };\n\n\t// If we include width, step value is 1 to do all cssExpand values,\n\t// otherwise step value is 2 to skip over Left and Right\n\tincludeWidth = includeWidth ? 1 : 0;\n\tfor ( ; i < 4; i += 2 - includeWidth ) {\n\t\twhich = cssExpand[ i ];\n\t\tattrs[ \"margin\" + which ] = attrs[ \"padding\" + which ] = type;\n\t}\n\n\tif ( includeWidth ) {\n\t\tattrs.opacity = attrs.width = type;\n\t}\n\n\treturn attrs;\n}\n\nfunction createTween( value, prop, animation ) {\n\tvar tween,\n\t\tcollection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ \"*\" ] ),\n\t\tindex = 0,\n\t\tlength = collection.length;\n\tfor ( ; index < length; index++ ) {\n\t\tif ( ( tween = collection[ index ].call( animation, prop, value ) ) ) {\n\n\t\t\t// We're done with this property\n\t\t\treturn tween;\n\t\t}\n\t}\n}\n\nfunction defaultPrefilter( elem, props, opts ) {\n\tvar prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display,\n\t\tisBox = \"width\" in props || \"height\" in props,\n\t\tanim = this,\n\t\torig = {},\n\t\tstyle = elem.style,\n\t\thidden = elem.nodeType && isHiddenWithinTree( elem ),\n\t\tdataShow = dataPriv.get( elem, \"fxshow\" );\n\n\t// Queue-skipping animations hijack the fx hooks\n\tif ( !opts.queue ) {\n\t\thooks = jQuery._queueHooks( elem, \"fx\" );\n\t\tif ( hooks.unqueued == null ) {\n\t\t\thooks.unqueued = 0;\n\t\t\toldfire = hooks.empty.fire;\n\t\t\thooks.empty.fire = function() {\n\t\t\t\tif ( !hooks.unqueued ) {\n\t\t\t\t\toldfire();\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t\thooks.unqueued++;\n\n\t\tanim.always( function() {\n\n\t\t\t// Ensure the complete handler is called before this completes\n\t\t\tanim.always( function() {\n\t\t\t\thooks.unqueued--;\n\t\t\t\tif ( !jQuery.queue( elem, \"fx\" ).length ) {\n\t\t\t\t\thooks.empty.fire();\n\t\t\t\t}\n\t\t\t} );\n\t\t} );\n\t}\n\n\t// Detect show/hide animations\n\tfor ( prop in props ) {\n\t\tvalue = props[ prop ];\n\t\tif ( rfxtypes.test( value ) ) {\n\t\t\tdelete props[ prop ];\n\t\t\ttoggle = toggle || value === \"toggle\";\n\t\t\tif ( value === ( hidden ? \"hide\" : \"show\" ) ) {\n\n\t\t\t\t// Pretend to be hidden if this is a \"show\" and\n\t\t\t\t// there is still data from a stopped show/hide\n\t\t\t\tif ( value === \"show\" && dataShow && dataShow[ prop ] !== undefined ) {\n\t\t\t\t\thidden = true;\n\n\t\t\t\t// Ignore all other no-op show/hide data\n\t\t\t\t} else {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\t\t\torig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop );\n\t\t}\n\t}\n\n\t// Bail out if this is a no-op like .hide().hide()\n\tpropTween = !jQuery.isEmptyObject( props );\n\tif ( !propTween && jQuery.isEmptyObject( orig ) ) {\n\t\treturn;\n\t}\n\n\t// Restrict \"overflow\" and \"display\" styles during box animations\n\tif ( isBox && elem.nodeType === 1 ) {\n\n\t\t// Support: IE <=9 - 11, Edge 12 - 15\n\t\t// Record all 3 overflow attributes because IE does not infer the shorthand\n\t\t// from identically-valued overflowX and overflowY and Edge just mirrors\n\t\t// the overflowX value there.\n\t\topts.overflow = [ style.overflow, style.overflowX, style.overflowY ];\n\n\t\t// Identify a display type, preferring old show/hide data over the CSS cascade\n\t\trestoreDisplay = dataShow && dataShow.display;\n\t\tif ( restoreDisplay == null ) {\n\t\t\trestoreDisplay = dataPriv.get( elem, \"display\" );\n\t\t}\n\t\tdisplay = jQuery.css( elem, \"display\" );\n\t\tif ( display === \"none\" ) {\n\t\t\tif ( restoreDisplay ) {\n\t\t\t\tdisplay = restoreDisplay;\n\t\t\t} else {\n\n\t\t\t\t// Get nonempty value(s) by temporarily forcing visibility\n\t\t\t\tshowHide( [ elem ], true );\n\t\t\t\trestoreDisplay = elem.style.display || restoreDisplay;\n\t\t\t\tdisplay = jQuery.css( elem, \"display\" );\n\t\t\t\tshowHide( [ elem ] );\n\t\t\t}\n\t\t}\n\n\t\t// Animate inline elements as inline-block\n\t\tif ( display === \"inline\" || display === \"inline-block\" && restoreDisplay != null ) {\n\t\t\tif ( jQuery.css( elem, \"float\" ) === \"none\" ) {\n\n\t\t\t\t// Restore the original display value at the end of pure show/hide animations\n\t\t\t\tif ( !propTween ) {\n\t\t\t\t\tanim.done( function() {\n\t\t\t\t\t\tstyle.display = restoreDisplay;\n\t\t\t\t\t} );\n\t\t\t\t\tif ( restoreDisplay == null ) {\n\t\t\t\t\t\tdisplay = style.display;\n\t\t\t\t\t\trestoreDisplay = display === \"none\" ? \"\" : display;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tstyle.display = \"inline-block\";\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( opts.overflow ) {\n\t\tstyle.overflow = \"hidden\";\n\t\tanim.always( function() {\n\t\t\tstyle.overflow = opts.overflow[ 0 ];\n\t\t\tstyle.overflowX = opts.overflow[ 1 ];\n\t\t\tstyle.overflowY = opts.overflow[ 2 ];\n\t\t} );\n\t}\n\n\t// Implement show/hide animations\n\tpropTween = false;\n\tfor ( prop in orig ) {\n\n\t\t// General show/hide setup for this element animation\n\t\tif ( !propTween ) {\n\t\t\tif ( dataShow ) {\n\t\t\t\tif ( \"hidden\" in dataShow ) {\n\t\t\t\t\thidden = dataShow.hidden;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tdataShow = dataPriv.access( elem, \"fxshow\", { display: restoreDisplay } );\n\t\t\t}\n\n\t\t\t// Store hidden/visible for toggle so `.stop().toggle()` \"reverses\"\n\t\t\tif ( toggle ) {\n\t\t\t\tdataShow.hidden = !hidden;\n\t\t\t}\n\n\t\t\t// Show elements before animating them\n\t\t\tif ( hidden ) {\n\t\t\t\tshowHide( [ elem ], true );\n\t\t\t}\n\n\t\t\t/* eslint-disable no-loop-func */\n\n\t\t\tanim.done( function() {\n\n\t\t\t/* eslint-enable no-loop-func */\n\n\t\t\t\t// The final step of a \"hide\" animation is actually hiding the element\n\t\t\t\tif ( !hidden ) {\n\t\t\t\t\tshowHide( [ elem ] );\n\t\t\t\t}\n\t\t\t\tdataPriv.remove( elem, \"fxshow\" );\n\t\t\t\tfor ( prop in orig ) {\n\t\t\t\t\tjQuery.style( elem, prop, orig[ prop ] );\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\t// Per-property setup\n\t\tpropTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim );\n\t\tif ( !( prop in dataShow ) ) {\n\t\t\tdataShow[ prop ] = propTween.start;\n\t\t\tif ( hidden ) {\n\t\t\t\tpropTween.end = propTween.start;\n\t\t\t\tpropTween.start = 0;\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction propFilter( props, specialEasing ) {\n\tvar index, name, easing, value, hooks;\n\n\t// camelCase, specialEasing and expand cssHook pass\n\tfor ( index in props ) {\n\t\tname = camelCase( index );\n\t\teasing = specialEasing[ name ];\n\t\tvalue = props[ index ];\n\t\tif ( Array.isArray( value ) ) {\n\t\t\teasing = value[ 1 ];\n\t\t\tvalue = props[ index ] = value[ 0 ];\n\t\t}\n\n\t\tif ( index !== name ) {\n\t\t\tprops[ name ] = value;\n\t\t\tdelete props[ index ];\n\t\t}\n\n\t\thooks = jQuery.cssHooks[ name ];\n\t\tif ( hooks && \"expand\" in hooks ) {\n\t\t\tvalue = hooks.expand( value );\n\t\t\tdelete props[ name ];\n\n\t\t\t// Not quite $.extend, this won't overwrite existing keys.\n\t\t\t// Reusing 'index' because we have the correct \"name\"\n\t\t\tfor ( index in value ) {\n\t\t\t\tif ( !( index in props ) ) {\n\t\t\t\t\tprops[ index ] = value[ index ];\n\t\t\t\t\tspecialEasing[ index ] = easing;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tspecialEasing[ name ] = easing;\n\t\t}\n\t}\n}\n\nfunction Animation( elem, properties, options ) {\n\tvar result,\n\t\tstopped,\n\t\tindex = 0,\n\t\tlength = Animation.prefilters.length,\n\t\tdeferred = jQuery.Deferred().always( function() {\n\n\t\t\t// Don't match elem in the :animated selector\n\t\t\tdelete tick.elem;\n\t\t} ),\n\t\ttick = function() {\n\t\t\tif ( stopped ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tvar currentTime = fxNow || createFxNow(),\n\t\t\t\tremaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),\n\n\t\t\t\t// Support: Android 2.3 only\n\t\t\t\t// Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497)\n\t\t\t\ttemp = remaining / animation.duration || 0,\n\t\t\t\tpercent = 1 - temp,\n\t\t\t\tindex = 0,\n\t\t\t\tlength = animation.tweens.length;\n\n\t\t\tfor ( ; index < length; index++ ) {\n\t\t\t\tanimation.tweens[ index ].run( percent );\n\t\t\t}\n\n\t\t\tdeferred.notifyWith( elem, [ animation, percent, remaining ] );\n\n\t\t\t// If there's more to do, yield\n\t\t\tif ( percent < 1 && length ) {\n\t\t\t\treturn remaining;\n\t\t\t}\n\n\t\t\t// If this was an empty animation, synthesize a final progress notification\n\t\t\tif ( !length ) {\n\t\t\t\tdeferred.notifyWith( elem, [ animation, 1, 0 ] );\n\t\t\t}\n\n\t\t\t// Resolve the animation and report its conclusion\n\t\t\tdeferred.resolveWith( elem, [ animation ] );\n\t\t\treturn false;\n\t\t},\n\t\tanimation = deferred.promise( {\n\t\t\telem: elem,\n\t\t\tprops: jQuery.extend( {}, properties ),\n\t\t\topts: jQuery.extend( true, {\n\t\t\t\tspecialEasing: {},\n\t\t\t\teasing: jQuery.easing._default\n\t\t\t}, options ),\n\t\t\toriginalProperties: properties,\n\t\t\toriginalOptions: options,\n\t\t\tstartTime: fxNow || createFxNow(),\n\t\t\tduration: options.duration,\n\t\t\ttweens: [],\n\t\t\tcreateTween: function( prop, end ) {\n\t\t\t\tvar tween = jQuery.Tween( elem, animation.opts, prop, end,\n\t\t\t\t\t\tanimation.opts.specialEasing[ prop ] || animation.opts.easing );\n\t\t\t\tanimation.tweens.push( tween );\n\t\t\t\treturn tween;\n\t\t\t},\n\t\t\tstop: function( gotoEnd ) {\n\t\t\t\tvar index = 0,\n\n\t\t\t\t\t// If we are going to the end, we want to run all the tweens\n\t\t\t\t\t// otherwise we skip this part\n\t\t\t\t\tlength = gotoEnd ? animation.tweens.length : 0;\n\t\t\t\tif ( stopped ) {\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t\tstopped = true;\n\t\t\t\tfor ( ; index < length; index++ ) {\n\t\t\t\t\tanimation.tweens[ index ].run( 1 );\n\t\t\t\t}\n\n\t\t\t\t// Resolve when we played the last frame; otherwise, reject\n\t\t\t\tif ( gotoEnd ) {\n\t\t\t\t\tdeferred.notifyWith( elem, [ animation, 1, 0 ] );\n\t\t\t\t\tdeferred.resolveWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t} else {\n\t\t\t\t\tdeferred.rejectWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} ),\n\t\tprops = animation.props;\n\n\tpropFilter( props, animation.opts.specialEasing );\n\n\tfor ( ; index < length; index++ ) {\n\t\tresult = Animation.prefilters[ index ].call( animation, elem, props, animation.opts );\n\t\tif ( result ) {\n\t\t\tif ( isFunction( result.stop ) ) {\n\t\t\t\tjQuery._queueHooks( animation.elem, animation.opts.queue ).stop =\n\t\t\t\t\tresult.stop.bind( result );\n\t\t\t}\n\t\t\treturn result;\n\t\t}\n\t}\n\n\tjQuery.map( props, createTween, animation );\n\n\tif ( isFunction( animation.opts.start ) ) {\n\t\tanimation.opts.start.call( elem, animation );\n\t}\n\n\t// Attach callbacks from options\n\tanimation\n\t\t.progress( animation.opts.progress )\n\t\t.done( animation.opts.done, animation.opts.complete )\n\t\t.fail( animation.opts.fail )\n\t\t.always( animation.opts.always );\n\n\tjQuery.fx.timer(\n\t\tjQuery.extend( tick, {\n\t\t\telem: elem,\n\t\t\tanim: animation,\n\t\t\tqueue: animation.opts.queue\n\t\t} )\n\t);\n\n\treturn animation;\n}\n\njQuery.Animation = jQuery.extend( Animation, {\n\n\ttweeners: {\n\t\t\"*\": [ function( prop, value ) {\n\t\t\tvar tween = this.createTween( prop, value );\n\t\t\tadjustCSS( tween.elem, prop, rcssNum.exec( value ), tween );\n\t\t\treturn tween;\n\t\t} ]\n\t},\n\n\ttweener: function( props, callback ) {\n\t\tif ( isFunction( props ) ) {\n\t\t\tcallback = props;\n\t\t\tprops = [ \"*\" ];\n\t\t} else {\n\t\t\tprops = props.match( rnothtmlwhite );\n\t\t}\n\n\t\tvar prop,\n\t\t\tindex = 0,\n\t\t\tlength = props.length;\n\n\t\tfor ( ; index < length; index++ ) {\n\t\t\tprop = props[ index ];\n\t\t\tAnimation.tweeners[ prop ] = Animation.tweeners[ prop ] || [];\n\t\t\tAnimation.tweeners[ prop ].unshift( callback );\n\t\t}\n\t},\n\n\tprefilters: [ defaultPrefilter ],\n\n\tprefilter: function( callback, prepend ) {\n\t\tif ( prepend ) {\n\t\t\tAnimation.prefilters.unshift( callback );\n\t\t} else {\n\t\t\tAnimation.prefilters.push( callback );\n\t\t}\n\t}\n} );\n\njQuery.speed = function( speed, easing, fn ) {\n\tvar opt = speed && typeof speed === \"object\" ? jQuery.extend( {}, speed ) : {\n\t\tcomplete: fn || !fn && easing ||\n\t\t\tisFunction( speed ) && speed,\n\t\tduration: speed,\n\t\teasing: fn && easing || easing && !isFunction( easing ) && easing\n\t};\n\n\t// Go to the end state if fx are off\n\tif ( jQuery.fx.off ) {\n\t\topt.duration = 0;\n\n\t} else {\n\t\tif ( typeof opt.duration !== \"number\" ) {\n\t\t\tif ( opt.duration in jQuery.fx.speeds ) {\n\t\t\t\topt.duration = jQuery.fx.speeds[ opt.duration ];\n\n\t\t\t} else {\n\t\t\t\topt.duration = jQuery.fx.speeds._default;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Normalize opt.queue - true/undefined/null -> \"fx\"\n\tif ( opt.queue == null || opt.queue === true ) {\n\t\topt.queue = \"fx\";\n\t}\n\n\t// Queueing\n\topt.old = opt.complete;\n\n\topt.complete = function() {\n\t\tif ( isFunction( opt.old ) ) {\n\t\t\topt.old.call( this );\n\t\t}\n\n\t\tif ( opt.queue ) {\n\t\t\tjQuery.dequeue( this, opt.queue );\n\t\t}\n\t};\n\n\treturn opt;\n};\n\njQuery.fn.extend( {\n\tfadeTo: function( speed, to, easing, callback ) {\n\n\t\t// Show any hidden elements after setting opacity to 0\n\t\treturn this.filter( isHiddenWithinTree ).css( \"opacity\", 0 ).show()\n\n\t\t\t// Animate to the value specified\n\t\t\t.end().animate( { opacity: to }, speed, easing, callback );\n\t},\n\tanimate: function( prop, speed, easing, callback ) {\n\t\tvar empty = jQuery.isEmptyObject( prop ),\n\t\t\toptall = jQuery.speed( speed, easing, callback ),\n\t\t\tdoAnimation = function() {\n\n\t\t\t\t// Operate on a copy of prop so per-property easing won't be lost\n\t\t\t\tvar anim = Animation( this, jQuery.extend( {}, prop ), optall );\n\n\t\t\t\t// Empty animations, or finishing resolves immediately\n\t\t\t\tif ( empty || dataPriv.get( this, \"finish\" ) ) {\n\t\t\t\t\tanim.stop( true );\n\t\t\t\t}\n\t\t\t};\n\t\t\tdoAnimation.finish = doAnimation;\n\n\t\treturn empty || optall.queue === false ?\n\t\t\tthis.each( doAnimation ) :\n\t\t\tthis.queue( optall.queue, doAnimation );\n\t},\n\tstop: function( type, clearQueue, gotoEnd ) {\n\t\tvar stopQueue = function( hooks ) {\n\t\t\tvar stop = hooks.stop;\n\t\t\tdelete hooks.stop;\n\t\t\tstop( gotoEnd );\n\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tgotoEnd = clearQueue;\n\t\t\tclearQueue = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\tif ( clearQueue && type !== false ) {\n\t\t\tthis.queue( type || \"fx\", [] );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar dequeue = true,\n\t\t\t\tindex = type != null && type + \"queueHooks\",\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tdata = dataPriv.get( this );\n\n\t\t\tif ( index ) {\n\t\t\t\tif ( data[ index ] && data[ index ].stop ) {\n\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor ( index in data ) {\n\t\t\t\t\tif ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {\n\t\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this &&\n\t\t\t\t\t( type == null || timers[ index ].queue === type ) ) {\n\n\t\t\t\t\ttimers[ index ].anim.stop( gotoEnd );\n\t\t\t\t\tdequeue = false;\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Start the next in the queue if the last step wasn't forced.\n\t\t\t// Timers currently will call their complete callbacks, which\n\t\t\t// will dequeue but only if they were gotoEnd.\n\t\t\tif ( dequeue || !gotoEnd ) {\n\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t}\n\t\t} );\n\t},\n\tfinish: function( type ) {\n\t\tif ( type !== false ) {\n\t\t\ttype = type || \"fx\";\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tvar index,\n\t\t\t\tdata = dataPriv.get( this ),\n\t\t\t\tqueue = data[ type + \"queue\" ],\n\t\t\t\thooks = data[ type + \"queueHooks\" ],\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tlength = queue ? queue.length : 0;\n\n\t\t\t// Enable finishing flag on private data\n\t\t\tdata.finish = true;\n\n\t\t\t// Empty the queue first\n\t\t\tjQuery.queue( this, type, [] );\n\n\t\t\tif ( hooks && hooks.stop ) {\n\t\t\t\thooks.stop.call( this, true );\n\t\t\t}\n\n\t\t\t// Look for any active animations, and finish them\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this && timers[ index ].queue === type ) {\n\t\t\t\t\ttimers[ index ].anim.stop( true );\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Look for any animations in the old queue and finish them\n\t\t\tfor ( index = 0; index < length; index++ ) {\n\t\t\t\tif ( queue[ index ] && queue[ index ].finish ) {\n\t\t\t\t\tqueue[ index ].finish.call( this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Turn off finishing flag\n\t\t\tdelete data.finish;\n\t\t} );\n\t}\n} );\n\njQuery.each( [ \"toggle\", \"show\", \"hide\" ], function( i, name ) {\n\tvar cssFn = jQuery.fn[ name ];\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn speed == null || typeof speed === \"boolean\" ?\n\t\t\tcssFn.apply( this, arguments ) :\n\t\t\tthis.animate( genFx( name, true ), speed, easing, callback );\n\t};\n} );\n\n// Generate shortcuts for custom animations\njQuery.each( {\n\tslideDown: genFx( \"show\" ),\n\tslideUp: genFx( \"hide\" ),\n\tslideToggle: genFx( \"toggle\" ),\n\tfadeIn: { opacity: \"show\" },\n\tfadeOut: { opacity: \"hide\" },\n\tfadeToggle: { opacity: \"toggle\" }\n}, function( name, props ) {\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn this.animate( props, speed, easing, callback );\n\t};\n} );\n\njQuery.timers = [];\njQuery.fx.tick = function() {\n\tvar timer,\n\t\ti = 0,\n\t\ttimers = jQuery.timers;\n\n\tfxNow = Date.now();\n\n\tfor ( ; i < timers.length; i++ ) {\n\t\ttimer = timers[ i ];\n\n\t\t// Run the timer and safely remove it when done (allowing for external removal)\n\t\tif ( !timer() && timers[ i ] === timer ) {\n\t\t\ttimers.splice( i--, 1 );\n\t\t}\n\t}\n\n\tif ( !timers.length ) {\n\t\tjQuery.fx.stop();\n\t}\n\tfxNow = undefined;\n};\n\njQuery.fx.timer = function( timer ) {\n\tjQuery.timers.push( timer );\n\tjQuery.fx.start();\n};\n\njQuery.fx.interval = 13;\njQuery.fx.start = function() {\n\tif ( inProgress ) {\n\t\treturn;\n\t}\n\n\tinProgress = true;\n\tschedule();\n};\n\njQuery.fx.stop = function() {\n\tinProgress = null;\n};\n\njQuery.fx.speeds = {\n\tslow: 600,\n\tfast: 200,\n\n\t// Default speed\n\t_default: 400\n};\n\n\n// Based off of the plugin by Clint Helfers, with permission.\n// https://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/\njQuery.fn.delay = function( time, type ) {\n\ttime = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;\n\ttype = type || \"fx\";\n\n\treturn this.queue( type, function( next, hooks ) {\n\t\tvar timeout = window.setTimeout( next, time );\n\t\thooks.stop = function() {\n\t\t\twindow.clearTimeout( timeout );\n\t\t};\n\t} );\n};\n\n\n( function() {\n\tvar input = document.createElement( \"input\" ),\n\t\tselect = document.createElement( \"select\" ),\n\t\topt = select.appendChild( document.createElement( \"option\" ) );\n\n\tinput.type = \"checkbox\";\n\n\t// Support: Android <=4.3 only\n\t// Default value for a checkbox should be \"on\"\n\tsupport.checkOn = input.value !== \"\";\n\n\t// Support: IE <=11 only\n\t// Must access selectedIndex to make default options select\n\tsupport.optSelected = opt.selected;\n\n\t// Support: IE <=11 only\n\t// An input loses its value after becoming a radio\n\tinput = document.createElement( \"input\" );\n\tinput.value = \"t\";\n\tinput.type = \"radio\";\n\tsupport.radioValue = input.value === \"t\";\n} )();\n\n\nvar boolHook,\n\tattrHandle = jQuery.expr.attrHandle;\n\njQuery.fn.extend( {\n\tattr: function( name, value ) {\n\t\treturn access( this, jQuery.attr, name, value, arguments.length > 1 );\n\t},\n\n\tremoveAttr: function( name ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.removeAttr( this, name );\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tattr: function( elem, name, value ) {\n\t\tvar ret, hooks,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don't get/set attributes on text, comment and attribute nodes\n\t\tif ( nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Fallback to prop when attributes are not supported\n\t\tif ( typeof elem.getAttribute === \"undefined\" ) {\n\t\t\treturn jQuery.prop( elem, name, value );\n\t\t}\n\n\t\t// Attribute hooks are determined by the lowercase version\n\t\t// Grab necessary hook if one is defined\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\t\t\thooks = jQuery.attrHooks[ name.toLowerCase() ] ||\n\t\t\t\t( jQuery.expr.match.bool.test( name ) ? boolHook : undefined );\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( value === null ) {\n\t\t\t\tjQuery.removeAttr( elem, name );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( hooks && \"set\" in hooks &&\n\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\telem.setAttribute( name, value + \"\" );\n\t\t\treturn value;\n\t\t}\n\n\t\tif ( hooks && \"get\" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\tret = jQuery.find.attr( elem, name );\n\n\t\t// Non-existent attributes return null, we normalize to undefined\n\t\treturn ret == null ? undefined : ret;\n\t},\n\n\tattrHooks: {\n\t\ttype: {\n\t\t\tset: function( elem, value ) {\n\t\t\t\tif ( !support.radioValue && value === \"radio\" &&\n\t\t\t\t\tnodeName( elem, \"input\" ) ) {\n\t\t\t\t\tvar val = elem.value;\n\t\t\t\t\telem.setAttribute( \"type\", value );\n\t\t\t\t\tif ( val ) {\n\t\t\t\t\t\telem.value = val;\n\t\t\t\t\t}\n\t\t\t\t\treturn value;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\tremoveAttr: function( elem, value ) {\n\t\tvar name,\n\t\t\ti = 0,\n\n\t\t\t// Attribute names can contain non-HTML whitespace characters\n\t\t\t// https://html.spec.whatwg.org/multipage/syntax.html#attributes-2\n\t\t\tattrNames = value && value.match( rnothtmlwhite );\n\n\t\tif ( attrNames && elem.nodeType === 1 ) {\n\t\t\twhile ( ( name = attrNames[ i++ ] ) ) {\n\t\t\t\telem.removeAttribute( name );\n\t\t\t}\n\t\t}\n\t}\n} );\n\n// Hooks for boolean attributes\nboolHook = {\n\tset: function( elem, value, name ) {\n\t\tif ( value === false ) {\n\n\t\t\t// Remove boolean attributes when set to false\n\t\t\tjQuery.removeAttr( elem, name );\n\t\t} else {\n\t\t\telem.setAttribute( name, name );\n\t\t}\n\t\treturn name;\n\t}\n};\n\njQuery.each( jQuery.expr.match.bool.source.match( /\\w+/g ), function( i, name ) {\n\tvar getter = attrHandle[ name ] || jQuery.find.attr;\n\n\tattrHandle[ name ] = function( elem, name, isXML ) {\n\t\tvar ret, handle,\n\t\t\tlowercaseName = name.toLowerCase();\n\n\t\tif ( !isXML ) {\n\n\t\t\t// Avoid an infinite loop by temporarily removing this function from the getter\n\t\t\thandle = attrHandle[ lowercaseName ];\n\t\t\tattrHandle[ lowercaseName ] = ret;\n\t\t\tret = getter( elem, name, isXML ) != null ?\n\t\t\t\tlowercaseName :\n\t\t\t\tnull;\n\t\t\tattrHandle[ lowercaseName ] = handle;\n\t\t}\n\t\treturn ret;\n\t};\n} );\n\n\n\n\nvar rfocusable = /^(?:input|select|textarea|button)$/i,\n\trclickable = /^(?:a|area)$/i;\n\njQuery.fn.extend( {\n\tprop: function( name, value ) {\n\t\treturn access( this, jQuery.prop, name, value, arguments.length > 1 );\n\t},\n\n\tremoveProp: function( name ) {\n\t\treturn this.each( function() {\n\t\t\tdelete this[ jQuery.propFix[ name ] || name ];\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tprop: function( elem, name, value ) {\n\t\tvar ret, hooks,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don't get/set properties on text, comment and attribute nodes\n\t\tif ( nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\n\t\t\t// Fix name and attach hooks\n\t\t\tname = jQuery.propFix[ name ] || name;\n\t\t\thooks = jQuery.propHooks[ name ];\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( hooks && \"set\" in hooks &&\n\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\treturn ( elem[ name ] = value );\n\t\t}\n\n\t\tif ( hooks && \"get\" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\treturn elem[ name ];\n\t},\n\n\tpropHooks: {\n\t\ttabIndex: {\n\t\t\tget: function( elem ) {\n\n\t\t\t\t// Support: IE <=9 - 11 only\n\t\t\t\t// elem.tabIndex doesn't always return the\n\t\t\t\t// correct value when it hasn't been explicitly set\n\t\t\t\t// https://web.archive.org/web/20141116233347/http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/\n\t\t\t\t// Use proper attribute retrieval(#12072)\n\t\t\t\tvar tabindex = jQuery.find.attr( elem, \"tabindex\" );\n\n\t\t\t\tif ( tabindex ) {\n\t\t\t\t\treturn parseInt( tabindex, 10 );\n\t\t\t\t}\n\n\t\t\t\tif (\n\t\t\t\t\trfocusable.test( elem.nodeName ) ||\n\t\t\t\t\trclickable.test( elem.nodeName ) &&\n\t\t\t\t\telem.href\n\t\t\t\t) {\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t}\n\t},\n\n\tpropFix: {\n\t\t\"for\": \"htmlFor\",\n\t\t\"class\": \"className\"\n\t}\n} );\n\n// Support: IE <=11 only\n// Accessing the selectedIndex property\n// forces the browser to respect setting selected\n// on the option\n// The getter ensures a default option is selected\n// when in an optgroup\n// eslint rule \"no-unused-expressions\" is disabled for this code\n// since it considers such accessions noop\nif ( !support.optSelected ) {\n\tjQuery.propHooks.selected = {\n\t\tget: function( elem ) {\n\n\t\t\t/* eslint no-unused-expressions: \"off\" */\n\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent && parent.parentNode ) {\n\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t}\n\t\t\treturn null;\n\t\t},\n\t\tset: function( elem ) {\n\n\t\t\t/* eslint no-unused-expressions: \"off\" */\n\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent ) {\n\t\t\t\tparent.selectedIndex;\n\n\t\t\t\tif ( parent.parentNode ) {\n\t\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\njQuery.each( [\n\t\"tabIndex\",\n\t\"readOnly\",\n\t\"maxLength\",\n\t\"cellSpacing\",\n\t\"cellPadding\",\n\t\"rowSpan\",\n\t\"colSpan\",\n\t\"useMap\",\n\t\"frameBorder\",\n\t\"contentEditable\"\n], function() {\n\tjQuery.propFix[ this.toLowerCase() ] = this;\n} );\n\n\n\n\n\t// Strip and collapse whitespace according to HTML spec\n\t// https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace\n\tfunction stripAndCollapse( value ) {\n\t\tvar tokens = value.match( rnothtmlwhite ) || [];\n\t\treturn tokens.join( \" \" );\n\t}\n\n\nfunction getClass( elem ) {\n\treturn elem.getAttribute && elem.getAttribute( \"class\" ) || \"\";\n}\n\nfunction classesToArray( value ) {\n\tif ( Array.isArray( value ) ) {\n\t\treturn value;\n\t}\n\tif ( typeof value === \"string\" ) {\n\t\treturn value.match( rnothtmlwhite ) || [];\n\t}\n\treturn [];\n}\n\njQuery.fn.extend( {\n\taddClass: function( value ) {\n\t\tvar classes, elem, cur, curValue, clazz, j, finalValue,\n\t\t\ti = 0;\n\n\t\tif ( isFunction( value ) ) {\n\t\t\treturn this.each( function( j ) {\n\t\t\t\tjQuery( this ).addClass( value.call( this, j, getClass( this ) ) );\n\t\t\t} );\n\t\t}\n\n\t\tclasses = classesToArray( value );\n\n\t\tif ( classes.length ) {\n\t\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\t\tcurValue = getClass( elem );\n\t\t\t\tcur = elem.nodeType === 1 && ( \" \" + stripAndCollapse( curValue ) + \" \" );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\twhile ( ( clazz = classes[ j++ ] ) ) {\n\t\t\t\t\t\tif ( cur.indexOf( \" \" + clazz + \" \" ) < 0 ) {\n\t\t\t\t\t\t\tcur += clazz + \" \";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = stripAndCollapse( cur );\n\t\t\t\t\tif ( curValue !== finalValue ) {\n\t\t\t\t\t\telem.setAttribute( \"class\", finalValue );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tremoveClass: function( value ) {\n\t\tvar classes, elem, cur, curValue, clazz, j, finalValue,\n\t\t\ti = 0;\n\n\t\tif ( isFunction( value ) ) {\n\t\t\treturn this.each( function( j ) {\n\t\t\t\tjQuery( this ).removeClass( value.call( this, j, getClass( this ) ) );\n\t\t\t} );\n\t\t}\n\n\t\tif ( !arguments.length ) {\n\t\t\treturn this.attr( \"class\", \"\" );\n\t\t}\n\n\t\tclasses = classesToArray( value );\n\n\t\tif ( classes.length ) {\n\t\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\t\tcurValue = getClass( elem );\n\n\t\t\t\t// This expression is here for better compressibility (see addClass)\n\t\t\t\tcur = elem.nodeType === 1 && ( \" \" + stripAndCollapse( curValue ) + \" \" );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\twhile ( ( clazz = classes[ j++ ] ) ) {\n\n\t\t\t\t\t\t// Remove *all* instances\n\t\t\t\t\t\twhile ( cur.indexOf( \" \" + clazz + \" \" ) > -1 ) {\n\t\t\t\t\t\t\tcur = cur.replace( \" \" + clazz + \" \", \" \" );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = stripAndCollapse( cur );\n\t\t\t\t\tif ( curValue !== finalValue ) {\n\t\t\t\t\t\telem.setAttribute( \"class\", finalValue );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\ttoggleClass: function( value, stateVal ) {\n\t\tvar type = typeof value,\n\t\t\tisValidValue = type === \"string\" || Array.isArray( value );\n\n\t\tif ( typeof stateVal === \"boolean\" && isValidValue ) {\n\t\t\treturn stateVal ? this.addClass( value ) : this.removeClass( value );\n\t\t}\n\n\t\tif ( isFunction( value ) ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).toggleClass(\n\t\t\t\t\tvalue.call( this, i, getClass( this ), stateVal ),\n\t\t\t\t\tstateVal\n\t\t\t\t);\n\t\t\t} );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar className, i, self, classNames;\n\n\t\t\tif ( isValidValue ) {\n\n\t\t\t\t// Toggle individual class names\n\t\t\t\ti = 0;\n\t\t\t\tself = jQuery( this );\n\t\t\t\tclassNames = classesToArray( value );\n\n\t\t\t\twhile ( ( className = classNames[ i++ ] ) ) {\n\n\t\t\t\t\t// Check each className given, space separated list\n\t\t\t\t\tif ( self.hasClass( className ) ) {\n\t\t\t\t\t\tself.removeClass( className );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tself.addClass( className );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t// Toggle whole class name\n\t\t\t} else if ( value === undefined || type === \"boolean\" ) {\n\t\t\t\tclassName = getClass( this );\n\t\t\t\tif ( className ) {\n\n\t\t\t\t\t// Store className if set\n\t\t\t\t\tdataPriv.set( this, \"__className__\", className );\n\t\t\t\t}\n\n\t\t\t\t// If the element has a class name or if we're passed `false`,\n\t\t\t\t// then remove the whole classname (if there was one, the above saved it).\n\t\t\t\t// Otherwise bring back whatever was previously saved (if anything),\n\t\t\t\t// falling back to the empty string if nothing was stored.\n\t\t\t\tif ( this.setAttribute ) {\n\t\t\t\t\tthis.setAttribute( \"class\",\n\t\t\t\t\t\tclassName || value === false ?\n\t\t\t\t\t\t\"\" :\n\t\t\t\t\t\tdataPriv.get( this, \"__className__\" ) || \"\"\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t},\n\n\thasClass: function( selector ) {\n\t\tvar className, elem,\n\t\t\ti = 0;\n\n\t\tclassName = \" \" + selector + \" \";\n\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\tif ( elem.nodeType === 1 &&\n\t\t\t\t( \" \" + stripAndCollapse( getClass( elem ) ) + \" \" ).indexOf( className ) > -1 ) {\n\t\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n} );\n\n\n\n\nvar rreturn = /\\r/g;\n\njQuery.fn.extend( {\n\tval: function( value ) {\n\t\tvar hooks, ret, valueIsFunction,\n\t\t\telem = this[ 0 ];\n\n\t\tif ( !arguments.length ) {\n\t\t\tif ( elem ) {\n\t\t\t\thooks = jQuery.valHooks[ elem.type ] ||\n\t\t\t\t\tjQuery.valHooks[ elem.nodeName.toLowerCase() ];\n\n\t\t\t\tif ( hooks &&\n\t\t\t\t\t\"get\" in hooks &&\n\t\t\t\t\t( ret = hooks.get( elem, \"value\" ) ) !== undefined\n\t\t\t\t) {\n\t\t\t\t\treturn ret;\n\t\t\t\t}\n\n\t\t\t\tret = elem.value;\n\n\t\t\t\t// Handle most common string cases\n\t\t\t\tif ( typeof ret === \"string\" ) {\n\t\t\t\t\treturn ret.replace( rreturn, \"\" );\n\t\t\t\t}\n\n\t\t\t\t// Handle cases where value is null/undef or number\n\t\t\t\treturn ret == null ? \"\" : ret;\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\tvalueIsFunction = isFunction( value );\n\n\t\treturn this.each( function( i ) {\n\t\t\tvar val;\n\n\t\t\tif ( this.nodeType !== 1 ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( valueIsFunction ) {\n\t\t\t\tval = value.call( this, i, jQuery( this ).val() );\n\t\t\t} else {\n\t\t\t\tval = value;\n\t\t\t}\n\n\t\t\t// Treat null/undefined as \"\"; convert numbers to string\n\t\t\tif ( val == null ) {\n\t\t\t\tval = \"\";\n\n\t\t\t} else if ( typeof val === \"number\" ) {\n\t\t\t\tval += \"\";\n\n\t\t\t} else if ( Array.isArray( val ) ) {\n\t\t\t\tval = jQuery.map( val, function( value ) {\n\t\t\t\t\treturn value == null ? \"\" : value + \"\";\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\thooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];\n\n\t\t\t// If set returns undefined, fall back to normal setting\n\t\t\tif ( !hooks || !( \"set\" in hooks ) || hooks.set( this, val, \"value\" ) === undefined ) {\n\t\t\t\tthis.value = val;\n\t\t\t}\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tvalHooks: {\n\t\toption: {\n\t\t\tget: function( elem ) {\n\n\t\t\t\tvar val = jQuery.find.attr( elem, \"value\" );\n\t\t\t\treturn val != null ?\n\t\t\t\t\tval :\n\n\t\t\t\t\t// Support: IE <=10 - 11 only\n\t\t\t\t\t// option.text throws exceptions (#14686, #14858)\n\t\t\t\t\t// Strip and collapse whitespace\n\t\t\t\t\t// https://html.spec.whatwg.org/#strip-and-collapse-whitespace\n\t\t\t\t\tstripAndCollapse( jQuery.text( elem ) );\n\t\t\t}\n\t\t},\n\t\tselect: {\n\t\t\tget: function( elem ) {\n\t\t\t\tvar value, option, i,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tindex = elem.selectedIndex,\n\t\t\t\t\tone = elem.type === \"select-one\",\n\t\t\t\t\tvalues = one ? null : [],\n\t\t\t\t\tmax = one ? index + 1 : options.length;\n\n\t\t\t\tif ( index < 0 ) {\n\t\t\t\t\ti = max;\n\n\t\t\t\t} else {\n\t\t\t\t\ti = one ? index : 0;\n\t\t\t\t}\n\n\t\t\t\t// Loop through all the selected options\n\t\t\t\tfor ( ; i < max; i++ ) {\n\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t// IE8-9 doesn't update selected after form reset (#2551)\n\t\t\t\t\tif ( ( option.selected || i === index ) &&\n\n\t\t\t\t\t\t\t// Don't return options that are disabled or in a disabled optgroup\n\t\t\t\t\t\t\t!option.disabled &&\n\t\t\t\t\t\t\t( !option.parentNode.disabled ||\n\t\t\t\t\t\t\t\t!nodeName( option.parentNode, \"optgroup\" ) ) ) {\n\n\t\t\t\t\t\t// Get the specific value for the option\n\t\t\t\t\t\tvalue = jQuery( option ).val();\n\n\t\t\t\t\t\t// We don't need an array for one selects\n\t\t\t\t\t\tif ( one ) {\n\t\t\t\t\t\t\treturn value;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Multi-Selects return an array\n\t\t\t\t\t\tvalues.push( value );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn values;\n\t\t\t},\n\n\t\t\tset: function( elem, value ) {\n\t\t\t\tvar optionSet, option,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tvalues = jQuery.makeArray( value ),\n\t\t\t\t\ti = options.length;\n\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\t/* eslint-disable no-cond-assign */\n\n\t\t\t\t\tif ( option.selected =\n\t\t\t\t\t\tjQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1\n\t\t\t\t\t) {\n\t\t\t\t\t\toptionSet = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t/* eslint-enable no-cond-assign */\n\t\t\t\t}\n\n\t\t\t\t// Force browsers to behave consistently when non-matching value is set\n\t\t\t\tif ( !optionSet ) {\n\t\t\t\t\telem.selectedIndex = -1;\n\t\t\t\t}\n\t\t\t\treturn values;\n\t\t\t}\n\t\t}\n\t}\n} );\n\n// Radios and checkboxes getter/setter\njQuery.each( [ \"radio\", \"checkbox\" ], function() {\n\tjQuery.valHooks[ this ] = {\n\t\tset: function( elem, value ) {\n\t\t\tif ( Array.isArray( value ) ) {\n\t\t\t\treturn ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 );\n\t\t\t}\n\t\t}\n\t};\n\tif ( !support.checkOn ) {\n\t\tjQuery.valHooks[ this ].get = function( elem ) {\n\t\t\treturn elem.getAttribute( \"value\" ) === null ? \"on\" : elem.value;\n\t\t};\n\t}\n} );\n\n\n\n\n// Return jQuery for attributes-only inclusion\n\n\nsupport.focusin = \"onfocusin\" in window;\n\n\nvar rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,\n\tstopPropagationCallback = function( e ) {\n\t\te.stopPropagation();\n\t};\n\njQuery.extend( jQuery.event, {\n\n\ttrigger: function( event, data, elem, onlyHandlers ) {\n\n\t\tvar i, cur, tmp, bubbleType, ontype, handle, special, lastElement,\n\t\t\teventPath = [ elem || document ],\n\t\t\ttype = hasOwn.call( event, \"type\" ) ? event.type : event,\n\t\t\tnamespaces = hasOwn.call( event, \"namespace\" ) ? event.namespace.split( \".\" ) : [];\n\n\t\tcur = lastElement = tmp = elem = elem || document;\n\n\t\t// Don't do events on text and comment nodes\n\t\tif ( elem.nodeType === 3 || elem.nodeType === 8 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// focus/blur morphs to focusin/out; ensure we're not firing them right now\n\t\tif ( rfocusMorph.test( type + jQuery.event.triggered ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( type.indexOf( \".\" ) > -1 ) {\n\n\t\t\t// Namespaced trigger; create a regexp to match event type in handle()\n\t\t\tnamespaces = type.split( \".\" );\n\t\t\ttype = namespaces.shift();\n\t\t\tnamespaces.sort();\n\t\t}\n\t\tontype = type.indexOf( \":\" ) < 0 && \"on\" + type;\n\n\t\t// Caller can pass in a jQuery.Event object, Object, or just an event type string\n\t\tevent = event[ jQuery.expando ] ?\n\t\t\tevent :\n\t\t\tnew jQuery.Event( type, typeof event === \"object\" && event );\n\n\t\t// Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)\n\t\tevent.isTrigger = onlyHandlers ? 2 : 3;\n\t\tevent.namespace = namespaces.join( \".\" );\n\t\tevent.rnamespace = event.namespace ?\n\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join( \"\\\\.(?:.*\\\\.|)\" ) + \"(\\\\.|$)\" ) :\n\t\t\tnull;\n\n\t\t// Clean up the event in case it is being reused\n\t\tevent.result = undefined;\n\t\tif ( !event.target ) {\n\t\t\tevent.target = elem;\n\t\t}\n\n\t\t// Clone any incoming data and prepend the event, creating the handler arg list\n\t\tdata = data == null ?\n\t\t\t[ event ] :\n\t\t\tjQuery.makeArray( data, [ event ] );\n\n\t\t// Allow special events to draw outside the lines\n\t\tspecial = jQuery.event.special[ type ] || {};\n\t\tif ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine event propagation path in advance, per W3C events spec (#9951)\n\t\t// Bubble up to document, then to window; watch for a global ownerDocument var (#9724)\n\t\tif ( !onlyHandlers && !special.noBubble && !isWindow( elem ) ) {\n\n\t\t\tbubbleType = special.delegateType || type;\n\t\t\tif ( !rfocusMorph.test( bubbleType + type ) ) {\n\t\t\t\tcur = cur.parentNode;\n\t\t\t}\n\t\t\tfor ( ; cur; cur = cur.parentNode ) {\n\t\t\t\teventPath.push( cur );\n\t\t\t\ttmp = cur;\n\t\t\t}\n\n\t\t\t// Only add window if we got to document (e.g., not plain obj or detached DOM)\n\t\t\tif ( tmp === ( elem.ownerDocument || document ) ) {\n\t\t\t\teventPath.push( tmp.defaultView || tmp.parentWindow || window );\n\t\t\t}\n\t\t}\n\n\t\t// Fire handlers on the event path\n\t\ti = 0;\n\t\twhile ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) {\n\t\t\tlastElement = cur;\n\t\t\tevent.type = i > 1 ?\n\t\t\t\tbubbleType :\n\t\t\t\tspecial.bindType || type;\n\n\t\t\t// jQuery handler\n\t\t\thandle = ( dataPriv.get( cur, \"events\" ) || {} )[ event.type ] &&\n\t\t\t\tdataPriv.get( cur, \"handle\" );\n\t\t\tif ( handle ) {\n\t\t\t\thandle.apply( cur, data );\n\t\t\t}\n\n\t\t\t// Native handler\n\t\t\thandle = ontype && cur[ ontype ];\n\t\t\tif ( handle && handle.apply && acceptData( cur ) ) {\n\t\t\t\tevent.result = handle.apply( cur, data );\n\t\t\t\tif ( event.result === false ) {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tevent.type = type;\n\n\t\t// If nobody prevented the default action, do it now\n\t\tif ( !onlyHandlers && !event.isDefaultPrevented() ) {\n\n\t\t\tif ( ( !special._default ||\n\t\t\t\tspecial._default.apply( eventPath.pop(), data ) === false ) &&\n\t\t\t\tacceptData( elem ) ) {\n\n\t\t\t\t// Call a native DOM method on the target with the same name as the event.\n\t\t\t\t// Don't do default actions on window, that's where global variables be (#6170)\n\t\t\t\tif ( ontype && isFunction( elem[ type ] ) && !isWindow( elem ) ) {\n\n\t\t\t\t\t// Don't re-trigger an onFOO event when we call its FOO() method\n\t\t\t\t\ttmp = elem[ ontype ];\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = null;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prevent re-triggering of the same event, since we already bubbled it above\n\t\t\t\t\tjQuery.event.triggered = type;\n\n\t\t\t\t\tif ( event.isPropagationStopped() ) {\n\t\t\t\t\t\tlastElement.addEventListener( type, stopPropagationCallback );\n\t\t\t\t\t}\n\n\t\t\t\t\telem[ type ]();\n\n\t\t\t\t\tif ( event.isPropagationStopped() ) {\n\t\t\t\t\t\tlastElement.removeEventListener( type, stopPropagationCallback );\n\t\t\t\t\t}\n\n\t\t\t\t\tjQuery.event.triggered = undefined;\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = tmp;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\t// Piggyback on a donor event to simulate a different one\n\t// Used only for `focus(in | out)` events\n\tsimulate: function( type, elem, event ) {\n\t\tvar e = jQuery.extend(\n\t\t\tnew jQuery.Event(),\n\t\t\tevent,\n\t\t\t{\n\t\t\t\ttype: type,\n\t\t\t\tisSimulated: true\n\t\t\t}\n\t\t);\n\n\t\tjQuery.event.trigger( e, null, elem );\n\t}\n\n} );\n\njQuery.fn.extend( {\n\n\ttrigger: function( type, data ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.trigger( type, data, this );\n\t\t} );\n\t},\n\ttriggerHandler: function( type, data ) {\n\t\tvar elem = this[ 0 ];\n\t\tif ( elem ) {\n\t\t\treturn jQuery.event.trigger( type, data, elem, true );\n\t\t}\n\t}\n} );\n\n\n// Support: Firefox <=44\n// Firefox doesn't have focus(in | out) events\n// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787\n//\n// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1\n// focus(in | out) events fire after focus & blur events,\n// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order\n// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857\nif ( !support.focusin ) {\n\tjQuery.each( { focus: \"focusin\", blur: \"focusout\" }, function( orig, fix ) {\n\n\t\t// Attach a single capturing handler on the document while someone wants focusin/focusout\n\t\tvar handler = function( event ) {\n\t\t\tjQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) );\n\t\t};\n\n\t\tjQuery.event.special[ fix ] = {\n\t\t\tsetup: function() {\n\t\t\t\tvar doc = this.ownerDocument || this,\n\t\t\t\t\tattaches = dataPriv.access( doc, fix );\n\n\t\t\t\tif ( !attaches ) {\n\t\t\t\t\tdoc.addEventListener( orig, handler, true );\n\t\t\t\t}\n\t\t\t\tdataPriv.access( doc, fix, ( attaches || 0 ) + 1 );\n\t\t\t},\n\t\t\tteardown: function() {\n\t\t\t\tvar doc = this.ownerDocument || this,\n\t\t\t\t\tattaches = dataPriv.access( doc, fix ) - 1;\n\n\t\t\t\tif ( !attaches ) {\n\t\t\t\t\tdoc.removeEventListener( orig, handler, true );\n\t\t\t\t\tdataPriv.remove( doc, fix );\n\n\t\t\t\t} else {\n\t\t\t\t\tdataPriv.access( doc, fix, attaches );\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t} );\n}\nvar location = window.location;\n\nvar nonce = Date.now();\n\nvar rquery = ( /\\?/ );\n\n\n\n// Cross-browser xml parsing\njQuery.parseXML = function( data ) {\n\tvar xml;\n\tif ( !data || typeof data !== \"string\" ) {\n\t\treturn null;\n\t}\n\n\t// Support: IE 9 - 11 only\n\t// IE throws on parseFromString with invalid input.\n\ttry {\n\t\txml = ( new window.DOMParser() ).parseFromString( data, \"text/xml\" );\n\t} catch ( e ) {\n\t\txml = undefined;\n\t}\n\n\tif ( !xml || xml.getElementsByTagName( \"parsererror\" ).length ) {\n\t\tjQuery.error( \"Invalid XML: \" + data );\n\t}\n\treturn xml;\n};\n\n\nvar\n\trbracket = /\\[\\]$/,\n\trCRLF = /\\r?\\n/g,\n\trsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,\n\trsubmittable = /^(?:input|select|textarea|keygen)/i;\n\nfunction buildParams( prefix, obj, traditional, add ) {\n\tvar name;\n\n\tif ( Array.isArray( obj ) ) {\n\n\t\t// Serialize array item.\n\t\tjQuery.each( obj, function( i, v ) {\n\t\t\tif ( traditional || rbracket.test( prefix ) ) {\n\n\t\t\t\t// Treat each array item as a scalar.\n\t\t\t\tadd( prefix, v );\n\n\t\t\t} else {\n\n\t\t\t\t// Item is non-scalar (array or object), encode its numeric index.\n\t\t\t\tbuildParams(\n\t\t\t\t\tprefix + \"[\" + ( typeof v === \"object\" && v != null ? i : \"\" ) + \"]\",\n\t\t\t\t\tv,\n\t\t\t\t\ttraditional,\n\t\t\t\t\tadd\n\t\t\t\t);\n\t\t\t}\n\t\t} );\n\n\t} else if ( !traditional && toType( obj ) === \"object\" ) {\n\n\t\t// Serialize object item.\n\t\tfor ( name in obj ) {\n\t\t\tbuildParams( prefix + \"[\" + name + \"]\", obj[ name ], traditional, add );\n\t\t}\n\n\t} else {\n\n\t\t// Serialize scalar item.\n\t\tadd( prefix, obj );\n\t}\n}\n\n// Serialize an array of form elements or a set of\n// key/values into a query string\njQuery.param = function( a, traditional ) {\n\tvar prefix,\n\t\ts = [],\n\t\tadd = function( key, valueOrFunction ) {\n\n\t\t\t// If value is a function, invoke it and use its return value\n\t\t\tvar value = isFunction( valueOrFunction ) ?\n\t\t\t\tvalueOrFunction() :\n\t\t\t\tvalueOrFunction;\n\n\t\t\ts[ s.length ] = encodeURIComponent( key ) + \"=\" +\n\t\t\t\tencodeURIComponent( value == null ? \"\" : value );\n\t\t};\n\n\t// If an array was passed in, assume that it is an array of form elements.\n\tif ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {\n\n\t\t// Serialize the form elements\n\t\tjQuery.each( a, function() {\n\t\t\tadd( this.name, this.value );\n\t\t} );\n\n\t} else {\n\n\t\t// If traditional, encode the \"old\" way (the way 1.3.2 or older\n\t\t// did it), otherwise encode params recursively.\n\t\tfor ( prefix in a ) {\n\t\t\tbuildParams( prefix, a[ prefix ], traditional, add );\n\t\t}\n\t}\n\n\t// Return the resulting serialization\n\treturn s.join( \"&\" );\n};\n\njQuery.fn.extend( {\n\tserialize: function() {\n\t\treturn jQuery.param( this.serializeArray() );\n\t},\n\tserializeArray: function() {\n\t\treturn this.map( function() {\n\n\t\t\t// Can add propHook for \"elements\" to filter or add form elements\n\t\t\tvar elements = jQuery.prop( this, \"elements\" );\n\t\t\treturn elements ? jQuery.makeArray( elements ) : this;\n\t\t} )\n\t\t.filter( function() {\n\t\t\tvar type = this.type;\n\n\t\t\t// Use .is( \":disabled\" ) so that fieldset[disabled] works\n\t\t\treturn this.name && !jQuery( this ).is( \":disabled\" ) &&\n\t\t\t\trsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&\n\t\t\t\t( this.checked || !rcheckableType.test( type ) );\n\t\t} )\n\t\t.map( function( i, elem ) {\n\t\t\tvar val = jQuery( this ).val();\n\n\t\t\tif ( val == null ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tif ( Array.isArray( val ) ) {\n\t\t\t\treturn jQuery.map( val, function( val ) {\n\t\t\t\t\treturn { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\treturn { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t} ).get();\n\t}\n} );\n\n\nvar\n\tr20 = /%20/g,\n\trhash = /#.*$/,\n\trantiCache = /([?&])_=[^&]*/,\n\trheaders = /^(.*?):[ \\t]*([^\\r\\n]*)$/mg,\n\n\t// #7653, #8125, #8152: local protocol detection\n\trlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,\n\trnoContent = /^(?:GET|HEAD)$/,\n\trprotocol = /^\\/\\//,\n\n\t/* Prefilters\n\t * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)\n\t * 2) These are called:\n\t * - BEFORE asking for a transport\n\t * - AFTER param serialization (s.data is a string if s.processData is true)\n\t * 3) key is the dataType\n\t * 4) the catchall symbol \"*\" can be used\n\t * 5) execution will start with transport dataType and THEN continue down to \"*\" if needed\n\t */\n\tprefilters = {},\n\n\t/* Transports bindings\n\t * 1) key is the dataType\n\t * 2) the catchall symbol \"*\" can be used\n\t * 3) selection will start with transport dataType and THEN go to \"*\" if needed\n\t */\n\ttransports = {},\n\n\t// Avoid comment-prolog char sequence (#10098); must appease lint and evade compression\n\tallTypes = \"*/\".concat( \"*\" ),\n\n\t// Anchor tag for parsing the document origin\n\toriginAnchor = document.createElement( \"a\" );\n\toriginAnchor.href = location.href;\n\n// Base \"constructor\" for jQuery.ajaxPrefilter and jQuery.ajaxTransport\nfunction addToPrefiltersOrTransports( structure ) {\n\n\t// dataTypeExpression is optional and defaults to \"*\"\n\treturn function( dataTypeExpression, func ) {\n\n\t\tif ( typeof dataTypeExpression !== \"string\" ) {\n\t\t\tfunc = dataTypeExpression;\n\t\t\tdataTypeExpression = \"*\";\n\t\t}\n\n\t\tvar dataType,\n\t\t\ti = 0,\n\t\t\tdataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || [];\n\n\t\tif ( isFunction( func ) ) {\n\n\t\t\t// For each dataType in the dataTypeExpression\n\t\t\twhile ( ( dataType = dataTypes[ i++ ] ) ) {\n\n\t\t\t\t// Prepend if requested\n\t\t\t\tif ( dataType[ 0 ] === \"+\" ) {\n\t\t\t\t\tdataType = dataType.slice( 1 ) || \"*\";\n\t\t\t\t\t( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func );\n\n\t\t\t\t// Otherwise append\n\t\t\t\t} else {\n\t\t\t\t\t( structure[ dataType ] = structure[ dataType ] || [] ).push( func );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\n// Base inspection function for prefilters and transports\nfunction inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) {\n\n\tvar inspected = {},\n\t\tseekingTransport = ( structure === transports );\n\n\tfunction inspect( dataType ) {\n\t\tvar selected;\n\t\tinspected[ dataType ] = true;\n\t\tjQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) {\n\t\t\tvar dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR );\n\t\t\tif ( typeof dataTypeOrTransport === \"string\" &&\n\t\t\t\t!seekingTransport && !inspected[ dataTypeOrTransport ] ) {\n\n\t\t\t\toptions.dataTypes.unshift( dataTypeOrTransport );\n\t\t\t\tinspect( dataTypeOrTransport );\n\t\t\t\treturn false;\n\t\t\t} else if ( seekingTransport ) {\n\t\t\t\treturn !( selected = dataTypeOrTransport );\n\t\t\t}\n\t\t} );\n\t\treturn selected;\n\t}\n\n\treturn inspect( options.dataTypes[ 0 ] ) || !inspected[ \"*\" ] && inspect( \"*\" );\n}\n\n// A special extend for ajax options\n// that takes \"flat\" options (not to be deep extended)\n// Fixes #9887\nfunction ajaxExtend( target, src ) {\n\tvar key, deep,\n\t\tflatOptions = jQuery.ajaxSettings.flatOptions || {};\n\n\tfor ( key in src ) {\n\t\tif ( src[ key ] !== undefined ) {\n\t\t\t( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ];\n\t\t}\n\t}\n\tif ( deep ) {\n\t\tjQuery.extend( true, target, deep );\n\t}\n\n\treturn target;\n}\n\n/* Handles responses to an ajax request:\n * - finds the right dataType (mediates between content-type and expected dataType)\n * - returns the corresponding response\n */\nfunction ajaxHandleResponses( s, jqXHR, responses ) {\n\n\tvar ct, type, finalDataType, firstDataType,\n\t\tcontents = s.contents,\n\t\tdataTypes = s.dataTypes;\n\n\t// Remove auto dataType and get content-type in the process\n\twhile ( dataTypes[ 0 ] === \"*\" ) {\n\t\tdataTypes.shift();\n\t\tif ( ct === undefined ) {\n\t\t\tct = s.mimeType || jqXHR.getResponseHeader( \"Content-Type\" );\n\t\t}\n\t}\n\n\t// Check if we're dealing with a known content-type\n\tif ( ct ) {\n\t\tfor ( type in contents ) {\n\t\t\tif ( contents[ type ] && contents[ type ].test( ct ) ) {\n\t\t\t\tdataTypes.unshift( type );\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Check to see if we have a response for the expected dataType\n\tif ( dataTypes[ 0 ] in responses ) {\n\t\tfinalDataType = dataTypes[ 0 ];\n\t} else {\n\n\t\t// Try convertible dataTypes\n\t\tfor ( type in responses ) {\n\t\t\tif ( !dataTypes[ 0 ] || s.converters[ type + \" \" + dataTypes[ 0 ] ] ) {\n\t\t\t\tfinalDataType = type;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( !firstDataType ) {\n\t\t\t\tfirstDataType = type;\n\t\t\t}\n\t\t}\n\n\t\t// Or just use first one\n\t\tfinalDataType = finalDataType || firstDataType;\n\t}\n\n\t// If we found a dataType\n\t// We add the dataType to the list if needed\n\t// and return the corresponding response\n\tif ( finalDataType ) {\n\t\tif ( finalDataType !== dataTypes[ 0 ] ) {\n\t\t\tdataTypes.unshift( finalDataType );\n\t\t}\n\t\treturn responses[ finalDataType ];\n\t}\n}\n\n/* Chain conversions given the request and the original response\n * Also sets the responseXXX fields on the jqXHR instance\n */\nfunction ajaxConvert( s, response, jqXHR, isSuccess ) {\n\tvar conv2, current, conv, tmp, prev,\n\t\tconverters = {},\n\n\t\t// Work with a copy of dataTypes in case we need to modify it for conversion\n\t\tdataTypes = s.dataTypes.slice();\n\n\t// Create converters map with lowercased keys\n\tif ( dataTypes[ 1 ] ) {\n\t\tfor ( conv in s.converters ) {\n\t\t\tconverters[ conv.toLowerCase() ] = s.converters[ conv ];\n\t\t}\n\t}\n\n\tcurrent = dataTypes.shift();\n\n\t// Convert to each sequential dataType\n\twhile ( current ) {\n\n\t\tif ( s.responseFields[ current ] ) {\n\t\t\tjqXHR[ s.responseFields[ current ] ] = response;\n\t\t}\n\n\t\t// Apply the dataFilter if provided\n\t\tif ( !prev && isSuccess && s.dataFilter ) {\n\t\t\tresponse = s.dataFilter( response, s.dataType );\n\t\t}\n\n\t\tprev = current;\n\t\tcurrent = dataTypes.shift();\n\n\t\tif ( current ) {\n\n\t\t\t// There's only work to do if current dataType is non-auto\n\t\t\tif ( current === \"*\" ) {\n\n\t\t\t\tcurrent = prev;\n\n\t\t\t// Convert response if prev dataType is non-auto and differs from current\n\t\t\t} else if ( prev !== \"*\" && prev !== current ) {\n\n\t\t\t\t// Seek a direct converter\n\t\t\t\tconv = converters[ prev + \" \" + current ] || converters[ \"* \" + current ];\n\n\t\t\t\t// If none found, seek a pair\n\t\t\t\tif ( !conv ) {\n\t\t\t\t\tfor ( conv2 in converters ) {\n\n\t\t\t\t\t\t// If conv2 outputs current\n\t\t\t\t\t\ttmp = conv2.split( \" \" );\n\t\t\t\t\t\tif ( tmp[ 1 ] === current ) {\n\n\t\t\t\t\t\t\t// If prev can be converted to accepted input\n\t\t\t\t\t\t\tconv = converters[ prev + \" \" + tmp[ 0 ] ] ||\n\t\t\t\t\t\t\t\tconverters[ \"* \" + tmp[ 0 ] ];\n\t\t\t\t\t\t\tif ( conv ) {\n\n\t\t\t\t\t\t\t\t// Condense equivalence converters\n\t\t\t\t\t\t\t\tif ( conv === true ) {\n\t\t\t\t\t\t\t\t\tconv = converters[ conv2 ];\n\n\t\t\t\t\t\t\t\t// Otherwise, insert the intermediate dataType\n\t\t\t\t\t\t\t\t} else if ( converters[ conv2 ] !== true ) {\n\t\t\t\t\t\t\t\t\tcurrent = tmp[ 0 ];\n\t\t\t\t\t\t\t\t\tdataTypes.unshift( tmp[ 1 ] );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Apply converter (if not an equivalence)\n\t\t\t\tif ( conv !== true ) {\n\n\t\t\t\t\t// Unless errors are allowed to bubble, catch and return them\n\t\t\t\t\tif ( conv && s.throws ) {\n\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t\t} catch ( e ) {\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\tstate: \"parsererror\",\n\t\t\t\t\t\t\t\terror: conv ? e : \"No conversion from \" + prev + \" to \" + current\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn { state: \"success\", data: response };\n}\n\njQuery.extend( {\n\n\t// Counter for holding the number of active queries\n\tactive: 0,\n\n\t// Last-Modified header cache for next request\n\tlastModified: {},\n\tetag: {},\n\n\tajaxSettings: {\n\t\turl: location.href,\n\t\ttype: \"GET\",\n\t\tisLocal: rlocalProtocol.test( location.protocol ),\n\t\tglobal: true,\n\t\tprocessData: true,\n\t\tasync: true,\n\t\tcontentType: \"application/x-www-form-urlencoded; charset=UTF-8\",\n\n\t\t/*\n\t\ttimeout: 0,\n\t\tdata: null,\n\t\tdataType: null,\n\t\tusername: null,\n\t\tpassword: null,\n\t\tcache: null,\n\t\tthrows: false,\n\t\ttraditional: false,\n\t\theaders: {},\n\t\t*/\n\n\t\taccepts: {\n\t\t\t\"*\": allTypes,\n\t\t\ttext: \"text/plain\",\n\t\t\thtml: \"text/html\",\n\t\t\txml: \"application/xml, text/xml\",\n\t\t\tjson: \"application/json, text/javascript\"\n\t\t},\n\n\t\tcontents: {\n\t\t\txml: /\\bxml\\b/,\n\t\t\thtml: /\\bhtml/,\n\t\t\tjson: /\\bjson\\b/\n\t\t},\n\n\t\tresponseFields: {\n\t\t\txml: \"responseXML\",\n\t\t\ttext: \"responseText\",\n\t\t\tjson: \"responseJSON\"\n\t\t},\n\n\t\t// Data converters\n\t\t// Keys separate source (or catchall \"*\") and destination types with a single space\n\t\tconverters: {\n\n\t\t\t// Convert anything to text\n\t\t\t\"* text\": String,\n\n\t\t\t// Text to html (true = no transformation)\n\t\t\t\"text html\": true,\n\n\t\t\t// Evaluate text as a json expression\n\t\t\t\"text json\": JSON.parse,\n\n\t\t\t// Parse text as xml\n\t\t\t\"text xml\": jQuery.parseXML\n\t\t},\n\n\t\t// For options that shouldn't be deep extended:\n\t\t// you can add your own custom options here if\n\t\t// and when you create one that shouldn't be\n\t\t// deep extended (see ajaxExtend)\n\t\tflatOptions: {\n\t\t\turl: true,\n\t\t\tcontext: true\n\t\t}\n\t},\n\n\t// Creates a full fledged settings object into target\n\t// with both ajaxSettings and settings fields.\n\t// If target is omitted, writes into ajaxSettings.\n\tajaxSetup: function( target, settings ) {\n\t\treturn settings ?\n\n\t\t\t// Building a settings object\n\t\t\tajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) :\n\n\t\t\t// Extending ajaxSettings\n\t\t\tajaxExtend( jQuery.ajaxSettings, target );\n\t},\n\n\tajaxPrefilter: addToPrefiltersOrTransports( prefilters ),\n\tajaxTransport: addToPrefiltersOrTransports( transports ),\n\n\t// Main method\n\tajax: function( url, options ) {\n\n\t\t// If url is an object, simulate pre-1.5 signature\n\t\tif ( typeof url === \"object\" ) {\n\t\t\toptions = url;\n\t\t\turl = undefined;\n\t\t}\n\n\t\t// Force options to be an object\n\t\toptions = options || {};\n\n\t\tvar transport,\n\n\t\t\t// URL without anti-cache param\n\t\t\tcacheURL,\n\n\t\t\t// Response headers\n\t\t\tresponseHeadersString,\n\t\t\tresponseHeaders,\n\n\t\t\t// timeout handle\n\t\t\ttimeoutTimer,\n\n\t\t\t// Url cleanup var\n\t\t\turlAnchor,\n\n\t\t\t// Request state (becomes false upon send and true upon completion)\n\t\t\tcompleted,\n\n\t\t\t// To know if global events are to be dispatched\n\t\t\tfireGlobals,\n\n\t\t\t// Loop variable\n\t\t\ti,\n\n\t\t\t// uncached part of the url\n\t\t\tuncached,\n\n\t\t\t// Create the final options object\n\t\t\ts = jQuery.ajaxSetup( {}, options ),\n\n\t\t\t// Callbacks context\n\t\t\tcallbackContext = s.context || s,\n\n\t\t\t// Context for global events is callbackContext if it is a DOM node or jQuery collection\n\t\t\tglobalEventContext = s.context &&\n\t\t\t\t( callbackContext.nodeType || callbackContext.jquery ) ?\n\t\t\t\t\tjQuery( callbackContext ) :\n\t\t\t\t\tjQuery.event,\n\n\t\t\t// Deferreds\n\t\t\tdeferred = jQuery.Deferred(),\n\t\t\tcompleteDeferred = jQuery.Callbacks( \"once memory\" ),\n\n\t\t\t// Status-dependent callbacks\n\t\t\tstatusCode = s.statusCode || {},\n\n\t\t\t// Headers (they are sent all at once)\n\t\t\trequestHeaders = {},\n\t\t\trequestHeadersNames = {},\n\n\t\t\t// Default abort message\n\t\t\tstrAbort = \"canceled\",\n\n\t\t\t// Fake xhr\n\t\t\tjqXHR = {\n\t\t\t\treadyState: 0,\n\n\t\t\t\t// Builds headers hashtable if needed\n\t\t\t\tgetResponseHeader: function( key ) {\n\t\t\t\t\tvar match;\n\t\t\t\t\tif ( completed ) {\n\t\t\t\t\t\tif ( !responseHeaders ) {\n\t\t\t\t\t\t\tresponseHeaders = {};\n\t\t\t\t\t\t\twhile ( ( match = rheaders.exec( responseHeadersString ) ) ) {\n\t\t\t\t\t\t\t\tresponseHeaders[ match[ 1 ].toLowerCase() ] = match[ 2 ];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tmatch = responseHeaders[ key.toLowerCase() ];\n\t\t\t\t\t}\n\t\t\t\t\treturn match == null ? null : match;\n\t\t\t\t},\n\n\t\t\t\t// Raw string\n\t\t\t\tgetAllResponseHeaders: function() {\n\t\t\t\t\treturn completed ? responseHeadersString : null;\n\t\t\t\t},\n\n\t\t\t\t// Caches the header\n\t\t\t\tsetRequestHeader: function( name, value ) {\n\t\t\t\t\tif ( completed == null ) {\n\t\t\t\t\t\tname = requestHeadersNames[ name.toLowerCase() ] =\n\t\t\t\t\t\t\trequestHeadersNames[ name.toLowerCase() ] || name;\n\t\t\t\t\t\trequestHeaders[ name ] = value;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Overrides response content-type header\n\t\t\t\toverrideMimeType: function( type ) {\n\t\t\t\t\tif ( completed == null ) {\n\t\t\t\t\t\ts.mimeType = type;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Status-dependent callbacks\n\t\t\t\tstatusCode: function( map ) {\n\t\t\t\t\tvar code;\n\t\t\t\t\tif ( map ) {\n\t\t\t\t\t\tif ( completed ) {\n\n\t\t\t\t\t\t\t// Execute the appropriate callbacks\n\t\t\t\t\t\t\tjqXHR.always( map[ jqXHR.status ] );\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Lazy-add the new callbacks in a way that preserves old ones\n\t\t\t\t\t\t\tfor ( code in map ) {\n\t\t\t\t\t\t\t\tstatusCode[ code ] = [ statusCode[ code ], map[ code ] ];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Cancel the request\n\t\t\t\tabort: function( statusText ) {\n\t\t\t\t\tvar finalText = statusText || strAbort;\n\t\t\t\t\tif ( transport ) {\n\t\t\t\t\t\ttransport.abort( finalText );\n\t\t\t\t\t}\n\t\t\t\t\tdone( 0, finalText );\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t};\n\n\t\t// Attach deferreds\n\t\tdeferred.promise( jqXHR );\n\n\t\t// Add protocol if not provided (prefilters might expect it)\n\t\t// Handle falsy url in the settings object (#10093: consistency with old signature)\n\t\t// We also use the url parameter if available\n\t\ts.url = ( ( url || s.url || location.href ) + \"\" )\n\t\t\t.replace( rprotocol, location.protocol + \"//\" );\n\n\t\t// Alias method option to type as per ticket #12004\n\t\ts.type = options.method || options.type || s.method || s.type;\n\n\t\t// Extract dataTypes list\n\t\ts.dataTypes = ( s.dataType || \"*\" ).toLowerCase().match( rnothtmlwhite ) || [ \"\" ];\n\n\t\t// A cross-domain request is in order when the origin doesn't match the current origin.\n\t\tif ( s.crossDomain == null ) {\n\t\t\turlAnchor = document.createElement( \"a\" );\n\n\t\t\t// Support: IE <=8 - 11, Edge 12 - 15\n\t\t\t// IE throws exception on accessing the href property if url is malformed,\n\t\t\t// e.g. http://example.com:80x/\n\t\t\ttry {\n\t\t\t\turlAnchor.href = s.url;\n\n\t\t\t\t// Support: IE <=8 - 11 only\n\t\t\t\t// Anchor's host property isn't correctly set when s.url is relative\n\t\t\t\turlAnchor.href = urlAnchor.href;\n\t\t\t\ts.crossDomain = originAnchor.protocol + \"//\" + originAnchor.host !==\n\t\t\t\t\turlAnchor.protocol + \"//\" + urlAnchor.host;\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// If there is an error parsing the URL, assume it is crossDomain,\n\t\t\t\t// it can be rejected by the transport if it is invalid\n\t\t\t\ts.crossDomain = true;\n\t\t\t}\n\t\t}\n\n\t\t// Convert data if not already a string\n\t\tif ( s.data && s.processData && typeof s.data !== \"string\" ) {\n\t\t\ts.data = jQuery.param( s.data, s.traditional );\n\t\t}\n\n\t\t// Apply prefilters\n\t\tinspectPrefiltersOrTransports( prefilters, s, options, jqXHR );\n\n\t\t// If request was aborted inside a prefilter, stop there\n\t\tif ( completed ) {\n\t\t\treturn jqXHR;\n\t\t}\n\n\t\t// We can fire global events as of now if asked to\n\t\t// Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118)\n\t\tfireGlobals = jQuery.event && s.global;\n\n\t\t// Watch for a new set of requests\n\t\tif ( fireGlobals && jQuery.active++ === 0 ) {\n\t\t\tjQuery.event.trigger( \"ajaxStart\" );\n\t\t}\n\n\t\t// Uppercase the type\n\t\ts.type = s.type.toUpperCase();\n\n\t\t// Determine if request has content\n\t\ts.hasContent = !rnoContent.test( s.type );\n\n\t\t// Save the URL in case we're toying with the If-Modified-Since\n\t\t// and/or If-None-Match header later on\n\t\t// Remove hash to simplify url manipulation\n\t\tcacheURL = s.url.replace( rhash, \"\" );\n\n\t\t// More options handling for requests with no content\n\t\tif ( !s.hasContent ) {\n\n\t\t\t// Remember the hash so we can put it back\n\t\t\tuncached = s.url.slice( cacheURL.length );\n\n\t\t\t// If data is available and should be processed, append data to url\n\t\t\tif ( s.data && ( s.processData || typeof s.data === \"string\" ) ) {\n\t\t\t\tcacheURL += ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + s.data;\n\n\t\t\t\t// #9682: remove data so that it's not used in an eventual retry\n\t\t\t\tdelete s.data;\n\t\t\t}\n\n\t\t\t// Add or update anti-cache param if needed\n\t\t\tif ( s.cache === false ) {\n\t\t\t\tcacheURL = cacheURL.replace( rantiCache, \"$1\" );\n\t\t\t\tuncached = ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + \"_=\" + ( nonce++ ) + uncached;\n\t\t\t}\n\n\t\t\t// Put hash and anti-cache on the URL that will be requested (gh-1732)\n\t\t\ts.url = cacheURL + uncached;\n\n\t\t// Change '%20' to '+' if this is encoded form body content (gh-2658)\n\t\t} else if ( s.data && s.processData &&\n\t\t\t( s.contentType || \"\" ).indexOf( \"application/x-www-form-urlencoded\" ) === 0 ) {\n\t\t\ts.data = s.data.replace( r20, \"+\" );\n\t\t}\n\n\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\tif ( s.ifModified ) {\n\t\t\tif ( jQuery.lastModified[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-Modified-Since\", jQuery.lastModified[ cacheURL ] );\n\t\t\t}\n\t\t\tif ( jQuery.etag[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-None-Match\", jQuery.etag[ cacheURL ] );\n\t\t\t}\n\t\t}\n\n\t\t// Set the correct header, if data is being sent\n\t\tif ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {\n\t\t\tjqXHR.setRequestHeader( \"Content-Type\", s.contentType );\n\t\t}\n\n\t\t// Set the Accepts header for the server, depending on the dataType\n\t\tjqXHR.setRequestHeader(\n\t\t\t\"Accept\",\n\t\t\ts.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ?\n\t\t\t\ts.accepts[ s.dataTypes[ 0 ] ] +\n\t\t\t\t\t( s.dataTypes[ 0 ] !== \"*\" ? \", \" + allTypes + \"; q=0.01\" : \"\" ) :\n\t\t\t\ts.accepts[ \"*\" ]\n\t\t);\n\n\t\t// Check for headers option\n\t\tfor ( i in s.headers ) {\n\t\t\tjqXHR.setRequestHeader( i, s.headers[ i ] );\n\t\t}\n\n\t\t// Allow custom headers/mimetypes and early abort\n\t\tif ( s.beforeSend &&\n\t\t\t( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) {\n\n\t\t\t// Abort if not done already and return\n\t\t\treturn jqXHR.abort();\n\t\t}\n\n\t\t// Aborting is no longer a cancellation\n\t\tstrAbort = \"abort\";\n\n\t\t// Install callbacks on deferreds\n\t\tcompleteDeferred.add( s.complete );\n\t\tjqXHR.done( s.success );\n\t\tjqXHR.fail( s.error );\n\n\t\t// Get transport\n\t\ttransport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );\n\n\t\t// If no transport, we auto-abort\n\t\tif ( !transport ) {\n\t\t\tdone( -1, \"No Transport\" );\n\t\t} else {\n\t\t\tjqXHR.readyState = 1;\n\n\t\t\t// Send global event\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxSend\", [ jqXHR, s ] );\n\t\t\t}\n\n\t\t\t// If request was aborted inside ajaxSend, stop there\n\t\t\tif ( completed ) {\n\t\t\t\treturn jqXHR;\n\t\t\t}\n\n\t\t\t// Timeout\n\t\t\tif ( s.async && s.timeout > 0 ) {\n\t\t\t\ttimeoutTimer = window.setTimeout( function() {\n\t\t\t\t\tjqXHR.abort( \"timeout\" );\n\t\t\t\t}, s.timeout );\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tcompleted = false;\n\t\t\t\ttransport.send( requestHeaders, done );\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// Rethrow post-completion exceptions\n\t\t\t\tif ( completed ) {\n\t\t\t\t\tthrow e;\n\t\t\t\t}\n\n\t\t\t\t// Propagate others as results\n\t\t\t\tdone( -1, e );\n\t\t\t}\n\t\t}\n\n\t\t// Callback for when everything is done\n\t\tfunction done( status, nativeStatusText, responses, headers ) {\n\t\t\tvar isSuccess, success, error, response, modified,\n\t\t\t\tstatusText = nativeStatusText;\n\n\t\t\t// Ignore repeat invocations\n\t\t\tif ( completed ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tcompleted = true;\n\n\t\t\t// Clear timeout if it exists\n\t\t\tif ( timeoutTimer ) {\n\t\t\t\twindow.clearTimeout( timeoutTimer );\n\t\t\t}\n\n\t\t\t// Dereference transport for early garbage collection\n\t\t\t// (no matter how long the jqXHR object will be used)\n\t\t\ttransport = undefined;\n\n\t\t\t// Cache response headers\n\t\t\tresponseHeadersString = headers || \"\";\n\n\t\t\t// Set readyState\n\t\t\tjqXHR.readyState = status > 0 ? 4 : 0;\n\n\t\t\t// Determine if successful\n\t\t\tisSuccess = status >= 200 && status < 300 || status === 304;\n\n\t\t\t// Get response data\n\t\t\tif ( responses ) {\n\t\t\t\tresponse = ajaxHandleResponses( s, jqXHR, responses );\n\t\t\t}\n\n\t\t\t// Convert no matter what (that way responseXXX fields are always set)\n\t\t\tresponse = ajaxConvert( s, response, jqXHR, isSuccess );\n\n\t\t\t// If successful, handle type chaining\n\t\t\tif ( isSuccess ) {\n\n\t\t\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\t\t\tif ( s.ifModified ) {\n\t\t\t\t\tmodified = jqXHR.getResponseHeader( \"Last-Modified\" );\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.lastModified[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t\tmodified = jqXHR.getResponseHeader( \"etag\" );\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.etag[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// if no content\n\t\t\t\tif ( status === 204 || s.type === \"HEAD\" ) {\n\t\t\t\t\tstatusText = \"nocontent\";\n\n\t\t\t\t// if not modified\n\t\t\t\t} else if ( status === 304 ) {\n\t\t\t\t\tstatusText = \"notmodified\";\n\n\t\t\t\t// If we have data, let's convert it\n\t\t\t\t} else {\n\t\t\t\t\tstatusText = response.state;\n\t\t\t\t\tsuccess = response.data;\n\t\t\t\t\terror = response.error;\n\t\t\t\t\tisSuccess = !error;\n\t\t\t\t}\n\t\t\t} else {\n\n\t\t\t\t// Extract error from statusText and normalize for non-aborts\n\t\t\t\terror = statusText;\n\t\t\t\tif ( status || !statusText ) {\n\t\t\t\t\tstatusText = \"error\";\n\t\t\t\t\tif ( status < 0 ) {\n\t\t\t\t\t\tstatus = 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Set data for the fake xhr object\n\t\t\tjqXHR.status = status;\n\t\t\tjqXHR.statusText = ( nativeStatusText || statusText ) + \"\";\n\n\t\t\t// Success/Error\n\t\t\tif ( isSuccess ) {\n\t\t\t\tdeferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );\n\t\t\t} else {\n\t\t\t\tdeferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );\n\t\t\t}\n\n\t\t\t// Status-dependent callbacks\n\t\t\tjqXHR.statusCode( statusCode );\n\t\t\tstatusCode = undefined;\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( isSuccess ? \"ajaxSuccess\" : \"ajaxError\",\n\t\t\t\t\t[ jqXHR, s, isSuccess ? success : error ] );\n\t\t\t}\n\n\t\t\t// Complete\n\t\t\tcompleteDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxComplete\", [ jqXHR, s ] );\n\n\t\t\t\t// Handle the global AJAX counter\n\t\t\t\tif ( !( --jQuery.active ) ) {\n\t\t\t\t\tjQuery.event.trigger( \"ajaxStop\" );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn jqXHR;\n\t},\n\n\tgetJSON: function( url, data, callback ) {\n\t\treturn jQuery.get( url, data, callback, \"json\" );\n\t},\n\n\tgetScript: function( url, callback ) {\n\t\treturn jQuery.get( url, undefined, callback, \"script\" );\n\t}\n} );\n\njQuery.each( [ \"get\", \"post\" ], function( i, method ) {\n\tjQuery[ method ] = function( url, data, callback, type ) {\n\n\t\t// Shift arguments if data argument was omitted\n\t\tif ( isFunction( data ) ) {\n\t\t\ttype = type || callback;\n\t\t\tcallback = data;\n\t\t\tdata = undefined;\n\t\t}\n\n\t\t// The url can be an options object (which then must have .url)\n\t\treturn jQuery.ajax( jQuery.extend( {\n\t\t\turl: url,\n\t\t\ttype: method,\n\t\t\tdataType: type,\n\t\t\tdata: data,\n\t\t\tsuccess: callback\n\t\t}, jQuery.isPlainObject( url ) && url ) );\n\t};\n} );\n\n\njQuery._evalUrl = function( url ) {\n\treturn jQuery.ajax( {\n\t\turl: url,\n\n\t\t// Make this explicit, since user can override this through ajaxSetup (#11264)\n\t\ttype: \"GET\",\n\t\tdataType: \"script\",\n\t\tcache: true,\n\t\tasync: false,\n\t\tglobal: false,\n\t\t\"throws\": true\n\t} );\n};\n\n\njQuery.fn.extend( {\n\twrapAll: function( html ) {\n\t\tvar wrap;\n\n\t\tif ( this[ 0 ] ) {\n\t\t\tif ( isFunction( html ) ) {\n\t\t\t\thtml = html.call( this[ 0 ] );\n\t\t\t}\n\n\t\t\t// The elements to wrap the target around\n\t\t\twrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true );\n\n\t\t\tif ( this[ 0 ].parentNode ) {\n\t\t\t\twrap.insertBefore( this[ 0 ] );\n\t\t\t}\n\n\t\t\twrap.map( function() {\n\t\t\t\tvar elem = this;\n\n\t\t\t\twhile ( elem.firstElementChild ) {\n\t\t\t\t\telem = elem.firstElementChild;\n\t\t\t\t}\n\n\t\t\t\treturn elem;\n\t\t\t} ).append( this );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\twrapInner: function( html ) {\n\t\tif ( isFunction( html ) ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).wrapInner( html.call( this, i ) );\n\t\t\t} );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar self = jQuery( this ),\n\t\t\t\tcontents = self.contents();\n\n\t\t\tif ( contents.length ) {\n\t\t\t\tcontents.wrapAll( html );\n\n\t\t\t} else {\n\t\t\t\tself.append( html );\n\t\t\t}\n\t\t} );\n\t},\n\n\twrap: function( html ) {\n\t\tvar htmlIsFunction = isFunction( html );\n\n\t\treturn this.each( function( i ) {\n\t\t\tjQuery( this ).wrapAll( htmlIsFunction ? html.call( this, i ) : html );\n\t\t} );\n\t},\n\n\tunwrap: function( selector ) {\n\t\tthis.parent( selector ).not( \"body\" ).each( function() {\n\t\t\tjQuery( this ).replaceWith( this.childNodes );\n\t\t} );\n\t\treturn this;\n\t}\n} );\n\n\njQuery.expr.pseudos.hidden = function( elem ) {\n\treturn !jQuery.expr.pseudos.visible( elem );\n};\njQuery.expr.pseudos.visible = function( elem ) {\n\treturn !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length );\n};\n\n\n\n\njQuery.ajaxSettings.xhr = function() {\n\ttry {\n\t\treturn new window.XMLHttpRequest();\n\t} catch ( e ) {}\n};\n\nvar xhrSuccessStatus = {\n\n\t\t// File protocol always yields status code 0, assume 200\n\t\t0: 200,\n\n\t\t// Support: IE <=9 only\n\t\t// #1450: sometimes IE returns 1223 when it should be 204\n\t\t1223: 204\n\t},\n\txhrSupported = jQuery.ajaxSettings.xhr();\n\nsupport.cors = !!xhrSupported && ( \"withCredentials\" in xhrSupported );\nsupport.ajax = xhrSupported = !!xhrSupported;\n\njQuery.ajaxTransport( function( options ) {\n\tvar callback, errorCallback;\n\n\t// Cross domain only allowed if supported through XMLHttpRequest\n\tif ( support.cors || xhrSupported && !options.crossDomain ) {\n\t\treturn {\n\t\t\tsend: function( headers, complete ) {\n\t\t\t\tvar i,\n\t\t\t\t\txhr = options.xhr();\n\n\t\t\t\txhr.open(\n\t\t\t\t\toptions.type,\n\t\t\t\t\toptions.url,\n\t\t\t\t\toptions.async,\n\t\t\t\t\toptions.username,\n\t\t\t\t\toptions.password\n\t\t\t\t);\n\n\t\t\t\t// Apply custom fields if provided\n\t\t\t\tif ( options.xhrFields ) {\n\t\t\t\t\tfor ( i in options.xhrFields ) {\n\t\t\t\t\t\txhr[ i ] = options.xhrFields[ i ];\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Override mime type if needed\n\t\t\t\tif ( options.mimeType && xhr.overrideMimeType ) {\n\t\t\t\t\txhr.overrideMimeType( options.mimeType );\n\t\t\t\t}\n\n\t\t\t\t// X-Requested-With header\n\t\t\t\t// For cross-domain requests, seeing as conditions for a preflight are\n\t\t\t\t// akin to a jigsaw puzzle, we simply never set it to be sure.\n\t\t\t\t// (it can always be set on a per-request basis or even using ajaxSetup)\n\t\t\t\t// For same-domain requests, won't change header if already provided.\n\t\t\t\tif ( !options.crossDomain && !headers[ \"X-Requested-With\" ] ) {\n\t\t\t\t\theaders[ \"X-Requested-With\" ] = \"XMLHttpRequest\";\n\t\t\t\t}\n\n\t\t\t\t// Set headers\n\t\t\t\tfor ( i in headers ) {\n\t\t\t\t\txhr.setRequestHeader( i, headers[ i ] );\n\t\t\t\t}\n\n\t\t\t\t// Callback\n\t\t\t\tcallback = function( type ) {\n\t\t\t\t\treturn function() {\n\t\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\t\tcallback = errorCallback = xhr.onload =\n\t\t\t\t\t\t\t\txhr.onerror = xhr.onabort = xhr.ontimeout =\n\t\t\t\t\t\t\t\t\txhr.onreadystatechange = null;\n\n\t\t\t\t\t\t\tif ( type === \"abort\" ) {\n\t\t\t\t\t\t\t\txhr.abort();\n\t\t\t\t\t\t\t} else if ( type === \"error\" ) {\n\n\t\t\t\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t\t\t\t// On a manual native abort, IE9 throws\n\t\t\t\t\t\t\t\t// errors on any property access that is not readyState\n\t\t\t\t\t\t\t\tif ( typeof xhr.status !== \"number\" ) {\n\t\t\t\t\t\t\t\t\tcomplete( 0, \"error\" );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tcomplete(\n\n\t\t\t\t\t\t\t\t\t\t// File: protocol always yields status 0; see #8605, #14207\n\t\t\t\t\t\t\t\t\t\txhr.status,\n\t\t\t\t\t\t\t\t\t\txhr.statusText\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tcomplete(\n\t\t\t\t\t\t\t\t\txhrSuccessStatus[ xhr.status ] || xhr.status,\n\t\t\t\t\t\t\t\t\txhr.statusText,\n\n\t\t\t\t\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t\t\t\t\t// IE9 has no XHR2 but throws on binary (trac-11426)\n\t\t\t\t\t\t\t\t\t// For XHR2 non-text, let the caller handle it (gh-2498)\n\t\t\t\t\t\t\t\t\t( xhr.responseType || \"text\" ) !== \"text\" ||\n\t\t\t\t\t\t\t\t\ttypeof xhr.responseText !== \"string\" ?\n\t\t\t\t\t\t\t\t\t\t{ binary: xhr.response } :\n\t\t\t\t\t\t\t\t\t\t{ text: xhr.responseText },\n\t\t\t\t\t\t\t\t\txhr.getAllResponseHeaders()\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t};\n\n\t\t\t\t// Listen to events\n\t\t\t\txhr.onload = callback();\n\t\t\t\terrorCallback = xhr.onerror = xhr.ontimeout = callback( \"error\" );\n\n\t\t\t\t// Support: IE 9 only\n\t\t\t\t// Use onreadystatechange to replace onabort\n\t\t\t\t// to handle uncaught aborts\n\t\t\t\tif ( xhr.onabort !== undefined ) {\n\t\t\t\t\txhr.onabort = errorCallback;\n\t\t\t\t} else {\n\t\t\t\t\txhr.onreadystatechange = function() {\n\n\t\t\t\t\t\t// Check readyState before timeout as it changes\n\t\t\t\t\t\tif ( xhr.readyState === 4 ) {\n\n\t\t\t\t\t\t\t// Allow onerror to be called first,\n\t\t\t\t\t\t\t// but that will not handle a native abort\n\t\t\t\t\t\t\t// Also, save errorCallback to a variable\n\t\t\t\t\t\t\t// as xhr.onerror cannot be accessed\n\t\t\t\t\t\t\twindow.setTimeout( function() {\n\t\t\t\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\t\t\t\terrorCallback();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\t// Create the abort callback\n\t\t\t\tcallback = callback( \"abort\" );\n\n\t\t\t\ttry {\n\n\t\t\t\t\t// Do send the request (this may raise an exception)\n\t\t\t\t\txhr.send( options.hasContent && options.data || null );\n\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t// #14683: Only rethrow if this hasn't been notified as an error yet\n\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\tthrow e;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tabort: function() {\n\t\t\t\tif ( callback ) {\n\t\t\t\t\tcallback();\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n} );\n\n\n\n\n// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432)\njQuery.ajaxPrefilter( function( s ) {\n\tif ( s.crossDomain ) {\n\t\ts.contents.script = false;\n\t}\n} );\n\n// Install script dataType\njQuery.ajaxSetup( {\n\taccepts: {\n\t\tscript: \"text/javascript, application/javascript, \" +\n\t\t\t\"application/ecmascript, application/x-ecmascript\"\n\t},\n\tcontents: {\n\t\tscript: /\\b(?:java|ecma)script\\b/\n\t},\n\tconverters: {\n\t\t\"text script\": function( text ) {\n\t\t\tjQuery.globalEval( text );\n\t\t\treturn text;\n\t\t}\n\t}\n} );\n\n// Handle cache's special case and crossDomain\njQuery.ajaxPrefilter( \"script\", function( s ) {\n\tif ( s.cache === undefined ) {\n\t\ts.cache = false;\n\t}\n\tif ( s.crossDomain ) {\n\t\ts.type = \"GET\";\n\t}\n} );\n\n// Bind script tag hack transport\njQuery.ajaxTransport( \"script\", function( s ) {\n\n\t// This transport only deals with cross domain requests\n\tif ( s.crossDomain ) {\n\t\tvar script, callback;\n\t\treturn {\n\t\t\tsend: function( _, complete ) {\n\t\t\t\tscript = jQuery( \"<script>\" ).prop( {\n\t\t\t\t\tcharset: s.scriptCharset,\n\t\t\t\t\tsrc: s.url\n\t\t\t\t} ).on(\n\t\t\t\t\t\"load error\",\n\t\t\t\t\tcallback = function( evt ) {\n\t\t\t\t\t\tscript.remove();\n\t\t\t\t\t\tcallback = null;\n\t\t\t\t\t\tif ( evt ) {\n\t\t\t\t\t\t\tcomplete( evt.type === \"error\" ? 404 : 200, evt.type );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t);\n\n\t\t\t\t// Use native DOM manipulation to avoid our domManip AJAX trickery\n\t\t\t\tdocument.head.appendChild( script[ 0 ] );\n\t\t\t},\n\t\t\tabort: function() {\n\t\t\t\tif ( callback ) {\n\t\t\t\t\tcallback();\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n} );\n\n\n\n\nvar oldCallbacks = [],\n\trjsonp = /(=)\\?(?=&|$)|\\?\\?/;\n\n// Default jsonp settings\njQuery.ajaxSetup( {\n\tjsonp: \"callback\",\n\tjsonpCallback: function() {\n\t\tvar callback = oldCallbacks.pop() || ( jQuery.expando + \"_\" + ( nonce++ ) );\n\t\tthis[ callback ] = true;\n\t\treturn callback;\n\t}\n} );\n\n// Detect, normalize options and install callbacks for jsonp requests\njQuery.ajaxPrefilter( \"json jsonp\", function( s, originalSettings, jqXHR ) {\n\n\tvar callbackName, overwritten, responseContainer,\n\t\tjsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ?\n\t\t\t\"url\" :\n\t\t\ttypeof s.data === \"string\" &&\n\t\t\t\t( s.contentType || \"\" )\n\t\t\t\t\t.indexOf( \"application/x-www-form-urlencoded\" ) === 0 &&\n\t\t\t\trjsonp.test( s.data ) && \"data\"\n\t\t);\n\n\t// Handle iff the expected data type is \"jsonp\" or we have a parameter to set\n\tif ( jsonProp || s.dataTypes[ 0 ] === \"jsonp\" ) {\n\n\t\t// Get callback name, remembering preexisting value associated with it\n\t\tcallbackName = s.jsonpCallback = isFunction( s.jsonpCallback ) ?\n\t\t\ts.jsonpCallback() :\n\t\t\ts.jsonpCallback;\n\n\t\t// Insert callback into url or form data\n\t\tif ( jsonProp ) {\n\t\t\ts[ jsonProp ] = s[ jsonProp ].replace( rjsonp, \"$1\" + callbackName );\n\t\t} else if ( s.jsonp !== false ) {\n\t\t\ts.url += ( rquery.test( s.url ) ? \"&\" : \"?\" ) + s.jsonp + \"=\" + callbackName;\n\t\t}\n\n\t\t// Use data converter to retrieve json after script execution\n\t\ts.converters[ \"script json\" ] = function() {\n\t\t\tif ( !responseContainer ) {\n\t\t\t\tjQuery.error( callbackName + \" was not called\" );\n\t\t\t}\n\t\t\treturn responseContainer[ 0 ];\n\t\t};\n\n\t\t// Force json dataType\n\t\ts.dataTypes[ 0 ] = \"json\";\n\n\t\t// Install callback\n\t\toverwritten = window[ callbackName ];\n\t\twindow[ callbackName ] = function() {\n\t\t\tresponseContainer = arguments;\n\t\t};\n\n\t\t// Clean-up function (fires after converters)\n\t\tjqXHR.always( function() {\n\n\t\t\t// If previous value didn't exist - remove it\n\t\t\tif ( overwritten === undefined ) {\n\t\t\t\tjQuery( window ).removeProp( callbackName );\n\n\t\t\t// Otherwise restore preexisting value\n\t\t\t} else {\n\t\t\t\twindow[ callbackName ] = overwritten;\n\t\t\t}\n\n\t\t\t// Save back as free\n\t\t\tif ( s[ callbackName ] ) {\n\n\t\t\t\t// Make sure that re-using the options doesn't screw things around\n\t\t\t\ts.jsonpCallback = originalSettings.jsonpCallback;\n\n\t\t\t\t// Save the callback name for future use\n\t\t\t\toldCallbacks.push( callbackName );\n\t\t\t}\n\n\t\t\t// Call if it was a function and we have a response\n\t\t\tif ( responseContainer && isFunction( overwritten ) ) {\n\t\t\t\toverwritten( responseContainer[ 0 ] );\n\t\t\t}\n\n\t\t\tresponseContainer = overwritten = undefined;\n\t\t} );\n\n\t\t// Delegate to script\n\t\treturn \"script\";\n\t}\n} );\n\n\n\n\n// Support: Safari 8 only\n// In Safari 8 documents created via document.implementation.createHTMLDocument\n// collapse sibling forms: the second one becomes a child of the first one.\n// Because of that, this security measure has to be disabled in Safari 8.\n// https://bugs.webkit.org/show_bug.cgi?id=137337\nsupport.createHTMLDocument = ( function() {\n\tvar body = document.implementation.createHTMLDocument( \"\" ).body;\n\tbody.innerHTML = \"<form></form><form></form>\";\n\treturn body.childNodes.length === 2;\n} )();\n\n\n// Argument \"data\" should be string of html\n// context (optional): If specified, the fragment will be created in this context,\n// defaults to document\n// keepScripts (optional): If true, will include scripts passed in the html string\njQuery.parseHTML = function( data, context, keepScripts ) {\n\tif ( typeof data !== \"string\" ) {\n\t\treturn [];\n\t}\n\tif ( typeof context === \"boolean\" ) {\n\t\tkeepScripts = context;\n\t\tcontext = false;\n\t}\n\n\tvar base, parsed, scripts;\n\n\tif ( !context ) {\n\n\t\t// Stop scripts or inline event handlers from being executed immediately\n\t\t// by using document.implementation\n\t\tif ( support.createHTMLDocument ) {\n\t\t\tcontext = document.implementation.createHTMLDocument( \"\" );\n\n\t\t\t// Set the base href for the created document\n\t\t\t// so any parsed elements with URLs\n\t\t\t// are based on the document's URL (gh-2965)\n\t\t\tbase = context.createElement( \"base\" );\n\t\t\tbase.href = document.location.href;\n\t\t\tcontext.head.appendChild( base );\n\t\t} else {\n\t\t\tcontext = document;\n\t\t}\n\t}\n\n\tparsed = rsingleTag.exec( data );\n\tscripts = !keepScripts && [];\n\n\t// Single tag\n\tif ( parsed ) {\n\t\treturn [ context.createElement( parsed[ 1 ] ) ];\n\t}\n\n\tparsed = buildFragment( [ data ], context, scripts );\n\n\tif ( scripts && scripts.length ) {\n\t\tjQuery( scripts ).remove();\n\t}\n\n\treturn jQuery.merge( [], parsed.childNodes );\n};\n\n\n/**\n * Load a url into a page\n */\njQuery.fn.load = function( url, params, callback ) {\n\tvar selector, type, response,\n\t\tself = this,\n\t\toff = url.indexOf( \" \" );\n\n\tif ( off > -1 ) {\n\t\tselector = stripAndCollapse( url.slice( off ) );\n\t\turl = url.slice( 0, off );\n\t}\n\n\t// If it's a function\n\tif ( isFunction( params ) ) {\n\n\t\t// We assume that it's the callback\n\t\tcallback = params;\n\t\tparams = undefined;\n\n\t// Otherwise, build a param string\n\t} else if ( params && typeof params === \"object\" ) {\n\t\ttype = \"POST\";\n\t}\n\n\t// If we have elements to modify, make the request\n\tif ( self.length > 0 ) {\n\t\tjQuery.ajax( {\n\t\t\turl: url,\n\n\t\t\t// If \"type\" variable is undefined, then \"GET\" method will be used.\n\t\t\t// Make value of this field explicit since\n\t\t\t// user can override it through ajaxSetup method\n\t\t\ttype: type || \"GET\",\n\t\t\tdataType: \"html\",\n\t\t\tdata: params\n\t\t} ).done( function( responseText ) {\n\n\t\t\t// Save response for use in complete callback\n\t\t\tresponse = arguments;\n\n\t\t\tself.html( selector ?\n\n\t\t\t\t// If a selector was specified, locate the right elements in a dummy div\n\t\t\t\t// Exclude scripts to avoid IE 'Permission Denied' errors\n\t\t\t\tjQuery( \"<div>\" ).append( jQuery.parseHTML( responseText ) ).find( selector ) :\n\n\t\t\t\t// Otherwise use the full result\n\t\t\t\tresponseText );\n\n\t\t// If the request succeeds, this function gets \"data\", \"status\", \"jqXHR\"\n\t\t// but they are ignored because response was set above.\n\t\t// If it fails, this function gets \"jqXHR\", \"status\", \"error\"\n\t\t} ).always( callback && function( jqXHR, status ) {\n\t\t\tself.each( function() {\n\t\t\t\tcallback.apply( this, response || [ jqXHR.responseText, status, jqXHR ] );\n\t\t\t} );\n\t\t} );\n\t}\n\n\treturn this;\n};\n\n\n\n\n// Attach a bunch of functions for handling common AJAX events\njQuery.each( [\n\t\"ajaxStart\",\n\t\"ajaxStop\",\n\t\"ajaxComplete\",\n\t\"ajaxError\",\n\t\"ajaxSuccess\",\n\t\"ajaxSend\"\n], function( i, type ) {\n\tjQuery.fn[ type ] = function( fn ) {\n\t\treturn this.on( type, fn );\n\t};\n} );\n\n\n\n\njQuery.expr.pseudos.animated = function( elem ) {\n\treturn jQuery.grep( jQuery.timers, function( fn ) {\n\t\treturn elem === fn.elem;\n\t} ).length;\n};\n\n\n\n\njQuery.offset = {\n\tsetOffset: function( elem, options, i ) {\n\t\tvar curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition,\n\t\t\tposition = jQuery.css( elem, \"position\" ),\n\t\t\tcurElem = jQuery( elem ),\n\t\t\tprops = {};\n\n\t\t// Set position first, in-case top/left are set even on static elem\n\t\tif ( position === \"static\" ) {\n\t\t\telem.style.position = \"relative\";\n\t\t}\n\n\t\tcurOffset = curElem.offset();\n\t\tcurCSSTop = jQuery.css( elem, \"top\" );\n\t\tcurCSSLeft = jQuery.css( elem, \"left\" );\n\t\tcalculatePosition = ( position === \"absolute\" || position === \"fixed\" ) &&\n\t\t\t( curCSSTop + curCSSLeft ).indexOf( \"auto\" ) > -1;\n\n\t\t// Need to be able to calculate position if either\n\t\t// top or left is auto and position is either absolute or fixed\n\t\tif ( calculatePosition ) {\n\t\t\tcurPosition = curElem.position();\n\t\t\tcurTop = curPosition.top;\n\t\t\tcurLeft = curPosition.left;\n\n\t\t} else {\n\t\t\tcurTop = parseFloat( curCSSTop ) || 0;\n\t\t\tcurLeft = parseFloat( curCSSLeft ) || 0;\n\t\t}\n\n\t\tif ( isFunction( options ) ) {\n\n\t\t\t// Use jQuery.extend here to allow modification of coordinates argument (gh-1848)\n\t\t\toptions = options.call( elem, i, jQuery.extend( {}, curOffset ) );\n\t\t}\n\n\t\tif ( options.top != null ) {\n\t\t\tprops.top = ( options.top - curOffset.top ) + curTop;\n\t\t}\n\t\tif ( options.left != null ) {\n\t\t\tprops.left = ( options.left - curOffset.left ) + curLeft;\n\t\t}\n\n\t\tif ( \"using\" in options ) {\n\t\t\toptions.using.call( elem, props );\n\n\t\t} else {\n\t\t\tcurElem.css( props );\n\t\t}\n\t}\n};\n\njQuery.fn.extend( {\n\n\t// offset() relates an element's border box to the document origin\n\toffset: function( options ) {\n\n\t\t// Preserve chaining for setter\n\t\tif ( arguments.length ) {\n\t\t\treturn options === undefined ?\n\t\t\t\tthis :\n\t\t\t\tthis.each( function( i ) {\n\t\t\t\t\tjQuery.offset.setOffset( this, options, i );\n\t\t\t\t} );\n\t\t}\n\n\t\tvar rect, win,\n\t\t\telem = this[ 0 ];\n\n\t\tif ( !elem ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Return zeros for disconnected and hidden (display: none) elements (gh-2310)\n\t\t// Support: IE <=11 only\n\t\t// Running getBoundingClientRect on a\n\t\t// disconnected node in IE throws an error\n\t\tif ( !elem.getClientRects().length ) {\n\t\t\treturn { top: 0, left: 0 };\n\t\t}\n\n\t\t// Get document-relative position by adding viewport scroll to viewport-relative gBCR\n\t\trect = elem.getBoundingClientRect();\n\t\twin = elem.ownerDocument.defaultView;\n\t\treturn {\n\t\t\ttop: rect.top + win.pageYOffset,\n\t\t\tleft: rect.left + win.pageXOffset\n\t\t};\n\t},\n\n\t// position() relates an element's margin box to its offset parent's padding box\n\t// This corresponds to the behavior of CSS absolute positioning\n\tposition: function() {\n\t\tif ( !this[ 0 ] ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar offsetParent, offset, doc,\n\t\t\telem = this[ 0 ],\n\t\t\tparentOffset = { top: 0, left: 0 };\n\n\t\t// position:fixed elements are offset from the viewport, which itself always has zero offset\n\t\tif ( jQuery.css( elem, \"position\" ) === \"fixed\" ) {\n\n\t\t\t// Assume position:fixed implies availability of getBoundingClientRect\n\t\t\toffset = elem.getBoundingClientRect();\n\n\t\t} else {\n\t\t\toffset = this.offset();\n\n\t\t\t// Account for the *real* offset parent, which can be the document or its root element\n\t\t\t// when a statically positioned element is identified\n\t\t\tdoc = elem.ownerDocument;\n\t\t\toffsetParent = elem.offsetParent || doc.documentElement;\n\t\t\twhile ( offsetParent &&\n\t\t\t\t( offsetParent === doc.body || offsetParent === doc.documentElement ) &&\n\t\t\t\tjQuery.css( offsetParent, \"position\" ) === \"static\" ) {\n\n\t\t\t\toffsetParent = offsetParent.parentNode;\n\t\t\t}\n\t\t\tif ( offsetParent && offsetParent !== elem && offsetParent.nodeType === 1 ) {\n\n\t\t\t\t// Incorporate borders into its offset, since they are outside its content origin\n\t\t\t\tparentOffset = jQuery( offsetParent ).offset();\n\t\t\t\tparentOffset.top += jQuery.css( offsetParent, \"borderTopWidth\", true );\n\t\t\t\tparentOffset.left += jQuery.css( offsetParent, \"borderLeftWidth\", true );\n\t\t\t}\n\t\t}\n\n\t\t// Subtract parent offsets and element margins\n\t\treturn {\n\t\t\ttop: offset.top - parentOffset.top - jQuery.css( elem, \"marginTop\", true ),\n\t\t\tleft: offset.left - parentOffset.left - jQuery.css( elem, \"marginLeft\", true )\n\t\t};\n\t},\n\n\t// This method will return documentElement in the following cases:\n\t// 1) For the element inside the iframe without offsetParent, this method will return\n\t// documentElement of the parent window\n\t// 2) For the hidden or detached element\n\t// 3) For body or html element, i.e. in case of the html node - it will return itself\n\t//\n\t// but those exceptions were never presented as a real life use-cases\n\t// and might be considered as more preferable results.\n\t//\n\t// This logic, however, is not guaranteed and can change at any point in the future\n\toffsetParent: function() {\n\t\treturn this.map( function() {\n\t\t\tvar offsetParent = this.offsetParent;\n\n\t\t\twhile ( offsetParent && jQuery.css( offsetParent, \"position\" ) === \"static\" ) {\n\t\t\t\toffsetParent = offsetParent.offsetParent;\n\t\t\t}\n\n\t\t\treturn offsetParent || documentElement;\n\t\t} );\n\t}\n} );\n\n// Create scrollLeft and scrollTop methods\njQuery.each( { scrollLeft: \"pageXOffset\", scrollTop: \"pageYOffset\" }, function( method, prop ) {\n\tvar top = \"pageYOffset\" === prop;\n\n\tjQuery.fn[ method ] = function( val ) {\n\t\treturn access( this, function( elem, method, val ) {\n\n\t\t\t// Coalesce documents and windows\n\t\t\tvar win;\n\t\t\tif ( isWindow( elem ) ) {\n\t\t\t\twin = elem;\n\t\t\t} else if ( elem.nodeType === 9 ) {\n\t\t\t\twin = elem.defaultView;\n\t\t\t}\n\n\t\t\tif ( val === undefined ) {\n\t\t\t\treturn win ? win[ prop ] : elem[ method ];\n\t\t\t}\n\n\t\t\tif ( win ) {\n\t\t\t\twin.scrollTo(\n\t\t\t\t\t!top ? val : win.pageXOffset,\n\t\t\t\t\ttop ? val : win.pageYOffset\n\t\t\t\t);\n\n\t\t\t} else {\n\t\t\t\telem[ method ] = val;\n\t\t\t}\n\t\t}, method, val, arguments.length );\n\t};\n} );\n\n// Support: Safari <=7 - 9.1, Chrome <=37 - 49\n// Add the top/left cssHooks using jQuery.fn.position\n// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084\n// Blink bug: https://bugs.chromium.org/p/chromium/issues/detail?id=589347\n// getComputedStyle returns percent when specified for top/left/bottom/right;\n// rather than make the css module depend on the offset module, just check for it here\njQuery.each( [ \"top\", \"left\" ], function( i, prop ) {\n\tjQuery.cssHooks[ prop ] = addGetHookIf( support.pixelPosition,\n\t\tfunction( elem, computed ) {\n\t\t\tif ( computed ) {\n\t\t\t\tcomputed = curCSS( elem, prop );\n\n\t\t\t\t// If curCSS returns percentage, fallback to offset\n\t\t\t\treturn rnumnonpx.test( computed ) ?\n\t\t\t\t\tjQuery( elem ).position()[ prop ] + \"px\" :\n\t\t\t\t\tcomputed;\n\t\t\t}\n\t\t}\n\t);\n} );\n\n\n// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods\njQuery.each( { Height: \"height\", Width: \"width\" }, function( name, type ) {\n\tjQuery.each( { padding: \"inner\" + name, content: type, \"\": \"outer\" + name },\n\t\tfunction( defaultExtra, funcName ) {\n\n\t\t// Margin is only for outerHeight, outerWidth\n\t\tjQuery.fn[ funcName ] = function( margin, value ) {\n\t\t\tvar chainable = arguments.length && ( defaultExtra || typeof margin !== \"boolean\" ),\n\t\t\t\textra = defaultExtra || ( margin === true || value === true ? \"margin\" : \"border\" );\n\n\t\t\treturn access( this, function( elem, type, value ) {\n\t\t\t\tvar doc;\n\n\t\t\t\tif ( isWindow( elem ) ) {\n\n\t\t\t\t\t// $( window ).outerWidth/Height return w/h including scrollbars (gh-1729)\n\t\t\t\t\treturn funcName.indexOf( \"outer\" ) === 0 ?\n\t\t\t\t\t\telem[ \"inner\" + name ] :\n\t\t\t\t\t\telem.document.documentElement[ \"client\" + name ];\n\t\t\t\t}\n\n\t\t\t\t// Get document width or height\n\t\t\t\tif ( elem.nodeType === 9 ) {\n\t\t\t\t\tdoc = elem.documentElement;\n\n\t\t\t\t\t// Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height],\n\t\t\t\t\t// whichever is greatest\n\t\t\t\t\treturn Math.max(\n\t\t\t\t\t\telem.body[ \"scroll\" + name ], doc[ \"scroll\" + name ],\n\t\t\t\t\t\telem.body[ \"offset\" + name ], doc[ \"offset\" + name ],\n\t\t\t\t\t\tdoc[ \"client\" + name ]\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\treturn value === undefined ?\n\n\t\t\t\t\t// Get width or height on the element, requesting but not forcing parseFloat\n\t\t\t\t\tjQuery.css( elem, type, extra ) :\n\n\t\t\t\t\t// Set width or height on the element\n\t\t\t\t\tjQuery.style( elem, type, value, extra );\n\t\t\t}, type, chainable ? margin : undefined, chainable );\n\t\t};\n\t} );\n} );\n\n\njQuery.each( ( \"blur focus focusin focusout resize scroll click dblclick \" +\n\t\"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave \" +\n\t\"change select submit keydown keypress keyup contextmenu\" ).split( \" \" ),\n\tfunction( i, name ) {\n\n\t// Handle event binding\n\tjQuery.fn[ name ] = function( data, fn ) {\n\t\treturn arguments.length > 0 ?\n\t\t\tthis.on( name, null, data, fn ) :\n\t\t\tthis.trigger( name );\n\t};\n} );\n\njQuery.fn.extend( {\n\thover: function( fnOver, fnOut ) {\n\t\treturn this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );\n\t}\n} );\n\n\n\n\njQuery.fn.extend( {\n\n\tbind: function( types, data, fn ) {\n\t\treturn this.on( types, null, data, fn );\n\t},\n\tunbind: function( types, fn ) {\n\t\treturn this.off( types, null, fn );\n\t},\n\n\tdelegate: function( selector, types, data, fn ) {\n\t\treturn this.on( types, selector, data, fn );\n\t},\n\tundelegate: function( selector, types, fn ) {\n\n\t\t// ( namespace ) or ( selector, types [, fn] )\n\t\treturn arguments.length === 1 ?\n\t\t\tthis.off( selector, \"**\" ) :\n\t\t\tthis.off( types, selector || \"**\", fn );\n\t}\n} );\n\n// Bind a function to a context, optionally partially applying any\n// arguments.\n// jQuery.proxy is deprecated to promote standards (specifically Function#bind)\n// However, it is not slated for removal any time soon\njQuery.proxy = function( fn, context ) {\n\tvar tmp, args, proxy;\n\n\tif ( typeof context === \"string\" ) {\n\t\ttmp = fn[ context ];\n\t\tcontext = fn;\n\t\tfn = tmp;\n\t}\n\n\t// Quick check to determine if target is callable, in the spec\n\t// this throws a TypeError, but we will just return undefined.\n\tif ( !isFunction( fn ) ) {\n\t\treturn undefined;\n\t}\n\n\t// Simulated bind\n\targs = slice.call( arguments, 2 );\n\tproxy = function() {\n\t\treturn fn.apply( context || this, args.concat( slice.call( arguments ) ) );\n\t};\n\n\t// Set the guid of unique handler to the same of original handler, so it can be removed\n\tproxy.guid = fn.guid = fn.guid || jQuery.guid++;\n\n\treturn proxy;\n};\n\njQuery.holdReady = function( hold ) {\n\tif ( hold ) {\n\t\tjQuery.readyWait++;\n\t} else {\n\t\tjQuery.ready( true );\n\t}\n};\njQuery.isArray = Array.isArray;\njQuery.parseJSON = JSON.parse;\njQuery.nodeName = nodeName;\njQuery.isFunction = isFunction;\njQuery.isWindow = isWindow;\njQuery.camelCase = camelCase;\njQuery.type = toType;\n\njQuery.now = Date.now;\n\njQuery.isNumeric = function( obj ) {\n\n\t// As of jQuery 3.0, isNumeric is limited to\n\t// strings and numbers (primitives or objects)\n\t// that can be coerced to finite numbers (gh-2662)\n\tvar type = jQuery.type( obj );\n\treturn ( type === \"number\" || type === \"string\" ) &&\n\n\t\t// parseFloat NaNs numeric-cast false positives (\"\")\n\t\t// ...but misinterprets leading-number strings, particularly hex literals (\"0x...\")\n\t\t// subtraction forces infinities to NaN\n\t\t!isNaN( obj - parseFloat( obj ) );\n};\n\n\n\n\n// Register as a named AMD module, since jQuery can be concatenated with other\n// files that may use define, but not via a proper concatenation script that\n// understands anonymous AMD modules. A named AMD is safest and most robust\n// way to register. Lowercase jquery is used because AMD module names are\n// derived from file names, and jQuery is normally delivered in a lowercase\n// file name. Do this after creating the global so that if an AMD module wants\n// to call noConflict to hide this version of jQuery, it will work.\n\n// Note that for maximum portability, libraries that are not jQuery should\n// declare themselves as anonymous modules, and avoid setting a global if an\n// AMD loader is present. jQuery is a special case. For more information, see\n// https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon\n\nif ( typeof define === \"function\" && define.amd ) {\n\tdefine( \"jquery\", [], function() {\n\t\treturn jQuery;\n\t} );\n}\n\n\n\n\nvar\n\n\t// Map over jQuery in case of overwrite\n\t_jQuery = window.jQuery,\n\n\t// Map over the $ in case of overwrite\n\t_$ = window.$;\n\njQuery.noConflict = function( deep ) {\n\tif ( window.$ === jQuery ) {\n\t\twindow.$ = _$;\n\t}\n\n\tif ( deep && window.jQuery === jQuery ) {\n\t\twindow.jQuery = _jQuery;\n\t}\n\n\treturn jQuery;\n};\n\n// Expose jQuery and $ identifiers, even in AMD\n// (#7102#comment:10, https://github.com/jquery/jquery/pull/557)\n// and CommonJS for browser emulators (#13566)\nif ( !noGlobal ) {\n\twindow.jQuery = window.$ = jQuery;\n}\n\n\n\n\nreturn jQuery;\n} );\n","//! moment-timezone.js\n//! version : 0.5.17\n//! Copyright (c) JS Foundation and other contributors\n//! license : MIT\n//! github.com/moment/moment-timezone\n\n(function (root, factory) {\n\t\"use strict\";\n\n\t/*global define*/\n\tif (typeof define === 'function' && define.amd) {\n\t\tdefine(['moment'], factory); // AMD\n\t} else if (typeof module === 'object' && module.exports) {\n\t\tmodule.exports = factory(require('moment')); // Node\n\t} else {\n\t\tfactory(root.moment); // Browser\n\t}\n}(this, function (moment) {\n\t\"use strict\";\n\n\t// Do not load moment-timezone a second time.\n\t// if (moment.tz !== undefined) {\n\t// \tlogError('Moment Timezone ' + moment.tz.version + ' was already loaded ' + (moment.tz.dataVersion ? 'with data from ' : 'without any data') + moment.tz.dataVersion);\n\t// \treturn moment;\n\t// }\n\n\tvar VERSION = \"0.5.17\",\n\t\tzones = {},\n\t\tlinks = {},\n\t\tnames = {},\n\t\tguesses = {},\n\t\tcachedGuess,\n\n\t\tmomentVersion = moment.version.split('.'),\n\t\tmajor = +momentVersion[0],\n\t\tminor = +momentVersion[1];\n\n\t// Moment.js version check\n\tif (major < 2 || (major === 2 && minor < 6)) {\n\t\tlogError('Moment Timezone requires Moment.js >= 2.6.0. You are using Moment.js ' + moment.version + '. See momentjs.com');\n\t}\n\n\t/************************************\n\t\tUnpacking\n\t************************************/\n\n\tfunction charCodeToInt(charCode) {\n\t\tif (charCode > 96) {\n\t\t\treturn charCode - 87;\n\t\t} else if (charCode > 64) {\n\t\t\treturn charCode - 29;\n\t\t}\n\t\treturn charCode - 48;\n\t}\n\n\tfunction unpackBase60(string) {\n\t\tvar i = 0,\n\t\t\tparts = string.split('.'),\n\t\t\twhole = parts[0],\n\t\t\tfractional = parts[1] || '',\n\t\t\tmultiplier = 1,\n\t\t\tnum,\n\t\t\tout = 0,\n\t\t\tsign = 1;\n\n\t\t// handle negative numbers\n\t\tif (string.charCodeAt(0) === 45) {\n\t\t\ti = 1;\n\t\t\tsign = -1;\n\t\t}\n\n\t\t// handle digits before the decimal\n\t\tfor (i; i < whole.length; i++) {\n\t\t\tnum = charCodeToInt(whole.charCodeAt(i));\n\t\t\tout = 60 * out + num;\n\t\t}\n\n\t\t// handle digits after the decimal\n\t\tfor (i = 0; i < fractional.length; i++) {\n\t\t\tmultiplier = multiplier / 60;\n\t\t\tnum = charCodeToInt(fractional.charCodeAt(i));\n\t\t\tout += num * multiplier;\n\t\t}\n\n\t\treturn out * sign;\n\t}\n\n\tfunction arrayToInt (array) {\n\t\tfor (var i = 0; i < array.length; i++) {\n\t\t\tarray[i] = unpackBase60(array[i]);\n\t\t}\n\t}\n\n\tfunction intToUntil (array, length) {\n\t\tfor (var i = 0; i < length; i++) {\n\t\t\tarray[i] = Math.round((array[i - 1] || 0) + (array[i] * 60000)); // minutes to milliseconds\n\t\t}\n\n\t\tarray[length - 1] = Infinity;\n\t}\n\n\tfunction mapIndices (source, indices) {\n\t\tvar out = [], i;\n\n\t\tfor (i = 0; i < indices.length; i++) {\n\t\t\tout[i] = source[indices[i]];\n\t\t}\n\n\t\treturn out;\n\t}\n\n\tfunction unpack (string) {\n\t\tvar data = string.split('|'),\n\t\t\toffsets = data[2].split(' '),\n\t\t\tindices = data[3].split(''),\n\t\t\tuntils = data[4].split(' ');\n\n\t\tarrayToInt(offsets);\n\t\tarrayToInt(indices);\n\t\tarrayToInt(untils);\n\n\t\tintToUntil(untils, indices.length);\n\n\t\treturn {\n\t\t\tname : data[0],\n\t\t\tabbrs : mapIndices(data[1].split(' '), indices),\n\t\t\toffsets : mapIndices(offsets, indices),\n\t\t\tuntils : untils,\n\t\t\tpopulation : data[5] | 0\n\t\t};\n\t}\n\n\t/************************************\n\t\tZone object\n\t************************************/\n\n\tfunction Zone (packedString) {\n\t\tif (packedString) {\n\t\t\tthis._set(unpack(packedString));\n\t\t}\n\t}\n\n\tZone.prototype = {\n\t\t_set : function (unpacked) {\n\t\t\tthis.name = unpacked.name;\n\t\t\tthis.abbrs = unpacked.abbrs;\n\t\t\tthis.untils = unpacked.untils;\n\t\t\tthis.offsets = unpacked.offsets;\n\t\t\tthis.population = unpacked.population;\n\t\t},\n\n\t\t_index : function (timestamp) {\n\t\t\tvar target = +timestamp,\n\t\t\t\tuntils = this.untils,\n\t\t\t\ti;\n\n\t\t\tfor (i = 0; i < untils.length; i++) {\n\t\t\t\tif (target < untils[i]) {\n\t\t\t\t\treturn i;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tparse : function (timestamp) {\n\t\t\tvar target = +timestamp,\n\t\t\t\toffsets = this.offsets,\n\t\t\t\tuntils = this.untils,\n\t\t\t\tmax = untils.length - 1,\n\t\t\t\toffset, offsetNext, offsetPrev, i;\n\n\t\t\tfor (i = 0; i < max; i++) {\n\t\t\t\toffset = offsets[i];\n\t\t\t\toffsetNext = offsets[i + 1];\n\t\t\t\toffsetPrev = offsets[i ? i - 1 : i];\n\n\t\t\t\tif (offset < offsetNext && tz.moveAmbiguousForward) {\n\t\t\t\t\toffset = offsetNext;\n\t\t\t\t} else if (offset > offsetPrev && tz.moveInvalidForward) {\n\t\t\t\t\toffset = offsetPrev;\n\t\t\t\t}\n\n\t\t\t\tif (target < untils[i] - (offset * 60000)) {\n\t\t\t\t\treturn offsets[i];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn offsets[max];\n\t\t},\n\n\t\tabbr : function (mom) {\n\t\t\treturn this.abbrs[this._index(mom)];\n\t\t},\n\n\t\toffset : function (mom) {\n\t\t\tlogError(\"zone.offset has been deprecated in favor of zone.utcOffset\");\n\t\t\treturn this.offsets[this._index(mom)];\n\t\t},\n\n\t\tutcOffset : function (mom) {\n\t\t\treturn this.offsets[this._index(mom)];\n\t\t}\n\t};\n\n\t/************************************\n\t\tCurrent Timezone\n\t************************************/\n\n\tfunction OffsetAt(at) {\n\t\tvar timeString = at.toTimeString();\n\t\tvar abbr = timeString.match(/\\([a-z ]+\\)/i);\n\t\tif (abbr && abbr[0]) {\n\t\t\t// 17:56:31 GMT-0600 (CST)\n\t\t\t// 17:56:31 GMT-0600 (Central Standard Time)\n\t\t\tabbr = abbr[0].match(/[A-Z]/g);\n\t\t\tabbr = abbr ? abbr.join('') : undefined;\n\t\t} else {\n\t\t\t// 17:56:31 CST\n\t\t\t// 17:56:31 GMT+0800 (台北標準時間)\n\t\t\tabbr = timeString.match(/[A-Z]{3,5}/g);\n\t\t\tabbr = abbr ? abbr[0] : undefined;\n\t\t}\n\n\t\tif (abbr === 'GMT') {\n\t\t\tabbr = undefined;\n\t\t}\n\n\t\tthis.at = +at;\n\t\tthis.abbr = abbr;\n\t\tthis.offset = at.getTimezoneOffset();\n\t}\n\n\tfunction ZoneScore(zone) {\n\t\tthis.zone = zone;\n\t\tthis.offsetScore = 0;\n\t\tthis.abbrScore = 0;\n\t}\n\n\tZoneScore.prototype.scoreOffsetAt = function (offsetAt) {\n\t\tthis.offsetScore += Math.abs(this.zone.utcOffset(offsetAt.at) - offsetAt.offset);\n\t\tif (this.zone.abbr(offsetAt.at).replace(/[^A-Z]/g, '') !== offsetAt.abbr) {\n\t\t\tthis.abbrScore++;\n\t\t}\n\t};\n\n\tfunction findChange(low, high) {\n\t\tvar mid, diff;\n\n\t\twhile ((diff = ((high.at - low.at) / 12e4 | 0) * 6e4)) {\n\t\t\tmid = new OffsetAt(new Date(low.at + diff));\n\t\t\tif (mid.offset === low.offset) {\n\t\t\t\tlow = mid;\n\t\t\t} else {\n\t\t\t\thigh = mid;\n\t\t\t}\n\t\t}\n\n\t\treturn low;\n\t}\n\n\tfunction userOffsets() {\n\t\tvar startYear = new Date().getFullYear() - 2,\n\t\t\tlast = new OffsetAt(new Date(startYear, 0, 1)),\n\t\t\toffsets = [last],\n\t\t\tchange, next, i;\n\n\t\tfor (i = 1; i < 48; i++) {\n\t\t\tnext = new OffsetAt(new Date(startYear, i, 1));\n\t\t\tif (next.offset !== last.offset) {\n\t\t\t\tchange = findChange(last, next);\n\t\t\t\toffsets.push(change);\n\t\t\t\toffsets.push(new OffsetAt(new Date(change.at + 6e4)));\n\t\t\t}\n\t\t\tlast = next;\n\t\t}\n\n\t\tfor (i = 0; i < 4; i++) {\n\t\t\toffsets.push(new OffsetAt(new Date(startYear + i, 0, 1)));\n\t\t\toffsets.push(new OffsetAt(new Date(startYear + i, 6, 1)));\n\t\t}\n\n\t\treturn offsets;\n\t}\n\n\tfunction sortZoneScores (a, b) {\n\t\tif (a.offsetScore !== b.offsetScore) {\n\t\t\treturn a.offsetScore - b.offsetScore;\n\t\t}\n\t\tif (a.abbrScore !== b.abbrScore) {\n\t\t\treturn a.abbrScore - b.abbrScore;\n\t\t}\n\t\treturn b.zone.population - a.zone.population;\n\t}\n\n\tfunction addToGuesses (name, offsets) {\n\t\tvar i, offset;\n\t\tarrayToInt(offsets);\n\t\tfor (i = 0; i < offsets.length; i++) {\n\t\t\toffset = offsets[i];\n\t\t\tguesses[offset] = guesses[offset] || {};\n\t\t\tguesses[offset][name] = true;\n\t\t}\n\t}\n\n\tfunction guessesForUserOffsets (offsets) {\n\t\tvar offsetsLength = offsets.length,\n\t\t\tfilteredGuesses = {},\n\t\t\tout = [],\n\t\t\ti, j, guessesOffset;\n\n\t\tfor (i = 0; i < offsetsLength; i++) {\n\t\t\tguessesOffset = guesses[offsets[i].offset] || {};\n\t\t\tfor (j in guessesOffset) {\n\t\t\t\tif (guessesOffset.hasOwnProperty(j)) {\n\t\t\t\t\tfilteredGuesses[j] = true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tfor (i in filteredGuesses) {\n\t\t\tif (filteredGuesses.hasOwnProperty(i)) {\n\t\t\t\tout.push(names[i]);\n\t\t\t}\n\t\t}\n\n\t\treturn out;\n\t}\n\n\tfunction rebuildGuess () {\n\n\t\t// use Intl API when available and returning valid time zone\n\t\ttry {\n\t\t\tvar intlName = Intl.DateTimeFormat().resolvedOptions().timeZone;\n\t\t\tif (intlName && intlName.length > 3) {\n\t\t\t\tvar name = names[normalizeName(intlName)];\n\t\t\t\tif (name) {\n\t\t\t\t\treturn name;\n\t\t\t\t}\n\t\t\t\tlogError(\"Moment Timezone found \" + intlName + \" from the Intl api, but did not have that data loaded.\");\n\t\t\t}\n\t\t} catch (e) {\n\t\t\t// Intl unavailable, fall back to manual guessing.\n\t\t}\n\n\t\tvar offsets = userOffsets(),\n\t\t\toffsetsLength = offsets.length,\n\t\t\tguesses = guessesForUserOffsets(offsets),\n\t\t\tzoneScores = [],\n\t\t\tzoneScore, i, j;\n\n\t\tfor (i = 0; i < guesses.length; i++) {\n\t\t\tzoneScore = new ZoneScore(getZone(guesses[i]), offsetsLength);\n\t\t\tfor (j = 0; j < offsetsLength; j++) {\n\t\t\t\tzoneScore.scoreOffsetAt(offsets[j]);\n\t\t\t}\n\t\t\tzoneScores.push(zoneScore);\n\t\t}\n\n\t\tzoneScores.sort(sortZoneScores);\n\n\t\treturn zoneScores.length > 0 ? zoneScores[0].zone.name : undefined;\n\t}\n\n\tfunction guess (ignoreCache) {\n\t\tif (!cachedGuess || ignoreCache) {\n\t\t\tcachedGuess = rebuildGuess();\n\t\t}\n\t\treturn cachedGuess;\n\t}\n\n\t/************************************\n\t\tGlobal Methods\n\t************************************/\n\n\tfunction normalizeName (name) {\n\t\treturn (name || '').toLowerCase().replace(/\\//g, '_');\n\t}\n\n\tfunction addZone (packed) {\n\t\tvar i, name, split, normalized;\n\n\t\tif (typeof packed === \"string\") {\n\t\t\tpacked = [packed];\n\t\t}\n\n\t\tfor (i = 0; i < packed.length; i++) {\n\t\t\tsplit = packed[i].split('|');\n\t\t\tname = split[0];\n\t\t\tnormalized = normalizeName(name);\n\t\t\tzones[normalized] = packed[i];\n\t\t\tnames[normalized] = name;\n\t\t\taddToGuesses(normalized, split[2].split(' '));\n\t\t}\n\t}\n\n\tfunction getZone (name, caller) {\n\t\tname = normalizeName(name);\n\n\t\tvar zone = zones[name];\n\t\tvar link;\n\n\t\tif (zone instanceof Zone) {\n\t\t\treturn zone;\n\t\t}\n\n\t\tif (typeof zone === 'string') {\n\t\t\tzone = new Zone(zone);\n\t\t\tzones[name] = zone;\n\t\t\treturn zone;\n\t\t}\n\n\t\t// Pass getZone to prevent recursion more than 1 level deep\n\t\tif (links[name] && caller !== getZone && (link = getZone(links[name], getZone))) {\n\t\t\tzone = zones[name] = new Zone();\n\t\t\tzone._set(link);\n\t\t\tzone.name = names[name];\n\t\t\treturn zone;\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tfunction getNames () {\n\t\tvar i, out = [];\n\n\t\tfor (i in names) {\n\t\t\tif (names.hasOwnProperty(i) && (zones[i] || zones[links[i]]) && names[i]) {\n\t\t\t\tout.push(names[i]);\n\t\t\t}\n\t\t}\n\n\t\treturn out.sort();\n\t}\n\n\tfunction addLink (aliases) {\n\t\tvar i, alias, normal0, normal1;\n\n\t\tif (typeof aliases === \"string\") {\n\t\t\taliases = [aliases];\n\t\t}\n\n\t\tfor (i = 0; i < aliases.length; i++) {\n\t\t\talias = aliases[i].split('|');\n\n\t\t\tnormal0 = normalizeName(alias[0]);\n\t\t\tnormal1 = normalizeName(alias[1]);\n\n\t\t\tlinks[normal0] = normal1;\n\t\t\tnames[normal0] = alias[0];\n\n\t\t\tlinks[normal1] = normal0;\n\t\t\tnames[normal1] = alias[1];\n\t\t}\n\t}\n\n\tfunction loadData (data) {\n\t\taddZone(data.zones);\n\t\taddLink(data.links);\n\t\ttz.dataVersion = data.version;\n\t}\n\n\tfunction zoneExists (name) {\n\t\tif (!zoneExists.didShowError) {\n\t\t\tzoneExists.didShowError = true;\n\t\t\t\tlogError(\"moment.tz.zoneExists('\" + name + \"') has been deprecated in favor of !moment.tz.zone('\" + name + \"')\");\n\t\t}\n\t\treturn !!getZone(name);\n\t}\n\n\tfunction needsOffset (m) {\n\t\tvar isUnixTimestamp = (m._f === 'X' || m._f === 'x');\n\t\treturn !!(m._a && (m._tzm === undefined) && !isUnixTimestamp);\n\t}\n\n\tfunction logError (message) {\n\t\tif (typeof console !== 'undefined' && typeof console.error === 'function') {\n\t\t\tconsole.error(message);\n\t\t}\n\t}\n\n\t/************************************\n\t\tmoment.tz namespace\n\t************************************/\n\n\tfunction tz (input) {\n\t\tvar args = Array.prototype.slice.call(arguments, 0, -1),\n\t\t\tname = arguments[arguments.length - 1],\n\t\t\tzone = getZone(name),\n\t\t\tout = moment.utc.apply(null, args);\n\n\t\tif (zone && !moment.isMoment(input) && needsOffset(out)) {\n\t\t\tout.add(zone.parse(out), 'minutes');\n\t\t}\n\n\t\tout.tz(name);\n\n\t\treturn out;\n\t}\n\n\ttz.version = VERSION;\n\ttz.dataVersion = '';\n\ttz._zones = zones;\n\ttz._links = links;\n\ttz._names = names;\n\ttz.add = addZone;\n\ttz.link = addLink;\n\ttz.load = loadData;\n\ttz.zone = getZone;\n\ttz.zoneExists = zoneExists; // deprecated in 0.1.0\n\ttz.guess = guess;\n\ttz.names = getNames;\n\ttz.Zone = Zone;\n\ttz.unpack = unpack;\n\ttz.unpackBase60 = unpackBase60;\n\ttz.needsOffset = needsOffset;\n\ttz.moveInvalidForward = true;\n\ttz.moveAmbiguousForward = false;\n\n\t/************************************\n\t\tInterface with Moment.js\n\t************************************/\n\n\tvar fn = moment.fn;\n\n\tmoment.tz = tz;\n\n\tmoment.defaultZone = null;\n\n\tmoment.updateOffset = function (mom, keepTime) {\n\t\tvar zone = moment.defaultZone,\n\t\t\toffset;\n\n\t\tif (mom._z === undefined) {\n\t\t\tif (zone && needsOffset(mom) && !mom._isUTC) {\n\t\t\t\tmom._d = moment.utc(mom._a)._d;\n\t\t\t\tmom.utc().add(zone.parse(mom), 'minutes');\n\t\t\t}\n\t\t\tmom._z = zone;\n\t\t}\n\t\tif (mom._z) {\n\t\t\toffset = mom._z.utcOffset(mom);\n\t\t\tif (Math.abs(offset) < 16) {\n\t\t\t\toffset = offset / 60;\n\t\t\t}\n\t\t\tif (mom.utcOffset !== undefined) {\n\t\t\t\tmom.utcOffset(-offset, keepTime);\n\t\t\t} else {\n\t\t\t\tmom.zone(offset, keepTime);\n\t\t\t}\n\t\t}\n\t};\n\n\tfn.tz = function (name, keepTime) {\n\t\tif (name) {\n\t\t\tthis._z = getZone(name);\n\t\t\tif (this._z) {\n\t\t\t\tmoment.updateOffset(this, keepTime);\n\t\t\t} else {\n\t\t\t\tlogError(\"Moment Timezone has no data for \" + name + \". See http://momentjs.com/timezone/docs/#/data-loading/.\");\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\tif (this._z) { return this._z.name; }\n\t};\n\n\tfunction abbrWrap (old) {\n\t\treturn function () {\n\t\t\tif (this._z) { return this._z.abbr(this); }\n\t\t\treturn old.call(this);\n\t\t};\n\t}\n\n\tfunction resetZoneWrap (old) {\n\t\treturn function () {\n\t\t\tthis._z = null;\n\t\t\treturn old.apply(this, arguments);\n\t\t};\n\t}\n\n\tfn.zoneName = abbrWrap(fn.zoneName);\n\tfn.zoneAbbr = abbrWrap(fn.zoneAbbr);\n\tfn.utc = resetZoneWrap(fn.utc);\n\n\tmoment.tz.setDefault = function(name) {\n\t\tif (major < 2 || (major === 2 && minor < 9)) {\n\t\t\tlogError('Moment Timezone setDefault() requires Moment.js >= 2.9.0. You are using Moment.js ' + moment.version + '.');\n\t\t}\n\t\tmoment.defaultZone = name ? getZone(name) : null;\n\t\treturn moment;\n\t};\n\n\t// Cloning a moment should include the _z property.\n\tvar momentProperties = moment.momentProperties;\n\tif (Object.prototype.toString.call(momentProperties) === '[object Array]') {\n\t\t// moment 2.8.1+\n\t\tmomentProperties.push('_z');\n\t\tmomentProperties.push('_a');\n\t} else if (momentProperties) {\n\t\t// moment 2.7.0\n\t\tmomentProperties._z = null;\n\t}\n\n\t// INJECT DATA\n\n\treturn moment;\n}));","//! moment.js\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n typeof define === 'function' && define.amd ? define(factory) :\n global.moment = factory()\n}(this, (function () { 'use strict';\n\n var hookCallback;\n\n function hooks () {\n return hookCallback.apply(null, arguments);\n }\n\n // This is done to register the method called with moment()\n // without creating circular dependencies.\n function setHookCallback (callback) {\n hookCallback = callback;\n }\n\n function isArray(input) {\n return input instanceof Array || Object.prototype.toString.call(input) === '[object Array]';\n }\n\n function isObject(input) {\n // IE8 will treat undefined and null as object if it wasn't for\n // input != null\n return input != null && Object.prototype.toString.call(input) === '[object Object]';\n }\n\n function isObjectEmpty(obj) {\n if (Object.getOwnPropertyNames) {\n return (Object.getOwnPropertyNames(obj).length === 0);\n } else {\n var k;\n for (k in obj) {\n if (obj.hasOwnProperty(k)) {\n return false;\n }\n }\n return true;\n }\n }\n\n function isUndefined(input) {\n return input === void 0;\n }\n\n function isNumber(input) {\n return typeof input === 'number' || Object.prototype.toString.call(input) === '[object Number]';\n }\n\n function isDate(input) {\n return input instanceof Date || Object.prototype.toString.call(input) === '[object Date]';\n }\n\n function map(arr, fn) {\n var res = [], i;\n for (i = 0; i < arr.length; ++i) {\n res.push(fn(arr[i], i));\n }\n return res;\n }\n\n function hasOwnProp(a, b) {\n return Object.prototype.hasOwnProperty.call(a, b);\n }\n\n function extend(a, b) {\n for (var i in b) {\n if (hasOwnProp(b, i)) {\n a[i] = b[i];\n }\n }\n\n if (hasOwnProp(b, 'toString')) {\n a.toString = b.toString;\n }\n\n if (hasOwnProp(b, 'valueOf')) {\n a.valueOf = b.valueOf;\n }\n\n return a;\n }\n\n function createUTC (input, format, locale, strict) {\n return createLocalOrUTC(input, format, locale, strict, true).utc();\n }\n\n function defaultParsingFlags() {\n // We need to deep clone this object.\n return {\n empty : false,\n unusedTokens : [],\n unusedInput : [],\n overflow : -2,\n charsLeftOver : 0,\n nullInput : false,\n invalidMonth : null,\n invalidFormat : false,\n userInvalidated : false,\n iso : false,\n parsedDateParts : [],\n meridiem : null,\n rfc2822 : false,\n weekdayMismatch : false\n };\n }\n\n function getParsingFlags(m) {\n if (m._pf == null) {\n m._pf = defaultParsingFlags();\n }\n return m._pf;\n }\n\n var some;\n if (Array.prototype.some) {\n some = Array.prototype.some;\n } else {\n some = function (fun) {\n var t = Object(this);\n var len = t.length >>> 0;\n\n for (var i = 0; i < len; i++) {\n if (i in t && fun.call(this, t[i], i, t)) {\n return true;\n }\n }\n\n return false;\n };\n }\n\n function isValid(m) {\n if (m._isValid == null) {\n var flags = getParsingFlags(m);\n var parsedParts = some.call(flags.parsedDateParts, function (i) {\n return i != null;\n });\n var isNowValid = !isNaN(m._d.getTime()) &&\n flags.overflow < 0 &&\n !flags.empty &&\n !flags.invalidMonth &&\n !flags.invalidWeekday &&\n !flags.weekdayMismatch &&\n !flags.nullInput &&\n !flags.invalidFormat &&\n !flags.userInvalidated &&\n (!flags.meridiem || (flags.meridiem && parsedParts));\n\n if (m._strict) {\n isNowValid = isNowValid &&\n flags.charsLeftOver === 0 &&\n flags.unusedTokens.length === 0 &&\n flags.bigHour === undefined;\n }\n\n if (Object.isFrozen == null || !Object.isFrozen(m)) {\n m._isValid = isNowValid;\n }\n else {\n return isNowValid;\n }\n }\n return m._isValid;\n }\n\n function createInvalid (flags) {\n var m = createUTC(NaN);\n if (flags != null) {\n extend(getParsingFlags(m), flags);\n }\n else {\n getParsingFlags(m).userInvalidated = true;\n }\n\n return m;\n }\n\n // Plugins that add properties should also add the key here (null value),\n // so we can properly clone ourselves.\n var momentProperties = hooks.momentProperties = [];\n\n function copyConfig(to, from) {\n var i, prop, val;\n\n if (!isUndefined(from._isAMomentObject)) {\n to._isAMomentObject = from._isAMomentObject;\n }\n if (!isUndefined(from._i)) {\n to._i = from._i;\n }\n if (!isUndefined(from._f)) {\n to._f = from._f;\n }\n if (!isUndefined(from._l)) {\n to._l = from._l;\n }\n if (!isUndefined(from._strict)) {\n to._strict = from._strict;\n }\n if (!isUndefined(from._tzm)) {\n to._tzm = from._tzm;\n }\n if (!isUndefined(from._isUTC)) {\n to._isUTC = from._isUTC;\n }\n if (!isUndefined(from._offset)) {\n to._offset = from._offset;\n }\n if (!isUndefined(from._pf)) {\n to._pf = getParsingFlags(from);\n }\n if (!isUndefined(from._locale)) {\n to._locale = from._locale;\n }\n\n if (momentProperties.length > 0) {\n for (i = 0; i < momentProperties.length; i++) {\n prop = momentProperties[i];\n val = from[prop];\n if (!isUndefined(val)) {\n to[prop] = val;\n }\n }\n }\n\n return to;\n }\n\n var updateInProgress = false;\n\n // Moment prototype object\n function Moment(config) {\n copyConfig(this, config);\n this._d = new Date(config._d != null ? config._d.getTime() : NaN);\n if (!this.isValid()) {\n this._d = new Date(NaN);\n }\n // Prevent infinite loop in case updateOffset creates new moment\n // objects.\n if (updateInProgress === false) {\n updateInProgress = true;\n hooks.updateOffset(this);\n updateInProgress = false;\n }\n }\n\n function isMoment (obj) {\n return obj instanceof Moment || (obj != null && obj._isAMomentObject != null);\n }\n\n function absFloor (number) {\n if (number < 0) {\n // -0 -> 0\n return Math.ceil(number) || 0;\n } else {\n return Math.floor(number);\n }\n }\n\n function toInt(argumentForCoercion) {\n var coercedNumber = +argumentForCoercion,\n value = 0;\n\n if (coercedNumber !== 0 && isFinite(coercedNumber)) {\n value = absFloor(coercedNumber);\n }\n\n return value;\n }\n\n // compare two arrays, return the number of differences\n function compareArrays(array1, array2, dontConvert) {\n var len = Math.min(array1.length, array2.length),\n lengthDiff = Math.abs(array1.length - array2.length),\n diffs = 0,\n i;\n for (i = 0; i < len; i++) {\n if ((dontConvert && array1[i] !== array2[i]) ||\n (!dontConvert && toInt(array1[i]) !== toInt(array2[i]))) {\n diffs++;\n }\n }\n return diffs + lengthDiff;\n }\n\n function warn(msg) {\n if (hooks.suppressDeprecationWarnings === false &&\n (typeof console !== 'undefined') && console.warn) {\n console.warn('Deprecation warning: ' + msg);\n }\n }\n\n function deprecate(msg, fn) {\n var firstTime = true;\n\n return extend(function () {\n if (hooks.deprecationHandler != null) {\n hooks.deprecationHandler(null, msg);\n }\n if (firstTime) {\n var args = [];\n var arg;\n for (var i = 0; i < arguments.length; i++) {\n arg = '';\n if (typeof arguments[i] === 'object') {\n arg += '\\n[' + i + '] ';\n for (var key in arguments[0]) {\n arg += key + ': ' + arguments[0][key] + ', ';\n }\n arg = arg.slice(0, -2); // Remove trailing comma and space\n } else {\n arg = arguments[i];\n }\n args.push(arg);\n }\n warn(msg + '\\nArguments: ' + Array.prototype.slice.call(args).join('') + '\\n' + (new Error()).stack);\n firstTime = false;\n }\n return fn.apply(this, arguments);\n }, fn);\n }\n\n var deprecations = {};\n\n function deprecateSimple(name, msg) {\n if (hooks.deprecationHandler != null) {\n hooks.deprecationHandler(name, msg);\n }\n if (!deprecations[name]) {\n warn(msg);\n deprecations[name] = true;\n }\n }\n\n hooks.suppressDeprecationWarnings = false;\n hooks.deprecationHandler = null;\n\n function isFunction(input) {\n return input instanceof Function || Object.prototype.toString.call(input) === '[object Function]';\n }\n\n function set (config) {\n var prop, i;\n for (i in config) {\n prop = config[i];\n if (isFunction(prop)) {\n this[i] = prop;\n } else {\n this['_' + i] = prop;\n }\n }\n this._config = config;\n // Lenient ordinal parsing accepts just a number in addition to\n // number + (possibly) stuff coming from _dayOfMonthOrdinalParse.\n // TODO: Remove \"ordinalParse\" fallback in next major release.\n this._dayOfMonthOrdinalParseLenient = new RegExp(\n (this._dayOfMonthOrdinalParse.source || this._ordinalParse.source) +\n '|' + (/\\d{1,2}/).source);\n }\n\n function mergeConfigs(parentConfig, childConfig) {\n var res = extend({}, parentConfig), prop;\n for (prop in childConfig) {\n if (hasOwnProp(childConfig, prop)) {\n if (isObject(parentConfig[prop]) && isObject(childConfig[prop])) {\n res[prop] = {};\n extend(res[prop], parentConfig[prop]);\n extend(res[prop], childConfig[prop]);\n } else if (childConfig[prop] != null) {\n res[prop] = childConfig[prop];\n } else {\n delete res[prop];\n }\n }\n }\n for (prop in parentConfig) {\n if (hasOwnProp(parentConfig, prop) &&\n !hasOwnProp(childConfig, prop) &&\n isObject(parentConfig[prop])) {\n // make sure changes to properties don't modify parent config\n res[prop] = extend({}, res[prop]);\n }\n }\n return res;\n }\n\n function Locale(config) {\n if (config != null) {\n this.set(config);\n }\n }\n\n var keys;\n\n if (Object.keys) {\n keys = Object.keys;\n } else {\n keys = function (obj) {\n var i, res = [];\n for (i in obj) {\n if (hasOwnProp(obj, i)) {\n res.push(i);\n }\n }\n return res;\n };\n }\n\n var defaultCalendar = {\n sameDay : '[Today at] LT',\n nextDay : '[Tomorrow at] LT',\n nextWeek : 'dddd [at] LT',\n lastDay : '[Yesterday at] LT',\n lastWeek : '[Last] dddd [at] LT',\n sameElse : 'L'\n };\n\n function calendar (key, mom, now) {\n var output = this._calendar[key] || this._calendar['sameElse'];\n return isFunction(output) ? output.call(mom, now) : output;\n }\n\n var defaultLongDateFormat = {\n LTS : 'h:mm:ss A',\n LT : 'h:mm A',\n L : 'MM/DD/YYYY',\n LL : 'MMMM D, YYYY',\n LLL : 'MMMM D, YYYY h:mm A',\n LLLL : 'dddd, MMMM D, YYYY h:mm A'\n };\n\n function longDateFormat (key) {\n var format = this._longDateFormat[key],\n formatUpper = this._longDateFormat[key.toUpperCase()];\n\n if (format || !formatUpper) {\n return format;\n }\n\n this._longDateFormat[key] = formatUpper.replace(/MMMM|MM|DD|dddd/g, function (val) {\n return val.slice(1);\n });\n\n return this._longDateFormat[key];\n }\n\n var defaultInvalidDate = 'Invalid date';\n\n function invalidDate () {\n return this._invalidDate;\n }\n\n var defaultOrdinal = '%d';\n var defaultDayOfMonthOrdinalParse = /\\d{1,2}/;\n\n function ordinal (number) {\n return this._ordinal.replace('%d', number);\n }\n\n var defaultRelativeTime = {\n future : 'in %s',\n past : '%s ago',\n s : 'a few seconds',\n ss : '%d seconds',\n m : 'a minute',\n mm : '%d minutes',\n h : 'an hour',\n hh : '%d hours',\n d : 'a day',\n dd : '%d days',\n M : 'a month',\n MM : '%d months',\n y : 'a year',\n yy : '%d years'\n };\n\n function relativeTime (number, withoutSuffix, string, isFuture) {\n var output = this._relativeTime[string];\n return (isFunction(output)) ?\n output(number, withoutSuffix, string, isFuture) :\n output.replace(/%d/i, number);\n }\n\n function pastFuture (diff, output) {\n var format = this._relativeTime[diff > 0 ? 'future' : 'past'];\n return isFunction(format) ? format(output) : format.replace(/%s/i, output);\n }\n\n var aliases = {};\n\n function addUnitAlias (unit, shorthand) {\n var lowerCase = unit.toLowerCase();\n aliases[lowerCase] = aliases[lowerCase + 's'] = aliases[shorthand] = unit;\n }\n\n function normalizeUnits(units) {\n return typeof units === 'string' ? aliases[units] || aliases[units.toLowerCase()] : undefined;\n }\n\n function normalizeObjectUnits(inputObject) {\n var normalizedInput = {},\n normalizedProp,\n prop;\n\n for (prop in inputObject) {\n if (hasOwnProp(inputObject, prop)) {\n normalizedProp = normalizeUnits(prop);\n if (normalizedProp) {\n normalizedInput[normalizedProp] = inputObject[prop];\n }\n }\n }\n\n return normalizedInput;\n }\n\n var priorities = {};\n\n function addUnitPriority(unit, priority) {\n priorities[unit] = priority;\n }\n\n function getPrioritizedUnits(unitsObj) {\n var units = [];\n for (var u in unitsObj) {\n units.push({unit: u, priority: priorities[u]});\n }\n units.sort(function (a, b) {\n return a.priority - b.priority;\n });\n return units;\n }\n\n function zeroFill(number, targetLength, forceSign) {\n var absNumber = '' + Math.abs(number),\n zerosToFill = targetLength - absNumber.length,\n sign = number >= 0;\n return (sign ? (forceSign ? '+' : '') : '-') +\n Math.pow(10, Math.max(0, zerosToFill)).toString().substr(1) + absNumber;\n }\n\n var formattingTokens = /(\\[[^\\[]*\\])|(\\\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|YYYYYY|YYYYY|YYYY|YY|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g;\n\n var localFormattingTokens = /(\\[[^\\[]*\\])|(\\\\)?(LTS|LT|LL?L?L?|l{1,4})/g;\n\n var formatFunctions = {};\n\n var formatTokenFunctions = {};\n\n // token: 'M'\n // padded: ['MM', 2]\n // ordinal: 'Mo'\n // callback: function () { this.month() + 1 }\n function addFormatToken (token, padded, ordinal, callback) {\n var func = callback;\n if (typeof callback === 'string') {\n func = function () {\n return this[callback]();\n };\n }\n if (token) {\n formatTokenFunctions[token] = func;\n }\n if (padded) {\n formatTokenFunctions[padded[0]] = function () {\n return zeroFill(func.apply(this, arguments), padded[1], padded[2]);\n };\n }\n if (ordinal) {\n formatTokenFunctions[ordinal] = function () {\n return this.localeData().ordinal(func.apply(this, arguments), token);\n };\n }\n }\n\n function removeFormattingTokens(input) {\n if (input.match(/\\[[\\s\\S]/)) {\n return input.replace(/^\\[|\\]$/g, '');\n }\n return input.replace(/\\\\/g, '');\n }\n\n function makeFormatFunction(format) {\n var array = format.match(formattingTokens), i, length;\n\n for (i = 0, length = array.length; i < length; i++) {\n if (formatTokenFunctions[array[i]]) {\n array[i] = formatTokenFunctions[array[i]];\n } else {\n array[i] = removeFormattingTokens(array[i]);\n }\n }\n\n return function (mom) {\n var output = '', i;\n for (i = 0; i < length; i++) {\n output += isFunction(array[i]) ? array[i].call(mom, format) : array[i];\n }\n return output;\n };\n }\n\n // format date using native date object\n function formatMoment(m, format) {\n if (!m.isValid()) {\n return m.localeData().invalidDate();\n }\n\n format = expandFormat(format, m.localeData());\n formatFunctions[format] = formatFunctions[format] || makeFormatFunction(format);\n\n return formatFunctions[format](m);\n }\n\n function expandFormat(format, locale) {\n var i = 5;\n\n function replaceLongDateFormatTokens(input) {\n return locale.longDateFormat(input) || input;\n }\n\n localFormattingTokens.lastIndex = 0;\n while (i >= 0 && localFormattingTokens.test(format)) {\n format = format.replace(localFormattingTokens, replaceLongDateFormatTokens);\n localFormattingTokens.lastIndex = 0;\n i -= 1;\n }\n\n return format;\n }\n\n var match1 = /\\d/; // 0 - 9\n var match2 = /\\d\\d/; // 00 - 99\n var match3 = /\\d{3}/; // 000 - 999\n var match4 = /\\d{4}/; // 0000 - 9999\n var match6 = /[+-]?\\d{6}/; // -999999 - 999999\n var match1to2 = /\\d\\d?/; // 0 - 99\n var match3to4 = /\\d\\d\\d\\d?/; // 999 - 9999\n var match5to6 = /\\d\\d\\d\\d\\d\\d?/; // 99999 - 999999\n var match1to3 = /\\d{1,3}/; // 0 - 999\n var match1to4 = /\\d{1,4}/; // 0 - 9999\n var match1to6 = /[+-]?\\d{1,6}/; // -999999 - 999999\n\n var matchUnsigned = /\\d+/; // 0 - inf\n var matchSigned = /[+-]?\\d+/; // -inf - inf\n\n var matchOffset = /Z|[+-]\\d\\d:?\\d\\d/gi; // +00:00 -00:00 +0000 -0000 or Z\n var matchShortOffset = /Z|[+-]\\d\\d(?::?\\d\\d)?/gi; // +00 -00 +00:00 -00:00 +0000 -0000 or Z\n\n var matchTimestamp = /[+-]?\\d+(\\.\\d{1,3})?/; // 123456789 123456789.123\n\n // any word (or two) characters or numbers including two/three word month in arabic.\n // includes scottish gaelic two word and hyphenated months\n var matchWord = /[0-9]{0,256}['a-z\\u00A0-\\u05FF\\u0700-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFF07\\uFF10-\\uFFEF]{1,256}|[\\u0600-\\u06FF\\/]{1,256}(\\s*?[\\u0600-\\u06FF]{1,256}){1,2}/i;\n\n var regexes = {};\n\n function addRegexToken (token, regex, strictRegex) {\n regexes[token] = isFunction(regex) ? regex : function (isStrict, localeData) {\n return (isStrict && strictRegex) ? strictRegex : regex;\n };\n }\n\n function getParseRegexForToken (token, config) {\n if (!hasOwnProp(regexes, token)) {\n return new RegExp(unescapeFormat(token));\n }\n\n return regexes[token](config._strict, config._locale);\n }\n\n // Code from http://stackoverflow.com/questions/3561493/is-there-a-regexp-escape-function-in-javascript\n function unescapeFormat(s) {\n return regexEscape(s.replace('\\\\', '').replace(/\\\\(\\[)|\\\\(\\])|\\[([^\\]\\[]*)\\]|\\\\(.)/g, function (matched, p1, p2, p3, p4) {\n return p1 || p2 || p3 || p4;\n }));\n }\n\n function regexEscape(s) {\n return s.replace(/[-\\/\\\\^$*+?.()|[\\]{}]/g, '\\\\$&');\n }\n\n var tokens = {};\n\n function addParseToken (token, callback) {\n var i, func = callback;\n if (typeof token === 'string') {\n token = [token];\n }\n if (isNumber(callback)) {\n func = function (input, array) {\n array[callback] = toInt(input);\n };\n }\n for (i = 0; i < token.length; i++) {\n tokens[token[i]] = func;\n }\n }\n\n function addWeekParseToken (token, callback) {\n addParseToken(token, function (input, array, config, token) {\n config._w = config._w || {};\n callback(input, config._w, config, token);\n });\n }\n\n function addTimeToArrayFromToken(token, input, config) {\n if (input != null && hasOwnProp(tokens, token)) {\n tokens[token](input, config._a, config, token);\n }\n }\n\n var YEAR = 0;\n var MONTH = 1;\n var DATE = 2;\n var HOUR = 3;\n var MINUTE = 4;\n var SECOND = 5;\n var MILLISECOND = 6;\n var WEEK = 7;\n var WEEKDAY = 8;\n\n // FORMATTING\n\n addFormatToken('Y', 0, 0, function () {\n var y = this.year();\n return y <= 9999 ? '' + y : '+' + y;\n });\n\n addFormatToken(0, ['YY', 2], 0, function () {\n return this.year() % 100;\n });\n\n addFormatToken(0, ['YYYY', 4], 0, 'year');\n addFormatToken(0, ['YYYYY', 5], 0, 'year');\n addFormatToken(0, ['YYYYYY', 6, true], 0, 'year');\n\n // ALIASES\n\n addUnitAlias('year', 'y');\n\n // PRIORITIES\n\n addUnitPriority('year', 1);\n\n // PARSING\n\n addRegexToken('Y', matchSigned);\n addRegexToken('YY', match1to2, match2);\n addRegexToken('YYYY', match1to4, match4);\n addRegexToken('YYYYY', match1to6, match6);\n addRegexToken('YYYYYY', match1to6, match6);\n\n addParseToken(['YYYYY', 'YYYYYY'], YEAR);\n addParseToken('YYYY', function (input, array) {\n array[YEAR] = input.length === 2 ? hooks.parseTwoDigitYear(input) : toInt(input);\n });\n addParseToken('YY', function (input, array) {\n array[YEAR] = hooks.parseTwoDigitYear(input);\n });\n addParseToken('Y', function (input, array) {\n array[YEAR] = parseInt(input, 10);\n });\n\n // HELPERS\n\n function daysInYear(year) {\n return isLeapYear(year) ? 366 : 365;\n }\n\n function isLeapYear(year) {\n return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0;\n }\n\n // HOOKS\n\n hooks.parseTwoDigitYear = function (input) {\n return toInt(input) + (toInt(input) > 68 ? 1900 : 2000);\n };\n\n // MOMENTS\n\n var getSetYear = makeGetSet('FullYear', true);\n\n function getIsLeapYear () {\n return isLeapYear(this.year());\n }\n\n function makeGetSet (unit, keepTime) {\n return function (value) {\n if (value != null) {\n set$1(this, unit, value);\n hooks.updateOffset(this, keepTime);\n return this;\n } else {\n return get(this, unit);\n }\n };\n }\n\n function get (mom, unit) {\n return mom.isValid() ?\n mom._d['get' + (mom._isUTC ? 'UTC' : '') + unit]() : NaN;\n }\n\n function set$1 (mom, unit, value) {\n if (mom.isValid() && !isNaN(value)) {\n if (unit === 'FullYear' && isLeapYear(mom.year()) && mom.month() === 1 && mom.date() === 29) {\n mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](value, mom.month(), daysInMonth(value, mom.month()));\n }\n else {\n mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](value);\n }\n }\n }\n\n // MOMENTS\n\n function stringGet (units) {\n units = normalizeUnits(units);\n if (isFunction(this[units])) {\n return this[units]();\n }\n return this;\n }\n\n\n function stringSet (units, value) {\n if (typeof units === 'object') {\n units = normalizeObjectUnits(units);\n var prioritized = getPrioritizedUnits(units);\n for (var i = 0; i < prioritized.length; i++) {\n this[prioritized[i].unit](units[prioritized[i].unit]);\n }\n } else {\n units = normalizeUnits(units);\n if (isFunction(this[units])) {\n return this[units](value);\n }\n }\n return this;\n }\n\n function mod(n, x) {\n return ((n % x) + x) % x;\n }\n\n var indexOf;\n\n if (Array.prototype.indexOf) {\n indexOf = Array.prototype.indexOf;\n } else {\n indexOf = function (o) {\n // I know\n var i;\n for (i = 0; i < this.length; ++i) {\n if (this[i] === o) {\n return i;\n }\n }\n return -1;\n };\n }\n\n function daysInMonth(year, month) {\n if (isNaN(year) || isNaN(month)) {\n return NaN;\n }\n var modMonth = mod(month, 12);\n year += (month - modMonth) / 12;\n return modMonth === 1 ? (isLeapYear(year) ? 29 : 28) : (31 - modMonth % 7 % 2);\n }\n\n // FORMATTING\n\n addFormatToken('M', ['MM', 2], 'Mo', function () {\n return this.month() + 1;\n });\n\n addFormatToken('MMM', 0, 0, function (format) {\n return this.localeData().monthsShort(this, format);\n });\n\n addFormatToken('MMMM', 0, 0, function (format) {\n return this.localeData().months(this, format);\n });\n\n // ALIASES\n\n addUnitAlias('month', 'M');\n\n // PRIORITY\n\n addUnitPriority('month', 8);\n\n // PARSING\n\n addRegexToken('M', match1to2);\n addRegexToken('MM', match1to2, match2);\n addRegexToken('MMM', function (isStrict, locale) {\n return locale.monthsShortRegex(isStrict);\n });\n addRegexToken('MMMM', function (isStrict, locale) {\n return locale.monthsRegex(isStrict);\n });\n\n addParseToken(['M', 'MM'], function (input, array) {\n array[MONTH] = toInt(input) - 1;\n });\n\n addParseToken(['MMM', 'MMMM'], function (input, array, config, token) {\n var month = config._locale.monthsParse(input, token, config._strict);\n // if we didn't find a month name, mark the date as invalid.\n if (month != null) {\n array[MONTH] = month;\n } else {\n getParsingFlags(config).invalidMonth = input;\n }\n });\n\n // LOCALES\n\n var MONTHS_IN_FORMAT = /D[oD]?(\\[[^\\[\\]]*\\]|\\s)+MMMM?/;\n var defaultLocaleMonths = 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_');\n function localeMonths (m, format) {\n if (!m) {\n return isArray(this._months) ? this._months :\n this._months['standalone'];\n }\n return isArray(this._months) ? this._months[m.month()] :\n this._months[(this._months.isFormat || MONTHS_IN_FORMAT).test(format) ? 'format' : 'standalone'][m.month()];\n }\n\n var defaultLocaleMonthsShort = 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_');\n function localeMonthsShort (m, format) {\n if (!m) {\n return isArray(this._monthsShort) ? this._monthsShort :\n this._monthsShort['standalone'];\n }\n return isArray(this._monthsShort) ? this._monthsShort[m.month()] :\n this._monthsShort[MONTHS_IN_FORMAT.test(format) ? 'format' : 'standalone'][m.month()];\n }\n\n function handleStrictParse(monthName, format, strict) {\n var i, ii, mom, llc = monthName.toLocaleLowerCase();\n if (!this._monthsParse) {\n // this is not used\n this._monthsParse = [];\n this._longMonthsParse = [];\n this._shortMonthsParse = [];\n for (i = 0; i < 12; ++i) {\n mom = createUTC([2000, i]);\n this._shortMonthsParse[i] = this.monthsShort(mom, '').toLocaleLowerCase();\n this._longMonthsParse[i] = this.months(mom, '').toLocaleLowerCase();\n }\n }\n\n if (strict) {\n if (format === 'MMM') {\n ii = indexOf.call(this._shortMonthsParse, llc);\n return ii !== -1 ? ii : null;\n } else {\n ii = indexOf.call(this._longMonthsParse, llc);\n return ii !== -1 ? ii : null;\n }\n } else {\n if (format === 'MMM') {\n ii = indexOf.call(this._shortMonthsParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._longMonthsParse, llc);\n return ii !== -1 ? ii : null;\n } else {\n ii = indexOf.call(this._longMonthsParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._shortMonthsParse, llc);\n return ii !== -1 ? ii : null;\n }\n }\n }\n\n function localeMonthsParse (monthName, format, strict) {\n var i, mom, regex;\n\n if (this._monthsParseExact) {\n return handleStrictParse.call(this, monthName, format, strict);\n }\n\n if (!this._monthsParse) {\n this._monthsParse = [];\n this._longMonthsParse = [];\n this._shortMonthsParse = [];\n }\n\n // TODO: add sorting\n // Sorting makes sure if one month (or abbr) is a prefix of another\n // see sorting in computeMonthsParse\n for (i = 0; i < 12; i++) {\n // make the regex if we don't have it already\n mom = createUTC([2000, i]);\n if (strict && !this._longMonthsParse[i]) {\n this._longMonthsParse[i] = new RegExp('^' + this.months(mom, '').replace('.', '') + '$', 'i');\n this._shortMonthsParse[i] = new RegExp('^' + this.monthsShort(mom, '').replace('.', '') + '$', 'i');\n }\n if (!strict && !this._monthsParse[i]) {\n regex = '^' + this.months(mom, '') + '|^' + this.monthsShort(mom, '');\n this._monthsParse[i] = new RegExp(regex.replace('.', ''), 'i');\n }\n // test the regex\n if (strict && format === 'MMMM' && this._longMonthsParse[i].test(monthName)) {\n return i;\n } else if (strict && format === 'MMM' && this._shortMonthsParse[i].test(monthName)) {\n return i;\n } else if (!strict && this._monthsParse[i].test(monthName)) {\n return i;\n }\n }\n }\n\n // MOMENTS\n\n function setMonth (mom, value) {\n var dayOfMonth;\n\n if (!mom.isValid()) {\n // No op\n return mom;\n }\n\n if (typeof value === 'string') {\n if (/^\\d+$/.test(value)) {\n value = toInt(value);\n } else {\n value = mom.localeData().monthsParse(value);\n // TODO: Another silent failure?\n if (!isNumber(value)) {\n return mom;\n }\n }\n }\n\n dayOfMonth = Math.min(mom.date(), daysInMonth(mom.year(), value));\n mom._d['set' + (mom._isUTC ? 'UTC' : '') + 'Month'](value, dayOfMonth);\n return mom;\n }\n\n function getSetMonth (value) {\n if (value != null) {\n setMonth(this, value);\n hooks.updateOffset(this, true);\n return this;\n } else {\n return get(this, 'Month');\n }\n }\n\n function getDaysInMonth () {\n return daysInMonth(this.year(), this.month());\n }\n\n var defaultMonthsShortRegex = matchWord;\n function monthsShortRegex (isStrict) {\n if (this._monthsParseExact) {\n if (!hasOwnProp(this, '_monthsRegex')) {\n computeMonthsParse.call(this);\n }\n if (isStrict) {\n return this._monthsShortStrictRegex;\n } else {\n return this._monthsShortRegex;\n }\n } else {\n if (!hasOwnProp(this, '_monthsShortRegex')) {\n this._monthsShortRegex = defaultMonthsShortRegex;\n }\n return this._monthsShortStrictRegex && isStrict ?\n this._monthsShortStrictRegex : this._monthsShortRegex;\n }\n }\n\n var defaultMonthsRegex = matchWord;\n function monthsRegex (isStrict) {\n if (this._monthsParseExact) {\n if (!hasOwnProp(this, '_monthsRegex')) {\n computeMonthsParse.call(this);\n }\n if (isStrict) {\n return this._monthsStrictRegex;\n } else {\n return this._monthsRegex;\n }\n } else {\n if (!hasOwnProp(this, '_monthsRegex')) {\n this._monthsRegex = defaultMonthsRegex;\n }\n return this._monthsStrictRegex && isStrict ?\n this._monthsStrictRegex : this._monthsRegex;\n }\n }\n\n function computeMonthsParse () {\n function cmpLenRev(a, b) {\n return b.length - a.length;\n }\n\n var shortPieces = [], longPieces = [], mixedPieces = [],\n i, mom;\n for (i = 0; i < 12; i++) {\n // make the regex if we don't have it already\n mom = createUTC([2000, i]);\n shortPieces.push(this.monthsShort(mom, ''));\n longPieces.push(this.months(mom, ''));\n mixedPieces.push(this.months(mom, ''));\n mixedPieces.push(this.monthsShort(mom, ''));\n }\n // Sorting makes sure if one month (or abbr) is a prefix of another it\n // will match the longer piece.\n shortPieces.sort(cmpLenRev);\n longPieces.sort(cmpLenRev);\n mixedPieces.sort(cmpLenRev);\n for (i = 0; i < 12; i++) {\n shortPieces[i] = regexEscape(shortPieces[i]);\n longPieces[i] = regexEscape(longPieces[i]);\n }\n for (i = 0; i < 24; i++) {\n mixedPieces[i] = regexEscape(mixedPieces[i]);\n }\n\n this._monthsRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\n this._monthsShortRegex = this._monthsRegex;\n this._monthsStrictRegex = new RegExp('^(' + longPieces.join('|') + ')', 'i');\n this._monthsShortStrictRegex = new RegExp('^(' + shortPieces.join('|') + ')', 'i');\n }\n\n function createDate (y, m, d, h, M, s, ms) {\n // can't just apply() to create a date:\n // https://stackoverflow.com/q/181348\n var date = new Date(y, m, d, h, M, s, ms);\n\n // the date constructor remaps years 0-99 to 1900-1999\n if (y < 100 && y >= 0 && isFinite(date.getFullYear())) {\n date.setFullYear(y);\n }\n return date;\n }\n\n function createUTCDate (y) {\n var date = new Date(Date.UTC.apply(null, arguments));\n\n // the Date.UTC function remaps years 0-99 to 1900-1999\n if (y < 100 && y >= 0 && isFinite(date.getUTCFullYear())) {\n date.setUTCFullYear(y);\n }\n return date;\n }\n\n // start-of-first-week - start-of-year\n function firstWeekOffset(year, dow, doy) {\n var // first-week day -- which january is always in the first week (4 for iso, 1 for other)\n fwd = 7 + dow - doy,\n // first-week day local weekday -- which local weekday is fwd\n fwdlw = (7 + createUTCDate(year, 0, fwd).getUTCDay() - dow) % 7;\n\n return -fwdlw + fwd - 1;\n }\n\n // https://en.wikipedia.org/wiki/ISO_week_date#Calculating_a_date_given_the_year.2C_week_number_and_weekday\n function dayOfYearFromWeeks(year, week, weekday, dow, doy) {\n var localWeekday = (7 + weekday - dow) % 7,\n weekOffset = firstWeekOffset(year, dow, doy),\n dayOfYear = 1 + 7 * (week - 1) + localWeekday + weekOffset,\n resYear, resDayOfYear;\n\n if (dayOfYear <= 0) {\n resYear = year - 1;\n resDayOfYear = daysInYear(resYear) + dayOfYear;\n } else if (dayOfYear > daysInYear(year)) {\n resYear = year + 1;\n resDayOfYear = dayOfYear - daysInYear(year);\n } else {\n resYear = year;\n resDayOfYear = dayOfYear;\n }\n\n return {\n year: resYear,\n dayOfYear: resDayOfYear\n };\n }\n\n function weekOfYear(mom, dow, doy) {\n var weekOffset = firstWeekOffset(mom.year(), dow, doy),\n week = Math.floor((mom.dayOfYear() - weekOffset - 1) / 7) + 1,\n resWeek, resYear;\n\n if (week < 1) {\n resYear = mom.year() - 1;\n resWeek = week + weeksInYear(resYear, dow, doy);\n } else if (week > weeksInYear(mom.year(), dow, doy)) {\n resWeek = week - weeksInYear(mom.year(), dow, doy);\n resYear = mom.year() + 1;\n } else {\n resYear = mom.year();\n resWeek = week;\n }\n\n return {\n week: resWeek,\n year: resYear\n };\n }\n\n function weeksInYear(year, dow, doy) {\n var weekOffset = firstWeekOffset(year, dow, doy),\n weekOffsetNext = firstWeekOffset(year + 1, dow, doy);\n return (daysInYear(year) - weekOffset + weekOffsetNext) / 7;\n }\n\n // FORMATTING\n\n addFormatToken('w', ['ww', 2], 'wo', 'week');\n addFormatToken('W', ['WW', 2], 'Wo', 'isoWeek');\n\n // ALIASES\n\n addUnitAlias('week', 'w');\n addUnitAlias('isoWeek', 'W');\n\n // PRIORITIES\n\n addUnitPriority('week', 5);\n addUnitPriority('isoWeek', 5);\n\n // PARSING\n\n addRegexToken('w', match1to2);\n addRegexToken('ww', match1to2, match2);\n addRegexToken('W', match1to2);\n addRegexToken('WW', match1to2, match2);\n\n addWeekParseToken(['w', 'ww', 'W', 'WW'], function (input, week, config, token) {\n week[token.substr(0, 1)] = toInt(input);\n });\n\n // HELPERS\n\n // LOCALES\n\n function localeWeek (mom) {\n return weekOfYear(mom, this._week.dow, this._week.doy).week;\n }\n\n var defaultLocaleWeek = {\n dow : 0, // Sunday is the first day of the week.\n doy : 6 // The week that contains Jan 1st is the first week of the year.\n };\n\n function localeFirstDayOfWeek () {\n return this._week.dow;\n }\n\n function localeFirstDayOfYear () {\n return this._week.doy;\n }\n\n // MOMENTS\n\n function getSetWeek (input) {\n var week = this.localeData().week(this);\n return input == null ? week : this.add((input - week) * 7, 'd');\n }\n\n function getSetISOWeek (input) {\n var week = weekOfYear(this, 1, 4).week;\n return input == null ? week : this.add((input - week) * 7, 'd');\n }\n\n // FORMATTING\n\n addFormatToken('d', 0, 'do', 'day');\n\n addFormatToken('dd', 0, 0, function (format) {\n return this.localeData().weekdaysMin(this, format);\n });\n\n addFormatToken('ddd', 0, 0, function (format) {\n return this.localeData().weekdaysShort(this, format);\n });\n\n addFormatToken('dddd', 0, 0, function (format) {\n return this.localeData().weekdays(this, format);\n });\n\n addFormatToken('e', 0, 0, 'weekday');\n addFormatToken('E', 0, 0, 'isoWeekday');\n\n // ALIASES\n\n addUnitAlias('day', 'd');\n addUnitAlias('weekday', 'e');\n addUnitAlias('isoWeekday', 'E');\n\n // PRIORITY\n addUnitPriority('day', 11);\n addUnitPriority('weekday', 11);\n addUnitPriority('isoWeekday', 11);\n\n // PARSING\n\n addRegexToken('d', match1to2);\n addRegexToken('e', match1to2);\n addRegexToken('E', match1to2);\n addRegexToken('dd', function (isStrict, locale) {\n return locale.weekdaysMinRegex(isStrict);\n });\n addRegexToken('ddd', function (isStrict, locale) {\n return locale.weekdaysShortRegex(isStrict);\n });\n addRegexToken('dddd', function (isStrict, locale) {\n return locale.weekdaysRegex(isStrict);\n });\n\n addWeekParseToken(['dd', 'ddd', 'dddd'], function (input, week, config, token) {\n var weekday = config._locale.weekdaysParse(input, token, config._strict);\n // if we didn't get a weekday name, mark the date as invalid\n if (weekday != null) {\n week.d = weekday;\n } else {\n getParsingFlags(config).invalidWeekday = input;\n }\n });\n\n addWeekParseToken(['d', 'e', 'E'], function (input, week, config, token) {\n week[token] = toInt(input);\n });\n\n // HELPERS\n\n function parseWeekday(input, locale) {\n if (typeof input !== 'string') {\n return input;\n }\n\n if (!isNaN(input)) {\n return parseInt(input, 10);\n }\n\n input = locale.weekdaysParse(input);\n if (typeof input === 'number') {\n return input;\n }\n\n return null;\n }\n\n function parseIsoWeekday(input, locale) {\n if (typeof input === 'string') {\n return locale.weekdaysParse(input) % 7 || 7;\n }\n return isNaN(input) ? null : input;\n }\n\n // LOCALES\n\n var defaultLocaleWeekdays = 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_');\n function localeWeekdays (m, format) {\n if (!m) {\n return isArray(this._weekdays) ? this._weekdays :\n this._weekdays['standalone'];\n }\n return isArray(this._weekdays) ? this._weekdays[m.day()] :\n this._weekdays[this._weekdays.isFormat.test(format) ? 'format' : 'standalone'][m.day()];\n }\n\n var defaultLocaleWeekdaysShort = 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_');\n function localeWeekdaysShort (m) {\n return (m) ? this._weekdaysShort[m.day()] : this._weekdaysShort;\n }\n\n var defaultLocaleWeekdaysMin = 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_');\n function localeWeekdaysMin (m) {\n return (m) ? this._weekdaysMin[m.day()] : this._weekdaysMin;\n }\n\n function handleStrictParse$1(weekdayName, format, strict) {\n var i, ii, mom, llc = weekdayName.toLocaleLowerCase();\n if (!this._weekdaysParse) {\n this._weekdaysParse = [];\n this._shortWeekdaysParse = [];\n this._minWeekdaysParse = [];\n\n for (i = 0; i < 7; ++i) {\n mom = createUTC([2000, 1]).day(i);\n this._minWeekdaysParse[i] = this.weekdaysMin(mom, '').toLocaleLowerCase();\n this._shortWeekdaysParse[i] = this.weekdaysShort(mom, '').toLocaleLowerCase();\n this._weekdaysParse[i] = this.weekdays(mom, '').toLocaleLowerCase();\n }\n }\n\n if (strict) {\n if (format === 'dddd') {\n ii = indexOf.call(this._weekdaysParse, llc);\n return ii !== -1 ? ii : null;\n } else if (format === 'ddd') {\n ii = indexOf.call(this._shortWeekdaysParse, llc);\n return ii !== -1 ? ii : null;\n } else {\n ii = indexOf.call(this._minWeekdaysParse, llc);\n return ii !== -1 ? ii : null;\n }\n } else {\n if (format === 'dddd') {\n ii = indexOf.call(this._weekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._shortWeekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._minWeekdaysParse, llc);\n return ii !== -1 ? ii : null;\n } else if (format === 'ddd') {\n ii = indexOf.call(this._shortWeekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._weekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._minWeekdaysParse, llc);\n return ii !== -1 ? ii : null;\n } else {\n ii = indexOf.call(this._minWeekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._weekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._shortWeekdaysParse, llc);\n return ii !== -1 ? ii : null;\n }\n }\n }\n\n function localeWeekdaysParse (weekdayName, format, strict) {\n var i, mom, regex;\n\n if (this._weekdaysParseExact) {\n return handleStrictParse$1.call(this, weekdayName, format, strict);\n }\n\n if (!this._weekdaysParse) {\n this._weekdaysParse = [];\n this._minWeekdaysParse = [];\n this._shortWeekdaysParse = [];\n this._fullWeekdaysParse = [];\n }\n\n for (i = 0; i < 7; i++) {\n // make the regex if we don't have it already\n\n mom = createUTC([2000, 1]).day(i);\n if (strict && !this._fullWeekdaysParse[i]) {\n this._fullWeekdaysParse[i] = new RegExp('^' + this.weekdays(mom, '').replace('.', '\\\\.?') + '$', 'i');\n this._shortWeekdaysParse[i] = new RegExp('^' + this.weekdaysShort(mom, '').replace('.', '\\\\.?') + '$', 'i');\n this._minWeekdaysParse[i] = new RegExp('^' + this.weekdaysMin(mom, '').replace('.', '\\\\.?') + '$', 'i');\n }\n if (!this._weekdaysParse[i]) {\n regex = '^' + this.weekdays(mom, '') + '|^' + this.weekdaysShort(mom, '') + '|^' + this.weekdaysMin(mom, '');\n this._weekdaysParse[i] = new RegExp(regex.replace('.', ''), 'i');\n }\n // test the regex\n if (strict && format === 'dddd' && this._fullWeekdaysParse[i].test(weekdayName)) {\n return i;\n } else if (strict && format === 'ddd' && this._shortWeekdaysParse[i].test(weekdayName)) {\n return i;\n } else if (strict && format === 'dd' && this._minWeekdaysParse[i].test(weekdayName)) {\n return i;\n } else if (!strict && this._weekdaysParse[i].test(weekdayName)) {\n return i;\n }\n }\n }\n\n // MOMENTS\n\n function getSetDayOfWeek (input) {\n if (!this.isValid()) {\n return input != null ? this : NaN;\n }\n var day = this._isUTC ? this._d.getUTCDay() : this._d.getDay();\n if (input != null) {\n input = parseWeekday(input, this.localeData());\n return this.add(input - day, 'd');\n } else {\n return day;\n }\n }\n\n function getSetLocaleDayOfWeek (input) {\n if (!this.isValid()) {\n return input != null ? this : NaN;\n }\n var weekday = (this.day() + 7 - this.localeData()._week.dow) % 7;\n return input == null ? weekday : this.add(input - weekday, 'd');\n }\n\n function getSetISODayOfWeek (input) {\n if (!this.isValid()) {\n return input != null ? this : NaN;\n }\n\n // behaves the same as moment#day except\n // as a getter, returns 7 instead of 0 (1-7 range instead of 0-6)\n // as a setter, sunday should belong to the previous week.\n\n if (input != null) {\n var weekday = parseIsoWeekday(input, this.localeData());\n return this.day(this.day() % 7 ? weekday : weekday - 7);\n } else {\n return this.day() || 7;\n }\n }\n\n var defaultWeekdaysRegex = matchWord;\n function weekdaysRegex (isStrict) {\n if (this._weekdaysParseExact) {\n if (!hasOwnProp(this, '_weekdaysRegex')) {\n computeWeekdaysParse.call(this);\n }\n if (isStrict) {\n return this._weekdaysStrictRegex;\n } else {\n return this._weekdaysRegex;\n }\n } else {\n if (!hasOwnProp(this, '_weekdaysRegex')) {\n this._weekdaysRegex = defaultWeekdaysRegex;\n }\n return this._weekdaysStrictRegex && isStrict ?\n this._weekdaysStrictRegex : this._weekdaysRegex;\n }\n }\n\n var defaultWeekdaysShortRegex = matchWord;\n function weekdaysShortRegex (isStrict) {\n if (this._weekdaysParseExact) {\n if (!hasOwnProp(this, '_weekdaysRegex')) {\n computeWeekdaysParse.call(this);\n }\n if (isStrict) {\n return this._weekdaysShortStrictRegex;\n } else {\n return this._weekdaysShortRegex;\n }\n } else {\n if (!hasOwnProp(this, '_weekdaysShortRegex')) {\n this._weekdaysShortRegex = defaultWeekdaysShortRegex;\n }\n return this._weekdaysShortStrictRegex && isStrict ?\n this._weekdaysShortStrictRegex : this._weekdaysShortRegex;\n }\n }\n\n var defaultWeekdaysMinRegex = matchWord;\n function weekdaysMinRegex (isStrict) {\n if (this._weekdaysParseExact) {\n if (!hasOwnProp(this, '_weekdaysRegex')) {\n computeWeekdaysParse.call(this);\n }\n if (isStrict) {\n return this._weekdaysMinStrictRegex;\n } else {\n return this._weekdaysMinRegex;\n }\n } else {\n if (!hasOwnProp(this, '_weekdaysMinRegex')) {\n this._weekdaysMinRegex = defaultWeekdaysMinRegex;\n }\n return this._weekdaysMinStrictRegex && isStrict ?\n this._weekdaysMinStrictRegex : this._weekdaysMinRegex;\n }\n }\n\n\n function computeWeekdaysParse () {\n function cmpLenRev(a, b) {\n return b.length - a.length;\n }\n\n var minPieces = [], shortPieces = [], longPieces = [], mixedPieces = [],\n i, mom, minp, shortp, longp;\n for (i = 0; i < 7; i++) {\n // make the regex if we don't have it already\n mom = createUTC([2000, 1]).day(i);\n minp = this.weekdaysMin(mom, '');\n shortp = this.weekdaysShort(mom, '');\n longp = this.weekdays(mom, '');\n minPieces.push(minp);\n shortPieces.push(shortp);\n longPieces.push(longp);\n mixedPieces.push(minp);\n mixedPieces.push(shortp);\n mixedPieces.push(longp);\n }\n // Sorting makes sure if one weekday (or abbr) is a prefix of another it\n // will match the longer piece.\n minPieces.sort(cmpLenRev);\n shortPieces.sort(cmpLenRev);\n longPieces.sort(cmpLenRev);\n mixedPieces.sort(cmpLenRev);\n for (i = 0; i < 7; i++) {\n shortPieces[i] = regexEscape(shortPieces[i]);\n longPieces[i] = regexEscape(longPieces[i]);\n mixedPieces[i] = regexEscape(mixedPieces[i]);\n }\n\n this._weekdaysRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\n this._weekdaysShortRegex = this._weekdaysRegex;\n this._weekdaysMinRegex = this._weekdaysRegex;\n\n this._weekdaysStrictRegex = new RegExp('^(' + longPieces.join('|') + ')', 'i');\n this._weekdaysShortStrictRegex = new RegExp('^(' + shortPieces.join('|') + ')', 'i');\n this._weekdaysMinStrictRegex = new RegExp('^(' + minPieces.join('|') + ')', 'i');\n }\n\n // FORMATTING\n\n function hFormat() {\n return this.hours() % 12 || 12;\n }\n\n function kFormat() {\n return this.hours() || 24;\n }\n\n addFormatToken('H', ['HH', 2], 0, 'hour');\n addFormatToken('h', ['hh', 2], 0, hFormat);\n addFormatToken('k', ['kk', 2], 0, kFormat);\n\n addFormatToken('hmm', 0, 0, function () {\n return '' + hFormat.apply(this) + zeroFill(this.minutes(), 2);\n });\n\n addFormatToken('hmmss', 0, 0, function () {\n return '' + hFormat.apply(this) + zeroFill(this.minutes(), 2) +\n zeroFill(this.seconds(), 2);\n });\n\n addFormatToken('Hmm', 0, 0, function () {\n return '' + this.hours() + zeroFill(this.minutes(), 2);\n });\n\n addFormatToken('Hmmss', 0, 0, function () {\n return '' + this.hours() + zeroFill(this.minutes(), 2) +\n zeroFill(this.seconds(), 2);\n });\n\n function meridiem (token, lowercase) {\n addFormatToken(token, 0, 0, function () {\n return this.localeData().meridiem(this.hours(), this.minutes(), lowercase);\n });\n }\n\n meridiem('a', true);\n meridiem('A', false);\n\n // ALIASES\n\n addUnitAlias('hour', 'h');\n\n // PRIORITY\n addUnitPriority('hour', 13);\n\n // PARSING\n\n function matchMeridiem (isStrict, locale) {\n return locale._meridiemParse;\n }\n\n addRegexToken('a', matchMeridiem);\n addRegexToken('A', matchMeridiem);\n addRegexToken('H', match1to2);\n addRegexToken('h', match1to2);\n addRegexToken('k', match1to2);\n addRegexToken('HH', match1to2, match2);\n addRegexToken('hh', match1to2, match2);\n addRegexToken('kk', match1to2, match2);\n\n addRegexToken('hmm', match3to4);\n addRegexToken('hmmss', match5to6);\n addRegexToken('Hmm', match3to4);\n addRegexToken('Hmmss', match5to6);\n\n addParseToken(['H', 'HH'], HOUR);\n addParseToken(['k', 'kk'], function (input, array, config) {\n var kInput = toInt(input);\n array[HOUR] = kInput === 24 ? 0 : kInput;\n });\n addParseToken(['a', 'A'], function (input, array, config) {\n config._isPm = config._locale.isPM(input);\n config._meridiem = input;\n });\n addParseToken(['h', 'hh'], function (input, array, config) {\n array[HOUR] = toInt(input);\n getParsingFlags(config).bigHour = true;\n });\n addParseToken('hmm', function (input, array, config) {\n var pos = input.length - 2;\n array[HOUR] = toInt(input.substr(0, pos));\n array[MINUTE] = toInt(input.substr(pos));\n getParsingFlags(config).bigHour = true;\n });\n addParseToken('hmmss', function (input, array, config) {\n var pos1 = input.length - 4;\n var pos2 = input.length - 2;\n array[HOUR] = toInt(input.substr(0, pos1));\n array[MINUTE] = toInt(input.substr(pos1, 2));\n array[SECOND] = toInt(input.substr(pos2));\n getParsingFlags(config).bigHour = true;\n });\n addParseToken('Hmm', function (input, array, config) {\n var pos = input.length - 2;\n array[HOUR] = toInt(input.substr(0, pos));\n array[MINUTE] = toInt(input.substr(pos));\n });\n addParseToken('Hmmss', function (input, array, config) {\n var pos1 = input.length - 4;\n var pos2 = input.length - 2;\n array[HOUR] = toInt(input.substr(0, pos1));\n array[MINUTE] = toInt(input.substr(pos1, 2));\n array[SECOND] = toInt(input.substr(pos2));\n });\n\n // LOCALES\n\n function localeIsPM (input) {\n // IE8 Quirks Mode & IE7 Standards Mode do not allow accessing strings like arrays\n // Using charAt should be more compatible.\n return ((input + '').toLowerCase().charAt(0) === 'p');\n }\n\n var defaultLocaleMeridiemParse = /[ap]\\.?m?\\.?/i;\n function localeMeridiem (hours, minutes, isLower) {\n if (hours > 11) {\n return isLower ? 'pm' : 'PM';\n } else {\n return isLower ? 'am' : 'AM';\n }\n }\n\n\n // MOMENTS\n\n // Setting the hour should keep the time, because the user explicitly\n // specified which hour they want. So trying to maintain the same hour (in\n // a new timezone) makes sense. Adding/subtracting hours does not follow\n // this rule.\n var getSetHour = makeGetSet('Hours', true);\n\n var baseConfig = {\n calendar: defaultCalendar,\n longDateFormat: defaultLongDateFormat,\n invalidDate: defaultInvalidDate,\n ordinal: defaultOrdinal,\n dayOfMonthOrdinalParse: defaultDayOfMonthOrdinalParse,\n relativeTime: defaultRelativeTime,\n\n months: defaultLocaleMonths,\n monthsShort: defaultLocaleMonthsShort,\n\n week: defaultLocaleWeek,\n\n weekdays: defaultLocaleWeekdays,\n weekdaysMin: defaultLocaleWeekdaysMin,\n weekdaysShort: defaultLocaleWeekdaysShort,\n\n meridiemParse: defaultLocaleMeridiemParse\n };\n\n // internal storage for locale config files\n var locales = {};\n var localeFamilies = {};\n var globalLocale;\n\n function normalizeLocale(key) {\n return key ? key.toLowerCase().replace('_', '-') : key;\n }\n\n // pick the locale from the array\n // try ['en-au', 'en-gb'] as 'en-au', 'en-gb', 'en', as in move through the list trying each\n // substring from most specific to least, but move to the next array item if it's a more specific variant than the current root\n function chooseLocale(names) {\n var i = 0, j, next, locale, split;\n\n while (i < names.length) {\n split = normalizeLocale(names[i]).split('-');\n j = split.length;\n next = normalizeLocale(names[i + 1]);\n next = next ? next.split('-') : null;\n while (j > 0) {\n locale = loadLocale(split.slice(0, j).join('-'));\n if (locale) {\n return locale;\n }\n if (next && next.length >= j && compareArrays(split, next, true) >= j - 1) {\n //the next array item is better than a shallower substring of this one\n break;\n }\n j--;\n }\n i++;\n }\n return globalLocale;\n }\n\n function loadLocale(name) {\n var oldLocale = null;\n // TODO: Find a better way to register and load all the locales in Node\n if (!locales[name] && (typeof module !== 'undefined') &&\n module && module.exports) {\n try {\n oldLocale = globalLocale._abbr;\n var aliasedRequire = require;\n aliasedRequire('./locale/' + name);\n getSetGlobalLocale(oldLocale);\n } catch (e) {}\n }\n return locales[name];\n }\n\n // This function will load locale and then set the global locale. If\n // no arguments are passed in, it will simply return the current global\n // locale key.\n function getSetGlobalLocale (key, values) {\n var data;\n if (key) {\n if (isUndefined(values)) {\n data = getLocale(key);\n }\n else {\n data = defineLocale(key, values);\n }\n\n if (data) {\n // moment.duration._locale = moment._locale = data;\n globalLocale = data;\n }\n else {\n if ((typeof console !== 'undefined') && console.warn) {\n //warn user if arguments are passed but the locale could not be set\n console.warn('Locale ' + key + ' not found. Did you forget to load it?');\n }\n }\n }\n\n return globalLocale._abbr;\n }\n\n function defineLocale (name, config) {\n if (config !== null) {\n var locale, parentConfig = baseConfig;\n config.abbr = name;\n if (locales[name] != null) {\n deprecateSimple('defineLocaleOverride',\n 'use moment.updateLocale(localeName, config) to change ' +\n 'an existing locale. moment.defineLocale(localeName, ' +\n 'config) should only be used for creating a new locale ' +\n 'See http://momentjs.com/guides/#/warnings/define-locale/ for more info.');\n parentConfig = locales[name]._config;\n } else if (config.parentLocale != null) {\n if (locales[config.parentLocale] != null) {\n parentConfig = locales[config.parentLocale]._config;\n } else {\n locale = loadLocale(config.parentLocale);\n if (locale != null) {\n parentConfig = locale._config;\n } else {\n if (!localeFamilies[config.parentLocale]) {\n localeFamilies[config.parentLocale] = [];\n }\n localeFamilies[config.parentLocale].push({\n name: name,\n config: config\n });\n return null;\n }\n }\n }\n locales[name] = new Locale(mergeConfigs(parentConfig, config));\n\n if (localeFamilies[name]) {\n localeFamilies[name].forEach(function (x) {\n defineLocale(x.name, x.config);\n });\n }\n\n // backwards compat for now: also set the locale\n // make sure we set the locale AFTER all child locales have been\n // created, so we won't end up with the child locale set.\n getSetGlobalLocale(name);\n\n\n return locales[name];\n } else {\n // useful for testing\n delete locales[name];\n return null;\n }\n }\n\n function updateLocale(name, config) {\n if (config != null) {\n var locale, tmpLocale, parentConfig = baseConfig;\n // MERGE\n tmpLocale = loadLocale(name);\n if (tmpLocale != null) {\n parentConfig = tmpLocale._config;\n }\n config = mergeConfigs(parentConfig, config);\n locale = new Locale(config);\n locale.parentLocale = locales[name];\n locales[name] = locale;\n\n // backwards compat for now: also set the locale\n getSetGlobalLocale(name);\n } else {\n // pass null for config to unupdate, useful for tests\n if (locales[name] != null) {\n if (locales[name].parentLocale != null) {\n locales[name] = locales[name].parentLocale;\n } else if (locales[name] != null) {\n delete locales[name];\n }\n }\n }\n return locales[name];\n }\n\n // returns locale data\n function getLocale (key) {\n var locale;\n\n if (key && key._locale && key._locale._abbr) {\n key = key._locale._abbr;\n }\n\n if (!key) {\n return globalLocale;\n }\n\n if (!isArray(key)) {\n //short-circuit everything else\n locale = loadLocale(key);\n if (locale) {\n return locale;\n }\n key = [key];\n }\n\n return chooseLocale(key);\n }\n\n function listLocales() {\n return keys(locales);\n }\n\n function checkOverflow (m) {\n var overflow;\n var a = m._a;\n\n if (a && getParsingFlags(m).overflow === -2) {\n overflow =\n a[MONTH] < 0 || a[MONTH] > 11 ? MONTH :\n a[DATE] < 1 || a[DATE] > daysInMonth(a[YEAR], a[MONTH]) ? DATE :\n a[HOUR] < 0 || a[HOUR] > 24 || (a[HOUR] === 24 && (a[MINUTE] !== 0 || a[SECOND] !== 0 || a[MILLISECOND] !== 0)) ? HOUR :\n a[MINUTE] < 0 || a[MINUTE] > 59 ? MINUTE :\n a[SECOND] < 0 || a[SECOND] > 59 ? SECOND :\n a[MILLISECOND] < 0 || a[MILLISECOND] > 999 ? MILLISECOND :\n -1;\n\n if (getParsingFlags(m)._overflowDayOfYear && (overflow < YEAR || overflow > DATE)) {\n overflow = DATE;\n }\n if (getParsingFlags(m)._overflowWeeks && overflow === -1) {\n overflow = WEEK;\n }\n if (getParsingFlags(m)._overflowWeekday && overflow === -1) {\n overflow = WEEKDAY;\n }\n\n getParsingFlags(m).overflow = overflow;\n }\n\n return m;\n }\n\n // Pick the first defined of two or three arguments.\n function defaults(a, b, c) {\n if (a != null) {\n return a;\n }\n if (b != null) {\n return b;\n }\n return c;\n }\n\n function currentDateArray(config) {\n // hooks is actually the exported moment object\n var nowValue = new Date(hooks.now());\n if (config._useUTC) {\n return [nowValue.getUTCFullYear(), nowValue.getUTCMonth(), nowValue.getUTCDate()];\n }\n return [nowValue.getFullYear(), nowValue.getMonth(), nowValue.getDate()];\n }\n\n // convert an array to a date.\n // the array should mirror the parameters below\n // note: all values past the year are optional and will default to the lowest possible value.\n // [year, month, day , hour, minute, second, millisecond]\n function configFromArray (config) {\n var i, date, input = [], currentDate, expectedWeekday, yearToUse;\n\n if (config._d) {\n return;\n }\n\n currentDate = currentDateArray(config);\n\n //compute day of the year from weeks and weekdays\n if (config._w && config._a[DATE] == null && config._a[MONTH] == null) {\n dayOfYearFromWeekInfo(config);\n }\n\n //if the day of the year is set, figure out what it is\n if (config._dayOfYear != null) {\n yearToUse = defaults(config._a[YEAR], currentDate[YEAR]);\n\n if (config._dayOfYear > daysInYear(yearToUse) || config._dayOfYear === 0) {\n getParsingFlags(config)._overflowDayOfYear = true;\n }\n\n date = createUTCDate(yearToUse, 0, config._dayOfYear);\n config._a[MONTH] = date.getUTCMonth();\n config._a[DATE] = date.getUTCDate();\n }\n\n // Default to current date.\n // * if no year, month, day of month are given, default to today\n // * if day of month is given, default month and year\n // * if month is given, default only year\n // * if year is given, don't default anything\n for (i = 0; i < 3 && config._a[i] == null; ++i) {\n config._a[i] = input[i] = currentDate[i];\n }\n\n // Zero out whatever was not defaulted, including time\n for (; i < 7; i++) {\n config._a[i] = input[i] = (config._a[i] == null) ? (i === 2 ? 1 : 0) : config._a[i];\n }\n\n // Check for 24:00:00.000\n if (config._a[HOUR] === 24 &&\n config._a[MINUTE] === 0 &&\n config._a[SECOND] === 0 &&\n config._a[MILLISECOND] === 0) {\n config._nextDay = true;\n config._a[HOUR] = 0;\n }\n\n config._d = (config._useUTC ? createUTCDate : createDate).apply(null, input);\n expectedWeekday = config._useUTC ? config._d.getUTCDay() : config._d.getDay();\n\n // Apply timezone offset from input. The actual utcOffset can be changed\n // with parseZone.\n if (config._tzm != null) {\n config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);\n }\n\n if (config._nextDay) {\n config._a[HOUR] = 24;\n }\n\n // check for mismatching day of week\n if (config._w && typeof config._w.d !== 'undefined' && config._w.d !== expectedWeekday) {\n getParsingFlags(config).weekdayMismatch = true;\n }\n }\n\n function dayOfYearFromWeekInfo(config) {\n var w, weekYear, week, weekday, dow, doy, temp, weekdayOverflow;\n\n w = config._w;\n if (w.GG != null || w.W != null || w.E != null) {\n dow = 1;\n doy = 4;\n\n // TODO: We need to take the current isoWeekYear, but that depends on\n // how we interpret now (local, utc, fixed offset). So create\n // a now version of current config (take local/utc/offset flags, and\n // create now).\n weekYear = defaults(w.GG, config._a[YEAR], weekOfYear(createLocal(), 1, 4).year);\n week = defaults(w.W, 1);\n weekday = defaults(w.E, 1);\n if (weekday < 1 || weekday > 7) {\n weekdayOverflow = true;\n }\n } else {\n dow = config._locale._week.dow;\n doy = config._locale._week.doy;\n\n var curWeek = weekOfYear(createLocal(), dow, doy);\n\n weekYear = defaults(w.gg, config._a[YEAR], curWeek.year);\n\n // Default to current week.\n week = defaults(w.w, curWeek.week);\n\n if (w.d != null) {\n // weekday -- low day numbers are considered next week\n weekday = w.d;\n if (weekday < 0 || weekday > 6) {\n weekdayOverflow = true;\n }\n } else if (w.e != null) {\n // local weekday -- counting starts from begining of week\n weekday = w.e + dow;\n if (w.e < 0 || w.e > 6) {\n weekdayOverflow = true;\n }\n } else {\n // default to begining of week\n weekday = dow;\n }\n }\n if (week < 1 || week > weeksInYear(weekYear, dow, doy)) {\n getParsingFlags(config)._overflowWeeks = true;\n } else if (weekdayOverflow != null) {\n getParsingFlags(config)._overflowWeekday = true;\n } else {\n temp = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy);\n config._a[YEAR] = temp.year;\n config._dayOfYear = temp.dayOfYear;\n }\n }\n\n // iso 8601 regex\n // 0000-00-00 0000-W00 or 0000-W00-0 + T + 00 or 00:00 or 00:00:00 or 00:00:00.000 + +00:00 or +0000 or +00)\n var extendedIsoRegex = /^\\s*((?:[+-]\\d{6}|\\d{4})-(?:\\d\\d-\\d\\d|W\\d\\d-\\d|W\\d\\d|\\d\\d\\d|\\d\\d))(?:(T| )(\\d\\d(?::\\d\\d(?::\\d\\d(?:[.,]\\d+)?)?)?)([\\+\\-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?$/;\n var basicIsoRegex = /^\\s*((?:[+-]\\d{6}|\\d{4})(?:\\d\\d\\d\\d|W\\d\\d\\d|W\\d\\d|\\d\\d\\d|\\d\\d))(?:(T| )(\\d\\d(?:\\d\\d(?:\\d\\d(?:[.,]\\d+)?)?)?)([\\+\\-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?$/;\n\n var tzRegex = /Z|[+-]\\d\\d(?::?\\d\\d)?/;\n\n var isoDates = [\n ['YYYYYY-MM-DD', /[+-]\\d{6}-\\d\\d-\\d\\d/],\n ['YYYY-MM-DD', /\\d{4}-\\d\\d-\\d\\d/],\n ['GGGG-[W]WW-E', /\\d{4}-W\\d\\d-\\d/],\n ['GGGG-[W]WW', /\\d{4}-W\\d\\d/, false],\n ['YYYY-DDD', /\\d{4}-\\d{3}/],\n ['YYYY-MM', /\\d{4}-\\d\\d/, false],\n ['YYYYYYMMDD', /[+-]\\d{10}/],\n ['YYYYMMDD', /\\d{8}/],\n // YYYYMM is NOT allowed by the standard\n ['GGGG[W]WWE', /\\d{4}W\\d{3}/],\n ['GGGG[W]WW', /\\d{4}W\\d{2}/, false],\n ['YYYYDDD', /\\d{7}/]\n ];\n\n // iso time formats and regexes\n var isoTimes = [\n ['HH:mm:ss.SSSS', /\\d\\d:\\d\\d:\\d\\d\\.\\d+/],\n ['HH:mm:ss,SSSS', /\\d\\d:\\d\\d:\\d\\d,\\d+/],\n ['HH:mm:ss', /\\d\\d:\\d\\d:\\d\\d/],\n ['HH:mm', /\\d\\d:\\d\\d/],\n ['HHmmss.SSSS', /\\d\\d\\d\\d\\d\\d\\.\\d+/],\n ['HHmmss,SSSS', /\\d\\d\\d\\d\\d\\d,\\d+/],\n ['HHmmss', /\\d\\d\\d\\d\\d\\d/],\n ['HHmm', /\\d\\d\\d\\d/],\n ['HH', /\\d\\d/]\n ];\n\n var aspNetJsonRegex = /^\\/?Date\\((\\-?\\d+)/i;\n\n // date from iso format\n function configFromISO(config) {\n var i, l,\n string = config._i,\n match = extendedIsoRegex.exec(string) || basicIsoRegex.exec(string),\n allowTime, dateFormat, timeFormat, tzFormat;\n\n if (match) {\n getParsingFlags(config).iso = true;\n\n for (i = 0, l = isoDates.length; i < l; i++) {\n if (isoDates[i][1].exec(match[1])) {\n dateFormat = isoDates[i][0];\n allowTime = isoDates[i][2] !== false;\n break;\n }\n }\n if (dateFormat == null) {\n config._isValid = false;\n return;\n }\n if (match[3]) {\n for (i = 0, l = isoTimes.length; i < l; i++) {\n if (isoTimes[i][1].exec(match[3])) {\n // match[2] should be 'T' or space\n timeFormat = (match[2] || ' ') + isoTimes[i][0];\n break;\n }\n }\n if (timeFormat == null) {\n config._isValid = false;\n return;\n }\n }\n if (!allowTime && timeFormat != null) {\n config._isValid = false;\n return;\n }\n if (match[4]) {\n if (tzRegex.exec(match[4])) {\n tzFormat = 'Z';\n } else {\n config._isValid = false;\n return;\n }\n }\n config._f = dateFormat + (timeFormat || '') + (tzFormat || '');\n configFromStringAndFormat(config);\n } else {\n config._isValid = false;\n }\n }\n\n // RFC 2822 regex: For details see https://tools.ietf.org/html/rfc2822#section-3.3\n var rfc2822 = /^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\\s)?(\\d{1,2})\\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\\s(\\d{2,4})\\s(\\d\\d):(\\d\\d)(?::(\\d\\d))?\\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|([+-]\\d{4}))$/;\n\n function extractFromRFC2822Strings(yearStr, monthStr, dayStr, hourStr, minuteStr, secondStr) {\n var result = [\n untruncateYear(yearStr),\n defaultLocaleMonthsShort.indexOf(monthStr),\n parseInt(dayStr, 10),\n parseInt(hourStr, 10),\n parseInt(minuteStr, 10)\n ];\n\n if (secondStr) {\n result.push(parseInt(secondStr, 10));\n }\n\n return result;\n }\n\n function untruncateYear(yearStr) {\n var year = parseInt(yearStr, 10);\n if (year <= 49) {\n return 2000 + year;\n } else if (year <= 999) {\n return 1900 + year;\n }\n return year;\n }\n\n function preprocessRFC2822(s) {\n // Remove comments and folding whitespace and replace multiple-spaces with a single space\n return s.replace(/\\([^)]*\\)|[\\n\\t]/g, ' ').replace(/(\\s\\s+)/g, ' ').replace(/^\\s\\s*/, '').replace(/\\s\\s*$/, '');\n }\n\n function checkWeekday(weekdayStr, parsedInput, config) {\n if (weekdayStr) {\n // TODO: Replace the vanilla JS Date object with an indepentent day-of-week check.\n var weekdayProvided = defaultLocaleWeekdaysShort.indexOf(weekdayStr),\n weekdayActual = new Date(parsedInput[0], parsedInput[1], parsedInput[2]).getDay();\n if (weekdayProvided !== weekdayActual) {\n getParsingFlags(config).weekdayMismatch = true;\n config._isValid = false;\n return false;\n }\n }\n return true;\n }\n\n var obsOffsets = {\n UT: 0,\n GMT: 0,\n EDT: -4 * 60,\n EST: -5 * 60,\n CDT: -5 * 60,\n CST: -6 * 60,\n MDT: -6 * 60,\n MST: -7 * 60,\n PDT: -7 * 60,\n PST: -8 * 60\n };\n\n function calculateOffset(obsOffset, militaryOffset, numOffset) {\n if (obsOffset) {\n return obsOffsets[obsOffset];\n } else if (militaryOffset) {\n // the only allowed military tz is Z\n return 0;\n } else {\n var hm = parseInt(numOffset, 10);\n var m = hm % 100, h = (hm - m) / 100;\n return h * 60 + m;\n }\n }\n\n // date and time from ref 2822 format\n function configFromRFC2822(config) {\n var match = rfc2822.exec(preprocessRFC2822(config._i));\n if (match) {\n var parsedArray = extractFromRFC2822Strings(match[4], match[3], match[2], match[5], match[6], match[7]);\n if (!checkWeekday(match[1], parsedArray, config)) {\n return;\n }\n\n config._a = parsedArray;\n config._tzm = calculateOffset(match[8], match[9], match[10]);\n\n config._d = createUTCDate.apply(null, config._a);\n config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);\n\n getParsingFlags(config).rfc2822 = true;\n } else {\n config._isValid = false;\n }\n }\n\n // date from iso format or fallback\n function configFromString(config) {\n var matched = aspNetJsonRegex.exec(config._i);\n\n if (matched !== null) {\n config._d = new Date(+matched[1]);\n return;\n }\n\n configFromISO(config);\n if (config._isValid === false) {\n delete config._isValid;\n } else {\n return;\n }\n\n configFromRFC2822(config);\n if (config._isValid === false) {\n delete config._isValid;\n } else {\n return;\n }\n\n // Final attempt, use Input Fallback\n hooks.createFromInputFallback(config);\n }\n\n hooks.createFromInputFallback = deprecate(\n 'value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), ' +\n 'which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are ' +\n 'discouraged and will be removed in an upcoming major release. Please refer to ' +\n 'http://momentjs.com/guides/#/warnings/js-date/ for more info.',\n function (config) {\n config._d = new Date(config._i + (config._useUTC ? ' UTC' : ''));\n }\n );\n\n // constant that refers to the ISO standard\n hooks.ISO_8601 = function () {};\n\n // constant that refers to the RFC 2822 form\n hooks.RFC_2822 = function () {};\n\n // date from string and format string\n function configFromStringAndFormat(config) {\n // TODO: Move this to another part of the creation flow to prevent circular deps\n if (config._f === hooks.ISO_8601) {\n configFromISO(config);\n return;\n }\n if (config._f === hooks.RFC_2822) {\n configFromRFC2822(config);\n return;\n }\n config._a = [];\n getParsingFlags(config).empty = true;\n\n // This array is used to make a Date, either with `new Date` or `Date.UTC`\n var string = '' + config._i,\n i, parsedInput, tokens, token, skipped,\n stringLength = string.length,\n totalParsedInputLength = 0;\n\n tokens = expandFormat(config._f, config._locale).match(formattingTokens) || [];\n\n for (i = 0; i < tokens.length; i++) {\n token = tokens[i];\n parsedInput = (string.match(getParseRegexForToken(token, config)) || [])[0];\n // console.log('token', token, 'parsedInput', parsedInput,\n // 'regex', getParseRegexForToken(token, config));\n if (parsedInput) {\n skipped = string.substr(0, string.indexOf(parsedInput));\n if (skipped.length > 0) {\n getParsingFlags(config).unusedInput.push(skipped);\n }\n string = string.slice(string.indexOf(parsedInput) + parsedInput.length);\n totalParsedInputLength += parsedInput.length;\n }\n // don't parse if it's not a known token\n if (formatTokenFunctions[token]) {\n if (parsedInput) {\n getParsingFlags(config).empty = false;\n }\n else {\n getParsingFlags(config).unusedTokens.push(token);\n }\n addTimeToArrayFromToken(token, parsedInput, config);\n }\n else if (config._strict && !parsedInput) {\n getParsingFlags(config).unusedTokens.push(token);\n }\n }\n\n // add remaining unparsed input length to the string\n getParsingFlags(config).charsLeftOver = stringLength - totalParsedInputLength;\n if (string.length > 0) {\n getParsingFlags(config).unusedInput.push(string);\n }\n\n // clear _12h flag if hour is <= 12\n if (config._a[HOUR] <= 12 &&\n getParsingFlags(config).bigHour === true &&\n config._a[HOUR] > 0) {\n getParsingFlags(config).bigHour = undefined;\n }\n\n getParsingFlags(config).parsedDateParts = config._a.slice(0);\n getParsingFlags(config).meridiem = config._meridiem;\n // handle meridiem\n config._a[HOUR] = meridiemFixWrap(config._locale, config._a[HOUR], config._meridiem);\n\n configFromArray(config);\n checkOverflow(config);\n }\n\n\n function meridiemFixWrap (locale, hour, meridiem) {\n var isPm;\n\n if (meridiem == null) {\n // nothing to do\n return hour;\n }\n if (locale.meridiemHour != null) {\n return locale.meridiemHour(hour, meridiem);\n } else if (locale.isPM != null) {\n // Fallback\n isPm = locale.isPM(meridiem);\n if (isPm && hour < 12) {\n hour += 12;\n }\n if (!isPm && hour === 12) {\n hour = 0;\n }\n return hour;\n } else {\n // this is not supposed to happen\n return hour;\n }\n }\n\n // date from string and array of format strings\n function configFromStringAndArray(config) {\n var tempConfig,\n bestMoment,\n\n scoreToBeat,\n i,\n currentScore;\n\n if (config._f.length === 0) {\n getParsingFlags(config).invalidFormat = true;\n config._d = new Date(NaN);\n return;\n }\n\n for (i = 0; i < config._f.length; i++) {\n currentScore = 0;\n tempConfig = copyConfig({}, config);\n if (config._useUTC != null) {\n tempConfig._useUTC = config._useUTC;\n }\n tempConfig._f = config._f[i];\n configFromStringAndFormat(tempConfig);\n\n if (!isValid(tempConfig)) {\n continue;\n }\n\n // if there is any input that was not parsed add a penalty for that format\n currentScore += getParsingFlags(tempConfig).charsLeftOver;\n\n //or tokens\n currentScore += getParsingFlags(tempConfig).unusedTokens.length * 10;\n\n getParsingFlags(tempConfig).score = currentScore;\n\n if (scoreToBeat == null || currentScore < scoreToBeat) {\n scoreToBeat = currentScore;\n bestMoment = tempConfig;\n }\n }\n\n extend(config, bestMoment || tempConfig);\n }\n\n function configFromObject(config) {\n if (config._d) {\n return;\n }\n\n var i = normalizeObjectUnits(config._i);\n config._a = map([i.year, i.month, i.day || i.date, i.hour, i.minute, i.second, i.millisecond], function (obj) {\n return obj && parseInt(obj, 10);\n });\n\n configFromArray(config);\n }\n\n function createFromConfig (config) {\n var res = new Moment(checkOverflow(prepareConfig(config)));\n if (res._nextDay) {\n // Adding is smart enough around DST\n res.add(1, 'd');\n res._nextDay = undefined;\n }\n\n return res;\n }\n\n function prepareConfig (config) {\n var input = config._i,\n format = config._f;\n\n config._locale = config._locale || getLocale(config._l);\n\n if (input === null || (format === undefined && input === '')) {\n return createInvalid({nullInput: true});\n }\n\n if (typeof input === 'string') {\n config._i = input = config._locale.preparse(input);\n }\n\n if (isMoment(input)) {\n return new Moment(checkOverflow(input));\n } else if (isDate(input)) {\n config._d = input;\n } else if (isArray(format)) {\n configFromStringAndArray(config);\n } else if (format) {\n configFromStringAndFormat(config);\n } else {\n configFromInput(config);\n }\n\n if (!isValid(config)) {\n config._d = null;\n }\n\n return config;\n }\n\n function configFromInput(config) {\n var input = config._i;\n if (isUndefined(input)) {\n config._d = new Date(hooks.now());\n } else if (isDate(input)) {\n config._d = new Date(input.valueOf());\n } else if (typeof input === 'string') {\n configFromString(config);\n } else if (isArray(input)) {\n config._a = map(input.slice(0), function (obj) {\n return parseInt(obj, 10);\n });\n configFromArray(config);\n } else if (isObject(input)) {\n configFromObject(config);\n } else if (isNumber(input)) {\n // from milliseconds\n config._d = new Date(input);\n } else {\n hooks.createFromInputFallback(config);\n }\n }\n\n function createLocalOrUTC (input, format, locale, strict, isUTC) {\n var c = {};\n\n if (locale === true || locale === false) {\n strict = locale;\n locale = undefined;\n }\n\n if ((isObject(input) && isObjectEmpty(input)) ||\n (isArray(input) && input.length === 0)) {\n input = undefined;\n }\n // object construction must be done this way.\n // https://github.com/moment/moment/issues/1423\n c._isAMomentObject = true;\n c._useUTC = c._isUTC = isUTC;\n c._l = locale;\n c._i = input;\n c._f = format;\n c._strict = strict;\n\n return createFromConfig(c);\n }\n\n function createLocal (input, format, locale, strict) {\n return createLocalOrUTC(input, format, locale, strict, false);\n }\n\n var prototypeMin = deprecate(\n 'moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/',\n function () {\n var other = createLocal.apply(null, arguments);\n if (this.isValid() && other.isValid()) {\n return other < this ? this : other;\n } else {\n return createInvalid();\n }\n }\n );\n\n var prototypeMax = deprecate(\n 'moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/',\n function () {\n var other = createLocal.apply(null, arguments);\n if (this.isValid() && other.isValid()) {\n return other > this ? this : other;\n } else {\n return createInvalid();\n }\n }\n );\n\n // Pick a moment m from moments so that m[fn](other) is true for all\n // other. This relies on the function fn to be transitive.\n //\n // moments should either be an array of moment objects or an array, whose\n // first element is an array of moment objects.\n function pickBy(fn, moments) {\n var res, i;\n if (moments.length === 1 && isArray(moments[0])) {\n moments = moments[0];\n }\n if (!moments.length) {\n return createLocal();\n }\n res = moments[0];\n for (i = 1; i < moments.length; ++i) {\n if (!moments[i].isValid() || moments[i][fn](res)) {\n res = moments[i];\n }\n }\n return res;\n }\n\n // TODO: Use [].sort instead?\n function min () {\n var args = [].slice.call(arguments, 0);\n\n return pickBy('isBefore', args);\n }\n\n function max () {\n var args = [].slice.call(arguments, 0);\n\n return pickBy('isAfter', args);\n }\n\n var now = function () {\n return Date.now ? Date.now() : +(new Date());\n };\n\n var ordering = ['year', 'quarter', 'month', 'week', 'day', 'hour', 'minute', 'second', 'millisecond'];\n\n function isDurationValid(m) {\n for (var key in m) {\n if (!(indexOf.call(ordering, key) !== -1 && (m[key] == null || !isNaN(m[key])))) {\n return false;\n }\n }\n\n var unitHasDecimal = false;\n for (var i = 0; i < ordering.length; ++i) {\n if (m[ordering[i]]) {\n if (unitHasDecimal) {\n return false; // only allow non-integers for smallest unit\n }\n if (parseFloat(m[ordering[i]]) !== toInt(m[ordering[i]])) {\n unitHasDecimal = true;\n }\n }\n }\n\n return true;\n }\n\n function isValid$1() {\n return this._isValid;\n }\n\n function createInvalid$1() {\n return createDuration(NaN);\n }\n\n function Duration (duration) {\n var normalizedInput = normalizeObjectUnits(duration),\n years = normalizedInput.year || 0,\n quarters = normalizedInput.quarter || 0,\n months = normalizedInput.month || 0,\n weeks = normalizedInput.week || 0,\n days = normalizedInput.day || 0,\n hours = normalizedInput.hour || 0,\n minutes = normalizedInput.minute || 0,\n seconds = normalizedInput.second || 0,\n milliseconds = normalizedInput.millisecond || 0;\n\n this._isValid = isDurationValid(normalizedInput);\n\n // representation for dateAddRemove\n this._milliseconds = +milliseconds +\n seconds * 1e3 + // 1000\n minutes * 6e4 + // 1000 * 60\n hours * 1000 * 60 * 60; //using 1000 * 60 * 60 instead of 36e5 to avoid floating point rounding errors https://github.com/moment/moment/issues/2978\n // Because of dateAddRemove treats 24 hours as different from a\n // day when working around DST, we need to store them separately\n this._days = +days +\n weeks * 7;\n // It is impossible to translate months into days without knowing\n // which months you are are talking about, so we have to store\n // it separately.\n this._months = +months +\n quarters * 3 +\n years * 12;\n\n this._data = {};\n\n this._locale = getLocale();\n\n this._bubble();\n }\n\n function isDuration (obj) {\n return obj instanceof Duration;\n }\n\n function absRound (number) {\n if (number < 0) {\n return Math.round(-1 * number) * -1;\n } else {\n return Math.round(number);\n }\n }\n\n // FORMATTING\n\n function offset (token, separator) {\n addFormatToken(token, 0, 0, function () {\n var offset = this.utcOffset();\n var sign = '+';\n if (offset < 0) {\n offset = -offset;\n sign = '-';\n }\n return sign + zeroFill(~~(offset / 60), 2) + separator + zeroFill(~~(offset) % 60, 2);\n });\n }\n\n offset('Z', ':');\n offset('ZZ', '');\n\n // PARSING\n\n addRegexToken('Z', matchShortOffset);\n addRegexToken('ZZ', matchShortOffset);\n addParseToken(['Z', 'ZZ'], function (input, array, config) {\n config._useUTC = true;\n config._tzm = offsetFromString(matchShortOffset, input);\n });\n\n // HELPERS\n\n // timezone chunker\n // '+10:00' > ['10', '00']\n // '-1530' > ['-15', '30']\n var chunkOffset = /([\\+\\-]|\\d\\d)/gi;\n\n function offsetFromString(matcher, string) {\n var matches = (string || '').match(matcher);\n\n if (matches === null) {\n return null;\n }\n\n var chunk = matches[matches.length - 1] || [];\n var parts = (chunk + '').match(chunkOffset) || ['-', 0, 0];\n var minutes = +(parts[1] * 60) + toInt(parts[2]);\n\n return minutes === 0 ?\n 0 :\n parts[0] === '+' ? minutes : -minutes;\n }\n\n // Return a moment from input, that is local/utc/zone equivalent to model.\n function cloneWithOffset(input, model) {\n var res, diff;\n if (model._isUTC) {\n res = model.clone();\n diff = (isMoment(input) || isDate(input) ? input.valueOf() : createLocal(input).valueOf()) - res.valueOf();\n // Use low-level api, because this fn is low-level api.\n res._d.setTime(res._d.valueOf() + diff);\n hooks.updateOffset(res, false);\n return res;\n } else {\n return createLocal(input).local();\n }\n }\n\n function getDateOffset (m) {\n // On Firefox.24 Date#getTimezoneOffset returns a floating point.\n // https://github.com/moment/moment/pull/1871\n return -Math.round(m._d.getTimezoneOffset() / 15) * 15;\n }\n\n // HOOKS\n\n // This function will be called whenever a moment is mutated.\n // It is intended to keep the offset in sync with the timezone.\n hooks.updateOffset = function () {};\n\n // MOMENTS\n\n // keepLocalTime = true means only change the timezone, without\n // affecting the local hour. So 5:31:26 +0300 --[utcOffset(2, true)]-->\n // 5:31:26 +0200 It is possible that 5:31:26 doesn't exist with offset\n // +0200, so we adjust the time as needed, to be valid.\n //\n // Keeping the time actually adds/subtracts (one hour)\n // from the actual represented time. That is why we call updateOffset\n // a second time. In case it wants us to change the offset again\n // _changeInProgress == true case, then we have to adjust, because\n // there is no such time in the given timezone.\n function getSetOffset (input, keepLocalTime, keepMinutes) {\n var offset = this._offset || 0,\n localAdjust;\n if (!this.isValid()) {\n return input != null ? this : NaN;\n }\n if (input != null) {\n if (typeof input === 'string') {\n input = offsetFromString(matchShortOffset, input);\n if (input === null) {\n return this;\n }\n } else if (Math.abs(input) < 16 && !keepMinutes) {\n input = input * 60;\n }\n if (!this._isUTC && keepLocalTime) {\n localAdjust = getDateOffset(this);\n }\n this._offset = input;\n this._isUTC = true;\n if (localAdjust != null) {\n this.add(localAdjust, 'm');\n }\n if (offset !== input) {\n if (!keepLocalTime || this._changeInProgress) {\n addSubtract(this, createDuration(input - offset, 'm'), 1, false);\n } else if (!this._changeInProgress) {\n this._changeInProgress = true;\n hooks.updateOffset(this, true);\n this._changeInProgress = null;\n }\n }\n return this;\n } else {\n return this._isUTC ? offset : getDateOffset(this);\n }\n }\n\n function getSetZone (input, keepLocalTime) {\n if (input != null) {\n if (typeof input !== 'string') {\n input = -input;\n }\n\n this.utcOffset(input, keepLocalTime);\n\n return this;\n } else {\n return -this.utcOffset();\n }\n }\n\n function setOffsetToUTC (keepLocalTime) {\n return this.utcOffset(0, keepLocalTime);\n }\n\n function setOffsetToLocal (keepLocalTime) {\n if (this._isUTC) {\n this.utcOffset(0, keepLocalTime);\n this._isUTC = false;\n\n if (keepLocalTime) {\n this.subtract(getDateOffset(this), 'm');\n }\n }\n return this;\n }\n\n function setOffsetToParsedOffset () {\n if (this._tzm != null) {\n this.utcOffset(this._tzm, false, true);\n } else if (typeof this._i === 'string') {\n var tZone = offsetFromString(matchOffset, this._i);\n if (tZone != null) {\n this.utcOffset(tZone);\n }\n else {\n this.utcOffset(0, true);\n }\n }\n return this;\n }\n\n function hasAlignedHourOffset (input) {\n if (!this.isValid()) {\n return false;\n }\n input = input ? createLocal(input).utcOffset() : 0;\n\n return (this.utcOffset() - input) % 60 === 0;\n }\n\n function isDaylightSavingTime () {\n return (\n this.utcOffset() > this.clone().month(0).utcOffset() ||\n this.utcOffset() > this.clone().month(5).utcOffset()\n );\n }\n\n function isDaylightSavingTimeShifted () {\n if (!isUndefined(this._isDSTShifted)) {\n return this._isDSTShifted;\n }\n\n var c = {};\n\n copyConfig(c, this);\n c = prepareConfig(c);\n\n if (c._a) {\n var other = c._isUTC ? createUTC(c._a) : createLocal(c._a);\n this._isDSTShifted = this.isValid() &&\n compareArrays(c._a, other.toArray()) > 0;\n } else {\n this._isDSTShifted = false;\n }\n\n return this._isDSTShifted;\n }\n\n function isLocal () {\n return this.isValid() ? !this._isUTC : false;\n }\n\n function isUtcOffset () {\n return this.isValid() ? this._isUTC : false;\n }\n\n function isUtc () {\n return this.isValid() ? this._isUTC && this._offset === 0 : false;\n }\n\n // ASP.NET json date format regex\n var aspNetRegex = /^(\\-|\\+)?(?:(\\d*)[. ])?(\\d+)\\:(\\d+)(?:\\:(\\d+)(\\.\\d*)?)?$/;\n\n // from http://docs.closure-library.googlecode.com/git/closure_goog_date_date.js.source.html\n // somewhat more in line with 4.4.3.2 2004 spec, but allows decimal anywhere\n // and further modified to allow for strings containing both week and day\n var isoRegex = /^(-|\\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;\n\n function createDuration (input, key) {\n var duration = input,\n // matching against regexp is expensive, do it on demand\n match = null,\n sign,\n ret,\n diffRes;\n\n if (isDuration(input)) {\n duration = {\n ms : input._milliseconds,\n d : input._days,\n M : input._months\n };\n } else if (isNumber(input)) {\n duration = {};\n if (key) {\n duration[key] = input;\n } else {\n duration.milliseconds = input;\n }\n } else if (!!(match = aspNetRegex.exec(input))) {\n sign = (match[1] === '-') ? -1 : 1;\n duration = {\n y : 0,\n d : toInt(match[DATE]) * sign,\n h : toInt(match[HOUR]) * sign,\n m : toInt(match[MINUTE]) * sign,\n s : toInt(match[SECOND]) * sign,\n ms : toInt(absRound(match[MILLISECOND] * 1000)) * sign // the millisecond decimal point is included in the match\n };\n } else if (!!(match = isoRegex.exec(input))) {\n sign = (match[1] === '-') ? -1 : (match[1] === '+') ? 1 : 1;\n duration = {\n y : parseIso(match[2], sign),\n M : parseIso(match[3], sign),\n w : parseIso(match[4], sign),\n d : parseIso(match[5], sign),\n h : parseIso(match[6], sign),\n m : parseIso(match[7], sign),\n s : parseIso(match[8], sign)\n };\n } else if (duration == null) {// checks for null or undefined\n duration = {};\n } else if (typeof duration === 'object' && ('from' in duration || 'to' in duration)) {\n diffRes = momentsDifference(createLocal(duration.from), createLocal(duration.to));\n\n duration = {};\n duration.ms = diffRes.milliseconds;\n duration.M = diffRes.months;\n }\n\n ret = new Duration(duration);\n\n if (isDuration(input) && hasOwnProp(input, '_locale')) {\n ret._locale = input._locale;\n }\n\n return ret;\n }\n\n createDuration.fn = Duration.prototype;\n createDuration.invalid = createInvalid$1;\n\n function parseIso (inp, sign) {\n // We'd normally use ~~inp for this, but unfortunately it also\n // converts floats to ints.\n // inp may be undefined, so careful calling replace on it.\n var res = inp && parseFloat(inp.replace(',', '.'));\n // apply sign while we're at it\n return (isNaN(res) ? 0 : res) * sign;\n }\n\n function positiveMomentsDifference(base, other) {\n var res = {milliseconds: 0, months: 0};\n\n res.months = other.month() - base.month() +\n (other.year() - base.year()) * 12;\n if (base.clone().add(res.months, 'M').isAfter(other)) {\n --res.months;\n }\n\n res.milliseconds = +other - +(base.clone().add(res.months, 'M'));\n\n return res;\n }\n\n function momentsDifference(base, other) {\n var res;\n if (!(base.isValid() && other.isValid())) {\n return {milliseconds: 0, months: 0};\n }\n\n other = cloneWithOffset(other, base);\n if (base.isBefore(other)) {\n res = positiveMomentsDifference(base, other);\n } else {\n res = positiveMomentsDifference(other, base);\n res.milliseconds = -res.milliseconds;\n res.months = -res.months;\n }\n\n return res;\n }\n\n // TODO: remove 'name' arg after deprecation is removed\n function createAdder(direction, name) {\n return function (val, period) {\n var dur, tmp;\n //invert the arguments, but complain about it\n if (period !== null && !isNaN(+period)) {\n deprecateSimple(name, 'moment().' + name + '(period, number) is deprecated. Please use moment().' + name + '(number, period). ' +\n 'See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info.');\n tmp = val; val = period; period = tmp;\n }\n\n val = typeof val === 'string' ? +val : val;\n dur = createDuration(val, period);\n addSubtract(this, dur, direction);\n return this;\n };\n }\n\n function addSubtract (mom, duration, isAdding, updateOffset) {\n var milliseconds = duration._milliseconds,\n days = absRound(duration._days),\n months = absRound(duration._months);\n\n if (!mom.isValid()) {\n // No op\n return;\n }\n\n updateOffset = updateOffset == null ? true : updateOffset;\n\n if (months) {\n setMonth(mom, get(mom, 'Month') + months * isAdding);\n }\n if (days) {\n set$1(mom, 'Date', get(mom, 'Date') + days * isAdding);\n }\n if (milliseconds) {\n mom._d.setTime(mom._d.valueOf() + milliseconds * isAdding);\n }\n if (updateOffset) {\n hooks.updateOffset(mom, days || months);\n }\n }\n\n var add = createAdder(1, 'add');\n var subtract = createAdder(-1, 'subtract');\n\n function getCalendarFormat(myMoment, now) {\n var diff = myMoment.diff(now, 'days', true);\n return diff < -6 ? 'sameElse' :\n diff < -1 ? 'lastWeek' :\n diff < 0 ? 'lastDay' :\n diff < 1 ? 'sameDay' :\n diff < 2 ? 'nextDay' :\n diff < 7 ? 'nextWeek' : 'sameElse';\n }\n\n function calendar$1 (time, formats) {\n // We want to compare the start of today, vs this.\n // Getting start-of-today depends on whether we're local/utc/offset or not.\n var now = time || createLocal(),\n sod = cloneWithOffset(now, this).startOf('day'),\n format = hooks.calendarFormat(this, sod) || 'sameElse';\n\n var output = formats && (isFunction(formats[format]) ? formats[format].call(this, now) : formats[format]);\n\n return this.format(output || this.localeData().calendar(format, this, createLocal(now)));\n }\n\n function clone () {\n return new Moment(this);\n }\n\n function isAfter (input, units) {\n var localInput = isMoment(input) ? input : createLocal(input);\n if (!(this.isValid() && localInput.isValid())) {\n return false;\n }\n units = normalizeUnits(!isUndefined(units) ? units : 'millisecond');\n if (units === 'millisecond') {\n return this.valueOf() > localInput.valueOf();\n } else {\n return localInput.valueOf() < this.clone().startOf(units).valueOf();\n }\n }\n\n function isBefore (input, units) {\n var localInput = isMoment(input) ? input : createLocal(input);\n if (!(this.isValid() && localInput.isValid())) {\n return false;\n }\n units = normalizeUnits(!isUndefined(units) ? units : 'millisecond');\n if (units === 'millisecond') {\n return this.valueOf() < localInput.valueOf();\n } else {\n return this.clone().endOf(units).valueOf() < localInput.valueOf();\n }\n }\n\n function isBetween (from, to, units, inclusivity) {\n inclusivity = inclusivity || '()';\n return (inclusivity[0] === '(' ? this.isAfter(from, units) : !this.isBefore(from, units)) &&\n (inclusivity[1] === ')' ? this.isBefore(to, units) : !this.isAfter(to, units));\n }\n\n function isSame (input, units) {\n var localInput = isMoment(input) ? input : createLocal(input),\n inputMs;\n if (!(this.isValid() && localInput.isValid())) {\n return false;\n }\n units = normalizeUnits(units || 'millisecond');\n if (units === 'millisecond') {\n return this.valueOf() === localInput.valueOf();\n } else {\n inputMs = localInput.valueOf();\n return this.clone().startOf(units).valueOf() <= inputMs && inputMs <= this.clone().endOf(units).valueOf();\n }\n }\n\n function isSameOrAfter (input, units) {\n return this.isSame(input, units) || this.isAfter(input,units);\n }\n\n function isSameOrBefore (input, units) {\n return this.isSame(input, units) || this.isBefore(input,units);\n }\n\n function diff (input, units, asFloat) {\n var that,\n zoneDelta,\n output;\n\n if (!this.isValid()) {\n return NaN;\n }\n\n that = cloneWithOffset(input, this);\n\n if (!that.isValid()) {\n return NaN;\n }\n\n zoneDelta = (that.utcOffset() - this.utcOffset()) * 6e4;\n\n units = normalizeUnits(units);\n\n switch (units) {\n case 'year': output = monthDiff(this, that) / 12; break;\n case 'month': output = monthDiff(this, that); break;\n case 'quarter': output = monthDiff(this, that) / 3; break;\n case 'second': output = (this - that) / 1e3; break; // 1000\n case 'minute': output = (this - that) / 6e4; break; // 1000 * 60\n case 'hour': output = (this - that) / 36e5; break; // 1000 * 60 * 60\n case 'day': output = (this - that - zoneDelta) / 864e5; break; // 1000 * 60 * 60 * 24, negate dst\n case 'week': output = (this - that - zoneDelta) / 6048e5; break; // 1000 * 60 * 60 * 24 * 7, negate dst\n default: output = this - that;\n }\n\n return asFloat ? output : absFloor(output);\n }\n\n function monthDiff (a, b) {\n // difference in months\n var wholeMonthDiff = ((b.year() - a.year()) * 12) + (b.month() - a.month()),\n // b is in (anchor - 1 month, anchor + 1 month)\n anchor = a.clone().add(wholeMonthDiff, 'months'),\n anchor2, adjust;\n\n if (b - anchor < 0) {\n anchor2 = a.clone().add(wholeMonthDiff - 1, 'months');\n // linear across the month\n adjust = (b - anchor) / (anchor - anchor2);\n } else {\n anchor2 = a.clone().add(wholeMonthDiff + 1, 'months');\n // linear across the month\n adjust = (b - anchor) / (anchor2 - anchor);\n }\n\n //check for negative zero, return zero if negative zero\n return -(wholeMonthDiff + adjust) || 0;\n }\n\n hooks.defaultFormat = 'YYYY-MM-DDTHH:mm:ssZ';\n hooks.defaultFormatUtc = 'YYYY-MM-DDTHH:mm:ss[Z]';\n\n function toString () {\n return this.clone().locale('en').format('ddd MMM DD YYYY HH:mm:ss [GMT]ZZ');\n }\n\n function toISOString(keepOffset) {\n if (!this.isValid()) {\n return null;\n }\n var utc = keepOffset !== true;\n var m = utc ? this.clone().utc() : this;\n if (m.year() < 0 || m.year() > 9999) {\n return formatMoment(m, utc ? 'YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]' : 'YYYYYY-MM-DD[T]HH:mm:ss.SSSZ');\n }\n if (isFunction(Date.prototype.toISOString)) {\n // native implementation is ~50x faster, use it when we can\n if (utc) {\n return this.toDate().toISOString();\n } else {\n return new Date(this.valueOf() + this.utcOffset() * 60 * 1000).toISOString().replace('Z', formatMoment(m, 'Z'));\n }\n }\n return formatMoment(m, utc ? 'YYYY-MM-DD[T]HH:mm:ss.SSS[Z]' : 'YYYY-MM-DD[T]HH:mm:ss.SSSZ');\n }\n\n /**\n * Return a human readable representation of a moment that can\n * also be evaluated to get a new moment which is the same\n *\n * @link https://nodejs.org/dist/latest/docs/api/util.html#util_custom_inspect_function_on_objects\n */\n function inspect () {\n if (!this.isValid()) {\n return 'moment.invalid(/* ' + this._i + ' */)';\n }\n var func = 'moment';\n var zone = '';\n if (!this.isLocal()) {\n func = this.utcOffset() === 0 ? 'moment.utc' : 'moment.parseZone';\n zone = 'Z';\n }\n var prefix = '[' + func + '(\"]';\n var year = (0 <= this.year() && this.year() <= 9999) ? 'YYYY' : 'YYYYYY';\n var datetime = '-MM-DD[T]HH:mm:ss.SSS';\n var suffix = zone + '[\")]';\n\n return this.format(prefix + year + datetime + suffix);\n }\n\n function format (inputString) {\n if (!inputString) {\n inputString = this.isUtc() ? hooks.defaultFormatUtc : hooks.defaultFormat;\n }\n var output = formatMoment(this, inputString);\n return this.localeData().postformat(output);\n }\n\n function from (time, withoutSuffix) {\n if (this.isValid() &&\n ((isMoment(time) && time.isValid()) ||\n createLocal(time).isValid())) {\n return createDuration({to: this, from: time}).locale(this.locale()).humanize(!withoutSuffix);\n } else {\n return this.localeData().invalidDate();\n }\n }\n\n function fromNow (withoutSuffix) {\n return this.from(createLocal(), withoutSuffix);\n }\n\n function to (time, withoutSuffix) {\n if (this.isValid() &&\n ((isMoment(time) && time.isValid()) ||\n createLocal(time).isValid())) {\n return createDuration({from: this, to: time}).locale(this.locale()).humanize(!withoutSuffix);\n } else {\n return this.localeData().invalidDate();\n }\n }\n\n function toNow (withoutSuffix) {\n return this.to(createLocal(), withoutSuffix);\n }\n\n // If passed a locale key, it will set the locale for this\n // instance. Otherwise, it will return the locale configuration\n // variables for this instance.\n function locale (key) {\n var newLocaleData;\n\n if (key === undefined) {\n return this._locale._abbr;\n } else {\n newLocaleData = getLocale(key);\n if (newLocaleData != null) {\n this._locale = newLocaleData;\n }\n return this;\n }\n }\n\n var lang = deprecate(\n 'moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.',\n function (key) {\n if (key === undefined) {\n return this.localeData();\n } else {\n return this.locale(key);\n }\n }\n );\n\n function localeData () {\n return this._locale;\n }\n\n function startOf (units) {\n units = normalizeUnits(units);\n // the following switch intentionally omits break keywords\n // to utilize falling through the cases.\n switch (units) {\n case 'year':\n this.month(0);\n /* falls through */\n case 'quarter':\n case 'month':\n this.date(1);\n /* falls through */\n case 'week':\n case 'isoWeek':\n case 'day':\n case 'date':\n this.hours(0);\n /* falls through */\n case 'hour':\n this.minutes(0);\n /* falls through */\n case 'minute':\n this.seconds(0);\n /* falls through */\n case 'second':\n this.milliseconds(0);\n }\n\n // weeks are a special case\n if (units === 'week') {\n this.weekday(0);\n }\n if (units === 'isoWeek') {\n this.isoWeekday(1);\n }\n\n // quarters are also special\n if (units === 'quarter') {\n this.month(Math.floor(this.month() / 3) * 3);\n }\n\n return this;\n }\n\n function endOf (units) {\n units = normalizeUnits(units);\n if (units === undefined || units === 'millisecond') {\n return this;\n }\n\n // 'date' is an alias for 'day', so it should be considered as such.\n if (units === 'date') {\n units = 'day';\n }\n\n return this.startOf(units).add(1, (units === 'isoWeek' ? 'week' : units)).subtract(1, 'ms');\n }\n\n function valueOf () {\n return this._d.valueOf() - ((this._offset || 0) * 60000);\n }\n\n function unix () {\n return Math.floor(this.valueOf() / 1000);\n }\n\n function toDate () {\n return new Date(this.valueOf());\n }\n\n function toArray () {\n var m = this;\n return [m.year(), m.month(), m.date(), m.hour(), m.minute(), m.second(), m.millisecond()];\n }\n\n function toObject () {\n var m = this;\n return {\n years: m.year(),\n months: m.month(),\n date: m.date(),\n hours: m.hours(),\n minutes: m.minutes(),\n seconds: m.seconds(),\n milliseconds: m.milliseconds()\n };\n }\n\n function toJSON () {\n // new Date(NaN).toJSON() === null\n return this.isValid() ? this.toISOString() : null;\n }\n\n function isValid$2 () {\n return isValid(this);\n }\n\n function parsingFlags () {\n return extend({}, getParsingFlags(this));\n }\n\n function invalidAt () {\n return getParsingFlags(this).overflow;\n }\n\n function creationData() {\n return {\n input: this._i,\n format: this._f,\n locale: this._locale,\n isUTC: this._isUTC,\n strict: this._strict\n };\n }\n\n // FORMATTING\n\n addFormatToken(0, ['gg', 2], 0, function () {\n return this.weekYear() % 100;\n });\n\n addFormatToken(0, ['GG', 2], 0, function () {\n return this.isoWeekYear() % 100;\n });\n\n function addWeekYearFormatToken (token, getter) {\n addFormatToken(0, [token, token.length], 0, getter);\n }\n\n addWeekYearFormatToken('gggg', 'weekYear');\n addWeekYearFormatToken('ggggg', 'weekYear');\n addWeekYearFormatToken('GGGG', 'isoWeekYear');\n addWeekYearFormatToken('GGGGG', 'isoWeekYear');\n\n // ALIASES\n\n addUnitAlias('weekYear', 'gg');\n addUnitAlias('isoWeekYear', 'GG');\n\n // PRIORITY\n\n addUnitPriority('weekYear', 1);\n addUnitPriority('isoWeekYear', 1);\n\n\n // PARSING\n\n addRegexToken('G', matchSigned);\n addRegexToken('g', matchSigned);\n addRegexToken('GG', match1to2, match2);\n addRegexToken('gg', match1to2, match2);\n addRegexToken('GGGG', match1to4, match4);\n addRegexToken('gggg', match1to4, match4);\n addRegexToken('GGGGG', match1to6, match6);\n addRegexToken('ggggg', match1to6, match6);\n\n addWeekParseToken(['gggg', 'ggggg', 'GGGG', 'GGGGG'], function (input, week, config, token) {\n week[token.substr(0, 2)] = toInt(input);\n });\n\n addWeekParseToken(['gg', 'GG'], function (input, week, config, token) {\n week[token] = hooks.parseTwoDigitYear(input);\n });\n\n // MOMENTS\n\n function getSetWeekYear (input) {\n return getSetWeekYearHelper.call(this,\n input,\n this.week(),\n this.weekday(),\n this.localeData()._week.dow,\n this.localeData()._week.doy);\n }\n\n function getSetISOWeekYear (input) {\n return getSetWeekYearHelper.call(this,\n input, this.isoWeek(), this.isoWeekday(), 1, 4);\n }\n\n function getISOWeeksInYear () {\n return weeksInYear(this.year(), 1, 4);\n }\n\n function getWeeksInYear () {\n var weekInfo = this.localeData()._week;\n return weeksInYear(this.year(), weekInfo.dow, weekInfo.doy);\n }\n\n function getSetWeekYearHelper(input, week, weekday, dow, doy) {\n var weeksTarget;\n if (input == null) {\n return weekOfYear(this, dow, doy).year;\n } else {\n weeksTarget = weeksInYear(input, dow, doy);\n if (week > weeksTarget) {\n week = weeksTarget;\n }\n return setWeekAll.call(this, input, week, weekday, dow, doy);\n }\n }\n\n function setWeekAll(weekYear, week, weekday, dow, doy) {\n var dayOfYearData = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy),\n date = createUTCDate(dayOfYearData.year, 0, dayOfYearData.dayOfYear);\n\n this.year(date.getUTCFullYear());\n this.month(date.getUTCMonth());\n this.date(date.getUTCDate());\n return this;\n }\n\n // FORMATTING\n\n addFormatToken('Q', 0, 'Qo', 'quarter');\n\n // ALIASES\n\n addUnitAlias('quarter', 'Q');\n\n // PRIORITY\n\n addUnitPriority('quarter', 7);\n\n // PARSING\n\n addRegexToken('Q', match1);\n addParseToken('Q', function (input, array) {\n array[MONTH] = (toInt(input) - 1) * 3;\n });\n\n // MOMENTS\n\n function getSetQuarter (input) {\n return input == null ? Math.ceil((this.month() + 1) / 3) : this.month((input - 1) * 3 + this.month() % 3);\n }\n\n // FORMATTING\n\n addFormatToken('D', ['DD', 2], 'Do', 'date');\n\n // ALIASES\n\n addUnitAlias('date', 'D');\n\n // PRIORITY\n addUnitPriority('date', 9);\n\n // PARSING\n\n addRegexToken('D', match1to2);\n addRegexToken('DD', match1to2, match2);\n addRegexToken('Do', function (isStrict, locale) {\n // TODO: Remove \"ordinalParse\" fallback in next major release.\n return isStrict ?\n (locale._dayOfMonthOrdinalParse || locale._ordinalParse) :\n locale._dayOfMonthOrdinalParseLenient;\n });\n\n addParseToken(['D', 'DD'], DATE);\n addParseToken('Do', function (input, array) {\n array[DATE] = toInt(input.match(match1to2)[0]);\n });\n\n // MOMENTS\n\n var getSetDayOfMonth = makeGetSet('Date', true);\n\n // FORMATTING\n\n addFormatToken('DDD', ['DDDD', 3], 'DDDo', 'dayOfYear');\n\n // ALIASES\n\n addUnitAlias('dayOfYear', 'DDD');\n\n // PRIORITY\n addUnitPriority('dayOfYear', 4);\n\n // PARSING\n\n addRegexToken('DDD', match1to3);\n addRegexToken('DDDD', match3);\n addParseToken(['DDD', 'DDDD'], function (input, array, config) {\n config._dayOfYear = toInt(input);\n });\n\n // HELPERS\n\n // MOMENTS\n\n function getSetDayOfYear (input) {\n var dayOfYear = Math.round((this.clone().startOf('day') - this.clone().startOf('year')) / 864e5) + 1;\n return input == null ? dayOfYear : this.add((input - dayOfYear), 'd');\n }\n\n // FORMATTING\n\n addFormatToken('m', ['mm', 2], 0, 'minute');\n\n // ALIASES\n\n addUnitAlias('minute', 'm');\n\n // PRIORITY\n\n addUnitPriority('minute', 14);\n\n // PARSING\n\n addRegexToken('m', match1to2);\n addRegexToken('mm', match1to2, match2);\n addParseToken(['m', 'mm'], MINUTE);\n\n // MOMENTS\n\n var getSetMinute = makeGetSet('Minutes', false);\n\n // FORMATTING\n\n addFormatToken('s', ['ss', 2], 0, 'second');\n\n // ALIASES\n\n addUnitAlias('second', 's');\n\n // PRIORITY\n\n addUnitPriority('second', 15);\n\n // PARSING\n\n addRegexToken('s', match1to2);\n addRegexToken('ss', match1to2, match2);\n addParseToken(['s', 'ss'], SECOND);\n\n // MOMENTS\n\n var getSetSecond = makeGetSet('Seconds', false);\n\n // FORMATTING\n\n addFormatToken('S', 0, 0, function () {\n return ~~(this.millisecond() / 100);\n });\n\n addFormatToken(0, ['SS', 2], 0, function () {\n return ~~(this.millisecond() / 10);\n });\n\n addFormatToken(0, ['SSS', 3], 0, 'millisecond');\n addFormatToken(0, ['SSSS', 4], 0, function () {\n return this.millisecond() * 10;\n });\n addFormatToken(0, ['SSSSS', 5], 0, function () {\n return this.millisecond() * 100;\n });\n addFormatToken(0, ['SSSSSS', 6], 0, function () {\n return this.millisecond() * 1000;\n });\n addFormatToken(0, ['SSSSSSS', 7], 0, function () {\n return this.millisecond() * 10000;\n });\n addFormatToken(0, ['SSSSSSSS', 8], 0, function () {\n return this.millisecond() * 100000;\n });\n addFormatToken(0, ['SSSSSSSSS', 9], 0, function () {\n return this.millisecond() * 1000000;\n });\n\n\n // ALIASES\n\n addUnitAlias('millisecond', 'ms');\n\n // PRIORITY\n\n addUnitPriority('millisecond', 16);\n\n // PARSING\n\n addRegexToken('S', match1to3, match1);\n addRegexToken('SS', match1to3, match2);\n addRegexToken('SSS', match1to3, match3);\n\n var token;\n for (token = 'SSSS'; token.length <= 9; token += 'S') {\n addRegexToken(token, matchUnsigned);\n }\n\n function parseMs(input, array) {\n array[MILLISECOND] = toInt(('0.' + input) * 1000);\n }\n\n for (token = 'S'; token.length <= 9; token += 'S') {\n addParseToken(token, parseMs);\n }\n // MOMENTS\n\n var getSetMillisecond = makeGetSet('Milliseconds', false);\n\n // FORMATTING\n\n addFormatToken('z', 0, 0, 'zoneAbbr');\n addFormatToken('zz', 0, 0, 'zoneName');\n\n // MOMENTS\n\n function getZoneAbbr () {\n return this._isUTC ? 'UTC' : '';\n }\n\n function getZoneName () {\n return this._isUTC ? 'Coordinated Universal Time' : '';\n }\n\n var proto = Moment.prototype;\n\n proto.add = add;\n proto.calendar = calendar$1;\n proto.clone = clone;\n proto.diff = diff;\n proto.endOf = endOf;\n proto.format = format;\n proto.from = from;\n proto.fromNow = fromNow;\n proto.to = to;\n proto.toNow = toNow;\n proto.get = stringGet;\n proto.invalidAt = invalidAt;\n proto.isAfter = isAfter;\n proto.isBefore = isBefore;\n proto.isBetween = isBetween;\n proto.isSame = isSame;\n proto.isSameOrAfter = isSameOrAfter;\n proto.isSameOrBefore = isSameOrBefore;\n proto.isValid = isValid$2;\n proto.lang = lang;\n proto.locale = locale;\n proto.localeData = localeData;\n proto.max = prototypeMax;\n proto.min = prototypeMin;\n proto.parsingFlags = parsingFlags;\n proto.set = stringSet;\n proto.startOf = startOf;\n proto.subtract = subtract;\n proto.toArray = toArray;\n proto.toObject = toObject;\n proto.toDate = toDate;\n proto.toISOString = toISOString;\n proto.inspect = inspect;\n proto.toJSON = toJSON;\n proto.toString = toString;\n proto.unix = unix;\n proto.valueOf = valueOf;\n proto.creationData = creationData;\n proto.year = getSetYear;\n proto.isLeapYear = getIsLeapYear;\n proto.weekYear = getSetWeekYear;\n proto.isoWeekYear = getSetISOWeekYear;\n proto.quarter = proto.quarters = getSetQuarter;\n proto.month = getSetMonth;\n proto.daysInMonth = getDaysInMonth;\n proto.week = proto.weeks = getSetWeek;\n proto.isoWeek = proto.isoWeeks = getSetISOWeek;\n proto.weeksInYear = getWeeksInYear;\n proto.isoWeeksInYear = getISOWeeksInYear;\n proto.date = getSetDayOfMonth;\n proto.day = proto.days = getSetDayOfWeek;\n proto.weekday = getSetLocaleDayOfWeek;\n proto.isoWeekday = getSetISODayOfWeek;\n proto.dayOfYear = getSetDayOfYear;\n proto.hour = proto.hours = getSetHour;\n proto.minute = proto.minutes = getSetMinute;\n proto.second = proto.seconds = getSetSecond;\n proto.millisecond = proto.milliseconds = getSetMillisecond;\n proto.utcOffset = getSetOffset;\n proto.utc = setOffsetToUTC;\n proto.local = setOffsetToLocal;\n proto.parseZone = setOffsetToParsedOffset;\n proto.hasAlignedHourOffset = hasAlignedHourOffset;\n proto.isDST = isDaylightSavingTime;\n proto.isLocal = isLocal;\n proto.isUtcOffset = isUtcOffset;\n proto.isUtc = isUtc;\n proto.isUTC = isUtc;\n proto.zoneAbbr = getZoneAbbr;\n proto.zoneName = getZoneName;\n proto.dates = deprecate('dates accessor is deprecated. Use date instead.', getSetDayOfMonth);\n proto.months = deprecate('months accessor is deprecated. Use month instead', getSetMonth);\n proto.years = deprecate('years accessor is deprecated. Use year instead', getSetYear);\n proto.zone = deprecate('moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/', getSetZone);\n proto.isDSTShifted = deprecate('isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information', isDaylightSavingTimeShifted);\n\n function createUnix (input) {\n return createLocal(input * 1000);\n }\n\n function createInZone () {\n return createLocal.apply(null, arguments).parseZone();\n }\n\n function preParsePostFormat (string) {\n return string;\n }\n\n var proto$1 = Locale.prototype;\n\n proto$1.calendar = calendar;\n proto$1.longDateFormat = longDateFormat;\n proto$1.invalidDate = invalidDate;\n proto$1.ordinal = ordinal;\n proto$1.preparse = preParsePostFormat;\n proto$1.postformat = preParsePostFormat;\n proto$1.relativeTime = relativeTime;\n proto$1.pastFuture = pastFuture;\n proto$1.set = set;\n\n proto$1.months = localeMonths;\n proto$1.monthsShort = localeMonthsShort;\n proto$1.monthsParse = localeMonthsParse;\n proto$1.monthsRegex = monthsRegex;\n proto$1.monthsShortRegex = monthsShortRegex;\n proto$1.week = localeWeek;\n proto$1.firstDayOfYear = localeFirstDayOfYear;\n proto$1.firstDayOfWeek = localeFirstDayOfWeek;\n\n proto$1.weekdays = localeWeekdays;\n proto$1.weekdaysMin = localeWeekdaysMin;\n proto$1.weekdaysShort = localeWeekdaysShort;\n proto$1.weekdaysParse = localeWeekdaysParse;\n\n proto$1.weekdaysRegex = weekdaysRegex;\n proto$1.weekdaysShortRegex = weekdaysShortRegex;\n proto$1.weekdaysMinRegex = weekdaysMinRegex;\n\n proto$1.isPM = localeIsPM;\n proto$1.meridiem = localeMeridiem;\n\n function get$1 (format, index, field, setter) {\n var locale = getLocale();\n var utc = createUTC().set(setter, index);\n return locale[field](utc, format);\n }\n\n function listMonthsImpl (format, index, field) {\n if (isNumber(format)) {\n index = format;\n format = undefined;\n }\n\n format = format || '';\n\n if (index != null) {\n return get$1(format, index, field, 'month');\n }\n\n var i;\n var out = [];\n for (i = 0; i < 12; i++) {\n out[i] = get$1(format, i, field, 'month');\n }\n return out;\n }\n\n // ()\n // (5)\n // (fmt, 5)\n // (fmt)\n // (true)\n // (true, 5)\n // (true, fmt, 5)\n // (true, fmt)\n function listWeekdaysImpl (localeSorted, format, index, field) {\n if (typeof localeSorted === 'boolean') {\n if (isNumber(format)) {\n index = format;\n format = undefined;\n }\n\n format = format || '';\n } else {\n format = localeSorted;\n index = format;\n localeSorted = false;\n\n if (isNumber(format)) {\n index = format;\n format = undefined;\n }\n\n format = format || '';\n }\n\n var locale = getLocale(),\n shift = localeSorted ? locale._week.dow : 0;\n\n if (index != null) {\n return get$1(format, (index + shift) % 7, field, 'day');\n }\n\n var i;\n var out = [];\n for (i = 0; i < 7; i++) {\n out[i] = get$1(format, (i + shift) % 7, field, 'day');\n }\n return out;\n }\n\n function listMonths (format, index) {\n return listMonthsImpl(format, index, 'months');\n }\n\n function listMonthsShort (format, index) {\n return listMonthsImpl(format, index, 'monthsShort');\n }\n\n function listWeekdays (localeSorted, format, index) {\n return listWeekdaysImpl(localeSorted, format, index, 'weekdays');\n }\n\n function listWeekdaysShort (localeSorted, format, index) {\n return listWeekdaysImpl(localeSorted, format, index, 'weekdaysShort');\n }\n\n function listWeekdaysMin (localeSorted, format, index) {\n return listWeekdaysImpl(localeSorted, format, index, 'weekdaysMin');\n }\n\n getSetGlobalLocale('en', {\n dayOfMonthOrdinalParse: /\\d{1,2}(th|st|nd|rd)/,\n ordinal : function (number) {\n var b = number % 10,\n output = (toInt(number % 100 / 10) === 1) ? 'th' :\n (b === 1) ? 'st' :\n (b === 2) ? 'nd' :\n (b === 3) ? 'rd' : 'th';\n return number + output;\n }\n });\n\n // Side effect imports\n\n hooks.lang = deprecate('moment.lang is deprecated. Use moment.locale instead.', getSetGlobalLocale);\n hooks.langData = deprecate('moment.langData is deprecated. Use moment.localeData instead.', getLocale);\n\n var mathAbs = Math.abs;\n\n function abs () {\n var data = this._data;\n\n this._milliseconds = mathAbs(this._milliseconds);\n this._days = mathAbs(this._days);\n this._months = mathAbs(this._months);\n\n data.milliseconds = mathAbs(data.milliseconds);\n data.seconds = mathAbs(data.seconds);\n data.minutes = mathAbs(data.minutes);\n data.hours = mathAbs(data.hours);\n data.months = mathAbs(data.months);\n data.years = mathAbs(data.years);\n\n return this;\n }\n\n function addSubtract$1 (duration, input, value, direction) {\n var other = createDuration(input, value);\n\n duration._milliseconds += direction * other._milliseconds;\n duration._days += direction * other._days;\n duration._months += direction * other._months;\n\n return duration._bubble();\n }\n\n // supports only 2.0-style add(1, 's') or add(duration)\n function add$1 (input, value) {\n return addSubtract$1(this, input, value, 1);\n }\n\n // supports only 2.0-style subtract(1, 's') or subtract(duration)\n function subtract$1 (input, value) {\n return addSubtract$1(this, input, value, -1);\n }\n\n function absCeil (number) {\n if (number < 0) {\n return Math.floor(number);\n } else {\n return Math.ceil(number);\n }\n }\n\n function bubble () {\n var milliseconds = this._milliseconds;\n var days = this._days;\n var months = this._months;\n var data = this._data;\n var seconds, minutes, hours, years, monthsFromDays;\n\n // if we have a mix of positive and negative values, bubble down first\n // check: https://github.com/moment/moment/issues/2166\n if (!((milliseconds >= 0 && days >= 0 && months >= 0) ||\n (milliseconds <= 0 && days <= 0 && months <= 0))) {\n milliseconds += absCeil(monthsToDays(months) + days) * 864e5;\n days = 0;\n months = 0;\n }\n\n // The following code bubbles up values, see the tests for\n // examples of what that means.\n data.milliseconds = milliseconds % 1000;\n\n seconds = absFloor(milliseconds / 1000);\n data.seconds = seconds % 60;\n\n minutes = absFloor(seconds / 60);\n data.minutes = minutes % 60;\n\n hours = absFloor(minutes / 60);\n data.hours = hours % 24;\n\n days += absFloor(hours / 24);\n\n // convert days to months\n monthsFromDays = absFloor(daysToMonths(days));\n months += monthsFromDays;\n days -= absCeil(monthsToDays(monthsFromDays));\n\n // 12 months -> 1 year\n years = absFloor(months / 12);\n months %= 12;\n\n data.days = days;\n data.months = months;\n data.years = years;\n\n return this;\n }\n\n function daysToMonths (days) {\n // 400 years have 146097 days (taking into account leap year rules)\n // 400 years have 12 months === 4800\n return days * 4800 / 146097;\n }\n\n function monthsToDays (months) {\n // the reverse of daysToMonths\n return months * 146097 / 4800;\n }\n\n function as (units) {\n if (!this.isValid()) {\n return NaN;\n }\n var days;\n var months;\n var milliseconds = this._milliseconds;\n\n units = normalizeUnits(units);\n\n if (units === 'month' || units === 'year') {\n days = this._days + milliseconds / 864e5;\n months = this._months + daysToMonths(days);\n return units === 'month' ? months : months / 12;\n } else {\n // handle milliseconds separately because of floating point math errors (issue #1867)\n days = this._days + Math.round(monthsToDays(this._months));\n switch (units) {\n case 'week' : return days / 7 + milliseconds / 6048e5;\n case 'day' : return days + milliseconds / 864e5;\n case 'hour' : return days * 24 + milliseconds / 36e5;\n case 'minute' : return days * 1440 + milliseconds / 6e4;\n case 'second' : return days * 86400 + milliseconds / 1000;\n // Math.floor prevents floating point math errors here\n case 'millisecond': return Math.floor(days * 864e5) + milliseconds;\n default: throw new Error('Unknown unit ' + units);\n }\n }\n }\n\n // TODO: Use this.as('ms')?\n function valueOf$1 () {\n if (!this.isValid()) {\n return NaN;\n }\n return (\n this._milliseconds +\n this._days * 864e5 +\n (this._months % 12) * 2592e6 +\n toInt(this._months / 12) * 31536e6\n );\n }\n\n function makeAs (alias) {\n return function () {\n return this.as(alias);\n };\n }\n\n var asMilliseconds = makeAs('ms');\n var asSeconds = makeAs('s');\n var asMinutes = makeAs('m');\n var asHours = makeAs('h');\n var asDays = makeAs('d');\n var asWeeks = makeAs('w');\n var asMonths = makeAs('M');\n var asYears = makeAs('y');\n\n function clone$1 () {\n return createDuration(this);\n }\n\n function get$2 (units) {\n units = normalizeUnits(units);\n return this.isValid() ? this[units + 's']() : NaN;\n }\n\n function makeGetter(name) {\n return function () {\n return this.isValid() ? this._data[name] : NaN;\n };\n }\n\n var milliseconds = makeGetter('milliseconds');\n var seconds = makeGetter('seconds');\n var minutes = makeGetter('minutes');\n var hours = makeGetter('hours');\n var days = makeGetter('days');\n var months = makeGetter('months');\n var years = makeGetter('years');\n\n function weeks () {\n return absFloor(this.days() / 7);\n }\n\n var round = Math.round;\n var thresholds = {\n ss: 44, // a few seconds to seconds\n s : 45, // seconds to minute\n m : 45, // minutes to hour\n h : 22, // hours to day\n d : 26, // days to month\n M : 11 // months to year\n };\n\n // helper function for moment.fn.from, moment.fn.fromNow, and moment.duration.fn.humanize\n function substituteTimeAgo(string, number, withoutSuffix, isFuture, locale) {\n return locale.relativeTime(number || 1, !!withoutSuffix, string, isFuture);\n }\n\n function relativeTime$1 (posNegDuration, withoutSuffix, locale) {\n var duration = createDuration(posNegDuration).abs();\n var seconds = round(duration.as('s'));\n var minutes = round(duration.as('m'));\n var hours = round(duration.as('h'));\n var days = round(duration.as('d'));\n var months = round(duration.as('M'));\n var years = round(duration.as('y'));\n\n var a = seconds <= thresholds.ss && ['s', seconds] ||\n seconds < thresholds.s && ['ss', seconds] ||\n minutes <= 1 && ['m'] ||\n minutes < thresholds.m && ['mm', minutes] ||\n hours <= 1 && ['h'] ||\n hours < thresholds.h && ['hh', hours] ||\n days <= 1 && ['d'] ||\n days < thresholds.d && ['dd', days] ||\n months <= 1 && ['M'] ||\n months < thresholds.M && ['MM', months] ||\n years <= 1 && ['y'] || ['yy', years];\n\n a[2] = withoutSuffix;\n a[3] = +posNegDuration > 0;\n a[4] = locale;\n return substituteTimeAgo.apply(null, a);\n }\n\n // This function allows you to set the rounding function for relative time strings\n function getSetRelativeTimeRounding (roundingFunction) {\n if (roundingFunction === undefined) {\n return round;\n }\n if (typeof(roundingFunction) === 'function') {\n round = roundingFunction;\n return true;\n }\n return false;\n }\n\n // This function allows you to set a threshold for relative time strings\n function getSetRelativeTimeThreshold (threshold, limit) {\n if (thresholds[threshold] === undefined) {\n return false;\n }\n if (limit === undefined) {\n return thresholds[threshold];\n }\n thresholds[threshold] = limit;\n if (threshold === 's') {\n thresholds.ss = limit - 1;\n }\n return true;\n }\n\n function humanize (withSuffix) {\n if (!this.isValid()) {\n return this.localeData().invalidDate();\n }\n\n var locale = this.localeData();\n var output = relativeTime$1(this, !withSuffix, locale);\n\n if (withSuffix) {\n output = locale.pastFuture(+this, output);\n }\n\n return locale.postformat(output);\n }\n\n var abs$1 = Math.abs;\n\n function sign(x) {\n return ((x > 0) - (x < 0)) || +x;\n }\n\n function toISOString$1() {\n // for ISO strings we do not use the normal bubbling rules:\n // * milliseconds bubble up until they become hours\n // * days do not bubble at all\n // * months bubble up until they become years\n // This is because there is no context-free conversion between hours and days\n // (think of clock changes)\n // and also not between days and months (28-31 days per month)\n if (!this.isValid()) {\n return this.localeData().invalidDate();\n }\n\n var seconds = abs$1(this._milliseconds) / 1000;\n var days = abs$1(this._days);\n var months = abs$1(this._months);\n var minutes, hours, years;\n\n // 3600 seconds -> 60 minutes -> 1 hour\n minutes = absFloor(seconds / 60);\n hours = absFloor(minutes / 60);\n seconds %= 60;\n minutes %= 60;\n\n // 12 months -> 1 year\n years = absFloor(months / 12);\n months %= 12;\n\n\n // inspired by https://github.com/dordille/moment-isoduration/blob/master/moment.isoduration.js\n var Y = years;\n var M = months;\n var D = days;\n var h = hours;\n var m = minutes;\n var s = seconds ? seconds.toFixed(3).replace(/\\.?0+$/, '') : '';\n var total = this.asSeconds();\n\n if (!total) {\n // this is the same as C#'s (Noda) and python (isodate)...\n // but not other JS (goog.date)\n return 'P0D';\n }\n\n var totalSign = total < 0 ? '-' : '';\n var ymSign = sign(this._months) !== sign(total) ? '-' : '';\n var daysSign = sign(this._days) !== sign(total) ? '-' : '';\n var hmsSign = sign(this._milliseconds) !== sign(total) ? '-' : '';\n\n return totalSign + 'P' +\n (Y ? ymSign + Y + 'Y' : '') +\n (M ? ymSign + M + 'M' : '') +\n (D ? daysSign + D + 'D' : '') +\n ((h || m || s) ? 'T' : '') +\n (h ? hmsSign + h + 'H' : '') +\n (m ? hmsSign + m + 'M' : '') +\n (s ? hmsSign + s + 'S' : '');\n }\n\n var proto$2 = Duration.prototype;\n\n proto$2.isValid = isValid$1;\n proto$2.abs = abs;\n proto$2.add = add$1;\n proto$2.subtract = subtract$1;\n proto$2.as = as;\n proto$2.asMilliseconds = asMilliseconds;\n proto$2.asSeconds = asSeconds;\n proto$2.asMinutes = asMinutes;\n proto$2.asHours = asHours;\n proto$2.asDays = asDays;\n proto$2.asWeeks = asWeeks;\n proto$2.asMonths = asMonths;\n proto$2.asYears = asYears;\n proto$2.valueOf = valueOf$1;\n proto$2._bubble = bubble;\n proto$2.clone = clone$1;\n proto$2.get = get$2;\n proto$2.milliseconds = milliseconds;\n proto$2.seconds = seconds;\n proto$2.minutes = minutes;\n proto$2.hours = hours;\n proto$2.days = days;\n proto$2.weeks = weeks;\n proto$2.months = months;\n proto$2.years = years;\n proto$2.humanize = humanize;\n proto$2.toISOString = toISOString$1;\n proto$2.toString = toISOString$1;\n proto$2.toJSON = toISOString$1;\n proto$2.locale = locale;\n proto$2.localeData = localeData;\n\n proto$2.toIsoString = deprecate('toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)', toISOString$1);\n proto$2.lang = lang;\n\n // Side effect imports\n\n // FORMATTING\n\n addFormatToken('X', 0, 0, 'unix');\n addFormatToken('x', 0, 0, 'valueOf');\n\n // PARSING\n\n addRegexToken('x', matchSigned);\n addRegexToken('X', matchTimestamp);\n addParseToken('X', function (input, array, config) {\n config._d = new Date(parseFloat(input, 10) * 1000);\n });\n addParseToken('x', function (input, array, config) {\n config._d = new Date(toInt(input));\n });\n\n // Side effect imports\n\n\n hooks.version = '2.22.2';\n\n setHookCallback(createLocal);\n\n hooks.fn = proto;\n hooks.min = min;\n hooks.max = max;\n hooks.now = now;\n hooks.utc = createUTC;\n hooks.unix = createUnix;\n hooks.months = listMonths;\n hooks.isDate = isDate;\n hooks.locale = getSetGlobalLocale;\n hooks.invalid = createInvalid;\n hooks.duration = createDuration;\n hooks.isMoment = isMoment;\n hooks.weekdays = listWeekdays;\n hooks.parseZone = createInZone;\n hooks.localeData = getLocale;\n hooks.isDuration = isDuration;\n hooks.monthsShort = listMonthsShort;\n hooks.weekdaysMin = listWeekdaysMin;\n hooks.defineLocale = defineLocale;\n hooks.updateLocale = updateLocale;\n hooks.locales = listLocales;\n hooks.weekdaysShort = listWeekdaysShort;\n hooks.normalizeUnits = normalizeUnits;\n hooks.relativeTimeRounding = getSetRelativeTimeRounding;\n hooks.relativeTimeThreshold = getSetRelativeTimeThreshold;\n hooks.calendarFormat = getCalendarFormat;\n hooks.prototype = proto;\n\n // currently HTML5 input type only supports 24-hour formats\n hooks.HTML5_FMT = {\n DATETIME_LOCAL: 'YYYY-MM-DDTHH:mm', // <input type=\"datetime-local\" />\n DATETIME_LOCAL_SECONDS: 'YYYY-MM-DDTHH:mm:ss', // <input type=\"datetime-local\" step=\"1\" />\n DATETIME_LOCAL_MS: 'YYYY-MM-DDTHH:mm:ss.SSS', // <input type=\"datetime-local\" step=\"0.001\" />\n DATE: 'YYYY-MM-DD', // <input type=\"date\" />\n TIME: 'HH:mm', // <input type=\"time\" />\n TIME_SECONDS: 'HH:mm:ss', // <input type=\"time\" step=\"1\" />\n TIME_MS: 'HH:mm:ss.SSS', // <input type=\"time\" step=\"0.001\" />\n WEEK: 'YYYY-[W]WW', // <input type=\"week\" />\n MONTH: 'YYYY-MM' // <input type=\"month\" />\n };\n\n return hooks;\n\n})));","/*\n * Title: Typewriter JS\n * Description: A native javascript plugin that can be used to create an elegent automatic typewriter animation effect on websites.\n * Author: Tameem Safi\n * Website: https://safi.me.uk\n * Version: 1.0.0\n */\n\n(function() {\n\n\t\"use strict\";\n\n\t// http://paulirish.com/2011/requestanimationframe-for-smart-animating/\n\t// http://my.opera.com/emoller/blog/2011/12/20/requestanimationframe-for-smart-er-animating\n\t// requestAnimationFrame polyfill by Erik Möller. fixes from Paul Irish and Tino Zijdel\n\t// MIT license\n\t(function() {\n\t var lastTime = 0;\n\t var vendors = ['ms', 'moz', 'webkit', 'o'];\n\t for(var x = 0; x < vendors.length && !window.requestAnimationFrame; ++x) {\n\t window.requestAnimationFrame = window[vendors[x]+'RequestAnimationFrame'];\n\t window.cancelAnimationFrame = window[vendors[x]+'CancelAnimationFrame']\n\t || window[vendors[x]+'CancelRequestAnimationFrame'];\n\t }\n\n\t if (!window.requestAnimationFrame)\n\t window.requestAnimationFrame = function(callback, element) {\n\t var currTime = new Date().getTime();\n\t var timeToCall = Math.max(0, 16 - (currTime - lastTime));\n\t var id = window.setTimeout(function() { callback(currTime + timeToCall); },\n\t timeToCall);\n\t lastTime = currTime + timeToCall;\n\t return id;\n\t };\n\n\t if (!window.cancelAnimationFrame)\n\t window.cancelAnimationFrame = function(id) {\n\t clearTimeout(id);\n\t };\n\t}());\n\n\twindow.Typewriter = function Typewriter(element, options) {\n\t\tthis._settings = {\n\t\t\tcursorAnimationPaused: false,\n\t\t\topacityIncreasing: false,\n\t\t\tcurrentOpacity: 1,\n\t\t\tdelayedQue: [],\n\t\t\tdelayItemsCount: 0,\n\t\t\teventQue: [],\n\t\t\tcalledEvents: [],\n\t\t\teventRunning: false,\n\t\t\ttimeout: false,\n\t\t\tdelayExecution: false,\n\t\t\tfps: (60/1000),\n\t\t\ttypingFrameCount: 0,\n\t\t\tstringToTypeHTMLArray: [],\n\t\t\tcurrentTypedCharacters: [],\n\t\t\ttyping: false,\n\t\t\tusedIDs: [],\n\t\t\tcharAmountToDelete: false,\n\t\t\tuserOptions: {},\n\t\t\teventLoopRerun: 0\n\t\t};\n\n\t\tif(!element) {\n\t\t\treturn console.error('Please choose an DOM element so that type writer can display itself.');\n\t\t}\n\n\t\t// if(!options.strings && !(options.strings instanceof Array || typeof options.strings === 'string')) {\n\t\t// \treturn console.error('Please enter an array of strings for the typewriter animation to work.');\n\t\t// }\n\n\t\tif(typeof options !== 'object') {\n\t\t\treturn console.error('Typewriter only accepts the options as an object.');\n\t\t}\n\n\t\tthis._settings.userOptions = options;\n\n\t\tthis.default_options = {\n\t\t\tstrings: false,\n\t\t\tcursorClassName: 'typewriter-cursor',\n\t\t\tcursor: '|',\n\t\t\tanimateCursor: true,\n\t\t\tblinkSpeed: 50,\n\t\t\ttypingSpeed: 'natural',\n\t\t\tdeleteSpeed: 'natural',\n\t\t\tcharSpanClassName: 'typewriter-char',\n\t\t\twrapperClassName: 'typewriter-wrapper',\n\t\t\tloop: false,\n\t\t\tautoStart: false,\n\t\t\tdevMode: false\n\t\t};\n\n\t\tthis.options = this._setupOptions(options);\n\n\t\tthis.el = element;\n\n\t\tthis._setupTypwriterWrapper();\n\n\t\tthis._startCursorAnimation();\n\n\t\tif(this.options.autoStart === true && this.options.strings) {\n\t\t\tthis.typeOutAllStrings();\n\t\t}\n\n\t};\n\n\tvar TypewriterPrototype = window.Typewriter.prototype;\n\n\tTypewriterPrototype.stop = function() {\n\t\tthis._addToEventQue(this._stopEventLoop)\n\t\treturn this;\n\t};\n\n\tTypewriterPrototype.start = function() {\n\t\tthis._startEventLoop();\n\t\treturn this;\n\t};\n\n\tTypewriterPrototype.rerun = function() {\n\t\tthis._addToEventQue(this._rerunCalledEvents);\n\t\treturn this;\n\t};\n\n\tTypewriterPrototype.typeString = function(string) {\n\t\tif(!string || typeof string != 'string') {\n\t\t\treturn console.error('Please enter a string as the paramater.');\n\t\t}\n\n\t\tvar string_chars = this._getCharacters(string);\n\n\t\tthis._addToEventQue([this._typeCharacters, [string_chars]]);\n\t\treturn this;\n\t};\n\n\tTypewriterPrototype.deleteAll = function() {\n\t\tthis._addToEventQue([this._deleteChars, ['all']]);\n\t\treturn this;\n\t};\n\n\tTypewriterPrototype.deleteChars = function(amount) {\n\t\tthis._addToEventQue([this._deleteChars, [amount]]);\n\t\treturn this;\n\t};\n\n\tTypewriterPrototype.pauseFor = function(ms) {\n\t\tthis._addToEventQue([this._pauseFor, [ms]]);\n\t\treturn this;\n\t};\n\n\tTypewriterPrototype.typeOutAllStrings = function() {\n\t\tvar characters_array = this._getStringsAsCharsArray();\n\n\t\tif(characters_array.length === 1) {\n\t\t\tthis._typeCharacters(characters_array[0]);\n\t\t} else {\n\t\t\tfor(var i = 0, length = characters_array.length; i < length; i++) {\n\t\t\t\tthis._addToEventQue([this._typeCharacters, [characters_array[i]]]);\n\t\t\t\tthis.pauseFor(this._randomInteger(1500, 2500));\n\t\t\t\tthis.deleteAll();\n\t\t\t\tthis.pauseFor(this._randomInteger(1500, 2500));\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\n\t};\n\n\tTypewriterPrototype.changeSettings = function(new_settings) {\n\t\tif(!new_settings && typeof new_settings !== 'object') {\n\t\t\treturn console.error('Typewriter will only accept an object as the settings.');\n\t\t}\n\n\t\tthis._addToEventQue([this._changeSettings, [JSON.stringify(new_settings)]]);\n\n\t\treturn this;\n\n\t};\n\n\tTypewriterPrototype.changeBlinkSpeed = function(new_speed) {\n\t\tif(!new_speed && typeof new_speed !== 'number') {\n\t\t\treturn console.error('Please enter a number for the new blink speed.');\n\t\t}\n\n\t\tthis.changeSettings({\n\t\t\tblinkSpeed: new_speed\n\t\t});\n\n\t\treturn this;\n\t};\n\n\tTypewriterPrototype.changeTypingSpeed = function(new_speed) {\n\t\tif(!new_speed && typeof new_speed !== 'number') {\n\t\t\treturn console.error('Please enter a number for the new typing speed.');\n\t\t}\n\n\t\tvar new_settings = {\n\t\t\ttypingSpeed: new_speed\n\t\t};\n\n\t\tthis.changeSettings({\n\t\t\ttypingSpeed: new_speed\n\t\t});\n\n\t\treturn this;\n\t};\n\n\tTypewriterPrototype.changeDeleteSpeed = function(new_speed) {\n\t\tif(!new_speed && typeof new_speed !== 'number') {\n\t\t\treturn console.error('Please enter a number for the new delete speed.');\n\t\t}\n\n\t\tthis.changeSettings({\n\t\t\tchangeDeleteSpeed: new_speed\n\t\t});\n\n\t\treturn this;\n\t};\n\n\tTypewriterPrototype._rerunCalledEvents = function() {\n\t\tif(this._settings.currentTypedCharacters.length > 0) {\n\t\t\tthis.deleteAll();\n\t\t\tthis._resetEventLoop('rerunCalledEvents');\n\t\t} else {\n\t\t\tthis._settings.eventQue = this._settings.calledEvents;\n\t\t\tthis._settings.calledEvents = [];\n\t\t\tthis.options = this._setupOptions(this._settings.userOptions);\n\t\t\tthis._settings.usedIDs = [];\n\t\t\tthis.charAmountToDelete = false;\n\t\t\tthis._startEventLoop();\n\t\t}\n\t};\n\n\tTypewriterPrototype._deleteChars = function(amount) {\n\n\n\t\tif(amount) {\n\t\t\tthis._settings.charAmountToDelete = amount;\n\t\t}\n\t\tthis._deletingCharIdsAnimation = window.requestAnimationFrame(this._deletingCharAnimationFrame.bind(this));\n\t\treturn this;\n\t};\n\n\tTypewriterPrototype._pauseFor = function(ms) {\n\t\tvar self = this;\n\t\tself._settings.eventRunning = true;\n\t\tsetTimeout(function() {\n\t\t\tself._resetEventLoop('pauseFor');\n\t\t}, ms);\n\t};\n\n\tTypewriterPrototype._changeSettings = function(new_settings) {\n\t\tthis.options = this._setupOptions(JSON.parse(new_settings[0]));\n\t\tthis._resetEventLoop('changeSettings');\n\n\t\tif(this.options.devMode) {\n\t\t\tconsole.log('New settings', this.options);\n\t\t}\n\n\t};\n\n\tTypewriterPrototype._deletingCharAnimationFrame = function() {\n\t\tvar self = this;\n\t\tvar delete_speed = this.options.deleteSpeed;\n\t\tvar typewriter_wrapper_class_name = self.options.wrapperClassName;\n\t\tvar current_typed_char_ids = self._settings.currentTypedCharacters;\n\t\tvar char_amount_to_delete = self._settings.charAmountToDelete;\n\n\t\tif(!self._settings.charAmountToDelete || self._settings.charAmountToDelete === 0 || current_typed_char_ids === 0) {\n\t\t\tself._resetEventLoop('deletingCharAnimationFrame');\n\t\t\treturn true;\n\t\t}\n\n\t\tif(delete_speed == 'natural') {\n\t\t\tdelete_speed = self._randomInteger(50, 150);\n\t\t}\n\n\t\tif(char_amount_to_delete == 'all') {\n\t\t\tchar_amount_to_delete = current_typed_char_ids.length;\n\t\t\tself._settings.charAmountToDelete = char_amount_to_delete;\n\t\t}\n\n\t\tsetTimeout(function() {\n\t\t\tif(self._settings.charAmountToDelete) {\n\t\t\t\tvar last_typed_char_index = current_typed_char_ids.length - 1;\n\t\t\t\tvar get_last_typed_char = current_typed_char_ids[last_typed_char_index];\n\n\t\t\t\tself._settings.currentTypedCharacters.splice(last_typed_char_index, 1);\n\n\t\t\t\tvar char_to_delete_el = document.getElementById(get_last_typed_char);\n\n\t\t\t\tif(char_to_delete_el) {\n\t\t\t\t\tvar typewriter_wrapper_el = self.el.querySelector('.' + typewriter_wrapper_class_name);\n\t\t\t\t\ttypewriter_wrapper_el.removeChild(char_to_delete_el);\n\t\t\t\t\tself._settings.charAmountToDelete = char_amount_to_delete - 1;\n\n\t\t\t\t\tif(self.options.devMode) {\n\t\t\t\t\t\tconsole.log('Deleted char with ID', get_last_typed_char);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tself._deletingCharIdsAnimation = window.requestAnimationFrame(self._deletingCharAnimationFrame.bind(self));\n\n\t\t}, delete_speed);\n\t};\n\n\tTypewriterPrototype._setupOptions = function(new_options) {\n\t var merged_options = {};\n\n\t for (var attrname in this.default_options) {\n\t \tmerged_options[attrname] = this.default_options[attrname];\n\t }\n\n\t if(this._settings.userOptions) {\n\t \tfor (var attrname in this._settings.userOptions) {\n\t\t \tmerged_options[attrname] = this._settings.userOptions[attrname];\n\t\t }\n\t }\n\n\t for (var attrname in new_options) {\n\t \tmerged_options[attrname] = new_options[attrname];\n\t }\n\n\t return merged_options;\n\t}\n\n\tTypewriterPrototype._addToEventQue = function(event) {\n\t\tthis._settings.eventQue.push(event);\n\t\tif(this._settings.eventQue.length > 0 && !this._settings.eventRunning && this.options.autoStart) {\n\t\t\tthis._startEventLoop();\n\t\t}\n\t};\n\n\tTypewriterPrototype._startEventLoop = function() {\n\t\tif(this.options.devMode) {\n\t\t\tconsole.log('Event loop started.');\n\t\t}\n\n\t\tif(!this._settings.eventRunning) {\n\n\t\t\tif(this._settings.eventQue.length > 0) {\n\t\t\t\tthis.eventLoopRerun = 0;\n\t\t\t\tvar first_event = this._settings.eventQue[0];\n\t\t\t\tif(typeof first_event == 'function') {\n\t\t\t\t\tthis._settings.eventRunning = true;\n\t\t\t\t\tthis._settings.calledEvents.push(first_event);\n\t\t\t\t\tthis._settings.eventQue.splice(0, 1);\n\t\t\t\t\tfirst_event.call(this);\n\t\t\t\t\tif(this.options.devMode) {\n\t\t\t\t\t\tconsole.log('Event started.');\n\t\t\t\t\t}\n\t\t\t\t} else if(first_event instanceof Array) {\n\t\t\t\t\tif(typeof first_event[0] == 'function' && first_event[1] instanceof Array) {\n\t\t\t\t\t\tthis._settings.eventRunning = true;\n\t\t\t\t\t\tthis._settings.calledEvents.push(first_event);\n\t\t\t\t\t\tthis._settings.eventQue.splice(0, 1);\n\t\t\t\t\t\tfirst_event[0].call(this, first_event[1]);\n\t\t\t\t\t\tif(this.options.devMode) {\n\t\t\t\t\t\t\tconsole.log('Event started.');\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis._eventQueAnimation = window.requestAnimationFrame(this._startEventLoop.bind(this));\n\t\t}\n\n\t\tif(!this._settings.eventRunning && this._settings.eventQue.length <= 0) {\n\t\t\tvar self = this;\n\t\t\tself._stopEventLoop();\n\t\t\tsetTimeout(function() {\n\t\t\t\tif(self.options.loop) {\n\t\t\t\t\tself.eventLoopRerun++;\n\t\t\t\t\tif(self.options.devMode) {\n\t\t\t\t\t\tconsole.log('Before Loop State', self._settings);\n\t\t\t\t\t}\n\t\t\t\t\tif(self.eventLoopRerun > 4) {\n\t\t\t\t\t\tconsole.error('Maximum amount of loop retries reached.');\n\t\t\t\t\t\tself._stopEventLoop();\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif(self.options.devMode) {\n\t\t\t\t\t\t\tconsole.log('Looping events.');\n\t\t\t\t\t\t}\n\t\t\t\t\t\tself._rerunCalledEvents();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}, 1000);\n\t\t\treturn;\n\t\t}\n\n\t};\n\n\tTypewriterPrototype._resetEventLoop = function(name) {\n\t\tvar event_name = name || 'Event';\n\t\tthis._settings.eventRunning = false;\n\t\tthis._startEventLoop();\n\t\tif(this.options.devMode) {\n\t\t\tconsole.log(event_name, 'Finished');\n\t\t}\n\t};\n\n\tTypewriterPrototype._stopEventLoop = function() {\n\t\twindow.cancelAnimationFrame(this._eventQueAnimation);\n\t\tif(this.options.devMode) {\n\t\t\tconsole.log('Event loop stopped.');\n\t\t}\n\t};\n\n\tTypewriterPrototype._setupTypwriterWrapper = function() {\n\t\tvar typewriter_wrapper_class_name = this.options.wrapperClassName;\n\t\tvar typewriter_wrapper = document.createElement('span');\n\t\ttypewriter_wrapper.className = typewriter_wrapper_class_name;\n\t\tthis.el.innerHTML = '';\n\t\tthis.el.appendChild(typewriter_wrapper);\n\t};\n\n\tTypewriterPrototype._typeCharacters = function(characters_array) {\n\t\tthis._settings.stringToTypeHTMLArray = this._convertCharsToHTML(characters_array);\n\t\tthis._typingAnimation = window.requestAnimationFrame(this._typingAnimationFrame.bind(this, characters_array.length));\n\t\treturn this;\n\t};\n\n\tTypewriterPrototype._typingAnimationFrame = function(total_items) {\n\t\tvar self = this;\n\t\tvar typing_speed = this.options.typingSpeed;\n\t\tvar typewriter_wrapper_class_name = self.options.wrapperClassName;\n\n\t\tif(self._settings.stringToTypeHTMLArray.length == 0) {\n\t\t\twindow.cancelAnimationFrame(self._typingAnimation);\n\t\t\tthis._resetEventLoop('typingAnimationFrame');\n\t\t\treturn true;\n\t\t}\n\n\t\tif(typing_speed == 'natural') {\n\t\t\ttyping_speed = this._randomInteger(50, 150);\n\t\t}\n\n\t\tsetTimeout(function() {\n\t\t\tvar el_inner_html = self.el.innerHTML;\n\t\t\tvar item_to_type = self._settings.stringToTypeHTMLArray[0];\n\t\t\tself.el.querySelector('.' + typewriter_wrapper_class_name).appendChild(item_to_type.el);\n\t\t\tself._settings.currentTypedCharacters.push(item_to_type.id);\n\t\t\tself._settings.stringToTypeHTMLArray.splice(0, 1);\n\t\t\tself._typingAnimation = window.requestAnimationFrame(self._typingAnimationFrame.bind(self, total_items));\n\t\t\tif(self.options.devMode) {\n\t\t\t\tconsole.log('Typed', item_to_type);\n\t\t\t}\n\t\t}, typing_speed);\n\t};\n\n\tTypewriterPrototype._convertCharsToHTML = function(chars) {\n\t\tvar chars_html_wrap_array = [];\n\t\tvar char_class_name = this.options.charSpanClassName;\n\t\tvar chars_array = chars[0];\n\n\t\tfor(var i = 0, length = chars_array.length; i < length; i++) {\n\t\t\tvar char_element = document.createElement('span');\n\t\t\tvar char_id = this._generateUniqueID();\n\t\t\tchar_element.id = char_id;\n\t\t\tchar_element.className = char_class_name + ' typewriter-item-' + i;\n\t\t\tchar_element.innerHTML = chars_array[i];\n\t\t\tchars_html_wrap_array.push({\n\t\t\t\tid: char_id,\n\t\t\t\tel: char_element\n\t\t\t});\n\t\t}\n\n\t\treturn chars_html_wrap_array;\n\t};\n\n\tTypewriterPrototype._getCharacters = function(string) {\n\t\tif(typeof string !== 'string') {\n\t\t\treturn false;\n\t\t}\n\t\treturn string.split(\"\");\n\t};\n\n\tTypewriterPrototype._getStringsAsCharsArray = function() {\n\t\tvar strings_array_check = this.options.strings instanceof Array;\n\t\tvar strings_string_check = typeof this.options.strings === 'string';\n\t\tif(!strings_array_check) {\n\t\t\tif(!strings_string_check) {\n\t\t\t\treturn console.error('Typewriter only accepts strings or an array of strings as the input.');\n\t\t\t}\n\t\t\treturn [this.options.strings.split(\"\")];\n\t\t}\n\n\t\tvar strings_chars_array = [];\n\n\t\tfor (var i = 0, length = this.options.strings.length; i < length; i++) {\n\t\t\tvar string_chars = this._getCharacters(this.options.strings[i]);\n\t\t\tif(!string_chars) {\n\t\t\t\tconsole.error('Please enter only strings.');\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tstrings_chars_array.push(string_chars);\n \t}\n\n \treturn strings_chars_array;\n\t};\n\n\tTypewriterPrototype._cursorAnimationFrame = function() {\n\t\tif(!this._settings.cursorAnimationPaused) {\n\t\t\tvar blink_speed = this.options.blinkSpeed;\n\t\t\tvar opacity_amount = (1/1000) * blink_speed;\n\n\t\t\tvar cursor_el = this.el.querySelector('.typewriter-cursor');\n\n\t\t\tif(this._settings.opacityIncreasing == true) {\n\t\t\t\tif(this._settings.currentOpacity >= 1) {\n\t\t\t\t\tthis._settings.opacityIncreasing = false;\n\t\t\t\t\tthis._settings.currentOpacity = 1;\n\t\t\t\t}\n\n\t\t\t\tthis._settings.currentOpacity += opacity_amount;\n\t\t\t}\n\n\t\t\tif(this._settings.opacityIncreasing == false) {\n\t\t\t\tif(this._settings.currentOpacity <= 0) {\n\t\t\t\t\tthis._settings.opacityIncreasing = true;\n\t\t\t\t\tthis._settings.currentOpacity = 0;\n\t\t\t\t}\n\n\t\t\t\tthis._settings.currentOpacity -= opacity_amount;\n\t\t\t}\n\n\t\t\tcursor_el.style.opacity = this._settings.currentOpacity;\n\t\t\tthis._cursorAnimation = window.requestAnimationFrame(this._cursorAnimationFrame.bind(this));\n\t\t}\n\t};\n\n\tTypewriterPrototype.appendText = function(text){\n\t this._addToEventQue([this._appendText, [text]])\n return this\n }\n\n\tTypewriterPrototype._appendText = function(text){\n var char_class_name = this.options.charSpanClassName;\n var char_element = document.createElement('span');\n var char_id = this._generateUniqueID();\n char_element.id = char_id;\n char_element.className = char_class_name + ' dom-appended'\n char_element.innerHTML = text\n var items = []\n items.push({\n id: char_id,\n el: char_element\n });\n\n this._settings.stringToTypeHTMLArray = items\n\n window.requestAnimationFrame(this._typingAnimationFrame.bind(this, 1));\n\n }\n\n\tTypewriterPrototype._startCursorAnimation = function() {\n\t\tvar cursor = this.options.cursor;\n\t\tvar cursor_class_name = this.options.cursorClassName;\n\n\t\tvar cursor_element = document.createElement('span');\n\t\tcursor_element.className = cursor_class_name;\n\t\tcursor_element.innerHTML = cursor;\n\n\t\tthis.el.appendChild(cursor_element);\n\t\tif(this.options.animateCursor) {\n\t\t\tthis._cursorAnimation = window.requestAnimationFrame(this._cursorAnimationFrame.bind(this));\n\t\t}\n\t};\n\n\tTypewriterPrototype._pauseCursorAnimation = function() {\n\t\tif(!this._settings.cursorAnimationPaused) {\n\t\t\twindow.cancelAnimationFrame(this._cursorAnimation);\n\t\t\tthis._settings.cursorAnimationPaused = true;\n\t\t}\n\t};\n\n\tTypewriterPrototype._restartCursorAnimation = function() {\n\t\tif(!this._settings.cursorAnimationPaused) {\n\t\t\treturn console.error('Cursor animation is already running.')\n\t\t}\n\n\t\tthis._settings.cursorAnimationPaused = false;\n\t\tthis._cursorAnimation = window.requestAnimationFrame(this._cursorAnimationFrame.bind(this));\n\t};\n\n\t/* Utils */\n\tTypewriterPrototype._randomInteger = function(min, max) {\n\t\treturn Math.floor(Math.random() * (max - min + 1)) + min;\n\t};\n\n\tTypewriterPrototype._randomID = function() {\n\t\tvar text = \"\";\n \tvar possible = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\";\n\n \tfor( var i=0; i < this._randomInteger(5, 15); i++ ) {\n \t\ttext += possible.charAt(Math.floor(Math.random() * possible.length));\n\t\t}\n \treturn text;\n\t};\n\n\tTypewriterPrototype._generateUniqueID = function() {\n\t\tvar temp_id = this._randomID();\n\t\tif(this._settings.usedIDs.indexOf(temp_id) == -1) {\n\t\t\tthis._settings.usedIDs.push(temp_id);\n\t\t\treturn temp_id;\n\t\t}\n\t\treturn this._generateUniqueID.call(this);\n\t};\n\n\n})();","/*! UIkit 3.0.0-rc.5 | http://www.getuikit.com | (c) 2014 - 2017 YOOtheme | MIT License */\n\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n typeof define === 'function' && define.amd ? define('uikit', factory) :\n (global.UIkit = factory());\n}(this, (function () { 'use strict';\n\n function bind(fn, context) {\n return function (a) {\n var l = arguments.length;\n return l ? l > 1 ? fn.apply(context, arguments) : fn.call(context, a) : fn.call(context);\n };\n }\n\n var ref = Object.prototype;\n var hasOwnProperty = ref.hasOwnProperty;\n\n function hasOwn(obj, key) {\n return hasOwnProperty.call(obj, key);\n }\n\n var hyphenateCache = {};\n var hyphenateRe = /([a-z\\d])([A-Z])/g;\n\n function hyphenate(str) {\n\n if (!(str in hyphenateCache)) {\n hyphenateCache[str] = str\n .replace(hyphenateRe, '$1-$2')\n .toLowerCase();\n }\n\n return hyphenateCache[str];\n }\n\n var camelizeRe = /-(\\w)/g;\n\n function camelize(str) {\n return str.replace(camelizeRe, toUpper);\n }\n\n function toUpper(_, c) {\n return c ? c.toUpperCase() : '';\n }\n\n function ucfirst(str) {\n return str.length ? toUpper(null, str.charAt(0)) + str.slice(1) : '';\n }\n\n var strPrototype = String.prototype;\n var startsWithFn = strPrototype.startsWith || function (search) { return this.lastIndexOf(search, 0) === 0; };\n\n function startsWith(str, search) {\n return startsWithFn.call(str, search);\n }\n\n var endsWithFn = strPrototype.endsWith || function (search) { return this.substr(-search.length) === search; };\n\n function endsWith(str, search) {\n return endsWithFn.call(str, search);\n }\n\n var includesFn = function (search) { return ~this.indexOf(search); };\n var includesStr = strPrototype.includes || includesFn;\n var includesArray = Array.prototype.includes || includesFn;\n\n function includes(obj, search) {\n return obj && (isString(obj) ? includesStr : includesArray).call(obj, search);\n }\n\n var isArray = Array.isArray;\n\n function isFunction(obj) {\n return typeof obj === 'function';\n }\n\n function isObject(obj) {\n return obj !== null && typeof obj === 'object';\n }\n\n function isPlainObject(obj) {\n return isObject(obj) && Object.getPrototypeOf(obj) === Object.prototype;\n }\n\n function isWindow(obj) {\n return isObject(obj) && obj === obj.window;\n }\n\n function isDocument(obj) {\n return isObject(obj) && obj.nodeType === 9;\n }\n\n function isJQuery(obj) {\n return isObject(obj) && !!obj.jquery;\n }\n\n function isNode(element) {\n return element instanceof Node || isObject(element) && element.nodeType === 1;\n }\n\n function isNodeCollection(element) {\n return element instanceof NodeList || element instanceof HTMLCollection;\n }\n\n function isBoolean(value) {\n return typeof value === 'boolean';\n }\n\n function isString(value) {\n return typeof value === 'string';\n }\n\n function isNumber(value) {\n return typeof value === 'number';\n }\n\n function isNumeric(value) {\n return isNumber(value) || isString(value) && !isNaN(value - parseFloat(value));\n }\n\n function isUndefined(value) {\n return value === void 0;\n }\n\n function toBoolean(value) {\n return isBoolean(value)\n ? value\n : value === 'true' || value === '1' || value === ''\n ? true\n : value === 'false' || value === '0'\n ? false\n : value;\n }\n\n function toNumber(value) {\n var number = Number(value);\n return !isNaN(number) ? number : false;\n }\n\n function toFloat(value) {\n return parseFloat(value) || 0;\n }\n\n function toNode(element) {\n return isNode(element) || isWindow(element) || isDocument(element)\n ? element\n : isNodeCollection(element) || isJQuery(element)\n ? element[0]\n : isArray(element)\n ? toNode(element[0])\n : null;\n }\n\n var arrayProto = Array.prototype;\n function toNodes(element) {\n return isNode(element)\n ? [element]\n : isNodeCollection(element)\n ? arrayProto.slice.call(element)\n : isArray(element)\n ? element.map(toNode).filter(Boolean)\n : isJQuery(element)\n ? element.toArray()\n : [];\n }\n\n function toList(value) {\n return isArray(value)\n ? value\n : isString(value)\n ? value.split(/,(?![^(]*\\))/).map(function (value) { return isNumeric(value)\n ? toNumber(value)\n : toBoolean(value.trim()); })\n : [value];\n }\n\n function toMs(time) {\n return !time\n ? 0\n : endsWith(time, 'ms')\n ? toFloat(time)\n : toFloat(time) * 1000;\n }\n\n function swap(value, a, b) {\n return value.replace(new RegExp((a + \"|\" + b), 'mg'), function (match) {\n return match === a ? b : a;\n });\n }\n\n var assign = Object.assign || function (target) {\n var args = [], len = arguments.length - 1;\n while ( len-- > 0 ) args[ len ] = arguments[ len + 1 ];\n\n target = Object(target);\n for (var i = 0; i < args.length; i++) {\n var source = args[i];\n if (source !== null) {\n for (var key in source) {\n if (hasOwn(source, key)) {\n target[key] = source[key];\n }\n }\n }\n }\n return target;\n };\n\n function each(obj, cb) {\n for (var key in obj) {\n cb.call(obj[key], obj[key], key);\n }\n }\n\n function sortBy(collection, prop) {\n return collection.sort(function (a, b) { return a[prop] > b[prop]\n ? 1\n : b[prop] > a[prop]\n ? -1\n : 0; }\n );\n }\n\n function clamp(number, min, max) {\n if ( min === void 0 ) min = 0;\n if ( max === void 0 ) max = 1;\n\n return Math.min(Math.max(number, min), max);\n }\n\n function noop() {}\n\n function intersectRect(r1, r2) {\n return r1.left <= r2.right &&\n r2.left <= r1.right &&\n r1.top <= r2.bottom &&\n r2.top <= r1.bottom;\n }\n\n function pointInRect(point, rect) {\n return intersectRect({top: point.y, bottom: point.y, left: point.x, right: point.x}, rect);\n }\n\n var Dimensions = {\n\n ratio: function(dimensions, prop, value) {\n var obj;\n\n\n var aProp = prop === 'width' ? 'height' : 'width';\n\n return ( obj = {}, obj[aProp] = Math.round(value * dimensions[aProp] / dimensions[prop]), obj[prop] = value, obj );\n },\n\n contain: function(dimensions, maxDimensions) {\n var this$1 = this;\n\n dimensions = assign({}, dimensions);\n\n each(dimensions, function (_, prop) { return dimensions = dimensions[prop] > maxDimensions[prop]\n ? this$1.ratio(dimensions, prop, maxDimensions[prop])\n : dimensions; }\n );\n\n return dimensions;\n },\n\n cover: function(dimensions, maxDimensions) {\n var this$1 = this;\n\n dimensions = this.contain(dimensions, maxDimensions);\n\n each(dimensions, function (_, prop) { return dimensions = dimensions[prop] < maxDimensions[prop]\n ? this$1.ratio(dimensions, prop, maxDimensions[prop])\n : dimensions; }\n );\n\n return dimensions;\n }\n\n };\n\n function attr(element, name, value) {\n\n if (isObject(name)) {\n for (var key in name) {\n attr(element, key, name[key]);\n }\n return;\n }\n\n if (isUndefined(value)) {\n element = toNode(element);\n return element && element.getAttribute(name);\n } else {\n toNodes(element).forEach(function (element) {\n\n if (isFunction(value)) {\n value = value.call(element, attr(element, name));\n }\n\n if (value === null) {\n removeAttr(element, name);\n } else {\n element.setAttribute(name, value);\n }\n });\n }\n\n }\n\n function hasAttr(element, name) {\n return toNodes(element).some(function (element) { return element.hasAttribute(name); });\n }\n\n function removeAttr(element, name) {\n element = toNodes(element);\n name.split(' ').forEach(function (name) { return element.forEach(function (element) { return element.removeAttribute(name); }\n ); }\n );\n }\n\n function filterAttr(element, attribute, pattern, replacement) {\n attr(element, attribute, function (value) { return value ? value.replace(pattern, replacement) : value; });\n }\n\n function data(element, attribute) {\n for (var i = 0, attrs = [attribute, (\"data-\" + attribute)]; i < attrs.length; i++) {\n if (hasAttr(element, attrs[i])) {\n return attr(element, attrs[i]);\n }\n }\n }\n\n function query(selector, context) {\n return toNode(selector) || find(selector, isContextSelector(selector) ? context : document);\n }\n\n function queryAll(selector, context) {\n var nodes = toNodes(selector);\n return nodes.length && nodes || findAll(selector, isContextSelector(selector) ? context : document);\n }\n\n function find(selector, context) {\n return toNode(_query(selector, context, 'querySelector'));\n }\n\n function findAll(selector, context) {\n return toNodes(_query(selector, context, 'querySelectorAll'));\n }\n\n function _query(selector, context, queryFn) {\n if ( context === void 0 ) context = document;\n\n\n if (!selector || !isString(selector)) {\n return null;\n }\n\n selector = selector.replace(contextSanitizeRe, '$1 *');\n\n var removes;\n\n if (isContextSelector(selector)) {\n\n removes = [];\n\n selector = selector.split(',').map(function (selector, i) {\n\n var ctx = context;\n\n selector = selector.trim();\n\n if (selector[0] === '!') {\n\n var selectors = selector.substr(1).trim().split(' ');\n ctx = closest(context.parentNode, selectors[0]);\n selector = selectors.slice(1).join(' ').trim();\n\n }\n\n if (selector[0] === '-') {\n\n var selectors$1 = selector.substr(1).trim().split(' ');\n var prev = (ctx || context).previousElementSibling;\n ctx = matches(prev, selector.substr(1)) ? prev : null;\n selector = selectors$1.slice(1).join(' ');\n\n }\n\n if (!ctx) {\n return null;\n }\n\n if (!ctx.id) {\n ctx.id = \"uk-\" + (Date.now()) + i;\n removes.push(function () { return removeAttr(ctx, 'id'); });\n }\n\n return (\"#\" + (escape(ctx.id)) + \" \" + selector);\n\n }).filter(Boolean).join(',');\n\n context = document;\n\n }\n\n try {\n\n return context[queryFn](selector);\n\n } catch (e) {\n\n return null;\n\n } finally {\n\n removes && removes.forEach(function (remove) { return remove(); });\n\n }\n\n }\n\n var contextSelectorRe = /(^|,)\\s*[!>+~-]/;\n var contextSanitizeRe = /([!>+~-])(?=\\s+[!>+~-]|\\s*$)/g;\n\n function isContextSelector(selector) {\n return isString(selector) && selector.match(contextSelectorRe);\n }\n\n var elProto = Element.prototype;\n var matchesFn = elProto.matches || elProto.webkitMatchesSelector || elProto.msMatchesSelector;\n\n function matches(element, selector) {\n return toNodes(element).some(function (element) { return matchesFn.call(element, selector); });\n }\n\n var closestFn = elProto.closest || function (selector) {\n var ancestor = this;\n\n do {\n\n if (matches(ancestor, selector)) {\n return ancestor;\n }\n\n ancestor = ancestor.parentNode;\n\n } while (ancestor && ancestor.nodeType === 1);\n };\n\n function closest(element, selector) {\n\n if (startsWith(selector, '>')) {\n selector = selector.slice(1);\n }\n\n return isNode(element)\n ? element.parentNode && closestFn.call(element, selector)\n : toNodes(element).map(function (element) { return element.parentNode && closestFn.call(element, selector); }).filter(Boolean);\n }\n\n function parents(element, selector) {\n var elements = [];\n var parent = toNode(element).parentNode;\n\n while (parent && parent.nodeType === 1) {\n\n if (matches(parent, selector)) {\n elements.push(parent);\n }\n\n parent = parent.parentNode;\n }\n\n return elements;\n }\n\n var escapeFn = window.CSS && CSS.escape || function (css) { return css.replace(/([^\\x7f-\\uFFFF\\w-])/g, function (match) { return (\"\\\\\" + match); }); };\n function escape(css) {\n return isString(css) ? escapeFn.call(null, css) : '';\n }\n\n var voidElements = {\n area: true,\n base: true,\n br: true,\n col: true,\n embed: true,\n hr: true,\n img: true,\n input: true,\n keygen: true,\n link: true,\n menuitem: true,\n meta: true,\n param: true,\n source: true,\n track: true,\n wbr: true\n };\n function isVoidElement(element) {\n return toNodes(element).some(function (element) { return voidElements[element.tagName.toLowerCase()]; });\n }\n\n function isVisible(element) {\n return toNodes(element).some(function (element) { return element.offsetWidth || element.offsetHeight || element.getClientRects().length; });\n }\n\n var selInput = 'input,select,textarea,button';\n function isInput(element) {\n return toNodes(element).some(function (element) { return matches(element, selInput); });\n }\n\n function filter(element, selector) {\n return toNodes(element).filter(function (element) { return matches(element, selector); });\n }\n\n function within(element, selector) {\n return !isString(selector)\n ? element === selector || (isDocument(selector)\n ? selector.documentElement\n : toNode(selector)).contains(toNode(element)) // IE 11 document does not implement contains\n : matches(element, selector) || closest(element, selector);\n }\n\n function on() {\n var args = [], len = arguments.length;\n while ( len-- ) args[ len ] = arguments[ len ];\n\n\n var ref = getArgs(args);\n var target = ref[0];\n var type = ref[1];\n var selector = ref[2];\n var listener = ref[3];\n var useCapture = ref[4];\n\n target = toEventTarget(target);\n\n if (selector) {\n listener = delegate(target, selector, listener);\n }\n\n if (listener.length > 1) {\n listener = detail(listener);\n }\n\n type.split(' ').forEach(function (type) { return target && target.addEventListener(type, listener, useCapture); });\n return function () { return off(target, type, listener, useCapture); };\n }\n\n function off(target, type, listener, useCapture) {\n if ( useCapture === void 0 ) useCapture = false;\n\n target = toEventTarget(target);\n target && type.split(' ').forEach(function (type) { return target.removeEventListener(type, listener, useCapture); });\n }\n\n function once() {\n var args = [], len = arguments.length;\n while ( len-- ) args[ len ] = arguments[ len ];\n\n\n var ref = getArgs(args);\n var element = ref[0];\n var type = ref[1];\n var selector = ref[2];\n var listener = ref[3];\n var useCapture = ref[4];\n var condition = ref[5];\n var off = on(element, type, selector, function (e) {\n var result = !condition || condition(e);\n if (result) {\n off();\n listener(e, result);\n }\n }, useCapture);\n\n return off;\n }\n\n function trigger(target, event, detail) {\n return toEventTargets(target).reduce(function (notCanceled, target) { return notCanceled && target.dispatchEvent(createEvent(event, true, true, detail)); }\n , true);\n }\n\n function createEvent(e, bubbles, cancelable, detail) {\n if ( bubbles === void 0 ) bubbles = true;\n if ( cancelable === void 0 ) cancelable = false;\n\n if (isString(e)) {\n var event = document.createEvent('CustomEvent'); // IE 11\n event.initCustomEvent(e, bubbles, cancelable, detail);\n e = event;\n }\n\n return e;\n }\n\n function getArgs(args) {\n\n if (isString(args[0])) {\n args[0] = find(args[0]);\n }\n\n if (isFunction(args[2])) {\n args.splice(2, 0, false);\n }\n return args;\n }\n\n function delegate(element, selector, listener) {\n var this$1 = this;\n\n return function (e) {\n\n var target = e.target;\n var current = selector[0] === '>'\n ? findAll(selector, element).reverse().filter(function (element) { return within(target, element); })[0]\n : closest(target, selector);\n\n if (current) {\n e.delegate = element;\n e.current = current;\n\n listener.call(this$1, e);\n }\n };\n }\n\n function detail(listener) {\n return function (e) { return isArray(e.detail) ? listener.apply(void 0, [e].concat(e.detail)) : listener(e); };\n }\n\n function isEventTarget(target) {\n return 'EventTarget' in window\n ? target instanceof EventTarget\n : target && 'addEventListener' in target;\n }\n\n function toEventTarget(target) {\n return isEventTarget(target) ? target : toNode(target);\n }\n\n function toEventTargets(target) {\n return isEventTarget(target)\n ? [target]\n : isArray(target)\n ? target.map(toEventTarget).filter(Boolean)\n : toNodes(target);\n }\n\n function preventClick() {\n\n var timer = setTimeout(once(document, 'click', function (e) {\n\n e.preventDefault();\n e.stopImmediatePropagation();\n\n clearTimeout(timer);\n\n }, true));\n\n trigger(document, 'touchcancel');\n\n }\n\n /* global setImmediate */\n\n var Promise$1 = 'Promise' in window ? window.Promise : PromiseFn;\n\n var Deferred = function() {\n var this$1 = this;\n\n this.promise = new Promise$1(function (resolve, reject) {\n this$1.reject = reject;\n this$1.resolve = resolve;\n });\n };\n\n /**\n * Promises/A+ polyfill v1.1.4 (https://github.com/bramstein/promis)\n */\n\n var RESOLVED = 0;\n var REJECTED = 1;\n var PENDING = 2;\n\n var async = 'setImmediate' in window ? setImmediate : setTimeout;\n\n function PromiseFn(executor) {\n\n this.state = PENDING;\n this.value = undefined;\n this.deferred = [];\n\n var promise = this;\n\n try {\n executor(\n function (x) {\n promise.resolve(x);\n },\n function (r) {\n promise.reject(r);\n }\n );\n } catch (e) {\n promise.reject(e);\n }\n }\n\n PromiseFn.reject = function (r) {\n return new PromiseFn(function (resolve, reject) {\n reject(r);\n });\n };\n\n PromiseFn.resolve = function (x) {\n return new PromiseFn(function (resolve, reject) {\n resolve(x);\n });\n };\n\n PromiseFn.all = function all(iterable) {\n return new PromiseFn(function (resolve, reject) {\n var result = [];\n var count = 0;\n\n if (iterable.length === 0) {\n resolve(result);\n }\n\n function resolver(i) {\n return function (x) {\n result[i] = x;\n count += 1;\n\n if (count === iterable.length) {\n resolve(result);\n }\n };\n }\n\n for (var i = 0; i < iterable.length; i += 1) {\n PromiseFn.resolve(iterable[i]).then(resolver(i), reject);\n }\n });\n };\n\n PromiseFn.race = function race(iterable) {\n return new PromiseFn(function (resolve, reject) {\n for (var i = 0; i < iterable.length; i += 1) {\n PromiseFn.resolve(iterable[i]).then(resolve, reject);\n }\n });\n };\n\n var p = PromiseFn.prototype;\n\n p.resolve = function resolve(x) {\n var promise = this;\n\n if (promise.state === PENDING) {\n if (x === promise) {\n throw new TypeError('Promise settled with itself.');\n }\n\n var called = false;\n\n try {\n var then = x && x.then;\n\n if (x !== null && isObject(x) && isFunction(then)) {\n then.call(\n x,\n function (x) {\n if (!called) {\n promise.resolve(x);\n }\n called = true;\n },\n function (r) {\n if (!called) {\n promise.reject(r);\n }\n called = true;\n }\n );\n return;\n }\n } catch (e) {\n if (!called) {\n promise.reject(e);\n }\n return;\n }\n\n promise.state = RESOLVED;\n promise.value = x;\n promise.notify();\n }\n };\n\n p.reject = function reject(reason) {\n var promise = this;\n\n if (promise.state === PENDING) {\n if (reason === promise) {\n throw new TypeError('Promise settled with itself.');\n }\n\n promise.state = REJECTED;\n promise.value = reason;\n promise.notify();\n }\n };\n\n p.notify = function notify() {\n var this$1 = this;\n\n async(function () {\n if (this$1.state !== PENDING) {\n while (this$1.deferred.length) {\n var ref = this$1.deferred.shift();\n var onResolved = ref[0];\n var onRejected = ref[1];\n var resolve = ref[2];\n var reject = ref[3];\n\n try {\n if (this$1.state === RESOLVED) {\n if (isFunction(onResolved)) {\n resolve(onResolved.call(undefined, this$1.value));\n } else {\n resolve(this$1.value);\n }\n } else if (this$1.state === REJECTED) {\n if (isFunction(onRejected)) {\n resolve(onRejected.call(undefined, this$1.value));\n } else {\n reject(this$1.value);\n }\n }\n } catch (e) {\n reject(e);\n }\n }\n }\n });\n };\n\n p.then = function then(onResolved, onRejected) {\n var this$1 = this;\n\n return new PromiseFn(function (resolve, reject) {\n this$1.deferred.push([onResolved, onRejected, resolve, reject]);\n this$1.notify();\n });\n };\n\n p.catch = function (onRejected) {\n return this.then(undefined, onRejected);\n };\n\n function ajax(url, options) {\n return new Promise$1(function (resolve, reject) {\n\n var env = assign({\n data: null,\n method: 'GET',\n headers: {},\n xhr: new XMLHttpRequest(),\n beforeSend: noop,\n responseType: ''\n }, options);\n\n env.beforeSend(env);\n\n var xhr = env.xhr;\n\n for (var prop in env) {\n if (prop in xhr) {\n try {\n\n xhr[prop] = env[prop];\n\n } catch (e) {}\n }\n }\n\n xhr.open(env.method.toUpperCase(), url);\n\n for (var header in env.headers) {\n xhr.setRequestHeader(header, env.headers[header]);\n }\n\n on(xhr, 'load', function () {\n\n if (xhr.status === 0 || xhr.status >= 200 && xhr.status < 300 || xhr.status === 304) {\n resolve(xhr);\n } else {\n reject(assign(Error(xhr.statusText), {\n xhr: xhr,\n status: xhr.status\n }));\n }\n\n });\n\n on(xhr, 'error', function () { return reject(assign(Error('Network Error'), {xhr: xhr})); });\n on(xhr, 'timeout', function () { return reject(assign(Error('Network Timeout'), {xhr: xhr})); });\n\n xhr.send(env.data);\n });\n }\n\n function getImage(src, srcset, sizes) {\n\n return new Promise$1(function (resolve, reject) {\n var img = new Image();\n\n img.onerror = reject;\n img.onload = function () { return resolve(img); };\n\n img.src = src;\n srcset && (img.srcset = srcset);\n sizes && (img.sizes = sizes);\n });\n\n }\n\n function isReady() {\n return document.readyState === 'complete' || document.readyState !== 'loading' && !document.documentElement.doScroll;\n }\n\n function ready(fn) {\n\n if (isReady()) {\n fn();\n return;\n }\n\n var handle = function () {\n unbind1();\n unbind2();\n fn();\n };\n var unbind1 = on(document, 'DOMContentLoaded', handle);\n var unbind2 = on(window, 'load', handle);\n }\n\n function index(element, ref) {\n return ref\n ? toNodes(element).indexOf(toNode(ref))\n : toNodes((element = toNode(element)) && element.parentNode.children).indexOf(element);\n }\n\n function getIndex(i, elements, current, finite) {\n if ( current === void 0 ) current = 0;\n if ( finite === void 0 ) finite = false;\n\n\n elements = toNodes(elements);\n\n var length = elements.length;\n\n i = isNumeric(i)\n ? toNumber(i)\n : i === 'next'\n ? current + 1\n : i === 'previous'\n ? current - 1\n : index(elements, i);\n\n if (finite) {\n return clamp(i, 0, length - 1);\n }\n\n i %= length;\n\n return i < 0 ? i + length : i;\n }\n\n function empty(element) {\n element = toNode(element);\n element.innerHTML = '';\n return element;\n }\n\n function html(parent, html) {\n parent = toNode(parent);\n return isUndefined(html)\n ? parent.innerHTML\n : append(parent.hasChildNodes() ? empty(parent) : parent, html);\n }\n\n function prepend(parent, element) {\n\n parent = toNode(parent);\n\n if (!parent.hasChildNodes()) {\n return append(parent, element);\n } else {\n return insertNodes(element, function (element) { return parent.insertBefore(element, parent.firstChild); });\n }\n }\n\n function append(parent, element) {\n parent = toNode(parent);\n return insertNodes(element, function (element) { return parent.appendChild(element); });\n }\n\n function before(ref, element) {\n ref = toNode(ref);\n return insertNodes(element, function (element) { return ref.parentNode.insertBefore(element, ref); });\n }\n\n function after(ref, element) {\n ref = toNode(ref);\n return insertNodes(element, function (element) { return ref.nextSibling\n ? before(ref.nextSibling, element)\n : append(ref.parentNode, element); }\n );\n }\n\n function insertNodes(element, fn) {\n element = isString(element) ? fragment(element) : element;\n return element\n ? 'length' in element\n ? toNodes(element).map(fn)\n : fn(element)\n : null;\n }\n\n function remove(element) {\n toNodes(element).map(function (element) { return element.parentNode && element.parentNode.removeChild(element); });\n }\n\n function wrapAll(element, structure) {\n\n structure = toNode(before(element, structure));\n\n while (structure.firstChild) {\n structure = structure.firstChild;\n }\n\n append(structure, element);\n\n return structure;\n }\n\n function wrapInner(element, structure) {\n return toNodes(toNodes(element).map(function (element) { return element.hasChildNodes ? wrapAll(toNodes(element.childNodes), structure) : append(element, structure); }\n ));\n }\n\n function unwrap(element) {\n toNodes(element)\n .map(function (element) { return element.parentNode; })\n .filter(function (value, index, self) { return self.indexOf(value) === index; })\n .forEach(function (parent) {\n before(parent, parent.childNodes);\n remove(parent);\n });\n }\n\n var fragmentRe = /^\\s*<(\\w+|!)[^>]*>/;\n var singleTagRe = /^<(\\w+)\\s*\\/?>(?:<\\/\\1>)?$/;\n\n function fragment(html) {\n\n var matches = singleTagRe.exec(html);\n if (matches) {\n return document.createElement(matches[1]);\n }\n\n var container = document.createElement('div');\n if (fragmentRe.test(html)) {\n container.insertAdjacentHTML('beforeend', html.trim());\n } else {\n container.textContent = html;\n }\n\n return container.childNodes.length > 1 ? toNodes(container.childNodes) : container.firstChild;\n\n }\n\n function apply(node, fn) {\n\n if (!node || node.nodeType !== 1) {\n return;\n }\n\n fn(node);\n node = node.firstElementChild;\n while (node) {\n apply(node, fn);\n node = node.nextElementSibling;\n }\n }\n\n function addClass(element) {\n var args = [], len = arguments.length - 1;\n while ( len-- > 0 ) args[ len ] = arguments[ len + 1 ];\n\n apply$1(element, args, 'add');\n }\n\n function removeClass(element) {\n var args = [], len = arguments.length - 1;\n while ( len-- > 0 ) args[ len ] = arguments[ len + 1 ];\n\n apply$1(element, args, 'remove');\n }\n\n function removeClasses(element, cls) {\n filterAttr(element, 'class', new RegExp((\"(^|\\\\s)\" + cls + \"(?!\\\\S)\"), 'g'), '');\n }\n\n function replaceClass(element) {\n var args = [], len = arguments.length - 1;\n while ( len-- > 0 ) args[ len ] = arguments[ len + 1 ];\n\n args[0] && removeClass(element, args[0]);\n args[1] && addClass(element, args[1]);\n }\n\n function hasClass(element, cls) {\n return toNodes(element).some(function (element) { return element.classList.contains(cls); });\n }\n\n function toggleClass(element) {\n var args = [], len = arguments.length - 1;\n while ( len-- > 0 ) args[ len ] = arguments[ len + 1 ];\n\n\n if (!args.length) {\n return;\n }\n\n args = getArgs$1(args);\n\n var force = !isString(args[args.length - 1]) ? args.pop() : []; // in iOS 9.3 force === undefined evaluates to false\n\n args = args.filter(Boolean);\n\n toNodes(element).forEach(function (ref) {\n var classList = ref.classList;\n\n for (var i = 0; i < args.length; i++) {\n supports.Force\n ? classList.toggle.apply(classList, [args[i]].concat(force))\n : (classList[(!isUndefined(force) ? force : !classList.contains(args[i])) ? 'add' : 'remove'](args[i]));\n }\n });\n\n }\n\n function apply$1(element, args, fn) {\n args = getArgs$1(args).filter(Boolean);\n\n args.length && toNodes(element).forEach(function (ref) {\n var classList = ref.classList;\n\n supports.Multiple\n ? classList[fn].apply(classList, args)\n : args.forEach(function (cls) { return classList[fn](cls); });\n });\n }\n\n function getArgs$1(args) {\n return args.reduce(function (args, arg) { return args.concat.call(args, isString(arg) && includes(arg, ' ') ? arg.trim().split(' ') : arg); }\n , []);\n }\n\n var supports = {};\n\n // IE 11\n (function () {\n\n var list = document.createElement('_').classList;\n if (list) {\n list.add('a', 'b');\n list.toggle('c', false);\n supports.Multiple = list.contains('b');\n supports.Force = !list.contains('c');\n }\n list = null;\n\n })();\n\n var cssNumber = {\n 'animation-iteration-count': true,\n 'column-count': true,\n 'fill-opacity': true,\n 'flex-grow': true,\n 'flex-shrink': true,\n 'font-weight': true,\n 'line-height': true,\n 'opacity': true,\n 'order': true,\n 'orphans': true,\n 'widows': true,\n 'z-index': true,\n 'zoom': true\n };\n\n function css(element, property, value) {\n\n return toNodes(element).map(function (element) {\n\n if (isString(property)) {\n\n property = propName(property);\n\n if (isUndefined(value)) {\n return getStyle(element, property);\n } else if (!value && value !== 0) {\n element.style.removeProperty(property);\n } else {\n element.style[property] = isNumeric(value) && !cssNumber[property] ? (value + \"px\") : value;\n }\n\n } else if (isArray(property)) {\n\n var styles = getStyles(element);\n\n return property.reduce(function (props, property) {\n props[property] = styles[propName(property)];\n return props;\n }, {});\n\n } else if (isObject(property)) {\n each(property, function (value, property) { return css(element, property, value); });\n }\n\n return element;\n\n })[0];\n\n }\n\n function getStyles(element, pseudoElt) {\n element = toNode(element);\n return element.ownerDocument.defaultView.getComputedStyle(element, pseudoElt);\n }\n\n function getStyle(element, property, pseudoElt) {\n return getStyles(element, pseudoElt)[property];\n }\n\n var vars = {};\n\n function getCssVar(name) {\n\n if (!(name in vars)) {\n\n /* usage in css: .var-name:before { content:\"xyz\" } */\n\n var element = append(document.documentElement, document.createElement('div'));\n\n addClass(element, (\"var-\" + name));\n\n try {\n\n vars[name] = getStyle(element, 'content', ':before').replace(/^[\"'](.*)[\"']$/, '$1');\n vars[name] = JSON.parse(vars[name]);\n\n } catch (e) {}\n\n document.documentElement.removeChild(element);\n\n }\n\n return vars[name];\n\n }\n\n var cssProps = {};\n\n function propName(name) {\n\n var ret = cssProps[name];\n if (!ret) {\n ret = cssProps[name] = vendorPropName(name) || name;\n }\n return ret;\n }\n\n var cssPrefixes = ['webkit', 'moz', 'ms'];\n var ref$1 = document.createElement('_');\n var style = ref$1.style;\n\n function vendorPropName(name) {\n\n name = hyphenate(name);\n\n if (name in style) {\n return name;\n }\n\n var i = cssPrefixes.length, prefixedName;\n\n while (i--) {\n prefixedName = \"-\" + (cssPrefixes[i]) + \"-\" + name;\n if (prefixedName in style) {\n return prefixedName;\n }\n }\n }\n\n function transition(element, props, duration, timing) {\n if ( duration === void 0 ) duration = 400;\n if ( timing === void 0 ) timing = 'linear';\n\n\n return Promise$1.all(toNodes(element).map(function (element) { return new Promise$1(function (resolve, reject) {\n\n for (var name in props) {\n var value = css(element, name);\n if (value === '') {\n css(element, name, value);\n }\n }\n\n var timer = setTimeout(function () { return trigger(element, 'transitionend'); }, duration);\n\n once(element, 'transitionend transitioncanceled', function (ref) {\n var type = ref.type;\n\n clearTimeout(timer);\n removeClass(element, 'uk-transition');\n css(element, {\n 'transition-property': '',\n 'transition-duration': '',\n 'transition-timing-function': ''\n });\n type === 'transitioncanceled' ? reject() : resolve();\n }, false, function (ref) {\n var target = ref.target;\n\n return element === target;\n });\n\n addClass(element, 'uk-transition');\n css(element, assign({\n 'transition-property': Object.keys(props).map(propName).join(','),\n 'transition-duration': (duration + \"ms\"),\n 'transition-timing-function': timing\n }, props));\n\n }); }\n ));\n\n }\n\n var Transition = {\n\n start: transition,\n\n stop: function(element) {\n trigger(element, 'transitionend');\n return Promise$1.resolve();\n },\n\n cancel: function(element) {\n trigger(element, 'transitioncanceled');\n },\n\n inProgress: function(element) {\n return hasClass(element, 'uk-transition');\n }\n\n };\n\n var animationPrefix = 'uk-animation-';\n var clsCancelAnimation = 'uk-cancel-animation';\n\n function animate(element, animation, duration, origin, out) {\n var arguments$1 = arguments;\n if ( duration === void 0 ) duration = 200;\n\n\n return Promise$1.all(toNodes(element).map(function (element) { return new Promise$1(function (resolve, reject) {\n\n if (hasClass(element, clsCancelAnimation)) {\n requestAnimationFrame(function () { return Promise$1.resolve().then(function () { return animate.apply(void 0, arguments$1).then(resolve, reject); }\n ); }\n );\n return;\n }\n\n var cls = animation + \" \" + animationPrefix + (out ? 'leave' : 'enter');\n\n if (startsWith(animation, animationPrefix)) {\n\n if (origin) {\n cls += \" uk-transform-origin-\" + origin;\n }\n\n if (out) {\n cls += \" \" + animationPrefix + \"reverse\";\n }\n\n }\n\n reset();\n\n once(element, 'animationend animationcancel', function (ref) {\n var type = ref.type;\n\n\n var hasReset = false;\n\n if (type === 'animationcancel') {\n reject();\n reset();\n } else {\n resolve();\n Promise$1.resolve().then(function () {\n hasReset = true;\n reset();\n });\n }\n\n requestAnimationFrame(function () {\n if (!hasReset) {\n addClass(element, clsCancelAnimation);\n\n requestAnimationFrame(function () { return removeClass(element, clsCancelAnimation); });\n }\n });\n\n }, false, function (ref) {\n var target = ref.target;\n\n return element === target;\n });\n\n css(element, 'animationDuration', (duration + \"ms\"));\n addClass(element, cls);\n\n function reset() {\n css(element, 'animationDuration', '');\n removeClasses(element, (animationPrefix + \"\\\\S*\"));\n }\n\n }); }\n ));\n\n }\n\n var inProgress = new RegExp((animationPrefix + \"(enter|leave)\"));\n var Animation = {\n\n in: function(element, animation, duration, origin) {\n return animate(element, animation, duration, origin, false);\n },\n\n out: function(element, animation, duration, origin) {\n return animate(element, animation, duration, origin, true);\n },\n\n inProgress: function(element) {\n return inProgress.test(attr(element, 'class'));\n },\n\n cancel: function(element) {\n trigger(element, 'animationcancel');\n }\n\n };\n\n function $(selector, context) {\n return !isString(selector)\n ? toNode(selector)\n : isHtml(selector)\n ? toNode(fragment(selector))\n : find(selector, context);\n }\n\n function $$(selector, context) {\n return !isString(selector)\n ? toNodes(selector)\n : isHtml(selector)\n ? toNodes(fragment(selector))\n : findAll(selector, context);\n }\n\n function isHtml(str) {\n return str[0] === '<' || str.match(/^\\s*</);\n }\n\n var dirs = {\n width: ['x', 'left', 'right'],\n height: ['y', 'top', 'bottom']\n };\n\n function positionAt(element, target, elAttach, targetAttach, elOffset, targetOffset, flip, boundary) {\n\n elAttach = getPos(elAttach);\n targetAttach = getPos(targetAttach);\n\n var flipped = {element: elAttach, target: targetAttach};\n\n if (!element || !target) {\n return flipped;\n }\n\n var dim = getDimensions(element);\n var targetDim = getDimensions(target);\n var position = targetDim;\n\n moveTo(position, elAttach, dim, -1);\n moveTo(position, targetAttach, targetDim, 1);\n\n elOffset = getOffsets(elOffset, dim.width, dim.height);\n targetOffset = getOffsets(targetOffset, targetDim.width, targetDim.height);\n\n elOffset['x'] += targetOffset['x'];\n elOffset['y'] += targetOffset['y'];\n\n position.left += elOffset['x'];\n position.top += elOffset['y'];\n\n boundary = getDimensions(boundary || window$1(element));\n\n if (flip) {\n each(dirs, function (ref, prop) {\n var dir = ref[0];\n var align = ref[1];\n var alignFlip = ref[2];\n\n\n if (!(flip === true || includes(flip, dir))) {\n return;\n }\n\n var elemOffset = elAttach[dir] === align\n ? -dim[prop]\n : elAttach[dir] === alignFlip\n ? dim[prop]\n : 0;\n\n var targetOffset = targetAttach[dir] === align\n ? targetDim[prop]\n : targetAttach[dir] === alignFlip\n ? -targetDim[prop]\n : 0;\n\n if (position[align] < boundary[align] || position[align] + dim[prop] > boundary[alignFlip]) {\n\n var centerOffset = dim[prop] / 2;\n var centerTargetOffset = targetAttach[dir] === 'center' ? -targetDim[prop] / 2 : 0;\n\n elAttach[dir] === 'center' && (\n apply(centerOffset, centerTargetOffset)\n || apply(-centerOffset, -centerTargetOffset)\n ) || apply(elemOffset, targetOffset);\n\n }\n\n function apply(elemOffset, targetOffset) {\n\n var newVal = position[align] + elemOffset + targetOffset - elOffset[dir] * 2;\n\n if (newVal >= boundary[align] && newVal + dim[prop] <= boundary[alignFlip]) {\n position[align] = newVal;\n\n ['element', 'target'].forEach(function (el) {\n flipped[el][dir] = !elemOffset\n ? flipped[el][dir]\n : flipped[el][dir] === dirs[prop][1]\n ? dirs[prop][2]\n : dirs[prop][1];\n });\n\n return true;\n }\n\n }\n\n });\n }\n\n offset(element, position);\n\n return flipped;\n }\n\n function offset(element, coordinates) {\n\n element = toNode(element);\n\n if (coordinates) {\n\n var currentOffset = offset(element);\n var pos = css(element, 'position');\n\n ['left', 'top'].forEach(function (prop) {\n if (prop in coordinates) {\n var value = css(element, prop);\n css(element, prop, coordinates[prop] - currentOffset[prop]\n + toFloat(pos === 'absolute' && value === 'auto'\n ? position(element)[prop]\n : value)\n );\n }\n });\n\n return;\n }\n\n return getDimensions(element);\n }\n\n function getDimensions(element) {\n\n element = toNode(element);\n\n var ref = window$1(element);\n var top = ref.pageYOffset;\n var left = ref.pageXOffset;\n\n if (isWindow(element)) {\n\n var height = element.innerHeight;\n var width = element.innerWidth;\n\n return {\n top: top,\n left: left,\n height: height,\n width: width,\n bottom: top + height,\n right: left + width,\n };\n }\n\n var style, hidden;\n\n if (!isVisible(element)) {\n style = attr(element, 'style');\n hidden = attr(element, 'hidden');\n\n attr(element, {\n style: ((style || '') + \";display:block !important;\"),\n hidden: null\n });\n }\n\n var rect = element.getBoundingClientRect();\n\n if (!isUndefined(style)) {\n attr(element, {style: style, hidden: hidden});\n }\n\n return {\n height: rect.height,\n width: rect.width,\n top: rect.top + top,\n left: rect.left + left,\n bottom: rect.bottom + top,\n right: rect.right + left,\n };\n }\n\n function position(element) {\n element = toNode(element);\n\n var parent = offsetParent(element);\n var parentOffset = parent === docEl(element) ? {top: 0, left: 0} : offset(parent);\n var ref = ['top', 'left'].reduce(function (props, prop) {\n var propName$$1 = ucfirst(prop);\n props[prop] -= parentOffset[prop]\n + (toFloat(css(element, (\"margin\" + propName$$1))) || 0)\n + (toFloat(css(parent, (\"border\" + propName$$1 + \"Width\"))) || 0);\n return props;\n }, offset(element));\n var top = ref.top;\n var left = ref.left;\n\n return {top: top, left: left};\n }\n\n function offsetParent(element) {\n\n var parent = toNode(element).offsetParent;\n\n while (parent && css(parent, 'position') === 'static') {\n parent = parent.offsetParent;\n }\n\n return parent || docEl(element);\n }\n\n var height = dimension('height');\n var width = dimension('width');\n\n function dimension(prop) {\n var propName$$1 = ucfirst(prop);\n return function (element, value) {\n\n element = toNode(element);\n\n if (isUndefined(value)) {\n\n if (isWindow(element)) {\n return element[(\"inner\" + propName$$1)];\n }\n\n if (isDocument(element)) {\n var doc = element.documentElement;\n return Math.max(doc[(\"offset\" + propName$$1)], doc[(\"scroll\" + propName$$1)]);\n }\n\n value = css(element, prop);\n value = value === 'auto' ? element[(\"offset\" + propName$$1)] : toFloat(value) || 0;\n\n return value - boxModelAdjust(prop, element);\n\n } else {\n\n css(element, prop, !value && value !== 0\n ? ''\n : +value + boxModelAdjust(prop, element) + 'px'\n );\n\n }\n\n };\n }\n\n function boxModelAdjust(prop, element) {\n return css(element, 'boxSizing') === 'border-box'\n ? dirs[prop].slice(1).map(ucfirst).reduce(function (value, prop) { return value\n + toFloat(css(element, (\"padding\" + prop)))\n + toFloat(css(element, (\"border\" + prop + \"Width\"))); }\n , 0)\n : 0;\n }\n\n function moveTo(position, attach, dim, factor) {\n each(dirs, function (ref, prop) {\n var dir = ref[0];\n var align = ref[1];\n var alignFlip = ref[2];\n\n if (attach[dir] === alignFlip) {\n position[align] += dim[prop] * factor;\n } else if (attach[dir] === 'center') {\n position[align] += dim[prop] * factor / 2;\n }\n });\n }\n\n function getPos(pos) {\n\n var x = /left|center|right/;\n var y = /top|center|bottom/;\n\n pos = (pos || '').split(' ');\n\n if (pos.length === 1) {\n pos = x.test(pos[0])\n ? pos.concat(['center'])\n : y.test(pos[0])\n ? ['center'].concat(pos)\n : ['center', 'center'];\n }\n\n return {\n x: x.test(pos[0]) ? pos[0] : 'center',\n y: y.test(pos[1]) ? pos[1] : 'center'\n };\n }\n\n function getOffsets(offsets, width, height) {\n\n var ref = (offsets || '').split(' ');\n var x = ref[0];\n var y = ref[1];\n\n return {\n x: x ? toFloat(x) * (endsWith(x, '%') ? width / 100 : 1) : 0,\n y: y ? toFloat(y) * (endsWith(y, '%') ? height / 100 : 1) : 0\n };\n }\n\n function flipPosition(pos) {\n switch (pos) {\n case 'left':\n return 'right';\n case 'right':\n return 'left';\n case 'top':\n return 'bottom';\n case 'bottom':\n return 'top';\n default:\n return pos;\n }\n }\n\n function isInView(element, topOffset, leftOffset, relativeToViewport) {\n if ( topOffset === void 0 ) topOffset = 0;\n if ( leftOffset === void 0 ) leftOffset = 0;\n\n\n if (!isVisible(element)) {\n return false;\n }\n\n element = toNode(element);\n var win = window$1(element);\n\n if (relativeToViewport) {\n\n return intersectRect(element.getBoundingClientRect(), {\n top: -topOffset,\n left: -leftOffset,\n bottom: topOffset + height(win),\n right: leftOffset + width(win)\n });\n\n } else {\n\n var ref = offsetPosition(element);\n var elTop = ref[0];\n var elLeft = ref[1];\n var top = win.pageYOffset;\n var left = win.pageXOffset;\n\n return intersectRect(\n {\n top: elTop,\n left: elLeft,\n bottom: elTop + element.offsetHeight,\n right: elTop + element.offsetWidth\n },\n {\n top: top - topOffset,\n left: left - leftOffset,\n bottom: top + topOffset + height(win),\n right: left + leftOffset + width(win)\n }\n );\n }\n\n }\n\n function scrolledOver(element, heightOffset) {\n if ( heightOffset === void 0 ) heightOffset = 0;\n\n\n if (!isVisible(element)) {\n return 0;\n }\n\n element = toNode(element);\n\n var win = window$1(element);\n var doc = document$1(element);\n var elHeight = element.offsetHeight + heightOffset;\n var ref = offsetPosition(element);\n var top = ref[0];\n var vp = height(win);\n var vh = vp + Math.min(0, top - vp);\n var diff = Math.max(0, vp - (height(doc) + heightOffset - (top + elHeight)));\n\n return clamp(((vh + win.pageYOffset - top) / ((vh + (elHeight - (diff < vp ? diff : 0))) / 100)) / 100);\n }\n\n function offsetPosition(element) {\n var offset = [0, 0];\n\n do {\n\n offset[0] += element.offsetTop;\n offset[1] += element.offsetLeft;\n\n if (css(element, 'position') === 'fixed') {\n var win = window$1(element);\n offset[0] += win.pageYOffset;\n offset[1] += win.pageXOffset;\n return offset;\n }\n\n } while ((element = element.offsetParent));\n\n return offset;\n }\n\n function window$1(element) {\n return isWindow(element) ? element : document$1(element).defaultView;\n }\n\n function document$1(element) {\n return toNode(element).ownerDocument;\n }\n\n function docEl(element) {\n return document$1(element).documentElement;\n }\n\n /* global DocumentTouch */\n\n var isRtl = attr(document.documentElement, 'dir') === 'rtl';\n\n var hasTouchEvents = 'ontouchstart' in window;\n var hasPointerEvents = window.PointerEvent;\n var hasTouch = hasTouchEvents\n || window.DocumentTouch && document instanceof DocumentTouch\n || navigator.maxTouchPoints; // IE >=11\n\n var pointerDown = !hasTouch ? 'mousedown' : (\"mousedown \" + (hasTouchEvents ? 'touchstart' : 'pointerdown'));\n var pointerMove = !hasTouch ? 'mousemove' : (\"mousemove \" + (hasTouchEvents ? 'touchmove' : 'pointermove'));\n var pointerUp = !hasTouch ? 'mouseup' : (\"mouseup \" + (hasTouchEvents ? 'touchend' : 'pointerup'));\n var pointerEnter = hasTouch && hasPointerEvents ? 'pointerenter' : 'mouseenter';\n var pointerLeave = hasTouch && hasPointerEvents ? 'pointerleave' : 'mouseleave';\n\n /*\n Based on:\n Copyright (c) 2016 Wilson Page [email protected]\n https://github.com/wilsonpage/fastdom\n */\n\n var fastdom = {\n\n reads: [],\n writes: [],\n\n read: function(task) {\n this.reads.push(task);\n scheduleFlush();\n return task;\n },\n\n write: function(task) {\n this.writes.push(task);\n scheduleFlush();\n return task;\n },\n\n clear: function(task) {\n return remove$1(this.reads, task) || remove$1(this.writes, task);\n },\n\n flush: function() {\n\n runTasks(this.reads);\n runTasks(this.writes.splice(0, this.writes.length));\n\n this.scheduled = false;\n\n if (this.reads.length || this.writes.length) {\n scheduleFlush();\n }\n\n }\n\n };\n\n function scheduleFlush() {\n if (!fastdom.scheduled) {\n fastdom.scheduled = true;\n requestAnimationFrame(fastdom.flush.bind(fastdom));\n }\n }\n\n function runTasks(tasks) {\n var task;\n while ((task = tasks.shift())) {\n task();\n }\n }\n\n function remove$1(array, item) {\n var index = array.indexOf(item);\n return !!~index && !!array.splice(index, 1);\n }\n\n function MouseTracker() {}\n\n MouseTracker.prototype = {\n\n positions: [],\n position: null,\n\n init: function() {\n var this$1 = this;\n\n\n this.positions = [];\n this.position = null;\n\n var ticking = false;\n this.unbind = on(document, 'mousemove', function (e) {\n\n if (ticking) {\n return;\n }\n\n setTimeout(function () {\n\n var time = Date.now();\n var ref = this$1.positions;\n var length = ref.length;\n\n if (length && (time - this$1.positions[length - 1].time > 100)) {\n this$1.positions.splice(0, length);\n }\n\n this$1.positions.push({time: time, x: e.pageX, y: e.pageY});\n\n if (this$1.positions.length > 5) {\n this$1.positions.shift();\n }\n\n ticking = false;\n }, 5);\n\n ticking = true;\n });\n\n },\n\n cancel: function() {\n if (this.unbind) {\n this.unbind();\n }\n },\n\n movesTo: function(target) {\n\n if (this.positions.length < 2) {\n return false;\n }\n\n var p = offset(target);\n var position$$1 = this.positions[this.positions.length - 1];\n var ref = this.positions;\n var prevPos = ref[0];\n\n if (p.left <= position$$1.x && position$$1.x <= p.right && p.top <= position$$1.y && position$$1.y <= p.bottom) {\n return false;\n }\n\n var points = [\n [{x: p.left, y: p.top}, {x: p.right, y: p.bottom}],\n [{x: p.right, y: p.top}, {x: p.left, y: p.bottom}]\n ];\n\n if (p.right <= position$$1.x) ; else if (p.left >= position$$1.x) {\n points[0].reverse();\n points[1].reverse();\n } else if (p.bottom <= position$$1.y) {\n points[0].reverse();\n } else if (p.top >= position$$1.y) {\n points[1].reverse();\n }\n\n return !!points.reduce(function (result, point) {\n return result + (slope(prevPos, point[0]) < slope(position$$1, point[0]) && slope(prevPos, point[1]) > slope(position$$1, point[1]));\n }, 0);\n }\n\n };\n\n function slope(a, b) {\n return (b.y - a.y) / (b.x - a.x);\n }\n\n var strats = {};\n\n // concat strategy\n strats.args =\n strats.events =\n strats.init =\n strats.created =\n strats.beforeConnect =\n strats.connected =\n strats.ready =\n strats.beforeDisconnect =\n strats.disconnected =\n strats.destroy = function (parentVal, childVal) {\n\n parentVal = parentVal && !isArray(parentVal) ? [parentVal] : parentVal;\n\n return childVal\n ? parentVal\n ? parentVal.concat(childVal)\n : isArray(childVal)\n ? childVal\n : [childVal]\n : parentVal;\n };\n\n // update strategy\n strats.update = function (parentVal, childVal) {\n return strats.args(parentVal, isFunction(childVal) ? {read: childVal} : childVal);\n };\n\n // property strategy\n strats.props = function (parentVal, childVal) {\n\n if (isArray(childVal)) {\n childVal = childVal.reduce(function (value, key) {\n value[key] = String;\n return value;\n }, {});\n }\n\n return strats.methods(parentVal, childVal);\n };\n\n // extend strategy\n strats.computed =\n strats.methods = function (parentVal, childVal) {\n return childVal\n ? parentVal\n ? assign({}, parentVal, childVal)\n : childVal\n : parentVal;\n };\n\n // data strategy\n strats.data = function (parentVal, childVal, vm) {\n\n if (!vm) {\n\n if (!childVal) {\n return parentVal;\n }\n\n if (!parentVal) {\n return childVal;\n }\n\n return function (vm) {\n return mergeFnData(parentVal, childVal, vm);\n };\n\n }\n\n return mergeFnData(parentVal, childVal, vm);\n };\n\n function mergeFnData(parentVal, childVal, vm) {\n return strats.computed(\n isFunction(parentVal)\n ? parentVal.call(vm, vm)\n : parentVal,\n isFunction(childVal)\n ? childVal.call(vm, vm)\n : childVal\n );\n }\n\n // default strategy\n var defaultStrat = function (parentVal, childVal) {\n return isUndefined(childVal) ? parentVal : childVal;\n };\n\n function mergeOptions(parent, child, vm) {\n\n var options = {};\n\n if (isFunction(child)) {\n child = child.options;\n }\n\n if (child.extends) {\n parent = mergeOptions(parent, child.extends, vm);\n }\n\n if (child.mixins) {\n for (var i = 0, l = child.mixins.length; i < l; i++) {\n parent = mergeOptions(parent, child.mixins[i], vm);\n }\n }\n\n for (var key in parent) {\n mergeKey(key);\n }\n\n for (var key$1 in child) {\n if (!hasOwn(parent, key$1)) {\n mergeKey(key$1);\n }\n }\n\n function mergeKey(key) {\n options[key] = (strats[key] || defaultStrat)(parent[key], child[key], vm);\n }\n\n return options;\n }\n\n function parseOptions(options, args) {\n var obj;\n\n if ( args === void 0 ) args = [];\n\n try {\n\n return !options\n ? {}\n : startsWith(options, '{')\n ? JSON.parse(options)\n : args.length && !includes(options, ':')\n ? (( obj = {}, obj[args[0]] = options, obj ))\n : options.split(';').reduce(function (options, option) {\n var ref = option.split(/:(.*)/);\n var key = ref[0];\n var value = ref[1];\n if (key && !isUndefined(value)) {\n options[key.trim()] = value.trim();\n }\n return options;\n }, {});\n\n } catch (e) {\n return {};\n }\n\n }\n\n var id = 0;\n\n var Player = function(el) {\n this.id = ++id;\n this.el = toNode(el);\n };\n\n Player.prototype.isVideo = function () {\n return this.isYoutube() || this.isVimeo() || this.isHTML5();\n };\n\n Player.prototype.isHTML5 = function () {\n return this.el.tagName === 'VIDEO';\n };\n\n Player.prototype.isIFrame = function () {\n return this.el.tagName === 'IFRAME';\n };\n\n Player.prototype.isYoutube = function () {\n return this.isIFrame() && !!this.el.src.match(/\\/\\/.*?youtube(-nocookie)?\\.[a-z]+\\/(watch\\?v=[^&\\s]+|embed)|youtu\\.be\\/.*/);\n };\n\n Player.prototype.isVimeo = function () {\n return this.isIFrame() && !!this.el.src.match(/vimeo\\.com\\/video\\/.*/);\n };\n\n Player.prototype.enableApi = function () {\n var this$1 = this;\n\n\n if (this.ready) {\n return this.ready;\n }\n\n var youtube = this.isYoutube();\n var vimeo = this.isVimeo();\n\n var poller;\n\n if (youtube || vimeo) {\n\n return this.ready = new Promise$1(function (resolve) {\n\n once(this$1.el, 'load', function () {\n if (youtube) {\n var listener = function () { return post(this$1.el, {event: 'listening', id: this$1.id}); };\n poller = setInterval(listener, 100);\n listener();\n }\n });\n\n listen(function (data$$1) { return youtube && data$$1.id === this$1.id && data$$1.event === 'onReady' || vimeo && Number(data$$1.player_id) === this$1.id; })\n .then(function () {\n resolve();\n poller && clearInterval(poller);\n });\n\n attr(this$1.el, 'src', (\"\" + (this$1.el.src) + (includes(this$1.el.src, '?') ? '&' : '?') + (youtube ? 'enablejsapi=1' : (\"api=1&player_id=\" + (this$1.id)))));\n\n });\n\n }\n\n return Promise$1.resolve();\n\n };\n\n Player.prototype.play = function () {\n var this$1 = this;\n\n\n if (!this.isVideo()) {\n return;\n }\n\n if (this.isIFrame()) {\n this.enableApi().then(function () { return post(this$1.el, {func: 'playVideo', method: 'play'}); });\n } else if (this.isHTML5()) {\n try {\n var promise = this.el.play();\n\n if (promise) {\n promise.catch(noop);\n }\n } catch (e) {}\n }\n };\n\n Player.prototype.pause = function () {\n var this$1 = this;\n\n\n if (!this.isVideo()) {\n return;\n }\n\n if (this.isIFrame()) {\n this.enableApi().then(function () { return post(this$1.el, {func: 'pauseVideo', method: 'pause'}); });\n } else if (this.isHTML5()) {\n this.el.pause();\n }\n };\n\n Player.prototype.mute = function () {\n var this$1 = this;\n\n\n if (!this.isVideo()) {\n return;\n }\n\n if (this.isIFrame()) {\n this.enableApi().then(function () { return post(this$1.el, {func: 'mute', method: 'setVolume', value: 0}); });\n } else if (this.isHTML5()) {\n this.el.muted = true;\n attr(this.el, 'muted', '');\n }\n\n };\n\n function post(el, cmd) {\n try {\n el.contentWindow.postMessage(JSON.stringify(assign({event: 'command'}, cmd)), '*');\n } catch (e) {}\n }\n\n function listen(cb) {\n\n return new Promise$1(function (resolve) {\n\n once(window, 'message', function (_, data$$1) { return resolve(data$$1); }, false, function (ref) {\n var data$$1 = ref.data;\n\n\n if (!data$$1 || !isString(data$$1)) {\n return;\n }\n\n try {\n data$$1 = JSON.parse(data$$1);\n } catch (e) {\n return;\n }\n\n return data$$1 && cb(data$$1);\n\n });\n\n });\n\n }\n\n /*\n Based on:\n Copyright (c) 2010-2016 Thomas Fuchs\n http://zeptojs.com/\n */\n\n var touch = {}, clickTimeout, swipeTimeout, tapTimeout, clicked;\n\n function swipeDirection(ref) {\n var x1 = ref.x1;\n var x2 = ref.x2;\n var y1 = ref.y1;\n var y2 = ref.y2;\n\n return Math.abs(x1 - x2) >= Math.abs(y1 - y2) ? (x1 - x2 > 0 ? 'Left' : 'Right') : (y1 - y2 > 0 ? 'Up' : 'Down');\n }\n\n function cancelAll() {\n clickTimeout && clearTimeout(clickTimeout);\n swipeTimeout && clearTimeout(swipeTimeout);\n tapTimeout && clearTimeout(tapTimeout);\n clickTimeout = swipeTimeout = tapTimeout = null;\n touch = {};\n }\n\n ready(function () {\n\n on(document, 'click', function () { return clicked = true; }, true);\n\n on(document, pointerDown, function (e) {\n\n var target = e.target;\n var ref = getPos$1(e);\n var x = ref.x;\n var y = ref.y;\n var now = Date.now();\n var type = getType(e.type);\n\n if (touch.type && touch.type !== type) {\n return;\n }\n\n touch.el = 'tagName' in target ? target : target.parentNode;\n\n clickTimeout && clearTimeout(clickTimeout);\n\n touch.x1 = x;\n touch.y1 = y;\n\n if (touch.last && now - touch.last <= 250) {\n touch = {};\n }\n\n touch.type = type;\n touch.last = now;\n\n clicked = e.button > 0;\n\n });\n\n on(document, pointerMove, function (e) {\n\n if (e.defaultPrevented) {\n return;\n }\n\n var ref = getPos$1(e);\n var x = ref.x;\n var y = ref.y;\n\n touch.x2 = x;\n touch.y2 = y;\n\n });\n\n on(document, pointerUp, function (ref) {\n var type = ref.type;\n var target = ref.target;\n\n\n if (touch.type !== getType(type)) {\n return;\n }\n\n // swipe\n if (touch.x2 && Math.abs(touch.x1 - touch.x2) > 30 || touch.y2 && Math.abs(touch.y1 - touch.y2) > 30) {\n\n swipeTimeout = setTimeout(function () {\n if (touch.el) {\n trigger(touch.el, 'swipe');\n trigger(touch.el, (\"swipe\" + (swipeDirection(touch))));\n }\n touch = {};\n });\n\n // normal tap\n } else if ('last' in touch) {\n\n tapTimeout = setTimeout(function () { return trigger(touch.el, 'tap'); });\n\n // trigger single click after 350ms of inactivity\n if (touch.el && type !== 'mouseup' && within(target, touch.el)) {\n clickTimeout = setTimeout(function () {\n clickTimeout = null;\n if (touch.el && !clicked) {\n trigger(touch.el, 'click');\n }\n touch = {};\n }, 350);\n }\n\n } else {\n touch = {};\n }\n\n });\n\n on(document, 'touchcancel', cancelAll);\n on(window, 'scroll', cancelAll);\n\n });\n\n var touching = false;\n on(document, 'touchstart', function () { return touching = true; }, true);\n on(document, 'click', function () {touching = false;});\n on(document, 'touchcancel', function () { return touching = false; }, true);\n\n function isTouch(e) {\n return touching || e.pointerType === 'touch';\n }\n\n function getPos$1(e) {\n var touches = e.touches;\n var changedTouches = e.changedTouches;\n var ref = touches && touches[0] || changedTouches && changedTouches[0] || e;\n var x = ref.pageX;\n var y = ref.pageY;\n\n return {x: x, y: y};\n }\n\n function getType(type) {\n return type.slice(0, 5);\n }\n\n\n\n var util = /*#__PURE__*/Object.freeze({\n ajax: ajax,\n getImage: getImage,\n transition: transition,\n Transition: Transition,\n animate: animate,\n Animation: Animation,\n attr: attr,\n hasAttr: hasAttr,\n removeAttr: removeAttr,\n filterAttr: filterAttr,\n data: data,\n addClass: addClass,\n removeClass: removeClass,\n removeClasses: removeClasses,\n replaceClass: replaceClass,\n hasClass: hasClass,\n toggleClass: toggleClass,\n $: $,\n $$: $$,\n positionAt: positionAt,\n offset: offset,\n position: position,\n height: height,\n width: width,\n flipPosition: flipPosition,\n isInView: isInView,\n scrolledOver: scrolledOver,\n isReady: isReady,\n ready: ready,\n index: index,\n getIndex: getIndex,\n empty: empty,\n html: html,\n prepend: prepend,\n append: append,\n before: before,\n after: after,\n remove: remove,\n wrapAll: wrapAll,\n wrapInner: wrapInner,\n unwrap: unwrap,\n fragment: fragment,\n apply: apply,\n isRtl: isRtl,\n hasTouch: hasTouch,\n pointerDown: pointerDown,\n pointerMove: pointerMove,\n pointerUp: pointerUp,\n pointerEnter: pointerEnter,\n pointerLeave: pointerLeave,\n on: on,\n off: off,\n once: once,\n trigger: trigger,\n createEvent: createEvent,\n toEventTargets: toEventTargets,\n preventClick: preventClick,\n fastdom: fastdom,\n isVoidElement: isVoidElement,\n isVisible: isVisible,\n selInput: selInput,\n isInput: isInput,\n filter: filter,\n within: within,\n bind: bind,\n hasOwn: hasOwn,\n hyphenate: hyphenate,\n camelize: camelize,\n ucfirst: ucfirst,\n startsWith: startsWith,\n endsWith: endsWith,\n includes: includes,\n isArray: isArray,\n isFunction: isFunction,\n isObject: isObject,\n isPlainObject: isPlainObject,\n isWindow: isWindow,\n isDocument: isDocument,\n isJQuery: isJQuery,\n isNode: isNode,\n isNodeCollection: isNodeCollection,\n isBoolean: isBoolean,\n isString: isString,\n isNumber: isNumber,\n isNumeric: isNumeric,\n isUndefined: isUndefined,\n toBoolean: toBoolean,\n toNumber: toNumber,\n toFloat: toFloat,\n toNode: toNode,\n toNodes: toNodes,\n toList: toList,\n toMs: toMs,\n swap: swap,\n assign: assign,\n each: each,\n sortBy: sortBy,\n clamp: clamp,\n noop: noop,\n intersectRect: intersectRect,\n pointInRect: pointInRect,\n Dimensions: Dimensions,\n MouseTracker: MouseTracker,\n mergeOptions: mergeOptions,\n parseOptions: parseOptions,\n Player: Player,\n Promise: Promise$1,\n Deferred: Deferred,\n query: query,\n queryAll: queryAll,\n find: find,\n findAll: findAll,\n matches: matches,\n closest: closest,\n parents: parents,\n escape: escape,\n css: css,\n getStyles: getStyles,\n getStyle: getStyle,\n getCssVar: getCssVar,\n propName: propName,\n isTouch: isTouch,\n getPos: getPos$1\n });\n\n function componentAPI (UIkit) {\n\n var DATA = UIkit.data;\n\n var components = {};\n\n UIkit.component = function (name, options) {\n\n if (!options) {\n\n if (isPlainObject(components[name])) {\n components[name] = UIkit.extend(components[name]);\n }\n\n return components[name];\n\n }\n\n UIkit[name] = function (element, data$$1) {\n var i = arguments.length, argsArray = Array(i);\n while ( i-- ) argsArray[i] = arguments[i];\n\n\n var component = UIkit.component(name);\n\n if (isPlainObject(element)) {\n return new component({data: element});\n }\n\n if (component.options.functional) {\n return new component({data: [].concat( argsArray )});\n }\n\n return element && element.nodeType ? init(element) : $$(element).map(init)[0];\n\n function init(element) {\n\n var instance = UIkit.getComponent(element, name);\n\n if (instance) {\n if (!data$$1) {\n return instance;\n } else {\n instance.$destroy();\n }\n }\n\n return new component({el: element, data: data$$1});\n\n }\n\n };\n\n var opt = isPlainObject(options) ? assign({}, options) : options.options;\n\n opt.name = name;\n\n if (opt.install) {\n opt.install(UIkit, opt, name);\n }\n\n if (UIkit._initialized && !opt.functional) {\n var id = hyphenate(name);\n fastdom.read(function () { return UIkit[name]((\"[uk-\" + id + \"],[data-uk-\" + id + \"]\")); });\n }\n\n return components[name] = isPlainObject(options) ? opt : options;\n };\n\n UIkit.getComponents = function (element) { return element && element[DATA] || {}; };\n UIkit.getComponent = function (element, name) { return UIkit.getComponents(element)[name]; };\n\n UIkit.connect = function (node) {\n\n if (node[DATA]) {\n for (var name in node[DATA]) {\n node[DATA][name]._callConnected();\n }\n }\n\n for (var i = 0; i < node.attributes.length; i++) {\n\n var name$1 = getComponentName(node.attributes[i].name);\n\n if (name$1 && name$1 in components) {\n UIkit[name$1](node);\n }\n\n }\n\n };\n\n UIkit.disconnect = function (node) {\n for (var name in node[DATA]) {\n node[DATA][name]._callDisconnected();\n }\n };\n\n }\n\n function getComponentName(attribute) {\n return startsWith(attribute, 'uk-') || startsWith(attribute, 'data-uk-')\n ? camelize(attribute.replace('data-uk-', '').replace('uk-', ''))\n : false;\n }\n\n function boot (UIkit) {\n\n var connect = UIkit.connect;\n var disconnect = UIkit.disconnect;\n\n if (!('MutationObserver' in window)) {\n return;\n }\n\n if (document.body) {\n\n init();\n\n } else {\n\n (new MutationObserver(function () {\n\n if (document.body) {\n this.disconnect();\n init();\n }\n\n })).observe(document, {childList: true, subtree: true});\n\n }\n\n function init() {\n\n apply$$1(document.body, connect);\n\n fastdom.flush();\n\n (new MutationObserver(function (mutations) { return mutations.forEach(applyMutation); })).observe(document, {\n childList: true,\n subtree: true,\n characterData: true,\n attributes: true\n });\n\n UIkit._initialized = true;\n }\n\n function applyMutation(mutation) {\n\n var target = mutation.target;\n var type = mutation.type;\n\n var update = type !== 'attributes'\n ? applyChildList(mutation)\n : applyAttribute(mutation);\n\n update && UIkit.update(target);\n\n }\n\n function applyAttribute(ref) {\n var target = ref.target;\n var attributeName = ref.attributeName;\n\n\n if (attributeName === 'href') {\n return true;\n }\n\n var name = getComponentName(attributeName);\n\n if (!name || !(name in UIkit)) {\n return;\n }\n\n if (hasAttr(target, attributeName)) {\n UIkit[name](target);\n return true;\n }\n\n var component = UIkit.getComponent(target, name);\n\n if (component) {\n component.$destroy();\n return true;\n }\n\n }\n\n function applyChildList(ref) {\n var addedNodes = ref.addedNodes;\n var removedNodes = ref.removedNodes;\n\n\n for (var i = 0; i < addedNodes.length; i++) {\n apply$$1(addedNodes[i], connect);\n }\n\n for (var i$1 = 0; i$1 < removedNodes.length; i$1++) {\n apply$$1(removedNodes[i$1], disconnect);\n }\n\n return true;\n }\n\n function apply$$1(node, fn) {\n\n if (node.nodeType !== 1 || hasAttr(node, 'uk-no-boot')) {\n return;\n }\n\n fn(node);\n node = node.firstElementChild;\n while (node) {\n var next = node.nextElementSibling;\n apply$$1(node, fn);\n node = next;\n }\n }\n\n }\n\n function globalAPI (UIkit) {\n\n var DATA = UIkit.data;\n\n UIkit.use = function (plugin) {\n\n if (plugin.installed) {\n return;\n }\n\n plugin.call(null, this);\n plugin.installed = true;\n\n return this;\n };\n\n UIkit.mixin = function (mixin, component) {\n component = (isString(component) ? UIkit.component(component) : component) || this;\n mixin = mergeOptions({}, mixin);\n mixin.mixins = component.options.mixins;\n delete component.options.mixins;\n component.options = mergeOptions(mixin, component.options);\n };\n\n UIkit.extend = function (options) {\n\n options = options || {};\n\n var Super = this;\n var Sub = function UIkitComponent (options) {\n this._init(options);\n };\n\n Sub.prototype = Object.create(Super.prototype);\n Sub.prototype.constructor = Sub;\n Sub.options = mergeOptions(Super.options, options);\n\n Sub['super'] = Super;\n Sub.extend = Super.extend;\n\n return Sub;\n };\n\n UIkit.update = function (element, e) {\n\n e = createEvent(e || 'update');\n element = element ? toNode(element) : document.body;\n\n path(element).map(function (element) { return update(element[DATA], e); });\n apply(element, function (element) { return update(element[DATA], e); });\n\n };\n\n var container;\n Object.defineProperty(UIkit, 'container', {\n\n get: function() {\n return container || document.body;\n },\n\n set: function(element) {\n container = $(element);\n }\n\n });\n\n function update(data$$1, e) {\n\n if (!data$$1) {\n return;\n }\n\n for (var name in data$$1) {\n if (data$$1[name]._isReady) {\n data$$1[name]._callUpdate(e);\n }\n }\n\n }\n\n function path(element) {\n var path = [];\n\n while (element && element !== document.body && element.parentNode) {\n\n element = element.parentNode;\n path.unshift(element);\n\n }\n\n return path;\n }\n\n }\n\n function hooksAPI (UIkit) {\n\n UIkit.prototype._callHook = function (hook) {\n var this$1 = this;\n\n\n var handlers = this.$options[hook];\n\n if (handlers) {\n handlers.forEach(function (handler) { return handler.call(this$1); });\n }\n };\n\n UIkit.prototype._callConnected = function () {\n var this$1 = this;\n\n\n if (this._connected) {\n return;\n }\n\n this._data = {};\n this._initProps();\n\n this._callHook('beforeConnect');\n this._connected = true;\n\n this._initEvents();\n this._initObserver();\n\n this._callHook('connected');\n\n if (!this._isReady) {\n ready(function () { return this$1._callReady(); });\n }\n\n this._callUpdate();\n };\n\n UIkit.prototype._callDisconnected = function () {\n\n if (!this._connected) {\n return;\n }\n\n this._callHook('beforeDisconnect');\n\n if (this._observer) {\n this._observer.disconnect();\n this._observer = null;\n }\n\n this._unbindEvents();\n this._callHook('disconnected');\n\n this._connected = false;\n\n };\n\n UIkit.prototype._callReady = function () {\n\n if (this._isReady) {\n return;\n }\n\n this._isReady = true;\n this._callHook('ready');\n this._resetComputeds();\n this._callUpdate();\n };\n\n UIkit.prototype._callUpdate = function (e) {\n var this$1 = this;\n\n\n e = createEvent(e || 'update');\n\n var type = e.type;\n\n if (includes(['update', 'load', 'resize'], type)) {\n this._resetComputeds();\n }\n\n var updates = this.$options.update;\n var ref = this._frames;\n var reads = ref.reads;\n var writes = ref.writes;\n\n if (!updates) {\n return;\n }\n\n updates.forEach(function (ref, i) {\n var read = ref.read;\n var write = ref.write;\n var events = ref.events;\n\n\n if (type !== 'update' && !includes(events, type)) {\n return;\n }\n\n if (read && !includes(fastdom.reads, reads[i])) {\n reads[i] = fastdom.read(function () {\n\n var result = this$1._connected && read.call(this$1, this$1._data, e);\n\n if (result === false && write) {\n fastdom.clear(writes[i]);\n delete writes[i];\n } else if (isPlainObject(result)) {\n assign(this$1._data, result);\n }\n delete reads[i];\n });\n }\n\n if (write && !includes(fastdom.writes, writes[i])) {\n writes[i] = fastdom.write(function () {\n this$1._connected && write.call(this$1, this$1._data, e);\n delete writes[i];\n });\n }\n\n });\n\n };\n\n }\n\n function stateAPI (UIkit) {\n\n var uid = 0;\n\n UIkit.prototype._init = function (options) {\n\n options = options || {};\n options.data = normalizeData(options, this.constructor.options);\n\n this.$options = mergeOptions(this.constructor.options, options, this);\n this.$el = null;\n this.$props = {};\n\n this._frames = {reads: {}, writes: {}};\n this._events = [];\n\n this._uid = uid++;\n this._initData();\n this._initMethods();\n this._initComputeds();\n this._callHook('created');\n\n if (options.el) {\n this.$mount(options.el);\n }\n };\n\n UIkit.prototype._initData = function () {\n var this$1 = this;\n\n\n var ref = this.$options;\n var data$$1 = ref.data; if ( data$$1 === void 0 ) data$$1 = {};\n\n for (var key in data$$1) {\n this$1.$props[key] = this$1[key] = data$$1[key];\n }\n };\n\n UIkit.prototype._initMethods = function () {\n var this$1 = this;\n\n\n var ref = this.$options;\n var methods = ref.methods;\n\n if (methods) {\n for (var key in methods) {\n this$1[key] = bind(methods[key], this$1);\n }\n }\n };\n\n UIkit.prototype._initComputeds = function () {\n var this$1 = this;\n\n\n var ref = this.$options;\n var computed = ref.computed;\n\n this._resetComputeds();\n\n if (computed) {\n for (var key in computed) {\n registerComputed(this$1, key, computed[key]);\n }\n }\n };\n\n UIkit.prototype._resetComputeds = function () {\n this._computeds = {};\n };\n\n UIkit.prototype._initProps = function (props) {\n var this$1 = this;\n\n\n var key;\n\n this._resetComputeds();\n\n props = props || getProps(this.$options, this.$name);\n\n for (key in props) {\n if (!isUndefined(props[key])) {\n this$1.$props[key] = props[key];\n }\n }\n\n var exclude = [this.$options.computed, this.$options.methods];\n for (key in this$1.$props) {\n if (key in props && notIn(exclude, key)) {\n this$1[key] = this$1.$props[key];\n }\n }\n };\n\n UIkit.prototype._initEvents = function () {\n var this$1 = this;\n\n\n var ref = this.$options;\n var events = ref.events;\n\n if (events) {\n\n events.forEach(function (event) {\n\n if (!hasOwn(event, 'handler')) {\n for (var key in event) {\n registerEvent(this$1, event[key], key);\n }\n } else {\n registerEvent(this$1, event);\n }\n\n });\n }\n };\n\n UIkit.prototype._unbindEvents = function () {\n this._events.forEach(function (unbind) { return unbind(); });\n this._events = [];\n };\n\n UIkit.prototype._initObserver = function () {\n var this$1 = this;\n\n\n var ref = this.$options;\n var attrs = ref.attrs;\n var props = ref.props;\n var el = ref.el;\n if (this._observer || !props || !attrs) {\n return;\n }\n\n attrs = isArray(attrs) ? attrs : Object.keys(props).map(function (key) { return hyphenate(key); });\n\n this._observer = new MutationObserver(function () {\n\n var data$$1 = getProps(this$1.$options, this$1.$name);\n if (attrs.some(function (key) { return !isUndefined(data$$1[key]) && data$$1[key] !== this$1.$props[key]; })) {\n this$1.$reset();\n }\n\n });\n\n this._observer.observe(el, {attributes: true, attributeFilter: attrs.concat([this.$name, (\"data-\" + (this.$name))])});\n };\n\n function getProps(opts, name) {\n\n var data$$1 = {};\n var args = opts.args; if ( args === void 0 ) args = [];\n var props = opts.props; if ( props === void 0 ) props = {};\n var el = opts.el;\n\n if (!props) {\n return data$$1;\n }\n\n for (var key in props) {\n var prop = hyphenate(key);\n if (hasAttr(el, prop)) {\n\n var value = coerce(props[key], attr(el, prop));\n\n if (prop === 'target' && (!value || startsWith(value, '_'))) {\n continue;\n }\n\n data$$1[key] = value;\n }\n }\n\n var options = parseOptions(data(el, name), args);\n\n for (var key$1 in options) {\n var prop$1 = camelize(key$1);\n if (props[prop$1] !== undefined) {\n data$$1[prop$1] = coerce(props[prop$1], options[key$1]);\n }\n }\n\n return data$$1;\n }\n\n function registerComputed(component, key, cb) {\n Object.defineProperty(component, key, {\n\n enumerable: true,\n\n get: function() {\n\n var _computeds = component._computeds;\n var $props = component.$props;\n var $el = component.$el;\n\n if (!hasOwn(_computeds, key)) {\n _computeds[key] = cb.call(component, $props, $el);\n }\n\n return _computeds[key];\n },\n\n set: function(value) {\n component._computeds[key] = value;\n }\n\n });\n }\n\n function registerEvent(component, event, key) {\n\n if (!isPlainObject(event)) {\n event = ({name: key, handler: event});\n }\n\n var name = event.name;\n var el = event.el;\n var handler = event.handler;\n var capture = event.capture;\n var delegate = event.delegate;\n var filter$$1 = event.filter;\n var self = event.self;\n el = isFunction(el)\n ? el.call(component)\n : el || component.$el;\n\n if (isArray(el)) {\n el.forEach(function (el) { return registerEvent(component, assign({}, event, {el: el}), key); });\n return;\n }\n\n if (!el || filter$$1 && !filter$$1.call(component)) {\n return;\n }\n\n handler = detail(isString(handler) ? component[handler] : bind(handler, component));\n\n if (self) {\n handler = selfFilter(handler);\n }\n\n component._events.push(\n on(\n el,\n name,\n !delegate\n ? null\n : isString(delegate)\n ? delegate\n : delegate.call(component),\n handler,\n capture\n )\n );\n\n }\n\n function selfFilter(handler) {\n return function selfHandler(e) {\n if (e.target === e.currentTarget || e.target === e.current) {\n return handler.call(null, e);\n }\n };\n }\n\n function notIn(options, key) {\n return options.every(function (arr) { return !arr || !hasOwn(arr, key); });\n }\n\n function detail(listener) {\n return function (e) { return isArray(e.detail) ? listener.apply(void 0, [e].concat(e.detail)) : listener(e); };\n }\n\n function coerce(type, value) {\n\n if (type === Boolean) {\n return toBoolean(value);\n } else if (type === Number) {\n return toNumber(value);\n } else if (type === 'list') {\n return toList(value);\n } else if (type === 'media') {\n return toMedia(value);\n }\n\n return type ? type(value) : value;\n }\n\n function toMedia(value) {\n\n if (isString(value)) {\n if (value[0] === '@') {\n var name = \"media-\" + (value.substr(1));\n value = toFloat(getCssVar(name));\n } else if (isNaN(value)) {\n return value;\n }\n }\n\n return value && !isNaN(value) ? (\"(min-width: \" + value + \"px)\") : false;\n }\n\n function normalizeData(ref, ref$1) {\n var data$$1 = ref.data;\n var el = ref.el;\n var args = ref$1.args;\n var props = ref$1.props; if ( props === void 0 ) props = {};\n\n data$$1 = isArray(data$$1)\n ? args && args.length\n ? data$$1.slice(0, args.length).reduce(function (data$$1, value, index$$1) {\n if (isPlainObject(value)) {\n assign(data$$1, value);\n } else {\n data$$1[args[index$$1]] = value;\n }\n return data$$1;\n }, {})\n : undefined\n : data$$1;\n\n if (data$$1) {\n for (var key in data$$1) {\n if (isUndefined(data$$1[key])) {\n delete data$$1[key];\n } else {\n data$$1[key] = props[key] ? coerce(props[key], data$$1[key], el) : data$$1[key];\n }\n }\n }\n\n return data$$1;\n }\n }\n\n function instanceAPI (UIkit) {\n\n var DATA = UIkit.data;\n\n UIkit.prototype.$mount = function (el) {\n\n var ref = this.$options;\n var name = ref.name;\n\n if (!el[DATA]) {\n el[DATA] = {};\n }\n\n if (el[DATA][name]) {\n return;\n }\n\n el[DATA][name] = this;\n\n this.$el = this.$options.el = this.$options.el || el;\n\n this._callHook('init');\n\n if (within(el, document)) {\n this._callConnected();\n }\n };\n\n UIkit.prototype.$emit = function (e) {\n this._callUpdate(e);\n };\n\n UIkit.prototype.$reset = function () {\n this._callDisconnected();\n this._callConnected();\n };\n\n UIkit.prototype.$destroy = function (removeEl) {\n if ( removeEl === void 0 ) removeEl = false;\n\n\n var ref = this.$options;\n var el = ref.el;\n var name = ref.name;\n\n if (el) {\n this._callDisconnected();\n }\n\n this._callHook('destroy');\n\n if (!el || !el[DATA]) {\n return;\n }\n\n delete el[DATA][name];\n\n if (!Object.keys(el[DATA]).length) {\n delete el[DATA];\n }\n\n if (removeEl) {\n remove(this.$el);\n }\n };\n\n UIkit.prototype.$create = function (component, element, data$$1) {\n return UIkit[component](element, data$$1);\n };\n\n UIkit.prototype.$update = UIkit.update;\n UIkit.prototype.$getComponent = UIkit.getComponent;\n\n var names = {};\n Object.defineProperties(UIkit.prototype, {\n\n $container: Object.getOwnPropertyDescriptor(UIkit, 'container'),\n\n $name: {\n\n get: function() {\n var ref = this.$options;\n var name = ref.name;\n\n if (!names[name]) {\n names[name] = UIkit.prefix + hyphenate(name);\n }\n\n return names[name];\n }\n\n }\n\n });\n\n }\n\n var UIkit = function (options) {\n this._init(options);\n };\n\n UIkit.util = util;\n UIkit.data = '__uikit__';\n UIkit.prefix = 'uk-';\n UIkit.options = {};\n\n globalAPI(UIkit);\n hooksAPI(UIkit);\n stateAPI(UIkit);\n componentAPI(UIkit);\n instanceAPI(UIkit);\n\n var Class = {\n\n connected: function() {\n addClass(this.$el, this.$name);\n }\n\n };\n\n var Togglable = {\n\n props: {\n cls: Boolean,\n animation: 'list',\n duration: Number,\n origin: String,\n transition: String,\n queued: Boolean\n },\n\n data: {\n cls: false,\n animation: [false],\n duration: 200,\n origin: false,\n transition: 'linear',\n queued: false,\n\n initProps: {\n overflow: '',\n height: '',\n paddingTop: '',\n paddingBottom: '',\n marginTop: '',\n marginBottom: ''\n },\n\n hideProps: {\n overflow: 'hidden',\n height: 0,\n paddingTop: 0,\n paddingBottom: 0,\n marginTop: 0,\n marginBottom: 0\n }\n\n },\n\n computed: {\n\n hasAnimation: function(ref) {\n var animation = ref.animation;\n\n return !!animation[0];\n },\n\n hasTransition: function(ref) {\n var animation = ref.animation;\n\n return this.hasAnimation && animation[0] === true;\n }\n\n },\n\n methods: {\n\n toggleElement: function(targets, show, animate$$1) {\n var this$1 = this;\n\n return new Promise$1(function (resolve) {\n\n targets = toNodes(targets);\n\n var all = function (targets) { return Promise$1.all(targets.map(function (el) { return this$1._toggleElement(el, show, animate$$1); })); };\n var toggled = targets.filter(function (el) { return this$1.isToggled(el); });\n var untoggled = targets.filter(function (el) { return !includes(toggled, el); });\n\n var p;\n\n if (!this$1.queued || !isUndefined(animate$$1) || !isUndefined(show) || !this$1.hasAnimation || targets.length < 2) {\n\n p = all(untoggled.concat(toggled));\n\n } else {\n\n var body = document.body;\n var scroll = body.scrollTop;\n var el = toggled[0];\n var inProgress = Animation.inProgress(el) && hasClass(el, 'uk-animation-leave')\n || Transition.inProgress(el) && el.style.height === '0px';\n\n p = all(toggled);\n\n if (!inProgress) {\n p = p.then(function () {\n var p = all(untoggled);\n body.scrollTop = scroll;\n return p;\n });\n }\n\n }\n\n p.then(resolve, noop);\n\n });\n },\n\n toggleNow: function(targets, show) {\n var this$1 = this;\n\n return new Promise$1(function (resolve) { return Promise$1.all(toNodes(targets).map(function (el) { return this$1._toggleElement(el, show, false); })).then(resolve, noop); });\n },\n\n isToggled: function(el) {\n var nodes = toNodes(el || this.$el);\n return this.cls\n ? hasClass(nodes, this.cls.split(' ')[0])\n : !hasAttr(nodes, 'hidden');\n },\n\n updateAria: function(el) {\n if (this.cls === false) {\n attr(el, 'aria-hidden', !this.isToggled(el));\n }\n },\n\n _toggleElement: function(el, show, animate$$1) {\n var this$1 = this;\n\n\n show = isBoolean(show)\n ? show\n : Animation.inProgress(el)\n ? hasClass(el, 'uk-animation-leave')\n : Transition.inProgress(el)\n ? el.style.height === '0px'\n : !this.isToggled(el);\n\n if (!trigger(el, (\"before\" + (show ? 'show' : 'hide')), [this])) {\n return Promise$1.reject();\n }\n\n var promise = (animate$$1 === false || !this.hasAnimation\n ? this._toggleImmediate\n : this.hasTransition\n ? this._toggleHeight\n : this._toggleAnimation\n )(el, show);\n\n trigger(el, show ? 'show' : 'hide', [this]);\n\n return promise.then(function () {\n trigger(el, show ? 'shown' : 'hidden', [this$1]);\n this$1.$update(el);\n });\n },\n\n _toggle: function(el, toggled) {\n\n if (!el) {\n return;\n }\n\n var changed;\n if (this.cls) {\n changed = includes(this.cls, ' ') || Boolean(toggled) !== hasClass(el, this.cls);\n changed && toggleClass(el, this.cls, includes(this.cls, ' ') ? undefined : toggled);\n } else {\n changed = Boolean(toggled) === hasAttr(el, 'hidden');\n changed && attr(el, 'hidden', !toggled ? '' : null);\n }\n\n $$('[autofocus]', el).some(function (el) { return isVisible(el) && (el.focus() || true); });\n\n this.updateAria(el);\n changed && this.$update(el);\n },\n\n _toggleImmediate: function(el, show) {\n this._toggle(el, show);\n return Promise$1.resolve();\n },\n\n _toggleHeight: function(el, show) {\n var this$1 = this;\n\n\n var inProgress = Transition.inProgress(el);\n var inner = el.hasChildNodes ? toFloat(css(el.firstElementChild, 'marginTop')) + toFloat(css(el.lastElementChild, 'marginBottom')) : 0;\n var currentHeight = isVisible(el) ? height(el) + (inProgress ? 0 : inner) : 0;\n\n Transition.cancel(el);\n\n if (!this.isToggled(el)) {\n this._toggle(el, true);\n }\n\n height(el, '');\n\n // Update child components first\n fastdom.flush();\n\n var endHeight = height(el) + (inProgress ? 0 : inner);\n height(el, currentHeight);\n\n return (show\n ? Transition.start(el, assign({}, this.initProps, {overflow: 'hidden', height: endHeight}), Math.round(this.duration * (1 - currentHeight / endHeight)), this.transition)\n : Transition.start(el, this.hideProps, Math.round(this.duration * (currentHeight / endHeight)), this.transition).then(function () { return this$1._toggle(el, false); })\n ).then(function () { return css(el, this$1.initProps); });\n\n },\n\n _toggleAnimation: function(el, show) {\n var this$1 = this;\n\n\n Animation.cancel(el);\n\n if (show) {\n this._toggle(el, true);\n return Animation.in(el, this.animation[0], this.duration, this.origin);\n }\n\n return Animation.out(el, this.animation[1] || this.animation[0], this.duration, this.origin).then(function () { return this$1._toggle(el, false); });\n }\n\n }\n\n };\n\n var Accordion = {\n\n mixins: [Class, Togglable],\n\n props: {\n targets: String,\n active: null,\n collapsible: Boolean,\n multiple: Boolean,\n toggle: String,\n content: String,\n transition: String\n },\n\n data: {\n targets: '> *',\n active: false,\n animation: [true],\n collapsible: true,\n multiple: false,\n clsOpen: 'uk-open',\n toggle: '> .uk-accordion-title',\n content: '> .uk-accordion-content',\n transition: 'ease'\n },\n\n computed: {\n\n items: function(ref, $el) {\n var targets = ref.targets;\n\n return $$(targets, $el);\n }\n\n },\n\n events: [\n\n {\n\n name: 'click',\n\n delegate: function() {\n return ((this.targets) + \" \" + (this.$props.toggle));\n },\n\n handler: function(e) {\n e.preventDefault();\n this.toggle(index($$(((this.targets) + \" \" + (this.$props.toggle)), this.$el), e.current));\n }\n\n }\n\n ],\n\n connected: function() {\n\n if (this.active === false) {\n return;\n }\n\n var active = this.items[Number(this.active)];\n if (active && !hasClass(active, this.clsOpen)) {\n this.toggle(active, false);\n }\n },\n\n update: function() {\n var this$1 = this;\n\n\n this.items.forEach(function (el) { return this$1._toggleImmediate($(this$1.content, el), hasClass(el, this$1.clsOpen)); });\n\n var active = !this.collapsible && !hasClass(this.items, this.clsOpen) && this.items[0];\n if (active) {\n this.toggle(active, false);\n }\n },\n\n methods: {\n\n toggle: function(item, animate$$1) {\n var this$1 = this;\n\n\n var index$$1 = getIndex(item, this.items);\n var active = filter(this.items, (\".\" + (this.clsOpen)));\n\n item = this.items[index$$1];\n\n item && [item]\n .concat(!this.multiple && !includes(active, item) && active || [])\n .forEach(function (el) {\n\n var isItem = el === item;\n var state = isItem && !hasClass(el, this$1.clsOpen);\n\n if (!state && isItem && !this$1.collapsible && active.length < 2) {\n return;\n }\n\n toggleClass(el, this$1.clsOpen, state);\n\n var content = el._wrapper ? el._wrapper.firstElementChild : $(this$1.content, el);\n\n if (!el._wrapper) {\n el._wrapper = wrapAll(content, '<div>');\n attr(el._wrapper, 'hidden', state ? '' : null);\n }\n\n this$1._toggleImmediate(content, true);\n this$1.toggleElement(el._wrapper, state, animate$$1).then(function () {\n if (hasClass(el, this$1.clsOpen) === state) {\n\n if (!state) {\n this$1._toggleImmediate(content, false);\n }\n\n el._wrapper = null;\n unwrap(content);\n }\n });\n\n });\n }\n\n }\n\n };\n\n var Alert = {\n\n attrs: true,\n\n mixins: [Class, Togglable],\n\n args: 'animation',\n\n props: {\n close: String\n },\n\n data: {\n animation: [true],\n selClose: '.uk-alert-close',\n duration: 150,\n hideProps: assign({opacity: 0}, Togglable.data.hideProps)\n },\n\n events: [\n\n {\n\n name: 'click',\n\n delegate: function() {\n return this.selClose;\n },\n\n handler: function(e) {\n e.preventDefault();\n this.close();\n }\n\n }\n\n ],\n\n methods: {\n\n close: function() {\n var this$1 = this;\n\n this.toggleElement(this.$el).then(function () { return this$1.$destroy(true); });\n }\n\n }\n\n };\n\n function Core (UIkit) {\n\n ready(function () {\n\n var scroll = 0;\n var started = 0;\n\n on(window, 'load resize', function (e) { return UIkit.update(null, e); });\n on(window, 'scroll', function (e) {\n e.dir = scroll <= window.pageYOffset ? 'down' : 'up';\n e.pageYOffset = scroll = window.pageYOffset;\n UIkit.update(null, e);\n }, {capture: true, passive: false});\n\n on(document, 'animationstart', function (ref) {\n var target = ref.target;\n\n if ((css(target, 'animationName') || '').match(/^uk-.*(left|right)/)) {\n\n started++;\n css(document.body, 'overflowX', 'hidden');\n setTimeout(function () {\n if (!--started) {\n css(document.body, 'overflowX', '');\n }\n }, toMs(css(target, 'animationDuration')) + 100);\n }\n }, true);\n\n if (!hasTouch) {\n return;\n }\n\n var cls = 'uk-hover';\n\n on(document, 'tap', function (ref) {\n var target = ref.target;\n\n return $$((\".\" + cls)).forEach(function (el) { return !within(target, el) && removeClass(el, cls); }\n );\n }\n );\n\n Object.defineProperty(UIkit, 'hoverSelector', {\n\n set: function(selector) {\n on(document, 'tap', selector, function (ref) {\n var current = ref.current;\n\n return addClass(current, cls);\n });\n }\n\n });\n\n UIkit.hoverSelector = '.uk-animation-toggle, .uk-transition-toggle, [uk-hover]';\n\n });\n\n }\n\n var Video = {\n\n args: 'autoplay',\n\n props: {\n automute: Boolean,\n autoplay: Boolean,\n },\n\n data: {\n automute: false,\n autoplay: true\n },\n\n computed: {\n\n inView: function(ref) {\n var autoplay = ref.autoplay;\n\n return autoplay === 'inview';\n }\n\n },\n\n connected: function() {\n\n if (this.inView && !hasAttr(this.$el, 'preload')) {\n this.$el.preload = 'none';\n }\n\n },\n\n ready: function() {\n\n this.player = new Player(this.$el);\n\n if (this.automute) {\n this.player.mute();\n }\n\n },\n\n update: [\n\n {\n\n read: function(_, ref) {\n var type = ref.type;\n\n\n return !this.player || (type === 'scroll' || type === 'resize') && !this.inView\n ? false\n : {\n visible: isVisible(this.$el) && css(this.$el, 'visibility') !== 'hidden',\n inView: this.inView && isInView(this.$el)\n };\n },\n\n write: function(ref) {\n var visible = ref.visible;\n var inView = ref.inView;\n\n\n if (!visible || this.inView && !inView) {\n this.player.pause();\n } else if (this.autoplay === true || this.inView && inView) {\n this.player.play();\n }\n\n },\n\n events: ['load', 'resize', 'scroll']\n\n }\n\n ]\n\n };\n\n var Cover = {\n\n mixins: [Class, Video],\n\n props: {\n width: Number,\n height: Number\n },\n\n data: {\n automute: true\n },\n\n update: {\n\n write: function() {\n\n var el = this.$el;\n\n if (!isVisible(el)) {\n return;\n }\n\n var ref = el.parentNode;\n var height$$1 = ref.offsetHeight;\n var width$$1 = ref.offsetWidth;\n\n css(\n css(el, {width: '', height: ''}),\n Dimensions.cover(\n {\n width: this.width || el.clientWidth,\n height: this.height || el.clientHeight\n },\n {\n width: width$$1 + (width$$1 % 2 ? 1 : 0),\n height: height$$1 + (height$$1 % 2 ? 1 : 0)\n }\n )\n );\n\n },\n\n events: ['load', 'resize']\n\n },\n\n events: {\n\n loadedmetadata: function() {\n this.$emit();\n }\n\n }\n\n };\n\n var Position = {\n\n props: {\n pos: String,\n offset: null,\n flip: Boolean,\n clsPos: String\n },\n\n data: {\n pos: (\"bottom-\" + (!isRtl ? 'left' : 'right')),\n flip: true,\n offset: false,\n clsPos: ''\n },\n\n computed: {\n\n pos: function(ref) {\n var pos = ref.pos;\n\n return (pos + (!includes(pos, '-') ? '-center' : '')).split('-');\n },\n\n dir: function() {\n return this.pos[0];\n },\n\n align: function() {\n return this.pos[1];\n }\n\n },\n\n methods: {\n\n positionAt: function(element, target, boundary) {\n\n removeClasses(element, ((this.clsPos) + \"-(top|bottom|left|right)(-[a-z]+)?\"));\n css(element, {top: '', left: ''});\n\n var node;\n var ref = this;\n var offset$$1 = ref.offset;\n\n offset$$1 = isNumeric(offset$$1)\n ? offset$$1\n : (node = $(offset$$1))\n ? offset(node)[axis === 'x' ? 'left' : 'top'] - offset(target)[axis === 'x' ? 'right' : 'bottom']\n : 0;\n\n var axis = this.getAxis();\n var ref$1 = positionAt(\n element,\n target,\n axis === 'x' ? ((flipPosition(this.dir)) + \" \" + (this.align)) : ((this.align) + \" \" + (flipPosition(this.dir))),\n axis === 'x' ? ((this.dir) + \" \" + (this.align)) : ((this.align) + \" \" + (this.dir)),\n axis === 'x' ? (\"\" + (this.dir === 'left' ? -offset$$1 : offset$$1)) : (\" \" + (this.dir === 'top' ? -offset$$1 : offset$$1)),\n null,\n this.flip,\n boundary\n ).target;\n var x = ref$1.x;\n var y = ref$1.y;\n\n this.dir = axis === 'x' ? x : y;\n this.align = axis === 'x' ? y : x;\n\n toggleClass(element, ((this.clsPos) + \"-\" + (this.dir) + \"-\" + (this.align)), this.offset === false);\n\n },\n\n getAxis: function() {\n return this.dir === 'top' || this.dir === 'bottom' ? 'y' : 'x';\n }\n\n }\n\n };\n\n var active;\n\n var Drop = {\n\n mixins: [Position, Togglable],\n\n args: 'pos',\n\n props: {\n mode: 'list',\n toggle: Boolean,\n boundary: Boolean,\n boundaryAlign: Boolean,\n delayShow: Number,\n delayHide: Number,\n clsDrop: String\n },\n\n data: {\n mode: ['click', 'hover'],\n toggle: '- *',\n boundary: window,\n boundaryAlign: false,\n delayShow: 0,\n delayHide: 800,\n clsDrop: false,\n hoverIdle: 200,\n animation: ['uk-animation-fade'],\n cls: 'uk-open'\n },\n\n computed: {\n\n boundary: function(ref, $el) {\n var boundary = ref.boundary;\n\n return query(boundary, $el);\n },\n\n clsDrop: function(ref) {\n var clsDrop = ref.clsDrop;\n\n return clsDrop || (\"uk-\" + (this.$options.name));\n },\n\n clsPos: function() {\n return this.clsDrop;\n }\n\n },\n\n init: function() {\n this.tracker = new MouseTracker();\n },\n\n connected: function() {\n\n addClass(this.$el, this.clsDrop);\n\n var ref = this.$props;\n var toggle = ref.toggle;\n this.toggle = toggle && this.$create('toggle', query(toggle, this.$el), {\n target: this.$el,\n mode: this.mode\n });\n\n this.updateAria(this.$el);\n\n },\n\n events: [\n\n\n {\n\n name: 'click',\n\n delegate: function() {\n return (\".\" + (this.clsDrop) + \"-close\");\n },\n\n handler: function(e) {\n e.preventDefault();\n this.hide(false);\n }\n\n },\n\n {\n\n name: 'click',\n\n delegate: function() {\n return 'a[href^=\"#\"]';\n },\n\n handler: function(e) {\n\n if (e.defaultPrevented) {\n return;\n }\n\n var id = e.target.hash;\n\n if (!id) {\n e.preventDefault();\n }\n\n if (!id || !within(id, this.$el)) {\n this.hide(false);\n }\n }\n\n },\n\n {\n\n name: 'beforescroll',\n\n handler: function() {\n this.hide(false);\n }\n\n },\n\n {\n\n name: 'toggle',\n\n self: true,\n\n handler: function(e, toggle) {\n\n e.preventDefault();\n\n if (this.isToggled()) {\n this.hide(false);\n } else {\n this.show(toggle, false);\n }\n }\n\n },\n\n {\n\n name: pointerEnter,\n\n filter: function() {\n return includes(this.mode, 'hover');\n },\n\n handler: function(e) {\n\n if (isTouch(e)) {\n return;\n }\n\n if (active\n && active !== this\n && active.toggle\n && includes(active.toggle.mode, 'hover')\n && !within(e.target, active.toggle.$el)\n && !pointInRect({x: e.pageX, y: e.pageY}, offset(active.$el))\n ) {\n active.hide(false);\n }\n\n e.preventDefault();\n this.show(this.toggle);\n }\n\n },\n\n {\n\n name: 'toggleshow',\n\n handler: function(e, toggle) {\n\n if (toggle && !includes(toggle.target, this.$el)) {\n return;\n }\n\n e.preventDefault();\n this.show(toggle || this.toggle);\n }\n\n },\n\n {\n\n name: (\"togglehide \" + pointerLeave),\n\n handler: function(e, toggle) {\n\n if (isTouch(e) || toggle && !includes(toggle.target, this.$el)) {\n return;\n }\n\n e.preventDefault();\n\n if (this.toggle && includes(this.toggle.mode, 'hover')) {\n this.hide();\n }\n }\n\n },\n\n {\n\n name: 'beforeshow',\n\n self: true,\n\n handler: function() {\n this.clearTimers();\n Animation.cancel(this.$el);\n this.position();\n }\n\n },\n\n {\n\n name: 'show',\n\n self: true,\n\n handler: function() {\n this.tracker.init();\n if (this.toggle) {\n addClass(this.toggle.$el, this.cls);\n attr(this.toggle.$el, 'aria-expanded', 'true');\n }\n registerEvent();\n }\n\n },\n\n {\n\n name: 'beforehide',\n\n self: true,\n\n handler: function() {\n this.clearTimers();\n }\n\n },\n\n {\n\n name: 'hide',\n\n handler: function(ref) {\n var target = ref.target;\n\n\n if (this.$el !== target) {\n active = active === null && within(target, this.$el) && this.isToggled() ? this : active;\n return;\n }\n\n active = this.isActive() ? null : active;\n\n if (this.toggle) {\n removeClass(this.toggle.$el, this.cls);\n attr(this.toggle.$el, 'aria-expanded', 'false');\n this.toggle.$el.blur();\n $$('a, button', this.toggle.$el).forEach(function (el) { return el.blur(); });\n }\n\n this.tracker.cancel();\n }\n\n }\n\n ],\n\n update: {\n\n write: function() {\n\n if (this.isToggled() && !Animation.inProgress(this.$el)) {\n this.position();\n }\n\n },\n\n events: ['resize']\n\n },\n\n methods: {\n\n show: function(toggle, delay) {\n var this$1 = this;\n if ( delay === void 0 ) delay = true;\n\n\n var show = function () { return !this$1.isToggled() && this$1.toggleElement(this$1.$el, true); };\n var tryShow = function () {\n\n this$1.toggle = toggle || this$1.toggle;\n\n this$1.clearTimers();\n\n if (this$1.isActive()) {\n return;\n } else if (delay && active && active !== this$1 && active.isDelaying) {\n this$1.showTimer = setTimeout(this$1.show, 10);\n return;\n } else if (this$1.isParentOf(active)) {\n\n if (active.hideTimer) {\n active.hide(false);\n } else {\n return;\n }\n\n } else if (active && !this$1.isChildOf(active) && !this$1.isParentOf(active)) {\n\n var prev;\n while (active && active !== prev && !this$1.isChildOf(active)) {\n prev = active;\n active.hide(false);\n }\n\n }\n\n if (delay && this$1.delayShow) {\n this$1.showTimer = setTimeout(show, this$1.delayShow);\n } else {\n show();\n }\n\n active = this$1;\n };\n\n if (toggle && this.toggle && toggle.$el !== this.toggle.$el) {\n\n once(this.$el, 'hide', tryShow);\n this.hide(false);\n\n } else {\n tryShow();\n }\n },\n\n hide: function(delay) {\n var this$1 = this;\n if ( delay === void 0 ) delay = true;\n\n\n var hide = function () { return this$1.toggleNow(this$1.$el, false); };\n\n this.clearTimers();\n\n this.isDelaying = this.tracker.movesTo(this.$el);\n\n if (delay && this.isDelaying) {\n this.hideTimer = setTimeout(this.hide, this.hoverIdle);\n } else if (delay && this.delayHide) {\n this.hideTimer = setTimeout(hide, this.delayHide);\n } else {\n hide();\n }\n },\n\n clearTimers: function() {\n clearTimeout(this.showTimer);\n clearTimeout(this.hideTimer);\n this.showTimer = null;\n this.hideTimer = null;\n this.isDelaying = false;\n },\n\n isActive: function() {\n return active === this;\n },\n\n isChildOf: function(drop) {\n return drop && drop !== this && within(this.$el, drop.$el);\n },\n\n isParentOf: function(drop) {\n return drop && drop !== this && within(drop.$el, this.$el);\n },\n\n position: function() {\n\n removeClasses(this.$el, ((this.clsDrop) + \"-(stack|boundary)\"));\n css(this.$el, {top: '', left: '', display: 'block'});\n toggleClass(this.$el, ((this.clsDrop) + \"-boundary\"), this.boundaryAlign);\n\n var boundary = offset(this.boundary);\n var alignTo = this.boundaryAlign ? boundary : offset(this.toggle.$el);\n\n if (this.align === 'justify') {\n var prop = this.getAxis() === 'y' ? 'width' : 'height';\n css(this.$el, prop, alignTo[prop]);\n } else if (this.$el.offsetWidth > Math.max(boundary.right - alignTo.left, alignTo.right - boundary.left)) {\n addClass(this.$el, ((this.clsDrop) + \"-stack\"));\n }\n\n this.positionAt(this.$el, this.boundaryAlign ? this.boundary : this.toggle.$el, this.boundary);\n\n css(this.$el, 'display', '');\n\n }\n\n }\n\n };\n\n var registered;\n\n function registerEvent() {\n\n if (registered) {\n return;\n }\n\n registered = true;\n on(document, 'click', function (ref) {\n var target = ref.target;\n var defaultPrevented = ref.defaultPrevented;\n\n var prev;\n\n if (defaultPrevented) {\n return;\n }\n\n while (active && active !== prev && !within(target, active.$el) && !(active.toggle && within(target, active.toggle.$el))) {\n prev = active;\n active.hide(false);\n }\n });\n }\n\n var Dropdown = {\n\n extends: Drop\n\n };\n\n var FormCustom = {\n\n mixins: [Class],\n\n args: 'target',\n\n props: {\n target: Boolean\n },\n\n data: {\n target: false\n },\n\n computed: {\n\n input: function(_, $el) {\n return $(selInput, $el);\n },\n\n state: function() {\n return this.input.nextElementSibling;\n },\n\n target: function(ref, $el) {\n var target = ref.target;\n\n return target && (target === true\n && this.input.parentNode === $el\n && this.input.nextElementSibling\n || query(target, $el));\n }\n\n },\n\n update: function() {\n\n var ref = this;\n var target = ref.target;\n var input = ref.input;\n\n if (!target) {\n return;\n }\n\n var option;\n var prop = isInput(target) ? 'value' : 'textContent';\n var prev = target[prop];\n var value = input.files && input.files[0]\n ? input.files[0].name\n : matches(input, 'select') && (option = $$('option', input).filter(function (el) { return el.selected; })[0])\n ? option.textContent\n : input.value;\n\n if (prev !== value) {\n target[prop] = value;\n }\n\n },\n\n events: [\n\n {\n\n name: 'focusin focusout mouseenter mouseleave',\n\n delegate: selInput,\n\n handler: function(ref) {\n var type = ref.type;\n var current = ref.current;\n\n if (current === this.input) {\n toggleClass(\n this.state,\n (\"uk-\" + (includes(type, 'focus') ? 'focus' : 'hover')),\n includes(['focusin', 'mouseenter'], type)\n );\n }\n }\n\n },\n\n {\n\n name: 'change',\n\n handler: function() {\n this.$emit();\n }\n\n }\n\n ]\n\n };\n\n // Deprecated\n var Gif = {\n\n update: {\n\n read: function(data$$1) {\n\n var inview = isInView(this.$el);\n\n if (!inview || data$$1.isInView === inview) {\n return false;\n }\n\n data$$1.isInView = inview;\n },\n\n write: function() {\n this.$el.src = this.$el.src;\n },\n\n events: ['scroll', 'load', 'resize']\n }\n\n };\n\n var Margin = {\n\n props: {\n margin: String,\n firstColumn: Boolean\n },\n\n data: {\n margin: 'uk-margin-small-top',\n firstColumn: 'uk-first-column'\n },\n\n update: {\n\n read: function(data$$1) {\n\n var items = this.$el.children;\n var rows = [[]];\n\n if (!items.length || !isVisible(this.$el)) {\n return data$$1.rows = rows;\n }\n\n data$$1.rows = getRows(items);\n data$$1.stacks = !data$$1.rows.some(function (row) { return row.length > 1; });\n\n },\n\n write: function(ref) {\n var this$1 = this;\n var rows = ref.rows;\n\n\n rows.forEach(function (row, i) { return row.forEach(function (el, j) {\n toggleClass(el, this$1.margin, i !== 0);\n toggleClass(el, this$1.firstColumn, j === 0);\n }); }\n );\n\n },\n\n events: ['load', 'resize']\n\n }\n\n };\n\n function getRows(items) {\n var rows = [[]];\n\n for (var i = 0; i < items.length; i++) {\n\n var el = items[i];\n var dim = getOffset(el);\n\n if (!dim.height) {\n continue;\n }\n\n for (var j = rows.length - 1; j >= 0; j--) {\n\n var row = rows[j];\n\n if (!row[0]) {\n row.push(el);\n break;\n }\n\n var leftDim = getOffset(row[0]);\n\n if (dim.top >= leftDim.bottom - 1) {\n rows.push([el]);\n break;\n }\n\n if (dim.bottom > leftDim.top) {\n\n if (dim.left < leftDim.left && !isRtl) {\n row.unshift(el);\n break;\n }\n\n row.push(el);\n break;\n }\n\n if (j === 0) {\n rows.unshift([el]);\n break;\n }\n\n }\n\n }\n\n return rows;\n\n }\n\n function getOffset(element) {\n\n var offsetTop = element.offsetTop;\n var offsetLeft = element.offsetLeft;\n var offsetHeight = element.offsetHeight;\n\n return {\n top: offsetTop,\n left: offsetLeft,\n height: offsetHeight,\n bottom: offsetTop + offsetHeight\n };\n }\n\n var Grid = {\n\n extends: Margin,\n\n mixins: [Class],\n\n attrs: true,\n\n name: 'grid',\n\n props: {\n masonry: Boolean,\n parallax: Number\n },\n\n data: {\n margin: 'uk-grid-margin',\n clsStack: 'uk-grid-stack',\n masonry: false,\n parallax: 0\n },\n\n computed: {\n\n parallax: function(ref) {\n var parallax = ref.parallax;\n\n return Math.abs(parallax);\n }\n\n },\n\n connected: function() {\n this.masonry && addClass(this.$el, 'uk-flex-top uk-flex-wrap-top');\n },\n\n update: [\n\n {\n\n read: function(ref) {\n var rows = ref.rows;\n\n\n if (this.masonry || this.parallax) {\n rows = rows.map(function (elements) { return sortBy(elements, 'offsetLeft'); });\n }\n\n var translates = false;\n var elHeight = false;\n\n if (this.masonry) {\n\n var height$$1 = 0;\n\n translates = rows.reduce(function (translates, row, i) {\n\n translates[i] = row.map(function (_, j) { return i === 0 ? 0 : toFloat(translates[i - 1][j]) + (height$$1 - toFloat(rows[i - 1][j] && rows[i - 1][j].offsetHeight)); });\n height$$1 = row.reduce(function (height$$1, el) { return Math.max(height$$1, el.offsetHeight); }, 0);\n\n return translates;\n\n }, []);\n\n elHeight = maxColumnHeight(rows) + getMarginTop(this.$el, this.margin) * (rows.length - 1);\n\n }\n\n return {rows: rows, translates: translates, height: elHeight};\n\n },\n\n write: function(ref) {\n var rows = ref.rows;\n var stacks = ref.stacks;\n var height$$1 = ref.height;\n\n\n toggleClass(this.$el, this.clsStack, stacks);\n\n css(this.$el, 'paddingBottom', this.parallax && rows.some(function (row) { return row.length > 1; }) ? this.parallax : '');\n\n height$$1 && css(this.$el, 'minHeight', height$$1);\n\n },\n\n events: ['load', 'resize']\n\n },\n\n {\n\n read: function(ref) {\n var rows = ref.rows;\n var height$$1 = ref.height;\n\n return {\n scrolled: this.parallax && rows.some(function (row) { return row.length > 1; })\n ? scrolledOver(this.$el, height$$1 ? height$$1 - height(this.$el) : 0) * this.parallax\n : false\n };\n },\n\n write: function(ref) {\n var rows = ref.rows;\n var scrolled = ref.scrolled;\n var translates = ref.translates;\n\n\n if (scrolled === false && !translates) {\n return;\n }\n\n rows.forEach(function (row, i) { return row.forEach(function (el, j) { return css(el, 'transform', !scrolled && !translates ? '' : (\"translateY(\" + ((translates && -translates[i][j]) + (scrolled ? j % 2 ? scrolled : scrolled / 8 : 0)) + \"px)\")); }\n ); }\n );\n\n },\n\n events: ['scroll', 'load', 'resize']\n\n }\n\n ]\n\n };\n\n function getMarginTop(root, cls) {\n\n var nodes = toNodes(root.children);\n var ref = nodes.filter(function (el) { return hasClass(el, cls); });\n var node = ref[0];\n\n return toFloat(node\n ? css(node, 'marginTop')\n : css(nodes[0], 'paddingLeft'));\n }\n\n function maxColumnHeight(rows) {\n return Math.max.apply(Math, rows.reduce(function (sum, row) {\n row.forEach(function (el, i) { return sum[i] = (sum[i] || 0) + el.offsetHeight; });\n return sum;\n }, []));\n }\n\n var HeightMatch = {\n\n args: 'target',\n\n props: {\n target: String,\n row: Boolean\n },\n\n data: {\n target: '> *',\n row: true\n },\n\n computed: {\n\n elements: function(ref, $el) {\n var target = ref.target;\n\n return $$(target, $el);\n }\n\n },\n\n update: {\n\n read: function() {\n var this$1 = this;\n\n\n css(this.elements, {\n minHeight: '',\n boxSizing: ''\n });\n\n return {\n rows: !this.row\n ? [this.match(this.elements)]\n : getRows(this.elements).map(function (elements) { return this$1.match(elements); })\n };\n },\n\n write: function(ref) {\n var rows = ref.rows;\n\n\n rows.forEach(function (ref) {\n var height$$1 = ref.height;\n var elements = ref.elements;\n\n return css(elements, {\n minHeight: height$$1,\n boxSizing: 'border-box'\n });\n });\n\n },\n\n events: ['load', 'resize']\n\n },\n\n methods: {\n\n match: function(elements) {\n\n if (elements.length < 2) {\n return {};\n }\n\n var heights = [];\n var max = 0;\n\n elements\n .forEach(function (el) {\n var ref = offset(el);\n var height$$1 = ref.height;\n max = Math.max(max, height$$1);\n heights.push(height$$1);\n });\n\n elements = elements.filter(function (el, i) { return heights[i] < max; });\n\n return {height: max, elements: elements};\n }\n }\n\n };\n\n var HeightViewport = {\n\n props: {\n expand: Boolean,\n offsetTop: Boolean,\n offsetBottom: Boolean,\n minHeight: Number\n },\n\n data: {\n expand: false,\n offsetTop: false,\n offsetBottom: false,\n minHeight: 0\n },\n\n update: {\n\n write: function() {\n\n css(this.$el, 'boxSizing', 'border-box');\n\n var viewport = height(window);\n var minHeight, offsetTop = 0;\n\n if (this.expand) {\n\n css(this.$el, {height: '', minHeight: ''});\n\n var diff = viewport - offsetHeight(document.documentElement);\n\n if (diff > 0) {\n minHeight = offsetHeight(this.$el) + diff;\n }\n\n } else {\n\n var ref = offset(this.$el);\n var top = ref.top;\n\n if (top < viewport / 2 && this.offsetTop) {\n offsetTop += top;\n }\n\n if (this.offsetBottom === true) {\n\n offsetTop += offsetHeight(this.$el.nextElementSibling);\n\n } else if (isNumeric(this.offsetBottom)) {\n\n offsetTop += (viewport / 100) * this.offsetBottom;\n\n } else if (this.offsetBottom && endsWith(this.offsetBottom, 'px')) {\n\n offsetTop += toFloat(this.offsetBottom);\n\n } else if (isString(this.offsetBottom)) {\n\n offsetTop += offsetHeight(query(this.offsetBottom, this.$el));\n\n }\n\n // on mobile devices (iOS and Android) window.innerHeight !== 100vh\n minHeight = offsetTop ? (\"calc(100vh - \" + offsetTop + \"px)\") : '100vh';\n\n }\n\n if (!minHeight) {\n return;\n }\n\n css(this.$el, {height: '', minHeight: minHeight});\n\n var elHeight = this.$el.offsetHeight;\n if (this.minHeight && this.minHeight > elHeight) {\n css(this.$el, 'minHeight', this.minHeight);\n }\n\n // IE 11 fix (min-height on a flex container won't apply to its flex items)\n if (viewport - offsetTop >= elHeight) {\n css(this.$el, 'height', minHeight);\n }\n\n },\n\n events: ['load', 'resize']\n\n }\n\n };\n\n function offsetHeight(el) {\n return el && el.offsetHeight || 0;\n }\n\n var svgs = {};\n\n var SVG = {\n\n attrs: true,\n\n props: {\n id: String,\n icon: String,\n src: String,\n style: String,\n width: Number,\n height: Number,\n ratio: Number,\n 'class': String\n },\n\n data: {\n ratio: 1,\n id: false,\n exclude: ['ratio', 'src', 'icon'],\n 'class': ''\n },\n\n connected: function() {\n var this$1 = this;\n var assign$$1;\n\n\n this.class += ' uk-svg';\n\n if (!this.icon && includes(this.src, '#')) {\n\n var parts = this.src.split('#');\n\n if (parts.length > 1) {\n (assign$$1 = parts, this.src = assign$$1[0], this.icon = assign$$1[1]);\n }\n }\n\n this.svg = this.getSvg().then(function (svg) {\n\n var el;\n\n if (isString(svg)) {\n\n if (this$1.icon && includes(svg, '<symbol')) {\n svg = parseSymbols(svg, this$1.icon) || svg;\n }\n\n el = $(svg.substr(svg.indexOf('<svg')));\n\n } else {\n el = svg.cloneNode(true);\n }\n\n if (!el) {\n return Promise$1.reject('SVG not found.');\n }\n\n var dimensions = attr(el, 'viewBox');\n\n if (dimensions) {\n dimensions = dimensions.split(' ');\n this$1.width = this$1.$props.width || dimensions[2];\n this$1.height = this$1.$props.height || dimensions[3];\n }\n\n this$1.width *= this$1.ratio;\n this$1.height *= this$1.ratio;\n\n for (var prop in this$1.$options.props) {\n if (this$1[prop] && !includes(this$1.exclude, prop)) {\n attr(el, prop, this$1[prop]);\n }\n }\n\n if (!this$1.id) {\n removeAttr(el, 'id');\n }\n\n if (this$1.width && !this$1.height) {\n removeAttr(el, 'height');\n }\n\n if (this$1.height && !this$1.width) {\n removeAttr(el, 'width');\n }\n\n var root = this$1.$el;\n if (isVoidElement(root) || root.tagName === 'CANVAS') {\n\n attr(root, {hidden: true, id: null});\n\n var next = root.nextElementSibling;\n if (next && el.isEqualNode(next)) {\n el = next;\n } else {\n after(root, el);\n }\n\n } else {\n\n var last = root.lastElementChild;\n if (last && el.isEqualNode(last)) {\n el = last;\n } else {\n append(root, el);\n }\n\n }\n\n this$1.svgEl = el;\n\n return el;\n\n }, noop);\n\n },\n\n disconnected: function() {\n var this$1 = this;\n\n\n if (isVoidElement(this.$el)) {\n attr(this.$el, {hidden: null, id: this.id || null});\n }\n\n if (this.svg) {\n this.svg.then(function (svg) { return (!this$1._connected || svg !== this$1.svgEl) && remove(svg); }, noop);\n }\n\n this.svg = this.svgEl = null;\n\n },\n\n methods: {\n\n getSvg: function() {\n var this$1 = this;\n\n\n if (!this.src) {\n return Promise$1.reject();\n }\n\n if (svgs[this.src]) {\n return svgs[this.src];\n }\n\n svgs[this.src] = new Promise$1(function (resolve, reject) {\n\n if (startsWith(this$1.src, 'data:')) {\n resolve(decodeURIComponent(this$1.src.split(',')[1]));\n } else {\n\n ajax(this$1.src).then(\n function (xhr) { return resolve(xhr.response); },\n function () { return reject('SVG not found.'); }\n );\n\n }\n\n });\n\n return svgs[this.src];\n\n }\n\n }\n\n };\n\n var symbolRe = /<symbol(.*?id=(['\"])(.*?)\\2[^]*?<\\/)symbol>/g;\n var symbols = {};\n\n function parseSymbols(svg, icon) {\n\n if (!symbols[svg]) {\n\n symbols[svg] = {};\n\n var match;\n while ((match = symbolRe.exec(svg))) {\n symbols[svg][match[3]] = \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\"\" + (match[1]) + \"svg>\";\n }\n\n symbolRe.lastIndex = 0;\n\n }\n\n return symbols[svg][icon];\n }\n\n var closeIcon = \"<svg width=\\\"14\\\" height=\\\"14\\\" viewBox=\\\"0 0 14 14\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><line fill=\\\"none\\\" stroke=\\\"#000\\\" stroke-width=\\\"1.1\\\" x1=\\\"1\\\" y1=\\\"1\\\" x2=\\\"13\\\" y2=\\\"13\\\"/><line fill=\\\"none\\\" stroke=\\\"#000\\\" stroke-width=\\\"1.1\\\" x1=\\\"13\\\" y1=\\\"1\\\" x2=\\\"1\\\" y2=\\\"13\\\"/></svg>\";\n\n var closeLarge = \"<svg width=\\\"20\\\" height=\\\"20\\\" viewBox=\\\"0 0 20 20\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><line fill=\\\"none\\\" stroke=\\\"#000\\\" stroke-width=\\\"1.4\\\" x1=\\\"1\\\" y1=\\\"1\\\" x2=\\\"19\\\" y2=\\\"19\\\"/><line fill=\\\"none\\\" stroke=\\\"#000\\\" stroke-width=\\\"1.4\\\" x1=\\\"19\\\" y1=\\\"1\\\" x2=\\\"1\\\" y2=\\\"19\\\"/></svg>\";\n\n var marker = \"<svg width=\\\"20\\\" height=\\\"20\\\" viewBox=\\\"0 0 20 20\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><rect x=\\\"9\\\" y=\\\"4\\\" width=\\\"1\\\" height=\\\"11\\\"/><rect x=\\\"4\\\" y=\\\"9\\\" width=\\\"11\\\" height=\\\"1\\\"/></svg>\";\n\n var navbarToggleIcon = \"<svg width=\\\"20\\\" height=\\\"20\\\" viewBox=\\\"0 0 20 20\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><rect y=\\\"9\\\" width=\\\"20\\\" height=\\\"2\\\"/><rect y=\\\"3\\\" width=\\\"20\\\" height=\\\"2\\\"/><rect y=\\\"15\\\" width=\\\"20\\\" height=\\\"2\\\"/></svg>\";\n\n var overlayIcon = \"<svg width=\\\"40\\\" height=\\\"40\\\" viewBox=\\\"0 0 40 40\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><rect x=\\\"19\\\" y=\\\"0\\\" width=\\\"1\\\" height=\\\"40\\\"/><rect x=\\\"0\\\" y=\\\"19\\\" width=\\\"40\\\" height=\\\"1\\\"/></svg>\";\n\n var paginationNext = \"<svg width=\\\"7\\\" height=\\\"12\\\" viewBox=\\\"0 0 7 12\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><polyline fill=\\\"none\\\" stroke=\\\"#000\\\" stroke-width=\\\"1.2\\\" points=\\\"1 1 6 6 1 11\\\"/></svg>\";\n\n var paginationPrevious = \"<svg width=\\\"7\\\" height=\\\"12\\\" viewBox=\\\"0 0 7 12\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><polyline fill=\\\"none\\\" stroke=\\\"#000\\\" stroke-width=\\\"1.2\\\" points=\\\"6 1 1 6 6 11\\\"/></svg>\";\n\n var searchIcon = \"<svg width=\\\"20\\\" height=\\\"20\\\" viewBox=\\\"0 0 20 20\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><circle fill=\\\"none\\\" stroke=\\\"#000\\\" stroke-width=\\\"1.1\\\" cx=\\\"9\\\" cy=\\\"9\\\" r=\\\"7\\\"/><path fill=\\\"none\\\" stroke=\\\"#000\\\" stroke-width=\\\"1.1\\\" d=\\\"M14,14 L18,18 L14,14 Z\\\"/></svg>\";\n\n var searchLarge = \"<svg width=\\\"40\\\" height=\\\"40\\\" viewBox=\\\"0 0 40 40\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><circle fill=\\\"none\\\" stroke=\\\"#000\\\" stroke-width=\\\"1.8\\\" cx=\\\"17.5\\\" cy=\\\"17.5\\\" r=\\\"16.5\\\"/><line fill=\\\"none\\\" stroke=\\\"#000\\\" stroke-width=\\\"1.8\\\" x1=\\\"38\\\" y1=\\\"39\\\" x2=\\\"29\\\" y2=\\\"30\\\"/></svg>\";\n\n var searchNavbar = \"<svg width=\\\"24\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><circle fill=\\\"none\\\" stroke=\\\"#000\\\" stroke-width=\\\"1.1\\\" cx=\\\"10.5\\\" cy=\\\"10.5\\\" r=\\\"9.5\\\"/><line fill=\\\"none\\\" stroke=\\\"#000\\\" stroke-width=\\\"1.1\\\" x1=\\\"23\\\" y1=\\\"23\\\" x2=\\\"17\\\" y2=\\\"17\\\"/></svg>\";\n\n var slidenavNext = \"<svg width=\\\"14px\\\" height=\\\"24px\\\" viewBox=\\\"0 0 14 24\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><polyline fill=\\\"none\\\" stroke=\\\"#000\\\" stroke-width=\\\"1.4\\\" points=\\\"1.225,23 12.775,12 1.225,1 \\\"/></svg>\";\n\n var slidenavNextLarge = \"<svg width=\\\"25px\\\" height=\\\"40px\\\" viewBox=\\\"0 0 25 40\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><polyline fill=\\\"none\\\" stroke=\\\"#000\\\" stroke-width=\\\"2\\\" points=\\\"4.002,38.547 22.527,20.024 4,1.5 \\\"/></svg>\";\n\n var slidenavPrevious = \"<svg width=\\\"14px\\\" height=\\\"24px\\\" viewBox=\\\"0 0 14 24\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><polyline fill=\\\"none\\\" stroke=\\\"#000\\\" stroke-width=\\\"1.4\\\" points=\\\"12.775,1 1.225,12 12.775,23 \\\"/></svg>\";\n\n var slidenavPreviousLarge = \"<svg width=\\\"25px\\\" height=\\\"40px\\\" viewBox=\\\"0 0 25 40\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><polyline fill=\\\"none\\\" stroke=\\\"#000\\\" stroke-width=\\\"2\\\" points=\\\"20.527,1.5 2,20.024 20.525,38.547 \\\"/></svg>\";\n\n var spinner = \"<svg width=\\\"30\\\" height=\\\"30\\\" viewBox=\\\"0 0 30 30\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><circle fill=\\\"none\\\" stroke=\\\"#000\\\" cx=\\\"15\\\" cy=\\\"15\\\" r=\\\"14\\\"/></svg>\";\n\n var totop = \"<svg width=\\\"18\\\" height=\\\"10\\\" viewBox=\\\"0 0 18 10\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><polyline fill=\\\"none\\\" stroke=\\\"#000\\\" stroke-width=\\\"1.2\\\" points=\\\"1 9 9 1 17 9 \\\"/></svg>\";\n\n var parsed = {};\n var icons = {\n spinner: spinner,\n totop: totop,\n marker: marker,\n 'close-icon': closeIcon,\n 'close-large': closeLarge,\n 'navbar-toggle-icon': navbarToggleIcon,\n 'overlay-icon': overlayIcon,\n 'pagination-next': paginationNext,\n 'pagination-previous': paginationPrevious,\n 'search-icon': searchIcon,\n 'search-large': searchLarge,\n 'search-navbar': searchNavbar,\n 'slidenav-next': slidenavNext,\n 'slidenav-next-large': slidenavNextLarge,\n 'slidenav-previous': slidenavPrevious,\n 'slidenav-previous-large': slidenavPreviousLarge\n };\n\n var Icon = {\n\n install: install,\n\n attrs: ['icon', 'ratio'],\n\n mixins: [Class, SVG],\n\n args: 'icon',\n\n props: ['icon'],\n\n data: {exclude: ['id', 'style', 'class', 'src', 'icon', 'ratio']},\n\n isIcon: true,\n\n connected: function() {\n addClass(this.$el, 'uk-icon');\n },\n\n methods: {\n\n getSvg: function() {\n\n var icon = getIcon(applyRtl(this.icon));\n\n if (!icon) {\n return Promise$1.reject('Icon not found.');\n }\n\n return Promise$1.resolve(icon);\n }\n\n }\n\n };\n\n var IconComponent = {\n\n extends: Icon,\n\n data: function (vm) { return ({\n icon: hyphenate(vm.constructor.options.name)\n }); }\n\n };\n\n var Slidenav = {\n\n extends: IconComponent,\n\n connected: function() {\n addClass(this.$el, 'uk-slidenav');\n },\n\n computed: {\n\n icon: function(ref, $el) {\n var icon = ref.icon;\n\n return hasClass($el, 'uk-slidenav-large')\n ? (icon + \"-large\")\n : icon;\n }\n\n }\n\n };\n\n var Search = {\n\n extends: IconComponent,\n\n computed: {\n\n icon: function(ref, $el) {\n var icon = ref.icon;\n\n return hasClass($el, 'uk-search-icon') && parents($el, '.uk-search-large').length\n ? 'search-large'\n : parents($el, '.uk-search-navbar').length\n ? 'search-navbar'\n : icon;\n }\n\n }\n\n };\n\n var Close = {\n\n extends: IconComponent,\n\n computed: {\n\n icon: function() {\n return (\"close-\" + (hasClass(this.$el, 'uk-close-large') ? 'large' : 'icon'));\n }\n\n }\n\n };\n\n var Spinner = {\n\n extends: IconComponent,\n\n connected: function() {\n var this$1 = this;\n\n this.svg.then(function (svg) { return this$1.ratio !== 1 && css($('circle', svg), 'strokeWidth', 1 / this$1.ratio); }, noop);\n }\n\n };\n\n function install(UIkit) {\n UIkit.icon.add = function (name, svg) {\n var obj;\n\n\n var added = isString(name) ? (( obj = {}, obj[name] = svg, obj )) : name;\n each(added, function (svg, name) {\n icons[name] = svg;\n delete parsed[name];\n });\n\n if (UIkit._initialized) {\n apply(document.body, function (el) { return each(UIkit.getComponents(el), function (cmp) { return cmp.$options.isIcon && cmp.icon in added && cmp.$reset(); }\n ); }\n );\n }\n };\n }\n\n function getIcon(icon) {\n\n if (!icons[icon]) {\n return null;\n }\n\n if (!parsed[icon]) {\n parsed[icon] = $(icons[icon].trim());\n }\n\n return parsed[icon];\n }\n\n function applyRtl(icon) {\n return isRtl ? swap(swap(icon, 'left', 'right'), 'previous', 'next') : icon;\n }\n\n var Img = {\n\n attrs: true,\n\n props: {\n dataSrc: String,\n dataSrcset: Boolean,\n dataSizes: Boolean,\n sizes: String,\n width: Number,\n height: Number,\n dataWidth: Number,\n dataHeight: Number,\n offsetTop: String,\n offsetLeft: String,\n target: String\n },\n\n data: {\n dataSrc: '',\n dataSrcset: false,\n dataSizes: false,\n sizes: false,\n width: false,\n height: false,\n offsetTop: '50vh',\n offsetLeft: 0,\n target: false\n },\n\n computed: {\n\n cacheKey: function(ref) {\n var dataSrc = ref.dataSrc;\n\n return ((this.$name) + \".\" + dataSrc);\n },\n\n width: function(ref) {\n var width$$1 = ref.width;\n var dataWidth = ref.dataWidth;\n\n return width$$1 || dataWidth;\n },\n\n height: function(ref) {\n var height$$1 = ref.height;\n var dataHeight = ref.dataHeight;\n\n return height$$1 || dataHeight;\n },\n\n sizes: function(ref) {\n var sizes = ref.sizes;\n var dataSizes = ref.dataSizes;\n\n return sizes || dataSizes;\n },\n\n isImg: function(_, $el) {\n return isImg($el);\n },\n\n target: function(ref) {\n var target = ref.target;\n\n return [this.$el].concat(queryAll(target, this.$el));\n },\n\n offsetTop: function(ref) {\n var offsetTop = ref.offsetTop;\n\n return toPx(offsetTop, 'height');\n },\n\n offsetLeft: function(ref) {\n var offsetLeft = ref.offsetLeft;\n\n return toPx(offsetLeft, 'width');\n }\n\n },\n\n connected: function() {\n\n if (storage[this.cacheKey]) {\n setSrcAttrs(this.$el, storage[this.cacheKey] || this.dataSrc, this.dataSrcset, this.sizes);\n } else if (this.isImg && this.width && this.height) {\n setSrcAttrs(this.$el, getPlaceholderImage(this.width, this.height, this.sizes));\n }\n\n },\n\n update: [\n\n {\n\n read: function(ref) {\n var this$1 = this;\n var delay = ref.delay;\n var image = ref.image;\n\n\n if (!delay) {\n return;\n }\n\n if (image || !this.target.some(function (el) { return isInView(el, this$1.offsetTop, this$1.offsetLeft, true); })) {\n\n if (!this.isImg && image) {\n image.then(function (img) { return img && setSrcAttrs(this$1.$el, currentSrc(img)); });\n }\n\n return;\n }\n\n return {\n image: getImage(this.dataSrc, this.dataSrcset, this.sizes).then(function (img) {\n\n setSrcAttrs(this$1.$el, currentSrc(img), img.srcset, img.sizes);\n storage[this$1.cacheKey] = currentSrc(img);\n return img;\n\n }, noop)\n };\n\n },\n\n write: function(data$$1) {\n\n // Give placeholder images time to apply their dimensions\n if (!data$$1.delay) {\n this.$emit();\n return data$$1.delay = true;\n }\n\n },\n\n events: ['scroll', 'load', 'resize']\n\n }\n\n ]\n\n };\n\n function setSrcAttrs(el, src, srcset, sizes) {\n\n if (isImg(el)) {\n src && (el.src = src);\n srcset && (el.srcset = srcset);\n sizes && (el.sizes = sizes);\n } else {\n src && css(el, 'backgroundImage', (\"url(\" + src + \")\"));\n }\n\n }\n\n var urlCache = {};\n var sizesRe = /\\s*(.*?)\\s*(\\w+|calc\\(.*?\\))\\s*(?:,|$)/g;\n function getPlaceholderImage(width$$1, height$$1, sizes, color) {\n var assign$$1;\n\n if ( color === void 0 ) color = 'transparent';\n\n if (sizes) {\n var matches$$1;\n\n while ((matches$$1 = sizesRe.exec(sizes))) {\n if (!matches$$1[1] || window.matchMedia(matches$$1[1]).matches) {\n matches$$1 = evaluateSize(matches$$1[2]);\n break;\n }\n }\n\n sizesRe.lastIndex = 0;\n\n ((assign$$1 = Dimensions.ratio({width: width$$1, height: height$$1}, 'width', toPx(matches$$1 || '100vw')), width$$1 = assign$$1.width, height$$1 = assign$$1.height));\n\n }\n\n var key = width$$1 + \".\" + height$$1 + \".\" + color;\n if (urlCache[key]) {\n return urlCache[key];\n }\n\n var canvas = fragment('<canvas>');\n canvas.width = width$$1;\n canvas.height = height$$1;\n\n var context = canvas.getContext('2d');\n context.fillStyle = color;\n context.fillRect(0, 0, width$$1, height$$1);\n\n return urlCache[key] = canvas.toDataURL('image/png');\n }\n\n var sizeRe = /\\d+(?:\\w+|%)/g;\n var additionRe = /[+-]?(\\d+)/g;\n function evaluateSize(size) {\n return startsWith(size, 'calc')\n ? size\n .substring(5, size.length - 1)\n .replace(sizeRe, function (size) { return toPx(size); })\n .replace(/ /g, '')\n .match(additionRe)\n .reduce(function (a, b) { return a + +b; }, 0)\n : size;\n }\n\n function toPx(value, property, element) {\n if ( property === void 0 ) property = 'width';\n if ( element === void 0 ) element = window;\n\n return isNumeric(value)\n ? +value\n : endsWith(value, 'vw')\n ? percent(element, 'width', value)\n : endsWith(value, 'vh')\n ? percent(element, 'height', value)\n : endsWith(value, '%')\n ? percent(element, property, value)\n : toFloat(value);\n }\n\n var dimensions = {height: height, width: width};\n function percent(element, property, value) {\n return dimensions[property](element) * toFloat(value) / 100;\n }\n\n function isImg(el) {\n return el.tagName === 'IMG';\n }\n\n function currentSrc(el) {\n return el.currentSrc || el.src;\n }\n\n var key = '__test__';\n var storage;\n\n // workaround for Safari's private browsing mode and accessing sessionStorage in Blink\n try {\n storage = window.sessionStorage || {};\n storage[key] = 1;\n delete storage[key];\n } catch (e) {\n storage = {};\n }\n\n var Leader = {\n\n mixins: [Class],\n\n props: {\n fill: String,\n media: 'media'\n },\n\n data: {\n fill: '',\n media: false,\n clsWrapper: 'uk-leader-fill',\n clsHide: 'uk-leader-hide',\n attrFill: 'data-fill'\n },\n\n computed: {\n\n fill: function(ref) {\n var fill = ref.fill;\n\n return fill || getCssVar('leader-fill');\n }\n\n },\n\n connected: function() {\n var assign$$1;\n\n (assign$$1 = wrapInner(this.$el, (\"<span class=\\\"\" + (this.clsWrapper) + \"\\\">\")), this.wrapper = assign$$1[0]);\n },\n\n disconnected: function() {\n unwrap(this.wrapper.childNodes);\n },\n\n update: [\n\n {\n\n read: function(ref) {\n var changed = ref.changed;\n var width$$1 = ref.width;\n\n\n var prev = width$$1;\n\n width$$1 = Math.floor(this.$el.offsetWidth / 2);\n\n return {\n width: width$$1,\n changed: changed || prev !== width$$1,\n hide: this.media && !window.matchMedia(this.media).matches\n };\n },\n\n write: function(data$$1) {\n\n toggleClass(this.wrapper, this.clsHide, data$$1.hide);\n\n if (data$$1.changed) {\n data$$1.changed = false;\n attr(this.wrapper, this.attrFill, new Array(data$$1.width).join(this.fill));\n }\n\n },\n\n events: ['load', 'resize']\n\n }\n ]\n\n };\n\n var Container = {\n\n props: {\n container: Boolean\n },\n\n data: {\n container: true\n },\n\n computed: {\n\n container: function(ref) {\n var container = ref.container;\n\n return container === true && this.$container || container && $(container);\n }\n\n }\n\n };\n\n var active$1;\n\n var Modal = {\n\n mixins: [Class, Container, Togglable],\n\n props: {\n selPanel: String,\n selClose: String,\n escClose: Boolean,\n bgClose: Boolean,\n stack: Boolean\n },\n\n data: {\n cls: 'uk-open',\n escClose: true,\n bgClose: true,\n overlay: true,\n stack: false\n },\n\n computed: {\n\n panel: function(ref, $el) {\n var selPanel = ref.selPanel;\n\n return $(selPanel, $el);\n },\n\n transitionElement: function() {\n return this.panel;\n },\n\n transitionDuration: function() {\n return toMs(css(this.transitionElement, 'transitionDuration'));\n },\n\n bgClose: function(ref) {\n var bgClose = ref.bgClose;\n\n return bgClose && this.panel;\n }\n\n },\n\n events: [\n\n {\n\n name: 'click',\n\n delegate: function() {\n return this.selClose;\n },\n\n handler: function(e) {\n e.preventDefault();\n this.hide();\n }\n\n },\n\n {\n\n name: 'toggle',\n\n self: true,\n\n handler: function(e) {\n\n if (e.defaultPrevented) {\n return;\n }\n\n e.preventDefault();\n this.toggle();\n }\n\n },\n\n {\n name: 'beforeshow',\n\n self: true,\n\n handler: function(e) {\n\n var prev = active$1 && active$1 !== this && active$1;\n\n active$1 = this;\n\n if (prev) {\n if (this.stack) {\n this.prev = prev;\n } else {\n prev.hide().then(this.show);\n e.preventDefault();\n return;\n }\n }\n\n registerEvents();\n\n }\n\n },\n\n {\n name: 'beforehide',\n\n self: true,\n\n handler: function() {\n\n active$1 = active$1 && active$1 !== this && active$1 || this.prev;\n\n if (!active$1) {\n deregisterEvents();\n }\n\n }\n\n },\n\n {\n\n name: 'show',\n\n self: true,\n\n handler: function() {\n\n if (!hasClass(document.documentElement, this.clsPage)) {\n this.scrollbarWidth = width(window) - width(document);\n css(document.body, 'overflowY', this.scrollbarWidth && this.overlay ? 'scroll' : '');\n }\n\n addClass(document.documentElement, this.clsPage);\n\n }\n\n },\n\n {\n\n name: 'hidden',\n\n self: true,\n\n handler: function() {\n var this$1 = this;\n\n\n var found;\n var ref = this;\n var prev = ref.prev;\n\n while (prev) {\n\n if (prev.clsPage === this$1.clsPage) {\n found = true;\n break;\n }\n\n prev = prev.prev;\n\n }\n\n if (!found) {\n removeClass(document.documentElement, this.clsPage);\n\n }\n\n !this.prev && css(document.body, 'overflowY', '');\n }\n\n }\n\n ],\n\n methods: {\n\n toggle: function() {\n return this.isToggled() ? this.hide() : this.show();\n },\n\n show: function() {\n\n if (this.isToggled()) {\n return Promise$1.resolve();\n }\n\n if (this.container && this.$el.parentNode !== this.container) {\n append(this.container, this.$el);\n this._callConnected();\n }\n\n return this.toggleNow(this.$el, true);\n },\n\n hide: function() {\n return this.isToggled()\n ? this.toggleNow(this.$el, false)\n : Promise$1.resolve();\n },\n\n getActive: function() {\n return active$1;\n },\n\n _toggleImmediate: function(el, show) {\n var this$1 = this;\n\n return new Promise$1(function (resolve) { return requestAnimationFrame(function () {\n this$1._toggle(el, show);\n\n if (this$1.transitionDuration) {\n once(this$1.transitionElement, 'transitionend', resolve, false, function (e) { return e.target === this$1.transitionElement; });\n } else {\n resolve();\n }\n }); }\n );\n }\n\n }\n\n };\n\n var events;\n\n function registerEvents() {\n\n if (events) {\n return;\n }\n\n events = [\n on(document, 'click', function (ref) {\n var target = ref.target;\n var defaultPrevented = ref.defaultPrevented;\n\n if (active$1 && active$1.bgClose && !defaultPrevented && (!active$1.overlay || within(target, active$1.$el)) && !within(target, active$1.panel)) {\n active$1.hide();\n }\n }),\n on(document, 'keydown', function (e) {\n if (e.keyCode === 27 && active$1 && active$1.escClose) {\n e.preventDefault();\n active$1.hide();\n }\n })\n ];\n }\n\n function deregisterEvents() {\n events && events.forEach(function (unbind) { return unbind(); });\n events = null;\n }\n\n var Modal$1 = {\n\n install: install$1,\n\n mixins: [Modal],\n\n data: {\n clsPage: 'uk-modal-page',\n selPanel: '.uk-modal-dialog',\n selClose: '.uk-modal-close, .uk-modal-close-default, .uk-modal-close-outside, .uk-modal-close-full'\n },\n\n events: [\n\n {\n name: 'show',\n\n self: true,\n\n handler: function() {\n\n if (hasClass(this.panel, 'uk-margin-auto-vertical')) {\n addClass(this.$el, 'uk-flex');\n } else {\n css(this.$el, 'display', 'block');\n }\n\n height(this.$el); // force reflow\n }\n },\n\n {\n name: 'hidden',\n\n self: true,\n\n handler: function() {\n\n css(this.$el, 'display', '');\n removeClass(this.$el, 'uk-flex');\n\n }\n }\n\n ]\n\n };\n\n function install$1 (UIkit) {\n\n UIkit.modal.dialog = function (content, options) {\n\n var dialog = UIkit.modal((\" <div class=\\\"uk-modal\\\"> <div class=\\\"uk-modal-dialog\\\">\" + content + \"</div> </div> \"), options);\n\n dialog.show();\n\n on(dialog.$el, 'hidden', function (ref) {\n var target = ref.target;\n var currentTarget = ref.currentTarget;\n\n if (target === currentTarget) {\n dialog.$destroy(true);\n }\n });\n\n return dialog;\n };\n\n UIkit.modal.alert = function (message, options) {\n\n options = assign({bgClose: false, escClose: false, labels: UIkit.modal.labels}, options);\n\n return new Promise$1(\n function (resolve) { return on(UIkit.modal.dialog((\" <div class=\\\"uk-modal-body\\\">\" + (isString(message) ? message : html(message)) + \"</div> <div class=\\\"uk-modal-footer uk-text-right\\\"> <button class=\\\"uk-button uk-button-primary uk-modal-close\\\" autofocus>\" + (options.labels.ok) + \"</button> </div> \"), options).$el, 'hide', resolve); }\n );\n };\n\n UIkit.modal.confirm = function (message, options) {\n\n options = assign({bgClose: false, escClose: true, labels: UIkit.modal.labels}, options);\n\n return new Promise$1(function (resolve, reject) {\n\n var confirm = UIkit.modal.dialog((\" <form> <div class=\\\"uk-modal-body\\\">\" + (isString(message) ? message : html(message)) + \"</div> <div class=\\\"uk-modal-footer uk-text-right\\\"> <button class=\\\"uk-button uk-button-default uk-modal-close\\\" type=\\\"button\\\">\" + (options.labels.cancel) + \"</button> <button class=\\\"uk-button uk-button-primary\\\" autofocus>\" + (options.labels.ok) + \"</button> </div> </form> \"), options);\n\n var resolved = false;\n\n on(confirm.$el, 'submit', 'form', function (e) {\n e.preventDefault();\n resolve();\n resolved = true;\n confirm.hide();\n });\n on(confirm.$el, 'hide', function () {\n if (!resolved) {\n reject();\n }\n });\n\n });\n };\n\n UIkit.modal.prompt = function (message, value, options) {\n\n options = assign({bgClose: false, escClose: true, labels: UIkit.modal.labels}, options);\n\n return new Promise$1(function (resolve) {\n\n var prompt = UIkit.modal.dialog((\" <form class=\\\"uk-form-stacked\\\"> <div class=\\\"uk-modal-body\\\"> <label>\" + (isString(message) ? message : html(message)) + \"</label> <input class=\\\"uk-input\\\" autofocus> </div> <div class=\\\"uk-modal-footer uk-text-right\\\"> <button class=\\\"uk-button uk-button-default uk-modal-close\\\" type=\\\"button\\\">\" + (options.labels.cancel) + \"</button> <button class=\\\"uk-button uk-button-primary\\\">\" + (options.labels.ok) + \"</button> </div> </form> \"), options),\n input = $('input', prompt.$el);\n\n input.value = value;\n\n var resolved = false;\n\n on(prompt.$el, 'submit', 'form', function (e) {\n e.preventDefault();\n resolve(input.value);\n resolved = true;\n prompt.hide();\n });\n on(prompt.$el, 'hide', function () {\n if (!resolved) {\n resolve(null);\n }\n });\n\n });\n };\n\n UIkit.modal.labels = {\n ok: 'Ok',\n cancel: 'Cancel'\n };\n\n }\n\n var Nav = {\n\n extends: Accordion,\n\n data: {\n targets: '> .uk-parent',\n toggle: '> a',\n content: '> ul'\n }\n\n };\n\n var Navbar = {\n\n mixins: [Class],\n\n props: {\n dropdown: String,\n mode: 'list',\n align: String,\n offset: Number,\n boundary: Boolean,\n boundaryAlign: Boolean,\n clsDrop: String,\n delayShow: Number,\n delayHide: Number,\n dropbar: Boolean,\n dropbarMode: String,\n dropbarAnchor: Boolean,\n duration: Number\n },\n\n data: {\n dropdown: '.uk-navbar-nav > li',\n align: !isRtl ? 'left' : 'right',\n clsDrop: 'uk-navbar-dropdown',\n mode: undefined,\n offset: undefined,\n delayShow: undefined,\n delayHide: undefined,\n boundaryAlign: undefined,\n flip: 'x',\n boundary: true,\n dropbar: false,\n dropbarMode: 'slide',\n dropbarAnchor: false,\n duration: 200,\n },\n\n computed: {\n\n boundary: function(ref, $el) {\n var boundary = ref.boundary;\n var boundaryAlign = ref.boundaryAlign;\n\n return (boundary === true || boundaryAlign) ? $el : boundary;\n },\n\n dropbarAnchor: function(ref, $el) {\n var dropbarAnchor = ref.dropbarAnchor;\n\n return query(dropbarAnchor, $el);\n },\n\n pos: function(ref) {\n var align = ref.align;\n\n return (\"bottom-\" + align);\n },\n\n dropdowns: function(ref, $el) {\n var dropdown = ref.dropdown;\n var clsDrop = ref.clsDrop;\n\n return $$((dropdown + \" .\" + clsDrop), $el);\n }\n\n },\n\n beforeConnect: function() {\n\n var ref = this.$props;\n var dropbar = ref.dropbar;\n\n this.dropbar = dropbar && (query(dropbar, this.$el) || $('+ .uk-navbar-dropbar', this.$el) || $('<div></div>'));\n\n if (this.dropbar) {\n\n addClass(this.dropbar, 'uk-navbar-dropbar');\n\n if (this.dropbarMode === 'slide') {\n addClass(this.dropbar, 'uk-navbar-dropbar-slide');\n }\n }\n\n },\n\n disconnected: function() {\n this.dropbar && remove(this.dropbar);\n },\n\n update: function() {\n var this$1 = this;\n\n\n this.$create(\n 'drop',\n this.dropdowns.filter(function (el) { return !this$1.getDropdown(el); }),\n assign({}, this.$props, {boundary: this.boundary, pos: this.pos, offset: this.dropbar || this.offset})\n );\n\n },\n\n events: [\n\n {\n name: 'mouseover',\n\n delegate: function() {\n return this.dropdown;\n },\n\n handler: function(ref) {\n var current = ref.current;\n\n var active = this.getActive();\n if (active && active.toggle && !within(active.toggle.$el, current) && !active.tracker.movesTo(active.$el)) {\n active.hide(false);\n }\n }\n\n },\n\n {\n name: 'mouseleave',\n\n el: function() {\n return this.dropbar;\n },\n\n handler: function() {\n var active = this.getActive();\n\n if (active && !matches(this.dropbar, ':hover')) {\n active.hide();\n }\n }\n },\n\n {\n name: 'beforeshow',\n\n capture: true,\n\n filter: function() {\n return this.dropbar;\n },\n\n handler: function() {\n\n if (!this.dropbar.parentNode) {\n after(this.dropbarAnchor || this.$el, this.dropbar);\n }\n\n }\n },\n\n {\n name: 'show',\n\n capture: true,\n\n filter: function() {\n return this.dropbar;\n },\n\n handler: function(_, drop) {\n\n var $el = drop.$el;\n var dir = drop.dir;\n\n this.clsDrop && addClass($el, ((this.clsDrop) + \"-dropbar\"));\n\n if (dir === 'bottom') {\n this.transitionTo($el.offsetHeight + toFloat(css($el, 'marginTop')) + toFloat(css($el, 'marginBottom')), $el);\n }\n }\n },\n\n {\n name: 'beforehide',\n\n filter: function() {\n return this.dropbar;\n },\n\n handler: function(e, ref) {\n var $el = ref.$el;\n\n\n var active = this.getActive();\n\n if (matches(this.dropbar, ':hover') && active && active.$el === $el) {\n e.preventDefault();\n }\n }\n },\n\n {\n name: 'hide',\n\n filter: function() {\n return this.dropbar;\n },\n\n handler: function(_, ref) {\n var $el = ref.$el;\n\n\n var active = this.getActive();\n\n if (!active || active && active.$el === $el) {\n this.transitionTo(0);\n }\n }\n }\n\n ],\n\n methods: {\n\n getActive: function() {\n var ref = this.dropdowns.map(this.getDropdown).filter(function (drop) { return drop.isActive(); });\n var active = ref[0];\n return active && includes(active.mode, 'hover') && within(active.toggle.$el, this.$el) && active;\n },\n\n transitionTo: function(newHeight, el) {\n\n var ref = this;\n var dropbar = ref.dropbar;\n var oldHeight = isVisible(dropbar) ? height(dropbar) : 0;\n\n el = oldHeight < newHeight && el;\n\n css(el, 'clip', (\"rect(0,\" + (el.offsetWidth) + \"px,\" + oldHeight + \"px,0)\"));\n\n height(dropbar, oldHeight);\n\n Transition.cancel([el, dropbar]);\n return Promise.all([\n Transition.start(dropbar, {height: newHeight}, this.duration),\n Transition.start(el, {clip: (\"rect(0,\" + (el.offsetWidth) + \"px,\" + newHeight + \"px,0)\")}, this.duration)\n ])\n .catch(noop)\n .then(function () { return css(el, {clip: ''}); });\n },\n\n getDropdown: function(el) {\n return this.$getComponent(el, 'drop') || this.$getComponent(el, 'dropdown');\n }\n\n }\n\n };\n\n var scroll;\n\n var Offcanvas = {\n\n mixins: [Modal],\n\n args: 'mode',\n\n props: {\n content: String,\n mode: String,\n flip: Boolean,\n overlay: Boolean\n },\n\n data: {\n content: '.uk-offcanvas-content',\n mode: 'slide',\n flip: false,\n overlay: false,\n clsPage: 'uk-offcanvas-page',\n clsContainer: 'uk-offcanvas-container',\n selPanel: '.uk-offcanvas-bar',\n clsFlip: 'uk-offcanvas-flip',\n clsContent: 'uk-offcanvas-content',\n clsContentAnimation: 'uk-offcanvas-content-animation',\n clsSidebarAnimation: 'uk-offcanvas-bar-animation',\n clsMode: 'uk-offcanvas',\n clsOverlay: 'uk-offcanvas-overlay',\n selClose: '.uk-offcanvas-close'\n },\n\n computed: {\n\n content: function(ref) {\n var content = ref.content;\n\n return $(content) || document.body;\n },\n\n clsFlip: function(ref) {\n var flip = ref.flip;\n var clsFlip = ref.clsFlip;\n\n return flip ? clsFlip : '';\n },\n\n clsOverlay: function(ref) {\n var overlay = ref.overlay;\n var clsOverlay = ref.clsOverlay;\n\n return overlay ? clsOverlay : '';\n },\n\n clsMode: function(ref) {\n var mode = ref.mode;\n var clsMode = ref.clsMode;\n\n return (clsMode + \"-\" + mode);\n },\n\n clsSidebarAnimation: function(ref) {\n var mode = ref.mode;\n var clsSidebarAnimation = ref.clsSidebarAnimation;\n\n return mode === 'none' || mode === 'reveal' ? '' : clsSidebarAnimation;\n },\n\n clsContentAnimation: function(ref) {\n var mode = ref.mode;\n var clsContentAnimation = ref.clsContentAnimation;\n\n return mode !== 'push' && mode !== 'reveal' ? '' : clsContentAnimation;\n },\n\n transitionElement: function(ref) {\n var mode = ref.mode;\n\n return mode === 'reveal' ? this.panel.parentNode : this.panel;\n }\n\n },\n\n update: {\n\n write: function() {\n\n if (this.getActive() === this) {\n\n if (this.overlay || this.clsContentAnimation) {\n width(this.content, width(window) - this.scrollbarWidth);\n }\n\n if (this.overlay) {\n height(this.content, height(window));\n if (scroll) {\n this.content.scrollTop = scroll.y;\n }\n }\n\n }\n\n },\n\n events: ['resize']\n\n },\n\n events: [\n\n {\n\n name: 'click',\n\n delegate: function() {\n return 'a[href^=\"#\"]';\n },\n\n handler: function(ref) {\n var current = ref.current;\n\n if (current.hash && $(current.hash, this.content)) {\n scroll = null;\n this.hide();\n }\n }\n\n },\n\n {\n\n name: 'beforescroll',\n\n filter: function() {\n return this.overlay;\n },\n\n handler: function(e, scroll, target) {\n if (scroll && target && this.isToggled() && $(target, this.content)) {\n once(this.$el, 'hidden', function () { return scroll.scrollTo(target); });\n e.preventDefault();\n }\n }\n\n },\n\n {\n name: 'show',\n\n self: true,\n\n handler: function() {\n\n scroll = scroll || {x: window.pageXOffset, y: window.pageYOffset};\n\n if (this.mode === 'reveal' && !hasClass(this.panel, this.clsMode)) {\n wrapAll(this.panel, '<div>');\n addClass(this.panel.parentNode, this.clsMode);\n }\n\n css(document.documentElement, 'overflowY', (!this.clsContentAnimation || this.flip) && this.scrollbarWidth && this.overlay ? 'scroll' : '');\n addClass(document.body, this.clsContainer, this.clsFlip, this.clsOverlay);\n height(document.body); // force reflow\n addClass(this.content, this.clsContentAnimation);\n addClass(this.panel, this.clsSidebarAnimation, this.mode !== 'reveal' ? this.clsMode : '');\n addClass(this.$el, this.clsOverlay);\n css(this.$el, 'display', 'block');\n height(this.$el); // force reflow\n\n }\n },\n\n {\n name: 'hide',\n\n self: true,\n\n handler: function() {\n removeClass(this.content, this.clsContentAnimation);\n\n var active = this.getActive();\n if (this.mode === 'none' || active && active !== this && active !== this.prev) {\n trigger(this.panel, 'transitionend');\n }\n }\n },\n\n {\n name: 'hidden',\n\n self: true,\n\n handler: function() {\n\n if (this.mode === 'reveal') {\n unwrap(this.panel);\n }\n\n if (!this.overlay) {\n scroll = {x: window.pageXOffset, y: window.pageYOffset};\n } else if (!scroll) {\n var ref = this.content;\n var x = ref.scrollLeft;\n var y = ref.scrollTop;\n scroll = {x: x, y: y};\n }\n\n removeClass(this.panel, this.clsSidebarAnimation, this.clsMode);\n removeClass(this.$el, this.clsOverlay);\n css(this.$el, 'display', '');\n removeClass(document.body, this.clsContainer, this.clsFlip, this.clsOverlay);\n document.body.scrollTop = scroll.y;\n\n css(document.documentElement, 'overflowY', '');\n\n width(this.content, '');\n height(this.content, '');\n\n window.scroll(scroll.x, scroll.y);\n\n scroll = null;\n\n }\n },\n\n {\n name: 'swipeLeft swipeRight',\n\n handler: function(e) {\n\n if (this.isToggled() && isTouch(e) && (e.type === 'swipeLeft' && !this.flip || e.type === 'swipeRight' && this.flip)) {\n this.hide();\n }\n\n }\n }\n\n ]\n\n };\n\n var OverflowAuto = {\n\n mixins: [Class],\n\n computed: {\n\n modal: function(_, $el) {\n return closest($el, '.uk-modal');\n },\n\n panel: function(_, $el) {\n return closest($el, '.uk-modal-dialog');\n }\n\n },\n\n connected: function() {\n css(this.$el, 'minHeight', 150);\n },\n\n update: {\n\n write: function() {\n\n if (!this.panel || !this.modal) {\n return;\n }\n\n var current = css(this.$el, 'maxHeight');\n\n css(css(this.$el, 'maxHeight', 150), 'maxHeight', Math.max(150, 150 + height(this.modal) - this.panel.offsetHeight));\n if (current !== css(this.$el, 'maxHeight')) {\n trigger(this.$el, 'resize');\n }\n },\n\n events: ['load', 'resize']\n\n }\n\n };\n\n var Responsive = {\n\n props: ['width', 'height'],\n\n connected: function() {\n addClass(this.$el, 'uk-responsive-width');\n },\n\n update: {\n\n read: function() {\n return isVisible(this.$el) && this.width && this.height\n ? {width: width(this.$el.parentNode), height: this.height}\n : false;\n },\n\n write: function(dim) {\n height(this.$el, Dimensions.contain({height: this.height, width: this.width}, dim).height);\n },\n\n events: ['load', 'resize']\n\n }\n\n };\n\n var Scroll = {\n\n props: {\n duration: Number,\n offset: Number\n },\n\n data: {\n duration: 1000,\n offset: 0\n },\n\n methods: {\n\n scrollTo: function(el) {\n var this$1 = this;\n\n\n el = el && $(el) || document.body;\n\n var docHeight = height(document);\n var winHeight = height(window);\n\n var target = offset(el).top - this.offset;\n if (target + winHeight > docHeight) {\n target = docHeight - winHeight;\n }\n\n if (!trigger(this.$el, 'beforescroll', [this, el])) {\n return;\n }\n\n var start = Date.now();\n var startY = window.pageYOffset;\n var step = function () {\n\n var currentY = startY + (target - startY) * ease(clamp((Date.now() - start) / this$1.duration));\n\n window.scroll(window.pageXOffset, currentY);\n\n // scroll more if we have not reached our destination\n if (currentY !== target) {\n requestAnimationFrame(step);\n } else {\n trigger(this$1.$el, 'scrolled', [this$1, el]);\n }\n\n };\n\n step();\n\n }\n\n },\n\n events: {\n\n click: function(e) {\n\n if (e.defaultPrevented) {\n return;\n }\n\n e.preventDefault();\n this.scrollTo(escape(this.$el.hash).substr(1));\n }\n\n }\n\n };\n\n function ease(k) {\n return 0.5 * (1 - Math.cos(Math.PI * k));\n }\n\n var Scrollspy = {\n\n args: 'cls',\n\n props: {\n cls: 'list',\n target: String,\n hidden: Boolean,\n offsetTop: Number,\n offsetLeft: Number,\n repeat: Boolean,\n delay: Number\n },\n\n data: function () { return ({\n cls: [],\n target: false,\n hidden: true,\n offsetTop: 0,\n offsetLeft: 0,\n repeat: false,\n delay: 0,\n inViewClass: 'uk-scrollspy-inview'\n }); },\n\n computed: {\n\n elements: function(ref, $el) {\n var target = ref.target;\n\n return target ? $$(target, $el) : [$el];\n }\n\n },\n\n update: [\n\n {\n\n write: function() {\n if (this.hidden) {\n css(filter(this.elements, (\":not(.\" + (this.inViewClass) + \")\")), 'visibility', 'hidden');\n }\n }\n\n },\n\n {\n\n read: function(els) {\n var this$1 = this;\n\n\n if (!els.delay) {\n return;\n }\n\n this.elements.forEach(function (el, i) {\n\n var elData = els[i];\n\n if (!elData || elData.el !== el) {\n var cls = data(el, 'uk-scrollspy-class');\n elData = {el: el, toggles: cls && cls.split(',') || this$1.cls};\n }\n\n elData.show = isInView(el, this$1.offsetTop, this$1.offsetLeft);\n els[i] = elData;\n\n });\n },\n\n write: function(els) {\n var this$1 = this;\n\n\n // Let child components be applied at least once first\n if (!els.delay) {\n this.$emit();\n return els.delay = true;\n }\n\n var index$$1 = this.elements.length === 1 ? 1 : 0;\n\n this.elements.forEach(function (el, i) {\n\n var elData = els[i];\n var cls = elData.toggles[i] || elData.toggles[0];\n\n if (elData.show && !elData.inview && !elData.timer) {\n\n var show = function () {\n css(el, 'visibility', '');\n addClass(el, this$1.inViewClass);\n toggleClass(el, cls);\n\n trigger(el, 'inview');\n\n this$1.$update(el);\n\n elData.inview = true;\n delete elData.timer;\n };\n\n if (this$1.delay && index$$1) {\n elData.timer = setTimeout(show, this$1.delay * index$$1);\n } else {\n show();\n }\n\n index$$1++;\n\n } else if (!elData.show && elData.inview && this$1.repeat) {\n\n if (elData.timer) {\n clearTimeout(elData.timer);\n delete elData.timer;\n }\n\n css(el, 'visibility', this$1.hidden ? 'hidden' : '');\n removeClass(el, this$1.inViewClass);\n toggleClass(el, cls);\n\n trigger(el, 'outview');\n\n this$1.$update(el);\n\n elData.inview = false;\n\n }\n\n\n });\n\n },\n\n events: ['scroll', 'load', 'resize']\n\n }\n\n ]\n\n };\n\n var ScrollspyNav = {\n\n props: {\n cls: String,\n closest: String,\n scroll: Boolean,\n overflow: Boolean,\n offset: Number\n },\n\n data: {\n cls: 'uk-active',\n closest: false,\n scroll: false,\n overflow: true,\n offset: 0\n },\n\n computed: {\n\n links: function(_, $el) {\n return $$('a[href^=\"#\"]', $el).filter(function (el) { return el.hash; });\n },\n\n elements: function() {\n return this.closest ? closest(this.links, this.closest) : this.links;\n },\n\n targets: function() {\n return $$(this.links.map(function (el) { return el.hash; }).join(','));\n }\n\n },\n\n update: [\n\n {\n\n read: function() {\n if (this.scroll) {\n this.$create('scroll', this.links, {offset: this.offset || 0});\n }\n }\n\n },\n\n {\n\n read: function(data$$1) {\n var this$1 = this;\n\n\n var scroll = window.pageYOffset + this.offset + 1;\n var max = height(document) - height(window) + this.offset;\n\n data$$1.active = false;\n\n this.targets.every(function (el, i) {\n\n var ref = offset(el);\n var top = ref.top;\n var last = i + 1 === this$1.targets.length;\n\n if (!this$1.overflow && (i === 0 && top > scroll || last && top + el.offsetTop < scroll)) {\n return false;\n }\n\n if (!last && offset(this$1.targets[i + 1]).top <= scroll) {\n return true;\n }\n\n if (scroll >= max) {\n for (var j = this$1.targets.length - 1; j > i; j--) {\n if (isInView(this$1.targets[j])) {\n el = this$1.targets[j];\n break;\n }\n }\n }\n\n return !(data$$1.active = $(filter(this$1.links, (\"[href=\\\"#\" + (el.id) + \"\\\"]\"))));\n\n });\n\n },\n\n write: function(ref) {\n var active = ref.active;\n\n\n this.links.forEach(function (el) { return el.blur(); });\n removeClass(this.elements, this.cls);\n\n if (active) {\n trigger(this.$el, 'active', [active, addClass(this.closest ? closest(active, this.closest) : active, this.cls)]);\n }\n\n },\n\n events: ['scroll', 'load', 'resize']\n\n }\n\n ]\n\n };\n\n var Sticky = {\n\n mixins: [Class],\n\n attrs: true,\n\n props: {\n top: null,\n bottom: Boolean,\n offset: Number,\n animation: String,\n clsActive: String,\n clsInactive: String,\n clsFixed: String,\n clsBelow: String,\n selTarget: String,\n widthElement: Boolean,\n showOnUp: Boolean,\n media: 'media',\n targetOffset: Number\n },\n\n data: {\n top: 0,\n bottom: false,\n offset: 0,\n animation: '',\n clsActive: 'uk-active',\n clsInactive: '',\n clsFixed: 'uk-sticky-fixed',\n clsBelow: 'uk-sticky-below',\n selTarget: '',\n widthElement: false,\n showOnUp: false,\n media: false,\n targetOffset: false\n },\n\n computed: {\n\n selTarget: function(ref, $el) {\n var selTarget = ref.selTarget;\n\n return selTarget && $(selTarget, $el) || $el;\n },\n\n widthElement: function(ref, $el) {\n var widthElement = ref.widthElement;\n\n return query(widthElement, $el) || this.placeholder;\n }\n\n },\n\n connected: function() {\n\n this.placeholder = $('+ .uk-sticky-placeholder', this.$el) || $('<div class=\"uk-sticky-placeholder\"></div>');\n\n if (!this.isActive) {\n this.hide();\n }\n },\n\n disconnected: function() {\n\n if (this.isActive) {\n this.isActive = false;\n this.hide();\n removeClass(this.selTarget, this.clsInactive);\n }\n\n remove(this.placeholder);\n this.placeholder = null;\n this.widthElement = null;\n },\n\n events: [\n\n {\n name: 'active',\n\n self: true,\n\n handler: function() {\n replaceClass(this.selTarget, this.clsInactive, this.clsActive);\n }\n\n },\n\n {\n name: 'inactive',\n\n self: true,\n\n handler: function() {\n replaceClass(this.selTarget, this.clsActive, this.clsInactive);\n }\n\n },\n\n {\n\n name: 'load hashchange popstate',\n\n el: window,\n\n handler: function() {\n var this$1 = this;\n\n\n if (!(this.targetOffset !== false && location.hash && window.pageYOffset > 0)) {\n return;\n }\n\n var target = $(location.hash);\n\n if (target) {\n fastdom.read(function () {\n\n var ref = offset(target);\n var top = ref.top;\n var elTop = offset(this$1.$el).top;\n var elHeight = this$1.$el.offsetHeight;\n\n if (this$1.isActive && elTop + elHeight >= top && elTop <= top + target.offsetHeight) {\n window.scroll(0, top - elHeight - (isNumeric(this$1.targetOffset) ? this$1.targetOffset : 0) - this$1.offset);\n }\n\n });\n }\n\n }\n\n }\n\n ],\n\n update: [\n\n {\n\n write: function() {\n\n var ref = this;\n var placeholder = ref.placeholder;\n var offsetHeight = ref.$el.offsetHeight;\n\n css(placeholder, assign(\n {height: css(this.$el, 'position') !== 'absolute' ? offsetHeight : ''},\n css(this.$el, ['marginTop', 'marginBottom', 'marginLeft', 'marginRight'])\n ));\n\n if (!within(placeholder, document)) {\n after(this.$el, placeholder);\n attr(placeholder, 'hidden', '');\n }\n\n this.topOffset = offset(this.isActive ? placeholder : this.$el).top;\n this.bottomOffset = this.topOffset + offsetHeight;\n\n var bottom = parseProp('bottom', this);\n\n this.top = Math.max(toFloat(parseProp('top', this)), this.topOffset) - this.offset;\n this.bottom = bottom && bottom - offsetHeight;\n this.inactive = this.media && !window.matchMedia(this.media).matches;\n\n },\n\n events: ['load', 'resize']\n\n },\n\n {\n\n read: function(_, ref) {\n var scrollY = ref.scrollY; if ( scrollY === void 0 ) scrollY = window.pageYOffset;\n\n\n this.width = (isVisible(this.widthElement) ? this.widthElement : this.$el).offsetWidth;\n\n return {\n scroll: this.scroll = scrollY,\n visible: isVisible(this.$el)\n };\n },\n\n write: function(ref, ref$1) {\n var this$1 = this;\n var visible = ref.visible;\n var scroll = ref.scroll;\n if ( ref$1 === void 0 ) ref$1 = {};\n var dir = ref$1.dir;\n\n\n if (scroll < 0 || !visible || this.disabled || this.showOnUp && !dir) {\n return;\n }\n\n if (this.inactive\n || scroll < this.top\n || this.showOnUp && (scroll <= this.top || dir === 'down' || dir === 'up' && !this.isActive && scroll <= this.bottomOffset)\n ) {\n\n if (!this.isActive) {\n return;\n }\n\n this.isActive = false;\n\n if (this.animation && scroll > this.topOffset) {\n Animation.cancel(this.$el);\n Animation.out(this.$el, this.animation).then(function () { return this$1.hide(); }, noop);\n } else {\n this.hide();\n }\n\n } else if (this.isActive) {\n\n this.update();\n\n } else if (this.animation) {\n\n Animation.cancel(this.$el);\n this.show();\n Animation.in(this.$el, this.animation).catch(noop);\n\n } else {\n this.show();\n }\n\n },\n\n events: ['load', 'resize', 'scroll']\n\n } ],\n\n methods: {\n\n show: function() {\n\n this.isActive = true;\n this.update();\n attr(this.placeholder, 'hidden', null);\n\n },\n\n hide: function() {\n\n if (!this.isActive || hasClass(this.selTarget, this.clsActive)) {\n trigger(this.$el, 'inactive');\n }\n\n removeClass(this.$el, this.clsFixed, this.clsBelow);\n css(this.$el, {position: '', top: '', width: ''});\n attr(this.placeholder, 'hidden', '');\n\n },\n\n update: function() {\n\n var active = this.top !== 0 || this.scroll > this.top;\n var top = Math.max(0, this.offset);\n\n if (this.bottom && this.scroll > this.bottom - this.offset) {\n top = this.bottom - this.scroll;\n }\n\n css(this.$el, {\n position: 'fixed',\n top: (top + \"px\"),\n width: this.width\n });\n\n if (hasClass(this.selTarget, this.clsActive)) {\n\n if (!active) {\n trigger(this.$el, 'inactive');\n }\n\n } else if (active) {\n trigger(this.$el, 'active');\n }\n\n toggleClass(this.$el, this.clsBelow, this.scroll > this.bottomOffset);\n addClass(this.$el, this.clsFixed);\n\n }\n\n }\n\n };\n\n function parseProp(prop, ref) {\n var $props = ref.$props;\n var $el = ref.$el;\n var propOffset = ref[(prop + \"Offset\")];\n\n\n var value = $props[prop];\n\n if (!value) {\n return;\n }\n\n if (isNumeric(value)) {\n\n return propOffset + toFloat(value);\n\n } else if (isString(value) && value.match(/^-?\\d+vh$/)) {\n\n return height(window) * toFloat(value) / 100;\n\n } else {\n\n var el = value === true ? $el.parentNode : query(value, $el);\n\n if (el) {\n return offset(el).top + el.offsetHeight;\n }\n\n }\n }\n\n var Switcher = {\n\n mixins: [Togglable],\n\n args: 'connect',\n\n props: {\n connect: String,\n toggle: String,\n active: Number,\n swiping: Boolean\n },\n\n data: {\n connect: '~.uk-switcher',\n toggle: '> *',\n active: 0,\n swiping: true,\n cls: 'uk-active',\n clsContainer: 'uk-switcher',\n attrItem: 'uk-switcher-item',\n queued: true\n },\n\n computed: {\n\n connects: function(ref, $el) {\n var connect = ref.connect;\n\n return queryAll(connect, $el);\n },\n\n toggles: function(ref, $el) {\n var toggle = ref.toggle;\n\n return $$(toggle, $el);\n }\n\n },\n\n events: [\n\n {\n\n name: 'click',\n\n delegate: function() {\n return ((this.toggle) + \":not(.uk-disabled)\");\n },\n\n handler: function(e) {\n e.preventDefault();\n this.show(e.current);\n }\n\n },\n\n {\n name: 'click',\n\n el: function() {\n return this.connects;\n },\n\n delegate: function() {\n return (\"[\" + (this.attrItem) + \"],[data-\" + (this.attrItem) + \"]\");\n },\n\n handler: function(e) {\n e.preventDefault();\n this.show(data(e.current, this.attrItem));\n }\n },\n\n {\n name: 'swipeRight swipeLeft',\n\n filter: function() {\n return this.swiping;\n },\n\n el: function() {\n return this.connects;\n },\n\n handler: function(e) {\n if (!isTouch(e)) {\n return;\n }\n\n e.preventDefault();\n if (!window.getSelection().toString()) {\n this.show(e.type === 'swipeLeft' ? 'next' : 'previous');\n }\n }\n }\n\n ],\n\n update: function() {\n var this$1 = this;\n\n\n this.connects.forEach(function (list) { return this$1.updateAria(list.children); });\n this.show(filter(this.toggles, (\".\" + (this.cls)))[0] || this.toggles[this.active] || this.toggles[0]);\n\n },\n\n methods: {\n\n show: function(item) {\n var this$1 = this;\n\n\n var ref = this.toggles;\n var length = ref.length;\n var prev = !!this.connects.length && index(filter(this.connects[0].children, (\".\" + (this.cls)))[0]);\n var hasPrev = prev >= 0;\n var dir = item === 'previous' ? -1 : 1;\n\n var toggle, next = getIndex(item, this.toggles, prev);\n\n for (var i = 0; i < length; i++, next = (next + dir + length) % length) {\n if (!matches(this$1.toggles[next], '.uk-disabled, [disabled]')) {\n toggle = this$1.toggles[next];\n break;\n }\n }\n\n if (!toggle || prev >= 0 && hasClass(toggle, this.cls) || prev === next) {\n return;\n }\n\n removeClass(this.toggles, this.cls);\n attr(this.toggles, 'aria-expanded', false);\n addClass(toggle, this.cls);\n attr(toggle, 'aria-expanded', true);\n\n this.connects.forEach(function (list) {\n if (!hasPrev) {\n this$1.toggleNow(list.children[next]);\n } else {\n this$1.toggleElement([list.children[prev], list.children[next]]);\n }\n });\n\n }\n\n }\n\n };\n\n var Tab = {\n\n mixins: [Class],\n\n extends: Switcher,\n\n props: {\n media: 'media'\n },\n\n data: {\n media: 960,\n attrItem: 'uk-tab-item'\n },\n\n connected: function() {\n\n var cls = hasClass(this.$el, 'uk-tab-left')\n ? 'uk-tab-left'\n : hasClass(this.$el, 'uk-tab-right')\n ? 'uk-tab-right'\n : false;\n\n if (cls) {\n this.$create('toggle', this.$el, {cls: cls, mode: 'media', media: this.media});\n }\n }\n\n };\n\n var Toggle = {\n\n mixins: [Togglable],\n\n args: 'target',\n\n props: {\n href: String,\n target: null,\n mode: 'list',\n media: 'media'\n },\n\n data: {\n href: false,\n target: false,\n mode: 'click',\n queued: true,\n media: false\n },\n\n computed: {\n\n target: function(ref, $el) {\n var href = ref.href;\n var target = ref.target;\n\n target = queryAll(target || href, $el);\n return target.length && target || [$el];\n }\n\n },\n\n events: [\n\n {\n\n name: (pointerEnter + \" \" + pointerLeave),\n\n filter: function() {\n return includes(this.mode, 'hover');\n },\n\n handler: function(e) {\n if (!isTouch(e)) {\n this.toggle((\"toggle\" + (e.type === pointerEnter ? 'show' : 'hide')));\n }\n }\n\n },\n\n {\n\n name: 'click',\n\n filter: function() {\n return includes(this.mode, 'click') || hasTouch && includes(this.mode, 'hover');\n },\n\n handler: function(e) {\n\n if (!isTouch(e) && !includes(this.mode, 'click')) {\n return;\n }\n\n // TODO better isToggled handling\n var link;\n if (closest(e.target, 'a[href=\"#\"], button')\n || (link = closest(e.target, 'a[href]')) && (\n this.cls\n || !isVisible(this.target)\n || link.hash && matches(this.target, link.hash)\n )\n ) {\n once(document, 'click', function (e) { return e.preventDefault(); });\n }\n\n this.toggle();\n }\n\n }\n ],\n\n update: {\n\n write: function() {\n\n if (!includes(this.mode, 'media') || !this.media) {\n return;\n }\n\n var toggled = this.isToggled(this.target);\n if (window.matchMedia(this.media).matches ? !toggled : toggled) {\n this.toggle();\n }\n\n },\n\n events: ['load', 'resize']\n\n },\n\n methods: {\n\n toggle: function(type) {\n if (trigger(this.target, type || 'toggle', [this])) {\n this.toggleElement(this.target);\n }\n }\n\n }\n\n };\n\n function core (UIkit) {\n\n // core components\n UIkit.component('accordion', Accordion);\n UIkit.component('alert', Alert);\n UIkit.component('cover', Cover);\n UIkit.component('drop', Drop);\n UIkit.component('dropdown', Dropdown);\n UIkit.component('formCustom', FormCustom);\n UIkit.component('gif', Gif);\n UIkit.component('grid', Grid);\n UIkit.component('heightMatch', HeightMatch);\n UIkit.component('heightViewport', HeightViewport);\n UIkit.component('icon', Icon);\n UIkit.component('img', Img);\n UIkit.component('leader', Leader);\n UIkit.component('margin', Margin);\n UIkit.component('modal', Modal$1);\n UIkit.component('nav', Nav);\n UIkit.component('navbar', Navbar);\n UIkit.component('offcanvas', Offcanvas);\n UIkit.component('overflowAuto', OverflowAuto);\n UIkit.component('responsive', Responsive);\n UIkit.component('scroll', Scroll);\n UIkit.component('scrollspy', Scrollspy);\n UIkit.component('scrollspyNav', ScrollspyNav);\n UIkit.component('sticky', Sticky);\n UIkit.component('svg', SVG);\n UIkit.component('switcher', Switcher);\n UIkit.component('tab', Tab);\n UIkit.component('toggle', Toggle);\n UIkit.component('video', Video);\n\n // Icon components\n UIkit.component('close', Close);\n UIkit.component('marker', IconComponent);\n UIkit.component('navbarToggleIcon', IconComponent);\n UIkit.component('overlayIcon', IconComponent);\n UIkit.component('paginationNext', IconComponent);\n UIkit.component('paginationPrevious', IconComponent);\n UIkit.component('searchIcon', Search);\n UIkit.component('slidenavNext', Slidenav);\n UIkit.component('slidenavPrevious', Slidenav);\n UIkit.component('spinner', Spinner);\n UIkit.component('totop', IconComponent);\n\n // core functionality\n UIkit.use(Core);\n\n }\n\n UIkit.version = '3.0.0-rc.5';\n\n core(UIkit);\n\n var Countdown = {\n\n mixins: [Class],\n\n attrs: true,\n\n props: {\n date: String,\n clsWrapper: String\n },\n\n data: {\n date: '',\n clsWrapper: '.uk-countdown-%unit%'\n },\n\n computed: {\n\n date: function(ref) {\n var date = ref.date;\n\n return Date.parse(date);\n },\n\n days: function(ref, $el) {\n var clsWrapper = ref.clsWrapper;\n\n return $(clsWrapper.replace('%unit%', 'days'), $el);\n },\n\n hours: function(ref, $el) {\n var clsWrapper = ref.clsWrapper;\n\n return $(clsWrapper.replace('%unit%', 'hours'), $el);\n },\n\n minutes: function(ref, $el) {\n var clsWrapper = ref.clsWrapper;\n\n return $(clsWrapper.replace('%unit%', 'minutes'), $el);\n },\n\n seconds: function(ref, $el) {\n var clsWrapper = ref.clsWrapper;\n\n return $(clsWrapper.replace('%unit%', 'seconds'), $el);\n },\n\n units: function() {\n var this$1 = this;\n\n return ['days', 'hours', 'minutes', 'seconds'].filter(function (unit) { return this$1[unit]; });\n }\n\n },\n\n connected: function() {\n this.start();\n },\n\n disconnected: function() {\n var this$1 = this;\n\n this.stop();\n this.units.forEach(function (unit) { return empty(this$1[unit]); });\n },\n\n events: [\n\n {\n\n name: 'visibilitychange',\n\n el: document,\n\n handler: function() {\n if (document.hidden) {\n this.stop();\n } else {\n this.start();\n }\n }\n\n }\n\n ],\n\n update: {\n\n write: function() {\n var this$1 = this;\n\n\n var timespan = getTimeSpan(this.date);\n\n if (timespan.total <= 0) {\n\n this.stop();\n\n timespan.days\n = timespan.hours\n = timespan.minutes\n = timespan.seconds\n = 0;\n }\n\n this.units.forEach(function (unit) {\n\n var digits = String(Math.floor(timespan[unit]));\n\n digits = digits.length < 2 ? (\"0\" + digits) : digits;\n\n var el = this$1[unit];\n if (el.textContent !== digits) {\n digits = digits.split('');\n\n if (digits.length !== el.children.length) {\n html(el, digits.map(function () { return '<span></span>'; }).join(''));\n }\n\n digits.forEach(function (digit, i) { return el.children[i].textContent = digit; });\n }\n\n });\n\n }\n\n },\n\n methods: {\n\n start: function() {\n var this$1 = this;\n\n\n this.stop();\n\n if (this.date && this.units.length) {\n this.$emit();\n this.timer = setInterval(function () { return this$1.$emit(); }, 1000);\n }\n\n },\n\n stop: function() {\n\n if (this.timer) {\n clearInterval(this.timer);\n this.timer = null;\n }\n\n }\n\n }\n\n };\n\n function getTimeSpan(date) {\n\n var total = date - Date.now();\n\n return {\n total: total,\n seconds: total / 1000 % 60,\n minutes: total / 1000 / 60 % 60,\n hours: total / 1000 / 60 / 60 % 24,\n days: total / 1000 / 60 / 60 / 24\n };\n }\n\n var targetClass = 'uk-animation-target';\n\n var Animate = {\n\n props: {\n animation: Number\n },\n\n data: {\n animation: 150\n },\n\n computed: {\n\n target: function() {\n return this.$el;\n }\n\n },\n\n methods: {\n\n animate: function(action) {\n var this$1 = this;\n\n\n addStyle();\n\n var children = toNodes(this.target.children);\n var propsFrom = children.map(function (el) { return getProps(el, true); });\n\n var oldHeight = height(this.target);\n var oldScrollY = window.pageYOffset;\n\n action();\n\n Transition.cancel(this.target);\n children.forEach(Transition.cancel);\n\n reset(this.target);\n this.$update(this.target);\n fastdom.flush();\n\n var newHeight = height(this.target);\n\n children = children.concat(toNodes(this.target.children).filter(function (el) { return !includes(children, el); }));\n\n var propsTo = children.map(function (el, i) { return el.parentNode && i in propsFrom\n ? propsFrom[i]\n ? isVisible(el)\n ? getPositionWithMargin(el)\n : {opacity: 0}\n : {opacity: isVisible(el) ? 1 : 0}\n : false; }\n );\n\n propsFrom = propsTo.map(function (props, i) {\n var from = children[i].parentNode === this$1.target\n ? propsFrom[i] || getProps(children[i])\n : false;\n\n if (from) {\n if (!props) {\n delete from.opacity;\n } else if (!('opacity' in props)) {\n var opacity = from.opacity;\n\n if (opacity % 1) {\n props.opacity = 1;\n } else {\n delete from.opacity;\n }\n }\n }\n\n return from;\n });\n\n addClass(this.target, targetClass);\n children.forEach(function (el, i) { return propsFrom[i] && css(el, propsFrom[i]); });\n css(this.target, 'minHeight', oldHeight);\n window.scroll(window.pageXOffset, oldScrollY);\n\n return Promise$1.all(children.map(function (el, i) { return propsFrom[i] && propsTo[i]\n ? Transition.start(el, propsTo[i], this$1.animation, 'ease')\n : Promise$1.resolve(); }\n ).concat(Transition.start(this.target, {minHeight: newHeight}, this.animation, 'ease'))).then(function () {\n children.forEach(function (el, i) { return css(el, {display: propsTo[i].opacity === 0 ? 'none' : '', zIndex: ''}); });\n reset(this$1.target);\n this$1.$update(this$1.target);\n }, noop);\n\n }\n }\n };\n\n function getProps(el, opacity) {\n\n var zIndex = css(el, 'zIndex');\n\n return isVisible(el)\n ? assign({\n display: '',\n opacity: opacity ? css(el, 'opacity') : '0',\n pointerEvents: 'none',\n position: 'absolute',\n zIndex: zIndex === 'auto' ? index(el) : zIndex\n }, getPositionWithMargin(el))\n : false;\n }\n\n function reset(el) {\n css(el.children, {\n height: '',\n left: '',\n opacity: '',\n pointerEvents: '',\n position: '',\n top: '',\n width: ''\n });\n removeClass(el, targetClass);\n css(el, 'minHeight', '');\n }\n\n function getPositionWithMargin(el) {\n var ref = el.getBoundingClientRect();\n var height$$1 = ref.height;\n var width$$1 = ref.width;\n var ref$1 = position(el);\n var top = ref$1.top;\n var left = ref$1.left;\n top += toFloat(css(el, 'marginTop'));\n\n return {top: top, left: left, height: height$$1, width: width$$1};\n }\n\n var style$1;\n\n function addStyle() {\n if (!style$1) {\n style$1 = append(document.head, '<style>').sheet;\n style$1.insertRule(\n (\".\" + targetClass + \" > * {\\n margin-top: 0 !important;\\n transform: none !important;\\n }\")\n );\n }\n }\n\n var Filter = {\n\n mixins: [Animate],\n\n args: 'target',\n\n props: {\n target: Boolean,\n selActive: Boolean\n },\n\n data: {\n target: null,\n selActive: false,\n attrItem: 'uk-filter-control',\n cls: 'uk-active',\n animation: 250\n },\n\n computed: {\n\n toggles: function(ref, $el) {\n var attrItem = ref.attrItem;\n\n return $$((\"[\" + (this.attrItem) + \"],[data-\" + (this.attrItem) + \"]\"), $el);\n },\n\n target: function(ref, $el) {\n var target = ref.target;\n\n return $(target, $el);\n }\n\n },\n\n events: [\n\n {\n\n name: 'click',\n\n delegate: function() {\n return (\"[\" + (this.attrItem) + \"],[data-\" + (this.attrItem) + \"]\");\n },\n\n handler: function(e) {\n\n e.preventDefault();\n this.apply(e.current);\n\n }\n\n }\n\n ],\n\n connected: function() {\n var this$1 = this;\n\n\n if (this.selActive === false) {\n return;\n }\n\n var actives = $$(this.selActive, this.$el);\n this.toggles.forEach(function (el) { return toggleClass(el, this$1.cls, includes(actives, el)); });\n },\n\n update: function(data$$1) {\n\n var toggles = data$$1.toggles;\n var children = data$$1.children;\n if (isEqualList(toggles, this.toggles, false) && isEqualList(children, this.target.children, false)) {\n return;\n }\n\n data$$1.toggles = this.toggles;\n data$$1.children = this.target.children;\n\n this.setState(this.getState(), false);\n\n },\n\n methods: {\n\n apply: function(el) {\n this.setState(mergeState(el, this.attrItem, this.getState()));\n },\n\n getState: function() {\n var this$1 = this;\n\n return this.toggles\n .filter(function (item) { return hasClass(item, this$1.cls); })\n .reduce(function (state, el) { return mergeState(el, this$1.attrItem, state); }, {filter: {'': ''}, sort: []});\n },\n\n setState: function(state, animate$$1) {\n var this$1 = this;\n if ( animate$$1 === void 0 ) animate$$1 = true;\n\n\n state = assign({filter: {'': ''}, sort: []}, state);\n\n trigger(this.$el, 'beforeFilter', [this, state]);\n\n var children = toNodes(this.target.children);\n\n this.toggles.forEach(function (el) { return toggleClass(el, this$1.cls, matchFilter(el, this$1.attrItem, state)); });\n\n var apply$$1 = function () {\n\n var selector = getSelector(state);\n\n children.forEach(function (el) { return css(el, 'display', selector && !matches(el, selector) ? 'none' : ''); });\n\n var ref = state.sort;\n var sort = ref[0];\n var order = ref[1];\n\n if (sort) {\n var sorted = sortItems(children, sort, order);\n if (!isEqualList(sorted, children)) {\n sorted.forEach(function (el) { return append(this$1.target, el); });\n }\n }\n\n };\n\n if (animate$$1) {\n this.animate(apply$$1).then(function () { return trigger(this$1.$el, 'afterFilter', [this$1]); });\n } else {\n apply$$1();\n trigger(this.$el, 'afterFilter', [this]);\n }\n\n }\n\n }\n\n };\n\n function getFilter(el, attr$$1) {\n return parseOptions(data(el, attr$$1), ['filter']);\n }\n\n function mergeState(el, attr$$1, state) {\n\n toNodes(el).forEach(function (el) {\n var filterBy = getFilter(el, attr$$1);\n var filter$$1 = filterBy.filter;\n var group = filterBy.group;\n var sort = filterBy.sort;\n var order = filterBy.order; if ( order === void 0 ) order = 'asc';\n\n if (filter$$1 || isUndefined(sort)) {\n\n if (group) {\n delete state.filter[''];\n state.filter[group] = filter$$1;\n } else {\n state.filter = {'': filter$$1};\n }\n\n }\n\n if (!isUndefined(sort)) {\n state.sort = [sort, order];\n }\n });\n\n return state;\n }\n\n function matchFilter(el, attr$$1, ref) {\n var stateFilter = ref.filter;\n var ref_sort = ref.sort;\n var stateSort = ref_sort[0];\n var stateOrder = ref_sort[1];\n\n var ref$1 = getFilter(el, attr$$1);\n var filter$$1 = ref$1.filter;\n var group = ref$1.group; if ( group === void 0 ) group = '';\n var sort = ref$1.sort;\n var order = ref$1.order; if ( order === void 0 ) order = 'asc';\n return Boolean(\n (filter$$1 || isUndefined(sort)) && group in stateFilter && (filter$$1 === stateFilter[group] || isUndefined(filter$$1) && !stateFilter[group])\n || stateSort && sort && stateSort === sort && stateOrder === order\n );\n }\n\n function isEqualList(listA, listB, strict) {\n if ( strict === void 0 ) strict = true;\n\n\n listA = toNodes(listA);\n listB = toNodes(listB);\n\n return listA.length === listB.length\n && listA.every(function (el, i) { return strict ? el === listB[i] : ~listB.indexOf(el); });\n }\n\n function getSelector(ref) {\n var filter$$1 = ref.filter;\n\n var selector = '';\n each(filter$$1, function (value) { return selector += value || ''; });\n return selector;\n }\n\n function sortItems(nodes, sort, order) {\n return toNodes(nodes).sort(function (a, b) { return data(a, sort).localeCompare(data(b, sort)) * (order === 'asc' || -1); });\n }\n\n var Animations = {\n\n slide: {\n\n show: function(dir) {\n return [\n {transform: translate(dir * -100)},\n {transform: translate()}\n ];\n },\n\n percent: function(current) {\n return translated(current);\n },\n\n translate: function(percent, dir) {\n return [\n {transform: translate(dir * -100 * percent)},\n {transform: translate(dir * 100 * (1 - percent))}\n ];\n }\n\n }\n\n };\n\n function translated(el) {\n return Math.abs(css(el, 'transform').split(',')[4] / el.offsetWidth) || 0;\n }\n\n function translate(value, unit) {\n if ( value === void 0 ) value = 0;\n if ( unit === void 0 ) unit = '%';\n\n return (\"translateX(\" + value + (value ? unit : '') + \")\"); // currently not translate3d to support IE, translate3d within translate3d does not work while transitioning\n }\n\n function scale3d(value) {\n return (\"scale3d(\" + value + \", \" + value + \", 1)\");\n }\n\n var Animations$1 = assign({}, Animations, {\n\n fade: {\n\n show: function() {\n return [\n {opacity: 0},\n {opacity: 1}\n ];\n },\n\n percent: function(current) {\n return 1 - css(current, 'opacity');\n },\n\n translate: function(percent) {\n return [\n {opacity: 1 - percent},\n {opacity: percent}\n ];\n }\n\n },\n\n scale: {\n\n show: function() {\n return [\n {opacity: 0, transform: scale3d(1 - .2)},\n {opacity: 1, transform: scale3d(1)}\n ];\n },\n\n percent: function(current) {\n return 1 - css(current, 'opacity');\n },\n\n translate: function(percent) {\n return [\n {opacity: 1 - percent, transform: scale3d(1 - .2 * percent)},\n {opacity: percent, transform: scale3d(1 - .2 + .2 * percent)}\n ];\n }\n\n }\n\n });\n\n function Transitioner(prev, next, dir, ref) {\n var animation = ref.animation;\n var easing = ref.easing;\n\n\n var percent = animation.percent;\n var translate = animation.translate;\n var show = animation.show; if ( show === void 0 ) show = noop;\n var props = show(dir);\n var deferred = new Deferred();\n\n return {\n\n dir: dir,\n\n show: function(duration, percent, linear) {\n var this$1 = this;\n if ( percent === void 0 ) percent = 0;\n\n\n var timing = linear ? 'linear' : easing;\n duration -= Math.round(duration * clamp(percent, -1, 1));\n\n this.translate(percent);\n\n triggerUpdate(next, 'itemin', {percent: percent, duration: duration, timing: timing, dir: dir});\n triggerUpdate(prev, 'itemout', {percent: 1 - percent, duration: duration, timing: timing, dir: dir});\n\n Promise$1.all([\n Transition.start(next, props[1], duration, timing),\n Transition.start(prev, props[0], duration, timing)\n ]).then(function () {\n this$1.reset();\n deferred.resolve();\n }, noop);\n\n return deferred.promise;\n },\n\n stop: function() {\n return Transition.stop([next, prev]);\n },\n\n cancel: function() {\n Transition.cancel([next, prev]);\n },\n\n reset: function() {\n for (var prop in props[0]) {\n css([next, prev], prop, '');\n }\n },\n\n forward: function(duration, percent) {\n if ( percent === void 0 ) percent = this.percent();\n\n Transition.cancel([next, prev]);\n return this.show(duration, percent, true);\n\n },\n\n translate: function(percent) {\n\n this.reset();\n\n var props = translate(percent, dir);\n css(next, props[1]);\n css(prev, props[0]);\n triggerUpdate(next, 'itemtranslatein', {percent: percent, dir: dir});\n triggerUpdate(prev, 'itemtranslateout', {percent: 1 - percent, dir: dir});\n\n },\n\n percent: function() {\n return percent(prev || next, next, dir);\n },\n\n getDistance: function() {\n return prev.offsetWidth;\n }\n\n };\n\n }\n\n function triggerUpdate(el, type, data$$1) {\n trigger(el, createEvent(type, false, false, data$$1));\n }\n\n var SliderAutoplay = {\n\n props: {\n autoplay: Boolean,\n autoplayInterval: Number,\n pauseOnHover: Boolean\n },\n\n data: {\n autoplay: false,\n autoplayInterval: 7000,\n pauseOnHover: true\n },\n\n connected: function() {\n this.startAutoplay();\n },\n\n disconnected: function() {\n this.stopAutoplay();\n },\n\n events: [\n\n {\n\n name: 'visibilitychange',\n\n el: document,\n\n handler: function() {\n if (document.hidden) {\n this.stopAutoplay();\n } else {\n this.startAutoplay();\n }\n }\n\n },\n\n {\n\n name: pointerDown,\n handler: 'stopAutoplay'\n\n },\n\n {\n\n name: 'mouseenter',\n\n filter: function() {\n return this.autoplay;\n },\n\n handler: function() {\n this.isHovering = true;\n }\n\n },\n\n {\n\n name: 'mouseleave',\n\n filter: function() {\n return this.autoplay;\n },\n\n handler: function() {\n this.isHovering = false;\n }\n\n }\n\n ],\n\n methods: {\n\n startAutoplay: function() {\n var this$1 = this;\n\n\n this.stopAutoplay();\n\n if (this.autoplay) {\n this.interval = setInterval(\n function () { return !(this$1.isHovering && this$1.pauseOnHover) && !this$1.stack.length && this$1.show('next'); },\n this.autoplayInterval\n );\n }\n\n },\n\n stopAutoplay: function() {\n if (this.interval) {\n clearInterval(this.interval);\n }\n }\n\n }\n\n };\n\n var SliderDrag = {\n\n data: {\n threshold: 10,\n preventCatch: false\n },\n\n init: function() {\n var this$1 = this;\n\n\n ['start', 'move', 'end'].forEach(function (key) {\n\n var fn = this$1[key];\n this$1[key] = function (e) {\n\n var pos = getPos$1(e).x * (isRtl ? -1 : 1);\n\n this$1.prevPos = pos !== this$1.pos ? this$1.pos : this$1.prevPos;\n this$1.pos = pos;\n\n fn(e);\n };\n\n });\n\n },\n\n events: [\n\n {\n\n name: pointerDown,\n\n delegate: function() {\n return this.slidesSelector;\n },\n\n handler: function(e) {\n\n if (!isTouch(e) && hasTextNodesOnly(e.target)\n || e.button > 0\n || this.length < 2\n || this.preventCatch\n ) {\n return;\n }\n\n this.start(e);\n }\n\n },\n\n {\n name: 'dragstart',\n\n handler: function(e) {\n e.preventDefault();\n }\n }\n\n ],\n\n methods: {\n\n start: function() {\n\n this.drag = this.pos;\n\n if (this._transitioner) {\n\n this.percent = this._transitioner.percent();\n this.drag += this._transitioner.getDistance() * this.percent * this.dir;\n\n this._transitioner.translate(this.percent);\n this._transitioner.cancel();\n\n this.dragging = true;\n\n this.stack = [];\n\n } else {\n this.prevIndex = this.index;\n }\n\n this.unbindMove = on(document, pointerMove, this.move, {capture: true, passive: false});\n on(window, 'scroll', this.unbindMove);\n on(document, pointerUp, this.end, true);\n\n },\n\n move: function(e) {\n var this$1 = this;\n\n\n var distance = this.pos - this.drag;\n\n if (distance === 0 || this.prevPos === this.pos || !this.dragging && Math.abs(distance) < this.threshold) {\n return;\n }\n\n e.cancelable && e.preventDefault();\n\n this.dragging = true;\n this.dir = (distance < 0 ? 1 : -1);\n\n var ref = this;\n var slides = ref.slides;\n var ref$1 = this;\n var prevIndex = ref$1.prevIndex;\n var dis = Math.abs(distance);\n var nextIndex = this.getIndex(prevIndex + this.dir, prevIndex);\n var width$$1 = this._getDistance(prevIndex, nextIndex) || slides[prevIndex].offsetWidth;\n\n while (nextIndex !== prevIndex && dis > width$$1) {\n\n this$1.drag -= width$$1 * this$1.dir;\n\n prevIndex = nextIndex;\n dis -= width$$1;\n nextIndex = this$1.getIndex(prevIndex + this$1.dir, prevIndex);\n width$$1 = this$1._getDistance(prevIndex, nextIndex) || slides[prevIndex].offsetWidth;\n\n }\n\n this.percent = dis / width$$1;\n\n var prev = slides[prevIndex];\n var next = slides[nextIndex];\n var changed = this.index !== nextIndex;\n var edge = prevIndex === nextIndex;\n\n var itemShown;\n\n [this.index, this.prevIndex].filter(function (i) { return !includes([nextIndex, prevIndex], i); }).forEach(function (i) {\n trigger(slides[i], 'itemhidden', [this$1]);\n\n if (edge) {\n itemShown = true;\n this$1.prevIndex = prevIndex;\n }\n\n });\n\n if (this.index === prevIndex && this.prevIndex !== prevIndex || itemShown) {\n trigger(slides[this.index], 'itemshown', [this]);\n }\n\n if (changed) {\n this.prevIndex = prevIndex;\n this.index = nextIndex;\n\n !edge && trigger(prev, 'beforeitemhide', [this]);\n trigger(next, 'beforeitemshow', [this]);\n }\n\n this._transitioner = this._translate(Math.abs(this.percent), prev, !edge && next);\n\n if (changed) {\n !edge && trigger(prev, 'itemhide', [this]);\n trigger(next, 'itemshow', [this]);\n }\n\n },\n\n end: function() {\n\n off(window, 'scroll', this.unbindMove);\n this.unbindMove();\n off(document, pointerUp, this.end, true);\n\n if (this.dragging) {\n\n this.dragging = null;\n\n if (this.index === this.prevIndex) {\n this.percent = 1 - this.percent;\n this.dir *= -1;\n this._show(false, this.index, true);\n this._transitioner = null;\n } else {\n\n var dirChange = (isRtl ? this.dir * (isRtl ? 1 : -1) : this.dir) < 0 === this.prevPos > this.pos;\n this.index = dirChange ? this.index : this.prevIndex;\n\n if (dirChange) {\n this.percent = 1 - this.percent;\n }\n\n this.show(this.dir > 0 && !dirChange || this.dir < 0 && dirChange ? 'next' : 'previous', true);\n }\n\n preventClick();\n\n }\n\n this.drag\n = this.percent\n = null;\n\n }\n\n }\n\n };\n\n function hasTextNodesOnly(el) {\n return !el.children.length && el.childNodes.length;\n }\n\n var SliderNav = {\n\n data: {\n selNav: false\n },\n\n computed: {\n\n nav: function(ref, $el) {\n var selNav = ref.selNav;\n\n return $(selNav, $el);\n },\n\n navItemSelector: function(ref) {\n var attrItem = ref.attrItem;\n\n return (\"[\" + attrItem + \"],[data-\" + attrItem + \"]\");\n },\n\n navItems: function(_, $el) {\n return $$(this.navItemSelector, $el);\n }\n\n },\n\n update: [\n\n {\n\n write: function() {\n var this$1 = this;\n\n\n if (this.nav && this.length !== this.nav.children.length) {\n html(this.nav, this.slides.map(function (_, i) { return (\"<li \" + (this$1.attrItem) + \"=\\\"\" + i + \"\\\"><a href=\\\"#\\\"></a></li>\"); }).join(''));\n }\n\n toggleClass($$(this.navItemSelector, this.$el).concat(this.nav), 'uk-hidden', !this.maxIndex);\n\n this.updateNav();\n\n },\n\n events: ['load', 'resize']\n\n }\n\n ],\n\n events: [\n\n {\n\n name: 'click',\n\n delegate: function() {\n return this.navItemSelector;\n },\n\n handler: function(e) {\n e.preventDefault();\n e.current.blur();\n this.show(data(e.current, this.attrItem));\n }\n\n },\n\n {\n\n name: 'itemshow',\n handler: 'updateNav'\n\n }\n\n ],\n\n methods: {\n\n updateNav: function() {\n var this$1 = this;\n\n\n var i = this.getValidIndex();\n this.navItems.forEach(function (el) {\n\n var cmd = data(el, this$1.attrItem);\n\n toggleClass(el, this$1.clsActive, toNumber(cmd) === i);\n toggleClass(el, 'uk-invisible', this$1.finite && (cmd === 'previous' && i === 0 || cmd === 'next' && i >= this$1.maxIndex));\n });\n\n }\n\n }\n\n };\n\n var Slider = {\n\n attrs: true,\n\n mixins: [SliderAutoplay, SliderDrag, SliderNav],\n\n props: {\n clsActivated: Boolean,\n easing: String,\n index: Number,\n finite: Boolean,\n velocity: Number\n },\n\n data: function () { return ({\n easing: 'ease',\n finite: false,\n velocity: 1,\n index: 0,\n stack: [],\n percent: 0,\n clsActive: 'uk-active',\n clsActivated: false,\n Transitioner: false,\n transitionOptions: {}\n }); },\n\n computed: {\n\n duration: function(ref, $el) {\n var velocity = ref.velocity;\n\n return speedUp($el.offsetWidth / velocity);\n },\n\n length: function() {\n return this.slides.length;\n },\n\n list: function(ref, $el) {\n var selList = ref.selList;\n\n return $(selList, $el);\n },\n\n maxIndex: function() {\n return this.length - 1;\n },\n\n slidesSelector: function(ref) {\n var selList = ref.selList;\n\n return (selList + \" > *\");\n },\n\n slides: function() {\n return toNodes(this.list.children);\n }\n\n },\n\n events: {\n\n itemshown: function() {\n this.$update(this.list);\n }\n\n },\n\n methods: {\n\n show: function(index$$1, force) {\n var this$1 = this;\n if ( force === void 0 ) force = false;\n\n\n if (this.dragging || !this.length) {\n return;\n }\n\n var ref = this;\n var stack = ref.stack;\n var queueIndex = force ? 0 : stack.length;\n var reset = function () {\n stack.splice(queueIndex, 1);\n\n if (stack.length) {\n this$1.show(stack.shift(), true);\n }\n };\n\n stack[force ? 'unshift' : 'push'](index$$1);\n\n if (!force && stack.length > 1) {\n\n if (stack.length === 2) {\n this._transitioner.forward(Math.min(this.duration, 200));\n }\n\n return;\n }\n\n var prevIndex = this.index;\n var prev = hasClass(this.slides, this.clsActive) && this.slides[prevIndex];\n var nextIndex = this.getIndex(index$$1, this.index);\n var next = this.slides[nextIndex];\n\n if (prev === next) {\n reset();\n return;\n }\n\n this.dir = getDirection(index$$1, prevIndex);\n this.prevIndex = prevIndex;\n this.index = nextIndex;\n\n prev && trigger(prev, 'beforeitemhide', [this]);\n if (!trigger(next, 'beforeitemshow', [this, prev])) {\n this.index = this.prevIndex;\n reset();\n return;\n }\n\n var promise = this._show(prev, next, force).then(function () {\n\n prev && trigger(prev, 'itemhidden', [this$1]);\n trigger(next, 'itemshown', [this$1]);\n\n return new Promise$1(function (resolve) {\n fastdom.write(function () {\n stack.shift();\n if (stack.length) {\n this$1.show(stack.shift(), true);\n } else {\n this$1._transitioner = null;\n }\n resolve();\n });\n });\n\n });\n\n prev && trigger(prev, 'itemhide', [this]);\n trigger(next, 'itemshow', [this]);\n\n return promise;\n\n },\n\n getIndex: function(index$$1, prev) {\n if ( index$$1 === void 0 ) index$$1 = this.index;\n if ( prev === void 0 ) prev = this.index;\n\n return clamp(getIndex(index$$1, this.slides, prev, this.finite), 0, this.maxIndex);\n },\n\n getValidIndex: function(index$$1, prevIndex) {\n if ( index$$1 === void 0 ) index$$1 = this.index;\n if ( prevIndex === void 0 ) prevIndex = this.prevIndex;\n\n return this.getIndex(index$$1, prevIndex);\n },\n\n _show: function(prev, next, force) {\n\n this._transitioner = this._getTransitioner(\n prev,\n next,\n this.dir,\n assign({\n easing: force\n ? next.offsetWidth < 600\n ? 'cubic-bezier(0.25, 0.46, 0.45, 0.94)' /* easeOutQuad */\n : 'cubic-bezier(0.165, 0.84, 0.44, 1)' /* easeOutQuart */\n : this.easing\n }, this.transitionOptions)\n );\n\n if (!force && !prev) {\n this._transitioner.translate(1);\n return Promise$1.resolve();\n }\n\n var ref = this.stack;\n var length = ref.length;\n return this._transitioner[length > 1 ? 'forward' : 'show'](length > 1 ? Math.min(this.duration, 75 + 75 / (length - 1)) : this.duration, this.percent);\n\n },\n\n _getDistance: function(prev, next) {\n return new this._getTransitioner(prev, prev !== next && next).getDistance();\n },\n\n _translate: function(percent, prev, next) {\n if ( prev === void 0 ) prev = this.prevIndex;\n if ( next === void 0 ) next = this.index;\n\n var transitioner = this._getTransitioner(prev !== next ? prev : false, next);\n transitioner.translate(percent);\n return transitioner;\n },\n\n _getTransitioner: function(prev, next, dir, options) {\n if ( prev === void 0 ) prev = this.prevIndex;\n if ( next === void 0 ) next = this.index;\n if ( dir === void 0 ) dir = this.dir || 1;\n if ( options === void 0 ) options = this.transitionOptions;\n\n return new this.Transitioner(\n isNumber(prev) ? this.slides[prev] : prev,\n isNumber(next) ? this.slides[next] : next,\n dir * (isRtl ? -1 : 1),\n options\n );\n }\n\n }\n\n };\n\n function getDirection(index$$1, prevIndex) {\n return index$$1 === 'next'\n ? 1\n : index$$1 === 'previous'\n ? -1\n : index$$1 < prevIndex\n ? -1\n : 1;\n }\n\n function speedUp(x) {\n return .5 * x + 300; // parabola through (400,500; 600,600; 1800,1200)\n }\n\n var Slideshow = {\n\n mixins: [Slider],\n\n props: {\n animation: String\n },\n\n data: {\n animation: 'slide',\n clsActivated: 'uk-transition-active',\n Animations: Animations,\n Transitioner: Transitioner\n },\n\n computed: {\n\n animation: function(ref) {\n var animation = ref.animation;\n var Animations$$1 = ref.Animations;\n\n return assign(animation in Animations$$1 ? Animations$$1[animation] : Animations$$1.slide, {name: animation});\n },\n\n transitionOptions: function() {\n return {animation: this.animation};\n }\n\n },\n\n events: {\n\n 'itemshow itemhide itemshown itemhidden': function(ref) {\n var target = ref.target;\n\n this.$update(target);\n },\n\n itemshow: function() {\n isNumber(this.prevIndex) && fastdom.flush(); // iOS 10+ will honor the video.play only if called from a gesture handler\n },\n\n beforeitemshow: function(ref) {\n var target = ref.target;\n\n addClass(target, this.clsActive);\n },\n\n itemshown: function(ref) {\n var target = ref.target;\n\n addClass(target, this.clsActivated);\n },\n\n itemhidden: function(ref) {\n var target = ref.target;\n\n removeClass(target, this.clsActive, this.clsActivated);\n }\n\n }\n\n };\n\n var LightboxPanel = {\n\n mixins: [Container, Modal, Togglable, Slideshow],\n\n functional: true,\n\n props: {\n delayControls: Number,\n preload: Number,\n videoAutoplay: Boolean,\n template: String\n },\n\n data: function () { return ({\n preload: 1,\n videoAutoplay: false,\n delayControls: 3000,\n items: [],\n cls: 'uk-open',\n clsPage: 'uk-lightbox-page',\n selList: '.uk-lightbox-items',\n attrItem: 'uk-lightbox-item',\n selClose: '.uk-close-large',\n pauseOnHover: false,\n velocity: 2,\n Animations: Animations$1,\n template: \"<div class=\\\"uk-lightbox uk-overflow-hidden\\\"> <ul class=\\\"uk-lightbox-items\\\"></ul> <div class=\\\"uk-lightbox-toolbar uk-position-top uk-text-right uk-transition-slide-top uk-transition-opaque\\\"> <button class=\\\"uk-lightbox-toolbar-icon uk-close-large\\\" type=\\\"button\\\" uk-close></button> </div> <a class=\\\"uk-lightbox-button uk-position-center-left uk-position-medium uk-transition-fade\\\" href=\\\"#\\\" uk-slidenav-previous uk-lightbox-item=\\\"previous\\\"></a> <a class=\\\"uk-lightbox-button uk-position-center-right uk-position-medium uk-transition-fade\\\" href=\\\"#\\\" uk-slidenav-next uk-lightbox-item=\\\"next\\\"></a> <div class=\\\"uk-lightbox-toolbar uk-lightbox-caption uk-position-bottom uk-text-center uk-transition-slide-bottom uk-transition-opaque\\\"></div> </div>\"\n }); },\n\n created: function() {\n var this$1 = this;\n\n\n this.$mount(append(this.container, this.template));\n\n this.caption = $('.uk-lightbox-caption', this.$el);\n\n this.items.forEach(function () { return append(this$1.list, '<li></li>'); });\n\n },\n\n events: [\n\n {\n\n name: (pointerMove + \" \" + pointerDown + \" keydown\"),\n\n handler: 'showControls'\n\n },\n\n {\n\n name: 'click',\n\n self: true,\n\n delegate: function() {\n return this.slidesSelector;\n },\n\n handler: function(e) {\n e.preventDefault();\n this.hide();\n }\n\n },\n\n {\n\n name: 'shown',\n\n self: true,\n\n handler: 'showControls'\n },\n\n {\n\n name: 'hide',\n\n self: true,\n\n handler: function() {\n\n this.hideControls();\n\n removeClass(this.slides, this.clsActive);\n Transition.stop(this.slides);\n\n }\n },\n\n {\n\n name: 'keyup',\n\n el: document,\n\n handler: function(e) {\n\n if (!this.isToggled(this.$el)) {\n return;\n }\n\n switch (e.keyCode) {\n case 37:\n this.show('previous');\n break;\n case 39:\n this.show('next');\n break;\n }\n }\n },\n\n {\n\n name: 'beforeitemshow',\n\n handler: function(e) {\n\n if (this.isToggled()) {\n return;\n }\n\n this.preventCatch = true;\n\n e.preventDefault();\n\n this.toggleNow(this.$el, true);\n\n this.animation = Animations$1['scale'];\n removeClass(e.target, this.clsActive);\n this.stack.splice(1, 0, this.index);\n\n }\n\n },\n\n {\n\n name: 'itemshow',\n\n handler: function(ref) {\n var this$1 = this;\n var target = ref.target;\n\n\n var i = index(target);\n var ref$1 = this.getItem(i);\n var caption = ref$1.caption;\n\n css(this.caption, 'display', caption ? '' : 'none');\n html(this.caption, caption);\n\n for (var j = 0; j <= this.preload; j++) {\n this$1.loadItem(this$1.getIndex(i + j));\n this$1.loadItem(this$1.getIndex(i - j));\n }\n\n }\n\n },\n\n {\n\n name: 'itemshown',\n\n handler: function() {\n this.preventCatch = false;\n }\n\n },\n\n {\n\n name: 'itemload',\n\n handler: function(_, item) {\n var this$1 = this;\n\n\n var source = item.source;\n var type = item.type;\n var alt = item.alt;\n\n this.setItem(item, '<span uk-spinner></span>');\n\n if (!source) {\n return;\n }\n\n var matches$$1;\n\n // Image\n if (type === 'image' || source.match(/\\.(jp(e)?g|png|gif|svg)($|\\?)/i)) {\n\n getImage(source).then(\n function (img) { return this$1.setItem(item, (\"<img width=\\\"\" + (img.width) + \"\\\" height=\\\"\" + (img.height) + \"\\\" src=\\\"\" + source + \"\\\" alt=\\\"\" + (alt ? alt : '') + \"\\\">\")); },\n function () { return this$1.setError(item); }\n );\n\n // Video\n } else if (type === 'video' || source.match(/\\.(mp4|webm|ogv)($|\\?)/i)) {\n\n var video = $((\"<video controls playsinline\" + (item.poster ? (\" poster=\\\"\" + (item.poster) + \"\\\"\") : '') + \" uk-video=\\\"\" + (this.videoAutoplay) + \"\\\"></video>\"));\n attr(video, 'src', source);\n\n on(video, 'error', function () { return this$1.setError(item); });\n on(video, 'loadedmetadata', function () {\n attr(video, {width: video.videoWidth, height: video.videoHeight});\n this$1.setItem(item, video);\n });\n\n // Iframe\n } else if (type === 'iframe' || source.match(/\\.(html|php)($|\\?)/i)) {\n\n this.setItem(item, (\"<iframe class=\\\"uk-lightbox-iframe\\\" src=\\\"\" + source + \"\\\" frameborder=\\\"0\\\" allowfullscreen></iframe>\"));\n\n // YouTube\n } else if ((matches$$1 = source.match(/\\/\\/.*?youtube(-nocookie)?\\.[a-z]+\\/watch\\?v=([^&\\s]+)/) || source.match(/()youtu\\.be\\/(.*)/))) {\n\n var id = matches$$1[2];\n var setIframe = function (width$$1, height$$1) {\n if ( width$$1 === void 0 ) width$$1 = 640;\n if ( height$$1 === void 0 ) height$$1 = 450;\n\n return this$1.setItem(item, getIframe((\"https://www.youtube\" + (matches$$1[1] || '') + \".com/embed/\" + id), width$$1, height$$1, this$1.videoAutoplay));\n };\n\n getImage((\"https://img.youtube.com/vi/\" + id + \"/maxresdefault.jpg\")).then(\n function (ref) {\n var width$$1 = ref.width;\n var height$$1 = ref.height;\n\n // YouTube default 404 thumb, fall back to low resolution\n if (width$$1 === 120 && height$$1 === 90) {\n getImage((\"https://img.youtube.com/vi/\" + id + \"/0.jpg\")).then(\n function (ref) {\n var width$$1 = ref.width;\n var height$$1 = ref.height;\n\n return setIframe(width$$1, height$$1);\n },\n setIframe\n );\n } else {\n setIframe(width$$1, height$$1);\n }\n },\n setIframe\n );\n\n // Vimeo\n } else if ((matches$$1 = source.match(/(\\/\\/.*?)vimeo\\.[a-z]+\\/([0-9]+).*?/))) {\n\n ajax((\"https://vimeo.com/api/oembed.json?maxwidth=1920&url=\" + (encodeURI(source))), {responseType: 'json', withCredentials: false})\n .then(\n function (ref) {\n var ref_response = ref.response;\n var height$$1 = ref_response.height;\n var width$$1 = ref_response.width;\n\n return this$1.setItem(item, getIframe((\"https://player.vimeo.com/video/\" + (matches$$1[2])), width$$1, height$$1, this$1.videoAutoplay));\n },\n function () { return this$1.setError(item); }\n );\n\n }\n\n }\n\n }\n\n ],\n\n methods: {\n\n loadItem: function(index$$1) {\n if ( index$$1 === void 0 ) index$$1 = this.index;\n\n\n var item = this.getItem(index$$1);\n\n if (item.content) {\n return;\n }\n\n trigger(this.$el, 'itemload', [item]);\n },\n\n getItem: function(index$$1) {\n if ( index$$1 === void 0 ) index$$1 = this.index;\n\n return this.items[index$$1] || {};\n },\n\n setItem: function(item, content) {\n assign(item, {content: content});\n var el = html(this.slides[this.items.indexOf(item)], content);\n trigger(this.$el, 'itemloaded', [this, el]);\n this.$update(el);\n },\n\n setError: function(item) {\n this.setItem(item, '<span uk-icon=\"icon: bolt; ratio: 2\"></span>');\n },\n\n showControls: function() {\n\n clearTimeout(this.controlsTimer);\n this.controlsTimer = setTimeout(this.hideControls, this.delayControls);\n\n addClass(this.$el, 'uk-active', 'uk-transition-active');\n\n },\n\n hideControls: function() {\n removeClass(this.$el, 'uk-active', 'uk-transition-active');\n }\n\n }\n\n };\n\n function getIframe(src, width$$1, height$$1, autoplay) {\n return (\"<iframe src=\\\"\" + src + \"\\\" width=\\\"\" + width$$1 + \"\\\" height=\\\"\" + height$$1 + \"\\\" style=\\\"max-width: 100%; box-sizing: border-box;\\\" frameborder=\\\"0\\\" allowfullscreen uk-video=\\\"autoplay: \" + autoplay + \"\\\" uk-responsive></iframe>\");\n }\n\n var props = merge(LightboxPanel, 'props');\n var defaults = merge(LightboxPanel, 'data');\n\n var Lightbox = {\n\n install: install$2,\n\n attrs: true,\n\n props: assign({toggle: String}, props),\n\n data: assign({toggle: 'a'}, Object.keys(props).reduce(function (data$$1, key) {\n data$$1[key] = defaults[key];\n return data$$1;\n }, {})),\n\n computed: {\n\n toggles: function(ref, $el) {\n var toggle = ref.toggle;\n\n return $$(toggle, $el);\n }\n\n },\n\n disconnected: function() {\n this._destroy();\n },\n\n events: [\n\n {\n\n name: 'click',\n\n delegate: function() {\n return ((this.toggle) + \":not(.uk-disabled)\");\n },\n\n handler: function(e) {\n e.preventDefault();\n e.current.blur();\n this.show(index(this.toggles, e.current));\n }\n\n }\n\n ],\n\n update: function(data$$1) {\n\n data$$1.toggles = data$$1.toggles || this.toggles;\n\n if (this.panel && this.animation) {\n this.panel.$props.animation = this.animation;\n this.panel.$emit();\n }\n\n if (!this.panel || isEqualList$1(data$$1.toggles, this.toggles)) {\n return;\n }\n\n data$$1.toggles = this.toggles;\n this._destroy();\n this._init();\n\n },\n\n methods: {\n\n _init: function() {\n return this.panel = this.panel || this.$create('lightboxPanel', assign({}, this.$props, {\n items: this.toggles.reduce(function (items, el) {\n items.push(['href', 'caption', 'type', 'poster', 'alt'].reduce(function (obj, attr$$1) {\n obj[attr$$1 === 'href' ? 'source' : attr$$1] = data(el, attr$$1);\n return obj;\n }, {}));\n return items;\n }, [])\n }));\n },\n\n _destroy: function() {\n if (this.panel) {\n this.panel.$destroy(true);\n this.panel = null;\n }\n },\n\n show: function(index$$1) {\n\n if (!this.panel) {\n this._init();\n }\n\n return this.panel.show(index$$1);\n\n },\n\n hide: function() {\n\n return this.panel && this.panel.hide();\n\n }\n\n }\n\n };\n\n function isEqualList$1(listA, listB) {\n return listA.length === listB.length\n && listA.every(function (el, i) { return el === listB[i]; });\n }\n\n function merge(options, prop) {\n return assign.apply(\n void 0, [ {} ].concat( (options.mixins ? options.mixins.map(function (mixin) { return merge(mixin, prop); }) : []),\n [isFunction(options[prop]) ? options[prop]() : options[prop]] ));\n }\n\n function install$2(UIkit) {\n if (!UIkit.lightboxPanel) {\n UIkit.component('lightboxPanel', LightboxPanel);\n }\n }\n\n var obj;\n\n var containers = {};\n\n var Notification = {\n\n functional: true,\n\n args: ['message', 'status'],\n\n data: {\n message: '',\n status: '',\n timeout: 5000,\n group: null,\n pos: 'top-center',\n clsClose: 'uk-notification-close',\n clsMsg: 'uk-notification-message'\n },\n\n install: install$3,\n\n created: function() {\n\n if (!containers[this.pos]) {\n containers[this.pos] = append(this.$container, (\"<div class=\\\"uk-notification uk-notification-\" + (this.pos) + \"\\\"></div>\"));\n }\n\n var container = css(containers[this.pos], 'display', 'block');\n\n this.$mount(append(container,\n (\"<div class=\\\"\" + (this.clsMsg) + (this.status ? (\" \" + (this.clsMsg) + \"-\" + (this.status)) : '') + \"\\\"> <a href=\\\"#\\\" class=\\\"\" + (this.clsClose) + \"\\\" data-uk-close></a> <div>\" + (this.message) + \"</div> </div>\")\n ));\n\n },\n\n ready: function() {\n var this$1 = this;\n\n\n var marginBottom = toFloat(css(this.$el, 'marginBottom'));\n Transition.start(\n css(this.$el, {opacity: 0, marginTop: -this.$el.offsetHeight, marginBottom: 0}),\n {opacity: 1, marginTop: 0, marginBottom: marginBottom}\n ).then(function () {\n if (this$1.timeout) {\n this$1.timer = setTimeout(this$1.close, this$1.timeout);\n }\n });\n\n },\n\n events: ( obj = {\n\n click: function(e) {\n if (closest(e.target, 'a[href=\"#\"]')) {\n e.preventDefault();\n }\n this.close();\n }\n\n }, obj[pointerEnter] = function () {\n if (this.timer) {\n clearTimeout(this.timer);\n }\n }, obj[pointerLeave] = function () {\n if (this.timeout) {\n this.timer = setTimeout(this.close, this.timeout);\n }\n }, obj ),\n\n methods: {\n\n close: function(immediate) {\n var this$1 = this;\n\n\n var removeFn = function () {\n\n trigger(this$1.$el, 'close', [this$1]);\n remove(this$1.$el);\n\n if (!containers[this$1.pos].children.length) {\n css(containers[this$1.pos], 'display', 'none');\n }\n\n };\n\n if (this.timer) {\n clearTimeout(this.timer);\n }\n\n if (immediate) {\n removeFn();\n } else {\n Transition.start(this.$el, {\n opacity: 0,\n marginTop: -this.$el.offsetHeight,\n marginBottom: 0\n }).then(removeFn);\n }\n }\n\n }\n\n };\n\n function install$3(UIkit) {\n UIkit.notification.closeAll = function (group, immediate) {\n apply(document.body, function (el) {\n var notification = UIkit.getComponent(el, 'notification');\n if (notification && (!group || group === notification.group)) {\n notification.close(immediate);\n }\n });\n };\n }\n\n var props$1 = ['x', 'y', 'bgx', 'bgy', 'rotate', 'scale', 'color', 'backgroundColor', 'borderColor', 'opacity', 'blur', 'hue', 'grayscale', 'invert', 'saturate', 'sepia', 'fopacity'];\n\n var Parallax = {\n\n props: props$1.reduce(function (props, prop) {\n props[prop] = 'list';\n return props;\n }, {\n media: 'media'\n }),\n\n data: props$1.reduce(function (data$$1, prop) {\n data$$1[prop] = undefined;\n return data$$1;\n }, {\n media: false\n }),\n\n computed: {\n\n props: function(properties, $el) {\n var this$1 = this;\n\n\n return props$1.reduce(function (props, prop) {\n\n if (isUndefined(properties[prop])) {\n return props;\n }\n\n var isColor = prop.match(/color/i);\n var isCssProp = isColor || prop === 'opacity';\n\n var pos, bgPos, diff;\n var steps = properties[prop].slice(0);\n\n if (isCssProp) {\n css($el, prop, '');\n }\n\n if (steps.length < 2) {\n steps.unshift((prop === 'scale'\n ? 1\n : isCssProp\n ? css($el, prop)\n : 0) || 0);\n }\n\n var unit = includes(steps.join(''), '%') ? '%' : 'px';\n\n if (isColor) {\n\n var ref = $el.style;\n var color = ref.color;\n steps = steps.map(function (step) { return parseColor($el, step); });\n $el.style.color = color;\n\n } else {\n\n steps = steps.map(toFloat);\n\n }\n\n if (prop.match(/^bg/)) {\n\n css($el, (\"background-position-\" + (prop[2])), '');\n bgPos = css($el, 'backgroundPosition').split(' ')[prop[2] === 'x' ? 0 : 1]; // IE 11 can't read background-position-[x|y]\n\n if (this$1.covers) {\n\n var min = Math.min.apply(Math, steps);\n var max = Math.max.apply(Math, steps);\n var down = steps.indexOf(min) < steps.indexOf(max);\n\n diff = max - min;\n\n steps = steps.map(function (step) { return step - (down ? min : max); });\n pos = (down ? -diff : 0) + \"px\";\n\n } else {\n\n pos = bgPos;\n\n }\n }\n\n props[prop] = {steps: steps, unit: unit, pos: pos, bgPos: bgPos, diff: diff};\n\n return props;\n\n }, {});\n\n },\n\n bgProps: function() {\n var this$1 = this;\n\n return ['bgx', 'bgy'].filter(function (bg) { return bg in this$1.props; });\n },\n\n covers: function(_, $el) {\n return covers($el);\n }\n\n },\n\n disconnected: function() {\n delete this._image;\n },\n\n update: [\n\n {\n\n read: function(data$$1) {\n var this$1 = this;\n\n\n data$$1.active = !this.media || window.matchMedia(this.media).matches;\n\n if (data$$1.image) {\n data$$1.image.dimEl = {\n width: this.$el.offsetWidth,\n height: this.$el.offsetHeight\n };\n }\n\n if ('image' in data$$1 || !this.covers || !this.bgProps.length) {\n return;\n }\n\n var src = css(this.$el, 'backgroundImage').replace(/^none|url\\([\"']?(.+?)[\"']?\\)$/, '$1');\n\n if (!src) {\n return;\n }\n\n data$$1.image = false;\n\n getImage(src).then(function (img) {\n data$$1.image = {\n width: img.naturalWidth,\n height: img.naturalHeight\n };\n\n this$1.$emit();\n });\n\n },\n\n write: function(ref) {\n var this$1 = this;\n var image = ref.image;\n var active = ref.active;\n\n\n if (!image) {\n return;\n }\n\n if (!active) {\n css(this.$el, {backgroundSize: '', backgroundRepeat: ''});\n return;\n }\n\n var dimEl = image.dimEl;\n\n var dim = Dimensions.cover(image, dimEl);\n\n this.bgProps.forEach(function (prop) {\n\n var ref = this$1.props[prop];\n var diff = ref.diff;\n var bgPos = ref.bgPos;\n var steps = ref.steps;\n var attr$$1 = prop === 'bgy' ? 'height' : 'width';\n var span = dim[attr$$1] - dimEl[attr$$1];\n\n if (!bgPos.match(/%$|0px/)) {\n return;\n }\n\n if (span < diff) {\n dimEl[attr$$1] = dim[attr$$1] + diff - span;\n } else if (span > diff) {\n\n var bgPosFloat = parseFloat(bgPos);\n\n if (bgPosFloat) {\n this$1.props[prop].steps = steps.map(function (step) { return step - (span - diff) / (100 / bgPosFloat); });\n }\n }\n\n dim = Dimensions.cover(image, dimEl);\n });\n\n css(this.$el, {\n backgroundSize: ((dim.width) + \"px \" + (dim.height) + \"px\"),\n backgroundRepeat: 'no-repeat'\n });\n\n },\n\n events: ['load', 'resize']\n\n }\n\n ],\n\n methods: {\n\n reset: function() {\n var this$1 = this;\n\n each(this.getCss(0), function (_, prop) { return css(this$1.$el, prop, ''); });\n },\n\n getCss: function(percent) {\n\n var ref = this;\n var props = ref.props;\n var translated = false;\n\n return Object.keys(props).reduce(function (css$$1, prop) {\n\n var ref = props[prop];\n var steps = ref.steps;\n var unit = ref.unit;\n var pos = ref.pos;\n var value = getValue(steps, percent);\n\n switch (prop) {\n\n // transforms\n case 'x':\n case 'y':\n\n if (translated) {\n break;\n }\n\n var ref$1 = ['x', 'y'].map(function (dir) { return prop === dir\n ? value + unit\n : props[dir]\n ? getValue(props[dir].steps, percent) + props[dir].unit\n : 0; }\n );\n var x = ref$1[0];\n var y = ref$1[1];\n\n translated = css$$1.transform += \" translate3d(\" + x + \", \" + y + \", 0)\";\n break;\n case 'rotate':\n css$$1.transform += \" rotate(\" + value + \"deg)\";\n break;\n case 'scale':\n css$$1.transform += \" scale(\" + value + \")\";\n break;\n\n // bg image\n case 'bgy':\n case 'bgx':\n css$$1[(\"background-position-\" + (prop[2]))] = \"calc(\" + pos + \" + \" + (value + unit) + \")\";\n break;\n\n // color\n case 'color':\n case 'backgroundColor':\n case 'borderColor':\n\n var ref$2 = getStep(steps, percent);\n var start = ref$2[0];\n var end = ref$2[1];\n var p = ref$2[2];\n\n css$$1[prop] = \"rgba(\" + (start.map(function (value, i) {\n value = value + p * (end[i] - value);\n return i === 3 ? toFloat(value) : parseInt(value, 10);\n }).join(',')) + \")\";\n break;\n\n // CSS Filter\n case 'blur':\n css$$1.filter += \" blur(\" + value + \"px)\";\n break;\n case 'hue':\n css$$1.filter += \" hue-rotate(\" + value + \"deg)\";\n break;\n case 'fopacity':\n css$$1.filter += \" opacity(\" + value + \"%)\";\n break;\n case 'grayscale':\n case 'invert':\n case 'saturate':\n case 'sepia':\n css$$1.filter += \" \" + prop + \"(\" + value + \"%)\";\n break;\n\n default:\n css$$1[prop] = value;\n }\n\n return css$$1;\n\n }, {transform: '', filter: ''});\n\n }\n\n }\n\n };\n\n function parseColor(el, color) {\n return css(css(el, 'color', color), 'color').split(/[(),]/g).slice(1, -1).concat(1).slice(0, 4).map(function (n) { return toFloat(n); });\n }\n\n function getStep(steps, percent) {\n var count = steps.length - 1;\n var index$$1 = Math.min(Math.floor(count * percent), count - 1);\n var step = steps.slice(index$$1, index$$1 + 2);\n\n step.push(percent === 1 ? 1 : percent % (1 / count) * count);\n\n return step;\n }\n\n function getValue(steps, percent) {\n var ref = getStep(steps, percent);\n var start = ref[0];\n var end = ref[1];\n var p = ref[2];\n return (isNumber(start)\n ? start + Math.abs(start - end) * p * (start < end ? 1 : -1)\n : +end\n ).toFixed(2);\n }\n\n function covers(el) {\n var ref = el.style;\n var backgroundSize = ref.backgroundSize;\n var covers = css(css(el, 'backgroundSize', ''), 'backgroundSize') === 'cover';\n el.style.backgroundSize = backgroundSize;\n return covers;\n }\n\n var Parallax$1 = {\n\n mixins: [Parallax],\n\n props: {\n target: String,\n viewport: Number,\n easing: Number,\n },\n\n data: {\n target: false,\n viewport: 1,\n easing: 1,\n },\n\n computed: {\n\n target: function(ref, $el) {\n var target = ref.target;\n\n return target && query(target, $el) || $el;\n }\n\n },\n\n update: [\n\n {\n\n read: function(ref) {\n var percent = ref.percent;\n\n return {\n prev: percent,\n percent: ease$1(scrolledOver(this.target) / (this.viewport || 1), this.easing)\n };\n },\n\n write: function(ref, ref$1) {\n var prev = ref.prev;\n var percent = ref.percent;\n var active = ref.active;\n var type = ref$1.type;\n\n\n if (type !== 'scroll') {\n prev = false;\n }\n\n if (!active) {\n this.reset();\n return;\n }\n\n if (prev !== percent) {\n css(this.$el, this.getCss(percent));\n }\n\n },\n\n events: ['scroll', 'load', 'resize']\n }\n\n ]\n\n };\n\n function ease$1(percent, easing) {\n return clamp(percent * (1 - (easing - easing * percent)));\n }\n\n var SliderReactive = {\n\n update: [\n\n {\n\n write: function() {\n\n if (this.stack.length || this.dragging) {\n return;\n }\n\n var index$$1 = this.getValidIndex();\n delete this.index;\n removeClass(this.slides, this.clsActive, this.clsActivated);\n this.show(index$$1);\n\n },\n\n events: ['load', 'resize']\n\n }\n\n ]\n\n };\n\n function Transitioner$1 (prev, next, dir, ref) {\n var center = ref.center;\n var easing = ref.easing;\n var list = ref.list;\n\n\n var deferred = new Deferred();\n\n var from = prev\n ? getLeft(prev, list, center)\n : getLeft(next, list, center) + next.offsetWidth * dir;\n var to = next\n ? getLeft(next, list, center)\n : from + prev.offsetWidth * dir * (isRtl ? -1 : 1);\n\n return {\n\n dir: dir,\n\n show: function(duration, percent, linear) {\n if ( percent === void 0 ) percent = 0;\n\n\n var timing = linear ? 'linear' : easing;\n duration -= Math.round(duration * clamp(percent, -1, 1));\n\n this.translate(percent);\n\n prev && this.updateTranslates();\n percent = prev ? percent : clamp(percent, 0, 1);\n triggerUpdate$1(this.getItemIn(), 'itemin', {percent: percent, duration: duration, timing: timing, dir: dir});\n prev && triggerUpdate$1(this.getItemIn(true), 'itemout', {percent: 1 - percent, duration: duration, timing: timing, dir: dir});\n\n Transition\n .start(list, {transform: translate(-to * (isRtl ? -1 : 1), 'px')}, duration, timing)\n .then(deferred.resolve, noop);\n\n return deferred.promise;\n\n },\n\n stop: function() {\n return Transition.stop(list);\n },\n\n cancel: function() {\n Transition.cancel(list);\n },\n\n reset: function() {\n css(list, 'transform', '');\n },\n\n forward: function(duration, percent) {\n if ( percent === void 0 ) percent = this.percent();\n\n Transition.cancel(list);\n return this.show(duration, percent, true);\n },\n\n translate: function(percent) {\n\n var distance = this.getDistance() * dir * (isRtl ? -1 : 1);\n\n css(list, 'transform', translate(clamp(\n -to + (distance - distance * percent),\n -getWidth(list),\n list.offsetWidth\n ) * (isRtl ? -1 : 1), 'px'));\n\n this.updateTranslates();\n\n if (prev) {\n percent = clamp(percent, -1, 1);\n triggerUpdate$1(this.getItemIn(), 'itemtranslatein', {percent: percent, dir: dir});\n triggerUpdate$1(this.getItemIn(true), 'itemtranslateout', {percent: 1 - percent, dir: dir});\n }\n\n },\n\n percent: function() {\n return Math.abs((css(list, 'transform').split(',')[4] * (isRtl ? -1 : 1) + from) / (to - from));\n },\n\n getDistance: function() {\n return Math.abs(to - from);\n },\n\n getItemIn: function(out) {\n if ( out === void 0 ) out = false;\n\n\n var actives = this.getActives();\n var all = sortBy(slides(list), 'offsetLeft');\n var i = index(all, actives[dir * (out ? -1 : 1) > 0 ? actives.length - 1 : 0]);\n\n return ~i && all[i + (prev && !out ? dir : 0)];\n\n },\n\n getActives: function() {\n\n var left = getLeft(prev || next, list, center);\n\n return sortBy(slides(list).filter(function (slide) {\n var slideLeft = getElLeft(slide, list);\n return slideLeft >= left && slideLeft + slide.offsetWidth <= list.offsetWidth + left;\n }), 'offsetLeft');\n\n },\n\n updateTranslates: function() {\n\n var actives = this.getActives();\n\n slides(list).forEach(function (slide) {\n var isActive = includes(actives, slide);\n\n triggerUpdate$1(slide, (\"itemtranslate\" + (isActive ? 'in' : 'out')), {\n percent: isActive ? 1 : 0,\n dir: slide.offsetLeft <= next.offsetLeft ? 1 : -1\n });\n });\n }\n\n };\n\n }\n\n function getLeft(el, list, center) {\n\n var left = getElLeft(el, list);\n\n return center\n ? left - centerEl(el, list)\n : Math.min(left, getMax(list));\n\n }\n\n function getMax(list) {\n return Math.max(0, getWidth(list) - list.offsetWidth);\n }\n\n function getWidth(list) {\n return slides(list).reduce(function (right, el) { return el.offsetWidth + right; }, 0);\n }\n\n function getMaxWidth(list) {\n return slides(list).reduce(function (right, el) { return Math.max(right, el.offsetWidth); }, 0);\n }\n\n function centerEl(el, list) {\n return list.offsetWidth / 2 - el.offsetWidth / 2;\n }\n\n function getElLeft(el, list) {\n return (el.offsetLeft + (isRtl ? el.offsetWidth - list.offsetWidth : 0)) * (isRtl ? -1 : 1);\n }\n\n function triggerUpdate$1(el, type, data$$1) {\n trigger(el, createEvent(type, false, false, data$$1));\n }\n\n function slides(list) {\n return toNodes(list.children);\n }\n\n var Slider$1 = {\n\n mixins: [Class, Slider, SliderReactive],\n\n props: {\n center: Boolean,\n sets: Boolean,\n },\n\n data: {\n center: false,\n sets: false,\n attrItem: 'uk-slider-item',\n selList: '.uk-slider-items',\n selNav: '.uk-slider-nav',\n clsContainer: 'uk-slider-container',\n Transitioner: Transitioner$1\n },\n\n computed: {\n\n avgWidth: function() {\n return getWidth(this.list) / this.length;\n },\n\n finite: function(ref) {\n var finite = ref.finite;\n\n return finite || getWidth(this.list) < this.list.offsetWidth + getMaxWidth(this.list) + this.center;\n },\n\n maxIndex: function() {\n var this$1 = this;\n\n\n if (!this.finite || this.center && !this.sets) {\n return this.length - 1;\n }\n\n if (this.center) {\n return this.sets[this.sets.length - 1];\n }\n\n css(this.slides, 'order', '');\n\n var max = getMax(this.list);\n var i = this.length;\n\n while (i--) {\n if (getElLeft(this$1.list.children[i], this$1.list) < max) {\n return Math.min(i + 1, this$1.length - 1);\n }\n }\n\n return 0;\n },\n\n sets: function(ref) {\n var this$1 = this;\n var sets = ref.sets;\n\n\n var width$$1 = this.list.offsetWidth / (this.center ? 2 : 1);\n\n var left = 0;\n var leftCenter = width$$1;\n var slideLeft = 0;\n\n sets = sets && this.slides.reduce(function (sets, slide, i) {\n\n var ref = offset(slide);\n var slideWidth = ref.width;\n var slideRight = slideLeft + slideWidth;\n\n if (slideRight > left) {\n\n if (!this$1.center && i > this$1.maxIndex) {\n i = this$1.maxIndex;\n }\n\n if (!includes(sets, i)) {\n\n var cmp = this$1.slides[i + 1];\n if (this$1.center && cmp && slideWidth < leftCenter - offset(cmp).width / 2) {\n leftCenter -= slideWidth;\n } else {\n leftCenter = width$$1;\n sets.push(i);\n left = slideLeft + width$$1 + (this$1.center ? slideWidth / 2 : 0);\n }\n\n }\n }\n\n slideLeft += slideWidth;\n\n return sets;\n\n }, []);\n\n return sets && sets.length && sets;\n\n },\n\n transitionOptions: function() {\n return {\n center: this.center,\n list: this.list\n };\n }\n\n },\n\n connected: function() {\n toggleClass(this.$el, this.clsContainer, !$((\".\" + (this.clsContainer)), this.$el));\n },\n\n update: {\n\n write: function() {\n var this$1 = this;\n\n\n $$((\"[\" + (this.attrItem) + \"],[data-\" + (this.attrItem) + \"]\"), this.$el).forEach(function (el) {\n var index$$1 = data(el, this$1.attrItem);\n this$1.maxIndex && toggleClass(el, 'uk-hidden', isNumeric(index$$1) && (this$1.sets && !includes(this$1.sets, toFloat(index$$1)) || index$$1 > this$1.maxIndex));\n });\n\n },\n\n events: ['load', 'resize']\n\n },\n\n events: {\n\n beforeitemshow: function(e) {\n var this$1 = this;\n\n\n if (!this.dragging && this.sets && this.stack.length < 2 && !includes(this.sets, this.index)) {\n this.index = this.getValidIndex();\n }\n\n var diff = Math.abs(\n this.index\n - this.prevIndex\n + (this.dir > 0 && this.index < this.prevIndex || this.dir < 0 && this.index > this.prevIndex ? (this.maxIndex + 1) * this.dir : 0)\n );\n\n if (!this.dragging && diff > 1) {\n\n for (var i = 0; i < diff; i++) {\n this$1.stack.splice(1, 0, this$1.dir > 0 ? 'next' : 'previous');\n }\n\n e.preventDefault();\n return;\n }\n\n this.duration = speedUp(this.avgWidth / this.velocity)\n * ((\n this.dir < 0 || !this.slides[this.prevIndex]\n ? this.slides[this.index]\n : this.slides[this.prevIndex]\n ).offsetWidth / this.avgWidth);\n\n this.reorder();\n\n },\n\n itemshow: function() {\n !isUndefined(this.prevIndex) && addClass(this._getTransitioner().getItemIn(), this.clsActive);\n },\n\n itemshown: function() {\n var this$1 = this;\n\n var actives = this._getTransitioner(this.index).getActives();\n this.slides.forEach(function (slide) { return toggleClass(slide, this$1.clsActive, includes(actives, slide)); });\n (!this.sets || includes(this.sets, toFloat(this.index))) && this.slides.forEach(function (slide) { return toggleClass(slide, this$1.clsActivated, includes(actives, slide)); });\n }\n\n },\n\n methods: {\n\n reorder: function() {\n var this$1 = this;\n\n\n css(this.slides, 'order', '');\n\n if (this.finite) {\n return;\n }\n\n var index$$1 = this.dir > 0 && this.slides[this.prevIndex] ? this.prevIndex : this.index;\n\n this.slides.forEach(function (slide, i) { return css(slide, 'order', this$1.dir > 0 && i < index$$1\n ? 1\n : this$1.dir < 0 && i >= this$1.index\n ? -1\n : ''\n ); }\n );\n\n if (!this.center) {\n return;\n }\n\n var next = this.slides[index$$1];\n var width$$1 = this.list.offsetWidth / 2 - next.offsetWidth / 2;\n var j = 0;\n\n while (width$$1 > 0) {\n var slideIndex = this$1.getIndex(--j + index$$1, index$$1);\n var slide = this$1.slides[slideIndex];\n\n css(slide, 'order', slideIndex > index$$1 ? -2 : -1);\n width$$1 -= slide.offsetWidth;\n }\n\n },\n\n getValidIndex: function(index$$1, prevIndex) {\n var this$1 = this;\n if ( index$$1 === void 0 ) index$$1 = this.index;\n if ( prevIndex === void 0 ) prevIndex = this.prevIndex;\n\n\n index$$1 = this.getIndex(index$$1, prevIndex);\n\n if (!this.sets) {\n return index$$1;\n }\n\n var prev;\n\n do {\n\n if (includes(this$1.sets, index$$1)) {\n return index$$1;\n }\n\n prev = index$$1;\n index$$1 = this$1.getIndex(index$$1 + this$1.dir, prevIndex);\n\n } while (index$$1 !== prev);\n\n return index$$1;\n }\n\n }\n\n };\n\n var SliderParallax = {\n\n mixins: [Parallax],\n\n data: {\n selItem: '!li'\n },\n\n computed: {\n\n item: function(ref, $el) {\n var selItem = ref.selItem;\n\n return query(selItem, $el);\n }\n\n },\n\n events: [\n\n {\n\n name: 'itemshown',\n\n self: true,\n\n el: function() {\n return this.item;\n },\n\n handler: function() {\n css(this.$el, this.getCss(.5));\n }\n\n },\n\n {\n name: 'itemin itemout',\n\n self: true,\n\n el: function() {\n return this.item;\n },\n\n handler: function(ref) {\n var type = ref.type;\n var ref_detail = ref.detail;\n var percent = ref_detail.percent;\n var duration = ref_detail.duration;\n var timing = ref_detail.timing;\n var dir = ref_detail.dir;\n\n\n Transition.cancel(this.$el);\n css(this.$el, this.getCss(getCurrent(type, dir, percent)));\n\n Transition.start(this.$el, this.getCss(isIn(type)\n ? .5\n : dir > 0\n ? 1\n : 0\n ), duration, timing).catch(noop);\n\n }\n },\n\n {\n name: 'transitioncanceled transitionend',\n\n self: true,\n\n el: function() {\n return this.item;\n },\n\n handler: function() {\n Transition.cancel(this.$el);\n }\n\n },\n\n {\n name: 'itemtranslatein itemtranslateout',\n\n self: true,\n\n el: function() {\n return this.item;\n },\n\n handler: function(ref) {\n var type = ref.type;\n var ref_detail = ref.detail;\n var percent = ref_detail.percent;\n var dir = ref_detail.dir;\n\n Transition.cancel(this.$el);\n css(this.$el, this.getCss(getCurrent(type, dir, percent)));\n }\n }\n\n ]\n\n };\n\n function isIn(type) {\n return endsWith(type, 'in');\n }\n\n function getCurrent(type, dir, percent) {\n\n percent /= 2;\n\n return !isIn(type)\n ? dir < 0\n ? percent\n : 1 - percent\n : dir < 0\n ? 1 - percent\n : percent;\n }\n\n var Animations$2 = assign({}, Animations, {\n\n fade: {\n\n show: function() {\n return [\n {opacity: 0, zIndex: 0},\n {zIndex: -1}\n ];\n },\n\n percent: function(current) {\n return 1 - css(current, 'opacity');\n },\n\n translate: function(percent) {\n return [\n {opacity: 1 - percent, zIndex: 0},\n {zIndex: -1}\n ];\n }\n\n },\n\n scale: {\n\n show: function() {\n return [\n {opacity: 0, transform: scale3d(1 + .5), zIndex: 0},\n {zIndex: -1}\n ];\n },\n\n percent: function(current) {\n return 1 - css(current, 'opacity');\n },\n\n translate: function(percent) {\n return [\n {opacity: 1 - percent, transform: scale3d(1 + .5 * percent), zIndex: 0},\n {zIndex: -1}\n ];\n }\n\n },\n\n pull: {\n\n show: function(dir) {\n return dir < 0\n ? [\n {transform: translate(30), zIndex: -1},\n {transform: translate(), zIndex: 0} ]\n : [\n {transform: translate(-100), zIndex: 0},\n {transform: translate(), zIndex: -1}\n ];\n },\n\n percent: function(current, next, dir) {\n return dir < 0\n ? 1 - translated(next)\n : translated(current);\n },\n\n translate: function(percent, dir) {\n return dir < 0\n ? [\n {transform: translate(30 * percent), zIndex: -1},\n {transform: translate(-100 * (1 - percent)), zIndex: 0} ]\n : [\n {transform: translate(-percent * 100), zIndex: 0},\n {transform: translate(30 * (1 - percent)), zIndex: -1}\n ];\n }\n\n },\n\n push: {\n\n show: function(dir) {\n return dir < 0\n ? [\n {transform: translate(100), zIndex: 0},\n {transform: translate(), zIndex: -1} ]\n : [\n {transform: translate(-30), zIndex: -1},\n {transform: translate(), zIndex: 0}\n ];\n },\n\n percent: function(current, next, dir) {\n return dir > 0\n ? 1 - translated(next)\n : translated(current);\n },\n\n translate: function(percent, dir) {\n return dir < 0\n ? [\n {transform: translate(percent * 100), zIndex: 0},\n {transform: translate(-30 * (1 - percent)), zIndex: -1} ]\n : [\n {transform: translate(-30 * percent), zIndex: -1},\n {transform: translate(100 * (1 - percent)), zIndex: 0}\n ];\n }\n\n }\n\n });\n\n var Slideshow$1 = {\n\n mixins: [Class, Slideshow, SliderReactive],\n\n props: {\n ratio: String,\n minHeight: Boolean,\n maxHeight: Boolean,\n },\n\n data: {\n ratio: '16:9',\n minHeight: false,\n maxHeight: false,\n selList: '.uk-slideshow-items',\n attrItem: 'uk-slideshow-item',\n selNav: '.uk-slideshow-nav',\n Animations: Animations$2\n },\n\n update: {\n\n read: function() {\n\n var ref = this.ratio.split(':').map(Number);\n var width$$1 = ref[0];\n var height$$1 = ref[1];\n\n height$$1 = height$$1 * this.$el.offsetWidth / width$$1;\n\n if (this.minHeight) {\n height$$1 = Math.max(this.minHeight, height$$1);\n }\n\n if (this.maxHeight) {\n height$$1 = Math.min(this.maxHeight, height$$1);\n }\n\n return {height: height$$1};\n },\n\n write: function(ref) {\n var hgt = ref.height;\n\n height(this.list, Math.floor(hgt));\n },\n\n events: ['load', 'resize']\n\n }\n\n };\n\n var obj$1;\n\n var Sortable = {\n\n mixins: [Class, Animate],\n\n props: {\n group: String,\n threshold: Number,\n clsItem: String,\n clsPlaceholder: String,\n clsDrag: String,\n clsDragState: String,\n clsBase: String,\n clsNoDrag: String,\n clsEmpty: String,\n clsCustom: String,\n handle: String\n },\n\n data: {\n group: false,\n threshold: 5,\n clsItem: 'uk-sortable-item',\n clsPlaceholder: 'uk-sortable-placeholder',\n clsDrag: 'uk-sortable-drag',\n clsDragState: 'uk-drag',\n clsBase: 'uk-sortable',\n clsNoDrag: 'uk-sortable-nodrag',\n clsEmpty: 'uk-sortable-empty',\n clsCustom: '',\n handle: false\n },\n\n init: function() {\n var this$1 = this;\n\n ['init', 'start', 'move', 'end'].forEach(function (key) {\n var fn = this$1[key];\n this$1[key] = function (e) {\n this$1.scrollY = window.pageYOffset;\n var ref = getPos$1(e);\n var x = ref.x;\n var y = ref.y;\n this$1.pos = {x: x, y: y};\n\n fn(e);\n };\n });\n },\n\n events: ( obj$1 = {}, obj$1[pointerDown] = 'init', obj$1 ),\n\n update: {\n\n write: function() {\n\n if (this.clsEmpty) {\n toggleClass(this.$el, this.clsEmpty, !this.$el.children.length);\n }\n\n if (!this.drag) {\n return;\n }\n\n offset(this.drag, {top: this.pos.y + this.origin.top, left: this.pos.x + this.origin.left});\n\n var ref = offset(this.drag);\n var top = ref.top;\n var bottom = top + this.drag.offsetHeight;\n var scroll;\n\n if (top > 0 && top < this.scrollY) {\n scroll = this.scrollY - 5;\n } else if (bottom < height(document) && bottom > height(window) + this.scrollY) {\n scroll = this.scrollY + 5;\n }\n\n scroll && setTimeout(function () { return window.scroll(window.pageXOffset, scroll); }, 5);\n }\n\n },\n\n methods: {\n\n init: function(e) {\n\n var target = e.target;\n var button = e.button;\n var defaultPrevented = e.defaultPrevented;\n var ref = toNodes(this.$el.children).filter(function (el) { return within(target, el); });\n var placeholder = ref[0];\n\n if (!placeholder\n || isInput(e.target)\n || this.handle && !within(target, this.handle)\n || button > 0\n || within(target, (\".\" + (this.clsNoDrag)))\n || defaultPrevented\n ) {\n return;\n }\n\n e.preventDefault();\n\n this.touched = [this];\n this.placeholder = placeholder;\n this.origin = assign({target: target, index: index(placeholder)}, this.pos);\n\n on(document, pointerMove, this.move);\n on(document, pointerUp, this.end);\n on(window, 'scroll', this.scroll);\n\n if (!this.threshold) {\n this.start(e);\n }\n\n },\n\n start: function(e) {\n\n this.drag = append(this.$container, this.placeholder.outerHTML.replace(/^<li/i, '<div').replace(/li>$/i, 'div>'));\n\n css(this.drag, assign({\n boxSizing: 'border-box',\n width: this.placeholder.offsetWidth,\n height: this.placeholder.offsetHeight\n }, css(this.placeholder, ['paddingLeft', 'paddingRight', 'paddingTop', 'paddingBottom'])));\n attr(this.drag, 'uk-no-boot', '');\n addClass(this.drag, this.clsDrag, this.clsCustom);\n\n height(this.drag.firstElementChild, height(this.placeholder.firstElementChild));\n\n var ref = offset(this.placeholder);\n var left = ref.left;\n var top = ref.top;\n assign(this.origin, {left: left - this.pos.x, top: top - this.pos.y});\n\n addClass(this.placeholder, this.clsPlaceholder);\n addClass(this.$el.children, this.clsItem);\n addClass(document.documentElement, this.clsDragState);\n\n trigger(this.$el, 'start', [this, this.placeholder]);\n\n this.move(e);\n },\n\n move: function(e) {\n\n if (!this.drag) {\n\n if (Math.abs(this.pos.x - this.origin.x) > this.threshold || Math.abs(this.pos.y - this.origin.y) > this.threshold) {\n this.start(e);\n }\n\n return;\n }\n\n this.$emit();\n\n var target = e.type === 'mousemove' ? e.target : document.elementFromPoint(this.pos.x - document.body.scrollLeft, this.pos.y - document.body.scrollTop);\n\n var sortable = this.getSortable(target);\n var previous = this.getSortable(this.placeholder);\n var move = sortable !== previous;\n\n if (!sortable || within(target, this.placeholder) || move && (!sortable.group || sortable.group !== previous.group)) {\n return;\n }\n\n target = sortable.$el === target.parentNode && target || toNodes(sortable.$el.children).filter(function (element) { return within(target, element); })[0];\n\n if (move) {\n previous.remove(this.placeholder);\n } else if (!target) {\n return;\n }\n\n sortable.insert(this.placeholder, target);\n\n if (!includes(this.touched, sortable)) {\n this.touched.push(sortable);\n }\n\n },\n\n scroll: function() {\n var scroll = window.pageYOffset;\n if (scroll !== this.scrollY) {\n this.pos.y += scroll - this.scrollY;\n this.scrollY = scroll;\n this.$emit();\n }\n },\n\n end: function(e) {\n\n off(document, pointerMove, this.move);\n off(document, pointerUp, this.end);\n off(window, 'scroll', this.scroll);\n\n if (!this.drag) {\n\n if (e.type !== 'mouseup' && within(e.target, 'a[href]')) {\n location.href = closest(e.target, 'a[href]').href;\n }\n\n return;\n }\n\n preventClick();\n\n var sortable = this.getSortable(this.placeholder);\n\n if (this === sortable) {\n if (this.origin.index !== index(this.placeholder)) {\n trigger(this.$el, 'moved', [this, this.placeholder]);\n }\n } else {\n trigger(sortable.$el, 'added', [sortable, this.placeholder]);\n trigger(this.$el, 'removed', [this, this.placeholder]);\n }\n\n trigger(this.$el, 'stop', [this, this.placeholder]);\n\n remove(this.drag);\n this.drag = null;\n\n var classes = this.touched.map(function (sortable) { return ((sortable.clsPlaceholder) + \" \" + (sortable.clsItem)); }).join(' ');\n this.touched.forEach(function (sortable) { return removeClass(sortable.$el.children, classes); });\n\n removeClass(document.documentElement, this.clsDragState);\n\n },\n\n insert: function(element, target) {\n var this$1 = this;\n\n\n addClass(this.$el.children, this.clsItem);\n\n var insert = function () {\n\n if (target) {\n\n if (!within(element, this$1.$el) || isPredecessor(element, target)) {\n before(target, element);\n } else {\n after(target, element);\n }\n\n } else {\n append(this$1.$el, element);\n }\n\n };\n\n if (this.animation) {\n this.animate(insert);\n } else {\n insert();\n }\n\n },\n\n remove: function(element) {\n\n if (!within(element, this.$el)) {\n return;\n }\n\n if (this.animation) {\n this.animate(function () { return remove(element); });\n } else {\n remove(element);\n }\n\n },\n\n getSortable: function(element) {\n return element && (this.$getComponent(element, 'sortable') || this.getSortable(element.parentNode));\n }\n\n }\n\n };\n\n function isPredecessor(element, target) {\n return element.parentNode === target.parentNode && index(element) > index(target);\n }\n\n var obj$2;\n\n var actives = [];\n\n var Tooltip = {\n\n attrs: true,\n\n args: 'title',\n\n mixins: [Container, Togglable, Position],\n\n props: {\n delay: Number,\n title: String\n },\n\n data: {\n pos: 'top',\n title: '',\n delay: 0,\n animation: ['uk-animation-scale-up'],\n duration: 100,\n cls: 'uk-active',\n clsPos: 'uk-tooltip'\n },\n\n beforeConnect: function() {\n this._hasTitle = hasAttr(this.$el, 'title');\n attr(this.$el, {title: '', 'aria-expanded': false});\n },\n\n disconnected: function() {\n this.hide();\n attr(this.$el, {title: this._hasTitle ? this.title : null, 'aria-expanded': null});\n },\n\n methods: {\n\n show: function() {\n var this$1 = this;\n\n\n if (includes(actives, this)) {\n return;\n }\n\n actives.forEach(function (active) { return active.hide(); });\n actives.push(this);\n\n this._unbind = on(document, 'click', function (e) { return !within(e.target, this$1.$el) && this$1.hide(); });\n\n clearTimeout(this.showTimer);\n\n this.tooltip = append(this.container, (\"<div class=\\\"\" + (this.clsPos) + \"\\\" aria-hidden><div class=\\\"\" + (this.clsPos) + \"-inner\\\">\" + (this.title) + \"</div></div>\"));\n\n attr(this.$el, 'aria-expanded', true);\n\n this.positionAt(this.tooltip, this.$el);\n\n this.origin = this.getAxis() === 'y' ? ((flipPosition(this.dir)) + \"-\" + (this.align)) : ((this.align) + \"-\" + (flipPosition(this.dir)));\n\n this.showTimer = setTimeout(function () {\n\n this$1.toggleElement(this$1.tooltip, true);\n\n this$1.hideTimer = setInterval(function () {\n\n if (!isVisible(this$1.$el)) {\n this$1.hide();\n }\n\n }, 150);\n\n }, this.delay);\n },\n\n hide: function() {\n\n var index$$1 = actives.indexOf(this);\n\n if (!~index$$1 || matches(this.$el, 'input') && this.$el === document.activeElement) {\n return;\n }\n\n actives.splice(index$$1, 1);\n\n clearTimeout(this.showTimer);\n clearInterval(this.hideTimer);\n attr(this.$el, 'aria-expanded', false);\n this.toggleElement(this.tooltip, false);\n this.tooltip && remove(this.tooltip);\n this.tooltip = false;\n this._unbind();\n\n }\n\n },\n\n events: ( obj$2 = {}, obj$2[(\"focus \" + pointerEnter + \" \" + pointerDown)] = function (e) {\n if (e.type !== pointerDown || !isTouch(e)) {\n this.show();\n }\n }, obj$2.blur = 'hide', obj$2[pointerLeave] = function (e) {\n if (!isTouch(e)) {\n this.hide();\n }\n }, obj$2 )\n\n };\n\n var Upload = {\n\n props: {\n allow: String,\n clsDragover: String,\n concurrent: Number,\n maxSize: Number,\n method: String,\n mime: String,\n msgInvalidMime: String,\n msgInvalidName: String,\n msgInvalidSize: String,\n multiple: Boolean,\n name: String,\n params: Object,\n type: String,\n url: String,\n },\n\n data: {\n allow: false,\n clsDragover: 'uk-dragover',\n concurrent: 1,\n maxSize: 0,\n method: 'POST',\n mime: false,\n msgInvalidMime: 'Invalid File Type: %s',\n msgInvalidName: 'Invalid File Name: %s',\n msgInvalidSize: 'Invalid File Size: %s Kilobytes Max',\n multiple: false,\n name: 'files[]',\n params: {},\n type: '',\n url: '',\n abort: noop,\n beforeAll: noop,\n beforeSend: noop,\n complete: noop,\n completeAll: noop,\n error: noop,\n fail: noop,\n load: noop,\n loadEnd: noop,\n loadStart: noop,\n progress: noop\n },\n\n events: {\n\n change: function(e) {\n\n if (!matches(e.target, 'input[type=\"file\"]')) {\n return;\n }\n\n e.preventDefault();\n\n if (e.target.files) {\n this.upload(e.target.files);\n }\n\n e.target.value = '';\n },\n\n drop: function(e) {\n stop(e);\n\n var transfer = e.dataTransfer;\n\n if (!transfer || !transfer.files) {\n return;\n }\n\n removeClass(this.$el, this.clsDragover);\n\n this.upload(transfer.files);\n },\n\n dragenter: function(e) {\n stop(e);\n },\n\n dragover: function(e) {\n stop(e);\n addClass(this.$el, this.clsDragover);\n },\n\n dragleave: function(e) {\n stop(e);\n removeClass(this.$el, this.clsDragover);\n }\n\n },\n\n methods: {\n\n upload: function(files) {\n var this$1 = this;\n\n\n if (!files.length) {\n return;\n }\n\n trigger(this.$el, 'upload', [files]);\n\n for (var i = 0; i < files.length; i++) {\n\n if (this$1.maxSize && this$1.maxSize * 1000 < files[i].size) {\n this$1.fail(this$1.msgInvalidSize.replace('%s', this$1.maxSize));\n return;\n }\n\n if (this$1.allow && !match(this$1.allow, files[i].name)) {\n this$1.fail(this$1.msgInvalidName.replace('%s', this$1.allow));\n return;\n }\n\n if (this$1.mime && !match(this$1.mime, files[i].type)) {\n this$1.fail(this$1.msgInvalidMime.replace('%s', this$1.mime));\n return;\n }\n\n }\n\n if (!this.multiple) {\n files = [files[0]];\n }\n\n this.beforeAll(this, files);\n\n var chunks = chunk(files, this.concurrent);\n var upload = function (files) {\n\n var data$$1 = new FormData();\n\n files.forEach(function (file) { return data$$1.append(this$1.name, file); });\n\n for (var key in this$1.params) {\n data$$1.append(key, this$1.params[key]);\n }\n\n ajax(this$1.url, {\n data: data$$1,\n method: this$1.method,\n responseType: this$1.type,\n beforeSend: function (env) {\n\n var xhr = env.xhr;\n xhr.upload && on(xhr.upload, 'progress', this$1.progress);\n ['loadStart', 'load', 'loadEnd', 'abort'].forEach(function (type) { return on(xhr, type.toLowerCase(), this$1[type]); }\n );\n\n this$1.beforeSend(env);\n\n }\n }).then(\n function (xhr) {\n\n this$1.complete(xhr);\n\n if (chunks.length) {\n upload(chunks.shift());\n } else {\n this$1.completeAll(xhr);\n }\n\n },\n function (e) { return this$1.error(e.message); }\n );\n\n };\n\n upload(chunks.shift());\n\n }\n\n }\n\n };\n\n function match(pattern, path) {\n return path.match(new RegExp((\"^\" + (pattern.replace(/\\//g, '\\\\/').replace(/\\*\\*/g, '(\\\\/[^\\\\/]+)*').replace(/\\*/g, '[^\\\\/]+').replace(/((?!\\\\))\\?/g, '$1.')) + \"$\"), 'i'));\n }\n\n function chunk(files, size) {\n var chunks = [];\n for (var i = 0; i < files.length; i += size) {\n var chunk = [];\n for (var j = 0; j < size; j++) {\n chunk.push(files[i + j]);\n }\n chunks.push(chunk);\n }\n return chunks;\n }\n\n function stop(e) {\n e.preventDefault();\n e.stopPropagation();\n }\n\n UIkit.component('countdown', Countdown);\n UIkit.component('filter', Filter);\n UIkit.component('lightbox', Lightbox);\n UIkit.component('lightboxPanel', LightboxPanel);\n UIkit.component('notification', Notification);\n UIkit.component('parallax', Parallax$1);\n UIkit.component('slider', Slider$1);\n UIkit.component('sliderParallax', SliderParallax);\n UIkit.component('slideshow', Slideshow$1);\n UIkit.component('slideshowParallax', SliderParallax);\n UIkit.component('sortable', Sortable);\n UIkit.component('tooltip', Tooltip);\n UIkit.component('upload', Upload);\n\n {\n boot(UIkit);\n }\n\n return UIkit;\n\n})));\n","\"use strict\";\n\n(function(){ // Use a closure to avoid polluting global scope\n // TODO: This needs to be built into the jams system\n const startjam = new Date(Date.UTC(2018, 2, 23));\n const endjam = new Date(Date.UTC(2018, 2, 26));\n\n const now = Date.now();\n let goal;\n\n if (now + 1000 < endjam.getTime()) { // Only do anything if the jam hasn't ended\n UIkit.notification( // Spawn the notification\n {\n \"message\": \"\"\n + \"<div class='uk-text-center'>\"\n + \" <span id=\\\"countdown-title\\\" class=\\\"uk-text-center\\\">\"\n + \" <a href=\\\"/info/jams\\\">Code Jam</a> Countdown\"\n + \" </span>\"\n + \" <p class='uk-text-large' id=\\\"countdown-remaining\\\">...</p>\"\n + \"<small style='font-size: 0.6em;'>(Tap/click to dismiss)</small>\"\n + \"</div>\",\n \"pos\": \"bottom-right\",\n \"timeout\": endjam - now\n }\n );\n\n const heading = document.getElementById(\"countdown-title\");\n\n if (now > startjam.getTime()) { // Jam's already started\n heading.innerHTML = \"Current <a href=\\\"/info/jams\\\">code jam</a> ends in...\";\n goal = endjam.getTime();\n } else {\n heading.innerHTML = \"Next <a href=\\\"/info/jams\\\">code jam</a> starts in...\";\n goal = startjam.getTime();\n }\n\n const refreshCountdown = setInterval(() => { // Create a repeating task\n let delta = goal - Date.now(); // Time until the goal is met\n\n if (delta <= 1000) { // Goal has been met, best reload\n clearInterval(refreshCountdown);\n return location.reload();\n }\n\n let days = Math.floor(delta / (24 * 60 * 60 * 1000));\n delta -= days * (24 * 60 * 60 * 1000);\n\n let hours = Math.floor(delta / (60 * 60 * 1000));\n delta -= hours * (60 * 60 * 1000);\n\n let minutes = Math.floor(delta / (60 * 1000));\n delta -= minutes * (60 * 1000);\n\n let seconds = Math.floor(delta / 1000);\n\n if (days < 10) {\n days = `0${days}`;\n }\n\n if (hours < 10) {\n hours = `0${hours}`;\n }\n\n if (minutes < 10) {\n minutes = `0${minutes}`;\n }\n\n if (seconds < 10) {\n seconds = `0${seconds}`;\n }\n\n try {\n document.getElementById(\"countdown-remaining\").innerHTML = `${days}:${hours}:${minutes}:${seconds}`;\n } catch (e) { // Notification was probably closed, so we can stop counting\n return clearInterval(refreshCountdown);\n }\n }, 500);\n }\n})();\n","\"use strict\";\n\n/* exported JamActions */\n\nclass JamActions {\n constructor(url, csrf_token) {\n this.url = url;\n this.csrf_token = csrf_token;\n }\n\n send(action, method, data, callback) {\n data[\"action\"] = action;\n\n $.ajax(this.url, {\n \"data\": data,\n \"dataType\": \"json\",\n \"headers\": {\"X-CSRFToken\": this.csrf_token},\n \"method\": method,\n }).done(data => {\n if (\"error_code\" in data) {\n return callback(false, data);\n }\n\n return callback(true, data);\n }).fail(() => callback(false));\n }\n\n send_json(action, method, data, callback) {\n data[\"action\"] = action;\n\n $.ajax(this.url, {\n \"data\": JSON.stringify(data),\n \"dataType\": \"json\",\n \"headers\": {\"X-CSRFToken\": this.csrf_token},\n \"method\": method\n }).done(data => {\n if (\"error_code\" in data) {\n return callback(false, data);\n }\n\n return callback(true, data);\n }).fail(() => callback(false));\n }\n\n set_state(jam, state, callback) {\n this.send(\n \"state\",\n \"POST\",\n {\n \"jam\": jam,\n \"state\": state\n },\n callback\n );\n }\n\n get_questions(callback) {\n this.send(\n \"questions\",\n \"GET\",\n {},\n callback\n );\n }\n\n create_question(data, callback) {\n this.send_json(\n \"questions\",\n \"POST\",\n data,\n callback\n );\n }\n\n delete_question(id, callback) {\n this.send(\n \"question\",\n \"DELETE\",\n {\"id\": id},\n callback\n );\n }\n\n associate_question(form, question, callback) {\n this.send(\n \"associate_question\",\n \"POST\",\n {\n \"form\": form,\n \"question\": question,\n },\n callback\n );\n }\n\n disassociate_question(form, question, callback) {\n this.send(\n \"disassociate_question\",\n \"POST\",\n {\n \"form\": form,\n \"question\": question,\n },\n callback\n );\n }\n\n create_infraction(id, reason, number, callback) {\n this.send(\n \"infraction\",\n \"POST\",\n {\n \"participant\": id,\n \"reason\": reason,\n \"number\": number\n },\n callback\n );\n }\n\n delete_infraction(id, callback) {\n this.send(\n \"infraction\",\n \"DELETE\",\n {\"id\": id},\n callback\n );\n }\n\n approve_application(id, callback) {\n this.send(\n \"approve_application\",\n \"POST\",\n {\"id\": id},\n callback\n );\n }\n\n unapprove_application(id, callback) {\n this.send(\n \"unapprove_application\",\n \"POST\",\n {\"id\": id},\n callback\n );\n }\n}\n","\"use strict\";\n\n/* exported revision_diff */\n\nfunction revision_diff(revisions) {\n const buttons = document.querySelectorAll(\"td input\"); // Fetch all radio buttons\n const id_reg = /compare-(before|after)-([\\w|-]+)/; // Matches compare-after/before-ID\n\n\n function getRevisionId(element){\n const e = element.id.match(id_reg); // Match ID with RegExp\n return [e[1], e[2]]; // e is in format of [full id, after/before, ID] we only want ID & mode\n }\n\n function getRevision(id) {\n const e = revisions.filter((x) => {\n // Filter through all revisions to find the selected one (revisions in declared in the template)\n return x.id === id;\n });\n return e[0];\n }\n\n function radioButtonChecked(element) {\n const id = getRevisionId(element);\n const rev = getRevision(id[1]);\n if (id[0] === \"after\"){\n /*\n * Deselect the opposite checkbox to the one which has been checked\n * because we don't want checking of the same revision\n */\n\n document.querySelector(`#compare-before-${id[1]}`).checked = false;\n\n buttons.forEach((e) => {\n if (getRevisionId(e)[0] === \"after\" && e.id !== element.id) { // Deselect all checkboxes in the same row\n e.checked = false;\n }\n });\n } else { // This else does the same as above but for the before column\n document.querySelector(`#compare-after-${id[1]}`).checked = false;\n buttons.forEach((e) => {\n if (getRevisionId(e)[0] === \"before\" && e.id !== element.id) {\n e.checked = false;\n }\n\n // This makes sure that you do not compare a new revision with an old one\n if (getRevisionId(e)[0] === \"after\") {\n const tmprev = getRevision(getRevisionId(e)[1]);\n // console.log(tmprev);\n if (tmprev.date <= rev.date) {\n document.querySelector(`#${e.id}`).setAttribute(\"disabled\", \"\");\n } else {\n document.querySelector(`#${e.id}`).removeAttribute(\"disabled\");\n }\n }\n });\n }\n\n let aft, bef;\n\n buttons.forEach((button) => { // Find the selected posts\n const id = getRevisionId(button);\n if (button.checked && id[0] === \"before\") {\n bef = id[1];\n }\n\n if (button.checked && id[0] === \"after\") {\n aft = id[1];\n }\n });\n\n // Switch the buttons HREF to point to the correct compare URL\n document.getElementById(\"compare-submit\").href = `/history/compare/${bef}/${aft}`;\n\n }\n\n buttons.forEach((button) => {\n button.checked = false; // Some browsers remember if a button is checked.\n button.onchange = function() {\n radioButtonChecked(button);\n };\n });\n}\n","\"use strict\";\n\n(function(){ // Use a closure to avoid polluting global scope\n const visible_class = \"uk-visible@s\";\n const sidebar = document.getElementById(\"wiki-sidebar\");\n const display_button = document.getElementById(\"wiki-sidebar-button\");\n\n display_button.onclick = function() {\n if (sidebar.classList.contains(visible_class)) {\n sidebar.classList.remove(visible_class);\n } else {\n sidebar.classList.add(visible_class);\n }\n };\n})();\n"]}
\ No newline at end of file diff --git a/static/logos/logo_banner.png b/static/logos/logo_banner.png Binary files differdeleted file mode 100644 index 89aa9b5a..00000000 --- a/static/logos/logo_banner.png +++ /dev/null diff --git a/static/logos/logo_banner.svg b/static/logos/logo_banner.svg deleted file mode 100644 index ac04d699..00000000 --- a/static/logos/logo_banner.svg +++ /dev/null @@ -1,55 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<svg width="539.62mm" height="188.69mm" version="1.1" viewBox="0 0 539.62 188.69" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> - <metadata> - <rdf:RDF> - <cc:Work rdf:about=""> - <dc:format>image/svg+xml</dc:format> - <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/> - <dc:title/> - </cc:Work> - </rdf:RDF> - </metadata> - <g fill="#7289da"> - <path class="st0" d="m145.76-3.5399e-7h-126.42c-10.661 0-19.341 8.6798-19.341 19.435v127.56c0 10.755 8.6798 19.435 19.341 19.435h106.99l-5.0003-17.454 12.076 11.227 11.416 10.567 20.284 17.926v-169.26c0-10.755-8.6799-19.435-19.341-19.435zm-36.418 123.22s-3.3965-4.0569-6.2268-7.642c12.359-3.4908 17.077-11.227 17.077-11.227-3.8682 2.5473-7.5477 4.3399-10.85 5.5664-4.7173 1.9812-9.2459 3.3021-13.68 4.0569-9.0572 1.6983-17.36 1.2265-24.436-0.0942-5.3777-1.0378-10.001-2.5474-13.869-4.0569-2.17-0.8491-4.5286-1.8869-6.8872-3.2078-0.28292-0.18904-0.56583-0.28292-0.84907-0.47196-0.18904-0.0945-0.28292-0.18903-0.37744-0.28291-1.6983-0.94346-2.6417-1.6039-2.6417-1.6039s4.5286 7.5477 16.511 11.133c-2.8303 3.5853-6.3212 7.8308-6.3212 7.8308-20.851-0.65959-28.776-14.34-28.776-14.34 0-30.379 13.586-55.004 13.586-55.004 13.586-10.189 26.511-9.9063 26.511-9.9063l0.94346 1.1322c-16.982 4.906-24.813 12.359-24.813 12.359s2.0756-1.1321 5.5664-2.7361c10.095-4.4343 18.114-5.6608 21.417-5.9438 0.56583-0.09452 1.0378-0.18904 1.6039-0.18904 5.7551-0.75474 12.265-0.94346 19.058-0.18904 8.9628 1.0378 18.586 3.6795 28.398 9.0572 0 0-7.4533-7.0759-23.492-11.982l1.3207-1.5095s12.925-0.28292 26.511 9.9063c0 0 13.586 24.624 13.586 55.004 0 0-8.0194 13.68-28.87 14.341z" stroke-width=".94346"/> - <path d="m154.42 178.89c-5.574-4.9347-15.262-13.738-21.528-19.563-6.2662-5.8252-11.484-10.501-11.595-10.39-0.11152 0.11152 0.87562 3.9535 2.1919 8.5392 1.3163 4.5858 2.3934 8.4694 2.3934 8.6303 0 0.56284-105.75 0.30516-109.27-0.26631-1.8664-0.3028-4.5072-1.115-5.8685-1.8048-3.5244-1.7859-7.6491-6.3569-9.1906-10.185l-1.2833-3.1869v-134.95l1.2869-3.2004c1.774-4.4122 6.6384-9.2677 10.868-10.848l3.0871-1.1535h66.825c57.549 0 67.19 0.10983 69.456 0.79174 3.4099 1.0263 7.5126 4.1657 9.7027 7.4244 3.5515 5.2843 3.3463-0.72307 3.1974 93.602l-0.13518 85.532zm-94.054-59.59 3.0253-3.8413-2.2252-0.9655c-4.5105-1.9571-6.7523-3.2408-9.6997-5.5541-1.6597-1.3026-2.9147-2.4714-2.7888-2.5973 0.12504-0.12588 2.4866 0.83897 5.2461 2.1441 19.104 9.0354 41.671 8.8487 60.231-0.49818 2.11-1.0626 3.9427-1.8257 4.0727-1.6957 0.87612 0.87616-12.37 8.9-14.693 8.9-0.9618 0-0.72828 0.41699 2.4056 4.2957 2.9306 3.6271 3.046 3.7052 5.4674 3.6961 8.7579-0.0321 20.999-5.8861 25.604-12.243 1.4155-1.9541 1.4888-2.3249 1.2874-6.5113-0.73706-15.32-4.8366-32.152-11.136-45.726-2.596-5.5932-3.5122-6.472-10.347-9.9252-6.7432-3.4067-17.724-5.9774-19.442-4.5516-0.45521 0.37774-0.82746 0.83958-0.82746 1.0263s1.6201 0.90448 3.6005 1.595c4.2047 1.4662 14.417 6.38 14.907 7.1727 0.21544 0.34862-0.0304 0.39298-0.68434 0.12318-3.9072-1.6128-11.844-4.1021-15.423-4.8375-13.59-2.7923-31.966-1.47-43.992 3.1658-7.2671 2.8012-6.8621 2.6799-5.652 1.6933 1.9562-1.5949 10.19-5.5547 15.114-7.2684 4.0261-1.4013 4.8292-1.8553 4.3352-2.4505-1.867-2.2496-15.185 1.5071-23.353 6.5873-3.7928 2.359-4.0192 2.6179-6.0149 6.8766-6.2821 13.406-10.451 30.045-11.44 45.663l-0.36211 5.7168 3.9446 3.9311c2.8384 2.8287 5.0665 4.4794 7.9451 5.8864 4.8558 2.3733 10.978 4.0254 14.935 4.0302l2.9337 4e-3 3.0253-3.8413z" stroke-width=".5334"/> - <path d="m21.518 27.983h123.75v106.68h-123.75z" stroke-width="16.897"/> - </g> - <g fill="#5b6dae"> - <path d="m131.54 52.372 6.2582 5.3738 2.69 13.088-21.061-12.16z"/> - <path d="m87.366 25.158c-4.7785 0.02207-9.342 0.42919-13.357 1.1403-11.829 2.0897-13.976 6.4637-13.976 14.53v10.653h27.953v3.5511h-38.443c-8.1238 0-15.237 4.8829-17.462 14.172-2.5665 10.647-2.6803 17.291 0 28.409 1.9869 8.2754 6.7321 14.172 14.856 14.172h9.6107v-12.771c0-9.2262 7.9827-17.365 17.462-17.365h27.92c7.7719 0 13.976-6.3991 13.976-14.204v-26.617c0-7.5753-6.3906-13.266-13.976-14.53-4.8019-0.79938-9.7842-1.1625-14.563-1.1403zm-15.117 8.5683c2.8874 0 5.2451 2.3964 5.2451 5.3429-6e-6 2.9361-2.3579 5.3104-5.2451 5.3104-2.8977 0-5.2452-2.3742-5.2452-5.3104 0-2.9465 2.3475-5.3429 5.2452-5.3429z" stroke-width="1.0425"/> - <path d="m119.39 55.032v12.413c0 9.6233-8.1587 17.723-17.462 17.723h-27.92c-7.6478 0-13.976 6.5455-13.976 14.204v26.617c0 7.5753 6.5873 12.031 13.976 14.204 8.8482 2.6017 17.333 3.0719 27.92 0 7.0372-2.0375 13.976-6.138 13.976-14.204v-10.653h-27.92v-3.5511h41.896c8.1238 0 11.151-5.6666 13.976-14.172 2.9181-8.756 2.794-17.176 0-28.409-2.0076-8.0873-5.8421-14.172-13.976-14.172zm-15.703 67.406c2.8977 1e-5 5.2452 2.3742 5.2452 5.3103-1e-5 2.9465-2.3476 5.3429-5.2452 5.3429-2.8873 0-5.2451-2.3964-5.2451-5.3429 6e-6 -2.9361 2.3579-5.3103 5.2451-5.3103z" stroke-width="1.0425"/> - <g stroke-width="16.176"> - <path d="m64.566 32.933h16.085v14.553h-16.085z"/> - <path d="m96.736 121.02h14.042v13.532h-14.042z"/> - <path d="m57.758 27.064h14.491v6.6617h-14.491z"/> - </g> - <path d="m109.67 109.98 6.2363 5.353v0.75275h-7.6321v-5.8264z"/> - <path d="m59.356 32.37h2.7229v4.116h-2.7229z"/> - <path d="m53.796 46.128 6.2363 5.353h6.6393v-9.2446h-12.089z"/> - <path d="m104.45 24.881 6 5.1716-2.3657 5.1311-11.622-8.0211z"/> - <path d="m32.239 103.49 6.0335 5.2612 7.1305 0.24626-12.38-12.38z"/> - </g> - <path d="m81.129 19.804c-4.7785 0.0221-9.342 0.42919-13.357 1.1403-11.829 2.0898-13.976 6.4637-13.976 14.53v10.653h27.953v3.5511h-38.443c-8.1238 0-15.237 4.8829-17.462 14.172-2.5665 10.647-2.6803 17.291 0 28.409 1.9869 8.2754 6.7321 14.172 14.856 14.172h9.6107v-12.771c0-9.2262 7.9827-17.364 17.462-17.364h27.92c7.7719 0 13.976-6.3992 13.976-14.204v-26.617c0-7.5753-6.3906-13.266-13.976-14.53-4.8019-0.79938-9.7842-1.1625-14.563-1.1403zm-15.117 8.5682c2.8874 0 5.2451 2.3964 5.2451 5.3429-6e-6 2.9361-2.3579 5.3104-5.2451 5.3104-2.8977 0-5.2452-2.3742-5.2452-5.3104 0-2.9465 2.3475-5.3429 5.2452-5.3429z" fill="#cad6ff"/> - <g fill="#fff"> - <path d="m113.15 49.679v12.413c0 9.6233-8.1587 17.723-17.462 17.723h-27.92c-7.6478 0-13.976 6.5455-13.976 14.204v26.617c0 7.5753 6.5873 12.031 13.976 14.204 8.8482 2.6017 17.333 3.0719 27.92 0 7.0372-2.0375 13.976-6.138 13.976-14.204v-10.653h-27.92v-3.5511h41.896c8.1238 0 11.151-5.6666 13.976-14.172 2.9184-8.756 2.7942-17.176 0-28.409-2.0077-8.0873-5.8422-14.172-13.976-14.172zm-15.703 67.406c2.8977 0 5.2452 2.3742 5.2452 5.3103-1e-5 2.9465-2.3476 5.3429-5.2452 5.3429-2.8873 0-5.2451-2.3964-5.2451-5.3429 6e-6 -2.9361 2.3579-5.3103 5.2451-5.3103z"/> - <g stroke="#fff" stroke-width="2"> - <path d="m193.51 78.047h15.115v-17.48h8.8665c14.44 0 21.786-10.555 21.786-21.195 0-10.555-7.2621-21.111-21.871-21.111h-23.897zm15.115-30.906v-14.778h8.7821c9.1198-0.08449 9.1198 14.862 0 14.778z"/> - <path d="m278.74 78.047v-23.56l20.942-36.226h-17.733l-10.809 21.955-10.809-21.955h-17.564l20.857 36.226v23.56z"/> - <path d="m355.84 32.532v-14.355h-47.035v14.355h15.875v45.515h15.284v-45.515z"/> - <path d="m381.89 55.5h17.226v22.546h15.2v-59.786h-15.2v22.631h-17.226v-22.631h-15.2v59.786h15.2z"/> - <path d="m426.02 58.371c0 13.68 12.413 20.52 24.826 20.52 12.413 0 24.742-6.8399 24.742-20.52v-20.435c0-13.68-12.413-20.52-24.826-20.52-12.413 0-24.742 6.7554-24.742 20.52zm15.115-20.435c0-4.391 4.7288-6.7554 9.4576-6.7554 4.8977 0 9.8798 2.1111 9.8798 6.7554v20.435c0 4.3066-4.8132 6.5021-9.6265 6.5021-4.8132 0-9.7109-2.1111-9.7109-6.5021z"/> - <path d="m487.23 78.047h15.115v-23.897l-1.9422-11.569 0.42221-0.08449 5.2355 11.991 13.511 23.56h15.284v-59.786h-15.031v27.106c0.0845 0 1.6044 10.302 1.6888 10.302l-0.4222 0.08449-5.0666-11.991-14.44-25.502h-14.355z"/> - </g> - </g> - <path d="m295.7 97.875c-10.963 0-21.589 6.1561-21.589 17.878 0 11.385 8.7707 17.457 18.384 18.975 4.8912 0.67466 10.373 2.6144 10.204 5.9876-0.42162 6.4092-13.577 6.0717-19.565-1.1808l-9.5295 8.9391c5.5659 7.1682 13.156 10.794 20.324 10.794 10.963 0 23.107-6.3247 23.613-17.878 0.67464-14.674-9.951-18.384-20.577-20.324-4.6382-1.012-7.7589-2.6987-7.9276-5.566 0.25302-6.9152 10.963-7.168 17.204-0.50575l9.867-7.59c-6.1562-7.5055-13.155-9.5295-20.408-9.5295zm53.073 0c-11.975 0-23.782 6.9155-23.782 20.409v20.577c0 13.577 11.807 20.408 23.529 20.408 7.5055 0 16.529-3.7102 21.505-13.408l-13.156-6.0722c-3.2889 8.2645-16.782 6.2408-16.782-0.9274v-20.577c0-7.4212 13.324-9.1083 17.372-1.6871l12.312-4.9756c-4.8069-10.626-13.662-13.746-20.998-13.746zm52.363 0c-12.397 0-24.709 6.7466-24.709 20.493v20.408c0 13.662 12.397 20.493 24.794 20.493 12.397 0 24.709-6.8309 24.709-20.493v-20.408c0-13.662-12.397-20.493-24.794-20.493zm-207.6 0.84327v22.721l15.18 13.823v-22.461h7.6742c5.0599 0 7.5054 2.4459 7.5054 6.3252v18.637c0 3.8793-2.3612 6.4934-7.5054 6.4934h-7.6597l-5.2e-4 5.2e-4h-15.194v14.167h22.348c11.975 0.0842 23.191-5.9033 23.191-19.649v-20.071c0-13.915-11.216-19.987-23.191-19.987zm56.047 0v59.707h15.095v-59.707zm186.64 0v59.707h15.264v-18.974h2.6986l13.83 18.974h18.806l-16.276-20.493c7.2526-2.277 11.722-8.5173 11.722-19.565-0.33736-13.999-9.8668-19.649-22.179-19.649zm56.871 0v22.727l15.18 13.823v-22.466h7.6742c5.0599 0 7.5054 2.4459 7.5054 6.3252v18.637c0 3.8793-2.3612 6.4934-7.5054 6.4934h-7.6659l-5.2e-4 5.2e-4h-15.187v14.167h22.348c11.975 0.0842 23.191-5.9033 23.191-19.649v-20.071c0-13.915-11.216-19.987-23.191-19.987zm-92.117 12.903c4.8913 0 9.867 2.1085 9.867 6.7468v20.408c0 4.3009-4.8067 6.4939-9.6136 6.4939-4.8069 0-9.6982-2.1086-9.6982-6.4939v-20.408c0-4.3853 4.7223-6.7468 9.4448-6.7468zm50.511 1.1808h8.8545c9.5295 0 9.5295 13.662 0 13.662h-8.8545z" fill="#cad6ff" stroke="#cad6ff" stroke-width="1.9974"/> - <g transform="translate(-3.7229 -3.7549)"></g> - <g transform="translate(-3.7229 -3.7549)"></g> - <g transform="translate(-3.7229 -3.7549)"></g> - <g transform="translate(-3.7229 -3.7549)"></g> - <g transform="translate(-3.7229 -3.7549)"></g> - <g transform="translate(-3.7229 -3.7549)"></g> - <g transform="translate(-3.7229 -3.7549)"></g> - <g transform="translate(-3.7229 -3.7549)"></g> - <g transform="translate(-3.7229 -3.7549)"></g> - <g transform="translate(-3.7229 -3.7549)"></g> -</svg> diff --git a/static/logos/logo_discord.png b/static/logos/logo_discord.png Binary files differdeleted file mode 100644 index 2bf74ffd..00000000 --- a/static/logos/logo_discord.png +++ /dev/null diff --git a/static/partners.json b/static/partners.json deleted file mode 100644 index 5757b5a3..00000000 --- a/static/partners.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "Functional Programming": { - "banner": "/static/images/partners/functional programming.png", - "description": "Functional Programming is a server for discussing functional languages like Haskell, Idris, Elixir and Lisp as well as related academic fields such as type theory, category theory, proof assistants, and more!", - "invite": "https://discord.gg/kWJYurV" - }, - "Code Monkeys": { - "banner": "/static/images/partners/code monkeys.png", - "description": "We at Code Monkeys are dedicated to provide a friendly environment for programmers and tech enthusiasts alike. The community here is dedicated to giving and receiving great help and advice for a variety of programming languages. Help us build a large and friendly community at Code Monkeys by joining today!", - "invite": "https://discord.gg/vywQPxd" - }, - "Programming": { - "banner": "/static/images/partners/programming.png", - "description": "Programming was created in 2016, and is an active community around various programming languages, operating systems, as well as hardware, security, and low-level programming.", - "invite": "https://discord.gg/010z0Kw1A9ql5c1Qe" - }, - "STEM": { - "banner": "/static/images/partners/stem.png", - "description": "STEM is a growing server dedicated to discussion and education pertaining to subjects within the fields of Science, Technology, Engineering, and Mathematics. We aim to provide our members with an engaged, skilled, friendly community. We hope to see you soon!", - "invite": "https://discord.gg/XBGetGp" - } -} diff --git a/static/resources.json b/static/resources.json deleted file mode 100644 index de290065..00000000 --- a/static/resources.json +++ /dev/null @@ -1,427 +0,0 @@ -{ - "Communities": { - "description": "Partnered communities that share part of our mission", - "resources": { - "Subreddit: r/Python": { - "description": "News about the Python programming language, and language-related discussion", - "payment": "free", - "payment_description": null, - "urls": [ - { - "icon": "branding/reddit-alien", - "title": "r/Python on Reddit", - "url": "https://www.reddit.com/r/Python/" - } - ] - } - } - }, - "Tutorials": { - "description": "Tutorials and references for those that are just getting started with python", - "resources": { - "A Simple Guide to Git": { - "description": "A simple, no-nonsense guide to the basics of using Git.", - "payment": "free", - "payment_description": null, - "urls": [ - { - "icon": "regular/link", - "title": "Website", - "url": "http://rogerdudler.github.io/git-guide/" - } - ] - }, - "Get Started with Flask Web Development": { - "description": "A fully featured mega-tutorial for learning how to create web applications with the Flask framework.", - "payment": "free", - "payment_description": null, - "urls": [ - { - "icon": "regular/link", - "title": "Website", - "url": "https://blog.miguelgrinberg.com/post/the-flask-mega-tutorial-part-i-hello-world" - } - ] - }, - "Getting Started with Python": { - "description": "The list of resources for programmers and non-programmers from Python's official beginners' guide", - "payment": "free", - "payment_description": null, - "urls": [ - { - "icon": "regular/link", - "title": "Beginners Guide for Non-Programmers", - "url": "https://wiki.python.org/moin/BeginnersGuide/NonProgrammers" - }, - { - "icon": "regular/link", - "title": "Beginners Guide for Programmers", - "url": "https://wiki.python.org/moin/BeginnersGuide/Programmers" - } - ] - }, - "Python Cheat Sheet": { - "description": "A Python 3 cheat sheet with useful information and tips, as well as common pitfalls for beginners. This is a PDF.", - "payment": "free", - "payment_description": null, - "urls": [ - { - "icon": "regular/link", - "title": "Website", - "url": "https://perso.limsi.fr/pointal/_media/python:cours:mementopython3-english.pdf" - } - ] - } - } - }, - "Books": { - "description": "The best books for learning Python or Python Frameworks", - "resources": { - "A Byte of Python": { - "description": "A free book on programming using the Python language. It serves as a tutorial or guide to the Python language for a beginner audience. If all you know about computers is how to save text files, then this is the book for you.", - "payment": "optional", - "payment_description": "A free e-book is available online, a paper version can be bought from lulu.com.", - "urls": [ - { - "icon": "regular/link", - "title": "E-book", - "url": "https://python.swaroopch.com/" - }, - { - "icon": "regular/book", - "title": "Buy the book", - "url": "http://www.lulu.com/shop/swaroop-c-h/a-byte-of-python/paperback/product-21142968.html" - }, - { - "icon": "regular/tablet-alt", - "title": "Kindle edition", - "url": "https://www.amazon.com/Byte-Python-Swaroop-C-H-ebook/dp/B00FJ7S2JU/" - } - ] - }, - "Automate the Boring Stuff with Python": { - "description": "One of the best books out there for Python beginners. This book will teach you the basics of Python, while also teaching invaluable automation tools and techniques for solving common problems. You'll learn how to go about scraping the web, manipulating files and automating keyboard and mouse input. Ideal for an office worker who wants to make himself more useful.", - "payment": "optional", - "payment_description": "A free e-book is available on the website, but you can buy it on Amazon if you want to support the author.", - "urls": [ - { - "icon": "regular/link", - "title": "E-book", - "url": "https://automatetheboringstuff.com/" - }, - { - "icon": "branding/amazon", - "title": "Amazon", - "url": "https://www.amazon.com/Automate-Boring-Stuff-Python-Programming/dp/1593275994/" - } - ] - }, - "Effective Python": { - "description": "A book that gives 59 best practices for writing excellent Python. Great for intermediates.", - "payment": "paid", - "urls": [ - { - "icon": "regular/link", - "title": "Website", - "url": "https://effectivepython.com/" - }, - { - "icon": "branding/amazon", - "title": "Amazon", - "url": "https://www.amazon.com/Effective-Python-Specific-Software-Development/dp/0134034287" - }, - { - "icon": "branding/github", - "title": "GitHub", - "url": "https://github.com/bslatkin/effectivepython" - } - ] - }, - "Flask Web Development": { - "description": "A comprehensive Flask walkthrough that has you building a complete social blogging application from scratch.", - "payment": "paid", - "urls": [ - { - "icon": "regular/link", - "title": "Website", - "url": "http://shop.oreilly.com/product/0636920031116.do" - }, - { - "icon": "branding/amazon", - "title": "Amazon", - "url": "https://www.amazon.com/Flask-Web-Development-Developing-Applications/dp/1449372627" - }, - { - "icon": "branding/github", - "title": "GitHub", - "url": "https://github.com/miguelgrinberg/flasky" - } - ] - }, - "Fluent Python": { - "description": "A veritable tome of intermediate and advanced Python information. A must-read for any Python professional.", - "payment": "paid", - "urls": [ - { - "icon": "regular/link", - "title": "Website", - "url": "https://www.oreilly.com/library/view/fluent-python/9781491946237/" - }, - { - "icon": "branding/amazon", - "title": "Amazon", - "url": "https://www.amazon.com/Fluent-Python-Concise-Effective-Programming/dp/1491946008" - }, - { - "icon": "branding/github", - "title": "GitHub", - "url": "https://github.com/fluentpython" - } - ] - }, - "Python Cookbook": { - "description": "Complete with 'recipes' for various Python topics, including moving from Python 2 to Python 3.3", - "payment": "paid", - "urls": [ - { - "icon": "regular/link", - "title": "Website", - "url": "http://shop.oreilly.com/product/0636920027072.do" - }, - { - "icon": "branding/amazon", - "title": "Amazon", - "url": "https://www.amazon.com/Python-Cookbook-Third-David-Beazley/dp/1449340377" - }, - { - "icon": "branding/github", - "title": "GitHub", - "url": "https://github.com/dabeaz/python-cookbook" - } - ] - }, - "Two Scoops of Django": { - "description": "This book is chock-full of material that will help you with your Django projects.", - "payment": "paid", - "urls": [ - { - "icon": "regular/link", - "title": "Website", - "url": "https://twoscoopspress.com/products/two-scoops-of-django-1-11" - }, - { - "icon": "branding/amazon", - "title": "Amazon", - "url": "https://www.amazon.com/Two-Scoops-Django-Best-Practices/dp/0981467342" - }, - { - "icon": "branding/github", - "title": "GitHub", - "url": "https://github.com/twoscoops/two-scoops-of-django-2.0-code-examples" - } - ] - } - } - }, - "Courses": { - "description": "Online courses that relate to Python.", - "resources": { - "Python Tutorials by Corey Schafer on YouTube": { - "description": "An in-depth look at the Python programming language, from one of YouTube's most popular Python tutors.", - "payment": "free", - "payment_description": null, - "urls": [ - { - "icon": "branding/youtube", - "title": "YouTube", - "url": "https://www.youtube.com/playlist?list=PL-osiE80TeTt2d9bfVyTiXJA-UTHn6WwU" - } - ] - }, - "Python Tutorials by The New Boston on YouTube": { - "description": "A Python basics tutorial based around Python 3.4 - A more casual feel when compared to Corey's tutorials, but still competent.", - "payment": "free", - "payment_description": null, - "urls": [ - { - "icon": "branding/youtube", - "title": "YouTube", - "url": "https://www.youtube.com/playlist?list=PL6gx4Cwl9DGAcbMi1sH6oAMk4JHw91mC_" - } - ] - }, - "Code Combat": { - "description": "Learn Python while gaming - an open-source project with thousands of contributors, which teaches you Python through a deep, top-down RPG.", - "payment": "optional", - "payment_description": "A wealth of free content is available, but you can also pay for more", - "urls": [ - { - "icon": "regular/link", - "title": "Website", - "url": "https://codecombat.com/" - }, - { - "icon": "branding/github", - "title": "GitHub", - "url": "https://github.com/codecombat/codecombat" - } - ] - }, - "MIT: Introduction to Computer Science and Programming Using Python": { - "description": "This MITx offering teaches computer science with Python. It covers computational thinking, algorithms, data structures and the Python programming language itself.", - "payment": "optional", - "payment_description": "You can pay to enroll for a graded certificate, or choose to take the full course for free.", - "urls": [ - { - "icon": "regular/graduation-cap", - "title": "edX Course", - "url": "https://www.edx.org/course/introduction-computer-science-mitx-6-00-1x-11" - } - ] - }, - "University of Michigan: Programming for Everybody": { - "description": "A 5-part specialization course that teaches Python from scratch. The course has no pre-requisites and avoids all but the simplest mathematics.", - "payment": "optional", - "payment_description": "You can pay to enroll for a graded certificate and a capstone project, or choose to audit for free.", - "urls": [ - { - "icon": "regular/graduation-cap", - "title": "Python for Everyone Specialization", - "url": "https://www.coursera.org/learn/python" - } - ] - }, - "University of Toronto: Learn to Program": { - "description": "A 2-part course that teaches Python. Primarily intended for high school students and first-year university students who want to learn programming.", - "payment": "optional", - "payment_description": "You can pay to enroll for a graded certificate, or choose to audit for free.", - "urls": [ - { - "icon": "regular/graduation-cap", - "title": "Part 1: The Fundamentals", - "url": "https://www.coursera.org/learn/learn-to-program" - }, - { - "icon": "regular/graduation-cap", - "title": "Part 2: Crafting Quality Code", - "url": "https://www.coursera.org/learn/program-code" - } - ] - }, - "Automate the Boring Stuff with Python": { - "description": "The interactive course version of Al Sweigart's excellent book for beginners, taught by the author himself. This link has a discounted version of the course which will always cost 10 dollars. Thanks, Al!", - "payment": "paid", - "payment_description": "You can pay to enroll for a graded certificate, or choose to take the full course for free.", - "urls": [ - { - "icon": "regular/graduation-cap", - "title": "Udemy Course", - "url": "https://www.udemy.com/automate/?couponCode=FOR_LIKE_10_BUCKS" - } - ] - } - } - }, - "Editors": { - "description": "Lightweight code editors supporting Python", - "resources": { - "Atom": { - "description": "A free Electron-based editor, a \"hackable text editor for the 21st century\", maintained by the GitHub team.", - "payment": "free", - "payment_description": null, - "urls": [ - { - "icon": "regular/link", - "title": "Website", - "url": "https://atom.io/" - }, - { - "icon": "branding/github", - "title": "GitHub", - "url": "https://github.com/atom/atom" - } - ] - }, - "Visual Studio Code": { - "description": "A fully-featured editor based on Electron, extendable with plugins.", - "payment": "free", - "payment_description": null, - "urls": [ - { - "icon": "regular/link", - "title": "Website", - "url": "https://code.visualstudio.com/" - }, - { - "icon": "branding/github", - "title": "GitHub", - "url": "https://github.com/Microsoft/vscode" - } - ] - }, - "Sublime Text": { - "description": "A powerful Python-backed editor with great community support and a wealth of extensions.", - "payment": "optional", - "payment_description": "Nagware; will ask you to buy the full version after every X saves", - "urls": [ - { - "icon": "regular/link", - "title": "Website", - "url": "https://www.sublimetext.com/" - } - ] - }, - "Mu-Editor": { - "description": "An editor aimed at beginners for the purpose of learning how to code without the distractions more advanced editors sometimes cause.", - "payment": "free", - "payment_description": null, - "urls": [ - { - "icon": "regular/link", - "title": "Website", - "url": "https://codewith.mu/en/" - }, - { - "icon": "branding/github", - "title": "GitHub", - "url": "https://github.com/mu-editor/mu/" - } - ] - } - } - }, - "IDEs": { - "description": "Fully-integrated development environments for serious Python work", - "resources": { - "Spyder": { - "description": "The Scientific PYthon Development EnviRonment. Simpler and lighter than PyCharm, but still packs a punch.", - "payment": "free", - "payment_description": null, - "urls": [ - { - "icon": "regular/link", - "title": "Website", - "url": "https://pythonhosted.org/spyder/" - }, - { - "icon": "branding/github", - "title": "GitHub", - "url": "https://github.com/spyder-ide/spyder" - } - ] - }, - "PyCharm": { - "description": "The very best Python IDE, with a wealth of advanced features and convenience functions.", - "payment": "optional", - "payment_description": "There's a free Community Edition and a paid-for Professional Edition with more features available", - "urls": [ - { - "icon": "regular/link", - "title": "Website", - "url": "https://www.jetbrains.com/pycharm/" - } - ] - } - } - } -} diff --git a/templates/errors/error.html b/templates/errors/error.html deleted file mode 100644 index dbb7e3b4..00000000 --- a/templates/errors/error.html +++ /dev/null @@ -1,56 +0,0 @@ -{% extends 'main/base.html' %} -{% block title %}Error {{ code }}{% endblock %} -{% block og_title %}Error {{ code }}{% endblock %} -{% block og_description %}{{ error_message | safe }}{% endblock %} - -{% block extra_head %} - <script> - window._RequestMethod = "{{ request.method.lower() }}"; - window._Code = {{ code }}; - window._ErrorMsg = "{{ error_message | safe }}"; - window._Path = "{{ request.path }}"; - window.onload = error_typewriter; - </script> -{% endblock %} - -{% block content %} - <div class="uk-background-muted"> - <div class="uk-container"> - <div class="uk-section uk-text-center uk-panel uk-panel-box"> - <p class="error-header uk-text-large uk-text-break">{{ error_title }}</p> - </div> - </div> - </div> - - <div class="uk-visible@s"> - <div class="uk-container uk-section"> - <div class="window" id="win"> - <div class="top"> - <div class="panel"> - <span id="terminal-close"></span> - <span id="second-button"></span> - <span id="third-button"></span> - </div> - - </div> - - <div class="inside"> - <div class="block"> - <pre id="terminal"><code class="python" id="error"></code></pre> - </div> - </div> - </div> - </div> - </div> - - <div class="uk-hidden@s uk-container uk-text-center"> - <br /> - <p>{{ error_message | safe }}</p> - </div> - - <noscript> - <h1>There was an issue processing your request</h1> - <p>{{ error_message | safe }}</p> - </noscript> -{% endblock %} - diff --git a/templates/main/about/channels.html b/templates/main/about/channels.html deleted file mode 100644 index ac3d95b5..00000000 --- a/templates/main/about/channels.html +++ /dev/null @@ -1,268 +0,0 @@ -{% extends "main/base.html" %} -{% block title %}Channels{% endblock %} -{% block og_title %}Channels{% endblock %} -{% block og_description %}Channel listing and what's each channel is for{% endblock %} -{% block content %} - <div class="uk-section"> - <div class="uk-container uk-container-small"> - <article class="uk-article"> - <h1 class="uk-article-title hover-title" id="top"> - Channels - - <a href="#top" class="uk-text-primary" title="Permanent link to this header"> - <i class="fas fa-paragraph" data-fa-transform="shrink-8"></i> - </a> - </h1> - <p class="uk-article-meta"> - Keeping things tidy - </p> - - <p> - Every channel on the server has a use, and we expect users to keep things relevant to the channel - whenever possible. Below, we've outlined all of the channels a normal user has access to send - messages to, and what they should be used for. - </p> - - <h2>Discussion</h2> - - <p> - Channels in this section are designated for discussion and chat, and shouldn't be used for help - requests in most cases. All channels in this category are on-topic. - </p> - - <table uk-table class="uk-table-striped uk-table uk-table-divider table-bordered"> - <thead> - <tr> - <th>Channel</th> - <th>Info</th> - </tr> - </thead> - <tbody> - <tr> - <td class="fira-code">#python-discussion</td> - <td> - Discussion about the Python programming language and ecosystem - </td> - </tr> - <tr> - <td class="fira-code">#tools</td> - <td> - Discussion relating to Python tooling - IDEs, editors, package managers, documentation - generators, and so on - </td> - </tr> - <tr> - <td class="fira-code">#meta</td> - <td> - Discussion and suggestions relating to the Discord server, site, bot, and other - projects of ours - </td> - </tr> - </tbody> - </table> - - <h2>Off-Topic</h2> - - <p> - Channels in this section are designated for off-topic <strong>discussion</strong>, and any topic - may be talked about here once it follows our rules. Note that these channels are for discussion, - and are not places for you to dump images or memes. - </p> - - <p> - These channels are renamed daily by the server bot. Suggest funny channel names - <a href="https://gitlab.com/python-discord/meta/issues/8">on the dedicated GitLab meta issue</a>. - </p> - - <h2>Python Help</h2> - - <p> - Channels in this section are strictly on-topic, and designated for asking general Python-related - questions. If you're a beginner or you need some help with your Python, this is probably where you - want to be. - </p> - - <p> - Please try to pick a channel that isn't busy when asking your question. If you're not sure - how best to ask a question, take a look at - <a href="{{ url_for("main.info.help") }}">our guide on that subject</a>. - </p> - - <h2>Topical Chat/Help</h2> - - <p> - Channels in this section are strictly on-topic, and geared towards specific subjects. They can be - used for either discussion or asking questions - if you need help with one of the specific things - covered here, it's best to ask your question in the relevant channel rather than one of the general - help channels. - </p> - - <table uk-table class="uk-table-striped uk-table uk-table-divider table-bordered"> - <thead> - <tr> - <th>Channel</th> - <th>Info</th> - </tr> - </thead> - <tbody> - <tr> - <td class="fira-code">#databases</td> - <td> - Discussion and questions relating to databases - both traditional and document-oriented - - such as SQLite, Postgresql, RethinkDB, Cassandra, Redis and so on - </td> - </tr> - <tr> - <td class="fira-code">#data-science</td> - <td> - Discussion and questions relating to machine learning, natural language processing, - statistics and graphing and so on - </td> - </tr> - <tr> - <td class="fira-code">#dev-ops</td> - <td> - Discussion and questions relating to devops - for example, deployment and configuration - of services, virtual machines and containers, and the day-to-day running of your - Python-powered services - </td> - </tr> - <tr> - <td class="fira-code">#discord-py</td> - <td> - Discussion and questions relating to the - <a href="https://github.com/Rapptz/discord.py">discord.py</a> library for writing - Discord bots in Python - This channel refers specifically to the - <a href="https://discordpy.readthedocs.io/en/async/"><span class="fira-code">async</span> branch of discord.py</a>, - which is currently the stable version but is heavily outdated - </td> - </tr> - <tr> - <td class="fira-code">#discord-py-rewrite</td> - <td> - Discussion and questions relating to the - <a href="https://github.com/Rapptz/discord.py">discord.py</a> library for writing - Discord bots in Python - This channel refers specifically to the - <a href="https://discordpy.readthedocs.io/en/rewrite/"><span class="fira-code">rewrite</span> branch of discord.py</a>, - which is the most up-to-date version but is considered to be in beta - </td> - </tr> - <tr> - <td class="fira-code">#security</td> - <td> - Discussion and questions relating to cybersecurity, especially in relation to Python - and best practises - </td> - </tr> - <tr> - <td class="fira-code">#software-testing</td> - <td> - Discussion and questions relating to testing your Python applications - </td> - </tr> - <tr> - <td class="fira-code">#user-interface</td> - <td> - Discussion and questions relating to designing and building user interfaces - in Python, and related libraries and tools - this includes graphical interfaces and - console interfaces - </td> - </tr> - <tr> - <td class="fira-code">#web-development</td> - <td> - Discussion and questions relating to web development - including Python frameworks - such as Flask and Django, as well as HTML and JavaScript where it relates to the Web - </td> - </tr> - </tbody> - </table> - - <h2>Events</h2> - - <p> - Channels in this section are strictly on-topic, and designated for the discussion of Python-related - events - for example, our <a href="{{ url_for("main.jams.index") }}">Code Jams</a>, as well as any - other large, related events that many of our users are partaking in. - </p> - <p> - If you're part of a related event and you don't see a channel for it here, feel free to ask for one! - </p> - - <h2>Special</h2> - - <p> - Channels in this section are designated for special uses, and don't really fit into the other - categories. - </p> - - <table uk-table class="uk-table-striped uk-table uk-table-divider table-bordered"> - <thead> - <tr> - <th>Channel</th> - <th>Info</th> - </tr> - </thead> - <tbody> - <tr> - <td class="fira-code">#bot-commands</td> - <td> - A channel specifically for making use of the bots on the server without clogging up - the other channels - </td> - </tr> - <tr> - <td class="fira-code">#checkpoint</td> - <td> - Invisible to most users after verifying themselves, this channel is where new - users verify that they accept the rules and - <a href="{{ url_for("main.about.privacy") }}">privacy policy</a> - </td> - </tr> - <tr> - <td class="fira-code">#challenges</td> - <td> - While currently not in use, this channel lists various programming challenges that - one might like to attempt during their learning efforts - we'll be replacing this - with something better later, so stay tuned! - </td> - </tr> - <tr> - <td class="fira-code">#reddit</td> - <td> - A listing channel with a live feed of posts from - <a href="https://reddit.com/r/Python">r/Python</a>, our official subreddit. - </td> - </tr> - <tr> - <td class="fira-code">#show-your-projects</td> - <td> - A listing channel for users to show off their Python-oriented projects - please note - that this is not a discussion channel, and we do not allow postings for communities - or commercial projects - and if possible, we prefer that you post a link to your - source code instead of a website - </td> - </tr> - <tr> - <td class="fira-code">#show-your-projects-discussion</td> - <td> - Strictly on-topic discussion relating to projects posted in - <span class="fira-code">#show-your-projects</span> - we prefer that all discussion - relating to personal projects goes here - </td> - </tr> - </tbody> - </table> - - <h2>Voice</h2> - - <p> - This section contains all of our general voice channels, as well as a single text channel - - <span class="fira-code">#voice-chat</span>. If you're in a voice channel but can't use a - microphone, you should use this channel to reply to other users using text instead of any - of the other channels. - </p> - </article> - </div> - </div> -{% endblock %}
\ No newline at end of file diff --git a/templates/main/about/index.html b/templates/main/about/index.html deleted file mode 100644 index 35fe6ae0..00000000 --- a/templates/main/about/index.html +++ /dev/null @@ -1,40 +0,0 @@ -{% extends "main/base.html" %} -{% block title %}About{% endblock %} -{% block og_title %}About{% endblock %} -{% block og_description %}Partners links, and information about the server{% endblock %} -{% block content %} - <div class="uk-section"> - <div class="uk-container uk-container-small"> - <article class="uk-article"> - <h1 class="uk-article-title hover-title" id="top"> - About - - <a href="#top" class="uk-text-primary" title="Permanent link to this header"> - <i class="fas fa-paragraph" data-fa-transform="shrink-8"></i> - </a> - </h1> - <p class="uk-article-meta"> - Learn about the server, find links to our partners, and more! - </p> - <p> - <strong>Channels</strong> - <a href="{{ url_for('main.about.channels') }}"><i class="fas fa-link"></i></a> - <br /> - <span class="uk-text-meta">Server channel listings and information</span> - </p> - <p> - <strong>Partners</strong> - <a href="{{ url_for('main.about.partners') }}"><i class="fas fa-link"></i></a> - <br /> - <span class="uk-text-meta">Links to our partnered servers</span> - </p> - <p> - <strong>Rules</strong> - <a href="{{ url_for('main.about.rules') }}"><i class="fas fa-link"></i></a> - <br /> - <span class="uk-text-meta">Rules and infraction information for our community</span> - </p> - </article> - </div> - </div> -{% endblock %} diff --git a/templates/main/about/partners.html b/templates/main/about/partners.html deleted file mode 100644 index 83803265..00000000 --- a/templates/main/about/partners.html +++ /dev/null @@ -1,46 +0,0 @@ -{% extends "main/base.html" %} -{% block title %}Partners{% endblock %} -{% block og_title %}Partners{% endblock %} -{% block og_description %}List and Links to Partner servers{% endblock %} -{% block content %} - <div class="uk-section"> - <div class="uk-container uk-container-small"> - <article class="uk-article"> - <h1 class="uk-article-title hover-title" id="top"> - Partners - <a href="#top" class="uk-text-primary" title="Permanent link to this header"> - <i class="fas fa-paragraph" data-fa-transform="shrink-8"></i> - </a> - </h1> - <div class="uk-column-1-2@m uk-column-divider" id="partner-cards"> - {% if partners is none %} - <div class="uk-alert-danger" uk-alert> - <p> - We were unable to load the <code>partners.json</code> file. If you see this, please - notify us! - </p> - </div> - {% else %} - {% for partner_name, partner_data in partners.items() %} - <div class="uk-card-default uk-card-hover uk-inline"> - <div class="uk-card-media-top"> - <a href="{{ partner_data['invite'] }}"> - <img src="{{ partner_data['banner'] }}" alt="{{ partner_name }}"/> - </a> - </div> - <div class="uk-card-body"> - <p>{{ partner_data['description'] }}</p> - </div> - <div class="uk-card-footer"> - <a href="{{ partner_data['invite'] }}" class="uk-button uk-button-text"> - Join the server - </a> - </div> - </div> - {% endfor %} - {% endif %} - </div> - </article> - </div> - </div> -{% endblock %} diff --git a/templates/main/about/privacy.html b/templates/main/about/privacy.html deleted file mode 100644 index fa4e2aab..00000000 --- a/templates/main/about/privacy.html +++ /dev/null @@ -1,324 +0,0 @@ -{% extends "main/base.html" %} -{% block title %}Privacy{% endblock %} -{% block og_title %}Privacy{% endblock %} -{% block og_description %}Our privacy policy, and compliance information{% endblock %} -{% block content %} - <div class="uk-section"> - <div class="uk-container uk-container-small"> - <article class="uk-article"> - <h1 class="uk-article-title hover-title" id="top"> - Privacy - - <a href="#top" class="uk-text-primary" title="Permanent link to this header"> - <i class="fas fa-paragraph" data-fa-transform="shrink-8"></i> - </a> - </h1> - <p class="uk-article-meta"> - Stay safe out there - </p> - - <p> - We take every step to ensure that your data is used ethically and that includes making sure that - you know exactly what data we collect, and what we do with it. That means that instead of a - bunch of legalese, we've provided this information in an easy, human-readable form below. - </p> - - <p> - Please note that we are a completely non-profit community. We have no interest in selling your - data, or shipping it off to third parties. Our community is entirely volunteer-run - it does - not have any form of monetary income whatsoever - and we believe that this is how it should be. - </p> - - <h3>Data collection</h3> - - <div class="uk-alert uk-alert-warning"> - <p> - Please note that data <span class="uk-text-primary">marked with blurple text below</span> is not - automatically removed. We need to hold onto this information in order to maintain infraction records - and ensure the smooth running of our community. - </p> - <p> - We do not store any data until you have verified yourself in <code>#checkpoint</code> on the server, - and certified that you agree to our rules and privacy policy. If you are leaving the server and would - like us to remove this data as well, please contact a member of staff directly. - </p> - </div> - - <table class="uk-table uk-table-divider uk-table-striped uk-table-small table-bordered" id="data-collection-table"> - <thead> - <tr class="thick-bottom-border"> - <th class="uk-width-1-4">What we collect</th> - <th class="uk-width-1-4">When it's collected</th> - <th class="uk-width-1-4">What it's used for</th> - <th class="uk-width-1-4">Who can access it</th> - </tr> - </thead> - <tbody> - <tr> - <td class="uk-text-primary">Discord user ID</td> - <td class="uk-table-shrink"><strong>!accept</strong> run on Discord</td> - <td>Statistics, data association (infractions, code jam applications, etc)</td> - <td>Administrative staff</td> - </tr> - <tr> - <td class="uk-text-primary">Discord username and discriminator</td> - <td class="uk-table-shrink"><strong>!accept</strong> run on Discord</td> - <td>Display purposes (alongside ID in staff areas, public profiles)</td> - <td>Public (for code jam team listings and winner info) and staff areas</td> - </tr> - <tr> - <td class="uk-text-primary">Discord avatar URLs</td> - <td class="uk-table-shrink"><strong>!accept</strong> run on Discord</td> - <td>Display purposes (alongside ID in staff areas, public profiles)</td> - <td>Public (for code jam team listings and winner info) and staff areas</td> - </tr> - <tr> - <td class="uk-text-primary">Assigned roles on Discord</td> - <td class="uk-table-shrink"><strong>!accept</strong> run on Discord</td> - <td>Access control for the site, infractions, role restoration after kicks</td> - <td>Administrative staff</td> - </tr> - <tr class="thick-bottom-border"> - <td class="uk-text-primary">Messages sent on Discord</td> - <td class="uk-table-shrink"><strong>!accept</strong> run on Discord</td> - <td> - Stored in memory by the bot for processing temporarily, may also end up in - staff-only logging channels for the purposes of accountability and infraction - management - </td> - <td>Administrative staff</td> - </tr> - - <tr class="thick-bottom-border"> - <td>OAuth access and refresh token</td> - <td class="uk-table-shrink">Discord login on site</td> - <td>Used to find your Discord user ID when you log in</td> - <td>Administrative staff</td> - </tr> - - <tr> - <td>GitLab username</td> - <td class="uk-table-shrink">Code jam profile</td> - <td>Used to identify you on GitLab as part of a code jam team</td> - <td>Public, for code jam team listings</td> - </tr> - <tr class="thick-bottom-border"> - <td>Timezone</td> - <td class="uk-table-shrink">Code jam profile</td> - <td>A factor in code jam team match-ups</td> - <td>Administrative staff</td> - </tr> - - <tr class="thick-bottom-border"> - <td>System Information</td> - <td class="uk-table-shrink">Code jam signup</td> - <td>Used to verify that you have a working environment</td> - <td>Administrative staff</td> - </tr> - - <tr> - <td>Email Address</td> - <td class="uk-table-shrink">Issues emailed directly to GitLab</td> - <td>Used to keep track of issue submissions</td> - <td>GitLab staff - never stored in our database</td> - </tr> - </tbody> - </table> - - <p> - Note that we don't ordinarily collect your email address, and your email address will never be - stored on our servers. The only time it will be shown is in the title of any issues you create on - GitLab by directly emailing us on the <code>meta@</code> email address. These issues are confidential, - not associated with a user account, do not require a GitLab account, and will only ever be seen by - staff. - </p> - - <h1 class="uk-article-title hover-title" id="consent"> - Collecting consent - - <a href="#consent" class="uk-text-primary" title="Permanent link to this header"> - <i class="fas fa-paragraph" data-fa-transform="shrink-8"></i> - </a> - </h1> - - <p> - If you joined the community on or before the <strong>20th of May, 2018</strong>, you will have seen an announcement about our - privacy policy on the Discord server. You will have had the opportunity to leave the server if - you weren't happy with it. If you decided to stay, then we will consider you to have accepted - our use of your data, as detailed on this page. - </p> - <p> - If you joined the community after the <strong>20th of May, 2018</strong>, you will have been greeted with the - <code>#checkpoint</code> channel. In this channel, you must run the <code>!accept</code> - command to signify that you accept both our rules and this privacy policy. This will also have been - detailed in a message in that channel. - </p> - <p> - Please note that your acceptance of this privacy policy is retroactive, and you agree that any - revisions to it will apply when they are published. We will attempt to keep everyone updated on - changes to this policy via the usual announcement channels - if at any point you are not happy with - a change to the privacy policy, please bring it up with a member of staff. If we're unable to - solve your issue in a satisfactory way, you may remove your data as detailed below. - </p> - - <h1 class="uk-article-title hover-title" id="removal"> - Data removal - - <a href="#removal" class="uk-text-primary" title="Permanent link to this header"> - <i class="fas fa-paragraph" data-fa-transform="shrink-8"></i> - </a> - </h1> - - <p> - If you'd like to remove your data from our servers, there are two options available to you. - </p> - - <div class="uk-grid uk-grid-match" uk-grid> - <div class="uk-width-3-5@m"> - <div class="uk-card uk-card-default uk-card-small"> - <div class="uk-card-header"> - <h3 class="uk-card-title">Complete data removal</h3> - </div> - - <div class="uk-card-body"> - <p> - If you'd like to remove all of your personal data from our servers, all you need to do - is leave the Discord server. As much of the data we collect is necessary for running - our community, we are unable to offer you community membership with zero data collection. - </p> - <p> - Please note that data <span class="uk-text-primary">marked with blurple text in the table above</span> - is not automatically removed. We need to hold onto this information in order to maintain infraction records - and ensure the smooth running of our community. If you are leaving the server and would like us to remove - this data as well, please contact a member of staff directly. - </p> - <p> - Once you've left the Discord server, your data is removed automatically. Please note that - for the sake of data integrity and moderation purposes, we do not remove your Discord - user ID from our database - but we do anonymize your data as far as possible. - </p> - <p> - As with deleting your code jam profile directly, you will be issued an automatic ban - from future code jams if you have applied for or are currently taking part in a - code jam. - </p> - </div> - </div> - </div> - <div class="uk-width-2-5@m"> - <div class="uk-card uk-card-default uk-card-small"> - <div class="uk-card-header"> - <h3 class="uk-card-title">Code jam profile removal</h3> - </div> - - <div class="uk-card-body"> - <p> - If you've provided us with a code jam profile in the past and would like to remove - it, you may do so by heading to the - <a href="{{ url_for("main.jams.profile") }}">"My Profile" page</a>, - where you will find a button that will remove your profile. - </p> - <p> - Please note that this is a nuclear option. If you have applied for or are currently - taking part in a code jam, this will void your application and you will receive an - automatic ban from future code jams until you've contacted us about it. - </p> - </div> - </div> - </div> - </div> - - <h1 class="uk-article-title hover-title" id="gdpr"> - GDPR compliance - - <a href="#gdpr" class="uk-text-primary" title="Permanent link to this header"> - <i class="fas fa-paragraph" data-fa-transform="shrink-8"></i> - </a> - </h1> - <p class="uk-article-meta"> - Keeping your data under your control - </p> - - <p> - Under the terms specified above, we do aim to comply with GDPR. While we do not currently have - an automated way for users to export the data they've provided to us, we're happy to do this - manually or answer any other GDPR- or privacy-related queries you may have. Feel free to contact - our GDPR officer on Discord (<code>gdude#2002</code>), or any other member of the administrative - staff. - </p> - <p> - We believe that the best way to keep your personal data safe is to avoid collecting it at all. - Discord itself is GDPR-compliant and they've already done the legwork required to ensure that - your data may be collected - so we don't see the need to collect your personal information - ourselves. Don't forget that by using Discord, you are stating that you are of legal age in - your country to give consent to process your data! - </p> - <p> - We are currently working on an automated way to get all of your data in both a human-readable - and machine-readable format. Keep your eye on the usual announcements channels for more information - on that, as it happens. - </p> - - <h1 class="uk-article-title hover-title" id="changelog"> - Changelog - - <a href="#changelog" class="uk-text-primary" title="Permanent link to this header"> - <i class="fas fa-paragraph" data-fa-transform="shrink-8"></i> - </a> - </h1> - <p class="uk-article-meta"> - Accountability, for the masses - </p> - - <ul class="uk-list uk-list-divider"> - <li> - <h4>July 27th, 2018</h4> - <p> - As we're replacing Rowboat (the bot we use for moderation), we need to hold onto some of - your data - even after you've left the server. This is necessary to ensure the smooth - running and security of our community. - </p> - </li> - <li> - <h4>July 3rd, 2018</h4> - <p> - While we don't collect your email addresses, they are visible on GitLab if you email an - issue directly to our <code>meta@</code> email address, but only to staff. - </p> - </li> - <li> - <h4>June 7th, 2018</h4> - <p> - We no longer collect GitHub usernames - instead, we collect GitLab usernames. Additionally, - we now collect user avatar URLs for display purposes. - </p> - </li> - <li> - <h4>June 5th, 2018</h4> - <p> - Rectified an omission in the old privacy policy, where the system information you provide - as part of a code jam signup wasn't mentioned. - </p> - </li> - <li> - <h4>May 31st, 2018</h4> - <p> - We no longer collect your date of birth, and all collected dates of birth have been - removed from our database. The reason for this is that Discord itself already complies with - GDPR - and in order for you to sign up for a code jam, you must already have a Discord - account. - </p> - </li> - <li> - <h4>May 20th, 2018</h4> - <p> - Completed the first version of our privacy policy. We also updated our OAuth scopes for - Discord logins - we no longer collect your email, or get the access to join you to servers - automatically. All collected emails have also been removed from the database. - </p> - </li> - </ul> - </article> - </div> - </div> -{% endblock %} diff --git a/templates/main/about/rules.html b/templates/main/about/rules.html deleted file mode 100644 index b11f91d9..00000000 --- a/templates/main/about/rules.html +++ /dev/null @@ -1,124 +0,0 @@ -{% extends "main/base.html" %} -{% block title %}Rules{% endblock %} -{% block og_title %}Rules{% endblock %} -{% block og_description %}The server rules, along with an explanation of what happens when they're broken{% endblock %} -{% block content %} - <div class="uk-section"> - <div class="uk-container uk-container-small"> - <article class="uk-article"> - <h1 class="uk-article-title hover-title" id="top"> - Rules - - <a href="#top" class="uk-text-primary" title="Permanent link to this header"> - <i class="fas fa-paragraph" data-fa-transform="shrink-8"></i> - </a> - </h1> - <p class="uk-article-meta"> - Keeping our noses clean since 2017 - </p> - <p> - We have a small but strict set of rules on our server. Please read over them and take them on board - - if you don't understand anything or need some clarification, feel free to ask any staff member! - </p> - <ol> - <li> - Be polite, and do not spam - </li> - <li> - Follow the <a href="https://discordapp.com/guidelines">Discord community guidelines</a> - </li> - <li> - Don't intentionally make other people uncomfortable - if someone asks you to stop discussing - something, you should stop - </li> - <li> - Be patient both with users asking questions, and the users answering them - </li> - <li> - We will not help you with anything that might break a law or the terms of service of any other - community, site, service, or otherwise - No piracy, brute-forcing, captcha circumvention, - sneaker bots, or anything else of that nature - </li> - <li> - Listen to and respect the staff members - we're here to help, but we're all human beings - </li> - <li> - All discussion should be kept within the relevant channels for the subject - See the - <a href="{{ url_for("main.about.channels") }}">channels page</a> for more information - </li> - <li> - This is an English-speaking server, so please speak English to the best of your ability - - <a href="https://translate.google.com">Google Translate</a> should be fine if you're not sure - </li> - <li> - Keep all discussions safe for work - No gore, nudity, sexual soliciting, references to suicide, - or anything else of that nature - </li> - <li> - We do not allow advertisements for communities or commercial projects - Contact us directly if - you want to discuss a partnership! - </li> - </ol> - - <h1 class="uk-article-title hover-title" id="nickname-policy"> - Nickname Policy - - <a href="#nickname-policy" class="uk-text-primary" title="Permanent link to this header"> - <i class="fas fa-paragraph" data-fa-transform="shrink-8"></i> - </a> - </h1> - <p class="uk-article-meta"> - Keep It Simple, Stupid - </p> - <p> - In order to keep things pleasant and workable for both users and staff members, we enforce the - following requirements regarding your nickname. - </p> - <ol> - <li>No blank or "invisible" names</li> - <li>No slurs or other offensive sentiments</li> - <li>No noisy unicode characters - for example, z̯̯͡a̧͎̺̻̝͕̠l̡͓̫̣g̹̲o̡̼̘ or byte order marks</li> - <li>No nicknames designed to annoy other users</li> - <li>Make sure the nickname is easy to mention using a keyboard that can only type ASCII characters</li> - </ol> - <p> - Staff reserves the right to change the nickname of any user for any reason. Failure to comply with these - requirements may result in you losing the right to change your nickname. We also reserve the right to - discipline users with offensive usernames, regardless of the nickname they're using. - </p> - - <h1 class="uk-article-title hover-title" id="infractions"> - Infractions - - <a href="#infractions" class="uk-text-primary" title="Permanent link to this header"> - <i class="fas fa-paragraph" data-fa-transform="shrink-8"></i> - </a> - </h1> - <p class="uk-article-meta"> - Why you gotta be so rude? - </p> - <p> - We have a generally no-nonsense policy when it comes to our rules. If you notice someone breaking - them, feel free to mention or DM a staff member and we'll try to deal with it as soon as possible. - </p> - <p> - The possible actions we take based on infractions can include the following: - </p> - <ul> - <li>A public verbal or textual warning</li> - <li>Forced nick changes, where appropriate</li> - <li>A short temporary mute</li> - <li>A long temporary mute</li> - <li>A kick from the server</li> - <li>A temporary ban from the server</li> - <li>A permanent ban from the server</li> - </ul> - <p> - While we do discuss more serious matters internally before handing out a punishment, simpler - infractions are dealt with directly by individual staffers and the punishment they hand out is left - to their own discretion. - </p> - </article> - </div> - </div> -{% endblock %}
\ No newline at end of file diff --git a/templates/main/base.html b/templates/main/base.html deleted file mode 100644 index bb12fc9b..00000000 --- a/templates/main/base.html +++ /dev/null @@ -1,53 +0,0 @@ -<!DOCTYPE html> -<html lang="en"> - <head> - {% block head %} - <title>Python Discord | {% block title %}{% endblock %}</title> - <meta charset="UTF-8"> - <meta name="viewport" content="width=device-width, initial-scale=1"> - - <script src="{{ static_file('js/script.js') }}" type="application/javascript"></script> - - <!-- Stylesheets --> - <link rel="shortcut icon" href="{{ static_file('favicon.ico') }}"> - <link rel="stylesheet" href="{{ static_file('css/uikit_blurple.css') }}"/> - <link rel="stylesheet" href="{{ static_file('css/style.css') }}"/> - <link rel="stylesheet" href="{{ static_file('css/bundled/pygments-monokai.css') }}"/> - <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/flatpickr/dist/flatpickr.min.css"> - - <!-- OpenGraph metadata --> - <meta property="og:title" content="Python Discord | {% block og_title %}{% endblock %}"> - <meta property="og:description" content="{% block og_description %}We're a large, friendly community focused around the Python programming language. Our community is open to those who wish to learn the language, as well as those looking to help others.{% endblock %}"> - <meta content="/static/logos/logo_discord.png" property="og:image"> - {% endblock %} - {% block extra_head %} - - {% endblock %} - </head> - <body class="{% block page_classes %}{% endblock page_classes %} - page-{{ current_page.replace(".", "-") }} - blueprint-{{ blueprint.replace(".", "-") }}"> - {% if current_page == "main.index" %} - <div class="uk-offcanvas-content uk-section-primary"> - {% else %} - <div class="uk-offcanvas-content"> - {% endif %} - {% include "main/navigation.html" %} - {% block content %}{% endblock %} - </div> - - <footer> - <div class="uk-section uk-section-secondary uk-container-medium uk-text-meta"> - <div class="uk-text-center uk-text-meta"> - <p> - This website uses <a href="https://python.org">Python</a> and - <a href="http://flask.pocoo.org/">Flask</a>, and was developed collaboratively on - <a href="https://gitlab.com/python-discord/projects/site">GitLab</a>. - <br /> - For privacy & GDPR-related info, please <a href="{{ url_for("main.about.privacy") }}">see this page</a>. - </p> - </div> - </div> - </footer> - </body> -</html> diff --git a/templates/main/bot/clean_logs.html b/templates/main/bot/clean_logs.html deleted file mode 100644 index 83ee0cba..00000000 --- a/templates/main/bot/clean_logs.html +++ /dev/null @@ -1,81 +0,0 @@ -<html class="clean-logs"> - <head> - <link rel="stylesheet" href="{{ static_file('css/style.css') }}"/> - </head> - <body> - {% for message in messages %} - - <!-- Main message --> - <span class="nick" style="color: {{ message.color }}">{{ message.author }}<span class="time">{{ message.timestamp }} | User ID: {{ message.user_id }}</span></span><br> - <span class="text">{{ message.content }}</span> - - <!-- File attachments --> - {% for attachment in message.attachments %} - <span class="text">{{ attachment }}</span> - {% endfor %} - - <!-- Embeds --> - {% for embed in message.embeds %} - <div class="embed"> - - <!-- Title --> - {% if embed.title %} - {% if embed.url %} - <span><strong><a href="{{ embed.url }}">{{ embed.title }}</a></strong></span><br> - {% else %} - <span><strong>{{ embed.title }}</strong></span><br> - {% endif %} - {% endif %} - - - <!-- Description --> - {% if embed.description %} - <br> - <span>{{ embed.description }}</span> - {% endif %} - - <!-- Fields --> - {% if embed.fields %} - <div class="fields"> - {% for field in embed.fields %} - <div class="field"> - <br> - {% if field.name %} - <span><strong>{{ field.name }}</strong></span><br> - {% endif %} - - <span>{{ field.value }}</span> - </div> - {% endfor %} - </div> - {% endif %} - - <!-- Image --> - {% if embed.image %} - <br> - {% if embed.image.url %} - <img src="{{ embed.image.url }}"> - {% endif %} - {% endif %} - - <!-- Thumbnail --> - {% if embed.thumbnail %} - <br> - {% if embed.thumbnail.url %} - <img src="{{ embed.thumbnail.url }}"> - {% endif %} - {% endif %} - - <!-- Footer --> - {% if embed.footer %} - <br> - {% if embed.footer.text %} - <span class="footer">{{ embed.footer.text }}</span> - {% endif %} - {% endif %} - </div> - {% endfor %} - {% endfor %} - </body> -</html> - diff --git a/templates/main/index.html b/templates/main/index.html deleted file mode 100644 index c73c2e4b..00000000 --- a/templates/main/index.html +++ /dev/null @@ -1,38 +0,0 @@ -{% extends "main/base.html" %} -{% block title %}Home{% endblock %} -{% block og_title %}Home{% endblock %} -{% block content %} -<div class="uk-section uk-section-primary"> - <div class="uk-container uk-text-center"> - <h1 class="uk-header uk-article-title"> - Python Discord - </h1> - <p class="uk-article-meta"> - The official Discord server of <a href="https://www.reddit.com/r/Python/">r/Python</a> - </p> - <p class="uk-text-lead"> - We're a large, friendly community focused around the Python programming language, - open to those who wish to learn the language or improve their skills, as well as - those looking to help others. - </p> - <p> - We organise regular community events and have a dedicated staff of talented Python developers - available to assist around the clock. Whether you're looking to learn the language or working - on a complex project, we've got someone who can help you if you get stuck. - </p> - <div class="uk-container uk-align-center"> - <a href="{{ url_for('main.invite') }}" class="uk-button uk-button-large uk-button-darkish" id="invite-button"> - <img src="https://discordapp.com/api/guilds/267624335836053506/embed.png?style=banner3"> - </a> - </div> - <hr class="uk-divider-icon"/> - <div class="uk-container uk-container-small uk-text-meta"> - <p> - Please note: this site is under construction. What you see now may be vastly different - from the final project state. Feel free to chat to us on Discord if you're curious! - </p> - </div> - - </div> -</div> -{% endblock %} diff --git a/templates/main/info/faq.html b/templates/main/info/faq.html deleted file mode 100644 index e742f317..00000000 --- a/templates/main/info/faq.html +++ /dev/null @@ -1,324 +0,0 @@ -{% extends "main/base.html" %} -{% block title %}FAQ{% endblock %} -{% block og_title %}FAQ{% endblock %} -{% block og_description %}Frequently Asked Questions{% endblock %} -{% block content %} - <div class="uk-section"> - <div class="uk-container uk-container-small"> - <article class="uk-article"> - <h1 class="uk-article-title hover-title" id="top"> - Frequently Asked Questions - - <a href="#top" class="uk-text-primary" title="Permanent link to this header"> - <i class="fas fa-paragraph" data-fa-transform="shrink-8"></i> - </a> - </h1> - <p class="uk-article-meta"> - Insert witty quip here - </p> - <p> - These are some of the most-asked questions we get on a day-to-day basis. If you have a - question, be sure to check this page and see if we've answered it already. If you'd like to - suggest an entry to this page, why not submit a merge request - <a href="https://gitlab.com/python-discord/projects/site">on GitLab</a>? - </p> - - <div uk-grid class="uk-grid uk-grid-match"> - <div class="uk-width-1-1@s"> - <h2 class="uk-heading-divider" id="starting-out"> - Starting Out with Python - - <a href="#starting-out" class="uk-text-primary uk-float-right" title="Permanent link to this header"> - <i class="far fa-link"></i> - </a> - </h2> - </div> - - <div class="uk-width-1-3@m"> - <strong>Is Python a good first language?</strong> - </div> - <div class="uk-width-2-3@m"> - <p> - In our opinion, yes it is. It's a very powerful language, but it will force you to - write readable code and it's designed to allow you to write code very quickly, without - you having to keep your head in a book for hours on end. - </p> - <p> - Python is used as a teaching language in many schools, colleges and universities - but - it's a very capable language that is suitable for many real-world tasks as well, and - it's only gaining in popularity! - </p> - </div> - - <div class="uk-width-1-3@m"> - <strong>I'm new to Python - how/where do I get started?</strong> - </div> - <div class="uk-width-2-3@m"> - <p> - How you get started with Python is very much going to depend on your prior programming - experience. If you're already an experienced programmer, you should should have no - trouble following pretty much any guide out there - but for true beginners, we recommend - full-on tutorials such as Automate the Boring Stuff with Python. - </p> - <p> - For more information on that and other resources, feel free to take a look at - <a href="{{ url_for("main.info.resources") }}">our resources page</a>. - </p> - </div> - - <div class="uk-width-1-3@m"> - <strong>Should I start with Python 2 or Python 3? Which is better?</strong> - </div> - <div class="uk-width-2-3@m"> - <p> - Generally, we're always going to recommend that people new to Python start with Python 3. - There's a few reasons for this: - </p> - <ul> - <li> - Python 3 is the latest-and-greatest version. It gets all the new features and is in - active development. - </li> - <li> - Python 2 lacks many features available in Python 3 and is mechanically different in a - few important areas. - </li> - <li> - Python 2 is being sunset and will reach its end of life in 2020. It will not be - maintained past 2020. There will be no Python 2.8. - </li> - <li> - Most libraries now fully support Python 3, and many are dropping or have dropped support - for Python 2. - </li> - </ul> - - <p> - The only reason a user may want to stick with Python 2 is if they are stuck working a job - with a legacy codebase that cannot or will not be updated to work with Python 3. To users - in those situations: Commiserations. - </p> - </div> - - <div class="uk-width-1-3@m"> - <strong>What IDE/Editor should I use? Should I use an IDE if I'm a beginner?</strong> - </div> - <div class="uk-width-2-3@m"> - <p> - If you're a beginner, you should not be using an IDE. This is because IDEs do a lot of - basic things automatically where a beginner should learn to do things themselves - for - example, some IDEs can generate huge chunks of code or catch beginner errors without you - even noticing you'd made a typo. - </p> - <p> - If you're not a beginner or you decide to try an IDE regardless, we heavily recommend - <a href="https://www.jetbrains.com/pycharm/">PyCharm</a>. This is a well-known IDE which - is entirely in a league of its own, and has a very capable free "community" edition that - will serve most people's needs. - </p> - <p> - We've listed off some of our favourite editors and IDEs on - <a href="{{ url_for("main.info.resources") }}">our resources page</a>. Feel free to - take a look if you're not sure what's out there. - </p> - <p> - By the way, we host <a href="{{ url_for("main.jams.index") }}">quarterly code jams</a> - for the users of our community, and the prize for winning it is a one-year PyCharm Pro - license - sponsored by JetBrains. If you like PyCharm and are thinking of grabbing a copy - of Pro, why not join in? - </p> - </div> - - <div class="uk-width-1-3@m"> - <strong>What's wrong with "Learn Python the Hard Way"?</strong> - </div> - <div class="uk-width-2-3@m"> - <p> - Learn Python the Hard Way, Zed Shaw's most infamous work, is largely considered by the - Python community to be poor-quality and misleading in general. This is due to numerous - issues with the material, which include being extremely opinionated and sometimes - condescending, out of date, confusing and even wildly incorrect in some places. - </p> - <p> - Learners that have used Learn Python the Hard Way as their primary learning material often - find themselves confused and asking questions that really don't make that much sense - it's - also been observed that learners in this position tend to suffer heavily from the infamous - <a href="http://xyproblem.info/">XY Problem</a>. - </p> - <p> - For more information on why you should avoid Learn Python the Hard Way, you can have a look - at <a href="https://sopython.com/wiki/LPTHW_Complaints">this article on the sopython - wiki</a>, - which enumerates the most egregious issues with it. - </p> - </div> - - <div class="uk-width-1-3@m"> - <strong>If I type "python" or "pip" into a terminal, I get "command not found".</strong> - </div> - <div class="uk-width-2-3@m"> - <p> - That's not a question, but there's a few things you can look at to try to solve this. - </p> - <ul> - <li> - If you're on Windows, the python installer has an option labelled "Add to PATH" - - Make sure you check this when you install python. If you forgot to do that the - first time, then the easiest way to solve this problem is to reinstall Python - </li> - <li> - If you're on Windows, there's a good chance that <code>python</code> and - <code>pip</code> aren't what you actually need to run! Some options you could - try include <code>py -3</code>, <code>python3</code> or <code>python36</code> - if - one of these works, then you should be able to use <code>py -3 -m pip</code>, - <code>pip3</code> or <code>pip36</code> as well - </li> - <li> - If you're on a Mac, Python comes with the OS - however, it's quite likely to be - an old version. You can solve this by using <a href="https://brew.sh">Homebrew</a> - to install a more recent version of Python, which should be made available as - <code>python3</code> - </li> - </ul> - </div> - - <div class="uk-width-1-3@m"> - <strong>Why can't I import this module?</strong> - </div> - <div class="uk-width-2-3@m"> - <p> - When finding yourself unable to import something in Python, you can follow these - steps to figure it out: - </p> - <ul> - <li> - Is the module part of <a href="https://docs.python.org/3/library/">Python's standard - library</a>? - </li> - <li> - If not, have you installed it? If the module <a href="https://pypi.org/search/">is on - PyPi</a>, - you can install it using pip in a terminal: <code>pip install module_name</code> - </li> - <li> - If you think you've installed it, try upgrading it with pip in a terminal: - <code>pip install -U module_name</code> - Make sure there were no errors during - installation - </li> - <li> - If all else fails, make sure you've read the module documentation fully, and ensure - that you're following it correctly - </li> - <li> - If you're sure that you've done everything correctly, you may have found a bug - come - and chat to us, and we might recommend that you report your problem to the developer - </li> - </ul> - </div> - - <div class="uk-width-1-3@m"> - <strong>What's PEP8? Should I care about code style?</strong> - </div> - <div class="uk-width-2-3@m"> - <p> - <a href="https://www.python.org/dev/peps/pep-0008/">Python Enhancement Proposal #8</a> - is known as the official Python style guide. It sets out a lot of very clear guidelines - which help you structure your code. - </p> - <p> - One of the most useful things you can do when writing your code is to follow a style - guide. It makes it easier to read your code overall, but a consistent style guide - is very important as it means that everyone that contributes to your project is - writing code in the same style - meaning everyone will be able to read it. As PEP - itself reads: "A foolish consistency is the hobgoblin of little minds". - </p> - <p> - PEP8 isn't the only style guide available to you, but it is the most widely used - and best-understood of them - and for that reason, we do recommend you use it. That - said, - <a href="https://google.github.io/styleguide/pyguide.html">Google's Python Style Guide</a> - is also widely used by Google engineers. - </p> - </div> - - <div class="uk-width-1-1@s"> - <h2 class="uk-heading-divider" id="community"> - Community Questions - - <a href="#community" class="uk-text-primary uk-float-right" title="Permanent link to this header"> - <i class="far fa-link"></i> - </a> - </h2> - </div> - - <div class="uk-width-1-3@m"> - <strong>Why did you move to GitLab? Do you hate Microsoft?</strong> - </div> - <div class="uk-width-2-3@m"> - <p> - While many of our users do prefer to work on Linux, we don't hate Microsoft. While - <a href="https://www.theregister.co.uk/2018/06/04/microsoft_buys_github/"> - the news about Microsoft's acquisition of GitHub - </a> - did prompt us to initially mirror our GitHub repositories to GitLab for safety, we didn't - outright make the move because of the acquisition - in fact, some of our staff members - had been suggesting we use it from the start! Here's some of the reasons we decided - to move: - </p> - <ul> - <li> - Prior to moving to GitLab, our development efforts were split among three services: - <a href="https://clickup.com/">ClickUp</a> for issue tracking, - <a href="https://github.com/">GitHub</a> for code storage and collaboration, - and <a href="https://clickup.com/">Travis</a> for continuous integration and testing. - GitLab is a fantastic alternative to all of these services, and moving to it has allowed - us to consolidate our efforts in one place. - </li> - <li> - For a long time now, GitLab has been innovating on features and pushing them to production - much faster than GitHub. Using GitLab gives us far more options when it comes to issue - management, merge requests, continuous integration and deployment - to name - a few things. - </li> - <li> - In the vast majority of cases where GitHub and GitLab solve the same problem or - have a similar feature, GitLab does it better. - </li> - <li> - GitLab has had free private repositories for some time now, and these are convenient - for us to store internal documentation and tasks in. - </li> - <li> - GitLab is fully open-source and quite easy to host yourself. In the event that the - public platform ends up dying or being abused by its staff, we can simply spin - up our own instance and keep on working as if there were no problems. - </li> - </ul> - </div> - - <div class="uk-width-1-1@s"> - <h2 class="uk-heading-divider" id="misc"> - Misc. Questions - - <a href="#misc" class="uk-text-primary uk-float-right" title="Permanent link to this header"> - <i class="far fa-link"></i> - </a> - </h2> - </div> - - <div class="uk-width-1-3@m"> - <strong>What does "real" Python development look like?</strong> - </div> - <div class="uk-width-2-3@m"> - <p> - Python is a very versatile language, and a real-life application using it can take - many forms. That said, we do plenty of Python development here ourselves. If - you're curious about this question, then why not take a look at - <a href="https://gitlab.com/python-discord">our projects</a>? - </p> - </div> - </div> - </article> - </div> - </div> -{% endblock %} diff --git a/templates/main/info/help.html b/templates/main/info/help.html deleted file mode 100644 index 9cc09af2..00000000 --- a/templates/main/info/help.html +++ /dev/null @@ -1,461 +0,0 @@ -{% extends "main/base.html" %} -{% block title %}Getting Help{% endblock %} -{% block og_title %}Getting Help{% endblock %} -{% block og_description %}A guide on how to ask good questions, how to avoid annoying those helping out, and how to interpret answers{% endblock %} -{% block content %} - <div class="uk-section"> - <div class="uk-container uk-container-small"> - <article class="uk-article"> - <h1 class="uk-article-title hover-title" id="top"> - Getting Help - - <a href="#top" class="uk-text-primary" title="Permanent link to this header"> - <i class="fas fa-paragraph" data-fa-transform="shrink-8"></i> - </a> - </h1> - <p class="uk-article-meta"> - Everything's exploding, customers are complaining, management's on the fritz! - </p> - <p> - This document is intended to provide you with the information you need to get help as quickly and - effectively as possible. If you're stuck on a problem or you just don't understand something, feel - free to join us and ask for help - you can use this as a reference when forming your question. - </p> - <p> - Much of this document is based on the sentiments expressed by Eric Steven Raymond and Rick Moen - in their essay, <a href="http://www.catb.org/esr/faqs/smart-questions.html">How To Ask Questions The Smart Way</a>. - Please note that the essay is very long and may be considered rude by some. Additionally, the people - behind that essay are in no way affiliated with us - please do not bother them with your Python - problems. - </p> - <h2 class="uk-article-title hover-title" id="before"> - Before You Ask - - <a href="#before" class="uk-text-primary" title="Permanent link to this header"> - <i class="fas fa-paragraph" data-fa-transform="shrink-8"></i> - </a> - </h2> - <p class="uk-article-meta"> - Take stock of your problem, and do your homework. - </p> - <p> - Before you ask your question, there are a few things you can do to find an answer on your own. - Experienced developers will do the following: - </p> - <ul> - <li>Read the official documentation for whatever you're working with</li> - <li>Use a debugger to inspect your code</li> - <li>Do some research online - for example, on Stack Overflow</li> - <li>Read the source code for whatever you're working with</li> - <li>Search the message history of the help channels</li> - </ul> - <p> - Essentially, doing your research is the first step towards a solution to any problem. If your - problem isn't extremely general, we're going to be doing exactly these steps ourselves when you ask, - so doing the legwork beforehand saves everyone a lot of time. - </p> - </article> - </div> - </div> - <div class="uk-section uk-section-muted"> - <div class="uk-container uk-container-small uk-text-center"> - <blockquote> - <p> - <i class="fas fa-quote-left fa-pull-left"></i> - <i class="fas fa-quote-right fa-pull-right"></i> - Creativity requires input, and that's what research is. You're gathering material with which to - build. - </p> - <small> - Gene Luen Yang - </small> - </blockquote> - </div> - </div> - <div class="uk-section"> - <div class="uk-container uk-container-small"> - <article class="uk-article"> - <p> - If you're an absolute beginner, take a moment to step back from the problem. - Have you <a href="https://wiki.python.org/moin/BeginnersGuide/NonProgrammers">read a book or done a - tutorial</a>? There's a huge amount of resources out there, many of which are going to help you a lot more than - us answering the beginners' questions for you. If you're following a tutorial, book or course and - you don't understand something, then <strong>that</strong> is the correct time to ask a beginners' - question. Of course, we won't turn you away if you do have a beginners' question — by all - means, - come to us if you do have a problem. - </p> - <p> - Have you read the official documentation for the module or technology you're working with? The - <a href="https://docs.python.org/3/">official Python 3 docs</a> are a fantastic and valuable - resource, so if you're using a bundled module, your first port of call should be there. If you're - using a third-party library, often they will have some official documentation uploaded somewhere - — - try having a Google around, or take a look <a href="https://pypi.org">at PyPi</a> in case they've - linked it from there. - </p> - <p> - If you can't find the documentation or you find it lacking, the next place to look is the source - code. - Grab a decent IDE (we recommend <a href="https://www.jetbrains.com/pycharm/">PyCharm</a> Community) - and a coffee, download a copy of the project and open it up, and get to browsing! - </p> - <p> - If you're still confused, try searching the Internet for people that have already had the same - problem. Often, you won't be the only person to have encountered the issue you're dealing with - more often - than not, you'll find a GitLab ticket or a StackOverflow question along with a fix or answer to your - question already posted. - </p> - <p> - If none of the above helps you or you're lost, scared and alone, feel free to continue on to the - Discord server. You can use the search feature (the <i class="fas fa-search"></i> at the top right) to check - whether someone else has asked your question recently, or just feel free to pick one of the help channels - and ask your question. - </p> - <h2 class="uk-article-title hover-title" id="good-question"> - A Good Question - - <a href="#good-question" class="uk-text-primary" title="Permanent link to this header"> - <i class="fas fa-paragraph" data-fa-transform="shrink-8"></i> - </a> - </h2> - <p class="uk-article-meta"> - Thank you for helping us help you help us all. - </p> - <p> - When you're ready to ask a question, there's a few things you should have to hand before forming - a query. - </p> - <ul> - <li> - A code example that illustrates your problem - <ul> - <li>If possible, make this a minimal example rather than an entire application</li> - </ul> - </li> - <li>Details on how you attempted to solve the problem on your own</li> - <li>Full version information — for example, <em class="uk-text-primary">"Python 3.6.4 with - discord.py 1.0.0a"</em></li> - </ul> - <p> - Your question should be informative, but to the point. More importantly, how you phrase your - question - and how you address those that may help you is crucial. Courtesy never hurts, and please type - using correctly-spelled and grammatical language as far as you possibly can. - </p> - <p> - When you're inspecting a problem, don't be quick to assume that you've found a bug, or that your - approach is correct. While it helps to detail what exactly you're trying to do, you should also - be able to give us the bigger picture - describe the goal, not just the step. Describe the problem's - symptoms in chronological order - not your guesses as to their cause. - </p> - </article> - </div> - </div> - <div class="uk-section uk-section-muted"> - <div class="uk-container uk-container-small uk-text-center"> - <div class="uk-child-width-expand" uk-grid> - <div class="uk-text-primary"> - <p class="uk-text-bold uk-text-center"> - Bad Questions - </p> - </div> - <div class="uk-text-primary"> - <p class="uk-text-bold uk-text-center"> - Good Questions - </p> - </div> - </div> - <div class="uk-grid-divider uk-child-width-expand" uk-grid> - <div class="uk-text-danger"> - <p> - Where can I find information on discord.py? - </p> - <p class="uk-text-meta"> - This question suggests that the person asking it hasn't done any research, or even a simple - Google search. - </p> - </div> - <div class="uk-text-success"> - <p> - I used Google to try to find more information about "discord.py 1.0.0a", but I couldn't - really - find anything useful. Does anyone know where I might find a guide to writing commands - using this library? - </p> - </div> - </div> - <div class="uk-child-width-expand" uk-grid> - <div> - <hr class="uk-divider-icon"/> - </div> - <div> - <hr class="uk-divider-icon"/> - </div> - </div> - <div class="uk-grid-divider uk-child-width-expand" uk-grid> - <div class="uk-text-danger"> - <p> - Pillow puts my text at the bottom of the image instead of where I wanted it. Why is it broken? - </p> - <p class="uk-text-meta"> - This question assumes that the problem is with Pillow itself, and that it isn't - the questioner's fault. It also doesn't provide enough information on the problem. - </p> - </div> - <div class="uk-text-success"> - <p> - Pillow appears to insert text at the bottom of the image if the given X coordinate is negative. - I had a look at the documentation and searched Stack Overflow, but I couldn't find any - information on using negative coordinates to position text. Has anyone attempted this? - </p> - </div> - </div> - <div class="uk-child-width-expand" uk-grid> - <div> - <hr class="uk-divider-icon"/> - </div> - <div> - <hr class="uk-divider-icon"/> - </div> - </div> - <div class="uk-grid-divider uk-child-width-expand" uk-grid> - <div class="uk-text-danger"> - <p> - I'm having some trouble writing a YouTube random URL generator - can anyone help? - </p> - <p class="uk-text-meta"> - This question provides no information on the problem, and asks for help in a way that isn't - engaging - some people will find this annoying, as answering your question is guaranteed - to result in another question. - </p> - </div> - <div class="uk-text-success"> - <p> - My YouTube random URL generator appears to be returning false positives for tested URLs, - stating that a URL points to a real video when that video doesn't actually exist. Obviously - there's some issue with how this is checked, but I can't put my finger on it. Is there anything - I can check? - </p> - </div> - </div> - <div class="uk-child-width-expand" uk-grid> - <div> - <hr class="uk-divider-icon"/> - </div> - <div> - <hr class="uk-divider-icon"/> - </div> - </div> - <div class="uk-grid-divider uk-child-width-expand" uk-grid> - <div class="uk-text-danger"> - <p> - I want to share a YouTube video with my friend, but the video doesn't move when I print the page. - How do I make the video move? - </p> - <p class="uk-text-meta"> - This question assumes a specific (wrong) approach, and isn't open-ended enough to account for - the possibility of a better solution. - </p> - </div> - <div class="uk-text-success"> - <p> - I'm attempting to figure out the best way to share a YouTube video with my friend that doesn't - have the Internet at home. I can't think of a better approach than printing the page, which - obviously doesn't help much given that the video doesn't move on the paper - can anyone think - of a better approach to this? - </p> - </div> - </div> - <div class="uk-child-width-expand" uk-grid> - <div> - <hr class="uk-divider-icon"/> - </div> - <div> - <hr class="uk-divider-icon"/> - </div> - </div> - <div class="uk-grid-divider uk-child-width-expand" uk-grid> - <div class="uk-text-danger"> - <p> - I was given this assignment by my teacher, but I'm not sure how to approach it. Does anyone - have any ideas? - </p> - <p class="uk-text-meta"> - This question is clearly a homework question. Homework is supposed to challenge you, and we - will not provide solutions to homework. Instead, ask a more general question. - </p> - </div> - <div class="uk-text-success"> - <p> - I have a list of numbers - how do I calculate how many of them are even? Is there a way - to remove all the odd numbers from my list? Are there quick ways to find the average of - a list of numbers, or add them all together? - </p> - </div> - </div> - </div> - </div> - <div class="uk-section"> - <div class="uk-container uk-container-small"> - <article class="uk-article"> - <h2 class="uk-article-title hover-title" id="answers"> - Interpreting Answers - - <a href="#answers" class="uk-text-primary" title="Permanent link to this header"> - <i class="fas fa-paragraph" data-fa-transform="shrink-8"></i> - </a> - </h2> - <p class="uk-article-meta"> - Wow, rude. - </p> - <p> - Programmers have a certain set of mannerisms. While we all try to be as courteous with our replies - as possible, occasionally it may seem as if a helper is annoyed or disinterested in your question. - This isn't personal - it's just part of our culture. Remember that the people you're asking for help - are humans and that they're here voluntarily, in their free time. - </p> - <p> - If you've asked a question and you're told to read the documentation or search the web, you should - do that. When this happens, it's often the case that the person responding has the information you need - open in their web browser and either thinks that it's very easy to find, or that you would learn - more from seeking out the source of the information yourself. If you've already done this, you should - tell us by including it in your question! - </p> - <p> - If you don't understand an answer, don't immediately bounce back and demand clarification. Use the - tools available to you (the internet, documentation, source code) to help you understand the answer, and - if you still can't figure it out, ask for clarification and provide any relevant information you learned - during your research. - </p> - </article> - </div> - </div> - - <div class="uk-section uk-section-muted"> - <div class="uk-container uk-container-small uk-text-center"> - <blockquote> - <p> - <i class="fas fa-quote-left fa-pull-left"></i> - <i class="fas fa-quote-right fa-pull-right"></i> - Successful people ask better questions, and as a result, they get better answers. - </p> - <small> - Tony Robbins - </small> - </blockquote> - </div> - </div> - - <div class="uk-section"> - <div class="uk-container uk-container-small"> - <article class="uk-article"> - <p> - Much of what looks like rudeness within programming communities is not intended to be offensive and - it's often just a product of the down-to-earth, direct style of communication that is typical in - a community that is more concerned with solving problems than anything else. If you perceive - rudeness, try to react calmly. If a user really is acting out, then chances are that a member of staff will - call them out on it. If this doesn't happen, contact a member of staff directly and they will try - to clarify this with you. - </p> - <p> - It's okay to mess up. It happens to all of us. That said, if you mess up badly enough, it's likely - that you will be corrected there and then, in public and with a verbal scalpel. Take this as a - learning experience and don't let it get to you - this is a common and appropriate response in - many programming circles. Community standards do not maintain themselves - they're maintained by - people applying actively them, visibly, in public. - </p> - - <h2 class="uk-article-title hover-title" id="what-not-to-ask"> - What Not To Ask - - <a href="#what-not-to-ask" class="uk-text-primary" title="Permanent link to this header"> - <i class="fas fa-paragraph" data-fa-transform="shrink-8"></i> - </a> - </h2> - <p class="uk-article-meta"> - Sample questions to avoid as much as possible. - </p> - - <p class="uk-text-lead"> - Can I ask a question? - </p> - <p> - Yes. Always yes. Just ask it. - </p> - - <p class="uk-text-lead"> - Can I use str() on a discord.py Channel object? - </p> - <p> - Try it yourself and see. Experimentation is a great way to learn, and you'll save a lot of time by - just trying things out. Don't be afraid of your computer! - </p> - - <p class="uk-text-lead"> - My code doesn't work - </p> - <p> - This isn't a question, and it provides absolutely no context or information. Depending on the moods - of the people that are around, you may even find yourself ignored. Don't be offended by this - just - try - again with a better question. - </p> - </article> - </div> - </div> - - <div class="uk-section uk-section-muted"> - <div class="uk-container uk-container-small uk-text-center"> - <blockquote> - <p> - <i class="fas fa-quote-left fa-pull-left"></i> - <i class="fas fa-quote-right fa-pull-right"></i> - So much of life isn’t about having the right answer; it’s about knowing the right question. - </p> - <small> - Duane Hewitt - </small> - </blockquote> - </div> - </div> - - <div class="uk-section"> - <div class="uk-container uk-container-small"> - <article class="uk-article"> - <p class="uk-text-lead"> - Can anyone help me break into someone's Facebook account?<br/> - Can anyone help me download anime from this streaming site's listing page?<br/> - How do I write a virus? - </p> - <p> - We will absolutely not help you with hacking, pirating, or any other illegal activity. A question - like this is likely to be followed up with a ban if the person asking it doesn't back down quickly. - </p> - - <p class="uk-text-lead"> - Can I send you a private message? - </p> - <p> - No. We do not provide one-on-one tutoring - you can hire someone locally if you really need that. We - also prefer that questions are answered in a public channel as it means that everyone else present - is able to learn from them. If you're working with code that you are unable to disclose for any - reason, you should try to make your question more general and write a separate, small piece of code - to illustrate your problem. - </p> - - <p class="uk-text-lead"> - Can you help me over Teamviewer? - </p> - <p> - No. We will not help you by accessing your computer remotely, or watching a video stream of your - problem, unless the problem is something that inherently requires that. The reason for this is that - our time is limited, and watching a video or participating in a screen-sharing session means that we - have to focus on you, instead of being able to deal with other people while you're figuring out an - answer. If your problem is graphical and you can't adequately describe it without a visual, take a - screenshot or provide a short screen recording to illustrate your problem. - </p> - </article> - </div> - </div> -{% endblock %}
\ No newline at end of file diff --git a/templates/main/info/index.html b/templates/main/info/index.html deleted file mode 100644 index 07e1a4d8..00000000 --- a/templates/main/info/index.html +++ /dev/null @@ -1,43 +0,0 @@ -{% extends "main/base.html" %} -{% block title %}Information{% endblock %} -{% block og_title %}Information{% endblock %} -{% block og_description %}Informational pages, listings and guides{% endblock %} -{% block content %} - <div class="uk-section"> - <div class="uk-container uk-container-small"> - <article class="uk-article"> - <h1 class="uk-article-title hover-title" id="top"> - Information - - <a href="#top" class="uk-text-primary" title="Permanent link to this header"> - <i class="fas fa-paragraph" data-fa-transform="shrink-8"></i> - </a> - </h1> - <p class="uk-article-meta"> - What you need, when you need it - </p> - - <p> - <strong>Code Jams</strong> - <a href="{{ url_for('main.info.jams') }}"><i class="fas fa-link"></i></a> - <br /> - <span class="uk-text-meta">Information on our monthly code jams, where users are paired into teams to compete with each other</span> - </p> - - <p> - <strong>Getting Help</strong> - <a href="{{ url_for('main.info.help') }}"><i class="fas fa-link"></i></a> - <br /> - <span class="uk-text-meta">How to ask for help - and how to interpret the responses</span> - </p> - - <p> - <strong>Resources</strong> - <a href="{{ url_for('main.info.resources') }}"><i class="fas fa-link"></i></a> - <br /> - <span class="uk-text-meta">A page full of useful resources for learning and working with Python</span> - </p> - </article> - </div> - </div> -{% endblock %}
\ No newline at end of file diff --git a/templates/main/info/resources.html b/templates/main/info/resources.html deleted file mode 100644 index 574d0bfb..00000000 --- a/templates/main/info/resources.html +++ /dev/null @@ -1,103 +0,0 @@ -{% extends "main/base.html" %} -{% block title %}Resources{% endblock %} -{% block og_title %}Resources{% endblock %} -{% block og_description %}A list of helpful resources for beginner and experienced Python programmers alike{% endblock %} -{% block content %} - <div class="uk-section"> - <div class="uk-container uk-container-small"> - <article class="uk-article"> - <h1 class="uk-article-title hover-title" id="top"> - Resources - - <a href="#top" class="uk-text-primary" title="Permanent link to this header"> - <i class="fas fa-paragraph" data-fa-transform="shrink-8"></i> - </a> - </h1> - <p class="uk-article-meta"> - Learn you a Haskell for great- wait, wrong book - </p> - <p> - This page is intended to be a listing of useful resources for beginner and experienced Python - programmers alike. This page is generated from a JSON file - <a href="https://gitlab.com/python-discord/projects/site/blob/master/static/resources.json">on GitLab</a> - - if there's a great resource that you love and you don't see it on this page, feel free to submit a - merge request! - </p> - <p> - Some resources aren't free - the below key will help you figure out whether you need to pay for - a resource or not. You can also hover them for more information on the payment (or tap them on - mobile). - </p> - <div class="uk-text-center uk-flex uk-flex-center"> - <div class="payment-icon"> - <img src="{{ static_file("images/payment_icons/green.svg") }}" uk-tooltip="Free" /> - <span>Free</span> - </div> - - <div class="payment-icon"> - <img src="{{ static_file("images/payment_icons/yellow.svg") }}" uk-tooltip="Payment Optional" /> - <span>Payment optional</span> - </div> - - <div class="payment-icon"> - <img src="{{ static_file("images/payment_icons/red.svg") }}" uk-tooltip="Paid" /> - <span>Paid</span> - </div> - </div> - {% if categories is none %} - <div class="uk-alert-danger" uk-alert> - <p> - We were unable to load the <code>resources.json</code> file. If you see this, please - notify us! - </p> - </div> - {% else %} - {% for category_name, category_data in categories.items() %} - <h2 class="uk-heading-divider hover-title" id="{{ category_name.replace(" ", "-").lower() }}"> - {{ category_name }} - - <a href="#{{ category_name.replace(" ", "-").lower() }}" class="uk-text-primary" title="Permanent link to this header"> - <i class="fas fa-paragraph" data-fa-transform="shrink-8"></i> - </a> - <br/> - <p class="uk-article-meta"> - {{ category_data.description }} - </p> - </h2> - {% for item, data in category_data.resources.items() %} - <p> - {% if data["payment"] == "optional" %} - {% set file_path = static_file("images/payment_icons/yellow.svg") %} - {% elif data["payment"] == "paid" %} - {% set file_path = static_file("images/payment_icons/red.svg") %} - {% else %} - {% set file_path = static_file("images/payment_icons/green.svg") %} - {% endif %} - - {% if data["payment_description"] %} - <img class="uk-float-left payment-description" uk-tooltip="{{ data["payment_description"] }}" src="{{ file_path }}" /> - {% else %} - <img class="uk-float-left payment-description" uk-tooltip="{{ data["payment"].title() }}" src="{{ file_path }}" /> - {% endif %} - - <div class="resource-title"> - <strong>{{ item }}</strong> <br /> - <div class="uk-button-group"> - {% for url in data.urls %} - <a class="uk-button uk-button-default uk-button-small" - uk-tooltip="title: {{ url.title }}; pos: bottom" - href="{{ url.url }}"><i class="{{ url.classes }}"></i></a> - {% endfor %} - </div> - </div> - - <br class="uk-float-" /> - <span class="uk-text-meta">{{ data.description }}</span> - </p> - {% endfor %} - {% endfor %} - {% endif %} - </article> - </div> - </div> -{% endblock %}
\ No newline at end of file diff --git a/templates/main/jams/already.html b/templates/main/jams/already.html deleted file mode 100644 index 16cba149..00000000 --- a/templates/main/jams/already.html +++ /dev/null @@ -1,26 +0,0 @@ -{% extends "main/base.html" %} -{% block title %}Code Jams | Already applied{% endblock %} -{% block og_title %}Code Jams | Already applied{% endblock %} - -{% block content %} -<div class="uk-section"> - <div class="uk-container uk-container-small"> - <h1 class="uk-header uk-article-title"> - Code Jam {{ jam.number }}: {{ jam.title }} - </h1> - <p class="uk-article-meta"> - Bring the thunder! - </p> - - <p class="uk-alert uk-alert-danger"> - Thanks for your interest in this code jam! It looks like we already have an application here for you, - so please just sit back, relax, and we'll let you know whether you've been selected for this code - jam when the time comes. - </p> - - <a class="uk-button uk-button-secondary uk-align-center" href="{{ url_for("main.jams.index") }}"> - <i class="uk-icon fa-fw far fa-arrow-left"></i> Back to all code jams - </a> - </div> -</div> -{% endblock %} diff --git a/templates/main/jams/banned.html b/templates/main/jams/banned.html deleted file mode 100644 index fa47c1ec..00000000 --- a/templates/main/jams/banned.html +++ /dev/null @@ -1,44 +0,0 @@ -{% extends "main/base.html" %} -{% block title %}Code Jams | Banned{% endblock %} -{% block og_title %}Code Jams | Banned{% endblock %} - -{% block content %} -<div class="uk-section"> - <div class="uk-container uk-container-small"> - <h1 class="uk-header uk-article-title"> - Code Jam {{ jam.number }}: {{ jam.title }} - </h1> - <p class="uk-article-meta"> - Bring the thunder! - </p> - - {% if infraction.number == -1 %} - <p class="uk-alert uk-alert-danger"> - Thanks for your interest in this code jam! Unfortunately, due to your previous actions, you have been - permanently banned from participating in our code jams. - <br /> - <br /> - The reason given is: <strong>{{ infraction.reason }}</strong> - <br /> - <br /> - If you feel that this is a mistake, please feel free to contact one of the admins on Discord. - </p> - {% else %} - <p class="uk-alert uk-alert-danger"> - Thanks for your interest in this code jam! Unfortunately, due to your previous actions, you have been - temporarily banned from participating in our code jams. - <br /> - <br /> - The reason given is: <strong>{{ infraction.reason }}</strong> - <br /> - <br /> - If you feel that this is a mistake, please feel free to contact one of the admins on Discord. - </p> - {% endif %} - - <a class="uk-button uk-button-secondary uk-align-center" href="{{ url_for("main.jams.index") }}"> - <i class="uk-icon fa-fw far fa-arrow-left"></i> Back to all code jams - </a> - </div> -</div> -{% endblock %} diff --git a/templates/main/jams/index.html b/templates/main/jams/index.html deleted file mode 100644 index 3546bd71..00000000 --- a/templates/main/jams/index.html +++ /dev/null @@ -1,144 +0,0 @@ -{% extends "main/base.html" %} -{% block title %}Code Jams | Home{% endblock %} -{% block og_title %}Code Jams | Home{% endblock %} -{% block page_classes %}uses-rst{% endblock %} -{% block content %} -<div class="uk-section"> - <div class="uk-container uk-container-small"> - <article class="uk-article"> - <div uk-grid class="uk-grid-large"> - <div class="uk-width-expand"> - <h1 class="uk-article-title"> - Code Jams - </h1> - <p class="uk-article-meta"> - We jammin' - </p> - - <p> - Every three months or so, we aim to host a server-wide code jam, suitable for all members of the server. In - these, we announce a theme and date in advance, and users may sign up via a link provided in the - announcements channel on the server. Once the sign-up period is over, users are grouped into - teams. On the day of the code jam, we announce a task - each team will then work on a solution - to this task. - </p> - <p> - Once the code jam is over, our staff team will review and test each submission. Once that's done, - a winner will be decided! - </p> - <p> - If you'd like to join one of our code jams, feel free to ask a member of staff about the next one. - </p> - </div> - - <figure class="jetbrains uk-width-1-4@l uk-width-1-4@m uk-width-1-1@s"> - <h1 class="uk-article-title"> - Sponsors - </h1> - <p class="uk-article-meta"> - Our generous benefactors - </p> - - <a href="https://jetbrains.com"> - <img src="{{ static_file("images/jetbrains.png") }}" class="jam-image"/> - </a> - </figure> - </div> - - <br /> - <a href="{{ url_for("wiki.page", page="jams") }}" class="uk-button uk-button-secondary"> - <i class="uk-icon fa-fw far fa-book"></i> Wiki - </a> - <a href="{{ url_for("wiki.page", page="jams") }}" class="uk-button uk-button-secondary"> - <i class="uk-icon fa-fw far fa-list"></i> Rules & Guidelines - </a> - <a href="{{ url_for("main.jams.info") }}" class="uk-button uk-button-secondary"> - <i class="uk-icon fa-fw far fa-code-branch"></i> Git Primer - </a> - - {% if jams %} - {% for jam in jams %} - <h1 class="uk-article-title"> - Code Jam {{ jam.number }}: {{ jam.title }} - <span class="uk-float-right"> - {% if jam.state == "announced" %} - {% if has_applied_to_jam(jam) %} - <a class="uk-button uk-button-default uk-disabled" href="#"> - <i class="uk-icon fa-fw far fa-check"></i> Applied - </a> - {% else %} - <a class="uk-button uk-button-primary" href="{{ url_for("main.jams.join", jam=jam.number) }}"> - <i class="uk-icon fa-fw far fa-plus"></i> Join - </a> - {% endif %} - {% else %} - {% if jam.teams and jam.teams | length > 0 %} - <a class="uk-button uk-button-primary" href="{{ url_for('main.jams.jam_team_list', jam_id=jam.number) }}"> - <i class="uk-icon fa-fw far fa-users"></i> Teams - </a> - {% endif %} - <a class="uk-button uk-button-default" target="_blank" href="{{ jam.repo }}"> - <i class="uk-icon fa-fw fab fa-gitlab"></i> - </a> - {% endif %} - </span> - <p class="uk-article-meta"> - State: {{ jam.state.title() }} - </p> - </h1> - <div class="uk-grid-match uk-grid-small uk-text-center uk-grid-gap-none uk-grid-collapse jam-tiles uk-margin-small-top" uk-grid> - <div class="uk-width-1-2@m uk-tile uk-tile-success uk-padding-small"> - <p class="uk-h4 jam-tile-text">Start: {{ format_datetime(jam.date_start) }} UTC</p> - </div> - <div class="uk-width-1-2@m uk-tile uk-tile-danger uk-padding-small"> - <p class="uk-h4 jam-tile-text">End: {{ format_datetime(jam.date_end) }} UTC</p> - </div> - {% if jam.participants %} - {% if jam.winning_team %} - <a href="{{ url_for('main.jams.jam_team_list', jam_id=jam.number) }}" class="uk-link-reset uk-width-1-2@m uk-tile uk-tile-primary uk-padding-small"> - <p class="uk-h4 jam-tile-text">Participants: {{ jam.participants | length }}</p> - </a> - <a href="{{ url_for('main.jams.team_view', team_id=jam.winning_team.id) }}" class="uk-link-reset uk-width-1-2@m uk-tile uk-tile-winner uk-padding-small"> - <p class="uk-h4 jam-tile-text">Champions: {{ jam.winning_team.name }}</p> - </a> - {% else %} - <a href="{{ url_for('main.jams.jam_team_list', jam_id=jam.number) }}" class="uk-link-reset uk-width-1-1@m uk-tile uk-tile-primary uk-padding-small"> - <p class="uk-h4 jam-tile-text">Participants: {{ jam.participants | length }}</p> - </a> - {% endif %} - {% endif %} - </div> - <p> - {% if jam.state in ["running", "judging", "finished"] %} - <span class="uk-label uk-align-right theme-label"> - Theme: {{ jam.theme }} - </span> - {% endif %} - <p> - - </p> - - {{ jam.info_html | safe }} - - {% if jam.state in ["running", "judging", "finished"] %} - <br /> - - {{ jam.task_html | safe }} - {% endif %} - - {% if jam.state == "finished" %} - <br /> - - {{ jam.end_html | safe }} - {% endif %} - - {% endfor %} - {% else %} - <p> - Looking for our code jams? There's nothing here just yet! - </p> - {% endif %} - </article> - </div> -</div> -{% endblock %} diff --git a/templates/main/jams/info.html b/templates/main/jams/info.html deleted file mode 100644 index 920256a6..00000000 --- a/templates/main/jams/info.html +++ /dev/null @@ -1,128 +0,0 @@ -{% extends "main/base.html" %} -{% block title %}Code Jams | Git Primer{% endblock %} -{% block og_title %}Code Jams | Git Primer{% endblock %} -{% block og_description %}Information about our code jams - monthly events where users are grouped into pairs to solve a Python task{% endblock %} -{% block content %} - <div class="uk-section"> - <div class="uk-container uk-container-small"> - <article class="uk-article"> - <h2 class="uk-article-title hover-title" id="getting-started"> - Getting Started - - <a href="#getting-started" class="uk-text-primary" title="Permanent link to this header"> - <i class="fas fa-paragraph" data-fa-transform="shrink-8"></i> - </a> - </h2> - <p class="uk-article-meta"> - Git good - Dropbox bad - </p> - <p> - All of our code jams happen on <a href="http://gitlab.com/">GitLab</a>. If you don't have an - account there, you'll need to create one before you can join one of our code jams. Teams are required - to fork the repository we have set up for the current code jam, commit their code to their fork, and - then open a merge request with their project on the code jam repository. - </p> - <p> - Once the challenge task has been announced, head to the link provided to reach the challenge repository. - In order to work on the task, you will need to fork the repository - this will create a copy of the - repository under your account, which you will be able to work on with your teammates. To do so, - log into GitLab and click on the "Fork" button on the repository page. Select your username from the - dialogue, and it will be forked to your account. - </p> - <figure> - <img src="{{ static_file('images/jams/jams_1.png') }}" class="uk-align-center uk-border-rounded" /> - <img src="{{ static_file('images/jams/jams_2.png') }}" class="uk-align-center uk-border-rounded" /> - </figure> - <p> - Once this has been done, you should find yourself looking at your new copy of the repository. Next - up, you'll need to give your teammates access to it! Click on the "Settings" tab, click on - "Collaborators", enter your password if you're prompted for it, and add your teammates as - collaborators. - </p> - <figure> - <img src="{{ static_file('images/jams/jams_3.png') }}" class="uk-align-center uk-border-rounded" /> - <img src="{{ static_file('images/jams/jams_4.png') }}" class="uk-align-center uk-border-rounded" /> - <img src="{{ static_file('images/jams/jams_5.png') }}" class="uk-align-center uk-border-rounded" /> - </figure> - <p> - Now that you've set up your repository, it's time to install Git. If you're on Linux, you can - install Git using your system's package manager. Windows users can install - <a href="https://git-scm.com/download/win">Git for Windows</a>, and Mac users can install Git - using <a href="https://brew.sh">Homebrew</a>. Once you're all installed, open up a terminal - (or open Git Bash if you're on Windows). For the purpose of illustration we will be working on - Windows, but this will work on any platform. - </p> - <p> - We will use Git to clone the repository to the machine. Simply type <code>git clone <url></code> - and Git will download a copy of the repository. The URL is the same one you use to get to the - repository page on GitLab. Use <code>cd project-name</code> to change directory to the repository. - </p> - <figure> - <img src="{{ static_file('images/jams/jams_6.png') }}" class="uk-align-center uk-border-rounded" /> - </figure> - <p> - Now, open the newly-cloned repository in your favourite editor and make some edits. We'll be using - <a href="https://code.visualstudio.com/">Visual Studio Code</a> in this example, but use whatever - you prefer. For example, let's create a file named "hello.py", and add a line of code to it. - </p> - <figure> - <img src="{{ static_file('images/jams/jams_7.png') }}" class="uk-align-center uk-border-rounded" /> - </figure> - <p> - Now that we've edited a file, we need to make Git aware of our changes. Head back over to your - terminal, and type <code>git add hello.py</code> to add this file to our changeset. - </p> - <p> - Next up, we'll need to bundle up our changes into a commit, and push it to GitLab. To do that, we'll - use <code>git commit -am "message"</code>. Make sure you use a descriptive message explaining why - you made your changes and what they are, but try to keep it to a single line of text if you can. - Following this, we can use <code>git push origin master</code> to push our commit up to GitLab. - </p> - <figure> - <img src="{{ static_file('images/jams/jams_8.png') }}" class="uk-align-center uk-border-rounded" /> - <img src="{{ static_file('images/jams/jams_9.png') }}" class="uk-align-center uk-border-rounded" /> - </figure> - <p> - In order to pull the latest version of the code when the repository was cloned earlier, we can - simply use the <code>git pull</code> command. In order to illustrate this, we will need to enlist - the help of our lovely assistant... - </p> - <figure> - <img src="{{ static_file('images/jams/jams_10.png') }}" class="uk-align-center uk-border-rounded" /> - <img src="{{ static_file('images/jams/jams_11.png') }}" class="uk-align-center uk-border-rounded" /> - <img src="{{ static_file('images/jams/jams_12.png') }}" class="uk-align-center uk-border-rounded" /> - </figure> - <p> - Oh boy. - </p> - <p> - Once you've pushed some code to the repository, you will notice a "Merge request" link. Click on - that to create a merge request, which will let us know that you're working on the task and help us - to keep track of things. Simply click on the "Create merge request" button on the next page, fill - in the "Title" box with your team number - for example, "Team 1" - and click the big green - button to finish. - </p> - <figure> - <img src="{{ static_file('images/jams/jams_13.png') }}" class="uk-align-center uk-border-rounded" /> - <img src="{{ static_file('images/jams/jams_14.png') }}" class="uk-align-center uk-border-rounded" /> - <img src="{{ static_file('images/jams/jams_15.png') }}" class="uk-align-center uk-border-rounded" /> - <img src="{{ static_file('images/jams/jams_16.png') }}" class="uk-align-center uk-border-rounded" /> - </figure> - <p> - Now that your merge request has been created, keep working on your project! Code that you push to - GitLab will automatically be added to your merge request in real-time. As the code jam continues on, - you may find review comments waiting from us. These are just suggestions to help you improve as - a programmer - free advice from us. Feel free to incorporate our suggestions into your project - if you wish. - </p> - <figure> - <img src="{{ static_file('images/jams/jams_17.png') }}" class="uk-align-center uk-border-rounded" /> - </figure> - <p> - That's all there is to it! Keep working at your task, do your best and you might just come out - on top! - </p> - </article> - </div> - </div> -{% endblock %}
\ No newline at end of file diff --git a/templates/main/jams/join.html b/templates/main/jams/join.html deleted file mode 100644 index 4ff645b8..00000000 --- a/templates/main/jams/join.html +++ /dev/null @@ -1,362 +0,0 @@ -{% extends "main/base.html" %} -{% block title %}Code Jams | Join{% endblock %} -{% block og_title %}Code Jams | Join{% endblock %} -{% block page_classes %}uses-rst{% endblock %} - -{% macro show_question(question) %} - <div id="div-{{ question.id }}"> - <div class="uk-form-label"> - {% if question.optional %} - <label class="uk-form-label question-label" for="{{ question.id }}"> - <strong>{{ question.title }}</strong> - <br /> - <span class="uk-text-meta">You may skip this question</span> - </label> - {% else %} - <label class="uk-form-label question-label" for="{{ question.id }}"> - <strong>{{ question.title }}</strong> - <br /> - <span class="uk-text-meta">This question is required</span> - </label> - {% endif %} - </div> - <div class="uk-form-controls uk-form-controls-text"> - {% if question.type == "checkbox" %} - {% if question.optional %} - <input class="uk-checkbox" type="checkbox" name="{{ question.id }}" id="{{ question.id }}"> - <label for="{{ question.id }}" class="checkbox-label">Confirm</label> - {% else %} - <input class="uk-checkbox" type="checkbox" name="{{ question.id }}" id="{{ question.id }}" required> - <label for="{{ question.id }}" class="checkbox-label">Confirm</label> - {% endif %} - - {% elif question.type == "email" %} - {% if question.optional %} - <input class="uk-input" type="email" name="{{ question.id }}" id="{{ question.id }}" placeholder="[email protected]"> - {% else %} - <input class="uk-input" type="email" name="{{ question.id }}" id="{{ question.id }}" placeholder="[email protected]" required> - {% endif %} - - {% elif question.type == "number" %} - {% if question.optional %} - <input class="uk-input" type="number" max="{{ question.data.max }}" min="{{ question.data.min }}" name="{{ question.id }}" id="{{ question.id }}" value="{{ question.data.min }}"> - {% else %} - <input class="uk-input" type="number" max="{{ question.data.max }}" min="{{ question.data.min }}" name="{{ question.id }}" id="{{ question.id }}" value="{{ question.data.min }}" required> - {% endif %} - - {% elif question.type == "radio" %} - {% if question.optional %} - {% for option in question.data.options %} - <input class="uk-radio radio-{{ question.id }}" type="radio" name="{{ question.id }}" id="{{ question.id }}-{{ option }}" value="{{ option }}"> - <label class="radio-label" for="{{ question.id }}-{{ option }}">{{ option }}</label> - {% endfor %} - {% else %} - {% for option in question.data.options %} - <input class="uk-radio radio-{{ question.id }}" type="radio" name="{{ question.id }}" id="{{ question.id }}-{{ option }}" value="{{ option }}" required> - <label class="radio-label" for="{{ question.id }}-{{ option }}">{{ option }}</label> - {% endfor %} - {% endif %} - - {% elif question.type == "range" %} - <div class="uk-flex uk-flex-between"> - {% if question.optional %} - {% for num in range(question.data.min, question.data.max + 1) %} - <span> - <input class="uk-radio radio-{{ question.id }}" type="radio" name="{{ question.id }}" id="{{ question.id }}-{{ num }}" value="{{ num }}"> - <label class="range-label" for="{{ question.id }}-{{ num }}">{{ num }}</label> - </span> - {% endfor %} - {% else %} - {% for num in range(question.data.min, question.data.max + 1) %} - <span> - <input class="uk-radio radio-{{ question.id }}" type="radio" name="{{ question.id }}" id="{{ question.id }}-{{ num }}" value="{{ num }}" required> - <label class="range-label" for="{{ question.id }}-{{ num }}">{{ num }}</label> - </span> - {% endfor %} - {% endif %} - </div> - - {% elif question.type == "text" %} - {% if question.optional %} - <input class="uk-input" type="text" name="{{ question.id }}" id="{{ question.id }}"> - {% else %} - <input class="uk-input" type="text" name="{{ question.id }}" id="{{ question.id }}" required> - {% endif %} - - {% elif question.type == "textarea" %} - {% if question.optional %} - <textarea class="uk-input uk-textarea fira-code textarea" name="{{ question.id }}" id="{{ question.id }}"></textarea> - {% else %} - <textarea class="uk-input uk-textarea fira-code textarea" name="{{ question.id }}" id="{{ question.id }}" required></textarea> - {% endif %} - - {% elif question.type == "slider" %} - <div class="uk-flex uk-flex-between"> - <label class="uk-label slider-label" for="{{ question.id }}" id="{{ question.id }}-slider-value">{{ question.data.min }}</label> - <input class="uk-range range-slider" name="{{ question.id }}" id="{{ question.id }}" min="{{ question.data.min }}" max="{{ question.data.max }}" step="1" value="{{ question.data.min }}" type="range"> - </div> - - {% endif %} - </div> - </div> -{% endmacro %} - -{% block content %} -<div class="uk-section"> - <div class="uk-container uk-container-small"> - <h1 class="uk-header uk-article-title"> - Code Jam {{ jam.number }}: {{ jam.title }} - </h1> - <p class="uk-article-meta"> - Bring the thunder! - </p> - <p> - Please fill out the form below to apply for this code jam. Once you've submitted your application and the - application window has closed, we'll review it and let you know whether you've been entered! - </p> - <p> - Please note that you will not be able to edit your application after you've submitted it. - </p> - <hr class="uk-divider-icon" /> - - {{ form.preamble_html | safe }} - - <hr class="uk-divider-icon" /> - - {% if jam.state != "announced" %} - <p class="uk-alert uk-alert-primary"> - Unfortunately, we're not accepting applications for this code jam right now - but we appreciate your - interest. Keep an eye on <code>#announcements</code> on Discord for information on the next jam! - </p> - {% else %} - <form action="{{ url_for("main.jams.join", jam=jam.number) }}" method="post" class="uk-form-horizontal uk-flex uk-flex-column"> - {% for question in questions %} - {{ show_question(question) }} - <br /> - {% endfor %} - <br /> - - <input type="hidden" name="csrf_token" value="{{ csrf_token() }}"/> - - <div class="uk-text-center"> - <a class="uk-button uk-button-default" href="{{ url_for("main.jams.index") }}"> - <i class="uk-icon fa-fw far fa-arrow-left"></i> Back - </a> - <button type="submit" class="uk-button uk-button-primary" name="submit" id="submit" disabled> - <i class="uk-icon fa-fw far fa-check"></i> Apply - </button> - </div> - </form> - - {% endif %} - </div> -</div> - -<script type="application/javascript"> - "use strict"; - - // noinspection JSAnnotator (It thinks I'm not assigning this for some reason) - const questions = {{ questions | tojson }}; - const button = document.getElementById("submit"); - - function validateEmail(email) { - let re = /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/; - return re.test(String(email).toLowerCase()); - } - - function isNum(value) { - return !isNaN(parseInt(value)); - } - - function checkInputs() { - let input, inputs, div; - let disabled = false; - - for (let question of questions) { - div = document.getElementById("div-" + question.id); - - switch (question.type) { - case "checkbox": - if (!question.optional) { - let input = document.getElementById(question.id); - - if (!input.checked) { - disabled = true; - div.classList.add("danger-input"); - } else { - div.classList.remove("danger-input"); - } - } - break; - case "email": - input = document.getElementById(question.id); - - if (!question.optional || input.value.length > 0) { - if (input.value.length < 5 || !validateEmail(input.value)) { - disabled = true; - div.classList.add("danger-input"); - } else { - div.classList.remove("danger-input"); - } - } else { - div.classList.remove("danger-input"); - } - break; - case "number": - input = document.getElementById(question.id); - - if (!question.optional || input.value.length > 0) { - if (input.value.length < 1 || !isNum(input.value)) { - disabled = true; - div.classList.add("danger-input"); - } else { - let val = parseInt(input.value); - - if (val < question.data.min || val > question.data.max) { - disabled = true; - div.classList.add("danger-input"); - } else { - div.classList.remove("danger-input"); - } - } - } - break; - case "radio": - if (! question.optional) { - inputs = document.getElementsByClassName("radio-" + question.id); - let selected = null; - - for (let inner of inputs) { - if (inner.checked) { - selected = inner; - } - } - - if (selected === null) { - disabled = true; - div.classList.add("danger-input"); - } else { - div.classList.remove("danger-input"); - } - } - - break; - case "range": - if (! question.optional) { - inputs = document.getElementsByClassName("radio-" + question.id); - let selected = null; - - for (let inner of inputs) { - if (inner.checked) { - selected = inner; - } - } - - if (selected === null) { - disabled = true; - - div.classList.add("danger-input"); - } else { - div.classList.remove("danger-input"); - } - } - - break; - case "text": - if (!question.optional) { - input = document.getElementById(question.id); - - if (input.value.length < 1) { - disabled = true; - div.classList.add("danger-input"); - } else { - div.classList.remove("danger-input"); - } - } - - break; - case "textarea": - if (!question.optional) { - input = document.getElementById(question.id); - - if (input.value.length < 1) { - disabled = true; - div.classList.add("danger-input"); - } else { - div.classList.remove("danger-input"); - } - } - - break; - case "slider": - break; - } - } - - button.disabled = disabled; - } - - function setUpChecks() { - let input, inputs, label; - - for (let question of questions) { - switch (question.type) { - case "checkbox": - input = document.getElementById(question.id); - input.onchange = checkInputs; - - break; - case "email": - input = document.getElementById(question.id); - input.oninput = checkInputs; - - break; - case "number": - input = document.getElementById(question.id); - input.oninput = checkInputs; - input.onchange = checkInputs; - - break; - case "radio": - inputs = document.getElementsByClassName("radio-" + question.id); - - for (let inner of inputs) { - inner.onchange = checkInputs; - } - - break; - case "range": - inputs = document.getElementsByClassName("radio-" + question.id); - - for (let inner of inputs) { - inner.onchange = checkInputs; - } - - break; - case "text": - input = document.getElementById(question.id); - input.oninput = checkInputs; - - break; - case "textarea": - input = document.getElementById(question.id); - input.oninput = checkInputs; - - break; - case "slider": - input = document.getElementById(question.id); - label = document.getElementById(question.id + "-slider-value"); - - input.oninput = function() { - label.textContent = this.value; - checkInputs(); - }; - break; - } - } - } - - setUpChecks(); - checkInputs(); -</script> -{% endblock %} diff --git a/templates/main/jams/profile.html b/templates/main/jams/profile.html deleted file mode 100644 index 40d22490..00000000 --- a/templates/main/jams/profile.html +++ /dev/null @@ -1,103 +0,0 @@ -{% extends "main/base.html" %} -{% block title %}Code Jams | My Profile{% endblock %} -{% block og_title %}Code Jams | My Profile{% endblock %} - -{% block content %} -<div class="uk-section"> - <div class="uk-container uk-container-small"> - <h1 class="uk-header uk-article-title"> - Code Jams: My Profile - </h1> - - {% if done %} - <p class="uk-alert uk-alert-success"> - Thanks - your data has been saved! - </p> - {% else %} - <p class="uk-alert uk-alert-primary"> - Please make sure you've filled this out correctly, as we do use this data when evaluating your code jam - application. - <br /> - <br /> - You may come back here and edit your data at any time. - </p> - {% endif %} - - {% if form %} - <form class="uk-form-horizontal" action="{{ url_for("main.jams.profile", form=form) }}" method="post"> - {% else %} - <form class="uk-form-horizontal" action="{{ url_for("main.jams.profile") }}" method="post"> - {% endif %} - - <div> - <div class="uk-form-label"> - <label class="uk-form-label" for="gitlab_username">GitLab Username</label> - </div> - <div class="uk-form-controls-text uk-form-controls"> - <input class="uk-input" type="text" name="gitlab_username" id="gitlab_username" value="{{ participant.gitlab_username }}" required> - </div> - </div> - <div> - <div class="uk-form-label"> - <label class="uk-form-label" for="timezone">Timezone</label> - </div> - <div class="uk-form-controls-text uk-form-controls"> - <input class="uk-input" type="text" name="timezone" id="timezone" value="{{ participant.timezone }}" required> - </div> - </div> - <input type="hidden" name="csrf_token" value="{{ csrf_token() }}"/> - <br /> - - <div class="uk-text-center"> - <a class="uk-button uk-button-default" href="{{ url_for("main.jams.index") }}"> - <i class="uk-icon fa-fw far fa-arrow-left"></i> Back - </a> - <button type="submit" class="uk-button uk-button-primary" id="submit"> - <i class="uk-icon fa-fw far fa-check"></i> Save - </button> - - {% if existing %} - <a class="uk-button uk-button-danger" href="{{ url_for("main.jams.retract") }}"> - <i class="uk-icon fa-fw fas fa-bomb"></i> Delete - </a> - {% else %} - <a class="uk-button uk-button-default uk-text-muted uk-link-muted cursor-default" - uk-tooltip="title: You can't delete your profile because you haven't submitted one yet!; pos: bottom"> - <i class="uk-icon fa-fw fas fa-bomb"></i> Delete - </a> - {% endif %} - </div> - </form> - </div> -</div> - - - -<script type="application/javascript"> - const tz = moment().format("Z"); - - const gitlab_input = document.getElementById("gitlab_username"); - const tz_input = document.getElementById("timezone"); - - const submit_button = document.getElementById("submit"); - - function checkInputs() { - if (gitlab_input.value.length < 1) - return submit_button.disabled = true; - - if (tz_input.value.length < 1) - return submit_button.disabled = true; - - submit_button.disabled = false; - } - - gitlab_input.oninput = checkInputs; - tz_input.oninput = checkInputs; - - if (tz_input.value.length < 1) { - document.getElementById("timezone").value = "UTC" + tz; - } - - checkInputs(); -</script> -{% endblock %} diff --git a/templates/main/jams/retract.html b/templates/main/jams/retract.html deleted file mode 100644 index e013337b..00000000 --- a/templates/main/jams/retract.html +++ /dev/null @@ -1,61 +0,0 @@ -{% extends "main/base.html" %} -{% block title %}Code Jams | Already applied{% endblock %} -{% block og_title %}Code Jams | Already applied{% endblock %} - -{% block content %} -<div class="uk-section"> - <div class="uk-container uk-container-small"> - <h1 class="uk-header uk-article-title"> - Code Jams: Retract Profile - </h1> - - {% if participant %} - <p> - Are you sure you'd like to retract your code jam profile? - </p> - - {% if banned %} - <p> - Retracting your code jam profile will remove your date of birth, GitLab username and timezone from our - database. If you're entirely sure that you'd like to remove your profile, please click on the "Remove" button below. - </p> - - <p> - As you are currently taking part in a code jam, - <strong class="uk-text-danger">this will void your application and you will receive an automatic ban from future code jams</strong> - until you've contacted us about it. - </p> - {% else %} - <p> - Retracting your code jam profile will remove your date of birth, GitLab username and timezone from our - database. If you're entirely sure that you'd like to remove your profile, please click on the "Remove" button below. - </p> - - <p> - As you are not currently taking part in an ongoing code jam, - <strong class="uk-text-primary">you will not be banned from future code jams</strong>. - </p> - {% endif %} - - <form action="{{ url_for("main.jams.retract") }}" method="post" class="uk-form uk-text-center" uk-form> - <input type="hidden" name="csrf_token" value="{{ csrf_token() }}"/> - - <a class="uk-button uk-button-primary" href="{{ url_for("main.jams.profile") }}"> - <i class="uk-icon fa-fw far fa-arrow-left"></i> Cancel - </a> - <button class="uk-button uk-button-danger" type="submit"> - <i class="uk-icon fa-fw fas fa-bomb"></i> Remove - </button> - </form> - {% else %} - <p class="uk-alert uk-alert-danger"> - You can't delete your profile - you haven't submitted one to us yet! - </p> - - <a class="uk-button uk-button-secondary uk-width-1-1" href="{{ url_for("main.jams.profile") }}"> - <i class="uk-icon fa-fw far fa-arrow-left"></i> Back - </a> - {% endif %} - </div> -</div> -{% endblock %} diff --git a/templates/main/jams/retracted.html b/templates/main/jams/retracted.html deleted file mode 100644 index b67b6497..00000000 --- a/templates/main/jams/retracted.html +++ /dev/null @@ -1,31 +0,0 @@ -{% extends "main/base.html" %} -{% block title %}Code Jams | Already applied{% endblock %} -{% block og_title %}Code Jams | Already applied{% endblock %} - -{% block content %} -<div class="uk-section"> - <div class="uk-container uk-container-small"> - <h1 class="uk-header uk-article-title"> - Code Jams: Profile Retracted - </h1> - - {% if banned %} - <p> - Your code jam profile has been deleted. As you were participating in an ongoing code jam, you have - been issued with an automatic ban from future code jams. If you'd like to join a code jam in the - future, please contact us directly and we'll try to resolve the situation with you. Thanks for your - interest in our code jams regardless! - </p> - {% else %} - <p> - Your code jam profile has been deleted. you were not participating in an ongoing code jam, no further - action is required by you. Thanks for your interest in our code jams regardless! - </p> - {% endif %} - - <a class="uk-button uk-button-secondary uk-width-1-1" href="{{ url_for("main.jams.index") }}"> - <i class="uk-icon fa-fw far fa-arrow-left"></i> Back to code jams - </a> - </div> -</div> -{% endblock %} diff --git a/templates/main/jams/team_list.html b/templates/main/jams/team_list.html deleted file mode 100644 index 75c48337..00000000 --- a/templates/main/jams/team_list.html +++ /dev/null @@ -1,106 +0,0 @@ -{% extends "main/base.html" %} - -{% block title %} - {% if user_teams %} - Code Jams | My Teams - {% else %} - Code Jams | Code Jam {{ jam.number }} Teams - {% endif %} -{% endblock %} -{% block og_title %} - {% if user_teams %} - Code Jams | My Teams - {% else %} - Code Jams | Code Jam {{ jam.number }} Teams - {% endif %} -{% endblock %} - -{% block page_classes %}jam-team-list{% endblock %} - -{% block content %} - <div class="uk-section"> - <div class="uk-container"> - <h1 class="uk-header uk-article-title uk-heading-divider"> - {% if user_teams %} - Code Jams: My Teams - {% else %} - Code Jam {{ jam.number }}: Teams - {% endif %} - </h1> - {% if not user_teams %} - <p> - <a id="back" class="uk-button uk-button-default" href="{{ url_for("main.jams.index") }}"> - <i class="uk-icon fa-fw far fa-arrow-left"></i> All Jams - </a> - </p> - {% endif %} - {% if teams %} - <div class="uk-flex uk-flex-row uk-flex-wrap uk-flex-center team-list-cards"> - {% for team in teams %} - <div class="uk-card uk-card-default uk-margin-small-bottom uk-margin-small-right uk-margin-small-top uk-margin-small-left - {% if not user_teams %} - {% if logged_in and user.user_id in member_ids(team.members) %} - team-card-own - {% endif %} - {% if jam.winning_team and jam.winning_team == team.id %} - team-card-winner - {% endif %} - {% endif %} - "> - <div class="uk-card-body"> - <div class="uk-card-title"> - {% if not user_teams %} - {% if logged_in and user.user_id in member_ids(team.members) %} - <i class="uk-icon fa-fw far fa-user team-badge-own" uk-tooltip="Your Team"></i> - {% endif %} - {% if jam.winning_team and jam.winning_team == team.id %} - <i class="uk-icon fa-fw far fa-trophy team-badge-winner" uk-tooltip="Champions"></i> - {% endif %} - {% endif %} - Team <strong>{{ team.name }}</strong> - {% if user_teams %} - <p class="uk-article-meta team-subtitle"> - Code Jam {{ team.jam.number }} - </p> - {% endif %} - </div> - <div class="team-member-avatars"> - {% for member in team.members %} - <a href="https://discordapp.com/users/{{ member.user_id }}" - title="{{ member.username }}#{{ member.discriminator }}" - target="_blank" - class="team-member-avatar-link"> - <img src="{{ member.avatar }}" class="team-member-avatar uk-border-circle"/> - </a> - {% endfor %} - </div> - <div class="team-links"> - <a href="{{ url_for('main.jams.team_view', team_id=team.id) }}" - class="uk-button uk-button-primary"> - <i class="uk-icon fa-fw far fa-eye"></i> View - </a> - {% if team.repo %} - <a href="https://gitlab.com/{{ team.repo }}" target="_blank" - class="uk-button uk-button-default"> - <i class="uk-icon fa-fw fab fa-gitlab"></i> - </a> - {% else %} - <a href="#" target="_blank" class="uk-button uk-button-darkish uk-disabled"> - <i class="uk-icon fa-fw fab fa-gitlab"></i> - </a> - {% endif %} - </div> - </div> - </div> - {% endfor %} - </div> - {% else %} - {% if user_teams %} - <p>You are not part of any team.</p> - {% else %} - <p>There are no teams in this jam.</p> - {% endif %} - {% endif %} - </div> - </div> -{% endblock %} diff --git a/templates/main/jams/team_view.html b/templates/main/jams/team_view.html deleted file mode 100644 index 0554c3d4..00000000 --- a/templates/main/jams/team_view.html +++ /dev/null @@ -1,291 +0,0 @@ -{% extends "main/base.html" %} -{% block title %}Team {{ team.name }}{% endblock %} -{% block og_title %}Team {{ team.name }}{% endblock %} - -{% block page_classes %}jam-team-view{% endblock %} - -{% block content %} - <div class="uk-section"> - <div class="uk-container uk-container-small"> - <h1 class="uk-header uk-article-title"> - Team <strong>{{ team.name }}</strong> - </h1> - <p class="uk-article-meta"> - Code Jam {{ team.jam.number }} - </p> - <p> - <a href="{{ url_for('main.jams.jam_team_list', jam_id=team.jam.number) }}" - class="uk-button uk-button-default"> - <i class="uk-icon fa-fw far fa-users"></i> Competing Teams - </a> - {% if logged_in %} - <a href="{{ url_for('main.jams.user_team_list') }}" - class="uk-button uk-button-default"> - <i class="uk-icon fa-fw far fa-user"></i> My Teams - </a> - {% endif %} - </p> - - <div class="uk-grid"> - <div class="uk-width-1-2@m"> - <h2> - Team Members - </h2> - <div class="participant-card-list"> - {% for member in team.members %} - <div class="participant-card uk-card-default"> - <a href="https://discordapp.com/users/{{ member.user_id }}" target="_blank" - class="participant-avatar-link"> - <img src="{{ member.avatar }}" class="uk-border-circle participant-avatar"> - </a> - <strong>{{ member.username }}#{{ member.discriminator }}</strong> - <div class="participant-links"> - <a href="https://gitlab.com/{{ member.gitlab_username }}" target="_blank" - class="uk-button uk-button-default"> - <i class="uk-icon fa-fw fab fa-gitlab"></i> - </a> - </div> - </div> - {% endfor %} - </div> - </div> - <div class="uk-width-1-2@m"> - <h2> - Activity - </h2> - <p> - {% if team.repo %} - <a href="https://gitlab.com/{{ team.repo }}" target="_blank" - class="uk-button uk-button-primary"> - <i class="uk-icon fa-fw fab fa-gitlab"></i> View on GitLab - </a> - {% else %} - <a href="https://gitlab.com/{{ team.repo }}" target="_blank" id="view-repo-button" - class="uk-button uk-button-darkish uk-disabled"> - <i class="uk-icon fa-fw fab fa-gitlab"></i> View on GitLab - </a> - {% endif %} - {% if is_own_team %} - <a class="uk-button uk-button-default" id="edit-repo-button"> - <i class="uk-icon fa-fw far fa-pencil"></i> - </a> - {% endif %} - </p> - <div id="gitlab-activity" class="gitlab-activity uk-card-default - {% if not team.repo %} - uk-hidden - {% endif %} - "> - <div id="gitlab-activity-loading" class="gitlab-activity-loading"> - <div class="gitlab-activity-loading-content"> - <p> - Loading GitLab activity, hang tight... - </p> - <div uk-spinner class="gitlab-activity-spinner"></div> - </div> - </div> - </div> - </div> - </div> - </div> - </div> - {% if is_own_team %} - <div id="repo-modal" class="uk-flex-top" uk-modal> - <div class="uk-modal-dialog"> - <button class="uk-modal-close-default" type="button" uk-close></button> - - <div class="uk-modal-header"> - <h2 class="uk-modal-title">Edit Repository</h2> - </div> - <form> - <input type="hidden" name="csrf_token" id="csrf_token" value="{{ csrf_token() }}"/> - <div class="uk-modal-body"> - <p> - Enter your team's GitLab repository URL in the field below. - </p> - <p> - Note: it should be a fork of the jam's GitLab repository - (<strong>{{ team.jam.repo }}</strong>). - </p> - <div class="uk-form-horizontal"> - <div> - <div class="uk-form-label"> - <label class="uk-form-label" for="repo-url">Repository URL</label> - </div> - - <div class="uk-form-controls uk-form-controls-text"> - <input class="uk-input" type="text" name="repo-url" id="repo-url" - value="https://gitlab.com/{{ team.repo }}" required> - </div> - </div> - </div> - </div> - - <div class="uk-modal-footer"> - <div class="uk-text-center"> - <button class="uk-button uk-button-default uk-modal-close" type="button" id="repo-cancel"> - <i class="uk-icon fa-fw far fa-arrow-left"></i> Cancel - </button> - <a class="uk-button uk-button-primary" id="repo-submit"> - <i class="uk-icon fa-fw far fa-check"></i> Save - </a> - </div> - </div> - </form> - </div> - </div> - {% endif %} - <script type="application/javascript"> - "use strict"; - - {% if is_own_team %} - /* Modal */ - - const csrf_token = "{{ csrf_token() }}"; - const repo_edit_target = "{{ url_for('main.jams.team.edit_repo', team_id=team.id) }}"; - const repo_modal = UIkit.modal(document.getElementById("repo-modal")); - const repo_cancel = document.getElementById("repo-cancel"); - const repo_submit = document.getElementById("repo-submit"); - const repo_url = document.getElementById("repo-url"); - const repo_edit_button = document.getElementById("edit-repo-button"); - - repo_cancel.onclick = function () { - repo_modal.hide(); - }; - - repo_edit_button.onclick = () => { - repo_modal.show(); - }; - - function editTeamRepoURL(repo, callback) { - $.ajax(repo_edit_target, { - "data": {"repo_url": repo}, - "dataType": "json", - "headers": {"X-CSRFToken": csrf_token}, - "method": "POST", - }).done(data => { - if ("error_code" in data) { - return callback(false, data); - } - - return callback(true, data); - }).fail((xhr) => callback(false, xhr["responseJSON"])); - } - - repo_submit.onclick = () => { - repo_submit.classList.add("uk-disabled"); - let repo = repo_url.value; - editTeamRepoURL(repo, (success, data) => { - repo_submit.classList.remove("uk-disabled"); - if (success) { - UIkit.notification({ - "message": "Edited repository successfully", - "status": "success", - "pos": "bottom-center", - "timeout": 5000, - }); - - GITLAB_PROJECT_ID = data["project_path"]; - repo_modal.hide(); - resetGitLabActivity(); - } else { - console.log(data); - let message = (data && "error_message" in data) ? `Failed: ${data["error_message"]}` : "Failed to edit repository."; - UIkit.notification({ - "message": message, - "status": "danger", - "pos": "bottom-center", - "timeout": 5000 - }); - } - }); - }; - - {% endif %} - - - /* GitLab activity */ - - function resetGitLabActivity() { - $("#gitlab-activity-events").remove(); - $("#gitlab-activity-loading").show(); - $("#gitlab-activity").removeClass("uk-hidden"); - $("#view-repo-button").attr("href", `https://gitlab.com/${GITLAB_PROJECT_ID}`) - .removeClass("uk-button-darkish") - .removeClass("uk-disabled") - .addClass("uk-button-primary"); - loadGitLabActivity(); - } - - let GITLAB_PROJECT_ID = "{{ team.repo }}"; // the gitlab project id - function loadGitLabActivity() { - const GITLAB_EVENT_ACTIONS = ["pushed"]; // the actions to filter in the event list - const JAM_START_DATE = "{{ day_delta(team.jam.date_start, -1).strftime("%Y-%m-%d") }}"; // the start date of the jam, in order to ignore pushes prior to start - const JAM_END_DATE = "{{ day_delta(team.jam.date_end, +1).strftime("%Y-%m-%d") }}"; // the end date of the jam, in order to ignore pushes after the end - const GITLAB_PROJECT_EVENTS_ENDPOINT = () => `https://gitlab.com/api/v4/projects/${encodeURIComponent(GITLAB_PROJECT_ID)}/events?action=${GITLAB_EVENT_ACTIONS.join(",")}&after=${JAM_START_DATE}&before=${JAM_END_DATE}`; - const GITLAB_ACCEPTED_ACTIONS = ["pushed", "created"]; - - function gitlabBranchURL(branch) { - return `https://gitlab.com/${GITLAB_PROJECT_ID}/tree/${branch}` - } - - function gitlabCommitURL(commit) { - return `https://gitlab.com/${GITLAB_PROJECT_ID}/commit/${commit}` - } - - function onEventsLoaded(events) { - $("#gitlab-activity-loading").hide(); - - let eventList = $("<div id=\"gitlab-activity-events\"></div>") - .addClass("gitlab-activity-events"); - - let eventCount = 0; - for (let i = 0; i < events.length; i++) { - let event = events[i]; - if (!GITLAB_ACCEPTED_ACTIONS.includes(event["push_data"]["action"])) { - continue; - } - let commit = event["push_data"]["commit_to"]; - let branch = event["push_data"]["ref"]; - let eventDate = Date.parse(event["created_at"]); - let eventElement = $( - "" - + "<div class=\"gitlab-activity-event-item\">" - + "<div class=\"gitlab-activity-event-item-content\">" - + `<span><strong>${event["author"]["username"]}</strong> pushed: "${event["push_data"]["commit_title"]}"</span>` - + "<br>" - + `<a target=\"blank\" href=\"${gitlabCommitURL(commit)}\" class=\"pasta\">${commit.substring(0, 8)}</a>` - + `<a target=\"blank\" href=\"${gitlabBranchURL(branch)}\" class=\"pasta\"><i class="uk-icon fa-fw far fa-code-branch"></i> ${branch}</a>` - + `` - + "</div>" - + "</div>" - ); - eventList.append(eventElement); - eventCount++; - } - - let footerMessage = eventCount > 0 ? "We've reached the end!" : "There is no activity to show at this time."; - - // add the footer - let eventListFooter = $( - "" - + "<div class=\"gitlab-activity-events-footer\">" - + `<span>${footerMessage}</span>` - + "</div>" - ).appendTo(eventList); - - $("#gitlab-activity").append(eventList); - } - - function onEventsFailed(xhr) { - console.error(xhr); - } - - $.get( - GITLAB_PROJECT_EVENTS_ENDPOINT() - ).done(onEventsLoaded).fail(onEventsFailed); - } - - window.onload = loadGitLabActivity; - </script> -{% endblock %} diff --git a/templates/main/jams/thanks.html b/templates/main/jams/thanks.html deleted file mode 100644 index f123b227..00000000 --- a/templates/main/jams/thanks.html +++ /dev/null @@ -1,25 +0,0 @@ -{% extends "main/base.html" %} -{% block title %}Code Jams | Thanks!{% endblock %} -{% block og_title %}Code Jams | Thanks!{% endblock %} - -{% block content %} -<div class="uk-section"> - <div class="uk-container uk-container-small"> - <h1 class="uk-header uk-article-title"> - Code Jam {{ jam.number }}: {{ jam.title }} - </h1> - <p class="uk-article-meta"> - Bring the thunder! - </p> - - <p class="uk-alert uk-alert-success"> - Thanks for your application! Just sit back, relax, and we'll let you know whether you've been selected - for this code jam when the time comes. - </p> - - <a class="uk-button uk-button-secondary uk-align-center" href="{{ url_for("main.jams.index") }}"> - <i class="uk-icon fa-fw far fa-arrow-left"></i> Back to all code jams - </a> - </div> -</div> -{% endblock %} diff --git a/templates/main/navigation.html b/templates/main/navigation.html deleted file mode 100644 index a32ac1c1..00000000 --- a/templates/main/navigation.html +++ /dev/null @@ -1,165 +0,0 @@ -<style> - .uk-navbar-nav:first-child { - margin-left: -20px; - } -</style> -<div class="uk-background-secondary uk-light" uk-sticky="sel-target: .uk-navbar-container; cls-active: uk-navbar-sticky; animation: uk-animation-slide-top; top: 400; bottom: #animation"> - <nav data-uk-navbar class="uk-navbar-container uk-navbar-transparent" uk-navbar="boundary-align: true"> - <div class="uk-navbar-left uk-padding-remove-left"> - <a href="{{ url_for('main.index') }}" class="uk-navbar-item uk-logo uk-padding-remove-left"> - <img src="{{ static_file('logos/logo_banner.svg') }}" class="navbar-logo"/> - </a> - </div> - - <div class="uk-navbar-right"> - <ul class="uk-navbar-nav uk-visible@m"> - {% if current_page == "main.index" %} - <li class="uk-active"><a href="{{ url_for('main.index') }}"><i class="uk-icon fas fa-home fa-fw"></i> Home</a></li> - {% else %} - <li><a href="{{ url_for('main.index') }}"><i class="uk-icon fas fa-home fa-fw"></i> Home</a></li> - {% endif %} - - {% if current_page.startswith("wiki.") %} - <li class="uk-active"><a href="{{ url_for('wiki.index') }}"><i class="uk-icon fas fa-book fa-fw"></i> Wiki</a></li> - {% else %} - <li><a href="{{ url_for('wiki.index') }}"><i class="uk-icon fas fa-book fa-fw"></i> Wiki</a></li> - {% endif %} - - <li><a href="{{ url_for('main.invite') }}"><i class="uk-icon fab fa-discord fa-fw"></i> Discord</a></li> - <li><a href="https://www.reddit.com/r/Python/" title="r/Python on Reddit"><i class="uk-icon fab fa-reddit-alien fa-fw"></i> Reddit</a></li> - - {% if is_staff() %} - {% if current_page.startswith("staff.") %} - <li class="uk-active"><a href="{{ url_for('staff.index') }}"><i class="uk-icon fas fa-wrench fa-fw"></i> Staff</a></li> - {% else %} - <li class=""><a href="{{ url_for('staff.index') }}"><i class="uk-icon fas fa-wrench fa-fw"></i> Staff</a></li> - {% endif %} - {% endif %} - </ul> - <ul class="uk-navbar-nav"> - <li> - <a><i class="uk-icon fas fa-chevron-down"></i></a> - <div class="uk-navbar-dropdown uk-background-secondary" uk-dropdown="pos: bottom-right"> - <ul class="uk-nav uk-navbar-dropdown-nav"> - <li class="uk-nav-header uk-hidden@m">Navigation</li> - - {% if current_page == "main.index" %} - <li class="uk-nav-item uk-active uk-hidden@m"><a href="{{ url_for('main.index') }}"><i class="uk-icon fas fa-home fa-fw"></i> Home</a></li> - {% else %} - <li class="uk-nav-item uk-hidden@m"><a href="{{ url_for('main.index') }}"><i class="uk-icon fas fa-home fa-fw"></i> Home</a></li> - {% endif %} - - {% if current_page.startswith("wiki.") %} - <li class="uk-nav-item uk-active uk-hidden@m"><a href="{{ url_for('wiki.index') }}"><i class="uk-icon fas fa-book fa-fw"></i> Wiki</a></li> - {% else %} - <li class="uk-nav-item uk-hidden@m"><a href="{{ url_for('wiki.index') }}"><i class="uk-icon fas fa-book fa-fw"></i> Wiki</a></li> - {% endif %} - - <li class="uk-nav-item uk-hidden@m"><a href="{{ url_for('main.invite') }}"><i class="uk-icon fab fa-discord fa-fw"></i> Discord</a></li> - <li class="uk-nav-item uk-hidden@m"><a href="https://www.reddit.com/r/Python/" title="r/Python on Reddit"><i class="uk-icon fab fa-reddit-alien fa-fw"></i> Reddit</a></li> - - {% if is_staff() %} - {% if current_page.startswith("staff.") %} - <li class="uk-nav-item uk-active uk-hidden@m"><a href="{{ url_for('staff.index') }}"><i class="uk-icon fas fa-wrench fa-fw"></i> Staff</a></li> - {% else %} - <li class="uk-nav-item uk-hidden@m"><a href="{{ url_for('staff.index') }}"><i class="uk-icon fas fa-wrench fa-fw"></i> Staff</a></li> - {% endif %} - {% endif %} - <li class="uk-nav-divider uk-hidden@m"></li> - - {% if not debug %} - {% if logged_in %} - <li class="uk-active"><a href="{{ url_for('main.logout') }}"><i class="uk-icon fas fa-unlock"></i> Logout</a></li> - {% else %} - <li class="uk-active"><a href="{{ url_for('discord.login') }}"><i class="uk-icon fas fa-lock"></i> Login with Discord</a></li> - {% endif %} - {% else %} - <li class="uk-active"><a class="debug-mode-item"><i class="uk-icon fas fa-exclamation-triangle"></i> Debug mode</a></li> - {% endif %} - - {% if current_page.startswith("main.info") %} - <li class="uk-nav-header uk-active"><a href="{{ url_for('main.info.index') }}">Information</a></li> - {% else %} - <li class="uk-nav-header"><a href="{{ url_for('main.info.index') }}">Information</a></li> - {% endif %} - - {% if current_page == "main.info.faq" %} - <li class="uk-active"><a href="{{ url_for('main.info.faq') }}">FAQ</a></li> - {% else %} - <li><a href="{{ url_for('main.info.faq') }}">FAQ</a></li> - {% endif %} - - {% if current_page == "main.info.help" %} - <li class="uk-active"><a href="{{ url_for('main.info.help') }}">Getting Help</a></li> - {% else %} - <li><a href="{{ url_for('main.info.help') }}">Getting Help</a></li> - {% endif %} - - {% if current_page == "main.info.resources" %} - <li class="uk-active"><a href="{{ url_for('main.info.resources') }}">Resources</a></li> - {% else %} - <li><a href="{{ url_for('main.info.resources') }}">Resources</a></li> - {% endif %} - - {% if current_page.startswith("main.about.") %} - <li class="uk-nav-header uk-active"><a href="{{ url_for('main.about.index') }}">About</a></li> - {% else %} - <li class="uk-nav-header"><a href="{{ url_for('main.about.index') }}">About</a></li> - {% endif %} - - {% if current_page == "main.about.channels" %} - <li class="uk-active"><a href="{{ url_for('main.about.channels') }}">Channels</a></li> - {% else %} - <li><a href="{{ url_for('main.about.channels') }}">Channels</a></li> - {% endif %} - - {% if current_page == "main.about.partners" %} - <li class="uk-active"><a href="{{ url_for('main.about.partners') }}">Partners</a></li> - {% else %} - <li><a href="{{ url_for('main.about.partners') }}">Partners</a></li> - {% endif %} - - {% if current_page == "main.about.rules" %} - <li class="uk-active"><a href="{{ url_for('main.about.rules') }}">Server Rules</a></li> - {% else %} - <li><a href="{{ url_for('main.about.rules') }}">Server Rules</a></li> - {% endif %} - - {% if current_page.startswith("main.jams") %} - <li class="uk-nav-header uk-active"><a href="{{ url_for('main.jams.index') }}">Code Jams</a></li> - {% else %} - <li class="uk-nav-header"><a href="{{ url_for('main.jams.index') }}">Code Jams</a></li> - {% endif %} - - {% if current_page == "main.jams.index" %} - <li class="uk-active"><a href="{{ url_for('main.jams.index') }}">All Jams</a></li> - {% else %} - <li><a href="{{ url_for('main.jams.index') }}">All Jams</a></li> - {% endif %} - - {% if current_page == "main.jams.profile" %} - <li class="uk-active"><a href="{{ url_for('main.jams.profile') }}">My Profile</a></li> - {% else %} - <li><a href="{{ url_for('main.jams.profile') }}">My Profile</a></li> - {% endif %} - - {% if current_page == "main.jams.user_team_list" %} - <li class="uk-active"><a href="{{ url_for('main.jams.user_team_list') }}">My Teams</a></li> - {% else %} - <li><a href="{{ url_for('main.jams.user_team_list') }}">My Teams</a></li> - {% endif %} - - <li class="uk-nav-divider"></li> - - {% if current_page.startswith("main.about.privacy") %} - <li class="uk-active"><a href="{{ url_for('main.about.privacy') }}">Privacy</a></li> - {% else %} - <li><a href="{{ url_for('main.about.privacy') }}">Privacy</a></li> - {% endif %} - </ul> - </div> - </li> - </ul> - </div> - </nav> -</div> diff --git a/templates/main/ws_test.html b/templates/main/ws_test.html deleted file mode 100644 index 64a7dfc4..00000000 --- a/templates/main/ws_test.html +++ /dev/null @@ -1,26 +0,0 @@ -{% extends "main/base.html" %} -{% block title %}WS Test{% endblock %} -{% block og_title %}WS Test{% endblock %} -{% block og_description %}A test page for our Websockets implementation{% endblock %} -{% block content %} - <div class="uk-container uk-section"> - <h1>Open your JS console to test</h1> - - <script type="application/javascript"> - let ws = new WebSocket("wss://api.{{ server_name }}/ws/echo"); - - ws.onopen = function(event) { - console.log("WS opened! Use send() to send a message."); - }; - - ws.onmessage = function (event) { - console.log("<- " + event.data); - }; - - function send(text) { - console.log("-> " + text); - ws.send(text); - } - </script> - </div> -{% endblock %} diff --git a/templates/main/ws_test_rst.html b/templates/main/ws_test_rst.html deleted file mode 100644 index a0bae79b..00000000 --- a/templates/main/ws_test_rst.html +++ /dev/null @@ -1,39 +0,0 @@ -{% extends "main/base.html" %} -{% block title %}WS Test{% endblock %} -{% block og_title %}WS Test{% endblock %} -{% block og_description %}A test page for our Websockets implementation{% endblock %} -{% block content %} - <div class="uk-container uk-section"> - <h1>Enter some text to test.</h1> - - <textarea title="RST Input" id="rst"></textarea> - <input type="button" value="Submit" id="submit-button" /> - - <br /> - - <div id="output"></div> - - <script type="application/javascript"> - let ws = new WebSocket("wss://api.{{ server_name }}/ws/rst"); - - ws.onopen = function(event) { - console.log("WS opened! Use send() to send a message."); - }; - - ws.onmessage = function (event) { - document.getElementById("output").innerHTML = event.data; - }; - - function send(text) { - console.log("-> " + text); - ws.send(text); - } - - document.getElementById("submit-button").onclick = function() { - send( - document.getElementById("rst").value - ); - } - </script> - </div> -{% endblock %} diff --git a/templates/robots.txt b/templates/robots.txt deleted file mode 100644 index fa61be5e..00000000 --- a/templates/robots.txt +++ /dev/null @@ -1,14 +0,0 @@ -{# robots.txt is a little picky about whitespace and newlines - that's why the below looks kind of bad.#} -{% if rules is defined and rules %} -{% for user_agent, disallowed in rules.items() %} -User-agent: {{ user_agent }} -{% for rule in rules %} -Disallow: {{ rule }} -{% endfor %} -{% endfor %} -{% else %} -User-agent: * -Disallow: -{% endif %} - -Sitemap: {{ sitemap_url }} diff --git a/templates/sitemap.xml b/templates/sitemap.xml deleted file mode 100644 index 3d63d3a9..00000000 --- a/templates/sitemap.xml +++ /dev/null @@ -1,64 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<urlset - xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" - xmlns:image="http://www.google.com/schemas/sitemap-image/1.1" - xmlns:news="http://www.google.com/schemas/sitemap-news/0.9" - xmlns:video="http://www.google.com/schemas/sitemap-video/1.1" -> - -{% for url in urls %} - <url> - <loc>{{ url.url }}</loc> - - {% if url.images is defined %} - {% for image in url.images %} - <image:image> - <image:loc>{{ image.url }}</image:loc> - <image:caption>{{ image.caption }}</image:caption> - </image:image> - {% endfor %} - {% endif %} - - {% if url.videos is defined %} - {% for video in url.videos %} - <video:video> - <video:description>{{ video.description }}</video:description> - <video:title>{{ video.title }}</video:title> - - <video:content_loc>{{ video.url }}</video:content_loc> - <video:player_loc>{{ video.player_url }}</video:player_loc> - <video:thumbnail_loc>{{ video.thumbnail_url }}</video:thumbnail_loc> - </video:video> - {% endfor %} - {% endif %} - - {% if url.news_items is defined %} - {% for item in url.news_items %} - <news:news> - <news:publication> - <news:name>Python Discord: {{ item.section }}</news:name> - <news:language>en</news:language> - </news:publication> - - <news:genres>PressRelease, Blog</news:genres> - <news:publication_date>{{ item.date }}</news:publication_date> - <news:title>{{ item.title }}</news:title> - <news:keywords>{{ ", ".join(item.keywords) }}</news:keywords> - </news:news> - {% endfor %} - {% endif %} - - {% if url.last_modified is defined %} - <lastmod>{{ url.last_modified }}</lastmod> - {% endif %} - - {% if url.change_frequency is defined %} - <changefreq>{{ url.change_frequency }}</changefreq> - {% endif %} - - {% if url.priority is defined %} - <priority>{{ "{0:.1f}".format(url.priority) }}</priority> - {% endif %} - </url> -{% endfor %} -</urlset> diff --git a/templates/staff/index.html b/templates/staff/index.html deleted file mode 100644 index 31fddceb..00000000 --- a/templates/staff/index.html +++ /dev/null @@ -1,23 +0,0 @@ -{% extends "main/base.html" %} -{% block title %}Staff | Home{% endblock %} -{% block og_title %}Staff | Home{% endblock %} -{% block og_description %}Landing page for the staff management area{% endblock %} -{% block content %} - <div class="uk-container uk-container-small uk-section"> - <h1 class="uk-text-center"> - Management links - </h1> - - <a class="uk-button uk-button-primary" href="{{ url_for("staff.jams.index") }}">Code Jams</a> - {% if manager %} - <a class="uk-button uk-button-primary" href="{{ url_for("staff.tables.index") }}">Table Management</a> - {% endif %} - - <h1 class="uk-title uk-text-center"> - App config - </h1> - <pre> - {{ app_config | safe }} - </pre> - </div> -{% endblock %}
\ No newline at end of file diff --git a/templates/staff/jams/create.html b/templates/staff/jams/create.html deleted file mode 100644 index c19addd3..00000000 --- a/templates/staff/jams/create.html +++ /dev/null @@ -1,78 +0,0 @@ -{% extends "main/base.html" %} -{% block title %}Staff | Jams | Create{% endblock %} -{% block og_title %}Staff | Jams | Create{% endblock %} -{% block og_description %}Create a brand new code jam{% endblock %} -{% block content %} - <div class="uk-container uk-container-small uk-section"> - <h1 class="uk-text-center">Code Jam: Create</h1> - - <form action="{{ url_for("staff.jams.create") }}" method="post" class="uk-form-horizontal"> - <div> - <div class="uk-form-label"> - <label class="uk-form-label" for="title">Title</label> - </div> - - <div class="uk-form-controls uk-form-controls-text"> - <input class="uk-input" name="title" id="title" type="text" required /> - </div> - </div> - <div> - <div class="uk-form-label"> - <label class="uk-form-label" for="number">Number</label> - </div> - - <div class="uk-form-controls uk-form-controls-text"> - <input class="uk-input" name="number" id="number" type="text" value="{{ number }}" disabled /> - </div> - </div> - <div> - <div class="uk-form-label"> - <label class="uk-form-label" for="date_start">Starting date (UTC)</label> - </div> - - <div class="uk-form-controls uk-form-controls-text"> - <input class="uk-input" name="date_start" id="date_start" type="text" required /> - </div> - </div> - <div> - <div class="uk-form-label"> - <label class="uk-form-label" for="date_end">Ending date (UTC)</label> - </div> - - <div class="uk-form-controls uk-form-controls-text"> - <input class="uk-input" name="date_end" id="date_end" type="text" required /> - </div> - </div> - <div> - <div class="uk-form-label"> - <label class="uk-form-label" for="state">State</label> - </div> - - <div class="uk-form-controls uk-form-controls-text"> - <select class="uk-select" name="state" id="state" disabled> - <option value="planning" selected>Planning</option> - </select> - </div> - </div> - - <input type="hidden" name="csrf_token" id="csrf_token" value="{{ csrf_token() }}"/> - - <div class="uk-align-center uk-text-center"> - <a id="back" class="uk-button uk-button-default" href="{{ url_for("staff.jams.index") }}"> - <i class="uk-icon fa-fw far fa-arrow-left"></i> Back - </a> - <button id="done" class="uk-button uk-button-primary" type="submit"> - <i class="uk-icon fa-fw far fa-check"></i> Done - </button> - </div> - </form> - - </div> - - <script type="application/javascript"> - window.onload = () => { - const date_start = flatpickr("#date_start", {enableTime: true, altInput: true}); - const date_end = flatpickr("#date_end", {enableTime: true, altInput: true}); - } - </script> -{% endblock %} diff --git a/templates/staff/jams/edit_basics.html b/templates/staff/jams/edit_basics.html deleted file mode 100644 index 1208e5d2..00000000 --- a/templates/staff/jams/edit_basics.html +++ /dev/null @@ -1,79 +0,0 @@ -{% extends "main/base.html" %} -{% block title %}Staff | Jams | Edit (Basics){% endblock %} -{% block og_title %}Staff | Jams | Edit (Basics){% endblock %} -{% block og_description %}Edit the basic info for a code jam{% endblock %} -{% block page_classes %}uses-rst{% endblock %} - -{% block content %} - <div class="uk-container uk-container-small uk-section"> - <h1 class="uk-text-center">Code Jam: Edit (Basics)</h1> - - <form action="{{ url_for("staff.jams.edit.basics", jam=jam.number) }}" method="post" class="uk-form-horizontal"> - <div> - <div class="uk-form-label"> - <label class="uk-form-label" for="title">Title</label> - </div> - - <div class="uk-form-controls uk-form-controls-text"> - <input class="uk-input" name="title" id="title" type="text" value="{{ jam.title }}" required /> - </div> - </div> - <div> - <div class="uk-form-label"> - <label class="uk-form-label" for="number">Number</label> - </div> - - <div class="uk-form-controls uk-form-controls-text"> - <input class="uk-input" name="number" id="number" type="text" value="{{ jam.number }}" disabled /> - </div> - </div> - <div> - <div class="uk-form-label"> - <label class="uk-form-label" for="date_start">Starting date (UTC)</label> - </div> - - <div class="uk-form-controls uk-form-controls-text"> - <input class="uk-input" name="date_start" id="date_start" type="text" value="{{ jam.date_start }}" required /> - </div> - </div> - <div> - <div class="uk-form-label"> - <label class="uk-form-label" for="date_end">Ending date (UTC)</label> - </div> - - <div class="uk-form-controls uk-form-controls-text"> - <input class="uk-input" name="date_end" id="date_end" type="text" value="{{ jam.date_end }}" required /> - </div> - </div> - <div> - <div class="uk-form-label"> - <label class="uk-form-label" for="state">State</label> - </div> - - <div class="uk-form-controls uk-form-controls-text"> - <select class="uk-select" name="state" id="state" disabled> - <option value="{{ jam.state }}" selected>{{ jam.state.title() }}</option> - </select> - </div> - </div> - - <input type="hidden" name="csrf_token" id="csrf_token" value="{{ csrf_token() }}"/> - - <div class="uk-align-center uk-text-center"> - <a id="back" class="uk-button uk-button-default" href="{{ url_for("staff.jams.index") }}"> - <i class="uk-icon fa-fw far fa-arrow-left"></i> Back - </a> - <button id="done" class="uk-button uk-button-primary" type="submit"> - <i class="uk-icon fa-fw far fa-check"></i> Done - </button> - </div> - </form> - </div> - - <script type="application/javascript"> - window.onload = () => { - const date_start = flatpickr("#date_start", {enableTime: true, altInput: true}); - const date_end = flatpickr("#date_end", {enableTime: true, altInput: true}); - } - </script> -{% endblock %} diff --git a/templates/staff/jams/edit_ending.html b/templates/staff/jams/edit_ending.html deleted file mode 100644 index a0c5e8ff..00000000 --- a/templates/staff/jams/edit_ending.html +++ /dev/null @@ -1,152 +0,0 @@ -{% extends "main/base.html" %} -{% block title %}Staff | Jams | Edit (Ending Comments){% endblock %} -{% block og_title %}Staff | Jams | Edit (Ending Comments){% endblock %} -{% block og_description %}Edit the ending comments for a code jam{% endblock %} - -{% block page_classes %}uses-rst{% endblock %} - -{% block content %} - <div class="uk-container uk-container-small uk-section"> - <h1 class="uk-text-center">Code Jam: Edit (Ending Comments)</h1> - - <form action="{{ url_for("staff.jams.edit.ending", jam=jam.number) }}" method="post" class="uk-form-horizontal"> - <div> - <div class="uk-form-label"> - <label class="uk-form-label">Comments (RST)</label> - </div> - - <div class="uk-form-controls uk-form-controls-text"> - <div id="editor" class="uk-textarea">{{ jam.end_rst }}</div> - </div> - - <input type="hidden" name="end_rst" id="end_rst" value="{{ jam.end_rst }}" /> - </div> - - <input type="hidden" name="csrf_token" id="csrf_token" value="{{ csrf_token() }}"/> - - <div class="uk-align-center uk-text-center"> - <a id="back" class="uk-button uk-button-default" href="{{ url_for("staff.jams.index") }}"> - <i class="uk-icon fa-fw far fa-arrow-left"></i> Back - </a> - <button class="uk-button uk-button-secondary" type="button" id="preview"> - <i class="uk-icon fa-fw far fa-eye"></i> Preview - </button> - <button id="done" class="uk-button uk-button-primary" type="submit" disabled> - <i class="uk-icon fa-fw far fa-check"></i> Done - </button> - </div> - </form> - </div> - - <div id="preview-modal" class="uk-flex-top" uk-modal> - <div class="uk-modal-dialog"> - <button class="uk-modal-close-default" type="button" uk-close></button> - - <div class="uk-modal-body"> - <h2>Code Jam {{ jam.number }}: {{ jam.title }} <a href="{{ jam.repo }}" id="preview-url"><i class="uk-icon fa-fw fab fa-gitlab"></i></a></h2> - <p class="uk-text-meta">Theme: <span id="preview-theme">{{ jam.theme }}</span></p> - - <div id="preview-div"> - {{ jam.end_rst | safe }} - </div> - </div> - - <div class="uk-modal-footer"> - <div class="uk-text-center"> - <button class="uk-button uk-button-default uk-modal-close" type="button" id="state-cancel"> - <i class="uk-icon fa-fw far fa-arrow-left"></i> Close - </button> - </div> - </div> - </div> - </div> - - <script type="application/javascript"> - "use strict"; - - window.onload = () => { - let csrf_token = "{{ csrf_token() }}"; - let modal = UIkit.modal(document.getElementById("preview-modal")); - let preview_url = "{{ url_for("staff.render") }}"; - - function do_preview(callback) { - let oReq = new XMLHttpRequest(); - - oReq.addEventListener("load", function () { - let response = JSON.parse(this.responseText); - - if (response.error !== undefined) { - document.getElementById("done").disabled = true; - - if (response.error_lines !== undefined) { - editor.session.setAnnotations(response.error_lines); - document.getElementById("preview-div").innerHTML = "<h3>Error - see editor margin</h3>"; - } else { - console.log("Error: " + response.error); - document.getElementById("preview-div").innerHTML = "<h3>Error</h3><p>" + response.error + "<p>"; - } - } else { - document.getElementById("done").disabled = false; - document.getElementById("preview-div").innerHTML = response.data; - - editor.session.setAnnotations([]); - } - - if (callback !== undefined) { - callback(); - } - }); - - let data = editor.getValue(); - - if (data.replace("\s", "").length < 1) { - document.getElementById("done").disabled = true; - - if (callback !== undefined) { - UIkit.notification({ - "message": "Please enter some text to preview", - "status": "danger", - "pos": "bottom-center", - "timeout": 5000 - }); - } - return false; - } - - oReq.open("POST", preview_url); - - oReq.setRequestHeader("Content-type", "application/json"); - oReq.setRequestHeader("X-CSRFToken", csrf_token); - - oReq.send(JSON.stringify({"data": editor.getValue()})); - - return false; - } - - document.getElementById("preview").onclick = function () { - do_preview(function () { - modal.show(); - }) - }; - - let editor = ace.edit("editor"); - let timer; - - editor.session.setMode("ace/mode/rst"); - editor.session.setUseWrapMode(true); - - editor.setTheme("ace/theme/iplastic"); - editor.setShowPrintMargin(false); - - editor.on("input", function () { - document.getElementById("done").disabled = true; - document.getElementById("end_rst").value = editor.getValue(); - - if (timer !== undefined) { - clearTimeout(timer); - } - timer = setTimeout(do_preview, 1000); - }); - }; - </script> -{% endblock %} diff --git a/templates/staff/jams/edit_info.html b/templates/staff/jams/edit_info.html deleted file mode 100644 index 75df1957..00000000 --- a/templates/staff/jams/edit_info.html +++ /dev/null @@ -1,309 +0,0 @@ -{% extends "main/base.html" %} -{% block title %}Staff | Jams | Edit (Info){% endblock %} -{% block og_title %}Staff | Jams | Edit (Info){% endblock %} -{% block og_description %}Edit the basic info for a code jam{% endblock %} - -{% block page_classes %}uses-rst{% endblock %} - -{% block content %} - <div class="uk-container uk-container-small uk-section"> - <h1 class="uk-text-center">Code Jam: Edit (Info)</h1> - - <form action="{{ url_for("staff.jams.edit.info", jam=jam.number) }}" method="post" class="uk-form-horizontal"> - <div> - <div class="uk-form-label"> - <label class="uk-form-label" for="repo">Repo URL</label> - </div> - - <div class="uk-form-controls uk-form-controls-text"> - <input class="uk-input" name="repo" id="repo" type="text" value="{{ jam.repo }}" required /> - </div> - </div> - <div> - <div class="uk-form-label"> - <label class="uk-form-label" for="theme">Theme</label> - </div> - - <div class="uk-form-controls uk-form-controls-text"> - <input class="uk-input" name="theme" id="theme" type="text" value="{{ jam.theme }}" required /> - </div> - </div> - - <div> - <div class="uk-form-label"> - <label class="uk-form-label"> - Info (RST) - <br /> - <span class="uk-text-meta">Will be available as soon as the jam state is "Announced"</span> - <br /> - <br /> - <button class="uk-button uk-button-secondary" type="button" id="preview-info-button"> - <i class="uk-icon fa-fw far fa-eye"></i> Preview - </button> - </label> - </div> - - <div class="uk-form-controls uk-form-controls-text"> - <div id="info_editor" class="uk-textarea editor">{{ jam.info_rst }}</div> - </div> - - <input type="hidden" name="info_rst" id="info_rst" value="{{ jam.info_rst }}" /> - </div> - - <div> - <div class="uk-form-label"> - <label class="uk-form-label"> - Task (RST) - <br/> - <span class="uk-text-meta">Will not be available until the jam state is "Running"</span> - <br /> - <br /> - <button class="uk-button uk-button-secondary" type="button" id="preview-task-button"> - <i class="uk-icon fa-fw far fa-eye"></i> Preview - </button> - </label> - </div> - - <div class="uk-form-controls uk-form-controls-text"> - <div id="task_editor" class="uk-textarea editor">{{ jam.task_rst }}</div> - </div> - - <input type="hidden" name="task_rst" id="task_rst" value="{{ jam.task_rst }}" /> - </div> - - <input type="hidden" name="csrf_token" id="csrf_token" value="{{ csrf_token() }}"/> - - <div class="uk-align-center uk-text-center"> - <a id="back" class="uk-button uk-button-default" href="{{ url_for("staff.jams.index") }}"> - <i class="uk-icon fa-fw far fa-arrow-left"></i> Back - </a> - <button id="done" class="uk-button uk-button-primary" type="submit" disabled> - <i class="uk-icon fa-fw far fa-check"></i> Done - </button> - </div> - </form> - </div> - - <div id="preview-info-modal" class="uk-flex-top" uk-modal> - <div class="uk-modal-dialog"> - <button class="uk-modal-close-default" type="button" uk-close></button> - - <div class="uk-modal-body"> - <h2>Code Jam {{ jam.number }}: {{ jam.title }} <a href="{{ jam.repo }}" id="preview-info-url"><i class="uk-icon fa-fw fab fa-gitlab"></i></a></h2> - <p class="uk-text-meta">Theme: <span id="preview-info-theme">{{ jam.theme }}</span></p> - - <div id="preview-info-div"> - {{ jam.task_html | safe }} - </div> - </div> - - <div class="uk-modal-footer"> - <div class="uk-text-center"> - <button class="uk-button uk-button-default uk-modal-close" type="button" id="state-cancel"> - <i class="uk-icon fa-fw far fa-arrow-left"></i> Close - </button> - </div> - </div> - </div> - </div> - - <div id="preview-task-modal" class="uk-flex-top" uk-modal> - <div class="uk-modal-dialog"> - <button class="uk-modal-close-default" type="button" uk-close></button> - - <div class="uk-modal-body"> - <h2>Code Jam {{ jam.number }}: {{ jam.title }} <a href="{{ jam.repo }}" id="preview-task-url"><i class="uk-icon fa-fw fab fa-gitlab"></i></a></h2> - <p class="uk-text-meta">Theme: <span id="preview-task-theme">{{ jam.theme }}</span></p> - - <div id="preview-task-div"> - {{ jam.task_html | safe }} - </div> - </div> - - <div class="uk-modal-footer"> - <div class="uk-text-center"> - <button class="uk-button uk-button-default uk-modal-close" type="button" id="state-cancel"> - <i class="uk-icon fa-fw far fa-arrow-left"></i> Close - </button> - </div> - </div> - </div> - </div> - - <script type="application/javascript"> - "use strict"; - - window.onload = () => { - let csrf_token = "{{ csrf_token() }}"; - let info_modal = UIkit.modal(document.getElementById("preview-info-modal")); - let task_modal = UIkit.modal(document.getElementById("preview-task-modal")); - let preview_url = "{{ url_for("staff.render") }}"; - - function do_preview_info(callback) { - let oReq = new XMLHttpRequest(); - - oReq.addEventListener("load", function () { - let response = JSON.parse(this.responseText); - - if (response.error !== undefined) { - document.getElementById("done").disabled = true; - - if (response.error_lines !== undefined) { - info_editor.session.setAnnotations(response.error_lines); - document.getElementById("preview-info-div").innerHTML = "<h3>Error - see editor margin</h3>"; - } else { - console.log("Error: " + response.error); - document.getElementById("preview-info-div").innerHTML = "<h3>Error</h3><p>" + response.error + "<p>"; - } - } else { - document.getElementById("done").disabled = false; - document.getElementById("preview-info-div").innerHTML = response.data; - - info_editor.session.setAnnotations([]); - } - - if (callback !== undefined) { - callback(); - } - }); - - let data = info_editor.getValue(); - - if (data.replace("\s", "").length < 1) { - document.getElementById("done").disabled = true; - - if (callback !== undefined) { - UIkit.notification({ - "message": "Please enter some text to preview", - "status": "danger", - "pos": "bottom-center", - "timeout": 5000 - }); - } - return false; - } - - oReq.open("POST", preview_url); - - oReq.setRequestHeader("Content-type", "application/json"); - oReq.setRequestHeader("X-CSRFToken", csrf_token); - - oReq.send(JSON.stringify({"data": data})); - - return false; - } - - function do_preview_task(callback) { - let oReq = new XMLHttpRequest(); - - oReq.addEventListener("load", function () { - let response = JSON.parse(this.responseText); - - if (response.error !== undefined) { - document.getElementById("done").disabled = true; - - if (response.error_lines !== undefined) { - task_editor.session.setAnnotations(response.error_lines); - document.getElementById("preview-task-div").innerHTML = "<h3>Error - see editor margin</h3>"; - } else { - console.log("Error: " + response.error); - document.getElementById("preview-task-div").innerHTML = "<h3>Error</h3><p>" + response.error + "<p>"; - } - } else { - document.getElementById("done").disabled = false; - document.getElementById("preview-task-div").innerHTML = response.data; - - task_editor.session.setAnnotations([]); - } - - if (callback !== undefined) { - callback(); - } - }); - - let data = task_editor.getValue(); - - if (data.replace("\s", "").length < 1) { - document.getElementById("done").disabled = true; - - if (callback !== undefined) { - UIkit.notification({ - "message": "Please enter some text to preview", - "status": "danger", - "pos": "bottom-center", - "timeout": 5000 - }); - } - return false; - } - - oReq.open("POST", preview_url); - - oReq.setRequestHeader("Content-type", "application/json"); - oReq.setRequestHeader("X-CSRFToken", csrf_token); - - oReq.send(JSON.stringify({"data": data})); - - return false; - } - - document.getElementById("preview-task-button").onclick = function () { - do_preview_task(function () { - task_modal.show(); - }) - }; - - document.getElementById("preview-info-button").onclick = function () { - do_preview_info(function () { - info_modal.show(); - }) - }; - - document.getElementById("theme").oninput = function () { - document.getElementById("preview-task-theme").textContent = this.value; - document.getElementById("preview-info-theme").textContent = this.value; - }; - - document.getElementById("repo").oninput = function () { - document.getElementById("preview-task-url").href = this.value; - document.getElementById("preview-info-url").href = this.value; - }; - - let info_editor = ace.edit("info_editor"); - let task_editor = ace.edit("task_editor"); - let info_timer, task_timer; - - info_editor.session.setMode("ace/mode/rst"); - info_editor.session.setUseWrapMode(true); - - info_editor.setTheme("ace/theme/iplastic"); - info_editor.setShowPrintMargin(false); - - info_editor.on("input", function () { - document.getElementById("done").disabled = true; - document.getElementById("info_rst").value = info_editor.getValue(); - - if (info_timer !== undefined) { - clearTimeout(info_timer); - } - info_timer = setTimeout(do_preview_info, 1000); - }); - - task_editor.session.setMode("ace/mode/rst"); - task_editor.session.setUseWrapMode(true); - - task_editor.setTheme("ace/theme/iplastic"); - task_editor.setShowPrintMargin(false); - - task_editor.on("input", function () { - document.getElementById("done").disabled = true; - document.getElementById("task_rst").value = task_editor.getValue(); - - if (task_timer !== undefined) { - clearTimeout(task_timer); - } - task_timer = setTimeout(do_preview_task, 1000); - }); - }; - </script> -{% endblock %} diff --git a/templates/staff/jams/forms/preamble_edit.html b/templates/staff/jams/forms/preamble_edit.html deleted file mode 100644 index 85747713..00000000 --- a/templates/staff/jams/forms/preamble_edit.html +++ /dev/null @@ -1,150 +0,0 @@ -{% extends "main/base.html" %} -{% block title %}Staff | Forms | Edit Preamble{% endblock %} -{% block og_title %}Staff | Forms | Edit Preamble{% endblock %} - -{% block page_classes %}uses-rst{% endblock %} - -{% block content %} - <div class="uk-container uk-container-small uk-section"> - <h1 class="uk-text-center">Form: Edit Preamble</h1> - - <form action="{{ url_for("staff.jams.forms.preamble.edit", jam=jam.number) }}" method="post" class="uk-form-horizontal"> - <div> - <div class="uk-form-label"> - <label class="uk-form-label">Preamble (RST)</label> - </div> - - <div class="uk-form-controls uk-form-controls-text"> - <div id="editor" class="uk-textarea">{{ form.preamble_rst }}</div> - </div> - - <input type="hidden" name="preamble_rst" id="preamble_rst" value="{{ form.preamble_rst }}" /> - </div> - - <input type="hidden" name="csrf_token" id="csrf_token" value="{{ csrf_token() }}"/> - - <div class="uk-align-center uk-text-center"> - <a id="back" class="uk-button uk-button-default" href="{{ url_for("staff.jams.forms.view", jam=jam.number) }}"> - <i class="uk-icon fa-fw far fa-arrow-left"></i> Back - </a> - <button class="uk-button uk-button-secondary" type="button" id="preview"> - <i class="uk-icon fa-fw far fa-eye"></i> Preview - </button> - <button id="done" class="uk-button uk-button-primary" type="submit" disabled> - <i class="uk-icon fa-fw far fa-check"></i> Done - </button> - </div> - </form> - </div> - - <div id="preview-modal" class="uk-flex-top" uk-modal> - <div class="uk-modal-dialog"> - <button class="uk-modal-close-default" type="button" uk-close></button> - - <div class="uk-modal-body"> - <h2>Form: {{ jam.number }}</h2> - - <div id="preview-div"> - {{ jam.preamble_html | safe }} - </div> - </div> - - <div class="uk-modal-footer"> - <div class="uk-text-center"> - <button class="uk-button uk-button-default uk-modal-close" type="button" id="state-cancel"> - <i class="uk-icon fa-fw far fa-arrow-left"></i> Close - </button> - </div> - </div> - </div> - </div> - - <script type="application/javascript"> - "use strict"; - - window.onload = () => { - let csrf_token = "{{ csrf_token() }}"; - let modal = UIkit.modal(document.getElementById("preview-modal")); - let preview_url = "{{ url_for("staff.render") }}"; - - function do_preview(callback) { - let oReq = new XMLHttpRequest(); - - oReq.addEventListener("load", function () { - let response = JSON.parse(this.responseText); - - if (response.error !== undefined) { - document.getElementById("done").disabled = true; - - if (response.error_lines !== undefined) { - editor.session.setAnnotations(response.error_lines); - document.getElementById("preview-div").innerHTML = "<h3>Error - see editor margin</h3>"; - } else { - console.log("Error: " + response.error); - document.getElementById("preview-div").innerHTML = "<h3>Error</h3><p>" + response.error + "<p>"; - } - } else { - document.getElementById("done").disabled = false; - document.getElementById("preview-div").innerHTML = response.data; - - editor.session.setAnnotations([]); - } - - if (callback !== undefined) { - callback(); - } - }); - - let data = editor.getValue(); - - if (data.replace("\s", "").length < 1) { - document.getElementById("done").disabled = true; - - if (callback !== undefined) { - UIkit.notification({ - "message": "Please enter some text to preview", - "status": "danger", - "pos": "bottom-center", - "timeout": 5000 - }); - } - return false; - } - - oReq.open("POST", preview_url); - - oReq.setRequestHeader("Content-type", "application/json"); - oReq.setRequestHeader("X-CSRFToken", csrf_token); - - oReq.send(JSON.stringify({"data": editor.getValue()})); - - return false; - } - - document.getElementById("preview").onclick = function () { - do_preview(function () { - modal.show(); - }) - }; - - let editor = ace.edit("editor"); - let timer; - - editor.session.setMode("ace/mode/rst"); - editor.session.setUseWrapMode(true); - - editor.setTheme("ace/theme/iplastic"); - editor.setShowPrintMargin(false); - - editor.on("input", function () { - document.getElementById("done").disabled = true; - document.getElementById("preamble_rst").value = editor.getValue(); - - if (timer !== undefined) { - clearTimeout(timer); - } - timer = setTimeout(do_preview, 1000); - }); - }; - </script> -{% endblock %} diff --git a/templates/staff/jams/forms/questions_edit.html b/templates/staff/jams/forms/questions_edit.html deleted file mode 100644 index d6fe082c..00000000 --- a/templates/staff/jams/forms/questions_edit.html +++ /dev/null @@ -1,354 +0,0 @@ -{% extends "main/base.html" %} -{% block title %}Staff | Jams | Question Edit{% endblock %} -{% block og_title %}Staff | Jams | Question Edit{% endblock %} -{% block og_description %}Edit a question{% endblock %} -{% block content %} - <div class="uk-container uk-container-small uk-section"> - <h1>Question Edit</h1> - - <form class="uk-form-horizontal" method="post" action="{{ url_for("staff.jams.forms.questions.edit", question=question.id) }}"> - <div> - <div class="uk-form-label"> - <label class="uk-form-label" for="title">Title</label> - </div> - <div class="uk-form-controls-text uk-form-controls"> - <input type="text" id="title" name="title" class="uk-input" value="{{ question.title }}"> - </div> - </div> - <div> - <div class="uk-form-label"> - <label class="uk-form-label" for="optional">Optional</label> - </div> - <div class="uk-form-controls-text uk-form-controls"> - <select class="uk-select" id="optional" name="optional"> - {% if question.optional %} - <option value="optional" selected>Optional</option> - <option value="required">Required</option> - {% else %} - <option value="optional">Optional</option> - <option value="required" selected>Required</option> - {% endif %} - </select> - </div> - </div> - <div> - <div class="uk-form-label"> - <label class="uk-form-label" for="type">Type</label> - </div> - <div class="uk-form-controls-text uk-form-controls"> - <select class="uk-select" id="type" name="type"> - {% if question.type == "checkbox" %} - <option value="checkbox" selected>Checkbox</option> - {% else %} - <option value="checkbox">Checkbox</option> - {% endif %} - - {% if question.type == "email" %} - <option value="email" selected>Email</option> - {% else %} - <option value="email">Email</option> - {% endif %} - - {% if question.type == "number" %} - <option value="number" selected>Number</option> - {% else %} - <option value="number">Number</option> - {% endif %} - - {% if question.type == "radio" %} - <option value="radio" selected>Radio</option> - {% else %} - <option value="radio">Radio</option> - {% endif %} - - {% if question.type == "range" %} - <option value="range" selected>Range</option> - {% else %} - <option value="range">Range</option> - {% endif %} - - {% if question.type == "slider" %} - <option value="slider" selected>Slider</option> - {% else %} - <option value="slider">Slider</option> - {% endif %} - - {% if question.type == "textarea" %} - <option value="textarea" selected>Text (Block)</option> - {% else %} - <option value="textarea">Text (Block)</option> - {% endif %} - - {% if question.type == "text" %} - <option value="text" selected>Text (Line)</option> - {% else %} - <option value="text">Text (Line)</option> - {% endif %} - </select> - </div> - </div> - - {% if question.type == "radio" %} - <div id="radio-section"> - {% else %} - <div id="radio-section" hidden="hidden"> - {% endif %} - <br /> - <div> - <div class="uk-form-label"> - <button type="button" class="uk-button uk-button-primary uk-width-1-1" id="radio-add-button"><i class="uk-icon fa-fw far fa-plus"></i> Add</button> - </div> - <div class="uk-form-controls-text uk-form-controls"> - <input type="text" id="radio-add-input" class="uk-input" placeholder="Item"> - </div> - </div> - <div> - <div class="uk-form-label"> - <button type="button" class="uk-button uk-button-danger uk-width-1-1" id="radio-remove-button"><i class="uk-icon fa-fw far fa-minus"></i> Remove</button> - </div> - <div class="uk-form-controls-text uk-form-controls"> - <select class="uk-select" id="radio-options"> - <option hidden="hidden" disabled selected value="none"></option> - - {% for option in question.data.options %} - <option value="{{ option }}">{{ option }}</option> - {% endfor %} - </select> - {% if question.data.options %} - <input type="hidden" id="options" name="options" value="{{ "{\"options\": " + question.data.options.__str__() + "}" | safe }}"> - {% else %} - <input type="hidden" id="options" name="options" value="{{ "{\"options\": []}" }}"> - {% endif %} - </div> - </div> - </div> - - {% if question.type in ["number", "range", "slider"] %} - <div id="number-section"> - {% else %} - <div id="number-section" hidden="hidden"> - {% endif %} - <br /> - <div> - <div class="uk-form-label"> - <label class="uk-form-label" for="min">Min Value</label> - </div> - <div class="uk-form-controls-text uk-form-controls"> - <input type="text" id="min" name="min" class="uk-input" value="{{ question.data.min }}"> - </div> - </div> - <div> - <div class="uk-form-label"> - <label class="uk-form-label" for="max">Max Value</label> - </div> - <div class="uk-form-controls-text uk-form-controls"> - <input type="text" id="max" name="max" class="uk-input" value="{{ question.data.max }}"> - </div> - </div> - </div> - - <br /> - - <div> - <input type="hidden" name="csrf_token" id="csrf_token" value="{{ csrf_token() }}"/> - - <a class="uk-button uk-button-danger uk-modal-close" href="{{ url_for("staff.jams.forms.questions") }}"> - <i class="uk-icon fa-fw far fa-times"></i> Cancel - </a> - <button class="uk-button uk-button-primary" type="submit" id="question-submit"> - <i class="uk-icon fa-fw far fa-check"></i> Save - </button> - </div> - </form> - </div> - - <script type="application/javascript"> - "use strict"; - const new_question_title = document.getElementById("title"); - const new_question_optional = document.getElementById("optional"); - const new_question_type = document.getElementById("type"); - - const radio_section = document.getElementById("radio-section"); - - const radio_add_button = document.getElementById("radio-add-button"); - const radio_add_input = document.getElementById("radio-add-input"); - const radio_remove_button = document.getElementById("radio-remove-button"); - const radio_options = document.getElementById("radio-options"); - const hidden_radio_options = document.getElementById("options"); - - const number_section = document.getElementById("number-section"); - - const number_min = document.getElementById("min"); - const number_max = document.getElementById("max"); - - const submit_button = document.getElementById("question-submit"); - - let current_radio_options; - - {% if question.data.options %} - current_radio_options = {{ question.data.options | safe }}; - {% else %} - current_radio_options = Array(); - {% endif %} - - new_question_type.onchange = function() { - if (this.value === "checkbox") { - radio_section.setAttribute("hidden", "hidden"); - number_section.setAttribute("hidden", "hidden"); - } else if (this.value === "email") { - radio_section.setAttribute("hidden", "hidden"); - number_section.setAttribute("hidden", "hidden"); - } else if (this.value === "number") { - radio_section.setAttribute("hidden", "hidden"); - number_section.removeAttribute("hidden"); - } else if (this.value === "radio") { - radio_section.removeAttribute("hidden"); - number_section.setAttribute("hidden", "hidden"); - } else if (this.value === "range") { - radio_section.setAttribute("hidden", "hidden"); - number_section.removeAttribute("hidden"); - } else if (this.value === "slider") { - radio_section.setAttribute("hidden", "hidden"); - number_section.removeAttribute("hidden"); - } else if (this.value === "textarea") { - radio_section.setAttribute("hidden", "hidden"); - number_section.setAttribute("hidden", "hidden"); - } else if (this.value === "text") { - radio_section.setAttribute("hidden", "hidden"); - number_section.setAttribute("hidden", "hidden"); - } else { - radio_section.setAttribute("hidden", "hidden"); - number_section.setAttribute("hidden", "hidden"); - } - - checkValid(); - }; - - new_question_title.oninput = checkValid; - new_question_optional.onchange = checkValid; - - radio_add_input.onkeyup = function(event) { - event.preventDefault(); - - if (event.which === 13 || event.keyCode === 13) { - radio_add_button.onclick(undefined); - } - }; - - radio_add_button.onclick = function() { - let value = radio_add_input.value; - - if (value.length < 1) { - radio_add_input.classList.add("uk-form-danger"); - radio_add_input.focus(); - } else { - let index = current_radio_options.indexOf(value); - - if (index > -1 || value === "none") { - radio_add_input.classList.add("uk-form-danger"); - radio_add_input.focus(); - } else { - radio_add_input.classList.remove("uk-form-danger"); - radio_add_input.value = ""; - - let element = document.createElement("option"); - element.value = value; - element.text = value; - - radio_options.appendChild(element); - current_radio_options.push(value); - hidden_radio_options.value = JSON.stringify({"options": current_radio_options}); - } - } - - checkValid(); - }; - - radio_remove_button.onclick = function() { - let value = radio_options.value; - - if (value === "none") { - return; - } - - let index = current_radio_options.indexOf(value); - - if (index < 0) { // We have a problem! - console.log("Unable to remove value from radio values because it doesn't exist: " + value) - } else { - current_radio_options.splice(index, 1); - } - - for (let element of radio_options.getElementsByTagName("option")) { - if (element.value === "none") { - continue; - } - - if (element.value === value) { - radio_options.removeChild(element); - } - } - - hidden_radio_options.value = JSON.stringify({"options": current_radio_options}); - radio_options.value = "none"; - radio_add_input.focus(); - checkValid(); - }; - - number_min.oninput = function() { - if (this.value.length > 0 && isNaN(parseInt(this.value))) { - this.classList.add("uk-form-danger") - } else { - this.classList.remove("uk-form-danger") - } - - checkValid(); - }; - - number_max.oninput = function() { - if (this.value.length > 0 && isNaN(parseInt(this.value))) { - this.classList.add("uk-form-danger") - } else { - this.classList.remove("uk-form-danger") - } - - checkValid(); - }; - - function checkValid() { - if (new_question_title.value.length < 1) { - return setButtonEnabled(false); - } - - let question_type = new_question_type.value; - - if (question_type === "radio") { - if (current_radio_options.length < 1) { - return setButtonEnabled(false); - } - } - - if ( question_type === "number" - || question_type === "range" - || question_type === "slider" - ) { - if (isNaN(parseInt(number_min.value))) { - return setButtonEnabled(false); - } - if (isNaN(parseInt(number_max.value))) { - return setButtonEnabled(false); - } - - if (number_min.value.length < 1 || number_max.value.length < 1) { - return setButtonEnabled(false); - } - } - - return setButtonEnabled(true); - } - - function setButtonEnabled(enabled) { - submit_button.disabled = !enabled; - } - </script> -{% endblock %} diff --git a/templates/staff/jams/forms/questions_view.html b/templates/staff/jams/forms/questions_view.html deleted file mode 100644 index f8eeea40..00000000 --- a/templates/staff/jams/forms/questions_view.html +++ /dev/null @@ -1,593 +0,0 @@ -{% extends "main/base.html" %} -{% block title %}Staff | Jams | Questions{% endblock %} -{% block og_title %}Staff | Jams | Questions{% endblock %} -{% block og_description %}Manage all created questions{% endblock %} -{% block content %} - <div class="uk-container uk-container-small uk-section"> - <h1>Questions List</h1> - - <a class="uk-button uk-button-default" href="{{ url_for("staff.jams.index") }}"><i class="uk-icon fa-fw far fa-arrow-left"></i> Back</a> - <button class="uk-button uk-button-primary" id="add-button"><i class="uk-icon fa-fw far fa-plus"></i> Add Question</button> - {# <a class="uk-button uk-button-secondary" target="_blank" href="{{ url_for("staff.index") }}"><i class="uk-icon fa-fw far fa-eye"></i> Preview</a> #} - - {% if not questions %} - <p id="no-questions-paragraph">No questions found. Add one above!</p> - <table class="uk-table uk-table-divider uk-table-striped uk-border" id="table" hidden="hidden"> - <thead> - <tr> - <th class="uk-table-shrink"> </th> - <th><strong>ID</strong></th> - <th class="uk-table-shrink">Optional</th> - <th>Title</th> - <th class="uk-table-shrink">Type</th> - <th>Data</th> - </tr> - </thead> - <tbody id="table-body"> - </tbody> - </table> - {% else %} - <p id="no-questions-paragraph" hidden="hidden">No questions found. Add one above!</p> - - <div class="uk-overflow-auto"> - <br /> - <table class="uk-table uk-table-divider uk-table-striped uk-border" id="table"> - <thead> - <tr> - <th class="uk-table-shrink"> </th> - <th><strong>ID</strong></th> - <th class="uk-table-shrink">Optional</th> - <th>Title</th> - <th class="uk-table-shrink">Type</th> - <th>Data</th> - </tr> - </thead> - <tbody id="table-body"> - {% for question in questions %} - <tr id="row-{{ question.id }}"> - <td class="uk-table-shrink"> - <button class="uk-button-small uk-button uk-button-danger delete-question-button" data-question-id="{{ question.id }}"><i class="uk-icon fa-fw far fa-trash"></i></button> - <a href="{{ url_for("staff.jams.forms.questions.edit", question=question.id) }}" class="uk-button-small uk-button uk-button-primary edit-question-button"><i class="uk-icon fa-fw far fa-pencil"></i></a> - </td> - <td class="uk-text-truncate" title="{{ question.id }}">{{ question.id }}</td> - <td class="uk-table-shrink"> - {% if question.optional %} - <i class="uk-icon uk-text-success fa-fw far fa-check"></i> - {% else %} - <i class="uk-icon uk-text-danger fa-fw far fa-times"></i> - {% endif %} - </td> - <td title="{{ question.title }}">{{ question.title }}</td> - <td class="uk-table-shrink" title="{{ question.type.title() }}">{{ question.type.title() }}</td> - <td> - {% if question.type == "text" %} - - {% elif question.type == "number" %} - <i class="uk-icon fa-fw far fa-arrow-up" title="Max value"></i> {{ question.data.max }} - <br /> - <i class="uk-icon fa-fw far fa-arrow-down" title="Min value"></i> {{ question.data.min }} - {% elif question.type == "checkbox" %} - - {% elif question.type == "email" %} - - {% elif question.type == "textarea" %} - - {% elif question.type == "radio" %} - <ul> - {% for option in question.data.options %} - <li>{{ option }}</li> - {% endfor %} - </ul> - {% elif question.type == "range" %} - <i class="uk-icon fa-fw far fa-arrow-up" title="Max value"></i> {{ question.data.max }} - <br /> - <i class="uk-icon fa-fw far fa-arrow-down" title="Min value"></i> {{ question.data.min }} - {% elif question.type == "slider" %} - <i class="uk-icon fa-fw far fa-arrow-up" title="Max value"></i> {{ question.data.max }} - <br /> - <i class="uk-icon fa-fw far fa-arrow-down" title="Min value"></i> {{ question.data.min }} - {% else %} - {{ question.data }} - {% endif %} - </td> - </tr> - {% endfor %} - </tbody> - </table> - </div> - {% endif %} - </div> - - <div id="question-modal" class="uk-flex-top" uk-modal> - <div class="uk-modal-dialog"> - <button class="uk-modal-close-default" type="button" uk-close></button> - - <div class="uk-modal-header"> - <h2 class="uk-modal-title">Add Question</h2> - </div> - - <div class="uk-modal-body"> - <form class="uk-form-horizontal"> - <div id="loading-spinner" class="uk-text-center uk-margin-small-top" hidden="hidden"> - <div uk-spinner></div> - </div> - <div id="new-question-section"> - <div> - <div class="uk-form-label"> - <label class="uk-form-label" for="new-question-title">Title</label> - </div> - <div class="uk-form-controls-text uk-form-controls"> - <input type="text" id="new-question-title" class="uk-input"> - </div> - </div> - <div> - <div class="uk-form-label"> - <label class="uk-form-label" for="new-question-optional">Optional</label> - </div> - <div class="uk-form-controls-text uk-form-controls"> - <select class="uk-select" id="new-question-optional"> - <option hidden="hidden" disabled selected value="none"></option> - <option value="optional">Optional</option> - <option value="required">Required</option> - </select> - </div> - </div> - <div> - <div class="uk-form-label"> - <label class="uk-form-label" for="new-question-type">Type</label> - </div> - <div class="uk-form-controls-text uk-form-controls"> - <select class="uk-select" id="new-question-type"> - <option hidden="hidden" disabled selected value="none"></option> - <option value="checkbox">Checkbox</option> - <option value="email">Email</option> - <option value="number">Number</option> - <option value="radio">Radio</option> - <option value="range">Range</option> - <option value="slider">Slider</option> - <option value="textarea">Text (Block)</option> - <option value="text">Text (Line)</option> - </select> - </div> - </div> - </div> - - <div id="radio-section" hidden="hidden"> - <br /> - <div> - <div class="uk-form-label"> - <button type="button" class="uk-button uk-button-primary uk-width-1-1" id="radio-add-button"><i class="uk-icon fa-fw far fa-plus"></i> Add</button> - </div> - <div class="uk-form-controls-text uk-form-controls"> - <input type="text" id="radio-add-input" class="uk-input" placeholder="Item"> - </div> - </div> - <div> - <div class="uk-form-label"> - <button type="button" class="uk-button uk-button-danger uk-width-1-1" id="radio-remove-button"><i class="uk-icon fa-fw far fa-minus"></i> Remove</button> - </div> - <div class="uk-form-controls-text uk-form-controls"> - <select class="uk-select" id="radio-options"> - <option hidden="hidden" disabled selected value="none"></option> - </select> - </div> - </div> - </div> - - <div id="number-section" hidden="hidden"> - <br /> - <div> - <div class="uk-form-label"> - <label class="uk-form-label" for="number-min">Min Value</label> - </div> - <div class="uk-form-controls-text uk-form-controls"> - <input type="text" id="number-min" class="uk-input"> - </div> - </div> - <div> - <div class="uk-form-label"> - <label class="uk-form-label" for="number-max">Max Value</label> - </div> - <div class="uk-form-controls-text uk-form-controls"> - <input type="text" id="number-max" class="uk-input"> - </div> - </div> - </div> - </form> - </div> - - <div class="uk-modal-footer"> - <div class="uk-text-center"> - <button class="uk-button uk-button-danger uk-modal-close" type="button" id="state-cancel"> - <i class="uk-icon fa-fw far fa-times"></i> Cancel - </button> - <button class="uk-button uk-button-primary" type="button" id="question-submit" disabled> - <i class="uk-icon fa-fw far fa-check"></i> Save - </button> - </div> - </div> - </div> - </div> - - <script type="application/javascript"> - "use strict"; - - const actions = new JamActions("{{ url_for("staff.jams.action") }}", "{{ csrf_token() }}"); - const table_body = document.getElementById("table-body"); - const table = document.getElementById("table"); - const no_questions_paragraph = document.getElementById("no-questions-paragraph"); - - let all_questions = {{ question_ids | safe }}; - const question_edit_url = "{{ url_for("staff.jams.forms.questions.edit", question="NONE") }}"; - - const add_button = document.getElementById("add-button"); - const modal = UIkit.modal(document.getElementById("question-modal")); - const loading_spinner = document.getElementById("loading-spinner"); - - const new_question_section = document.getElementById("new-question-section"); - const new_question_title = document.getElementById("new-question-title"); - const new_question_optional = document.getElementById("new-question-optional"); - const new_question_type = document.getElementById("new-question-type"); - - const radio_section = document.getElementById("radio-section"); - - const radio_add_button = document.getElementById("radio-add-button"); - const radio_add_input = document.getElementById("radio-add-input"); - const radio_remove_button = document.getElementById("radio-remove-button"); - const radio_options = document.getElementById("radio-options"); - - const number_section = document.getElementById("number-section"); - - const number_min = document.getElementById("number-min"); - const number_max = document.getElementById("number-max"); - - const submit_button = document.getElementById("question-submit"); - - let current_radio_options = Array(); - - add_button.onclick = function() { - clearModal(); - checkModal(); - modal.show(); - }; - - new_question_type.onchange = function() { - if (this.value === "checkbox") { - radio_section.setAttribute("hidden", "hidden"); - number_section.setAttribute("hidden", "hidden"); - } else if (this.value === "email") { - radio_section.setAttribute("hidden", "hidden"); - number_section.setAttribute("hidden", "hidden"); - } else if (this.value === "number") { - radio_section.setAttribute("hidden", "hidden"); - number_section.removeAttribute("hidden"); - } else if (this.value === "radio") { - radio_section.removeAttribute("hidden"); - number_section.setAttribute("hidden", "hidden"); - } else if (this.value === "range") { - radio_section.setAttribute("hidden", "hidden"); - number_section.removeAttribute("hidden"); - } else if (this.value === "slider") { - radio_section.setAttribute("hidden", "hidden"); - number_section.removeAttribute("hidden"); - } else if (this.value === "textarea") { - radio_section.setAttribute("hidden", "hidden"); - number_section.setAttribute("hidden", "hidden"); - } else if (this.value === "text") { - radio_section.setAttribute("hidden", "hidden"); - number_section.setAttribute("hidden", "hidden"); - } else { - radio_section.setAttribute("hidden", "hidden"); - number_section.setAttribute("hidden", "hidden"); - } - - checkModal(); - }; - - new_question_title.oninput = checkModal; - new_question_optional.onchange = checkModal; - - radio_add_input.onkeyup = function(event) { - event.preventDefault(); - - if (event.which === 13 || event.keyCode === 13) { - radio_add_button.onclick(undefined); - } - }; - - radio_add_button.onclick = function() { - let value = radio_add_input.value; - - if (value.length < 1) { - radio_add_input.classList.add("uk-form-danger"); - radio_add_input.focus(); - } else { - let index = current_radio_options.indexOf(value); - - if (index > -1 || value === "none") { - radio_add_input.classList.add("uk-form-danger"); - radio_add_input.focus(); - } else { - radio_add_input.classList.remove("uk-form-danger"); - radio_add_input.value = ""; - - let element = document.createElement("option"); - element.value = value; - element.text = value; - - radio_options.appendChild(element); - current_radio_options.push(value); - } - } - - checkModal(); - }; - - radio_remove_button.onclick = function() { - let value = radio_options.value; - - if (value === "none") { - return; - } - - let index = current_radio_options.indexOf(value); - - if (index < 0) { // We have a problem! - console.log("Unable to remove value from radio values because it doesn't exist: " + value) - } else { - current_radio_options.splice(index, 1); - } - - for (let element of radio_options.getElementsByTagName("option")) { - if (element.value === "none") { - continue; - } - - if (element.value === value) { - radio_options.removeChild(element); - } - } - - radio_options.value = "none"; - radio_add_input.focus(); - checkModal(); - }; - - number_min.oninput = function() { - if (this.value.length > 0 && isNaN(parseInt(this.value))) { - this.classList.add("uk-form-danger") - } else { - this.classList.remove("uk-form-danger") - } - - checkModal(); - }; - - number_max.oninput = function() { - if (this.value.length > 0 && isNaN(parseInt(this.value))) { - this.classList.add("uk-form-danger") - } else { - this.classList.remove("uk-form-danger") - } - - checkModal(); - }; - - submit_button.onclick = function () { - let type = new_question_type.value; - let optional = new_question_optional.value === "optional"; - let title = new_question_title.value; - - let question_data = { - "type": type, - "optional": optional, - "title": title - }; - - if (type === "radio") { - question_data.data = {"options": current_radio_options}; - } else if (type === "number" - || type === "range" - || type === "slider") { - question_data.data = { - "max": parseInt(number_max.value), - "min": parseInt(number_min.value) - }; - } - - number_section.setAttribute("hidden", "hidden"); - new_question_section.setAttribute("hidden", "hidden"); - radio_section.setAttribute("hidden", "hidden"); - loading_spinner.removeAttribute("hidden"); - - actions.create_question(question_data, function(result, data) { - if (result) { - question_data["id"] = data.id; - addToTable(question_data); - modal.hide(); - clearModal(); - - UIkit.notification({ - "message": "Question added", - "status": "success", - "pos": "bottom-center", - "timeout": 5000, - }); - } else { - console.log(data); - UIkit.notification({ - "message": "Failed to create question", - "status": "danger", - "pos": "bottom-center", - "timeout": 5000, - }); - } - }) - }; - - const toTitleCase = (str) => str.replace(/\b\S/g, t => t.toUpperCase()); - - function hookUpDeleteButtons() { - for (let element of document.getElementsByClassName("delete-question-button")) { - element.onclick = function() { - let question_id = this.getAttribute("data-question-id"); - let row = document.getElementById("row-" + question_id); - - actions.delete_question(question_id, function(result, data) { - if (result) { - document.getElementById("table-body").removeChild(row); - UIkit.notification({ - "message": "Question deleted", - "status": "success", - "pos": "bottom-center", - "timeout": 5000, - }); - } else { - console.log(data); - UIkit.notification({ - "message": "Failed to delete question", - "status": "danger", - "pos": "bottom-center", - "timeout": 5000, - }); - } - }) - } - } - } - - function clearModal() { - // Existing question section - loading_spinner.setAttribute("hidden", "hidden"); - - new_question_section.removeAttribute("hidden"); - - // New question section - new_question_title.value = ""; - new_question_optional.value = "none"; - new_question_type.value = "none"; - - // Radio question section - radio_section.setAttribute("hidden", "hidden"); - - radio_add_input.value = ""; - radio_options.innerHTML = "<option hidden=\"hidden\" disabled selected value=\"none\"></option>"; - radio_options.value = "none"; - - current_radio_options = Array(); - - // Number question section - number_section.setAttribute("hidden", "hidden"); - } - - function checkModal() { - if (new_question_title.value.length < 1) { - return setButtonEnabled(false); - } - - if (new_question_optional.value === "none") { - return setButtonEnabled(false); - } - - let question_type = new_question_type.value; - - if (question_type === "none") { - return setButtonEnabled(false); - } - - if (question_type === "radio") { - if (current_radio_options.length < 1) { - return setButtonEnabled(false); - } - } - - if ( question_type === "number" - || question_type === "range" - || question_type === "slider" - ) { - if (isNaN(parseInt(number_min.value))) { - return setButtonEnabled(false); - } - if (isNaN(parseInt(number_max.value))) { - return setButtonEnabled(false); - } - - if (number_min.value.length < 1 || number_max.value.length < 1) { - return setButtonEnabled(false); - } - } - - return setButtonEnabled(true); - } - - function setButtonEnabled(enabled) { - submit_button.disabled = !enabled; - } - - function addToTable(question) { - console.log(question); - if (all_questions.indexOf(question.id) === -1) { - all_questions.push(question.id); - - let element = document.createElement("tr"); - element.id = "row-" + question.id; - element.innerHTML = getRowHTML(question); - - table_body.appendChild(element); - } - - if (all_questions.length > 0) { - table.removeAttribute("hidden"); - no_questions_paragraph.setAttribute("hidden", "hidden"); - } - hookUpDeleteButtons(); - } - - function getRowHTML(question) { - let optional; - let data; - - if (question.optional) { - optional = "<i class=\"uk-icon uk-text-success fa-fw far fa-check\"></i>" - } else { - optional = "<i class=\"uk-icon uk-text-danger fa-fw far fa-times\"></i>" - } - - if (question.type === "number" || question.type === "range" || question.type === "slider") { - data = ` -<i class="uk-icon fa-fw far fa-arrow-up" title="Max value"></i> ${question.data.max} -<br /> -<i class="uk-icon fa-fw far fa-arrow-down" title="Min value"></i> ${question.data.min} - ` - - } else if (question.type === "radio") { - data = "<ul>"; - - for (let option of question.data.options) { - data = data + `<li>${option}</li>` - } - data = data + "</ul>"; - } else { - data = "" - } - - let type = toTitleCase(question.type); - let q_url = question_edit_url.replace("NONE", question.id); - - const row = ` - <td class="uk-table-shrink"> - <button class="uk-button-small uk-button uk-button-danger delete-question-button" data-question-id="${question.id}"><i class="uk-icon fa-fw far fa-trash"></i></button> - <a href="${q_url}" class="uk-button-small uk-button uk-button-primary edit-question-button"><i class="uk-icon fa-fw far fa-pencil"></i></a> - </td> - <td class="uk-text-truncate" title="${question.id}">${question.id}</td> - <td class="uk-table-shrink">${optional}</td> - <td title="${question.title}">${question.title}</td> - <td class="uk-table-shrink" title="${type}">${type}</td> - <td>${data}</td> - `; - return row - } - - hookUpDeleteButtons(); - </script> -{% endblock %} diff --git a/templates/staff/jams/forms/view.html b/templates/staff/jams/forms/view.html deleted file mode 100644 index 49ea672d..00000000 --- a/templates/staff/jams/forms/view.html +++ /dev/null @@ -1,755 +0,0 @@ -{% extends "main/base.html" %} -{% block title %}Staff | Jams | Form{% endblock %} -{% block og_title %}Staff | Jams | Form{% endblock %} -{% block og_description %}Manage the form for a code jam{% endblock %} -{% block content %} - <div class="uk-container uk-container-small uk-section"> - <h1>Application Form {{ jam.number }}: {{ jam.title }}</h1> - - <a class="uk-button uk-button-default" href="{{ url_for("staff.jams.index") }}"><i class="uk-icon fa-fw far fa-arrow-left"></i> Back</a> - <a class="uk-button uk-button-secondary" href="{{ url_for("staff.jams.forms.preamble.edit", jam=jam.number) }}" id="preamble-button"><i class="uk-icon fa-fw far fa-pencil"></i> Edit Preamble</a> - <button class="uk-button uk-button-primary" id="add-button"><i class="uk-icon fa-fw far fa-plus"></i> Add Question</button> - {# <a class="uk-button uk-button-secondary" target="_blank" href="{{ url_for("staff.index") }}"><i class="uk-icon fa-fw far fa-eye"></i> Preview</a> #} - - {% if not questions %} - <p id="no-questions-paragraph">No questions found. Add one above!</p> - <table class="uk-table uk-table-divider uk-table-striped uk-border" id="table" hidden="hidden"> - <thead> - <tr> - <th class="uk-table-shrink"> </th> - <th><strong>ID</strong></th> - <th class="uk-table-shrink">Optional</th> - <th>Title</th> - <th class="uk-table-shrink">Type</th> - <th>Data</th> - </tr> - </thead> - <tbody id="table-body"> - </tbody> - </table> - {% else %} - <p id="no-questions-paragraph" hidden="hidden">No questions found. Add one above!</p> - - <div class="uk-overflow-auto"> - <br /> - <table class="uk-table uk-table-divider uk-table-striped uk-border" id="table"> - <thead> - <tr> - <th class="uk-table-shrink"> </th> - <th><strong>ID</strong></th> - <th class="uk-table-shrink">Optional</th> - <th>Title</th> - <th class="uk-table-shrink">Type</th> - <th>Data</th> - </tr> - </thead> - <tbody id="table-body"> - {% for question in questions %} - <tr id="row-{{ question.id }}"> - <td class="uk-table-shrink"> - <button class="uk-button-small uk-button uk-button-danger delete-question-button" data-question-id="{{ question.id }}"><i class="uk-icon fa-fw far fa-times"></i></button> - </td> - <td class="uk-text-truncate" title="{{ question.id }}">{{ question.id }}</td> - <td class="uk-table-shrink"> - {% if question.optional %} - <i class="uk-icon uk-text-success fa-fw far fa-check"></i> - {% else %} - <i class="uk-icon uk-text-danger fa-fw far fa-times"></i> - {% endif %} - </td> - <td title="{{ question.title }}">{{ question.title }}</td> - <td class="uk-table-shrink" title="{{ question.type.title() }}">{{ question.type.title() }}</td> - <td> - {% if question.type == "text" %} - - {% elif question.type == "number" %} - <i class="uk-icon fa-fw far fa-arrow-up" title="Max value"></i> {{ question.data.max }} - <br /> - <i class="uk-icon fa-fw far fa-arrow-down" title="Min value"></i> {{ question.data.min }} - {% elif question.type == "checkbox" %} - - {% elif question.type == "email" %} - - {% elif question.type == "textarea" %} - - {% elif question.type == "radio" %} - <ul> - {% for option in question.data.options %} - <li>{{ option }}</li> - {% endfor %} - </ul> - {% elif question.type == "range" %} - <i class="uk-icon fa-fw far fa-arrow-up" title="Max value"></i> {{ question.data.max }} - <br /> - <i class="uk-icon fa-fw far fa-arrow-down" title="Min value"></i> {{ question.data.min }} - {% elif question.type == "slider" %} - <i class="uk-icon fa-fw far fa-arrow-up" title="Max value"></i> {{ question.data.max }} - <br /> - <i class="uk-icon fa-fw far fa-arrow-down" title="Min value"></i> {{ question.data.min }} - {% else %} - {{ question.data }} - {% endif %} - </td> - </tr> - {% endfor %} - </tbody> - </table> - </div> - {% endif %} - </div> - - <div id="question-modal" class="uk-flex-top" uk-modal> - <div class="uk-modal-dialog"> - <button class="uk-modal-close-default" type="button" uk-close></button> - - <div class="uk-modal-header"> - <h2 class="uk-modal-title">Add Question</h2> - </div> - - <div class="uk-modal-body"> - <form class="uk-form-horizontal"> - <div id="question-source-section"> - <div> - <div class="uk-form-label"> - <label class="uk-form-label" for="question-source">Source</label> - </div> - <div class="uk-form-controls-text uk-form-controls"> - <select class="uk-select" id="question-source" required> - <option hidden="hidden" disabled selected value="none"></option> - <option value="new">New</option> - <option value="existing">Existing</option> - </select> - </div> - </div> - </div> - <div id="loading-spinner" class="uk-text-center uk-margin-small-top" hidden="hidden"> - <div uk-spinner></div> - </div> - <div id="new-question-section" hidden="hidden"> - <br /> - <div> - <div class="uk-form-label"> - <label class="uk-form-label" for="new-question-title">Title</label> - </div> - <div class="uk-form-controls-text uk-form-controls"> - <input type="text" id="new-question-title" class="uk-input"> - </div> - </div> - <div> - <div class="uk-form-label"> - <label class="uk-form-label" for="new-question-optional">Optional</label> - </div> - <div class="uk-form-controls-text uk-form-controls"> - <select class="uk-select" id="new-question-optional"> - <option hidden="hidden" disabled selected value="none"></option> - <option value="optional">Optional</option> - <option value="required">Required</option> - </select> - </div> - </div> - <div> - <div class="uk-form-label"> - <label class="uk-form-label" for="new-question-type">Type</label> - </div> - <div class="uk-form-controls-text uk-form-controls"> - <select class="uk-select" id="new-question-type"> - <option hidden="hidden" disabled selected value="none"></option> - <option value="checkbox">Checkbox</option> - <option value="email">Email</option> - <option value="number">Number</option> - <option value="radio">Radio</option> - <option value="range">Range</option> - <option value="slider">Slider</option> - <option value="textarea">Text (Block)</option> - <option value="text">Text (Line)</option> - </select> - </div> - </div> - </div> - - <div id="radio-section" hidden="hidden"> - <br /> - <div> - <div class="uk-form-label"> - <button type="button" class="uk-button uk-button-primary uk-width-1-1" id="radio-add-button"><i class="uk-icon fa-fw far fa-plus"></i> Add</button> - </div> - <div class="uk-form-controls-text uk-form-controls"> - <input type="text" id="radio-add-input" class="uk-input" placeholder="Item"> - </div> - </div> - <div> - <div class="uk-form-label"> - <button type="button" class="uk-button uk-button-danger uk-width-1-1" id="radio-remove-button"><i class="uk-icon fa-fw far fa-minus"></i> Remove</button> - </div> - <div class="uk-form-controls-text uk-form-controls"> - <select class="uk-select" id="radio-options"> - <option hidden="hidden" disabled selected value="none"></option> - </select> - </div> - </div> - </div> - - <div id="number-section" hidden="hidden"> - <br /> - <div> - <div class="uk-form-label"> - <label class="uk-form-label" for="number-min">Min Value</label> - </div> - <div class="uk-form-controls-text uk-form-controls"> - <input type="text" id="number-min" class="uk-input"> - </div> - </div> - <div> - <div class="uk-form-label"> - <label class="uk-form-label" for="number-max">Max Value</label> - </div> - <div class="uk-form-controls-text uk-form-controls"> - <input type="text" id="number-max" class="uk-input"> - </div> - </div> - </div> - - <div id="existing-question-section" hidden="hidden"> - <br /> - <div> - <div class="uk-form-label"> - <label class="uk-form-label" for="existing-question">Question</label> - </div> - <div class="uk-form-controls-text uk-form-controls"> - <select class="uk-select" id="existing-question"> - <option hidden="hidden" disabled selected value="none"></option> - </select> - </div> - </div> - </div> - </form> - </div> - - <div class="uk-modal-footer"> - <div class="uk-text-center"> - <button class="uk-button uk-button-danger uk-modal-close" type="button" id="state-cancel"> - <i class="uk-icon fa-fw far fa-times"></i> Cancel - </button> - <button class="uk-button uk-button-primary" type="button" id="question-submit" disabled> - <i class="uk-icon fa-fw far fa-check"></i> Save - </button> - </div> - </div> - </div> - </div> - - <script type="application/javascript"> - "use strict"; - const actions = new JamActions("{{ url_for("staff.jams.action") }}", "{{ csrf_token() }}"); - const form = parseInt("{{ jam.number }}"); - const table_body = document.getElementById("table-body"); - const table = document.getElementById("table"); - const no_questions_paragraph = document.getElementById("no-questions-paragraph"); - - let all_questions = {{ question_ids | safe }}; - - const add_button = document.getElementById("add-button"); - const modal = UIkit.modal(document.getElementById("question-modal")); - - const question_source_section = document.getElementById("question-source-section"); - const question_source = document.getElementById("question-source"); - const loading_spinner = document.getElementById("loading-spinner"); - - const new_question_section = document.getElementById("new-question-section"); - const new_question_title = document.getElementById("new-question-title"); - const new_question_optional = document.getElementById("new-question-optional"); - const new_question_type = document.getElementById("new-question-type"); - - const radio_section = document.getElementById("radio-section"); - - const radio_add_button = document.getElementById("radio-add-button"); - const radio_add_input = document.getElementById("radio-add-input"); - const radio_remove_button = document.getElementById("radio-remove-button"); - const radio_options = document.getElementById("radio-options"); - - const number_section = document.getElementById("number-section"); - - const number_min = document.getElementById("number-min"); - const number_max = document.getElementById("number-max"); - - const existing_question_section = document.getElementById("existing-question-section"); - const existing_question_select = document.getElementById("existing-question"); - - const submit_button = document.getElementById("question-submit"); - - let current_radio_options = Array(); - - add_button.onclick = function() { - clearModal(); - checkModal(); - modal.show(); - }; - - question_source.onchange = function () { - checkModal(); - - if (this.value === "new") { - existing_question_section.setAttribute("hidden", "hidden"); - loading_spinner.setAttribute("hidden", "hidden"); - new_question_section.removeAttribute("hidden"); - } else { - new_question_section.setAttribute("hidden", "hidden"); - loading_spinner.removeAttribute("hidden"); - - actions.get_questions(function(result, data) { - existing_question_section.setAttribute("hidden", "hidden"); - loading_spinner.setAttribute("hidden", "hidden"); - - if (!result) { - UIkit.notification({ - "message": "Failed to fetch questions", - "status": "danger", - "pos": "bottom-center", - "timeout": 5000 - }) - } else { - existing_question_select.innerHTML = "<option hidden=\"hidden\" disabled selected value=\"none\"></option>"; - - for (let question of data.questions) { - let element = document.createElement("option"); - element.value = question.id; - element.text = question.title; - - existing_question_select.appendChild(element); - } - - existing_question_section.removeAttribute("hidden"); - } - }) - } - }; - - existing_question_select.onchange = function() { - if (all_questions.indexOf(existing_question_select.value) > -1) { - existing_question_select.classList.add("uk-form-danger"); - } else { - existing_question_select.classList.remove("uk-form-danger"); - } - - checkModal(); - }; - - new_question_type.onchange = function() { - if (this.value === "checkbox") { - radio_section.setAttribute("hidden", "hidden"); - number_section.setAttribute("hidden", "hidden"); - } else if (this.value === "email") { - radio_section.setAttribute("hidden", "hidden"); - number_section.setAttribute("hidden", "hidden"); - } else if (this.value === "number") { - radio_section.setAttribute("hidden", "hidden"); - number_section.removeAttribute("hidden"); - } else if (this.value === "radio") { - radio_section.removeAttribute("hidden"); - number_section.setAttribute("hidden", "hidden"); - } else if (this.value === "range") { - radio_section.setAttribute("hidden", "hidden"); - number_section.removeAttribute("hidden"); - } else if (this.value === "slider") { - radio_section.setAttribute("hidden", "hidden"); - number_section.removeAttribute("hidden"); - } else if (this.value === "textarea") { - radio_section.setAttribute("hidden", "hidden"); - number_section.setAttribute("hidden", "hidden"); - } else if (this.value === "text") { - radio_section.setAttribute("hidden", "hidden"); - number_section.setAttribute("hidden", "hidden"); - } else { - radio_section.setAttribute("hidden", "hidden"); - number_section.setAttribute("hidden", "hidden"); - } - - checkModal(); - }; - - new_question_title.oninput = checkModal; - new_question_optional.onchange = checkModal; - - radio_add_input.onkeyup = function(event) { - event.preventDefault(); - - if (event.which === 13 || event.keyCode === 13) { - radio_add_button.onclick(undefined); - } - }; - - radio_add_button.onclick = function() { - let value = radio_add_input.value; - - if (value.length < 1) { - radio_add_input.classList.add("uk-form-danger"); - radio_add_input.focus(); - } else { - let index = current_radio_options.indexOf(value); - - if (index > -1 || value === "none") { - radio_add_input.classList.add("uk-form-danger"); - radio_add_input.focus(); - } else { - radio_add_input.classList.remove("uk-form-danger"); - radio_add_input.value = ""; - - let element = document.createElement("option"); - element.value = value; - element.text = value; - - radio_options.appendChild(element); - current_radio_options.push(value); - } - } - - checkModal(); - }; - - radio_remove_button.onclick = function() { - let value = radio_options.value; - - if (value === "none") { - return; - } - - let index = current_radio_options.indexOf(value); - - if (index < 0) { // We have a problem! - console.log("Unable to remove value from radio values because it doesn't exist: " + value) - } else { - current_radio_options.splice(index, 1); - } - - for (let element of radio_options.getElementsByTagName("option")) { - if (element.value === "none") { - continue; - } - - if (element.value === value) { - radio_options.removeChild(element); - } - } - - radio_options.value = "none"; - radio_add_input.focus(); - checkModal(); - }; - - number_min.oninput = function() { - if (this.value.length > 0 && isNaN(parseInt(this.value))) { - this.classList.add("uk-form-danger") - } else { - this.classList.remove("uk-form-danger") - } - - checkModal(); - }; - - number_max.oninput = function() { - if (this.value.length > 0 && isNaN(parseInt(this.value))) { - this.classList.add("uk-form-danger") - } else { - this.classList.remove("uk-form-danger") - } - - checkModal(); - }; - - submit_button.onclick = function () { - if (question_source.value === "existing") { - number_section.setAttribute("hidden", "hidden"); - existing_question_section.setAttribute("hidden", "hidden"); - new_question_section.setAttribute("hidden", "hidden"); - radio_section.setAttribute("hidden", "hidden"); - question_source_section.setAttribute("hidden", "hidden"); - loading_spinner.removeAttribute("hidden"); - - actions.associate_question(form, existing_question_select.value, function(result, data) { - if (result) { - addToTable(data.question); - modal.hide(); - clearModal(); - - UIkit.notification({ - "message": "Question added", - "status": "success", - "pos": "bottom-center", - "timeout": 5000, - }); - } else { - console.log(data); - UIkit.notification({ - "message": "Failed to add question to form", - "status": "danger", - "pos": "bottom-center", - "timeout": 5000, - }); - } - }) - } else { - let type = new_question_type.value; - let optional = new_question_optional.value === "optional"; - let title = new_question_title.value; - - let question_data = { - "type": type, - "optional": optional, - "title": title - }; - - if (type === "radio") { - question_data.data = {"options": current_radio_options}; - } else if (type === "number" - || type === "range" - || type === "slider") { - question_data.data = { - "max": parseInt(number_max.value), - "min": parseInt(number_min.value) - }; - } - - number_section.setAttribute("hidden", "hidden"); - existing_question_section.setAttribute("hidden", "hidden"); - new_question_section.setAttribute("hidden", "hidden"); - radio_section.setAttribute("hidden", "hidden"); - question_source_section.setAttribute("hidden", "hidden"); - loading_spinner.removeAttribute("hidden"); - - actions.create_question(question_data, function(result, data) { - if (result) { - actions.associate_question(form, data.id, function(result, data) { - modal.hide(); - clearModal(); - - if (result) { - addToTable(data.question); - - UIkit.notification({ - "message": "Question added", - "status": "success", - "pos": "bottom-center", - "timeout": 5000, - }); - } else { - console.log(data); - UIkit.notification({ - "message": "Question created, but failed to associate with the form", - "status": "warning", - "pos": "bottom-center", - "timeout": 5000, - }); - } - }) - } else { - console.log(data); - UIkit.notification({ - "message": "Failed to create question", - "status": "danger", - "pos": "bottom-center", - "timeout": 5000, - }); - } - }) - } - }; - - const toTitleCase = (str) => str.replace(/\b\S/g, t => t.toUpperCase()); - - function hookUpDeleteButtons() { - for (let element of document.getElementsByClassName("delete-question-button")) { - element.onclick = function() { - let question_id = this.getAttribute("data-question-id"); - let row = document.getElementById("row-" + question_id); - - actions.disassociate_question(form, question_id, function(result, data) { - if (result) { - table_body.removeChild(row); - - let index = all_questions.indexOf(question_id); - - if (index < 0) { // We have a problem! - console.log("Unable to remove question from memory because it doesn't exist: " + question_id) - } else { - all_questions.splice(index, 1); - } - - if (all_questions.length < 1) { - table.setAttribute("hidden", "hidden"); - no_questions_paragraph.removeAttribute("hidden"); - } - - UIkit.notification({ - "message": "Question removed", - "status": "success", - "pos": "bottom-center", - "timeout": 5000, - }); - } else { - console.log(data); - UIkit.notification({ - "message": "Failed to remove question", - "status": "danger", - "pos": "bottom-center", - "timeout": 5000, - }); - } - }) - } - } - } - - function clearModal() { - // Question source section - question_source.value = "none"; - question_source_section.removeAttribute("hidden"); - - // Existing question section - loading_spinner.setAttribute("hidden", "hidden"); - - new_question_section.setAttribute("hidden", "hidden"); - - // New question section - new_question_title.value = ""; - new_question_optional.value = "none"; - new_question_type.value = "none"; - - // Radio question section - radio_section.setAttribute("hidden", "hidden"); - - radio_add_input.value = ""; - radio_options.innerHTML = "<option hidden=\"hidden\" disabled selected value=\"none\"></option>"; - radio_options.value = "none"; - - current_radio_options = Array(); - - // Number question section - number_section.setAttribute("hidden", "hidden"); - - existing_question_section.setAttribute("hidden", "hidden"); - - existing_question_select.innerHTML = "<option hidden=\"hidden\" disabled selected value=\"none\"></option>"; - existing_question_select.value = "none"; - } - - function checkModal() { - if (question_source.value === "none") { - return setButtonEnabled(false); - } else if (question_source.value === "new") { - if (new_question_title.value.length < 1) { - return setButtonEnabled(false); - } - - if (new_question_optional.value === "none") { - return setButtonEnabled(false); - } - - let question_type = new_question_type.value; - - if (question_type === "none") { - return setButtonEnabled(false); - } - - if (question_type === "radio") { - if (current_radio_options.length < 1) { - return setButtonEnabled(false); - } - } - - if ( question_type === "number" - || question_type === "range" - || question_type === "slider" - ) { - if (isNaN(parseInt(number_min.value))) { - return setButtonEnabled(false); - } - if (isNaN(parseInt(number_max.value))) { - return setButtonEnabled(false); - } - - if (number_min.value.length < 1 || number_max.value.length < 1) { - return setButtonEnabled(false); - } - } - } else { - if (existing_question_select.value === "none"){ - return setButtonEnabled(false); - } - - if (all_questions.indexOf(existing_question_select.value) > -1) { - return setButtonEnabled(false); - } - } - - return setButtonEnabled(true); - } - - function setButtonEnabled(enabled) { - submit_button.disabled = !enabled; - } - - function addToTable(question) { - console.log(question); - if (all_questions.indexOf(question.id) === -1) { - all_questions.push(question.id); - - let element = document.createElement("tr"); - element.id = "row-" + question.id; - element.innerHTML = getRowHTML(question); - - table_body.appendChild(element); - } - - if (all_questions.length > 0) { - table.removeAttribute("hidden"); - no_questions_paragraph.setAttribute("hidden", "hidden"); - } - hookUpDeleteButtons(); - } - - function getRowHTML(question) { - let optional; - let data; - - if (question.optional) { - optional = "<i class=\"uk-icon uk-text-success fa-fw far fa-check\"></i>" - } else { - optional = "<i class=\"uk-icon uk-text-danger fa-fw far fa-times\"></i>" - } - - if (question.type === "number" || question.type === "range" || question.type === "slider") { - data = ` -<i class="uk-icon fa-fw far fa-arrow-up" title="Max value"></i> ${question.data.max} -<br /> -<i class="uk-icon fa-fw far fa-arrow-down" title="Min value"></i> ${question.data.min} - ` - - } else if (question.type === "radio") { - data = "<ul>"; - - for (let option of question.data.options) { - data = data + `<li>${option}</li>` - } - data = data + "</ul>"; - } else { - data = "" - } - - let type = toTitleCase(question.type); - - const row = ` - <td class="uk-table-shrink"> - <button class="uk-button-small uk-button uk-button-danger delete-question-button" data-question-id="${question.id}"><i class="uk-icon fa-fw far fa-times"></i></button> - </td> - <td class="uk-text-truncate" title="${question.id}">${question.id}</td> - <td class="uk-table-shrink">${optional}</td> - <td title="${question.title}">${question.title}</td> - <td class="uk-table-shrink" title="${type}">${type}</td> - <td>${data}</td> - `; - return row - } - - hookUpDeleteButtons(); - </script> -{% endblock %} diff --git a/templates/staff/jams/index.html b/templates/staff/jams/index.html deleted file mode 100644 index e4e1e242..00000000 --- a/templates/staff/jams/index.html +++ /dev/null @@ -1,252 +0,0 @@ -{% extends "main/base.html" %} -{% block title %}Staff | Code Jams{% endblock %} -{% block og_title %}Staff | Code Jams{% endblock %} -{% block content %} - <div class="uk-container uk-container-small uk-section"> - <h1>Code Jams</h1> - - <a class="uk-button uk-button-default" href="{{ url_for("staff.index") }}"><i class="uk-icon fa-fw far fa-arrow-left"></i> Back</a> - <a class="uk-button uk-button-secondary" href="{{ url_for("staff.jams.forms.questions") }}"><i class="uk-icon fa-fw far fa-list"></i> Questions</a> - <a class="uk-button uk-button-secondary" href="{{ url_for("staff.jams.infractions") }}"><i class="uk-icon fa-fw far fa-exclamation-triangle"></i> Infractions</a> - <a class="uk-button uk-button-primary" href="{{ url_for("staff.jams.create") }}"><i class="uk-icon fa-fw far fa-plus"></i> Create</a> - - {% if not jams %} - <p> - No code jams found. Create one above! - </p> - {% else %} - {% for jam in jams %} - <h2 class="uk-heading-divider"> - Code Jam {{ jam.number }}: {{ jam.title }} - - <span class="uk-align-right"> - {% if jam.state == "planning" %} - <i class="uk-icon uk-text-muted fa-fw far fa-edit state-{{ jam.number }}" title="State: Planning" id="state-{{ jam.number }}-planning"></i> - {% else %} - <i class="uk-icon uk-text-muted fa-fw far fa-edit state-{{ jam.number }}" hidden="hidden" title="State: Planning" id="state-{{ jam.number }}-planning"></i> - {% endif %} - - {% if jam.state == "announced" %} - <i class="uk-icon uk-text-primary fa-fw far fa-bullhorn state-{{ jam.number }}" title="State: Announced" id="state-{{ jam.number }}-announced"></i> - {% else %} - <i class="uk-icon uk-text-primary fa-fw far fa-bullhorn state-{{ jam.number }}" hidden="hidden" title="State: Announced" id="state-{{ jam.number }}-announced"></i> - {% endif %} - - {% if jam.state == "preparing" %} - <i class="uk-icon uk-text-muted fa-fw fal fa-ellipsis-h-alt state-{{ jam.number }}" title="State: Preparing" id="state-{{ jam.number }}-preparing"></i> - {% else %} - <i class="uk-icon uk-text-muted fa-fw fal fa-ellipsis-h-alt state-{{ jam.number }}" hidden="hidden" title="State: Preparing" id="state-{{ jam.number }}-preparing"></i> - {% endif %} - - {% if jam.state == "running" %} - <i class="uk-icon uk-text-success fa-fw far fa-play state-{{ jam.number }}" title="State: Running" id="state-{{ jam.number }}-running"></i> - {% else %} - <i class="uk-icon uk-text-success fa-fw far fa-play state-{{ jam.number }}" hidden="hidden" title="State: Running" id="state-{{ jam.number }}-running"></i> - {% endif %} - - {% if jam.state == "judging" %} - <i class="uk-icon uk-text-primary fa-fw far fa-balance-scale state-{{ jam.number }}" title="State: Judging" id="state-{{ jam.number }}-judging"></i> - {% else %} - <i class="uk-icon uk-text-primary fa-fw far fa-balance-scale state-{{ jam.number }}" hidden="hidden" title="State: Judging" id="state-{{ jam.number }}-judging"></i> - {% endif %} - - {% if jam.state == "finished" %} - <i class="uk-icon uk-text-success fa-fw far fa-check-square state-{{ jam.number }}" title="State: Finished" id="state-{{ jam.number }}-finished"></i> - {% else %} - <i class="uk-icon uk-text-success fa-fw far fa-check-square state-{{ jam.number }}" hidden="hidden" title="State: Finished" id="state-{{ jam.number }}-finished"></i> - {% endif %} - - {% if not jam.state in states %} - <i class="uk-icon uk-text-danger fa-fw far fa-question-square" title="Unknown state" id="state-{{ jam.number }}-unknown"></i> - {% else %} - <i class="uk-icon uk-text-danger fa-fw far fa-question-square" hidden="hidden" title="Unknown state" id="state-{{ jam.number }}-unknown"></i> - {% endif %} - </span> - </h2> - - <span class="uk-label">Participants: {{ jam.participants | length }}</span> - <span class="uk-label uk-label-success">Start: {{ format_datetime(jam.date_start) }} (UTC)</span> - <span class="uk-label uk-label-danger">End: {{ format_datetime(jam.date_end) }} (UTC)</span> - - <section class="uk-section"> - <div class="uk-button-group uk-width-1-1"> - <a class="uk-button uk-button-default uk-width-expand state-button" data-jam="{{ jam.number }}" id="jam-{{ jam.number }}-button-state"> - <i class="uk-icon fa-fw far fa-pencil"></i> State - </a> - - <a class="uk-button uk-button-default uk-width-expand" data-jam="{{ jam.number }}" id="jam-{{ jam.number }}-button-basics" href="{{ url_for("staff.jams.edit.basics", jam=jam.number) }}"> - <i class="uk-icon fa-fw far fa-pencil"></i> Basics - </a> - - {% if jam.state in ["planning", "announced", "preparing", "finished"] %} - <a class="uk-button uk-button-default uk-width-expand" data-jam="{{ jam.number }}" id="jam-{{ jam.number }}-button-info" href="{{ url_for("staff.jams.edit.info", jam=jam.number) }}"> - <i class="uk-icon fa-fw far fa-pencil"></i> Info - </a> - {% else %} - <a class="uk-button uk-button-default uk-width-expand" hidden="hidden" data-jam="{{ jam.number }}" id="jam-{{ jam.number }}-button-info" href="{{ url_for("staff.jams.edit.info", jam=jam.number) }}"> - <i class="uk-icon fa-fw far fa-pencil"></i> Info - </a> - {% endif %} - - {% if jam.state in ["judging", "finished"] %} - <a class="uk-button uk-button-default uk-width-expand" data-jam="{{ jam.number }}" id="jam-{{ jam.number }}-button-ending" href="{{ url_for("staff.jams.edit.ending", jam=jam.number) }}"> - <i class="uk-icon fa-fw far fa-pencil"></i> Ending - </a> - {% else %} - <a class="uk-button uk-button-default uk-width-expand" hidden="hidden" data-jam="{{ jam.number }}" id="jam-{{ jam.number }}-button-ending" href="{{ url_for("staff.jams.edit.ending", jam=jam.number) }}"> - <i class="uk-icon fa-fw far fa-pencil"></i> Ending - </a> - {% endif %} - </div> - <br/> - <div class="uk-button-group uk-width-1-1"> - <a class="uk-button uk-button-danger uk-width-expand" href="{{ url_for("staff.jams.forms.view", jam=jam.number) }}"> - <i class="uk-icon fa-fw far fa-list"></i> Form - </a> - <a class="uk-button uk-button-secondary uk-width-expand" href="{{ url_for("staff.jams.participants", jam=jam.number) }}"> - <i class="uk-icon fa-fw far fa-user"></i> Participants - </a> - <a class="uk-button uk-button-primary uk-width-expand" href="{{ url_for("staff.jams.teams", jam=jam.number) }}"> - <i class="uk-icon fa-fw far fa-users"></i> Teams - </a> - </div> - </section> - {% endfor %} - {% endif %} - </div> - - <div id="state-modal" class="uk-flex-top" uk-modal> - <div class="uk-modal-dialog"> - <button class="uk-modal-close-default" type="button" uk-close></button> - - <div class="uk-modal-header"> - <h2 class="uk-modal-title">Set State</h2> - </div> - - <div class="uk-modal-body"> - <form class="uk-form-horizontal"> - <div> - <div class="uk-form-label"> - <label class="uk-form-label" for="state">State</label> - </div> - - <div class="uk-form-controls uk-form-controls-text"> - <select class="uk-select" name="state" id="state"> - {% for state in states %} - <option value="{{ state }}">{{ state.title() }}</option> - {% endfor %} - </select> - </div> - </div> - </form> - </div> - - <div class="uk-modal-footer"> - <div class="uk-text-center"> - <button class="uk-button uk-button-default uk-modal-close" type="button" id="state-cancel"> - <i class="uk-icon fa-fw far fa-arrow-left"></i> Cancel - </button> - <a class="uk-button uk-button-primary" type="button" id="state-submit"> - <i class="uk-icon fa-fw far fa-check"></i> Save - </a> - </div> - </div> - </div> - </div> - - <script type="application/javascript"> - "use strict"; - const actions = new JamActions("{{ url_for("staff.jams.action") }}", "{{ csrf_token() }}"); - - // State modal objects - const state_modal = UIkit.modal(document.getElementById("state-modal")); - const state_input = document.getElementById("state"); - const state_cancel = document.getElementById("state-cancel"); - const state_submit = document.getElementById("state-submit"); - - state_cancel.onclick = function() { - state_modal.hide(); - }; - - for (let button of document.getElementsByClassName("state-button")) { - button.onclick = function() { - state_modal.show(); - - state_submit.onclick = function() { - let jam = parseInt(button.getAttribute("data-jam")); - let state = state_input.value; - - actions.set_state(jam, state, function(success, data) { - if (success) { - UIkit.notification({ - "message": "State set successfully", - "status": "success", - "pos": "bottom-center", - "timeout": 5000, - }); - - for (let icon of document.getElementsByClassName("state-" + jam)) { - icon.setAttribute("hidden", "hidden"); - } - - switch (state) { // Set the state on the page too so there's no reloading - case "planning": - document.getElementById("state-" + jam + "-planning").removeAttribute("hidden"); - - document.getElementById("jam-" + jam + "-button-info").removeAttribute("hidden"); - document.getElementById("jam-" + jam + "-button-ending").setAttribute("hidden", "hidden"); - break; - case "announced": - document.getElementById("state-" + jam + "-announced").removeAttribute("hidden"); - - document.getElementById("jam-" + jam + "-button-info").removeAttribute("hidden"); - document.getElementById("jam-" + jam + "-button-ending").setAttribute("hidden", "hidden"); - break; - case "preparing": - document.getElementById("state-" + jam + "-preparing").removeAttribute("hidden"); - - document.getElementById("jam-" + jam + "-button-info").setAttribute("hidden", "hidden"); - document.getElementById("jam-" + jam + "-button-ending").setAttribute("hidden", "hidden"); - break; - case "running": - document.getElementById("state-" + jam + "-running").removeAttribute("hidden"); - - document.getElementById("jam-" + jam + "-button-info").setAttribute("hidden", "hidden"); - document.getElementById("jam-" + jam + "-button-ending").setAttribute("hidden", "hidden"); - break; - case "judging": - document.getElementById("state-" + jam + "-judging").removeAttribute("hidden"); - - document.getElementById("jam-" + jam + "-button-info").setAttribute("hidden", "hidden"); - document.getElementById("jam-" + jam + "-button-ending").removeAttribute("hidden"); - break; - case "finished": - document.getElementById("state-" + jam + "-finished").removeAttribute("hidden"); - - document.getElementById("jam-" + jam + "-button-info").removeAttribute("hidden"); - document.getElementById("jam-" + jam + "-button-ending").removeAttribute("hidden"); - break; - default: - document.getElementById("state-" + jam + "-unknown").removeAttribute("hidden"); - - document.getElementById("jam-" + jam + "-button-info").setAttribute("hidden", "hidden"); - document.getElementById("jam-" + jam + "-button-ending").setAttribute("hidden", "hidden"); - break; - } - - state_modal.hide(); - } else { - console.log(data); - UIkit.notification({ - "message": "Failed to set state", - "status": "danger", - "pos": "bottom-center", - "timeout": 5000 - }) - } - }); - }; - } - } - </script> -{% endblock %}
\ No newline at end of file diff --git a/templates/staff/jams/infractions/view.html b/templates/staff/jams/infractions/view.html deleted file mode 100644 index a4391c53..00000000 --- a/templates/staff/jams/infractions/view.html +++ /dev/null @@ -1,328 +0,0 @@ -{% extends "main/base.html" %} -{% block title %}Staff | Jams | Infractions{% endblock %} -{% block og_title %}Staff | Jams | Infractions{% endblock %} -{% block og_description %}Manage infractions{% endblock %} -{% block content %} - <div class="uk-container uk-container-small uk-section"> - <h1>Infractions</h1> - - <a class="uk-button uk-button-default" href="{{ url_for("staff.jams.index") }}"><i class="uk-icon fa-fw far fa-arrow-left"></i> Back</a> - <button class="uk-button uk-button-primary" id="add-button"><i class="uk-icon fa-fw far fa-plus"></i> Add Infraction</button> - - {% if not infractions %} - <p id="no-infractions-paragraph">No infractions found.</p> - <table class="uk-table uk-table-divider uk-table-striped uk-border" id="table" hidden="hidden"> - <thead> - <tr> - <th class="uk-table-shrink"> </th> - <th class="uk-table-shrink"><strong>ID</strong></th> - <th class="uk-table-shrink">Participant</th> - <th>Reason</th> - <th class="uk-table-shrink">Number</th> - </tr> - </thead> - <tbody id="table-body"> - </tbody> - </table> - {% else %} - <p id="no-infractions-paragraph" hidden="hidden">No questions found.</p> - - <div class="uk-overflow-auto"> - <br /> - <table class="uk-table uk-table-divider uk-table-striped uk-border" id="table"> - <thead> - <tr> - <th class="uk-table-shrink"> </th> - <th class="uk-table-shrink"><strong>ID</strong></th> - <th class="uk-table-shrink">Participant</th> - <th>Reason</th> - <th class="uk-table-shrink">Number</th> - </tr> - </thead> - <tbody id="table-body"> - {% for infraction in infractions %} - <tr id="row-{{ infraction.id }}"> - <td class="uk-table-shrink"> - <button class="uk-button-small uk-button uk-button-danger delete-infraction-button" data-infraction-id="{{ infraction.id }}"><i class="uk-icon fa-fw far fa-trash"></i></button> - </td> - <td class="uk-text-truncate" title="{{ infraction.id }}">{{ infraction.id }}</td> - <td class="uk-table-shrink"> - {% if infraction.participant is not string %} - <code>{{ infraction.participant.user_id }}</code> - <br /> - ({{ infraction.participant.username }}#{{ infraction.participant.discriminator }}) - {% else %} - <code>{{ infraction.participant }}</code> - {% endif %} - </td> - <td title="{{ infraction.reason }}">{{ infraction.reason }}</td> - <td class="uk-table-shrink">{{ infraction.number }}</td> - </tr> - {% endfor %} - </tbody> - </table> - </div> - {% endif %} - </div> - - <div id="add-modal" class="uk-flex-top" uk-modal> - <div class="uk-modal-dialog"> - <button class="uk-modal-close-default" type="button" uk-close></button> - - <div class="uk-modal-header"> - <h2 class="uk-modal-title">Add Infraction</h2> - </div> - - <div class="uk-modal-body"> - <form class="uk-form-horizontal"> - <div> - <div class="uk-form-label"> - <label class="uk-form-label" for="user-id">User ID</label> - </div> - <div class="uk-form-controls-text uk-form-controls"> - <input class="uk-input" id="user-id" name="user-id"> - </div> - </div> - <div> - <div class="uk-form-label"> - <label class="uk-form-label" for="reason">Reason</label> - </div> - <div class="uk-form-controls-text uk-form-controls"> - <input class="uk-input" id="reason" name="reason"> - </div> - </div> - <div> - <div class="uk-form-label"> - <label class="uk-form-label" for="number"> - Number of jams - </label> - </div> - <div class="uk-form-controls-text uk-form-controls"> - <input class="uk-input" id="number" name="number" placeholder="Jams to ban for / -1 for infinite"> - </div> - </div> - <div id="loading-spinner" class="uk-text-center uk-margin-small-top" hidden="hidden"> - <div uk-spinner></div> - </div> - </form> - </div> - - <div class="uk-modal-footer"> - <div class="uk-text-center"> - <button class="uk-button uk-button-danger uk-modal-close" type="button" id="state-cancel"> - <i class="uk-icon fa-fw far fa-times"></i> Cancel - </button> - <button class="uk-button uk-button-primary" type="button" id="state-submit" disabled> - <i class="uk-icon fa-fw far fa-check"></i> Save - </button> - </div> - </div> - </div> - </div> - - <script type="application/javascript"> - "use strict"; - const actions = new JamActions("{{ url_for("staff.jams.action") }}", "{{ csrf_token() }}"); - - const table_body = document.getElementById("table-body"); - const table = document.getElementById("table"); - const no_infractions_paragraph = document.getElementById("no-infractions-paragraph"); - - let all_infractions = {{ infraction_ids | safe }}; - - const add_button = document.getElementById("add-button"); - const modal = UIkit.modal(document.getElementById("add-modal")); - const loading_spinner = document.getElementById("loading-spinner"); - - const input_user_id = document.getElementById("user-id"); - const input_reason = document.getElementById("reason"); - const input_number = document.getElementById("number"); - - const submit_button = document.getElementById("state-submit"); - - add_button.onclick = function() { - clearModal(); - checkModal(); - modal.show(); - }; - - input_user_id.oninput = function() { - if (isNaN(parseInt(this.value))) { - this.classList.add("uk-form-danger"); - } else { - this.classList.remove("uk-form-danger"); - } - - checkModal(); - }; - - input_reason.oninput = function() { - checkModal(); - }; - - input_number.oninput = function() { - if (isNaN(parseInt(this.value))) { - this.classList.add("uk-form-danger"); - } else { - this.classList.remove("uk-form-danger"); - } - - checkModal(); - }; - - submit_button.onclick = function () { - loading_spinner.removeAttribute("hidden"); - - let user_id = input_user_id.value; - let reason = input_reason.value; - let number = input_number.value; - - actions.create_infraction(user_id, reason, number, function(result, data) { - if (result) { - let infraction = { - "id": data.id, - "participant": user_id, - "reason": reason, - "number": number - }; - - addToTable(infraction); - modal.hide(); - clearModal(); - - UIkit.notification({ - "message": "Infraction added", - "status": "success", - "pos": "bottom-center", - "timeout": 5000, - }); - } else { - console.log(data); - UIkit.notification({ - "message": "Failed to add infraction", - "status": "danger", - "pos": "bottom-center", - "timeout": 5000, - }); - } - }); - }; - - function hookUpDeleteButtons() { - for (let element of document.getElementsByClassName("delete-infraction-button")) { - element.onclick = function() { - let infraction_id = this.getAttribute("data-infraction-id"); - let row = document.getElementById("row-" + infraction_id); - - actions.delete_infraction(infraction_id, function(result, data) { - if (result) { - table_body.removeChild(row); - - let index = all_infractions.indexOf(infraction_id); - - if (index < 0) { // We have a problem! - console.log("Unable to remove infraction from memory because it doesn't exist: " + infraction_id) - } else { - all_infractions.splice(index, 1); - } - - if (all_infractions.length < 1) { - table.setAttribute("hidden", "hidden"); - no_infractions_paragraph.removeAttribute("hidden"); - } - - UIkit.notification({ - "message": "Infraction removed", - "status": "success", - "pos": "bottom-center", - "timeout": 5000, - }); - } else { - console.log(data); - UIkit.notification({ - "message": "Failed to remove infraction", - "status": "danger", - "pos": "bottom-center", - "timeout": 5000, - }); - } - }) - } - } - } - - function clearModal() { - - // Existing question section - loading_spinner.setAttribute("hidden", "hidden"); - - input_number.value = ""; - input_reason.value = ""; - input_user_id.value = ""; - } - - function checkModal() { - if (input_reason.value.length < 1 - || input_number.value.length < 1 - || input_user_id.value.length < 1) { - return setButtonEnabled(false); - } - - if (isNaN(parseInt(input_number.value))) { - return setButtonEnabled(false); - } - - if (isNaN(parseInt(input_user_id.value))) { - return setButtonEnabled(false); - } - - return setButtonEnabled(true); - } - - function setButtonEnabled(enabled) { - submit_button.disabled = !enabled; - } - - function addToTable(infraction) { - console.log(infraction); - if (all_infractions.indexOf(infraction.id) === -1) { - all_infractions.push(infraction.id); - - let element = document.createElement("tr"); - element.id = "row-" + infraction.id; - element.innerHTML = getRowHTML(infraction); - - table_body.appendChild(element); - } - - if (all_infractions.length > 0) { - table.removeAttribute("hidden"); - no_infractions_paragraph.setAttribute("hidden", "hidden"); - } - hookUpDeleteButtons(); - } - - function getRowHTML(infraction) { - let participant; - - if (typeof infraction.participant === 'string' || infraction.participant instanceof String) { - participant = infraction.participant; - } else { - participant = infraction.participant; - participant = `${participant.username}#${participant.discrminiator} (${participant.id})` - } - const row = ` - <td class="uk-table-shrink"> - <button class="uk-button-small uk-button uk-button-danger delete-infraction-button" data-infraction-id="${infraction.id}"><i class="uk-icon fa-fw far fa-trash"></i></button> - </td> - <td class="uk-text-truncate" title="${infraction.id}">${infraction.id}</td> - <td class="uk-table-shrink"><code>${participant}</code></td> - <td title="${infraction.reason}">${infraction.reason}</td> - <td class="uk-table-shrink">${infraction.number}</td> - `; - return row - } - - hookUpDeleteButtons(); - </script> -{% endblock %} diff --git a/templates/staff/jams/participants.html b/templates/staff/jams/participants.html deleted file mode 100644 index 726d407c..00000000 --- a/templates/staff/jams/participants.html +++ /dev/null @@ -1,163 +0,0 @@ -{% extends "main/base.html" %} -{% block title %}Staff | Jams | Participants{% endblock %} -{% block og_title %}Staff | Jams | Participants{% endblock %} -{% block og_description %}Listing of participant applications and their status{% endblock %} -{% block content %} - {% macro card_header(app) %} - <div> - <h2 class="uk-float-left"> - <i class="uk-icon fa-fw far fa-check status-icon" title="Approved"></i> - <i class="uk-icon fa-fw far fa-times status-icon" title="Not Approved"></i> - <img src="{{ app.avatar }}" height="20px" class="uk-border-circle" /> - {{ app.username }}#{{ app.discriminator }} - </h2> - <span class="uk-float-right"> - {% if jam.state in ["announced", "preparing"] %} - {% if app.approved %} - <button class="uk-button uk-button-success approve-button" data-app="{{ app.id }}" data-app-user="{{ app.username }}#{{ app.discriminator }}" id="approve-button-{{ app.id }}" disabled> - <i class="uk-icon fa-fw far fa-check"></i> - </button> - <button class="uk-button uk-button-danger unapprove-button" data-app="{{ app.id }}" data-app-user="{{ app.username }}#{{ app.discriminator }}" id="unapprove-button-{{ app.id }}"> - <i class="uk-icon fa-fw far fa-times"></i> - </button> - {% else %} - <button class="uk-button uk-button-success approve-button" data-app="{{ app.id }}" data-app-user="{{ app.username }}#{{ app.discriminator }}" id="approve-button-{{ app.id }}"> - <i class="uk-icon fa-fw far fa-check"></i> - </button> - <button class="uk-button uk-button-danger unapprove-button" data-app="{{ app.id }}" data-app-user="{{ app.username }}#{{ app.discriminator }}" id="unapprove-button-{{ app.id }}" disabled> - <i class="uk-icon fa-fw far fa-times"></i> - </button> - {% endif %} - {% endif %} - - <a class="uk-button uk-button-primary expand-button" data-app="{{ app.id }}" data-app-user="{{ app.username }}#{{ app.discriminator }}"> - <i class="uk-icon far fa-fw fa-plus expand-icon"></i> - <i class="uk-icon far fa-fw fa-minus contract-icon"></i> - </a> - </span> - </div> - {% endmacro %} - - <div class="uk-container uk-container-small uk-section"> - <h1 class="uk-text-center">Code Jam {{ jam.number }}: Participants</h1> - <a class="uk-button uk-button-default" href="{{ url_for("staff.jams.index") }}"><i class="uk-icon fa-fw far fa-arrow-left"></i> Back</a> - - <br /> - <br /> - - {% for app in jam.participants %} - <div class="uk-card approval-card collapsed" id="{{ app.id }}"> - {% if app.approved %} - <div class="uk-card-header approved" id="header-{{ app.id }}"> - {{ card_header(app) }} - </div> - {% else %} - <div class="uk-card-header unapproved" id="header-{{ app.id }}"> - {{ card_header(app) }} - </div> - {% endif %} - <div class="uk-card-body"> - <span class="uk-align-right user-id"> - <span class="uk-text-muted">User ID:</span> {{ app.user_id }} - </span> - - {% for response in app.answers %} - <div> - <strong>{{ questions[response.question].title }}</strong> - <br /> - <pre class="fira-code">{{ response.value }}</pre> - </div> - {% endfor %} - </div> - </div> - <br /> - {% endfor %} - </div> - - <script> - const actions = new JamActions("{{ url_for("staff.jams.action") }}", "{{ csrf_token() }}"); - - for (let elem of document.getElementsByClassName("expand-button")) { - elem.onclick = function(result, data) { - let app = this.getAttribute("data-app"); - let card = document.getElementById(app); - - if (card.classList.contains("collapsed")) { - card.classList.remove("collapsed"); - } else { - card.classList.add("collapsed"); - } - } - } - - {% if jam.state in ["announced", "preparing"] %} - for (let elem of document.getElementsByClassName("approve-button")) { - elem.onclick = function() { - let app = this.getAttribute("data-app"); - let header = document.getElementById("header-" + app); - let unapprove_button = document.getElementById("unapprove-button-" + app); - let user = this.getAttribute("data-app-user"); - - actions.approve_application(app, function(result, data) { - if (!result) { - console.log(data); - return UIkit.notification({ - "message": "Approval failed", - "status": "danger", - "pos": "bottom-center", - "timeout": 5000 - }); - } - - header.classList.add("approved"); - header.classList.remove("unapproved"); - - elem.disabled = true; - unapprove_button.disabled = false; - - UIkit.notification({ - "message": "Approved: " + user, - "status": "success", - "pos": "bottom-center", - "timeout": 5000 - }); - }); - } - } - - for (let elem of document.getElementsByClassName("unapprove-button")) { - elem.onclick = function() { - let app = this.getAttribute("data-app"); - let approve_button = document.getElementById("approve-button-" + app); - let header = document.getElementById("header-" + app); - let user = this.getAttribute("data-app-user"); - - actions.unapprove_application(app, function(result, data) { - if (!result) { - console.log(data); - return UIkit.notification({ - "message": "Unapproval failed", - "status": "danger", - "pos": "bottom-center", - "timeout": 5000 - }); - } - - header.classList.add("unapproved"); - header.classList.remove("approved"); - - elem.disabled = true; - approve_button.disabled = false; - - UIkit.notification({ - "message": "Unapproved: " + user, - "status": "success", - "pos": "bottom-center", - "timeout": 5000 - }); - }); - } - } - {% endif %} - </script> -{% endblock %} diff --git a/templates/staff/jams/teams/view.html b/templates/staff/jams/teams/view.html deleted file mode 100644 index 659a60c2..00000000 --- a/templates/staff/jams/teams/view.html +++ /dev/null @@ -1,513 +0,0 @@ -{% extends "main/base.html" %} -{% block title %}Staff | Jams | Teams{% endblock %} -{% block og_title %}Staff | Jams | Teams{% endblock %} -{% block og_description %}Manage Teams{% endblock %} -{% block page_classes %}page-staff-jams-edit-teams{% endblock %} -{% block content %} - <div class="uk-flex"> - <div class="uk-flex-column uk-padding-small uk-background-muted" id="member-answers-sidebar"> - <h3 class="uk-text-center" id="user-info-hint">Hover a user to show their information here</h3> - - <div id="visible-user-info"> - - </div> - <div id="hidden-user-info" hidden> - {% for participant in jam.participants %} - <div class="user-info" id="user-info-{{ participant.user_id }}"> - <img src="{{ participant.avatar }}" class="uk-border-circle avatar"/> - <div class="uk-text-center"> - <strong>{{ participant.username }}#{{ participant.discriminator }}</strong> - </div> - <div class="uk-text-center"> - <span class="uk-text-muted">{{ participant.user_id }}</span> - </div> - <div class="uk-text-center"> - <i class="uk-icon far fa-fw fa-clock"></i> {{ participant.profile.timezone }} | - <a href="https://gitlab.com/{{ participant.profile.gitlab_username }}"> - <i class="uk-icon fab fa-fw fa-gitlab"></i> {{ participant.profile.gitlab_username }} - </a> - </div> - <hr class="uk-divider-icon"/> - - {% for answer in participant.answers %} - <strong>{{ questions[answer.question].title }}</strong> - <br/> - <span class="fira-code">{{ answer.value }}</span> - <br/> - <br/> - {% endfor %} - </div> - {% endfor %} - </div> - </div> - <div class="uk-section uk-flex-column uk-flex-stretch"> - <h1>Code Jam {{ jam.number }}: Teams</h1> - - <a class="uk-button uk-button-default" href="{{ url_for("staff.jams.index") }}"><i - class="uk-icon fa-fw far fa-arrow-left"></i> Back</a> - - {% if teams %} - <button class="uk-button uk-button-primary" id="init-button" disabled><i - class="uk-icon fa-fw far fa-play"></i> Generate Teams - </button> - {% else %} - <button class="uk-button uk-button-primary" id="init-button"><i class="uk-icon fa-fw far fa-play"></i> - Generate Teams - </button> - {% endif %} - - <button class="uk-button uk-button-secondary" id="add-button"><i class="uk-icon fa-fw far fa-plus"></i> - Add Team - </button> - - {% if jam.winning_team %} - <button class="uk-button team-winner-unset-button uk-button-secondary" id="winner-unset-button"><i - class="uk-icon fa-fw far fa-trophy"></i> - Unset Winner - </button> - {% else %} - <button class="uk-button team-winner-unset-button uk-hidden" id="winner-unset-button"><i - class="uk-icon fa-fw far fa-trophy"></i> - Unset Winner - </button> - {% endif %} - - <br/> - <br/> - <div class="uk-hidden hidden-participants" hidden> - {% for participant in jam.participants %} - {% if participant.user_id not in assigned %} - <div class="uk-margin-small-bottom uk-margin-small-right uk-margin-small-top uk-margin-small-left" - id="participant-line-{{ participant.user_id }}" title="{{ participant.user_id }}"> - <span class="participant-handle" draggable="true" data-user-id="{{ participant.user_id }}"> - <img class="uk-icon-image uk-border-circle" draggable="false" - src="{{ participant.avatar }}"/> - {{ participant.username }}#{{ participant.discriminator }} ({{ participant.profile.timezone }}) - </span> - </div> - {% endif %} - {% endfor %} - </div> - <div class="uk-flex uk-flex-row uk-flex-wrap" id="participant-handles"> - {% for participant in jam.participants %} - {% if participant.user_id not in assigned %} - <div class="participant-handle uk-margin-small-bottom uk-margin-small-right uk-margin-small-top uk-margin-small-left" - id="participant-{{ participant.user_id }}" - title="{{ participant.profile.timezone }} - {{ participant.user_id }}" draggable="true" - data-user-id="{{ participant.user_id }}"> - <div class="uk-card uk-card-primary uk-card-small" - id="participant-{{ participant.user_id }}-card"> - <div class="uk-card-body"> - <img class="uk-icon-image uk-border-circle" draggable="false" - src="{{ participant.avatar }}"/> - {{ participant.username }}#{{ participant.discriminator }} - </div> - </div> - </div> - {% else %} - <div class="participant-handle uk-margin-small-bottom uk-margin-small-right uk-margin-small-top uk-margin-small-left" - id="participant-{{ participant.user_id }}" - title="{{ participant.profile.timezone }} - {{ participant.user_id }}" draggable="true" - data-user-id="{{ participant.user_id }}"> - <div class="uk-card uk-card-secondary uk-card-small" - id="participant-{{ participant.user_id }}-card"> - <div class="uk-card-body"> - <img class="uk-icon-image uk-border-circle" draggable="false" - src="{{ participant.avatar }}"/> - {{ participant.username }}#{{ participant.discriminator }} - </div> - </div> - </div> - {% endif %} - {% endfor %} - </div> - - {% if not teams %} - <p id="no-teams-paragraph">No teams found.</p> - - <div class="uk-flex uk-flex-row uk-flex-stretch uk-flex-wrap uk-flex-center" id="team-targets"> - </div> - {% else %} - <p id="no-teams-paragraph" hidden="hidden">No teams found.</p> - - <div class="uk-flex uk-flex-row uk-flex-stretch uk-flex-wrap uk-flex-center" id="team-targets"> - {% for id, team in teams.items() %} - <div class="team-handle uk-margin-small-bottom uk-margin-small-right uk-margin-small-top uk-margin-small-left" - id="team-{{ team.id }}" data-team-id="{{ team.id }}"> - <div class="uk-card uk-card-default uk-card-small - {% if jam.winning_team and jam.winning_team == team.id %} - team-card-winner - {% endif %} - "> - <div class="uk-card-header"> - <h3 class="uk-card-title"> - {{ team.name }} - </h3> - </div> - <div class="uk-card-body team-target" data-team-id="{{ team.id }}"> - <p>Drop users here to assign them</p> - - {% for user_id in team.members %} - <div class="uk-margin-small-bottom uk-margin-small-right uk-margin-small-top uk-margin-small-left" - id="participant-line-{{ user_id }}" - title="{{ participants[user_id].user_id }}"> - <span class="participant-handle" draggable="true" - data-user-id="{{ participants[user_id].user_id }}"> - <img class="uk-icon-image uk-border-circle" draggable="false" - src="{{ participants[user_id].avatar }}"/> - {{ participants[user_id].username }}#{{ participants[user_id].discriminator }} ({{ participants[user_id].profile.timezone }}) - </span> - </div> - {% endfor %} - </div> - <div class="uk-card-footer uk-text-right"> - <button class="team-winner-button uk-button uk-button-small - {% if jam.winning_team %} - uk-hidden - {% endif %}" - data-team-id="{{ team.id }}"> - <i class="uk-icon fa-fw far fa-trophy"></i> - </button> - <button class="team-reroll-button uk-button uk-button-primary uk-button-small" - data-team-id="{{ team.id }}"> - <i class="uk-icon fa-fw far fa-dice"></i> - </button> - <button class="team-delete-button uk-button uk-button-danger uk-button-small" - data-team-id="{{ team.id }}"> - <i class="uk-icon fa-fw far fa-trash"></i> - </button> - </div> - </div> - </div> - {% endfor %} - </div> - {% endif %} - </div> - </div> - - <script type="application/javascript"> - "use strict"; - const jam = parseInt("{{ jam.number }}"); - const actions = new JamActions("{{ url_for("staff.jams.action") }}", "{{ csrf_token() }}"); - let jam_winning_team = "{{ jam.winning_tam or "" }}"; - const has_winner = function () { - return jam_winning_team !== ""; - }; - const set_winner_button = function (team) { - return ` - <button class="team-winner-button uk-button uk-button-small ${has_winner() ? "uk-hidden" : ""}" data-team-id="${team.id}"> - <i class="uk-icon fa-fw far fa-trophy"></i> - </button> - ` - }; - - $("#init-button").on( - "click", - () => actions.generate_teams(jam, (result, data) => { - if (result) { - data.teams.forEach((team) => { - let elem = ` - <div class="team-handle uk-margin-small-bottom uk-margin-small-right uk-margin-small-top uk-margin-small-left" id="team-${team.id}" data-team-id="${team.id}"> - <div class="uk-card uk-card-default uk-card-small"> - <div class="uk-card-header"> - <h3 class="uk-card-title">${team.name}</h3> - </div> - <div class="uk-card-body team-target" data-team-id="${team.id}"> - <p>Drop users here to assign them</p> - </div> - <div class="uk-card-footer uk-text-right"> - ${set_winner_button(team)} - <button class="team-reroll-button uk-button uk-button-primary uk-button-small" data-team-id="${team.id}"> - <i class="uk-icon fa-fw far fa-dice"></i> - </button> - <button class="team-delete-button uk-button uk-button-danger uk-button-small" data-team-id="${team.id}"> - <i class="uk-icon fa-fw far fa-trash"></i> - </button> - </div> - </div> - </div>`; - - $("#team-targets").append(elem); - assign_handlers(); - }); - - $("#init-button").prop('disabled', true); - - UIkit.notification({ - "message": `Generated ${data.teams.length} teams`, - "status": "success", - "pos": "bottom-center", - "timeout": 5000 - }); - } else { - console.log(data); - - UIkit.notification({ - "message": "Failed to generate teams", - "status": "danger", - "pos": "bottom-center", - "timeout": 5000 - }); - } - }) - ); - - $("#add-button").on( - "click", - () => actions.create_team(jam, (result, data) => { - if (result) { - let team = data.team; - let elem = ` - <div class="team-handle uk-margin-small-bottom uk-margin-small-right uk-margin-small-top uk-margin-small-left" id="team-${team.id}" data-team-id="${team.id}"> - <div class="uk-card uk-card-default uk-card-small"> - <div class="uk-card-header"> - <h3 class="uk-card-title">${team.name}</h3> - </div> - <div class="uk-card-body team-target" data-team-id="${team.id}"> - <p>Drop users here to assign them</p> - </div> - <div class="uk-card-footer uk-text-right"> - ${set_winner_button(team)} - <button class="team-reroll-button uk-button uk-button-primary uk-button-small" data-team-id="${team.id}"> - <i class="uk-icon fa-fw far fa-dice"></i> - </button> - <button class="team-delete-button uk-button uk-button-danger uk-button-small" data-team-id="${team.id}"> - <i class="uk-icon fa-fw far fa-trash"></i> - </button> - </div> - </div> - </div>`; - - $("#team-targets").append(elem); - assign_handlers(); - - UIkit.notification({ - "message": `Created team: ${team.name}`, - "status": "success", - "pos": "bottom-center", - "timeout": 5000 - }); - } else { - console.log(data); - - UIkit.notification({ - "message": "Failed to create team", - "status": "danger", - "pos": "bottom-center", - "timeout": 5000 - }); - } - }) - ); - - function unset_winning_team(callback) { - actions.unset_winning_team(jam, (result, data) => { - if (result) { - $("#winner-unset-button").addClass("uk-hidden"); - $(".team-winner-button").removeClass("uk-hidden"); - $(".team-card-winner").removeClass("team-card-winner"); - UIkit.notification({ - "message": "Winning team unset", - "status": "success", - "pos": "bottom-center", - "timeout": 5000 - }); - jam_winning_team = ""; - if (callback) { - callback(true); - } - } else { - console.error(data); - UIkit.notification({ - "message": "Failed to unset winning team", - "status": "danger", - "pos": "bottom-center", - "timeout": 5000 - }); - if (callback) { - callback(false); - } - } - }); - } - - $("#winner-unset-button").on( - "click", unset_winning_team - ); - - $(".participant-handle").on( - "dragstart", - (e) => { - e.originalEvent.dataTransfer.setData( - "pydis/member", - e.target.getAttribute("data-user-id") - ); - } - ).on( - "mouseenter", - (e) => { - $("#user-info-hint").prop("hidden", true); - $(".user-info").appendTo("#hidden-user-info"); - - console.log(e.target); - let target = e.target; - let member = target.getAttribute("data-user-id"); - - if (member === null) { - target = e.target.parentNode.parentNode; - member = target.getAttribute("data-user-id"); - } - - console.log(member); - - $(`#user-info-${member}`).appendTo("#visible-user-info"); - } - ); - - function drag_over(e) { - e.preventDefault(); - e.stopPropagation(); - - e.originalEvent.dropEffect = "move"; - } - - function drop(e) { - e.preventDefault(); - e.stopPropagation(); - - let member = e.originalEvent.dataTransfer.getData("pydis/member"); - - if (!member) { - return; - } - - let target = e.target; - - if (target.tagName === "p" || target.tagName === "P") { - target = target.parentNode; - } - - let team = target.getAttribute("data-team-id"); - - $(`#participant-line-${member}`).appendTo(target); - actions.set_team_member(jam, member, team, (result, data) => { - if (result) { - UIkit.notification({ - "message": `Team assigned successfully`, - "status": "success", - "pos": "bottom-center", - "timeout": 5000 - }); - - $(`#participant-${member}-card`).removeClass("uk-card-primary").addClass("uk-card-secondary"); - } else { - console.log(data); - - UIkit.notification({ - "message": "Failed to assign user to team", - "status": "danger", - "pos": "bottom-center", - "timeout": 5000 - }); - } - }); - } - - function set_winning_team(e) { - let team = this.getAttribute("data-team-id"); - - actions.set_winning_team(team, (result, data) => { - if (result) { - $(".team-winner-button").addClass("uk-hidden"); - $("#winner-unset-button").removeClass("uk-hidden"); - $(".team-card-winner").removeClass("team-card-winner"); - $(`#team-${team}`).find(".uk-card").addClass("team-card-winner"); - UIkit.notification({ - "message": "Winning team updated", - "status": "success", - "pos": "bottom-center", - "timeout": 5000 - }); - jam_winning_team = team; - } else { - console.error(data); - UIkit.notification({ - "message": "Failed to set winning team", - "status": "danger", - "pos": "bottom-center", - "timeout": 5000 - }); - } - }); - } - - function reroll_team(e) { - let team = this.getAttribute("data-team-id"); - - actions.reroll_team(team, (result, data) => { - if (result) { - $(`#team-${team}`).find("h3").text(data.name); - - UIkit.notification({ - "message": `Team rerolled: ${data.name}`, - "status": "success", - "pos": "bottom-center", - "timeout": 5000 - }); - } else { - console.log(data); - - UIkit.notification({ - "message": "Failed to reroll team", - "status": "danger", - "pos": "bottom-center", - "timeout": 5000 - }); - } - }) - } - - function delete_team(e) { - let team = this.getAttribute("data-team-id"); - const perform = () => { - actions.delete_team(team, (result, data) => { - if (result) { - let target = $(`#team-${team}`); - - target.find(".team-target").children("div").appendTo(".hidden-participants"); - target.remove(); - } else { - console.log(data); - - UIkit.notification({ - "message": "Failed to delete team", - "status": "danger", - "pos": "bottom-center", - "timeout": 5000 - }); - } - }) - }; - - if (jam_winning_team === team) { - // unset the winning team first - unset_winning_team(result => { - if (result) { - perform(); - } - }); - } else { - perform(); - } - } - - function assign_handlers() { - $(".team-target").off("dragover").off("drop").on("dragover", drag_over).on("drop", drop); - $(".team-winner-button").off("click").on("click", set_winning_team); - $(".team-reroll-button").off("click").on("click", reroll_team); - $(".team-delete-button").off("click").on("click", delete_team); - } - - assign_handlers(); - </script> -{% endblock %} diff --git a/templates/staff/tables/edit.html b/templates/staff/tables/edit.html deleted file mode 100644 index b3b9faae..00000000 --- a/templates/staff/tables/edit.html +++ /dev/null @@ -1,50 +0,0 @@ -{% extends "main/base.html" %} -{% block title %}Staff | Home{% endblock %} -{% block og_title %}Staff | Home{% endblock %} -{% block og_description %}Landing page for the staff management area{% endblock %} -{% block content %} - <div class="uk-container uk-section uk-container-small"> - {% if message %} - <div class="uk-alert uk-alert-warning"> - {{ message }} - </div> - {% endif %} - <form uk-grid class="uk-grid-small" action="{{ url_for("staff.tables.edit", table=table) }}" method="post"> - <div class="uk-width-expand"> - <p>Primary key: <strong>"<span class="fira-code">{{ primary_key }}</span>"</strong></p> - </div> - <div class="uk-width-auto"> - <a class="uk-button uk-button-default" href="{{ url_for("staff.tables.table", table=table, page=1) }}"><i class="uk-icon fa-fw fas fa-arrow-left"></i> Back</a> - <input class="uk-button uk-button-primary" type="submit" id="submit" value="Save" /> - </div> - <div class="uk-width-1-1"> - <div id="editor" class="uk-textarea">{{ document }}</div> - <input type="hidden" name="json" id="json" /> - </div> - - <input type="hidden" name="csrf_token" value="{{ csrf_token() }}"/> - - {% if old_primary %} - <input type="hidden" name="old_primary" value="{{ old_primary }}"/> - {% endif %} - </form> - - <script type="application/javascript"> - "use strict"; - - window.onload = () => { - let editor = ace.edit("editor"); - - editor.session.setMode("ace/mode/json"); - editor.session.setUseWrapMode(true); - - editor.setTheme("ace/theme/iplastic"); - editor.setShowPrintMargin(false); - - editor.on("input", function () { - document.getElementById("json").value = editor.getValue(); - }); - }; - </script> - </div> -{% endblock %} diff --git a/templates/staff/tables/index.html b/templates/staff/tables/index.html deleted file mode 100644 index 206234bb..00000000 --- a/templates/staff/tables/index.html +++ /dev/null @@ -1,32 +0,0 @@ -{% extends "main/base.html" %} -{% block title %}Staff | Tables{% endblock %} -{% block og_title %}Staff | Tables{% endblock %} -{% block og_description %}Table management and editor{% endblock %} -{% block content %} - <div class="uk-container uk-section uk-container-small"> - <a class="uk-button uk-button-default" href="{{ url_for("staff.index") }}"><i class="uk-icon fa-fw fas fa-arrow-left"></i> Back</a> - <h1 class="uk-title uk-text-center"> - Table manager - </h1> - <p> - Click one of the tables below to manage its data: - </p> - <ul> - {% for table, obj in tables.items() %} - {% if obj.locked %} - <li> - <a href="{{ url_for("staff.tables.table", table=table, page=1) }}" title="Table locked for editing"> - <i class="uk-icon fa-fw fas fa-lock"></i> {{ table }} - </a> - </li> - {% else %} - <li> - <a href="{{ url_for("staff.tables.table", table=table, page=1) }}"> - <i class="uk-icon fa-fw fas fa-pencil"></i> {{ table }} - </a> - </li> - {% endif %} - {% endfor %} - </ul> - </div> -{% endblock %}
\ No newline at end of file diff --git a/templates/staff/tables/table.html b/templates/staff/tables/table.html deleted file mode 100644 index 87d981a0..00000000 --- a/templates/staff/tables/table.html +++ /dev/null @@ -1,165 +0,0 @@ -{% extends "main/base.html" %} -{% block title %}Staff | Home{% endblock %} -{% block og_title %}Staff | Home{% endblock %} -{% block og_description %}Landing page for the staff management area{% endblock %} -{% block content %} - <div class="uk-container uk-section uk-container-small"> - <a class="uk-button uk-button-default" href="{{ url_for("staff.tables.index") }}"><i class="uk-icon fa-fw fas fa-arrow-left"></i> Back</a> - - {% if page == "all" %} - <a class="uk-button uk-button-dark" href="{{ url_for("staff.tables.table", table=table, page=1) }}"><i class="uk-icon fa-fw fas fa-bars"></i> Page 1</a> - {% else %} - <a class="uk-button uk-button-dark" href="{{ url_for("staff.tables.table", table=table, page="all") }}"><i class="uk-icon fa-fw fas fa-bars"></i> All Data</a> - {% endif %} - - {% if not table_obj.locked %} - <a class="uk-button uk-button-primary" href="{{ url_for("staff.tables.edit", table=table) }}"><i class="uk-icon fa-fw fas fa-plus"></i> Add</a> - {% endif %} - - <h1 class="uk-title uk-text-center"> - <span class="fira-code"> - {{ table }} - - {% if table_obj.locked %} - <i class="uk-icon fa-fw fas fa-lock" title="Table locked for editing"></i> - {% endif %} - </span> - </h1> - - <form action="{{ url_for("staff.tables.table", table=table, page="all") }}" method="get" class="uk-width-1-1"> - <div class="uk-form-custom uk-width-1-1 uk-flex"> - {% if search %} - <input class="uk-input uk-width-expand" name="search" type="text" placeholder="Search (RE2)" value="{{ search }}" /> - {% else %} - <input class="uk-input uk-width-expand" name="search" type="text" placeholder="Search (RE2)" /> - {% endif %} - - <div class="uk-width-auto uk-flex-auto"> - <select class="uk-select uk-width-1-1" name="search-key" title="Table Key"> - <option class="uk-text-bold">{{ table_obj.primary_key }}</option> - {% for key in table_obj.keys %} - {% if key != table_obj.primary_key %} - {% if search_key == key %} - <option selected>{{ key }}</option> - {% else %} - <option>{{ key }}</option> - {% endif %} - {% endif %} - {% endfor %} - </select> - </div> - - <button class="uk-button uk-button-primary uk-width-auto" type="submit"><i class="uk-icon fas fa-search"></i></button> - <a class="uk-button uk-button-dark uk-width-auto" target="_blank" href="https://github.com/google/re2/wiki/Syntax"><i class="uk-icon fas fa-question-circle"></i></a> - </div> - </form> - - {% macro paginate() %} - {% if pages != "all" %} - <ul class="uk-pagination uk-flex-center" uk-margin> - {% if page > 1 %} - <li><a href="{{ url_for("staff.tables.table", table=table, page=page - 1) }}"><span uk-pagination-previous></span></a></li> - {% else %} - <li class="uk-disabled"><a><span uk-pagination-previous></span></a></li> - {% endif %} - - {% if page == 1 %} - <li class="uk-active"><a href="{{ url_for("staff.tables.table", table=table, page=1) }}">1</a></li> - {% else %} - <li><a href="{{ url_for("staff.tables.table", table=table, page=1) }}">1</a></li> - {% endif %} - - {% if page >= 5 %} - <li class="uk-disabled"><a>...</a></li> - {% endif %} - - {% set current_page = page - 2 %} - - {% for num in range(5) %} - {% if current_page + num > 1 and current_page + num < pages %} - {% if current_page + num == page %} - <li class="uk-active"><a href="{{ url_for("staff.tables.table", table=table, page=current_page + num) }}">{{ current_page + num }}</a></li> - {% else %} - <li><a href="{{ url_for("staff.tables.table", table=table, page=current_page + num) }}">{{ current_page + num }}</a></li> - {% endif %} - {% endif %} - {% set current_page = current_page - 1 %} - {% endfor %} - - {% if pages - page > 3 %} - <li class="uk-disabled"><a>...</a></li> - {% endif %} - - {% if pages != 1 %} - {% if page == pages %} - <li class="uk-active"><a href="{{ url_for("staff.tables.table", table=table, page=pages) }}">{{ pages }}</a></li> - {% else %} - <li><a href="{{ url_for("staff.tables.table", table=table, page=pages) }}">{{ pages }}</a></li> - {% endif %} - {% endif %} - - {% if page < pages %} - <li><a href="{{ url_for("staff.tables.table", table=table, page=page + 1) }}"><span uk-pagination-next></span></a></li> - {% else %} - <li class="uk-disabled"><a><span uk-pagination-next></span></a></li> - {% endif %} - </ul> - {% endif %} - {% endmacro %} - - {{ paginate() }} - - </div> - <div class="uk-container uk-section"> - {% if documents %} - <table class="uk-table uk-table-striped uk-overflow-auto"> - <thead> - <tr> - {% if not table_obj.locked %} - <th class="uk-table-shrink uk-text-center"> - <i class="uk-icon fa-fw fas fa-pencil"></i> - </th> - {% endif %} - - {% for key in table_obj.keys %} - <th title="{{ key }}"> - {% if key == table_obj.primary_key %} - <strong>{{ key }}</strong> - {% else %} - {{ key }} - {% endif %} - </th> - {% endfor %} - </tr> - </thead> - <tbody> - {% for doc in documents %} - <tr> - {% if not table_obj.locked %} - <td class="uk-table-shrink"> - <a href="{{ url_for("staff.tables.edit", table=table, key=doc[table_obj.primary_key]) }}"> - <i class="uk-icon fa-fw fas fa-pencil"></i> - </a> - </td> - {% endif %} - - {% for key in table_obj.keys %} - <td class="uk-text-truncate fira-code" title="{{ doc[key] }}"> - {% if key == table_obj.primary_key %} - <strong>{{ doc[key] }}</strong> - {% else %} - {{ doc[key] }} - {% endif %} - </td> - {% endfor %} - </tr> - {% endfor %} - </tbody> - </table> - {% else %} - <p class="uk-text-center">No documents found</p> - {% endif %} - - {{ paginate() }} - </div> -{% endblock %}
\ No newline at end of file diff --git a/templates/wiki/base.html b/templates/wiki/base.html deleted file mode 100644 index 038ee5a2..00000000 --- a/templates/wiki/base.html +++ /dev/null @@ -1,216 +0,0 @@ -<!DOCTYPE html> -<html lang="en"> - <head> - {% block head %} - <title>Python Discord | {% block title %}{% endblock %}</title> - <meta charset="UTF-8"> - <meta name="viewport" content="width=device-width, initial-scale=1"> - - <script src="{{ static_file('js/script.js') }}" type="application/javascript"></script> - - <!-- Static stuff --> - <link rel="shortcut icon" href="{{ static_file('favicon.ico') }}"> - <link rel="stylesheet" href="{{ static_file('css/uikit_blurple.css') }}"/> - <link rel="stylesheet" href="{{ static_file('css/style.css') }}"/> - <link rel="stylesheet" href="{{ static_file('css/bundled/pygments-monokai.css') }}"/> - <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/flatpickr/dist/flatpickr.min.css"> - - <!-- OpenGraph metadata --> - <meta property="og:title" content="Python Discord | {% block og_title %}{% endblock %}"> - <meta property="og:description" content="{% block og_description %}We're a large, friendly community focused around the Python programming language. Our community is open to those who wish to learn the language, as well as those looking to help others.{% endblock %}"> - <meta content="/static/logos/logo_discord.png" property="og:image"> - {% endblock %} - {% block extra_head %} - - {% endblock %} - </head> - <body class="{% block page_classes %}{% endblock page_classes %} - page-{{ current_page.replace(".", "-") }} - blueprint-{{ blueprint.replace(".", "-") }}"> - <div class="uk-offcanvas-content uk-flex uk-flex-column" id="wiki-page"> - {% include "main/navigation.html" %} - <div class="uk-flex uk-flex-row uk-flex-1"> - <div class="uk-card uk-card-body uk-flex-left uk-flex uk-card-primary uk-visible@s" id="wiki-sidebar"> - <ul class="uk-nav-default uk-nav-parent-icon" uk-nav id="wiki-nav"> - {% if data is defined and current_page == "wiki.page" %} - {% if "headers" in data and data.headers %} - <li class="uk-nav-header">Contents</li> - {% for header in data.headers %} - {% if "sub_headers" in header %} - <li class="uk-parent"> - <a href="{{ header.id }}"> - {{ header.title | safe }} - </a> - <ul class="uk-nav-sub"> - {% for sub in header.sub_headers %} - <li><a href="{{ sub.id }}"> - {{ sub.title | safe }} - </a></li> - {% endfor %} - </ul> - </li> - {% else %} - <li><a href="{{ header.id }}">{{ header.title | safe }}</a></li> - {% endif %} - {% endfor %} - <li class="uk-nav-divider"></li> - {% endif %} - {% endif %} - <li class="uk-nav-header">Pages</li> - - <li><a href="{{ url_for("wiki.page", page="home") }}"> - <i class="uk-icon fas fa-fw fa-home"></i> Home - </a></li> - <li><a href="{{ url_for("wiki.page", page="jams") }}"> - <i class="uk-icon fas fa-fw fa-star-exclamation"></i> Code Jams</a> - </li> - <li><a href="{{ url_for("wiki.page", page="contributing") }}"> - <i class="uk-icon fas fa-fw fa-code-branch"></i> Contributing - </a></li> - - {% set ACTIONABLE_PAGES = [ - "wiki.page", "wiki.edit", "wiki.history.show", - "wiki.history.compare", "wiki.source", "wiki.delete", - "wiki.move" - ] %} - {% set actionable = current_page in ACTIONABLE_PAGES and can_edit %} - - {% if actionable %} - <li class="uk-nav-divider"></li> - - <li class="uk-nav-header">Actions</li> - - {% if current_page == "wiki.edit" %} - <li> - <a href="{{ url_for("wiki.page", page=page) }}"> - <i class="uk-icon fas fa-fw fa-arrow-left"></i> Back - </a> - </li> - {% else %} - <li> - <a href="{{ url_for("wiki.edit", page=page) }}"> - <i class="uk-icon fas fa-fw fa-pencil-alt"></i> Edit - </a> - </li> - {% endif %} - - {% if current_page == "wiki.delete" %} - <li> - <a href="{{ url_for("wiki.page", page=page) }}"> - <i class="uk-icon fas fa-fw fa-arrow-left"></i> Back - </a> - </li> - {% else %} - <li> - <a href="{{ url_for("wiki.delete", page=page) }}"> - <i class="uk-icon fas fa-fw fa-trash"></i> Delete - </a> - </li> - {% endif %} - - {% if current_page == "wiki.move" %} - <li> - <a href="{{ url_for("wiki.page", page=page) }}"> - <i class="uk-icon fas fa-fw fa-arrow-left"></i> Back - </a> - </li> - {% else %} - <li> - <a href="{{ url_for("wiki.move", page=page) }}"> - <i class="uk-icon fas fa-fw fa-arrow-right"></i> Move - </a> - </li> - {% endif %} - - {% if current_page == "wiki.history.show" %} - <li> - <a href="{{ url_for("wiki.page", page=page) }}"> - <i class="uk-icon fas fa-fw fa-arrow-left"></i> Back - </a> - </li> - {% elif current_page == "wiki.history.compare" %} - <li> - <a href="{{ url_for("wiki.history.show", page=slug) }}"> - <i class="uk-icon fas fa-fw fa-arrow-left"></i> Back - </a> - </li> - {% else %} - <li> - <a href="{{ url_for("wiki.history.show", page=page) }}"> - <i class="uk-icon fas fa-fw fa-history"></i> Revisions - </a> - </li> - {% endif %} - - {% if current_page == "wiki.source" %} - <li> - <a href="{{ url_for("wiki.page", page=page) }}"> - <i class="uk-icon fas fa-fw fa-arrow-left"></i> Back - </a> - </li> - {% else %} - <li> - <a href="{{ url_for("wiki.source", page=page) }}"> - <i class="uk-icon fas fa-fw fa-code"></i> Source - </a> - </li> - {% endif %} - {% endif %} - - <li class="uk-nav-divider"></li> - <li class="uk-nav-header">Information</li> - - <li><a href="{{ url_for("wiki.special") }}"> - <i class="uk-icon fas fa-fw fa-ellipsis-h"></i> Special Pages - </a></li> - <li><a href="{{ url_for("wiki.page", page="help") }}"> - <i class="uk-icon fas fa-fw fa-question-circle"></i> Help - </a></li> - - <li> - <form action="{{ url_for("wiki.search") }}" method="post"> - {% if query is undefined %} - <input type="text" class="uk-input sidebar-search-input" placeholder="Search (BETA)" id="query" name="query" required> - {% else %} - <input type="text" class="uk-input sidebar-search-input" placeholder="Search (BETA)" id="query" name="query" value="{{ query }}" required> - {% endif %} - <br /> - <button class="uk-button uk-button-darkish uk-button-small search-button" type="submit" id="search" title="Search"> - <i class="uk-icon fas fa-fw fa-search"></i> - </button> - - <input type="hidden" name="csrf_token" value="{{ csrf_token() }}"/> - </form> - </li> - </ul> - </div> - <div class="uk-width-expand full-width"> - <a class="uk-flex-left uk-flex uk-flex-column uk-background-primary uk-hidden@s uk-hidden@m uk-hidden@l uk-hidden@xl" id="wiki-sidebar-button"> - <div class="uk-flex-center"><i class="uk-icon fa-fw far fa-bars"></i></div> - </a> - <div class="uk-section uk-flex uk-flex-column content"> - {% block content %}{% endblock %} - </div> - </div> - </div> - </div> - - <footer> - <div class="uk-section uk-section-secondary uk-container-medium uk-text-meta"> - <div class="uk-text-center uk-text-meta"> - <p> - This website uses <a href="https://python.org">Python</a> and - <a href="http://flask.pocoo.org/">Flask</a>, and was developed collaboratively on - <a href="https://gitlab.com/python-discord/projects/site">GitLab</a>. - <br /> - For privacy & GDPR-related info, please <a href="{{ url_for("main.about.privacy") }}">see this page</a>. - </p> - </div> - </div> - </footer> - - <script> - wiki_sidebar(); - </script> - </body> -</html> diff --git a/templates/wiki/compare_revision.html b/templates/wiki/compare_revision.html deleted file mode 100644 index 34ab61bc..00000000 --- a/templates/wiki/compare_revision.html +++ /dev/null @@ -1,13 +0,0 @@ -{% extends "wiki/base.html" %} -{% block title %}Wiki | Comparing {{ title }}{% endblock %} -{% block og_title %}Wiki | Comparing {{ title }}{% endblock %} -{% block og_description %}{% endblock %} -{% block content %} - <div class="uk-container uk-container-small"> - <h2 class="uk-title"> - Revision comparison for {{ title }} - </h2> - - {{ diff | safe }} - </div> -{% endblock %} diff --git a/templates/wiki/page_delete.html b/templates/wiki/page_delete.html deleted file mode 100644 index 27c4b406..00000000 --- a/templates/wiki/page_delete.html +++ /dev/null @@ -1,25 +0,0 @@ -{% extends "wiki/base.html" %} -{% block title %}Wiki | Delete: {{ page }}{% endblock %} -{% block og_title %}Wiki | Delete: {{ page }}{% endblock %} -{% block og_description %}{% endblock %} -{% block content %} - <div class="uk-container uk-container-small"> - <div uk-alert class="uk-alert-danger"> - <h3>Delete Page: {{ page }}</h3> - <p> - Are you sure you want to delete this page? - </p> - - <form uk-grid class="uk-grid-small" action="{{ url_for("wiki.delete", page=page) }}" method="post"> - <div class="uk-width-1-2"> - <a href="{{ url_for("wiki.page", page=page) }}" class="uk-button uk-button-primary uk-width-1-1" type="button" id="cancel">Cancel</a> - </div> - <div class="uk-width-1-2"> - <input class="uk-button uk-button-secondary uk-width-1-1" type="submit" id="delete" value="Delete" /> - </div> - - <input type="hidden" name="csrf_token" value="{{ csrf_token() }}"/> - </form> - </div> - </div> -{% endblock %} diff --git a/templates/wiki/page_edit.html b/templates/wiki/page_edit.html deleted file mode 100644 index 7293b5f5..00000000 --- a/templates/wiki/page_edit.html +++ /dev/null @@ -1,137 +0,0 @@ -{% extends "wiki/base.html" %} -{% block title %}Wiki | Edit: {{ page }}{% endblock %} -{% block og_title %}Wiki | Edit: {{ page }}{% endblock %} -{% block og_description %}{% endblock %} - -{% block page_classes %}uses-rst{% endblock %} - -{% block content %} - <form uk-grid class="uk-grid-small" action="{{ url_for("wiki.edit", page=page) }}" method="post"> - <div class="uk-width-expand"> - <input name="title" id="title" placeholder="Page Title" value="{{ title }}" class="uk-input" required /> - </div> - <div class="uk-width-auto"> - <button class="uk-button uk-button-secondary" type="button" value="Preview" id="preview">Preview</button> - </div> - <div class="uk-width-auto"> - <input class="uk-button uk-button-primary" type="submit" id="submit" value="Save" disabled /> - </div> - <div class="uk-width-1-1"> - <div id="editor" class="uk-textarea">{{ rst }}</div> - <input type="hidden" name="rst" id="rst" /> - </div> - - <input type="hidden" name="csrf_token" value="{{ csrf_token() }}"/> - </form> - - <div class="uk-container uk-container-small preview-title"> - <h2 id="preview-title">{{ title }}</h2> - - <div id="preview-div"> - {{ preview | safe }} - </div> - </div> - - <script type="application/javascript"> - "use strict"; - - window.onload = () => { - let csrf_token = "{{ csrf_token() }}"; - - function do_preview(_) { - let oReq = new XMLHttpRequest(); - - oReq.addEventListener("load", function () { - let response = JSON.parse(this.responseText); - - if (response.error !== undefined) { - document.getElementById("submit").disabled = true; - - if (response.error_lines !== undefined) { - editor.session.setAnnotations(response.error_lines); - document.getElementById("preview-div").innerHTML = "<h3>Error - see editor margin</h3>"; - } else { - console.log("Error: " + response.error); - document.getElementById("preview-div").innerHTML = "<h3>Error</h3><p>" + response.error + "<p>"; - } - } else { - document.getElementById("submit").disabled = false; - document.getElementById("preview-div").innerHTML = response.data; - - editor.session.setAnnotations([]); - } - }); - - let data = editor.getValue(); - - if (data.replace("\s", "").length < 1 || document.getElementById("title").value.length < 1) { - document.getElementById("submit").disabled = true; - return false; - } - - oReq.open("POST", "/render"); - - oReq.setRequestHeader("Content-type", "application/json"); - oReq.setRequestHeader("X-CSRFToken", csrf_token); - - oReq.send(JSON.stringify({"data": editor.getValue()})); - - return false; - } - - document.getElementById("preview").onclick = do_preview; - - let editor = ace.edit("editor"); - let timer; - - editor.session.setMode("ace/mode/rst"); - editor.session.setUseWrapMode(true); - - editor.setTheme("ace/theme/iplastic"); - editor.setShowPrintMargin(false); - - editor.on("input", function () { - document.getElementById("submit").disabled = true; - document.getElementById("rst").value = editor.getValue(); - - if (timer !== undefined) { - clearTimeout(timer); - } - timer = setTimeout(do_preview, 1000); - }); - - document.getElementById("title").oninput = function () { - if (document.getElementById("title").value.length < 1) { - document.getElementById("submit").disabled = true; - } - - document.getElementById("preview-title").textContent = document.getElementById("title").value; - - document.getElementById("rst").value = editor.getValue(); - - if (timer !== undefined) { - clearTimeout(timer); - } - timer = setTimeout(do_preview, 1000); - }; - - function refreshLock() { - console.log("Refreshing lock"); - let xhttp = new XMLHttpRequest(); - xhttp.onreadystatechange = function () { - if (this.readyState === 4 && this.status === 204) { - console.log("Lock refreshed") - } else if (this.readyState === 4 && this.status !== 204) { - console.log("Could not refresh lock") - } - }; - - xhttp.open("PATCH", document.location.pathname, true); - xhttp.send(); - } - - // Lock refreshing - setInterval(refreshLock, (60 * 4) * 1000); - } - </script> -{% endblock %} diff --git a/templates/wiki/page_in_use.html b/templates/wiki/page_in_use.html deleted file mode 100644 index 1707845c..00000000 --- a/templates/wiki/page_in_use.html +++ /dev/null @@ -1,12 +0,0 @@ -{% extends "wiki/base.html" %} -{% block title %}Wiki Error{% endblock %} -{% block og_title %}Wiki Error{% endblock %} -{% block og_description %}{% endblock %} -{% block content %} - <div class="uk-container uk-container-small"> - <div uk-alert class="uk-alert-warning"> - <h3>The page you requested is currently being edited</h3> - <p>Please try again in a little bit when the lock has expired.</p> - </div> - </div> -{% endblock %} diff --git a/templates/wiki/page_move.html b/templates/wiki/page_move.html deleted file mode 100644 index 2bd772e9..00000000 --- a/templates/wiki/page_move.html +++ /dev/null @@ -1,26 +0,0 @@ -{% extends "wiki/base.html" %} -{% block title %}Wiki | Move: {{ page }}{% endblock %} -{% block og_title %}Wiki | Move: {{ page }}{% endblock %} -{% block og_description %}{% endblock %} -{% block content %} - <div class="uk-container uk-container-small"> - {% if message is defined %} - <div uk-alert class="uk-alert-danger"> - <p>{{ message }}</p> - </div> - {% endif %} - - <h3>Move Page: {{ page }}</h3> - <form uk-grid class="uk-grid-small" action="{{ url_for("wiki.move", page=page) }}" method="post"> - <input type="text" class="uk-width-1-1 uk-input location-input" placeholder="{{ page }}" id="location" name="location" required> - <div class="uk-width-1-2"> - <a href="{{ url_for("wiki.page", page=page) }}" class="uk-button uk-button-secondary uk-width-1-1" type="button" id="cancel">Cancel</a> - </div> - <div class="uk-width-1-2"> - <input class="uk-button uk-button-primary uk-width-1-1" type="submit" id="move" value="Move" /> - </div> - - <input type="hidden" name="csrf_token" value="{{ csrf_token() }}"/> - </form> - </div> -{% endblock %} diff --git a/templates/wiki/page_source.html b/templates/wiki/page_source.html deleted file mode 100644 index 15384aa9..00000000 --- a/templates/wiki/page_source.html +++ /dev/null @@ -1,13 +0,0 @@ -{% extends "wiki/base.html" %} -{% block title %}Wiki | {{ data["title"] }}{% endblock %} -{% block og_title %}Wiki | {{ data["title"] }}{% endblock %} -{% block og_description %}{% endblock %} -{% block content %} - <div class="uk-container uk-container-small"> - <h2 class="uk-title"> - {{ data["title"] }} - </h2> - - {{ rst | safe }} - </div> -{% endblock %}
\ No newline at end of file diff --git a/templates/wiki/page_view.html b/templates/wiki/page_view.html deleted file mode 100644 index aa560390..00000000 --- a/templates/wiki/page_view.html +++ /dev/null @@ -1,18 +0,0 @@ -{% extends "wiki/base.html" %} -{% block title %}Wiki | {{ data["title"] }}{% endblock %} -{% block og_title %}Wiki | {{ data["title"] }}{% endblock %} - -{# To be safe about whitespace formatting on various platforms, we do everything one one line here #} -{% block og_description %}{% if data.rst.startswith(".. header::") %}{{ data.text.split("\n", 1)[0] }}{% endif %}{% endblock %} - -{% block page_classes %}uses-rst{% endblock %} - -{% block content %} - <div class="uk-container uk-container-small" id="doc-view"> - <h2 class="uk-title"> - {{ data["title"] }} - </h2> - - {{ data["html"] | safe }} - </div> -{% endblock %}
\ No newline at end of file diff --git a/templates/wiki/revision_list.html b/templates/wiki/revision_list.html deleted file mode 100644 index cd6767db..00000000 --- a/templates/wiki/revision_list.html +++ /dev/null @@ -1,36 +0,0 @@ -{% extends "wiki/base.html" %} -{% block title %}Wiki | Revisions to {{ page }}{% endblock %} -{% block og_title %}Wiki | Revisions to {{ page }}{% endblock %} -{% block og_description %}{% endblock %} -{% block content %} - <div class="uk-container"> - <h2>Wiki page revisions</h2> - <table class="uk-table uk-table-hover"> - <thead> - <tr> - <th>Page title</th> - <th>Date</th> - <th>User ID</th> - <th>Compare before</th> - <th>Compare after</th> - </tr> - </thead> - <tbody> - {% for revision in revisions %} - <tr> - <td>{{ revision["post"]["title"] }}</td> - <td>{{ revision["pretty_time"] }}</td> - <td>{{ revision['user'] }}</td> - <td><input type="radio" id="compare-before-{{ revision['id'] }}" class="uk-radio"></td> - <td><input type="radio" id="compare-after-{{ revision['id'] }}" class="uk-radio"></td> - </tr> - {% endfor %} - </tbody> - </table> - <a href="#" id="compare-submit" class="uk-button uk-button-primary">Compare selections</a> - </div> - <script> - let revisions = {{ revisions | tojson }}; - revision_diff(revisions); - </script> -{% endblock %} diff --git a/templates/wiki/search.html b/templates/wiki/search.html deleted file mode 100644 index 8a337192..00000000 --- a/templates/wiki/search.html +++ /dev/null @@ -1,23 +0,0 @@ -{% extends "wiki/base.html" %} -{% block title %}Wiki | Search{% endblock %} -{% block og_title %}Wiki | Search{% endblock %} -{% block og_description %}Search for pages by content{% endblock %} -{% block content %} - <div class="uk-container uk-container-small"> - <h2 class="uk-title"> - Search - </h2> - - <form uk-grid class="uk-grid-small" action="{{ url_for("wiki.search") }}" method="post"> - <input type="text" class="uk-width-1-1 uk-input location-input" placeholder="Search Query" id="query" name="query" required> - <div class="uk-width-1-4"> - - </div> - <div class="uk-width-1-2"> - <input class="uk-button uk-button-primary uk-width-1-1" type="submit" id="search" value="Search" /> - </div> - - <input type="hidden" name="csrf_token" value="{{ csrf_token() }}"/> - </form> - </div> -{% endblock %}
\ No newline at end of file diff --git a/templates/wiki/search_results.html b/templates/wiki/search_results.html deleted file mode 100644 index 9b9ad946..00000000 --- a/templates/wiki/search_results.html +++ /dev/null @@ -1,39 +0,0 @@ -{% extends "wiki/base.html" %} -{% block title %}Wiki | Search Results{% endblock %} -{% block og_title %}Wiki | Search Results{% endblock %} -{% block og_description %}Search results{% endblock %} -{% block content %} - <div class="uk-container uk-container-small"> - {% if not pages %} - <h2 class="uk-title"> - Search - </h2> - <div class="uk-alert uk-alert-warning uk-text-center"> - <p> - Sorry, no results were found. Please check your query and try again. - </p> - </div> - {% else %} - <h2 class="uk-title"> - Search Results - </h2> - - {% for page in pages %} - <h4> - <a href="{{ url_for("wiki.page", page=page["slug"]) }}">{{ page.title }}</a> - (<span class="fira-code">{{ page.slug }}</span>) - </h4> - - {% for snippet in page["matches"] %} - <div class="quote"> - <i class="uk-icon far fa-ellipsis-h"></i> - <br /> - {{ snippet | safe }} - <br /> - <i class="uk-icon far fa-ellipsis-h"></i> - </div> - {% endfor %} - {% endfor %} - {% endif %} - </div> -{% endblock %}
\ No newline at end of file diff --git a/templates/wiki/special.html b/templates/wiki/special.html deleted file mode 100644 index 12e9cb18..00000000 --- a/templates/wiki/special.html +++ /dev/null @@ -1,17 +0,0 @@ -{% extends "wiki/base.html" %} -{% block title %}Wiki | Special Pages{% endblock %} -{% block og_title %}Wiki | Special Pages{% endblock %} -{% block og_description %}Wiki special pages, non-article informational pages{% endblock %} -{% block content %} - <div class="uk-container uk-container-small"> - <h2 class="uk-title"> - Special Pages - </h2> - - <ul> - <li><a href="{{ url_for("wiki.special.all_pages") }}"> - Special: All Pages - </a></li> - </ul> - </div> -{% endblock %}
\ No newline at end of file diff --git a/templates/wiki/special_all.html b/templates/wiki/special_all.html deleted file mode 100644 index 45a641a6..00000000 --- a/templates/wiki/special_all.html +++ /dev/null @@ -1,26 +0,0 @@ -{% extends "wiki/base.html" %} -{% block title %}Wiki | Special: All Pages{% endblock %} -{% block og_title %}Wiki | Special: All Pages{% endblock %} -{% block og_description %}A listing for all pages on the wiki{% endblock %} -{% block content %} - <div class="uk-container uk-container-small"> - <h2 class="uk-title"> - Special: All Pages - </h2> - <p class="uk-text-meta"> - A listing for all pages on the wiki - </p> - - {% for letter, pages in letters.items() %} - <h3 class="uk-heading-divider">{{ letter }}</h3> - - <ul> - {% for page in pages %} - <li><a href="{{ url_for("wiki.page", page=page.slug) }}"> - {{ page.title }} (<span class="fira-code">{{ page.slug }}</span>) - </a></li> - {% endfor %} - </ul> - {% endfor %} - </div> -{% endblock %}
\ No newline at end of file diff --git a/tests/__init__.py b/tests/__init__.py deleted file mode 100644 index 1f3ca1a4..00000000 --- a/tests/__init__.py +++ /dev/null @@ -1,42 +0,0 @@ -import os - -from flask import Blueprint -from flask_testing import TestCase - -os.environ["BOT_API_KEY"] = "abcdefg" # This is a constant, must be done first -os.environ["PAPERTRAIL_ADDRESS"] = 'localhost' # satisfies coverage -os.environ["DATADOG_ADDRESS"] = 'localhost' # satisfies coverage - -if "FLASK_DEBUG" in os.environ: - del os.environ["FLASK_DEBUG"] # Some unit tests fail if this is set - -from app import manager -from gunicorn_config import _when_ready as when_ready - -when_ready() - -manager.app.tests_blueprint = Blueprint("tests", __name__) -manager.load_views(manager.app.tests_blueprint, "pysite/views/tests") -manager.app.register_blueprint(manager.app.tests_blueprint) -app = manager.app - -app.config["WTF_CSRF_CHECK_DEFAULT"] = False - - -class SiteTest(TestCase): - """ Extend TestCase with flask app instantiation """ - - def create_app(self): - """ Add flask app configuration settings """ - server_name = 'pytest.local' - - app.config['TESTING'] = True - app.config['LIVESERVER_TIMEOUT'] = 10 - app.config['SERVER_NAME'] = server_name - app.config['API_SUBDOMAIN'] = f'http://api.{server_name}' - app.config['STAFF_SUBDOMAIN'] = f'http://staff.{server_name}' - app.config['WIKI_SUBDOMAIN'] = f'http://wiki.{server_name}' - app.config['TEST_HEADER'] = {'X-API-Key': 'abcdefg', 'Content-Type': 'application/json'} - app.allow_subdomain_redirects = True - - return app diff --git a/tests/test_api.py b/tests/test_api.py deleted file mode 100644 index b20dc0c5..00000000 --- a/tests/test_api.py +++ /dev/null @@ -1,25 +0,0 @@ -from tests import SiteTest, app - -class ApiEndpoints(SiteTest): - """ Test cases for the api subdomain """ - def test_api_unknown_route(self): - """ Check api unknown route """ - response = self.client.get('/', app.config['API_SUBDOMAIN']) - self.assertEqual(response.json, {'error_code': 0, 'error_message': 'Unknown API route'}) - self.assertEqual(response.status_code, 404) - - def test_api_healthcheck(self): - """ Check healthcheck url responds """ - response = self.client.get('/healthcheck', app.config['API_SUBDOMAIN']) - self.assertEqual(response.json, {'status': 'ok'}) - self.assertEqual(response.status_code, 200) - - def test_api_route_errors(self): - """ Check api route errors """ - from pysite.base_route import APIView - from pysite.constants import ErrorCodes - - av = APIView() - av.error(ErrorCodes.unauthorized) - av.error(ErrorCodes.bad_data_format) - diff --git a/tests/test_api_bot_bigbrother.py b/tests/test_api_bot_bigbrother.py deleted file mode 100644 index b1060e72..00000000 --- a/tests/test_api_bot_bigbrother.py +++ /dev/null @@ -1,152 +0,0 @@ -import json - -from tests import SiteTest, app - - -class EmptyDatabaseEndpointTests(SiteTest): - def test_api_docs_get_all(self): - response = self.client.get( - '/bot/bigbrother', - app.config['API_SUBDOMAIN'], - headers=app.config['TEST_HEADER'] - ) - self.assert200(response) - self.assertIsInstance(response.json, list) - - def test_fetching_single_entry_returns_404(self): - response = self.client.get( - '/bot/bigbrother?user_id=01932', - app.config['API_SUBDOMAIN'], - headers=app.config['TEST_HEADER'] - ) - self.assert404(response) - self.assertIsInstance(response.json['error_message'], str) - - -class AddingAnEntryEndpointTests(SiteTest): - GOOD_DATA = { - 'user_id': '42', - 'channel_id': '55' - } - GOOD_DATA_JSON = json.dumps(GOOD_DATA) - - def setUp(self): - response = self.client.post( - '/bot/bigbrother', - app.config['API_SUBDOMAIN'], - headers=app.config['TEST_HEADER'], - data=self.GOOD_DATA_JSON - ) - self.assertEqual(response.status_code, 204) - - def test_entry_is_in_all_entries(self): - response = self.client.get( - '/bot/bigbrother', - app.config['API_SUBDOMAIN'], - headers=app.config['TEST_HEADER'] - ) - self.assert200(response) - self.assertIn(self.GOOD_DATA, response.json) - - def test_can_fetch_entry_with_param_lookup(self): - response = self.client.get( - f'/bot/bigbrother?user_id={self.GOOD_DATA["user_id"]}', - app.config['API_SUBDOMAIN'], - headers=app.config['TEST_HEADER'] - ) - self.assert200(response) - self.assertEqual(response.json, self.GOOD_DATA) - - -class UpdatingAnEntryEndpointTests(SiteTest): - ORIGINAL_DATA = { - 'user_id': '300', - 'channel_id': '400' - } - ORIGINAL_DATA_JSON = json.dumps(ORIGINAL_DATA) - UPDATED_DATA = { - 'user_id': '300', - 'channel_id': '500' - } - UPDATED_DATA_JSON = json.dumps(UPDATED_DATA) - - def setUp(self): - response = self.client.post( - '/bot/bigbrother', - app.config['API_SUBDOMAIN'], - headers=app.config['TEST_HEADER'], - data=self.ORIGINAL_DATA_JSON - ) - self.assertEqual(response.status_code, 204) - - def test_can_update_data(self): - response = self.client.post( - '/bot/bigbrother', - app.config['API_SUBDOMAIN'], - headers=app.config['TEST_HEADER'], - data=self.UPDATED_DATA_JSON - ) - self.assertEqual(response.status_code, 204) - - -class DeletingAnEntryEndpointTests(SiteTest): - SAMPLE_DATA = { - 'user_id': '101', - 'channel_id': '202' - } - SAMPLE_DATA_JSON = json.dumps(SAMPLE_DATA) - - def setUp(self): - response = self.client.post( - '/bot/bigbrother', - app.config['API_SUBDOMAIN'], - headers=app.config['TEST_HEADER'], - data=self.SAMPLE_DATA_JSON - ) - self.assertEqual(response.status_code, 204) - - def test_delete_entry_returns_204(self): - response = self.client.delete( - f'/bot/bigbrother?user_id={self.SAMPLE_DATA["user_id"]}', - app.config['API_SUBDOMAIN'], - headers=app.config['TEST_HEADER'] - ) - self.assertEqual(response.status_code, 204) - - -class SchemaValidationTests(SiteTest): - def test_get_with_invalid_user_id_param_returns_400(self): - response = self.client.get( - '/bot/bigbrother?user_id=lemon-is-not-a-number', - app.config['API_SUBDOMAIN'], - headers=app.config['TEST_HEADER'] - ) - - self.assert400(response) - self.assertIsInstance(response.json['error_message'], str) - - def test_post_with_invalid_data_returns_400(self): - bad_data_json = json.dumps({ - 'user_id': "I'M A NUMBER I SWEAR", - 'channel_id': '42' - }) - - response = self.client.post( - '/bot/bigbrother', - app.config['API_SUBDOMAIN'], - headers=app.config['TEST_HEADER'], - data=bad_data_json - ) - - self.assert400(response) - self.assertIsInstance(response.json['error_message'], str) - - def test_delete_with_invalid_user_id_param_returns_400(self): - response = self.client.delete( - '/bot/bigbrother?user_id=totally-a-valid-number', - app.config['API_SUBDOMAIN'], - headers=app.config['TEST_HEADER'] - ) - - self.assert400(response) - self.assertIsInstance(response.json['error_message'], str) diff --git a/tests/test_api_bot_infractions.py b/tests/test_api_bot_infractions.py deleted file mode 100644 index 58453e9b..00000000 --- a/tests/test_api_bot_infractions.py +++ /dev/null @@ -1,134 +0,0 @@ -import json - -from tests import SiteTest, app - -TEST_USER_ID = "test" - - -class ApiBotInfractionsEndpoint(SiteTest): - - def test_infraction_create_invalid(self): - # Invalid infraction type - post_data_invalid_type = json.dumps( - {"type": "not_a_type", "reason": "test", "user_id": TEST_USER_ID, "actor_id": TEST_USER_ID} - ) - response = self.client.post("/bot/infractions", app.config["API_SUBDOMAIN"], - headers=app.config["TEST_HEADER"], - data=post_data_invalid_type) - self.assert400(response) - - def test_infraction_kick(self): - post_data_valid = json.dumps( - {"type": "kick", "reason": "test", "user_id": TEST_USER_ID, "actor_id": TEST_USER_ID} - ) - response = self.client.post("/bot/infractions", app.config["API_SUBDOMAIN"], - headers=app.config["TEST_HEADER"], - data=post_data_valid) - self.assert200(response) - self.assertTrue("infraction" in response.json) - self.assertTrue("id" in response.json["infraction"]) - infraction_id = response.json["infraction"]["id"] - response = self.client.get(f"/bot/infractions/id/{infraction_id}", app.config["API_SUBDOMAIN"], - headers=app.config["TEST_HEADER"]) - self.assert200(response) - self.assertTrue("infraction" in response.json) - self.assertTrue("id" in response.json["infraction"]) - self.assertEqual(response.json["infraction"]["id"], infraction_id) - self.assertTrue("active" in response.json["infraction"]) - self.assertFalse(response.json["infraction"]["active"]) - - def test_infraction_ban(self): - post_data_valid = json.dumps( - {"type": "ban", "reason": "baddie", "user_id": TEST_USER_ID, "actor_id": TEST_USER_ID} - ) - response = self.client.post("/bot/infractions", app.config["API_SUBDOMAIN"], - headers=app.config["TEST_HEADER"], - data=post_data_valid) - self.assert200(response) - self.assertTrue("infraction" in response.json) - self.assertTrue("id" in response.json["infraction"]) - infraction_id = response.json["infraction"]["id"] - - # Check if the ban is currently applied - response = self.client.get(f"/bot/infractions/user/{TEST_USER_ID}/ban/current", app.config["API_SUBDOMAIN"], - headers=app.config["TEST_HEADER"]) - self.assert200(response) - self.assertTrue("infraction" in response.json) - self.assertIsNotNone(response.json["infraction"]) - self.assertTrue("id" in response.json["infraction"]) - self.assertEqual(response.json["infraction"]["id"], infraction_id) - self.assertIsNone(response.json["infraction"]["expires_at"]) - self.assertTrue(response.json["infraction"]["active"]) - - # Update the expiration to 1d - patch_data_valid = json.dumps( - {"id": infraction_id, "duration": "1d"} - ) - response = self.client.patch("/bot/infractions", app.config["API_SUBDOMAIN"], - headers=app.config["TEST_HEADER"], - data=patch_data_valid) - self.assert200(response) - self.assertTrue("success" in response.json) - self.assertTrue("infraction" in response.json) - self.assertTrue(response.json["success"]) - self.assertIsNotNone(response.json["infraction"]["expires_at"]) - self.assertTrue(response.json["infraction"]["active"]) - - # Disable the ban - patch_data_valid = json.dumps( - {"id": infraction_id, "active": False} - ) - response = self.client.patch("/bot/infractions", app.config["API_SUBDOMAIN"], - headers=app.config["TEST_HEADER"], - data=patch_data_valid) - self.assert200(response) - self.assertTrue("success" in response.json) - self.assertTrue("infraction" in response.json) - self.assertTrue(response.json["success"]) - self.assertFalse(response.json["infraction"]["active"]) - - # Check if there is no active ban anymore - response = self.client.get(f"/bot/infractions/user/{TEST_USER_ID}/ban/current", app.config["API_SUBDOMAIN"], - headers=app.config["TEST_HEADER"]) - self.assert200(response) - self.assertTrue("infraction" in response.json) - self.assertIsNone(response.json["infraction"]) - - # Re-activate the ban - patch_data_valid = json.dumps( - {"id": infraction_id, "active": True} - ) - response = self.client.patch("/bot/infractions", app.config["API_SUBDOMAIN"], - headers=app.config["TEST_HEADER"], - data=patch_data_valid) - self.assert200(response) - self.assertTrue("success" in response.json) - self.assertTrue("infraction" in response.json) - self.assertTrue(response.json["success"]) - self.assertTrue(response.json["infraction"]["active"]) - - # Create a new ban - post_data_valid = json.dumps( - {"type": "ban", "reason": "baddie v2.0", "user_id": TEST_USER_ID, "actor_id": TEST_USER_ID} - ) - response = self.client.post("/bot/infractions", app.config["API_SUBDOMAIN"], - headers=app.config["TEST_HEADER"], - data=post_data_valid) - self.assert200(response) - self.assertTrue("infraction" in response.json) - self.assertTrue("id" in response.json["infraction"]) - new_infraction_id = response.json["infraction"]["id"] - - # Check if the old ban is now disabled - response = self.client.get(f"/bot/infractions/id/{infraction_id}", app.config["API_SUBDOMAIN"], - headers=app.config["TEST_HEADER"]) - self.assert200(response) - self.assertTrue("infraction" in response.json) - self.assertFalse(response.json["infraction"]["active"]) - - # Check if the current ban infraction is the new infraction - response = self.client.get(f"/bot/infractions/user/{TEST_USER_ID}/ban/current", app.config["API_SUBDOMAIN"], - headers=app.config["TEST_HEADER"]) - self.assert200(response) - self.assertTrue("infraction" in response.json) - self.assertEqual(response.json["infraction"]["id"], new_infraction_id) diff --git a/tests/test_api_bot_off_topic_names.py b/tests/test_api_bot_off_topic_names.py deleted file mode 100644 index 6227ddef..00000000 --- a/tests/test_api_bot_off_topic_names.py +++ /dev/null @@ -1,134 +0,0 @@ -"""Tests the `/api/bot/off-topic-names` endpoint.""" - -from tests import SiteTest, app - - -class EmptyDatabaseOffTopicEndpointTests(SiteTest): - """Tests fetching all entries from the endpoint with an empty database.""" - - def test_get_returns_empty_list(self): - response = self.client.get( - '/bot/off-topic-names', - app.config['API_SUBDOMAIN'], - headers=app.config['TEST_HEADER'] - ) - self.assert200(response) - self.assertEqual(response.json, []) - - -class AddingANameOffTopicEndpointTests(SiteTest): - """Tests adding a channel name to the database.""" - - def test_returns_400_on_bad_data(self): - response = self.client.post( - '/bot/off-topic-names?name=my%20TOTALLY%20VALID%20CHANNE%20NAME', - app.config['API_SUBDOMAIN'], - headers=app.config['TEST_HEADER'] - ) - self.assert400(response) - - def test_can_add_new_package(self): - response = self.client.post( - '/bot/off-topic-names?name=lemons-lemon-shop', - app.config['API_SUBDOMAIN'], - headers=app.config['TEST_HEADER'] - ) - self.assert200(response) - - -class AddingChannelNamesToDatabaseEndpointTests(SiteTest): - """Tests fetching names from the database with GET.""" - - CHANNEL_NAME = 'bisks-disks' - - def setUp(self): - response = self.client.post( - f'/bot/off-topic-names?name={self.CHANNEL_NAME}', - app.config['API_SUBDOMAIN'], - headers=app.config['TEST_HEADER'] - ) - self.assert200(response) - - def test_name_is_in_all_entries(self): - response = self.client.get( - '/bot/off-topic-names', - app.config['API_SUBDOMAIN'], - headers=app.config['TEST_HEADER'] - ) - self.assert200(response) - self.assertIn(self.CHANNEL_NAME, response.json) - - -class AllowsNumbersInNames(SiteTest): - """Tests that the site allows names with numbers in them.""" - - def test_allows_numbers_in_names(self): - response = self.client.post( - f'/bot/off-topic-names?name=totallynot42', - app.config['API_SUBDOMAIN'], - headers=app.config['TEST_HEADER'] - ) - self.assert200(response) - - -class RandomSampleEndpointTests(SiteTest): - """Tests fetching random names from the website with GET.""" - - CHANNEL_NAME_1 = 'chicken-shed' - CHANNEL_NAME_2 = 'robot-kindergarten' - - def setUp(self): - response = self.client.post( - f'/bot/off-topic-names?name={self.CHANNEL_NAME_1}', - app.config['API_SUBDOMAIN'], - headers=app.config['TEST_HEADER'] - ) - self.assert200(response) - - response = self.client.post( - f'/bot/off-topic-names?name={self.CHANNEL_NAME_2}', - app.config['API_SUBDOMAIN'], - headers=app.config['TEST_HEADER'] - ) - self.assert200(response) - - def test_returns_limited_names_with_random_query_param(self): - response = self.client.get( - '/bot/off-topic-names?random_items=1', - app.config['API_SUBDOMAIN'], - headers=app.config['TEST_HEADER'] - ) - self.assert200(response) - self.assertEqual(len(response.json), 1) - - -class DeletingANameEndpointTests(SiteTest): - """Tests deleting a name from the database using DELETE.""" - - CHANNEL_NAME = 'duck-goes-meow' - - def setUp(self): - response = self.client.post( - f'/bot/off-topic-names?name={self.CHANNEL_NAME}', - app.config['API_SUBDOMAIN'], - headers=app.config['TEST_HEADER'] - ) - self.assert200(response) - - def test_deleting_random_name_returns_deleted_0(self): - response = self.client.delete( - '/bot/off-topic-names?name=my-totally-random-name', - app.config['API_SUBDOMAIN'], - headers=app.config['TEST_HEADER'] - ) - self.assert200(response) - self.assertEqual(response.json['deleted'], 0) - - def test_deleting_channel_name_returns_deleted_1(self): - response = self.client.delete( - f'/bot/off-topic-names?name={self.CHANNEL_NAME}', - app.config['API_SUBDOMAIN'], - headers=app.config['TEST_HEADER'] - ) - self.assert200(response) - self.assertEqual(response.json['deleted'], 1) diff --git a/tests/test_api_bot_snake.py b/tests/test_api_bot_snake.py deleted file mode 100644 index fcc18409..00000000 --- a/tests/test_api_bot_snake.py +++ /dev/null @@ -1,64 +0,0 @@ -"""Tests the `/api/bot/snake_` endpoints.""" - -from tests import SiteTest, app - - -class TestSnakeFactsAPI(SiteTest): - """GET method - get snake fact""" - - def test_snake_facts(self): - response = self.client.get( - '/bot/snake_facts', - app.config['API_SUBDOMAIN'], - headers=app.config['TEST_HEADER'] - ) - self.assertEqual(response.status_code, 200) - self.assertEqual(type(response.json), str) - - -class TestSnakeIdiomAPI(SiteTest): - """GET method - get snake idiom""" - - def test_snake_idiom(self): - response = self.client.get( - '/bot/snake_idioms', - app.config['API_SUBDOMAIN'], - headers=app.config['TEST_HEADER'] - ) - self.assertEqual(response.status_code, 200) - self.assertEqual(type(response.json), str) - - -class TestSnakeQuizAPI(SiteTest): - """GET method - get snake quiz""" - - def test_snake_quiz(self): - response = self.client.get( - '/bot/snake_quiz', - app.config['API_SUBDOMAIN'], - headers=app.config['TEST_HEADER'] - ) - self.assertEqual(response.status_code, 200) - self.assertEqual(type(response.json), dict) - - -class TestSnakeNameAPI(SiteTest): - """GET method - get a single snake name, or all of them.""" - - def test_snake_names(self): - response = self.client.get( - '/bot/snake_names', - app.config['API_SUBDOMAIN'], - headers=app.config['TEST_HEADER'] - ) - self.assertEqual(response.status_code, 200) - self.assertEqual(type(response.json), dict) - - def test_snake_names_all(self): - response = self.client.get( - '/bot/snake_names?get_all=True', - app.config['API_SUBDOMAIN'], - headers=app.config['TEST_HEADER'] - ) - self.assertEqual(response.status_code, 200) - self.assertEqual(type(response.json), list) diff --git a/tests/test_api_bot_tags.py b/tests/test_api_bot_tags.py deleted file mode 100644 index fa06e0fa..00000000 --- a/tests/test_api_bot_tags.py +++ /dev/null @@ -1,72 +0,0 @@ -import json -from tests import SiteTest, app - - -class ApiBotTagsEndpoint(SiteTest): - - def test_api_tags(self): - """ Check tag API """ - - post_data = json.dumps({ - 'tag_name': 'testing', - 'tag_content': 'testing' - }) - - get_data = json.dumps({ - 'tag_name': 'testing' - }) - - bad_data = json.dumps({ - 'not_a_valid_key': 'gross_faceman' - }) - - # POST method - no headers - response = self.client.post('/bot/tags', app.config['API_SUBDOMAIN']) - self.assertEqual(response.status_code, 401) - - # POST method - no data - response = self.client.post('/bot/tags', app.config['API_SUBDOMAIN'], headers=app.config['TEST_HEADER']) - self.assertEqual(response.status_code, 400) - - # POST method - bad data - response = self.client.post('/bot/tags', app.config['API_SUBDOMAIN'], headers=app.config['TEST_HEADER'], data=bad_data) - self.assertEqual(response.status_code, 400) - - # POST method - save tag - response = self.client.post('/bot/tags', app.config['API_SUBDOMAIN'], headers=app.config['TEST_HEADER'], data=post_data) - self.assertEqual(response.status_code, 200) - self.assertEqual(response.json, {"success": True}) - - # GET method - no headers - response = self.client.get('/bot/tags', app.config['API_SUBDOMAIN']) - self.assertEqual(response.status_code, 401) - - # GET method - get all tags - response = self.client.get('/bot/tags', app.config['API_SUBDOMAIN'], headers=app.config['TEST_HEADER']) - self.assertEqual(response.status_code, 200) - self.assertEqual(type(response.json), list) - - # GET method - get specific tag - response = self.client.get('/bot/tags?tag_name=testing', app.config['API_SUBDOMAIN'], headers=app.config['TEST_HEADER']) - self.assertEqual(response.json, { - 'tag_content': 'testing', - 'tag_name': 'testing' - }) - self.assertEqual(response.status_code, 200) - - # DELETE method - no headers - response = self.client.delete('/bot/tags', app.config['API_SUBDOMAIN']) - self.assertEqual(response.status_code, 401) - - # DELETE method - no data - response = self.client.delete('/bot/tags', app.config['API_SUBDOMAIN'], headers=app.config['TEST_HEADER']) - self.assertEqual(response.status_code, 400) - - # DELETE method - bad data - response = self.client.delete('/bot/tags', app.config['API_SUBDOMAIN'], headers=app.config['TEST_HEADER'], data=bad_data) - self.assertEqual(response.status_code, 400) - - # DELETE method - delete the testing tag - response = self.client.delete('/bot/tags', app.config['API_SUBDOMAIN'], headers=app.config['TEST_HEADER'], data=get_data) - self.assertEqual(response.status_code, 200) - self.assertEqual(response.json, {"success": True}) diff --git a/tests/test_api_bot_users.py b/tests/test_api_bot_users.py deleted file mode 100644 index eda3713e..00000000 --- a/tests/test_api_bot_users.py +++ /dev/null @@ -1,28 +0,0 @@ -import json -from tests import SiteTest, app - - -class ApiBotUsersEndpoint(SiteTest): - def test_api_user(self): - """ Check insert user """ - single_data = json.dumps( - {'user_id': "1234", 'roles': ["5678"], "username": "test", "discriminator": "0000", "avatar": "http://some/url"} - ) - list_data = json.dumps([ - {'user_id': "1234", 'roles': ["5678"], "username": "test", "discriminator": "0000", "avatar": "http://some/url"} - ]) - - response = self.client.get('/bot/users?user_id=1234', app.config['API_SUBDOMAIN'], headers=app.config['TEST_HEADER']) - self.assertTrue("data" in response.json) - - response = self.client.post('/bot/users', app.config['API_SUBDOMAIN'], headers=app.config['TEST_HEADER'], data=single_data) - self.assertTrue("success" in response.json) - - response = self.client.post('/bot/users/complete', app.config['API_SUBDOMAIN'], headers=app.config['TEST_HEADER'], data=single_data) - self.assertTrue("inserted" in response.json) - - response = self.client.post('/bot/users', app.config['API_SUBDOMAIN'], headers=app.config['TEST_HEADER'], data=list_data) - self.assertTrue("success" in response.json) - - response = self.client.post('/bot/users/complete', app.config['API_SUBDOMAIN'], headers=app.config['TEST_HEADER'], data=list_data) - self.assertTrue("inserted" in response.json) diff --git a/tests/test_api_docs.py b/tests/test_api_docs.py deleted file mode 100644 index 945a73bc..00000000 --- a/tests/test_api_docs.py +++ /dev/null @@ -1,95 +0,0 @@ -import json - -from tests import SiteTest, app - - -class ApiDocsEndpoint(SiteTest): - """ Check documentation metadata API """ - - bad_data = json.dumps({'package': 'whatever', 'correct format': False}) - unknown_package_json = json.dumps({'package': "whatever"}) - - def test_api_docs_get_all(self): - """ GET - all entries """ - response = self.client.get('/bot/docs', app.config['API_SUBDOMAIN'], headers=app.config['TEST_HEADER']) - self.assertEqual(response.status_code, 200) - self.assertIsInstance(response.json, list) - - def test_api_docs_get_unknown(self): - """ GET - unknown package """ - response = self.client.get('/bot/docs?package=whatever', app.config['API_SUBDOMAIN'], headers=app.config['TEST_HEADER']) - self.assertEqual(response.status_code, 200) - self.assertEqual(response.json, []) - - def test_api_docs_get_multi_unknown(self): - """ GET - multiple unknown packages """ - response = self.client.get('/bot/docs?package=whatever&package=everwhat', app.config['API_SUBDOMAIN'], headers=app.config['TEST_HEADER']) - self.assertEqual(response.status_code, 200) - self.assertIsInstance(response.json, list) - - def test_api_docs_post_no_data(self): - """ POST - no data """ - response = self.client.post('/bot/docs', app.config['API_SUBDOMAIN'], headers=app.config['TEST_HEADER']) - self.assertEqual(response.status_code, 400) - - def test_api_docs_post_bad_data(self): - """ POST - malformed data """ - response = self.client.post('/bot/docs', app.config['API_SUBDOMAIN'], headers=app.config['TEST_HEADER'], data=self.bad_data) - self.assertEqual(response.status_code, 400) - - def test_api_docs_delete_bad(self): - """ DELETE - missing request body """ - response = self.client.delete('/bot/docs', app.config['API_SUBDOMAIN'], headers=app.config['TEST_HEADER']) - self.assertEqual(response.status_code, 400) - - def test_api_docs_delete_unknown(self): - """ DELETE - unknown package """ - response = self.client.delete('/bot/docs', app.config['API_SUBDOMAIN'], headers=app.config['TEST_HEADER'], data=self.unknown_package_json) - self.assertEqual(response.status_code, 200) - self.assertEqual(response.json['deleted'], 0) - - -class SinglePackageApiDocsEndpointTests(SiteTest): - """ Test the API docs endpoint with a single package added """ - - valid_data = { - 'package': "lemonapi", - 'base_url': "http://example.com/", - 'inventory_url': "http://example.com/object.inv" - } - delete_data_json = json.dumps({'package': valid_data['package']}) - valid_data_json = json.dumps(valid_data) - - def setUp(self): - """ POST valid data to the server for use in this test case """ - response = self.client.post('/bot/docs', app.config['API_SUBDOMAIN'], headers=app.config['TEST_HEADER'], data=self.valid_data_json) - self.assertEqual(response.status_code, 200) - self.assertEqual(response.json, {"success": True}) - - def test_api_docs_get_valid(self): - """ GET - added package is in all entries """ - response = self.client.get('/bot/docs', app.config['API_SUBDOMAIN'], headers=app.config['TEST_HEADER']) - self.assertEqual(response.status_code, 200) - self.assertIn(self.valid_data, response.json) - - def test_api_docs_get_detail(self): - """ GET - added package detail """ - response = self.client.get( - f'/bot/docs?package={self.valid_data["package"]}', app.config['API_SUBDOMAIN'], headers=app.config['TEST_HEADER'] - ) - self.assertEqual(response.status_code, 200) - self.assertEqual(response.json, [self.valid_data]) - - def test_api_docs_get_partly_known(self): - """ GET - added package is the only package for query with another unknown package """ - response = self.client.get( - f'/bot/docs?package={self.valid_data["package"]}&package=whatever', app.config['API_SUBDOMAIN'], headers=app.config['TEST_HEADER'] - ) - self.assertEqual(response.status_code, 200) - self.assertEqual(response.json, [self.valid_data]) - - def test_api_docs_delete_all(self): - """ DELETE - added package """ - response = self.client.delete('/bot/docs', app.config['API_SUBDOMAIN'], headers=app.config['TEST_HEADER'], data=self.delete_data_json) - self.assertEqual(response.status_code, 200) - self.assertEqual(response.json['deleted'], 1) diff --git a/tests/test_clean_logs.py b/tests/test_clean_logs.py deleted file mode 100644 index 1c3449b4..00000000 --- a/tests/test_clean_logs.py +++ /dev/null @@ -1,74 +0,0 @@ -"""Tests the `/api/bot/clean` endpoint.""" -import json - -from tests import SiteTest, app - - -class TestCleanLogAPI(SiteTest): - """ - Tests submitting a clean log and - verifies that we get a UUID in return. - - Also ensures that we get a 400 if we send in bad data. - """ - - def test_returns_400_on_bad_data(self): - bad_data = json.dumps({ - "scubfire": "testiclaes" - }) - - response = self.client.post( - '/bot/clean', - app.config['API_SUBDOMAIN'], - headers=app.config['TEST_HEADER'], - data=bad_data - ) - self.assert400(response) - - def test_submit_clean_log(self): - good_data = json.dumps({ - "log_data": [ - { - "author": "something", - "user_id": "12345151", - "role_id": "4818413", - "content": "testy", - "timestamp": "this way comes", - "embeds": [{"fire":"nanny"}], - "attachments": ["<Attachment>"], - } - ] - }) - - response = self.client.post( - '/bot/clean', - app.config['API_SUBDOMAIN'], - headers=app.config['TEST_HEADER'], - data=good_data - ) - - log_id = response.json.get("log_id") - - self.assert200(response) - self.assertIsNotNone(log_id) - self.assertGreater(len(log_id), 2) - self.assertEqual(type(log_id), str) - - -class TestCleanLogFrontEnd(SiteTest): - """ - Tests the frontend for - viewing the clean logs. - - Best I can do with our current - system is check if I'm redirected, - since this is behind OAuth. - """ - - def test_clean_log_frontend_returns_302(self): - response = self.client.get( - f'/bot/clean_logs/1', - 'http://pytest.local' - ) - - self.assertEqual(response.status_code, 302)
\ No newline at end of file diff --git a/tests/test_database.py b/tests/test_database.py deleted file mode 100644 index 237cd68d..00000000 --- a/tests/test_database.py +++ /dev/null @@ -1,31 +0,0 @@ -from tests import SiteTest - -class DatabaseTests(SiteTest): - """ Test cases for the database module """ - def test_table_actions(self): - import string - import secrets - from pysite.database import RethinkDB - - alphabet = string.ascii_letters - generated_table_name = ''.join(secrets.choice(alphabet) for i in range(8)) - - rdb = RethinkDB() - # Create table name and expect it to work - result = rdb.create_table(generated_table_name) - self.assertEqual(result, True) - - # Create the same table name and expect it to already exist - result = rdb.create_table(generated_table_name) - self.assertEqual(result, False) - - # Drop table and expect it to work - result = rdb.drop_table(generated_table_name) - self.assertEqual(result, True) - - # Drop the same table and expect it to already be gone - result = rdb.drop_table(generated_table_name) - self.assertEqual(result, False) - - # This is to get some more code coverage - self.assertEqual(rdb.teardown_request('_'), None) diff --git a/tests/test_decorators.py b/tests/test_decorators.py deleted file mode 100644 index 5a3915b8..00000000 --- a/tests/test_decorators.py +++ /dev/null @@ -1,48 +0,0 @@ -from schema import Schema -from werkzeug.datastructures import ImmutableMultiDict -from werkzeug.exceptions import BadRequest - -from pysite.constants import ValidationTypes -from pysite.decorators import api_params -from tests import SiteTest - - -class DuckRequest: - """A quacking request with the `args` parameter used in schema validation.""" - - def __init__(self, args): - self.args = args - - -class DecoratorTests(SiteTest): - def test_decorator_api_json(self): - """ Check the json validation decorator """ - SCHEMA = Schema([{"user_id": int, "role": int}]) - - @api_params(schema=SCHEMA, validation_type=ValidationTypes.json) - def try_json_type(data): - return data - - with self.assertRaises(AttributeError): - try_json_type("not json") - - def test_decorator_params(self): - """ Check the params validation decorator """ - - response = self.client.post('/testparams?test=params') - - self.assertEqual(response.status_code, 200) - self.assertEqual(response.json, [{'test': 'params'}]) - - def test_duplicate_params_with_dict_schema_raises_400(self): - """Check that duplicate parameters with a dictionary schema return 400 Bad Request""" - - response = self.client.get('/testparams?segfault=yes&segfault=no') - self.assert400(response) - - def test_single_params_with_dict_schema(self): - """Single parameters with a dictionary schema and `allow_duplicate_keys=False` return 200""" - - response = self.client.get('/testparams?segfault=yes') - self.assert200(response) - self.assertEqual(response.json, {'segfault': 'yes'}) diff --git a/tests/test_jams.py b/tests/test_jams.py deleted file mode 100644 index cf0d8952..00000000 --- a/tests/test_jams.py +++ /dev/null @@ -1,11 +0,0 @@ -from tests import SiteTest, app - -class JamsEndpoint(SiteTest): - """ Test cases for the root endpoint and error handling """ - - def test_jams_page(self): - """ Check the jams path responds with 200 OK """ - response = self.client.get('/jams', 'http://'+app.config['SERVER_NAME']) - self.assertEqual(response.status_code, 200) - - diff --git a/tests/test_mixins.py b/tests/test_mixins.py deleted file mode 100644 index 27e61b22..00000000 --- a/tests/test_mixins.py +++ /dev/null @@ -1,66 +0,0 @@ -import os -from tests import SiteTest, manager - -class MixinTests(SiteTest): - """ Test cases for mixins """ - - def test_handler_5xx(self): - """ Check error view returns error message """ - from werkzeug.exceptions import InternalServerError - from pysite.views.error_handlers import http_5xx - - error_view = http_5xx.Error500View() - error_message = error_view.get(InternalServerError) - self.assertEqual(error_message[1], 500) - - def test_route_view_runtime_error(self): - """ Check that wrong values for route view setup raises runtime error """ - from pysite.base_route import RouteView - - rv = RouteView() - - with self.assertRaises(RuntimeError): - rv.setup(manager, 'sdfsdf') - - def test_oauth_property(self): - """ Make sure the oauth property works""" - from flask import Blueprint - - from pysite.route_manager import RouteView - from pysite.oauth import OAuthBackend - - class TestRoute(RouteView): - name = "test" - path = "/test" - - tr = TestRoute() - tr.setup(manager, Blueprint("test", "test_name")) - self.assertIsInstance(tr.oauth, OAuthBackend) - - def test_user_data_property(self): - """ Make sure the user_data property works""" - from flask import Blueprint - - from pysite.route_manager import RouteView - - class TestRoute(RouteView): - name = "test" - path = "/test" - - tr = TestRoute() - tr.setup(manager, Blueprint("test", "test_name")) - self.assertIsNone(tr.user_data) - - def test_logged_in_property(self): - """ Make sure the user_data property works""" - from flask import Blueprint - - from pysite.route_manager import RouteView - - class TestRoute(RouteView): - name = "test" - path = "/test" - - tr = TestRoute() - tr.setup(manager, Blueprint("test", "test_name")) - self.assertFalse(tr.logged_in) diff --git a/tests/test_oauth_backend.py b/tests/test_oauth_backend.py deleted file mode 100644 index 473f5c54..00000000 --- a/tests/test_oauth_backend.py +++ /dev/null @@ -1,39 +0,0 @@ -from tests import SiteTest, manager - -class TestOAuthBackend(SiteTest): - """ Test cases for the oauth.py file """ - - def test_get(self): - """ Make sure the get function returns nothing """ - self.assertIsNone(manager.oauth_backend.get()) - - def test_delete(self): - """ Make sure the delete function returns nothing """ - self.assertIsNone(manager.oauth_backend.delete(None)) - - def test_logout(self): - """ Make sure at least apart of logout is working :/ """ - self.assertIsNone(manager.oauth_backend.logout()) - - def test_add_user(self): - """ Make sure function adds values to database and session """ - from flask import session - - from pysite.constants import OAUTH_DATABASE - - sess_id = "hey bro wazup" - fake_token = {"access_token": "access_token", "id": sess_id, "refresh_token": "refresh_token", "expires_at": 5} - fake_user = {"id": 1235678987654321, "username": "Zwacky", "discriminator": "#6660"} - manager.db.conn = manager.db.get_connection() - manager.oauth_backend.add_user(fake_token, fake_user, sess_id) - - self.assertEqual(sess_id, session["session_id"]) - fake_token["snowflake"] = fake_user["id"] - fake_user["user_id"] = fake_user["id"] - del fake_user["id"] - self.assertEqual(fake_token, manager.db.get(OAUTH_DATABASE, sess_id)) - self.assertEqual(fake_user, manager.db.get("users", fake_user["user_id"])) - - manager.db.delete(OAUTH_DATABASE, sess_id) - manager.db.delete("users", fake_user["user_id"]) - manager.db.teardown_request(None) diff --git a/tests/test_roots.py b/tests/test_roots.py deleted file mode 100644 index 1b270178..00000000 --- a/tests/test_roots.py +++ /dev/null @@ -1,85 +0,0 @@ -from tests import SiteTest -from pysite.constants import DISCORD_OAUTH_REDIRECT -from pysite.constants import DISCORD_OAUTH_AUTHORIZED -from pysite.constants import ERROR_DESCRIPTIONS - - -class RootEndpoint(SiteTest): - """ Test cases for the root endpoint and error handling """ - - def test_index(self): - """ Check the root path responds with 200 OK """ - response = self.client.get('/', 'http://pytest.local') - self.assertEqual(response.status_code, 200) - - def test_info_index(self): - """ Check the info index path responds with a 301 """ - response = self.client.get('/info') - self.assertEqual(response.status_code, 301) - - def test_info_help(self): - """ Check the info help path responds with 200 OK """ - response = self.client.get('/info/help') - self.assertEqual(response.status_code, 200) - - def test_info_resources(self): - """ Check the info resources path responds with 200 OK """ - response = self.client.get('/info/resources') - self.assertEqual(response.status_code, 200) - - def test_info_resources_json(self): - """ Check the resources JSON loads correctly """ - response = self.client.get('/static/resources.json') - self.assertEqual(response.status_code, 200) - self.assertIsInstance(response.json, dict) - - def test_info_rules(self): - """ Check the info rules path responds with 200 OK """ - response = self.client.get('/info/help') - self.assertEqual(response.status_code, 200) - - def test_not_found(self): - """ Check paths without handlers returns 404 Not Found """ - response = self.client.get('/nonexistentpath') - self.assertEqual(response.status_code, 404) - - def test_error(self): - """ Check the error pages """ - for code in ERROR_DESCRIPTIONS.keys(): - response = self.client.get(f'/error/{code}') - self.assertEqual(response.status_code, code) - - def test_invite(self): - """ Check invite redirects """ - response = self.client.get('/invite') - self.assertEqual(response.status_code, 302) - - def test_ws_test(self): - """ Check ws_test responds """ - response = self.client.get('/ws_test') - self.assertEqual(response.status_code, 200) - - def test_oauth_redirects(self): - """ Check oauth redirects """ - response = self.client.get(DISCORD_OAUTH_REDIRECT) - self.assertEqual(response.status_code, 302) - - def test_oauth_logout(self): - """ Check oauth redirects """ - response = self.client.get('/auth/logout') - self.assertEqual(response.status_code, 302) - - def test_oauth_authorized(self): - """ Check oauth authorization """ - response = self.client.get(DISCORD_OAUTH_AUTHORIZED) - self.assertEqual(response.status_code, 302) - - def test_stats_redirect(self): - """ Check stats path redirects """ - response = self.client.get('/stats') - self.assertEqual(response.status_code, 302) - - def test_500_easter_egg(self): - """ Check the status of the /500 page""" - response = self.client.get("/500") - self.assertEqual(response.status_code, 500) diff --git a/tests/test_rst.py b/tests/test_rst.py deleted file mode 100644 index d6328bc4..00000000 --- a/tests/test_rst.py +++ /dev/null @@ -1,11 +0,0 @@ -import os -import json -from tests import SiteTest, app - -class RstEndpoints(SiteTest): - """ Test cases for staff subdomain """ - - def test_staff_view(self): - """ Check staff view redirects """ - response = self.client.get('/', "http://"+app.config['SERVER_NAME']) - self.assertEqual(response.status_code, 200) diff --git a/tests/test_staff.py b/tests/test_staff.py deleted file mode 100644 index bc911b0c..00000000 --- a/tests/test_staff.py +++ /dev/null @@ -1,15 +0,0 @@ -from tests import SiteTest, app - - -class StaffEndpoints(SiteTest): - """ Test cases for staff subdomain """ - - def test_staff_view(self): - """ Check staff view redirects """ - response = self.client.get('/', app.config['STAFF_SUBDOMAIN']) - self.assertEqual(response.status_code, 302) - - def test_jams_infractions(self): - """ Check staff jams infractions view redirects """ - response = self.client.get('/jams/infractions', app.config['STAFF_SUBDOMAIN']) - self.assertEqual(response.status_code, 302) diff --git a/tests/test_utilities.py b/tests/test_utilities.py deleted file mode 100644 index 61a480e2..00000000 --- a/tests/test_utilities.py +++ /dev/null @@ -1,25 +0,0 @@ -from tests import SiteTest, manager - -class Utilities(SiteTest): - """ Test cases for internal utility code """ - def test_error_view_runtime_error(self): - """ Check that wrong values for error view setup raises runtime error """ - import pysite.base_route - - ev = pysite.base_route.ErrorView() - - with self.assertRaises(RuntimeError): - ev.setup(manager, 'sdfsdf') - - def test_websocket_callback(self): - """ Check that websocket default callbacks work """ - import pysite.websockets - - class TestWS(pysite.websockets.WS): - pass - - try: - TestWS(None).on_message("test") - return False - except NotImplementedError: - return True diff --git a/tests/test_utils.py b/tests/test_utils.py deleted file mode 100644 index 87c8c186..00000000 --- a/tests/test_utils.py +++ /dev/null @@ -1,73 +0,0 @@ -from datetime import datetime, timedelta, timezone - -from tests import SiteTest -from pysite.utils.time import is_expired, parse_duration - - -class DurationParsingTests(SiteTest): - """Tests the `parse_duration` method provided by `pysite.utils.time`.""" - - SIMPLE_DURATION_STRINGS = ( - ('42s', timedelta(seconds=42)), - ('12m', timedelta(minutes=12)), - ('20h', timedelta(hours=20)), - ('7d', timedelta(days=7)), - ('2w', timedelta(weeks=2)) - ) - COMBINED_DURATION_STRINGS = ( - ('12m30s', timedelta(minutes=12, seconds=30)), - ('20h5m', timedelta(hours=20, minutes=5)), - ('7d10h12s', timedelta(days=7, hours=10, seconds=12)) - ) - - def test_simple_duration_string_parsing(self): - for duration_string, added_delta in self.SIMPLE_DURATION_STRINGS: - timezone_aware_now = datetime.now(timezone.utc) - self.assertAlmostEqual( - parse_duration(duration_string).timestamp(), - (timezone_aware_now + added_delta).timestamp(), - places=-1 # Being off by < 10 seconds is acceptable - ) - - def test_combined_duration_string_parsing(self): - for duration_string, added_delta in self.COMBINED_DURATION_STRINGS: - timezone_aware_now = datetime.now(timezone.utc) - self.assertAlmostEqual( - parse_duration(duration_string).timestamp(), - (timezone_aware_now + added_delta).timestamp(), - places=-1 # Being off by < 10 seconds is acceptable - ) - - def test_empty_duration_raises_valueerror(self): - with self.assertRaises(ValueError): - parse_duration('') - - def test_unknown_char_raises_valueerror(self): - with self.assertRaises(ValueError): - parse_duration('12l') - - def test_valid_unit_without_digits_raises_valueerror(self): - with self.assertRaises(ValueError): - parse_duration('s') - - -class ExpiryTests(SiteTest): - """Tests the `is_expired` method provided by `pysite.utils.time`.""" - - EXPIRY_DELTAS = ( - timedelta(seconds=30), - timedelta(minutes=12), - timedelta(hours=20), - timedelta(days=5), - timedelta(weeks=7) - ) - - def test_datetimes_in_the_past_are_expired(self): - for delta in self.EXPIRY_DELTAS: - date = datetime.now(timezone.utc) - delta - self.assertTrue(is_expired(date)) - - def test_datetimes_in_the_future_are_not_expired(self): - for delta in self.EXPIRY_DELTAS: - date = datetime.now(timezone.utc) + delta - self.assertFalse(is_expired(date)) diff --git a/tests/test_websocket.py b/tests/test_websocket.py deleted file mode 100644 index d8a616bf..00000000 --- a/tests/test_websocket.py +++ /dev/null @@ -1,12 +0,0 @@ -from tests import SiteTest - -class TestWebsocketEcho(SiteTest): - """ Test cases for the echo endpoint """ - def testEcho(self): - """ Check rudimentary websockets handlers work """ - from geventwebsocket.websocket import WebSocket - from pysite.views.ws.echo import EchoWebsocket - ew = EchoWebsocket(WebSocket) - ew.on_open() - ew.on_message('message') - ew.on_close() diff --git a/tests/test_wiki.py b/tests/test_wiki.py deleted file mode 100644 index e16152a1..00000000 --- a/tests/test_wiki.py +++ /dev/null @@ -1,34 +0,0 @@ -import os -from tests import SiteTest, app - -class WikiEndpoints(SiteTest): - """ Test cases for the wiki subdomain """ - def test_wiki_edit(self): - """Test that the wiki edit page redirects to login""" - response = self.client.get("/edit/page", app.config['WIKI_SUBDOMAIN']) - self.assertEqual(response.status_code, 302) - - def test_wiki_edit_post_empty_request(self): - """Empty request should redirect to login""" - response = self.client.post("/edit/page", app.config['WIKI_SUBDOMAIN']) - self.assertEqual(response.status_code, 302) - - def test_wiki_history(self): - """Test the history show""" - response = self.client.get("/history/show/blahblah-non-existant-page", app.config['WIKI_SUBDOMAIN']) - self.assertEqual(response.status_code, 404) # Test that unknown routes 404 - - def test_wiki_diff(self): - """Test whether invalid revision IDs error""" - response = self.client.get("/history/compare/ABC/XYZ", app.config['WIKI_SUBDOMAIN']) - self.assertEqual(response.status_code, 404) # Test that unknown revisions 404 - - def test_wiki_special(self): - """Test whether invalid revision IDs error""" - response = self.client.get("/special", app.config['WIKI_SUBDOMAIN']) - self.assertEqual(response.status_code, 200) - - def test_wiki_special_all_pages(self): - """Test whether invalid revision IDs error""" - response = self.client.get("/special/all_pages", app.config['WIKI_SUBDOMAIN']) - self.assertEqual(response.status_code, 200) @@ -1,6 +1,6 @@ [flake8] max-line-length=120 -application_import_names=pysite -ignore=P102,B311,W503,E226,S311 +application_import_names=pydis_django +ignore=P102,B311,W503,E226,S311,E241 exclude=__pycache__, venv, .venv, tests import-order-style=pycharm |